Add CHAD and WTPT functions to public API

Change-Id: I1ea6b234ae63fa5546d283027a62960051f7b4a1
Reviewed-on: https://skia-review.googlesource.com/c/skcms/+/253916
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
diff --git a/profiles/color.org/Lower_Left.icc.txt b/profiles/color.org/Lower_Left.icc.txt
index 0e2805a..a7ee329 100644
--- a/profiles/color.org/Lower_Left.icc.txt
+++ b/profiles/color.org/Lower_Left.icc.txt
@@ -24,6 +24,7 @@
  XYZ : | 0.38511658 0.14305115 0.43603516 |
        | 0.7169037 0.06060791 0.2224884 |
        | 0.09706116 0.71391296 0.013916016 |
+WTPT : | 0.9504547 1 1.0890503 |
 252 random bytes transformed to linear XYZD50 bytes:
 	291454 6280c2 30375f 2a2706 3a2e07 4b8133 281288
 	70ac1c 1c2510 69a32b 71b087 304356 261642 776813
diff --git a/profiles/color.org/Lower_Right.icc.txt b/profiles/color.org/Lower_Right.icc.txt
index a4aefc6..3b30603 100644
--- a/profiles/color.org/Lower_Right.icc.txt
+++ b/profiles/color.org/Lower_Right.icc.txt
@@ -24,6 +24,7 @@
  XYZ : | 0.6097412 0.20527649 0.14918518 |
        | 0.31111145 0.6256714 0.06321716 |
        | 0.019470215 0.06086731 0.7445679 |
+WTPT : | 0.9504547 1 1.0890503 |
 252 random bytes transformed to linear XYZD50 bytes:
 	204d31 93ce15 416213 1f1032 24134e 755408 2b7921
 	914d31 211911 8e5828 aeab10 4a5e08 1f3e2b 522d94
diff --git a/profiles/color.org/Upper_Left.icc.txt b/profiles/color.org/Upper_Left.icc.txt
index 2d7d5d6..f7b9324 100644
--- a/profiles/color.org/Upper_Left.icc.txt
+++ b/profiles/color.org/Upper_Left.icc.txt
@@ -32,6 +32,10 @@
   B0 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B1 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B2 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
+CHAD : | 1.0478363 0.022888184 -0.050201416 |
+       | 0.029541016 0.99050903 -0.017074585 |
+       | -0.009246826 0.015075684 0.75172424 |
+WTPT : | 0.9642029 1 0.8249054 |
 252 random bytes transformed to linear XYZD50 bytes:
 	003012 e8ff0c 335505 00000c 000032 5a3300 2d9d18
 	8c3b0f 000000 884609 dcd000 274100 0c230c 3510c0
diff --git a/profiles/color.org/Upper_Right.icc.txt b/profiles/color.org/Upper_Right.icc.txt
index 43e1dbd..78fcdce 100644
--- a/profiles/color.org/Upper_Right.icc.txt
+++ b/profiles/color.org/Upper_Right.icc.txt
@@ -34,6 +34,10 @@
   B0 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B1 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B2 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
+CHAD : | 1.0478363 0.022888184 -0.050201416 |
+       | 0.029541016 0.99050903 -0.017074585 |
+       | -0.009246826 0.015075684 0.75172424 |
+WTPT : | 0.9642029 1 0.8249054 |
 252 random bytes transformed to linear XYZD50 bytes:
 	050217 c9c1ff 434d9d 273100 312b00 a1ff8a 0d054b
 	d3f938 2a480b bfe26d edffff 6592a8 0b091c a5670c
diff --git a/profiles/color.org/sRGB2014.icc.txt b/profiles/color.org/sRGB2014.icc.txt
index 2ac3d4e..81e0b75 100644
--- a/profiles/color.org/sRGB2014.icc.txt
+++ b/profiles/color.org/sRGB2014.icc.txt
@@ -34,6 +34,10 @@
  XYZ : | 0.43606567 0.3851471 0.1430664 |
        | 0.2224884 0.71687317 0.06060791 |
        | 0.013916016 0.097076416 0.71409607 |
+CHAD : | 1.0479126 0.02293396 -0.050201416 |
+       | 0.02960205 0.99046326 -0.017074585 |
+       | -0.009246826 0.015060425 0.7517853 |
+WTPT : | 0.9642029 1 0.8249054 |
 252 random bytes transformed to linear XYZD50 bytes:
 	345632 a4d61e 4c6617 190e2f 1e1149 5e4809 4d8927
 	6c3b2e 1c1711 6e4726 a1a315 4d5f0c 2d442c 44268d
diff --git a/profiles/color.org/sRGB_ICC_v4_Appearance.icc.txt b/profiles/color.org/sRGB_ICC_v4_Appearance.icc.txt
index 2948486..fc3a774 100644
--- a/profiles/color.org/sRGB_ICC_v4_Appearance.icc.txt
+++ b/profiles/color.org/sRGB_ICC_v4_Appearance.icc.txt
@@ -32,6 +32,10 @@
   B0 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B1 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B2 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
+CHAD : | 1.0479126 0.02293396 -0.050201416 |
+       | 0.02960205 0.99046326 -0.017074585 |
+       | -0.009246826 0.015060425 0.7517853 |
+WTPT : | 0.9642029 1 0.8249054 |
 252 random bytes transformed to linear XYZD50 bytes:
 	2f4e2d 92c11a 486216 190e2f 1d1048 5c4609 3e711e
 	653727 1d1711 6b4623 9c9b13 4a5b0b 2b4229 3a2375
diff --git a/profiles/color.org/sRGB_v4_ICC_preference.icc.txt b/profiles/color.org/sRGB_v4_ICC_preference.icc.txt
index 0b588fd..c34f8ba 100644
--- a/profiles/color.org/sRGB_v4_ICC_preference.icc.txt
+++ b/profiles/color.org/sRGB_v4_ICC_preference.icc.txt
@@ -32,6 +32,10 @@
   B0 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B1 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B2 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
+CHAD : | 1.0480194 0.023010254 -0.0501709 |
+       | 0.029724121 0.9903412 -0.017074585 |
+       | -0.009231567 0.010284424 0.75213623 |
+WTPT : | 0.9642029 1 0.8249054 |
 252 random bytes transformed to linear XYZD50 bytes:
 	0f2b1c 97bd13 445b15 190e29 1d113f 5f4706 1d4a14
 	6b3928 1f1912 764e26 b3a80d 424e05 1d3325 3b236d
