Snap for 12925942 from a8b1bc513239738e14587441b2730b484ebb9391 to busytown-mac-infra-release
Change-Id: Ie439a9c2c1e4d933e92b7c652b9c0c6b62ed265a
diff --git a/.ci/requirements-fonttools.txt b/.ci/requirements-fonttools.txt
index a020a2b..eecabbc 100644
--- a/.ci/requirements-fonttools.txt
+++ b/.ci/requirements-fonttools.txt
@@ -4,53 +4,55 @@
#
# pip-compile --generate-hashes .ci/requirements-fonttools.in
#
-fonttools==4.54.1 \
- --hash=sha256:07e005dc454eee1cc60105d6a29593459a06321c21897f769a281ff2d08939f6 \
- --hash=sha256:0a911591200114969befa7f2cb74ac148bce5a91df5645443371aba6d222e263 \
- --hash=sha256:0d1d353ef198c422515a3e974a1e8d5b304cd54a4c2eebcae708e37cd9eeffb1 \
- --hash=sha256:0e88e3018ac809b9662615072dcd6b84dca4c2d991c6d66e1970a112503bba7e \
- --hash=sha256:1d152d1be65652fc65e695e5619e0aa0982295a95a9b29b52b85775243c06556 \
- --hash=sha256:262705b1663f18c04250bd1242b0515d3bbae177bee7752be67c979b7d47f43d \
- --hash=sha256:278913a168f90d53378c20c23b80f4e599dca62fbffae4cc620c8eed476b723e \
- --hash=sha256:301540e89cf4ce89d462eb23a89464fef50915255ece765d10eee8b2bf9d75b2 \
- --hash=sha256:31c32d7d4b0958600eac75eaf524b7b7cb68d3a8c196635252b7a2c30d80e986 \
- --hash=sha256:357cacb988a18aace66e5e55fe1247f2ee706e01debc4b1a20d77400354cddeb \
- --hash=sha256:37cddd62d83dc4f72f7c3f3c2bcf2697e89a30efb152079896544a93907733bd \
- --hash=sha256:41bb0b250c8132b2fcac148e2e9198e62ff06f3cc472065dff839327945c5882 \
- --hash=sha256:4aa4817f0031206e637d1e685251ac61be64d1adef111060df84fdcbc6ab6c44 \
- --hash=sha256:4e10d2e0a12e18f4e2dd031e1bf7c3d7017be5c8dbe524d07706179f355c5dac \
- --hash=sha256:5419771b64248484299fa77689d4f3aeed643ea6630b2ea750eeab219588ba20 \
- --hash=sha256:54471032f7cb5fca694b5f1a0aaeba4af6e10ae989df408e0216f7fd6cdc405d \
- --hash=sha256:58974b4987b2a71ee08ade1e7f47f410c367cdfc5a94fabd599c88165f56213a \
- --hash=sha256:58d29b9a294573d8319f16f2f79e42428ba9b6480442fa1836e4eb89c4d9d61c \
- --hash=sha256:5eb2474a7c5be8a5331146758debb2669bf5635c021aee00fd7c353558fc659d \
- --hash=sha256:6e37561751b017cf5c40fce0d90fd9e8274716de327ec4ffb0df957160be3bff \
- --hash=sha256:76ae5091547e74e7efecc3cbf8e75200bc92daaeb88e5433c5e3e95ea8ce5aa7 \
- --hash=sha256:7965af9b67dd546e52afcf2e38641b5be956d68c425bef2158e95af11d229f10 \
- --hash=sha256:7e3b7d44e18c085fd8c16dcc6f1ad6c61b71ff463636fcb13df7b1b818bd0c02 \
- --hash=sha256:7ed7ee041ff7b34cc62f07545e55e1468808691dddfd315d51dd82a6b37ddef2 \
- --hash=sha256:82834962b3d7c5ca98cb56001c33cf20eb110ecf442725dc5fdf36d16ed1ab07 \
- --hash=sha256:8583e563df41fdecef31b793b4dd3af8a9caa03397be648945ad32717a92885b \
- --hash=sha256:8fa92cb248e573daab8d032919623cc309c005086d743afb014c836636166f08 \
- --hash=sha256:93d458c8a6a354dc8b48fc78d66d2a8a90b941f7fec30e94c7ad9982b1fa6bab \
- --hash=sha256:957f669d4922f92c171ba01bef7f29410668db09f6c02111e22b2bce446f3285 \
- --hash=sha256:9dc080e5a1c3b2656caff2ac2633d009b3a9ff7b5e93d0452f40cd76d3da3b3c \
- --hash=sha256:9ef1b167e22709b46bf8168368b7b5d3efeaaa746c6d39661c1b4405b6352e58 \
- --hash=sha256:a7a310c6e0471602fe3bf8efaf193d396ea561486aeaa7adc1f132e02d30c4b9 \
- --hash=sha256:ab774fa225238986218a463f3fe151e04d8c25d7de09df7f0f5fce27b1243dbc \
- --hash=sha256:ada215fd079e23e060157aab12eba0d66704316547f334eee9ff26f8c0d7b8ab \
- --hash=sha256:c39287f5c8f4a0c5a55daf9eaf9ccd223ea59eed3f6d467133cc727d7b943a55 \
- --hash=sha256:c9c563351ddc230725c4bdf7d9e1e92cbe6ae8553942bd1fb2b2ff0884e8b714 \
- --hash=sha256:d26732ae002cc3d2ecab04897bb02ae3f11f06dd7575d1df46acd2f7c012a8d8 \
- --hash=sha256:d3b659d1029946f4ff9b6183984578041b520ce0f8fb7078bb37ec7445806b33 \
- --hash=sha256:dd9cc95b8d6e27d01e1e1f1fae8559ef3c02c76317da650a19047f249acd519d \
- --hash=sha256:e4564cf40cebcb53f3dc825e85910bf54835e8a8b6880d59e5159f0f325e637e \
- --hash=sha256:e7d82b9e56716ed32574ee106cabca80992e6bbdcf25a88d97d21f73a0aae664 \
- --hash=sha256:e8a4b261c1ef91e7188a30571be6ad98d1c6d9fa2427244c545e2fa0a2494dd7 \
- --hash=sha256:e96bc94c8cda58f577277d4a71f51c8e2129b8b36fd05adece6320dd3d57de8a \
- --hash=sha256:ed2f80ca07025551636c555dec2b755dd005e2ea8fbeb99fc5cdff319b70b23b \
- --hash=sha256:f5b8a096e649768c2f4233f947cf9737f8dbf8728b90e2771e2497c6e3d21d13 \
- --hash=sha256:f8e953cc0bddc2beaf3a3c3b5dd9ab7554677da72dfaf46951e193c9653e515a \
- --hash=sha256:fda582236fee135d4daeca056c8c88ec5f6f6d88a004a79b84a02547c8f57386 \
- --hash=sha256:fdb062893fd6d47b527d39346e0c5578b7957dcea6d6a3b6794569370013d9ac
+fonttools==4.55.3 \
+ --hash=sha256:07f8288aacf0a38d174445fc78377a97fb0b83cfe352a90c9d9c1400571963c7 \
+ --hash=sha256:11e5de1ee0d95af4ae23c1a138b184b7f06e0b6abacabf1d0db41c90b03d834b \
+ --hash=sha256:1bc7ad24ff98846282eef1cbeac05d013c2154f977a79886bb943015d2b1b261 \
+ --hash=sha256:1dcc07934a2165ccdc3a5a608db56fb3c24b609658a5b340aee4ecf3ba679dc0 \
+ --hash=sha256:22f38464daa6cdb7b6aebd14ab06609328fe1e9705bb0fcc7d1e69de7109ee02 \
+ --hash=sha256:27e4ae3592e62eba83cd2c4ccd9462dcfa603ff78e09110680a5444c6925d841 \
+ --hash=sha256:3983313c2a04d6cc1fe9251f8fc647754cf49a61dac6cb1e7249ae67afaafc45 \
+ --hash=sha256:529cef2ce91dc44f8e407cc567fae6e49a1786f2fefefa73a294704c415322a4 \
+ --hash=sha256:5323a22eabddf4b24f66d26894f1229261021dacd9d29e89f7872dd8c63f0b8b \
+ --hash=sha256:54153c49913f45065c8d9e6d0c101396725c5621c8aee744719300f79771d75a \
+ --hash=sha256:546565028e244a701f73df6d8dd6be489d01617863ec0c6a42fa25bf45d43048 \
+ --hash=sha256:5480673f599ad410695ca2ddef2dfefe9df779a9a5cda89503881e503c9c7d90 \
+ --hash=sha256:5e8d657cd7326eeaba27de2740e847c6b39dde2f8d7cd7cc56f6aad404ddf0bd \
+ --hash=sha256:62d65a3022c35e404d19ca14f291c89cc5890032ff04f6c17af0bd1927299674 \
+ --hash=sha256:6314bf82c54c53c71805318fcf6786d986461622dd926d92a465199ff54b1b72 \
+ --hash=sha256:7a8aa2c5e5b8b3bcb2e4538d929f6589a5c6bdb84fd16e2ed92649fb5454f11c \
+ --hash=sha256:827e95fdbbd3e51f8b459af5ea10ecb4e30af50221ca103bea68218e9615de07 \
+ --hash=sha256:859c358ebf41db18fb72342d3080bce67c02b39e86b9fbcf1610cca14984841b \
+ --hash=sha256:86721fbc389ef5cc1e2f477019e5069e8e4421e8d9576e9c26f840dbb04678de \
+ --hash=sha256:89bdc5d88bdeec1b15af790810e267e8332d92561dce4f0748c2b95c9bdf3926 \
+ --hash=sha256:8c4491699bad88efe95772543cd49870cf756b019ad56294f6498982408ab03e \
+ --hash=sha256:8c5ec45428edaa7022f1c949a632a6f298edc7b481312fc7dc258921e9399628 \
+ --hash=sha256:8e75f12c82127486fac2d8bfbf5bf058202f54bf4f158d367e41647b972342ca \
+ --hash=sha256:a430178ad3e650e695167cb53242dae3477b35c95bef6525b074d87493c4bf29 \
+ --hash=sha256:a8c2794ded89399cc2169c4d0bf7941247b8d5932b2659e09834adfbb01589aa \
+ --hash=sha256:aca318b77f23523309eec4475d1fbbb00a6b133eb766a8bdc401faba91261abe \
+ --hash=sha256:ae3b6600565b2d80b7c05acb8e24d2b26ac407b27a3f2e078229721ba5698427 \
+ --hash=sha256:aedbeb1db64496d098e6be92b2e63b5fac4e53b1b92032dfc6988e1ea9134a4d \
+ --hash=sha256:aee3b57643827e237ff6ec6d28d9ff9766bd8b21e08cd13bff479e13d4b14765 \
+ --hash=sha256:b54baf65c52952db65df39fcd4820668d0ef4766c0ccdf32879b77f7c804d5c5 \
+ --hash=sha256:b586ab5b15b6097f2fb71cafa3c98edfd0dba1ad8027229e7b1e204a58b0e09d \
+ --hash=sha256:b8d5e8916c0970fbc0f6f1bece0063363bb5857a7f170121a4493e31c3db3314 \
+ --hash=sha256:bc5dbb4685e51235ef487e4bd501ddfc49be5aede5e40f4cefcccabc6e60fb4b \
+ --hash=sha256:bdcc9f04b36c6c20978d3f060e5323a43f6222accc4e7fcbef3f428e216d96af \
+ --hash=sha256:c3ca99e0d460eff46e033cd3992a969658c3169ffcd533e0a39c63a38beb6831 \
+ --hash=sha256:caf8230f3e10f8f5d7593eb6d252a37caf58c480b19a17e250a63dad63834cf3 \
+ --hash=sha256:cd70de1a52a8ee2d1877b6293af8a2484ac82514f10b1c67c1c5762d38073e56 \
+ --hash=sha256:cf4fe7c124aa3f4e4c1940880156e13f2f4d98170d35c749e6b4f119a872551e \
+ --hash=sha256:d342e88764fb201286d185093781bf6628bbe380a913c24adf772d901baa8276 \
+ --hash=sha256:da9da6d65cd7aa6b0f806556f4985bcbf603bf0c5c590e61b43aa3e5a0f822d0 \
+ --hash=sha256:dc5294a3d5c84226e3dbba1b6f61d7ad813a8c0238fceea4e09aa04848c3d851 \
+ --hash=sha256:dd68c87a2bfe37c5b33bcda0fba39b65a353876d3b9006fde3adae31f97b3ef5 \
+ --hash=sha256:e6e8766eeeb2de759e862004aa11a9ea3d6f6d5ec710551a88b476192b64fd54 \
+ --hash=sha256:e894b5bd60d9f473bed7a8f506515549cc194de08064d829464088d23097331b \
+ --hash=sha256:eb6ca911c4c17eb51853143624d8dc87cdcdf12a711fc38bf5bd21521e79715f \
+ --hash=sha256:ed63959d00b61959b035c7d47f9313c2c1ece090ff63afea702fe86de00dbed4 \
+ --hash=sha256:f412604ccbeee81b091b420272841e5ec5ef68967a9790e80bffd0e30b8e2977 \
+ --hash=sha256:f7d66c15ba875432a2d2fb419523f5d3d347f91f48f57b8b08a2dfc3c39b8a3f \
+ --hash=sha256:f9e736f60f4911061235603a6119e72053073a12c6d7904011df2d8fad2c0e35 \
+ --hash=sha256:fb594b5a99943042c702c550d5494bdd7577f6ef19b0bc73877c948a63184a32
# via -r requirements-fonttools.in
diff --git a/.ci/requirements.in b/.ci/requirements.in
index ae131bd..0e205be 100644
--- a/.ci/requirements.in
+++ b/.ci/requirements.in
@@ -1,5 +1,5 @@
-r requirements-fonttools.in
-meson==1.5.2
+meson==1.6.1
gcovr==5.0
ninja
setuptools # https://github.com/harfbuzz/harfbuzz/issues/4475
diff --git a/.ci/requirements.txt b/.ci/requirements.txt
index f30ff4f..5dff38b 100644
--- a/.ci/requirements.txt
+++ b/.ci/requirements.txt
@@ -4,63 +4,65 @@
#
# pip-compile --allow-unsafe --generate-hashes --output-file=.ci/requirements.txt .ci/requirements.in
#
-fonttools==4.54.1 \
- --hash=sha256:07e005dc454eee1cc60105d6a29593459a06321c21897f769a281ff2d08939f6 \
- --hash=sha256:0a911591200114969befa7f2cb74ac148bce5a91df5645443371aba6d222e263 \
- --hash=sha256:0d1d353ef198c422515a3e974a1e8d5b304cd54a4c2eebcae708e37cd9eeffb1 \
- --hash=sha256:0e88e3018ac809b9662615072dcd6b84dca4c2d991c6d66e1970a112503bba7e \
- --hash=sha256:1d152d1be65652fc65e695e5619e0aa0982295a95a9b29b52b85775243c06556 \
- --hash=sha256:262705b1663f18c04250bd1242b0515d3bbae177bee7752be67c979b7d47f43d \
- --hash=sha256:278913a168f90d53378c20c23b80f4e599dca62fbffae4cc620c8eed476b723e \
- --hash=sha256:301540e89cf4ce89d462eb23a89464fef50915255ece765d10eee8b2bf9d75b2 \
- --hash=sha256:31c32d7d4b0958600eac75eaf524b7b7cb68d3a8c196635252b7a2c30d80e986 \
- --hash=sha256:357cacb988a18aace66e5e55fe1247f2ee706e01debc4b1a20d77400354cddeb \
- --hash=sha256:37cddd62d83dc4f72f7c3f3c2bcf2697e89a30efb152079896544a93907733bd \
- --hash=sha256:41bb0b250c8132b2fcac148e2e9198e62ff06f3cc472065dff839327945c5882 \
- --hash=sha256:4aa4817f0031206e637d1e685251ac61be64d1adef111060df84fdcbc6ab6c44 \
- --hash=sha256:4e10d2e0a12e18f4e2dd031e1bf7c3d7017be5c8dbe524d07706179f355c5dac \
- --hash=sha256:5419771b64248484299fa77689d4f3aeed643ea6630b2ea750eeab219588ba20 \
- --hash=sha256:54471032f7cb5fca694b5f1a0aaeba4af6e10ae989df408e0216f7fd6cdc405d \
- --hash=sha256:58974b4987b2a71ee08ade1e7f47f410c367cdfc5a94fabd599c88165f56213a \
- --hash=sha256:58d29b9a294573d8319f16f2f79e42428ba9b6480442fa1836e4eb89c4d9d61c \
- --hash=sha256:5eb2474a7c5be8a5331146758debb2669bf5635c021aee00fd7c353558fc659d \
- --hash=sha256:6e37561751b017cf5c40fce0d90fd9e8274716de327ec4ffb0df957160be3bff \
- --hash=sha256:76ae5091547e74e7efecc3cbf8e75200bc92daaeb88e5433c5e3e95ea8ce5aa7 \
- --hash=sha256:7965af9b67dd546e52afcf2e38641b5be956d68c425bef2158e95af11d229f10 \
- --hash=sha256:7e3b7d44e18c085fd8c16dcc6f1ad6c61b71ff463636fcb13df7b1b818bd0c02 \
- --hash=sha256:7ed7ee041ff7b34cc62f07545e55e1468808691dddfd315d51dd82a6b37ddef2 \
- --hash=sha256:82834962b3d7c5ca98cb56001c33cf20eb110ecf442725dc5fdf36d16ed1ab07 \
- --hash=sha256:8583e563df41fdecef31b793b4dd3af8a9caa03397be648945ad32717a92885b \
- --hash=sha256:8fa92cb248e573daab8d032919623cc309c005086d743afb014c836636166f08 \
- --hash=sha256:93d458c8a6a354dc8b48fc78d66d2a8a90b941f7fec30e94c7ad9982b1fa6bab \
- --hash=sha256:957f669d4922f92c171ba01bef7f29410668db09f6c02111e22b2bce446f3285 \
- --hash=sha256:9dc080e5a1c3b2656caff2ac2633d009b3a9ff7b5e93d0452f40cd76d3da3b3c \
- --hash=sha256:9ef1b167e22709b46bf8168368b7b5d3efeaaa746c6d39661c1b4405b6352e58 \
- --hash=sha256:a7a310c6e0471602fe3bf8efaf193d396ea561486aeaa7adc1f132e02d30c4b9 \
- --hash=sha256:ab774fa225238986218a463f3fe151e04d8c25d7de09df7f0f5fce27b1243dbc \
- --hash=sha256:ada215fd079e23e060157aab12eba0d66704316547f334eee9ff26f8c0d7b8ab \
- --hash=sha256:c39287f5c8f4a0c5a55daf9eaf9ccd223ea59eed3f6d467133cc727d7b943a55 \
- --hash=sha256:c9c563351ddc230725c4bdf7d9e1e92cbe6ae8553942bd1fb2b2ff0884e8b714 \
- --hash=sha256:d26732ae002cc3d2ecab04897bb02ae3f11f06dd7575d1df46acd2f7c012a8d8 \
- --hash=sha256:d3b659d1029946f4ff9b6183984578041b520ce0f8fb7078bb37ec7445806b33 \
- --hash=sha256:dd9cc95b8d6e27d01e1e1f1fae8559ef3c02c76317da650a19047f249acd519d \
- --hash=sha256:e4564cf40cebcb53f3dc825e85910bf54835e8a8b6880d59e5159f0f325e637e \
- --hash=sha256:e7d82b9e56716ed32574ee106cabca80992e6bbdcf25a88d97d21f73a0aae664 \
- --hash=sha256:e8a4b261c1ef91e7188a30571be6ad98d1c6d9fa2427244c545e2fa0a2494dd7 \
- --hash=sha256:e96bc94c8cda58f577277d4a71f51c8e2129b8b36fd05adece6320dd3d57de8a \
- --hash=sha256:ed2f80ca07025551636c555dec2b755dd005e2ea8fbeb99fc5cdff319b70b23b \
- --hash=sha256:f5b8a096e649768c2f4233f947cf9737f8dbf8728b90e2771e2497c6e3d21d13 \
- --hash=sha256:f8e953cc0bddc2beaf3a3c3b5dd9ab7554677da72dfaf46951e193c9653e515a \
- --hash=sha256:fda582236fee135d4daeca056c8c88ec5f6f6d88a004a79b84a02547c8f57386 \
- --hash=sha256:fdb062893fd6d47b527d39346e0c5578b7957dcea6d6a3b6794569370013d9ac
+fonttools==4.55.3 \
+ --hash=sha256:07f8288aacf0a38d174445fc78377a97fb0b83cfe352a90c9d9c1400571963c7 \
+ --hash=sha256:11e5de1ee0d95af4ae23c1a138b184b7f06e0b6abacabf1d0db41c90b03d834b \
+ --hash=sha256:1bc7ad24ff98846282eef1cbeac05d013c2154f977a79886bb943015d2b1b261 \
+ --hash=sha256:1dcc07934a2165ccdc3a5a608db56fb3c24b609658a5b340aee4ecf3ba679dc0 \
+ --hash=sha256:22f38464daa6cdb7b6aebd14ab06609328fe1e9705bb0fcc7d1e69de7109ee02 \
+ --hash=sha256:27e4ae3592e62eba83cd2c4ccd9462dcfa603ff78e09110680a5444c6925d841 \
+ --hash=sha256:3983313c2a04d6cc1fe9251f8fc647754cf49a61dac6cb1e7249ae67afaafc45 \
+ --hash=sha256:529cef2ce91dc44f8e407cc567fae6e49a1786f2fefefa73a294704c415322a4 \
+ --hash=sha256:5323a22eabddf4b24f66d26894f1229261021dacd9d29e89f7872dd8c63f0b8b \
+ --hash=sha256:54153c49913f45065c8d9e6d0c101396725c5621c8aee744719300f79771d75a \
+ --hash=sha256:546565028e244a701f73df6d8dd6be489d01617863ec0c6a42fa25bf45d43048 \
+ --hash=sha256:5480673f599ad410695ca2ddef2dfefe9df779a9a5cda89503881e503c9c7d90 \
+ --hash=sha256:5e8d657cd7326eeaba27de2740e847c6b39dde2f8d7cd7cc56f6aad404ddf0bd \
+ --hash=sha256:62d65a3022c35e404d19ca14f291c89cc5890032ff04f6c17af0bd1927299674 \
+ --hash=sha256:6314bf82c54c53c71805318fcf6786d986461622dd926d92a465199ff54b1b72 \
+ --hash=sha256:7a8aa2c5e5b8b3bcb2e4538d929f6589a5c6bdb84fd16e2ed92649fb5454f11c \
+ --hash=sha256:827e95fdbbd3e51f8b459af5ea10ecb4e30af50221ca103bea68218e9615de07 \
+ --hash=sha256:859c358ebf41db18fb72342d3080bce67c02b39e86b9fbcf1610cca14984841b \
+ --hash=sha256:86721fbc389ef5cc1e2f477019e5069e8e4421e8d9576e9c26f840dbb04678de \
+ --hash=sha256:89bdc5d88bdeec1b15af790810e267e8332d92561dce4f0748c2b95c9bdf3926 \
+ --hash=sha256:8c4491699bad88efe95772543cd49870cf756b019ad56294f6498982408ab03e \
+ --hash=sha256:8c5ec45428edaa7022f1c949a632a6f298edc7b481312fc7dc258921e9399628 \
+ --hash=sha256:8e75f12c82127486fac2d8bfbf5bf058202f54bf4f158d367e41647b972342ca \
+ --hash=sha256:a430178ad3e650e695167cb53242dae3477b35c95bef6525b074d87493c4bf29 \
+ --hash=sha256:a8c2794ded89399cc2169c4d0bf7941247b8d5932b2659e09834adfbb01589aa \
+ --hash=sha256:aca318b77f23523309eec4475d1fbbb00a6b133eb766a8bdc401faba91261abe \
+ --hash=sha256:ae3b6600565b2d80b7c05acb8e24d2b26ac407b27a3f2e078229721ba5698427 \
+ --hash=sha256:aedbeb1db64496d098e6be92b2e63b5fac4e53b1b92032dfc6988e1ea9134a4d \
+ --hash=sha256:aee3b57643827e237ff6ec6d28d9ff9766bd8b21e08cd13bff479e13d4b14765 \
+ --hash=sha256:b54baf65c52952db65df39fcd4820668d0ef4766c0ccdf32879b77f7c804d5c5 \
+ --hash=sha256:b586ab5b15b6097f2fb71cafa3c98edfd0dba1ad8027229e7b1e204a58b0e09d \
+ --hash=sha256:b8d5e8916c0970fbc0f6f1bece0063363bb5857a7f170121a4493e31c3db3314 \
+ --hash=sha256:bc5dbb4685e51235ef487e4bd501ddfc49be5aede5e40f4cefcccabc6e60fb4b \
+ --hash=sha256:bdcc9f04b36c6c20978d3f060e5323a43f6222accc4e7fcbef3f428e216d96af \
+ --hash=sha256:c3ca99e0d460eff46e033cd3992a969658c3169ffcd533e0a39c63a38beb6831 \
+ --hash=sha256:caf8230f3e10f8f5d7593eb6d252a37caf58c480b19a17e250a63dad63834cf3 \
+ --hash=sha256:cd70de1a52a8ee2d1877b6293af8a2484ac82514f10b1c67c1c5762d38073e56 \
+ --hash=sha256:cf4fe7c124aa3f4e4c1940880156e13f2f4d98170d35c749e6b4f119a872551e \
+ --hash=sha256:d342e88764fb201286d185093781bf6628bbe380a913c24adf772d901baa8276 \
+ --hash=sha256:da9da6d65cd7aa6b0f806556f4985bcbf603bf0c5c590e61b43aa3e5a0f822d0 \
+ --hash=sha256:dc5294a3d5c84226e3dbba1b6f61d7ad813a8c0238fceea4e09aa04848c3d851 \
+ --hash=sha256:dd68c87a2bfe37c5b33bcda0fba39b65a353876d3b9006fde3adae31f97b3ef5 \
+ --hash=sha256:e6e8766eeeb2de759e862004aa11a9ea3d6f6d5ec710551a88b476192b64fd54 \
+ --hash=sha256:e894b5bd60d9f473bed7a8f506515549cc194de08064d829464088d23097331b \
+ --hash=sha256:eb6ca911c4c17eb51853143624d8dc87cdcdf12a711fc38bf5bd21521e79715f \
+ --hash=sha256:ed63959d00b61959b035c7d47f9313c2c1ece090ff63afea702fe86de00dbed4 \
+ --hash=sha256:f412604ccbeee81b091b420272841e5ec5ef68967a9790e80bffd0e30b8e2977 \
+ --hash=sha256:f7d66c15ba875432a2d2fb419523f5d3d347f91f48f57b8b08a2dfc3c39b8a3f \
+ --hash=sha256:f9e736f60f4911061235603a6119e72053073a12c6d7904011df2d8fad2c0e35 \
+ --hash=sha256:fb594b5a99943042c702c550d5494bdd7577f6ef19b0bc73877c948a63184a32
# via -r requirements-fonttools.in
gcovr==5.0 \
--hash=sha256:1d80264cbaadff356b3dda71b8c62b3aa803e5b3eb6d526a24932cd6660a2576 \
--hash=sha256:8c49ebcfc5a98b56dd900c687aad0258ac86093d2f81a1417905193ab45fe69f
# via -r requirements.in
-jinja2==3.1.4 \
- --hash=sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369 \
- --hash=sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d
+jinja2==3.1.5 \
+ --hash=sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb \
+ --hash=sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb
# via gcovr
lxml==4.9.3 \
--hash=sha256:05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3 \
@@ -218,26 +220,28 @@
--hash=sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2 \
--hash=sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11
# via jinja2
-meson==1.5.2 \
- --hash=sha256:77706e2368a00d789c097632ccf4fc39251fba56d03e1e1b262559a3c7a08f5b \
- --hash=sha256:f955e09ab0d71ef180ae85df65991d58ed8430323de7d77a37e11c9ea630910b
+meson==1.6.1 \
+ --hash=sha256:1eca49eb6c26d58bbee67fd3337d8ef557c0804e30a6d16bfdf269db997464de \
+ --hash=sha256:3f41f6b03df56bb76836cc33c94e1a404c3584d48b3259540794a60a21fad1f9
# via -r requirements.in
-ninja==1.11.1.1 \
- --hash=sha256:18302d96a5467ea98b68e1cae1ae4b4fb2b2a56a82b955193c637557c7273dbd \
- --hash=sha256:185e0641bde601e53841525c4196278e9aaf4463758da6dd1e752c0a0f54136a \
- --hash=sha256:376889c76d87b95b5719fdd61dd7db193aa7fd4432e5d52d2e44e4c497bdbbee \
- --hash=sha256:3e0f9be5bb20d74d58c66cc1c414c3e6aeb45c35b0d0e41e8d739c2c0d57784f \
- --hash=sha256:73b93c14046447c7c5cc892433d4fae65d6364bec6685411cb97a8bcf815f93a \
- --hash=sha256:7563ce1d9fe6ed5af0b8dd9ab4a214bf4ff1f2f6fd6dc29f480981f0f8b8b249 \
- --hash=sha256:76482ba746a2618eecf89d5253c0d1e4f1da1270d41e9f54dfbd91831b0f6885 \
- --hash=sha256:84502ec98f02a037a169c4b0d5d86075eaf6afc55e1879003d6cab51ced2ea4b \
- --hash=sha256:95da904130bfa02ea74ff9c0116b4ad266174fafb1c707aa50212bc7859aebf1 \
- --hash=sha256:9d793b08dd857e38d0b6ffe9e6b7145d7c485a42dcfea04905ca0cdb6017cc3c \
- --hash=sha256:9df724344202b83018abb45cb1efc22efd337a1496514e7e6b3b59655be85205 \
- --hash=sha256:aad34a70ef15b12519946c5633344bc775a7656d789d9ed5fdb0d456383716ef \
- --hash=sha256:d491fc8d89cdcb416107c349ad1e3a735d4c4af5e1cb8f5f727baca6350fdaea \
- --hash=sha256:ecf80cf5afd09f14dcceff28cb3f11dc90fb97c999c89307aea435889cb66877 \
- --hash=sha256:fa2ba9d74acfdfbfbcf06fad1b8282de8a7a8c481d9dee45c859a8c93fcc1082
+ninja==1.11.1.3 \
+ --hash=sha256:04d48d14ea7ba11951c156599ab526bdda575450797ff57c6fdf99b2554d09c7 \
+ --hash=sha256:114ed5c61c8474df6a69ab89097a20749b769e2c219a452cb2fadc49b0d581b0 \
+ --hash=sha256:17978ad611d8ead578d83637f5ae80c2261b033db0b493a7ce94f88623f29e1b \
+ --hash=sha256:1ad2112c2b0159ed7c4ae3731595191b1546ba62316fc40808edecd0306fefa3 \
+ --hash=sha256:2883ea46b3c5079074f56820f9989c6261fcc6fd873d914ee49010ecf283c3b2 \
+ --hash=sha256:28aea3c1c280cba95b8608d50797169f3a34280e3e9a6379b6e340f0c9eaeeb0 \
+ --hash=sha256:2b4879ea3f1169f3d855182c57dcc84d1b5048628c8b7be0d702b81882a37237 \
+ --hash=sha256:53409151da081f3c198bb0bfc220a7f4e821e022c5b7d29719adda892ddb31bb \
+ --hash=sha256:56ada5d33b8741d298836644042faddebc83ee669782d661e21563034beb5aba \
+ --hash=sha256:7fa2247fce98f683bc712562d82b22b8a0a5c000738a13147ca2d1b68c122298 \
+ --hash=sha256:8c4bdb9fd2d0c06501ae15abfd23407660e95659e384acd36e013b6dd7d8a8e4 \
+ --hash=sha256:a27e78ca71316c8654965ee94b286a98c83877bfebe2607db96897bbfe458af0 \
+ --hash=sha256:a38c6c6c8032bed68b70c3b065d944c35e9f903342875d3a3218c1607987077c \
+ --hash=sha256:a4a3b71490557e18c010cbb26bd1ea9a0c32ee67e8f105e9731515b6e0af792e \
+ --hash=sha256:b6966f83064a88a51693073eea3decd47e08c3965241e09578ef7aa3a7738329 \
+ --hash=sha256:bc3ebc8b2e47716149f3541742b5cd8e0b08f51013b825c05baca3e34854370d \
+ --hash=sha256:edfa0d2e9d7ead1635b03e40a32ad56cc8f56798b6e2e9848d8300b174897076
# via -r requirements.in
pygments==2.16.1 \
--hash=sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692 \
diff --git a/.circleci/config.yml b/.circleci/config.yml
index 45f440f..5eae8d2 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -136,7 +136,7 @@
- run: |
python3 -m venv venv
source venv/bin/activate
- pip3 install meson==0.60.0
+ pip3 install meson==1.6.0
bash .ci/build-win32.sh
- store_artifacts:
path: harfbuzz-win32.zip
@@ -162,7 +162,7 @@
- run: |
python3 -m venv venv
source venv/bin/activate
- pip3 install meson==0.60.0
+ pip3 install meson==1.6.0
bash .ci/build-win64.sh
- store_artifacts:
path: harfbuzz-win64.zip
diff --git a/.github/workflows/linux-ci.yml b/.github/workflows/linux-ci.yml
index 5bb6404..54a0018 100644
--- a/.github/workflows/linux-ci.yml
+++ b/.github/workflows/linux-ci.yml
@@ -70,7 +70,7 @@
- name: Generate Coverage
run: ninja -Cbuild coverage-xml
- name: Upload Coverage
- uses: codecov/codecov-action@b9fd7d16f6d7d1b5d2bec1a2887e65ceed900238 # v4.6.0
+ uses: codecov/codecov-action@7f8b4b4bde536c465e797be725718b88c5d95e0e # v5.1.1
with:
token: ${{ secrets.CODECOV_TOKEN }}
file: build/meson-logs/coverage.xml
diff --git a/.github/workflows/macos-ci.yml b/.github/workflows/macos-ci.yml
index 42617a1..e7fd9d0 100644
--- a/.github/workflows/macos-ci.yml
+++ b/.github/workflows/macos-ci.yml
@@ -24,6 +24,7 @@
run: |
export HOMEBREW_NO_AUTO_UPDATE=1
export HOMEBREW_NO_INSTALL_CLEANUP=1
+ brew rm -f [email protected]
brew install \
cairo \
freetype \
@@ -33,7 +34,7 @@
icu4c \
meson \
ninja \
- pkg-config
+ pkgconf
- name: Setup Python
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
with:
@@ -61,7 +62,7 @@
- name: Generate Coverage
run: ninja -Cbuild coverage-xml
- name: Upload Coverage
- uses: codecov/codecov-action@b9fd7d16f6d7d1b5d2bec1a2887e65ceed900238 # v4.6.0
+ uses: codecov/codecov-action@7f8b4b4bde536c465e797be725718b88c5d95e0e # v5.1.1
with:
token: ${{ secrets.CODECOV_TOKEN }}
file: build/meson-logs/coverage.xml
diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml
index 5e80cd3..6a3627e 100644
--- a/.github/workflows/scorecard.yml
+++ b/.github/workflows/scorecard.yml
@@ -59,6 +59,6 @@
# Upload the results to GitHub's code scanning dashboard.
- name: "Upload to code-scanning"
- uses: github/codeql-action/upload-sarif@662472033e021d55d94146f66f6058822b0b39fd # v3.27.0
+ uses: github/codeql-action/upload-sarif@aa578102511db1f4524ed59b8cc2bae4f6e88195 # v3.27.6
with:
sarif_file: results.sarif
diff --git a/Android.bp b/Android.bp
index 35cf7d8..1c25b6c 100644
--- a/Android.bp
+++ b/Android.bp
@@ -117,7 +117,6 @@
"src/hb-subset-instancer-iup.cc",
"src/hb-subset-instancer-solver.cc",
"src/hb-subset-plan.cc",
- "src/hb-subset-repacker.cc",
"src/hb-subset.cc",
"src/graph/gsubgpos-context.cc",
],
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c8e377d..c3e568f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.12)
+cmake_minimum_required(VERSION 3.14)
project(harfbuzz)
message(WARN "HarfBuzz has a Meson port and tries to migrate all the other build systems to it, please consider using it as we might remove our cmake port soon.")
@@ -6,20 +6,6 @@
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
-## Limit framework build to Xcode generator
-if (BUILD_FRAMEWORK)
- # for a framework build on macOS, use:
- # cmake -DBUILD_FRAMEWORK=ON -Bbuild -H. -GXcode && cmake --build build
- if (NOT "${CMAKE_GENERATOR}" STREQUAL "Xcode")
- message(FATAL_ERROR
- "You should use Xcode generator with BUILD_FRAMEWORK enabled")
- endif ()
- set (CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_32_64_BIT)")
- set (CMAKE_MACOSX_RPATH ON)
- set (BUILD_SHARED_LIBS ON)
-endif ()
-
-
## Disallow in-source builds, as CMake generated make files can collide with autotools ones
if (NOT MSVC AND "${PROJECT_BINARY_DIR}" STREQUAL "${PROJECT_SOURCE_DIR}")
message(FATAL_ERROR
@@ -73,6 +59,14 @@
set (HB_HAVE_GLIB ON)
endif ()
+if (APPLE)
+ option(BUILD_FRAMEWORK "Build as Apple Frameworks" OFF)
+endif ()
+if (BUILD_FRAMEWORK)
+ set (CMAKE_MACOSX_RPATH ON)
+ set (BUILD_SHARED_LIBS OFF)
+endif ()
+
include_directories(AFTER
${PROJECT_SOURCE_DIR}/src
${PROJECT_BINARY_DIR}/src
@@ -168,7 +162,7 @@
${PROJECT_SOURCE_DIR}/src/hb-subset-plan.cc
${PROJECT_SOURCE_DIR}/src/hb-subset-plan.hh
${PROJECT_SOURCE_DIR}/src/hb-subset-plan-member-list.hh
- ${PROJECT_SOURCE_DIR}/src/hb-subset-repacker.cc
+ ${PROJECT_SOURCE_DIR}/src/hb-subset-serialize.cc
${PROJECT_SOURCE_DIR}/src/hb-subset.cc
${PROJECT_SOURCE_DIR}/src/hb-subset.hh
${PROJECT_SOURCE_DIR}/src/hb-repacker.hh
@@ -219,7 +213,7 @@
)
set (subset_project_headers
${PROJECT_SOURCE_DIR}/src/hb-subset.h
- ${PROJECT_SOURCE_DIR}/src/hb-subset-repacker.h
+ ${PROJECT_SOURCE_DIR}/src/hb-subset-serialize.h
)
## Find and include needed header folders and libraries
@@ -506,6 +500,21 @@
if (BUILD_SHARED_LIBS)
set_target_properties(harfbuzz harfbuzz-icu PROPERTIES VISIBILITY_INLINES_HIDDEN TRUE)
+
+ if (BUILD_FRAMEWORK)
+ set_target_properties(harfbuzz harfbuzz-icu PROPERTIES
+ FRAMEWORK TRUE
+ FRAMEWORK_VERSION "${HB_VERSION}"
+ PUBLIC_HEADER "${project_headers}"
+ PRODUCT_BUNDLE_IDENTIFIER "harfbuzz.harfbuzz-icu"
+ XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
+ OUTPUT_NAME "harfbuzz-icu"
+ XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ""
+ MACOSX_FRAMEWORK_IDENTIFIER "harfbuzz-icu"
+ MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${HB_VERSION}"
+ MACOSX_FRAMEWORK_BUNDLE_VERSION "${HB_VERSION}"
+ )
+ endif ()
endif ()
endif ()
@@ -513,12 +522,27 @@
## Define harfbuzz-subset library
if (HB_BUILD_SUBSET)
add_library(harfbuzz-subset ${subset_project_sources} ${subset_project_headers})
- list(APPEND project_headers ${PROJECT_SOURCE_DIR}/src/hb-subset.h ${PROJECT_SOURCE_DIR}/src/hb-subset-repacker.h)
+ list(APPEND project_headers ${PROJECT_SOURCE_DIR}/src/hb-subset.h ${PROJECT_SOURCE_DIR}/src/hb-subset-serialize.h)
add_dependencies(harfbuzz-subset harfbuzz)
target_link_libraries(harfbuzz-subset harfbuzz ${THIRD_PARTY_LIBS})
if (BUILD_SHARED_LIBS)
set_target_properties(harfbuzz harfbuzz-subset PROPERTIES VISIBILITY_INLINES_HIDDEN TRUE)
+
+ if (BUILD_FRAMEWORK)
+ set_target_properties(harfbuzz harfbuzz-subset PROPERTIES
+ FRAMEWORK TRUE
+ FRAMEWORK_VERSION "${HB_VERSION}"
+ PUBLIC_HEADER "${project_headers}"
+ PRODUCT_BUNDLE_IDENTIFIER "harfbuzz.harfbuzz-subset"
+ XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
+ OUTPUT_NAME "harfbuzz-subset"
+ XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ""
+ MACOSX_FRAMEWORK_IDENTIFIER "harfbuzz-subset"
+ MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${HB_VERSION}"
+ MACOSX_FRAMEWORK_BUNDLE_VERSION "${HB_VERSION}"
+ )
+ endif ()
endif ()
endif ()
@@ -568,7 +592,22 @@
target_link_libraries(harfbuzz-gobject harfbuzz ${GOBJECT_LIBRARIES} ${THIRD_PARTY_LIBS})
if (BUILD_SHARED_LIBS)
- set_target_properties(harfbuzz-gobject PROPERTIES VISIBILITY_INLINES_HIDDEN TRUE)
+ set_target_properties(harfbuzz harfbuzz-gobject PROPERTIES VISIBILITY_INLINES_HIDDEN TRUE)
+
+ if (BUILD_FRAMEWORK)
+ set_target_properties(harfbuzz-gobject PROPERTIES
+ FRAMEWORK TRUE
+ FRAMEWORK_VERSION "${HB_VERSION}"
+ PUBLIC_HEADER "${project_headers}"
+ PRODUCT_BUNDLE_IDENTIFIER "harfbuzz.harfbuzz-gobject"
+ XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
+ OUTPUT_NAME "harfbuzz-gobject"
+ XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ""
+ MACOSX_FRAMEWORK_IDENTIFIER "harfbuzz-gobject"
+ MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${HB_VERSION}"
+ MACOSX_FRAMEWORK_BUNDLE_VERSION "${HB_VERSION}"
+ )
+ endif ()
endif ()
endif ()
@@ -581,6 +620,21 @@
if (BUILD_SHARED_LIBS)
set_target_properties(harfbuzz-cairo PROPERTIES VISIBILITY_INLINES_HIDDEN TRUE)
+
+ if (BUILD_FRAMEWORK)
+ set_target_properties(harfbuzz-cairo PROPERTIES
+ FRAMEWORK TRUE
+ FRAMEWORK_VERSION "${HB_VERSION}"
+ PUBLIC_HEADER "${project_headers}"
+ PRODUCT_BUNDLE_IDENTIFIER "harfbuzz.harbuzz-cairo"
+ XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
+ OUTPUT_NAME "harfbuzz-cairo"
+ XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ""
+ MACOSX_FRAMEWORK_IDENTIFIER "harfbuzz-cairo"
+ MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${HB_VERSION}"
+ MACOSX_FRAMEWORK_BUNDLE_VERSION "${HB_VERSION}"
+ )
+ endif ()
endif ()
endif()
@@ -719,8 +773,12 @@
set (CMAKE_MACOSX_RPATH ON)
set_target_properties(harfbuzz PROPERTIES
FRAMEWORK TRUE
+ FRAMEWORK_VERSION "${HB_VERSION}"
PUBLIC_HEADER "${project_headers}"
+ PRODUCT_BUNDLE_IDENTIFIER "harfbuzz"
XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
+ OUTPUT_NAME "harfbuzz"
+ XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ""
)
set (MACOSX_FRAMEWORK_IDENTIFIER "harfbuzz")
set (MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${HB_VERSION}")
@@ -881,7 +939,8 @@
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
- FRAMEWORK DESTINATION Library/Frameworks
+ FRAMEWORK DESTINATION Library/Frameworks
+ COMPONENT runtime OPTIONAL
)
make_pkgconfig_pc_file("harfbuzz")
install(EXPORT harfbuzzConfig
@@ -893,7 +952,8 @@
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
- FRAMEWORK DESTINATION Library/Frameworks
+ FRAMEWORK DESTINATION Library/Frameworks
+ COMPONENT runtime OPTIONAL
)
make_pkgconfig_pc_file("harfbuzz-icu")
endif ()
@@ -902,13 +962,19 @@
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
- FRAMEWORK DESTINATION Library/Frameworks
+ FRAMEWORK DESTINATION Library/Frameworks
+ COMPONENT runtime OPTIONAL
)
make_pkgconfig_pc_file("harfbuzz-cairo")
endif ()
if (HB_BUILD_SUBSET)
install(TARGETS harfbuzz-subset
+ EXPORT harfbuzz-subset
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ FRAMEWORK DESTINATION Library/Frameworks
+ COMPONENT runtime OPTIONAL
)
make_pkgconfig_pc_file("harfbuzz-subset")
endif ()
@@ -943,9 +1009,12 @@
endif ()
if (HB_HAVE_GOBJECT)
install(TARGETS harfbuzz-gobject
+ EXPORT harfbuzz-gobject
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ COMPONENT runtime OPTIONAL
)
make_pkgconfig_pc_file("harfbuzz-gobject")
if (HB_HAVE_INTROSPECTION)
diff --git a/LICENSE b/LICENSE
index 315dd59..4ce592d 100644
--- a/LICENSE
+++ b/LICENSE
@@ -742,6 +742,10 @@
-------------------------------------------------------------------
+Copyright (c) 2025 David Corbett
+
+-------------------------------------------------------------------
+
Copyright (c) Microsoft Corporation.
Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -1254,6 +1258,10 @@
-------------------------------------------------------------------
+Copyright 2022 The Noto Project Authors (https://github.com/notofonts/myanmar)
+
+-------------------------------------------------------------------
+
Copyright 2022 The Noto Project Authors (https://github.com/notofonts/oriya)
-------------------------------------------------------------------
diff --git a/METADATA b/METADATA
index 1146595..f8b7f94 100644
--- a/METADATA
+++ b/METADATA
@@ -9,7 +9,7 @@
type: GIT
value: "https://github.com/harfbuzz/harfbuzz"
}
- version: "10.1.0"
+ version: "10.2.0"
license_type: RESTRICTED
license_note: "would be NOTICE save for GPL in:\n"
" m4/ax_code_coverage.m4\n"
@@ -17,8 +17,8 @@
" culp/ligatures font with CC-BY-NC-SA licensing. Google does not want to\n"
" host CC-BY-NC* content.\n"
last_upgrade_date {
- year: 2024
- month: 11
- day: 6
+ year: 2025
+ month: 1
+ day: 14
}
}
diff --git a/NEWS b/NEWS
index a2b6ebd..ce123f2 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,32 @@
+Overview of changes leading to 10.2.0
+Saturday, January 11, 2025
+====================================
+- Consider Unicode Variation Selectors when subsetting “cmap” table.
+- Guard hb_cairo_glyphs_from_buffer() against malformed UTF-8 strings.
+- Fix incorrect “COLR” v1 glyph scaling in hb-cairo.
+- Use locale-independent parsing of double numbers is “hb-subset” command line
+ tool.
+- Fix incorrect zeroing of advance width of base glyphs in various “Courier New”
+ font versions due to incorrect “GDEF” glyph classes.
+- Fix handling of long language codes with “HB_LEAN” configuration.
+- Update OpenType language system registry.
+- Allow all Myanmar tone marks (including visarga) in any order
+- Don’t insert U+25CC DOTTED CIRCLE before superscript/subscript digits
+- Handle Garay script as right to left script.
+- New API for serializing font tables and potentially repacking them in optimal
+ way. This was a previously experimental-only API.
+- New API for converting font variation setting from and to strings.
+- Various build fixes
+- Various subsetter and instancer fixes.
+
+- New API:
++hb_subset_serialize_link_t
++hb_subset_serialize_object_t
++hb_subset_serialize_or_fail()
++hb_subset_axis_range_from_string()
++hb_subset_axis_range_to_string()
+
+
Overview of changes leading to 10.1.0
Tuesday, November 5, 2024
====================================
diff --git a/docs/harfbuzz-docs.xml b/docs/harfbuzz-docs.xml
index 164b892..f935cea 100644
--- a/docs/harfbuzz-docs.xml
+++ b/docs/harfbuzz-docs.xml
@@ -120,6 +120,7 @@
<index id="api-index-full"><title>API Index</title><xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include></index>
<index id="deprecated-api-index"><title>Index of deprecated API</title><xi:include href="xml/api-index-deprecated.xml"><xi:fallback /></xi:include></index>
+ <index id="api-index-10-2-0"><title>Index of new symbols in 10.2.0</title><xi:include href="xml/api-index-10.2.0.xml"><xi:fallback /></xi:include></index>
<index id="api-index-10-1-0"><title>Index of new symbols in 10.1.0</title><xi:include href="xml/api-index-10.1.0.xml"><xi:fallback /></xi:include></index>
<index id="api-index-10-0-0"><title>Index of new symbols in 10.0.0</title><xi:include href="xml/api-index-10.0.0.xml"><xi:fallback /></xi:include></index>
<index id="api-index-8-5-0"><title>Index of new symbols in 8.5.0</title><xi:include href="xml/api-index-8.5.0.xml"><xi:fallback /></xi:include></index>
diff --git a/docs/harfbuzz-sections.txt b/docs/harfbuzz-sections.txt
index 4a5c06c..0e75e69 100644
--- a/docs/harfbuzz-sections.txt
+++ b/docs/harfbuzz-sections.txt
@@ -801,8 +801,10 @@
<FILE>hb-shape</FILE>
hb_shape
hb_shape_full
-hb_shape_justify
hb_shape_list_shapers
+<SUBSECTION Private>
+hb_shape_justify
+</SUBSECTION>
</SECTION>
<SECTION>
@@ -900,6 +902,8 @@
hb_subset_input_pin_axis_to_default
hb_subset_input_get_axis_range
hb_subset_input_set_axis_range
+hb_subset_axis_range_from_string
+hb_subset_axis_range_to_string
hb_subset_or_fail
hb_subset_plan_create_or_fail
hb_subset_plan_reference
@@ -915,10 +919,10 @@
hb_subset_input_t
hb_subset_sets_t
hb_subset_plan_t
+hb_subset_serialize_link_t
+hb_subset_serialize_object_t
+hb_subset_serialize_or_fail
<SUBSECTION Private>
-hb_link_t
-hb_object_t
-hb_subset_repack_or_fail
hb_subset_input_override_name_table
</SECTION>
diff --git a/meson.build b/meson.build
index 5a02b3b..f3e43b5 100644
--- a/meson.build
+++ b/meson.build
@@ -1,6 +1,6 @@
project('harfbuzz', 'c', 'cpp',
meson_version: '>= 0.55.0',
- version: '10.1.0',
+ version: '10.2.0',
default_options: [
'cpp_eh=none', # Just to support msvc, we are passing -fno-exceptions also anyway
# 'cpp_rtti=false', # Do NOT enable, wraps inherit it and ICU needs RTTI
diff --git a/src/OT/Color/COLR/COLR.hh b/src/OT/Color/COLR/COLR.hh
index 36b509d..d227768 100644
--- a/src/OT/Color/COLR/COLR.hh
+++ b/src/OT/Color/COLR/COLR.hh
@@ -1003,7 +1003,7 @@
void paint_glyph (hb_paint_context_t *c) const
{
TRACE_PAINT (this);
- (this+transform).paint_glyph (c);
+ (this+transform).paint_glyph (c); // This does a push_transform()
c->recurse (this+src);
c->funcs->pop_transform (c->data);
}
diff --git a/src/gen-def.py b/src/gen-def.py
index 6011817..bc5a401 100755
--- a/src/gen-def.py
+++ b/src/gen-def.py
@@ -20,7 +20,6 @@
# Move these to harfbuzz-sections.txt when got stable
experimental_symbols = \
"""hb_shape_justify
-hb_subset_repack_or_fail
hb_subset_input_override_name_table
""".splitlines ()
symbols = [x for x in symbols if x not in experimental_symbols]
diff --git a/src/gen-indic-table.py b/src/gen-indic-table.py
index 2c8abcc..31a321a 100755
--- a/src/gen-indic-table.py
+++ b/src/gen-indic-table.py
@@ -102,6 +102,7 @@
'CM',
'Symbol',
'CS',
+ 'SMPst',
],
'khmer' : [
'VAbv',
@@ -435,6 +436,8 @@
indic_data = {}
for k, (cat, pos, block) in combined.items():
cat = category_map[cat]
+ if cat == 'SM' and pos == 'Not_Applicable':
+ cat = 'SMPst'
pos = position_map[pos]
indic_data[k] = (cat, pos, block)
@@ -454,7 +457,7 @@
# Keep in sync with CONSONANT_FLAGS in the shaper
consonant_categories = ('C', 'CS', 'Ra','CM', 'V', 'PLACEHOLDER', 'DOTTEDCIRCLE')
matra_categories = ('M', 'MPst')
-smvd_categories = ('SM', 'VD', 'A', 'Symbol')
+smvd_categories = ('SM', 'SMPst', 'VD', 'A', 'Symbol')
for k, (cat, pos, block) in indic_data.items():
if cat in consonant_categories:
pos = 'BASE_C'
@@ -530,6 +533,7 @@
"Repha": 'Rf',
"PLACEHOLDER": 'GB',
"DOTTEDCIRCLE": 'DC',
+ "SMPst": 'SP',
"VPst": 'VR',
"VPre": 'VL',
"Robatic": 'Rt',
diff --git a/src/harfbuzz-config.cmake.in b/src/harfbuzz-config.cmake.in
index 6abe2d6..2d990ef 100644
--- a/src/harfbuzz-config.cmake.in
+++ b/src/harfbuzz-config.cmake.in
@@ -2,6 +2,8 @@
set_and_check(HARFBUZZ_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@")
+set(HARFBUZZ_VERSION "@HARFBUZZ_VERSION@")
+
# Add the libraries.
add_library(harfbuzz::harfbuzz @HB_LIBRARY_TYPE@ IMPORTED)
set_target_properties(harfbuzz::harfbuzz PROPERTIES
diff --git a/src/harfbuzz-subset.cc b/src/harfbuzz-subset.cc
index 05483b1..a0accfb 100644
--- a/src/harfbuzz-subset.cc
+++ b/src/harfbuzz-subset.cc
@@ -58,7 +58,7 @@
#include "hb-subset-instancer-iup.cc"
#include "hb-subset-instancer-solver.cc"
#include "hb-subset-plan.cc"
-#include "hb-subset-repacker.cc"
+#include "hb-subset-serialize.cc"
#include "hb-subset.cc"
#include "hb-ucd.cc"
#include "hb-unicode.cc"
diff --git a/src/hb-cairo.cc b/src/hb-cairo.cc
index d8b582c..89332d7 100644
--- a/src/hb-cairo.cc
+++ b/src/hb-cairo.cc
@@ -180,7 +180,7 @@
hb_position_t x_scale, y_scale;
hb_font_get_scale (font, &x_scale, &y_scale);
- cairo_scale (cr, x_scale, y_scale);
+ cairo_scale (cr, x_scale, -y_scale);
cairo_glyph_t cairo_glyph = { glyph, 0, 0 };
cairo_set_scaled_font (cr, c->scaled_font);
@@ -597,7 +597,9 @@
hb_position_t x_scale, y_scale;
hb_font_get_scale (font, &x_scale, &y_scale);
- cairo_scale (cr, +1./x_scale, -1./y_scale);
+ cairo_scale (cr,
+ +1. / (x_scale ? x_scale : 1),
+ -1. / (y_scale ? y_scale : 1));
hb_font_draw_glyph (font, glyph, hb_cairo_draw_get_funcs (), cr);
@@ -628,7 +630,9 @@
hb_color_t color = HB_COLOR (0, 0, 0, 255);
hb_position_t x_scale, y_scale;
hb_font_get_scale (font, &x_scale, &y_scale);
- cairo_scale (cr, +1./x_scale, -1./y_scale);
+ cairo_scale (cr,
+ +1. / (x_scale ? x_scale : 1),
+ -1. / (y_scale ? y_scale : 1));
hb_cairo_context_t c;
c.scaled_font = scaled_font;
@@ -1000,6 +1004,7 @@
end = start + hb_glyph[i].cluster - hb_glyph[i+1].cluster;
else
end = (const char *) hb_utf_offset_to_pointer<hb_utf8_t> ((const uint8_t *) start,
+ (const uint8_t *) utf8, utf8_len,
(signed) (hb_glyph[i].cluster - hb_glyph[i+1].cluster));
(*clusters)[cluster].num_bytes = end - start;
start = end;
@@ -1020,6 +1025,7 @@
end = start + hb_glyph[i].cluster - hb_glyph[i-1].cluster;
else
end = (const char *) hb_utf_offset_to_pointer<hb_utf8_t> ((const uint8_t *) start,
+ (const uint8_t *) utf8, utf8_len,
(signed) (hb_glyph[i].cluster - hb_glyph[i-1].cluster));
(*clusters)[cluster].num_bytes = end - start;
start = end;
diff --git a/src/hb-common.cc b/src/hb-common.cc
index f3d6d12..ead5a8a 100644
--- a/src/hb-common.cc
+++ b/src/hb-common.cc
@@ -626,6 +626,9 @@
/* Unicode-14.0 additions */
case HB_SCRIPT_OLD_UYGHUR:
+ /* Unicode-16.0 additions */
+ case HB_SCRIPT_GARAY:
+
return HB_DIRECTION_RTL;
diff --git a/src/hb-config.hh b/src/hb-config.hh
index 1410584..09f6695 100644
--- a/src/hb-config.hh
+++ b/src/hb-config.hh
@@ -68,8 +68,6 @@
#define HB_NO_FACE_COLLECT_UNICODES
#define HB_NO_GETENV
#define HB_NO_HINTING
-#define HB_NO_LANGUAGE_LONG
-#define HB_NO_LANGUAGE_PRIVATE_SUBTAG
#define HB_NO_LAYOUT_FEATURE_PARAMS
#define HB_NO_LAYOUT_COLLECT_GLYPHS
#define HB_NO_LAYOUT_RARELY_USED
diff --git a/src/hb-coretext-font.cc b/src/hb-coretext-font.cc
index e6a02cc..92194ea 100644
--- a/src/hb-coretext-font.cc
+++ b/src/hb-coretext-font.cc
@@ -34,8 +34,12 @@
#include "hb-font.hh"
#include "hb-machinery.hh"
-#if MAC_OS_X_VERSION_MIN_REQUIRED < 101100
+#if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1080) \
+ || (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 60000) \
+ || (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 90000)
# define kCTFontOrientationDefault kCTFontDefaultOrientation
+# define kCTFontOrientationHorizontal kCTFontHorizontalOrientation
+# define kCTFontOrientationVertical kCTFontVerticalOrientation
#endif
#define MAX_GLYPHS 64u
diff --git a/src/hb-face.cc b/src/hb-face.cc
index bc0f6d9..c7dbf79 100644
--- a/src/hb-face.cc
+++ b/src/hb-face.cc
@@ -470,7 +470,8 @@
* @tag: The #hb_tag_t of the table to query
*
* Fetches a reference to the specified table within
- * the specified face.
+ * the specified face. Returns an empty blob if referencing table data is not
+ * possible.
*
* Return value: (transfer full): A pointer to the @tag table within @face
*
diff --git a/src/hb-ft-colr.hh b/src/hb-ft-colr.hh
index 8766a2a..7d8ed4a 100644
--- a/src/hb-ft-colr.hh
+++ b/src/hb-ft-colr.hh
@@ -547,7 +547,9 @@
c.funcs->push_root_transform (c.data, font);
if (is_bounded)
+ {
c.recurse (paint);
+ }
c.funcs->pop_transform (c.data);
c.funcs->pop_clip (c.data);
diff --git a/src/hb-ft.cc b/src/hb-ft.cc
index c305df1..7e65277 100644
--- a/src/hb-ft.cc
+++ b/src/hb-ft.cc
@@ -931,11 +931,15 @@
hb_lock_t lock (ft_font->lock);
FT_Face ft_face = ft_font->ft_face;
+ FT_Long load_flags = ft_font->load_flags | FT_LOAD_NO_BITMAP | FT_LOAD_COLOR;
+#if (FREETYPE_MAJOR*10000 + FREETYPE_MINOR*100 + FREETYPE_PATCH) >= 21301
+ load_flags |= FT_LOAD_NO_SVG;
+#endif
+
/* We release the lock before calling into glyph callbacks, such that
* eg. draw API can call back into the face.*/
- if (unlikely (FT_Load_Glyph (ft_face, gid,
- ft_font->load_flags | FT_LOAD_COLOR)))
+ if (unlikely (FT_Load_Glyph (ft_face, gid, load_flags)))
return;
if (ft_face->glyph->format == FT_GLYPH_FORMAT_OUTLINE)
diff --git a/src/hb-null.hh b/src/hb-null.hh
index 854485d..3588f6a 100644
--- a/src/hb-null.hh
+++ b/src/hb-null.hh
@@ -176,7 +176,7 @@
static inline Type& Crap () {
static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
- memcpy (obj, std::addressof (Null (Type)), sizeof (*obj));
+ memcpy (reinterpret_cast<void*>(obj), std::addressof (Null (Type)), sizeof (*obj));
return *obj;
}
template <typename QType>
diff --git a/src/hb-ot-cmap-table.hh b/src/hb-ot-cmap-table.hh
index 0f1edce..7a7a77a 100644
--- a/src/hb-ot-cmap-table.hh
+++ b/src/hb-ot-cmap-table.hh
@@ -1397,6 +1397,9 @@
hb_vector_t<hb_pair_t<unsigned, unsigned>> obj_indices;
for (int i = src_tbl->record.len - 1; i >= 0; i--)
{
+ if (!unicodes->has(src_tbl->record[i].varSelector))
+ continue;
+
hb_pair_t<unsigned, unsigned> result = src_tbl->record[i].copy (c, unicodes, glyphs_requested, glyph_map, base);
if (result.first || result.second)
obj_indices.push (result);
@@ -1453,6 +1456,7 @@
{
+ hb_iter (record)
| hb_filter (hb_bool, &VariationSelectorRecord::nonDefaultUVS)
+ | hb_filter (unicodes, &VariationSelectorRecord::varSelector)
| hb_map (&VariationSelectorRecord::nonDefaultUVS)
| hb_map (hb_add (this))
| hb_apply ([=] (const NonDefaultUVS& _) { _.closure_glyphs (unicodes, glyphset); })
diff --git a/src/hb-ot-layout-gsubgpos.hh b/src/hb-ot-layout-gsubgpos.hh
index 2c9056c..966fa06 100644
--- a/src/hb-ot-layout-gsubgpos.hh
+++ b/src/hb-ot-layout-gsubgpos.hh
@@ -1462,6 +1462,7 @@
unsigned int this_comp = _hb_glyph_info_get_lig_comp (&buffer->cur());
if (this_comp == 0)
this_comp = last_num_components;
+ assert (components_so_far >= last_num_components);
unsigned int new_lig_comp = components_so_far - last_num_components +
hb_min (this_comp, last_num_components);
_hb_glyph_info_set_lig_props_for_mark (&buffer->cur(), lig_id, new_lig_comp);
@@ -1487,6 +1488,7 @@
unsigned this_comp = _hb_glyph_info_get_lig_comp (&buffer->info[i]);
if (!this_comp) break;
+ assert (components_so_far >= last_num_components);
unsigned new_lig_comp = components_so_far - last_num_components +
hb_min (this_comp, last_num_components);
_hb_glyph_info_set_lig_props_for_mark (&buffer->info[i], lig_id, new_lig_comp);
@@ -1542,6 +1544,7 @@
TRACE_APPLY (nullptr);
hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_context;
+ assert (start_index >= 1);
skippy_iter.reset (start_index - 1);
skippy_iter.set_match_func (match_func, match_data);
skippy_iter.set_glyph_data (lookahead);
@@ -1852,6 +1855,7 @@
if (match_positions != match_positions_input)
hb_free (match_positions);
+ assert (end >= 0);
(void) buffer->move_to (end);
}
diff --git a/src/hb-ot-layout.cc b/src/hb-ot-layout.cc
index 66c2eb4..d26f094 100644
--- a/src/hb-ot-layout.cc
+++ b/src/hb-ot-layout.cc
@@ -246,6 +246,18 @@
/* sha1sum: c26e41d567ed821bed997e937bc0c41435689e85 Padauk.ttf
* "Padauk Regular" "Version 2.5", see https://crbug.com/681813 */
case HB_CODEPOINT_ENCODE3 (1004, 59092, 14836):
+ /* 88d2006ca084f04af2df1954ed714a8c71e8400f Courier New.ttf from macOS 15 */
+ case HB_CODEPOINT_ENCODE3 (588, 5078, 14418):
+ /* 608e3ebb6dd1aee521cff08eb07d500a2c59df68 Courier New Bold.ttf from macOS 15 */
+ case HB_CODEPOINT_ENCODE3 (588, 5078, 14238):
+ /* d13221044ff054efd78f1cd8631b853c3ce85676 cour.ttf from Windows 10 */
+ case HB_CODEPOINT_ENCODE3 (894, 17162, 33960):
+ /* 68ed4a22d8067fcf1622ac6f6e2f4d3a2e3ec394 courbd.ttf from Windows 10 */
+ case HB_CODEPOINT_ENCODE3 (894, 17154, 34472):
+ /* 4cdb0259c96b7fd7c103821bb8f08f7cc6b211d7 cour.ttf from Windows 8.1 */
+ case HB_CODEPOINT_ENCODE3 (816, 7868, 17052):
+ /* 920483d8a8ed37f7f0afdabbe7f679aece7c75d8 courbd.ttf from Windows 8.1 */
+ case HB_CODEPOINT_ENCODE3 (816, 7868, 17138):
return true;
}
return false;
diff --git a/src/hb-ot-os2-table.hh b/src/hb-ot-os2-table.hh
index 6c91402..c00d22b 100644
--- a/src/hb-ot-os2-table.hh
+++ b/src/hb-ot-os2-table.hh
@@ -284,8 +284,8 @@
os2_prime->usWidthClass = width_class;
}
- os2_prime->usFirstCharIndex = hb_min (0xFFFFu, c->plan->unicodes.get_min ());
- os2_prime->usLastCharIndex = hb_min (0xFFFFu, c->plan->unicodes.get_max ());
+ os2_prime->usFirstCharIndex = hb_min (0xFFFFu, c->plan->os2_info.min_cmap_codepoint);
+ os2_prime->usLastCharIndex = hb_min (0xFFFFu, c->plan->os2_info.max_cmap_codepoint);
if (c->plan->flags & HB_SUBSET_FLAGS_NO_PRUNE_UNICODE_RANGES)
return_trace (true);
diff --git a/src/hb-ot-shaper-indic-machine.hh b/src/hb-ot-shaper-indic-machine.hh
index 353e32d..6ff65c3 100644
--- a/src/hb-ot-shaper-indic-machine.hh
+++ b/src/hb-ot-shaper-indic-machine.hh
@@ -68,6 +68,7 @@
#define indic_syllable_machine_ex_Ra 15u
#define indic_syllable_machine_ex_Repha 14u
#define indic_syllable_machine_ex_SM 8u
+#define indic_syllable_machine_ex_SMPst 57u
#define indic_syllable_machine_ex_Symbol 17u
#define indic_syllable_machine_ex_V 2u
#define indic_syllable_machine_ex_VD 9u
@@ -76,251 +77,916 @@
#define indic_syllable_machine_ex_ZWNJ 5u
-#line 80 "hb-ot-shaper-indic-machine.hh"
+#line 81 "hb-ot-shaper-indic-machine.hh"
static const unsigned char _indic_syllable_machine_trans_keys[] = {
- 8u, 8u, 4u, 13u, 5u, 13u, 5u, 13u, 13u, 13u, 4u, 13u, 4u, 13u, 4u, 13u,
- 8u, 8u, 5u, 13u, 5u, 13u, 13u, 13u, 4u, 13u, 4u, 13u, 4u, 13u, 4u, 13u,
- 8u, 8u, 5u, 13u, 5u, 13u, 13u, 13u, 4u, 13u, 4u, 13u, 4u, 13u, 8u, 8u,
- 5u, 13u, 5u, 13u, 13u, 13u, 4u, 13u, 4u, 13u, 5u, 13u, 8u, 8u, 1u, 18u,
- 3u, 16u, 3u, 16u, 4u, 16u, 1u, 15u, 5u, 9u, 5u, 9u, 9u, 9u, 5u, 9u,
- 1u, 15u, 1u, 15u, 1u, 15u, 3u, 13u, 4u, 13u, 5u, 13u, 5u, 13u, 4u, 13u,
- 5u, 9u, 3u, 9u, 5u, 9u, 3u, 16u, 3u, 16u, 3u, 16u, 3u, 16u, 4u, 16u,
- 1u, 15u, 3u, 16u, 3u, 16u, 4u, 16u, 1u, 15u, 5u, 9u, 9u, 9u, 5u, 9u,
- 1u, 15u, 1u, 15u, 3u, 13u, 4u, 13u, 5u, 13u, 5u, 13u, 4u, 13u, 5u, 9u,
- 5u, 9u, 3u, 9u, 5u, 9u, 3u, 16u, 3u, 16u, 4u, 13u, 3u, 16u, 3u, 16u,
- 4u, 16u, 1u, 15u, 3u, 16u, 1u, 15u, 5u, 9u, 9u, 9u, 5u, 9u, 1u, 15u,
- 1u, 15u, 3u, 13u, 4u, 13u, 5u, 13u, 5u, 13u, 3u, 16u, 4u, 13u, 5u, 9u,
- 5u, 9u, 3u, 9u, 5u, 9u, 3u, 16u, 4u, 13u, 4u, 13u, 3u, 16u, 3u, 16u,
- 4u, 16u, 1u, 15u, 3u, 16u, 1u, 15u, 5u, 9u, 9u, 9u, 5u, 9u, 1u, 15u,
- 1u, 15u, 3u, 13u, 4u, 13u, 5u, 13u, 5u, 13u, 3u, 16u, 4u, 13u, 5u, 9u,
- 5u, 9u, 3u, 9u, 5u, 9u, 1u, 16u, 3u, 16u, 1u, 16u, 4u, 13u, 5u, 13u,
- 5u, 13u, 9u, 9u, 5u, 9u, 1u, 15u, 3u, 9u, 5u, 9u, 5u, 9u, 9u, 9u,
+ 8u, 57u, 4u, 57u, 5u, 57u, 5u, 57u, 13u, 13u, 4u, 57u, 4u, 57u, 4u, 57u,
+ 8u, 57u, 5u, 57u, 5u, 57u, 13u, 13u, 4u, 57u, 4u, 57u, 4u, 57u, 4u, 57u,
+ 8u, 57u, 5u, 57u, 5u, 57u, 13u, 13u, 4u, 57u, 4u, 57u, 4u, 57u, 8u, 57u,
+ 5u, 57u, 5u, 57u, 13u, 13u, 4u, 57u, 4u, 57u, 5u, 57u, 8u, 57u, 1u, 57u,
+ 3u, 57u, 3u, 57u, 4u, 57u, 1u, 57u, 5u, 57u, 5u, 57u, 9u, 9u, 5u, 9u,
+ 1u, 57u, 1u, 57u, 1u, 57u, 3u, 57u, 4u, 57u, 5u, 57u, 5u, 57u, 4u, 57u,
+ 5u, 57u, 3u, 57u, 5u, 57u, 3u, 57u, 3u, 57u, 3u, 57u, 3u, 57u, 4u, 57u,
+ 1u, 57u, 3u, 57u, 3u, 57u, 4u, 57u, 1u, 57u, 5u, 57u, 9u, 9u, 5u, 9u,
+ 1u, 57u, 1u, 57u, 3u, 57u, 4u, 57u, 5u, 57u, 5u, 57u, 4u, 57u, 5u, 57u,
+ 5u, 57u, 3u, 57u, 5u, 57u, 3u, 57u, 3u, 57u, 4u, 57u, 3u, 57u, 3u, 57u,
+ 4u, 57u, 1u, 57u, 3u, 57u, 1u, 57u, 5u, 57u, 9u, 9u, 5u, 9u, 1u, 57u,
+ 1u, 57u, 3u, 57u, 4u, 57u, 5u, 57u, 5u, 57u, 3u, 57u, 4u, 57u, 5u, 57u,
+ 5u, 57u, 3u, 57u, 5u, 57u, 3u, 57u, 4u, 57u, 4u, 57u, 3u, 57u, 3u, 57u,
+ 4u, 57u, 1u, 57u, 3u, 57u, 1u, 57u, 5u, 57u, 9u, 9u, 5u, 9u, 1u, 57u,
+ 1u, 57u, 3u, 57u, 4u, 57u, 5u, 57u, 5u, 57u, 3u, 57u, 4u, 57u, 5u, 57u,
+ 5u, 57u, 3u, 57u, 5u, 57u, 1u, 57u, 3u, 57u, 1u, 57u, 4u, 57u, 5u, 57u,
+ 5u, 57u, 9u, 9u, 5u, 9u, 1u, 57u, 3u, 57u, 5u, 57u, 5u, 57u, 9u, 9u,
5u, 9u, 1u, 15u, 0
};
static const char _indic_syllable_machine_key_spans[] = {
- 1, 10, 9, 9, 1, 10, 10, 10,
- 1, 9, 9, 1, 10, 10, 10, 10,
- 1, 9, 9, 1, 10, 10, 10, 1,
- 9, 9, 1, 10, 10, 9, 1, 18,
- 14, 14, 13, 15, 5, 5, 1, 5,
- 15, 15, 15, 11, 10, 9, 9, 10,
- 5, 7, 5, 14, 14, 14, 14, 13,
- 15, 14, 14, 13, 15, 5, 1, 5,
- 15, 15, 11, 10, 9, 9, 10, 5,
- 5, 7, 5, 14, 14, 10, 14, 14,
- 13, 15, 14, 15, 5, 1, 5, 15,
- 15, 11, 10, 9, 9, 14, 10, 5,
- 5, 7, 5, 14, 10, 10, 14, 14,
- 13, 15, 14, 15, 5, 1, 5, 15,
- 15, 11, 10, 9, 9, 14, 10, 5,
- 5, 7, 5, 16, 14, 16, 10, 9,
- 9, 1, 5, 15, 7, 5, 5, 1,
+ 50, 54, 53, 53, 1, 54, 54, 54,
+ 50, 53, 53, 1, 54, 54, 54, 54,
+ 50, 53, 53, 1, 54, 54, 54, 50,
+ 53, 53, 1, 54, 54, 53, 50, 57,
+ 55, 55, 54, 57, 53, 53, 1, 5,
+ 57, 57, 57, 55, 54, 53, 53, 54,
+ 53, 55, 53, 55, 55, 55, 55, 54,
+ 57, 55, 55, 54, 57, 53, 1, 5,
+ 57, 57, 55, 54, 53, 53, 54, 53,
+ 53, 55, 53, 55, 55, 54, 55, 55,
+ 54, 57, 55, 57, 53, 1, 5, 57,
+ 57, 55, 54, 53, 53, 55, 54, 53,
+ 53, 55, 53, 55, 54, 54, 55, 55,
+ 54, 57, 55, 57, 53, 1, 5, 57,
+ 57, 55, 54, 53, 53, 55, 54, 53,
+ 53, 55, 53, 57, 55, 57, 54, 53,
+ 53, 1, 5, 57, 55, 53, 53, 1,
5, 15
};
static const short _indic_syllable_machine_index_offsets[] = {
- 0, 2, 13, 23, 33, 35, 46, 57,
- 68, 70, 80, 90, 92, 103, 114, 125,
- 136, 138, 148, 158, 160, 171, 182, 193,
- 195, 205, 215, 217, 228, 239, 249, 251,
- 270, 285, 300, 314, 330, 336, 342, 344,
- 350, 366, 382, 398, 410, 421, 431, 441,
- 452, 458, 466, 472, 487, 502, 517, 532,
- 546, 562, 577, 592, 606, 622, 628, 630,
- 636, 652, 668, 680, 691, 701, 711, 722,
- 728, 734, 742, 748, 763, 778, 789, 804,
- 819, 833, 849, 864, 880, 886, 888, 894,
- 910, 926, 938, 949, 959, 969, 984, 995,
- 1001, 1007, 1015, 1021, 1036, 1047, 1058, 1073,
- 1088, 1102, 1118, 1133, 1149, 1155, 1157, 1163,
- 1179, 1195, 1207, 1218, 1228, 1238, 1253, 1264,
- 1270, 1276, 1284, 1290, 1307, 1322, 1339, 1350,
- 1360, 1370, 1372, 1378, 1394, 1402, 1408, 1414,
- 1416, 1422
+ 0, 51, 106, 160, 214, 216, 271, 326,
+ 381, 432, 486, 540, 542, 597, 652, 707,
+ 762, 813, 867, 921, 923, 978, 1033, 1088,
+ 1139, 1193, 1247, 1249, 1304, 1359, 1413, 1464,
+ 1522, 1578, 1634, 1689, 1747, 1801, 1855, 1857,
+ 1863, 1921, 1979, 2037, 2093, 2148, 2202, 2256,
+ 2311, 2365, 2421, 2475, 2531, 2587, 2643, 2699,
+ 2754, 2812, 2868, 2924, 2979, 3037, 3091, 3093,
+ 3099, 3157, 3215, 3271, 3326, 3380, 3434, 3489,
+ 3543, 3597, 3653, 3707, 3763, 3819, 3874, 3930,
+ 3986, 4041, 4099, 4155, 4213, 4267, 4269, 4275,
+ 4333, 4391, 4447, 4502, 4556, 4610, 4666, 4721,
+ 4775, 4829, 4885, 4939, 4995, 5050, 5105, 5161,
+ 5217, 5272, 5330, 5386, 5444, 5498, 5500, 5506,
+ 5564, 5622, 5678, 5733, 5787, 5841, 5897, 5952,
+ 6006, 6060, 6116, 6170, 6228, 6284, 6342, 6397,
+ 6451, 6505, 6507, 6513, 6571, 6627, 6681, 6735,
+ 6737, 6743
};
static const unsigned char _indic_syllable_machine_indicies[] = {
- 1, 0, 2, 3, 3, 4, 5, 0,
- 0, 0, 0, 4, 0, 3, 3, 4,
- 6, 0, 0, 0, 0, 4, 0, 3,
- 3, 4, 5, 0, 0, 0, 0, 4,
- 0, 4, 0, 7, 3, 3, 4, 5,
- 0, 0, 0, 0, 4, 0, 2, 3,
- 3, 4, 5, 0, 0, 0, 8, 4,
- 0, 10, 11, 11, 12, 13, 9, 9,
- 9, 9, 12, 9, 14, 9, 11, 11,
- 12, 15, 9, 9, 9, 9, 12, 9,
- 11, 11, 12, 13, 9, 9, 9, 9,
- 12, 9, 12, 9, 16, 11, 11, 12,
- 13, 9, 9, 9, 9, 12, 9, 10,
- 11, 11, 12, 13, 9, 9, 9, 17,
- 12, 9, 10, 11, 11, 12, 13, 9,
- 9, 9, 18, 12, 9, 20, 21, 21,
- 22, 23, 19, 19, 19, 24, 22, 19,
- 25, 19, 21, 21, 22, 27, 26, 26,
- 26, 26, 22, 26, 21, 21, 22, 23,
- 19, 19, 19, 19, 22, 19, 22, 26,
- 20, 21, 21, 22, 23, 19, 19, 19,
- 19, 22, 19, 28, 21, 21, 22, 23,
- 19, 19, 19, 19, 22, 19, 30, 31,
- 31, 32, 33, 29, 29, 29, 34, 32,
+ 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 0, 2, 3, 3, 4, 5,
+ 0, 0, 0, 0, 4, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 5, 0, 3, 3, 4, 6, 0, 0,
+ 0, 0, 4, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6, 0,
+ 3, 3, 4, 5, 0, 0, 0, 0,
+ 4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 0, 4, 0,
+ 7, 3, 3, 4, 5, 0, 0, 0,
+ 0, 4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 5, 0, 2,
+ 3, 3, 4, 5, 0, 0, 0, 8,
+ 4, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5, 0, 10, 11,
+ 11, 12, 13, 9, 9, 9, 9, 12,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 13, 9, 14, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 14, 9,
+ 11, 11, 12, 15, 9, 9, 9, 9,
+ 12, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 15, 9, 11, 11,
+ 12, 13, 9, 9, 9, 9, 12, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 13, 9, 12, 9, 16, 11,
+ 11, 12, 13, 9, 9, 9, 9, 12,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 13, 9, 10, 11, 11,
+ 12, 13, 9, 9, 9, 17, 12, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 13, 9, 10, 11, 11, 12,
+ 13, 9, 9, 9, 18, 12, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 13, 9, 20, 21, 21, 22, 23,
+ 19, 19, 19, 24, 22, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19,
+ 23, 19, 25, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 25, 19, 21, 21, 22,
+ 27, 26, 26, 26, 26, 22, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 27, 26, 21, 21, 22, 23, 19,
+ 19, 19, 19, 22, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 23,
+ 19, 22, 26, 20, 21, 21, 22, 23,
+ 19, 19, 19, 19, 22, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19,
+ 23, 19, 28, 21, 21, 22, 23, 19,
+ 19, 19, 19, 22, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 23,
+ 19, 30, 31, 31, 32, 33, 29, 29,
+ 29, 34, 32, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 33, 29,
+ 35, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
29, 35, 29, 31, 31, 32, 36, 29,
- 29, 29, 29, 32, 29, 31, 31, 32,
- 33, 29, 29, 29, 29, 32, 29, 32,
+ 29, 29, 29, 32, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 36,
+ 29, 31, 31, 32, 33, 29, 29, 29,
+ 29, 32, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 33, 29, 32,
29, 30, 31, 31, 32, 33, 29, 29,
- 29, 29, 32, 29, 37, 31, 31, 32,
- 33, 29, 29, 29, 29, 32, 29, 21,
+ 29, 29, 32, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 33, 29,
+ 37, 31, 31, 32, 33, 29, 29, 29,
+ 29, 32, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 33, 29, 21,
21, 22, 38, 0, 0, 0, 0, 22,
- 0, 40, 39, 42, 43, 44, 45, 46,
- 47, 22, 23, 48, 49, 49, 24, 22,
- 50, 51, 52, 53, 54, 41, 56, 57,
- 58, 59, 4, 5, 60, 55, 55, 8,
- 4, 55, 55, 61, 55, 62, 57, 63,
- 63, 4, 5, 60, 55, 55, 55, 4,
- 55, 55, 61, 55, 57, 63, 63, 4,
- 5, 60, 55, 55, 55, 4, 55, 55,
- 61, 55, 42, 55, 55, 55, 64, 65,
- 55, 1, 60, 55, 55, 55, 55, 55,
- 42, 55, 66, 66, 55, 1, 60, 55,
- 60, 55, 55, 67, 60, 55, 60, 55,
- 60, 55, 55, 55, 60, 55, 42, 55,
- 68, 55, 66, 66, 55, 1, 60, 55,
- 55, 55, 55, 55, 42, 55, 42, 55,
- 55, 55, 66, 66, 55, 1, 60, 55,
- 55, 55, 55, 55, 42, 55, 42, 55,
- 55, 55, 66, 65, 55, 1, 60, 55,
- 55, 55, 55, 55, 42, 55, 69, 70,
- 71, 71, 4, 5, 60, 55, 55, 55,
- 4, 55, 70, 71, 71, 4, 5, 60,
- 55, 55, 55, 4, 55, 71, 71, 4,
- 5, 60, 55, 55, 55, 4, 55, 60,
- 55, 55, 67, 60, 55, 55, 55, 4,
- 55, 72, 73, 73, 4, 5, 60, 55,
- 55, 55, 4, 55, 64, 74, 55, 1,
- 60, 55, 64, 55, 66, 66, 55, 1,
- 60, 55, 66, 74, 55, 1, 60, 55,
- 56, 57, 63, 63, 4, 5, 60, 55,
- 55, 55, 4, 55, 55, 61, 55, 56,
- 57, 58, 63, 4, 5, 60, 55, 55,
- 8, 4, 55, 55, 61, 55, 76, 77,
- 78, 79, 12, 13, 80, 75, 75, 18,
- 12, 75, 75, 81, 75, 82, 77, 83,
- 79, 12, 13, 80, 75, 75, 75, 12,
- 75, 75, 81, 75, 77, 83, 79, 12,
- 13, 80, 75, 75, 75, 12, 75, 75,
- 81, 75, 84, 75, 75, 75, 85, 86,
- 75, 14, 80, 75, 75, 75, 75, 75,
- 84, 75, 87, 77, 88, 89, 12, 13,
- 80, 75, 75, 17, 12, 75, 75, 81,
- 75, 90, 77, 83, 83, 12, 13, 80,
- 75, 75, 75, 12, 75, 75, 81, 75,
- 77, 83, 83, 12, 13, 80, 75, 75,
- 75, 12, 75, 75, 81, 75, 84, 75,
- 75, 75, 91, 86, 75, 14, 80, 75,
- 75, 75, 75, 75, 84, 75, 80, 75,
- 75, 92, 80, 75, 80, 75, 80, 75,
- 75, 75, 80, 75, 84, 75, 93, 75,
- 91, 91, 75, 14, 80, 75, 75, 75,
- 75, 75, 84, 75, 84, 75, 75, 75,
- 91, 91, 75, 14, 80, 75, 75, 75,
- 75, 75, 84, 75, 94, 95, 96, 96,
- 12, 13, 80, 75, 75, 75, 12, 75,
- 95, 96, 96, 12, 13, 80, 75, 75,
- 75, 12, 75, 96, 96, 12, 13, 80,
- 75, 75, 75, 12, 75, 80, 75, 75,
- 92, 80, 75, 75, 75, 12, 75, 97,
- 98, 98, 12, 13, 80, 75, 75, 75,
- 12, 75, 85, 99, 75, 14, 80, 75,
- 91, 91, 75, 14, 80, 75, 85, 75,
- 91, 91, 75, 14, 80, 75, 91, 99,
- 75, 14, 80, 75, 87, 77, 83, 83,
- 12, 13, 80, 75, 75, 75, 12, 75,
- 75, 81, 75, 87, 77, 88, 83, 12,
- 13, 80, 75, 75, 17, 12, 75, 75,
- 81, 75, 10, 11, 11, 12, 13, 75,
- 75, 75, 75, 12, 75, 76, 77, 83,
- 79, 12, 13, 80, 75, 75, 75, 12,
- 75, 75, 81, 75, 101, 45, 102, 102,
- 22, 23, 48, 100, 100, 100, 22, 100,
- 100, 52, 100, 45, 102, 102, 22, 23,
- 48, 100, 100, 100, 22, 100, 100, 52,
- 100, 103, 100, 100, 100, 104, 105, 100,
- 25, 48, 100, 100, 100, 100, 100, 103,
- 100, 44, 45, 106, 107, 22, 23, 48,
- 100, 100, 24, 22, 100, 100, 52, 100,
- 103, 100, 100, 100, 108, 105, 100, 25,
- 48, 100, 100, 100, 100, 100, 103, 100,
- 48, 100, 100, 109, 48, 100, 48, 100,
- 48, 100, 100, 100, 48, 100, 103, 100,
- 110, 100, 108, 108, 100, 25, 48, 100,
- 100, 100, 100, 100, 103, 100, 103, 100,
- 100, 100, 108, 108, 100, 25, 48, 100,
- 100, 100, 100, 100, 103, 100, 111, 112,
- 113, 113, 22, 23, 48, 100, 100, 100,
- 22, 100, 112, 113, 113, 22, 23, 48,
- 100, 100, 100, 22, 100, 113, 113, 22,
- 23, 48, 100, 100, 100, 22, 100, 48,
- 100, 100, 109, 48, 100, 100, 100, 22,
- 100, 44, 45, 102, 102, 22, 23, 48,
- 100, 100, 100, 22, 100, 100, 52, 100,
- 114, 115, 115, 22, 23, 48, 100, 100,
- 100, 22, 100, 104, 116, 100, 25, 48,
- 100, 108, 108, 100, 25, 48, 100, 104,
- 100, 108, 108, 100, 25, 48, 100, 108,
- 116, 100, 25, 48, 100, 44, 45, 106,
- 102, 22, 23, 48, 100, 100, 24, 22,
- 100, 100, 52, 100, 20, 21, 21, 22,
- 23, 117, 117, 117, 24, 22, 117, 20,
- 21, 21, 22, 23, 117, 117, 117, 117,
- 22, 117, 119, 120, 121, 122, 32, 33,
- 123, 118, 118, 34, 32, 118, 118, 124,
- 118, 125, 120, 122, 122, 32, 33, 123,
- 118, 118, 118, 32, 118, 118, 124, 118,
- 120, 122, 122, 32, 33, 123, 118, 118,
- 118, 32, 118, 118, 124, 118, 126, 118,
- 118, 118, 127, 128, 118, 35, 123, 118,
- 118, 118, 118, 118, 126, 118, 119, 120,
- 121, 49, 32, 33, 123, 118, 118, 34,
- 32, 118, 118, 124, 118, 126, 118, 118,
- 118, 129, 128, 118, 35, 123, 118, 118,
- 118, 118, 118, 126, 118, 123, 118, 118,
- 130, 123, 118, 123, 118, 123, 118, 118,
- 118, 123, 118, 126, 118, 131, 118, 129,
- 129, 118, 35, 123, 118, 118, 118, 118,
- 118, 126, 118, 126, 118, 118, 118, 129,
- 129, 118, 35, 123, 118, 118, 118, 118,
- 118, 126, 118, 132, 133, 134, 134, 32,
- 33, 123, 118, 118, 118, 32, 118, 133,
- 134, 134, 32, 33, 123, 118, 118, 118,
- 32, 118, 134, 134, 32, 33, 123, 118,
- 118, 118, 32, 118, 123, 118, 118, 130,
- 123, 118, 118, 118, 32, 118, 119, 120,
- 122, 122, 32, 33, 123, 118, 118, 118,
- 32, 118, 118, 124, 118, 135, 136, 136,
- 32, 33, 123, 118, 118, 118, 32, 118,
- 127, 137, 118, 35, 123, 118, 129, 129,
- 118, 35, 123, 118, 127, 118, 129, 129,
- 118, 35, 123, 118, 129, 137, 118, 35,
- 123, 118, 42, 43, 44, 45, 106, 102,
- 22, 23, 48, 49, 49, 24, 22, 100,
- 42, 52, 100, 56, 138, 58, 59, 4,
- 5, 60, 55, 55, 8, 4, 55, 55,
- 61, 55, 42, 43, 44, 45, 139, 140,
- 22, 141, 142, 55, 49, 24, 22, 55,
- 42, 52, 55, 20, 143, 143, 22, 141,
- 60, 55, 55, 24, 22, 55, 60, 55,
- 55, 67, 60, 55, 55, 55, 22, 55,
- 142, 55, 55, 144, 142, 55, 55, 55,
- 22, 55, 142, 55, 142, 55, 55, 55,
- 142, 55, 42, 55, 68, 20, 143, 143,
- 22, 141, 60, 55, 55, 55, 22, 55,
- 42, 55, 146, 145, 147, 147, 145, 40,
- 148, 145, 147, 147, 145, 40, 148, 145,
- 148, 145, 145, 149, 148, 145, 148, 145,
- 148, 145, 145, 145, 148, 145, 42, 117,
- 117, 117, 117, 117, 117, 117, 117, 49,
- 117, 117, 117, 117, 42, 117, 0
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 38, 0, 40, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 40, 39,
+ 42, 43, 44, 45, 46, 47, 22, 23,
+ 48, 49, 49, 24, 22, 50, 51, 52,
+ 53, 54, 41, 41, 41, 41, 41, 41,
+ 41, 41, 41, 41, 41, 41, 41, 41,
+ 41, 41, 41, 41, 41, 41, 41, 41,
+ 41, 41, 41, 41, 41, 41, 41, 41,
+ 41, 41, 41, 41, 41, 41, 41, 41,
+ 55, 41, 57, 58, 59, 60, 4, 5,
+ 61, 56, 56, 8, 4, 56, 56, 62,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 5, 56, 63, 58, 64, 64, 4, 5,
+ 61, 56, 56, 56, 4, 56, 56, 62,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 5, 56, 58, 64, 64, 4, 5, 61,
+ 56, 56, 56, 4, 56, 56, 62, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 5,
+ 56, 42, 56, 56, 56, 65, 66, 56,
+ 1, 61, 56, 56, 56, 56, 56, 42,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 1, 56, 67, 67, 56, 1, 61,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 1,
+ 56, 61, 56, 56, 68, 61, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 68, 56, 61,
+ 56, 61, 56, 56, 56, 61, 56, 42,
+ 56, 69, 56, 67, 67, 56, 1, 61,
+ 56, 56, 56, 56, 56, 42, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 1,
+ 56, 42, 56, 56, 56, 67, 67, 56,
+ 1, 61, 56, 56, 56, 56, 56, 42,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 1, 56, 42, 56, 56, 56, 67,
+ 66, 56, 1, 61, 56, 56, 56, 56,
+ 56, 42, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 1, 56, 70, 71, 72,
+ 72, 4, 5, 61, 56, 56, 56, 4,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 5, 56, 71, 72, 72,
+ 4, 5, 61, 56, 56, 56, 4, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 5, 56, 72, 72, 4, 5,
+ 61, 56, 56, 56, 4, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 5, 56, 61, 56, 56, 68, 61, 56,
+ 56, 56, 4, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 68, 56,
+ 73, 74, 74, 4, 5, 61, 56, 56,
+ 56, 4, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 5, 56, 65,
+ 75, 56, 1, 61, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 1, 56, 65, 56, 67,
+ 67, 56, 1, 61, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 1, 56, 67, 75, 56,
+ 1, 61, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 1, 56, 57, 58, 64, 64, 4,
+ 5, 61, 56, 56, 56, 4, 56, 56,
+ 62, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 5, 56, 57, 58, 59, 64, 4,
+ 5, 61, 56, 56, 8, 4, 56, 56,
+ 62, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 5, 56, 77, 78, 79, 80, 12,
+ 13, 81, 76, 76, 18, 12, 76, 76,
+ 82, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 13, 76, 83, 78, 84, 80, 12,
+ 13, 81, 76, 76, 76, 12, 76, 76,
+ 82, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 13, 76, 78, 84, 80, 12, 13,
+ 81, 76, 76, 76, 12, 76, 76, 82,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 13, 76, 85, 76, 76, 76, 86, 87,
+ 76, 14, 81, 76, 76, 76, 76, 76,
+ 85, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 14, 76, 88, 78, 89, 90,
+ 12, 13, 81, 76, 76, 17, 12, 76,
+ 76, 82, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 13, 76, 91, 78, 84, 84,
+ 12, 13, 81, 76, 76, 76, 12, 76,
+ 76, 82, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 13, 76, 78, 84, 84, 12,
+ 13, 81, 76, 76, 76, 12, 76, 76,
+ 82, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 13, 76, 85, 76, 76, 76, 92,
+ 87, 76, 14, 81, 76, 76, 76, 76,
+ 76, 85, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 14, 76, 81, 76, 76,
+ 93, 81, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 93, 76, 81, 76, 81, 76, 76,
+ 76, 81, 76, 85, 76, 94, 76, 92,
+ 92, 76, 14, 81, 76, 76, 76, 76,
+ 76, 85, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 14, 76, 85, 76, 76,
+ 76, 92, 92, 76, 14, 81, 76, 76,
+ 76, 76, 76, 85, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 14, 76, 95,
+ 96, 97, 97, 12, 13, 81, 76, 76,
+ 76, 12, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 13, 76, 96,
+ 97, 97, 12, 13, 81, 76, 76, 76,
+ 12, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 13, 76, 97, 97,
+ 12, 13, 81, 76, 76, 76, 12, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 13, 76, 81, 76, 76, 93,
+ 81, 76, 76, 76, 12, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 93, 76, 98, 99, 99, 12, 13, 81,
+ 76, 76, 76, 12, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 13,
+ 76, 86, 100, 76, 14, 81, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 14, 76, 92,
+ 92, 76, 14, 81, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 14, 76, 86, 76, 92,
+ 92, 76, 14, 81, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 14, 76, 92, 100, 76,
+ 14, 81, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 14, 76, 88, 78, 84, 84, 12,
+ 13, 81, 76, 76, 76, 12, 76, 76,
+ 82, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 13, 76, 88, 78, 89, 84, 12,
+ 13, 81, 76, 76, 17, 12, 76, 76,
+ 82, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 13, 76, 10, 11, 11, 12, 13,
+ 76, 76, 76, 76, 12, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 13, 76, 77, 78, 84, 80, 12, 13,
+ 81, 76, 76, 76, 12, 76, 76, 82,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 76,
+ 13, 76, 102, 45, 103, 103, 22, 23,
+ 48, 101, 101, 101, 22, 101, 101, 52,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 23, 101, 45, 103, 103, 22, 23, 48,
+ 101, 101, 101, 22, 101, 101, 52, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 23,
+ 101, 104, 101, 101, 101, 105, 106, 101,
+ 25, 48, 101, 101, 101, 101, 101, 104,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 25, 101, 44, 45, 107, 108, 22,
+ 23, 48, 101, 101, 24, 22, 101, 101,
+ 52, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 23, 101, 104, 101, 101, 101, 109,
+ 106, 101, 25, 48, 101, 101, 101, 101,
+ 101, 104, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 25, 101, 48, 101, 101,
+ 110, 48, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 110, 101, 48, 101, 48, 101, 101,
+ 101, 48, 101, 104, 101, 111, 101, 109,
+ 109, 101, 25, 48, 101, 101, 101, 101,
+ 101, 104, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 25, 101, 104, 101, 101,
+ 101, 109, 109, 101, 25, 48, 101, 101,
+ 101, 101, 101, 104, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 25, 101, 112,
+ 113, 114, 114, 22, 23, 48, 101, 101,
+ 101, 22, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 23, 101, 113,
+ 114, 114, 22, 23, 48, 101, 101, 101,
+ 22, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 23, 101, 114, 114,
+ 22, 23, 48, 101, 101, 101, 22, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 23, 101, 48, 26, 26, 110,
+ 48, 26, 26, 26, 22, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26,
+ 110, 26, 44, 45, 103, 103, 22, 23,
+ 48, 101, 101, 101, 22, 101, 101, 52,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 23, 101, 115, 116, 116, 22, 23, 48,
+ 101, 101, 101, 22, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 23,
+ 101, 105, 117, 101, 25, 48, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 25, 101, 109,
+ 109, 101, 25, 48, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 25, 101, 105, 101, 109,
+ 109, 101, 25, 48, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 25, 101, 109, 117, 101,
+ 25, 48, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 25, 101, 44, 45, 107, 103, 22,
+ 23, 48, 101, 101, 24, 22, 101, 101,
+ 52, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 23, 101, 20, 21, 21, 22, 23,
+ 118, 118, 118, 24, 22, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118,
+ 23, 118, 20, 21, 21, 22, 23, 118,
+ 118, 118, 118, 22, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 118, 23,
+ 118, 120, 121, 122, 123, 32, 33, 124,
+ 119, 119, 34, 32, 119, 119, 125, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 33,
+ 119, 126, 121, 123, 123, 32, 33, 124,
+ 119, 119, 119, 32, 119, 119, 125, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 33,
+ 119, 121, 123, 123, 32, 33, 124, 119,
+ 119, 119, 32, 119, 119, 125, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 33, 119,
+ 127, 119, 119, 119, 128, 129, 119, 35,
+ 124, 119, 119, 119, 119, 119, 127, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 35, 119, 120, 121, 122, 49, 32, 33,
+ 124, 119, 119, 34, 32, 119, 119, 125,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 33, 119, 127, 119, 119, 119, 130, 129,
+ 119, 35, 124, 119, 119, 119, 119, 119,
+ 127, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 35, 119, 124, 119, 119, 131,
+ 124, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 131, 119, 124, 119, 124, 119, 119, 119,
+ 124, 119, 127, 119, 132, 119, 130, 130,
+ 119, 35, 124, 119, 119, 119, 119, 119,
+ 127, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 35, 119, 127, 119, 119, 119,
+ 130, 130, 119, 35, 124, 119, 119, 119,
+ 119, 119, 127, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 35, 119, 133, 134,
+ 135, 135, 32, 33, 124, 119, 119, 119,
+ 32, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 33, 119, 134, 135,
+ 135, 32, 33, 124, 119, 119, 119, 32,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 33, 119, 135, 135, 32,
+ 33, 124, 119, 119, 119, 32, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 33, 119, 124, 119, 119, 131, 124,
+ 119, 119, 119, 32, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 131,
+ 119, 120, 121, 123, 123, 32, 33, 124,
+ 119, 119, 119, 32, 119, 119, 125, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 33,
+ 119, 136, 137, 137, 32, 33, 124, 119,
+ 119, 119, 32, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 33, 119,
+ 128, 138, 119, 35, 124, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 35, 119, 130, 130,
+ 119, 35, 124, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 35, 119, 128, 119, 130, 130,
+ 119, 35, 124, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 35, 119, 130, 138, 119, 35,
+ 124, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 119, 119, 119, 119, 119, 119, 119, 119,
+ 35, 119, 42, 43, 44, 45, 107, 103,
+ 22, 23, 48, 49, 49, 24, 22, 101,
+ 42, 52, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 23, 101, 57, 139, 59, 60,
+ 4, 5, 61, 56, 56, 8, 4, 56,
+ 56, 62, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 5, 56, 42, 43, 44, 45,
+ 140, 141, 22, 142, 143, 56, 49, 24,
+ 22, 56, 42, 52, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 142, 56, 20, 144,
+ 144, 22, 142, 61, 56, 56, 24, 22,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 142, 56, 61, 56, 56,
+ 68, 61, 56, 56, 56, 22, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 68, 56, 143, 56, 56, 145, 143,
+ 56, 56, 56, 22, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 145,
+ 56, 143, 56, 143, 56, 56, 56, 143,
+ 56, 42, 56, 69, 20, 144, 144, 22,
+ 142, 61, 56, 56, 56, 22, 56, 42,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 142, 56, 147, 146, 148, 148, 146,
+ 40, 149, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 40, 146, 148, 148, 146, 40, 149,
+ 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 40,
+ 146, 149, 146, 146, 150, 149, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 150, 146, 149,
+ 146, 149, 146, 146, 146, 149, 146, 42,
+ 118, 118, 118, 118, 118, 118, 118, 118,
+ 49, 118, 118, 118, 118, 42, 118, 0
};
static const unsigned char _indic_syllable_machine_trans_targs[] = {
@@ -330,41 +996,41 @@
93, 84, 31, 19, 98, 31, 107, 24,
113, 116, 117, 108, 26, 122, 127, 31,
134, 31, 32, 53, 79, 81, 100, 101,
- 85, 102, 123, 124, 94, 132, 137, 31,
- 33, 35, 6, 52, 38, 47, 34, 1,
- 36, 40, 0, 39, 41, 44, 45, 3,
- 48, 5, 49, 31, 54, 56, 14, 77,
- 62, 70, 55, 7, 57, 72, 64, 58,
- 13, 76, 59, 8, 63, 65, 67, 68,
- 10, 71, 12, 73, 31, 80, 20, 82,
- 96, 87, 15, 99, 16, 86, 88, 90,
- 91, 18, 95, 21, 97, 31, 31, 103,
- 105, 22, 27, 109, 118, 104, 106, 120,
- 111, 23, 110, 112, 114, 115, 25, 119,
- 28, 121, 125, 126, 131, 128, 129, 29,
- 130, 31, 133, 30, 135, 136
+ 85, 102, 123, 124, 94, 132, 137, 92,
+ 31, 33, 35, 6, 52, 38, 47, 34,
+ 1, 36, 40, 0, 39, 41, 44, 45,
+ 3, 48, 5, 49, 31, 54, 56, 14,
+ 77, 62, 70, 55, 7, 57, 72, 64,
+ 58, 13, 76, 59, 8, 63, 65, 67,
+ 68, 10, 71, 12, 73, 31, 80, 20,
+ 82, 96, 87, 15, 99, 16, 86, 88,
+ 90, 91, 18, 95, 21, 97, 31, 31,
+ 103, 105, 22, 27, 109, 118, 104, 106,
+ 120, 111, 23, 110, 112, 114, 115, 25,
+ 119, 28, 121, 125, 126, 131, 128, 129,
+ 29, 130, 31, 133, 30, 135, 136
};
static const char _indic_syllable_machine_trans_actions[] = {
1, 0, 2, 0, 2, 0, 0, 2,
2, 3, 2, 0, 2, 0, 0, 0,
- 2, 2, 2, 4, 2, 0, 5, 0,
+ 2, 2, 2, 4, 2, 0, 5, 5,
5, 0, 6, 0, 2, 7, 2, 0,
2, 0, 2, 0, 0, 2, 0, 8,
0, 11, 2, 2, 5, 0, 12, 12,
0, 2, 5, 2, 5, 2, 0, 13,
- 2, 0, 0, 2, 0, 2, 2, 0,
- 2, 2, 0, 0, 2, 2, 2, 0,
- 0, 0, 2, 14, 2, 0, 0, 2,
- 0, 2, 2, 0, 2, 2, 2, 2,
+ 14, 2, 0, 0, 2, 0, 2, 2,
0, 2, 2, 0, 0, 2, 2, 2,
- 0, 0, 0, 2, 15, 5, 0, 5,
- 2, 2, 0, 5, 0, 0, 2, 5,
- 5, 0, 0, 0, 2, 16, 17, 2,
- 0, 0, 0, 0, 2, 2, 2, 2,
- 2, 0, 0, 2, 2, 2, 0, 0,
- 0, 2, 0, 18, 18, 0, 0, 0,
- 0, 19, 2, 0, 0, 0
+ 0, 0, 0, 2, 15, 2, 0, 0,
+ 2, 0, 2, 2, 0, 2, 2, 2,
+ 2, 0, 2, 2, 0, 0, 2, 2,
+ 2, 0, 0, 0, 2, 16, 5, 0,
+ 5, 2, 2, 0, 5, 0, 0, 2,
+ 5, 5, 0, 0, 0, 2, 17, 18,
+ 2, 0, 0, 0, 0, 2, 2, 2,
+ 2, 2, 0, 0, 2, 2, 2, 0,
+ 0, 0, 2, 0, 19, 19, 0, 0,
+ 0, 0, 20, 2, 0, 0, 0
};
static const char _indic_syllable_machine_to_state_actions[] = {
@@ -414,20 +1080,20 @@
10, 10, 10, 10, 10, 10, 10, 20,
20, 27, 20, 27, 20, 20, 30, 30,
30, 30, 30, 30, 30, 1, 40, 0,
- 56, 56, 56, 56, 56, 56, 56, 56,
- 56, 56, 56, 56, 56, 56, 56, 56,
- 56, 56, 56, 56, 56, 76, 76, 76,
- 76, 76, 76, 76, 76, 76, 76, 76,
- 76, 76, 76, 76, 76, 76, 76, 76,
- 76, 76, 76, 76, 76, 76, 76, 101,
- 101, 101, 101, 101, 101, 101, 101, 101,
- 101, 101, 101, 101, 101, 101, 101, 101,
- 101, 101, 101, 101, 118, 118, 119, 119,
- 119, 119, 119, 119, 119, 119, 119, 119,
- 119, 119, 119, 119, 119, 119, 119, 119,
- 119, 119, 119, 101, 56, 56, 56, 56,
- 56, 56, 56, 56, 146, 146, 146, 146,
- 146, 118
+ 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 77, 77, 77,
+ 77, 77, 77, 77, 77, 77, 77, 77,
+ 77, 77, 77, 77, 77, 77, 77, 77,
+ 77, 77, 77, 77, 77, 77, 77, 102,
+ 102, 102, 102, 102, 102, 102, 102, 102,
+ 102, 102, 102, 102, 27, 102, 102, 102,
+ 102, 102, 102, 102, 119, 119, 120, 120,
+ 120, 120, 120, 120, 120, 120, 120, 120,
+ 120, 120, 120, 120, 120, 120, 120, 120,
+ 120, 120, 120, 102, 57, 57, 57, 57,
+ 57, 57, 57, 57, 147, 147, 147, 147,
+ 147, 119
};
static const int indic_syllable_machine_start = 31;
@@ -441,7 +1107,7 @@
-#line 118 "hb-ot-shaper-indic-machine.rl"
+#line 121 "hb-ot-shaper-indic-machine.rl"
#define found_syllable(syllable_type) \
@@ -460,7 +1126,7 @@
int cs;
hb_glyph_info_t *info = buffer->info;
-#line 464 "hb-ot-shaper-indic-machine.hh"
+#line 1130 "hb-ot-shaper-indic-machine.hh"
{
cs = indic_syllable_machine_start;
ts = 0;
@@ -468,7 +1134,7 @@
act = 0;
}
-#line 138 "hb-ot-shaper-indic-machine.rl"
+#line 141 "hb-ot-shaper-indic-machine.rl"
p = 0;
@@ -476,7 +1142,7 @@
unsigned int syllable_serial = 1;
-#line 480 "hb-ot-shaper-indic-machine.hh"
+#line 1146 "hb-ot-shaper-indic-machine.hh"
{
int _slen;
int _trans;
@@ -490,7 +1156,7 @@
#line 1 "NONE"
{ts = p;}
break;
-#line 494 "hb-ot-shaper-indic-machine.hh"
+#line 1160 "hb-ot-shaper-indic-machine.hh"
}
_keys = _indic_syllable_machine_trans_keys + (cs<<1);
@@ -513,51 +1179,51 @@
{te = p+1;}
break;
case 11:
-#line 114 "hb-ot-shaper-indic-machine.rl"
+#line 117 "hb-ot-shaper-indic-machine.rl"
{te = p+1;{ found_syllable (indic_non_indic_cluster); }}
break;
- case 13:
-#line 109 "hb-ot-shaper-indic-machine.rl"
+ case 14:
+#line 111 "hb-ot-shaper-indic-machine.rl"
{te = p;p--;{ found_syllable (indic_consonant_syllable); }}
break;
- case 14:
-#line 110 "hb-ot-shaper-indic-machine.rl"
+ case 15:
+#line 112 "hb-ot-shaper-indic-machine.rl"
{te = p;p--;{ found_syllable (indic_vowel_syllable); }}
break;
- case 17:
-#line 111 "hb-ot-shaper-indic-machine.rl"
+ case 18:
+#line 113 "hb-ot-shaper-indic-machine.rl"
{te = p;p--;{ found_syllable (indic_standalone_cluster); }}
break;
- case 19:
-#line 112 "hb-ot-shaper-indic-machine.rl"
+ case 20:
+#line 114 "hb-ot-shaper-indic-machine.rl"
{te = p;p--;{ found_syllable (indic_symbol_cluster); }}
break;
- case 15:
-#line 113 "hb-ot-shaper-indic-machine.rl"
+ case 16:
+#line 116 "hb-ot-shaper-indic-machine.rl"
{te = p;p--;{ found_syllable (indic_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }}
break;
- case 16:
-#line 114 "hb-ot-shaper-indic-machine.rl"
+ case 17:
+#line 117 "hb-ot-shaper-indic-machine.rl"
{te = p;p--;{ found_syllable (indic_non_indic_cluster); }}
break;
case 1:
-#line 109 "hb-ot-shaper-indic-machine.rl"
+#line 111 "hb-ot-shaper-indic-machine.rl"
{{p = ((te))-1;}{ found_syllable (indic_consonant_syllable); }}
break;
case 3:
-#line 110 "hb-ot-shaper-indic-machine.rl"
+#line 112 "hb-ot-shaper-indic-machine.rl"
{{p = ((te))-1;}{ found_syllable (indic_vowel_syllable); }}
break;
case 7:
-#line 111 "hb-ot-shaper-indic-machine.rl"
+#line 113 "hb-ot-shaper-indic-machine.rl"
{{p = ((te))-1;}{ found_syllable (indic_standalone_cluster); }}
break;
case 8:
-#line 112 "hb-ot-shaper-indic-machine.rl"
+#line 114 "hb-ot-shaper-indic-machine.rl"
{{p = ((te))-1;}{ found_syllable (indic_symbol_cluster); }}
break;
case 4:
-#line 113 "hb-ot-shaper-indic-machine.rl"
+#line 116 "hb-ot-shaper-indic-machine.rl"
{{p = ((te))-1;}{ found_syllable (indic_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }}
break;
case 6:
@@ -567,33 +1233,42 @@
{{p = ((te))-1;} found_syllable (indic_consonant_syllable); }
break;
case 5:
- {{p = ((te))-1;} found_syllable (indic_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }
+ {{p = ((te))-1;} found_syllable (indic_non_indic_cluster); }
break;
case 6:
+ {{p = ((te))-1;} found_syllable (indic_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }
+ break;
+ case 7:
{{p = ((te))-1;} found_syllable (indic_non_indic_cluster); }
break;
}
}
break;
- case 18:
+ case 19:
#line 1 "NONE"
{te = p+1;}
-#line 109 "hb-ot-shaper-indic-machine.rl"
+#line 111 "hb-ot-shaper-indic-machine.rl"
{act = 1;}
break;
+ case 13:
+#line 1 "NONE"
+ {te = p+1;}
+#line 115 "hb-ot-shaper-indic-machine.rl"
+ {act = 5;}
+ break;
case 5:
#line 1 "NONE"
{te = p+1;}
-#line 113 "hb-ot-shaper-indic-machine.rl"
- {act = 5;}
+#line 116 "hb-ot-shaper-indic-machine.rl"
+ {act = 6;}
break;
case 12:
#line 1 "NONE"
{te = p+1;}
-#line 114 "hb-ot-shaper-indic-machine.rl"
- {act = 6;}
+#line 117 "hb-ot-shaper-indic-machine.rl"
+ {act = 7;}
break;
-#line 597 "hb-ot-shaper-indic-machine.hh"
+#line 1272 "hb-ot-shaper-indic-machine.hh"
}
_again:
@@ -602,7 +1277,7 @@
#line 1 "NONE"
{ts = 0;}
break;
-#line 606 "hb-ot-shaper-indic-machine.hh"
+#line 1281 "hb-ot-shaper-indic-machine.hh"
}
if ( ++p != pe )
@@ -618,7 +1293,7 @@
}
-#line 146 "hb-ot-shaper-indic-machine.rl"
+#line 149 "hb-ot-shaper-indic-machine.rl"
}
diff --git a/src/hb-ot-shaper-indic-machine.rl b/src/hb-ot-shaper-indic-machine.rl
index f568a84..138b35f 100644
--- a/src/hb-ot-shaper-indic-machine.rl
+++ b/src/hb-ot-shaper-indic-machine.rl
@@ -80,17 +80,19 @@
export CM = 16;
export Symbol= 17;
export CS = 18;
+export SMPst = 57;
c = (C | Ra); # is_consonant
n = ((ZWNJ?.RS)? (N.N?)?); # is_consonant_modifier
z = ZWJ|ZWNJ; # is_joiner
reph = (Ra H | Repha); # possible reph
+sm = SM | SMPst;
cn = c.ZWJ?.n?;
symbol = Symbol.N?;
-matra_group = z*.(M | SM? MPst).N?.H?;
-syllable_tail = (z?.SM.SM?.ZWNJ?)? (A | VD)*;
+matra_group = z*.(M | sm? MPst).N?.H?;
+syllable_tail = (z?.sm.sm?.ZWNJ?)? (A | VD)*;
halant_group = (z?.H.(ZWJ.N?)?);
final_halant_group = halant_group | H.ZWNJ;
medial_group = CM?;
@@ -110,6 +112,7 @@
vowel_syllable => { found_syllable (indic_vowel_syllable); };
standalone_cluster => { found_syllable (indic_standalone_cluster); };
symbol_cluster => { found_syllable (indic_symbol_cluster); };
+ SMPst => { found_syllable (indic_non_indic_cluster); };
broken_cluster => { found_syllable (indic_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; };
other => { found_syllable (indic_non_indic_cluster); };
*|;
diff --git a/src/hb-ot-shaper-indic-table.cc b/src/hb-ot-shaper-indic-table.cc
index adea32e..b87c530 100644
--- a/src/hb-ot-shaper-indic-table.cc
+++ b/src/hb-ot-shaper-indic-table.cc
@@ -48,6 +48,7 @@
#define OT_CM I_Cat(CM)
#define OT_Symbol I_Cat(Symbol)
#define OT_CS I_Cat(CS)
+#define OT_SMPst I_Cat(SMPst)
/* khmer */
#define OT_VAbv K_Cat(VAbv)
#define OT_VBlw K_Cat(VBlw)
@@ -94,7 +95,8 @@
#define _OT_R OT_Ra /* 14 chars; Ra */
#define _OT_Rf OT_Repha /* 1 chars; Repha */
#define _OT_Rt OT_Robatic /* 3 chars; Robatic */
-#define _OT_SM OT_SM /* 56 chars; SM */
+#define _OT_SM OT_SM /* 50 chars; SM */
+#define _OT_SP OT_SMPst /* 6 chars; SMPst */
#define _OT_S OT_Symbol /* 22 chars; Symbol */
#define _OT_V OT_V /* 172 chars; V */
#define _OT_VA OT_VAbv /* 18 chars; VAbv */
@@ -145,7 +147,7 @@
/* Latin-1 Supplement */
- /* 00B0 */ _(X,X), _(X,X),_(SM,SM),_(SM,SM), _(X,X), _(X,X), _(X,X), _(X,X),
+ /* 00B0 */ _(X,X), _(X,X),_(SP,SM),_(SP,SM), _(X,X), _(X,X), _(X,X), _(X,X),
/* 00B8 */ _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), _(X,X),
/* 00C0 */ _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), _(X,X),
/* 00C8 */ _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), _(X,X),
@@ -398,9 +400,9 @@
/* Superscripts and Subscripts */
- /* 2070 */ _(X,X), _(X,X), _(X,X), _(X,X),_(SM,SM), _(X,X), _(X,X), _(X,X),
+ /* 2070 */ _(X,X), _(X,X), _(X,X), _(X,X),_(SP,SM), _(X,X), _(X,X), _(X,X),
/* 2078 */ _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), _(X,X), _(X,X),
- /* 2080 */ _(X,X), _(X,X),_(SM,SM),_(SM,SM),_(SM,SM), _(X,X), _(X,X), _(X,X),
+ /* 2080 */ _(X,X), _(X,X),_(SP,SM),_(SP,SM),_(SP,SM), _(X,X), _(X,X), _(X,X),
#define indic_offset_0x25f8u 1592
@@ -540,6 +542,7 @@
#undef _OT_Rf
#undef _OT_Rt
#undef _OT_SM
+#undef _OT_SP
#undef _OT_S
#undef _OT_V
#undef _OT_VA
diff --git a/src/hb-ot-shaper-myanmar-machine.hh b/src/hb-ot-shaper-myanmar-machine.hh
index f7b456b..4b8da58 100644
--- a/src/hb-ot-shaper-myanmar-machine.hh
+++ b/src/hb-ot-shaper-myanmar-machine.hh
@@ -68,6 +68,7 @@
#define myanmar_syllable_machine_ex_PT 39u
#define myanmar_syllable_machine_ex_Ra 15u
#define myanmar_syllable_machine_ex_SM 8u
+#define myanmar_syllable_machine_ex_SMPst 57u
#define myanmar_syllable_machine_ex_VAbv 20u
#define myanmar_syllable_machine_ex_VBlw 21u
#define myanmar_syllable_machine_ex_VPre 22u
@@ -77,35 +78,35 @@
#define myanmar_syllable_machine_ex_ZWNJ 5u
-#line 81 "hb-ot-shaper-myanmar-machine.hh"
+#line 82 "hb-ot-shaper-myanmar-machine.hh"
static const unsigned char _myanmar_syllable_machine_trans_keys[] = {
- 1u, 41u, 3u, 41u, 5u, 39u, 5u, 8u, 3u, 41u, 3u, 39u, 3u, 39u, 5u, 39u,
- 5u, 39u, 3u, 39u, 3u, 39u, 3u, 41u, 5u, 39u, 1u, 15u, 3u, 39u, 3u, 39u,
- 3u, 40u, 3u, 39u, 3u, 41u, 3u, 41u, 3u, 39u, 3u, 41u, 3u, 41u, 3u, 41u,
- 3u, 41u, 3u, 41u, 5u, 39u, 5u, 8u, 3u, 41u, 3u, 39u, 3u, 39u, 5u, 39u,
- 5u, 39u, 3u, 39u, 3u, 39u, 3u, 41u, 5u, 39u, 1u, 15u, 3u, 41u, 3u, 39u,
- 3u, 39u, 3u, 40u, 3u, 39u, 3u, 41u, 3u, 41u, 3u, 39u, 3u, 41u, 3u, 41u,
- 3u, 41u, 3u, 41u, 3u, 41u, 3u, 41u, 3u, 41u, 1u, 41u, 1u, 15u, 0
+ 1u, 57u, 3u, 57u, 5u, 57u, 5u, 57u, 3u, 57u, 5u, 57u, 3u, 57u, 3u, 57u,
+ 3u, 57u, 3u, 57u, 3u, 57u, 5u, 57u, 1u, 15u, 3u, 57u, 3u, 57u, 3u, 57u,
+ 3u, 57u, 3u, 57u, 3u, 57u, 3u, 57u, 3u, 57u, 3u, 57u, 3u, 57u, 3u, 57u,
+ 3u, 57u, 5u, 57u, 5u, 57u, 3u, 57u, 5u, 57u, 3u, 57u, 3u, 57u, 3u, 57u,
+ 3u, 57u, 3u, 57u, 5u, 57u, 1u, 15u, 3u, 57u, 3u, 57u, 3u, 57u, 3u, 57u,
+ 3u, 57u, 3u, 57u, 3u, 57u, 3u, 57u, 3u, 57u, 3u, 57u, 3u, 57u, 3u, 57u,
+ 3u, 57u, 3u, 57u, 3u, 57u, 1u, 57u, 1u, 15u, 0
};
static const char _myanmar_syllable_machine_key_spans[] = {
- 41, 39, 35, 4, 39, 37, 37, 35,
- 35, 37, 37, 39, 35, 15, 37, 37,
- 38, 37, 39, 39, 37, 39, 39, 39,
- 39, 39, 35, 4, 39, 37, 37, 35,
- 35, 37, 37, 39, 35, 15, 39, 37,
- 37, 38, 37, 39, 39, 37, 39, 39,
- 39, 39, 39, 39, 39, 41, 15
+ 57, 55, 53, 53, 55, 53, 55, 55,
+ 55, 55, 55, 53, 15, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 53, 53, 55, 53, 55, 55, 55,
+ 55, 55, 53, 15, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 57, 15
};
static const short _myanmar_syllable_machine_index_offsets[] = {
- 0, 42, 82, 118, 123, 163, 201, 239,
- 275, 311, 349, 387, 427, 463, 479, 517,
- 555, 594, 632, 672, 712, 750, 790, 830,
- 870, 910, 950, 986, 991, 1031, 1069, 1107,
- 1143, 1179, 1217, 1255, 1295, 1331, 1347, 1387,
- 1425, 1463, 1502, 1540, 1580, 1620, 1658, 1698,
- 1738, 1778, 1818, 1858, 1898, 1938, 1980
+ 0, 58, 114, 168, 222, 278, 332, 388,
+ 444, 500, 556, 612, 666, 682, 738, 794,
+ 850, 906, 962, 1018, 1074, 1130, 1186, 1242,
+ 1298, 1354, 1408, 1462, 1518, 1572, 1628, 1684,
+ 1740, 1796, 1852, 1906, 1922, 1978, 2034, 2090,
+ 2146, 2202, 2258, 2314, 2370, 2426, 2482, 2538,
+ 2594, 2650, 2706, 2762, 2820
};
static const char _myanmar_syllable_machine_indicies[] = {
@@ -114,273 +115,378 @@
0, 8, 0, 9, 10, 11, 12, 0,
0, 0, 0, 0, 0, 0, 0, 13,
0, 0, 14, 15, 16, 17, 18, 19,
- 20, 0, 22, 23, 24, 24, 21, 25,
- 26, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 27, 28, 29, 30, 21,
- 21, 21, 21, 21, 21, 21, 21, 31,
- 21, 21, 32, 33, 34, 35, 36, 37,
- 38, 21, 24, 24, 21, 25, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 30, 21, 21, 21,
- 21, 21, 21, 21, 21, 39, 21, 21,
- 21, 21, 21, 21, 36, 21, 24, 24,
- 21, 25, 21, 22, 21, 24, 24, 21,
- 25, 26, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 40, 21, 21, 30,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 41, 21, 21, 42, 21, 21, 21, 36,
- 21, 41, 21, 22, 21, 24, 24, 21,
- 25, 26, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 30,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 36,
- 21, 43, 21, 24, 24, 21, 25, 36,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 44, 21,
- 21, 21, 21, 21, 21, 36, 21, 24,
- 24, 21, 25, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 44, 21, 21, 21, 21, 21,
- 21, 36, 21, 24, 24, 21, 25, 21,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 36, 21, 22,
- 21, 24, 24, 21, 25, 26, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 40, 21, 21, 30, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 36, 21, 22, 21, 24,
- 24, 21, 25, 26, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 40, 21,
- 21, 30, 21, 21, 21, 21, 21, 21,
- 21, 21, 41, 21, 21, 21, 21, 21,
- 21, 36, 21, 22, 21, 24, 24, 21,
- 25, 26, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 40, 21, 21, 30,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 41, 21, 21, 21, 21, 21, 21, 36,
- 21, 41, 21, 24, 24, 21, 25, 21,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 30, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 36, 21, 1,
- 1, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 1, 21, 22,
- 21, 24, 24, 21, 25, 26, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 27, 28, 21, 30, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 36, 21, 22, 21, 24,
- 24, 21, 25, 26, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 28,
- 21, 30, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 36, 21, 22, 21, 24, 24, 21,
- 25, 26, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 27, 28, 29, 30,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 36,
- 45, 21, 22, 21, 24, 24, 21, 25,
- 26, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 27, 28, 29, 30, 21,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 36, 21,
- 22, 21, 24, 24, 21, 25, 26, 21,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 27, 28, 29, 30, 21, 21, 21,
- 21, 21, 21, 21, 21, 31, 21, 21,
- 32, 33, 34, 35, 36, 21, 38, 21,
- 22, 21, 24, 24, 21, 25, 26, 21,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 27, 28, 29, 30, 21, 21, 21,
- 21, 21, 21, 21, 21, 45, 21, 21,
- 21, 21, 21, 21, 36, 21, 38, 21,
- 22, 21, 24, 24, 21, 25, 26, 21,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 27, 28, 29, 30, 21, 21, 21,
- 21, 21, 21, 21, 21, 45, 21, 21,
- 21, 21, 21, 21, 36, 21, 22, 21,
- 24, 24, 21, 25, 26, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 27,
- 28, 29, 30, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 32, 21,
- 34, 21, 36, 21, 38, 21, 22, 21,
- 24, 24, 21, 25, 26, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 27,
- 28, 29, 30, 21, 21, 21, 21, 21,
- 21, 21, 21, 45, 21, 21, 32, 21,
- 21, 21, 36, 21, 38, 21, 22, 21,
- 24, 24, 21, 25, 26, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 27,
- 28, 29, 30, 21, 21, 21, 21, 21,
- 21, 21, 21, 46, 21, 21, 32, 33,
- 34, 21, 36, 21, 38, 21, 22, 21,
- 24, 24, 21, 25, 26, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 27,
- 28, 29, 30, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 32, 33,
- 34, 21, 36, 21, 38, 21, 22, 23,
- 24, 24, 21, 25, 26, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 27,
- 28, 29, 30, 21, 21, 21, 21, 21,
- 21, 21, 21, 31, 21, 21, 32, 33,
- 34, 35, 36, 21, 38, 21, 48, 48,
+ 20, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 21, 0, 23, 24, 25, 25, 22, 26,
+ 27, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 28, 29, 30, 31, 22,
+ 22, 22, 22, 22, 22, 22, 22, 32,
+ 22, 22, 33, 34, 35, 36, 37, 38,
+ 39, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 26, 22, 25, 25, 22, 26, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 31, 22, 22, 22,
+ 22, 22, 22, 22, 22, 40, 22, 22,
+ 22, 22, 22, 22, 37, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 26, 22,
+ 25, 25, 22, 26, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 37, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 26, 22, 41, 22,
+ 25, 25, 22, 26, 37, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 26, 22, 22, 22, 22,
+ 22, 22, 37, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 26, 22, 25, 25,
+ 22, 26, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 26, 22, 22, 22, 22, 22, 22,
+ 37, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 26, 22, 23, 22, 25, 25,
+ 22, 26, 27, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 42, 22, 22,
+ 31, 22, 22, 22, 22, 22, 22, 22,
+ 22, 43, 22, 22, 44, 22, 22, 22,
+ 37, 22, 43, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 26, 22, 23, 22, 25, 25,
+ 22, 26, 27, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 31, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 37, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 26, 22, 23, 22, 25, 25,
+ 22, 26, 27, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 42, 22, 22,
+ 31, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 37, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 26, 22, 23, 22, 25, 25,
+ 22, 26, 27, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 42, 22, 22,
+ 31, 22, 22, 22, 22, 22, 22, 22,
+ 22, 43, 22, 22, 22, 22, 22, 22,
+ 37, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 26, 22, 23, 22, 25, 25,
+ 22, 26, 27, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 42, 22, 22,
+ 31, 22, 22, 22, 22, 22, 22, 22,
+ 22, 43, 22, 22, 22, 22, 22, 22,
+ 37, 22, 43, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 26, 22, 25, 25, 22, 26,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 31, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 37, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 26, 22, 1, 1, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 1, 22, 23, 22, 25, 25, 22, 26,
+ 27, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 28, 29, 22, 31, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 37, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 26, 22, 23, 22, 25, 25, 22, 26,
+ 27, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 29, 22, 31, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 37, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 26, 22, 23, 22, 25, 25, 22, 26,
+ 27, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 28, 29, 30, 31, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 37, 45,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 26, 22, 23, 22, 25, 25, 22, 26,
+ 27, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 28, 29, 30, 31, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 37, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 26, 22, 23, 22, 25, 25, 22, 26,
+ 27, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 28, 29, 30, 31, 22,
+ 22, 22, 22, 22, 22, 22, 22, 32,
+ 22, 22, 33, 34, 35, 36, 37, 22,
+ 39, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 26, 22, 23, 22, 25, 25, 22, 26,
+ 27, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 28, 29, 30, 31, 22,
+ 22, 22, 22, 22, 22, 22, 22, 45,
+ 22, 22, 22, 22, 22, 22, 37, 22,
+ 39, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 26, 22, 23, 22, 25, 25, 22, 26,
+ 27, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 28, 29, 30, 31, 22,
+ 22, 22, 22, 22, 22, 22, 22, 45,
+ 22, 22, 22, 22, 22, 22, 37, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 26, 22, 23, 22, 25, 25, 22, 26,
+ 27, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 28, 29, 30, 31, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 33, 22, 35, 22, 37, 22,
+ 39, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 26, 22, 23, 22, 25, 25, 22, 26,
+ 27, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 28, 29, 30, 31, 22,
+ 22, 22, 22, 22, 22, 22, 22, 45,
+ 22, 22, 33, 22, 22, 22, 37, 22,
+ 39, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 26, 22, 23, 22, 25, 25, 22, 26,
+ 27, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 28, 29, 30, 31, 22,
+ 22, 22, 22, 22, 22, 22, 22, 46,
+ 22, 22, 33, 34, 35, 22, 37, 22,
+ 39, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 26, 22, 23, 22, 25, 25, 22, 26,
+ 27, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 28, 29, 30, 31, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 33, 34, 35, 22, 37, 22,
+ 39, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 26, 22, 23, 24, 25, 25, 22, 26,
+ 27, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 28, 29, 30, 31, 22,
+ 22, 22, 22, 22, 22, 22, 22, 32,
+ 22, 22, 33, 34, 35, 36, 37, 22,
+ 39, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 26, 22, 48, 48, 47, 5, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 12, 47, 47, 47,
+ 47, 47, 47, 47, 47, 49, 47, 47,
+ 47, 47, 47, 47, 18, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 5, 47,
+ 48, 48, 50, 5, 50, 50, 50, 50,
+ 50, 50, 50, 50, 50, 50, 50, 50,
+ 50, 50, 50, 50, 50, 50, 50, 50,
+ 50, 50, 50, 50, 50, 50, 50, 50,
+ 50, 50, 18, 50, 50, 50, 50, 50,
+ 50, 50, 50, 50, 50, 50, 50, 50,
+ 50, 50, 50, 50, 5, 50, 51, 47,
+ 48, 48, 47, 5, 18, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 5, 47, 47, 47, 47,
+ 47, 47, 18, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 5, 47, 48, 48,
47, 5, 47, 47, 47, 47, 47, 47,
47, 47, 47, 47, 47, 47, 47, 47,
- 12, 47, 47, 47, 47, 47, 47, 47,
- 47, 49, 47, 47, 47, 47, 47, 47,
- 18, 47, 48, 48, 47, 5, 47, 2,
- 47, 48, 48, 47, 5, 6, 47, 47,
47, 47, 47, 47, 47, 47, 47, 47,
- 50, 47, 47, 12, 47, 47, 47, 47,
- 47, 47, 47, 47, 51, 47, 47, 52,
- 47, 47, 47, 18, 47, 51, 47, 2,
- 47, 48, 48, 47, 5, 6, 47, 47,
+ 47, 5, 47, 47, 47, 47, 47, 47,
+ 18, 47, 47, 47, 47, 47, 47, 47,
47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 12, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 18, 47, 53, 47, 48,
- 48, 47, 5, 18, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 54, 47, 47, 47, 47, 47,
- 47, 18, 47, 48, 48, 47, 5, 47,
- 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 54, 47,
- 47, 47, 47, 47, 47, 18, 47, 48,
- 48, 47, 5, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 18, 47, 2, 47, 48, 48, 47,
- 5, 6, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 50, 47, 47, 12,
- 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 18,
- 47, 2, 47, 48, 48, 47, 5, 6,
- 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 50, 47, 47, 12, 47, 47,
- 47, 47, 47, 47, 47, 47, 51, 47,
- 47, 47, 47, 47, 47, 18, 47, 2,
- 47, 48, 48, 47, 5, 6, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47,
- 50, 47, 47, 12, 47, 47, 47, 47,
- 47, 47, 47, 47, 51, 47, 47, 47,
- 47, 47, 47, 18, 47, 51, 47, 48,
- 48, 47, 5, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 12, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 18, 47, 55, 55, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 55, 47, 2, 3, 48, 48, 47,
- 5, 6, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 9, 10, 11, 12,
- 47, 47, 47, 47, 47, 47, 47, 47,
- 13, 47, 47, 14, 15, 16, 17, 18,
- 19, 20, 47, 2, 47, 48, 48, 47,
- 5, 6, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 9, 10, 47, 12,
- 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 18,
- 47, 2, 47, 48, 48, 47, 5, 6,
- 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 10, 47, 12, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 18, 47, 2,
- 47, 48, 48, 47, 5, 6, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47,
- 9, 10, 11, 12, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 18, 56, 47, 2, 47,
- 48, 48, 47, 5, 6, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 9,
- 10, 11, 12, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 18, 47, 2, 47, 48, 48,
+ 47, 47, 5, 47, 2, 47, 48, 48,
47, 5, 6, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 9, 10, 11,
+ 47, 47, 47, 47, 47, 52, 47, 47,
12, 47, 47, 47, 47, 47, 47, 47,
- 47, 13, 47, 47, 14, 15, 16, 17,
- 18, 47, 20, 47, 2, 47, 48, 48,
+ 47, 53, 47, 47, 54, 47, 47, 47,
+ 18, 47, 53, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 5, 47, 2, 47, 48, 48,
47, 5, 6, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 9, 10, 11,
+ 47, 47, 47, 47, 47, 47, 47, 47,
12, 47, 47, 47, 47, 47, 47, 47,
- 47, 56, 47, 47, 47, 47, 47, 47,
- 18, 47, 20, 47, 2, 47, 48, 48,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 18, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 5, 47, 2, 47, 48, 48,
47, 5, 6, 47, 47, 47, 47, 47,
- 47, 47, 47, 47, 47, 9, 10, 11,
+ 47, 47, 47, 47, 47, 52, 47, 47,
12, 47, 47, 47, 47, 47, 47, 47,
- 47, 56, 47, 47, 47, 47, 47, 47,
- 18, 47, 2, 47, 48, 48, 47, 5,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 18, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 5, 47, 2, 47, 48, 48,
+ 47, 5, 6, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 52, 47, 47,
+ 12, 47, 47, 47, 47, 47, 47, 47,
+ 47, 53, 47, 47, 47, 47, 47, 47,
+ 18, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 5, 47, 2, 47, 48, 48,
+ 47, 5, 6, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 52, 47, 47,
+ 12, 47, 47, 47, 47, 47, 47, 47,
+ 47, 53, 47, 47, 47, 47, 47, 47,
+ 18, 47, 53, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 5, 47, 48, 48, 47, 5,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 12, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 18, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 5, 47, 55, 55, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 55, 47, 2, 3, 48, 48, 47, 5,
+ 6, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 9, 10, 11, 12, 47,
+ 47, 47, 47, 47, 47, 47, 47, 13,
+ 47, 47, 14, 15, 16, 17, 18, 19,
+ 20, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 5, 47, 2, 47, 48, 48, 47, 5,
+ 6, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 9, 10, 47, 12, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 18, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 5, 47, 2, 47, 48, 48, 47, 5,
+ 6, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 10, 47, 12, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 18, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 5, 47, 2, 47, 48, 48, 47, 5,
6, 47, 47, 47, 47, 47, 47, 47,
47, 47, 47, 9, 10, 11, 12, 47,
47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 14, 47, 16, 47, 18, 47,
- 20, 47, 2, 47, 48, 48, 47, 5,
- 6, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 9, 10, 11, 12, 47,
- 47, 47, 47, 47, 47, 47, 47, 56,
- 47, 47, 14, 47, 47, 47, 18, 47,
- 20, 47, 2, 47, 48, 48, 47, 5,
- 6, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 47, 9, 10, 11, 12, 47,
- 47, 47, 47, 47, 47, 47, 47, 57,
- 47, 47, 14, 15, 16, 47, 18, 47,
- 20, 47, 2, 47, 48, 48, 47, 5,
+ 47, 47, 47, 47, 47, 47, 18, 56,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 5, 47, 2, 47, 48, 48, 47, 5,
6, 47, 47, 47, 47, 47, 47, 47,
47, 47, 47, 9, 10, 11, 12, 47,
47, 47, 47, 47, 47, 47, 47, 47,
- 47, 47, 14, 15, 16, 47, 18, 47,
- 20, 47, 2, 3, 48, 48, 47, 5,
+ 47, 47, 47, 47, 47, 47, 18, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 5, 47, 2, 47, 48, 48, 47, 5,
6, 47, 47, 47, 47, 47, 47, 47,
47, 47, 47, 9, 10, 11, 12, 47,
47, 47, 47, 47, 47, 47, 47, 13,
47, 47, 14, 15, 16, 17, 18, 47,
- 20, 47, 22, 23, 24, 24, 21, 25,
- 26, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 27, 28, 29, 30, 21,
- 21, 21, 21, 21, 21, 21, 21, 58,
- 21, 21, 32, 33, 34, 35, 36, 37,
- 38, 21, 22, 59, 24, 24, 21, 25,
- 26, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 27, 28, 29, 30, 21,
- 21, 21, 21, 21, 21, 21, 21, 31,
- 21, 21, 32, 33, 34, 35, 36, 21,
- 38, 21, 1, 1, 2, 3, 48, 48,
+ 20, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 5, 47, 2, 47, 48, 48, 47, 5,
+ 6, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 9, 10, 11, 12, 47,
+ 47, 47, 47, 47, 47, 47, 47, 56,
+ 47, 47, 47, 47, 47, 47, 18, 47,
+ 20, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 5, 47, 2, 47, 48, 48, 47, 5,
+ 6, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 9, 10, 11, 12, 47,
+ 47, 47, 47, 47, 47, 47, 47, 56,
+ 47, 47, 47, 47, 47, 47, 18, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 5, 47, 2, 47, 48, 48, 47, 5,
+ 6, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 9, 10, 11, 12, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 14, 47, 16, 47, 18, 47,
+ 20, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 5, 47, 2, 47, 48, 48, 47, 5,
+ 6, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 9, 10, 11, 12, 47,
+ 47, 47, 47, 47, 47, 47, 47, 56,
+ 47, 47, 14, 47, 47, 47, 18, 47,
+ 20, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 5, 47, 2, 47, 48, 48, 47, 5,
+ 6, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 9, 10, 11, 12, 47,
+ 47, 47, 47, 47, 47, 47, 47, 57,
+ 47, 47, 14, 15, 16, 47, 18, 47,
+ 20, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 5, 47, 2, 47, 48, 48, 47, 5,
+ 6, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 9, 10, 11, 12, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 14, 15, 16, 47, 18, 47,
+ 20, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 5, 47, 2, 3, 48, 48, 47, 5,
+ 6, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 9, 10, 11, 12, 47,
+ 47, 47, 47, 47, 47, 47, 47, 13,
+ 47, 47, 14, 15, 16, 17, 18, 47,
+ 20, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 5, 47, 23, 24, 25, 25, 22, 26,
+ 27, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 28, 29, 30, 31, 22,
+ 22, 22, 22, 22, 22, 22, 22, 58,
+ 22, 22, 33, 34, 35, 36, 37, 38,
+ 39, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 26, 22, 23, 59, 25, 25, 22, 26,
+ 27, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 28, 29, 30, 31, 22,
+ 22, 22, 22, 22, 22, 22, 22, 32,
+ 22, 22, 33, 34, 35, 36, 37, 22,
+ 39, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 26, 22, 1, 1, 2, 3, 48, 48,
47, 5, 6, 1, 1, 47, 47, 47,
1, 47, 47, 47, 47, 9, 10, 11,
12, 47, 47, 47, 47, 47, 47, 47,
47, 13, 47, 47, 14, 15, 16, 17,
- 18, 19, 20, 47, 1, 1, 60, 60,
+ 18, 19, 20, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 5, 47, 1, 1, 60, 60,
60, 60, 60, 60, 60, 1, 1, 60,
60, 60, 1, 60, 0
};
static const char _myanmar_syllable_machine_trans_targs[] = {
- 0, 1, 26, 37, 0, 27, 29, 51,
- 54, 39, 40, 41, 28, 43, 44, 46,
- 47, 48, 30, 50, 45, 0, 2, 13,
- 0, 3, 5, 14, 15, 16, 4, 18,
- 19, 21, 22, 23, 6, 25, 20, 12,
- 9, 10, 11, 7, 8, 17, 24, 0,
- 0, 36, 33, 34, 35, 31, 32, 38,
- 42, 49, 52, 53, 0
+ 0, 1, 25, 35, 0, 26, 30, 49,
+ 52, 37, 38, 39, 29, 41, 42, 44,
+ 45, 46, 27, 48, 43, 26, 0, 2,
+ 12, 0, 3, 7, 13, 14, 15, 6,
+ 17, 18, 20, 21, 22, 4, 24, 19,
+ 11, 5, 8, 9, 10, 16, 23, 0,
+ 0, 34, 0, 28, 31, 32, 33, 36,
+ 40, 47, 50, 51, 0
};
static const char _myanmar_syllable_machine_trans_actions[] = {
- 3, 0, 0, 0, 4, 0, 0, 0,
+ 3, 0, 0, 0, 4, 5, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 5, 0, 0,
- 6, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 6, 7, 0,
+ 0, 8, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 7,
- 8, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 9
+ 0, 0, 0, 0, 0, 0, 0, 9,
+ 10, 0, 11, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 12
};
static const char _myanmar_syllable_machine_to_state_actions[] = {
@@ -390,7 +496,7 @@
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0
};
static const char _myanmar_syllable_machine_from_state_actions[] = {
@@ -400,17 +506,17 @@
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0
};
static const short _myanmar_syllable_machine_eof_trans[] = {
- 0, 22, 22, 22, 22, 22, 22, 22,
- 22, 22, 22, 22, 22, 22, 22, 22,
- 22, 22, 22, 22, 22, 22, 22, 22,
- 22, 22, 48, 48, 48, 48, 48, 48,
+ 0, 23, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23,
+ 23, 48, 51, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 22, 22, 48, 61
+ 48, 23, 23, 48, 61
};
static const int myanmar_syllable_machine_start = 0;
@@ -424,7 +530,7 @@
-#line 117 "hb-ot-shaper-myanmar-machine.rl"
+#line 118 "hb-ot-shaper-myanmar-machine.rl"
#define found_syllable(syllable_type) \
@@ -443,7 +549,7 @@
int cs;
hb_glyph_info_t *info = buffer->info;
-#line 447 "hb-ot-shaper-myanmar-machine.hh"
+#line 553 "hb-ot-shaper-myanmar-machine.hh"
{
cs = myanmar_syllable_machine_start;
ts = 0;
@@ -451,7 +557,7 @@
act = 0;
}
-#line 137 "hb-ot-shaper-myanmar-machine.rl"
+#line 138 "hb-ot-shaper-myanmar-machine.rl"
p = 0;
@@ -459,7 +565,7 @@
unsigned int syllable_serial = 1;
-#line 463 "hb-ot-shaper-myanmar-machine.hh"
+#line 569 "hb-ot-shaper-myanmar-machine.hh"
{
int _slen;
int _trans;
@@ -473,7 +579,7 @@
#line 1 "NONE"
{ts = p;}
break;
-#line 477 "hb-ot-shaper-myanmar-machine.hh"
+#line 583 "hb-ot-shaper-myanmar-machine.hh"
}
_keys = _myanmar_syllable_machine_trans_keys + (cs<<1);
@@ -491,35 +597,59 @@
goto _again;
switch ( _myanmar_syllable_machine_trans_actions[_trans] ) {
- case 6:
-#line 110 "hb-ot-shaper-myanmar-machine.rl"
+ case 8:
+#line 111 "hb-ot-shaper-myanmar-machine.rl"
{te = p+1;{ found_syllable (myanmar_consonant_syllable); }}
break;
case 4:
-#line 111 "hb-ot-shaper-myanmar-machine.rl"
+#line 112 "hb-ot-shaper-myanmar-machine.rl"
{te = p+1;{ found_syllable (myanmar_non_myanmar_cluster); }}
break;
- case 8:
-#line 112 "hb-ot-shaper-myanmar-machine.rl"
+ case 10:
+#line 113 "hb-ot-shaper-myanmar-machine.rl"
{te = p+1;{ found_syllable (myanmar_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }}
break;
case 3:
-#line 113 "hb-ot-shaper-myanmar-machine.rl"
+#line 114 "hb-ot-shaper-myanmar-machine.rl"
{te = p+1;{ found_syllable (myanmar_non_myanmar_cluster); }}
break;
- case 5:
-#line 110 "hb-ot-shaper-myanmar-machine.rl"
- {te = p;p--;{ found_syllable (myanmar_consonant_syllable); }}
- break;
case 7:
-#line 112 "hb-ot-shaper-myanmar-machine.rl"
- {te = p;p--;{ found_syllable (myanmar_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }}
+#line 111 "hb-ot-shaper-myanmar-machine.rl"
+ {te = p;p--;{ found_syllable (myanmar_consonant_syllable); }}
break;
case 9:
#line 113 "hb-ot-shaper-myanmar-machine.rl"
+ {te = p;p--;{ found_syllable (myanmar_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }}
+ break;
+ case 12:
+#line 114 "hb-ot-shaper-myanmar-machine.rl"
{te = p;p--;{ found_syllable (myanmar_non_myanmar_cluster); }}
break;
-#line 523 "hb-ot-shaper-myanmar-machine.hh"
+ case 11:
+#line 1 "NONE"
+ { switch( act ) {
+ case 2:
+ {{p = ((te))-1;} found_syllable (myanmar_non_myanmar_cluster); }
+ break;
+ case 3:
+ {{p = ((te))-1;} found_syllable (myanmar_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }
+ break;
+ }
+ }
+ break;
+ case 6:
+#line 1 "NONE"
+ {te = p+1;}
+#line 112 "hb-ot-shaper-myanmar-machine.rl"
+ {act = 2;}
+ break;
+ case 5:
+#line 1 "NONE"
+ {te = p+1;}
+#line 113 "hb-ot-shaper-myanmar-machine.rl"
+ {act = 3;}
+ break;
+#line 653 "hb-ot-shaper-myanmar-machine.hh"
}
_again:
@@ -528,7 +658,7 @@
#line 1 "NONE"
{ts = 0;}
break;
-#line 532 "hb-ot-shaper-myanmar-machine.hh"
+#line 662 "hb-ot-shaper-myanmar-machine.hh"
}
if ( ++p != pe )
@@ -544,7 +674,7 @@
}
-#line 145 "hb-ot-shaper-myanmar-machine.rl"
+#line 146 "hb-ot-shaper-myanmar-machine.rl"
}
diff --git a/src/hb-ot-shaper-myanmar-machine.rl b/src/hb-ot-shaper-myanmar-machine.rl
index e8d1e78..0b7a959 100644
--- a/src/hb-ot-shaper-myanmar-machine.rl
+++ b/src/hb-ot-shaper-myanmar-machine.rl
@@ -72,6 +72,7 @@
export A = 9;
export Ra = 15;
export CS = 18;
+export SMPst= 57;
export VAbv = 20;
export VBlw = 21;
@@ -91,15 +92,15 @@
j = ZWJ|ZWNJ; # Joiners
k = (Ra As H); # Kinzi
-
+sm = SM | SMPst;
c = C|Ra; # is_consonant
medial_group = MY? As? MR? ((MW MH? ML? | MH ML? | ML) As?)?;
main_vowel_group = (VPre.VS?)* VAbv* VBlw* A* (DB As?)?;
post_vowel_group = VPst MH? ML? As* VAbv* A* (DB As?)?;
-pwo_tone_group = PT A* DB? As?;
+tone_group = sm | PT A* DB? As?;
-complex_syllable_tail = As* medial_group main_vowel_group post_vowel_group* pwo_tone_group* SM* j?;
+complex_syllable_tail = As* medial_group main_vowel_group post_vowel_group* tone_group* j?;
syllable_tail = (H (c|IV).VS?)* (H | complex_syllable_tail);
consonant_syllable = (k|CS)? (c|IV|GB|DOTTEDCIRCLE).VS? syllable_tail;
@@ -108,7 +109,7 @@
main := |*
consonant_syllable => { found_syllable (myanmar_consonant_syllable); };
- j => { found_syllable (myanmar_non_myanmar_cluster); };
+ j | SMPst => { found_syllable (myanmar_non_myanmar_cluster); };
broken_cluster => { found_syllable (myanmar_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; };
other => { found_syllable (myanmar_non_myanmar_cluster); };
*|;
diff --git a/src/hb-ot-shaper-use-machine.hh b/src/hb-ot-shaper-use-machine.hh
index e9da28d..65b6adc 100644
--- a/src/hb-ot-shaper-use-machine.hh
+++ b/src/hb-ot-shaper-use-machine.hh
@@ -166,556 +166,556 @@
19, 20, 21, 8, 22, 23, 24, 25,
5, 26, 27, 28, 5, 29, 30, 31,
32, 33, 34, 35, 32, 1, 5, 36,
- 5, 37, 5, 5, 35, 5, 39, 40,
- 38, 41, 38, 38, 38, 38, 38, 38,
- 38, 42, 43, 44, 45, 46, 47, 48,
- 49, 50, 39, 51, 52, 53, 54, 38,
- 55, 56, 57, 38, 58, 59, 38, 60,
- 61, 62, 63, 60, 38, 38, 38, 38,
- 64, 38, 38, 63, 38, 39, 40, 38,
- 41, 38, 38, 38, 38, 38, 38, 38,
- 42, 43, 44, 45, 46, 47, 48, 49,
- 50, 39, 51, 52, 53, 54, 38, 55,
- 56, 57, 38, 38, 38, 38, 60, 61,
- 62, 63, 60, 38, 38, 38, 38, 64,
- 38, 38, 63, 38, 39, 38, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 38,
- 38, 41, 38, 38, 38, 38, 38, 38,
- 38, 38, 43, 44, 45, 46, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 38,
- 55, 56, 57, 38, 38, 38, 38, 38,
- 61, 62, 63, 65, 38, 38, 38, 38,
- 43, 38, 41, 38, 38, 38, 38, 38,
- 38, 38, 38, 43, 44, 45, 46, 38,
- 38, 38, 38, 38, 38, 38, 38, 38,
- 38, 55, 56, 57, 38, 38, 38, 38,
- 38, 61, 62, 63, 65, 38, 41, 38,
- 38, 38, 38, 38, 38, 38, 38, 38,
- 44, 45, 46, 38, 38, 38, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 38,
- 38, 38, 38, 38, 38, 61, 62, 63,
- 38, 41, 38, 38, 38, 38, 38, 38,
- 38, 38, 38, 38, 45, 46, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 38,
- 61, 62, 63, 38, 41, 38, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 38,
- 46, 38, 38, 38, 38, 38, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 38,
- 38, 38, 38, 61, 62, 63, 38, 41,
- 38, 38, 38, 38, 38, 38, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 38,
- 38, 38, 38, 38, 38, 38, 61, 62,
- 38, 41, 38, 38, 38, 38, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 38,
- 38, 62, 38, 41, 38, 41, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 44,
- 45, 46, 38, 38, 38, 38, 38, 38,
- 38, 38, 38, 38, 55, 56, 57, 38,
- 38, 38, 38, 38, 61, 62, 63, 65,
- 38, 41, 38, 38, 38, 38, 38, 38,
- 38, 38, 38, 44, 45, 46, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 38,
- 38, 56, 57, 38, 38, 38, 38, 38,
- 61, 62, 63, 65, 38, 41, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 44,
- 45, 46, 38, 38, 38, 38, 38, 38,
- 38, 38, 38, 38, 38, 38, 57, 38,
- 38, 38, 38, 38, 61, 62, 63, 65,
- 38, 66, 38, 38, 38, 38, 38, 38,
- 38, 38, 38, 38, 38, 38, 41, 38,
- 41, 38, 38, 38, 38, 38, 38, 38,
- 38, 38, 44, 45, 46, 38, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 61,
- 62, 63, 65, 38, 41, 38, 38, 38,
- 38, 38, 38, 38, 42, 43, 44, 45,
- 46, 38, 38, 38, 38, 38, 38, 52,
- 53, 54, 38, 55, 56, 57, 38, 38,
- 38, 38, 38, 61, 62, 63, 65, 38,
- 38, 38, 38, 43, 38, 41, 38, 38,
- 38, 38, 38, 38, 38, 38, 43, 44,
- 45, 46, 38, 38, 38, 38, 38, 38,
- 52, 53, 54, 38, 55, 56, 57, 38,
- 38, 38, 38, 38, 61, 62, 63, 65,
- 38, 38, 38, 38, 43, 38, 41, 38,
- 38, 38, 38, 38, 38, 38, 38, 43,
- 44, 45, 46, 38, 38, 38, 38, 38,
- 38, 38, 53, 54, 38, 55, 56, 57,
- 38, 38, 38, 38, 38, 61, 62, 63,
- 65, 38, 38, 38, 38, 43, 38, 41,
- 38, 38, 38, 38, 38, 38, 38, 38,
- 43, 44, 45, 46, 38, 38, 38, 38,
- 38, 38, 38, 38, 54, 38, 55, 56,
- 57, 38, 38, 38, 38, 38, 61, 62,
- 63, 65, 38, 38, 38, 38, 43, 38,
- 67, 38, 41, 38, 38, 38, 38, 38,
- 38, 38, 42, 43, 44, 45, 46, 38,
- 48, 49, 38, 38, 38, 52, 53, 54,
- 38, 55, 56, 57, 38, 38, 38, 38,
- 38, 61, 62, 63, 65, 38, 38, 38,
- 38, 43, 38, 41, 38, 38, 38, 38,
- 38, 38, 38, 38, 43, 44, 45, 46,
- 38, 38, 38, 38, 38, 38, 38, 38,
- 38, 38, 55, 56, 57, 38, 38, 38,
- 38, 38, 61, 62, 63, 65, 38, 38,
- 38, 38, 43, 38, 67, 38, 41, 38,
- 38, 38, 38, 38, 38, 38, 42, 43,
- 44, 45, 46, 38, 38, 49, 38, 38,
- 38, 52, 53, 54, 38, 55, 56, 57,
- 38, 38, 38, 38, 38, 61, 62, 63,
- 65, 38, 38, 38, 38, 43, 38, 67,
- 38, 41, 38, 38, 38, 38, 38, 38,
- 38, 42, 43, 44, 45, 46, 38, 38,
- 38, 38, 38, 38, 52, 53, 54, 38,
- 55, 56, 57, 38, 38, 38, 38, 38,
- 61, 62, 63, 65, 38, 38, 38, 38,
- 43, 38, 67, 38, 41, 38, 38, 38,
- 38, 38, 38, 38, 42, 43, 44, 45,
- 46, 47, 48, 49, 38, 38, 38, 52,
- 53, 54, 38, 55, 56, 57, 38, 38,
- 38, 38, 38, 61, 62, 63, 65, 38,
- 38, 38, 38, 43, 38, 39, 40, 38,
- 41, 38, 38, 38, 38, 38, 38, 38,
- 42, 43, 44, 45, 46, 47, 48, 49,
- 50, 38, 51, 52, 53, 54, 38, 55,
- 56, 57, 38, 38, 38, 38, 60, 61,
- 62, 63, 60, 38, 38, 38, 38, 64,
- 38, 38, 63, 38, 39, 38, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 38,
- 38, 41, 38, 39, 38, 38, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 38,
- 41, 38, 38, 38, 38, 38, 38, 38,
- 38, 43, 44, 45, 46, 38, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 55,
- 56, 57, 38, 38, 38, 38, 38, 61,
- 62, 63, 65, 38, 41, 38, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 58,
- 59, 38, 41, 38, 38, 38, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 38,
- 38, 38, 38, 38, 38, 38, 59, 38,
- 4, 69, 68, 70, 68, 68, 68, 68,
- 68, 68, 68, 71, 72, 73, 74, 75,
- 76, 77, 78, 79, 4, 80, 81, 82,
- 83, 68, 84, 85, 86, 68, 68, 68,
- 68, 87, 88, 89, 90, 91, 68, 68,
- 68, 68, 92, 68, 68, 93, 68, 4,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 70, 68, 68, 68,
- 68, 68, 68, 68, 68, 72, 73, 74,
- 75, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 84, 85, 86, 68, 68,
- 68, 68, 68, 88, 89, 90, 94, 68,
- 68, 68, 68, 72, 68, 70, 68, 68,
- 68, 68, 68, 68, 68, 68, 72, 73,
- 74, 75, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 84, 85, 86, 68,
- 68, 68, 68, 68, 88, 89, 90, 94,
- 68, 70, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 73, 74, 75, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 88, 89, 90, 68, 70, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 74,
- 75, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 88, 89, 90, 68, 70,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 75, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 88, 89,
- 90, 68, 70, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 88, 89, 68, 70, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 89, 68, 70, 68,
- 70, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 73, 74, 75, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 84,
- 85, 86, 68, 68, 68, 68, 68, 88,
- 89, 90, 94, 68, 70, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 73, 74,
- 75, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 85, 86, 68, 68,
- 68, 68, 68, 88, 89, 90, 94, 68,
- 70, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 73, 74, 75, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 86, 68, 68, 68, 68, 68, 88,
- 89, 90, 94, 68, 96, 95, 95, 95,
- 95, 95, 95, 95, 95, 95, 95, 95,
- 95, 97, 95, 70, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 73, 74, 75,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 88, 89, 90, 94, 68, 70,
- 68, 68, 68, 68, 68, 68, 68, 71,
- 72, 73, 74, 75, 68, 68, 68, 68,
- 68, 68, 81, 82, 83, 68, 84, 85,
- 86, 68, 68, 68, 68, 68, 88, 89,
- 90, 94, 68, 68, 68, 68, 72, 68,
- 70, 68, 68, 68, 68, 68, 68, 68,
- 68, 72, 73, 74, 75, 68, 68, 68,
- 68, 68, 68, 81, 82, 83, 68, 84,
- 85, 86, 68, 68, 68, 68, 68, 88,
- 89, 90, 94, 68, 68, 68, 68, 72,
- 68, 70, 68, 68, 68, 68, 68, 68,
- 68, 68, 72, 73, 74, 75, 68, 68,
- 68, 68, 68, 68, 68, 82, 83, 68,
- 84, 85, 86, 68, 68, 68, 68, 68,
- 88, 89, 90, 94, 68, 68, 68, 68,
- 72, 68, 70, 68, 68, 68, 68, 68,
- 68, 68, 68, 72, 73, 74, 75, 68,
- 68, 68, 68, 68, 68, 68, 68, 83,
- 68, 84, 85, 86, 68, 68, 68, 68,
- 68, 88, 89, 90, 94, 68, 68, 68,
- 68, 72, 68, 98, 68, 70, 68, 68,
- 68, 68, 68, 68, 68, 71, 72, 73,
- 74, 75, 68, 77, 78, 68, 68, 68,
- 81, 82, 83, 68, 84, 85, 86, 68,
- 68, 68, 68, 68, 88, 89, 90, 94,
- 68, 68, 68, 68, 72, 68, 70, 68,
- 68, 68, 68, 68, 68, 68, 68, 72,
- 73, 74, 75, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 84, 85, 86,
- 68, 68, 68, 68, 68, 88, 89, 90,
- 94, 68, 68, 68, 68, 72, 68, 98,
- 68, 70, 68, 68, 68, 68, 68, 68,
- 68, 71, 72, 73, 74, 75, 68, 68,
- 78, 68, 68, 68, 81, 82, 83, 68,
- 84, 85, 86, 68, 68, 68, 68, 68,
- 88, 89, 90, 94, 68, 68, 68, 68,
- 72, 68, 98, 68, 70, 68, 68, 68,
- 68, 68, 68, 68, 71, 72, 73, 74,
- 75, 68, 68, 68, 68, 68, 68, 81,
- 82, 83, 68, 84, 85, 86, 68, 68,
- 68, 68, 68, 88, 89, 90, 94, 68,
- 68, 68, 68, 72, 68, 98, 68, 70,
- 68, 68, 68, 68, 68, 68, 68, 71,
- 72, 73, 74, 75, 76, 77, 78, 68,
- 68, 68, 81, 82, 83, 68, 84, 85,
- 86, 68, 68, 68, 68, 68, 88, 89,
- 90, 94, 68, 68, 68, 68, 72, 68,
- 4, 69, 68, 70, 68, 68, 68, 68,
- 68, 68, 68, 71, 72, 73, 74, 75,
- 76, 77, 78, 79, 68, 80, 81, 82,
- 83, 68, 84, 85, 86, 68, 68, 68,
- 68, 87, 88, 89, 90, 91, 68, 68,
- 68, 68, 92, 68, 68, 93, 68, 4,
- 99, 99, 99, 99, 99, 99, 99, 99,
- 99, 99, 99, 99, 100, 99, 4, 95,
- 95, 95, 95, 95, 95, 95, 95, 95,
- 95, 95, 95, 97, 95, 4, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 70, 68, 68, 68, 68, 68,
- 68, 68, 68, 72, 73, 74, 75, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 84, 85, 86, 68, 68, 68, 68,
- 68, 88, 89, 90, 94, 68, 100, 99,
- 102, 103, 101, 6, 104, 104, 104, 104,
- 104, 104, 104, 104, 104, 105, 104, 106,
- 107, 68, 70, 68, 68, 68, 68, 68,
- 68, 68, 108, 109, 110, 111, 112, 113,
- 114, 115, 116, 106, 117, 118, 119, 120,
- 68, 121, 122, 123, 68, 58, 59, 68,
- 124, 125, 126, 127, 128, 68, 68, 68,
- 68, 129, 68, 68, 130, 68, 106, 107,
- 68, 70, 68, 68, 68, 68, 68, 68,
- 68, 108, 109, 110, 111, 112, 113, 114,
- 115, 116, 106, 117, 118, 119, 120, 68,
- 121, 122, 123, 68, 68, 68, 68, 124,
- 125, 126, 127, 128, 68, 68, 68, 68,
- 129, 68, 68, 130, 68, 106, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 70, 68, 68, 68, 68, 68,
- 68, 68, 68, 109, 110, 111, 112, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 121, 122, 123, 68, 68, 68, 68,
- 68, 125, 126, 127, 131, 68, 68, 68,
- 68, 109, 68, 70, 68, 68, 68, 68,
- 68, 68, 68, 68, 109, 110, 111, 112,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 121, 122, 123, 68, 68, 68,
- 68, 68, 125, 126, 127, 131, 68, 70,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 110, 111, 112, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 125, 126,
- 127, 68, 70, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 111, 112, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 125, 126, 127, 68, 70, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 112, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 125, 126, 127, 68,
- 70, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 125,
- 126, 68, 70, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 126, 68, 70, 68, 70, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 110, 111, 112, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 121, 122, 123,
- 68, 68, 68, 68, 68, 125, 126, 127,
- 131, 68, 70, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 110, 111, 112, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 122, 123, 68, 68, 68, 68,
- 68, 125, 126, 127, 131, 68, 70, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 110, 111, 112, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 123,
- 68, 68, 68, 68, 68, 125, 126, 127,
- 131, 68, 132, 95, 95, 95, 95, 95,
- 95, 95, 95, 95, 95, 95, 95, 97,
- 95, 70, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 110, 111, 112, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 125, 126, 127, 131, 68, 70, 68, 68,
- 68, 68, 68, 68, 68, 108, 109, 110,
- 111, 112, 68, 68, 68, 68, 68, 68,
- 118, 119, 120, 68, 121, 122, 123, 68,
- 68, 68, 68, 68, 125, 126, 127, 131,
- 68, 68, 68, 68, 109, 68, 70, 68,
- 68, 68, 68, 68, 68, 68, 68, 109,
- 110, 111, 112, 68, 68, 68, 68, 68,
- 68, 118, 119, 120, 68, 121, 122, 123,
- 68, 68, 68, 68, 68, 125, 126, 127,
- 131, 68, 68, 68, 68, 109, 68, 70,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 109, 110, 111, 112, 68, 68, 68, 68,
- 68, 68, 68, 119, 120, 68, 121, 122,
- 123, 68, 68, 68, 68, 68, 125, 126,
- 127, 131, 68, 68, 68, 68, 109, 68,
- 70, 68, 68, 68, 68, 68, 68, 68,
- 68, 109, 110, 111, 112, 68, 68, 68,
- 68, 68, 68, 68, 68, 120, 68, 121,
- 122, 123, 68, 68, 68, 68, 68, 125,
- 126, 127, 131, 68, 68, 68, 68, 109,
- 68, 133, 68, 70, 68, 68, 68, 68,
- 68, 68, 68, 108, 109, 110, 111, 112,
- 68, 114, 115, 68, 68, 68, 118, 119,
- 120, 68, 121, 122, 123, 68, 68, 68,
- 68, 68, 125, 126, 127, 131, 68, 68,
- 68, 68, 109, 68, 70, 68, 68, 68,
- 68, 68, 68, 68, 68, 109, 110, 111,
- 112, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 121, 122, 123, 68, 68,
- 68, 68, 68, 125, 126, 127, 131, 68,
- 68, 68, 68, 109, 68, 133, 68, 70,
- 68, 68, 68, 68, 68, 68, 68, 108,
- 109, 110, 111, 112, 68, 68, 115, 68,
- 68, 68, 118, 119, 120, 68, 121, 122,
- 123, 68, 68, 68, 68, 68, 125, 126,
- 127, 131, 68, 68, 68, 68, 109, 68,
- 133, 68, 70, 68, 68, 68, 68, 68,
- 68, 68, 108, 109, 110, 111, 112, 68,
- 68, 68, 68, 68, 68, 118, 119, 120,
- 68, 121, 122, 123, 68, 68, 68, 68,
- 68, 125, 126, 127, 131, 68, 68, 68,
- 68, 109, 68, 133, 68, 70, 68, 68,
- 68, 68, 68, 68, 68, 108, 109, 110,
- 111, 112, 113, 114, 115, 68, 68, 68,
- 118, 119, 120, 68, 121, 122, 123, 68,
- 68, 68, 68, 68, 125, 126, 127, 131,
- 68, 68, 68, 68, 109, 68, 106, 107,
- 68, 70, 68, 68, 68, 68, 68, 68,
- 68, 108, 109, 110, 111, 112, 113, 114,
- 115, 116, 68, 117, 118, 119, 120, 68,
- 121, 122, 123, 68, 68, 68, 68, 124,
- 125, 126, 127, 128, 68, 68, 68, 68,
- 129, 68, 68, 130, 68, 106, 99, 99,
- 99, 99, 99, 99, 99, 99, 99, 99,
- 99, 99, 100, 99, 106, 95, 95, 95,
- 95, 95, 95, 95, 95, 95, 95, 95,
- 95, 97, 95, 106, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68,
- 70, 68, 68, 68, 68, 68, 68, 68,
- 68, 109, 110, 111, 112, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 121,
- 122, 123, 68, 68, 68, 68, 68, 125,
- 126, 127, 131, 68, 100, 99, 8, 9,
- 134, 11, 134, 134, 134, 134, 134, 134,
- 134, 13, 14, 15, 16, 17, 18, 19,
- 20, 21, 8, 22, 23, 24, 25, 134,
- 26, 27, 28, 134, 134, 134, 134, 32,
- 33, 34, 35, 32, 134, 134, 134, 134,
- 37, 134, 134, 35, 134, 8, 134, 134,
- 134, 134, 134, 134, 134, 134, 134, 134,
- 134, 134, 11, 134, 134, 134, 134, 134,
- 134, 134, 134, 14, 15, 16, 17, 134,
- 134, 134, 134, 134, 134, 134, 134, 134,
- 134, 26, 27, 28, 134, 134, 134, 134,
- 134, 33, 34, 35, 135, 134, 134, 134,
- 134, 14, 134, 11, 134, 134, 134, 134,
- 134, 134, 134, 134, 14, 15, 16, 17,
- 134, 134, 134, 134, 134, 134, 134, 134,
- 134, 134, 26, 27, 28, 134, 134, 134,
- 134, 134, 33, 34, 35, 135, 134, 11,
- 134, 134, 134, 134, 134, 134, 134, 134,
- 134, 15, 16, 17, 134, 134, 134, 134,
- 134, 134, 134, 134, 134, 134, 134, 134,
- 134, 134, 134, 134, 134, 134, 33, 34,
- 35, 134, 11, 134, 134, 134, 134, 134,
- 134, 134, 134, 134, 134, 16, 17, 134,
- 134, 134, 134, 134, 134, 134, 134, 134,
- 134, 134, 134, 134, 134, 134, 134, 134,
- 134, 33, 34, 35, 134, 11, 134, 134,
- 134, 134, 134, 134, 134, 134, 134, 134,
- 134, 17, 134, 134, 134, 134, 134, 134,
- 134, 134, 134, 134, 134, 134, 134, 134,
- 134, 134, 134, 134, 33, 34, 35, 134,
- 11, 134, 134, 134, 134, 134, 134, 134,
- 134, 134, 134, 134, 134, 134, 134, 134,
- 134, 134, 134, 134, 134, 134, 134, 134,
- 134, 134, 134, 134, 134, 134, 134, 33,
- 34, 134, 11, 134, 134, 134, 134, 134,
- 134, 134, 134, 134, 134, 134, 134, 134,
- 134, 134, 134, 134, 134, 134, 134, 134,
- 134, 134, 134, 134, 134, 134, 134, 134,
- 134, 134, 34, 134, 11, 134, 11, 134,
- 134, 134, 134, 134, 134, 134, 134, 134,
- 15, 16, 17, 134, 134, 134, 134, 134,
- 134, 134, 134, 134, 134, 26, 27, 28,
- 134, 134, 134, 134, 134, 33, 34, 35,
- 135, 134, 11, 134, 134, 134, 134, 134,
- 134, 134, 134, 134, 15, 16, 17, 134,
- 134, 134, 134, 134, 134, 134, 134, 134,
- 134, 134, 27, 28, 134, 134, 134, 134,
- 134, 33, 34, 35, 135, 134, 11, 134,
- 134, 134, 134, 134, 134, 134, 134, 134,
- 15, 16, 17, 134, 134, 134, 134, 134,
- 134, 134, 134, 134, 134, 134, 134, 28,
- 134, 134, 134, 134, 134, 33, 34, 35,
- 135, 134, 136, 134, 134, 134, 134, 134,
- 134, 134, 134, 134, 134, 134, 134, 11,
- 134, 11, 134, 134, 134, 134, 134, 134,
- 134, 134, 134, 15, 16, 17, 134, 134,
- 134, 134, 134, 134, 134, 134, 134, 134,
- 134, 134, 134, 134, 134, 134, 134, 134,
- 33, 34, 35, 135, 134, 11, 134, 134,
- 134, 134, 134, 134, 134, 13, 14, 15,
- 16, 17, 134, 134, 134, 134, 134, 134,
- 23, 24, 25, 134, 26, 27, 28, 134,
- 134, 134, 134, 134, 33, 34, 35, 135,
- 134, 134, 134, 134, 14, 134, 11, 134,
- 134, 134, 134, 134, 134, 134, 134, 14,
- 15, 16, 17, 134, 134, 134, 134, 134,
- 134, 23, 24, 25, 134, 26, 27, 28,
- 134, 134, 134, 134, 134, 33, 34, 35,
- 135, 134, 134, 134, 134, 14, 134, 11,
- 134, 134, 134, 134, 134, 134, 134, 134,
- 14, 15, 16, 17, 134, 134, 134, 134,
- 134, 134, 134, 24, 25, 134, 26, 27,
- 28, 134, 134, 134, 134, 134, 33, 34,
- 35, 135, 134, 134, 134, 134, 14, 134,
- 11, 134, 134, 134, 134, 134, 134, 134,
- 134, 14, 15, 16, 17, 134, 134, 134,
- 134, 134, 134, 134, 134, 25, 134, 26,
- 27, 28, 134, 134, 134, 134, 134, 33,
- 34, 35, 135, 134, 134, 134, 134, 14,
- 134, 137, 134, 11, 134, 134, 134, 134,
- 134, 134, 134, 13, 14, 15, 16, 17,
- 134, 19, 20, 134, 134, 134, 23, 24,
- 25, 134, 26, 27, 28, 134, 134, 134,
- 134, 134, 33, 34, 35, 135, 134, 134,
- 134, 134, 14, 134, 11, 134, 134, 134,
- 134, 134, 134, 134, 134, 14, 15, 16,
- 17, 134, 134, 134, 134, 134, 134, 134,
- 134, 134, 134, 26, 27, 28, 134, 134,
- 134, 134, 134, 33, 34, 35, 135, 134,
- 134, 134, 134, 14, 134, 137, 134, 11,
- 134, 134, 134, 134, 134, 134, 134, 13,
- 14, 15, 16, 17, 134, 134, 20, 134,
- 134, 134, 23, 24, 25, 134, 26, 27,
- 28, 134, 134, 134, 134, 134, 33, 34,
- 35, 135, 134, 134, 134, 134, 14, 134,
- 137, 134, 11, 134, 134, 134, 134, 134,
- 134, 134, 13, 14, 15, 16, 17, 134,
- 134, 134, 134, 134, 134, 23, 24, 25,
- 134, 26, 27, 28, 134, 134, 134, 134,
- 134, 33, 34, 35, 135, 134, 134, 134,
- 134, 14, 134, 137, 134, 11, 134, 134,
- 134, 134, 134, 134, 134, 13, 14, 15,
- 16, 17, 18, 19, 20, 134, 134, 134,
- 23, 24, 25, 134, 26, 27, 28, 134,
- 134, 134, 134, 134, 33, 34, 35, 135,
- 134, 134, 134, 134, 14, 134, 8, 9,
- 134, 11, 134, 134, 134, 134, 134, 134,
- 134, 13, 14, 15, 16, 17, 18, 19,
- 20, 21, 134, 22, 23, 24, 25, 134,
- 26, 27, 28, 134, 134, 134, 134, 32,
- 33, 34, 35, 32, 134, 134, 134, 134,
- 37, 134, 134, 35, 134, 8, 134, 134,
- 134, 134, 134, 134, 134, 134, 134, 134,
- 134, 134, 11, 134, 8, 134, 134, 134,
- 134, 134, 134, 134, 134, 134, 134, 134,
- 134, 11, 134, 134, 134, 134, 134, 134,
- 134, 134, 14, 15, 16, 17, 134, 134,
- 134, 134, 134, 134, 134, 134, 134, 134,
- 26, 27, 28, 134, 134, 134, 134, 134,
- 33, 34, 35, 135, 134, 138, 134, 134,
- 134, 134, 134, 134, 134, 134, 134, 11,
- 134, 10, 11, 134, 4, 134, 134, 134,
- 4, 134, 134, 134, 134, 134, 8, 9,
- 10, 11, 134, 134, 134, 134, 134, 134,
- 134, 13, 14, 15, 16, 17, 18, 19,
- 20, 21, 8, 22, 23, 24, 25, 134,
- 26, 27, 28, 134, 29, 30, 134, 32,
- 33, 34, 35, 32, 134, 134, 134, 134,
- 37, 134, 134, 35, 134, 11, 134, 134,
- 134, 134, 134, 134, 134, 134, 134, 134,
- 134, 134, 134, 134, 134, 134, 134, 134,
- 134, 134, 134, 134, 134, 134, 134, 134,
- 29, 30, 134, 11, 134, 134, 134, 134,
- 134, 134, 134, 134, 134, 134, 134, 134,
- 134, 134, 134, 134, 134, 134, 134, 134,
- 134, 134, 134, 134, 134, 134, 134, 30,
- 134, 4, 139, 139, 139, 4, 139, 141,
- 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 142, 140, 143, 140, 143,
- 144, 140, 141, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 1, 142, 142,
- 140, 141, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 142, 140, 143,
- 140, 141, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 142, 140, 143,
- 140, 143, 140, 39, 40, 38, 41, 38,
- 38, 38, 38, 38, 38, 38, 42, 43,
- 44, 45, 46, 47, 48, 49, 50, 39,
- 51, 52, 53, 54, 38, 55, 56, 57,
- 38, 58, 59, 38, 60, 61, 62, 63,
- 60, 1, 38, 2, 38, 64, 38, 38,
- 63, 38, 0
+ 5, 37, 5, 5, 38, 5, 40, 41,
+ 39, 42, 39, 39, 39, 39, 39, 39,
+ 39, 43, 44, 45, 46, 47, 48, 49,
+ 50, 51, 40, 52, 53, 54, 55, 39,
+ 56, 57, 58, 39, 59, 60, 39, 61,
+ 62, 63, 64, 61, 39, 39, 39, 39,
+ 65, 39, 39, 64, 39, 40, 41, 39,
+ 42, 39, 39, 39, 39, 39, 39, 39,
+ 43, 44, 45, 46, 47, 48, 49, 50,
+ 51, 40, 52, 53, 54, 55, 39, 56,
+ 57, 58, 39, 39, 39, 39, 61, 62,
+ 63, 64, 61, 39, 39, 39, 39, 65,
+ 39, 39, 64, 39, 40, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 42, 39, 39, 39, 39, 39, 39,
+ 39, 39, 44, 45, 46, 47, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 56, 57, 58, 39, 39, 39, 39, 39,
+ 62, 63, 64, 66, 39, 39, 39, 39,
+ 44, 39, 42, 39, 39, 39, 39, 39,
+ 39, 39, 39, 44, 45, 46, 47, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 56, 57, 58, 39, 39, 39, 39,
+ 39, 62, 63, 64, 66, 39, 42, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 45, 46, 47, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 62, 63, 64,
+ 39, 42, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 46, 47, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 62, 63, 64, 39, 42, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 47, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 62, 63, 64, 39, 42,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 62, 63,
+ 39, 42, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 63, 39, 42, 39, 42, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 45,
+ 46, 47, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 56, 57, 58, 39,
+ 39, 39, 39, 39, 62, 63, 64, 66,
+ 39, 42, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 45, 46, 47, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 57, 58, 39, 39, 39, 39, 39,
+ 62, 63, 64, 66, 39, 42, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 45,
+ 46, 47, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 58, 39,
+ 39, 39, 39, 39, 62, 63, 64, 66,
+ 39, 67, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 42, 39,
+ 42, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 45, 46, 47, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 62,
+ 63, 64, 66, 39, 42, 39, 39, 39,
+ 39, 39, 39, 39, 43, 44, 45, 46,
+ 47, 39, 39, 39, 39, 39, 39, 53,
+ 54, 55, 39, 56, 57, 58, 39, 39,
+ 39, 39, 39, 62, 63, 64, 66, 39,
+ 39, 39, 39, 44, 39, 42, 39, 39,
+ 39, 39, 39, 39, 39, 39, 44, 45,
+ 46, 47, 39, 39, 39, 39, 39, 39,
+ 53, 54, 55, 39, 56, 57, 58, 39,
+ 39, 39, 39, 39, 62, 63, 64, 66,
+ 39, 39, 39, 39, 44, 39, 42, 39,
+ 39, 39, 39, 39, 39, 39, 39, 44,
+ 45, 46, 47, 39, 39, 39, 39, 39,
+ 39, 39, 54, 55, 39, 56, 57, 58,
+ 39, 39, 39, 39, 39, 62, 63, 64,
+ 66, 39, 39, 39, 39, 44, 39, 42,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 44, 45, 46, 47, 39, 39, 39, 39,
+ 39, 39, 39, 39, 55, 39, 56, 57,
+ 58, 39, 39, 39, 39, 39, 62, 63,
+ 64, 66, 39, 39, 39, 39, 44, 39,
+ 68, 39, 42, 39, 39, 39, 39, 39,
+ 39, 39, 43, 44, 45, 46, 47, 39,
+ 49, 50, 39, 39, 39, 53, 54, 55,
+ 39, 56, 57, 58, 39, 39, 39, 39,
+ 39, 62, 63, 64, 66, 39, 39, 39,
+ 39, 44, 39, 42, 39, 39, 39, 39,
+ 39, 39, 39, 39, 44, 45, 46, 47,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 56, 57, 58, 39, 39, 39,
+ 39, 39, 62, 63, 64, 66, 39, 39,
+ 39, 39, 44, 39, 68, 39, 42, 39,
+ 39, 39, 39, 39, 39, 39, 43, 44,
+ 45, 46, 47, 39, 39, 50, 39, 39,
+ 39, 53, 54, 55, 39, 56, 57, 58,
+ 39, 39, 39, 39, 39, 62, 63, 64,
+ 66, 39, 39, 39, 39, 44, 39, 68,
+ 39, 42, 39, 39, 39, 39, 39, 39,
+ 39, 43, 44, 45, 46, 47, 39, 39,
+ 39, 39, 39, 39, 53, 54, 55, 39,
+ 56, 57, 58, 39, 39, 39, 39, 39,
+ 62, 63, 64, 66, 39, 39, 39, 39,
+ 44, 39, 68, 39, 42, 39, 39, 39,
+ 39, 39, 39, 39, 43, 44, 45, 46,
+ 47, 48, 49, 50, 39, 39, 39, 53,
+ 54, 55, 39, 56, 57, 58, 39, 39,
+ 39, 39, 39, 62, 63, 64, 66, 39,
+ 39, 39, 39, 44, 39, 40, 41, 39,
+ 42, 39, 39, 39, 39, 39, 39, 39,
+ 43, 44, 45, 46, 47, 48, 49, 50,
+ 51, 39, 52, 53, 54, 55, 39, 56,
+ 57, 58, 39, 39, 39, 39, 61, 62,
+ 63, 64, 61, 39, 39, 39, 39, 65,
+ 39, 39, 64, 39, 40, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 42, 39, 40, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 42, 39, 39, 39, 39, 39, 39, 39,
+ 39, 44, 45, 46, 47, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 56,
+ 57, 58, 39, 39, 39, 39, 39, 62,
+ 63, 64, 66, 39, 42, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 59,
+ 60, 39, 42, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 60, 39,
+ 4, 70, 69, 71, 69, 69, 69, 69,
+ 69, 69, 69, 72, 73, 74, 75, 76,
+ 77, 78, 79, 80, 4, 81, 82, 83,
+ 84, 69, 85, 86, 87, 69, 69, 69,
+ 69, 88, 89, 90, 91, 92, 69, 69,
+ 69, 69, 93, 69, 69, 94, 69, 4,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 71, 69, 69, 69,
+ 69, 69, 69, 69, 69, 73, 74, 75,
+ 76, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 85, 86, 87, 69, 69,
+ 69, 69, 69, 89, 90, 91, 95, 69,
+ 69, 69, 69, 73, 69, 71, 69, 69,
+ 69, 69, 69, 69, 69, 69, 73, 74,
+ 75, 76, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 85, 86, 87, 69,
+ 69, 69, 69, 69, 89, 90, 91, 95,
+ 69, 71, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 74, 75, 76, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 89, 90, 91, 69, 71, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 75,
+ 76, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 89, 90, 91, 69, 71,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 76, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 89, 90,
+ 91, 69, 71, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 89, 90, 69, 71, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 90, 69, 71, 69,
+ 71, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 74, 75, 76, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 85,
+ 86, 87, 69, 69, 69, 69, 69, 89,
+ 90, 91, 95, 69, 71, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 74, 75,
+ 76, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 86, 87, 69, 69,
+ 69, 69, 69, 89, 90, 91, 95, 69,
+ 71, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 74, 75, 76, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 87, 69, 69, 69, 69, 69, 89,
+ 90, 91, 95, 69, 97, 96, 96, 96,
+ 96, 96, 96, 96, 96, 96, 96, 96,
+ 96, 98, 96, 71, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 74, 75, 76,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 89, 90, 91, 95, 69, 71,
+ 69, 69, 69, 69, 69, 69, 69, 72,
+ 73, 74, 75, 76, 69, 69, 69, 69,
+ 69, 69, 82, 83, 84, 69, 85, 86,
+ 87, 69, 69, 69, 69, 69, 89, 90,
+ 91, 95, 69, 69, 69, 69, 73, 69,
+ 71, 69, 69, 69, 69, 69, 69, 69,
+ 69, 73, 74, 75, 76, 69, 69, 69,
+ 69, 69, 69, 82, 83, 84, 69, 85,
+ 86, 87, 69, 69, 69, 69, 69, 89,
+ 90, 91, 95, 69, 69, 69, 69, 73,
+ 69, 71, 69, 69, 69, 69, 69, 69,
+ 69, 69, 73, 74, 75, 76, 69, 69,
+ 69, 69, 69, 69, 69, 83, 84, 69,
+ 85, 86, 87, 69, 69, 69, 69, 69,
+ 89, 90, 91, 95, 69, 69, 69, 69,
+ 73, 69, 71, 69, 69, 69, 69, 69,
+ 69, 69, 69, 73, 74, 75, 76, 69,
+ 69, 69, 69, 69, 69, 69, 69, 84,
+ 69, 85, 86, 87, 69, 69, 69, 69,
+ 69, 89, 90, 91, 95, 69, 69, 69,
+ 69, 73, 69, 99, 69, 71, 69, 69,
+ 69, 69, 69, 69, 69, 72, 73, 74,
+ 75, 76, 69, 78, 79, 69, 69, 69,
+ 82, 83, 84, 69, 85, 86, 87, 69,
+ 69, 69, 69, 69, 89, 90, 91, 95,
+ 69, 69, 69, 69, 73, 69, 71, 69,
+ 69, 69, 69, 69, 69, 69, 69, 73,
+ 74, 75, 76, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 85, 86, 87,
+ 69, 69, 69, 69, 69, 89, 90, 91,
+ 95, 69, 69, 69, 69, 73, 69, 99,
+ 69, 71, 69, 69, 69, 69, 69, 69,
+ 69, 72, 73, 74, 75, 76, 69, 69,
+ 79, 69, 69, 69, 82, 83, 84, 69,
+ 85, 86, 87, 69, 69, 69, 69, 69,
+ 89, 90, 91, 95, 69, 69, 69, 69,
+ 73, 69, 99, 69, 71, 69, 69, 69,
+ 69, 69, 69, 69, 72, 73, 74, 75,
+ 76, 69, 69, 69, 69, 69, 69, 82,
+ 83, 84, 69, 85, 86, 87, 69, 69,
+ 69, 69, 69, 89, 90, 91, 95, 69,
+ 69, 69, 69, 73, 69, 99, 69, 71,
+ 69, 69, 69, 69, 69, 69, 69, 72,
+ 73, 74, 75, 76, 77, 78, 79, 69,
+ 69, 69, 82, 83, 84, 69, 85, 86,
+ 87, 69, 69, 69, 69, 69, 89, 90,
+ 91, 95, 69, 69, 69, 69, 73, 69,
+ 4, 70, 69, 71, 69, 69, 69, 69,
+ 69, 69, 69, 72, 73, 74, 75, 76,
+ 77, 78, 79, 80, 69, 81, 82, 83,
+ 84, 69, 85, 86, 87, 69, 69, 69,
+ 69, 88, 89, 90, 91, 92, 69, 69,
+ 69, 69, 93, 69, 69, 94, 69, 4,
+ 100, 100, 100, 100, 100, 100, 100, 100,
+ 100, 100, 100, 100, 101, 100, 4, 96,
+ 96, 96, 96, 96, 96, 96, 96, 96,
+ 96, 96, 96, 98, 96, 4, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 71, 69, 69, 69, 69, 69,
+ 69, 69, 69, 73, 74, 75, 76, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 85, 86, 87, 69, 69, 69, 69,
+ 69, 89, 90, 91, 95, 69, 101, 100,
+ 103, 104, 102, 6, 105, 105, 105, 105,
+ 105, 105, 105, 105, 105, 106, 105, 107,
+ 108, 69, 71, 69, 69, 69, 69, 69,
+ 69, 69, 109, 110, 111, 112, 113, 114,
+ 115, 116, 117, 107, 118, 119, 120, 121,
+ 69, 122, 123, 124, 69, 59, 60, 69,
+ 125, 126, 127, 128, 129, 69, 69, 69,
+ 69, 130, 69, 69, 131, 69, 107, 108,
+ 69, 71, 69, 69, 69, 69, 69, 69,
+ 69, 109, 110, 111, 112, 113, 114, 115,
+ 116, 117, 107, 118, 119, 120, 121, 69,
+ 122, 123, 124, 69, 69, 69, 69, 125,
+ 126, 127, 128, 129, 69, 69, 69, 69,
+ 130, 69, 69, 131, 69, 107, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 71, 69, 69, 69, 69, 69,
+ 69, 69, 69, 110, 111, 112, 113, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 122, 123, 124, 69, 69, 69, 69,
+ 69, 126, 127, 128, 132, 69, 69, 69,
+ 69, 110, 69, 71, 69, 69, 69, 69,
+ 69, 69, 69, 69, 110, 111, 112, 113,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 122, 123, 124, 69, 69, 69,
+ 69, 69, 126, 127, 128, 132, 69, 71,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 111, 112, 113, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 126, 127,
+ 128, 69, 71, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 112, 113, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 126, 127, 128, 69, 71, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 113, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 126, 127, 128, 69,
+ 71, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 126,
+ 127, 69, 71, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 127, 69, 71, 69, 71, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 111, 112, 113, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 122, 123, 124,
+ 69, 69, 69, 69, 69, 126, 127, 128,
+ 132, 69, 71, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 111, 112, 113, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 123, 124, 69, 69, 69, 69,
+ 69, 126, 127, 128, 132, 69, 71, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 111, 112, 113, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 124,
+ 69, 69, 69, 69, 69, 126, 127, 128,
+ 132, 69, 133, 96, 96, 96, 96, 96,
+ 96, 96, 96, 96, 96, 96, 96, 98,
+ 96, 71, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 111, 112, 113, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 126, 127, 128, 132, 69, 71, 69, 69,
+ 69, 69, 69, 69, 69, 109, 110, 111,
+ 112, 113, 69, 69, 69, 69, 69, 69,
+ 119, 120, 121, 69, 122, 123, 124, 69,
+ 69, 69, 69, 69, 126, 127, 128, 132,
+ 69, 69, 69, 69, 110, 69, 71, 69,
+ 69, 69, 69, 69, 69, 69, 69, 110,
+ 111, 112, 113, 69, 69, 69, 69, 69,
+ 69, 119, 120, 121, 69, 122, 123, 124,
+ 69, 69, 69, 69, 69, 126, 127, 128,
+ 132, 69, 69, 69, 69, 110, 69, 71,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 110, 111, 112, 113, 69, 69, 69, 69,
+ 69, 69, 69, 120, 121, 69, 122, 123,
+ 124, 69, 69, 69, 69, 69, 126, 127,
+ 128, 132, 69, 69, 69, 69, 110, 69,
+ 71, 69, 69, 69, 69, 69, 69, 69,
+ 69, 110, 111, 112, 113, 69, 69, 69,
+ 69, 69, 69, 69, 69, 121, 69, 122,
+ 123, 124, 69, 69, 69, 69, 69, 126,
+ 127, 128, 132, 69, 69, 69, 69, 110,
+ 69, 134, 69, 71, 69, 69, 69, 69,
+ 69, 69, 69, 109, 110, 111, 112, 113,
+ 69, 115, 116, 69, 69, 69, 119, 120,
+ 121, 69, 122, 123, 124, 69, 69, 69,
+ 69, 69, 126, 127, 128, 132, 69, 69,
+ 69, 69, 110, 69, 71, 69, 69, 69,
+ 69, 69, 69, 69, 69, 110, 111, 112,
+ 113, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 122, 123, 124, 69, 69,
+ 69, 69, 69, 126, 127, 128, 132, 69,
+ 69, 69, 69, 110, 69, 134, 69, 71,
+ 69, 69, 69, 69, 69, 69, 69, 109,
+ 110, 111, 112, 113, 69, 69, 116, 69,
+ 69, 69, 119, 120, 121, 69, 122, 123,
+ 124, 69, 69, 69, 69, 69, 126, 127,
+ 128, 132, 69, 69, 69, 69, 110, 69,
+ 134, 69, 71, 69, 69, 69, 69, 69,
+ 69, 69, 109, 110, 111, 112, 113, 69,
+ 69, 69, 69, 69, 69, 119, 120, 121,
+ 69, 122, 123, 124, 69, 69, 69, 69,
+ 69, 126, 127, 128, 132, 69, 69, 69,
+ 69, 110, 69, 134, 69, 71, 69, 69,
+ 69, 69, 69, 69, 69, 109, 110, 111,
+ 112, 113, 114, 115, 116, 69, 69, 69,
+ 119, 120, 121, 69, 122, 123, 124, 69,
+ 69, 69, 69, 69, 126, 127, 128, 132,
+ 69, 69, 69, 69, 110, 69, 107, 108,
+ 69, 71, 69, 69, 69, 69, 69, 69,
+ 69, 109, 110, 111, 112, 113, 114, 115,
+ 116, 117, 69, 118, 119, 120, 121, 69,
+ 122, 123, 124, 69, 69, 69, 69, 125,
+ 126, 127, 128, 129, 69, 69, 69, 69,
+ 130, 69, 69, 131, 69, 107, 100, 100,
+ 100, 100, 100, 100, 100, 100, 100, 100,
+ 100, 100, 101, 100, 107, 96, 96, 96,
+ 96, 96, 96, 96, 96, 96, 96, 96,
+ 96, 98, 96, 107, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 71, 69, 69, 69, 69, 69, 69, 69,
+ 69, 110, 111, 112, 113, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 122,
+ 123, 124, 69, 69, 69, 69, 69, 126,
+ 127, 128, 132, 69, 101, 100, 8, 9,
+ 135, 11, 135, 135, 135, 135, 135, 135,
+ 135, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 8, 22, 23, 24, 25, 135,
+ 26, 27, 28, 135, 135, 135, 135, 32,
+ 33, 34, 38, 32, 135, 135, 135, 135,
+ 37, 135, 135, 38, 135, 8, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 11, 135, 135, 135, 135, 135,
+ 135, 135, 135, 14, 15, 16, 17, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 26, 27, 28, 135, 135, 135, 135,
+ 135, 33, 34, 38, 136, 135, 135, 135,
+ 135, 14, 135, 11, 135, 135, 135, 135,
+ 135, 135, 135, 135, 14, 15, 16, 17,
+ 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 26, 27, 28, 135, 135, 135,
+ 135, 135, 33, 34, 38, 136, 135, 11,
+ 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 15, 16, 17, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 33, 34,
+ 38, 135, 11, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 16, 17, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 33, 34, 38, 135, 11, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 17, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 33, 34, 38, 135,
+ 11, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 33,
+ 34, 135, 11, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 34, 135, 11, 137, 11, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135,
+ 15, 16, 17, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 26, 27, 28,
+ 135, 135, 135, 135, 135, 33, 34, 38,
+ 136, 135, 11, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 15, 16, 17, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 27, 28, 135, 135, 135, 135,
+ 135, 33, 34, 38, 136, 135, 11, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135,
+ 15, 16, 17, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 28,
+ 135, 135, 135, 135, 135, 33, 34, 38,
+ 136, 135, 138, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 11,
+ 135, 11, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 15, 16, 17, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135,
+ 33, 34, 38, 136, 135, 11, 135, 135,
+ 135, 135, 135, 135, 135, 13, 14, 15,
+ 16, 17, 135, 135, 135, 135, 135, 135,
+ 23, 24, 25, 135, 26, 27, 28, 135,
+ 135, 135, 135, 135, 33, 34, 38, 136,
+ 135, 135, 135, 135, 14, 135, 11, 135,
+ 135, 135, 135, 135, 135, 135, 135, 14,
+ 15, 16, 17, 135, 135, 135, 135, 135,
+ 135, 23, 24, 25, 135, 26, 27, 28,
+ 135, 135, 135, 135, 135, 33, 34, 38,
+ 136, 135, 135, 135, 135, 14, 135, 11,
+ 135, 135, 135, 135, 135, 135, 135, 135,
+ 14, 15, 16, 17, 135, 135, 135, 135,
+ 135, 135, 135, 24, 25, 135, 26, 27,
+ 28, 135, 135, 135, 135, 135, 33, 34,
+ 38, 136, 135, 135, 135, 135, 14, 135,
+ 11, 135, 135, 135, 135, 135, 135, 135,
+ 135, 14, 15, 16, 17, 135, 135, 135,
+ 135, 135, 135, 135, 135, 25, 135, 26,
+ 27, 28, 135, 135, 135, 135, 135, 33,
+ 34, 38, 136, 135, 135, 135, 135, 14,
+ 135, 139, 135, 11, 135, 135, 135, 135,
+ 135, 135, 135, 13, 14, 15, 16, 17,
+ 135, 19, 20, 135, 135, 135, 23, 24,
+ 25, 135, 26, 27, 28, 135, 135, 135,
+ 135, 135, 33, 34, 38, 136, 135, 135,
+ 135, 135, 14, 135, 11, 135, 135, 135,
+ 135, 135, 135, 135, 135, 14, 15, 16,
+ 17, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 26, 27, 28, 135, 135,
+ 135, 135, 135, 33, 34, 38, 136, 135,
+ 135, 135, 135, 14, 135, 139, 135, 11,
+ 135, 135, 135, 135, 135, 135, 135, 13,
+ 14, 15, 16, 17, 135, 135, 20, 135,
+ 135, 135, 23, 24, 25, 135, 26, 27,
+ 28, 135, 135, 135, 135, 135, 33, 34,
+ 38, 136, 135, 135, 135, 135, 14, 135,
+ 139, 135, 11, 135, 135, 135, 135, 135,
+ 135, 135, 13, 14, 15, 16, 17, 135,
+ 135, 135, 135, 135, 135, 23, 24, 25,
+ 135, 26, 27, 28, 135, 135, 135, 135,
+ 135, 33, 34, 38, 136, 135, 135, 135,
+ 135, 14, 135, 139, 135, 11, 135, 135,
+ 135, 135, 135, 135, 135, 13, 14, 15,
+ 16, 17, 18, 19, 20, 135, 135, 135,
+ 23, 24, 25, 135, 26, 27, 28, 135,
+ 135, 135, 135, 135, 33, 34, 38, 136,
+ 135, 135, 135, 135, 14, 135, 8, 9,
+ 135, 11, 135, 135, 135, 135, 135, 135,
+ 135, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 135, 22, 23, 24, 25, 135,
+ 26, 27, 28, 135, 135, 135, 135, 32,
+ 33, 34, 38, 32, 135, 135, 135, 135,
+ 37, 135, 135, 38, 135, 8, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 11, 135, 8, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 11, 135, 135, 135, 135, 135, 135,
+ 135, 135, 14, 15, 16, 17, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135,
+ 26, 27, 28, 135, 135, 135, 135, 135,
+ 33, 34, 38, 136, 135, 140, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 11,
+ 135, 10, 11, 135, 4, 135, 135, 135,
+ 4, 135, 135, 135, 135, 135, 8, 9,
+ 10, 11, 135, 135, 135, 135, 135, 135,
+ 135, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 8, 22, 23, 24, 25, 135,
+ 26, 27, 28, 135, 29, 30, 135, 32,
+ 33, 34, 38, 32, 135, 135, 135, 135,
+ 37, 135, 135, 38, 135, 11, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135,
+ 29, 30, 135, 11, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 30,
+ 135, 4, 141, 141, 141, 4, 141, 143,
+ 142, 142, 142, 142, 142, 142, 142, 142,
+ 142, 142, 142, 142, 142, 142, 142, 142,
+ 142, 142, 142, 142, 142, 142, 142, 142,
+ 142, 142, 142, 142, 142, 142, 142, 142,
+ 142, 142, 142, 144, 142, 145, 142, 145,
+ 146, 142, 143, 142, 142, 142, 142, 142,
+ 142, 142, 142, 142, 142, 142, 142, 142,
+ 142, 142, 142, 142, 142, 142, 142, 142,
+ 142, 142, 142, 142, 142, 142, 142, 142,
+ 142, 142, 142, 142, 142, 1, 144, 144,
+ 142, 143, 142, 142, 142, 142, 142, 142,
+ 142, 142, 142, 142, 142, 142, 142, 142,
+ 142, 142, 142, 142, 142, 142, 142, 142,
+ 142, 142, 142, 142, 142, 142, 142, 142,
+ 142, 142, 142, 142, 142, 144, 142, 145,
+ 142, 143, 142, 142, 142, 142, 142, 142,
+ 142, 142, 142, 142, 142, 142, 142, 142,
+ 142, 142, 142, 142, 142, 142, 142, 142,
+ 142, 142, 142, 142, 142, 142, 142, 142,
+ 142, 142, 142, 142, 142, 144, 142, 145,
+ 142, 145, 142, 40, 41, 39, 42, 39,
+ 39, 39, 39, 39, 39, 39, 43, 44,
+ 45, 46, 47, 48, 49, 50, 51, 40,
+ 52, 53, 54, 55, 39, 56, 57, 58,
+ 39, 59, 60, 39, 61, 62, 63, 64,
+ 61, 1, 39, 2, 39, 65, 39, 39,
+ 64, 39, 0
};
static const char _use_syllable_machine_trans_targs[] = {
@@ -723,21 +723,21 @@
90, 91, 116, 1, 118, 104, 92, 93,
94, 95, 108, 110, 111, 112, 113, 105,
106, 107, 99, 100, 101, 119, 120, 121,
- 114, 96, 97, 98, 126, 115, 1, 3,
- 4, 1, 17, 5, 6, 7, 8, 21,
- 23, 24, 25, 26, 18, 19, 20, 12,
- 13, 14, 29, 30, 27, 9, 10, 11,
- 28, 15, 16, 22, 1, 32, 1, 45,
- 33, 34, 35, 36, 49, 51, 52, 53,
- 54, 46, 47, 48, 40, 41, 42, 55,
- 37, 38, 39, 56, 57, 58, 43, 1,
- 44, 1, 50, 1, 1, 1, 60, 1,
- 1, 1, 62, 63, 76, 64, 65, 66,
- 67, 80, 82, 83, 84, 85, 77, 78,
- 79, 71, 72, 73, 86, 68, 69, 70,
- 87, 88, 89, 74, 75, 81, 1, 102,
- 103, 109, 117, 1, 1, 1, 123, 124,
- 125
+ 114, 96, 97, 98, 126, 115, 98, 1,
+ 3, 4, 1, 17, 5, 6, 7, 8,
+ 21, 23, 24, 25, 26, 18, 19, 20,
+ 12, 13, 14, 29, 30, 27, 9, 10,
+ 11, 28, 15, 16, 22, 1, 32, 1,
+ 45, 33, 34, 35, 36, 49, 51, 52,
+ 53, 54, 46, 47, 48, 40, 41, 42,
+ 55, 37, 38, 39, 56, 57, 58, 43,
+ 1, 44, 1, 50, 1, 1, 1, 60,
+ 1, 1, 1, 62, 63, 76, 64, 65,
+ 66, 67, 80, 82, 83, 84, 85, 77,
+ 78, 79, 71, 72, 73, 86, 68, 69,
+ 70, 87, 88, 89, 74, 75, 81, 1,
+ 102, 1, 103, 109, 117, 1, 1, 1,
+ 123, 124, 125
};
static const char _use_syllable_machine_trans_actions[] = {
@@ -745,21 +745,21 @@
0, 0, 0, 5, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 6, 0, 7, 0,
- 0, 8, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6, 7, 0, 8, 9,
+ 0, 0, 10, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 9, 0, 10, 0,
+ 0, 0, 0, 0, 0, 11, 0, 12,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 11,
- 0, 12, 0, 13, 14, 15, 0, 16,
- 17, 18, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 0, 14, 0, 15, 16, 17, 0,
+ 18, 19, 20, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 19, 0,
- 0, 0, 0, 20, 21, 22, 0, 0,
- 0
+ 0, 0, 0, 0, 0, 0, 0, 21,
+ 0, 22, 0, 0, 0, 23, 24, 25,
+ 0, 0, 0
};
static const char _use_syllable_machine_to_state_actions[] = {
@@ -801,22 +801,22 @@
};
static const short _use_syllable_machine_eof_trans[] = {
- 1, 0, 39, 39, 39, 39, 39, 39,
- 39, 39, 39, 39, 39, 39, 39, 39,
- 39, 39, 39, 39, 39, 39, 39, 39,
- 39, 39, 39, 39, 39, 39, 39, 69,
- 69, 69, 69, 69, 69, 69, 69, 69,
- 69, 69, 69, 96, 69, 69, 69, 69,
- 69, 69, 69, 69, 69, 69, 69, 100,
- 96, 69, 100, 102, 105, 69, 69, 69,
- 69, 69, 69, 69, 69, 69, 69, 69,
- 69, 69, 96, 69, 69, 69, 69, 69,
- 69, 69, 69, 69, 69, 69, 100, 96,
- 69, 100, 135, 135, 135, 135, 135, 135,
- 135, 135, 135, 135, 135, 135, 135, 135,
- 135, 135, 135, 135, 135, 135, 135, 135,
- 135, 135, 135, 135, 135, 135, 135, 135,
- 135, 140, 141, 141, 141, 141, 39
+ 1, 0, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 70,
+ 70, 70, 70, 70, 70, 70, 70, 70,
+ 70, 70, 70, 97, 70, 70, 70, 70,
+ 70, 70, 70, 70, 70, 70, 70, 101,
+ 97, 70, 101, 103, 106, 70, 70, 70,
+ 70, 70, 70, 70, 70, 70, 70, 70,
+ 70, 70, 97, 70, 70, 70, 70, 70,
+ 70, 70, 70, 70, 70, 70, 101, 97,
+ 70, 101, 136, 136, 136, 136, 136, 136,
+ 136, 136, 138, 136, 136, 136, 136, 136,
+ 136, 136, 136, 136, 136, 136, 136, 136,
+ 136, 136, 136, 136, 136, 136, 136, 136,
+ 136, 142, 143, 143, 143, 143, 40
};
static const int use_syllable_machine_start = 1;
@@ -830,7 +830,7 @@
-#line 185 "hb-ot-shaper-use-machine.rl"
+#line 186 "hb-ot-shaper-use-machine.rl"
#define found_syllable(syllable_type) \
@@ -937,7 +937,7 @@
act = 0;
}
-#line 285 "hb-ot-shaper-use-machine.rl"
+#line 286 "hb-ot-shaper-use-machine.rl"
unsigned int syllable_serial = 1;
@@ -974,87 +974,111 @@
goto _again;
switch ( _use_syllable_machine_trans_actions[_trans] ) {
- case 6:
+ case 7:
#line 1 "NONE"
{te = p+1;}
break;
- case 14:
+ case 16:
#line 173 "hb-ot-shaper-use-machine.rl"
{te = p+1;{ found_syllable (use_virama_terminated_cluster); }}
break;
- case 12:
+ case 14:
#line 174 "hb-ot-shaper-use-machine.rl"
{te = p+1;{ found_syllable (use_sakot_terminated_cluster); }}
break;
- case 10:
+ case 12:
#line 175 "hb-ot-shaper-use-machine.rl"
{te = p+1;{ found_syllable (use_standard_cluster); }}
break;
- case 18:
+ case 20:
#line 176 "hb-ot-shaper-use-machine.rl"
{te = p+1;{ found_syllable (use_number_joiner_terminated_cluster); }}
break;
- case 16:
+ case 18:
#line 177 "hb-ot-shaper-use-machine.rl"
{te = p+1;{ found_syllable (use_numeral_cluster); }}
break;
- case 8:
+ case 10:
#line 178 "hb-ot-shaper-use-machine.rl"
{te = p+1;{ found_syllable (use_symbol_cluster); }}
break;
- case 22:
+ case 25:
#line 179 "hb-ot-shaper-use-machine.rl"
{te = p+1;{ found_syllable (use_hieroglyph_cluster); }}
break;
case 5:
-#line 180 "hb-ot-shaper-use-machine.rl"
+#line 181 "hb-ot-shaper-use-machine.rl"
{te = p+1;{ found_syllable (use_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }}
break;
case 4:
-#line 181 "hb-ot-shaper-use-machine.rl"
+#line 182 "hb-ot-shaper-use-machine.rl"
{te = p+1;{ found_syllable (use_non_cluster); }}
break;
- case 13:
+ case 15:
#line 173 "hb-ot-shaper-use-machine.rl"
{te = p;p--;{ found_syllable (use_virama_terminated_cluster); }}
break;
- case 11:
+ case 13:
#line 174 "hb-ot-shaper-use-machine.rl"
{te = p;p--;{ found_syllable (use_sakot_terminated_cluster); }}
break;
- case 9:
+ case 11:
#line 175 "hb-ot-shaper-use-machine.rl"
{te = p;p--;{ found_syllable (use_standard_cluster); }}
break;
- case 17:
+ case 19:
#line 176 "hb-ot-shaper-use-machine.rl"
{te = p;p--;{ found_syllable (use_number_joiner_terminated_cluster); }}
break;
- case 15:
+ case 17:
#line 177 "hb-ot-shaper-use-machine.rl"
{te = p;p--;{ found_syllable (use_numeral_cluster); }}
break;
- case 7:
+ case 9:
#line 178 "hb-ot-shaper-use-machine.rl"
{te = p;p--;{ found_syllable (use_symbol_cluster); }}
break;
- case 21:
+ case 24:
#line 179 "hb-ot-shaper-use-machine.rl"
{te = p;p--;{ found_syllable (use_hieroglyph_cluster); }}
break;
- case 19:
-#line 180 "hb-ot-shaper-use-machine.rl"
+ case 21:
+#line 181 "hb-ot-shaper-use-machine.rl"
{te = p;p--;{ found_syllable (use_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }}
break;
- case 20:
-#line 181 "hb-ot-shaper-use-machine.rl"
+ case 23:
+#line 182 "hb-ot-shaper-use-machine.rl"
{te = p;p--;{ found_syllable (use_non_cluster); }}
break;
case 1:
#line 178 "hb-ot-shaper-use-machine.rl"
{{p = ((te))-1;}{ found_syllable (use_symbol_cluster); }}
break;
-#line 1058 "hb-ot-shaper-use-machine.hh"
+ case 22:
+#line 1 "NONE"
+ { switch( act ) {
+ case 8:
+ {{p = ((te))-1;} found_syllable (use_non_cluster); }
+ break;
+ case 9:
+ {{p = ((te))-1;} found_syllable (use_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }
+ break;
+ }
+ }
+ break;
+ case 6:
+#line 1 "NONE"
+ {te = p+1;}
+#line 180 "hb-ot-shaper-use-machine.rl"
+ {act = 8;}
+ break;
+ case 8:
+#line 1 "NONE"
+ {te = p+1;}
+#line 181 "hb-ot-shaper-use-machine.rl"
+ {act = 9;}
+ break;
+#line 1082 "hb-ot-shaper-use-machine.hh"
}
_again:
@@ -1063,7 +1087,7 @@
#line 1 "NONE"
{ts = 0;}
break;
-#line 1067 "hb-ot-shaper-use-machine.hh"
+#line 1091 "hb-ot-shaper-use-machine.hh"
}
if ( ++p != pe )
@@ -1079,7 +1103,7 @@
}
-#line 290 "hb-ot-shaper-use-machine.rl"
+#line 291 "hb-ot-shaper-use-machine.rl"
}
diff --git a/src/hb-ot-shaper-use-machine.rl b/src/hb-ot-shaper-use-machine.rl
index f5a2091..4460e35 100644
--- a/src/hb-ot-shaper-use-machine.rl
+++ b/src/hb-ot-shaper-use-machine.rl
@@ -177,6 +177,7 @@
numeral_cluster ZWNJ? => { found_syllable (use_numeral_cluster); };
symbol_cluster ZWNJ? => { found_syllable (use_symbol_cluster); };
hieroglyph_cluster ZWNJ? => { found_syllable (use_hieroglyph_cluster); };
+ FMPst => { found_syllable (use_non_cluster); };
broken_cluster ZWNJ? => { found_syllable (use_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; };
other => { found_syllable (use_non_cluster); };
*|;
diff --git a/src/hb-ot-tag-table.hh b/src/hb-ot-tag-table.hh
index 66ba9f1..26eb34f 100644
--- a/src/hb-ot-tag-table.hh
+++ b/src/hb-ot-tag-table.hh
@@ -6,8 +6,8 @@
*
* on files with these headers:
*
- * <meta name="updated_at" content="2024-07-07 12:57 AM" />
- * File-Date: 2024-06-14
+ * <meta name="updated_at" content="2024-12-05 07:13 PM" />
+ * File-Date: 2024-11-19
*/
#ifndef HB_OT_TAG_TABLE_HH
@@ -830,6 +830,7 @@
{HB_TAG('k','f','x',' '), HB_TAG('K','U','L',' ')}, /* Kullu Pahari -> Kulvi */
{HB_TAG('k','f','y',' '), HB_TAG('K','M','N',' ')}, /* Kumaoni */
{HB_TAG('k','g','e',' '), HB_TAG_NONE }, /* Komering != Khutsuri Georgian */
+/*{HB_TAG('k','g','f',' '), HB_TAG('K','G','F',' ')},*/ /* Kube */
{HB_TAG('k','h','a',' '), HB_TAG('K','S','I',' ')}, /* Khasi */
{HB_TAG('k','h','b',' '), HB_TAG('X','B','D',' ')}, /* Lü */
{HB_TAG('k','h','k',' '), HB_TAG('M','N','G',' ')}, /* Halh Mongolian -> Mongolian */
@@ -855,6 +856,7 @@
{HB_TAG('k','l','m',' '), HB_TAG_NONE }, /* Migum != Kalmyk */
{HB_TAG('k','l','n',' '), HB_TAG('K','A','L',' ')}, /* Kalenjin [macrolanguage] */
{HB_TAG('k','m','b',' '), HB_TAG('M','B','N',' ')}, /* Kimbundu -> Mbundu */
+/*{HB_TAG('k','m','g',' '), HB_TAG('K','M','G',' ')},*/ /* Kâte */
{HB_TAG('k','m','n',' '), HB_TAG_NONE }, /* Awtuw != Kumaoni */
{HB_TAG('k','m','o',' '), HB_TAG_NONE }, /* Kwoma != Komo */
{HB_TAG('k','m','r',' '), HB_TAG('K','U','R',' ')}, /* Northern Kurdish -> Kurdish */
@@ -898,6 +900,7 @@
{HB_TAG('k','s','i',' '), HB_TAG_NONE }, /* Krisa != Khasi */
{HB_TAG('k','s','m',' '), HB_TAG_NONE }, /* Kumba != Kildin Sami */
{HB_TAG('k','s','s',' '), HB_TAG('K','I','S',' ')}, /* Southern Kisi -> Kisii */
+/*{HB_TAG('k','s','u',' '), HB_TAG('K','S','U',' ')},*/ /* Khamyang */
{HB_TAG('k','s','w',' '), HB_TAG('K','S','W',' ')}, /* S’gaw Karen */
{HB_TAG('k','s','w',' '), HB_TAG('K','R','N',' ')}, /* S'gaw Karen -> Karen */
{HB_TAG('k','t','b',' '), HB_TAG('K','E','B',' ')}, /* Kambaata -> Kebena */
@@ -911,6 +914,7 @@
{HB_TAG('k','u','y',' '), HB_TAG_NONE }, /* Kuuku-Ya'u != Kuy */
{HB_TAG('k','v','b',' '), HB_TAG('M','L','Y',' ')}, /* Kubu -> Malay */
{HB_TAG('k','v','l',' '), HB_TAG('K','R','N',' ')}, /* Kayaw -> Karen */
+ {HB_TAG('k','v','q',' '), HB_TAG('K','V','Q',' ')}, /* Geba Karen */
{HB_TAG('k','v','q',' '), HB_TAG('K','R','N',' ')}, /* Geba Karen -> Karen */
{HB_TAG('k','v','r',' '), HB_TAG('M','L','Y',' ')}, /* Kerinci -> Malay */
{HB_TAG('k','v','t',' '), HB_TAG('K','R','N',' ')}, /* Lahta Karen -> Karen */
@@ -1146,6 +1150,7 @@
{HB_TAG('n','o','d',' '), HB_TAG('N','T','A',' ')}, /* Northern Thai -> Northern Tai */
/*{HB_TAG('n','o','e',' '), HB_TAG('N','O','E',' ')},*/ /* Nimadi */
/*{HB_TAG('n','o','g',' '), HB_TAG('N','O','G',' ')},*/ /* Nogai */
+/*{HB_TAG('n','o','p',' '), HB_TAG('N','O','P',' ')},*/ /* Numanggang */
/*{HB_TAG('n','o','v',' '), HB_TAG('N','O','V',' ')},*/ /* Novial */
{HB_TAG('n','p','i',' '), HB_TAG('N','E','P',' ')}, /* Nepali */
{HB_TAG('n','p','l',' '), HB_TAG('N','A','H',' ')}, /* Southeastern Puebla Nahuatl -> Nahuatl */
@@ -1156,6 +1161,7 @@
{HB_TAG('n','s','u',' '), HB_TAG('N','A','H',' ')}, /* Sierra Negra Nahuatl -> Nahuatl */
{HB_TAG('n','t','o',' '), HB_TAG_NONE }, /* Ntomba != Esperanto */
{HB_TAG('n','u','e',' '), HB_TAG('B','A','D','0')}, /* Ngundu -> Banda */
+/*{HB_TAG('n','u','k',' '), HB_TAG('N','U','K',' ')},*/ /* Nuu-chah-nulth */
{HB_TAG('n','u','u',' '), HB_TAG('B','A','D','0')}, /* Ngbundu -> Banda */
{HB_TAG('n','u','z',' '), HB_TAG('N','A','H',' ')}, /* Tlamacazapa Nahuatl -> Nahuatl */
{HB_TAG('n','w','e',' '), HB_TAG('B','M','L',' ')}, /* Ngwe -> Bamileke */
@@ -1399,8 +1405,10 @@
{HB_TAG('s','i','z',' '), HB_TAG('B','B','R',' ')}, /* Siwi -> Berber */
/*{HB_TAG('s','j','a',' '), HB_TAG('S','J','A',' ')},*/ /* Epena */
{HB_TAG('s','j','d',' '), HB_TAG('K','S','M',' ')}, /* Kildin Sami */
+/*{HB_TAG('s','j','e',' '), HB_TAG('S','J','E',' ')},*/ /* Pite Sami */
{HB_TAG('s','j','o',' '), HB_TAG('S','I','B',' ')}, /* Xibe -> Sibe */
{HB_TAG('s','j','s',' '), HB_TAG('B','B','R',' ')}, /* Senhaja De Srair -> Berber */
+/*{HB_TAG('s','j','u',' '), HB_TAG('S','J','U',' ')},*/ /* Ume Sami */
{HB_TAG('s','k','g',' '), HB_TAG('M','L','G',' ')}, /* Sakalava Malagasy -> Malagasy */
{HB_TAG('s','k','r',' '), HB_TAG('S','R','K',' ')}, /* Saraiki */
{HB_TAG('s','k','s',' '), HB_TAG_NONE }, /* Maia != Skolt Sami */
@@ -1461,6 +1469,7 @@
{HB_TAG('t','a','q',' '), HB_TAG('B','B','R',' ')}, /* Tamasheq -> Berber */
{HB_TAG('t','a','s',' '), HB_TAG('C','P','P',' ')}, /* Tay Boi -> Creoles */
{HB_TAG('t','a','u',' '), HB_TAG('A','T','H',' ')}, /* Upper Tanana -> Athapaskan */
+/*{HB_TAG('t','b','v',' '), HB_TAG('T','B','V',' ')},*/ /* Tobo */
{HB_TAG('t','c','b',' '), HB_TAG('A','T','H',' ')}, /* Tanacross -> Athapaskan */
{HB_TAG('t','c','e',' '), HB_TAG('A','T','H',' ')}, /* Southern Tutchone -> Athapaskan */
{HB_TAG('t','c','h',' '), HB_TAG('C','P','P',' ')}, /* Turks And Caicos Creole English -> Creoles */
@@ -1623,7 +1632,7 @@
{HB_TAG('y','b','a',' '), HB_TAG_NONE }, /* Yala != Yoruba */
{HB_TAG('y','b','b',' '), HB_TAG('B','M','L',' ')}, /* Yemba -> Bamileke */
{HB_TAG('y','b','d',' '), HB_TAG('A','R','K',' ')}, /* Yangbye (retired code) -> Rakhine */
- {HB_TAG('y','c','r',' '), HB_TAG_NONE }, /* Yilan Creole != Y-Cree */
+ {HB_TAG('y','c','r',' '), HB_TAG('C','P','P',' ')}, /* Yilan Creole -> Creoles */
{HB_TAG('y','d','d',' '), HB_TAG('J','I','I',' ')}, /* Eastern Yiddish -> Yiddish */
/*{HB_TAG('y','g','p',' '), HB_TAG('Y','G','P',' ')},*/ /* Gepo */
{HB_TAG('y','i','h',' '), HB_TAG('J','I','I',' ')}, /* Western Yiddish -> Yiddish */
diff --git a/src/hb-ot-var-common.hh b/src/hb-ot-var-common.hh
index efbbfb2..3ab58ae 100644
--- a/src/hb-ot-var-common.hh
+++ b/src/hb-ot-var-common.hh
@@ -885,9 +885,9 @@
* no need to do find_shared_points () again */
hb_vector_t<char> *shared_points_bytes = nullptr;
- /* total compiled byte size as TupleVariationData format, initialized to its
- * min_size: 4 */
- unsigned compiled_byte_size = 4;
+ /* total compiled byte size as TupleVariationData format, initialized to 0 */
+ unsigned compiled_byte_size = 0;
+ bool needs_padding = false;
/* for gvar iup delta optimization: whether this is a composite glyph */
bool is_composite = false;
@@ -1219,12 +1219,21 @@
bool compile_bytes (const hb_map_t& axes_index_map,
const hb_map_t& axes_old_index_tag_map,
bool use_shared_points,
+ bool is_gvar = false,
const hb_hashmap_t<const hb_vector_t<char>*, unsigned>* shared_tuples_idx_map = nullptr)
{
+ // return true for empty glyph
+ if (!tuple_vars)
+ return true;
+
// compile points set and store data in hashmap
if (!compile_all_point_sets ())
return false;
+ /* total compiled byte size as TupleVariationData format, initialized to its
+ * min_size: 4 */
+ compiled_byte_size += 4;
+
if (use_shared_points)
{
find_shared_points ();
@@ -1253,6 +1262,13 @@
return false;
compiled_byte_size += tuple.compiled_tuple_header.length + points_data_length + tuple.compiled_deltas.length;
}
+
+ if (is_gvar && (compiled_byte_size % 2))
+ {
+ needs_padding = true;
+ compiled_byte_size += 1;
+ }
+
return true;
}
@@ -1295,7 +1311,7 @@
}
/* padding for gvar */
- if (is_gvar && (compiled_byte_size % 2))
+ if (is_gvar && needs_padding)
{
HBUINT8 pad;
pad = 0;
diff --git a/src/hb-ot-var-gvar-table.hh b/src/hb-ot-var-gvar-table.hh
index b021a00..96cc2e8 100644
--- a/src/hb-ot-var-gvar-table.hh
+++ b/src/hb-ot-var-gvar-table.hh
@@ -140,6 +140,7 @@
for (tuple_variations_t& vars: glyph_variations)
if (!vars.compile_bytes (axes_index_map, axes_old_index_tag_map,
true, /* use shared points*/
+ true,
&shared_tuples_idx_map))
return false;
diff --git a/src/hb-paint.h b/src/hb-paint.h
index b0cd384..d8896a5 100644
--- a/src/hb-paint.h
+++ b/src/hb-paint.h
@@ -146,7 +146,7 @@
*
* A virtual method for the #hb_paint_funcs_t to render a color glyph by glyph index.
*
- * Return value: %true if the glyph was painted, %false otherwise.
+ * Return value: `true` if the glyph was painted, `false` otherwise.
*
* Since: 8.2.0
*/
diff --git a/src/hb-sanitize.hh b/src/hb-sanitize.hh
index 408649c..199165a 100644
--- a/src/hb-sanitize.hh
+++ b/src/hb-sanitize.hh
@@ -72,8 +72,8 @@
*
* === The sanitize() contract ===
*
- * The sanitize() method of each object type shall return true if it's safe to
- * call other methods of the object, and %false otherwise.
+ * The sanitize() method of each object type shall return `true` if it's safe to
+ * call other methods of the object, and `false` otherwise.
*
* Note that what sanitize() checks for might align with what the specification
* describes as valid table data, but does not have to be. In particular, we
diff --git a/src/hb-serialize.hh b/src/hb-serialize.hh
index e988451..f066d0e 100644
--- a/src/hb-serialize.hh
+++ b/src/hb-serialize.hh
@@ -36,9 +36,7 @@
#include "hb-map.hh"
#include "hb-pool.hh"
-#ifdef HB_EXPERIMENTAL_API
-#include "hb-subset-repacker.h"
-#endif
+#include "hb-subset-serialize.h"
/*
* Serialize
@@ -75,8 +73,7 @@
object_t () = default;
-#ifdef HB_EXPERIMENTAL_API
- object_t (const hb_object_t &o)
+ object_t (const hb_subset_serialize_object_t &o)
{
head = o.head;
tail = o.tail;
@@ -89,7 +86,6 @@
for (unsigned i = 0; i < o.num_virtual_links; i++)
virtual_links.push (o.virtual_links[i]);
}
-#endif
bool add_virtual_link (objidx_t objidx)
{
@@ -148,8 +144,7 @@
link_t () = default;
-#ifdef HB_EXPERIMENTAL_API
- link_t (const hb_link_t &o)
+ link_t (const hb_subset_serialize_link_t &o)
{
width = o.width;
is_signed = 0;
@@ -158,7 +153,6 @@
bias = 0;
objidx = o.objidx;
}
-#endif
HB_INTERNAL static int cmp (const void* a, const void* b)
{
@@ -400,6 +394,7 @@
{
merge_virtual_links (obj, objidx);
obj->fini ();
+ object_pool.release (obj);
return objidx;
}
}
@@ -463,9 +458,11 @@
while (packed.length > 1 &&
packed.tail ()->head < tail)
{
- packed_map.del (packed.tail ());
- assert (!packed.tail ()->next);
- packed.tail ()->fini ();
+ object_t *obj = packed.tail ();
+ packed_map.del (obj);
+ assert (!obj->next);
+ obj->fini ();
+ object_pool.release (obj);
packed.pop ();
}
if (packed.length > 1)
diff --git a/src/hb-shape.h b/src/hb-shape.h
index d4d4fdf..b09bf05 100644
--- a/src/hb-shape.h
+++ b/src/hb-shape.h
@@ -53,6 +53,7 @@
unsigned int num_features,
const char * const *shaper_list);
+#ifdef HB_EXPERIMENTAL_API
HB_EXTERN hb_bool_t
hb_shape_justify (hb_font_t *font,
hb_buffer_t *buffer,
@@ -64,6 +65,7 @@
float *advance, /* IN/OUT */
hb_tag_t *var_tag, /* OUT */
float *var_value /* OUT */);
+#endif
HB_EXTERN const char **
hb_shape_list_shapers (void);
diff --git a/src/hb-subset-input.cc b/src/hb-subset-input.cc
index b874949..2f0b54f 100644
--- a/src/hb-subset-input.cc
+++ b/src/hb-subset-input.cc
@@ -534,7 +534,6 @@
*
* Note: input min value can not be bigger than input max value. If the input
* default value is not within the new min/max range, it'll be clamped.
- * Note: currently it supports gvar and cvar tables only.
*
* Return value: `true` if success, `false` otherwise
*
@@ -597,6 +596,144 @@
*axis_max_value = triple->maximum;
return true;
}
+
+/**
+ * hb_subset_axis_range_from_string:
+ * @str: a string to parse
+ * @len: length of @str, or -1 if str is NULL terminated
+ * @axis_min_value: (out): the axis min value to initialize with the parsed value
+ * @axis_max_value: (out): the axis max value to initialize with the parsed value
+ * @axis_def_value: (out): the axis default value to initialize with the parse
+ * value
+ *
+ * Parses a string into a subset axis range(min, def, max).
+ * Axis positions string is in the format of min:def:max or min:max
+ * When parsing axis positions, empty values as meaning the existing value for that part
+ * E.g: :300:500
+ * Specifies min = existing, def = 300, max = 500
+ * In the output axis_range, if a value should be set to it's default value,
+ * then it will be set to NaN
+ *
+ * Return value:
+ * `true` if @str is successfully parsed, `false` otherwise
+ *
+ * Since: 10.2.0
+ */
+HB_EXTERN hb_bool_t
+hb_subset_axis_range_from_string (const char *str, int len,
+ float *axis_min_value,
+ float *axis_max_value,
+ float *axis_def_value)
+{
+ if (len < 0)
+ len = strlen (str);
+
+ const char *end = str + len;
+ const char* part = strpbrk (str, ":");
+ if (!part)
+ {
+ // Single value.
+ if (strcmp (str, "drop") == 0)
+ {
+ *axis_min_value = NAN;
+ *axis_def_value = NAN;
+ *axis_max_value = NAN;
+ return true;
+ }
+
+ double v;
+ if (!hb_parse_double (&str, end, &v)) return false;
+
+ *axis_min_value = v;
+ *axis_def_value = v;
+ *axis_max_value = v;
+ return true;
+ }
+
+ float values[3];
+ int count = 0;
+ for (int i = 0; i < 3; i++) {
+ count++;
+ if (!*str || part == str)
+ {
+ values[i] = NAN;
+
+ if (part == NULL) break;
+ str = part + 1;
+ part = strpbrk (str, ":");
+ continue;
+ }
+
+ double v;
+ if (!hb_parse_double (&str, part, &v)) return false;
+ values[i] = v;
+
+ if (part == NULL) break;
+ str = part + 1;
+ part = strpbrk (str, ":");
+ }
+
+ if (count == 2)
+ {
+ *axis_min_value = values[0];
+ *axis_def_value = NAN;
+ *axis_max_value = values[1];
+ return true;
+ }
+ else if (count == 3)
+ {
+ *axis_min_value = values[0];
+ *axis_def_value = values[1];
+ *axis_max_value = values[2];
+ return true;
+ }
+ return false;
+}
+
+/**
+ * hb_subset_axis_range_to_string:
+ * @input: a #hb_subset_input_t object.
+ * @axis_tag: an axis to convert
+ * @buf: (array length=size) (out caller-allocates): output string
+ * @size: the allocated size of @buf
+ *
+ * Converts an axis range into a `NULL`-terminated string in the format
+ * understood by hb_subset_axis_range_from_string(). The client in responsible for
+ * allocating big enough size for @buf, 128 bytes is more than enough.
+ *
+ * Since: 10.2.0
+ */
+HB_EXTERN void
+hb_subset_axis_range_to_string (hb_subset_input_t *input,
+ hb_tag_t axis_tag,
+ char *buf, unsigned size)
+{
+ if (unlikely (!size)) return;
+ Triple* triple;
+ if (!input->axes_location.has(axis_tag, &triple)) {
+ return;
+ }
+
+ char s[128];
+ unsigned len = 0;
+
+ hb_locale_t clocale HB_UNUSED;
+ hb_locale_t oldlocale HB_UNUSED;
+ oldlocale = hb_uselocale (clocale = newlocale (LC_ALL_MASK, "C", NULL));
+ len += hb_max (0, snprintf (s, ARRAY_LENGTH (s) - len, "%g", (double) triple->minimum));
+ s[len++] = ':';
+
+ len += hb_max (0, snprintf (s + len, ARRAY_LENGTH (s) - len, "%g", (double) triple->middle));
+ s[len++] = ':';
+
+ len += hb_max (0, snprintf (s + len, ARRAY_LENGTH (s) - len, "%g", (double) triple->maximum));
+ (void) hb_uselocale (((void) freelocale (clocale), oldlocale));
+
+ assert (len < ARRAY_LENGTH (s));
+ len = hb_min (len, size - 1);
+ hb_memcpy (buf, s, len);
+ buf[len] = '\0';
+}
#endif
/**
diff --git a/src/hb-subset-plan.cc b/src/hb-subset-plan.cc
index 59020db..c88fd75 100644
--- a/src/hb-subset-plan.cc
+++ b/src/hb-subset-plan.cc
@@ -678,7 +678,8 @@
hb_subset_plan_t *plan)
{
OT::cmap::accelerator_t cmap (plan->source);
- unsigned size_threshold = plan->source->get_num_glyphs ();
+ unsigned size_threshold = plan->source->get_num_glyphs ();
+
if (glyphs->is_empty () && unicodes->get_population () < size_threshold)
{
@@ -797,6 +798,21 @@
plan->unicodes.add_sorted_array (&arr.arrayZ->first, arr.length, sizeof (*arr.arrayZ));
plan->_glyphset_gsub.add_array (&arr.arrayZ->second, arr.length, sizeof (*arr.arrayZ));
}
+
+ // Variation selectors don't have glyphs associated with them in the cmap so they will have been filtered out above
+ // but should still be retained. Add them back here.
+
+ // However, the min and max codepoints for OS/2 should be calculated without considering variation selectors,
+ // so record those first.
+ plan->os2_info.min_cmap_codepoint = plan->unicodes.get_min();
+ plan->os2_info.max_cmap_codepoint = plan->unicodes.get_max();
+
+ hb_set_t variation_selectors_to_retain;
+ cmap.collect_variation_selectors(&variation_selectors_to_retain);
+ + variation_selectors_to_retain.iter()
+ | hb_filter(unicodes)
+ | hb_sink(&plan->unicodes)
+ ;
}
static unsigned
diff --git a/src/hb-subset-plan.hh b/src/hb-subset-plan.hh
index 19a9fa6..fe80c08 100644
--- a/src/hb-subset-plan.hh
+++ b/src/hb-subset-plan.hh
@@ -41,6 +41,13 @@
struct Feature;
}
+struct os2_info_t {
+ hb_codepoint_t min_cmap_codepoint;
+ hb_codepoint_t max_cmap_codepoint;
+};
+
+typedef struct os2_info_t os2_info_t;
+
struct head_maxp_info_t
{
head_maxp_info_t ()
@@ -180,6 +187,8 @@
//recalculated head/maxp table info after instancing
mutable head_maxp_info_t head_maxp_info;
+ os2_info_t os2_info;
+
const hb_subset_accelerator_t* accelerator;
hb_subset_accelerator_t* inprogress_accelerator;
diff --git a/src/hb-subset-repacker.h b/src/hb-subset-repacker.h
deleted file mode 100644
index 245cf60..0000000
--- a/src/hb-subset-repacker.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright © 2022 Google, Inc.
- *
- * This is part of HarfBuzz, a text shaping library.
- *
- * Permission is hereby granted, without written agreement and without
- * license or royalty fees, to use, copy, modify, and distribute this
- * software and its documentation for any purpose, provided that the
- * above copyright notice and the following two paragraphs appear in
- * all copies of this software.
- *
- * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
- * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
- * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
- * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- *
- * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
- * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
- * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
- *
- */
-
-#ifndef HB_SUBSET_REPACKER_H
-#define HB_SUBSET_REPACKER_H
-
-#include "hb.h"
-
-HB_BEGIN_DECLS
-
-#ifdef HB_EXPERIMENTAL_API
-/*
- * struct hb_link_t
- * width: offsetSize in bytes
- * position: position of the offset field in bytes
- * from beginning of subtable
- * objidx: index of subtable
- */
-struct hb_link_t
-{
- unsigned width;
- unsigned position;
- unsigned objidx;
-};
-
-typedef struct hb_link_t hb_link_t;
-
-/*
- * struct hb_object_t
- * head: start of object data
- * tail: end of object data
- * num_real_links: num of offset field in the object
- * real_links: pointer to array of offset info
- * num_virtual_links: num of objects that must be packed
- * after current object in the final serialized order
- * virtual_links: array of virtual link info
- */
-struct hb_object_t
-{
- char *head;
- char *tail;
- unsigned num_real_links;
- hb_link_t *real_links;
- unsigned num_virtual_links;
- hb_link_t *virtual_links;
-};
-
-typedef struct hb_object_t hb_object_t;
-
-HB_EXTERN hb_blob_t*
-hb_subset_repack_or_fail (hb_tag_t table_tag,
- hb_object_t* hb_objects,
- unsigned num_hb_objs);
-
-#endif
-
-HB_END_DECLS
-
-#endif /* HB_SUBSET_REPACKER_H */
diff --git a/src/hb-subset-repacker.cc b/src/hb-subset-serialize.cc
similarity index 67%
rename from src/hb-subset-repacker.cc
rename to src/hb-subset-serialize.cc
index 6a29b35..dc76136 100644
--- a/src/hb-subset-repacker.cc
+++ b/src/hb-subset-serialize.cc
@@ -22,37 +22,36 @@
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*
*/
+
+#include "hb.hh"
+
+#include "hb-subset-serialize.h"
#include "hb-repacker.hh"
-#ifdef HB_EXPERIMENTAL_API
-
/**
- * hb_subset_repack_or_fail:
+ * hb_subset_serialize_or_fail:
* @table_tag: tag of the table being packed, needed to allow table specific optimizations.
- * @hb_objects: raw array of struct hb_object_t, which provides
+ * @hb_objects: raw array of struct hb_subset_serialize_object_t, which provides
* object graph info
- * @num_hb_objs: number of hb_object_t in the hb_objects array.
+ * @num_hb_objs: number of hb_subset_serialize_object_t in the hb_objects array.
*
- * Given the input object graph info, repack a table to eliminate
- * offset overflows. A nullptr is returned if the repacking attempt fails.
+ * Given the input object graph info, repack a table to eliminate offset overflows and
+ * serialize it into a continuous array of bytes. A nullptr is returned if the serializing attempt fails.
* Table specific optimizations (eg. extension promotion in GSUB/GPOS) may be performed.
* Passing HB_TAG_NONE will disable table specific optimizations.
*
- * XSince: EXPERIMENTAL
+ * Since: 10.2.0
**/
-hb_blob_t* hb_subset_repack_or_fail (hb_tag_t table_tag,
- hb_object_t* hb_objects,
- unsigned num_hb_objs)
+HB_EXTERN hb_blob_t *
+hb_subset_serialize_or_fail (hb_tag_t table_tag,
+ hb_subset_serialize_object_t *hb_objects,
+ unsigned num_hb_objs)
{
- hb_vector_t<const hb_object_t *> packed;
+ hb_vector_t<const hb_subset_serialize_object_t *> packed;
packed.alloc (num_hb_objs + 1);
packed.push (nullptr);
for (unsigned i = 0 ; i < num_hb_objs ; i++)
packed.push (&(hb_objects[i]));
- return hb_resolve_overflows (packed,
- table_tag,
- 20,
- true);
+ return hb_resolve_overflows (packed, table_tag, 20, true);
}
-#endif
diff --git a/src/hb-subset-serialize.h b/src/hb-subset-serialize.h
new file mode 100644
index 0000000..9035d4c
--- /dev/null
+++ b/src/hb-subset-serialize.h
@@ -0,0 +1,83 @@
+/*
+ * Copyright © 2022 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ */
+
+#ifndef HB_SUBSET_SERIALIZE_H
+#define HB_SUBSET_SERIALIZE_H
+
+#include "hb.h"
+
+HB_BEGIN_DECLS
+
+/**
+ * hb_subset_serialize_link_t:
+ * @width: offsetSize in bytes
+ * @position: position of the offset field in bytes from
+ * beginning of subtable
+ * @objidx: index of subtable
+ *
+ * Represents a link between two objects in the object graph
+ * to be serialized.
+ *
+ * Since: 10.2.0
+ */
+typedef struct hb_subset_serialize_link_t {
+ unsigned int width;
+ unsigned int position;
+ unsigned int objidx;
+} hb_subset_serialize_link_t;
+
+/**
+ * hb_subset_serialize_object_t:
+ * @head: start of object data
+ * @tail: end of object data
+ * @num_real_links: number of offset field in the object
+ * @real_links: array of offset info
+ * @num_virtual_links: number of objects that must be packed
+ * after current object in the final
+ * serialized order
+ * @virtual_links: array of virtual link info
+ *
+ * Represents an object in the object graph to be serialized.
+ *
+ * Since: 10.2.0
+ */
+typedef struct hb_subset_serialize_object_t {
+ char *head;
+ char *tail;
+ unsigned int num_real_links;
+ hb_subset_serialize_link_t *real_links;
+ unsigned int num_virtual_links;
+ hb_subset_serialize_link_t *virtual_links;
+} hb_subset_serialize_object_t;
+
+HB_EXTERN hb_blob_t *
+hb_subset_serialize_or_fail (hb_tag_t table_tag,
+ hb_subset_serialize_object_t *hb_objects,
+ unsigned num_hb_objs);
+
+
+HB_END_DECLS
+
+#endif /* HB_SUBSET_SERIALIZE_H */
diff --git a/src/hb-subset.cc b/src/hb-subset.cc
index 7cea9f1..4e96c98 100644
--- a/src/hb-subset.cc
+++ b/src/hb-subset.cc
@@ -295,7 +295,7 @@
DEBUG_MSG (SUBSET, nullptr, "OT::%c%c%c%c ran out of room; reallocating to %u bytes.",
HB_UNTAG (c->table_tag), buf_size);
- if (unlikely (buf_size > c->source_blob->length * 16 ||
+ if (unlikely (buf_size > c->source_blob->length * 256 ||
!buf->alloc (buf_size, true)))
{
DEBUG_MSG (SUBSET, nullptr, "OT::%c%c%c%c failed to reallocate %u bytes.",
diff --git a/src/hb-subset.h b/src/hb-subset.h
index 365c21a..71276c7 100644
--- a/src/hb-subset.h
+++ b/src/hb-subset.h
@@ -203,6 +203,18 @@
float axis_max_value,
float axis_def_value);
+HB_EXTERN hb_bool_t
+hb_subset_axis_range_from_string (const char *str, int len,
+ float *axis_min_value,
+ float *axis_max_value,
+ float *axis_def_value);
+
+HB_EXTERN void
+hb_subset_axis_range_to_string (hb_subset_input_t *input,
+ hb_tag_t axis_tag,
+ char *buf,
+ unsigned size);
+
#ifdef HB_EXPERIMENTAL_API
HB_EXTERN hb_bool_t
hb_subset_input_override_name_table (hb_subset_input_t *input,
diff --git a/src/hb-utf.hh b/src/hb-utf.hh
index 1120bd1..6db9bf2 100644
--- a/src/hb-utf.hh
+++ b/src/hb-utf.hh
@@ -458,19 +458,21 @@
template <typename utf_t>
static inline const typename utf_t::codepoint_t *
hb_utf_offset_to_pointer (const typename utf_t::codepoint_t *start,
+ const typename utf_t::codepoint_t *text,
+ unsigned text_len,
signed offset)
{
hb_codepoint_t unicode;
while (offset-- > 0)
start = utf_t::next (start,
- start + utf_t::max_len,
+ text + text_len,
&unicode,
HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT);
while (offset++ < 0)
start = utf_t::prev (start,
- start - utf_t::max_len,
+ text,
&unicode,
HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT);
diff --git a/src/hb-version.h b/src/hb-version.h
index 1083bc9..8e767cb 100644
--- a/src/hb-version.h
+++ b/src/hb-version.h
@@ -47,7 +47,7 @@
*
* The minor component of the library version available at compile-time.
*/
-#define HB_VERSION_MINOR 1
+#define HB_VERSION_MINOR 2
/**
* HB_VERSION_MICRO:
*
@@ -60,7 +60,7 @@
*
* A string literal containing the library version available at compile-time.
*/
-#define HB_VERSION_STRING "10.1.0"
+#define HB_VERSION_STRING "10.2.0"
/**
* HB_VERSION_ATLEAST:
diff --git a/src/meson.build b/src/meson.build
index 5ca15d9..b9daabf 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -383,7 +383,7 @@
'hb-subset-plan.cc',
'hb-subset-plan.hh',
'hb-subset-plan-member-list.hh',
- 'hb-subset-repacker.cc',
+ 'hb-subset-serialize.cc',
'graph/gsubgpos-context.cc',
'graph/gsubgpos-context.hh',
'graph/gsubgpos-graph.hh',
@@ -398,7 +398,7 @@
hb_subset_headers = files(
'hb-subset.h',
- 'hb-subset-repacker.h'
+ 'hb-subset-serialize.h'
)
hb_gobject_sources = files(
@@ -875,6 +875,7 @@
cmake_config.set('PACKAGE_CMAKE_INSTALL_INCLUDEDIR', '${PACKAGE_PREFIX_DIR}/@0@'.format(cmake_install_includedir))
cmake_config.set('PACKAGE_CMAKE_INSTALL_LIBDIR', '${PACKAGE_PREFIX_DIR}/@0@'.format(cmake_install_libdir))
cmake_config.set('PACKAGE_INCLUDE_INSTALL_DIR', '${PACKAGE_PREFIX_DIR}/@0@/@1@'.format(cmake_install_includedir, meson.project_name()))
+cmake_config.set('HARFBUZZ_VERSION', meson.project_version())
cmake_config.set('HB_HAVE_GOBJECT', have_gobject ? 'YES' : 'NO')
cmake_config.set('HB_LIBRARY_TYPE', get_option('default_library') == 'static' ? 'STATIC' : 'SHARED')
diff --git a/subprojects/cairo.wrap b/subprojects/cairo.wrap
index 36e8043..edd7cf8 100644
--- a/subprojects/cairo.wrap
+++ b/subprojects/cairo.wrap
@@ -1,8 +1,10 @@
-[wrap-git]
-directory=cairo
-url=https://gitlab.freedesktop.org/cairo/cairo.git
-depth=1
-revision=1.17.8
+[wrap-file]
+directory = cairo-1.18.2
+source_url = https://www.cairographics.org/releases/cairo-1.18.2.tar.xz
+source_filename = cairo-1.18.2.tar.xz
+source_hash = a62b9bb42425e844cc3d6ddde043ff39dbabedd1542eba57a2eb79f85889d45a
+source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/cairo_1.18.2-1/cairo-1.18.2.tar.xz
+wrapdb_version = 1.18.2-1
[provide]
-dependency_names = cairo
+dependency_names = cairo, cairo-gobject
diff --git a/subprojects/freetype2.wrap b/subprojects/freetype2.wrap
index fe325d8..acad6f4 100644
--- a/subprojects/freetype2.wrap
+++ b/subprojects/freetype2.wrap
@@ -1,9 +1,10 @@
[wrap-file]
-directory = freetype-2.13.0
-source_url = https://download.savannah.gnu.org/releases/freetype/freetype-2.13.0.tar.xz
-source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/freetype2_2.13.0-1/freetype-2.13.0.tar.xz
-source_filename = freetype-2.13.0.tar.xz
-source_hash = 5ee23abd047636c24b2d43c6625dcafc66661d1aca64dec9e0d05df29592624c
+directory = freetype-2.13.3
+source_url = https://download.savannah.gnu.org/releases/freetype/freetype-2.13.3.tar.xz
+source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/freetype2_2.13.3-1/freetype-2.13.3.tar.xz
+source_filename = freetype-2.13.3.tar.xz
+source_hash = 0550350666d427c74daeb85d5ac7bb353acba5f76956395995311a9c6f063289
+wrapdb_version = 2.13.3-1
[provide]
freetype2 = freetype_dep
diff --git a/subprojects/glib.wrap b/subprojects/glib.wrap
index 2ea0dbf..3fded54 100644
--- a/subprojects/glib.wrap
+++ b/subprojects/glib.wrap
@@ -1,10 +1,10 @@
[wrap-file]
-directory = glib-2.74.4
-source_url = https://download.gnome.org/sources/glib/2.74/glib-2.74.4.tar.xz
-source_fallback_url = https://ftp.acc.umu.se/pub/gnome/sources/glib/2.74/glib-2.74.4.tar.xz
-source_filename = glib-2.74.4.tar.xz
-source_hash = 0e82da5ea129b4444227c7e4a9e598f7288d1994bf63f129c44b90cfd2432172
-wrapdb_version = 2.74.4-1
+directory = glib-2.82.2
+source_url = https://download.gnome.org/sources/glib/2.82/glib-2.82.2.tar.xz
+source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/glib_2.82.2-1/glib-2.82.2.tar.xz
+source_filename = glib-2.82.2.tar.xz
+source_hash = ab45f5a323048b1659ee0fbda5cecd94b099ab3e4b9abf26ae06aeb3e781fd63
+wrapdb_version = 2.82.2-1
[provide]
dependency_names = gthread-2.0, gobject-2.0, gmodule-no-export-2.0, gmodule-export-2.0, gmodule-2.0, glib-2.0, gio-2.0, gio-windows-2.0, gio-unix-2.0
diff --git a/subprojects/google-benchmark.wrap b/subprojects/google-benchmark.wrap
index 6205cd7..91ff952 100644
--- a/subprojects/google-benchmark.wrap
+++ b/subprojects/google-benchmark.wrap
@@ -1,12 +1,14 @@
[wrap-file]
-directory = benchmark-1.7.1
-source_url = https://github.com/google/benchmark/archive/refs/tags/v1.7.1.tar.gz
-source_filename = benchmark-1.7.1.tar.gz
-source_hash = 6430e4092653380d9dc4ccb45a1e2dc9259d581f4866dc0759713126056bc1d7
-patch_filename = google-benchmark_1.7.1-1_patch.zip
-patch_url = https://wrapdb.mesonbuild.com/v2/google-benchmark_1.7.1-1/get_patch
-patch_hash = 9c6694328ac971cd781aa67c45c64291c087f118e23b75946f52670caacf49b7
-wrapdb_version = 1.7.1-1
+directory = benchmark-1.8.4
+source_url = https://github.com/google/benchmark/archive/refs/tags/v1.8.4.tar.gz
+source_filename = benchmark-1.8.4.tar.gz
+source_hash = 3e7059b6b11fb1bbe28e33e02519398ca94c1818874ebed18e504dc6f709be45
+patch_filename = google-benchmark_1.8.4-1_patch.zip
+patch_url = https://wrapdb.mesonbuild.com/v2/google-benchmark_1.8.4-1/get_patch
+patch_hash = 77cdae534fe12b6783c1267de3673d3462b229054519034710d581b419e73cca
+source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/google-benchmark_1.8.4-1/benchmark-1.8.4.tar.gz
+wrapdb_version = 1.8.4-1
[provide]
benchmark = google_benchmark_dep
+benchmark-main = google_benchmark_main_dep
diff --git a/test/api/test-subset-cmap.c b/test/api/test-subset-cmap.c
index e16400e..9aef6f8 100644
--- a/test/api/test-subset-cmap.c
+++ b/test/api/test-subset-cmap.c
@@ -145,6 +145,7 @@
hb_set_add (codepoints, 0xAE);
hb_set_add (codepoints, 0x2049);
hb_set_add (codepoints, 0x20E3);
+ hb_set_add (codepoints, 0xfe0f);
face_subset = hb_subset_test_create_subset (face, hb_subset_test_create_input (codepoints));
hb_set_destroy (codepoints);
@@ -165,6 +166,7 @@
hb_set_add (codepoints, 0x38);
hb_set_add (codepoints, 0xAE);
hb_set_add (codepoints, 0x2049);
+ hb_set_add (codepoints, 0xfe0f);
face_subset = hb_subset_test_create_subset (face, hb_subset_test_create_input (codepoints));
hb_set_destroy (codepoints);
diff --git a/test/api/test-subset-repacker.c b/test/api/test-subset-repacker.c
index d1779b6..6eeae4e 100644
--- a/test/api/test-subset-repacker.c
+++ b/test/api/test-subset-repacker.c
@@ -26,15 +26,14 @@
#include "hb-test.h"
#include "hb-subset-test.h"
-#ifdef HB_EXPERIMENTAL_API
-#include "hb-subset-repacker.h"
+#include "hb-subset-serialize.h"
char test_gsub_data[106] = "\x0\x1\x0\x0\x0\xa\x0\x1e\x0\x2c\x0\x1\x6c\x61\x74\x6e\x0\x8\x0\x4\x0\x0\x0\x0\xff\xff\x0\x1\x0\x0\x0\x1\x74\x65\x73\x74\x0\x8\x0\x0\x0\x1\x0\x1\x0\x2\x0\x2a\x0\x6\x0\x5\x0\x0\x0\x1\x0\x8\x0\x1\x0\x8\x0\x1\x0\xe\x0\x1\x0\x1\x0\x1\x0\x1\x0\x4\x0\x2\x0\x1\x0\x2\x0\x1\x0\x0\x0\x1\x0\x0\x0\x1\x0\x8\x0\x1\x0\x6\x0\x1\x0\x1\x0\x1\x0\x2";
static void
test_hb_repack_with_cy_struct (void)
{
- hb_object_t *hb_objs = calloc (15, sizeof (hb_object_t));
+ hb_subset_serialize_object_t *hb_objs = calloc (15, sizeof (hb_subset_serialize_object_t));
hb_objs[0].head = &(test_gsub_data[100]);
hb_objs[0].tail = &(test_gsub_data[105]) + 1;
@@ -47,7 +46,7 @@
hb_objs[1].tail = &(test_gsub_data[100]);
hb_objs[1].num_real_links = 1;
hb_objs[1].num_virtual_links = 0;
- hb_objs[1].real_links = malloc (sizeof (hb_link_t));
+ hb_objs[1].real_links = malloc (sizeof (hb_subset_serialize_link_t));
hb_objs[1].real_links[0].width = 2;
hb_objs[1].real_links[0].position = 2;
hb_objs[1].real_links[0].objidx = 1;
@@ -58,7 +57,7 @@
hb_objs[2].tail = &(test_gsub_data[94]);
hb_objs[2].num_real_links = 1;
hb_objs[2].num_virtual_links = 0;
- hb_objs[2].real_links = malloc (sizeof (hb_link_t));
+ hb_objs[2].real_links = malloc (sizeof (hb_subset_serialize_link_t));
hb_objs[2].real_links[0].width = 2;
hb_objs[2].real_links[0].position = 6;
hb_objs[2].real_links[0].objidx = 2;
@@ -75,7 +74,7 @@
hb_objs[4].tail = &(test_gsub_data[76]);
hb_objs[4].num_real_links = 1;
hb_objs[4].num_virtual_links = 0;
- hb_objs[4].real_links = malloc (sizeof (hb_link_t));
+ hb_objs[4].real_links = malloc (sizeof (hb_subset_serialize_link_t));
hb_objs[4].real_links[0].width = 2;
hb_objs[4].real_links[0].position = 2;
hb_objs[4].real_links[0].objidx = 4;
@@ -92,7 +91,7 @@
hb_objs[6].tail = &(test_gsub_data[66]);
hb_objs[6].num_real_links = 2;
hb_objs[6].num_virtual_links = 0;
- hb_objs[6].real_links = calloc (2, sizeof (hb_link_t));
+ hb_objs[6].real_links = calloc (2, sizeof (hb_subset_serialize_link_t));
hb_objs[6].real_links[0].width = 2;
hb_objs[6].real_links[0].position = 6;
hb_objs[6].real_links[0].objidx = 5;
@@ -105,7 +104,7 @@
hb_objs[7].tail = &(test_gsub_data[58]);
hb_objs[7].num_real_links = 1;
hb_objs[7].num_virtual_links = 0;
- hb_objs[7].real_links = malloc (sizeof (hb_link_t));
+ hb_objs[7].real_links = malloc (sizeof (hb_subset_serialize_link_t));
hb_objs[7].real_links[0].width = 2;
hb_objs[7].real_links[0].position = 6;
hb_objs[7].real_links[0].objidx = 7;
@@ -115,7 +114,7 @@
hb_objs[8].tail = &(test_gsub_data[50]);
hb_objs[8].num_real_links = 2;
hb_objs[8].num_virtual_links = 0;
- hb_objs[8].real_links = calloc (2, sizeof (hb_link_t));
+ hb_objs[8].real_links = calloc (2, sizeof (hb_subset_serialize_link_t));
hb_objs[8].real_links[0].width = 2;
hb_objs[8].real_links[0].position = 2;
hb_objs[8].real_links[0].objidx = 3;
@@ -135,7 +134,7 @@
hb_objs[10].tail = &(test_gsub_data[38]);
hb_objs[10].num_real_links = 1;
hb_objs[10].num_virtual_links = 0;
- hb_objs[10].real_links = malloc (sizeof (hb_link_t));
+ hb_objs[10].real_links = malloc (sizeof (hb_subset_serialize_link_t));
hb_objs[10].real_links[0].width = 2;
hb_objs[10].real_links[0].position = 6;
hb_objs[10].real_links[0].objidx = 10;
@@ -152,7 +151,7 @@
hb_objs[12].tail = &(test_gsub_data[22]);
hb_objs[12].num_real_links = 1;
hb_objs[12].num_virtual_links = 0;
- hb_objs[12].real_links = malloc (sizeof (hb_link_t));
+ hb_objs[12].real_links = malloc (sizeof (hb_subset_serialize_link_t));
hb_objs[12].real_links[0].width = 2;
hb_objs[12].real_links[0].position = 0;
hb_objs[12].real_links[0].objidx = 12;
@@ -162,7 +161,7 @@
hb_objs[13].tail = &(test_gsub_data[18]);
hb_objs[13].num_real_links = 1;
hb_objs[13].num_virtual_links = 0;
- hb_objs[13].real_links = malloc (sizeof (hb_link_t));
+ hb_objs[13].real_links = malloc (sizeof (hb_subset_serialize_link_t));
hb_objs[13].real_links[0].width = 2;
hb_objs[13].real_links[0].position = 6;
hb_objs[13].real_links[0].objidx = 13;
@@ -172,7 +171,7 @@
hb_objs[14].tail = &(test_gsub_data[10]);
hb_objs[14].num_real_links = 3;
hb_objs[14].num_virtual_links = 0;
- hb_objs[14].real_links = calloc (3, sizeof (hb_link_t));
+ hb_objs[14].real_links = calloc (3, sizeof (hb_subset_serialize_link_t));
hb_objs[14].real_links[0].width = 2;
hb_objs[14].real_links[0].position = 8;
hb_objs[14].real_links[0].objidx = 9;
@@ -184,7 +183,7 @@
hb_objs[14].real_links[2].objidx = 14;
hb_objs[14].virtual_links = NULL;
- hb_blob_t *result = hb_subset_repack_or_fail (HB_TAG_NONE, hb_objs, 15);
+ hb_blob_t *result = hb_subset_serialize_or_fail (HB_TAG_NONE, hb_objs, 15);
hb_face_t *face_expected = hb_test_open_font_file ("fonts/repacker_expected.otf");
hb_blob_t *expected_blob = hb_face_reference_table (face_expected, HB_TAG ('G','S','U','B'));
@@ -217,9 +216,3 @@
return hb_test_run();
}
-#else
-int main (int argc HB_UNUSED, char **argv HB_UNUSED)
-{
- return 0;
-}
-#endif
diff --git a/test/fuzzing/hb-repacker-fuzzer.cc b/test/fuzzing/hb-repacker-fuzzer.cc
index 0b06fd2..f7caeee 100644
--- a/test/fuzzing/hb-repacker-fuzzer.cc
+++ b/test/fuzzing/hb-repacker-fuzzer.cc
@@ -5,7 +5,7 @@
#include <string.h>
#include <assert.h>
-#include "hb-subset-repacker.h"
+#include "hb-subset-serialize.h"
typedef struct
{
@@ -42,7 +42,7 @@
return true;
}
-void cleanup (hb_object_t* objects, uint16_t num_objects)
+void cleanup (hb_subset_serialize_object_t* objects, uint16_t num_objects)
{
for (uint32_t i = 0; i < num_objects; i++)
{
@@ -51,7 +51,7 @@
}
}
-void add_links_to_objects (hb_object_t* objects, uint16_t num_objects,
+void add_links_to_objects (hb_subset_serialize_object_t* objects, uint16_t num_objects,
link_t* links, uint16_t num_links)
{
unsigned* link_count = (unsigned*) calloc (num_objects, sizeof (unsigned));
@@ -65,7 +65,7 @@
for (uint32_t i = 0; i < num_objects; i++)
{
objects[i].num_real_links = link_count[i];
- objects[i].real_links = (hb_link_t*) calloc (link_count[i], sizeof (hb_link_t));
+ objects[i].real_links = (hb_subset_serialize_link_t*) calloc (link_count[i], sizeof (hb_subset_serialize_link_t));
objects[i].num_virtual_links = 0;
objects[i].virtual_links = nullptr;
}
@@ -74,7 +74,7 @@
{
uint16_t parent_idx = links[i].parent;
uint16_t child_idx = links[i].child + 1; // All indices are shifted by 1 by the null object.
- hb_link_t* link = &(objects[parent_idx].real_links[link_count[parent_idx] - 1]);
+ hb_subset_serialize_link_t* link = &(objects[parent_idx].real_links[link_count[parent_idx] - 1]);
link->width = links[i].width;
link->position = links[i].position;
@@ -91,7 +91,7 @@
alloc_state = _fuzzing_alloc_state (data, size);
uint16_t num_objects = 0;
- hb_object_t* objects = nullptr;
+ hb_subset_serialize_object_t* objects = nullptr;
uint16_t num_real_links = 0;
link_t* links = nullptr;
@@ -100,7 +100,7 @@
if (!read<hb_tag_t> (&data, &size, &table_tag)) goto end;
if (!read<uint16_t> (&data, &size, &num_objects)) goto end;
- objects = (hb_object_t*) calloc (num_objects, sizeof (hb_object_t));
+ objects = (hb_subset_serialize_object_t*) calloc (num_objects, sizeof (hb_subset_serialize_object_t));
for (uint32_t i = 0; i < num_objects; i++)
{
uint16_t blob_size;
@@ -129,9 +129,9 @@
add_links_to_objects (objects, num_objects,
links, num_real_links);
- hb_blob_destroy (hb_subset_repack_or_fail (table_tag,
- objects,
- num_objects));
+ hb_blob_destroy (hb_subset_serialize_or_fail (table_tag,
+ objects,
+ num_objects));
end:
if (objects)
diff --git a/test/fuzzing/meson.build b/test/fuzzing/meson.build
index d38ca8f..fce6d62 100644
--- a/test/fuzzing/meson.build
+++ b/test/fuzzing/meson.build
@@ -3,12 +3,9 @@
'hb-subset-fuzzer.cc',
'hb-set-fuzzer.cc',
'hb-draw-fuzzer.cc',
+ 'hb-repacker-fuzzer.cc',
]
-if get_option('experimental_api')
- tests += 'hb-repacker-fuzzer.cc'
-endif
-
foreach file_name : tests
test_name = file_name.split('.')[0]
@@ -63,19 +60,19 @@
suite: ['fuzzing', 'slow'],
)
-if get_option('experimental_api')
- test('repacker_fuzzer', find_program('run-repacker-fuzzer-tests.py'),
- args: [
- hb_repacker_fuzzer_exe,
- ],
- # as the tests are ran concurrently let's raise acceptable time here
- # ideally better to break and let meson handles them in parallel
- timeout: 300,
- workdir: meson.current_build_dir() / '..' / '..',
- env: env,
- suite: ['fuzzing', 'slow'],
- )
-endif
+
+test('repacker_fuzzer', find_program('run-repacker-fuzzer-tests.py'),
+ args: [
+ hb_repacker_fuzzer_exe,
+ ],
+ # as the tests are ran concurrently let's raise acceptable time here
+ # ideally better to break and let meson handles them in parallel
+ timeout: 300,
+ workdir: meson.current_build_dir() / '..' / '..',
+ env: env,
+ suite: ['fuzzing', 'slow'],
+)
+
test('draw_fuzzer', find_program('run-draw-fuzzer-tests.py'),
args: [
diff --git a/test/shape/data/in-house/fonts/65d1b9099cfb3191931d8d6112d7a03d979d579f.ttf b/test/shape/data/in-house/fonts/65d1b9099cfb3191931d8d6112d7a03d979d579f.ttf
new file mode 100644
index 0000000..cb04a5f
--- /dev/null
+++ b/test/shape/data/in-house/fonts/65d1b9099cfb3191931d8d6112d7a03d979d579f.ttf
Binary files differ
diff --git a/test/shape/data/in-house/fonts/f4ba5a767ef56a40133844507efb98fee5635e71.ttf b/test/shape/data/in-house/fonts/f4ba5a767ef56a40133844507efb98fee5635e71.ttf
new file mode 100644
index 0000000..646e2d3
--- /dev/null
+++ b/test/shape/data/in-house/fonts/f4ba5a767ef56a40133844507efb98fee5635e71.ttf
Binary files differ
diff --git a/test/shape/data/in-house/tests/indic-syllable.tests b/test/shape/data/in-house/tests/indic-syllable.tests
index cc5c882..84526d9 100644
--- a/test/shape/data/in-house/tests/indic-syllable.tests
+++ b/test/shape/data/in-house/tests/indic-syllable.tests
@@ -12,3 +12,4 @@
../fonts/b3075ca42b27dde7341c2d0ae16703c5b6640df0.ttf;;U+0B2C,U+0B3E,U+0B55;[uni0B2C=0+641|uni0B3E=0+253|uni0B55=0+0]
../fonts/e2b17207c4b7ad78d843e1b0c4d00b09398a1137.ttf;;U+0BAA,U+0BAA,U+0BCD;[pa-tamil=0+778|pa-tamil.001=1+778|pulli-tamil=1@-385,0+0]
../fonts/41071178fbce4956d151f50967af458dbf555f7b.ttf;;U+0926,U+093F,U+0938,U+0902,U+092C,U+0930;[isigndeva=0+266|dadeva=0+541|sadeva=2+709|anusvaradeva=2@0,-1+0|badeva=4+537|radeva=5+436]
+../fonts/65d1b9099cfb3191931d8d6112d7a03d979d579f.ttf;;U+00B2,U+0B95;[uni00B2=0+500|uni0B95=1+500]
diff --git a/test/shape/data/in-house/tests/macos.tests b/test/shape/data/in-house/tests/macos.tests
index 803abbd..247a2ff 100644
--- a/test/shape/data/in-house/tests/macos.tests
+++ b/test/shape/data/in-house/tests/macos.tests
@@ -166,3 +166,5 @@
/System/Library/Fonts/GeezaPro.ttc@fec826d69594ad925665f93252d8b20daf6b0879;--font-funcs ot;U+0631,U+0628;[u0628.beh=1+1415|u0631.reh=0@-202,0+700]
/System/Library/Fonts/GeezaPro.ttc@fec826d69594ad925665f93252d8b20daf6b0879;--font-funcs ot;U+0628,U+064F;[u064f.damma=0@250,-250+250|u0628.beh=0@-250,0+1165]
/System/Library/Fonts/GeezaPro.ttc@fec826d69594ad925665f93252d8b20daf6b0879;--font-funcs ot;U+0644,U+064E,U+0645,U+064E,U+0651,U+0627;[u0627.final.alef=5+647|u064e.fatha=0@-80,160+-80|u064e_u0651.shaddaFatha=0@490,250+490|u0644_u0645.initial.lamMeem=0@-410,0+415]
+/System/Library/Fonts/Supplemental/Courier New.ttf@88d2006ca084f04af2df1954ed714a8c71e8400f;;U+0181,U+0182,U+0183,U+0184,U+0185,U+0186,U+0187,U+0188,U+03FD,U+0674;[uni0181=0+1229|uni0182=1+1229|uni0183=2+1229|uni0184=3+1229|uni0185=4+1229|uni0186=5+1229|uni0187=6+1229|uni0188=7+1229|uni03FD=8+1229|afii57543=9+1229]
+/System/Library/Fonts/Supplemental/Courier New Bold.ttf@608e3ebb6dd1aee521cff08eb07d500a2c59df68;;U+0181,U+0182,U+0183,U+0184,U+0185,U+0186,U+0187,U+0188,U+03FD,U+0674;[uni0181=0+1229|uni0182=1+1229|uni0183=2+1229|uni0184=3+1229|uni0185=4+1229|uni0186=5+1229|uni0187=6+1229|uni0188=7+1229|uni03FD=8+1229|afii57543=9+1229]
diff --git a/test/shape/data/in-house/tests/myanmar-syllable.tests b/test/shape/data/in-house/tests/myanmar-syllable.tests
index 65a4b0b..e2dc726 100644
--- a/test/shape/data/in-house/tests/myanmar-syllable.tests
+++ b/test/shape/data/in-house/tests/myanmar-syllable.tests
@@ -1 +1,3 @@
../fonts/af3086380b743099c54a3b11b96766039ea62fcd.ttf;--no-glyph-names;U+101D,U+FE00,U+1031,U+FE00,U+1031,U+FE00;[6=0+465|6=0+465|5=0+502]
+../fonts/f4ba5a767ef56a40133844507efb98fee5635e71.ttf;;U+1000,U+1032,U+1038,U+1069;[ka=0+1124|_ai=0@-27,20+0|visarga=0+346|tone1_wpk=0+423]
+../fonts/65d1b9099cfb3191931d8d6112d7a03d979d579f.ttf;;U+00B2,U+1000;[uni00B2=0+500|uni1000=1+500]
diff --git a/test/shape/data/in-house/tests/use-syllable.tests b/test/shape/data/in-house/tests/use-syllable.tests
index 3586a46..2d13424 100644
--- a/test/shape/data/in-house/tests/use-syllable.tests
+++ b/test/shape/data/in-house/tests/use-syllable.tests
@@ -24,3 +24,4 @@
../fonts/2a670df15b73a5dc75a5cc491bde5ac93c5077dc.ttf;;U+11124,U+2060,U+11127;[u11124=0+514|uni25CC=1+547|u11127=1+0]
../fonts/a56745bac8449d0ad94918b2bb5930716ba02fe3.ttf;;U+1142C,U+11442,U+200C,U+1142E;[u1142C=0+547|u11442=0+0|u1142E=3+547]
../fonts/d0430ea499348c420946f6abc2efc84fdf8f00e3.ttf;;U+1142C,U+11442,U+1140E,U+1145E;[u1140E=0+736|u1142C_u11442=0+0|u1145E=0+0]
+../fonts/65d1b9099cfb3191931d8d6112d7a03d979d579f.ttf;;U+00B2,U+11315;[uni00B2=0+500|u11315=1+500]
diff --git a/test/shape/hb_test_tools.py b/test/shape/hb_test_tools.py
index 682b919..4b46146 100644
--- a/test/shape/hb_test_tools.py
+++ b/test/shape/hb_test_tools.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-import sys, os, re, difflib, unicodedata, errno, cgi, itertools
+import sys, os, re, difflib, unicodedata, errno, html, itertools
from itertools import *
diff_symbols = "-+=*&^%$#@!~/"
@@ -45,7 +45,7 @@
def end_color ():
return '</span>'
@staticmethod
- def escape (s): return cgi.escape (s)
+ def escape (s): return html.escape (s)
@staticmethod
def newline (): return '<br/>\n'
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.default.38,39,AE,2049,38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.default.0038,0039,00AE,2049,0038,20E3,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.default.38,39,AE,2049,38,20E3.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.default.0038,0039,00AE,2049,0038,20E3,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.default.38,AE,2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.default.0038,00AE,2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.default.38,AE,2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.default.0038,00AE,2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.default.38,2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.default.0038,2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.default.38,2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.default.0038,2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.default.38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.default.0038,20E3,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.default.38,20E3.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.default.0038,20E3,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.default.39.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.default.0039,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.default.39.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.default.0039,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.default.AE.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.default.00AE,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.default.AE.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.default.00AE,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.default.2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.default.2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.default.2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.default.2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints-retain-gids.38,39,AE,2049,38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints-retain-gids.0038,0039,00AE,2049,0038,20E3,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints-retain-gids.38,39,AE,2049,38,20E3.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints-retain-gids.0038,0039,00AE,2049,0038,20E3,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints-retain-gids.38,AE,2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints-retain-gids.0038,00AE,2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints-retain-gids.38,AE,2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints-retain-gids.0038,00AE,2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints-retain-gids.38,2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints-retain-gids.0038,2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints-retain-gids.38,2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints-retain-gids.0038,2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints-retain-gids.38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints-retain-gids.0038,20E3,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints-retain-gids.38,20E3.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints-retain-gids.0038,20E3,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints-retain-gids.39.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints-retain-gids.0039,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints-retain-gids.39.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints-retain-gids.0039,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints-retain-gids.AE.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints-retain-gids.00AE,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints-retain-gids.AE.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints-retain-gids.00AE,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints-retain-gids.2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints-retain-gids.2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints-retain-gids.2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints-retain-gids.2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints-retain-gids.38,39,AE,2049,38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints.0038,0039,00AE,2049,0038,20E3,FE0F.ttf
similarity index 100%
copy from test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints-retain-gids.38,39,AE,2049,38,20E3.ttf
copy to test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints.0038,0039,00AE,2049,0038,20E3,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints.38,AE,2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints.0038,00AE,2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints.38,AE,2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints.0038,00AE,2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints.38,2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints.0038,2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints.38,2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints.0038,2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints.38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints.0038,20E3,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints.38,20E3.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints.0038,20E3,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints.39.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints.0039,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints.39.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints.0039,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints.AE.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints.00AE,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints.AE.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints.00AE,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints.2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints.2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints.2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints.2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints.38,39,AE,2049,38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints.38,39,AE,2049,38,20E3.ttf
deleted file mode 100644
index 77e275b..0000000
--- a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.drop-hints.38,39,AE,2049,38,20E3.ttf
+++ /dev/null
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.default.38,39,AE,2049,38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.default.0038,0039,00AE,2049,0038,20E3,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.default.38,39,AE,2049,38,20E3.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.default.0038,0039,00AE,2049,0038,20E3,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.default.38,AE,2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.default.0038,00AE,2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.default.38,AE,2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.default.0038,00AE,2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.default.38,2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.default.0038,2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.default.38,2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.default.0038,2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.default.38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.default.0038,20E3,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.default.38,20E3.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.default.0038,20E3,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.default.39.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.default.0039,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.default.39.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.default.0039,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.default.AE.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.default.00AE,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.default.AE.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.default.00AE,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.default.2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.default.2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.default.2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.default.2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints-retain-gids.38,39,AE,2049,38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints-retain-gids.0038,0039,00AE,2049,0038,20E3,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints-retain-gids.38,39,AE,2049,38,20E3.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints-retain-gids.0038,0039,00AE,2049,0038,20E3,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints-retain-gids.38,AE,2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints-retain-gids.0038,00AE,2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints-retain-gids.38,AE,2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints-retain-gids.0038,00AE,2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints-retain-gids.38,2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints-retain-gids.0038,2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints-retain-gids.38,2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints-retain-gids.0038,2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints-retain-gids.38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints-retain-gids.0038,20E3,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints-retain-gids.38,20E3.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints-retain-gids.0038,20E3,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints-retain-gids.39.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints-retain-gids.0039,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints-retain-gids.39.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints-retain-gids.0039,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints-retain-gids.AE.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints-retain-gids.00AE,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints-retain-gids.AE.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints-retain-gids.00AE,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints-retain-gids.2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints-retain-gids.2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints-retain-gids.2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints-retain-gids.2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints-retain-gids.38,39,AE,2049,38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints.0038,0039,00AE,2049,0038,20E3,FE0F.ttf
similarity index 100%
copy from test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints-retain-gids.38,39,AE,2049,38,20E3.ttf
copy to test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints.0038,0039,00AE,2049,0038,20E3,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints.38,AE,2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints.0038,00AE,2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints.38,AE,2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints.0038,00AE,2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints.38,2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints.0038,2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints.38,2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints.0038,2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints.38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints.0038,20E3,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints.38,20E3.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints.0038,20E3,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints.39.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints.0039,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints.39.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints.0039,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints.AE.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints.00AE,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints.AE.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints.00AE,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints.2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints.2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints.2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints.2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints.38,39,AE,2049,38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints.38,39,AE,2049,38,20E3.ttf
deleted file mode 100644
index 9c7b087..0000000
--- a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.drop-hints.38,39,AE,2049,38,20E3.ttf
+++ /dev/null
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.default.38,39,AE,2049,38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.retain-gids.0038,0039,00AE,2049,0038,20E3,FE0F.ttf
similarity index 100%
copy from test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.default.38,39,AE,2049,38,20E3.ttf
copy to test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.retain-gids.0038,0039,00AE,2049,0038,20E3,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.retain-gids.38,AE,2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.retain-gids.0038,00AE,2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.retain-gids.38,AE,2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.retain-gids.0038,00AE,2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.retain-gids.38,2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.retain-gids.0038,2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.retain-gids.38,2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.retain-gids.0038,2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.retain-gids.38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.retain-gids.0038,20E3,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.retain-gids.38,20E3.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.retain-gids.0038,20E3,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.retain-gids.39.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.retain-gids.0039,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.retain-gids.39.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.retain-gids.0039,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.retain-gids.AE.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.retain-gids.00AE,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.retain-gids.AE.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.retain-gids.00AE,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.retain-gids.2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.retain-gids.2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.retain-gids.2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.retain-gids.2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.retain-gids.38,39,AE,2049,38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.retain-gids.38,39,AE,2049,38,20E3.ttf
deleted file mode 100644
index 3e65d5c..0000000
--- a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.gap.retain-gids.38,39,AE,2049,38,20E3.ttf
+++ /dev/null
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.default.38,39,AE,2049,38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.default.0038,0039,00AE,2049,0038,20E3,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.default.38,39,AE,2049,38,20E3.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.default.0038,0039,00AE,2049,0038,20E3,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.default.38,AE,2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.default.0038,00AE,2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.default.38,AE,2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.default.0038,00AE,2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.default.38,2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.default.0038,2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.default.38,2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.default.0038,2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.default.38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.default.0038,20E3,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.default.38,20E3.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.default.0038,20E3,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.default.39.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.default.0039,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.default.39.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.default.0039,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.default.AE.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.default.00AE,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.default.AE.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.default.00AE,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.default.2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.default.2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.default.2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.default.2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints-retain-gids.38,39,AE,2049,38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints-retain-gids.0038,0039,00AE,2049,0038,20E3,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints-retain-gids.38,39,AE,2049,38,20E3.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints-retain-gids.0038,0039,00AE,2049,0038,20E3,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints-retain-gids.38,AE,2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints-retain-gids.0038,00AE,2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints-retain-gids.38,AE,2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints-retain-gids.0038,00AE,2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints-retain-gids.38,2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints-retain-gids.0038,2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints-retain-gids.38,2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints-retain-gids.0038,2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints-retain-gids.38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints-retain-gids.0038,20E3,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints-retain-gids.38,20E3.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints-retain-gids.0038,20E3,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints-retain-gids.39.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints-retain-gids.0039,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints-retain-gids.39.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints-retain-gids.0039,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints-retain-gids.AE.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints-retain-gids.00AE,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints-retain-gids.AE.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints-retain-gids.00AE,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints-retain-gids.2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints-retain-gids.2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints-retain-gids.2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints-retain-gids.2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints-retain-gids.38,39,AE,2049,38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints.0038,0039,00AE,2049,0038,20E3,FE0F.ttf
similarity index 100%
copy from test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints-retain-gids.38,39,AE,2049,38,20E3.ttf
copy to test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints.0038,0039,00AE,2049,0038,20E3,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints.38,AE,2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints.0038,00AE,2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints.38,AE,2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints.0038,00AE,2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints.38,2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints.0038,2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints.38,2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints.0038,2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints.38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints.0038,20E3,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints.38,20E3.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints.0038,20E3,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints.39.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints.0039,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints.39.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints.0039,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints.AE.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints.00AE,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints.AE.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints.00AE,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints.2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints.2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints.2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints.2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints.38,39,AE,2049,38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints.38,39,AE,2049,38,20E3.ttf
deleted file mode 100644
index 46ffded..0000000
--- a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.drop-hints.38,39,AE,2049,38,20E3.ttf
+++ /dev/null
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.default.38,39,AE,2049,38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.retain-gids.0038,0039,00AE,2049,0038,20E3,FE0F.ttf
similarity index 100%
copy from test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.default.38,39,AE,2049,38,20E3.ttf
copy to test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.retain-gids.0038,0039,00AE,2049,0038,20E3,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.retain-gids.38,AE,2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.retain-gids.0038,00AE,2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.retain-gids.38,AE,2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.retain-gids.0038,00AE,2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.retain-gids.38,2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.retain-gids.0038,2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.retain-gids.38,2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.retain-gids.0038,2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.retain-gids.38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.retain-gids.0038,20E3,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.retain-gids.38,20E3.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.retain-gids.0038,20E3,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.retain-gids.39.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.retain-gids.0039,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.retain-gids.39.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.retain-gids.0039,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.retain-gids.AE.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.retain-gids.00AE,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.retain-gids.AE.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.retain-gids.00AE,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.retain-gids.2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.retain-gids.2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.retain-gids.2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.retain-gids.2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.retain-gids.38,39,AE,2049,38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.retain-gids.38,39,AE,2049,38,20E3.ttf
deleted file mode 100644
index 2151697..0000000
--- a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.index_format3.retain-gids.38,39,AE,2049,38,20E3.ttf
+++ /dev/null
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.default.38,39,AE,2049,38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.default.0038,0039,00AE,2049,0038,20E3,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.default.38,39,AE,2049,38,20E3.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.default.0038,0039,00AE,2049,0038,20E3,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.default.38,AE,2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.default.0038,00AE,2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.default.38,AE,2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.default.0038,00AE,2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.default.38,2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.default.0038,2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.default.38,2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.default.0038,2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.default.38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.default.0038,20E3,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.default.38,20E3.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.default.0038,20E3,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.default.39.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.default.0039,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.default.39.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.default.0039,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.default.AE.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.default.00AE,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.default.AE.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.default.00AE,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.default.2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.default.2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.default.2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.default.2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints-retain-gids.38,39,AE,2049,38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints-retain-gids.0038,0039,00AE,2049,0038,20E3,FE0F.ttf
similarity index 100%
copy from test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints-retain-gids.38,39,AE,2049,38,20E3.ttf
copy to test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints-retain-gids.0038,0039,00AE,2049,0038,20E3,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints-retain-gids.38,AE,2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints-retain-gids.0038,00AE,2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints-retain-gids.38,AE,2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints-retain-gids.0038,00AE,2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints-retain-gids.38,2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints-retain-gids.0038,2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints-retain-gids.38,2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints-retain-gids.0038,2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints-retain-gids.38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints-retain-gids.0038,20E3,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints-retain-gids.38,20E3.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints-retain-gids.0038,20E3,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints-retain-gids.39.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints-retain-gids.0039,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints-retain-gids.39.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints-retain-gids.0039,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints-retain-gids.AE.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints-retain-gids.00AE,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints-retain-gids.AE.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints-retain-gids.00AE,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints-retain-gids.2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints-retain-gids.2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints-retain-gids.2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints-retain-gids.2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints-retain-gids.38,39,AE,2049,38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints.0038,0039,00AE,2049,0038,20E3,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints-retain-gids.38,39,AE,2049,38,20E3.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints.0038,0039,00AE,2049,0038,20E3,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints.38,AE,2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints.0038,00AE,2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints.38,AE,2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints.0038,00AE,2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints.38,2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints.0038,2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints.38,2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints.0038,2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints.38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints.0038,20E3,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints.38,20E3.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints.0038,20E3,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints.39.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints.0039,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints.39.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints.0039,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints.AE.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints.00AE,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints.AE.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints.00AE,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints.2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints.2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints.2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints.2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints.38,39,AE,2049,38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints.38,39,AE,2049,38,20E3.ttf
deleted file mode 100644
index 2864095..0000000
--- a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.drop-hints.38,39,AE,2049,38,20E3.ttf
+++ /dev/null
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.default.38,39,AE,2049,38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.retain-gids.0038,0039,00AE,2049,0038,20E3,FE0F.ttf
similarity index 100%
copy from test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.default.38,39,AE,2049,38,20E3.ttf
copy to test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.retain-gids.0038,0039,00AE,2049,0038,20E3,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.retain-gids.38,AE,2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.retain-gids.0038,00AE,2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.retain-gids.38,AE,2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.retain-gids.0038,00AE,2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.retain-gids.38,2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.retain-gids.0038,2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.retain-gids.38,2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.retain-gids.0038,2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.retain-gids.38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.retain-gids.0038,20E3,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.retain-gids.38,20E3.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.retain-gids.0038,20E3,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.retain-gids.39.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.retain-gids.0039,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.retain-gids.39.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.retain-gids.0039,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.retain-gids.AE.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.retain-gids.00AE,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.retain-gids.AE.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.retain-gids.00AE,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.retain-gids.2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.retain-gids.2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.retain-gids.2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.retain-gids.2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.retain-gids.38,39,AE,2049,38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.retain-gids.38,39,AE,2049,38,20E3.ttf
deleted file mode 100644
index 661ce52..0000000
--- a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.multiple_size_tables.retain-gids.38,39,AE,2049,38,20E3.ttf
+++ /dev/null
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.default.38,39,AE,2049,38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.retain-gids.0038,0039,00AE,2049,0038,20E3,FE0F.ttf
similarity index 100%
copy from test/subset/data/expected/cbdt/NotoColorEmoji.subset.default.38,39,AE,2049,38,20E3.ttf
copy to test/subset/data/expected/cbdt/NotoColorEmoji.subset.retain-gids.0038,0039,00AE,2049,0038,20E3,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.retain-gids.38,AE,2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.retain-gids.0038,00AE,2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.retain-gids.38,AE,2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.retain-gids.0038,00AE,2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.retain-gids.38,2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.retain-gids.0038,2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.retain-gids.38,2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.retain-gids.0038,2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.retain-gids.38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.retain-gids.0038,20E3,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.retain-gids.38,20E3.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.retain-gids.0038,20E3,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.retain-gids.39.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.retain-gids.0039,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.retain-gids.39.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.retain-gids.0039,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.retain-gids.AE.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.retain-gids.00AE,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.retain-gids.AE.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.retain-gids.00AE,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.retain-gids.2049.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.retain-gids.2049,FE0F.ttf
similarity index 100%
rename from test/subset/data/expected/cbdt/NotoColorEmoji.subset.retain-gids.2049.ttf
rename to test/subset/data/expected/cbdt/NotoColorEmoji.subset.retain-gids.2049,FE0F.ttf
Binary files differ
diff --git a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.retain-gids.38,39,AE,2049,38,20E3.ttf b/test/subset/data/expected/cbdt/NotoColorEmoji.subset.retain-gids.38,39,AE,2049,38,20E3.ttf
deleted file mode 100644
index f9521e1..0000000
--- a/test/subset/data/expected/cbdt/NotoColorEmoji.subset.retain-gids.38,39,AE,2049,38,20E3.ttf
+++ /dev/null
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E00,4E02,4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E00,4E02,4E03,E0100.otf
new file mode 100644
index 0000000..6f417f2
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E00,4E02,4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E00,4E02,4E03.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E00,4E02,4E03.otf
index 6f417f2..ea37600 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E00,4E02,4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E00,4E02,4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E00,4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E00,4E03,E0100.otf
new file mode 100644
index 0000000..4f3902b
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E00,4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E00,4E03.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E00,4E03.otf
index 4f3902b..546e84c 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E00,4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E00,4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E00,4E05,4E07,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E00,4E05,4E07,E0100.otf
new file mode 100644
index 0000000..22d8b57
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E00,4E05,4E07,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E00,4E05,4E07.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E00,4E05,4E07.otf
index 22d8b57..343bfb5 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E00,4E05,4E07.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E00,4E05,4E07.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E02,4E03,4E08,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E02,4E03,4E08,E0100.otf
new file mode 100644
index 0000000..e80e290
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E02,4E03,4E08,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E02,4E03,4E08.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E02,4E03,4E08.otf
index e80e290..17e0c4d 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E02,4E03,4E08.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E02,4E03,4E08.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E02,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E02,E0100.otf
new file mode 100644
index 0000000..21efe7a
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E02,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E03,E0100.otf
new file mode 100644
index 0000000..6b68f70
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E03.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E03.otf
index 6b68f70..1b2836f 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E05,4E07,4E08,4E09,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E05,4E07,4E08,4E09,E0100.otf
new file mode 100644
index 0000000..2877b3c
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E05,4E07,4E08,4E09,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E05,4E07,4E08,4E09.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E05,4E07,4E08,4E09.otf
index 2877b3c..bf5999f 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E05,4E07,4E08,4E09.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E05,4E07,4E08,4E09.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E08,4E09,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E08,4E09,E0100.otf
new file mode 100644
index 0000000..69bcaaf
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E08,4E09,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E08,4E09.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E08,4E09.otf
index 69bcaaf..ebb87e5 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E08,4E09.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E08,4E09.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E08,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E08,E0100.otf
new file mode 100644
index 0000000..a1c08be
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E08,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E08.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E08.otf
index a1c08be..ee603c9 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E08.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E08.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E00,4E02,4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E00,4E02,4E03,E0100.otf
new file mode 100644
index 0000000..0412187
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E00,4E02,4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E00,4E02,4E03.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E00,4E02,4E03.otf
index 0412187..a47bfd0 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E00,4E02,4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E00,4E02,4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E00,4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E00,4E03,E0100.otf
new file mode 100644
index 0000000..03ad26d
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E00,4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E00,4E03.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E00,4E03.otf
index 03ad26d..f05d066 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E00,4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E00,4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E00,4E05,4E07,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E00,4E05,4E07,E0100.otf
new file mode 100644
index 0000000..1b995fe
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E00,4E05,4E07,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E00,4E05,4E07.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E00,4E05,4E07.otf
index 1b995fe..760884c 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E00,4E05,4E07.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E00,4E05,4E07.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E02,4E03,4E08,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E02,4E03,4E08,E0100.otf
new file mode 100644
index 0000000..543fec5
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E02,4E03,4E08,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E02,4E03,4E08.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E02,4E03,4E08.otf
index 543fec5..679dad2 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E02,4E03,4E08.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E02,4E03,4E08.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E02,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E02,E0100.otf
new file mode 100644
index 0000000..ff9f70c
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E02,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E03,E0100.otf
new file mode 100644
index 0000000..877c191
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E03.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E03.otf
index 877c191..b5ee80f 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E05,4E07,4E08,4E09,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E05,4E07,4E08,4E09,E0100.otf
new file mode 100644
index 0000000..8a91fe0
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E05,4E07,4E08,4E09,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E05,4E07,4E08,4E09.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E05,4E07,4E08,4E09.otf
index 8a91fe0..f89d1d4 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E05,4E07,4E08,4E09.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E05,4E07,4E08,4E09.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E08,4E09,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E08,4E09,E0100.otf
new file mode 100644
index 0000000..c125b70
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E08,4E09,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E08,4E09.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E08,4E09.otf
index c125b70..8b575b7 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E08,4E09.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E08,4E09.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E08,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E08,E0100.otf
new file mode 100644
index 0000000..0eb2f9e
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E08,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E08.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E08.otf
index 0eb2f9e..ec21a0a 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E08.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E08.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E00,4E02,4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E00,4E02,4E03,E0100.otf
new file mode 100644
index 0000000..fbe79df
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E00,4E02,4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E00,4E02,4E03.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E00,4E02,4E03.otf
index fbe79df..7800d1a 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E00,4E02,4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E00,4E02,4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E00,4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E00,4E03,E0100.otf
new file mode 100644
index 0000000..2e0edaf
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E00,4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E00,4E03.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E00,4E03.otf
index 2e0edaf..ef28ff2 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E00,4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E00,4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E00,4E05,4E07,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E00,4E05,4E07,E0100.otf
new file mode 100644
index 0000000..ec0fad3
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E00,4E05,4E07,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E00,4E05,4E07.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E00,4E05,4E07.otf
index ec0fad3..a53b19e 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E00,4E05,4E07.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E00,4E05,4E07.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E02,4E03,4E08,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E02,4E03,4E08,E0100.otf
new file mode 100644
index 0000000..3767814
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E02,4E03,4E08,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E02,4E03,4E08.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E02,4E03,4E08.otf
index 3767814..0842d50 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E02,4E03,4E08.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E02,4E03,4E08.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E02,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E02,E0100.otf
new file mode 100644
index 0000000..87059e2
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E02,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E03,E0100.otf
new file mode 100644
index 0000000..a99adda
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E03.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E03.otf
index a99adda..4bf741c 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E05,4E07,4E08,4E09,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E05,4E07,4E08,4E09,E0100.otf
new file mode 100644
index 0000000..d4b3908
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E05,4E07,4E08,4E09,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E05,4E07,4E08,4E09.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E05,4E07,4E08,4E09.otf
index d4b3908..2b973b8 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E05,4E07,4E08,4E09.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E05,4E07,4E08,4E09.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E08,4E09,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E08,4E09,E0100.otf
new file mode 100644
index 0000000..a1f9def
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E08,4E09,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E08,4E09.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E08,4E09.otf
index a1f9def..ad15a18 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E08,4E09.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E08,4E09.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E08,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E08,E0100.otf
new file mode 100644
index 0000000..ca9512a
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E08,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E08.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E08.otf
index ca9512a..9f42018 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E08.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E08.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E00,4E02,4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E00,4E02,4E03,E0100.otf
new file mode 100644
index 0000000..07f7b25
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E00,4E02,4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E00,4E02,4E03.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E00,4E02,4E03.otf
index 07f7b25..671c4ba 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E00,4E02,4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E00,4E02,4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E00,4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E00,4E03,E0100.otf
new file mode 100644
index 0000000..c491db4
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E00,4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E00,4E03.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E00,4E03.otf
index c491db4..703d60c 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E00,4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E00,4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E00,4E05,4E07,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E00,4E05,4E07,E0100.otf
new file mode 100644
index 0000000..3f35b19
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E00,4E05,4E07,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E00,4E05,4E07.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E00,4E05,4E07.otf
index 3f35b19..6d7ded1 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E00,4E05,4E07.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E00,4E05,4E07.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E02,4E03,4E08,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E02,4E03,4E08,E0100.otf
new file mode 100644
index 0000000..a26347d
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E02,4E03,4E08,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E02,4E03,4E08.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E02,4E03,4E08.otf
index a26347d..5e6d586 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E02,4E03,4E08.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E02,4E03,4E08.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E02,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E02,E0100.otf
new file mode 100644
index 0000000..d0d6613e
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E02,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E03,E0100.otf
new file mode 100644
index 0000000..fbf8937
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E03.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E03.otf
index fbf8937..3e50a71 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E05,4E07,4E08,4E09,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E05,4E07,4E08,4E09,E0100.otf
new file mode 100644
index 0000000..fc7f26b
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E05,4E07,4E08,4E09,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E05,4E07,4E08,4E09.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E05,4E07,4E08,4E09.otf
index fc7f26b..cdb0172 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E05,4E07,4E08,4E09.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E05,4E07,4E08,4E09.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E08,4E09,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E08,4E09,E0100.otf
new file mode 100644
index 0000000..8b41561
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E08,4E09,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E08,4E09.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E08,4E09.otf
index 8b41561..1be0ab7 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E08,4E09.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E08,4E09.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E08,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E08,E0100.otf
new file mode 100644
index 0000000..391218f
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E08,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E08.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E08.otf
index 391218f..0c04401 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E08.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E08.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E00,4E02,4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E00,4E02,4E03,E0100.otf
new file mode 100644
index 0000000..4a21201
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E00,4E02,4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E00,4E02,4E03.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E00,4E02,4E03.otf
index 4a21201..5e513cc 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E00,4E02,4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E00,4E02,4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E00,4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E00,4E03,E0100.otf
new file mode 100644
index 0000000..bec789b
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E00,4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E00,4E03.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E00,4E03.otf
index bec789b..bbab325 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E00,4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E00,4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E00,4E05,4E07,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E00,4E05,4E07,E0100.otf
new file mode 100644
index 0000000..cacbb74
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E00,4E05,4E07,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E00,4E05,4E07.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E00,4E05,4E07.otf
index cacbb74..0f521cf 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E00,4E05,4E07.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E00,4E05,4E07.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E02,4E03,4E08,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E02,4E03,4E08,E0100.otf
new file mode 100644
index 0000000..09a8c3f
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E02,4E03,4E08,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E02,4E03,4E08.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E02,4E03,4E08.otf
index 09a8c3f..ed8243a 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E02,4E03,4E08.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E02,4E03,4E08.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E02,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E02,E0100.otf
new file mode 100644
index 0000000..eaca75c
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E02,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E03,E0100.otf
new file mode 100644
index 0000000..f0a95eb
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E03.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E03.otf
index f0a95eb..1c9bcf7 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E05,4E07,4E08,4E09,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E05,4E07,4E08,4E09,E0100.otf
new file mode 100644
index 0000000..2701ca1
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E05,4E07,4E08,4E09,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E05,4E07,4E08,4E09.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E05,4E07,4E08,4E09.otf
index 2701ca1..f9d7e1a 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E05,4E07,4E08,4E09.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E05,4E07,4E08,4E09.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E08,4E09,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E08,4E09,E0100.otf
new file mode 100644
index 0000000..18a48b6
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E08,4E09,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E08,4E09.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E08,4E09.otf
index 18a48b6..e56b81b 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E08,4E09.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E08,4E09.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E08,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E08,E0100.otf
new file mode 100644
index 0000000..fcd8c4f
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E08,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E08.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E08.otf
index fcd8c4f..5956517 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E08.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E08.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E00,4E02,4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E00,4E02,4E03,E0100.otf
new file mode 100644
index 0000000..8bb85a6
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E00,4E02,4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E00,4E02,4E03.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E00,4E02,4E03.otf
index 8bb85a6..7c9667a 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E00,4E02,4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E00,4E02,4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E00,4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E00,4E03,E0100.otf
new file mode 100644
index 0000000..137f165
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E00,4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E00,4E03.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E00,4E03.otf
index 137f165..3edfd17 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E00,4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E00,4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E00,4E05,4E07,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E00,4E05,4E07,E0100.otf
new file mode 100644
index 0000000..1b2dfdf
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E00,4E05,4E07,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E00,4E05,4E07.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E00,4E05,4E07.otf
index 1b2dfdf..318a696 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E00,4E05,4E07.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E00,4E05,4E07.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E02,4E03,4E08,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E02,4E03,4E08,E0100.otf
new file mode 100644
index 0000000..4dee169
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E02,4E03,4E08,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E02,4E03,4E08.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E02,4E03,4E08.otf
index 4dee169..6d9999d 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E02,4E03,4E08.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E02,4E03,4E08.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E02,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E02,E0100.otf
new file mode 100644
index 0000000..775a67c
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E02,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E03,E0100.otf
new file mode 100644
index 0000000..fcf8725
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E03.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E03.otf
index fcf8725..b4df958 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E05,4E07,4E08,4E09,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E05,4E07,4E08,4E09,E0100.otf
new file mode 100644
index 0000000..0248360
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E05,4E07,4E08,4E09,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E05,4E07,4E08,4E09.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E05,4E07,4E08,4E09.otf
index 0248360..30c9a1d 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E05,4E07,4E08,4E09.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E05,4E07,4E08,4E09.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E08,4E09,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E08,4E09,E0100.otf
new file mode 100644
index 0000000..649feae
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E08,4E09,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E08,4E09.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E08,4E09.otf
index 649feae..69bec24 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E08,4E09.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E08,4E09.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E08,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E08,E0100.otf
new file mode 100644
index 0000000..8010c0f
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E08,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E08.otf b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E08.otf
index 8010c0f..8552571 100644
--- a/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E08.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E08.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E00,4E02,4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E00,4E02,4E03,E0100.otf
new file mode 100644
index 0000000..a172018
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E00,4E02,4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E00,4E02,4E03.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E00,4E02,4E03.otf
index a172018..ccdc0cf 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E00,4E02,4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E00,4E02,4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E00,4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E00,4E03,E0100.otf
new file mode 100644
index 0000000..59ba9b2
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E00,4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E00,4E03.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E00,4E03.otf
index 59ba9b2..0faf9d7 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E00,4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E00,4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E00,4E05,4E07,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E00,4E05,4E07,E0100.otf
new file mode 100644
index 0000000..ed110b9
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E00,4E05,4E07,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E00,4E05,4E07.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E00,4E05,4E07.otf
index ed110b9..9f54cab 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E00,4E05,4E07.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E00,4E05,4E07.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E02,4E03,4E08,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E02,4E03,4E08,E0100.otf
new file mode 100644
index 0000000..996713e
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E02,4E03,4E08,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E02,4E03,4E08.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E02,4E03,4E08.otf
index 996713e..75e538c 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E02,4E03,4E08.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E02,4E03,4E08.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E02,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E02,E0100.otf
new file mode 100644
index 0000000..dda3615
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E02,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E03,E0100.otf
new file mode 100644
index 0000000..8f0e542
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E03.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E03.otf
index 8f0e542..f5e3226 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E05,4E07,4E08,4E09,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E05,4E07,4E08,4E09,E0100.otf
new file mode 100644
index 0000000..9247f61
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E05,4E07,4E08,4E09,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E05,4E07,4E08,4E09.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E05,4E07,4E08,4E09.otf
index 9247f61..5de4bc5 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E05,4E07,4E08,4E09.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E05,4E07,4E08,4E09.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E08,4E09,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E08,4E09,E0100.otf
new file mode 100644
index 0000000..91bdcdd
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E08,4E09,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E08,4E09.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E08,4E09.otf
index 91bdcdd..b9fd93f 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E08,4E09.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E08,4E09.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E08,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E08,E0100.otf
new file mode 100644
index 0000000..6d4ea8f
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E08,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E08.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E08.otf
index 6d4ea8f..c788261 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E08.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E08.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E00,4E02,4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E00,4E02,4E03,E0100.otf
new file mode 100644
index 0000000..a0a8321
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E00,4E02,4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E00,4E02,4E03.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E00,4E02,4E03.otf
index a0a8321..e884772 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E00,4E02,4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E00,4E02,4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E00,4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E00,4E03,E0100.otf
new file mode 100644
index 0000000..8897d74
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E00,4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E00,4E03.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E00,4E03.otf
index 8897d74..2d5269a 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E00,4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E00,4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E00,4E05,4E07,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E00,4E05,4E07,E0100.otf
new file mode 100644
index 0000000..717f255
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E00,4E05,4E07,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E00,4E05,4E07.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E00,4E05,4E07.otf
index 717f255..d2b75bc 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E00,4E05,4E07.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E00,4E05,4E07.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E02,4E03,4E08,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E02,4E03,4E08,E0100.otf
new file mode 100644
index 0000000..c90f248
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E02,4E03,4E08,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E02,4E03,4E08.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E02,4E03,4E08.otf
index c90f248..d4f848e 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E02,4E03,4E08.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E02,4E03,4E08.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E02,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E02,E0100.otf
new file mode 100644
index 0000000..f364d0e
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E02,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E03,E0100.otf
new file mode 100644
index 0000000..d2e4915
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E03.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E03.otf
index d2e4915..5c8fdcb 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E05,4E07,4E08,4E09,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E05,4E07,4E08,4E09,E0100.otf
new file mode 100644
index 0000000..eaa2943
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E05,4E07,4E08,4E09,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E05,4E07,4E08,4E09.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E05,4E07,4E08,4E09.otf
index eaa2943..62de2b1 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E05,4E07,4E08,4E09.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E05,4E07,4E08,4E09.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E08,4E09,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E08,4E09,E0100.otf
new file mode 100644
index 0000000..7bb0772
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E08,4E09,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E08,4E09.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E08,4E09.otf
index 7bb0772..c064f2e 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E08,4E09.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E08,4E09.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E08,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E08,E0100.otf
new file mode 100644
index 0000000..c190700
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E08,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E08.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E08.otf
index c190700..4ce1730 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E08.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E08.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E00,4E02,4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E00,4E02,4E03,E0100.otf
new file mode 100644
index 0000000..d9d7645
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E00,4E02,4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E00,4E02,4E03.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E00,4E02,4E03.otf
index d9d7645..9abbcc1 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E00,4E02,4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E00,4E02,4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E00,4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E00,4E03,E0100.otf
new file mode 100644
index 0000000..4619503
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E00,4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E00,4E03.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E00,4E03.otf
index 4619503..d0d4774 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E00,4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E00,4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E00,4E05,4E07,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E00,4E05,4E07,E0100.otf
new file mode 100644
index 0000000..eaab0aa
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E00,4E05,4E07,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E00,4E05,4E07.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E00,4E05,4E07.otf
index eaab0aa..8d8430e 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E00,4E05,4E07.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E00,4E05,4E07.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E02,4E03,4E08,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E02,4E03,4E08,E0100.otf
new file mode 100644
index 0000000..1e00ded
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E02,4E03,4E08,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E02,4E03,4E08.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E02,4E03,4E08.otf
index 1e00ded..46db924 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E02,4E03,4E08.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E02,4E03,4E08.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E02,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E02,E0100.otf
new file mode 100644
index 0000000..986c80e
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E02,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E03,E0100.otf
new file mode 100644
index 0000000..dd00dfb
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E03.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E03.otf
index dd00dfb..14c87cb 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E05,4E07,4E08,4E09,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E05,4E07,4E08,4E09,E0100.otf
new file mode 100644
index 0000000..1eac8ee
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E05,4E07,4E08,4E09,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E05,4E07,4E08,4E09.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E05,4E07,4E08,4E09.otf
index 1eac8ee..65d4126 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E05,4E07,4E08,4E09.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E05,4E07,4E08,4E09.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E08,4E09,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E08,4E09,E0100.otf
new file mode 100644
index 0000000..e4ec662
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E08,4E09,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E08,4E09.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E08,4E09.otf
index e4ec662..5422b93 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E08,4E09.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E08,4E09.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E08,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E08,E0100.otf
new file mode 100644
index 0000000..a1ac1e9
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E08,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E08.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E08.otf
index a1ac1e9..5f92be8 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E08.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E08.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E00,4E02,4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E00,4E02,4E03,E0100.otf
new file mode 100644
index 0000000..21b6f7d
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E00,4E02,4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E00,4E02,4E03.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E00,4E02,4E03.otf
index 21b6f7d..7a59c5f 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E00,4E02,4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E00,4E02,4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E00,4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E00,4E03,E0100.otf
new file mode 100644
index 0000000..ed3e4eb
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E00,4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E00,4E03.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E00,4E03.otf
index ed3e4eb..ff5f029 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E00,4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E00,4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E00,4E05,4E07,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E00,4E05,4E07,E0100.otf
new file mode 100644
index 0000000..9d591eb
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E00,4E05,4E07,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E00,4E05,4E07.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E00,4E05,4E07.otf
index 9d591eb..0146a00 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E00,4E05,4E07.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E00,4E05,4E07.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E02,4E03,4E08,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E02,4E03,4E08,E0100.otf
new file mode 100644
index 0000000..19fdddb
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E02,4E03,4E08,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E02,4E03,4E08.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E02,4E03,4E08.otf
index 19fdddb..83b7d25 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E02,4E03,4E08.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E02,4E03,4E08.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E02,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E02,E0100.otf
new file mode 100644
index 0000000..ab18162
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E02,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E03,E0100.otf
new file mode 100644
index 0000000..2065795
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E03.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E03.otf
index 2065795..b2df065 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E05,4E07,4E08,4E09,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E05,4E07,4E08,4E09,E0100.otf
new file mode 100644
index 0000000..dc14f38
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E05,4E07,4E08,4E09,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E05,4E07,4E08,4E09.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E05,4E07,4E08,4E09.otf
index dc14f38..48d907b 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E05,4E07,4E08,4E09.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E05,4E07,4E08,4E09.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E08,4E09,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E08,4E09,E0100.otf
new file mode 100644
index 0000000..bebffae
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E08,4E09,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E08,4E09.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E08,4E09.otf
index bebffae..1b3b013 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E08,4E09.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E08,4E09.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E08,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E08,E0100.otf
new file mode 100644
index 0000000..317e876
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E08,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E08.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E08.otf
index 317e876..9b7da18 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E08.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E08.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E00,4E02,4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E00,4E02,4E03,E0100.otf
new file mode 100644
index 0000000..7b3046a
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E00,4E02,4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E00,4E02,4E03.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E00,4E02,4E03.otf
index 7b3046a..2b1abd6 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E00,4E02,4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E00,4E02,4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E00,4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E00,4E03,E0100.otf
new file mode 100644
index 0000000..82efd78
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E00,4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E00,4E03.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E00,4E03.otf
index 82efd78..8d126f8 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E00,4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E00,4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E00,4E05,4E07,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E00,4E05,4E07,E0100.otf
new file mode 100644
index 0000000..fba35b0
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E00,4E05,4E07,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E00,4E05,4E07.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E00,4E05,4E07.otf
index fba35b0..e57c0cc 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E00,4E05,4E07.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E00,4E05,4E07.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E02,4E03,4E08,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E02,4E03,4E08,E0100.otf
new file mode 100644
index 0000000..6669184
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E02,4E03,4E08,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E02,4E03,4E08.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E02,4E03,4E08.otf
index 6669184..cc81a2c 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E02,4E03,4E08.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E02,4E03,4E08.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E02,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E02,E0100.otf
new file mode 100644
index 0000000..b23afce
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E02,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E03,E0100.otf
new file mode 100644
index 0000000..6e2a522
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E03.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E03.otf
index 6e2a522..d9e56ef 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E05,4E07,4E08,4E09,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E05,4E07,4E08,4E09,E0100.otf
new file mode 100644
index 0000000..b9a1ed1
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E05,4E07,4E08,4E09,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E05,4E07,4E08,4E09.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E05,4E07,4E08,4E09.otf
index b9a1ed1..a8563fe 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E05,4E07,4E08,4E09.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E05,4E07,4E08,4E09.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E08,4E09,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E08,4E09,E0100.otf
new file mode 100644
index 0000000..d48a5e1
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E08,4E09,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E08,4E09.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E08,4E09.otf
index d48a5e1..ef0fe90 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E08,4E09.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E08,4E09.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E08,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E08,E0100.otf
new file mode 100644
index 0000000..40c22d2
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E08,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E08.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E08.otf
index 40c22d2..b8061da 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E08.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E08.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E00,4E02,4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E00,4E02,4E03,E0100.otf
new file mode 100644
index 0000000..1ad2629
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E00,4E02,4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E00,4E02,4E03.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E00,4E02,4E03.otf
index 1ad2629..3d7c8fa 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E00,4E02,4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E00,4E02,4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E00,4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E00,4E03,E0100.otf
new file mode 100644
index 0000000..0925800
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E00,4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E00,4E03.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E00,4E03.otf
index 0925800..56f6079 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E00,4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E00,4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E00,4E05,4E07,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E00,4E05,4E07,E0100.otf
new file mode 100644
index 0000000..1ed837b
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E00,4E05,4E07,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E00,4E05,4E07.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E00,4E05,4E07.otf
index 1ed837b..0cc701f 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E00,4E05,4E07.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E00,4E05,4E07.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E02,4E03,4E08,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E02,4E03,4E08,E0100.otf
new file mode 100644
index 0000000..778a2d6
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E02,4E03,4E08,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E02,4E03,4E08.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E02,4E03,4E08.otf
index 778a2d6..8ad67b0 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E02,4E03,4E08.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E02,4E03,4E08.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E02,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E02,E0100.otf
new file mode 100644
index 0000000..6989011
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E02,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E03,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E03,E0100.otf
new file mode 100644
index 0000000..c6aeacd
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E03,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E03.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E03.otf
index c6aeacd..c8f9b74 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E03.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E03.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E05,4E07,4E08,4E09,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E05,4E07,4E08,4E09,E0100.otf
new file mode 100644
index 0000000..cd02fda
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E05,4E07,4E08,4E09,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E05,4E07,4E08,4E09.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E05,4E07,4E08,4E09.otf
index cd02fda..87892c6 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E05,4E07,4E08,4E09.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E05,4E07,4E08,4E09.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E08,4E09,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E08,4E09,E0100.otf
new file mode 100644
index 0000000..13148c8
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E08,4E09,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E08,4E09.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E08,4E09.otf
index 13148c8..b34218b 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E08,4E09.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E08,4E09.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E08,E0100.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E08,E0100.otf
new file mode 100644
index 0000000..546ce34
--- /dev/null
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E08,E0100.otf
Binary files differ
diff --git a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E08.otf b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E08.otf
index 546ce34..5e123d4 100644
--- a/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E08.otf
+++ b/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E08.otf
Binary files differ
diff --git a/test/subset/data/expected/instantiate_gvar_padding/googlesansflex_subset.default.all.ROND=100.0,slnt=0.0,wdth=150.0,wght=500.0.iup_optimize.ttf b/test/subset/data/expected/instantiate_gvar_padding/googlesansflex_subset.default.all.ROND=100.0,slnt=0.0,wdth=150.0,wght=500.0.iup_optimize.ttf
new file mode 100644
index 0000000..b3bdca5
--- /dev/null
+++ b/test/subset/data/expected/instantiate_gvar_padding/googlesansflex_subset.default.all.ROND=100.0,slnt=0.0,wdth=150.0,wght=500.0.iup_optimize.ttf
Binary files differ
diff --git a/test/subset/data/expected/instantiate_gvar_padding/googlesansflex_subset.default.all.ROND=100.0,slnt=0.0,wdth=150.0,wght=500.0.ttf b/test/subset/data/expected/instantiate_gvar_padding/googlesansflex_subset.default.all.ROND=100.0,slnt=0.0,wdth=150.0,wght=500.0.ttf
new file mode 100644
index 0000000..0f88afd
--- /dev/null
+++ b/test/subset/data/expected/instantiate_gvar_padding/googlesansflex_subset.default.all.ROND=100.0,slnt=0.0,wdth=150.0,wght=500.0.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test-retain-gids.53A9,53F1.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test-retain-gids.53A9,53F1.otf
index 87ada26..743a2f2 100644
--- a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test-retain-gids.53A9,53F1.otf
+++ b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test-retain-gids.53A9,53F1.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test-retain-gids.53A9.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test-retain-gids.53A9.otf
index 42464f3..456c7e2 100644
--- a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test-retain-gids.53A9.otf
+++ b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test-retain-gids.53A9.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test-retain-gids.53F1.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test-retain-gids.53F1.otf
index 009db72..f390a6c 100644
--- a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test-retain-gids.53F1.otf
+++ b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test-retain-gids.53F1.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test.53A9,53F1.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test.53A9,53F1.otf
index 1a4f65f..59eccd6 100644
--- a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test.53A9,53F1.otf
+++ b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test.53A9,53F1.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test.53A9.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test.53A9.otf
index c1cd42c..38e3d8a 100644
--- a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test.53A9.otf
+++ b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test.53A9.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test.53F1.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test.53F1.otf
index 688005a..bd8c711 100644
--- a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test.53F1.otf
+++ b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test.53F1.otf
Binary files differ
diff --git a/test/subset/data/fonts/googlesansflex_subset.ttf b/test/subset/data/fonts/googlesansflex_subset.ttf
new file mode 100644
index 0000000..e6d670c
--- /dev/null
+++ b/test/subset/data/fonts/googlesansflex_subset.ttf
Binary files differ
diff --git a/test/subset/data/tests/cbdt.tests b/test/subset/data/tests/cbdt.tests
index 5e74fef..15e5877 100644
--- a/test/subset/data/tests/cbdt.tests
+++ b/test/subset/data/tests/cbdt.tests
@@ -11,10 +11,10 @@
retain-gids.txt
SUBSETS:
-89®⁉8⃣
-8®⁉
-8⁉
-®
-9
-⁉
-8⃣
+U+0038,U+0039,U+00AE,U+2049,U+0038,U+20E3,U+FE0F
+U+0038,U+00AE,U+2049,U+FE0F
+U+0038,U+2049,U+FE0F
+U+00AE,U+FE0F
+U+0039,U+FE0F
+U+2049,U+FE0F
+U+0038,U+20E3,U+FE0F
diff --git a/test/subset/data/tests/cmap14.tests b/test/subset/data/tests/cmap14.tests
index abfec32..5165f1c 100644
--- a/test/subset/data/tests/cmap14.tests
+++ b/test/subset/data/tests/cmap14.tests
@@ -11,13 +11,22 @@
notdef-outline-gids.txt
SUBSETS:
-一丂七
-丂
-七
-一七
-一丅万
-丅万丈三
-丈
-丈三
-丂七丈
+U+4E00,U+4E02,U+4E03
+U+4E02
+U+4E03
+U+4E00,U+4E03
+U+4E00,U+4E05,U+4E07
+U+4E05,U+4E07,U+4E08,U+4E09
+U+4E08
+U+4E08,U+4E09
+U+4E02,U+4E03,U+4E08
*
+U+4E00,U+4E02,U+4E03,U+E0100
+U+4E02,U+E0100
+U+4E03,U+E0100
+U+4E00,U+4E03,U+E0100
+U+4E00,U+4E05,U+4E07,U+E0100
+U+4E05,U+4E07,U+4E08,U+4E09,U+E0100
+U+4E08,U+E0100
+U+4E08,U+4E09,U+E0100
+U+4E02,U+4E03,U+4E08,U+E0100
diff --git a/test/subset/data/tests/instantiate_gvar_padding.tests b/test/subset/data/tests/instantiate_gvar_padding.tests
new file mode 100644
index 0000000..f02f692
--- /dev/null
+++ b/test/subset/data/tests/instantiate_gvar_padding.tests
@@ -0,0 +1,15 @@
+FONTS:
+googlesansflex_subset.ttf
+
+PROFILES:
+default.txt
+
+SUBSETS:
+*
+
+INSTANCES:
+ROND=100.0,slnt=0.0,wdth=150.0,wght=500.0
+
+IUP_OPTIONS:
+Yes
+No
diff --git a/test/subset/data/tests/layout.gsub3.tests b/test/subset/data/tests/layout.gsub3.tests
index 35d02fb..065457b 100644
--- a/test/subset/data/tests/layout.gsub3.tests
+++ b/test/subset/data/tests/layout.gsub3.tests
@@ -10,3 +10,7 @@
叱
厩叱
*
+
+# TODO temporary until diff with fonttools on FDSelect format is fixed.
+OPTIONS:
+no_fonttools
diff --git a/test/subset/meson.build b/test/subset/meson.build
index b354893..dffba64 100644
--- a/test/subset/meson.build
+++ b/test/subset/meson.build
@@ -79,6 +79,7 @@
'sync_vmetrics',
'empty_region_vardata',
'colrv1_partial_instance',
+ 'instantiate_gvar_padding',
]
if get_option('experimental_api')
diff --git a/util/helper-cairo.hh b/util/helper-cairo.hh
index a457f10..b6ef806 100644
--- a/util/helper-cairo.hh
+++ b/util/helper-cairo.hh
@@ -156,6 +156,18 @@
&font_matrix,
&ctm,
font_options);
+ if (cairo_scaled_font_status (scaled_font) == CAIRO_STATUS_INVALID_MATRIX)
+ {
+ // Set font matrix to 0, which *does* work with cairo_scaled_font_create()
+ font_matrix.xx = font_matrix.yy = 0;
+ font_matrix.xy = font_matrix.yx = 0;
+ font_matrix.x0 = font_matrix.y0 = 0;
+ scaled_font = cairo_scaled_font_create (cairo_face,
+ &font_matrix,
+ &ctm,
+ font_options);
+
+ }
cairo_font_options_destroy (font_options);
cairo_font_face_destroy (cairo_face);
diff --git a/util/helper-subset.hh b/util/helper-subset.hh
index a050d71..91d5f7b 100644
--- a/util/helper-subset.hh
+++ b/util/helper-subset.hh
@@ -34,92 +34,6 @@
#ifndef HB_NO_VAR
-// Parses an axis position string and sets min, default, and max to
-// the requested values. If a value should be set to it's default value
-// then it will be set to NaN.
-static gboolean
-parse_axis_position(const char* s,
- float* min,
- float* def,
- float* max,
- gboolean* drop,
- GError **error)
-{
- const char* part = strpbrk(s, ":");
- *drop = false;
- if (!part) {
- // Single value.
- if (strcmp (s, "drop") == 0)
- {
- *min = NAN;
- *def = NAN;
- *max = NAN;
- *drop = true;
- return true;
- }
-
- errno = 0;
- char *p;
- float axis_value = strtof (s, &p);
- if (errno || s == p)
- {
- g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE,
- "Failed parsing axis value at: '%s'", s);
- return false;
- }
-
- *min = axis_value;
- *def = axis_value;
- *max = axis_value;
- return true;
- }
-
-
- float values[3];
- int count = 0;
- for (int i = 0; i < 3; i++) {
- errno = 0;
- count++;
- if (!*s || part == s) {
- values[i] = NAN;
-
- if (part == NULL) break;
- s = part + 1;
- part = strpbrk(s, ":");
- continue;
- }
-
- char *pend;
- values[i] = strtof (s, &pend);
- if (errno || s == pend || (part && pend != part))
- {
- g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE,
- "Failed parsing axis value at: '%s'", s);
- return false;
- }
-
- if (part == NULL) break;
- s = pend + 1;
- part = strpbrk(s, ":");
- }
-
- if (count == 2) {
- *min = values[0];
- *def = NAN;
- *max = values[1];
- return true;
- } else if (count == 3) {
- *min = values[0];
- *def = values[1];
- *max = values[2];
- return true;
- }
-
- g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE,
- "Failed parsing axis value at: '%s'", s);
- return false;
-}
-
static gboolean
parse_instancing_spec (const char *arg,
hb_face_t* face,
@@ -168,13 +82,7 @@
return false;
}
- gboolean drop;
- float min, def, max;
- if (!parse_axis_position(s, &min, &def, &max, &drop, error))
- return false;
-
- if (drop)
- {
+ if (strcmp (s, "drop") == 0) {
if (!hb_subset_input_pin_axis_to_default (input,
face,
axis_tag))
@@ -185,18 +93,9 @@
}
continue;
}
-
- if (min == def && def == max) {
- if (!hb_subset_input_pin_axis_location (input,
- face, axis_tag,
- def))
- {
- g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE,
- "Cannot pin axis: '%c%c%c%c', not present in fvar", HB_UNTAG (axis_tag));
- return false;
- }
- continue;
- }
+ float min, def, max;
+ if (!hb_subset_axis_range_from_string(s, -1, &min, &max, &def))
+ return false;
if (!hb_subset_input_set_axis_range (input,
face, axis_tag,
@@ -207,10 +106,6 @@
return false;
}
continue;
-
- g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE,
- "Partial instancing is not supported.");
- return false;
}
return true;