hkdf_sha512_test.json (142113B)
1 { 2 "algorithm" : "HKDF-SHA-512", 3 "schema" : "hkdf_test_schema.json", 4 "generatorVersion" : "0.9", 5 "numberOfTests" : 83, 6 "header" : [ 7 "Test vector of type HkdfTest are intended for the verification of HKDF." 8 ], 9 "notes" : { 10 "EmptySalt" : { 11 "bugType" : "FUNCTIONALITY", 12 "description" : "An empty salt is a valid input for HKDF. It is equivalent to a salt with n zero bytes, where n is the size of the underlying hash function." 13 }, 14 "MaximalOutputSize" : { 15 "bugType" : "EDGE_CASE", 16 "description" : "The test vector contains an output with maximal output size." 17 }, 18 "Normal" : { 19 "bugType" : "BASIC", 20 "description" : "The test vector contains a pseudorandomly generated, valid test case. Implementations are expected to pass this test." 21 }, 22 "OutputCollision" : { 23 "bugType" : "FUNCTIONALITY", 24 "description" : "HKDF can generate identical output for distinct inputs. This happens because the underlying HMAC extends or hashes some inputs. This test vector contains some HKDF inputs that gives the same output as some other test vector.", 25 "effect" : "HKDF should not be used with variable length user defined salt." 26 }, 27 "SizeTooLarge" : { 28 "bugType" : "MISSING_STEP", 29 "description" : "The output size of HKDF is limited to 255*size of the hash digest.", 30 "effect" : "Computing outputs with a size larger than the limit allows to find colliding outputs." 31 } 32 }, 33 "testGroups" : [ 34 { 35 "type" : "HkdfTest", 36 "keySize" : 128, 37 "tests" : [ 38 { 39 "tcId" : 1, 40 "comment" : "", 41 "flags" : [ 42 "Normal", 43 "EmptySalt" 44 ], 45 "ikm" : "24aeff2645e3e0f5494a9a102778c43a", 46 "salt" : "", 47 "info" : "", 48 "size" : 20, 49 "okm" : "dd2599840b09699c6200b5cba79002b3aa75c61b", 50 "result" : "valid" 51 }, 52 { 53 "tcId" : 2, 54 "comment" : "", 55 "flags" : [ 56 "Normal", 57 "EmptySalt" 58 ], 59 "ikm" : "a23632e18ec76b59b1c87008da3f8a7e", 60 "salt" : "", 61 "info" : "", 62 "size" : 42, 63 "okm" : "c4af93d4bae9ca2b45f590cd3d2f539ff5749d7b0864fbe44a438d38a2f8e5afe01641145e389c989766", 64 "result" : "valid" 65 }, 66 { 67 "tcId" : 3, 68 "comment" : "", 69 "flags" : [ 70 "Normal", 71 "EmptySalt" 72 ], 73 "ikm" : "a4748031a14d3e6aafe42aa20c568f5f", 74 "salt" : "", 75 "info" : "", 76 "size" : 64, 77 "okm" : "62ea97e06051e40b79deb127a4da294f557cafa3d7a90a75c02064571dfbbe4699129bdcec4b39eed7757ce8e3571589f7d8f5523c0dc3fd6a56b099fb4bfd51", 78 "result" : "valid" 79 }, 80 { 81 "tcId" : 4, 82 "comment" : "", 83 "flags" : [ 84 "Normal", 85 "EmptySalt" 86 ], 87 "ikm" : "06eb26f8ccf28580c8f28d5b4dc47a49", 88 "salt" : "", 89 "info" : "d5f081e81e8cf9ded199f3ae43c80a2dfe3d9cf2", 90 "size" : 20, 91 "okm" : "952b7dfa219f167aa8a86a5f136dfc7aed1848fc", 92 "result" : "valid" 93 }, 94 { 95 "tcId" : 5, 96 "comment" : "", 97 "flags" : [ 98 "Normal", 99 "EmptySalt" 100 ], 101 "ikm" : "c181696a19ab1a32eb6e81b2925d8990", 102 "salt" : "", 103 "info" : "d8c8de92fe5422c9825996354db1821ba43a81ac", 104 "size" : 42, 105 "okm" : "bd646410b4ef179e10369db6d7e4fe841e7915f8ae793b8f49149c05a0cee691b234c8cbb51c8b038b7a", 106 "result" : "valid" 107 }, 108 { 109 "tcId" : 6, 110 "comment" : "", 111 "flags" : [ 112 "Normal", 113 "EmptySalt" 114 ], 115 "ikm" : "55fb6dcc7802354e55a45a6e41858c05", 116 "salt" : "", 117 "info" : "dcd590e418b259c64fb9e139b3a1280d5de8400b", 118 "size" : 64, 119 "okm" : "725ac2b568fa0308ea6baeb2175ae9a0d41f8be1af13057f0646ba56389a8f1d8a783da95fc7eee4897a0b1580f7987115e03508feedc335260a293f01afdb98", 120 "result" : "valid" 121 }, 122 { 123 "tcId" : 7, 124 "comment" : "", 125 "flags" : [ 126 "Normal" 127 ], 128 "ikm" : "c27718560fae2515acb17a874991d357", 129 "salt" : "4487f538b65c9058625057b4bbdd93e7", 130 "info" : "", 131 "size" : 20, 132 "okm" : "35f274d31948fc03ce2c06501aaefe1b033655e8", 133 "result" : "valid" 134 }, 135 { 136 "tcId" : 8, 137 "comment" : "", 138 "flags" : [ 139 "Normal" 140 ], 141 "ikm" : "be0df9811ad0bf3b08358a3dc4a05981", 142 "salt" : "c98618bfeb59295f8bf1dd3804b1bf2c", 143 "info" : "", 144 "size" : 42, 145 "okm" : "c5cc73041ea99289bfbc39aaf64595129b461651c69d3de5297d66f844b4d59257be9a82bddf228630c8", 146 "result" : "valid" 147 }, 148 { 149 "tcId" : 9, 150 "comment" : "", 151 "flags" : [ 152 "Normal" 153 ], 154 "ikm" : "529e91a61895f1c4ceb5b6994f48783b", 155 "salt" : "12e4ae515328983bab2d88da3cb32a95", 156 "info" : "", 157 "size" : 64, 158 "okm" : "9c40abb65d7ef9826758a9818668624907b2bc0d9ff6b80d60673d2fdd68418874f48bf1960d75e19c6594d7079b6b019d8e3ec98705a6b4886e122c9eab955e", 159 "result" : "valid" 160 }, 161 { 162 "tcId" : 10, 163 "comment" : "", 164 "flags" : [ 165 "Normal" 166 ], 167 "ikm" : "c360e16084cfd13cb44b0dc02d8665de", 168 "salt" : "685ac7df93701d6c78babd847861bb3c", 169 "info" : "e0ddfaaaa7afb53f59a007a205c7149b5b5a72be", 170 "size" : 20, 171 "okm" : "17408c6f8dd7eb8423758ce39a91b59020f7debe", 172 "result" : "valid" 173 }, 174 { 175 "tcId" : 11, 176 "comment" : "", 177 "flags" : [ 178 "Normal" 179 ], 180 "ikm" : "0cbd136d66d15a4ffefde1303b430821", 181 "salt" : "2614d80275b08a1cf90bae0eb607d4d5", 182 "info" : "ee991de21aeb6baa6a5f683dbb755e6f80db1c1d", 183 "size" : 42, 184 "okm" : "e51c3bfe5f4e9b4fb0d3c3a67bb33a20c288800e03707621cf143e8581d422dfec3fe658ba8fa2e35c2c", 185 "result" : "valid" 186 }, 187 { 188 "tcId" : 12, 189 "comment" : "", 190 "flags" : [ 191 "Normal" 192 ], 193 "ikm" : "7a00817689a3d79001825a864c69c120", 194 "salt" : "08bc01c053a6406c7c4a667c9b9b3894", 195 "info" : "967ccd75395be6e96a67759f070487c9e2107791", 196 "size" : 64, 197 "okm" : "aed987bcc5ed33c4feec7b28aa9fe1c16b1181e00ff42c63cf692ec19242f6d4628604b3382db0806d5e61518f83fc651e6f3bd0a9d1322926a76869b98b75d6", 198 "result" : "valid" 199 }, 200 { 201 "tcId" : 13, 202 "comment" : "", 203 "flags" : [ 204 "Normal" 205 ], 206 "ikm" : "d003dd047181bd66420b529c78aaee1b", 207 "salt" : "5a2737f637eb905ba5a480d51a721c012f3ff9701d9c4fa1424f1f5f540f", 208 "info" : "", 209 "size" : 20, 210 "okm" : "16641bfd5d6e5551cae116518a26a1a7de896b4f", 211 "result" : "valid" 212 }, 213 { 214 "tcId" : 14, 215 "comment" : "", 216 "flags" : [ 217 "Normal" 218 ], 219 "ikm" : "75d085427d397b263fb3c6c8e0c40b6f", 220 "salt" : "e2141b0dc65348632396a25c6d7b6ffabf55686532544c351860635b7c86", 221 "info" : "", 222 "size" : 42, 223 "okm" : "28ad85d71323bf7311963124b13a534832cb386ecfb9f3a04c995cdc189816a1034a536c906364b75338", 224 "result" : "valid" 225 }, 226 { 227 "tcId" : 15, 228 "comment" : "", 229 "flags" : [ 230 "Normal" 231 ], 232 "ikm" : "63984079a2540d0bba5d2700642104c6", 233 "salt" : "70b2a476c9a80e52352b503901a7afea41c186bdc872d5053448769299e8", 234 "info" : "", 235 "size" : 64, 236 "okm" : "4505108ef681eb9d39dfcd7e54d3273907fbb06d468d8f3a2d2ccc01cf1792fb4796242051fc770c12a8f782dfe47f3ad0c80248cd5ab28db46c8eb27a2153d1", 237 "result" : "valid" 238 }, 239 { 240 "tcId" : 16, 241 "comment" : "", 242 "flags" : [ 243 "Normal" 244 ], 245 "ikm" : "ef7c6fecad5a8674b65b78c1d696d9a0", 246 "salt" : "ee9d00f7d448d4b3a206bd7e7fb8a9a6564ca80c9e0eb6ef61a4933c157c", 247 "info" : "35054b8177e4ee42e4e51bf60e91c3f56dcbaa12", 248 "size" : 20, 249 "okm" : "55993a8f74405846fbb4e22515088db8cc28096d", 250 "result" : "valid" 251 }, 252 { 253 "tcId" : 17, 254 "comment" : "", 255 "flags" : [ 256 "Normal" 257 ], 258 "ikm" : "f403b6c59bdb751b3f7b9c97fae5226f", 259 "salt" : "9139e549297ee26eae5afea7ee012e683cd7e59b5b8966f55f6d18ded11c", 260 "info" : "27d06c3a2fdb5c97de4506e1bc1311991660c5f5", 261 "size" : 42, 262 "okm" : "1ac0f389936950af705d587295a878693d3496aa81288cccbbb596aeeae678c2e87602beaea14da6e795", 263 "result" : "valid" 264 }, 265 { 266 "tcId" : 18, 267 "comment" : "", 268 "flags" : [ 269 "Normal" 270 ], 271 "ikm" : "d515f58eed428b2bac233c8538580e2f", 272 "salt" : "c2a3ad9db6621fceb7498c0e6287522077acd2d47b55c09d52e114943b37", 273 "info" : "14de8cffd89e49275f69d2e1e6b43fa0c3775451", 274 "size" : 64, 275 "okm" : "04039af015d1b63b0af171e0fc283c06d19a0e4b1093fa5f8c721d85580c52799f13d644543c2249497492f55029ce9cd19a29cd84acbc1488724941a3fc97fc", 276 "result" : "valid" 277 }, 278 { 279 "tcId" : 19, 280 "comment" : "", 281 "flags" : [ 282 "Normal" 283 ], 284 "ikm" : "df27ab960ad87bfe2e173a4659e3546b", 285 "salt" : "1e7ec49981fd4b0b7c20dd4dd5bdfbf2195e707f4d0354611b4893b8a86f61467aca2cf726ccc3ef0b0b4f3240d945ce506197e2be00322b17b48209c312ef9f", 286 "info" : "", 287 "size" : 42, 288 "okm" : "a1cca923d8f07cf98d658b425425a146a6cfea8910dbfee9a28962d0b1a1f40716ebfd19d094a1bba684", 289 "result" : "valid" 290 }, 291 { 292 "tcId" : 20, 293 "comment" : "", 294 "flags" : [ 295 "Normal" 296 ], 297 "ikm" : "24a37db03dbcffbe9e28d582d0d8c60a", 298 "salt" : "4c3d3b4f5436418713fbe2fbc4d647095ce5d5392dcfffd20327187e14fb68360b94c5122203292d8b648a754ab70f6d3d61e0650f06d55c4b5762cba0231e27", 299 "info" : "8cd9e7b786a74bd370bae434e31a559bdf75d65f", 300 "size" : 42, 301 "okm" : "ea18185ff290f27480f625404a39d56582a1bcd8f74f97cfccb898ddf2611833ed57fa46e88e145b604d", 302 "result" : "valid" 303 }, 304 { 305 "tcId" : 21, 306 "comment" : "maximal output size", 307 "flags" : [ 308 "MaximalOutputSize" 309 ], 310 "ikm" : "83c6fa101a922bf4e0ab38c1853b82f8", 311 "salt" : "7ea9bd3ed65fdbec456e4859209d0e87336b0a04bd342fccede6fa4cb12331789a9af13d3c96e955a74550883aa5a80e055ad7682a26c8b2343088d05f15f80d", 312 "info" : "c893d162bf0036e4", 313 "size" : 16320, 314 "okm" : "c80c2cce5fc294e1e680e665bbd7aac8f4fc270436bf0d016022ef38a2c44790eee8cbbd7215e4a5664ab22c8228fb8eb384d120e1a7fe80eff18e03e8ff41fd3968470ba1cacf52ada34d31fcba1fbb7b6f5e4ed784b20e7b06d943e52cb8e795f4aaf4b4a9011af559d0cc7d7bada79c3c2b24d5bab8ad8608b8ee8f52ddd394e508f5e5de4c04e2f38e3fb6a549acca336a4f280e7b3c51ff63d2008e38fcb8d7a7ce0041c936b42551ce33e37426efb23c648a9933c5941e66457fc4b35b3243757f3b96545c5e143ddf41fce2674c33cb044dc10251e321571c28db9aa0e6cbc84b237881ac4b75b32a8fcaddf1b2e22ce79accf8b7b106700def60046e944a4465db26ef67dbea1c0a152086684f6b00f19c3b714cd4750cabd539d35a408a66f90ba5d3129b2037566b912949144dbe9fd30d4c5aad19dc67957f3c886a0f47e7bb00c131933ff765900b55814546e6f093ca8c74ea7648d1fc2f72d701b087babfebf83b6f599abe5716777ee6ab951ed75fcb9d00d8ecdc851f0727f26a97e90d60e0959da075243a130aa0724d5d63affbf902da38879dc3f82532f0e71596ac29a9aa849f11393cab584ed3664fcfbfaaa11b4cc683685f7145998d08f50254b88235f24e74c9ab2503d1a736bc1c811080bee864c9186067330435939f402bfacbf8ab047741365b2790d78fd75410ad6971b4267ee83668aff63a83cc1c5b333c3afcf240d58172ddd0e2eea97ef58847d534233ae77e8f565b1bda63d71b8c615c44e1e04605d69e9929585db6e426d50791ec3c6040e4d26441f563252b599a543e997250679e816e4b3ebff2f7cd4e421581b3322f7f5a186225908c76eaa864f6ae7dcf19efd0b5ff16e47671c685003042c1e02378265f611d183e0d4ab9d3e2bd3582506335876ba9655af144a2c1aa2c361e4f0812c3c53e657cdc1f01bd30cf222eb8632e852c480422f630d7231e485158981e0fbe59957b60fbdb1a231e9fffbf0108a7f4b0397b4ef937210b5ad6a480a6df096249ae2f9a05b1066e644a1363fba233c0b031d9367c853cab9fe994790cb3618324092948301efb2dd2e70ed55994dac274717eb1296219a9cff564a165bda7207a95af958400561a1c2ca3acc2e2733299b9655c156dd0c6a4ddf7279a106d299e86e671d1e67ffc6d71a2509f67677e87e5c93321edd7037fbb5a9a1900ee423a7162e2109a1f8571396b41bd0fe61f56164f5b12a68e6e3ff48dfa871109fce560fc93b5f50c4d4cb7fdb20d3f8fe1bacba44e5bb9c5f9545b82e932649a5052187c341e161dab48a8dcea992e1f1e5b582e849b4f4b9dc3fd784d0233bb7659b37f32f67cad1fa8465dbd78f8d55632c6cd48d34960fa51c1b29db52ee543c88f64f56df12fafb7ef0a6b14c5f76d565efdbbf00a594a2ba109c4db6123123185b7f7767b0aee6f4ca0c70dd7f461b88b69989fe9d7ef63691899a7e6f9bd9731f34818d3e8d5cc57d85c98e58c78f39fc7a8731b2dc3483537a77c8d1bb8348374988bd29c902fcedf74c17990c964fc263e74e1435eaeb230db42531e806b82a3a0118d9c6fec438f2b6ed3218cc0d483d182e1ed225395a82d78e2b39295dc1c1487f3d941c4470ddd5ed782b1ef75a070bfae771e5a36fc2ae6434396579a226feee1291e15261d8671a49bb6feb68265837dd52635823e788dc8cd3d7c8c0891e16b37f3b5e3220201807f8519746545f1740d7ef11db7944ae8f16eb5adb676ebf87cd3fd78371700f8c6bb546c6658ad20cefe26e738a6a7927685117faaaea0f5b7c61bb45cdfcc4e4c39db522d2db4fb85d5d0687708b40f761a8a2cf91781cf952747ed95463cd75ff10d123bf0d8672b4e8bec7cfd65edbb501e16000b45e0f261c590a40938d087cb0c6ffcf362eadd54240e3e476b010830f286e2e3cdd086da2d5bc7c7591304748d687ae17e2a7169bf5cc6785f77f619145a0396735cbd4a788ac2da850d37ec141405a39b043390d9be2d02790b521475e10e69982c84dccb54231e7e3a1e3be952dfdea3fc2bb9860b8fdf03a101b0bb4fe143eb3b6cdd90e80aba0ac16dd6414212666d18815539c8d7062bdb5077541be9e3c0bb218b35d6e8bd00495aee6b7de848b4ee1f53367704f0685d367ca6bbac7227f1399ac1128af95b2f49b14d758cc55fa3f04f535ffcf929380649439838ec40e92478e8c2735c7d7156ea54b2c8bfcd3f8292fcdf5803cef64dd3a51e92f0be77621b85189fc95abc13e20d5eb97756df889ab6bffb02ddd07b0335cd4f26986d0c50ea0bd30ac525508ce43e0d395dcb22b21caa551e37ef9c8508a3e0e0c2b7d96afbf258b03f515667e74de09372731b373eaeeeaba1456112ec43f349a99a627ed85926454b54c2e5b1d9ddded571561c5d7f4b7d8f7808a97ffaa20252c8de469436003e44839d1ce210c5cd66d9b5cdb79b44681d7fa8c2581609aec13410fbece30ae747f84eb4a6c0121fc1aad00fcf3d6483313bab167ca350308dd67d5d21f42894bef5aa1c3a7e24414e3c1435b22765762b1cc62c2f4cf1ef56a1ce46294c8d3d9f98028ba0d16b03f906d5d7d4766dfd9a7b9ce69480f1e738e12898ac370e729f9b84e4a885a949a26df89016b9b241160094f148890e12deb90a3e4ca6e13579bd020f66dae86f8128a406a71af893e2e278bfc7298923163c5433ed70d717637a52dd1e33824ddfeeb07cfd9198142e73915dfda704ad06e0347f7b43a32c547657d7c6ae4cc1d334543926d1b60813b4189f721003820f99cefa1ed969cb95688ba84ba6e0d284b4cdcbf6cbaef8dffe7df2e1cf64de3873cc445451fbf590f08d7dfdf91f1088578ef944e3b78d3fe2670b7a4721149fc758fc5964f30cf30dcaa5bc493e1973ac31831b09ec2bbdf1201115b3d728805b6e2afd80983f3ce9f50b19dc6c4c375560eef8165f53726c967b6a2a6d8f02b0db1cb3371ad33b759bb51023ef0f0cc9d5f73ffb9764b251b6cb68330d4966a73b6e24dd739c2bbfeea54510aeb23762b7f55aa7d05204d90d88c8fb460a3074b5a9fbdfa760ad56f23d66e0770fc51be994836502d8599ce99e451a7465fb39298ffa0ad469eb05a0d8eb8a85156df500ef0980db4974cd17e7ffe36d77e20674a2492535ef69bab6236f9c8edeab3aa116e159ab6061b2d5c63f247c9c63807828649a3d477c73d7582994afd1ad213035417e1ebfc141e3baac72631f6be0c98c1409dc8b86f37156d17bd31902cecd9684b5dfbdb0b9dc2190c4ba12820a42050bea7ee50f2ae5e01031a81553b3ee5bba96878f8226f48a5df3f46e9d97d7f21b12f9afe22bfb97c52f5012d3f058a839beb613c05be441105c9bccf19a839b747236b413cdb14fa4b7ef6407e0394e32c534fe2d52ea462d3b90b3c18ec687e42551973fb9ec0fedb8a6d98bb5eeaa8ce0020ef391e2a7ef061f677b4b87682de34d6bc7c12dd036db502cb602805172a780b06be0786f1f9559bb6c92a8de4b3f9f18d5f5070668ece9f0f393bf5a3b90c9ef2c0c4f9968b8c85bf5034d74252da8886178d819bb175f4b3d84dd4f3db5ee93a6d8f41e724fc9cac43554570de629cba3c120f709b602a296222cb4d65d0d31644f0386209db0a14830298ce8e0af7792dd281821c4a5de37d0ad3a48dea7480dd977f3930cdbf8ad57f426cd3d4f12974267a4e4b5080b2bcfc72fe41e81d5e6deb77a9d4f127b5618a0192926a39ae09ff0b41463c7c2c5096f9f30cab921c9664bc5f3c9547beeff6774d864b30a5d658e39cd9a52ede1342103aad2cad3e65e8f5820763313277c1a06ed2cbbce4fa382974a852fc1567cb4aa6882a25346c59d376df47ba9d9b9c905d0fa6beeb6d9767adf5ffbab381abf67127314b4db6c45f38e91009cd95dc61ef2c1e4b5b6ad85c16efafcecca14b98f419eaafbf4eb135bc573bf48f6446a4e971d5176795d926c2b22ea3af1029b244fee1cd909a89ad5a4d6213c7272aab8af59ad966af603d272fdfb8d519d8cd2b809db194ef662e6a4d573168cb68eaa673d1fa95a115635ca776a1d96285b5385d5a046150558eea7d29de77c1e1355de55e307ea607c80dd29b6c71d32ca23829d26580f464ae3d38aa5f18f82d1e5097089a8bbb68c1ae3969bb9bbfb5a99d0ca8fa47e0e184dfe69b18af99f1ca5c66d7b980c9c1481bd5099743c3912bc171d44eee0c4e344141a5c8f0a36d473b4174a1632a9202a7c28f4bc63a3e71fbab2807838aa1807dbfecc757c08a19dce0d233524c2f8880df1a56c58c446417715f3d2d50446296e6a71cd48ff00cb17e1f367fd4e30f0b0b9f83319441ef42ec7cf03eb25b03574548c6f9b61f3b9413044c370ee1ab0bcb58dfaed52110e65fc9375f10ef40b01db48d1d73d73213b4c6ac5c08a901e1a813c02023b7e7e3b31bdeb58eefec6832ab906c9363e2c3598f99d2a0553469a4cea4ce8e8e530a9490347b652ada4d4c5e201a6365a988a715b08fb4492b52352efe4ba1334e5f737281c67b71db0097831d81bd6921e9982949af2ca410dfc5076368ee5679257ba1cb44d81665c67a74082c4ff1afbd663d6616c3940fefa522d9aa3573ed3868af411a9acc9cd863636d89075da66161689e2b41b0d57126ba0e7697dbd9ce5c6898357dd0e5fae2b8491c02cde0d081c7487e57adc42a1587298690989bf26ce08642411b3c9b02784e7a766fcb10b6a74715cf24abcb4a98dd0aafd63c2d5233ca316a2595c701062d57be8e5f83c53b6400b3fbd2cd45a6e80630ed8533b0ef5499262a5f6ebb1827d882c1b9c0d0342b368e05d6d6305428d37911433c5582a76dc0ba36d21e3ce20fa689ee687c8841f8de6efba671f5d79c9fadafb4d256db5be66e582b5b08b078097aba3338435a0b5a71b73b39ed03daac668c3b8a3fc98602ecd0c4512b7baca1b4c77180346401560af4d90fcf6ef25bbac7a695d413ab530548799f800d2c047d8390a37ca2438be648abd553f47094b9e7c5eabc9ad1bc2081351ec8b8a5aee3ca6d29e2422ed8b6b8892a41f0757a4a4140dd93658212e39d683cab7fb85ba362f552bffb4767c4e667a579cc90da14fe6c3e69ad785168ac4920628ba0a441e0c357594b8de117d19f52087c387abfc0b8127cf378942f1027fa786d68f9ca1ac0b4d2cd7bae0f0b8e33c9ff92a438c4ae3b343a3899a8aa659accdfe25ce127b4f716defd62c1958bf0f6c522e6e51dee83678edca87b5453aea98a07586d2510af259364ce786cebfa41b1528c87d9b2d371b3481bd213a656ebebeb1915ce582ff9e2376d3bec60b60666ac7af26ad0f443321e01d3d7d6174eadc6ef8e506f99f267aee7b974e15681c390c26b5017dd554272860dfb5926f54a7c4a961b41687121ad925e9e89b24ae9c6b77e988efeac6641f568b31d3e5848d05157887e02bc213e82ee376a6778f3ee5d471a15903993113dddcbc11c30dce0271a8323cab2e8de330d74cd4318c241f337546036220f73b8383731fa41a198090736807058e4fcd8bd35682a835aa0338682274475c97d35f057d45fe91580a990006cc465503a3b680808cc2abb9a911b173894ecf6415ce14c3dc453400b35ec1818d490881a15fdfd43423b6c3e1e8494a35579d85f09e2547b31780e5a7da13c8b1a3419b0f5437485b5b6c2bc3caeb45e6145cc7873c6a0974d386901aed7301dfc6ce6044cfe703c50c1a7e745821c7f2f2fa69f9125f797f76c1bce53e2890f03da5d1f5f5c2d812f97b666fd33c26cad64f68f9b579d711f111f3ddfda01472bb7289e9a6c9ef6181ac237952e649b1c35df39ebaa90557d6fe3898c73299ef7a5516f58c0a7d8bccefa9a990ef7fecb7e160c4b1e2902b4d9b7c90e01c51c0ae42600e57142be6e143b27be602445a8f36e37baad53324a4df6251424f8036e0828ef6ab5cb3519817963fab0f8a5aaec4f68435dcb586cd4c3cab899013b052c6116ae8f09806c69e5feff2804db503e79c56c74550af0bebe3e49149bf826aac574675a60b4e3bdec8d956ac0fc075a0788d12f7fbc6463049f87864ea2448b2275ceb5c220f2f99e9982e1dc380c8bfe201cdd8cf19af84bd3a859d1fc1f2ddd78919bc1c9fd3982df33e62151eb97486c5ac70f1d282df0b995d82bd1f64b1d34a9d5f249293b6aa4bfdea8a6afb3029ca90387b7f506cc127965a96515aecda6ea5e317cd66bde1ed4ef9e71965bf8a19338d49d692d69fd494002d540069e9220ecaa0e0cc42ea6bfd0e52a71262d01125f0634f9d9eef1de0fc4fdaf256472b80f4a214b87fc83f74303228f782cd7138e38d1fc7f0bf4e9391b7cecbecd9cd84e49a9450bccfcbc7cde1be3a8e03ea209726affb0339e6acb80acab9692d3faf1398a69ea38cc83858a5c84515608dc7c33dc4ac4dbc8a3c07bd07fc3ebb2fc73e7530aa9a095745507707befb5dc080eb0622ec30f5589a26497d7005344b07746e8dd62839aa52066350cdaed8733302e6d4b84883a0300b6fbe82a99f87cf371a091a31202775a4d6534b53fedc419dd426b6d407e06afcba98d20ef40c19f20e274c73c0a831ded3ea77c0175e790e4383a034b255dd37e3b0ca2c7af1db79407b555d967fbc5092388bcbac99495d3d6c5b222b3eb9062fd61d2267cd4d90c9505531dac82b2bc68758c31ec1d4a7cc7eaaa4b22d4ae0b5fe44043e82f531ef2e0e195e6897a6fc0b6ad2f9ea871e2758db785870f3375ec66de62d875f300f2ace0da62da8bf982aed42d888d332e6ee906ac854d6dd3be37d82b6e4602918430716bdffba599488a1de044e0ee8f4b247a675cde185ab82b25dc23279f4b289071e43f7dd624be931295d6ab1306528149d284b916b50d0efeb4afa013c7bd58382cf396b0de6ff23b1f94988a5810f26134bbb2df140d1f6728e783b450b6b79f36482986f7c106f50434a16baf4634c9e8e14d186d365baf733f6519d6b55382041a4f9fff02c94ed369aeb9574c373ca4b4e87d794b1bb65061bb85ebfd1944ac29e92861110e29018c41814023b28c0f3327e882a7f77e3eeb44328199ac35cc4163c61a4d0b6688a479e0a83a3d6b18de247d5653bf8cc62adda429093bc8e413c4cca9119372a495b1e6e248f9a00671534c8436ebd0be32965d4a898519269667e4ef4dcf1fec8a159b4b566fa3085017276728141027c0c4a3a62051998f46232ef6aa9367a671dc2144278996fd84aeb81ce7e5ae26b9bce409715746fb85a33c42f38e02f768e38a75f5fdd5bd3d1ecbefcce339f5f7a25e92e7bbdaca12f9f3d971f586d3a596d087862afd23c04d5a252ea33c182d5c328bdaa27862886c31506ec60a3e6cf1192598033e41c00a58491204c094bf9106d89578d9a723e2e7c532843f4676eece77c96ed636582c04ba6f9cd26f061c151cb6a029f8be7e852b25e2b3624d87ee23030948a07a0615af0208fe470d93521ddbb0273bed1f32a0eaf74c52296c4f91e8049409c90aed77ee43517dbfd74810f8942c1b360bc50235f062329b72837a70e77e195821e01a087567010962ed00c24fc932a083b42e373236ad6ee7bf9437c4bf71a43641612b090ad856a8bc153d226ef020527dc63cd91b1bc1cc0b0d4ece08c5b7719a6eb9debc6a05b5c6a8ee33c7af86e9332b72c098a11769f34b61b1e5ebce37a6a9e2fe54f5d0d1b16fc0c90ee70e3d573f362c4de0405b29dd19a24395ca04f0b1e4014103b9480ace52917bbb66b4746fb96b27f5ac521b635e845f5c17692ba4dbde0526cd65fefe565c75e644d73780c757f4da950f1b2521646fa3ebe7b513c081b4b7acf5912d26e410c7f295bcb6ddc4ead5a977a157423ae7034e0d2b5962c4f5201da0c3e4beb3e81975c79155f43b8165e0074dedc91eba01cb10693800911a481cbc1090fd9fe2c09dd587a2c91e36c483638d4af82d79582b02308762bed38618f41fdaca6365dde39e458f993986700329eb4d1929f2de6ff4badce3ceed5845fcf389a82a7cd6ffaaee5170a29e10218f74994ceeab2b5c5777ebd50b3be22f8211e67c0f649dc624531de62243dc7d6360cfd1477f096143d574207c36e1542b4c9eb0f1b9084922bb61c1916a03f27529f3c97e98bbc2d1a88695bebe23d879c69491b697cc94bc676879e84e57aa2a7574c3124cdf0b532031e551937fa6ba352f3378a43a23811ab0c9cba176f0f37b5c868a4e1df6eaca0959cfade329201b41d797ed7d27762d8d1778803ed8883572f2c45ed3e185ed94dc7897aa42e2a1100edc4b3aa7864de1694f5922c00a0102525830c003d5b72cb51dea8f07f96d8498ae058f432f61f657f1e27db8eacbab7c4930e8197b43a40d86441d974243ed45c6e9589750633030efed4d9446790db8fd21061b44708eb5bcc8da1bc261fcbd00d492f5def81a86f758dd4c9080e6e32437d74cd57ca24a9cf96a39259eb937d75e750a64d0d9e102f4420342a11b5ce9d55ee4106233fd1370513ca9039aa35b0f55a060db466f817649b4adf11d09dbbbbb8ce9cd9d1434e187c24de006117203bbf10fa3ece16827b198724a179097f1c1cc1c3f983326acfdfb5be3207f6c38c29808dd72c8e77f0987e24c287a1b9dff7fb66eba6ed41c9e42cb2999691d6d0aede0bfaf7714ff3fd2fdd7e7c3d2cb4f29064514aea88255997f66bfa11fbe1d67b7acbb1211e5ed4d7f1138c78fe41c1b66539e693a05e1e14d7e608e25c667957febe7dedc43a866d4cba4dfeadf207ecc0826cee9c75de9c4f423b305dd6a8696b1e6dcdb7d3e4f9fcbe7749f5ddc0c59980431b0413d9a292778a11686c080ada1a077b028d84dfd917f34743a1e3af84e38fa60e3846c819ce887568c3d0965873b33b1f3f876f7e3912add330f5886e24329e64b9ab7dce8350cde011105c213711e1e363576fa5ebbb32e938a0302da80f38c348f4097fb11e0859a1541f14dd9d9d99e93465ef28d201f29dfdbf008db8e0d43245e7d2041730ae8c0a4ab5d1c9b5e672966d30652637da2c9c79c33a4db45bc22f54323eeebdd28aa9d3cf85d2535cbf8eecfda61e5810348c99a55c94d6a582e58308697e82a8fe0f4f48041a1b9b8ec80c501780b6ca1bf7182a1dba3b942817d3523b3861231bacea2d34304441e68962d10c366c786f26140b1b89bc6de67ed97268e87829acfdfa76ce480906592688699f18a855655ae5cbda7a26533ebb42302ff9bb1d9e436168cbbe09d9b711423cb1bed327ab66321f7ccdccf20e676057a97c7f6d9ae9816ad34c6009c33034f435bbbe749d2b9b1d6ba4f6b28e5a4ba67c0ee48ab8300e386dcbda99e6dc9a30290a6dd862fc6e8273892548df9da9ff9e296688d70f404cd5846823c4a35c4670f4462ad705102cbdc9bd819e57b0c8aa81fd32675a631077734b647367ea6f0f808b0b88b81e985283bab8815d29a016383397908abb72c0b941594bdc5d5af2606e0be9349fc1e02daff58660ba9ca0c1e29c84a3721b76b6be75a8e3a1a07039d15c29cd9982349d611213ead52b582e7cf077b28798ec90b57730613658a5180b57363486bb822406ababe39bc76d1d0a9c77017521231b42f6451a539fa577954238a8a418c4a69eeb8c0806c0c89c1d70de9dae1ac479fee530b13f806baf15dc47a57753895b058cae6c68dfbd92ddd11addb76ba54aef51d178c2647c19ebe8f3d636d0d61e42e36003d619079d9bf21131a60b321ad2a2980905856dc90a53fadb7c4e1bd1811faa5e313b08c5ad85f2f9f8433fd96716c0d6054161346acbe208c5a2aae2788c8d925303ca34f229af621ebb2aa8ea888832030e78634916d1b681b5b1cc3e9250406370d44a83551cc53972fdfbff1f7912ce8a0f602a5b8c9a49f351b9e3b08ecb71431cf591eefd96f40ba8cc535ad24b990d6e01b9e49706e308b205bc314c1fc5810c02afda616f8544e5bd685ed0b28b5ba7a2def1b80d073b228fac1b2e8283458ade9080be5e5c1a099b3e771e99241def3aed7a181ef604a194814ea8a5acf2601c59be00ea06e7d6da43ff3e150b6015075a33409839110325d744f913704f7d876ff2bda73b2f3d9f33443fb9d73412f688dde591bac9f6b2a3c31571206d5cbb211e74738a68672356bad89a0b6538cf64e43232c7d44cc0310d90e39d3a8b1fce334071f343970f75e0ced49843d0c17df64d6b2808111dfe8127a5e1679fa1e966a5107365bcad753436312ec68ff7bb453e8df4b50635a5f5dac0fd011063d7ae70f843b19982be29df909cc899c3f2757e9bb39efb23bf2a02991904619896e5a0afda7d98086bedaa9a991aa7e2102d02c8846cc2cb084c4d56be546361678f0086e5da8da2a685e72a80e0f890ad5f0a1dd60dc289e297192545fe9b8e987b5f2ef72ffb37f873f8db82aff52ee1a06f359de8034178b49cd948e45a8086718eddb5659a3c429ef3dc8fb63bdab08126f083954b6c0d127c17f866d2bdca4ad4883956e8969abe003189d44e90170eae75d477dc3a8eb8767f07ad2c47cf5332af7144f4dcfb14af292c7de41c507a933c25cecb8a0e633d78a65ff33588fd2dc260630f03a3686702428ad97165447ae056cab4bc9f36489f410f252f4109c75a861c8dcbe5d28fafe28967a04868a7aae6c665d018a21f0389ae393eafb1b28adfab008414955db2d8b831666be5e33302c709d8bbffedd8853ef64afc80f6f58b9ea105e6a213e7c7b350ae7aa51dcb48d8a02cb26d7807bf5ce97c6d1f3e4f1c0cf92009b89f2a44ae10956d7905f6b7f78fa2dadb952fc92347eeb6d4393d98f89a2d17eef0891544b42db0af904a91216437d3c8e86e0a26cbd4a6532ff0d22f1941eab4e075cdc33957405be2c53467e538ec91dd4e886f1d1072ea0f59d5c64147a101c5f449d881a19c9a9f6eb579c127ebbd63a095e33381930e79b35cc2830fbd764a07bbd0a3cbcc73a68566d765037526ecc47d0d8c7de071d0f9021845959a38ed281c7a99d5b66ded3fa4ec436ac901a258dbb6e477a5d0d4ce7664df13468cb4bc71971643bf28b749cb76837a0889c315154affa0edc7b23c1d4cd4e89cc92f23bb2d6835489ccb802f8e25a41b5e66f84409aedcab4b7e2571758b685d00973ecc94bf28a31273aebfdb760226f3dffc76d40c8f3ca37a51df3c6c14b398d9b70c5e9d8d6cb5811fab9b8fdb46fd11c74afc5e1fa945f620c7385d9298ca8cc9388ea415fcf9330945c9503b89d84290b35a5dcdee7a1300311a4a20276ceb822bd7d1690b8bdfe11db478d54fec95af47ce40dfd39b3e379b8c47aac4e20abff36e92038dc7c33955848869393e71fd9926cee3eb15e932efd5e79ce6f77b16ded87e8899b7bd293a0d8ea703e768ddb175b69b14971c3c7d4e87d28a994705cfd0b56b0bca5de9bb83b610f489707b696f66d78e2a7b71aa2c6341b93466f51260888682a28d33996104cca3398f18619f12e2c063163b9ce4ac601d72517cd63e0a402cbd0b4be9729852e4e9bd739fbb76efc83ff2b8bfd716eca614c66a2a931e97df933e9699db079546d78c6ed9c8017d55eff236282702b34af889af4ef83ee1c1aaa827ce88e35160cf5d4b6cce8f1fb317b0b3081bdbe83250d324dd2d31dab60815e4d695f26a81286247b63555f1a3b3e25e3ccb5ef46e95f6eecf7180c9101ceafbe1ca435d3e0953fbb7fda80978e255fcd1b2f5932d6effa7aaac7bc49221c9820aced2b6193e4beddf5b4aec0c2edef3434f54d1b63dd5ba1d1ff76dd6e0e68163130c97ce3511ef633d496a28232edd280f8c460c99d64aae3ecb2b8380dbc3144d455310d6a9e07fd0b588bbe73b20c70ac427517f7a126ab28e413cd25ba6a2690d8c9ed505fe3c3c43235e78fe00cb6f57376732707c2f11141964c46a7b6fc40df942b2e74caf37e593ddd5058db9de4c488a099bf6dcf00344f1e01f333b9e960c87a1a45c23d2755ead06ed7365c546b36b09c28d0262e676a8d7d8bfeebec6b490867ff8a1c2a87dcfe21935f3851bd5b4dff9faef34a26f0e37e52e695f45cf6eea72b8b01f6f6b8be1a0a13f1727a47e2414319f117e0c3f41523f48ddeaf897aafcbeb082bb1a36c98370c6b8a44b05513143df85d18aa8f40af20c982d2531035b1fa06a8089e7eeb44e37b161597d3c3a4fdc8bea26e3dd412102d313a2c3732e40d205d4ed466bae2d33962ddf0080ae2e63ed969225432b85f28fa6a0d26e595a0318994da8cd1b1e5ca2105c5fa0bf5e7e16424ff34816df22c2bc6656bd895a98d817e9afce6160a1b872ea0b585cd589ba266955f7c4de9fb5ee6181f26ba4f0e9349afce30c5fb3f05b58a706c3dbf48628ab133904698441c9664bc8be7f8faf352d49f6a422c47624422bcda3899d073ced89d73676408834d782e48ed5e281845797e82038f2c88405027013c5f712a5d14cbfbac675d38845b91ddbff07206fa756bd1220a8593107501689404738b35c2884b3768bf9bfb268b106977ac8f69e003a5dc3459e7f27dc386f624c4c4637f3c0f8f55425331de97a82094c7eb23969b4a4357d01490499dc8a0c05f6198cbc3bfce7c7029de665e794db541b27b165c05332723bb9977f9f4294650e4576287029eb90eceefd52e9e0eb35ed69bd878d8b5881161b509e3cc18086356300e3b1e7c6be1fa153ff2ec036680b3ef0dfafe85c765535e810ebdc27c0873b202966ec2c5ebcfd78d3a6345f67a2895350591f9957b86c6ca1efa0064533f26640895b6e3d1fb2e79bd3aaeac85c699ee5da37df1fd393ab34438b624ef95aeec08ca1ad9a423d56394783cf8f9ffc29502533dd6204d73c12bfd17601564ef2ef38bb2418a68e3cf3b054a289b02ce758b07b20812a1ab9577d90be54d9c1215257129108db10cf9c76d1b454aa65ca9c94111fe39cc6598800b7a6e7fce6852f85b3e9096e34ff264f6ffbc575074dd43472f5ffbd1913cb0c88c49289f40b403395d04dacca483c4744d4f6b6dcfe579dd23295dbbe3d4c35fdcff7c354cb29786fbf41bdfbc92a75c836ce7081218539059fa98de66a3f2d48f87bb120adaf2b22c6792ffecf517faeaa798d6b5f5cfd61fe66ebe60cb6a9aa0fd952c5acdf79557eb19a65ead27e717c2a1f8c974f13e18b590a7995aff2388de981f75ded0a4686b73f6fe78c01d0c9a0434f3756f41e125ba514d081fe0fd3c15c2c283d14b87b384ba8758c7f61835f66dd81956ef28f2267bfe61437e26f4c83982f3c6bfc671489eeceb5df5071277f1efbd53e521b8cbbca4fb09c539514e90954e960a723fba7188d106aa97ff2ca9b8f9e28b2ad7b8e34c559970508796a9d622337c9ccba9665a067fa9433043b4801a391484bdb7ca4fe4a59e38e28eb486af8ea469facb0f8d7451d7be96d622405acdf63eb4703d79f6e8cbc8459c0a5f15c479087672fc86cbdd733bc41fdd78aedf0e60c9c1e1f268945ce4be44cd79390fbb73c113df2b4de3699d6cdace0afbb6d5f4b395b72d16dbc43c50d7cff247e6de4fe268e1b86ab6bf81e730a7af3956ccfa7310620d367fd506d34a557f14d414f71a24074107f33e33ce4d3bcb5debca04e7ebcacffaa8b7733a1698f4d89f72cd79895971af3cf7812d7f29e932b59b69b39c09832ccc35141ce0bfb9db0dc9e28c8e97d0fb3878d4a06c5468f7a00b6a1e7a6f4ea1cf5b9559d407e9929ecae60984a6d245a107fc29d0fd597d935ae306d30844c5f3385cfcbaa2f09ff29202dcc9858e1599e4bc2228e24937381fc22a5d8f9ddb68789f1b2bf30927fa1d3c2238d77d25e8e307f2c2505eb664221b4bb0705ac26fac092ee43353afbb49d37263c084afb70fdacd5f47360b6fbb18109f46e6bfd32b4446b23ff096ed371fd0940a612cf3f84ce034b565cc30a7a944e3068acd4bdd7c686c7f9d50c36b0a5d4ed5390d9a91e48d9c2e8bcad5cbb948676b5ee817625a2f1f28915a4355abc3e1a41228c86a2f4a4587a63db93aa3e293b9bc409dd39d3d7e576801bdfc67f7ec82c367a6241fefb73ffac4722909958371d52fc74d24a45ccf2dfff1da5d3d25db802247cbc5c4145c2479e4a1e7dd6613b011adc2ab3fdf45942cf36db85c1aa85837383243f8b7b767b2e3ff22b079c6bdfc93a8416b20727c3b0989c01ea6b3b9b73ff64f458258f646be12cd24ede68b7e0608a47973a2363aa4393270c3775a22ade83675d55bc44d971347804dd39f7f55fb7ec3c14dea7556ee015b23c9ecf08eae8021263d442999e8c16068c2ab9fbc9a106e009bd7650926e882fb91a248bb3cc4049544fb022ba5e29400986860ecf37ca2019005f224b4146c9e080e9f4fb69632aa9beeca7cd61c214001e2b330b735c71e4c111512b712018fcffb3db7e052fc98b698a4d55a6da15b390a0e87cf4cbd4d4b2d4c1f3e847be4c2bef3a508106bc9aa491eb925a9fab98dd24e29f51a74dddd98725f84c606a6aff8360613f2b9909cb2e71268f283bbcb36b2f64a07c00149dde19f39c0d204bd688b75a066dde11670bef78ac1579bd75759437704e68f5255f5a0180c00ba140e08ffc3001c41c4d1d492e931816070bd9d048252d025dbf079a97ab405b9ccc94dd5cc7cf02bf42df662300dab7e2d087c847ddcec8faf826b743872ae905e14b868f3ff58de4a730589eeaaa9247255a6bdf30cdc6855f4057ecbcffe693321d83bce4badd4ce4214e28dd56b9dd6f750bbd446c89374a050f117b78ec9f5059cd5f9cba4020227bdfeec8cae28e07acee502f65ba6e27655a276ae7adc004243454c23fb1b061600f439a79f9b553976b38a0f13d1127f6661590fbec13fcec5b43d7daa5362dd057c85f6449ba42958ae2a54cd5fd6cf21e1bb90227c84725f0d55aaf383e835c0adce4feb26d322cd548fb7ea7df4f2e1da286ecd02060a63024d83e5efc3cb9bab9237c0d63060716450bf33c15a26e6a8ea22a73d8353d5cc5d11bee90e80d206d5555f75c2386ad459cbf0e767fbdc6aab031eea748aec34a3bb776e128805a494628632ebbfd39210cafc96ab9a15e24dcce9b15f947d8c4e515c0a176882b12e5c4264689b64be334fe36a63534e2143fef9f079474cbaede32c45b742ab949a506f73147dfe1b4e44ee32f7c8cbe3096584be6fccd554b655f4e5db56778a6253963dbc1b92802fcd0457e59efea112261ff937ec8d6bd16d5ac81775cca6fdd608fb404f9ff4fe7ffb6c551a2bf75315fb82708f26c31f3b59a8606864ac575fdffd787e859d562b478080d2b60e951f760aeb8ddd07ddf3e1523cfcef2c7cecac3dced65db2725eea297f1debe26792bb4bd5825e544163281bea068a4f9f4132446ef594238d65332d41ccc0d9451c0c4dc95fb862478521b6a51c351415754bb32cc7859411a894af0152bc780283cb7509b4461281a5b27898cf638d52a7ef69b6d3706935595cccc60175d501be50e9e5425f2c9cc5929fd817e71db7daaa0df8cb3ec45f09727c5a44498d853c543a08bb77f11bff1dfff9d68a586c158102116546d0b3a67dd8669a4fa920a529544b62a4691b091014b4042b24644e048cdf3f2de65e9a2a9096663f1372bb2cd7483d8eeb30a64bbee3cf868236ea8563d1f8a9d0263c71b5a4c346b214d6e8f313c17cbbb80b37ec818dc1476f4ef0c1edf07b91b4e1c76346955224cd8754302d69f24c54989d2e332282d53b867293e0dde497f1796ae699866fb353c99e28b73d91d60bfbc3c7f4f7044675e8e9c7da7eabdd7aa070c39ecf31bb666d2b4fee2ef9c1ba1e3e20674e4cdb068ad52494803ec5a29ba7a89fa960949a41259e529a4864df4ace9a177aec4a076e2aed1924c88e9c20989b0c599fb023caa3f2f21046afd2c07a61375a9cc5b4bb88ea5ec3b38e24febfbc12c3a0bddfb01400045051d3d651391fe867db6a0072621954c00d892afc51c088b0649cb9d065b125be532fdc4704cd587175ff1879d39f38b82dfdd5310656302b1bb2f13768f879be8a0c7ff44a5f5267efb4a241433fe0b6e022ff360cfe54adeb25eaa73b894f1540e200ffe676030a196d883dd991b5f0298b270a196742e231c1f67c985cc15412563d1a58718e1788096d1b19c34191da27b3860fca54c6270c7bbe70b2c8b344e1fab78e68ab40888425a073e8198bcc368f9e36f55bf2567a38d7092b99f131966fd6a726a01db56b3809f8da246bf54aaee5ba9433f944f748429d730fe9ddc131f635210d7e98296bae9c6abf42c4e797f611b8a75e245860147a29aacb63db2c60965d3057d59a3685578f505d90ac2c8f22b47bf1343cd652aaccbe348a96c6b38c4f23d3c32ce12b76c7bea99adb6f196d377e6a1009a10223791a6aaab8561f658caafc30c9feba62412cdd689305c0da758f9dca8a74fcb913c3374b733e998371589c749a48df20a16d89fd718652c111c6c2be8ecc43b83dc102462b63b34fa88f621f1975ed683f5f967dc0a43cdb1b52cab0a89cb5f47ab79be7e69b456772540d3b50dda10a6095e96b204960686d77c2f13b0f7d2a7112f1e91b539d4b02243b7a0d46d1deb1a8fd9cf4ba8e75e266a68d970b5cc9ef2a54f380fa3f57f56f5e8007757fb3ff1c6ea25cbba00d28390a8fb19e457582c85dcb4a0dcaed9743204fddf45f0460e27bd10f74bb62b840b6a30fcb9b01a0ce5ba86115c28433734fa485607a9680b361279c06b5fa71c11b6c9bc015697684770b43b77b65e04fc4b67f351fa9d98397818c26365f1c03f721be979ff2c720378a9c28eab7cd951d8f563c68a31adb101fec2868c1f34dc0325cf750c215ff1c4c948cc7ad10ef518e760424ddb5f30435c3f601e46bd42799f83580147742077b9146a0a70c5dd4aacc19d7ac3564bca108308046b647f17f99c41a699e2245a285d07be4f99c150b4c4e8679dbdf48b5beadef1e85c4c273918e53fad93f9b855c6df26bafe14eab6a90a532d57ca81e842c8426dfcdbc2520671c4b02513dcee9346a16c5ed9366fc60b5a67937ab1c6d15cfc7bc99be2a601ffa80b8701eb6446a1d7397d77db1762bcf98d36a42105e0ccde9cc9a9a875103757a5114ab61599acd59acd3b0ea0671c8bd88adfadb6ac01625319f81e91e6b6e59d99853b671f4b4d91f53c9feb375b17fe240fff25076dad74abbf8e0d25153b13aa729de8d5622c8b02fc4e8543006fba7822e12c11df2ce0d58e03cff0742ad277e2d764529ddaf98624d76bfbedb000dbe1451ba399ac356569dd1fcfbc191871b1262e2c02da9a2a8f35eb788e304f91b5a7e1232df3db3ff8e23bb091a71acccb78abb3ecf50bdb52c87d074424268509f64112dfc1b92afc6ef16d80356b5c8392944e79e5c6d6d3dca7b48d246a19b0903cbe6e11797c61d434ce8e4e0e81f184ff2542c9f6f04e45878dc886285590feaeaaa94b54c14c0f42458c75bdc3d9cf069d38f0614e612753ffafd542178ae2446da23a121d71613a3ba787c9728f1e07d825cf6d8757fe7c18dc5a6626a2d221e481af5b416848ad97ab7e7e4a72ac22697c1ae581e4a09eb5e45c0a74b4208d4a1e3e0be9b92b5e6b8cf65be646f0fc55e3f0ddc5d92316098da12884450d2cedbd2980ba7de271f80bea99e99401ab37a60015702381d498abce2a1a19dac1d9cad76c6f0063d3473b2c511f83193f5fd4cfc35f87c2d12670f6701349850b4eb18b420b2eb62b0b59f230f27e962f164ea0879df231ab06ca5507da4bf6b4c4cdf732fb89c5db7b8360259104e2cb15f5ade28a727724aa55c33bc1fcef9b8c11886cf9c47099d90bff7ece60532c2876c10e73240ca85c5f609931917414bbd13e78f9ade49e5893ea9e2ecb6ce8218dba1e50b4165406bb8fe0367eb013254b3d505051c9d60656af299b8e69f8522ce48a7ab15d2ad6056f9ea7448787de9147c464e5bf0cba26344edb515011499f8cff57bfdc580483dc9d5c5dc9aacdfd1b13e54c247c066a60046bfa109d6060949ae2882107ff5e69106a5bc544c7651f35c87b4d6c88d4c8068bf6c9680619f9bf561e5a3e0f73e9405df42d122b525a16e84424ed4798f9e88126953e6ca71877d73865f6c7241089d2d405dba22bd314a6ca33c7bcdcce2cf5634250c36bff69ef2250bcda28881677b9b38c2744e24dada4d8f67eddcd57f46947e1070cd5bd91fc2729719b47339eece397f5b49ac8f4b1a7c90d32e34a7fa52d647c3335181bad529dd1de162f260b5f26bb9f04bc1710a33b312c1830f12ce9f3ab644fe6e8e2d7b391123379ba2ac84ada7c8817af462392050adf89d730fd4df2a1a8f7c7ea67212c338d9824cbe332d64f7f976c67f0c3521292de4a191ce6b23fcce3282336f34c7619de2b06f5296bd5aee71c7854e862b5caa97c7bd3e5e990e4912dd6a064187543cc0a1426e0b35f8741d2eb7157fa048a15311f23b78f040eed47ef5b04615af98c6f22c1e557c8a1676f2b21f05b1864329b69e1707b960314921a50aa8e801c40182e0cc3805dd982fb8b37426dc1b99adf7df217b8c5669fabcc7da0107a0c544bf456b83fa0412d0aebcca6f3f5a8f0eacd7339aa655e55c80b8828fc5d80ae7cf63b614bb665a0e3dc8ecb9c2dbc8d76c806e99ca7c25fe8b5617be583f5a747d3732345a5efce1161543489492800385cd464b021c661b2f5483b0753f387fddbb33ed82a9555768cafcb519370590c512248ea39fb8fec0a3d0c0b86cfa38c8013ae9531c95a01757449ddd796f9aaf03bf3a815606f4d6d2954d4c332450999616f4ab51bf483313aac2ee17579522d8393ffda0f179cf25a103fd911d5edc6c96e25bc2b71c065e0193c27679ce520153bcbdc37865745ba33376c478d1a6b1766cdbf70ca3bac6bbbc7ced5c522697cf31d97058fc78385acac5f0b1908d15a02a744f3d62909ebe355c955bddd09f0a5d0e77a7e52b11c5bd70ed941757ab100eefa19213a14ffc89e0e597461d42447419da9d9c514f7a3c5667be6511291bcce1bc4215ce8d103cc14548188bd9d00d6bc8d313e9e740fca07be7fd42912b30a0eff8468d45aa61a08294a7f5b4ec8c34fa5dee0b015f75c242c2f342aa5591ece71d7c31d3b37a5601f18b381ae6612e268c442a3ad5493975033ebb191be23067766fd4cbb1bca047a86efac6ec0e3271a7215d839919eac36db290e3ef4ff51d2d542a660c7f5660970a270114cc0344b3e71aee7b56e23aab65eb42076ad70a7d0590bb188f39c71ccb805362c26525c4c2da860cb4f6f4c5f7c834d11cf67567e781189f2c6168d9b60ee7ce79314768d3c5c7c9fd1a822b36b3df8e229c782e8a39628fb3ed727c4afd5b973c4d855b03c2136e3101c51769c7a059335bfda70b718f744a2a7d45889f433d6f4dcc61141d8d865218a93734795a5beb3b665a79208d0114326a494dc8931cf3841317e77961474444601547425a473e72cc334dfa5f7e6b7d653df159b6c2280ff9d4d91d557e043b4c6249471f3b86d7463b4e1b9837aaa225b6efc8e3fb1b16d855c162aa9dbdddbb6742437f0546caded819cb9c4ed1eb87886839b08460c437b13ffa6f491df631dd815a7635307f987dfd61c9e405e6d52bd1d9abdeb1e84a042d4e4e0dbb6bdc6564762f7fc21e01c60f9d08b59b660f9f64614c20fbf1e87b7d92e7c5a0766c5dc670cbe2129e4271c6affac22fe5939268f192bef09e85a6490d5d14b81937d047aca66e00b94aa1e7844cf39fcf50baee9a0e376901d938a0fc5c1c65d57fe12c4fd08c1cd51399981df254bde17ea8bd845ddae21255f3a2be1de1badc67ce83ef9e14cec8bfcd00f2ba52e7872ce611bc122a2132930b1998091df191b666863b2c55974b87b898b2772e2fcd0230886130b46326a5a13e32da22495ed0c5d61af4b6eea1d5acca087671fa896121f6d5b76e6163a23110c96de0b8885d22b60c3a5ddb9ffb25a61e92c03fc915aee0cf129a34f4b3d0c0bb6da2ae5c6b403c0f31bb51fb42d30fc8a6ca521c755a7989628bcaf4d5a490310b5771ec3691a93d9c877e550bf8e7c20fb685074694f773f155321fc9b4c25c618f6b5cb40ed73840fdd2f4f6d9927b2d195d995dcd5dacff3e8aad984ef87f05c7275699f71956f1c5d3bbab56e47a877a46c601e2535bb499369bd53f7bd60f64ee8774be9a3e7a5a30635149597a8ce14ee263d625d5e2169cdced2ada1931d3e25f6f56eb21e19f481d4d1ad2fb41cb748d36ee17430aafd1d1ea3fe28f13476721147ea7652a5b5c15533728645d050e3917679d14c3c5c0cae67e4f5521184c007c3f40623a1dfbd61e60073182dd9f0699d78e7f00c7f6deac5b83de2737aa75287c9830ec6026fbc9b5fdf984527c4483651354c6afe28aa1891dbe51493c843a3a658f73ce42db06b28bfb32677b888ee3a736961725c83fadfa0080e72760d951801d4fd6bad10b3f568f02a8afabe16ce124485ccf003b5db322fdbeb537b9a90071383e2dd84d49693aa8ea51aef99011e20db99877a45c4b241d1dd3b511be7e96cc59804f0ccd5f0aeb839dfde198849996c6614a3ce10ff5a815ef30261101d7575b97f5ea8e1f9ea93e924c7e8079440343d2cbdc40c8c9673aef575bbef27c670b97917393ca002e0e6a47235e3a1c560e0454287aeded12847b702693ae502b8fe8f781acefb337e11e7634e3c149f9b314852ace9131d22a576144adce159875b52bf96227e7b481bfb6985c965597ec06f868642f9fb670d5d00b54cd9dd7f42a700294f8574a0bbba0d511bb643bddb32b4123d541ceed36a8e5ac0e6fcb11e2858d4aaf790d6e5fc510677c4097df66fb3cec79e96383adbcb0215d04a2e621ad68cc2c89133713efea98ca2639723313d539bc8cf2937b2cc19ac5162f8eaa908f62786006860abfaf432057db1b1bdc639e344bc21706e5a16eb78ef7494fa2c19a0824ec3cd3139eec781e21cd01319d23352bfe3d984d0b32c3d17f23d146b3424079fdd90971e2b2c3a7664a5c46ceb59eb45529851a380d02e7f5ab103025370ac1a5152069f1ada9f5c5a96c5b09542d63697da061d3540aff07d78184c6f35c919b3dc4d0adaa18e428980e0e7df8cf48dc5f5d6ae57080fd577a33f222c4efcbeff953fb07c020170a8b27477a98d5d86ed6a83feb6ef21a3ef31329f68afd9db9494e388dce6662a347ca387069f77574ace1d602c4bf0df31cee7e93cc828d9cf31d0d0b82826ac3c2d7f1d02fcb7e5341fad1775e5d004eca2a559dd287bf84864d5fe86cb1af91458d4cc153587005910575398df5a9bb110814f39fe5385f6e283d73cac7da3ded167369c58f43bcc19c2651451a45813f0651c782e4575e0e15c7a6523224bb77109c2b0e17d3483ac262539578e50115d3c2d49d3abb0fc88b8ec81f8698c3a95346d86b00ead0cf41081f06e57b7a7f49badc1ec752ce912e82a286385035e5faf26045c225e9c02568a0174fd0cb47987b174af0286934f0b33936f428244635bda504bf787d2b4ecf36c65dabf1521fd97b1767bdfbfa9326df05425f4b82b9dd8bc21bb80913823a4ddd1f3d9a3c808bc20e49c7f3d64f1a4f6a34b6d3f786d785c2935de30349f6b9030a9a8574e15ff4bdfd7bab47c6968b972667f5abb7804fb029270b4863d71109ed78402b1c38b975c347d752e4b6f793d26b6f3d177668848ebe0c147f5ab38440f2886b9181c239cd460682f32a1eefb43808587791f76ffee415360099bfce0332054a989d581afcf5ccfd708da06156f0ee28874dc4f4a50ce145b4b615a47b6fba86b40e93f6e63dfd2b986965b420650fc9ae93941b16cffe0a2b12665c1c6952de8750619c6cc72cfa1f352ca16dc85f5a1cce20010540e267d847dd8382da7df231ddf4f4f2cd9a5b9af3864e90226fa96f7552e2f8c0cd243cbad8ff8856f5dda56c4433ead4c6c1dcb1174c64934ec5ee0fdf1dc6e1eeb4293b5436249155b643790888cbf9189de3cd62111d7d8031caba6c255bb0665f0a272248fee24e7e73d60a0fbdca8a58188b6cbf3c777043cff767f8ef2470ccbf2f67790c86964127844146103a7aec1f01c277d3a0e2ac64106dd7cf2c839e2d7d9c546b8ec7da99181fd2112eb2024b0c06d7c252fab50fb26d88861550e1ab2f1d7c5372b75af9edff7acae6efdc3b7b6bd0e662c80aedff6563e0221ab23e92efa6576f34e889c3d0434bc51d254742f2e19cf5015c42a23ac02893799ebe131e5289505a4d2be51ef4c51096a34574968f7af8e89a2f717f8e0f8a41fad0646b367983d7d025cd03ad3a3f85d728f0a9764a1fc8f768002955f1033ee11d378c70d279596b8652e0670e75805fd954a008c8c04a05596e835e084264f14afa3db663a4dbb800354bfc0f586caa566c90142ac88c21983ac748a2639c789592b55f044d80af899e40d3e8ed299ade6ddb2ad36471e7002fd174708cb29c3015f6ab5d83698384764c4c2200335b4ce987eb94144deeb76fb98b98a7f833bdc7f469b93cb4db2da6ef1f685a5453675275d64991963f1b2d8bb4087ea6efbe02caee83c6bb8b5b165f1e1a50a33c66309f3e4aaf109d1cc0cff396428be67a8d06290630305b0edc387a9b39738521c402c124f92ecf235aa45e5130efdfa08aa7782f0915d04bc301e529a4d291ab59c62ba26a4752aba1466dafa13513dbae8783597409d906a1badcbf652edd4ff60fcaf4acd4ad44ff453c928c9def00112daa0eb11c0a5bc6cb21657ed32e2b2bfcef20822c2323506b0882ed1018ae08c3aee3927bf1f16874807dd41131ea272606f357d422d527343ec8749dbccf070472cd7b0355afd6a3fd41138b0332cabfd647343ad92214a7ca302f1beefd87d77c2a465200e6109675f3698974d04ccc3790da286dd5bb194f1f4999252d28cc443137c843763e3e5b5d32c59", 315 "result" : "valid" 316 }, 317 { 318 "tcId" : 22, 319 "comment" : "invalid output size", 320 "flags" : [ 321 "SizeTooLarge" 322 ], 323 "ikm" : "68563b0e902eb3cc65fbf7f115845b12", 324 "salt" : "c4aed79aa346a7914b43668ddc839a249652dcf11b8aa051bcd1796d1ef5e5f766380b4349333359a1177d0c082b1f0de90bdff1fb60646ede4f08a2b1f63786", 325 "info" : "b0aaceb3b0b8c885", 326 "size" : 16321, 327 "okm" : "", 328 "result" : "invalid" 329 }, 330 { 331 "tcId" : 23, 332 "comment" : "empty salt", 333 "flags" : [ 334 "Normal", 335 "EmptySalt" 336 ], 337 "ikm" : "d04f44faa4542b34f958d8a863801f2c", 338 "salt" : "", 339 "info" : "ff6b5b655cbf2421a66d2f28408395a2ce57264f76bd60befd51cbfd9474faa47a97a9aa0f0e4338635633023cb36da12a3051f1f369355b687304e74c5218b315", 340 "size" : 80, 341 "okm" : "76ebb3133cbf07afb653393bea4e4ecdab9d8e8fcc5e79e67d5346312ce9e46e937b3393170b811e25f7621923f74e519b604ae2b9884fe2d7202782ee9e20100f95341d8b6ff1f39db23bab7b7edcd6", 342 "result" : "valid" 343 } 344 ] 345 }, 346 { 347 "type" : "HkdfTest", 348 "keySize" : 160, 349 "tests" : [ 350 { 351 "tcId" : 24, 352 "comment" : "", 353 "flags" : [ 354 "Normal", 355 "EmptySalt" 356 ], 357 "ikm" : "fa4f94e9cdbf725c1ee98decddbe42ec06196116", 358 "salt" : "", 359 "info" : "", 360 "size" : 20, 361 "okm" : "1bddead290e98a3726cf4f2df65f1a646790ab88", 362 "result" : "valid" 363 }, 364 { 365 "tcId" : 25, 366 "comment" : "", 367 "flags" : [ 368 "Normal", 369 "EmptySalt" 370 ], 371 "ikm" : "094db4e2eaae8fc9dca0d9bc14b29387fd476921", 372 "salt" : "", 373 "info" : "", 374 "size" : 42, 375 "okm" : "5d886d50661c06ca236f75993fe6de518625e6538dff9a0d0d2ae9c08a34918df9f383175f8aadc8005a", 376 "result" : "valid" 377 }, 378 { 379 "tcId" : 26, 380 "comment" : "", 381 "flags" : [ 382 "Normal", 383 "EmptySalt" 384 ], 385 "ikm" : "bfbe4f1edace02b2a3afcaada5f319103996dec9", 386 "salt" : "", 387 "info" : "", 388 "size" : 64, 389 "okm" : "19386d2148e4d4e1095227068d7e0ec5b4576cf04c7005fa9e75cb35e3843593cde6b6a366a496d40616b766ebfc017ae9d07375027c42875570b7a6bddf6720", 390 "result" : "valid" 391 }, 392 { 393 "tcId" : 27, 394 "comment" : "", 395 "flags" : [ 396 "Normal", 397 "EmptySalt" 398 ], 399 "ikm" : "71220f185f4f2d436fa88b61f7ddf4a10948385e", 400 "salt" : "", 401 "info" : "f392a656590cdd585a06ad4892d2381ad0616a99", 402 "size" : 20, 403 "okm" : "9bb65de816d6a10da2f5485fc068da22b11e0c66", 404 "result" : "valid" 405 }, 406 { 407 "tcId" : 28, 408 "comment" : "", 409 "flags" : [ 410 "Normal", 411 "EmptySalt" 412 ], 413 "ikm" : "3a0c2c84ea46c152104d794261413412bad2e846", 414 "salt" : "", 415 "info" : "1cf4f37e0cab71a252100a2925a8703231292a7e", 416 "size" : 42, 417 "okm" : "b62402a3fc2cdec80da3f6f3cb82d3384bd432d8c70f9205f3b4afe0f5367dedb49f6d59f16c8148fa5f", 418 "result" : "valid" 419 }, 420 { 421 "tcId" : 29, 422 "comment" : "", 423 "flags" : [ 424 "Normal", 425 "EmptySalt" 426 ], 427 "ikm" : "59b7fce05176a56f9b086b2e9e526b4491d05d27", 428 "salt" : "", 429 "info" : "d0e410792d888f355baaae8e17288e982032c231", 430 "size" : 64, 431 "okm" : "7900b70b5de87eae6426d1a3f31346b4d3162fe51f24000492ff9e86b301e7652b097f660fcd6a08c52c39b693eea175bf4462810bf05f4bb20c83ca68ea23d4", 432 "result" : "valid" 433 }, 434 { 435 "tcId" : 30, 436 "comment" : "", 437 "flags" : [ 438 "Normal" 439 ], 440 "ikm" : "e1dfecb28787a93133763ba4760a55a2c20ab407", 441 "salt" : "0b86a968f9d45bd38ffc2369a92bc66d", 442 "info" : "", 443 "size" : 20, 444 "okm" : "5f0956ba2c2a5791e79b845f2166a3391a6c192c", 445 "result" : "valid" 446 }, 447 { 448 "tcId" : 31, 449 "comment" : "", 450 "flags" : [ 451 "Normal" 452 ], 453 "ikm" : "0941f7af65e6848cc218317a9ec1ecf26d21ae3f", 454 "salt" : "eacad2915534af8106c4abc66970ff0d", 455 "info" : "", 456 "size" : 42, 457 "okm" : "abed3b7823d18c07a478b193461d81dde110a9943d789302ccd65c92fc8c4c2c64efd52861e4b40b1fab", 458 "result" : "valid" 459 }, 460 { 461 "tcId" : 32, 462 "comment" : "", 463 "flags" : [ 464 "Normal" 465 ], 466 "ikm" : "1e242658cbd889dcc0096092311e9311b94c5bf6", 467 "salt" : "7318740eb205a76ee4ed0df45d0dac47", 468 "info" : "", 469 "size" : 64, 470 "okm" : "704f6284acf6cebbfc47d875e65ef8f323719d95e3098a09f7660d67cecceacae02d5e1a06f778f7d82b62d19880b60535601144018e1e912f5f2d053c524d63", 471 "result" : "valid" 472 }, 473 { 474 "tcId" : 33, 475 "comment" : "", 476 "flags" : [ 477 "Normal" 478 ], 479 "ikm" : "163f690d4439dbdf6dc57042fecb79354bd3e7c4", 480 "salt" : "30ea55b5fdc7e509d001d710b3a032c9", 481 "info" : "6a05fa82515f27deb3d27c80fa63d2b6edcbb372", 482 "size" : 20, 483 "okm" : "d4e192b2678b47c9cb35ba4c4039c0b47ed100e4", 484 "result" : "valid" 485 }, 486 { 487 "tcId" : 34, 488 "comment" : "", 489 "flags" : [ 490 "Normal" 491 ], 492 "ikm" : "f7ca016ff5fae1cc11628196efef8ad174c1dcb9", 493 "salt" : "e3519f32e44952385308db5455878cc4", 494 "info" : "53b94ea0d6e0da9145a0ffdb5cf708889b9747fc", 495 "size" : 42, 496 "okm" : "21d2a8acca87a853ff2f1edb90135878cbd29b630f668680a417c00ca73fa8cacb34e84f2948402c1980", 497 "result" : "valid" 498 }, 499 { 500 "tcId" : 35, 501 "comment" : "", 502 "flags" : [ 503 "Normal" 504 ], 505 "ikm" : "1c352e65590b2f763aee9f4404c801e7a04b2a8c", 506 "salt" : "ecd6a227d7ab14c068bb917c861c8ec0", 507 "info" : "3acb9582af1a9019126d09422e715519fd335032", 508 "size" : 64, 509 "okm" : "ccfe347502994a407b1c2bf03db4503948506ee2a99a11d7813ae8dd57eba27b8f0a65e5c4db66402da0e46740feb1794f854c8cf88b3a5aae27565f5880ccbf", 510 "result" : "valid" 511 }, 512 { 513 "tcId" : 36, 514 "comment" : "", 515 "flags" : [ 516 "Normal" 517 ], 518 "ikm" : "2e4a156988235208a93e4aef6143653b55e2ed41", 519 "salt" : "9d5b4c7c1b7537300d4dec31f0395e8da6eb826d7fe38a0abf4b762d696b", 520 "info" : "", 521 "size" : 20, 522 "okm" : "d9a79a3b8fce13e55dc85f0928b7f9b48363243b", 523 "result" : "valid" 524 }, 525 { 526 "tcId" : 37, 527 "comment" : "", 528 "flags" : [ 529 "Normal" 530 ], 531 "ikm" : "61a281d49fc0bd3012e1b7f5dc17e980cf611ea9", 532 "salt" : "80f768a758ec5e45c0f2e3fd349e432347be89d25e00817aaea4a1c510a9", 533 "info" : "", 534 "size" : 42, 535 "okm" : "e440ded004511a14dbe7fcf2609518e4bd6bc614d1c5629c0d082d5ca3e5d1260b46f108af1ea60dc463", 536 "result" : "valid" 537 }, 538 { 539 "tcId" : 38, 540 "comment" : "", 541 "flags" : [ 542 "Normal" 543 ], 544 "ikm" : "e94ac367c6f7ce07a3e7f83a1ea4a0ea264ddcd8", 545 "salt" : "5c139fd7769291e5101cc8c1ba44a356b5c3fe3d13b0a68e69b6c09f28fe", 546 "info" : "", 547 "size" : 64, 548 "okm" : "7eb2c44e2595f2d560198961ccae6669fae385e4b404052320a9994826b36b0724e639d02568539d7b12c2c87d3c5a9be000052bba24ea262b38e80bb72efd54", 549 "result" : "valid" 550 }, 551 { 552 "tcId" : 39, 553 "comment" : "", 554 "flags" : [ 555 "Normal" 556 ], 557 "ikm" : "f5d21e4aac89fa725632c707bd89d100b90e5288", 558 "salt" : "989b8b9b79ab82253703ce669a0540d3cfed69d754c902a9365e03c92236", 559 "info" : "b092e1dd4faff8177a97e86716de72f94beecc4f", 560 "size" : 20, 561 "okm" : "75c3eae1d93d28a6a683a04f441092e56d62ab2d", 562 "result" : "valid" 563 }, 564 { 565 "tcId" : 40, 566 "comment" : "", 567 "flags" : [ 568 "Normal" 569 ], 570 "ikm" : "0d3909b7c4593f4469ddc4484a2082ab2ee18be3", 571 "salt" : "9138ad17dacdd0a2a3a3a37fa782ec243258aec9ecd6b3fb5964b2b3dd91", 572 "info" : "6ee1df3a970b9506a3892b59f1acea5e3ca2cf47", 573 "size" : 42, 574 "okm" : "0ca1876d4f754466b99a957346ba556fbbdbc80afa6e17111922d5480a0b77a238f0bc403ad6c1b75053", 575 "result" : "valid" 576 }, 577 { 578 "tcId" : 41, 579 "comment" : "", 580 "flags" : [ 581 "Normal" 582 ], 583 "ikm" : "611710557b5f54c91ee635c38f16222b00a71533", 584 "salt" : "4f7e27c2efd4e2ae3774fd948d95e30d40a16ff799d31bad27b37eda9bc7", 585 "info" : "f3cfd0fe4090c2927217405f339b450553a51140", 586 "size" : 64, 587 "okm" : "a99a33170d6597f7b7c4125f821bff6cc409f1e28c97fbe0257cbf15abd532bf71e83ee5011e01e80850a028a51ac8aaca76af6f2b824d3d8e3330d03e54d01c", 588 "result" : "valid" 589 }, 590 { 591 "tcId" : 42, 592 "comment" : "", 593 "flags" : [ 594 "Normal" 595 ], 596 "ikm" : "8759ccbb7c28d95d8f6cd65c3f5fb517451f3768", 597 "salt" : "bd76fd163a2bea5c840730b4870d168d097cba61ab3aa060a38816a007117dbc245d288c671b6ae1d2d1182a6c6765b13ff2910565660f853d0d871d0baffda3", 598 "info" : "", 599 "size" : 42, 600 "okm" : "3087c97facac2628c25a2cc90193e349bcc58ae6dc435b154141da5aa107f0f00def4314664acda096bf", 601 "result" : "valid" 602 }, 603 { 604 "tcId" : 43, 605 "comment" : "", 606 "flags" : [ 607 "Normal" 608 ], 609 "ikm" : "3b9304bebc8547501091857b81f4e7701218901f", 610 "salt" : "d63f8caf65f43c2b4a5efc56b6f5860450e237cf172552b184b09820784e32967f5ba6400e14315c7e78182c1ed2f5d6964a239d92559c5ddbe16c8e27e62079", 611 "info" : "e239a9e88dad237d5557336ecbd72737122ab752", 612 "size" : 42, 613 "okm" : "c195cdb27740e04343b94d91aba21713d13bbbf9c0a9fec7d94fe13cd0b116ec284c96691f9cccd62b3b", 614 "result" : "valid" 615 }, 616 { 617 "tcId" : 44, 618 "comment" : "maximal output size", 619 "flags" : [ 620 "MaximalOutputSize" 621 ], 622 "ikm" : "8fd8c1ab246467144381776468aad688c051d242", 623 "salt" : "9e739377045b35bfe45f39e651ddbd4978694e61f94045b54341eb396b8cbbf53a9a4831d854aa787ecaf2950797520f98a2a6ca6816246910f8f7ba07e3d42d", 624 "info" : "20914b65e456ad22", 625 "size" : 16320, 626 "okm" : "f49d993b626a46b0983fa2aadcbc6e8d2e785df272445157240501183631e508df27d09e253a40071a6e21b317f41391c69090c6155115d6bf56812177c88a3b4aa10d83697ca29e6947af2b5bcc78ff75430addc8c8765dcdf1505708de7d61ad96652c06b09e8ed3d67e0fc1a95cbcc861a576a28657fd45b2da2ed7219ae963b715438c0175fcb2d34754f0a5e9cb87f0f7957a8fefa4c80674fcf8d18024c64b8d9200e0ef2ca617329a1bebb2dffcbe9a0205c27f64ecde02191cdce3810cb21eb4c29590d1889378886e1afd9a7f6dc0a7d5611f1eb573735c5951b50f48ecdf61093578a19322ad9ec21d61d08cda8d07519fd265b35e9b84d08193d70e4603c101a2b8c5fcad9a68d93e27a2f5619b1921f6b56c7101f9d8970466dfb3964064aa33d5498e7d0c1da312cf008e5017835478a05f89ac2f48215d5192f9e147526ae346eb12a2b0bb38465417d8a78aa0ea3f11eea7e9eddccc769b3bc9b540d79b7da5d6015c021976bf7daa9d4281cfbdf1ce4e1b0f19a6c8b2f4c76780e54b055959376e27f2f75b15fb9bb4cda8fbcb386cf6e08d8d94bcb141f85f671aa9f04ef231a5b8f2227ce5926017632e7da7458a3245b2fd6fa854ca5f9fa3b90ce430e1926627554a41767370fca1eee48fada19ea8bc125e9a788440d5f3a61fec80f25d1ed6760fd1c1ea97479b047f74db3c261adc8eb6f9376238a3c561e725b41432652f530724a85638b050bda77ca8f108997352d922d9332a7d4224efbf90144339307a5f8975de98463ea243bd95881cce064e40ade5a717d12c663d0f41adf2aee4c52ff4afa63db72ffbbca117fb6130d24a1f4342bd3d93816f1787196215bf7c12e6ca2f2f1dd0bf0a5b1f40c9e36042c4efe4158001f61cab9fbac1bde6c76983760164aa669fcc171a9c0a8c5f076ecd2a267d9cb817aa9251e49968b6880946931579b313628b942311cfc16b81f86d60e1889dd5a7336451df2e175555f7c6c1267b23422552c300832913140f826c2d461ff5dddfbbc4321a7bdcfccebb1d5697fc05ef17b85cac632200591ea9a7287df0da699ba7a39d1cb175ec4bf886a0a25e50c893c2caef9ea13cced4164da1fc80a33b0824555ca69c38f4437fbfd995199e60884a1c1bc61d14fee0ba493f0251780a65294f6d62d6955ad13ac0b67aaed2f1060f6578e4d2e519d058b9e53ab8f873e66cb82b546c43037b56bfe59e171bcd2bd936813fd024c96c571cfdf2751f07779e83387df30ba7e4c45c1662684d458bcae538c268ef4bff75ff624feb364cc8b934dfd0654278cc1bf627123652b1d4c5b189afae9c76f45ac7fb9228fedbcd40bb31e110ac58e6e4055c6370b9108401d7be269352d19e262dcb84d8b68c83a59d7f1d157beeccbf316e94aa08a633f1906df30f5e84aa02e5a4b60d188b387f34da0939969a5e6c3bac6669db59e7d13af1e8d74e0e9ce4e5bc302cbb2919e4e705b6ac047c6e049a7c8030b2a3ba8dfffbf58d08848d7bbaaef740adc912219f5420eb4720e8b6ca95ccdaabcb286a1c62e61ab03477b50585a50cea9aa896adca3efebd5f97a27f095dfa643f00718a2c0bd124a17d4a6876f2c3e7a4b8aaf2d97791b970a7c0633d229e8ad089fe68c3c8a23814e5c5945b91651f9aa2d9f2f6c3b158abe6e13119bc9af7d0634fa13ad508695c62127efb699a191added1949f47f241fb7e1eaef56c23c0334c4f2dc40dbf5e2c6b11871bfbbdf2924ea4f4ab3e5bb4197e1b2d0b438217994b5de597c7fe403cd0de265e5eebf7171805265a00901ffae3f627b800cfe29949195d20a7d16b80ec280920c7b8c9c1552f413140d76c3e92cb02b994c5996c75c2e40b283d1a6bd8a050db5cd1d4c247c9e9f47eb7e08529d63161f0aa383c51b7277d635b123c4e6d55bd6beab38a476632189ef46570d8800964804ae1073fbb8b88ecafd0c0e5c397fe58defb375512135b62eff792b8445fb9ed4dcf13b0539afe184f1368f7b670349a5135af8632a688c8e63d3a840afe68d03b327ff033b948b2b024182f9012e954fd2c484c3fc65faba2691ad59b3f635b91d23a1f5a66162350c9cd002717ba4f902388831ce7a0b6e55f37b0186c4097f4862517d5c40a3ba66e9325101030241eb9f9898f2ca8f407421fd7248f9e28001d0e743716a75a11a52bb5b2e0130554ffcdb5059f2d197d8d019d75e4bb74bb427f5863291a01a911d0c72882d89f4a9003124910bc78d90d11428132fd4b251ce823c18299869e94821ef06922fee3e33461bb9a8e1f90049ea3d7a1b0cff1d7f2ce3b1d9bd622331954f2bddcdb887c54833a0c40d3ff8c23b2725a957493b2f1f17f15639260da918dcb36ee91c102b5bb8ed74fe43e2bc2156f415a0c9608c77d926b51ad66fcaf252eb11c44f67bcae7e04e254861e0a21b6eddef26a98bc69333f694b21dc7f9b60c17164d2dee8e18c21ec31d9b0b54604ad147cccd21899bb8f8bbd87b0970ef336dc4cd5fe49b9414e64f3156d209ae1cecbe4937dfd712374ff062f2db92102b4492b30355f80daac24141396eb4a27e0bb9732e5a1e82b1fb7d232f14f6fdcb8986fff6de2a43ae3fc356a11fc62df9612e1be88c472a5c36c70beabd5bae29f5ed307d3a4877ab128e819025836f13fca1e4d62709a529f016f1cfd5268631c198bfd3c362aae2a818b8de96270b60f9f961aad9afe32de7ea42f6cd077769933c87619720addcaafd4f2375a61674fac8470ea7942081c0d5dc13c159a0ecd6fd8dcb2f6270f6c33dc640b70665213dad1709ca1c4f557e7167d9c027bd361d47c3090a489c817759c46cac500056ac64e31354664368773b6a2a7075cfd3ab0ae7b51310f2a81a112306f8b4ae28689ee60c0ed19ff90bef226dc3917c70545f482ceed2f40b74a2f801cc3fce2545457517f3987679a1d0631e51253b0c4a580f9e9c0347f79bb30a124202898ecb0dd74a2d69a40e2eac7b135c3299d8d0d8ad2e17ea123768710c95b7c4f6df4c7a2357db1961eead425d35a599510ea667aa60197085fc45410c832a79578ec964b7f6d7e92c1b3a22d60fd69a65194ae98fccc5344005a79462e2cd5997e0febe817551bb541d2a63cb915c81b33e385bbee445d60aafa0652fe3bf08221f49673cff1244a8b065874e2ec7b4980c012614d7529968a7e0783e9d42d306e05830ff2ca716714785cac80c84e98f0ec117baec6cf74f3688af213a1320a09b37e64d2ed6ff42813f51afcd21e21a372892c40809bddee793029f3a8fa83792661a90d7ec5d36b880eb61edd6ea8951abe8d2395c4d2db971b0ad3d0cd882f35934e3e2dd18bbe5abfbc42bf32d9c9b3a64a090ca8014f9ee756d27f8c49ab675b973df430ba2bcaccad0a3275ec8234f8b7223ccce0b5ba2660bd4954a6539b15552f27a5ecb71cda26319c655aa621e11a7ebc3008c49c2fb721b1139cda67b55c44b2029ca9113e26de920c52d6ad7dacbddfa45c55568bfa83b9471244e62e35fa03fb56ef3d47d21e3e46732b1f2ba21d6527a06ce8df698f0159c45dc8869490b3bec1470a3c882e8a18a6024c19d305ad153fd77728c75e537d6ca374f4f8dfb2c6b9ec35a464ae2346af25769cb679a650912248e6ac336064306a49c748afd4111014259136009f0428f55912df4549dacc021835e24b939e4fb592ac69635be7655eb0f0fa0d03f1d9bcf6881200462f158daf882a0f97dfe58cf4d291a1f866cdc32b19cd692f88832b49f8b465b500ed4577f7d1af322cc8ed49d763669ec0d7071dd6c54a0bb5babf4f2406818f1f72fabfcab8ad4d53e7ba916506d8202bea08fc95aa14108b41545055c43f8b1d6b31964ef5928f24097cd5ee57a3cf85dcec626ce2c645f3886232bd0f9c297cd859d68c397f5929a429c01c8d9176b7b577d49b358d8d7a8be1c2dd57dd4fac0c94c5d2f057d97f80bbf58b0f8d2b88d2efe581b1de17d3f07fd32e9366baac7f302a232ee35c4ea0894c5d7cd8d78347387989a15f3064e253076d0dc3dcf7c6f3f443f7da70ec1656ed820e68ed73cbc2db807f5cf82f2f718bb388a3b1776b8f346fe453e49062439bb4224a38ac9444c4de57299b701fe99bdabbbde1bab77da80d9dd30a00e8b14d755fe2686e609ec7981e651010b965c48ca38bf42c58468982d0814b4fb4f999ca44240ee6ceaddc1404a14f567e7887420ec081ba8b2e57b4a93314191745219967dc78c2cc2a869623d8ff9e29f38b5b2f5977b00d71d7ea2118b15b5c1627336726d698314eecf49cab26771c631a2da02d40bc6cdfc273fcc7e4ab6def62c0fb271b1e70a1a5f29030c402bace155f3154d48d67a7eb3e58590753c4317811285c1440334d4a433b8cb1e0ef482c6397519c7043cf5d79db579a9f62002d6f30ad48f0dce6e8f2edb30221e3c8ee3ba20945889cc9a4c1c5c147f3565878068f98d89c24ab16c8b1eca47aed6e457223a1d037bbafdd00edd3b4965d01c30326810c44a1ad8f82a4d14ed1677ce871dbe68ef6898bafc9114b6df284786c5791dbd69d29db183f8ba93ef2a923c2e5fb5f3128a40feb2bb4a2a8bcb38fb73fe57e8579a8003cf116f09ab7f46ad6343ae811d6f3b4a685a16c741a03f04aaa8af62a57e13e3cbe2823bb9535efd5004cfb5dfb2a38036503af54d9f4575b9e317bc52dad3dedfc0db2941f93bcad82927f1b38b1c67f07d1f8beecd88ae73da4bad3e29453e285dffc67bd3860103f84818f9250bee664461b0b64dc6fa98a1464fb514bf8e64a122f81797582c8b06955ccc1cfcb178c08b55b312b31f9a8e0bea4b9be09a74e0e624507723175215daf91a24b9b10920d23443744d5981d5d0933eac0adce35a3302246fc60a60bf2eb088e53716f8d0f79826ac628462f6ab9fb8d560b135ed73ccb4f2a2f47d9e8858159e129a8117487833a8a06cda18d892ac27b6c4825bafe41fb802e2df71d277edcdf91ea8673c210f66e302e4ff4e54e62c14350bdd5e641a5b5c83b0d4a251b2dffe895e95f21166cb47dc9fc0ffa7a13fee89ea57ecf2a29a30675542ce2fd97081015a1a8da4331a5e493add409a2de5f8b9550602f61d1c13eee33d45f73891e4fdea2006d80e0204fb9e959df041e65e64956a8e7312c5ac76dca857c43d891f77efa311506f2f4ba18702696d83c321ad8a4c53587eb935c6b16158bccdc198d0a15573a946cf8c972fedbdfcfe6098505b3b82f14c170ff69c65c9a4ef1a2f5e700acedfbb9f2af043643833141041108192f847411735cc0d5ec5b9847ef434e543493085d8c1a95d5c5319df31f69b4d3232fb767b282d933f616d7a273163f6f6d2e6075cd0a0d09ed2937028deb2c01c56fabd110d225614bc42ca4c6454c3fdc99e90130f7c899e2e9540dcb7f8499b4184dbcf4ea852828223c075a015ea8f21282699ea39994fdc5023e131238793a1b72c0908d9b182656594af65f7e7b070e5cb7faf1fd7624df986dc8595784e15c57e1963cf92ca220447f0f26be461dcee90b534c990bb638ba443158cf5ec863c457ac1e792085957b73c3069eb06173d8af192777efa0e65694aced7c3c51d08314b5b01df16d26f1560ab4218ca278e05a792edaad1942fb93c6af2752af68fd9d97fb760322028e189a268ca68bc59f4dc53d84afbc3d8c4ef61fe35c0776b2bdfd7f7f365d228b46527c9ed134f3d03d32728a3e5b490f63061b148dd8909502510365dc1b75a7e44260977965f4804f04657963ce5ba4aeef8d0502885db7d528e3b4d84946ab3290615e1ecabb2fe34d94455a39ee3461a3eb2521f94497677a74790ee9c875cc117eb8a39a270266f48221a51e76c07e08604c4d36f6c1778a500830e8b8f220f85a169bdaeac81ad9f3c8fd2ffc22e3609c9ce0b67cebbbb2af23ca99ab8eaefdc0e2c46d7044bf6fe487c8f881b44718f3647ef98b2d8ca3af4167b3d1309f14b77b1fc42d7265753b54577ac0402f0e56d9ec70cf5b1c2e3053223710bd61da5eb3c7e74ccf89b9b63071a2d6e9d7d059df7f51ab076d4996088fd1dcaff4365e9bb8645464a23d9a2e8e1c4616008212439b1eb3be6f96911f8aceb76941d4e7d01bb280dcfdf98054fc4ac15f8dfb80382b56249e9d843a32528799853edfc1c51b7a8579362fa03f9ec91e684943bf538b689f3b75b903a90774b7a6f27a72179e2b35d7297c17d0977c6b028169f98a4b951f3d7c31102c2ebd723a6f8e8721c069cbb0f99aa15101a84046fdd301cfc5afecc1f3fbd642ff6afd57f774b49e1591b858fb0c1544665be7b731ca41dbc0e16b72d8f80d2f6699f9408ebb24ad5c8f260a4de4549b5a1d4b77fd759e5b9d4dc21e7df94c35b59abaa9fa3db48b58ce8c0a801b0670e1343682ec4c21c76b797f7fa1f9d0be5f011a0a6b4c8c828fb26c526f0b45188e037bea16070596d908e104cd919bacc9f2556c2759f8c919617823d20d9de45560cfe45cd3adffa85bce1f81e9651e4759b82ebc3ad4caecc8cd922d1d9f82cf41ed5ee476454cf9e6aa086b3256ff144c389ad6f9c256b0e2f2e7942f2d3dc8c69797519e318987a37fefd1cee52e79c66a2a2918cd6531f6e4e18c814f6995fe97f48613c12df78004c5f98fc13309825fa8fef226a72a9e25739a6198fe8c43c0856a3ccaba9e4eae6d621dd1c873541c3b3233173b9c714566ed676d2f45b639918bcd12f34bffed75c5871168667e838a6c4486f4bb2e156b30cb509bd8cda8887eb736cf42d160721599695df79d596571eb09b2c48196a33a6022be3d17d30dd08391f2cd2c26dab5796d562ddc539edf5b31cf6a4370d4a04d222958198470adbeaaf06b2cefd3b70f7d7b604a97f274100303c1ecab0ebb5db3021f7593bae3affa20fc69b78976deb09ec44e2be35787af7ce2051a94ee24a263dc466a74abda774f5120453d47369857bad1db80c7aef1ff87da2790cc0ab757ffda5893e1ed1fc5364cc6b62e043333cfaa1d5487b34250a9b64dc3ae7296ffa62bc300988a6cf321773d782d5f1bc6e25c1c7d430376e9cf275201ea0746ccfe65a7938510d47b97b461483044c8bef2bcf6b9260c260288c6d0fc466c5e2746ce890cac6ee88753eb37019739b88215d7d81721fbc81348e2ced38dd2a20f01a01a9222fc57ea43ba399622fdbc70f90ecd7a0be89bd643f948a240ed2c24912aad4a43912c04e3a372b218df666b6791bc90c7a619e9435674b9bfa94084f41fe08f535db441636d56fabca76ce8592ca4c586b024974685bee739f717737e0ecb25833d1aa0ba7f9d234a67bb125145d878f158e52c0477799c63c8b3b2028e1353f0897dbde8520994e7ff8c5f08adb604aaa915ce224d1cb7cca1fa693f675046cb16e8f707f82da85dd3740851cf7cf8099607ef181b01f9147ee69105f3068339f2d49046124bb01fb40f40568971d87160c10fcfcefa2bf3149f516a9c51c524d8709b5e1bc95570de22788a773fba22884c07255513de57605fcc5e829e1a8429972c71a7276e248dab7aa09a5f5de510acd2d3d017bebc2784c8d19801326952bc610098926df07872b546daf75646c638ce41ccbcab91c330579ec11ad38a912d68b80b4064c4735ae1fe25ac925417385a9086e4954bd346eca1b4c36942392ea239ccd3b027475a876e71e79f229663dbb6e2e9208a328a93c40ad919704ca8621557374328f3274487658c30ee91dbba5d5f960373ec85d9fe051f5a832c8747425eb55a8cb8412226f35cfa0125a249a8f3d715c78a5a8c658ff8bfacb34987b542f299e2fee1328d557c01afe92f1be99dc5d594f8501300821f78334ad2eb70a7a7848ca242af082f3ff7489601dad623da2654902c0991e263029c4a2bbe6bcd0004cd2da8803b53df3e58e3000bc7f8483e617b76b1f647f0ea585fb6d5e8d3e5b261d015b4d9b303753943faafc747c0b57c784a7a9f63faa749ae6998c0e2753bc442fa334ad1083efbe25044e2fdee88cdf240ba1bd833e1f837d1d39935049c942b81772eda2a8343c36b5ae56342a2bce0dbe9bc33db7fa3d6fa4ca1a640459fde9a77be5a553a7a2d489c1b25f014e7569055fb25d1e1daa7e979f5abf77b86f22199c139efa887205aa9cbcead45c6e2f8a563e2835bbd1285c82c8756f86beefe052ee32f7219a0dad9de92d85b91b5a15e1b2838f7653cb78acb43784458b1d6e2116b49e1105a270b674ddbcb29b0addebeeac2857ccc9754eebca751e12629ec80a47f4b1d832a93b6283dfdbb970fcced1a3b5e851bf0a9c5fdb524ebd91e8a601ad75d3bcdf9088f0abf9850969d17b8e6869e40961cd643bccf9879cf285398036014813fa8cb8d6df48ec6352bc40d6196c16a3389d53aa3dcf276d1b7a5b4dcd296cd96e2968a9e5f29bdc0431b1dcaa98089eae198afe8f626d2cd39fe732cfc4ab27291a6ab2980a8efcca0b94faa91bf28116bd07627593be78cccf2e92d111663d25f1b68e5d53de9110854b466587e850c74cad68a1716045b980c5c3743cb95f79c60f3d3f19b948b93de994284096b8db75998ad913ef87f269c0fc61234b6472cfe3806bea9a2f416c1b1667534c99711fd1c82c6ec940eb08775a9ff95f71cb0c61ccf951d43e998d01064bebc5f7fd937a80b33e7da940c632af65a39c7ff2f34a22a489b3ed1b2b26e6ee0729f5d020541d30eec106c42e7b81bb0cb4cb8d0427f0493e0284054bc4277bafc44fb6f37ad1695905768c1820eed7ecf574c486b4bfde21b02516c3d6f34ffdd6f6e38a26419a729b7384cc888b03fc0cd0404eed0094e669adbfe6c5b3fe68c33decf94c608f744ea2cfdc998348607d9bd619957a478d872da69196c81ce83a833dc35b5cbdd30d09b8e230975a48bf54f1604f4a88262fed770251315c4d3c07f048e57641fef765f97468834427fe2652359931ae1bdd9270350e0e08988c247dfb8db2857fa7ce1dacf2502a133fe9feefcf627e2e57c98c7aa28e8bcdc7ffd4cb0f8c7bcd18f8a4b1ab98c9b3869efccfdf46f5aaa1fc262081e2da9978450901a09af52151968fbe0deb64d9bed1423ee6c79654dfbfed869f4eee1a8658f4b510a3243728b5935e3439ba81de4fe6b7b4c1524ef25ac03094000c07d691bc4f3536fcb983e2dab982b2aa18921404036b1411334e90672b03573367a40058b80a14055260609b49f7316fef64db42f4e548f38226af714bab30841c7abaf16acdbd315fd12c1260a93d194985685d74fea1307e6f76fd3ff527c9a4f9b9303540f4d27fb9c45e10e5656dd84bf91e012df6f8e8a97d715d3d65199f09dc389ca63a58c25640ab8414751e2a82a82eb962aae73845aa261f2a8c4c14fe6cd80de5880a6bb7e66084b6001f2a9ce59374a323cc359258ad1cbd9e09d08bdd96491d0908cc79561fdd09000da41856c510034db793ae74c835bd7db087b058c334701cee248eb2e3b677904f25436b06617bf806bc6f6a5a28259450dd062b7c7c5570b5f84c187d6d86d324936020eb19fa609d6e76bcd695d92aa238ee585c09124fe757f2c2f80090182ae6b09dcf2156dc9f6df8eed084115c8d7f10aa9e35f4e49b4e6d8e0de9f5fcabca643fe908b97e7cea9313ddc360b817eeaed52754d95a79cf0ce1a79864eb33592045911eea58728861aeb86720eb668f9ba99ca712d64b13d932eb7625536b98a27267596b5d99246be78d174ded19ab0d1016f984a93e93e6ded06db4169a72ef2991578ecd806ce796f018d0c7c3fa01ab652ea5b1a47847d336e10b89fe02c1714cddc6cbaa1bb73ebb8609831b3ee669bc299e8e579e7f2fe08b43dfae216410ccc5dc1f857f227868215075892a8856b98e65ce1adc1c145766caf673008efc89a2b189998c963e2c1f8cf2a400a4634509f569d0878a17a3b08327d744472085be72771590d6dd7309eac33c54bafa49e03348acb810c9675b9794dd0fa3b3689d94e1f4e08a1933b1e051a840a3bb9ab2ddd601275062546115d78f6178e2b97266d6f4be9e83cbdd136e04baf1beafdc2c7b0c4ca4c7d10257f040b3c3afaea2153eaa0f04375ac83b345d21093af06bdce6f1d31626a3e4756c26c92010961938ba00c769c8333bacc98d4d541b6b2684c6d39fed0acbc867ac845cf326ed48d90566c4a334ada92d3cc28f03330800f6df3cef7382cfc0950129cc59a97af39730783f1de9196a0c5c2c1a5f7abfc9afbc64032f62ed227204f4b59fd0fa6a11fdd3c11325aa5a6bdf6ecd977b269109e2f7028eef5cd95539a2f5e22b25a3afb0dd47b923971ed525b9e8b785062b2961ea188beab7bf5ae4abbd94242b8c3fa74bd1efee625b86f5752d320f4066a38fd72acb82338347d0766df99f432f223542918e65448426ac4b52afc78b4b89730e1db682b516b6dff23ef46fe21b6252085f9a4bd8ae3749191260f1e7d4f9edd3e544ac6b461d1aae7fc5f296297e964b63a08444d23c20e7066294a572db05914e9b1da20d76c1ef16701d8ad984eea91ca79dda2973d367acfa1a7a27e95d7c2b881d96cdc7738d278892c386dcb0ea0a137a9a8a3450b521e4c127663550d27229fc7eafb5b3b59c17bc986c26b86485a9c0d6dd40f73ff55a7c09fd83d6c40f9d5e3c3486d22dc5382e0fd69d221a67e1616ef4b7080f259d6fcdcd087c3006e435eb76a690697b4d9994a617a117b4002c01c02d3fe7078ecced3af4cd309d5aeb4eabf03c56bd7543d0e06fb2f48c0114ab0a0d8c9f0d1354f9c312a8d5dfbf688bf4c3257116c526e97b49dc4508cbe8425b01edef62a4fee7b1f9a9c220c9c9674a109206814220fb5c63116af51a14616abef8b82db9785a1ef3b046fbe90920789b5460fae431b98257d831c3592019b75e0eab612f492af843d277994e415d905dd738d8d3d5da9610e332e0e3b37256c48ae2e958bc653a38498bb8bb4c34bfe8b09de66992c6a11f8d9ac7adcc60d0da103d35fb9b75c85bbf5fd720eee4bb6f712ff05a6d89fea3cb94572a29688fa9e13362549d2c9964f3a3404e3dd792b2c22b6f937f3976e9215697fef47d5def8842dffe6781bfd2edabaa3047751c96bdf6a9393976f0b42ea1a5924b90aea4082dc0be14454033c83a4879dfbc80aeb769ba16049b79ed2f83925936df8ff88834b71147517b29ec1f87d6bfcb94b16fe9a29e9238cd7b46a90632bc3f38f9225c8ffb178c91bc23d689a6796942b6bbc23bbd6f233b5100b2654d1addf9e0604270ad4732c4a0461c95c2a94aff0d570515850da1a57ad973721cad9a56ef1dde1e9a0ff6f5ef7ebe4b38b2d2d0cb1c6268c5d34bf82f909102c75f5a169eef623e8f977c00b7b774d4dfaf9788c314968fe839df50afdfc9cac79723040b958cd7f95895429d59dbaa96e0e91a2141e4a139944a4678e43bcd864d87ceee3a3060ce1e66e2c682a48eca674b562a5ae50cda1f7e5e5bac60d1cbdf108020ccd55d7ccf5112c19c05504dd6aff72477d984a23c6720eb32445445604dd7e686fec1e8ba405df25f3670a5b7b1bcb4ac2f5f92ac32f23e9890c80947e727fc9f75cd9c2c2f7f8c8e423bf447a52f1dbd0d2d22578f18ccd19c765363ae06a77b2881de8b03699f3b3d9ed9b912319c26492bed1385684f4b3037fbc85b416f3c9fea91084faa4935eeb6d20e3c63cd935055afacf017d85efafd08f1d7ae6310225e4f77aecaccad5a8f8489f709204962da6c629fce963c56973d1e0dfd494119a18f58fb240923bb1b5219e08e1d4c7aef0565d02eaa854ca83faef44baa2a73b407b8fd618a76f4e65facd4ab6ca575790b0f3c97a057b0cf54f41cb4e5f3c4673a560d562acc75a81d803ce7f693d2c02aff9e0163b7c17d482b22d1d6f4a93089e5a6c16539439659a00261b3b791657406d217ebcdd32a62c28133454e081e62a8a58bfa0604f25b805b5d4ca8fe625ce320785e868cac8768bf48621295c4877e552d0f31d18cefee6381f811ed311af59c55eb513de604c8ded0aebababd793f24ea1c0a767b88a6f637899cef36b168dfda0b53f335cde3176cf839e50aa2889e8c2e3fbedc117a48fe432d9eeb7ad48aa4bc6284cc41834ac85a9c43f268cea9a38617765e0ab69e344702559c12102662dac489bdf615482662e79090e2494d86af23cf60dd36958a6bdd7ea1795aa6019099ccc7d9376a349489446992b1ff7e5754f8c2b7a27107045bc689875a75712836142d07a7cc07e9daeff9dedbd213993a82533241b7b77ed4fb9071e68c36c0ce3ccd937777ee0cb5ea976b0577ba18841ed3bc944a9fe80a03fc3a56c455108d90e99376e70029c8de0efbe8d233fe0fa8d6e59c636f52664a396a0d29a3d34d255e74e246df996456c20eceed25025a08fc646c605cc2f5dfe0a9ed567ac410e1bffebd9271605a21927ee1de353460d0e07cd63a2cc568a290686a3ce45729e7a581680d39d15872fe82e8c4fb1c36cdd6872e3713e63a9d25b5c300b19bef3b54cbb55ec148f11575e2878c0b80c12be89342f48d9d6934d9b6cdd548be92b33550e39d47ecf50f7417056879ae9745f2a1b04daf63ca18783e1f78b224b8c6fbeb56a95bd982249032bb0a2ae8e1f60f5e8818e671c2c147a95b0292d61ff09b30619cd06cf9631acf54b1f005795331cfeb40a64cacf884385f141a56eb8f0e0f68d169319c92a0ab6372cf2d9fc0c9afc86a89d6f013565282f487bc0f18c3f8dc81a6fa25c17c3fe529b7aeaff46618866596ce8e437244b3cdc74d50bb78af60e0d7596bf9015285fb518170c6de936dbe3c70ec5000b1073b1f13b1f79f666a40f79883baaae43a855d18c90e912e9f1f6a9baec6773b9aa1a88e1c068db35711c99234b43f3a95f7ccdc6064aab64710374613f6ef6a980f70958fc2ea7a4271be5ad8c26681b330657e5b3a0f6d37c76581b36b6ed2873868f758e4dd2b9f1c14d72b87608aeadf960c42b93adb632edd134b2fc80ae130aa71e8c556112877775fe807d260c50658e3324adb40cd7d6d3e4f43736f26bceb32c9c5026b1b68d56e1b4a5ca75c8a1673530d439dfef10f03f325ec19991963c4de5abb2284c21038e29fd737d6cc99236b3e4cec3900b0e50074baccfe785fde21aa6f1d132f2972b97ea0ea22bf7dc0cfe1b2846b251c45243d5c610e8ca040de8ba32d0ac9320f963602ff8ec7f7ba0a4fc2e479dd511d072067df04bdf19210e673c8a1d5462a23bc49393557df28ffae1af3ac51d6c8f3482ea959f7edefd2b7c8bf2e36bdac7e470d2bf4fa1f31219a7d1b6e983b20959ad907872e41ff7878e46a07cd05f8b5dd0bd31af7377f32dd9295303947833e0c1ba66ddbff0df43e305b5e72b13452dff1f6c7d3c4d48752ba1fb36f835c44b193859f98d42e821a6c7263e85ae514d8689fae3ded10771ef3e9d6cd6ff15fb4d97c1dee055b7c49f6b1c8fc01b293eec1d1cc7c97c297a128384095cf4282891094cfad40fe46a6342b95914d9291807665f8a2fb7293adff1f2934fb1e1c325e6ebf05e9340058ea1b9e547541712b12fe1a9f22017f6bb488ae11acb8ab18c7af41910b802fca0e7b514e4bca0dcc29f1f12a40059d33f0e63e7d050bb9603ee17b8da2229f064c60863e624424ecafc6631fc3b300632be5de4d60fd9c3a96e2c9cda6e168df75f56aede12c585e14bf7a8dbef53340230211dd230205c060372727d6767692a7b460b35aa4edce630e65e7297ec188a9a77c39007d3ec22a52c5d49d55b01aec804b88559b41289a5271daa4b612db3deee137c9f7c0baf23994c8cc62b05584012f8584277717b7eaaccf2a6185a11294b9db44462d6bf8ead243aafbc0305d8601a9a944fb77bb6f96aa4a5f640943815931beacd80a73c90c82937d395b2265e51d57d99c44c79c84972b1fc625721c01fe09457fd6df11ff5ab924b236d92cfce8ba4e90fed292bbe06a139c2c1026625b4ec216b16f3743e5c71d01881d8e5274e71e64302e3f57066d58eddb82161e42057977ffe24b009ba6500afa2874849d7552c5032ca3aebe625f0c393bf095858aad35e40c3e90e4826b94eae036bdc52041cca6965dac46c21445f2306af824f772c4fa6ae37b2dfe5f6b16c0db14d1931aa0f59ea5a368ee144290c45421e9e35433ac2cde75399ce8081237593a94d4f329e481f9b4874d9e149c9654afcabb184e78514d423d8bc79b4e0525871543361f8e4830246dc3b1749d7a2d1e8d81a52ad3c08195d8c38fd24e08c78c265d87d5b5a1ab348f81b7f47f47492ed98465936e1f7ad5e3a08a07a71a018a3758b9cf1b6264653ba1f1e398bdd1d926def7371f58100af527ce0adfff26a35783a728b81a1578f5fa14cf832d79e78506937abaecf534ae4916dab91d3e5243756c26c5506346cf320addfd1901c0d60d4dc4a43e9f7899e9b0dc5365e620e2b6ec00b90e66e78ad2d63652b1bbffc89016a59df2040239d4a66dba0c02801f59807840812d0b52b57f69a83db71a21cd47d64bd5a013f61e19974e44732287937c01ac677e18ea29adf424e8af846b374cce4092f2783d0f0d6c9bc3e2f85ffa3cb925f8b55a97502feb3f76f74a66bed6acc93e15c5e1387e3b4bb27cb3077e83c61b1275ba6dcc18b03781a147143b90b164a572090ac846402c2e8acb8c6164f86b02db524763d8859aed3caff8e6ac380970b5575bc703c80252fe31b1010d33132eb4d45e0cdd530f84c63248f8ae5cae1b69ac190d24987fa506ae28844a3a6f51dfed4445a449a241d935afcb776e8d92c8de1fef5784536b008d491652632b29dcb5536f27aaebc07f23737dbda2431a140d4eae9b1a1c94f2c03ba3a0cbbf6d21ca7201758ee896b81fd41b98683cf2a984d0c9c38a2b75259022950767c457d133aea6e281685b7c9af4be01af0ae6d8e2838bf0e098de91adf34e9af0334f9f787841af366bfcb991a1b15b5cd7ebc7b4d115a5a999b6d8e8cae4bd897f0756c5ac085c608854743703b1315bfe037cc45945896013cfad64c0770d50d37669f00e8fe28ae9cfc21ffff9388715ccccd61fddd4716112c44e1749299426a097a8edbbff310fe1290d9ae001617bdaff554bb663e9923df09a04d2668e9fc1444229eed9d632737ed7f273bdb6d894a6c76491ffe7f1d785ec718adb93bbfcc20173bd02175cbbef8f192dab8bac06a6601fb9249fc498fb497aa46f050804ca37f80c6137a3218a94157fdc172c8284cf232141efea0f4f55ccb0bebbe257e03d65361ca1771b54617f3e8e487b3cdc3047ba00c2f5e31b1341c2e39a528eb08aa2c105894b30ca9faac1ef36c5fe6be22b460040c3635ba87f51b315c6076d39441a8414ccd457777700ad990d07018476de89e536b54699db78d16c6bfe3c719ceb8b40ddb25fb3b9eb93ca7f8b12c72a6598b11f39c45442242c63090ec45d30b8ddf3a297b38e93bf2aca5d50096badb0c1be86489e6b056d735e5c150f60629f3b315bd5241dd10e134ef52340a4b8d5db4615124d9e05a49451221ea488f9721275b9cc96c0d8e95983f14053f6e78f220f699b41411cf55753f6dfa72195dc300129cbbfed04df2f1e73f1a460edceacedec2625d224daed40c2b0bd8fcf1b8cea5b70f27620c876fadbfdcfb8de7eac21ee46280f0d7a95bb90aabeb5f0a44028522c1595785d11231f4e7ba52e98ae8bec8a3ea766384b2d85d613718047f00ea80119330c08875003b82d448eca7efe7e1bef405f39c424487eb49aecf84662e31a4815b6ff0f4d45178395c114c2313828e5e020898e542375ca9cbc42020c3e02dda6d0e29caaec03a9b3644d22a1f5cb30671cfda0a0965ee222af13947a1596732643ded18b9ae554f82893e9f27cd9cc9731a58d2e7636a10d91719741e690b1f70457516ab173c9ced94ec7af26d12c67612f0a5f8cd91cf52f5ef86ef39fa5609614419d9d37aed94531a517c88f90f57ccae562cc54a5a48ed000da5099956eff5e2d449d46e7c67a10f40dfc2cac66f88b8d557385ca36188180c0deb3c3e01737d55110cda444d1bdf1b556f82a161c11e774b7c56d9810a2d74c3d05115d3c58dd4e6345e5b8be190309a53aac35bd84174e6c2d7805be0e7489926267b4c17b9b37de37234aee026a45e018cc9bf0e2d74fc4f32afa4250e89c68ba33fe52f1c651353641a812db17b79237b36d8919a16d2e4e9ea32ca995b38aefd4f957449c978a8fe4f0a69df16b65899798f292956d1e4ba973fb1459ba63244cc9470e116ce8a224393db2ed11d15bb5c3a6c745dab9be822cd601aa1f2eea14913e68eb8a8056d506fa391ccaf81ebc2aee4a8f1648f814f1743e2de681b254522fd132dd0f24bd7789df02af188be2bb50026cffc0ac83096dd39220188b308e440b733ac8633bd5b384bcb99feb818504889f609ca7c94adb9b41ea2d91e5036e8fc39e5a4e17ee46c3fd050b4b2106932a039699c78b34d056069490c3e6fe78999e881f53c8e3d3ad7e802ece7ae86bb6cd9d1e48af7418ffd51d84f94f5e383b36e802281afb1cdb6dd856aa3264e8f20754c4f4cc7afc2f7e19d10b034061cd4341e976002d7587ee77cd4d9cd07cad3a603efe6d665e57a47006c94cf364157ee1d08ea6367be590d876212851169f010f7b142c79d21ddddc8e4f8946418e14ee12348895fb9d8c879e9bfd1d0fdefa67b39ff09b5110a3dfb3ce96e33be7924ab630af1b3fbebcf0d13c0f1554f8ec2bbde69a6d3fcff1ad237db8424431f98fdf65917252226bc1a2fcb9e910c76545235213b581794b529f3ef60c7e2825dcd5d20c653e547b52bbd0dcaf8deb6ca0d1b91fe4123bca6dbe55f6c8908bcf714bcd23e684de49d73a2bfcb4e60e6ec179ae1dab38d5d80c02ca0d2173112414a208eac9366e68b2d48c2fd924492f5b1a8ee5886ff41a7bc6ccd8027caf6d02c1f24843a2c54db2597e2331d94b796c741245eca0d995beb6f0de5ecd23a4058f27ff47b269594045468f7ff14b9a1e223ad501bab69b4a82355c38a5257eb5c0a9dc2b078d8900aaccad782f069c279991c7698ec4b5e49f252e8df1aab2ea7cd04ed34b002d1b1d50d53f665f1bc0edde7eb432ef58742653e25c315b8de26c9a0272a92410e339b22f19a0884518e0aec78a0fc375a69267c29d66ec57615eaddf05c1489f56bec6f6cd85af0c35f21e4f107bdeab829e70416967313ac1abf3f574f7f7cfbeab11552bb69812e723e579f8b4da92e59c9580b024f050678402b81a6c1f2431e27d07039aa6d039151e03d9a08d65f6c7ce0075bf2b97f856d432ca63500236d4f71542aa783190aa8c9985780aa4fbf78baadd1c04182d82ecab8fa3a05437740c58d3af6f374617228868c4db1a8ae12b769c086dd6cae1d16cafcd55bc8f04e868bd35c86f894abce2a85b3e16ae3a5eb06c29ff62b3e0933dd7a0deb489db142110b8606f45b04746dc2f8e3337c60fd04ef610e8e53330c293daf35e68eb563eceb753c08db5e7058de9ed1ddda1d9c3e10b7205678dd4b7255bf1564a1741071b98e531a5e2100b1b7003cd39a5605fb5f499096576ccc6d3f0dec75894871f8b8bb5ec0e3bf4b72201066a0a426c917c8b925f5422c37e8af54e7af31a20c2dbe8efa530cbc51e469f4c9f35db3013b9a85c96eefea90f97a85034231240e48db6cd867cbb565d3d9f5d3e4297a278af45ced7297807d4bce511126ed824dae359fc15508e4b63ec374a9fd43284b13a4f0b64d0b14250473ad35050d31068a843100e0ccba704fdbf9db9592691d862676215d5f8a57149be8e4c5b92d192f743cb102feac3caa06ea0e543fd589df151b57e1f6b861e7ecf8be18551a8df3dcb0f04f1ccbedd689a9580b9c8eeefd44fbff57b51cf16daab1ee24da0c3933286024e80b8e133c47ea38287e344288b2bea23e675a061bcdf03193a8a46c915152863acca5b73042cb2a5f08987c29ea5ab5bd7c1a0f6f686fbe5b79f18175f23a3825311e9a9e44aed58f01c903ce9645fa22eeea2fb791cc64d1a6b9e21a2ed6c7faba76df9bb7ed77feb325b9d145077918d79947d6fc1712750160eca589bc7ddb34ebca59b8d84a56d3f3da3a6b96cd798c506beedd0cd42d4c43345023bf00da70da0eedfee1e695cd75d5b681b75add74dc305baee5faf84da55c3048ee69e042ec938b00b70c4c1429f4d897e98d08d8c9cff84e6b81e73b95f2848ff330a34c21853deb122dd73b25f39b43acef97d11eda34d546d404770d7542f8752e8b25344deb7819493aaaa21d784fb0dbdf42be63cfb8d328ec1d71b5f80826ea98df028c812264b30afc984894f7d02bf72db73864a243ca9e486551f7c0d1ec6e042677da6dae8e26d4067822214414ce22f3d780f5850c86905e0c1c9aaf4c249d2e23e89c23b9038ffe41ab45c4f41968a1e468ee630f791d7d9ab15e734d19634c1d9856a4d8cf7b976a882dce2fd319cf3c8b11eff0b88cc0f80b80cabf30edf212850e90311aa70b5d979e86ef492a5c7089f98e41935ec5b34c8f25cbaea6713a1c74702f1cac69bfa5ef87aba2b5d4302dee70f8db1d15ec83a585f49311289c78f4df22d1833b279b66733276d24a20037f70aa9664bed1ac96d806393d21c3645b7f69f296b51a378a69221b5852f32fac92e1933910b6fae53c8d002feb77cb7b3466a0b9364c7691b09173e9075434763e11250b58547baba11ac44540dd5f0007c58da6f4cf82adbf98dcdadab52b271302b257e503e610eca4873a7ea389e329de7957a723f55bc823121bb9f93b4955a8fac1f1e9e5c97d44b3aade4000a5883fabf0d9fc8bdeecd8887af5b9a6cbdf926ec14b3c2aa9eddb843552653764632b0901ccde467faed2e0528e6d2b6a2aa06ffa4419f9a5f000a74a68fbeb09179cb9d22e701d9ba9bc83b376b24ddc60f88b5ada800b8bedfc5ea9c1c2211c4b66b1973f9541df1ef8eec49d4135e6c2cfefda6eb01c53b20ebd2121fdb16d9cfb779319ba635f1aefcbde4a07960f565d23749bc418abbb3a274ecb8e9446a694391c3af8845e425ae4d65b36c5c882702414f94853e54cc30d8cbb19e61df744a84c919438345883ba5d4c03a13eefebf84131e5741313af111468725f9728638460ed2de99f105cf2d687a0df8d3f7c04774a079bc2bb50418bc88dd15e86f04caefc56b284d3e802b778e2ef6846aee1c858795fcfb3cfbf6f02ecc1d69cc59e7f9da0409c5ae7fedb54356b8d515fd97bc350b81a690cc7f231c99d6cc398170b6483f32c46ad0a8527aeb840e8307b467787e680003c6a576cd88998eb111e017af90e52545c495a387230dd4ba7ba1b2c92c21a04350b01bca6856533f15f3bd3d04fe0663887c7e939e1e22cb73863c4474f977144703e7c57fe629de62b0ebc2c78438c97e8784c97bfe0276f860c9ce04af63af7cd39635801eba8d3f7f3738127ec3a82f287fb7929086a32552e98c307412fb9fe971ca26e778be59f4b284f64a077d2f66b891c6b53ee85ef44864b50c1e9785873f314e254f50592a9653e9e292aa52800c9800265b0847744857d7608ffff8caca6611bff38a1d86750a2c9741df87bfc897b7c626087832a30a9509c016fb70abb135bb8992e0192c195fef36fdab0235a5119d45e15cb8e2c538ed9ed7fec1f73efdbcfb995ed4e0dea336e8dbee996e6c4491f9c823b3c8a6fbf0e39c0df8839b850fb1e57856c4e0879af050332028d188af37e2df06aaeb3b0ca0c2c26b65351d34f86f5092a2c74079080ce69f5c34657abbde7b0dc54acc5e61bd7cad20eb84505f86e1c828c52db159f82c2a5a4ed38d95bba95efd3cd3df03ecc9ecf5920c9a6f32e89ee2b23a39d824ae5c0f9d92fb3a0957fa7725139f79b59be4a561bdcaf104fd2e3fae104949c06da3a3bbcd1581b948ba8890463326aefe61f31e0e820ea89cb4c2a76dbb1ba479408c6004de7b97f1e6f95e822dc0545edc591a280e2c568245188730c19a2f3543d039b885079b22d218640548dbf65e8ee33eb7f3dbcafbd6840eb1193db9e7cd720c9fc1abe277cbc2695270afba943714ac5ba1a1502c8c10cbdb68ce4bf096e1a413d117529638532a490f3fe1a54de8e1fa187cbcf7676ad2a9f800040cbc4de1f88f1be98f8328762fc1d071db4c976dc5fd3665caa6f505e6965021e0d8daa64111f090773ce5907fb9a19942cb6cec4640f893469b161f5e2a50ca4579fb0c9c6a36a97852c52ced6a4eb01068659cfe59065575ecc5acf97eb07ce7f24d9261c8e282e026bea7ea25aaf74c83f5c965531fea0fceda82d5943d21ba6eabafc814fb201fc673a32f003717c6727074888c61eee622ca09821b10397d73283e19ea29413daa9e257b2065c5392d3b222035bd5cf88af5710e1e86483d19588cd7f9c96417663c848b19e7ccb9e0a96583922bbffd1ebfbc5162ba886e729f362c0d51dbc865b90e5d64fe4984b676da01483855592572bf5d019be26722dbdc9f5d76ece2c800611f984628aaf0483841831ae5872eb32a06463665b59d5a00ea680c16e50bc5f2be46726da3e30b3476e854a25ccd70013939d315c3399f6ce0e265b550b56abcc0718a67d32d8a34ca51ca3ae06737c48189d449ea8f8a123fe2b94c44864090d2dc8290b22dd90f21cf35a374b51b3894051b8013ac20713a24a839c512da94a9e1f0f7e69139a3e7bacaaa4342ec8705777ab3f56806b3626d005fc21f795efdaa1b597b7c6d8ea66a6c471740d5c7c00a5711a29ed65b7f48aa649ddfa29df4cf28b1ca9bb1dbfdf49ea53f4d3fd211cf8552998a548bd97c91851f2ab2dddd7ab475dd4607c3de25ccc5e8ccd004fbd294e1e4b5b464b45684004055bd5ecadc4248af85a6673cde5adc6ee990ab9d1ff8da9f6918362f1d558b7af3fc1e68704548c85b5c86401ac2a0f55af075f5f376f0cf00fdec93a4ca197c06a61b764ad11d6ac368637f3c6f30fdb653db3842faa27b0bb92357301e4aad7cd76e58dc1f7604108be714186ac6d5756d187b903e6f44a17b2b4a7625918b6c37c690b6644d8ca21a93ef27db310df8bca7a03529647df8002e08de5cdf740335874f0c32f2caa25db3702af021bc50e6e42bab994dd6dbfe8c940dcba0372f95375c5149647fee89616de5da56fff67d3900ed1e654a553abb02d9596694efaae5db72ae20f48178fa23223fa2cee490f6dfe050d5e6ee09c24c9870b4238c9700ff36222c210a2d90d5b9fa49430259dbb6c32c3e6f01942109822d64d2b8db780807f902877c3ae0a8a16d23b3637a9b42809f531ddcc70ef6a97320c215127f90925693694de62a5b3d10a0015cc6ba935262a34355787a4d9c67bb92087eba378132d5530f2b7ef38068892b140f3278051a28f76904600e9c7b90980f5dc3ec0be83147b353b514f2caf92a48082363b1ca466d0a7e005cac4e77ef54328bb2cbd48a809b82da12c005f00b49d33db59dc7fd5134c1aa0d51b124c61667b14744b25196207e1c262856cc8e197517e169cfc8e0b8560dcf97d2a60c479118912df30d6ad49a05d488916279ede81e626feacd5cc7a5c5cbb911a0bf98f3a4235990bb2265159c634caab0133cf1d493d8768a6e906d3b83ec9c90c23fc5dc057104e2c44ce93d4e1c6d26a5dfc1b76e3a715df4ae00c3dc8161f07261fe229638407ef10eb09882d0f3908e843716ab100daa3b1bbe8e9bbb93a65ab7a191fc752d0acef711a9265ae5cadcd95458471d209e7b80a5b6d39d15760b4ac6218fa7eaaa3e07c2910212b00c03266ee191579ebf76ff2133e5c15a78ddd1a2c40e877aabd070a2dd14be265f8357ed85827984256ac82d80580809d7b13448ad73c5642cb47547fa03e2785a403a61deb019932085dc68bfe0f41095023e47443494cfe31fe264334ac2c2c982df05eda4185be044831c6c5bce295e301fda686dfc87534466f523f2fb655e47f5e5defb9728ec3e9943999413f02f4376e80f871d88f43ca16917b23d676123597a626358f97c8d1131fd983fda93acf5510b0ca307a7c5288d4082f3fcd89e5330e0b34cd622caee4295b001896cddf40984a12fe942f5f082bf4cdb535154132c3a757a4d6c1d8c35c174555e8105db6ac8a11410f0832f004e7a9c106bfedcf7ee445c3d2573187320b3cd54f1e0edaeb0e33f933deaaa700811481075238ddd1f869f261dd2d5faeed59efb9caf0ad11d670d7d84700966b2671507cd77368fdd35a049ff2d5c6c44688ad83ab84ed79f981e23d4d20e0f22b1223ab30354d53acd8c030ba81d2046ba7e96987943e61be23df345e3c0849ca6b837217ba0cf908da6dc4641d857cd86ae2f64d65fe39da34fd4888e4cd927e3bb6895817e0ff0beabb262e5344b02479e3d3fe34e864d2ec4f2d17af9248c961c63748824804adcc1dcf22e978f6ebe2373426c9d4f95b60b742df72bfbdb550cd437984a8ec7f3da9a56cd7675c7d335f5adbc3ce5cd7ad6bff1fd093221213d7320ddfba15eee075f5ebaf27b510c6a7325c5955d013e0cd68dfc28d560ebb714ac8667a2789046c817ddc3d5ac56280586d88c84b5c7aae3f2cfe24310f4d1888e5ac75448b8bb258fbf4fa2fd144ab4ccbc62ee139c51892a8f1d1408ee4d8149e006f0177591dfb054a6e3a71243f3f96f10ee382949d814b09c0e85e1c6f206468699fdb963bda789127d0b003822062fa3bd178449c48a5348d2368cfa03e85857619e019d08c4d459b918d55f8b7d4419f7c65abae96bae4cd3d2422101632b36debbc8ac48a134844c863c14dec30e59e409739f59859d464c37a9b7a33a3fd3a03b2503577f9731205b912b665da4427690b576f6388a13548c53f3d1349afe0458f84c74c315e77b4b72764527bf5ec9da1a12f2309e79cdf3302ffa32a134c6ab34543dc102972e25bed", 627 "result" : "valid" 628 }, 629 { 630 "tcId" : 45, 631 "comment" : "invalid output size", 632 "flags" : [ 633 "SizeTooLarge" 634 ], 635 "ikm" : "b20178d1f3663371d5d347d7aded2fbce4a9c17d", 636 "salt" : "4e9cdbfe449915347ce68713d9715cf8d0b255323310b086b9f49cc19c37107aae89cc732ea70cd0d7ab5dbb77fda8f5f6e081de737d8675db5373d8fa34b327", 637 "info" : "02f69f053fbe2102", 638 "size" : 16321, 639 "okm" : "", 640 "result" : "invalid" 641 }, 642 { 643 "tcId" : 46, 644 "comment" : "empty salt", 645 "flags" : [ 646 "Normal", 647 "EmptySalt" 648 ], 649 "ikm" : "8e9dfcf668a8b7e22c8d403c35af78324dafeadf", 650 "salt" : "", 651 "info" : "b4d6ce377ee98d0e1614e3865354cda02dfeb92010ffbade5d1f7e4329f166995a67415d56221128b04de3e8c49437b9e322986b5fe1256c7f8c81021b99ea96ae", 652 "size" : 80, 653 "okm" : "dd84d95073c84cc9d3d059855c220d74f288642a9f73cc2f20be70bbaae251b4341a4f20a5a9ee1e79f976124e9e3293f790c489a52a00b64089ba57dc73e0f81fcebbcb7f75c7f9d02f6dd4bc7b5466", 654 "result" : "valid" 655 } 656 ] 657 }, 658 { 659 "type" : "HkdfTest", 660 "keySize" : 256, 661 "tests" : [ 662 { 663 "tcId" : 47, 664 "comment" : "", 665 "flags" : [ 666 "Normal", 667 "EmptySalt" 668 ], 669 "ikm" : "7ef7d4f8c11d940471cf9a3048d66b3b3a3d9db9fed5f81419fe75dd50116f4e", 670 "salt" : "", 671 "info" : "", 672 "size" : 20, 673 "okm" : "df0f763d078a4ca47f4be5cdd0e63bd25c34dd8d", 674 "result" : "valid" 675 }, 676 { 677 "tcId" : 48, 678 "comment" : "", 679 "flags" : [ 680 "Normal", 681 "EmptySalt" 682 ], 683 "ikm" : "1b6c7d5da045bf8bd4ac3083e8de2b90904bc7f7830bef876e355b74466cef91", 684 "salt" : "", 685 "info" : "", 686 "size" : 42, 687 "okm" : "934066ec4d946c91f2bc57a2f238e9494c09efc3313d0c8af0997e29626dac9c7df450c1340ddddb8ea4", 688 "result" : "valid" 689 }, 690 { 691 "tcId" : 49, 692 "comment" : "", 693 "flags" : [ 694 "Normal", 695 "EmptySalt" 696 ], 697 "ikm" : "b9da242c02bfe79364aedd7a323692191092edb2094f112675c2609a387c3b21", 698 "salt" : "", 699 "info" : "", 700 "size" : 64, 701 "okm" : "60d935c3680451bef0b22b3f077ad4d709767dc456facbe4d2367a7e2e72d8457dfd8a9f8616d3690598033e07228b3cb8cc36452a6ace25e3eb6bfa55a41167", 702 "result" : "valid" 703 }, 704 { 705 "tcId" : 50, 706 "comment" : "", 707 "flags" : [ 708 "Normal", 709 "EmptySalt" 710 ], 711 "ikm" : "23624191960916aad7039c8e9dc2ec4e04ac61a233a02ec6045021598123f0cd", 712 "salt" : "", 713 "info" : "60dd0d1381a014491b34f0af15e4bebb8f64cbd5", 714 "size" : 20, 715 "okm" : "4d3bf3440bdef2e8624d89ecbb31ff8c7cea5835", 716 "result" : "valid" 717 }, 718 { 719 "tcId" : 51, 720 "comment" : "", 721 "flags" : [ 722 "Normal", 723 "EmptySalt" 724 ], 725 "ikm" : "ad75f83c7fef898ab33a429af351c10caaf39ef27b161a6806d34f1f4f8be229", 726 "salt" : "", 727 "info" : "69546d578a213b7f2af101c8ef532339324d43ea", 728 "size" : 42, 729 "okm" : "069b7ee4b0851d49956ee1813bfe1834761fcbf4c26bb706a7cd5b3acda3262cc0ff41c615b659a1aab8", 730 "result" : "valid" 731 }, 732 { 733 "tcId" : 52, 734 "comment" : "", 735 "flags" : [ 736 "Normal", 737 "EmptySalt" 738 ], 739 "ikm" : "cb55dbea8b91ae1ce0a07b23b1508c2a930560b8fe7255fcc3e37835803661fe", 740 "salt" : "", 741 "info" : "b57d6aaedf30bd8e25867059761a02c5d0478f2e", 742 "size" : 64, 743 "okm" : "9493505c48e27c8a2b65595fe782c0d91641719a738f125243ef5c5fb70113432e2f66d85ec8de0949c3d2489b7ce538d0ee76c759f63a4cb447db91f4f46fcb", 744 "result" : "valid" 745 }, 746 { 747 "tcId" : 53, 748 "comment" : "", 749 "flags" : [ 750 "Normal" 751 ], 752 "ikm" : "583bb04b870b4b176e58257b67ffa3b8d4e339248fb0c38105673fe7097ce47c", 753 "salt" : "aef10b993ba2f9c390d429441bd6612f", 754 "info" : "", 755 "size" : 20, 756 "okm" : "fae77a235266738861efd6cabef3f1ea1f568acb", 757 "result" : "valid" 758 }, 759 { 760 "tcId" : 54, 761 "comment" : "", 762 "flags" : [ 763 "Normal" 764 ], 765 "ikm" : "fd4e56ade648e1cd9d797b0e341700c637b0fa69d64b9088f187107f22dced5c", 766 "salt" : "d7b1397162d311e603b5214fbea09dd1", 767 "info" : "", 768 "size" : 42, 769 "okm" : "3ecc9f4d6ba3cf4096324c58baf755430b694f29bfa0518e98a0f8a155db1407fe7afa06aa0a95faf0d5", 770 "result" : "valid" 771 }, 772 { 773 "tcId" : 55, 774 "comment" : "", 775 "flags" : [ 776 "Normal" 777 ], 778 "ikm" : "9ee52bce034b6c2b86d280a16cd67556de34c38c6fed2166a00f90c13164a435", 779 "salt" : "56aaaea767cb8a0d5178c94d4761459a", 780 "info" : "", 781 "size" : 64, 782 "okm" : "8ebd1e1aa8fc14ee946444f75b8dc5c2b15f4bfad5044dae9d3c4f68d01ea919414cc4efdb02ad9fcca92d3341e9cae7e3aa9be31814e2dd1d64c72e9a2f3d03", 783 "result" : "valid" 784 }, 785 { 786 "tcId" : 56, 787 "comment" : "", 788 "flags" : [ 789 "Normal" 790 ], 791 "ikm" : "cb785e569837f730a147fd2d4f53f6e297453817eb117270e2d5c286bffa691c", 792 "salt" : "545a0de785e5820ec65268b63e543c03", 793 "info" : "63421fe4d31283e2dc3d8d09bbd3f9509bfd7b4b", 794 "size" : 20, 795 "okm" : "d2ca6d0f5e27362009ad534c873137e643dfb771", 796 "result" : "valid" 797 }, 798 { 799 "tcId" : 57, 800 "comment" : "", 801 "flags" : [ 802 "Normal" 803 ], 804 "ikm" : "101fe3335e827789564e7ef23a2a0401ae336d646ab15ed4b5edce6801f128f0", 805 "salt" : "317a34d74b046e021493b750d058227d", 806 "info" : "8f9b9f4bb9ed5ebda37ea28f97aee40d533a56c9", 807 "size" : 42, 808 "okm" : "22b30c7825570adc130f548a2a16eb50bb088829b76ae7e120e3892cd34c8982c4dd029b011b8bc1b690", 809 "result" : "valid" 810 }, 811 { 812 "tcId" : 58, 813 "comment" : "", 814 "flags" : [ 815 "Normal" 816 ], 817 "ikm" : "62dc1cecc7f444d924e20e9e3cdef183b5120b1f5bf863519826fad284c883d9", 818 "salt" : "1956ce69bc08e45ce86f5dca57d0723a", 819 "info" : "0cf3a7823b830f3542ed7e66b47be87c47e6da99", 820 "size" : 64, 821 "okm" : "351b18c9758fc7f144fd79b81fc9871ee8a330d16a0c26c7f7f745611aeb98ef000244e07ed7b3c14f26b3cf978ec2b6afbf15b76695d3216278d7040f7a80b9", 822 "result" : "valid" 823 }, 824 { 825 "tcId" : 59, 826 "comment" : "", 827 "flags" : [ 828 "Normal" 829 ], 830 "ikm" : "2c1fdbf9a2fe9bfddccfd8edd7235551fb50e642500f29e5425ef7f0e78d3905", 831 "salt" : "be744780200ed6f2027fae8b64f2de0da992369a19509e590c36f82d81f3", 832 "info" : "", 833 "size" : 20, 834 "okm" : "846df795f65545e043cae985af72dd7328252635", 835 "result" : "valid" 836 }, 837 { 838 "tcId" : 60, 839 "comment" : "", 840 "flags" : [ 841 "Normal" 842 ], 843 "ikm" : "99e1688fbc1d2f2cab80ab95a86b301be9c6d996aac4f13ff7e707487126bb89", 844 "salt" : "bb869fb1182f74b65154d5e53f45b0fc3a1d8a6eac58eae2c077fb29574c", 845 "info" : "", 846 "size" : 42, 847 "okm" : "5dcfea7808776747a63e372122404b320721d04d1e93acd720b06b896668f86ecf22081e48c784df714a", 848 "result" : "valid" 849 }, 850 { 851 "tcId" : 61, 852 "comment" : "", 853 "flags" : [ 854 "Normal" 855 ], 856 "ikm" : "d8ba14145c3b749c50e22ff58f552dde9dcbce9fce3c3290ca3a2ca04f3d1eac", 857 "salt" : "026ae3d9c6b5175426c0cd000b06a8eaa9887941820608602a01cd5fd891", 858 "info" : "", 859 "size" : 64, 860 "okm" : "e1823b02928255424f5818f024de3a12537f7d10499549429a661664b8c64aec9f15c1d71b4997ce64483e9ab2bef0ea25e25780a7abd9ca97a3920f45a67c4c", 861 "result" : "valid" 862 }, 863 { 864 "tcId" : 62, 865 "comment" : "", 866 "flags" : [ 867 "Normal" 868 ], 869 "ikm" : "3933360960bcbb94262644f81fc832b15eb47834f797577fd9fa6c2110ee22d0", 870 "salt" : "f29df8b80352ca0c08109e0fcedd4c24dd0547f4f2c67cf51caf3553e7cc", 871 "info" : "ffbb2b91b560790cef1eb610e013082986b47fdb", 872 "size" : 20, 873 "okm" : "557efbdc7f49f566abe87dac7a6dee0f0c63279f", 874 "result" : "valid" 875 }, 876 { 877 "tcId" : 63, 878 "comment" : "", 879 "flags" : [ 880 "Normal" 881 ], 882 "ikm" : "5ad1ac7eb76fa7cc05a30a6f6236e25d906bb0160cbf5f89350887523cb3f7fe", 883 "salt" : "91840321a9a3030285df668afec60a46579b7095f3c357bfa3e403eb2080", 884 "info" : "7da7c7a79c9d94bee3b561e532766f8cb329a11e", 885 "size" : 42, 886 "okm" : "ff7f4fe477c7e6ae93291eb19d7dff4e5e7a1e758bc1d916d3975b011143459ca82192cab3e28b5ccc71", 887 "result" : "valid" 888 }, 889 { 890 "tcId" : 64, 891 "comment" : "", 892 "flags" : [ 893 "Normal" 894 ], 895 "ikm" : "59ee8495dd1744f06cd1009858da52fc81490e1547e0f8b173da0818dcfa0ad3", 896 "salt" : "31a144d8fd2c31ec7d6fd63de0c70e15149ec0f10595ea2d3e4a7db54826", 897 "info" : "4d5ca4ab21d09ad04d3c7a71b5c8a8822f1ec808", 898 "size" : 64, 899 "okm" : "9ca5aebd961dc42fc40eea99d12a196f6c34d36aa0f3784157db68f6e1feae71fe45f8ae63248b12f52a96109b03101970f580eaedb7afc29515861c75ce3898", 900 "result" : "valid" 901 }, 902 { 903 "tcId" : 65, 904 "comment" : "", 905 "flags" : [ 906 "Normal" 907 ], 908 "ikm" : "26c100db697f01ab998be43afbc294cdd0554e43ad75a6ce5de4c5fa427760dc", 909 "salt" : "80169781fc54f9c49e852e49b7246174b7017e02d2ce71bc7ce851b82151688b34ce1f203930e00b7f6e8d56b51b3d33d688fe24dc17a935332ed32372cad575", 910 "info" : "", 911 "size" : 42, 912 "okm" : "a048996420f03255db2009764b349859683baad26a5c8fea6c1651c22c5ba0d65ec13e049273c56156ca", 913 "result" : "valid" 914 }, 915 { 916 "tcId" : 66, 917 "comment" : "", 918 "flags" : [ 919 "Normal" 920 ], 921 "ikm" : "5e4c5e300cd1337f3b833ce4d3a0bc13b5a457577e157a94715b041833882fc2", 922 "salt" : "e365c68a08cc9a36d6044c5e108d784e801da10f66ae266fec614d63c68caf222ba75ac7699befa2e9f303038d0e2d07fe3818fff864068d2b714f1758a5f11d", 923 "info" : "496eb6088ebcfd20d1611bd18ae36ea8b6a6259e", 924 "size" : 42, 925 "okm" : "02adb7ffc83257e7f21ad3c493a8cc5d4bb43db68b4defd246e5f85dc9f9eeadd5941e933eedaeb3f795", 926 "result" : "valid" 927 }, 928 { 929 "tcId" : 67, 930 "comment" : "maximal output size", 931 "flags" : [ 932 "MaximalOutputSize" 933 ], 934 "ikm" : "fcea23ddff28c25422199d3e0d4de6fc9afecb9bcdda2a8b62ab30b7bca18142", 935 "salt" : "c82899e4333cbae3f49dfb3fc147d93b9b4adb2fb7d2483524afd2f879439da75c2d4f20080c66e60f6128e8fb014346b056d6bbf987899c4fab6693cb2eb320", 936 "info" : "270efe720aa828f8", 937 "size" : 16320, 938 "okm" : "da952bcb0e3d17fff877e7839e8cb73789f617f36113112b16e2729b387a8cafb8254c11406214eea8a4f136c5915d15e4441de592365aed3f44811484a95dd6b31a88483d4e685bcc0ab053bb2d44696553a642c605018058c3568b4aac0c0d7fa69d1eabbe91feed7a24ca3cb97cce86d8700892d3663e0e6a154b4126656b861d5169181d294b6661653e036eed7f625cd858c20c4a7a8a4065e82dec7ff6194d968212df0b5834b15871e6c0a0b357b8d30132ecf79f820ef7337259884c54398b3e284299511ee3a9301b1ba34d6074409d7959ab3567dfc8aa51f9a42e8c681d1b04da1f655e3ceae62f4383f931cee6f6effce1503d1071f10de72dfb6af58d3d11a6a3b01506f4e2f6376f6e2e414aa23e4da9513c849248cb25681a43b4ddcc2a942341f63d1626c05257eadcf5b03a020faa1fe4d255cb318a0e627b874f8849d2ffcfad6001bea1d7f3e6fbc267de89c69cda3bf76673f6469969b0c4e51273a949b5d89ae637b28987b3fdc9c691573af81c1a0aa4ae188d64d9704ddfc239d8ee5a3e5aa0d895bc4804634dcf4ce07da49e9f7984a4a23bc5f3b0fcc74276ffbba79c4043916cad7107c5af2d5419b9f0a9640a3e891729f4011964883a2029429d3db34a8ee49f0507c1c2e21e740775e2116d0825dd3a23eb43d77d380bd8cd01ac00cf8185bda78a44f7ac74c95ccdbb9e529cacc6d30a1965434b69eb1990915fb2ef970ac72979bf5038cb3d6d10eb2f64991eddcc5bfc175b430901a713138bb6a3fb3b1ba2e7939b48ac3062c2fb2d0df62c682e31e0f7e62dff36a75dc4b632b4ac92b97b76d0ca1c9159e6ca95e221792fa578fcd673183a2194ab27cb821711f8e42b5fe246b5bb9f2ea4270806384b5a3e0e3327c178fdadc263f6b7adce122805d23c2c0f0eb2fbc444636caefed6c5219d566ef29e060746d727299e19384fd0e3f17e2585a7c014181e9a4a43d16b52765c9a3618a7aa09ee256ad6b2ddbf7cf49839168f26a09ca1f59f03993d88b947f9cfd664d42b5f937deb5b6e94dba270914df118f842dcd1eeeab2c33d73db68ad1f8cede6d642438846adb70a68a8f571fb576f274c155379d41f16338440d344fdaf8e839ba21c2f498e4b8d9d6664c351273331c05718eb1d909cec0c1d5c6fc3d5055b6e8c149c2a49acea05baa970aaf17ac01b8cbe0e106efd1f59d39cd6fed10b23423ab7720cdd908342ecebc82badfbf5f0a5b71c70cca7242c37f26c84b74adf235863f8d96c676665fe0f5b8bf1480b6231e3c78846dee5789c3204a06c867cb40f58694b52a0129073b7edd145bc33809ef0ca00da8174a0bc992730dc811b350ea82972be48f0ae661e4c8d38d7ddc7d97a96b52aa8a3cdcf7661d4903cc883615168d459b3ba6286b3227668ba966436a6cfefc3273034902d0962f569af0bf1ad944c4889ed63aef03d08711250e4c1bbac289e185dc65908b1163b99a5d09cf994de4d1e7428013a5632a0281eb561ff454c3e98859cdf861f2b2c4ab1986c954d014060f6b6aa705ed052066f31e3e42b78cd9588b58f1a2a49a74434de44203ff8eb96f2350a3122cb1275eefba795affab313dfd056dbbd3739adbefbd5f0e963cc09d9bad2753988ae8735783e91c9ec3cef1c4579249e8418dda016046eee9e117d87ca6fa166e6b3c1cdcdd4a333a5a605b85df1b9657bd249dd4c828046ed55fbb25c13a2525b5d2db9c381e445c83428952927eba4808871a23455402c51d36d09a169c41c11e39a27f288269b76cc7c82da97fbf1b67e3762b46363466f74e638161962041067e699283c0493050697c0bdab58ccce4d281535b354c6c180e6497bded48a19dd4ae8135e6662f5db9c22853ee5591fc7e7556f65ccde5b9bd2b1d328490736d367e5ef1d9a1cbd38a1494443bf6eed7150307485468b44a1a2f919d5dd38763c73e282fc02739762c5f1e0f64b84c0e81a128348ada386726b8dcccc1ac8e70a99600d09045245ed1643e978b7f60d5631f9d2b454bc7dbb47d0f15bda5af5311312740dd7e161134e7be29b5fa314b1fb409574bc3fd184ff9cae8a6b54ed97b1e3334ed5b68ccaba99453e4b8a831fc94df4b68749b5fb9799a12385c77578bdefdc346015accf7bcf5ce8335af4224c50cad9878a23a961cfabb7810e6418dd261d5e8e05e32f3546976fc7606b38556336d73e6b8fc4dd02bd4ac4ffd3a48d7d6b9d2cffea2a989e30a287d8a46fb286061574bffdfd18b2381a9c1bb64637f8e9b09fccaa67b4bdaf728fd75358ad8e2c956ae151d8dd9b0f8a521ecaa11a3d0cd1f31e2613bd163a172e9652b1066585ac1ed60b8cfa1e7383201a2ca05a907acae6b7eac57a7efbd817db37df38eba2b3b93cffd775a1a5049eb7314705d8adbf1aee98bf1d593a9995f899dbee47261676a9f023c791325d978e59a523009a1f0972e88076d34a2422d2f8ec449ba05878b0d9daf2bda36d1dd7dcb5820d73c1e6c3867303dcb21ed4468ba6b5181cce8bbf9bef5205cdfb92bad70b5783280e8ec5741045129a1765d7a186fe26e3b38f8169384180f63d6368a46134c6092a45c97431e115907ea940188d1d47e585664e60ea001a71bab4d86a26bb6b2c72115fad12aad09d20b3e143fb92f45e3869cacc81f74b3ae3465e6280c157c087d8b14a47828acb4d7b505686457ee372e7cc99f87f55a7b99142d0a0bf087383dc4bdcd481f1239f011d0a5d9394bea16974edd0b9b0de6f8e7cbc15f10749f6e52e9f5c81de2f556d392e8d2a5e955a19dfe49f53e7c51f6a1bdcb9ffa894f51985c15b1eaa4beeabcdba504e26f68b6491df2cba9c2a4c0a33e9f926201a8a6fee47aa06f554a35b4ff496e0f27d4b77de5c4531e9007b2c8948d63923c6efea95b4b0c272703e498c31a028134bf4b9e03a279c6e4a4ccdf8e4c2690ca41b6585ae2d7fa3140d88fa178bc652052fb3e5d1c3f7e36cbfaf28cfb0ee928109817c41f85d2faa5b8ec8380b91fe6eb8ef58397044c60e344905786f26b63c6bbcfc04d8ef672e33b46ba1278769ba2b32ef562d2c1793a4693d8cc4c974a94b653c8503515bef70c2f38cf5da7e09f82a15987d89a5dba48b53f476b82156acf765a28701526c258cbf6eddb22b73956ad581b84226e65945af14c74766c52da8fc2540916da1273df7da992f90afe860206ff2c09d1dcd264ec86f56e85ef9245bb7f9f169e8c84e10a1c9dc7d71421be46820d511314c4a685cbe8b96819fea4f6297c75f20522c018db8e9b9ce1740eafd955be1800e070572bcbee4f4bba35353b9d044ba7e10cba4575a138a68842f3121c13bcbf4eb23734dfbd9d81799833555d9c742dc4018972bdeff4c6d5766584bb4d163f58a91ebd2c8a11b7a9250fb53fe4aaff23460fd4470f30267c3ef1f9e040c0e26682a089d29c020e8596800eecdb47e31e6ae84e1a8a392bcdb73c0b30f13447c01a69030554c60a6815936a537db4040e0a703b7db09183e5fa39e05ec859e66a1be6cfe53dadc9af8b32eae9dfda8064b17ec96480a52b16e63467c498a4bc31a52b036b25bafb1ffd5fa6f96a12247042afcf9f7af1e897e792ee8073575048a9787a053cc2aa1d9caf37982865cec5e85d36e7e51fd4ea7e6f7b77e16ee1c98826af48fcd6e988e5e2daf4ab3ee74de9554f913ff5ad995b19c8e8d51fdb59a71c31ccc50603f785f6358e7b2da60f33e7a33c1bbceb2922fa659dabf19b44041f243e787dbce183f2d2e3e642454462879ace0e6c87c2a1c69b7134f5a15fa8944a0615163a26af67496b76a25593c11cf49b7fd7208d7dd2f738301ac9e2f5e996b1fbdd8f105a31eba3bbe56030b6f2680e0d96ab07e17890948fb747c89807faf6c02ea1156db50100047e8e75aa50dc3332494a9608f4d2a0d690f6beb43a7cbb3047434d963c1282cd5e719abbbe2fa834a8ac210d4778a41afa23538a3705a8f39e41f0cbe249dcb28a2e758ec82a59ebd0c9f2c576ea1040e7f5de79531b13e9a7027dbd4e3304f771918f5994e62ad463ef3f01303ec926155d2f431b959db55bb1d55df96c3fbef2d26ac68a117efe4dc8458cd17774ac4ecb4a55ff93be013891a7e5600fdfc33f71bad86357db4aea88b10dd8b525d1713493c6c5783be3033d30b00fc3f7a7fca76312593669ca0a1b5eb6f81a5f7943adc14564f2f7b8602b65db0258739e02a239e26b7a84e424c336659fa49d0555d61b3fb3c9995b374dc1e06c1e87fa5631b026060be9c2a1d6f08400bf1a65de5e2307e0c6a5992191c59bad2f7e33c5a9199d13b507ad1dbc1bac4903fce099f63073113f984a23366c4e1d9a5042094fa65d5f68291d4bcd554e90bcc4d193d2c949f3a438344e6fb314c5386fe4da707f1b5fcccf924534b7c05a759cbf197a4ca6c2519ddd654ca065cc0a36e1d36d2d27ef2712ca545e6452b086aece32468a599df9bd59e52eac8f8f9694f20e9c5314364cc7fa033c229e9203f1496871da05e6b06db81683404fb7f71f78931fd49e8d380111fa4ccc39081718075d3e3e799b160666f2f7d03cefd0b7777570277c1c9539b7838bf2b3e0af52826cda71f5fa2283623b4d9f79c2ee9efb63c270a5833c557a27f478bbfe1a3c3eb4bcd8d308f467b1eef21766ea5c92ee804cef0e925d7d0f07a6c2528bbcce8050a28efa572a301ed01afbdcc6187bfe0c900230397651efacf9cd3e9973457b04dba67f0c0a25715be31cf8dd443c8a949ee461f5d0e8bc8871dc11cddfd5ccf7d9d2d96ed4e5f116428e0b64bf9cd74adcd9229de8c0f91cf96aeff891db7d05f47e37db94ed712fd11fc7bb7c224431d613a0adca995205f04fe3c43ee105add0912774fc7dfd10866921b0f5939d6d583baab068642083465bc982301fd29cd786ee498445a142dc786e2d156bd41a3e10fe68e9ba32180f7c82a49e943ecbd62838da86d2db1a10a0d9ad35f1658e5024b5ab11af68b5eba6d1c5d209e1d986844be7bae18b8c4f47297463038754eadea0802b78235d3dc62404b2645dc3e695e222a1a866321f8bd3a63526cc065d97d73854abe078810a3a5914b66597630e27a2aa563381e8a4f17f00ddc5808001284ccd0d820b5881697bfabeaa5965a57de9e8aacb8f101d7b4a69110106ad7b60fe680633c36d0a59126b5c132ce66dca973ddcb600c8ba55f577b716b8e97a8b9d755303b4a014ebfbf5e134e0a764e887b038c064d4c632ba82ad716434565a71277298e41a5056607008e1d5b44d3e10255b449a7bd2f4185f0899d0920de2254ade43abc979971348132c143804fb2954ffb51d538e6d56a94b865d51715da3019a292ceb4c044be8fe24192d8a8a6b5555b40a3d535fcbef5a83132415ba6273e90a377f6a79cfea13e76df55555dec95fecec4101d3742629166c63f437c94c65c42d4a82567b667acf94c26a72293b6179e67c89a31c1428a0392964a40caeac4b2f41a941912ba33caedbec587c272bb87e0957223c5fb780714567c48d8694641193e3999d0b9789e8d6f616195cdb4cf3ddfb2e703deab6993664e64002f35e101ed84f0acea06669bd53d84cd28844ab7095d8b7e52fd8b71897bcfcd63af144ece2e36ab73367cca5517fe103b68aadce74fbb519aadc5cb1484e10ecbc5a6ca76c372a6fd9017f79678374e6f7156582ba737f5bff73c7a808756af003ee91c63ec6286d49610f15d3a989d110e352aef423d5090efa4e000a993a0936a7c782c502725f0975cf991406bd63f0d6abcd68bc20d34af4f100586e0096b70a17e424c111f375551a75e8f6c3178ebeb98168bdaa24dc8bd3bc7c3046632cf2771f8985b3888e887e2b5e25d184064eabb63b77ed9a8aca1e77d32492feb2420769ba40bf74647bbb37495f941e433a1bd80da7a07367d4fc00f107991b37e796c58a68dd0345cc106ccd98a8d0e7316130522ee100e6b6e57fc4e06e0ddd76000943ffd8afe4b093fdc89dc1eb61a609e154be2572c5c15bc95c4bde8d317eae4ea1cfb57ae0f7435ec74220a61f8cf12d059bed017c84c32192f97db40bd393178eadb66b01b739938fb467f884caf5c32cbda52f79ada5091d48ab2433383ccab3d0dbb6969a2eeeea5138df5bac7a7d21cde25017d0bd406ae405b0a446536ab6e67adf4f4e3f8852644624924986d56b0cf2060433d6b2b8361c05eb9281448a2bd2c034f63877462512349527a30b2f59664885ff1c6c302fa435e150a7934a919382567c3734547ddd22f874dcf631c73d104821f88df7fe2e8831ff6e231b930d9321691f03c83a8510a01e798218206e7ef1980638125a14f4d9ab05a94d8ebbf63fa4440b4c258a01989305317c9d3af7529e3aa570eef275b1bf1c08ccd7b132f3bdebc4340a251d875f6bc83d373f1313ad0ba114bcdb5714bb0918c1f3afb51361cd82ac036c6a21a4391da85dae35443cddf8329d1879fd174a073ba5fabb6d669bc5b125601228f743114a6b0a12d406853956ca1fa4900d78f4d448394dede90aef3635fcc61a2eb05e700d7b5e53ce85657e44271d6dd7f13eb0e2a0cdedddfa420413ab9a1d43d159eca7a8fd2220d572d14748e2405061942296ea29d46cad9b8cdfd872bb6e577b11aebaf0937ef7a344bfe65670da72e8769f6680a2e3b1fafd4a4a7165e400c59438fa48e0135be1249bc023f0ddc6408578ed57cfef859fa24e4d9291715b7f7863b82b52b06ee0bc2d75a3f708bc82ee18aa19b6487c37a365d9334acfe161eceb65aa7dc90f49dbc25da2cf6345ad44cd188f0722764db37e616b913b212b2bcae5fe09a66b39c526e9cfb32514c862af2f7dddf190c68885b6691066188cb32f68173818d92c32f53c6405ef6f3a5aee0b010c8c08b9b5906c3f138f53cc95d1b1d15ec3a72f52c73655152f87f40b934370731dde442d51a2477b3fc9aa357796d7126a9dc22c6be364f74adedc35ac525daa39621e9f9b6449dc1446a2178b0373d53c9f177a5487a2054cee847322ec7792c0329886f6fdedcaee410c82d2f5a9f8458d185c196392dbeac63fce18c23c3807013c0b9cf4ff97096ee1d4a7d9f5e182d5e7217e6c9c1d8c23a6b512d27a449f816d6db9ff50dacfce75b91b1322e2d106b6ba46fcbaea5e36b4968eab13c6b5f458ced95de43339040a9090df36c873486a8999778fe879a3030cd5a8f721805f3364eb7fc30cc023897315ea4c638399979f58bfe102c456bc7344e35c5e3e2ffc284574d16e67731232f4914b70fb3158c51fdcf49fd4645a1fefa0af2a7b290e7bbc5564e68606810b217938e6996b938d42a05171df0a3ad1a1cc99af359382442ba2643ae376b30a6c4888f2204354bca1b9e8dd3e309556ecbfc75f00275ed035ac839eee68e61056b182a9aa68affd8e9c5d5653a024f8c826e63a7627dca5388d995afb1473078cf6e2a327552917a20af7b81c6f0b6476b85b94e003049b5619e5150251b353792f3bb8b3824e46f8af9ff992379bc82c7d2dea42c900c2e814600e9946c477973ea7720ac518058f72fff453072ed0f5ac2b724269f9cde6b0ffe3beb2441da789ac2da03897762284da7d12fb019678f550ba79290729a77b3bb6e52ae65530b5c8750b2bea26504978a55c8b67454ecbaefb64c114c59340f1637e63b52d27f80f4ba2583b367cbc930698c7b40c3ab6dd719d5692b638d14b2c37d6786cf6b538d46959e7151728cb96cdb9de8d33337c0fbb10b1fa8d19e16f78b87de7ce4bbae780af45044e523bf82f73eb2eb75b064876ad6da9117d92ab02404d97a55ddbc1621b6664fcb4e8a0fb017cf03a731cc6778aaccc84321acdd83bf70f2958f7ba30ff9e1fc5593114d6097c5a074625ef40adc6dc2a24e865bad210c926071447c59308231a64bb3f13f05e90941b0ab8e8b8673f2f7274de43cdda7aadd0696f054c9c3e7917932e4c556625dbdfc4da01a5b4394b6123f1a06e6ddfc4e072da49bcb207d7013860a4d2cdc6707509c38e71e49034d2f32016ebca6b52976b06c572740aa3a90c0a24c008940752367f0985df701d6b1f91ab2f621a27a58adb4b080a7c2cf039ceb1757a703874d511452880616479a09ec397b83976ce6317c5ff7b76afb946a994b07456a14e9a4d64120d3554ce08eb8f40b9b99899553ee6183d478e4e268f424b0420904b115525e84ba2c5548bbcc7a8a9601d2d0494b5b5c64e2a76c7e0414f14b64edcf4afeca794c0874db8fb12f787579048c208d6e29a5c922b1a5d913ac8edc288da73d472dc80b7a11dfbcd6836d6a95047cb1dc7da951831c22934c487aac86eb79eb15d46fd0a7caeead75789178039a9f810232969b56c49ca1911381cd06c31b63b827829e22085d8a29509c5eb807020cd0ffe9383f619ac5bf3b4046cccf6d15959862e58d386611ddc602baee1bc70a30609f1314a619fc4a12576f88412ad16ffb7dceef23beeda6b5ef2426510af2576489de14f541eb78e0b164524d3a04644c8546100ec8dd0fc65898975d68147d0e0112255cd85cc6773a9b63120690bb33fa8068cd6ad469c35a286872ba8910c2f1d2df56d54e69b20bfc0f66013edd2920c384e90bbf92dbf48497a7ff0b108f7afbefc0c53b114df9abc0fa40436c12f8692af9db4793df1b0858da03423bd4ff300ba005d937f06cafd503741ec0c32f6ee3daf44ea893c8ea8bd746a48bc388ad53562265984ee84ec589fc12b579d8960f382d7e27b5d90936b4e6f120afe68628f1f210d05e7dd7e5ce7bab0be7589a0494fd08002adf0b03fc64605778e7f5079aa370e44d1ae9ff13c1d22a1193248a23c0880703706670bdffbf03a3e2444039ce8113110163fe40be11caf61c52c04c908f182e496ec3ff630c2a80414e6b277ed190edd58baa7897dcb78b8162c02611f4cb4d6805246b18d35939964276775982a98929db651c440c04c9851a8752d158e92988b2a9f6387025ff1e2c6ff921b0ff86834d3beae6736cc2908d4d5048c754ad4b31d56e15d9fb2a4c84725210835e1e1780d67ac39f60fad79ff1c9dde42a2abeda4fea1bdf2b30e143725779c060ee35192cde2b337690e22d80f9b6992fc5450d6eba60c9b2003747832f180b5852e378e7bc53d4d57329cbe00422c405b8b14cb8e61c310c7c7b8e227b9848687323dcbf8b1e0f7b884188d1130b538abb957617bb3b6d587f40511660c42548fb197f0e86e35c6a240ed1486e2a4882303aea8092650180eac9a7d80bce5d8a5526acc6cbe78fb0526be40b0082d3d47152a1e625e0bd0cb479a3b9d6a6d9893fcf55b027a4fc704fc6142fccea1f5fd5b0bdd5f78425f66e7158e211b0b5593fd73ad3ad95947e95663b3757ecef07319cd1596c87c2b853a82384e09d032b2fad3277e30521385a5c1cc8a0a5e12ffd2427f162aaaab37c4ce2690918580e1df0c729c190c0268f0701f26e7f534855805a50df4a4d14c57f693553808e46473e6b6ccf05332aeed8505ce4e0f2f1ce7238ab1f96171d3e880873074b400d0ef6f32df88e134f5c912a21364fb7c9a6548f47f154a8793dcd8ef450e1eafad7d67536e13cb5477339e14b4765eca74e9b95871a1cd1fed17e30f423f0e05781e04d172e19466aede7ed04775594d317e2fbfdb9dd70b70bbb6c8af3c5c12d8aa1671638bbfb699b201b21c544430f2a326fcdbe9f94482c3e4fcd070dc983f843d5c073f47ef3b3744a1622c4bc7f578b3d9cf11ddd88ac77591260facb33ff6fbec6019641652a65ecb9bb0ab1ad2e1cd20b0fbc3dc7be04f1947e4d994aeec888507b61ef0919cc1f0a68ffcdb263c55af9e7bf368522413ff5647708b66087c337539003a2c0aaaef6be1be93804556d5b9665639f3efcf122874d2e4858e10954dab7a75abce5c9128358d4e3046f8dd4597ffe778e4bd071601ba99ef5d2e9f61354af30c95ee82d38449bf52c797a023dcd31a0ab316fad54adc98469fabcc05f0914fde0b0e3cf35377d11a13f81c02571d878fcc4bc849bb0b4a6209f018a51598882bb5728882b2e6501813887a7e4572244c0f1bd9eeb1b38c9a48d98cd8968d62a7a21a48127826adbf8d0af8b0c8a470dd4266fa66d40dca6a7e051b8c2f9fe2868248bfa6e35832d9300305b64a587e9114886149c893c17d828cf328129f1f9765f5ada47cd2b2cc75af7ade1a78876ab806f2dc24d3fa1fe7763e2f07f47dde1c44325384b4f409c899b11a8fabd3998e7ab0dda51602ac0f6ebb213e34bf07f3fc981db483d26df2204b00fabe5816359433651bb65040acb8c57d949e184cebc3e8890f58f7bd9aac04818eeb38c10ab41caeccc5bd245929b6b742e7767bd9e7b0a0b826f1daa29145e745d1dc96d3f00192f0270553bd6052f4c5f52a4a3ba042a70a43570438f96899552b64cb84d6f7edfa2cc9250c5db008ee9745d0ab57515c55b225d72d7de51c405a462e1ee5e3171c81f068a4c37db6f77fe0ba6b5d0a573126cc8781a08427bc0ca2d91df940f67935ca46345e00b0960fc10d717b62caeeb8d3df9dbad610fc0c39db18993d2f16e4cf457e176cdf73d3c906a98a4aa2c72f90e48448fed81359b07b2160e520ffde2589fc7a824da54d5d45a19ea8e804fca15d95743f2509643e0b65e935c9481fdb5c28a98bcd6fe0f76604aff5735b872d82c5c3b2594cf5cc20cdecb697ff5ae00bf9b0e2be9a958ac639c832f683ca5b437c4974bbc85fa58665499620110cc309e32148686db35f4020c01006054f2a2785baa01238a869f646f74fca8a0f949b8f16363038b3320db05f5d66cda22fbbc826e981d9bb7c37f141fa2d201fa5768196c75767366987620060312417b5dbb56b88a937cde9576b2fb607bbfa61197185e52f470364aa96a722a84150fb6fdacac21857eaeb17d5fa70673b1c42289e3c7c111adcc7096fb9c6dbfaee1a72d02783fefdc59eae2d6dcac7bcf93bbd557f635e2ba8cf6760303f2d1315cda7fd50d690f1c506fc4de39a0f1638808d9508f77c27353435e78317f528bf6f283988021eb06d48e42c2a07bb51b89619a9faee438ccede6700165f384e0d1597cc274228fc0d879a51d7d074ce18029d1d6a3c4806ebc99eba8d66e9ee00b7272ce335ad9471c462c0d4bb09f14bb1ee1ac5b89e31beedba915410d936e22ca630ffc4e53081bef662e55785ed287c6ae0797705e19d80e0bc77d9f35fd5b2700ce38f588844c5c895fe308a5168ae2e3a1fc1ad4c4d126adca021ed71e91079d98101eddb37e87d7d191ab28e420328c7ec35cd7a2b08f633d3301ec851012c98350eead48fca4dbb4c8b7bf266cd5f418fd662f33bf699a80fa698a1b3226cab671922bfbecb8486f4d802d0814adb84623926baf2e35e995dab3d9a2848eafbc951ca7e5489aa9983de26806acf57af0109b1a594c1cb0c5c4025ed53d1a2e60f7ef3951933770b2535d6482224a3e4a160f6aaa77215b51440160887d5f920cdd350ee0d354318d7b1639c926fe8e8f199f3496610ed7ffcb6fbdc0ed3e09a57fc077ef5ce55643651009eb83009244d1dc0c868f81c575a296787ec1eed057ef1fcfb4c3ae6a513e001ed61c70b077bc2956e0d92a580f459c390116cbcd7eb5e3904cc0c3b9ba71a4b1a3c29d73d9e8bc66fd30666fc09e6c1d96eff11538b5df079182db0fcf3f6209b5c65bfc439f6d8eb281267c8ef5c71669f8ffcd164afbc35ac08970f639e41eb15c46bd083bc29c2900172e8bb9f11812cecd228dc8608267d546aebb2d269732b59d22124e6a25538b40c9b5f1290209a42c41b1b5dc4fbe1bae7a833fa8dc4392d33b59d9f51ed49aa2e9ce8ab854b84f242cac5e6c54621a0c191afa4878608a5c035dc9b24be21cd4ee01b06d1d71873ee61dc4147e41e02c4de1cf6551d78c38df79d645510454aeedf3c0e0fed02cf6d8cdf3f5f1da5180f04c9a9b3e15a7dbed1e4a03b64b4b6caff6e393e63d37a5295c72f6c18e023f2171bd413966d68ed043c29ec560e486d2b6caaa8b3b12e1e9d5513071f0ab346b3af635f5c42ec8868b32595ec28d8ba79da4d2d122c7ebe657b20ea9c2277e60d632090c3ab0b6cf8f586d2618b5b891c81089666ac474318351e65b5276323bf7430b1f985ec364c907417bd26a210f3da62e85b1e96515c31cccbb23a09d9a7086aae5aca9d02d3f35153edc77baaa515339edc73f538895fa89e8f133d5bdb3f925b5988d35a69d3fb355c07d388b4289cd105cdf615711ff64956d00dfb8f62e9ee2621d2cfd520fd5da4e8aefa4d20a554fc75458963eeaeca68b4bd48b40332d9bc15401efb2065a9af86d30b953a88dd138773afb4a4f46d7ba5612dd16b523ea5132c7dfd6191b75c8af40ef8af5414f08d5a74b7aabab87e1ff372d44f91d4e03c7cc274c824b06b309a772e49efe01374fe2539b0efd0db6e55d838a25d5715aba04e05ec77eaadcace41c82e58d8ef8dab53d6bece142c9b389d0c656ac0850202584c9a5781edd2d4aa199c4dca961c4e34c7bd8592fcfb9fc5097719f4848dbdae4c3147f786b81056e27615388764dbb82a45dc02a3d0d25e79dc80dfb564a38295697d69552ef999572cf70834714eedb89ceeb08661fed9bdfc73a7f15623690530cd8e9ce4270de5516edb5ee18e132be9605574fe4aa3eca74608134873aedf8931280ee9820bc41340ba727f05f35b2ada0911de5d8e93f62a8895ec6c6de42bb862ab836ee6934eaa87c19fa24d695b54241392cdad0dadc3df9251e7ab9a4ad82e4c078e0c3f176df2fbc04147224b26b48b9d08bd2826e33ac66ae03fbc06ded6ea0ee85406163c0832e9c832eb0e282fc1ecd57e1a010ccba8313798cbf32cefcc3473e3ec7bf47b7bd95e355e69d6e7d3c1382e6797a2f4449e357fa885b910d0946168312093f2a0427ab5b517a3a38383299781d1c1346c234639c7a31f85a6dfc57f4b19c24701ce0ee6120381a2d50ebf49a423f75f5ab2a78a5fb542195b83888211b1a11115e815e32385574640bf8b8789931ef43c8bf190e92789e05d6433eee867cd4e1e86ada204b2c1d42e8be00e0b2e4c79264e960a1e77ed08bb60237a8f637dd61aa94300ead31b2d39924aafd7af2699fa6bc3bea21ef0dde1e47c6bf6bc6d36a1585cd48ca0c799f98410c52f0d1502402fb28f38ba4eb3d38e6f38838fa716760cb8b75af795f7839190cd4da3be1af8814ca613fc8798f07847e9a15f5aad0ac8ca86bcd9bf29c60ce08451cd198a1b9b012061deb3ce6c2502cc6b09d2a6014ee6fda300f369b89000b46a7bf98a96f4f34b50118d47523f60286ab4f42eabaa4f55939392d17eb2d59cf8bc0e7968647911eee6e07e1c1b20a290c35fd0bb004ef2113fdaa520eacc181ba4d8699a3f044cb2a05e37489c71db606454fcfb31f3d11a488dd9674d109eef73f42668e92146f02c4ad608b732a98133b6a25cb1dea7482d924dee21422338278acea34600911370d42306c89d7b396a65277c05d50301dfe698d545de3f4b9f5ad4ee4b4bcebd876a327669176de26263b8eecd404b9b4b1b7524d4c45dfff70b8e4024ec5d986f23e69e44fba462efbb5fff5843b3eac226e3795ac08f02a4e1592899a2db6e658163c48ff3c06e6f44adec0bb3f2d4abac3eaaf98688d4e05ca20b3be78506ce797e7671d3162a651c60a72df38a88cdf34ced7349c1c6560df703dfd948572743f31bdc7c9ab179eed9d9f1d478aa511f416551dbf81823b2e452011b963d075a396ec9d752ee085cf9c3925f2b67e071351fc1b1a6be3d1e74aee7ddd2769924aa958ca2f30f2044aaf259a409c90fc6258bdbfce34bee384b1b57625bce62aa426f1c99380a21f7b268f00c0e9ac502d42959cacd173064baf9602abe95da68550c7d7cd94624da442f56261427636dec24c2e8049734ea68629d4c9794177b4289ddc5b52dd409062c71883a9cd41ddea169eca8957b94d591796323adb6b7fc409d986ce0143d519f9da512c52470239742a308fe4ab78c466dafd745221a6b75cfaf1707c6064f7de50b27875ec635aad9066940c485962e939bca1fe65b5ac76230852688152be07fad7b8a048637ff41e4345a9c69d7c88831a11ddad56e8b5aa35eae7fa28306014b8ffdd473176355d19d7e93ee83ce3e21181ad8fe61838fb05de2101c6a6254514a77e0f9b5a4e0a2c11d302ff51a34d5bda77952106e53e49c1ecc5657510f2bb023ec386ba50c1b320cbad497f84affa79ada76114e326875ca111461a46dd00616bf60d7c715ee34b7e4fedb68afa231392eb1586e406fa4391f77128dc45a1f9b8e9351383c63f668774f577529cb7b7345f371427e355c2cc380a4e5f9d584b1e2f81da1cb40722418db1248340b86ec8f7a32c4e528449ad1df38872cafa60b10ceedef33151adc19f54700f5ab0deddb2b20dcd7b53bbc8c96b7131aa14ef775004673123ea9e7822914c4dd80dfc4fc1a4c9f3a3e37df929c5e67d9b5a75107e22e331d492fe1a6c6072d0c7a16a5600690be867d89fd3f87d134ed0c45cc7cf053b69b7c6f1e29514c40d30c8102e27b67c84f8b4a08018375412ae3d8bbac8bb09887454be3565f551b3d20f2b62e73ca9feb3fc3c805f6881da87c8a7310b52b8c6e9f9d2893263bfa190d632fa08dadef449948e019baf1f6452398a256e90806b905bdaa90c86193138c2b7cdc9b567db903ffa30ccb8460a7036eb2562c4185a67ed7dee074c32eb77517b5b7285077b82047beccf346a7e85eaea9442d8707a604c1bae2a5e1b862e3d18c11bb918dc17e223f1ef0f71df52f5ebc2fbb27d7887278e09fc83d03069af56eedae8f4320528264733b1a671762c0fe6f7a1309f20ef4ac34b236ee17462b4a817ba49b99a733b75820e3f5c0b32f55ef7594183a0a4982ba388d399073ae4277fc205a1b50263c584a62f44903f70062244ff76c0c774f22735f3decf85279db2cd5a2bc3dda1be211435ad587f632f35e36699ddaf1fbcceaae50f88175463b71571415e92612978cb4ecf5cf706e2394e5bf947b32d9bce56b57ad98296a29d9c08827e3d6374e7c0dca54e4c260c65569325f3d263bf1a15a455a2051d996cd3883ea028bb64ce3512ded88ec6e7ca39b0680bcaea07d39d8a9709cbbb2a49b2ef66df4e856a2b99ebe99ddd889b6a1397c0ce8121cfa66b47eacd024ce912b8fcb6190e7fab3f6e76f42aee40c116ede149372952694a9d73e02ed948a439ead0641be4aeeab64c03f2f95412fb220475672d9d920adc74776b664e31e5232414f42144e8c71c13528c48140ed019728edf679aec12ffe6ed93fa6b23559103fc0d25824a1f1d2ee4c40e779b66a9abeda4070d1a2139b353aebf014604a73a4892fb32b4959291848602f65ac031041b76320c5d78bf7c779e7d74a376635150a9efb7f5f1e5035a8ef19646c7f73f9f98232031ed1b564bc80ec46e54902bdb32c26a8d2223cd90066b7747ff5e88c5c5b7c8a867570adfec860e074a10730563f6aedc1285cd8d73b7aaa6e4e069ebf683da7a4a3bd356e32bea5cba1a566998b14f7bb6e2ed14bf74470562747e0ac7bb9efa97e6f0d66448ce150a09b152727b4366295b1ca1afcfe61a35b538a76f12062203752219207d0f53532687c20920b1bbc7493a041adc00f0ea9b9a55c316c5e8ee4749317e69ebb0b4c45dcf04d4e917bf503cc2fd7eea0532d9e635345f3550a352138607e92c890460f8fe32a00979b91635961fedaef084d4e3426e0f06a5bef384f32380b0f4f3b9a966580a083138839b9e9d0b65003bc01d6cdfe28a7482f9dacc907ecf989d3c5518398ee3296a3d1b763f0262afedc56b5362fb4d735bc77ced2cf2b864e4d7c2c67ce621e56688fc0efb0784c3b75b748d71347987c7bcbe6203f079b16eb8ad538e6a19f95448f6ff053510447d98bfe2f1e07fde44bfb766c43a5e284a69c69c076b4ea5f28bcfad1ed7c72ec5640ca0927510433789610b806f3cc4e8cc0a354ba9f56b3f0085bbc422bc36e116296808b14cd7a6dde0a59d8058e4a0dc8159093bce2fe7c617a3e9016237e4823dd6444d33432edfc84ae1edbfcd07b24c4134efd265d8b66c525d23e625e6cd0f5eb7382ce5ea6ecdc77080a66d34b2721b5a0a2e307cdc59b931747a8067cf982ff51f8641664edbe1c070ae456154d6cc0c9870f225ff265db267dfa2806d94fab9c7a73ffc1915ee0a3363aa2fc6d6101f7113d34a3111d68c171b2c3d7aa76bb4e44c8083e1b5d685127cf8128efc15049d3e570c056741cdae6b20db3f92682266d580602a8d1b13a5c4f4dd2541023a45620e3c159ba55008242adf63edf1380c1bcafe423d4852ea7ace1a806325056b6209e914b0c99637f7fdf1c8286bda7cb62da0c8ff996205a68971dca25718b7ac25b816e1d4bd0698648dc067155d94627d380018e5196c1e443c16a34f492f3964090d5a9c5c9f0f2ce32ab50cd1d9ba576e5a63ac439d6ab9d6a64cc41fe1fc15fca1c3df7eb1018b5e7296b6e99ffd5dbd65e260412ac0558363119a987edd2b0cc9fd60b41e939502a39696cd73c91b87c88852343e1c1d0a19b2b5f11e65c8e9fc861ee74bde3c5cdc7cb18c82a06126ada073820ad771ef9e2b4775433de8efa6b701301c793400ef5e09bb9498d3ae101841ab423cbc14cea2225e20ff7efa00a955557f98e47c265c1706f275bac6bab89e9207f7f9d33181f1641da0acfeeaaf1e40032f289ac39c4bd80bb89b4292136b4931ab25d8bd5ee6de30004b1028ca9ccdd8bb69c4af12f74e75765202bd4d5513229cb3865f9e0e53d1911bace2d620d5a830cd3020fa771396b5c3e7309197cc84f6644370586fe15fd1b3a9426ce1ef04b477f05e52553de84c58934341121691c866f2a17c2ab4372fd439f22d71af37b7f109ba3f919ae26f8136624b87dc828781b1e75eb1e07ddbd62466b91d3503d479d8cd02c3c8cdbe886137b5184dbb67ea839198a72c2fab3eb1ac656d866b1770211af3373157b8fe79d4fb4d67f1d1098bbf06eb75cfd1816515afecccce23a1193ccbf18ed5a9450c6dfdaf254a71e36de6e4e7823f9c1bc91fc079b08ca8fe4d084c19cf494ebad56e2962d84986fb153f3073a7880313d42bac3daab7a365323b53c22c6438332bf41ad786ad1d6c982c48165bd90ff446be491391969c5b8f7de9409d33bd845bf5b664e2a6847e162a8a1115d321d65b41bc5608c5f3bb3401e1c691a9d474a1c6c83b4599d5038887eff5dbb0532681e5fade53479d38627e65f873559abc5b41059001b2543dfe422ad04b537feb3a2f09d3a00a46729627a19a9383586f0f349886641466d49b4c590759409d4d82eadb542b00282a5650d2c8fcad5c6da6ebc80af1c19c78f307c1087e4843490bf90e2e4903df15164a577d7f2e5c14e34187d08a977d62983052c96bc8a61b4fc4ca078451f05d6f7bab917ca49d55a1f01bbb0730a4e121ad37fce54c1a5f29dd899aa3d09fb6b313d81d98e4206fadb20b4546ca1ebdc53ed307d9751b04c335a84c1931684c2f983299a16e1c4d1c27dd6f9c24d3181011df27840520ed65cd7d9f2dd78aa158ae5e882fdbd79c77c84a3a3123af7ec0eda90facc74878d3224a03c071361067178cdc592a4b5c00714f64fc45c8903196070350a4a5fa916aa063728983a44fee7cb584aeeb66e8efbb876b937e7e5ab98d32efeeb5f9a474accb5702f2e32dfccd19024e00bc5fef51007bc7606d055962075038857076d34536d147c0be15ac7e28119f946b1f3f8dcffa9668ca41a145dafc3651078e31971181054701bf0352a97c40ad76965e8d6c0ad0d4bf6a2ee44cccaf53112478519b2d3470451568e6880b3bb446dd470da019488ba67c1edf8858041d579e501420e593bb7d9f5c926f06ab4387b59dd552f262120d67abea242dfe1f3cc384cc7146e7b6d0c61b8bdffd97b460670c053d9bfb49778aa8bdee7d4401a2ecc01e463a9803bcffcc835f6966bcec9c8e36951e0a86c3866d06659984badc22b1d078423130b981f804b2f3ddaf91e8494c70e038c8ca6c3128fb472bb68ebf56c28116aed43156163f538044633176c4d06b6e6bea44a25d2d432e17536c388718315e3b201b60862326349bce6a649b0a1403dad3a032e66406ef7f8431108864f2e8643d58ac3959403f0dcd2bb4c212849d0d582be2ad047113c8d4dced87d4f3831da7fe33325d8159d8a9e228444ef0ef90d60e8fa5cbec5f0f435fe36142bfeda20b7d12c44bb6fd1a53a8d21ea68ddea69dcc25a0e4b6370f06c434d7c075e7acb075f1a45628a094e9418ff12c8744cc3f0ed3543204c24f900824a660f88f51b077c6de4d31e1f5ea75fda0a6a064a5cf47aa148f8e4f2f696f468d69e18e416e0c11a9e332dd81eca959bfbf8a8b0cefdff1f82ac4e4a46203d0e045785879cdc05d9cdb5c1ef09b87ff2f7c149cf5510f20713ffb32a5115ca0848520af56c9f4d09b27216d8a3e8638c495e18c5d14375e2db66bcbffb69277733bbf20a08f69d96c7fb3eec656d247775701bbdb3dcde0a846280c98af503ca2551bf07ac055850fefbf68eaf11ffbc4da5b3df60c9bcf33c939508505205791aa850ddffcdf54a9312211de500317498a9687f31a34c956789189a83be85d8e56ba912eb90e1e7d7ee8d2e3cee18c75757b86384fc3c46d68b9c0faa947b52f2b6edb64ef71f093c48ea7ac1741602370ebee728299c47ee9e1423727819ac6898fe710ae155162eb739fe4d772a3cecea478f92fb4c797967c1693918d8d15a5f44fd6aaf63edbee37f9b4237ba3e8cef3958f8b6502451b444edf009355f7b463aff97b1979611e8e69c93876a59ba00e495820399ac8e73d88005973f6a5af10e160f0d81e1a63c876510a8937ada632144c9b51435cc0bf7617e18cf4255b3652490808993a4e1adf4a33ce389263d0f815d173b8b6f7442b6818887a0bae03aca89a6055dedd1b58d4566708346f46980a9f6ddea705eb4ad56de85143763c0736a7020b7e9d2787a1af7cc9eea1716bb8b4017f5f9658da6b10b82eccef7565730c09a4e764d98a776d05ab775d1d7533b3e95aadf21e8ca3284ffd403b2ca28adf917c72984a1e2251722b390f6fdc46e4cf080630647260e93b31b7018bd0e5759f6c7b7cc5b5ae5f0f2bd875e29c55b2533a82c0280e5a43abedcb81ab429e3986689fe198fe865691ed36807f8dcd9d4e10cdbb0005e4c1fbe3cd61d9753805527661a51ab3b4b54b2b5f0d0dcc9270c7d5afc13b5ea3102dea0c9999ddf14845113f79e1abc5b521881dd049db118f0a5faccf8a83e0e2dc2c1c438a8fff3d073ac7463e72eebc4053da889d3fdf2ec2c4a3e3f2559a84c45d333bfb3351bd0dd4508b80c43e41d52e6050daafe0d0adeae20f72a08d447e3d0f505d00245c78ceab083438097c6d0b8941ba49e8d413e2b3bfbaea2ab46a19de8371e6c68a8ca5a28185d41cfd365444c18dca076824522154ea11b43084f47788b25f8f37fbea4290a989d7858c1170c35cd8945b0fa32590fcc2bf813f378df5e6d6b48e85bdad17693b61da8faac5b62300017fb33048500df3219ba790fe3eb626de447270a73b8df1f5687eb86814a4c06bbe5cace0ea939ad4d1f7a678963ad0c851184cac615714af790b81ab191df839a39286ac0d144ef38e02d5255d3cc4d5c6512dc4d4de9066cae74e35ebc3ad397dac46b8d5bd7a2804f657eb22229a2771de244f5a9f63318000a140a9521f9d75e1de705112a5fb7a87db8437cb356fbf5cb682ce193d3a5a39a8b03974ddccf195c5562c8cc51d6bf503d87db3bbef4276c010e4126ad7d226d11fe739cac1a01ad83ac09719729290b80c604d9c0a788586b6c3bbed22108d25f906d6309424481cd1beda9cfe49fecfd0887e671521eab773ffdcd6f7e891b87cf17dbb18540d91320b88279e2cd3b567ba8be0b78b74ac4739e6e9bf3e29b36eaf098974f795ad9597d523a966724deac416efc08353c0a2cdf812b3c989e75d478c40aec3914167dac5706f0116cedf8360285d87588e1b62c42fe2e43867ba141ff2921241a1082d54cea0f90b5e22391ad0cebcb8c1ea07a4becf812c4e2f94ecd048303950cff4ec357a20793f919cfd15317874cb46a26db4ec97ba96a1a1860e2bc71cdece08c67da62823deddc5e72298a2abed990cc1f199f672cf4e781554b9771e053686a15339555b5338d21542563c56de04810c558973a21099bee3b945c0c7ab3ed6b964ab3c295701ed79fc613559f1174d563f0832573e47aa77e83a44602d800dd66d2613c621602ed699a21614d7f950178be822c1fad6812d64a98547da9d2713ea54c4e0aa5a2542feeb8d6e7303b59fb223d55a1d17e0ab01f63e7048a071b0f6b69df7c11c65a3703d80dee49ffe5942a720fb3f1dda8ae369f232ca245d8c4e14256802420d983d578289477630809ca683f25b8af1a44b5e7f795e179ae53ef259c4585cec4efdd2dc63576ae840d4013680840dae1482c7c8f001bf95717b238e37e73cc507ada4de275dbed21bdbe61c42b0c6dc7a993ec46f0edb7b9da4a16c39d79bd512acd7c40e667efd58751160bf401e728792fef1625977d3bb3f19915aab8fb5a88eb4df649b7cb5d2bd90313655fb0a93b14a77e176b826237315ed5de306ad699a155de1b636f091c86b3c06c60cc5daba5a2e3f437b7fa304d088b75dfb124c70578249e4a900250f3634694e48ecc90882664ec102ab97df1307e4d4f679371afead2d8b90c1d70d5a9cc767095a2e5064615037192a2ac47489c6010be95d50f34c581ebe6724d2968e405fcf04faa1c77268b4b1fb95e4ec5c144936c7ea4c404817698ad952ef91f2badb2d66261876127ccaea2799622428f0a93db586358172c8bb6aee049b8a6255bc4407d49a53fa052964e778b0fc144a02be2d5c910d13023f4fa4e3ba0243b936b6bc7f387eef6b10711f917731f58715a574fcb2a81f7fa38309a2c9b1a1eaf884f4bf412cdd0b769a168aa4e6f0cf7cc65d1496e3aa51a1a38f1289582b5b6a51312479c07462a05cd0a0c138c1a361de5586a4d1fa64b9253c47c43b3d5f6a620ad79e001592bea713286f8113aba8732ee71d7bc3337a01f0c50f0d71e8a96b6b304f1d038eace6d4d2201ca2c403e440005b72d0446b5e6eef54b3b21575ad012144dbfebd4e863d19779a8da665cef17797d76df88efb80aaa82f8a66a328f0db7b41d3dbd5dc61e03be46cc794af7de26899a821bbde95b0c8e0016deda67a4164fff6104ed7e052852129f05f6e0029b2639fb19a2a39fb8ccde46e04db8a241ddb795537b5c27a3145185d74f64d5417c12ee08cea688439d5214861d855e09b35ee44c4cb7ddecd51809ec610eef1a6a69148ac1064509479bc9e79a4c36a3537d96d0969b31d083c2eb420e58df9239445a2ef48fb331a0da8c1d01b205db1c3636bb8b7290d4ff0f7fd7df035dedac02aa857cecc9deef8140a28ed56790d932c849cbc665a99419b43e5de1c25e0307c4c9d5960a73e305a717b0d0a0de78dc8f24de69d7532f9c27a1c329494a40d2abdb389e52bfab57aef86c9951577601925725b215daea55e1b62670de03179d65e7f8982f9b7c2b01e75479454a3729e74cfad0ffeb9d8244e00d0db88b0bb66f71721709b472633153a923dd85221b19927d53bb6e280dbfc8c4de32ebafe81ee0c64ac0eb44b53ff9c64992cc46a85855e4cf157b562851e6d19f5eadc57a40f70645999f0d91ff9f70cdec8571c700b302efe25aa1341cdcaf72025214e7e79135bc8b15bfc7a2b985f355cec3c72e8cc05f394300580da31abb098ec362bc9397693b62c03512beb2904e5c88621cb25c115bb2bc426b0210a40e4d1eaee60abdf8e39cac20e87f18fad1aa9573e12955887cff237759d55e48097b8b152523ca28a42434ac43bea6f060aa9828712c84be3fe768ffe0b66893212cb4bcd3d9249c4c75e6dd6ee7b529d6207fbb2d97a2f239919189446b0c7cf8e9b60dfa8d8aa999a5fbfbe31275999206d6ac05b2e205d91744e08e000403520253e0bb17d906af992abbee786fd5f8f744f75501cc61f45b1086f81fa446fb7a0183abc353b92087cf93ef2aaf5e108fbe1e51fb50dd6057bf45d5d541c633e581392f22b313678b5c555e88363c4b20655137c5eede9daaa869e864e1bd10d4d2dc622bcaf6a3e40761de47ebf4803e24f70dcf0610e2407d2db801452b3256ae53b4d36532225757d2ae814bd236c2de8404c82df4382b574b8a8ae66e6f4d8152e18cd72da51dafbfbf77db0a9b705f41778c5540f30d12f0d6611f8b0a091ac84c69c207727e6a8076b3d37f2609ea823b405d993cf805e4a65990fc12ca41ada6d2e7773da8c7c79fb9c7f664424f326522f0d0500503786e414a2b7ce87251634fedc4b37a763fd3c8c9437bb447eef783efa736a4450d26355b7dd0f609c53babe3aa276c341a45e4197bc4d7d9491e2dac6551def3d2996204d8783ab8c0732a3a53bf643dd304bd897bc738a404b9f9e9401a19eb47dcaac9936d94210d389d8818f3d29d45584ffcb24776002ecf34608fbc0ae7d95468761e35d30fb13ce08121a4a9aca6ff3c370c3513e7f4d000160a034001b184b5cac6343d1b390fe8c0abbe3453d537c08c39a3c4dd8dce23fe99d103c2261a282430d2d34c4a7cbb57b0a1729e56742a47fe13e71a1a570656d6e7263a9e4d2924e02d54f157a31224bf7438a3ead99f6001964f2fea65ab31c4319eb6c03234edd48b8bda5ff2400afc468ebdf6fd67341818782b0a25fb99689117e6511f6c7e744efb40c2edeb29f71e818c581f82c38c4c2effc544e92d27418847f7062a971aee2b422355d182ba1baa471a007e98ec4f2", 939 "result" : "valid" 940 }, 941 { 942 "tcId" : 68, 943 "comment" : "invalid output size", 944 "flags" : [ 945 "SizeTooLarge" 946 ], 947 "ikm" : "27d5dad26540e3f65798c7b74b9157fe3593a5ab618648713d7d28df3c7c9c0c", 948 "salt" : "64600a75d1efe1f475218428fe0f93cbb935e5e3023b09a75fb422f5b1ad6865e2bee1d77943583337354e507eb5bb43c532bb4072d88428d73f72d9e5f3e83d", 949 "info" : "3d9732f5268f673d", 950 "size" : 16321, 951 "okm" : "", 952 "result" : "invalid" 953 }, 954 { 955 "tcId" : 69, 956 "comment" : "empty salt", 957 "flags" : [ 958 "Normal", 959 "EmptySalt" 960 ], 961 "ikm" : "d2ee6859f3e52e456f4b0e19252f3ba453102fb4de685b9823a652acb2f87039", 962 "salt" : "", 963 "info" : "086e8dc0aa05538926dc74e89857232aa7d1fdc3f6ca29dddaba48dd682bcf1cfe08700e2a5a7102d01e57a93bca2668dee95339d5db6b6a2e7e5fa66667b8d5b8", 964 "size" : 80, 965 "okm" : "ee9e8055191498f009d497b5d8e5397a7b602f78bca52b52cb301a9673bbfc07caa9986b9517b70bc015aa5d5491c9231d95cb01c6c54de1f58219ecd275c1c4d9deda42331dd70bbb5d07b03c219a5c", 966 "result" : "valid" 967 } 968 ] 969 }, 970 { 971 "type" : "HkdfTest", 972 "keySize" : 512, 973 "tests" : [ 974 { 975 "tcId" : 70, 976 "comment" : "", 977 "flags" : [ 978 "Normal" 979 ], 980 "ikm" : "9fb35c09d3efebdfe522d4875d9adac74ee7eb7b845432f1cb28a9c9a48ffe63bfea2fab94106d96eff39629cf57ef5e7c3e94fb95ff8057f0894c1f352806cd", 981 "salt" : "100d0324664c4c02443fc97e5186e38a256133e825398d387fd6138acc8b47833f660f52c960b74bfeb30c38fba4b6e426c17dbef9d45e582ef2857afba229ae", 982 "info" : "e7bd97cdac7d9e6b", 983 "size" : 64, 984 "okm" : "a50e6839375e2a7eabc5a3610a12225b4e1d6a1cc0b4f600a528cd26ef5fee12336e39c57a001620c8e4cb9414316b11f11861c314c3acef48251867a2327c9d", 985 "result" : "valid" 986 }, 987 { 988 "tcId" : 71, 989 "comment" : "", 990 "flags" : [ 991 "Normal" 992 ], 993 "ikm" : "c132ac861d00e8aa82470baf3be3851c9f77f96b19cc2c3eb5558c20915ad16cb45c50db9b230c5279bf7b38fbf50ce68b60d7b230530f3a5f4016883f217168", 994 "salt" : "4c3582c867fab84ca075da5aef6b78b8db982ee4fe33fb4500294659aad63dd7677f2f256bf719c6796ea8fdf12c46863064875a529aeef9318f344335610f82", 995 "info" : "7573b95f1d8ee5d0", 996 "size" : 120, 997 "okm" : "d93663825963a4a2328a6e56ee7d108de95b7c981c3e62dc8df40105e4995137ca8cfa91cbffb447ffd80b0b901578aaabc6c56b3aa66734fbe98b95c1125990e14533e13d049f025880fb2834c8e5e2bbc8719deb3b207429397c19beb0160f46441f95f8b11ab2ead32c64c12d9f46d6aaa58f9e685771", 998 "result" : "valid" 999 }, 1000 { 1001 "tcId" : 72, 1002 "comment" : "", 1003 "flags" : [ 1004 "Normal" 1005 ], 1006 "ikm" : "908959c6b518c7cc6fdf24ee7d1c05327a1fdacd08b1d66cf7ad554cdeb724e0445a3741ca47d58f5e67a7514f4834107d710bbdb6a8c1e2d37349ffdad7dd2a", 1007 "salt" : "d22c064b2b3a63abe1b4348fa38b9f5ad44167a2588a2b1af8fa862f95a11da7a5847a0db68d80815734f8260ed29a9226c678d0a60f7aa3cc39a0f9e9a02513", 1008 "info" : "cefa421c2bac0569", 1009 "size" : 256, 1010 "okm" : "621851c73876e92e257113bcb8e8ddc810f6985910304c5b481ebd50d600a03c1f1a7720d7256aabcd74661559c629571a48cf7647acf50e800d8069814a00ab01c34725bffa515377b9bf26cc3074128e2dc0baa1d765459b92ce5851bff217895c9fa39b708743b0e6be5a80af85eea19f7861dc46e77c1dad0ec89cb7c66b42b7b6eaf7cc02d9711e70284dabbf908636ca4cee1148d094519ea8830e0c7a4bf55bb5756a556bea239f200d4faa5c2991e8e9306c65b3811ceeb881474bc84fec0a9fffa8da7733a51dda2e95c04a3d88ebc5c429b2c700e5a1bad5739f897c671d45e026595e13c3f71abbe37e79befcbe1ea18cfe3b2e33c387a8489659", 1011 "result" : "valid" 1012 }, 1013 { 1014 "tcId" : 73, 1015 "comment" : "output collision for different salts", 1016 "flags" : [ 1017 "OutputCollision", 1018 "EmptySalt" 1019 ], 1020 "ikm" : "ddba77f227f237c791c07ee7e1ce9d933ecad3614212cc98d4f12afc90a3b21f4c7c3b4c54f44ad7d1e8ce45cd36aad5cb0bbf84e90cb054a1e7dc558690c5fa", 1021 "salt" : "", 1022 "info" : "6b478027231379b6bbed6c61732aad5636b5aab2", 1023 "size" : 32, 1024 "okm" : "1a4d9bb4aebb50780a57fe8e922dfbf5ba6018236b2196a0f96d704b063f739e", 1025 "result" : "valid" 1026 }, 1027 { 1028 "tcId" : 74, 1029 "comment" : "output collision for different salts", 1030 "flags" : [ 1031 "OutputCollision" 1032 ], 1033 "ikm" : "ddba77f227f237c791c07ee7e1ce9d933ecad3614212cc98d4f12afc90a3b21f4c7c3b4c54f44ad7d1e8ce45cd36aad5cb0bbf84e90cb054a1e7dc558690c5fa", 1034 "salt" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 1035 "info" : "6b478027231379b6bbed6c61732aad5636b5aab2", 1036 "size" : 32, 1037 "okm" : "1a4d9bb4aebb50780a57fe8e922dfbf5ba6018236b2196a0f96d704b063f739e", 1038 "result" : "valid" 1039 }, 1040 { 1041 "tcId" : 75, 1042 "comment" : "a salt longer than the block size of the hash is equivalent to the hash of the salt", 1043 "flags" : [ 1044 "OutputCollision" 1045 ], 1046 "ikm" : "ddba77f227f237c791c07ee7e1ce9d933ecad3614212cc98d4f12afc90a3b21f4c7c3b4c54f44ad7d1e8ce45cd36aad5cb0bbf84e90cb054a1e7dc558690c5fa", 1047 "salt" : "bd37d35e915d6a3431e8ab0fe1f1a3d129d9b6dfcdcb627ae7eb6d15068145cff05fa37e6bca0721e9ae696281759f6f1f6784db7c8d30c4b75342ec6d6a1cc2af", 1048 "info" : "6b478027231379b6bbed6c61732aad5636b5aab2", 1049 "size" : 32, 1050 "okm" : "54b3b9a5d7f1713194b8e0621d8d33c6f2034b5005d47bbc90e5883d6af9bc42", 1051 "result" : "valid" 1052 }, 1053 { 1054 "tcId" : 76, 1055 "comment" : "a salt longer than the block size of the hash is equivalent to the hash of the salt", 1056 "flags" : [ 1057 "OutputCollision" 1058 ], 1059 "ikm" : "ddba77f227f237c791c07ee7e1ce9d933ecad3614212cc98d4f12afc90a3b21f4c7c3b4c54f44ad7d1e8ce45cd36aad5cb0bbf84e90cb054a1e7dc558690c5fa", 1060 "salt" : "3b9a27801be4b5d7ae71500e2d0cc887bd1291129859f10278de575843d914dbf11a985fd4fd3ed039117b53fce0674955e9699c22ee3d3c7db05d429201f352", 1061 "info" : "6b478027231379b6bbed6c61732aad5636b5aab2", 1062 "size" : 32, 1063 "okm" : "c33219807c46e518225d0b37c02eab9032f701f79116ee1d7a4f5472b57c610c", 1064 "result" : "valid" 1065 }, 1066 { 1067 "tcId" : 77, 1068 "comment" : "a salt shorter than the block size is padded with zeros.", 1069 "flags" : [ 1070 "OutputCollision" 1071 ], 1072 "ikm" : "ddba77f227f237c791c07ee7e1ce9d933ecad3614212cc98d4f12afc90a3b21f4c7c3b4c54f44ad7d1e8ce45cd36aad5cb0bbf84e90cb054a1e7dc558690c5fa", 1073 "salt" : "1264271934b6a446", 1074 "info" : "6b478027231379b6bbed6c61732aad5636b5aab2", 1075 "size" : 32, 1076 "okm" : "a2d9e9a4248a1f7f42ba1f58119012d9bfac2693d8a7a7570bee13221ede1f98", 1077 "result" : "valid" 1078 }, 1079 { 1080 "tcId" : 78, 1081 "comment" : "a salt shorter than the block size is padded with zeros.", 1082 "flags" : [ 1083 "OutputCollision" 1084 ], 1085 "ikm" : "ddba77f227f237c791c07ee7e1ce9d933ecad3614212cc98d4f12afc90a3b21f4c7c3b4c54f44ad7d1e8ce45cd36aad5cb0bbf84e90cb054a1e7dc558690c5fa", 1086 "salt" : "1264271934b6a4460000000000000000", 1087 "info" : "6b478027231379b6bbed6c61732aad5636b5aab2", 1088 "size" : 32, 1089 "okm" : "a2d9e9a4248a1f7f42ba1f58119012d9bfac2693d8a7a7570bee13221ede1f98", 1090 "result" : "valid" 1091 }, 1092 { 1093 "tcId" : 79, 1094 "comment" : "a salt shorter than the block size is padded with zeros.", 1095 "flags" : [ 1096 "OutputCollision" 1097 ], 1098 "ikm" : "ddba77f227f237c791c07ee7e1ce9d933ecad3614212cc98d4f12afc90a3b21f4c7c3b4c54f44ad7d1e8ce45cd36aad5cb0bbf84e90cb054a1e7dc558690c5fa", 1099 "salt" : "1264271934b6a44600000000000000000000000000000000", 1100 "info" : "6b478027231379b6bbed6c61732aad5636b5aab2", 1101 "size" : 32, 1102 "okm" : "a2d9e9a4248a1f7f42ba1f58119012d9bfac2693d8a7a7570bee13221ede1f98", 1103 "result" : "valid" 1104 }, 1105 { 1106 "tcId" : 80, 1107 "comment" : "a salt shorter than the block size is padded with zeros.", 1108 "flags" : [ 1109 "OutputCollision" 1110 ], 1111 "ikm" : "ddba77f227f237c791c07ee7e1ce9d933ecad3614212cc98d4f12afc90a3b21f4c7c3b4c54f44ad7d1e8ce45cd36aad5cb0bbf84e90cb054a1e7dc558690c5fa", 1112 "salt" : "1264271934b6a446000000000000000000000000000000000000000000000000", 1113 "info" : "6b478027231379b6bbed6c61732aad5636b5aab2", 1114 "size" : 32, 1115 "okm" : "a2d9e9a4248a1f7f42ba1f58119012d9bfac2693d8a7a7570bee13221ede1f98", 1116 "result" : "valid" 1117 }, 1118 { 1119 "tcId" : 81, 1120 "comment" : "a salt shorter than the block size is padded with zeros.", 1121 "flags" : [ 1122 "OutputCollision" 1123 ], 1124 "ikm" : "ddba77f227f237c791c07ee7e1ce9d933ecad3614212cc98d4f12afc90a3b21f4c7c3b4c54f44ad7d1e8ce45cd36aad5cb0bbf84e90cb054a1e7dc558690c5fa", 1125 "salt" : "1264271934b6a4460000000000000000000000000000000000000000000000000000000000000000", 1126 "info" : "6b478027231379b6bbed6c61732aad5636b5aab2", 1127 "size" : 32, 1128 "okm" : "a2d9e9a4248a1f7f42ba1f58119012d9bfac2693d8a7a7570bee13221ede1f98", 1129 "result" : "valid" 1130 }, 1131 { 1132 "tcId" : 82, 1133 "comment" : "a salt shorter than the block size is padded with zeros.", 1134 "flags" : [ 1135 "OutputCollision" 1136 ], 1137 "ikm" : "ddba77f227f237c791c07ee7e1ce9d933ecad3614212cc98d4f12afc90a3b21f4c7c3b4c54f44ad7d1e8ce45cd36aad5cb0bbf84e90cb054a1e7dc558690c5fa", 1138 "salt" : "1264271934b6a44600000000000000000000000000000000000000000000000000000000000000000000000000000000", 1139 "info" : "6b478027231379b6bbed6c61732aad5636b5aab2", 1140 "size" : 32, 1141 "okm" : "a2d9e9a4248a1f7f42ba1f58119012d9bfac2693d8a7a7570bee13221ede1f98", 1142 "result" : "valid" 1143 }, 1144 { 1145 "tcId" : 83, 1146 "comment" : "a salt shorter than the block size is padded with zeros.", 1147 "flags" : [ 1148 "OutputCollision" 1149 ], 1150 "ikm" : "ddba77f227f237c791c07ee7e1ce9d933ecad3614212cc98d4f12afc90a3b21f4c7c3b4c54f44ad7d1e8ce45cd36aad5cb0bbf84e90cb054a1e7dc558690c5fa", 1151 "salt" : "1264271934b6a446000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 1152 "info" : "6b478027231379b6bbed6c61732aad5636b5aab2", 1153 "size" : 32, 1154 "okm" : "a2d9e9a4248a1f7f42ba1f58119012d9bfac2693d8a7a7570bee13221ede1f98", 1155 "result" : "valid" 1156 } 1157 ] 1158 } 1159 ] 1160 }