diff --git a/profiles/fuzz/inverse_tf_not_invertible.icc.txt b/profiles/fuzz/inverse_tf_not_invertible.icc.txt
index 728b687..defec97 100644
--- a/profiles/fuzz/inverse_tf_not_invertible.icc.txt
+++ b/profiles/fuzz/inverse_tf_not_invertible.icc.txt
@@ -26,6 +26,7 @@
  XYZ : | 0.43606567 0.3850708 0.14305115 |
        | 0.22250366 0.71687317 0.06060791 |
        | 0.013916016 0.09706116 0.71398926 |
+WTPT : | 0.9505005 1 1.0890961 |
 252 random bytes transformed to linear XYZD50 bytes:
 	619c65 8eac17 6b762f 361b5d 452e84 736f0d 538b46
 	7e505b 453d30 866a50 a1a314 8ca915 5c825b 6e4b91
diff --git a/profiles/fuzz/one_d_clut.icc.txt b/profiles/fuzz/one_d_clut.icc.txt
index f0d177e..501d5b0 100644
--- a/profiles/fuzz/one_d_clut.icc.txt
+++ b/profiles/fuzz/one_d_clut.icc.txt
@@ -31,6 +31,10 @@
   B0 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B1 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B2 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
+CHAD : | 1.0478363 0.022888184 -0.050201416 |
+       | 0.029541016 0.99050903 -0.017074585 |
+       | -0.009246826 0.015075684 0.75172424 |
+WTPT : | 0.9642029 1 0.8249054 |
 252 random bytes transformed to linear XYZD50 bytes:
 	000000 000800 000400 000000 000000 000800 000000
 	000800 000000 000800 000800 000600 000000 000600
diff --git a/profiles/misc/AdobeColorSpin.icc.txt b/profiles/misc/AdobeColorSpin.icc.txt
index 83032ce..2f1b6fa 100644
--- a/profiles/misc/AdobeColorSpin.icc.txt
+++ b/profiles/misc/AdobeColorSpin.icc.txt
@@ -23,6 +23,7 @@
  XYZ : | 0.20527649 0.14918518 0.6097412 |
        | 0.6256714 0.06321716 0.31111145 |
        | 0.06086731 0.7445526 0.019470215 |
+WTPT : | 0.95047 1 1.0890503 |
 252 random bytes transformed to linear XYZD50 bytes:
 	341958 4873c4 283361 302a05 463407 2c712e 2e158e
 	539d14 182310 4b9424 489b84 223c56 2e1a45 8a7111
diff --git a/profiles/misc/AdobeRGB.icc.txt b/profiles/misc/AdobeRGB.icc.txt
index a4aefc6..3b30603 100644
--- a/profiles/misc/AdobeRGB.icc.txt
+++ b/profiles/misc/AdobeRGB.icc.txt
@@ -24,6 +24,7 @@
  XYZ : | 0.6097412 0.20527649 0.14918518 |
        | 0.31111145 0.6256714 0.06321716 |
        | 0.019470215 0.06086731 0.7445679 |
+WTPT : | 0.9504547 1 1.0890503 |
 252 random bytes transformed to linear XYZD50 bytes:
 	204d31 93ce15 416213 1f1032 24134e 755408 2b7921
 	914d31 211911 8e5828 aeab10 4a5e08 1f3e2b 522d94
diff --git a/profiles/misc/Apple_Color_LCD.icc.txt b/profiles/misc/Apple_Color_LCD.icc.txt
index be3bbc8..b955839 100644
--- a/profiles/misc/Apple_Color_LCD.icc.txt
+++ b/profiles/misc/Apple_Color_LCD.icc.txt
@@ -35,6 +35,10 @@
  XYZ : | 0.44433594 0.3794403 0.14041138 |
        | 0.22476196 0.7261658 0.049072266 |
        | 0.0054779053 0.07797241 0.7414551 |
+CHAD : | 1.0486145 0.02331543 -0.050338745 |
+       | 0.030181885 0.99002075 -0.01713562 |
+       | -0.009216309 0.015029907 0.75172424 |
+WTPT : | 0.94955444 1 1.0890198 |
 252 random bytes transformed to linear XYZD50 bytes:
 	345632 a4d918 4b6715 1a0d31 1e104c 5f4907 4c8a24
 	6d3b2e 1d1711 6f4725 a2a510 4d6009 2c452c 442491
diff --git a/profiles/misc/Apple_Wide_Color.icc.txt b/profiles/misc/Apple_Wide_Color.icc.txt
index 34a5980..df219ee 100644
--- a/profiles/misc/Apple_Wide_Color.icc.txt
+++ b/profiles/misc/Apple_Wide_Color.icc.txt
@@ -31,6 +31,10 @@
   B0 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B1 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B2 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
+CHAD : | 1.0478058 0.022888184 -0.0501709 |
+       | 0.029525757 0.99050903 -0.017059326 |
+       | -0.009246826 0.015060425 0.75190735 |
+WTPT : | 0.9642029 1 0.82510376 |
 252 random bytes transformed to linear XYZD50 bytes:
 	2c562d a2d713 4b6615 1a0e30 1e114a 614a06 3d8912
 	763f31 1c1711 734b27 a6a90d 4c5f06 2b442b 452790
diff --git a/profiles/misc/BenQ_GL2450.icc.txt b/profiles/misc/BenQ_GL2450.icc.txt
index dc0d1d3..73b1b40 100644
--- a/profiles/misc/BenQ_GL2450.icc.txt
+++ b/profiles/misc/BenQ_GL2450.icc.txt
@@ -32,6 +32,7 @@
        | 0.19389343 0.7411041 0.065093994 |
        | 0.010299683 0.061203003 1.0146027 |
  !!! This does not appear to use a D50 whitepoint, rather [0.992096 1.00009 1.08611]
+WTPT : | 0.9524994 1 1.0861053 |
 252 random bytes transformed to linear XYZD50 bytes:
 	406149 a5da17 54711b 20104c 281372 5d4c08 569330
 	693848 221b1c 6d483a 9ea810 536909 384f41 522acd
diff --git a/profiles/misc/BenQ_RL2455.icc.txt b/profiles/misc/BenQ_RL2455.icc.txt
index d57df1c..0aef592 100644
--- a/profiles/misc/BenQ_RL2455.icc.txt
+++ b/profiles/misc/BenQ_RL2455.icc.txt
@@ -57,6 +57,7 @@
   ~= : 1, 1, 0, 0, 0, 0, 0 (Max error: 0.000332177) (~Identity)
   B2 : 16-bit table with 4096 entries
   ~= : 1, 1, 0, 0, 0, 0, 0 (Max error: 0.000332177) (~Identity)
+WTPT : | 0.96429443 1 0.82510376 |
 252 random bytes transformed to linear XYZD50 bytes:
 	192a1a 51680e 26320b 0d0818 100a26 312504 244213
 	391f17 0f0c08 3a2513 525109 272f06 152216 231648
diff --git a/profiles/misc/Coated_FOGRA27_CMYK.icc.txt b/profiles/misc/Coated_FOGRA27_CMYK.icc.txt
index f3bb5bc..f5581c7 100644
--- a/profiles/misc/Coated_FOGRA27_CMYK.icc.txt
+++ b/profiles/misc/Coated_FOGRA27_CMYK.icc.txt
@@ -31,6 +31,7 @@
   B0 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B1 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B2 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
+WTPT : | 0.86979675 0.89930725 0.7805023 |
 252 random bytes transformed to linear XYZD50 bytes:
 	0e1b20 392210 0b0c05 1a1218 1c1305 17210b 231e10
 	25233b 010102 0f1514 222e4a 492e20 2b2d1d 030202
diff --git a/profiles/misc/Coated_FOGRA39_CMYK.icc.txt b/profiles/misc/Coated_FOGRA39_CMYK.icc.txt
index 5bba86b..ace871a 100644
--- a/profiles/misc/Coated_FOGRA39_CMYK.icc.txt
+++ b/profiles/misc/Coated_FOGRA39_CMYK.icc.txt
@@ -35,6 +35,7 @@
   B0 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B1 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B2 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
+WTPT : | 0.84480286 0.87620544 0.745697 |
 252 random bytes transformed to linear XYZD50 bytes:
 	111c23 3a220f 0c0e06 1b131a 1c1305 18220c 251f11
 	27253e 000102 101615 232f4c 4a2f21 2c2e1e 030201
diff --git a/profiles/misc/ColorLogic_ISO_Coated_CMYK.icc.txt b/profiles/misc/ColorLogic_ISO_Coated_CMYK.icc.txt
index d626af4..8725d12 100644
--- a/profiles/misc/ColorLogic_ISO_Coated_CMYK.icc.txt
+++ b/profiles/misc/ColorLogic_ISO_Coated_CMYK.icc.txt
@@ -36,6 +36,7 @@
   ~= : 1, 0.9961089, 0, 0, 0, 0, 0 (Max error: 0.000143707)
   B1 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B2 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
+WTPT : | 0.8448181 0.8761902 0.7456665 |
 252 random bytes transformed to linear XYZD50 bytes:
 	101b21 382210 0c0d06 1a1318 1b1205 18210c 231e11
 	26243c 000102 101514 232e4a 492f21 2c2d1e 030201
diff --git a/profiles/misc/Color_Spin_Gamma_18.icc.txt b/profiles/misc/Color_Spin_Gamma_18.icc.txt
index e14f7c7..618a325 100644
--- a/profiles/misc/Color_Spin_Gamma_18.icc.txt
+++ b/profiles/misc/Color_Spin_Gamma_18.icc.txt
@@ -23,6 +23,7 @@
  XYZ : | 0.38511658 0.14303589 0.43605042 |
        | 0.7169037 0.06060791 0.2224884 |
        | 0.09706116 0.71391296 0.013916016 |
+WTPT : | 0.95047 1 1.0890503 |
 252 random bytes transformed to linear XYZD50 bytes:
 	341961 698bc4 3d476d 39360a 483d0c 538b40 2f1690
 	7bb521 29341a 75ad36 76b492 3a5265 322050 83781b
diff --git a/profiles/misc/DisplayCal_ASUS_NonMonotonic.icc.txt b/profiles/misc/DisplayCal_ASUS_NonMonotonic.icc.txt
index c497a76..5a41555 100644
--- a/profiles/misc/DisplayCal_ASUS_NonMonotonic.icc.txt
+++ b/profiles/misc/DisplayCal_ASUS_NonMonotonic.icc.txt
@@ -54,6 +54,7 @@
   B0 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B1 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B2 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
+WTPT : | 0.9493561 1 1.1591797 |
 252 random bytes transformed to linear XYZD50 bytes:
 	1a2c18 526c09 263409 0c0619 0f0727 2f2402 264611
 	351b17 0e0b08 372313 505205 273004 162315 22124a
diff --git a/profiles/misc/Dot_Gain_20_Grayscale.icc.txt b/profiles/misc/Dot_Gain_20_Grayscale.icc.txt
index d45f28e..ec88975 100644
--- a/profiles/misc/Dot_Gain_20_Grayscale.icc.txt
+++ b/profiles/misc/Dot_Gain_20_Grayscale.icc.txt
@@ -22,6 +22,7 @@
  XYZ : | 0.9642029 0 0 |
        | 0 1 0 |
        | 0 0 0.8249054 |
+WTPT : | 0.9642029 1 0.8249054 |
 252 random bytes transformed to linear XYZD50 bytes:
 	018a40 a7fc08 509115 320748 300a67 b74404 00ca26
 	dc1043 3d1e1d d43036 e4af05 668201 0f703a 6515ab
diff --git a/profiles/misc/Generic_RGB_Gamma_18.icc.txt b/profiles/misc/Generic_RGB_Gamma_18.icc.txt
index 5efcd3b..d08f084 100644
--- a/profiles/misc/Generic_RGB_Gamma_18.icc.txt
+++ b/profiles/misc/Generic_RGB_Gamma_18.icc.txt
@@ -25,6 +25,10 @@
  XYZ : | 0.45429993 0.35334778 0.15664673 |
        | 0.24191284 0.67362976 0.0844574 |
        | 0.014892578 0.09063721 0.719574 |
+CHAD : | 1.0478821 0.022918701 -0.050201416 |
+       | 0.029571533 0.9904938 -0.017059326 |
+       | -0.009231567 0.015075684 0.75164795 |
+WTPT : | 0.95047 1 1.0890961 |
 252 random bytes transformed to linear XYZD50 bytes:
 	3b6141 a8d31f 5a751f 26173e 2b1b59 6d590c 4e8b31
 	78473d 2a241b 7d5834 a9ad17 5c6e0e 37523b 553797
diff --git a/profiles/misc/Gray_Gamma_22.icc.txt b/profiles/misc/Gray_Gamma_22.icc.txt
index 65f7cbd..f6aac72 100644
--- a/profiles/misc/Gray_Gamma_22.icc.txt
+++ b/profiles/misc/Gray_Gamma_22.icc.txt
@@ -19,6 +19,7 @@
  XYZ : | 0.9642029 0 0 |
        | 0 1 0 |
        | 0 0 0.8249054 |
+WTPT : | 0.9505005 1 1.0890961 |
 252 random bytes transformed to linear XYZD50 bytes:
 	00752e 96fb03 3c7c0b 210336 1f0455 a93001 00be18
 	d50831 2a1111 cb1e25 df9e02 516d00 075a2a 500ba1
diff --git a/profiles/misc/HD_709.icc.txt b/profiles/misc/HD_709.icc.txt
index 9aae7c0..72a4874 100644
--- a/profiles/misc/HD_709.icc.txt
+++ b/profiles/misc/HD_709.icc.txt
@@ -35,6 +35,10 @@
  XYZ : | 0.358963 0.4463501 0.15888977 |
        | 0.19592285 0.7428436 0.06123352 |
        | 0.009674072 0.043518066 0.77171326 |
+CHAD : | 1.0457611 0.021820068 -0.049453735 |
+       | 0.02796936 0.9915619 -0.016738892 |
+       | -0.009185791 0.015045166 0.75375366 |
+WTPT : | 0.95251465 1 1.0860596 |
 252 random bytes transformed to linear XYZD50 bytes:
 	3c592f a8d910 4f6811 180d33 1e104f 544506 598e1f
 	5c3530 1b1711 604226 99a10c 4d5f06 32462a 412597
diff --git a/profiles/misc/Japan_Color_2001_Coated.icc.txt b/profiles/misc/Japan_Color_2001_Coated.icc.txt
index d82513b..f1c188b 100644
--- a/profiles/misc/Japan_Color_2001_Coated.icc.txt
+++ b/profiles/misc/Japan_Color_2001_Coated.icc.txt
@@ -31,6 +31,7 @@
   B0 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B1 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B2 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
+WTPT : | 0.75927734 0.78593445 0.664032 |
 252 random bytes transformed to linear XYZD50 bytes:
 	101d25 3d240f 0b0d05 1b131b 1d1406 17230c 241f11
 	26233f 000001 0f1615 243052 4c3022 2c2e1d 020100
diff --git a/profiles/misc/Kodak_sRGB.icc.txt b/profiles/misc/Kodak_sRGB.icc.txt
index 1bf10cb..8193323 100644
--- a/profiles/misc/Kodak_sRGB.icc.txt
+++ b/profiles/misc/Kodak_sRGB.icc.txt
@@ -47,6 +47,7 @@
   ~= : 4.998877, 1, 2.980232e-07, 0.9980438, 0.9982907, 0.00484848, 0 (Max error: 0.00196159) (D-gap: -3.0458e-05)
   B2 : 16-bit table with 4096 entries
   ~= : 4.998877, 1, 2.980232e-07, 0.9980438, 0.9982907, 0.00484848, 0 (Max error: 0.00196159) (D-gap: -3.0458e-05)
+WTPT : | 0.8594055 0.8912964 0.7357025 |
 252 random bytes transformed to linear XYZD50 bytes:
 	355632 a5d31d 4c6517 190f30 1e124a 5d4709 4e8727
 	693a2f 1c1712 6c4626 a0a014 4d5d0c 2e442c 42288e
diff --git a/profiles/misc/Lexmark_X110.icc.txt b/profiles/misc/Lexmark_X110.icc.txt
index 3343a78..a60e893 100644
--- a/profiles/misc/Lexmark_X110.icc.txt
+++ b/profiles/misc/Lexmark_X110.icc.txt
@@ -22,6 +22,7 @@
   B0 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B1 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B2 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
+WTPT : | 0.9505005 1 1.0888062 |
 252 random bytes transformed to linear XYZD50 bytes:
 	6fa094 d8f243 a7d043 825cbe 8365c0 a39f15 5c8161
 	a871bd 5a5249 aa8b81 d2f028 a6cb1b 729e83 937fb7
diff --git a/profiles/misc/MartiMaria_browsertest_A2B.icc.txt b/profiles/misc/MartiMaria_browsertest_A2B.icc.txt
index 420b9e9..869c913 100644
--- a/profiles/misc/MartiMaria_browsertest_A2B.icc.txt
+++ b/profiles/misc/MartiMaria_browsertest_A2B.icc.txt
@@ -22,6 +22,7 @@
   B0 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B1 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B2 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
+WTPT : | 0.9642029 1 0.8249054 |
 252 random bytes transformed to linear XYZD50 bytes:
 	181915 7b8069 7b8069 7b8069 7b8069 7b8069 090a08
 	7b8069 7b8069 7b8069 7b8069 7b8069 7b8069 7b8069
diff --git a/profiles/misc/MartiMaria_browsertest_HARD.icc.txt b/profiles/misc/MartiMaria_browsertest_HARD.icc.txt
index 37e9829..ddf037d 100644
--- a/profiles/misc/MartiMaria_browsertest_HARD.icc.txt
+++ b/profiles/misc/MartiMaria_browsertest_HARD.icc.txt
@@ -36,6 +36,7 @@
   B0 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B1 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B2 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
+WTPT : | 0.9642029 1 0.8249054 |
 252 random bytes transformed to linear XYZD50 bytes:
 	181915 7b8069 7b8069 7b8069 7b8069 7b8069 090a08
 	7b8069 7b8069 7b8069 7b8069 7b8069 7b8069 7b8069
diff --git a/profiles/misc/Phase_One_P25.icc.txt b/profiles/misc/Phase_One_P25.icc.txt
index 8aff9dd..673eab9 100644
--- a/profiles/misc/Phase_One_P25.icc.txt
+++ b/profiles/misc/Phase_One_P25.icc.txt
@@ -37,6 +37,7 @@
   B0 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B1 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B2 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
+WTPT : | 0.9634552 1 0.82403564 |
 252 random bytes transformed to linear XYZD50 bytes:
 	1d5c40 86f80b 4a7913 2e1551 341674 8a6006 38a75e
 	b45e34 2f2417 af6d2b b4ae06 547302 1f4c33 6822be
diff --git a/profiles/misc/PrintOpen_ISO_Coated_CMYK.icc.txt b/profiles/misc/PrintOpen_ISO_Coated_CMYK.icc.txt
index 5c38e57..c0f27d3 100644
--- a/profiles/misc/PrintOpen_ISO_Coated_CMYK.icc.txt
+++ b/profiles/misc/PrintOpen_ISO_Coated_CMYK.icc.txt
@@ -30,6 +30,7 @@
   B0 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B1 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B2 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
+WTPT : | 0.84552 0.87683105 0.74716187 |
 252 random bytes transformed to linear XYZD50 bytes:
 	162328 3a2310 090a05 1d151d 1b1306 18230c 211b10
 	2a2742 000101 101615 253047 4c3123 27291b 020201
diff --git a/profiles/misc/SM245B.icc.txt b/profiles/misc/SM245B.icc.txt
index b5ba7ba..0ffa117 100644
--- a/profiles/misc/SM245B.icc.txt
+++ b/profiles/misc/SM245B.icc.txt
@@ -31,6 +31,7 @@
        | 0.2328949 0.6973877 0.06971741 |
        | 0.01411438 0.14978027 0.9237671 |
  !!! This does not appear to use a D50 whitepoint, rather [0.950165 1 1.08766]
+WTPT : | 0.9501648 1 1.0876465 |
 252 random bytes transformed to linear XYZD50 bytes:
 	2f5645 99d32b 476620 1c0e3e 211160 604a0b 428637
 	723d3c 1d1716 724a31 9da41d 4a5f12 29443c 4b29b7
diff --git a/profiles/misc/SWOP_Coated_20_GCR_CMYK.icc.txt b/profiles/misc/SWOP_Coated_20_GCR_CMYK.icc.txt
index 9040d58..0e23d15 100644
--- a/profiles/misc/SWOP_Coated_20_GCR_CMYK.icc.txt
+++ b/profiles/misc/SWOP_Coated_20_GCR_CMYK.icc.txt
@@ -32,6 +32,7 @@
   B0 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B1 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B2 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
+WTPT : | 0.9642029 1 0.82489014 |
 252 random bytes transformed to linear XYZD50 bytes:
 	121d22 36200e 090a05 191117 181106 131d0a 221d12
 	252136 000000 0e1312 242d47 472e1f 252618 010100
diff --git a/profiles/misc/ThinkpadX1YogaV2.icc.txt b/profiles/misc/ThinkpadX1YogaV2.icc.txt
index 40e4be5..c1ae231 100644
--- a/profiles/misc/ThinkpadX1YogaV2.icc.txt
+++ b/profiles/misc/ThinkpadX1YogaV2.icc.txt
@@ -28,6 +28,10 @@
  XYZ : | 0.5669861 0.26065063 0.13656616 |
        | 0.2580719 0.6846466 0.057281494 |
        | 0.00044250488 0.044403076 0.78004456 |
+CHAD : | 1.0486145 0.02331543 -0.050354004 |
+       | 0.030181885 0.99002075 -0.017150879 |
+       | -0.009231567 0.015029907 0.75172424 |
+WTPT : | 0.9642029 1 0.8249054 |
 252 random bytes transformed to linear XYZD50 bytes:
 	265331 9ad40e 456610 1d0e34 211151 704e04 35841f
 	88422f 201811 864e25 ada809 4c6005 23432b 4d2899
diff --git a/profiles/misc/US_Web_Coated_SWOP_CMYK.icc.txt b/profiles/misc/US_Web_Coated_SWOP_CMYK.icc.txt
index 538dd0c..2916122 100644
--- a/profiles/misc/US_Web_Coated_SWOP_CMYK.icc.txt
+++ b/profiles/misc/US_Web_Coated_SWOP_CMYK.icc.txt
@@ -31,6 +31,7 @@
   B0 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B1 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B2 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
+WTPT : | 0.70840454 0.73594666 0.5710449 |
 252 random bytes transformed to linear XYZD50 bytes:
 	121f24 392210 0a0c06 1b141c 1d1407 151f0c 242014
 	23223b 000001 0f1514 212d48 482f22 242619 020101
diff --git a/profiles/misc/XPS13_9360.icc.txt b/profiles/misc/XPS13_9360.icc.txt
index ffa5450..6acfb72 100644
--- a/profiles/misc/XPS13_9360.icc.txt
+++ b/profiles/misc/XPS13_9360.icc.txt
@@ -28,6 +28,10 @@
  XYZ : | 0.43795776 0.38423157 0.14201355 |
        | 0.2230835 0.71687317 0.060058594 |
        | 0.014511108 0.09725952 0.7131195 |
+CHAD : | 1.0472717 0.022460938 -0.050811768 |
+       | 0.028808594 0.99142456 -0.017227173 |
+       | -0.00944519 0.0154418945 0.74728394 |
+WTPT : | 0.9642029 1 0.8249054 |
 252 random bytes transformed to linear XYZD50 bytes:
 	355733 a5d71d 4d6817 190d30 1e104a 5f4908 4d8a27
 	6c3a2f 1c1711 6f4826 a2a514 4f610c 2d452d 44268e
diff --git a/profiles/misc/XRite_GRACol7_340_CMYK.icc.txt b/profiles/misc/XRite_GRACol7_340_CMYK.icc.txt
index d16185c..c13a784 100644
--- a/profiles/misc/XRite_GRACol7_340_CMYK.icc.txt
+++ b/profiles/misc/XRite_GRACol7_340_CMYK.icc.txt
@@ -31,6 +31,10 @@
   B0 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B1 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B2 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
+CHAD : | 1 0 0 |
+       | 0 1 0 |
+       | 0 0 1 |
+WTPT : | 0.8447876 0.8761749 0.7453766 |
 252 random bytes transformed to linear XYZD50 bytes:
 	121d23 3b2510 0c0e07 1c151b 1e1607 17210e 252013
 	242239 010102 111616 212b45 493020 26281a 030201
diff --git a/profiles/misc/calibrated_nonzero_black.icc.txt b/profiles/misc/calibrated_nonzero_black.icc.txt
index 335843b..762fd08 100644
--- a/profiles/misc/calibrated_nonzero_black.icc.txt
+++ b/profiles/misc/calibrated_nonzero_black.icc.txt
@@ -29,6 +29,10 @@
  XYZ : | 0.436615 0.38534546 0.14224243 |
        | 0.22212219 0.71839905 0.0594635 |
        | 0.012954712 0.09654236 0.71539307 |
+CHAD : | 1.0476837 0.022857666 -0.049865723 |
+       | 0.029525757 0.9903717 -0.016967773 |
+       | -0.009170532 0.0149383545 0.75354004 |
+WTPT : | 0.9642029 1 0.8249054 |
 252 random bytes transformed to linear XYZD50 bytes:
 	355834 a5d71d 4d6817 1a0e30 1e104b 5f4a08 4e8a27
 	6c3a2f 1d1711 6e4826 a2a514 4f610c 2d462d 44268e
diff --git a/profiles/misc/crbug_976551.icc.txt b/profiles/misc/crbug_976551.icc.txt
index 31b8ca9..3075ac9 100644
--- a/profiles/misc/crbug_976551.icc.txt
+++ b/profiles/misc/crbug_976551.icc.txt
@@ -31,6 +31,10 @@
  XYZ : | 0.512558 0.29548645 0.15614319 |
        | 0.24029541 0.7005768 0.059127808 |
        | -0.0010375977 0.042297363 0.7836609 |
+CHAD : | 1.0486145 0.02331543 -0.050338745 |
+       | 0.030181885 0.99002075 -0.01713562 |
+       | -0.009216309 0.015029907 0.75172424 |
+WTPT : | 0.94955444 1 1.0890198 |
 252 random bytes transformed to linear XYZD50 bytes:
 	396c49 a7dc10 60831b 2f184c 341c6a 7a6306 459331
 	894847 342b1f 8d5f3b b0b70b 657d06 385e43 6339a5
diff --git a/profiles/misc/sRGB_Calibrated_Heterogeneous.icc.txt b/profiles/misc/sRGB_Calibrated_Heterogeneous.icc.txt
index 0d8baff..a89b043 100644
--- a/profiles/misc/sRGB_Calibrated_Heterogeneous.icc.txt
+++ b/profiles/misc/sRGB_Calibrated_Heterogeneous.icc.txt
@@ -26,6 +26,7 @@
  XYZ : | 0.4492798 0.38258362 0.13233948 |
        | 0.22447205 0.7223511 0.05317688 |
        | 0.0011291504 0.05355835 0.7702179 |
+WTPT : | 0.9642029 1 0.8249054 |
 252 random bytes transformed to linear XYZD50 bytes:
 	34572f a6d810 4c6710 180c31 1c0f4d 604904 4c8a1f
 	6e3a2c 1b160f 704723 a5a60a 4e6006 2c452a 422497
diff --git a/profiles/misc/sRGB_Calibrated_Homogeneous.icc.txt b/profiles/misc/sRGB_Calibrated_Homogeneous.icc.txt
index 5c0329d..6beaaff 100644
--- a/profiles/misc/sRGB_Calibrated_Homogeneous.icc.txt
+++ b/profiles/misc/sRGB_Calibrated_Homogeneous.icc.txt
@@ -27,6 +27,7 @@
  XYZ : | 0.43547058 0.3885498 0.14019775 |
        | 0.22172546 0.7219696 0.05630493 |
        | 0.0134887695 0.08792114 0.7234802 |
+WTPT : | 0.9505005 1 1.0890045 |
 252 random bytes transformed to linear XYZD50 bytes:
 	355733 a6d91c 4d6817 1a0e30 1e114b 5f4909 4e8b26
 	6c3b2f 1d1812 6e4826 a3a513 4e600b 2e452c 442690
diff --git a/profiles/misc/sRGB_HP.icc.txt b/profiles/misc/sRGB_HP.icc.txt
index df48889..8be3d85 100644
--- a/profiles/misc/sRGB_HP.icc.txt
+++ b/profiles/misc/sRGB_HP.icc.txt
@@ -35,6 +35,7 @@
  XYZ : | 0.43606567 0.3851471 0.1430664 |
        | 0.2224884 0.71687317 0.06060791 |
        | 0.013916016 0.097076416 0.71409607 |
+WTPT : | 0.9504547 1 1.0890503 |
 252 random bytes transformed to linear XYZD50 bytes:
 	345632 a4d61e 4c6617 190e2f 1e1149 5e4809 4d8927
 	6c3b2e 1c1711 6e4726 a1a315 4d5f0c 2d442c 44268d
diff --git a/profiles/misc/sRGB_HP_2.icc.txt b/profiles/misc/sRGB_HP_2.icc.txt
index 2a939e5..11ad119 100644
--- a/profiles/misc/sRGB_HP_2.icc.txt
+++ b/profiles/misc/sRGB_HP_2.icc.txt
@@ -35,6 +35,7 @@
  XYZ : | 0.43606567 0.3851471 0.1430664 |
        | 0.2224884 0.71687317 0.06060791 |
        | 0.013916016 0.097076416 0.71409607 |
+WTPT : | 0.9504547 1 1.0890503 |
 252 random bytes transformed to linear XYZD50 bytes:
 	345632 a4d61e 4c6617 190e2f 1e1149 5e4809 4d8927
 	6c3b2e 1c1711 6e4726 a1a315 4d5f0c 2d442c 44268d
diff --git a/profiles/misc/sRGB_ICC_v4_beta.icc.txt b/profiles/misc/sRGB_ICC_v4_beta.icc.txt
index c7a7de2..365a796 100644
--- a/profiles/misc/sRGB_ICC_v4_beta.icc.txt
+++ b/profiles/misc/sRGB_ICC_v4_beta.icc.txt
@@ -32,6 +32,10 @@
   B0 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B1 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
   B2 : 1, 1, 0, 0, 0, 0, 0 (~Identity)
+CHAD : | 1.0479126 0.02293396 -0.050201416 |
+       | 0.02960205 0.99046326 -0.017074585 |
+       | -0.009246826 0.015060425 0.7517853 |
+WTPT : | 0.9642029 1 0.8249054 |
 252 random bytes transformed to linear XYZD50 bytes:
 	2f4e2d 92c11a 486216 190e2f 1d1048 5c4609 3e711e
 	653727 1d1711 6b4623 9c9b13 4a5b0b 2b4229 3a2375
diff --git a/profiles/misc/sRGB_black_scaled.icc.txt b/profiles/misc/sRGB_black_scaled.icc.txt
index 6774c25..5011a31 100644
--- a/profiles/misc/sRGB_black_scaled.icc.txt
+++ b/profiles/misc/sRGB_black_scaled.icc.txt
@@ -34,6 +34,10 @@
  XYZ : | 0.43606567 0.3851471 0.1430664 |
        | 0.2224884 0.71687317 0.06060791 |
        | 0.013916016 0.097076416 0.71409607 |
+CHAD : | 1.0479126 0.02293396 -0.050201416 |
+       | 0.02960205 0.99046326 -0.017074585 |
+       | -0.009246826 0.015060425 0.7517853 |
+WTPT : | 0.9642029 1 0.8249054 |
 252 random bytes transformed to linear XYZD50 bytes:
 	345632 a4d61e 4c6617 190e2f 1e1149 5e4809 4d8927
 	6c3b2e 1c1711 6e4726 a1a315 4d5f0c 2d442c 44268d
diff --git a/profiles/misc/sRGB_lcms.icc.txt b/profiles/misc/sRGB_lcms.icc.txt
index 504a974..f14bc45 100644
--- a/profiles/misc/sRGB_lcms.icc.txt
+++ b/profiles/misc/sRGB_lcms.icc.txt
@@ -26,6 +26,10 @@
  XYZ : | 0.43585205 0.3853302 0.14302063 |
        | 0.22238159 0.717041 0.06059265 |
        | 0.013916016 0.09713745 0.71383667 |
+CHAD : | 1.0480042 0.022994995 -0.05014038 |
+       | 0.029708862 0.9903412 -0.017059326 |
+       | -0.009231567 0.015014648 0.7522583 |
+WTPT : | 0.9642029 1 0.8249054 |
 252 random bytes transformed to linear XYZD50 bytes:
 	345632 a4d61e 4c6617 190e2f 1e1149 5e4809 4d8927
 	6c3b2e 1c1711 6e4726 a1a315 4d5f0c 2d442c 44268d
diff --git a/profiles/mobile/Display_P3_LUT.icc.txt b/profiles/mobile/Display_P3_LUT.icc.txt
index 1582b5f..452db31 100644
--- a/profiles/mobile/Display_P3_LUT.icc.txt
+++ b/profiles/mobile/Display_P3_LUT.icc.txt
@@ -29,6 +29,10 @@
  XYZ : | 0.51512146 0.29197693 0.15710449 |
        | 0.24119568 0.6922455 0.0665741 |
        | -0.0010375977 0.041885376 0.7840729 |
+CHAD : | 1.0478821 0.022918701 -0.050186157 |
+       | 0.029586792 0.9904785 -0.017044067 |
+       | -0.009216309 0.015075684 0.75167847 |
+WTPT : | 0.9504547 1 1.0890503 |
 252 random bytes transformed to linear XYZD50 bytes:
 	2b5330 99d30e 456411 1d0f33 221250 674b04 3c841f
 	7d3f2e 1e1811 7c4b24 a5a409 4a5e05 26432b 4c2998
diff --git a/profiles/mobile/Display_P3_parametric.icc.txt b/profiles/mobile/Display_P3_parametric.icc.txt
index b4f0427..2f49357 100644
--- a/profiles/mobile/Display_P3_parametric.icc.txt
+++ b/profiles/mobile/Display_P3_parametric.icc.txt
@@ -26,6 +26,10 @@
  XYZ : | 0.51512146 0.29197693 0.15710449 |
        | 0.24119568 0.6922455 0.0665741 |
        | -0.0010375977 0.041885376 0.7840729 |
+CHAD : | 1.0478821 0.022918701 -0.050186157 |
+       | 0.029586792 0.9904785 -0.017044067 |
+       | -0.009216309 0.015075684 0.75167847 |
+WTPT : | 0.9504547 1 1.0890503 |
 252 random bytes transformed to linear XYZD50 bytes:
 	2b5330 99d30e 456411 1d0f33 221250 674b04 3c841f
 	7d3f2e 1e1811 7c4b24 a5a409 4a5e05 26432b 4c2998
diff --git a/profiles/mobile/iPhone7p.icc.txt b/profiles/mobile/iPhone7p.icc.txt
index e30a69b..458cbe4 100644
--- a/profiles/mobile/iPhone7p.icc.txt
+++ b/profiles/mobile/iPhone7p.icc.txt
@@ -25,6 +25,10 @@
  XYZ : | 0.51512146 0.29197693 0.15710449 |
        | 0.24119568 0.6922455 0.0665741 |
        | -0.0010528564 0.041885376 0.7840729 |
+CHAD : | 1.0478821 0.022918701 -0.050201416 |
+       | 0.029586792 0.9904785 -0.017059326 |
+       | -0.009231567 0.015075684 0.75167847 |
+WTPT : | 0.9504547 1 1.0890503 |
 252 random bytes transformed to linear XYZD50 bytes:
 	2b5330 99d30e 456411 1d0f33 22124f 674b04 3c841f
 	7d3f2e 1e1811 7c4b24 a5a409 4a5e05 26432b 4c2998
diff --git a/profiles/mobile/sRGB_LUT.icc.txt b/profiles/mobile/sRGB_LUT.icc.txt
index d3f17ce..ba047ab 100644
--- a/profiles/mobile/sRGB_LUT.icc.txt
+++ b/profiles/mobile/sRGB_LUT.icc.txt
@@ -29,6 +29,10 @@
  XYZ : | 0.43603516 0.38511658 0.14305115 |
        | 0.2224884 0.7169037 0.06060791 |
        | 0.013916016 0.09706116 0.71391296 |
+CHAD : | 1.0478821 0.022918701 -0.050186157 |
+       | 0.029586792 0.9904785 -0.017044067 |
+       | -0.009216309 0.015075684 0.75167847 |
+WTPT : | 0.9504547 1 1.0890503 |
 252 random bytes transformed to linear XYZD50 bytes:
 	345632 a4d61e 4c6617 190e2f 1e1149 5e4809 4d8927
 	6c3b2e 1c1711 6e4726 a1a315 4d5f0c 2d442c 44268d
diff --git a/profiles/mobile/sRGB_parametric.icc.txt b/profiles/mobile/sRGB_parametric.icc.txt
index 2e7e426..a31fee1 100644
--- a/profiles/mobile/sRGB_parametric.icc.txt
+++ b/profiles/mobile/sRGB_parametric.icc.txt
@@ -26,6 +26,10 @@
  XYZ : | 0.43603516 0.38511658 0.14305115 |
        | 0.2224884 0.7169037 0.06060791 |
        | 0.013916016 0.09706116 0.71391296 |
+CHAD : | 1.0478821 0.022918701 -0.050186157 |
+       | 0.029586792 0.9904785 -0.017044067 |
+       | -0.009216309 0.015075684 0.75167847 |
+WTPT : | 0.9504547 1 1.0890503 |
 252 random bytes transformed to linear XYZD50 bytes:
 	345632 a4d61e 4c6617 190e2f 1e1149 5e4809 4d8927
 	6c3b2e 1c1711 6e4726 a1a315 4d5f0c 2d442c 44268d
diff --git a/profiles/sRGB_Facebook.icc.txt b/profiles/sRGB_Facebook.icc.txt
index 88c71f0..d03ca1b 100644
--- a/profiles/sRGB_Facebook.icc.txt
+++ b/profiles/sRGB_Facebook.icc.txt
@@ -28,6 +28,7 @@
  XYZ : | 0.43606567 0.3851471 0.1430664 |
        | 0.2224884 0.71687317 0.06060791 |
        | 0.013916016 0.097076416 0.71409607 |
+WTPT : | 0.9642029 1 0.8249054 |
 252 random bytes transformed to linear XYZD50 bytes:
 	345633 a4d61e 4c6617 190e2f 1e1149 5e4809 4d8927
 	6c3b2e 1c1711 6e4726 a1a315 4d5f0c 2d442c 44268d
diff --git a/skcms.cc b/skcms.cc
index 99b2d87..1b24afc 100644
--- a/skcms.cc
+++ b/skcms.cc
@@ -266,6 +266,7 @@
     skcms_Signature_mAB  = 0x6D414220,
 
     skcms_Signature_CHAD = 0x63686164,
+    skcms_Signature_WTPT = 0x77747074,
 
     // Type signatures
     skcms_Signature_curv = 0x63757276,
@@ -391,6 +392,12 @@
     return true;
 }
 
+bool skcms_GetWTPT(const skcms_ICCProfile* profile, float xyz[3]) {
+    skcms_ICCTag tag;
+    return skcms_GetTagBySignature(profile, skcms_Signature_WTPT, &tag) &&
+           read_tag_xyz(&tag, &xyz[0], &xyz[1], &xyz[2]);
+}
+
 static bool read_to_XYZD50(const skcms_ICCTag* rXYZ, const skcms_ICCTag* gXYZ,
                            const skcms_ICCTag* bXYZ, skcms_Matrix3x3* toXYZ) {
     return read_tag_xyz(rXYZ, &toXYZ->vals[0][0], &toXYZ->vals[1][0], &toXYZ->vals[2][0]) &&
diff --git a/skcms.h b/skcms.h
index f458784..789f975 100644
--- a/skcms.h
+++ b/skcms.h
@@ -186,6 +186,9 @@
 SKCMS_API void skcms_GetTagByIndex    (const skcms_ICCProfile*, uint32_t idx, skcms_ICCTag*);
 SKCMS_API bool skcms_GetTagBySignature(const skcms_ICCProfile*, uint32_t sig, skcms_ICCTag*);
 
+SKCMS_API bool skcms_GetCHAD(const skcms_ICCProfile*, skcms_Matrix3x3*);
+SKCMS_API bool skcms_GetWTPT(const skcms_ICCProfile*, float xyz[3]);
+
 // These are common ICC signature values
 enum {
     // data_color_space
diff --git a/skcms_internal.h b/skcms_internal.h
index 551128a..3a82ec7 100644
--- a/skcms_internal.h
+++ b/skcms_internal.h
@@ -21,9 +21,6 @@
 // ~~~~ General Helper Macros ~~~~
     #define ARRAY_COUNT(arr) (int)(sizeof((arr)) / sizeof(*(arr)))
 
-// ~~~~ skcms_ICCProfile ~~~~
-    bool skcms_GetCHAD(const skcms_ICCProfile* profile, skcms_Matrix3x3* m);
-
     // 252 of a random shuffle of all possible bytes.
     // 252 is evenly divisible by 3 and 4.  Only 192, 10, 241, and 43 are missing.
     // Used for ICC profile equivalence testing.
diff --git a/test_only.c b/test_only.c
index a9ae0a7..1689a4b 100644
--- a/test_only.c
+++ b/test_only.c
@@ -275,6 +275,32 @@
         }
     }
 
+    skcms_Matrix3x3 chad;
+    if (skcms_GetCHAD(profile, &chad)) {
+        fprintf(fp, "CHAD : | ");
+        print_shortest_float(fp, chad.vals[0][0]); fprintf(fp, " ");
+        print_shortest_float(fp, chad.vals[0][1]); fprintf(fp, " ");
+        print_shortest_float(fp, chad.vals[0][2]); fprintf(fp, " |\n");
+
+        fprintf(fp, "       | ");
+        print_shortest_float(fp, chad.vals[1][0]); fprintf(fp, " ");
+        print_shortest_float(fp, chad.vals[1][1]); fprintf(fp, " ");
+        print_shortest_float(fp, chad.vals[1][2]); fprintf(fp, " |\n");
+
+        fprintf(fp, "       | ");
+        print_shortest_float(fp, chad.vals[2][0]); fprintf(fp, " ");
+        print_shortest_float(fp, chad.vals[2][1]); fprintf(fp, " ");
+        print_shortest_float(fp, chad.vals[2][2]); fprintf(fp, " |\n");
+    }
+
+    float wtpt[3];
+    if (skcms_GetWTPT(profile, wtpt)) {
+        fprintf(fp, "WTPT : | ");
+        print_shortest_float(fp, wtpt[0]); fprintf(fp, " ");
+        print_shortest_float(fp, wtpt[1]); fprintf(fp, " ");
+        print_shortest_float(fp, wtpt[2]); fprintf(fp, " |\n");
+    }
+
     dump_transform_to_XYZD50(fp, profile);
     dump_transform_to_sRGBA (fp, profile);
     if (skcms_ApproximatelyEqualProfiles(profile, skcms_sRGB_profile())) {