Compare commits
	
		
			10275 Commits
		
	
	
		
			curl-7_7-b
			...
			cares-1_6_
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					b962ef3154 | ||
| 
						 | 
					32f78136b2 | ||
| 
						 | 
					01d6133bd7 | ||
| 
						 | 
					4b62cd3616 | ||
| 
						 | 
					df7b1d8e64 | ||
| 
						 | 
					2449e1f5a5 | ||
| 
						 | 
					66c0e4ad5f | ||
| 
						 | 
					18371aaff9 | ||
| 
						 | 
					f36eab2608 | ||
| 
						 | 
					66d38261f7 | ||
| 
						 | 
					553b4cfd0b | ||
| 
						 | 
					edd63a7920 | ||
| 
						 | 
					5ce03efc3e | ||
| 
						 | 
					4645e8b6b1 | ||
| 
						 | 
					42365aa7ef | ||
| 
						 | 
					dff4ce92ad | ||
| 
						 | 
					e5b0533dab | ||
| 
						 | 
					a2a315a6e8 | ||
| 
						 | 
					7abdc4b218 | ||
| 
						 | 
					479ddb1fee | ||
| 
						 | 
					4ee27b4594 | ||
| 
						 | 
					58ebde9502 | ||
| 
						 | 
					04ee89493e | ||
| 
						 | 
					dd3594c6b3 | ||
| 
						 | 
					f7ea431516 | ||
| 
						 | 
					16a153468d | ||
| 
						 | 
					b062212e55 | ||
| 
						 | 
					39eb96e9ff | ||
| 
						 | 
					4c84f6b423 | ||
| 
						 | 
					0b2ae71f8b | ||
| 
						 | 
					39d0b57ebf | ||
| 
						 | 
					c036f6ae2d | ||
| 
						 | 
					e35e2ea6ec | ||
| 
						 | 
					f33f8eee26 | ||
| 
						 | 
					31a3f064c0 | ||
| 
						 | 
					232518a219 | ||
| 
						 | 
					bc165078a2 | ||
| 
						 | 
					e4dabef0c7 | ||
| 
						 | 
					00142d8443 | ||
| 
						 | 
					1b0b7fa0e1 | ||
| 
						 | 
					67fb731ec4 | ||
| 
						 | 
					a30a6f2f20 | ||
| 
						 | 
					baeebb2b57 | ||
| 
						 | 
					ecc6f550eb | ||
| 
						 | 
					640974fb28 | ||
| 
						 | 
					3b0c5ae467 | ||
| 
						 | 
					0fa14c8662 | ||
| 
						 | 
					d17be0df52 | ||
| 
						 | 
					53a8a6e5a6 | ||
| 
						 | 
					dd2fc45c27 | ||
| 
						 | 
					ba9f8c674c | ||
| 
						 | 
					c4f4fa4089 | ||
| 
						 | 
					32634b0771 | ||
| 
						 | 
					c97b66287c | ||
| 
						 | 
					cd6fc8a8ef | ||
| 
						 | 
					3308781376 | ||
| 
						 | 
					40e8b4e527 | ||
| 
						 | 
					4741e64c89 | ||
| 
						 | 
					0b489c7e61 | ||
| 
						 | 
					22d4db1cf2 | ||
| 
						 | 
					7383225271 | ||
| 
						 | 
					4b3ae5e157 | ||
| 
						 | 
					797bc8504c | ||
| 
						 | 
					305f4d92ef | ||
| 
						 | 
					c36f0e71b6 | ||
| 
						 | 
					a028c69f48 | ||
| 
						 | 
					4e4b6de5ce | ||
| 
						 | 
					9aac2328c6 | ||
| 
						 | 
					e5084c1eca | ||
| 
						 | 
					9b12f09600 | ||
| 
						 | 
					a71762e405 | ||
| 
						 | 
					b8f3e5675a | ||
| 
						 | 
					820011dedc | ||
| 
						 | 
					cdd6054e08 | ||
| 
						 | 
					a15b6a6f86 | ||
| 
						 | 
					20d3e2b967 | ||
| 
						 | 
					608fdce0a0 | ||
| 
						 | 
					ecd3251542 | ||
| 
						 | 
					999c7126b3 | ||
| 
						 | 
					3c50ea961f | ||
| 
						 | 
					acc29ff1d9 | ||
| 
						 | 
					886bba55ac | ||
| 
						 | 
					cd440215a5 | ||
| 
						 | 
					73060b4523 | ||
| 
						 | 
					c76d939563 | ||
| 
						 | 
					3c4b69f95d | ||
| 
						 | 
					3f01d9a043 | ||
| 
						 | 
					dbc6fe3e84 | ||
| 
						 | 
					da6c15163b | ||
| 
						 | 
					9818bf7026 | ||
| 
						 | 
					73c7acb159 | ||
| 
						 | 
					ea8fbb5233 | ||
| 
						 | 
					9b033e1b8a | ||
| 
						 | 
					a65ce7b107 | ||
| 
						 | 
					2249c12a3c | ||
| 
						 | 
					b4ac9cd02c | ||
| 
						 | 
					3517eba632 | ||
| 
						 | 
					2cd44abafc | ||
| 
						 | 
					4b486ebbc1 | ||
| 
						 | 
					f9f211d2c6 | ||
| 
						 | 
					77b30f69e4 | ||
| 
						 | 
					17d2a464ad | ||
| 
						 | 
					ae6530ee82 | ||
| 
						 | 
					a6ba9e5ccd | ||
| 
						 | 
					c4cdab969b | ||
| 
						 | 
					c331c73ec6 | ||
| 
						 | 
					d1f063c62d | ||
| 
						 | 
					b686dc4911 | ||
| 
						 | 
					78936b2f2a | ||
| 
						 | 
					b2ed1e2607 | ||
| 
						 | 
					fb8870297d | ||
| 
						 | 
					4cbc0f6c2e | ||
| 
						 | 
					1b9eff64fa | ||
| 
						 | 
					d07d1a6ef8 | ||
| 
						 | 
					8bdd60fa71 | ||
| 
						 | 
					b872086c74 | ||
| 
						 | 
					e0af4a15d0 | ||
| 
						 | 
					d31802ed98 | ||
| 
						 | 
					87c4136bd4 | ||
| 
						 | 
					09e027bc9d | ||
| 
						 | 
					707828b71a | ||
| 
						 | 
					8f44037133 | ||
| 
						 | 
					9717ccb786 | ||
| 
						 | 
					6354cbf9d6 | ||
| 
						 | 
					95a849efc2 | ||
| 
						 | 
					fe083a94b9 | ||
| 
						 | 
					6fdcdfa5ea | ||
| 
						 | 
					4a4885eead | ||
| 
						 | 
					a0ef686c54 | ||
| 
						 | 
					2903a5c050 | ||
| 
						 | 
					4d50b9f1f1 | ||
| 
						 | 
					5e3c2af236 | ||
| 
						 | 
					5d791838d2 | ||
| 
						 | 
					b80c5cff49 | ||
| 
						 | 
					47b5740bdf | ||
| 
						 | 
					b8092857d9 | ||
| 
						 | 
					3cda1a23ce | ||
| 
						 | 
					215677c10b | ||
| 
						 | 
					3688cd3fea | ||
| 
						 | 
					5ca2a8318d | ||
| 
						 | 
					e27ec862c3 | ||
| 
						 | 
					d0b8b5a199 | ||
| 
						 | 
					efe2ce3647 | ||
| 
						 | 
					71f00188fb | ||
| 
						 | 
					a1c9cb8860 | ||
| 
						 | 
					74e9718370 | ||
| 
						 | 
					2d71c9cdfd | ||
| 
						 | 
					484d549ece | ||
| 
						 | 
					d098ab436d | ||
| 
						 | 
					85ffd33f08 | ||
| 
						 | 
					c1b8e93083 | ||
| 
						 | 
					383d4656aa | ||
| 
						 | 
					3e3d10824f | ||
| 
						 | 
					128418b214 | ||
| 
						 | 
					050a39a7a5 | ||
| 
						 | 
					5f085789b9 | ||
| 
						 | 
					6a8832d83b | ||
| 
						 | 
					fcb498b0d5 | ||
| 
						 | 
					0433252e50 | ||
| 
						 | 
					5ce6f37e26 | ||
| 
						 | 
					02fc7bb5f6 | ||
| 
						 | 
					9e1294e866 | ||
| 
						 | 
					c2c800d863 | ||
| 
						 | 
					625c107c25 | ||
| 
						 | 
					33319f5d2d | ||
| 
						 | 
					ad3c1c37bb | ||
| 
						 | 
					005bf19acf | ||
| 
						 | 
					91c77808c4 | ||
| 
						 | 
					0ce97f77e0 | ||
| 
						 | 
					197ad60d21 | ||
| 
						 | 
					dc31387c6f | ||
| 
						 | 
					bd64da3785 | ||
| 
						 | 
					4fef0d4f14 | ||
| 
						 | 
					89d6f580dc | ||
| 
						 | 
					23eb74e085 | ||
| 
						 | 
					9c86097286 | ||
| 
						 | 
					f0bb9c7d8d | ||
| 
						 | 
					d4514f9c10 | ||
| 
						 | 
					c324033ba4 | ||
| 
						 | 
					74a16db975 | ||
| 
						 | 
					a10044e110 | ||
| 
						 | 
					6cdd067faf | ||
| 
						 | 
					0989cd358a | ||
| 
						 | 
					6e0739931d | ||
| 
						 | 
					b17ca44f0b | ||
| 
						 | 
					fd6e025d61 | ||
| 
						 | 
					9230708e47 | ||
| 
						 | 
					92f3b3895e | ||
| 
						 | 
					fa8a78ff01 | ||
| 
						 | 
					310d842b70 | ||
| 
						 | 
					1498de83d6 | ||
| 
						 | 
					e29f62f0a7 | ||
| 
						 | 
					39e5fa6ae8 | ||
| 
						 | 
					dc289aa4fa | ||
| 
						 | 
					6db8f53445 | ||
| 
						 | 
					417bac4055 | ||
| 
						 | 
					e9c94cdd49 | ||
| 
						 | 
					d104216bbe | ||
| 
						 | 
					d086fdaf9f | ||
| 
						 | 
					8693afdfea | ||
| 
						 | 
					a876161ef9 | ||
| 
						 | 
					10035c898b | ||
| 
						 | 
					71edaf4d01 | ||
| 
						 | 
					2b77d50776 | ||
| 
						 | 
					6ea91af2f8 | ||
| 
						 | 
					b767440399 | ||
| 
						 | 
					4174ec7116 | ||
| 
						 | 
					068ba17e21 | ||
| 
						 | 
					4d10c96aa6 | ||
| 
						 | 
					b701ea36a7 | ||
| 
						 | 
					198fa5e3c7 | ||
| 
						 | 
					507cd13793 | ||
| 
						 | 
					6c14c96e71 | ||
| 
						 | 
					976963cd21 | ||
| 
						 | 
					9391d980c3 | ||
| 
						 | 
					bab5183820 | ||
| 
						 | 
					0abaf22467 | ||
| 
						 | 
					463a8134a1 | ||
| 
						 | 
					d22b2d181f | ||
| 
						 | 
					5a9bbf639a | ||
| 
						 | 
					81e48ada47 | ||
| 
						 | 
					598bc44f67 | ||
| 
						 | 
					b93f4f623c | ||
| 
						 | 
					1054dc5ed1 | ||
| 
						 | 
					7fc4e8af0a | ||
| 
						 | 
					4198bb88b6 | ||
| 
						 | 
					db325d1f43 | ||
| 
						 | 
					7ff38c14a9 | ||
| 
						 | 
					3f2de3d101 | ||
| 
						 | 
					6bd91936ff | ||
| 
						 | 
					035a2e5479 | ||
| 
						 | 
					6983ba3225 | ||
| 
						 | 
					77e028d620 | ||
| 
						 | 
					0bb91218c5 | ||
| 
						 | 
					231a51fe7a | ||
| 
						 | 
					8d0cbaf8df | ||
| 
						 | 
					b843c27322 | ||
| 
						 | 
					2688cf343b | ||
| 
						 | 
					b416b87518 | ||
| 
						 | 
					3f1b9f095a | ||
| 
						 | 
					8a6eeb82c5 | ||
| 
						 | 
					5779283a52 | ||
| 
						 | 
					80d0dcc9a3 | ||
| 
						 | 
					d51ad518c4 | ||
| 
						 | 
					29ba1730ca | ||
| 
						 | 
					183210619d | ||
| 
						 | 
					feff911fb7 | ||
| 
						 | 
					8eee5f3253 | ||
| 
						 | 
					3e55fef5e1 | ||
| 
						 | 
					63397e380f | ||
| 
						 | 
					07c3aaeea1 | ||
| 
						 | 
					8254bbae56 | ||
| 
						 | 
					e7886aa9b4 | ||
| 
						 | 
					fb08868e54 | ||
| 
						 | 
					c141d99059 | ||
| 
						 | 
					f66e1c49b0 | ||
| 
						 | 
					4acbe8f20c | ||
| 
						 | 
					2ea70a5c73 | ||
| 
						 | 
					eb612bfdfc | ||
| 
						 | 
					5e826c78a7 | ||
| 
						 | 
					a0d906739d | ||
| 
						 | 
					98b13037e7 | ||
| 
						 | 
					29f09f71b4 | ||
| 
						 | 
					a00b6e258d | ||
| 
						 | 
					7ded272b94 | ||
| 
						 | 
					1d12b1fa1e | ||
| 
						 | 
					54582bdce9 | ||
| 
						 | 
					a9a4300a36 | ||
| 
						 | 
					f720e0ac0f | ||
| 
						 | 
					a8245df745 | ||
| 
						 | 
					86c5d02a5e | ||
| 
						 | 
					5af597c2fb | ||
| 
						 | 
					dd9e0164d5 | ||
| 
						 | 
					9d16b4081e | ||
| 
						 | 
					545cafce9b | ||
| 
						 | 
					fb66d51796 | ||
| 
						 | 
					5175664174 | ||
| 
						 | 
					a579d67064 | ||
| 
						 | 
					be760bed7e | ||
| 
						 | 
					357383159e | ||
| 
						 | 
					0ea1c28135 | ||
| 
						 | 
					36e56f36ad | ||
| 
						 | 
					0a9984c27e | ||
| 
						 | 
					0ecdcc253b | ||
| 
						 | 
					1667890172 | ||
| 
						 | 
					9b3f863cf5 | ||
| 
						 | 
					2f2ed4e40e | ||
| 
						 | 
					3d582304b6 | ||
| 
						 | 
					996d45df0a | ||
| 
						 | 
					6047635406 | ||
| 
						 | 
					e16bccbb91 | ||
| 
						 | 
					9786e7faeb | ||
| 
						 | 
					fde4b823f1 | ||
| 
						 | 
					b7e71a249e | ||
| 
						 | 
					bf8d642607 | ||
| 
						 | 
					1fab40bb69 | ||
| 
						 | 
					ad61b58036 | ||
| 
						 | 
					b7722e7037 | ||
| 
						 | 
					6c2167b65f | ||
| 
						 | 
					18be9882f7 | ||
| 
						 | 
					a102c2c22b | ||
| 
						 | 
					ae75462254 | ||
| 
						 | 
					3ad956e73f | ||
| 
						 | 
					d6114165d3 | ||
| 
						 | 
					c3a959cc37 | ||
| 
						 | 
					ca70beec47 | ||
| 
						 | 
					758939215d | ||
| 
						 | 
					ab861e56f1 | ||
| 
						 | 
					8eb64ad600 | ||
| 
						 | 
					d74d3fe851 | ||
| 
						 | 
					fefc6a7e6b | ||
| 
						 | 
					a119114ad7 | ||
| 
						 | 
					430b1a22db | ||
| 
						 | 
					a754ea1326 | ||
| 
						 | 
					2ecf22e37e | ||
| 
						 | 
					9dcd0756ba | ||
| 
						 | 
					c455254fd1 | ||
| 
						 | 
					bb1f6e6818 | ||
| 
						 | 
					0722e91eb9 | ||
| 
						 | 
					c859a6f365 | ||
| 
						 | 
					ef49850789 | ||
| 
						 | 
					4f6f334f41 | ||
| 
						 | 
					8cd76d3921 | ||
| 
						 | 
					885805b5df | ||
| 
						 | 
					d61f260372 | ||
| 
						 | 
					d0a48627b2 | ||
| 
						 | 
					4b8f13e902 | ||
| 
						 | 
					5b9a57f536 | ||
| 
						 | 
					ba9963b8fa | ||
| 
						 | 
					6887106ff7 | ||
| 
						 | 
					98416a4fab | ||
| 
						 | 
					fad3288d20 | ||
| 
						 | 
					5ecff1e4c3 | ||
| 
						 | 
					bfeae0b5f5 | ||
| 
						 | 
					1c5336cd57 | ||
| 
						 | 
					43c2cf4edb | ||
| 
						 | 
					f6d80d66a2 | ||
| 
						 | 
					b2ca0babeb | ||
| 
						 | 
					ed4ae322f5 | ||
| 
						 | 
					4f924ab07e | ||
| 
						 | 
					ebadeff0ca | ||
| 
						 | 
					830018aa38 | ||
| 
						 | 
					8dfddd279b | ||
| 
						 | 
					544f2f74df | ||
| 
						 | 
					450348d6bd | ||
| 
						 | 
					5928ea9c7a | ||
| 
						 | 
					4754880099 | ||
| 
						 | 
					1fea66e527 | ||
| 
						 | 
					806a3163ba | ||
| 
						 | 
					08cf6780ba | ||
| 
						 | 
					6814907a2c | ||
| 
						 | 
					11a8a25528 | ||
| 
						 | 
					1b246eecfe | ||
| 
						 | 
					95456b8e78 | ||
| 
						 | 
					79fc481a2b | ||
| 
						 | 
					b9ce871463 | ||
| 
						 | 
					0bd78e1cd8 | ||
| 
						 | 
					d27f2d8168 | ||
| 
						 | 
					407f3f142a | ||
| 
						 | 
					61cfbecc74 | ||
| 
						 | 
					feeabd08ab | ||
| 
						 | 
					31a3432a8e | ||
| 
						 | 
					27db045095 | ||
| 
						 | 
					db8c75f08d | ||
| 
						 | 
					beaada77e6 | ||
| 
						 | 
					aefab9293a | ||
| 
						 | 
					a6d9310888 | ||
| 
						 | 
					bfc09ac211 | ||
| 
						 | 
					d930280af5 | ||
| 
						 | 
					445e4a9792 | ||
| 
						 | 
					aec761916e | ||
| 
						 | 
					7d750d2b92 | ||
| 
						 | 
					bdf1724412 | ||
| 
						 | 
					9cea2dfb8f | ||
| 
						 | 
					00dec36c72 | ||
| 
						 | 
					26a651f7ae | ||
| 
						 | 
					b64f0dace3 | ||
| 
						 | 
					a7b95cacb6 | ||
| 
						 | 
					ac0e0351a0 | ||
| 
						 | 
					2245ac2f88 | ||
| 
						 | 
					1bfaf76dd0 | ||
| 
						 | 
					88513d2d1a | ||
| 
						 | 
					91bc396178 | ||
| 
						 | 
					d3fdbe48ae | ||
| 
						 | 
					2c086105b1 | ||
| 
						 | 
					aed98c5125 | ||
| 
						 | 
					2d77f7cd48 | ||
| 
						 | 
					d5affe1ada | ||
| 
						 | 
					d61688923d | ||
| 
						 | 
					4aee6822ca | ||
| 
						 | 
					038542ea3e | ||
| 
						 | 
					beb14ca6d6 | ||
| 
						 | 
					4114129ac0 | ||
| 
						 | 
					6d24719167 | ||
| 
						 | 
					2393c94363 | ||
| 
						 | 
					372203f1fa | ||
| 
						 | 
					691468174b | ||
| 
						 | 
					6f8d439717 | ||
| 
						 | 
					f3ab5d5500 | ||
| 
						 | 
					8f467b4288 | ||
| 
						 | 
					4adcf7e9ed | ||
| 
						 | 
					9f8c40ed78 | ||
| 
						 | 
					cda9d7e579 | ||
| 
						 | 
					c27d2d4b93 | ||
| 
						 | 
					003afef541 | ||
| 
						 | 
					09bbca2f61 | ||
| 
						 | 
					0a305eb79f | ||
| 
						 | 
					aff5408633 | ||
| 
						 | 
					31626d4c6f | ||
| 
						 | 
					426ec2d399 | ||
| 
						 | 
					a632f6d5b1 | ||
| 
						 | 
					83c199bb00 | ||
| 
						 | 
					2ec6d08613 | ||
| 
						 | 
					42271ad463 | ||
| 
						 | 
					57ee847ce7 | ||
| 
						 | 
					985bd18904 | ||
| 
						 | 
					2d1f798d14 | ||
| 
						 | 
					9e9f70a693 | ||
| 
						 | 
					1b9d311b5c | ||
| 
						 | 
					4d437416da | ||
| 
						 | 
					267b942383 | ||
| 
						 | 
					142cb601f8 | ||
| 
						 | 
					21b523fcd3 | ||
| 
						 | 
					006cab3e9e | ||
| 
						 | 
					4e909ee8b1 | ||
| 
						 | 
					95df5d042c | ||
| 
						 | 
					22059858fe | ||
| 
						 | 
					82107a02f5 | ||
| 
						 | 
					515893595d | ||
| 
						 | 
					3800be3898 | ||
| 
						 | 
					c9ad952604 | ||
| 
						 | 
					2a09ffc648 | ||
| 
						 | 
					821d8fee3b | ||
| 
						 | 
					42224594b6 | ||
| 
						 | 
					d369a2b775 | ||
| 
						 | 
					a5f4cfc612 | ||
| 
						 | 
					23e5402bec | ||
| 
						 | 
					391e8afd1f | ||
| 
						 | 
					eff2c3a621 | ||
| 
						 | 
					de48e4e4df | ||
| 
						 | 
					c4a694862c | ||
| 
						 | 
					1e076a4ae0 | ||
| 
						 | 
					188311863a | ||
| 
						 | 
					0eb083e979 | ||
| 
						 | 
					abe61b9926 | ||
| 
						 | 
					54e49d10d2 | ||
| 
						 | 
					ef75829878 | ||
| 
						 | 
					a19341b57a | ||
| 
						 | 
					c9549391d1 | ||
| 
						 | 
					2b767161da | ||
| 
						 | 
					7c9631081d | ||
| 
						 | 
					b6f29bef06 | ||
| 
						 | 
					6abbbaad1b | ||
| 
						 | 
					fe5f448015 | ||
| 
						 | 
					7beb473a3d | ||
| 
						 | 
					19bc92289d | ||
| 
						 | 
					4e4f6c1ec8 | ||
| 
						 | 
					459e67b2a7 | ||
| 
						 | 
					51ba24991c | ||
| 
						 | 
					dfa0fd5b33 | ||
| 
						 | 
					f7ef60c13f | ||
| 
						 | 
					8b2bfa4212 | ||
| 
						 | 
					a6c915aab9 | ||
| 
						 | 
					a8323cc3f5 | ||
| 
						 | 
					aa29735868 | ||
| 
						 | 
					a059e9241e | ||
| 
						 | 
					acd637160f | ||
| 
						 | 
					ddb2783f9a | ||
| 
						 | 
					8fa895d65e | ||
| 
						 | 
					33b658a341 | ||
| 
						 | 
					df725aade2 | ||
| 
						 | 
					d84440d53b | ||
| 
						 | 
					0c1ae21c11 | ||
| 
						 | 
					f30959c6bd | ||
| 
						 | 
					d7e406e020 | ||
| 
						 | 
					638e3c070c | ||
| 
						 | 
					07aeac37fd | ||
| 
						 | 
					6ec76e7f9a | ||
| 
						 | 
					cb9951dcad | ||
| 
						 | 
					0776701396 | ||
| 
						 | 
					39de6c784c | ||
| 
						 | 
					e5c4482088 | ||
| 
						 | 
					975c171d5a | ||
| 
						 | 
					7d7f63059a | ||
| 
						 | 
					8c6c0a7bcc | ||
| 
						 | 
					aa41743ebd | ||
| 
						 | 
					ee5f13cb6b | ||
| 
						 | 
					974145f61c | ||
| 
						 | 
					849318138e | ||
| 
						 | 
					6a04c0878b | ||
| 
						 | 
					db80e18308 | ||
| 
						 | 
					3081207a4c | ||
| 
						 | 
					8085c7a450 | ||
| 
						 | 
					842de91168 | ||
| 
						 | 
					4c621bc697 | ||
| 
						 | 
					938458b330 | ||
| 
						 | 
					651dad0cc1 | ||
| 
						 | 
					f591ab3ba0 | ||
| 
						 | 
					09aa4cf2ca | ||
| 
						 | 
					61c0bdb09c | ||
| 
						 | 
					89367d47a8 | ||
| 
						 | 
					7fdfd938e0 | ||
| 
						 | 
					e526b5ffeb | ||
| 
						 | 
					adb974960d | ||
| 
						 | 
					2acc92828f | ||
| 
						 | 
					a1d1f43e6a | ||
| 
						 | 
					aac739ccd2 | ||
| 
						 | 
					c3d1b07c45 | ||
| 
						 | 
					77bafd823b | ||
| 
						 | 
					624b5f228b | ||
| 
						 | 
					6d233becf0 | ||
| 
						 | 
					2bcd13aaee | ||
| 
						 | 
					20723cb792 | ||
| 
						 | 
					b93ad10fa5 | ||
| 
						 | 
					28e2007767 | ||
| 
						 | 
					802f1e4406 | ||
| 
						 | 
					a37cc6cb08 | ||
| 
						 | 
					6cea51585f | ||
| 
						 | 
					fce9c3a9f1 | ||
| 
						 | 
					969903ebf2 | ||
| 
						 | 
					7b3f86152a | ||
| 
						 | 
					ea1362a936 | ||
| 
						 | 
					f62a5b83a9 | ||
| 
						 | 
					a834b98232 | ||
| 
						 | 
					152cf6325d | ||
| 
						 | 
					c98ab69cc7 | ||
| 
						 | 
					f7cce15156 | ||
| 
						 | 
					3072c5b8a1 | ||
| 
						 | 
					ac1ab03cb0 | ||
| 
						 | 
					2ef72f7abb | ||
| 
						 | 
					eae27d1788 | ||
| 
						 | 
					a3787eff19 | ||
| 
						 | 
					836d945ece | ||
| 
						 | 
					2816902f0e | ||
| 
						 | 
					f72a26d340 | ||
| 
						 | 
					387521bb6d | ||
| 
						 | 
					a4da82a43b | ||
| 
						 | 
					bc90fefb5b | ||
| 
						 | 
					c3d871aef4 | ||
| 
						 | 
					59e378f48f | ||
| 
						 | 
					a622fd90b4 | ||
| 
						 | 
					861b647e7b | ||
| 
						 | 
					70e57dad88 | ||
| 
						 | 
					91ff938035 | ||
| 
						 | 
					3acd1146f9 | ||
| 
						 | 
					45d3bfff28 | ||
| 
						 | 
					18110b519c | ||
| 
						 | 
					4c9768565e | ||
| 
						 | 
					873e734c39 | ||
| 
						 | 
					747e0c657d | ||
| 
						 | 
					780f13db30 | ||
| 
						 | 
					62519bfe05 | ||
| 
						 | 
					29f7f468ce | ||
| 
						 | 
					9c36a5fd06 | ||
| 
						 | 
					4558c8f37a | ||
| 
						 | 
					bb67388bbe | ||
| 
						 | 
					3dcd2b82c4 | ||
| 
						 | 
					c0f3e32447 | ||
| 
						 | 
					8733e087d7 | ||
| 
						 | 
					9f9e577640 | ||
| 
						 | 
					9813cea1d0 | ||
| 
						 | 
					304537c24f | ||
| 
						 | 
					cc0054a4d5 | ||
| 
						 | 
					29ec219b82 | ||
| 
						 | 
					0994d7811f | ||
| 
						 | 
					934708d950 | ||
| 
						 | 
					bbc002a505 | ||
| 
						 | 
					c8d4e8b5d0 | ||
| 
						 | 
					18a21d5802 | ||
| 
						 | 
					fcb63f3039 | ||
| 
						 | 
					91d7a6f8a9 | ||
| 
						 | 
					238db14002 | ||
| 
						 | 
					d0995204da | ||
| 
						 | 
					6ebc2b2561 | ||
| 
						 | 
					95b817e8d7 | ||
| 
						 | 
					558f034007 | ||
| 
						 | 
					72ea805298 | ||
| 
						 | 
					79ffbf7fe1 | ||
| 
						 | 
					4f0d286d2c | ||
| 
						 | 
					6fb5888e55 | ||
| 
						 | 
					b5810dfe9d | ||
| 
						 | 
					85a79f9d67 | ||
| 
						 | 
					d24465b79a | ||
| 
						 | 
					c67a99ff27 | ||
| 
						 | 
					bae4e12302 | ||
| 
						 | 
					09df1cdb5c | ||
| 
						 | 
					2946d87e48 | ||
| 
						 | 
					6a2d7bff1a | ||
| 
						 | 
					9b7b2b347f | ||
| 
						 | 
					33638d5347 | ||
| 
						 | 
					2ae7d2e6ea | ||
| 
						 | 
					ffc490ef89 | ||
| 
						 | 
					29b75ca46f | ||
| 
						 | 
					004dde18a7 | ||
| 
						 | 
					3440e8d208 | ||
| 
						 | 
					e138ae5ec9 | ||
| 
						 | 
					bf8ba229e0 | ||
| 
						 | 
					19d0a7495e | ||
| 
						 | 
					099b62f124 | ||
| 
						 | 
					8ce78ca488 | ||
| 
						 | 
					fc9610919c | ||
| 
						 | 
					e082d2403c | ||
| 
						 | 
					370c3afc71 | ||
| 
						 | 
					93357ef017 | ||
| 
						 | 
					753592cc70 | ||
| 
						 | 
					b150e6866d | ||
| 
						 | 
					2f475fa9ea | ||
| 
						 | 
					ecff50c2b4 | ||
| 
						 | 
					6f53cf9cc6 | ||
| 
						 | 
					1056202b48 | ||
| 
						 | 
					709de3d621 | ||
| 
						 | 
					f9894f4ebc | ||
| 
						 | 
					74d3b80d70 | ||
| 
						 | 
					4b01dfe369 | ||
| 
						 | 
					fc09d10560 | ||
| 
						 | 
					59b2e3ea4a | ||
| 
						 | 
					243cf29793 | ||
| 
						 | 
					9ded8fbe58 | ||
| 
						 | 
					9258928c2d | ||
| 
						 | 
					132cd3aa2c | ||
| 
						 | 
					fef60d9d41 | ||
| 
						 | 
					2fdd24c724 | ||
| 
						 | 
					852a02daff | ||
| 
						 | 
					2a6148716c | ||
| 
						 | 
					5ca692fc89 | ||
| 
						 | 
					3e2487493e | ||
| 
						 | 
					fdcb0cd2bc | ||
| 
						 | 
					4962e1772d | ||
| 
						 | 
					d7d5618498 | ||
| 
						 | 
					3f3d6ebe66 | ||
| 
						 | 
					ec28988bfa | ||
| 
						 | 
					db23538898 | ||
| 
						 | 
					423a18cecc | ||
| 
						 | 
					f164260eee | ||
| 
						 | 
					a091121293 | ||
| 
						 | 
					d744c85310 | ||
| 
						 | 
					c9f2c54c49 | ||
| 
						 | 
					f29d223ed5 | ||
| 
						 | 
					8dabd34432 | ||
| 
						 | 
					a104a365e3 | ||
| 
						 | 
					62d94ff342 | ||
| 
						 | 
					cbc04a7d40 | ||
| 
						 | 
					71d3c5bf41 | ||
| 
						 | 
					bc69e46ad1 | ||
| 
						 | 
					13f035b905 | ||
| 
						 | 
					79cbe50894 | ||
| 
						 | 
					1c04aa54a7 | ||
| 
						 | 
					b718283327 | ||
| 
						 | 
					b34390017b | ||
| 
						 | 
					8980f89370 | ||
| 
						 | 
					f46d47239f | ||
| 
						 | 
					13dc82b9d4 | ||
| 
						 | 
					a243dd4587 | ||
| 
						 | 
					9d5d6c557b | ||
| 
						 | 
					a604682805 | ||
| 
						 | 
					70b1cd798f | ||
| 
						 | 
					578f42d588 | ||
| 
						 | 
					e3ad6d2bd1 | ||
| 
						 | 
					4b64a8d20d | ||
| 
						 | 
					fcc8700218 | ||
| 
						 | 
					e5b713ee63 | ||
| 
						 | 
					9849c6b847 | ||
| 
						 | 
					9bb5da968c | ||
| 
						 | 
					d5a71fd567 | ||
| 
						 | 
					0f98ba4729 | ||
| 
						 | 
					a6a2174bf7 | ||
| 
						 | 
					f07c3171e3 | ||
| 
						 | 
					6cb1e3f3fa | ||
| 
						 | 
					81b64f69a5 | ||
| 
						 | 
					17e1f58fd6 | ||
| 
						 | 
					582833b338 | ||
| 
						 | 
					48be4fa069 | ||
| 
						 | 
					2af05bdd3c | ||
| 
						 | 
					4dbfc91e2b | ||
| 
						 | 
					95cef39def | ||
| 
						 | 
					00fb5bcf35 | ||
| 
						 | 
					42eeb93d99 | ||
| 
						 | 
					afe7bb4b33 | ||
| 
						 | 
					0f5f91df0b | ||
| 
						 | 
					f209a4804b | ||
| 
						 | 
					5794ffe4bd | ||
| 
						 | 
					ceb49d3742 | ||
| 
						 | 
					44142f8234 | ||
| 
						 | 
					347213d124 | ||
| 
						 | 
					8ca51bc68a | ||
| 
						 | 
					56f852a64f | ||
| 
						 | 
					1c68e79091 | ||
| 
						 | 
					473a050f0b | ||
| 
						 | 
					6768e81d5d | ||
| 
						 | 
					3743f515cf | ||
| 
						 | 
					3e0b6a7d1f | ||
| 
						 | 
					ef72f7d513 | ||
| 
						 | 
					2f71461b29 | ||
| 
						 | 
					d8cab4c133 | ||
| 
						 | 
					95a093e97b | ||
| 
						 | 
					68bb51c55b | ||
| 
						 | 
					fb8fe6f2b3 | ||
| 
						 | 
					3e61c90dbe | ||
| 
						 | 
					ac18b471d2 | ||
| 
						 | 
					bbe2386bff | ||
| 
						 | 
					2f47248e3c | ||
| 
						 | 
					315bb970a5 | ||
| 
						 | 
					65b0f6049d | ||
| 
						 | 
					0033535e21 | ||
| 
						 | 
					3e4a8cb800 | ||
| 
						 | 
					ad638da2c2 | ||
| 
						 | 
					a923d8541c | ||
| 
						 | 
					66fb9ca5f6 | ||
| 
						 | 
					11cb78c5f8 | ||
| 
						 | 
					527a5f0980 | ||
| 
						 | 
					6e878d2ca4 | ||
| 
						 | 
					cf30b24706 | ||
| 
						 | 
					709a2ed474 | ||
| 
						 | 
					ecd30cc8bb | ||
| 
						 | 
					0105ad5e39 | ||
| 
						 | 
					cebaab8ee5 | ||
| 
						 | 
					34281925d6 | ||
| 
						 | 
					e90c4fa770 | ||
| 
						 | 
					a06e077938 | ||
| 
						 | 
					7bdae7be4f | ||
| 
						 | 
					c125d83e9e | ||
| 
						 | 
					2abf9221e3 | ||
| 
						 | 
					6f1e89085c | ||
| 
						 | 
					5303cdc4af | ||
| 
						 | 
					feb03e4717 | ||
| 
						 | 
					64e3a091c3 | ||
| 
						 | 
					a2c50a980c | ||
| 
						 | 
					23478b891f | ||
| 
						 | 
					aab2d52b25 | ||
| 
						 | 
					9a9041f1ce | ||
| 
						 | 
					0aa704935b | ||
| 
						 | 
					ede7f8f5de | ||
| 
						 | 
					3c317d2fac | ||
| 
						 | 
					b55b0258e0 | ||
| 
						 | 
					55a8098d48 | ||
| 
						 | 
					389e50ff1e | ||
| 
						 | 
					1df4043ad7 | ||
| 
						 | 
					b000b8a736 | ||
| 
						 | 
					7eab7fa353 | ||
| 
						 | 
					58f7c82d52 | ||
| 
						 | 
					4d1cd0da93 | ||
| 
						 | 
					9ee7a014c9 | ||
| 
						 | 
					e1ab7db87d | ||
| 
						 | 
					14a5596346 | ||
| 
						 | 
					2eba5f33b9 | ||
| 
						 | 
					60a3773c50 | ||
| 
						 | 
					e8e8177e9d | ||
| 
						 | 
					f1fe04245a | ||
| 
						 | 
					8bb208e8f8 | ||
| 
						 | 
					f8a3aa91cd | ||
| 
						 | 
					019bde82ce | ||
| 
						 | 
					ca5e38751c | ||
| 
						 | 
					b5b25b39e9 | ||
| 
						 | 
					1784523cc6 | ||
| 
						 | 
					d71d10adbc | ||
| 
						 | 
					40fb750589 | ||
| 
						 | 
					62a6b8d4a6 | ||
| 
						 | 
					24b1890710 | ||
| 
						 | 
					3a1d28379a | ||
| 
						 | 
					c57285d199 | ||
| 
						 | 
					68cfe929c4 | ||
| 
						 | 
					6237fd2c16 | ||
| 
						 | 
					b023f9bd2a | ||
| 
						 | 
					b7ac885d38 | ||
| 
						 | 
					cbd9dcbe41 | ||
| 
						 | 
					4594187732 | ||
| 
						 | 
					63818f8488 | ||
| 
						 | 
					8af61cdb66 | ||
| 
						 | 
					ab83c0fd5b | ||
| 
						 | 
					3cc40a2584 | ||
| 
						 | 
					c11933b3fd | ||
| 
						 | 
					4687699726 | ||
| 
						 | 
					012dcb4893 | ||
| 
						 | 
					f01d18e4b9 | ||
| 
						 | 
					dabd3cd355 | ||
| 
						 | 
					fa001f27a5 | ||
| 
						 | 
					40b2e06a7f | ||
| 
						 | 
					8008499028 | ||
| 
						 | 
					3ac6929919 | ||
| 
						 | 
					8d36acd29b | ||
| 
						 | 
					e54209d643 | ||
| 
						 | 
					f6a958dc3a | ||
| 
						 | 
					2548e7b23f | ||
| 
						 | 
					97046a3548 | ||
| 
						 | 
					a7d52c414f | ||
| 
						 | 
					479466a495 | ||
| 
						 | 
					fa2a8f6fb8 | ||
| 
						 | 
					ddfa33be79 | ||
| 
						 | 
					25c76a760e | ||
| 
						 | 
					14240e9e10 | ||
| 
						 | 
					a3045b4e49 | ||
| 
						 | 
					b0685b3576 | ||
| 
						 | 
					138c57c76a | ||
| 
						 | 
					182a415555 | ||
| 
						 | 
					6e789fc516 | ||
| 
						 | 
					09f278121e | ||
| 
						 | 
					ed50e3f1b4 | ||
| 
						 | 
					3a499099af | ||
| 
						 | 
					931fc45f05 | ||
| 
						 | 
					6076c74041 | ||
| 
						 | 
					b4fdccf87a | ||
| 
						 | 
					8d012181b0 | ||
| 
						 | 
					d6344d9b5f | ||
| 
						 | 
					cb9410ded2 | ||
| 
						 | 
					6838fb32af | ||
| 
						 | 
					74d77cb140 | ||
| 
						 | 
					7ad3abfd05 | ||
| 
						 | 
					7c6df7132e | ||
| 
						 | 
					f27299dc3b | ||
| 
						 | 
					47724ef238 | ||
| 
						 | 
					357389a905 | ||
| 
						 | 
					42cabc14d4 | ||
| 
						 | 
					a948ca1669 | ||
| 
						 | 
					9cef14dfb2 | ||
| 
						 | 
					2d15d84a01 | ||
| 
						 | 
					1035469662 | ||
| 
						 | 
					296a6f7749 | ||
| 
						 | 
					5cff8124b0 | ||
| 
						 | 
					90e2510e2f | ||
| 
						 | 
					9251dd7b24 | ||
| 
						 | 
					3615063fbc | ||
| 
						 | 
					09664f1ab8 | ||
| 
						 | 
					bdf1157d55 | ||
| 
						 | 
					b4a5ce89c2 | ||
| 
						 | 
					660516914e | ||
| 
						 | 
					4c1c479fcf | ||
| 
						 | 
					309651dc82 | ||
| 
						 | 
					b13b9f3331 | ||
| 
						 | 
					108e584983 | ||
| 
						 | 
					f3b4071209 | ||
| 
						 | 
					fe1d024351 | ||
| 
						 | 
					0de08d418f | ||
| 
						 | 
					109edaae6d | ||
| 
						 | 
					d69a630989 | ||
| 
						 | 
					987b67bd2e | ||
| 
						 | 
					f4d56802f9 | ||
| 
						 | 
					9dfd6eacf4 | ||
| 
						 | 
					5aed78e183 | ||
| 
						 | 
					011e5dd864 | ||
| 
						 | 
					ae654266df | ||
| 
						 | 
					03986f1b8b | ||
| 
						 | 
					bc649593e4 | ||
| 
						 | 
					cc0285da7f | ||
| 
						 | 
					f3bc16f4f5 | ||
| 
						 | 
					15f94858f2 | ||
| 
						 | 
					5febd06c25 | ||
| 
						 | 
					9eb7fe8ac0 | ||
| 
						 | 
					1f26ea4a85 | ||
| 
						 | 
					912c29fd8c | ||
| 
						 | 
					eea468918e | ||
| 
						 | 
					537490e391 | ||
| 
						 | 
					de8e362d4a | ||
| 
						 | 
					7a588144b7 | ||
| 
						 | 
					7f2999aa43 | ||
| 
						 | 
					a3498f96ef | ||
| 
						 | 
					637bfa0252 | ||
| 
						 | 
					1c8f689ecb | ||
| 
						 | 
					7a8b11d716 | ||
| 
						 | 
					a67e207866 | ||
| 
						 | 
					5817209158 | ||
| 
						 | 
					b39d409aa2 | ||
| 
						 | 
					a18fb9448b | ||
| 
						 | 
					1f3007dbb4 | ||
| 
						 | 
					5dafa4a270 | ||
| 
						 | 
					e93bcbeee1 | ||
| 
						 | 
					adc032e7d8 | ||
| 
						 | 
					248c2b9bf5 | ||
| 
						 | 
					a8baa05023 | ||
| 
						 | 
					7066a79466 | ||
| 
						 | 
					4a623f7ed2 | ||
| 
						 | 
					f18700ef64 | ||
| 
						 | 
					52d9a3c34f | ||
| 
						 | 
					d785ed2588 | ||
| 
						 | 
					4ff37a4ed1 | ||
| 
						 | 
					fe167b6ba2 | ||
| 
						 | 
					f042a7419d | ||
| 
						 | 
					bc0ebfcdeb | ||
| 
						 | 
					57d13c770a | ||
| 
						 | 
					1692384636 | ||
| 
						 | 
					7634091325 | ||
| 
						 | 
					bdc8f59c17 | ||
| 
						 | 
					817efbc29c | ||
| 
						 | 
					d2661cb4b2 | ||
| 
						 | 
					9b0110f50c | ||
| 
						 | 
					5876381f86 | ||
| 
						 | 
					c4edc25d01 | ||
| 
						 | 
					36361d14cf | ||
| 
						 | 
					c8fe5f485c | ||
| 
						 | 
					1ac1212925 | ||
| 
						 | 
					3d4fb5136d | ||
| 
						 | 
					b6b03c8ab9 | ||
| 
						 | 
					432945e422 | ||
| 
						 | 
					052f9ddedb | ||
| 
						 | 
					a96784b98e | ||
| 
						 | 
					e06944438a | ||
| 
						 | 
					fa1009b6fc | ||
| 
						 | 
					b377e857bd | ||
| 
						 | 
					9a806f667b | ||
| 
						 | 
					979c9ce8e3 | ||
| 
						 | 
					b217e6eed7 | ||
| 
						 | 
					6b7e74a030 | ||
| 
						 | 
					7fdeb14e6d | ||
| 
						 | 
					8a323f8354 | ||
| 
						 | 
					a7abd5bf70 | ||
| 
						 | 
					932b589780 | ||
| 
						 | 
					27c282a6ee | ||
| 
						 | 
					5373289574 | ||
| 
						 | 
					7d0eabaa80 | ||
| 
						 | 
					e7f5d12cb6 | ||
| 
						 | 
					f14e020370 | ||
| 
						 | 
					e933b28aaf | ||
| 
						 | 
					1bc490077a | ||
| 
						 | 
					7d773abe50 | ||
| 
						 | 
					f22114aeed | ||
| 
						 | 
					0919de4511 | ||
| 
						 | 
					3e5292a052 | ||
| 
						 | 
					2066d60b16 | ||
| 
						 | 
					51e84c77e7 | ||
| 
						 | 
					775d9e0615 | ||
| 
						 | 
					a20d55fb64 | ||
| 
						 | 
					1b37baf656 | ||
| 
						 | 
					bffe69a151 | ||
| 
						 | 
					71525352f0 | ||
| 
						 | 
					facc5f7ec5 | ||
| 
						 | 
					184229b1e5 | ||
| 
						 | 
					3e488c4f19 | ||
| 
						 | 
					3f84e373ac | ||
| 
						 | 
					ac6d6ec2f1 | ||
| 
						 | 
					f11d5d9de8 | ||
| 
						 | 
					ed2dbefa73 | ||
| 
						 | 
					39f23aec6b | ||
| 
						 | 
					362422641e | ||
| 
						 | 
					a9dc900515 | ||
| 
						 | 
					3a705696af | ||
| 
						 | 
					2cfb8a2bf0 | ||
| 
						 | 
					21ee1c2d01 | ||
| 
						 | 
					a00febe1a0 | ||
| 
						 | 
					1e7125ae7b | ||
| 
						 | 
					aa4a7471dd | ||
| 
						 | 
					69a03ce23c | ||
| 
						 | 
					0f50cd7623 | ||
| 
						 | 
					669c555874 | ||
| 
						 | 
					1cfb73a129 | ||
| 
						 | 
					2a585c2fba | ||
| 
						 | 
					32a83128e6 | ||
| 
						 | 
					fe7bb33af8 | ||
| 
						 | 
					da6fa34f02 | ||
| 
						 | 
					37a358ab93 | ||
| 
						 | 
					3452c8d693 | ||
| 
						 | 
					336992cc54 | ||
| 
						 | 
					13afcbd1eb | ||
| 
						 | 
					e58a3fd0aa | ||
| 
						 | 
					57625b6c4c | ||
| 
						 | 
					0d058d2174 | ||
| 
						 | 
					8d49a8f278 | ||
| 
						 | 
					b4b6cfdb1c | ||
| 
						 | 
					6b7ccde156 | ||
| 
						 | 
					9b0fd007fd | ||
| 
						 | 
					6f3ef94836 | ||
| 
						 | 
					08ac9866e0 | ||
| 
						 | 
					a17fadea3a | ||
| 
						 | 
					e30bbfd85d | ||
| 
						 | 
					120f9d81b2 | ||
| 
						 | 
					fa38839a80 | ||
| 
						 | 
					d8f109176c | ||
| 
						 | 
					bbb1b99ce1 | ||
| 
						 | 
					0cd8840dba | ||
| 
						 | 
					d4b253ba3e | ||
| 
						 | 
					aee7fc118b | ||
| 
						 | 
					60f0b4fffe | ||
| 
						 | 
					a95e600eb0 | ||
| 
						 | 
					a25959184e | ||
| 
						 | 
					0e5da5b8bc | ||
| 
						 | 
					ddfa4b8896 | ||
| 
						 | 
					d816a11bca | ||
| 
						 | 
					7820391cb9 | ||
| 
						 | 
					148866bc73 | ||
| 
						 | 
					0b57c47547 | ||
| 
						 | 
					02db4450df | ||
| 
						 | 
					ed7af82bdf | ||
| 
						 | 
					e3b5673e98 | ||
| 
						 | 
					82412f218f | ||
| 
						 | 
					7c648782bc | ||
| 
						 | 
					ee64d14733 | ||
| 
						 | 
					bfaab6ed6b | ||
| 
						 | 
					97333deb3f | ||
| 
						 | 
					400d9d4205 | ||
| 
						 | 
					ad1145a201 | ||
| 
						 | 
					513c22df3b | ||
| 
						 | 
					b5afd53138 | ||
| 
						 | 
					72b4b3c7f8 | ||
| 
						 | 
					eb60ba23f5 | ||
| 
						 | 
					69aac49f79 | ||
| 
						 | 
					67f139e016 | ||
| 
						 | 
					654f047302 | ||
| 
						 | 
					e6c23672b2 | ||
| 
						 | 
					1058e5fdde | ||
| 
						 | 
					6929d9355f | ||
| 
						 | 
					8c377ad965 | ||
| 
						 | 
					a81a16beac | ||
| 
						 | 
					d92945bb8a | ||
| 
						 | 
					90a6a59a2f | ||
| 
						 | 
					8bae3d9007 | ||
| 
						 | 
					98042b858d | ||
| 
						 | 
					a837bd08b0 | ||
| 
						 | 
					2c61e9c76a | ||
| 
						 | 
					da97f78ae0 | ||
| 
						 | 
					2e1a9da5e2 | ||
| 
						 | 
					422fd933f5 | ||
| 
						 | 
					2594124825 | ||
| 
						 | 
					d09b6ecaa5 | ||
| 
						 | 
					fb2e71b9bd | ||
| 
						 | 
					68b67e24f2 | ||
| 
						 | 
					c1e2341f0a | ||
| 
						 | 
					70d834c512 | ||
| 
						 | 
					65ee4e4555 | ||
| 
						 | 
					5304b13365 | ||
| 
						 | 
					e547bfa933 | ||
| 
						 | 
					36ddb13d1f | ||
| 
						 | 
					74e3def5b3 | ||
| 
						 | 
					24d41452b0 | ||
| 
						 | 
					2597020d22 | ||
| 
						 | 
					2d0fea2650 | ||
| 
						 | 
					c1a71ad14f | ||
| 
						 | 
					024c7641a9 | ||
| 
						 | 
					5c56bdf229 | ||
| 
						 | 
					af779fa57c | ||
| 
						 | 
					9918541795 | ||
| 
						 | 
					04d5c8fb77 | ||
| 
						 | 
					5980b3cbb0 | ||
| 
						 | 
					10074bfcc6 | ||
| 
						 | 
					3940e69c91 | ||
| 
						 | 
					0ace5f6553 | ||
| 
						 | 
					b8a9f19515 | ||
| 
						 | 
					6cd007838d | ||
| 
						 | 
					72870e2c57 | ||
| 
						 | 
					9c8997cbe4 | ||
| 
						 | 
					c6efb82526 | ||
| 
						 | 
					5abfdc0140 | ||
| 
						 | 
					d8bc4a0e9a | ||
| 
						 | 
					8ad2fdd71e | ||
| 
						 | 
					a2e45a2211 | ||
| 
						 | 
					621c2b9015 | ||
| 
						 | 
					b39d1e9b9d | ||
| 
						 | 
					e1c456407e | ||
| 
						 | 
					3fe8251dfb | ||
| 
						 | 
					930a45e7a9 | ||
| 
						 | 
					afc66554d7 | ||
| 
						 | 
					998ab15570 | ||
| 
						 | 
					c0d258ca17 | ||
| 
						 | 
					230e4547e8 | ||
| 
						 | 
					4cf33909ee | ||
| 
						 | 
					323273382c | ||
| 
						 | 
					6f0a2608b4 | ||
| 
						 | 
					ea86edbd82 | ||
| 
						 | 
					e7b5a8e6cb | ||
| 
						 | 
					27eaf0cf02 | ||
| 
						 | 
					c84904d8c8 | ||
| 
						 | 
					01e1c85304 | ||
| 
						 | 
					4774582dfb | ||
| 
						 | 
					1ed09ff7a4 | ||
| 
						 | 
					d89cf27d65 | ||
| 
						 | 
					35d5ba2626 | ||
| 
						 | 
					e5f0c38fa9 | ||
| 
						 | 
					47925f3dd7 | ||
| 
						 | 
					82c5950c7e | ||
| 
						 | 
					1806879bb2 | ||
| 
						 | 
					998b046d70 | ||
| 
						 | 
					ec4f6e93c2 | ||
| 
						 | 
					b49dcfb52b | ||
| 
						 | 
					c62d55342d | ||
| 
						 | 
					f7815fa93c | ||
| 
						 | 
					6e305e11e3 | ||
| 
						 | 
					b97606f0b0 | ||
| 
						 | 
					f26154bfa9 | ||
| 
						 | 
					d220ac8582 | ||
| 
						 | 
					c57e748107 | ||
| 
						 | 
					d6f8f16068 | ||
| 
						 | 
					466429efb0 | ||
| 
						 | 
					89977c73d1 | ||
| 
						 | 
					a9a05a32bd | ||
| 
						 | 
					2045c79e37 | ||
| 
						 | 
					e60b5245d3 | ||
| 
						 | 
					90bbabce56 | ||
| 
						 | 
					ddfbe8b649 | ||
| 
						 | 
					d001f6a396 | ||
| 
						 | 
					d31da176eb | ||
| 
						 | 
					e664cd5826 | ||
| 
						 | 
					b8abeab6d3 | ||
| 
						 | 
					4aa176c127 | ||
| 
						 | 
					498e939f0e | ||
| 
						 | 
					9a22b893b6 | ||
| 
						 | 
					76d0d40946 | ||
| 
						 | 
					791ad1210e | ||
| 
						 | 
					100945694a | ||
| 
						 | 
					abe2e6ecf7 | ||
| 
						 | 
					d8efc99217 | ||
| 
						 | 
					0163b5b8be | ||
| 
						 | 
					baee3996ab | ||
| 
						 | 
					8ad1928d93 | ||
| 
						 | 
					24bf52bc69 | ||
| 
						 | 
					862049c490 | ||
| 
						 | 
					a8fc98aa30 | ||
| 
						 | 
					d70f33748c | ||
| 
						 | 
					b006c31b7b | ||
| 
						 | 
					ae45a462e0 | ||
| 
						 | 
					3cb0dd6685 | ||
| 
						 | 
					c2a84aa6f0 | ||
| 
						 | 
					9346e55d5a | ||
| 
						 | 
					8fc2f8ef62 | ||
| 
						 | 
					512b9ac194 | ||
| 
						 | 
					560a82aeaf | ||
| 
						 | 
					7358db5c27 | ||
| 
						 | 
					e059efda1b | ||
| 
						 | 
					164a985115 | ||
| 
						 | 
					ade57a781c | ||
| 
						 | 
					9f12ed83f2 | ||
| 
						 | 
					8aabd9839b | ||
| 
						 | 
					882fbb0433 | ||
| 
						 | 
					15eee5dbbb | ||
| 
						 | 
					cfc1d037ff | ||
| 
						 | 
					c24ed07596 | ||
| 
						 | 
					08aab6a620 | ||
| 
						 | 
					2748c64d60 | ||
| 
						 | 
					c4f1ab3cc5 | ||
| 
						 | 
					5e06ec8409 | ||
| 
						 | 
					04d0a84ae5 | ||
| 
						 | 
					c1dfe2c529 | ||
| 
						 | 
					7f88e8badb | ||
| 
						 | 
					2f66ff2e4f | ||
| 
						 | 
					76c251513e | ||
| 
						 | 
					80afddacc8 | ||
| 
						 | 
					7543c9df50 | ||
| 
						 | 
					83fb13329d | ||
| 
						 | 
					e06c923605 | ||
| 
						 | 
					ab1169895f | ||
| 
						 | 
					01e81c7e10 | ||
| 
						 | 
					7bf1142ae0 | ||
| 
						 | 
					af9f7a952b | ||
| 
						 | 
					514592b892 | ||
| 
						 | 
					d72efff878 | ||
| 
						 | 
					e4c60e2030 | ||
| 
						 | 
					ed80eb5b0f | ||
| 
						 | 
					60dd765b3d | ||
| 
						 | 
					b380dd030f | ||
| 
						 | 
					19479ea021 | ||
| 
						 | 
					d708ef6731 | ||
| 
						 | 
					d1238baecb | ||
| 
						 | 
					0510759bc4 | ||
| 
						 | 
					6d5cca5ed0 | ||
| 
						 | 
					e2b82b4325 | ||
| 
						 | 
					cf4570a06f | ||
| 
						 | 
					6df5dddd90 | ||
| 
						 | 
					d4e9b141db | ||
| 
						 | 
					ec0665a931 | ||
| 
						 | 
					836fa69e2e | ||
| 
						 | 
					9026dc2da4 | ||
| 
						 | 
					98c9af4c59 | ||
| 
						 | 
					e481d679b2 | ||
| 
						 | 
					eb68aa38e3 | ||
| 
						 | 
					082237e2b5 | ||
| 
						 | 
					dd08a7a4f6 | ||
| 
						 | 
					a60c9ef88e | ||
| 
						 | 
					4e3d235e04 | ||
| 
						 | 
					19da3606f9 | ||
| 
						 | 
					fc9e0d2249 | ||
| 
						 | 
					21a0f09081 | ||
| 
						 | 
					b84b71f524 | ||
| 
						 | 
					3d29bda9f8 | ||
| 
						 | 
					459c664043 | ||
| 
						 | 
					45edad84cb | ||
| 
						 | 
					fd31f7e7e5 | ||
| 
						 | 
					7b2531da24 | ||
| 
						 | 
					848a13654d | ||
| 
						 | 
					1cca8f5a30 | ||
| 
						 | 
					12ffcf0b45 | ||
| 
						 | 
					852989856d | ||
| 
						 | 
					7dfdbf8fbe | ||
| 
						 | 
					1eebb90030 | ||
| 
						 | 
					ab71654078 | ||
| 
						 | 
					7a6cff4b3a | ||
| 
						 | 
					c3ba2198b1 | ||
| 
						 | 
					ff748f1a41 | ||
| 
						 | 
					b8193b6321 | ||
| 
						 | 
					113d0937de | ||
| 
						 | 
					d0a506661f | ||
| 
						 | 
					4e71173928 | ||
| 
						 | 
					e0f0a2ccee | ||
| 
						 | 
					96edebf4d9 | ||
| 
						 | 
					3783b455c0 | ||
| 
						 | 
					7ee5238f5e | ||
| 
						 | 
					b398169567 | ||
| 
						 | 
					1960eebc2d | ||
| 
						 | 
					ad1dd08693 | ||
| 
						 | 
					95fd093c4a | ||
| 
						 | 
					ed1ad28e29 | ||
| 
						 | 
					7076505c24 | ||
| 
						 | 
					5825cf9457 | ||
| 
						 | 
					ff40415aee | ||
| 
						 | 
					f48eb36f75 | ||
| 
						 | 
					768e3e796e | ||
| 
						 | 
					3869d4a3a7 | ||
| 
						 | 
					a87c468c5c | ||
| 
						 | 
					7abf50a5c0 | ||
| 
						 | 
					d3f46eb61b | ||
| 
						 | 
					72c58b0d1d | ||
| 
						 | 
					6c89e1b311 | ||
| 
						 | 
					09777a4fc2 | ||
| 
						 | 
					0331071346 | ||
| 
						 | 
					614ae7b2bc | ||
| 
						 | 
					af41ada7aa | ||
| 
						 | 
					6a33a4456e | ||
| 
						 | 
					e0c2a39ad4 | ||
| 
						 | 
					cda1f2be58 | ||
| 
						 | 
					79e06c4147 | ||
| 
						 | 
					ead2618c31 | ||
| 
						 | 
					84eb9fee76 | ||
| 
						 | 
					79300cdcd9 | ||
| 
						 | 
					a9591ad1b7 | ||
| 
						 | 
					098106b54c | ||
| 
						 | 
					74bb59fa57 | ||
| 
						 | 
					c97d112b30 | ||
| 
						 | 
					2dc20b84c1 | ||
| 
						 | 
					39b689f966 | ||
| 
						 | 
					6fd3ff4032 | ||
| 
						 | 
					ab8d1464a7 | ||
| 
						 | 
					bf90d11a31 | ||
| 
						 | 
					a08b6ae813 | ||
| 
						 | 
					74c500b6ec | ||
| 
						 | 
					26aeadbc3e | ||
| 
						 | 
					d0a4b50e19 | ||
| 
						 | 
					ebaf06a741 | ||
| 
						 | 
					34d837c2dd | ||
| 
						 | 
					7607d5145b | ||
| 
						 | 
					12a90289ed | ||
| 
						 | 
					592697583d | ||
| 
						 | 
					b50a96982e | ||
| 
						 | 
					aa2a54c10a | ||
| 
						 | 
					532d4b5106 | ||
| 
						 | 
					5788719988 | ||
| 
						 | 
					ac0b911eda | ||
| 
						 | 
					10232bfe9e | ||
| 
						 | 
					a9c1ca9fc5 | ||
| 
						 | 
					d051dd8087 | ||
| 
						 | 
					bf52cef16f | ||
| 
						 | 
					16a9c5e02b | ||
| 
						 | 
					fef1a90938 | ||
| 
						 | 
					27870d48ff | ||
| 
						 | 
					2f66f3ce08 | ||
| 
						 | 
					369df58a0d | ||
| 
						 | 
					3d08b352a2 | ||
| 
						 | 
					d13be06aaa | ||
| 
						 | 
					f1c69192da | ||
| 
						 | 
					a2314225e0 | ||
| 
						 | 
					1e482fe6a8 | ||
| 
						 | 
					80e7f9b9de | ||
| 
						 | 
					d219269f1b | ||
| 
						 | 
					0ff0512aff | ||
| 
						 | 
					bdd731177e | ||
| 
						 | 
					abd1c526f0 | ||
| 
						 | 
					a050a5fa9b | ||
| 
						 | 
					7f7b643c0d | ||
| 
						 | 
					cd2814725a | ||
| 
						 | 
					342fa1cf06 | ||
| 
						 | 
					b425e851fb | ||
| 
						 | 
					7c6a026230 | ||
| 
						 | 
					2c9763da3e | ||
| 
						 | 
					a782c3e368 | ||
| 
						 | 
					95bd901efe | ||
| 
						 | 
					98c9a5b7f6 | ||
| 
						 | 
					516192e7f2 | ||
| 
						 | 
					c37cdbe2cf | ||
| 
						 | 
					c0a30b04c2 | ||
| 
						 | 
					86cbb23282 | ||
| 
						 | 
					e9a460411f | ||
| 
						 | 
					a57098ea9b | ||
| 
						 | 
					6f3166c15b | ||
| 
						 | 
					1380c9af9f | ||
| 
						 | 
					942daece00 | ||
| 
						 | 
					040a4443a1 | ||
| 
						 | 
					641d5c4111 | ||
| 
						 | 
					ad4a9955c5 | ||
| 
						 | 
					553ed99e3b | ||
| 
						 | 
					b74cdee6ab | ||
| 
						 | 
					f3c0afa5b8 | ||
| 
						 | 
					a69ba639ba | ||
| 
						 | 
					fc9ad03e66 | ||
| 
						 | 
					b9d66dca51 | ||
| 
						 | 
					ecf1c6ca5d | ||
| 
						 | 
					9b48991ebd | ||
| 
						 | 
					7a8a20416f | ||
| 
						 | 
					458925ae0b | ||
| 
						 | 
					e44dc92197 | ||
| 
						 | 
					9bb51d767e | ||
| 
						 | 
					82e095a275 | ||
| 
						 | 
					0e40261a11 | ||
| 
						 | 
					8e9e33ae52 | ||
| 
						 | 
					40e1a016f9 | ||
| 
						 | 
					1cf559492a | ||
| 
						 | 
					4957a838ef | ||
| 
						 | 
					91aeebed26 | ||
| 
						 | 
					b16ea66cec | ||
| 
						 | 
					80cec5a62a | ||
| 
						 | 
					6c2c281a7e | ||
| 
						 | 
					0836893335 | ||
| 
						 | 
					590f0358d8 | ||
| 
						 | 
					115446be37 | ||
| 
						 | 
					d83606ee3a | ||
| 
						 | 
					8f4fda1d6f | ||
| 
						 | 
					18cbb4d7d6 | ||
| 
						 | 
					22e84d92b7 | ||
| 
						 | 
					3d74649908 | ||
| 
						 | 
					ed63d9d4de | ||
| 
						 | 
					8adc7038fe | ||
| 
						 | 
					b12fef3f31 | ||
| 
						 | 
					6cc8df95dd | ||
| 
						 | 
					f105e23444 | ||
| 
						 | 
					7513d29a48 | ||
| 
						 | 
					97a41f3646 | ||
| 
						 | 
					84de433e62 | ||
| 
						 | 
					724ad15dad | ||
| 
						 | 
					79aa6c841e | ||
| 
						 | 
					058e764af8 | ||
| 
						 | 
					0d09f342c4 | ||
| 
						 | 
					9682c2037e | ||
| 
						 | 
					74241e7d85 | ||
| 
						 | 
					3154f04fb9 | ||
| 
						 | 
					6982ed4db7 | ||
| 
						 | 
					9dd3e4d481 | ||
| 
						 | 
					1d95109ffa | ||
| 
						 | 
					e9bb7b7712 | ||
| 
						 | 
					5e9c564883 | ||
| 
						 | 
					3bb4602227 | ||
| 
						 | 
					064eebeaf1 | ||
| 
						 | 
					4ae644e427 | ||
| 
						 | 
					d208e56b16 | ||
| 
						 | 
					e6170eb20d | ||
| 
						 | 
					2c80bcbc81 | ||
| 
						 | 
					b60dbfa9e9 | ||
| 
						 | 
					9019fc5671 | ||
| 
						 | 
					5db0f70491 | ||
| 
						 | 
					53a549000c | ||
| 
						 | 
					55700cb01f | ||
| 
						 | 
					f9a6062081 | ||
| 
						 | 
					0cae201044 | ||
| 
						 | 
					9df37b93df | ||
| 
						 | 
					7b5c86033a | ||
| 
						 | 
					ade0890746 | ||
| 
						 | 
					7a5596bf02 | ||
| 
						 | 
					d2125cf501 | ||
| 
						 | 
					c9eb41c056 | ||
| 
						 | 
					0d722204c3 | ||
| 
						 | 
					e829d5643f | ||
| 
						 | 
					1093287494 | ||
| 
						 | 
					6398f71cc4 | ||
| 
						 | 
					e2b50b203d | ||
| 
						 | 
					ab0de23d83 | ||
| 
						 | 
					ec54fbd9ed | ||
| 
						 | 
					074bd2a19b | ||
| 
						 | 
					fb23b85770 | ||
| 
						 | 
					3458ce9ae5 | ||
| 
						 | 
					ba3e7a8656 | ||
| 
						 | 
					240bae4eb2 | ||
| 
						 | 
					4180ca7638 | ||
| 
						 | 
					0e73361a06 | ||
| 
						 | 
					23547fa2a0 | ||
| 
						 | 
					550d6f74b9 | ||
| 
						 | 
					f7b71c2abe | ||
| 
						 | 
					0da90b5d91 | ||
| 
						 | 
					f20c94ced9 | ||
| 
						 | 
					3e635a2334 | ||
| 
						 | 
					e78652d850 | ||
| 
						 | 
					48918c3047 | ||
| 
						 | 
					dc42d6fb8d | ||
| 
						 | 
					d2ad98d8c5 | ||
| 
						 | 
					d25aab2704 | ||
| 
						 | 
					cfaf88aab4 | ||
| 
						 | 
					ecc75be6f3 | ||
| 
						 | 
					13ebf61850 | ||
| 
						 | 
					b3fafe9b3a | ||
| 
						 | 
					c66943bd89 | ||
| 
						 | 
					11fae450fa | ||
| 
						 | 
					cf9259dd92 | ||
| 
						 | 
					6634e3c3a3 | ||
| 
						 | 
					533ae704a1 | ||
| 
						 | 
					fcc320ee40 | ||
| 
						 | 
					dc9fe9c361 | ||
| 
						 | 
					75c369dcca | ||
| 
						 | 
					019f6a1926 | ||
| 
						 | 
					44fba11b34 | ||
| 
						 | 
					df07c87b89 | ||
| 
						 | 
					8f9e0357dd | ||
| 
						 | 
					736af32b49 | ||
| 
						 | 
					6942d313ff | ||
| 
						 | 
					940c075bd8 | ||
| 
						 | 
					08e5c0812f | ||
| 
						 | 
					a8c71961e0 | ||
| 
						 | 
					d6f47cc60c | ||
| 
						 | 
					63d595a047 | ||
| 
						 | 
					15e56c3284 | ||
| 
						 | 
					fc1443dcfc | ||
| 
						 | 
					59e3651af3 | ||
| 
						 | 
					4c841a1f0c | ||
| 
						 | 
					339ebdf08b | ||
| 
						 | 
					f01d324c83 | ||
| 
						 | 
					405e192b8c | ||
| 
						 | 
					1a340de0e5 | ||
| 
						 | 
					05c191199d | ||
| 
						 | 
					1fd7085ef1 | ||
| 
						 | 
					c3a7a757f7 | ||
| 
						 | 
					dca46e6470 | ||
| 
						 | 
					7edd13822c | ||
| 
						 | 
					a2bff51ede | ||
| 
						 | 
					5dc1240c49 | ||
| 
						 | 
					c764331dd9 | ||
| 
						 | 
					586444b6b8 | ||
| 
						 | 
					ce1649564c | ||
| 
						 | 
					d76a74cc5e | ||
| 
						 | 
					1b701c746f | ||
| 
						 | 
					15bf168527 | ||
| 
						 | 
					20e9fc73e2 | ||
| 
						 | 
					bad6410d08 | ||
| 
						 | 
					fecb67b246 | ||
| 
						 | 
					2c0956200f | ||
| 
						 | 
					acd9d72466 | ||
| 
						 | 
					cd63a461d7 | ||
| 
						 | 
					7bd098f670 | ||
| 
						 | 
					4b5c504bd4 | ||
| 
						 | 
					ffae4f6b48 | ||
| 
						 | 
					454e840590 | ||
| 
						 | 
					ed0a413711 | ||
| 
						 | 
					ff812ccdc9 | ||
| 
						 | 
					03bbf4de48 | ||
| 
						 | 
					a62e155ca4 | ||
| 
						 | 
					b620e62f0f | ||
| 
						 | 
					b3186dee17 | ||
| 
						 | 
					ea3f63281c | ||
| 
						 | 
					7b9435890d | ||
| 
						 | 
					1bfbd25027 | ||
| 
						 | 
					ceb5a8ca7b | ||
| 
						 | 
					ddc98c6fc9 | ||
| 
						 | 
					ff6ff66e50 | ||
| 
						 | 
					a7b98f5f6b | ||
| 
						 | 
					6bae091c1b | ||
| 
						 | 
					33d68653f0 | ||
| 
						 | 
					267836e83c | ||
| 
						 | 
					87fdfe770d | ||
| 
						 | 
					8fca5c2e69 | ||
| 
						 | 
					5f2055729e | ||
| 
						 | 
					c6df788866 | ||
| 
						 | 
					e67b2524d1 | ||
| 
						 | 
					d7bcc26179 | ||
| 
						 | 
					69e540dfa6 | ||
| 
						 | 
					2198869eb1 | ||
| 
						 | 
					fb07259e0d | ||
| 
						 | 
					9d28a0252c | ||
| 
						 | 
					d54c14ccf9 | ||
| 
						 | 
					41def4be6e | ||
| 
						 | 
					2d38d0d515 | ||
| 
						 | 
					e796c79d18 | ||
| 
						 | 
					c93ba48da2 | ||
| 
						 | 
					e322513698 | ||
| 
						 | 
					6fa72e6417 | ||
| 
						 | 
					c914e6ea5d | ||
| 
						 | 
					79cb74f03a | ||
| 
						 | 
					34cf35051a | ||
| 
						 | 
					9bd28a021f | ||
| 
						 | 
					5ee3f41e0d | ||
| 
						 | 
					64e88ff6a7 | ||
| 
						 | 
					acd7c94598 | ||
| 
						 | 
					bdb2beb8e4 | ||
| 
						 | 
					727e23322f | ||
| 
						 | 
					ef0ed9b720 | ||
| 
						 | 
					a674654f83 | ||
| 
						 | 
					3caeb0a91f | ||
| 
						 | 
					a4eddf0d0d | ||
| 
						 | 
					fcf9029179 | ||
| 
						 | 
					e40327ba00 | ||
| 
						 | 
					bdd0e3d3f5 | ||
| 
						 | 
					e9490fdbd9 | ||
| 
						 | 
					bd40b3ff3f | ||
| 
						 | 
					8c66811e09 | ||
| 
						 | 
					daadcfd1de | ||
| 
						 | 
					62df0ff025 | ||
| 
						 | 
					01d95b56a0 | ||
| 
						 | 
					f6adae8d35 | ||
| 
						 | 
					bcaadb4284 | ||
| 
						 | 
					8d963aa0e2 | ||
| 
						 | 
					0530b0a5ca | ||
| 
						 | 
					5396121595 | ||
| 
						 | 
					bcfc7d90d1 | ||
| 
						 | 
					47246eb401 | ||
| 
						 | 
					3620e71010 | ||
| 
						 | 
					c522f349fe | ||
| 
						 | 
					6893fcaa9b | ||
| 
						 | 
					301ae1ae1b | ||
| 
						 | 
					ddaa78f08b | ||
| 
						 | 
					3d55877764 | ||
| 
						 | 
					3ee32d7920 | ||
| 
						 | 
					b3de497d83 | ||
| 
						 | 
					ed6466d176 | ||
| 
						 | 
					991505e077 | ||
| 
						 | 
					56f17d2c9f | ||
| 
						 | 
					19ae96f4d0 | ||
| 
						 | 
					53108806af | ||
| 
						 | 
					1d620a3df4 | ||
| 
						 | 
					69f685056d | ||
| 
						 | 
					9c7d4394f9 | ||
| 
						 | 
					bcc3c9279a | ||
| 
						 | 
					5d63404966 | ||
| 
						 | 
					a8ae8087c4 | ||
| 
						 | 
					502da27d65 | ||
| 
						 | 
					4ab8ebb232 | ||
| 
						 | 
					f866af912d | ||
| 
						 | 
					4f00a8db73 | ||
| 
						 | 
					5004529685 | ||
| 
						 | 
					2b63eb8511 | ||
| 
						 | 
					f09fe4b49f | ||
| 
						 | 
					22c76df44d | ||
| 
						 | 
					35be09cf58 | ||
| 
						 | 
					3564aec388 | ||
| 
						 | 
					a042090467 | ||
| 
						 | 
					148d727525 | ||
| 
						 | 
					08adf67969 | ||
| 
						 | 
					e2c817731a | ||
| 
						 | 
					8df7e0bdba | ||
| 
						 | 
					14ff7e75e0 | ||
| 
						 | 
					d270d6518a | ||
| 
						 | 
					18faa50940 | ||
| 
						 | 
					0ce484eed9 | ||
| 
						 | 
					bce5ae9a07 | ||
| 
						 | 
					15f832d1c2 | ||
| 
						 | 
					c249a8aa1b | ||
| 
						 | 
					fc794ae012 | ||
| 
						 | 
					07227e8089 | ||
| 
						 | 
					32cc75d6cb | ||
| 
						 | 
					1c0a19ad53 | ||
| 
						 | 
					de23b98522 | ||
| 
						 | 
					5e1c9e90d9 | ||
| 
						 | 
					59b4bdf78d | ||
| 
						 | 
					34d02d1969 | ||
| 
						 | 
					2408b236ca | ||
| 
						 | 
					4acd437952 | ||
| 
						 | 
					314f62958d | ||
| 
						 | 
					c616d56e96 | ||
| 
						 | 
					f111c9edae | ||
| 
						 | 
					7138296633 | ||
| 
						 | 
					195e94c0fa | ||
| 
						 | 
					cadd08f36a | ||
| 
						 | 
					7306b7829b | ||
| 
						 | 
					423309541a | ||
| 
						 | 
					9c6533d287 | ||
| 
						 | 
					b430576436 | ||
| 
						 | 
					65008a4e55 | ||
| 
						 | 
					3df484088f | ||
| 
						 | 
					2912189875 | ||
| 
						 | 
					fcb2595ed6 | ||
| 
						 | 
					0878af3ec0 | ||
| 
						 | 
					fe0d7aee49 | ||
| 
						 | 
					2e42b0a252 | ||
| 
						 | 
					fcc485092a | ||
| 
						 | 
					a4945fe687 | ||
| 
						 | 
					88d89b2177 | ||
| 
						 | 
					61a2d5ea75 | ||
| 
						 | 
					c479c64333 | ||
| 
						 | 
					7a2177dc42 | ||
| 
						 | 
					bf6e2f28ba | ||
| 
						 | 
					f5da1e5484 | ||
| 
						 | 
					fd8d862c37 | ||
| 
						 | 
					083d3190e5 | ||
| 
						 | 
					6787d1ed35 | ||
| 
						 | 
					d9023c16ab | ||
| 
						 | 
					193d33fd4a | ||
| 
						 | 
					a46b40b7fd | ||
| 
						 | 
					0b9b8acb08 | ||
| 
						 | 
					bf98b635cd | ||
| 
						 | 
					7795eb6db8 | ||
| 
						 | 
					31674559d3 | ||
| 
						 | 
					04e4d9a0b3 | ||
| 
						 | 
					f277124a0f | ||
| 
						 | 
					6adf5880f5 | ||
| 
						 | 
					4e8c4fc80b | ||
| 
						 | 
					fc1d1ea934 | ||
| 
						 | 
					9cd30c2012 | ||
| 
						 | 
					d639ed1aaf | ||
| 
						 | 
					c3a02f5407 | ||
| 
						 | 
					674845f239 | ||
| 
						 | 
					07a1857d59 | ||
| 
						 | 
					f4ffa85f60 | ||
| 
						 | 
					bcd7d03b3b | ||
| 
						 | 
					82c9379b6c | ||
| 
						 | 
					c1730dc50a | ||
| 
						 | 
					20695098c8 | ||
| 
						 | 
					ee52ae001c | ||
| 
						 | 
					26115aac5d | ||
| 
						 | 
					ca6b27aed2 | ||
| 
						 | 
					4fabe22173 | ||
| 
						 | 
					7b1a22147e | ||
| 
						 | 
					dc24540ed1 | ||
| 
						 | 
					92eae30f4d | ||
| 
						 | 
					79ef08f631 | ||
| 
						 | 
					e3c5f8374b | ||
| 
						 | 
					6dc68b4193 | ||
| 
						 | 
					afab4d888f | ||
| 
						 | 
					c751dfd65d | ||
| 
						 | 
					dbca1347f1 | ||
| 
						 | 
					3b6315ce1f | ||
| 
						 | 
					3c1db5f250 | ||
| 
						 | 
					562e9b7bf3 | ||
| 
						 | 
					a83e72692f | ||
| 
						 | 
					bd99a7dc8c | ||
| 
						 | 
					db2d52a792 | ||
| 
						 | 
					24602edc17 | ||
| 
						 | 
					b0b40d9a00 | ||
| 
						 | 
					71b105ceb1 | ||
| 
						 | 
					ccb4956145 | ||
| 
						 | 
					3d09cb0a88 | ||
| 
						 | 
					a03c2d825b | ||
| 
						 | 
					06fb242e23 | ||
| 
						 | 
					a086952244 | ||
| 
						 | 
					2b314064ae | ||
| 
						 | 
					439990be88 | ||
| 
						 | 
					41d8186c7e | ||
| 
						 | 
					6e9276229f | ||
| 
						 | 
					636f5eb882 | ||
| 
						 | 
					963ef5414c | ||
| 
						 | 
					975812d246 | ||
| 
						 | 
					089668ec73 | ||
| 
						 | 
					cc0ce38acc | ||
| 
						 | 
					8cdff55b80 | ||
| 
						 | 
					662bee7193 | ||
| 
						 | 
					f8172f85b1 | ||
| 
						 | 
					7d3ea12b62 | ||
| 
						 | 
					59dc9085d1 | ||
| 
						 | 
					4e4f33a297 | ||
| 
						 | 
					8fa599215b | ||
| 
						 | 
					31e2409d6b | ||
| 
						 | 
					15c304225f | ||
| 
						 | 
					e1998e3b58 | ||
| 
						 | 
					5c447f2499 | ||
| 
						 | 
					9d0ffb9cc6 | ||
| 
						 | 
					2be50baf97 | ||
| 
						 | 
					a1772ca406 | ||
| 
						 | 
					30eda92a53 | ||
| 
						 | 
					1f058f1014 | ||
| 
						 | 
					84d0477cb9 | ||
| 
						 | 
					1c93e75375 | ||
| 
						 | 
					380ed8bebf | ||
| 
						 | 
					98e8978857 | ||
| 
						 | 
					56ddfbea6e | ||
| 
						 | 
					45a2240ead | ||
| 
						 | 
					f75ba55b51 | ||
| 
						 | 
					46e6115d72 | ||
| 
						 | 
					800a72878a | ||
| 
						 | 
					649f7b7fd3 | ||
| 
						 | 
					c1b734a3e1 | ||
| 
						 | 
					cf806748ec | ||
| 
						 | 
					b28dc011e0 | ||
| 
						 | 
					ee4fef3768 | ||
| 
						 | 
					058a023fae | ||
| 
						 | 
					0c367fef94 | ||
| 
						 | 
					a418d290f1 | ||
| 
						 | 
					08cb30801c | ||
| 
						 | 
					788de4f7ba | ||
| 
						 | 
					ebce0a16f6 | ||
| 
						 | 
					df546bd58c | ||
| 
						 | 
					05221e9056 | ||
| 
						 | 
					e963714de6 | ||
| 
						 | 
					dc11239ff1 | ||
| 
						 | 
					d59841618d | ||
| 
						 | 
					8d3964782a | ||
| 
						 | 
					162c039e9d | ||
| 
						 | 
					13648f8ccd | ||
| 
						 | 
					5b809a3104 | ||
| 
						 | 
					3daa54d636 | ||
| 
						 | 
					8f1829d1d2 | ||
| 
						 | 
					6efb6addf2 | ||
| 
						 | 
					d789097af0 | ||
| 
						 | 
					4bd2d49ca1 | ||
| 
						 | 
					ecfede9b3c | ||
| 
						 | 
					cb04619de2 | ||
| 
						 | 
					61e2e86aef | ||
| 
						 | 
					9b86eecb94 | ||
| 
						 | 
					35212da048 | ||
| 
						 | 
					755e743cdd | ||
| 
						 | 
					1a323390ec | ||
| 
						 | 
					23559fd118 | ||
| 
						 | 
					d994a873a4 | ||
| 
						 | 
					b6575ce0b0 | ||
| 
						 | 
					e2b2a84497 | ||
| 
						 | 
					86956c2261 | ||
| 
						 | 
					ef6dfdc7fd | ||
| 
						 | 
					f3b85ef79d | ||
| 
						 | 
					1d7e42ee9f | ||
| 
						 | 
					6dfb5b4e1f | ||
| 
						 | 
					930085751c | ||
| 
						 | 
					258c4686b2 | ||
| 
						 | 
					600d0b1303 | ||
| 
						 | 
					2f928797cf | ||
| 
						 | 
					f3f06e823c | ||
| 
						 | 
					58292f49c5 | ||
| 
						 | 
					5376d1047c | ||
| 
						 | 
					1746b57161 | ||
| 
						 | 
					0561bffab3 | ||
| 
						 | 
					968e943eac | ||
| 
						 | 
					5be00c95a7 | ||
| 
						 | 
					c80b9c3778 | ||
| 
						 | 
					536f98a766 | ||
| 
						 | 
					c4e5613a7d | ||
| 
						 | 
					bff962398d | ||
| 
						 | 
					2b15823dab | ||
| 
						 | 
					59dcc7e191 | ||
| 
						 | 
					ea3fe98867 | ||
| 
						 | 
					4f05613fbb | ||
| 
						 | 
					22e52ddd6e | ||
| 
						 | 
					1125d45397 | ||
| 
						 | 
					44d408204a | ||
| 
						 | 
					50feea3eef | ||
| 
						 | 
					ca95f58ac0 | ||
| 
						 | 
					ed636cbe44 | ||
| 
						 | 
					738e4f410c | ||
| 
						 | 
					4e731a0189 | ||
| 
						 | 
					5cf6a539fe | ||
| 
						 | 
					17fde12fb8 | ||
| 
						 | 
					5c8b973d4f | ||
| 
						 | 
					b22e03b2b2 | ||
| 
						 | 
					a2926ebe7c | ||
| 
						 | 
					c508d70258 | ||
| 
						 | 
					f5971f54ff | ||
| 
						 | 
					c5b16d4468 | ||
| 
						 | 
					3c71a1bab7 | ||
| 
						 | 
					3ec322685b | ||
| 
						 | 
					9a39839a43 | ||
| 
						 | 
					e87c996fe0 | ||
| 
						 | 
					32195c673d | ||
| 
						 | 
					b99a61c5b0 | ||
| 
						 | 
					c960cd41e8 | ||
| 
						 | 
					a29471d0f7 | ||
| 
						 | 
					ba6f20a244 | ||
| 
						 | 
					61572a1f97 | ||
| 
						 | 
					dee3844f13 | ||
| 
						 | 
					cbd1a77ec2 | ||
| 
						 | 
					33f7ac06c3 | ||
| 
						 | 
					70f10f1ac9 | ||
| 
						 | 
					775b60fa09 | ||
| 
						 | 
					66e4d391d3 | ||
| 
						 | 
					caf880be18 | ||
| 
						 | 
					c8355c27e9 | ||
| 
						 | 
					c2d7e2ae17 | ||
| 
						 | 
					98ecad0da6 | ||
| 
						 | 
					bbc4e05434 | ||
| 
						 | 
					ad6e28073c | ||
| 
						 | 
					af29dcbafb | ||
| 
						 | 
					b9a7f4e502 | ||
| 
						 | 
					51009a40b4 | ||
| 
						 | 
					2ec8f77f21 | ||
| 
						 | 
					7f62028d66 | ||
| 
						 | 
					d34fe06fb0 | ||
| 
						 | 
					2f3d520571 | ||
| 
						 | 
					48dd0c5673 | ||
| 
						 | 
					8be493296d | ||
| 
						 | 
					6f33531861 | ||
| 
						 | 
					16897354bc | ||
| 
						 | 
					823a0454a6 | ||
| 
						 | 
					6790c559af | ||
| 
						 | 
					c56c4a0a47 | ||
| 
						 | 
					45064c5778 | ||
| 
						 | 
					7aba59f577 | ||
| 
						 | 
					59b05ac383 | ||
| 
						 | 
					9b15f1be26 | ||
| 
						 | 
					38cd2d781f | ||
| 
						 | 
					2f285b3f16 | ||
| 
						 | 
					57d2fb41d0 | ||
| 
						 | 
					0f77fe55b6 | ||
| 
						 | 
					68ee002ad0 | ||
| 
						 | 
					1fc3b18592 | ||
| 
						 | 
					5a5287ef2a | ||
| 
						 | 
					30c85c327b | ||
| 
						 | 
					ed3cc86390 | ||
| 
						 | 
					e5f1499f62 | ||
| 
						 | 
					848f40fd65 | ||
| 
						 | 
					5adf53dc01 | ||
| 
						 | 
					15feb8217f | ||
| 
						 | 
					59dccb34b0 | ||
| 
						 | 
					e8057241c6 | ||
| 
						 | 
					d3ee83747c | ||
| 
						 | 
					3f55ed0ef7 | ||
| 
						 | 
					f9cfef3599 | ||
| 
						 | 
					07dbfa25a0 | ||
| 
						 | 
					1d49c04545 | ||
| 
						 | 
					faaaf62655 | ||
| 
						 | 
					43885493ea | ||
| 
						 | 
					1230422181 | ||
| 
						 | 
					6a17cae4f6 | ||
| 
						 | 
					1eac702c1a | ||
| 
						 | 
					4b96ac504c | ||
| 
						 | 
					0678a51d3b | ||
| 
						 | 
					b7dd186d36 | ||
| 
						 | 
					26c1c8b2ad | ||
| 
						 | 
					824aa5f918 | ||
| 
						 | 
					ca67dcbc05 | ||
| 
						 | 
					9dbc2c827d | ||
| 
						 | 
					91e27ce755 | ||
| 
						 | 
					65ed696625 | ||
| 
						 | 
					3e3eaaada7 | ||
| 
						 | 
					8997d258f7 | ||
| 
						 | 
					a3f958aaaa | ||
| 
						 | 
					38649d1362 | ||
| 
						 | 
					4f00a02ba3 | ||
| 
						 | 
					edef367e9c | ||
| 
						 | 
					08c5e2a194 | ||
| 
						 | 
					c67c54d4b3 | ||
| 
						 | 
					23b05e8473 | ||
| 
						 | 
					949ff9715a | ||
| 
						 | 
					b9a305983f | ||
| 
						 | 
					8e7da9464a | ||
| 
						 | 
					e550df675a | ||
| 
						 | 
					f614fe4946 | ||
| 
						 | 
					e6ad066ed1 | ||
| 
						 | 
					5b358603bd | ||
| 
						 | 
					3910a61b61 | ||
| 
						 | 
					45d9772667 | ||
| 
						 | 
					268eebca01 | ||
| 
						 | 
					1056dc9a26 | ||
| 
						 | 
					053654dc4d | ||
| 
						 | 
					7fe89c5d29 | ||
| 
						 | 
					5c8fc7dce9 | ||
| 
						 | 
					e8d3710aff | ||
| 
						 | 
					d0fe681a28 | ||
| 
						 | 
					9a70a6d0c0 | ||
| 
						 | 
					ee19b44fe0 | ||
| 
						 | 
					8f0bef2fa0 | ||
| 
						 | 
					33ddeb6dcc | ||
| 
						 | 
					e0dc7d6fc8 | ||
| 
						 | 
					8f5909b664 | ||
| 
						 | 
					bef2e7f2ff | ||
| 
						 | 
					8cfb0e26bb | ||
| 
						 | 
					0164f0cf81 | ||
| 
						 | 
					420ea83ef3 | ||
| 
						 | 
					223e470e93 | ||
| 
						 | 
					e7387f7557 | ||
| 
						 | 
					582bad89ef | ||
| 
						 | 
					92433e596b | ||
| 
						 | 
					5360f88393 | ||
| 
						 | 
					949073d448 | ||
| 
						 | 
					85877dae9a | ||
| 
						 | 
					c6ef31955a | ||
| 
						 | 
					92aaff009d | ||
| 
						 | 
					65ba6e3337 | ||
| 
						 | 
					fbb5518ab6 | ||
| 
						 | 
					a83b5d1b67 | ||
| 
						 | 
					add90abfa4 | ||
| 
						 | 
					a005243908 | ||
| 
						 | 
					001a2d9b67 | ||
| 
						 | 
					95446f694b | ||
| 
						 | 
					4db954f802 | ||
| 
						 | 
					a171f60bf7 | ||
| 
						 | 
					887e8f9265 | ||
| 
						 | 
					07625fe243 | ||
| 
						 | 
					61ffcd7815 | ||
| 
						 | 
					a9f47b9364 | ||
| 
						 | 
					7831c1ae44 | ||
| 
						 | 
					5ce3eb066e | ||
| 
						 | 
					07b6e7363d | ||
| 
						 | 
					2741f97a69 | ||
| 
						 | 
					d7fbe07ee2 | ||
| 
						 | 
					2fce1f3e97 | ||
| 
						 | 
					d09bac137a | ||
| 
						 | 
					43e8f00861 | ||
| 
						 | 
					3337be81c8 | ||
| 
						 | 
					0cc9122093 | ||
| 
						 | 
					54bcde0a14 | ||
| 
						 | 
					660c86ce95 | ||
| 
						 | 
					50b3545ada | ||
| 
						 | 
					baac8065cf | ||
| 
						 | 
					257e38d5c5 | ||
| 
						 | 
					fc70b2f916 | ||
| 
						 | 
					33a8e6c30c | ||
| 
						 | 
					3c875e0112 | ||
| 
						 | 
					59136ece19 | ||
| 
						 | 
					08fd1829e0 | ||
| 
						 | 
					43a4604639 | ||
| 
						 | 
					83f385acf3 | ||
| 
						 | 
					606af3024b | ||
| 
						 | 
					4449bd9b4d | ||
| 
						 | 
					bffa835573 | ||
| 
						 | 
					6dd6b4d1fa | ||
| 
						 | 
					67d94514b0 | ||
| 
						 | 
					91b38857ef | ||
| 
						 | 
					6d5f899761 | ||
| 
						 | 
					77a3e3c7f7 | ||
| 
						 | 
					81249965f7 | ||
| 
						 | 
					45c6db9ac4 | ||
| 
						 | 
					06be8bc389 | ||
| 
						 | 
					0ac5fd354b | ||
| 
						 | 
					a11c8a6ea0 | ||
| 
						 | 
					2858935187 | ||
| 
						 | 
					43b10339ab | ||
| 
						 | 
					3f3a38f9c6 | ||
| 
						 | 
					4bf28cb904 | ||
| 
						 | 
					1abde9009a | ||
| 
						 | 
					db85a941d0 | ||
| 
						 | 
					1bfb0fc5da | ||
| 
						 | 
					ce1cfcb7a6 | ||
| 
						 | 
					ce81cd21d3 | ||
| 
						 | 
					51c6a5d43b | ||
| 
						 | 
					15b8da1980 | ||
| 
						 | 
					c1c257d19a | ||
| 
						 | 
					08b9f73219 | ||
| 
						 | 
					94162d62ac | ||
| 
						 | 
					059707be32 | ||
| 
						 | 
					048bfeaaef | ||
| 
						 | 
					a137109a0c | ||
| 
						 | 
					17c01d21a9 | ||
| 
						 | 
					f5cad68d22 | ||
| 
						 | 
					119364741e | ||
| 
						 | 
					8d1239c091 | ||
| 
						 | 
					30a39fe877 | ||
| 
						 | 
					0489081d3f | ||
| 
						 | 
					19c8da85d8 | ||
| 
						 | 
					b03abddb28 | ||
| 
						 | 
					ccf083e26d | ||
| 
						 | 
					dbd4abf0ff | ||
| 
						 | 
					9ca2644429 | ||
| 
						 | 
					ec08e2f9f2 | ||
| 
						 | 
					38dd0ede9d | ||
| 
						 | 
					62c264bcdb | ||
| 
						 | 
					b108c664ac | ||
| 
						 | 
					64db60397b | ||
| 
						 | 
					d243908a01 | ||
| 
						 | 
					c145fbea49 | ||
| 
						 | 
					84fcff79f4 | ||
| 
						 | 
					f58ba5ab1c | ||
| 
						 | 
					2694b970e8 | ||
| 
						 | 
					23f5d145ec | ||
| 
						 | 
					b01ab65225 | ||
| 
						 | 
					7a7f490efa | ||
| 
						 | 
					95c15fce0c | ||
| 
						 | 
					c788efffd4 | ||
| 
						 | 
					c1a475e708 | ||
| 
						 | 
					d0de9663e2 | ||
| 
						 | 
					d6dd848523 | ||
| 
						 | 
					9fc66e4dd9 | ||
| 
						 | 
					6ecea9453b | ||
| 
						 | 
					2c105af910 | ||
| 
						 | 
					bb667c8ac6 | ||
| 
						 | 
					8179743cee | ||
| 
						 | 
					3d59a3855a | ||
| 
						 | 
					8388366849 | ||
| 
						 | 
					ef3b425b11 | ||
| 
						 | 
					026d93b4f6 | ||
| 
						 | 
					36710c4586 | ||
| 
						 | 
					63ac6156aa | ||
| 
						 | 
					08a70d117c | ||
| 
						 | 
					6ce589c3ee | ||
| 
						 | 
					d426c20c0a | ||
| 
						 | 
					54ca7d8cb2 | ||
| 
						 | 
					0819c3a8cf | ||
| 
						 | 
					ad05b22de3 | ||
| 
						 | 
					9fc8800b6d | ||
| 
						 | 
					a4d6611d26 | ||
| 
						 | 
					015fc6aa17 | ||
| 
						 | 
					a739b9bc45 | ||
| 
						 | 
					0bd2d54814 | ||
| 
						 | 
					16b95fc773 | ||
| 
						 | 
					9c5cd6c413 | ||
| 
						 | 
					9b55056423 | ||
| 
						 | 
					fd4cf78f36 | ||
| 
						 | 
					a6315359d7 | ||
| 
						 | 
					966130132f | ||
| 
						 | 
					a19de6e9ac | ||
| 
						 | 
					bdfeaa0f95 | ||
| 
						 | 
					c478200766 | ||
| 
						 | 
					775f86cb5a | ||
| 
						 | 
					db1c92ceac | ||
| 
						 | 
					0f4664d27f | ||
| 
						 | 
					0f89a2e639 | ||
| 
						 | 
					05b26e7566 | ||
| 
						 | 
					6c511abf43 | ||
| 
						 | 
					bb6d0771c2 | ||
| 
						 | 
					75f6c36e51 | ||
| 
						 | 
					015d5869d7 | ||
| 
						 | 
					4686adb433 | ||
| 
						 | 
					785a4899f5 | ||
| 
						 | 
					da62aff6bb | ||
| 
						 | 
					322308e298 | ||
| 
						 | 
					b53e326828 | ||
| 
						 | 
					0885d787ab | ||
| 
						 | 
					2620d78e94 | ||
| 
						 | 
					8c3f40ee32 | ||
| 
						 | 
					b1aafbd957 | ||
| 
						 | 
					45fd6685bd | ||
| 
						 | 
					0159636373 | ||
| 
						 | 
					7ac7c119be | ||
| 
						 | 
					4f067b1d1c | ||
| 
						 | 
					ae60745e3e | ||
| 
						 | 
					7f496d8c3f | ||
| 
						 | 
					048c74f2fa | ||
| 
						 | 
					0ed57d370d | ||
| 
						 | 
					551abba277 | ||
| 
						 | 
					9b11a84e74 | ||
| 
						 | 
					26f8de459a | ||
| 
						 | 
					ceff98fd49 | ||
| 
						 | 
					e04151ed76 | ||
| 
						 | 
					cdb2552424 | ||
| 
						 | 
					b41e65a8e3 | ||
| 
						 | 
					be8c219ec2 | ||
| 
						 | 
					099c011059 | ||
| 
						 | 
					245a780711 | ||
| 
						 | 
					05e4a3026d | ||
| 
						 | 
					39a416f12a | ||
| 
						 | 
					9b23b31071 | ||
| 
						 | 
					8412d1e493 | ||
| 
						 | 
					2ee41a5ffc | ||
| 
						 | 
					a18f599482 | ||
| 
						 | 
					6d27647b61 | ||
| 
						 | 
					3bc11344de | ||
| 
						 | 
					3dbe708308 | ||
| 
						 | 
					621709c623 | ||
| 
						 | 
					9e241864e3 | ||
| 
						 | 
					cf613fdba4 | ||
| 
						 | 
					e6addcf624 | ||
| 
						 | 
					9e88343a17 | ||
| 
						 | 
					1ce732e9d6 | ||
| 
						 | 
					cc618e761c | ||
| 
						 | 
					24db40de7c | ||
| 
						 | 
					7350f9851a | ||
| 
						 | 
					d030dfa6e2 | ||
| 
						 | 
					14d6db0873 | ||
| 
						 | 
					0ff311aa1a | ||
| 
						 | 
					8147c3659d | ||
| 
						 | 
					73e91ce20c | ||
| 
						 | 
					8780ff879c | ||
| 
						 | 
					6fd1cfeab1 | ||
| 
						 | 
					9d0533056c | ||
| 
						 | 
					6c4f317f7f | ||
| 
						 | 
					21ed69b51e | ||
| 
						 | 
					3b819b3064 | ||
| 
						 | 
					3fa60164af | ||
| 
						 | 
					ac6e0501c6 | ||
| 
						 | 
					4f17c58315 | ||
| 
						 | 
					f6251734fc | ||
| 
						 | 
					9f44a95522 | ||
| 
						 | 
					4b60c3e9d3 | ||
| 
						 | 
					5d4c981e13 | ||
| 
						 | 
					da4a776758 | ||
| 
						 | 
					1b66c1da6c | ||
| 
						 | 
					5cb2ee878c | ||
| 
						 | 
					8cf0814a14 | ||
| 
						 | 
					523767660c | ||
| 
						 | 
					327c0d6b1c | ||
| 
						 | 
					870842ccee | ||
| 
						 | 
					68b215157f | ||
| 
						 | 
					a892cf2c12 | ||
| 
						 | 
					7cba40b218 | ||
| 
						 | 
					d994fcf2b1 | ||
| 
						 | 
					975fafdc49 | ||
| 
						 | 
					9537580ba2 | ||
| 
						 | 
					bc0adcef1f | ||
| 
						 | 
					7ffae92daf | ||
| 
						 | 
					abca03cf36 | ||
| 
						 | 
					374f0214b6 | ||
| 
						 | 
					4945b2454d | ||
| 
						 | 
					a5cb022407 | ||
| 
						 | 
					feb63efc31 | ||
| 
						 | 
					4cf3ad07e5 | ||
| 
						 | 
					557cc55f6f | ||
| 
						 | 
					2d8dba388b | ||
| 
						 | 
					91fd2c3bcd | ||
| 
						 | 
					d38891c950 | ||
| 
						 | 
					381e372939 | ||
| 
						 | 
					c347db2e0a | ||
| 
						 | 
					232a4553b8 | ||
| 
						 | 
					014f1bea9a | ||
| 
						 | 
					5b4f50857a | ||
| 
						 | 
					6f10a718e4 | ||
| 
						 | 
					658de40930 | ||
| 
						 | 
					2c06e7f8ef | ||
| 
						 | 
					fa1c916943 | ||
| 
						 | 
					b132e865b9 | ||
| 
						 | 
					77431568d2 | ||
| 
						 | 
					e16c1b8e28 | ||
| 
						 | 
					1a8d8aa227 | ||
| 
						 | 
					d4c4fd6272 | ||
| 
						 | 
					acb905231d | ||
| 
						 | 
					c915eac93c | ||
| 
						 | 
					72e675caee | ||
| 
						 | 
					e347cff0e4 | ||
| 
						 | 
					d79fdbc46e | ||
| 
						 | 
					ab13c2f814 | ||
| 
						 | 
					138ca334f9 | ||
| 
						 | 
					1aa82decea | ||
| 
						 | 
					014fe6971e | ||
| 
						 | 
					3217809294 | ||
| 
						 | 
					f3c7adcb54 | ||
| 
						 | 
					dcf698dc74 | ||
| 
						 | 
					54117be639 | ||
| 
						 | 
					5a79532aee | ||
| 
						 | 
					29ac001aa6 | ||
| 
						 | 
					ccba0d10b6 | ||
| 
						 | 
					7f7e42732d | ||
| 
						 | 
					ca410ec2ca | ||
| 
						 | 
					e5d8693865 | ||
| 
						 | 
					46c92c0b80 | ||
| 
						 | 
					7b5d148b1f | ||
| 
						 | 
					f4bc326670 | ||
| 
						 | 
					327598e7b4 | ||
| 
						 | 
					11caaad5f9 | ||
| 
						 | 
					3e0845e182 | ||
| 
						 | 
					a2c7abea6c | ||
| 
						 | 
					2f8f12e82e | ||
| 
						 | 
					5cdcc2b3aa | ||
| 
						 | 
					652e2cf57c | ||
| 
						 | 
					8ee5e95ab1 | ||
| 
						 | 
					22c61d8da6 | ||
| 
						 | 
					1b88990cbb | ||
| 
						 | 
					df3e8e19c1 | ||
| 
						 | 
					44dc36cc8f | ||
| 
						 | 
					6d3701318d | ||
| 
						 | 
					d0edb47896 | ||
| 
						 | 
					b238e0b1b4 | ||
| 
						 | 
					3f62bfb61d | ||
| 
						 | 
					c7a66d5af4 | ||
| 
						 | 
					1866b95b7f | ||
| 
						 | 
					668c204970 | ||
| 
						 | 
					af2d899d6b | ||
| 
						 | 
					d5ed9f787f | ||
| 
						 | 
					259f27b09f | ||
| 
						 | 
					c1b9356081 | ||
| 
						 | 
					c669e1ae45 | ||
| 
						 | 
					10203cada9 | ||
| 
						 | 
					58b0415d36 | ||
| 
						 | 
					ad9cb40b6f | ||
| 
						 | 
					2e60ca382d | ||
| 
						 | 
					25920f4a14 | ||
| 
						 | 
					160c302933 | ||
| 
						 | 
					dddc8e3374 | ||
| 
						 | 
					bccb1ee7cd | ||
| 
						 | 
					26af759732 | ||
| 
						 | 
					87fc4ad919 | ||
| 
						 | 
					b214298960 | ||
| 
						 | 
					1926f4573d | ||
| 
						 | 
					7fe65aaf5b | ||
| 
						 | 
					0d3d84e3ff | ||
| 
						 | 
					e789a3802c | ||
| 
						 | 
					4aabbc5ac2 | ||
| 
						 | 
					e7a50e37d6 | ||
| 
						 | 
					9fa05db83b | ||
| 
						 | 
					7ed58c4636 | ||
| 
						 | 
					f2f7c18245 | ||
| 
						 | 
					efaab37698 | ||
| 
						 | 
					869319ce4a | ||
| 
						 | 
					252f16db02 | ||
| 
						 | 
					72f5d6ba46 | ||
| 
						 | 
					5ec786b02e | ||
| 
						 | 
					035ee257c8 | ||
| 
						 | 
					188b08ca55 | ||
| 
						 | 
					6f750f3b57 | ||
| 
						 | 
					5a6dcdc36c | ||
| 
						 | 
					59c16a570f | ||
| 
						 | 
					50c10aa5bf | ||
| 
						 | 
					006878686c | ||
| 
						 | 
					bd100b2a51 | ||
| 
						 | 
					5b1bbffdff | ||
| 
						 | 
					16710a1c9b | ||
| 
						 | 
					ba5c71b79b | ||
| 
						 | 
					f3799462c2 | ||
| 
						 | 
					f01c6e51f4 | ||
| 
						 | 
					21d62118dc | ||
| 
						 | 
					de55038e33 | ||
| 
						 | 
					ea908c23ae | ||
| 
						 | 
					844cbc701a | ||
| 
						 | 
					f1fa7b8ba4 | ||
| 
						 | 
					86ff3194fa | ||
| 
						 | 
					d460b601f9 | ||
| 
						 | 
					48a06d1a7b | ||
| 
						 | 
					813a1107f4 | ||
| 
						 | 
					b3461bab1d | ||
| 
						 | 
					5ecd56d964 | ||
| 
						 | 
					cc44fb1dc8 | ||
| 
						 | 
					77b0efdbc2 | ||
| 
						 | 
					68653bcbdd | ||
| 
						 | 
					9af807a5ce | ||
| 
						 | 
					4bbcc47f3f | ||
| 
						 | 
					8ab495a088 | ||
| 
						 | 
					84e7bb85b1 | ||
| 
						 | 
					4fc7e13a98 | ||
| 
						 | 
					b465750041 | ||
| 
						 | 
					37dc0fa519 | ||
| 
						 | 
					000fdc6b99 | ||
| 
						 | 
					594fc0411e | ||
| 
						 | 
					94fcb4b09d | ||
| 
						 | 
					1a0034ac34 | ||
| 
						 | 
					e3377e637a | ||
| 
						 | 
					2ab854cafd | ||
| 
						 | 
					4a2f0fb2be | ||
| 
						 | 
					dca3564cfb | ||
| 
						 | 
					9d183bb7b1 | ||
| 
						 | 
					c7db74fe73 | ||
| 
						 | 
					5251c45187 | ||
| 
						 | 
					d9b5f327bf | ||
| 
						 | 
					ca1356702a | ||
| 
						 | 
					89d119646d | ||
| 
						 | 
					989dd9c34a | ||
| 
						 | 
					1d728aae2a | ||
| 
						 | 
					98b9349be7 | ||
| 
						 | 
					4706a93341 | ||
| 
						 | 
					b85b56a73d | ||
| 
						 | 
					1da3d402f6 | ||
| 
						 | 
					1da3192d2d | ||
| 
						 | 
					dab569d76c | ||
| 
						 | 
					598c589359 | ||
| 
						 | 
					15c8219340 | ||
| 
						 | 
					5ae21ebde9 | ||
| 
						 | 
					c7e0d8c30b | ||
| 
						 | 
					fee4f8c86d | ||
| 
						 | 
					1261c3feba | ||
| 
						 | 
					7fc300d5dc | ||
| 
						 | 
					88ce03e945 | ||
| 
						 | 
					5bed99c97d | ||
| 
						 | 
					46c699c483 | ||
| 
						 | 
					f7d6e147f1 | ||
| 
						 | 
					aad1d3ce14 | ||
| 
						 | 
					cf5378b366 | ||
| 
						 | 
					fea938cbcb | ||
| 
						 | 
					a67c8b4698 | ||
| 
						 | 
					49ce3e5160 | ||
| 
						 | 
					4a728747e6 | ||
| 
						 | 
					f5a6355172 | ||
| 
						 | 
					ffff8ddbef | ||
| 
						 | 
					cf86f8cb78 | ||
| 
						 | 
					a53ba060c8 | ||
| 
						 | 
					72bb5854f7 | ||
| 
						 | 
					0de56e5535 | ||
| 
						 | 
					0878b14f79 | ||
| 
						 | 
					7d56f35388 | ||
| 
						 | 
					d12759c73e | ||
| 
						 | 
					c0095d6dd9 | ||
| 
						 | 
					6a88eab067 | ||
| 
						 | 
					a4f36558fc | ||
| 
						 | 
					5e1cd407a3 | ||
| 
						 | 
					2a1345ae9f | ||
| 
						 | 
					cf61c8d659 | ||
| 
						 | 
					c39690486c | ||
| 
						 | 
					814b471d55 | ||
| 
						 | 
					5119fb16d6 | ||
| 
						 | 
					dc2c70be07 | ||
| 
						 | 
					19631f5d5f | ||
| 
						 | 
					a8d6b40736 | ||
| 
						 | 
					8026d94c07 | ||
| 
						 | 
					93bd512357 | ||
| 
						 | 
					04d3a8c714 | ||
| 
						 | 
					4b1782c371 | ||
| 
						 | 
					f84642197f | ||
| 
						 | 
					ec1b7a0eea | ||
| 
						 | 
					4b0e48cb4e | ||
| 
						 | 
					41df67fc2c | ||
| 
						 | 
					932d38323f | ||
| 
						 | 
					74ad8516d7 | ||
| 
						 | 
					ed4a16dbd1 | ||
| 
						 | 
					e2bac4fe6f | ||
| 
						 | 
					836ffbfc22 | ||
| 
						 | 
					7fd4f82a45 | ||
| 
						 | 
					598bc3968e | ||
| 
						 | 
					29357151af | ||
| 
						 | 
					6606ae6fe0 | ||
| 
						 | 
					9f21f74fbd | ||
| 
						 | 
					3760180320 | ||
| 
						 | 
					056af4c9ac | ||
| 
						 | 
					07bf3c86b6 | ||
| 
						 | 
					4182803bc2 | ||
| 
						 | 
					7509ef6b4e | ||
| 
						 | 
					70f8068d4d | ||
| 
						 | 
					a7513a8521 | ||
| 
						 | 
					3f7e541415 | ||
| 
						 | 
					f7e9a21c53 | ||
| 
						 | 
					f1537d45ca | ||
| 
						 | 
					5a051617f3 | ||
| 
						 | 
					55cd28283c | ||
| 
						 | 
					924665c84c | ||
| 
						 | 
					fcfffbe2f2 | ||
| 
						 | 
					54967d2a3a | ||
| 
						 | 
					667fd9a60b | ||
| 
						 | 
					892a24f4c4 | ||
| 
						 | 
					f7676e9667 | ||
| 
						 | 
					8727803cf8 | ||
| 
						 | 
					73e13ef19d | ||
| 
						 | 
					e983cd5cd3 | ||
| 
						 | 
					ca3e5a6322 | ||
| 
						 | 
					c4931601c6 | ||
| 
						 | 
					857492ac9e | ||
| 
						 | 
					afdfa4bed2 | ||
| 
						 | 
					3fc6faf1ae | ||
| 
						 | 
					c8a47bf662 | ||
| 
						 | 
					aed0cc6f2a | ||
| 
						 | 
					d500c468fc | ||
| 
						 | 
					5df5a2aa54 | ||
| 
						 | 
					9ca688c8e7 | ||
| 
						 | 
					8edbe262d9 | ||
| 
						 | 
					4cd7f85410 | ||
| 
						 | 
					edd35cab5c | ||
| 
						 | 
					a2060effed | ||
| 
						 | 
					33b9daaa4c | ||
| 
						 | 
					62f0f5571d | ||
| 
						 | 
					7a360de49d | ||
| 
						 | 
					1be4557694 | ||
| 
						 | 
					6a21738704 | ||
| 
						 | 
					974fa1242a | ||
| 
						 | 
					3dff58b3aa | ||
| 
						 | 
					abf8589f0d | ||
| 
						 | 
					b8d006b9d7 | ||
| 
						 | 
					af4edf10f5 | ||
| 
						 | 
					0f9e209534 | ||
| 
						 | 
					2aed8946b0 | ||
| 
						 | 
					03b03f7b60 | ||
| 
						 | 
					a1b650ad7b | ||
| 
						 | 
					d978f85d55 | ||
| 
						 | 
					6e7f47da5b | ||
| 
						 | 
					277bab0c7b | ||
| 
						 | 
					fc3c5dae87 | ||
| 
						 | 
					891dffb528 | ||
| 
						 | 
					f0b361ecc1 | ||
| 
						 | 
					df7eed16dd | ||
| 
						 | 
					61db4f3e2a | ||
| 
						 | 
					fe85ae15f3 | ||
| 
						 | 
					cc26cc5dcd | ||
| 
						 | 
					eb965e2a13 | ||
| 
						 | 
					4e35395d0e | ||
| 
						 | 
					b61b420cb8 | ||
| 
						 | 
					b0aa11fde7 | ||
| 
						 | 
					b691102ec7 | ||
| 
						 | 
					2785fe7f61 | ||
| 
						 | 
					db5d4bd811 | ||
| 
						 | 
					dc3b3c6916 | ||
| 
						 | 
					82d3f97659 | ||
| 
						 | 
					235632ed2c | ||
| 
						 | 
					68330c86e7 | ||
| 
						 | 
					f37dc9168a | ||
| 
						 | 
					17798ed740 | ||
| 
						 | 
					05ba9f9fcd | ||
| 
						 | 
					96f4af4db9 | ||
| 
						 | 
					3ec7f8a25a | ||
| 
						 | 
					375cdf89ad | ||
| 
						 | 
					ab7e7144ef | ||
| 
						 | 
					6f59e19b91 | ||
| 
						 | 
					7800b56dc8 | ||
| 
						 | 
					73c13220ee | ||
| 
						 | 
					99e0597c7b | ||
| 
						 | 
					3247ac1918 | ||
| 
						 | 
					c45d44fee9 | ||
| 
						 | 
					1e718a515a | ||
| 
						 | 
					d23d686de2 | ||
| 
						 | 
					c8677e9d3f | ||
| 
						 | 
					a32eaffa77 | ||
| 
						 | 
					1dcb99f0f7 | ||
| 
						 | 
					03bc2d34da | ||
| 
						 | 
					477e27f99d | ||
| 
						 | 
					6a84d492f1 | ||
| 
						 | 
					873d95a34c | ||
| 
						 | 
					1500e95839 | ||
| 
						 | 
					4f8ebd1673 | ||
| 
						 | 
					cd4e6fbcac | ||
| 
						 | 
					2fd2ca9dac | ||
| 
						 | 
					82d6240e7d | ||
| 
						 | 
					ad80490711 | ||
| 
						 | 
					38b490a310 | ||
| 
						 | 
					2ea052336f | ||
| 
						 | 
					3b9eefca89 | ||
| 
						 | 
					073a6cea45 | ||
| 
						 | 
					345ffd1163 | ||
| 
						 | 
					f0ffb35d55 | ||
| 
						 | 
					b4d2fbae6d | ||
| 
						 | 
					42a2138d11 | ||
| 
						 | 
					e86dfd9688 | ||
| 
						 | 
					a466b31574 | ||
| 
						 | 
					48064f8dee | ||
| 
						 | 
					e71378d3c8 | ||
| 
						 | 
					90d40aff72 | ||
| 
						 | 
					30808dca40 | ||
| 
						 | 
					8629620b1c | ||
| 
						 | 
					25d2a27c64 | ||
| 
						 | 
					b084dc8760 | ||
| 
						 | 
					2ae9536d32 | ||
| 
						 | 
					f5713dbb2e | ||
| 
						 | 
					b10ff9791b | ||
| 
						 | 
					86a25239ec | ||
| 
						 | 
					4c663ba9a8 | ||
| 
						 | 
					713c9f8602 | ||
| 
						 | 
					14b9b823e6 | ||
| 
						 | 
					6a674ded0e | ||
| 
						 | 
					2faba57c85 | ||
| 
						 | 
					79d59ec97b | ||
| 
						 | 
					a49e78d9b7 | ||
| 
						 | 
					9583b51d80 | ||
| 
						 | 
					670273968c | ||
| 
						 | 
					b6820b2674 | ||
| 
						 | 
					b9a6dfab03 | ||
| 
						 | 
					8bd7197a8f | ||
| 
						 | 
					ebb5e1db4b | ||
| 
						 | 
					4702807da8 | ||
| 
						 | 
					fe1fe64fd4 | ||
| 
						 | 
					9d904ee41b | ||
| 
						 | 
					fcc3e2ca34 | ||
| 
						 | 
					c25da51913 | ||
| 
						 | 
					05ab8d291c | ||
| 
						 | 
					70b1900dd1 | ||
| 
						 | 
					380e132da3 | ||
| 
						 | 
					f2eb3c1f79 | ||
| 
						 | 
					96c093f27c | ||
| 
						 | 
					a9d49769ff | ||
| 
						 | 
					d7616d8a0a | ||
| 
						 | 
					826bbfc01c | ||
| 
						 | 
					250f9670b7 | ||
| 
						 | 
					ed4936fd30 | ||
| 
						 | 
					4dd2628093 | ||
| 
						 | 
					8479785620 | ||
| 
						 | 
					0427e94465 | ||
| 
						 | 
					09fd3b4935 | ||
| 
						 | 
					3fef839f75 | ||
| 
						 | 
					ea43bb013b | ||
| 
						 | 
					b0a4c992e7 | ||
| 
						 | 
					85707460e5 | ||
| 
						 | 
					41ba7666f0 | ||
| 
						 | 
					4367e0513a | ||
| 
						 | 
					ed998270aa | ||
| 
						 | 
					1b7f00b2a6 | ||
| 
						 | 
					ad19f95f15 | ||
| 
						 | 
					bcfe3cb231 | ||
| 
						 | 
					805a5dcac8 | ||
| 
						 | 
					0b67ee7bad | ||
| 
						 | 
					9298037639 | ||
| 
						 | 
					f7472075d7 | ||
| 
						 | 
					9f72db13c4 | ||
| 
						 | 
					acc4868b78 | ||
| 
						 | 
					1afb67e31b | ||
| 
						 | 
					2f0539d880 | ||
| 
						 | 
					6f7d0a7cbd | ||
| 
						 | 
					3d513f7ab1 | ||
| 
						 | 
					6c8e6549d0 | ||
| 
						 | 
					eec105daba | ||
| 
						 | 
					19a80add95 | ||
| 
						 | 
					93844f64ef | ||
| 
						 | 
					60588b2455 | ||
| 
						 | 
					5187faeeb9 | ||
| 
						 | 
					1228ec9fbb | ||
| 
						 | 
					717adfeb96 | ||
| 
						 | 
					503557e5ce | ||
| 
						 | 
					f611f42dcf | ||
| 
						 | 
					7a0e0c36c5 | ||
| 
						 | 
					61edee979f | ||
| 
						 | 
					7a343a3f60 | ||
| 
						 | 
					b4d3c4a76c | ||
| 
						 | 
					f213d0db98 | ||
| 
						 | 
					6e835ef3aa | ||
| 
						 | 
					ed8cb57151 | ||
| 
						 | 
					9bdb05b4d6 | ||
| 
						 | 
					94b253fde7 | ||
| 
						 | 
					61d7e720a5 | ||
| 
						 | 
					17507eac85 | ||
| 
						 | 
					bc1ae973da | ||
| 
						 | 
					6a35841b2e | ||
| 
						 | 
					28dde78dde | ||
| 
						 | 
					37171809f6 | ||
| 
						 | 
					3398eca7c3 | ||
| 
						 | 
					3616912d22 | ||
| 
						 | 
					0abccc676d | ||
| 
						 | 
					a93af43974 | ||
| 
						 | 
					0bbc759c0c | ||
| 
						 | 
					56a5c49ac0 | ||
| 
						 | 
					02267eba4c | ||
| 
						 | 
					cea9695bcf | ||
| 
						 | 
					92039629c7 | ||
| 
						 | 
					c8d3327e92 | ||
| 
						 | 
					043070f90e | ||
| 
						 | 
					36626c4b6e | ||
| 
						 | 
					7f33aae067 | ||
| 
						 | 
					61022f3817 | ||
| 
						 | 
					bf648fcfc3 | ||
| 
						 | 
					b0e909329e | ||
| 
						 | 
					ae3d5949b8 | ||
| 
						 | 
					c234b9d04b | ||
| 
						 | 
					7a86740afd | ||
| 
						 | 
					8e719e3ef5 | ||
| 
						 | 
					66fc5498d2 | ||
| 
						 | 
					f30ae93a1f | ||
| 
						 | 
					365e8eb78e | ||
| 
						 | 
					76627b322e | ||
| 
						 | 
					827228bd69 | ||
| 
						 | 
					69c5506b69 | ||
| 
						 | 
					3a2e623fc8 | ||
| 
						 | 
					8aa9f01ed8 | ||
| 
						 | 
					b0b6a853f6 | ||
| 
						 | 
					0563a7a923 | ||
| 
						 | 
					945ba7cb7e | ||
| 
						 | 
					e3dab1bea2 | ||
| 
						 | 
					9c369c695d | ||
| 
						 | 
					011ccbc31a | ||
| 
						 | 
					f1596698ae | ||
| 
						 | 
					c60b52ab43 | ||
| 
						 | 
					71a0d50f48 | ||
| 
						 | 
					8d2a0fe85b | ||
| 
						 | 
					b039d883e5 | ||
| 
						 | 
					b3401ddbad | ||
| 
						 | 
					038fe54e21 | ||
| 
						 | 
					4b5a65455e | ||
| 
						 | 
					2566a5d4da | ||
| 
						 | 
					c38c339480 | ||
| 
						 | 
					ea74b4b8e1 | ||
| 
						 | 
					2364066be0 | ||
| 
						 | 
					b36376e12d | ||
| 
						 | 
					8aae15b630 | ||
| 
						 | 
					88bf2a2dc7 | ||
| 
						 | 
					45847c5324 | ||
| 
						 | 
					70cce4cddd | ||
| 
						 | 
					42c0ac2008 | ||
| 
						 | 
					70ddabbfb0 | ||
| 
						 | 
					e3716938bd | ||
| 
						 | 
					b122959c8b | ||
| 
						 | 
					84c5e846b3 | ||
| 
						 | 
					47f044265e | ||
| 
						 | 
					d46d995766 | ||
| 
						 | 
					1a0cc60741 | ||
| 
						 | 
					7cbbd1b56b | ||
| 
						 | 
					5daa6b9367 | ||
| 
						 | 
					a7aca2e8af | ||
| 
						 | 
					d8d3dc9302 | ||
| 
						 | 
					5be7b543d8 | ||
| 
						 | 
					910ee13b20 | ||
| 
						 | 
					35935d71d2 | ||
| 
						 | 
					de17f4436e | ||
| 
						 | 
					be5ade5c7a | ||
| 
						 | 
					0e05a6329a | ||
| 
						 | 
					c518c52aba | ||
| 
						 | 
					e4c28abdc1 | ||
| 
						 | 
					a11374d994 | ||
| 
						 | 
					d9e89e170f | ||
| 
						 | 
					47594be5c0 | ||
| 
						 | 
					0d635a1119 | ||
| 
						 | 
					e9ffa9a3b8 | ||
| 
						 | 
					248a5381d4 | ||
| 
						 | 
					c1ab3e2d59 | ||
| 
						 | 
					c895dc8a19 | ||
| 
						 | 
					a0a79ce853 | ||
| 
						 | 
					70f9a13ecb | ||
| 
						 | 
					c321b9f704 | ||
| 
						 | 
					7e74349b86 | ||
| 
						 | 
					fd016fb3ee | ||
| 
						 | 
					09dd2d3856 | ||
| 
						 | 
					5625e5d5b8 | ||
| 
						 | 
					8a529bd987 | ||
| 
						 | 
					8fe9376d54 | ||
| 
						 | 
					a1f72943e9 | ||
| 
						 | 
					0969a96732 | ||
| 
						 | 
					ec8019b2a8 | ||
| 
						 | 
					27d2d78059 | ||
| 
						 | 
					7d48d851a2 | ||
| 
						 | 
					6a2cecf153 | ||
| 
						 | 
					990b15e402 | ||
| 
						 | 
					584f3639e3 | ||
| 
						 | 
					2886ce96b0 | ||
| 
						 | 
					3344142b87 | ||
| 
						 | 
					f1b4f5e2ae | ||
| 
						 | 
					bcf0af9ddb | ||
| 
						 | 
					70550a0572 | ||
| 
						 | 
					d7088d1032 | ||
| 
						 | 
					d07a874899 | ||
| 
						 | 
					c420113795 | ||
| 
						 | 
					5c850b825b | ||
| 
						 | 
					7bbad0b534 | ||
| 
						 | 
					305e03905f | ||
| 
						 | 
					161be66c89 | ||
| 
						 | 
					4095c9de37 | ||
| 
						 | 
					20d33ad7e5 | ||
| 
						 | 
					b8c12fe658 | ||
| 
						 | 
					e4d4ee8db5 | ||
| 
						 | 
					8a7d58378b | ||
| 
						 | 
					bdbaedc452 | ||
| 
						 | 
					0839621f47 | ||
| 
						 | 
					bf2c1e099c | ||
| 
						 | 
					6c6e4710b5 | ||
| 
						 | 
					5e7164f87a | ||
| 
						 | 
					ef10eaeb29 | ||
| 
						 | 
					fce4dcccd8 | ||
| 
						 | 
					f2beee209b | ||
| 
						 | 
					9d8b22d3de | ||
| 
						 | 
					5796c7b132 | ||
| 
						 | 
					dc2ea33e32 | ||
| 
						 | 
					c1f117700a | ||
| 
						 | 
					7ea90c46eb | ||
| 
						 | 
					4d9e24d1e4 | ||
| 
						 | 
					1f236ba108 | ||
| 
						 | 
					d27813c2dd | ||
| 
						 | 
					453e9b0dce | ||
| 
						 | 
					b8626c3df8 | ||
| 
						 | 
					f8d78d57a7 | ||
| 
						 | 
					371a25eee9 | ||
| 
						 | 
					e535a71c71 | ||
| 
						 | 
					b9e5fecf5f | ||
| 
						 | 
					3af08472ad | ||
| 
						 | 
					fdc1b61507 | ||
| 
						 | 
					7fd154f094 | ||
| 
						 | 
					a209c32bf3 | ||
| 
						 | 
					75db459f0a | ||
| 
						 | 
					74e54c5a49 | ||
| 
						 | 
					6fc151577e | ||
| 
						 | 
					3dcc7202d5 | ||
| 
						 | 
					40981286ea | ||
| 
						 | 
					f55a1c3a6c | ||
| 
						 | 
					c5586a65c2 | ||
| 
						 | 
					ffb11ad5c6 | ||
| 
						 | 
					fbb1e49215 | ||
| 
						 | 
					c26320d94f | ||
| 
						 | 
					f6e892b1b6 | ||
| 
						 | 
					59302d4ba0 | ||
| 
						 | 
					c563a53c16 | ||
| 
						 | 
					7763bb9172 | ||
| 
						 | 
					e37a49086e | ||
| 
						 | 
					a1e5c621c0 | ||
| 
						 | 
					f776c1d2eb | ||
| 
						 | 
					3d5a8515a6 | ||
| 
						 | 
					42a7905205 | ||
| 
						 | 
					bfa0f8c6c2 | ||
| 
						 | 
					869d192ffc | ||
| 
						 | 
					60bc103a78 | ||
| 
						 | 
					8a0a7ce3a8 | ||
| 
						 | 
					31b1e988f4 | ||
| 
						 | 
					25c064c888 | ||
| 
						 | 
					884171aecf | ||
| 
						 | 
					45b2577974 | ||
| 
						 | 
					d58c7a8bdd | ||
| 
						 | 
					eed47311f8 | ||
| 
						 | 
					59eaae42b8 | ||
| 
						 | 
					59c620bfa5 | ||
| 
						 | 
					4294cac701 | ||
| 
						 | 
					282127fbff | ||
| 
						 | 
					d49e9fad19 | ||
| 
						 | 
					fba4cd0e62 | ||
| 
						 | 
					2166645ce4 | ||
| 
						 | 
					844f5b6b45 | ||
| 
						 | 
					424063235b | ||
| 
						 | 
					8272abef28 | ||
| 
						 | 
					5fbc93c3eb | ||
| 
						 | 
					8851df41c5 | ||
| 
						 | 
					a6f4612154 | ||
| 
						 | 
					52e5e869e6 | ||
| 
						 | 
					12ef1035bb | ||
| 
						 | 
					6c56b5301f | ||
| 
						 | 
					07b6625573 | ||
| 
						 | 
					fa0780bb91 | ||
| 
						 | 
					f08ac86834 | ||
| 
						 | 
					d6eca89229 | ||
| 
						 | 
					2bd1d7e996 | ||
| 
						 | 
					3b355421ec | ||
| 
						 | 
					0dd1219668 | ||
| 
						 | 
					b7131009fb | ||
| 
						 | 
					3d528e1b15 | ||
| 
						 | 
					f9a339a225 | ||
| 
						 | 
					0043e87014 | ||
| 
						 | 
					0f634a0c89 | ||
| 
						 | 
					047cd1a533 | ||
| 
						 | 
					f9eb61e90a | ||
| 
						 | 
					34afb0b257 | ||
| 
						 | 
					6bb9bd8b69 | ||
| 
						 | 
					72175c738f | ||
| 
						 | 
					2288094b26 | ||
| 
						 | 
					273b2b230b | ||
| 
						 | 
					3229a80c9f | ||
| 
						 | 
					5eba84eed3 | ||
| 
						 | 
					4fb483012c | ||
| 
						 | 
					f1a8fd843f | ||
| 
						 | 
					8920606b8b | ||
| 
						 | 
					90ce18019c | ||
| 
						 | 
					fe10cb2ef5 | ||
| 
						 | 
					842be6c52f | ||
| 
						 | 
					e4b754f64e | ||
| 
						 | 
					34ed4642ec | ||
| 
						 | 
					248f057137 | ||
| 
						 | 
					2b6a0c0a7c | ||
| 
						 | 
					072a8b2955 | ||
| 
						 | 
					0c817b6614 | ||
| 
						 | 
					e9cbd0c366 | ||
| 
						 | 
					ff314d7600 | ||
| 
						 | 
					d052e545af | ||
| 
						 | 
					da2b75a026 | ||
| 
						 | 
					0e2d3b7b6c | ||
| 
						 | 
					46a50aa001 | ||
| 
						 | 
					605a391178 | ||
| 
						 | 
					de6f82d094 | ||
| 
						 | 
					c1f3edbdd1 | ||
| 
						 | 
					a20a6f67c5 | ||
| 
						 | 
					75931492c3 | ||
| 
						 | 
					800b55c702 | ||
| 
						 | 
					a53411c0dd | ||
| 
						 | 
					b169aa2992 | ||
| 
						 | 
					9189ac1141 | ||
| 
						 | 
					5c7c79bd08 | ||
| 
						 | 
					8605321d06 | ||
| 
						 | 
					d314453037 | ||
| 
						 | 
					9cb69f77f1 | ||
| 
						 | 
					ee332e0c8e | ||
| 
						 | 
					0188493d54 | ||
| 
						 | 
					ae07fd2ba8 | ||
| 
						 | 
					d76a734043 | ||
| 
						 | 
					b66def2b4c | ||
| 
						 | 
					20b9ab49a7 | ||
| 
						 | 
					c8cd13337e | ||
| 
						 | 
					40e9e40cb4 | ||
| 
						 | 
					09c70dec08 | ||
| 
						 | 
					0dc570862a | ||
| 
						 | 
					dbaf4f9361 | ||
| 
						 | 
					433575068c | ||
| 
						 | 
					40087ce7c0 | ||
| 
						 | 
					e12d46ac50 | ||
| 
						 | 
					1e55ed5c7d | ||
| 
						 | 
					6dd4fe0740 | ||
| 
						 | 
					3789e2e6ce | ||
| 
						 | 
					1962ebf8e7 | ||
| 
						 | 
					7c144d5a7e | ||
| 
						 | 
					0f0540d00b | ||
| 
						 | 
					3f29ed6d44 | ||
| 
						 | 
					1bfa7dfe39 | ||
| 
						 | 
					85daec253c | ||
| 
						 | 
					389a15a867 | ||
| 
						 | 
					74befdfbe0 | ||
| 
						 | 
					d31feb8ff9 | ||
| 
						 | 
					4c3568bfd6 | ||
| 
						 | 
					b4ef5e22e0 | ||
| 
						 | 
					23786eae32 | ||
| 
						 | 
					c84f84c70d | ||
| 
						 | 
					e5f8e5e57a | ||
| 
						 | 
					53a3abc76b | ||
| 
						 | 
					bfd6474f6b | ||
| 
						 | 
					d3b89e114a | ||
| 
						 | 
					aeddea2b71 | ||
| 
						 | 
					cef5b14baa | ||
| 
						 | 
					82d310d0d9 | ||
| 
						 | 
					4fdb42377b | ||
| 
						 | 
					be8a5d0aef | ||
| 
						 | 
					dd433679e6 | ||
| 
						 | 
					99dcd33f04 | ||
| 
						 | 
					e817eb6cec | ||
| 
						 | 
					060f7ca2d2 | ||
| 
						 | 
					638c715a51 | ||
| 
						 | 
					af9a63287e | ||
| 
						 | 
					00f36c5f45 | ||
| 
						 | 
					e69d82a5fb | ||
| 
						 | 
					d165da07fe | ||
| 
						 | 
					15363cd6dc | ||
| 
						 | 
					b3272fd799 | ||
| 
						 | 
					fa31335926 | ||
| 
						 | 
					acc4cf87cd | ||
| 
						 | 
					7444342675 | ||
| 
						 | 
					ee1235a7cd | ||
| 
						 | 
					c514a2a89a | ||
| 
						 | 
					e2f0580dfe | ||
| 
						 | 
					d165bed2d6 | ||
| 
						 | 
					802a5b618e | ||
| 
						 | 
					1ca763d1d1 | ||
| 
						 | 
					8b26c93a59 | ||
| 
						 | 
					b819c72700 | ||
| 
						 | 
					d2cfb7fd13 | ||
| 
						 | 
					e37973913d | ||
| 
						 | 
					8b5295d003 | ||
| 
						 | 
					fe0afb211e | ||
| 
						 | 
					141b3d0c2f | ||
| 
						 | 
					2a6a22a3b0 | ||
| 
						 | 
					4937281ddc | ||
| 
						 | 
					8e27ed2fdd | ||
| 
						 | 
					9bf9617ad6 | ||
| 
						 | 
					69565afab0 | ||
| 
						 | 
					39aac63521 | ||
| 
						 | 
					f19d333ef6 | ||
| 
						 | 
					3a634a273a | ||
| 
						 | 
					06d1b029f6 | ||
| 
						 | 
					45bf417301 | ||
| 
						 | 
					48029d7e74 | ||
| 
						 | 
					83e078256c | ||
| 
						 | 
					2f5e99ca02 | ||
| 
						 | 
					6014c21bc9 | ||
| 
						 | 
					8c0b1dc3c5 | ||
| 
						 | 
					be3c5f0b94 | ||
| 
						 | 
					e268e8559e | ||
| 
						 | 
					29bb6f65f1 | ||
| 
						 | 
					37f07a54bd | ||
| 
						 | 
					da8c666e4f | ||
| 
						 | 
					c11681becd | ||
| 
						 | 
					78a1e5d1a6 | ||
| 
						 | 
					116f60e063 | ||
| 
						 | 
					7725853446 | ||
| 
						 | 
					9993e2121d | ||
| 
						 | 
					9a70ce4245 | ||
| 
						 | 
					7ba53a4f41 | ||
| 
						 | 
					1297c54b26 | ||
| 
						 | 
					1045b8d382 | ||
| 
						 | 
					d2bdad5945 | ||
| 
						 | 
					17e8d60c01 | ||
| 
						 | 
					ec1b351317 | ||
| 
						 | 
					75fca27f8e | ||
| 
						 | 
					f2cd2882a0 | ||
| 
						 | 
					07d8a14ec0 | ||
| 
						 | 
					31e598d2f3 | ||
| 
						 | 
					cbf58d88d0 | ||
| 
						 | 
					300cbc2e21 | ||
| 
						 | 
					ec9e399668 | ||
| 
						 | 
					2691f1efc8 | ||
| 
						 | 
					d9bf55570b | ||
| 
						 | 
					b54a8531a9 | ||
| 
						 | 
					789fd0b74a | ||
| 
						 | 
					8103915797 | ||
| 
						 | 
					c461254dea | ||
| 
						 | 
					3f140a6008 | ||
| 
						 | 
					a0a47f2767 | ||
| 
						 | 
					213017e9cf | ||
| 
						 | 
					69f2f5cb6f | ||
| 
						 | 
					d46cab4a94 | ||
| 
						 | 
					4dc453c087 | ||
| 
						 | 
					a1d5983991 | ||
| 
						 | 
					4894ce16fc | ||
| 
						 | 
					aa4435c23b | ||
| 
						 | 
					dca8f962e0 | ||
| 
						 | 
					059b57677c | ||
| 
						 | 
					9896421586 | ||
| 
						 | 
					6663608d15 | ||
| 
						 | 
					d21e4eb8ae | ||
| 
						 | 
					d381dd68cf | ||
| 
						 | 
					7a97e66fb3 | ||
| 
						 | 
					d86e6d3ed2 | ||
| 
						 | 
					f99ca90540 | ||
| 
						 | 
					e24cb6cb90 | ||
| 
						 | 
					b05f408348 | ||
| 
						 | 
					c5e7d839d5 | ||
| 
						 | 
					e3ade3ccb5 | ||
| 
						 | 
					71afe05b9f | ||
| 
						 | 
					5a267c4312 | ||
| 
						 | 
					fbcf86b83e | ||
| 
						 | 
					5c3f36b4b4 | ||
| 
						 | 
					9de4e5ebe4 | ||
| 
						 | 
					7033a1c072 | ||
| 
						 | 
					4efa0d9f68 | ||
| 
						 | 
					e021fe9444 | ||
| 
						 | 
					23d1041bd8 | ||
| 
						 | 
					be71ccbce3 | ||
| 
						 | 
					0db485a448 | ||
| 
						 | 
					6d05a33ed9 | ||
| 
						 | 
					569c169559 | ||
| 
						 | 
					ecbc7f89c0 | ||
| 
						 | 
					5649b738be | ||
| 
						 | 
					0f9f6cf180 | ||
| 
						 | 
					7f70dbcad5 | ||
| 
						 | 
					28b932fb4e | ||
| 
						 | 
					a631741141 | ||
| 
						 | 
					c7d0966201 | ||
| 
						 | 
					cf491357b6 | ||
| 
						 | 
					02c17651bf | ||
| 
						 | 
					890b34d22e | ||
| 
						 | 
					e89fb10736 | ||
| 
						 | 
					48e8b52fbb | ||
| 
						 | 
					61f19c6ca3 | ||
| 
						 | 
					8c9233f6b2 | ||
| 
						 | 
					6fcf98f617 | ||
| 
						 | 
					2f4fe0175b | ||
| 
						 | 
					9f62ff5df6 | ||
| 
						 | 
					4e3f3e751e | ||
| 
						 | 
					04e6568a7e | ||
| 
						 | 
					7a39b98471 | ||
| 
						 | 
					4ab91a93e8 | ||
| 
						 | 
					6647ca6ec5 | ||
| 
						 | 
					529e01736c | ||
| 
						 | 
					078fc4186b | ||
| 
						 | 
					fabbb3fc34 | ||
| 
						 | 
					1db063e705 | ||
| 
						 | 
					1fa9ef246a | ||
| 
						 | 
					e12220cc4c | ||
| 
						 | 
					77fcad041f | ||
| 
						 | 
					e213555c98 | ||
| 
						 | 
					3a813b3c3b | ||
| 
						 | 
					028a9d6785 | ||
| 
						 | 
					d0aca8017f | ||
| 
						 | 
					91386937ff | ||
| 
						 | 
					0fc51ac5a6 | ||
| 
						 | 
					bc2183b440 | ||
| 
						 | 
					01c4fba15c | ||
| 
						 | 
					9b6474378a | ||
| 
						 | 
					5446ed4733 | ||
| 
						 | 
					a50414f594 | ||
| 
						 | 
					fe7fa8e794 | ||
| 
						 | 
					6a175b42db | ||
| 
						 | 
					a7748c2024 | ||
| 
						 | 
					8f87c15bda | ||
| 
						 | 
					82f52e5a6f | ||
| 
						 | 
					67d2dd62f9 | ||
| 
						 | 
					138b4f27b4 | ||
| 
						 | 
					c26ec47e90 | ||
| 
						 | 
					8337a375dd | ||
| 
						 | 
					8260243be1 | ||
| 
						 | 
					ef6f24a7ce | ||
| 
						 | 
					abe90019d3 | ||
| 
						 | 
					c185cdf2b4 | ||
| 
						 | 
					f71c8c7d84 | ||
| 
						 | 
					d32f1390b3 | ||
| 
						 | 
					68f3c2adca | ||
| 
						 | 
					2a8e2edf83 | ||
| 
						 | 
					401598c2fe | ||
| 
						 | 
					d60848d04b | ||
| 
						 | 
					d2dd3d7e16 | ||
| 
						 | 
					1c63ceb317 | ||
| 
						 | 
					c25283185a | ||
| 
						 | 
					54db98c220 | ||
| 
						 | 
					5565f45f5e | ||
| 
						 | 
					49c4d9c9cd | ||
| 
						 | 
					c2639e0738 | ||
| 
						 | 
					e485a23a3e | ||
| 
						 | 
					d7d5baa0e2 | ||
| 
						 | 
					e1e55e4d04 | ||
| 
						 | 
					1eb530d8dc | ||
| 
						 | 
					bad67830b3 | ||
| 
						 | 
					db22c83031 | ||
| 
						 | 
					a4b39c6ab8 | ||
| 
						 | 
					d10e174fd1 | ||
| 
						 | 
					e994c6af75 | ||
| 
						 | 
					ef442d5803 | ||
| 
						 | 
					8680e010c2 | ||
| 
						 | 
					4d8dcf7b77 | ||
| 
						 | 
					abdbd3100f | ||
| 
						 | 
					ddace02efe | ||
| 
						 | 
					1f4c8c4f09 | ||
| 
						 | 
					8162b32bad | ||
| 
						 | 
					daf527b276 | ||
| 
						 | 
					ee51c07be6 | ||
| 
						 | 
					856ba4c6c6 | ||
| 
						 | 
					b3e23373bd | ||
| 
						 | 
					e5adab39b1 | ||
| 
						 | 
					d31153584e | ||
| 
						 | 
					823d296e12 | ||
| 
						 | 
					e09450103b | ||
| 
						 | 
					fbc4407583 | ||
| 
						 | 
					a79e5d7925 | ||
| 
						 | 
					82491d5c06 | ||
| 
						 | 
					b6f889085d | ||
| 
						 | 
					cdbbb7d900 | ||
| 
						 | 
					2bf4d9a22c | ||
| 
						 | 
					f1918aa343 | ||
| 
						 | 
					56580fc6f8 | ||
| 
						 | 
					2e6600425e | ||
| 
						 | 
					cc021fc200 | ||
| 
						 | 
					e6aed92742 | ||
| 
						 | 
					02fb4d96d1 | ||
| 
						 | 
					43e3c5e5fa | ||
| 
						 | 
					4f496f2f70 | ||
| 
						 | 
					d681bc7520 | ||
| 
						 | 
					f21a2b3270 | ||
| 
						 | 
					5f5a28d20e | ||
| 
						 | 
					89f9cb4041 | ||
| 
						 | 
					2b280bcc69 | ||
| 
						 | 
					1c0224be42 | ||
| 
						 | 
					dbdb7fa55a | ||
| 
						 | 
					83a43bea8a | ||
| 
						 | 
					abb4cdafe9 | ||
| 
						 | 
					2b7bcf2505 | ||
| 
						 | 
					5aefdd93cb | ||
| 
						 | 
					4b27fae069 | ||
| 
						 | 
					10a13eba72 | ||
| 
						 | 
					44ac2776ae | ||
| 
						 | 
					36e3e6ed16 | ||
| 
						 | 
					5f9cbc4209 | ||
| 
						 | 
					3239f059b8 | ||
| 
						 | 
					45bac25d90 | ||
| 
						 | 
					354c8dcd82 | ||
| 
						 | 
					b1e4cc370d | ||
| 
						 | 
					2293474b90 | ||
| 
						 | 
					9e1aef7183 | ||
| 
						 | 
					f68323da7d | ||
| 
						 | 
					a61aafa325 | ||
| 
						 | 
					33bea767eb | ||
| 
						 | 
					9ab7cda010 | ||
| 
						 | 
					6da70628c6 | ||
| 
						 | 
					3bae748256 | ||
| 
						 | 
					521c4b303d | ||
| 
						 | 
					a2effd123a | ||
| 
						 | 
					7b704e173c | ||
| 
						 | 
					6045d051d7 | ||
| 
						 | 
					cfe00ed4ad | ||
| 
						 | 
					0b4bdcf18f | ||
| 
						 | 
					8cade952bf | ||
| 
						 | 
					385e612fa5 | ||
| 
						 | 
					1886388791 | ||
| 
						 | 
					32fe5b14ec | ||
| 
						 | 
					bbdc483671 | ||
| 
						 | 
					f11d3c329c | ||
| 
						 | 
					b0d13fa4cb | ||
| 
						 | 
					0fb5a65a58 | ||
| 
						 | 
					c8afb02b4c | ||
| 
						 | 
					869d65337e | ||
| 
						 | 
					277df1c6b1 | ||
| 
						 | 
					5ec5b95f54 | ||
| 
						 | 
					9e61c904ac | ||
| 
						 | 
					7efb955fd0 | ||
| 
						 | 
					75899741b9 | ||
| 
						 | 
					d465199411 | ||
| 
						 | 
					55123424c8 | ||
| 
						 | 
					f5e4a78b59 | ||
| 
						 | 
					7515a75206 | ||
| 
						 | 
					4750e6f3c5 | ||
| 
						 | 
					b7aaa4d907 | ||
| 
						 | 
					e61e09f658 | ||
| 
						 | 
					058e993acb | ||
| 
						 | 
					359d500908 | ||
| 
						 | 
					cb42855445 | ||
| 
						 | 
					d8ff0336a5 | ||
| 
						 | 
					0682d25da5 | ||
| 
						 | 
					d86d14074d | ||
| 
						 | 
					8500397cf1 | ||
| 
						 | 
					bd600fbebe | ||
| 
						 | 
					064bbb999f | ||
| 
						 | 
					bedc61ac45 | ||
| 
						 | 
					61a6992559 | ||
| 
						 | 
					ebee2e323d | ||
| 
						 | 
					b2f8de571f | ||
| 
						 | 
					cb4a5f5a2b | ||
| 
						 | 
					1beb7de7e0 | ||
| 
						 | 
					89ab5f4380 | ||
| 
						 | 
					439b84c782 | ||
| 
						 | 
					0e899d7728 | ||
| 
						 | 
					1a85fb2bd0 | ||
| 
						 | 
					8d11767048 | ||
| 
						 | 
					fcccf9aa0d | ||
| 
						 | 
					72bd027537 | ||
| 
						 | 
					1d44c9ccc1 | ||
| 
						 | 
					33831759b5 | ||
| 
						 | 
					6fe932b255 | ||
| 
						 | 
					8da02df8e0 | ||
| 
						 | 
					587c99351d | ||
| 
						 | 
					88c8d72a21 | ||
| 
						 | 
					cf99fed17a | ||
| 
						 | 
					ca48b6bf35 | ||
| 
						 | 
					4dcd606b47 | ||
| 
						 | 
					393ddd6e1f | ||
| 
						 | 
					840e796aa9 | ||
| 
						 | 
					5fd096da8d | ||
| 
						 | 
					eb29c5c285 | ||
| 
						 | 
					1eb286e43e | ||
| 
						 | 
					ae76ebe2d1 | ||
| 
						 | 
					e4505aefd9 | ||
| 
						 | 
					d6b0612882 | ||
| 
						 | 
					4c65eb0af8 | ||
| 
						 | 
					318a8258fd | ||
| 
						 | 
					17ae28e0fe | ||
| 
						 | 
					3c4f622479 | ||
| 
						 | 
					3ce43764be | ||
| 
						 | 
					b555c60e49 | ||
| 
						 | 
					2336d010ef | ||
| 
						 | 
					b9af0d89d5 | ||
| 
						 | 
					6f2afe0c30 | ||
| 
						 | 
					d8c61d459e | ||
| 
						 | 
					7ae5ebbeb2 | ||
| 
						 | 
					7335b71dfb | ||
| 
						 | 
					9583b03074 | ||
| 
						 | 
					3c81d5f125 | ||
| 
						 | 
					688699a046 | ||
| 
						 | 
					090f5a9a45 | ||
| 
						 | 
					da58d03ff7 | ||
| 
						 | 
					9ea3831c08 | ||
| 
						 | 
					a46f55b9de | ||
| 
						 | 
					a634f64400 | ||
| 
						 | 
					bcd8a3b240 | ||
| 
						 | 
					04d5d1895c | ||
| 
						 | 
					abd2775a70 | ||
| 
						 | 
					73226415fc | ||
| 
						 | 
					ab160ef445 | ||
| 
						 | 
					268fe09322 | ||
| 
						 | 
					7a557e984a | ||
| 
						 | 
					f1a55cbe6d | ||
| 
						 | 
					1e35d95df8 | ||
| 
						 | 
					d8387b418d | ||
| 
						 | 
					adea16a294 | ||
| 
						 | 
					7f2d5cab2d | ||
| 
						 | 
					c6ff612f6e | ||
| 
						 | 
					8db353e1d7 | ||
| 
						 | 
					e6978117a7 | ||
| 
						 | 
					5dcb055077 | ||
| 
						 | 
					0b5e1a9b2f | ||
| 
						 | 
					2e17a97474 | ||
| 
						 | 
					74ddbd8a3b | ||
| 
						 | 
					b8039a821b | ||
| 
						 | 
					438312f00e | ||
| 
						 | 
					381ccaa391 | ||
| 
						 | 
					3204494883 | ||
| 
						 | 
					e264f699d4 | ||
| 
						 | 
					68d4b77d44 | ||
| 
						 | 
					e1ac99af1f | ||
| 
						 | 
					be0d17e812 | ||
| 
						 | 
					4eb35406f4 | ||
| 
						 | 
					624745ab20 | ||
| 
						 | 
					9354822e09 | ||
| 
						 | 
					17d4f9513e | ||
| 
						 | 
					f830d77307 | ||
| 
						 | 
					a03c76b228 | ||
| 
						 | 
					35ad61429d | ||
| 
						 | 
					b5b3d9e5c7 | ||
| 
						 | 
					6e682c2b01 | ||
| 
						 | 
					7e2ea2ece0 | ||
| 
						 | 
					01926d66d7 | ||
| 
						 | 
					69f7d0a0ce | ||
| 
						 | 
					d1c84705ec | ||
| 
						 | 
					3274908551 | ||
| 
						 | 
					c730934498 | ||
| 
						 | 
					471a8b223b | ||
| 
						 | 
					47ee9202c3 | ||
| 
						 | 
					1bcbe89802 | ||
| 
						 | 
					bf57e9bb12 | ||
| 
						 | 
					318a7584f3 | ||
| 
						 | 
					961ec228d4 | ||
| 
						 | 
					a777eb3d81 | ||
| 
						 | 
					7f79b52dae | ||
| 
						 | 
					db680edc26 | ||
| 
						 | 
					e6ce80458f | ||
| 
						 | 
					cdcb123aa8 | ||
| 
						 | 
					78081a1652 | ||
| 
						 | 
					7408976b15 | ||
| 
						 | 
					763bb73cc3 | ||
| 
						 | 
					1dee2cd55e | ||
| 
						 | 
					426ecfd136 | ||
| 
						 | 
					4913baed16 | ||
| 
						 | 
					675f6a8901 | ||
| 
						 | 
					2147284cad | ||
| 
						 | 
					7f1870da5f | ||
| 
						 | 
					2149a095f7 | ||
| 
						 | 
					e8d21adbaa | ||
| 
						 | 
					fa28531322 | ||
| 
						 | 
					deef85ca9a | ||
| 
						 | 
					4f4427ff41 | ||
| 
						 | 
					0ed285e84d | ||
| 
						 | 
					905ca77c9e | ||
| 
						 | 
					61043c7e74 | ||
| 
						 | 
					4545c9f22f | ||
| 
						 | 
					ad772d7b48 | ||
| 
						 | 
					a56ef92729 | ||
| 
						 | 
					561d01c450 | ||
| 
						 | 
					c6c8a30da1 | ||
| 
						 | 
					914dbeb12c | ||
| 
						 | 
					56dc90eaab | ||
| 
						 | 
					f51c567de3 | ||
| 
						 | 
					9b2acca63e | ||
| 
						 | 
					afcd9f1b1c | ||
| 
						 | 
					755ccbc468 | ||
| 
						 | 
					0af7aec211 | ||
| 
						 | 
					ee085ad6bd | ||
| 
						 | 
					719bec2606 | ||
| 
						 | 
					b1db9dbb16 | ||
| 
						 | 
					609044aea2 | ||
| 
						 | 
					ba481718a4 | ||
| 
						 | 
					1be60dde7f | ||
| 
						 | 
					e92e811a61 | ||
| 
						 | 
					5aa0db8681 | ||
| 
						 | 
					d5691211dd | ||
| 
						 | 
					a93695a70e | ||
| 
						 | 
					ce935a2697 | ||
| 
						 | 
					812ce0d93f | ||
| 
						 | 
					bbae5b49f9 | ||
| 
						 | 
					772a985dc3 | ||
| 
						 | 
					8a7514de8a | ||
| 
						 | 
					32ad212ac9 | ||
| 
						 | 
					8a8d5c784c | ||
| 
						 | 
					125830ab4b | ||
| 
						 | 
					5b75b423e6 | ||
| 
						 | 
					012d7e2878 | ||
| 
						 | 
					cd3029f36f | ||
| 
						 | 
					6adaac7e18 | ||
| 
						 | 
					cde5e35d9b | ||
| 
						 | 
					ee17fba72e | ||
| 
						 | 
					6296b89319 | ||
| 
						 | 
					5450db9151 | ||
| 
						 | 
					b4700f026b | ||
| 
						 | 
					d771fa7c48 | ||
| 
						 | 
					b2c378267b | ||
| 
						 | 
					384c8f3560 | ||
| 
						 | 
					f44ef427a2 | ||
| 
						 | 
					c54a4301ee | ||
| 
						 | 
					36a3514225 | ||
| 
						 | 
					e1edd41e1b | ||
| 
						 | 
					13e60c55a1 | ||
| 
						 | 
					9b8b1a68f0 | ||
| 
						 | 
					4ec9316155 | ||
| 
						 | 
					ef769500d4 | ||
| 
						 | 
					23692574a2 | ||
| 
						 | 
					5f6fd682a5 | ||
| 
						 | 
					db24518a30 | ||
| 
						 | 
					90933ac660 | ||
| 
						 | 
					087579a6f4 | ||
| 
						 | 
					de59cde155 | ||
| 
						 | 
					3cd95eacdf | ||
| 
						 | 
					deb81b2ad4 | ||
| 
						 | 
					4e717cdb30 | ||
| 
						 | 
					33acd6f041 | ||
| 
						 | 
					7575e6afc4 | ||
| 
						 | 
					316a9f6480 | ||
| 
						 | 
					c6de584cad | ||
| 
						 | 
					d997ff6aa8 | ||
| 
						 | 
					b9ccecf86e | ||
| 
						 | 
					bd5d21aaf2 | ||
| 
						 | 
					19e07771d1 | ||
| 
						 | 
					ef267ab449 | ||
| 
						 | 
					4f6ed683e8 | ||
| 
						 | 
					c818e7064f | ||
| 
						 | 
					ead6ab2ef7 | ||
| 
						 | 
					5c3dc49f44 | ||
| 
						 | 
					83884180ac | ||
| 
						 | 
					4cac96c33a | ||
| 
						 | 
					5df4be1165 | ||
| 
						 | 
					96445f1b7d | ||
| 
						 | 
					4bdd7596d3 | ||
| 
						 | 
					18aae32015 | ||
| 
						 | 
					a8996b9e52 | ||
| 
						 | 
					94095c61d8 | ||
| 
						 | 
					1cddd744ad | ||
| 
						 | 
					786738dd00 | ||
| 
						 | 
					5b8d5fdf2f | ||
| 
						 | 
					694f31ca37 | ||
| 
						 | 
					9c1ad0f9f7 | ||
| 
						 | 
					71c6335293 | ||
| 
						 | 
					8c38ea4ebc | ||
| 
						 | 
					44d84ac164 | ||
| 
						 | 
					930f9bd534 | ||
| 
						 | 
					b61fbbde46 | ||
| 
						 | 
					ec956b0334 | ||
| 
						 | 
					44ffe0dc79 | ||
| 
						 | 
					e3a61fba52 | ||
| 
						 | 
					65794f60ec | ||
| 
						 | 
					7a710b4970 | ||
| 
						 | 
					0bb20cc611 | ||
| 
						 | 
					433c0c895e | ||
| 
						 | 
					67e8d22958 | ||
| 
						 | 
					10d1fc0e73 | ||
| 
						 | 
					2260c8aa11 | ||
| 
						 | 
					97eb62aff8 | ||
| 
						 | 
					1855fc35f2 | ||
| 
						 | 
					dc3ed35313 | ||
| 
						 | 
					6b868df554 | ||
| 
						 | 
					5ccbbe40c2 | ||
| 
						 | 
					86f93a53d6 | ||
| 
						 | 
					f53347631e | ||
| 
						 | 
					efe3cb6e1a | ||
| 
						 | 
					32ac4edeed | ||
| 
						 | 
					4c04c09138 | ||
| 
						 | 
					47ea80baee | ||
| 
						 | 
					95c3fa836b | ||
| 
						 | 
					ab60a12465 | ||
| 
						 | 
					2d38e51867 | ||
| 
						 | 
					a5dda669e3 | ||
| 
						 | 
					3c4f3a680a | ||
| 
						 | 
					b61c06384a | ||
| 
						 | 
					e7742bfb7c | ||
| 
						 | 
					22307ae0ee | ||
| 
						 | 
					e150150d9f | ||
| 
						 | 
					943f0733bb | ||
| 
						 | 
					8274447dd9 | ||
| 
						 | 
					083a84e5d0 | ||
| 
						 | 
					d5eb386d00 | ||
| 
						 | 
					1ce7b48057 | ||
| 
						 | 
					cbcdd337aa | ||
| 
						 | 
					c144adf77c | ||
| 
						 | 
					d390039873 | ||
| 
						 | 
					7d0c58a285 | ||
| 
						 | 
					9263001b21 | ||
| 
						 | 
					66ee6d07f8 | ||
| 
						 | 
					a40dcca794 | ||
| 
						 | 
					15e3dfe1d3 | ||
| 
						 | 
					a1de9367ec | ||
| 
						 | 
					eceb37bde2 | ||
| 
						 | 
					56fcf85ab6 | ||
| 
						 | 
					77db81d661 | ||
| 
						 | 
					2ad7fcbc2f | ||
| 
						 | 
					2c62dfd124 | ||
| 
						 | 
					ef66497a0d | ||
| 
						 | 
					1128029599 | ||
| 
						 | 
					befc30bc55 | ||
| 
						 | 
					ca5846cde9 | ||
| 
						 | 
					8547ab1663 | ||
| 
						 | 
					9c0e6ac365 | ||
| 
						 | 
					552b963e6d | ||
| 
						 | 
					e2b48366d3 | ||
| 
						 | 
					5e0d9aea32 | ||
| 
						 | 
					ae13c93b7d | ||
| 
						 | 
					b9f8a4a477 | ||
| 
						 | 
					68e9f75708 | ||
| 
						 | 
					d569693f24 | ||
| 
						 | 
					15d8bb2105 | ||
| 
						 | 
					b2ca777a08 | ||
| 
						 | 
					ba01198e6c | ||
| 
						 | 
					6ebd5e1761 | ||
| 
						 | 
					2723eda1e4 | ||
| 
						 | 
					1fa3a5cce9 | ||
| 
						 | 
					fe8aee6b08 | ||
| 
						 | 
					0639e2a6e2 | ||
| 
						 | 
					f1d707705e | ||
| 
						 | 
					296a7db960 | ||
| 
						 | 
					4c0936e72f | ||
| 
						 | 
					0992e391ba | ||
| 
						 | 
					b22aaeef6a | ||
| 
						 | 
					8090ee0e5d | ||
| 
						 | 
					f7d31bb3e3 | ||
| 
						 | 
					9cd928674f | ||
| 
						 | 
					3ea8a4d220 | ||
| 
						 | 
					b0d3ba76a0 | ||
| 
						 | 
					ab798fe5ba | ||
| 
						 | 
					e7d90e08b9 | ||
| 
						 | 
					c2404f77e9 | ||
| 
						 | 
					ec4a16f2e0 | ||
| 
						 | 
					ca5de26f50 | ||
| 
						 | 
					71920d61e6 | ||
| 
						 | 
					5de75eee56 | ||
| 
						 | 
					2d5fc39d35 | ||
| 
						 | 
					c001ed53fa | ||
| 
						 | 
					39e01e9349 | ||
| 
						 | 
					9e54d4c7d2 | ||
| 
						 | 
					56bf97ffc9 | ||
| 
						 | 
					7d3e719a2c | ||
| 
						 | 
					e55d4fd5c1 | ||
| 
						 | 
					5ee231415f | ||
| 
						 | 
					c866771cd2 | ||
| 
						 | 
					4a24219a1a | ||
| 
						 | 
					733a184ce0 | ||
| 
						 | 
					eee09e79e8 | ||
| 
						 | 
					6df85adf3e | ||
| 
						 | 
					3ee6036551 | ||
| 
						 | 
					fb65080548 | ||
| 
						 | 
					3a5f21b0d1 | ||
| 
						 | 
					13a5598dc3 | ||
| 
						 | 
					5a6c89661a | ||
| 
						 | 
					7c5745720a | ||
| 
						 | 
					00ae13f966 | ||
| 
						 | 
					29dc39fce1 | ||
| 
						 | 
					5c184cfc0d | ||
| 
						 | 
					055022a55f | ||
| 
						 | 
					c30e908034 | ||
| 
						 | 
					8d24c0212e | ||
| 
						 | 
					8240cea628 | ||
| 
						 | 
					f2a33eb372 | ||
| 
						 | 
					e134a40208 | ||
| 
						 | 
					690888cfc1 | ||
| 
						 | 
					fb8d9b6645 | ||
| 
						 | 
					f7ddb39ee1 | ||
| 
						 | 
					145084b699 | ||
| 
						 | 
					f1ba12607a | ||
| 
						 | 
					bb87b65f08 | ||
| 
						 | 
					b0f6e7cee4 | ||
| 
						 | 
					ed72d4e104 | ||
| 
						 | 
					8ec1bfe897 | ||
| 
						 | 
					1dec17562f | ||
| 
						 | 
					9cc3795f1a | ||
| 
						 | 
					be1306a6c2 | ||
| 
						 | 
					e9160a31e0 | ||
| 
						 | 
					0a670c578f | ||
| 
						 | 
					e3c15fc4b9 | ||
| 
						 | 
					dc7c915553 | ||
| 
						 | 
					b7eeb6e67f | ||
| 
						 | 
					7e4193b538 | ||
| 
						 | 
					a932803eac | ||
| 
						 | 
					52560142bf | ||
| 
						 | 
					874a4ef8c7 | ||
| 
						 | 
					0bb3ac7c31 | ||
| 
						 | 
					1e9f5845ab | ||
| 
						 | 
					c41dfc2501 | ||
| 
						 | 
					30ac7eced1 | ||
| 
						 | 
					466d093a92 | ||
| 
						 | 
					1e9be353c2 | ||
| 
						 | 
					4f4277d9c7 | ||
| 
						 | 
					6728bda5c5 | ||
| 
						 | 
					dc9f154823 | ||
| 
						 | 
					d7168a82e2 | ||
| 
						 | 
					c9c8ee3796 | ||
| 
						 | 
					c7aae10300 | ||
| 
						 | 
					909941405f | ||
| 
						 | 
					4031eb1d91 | ||
| 
						 | 
					59cf6fd4f0 | ||
| 
						 | 
					6de9732a88 | ||
| 
						 | 
					1f7f500922 | ||
| 
						 | 
					4b1462ec65 | ||
| 
						 | 
					6ed47f0aad | ||
| 
						 | 
					2d8c7ba9fc | ||
| 
						 | 
					3b342d18bc | ||
| 
						 | 
					f24ad3800c | ||
| 
						 | 
					e2ff369eba | ||
| 
						 | 
					9691a78f6b | ||
| 
						 | 
					7ff6b6fafd | ||
| 
						 | 
					7c621cfbdf | ||
| 
						 | 
					5acadc9cd7 | ||
| 
						 | 
					2ff609dd43 | ||
| 
						 | 
					da48a6ba87 | ||
| 
						 | 
					cd6c58216a | ||
| 
						 | 
					bdbd0cf27a | ||
| 
						 | 
					d792937686 | ||
| 
						 | 
					bac66ec26b | ||
| 
						 | 
					77516822f6 | ||
| 
						 | 
					37d8c67530 | ||
| 
						 | 
					cfdcae4bc7 | ||
| 
						 | 
					74a6921bc4 | ||
| 
						 | 
					490cccba3c | ||
| 
						 | 
					839441e236 | ||
| 
						 | 
					ba9ea943e2 | ||
| 
						 | 
					455087faae | ||
| 
						 | 
					31def9e217 | ||
| 
						 | 
					ee3514ccdc | ||
| 
						 | 
					cf606d7da0 | ||
| 
						 | 
					eb26a581f9 | ||
| 
						 | 
					b04cbebf86 | ||
| 
						 | 
					4272af801f | ||
| 
						 | 
					0b633027cb | ||
| 
						 | 
					93943ef949 | ||
| 
						 | 
					b184b87714 | ||
| 
						 | 
					a11473f85d | ||
| 
						 | 
					1eedad27a2 | ||
| 
						 | 
					ac02d379ba | ||
| 
						 | 
					a4ebf5b507 | ||
| 
						 | 
					c410769588 | ||
| 
						 | 
					997a987943 | ||
| 
						 | 
					6201dc083a | ||
| 
						 | 
					b33f47804d | ||
| 
						 | 
					7ba5e098a3 | ||
| 
						 | 
					824b78021c | ||
| 
						 | 
					31657c85e5 | ||
| 
						 | 
					7010e5ea84 | ||
| 
						 | 
					2cba6b246d | ||
| 
						 | 
					52cc2a7a0c | ||
| 
						 | 
					c012e2b408 | ||
| 
						 | 
					646a6b604f | ||
| 
						 | 
					cca00a6378 | ||
| 
						 | 
					10b7fc7e51 | ||
| 
						 | 
					43e4544d51 | ||
| 
						 | 
					21aa8f0b45 | ||
| 
						 | 
					b708fa51ad | ||
| 
						 | 
					8709f6c4b3 | ||
| 
						 | 
					2ac560e58b | ||
| 
						 | 
					8f8ba9486d | ||
| 
						 | 
					f55924b3e0 | ||
| 
						 | 
					7240acdebc | ||
| 
						 | 
					b9b06b00bf | ||
| 
						 | 
					51f258d103 | ||
| 
						 | 
					4c75f1c7b7 | ||
| 
						 | 
					ed7bff1fec | ||
| 
						 | 
					01a79be2c9 | ||
| 
						 | 
					d211fcd34f | ||
| 
						 | 
					159834171e | ||
| 
						 | 
					8a38c72c48 | ||
| 
						 | 
					fbcdc192d5 | ||
| 
						 | 
					ee642859ef | ||
| 
						 | 
					9f579f12fc | ||
| 
						 | 
					825a526789 | ||
| 
						 | 
					ae8a01ead6 | ||
| 
						 | 
					9dde0b54a3 | ||
| 
						 | 
					f1343b2f55 | ||
| 
						 | 
					962b7985e6 | ||
| 
						 | 
					5a1c64d316 | ||
| 
						 | 
					01b2cf82ec | ||
| 
						 | 
					c033c4c71c | ||
| 
						 | 
					aa791ee5cf | ||
| 
						 | 
					305671e2ab | ||
| 
						 | 
					d654736834 | ||
| 
						 | 
					2c81bfead5 | ||
| 
						 | 
					77b3bc239d | ||
| 
						 | 
					c10d15aa0f | ||
| 
						 | 
					a88deadd6f | ||
| 
						 | 
					e6ea8f1199 | ||
| 
						 | 
					4d4151f6c1 | ||
| 
						 | 
					518becfe2e | ||
| 
						 | 
					6f6b93da02 | ||
| 
						 | 
					45b1843dc9 | ||
| 
						 | 
					cb86a302d8 | ||
| 
						 | 
					d15ed439ae | ||
| 
						 | 
					b765e1f3b7 | ||
| 
						 | 
					2527b53019 | ||
| 
						 | 
					78a47826b2 | ||
| 
						 | 
					ecfaa4f869 | ||
| 
						 | 
					f36adcdb73 | ||
| 
						 | 
					13616f8f96 | ||
| 
						 | 
					ab486d1e27 | ||
| 
						 | 
					9111909c1d | ||
| 
						 | 
					4a1a1a75fb | ||
| 
						 | 
					e4d6ade4b3 | ||
| 
						 | 
					c82e880f5b | ||
| 
						 | 
					f2aa3b21e0 | ||
| 
						 | 
					385db0e97d | ||
| 
						 | 
					4e58da5222 | ||
| 
						 | 
					1c6ebb0782 | ||
| 
						 | 
					7e8b84c3e7 | ||
| 
						 | 
					132067b081 | ||
| 
						 | 
					8c36fc8f31 | ||
| 
						 | 
					93858efe73 | ||
| 
						 | 
					ba7f27a3f6 | ||
| 
						 | 
					2f70fb7015 | ||
| 
						 | 
					655ec6bf8e | ||
| 
						 | 
					c4ad533300 | ||
| 
						 | 
					5cdbd0cf4a | ||
| 
						 | 
					a55c70d4ae | ||
| 
						 | 
					02938a010d | ||
| 
						 | 
					e40641bf7c | ||
| 
						 | 
					27c0b43897 | ||
| 
						 | 
					d46de5ab8b | ||
| 
						 | 
					73ebb0edde | ||
| 
						 | 
					684245d6ce | ||
| 
						 | 
					d157c29269 | ||
| 
						 | 
					4d2e81661b | ||
| 
						 | 
					483a586d55 | ||
| 
						 | 
					4ac54f8c2c | ||
| 
						 | 
					840aacf7dd | ||
| 
						 | 
					ab4256d53a | ||
| 
						 | 
					46c5e562bf | ||
| 
						 | 
					42f5a90d09 | ||
| 
						 | 
					ef82da93fb | ||
| 
						 | 
					06d05b18b2 | ||
| 
						 | 
					431c4bd6e3 | ||
| 
						 | 
					f72c4e82fd | ||
| 
						 | 
					9c83a20a27 | ||
| 
						 | 
					773bec5ae5 | ||
| 
						 | 
					f3c508f6e8 | ||
| 
						 | 
					2aa4710745 | ||
| 
						 | 
					3b0a920fad | ||
| 
						 | 
					daef1cf34d | ||
| 
						 | 
					bd8d4637a3 | ||
| 
						 | 
					d2cefc140a | ||
| 
						 | 
					ccfce89423 | ||
| 
						 | 
					700cd5805c | ||
| 
						 | 
					498aad8587 | ||
| 
						 | 
					73f407b7ae | ||
| 
						 | 
					4be7dcba48 | ||
| 
						 | 
					f0694c582e | ||
| 
						 | 
					f90f0c98d9 | ||
| 
						 | 
					95aecc5dbb | ||
| 
						 | 
					f975fd03a1 | ||
| 
						 | 
					8272874704 | ||
| 
						 | 
					86f4cead16 | ||
| 
						 | 
					88a1a10e6f | ||
| 
						 | 
					624e657210 | ||
| 
						 | 
					2278e8f1ba | ||
| 
						 | 
					58176d1484 | ||
| 
						 | 
					10489879f7 | ||
| 
						 | 
					fe22872d14 | ||
| 
						 | 
					4d95d23d99 | ||
| 
						 | 
					c6fc5a1a26 | ||
| 
						 | 
					012d75442a | ||
| 
						 | 
					dcc7900e7c | ||
| 
						 | 
					34f5e8ad0e | ||
| 
						 | 
					c2fee9894a | ||
| 
						 | 
					abd983e851 | ||
| 
						 | 
					28611704d9 | ||
| 
						 | 
					305dddeab0 | ||
| 
						 | 
					ee8112b42f | ||
| 
						 | 
					ca319f63ad | ||
| 
						 | 
					a09a8164db | ||
| 
						 | 
					e5cf6a20a7 | ||
| 
						 | 
					af5e6e7e6d | ||
| 
						 | 
					70f2b5e877 | ||
| 
						 | 
					8ef454dcbe | ||
| 
						 | 
					551a041283 | ||
| 
						 | 
					03288943af | ||
| 
						 | 
					725f734bae | ||
| 
						 | 
					0f32460656 | ||
| 
						 | 
					25180cc850 | ||
| 
						 | 
					2a0e41cab9 | ||
| 
						 | 
					05edd48ad0 | ||
| 
						 | 
					266ab95557 | ||
| 
						 | 
					0a4bba565c | ||
| 
						 | 
					2ddb9d57aa | ||
| 
						 | 
					4f012ad703 | ||
| 
						 | 
					a1cd180082 | ||
| 
						 | 
					bc2f0c7dcb | ||
| 
						 | 
					c6ae0ebcbf | ||
| 
						 | 
					c6ec576cbb | ||
| 
						 | 
					55329b56cb | ||
| 
						 | 
					7e43d06b60 | ||
| 
						 | 
					89f54f3739 | ||
| 
						 | 
					01fa02d0b5 | ||
| 
						 | 
					8bed45340a | ||
| 
						 | 
					55138753c6 | ||
| 
						 | 
					43369b8096 | ||
| 
						 | 
					bec1977137 | ||
| 
						 | 
					4c08eb4b11 | ||
| 
						 | 
					0163730437 | ||
| 
						 | 
					39745ac38e | ||
| 
						 | 
					cacf8bbb58 | ||
| 
						 | 
					a1c6d5861a | ||
| 
						 | 
					589c4596d8 | ||
| 
						 | 
					7a6d7fca42 | ||
| 
						 | 
					5305c9f1e8 | ||
| 
						 | 
					b1022ea4c1 | ||
| 
						 | 
					380a74a4ed | ||
| 
						 | 
					ff709848a6 | ||
| 
						 | 
					279dd6d878 | ||
| 
						 | 
					2e0ad842d0 | ||
| 
						 | 
					a3949c7786 | ||
| 
						 | 
					2320606262 | ||
| 
						 | 
					b01286d280 | ||
| 
						 | 
					64f72c22b9 | ||
| 
						 | 
					856114d05c | ||
| 
						 | 
					98b8c4b0c9 | ||
| 
						 | 
					01f5f0be5a | ||
| 
						 | 
					eb6d404753 | ||
| 
						 | 
					c508ab1aef | ||
| 
						 | 
					0793dc922c | ||
| 
						 | 
					00a41ab296 | ||
| 
						 | 
					37f4877e56 | ||
| 
						 | 
					a6fc45c02f | ||
| 
						 | 
					25411e01db | ||
| 
						 | 
					a8ac6f1dc1 | ||
| 
						 | 
					dfe1884c25 | ||
| 
						 | 
					3e5dcc8bcd | ||
| 
						 | 
					ff81900784 | ||
| 
						 | 
					4cb30a3057 | ||
| 
						 | 
					72f80b88f7 | ||
| 
						 | 
					3008d8133c | ||
| 
						 | 
					4524618bf2 | ||
| 
						 | 
					55d22ba10c | ||
| 
						 | 
					76cf020750 | ||
| 
						 | 
					f13ac35edf | ||
| 
						 | 
					59582a9d9d | ||
| 
						 | 
					6246bbc656 | ||
| 
						 | 
					1b028b419b | ||
| 
						 | 
					4c6c768422 | ||
| 
						 | 
					1d3969b215 | ||
| 
						 | 
					94116d9ebc | ||
| 
						 | 
					cc5174a89a | ||
| 
						 | 
					31552100c5 | ||
| 
						 | 
					8df5dcb193 | ||
| 
						 | 
					7929600798 | ||
| 
						 | 
					a05ea124b9 | ||
| 
						 | 
					6a03ab3ad4 | ||
| 
						 | 
					6a151c1312 | ||
| 
						 | 
					990e56fb13 | ||
| 
						 | 
					2bd3033f68 | ||
| 
						 | 
					fe105a07e3 | ||
| 
						 | 
					a5782defd3 | ||
| 
						 | 
					bcccd2fe74 | ||
| 
						 | 
					404e23734b | ||
| 
						 | 
					973d63f4f2 | ||
| 
						 | 
					405d98ee63 | ||
| 
						 | 
					f81724969d | ||
| 
						 | 
					edb5444fa3 | ||
| 
						 | 
					e877cb7bd7 | ||
| 
						 | 
					482b3ba702 | ||
| 
						 | 
					752acedc0b | ||
| 
						 | 
					fb88723afc | ||
| 
						 | 
					3718737091 | ||
| 
						 | 
					3d3f056f7e | ||
| 
						 | 
					c60621c367 | ||
| 
						 | 
					606562aa7e | ||
| 
						 | 
					f689d06ca9 | ||
| 
						 | 
					7cfd7f3fb1 | ||
| 
						 | 
					4a8dfb3461 | ||
| 
						 | 
					3752b3aead | ||
| 
						 | 
					b81d41df22 | ||
| 
						 | 
					dadf3f06ee | ||
| 
						 | 
					8ed0d5675f | ||
| 
						 | 
					d5e9041344 | ||
| 
						 | 
					d99c20f628 | ||
| 
						 | 
					973ed24dc8 | ||
| 
						 | 
					5d5f5e3be8 | ||
| 
						 | 
					d9e14408f0 | ||
| 
						 | 
					c9c5ce2365 | ||
| 
						 | 
					975534370f | ||
| 
						 | 
					28605f6bd3 | ||
| 
						 | 
					3c6d3b69c2 | ||
| 
						 | 
					00312e95fe | ||
| 
						 | 
					4223130bb0 | ||
| 
						 | 
					c811e1ce70 | ||
| 
						 | 
					77475f2ad0 | ||
| 
						 | 
					3680a2f6f5 | ||
| 
						 | 
					1946058e7b | ||
| 
						 | 
					73daf8ce33 | ||
| 
						 | 
					094ceeba14 | ||
| 
						 | 
					3b7359a27a | ||
| 
						 | 
					df9108e19b | ||
| 
						 | 
					6307e783d8 | ||
| 
						 | 
					b9cd73c76d | ||
| 
						 | 
					b62c230ca2 | ||
| 
						 | 
					800193da9b | ||
| 
						 | 
					577ba5783c | ||
| 
						 | 
					9bece2b313 | ||
| 
						 | 
					e85e30546c | ||
| 
						 | 
					758f6eed51 | ||
| 
						 | 
					80ee5d3bd8 | ||
| 
						 | 
					dd06c60ada | ||
| 
						 | 
					6ca627ae74 | ||
| 
						 | 
					80a0b81c2a | ||
| 
						 | 
					06a7b0561b | ||
| 
						 | 
					12db20be4e | ||
| 
						 | 
					3cbb1b2b64 | ||
| 
						 | 
					d75e587613 | ||
| 
						 | 
					414c57d138 | ||
| 
						 | 
					c14a84e6f2 | ||
| 
						 | 
					def0db30e7 | ||
| 
						 | 
					6ef7a81a3b | ||
| 
						 | 
					95152aec68 | ||
| 
						 | 
					8ed6762363 | ||
| 
						 | 
					87c5ed8bec | ||
| 
						 | 
					ecc6c1f501 | ||
| 
						 | 
					3d8338b0d4 | ||
| 
						 | 
					c91e25518f | ||
| 
						 | 
					a8dddeab61 | ||
| 
						 | 
					8f0a5ab660 | ||
| 
						 | 
					db03d4bdd0 | ||
| 
						 | 
					0ec96e4279 | ||
| 
						 | 
					6e520c4cdc | ||
| 
						 | 
					1e8683d72d | ||
| 
						 | 
					2df622fd14 | ||
| 
						 | 
					fede784fa2 | ||
| 
						 | 
					f191b143e9 | ||
| 
						 | 
					59212553b5 | ||
| 
						 | 
					e532b196cc | ||
| 
						 | 
					0f5232280c | ||
| 
						 | 
					38898ba4af | ||
| 
						 | 
					48f56d9600 | ||
| 
						 | 
					17bf5ac2fc | ||
| 
						 | 
					343b882d80 | ||
| 
						 | 
					db06d21339 | ||
| 
						 | 
					19240f08bb | ||
| 
						 | 
					d774730f83 | ||
| 
						 | 
					c2edf42567 | ||
| 
						 | 
					08f0e55b4f | ||
| 
						 | 
					deeb74b7e4 | ||
| 
						 | 
					0542002d7a | ||
| 
						 | 
					c1e307f585 | ||
| 
						 | 
					7b4ba43dcf | ||
| 
						 | 
					b0e4debaab | ||
| 
						 | 
					676597e961 | ||
| 
						 | 
					686d90745b | ||
| 
						 | 
					5dc02d53c3 | ||
| 
						 | 
					0598547b58 | ||
| 
						 | 
					67c7745f5d | ||
| 
						 | 
					a2c289646d | ||
| 
						 | 
					e6efecd054 | ||
| 
						 | 
					778b6a86c0 | ||
| 
						 | 
					e5babd086d | ||
| 
						 | 
					c212ebbdda | ||
| 
						 | 
					83b8de3d43 | ||
| 
						 | 
					e174d374f2 | ||
| 
						 | 
					4edb93508d | ||
| 
						 | 
					38c994b83b | ||
| 
						 | 
					1b8643d4c9 | ||
| 
						 | 
					d3c796f5b0 | ||
| 
						 | 
					83d8a6a450 | ||
| 
						 | 
					a21a77d230 | ||
| 
						 | 
					260b88c197 | ||
| 
						 | 
					655331a91b | ||
| 
						 | 
					09e569f83d | ||
| 
						 | 
					e4a4b562c4 | ||
| 
						 | 
					35b4a755f9 | ||
| 
						 | 
					5a4b43848a | ||
| 
						 | 
					d98869a088 | ||
| 
						 | 
					4d33cf739d | ||
| 
						 | 
					34e7daf989 | ||
| 
						 | 
					b0adcd6a46 | ||
| 
						 | 
					be285cde3f | ||
| 
						 | 
					0ff1faf7f2 | ||
| 
						 | 
					bcc62cc9e3 | ||
| 
						 | 
					97b466d409 | ||
| 
						 | 
					f17d9bba14 | ||
| 
						 | 
					d74725ce67 | ||
| 
						 | 
					3dad55d7a8 | ||
| 
						 | 
					598ffeea89 | ||
| 
						 | 
					83367f67de | ||
| 
						 | 
					15f2647d71 | ||
| 
						 | 
					6421d69bff | ||
| 
						 | 
					18081e30e1 | ||
| 
						 | 
					97181b5c0d | ||
| 
						 | 
					a63f9887b9 | ||
| 
						 | 
					1282aad4a5 | ||
| 
						 | 
					b8fad99f09 | ||
| 
						 | 
					c7e9e60b05 | ||
| 
						 | 
					47f2e1da73 | ||
| 
						 | 
					5975229919 | ||
| 
						 | 
					38295e8a75 | ||
| 
						 | 
					f9612b5eaf | ||
| 
						 | 
					5cf2ef2ef7 | ||
| 
						 | 
					938b5c886e | ||
| 
						 | 
					0618e68200 | ||
| 
						 | 
					bac52f3969 | ||
| 
						 | 
					d494d62953 | ||
| 
						 | 
					7206181385 | ||
| 
						 | 
					3f22901a43 | ||
| 
						 | 
					f70f11fc70 | ||
| 
						 | 
					cffebd7fd6 | ||
| 
						 | 
					b8c8e7349f | ||
| 
						 | 
					8bba99ae56 | ||
| 
						 | 
					b5c5f57613 | ||
| 
						 | 
					33df856925 | ||
| 
						 | 
					ce09cedd2e | ||
| 
						 | 
					7d68101f83 | ||
| 
						 | 
					aa50a00898 | ||
| 
						 | 
					26f112ba55 | ||
| 
						 | 
					159b9162f8 | ||
| 
						 | 
					d7999f9fcb | ||
| 
						 | 
					f13eba4c78 | ||
| 
						 | 
					050e82e088 | ||
| 
						 | 
					88377e5b61 | ||
| 
						 | 
					241af465fd | ||
| 
						 | 
					59510a554d | ||
| 
						 | 
					b10aa95d28 | ||
| 
						 | 
					097bee681a | ||
| 
						 | 
					8548c2fc61 | ||
| 
						 | 
					dc4fbd2e97 | ||
| 
						 | 
					60b029869f | ||
| 
						 | 
					f592ea6c30 | ||
| 
						 | 
					a39ac3d94a | ||
| 
						 | 
					4b23ddc002 | ||
| 
						 | 
					4486d336a6 | ||
| 
						 | 
					45e4b811b0 | ||
| 
						 | 
					0e6a1a4420 | ||
| 
						 | 
					b8bf708db9 | ||
| 
						 | 
					6fdbb01194 | ||
| 
						 | 
					d29147565c | ||
| 
						 | 
					75c9430559 | ||
| 
						 | 
					9ac99a80c3 | ||
| 
						 | 
					a15d107dde | ||
| 
						 | 
					09897b8146 | ||
| 
						 | 
					29e446e508 | ||
| 
						 | 
					10beb36b1c | ||
| 
						 | 
					a65a888866 | ||
| 
						 | 
					98180b5cc7 | ||
| 
						 | 
					92009181af | ||
| 
						 | 
					831bdb9f63 | ||
| 
						 | 
					50a4dbbb5e | ||
| 
						 | 
					ad6511c313 | ||
| 
						 | 
					7a37fa4aef | ||
| 
						 | 
					dcee24191f | ||
| 
						 | 
					87bcb6f377 | ||
| 
						 | 
					b0bc2f00d2 | ||
| 
						 | 
					3b19c7d0d9 | ||
| 
						 | 
					12f5c67bf5 | ||
| 
						 | 
					d7a83d8995 | ||
| 
						 | 
					7725729d90 | ||
| 
						 | 
					e96445bd02 | ||
| 
						 | 
					da2c124675 | ||
| 
						 | 
					8cb695a963 | ||
| 
						 | 
					54cbd7e154 | ||
| 
						 | 
					5994b62930 | ||
| 
						 | 
					2fbf94b0f3 | ||
| 
						 | 
					32bc30e210 | ||
| 
						 | 
					f3bc8e6ce1 | ||
| 
						 | 
					16f3a32bec | ||
| 
						 | 
					c44d2498e3 | ||
| 
						 | 
					2aed209efa | ||
| 
						 | 
					b55b780d7b | ||
| 
						 | 
					8d4eb2bc1f | ||
| 
						 | 
					67bf4f28ff | ||
| 
						 | 
					803582f8ac | ||
| 
						 | 
					03603f392a | ||
| 
						 | 
					fcfd6d9504 | ||
| 
						 | 
					c31451cf13 | ||
| 
						 | 
					5deff1a179 | ||
| 
						 | 
					e236a1c99b | ||
| 
						 | 
					a2f3094eb0 | ||
| 
						 | 
					65afc576ea | ||
| 
						 | 
					8971f656b4 | ||
| 
						 | 
					394ce9ee39 | ||
| 
						 | 
					67a83c1b34 | ||
| 
						 | 
					1e8d094274 | ||
| 
						 | 
					4c35a40858 | ||
| 
						 | 
					802b2aaf6a | ||
| 
						 | 
					0e79a8944b | ||
| 
						 | 
					bebf70667d | ||
| 
						 | 
					d9bd5de0b1 | ||
| 
						 | 
					31c7aa0ba4 | ||
| 
						 | 
					fc2388189f | ||
| 
						 | 
					4431338691 | ||
| 
						 | 
					bda1e9aeab | ||
| 
						 | 
					4969ca768d | ||
| 
						 | 
					2acd1c1642 | ||
| 
						 | 
					e1e753179a | ||
| 
						 | 
					f4cc8153ae | ||
| 
						 | 
					e4d8cb4ee0 | ||
| 
						 | 
					723a78ae3f | ||
| 
						 | 
					cd9d0d7dec | ||
| 
						 | 
					665d4f08c8 | ||
| 
						 | 
					00c7780fcb | ||
| 
						 | 
					15ab13dc42 | ||
| 
						 | 
					8a0ca3066e | ||
| 
						 | 
					ea01755bb4 | ||
| 
						 | 
					69c2084a18 | ||
| 
						 | 
					99c0a1a7d0 | ||
| 
						 | 
					5acf997e69 | ||
| 
						 | 
					dd87e4ed39 | ||
| 
						 | 
					2f8c26ba8a | ||
| 
						 | 
					81b9793807 | ||
| 
						 | 
					7278f17e8f | ||
| 
						 | 
					66c7427df0 | ||
| 
						 | 
					c1a06d858d | ||
| 
						 | 
					53b5fdbe9e | ||
| 
						 | 
					687cf0235e | ||
| 
						 | 
					b6e9229cf0 | ||
| 
						 | 
					089e4848d8 | ||
| 
						 | 
					58d2e7c6d1 | ||
| 
						 | 
					fa18d6fb76 | ||
| 
						 | 
					4dcb930247 | ||
| 
						 | 
					74a299fd08 | ||
| 
						 | 
					532a560d87 | ||
| 
						 | 
					0040a60559 | ||
| 
						 | 
					cc34342790 | ||
| 
						 | 
					bdbf6e9d19 | ||
| 
						 | 
					db86f765eb | ||
| 
						 | 
					b11dec5dd5 | ||
| 
						 | 
					86becc7591 | ||
| 
						 | 
					8922bc038b | ||
| 
						 | 
					009f5790a4 | ||
| 
						 | 
					0536b6c459 | ||
| 
						 | 
					0e3ebd9841 | ||
| 
						 | 
					598965a606 | ||
| 
						 | 
					d7a2938849 | ||
| 
						 | 
					a683658675 | ||
| 
						 | 
					25169f68b7 | ||
| 
						 | 
					e5247ae65d | ||
| 
						 | 
					a718cb05ff | ||
| 
						 | 
					b466ef2581 | ||
| 
						 | 
					c7a634641f | ||
| 
						 | 
					e4388643f1 | ||
| 
						 | 
					bc4208201c | ||
| 
						 | 
					a0d69d52a1 | ||
| 
						 | 
					c23a1be139 | ||
| 
						 | 
					9799f7afb0 | ||
| 
						 | 
					6358b24fac | ||
| 
						 | 
					b58634316f | ||
| 
						 | 
					e3657644d6 | ||
| 
						 | 
					7d1e3ebeed | ||
| 
						 | 
					9e61dfe85e | ||
| 
						 | 
					7b51aafa86 | ||
| 
						 | 
					5f487123df | ||
| 
						 | 
					f1f32477e3 | ||
| 
						 | 
					df2b1251a0 | ||
| 
						 | 
					02c7cf6fa5 | ||
| 
						 | 
					60006ff993 | ||
| 
						 | 
					f3af5d7b8e | ||
| 
						 | 
					d551412a32 | ||
| 
						 | 
					6de67a134e | ||
| 
						 | 
					8ec31398e0 | ||
| 
						 | 
					fd0d560b47 | ||
| 
						 | 
					cc542269a1 | ||
| 
						 | 
					7b488a3bef | ||
| 
						 | 
					f448168501 | ||
| 
						 | 
					80a8fb98db | ||
| 
						 | 
					898bb397b1 | ||
| 
						 | 
					74ed5b5ebd | ||
| 
						 | 
					178afd81a9 | ||
| 
						 | 
					d6eb1a7b98 | ||
| 
						 | 
					4ff56b15e9 | ||
| 
						 | 
					e6b98d3152 | ||
| 
						 | 
					5fd8dd2dce | ||
| 
						 | 
					0ad3e046a4 | ||
| 
						 | 
					d6c5d24af3 | ||
| 
						 | 
					8a3280a2de | ||
| 
						 | 
					450a0a647a | ||
| 
						 | 
					676c0cf123 | ||
| 
						 | 
					a731319321 | ||
| 
						 | 
					81b06a09b7 | ||
| 
						 | 
					23b34744d9 | ||
| 
						 | 
					bc8590aa12 | ||
| 
						 | 
					939d368d5f | ||
| 
						 | 
					336e3b8baf | ||
| 
						 | 
					47c06fa308 | ||
| 
						 | 
					b7f447f8d8 | ||
| 
						 | 
					03af76b631 | ||
| 
						 | 
					e105d5c28f | ||
| 
						 | 
					d6ffb4c177 | ||
| 
						 | 
					6dbfce1031 | ||
| 
						 | 
					fea5ddf585 | ||
| 
						 | 
					b9f39c2711 | ||
| 
						 | 
					5acac0309a | ||
| 
						 | 
					78febad718 | ||
| 
						 | 
					a6a5bba0a9 | ||
| 
						 | 
					51581c034d | ||
| 
						 | 
					8f25a95b47 | ||
| 
						 | 
					7f5d092223 | ||
| 
						 | 
					2e5cccd1b6 | ||
| 
						 | 
					2645782f89 | ||
| 
						 | 
					9533092511 | ||
| 
						 | 
					6005a461bb | ||
| 
						 | 
					e2df946eee | ||
| 
						 | 
					d14588120f | ||
| 
						 | 
					ab31cfa664 | ||
| 
						 | 
					af1c397969 | ||
| 
						 | 
					947f9deed5 | ||
| 
						 | 
					ce95eee903 | ||
| 
						 | 
					b15f3bb969 | ||
| 
						 | 
					998e8cba19 | ||
| 
						 | 
					e3f523ab2a | ||
| 
						 | 
					36485e56ed | ||
| 
						 | 
					b4113360f6 | ||
| 
						 | 
					2d71e22f08 | ||
| 
						 | 
					2ae67c431c | ||
| 
						 | 
					4b1a91b64f | ||
| 
						 | 
					4f69318e12 | ||
| 
						 | 
					1cc98ab50f | ||
| 
						 | 
					a6494602fd | ||
| 
						 | 
					50ec78b488 | ||
| 
						 | 
					7d044d14f9 | ||
| 
						 | 
					df03d5a8b2 | ||
| 
						 | 
					6a0ed81e67 | ||
| 
						 | 
					c94f3e8188 | ||
| 
						 | 
					1e5f6cc1dc | ||
| 
						 | 
					b1fece74e3 | ||
| 
						 | 
					fdbe0df6e7 | ||
| 
						 | 
					93d59520e4 | ||
| 
						 | 
					b68d3a073b | ||
| 
						 | 
					2100311f41 | ||
| 
						 | 
					e1269e3156 | ||
| 
						 | 
					c88d61b044 | ||
| 
						 | 
					f49df54a36 | ||
| 
						 | 
					952bbc4410 | ||
| 
						 | 
					1eb4b85d72 | ||
| 
						 | 
					59b6cb9e91 | ||
| 
						 | 
					e06afaeb7a | ||
| 
						 | 
					8c6f654b26 | ||
| 
						 | 
					1d8212e53a | ||
| 
						 | 
					083c5e17e1 | ||
| 
						 | 
					272231fb09 | ||
| 
						 | 
					67b4d9b232 | ||
| 
						 | 
					21709e1557 | ||
| 
						 | 
					9c312637d1 | ||
| 
						 | 
					feacad7f68 | ||
| 
						 | 
					6513303498 | ||
| 
						 | 
					3e2a52b034 | ||
| 
						 | 
					176d4e85e9 | ||
| 
						 | 
					84d30dffb6 | ||
| 
						 | 
					0fd282b078 | ||
| 
						 | 
					cdf4afbe50 | ||
| 
						 | 
					b222b2304e | ||
| 
						 | 
					fdf9900114 | ||
| 
						 | 
					5867eb2dd2 | ||
| 
						 | 
					61f145e3de | ||
| 
						 | 
					b97e7fc730 | ||
| 
						 | 
					01cbf08064 | ||
| 
						 | 
					fec632e948 | ||
| 
						 | 
					6aab5b57e1 | ||
| 
						 | 
					d2a27e02ce | ||
| 
						 | 
					b55506a76d | ||
| 
						 | 
					afc2aa2b3f | ||
| 
						 | 
					d055b269ed | ||
| 
						 | 
					8a246a4a9f | ||
| 
						 | 
					2f684351bf | ||
| 
						 | 
					74e5beab9d | ||
| 
						 | 
					b41765f441 | ||
| 
						 | 
					05a6013f42 | ||
| 
						 | 
					cfff544d67 | ||
| 
						 | 
					599d9642ca | ||
| 
						 | 
					0264faaa4e | ||
| 
						 | 
					4022a60ea7 | ||
| 
						 | 
					39e366fc11 | ||
| 
						 | 
					096675824f | ||
| 
						 | 
					80bfa76ac9 | ||
| 
						 | 
					b2e553a82e | ||
| 
						 | 
					772b64d9d3 | ||
| 
						 | 
					92c0de518e | ||
| 
						 | 
					ff96456513 | ||
| 
						 | 
					e89adbef51 | ||
| 
						 | 
					22a6a6cf81 | ||
| 
						 | 
					fd870e4e8a | ||
| 
						 | 
					d52ed3fff2 | ||
| 
						 | 
					bac17ab7d8 | ||
| 
						 | 
					9ace303528 | ||
| 
						 | 
					7e81c35cdc | ||
| 
						 | 
					0f125d9bcf | ||
| 
						 | 
					d4714517c0 | ||
| 
						 | 
					280e4bf4c3 | ||
| 
						 | 
					adf462fe05 | ||
| 
						 | 
					c2862742ab | ||
| 
						 | 
					8a712eb5af | ||
| 
						 | 
					d58790af17 | ||
| 
						 | 
					9ef7a13403 | ||
| 
						 | 
					a5da1219bb | ||
| 
						 | 
					be524fed38 | ||
| 
						 | 
					042016b85e | ||
| 
						 | 
					f6da574324 | ||
| 
						 | 
					b09d5c3135 | ||
| 
						 | 
					ec65c3fd53 | ||
| 
						 | 
					7ca2f31c8d | ||
| 
						 | 
					2275737a5d | ||
| 
						 | 
					5e3836055f | ||
| 
						 | 
					37a6a0bb3e | ||
| 
						 | 
					6bcca3eca9 | ||
| 
						 | 
					ce40b8d531 | ||
| 
						 | 
					9f109b94b8 | ||
| 
						 | 
					89024febde | ||
| 
						 | 
					b7a673c6e2 | ||
| 
						 | 
					7f68be770d | ||
| 
						 | 
					4f173f35db | ||
| 
						 | 
					ae9fbe573e | ||
| 
						 | 
					29676f473d | ||
| 
						 | 
					a5fcb26ab1 | ||
| 
						 | 
					d68b1a1e8c | ||
| 
						 | 
					bd8baed138 | ||
| 
						 | 
					00a7dda273 | ||
| 
						 | 
					4dba07c384 | ||
| 
						 | 
					4d39c6b7cc | ||
| 
						 | 
					7d6f6158c9 | ||
| 
						 | 
					6863dbbc0c | ||
| 
						 | 
					28b96efd8b | ||
| 
						 | 
					0f82af0f49 | ||
| 
						 | 
					f0d839436f | ||
| 
						 | 
					f1aa4b4127 | ||
| 
						 | 
					ccdb43f7f1 | ||
| 
						 | 
					72900f0f90 | ||
| 
						 | 
					3ad958ddb1 | ||
| 
						 | 
					2c77cc90f4 | ||
| 
						 | 
					db4c33b4fb | ||
| 
						 | 
					3fb04115fc | ||
| 
						 | 
					4faaa32aef | ||
| 
						 | 
					cab59b4c32 | ||
| 
						 | 
					931eff89f5 | ||
| 
						 | 
					175335808b | ||
| 
						 | 
					e00216581e | ||
| 
						 | 
					23951ec00c | ||
| 
						 | 
					a8fc5d0f9f | ||
| 
						 | 
					f5e85bab1c | ||
| 
						 | 
					9a44fa83dc | ||
| 
						 | 
					6b1e54da62 | ||
| 
						 | 
					b91421b107 | ||
| 
						 | 
					43b3954fa5 | ||
| 
						 | 
					80f2e3f263 | ||
| 
						 | 
					9ea423b4c1 | ||
| 
						 | 
					b259c9c535 | ||
| 
						 | 
					80f481a5f7 | ||
| 
						 | 
					115fe1b577 | ||
| 
						 | 
					06d6ea651e | ||
| 
						 | 
					966fa848a0 | ||
| 
						 | 
					6f8fe67ace | ||
| 
						 | 
					d49edc8e09 | ||
| 
						 | 
					3b9c20fe31 | ||
| 
						 | 
					bd72c5eacf | ||
| 
						 | 
					9d152a77fd | ||
| 
						 | 
					33dc28b905 | ||
| 
						 | 
					43ce64dcca | ||
| 
						 | 
					9e0882ba98 | ||
| 
						 | 
					c890149c8c | ||
| 
						 | 
					1a1ab2e2e8 | ||
| 
						 | 
					715b706caa | ||
| 
						 | 
					bfa9c42c25 | ||
| 
						 | 
					9d98f97e1b | ||
| 
						 | 
					5eb5ce6ff3 | ||
| 
						 | 
					be9c873a6e | ||
| 
						 | 
					034d80f6cd | ||
| 
						 | 
					021e786c71 | ||
| 
						 | 
					0c6bb8cb66 | ||
| 
						 | 
					4d7f08a99e | ||
| 
						 | 
					fdef584681 | ||
| 
						 | 
					f335bac8a3 | ||
| 
						 | 
					51369753bb | ||
| 
						 | 
					82a4c2bce3 | ||
| 
						 | 
					e73c6e039e | ||
| 
						 | 
					19bad0844f | ||
| 
						 | 
					96cec4dfd7 | ||
| 
						 | 
					943aea6267 | ||
| 
						 | 
					b433e4a1e7 | ||
| 
						 | 
					20f1966c0e | ||
| 
						 | 
					ab1f5c3edd | ||
| 
						 | 
					b2be6799f2 | ||
| 
						 | 
					ea2618fc6f | ||
| 
						 | 
					62fdf8eaed | ||
| 
						 | 
					d3569a3572 | ||
| 
						 | 
					89df76e449 | ||
| 
						 | 
					e5b2f33b4f | ||
| 
						 | 
					934d312f50 | ||
| 
						 | 
					68917eb517 | ||
| 
						 | 
					3beb2f6b5d | ||
| 
						 | 
					b29017f15b | ||
| 
						 | 
					db83a0ebbc | ||
| 
						 | 
					6d9fddb95d | ||
| 
						 | 
					4284190cc4 | ||
| 
						 | 
					5e4cbd2d24 | ||
| 
						 | 
					06c3bec65d | ||
| 
						 | 
					e8c3bb45ba | ||
| 
						 | 
					4ec55a964d | ||
| 
						 | 
					b9420864c0 | ||
| 
						 | 
					bf6588b6a7 | ||
| 
						 | 
					e43217e664 | ||
| 
						 | 
					e19ee2d102 | ||
| 
						 | 
					b4c53e2cfd | ||
| 
						 | 
					a2902de67c | ||
| 
						 | 
					da192f7955 | ||
| 
						 | 
					a2210d23c3 | ||
| 
						 | 
					bd5a622400 | ||
| 
						 | 
					b9494cb0d6 | ||
| 
						 | 
					0f73af4470 | ||
| 
						 | 
					45e26b5c02 | ||
| 
						 | 
					6af5ea38ce | ||
| 
						 | 
					b6f0aa4394 | ||
| 
						 | 
					774dab58f6 | ||
| 
						 | 
					e3bdb98f7a | ||
| 
						 | 
					58d628c9f8 | ||
| 
						 | 
					1e69394545 | ||
| 
						 | 
					1cf798ad14 | ||
| 
						 | 
					da3992d2e9 | ||
| 
						 | 
					48908e4633 | ||
| 
						 | 
					f5ae149338 | ||
| 
						 | 
					3fe5311967 | ||
| 
						 | 
					6a48639c68 | ||
| 
						 | 
					e7093b3ca8 | ||
| 
						 | 
					d0a4104c0c | ||
| 
						 | 
					90559bed53 | ||
| 
						 | 
					973a18cf03 | ||
| 
						 | 
					3c666ce57a | ||
| 
						 | 
					a1287ec64f | ||
| 
						 | 
					5fbfa1bfa8 | ||
| 
						 | 
					da3ecc91f8 | ||
| 
						 | 
					09c8f558f7 | ||
| 
						 | 
					528a149def | ||
| 
						 | 
					29e36afb6b | ||
| 
						 | 
					0e39543d35 | ||
| 
						 | 
					0de20d8ee6 | ||
| 
						 | 
					cd5de5c0e5 | ||
| 
						 | 
					bd5afc26bd | ||
| 
						 | 
					9542dfdcdc | ||
| 
						 | 
					97a6d7b1a8 | ||
| 
						 | 
					209b9d4374 | ||
| 
						 | 
					0b8ccd0ae7 | ||
| 
						 | 
					0b7f5ad508 | ||
| 
						 | 
					8a38805e82 | ||
| 
						 | 
					836d88a4b8 | ||
| 
						 | 
					d5268ed511 | ||
| 
						 | 
					0e7d93858d | ||
| 
						 | 
					2164d760b7 | ||
| 
						 | 
					b9c8de598b | ||
| 
						 | 
					9889a811db | ||
| 
						 | 
					9e38d882b9 | ||
| 
						 | 
					e8635044b5 | ||
| 
						 | 
					56dea0ac9a | ||
| 
						 | 
					e8b77477c7 | ||
| 
						 | 
					64298e528d | ||
| 
						 | 
					4f1465e7c7 | ||
| 
						 | 
					6120041b69 | ||
| 
						 | 
					8c1213627d | ||
| 
						 | 
					3e6ae6eeb8 | ||
| 
						 | 
					291e9aeabd | ||
| 
						 | 
					a3d776187a | ||
| 
						 | 
					e55f502e2f | ||
| 
						 | 
					e369270f88 | ||
| 
						 | 
					7e845e7cfd | ||
| 
						 | 
					56d9624b56 | ||
| 
						 | 
					911d135deb | ||
| 
						 | 
					8107b90678 | ||
| 
						 | 
					7722452b98 | ||
| 
						 | 
					6e1a986e0f | ||
| 
						 | 
					e0785ade35 | ||
| 
						 | 
					0177ed6f03 | ||
| 
						 | 
					c62635a3b5 | ||
| 
						 | 
					0177476fd2 | ||
| 
						 | 
					76d7dface7 | ||
| 
						 | 
					982ba21460 | ||
| 
						 | 
					6081c60556 | ||
| 
						 | 
					2fe3c22108 | ||
| 
						 | 
					75dbb3189a | ||
| 
						 | 
					32330300a9 | ||
| 
						 | 
					64414df27e | ||
| 
						 | 
					f98ec86798 | ||
| 
						 | 
					87bbd13899 | ||
| 
						 | 
					51a4493add | ||
| 
						 | 
					5effe8f336 | ||
| 
						 | 
					296eb2bd61 | ||
| 
						 | 
					9853acba66 | ||
| 
						 | 
					09cb9c782d | ||
| 
						 | 
					575ce905b2 | ||
| 
						 | 
					54887af471 | ||
| 
						 | 
					573350637e | ||
| 
						 | 
					49a16f7121 | ||
| 
						 | 
					a4773fcbbb | ||
| 
						 | 
					1e038c4bc6 | ||
| 
						 | 
					6ba19692a3 | ||
| 
						 | 
					432dfe2b8f | ||
| 
						 | 
					a142372750 | ||
| 
						 | 
					f14195f786 | ||
| 
						 | 
					9d54f9a6b7 | ||
| 
						 | 
					ebb91191bf | ||
| 
						 | 
					8742e294d4 | ||
| 
						 | 
					8882d1fa1b | ||
| 
						 | 
					0c37ab5255 | ||
| 
						 | 
					747a05844d | ||
| 
						 | 
					c7b7bf32f8 | ||
| 
						 | 
					710ee3b0e0 | ||
| 
						 | 
					7a8993892d | ||
| 
						 | 
					5e16a77fa9 | ||
| 
						 | 
					ef35519696 | ||
| 
						 | 
					d5baaf7756 | ||
| 
						 | 
					2a94387fc3 | ||
| 
						 | 
					6a5c2b0fc3 | ||
| 
						 | 
					fc281d6440 | ||
| 
						 | 
					e22ac39da4 | ||
| 
						 | 
					34cadb1e54 | ||
| 
						 | 
					94692b904e | ||
| 
						 | 
					18f3087afd | ||
| 
						 | 
					15bc228ae9 | ||
| 
						 | 
					2b7a38d032 | ||
| 
						 | 
					90e1a6905a | ||
| 
						 | 
					c36af24cbd | ||
| 
						 | 
					a676c18502 | ||
| 
						 | 
					362912ff83 | ||
| 
						 | 
					46ff13f243 | ||
| 
						 | 
					340a67a6f8 | ||
| 
						 | 
					9294c1e76c | ||
| 
						 | 
					fd704f8de0 | ||
| 
						 | 
					d9ca9154d1 | ||
| 
						 | 
					35110eca73 | ||
| 
						 | 
					9ad92b3007 | ||
| 
						 | 
					2f78c96330 | ||
| 
						 | 
					639857ceb2 | ||
| 
						 | 
					162f58c53c | ||
| 
						 | 
					84c4d96e71 | ||
| 
						 | 
					c0d343d56d | ||
| 
						 | 
					6d14a80608 | ||
| 
						 | 
					f451bb7c49 | ||
| 
						 | 
					20b17d6b04 | ||
| 
						 | 
					bb2317b63c | ||
| 
						 | 
					189461dc98 | ||
| 
						 | 
					69af552bc1 | ||
| 
						 | 
					0ae6ff9f72 | ||
| 
						 | 
					8b571fbbb1 | ||
| 
						 | 
					f3fcd409d5 | ||
| 
						 | 
					a47532f88a | ||
| 
						 | 
					6c157a404b | ||
| 
						 | 
					4f8a49143d | ||
| 
						 | 
					493d6033aa | ||
| 
						 | 
					8f219af884 | ||
| 
						 | 
					aeb04136f7 | ||
| 
						 | 
					0b8f57bf06 | ||
| 
						 | 
					6508d446e1 | ||
| 
						 | 
					82cb462bb4 | ||
| 
						 | 
					9a264bf610 | ||
| 
						 | 
					57007e80a9 | ||
| 
						 | 
					b6c876bdb6 | ||
| 
						 | 
					57afae79eb | ||
| 
						 | 
					84c2184909 | ||
| 
						 | 
					e358a24a75 | ||
| 
						 | 
					9da9d00c62 | ||
| 
						 | 
					ec3f269d1f | ||
| 
						 | 
					1c388a52a5 | ||
| 
						 | 
					34a827bbfe | ||
| 
						 | 
					726b9e2240 | ||
| 
						 | 
					2236ba0d20 | ||
| 
						 | 
					463c0f7096 | ||
| 
						 | 
					e49a7e361c | ||
| 
						 | 
					6e87cf5b30 | ||
| 
						 | 
					5872e8dd7e | ||
| 
						 | 
					e81d4ac8c8 | ||
| 
						 | 
					4922904991 | ||
| 
						 | 
					decae2dcda | ||
| 
						 | 
					16bbd13af7 | ||
| 
						 | 
					ee0666c8df | ||
| 
						 | 
					a8a8ae2e92 | ||
| 
						 | 
					fd1148a728 | ||
| 
						 | 
					74c7b41ee7 | ||
| 
						 | 
					465e19dbe9 | ||
| 
						 | 
					86660c73e5 | ||
| 
						 | 
					6d8a208df2 | ||
| 
						 | 
					c3a826fdce | ||
| 
						 | 
					c5d6a42abf | ||
| 
						 | 
					d49c144297 | ||
| 
						 | 
					e7de7d5eb3 | ||
| 
						 | 
					20005a83d2 | ||
| 
						 | 
					27926030f9 | ||
| 
						 | 
					701de67b79 | ||
| 
						 | 
					883479f01e | ||
| 
						 | 
					b37a0b0512 | ||
| 
						 | 
					5c5d5270d2 | ||
| 
						 | 
					36461fb2aa | ||
| 
						 | 
					d8dcd5e472 | ||
| 
						 | 
					c51b46c982 | ||
| 
						 | 
					b1b63c1dd1 | ||
| 
						 | 
					30c93d66eb | ||
| 
						 | 
					3b60bb7259 | ||
| 
						 | 
					c73f8e835f | ||
| 
						 | 
					93558c4299 | ||
| 
						 | 
					396cff5779 | ||
| 
						 | 
					336154e729 | ||
| 
						 | 
					bb0aba34fa | ||
| 
						 | 
					1dc0ce9562 | ||
| 
						 | 
					e4aee168b5 | ||
| 
						 | 
					2c10c895da | ||
| 
						 | 
					c04fae3096 | ||
| 
						 | 
					a214af0830 | ||
| 
						 | 
					f21bc46e82 | ||
| 
						 | 
					044327a488 | ||
| 
						 | 
					c4bbcc83b6 | ||
| 
						 | 
					eb162b73c2 | ||
| 
						 | 
					29aafb9cea | ||
| 
						 | 
					40eb7d0d48 | ||
| 
						 | 
					1dcb2b7e65 | ||
| 
						 | 
					5470b9aa73 | ||
| 
						 | 
					050bd7dd0b | ||
| 
						 | 
					f75038634f | ||
| 
						 | 
					300b4a9158 | ||
| 
						 | 
					52071f3476 | ||
| 
						 | 
					42ddd745f8 | ||
| 
						 | 
					a7846189cd | ||
| 
						 | 
					4762995d1f | ||
| 
						 | 
					e3a530eb61 | ||
| 
						 | 
					d1235ff058 | ||
| 
						 | 
					4370e92dbd | ||
| 
						 | 
					50e9522a06 | ||
| 
						 | 
					b5bb9aa8e3 | ||
| 
						 | 
					cf2e365f23 | ||
| 
						 | 
					72e532cb67 | ||
| 
						 | 
					ac5635f77d | ||
| 
						 | 
					640d67c119 | ||
| 
						 | 
					3e79693e3b | ||
| 
						 | 
					d55d3c2fd0 | ||
| 
						 | 
					3aced17c75 | ||
| 
						 | 
					bac63914db | ||
| 
						 | 
					6a63c51f7c | ||
| 
						 | 
					632cf13767 | ||
| 
						 | 
					e7012a515c | ||
| 
						 | 
					6b638af92f | ||
| 
						 | 
					c654b79c53 | ||
| 
						 | 
					bee7b874ea | ||
| 
						 | 
					9c3fc592f7 | ||
| 
						 | 
					4eab7a1ebc | ||
| 
						 | 
					3d985688e4 | ||
| 
						 | 
					17ea2631cd | ||
| 
						 | 
					b749910e6c | ||
| 
						 | 
					eff36caea8 | ||
| 
						 | 
					6ff092f140 | ||
| 
						 | 
					28bb36e53d | ||
| 
						 | 
					4a091bbd8a | ||
| 
						 | 
					e99a6b813e | ||
| 
						 | 
					b9e5302f27 | ||
| 
						 | 
					dd7b6aef39 | ||
| 
						 | 
					910b8b6a69 | ||
| 
						 | 
					c3207e215f | ||
| 
						 | 
					f83be11b85 | ||
| 
						 | 
					45bce1062a | ||
| 
						 | 
					8cb344bf3c | ||
| 
						 | 
					fcc4518cdc | ||
| 
						 | 
					c84839eb91 | ||
| 
						 | 
					1f878aee69 | ||
| 
						 | 
					84fd4686e2 | ||
| 
						 | 
					ede9fb4fcc | ||
| 
						 | 
					723aef71e8 | ||
| 
						 | 
					48964a911e | ||
| 
						 | 
					6a35cb60fd | ||
| 
						 | 
					1e51c3a832 | ||
| 
						 | 
					205dda2b39 | ||
| 
						 | 
					1c18d19da0 | ||
| 
						 | 
					645729e943 | ||
| 
						 | 
					f425a25c98 | ||
| 
						 | 
					aaace2e802 | ||
| 
						 | 
					3f16d9fbc9 | ||
| 
						 | 
					3afc57bab8 | ||
| 
						 | 
					55225106b6 | ||
| 
						 | 
					1a31bff9fe | ||
| 
						 | 
					4eaa3329ec | ||
| 
						 | 
					028d78b993 | ||
| 
						 | 
					944af98be6 | ||
| 
						 | 
					2789b2b0ad | ||
| 
						 | 
					7dded571de | ||
| 
						 | 
					95fe8372e8 | ||
| 
						 | 
					ecdcb0ef67 | ||
| 
						 | 
					6a04a03eb5 | ||
| 
						 | 
					0c96056a94 | ||
| 
						 | 
					f518a5e231 | ||
| 
						 | 
					f581c1062e | ||
| 
						 | 
					0b3deceea3 | ||
| 
						 | 
					fa4cd8868c | ||
| 
						 | 
					8c573ca7f3 | ||
| 
						 | 
					5a5cf3a51d | ||
| 
						 | 
					3f23e8443e | ||
| 
						 | 
					a00f9b093c | ||
| 
						 | 
					5f538ce3f8 | ||
| 
						 | 
					ebcaa3d579 | ||
| 
						 | 
					60e26199a2 | ||
| 
						 | 
					11defd180c | ||
| 
						 | 
					c82c1691ee | ||
| 
						 | 
					364562f209 | ||
| 
						 | 
					5d9fc28fa7 | ||
| 
						 | 
					e5ec5c284f | ||
| 
						 | 
					a90e33ad71 | ||
| 
						 | 
					62ab21ce7d | ||
| 
						 | 
					cc8e8db1e5 | ||
| 
						 | 
					b19cba2016 | ||
| 
						 | 
					315a9c95d5 | ||
| 
						 | 
					e010ac9706 | ||
| 
						 | 
					e4c0a85da0 | ||
| 
						 | 
					d3e4cdd5b0 | ||
| 
						 | 
					763b812dc7 | ||
| 
						 | 
					3269dfb4ab | ||
| 
						 | 
					e816bd259f | ||
| 
						 | 
					a295408e09 | ||
| 
						 | 
					42a34c7cd7 | ||
| 
						 | 
					9a72751958 | ||
| 
						 | 
					314e6fa80b | ||
| 
						 | 
					b2b66f749a | ||
| 
						 | 
					708ed6fded | ||
| 
						 | 
					5c30fa50d6 | ||
| 
						 | 
					fc33c424d9 | ||
| 
						 | 
					b04d6dd0b1 | ||
| 
						 | 
					9c5f79c56a | ||
| 
						 | 
					ef5eea689a | ||
| 
						 | 
					fd191deb49 | ||
| 
						 | 
					e1da1ff7d3 | ||
| 
						 | 
					2b00ed7ef8 | ||
| 
						 | 
					d960ea959d | ||
| 
						 | 
					274842ec41 | ||
| 
						 | 
					c06da7c84a | ||
| 
						 | 
					cea117b509 | ||
| 
						 | 
					6078c938b2 | ||
| 
						 | 
					9e95dd4821 | ||
| 
						 | 
					0cc8b57d4f | ||
| 
						 | 
					2179e6e797 | ||
| 
						 | 
					7dde3d1825 | ||
| 
						 | 
					a0fe950b75 | ||
| 
						 | 
					44985e8884 | ||
| 
						 | 
					f03366bcbf | ||
| 
						 | 
					d43ea83033 | ||
| 
						 | 
					11bdba0007 | ||
| 
						 | 
					07e58aaa79 | ||
| 
						 | 
					a31ddd363b | ||
| 
						 | 
					ed9e10f2d8 | ||
| 
						 | 
					02ae3c2810 | ||
| 
						 | 
					669ebb5f71 | ||
| 
						 | 
					9a3e0e52cb | ||
| 
						 | 
					b0f856213d | ||
| 
						 | 
					6f4ff1f2bf | ||
| 
						 | 
					d3eea61f1f | ||
| 
						 | 
					d59d81fae8 | ||
| 
						 | 
					329ca40b6f | ||
| 
						 | 
					e71bd416f4 | ||
| 
						 | 
					ad66fc6cc2 | ||
| 
						 | 
					d12b44204b | ||
| 
						 | 
					4be2136de4 | ||
| 
						 | 
					c4dbed040b | ||
| 
						 | 
					366b62af2d | ||
| 
						 | 
					a6955aa486 | ||
| 
						 | 
					ad30341fa2 | ||
| 
						 | 
					23da55a9f1 | ||
| 
						 | 
					41e6292e7b | ||
| 
						 | 
					ae1d6f29d9 | ||
| 
						 | 
					ccfc1ddbef | ||
| 
						 | 
					002de1eae2 | ||
| 
						 | 
					63621bae81 | ||
| 
						 | 
					85f9e6c4b9 | ||
| 
						 | 
					967ec296c0 | ||
| 
						 | 
					c6aae9b1d7 | ||
| 
						 | 
					913c370c25 | ||
| 
						 | 
					e5472bbd21 | ||
| 
						 | 
					957c258c6d | ||
| 
						 | 
					abee109cd1 | ||
| 
						 | 
					502e5ae6e1 | ||
| 
						 | 
					b8417be1f2 | ||
| 
						 | 
					9e037431b4 | ||
| 
						 | 
					f71b3676bb | ||
| 
						 | 
					50fe7b5e35 | ||
| 
						 | 
					9fb253388b | ||
| 
						 | 
					8cf1786296 | ||
| 
						 | 
					51b17b299c | ||
| 
						 | 
					78882e4642 | ||
| 
						 | 
					8465a367a4 | ||
| 
						 | 
					3bcfe678ab | ||
| 
						 | 
					d5403f3a5b | ||
| 
						 | 
					26abb48533 | ||
| 
						 | 
					177848ed27 | ||
| 
						 | 
					656a2e93d7 | ||
| 
						 | 
					6b1220b61d | ||
| 
						 | 
					9d7330d879 | ||
| 
						 | 
					26a5954fa0 | ||
| 
						 | 
					01165e08e0 | ||
| 
						 | 
					6e1633a6c5 | ||
| 
						 | 
					a8ff0a21bf | ||
| 
						 | 
					b8bc6bed97 | ||
| 
						 | 
					1a4402038c | ||
| 
						 | 
					5ac51cc9b5 | ||
| 
						 | 
					c12159ce21 | ||
| 
						 | 
					4485503ecc | ||
| 
						 | 
					200ac588cc | ||
| 
						 | 
					0bb040822d | ||
| 
						 | 
					543fbe14ee | ||
| 
						 | 
					e02ab66120 | ||
| 
						 | 
					76c7c694c5 | ||
| 
						 | 
					f0057977b7 | ||
| 
						 | 
					e8e43f06af | ||
| 
						 | 
					04b35e86d5 | ||
| 
						 | 
					64ab85da4f | ||
| 
						 | 
					b8d7a13ea3 | ||
| 
						 | 
					78a76dc905 | ||
| 
						 | 
					5fa5fff0e9 | ||
| 
						 | 
					d323b3d816 | ||
| 
						 | 
					b685b5672a | ||
| 
						 | 
					8f6c2f87c8 | ||
| 
						 | 
					f30e8b11eb | ||
| 
						 | 
					8bd6d6a4de | ||
| 
						 | 
					b3a8f438fc | ||
| 
						 | 
					e78ddf0a95 | ||
| 
						 | 
					5f0366c2cb | ||
| 
						 | 
					779ca09775 | ||
| 
						 | 
					313f1a1e83 | ||
| 
						 | 
					21337f4776 | ||
| 
						 | 
					53a8e5655b | ||
| 
						 | 
					2d85585ae1 | ||
| 
						 | 
					63d109f7be | ||
| 
						 | 
					c904b6b5bf | ||
| 
						 | 
					6a27449922 | ||
| 
						 | 
					9a9c07f571 | ||
| 
						 | 
					4382204e1b | ||
| 
						 | 
					6d3114efe2 | ||
| 
						 | 
					b62baaed95 | ||
| 
						 | 
					9b391e531b | ||
| 
						 | 
					a0c7a6d22b | ||
| 
						 | 
					14424f7058 | ||
| 
						 | 
					6063dff8d0 | ||
| 
						 | 
					7fba9ed398 | ||
| 
						 | 
					53280a196b | ||
| 
						 | 
					0bf9a5704b | ||
| 
						 | 
					8182d17ae1 | ||
| 
						 | 
					69b1ac7dcd | ||
| 
						 | 
					b15507aac3 | ||
| 
						 | 
					6c2f583f51 | ||
| 
						 | 
					a72eaddda3 | ||
| 
						 | 
					dc050e45df | ||
| 
						 | 
					2fcbf13920 | ||
| 
						 | 
					099ae31523 | ||
| 
						 | 
					c2fcdf3a02 | ||
| 
						 | 
					2056a538b9 | ||
| 
						 | 
					cd1144dc24 | ||
| 
						 | 
					e9d068b913 | ||
| 
						 | 
					ec2ad57c32 | ||
| 
						 | 
					316adac511 | ||
| 
						 | 
					d7b11d4c33 | ||
| 
						 | 
					c52aa6df33 | ||
| 
						 | 
					a19b23b59f | ||
| 
						 | 
					4e26b2a65b | ||
| 
						 | 
					7c4feac6db | ||
| 
						 | 
					e01e364c37 | ||
| 
						 | 
					c13a3d7b84 | ||
| 
						 | 
					67805b6dc5 | ||
| 
						 | 
					0050ab2a3d | ||
| 
						 | 
					60e66c6cbf | ||
| 
						 | 
					5ad2a253e8 | ||
| 
						 | 
					b5d50e9298 | ||
| 
						 | 
					37f7362aca | ||
| 
						 | 
					bee198def5 | ||
| 
						 | 
					f09e479fd6 | ||
| 
						 | 
					80fe93bc33 | ||
| 
						 | 
					ea03ad3bee | ||
| 
						 | 
					feec421744 | ||
| 
						 | 
					634982840e | ||
| 
						 | 
					fb3c85ab2f | ||
| 
						 | 
					a9b7c3531c | ||
| 
						 | 
					a7ba0d908d | ||
| 
						 | 
					2fc70e2c5d | ||
| 
						 | 
					7ae3f0e70c | ||
| 
						 | 
					9afaa51e3f | ||
| 
						 | 
					c736a719f1 | ||
| 
						 | 
					37a547842b | ||
| 
						 | 
					b9f1d43921 | ||
| 
						 | 
					bec6423c02 | ||
| 
						 | 
					241b2b4ae3 | ||
| 
						 | 
					14d9b56937 | ||
| 
						 | 
					1c3766eb46 | ||
| 
						 | 
					70024d61eb | ||
| 
						 | 
					2085f133d6 | ||
| 
						 | 
					2a045dfceb | ||
| 
						 | 
					893cbaaf2f | ||
| 
						 | 
					6e61939382 | ||
| 
						 | 
					015a618172 | ||
| 
						 | 
					2a8b91cdb9 | ||
| 
						 | 
					bebd5dbc5a | ||
| 
						 | 
					018dbfe058 | ||
| 
						 | 
					c6ea597817 | ||
| 
						 | 
					175b00c0a2 | ||
| 
						 | 
					5ebc6e305e | ||
| 
						 | 
					993600761f | ||
| 
						 | 
					1d9fff80b7 | ||
| 
						 | 
					c712b84dd5 | ||
| 
						 | 
					dcf8dd4b5e | ||
| 
						 | 
					ba26c3fb22 | ||
| 
						 | 
					41563607a8 | ||
| 
						 | 
					2d4dcfb740 | ||
| 
						 | 
					34854e70cf | ||
| 
						 | 
					758d9fe852 | ||
| 
						 | 
					6a6c0e7a73 | ||
| 
						 | 
					ee44eec3e1 | ||
| 
						 | 
					eccd0d8e37 | ||
| 
						 | 
					983be0ec60 | ||
| 
						 | 
					243a45d840 | ||
| 
						 | 
					60ec804047 | ||
| 
						 | 
					c53e9ccf4a | ||
| 
						 | 
					6e8e0418fc | ||
| 
						 | 
					e9eb52305f | ||
| 
						 | 
					8501ae748c | ||
| 
						 | 
					da59692067 | ||
| 
						 | 
					bae77c0a46 | ||
| 
						 | 
					b42bc7329e | ||
| 
						 | 
					9b3c2b6ae2 | ||
| 
						 | 
					833b6df969 | ||
| 
						 | 
					0b45431139 | ||
| 
						 | 
					5d1349031c | ||
| 
						 | 
					82388a5e4c | ||
| 
						 | 
					74816fed6c | ||
| 
						 | 
					b4c9789d5f | ||
| 
						 | 
					f96fadc074 | ||
| 
						 | 
					f6b1173437 | ||
| 
						 | 
					346992c366 | ||
| 
						 | 
					ab4086bc24 | ||
| 
						 | 
					d8e7f2b2c7 | ||
| 
						 | 
					93fcb94b62 | ||
| 
						 | 
					32a446cf19 | ||
| 
						 | 
					94459cab98 | ||
| 
						 | 
					158588640a | ||
| 
						 | 
					f00f050d1b | ||
| 
						 | 
					c4f34c60a5 | ||
| 
						 | 
					371ef80dc3 | ||
| 
						 | 
					84b4e9ff7c | ||
| 
						 | 
					677a74fa1b | ||
| 
						 | 
					8a076d1dba | ||
| 
						 | 
					970722483c | ||
| 
						 | 
					31443724c6 | ||
| 
						 | 
					0e7614919b | ||
| 
						 | 
					2bf72937d2 | ||
| 
						 | 
					4e555c7b32 | ||
| 
						 | 
					bd7021d05b | ||
| 
						 | 
					1a14555605 | ||
| 
						 | 
					cb3fb371ea | ||
| 
						 | 
					6c6dda1b74 | ||
| 
						 | 
					a712808006 | ||
| 
						 | 
					e19c203728 | ||
| 
						 | 
					8817779f23 | ||
| 
						 | 
					3e5a32671c | ||
| 
						 | 
					d34f32b39e | ||
| 
						 | 
					c85a77e0b1 | ||
| 
						 | 
					9406e517e6 | ||
| 
						 | 
					4a56049225 | ||
| 
						 | 
					04ea4b4d75 | ||
| 
						 | 
					5b6b6283f3 | ||
| 
						 | 
					38f07ce0fb | ||
| 
						 | 
					987cdebefb | ||
| 
						 | 
					6b978db369 | ||
| 
						 | 
					5840c8cb70 | ||
| 
						 | 
					44f2024bab | ||
| 
						 | 
					410942e9df | ||
| 
						 | 
					5b3730feae | ||
| 
						 | 
					38f797ccd6 | ||
| 
						 | 
					553c5a7501 | ||
| 
						 | 
					bbba9d568f | ||
| 
						 | 
					11e43dd021 | ||
| 
						 | 
					e8ddf84871 | ||
| 
						 | 
					67f04d2d5f | ||
| 
						 | 
					8f646eef45 | ||
| 
						 | 
					d26e932858 | ||
| 
						 | 
					73b9d0840c | ||
| 
						 | 
					2ea4326c40 | ||
| 
						 | 
					8b80ac2877 | ||
| 
						 | 
					233237740d | ||
| 
						 | 
					f5cdac38bd | ||
| 
						 | 
					760565dcad | ||
| 
						 | 
					b5d97b3d94 | ||
| 
						 | 
					4a6cc54eb5 | ||
| 
						 | 
					61133545f6 | ||
| 
						 | 
					bf87d13f5b | ||
| 
						 | 
					efaf688650 | ||
| 
						 | 
					9a5c21c16f | ||
| 
						 | 
					06ffb47ef2 | ||
| 
						 | 
					1acbda97e0 | ||
| 
						 | 
					d6460aff36 | ||
| 
						 | 
					a357f77c4c | ||
| 
						 | 
					d5bdd2b2f9 | ||
| 
						 | 
					562d2de303 | ||
| 
						 | 
					1f68fa19c7 | ||
| 
						 | 
					677ddd6160 | ||
| 
						 | 
					228e627475 | ||
| 
						 | 
					ec4e653c6f | ||
| 
						 | 
					3916d1e6cb | ||
| 
						 | 
					387aaba810 | ||
| 
						 | 
					9f3d9da119 | ||
| 
						 | 
					76c24a0d82 | ||
| 
						 | 
					ffd65a1956 | ||
| 
						 | 
					de8947f92f | ||
| 
						 | 
					d2b4dedbe4 | ||
| 
						 | 
					34865ffb4a | ||
| 
						 | 
					62970da675 | ||
| 
						 | 
					8ed31c48e0 | ||
| 
						 | 
					13d40e33a4 | ||
| 
						 | 
					c765213aaa | ||
| 
						 | 
					983bf93a24 | ||
| 
						 | 
					2f8085af15 | ||
| 
						 | 
					88a4dc2795 | ||
| 
						 | 
					b5112096d7 | ||
| 
						 | 
					fc80c714e8 | ||
| 
						 | 
					84bc23b92f | ||
| 
						 | 
					d90472dd64 | ||
| 
						 | 
					3b63ed8230 | ||
| 
						 | 
					e75441e027 | ||
| 
						 | 
					0ae8b51230 | ||
| 
						 | 
					547c136b4f | ||
| 
						 | 
					4ed13bde55 | ||
| 
						 | 
					80e01deba0 | ||
| 
						 | 
					fb9ae9d0e2 | ||
| 
						 | 
					dd54d8551b | ||
| 
						 | 
					205f8b266c | ||
| 
						 | 
					c4ce9ac4de | ||
| 
						 | 
					0e4e28fdda | ||
| 
						 | 
					db2370a12f | ||
| 
						 | 
					d1d35ba85f | ||
| 
						 | 
					2ab2e7675c | ||
| 
						 | 
					0472629222 | ||
| 
						 | 
					c4f7570a23 | ||
| 
						 | 
					d26cfd5791 | ||
| 
						 | 
					b7ffc6bb45 | ||
| 
						 | 
					8a96aec567 | ||
| 
						 | 
					5cd9f57137 | ||
| 
						 | 
					702664e959 | ||
| 
						 | 
					18d87edd6d | ||
| 
						 | 
					dc59795629 | ||
| 
						 | 
					cb9bb31f7d | ||
| 
						 | 
					02706bec94 | ||
| 
						 | 
					7657186bf6 | ||
| 
						 | 
					42ac24448c | ||
| 
						 | 
					31891b55a4 | ||
| 
						 | 
					aa47ac4c06 | ||
| 
						 | 
					b01151e81c | ||
| 
						 | 
					67bd6f9ccd | ||
| 
						 | 
					4869fa285b | ||
| 
						 | 
					d221e01406 | ||
| 
						 | 
					874fc8228a | ||
| 
						 | 
					6f752c64bc | ||
| 
						 | 
					ccb7950c4c | ||
| 
						 | 
					750e771376 | ||
| 
						 | 
					7012a4a291 | ||
| 
						 | 
					40ab20a252 | ||
| 
						 | 
					6af315e50c | ||
| 
						 | 
					861b5e608b | ||
| 
						 | 
					f61917594e | ||
| 
						 | 
					0ddab51ad8 | ||
| 
						 | 
					9798432f56 | ||
| 
						 | 
					5faf52619d | ||
| 
						 | 
					f8b4ba80e0 | ||
| 
						 | 
					527f70e540 | ||
| 
						 | 
					19f66c7575 | ||
| 
						 | 
					b7721deb02 | ||
| 
						 | 
					5ba188ab2d | ||
| 
						 | 
					eadfd78c2e | ||
| 
						 | 
					4d815c9990 | ||
| 
						 | 
					176981b529 | ||
| 
						 | 
					85baebd0d4 | ||
| 
						 | 
					ac022b2e30 | ||
| 
						 | 
					f169b750b8 | ||
| 
						 | 
					86295eef13 | ||
| 
						 | 
					32d60b2714 | ||
| 
						 | 
					0a3065a2f2 | ||
| 
						 | 
					b98faaa8c0 | ||
| 
						 | 
					73772323c9 | ||
| 
						 | 
					98389066e2 | ||
| 
						 | 
					fb53ed4c1f | ||
| 
						 | 
					e719eb5b81 | ||
| 
						 | 
					3858063bcd | ||
| 
						 | 
					d4f5fea840 | ||
| 
						 | 
					22c1d48cb2 | ||
| 
						 | 
					e7cefd684b | ||
| 
						 | 
					d2485e4f20 | ||
| 
						 | 
					160d6b26b0 | ||
| 
						 | 
					17d61e4f29 | ||
| 
						 | 
					446b9467da | ||
| 
						 | 
					3970a7056c | ||
| 
						 | 
					74068a6d1b | ||
| 
						 | 
					8c83422fe2 | ||
| 
						 | 
					61a1e3cd01 | ||
| 
						 | 
					89cac6f25c | ||
| 
						 | 
					62082293c5 | ||
| 
						 | 
					153fd2752c | ||
| 
						 | 
					e649a40f5d | ||
| 
						 | 
					32d76a5b57 | ||
| 
						 | 
					14aa3fa258 | ||
| 
						 | 
					f5394cccb1 | ||
| 
						 | 
					64dd9c7656 | ||
| 
						 | 
					16ae0c6466 | ||
| 
						 | 
					6a2e21ec8c | ||
| 
						 | 
					120f17ce04 | ||
| 
						 | 
					ab938bb9bd | ||
| 
						 | 
					33820cd2ac | ||
| 
						 | 
					41def21f91 | ||
| 
						 | 
					d118312922 | ||
| 
						 | 
					82b93e4945 | ||
| 
						 | 
					e36fb1ecda | ||
| 
						 | 
					e4a1788614 | ||
| 
						 | 
					7b23eff9cf | ||
| 
						 | 
					67ff8e3ea3 | ||
| 
						 | 
					2248599ae1 | ||
| 
						 | 
					29350b363b | ||
| 
						 | 
					83c470a443 | ||
| 
						 | 
					ab96e2d6e9 | ||
| 
						 | 
					6b81cf4bc9 | ||
| 
						 | 
					0d9301539e | ||
| 
						 | 
					4a9e12542d | ||
| 
						 | 
					21b4105454 | ||
| 
						 | 
					d7648d94ca | ||
| 
						 | 
					883343ba63 | ||
| 
						 | 
					16b5dc710f | ||
| 
						 | 
					686d767053 | ||
| 
						 | 
					ed3176dd6b | ||
| 
						 | 
					6a99ab098c | ||
| 
						 | 
					b03adde546 | ||
| 
						 | 
					e6034ea299 | ||
| 
						 | 
					c7f51ebeab | ||
| 
						 | 
					9a820d7a98 | ||
| 
						 | 
					8dbaf534c8 | ||
| 
						 | 
					91f483c591 | ||
| 
						 | 
					c5b448038f | ||
| 
						 | 
					c4ff5eb0ca | ||
| 
						 | 
					0859cd2444 | ||
| 
						 | 
					59b45a90cc | ||
| 
						 | 
					f661475962 | ||
| 
						 | 
					54b02ecf09 | ||
| 
						 | 
					4551e7ce49 | ||
| 
						 | 
					064bc3ecbc | ||
| 
						 | 
					cf38a4c470 | ||
| 
						 | 
					aacc79a3a3 | ||
| 
						 | 
					9864bf703d | ||
| 
						 | 
					289a42f050 | ||
| 
						 | 
					ade1e79b37 | ||
| 
						 | 
					2415724d5f | ||
| 
						 | 
					5463177f1f | ||
| 
						 | 
					4efd751eda | ||
| 
						 | 
					2337efc3b1 | ||
| 
						 | 
					b942a25a45 | ||
| 
						 | 
					beab9a9696 | ||
| 
						 | 
					177dbc7be0 | ||
| 
						 | 
					f2e71edcbd | ||
| 
						 | 
					fad6e5a5bc | ||
| 
						 | 
					52f6c437fe | ||
| 
						 | 
					80a8be6319 | ||
| 
						 | 
					043d70fcdf | ||
| 
						 | 
					4f7e958969 | ||
| 
						 | 
					53143910a1 | ||
| 
						 | 
					95656cd7f3 | ||
| 
						 | 
					d8f79b263d | ||
| 
						 | 
					51da8552c3 | ||
| 
						 | 
					7e42cb61f7 | ||
| 
						 | 
					6c038680f9 | ||
| 
						 | 
					291a908f19 | ||
| 
						 | 
					b264a03f89 | ||
| 
						 | 
					7472ede32a | ||
| 
						 | 
					b5065e462b | ||
| 
						 | 
					8dd799b4bd | ||
| 
						 | 
					a38520c90d | ||
| 
						 | 
					3050ae57c0 | ||
| 
						 | 
					01205f772c | ||
| 
						 | 
					06ad5be3af | ||
| 
						 | 
					2fe3829e5e | ||
| 
						 | 
					a0c8b9bc68 | ||
| 
						 | 
					0406b1facf | ||
| 
						 | 
					65dbee01e5 | ||
| 
						 | 
					b1080f7c9a | ||
| 
						 | 
					7bfd58d41f | ||
| 
						 | 
					3851c6aae2 | ||
| 
						 | 
					ae03fa7d8e | ||
| 
						 | 
					8a14dd25a9 | ||
| 
						 | 
					e0bea7d541 | ||
| 
						 | 
					534a8a05f3 | ||
| 
						 | 
					f5b8a26d9a | ||
| 
						 | 
					cf51f7fb65 | ||
| 
						 | 
					4d1f3d3cd0 | ||
| 
						 | 
					f70b87b4c5 | ||
| 
						 | 
					0e26355348 | ||
| 
						 | 
					246ea56eab | ||
| 
						 | 
					7c1bba315b | ||
| 
						 | 
					9395cad379 | ||
| 
						 | 
					c5b2e85b47 | ||
| 
						 | 
					38f8087281 | ||
| 
						 | 
					e3fa7d021e | ||
| 
						 | 
					a1813e2b2d | ||
| 
						 | 
					2e62458eef | ||
| 
						 | 
					bb9e5565f2 | ||
| 
						 | 
					29102befa6 | ||
| 
						 | 
					9d1145598a | ||
| 
						 | 
					065e466f1a | ||
| 
						 | 
					3ac00f32af | ||
| 
						 | 
					21bb852750 | ||
| 
						 | 
					83bab78bda | ||
| 
						 | 
					894ec46ef4 | ||
| 
						 | 
					4eb1d3eb1b | ||
| 
						 | 
					945423e83a | ||
| 
						 | 
					9fd33c0b96 | ||
| 
						 | 
					3c09f2d2bd | ||
| 
						 | 
					7b4bf6a22c | ||
| 
						 | 
					b5b77f6367 | ||
| 
						 | 
					5a8097a4d5 | ||
| 
						 | 
					9cdf6fb64b | ||
| 
						 | 
					a137223b4f | ||
| 
						 | 
					52e1ce9518 | ||
| 
						 | 
					8127a34f98 | ||
| 
						 | 
					2dcb8b674f | ||
| 
						 | 
					1e3b1b6e47 | ||
| 
						 | 
					9cdaae94cc | ||
| 
						 | 
					316e74be74 | ||
| 
						 | 
					af69c4f4f7 | ||
| 
						 | 
					ad9648a215 | ||
| 
						 | 
					1576f3319e | ||
| 
						 | 
					8ac90316d9 | ||
| 
						 | 
					35ba5c826d | ||
| 
						 | 
					4f4ffa98b5 | ||
| 
						 | 
					b7d92c3e03 | ||
| 
						 | 
					4ecf939452 | ||
| 
						 | 
					7ef6b05ef1 | ||
| 
						 | 
					695f95aad1 | ||
| 
						 | 
					2a6ea6d7a7 | ||
| 
						 | 
					f5e0ff2170 | ||
| 
						 | 
					814d176b86 | ||
| 
						 | 
					3955b31362 | ||
| 
						 | 
					4b3fb5a01c | ||
| 
						 | 
					67abd4cd47 | ||
| 
						 | 
					58f4af7973 | ||
| 
						 | 
					99befd3a15 | ||
| 
						 | 
					3acda85c2b | ||
| 
						 | 
					dbb69797cf | ||
| 
						 | 
					2910880b15 | ||
| 
						 | 
					8b5f0abef1 | ||
| 
						 | 
					10b5327b19 | ||
| 
						 | 
					4ba1eb26fa | ||
| 
						 | 
					444f6427b8 | ||
| 
						 | 
					a173e07eec | ||
| 
						 | 
					3de85777de | ||
| 
						 | 
					f4c5314890 | ||
| 
						 | 
					1225ad58bd | ||
| 
						 | 
					951fdeba67 | ||
| 
						 | 
					327b46cced | ||
| 
						 | 
					80d301257c | ||
| 
						 | 
					0e59182945 | ||
| 
						 | 
					7270d5ce26 | ||
| 
						 | 
					a142d419d2 | ||
| 
						 | 
					23cf63f550 | ||
| 
						 | 
					13ee90bbd4 | ||
| 
						 | 
					754d6c3abd | ||
| 
						 | 
					c6f6e81238 | ||
| 
						 | 
					7803a1a28a | ||
| 
						 | 
					3d647b9a98 | ||
| 
						 | 
					090a7f38be | ||
| 
						 | 
					8ad47a13e5 | ||
| 
						 | 
					497cc6bfaf | ||
| 
						 | 
					d5be114c07 | ||
| 
						 | 
					6e43a4ccce | ||
| 
						 | 
					a07dcfd850 | ||
| 
						 | 
					321511a5be | ||
| 
						 | 
					c5297b9fd9 | ||
| 
						 | 
					7e00076586 | ||
| 
						 | 
					9a8ba19b73 | ||
| 
						 | 
					41e776f9db | ||
| 
						 | 
					5c2d4a6bdd | ||
| 
						 | 
					83b709401c | ||
| 
						 | 
					3590fffeae | ||
| 
						 | 
					5e2e87cc8d | ||
| 
						 | 
					b1bdba7db5 | ||
| 
						 | 
					e3d342df96 | ||
| 
						 | 
					ff54a74b4d | ||
| 
						 | 
					ccf65be0a4 | ||
| 
						 | 
					7dfef13224 | ||
| 
						 | 
					0b85e53af2 | ||
| 
						 | 
					26cfb21c00 | ||
| 
						 | 
					b7acdbcb4c | ||
| 
						 | 
					6e1e9caa32 | ||
| 
						 | 
					f71725de6e | ||
| 
						 | 
					26fe6da93b | ||
| 
						 | 
					8d4ac69175 | ||
| 
						 | 
					4f5a6a33b4 | ||
| 
						 | 
					ec8ee4404b | ||
| 
						 | 
					e47b5d4e6c | ||
| 
						 | 
					494c40fd98 | ||
| 
						 | 
					d3b414724b | ||
| 
						 | 
					38181fbc74 | ||
| 
						 | 
					8847e61fca | ||
| 
						 | 
					95b84adb9b | ||
| 
						 | 
					b34d161703 | ||
| 
						 | 
					d88b3d3d5d | ||
| 
						 | 
					f2fb9039bd | ||
| 
						 | 
					a28b32aa45 | ||
| 
						 | 
					1ba47e7af9 | ||
| 
						 | 
					9359498b06 | ||
| 
						 | 
					553082e24a | ||
| 
						 | 
					dc28a9c0c1 | ||
| 
						 | 
					1faef62d59 | ||
| 
						 | 
					0d0d5e7ee3 | ||
| 
						 | 
					4f567d0f81 | ||
| 
						 | 
					f23d923fd3 | ||
| 
						 | 
					10d6d8b2ae | ||
| 
						 | 
					358e08b95d | ||
| 
						 | 
					e181eda253 | ||
| 
						 | 
					7d3f5d7ac1 | ||
| 
						 | 
					37c7a695a2 | ||
| 
						 | 
					07f107ae20 | ||
| 
						 | 
					5c14b3be6d | ||
| 
						 | 
					1dc15ec1bc | ||
| 
						 | 
					6a9ed44088 | ||
| 
						 | 
					bdb0620529 | ||
| 
						 | 
					be9ea07e87 | ||
| 
						 | 
					4cf14e9f85 | ||
| 
						 | 
					d02b2c4308 | ||
| 
						 | 
					1687a9eb94 | ||
| 
						 | 
					344c6a3725 | ||
| 
						 | 
					f966dad306 | ||
| 
						 | 
					887f41c062 | ||
| 
						 | 
					4b1350e467 | ||
| 
						 | 
					22a0c57746 | ||
| 
						 | 
					fec571f5b0 | ||
| 
						 | 
					976285ccbc | ||
| 
						 | 
					9b3b7ad22e | ||
| 
						 | 
					1b8ac7c6b5 | ||
| 
						 | 
					bd2db87237 | ||
| 
						 | 
					df3ca59116 | ||
| 
						 | 
					3ca4509ae9 | ||
| 
						 | 
					d531926246 | ||
| 
						 | 
					357fdb60b6 | ||
| 
						 | 
					b6f855cb9b | ||
| 
						 | 
					b6646310e8 | ||
| 
						 | 
					070da3c08f | ||
| 
						 | 
					6b7f6369ec | ||
| 
						 | 
					309e3ce4f9 | ||
| 
						 | 
					8a4eb8ed45 | ||
| 
						 | 
					eee70dcf8e | ||
| 
						 | 
					c0c885a1f3 | ||
| 
						 | 
					a7488672bf | ||
| 
						 | 
					c1312cab1f | ||
| 
						 | 
					8c833d375a | ||
| 
						 | 
					18f14ae23d | ||
| 
						 | 
					98adcdd466 | ||
| 
						 | 
					a2bd47c567 | ||
| 
						 | 
					7b3c308eb0 | ||
| 
						 | 
					1be1d3cfb8 | ||
| 
						 | 
					b970469df9 | ||
| 
						 | 
					80a324386b | ||
| 
						 | 
					163518778c | ||
| 
						 | 
					7fd1ce4dc3 | ||
| 
						 | 
					c78ee11c41 | ||
| 
						 | 
					4435e3b269 | ||
| 
						 | 
					b96a0dba90 | ||
| 
						 | 
					30dfc00a54 | ||
| 
						 | 
					fe5979cfdb | ||
| 
						 | 
					a1f7987ad8 | ||
| 
						 | 
					ac269a8f68 | ||
| 
						 | 
					35944744f8 | ||
| 
						 | 
					4b1c0bd1e7 | ||
| 
						 | 
					b7ff86fa2b | ||
| 
						 | 
					2c27e4ee76 | ||
| 
						 | 
					6ac9e67bd7 | ||
| 
						 | 
					8726a6b6ed | ||
| 
						 | 
					2f26069a41 | ||
| 
						 | 
					d6c155ff47 | ||
| 
						 | 
					15360e5e51 | ||
| 
						 | 
					e587a56fc0 | ||
| 
						 | 
					113531432a | ||
| 
						 | 
					bfa74c2649 | ||
| 
						 | 
					6bb215f56c | ||
| 
						 | 
					8b37844e5f | ||
| 
						 | 
					1445e62312 | ||
| 
						 | 
					4781ff88fd | ||
| 
						 | 
					c28e15c682 | ||
| 
						 | 
					fe0585ec91 | ||
| 
						 | 
					18c0b49f3d | ||
| 
						 | 
					5d69c956ee | ||
| 
						 | 
					93aa22ea08 | ||
| 
						 | 
					b7c6bc20be | ||
| 
						 | 
					9bb4a95e08 | ||
| 
						 | 
					0966ddafaa | ||
| 
						 | 
					c073625fb9 | ||
| 
						 | 
					85dd4bfb8d | ||
| 
						 | 
					5ae34aa8e1 | ||
| 
						 | 
					0eb8414750 | ||
| 
						 | 
					09717d3fc8 | ||
| 
						 | 
					81a3246a56 | ||
| 
						 | 
					4c8fbe9abf | ||
| 
						 | 
					c0d448f778 | ||
| 
						 | 
					16e9a9eaef | ||
| 
						 | 
					0d7446c134 | ||
| 
						 | 
					a4752673bb | ||
| 
						 | 
					9a0d5c4ed8 | ||
| 
						 | 
					d85bc18178 | ||
| 
						 | 
					f0e66d8c76 | ||
| 
						 | 
					af114358c8 | ||
| 
						 | 
					ffe17a8197 | ||
| 
						 | 
					2459e1e268 | ||
| 
						 | 
					a34a4af36a | ||
| 
						 | 
					bf51f05a50 | ||
| 
						 | 
					5d94ff5974 | ||
| 
						 | 
					0d4ddfa743 | ||
| 
						 | 
					56c9899832 | ||
| 
						 | 
					7b3fba1ad5 | ||
| 
						 | 
					700e3b685a | ||
| 
						 | 
					3e1caa6185 | ||
| 
						 | 
					50eafb7668 | ||
| 
						 | 
					25559ac02e | ||
| 
						 | 
					51a87fa652 | ||
| 
						 | 
					b2dad0342f | ||
| 
						 | 
					a5abce7982 | ||
| 
						 | 
					de3f22b288 | ||
| 
						 | 
					be5cc378c8 | ||
| 
						 | 
					4afc4aed73 | ||
| 
						 | 
					a4e1ac7952 | ||
| 
						 | 
					f84d2b4d36 | ||
| 
						 | 
					b4c7876e4b | ||
| 
						 | 
					4207ef3d27 | ||
| 
						 | 
					b3572269a4 | ||
| 
						 | 
					097d449cc1 | ||
| 
						 | 
					7f44713487 | ||
| 
						 | 
					b7a6b78e0c | ||
| 
						 | 
					855a9eff76 | ||
| 
						 | 
					8e34e75100 | ||
| 
						 | 
					4be60ac155 | ||
| 
						 | 
					5ec4501b9d | ||
| 
						 | 
					e80f566a14 | ||
| 
						 | 
					1729918777 | ||
| 
						 | 
					cef290c6b4 | ||
| 
						 | 
					539e34b5df | ||
| 
						 | 
					765683403f | ||
| 
						 | 
					cca9fca894 | ||
| 
						 | 
					2b403db811 | ||
| 
						 | 
					03e7b7c95f | ||
| 
						 | 
					1a05a90f1c | ||
| 
						 | 
					dcea109bb5 | ||
| 
						 | 
					d46a573bbe | ||
| 
						 | 
					7d0d19708a | ||
| 
						 | 
					09f14efade | ||
| 
						 | 
					87753cda49 | ||
| 
						 | 
					66f6f43056 | ||
| 
						 | 
					86f059dcfb | ||
| 
						 | 
					5931d43a36 | ||
| 
						 | 
					8475a0df2f | ||
| 
						 | 
					ccc4c9c02c | ||
| 
						 | 
					16edb15600 | ||
| 
						 | 
					9e7534a46e | ||
| 
						 | 
					737dddaec0 | ||
| 
						 | 
					b5c90c9b05 | ||
| 
						 | 
					c3ecd552f5 | ||
| 
						 | 
					56f0227c92 | ||
| 
						 | 
					dcb5a4df01 | ||
| 
						 | 
					fd64213c2f | ||
| 
						 | 
					fc2c06754c | ||
| 
						 | 
					7ec200f4d1 | ||
| 
						 | 
					e53f139925 | ||
| 
						 | 
					61599ceb7b | ||
| 
						 | 
					6f8e3f106a | ||
| 
						 | 
					8fd676f73e | ||
| 
						 | 
					98a8103a3b | ||
| 
						 | 
					94043b1150 | ||
| 
						 | 
					1b02ad5e8a | ||
| 
						 | 
					4897587615 | ||
| 
						 | 
					8e2f57c82e | ||
| 
						 | 
					c3323b1902 | ||
| 
						 | 
					59c063dfd3 | ||
| 
						 | 
					8c16696f47 | ||
| 
						 | 
					f68950db67 | ||
| 
						 | 
					710e370c34 | ||
| 
						 | 
					7bb6d76d14 | ||
| 
						 | 
					2467f814a8 | ||
| 
						 | 
					a654ef9ee6 | ||
| 
						 | 
					c1688733c1 | ||
| 
						 | 
					cd73a733c7 | ||
| 
						 | 
					8ef8e949bd | ||
| 
						 | 
					49111a63e6 | ||
| 
						 | 
					ee4ecf5155 | ||
| 
						 | 
					3478253e5a | ||
| 
						 | 
					6ddc59dadf | ||
| 
						 | 
					dc8688b8dc | ||
| 
						 | 
					865e495188 | ||
| 
						 | 
					d3c0ed007e | ||
| 
						 | 
					0dc79376e7 | ||
| 
						 | 
					3ccbed1022 | ||
| 
						 | 
					377e43fbb9 | ||
| 
						 | 
					1f2b042b95 | ||
| 
						 | 
					fd49ba6c18 | ||
| 
						 | 
					facfa19cdd | ||
| 
						 | 
					3347ced899 | ||
| 
						 | 
					592686bee9 | ||
| 
						 | 
					f471a293ea | ||
| 
						 | 
					c688166066 | ||
| 
						 | 
					5dcd2710d4 | ||
| 
						 | 
					16d8383625 | ||
| 
						 | 
					6b49fd7483 | ||
| 
						 | 
					f10985fc50 | ||
| 
						 | 
					edeac97773 | ||
| 
						 | 
					40498ffdd0 | ||
| 
						 | 
					fd884a3cd2 | ||
| 
						 | 
					1887629c5c | ||
| 
						 | 
					d3be5b2725 | ||
| 
						 | 
					2e973684c0 | ||
| 
						 | 
					ab909fc4c2 | ||
| 
						 | 
					4cd5220d27 | ||
| 
						 | 
					24d47a6e07 | ||
| 
						 | 
					8a66584db4 | ||
| 
						 | 
					186f433e40 | ||
| 
						 | 
					736a40fec9 | ||
| 
						 | 
					4245400ae4 | ||
| 
						 | 
					629bba6b35 | ||
| 
						 | 
					f6f2a9e4be | ||
| 
						 | 
					8bfcae65ef | ||
| 
						 | 
					96cf615e9d | ||
| 
						 | 
					e9b3e1d031 | ||
| 
						 | 
					7167cde020 | ||
| 
						 | 
					2a80a4c521 | ||
| 
						 | 
					83f11b1c9b | ||
| 
						 | 
					a00e7f0f5e | ||
| 
						 | 
					e1607f5705 | ||
| 
						 | 
					cce931f27d | ||
| 
						 | 
					34089c93bb | ||
| 
						 | 
					beb61ef429 | ||
| 
						 | 
					72aff74798 | ||
| 
						 | 
					8e715af480 | ||
| 
						 | 
					2730842559 | ||
| 
						 | 
					cac269cf91 | ||
| 
						 | 
					249036ada0 | ||
| 
						 | 
					18d80b9e8f | ||
| 
						 | 
					b2d8e0b476 | ||
| 
						 | 
					225a652021 | ||
| 
						 | 
					38b1d96750 | ||
| 
						 | 
					2f069ad3e2 | ||
| 
						 | 
					a3dbe03e80 | ||
| 
						 | 
					f4bef25b5e | ||
| 
						 | 
					ebf7d22503 | ||
| 
						 | 
					9296d9deb8 | ||
| 
						 | 
					7b95a25adc | ||
| 
						 | 
					82d6cfa7fc | ||
| 
						 | 
					48750d5fc7 | ||
| 
						 | 
					4f0258ec09 | ||
| 
						 | 
					db4d0d307a | ||
| 
						 | 
					2baf22e184 | ||
| 
						 | 
					21d5aead47 | ||
| 
						 | 
					f40c9b83df | ||
| 
						 | 
					b9e082b811 | ||
| 
						 | 
					0bfa601a9f | ||
| 
						 | 
					e356420123 | ||
| 
						 | 
					e8f85cba0f | ||
| 
						 | 
					1aba99b1e7 | ||
| 
						 | 
					12815d7cd6 | ||
| 
						 | 
					9deb76ce3e | ||
| 
						 | 
					c98676068e | ||
| 
						 | 
					b534f74bf4 | ||
| 
						 | 
					411e9b0c45 | ||
| 
						 | 
					3fa1879f6a | ||
| 
						 | 
					d30cf22c12 | ||
| 
						 | 
					557b6cfd3f | ||
| 
						 | 
					84bf03b365 | ||
| 
						 | 
					34342bcd19 | ||
| 
						 | 
					5322a86313 | ||
| 
						 | 
					1dc50e21c4 | ||
| 
						 | 
					1eddbb1b47 | ||
| 
						 | 
					bb8591cf54 | ||
| 
						 | 
					a7913a62a9 | ||
| 
						 | 
					6d1b37b3da | ||
| 
						 | 
					34750cc738 | ||
| 
						 | 
					af677c4e1d | ||
| 
						 | 
					298076e00f | ||
| 
						 | 
					0d2cdd9773 | ||
| 
						 | 
					eb5d3b5a7c | ||
| 
						 | 
					7663775971 | ||
| 
						 | 
					fe46572f2b | ||
| 
						 | 
					a6d4d3eeac | ||
| 
						 | 
					62f97f1817 | ||
| 
						 | 
					253ff7b2ad | ||
| 
						 | 
					c274e51654 | ||
| 
						 | 
					1239e48304 | ||
| 
						 | 
					52313cbac9 | ||
| 
						 | 
					071218a201 | ||
| 
						 | 
					f0d6cc23ae | ||
| 
						 | 
					ceefe2e248 | ||
| 
						 | 
					9a2aed7d7a | ||
| 
						 | 
					a91a75355d | ||
| 
						 | 
					01acbfa1a5 | ||
| 
						 | 
					49b2896a3b | ||
| 
						 | 
					39af394a1c | ||
| 
						 | 
					5c7dcc6c33 | ||
| 
						 | 
					6c5ea2af27 | ||
| 
						 | 
					93e084e097 | ||
| 
						 | 
					1a61bcecfc | ||
| 
						 | 
					3d9fb701e2 | ||
| 
						 | 
					19a568a983 | ||
| 
						 | 
					70c3f6a8dd | ||
| 
						 | 
					bb999d8213 | ||
| 
						 | 
					121197bc87 | ||
| 
						 | 
					d5dd8e0fdc | ||
| 
						 | 
					c368800877 | ||
| 
						 | 
					6eb58549a9 | ||
| 
						 | 
					95def48071 | ||
| 
						 | 
					2ee6c33412 | ||
| 
						 | 
					be7ce435c0 | ||
| 
						 | 
					f4252f8672 | ||
| 
						 | 
					f4f961c4ea | ||
| 
						 | 
					e2fe03df8e | ||
| 
						 | 
					19b284c214 | ||
| 
						 | 
					6b3e3095ea | ||
| 
						 | 
					fd2aad1d9b | ||
| 
						 | 
					d239fc5d04 | ||
| 
						 | 
					ec4da97a35 | ||
| 
						 | 
					bb48ccedd7 | ||
| 
						 | 
					afc0dfb141 | ||
| 
						 | 
					8e87223195 | ||
| 
						 | 
					be1cece69b | ||
| 
						 | 
					45be6d6645 | ||
| 
						 | 
					d4db35c125 | ||
| 
						 | 
					94c6a5eeab | ||
| 
						 | 
					35292e794a | ||
| 
						 | 
					c2043a7f94 | ||
| 
						 | 
					e752588e8d | ||
| 
						 | 
					8f30dbd4f0 | ||
| 
						 | 
					29eb80dbd1 | ||
| 
						 | 
					6cf6f9a21e | ||
| 
						 | 
					6af6a2bbe8 | ||
| 
						 | 
					2576ac1c76 | ||
| 
						 | 
					bfeea8e6b7 | ||
| 
						 | 
					2f89f2311c | ||
| 
						 | 
					75e5967afd | ||
| 
						 | 
					1003628103 | ||
| 
						 | 
					3451e888b9 | ||
| 
						 | 
					12dc142a28 | ||
| 
						 | 
					cb80670885 | ||
| 
						 | 
					c189687188 | ||
| 
						 | 
					595016d393 | ||
| 
						 | 
					23550fe5de | ||
| 
						 | 
					8420de971f | ||
| 
						 | 
					17f8f32b2e | ||
| 
						 | 
					7676f40218 | ||
| 
						 | 
					2de62cb06f | ||
| 
						 | 
					be1df3ca0a | ||
| 
						 | 
					543ab6f331 | ||
| 
						 | 
					2b6f7ef2a9 | ||
| 
						 | 
					0d37f8564e | ||
| 
						 | 
					6cd2536048 | ||
| 
						 | 
					60fccf4e37 | ||
| 
						 | 
					8a8028394f | ||
| 
						 | 
					6a06667cc0 | ||
| 
						 | 
					25bf23105d | ||
| 
						 | 
					2544c78083 | ||
| 
						 | 
					40b9b6f6dc | ||
| 
						 | 
					f5e1beddf1 | ||
| 
						 | 
					d4076c9a8a | ||
| 
						 | 
					106695d45e | ||
| 
						 | 
					f71b3f48a1 | ||
| 
						 | 
					aa8dd932c1 | ||
| 
						 | 
					adbe3eefb6 | ||
| 
						 | 
					33f69c0546 | ||
| 
						 | 
					6c3a87a599 | ||
| 
						 | 
					13cc010e38 | ||
| 
						 | 
					e99bf99829 | ||
| 
						 | 
					2e7dcc1e2a | ||
| 
						 | 
					b85a036e4a | ||
| 
						 | 
					7885264b29 | ||
| 
						 | 
					73dd450147 | ||
| 
						 | 
					96efa990f9 | ||
| 
						 | 
					4e0aee9408 | ||
| 
						 | 
					27d509cfe9 | ||
| 
						 | 
					ade8e47a8c | ||
| 
						 | 
					ca52c963c7 | ||
| 
						 | 
					17acdb5acf | ||
| 
						 | 
					f6433211ae | ||
| 
						 | 
					0ec4c66fba | ||
| 
						 | 
					1faa9d6fd5 | ||
| 
						 | 
					23d64e720d | ||
| 
						 | 
					b8b56248bd | ||
| 
						 | 
					33929117f9 | ||
| 
						 | 
					2b1673c9c8 | ||
| 
						 | 
					702f549a6a | ||
| 
						 | 
					428741d7cf | ||
| 
						 | 
					6fa624cf8c | ||
| 
						 | 
					5f60188b8a | ||
| 
						 | 
					75a6fdeb58 | ||
| 
						 | 
					5f3fa92062 | ||
| 
						 | 
					66077ae48b | ||
| 
						 | 
					92637303db | ||
| 
						 | 
					811dfd710b | ||
| 
						 | 
					b08dc2cadb | ||
| 
						 | 
					f7c5a097e3 | ||
| 
						 | 
					5eb3102cd1 | ||
| 
						 | 
					05825a8a9f | ||
| 
						 | 
					24353c4372 | ||
| 
						 | 
					e89ea07626 | ||
| 
						 | 
					b99c95ba46 | ||
| 
						 | 
					9432bfe90c | ||
| 
						 | 
					37bf6da9c8 | ||
| 
						 | 
					b3ebbd60a2 | ||
| 
						 | 
					e942394bdb | ||
| 
						 | 
					4adfcd4fd7 | ||
| 
						 | 
					c10196afc0 | ||
| 
						 | 
					49746d1dce | ||
| 
						 | 
					d46e235c2a | ||
| 
						 | 
					ee44677d7e | ||
| 
						 | 
					20057aee2e | ||
| 
						 | 
					7119679080 | ||
| 
						 | 
					d869b51a57 | ||
| 
						 | 
					dbacc81af7 | ||
| 
						 | 
					b233c13dca | ||
| 
						 | 
					464be27479 | ||
| 
						 | 
					d736ac51c0 | ||
| 
						 | 
					e8b295ff7d | ||
| 
						 | 
					4a4490d5f1 | ||
| 
						 | 
					46313be2f5 | ||
| 
						 | 
					723bfe42e7 | ||
| 
						 | 
					e35c7dcd72 | ||
| 
						 | 
					fa83a0573e | ||
| 
						 | 
					7b97371ab1 | ||
| 
						 | 
					b17e32baa7 | ||
| 
						 | 
					cd52b9f0da | ||
| 
						 | 
					c3d74ffe48 | ||
| 
						 | 
					a231a96841 | ||
| 
						 | 
					93b61bf0d3 | ||
| 
						 | 
					06d39bd303 | ||
| 
						 | 
					52177b1f60 | ||
| 
						 | 
					566f7b5e58 | ||
| 
						 | 
					c8c47768c7 | ||
| 
						 | 
					62ff567c47 | ||
| 
						 | 
					ee400f9552 | ||
| 
						 | 
					9ac7629e2c | ||
| 
						 | 
					d72ca96a43 | ||
| 
						 | 
					d0dcb3b554 | ||
| 
						 | 
					e139e49826 | ||
| 
						 | 
					3838745fdb | ||
| 
						 | 
					06a5c70f4d | ||
| 
						 | 
					62af3fb7b9 | ||
| 
						 | 
					db302a1055 | ||
| 
						 | 
					847c91e568 | ||
| 
						 | 
					2646af106b | ||
| 
						 | 
					7261b4556b | ||
| 
						 | 
					071e3cf007 | ||
| 
						 | 
					164184b484 | ||
| 
						 | 
					8b6e87abee | ||
| 
						 | 
					45197b188e | ||
| 
						 | 
					559553b169 | ||
| 
						 | 
					84ec4068de | ||
| 
						 | 
					aea87be19e | ||
| 
						 | 
					9f14744d16 | ||
| 
						 | 
					1dc8c1dbc8 | ||
| 
						 | 
					e9812c53cb | ||
| 
						 | 
					ed98565963 | ||
| 
						 | 
					1d3233612a | ||
| 
						 | 
					8362a34cef | ||
| 
						 | 
					edd16d978f | ||
| 
						 | 
					4356356305 | ||
| 
						 | 
					cb88135220 | ||
| 
						 | 
					498a0fe795 | ||
| 
						 | 
					0ca1b6afcf | ||
| 
						 | 
					d3c9f3d6f8 | ||
| 
						 | 
					df59ca1a45 | ||
| 
						 | 
					9d84442409 | ||
| 
						 | 
					5ab9d72e45 | ||
| 
						 | 
					6060e7ed96 | ||
| 
						 | 
					7ca7f7a725 | ||
| 
						 | 
					355b3d3057 | ||
| 
						 | 
					d5bdf5f89c | ||
| 
						 | 
					17de7e0f1c | ||
| 
						 | 
					2cea484428 | ||
| 
						 | 
					fb3e19ae50 | ||
| 
						 | 
					99db7fb222 | ||
| 
						 | 
					49d0272627 | ||
| 
						 | 
					da30242640 | ||
| 
						 | 
					811edcde18 | ||
| 
						 | 
					4934e6471b | ||
| 
						 | 
					9dbd6659dc | ||
| 
						 | 
					5ddad4cdb3 | ||
| 
						 | 
					338c2da24f | ||
| 
						 | 
					b5cafc0b83 | ||
| 
						 | 
					c50ced6cc2 | ||
| 
						 | 
					f4783bda27 | ||
| 
						 | 
					b55507c8a7 | ||
| 
						 | 
					827a805966 | ||
| 
						 | 
					e23ba31eb9 | ||
| 
						 | 
					02c6fde11e | ||
| 
						 | 
					d003f6e125 | ||
| 
						 | 
					1dfff2487f | ||
| 
						 | 
					4ff9cd39c5 | ||
| 
						 | 
					9c4ffcc250 | ||
| 
						 | 
					6b5a04cf83 | ||
| 
						 | 
					55e61c092e | ||
| 
						 | 
					de6ab3de22 | ||
| 
						 | 
					5e1eb58e5a | ||
| 
						 | 
					d892a4dc23 | ||
| 
						 | 
					496ea65f39 | ||
| 
						 | 
					6577b15d08 | ||
| 
						 | 
					f2e35fad27 | ||
| 
						 | 
					81c48aa43d | ||
| 
						 | 
					0cfa9b52ae | ||
| 
						 | 
					48b92c163f | ||
| 
						 | 
					b7575b39c4 | ||
| 
						 | 
					ae2f002b44 | ||
| 
						 | 
					89c312691e | ||
| 
						 | 
					1d23affbc5 | ||
| 
						 | 
					26ffaa263b | ||
| 
						 | 
					ca5e6160b7 | ||
| 
						 | 
					6d60ff6ea1 | ||
| 
						 | 
					43ae26f146 | ||
| 
						 | 
					3e01f70468 | ||
| 
						 | 
					b9f1dd7691 | ||
| 
						 | 
					a7bed4fc7c | ||
| 
						 | 
					7ca49dc91d | ||
| 
						 | 
					645ee8a42a | ||
| 
						 | 
					115dd6f095 | ||
| 
						 | 
					0e03165467 | ||
| 
						 | 
					6574f4106e | ||
| 
						 | 
					8e7fcd9ee1 | ||
| 
						 | 
					ad63e1e698 | ||
| 
						 | 
					d784526dae | ||
| 
						 | 
					79d480e1e7 | ||
| 
						 | 
					b3b2ba31f7 | ||
| 
						 | 
					7f78bc3c6d | ||
| 
						 | 
					f508f30fb6 | ||
| 
						 | 
					d20a05161a | ||
| 
						 | 
					6769ab2797 | ||
| 
						 | 
					85867cbe94 | ||
| 
						 | 
					5e8d3988a2 | ||
| 
						 | 
					1cd0a08575 | ||
| 
						 | 
					efd71af2a1 | ||
| 
						 | 
					2ea80c29fa | ||
| 
						 | 
					e3fc0d5e78 | ||
| 
						 | 
					33f42aacca | ||
| 
						 | 
					c85bf83e88 | ||
| 
						 | 
					060b6ce148 | ||
| 
						 | 
					35618b4712 | ||
| 
						 | 
					cd2e99e980 | ||
| 
						 | 
					0359ae8f40 | ||
| 
						 | 
					972d39234f | ||
| 
						 | 
					798349fce6 | ||
| 
						 | 
					9612fda886 | ||
| 
						 | 
					4b217efb84 | ||
| 
						 | 
					555cfb3059 | ||
| 
						 | 
					c0d1d6926c | ||
| 
						 | 
					fca8fcec3e | ||
| 
						 | 
					6844d5dcad | ||
| 
						 | 
					d759e97166 | ||
| 
						 | 
					cbfc737d79 | ||
| 
						 | 
					ab64bf6fb1 | ||
| 
						 | 
					0b0d20021c | ||
| 
						 | 
					932a6f6b77 | ||
| 
						 | 
					1318760ad2 | ||
| 
						 | 
					15a403a98d | ||
| 
						 | 
					a92b7c1b16 | ||
| 
						 | 
					0c54013ee3 | ||
| 
						 | 
					ca5d1e7a8d | ||
| 
						 | 
					40a39e2270 | ||
| 
						 | 
					982530b186 | ||
| 
						 | 
					fadc08445a | ||
| 
						 | 
					783381c163 | ||
| 
						 | 
					5f26bee7c8 | ||
| 
						 | 
					2be57d0833 | ||
| 
						 | 
					6e6748f051 | ||
| 
						 | 
					a8d544d9b3 | ||
| 
						 | 
					5f1490e1bd | ||
| 
						 | 
					2c3e557b5c | ||
| 
						 | 
					08df4b8971 | ||
| 
						 | 
					11f58ea896 | ||
| 
						 | 
					15f3b4b6d1 | ||
| 
						 | 
					35270e50c2 | ||
| 
						 | 
					8c975657e7 | ||
| 
						 | 
					03cb3b9db1 | ||
| 
						 | 
					19ad942739 | ||
| 
						 | 
					3cf452b923 | ||
| 
						 | 
					2a6f9aa155 | ||
| 
						 | 
					570455b21d | ||
| 
						 | 
					dccdf9e66c | ||
| 
						 | 
					dd4d5bb1e0 | ||
| 
						 | 
					842e4aaa0d | ||
| 
						 | 
					ebb09cd9c4 | ||
| 
						 | 
					9a6df07d3d | ||
| 
						 | 
					c59c429a69 | ||
| 
						 | 
					69f9d0c916 | ||
| 
						 | 
					56edbe3804 | ||
| 
						 | 
					94c4a18541 | ||
| 
						 | 
					bdcf8d626d | ||
| 
						 | 
					576b40b1b0 | ||
| 
						 | 
					954575a19d | ||
| 
						 | 
					47bbe36725 | ||
| 
						 | 
					1a8f7e830c | ||
| 
						 | 
					dfc85b7291 | ||
| 
						 | 
					1457b80617 | ||
| 
						 | 
					dba40b35f2 | ||
| 
						 | 
					e9d95f1a25 | ||
| 
						 | 
					67e40a2b16 | ||
| 
						 | 
					25f5f14d35 | ||
| 
						 | 
					dfda9cc007 | ||
| 
						 | 
					e39b29fc48 | ||
| 
						 | 
					4c17ba4fc0 | ||
| 
						 | 
					4511f7ac50 | ||
| 
						 | 
					b9f76f11bb | ||
| 
						 | 
					17841a20e3 | ||
| 
						 | 
					d90d40b5d1 | ||
| 
						 | 
					d2e6a0583a | ||
| 
						 | 
					b2c9277e66 | ||
| 
						 | 
					31c332af93 | ||
| 
						 | 
					90af60a6ef | ||
| 
						 | 
					80c7566203 | ||
| 
						 | 
					efb1fdbec8 | ||
| 
						 | 
					bada8cc259 | ||
| 
						 | 
					c3a076176e | ||
| 
						 | 
					2cda3070d5 | ||
| 
						 | 
					728bed8c98 | ||
| 
						 | 
					6e72ea7442 | ||
| 
						 | 
					a4aac27fd3 | ||
| 
						 | 
					5b8816dcb7 | ||
| 
						 | 
					fc0df97278 | ||
| 
						 | 
					592658e874 | ||
| 
						 | 
					5a70e42428 | ||
| 
						 | 
					e4caa98901 | ||
| 
						 | 
					c211a7c685 | ||
| 
						 | 
					7876c078bc | ||
| 
						 | 
					aedadfc779 | ||
| 
						 | 
					2046a6b9e5 | ||
| 
						 | 
					d1d53b2bbf | ||
| 
						 | 
					950aa1c743 | ||
| 
						 | 
					a9572bf88a | ||
| 
						 | 
					5a93f50394 | ||
| 
						 | 
					60af1cbcc2 | ||
| 
						 | 
					8952ef933b | ||
| 
						 | 
					b350d5da59 | ||
| 
						 | 
					6df3bf3644 | ||
| 
						 | 
					35840a2c5c | ||
| 
						 | 
					090b89cc76 | ||
| 
						 | 
					f05d47ddd6 | ||
| 
						 | 
					fcfd4bef2d | ||
| 
						 | 
					18dc8fbc26 | ||
| 
						 | 
					d9ceee1c75 | ||
| 
						 | 
					097281f459 | ||
| 
						 | 
					087748c48e | ||
| 
						 | 
					e35187741b | ||
| 
						 | 
					574e911375 | ||
| 
						 | 
					ce945bd2f0 | ||
| 
						 | 
					8efa6f407d | ||
| 
						 | 
					85bd4621db | ||
| 
						 | 
					6c3759d78d | ||
| 
						 | 
					4af08a19f8 | ||
| 
						 | 
					c14650caec | ||
| 
						 | 
					c7a9e07909 | ||
| 
						 | 
					185baf036b | ||
| 
						 | 
					3523613826 | ||
| 
						 | 
					782ade7223 | ||
| 
						 | 
					ba40eccc90 | ||
| 
						 | 
					4191741fb6 | ||
| 
						 | 
					7a52f44bd4 | ||
| 
						 | 
					efa5485744 | ||
| 
						 | 
					c81ac51e5c | ||
| 
						 | 
					fd17cf2e3c | ||
| 
						 | 
					d4b0999415 | ||
| 
						 | 
					03f8ec89db | ||
| 
						 | 
					f633ab688b | ||
| 
						 | 
					808621ab22 | ||
| 
						 | 
					6ed5feda2b | ||
| 
						 | 
					964066c0de | ||
| 
						 | 
					a913e93667 | ||
| 
						 | 
					a7b99fc463 | ||
| 
						 | 
					6f252f4704 | ||
| 
						 | 
					b596c34bed | ||
| 
						 | 
					b0cd96478c | ||
| 
						 | 
					387ec712e6 | ||
| 
						 | 
					f2a99d7d74 | ||
| 
						 | 
					8b6b15dccc | ||
| 
						 | 
					bbb72b7b6b | ||
| 
						 | 
					785bad388b | ||
| 
						 | 
					cf10df6c68 | ||
| 
						 | 
					5b55dcbfbb | ||
| 
						 | 
					e7dbbd16a5 | ||
| 
						 | 
					62f0457961 | ||
| 
						 | 
					8879b57b73 | ||
| 
						 | 
					e49a6feabb | ||
| 
						 | 
					feb2dd2835 | ||
| 
						 | 
					5e34f3dc01 | ||
| 
						 | 
					0031d76f2a | ||
| 
						 | 
					00ee738fdd | ||
| 
						 | 
					8d0a823124 | ||
| 
						 | 
					9729df1756 | ||
| 
						 | 
					cdb419d65e | ||
| 
						 | 
					d6f9a41539 | ||
| 
						 | 
					1daa258b8a | ||
| 
						 | 
					560c257bd0 | ||
| 
						 | 
					d7aae417b1 | ||
| 
						 | 
					c39858aac0 | ||
| 
						 | 
					818aed35e2 | ||
| 
						 | 
					2ed524f07e | ||
| 
						 | 
					5f1eefd03f | ||
| 
						 | 
					522b4d7576 | ||
| 
						 | 
					d6dcb08407 | ||
| 
						 | 
					806c756a2d | ||
| 
						 | 
					2494701347 | ||
| 
						 | 
					1c10272e15 | ||
| 
						 | 
					0badcf381a | ||
| 
						 | 
					35558e6bd7 | ||
| 
						 | 
					7659747e6f | ||
| 
						 | 
					53189fb2d7 | ||
| 
						 | 
					450c178d77 | ||
| 
						 | 
					a20eb6df1b | ||
| 
						 | 
					d73425061a | ||
| 
						 | 
					0051d5ac88 | ||
| 
						 | 
					76920413d9 | ||
| 
						 | 
					44d9a8ba4e | ||
| 
						 | 
					38dc548a87 | ||
| 
						 | 
					dca6386234 | ||
| 
						 | 
					2a701a1aac | ||
| 
						 | 
					0cb297abc9 | ||
| 
						 | 
					821a23535b | ||
| 
						 | 
					bc80599178 | ||
| 
						 | 
					941374b573 | ||
| 
						 | 
					1886893d66 | ||
| 
						 | 
					7291772b1f | ||
| 
						 | 
					8e28721057 | ||
| 
						 | 
					8d2120566e | ||
| 
						 | 
					67341c4cbe | ||
| 
						 | 
					f8188ddfee | ||
| 
						 | 
					29c546b426 | ||
| 
						 | 
					0d259b898b | ||
| 
						 | 
					c136b80af5 | ||
| 
						 | 
					83b87d53c1 | ||
| 
						 | 
					1e99f1ee41 | ||
| 
						 | 
					d7fe136d54 | ||
| 
						 | 
					cd7a0f829f | ||
| 
						 | 
					cf3f1ef284 | ||
| 
						 | 
					a737864a1c | ||
| 
						 | 
					c68a6805b3 | ||
| 
						 | 
					bd3d5a17b4 | ||
| 
						 | 
					d4b577114b | ||
| 
						 | 
					713effb6e4 | ||
| 
						 | 
					b92e2ab6b1 | ||
| 
						 | 
					05baf94b43 | ||
| 
						 | 
					a76288b99a | ||
| 
						 | 
					557e95c0a3 | ||
| 
						 | 
					0a83fa90bb | ||
| 
						 | 
					daeb143177 | ||
| 
						 | 
					9f752120c0 | ||
| 
						 | 
					80a1e972fc | ||
| 
						 | 
					5e65d48ffa | ||
| 
						 | 
					752ef08141 | ||
| 
						 | 
					070e0e8b0a | ||
| 
						 | 
					2ed0728cef | ||
| 
						 | 
					a79b9e9d4a | ||
| 
						 | 
					24572daccc | ||
| 
						 | 
					1770563fff | ||
| 
						 | 
					4cd96483f6 | ||
| 
						 | 
					8f1783b8a7 | ||
| 
						 | 
					be72eaa327 | ||
| 
						 | 
					61bded1d82 | ||
| 
						 | 
					4b3937373a | ||
| 
						 | 
					08bf0907d4 | ||
| 
						 | 
					eb044f8787 | ||
| 
						 | 
					8d0c77403c | ||
| 
						 | 
					601062455c | ||
| 
						 | 
					5be788ba36 | ||
| 
						 | 
					281559b31b | ||
| 
						 | 
					ef1aa4e5e9 | ||
| 
						 | 
					7b7ac04895 | ||
| 
						 | 
					60f5b2b275 | ||
| 
						 | 
					c0f9d7fdb7 | ||
| 
						 | 
					fc4d6f73a6 | ||
| 
						 | 
					295169f9d9 | ||
| 
						 | 
					1a3797a699 | ||
| 
						 | 
					977e106924 | ||
| 
						 | 
					8d76d4016d | ||
| 
						 | 
					9f92657f76 | ||
| 
						 | 
					9f341f9ce5 | ||
| 
						 | 
					2098871509 | ||
| 
						 | 
					3d00c86f4c | ||
| 
						 | 
					90037b85d1 | ||
| 
						 | 
					6ec145d4b4 | ||
| 
						 | 
					40a58c392f | ||
| 
						 | 
					9733cd59bb | ||
| 
						 | 
					b3caf7bfa8 | ||
| 
						 | 
					23fbb89805 | ||
| 
						 | 
					bd1adaf7ea | ||
| 
						 | 
					0c9e23fc0c | ||
| 
						 | 
					f091ce64ac | ||
| 
						 | 
					55a69ebea6 | ||
| 
						 | 
					d6b3850562 | ||
| 
						 | 
					80197cf493 | ||
| 
						 | 
					8ee564c216 | ||
| 
						 | 
					5bfeb60a83 | ||
| 
						 | 
					1ab4a2f870 | ||
| 
						 | 
					2a627059ac | ||
| 
						 | 
					3f739acf24 | ||
| 
						 | 
					d3454ceb94 | ||
| 
						 | 
					59695c05b1 | ||
| 
						 | 
					f0969c9692 | ||
| 
						 | 
					18dd8154e2 | ||
| 
						 | 
					4c58797607 | ||
| 
						 | 
					d620f1e529 | ||
| 
						 | 
					e0b436f8e1 | ||
| 
						 | 
					e99d1e97de | ||
| 
						 | 
					1fb74b4fa2 | ||
| 
						 | 
					473f6ea9f0 | ||
| 
						 | 
					0b04c52119 | ||
| 
						 | 
					8383945acc | ||
| 
						 | 
					fce9d51122 | ||
| 
						 | 
					7c3ee84295 | ||
| 
						 | 
					a8db25f48b | ||
| 
						 | 
					20705ca311 | ||
| 
						 | 
					af33c6b549 | ||
| 
						 | 
					2b8775dff7 | ||
| 
						 | 
					ea81dd9e2e | ||
| 
						 | 
					7dcb102733 | ||
| 
						 | 
					aa0e32060e | ||
| 
						 | 
					2e8f37aca5 | ||
| 
						 | 
					195d769c4b | ||
| 
						 | 
					70f08b5baa | ||
| 
						 | 
					9e987ac6a2 | ||
| 
						 | 
					de03f172ad | ||
| 
						 | 
					0078944486 | ||
| 
						 | 
					d3f796ac59 | ||
| 
						 | 
					3d38080d54 | ||
| 
						 | 
					fe07962f9c | ||
| 
						 | 
					938a72b2db | ||
| 
						 | 
					a8827b1ed6 | ||
| 
						 | 
					ff40cd71ac | ||
| 
						 | 
					39626d8cfd | ||
| 
						 | 
					67ad29e716 | ||
| 
						 | 
					8bbf9b13af | ||
| 
						 | 
					cb21851c74 | ||
| 
						 | 
					8d611bec6e | ||
| 
						 | 
					1de1dc7314 | ||
| 
						 | 
					aca79af7de | ||
| 
						 | 
					da6eea9b38 | ||
| 
						 | 
					dcf7310b2d | ||
| 
						 | 
					c2e8ba0fba | ||
| 
						 | 
					a5360255ba | ||
| 
						 | 
					5690a2b493 | ||
| 
						 | 
					ff0429a802 | ||
| 
						 | 
					46cdc83b81 | ||
| 
						 | 
					76dfef7117 | ||
| 
						 | 
					de2aeb9fc2 | ||
| 
						 | 
					17a5b44205 | ||
| 
						 | 
					f99e347878 | ||
| 
						 | 
					f5a0c17322 | ||
| 
						 | 
					8442c3942d | ||
| 
						 | 
					15cd35f67f | ||
| 
						 | 
					459801d6e0 | ||
| 
						 | 
					2c43d64302 | ||
| 
						 | 
					fd802db39f | ||
| 
						 | 
					765754d39d | ||
| 
						 | 
					f7f6b288eb | ||
| 
						 | 
					11ee9540bf | ||
| 
						 | 
					f6319bd706 | ||
| 
						 | 
					0912015a5c | ||
| 
						 | 
					4e7575fc7a | ||
| 
						 | 
					6531a6116d | ||
| 
						 | 
					9a33561e80 | ||
| 
						 | 
					88229a0f2a | ||
| 
						 | 
					120394cc45 | ||
| 
						 | 
					1adfe0fe18 | ||
| 
						 | 
					d57c178a62 | ||
| 
						 | 
					6faa83bc6a | ||
| 
						 | 
					9fb4e019fa | ||
| 
						 | 
					74551597b1 | ||
| 
						 | 
					37c269d0ba | ||
| 
						 | 
					5d8b526b80 | ||
| 
						 | 
					83dcc3e061 | ||
| 
						 | 
					4ed58463f7 | ||
| 
						 | 
					85b2056dc7 | ||
| 
						 | 
					94ca911dc1 | ||
| 
						 | 
					24420c2191 | ||
| 
						 | 
					59f904d8de | ||
| 
						 | 
					755f98e768 | ||
| 
						 | 
					aadc797225 | ||
| 
						 | 
					5c882bdfa3 | ||
| 
						 | 
					60f9450594 | ||
| 
						 | 
					ff52ba7f7b | ||
| 
						 | 
					0fbcea45d6 | ||
| 
						 | 
					ca6d430561 | ||
| 
						 | 
					91601b3bf4 | ||
| 
						 | 
					cdd70596df | ||
| 
						 | 
					7e186f9a63 | ||
| 
						 | 
					a94e117ede | ||
| 
						 | 
					662cb30372 | ||
| 
						 | 
					bd3aba5d6a | ||
| 
						 | 
					29ed6d24bf | ||
| 
						 | 
					e2c5c20896 | ||
| 
						 | 
					7c4b6cb0d9 | ||
| 
						 | 
					aced2904ff | ||
| 
						 | 
					17eb1fca7c | ||
| 
						 | 
					2511d1193a | ||
| 
						 | 
					e9056f5f95 | ||
| 
						 | 
					a9893ca79a | ||
| 
						 | 
					f39f7c28f0 | ||
| 
						 | 
					a807065ccc | ||
| 
						 | 
					67532e916c | ||
| 
						 | 
					3920b4dae8 | ||
| 
						 | 
					d70a335dce | ||
| 
						 | 
					8001921112 | ||
| 
						 | 
					d7cb09bd18 | ||
| 
						 | 
					e11710714c | ||
| 
						 | 
					5b0bfc298f | ||
| 
						 | 
					0383f7f19d | ||
| 
						 | 
					23a43c6e0f | ||
| 
						 | 
					eb946690d2 | ||
| 
						 | 
					c090fdbdf1 | ||
| 
						 | 
					de279099e5 | ||
| 
						 | 
					6bd8db3c99 | ||
| 
						 | 
					6176f14141 | ||
| 
						 | 
					512e54ff85 | ||
| 
						 | 
					a5aa569fe3 | ||
| 
						 | 
					e2e593a036 | ||
| 
						 | 
					9ce0a7b49d | ||
| 
						 | 
					4ab0d74250 | ||
| 
						 | 
					b5f85ba77d | ||
| 
						 | 
					b6ee33c6e1 | ||
| 
						 | 
					1c69b15c7c | ||
| 
						 | 
					54cd2bee58 | ||
| 
						 | 
					5bf02b16a0 | ||
| 
						 | 
					594cb8507b | ||
| 
						 | 
					78aba6e4cd | ||
| 
						 | 
					ccdcdb2a46 | ||
| 
						 | 
					b121e41ec3 | ||
| 
						 | 
					05d8e56ffd | ||
| 
						 | 
					4345c7a712 | ||
| 
						 | 
					12d5e33dc9 | ||
| 
						 | 
					6d70a82757 | ||
| 
						 | 
					47d52d4eca | ||
| 
						 | 
					4973b0f88a | ||
| 
						 | 
					d1542bf549 | ||
| 
						 | 
					2b7727aad1 | ||
| 
						 | 
					fd775454ca | ||
| 
						 | 
					8e09a389c4 | ||
| 
						 | 
					aa3ae01878 | ||
| 
						 | 
					c123676825 | ||
| 
						 | 
					d60c22572b | ||
| 
						 | 
					1d7ce36791 | ||
| 
						 | 
					34e8baab9a | ||
| 
						 | 
					a219d774fe | ||
| 
						 | 
					005042e973 | ||
| 
						 | 
					d301d69fbf | ||
| 
						 | 
					34af02caca | ||
| 
						 | 
					91025d1dd6 | ||
| 
						 | 
					c9bab31a7f | ||
| 
						 | 
					2f60e91a9b | ||
| 
						 | 
					018affe6d0 | ||
| 
						 | 
					aeb27ccfdb | ||
| 
						 | 
					939866faab | ||
| 
						 | 
					98f968f2ee | ||
| 
						 | 
					864f1a3366 | ||
| 
						 | 
					f42b10242f | ||
| 
						 | 
					853134017d | ||
| 
						 | 
					d3999e06d1 | ||
| 
						 | 
					0b0b37cffe | ||
| 
						 | 
					a13f5888d5 | ||
| 
						 | 
					c8807438ce | ||
| 
						 | 
					3f106afd00 | ||
| 
						 | 
					d925057e11 | ||
| 
						 | 
					bbafb2eb27 | ||
| 
						 | 
					434bc13812 | ||
| 
						 | 
					5c592f7dd9 | ||
| 
						 | 
					9bf1ba2f7e | ||
| 
						 | 
					724e4a3585 | ||
| 
						 | 
					f69711fc78 | ||
| 
						 | 
					04e2520dbb | ||
| 
						 | 
					7a35fb5403 | ||
| 
						 | 
					63f97b38eb | ||
| 
						 | 
					b8541929c8 | ||
| 
						 | 
					329f17ac7c | ||
| 
						 | 
					5dcab07c54 | ||
| 
						 | 
					1f798affb9 | ||
| 
						 | 
					a2ecdf4249 | ||
| 
						 | 
					71fdc063bd | ||
| 
						 | 
					887d78a9ad | ||
| 
						 | 
					00557a5475 | ||
| 
						 | 
					e18d27b78a | ||
| 
						 | 
					228fea4628 | ||
| 
						 | 
					e64dacb40e | ||
| 
						 | 
					fff01f24bf | ||
| 
						 | 
					e55dee3807 | ||
| 
						 | 
					8c2ce33c0b | ||
| 
						 | 
					135394f511 | ||
| 
						 | 
					fe065dc851 | ||
| 
						 | 
					445c7791a7 | ||
| 
						 | 
					686ba84128 | ||
| 
						 | 
					3394c01826 | ||
| 
						 | 
					d67ea8c7ad | ||
| 
						 | 
					535046430a | ||
| 
						 | 
					9aebdff219 | ||
| 
						 | 
					90da930131 | ||
| 
						 | 
					fbdc1b1e3d | ||
| 
						 | 
					e942df755b | ||
| 
						 | 
					91c8be3628 | ||
| 
						 | 
					d56c03840b | ||
| 
						 | 
					d3d5cdf305 | ||
| 
						 | 
					af43ce73e5 | ||
| 
						 | 
					84b52e92f4 | ||
| 
						 | 
					0aa7d11cc9 | ||
| 
						 | 
					933f7cecae | ||
| 
						 | 
					8e73e55336 | ||
| 
						 | 
					55c015c136 | ||
| 
						 | 
					bde6c6685e | ||
| 
						 | 
					58387b91f9 | ||
| 
						 | 
					6f74820cfc | ||
| 
						 | 
					af72f198ba | ||
| 
						 | 
					3fc831f9eb | ||
| 
						 | 
					9f660862ec | ||
| 
						 | 
					1354671c90 | ||
| 
						 | 
					1175a226e3 | ||
| 
						 | 
					358b72bb12 | ||
| 
						 | 
					6c408c885a | ||
| 
						 | 
					9cf04dff6a | ||
| 
						 | 
					6bdcfecbcf | ||
| 
						 | 
					3f21fe60fc | ||
| 
						 | 
					b2c290e40e | ||
| 
						 | 
					bc5b2fa12c | ||
| 
						 | 
					32a9554c92 | ||
| 
						 | 
					afc1ed60f7 | ||
| 
						 | 
					91018f4f24 | ||
| 
						 | 
					fb086b57a8 | ||
| 
						 | 
					3fc39a6efb | ||
| 
						 | 
					6062ac7c37 | ||
| 
						 | 
					caf7854a3c | ||
| 
						 | 
					6def0892ea | ||
| 
						 | 
					1c0744bde6 | ||
| 
						 | 
					7591e07b7c | ||
| 
						 | 
					35ab93f484 | ||
| 
						 | 
					dcf5e52b62 | ||
| 
						 | 
					aae521d086 | ||
| 
						 | 
					78e6508e22 | ||
| 
						 | 
					4d9517f0b4 | ||
| 
						 | 
					a331aa0221 | ||
| 
						 | 
					679cabb532 | ||
| 
						 | 
					7332350e85 | ||
| 
						 | 
					69f4dda74a | ||
| 
						 | 
					c19c3bd15a | ||
| 
						 | 
					76ff92b811 | ||
| 
						 | 
					4250637e7d | ||
| 
						 | 
					08d1da106e | ||
| 
						 | 
					9e31a0536e | ||
| 
						 | 
					2960d37d71 | ||
| 
						 | 
					c63af5fc01 | ||
| 
						 | 
					fc6eff13b5 | ||
| 
						 | 
					e7ee1ccf45 | ||
| 
						 | 
					98bf69f8f1 | ||
| 
						 | 
					0363fbc411 | ||
| 
						 | 
					e3bc92ae53 | ||
| 
						 | 
					27e76021e9 | ||
| 
						 | 
					93dde29979 | ||
| 
						 | 
					d42dcd60cd | ||
| 
						 | 
					ade89799f5 | ||
| 
						 | 
					6e118ce50f | ||
| 
						 | 
					34be9df773 | ||
| 
						 | 
					7356a67780 | ||
| 
						 | 
					f77949ef3b | ||
| 
						 | 
					26b8b3fc53 | ||
| 
						 | 
					38cc79a54f | ||
| 
						 | 
					ec113aefb9 | ||
| 
						 | 
					913e1570bd | ||
| 
						 | 
					e2aaf22d5d | ||
| 
						 | 
					3304589043 | ||
| 
						 | 
					0247642bb6 | ||
| 
						 | 
					19f5aa165c | ||
| 
						 | 
					1756499b11 | ||
| 
						 | 
					15f9a93c25 | ||
| 
						 | 
					e99287734b | ||
| 
						 | 
					8349dde0f1 | ||
| 
						 | 
					59907ebc0e | ||
| 
						 | 
					da91d6ac66 | ||
| 
						 | 
					7548115a0e | ||
| 
						 | 
					8ca37dd1c7 | ||
| 
						 | 
					31e9e4bb76 | ||
| 
						 | 
					84a322ab23 | ||
| 
						 | 
					707f217b2d | ||
| 
						 | 
					e6b45a66ec | ||
| 
						 | 
					b34c40dcf5 | ||
| 
						 | 
					699ebe2f0b | ||
| 
						 | 
					e1c6f216c2 | ||
| 
						 | 
					630b73bfa8 | ||
| 
						 | 
					877f16e5a5 | ||
| 
						 | 
					fbe1fa9dcc | ||
| 
						 | 
					5b65cc55a2 | ||
| 
						 | 
					97769737d0 | ||
| 
						 | 
					5b0a5c4050 | ||
| 
						 | 
					4b9f8e766d | ||
| 
						 | 
					96002646f1 | ||
| 
						 | 
					5ef6904ec3 | ||
| 
						 | 
					2f53da5e7a | ||
| 
						 | 
					58f1cc0b5f | ||
| 
						 | 
					98c70b73f2 | ||
| 
						 | 
					6bd02a3ab5 | ||
| 
						 | 
					372e7a6cd4 | ||
| 
						 | 
					211004bb0d | ||
| 
						 | 
					80d2fff1a1 | ||
| 
						 | 
					cf3cf413c8 | ||
| 
						 | 
					e218811ca3 | ||
| 
						 | 
					a9f2274bd8 | ||
| 
						 | 
					92179ff990 | ||
| 
						 | 
					4aac210a83 | ||
| 
						 | 
					245e3122df | ||
| 
						 | 
					ffc5fa3a2b | ||
| 
						 | 
					f5042cce34 | ||
| 
						 | 
					712c67b4ae | ||
| 
						 | 
					5dcfb8ad66 | ||
| 
						 | 
					673ff5eb2c | ||
| 
						 | 
					92fc3f07ba | ||
| 
						 | 
					cff90cf3f9 | ||
| 
						 | 
					a33c53a36b | ||
| 
						 | 
					2370d4fa02 | ||
| 
						 | 
					f128d904a5 | ||
| 
						 | 
					fb1039f2ab | ||
| 
						 | 
					923ce98e42 | ||
| 
						 | 
					8e935b58a2 | ||
| 
						 | 
					c93e972543 | ||
| 
						 | 
					1cb66f5262 | ||
| 
						 | 
					648e82f05d | ||
| 
						 | 
					1dbe60b8b7 | ||
| 
						 | 
					9631fa7407 | ||
| 
						 | 
					9befc682ee | ||
| 
						 | 
					fbeb674479 | ||
| 
						 | 
					af641d20a7 | ||
| 
						 | 
					d02587750c | ||
| 
						 | 
					241a4b3d45 | ||
| 
						 | 
					496e81a25a | ||
| 
						 | 
					f39b081253 | ||
| 
						 | 
					c96f7f13da | ||
| 
						 | 
					1bdc4b2006 | ||
| 
						 | 
					3915fecf80 | ||
| 
						 | 
					f94f06825c | ||
| 
						 | 
					2ddbf8975a | ||
| 
						 | 
					68a3cbe384 | ||
| 
						 | 
					b9432d1296 | ||
| 
						 | 
					e202a29a9a | ||
| 
						 | 
					3755bffcc2 | ||
| 
						 | 
					2a0a305300 | ||
| 
						 | 
					70e2aadc18 | ||
| 
						 | 
					a1c8aaf666 | ||
| 
						 | 
					8ee470aaeb | ||
| 
						 | 
					37e4858cd0 | ||
| 
						 | 
					a27072bebb | ||
| 
						 | 
					47059f45fe | ||
| 
						 | 
					daced8041d | ||
| 
						 | 
					b053ae6a65 | ||
| 
						 | 
					42f60ecb36 | ||
| 
						 | 
					550862f41a | ||
| 
						 | 
					6838f74fe0 | ||
| 
						 | 
					2ff30d067c | ||
| 
						 | 
					84406b3e2c | ||
| 
						 | 
					c323969bdd | ||
| 
						 | 
					43cbbdbea0 | ||
| 
						 | 
					1d3f76df71 | ||
| 
						 | 
					33cb93ad0b | ||
| 
						 | 
					4dc9179f4b | ||
| 
						 | 
					26a5ec9aa0 | ||
| 
						 | 
					883ea3113c | ||
| 
						 | 
					62b7c08bb3 | ||
| 
						 | 
					a85fa66cc8 | ||
| 
						 | 
					9ba010c629 | ||
| 
						 | 
					3ef3f2b6f0 | ||
| 
						 | 
					1401d909e8 | ||
| 
						 | 
					3233322622 | ||
| 
						 | 
					e373f1fd73 | ||
| 
						 | 
					dc25cd6f3a | ||
| 
						 | 
					0e31d41d4e | ||
| 
						 | 
					b7a7600465 | ||
| 
						 | 
					111a2f3057 | ||
| 
						 | 
					760cecac8d | ||
| 
						 | 
					6f8b4395ec | ||
| 
						 | 
					5506f8767c | ||
| 
						 | 
					5887945828 | ||
| 
						 | 
					25e98179be | ||
| 
						 | 
					78ebe3fa5a | ||
| 
						 | 
					a8e8e51b14 | ||
| 
						 | 
					f97d194934 | ||
| 
						 | 
					4661cc7403 | ||
| 
						 | 
					bc11929395 | ||
| 
						 | 
					caf37bc92e | ||
| 
						 | 
					5de447b0cb | ||
| 
						 | 
					5dbaced4a2 | ||
| 
						 | 
					43f8a1f5de | ||
| 
						 | 
					f57efa1899 | ||
| 
						 | 
					592522ceaf | ||
| 
						 | 
					4f84e6d9e2 | ||
| 
						 | 
					6f08903f07 | ||
| 
						 | 
					220cd010bd | ||
| 
						 | 
					68e8a0f0d9 | ||
| 
						 | 
					b23dbf9f34 | ||
| 
						 | 
					1d0b5b507a | ||
| 
						 | 
					b83d8104cd | ||
| 
						 | 
					bf6e1053cf | ||
| 
						 | 
					c3dd928e29 | ||
| 
						 | 
					aba6c2b89d | ||
| 
						 | 
					9c0a386246 | ||
| 
						 | 
					bba3bb7556 | ||
| 
						 | 
					c1422864b5 | ||
| 
						 | 
					31a693b99a | ||
| 
						 | 
					804534fbc9 | ||
| 
						 | 
					1bc6532c16 | ||
| 
						 | 
					b48bf7470d | ||
| 
						 | 
					1ca9ce5ef4 | ||
| 
						 | 
					789f2ecbe7 | ||
| 
						 | 
					ee7d1d0701 | ||
| 
						 | 
					4e3aa250c4 | ||
| 
						 | 
					3647a6ddcd | ||
| 
						 | 
					79aaa85a51 | ||
| 
						 | 
					392a543eff | ||
| 
						 | 
					eb6345de60 | ||
| 
						 | 
					0fd3b7a00a | ||
| 
						 | 
					bd51b80fa5 | ||
| 
						 | 
					15c900839b | ||
| 
						 | 
					2fd463e979 | ||
| 
						 | 
					de8660a96a | ||
| 
						 | 
					1e9cb272f1 | ||
| 
						 | 
					72b1144b8c | ||
| 
						 | 
					348fe0e210 | ||
| 
						 | 
					cf1f46e1ca | ||
| 
						 | 
					f052cbee19 | ||
| 
						 | 
					1f5e8670e1 | ||
| 
						 | 
					3b491d0f73 | ||
| 
						 | 
					26a2b8d26d | ||
| 
						 | 
					a7fd6f9007 | ||
| 
						 | 
					8ed44e8dfb | ||
| 
						 | 
					f617c1131a | ||
| 
						 | 
					5ca47f19d7 | ||
| 
						 | 
					9044fcbb5f | ||
| 
						 | 
					7a82810b59 | ||
| 
						 | 
					0ccdf3d0e6 | ||
| 
						 | 
					ca7f0852df | ||
| 
						 | 
					780b962336 | ||
| 
						 | 
					bbeb840916 | ||
| 
						 | 
					f4ec465bfc | ||
| 
						 | 
					57c86a953d | ||
| 
						 | 
					0fff8656e9 | ||
| 
						 | 
					7b929636ee | ||
| 
						 | 
					76835a2e00 | ||
| 
						 | 
					1b171b02ac | ||
| 
						 | 
					a8dc362572 | ||
| 
						 | 
					7c72f8ee6c | ||
| 
						 | 
					c39a54609b | ||
| 
						 | 
					ce6b767b47 | ||
| 
						 | 
					7ba4d3464f | ||
| 
						 | 
					03def138fe | ||
| 
						 | 
					9d99af5329 | ||
| 
						 | 
					c8d850dbad | ||
| 
						 | 
					01ea357744 | ||
| 
						 | 
					ad9e83a90f | ||
| 
						 | 
					6c9d96e811 | ||
| 
						 | 
					f840e5192c | ||
| 
						 | 
					ba9272dd05 | ||
| 
						 | 
					675db3a211 | ||
| 
						 | 
					1fc7ff878e | ||
| 
						 | 
					b643d148b1 | ||
| 
						 | 
					5804c995e1 | ||
| 
						 | 
					13a6f85320 | ||
| 
						 | 
					8b4582f111 | ||
| 
						 | 
					cd3bf7c56f | ||
| 
						 | 
					ee1595dcd5 | ||
| 
						 | 
					310086deed | ||
| 
						 | 
					5d27f50f2f | ||
| 
						 | 
					9d0330d5bd | ||
| 
						 | 
					d5074f74bb | ||
| 
						 | 
					ea0cf7c87b | ||
| 
						 | 
					a56164c8e0 | ||
| 
						 | 
					cd95bb22ea | ||
| 
						 | 
					1745ecd8ac | ||
| 
						 | 
					75d66b9c62 | ||
| 
						 | 
					2ff9f55001 | ||
| 
						 | 
					ce446dbdc2 | ||
| 
						 | 
					dd2add82ee | ||
| 
						 | 
					40d9855df2 | ||
| 
						 | 
					ecf7adba15 | ||
| 
						 | 
					931c847e2b | ||
| 
						 | 
					8230d9bff8 | ||
| 
						 | 
					64cc14e9e6 | ||
| 
						 | 
					d5b8971ff3 | ||
| 
						 | 
					7ea837a18c | ||
| 
						 | 
					b8b8473b6d | ||
| 
						 | 
					894dbae455 | ||
| 
						 | 
					2c11425868 | ||
| 
						 | 
					a2ea0abf7f | ||
| 
						 | 
					be8f8e66a4 | ||
| 
						 | 
					9fadfffb9d | ||
| 
						 | 
					76f23acfa1 | ||
| 
						 | 
					6950aeafcc | ||
| 
						 | 
					cd160a66c9 | ||
| 
						 | 
					a7376968d2 | ||
| 
						 | 
					fd96a2af34 | ||
| 
						 | 
					a90cd1a45c | ||
| 
						 | 
					8e92600ddd | ||
| 
						 | 
					5e75c310ba | ||
| 
						 | 
					20cab07c29 | ||
| 
						 | 
					f466d7a6f1 | ||
| 
						 | 
					dc46f535ae | ||
| 
						 | 
					27fd5d6d6a | ||
| 
						 | 
					18a3c3302f | ||
| 
						 | 
					97959a00d7 | ||
| 
						 | 
					5e92b2906b | ||
| 
						 | 
					126ed14313 | ||
| 
						 | 
					712d0374f7 | ||
| 
						 | 
					4b49b2e3cf | ||
| 
						 | 
					d85c21994f | ||
| 
						 | 
					6b33a5f954 | ||
| 
						 | 
					ed22afe5fb | ||
| 
						 | 
					843391c745 | ||
| 
						 | 
					ad6699e0c4 | ||
| 
						 | 
					43137cf595 | ||
| 
						 | 
					db6dc49b0b | ||
| 
						 | 
					593170d1de | ||
| 
						 | 
					0eace2fefe | ||
| 
						 | 
					abd65e21c6 | ||
| 
						 | 
					e21104a865 | ||
| 
						 | 
					3ecf63fa66 | ||
| 
						 | 
					762dcf0780 | ||
| 
						 | 
					75ee9b5333 | ||
| 
						 | 
					e161bdc5be | ||
| 
						 | 
					bb3d6e8552 | ||
| 
						 | 
					189c2f4989 | ||
| 
						 | 
					f28389c87b | ||
| 
						 | 
					7461592a16 | ||
| 
						 | 
					50b0e72f7b | ||
| 
						 | 
					76e73cfec8 | ||
| 
						 | 
					5d8ec172a6 | ||
| 
						 | 
					0953140b53 | ||
| 
						 | 
					6c2825997a | ||
| 
						 | 
					accc6eb91a | ||
| 
						 | 
					eab8cdc640 | ||
| 
						 | 
					dc9d0f256d | ||
| 
						 | 
					b60d6404d8 | ||
| 
						 | 
					08fe4b3210 | ||
| 
						 | 
					0e60a118d0 | ||
| 
						 | 
					4b78b4124e | ||
| 
						 | 
					0d6d9af7ab | ||
| 
						 | 
					41cd36b830 | ||
| 
						 | 
					242be55771 | ||
| 
						 | 
					7cf47ea5b5 | ||
| 
						 | 
					6fb0012833 | ||
| 
						 | 
					9d1ce9c0df | ||
| 
						 | 
					5947e4e9fd | ||
| 
						 | 
					e992aa6a54 | ||
| 
						 | 
					2cf218610e | ||
| 
						 | 
					fe6f0aeb26 | ||
| 
						 | 
					bd04c6fb67 | ||
| 
						 | 
					c5637baa06 | ||
| 
						 | 
					f8426a2c44 | ||
| 
						 | 
					0c791d1e76 | ||
| 
						 | 
					c4a89d29f6 | ||
| 
						 | 
					306ff5649a | ||
| 
						 | 
					1c652dfc5d | ||
| 
						 | 
					1f61e7f8f4 | ||
| 
						 | 
					1a5f190e47 | ||
| 
						 | 
					570033448c | ||
| 
						 | 
					f44b655513 | ||
| 
						 | 
					0aa720fa26 | ||
| 
						 | 
					d44f3f84f8 | ||
| 
						 | 
					d426db3d27 | ||
| 
						 | 
					0fd88d7c8f | ||
| 
						 | 
					4e84ac4db8 | ||
| 
						 | 
					da5c8a121f | ||
| 
						 | 
					76c36688d0 | ||
| 
						 | 
					651c8d3bc4 | ||
| 
						 | 
					a8a946d71d | ||
| 
						 | 
					c5c005609e | ||
| 
						 | 
					97886f9353 | ||
| 
						 | 
					a784bd0797 | ||
| 
						 | 
					4aacf65678 | ||
| 
						 | 
					dd1ba7633e | ||
| 
						 | 
					a4ea5a4054 | ||
| 
						 | 
					69060b1382 | ||
| 
						 | 
					a6562ea77d | ||
| 
						 | 
					ad3563096a | ||
| 
						 | 
					c5f02c1986 | ||
| 
						 | 
					7ef5d20cad | ||
| 
						 | 
					98b619c3a7 | ||
| 
						 | 
					5b75919f95 | ||
| 
						 | 
					20b76e09e3 | ||
| 
						 | 
					67fca4cb01 | ||
| 
						 | 
					606715b2cd | ||
| 
						 | 
					ce04b35032 | ||
| 
						 | 
					ec7f244ee9 | ||
| 
						 | 
					a5b206f398 | ||
| 
						 | 
					306a05f9ff | ||
| 
						 | 
					81f8350616 | ||
| 
						 | 
					760ca6adc4 | ||
| 
						 | 
					ffb35ff5c3 | ||
| 
						 | 
					8eda06131b | ||
| 
						 | 
					5b55f9ecb3 | ||
| 
						 | 
					3417e0b0fc | ||
| 
						 | 
					79ed144b0f | ||
| 
						 | 
					8e5cf6589c | ||
| 
						 | 
					fc67cca882 | ||
| 
						 | 
					eea2287068 | ||
| 
						 | 
					5fe5de7511 | ||
| 
						 | 
					4a6b9972dd | ||
| 
						 | 
					256a16a8a3 | ||
| 
						 | 
					30e0891d3d | ||
| 
						 | 
					8147ccdf76 | ||
| 
						 | 
					26ab286630 | ||
| 
						 | 
					738807883e | ||
| 
						 | 
					03a0988ce8 | ||
| 
						 | 
					7de892eeb4 | ||
| 
						 | 
					8c4e91a653 | ||
| 
						 | 
					8f77030473 | ||
| 
						 | 
					546d0bd3d1 | ||
| 
						 | 
					5d53b544d3 | ||
| 
						 | 
					6dc8fac122 | ||
| 
						 | 
					8114f8562b | ||
| 
						 | 
					c79fa187b9 | ||
| 
						 | 
					237ec68b0e | ||
| 
						 | 
					4ebf4f6e55 | ||
| 
						 | 
					4d86593f3c | ||
| 
						 | 
					ec050ccbc4 | ||
| 
						 | 
					f19cade50f | ||
| 
						 | 
					a2f35aaf67 | ||
| 
						 | 
					e5c4b6b345 | ||
| 
						 | 
					bad978feb2 | ||
| 
						 | 
					bea9152aa8 | ||
| 
						 | 
					f788f988ea | ||
| 
						 | 
					d04ffd258b | ||
| 
						 | 
					24cfa7f1bb | ||
| 
						 | 
					94a1d09ac7 | ||
| 
						 | 
					230a75091b | ||
| 
						 | 
					4ad68ec305 | ||
| 
						 | 
					ef776ab893 | ||
| 
						 | 
					f8ff0f6bef | ||
| 
						 | 
					bc7122f6e2 | ||
| 
						 | 
					e5963dae48 | ||
| 
						 | 
					1ebda8fa0e | ||
| 
						 | 
					9af532e662 | ||
| 
						 | 
					9d064a3927 | ||
| 
						 | 
					d6edcfb486 | ||
| 
						 | 
					1d5a914c1c | ||
| 
						 | 
					666bc9ee4e | ||
| 
						 | 
					e545e33d5f | ||
| 
						 | 
					326e8b9fc1 | ||
| 
						 | 
					0d1fc73f21 | ||
| 
						 | 
					50a1853560 | ||
| 
						 | 
					35e158d80b | ||
| 
						 | 
					7225b14002 | ||
| 
						 | 
					85838a8966 | ||
| 
						 | 
					d29590f583 | ||
| 
						 | 
					467c3e3a1f | ||
| 
						 | 
					b484b3b696 | ||
| 
						 | 
					b45d50ccc2 | ||
| 
						 | 
					78e0ba82b0 | ||
| 
						 | 
					c39c55cb2d | ||
| 
						 | 
					cf004cbc7e | ||
| 
						 | 
					9948250723 | ||
| 
						 | 
					47afa058a8 | ||
| 
						 | 
					40e892bb36 | ||
| 
						 | 
					bc6f3beb9c | ||
| 
						 | 
					f9e1f32adb | ||
| 
						 | 
					93f96835f8 | ||
| 
						 | 
					22f4d81f3e | ||
| 
						 | 
					0d1f80ccb5 | ||
| 
						 | 
					4e87dd89bf | ||
| 
						 | 
					60e4b57ad8 | ||
| 
						 | 
					ce5805a955 | ||
| 
						 | 
					dad0715d79 | ||
| 
						 | 
					52d85341ae | ||
| 
						 | 
					7b2869338d | ||
| 
						 | 
					ab35b2837f | ||
| 
						 | 
					863473a856 | ||
| 
						 | 
					be6af69dc7 | ||
| 
						 | 
					3a80dc7f3e | ||
| 
						 | 
					bd42a2acb1 | ||
| 
						 | 
					7f0e708322 | ||
| 
						 | 
					8cbfe5d24a | ||
| 
						 | 
					bab9f532f2 | ||
| 
						 | 
					09cce943cb | ||
| 
						 | 
					702021e099 | ||
| 
						 | 
					e94c46c00c | ||
| 
						 | 
					9d311ff2c0 | ||
| 
						 | 
					108434b95c | ||
| 
						 | 
					c30cb73a5b | ||
| 
						 | 
					b7c56594b3 | ||
| 
						 | 
					2b700fae9d | ||
| 
						 | 
					ef783d8da7 | ||
| 
						 | 
					a4f1833629 | ||
| 
						 | 
					2c756fa1d7 | ||
| 
						 | 
					385086b460 | ||
| 
						 | 
					72a4715dff | ||
| 
						 | 
					7e6043f04f | ||
| 
						 | 
					576be36249 | ||
| 
						 | 
					c52c592f4c | ||
| 
						 | 
					d9ffd2f544 | ||
| 
						 | 
					a684c51c9b | ||
| 
						 | 
					3fa4ac080e | ||
| 
						 | 
					9c8b2a9958 | ||
| 
						 | 
					498666bdc3 | ||
| 
						 | 
					3d3612e252 | ||
| 
						 | 
					e9920d8a04 | ||
| 
						 | 
					acc5096eef | ||
| 
						 | 
					6717240650 | ||
| 
						 | 
					ef0a2c714b | ||
| 
						 | 
					2cd6403011 | ||
| 
						 | 
					75e1483e0d | ||
| 
						 | 
					8a4532ca2d | ||
| 
						 | 
					13f98c5c18 | ||
| 
						 | 
					30e71d54e0 | ||
| 
						 | 
					465753c2de | ||
| 
						 | 
					e40392ac03 | ||
| 
						 | 
					1eb9fd6c4d | ||
| 
						 | 
					78e47fbb5c | ||
| 
						 | 
					2b59e90c54 | ||
| 
						 | 
					59a30e6d9b | ||
| 
						 | 
					e0287fea20 | ||
| 
						 | 
					4fbf3f16e2 | ||
| 
						 | 
					de6433d5c2 | ||
| 
						 | 
					23ef66f33a | ||
| 
						 | 
					2479e06848 | ||
| 
						 | 
					f2abe03fcf | ||
| 
						 | 
					5e7f1a0eaf | ||
| 
						 | 
					eb9383d49b | ||
| 
						 | 
					817d17354e | ||
| 
						 | 
					88e226c686 | ||
| 
						 | 
					9116dd41bd | ||
| 
						 | 
					213d64fbd7 | ||
| 
						 | 
					a8419d68b6 | ||
| 
						 | 
					87a1c7033e | ||
| 
						 | 
					6e3fa90c9e | ||
| 
						 | 
					b2ef40731a | ||
| 
						 | 
					e2f7030202 | ||
| 
						 | 
					533519cc9c | ||
| 
						 | 
					7c85be9435 | ||
| 
						 | 
					89829093ca | ||
| 
						 | 
					7cb10a1853 | ||
| 
						 | 
					33d67c68de | ||
| 
						 | 
					e46b5719f2 | ||
| 
						 | 
					353f764119 | ||
| 
						 | 
					9f437269fb | ||
| 
						 | 
					45391178c9 | ||
| 
						 | 
					eddeb49fb6 | ||
| 
						 | 
					7ab3b5b3bb | ||
| 
						 | 
					00d5f886e3 | ||
| 
						 | 
					49daeaf805 | ||
| 
						 | 
					d03fbf5dfb | ||
| 
						 | 
					cb72a80fe0 | ||
| 
						 | 
					71d81f1f75 | ||
| 
						 | 
					b0c51d198c | ||
| 
						 | 
					71335e5b99 | ||
| 
						 | 
					c9b23ca055 | ||
| 
						 | 
					7983ec84a7 | ||
| 
						 | 
					8cb2a68694 | ||
| 
						 | 
					485122035c | ||
| 
						 | 
					5c4dba1418 | ||
| 
						 | 
					d6eb28400b | ||
| 
						 | 
					526c61c657 | ||
| 
						 | 
					fd6ec05916 | ||
| 
						 | 
					6789dfc5f5 | ||
| 
						 | 
					193a652e6a | ||
| 
						 | 
					4d12be9867 | ||
| 
						 | 
					87e7f4f688 | ||
| 
						 | 
					5eeaff8235 | ||
| 
						 | 
					7d2e872828 | ||
| 
						 | 
					097938e6c8 | ||
| 
						 | 
					d57b84e290 | ||
| 
						 | 
					fcc07bed90 | ||
| 
						 | 
					43bda5cd17 | ||
| 
						 | 
					45c7f064d4 | ||
| 
						 | 
					4dfc0a78e7 | ||
| 
						 | 
					82bd583251 | ||
| 
						 | 
					78f52c05a9 | ||
| 
						 | 
					d818cbe58c | ||
| 
						 | 
					4ae4336643 | ||
| 
						 | 
					25bcd45034 | ||
| 
						 | 
					f53d6e1c39 | ||
| 
						 | 
					17a3aa1ddc | ||
| 
						 | 
					6c78b4b7c0 | ||
| 
						 | 
					2b634be467 | ||
| 
						 | 
					c5b8e446f6 | ||
| 
						 | 
					7bd55dc17c | ||
| 
						 | 
					009cd96490 | ||
| 
						 | 
					d0242da304 | ||
| 
						 | 
					ab44763cb7 | ||
| 
						 | 
					3a80bb0a09 | ||
| 
						 | 
					77268e0649 | ||
| 
						 | 
					1ceb77b4dc | ||
| 
						 | 
					3430ce7907 | ||
| 
						 | 
					4ba7ef34d1 | ||
| 
						 | 
					4515d06465 | ||
| 
						 | 
					b6a4ca9bc8 | ||
| 
						 | 
					9b6350d0b0 | ||
| 
						 | 
					07de0ff0ff | ||
| 
						 | 
					7d8cd5906c | ||
| 
						 | 
					1056d2d22d | ||
| 
						 | 
					d571064b65 | ||
| 
						 | 
					33eaf2e18b | ||
| 
						 | 
					a054e5baf3 | ||
| 
						 | 
					85af357d81 | ||
| 
						 | 
					d687eed33e | ||
| 
						 | 
					38b6016dfa | ||
| 
						 | 
					be2cdf14f3 | ||
| 
						 | 
					0943f33438 | ||
| 
						 | 
					4427d91479 | ||
| 
						 | 
					0c03ed6013 | ||
| 
						 | 
					0c3c1b390a | ||
| 
						 | 
					9b09193cfd | ||
| 
						 | 
					b2cff76722 | ||
| 
						 | 
					37817667e2 | ||
| 
						 | 
					f9b2b7940e | ||
| 
						 | 
					5168b32f86 | ||
| 
						 | 
					0373758359 | ||
| 
						 | 
					df94c7aedc | ||
| 
						 | 
					6bd2de0c42 | ||
| 
						 | 
					82c31256e1 | ||
| 
						 | 
					403cbbe0c4 | ||
| 
						 | 
					9a7e3437ae | ||
| 
						 | 
					4fa58560bf | ||
| 
						 | 
					be62b27ce2 | ||
| 
						 | 
					3be66f3a03 | ||
| 
						 | 
					089bdaed00 | ||
| 
						 | 
					0d3674129f | ||
| 
						 | 
					fce6783be4 | ||
| 
						 | 
					48bc26e7e3 | ||
| 
						 | 
					f128fae705 | ||
| 
						 | 
					800fa31b65 | ||
| 
						 | 
					2ae4420869 | ||
| 
						 | 
					8ba042cf88 | ||
| 
						 | 
					7adf43c1c5 | ||
| 
						 | 
					d007e5615c | ||
| 
						 | 
					888eec833c | ||
| 
						 | 
					2911e63bc2 | ||
| 
						 | 
					34d247bc4e | ||
| 
						 | 
					99bc7e5fd3 | ||
| 
						 | 
					0b1f7995c5 | ||
| 
						 | 
					f35c28214e | ||
| 
						 | 
					35fd1365ae | ||
| 
						 | 
					f493081004 | ||
| 
						 | 
					e1b5e15431 | ||
| 
						 | 
					1aba4c519b | ||
| 
						 | 
					ae76a67566 | ||
| 
						 | 
					76241d0a02 | ||
| 
						 | 
					89227a9d75 | ||
| 
						 | 
					dfb5090e0f | ||
| 
						 | 
					c7fe8a7a11 | ||
| 
						 | 
					7174ca7a20 | ||
| 
						 | 
					2e61fde07f | ||
| 
						 | 
					41263f7d88 | ||
| 
						 | 
					02095ba0e1 | ||
| 
						 | 
					32a678eab3 | ||
| 
						 | 
					bd7ba3bde6 | ||
| 
						 | 
					0ffec4272a | ||
| 
						 | 
					ea4cd4d8aa | ||
| 
						 | 
					c7775c59bf | ||
| 
						 | 
					243bd5bbb4 | ||
| 
						 | 
					4bde770169 | ||
| 
						 | 
					9af7e46f72 | ||
| 
						 | 
					7d844c430c | ||
| 
						 | 
					4f953b6459 | ||
| 
						 | 
					44995d6877 | ||
| 
						 | 
					2ebc821558 | ||
| 
						 | 
					907bb78f3e | ||
| 
						 | 
					b2e1bf7e7d | ||
| 
						 | 
					7173a0f7b6 | ||
| 
						 | 
					a49bebc74e | ||
| 
						 | 
					8777ba7e42 | ||
| 
						 | 
					a39669198f | ||
| 
						 | 
					2c0c75e345 | ||
| 
						 | 
					236337ce86 | ||
| 
						 | 
					224ccc780a | ||
| 
						 | 
					ccde85d198 | ||
| 
						 | 
					9e7657d6ed | ||
| 
						 | 
					7ac455fca3 | ||
| 
						 | 
					e295cd759c | ||
| 
						 | 
					a472cd9310 | ||
| 
						 | 
					8794cb286b | ||
| 
						 | 
					455b1af214 | ||
| 
						 | 
					d765a00adb | ||
| 
						 | 
					de37308722 | ||
| 
						 | 
					7729c63be0 | ||
| 
						 | 
					eebcf90942 | ||
| 
						 | 
					fa8ecd3d53 | ||
| 
						 | 
					134cb66129 | ||
| 
						 | 
					349a15b089 | ||
| 
						 | 
					c14fa2c935 | ||
| 
						 | 
					6ca7af3419 | ||
| 
						 | 
					afa5924487 | ||
| 
						 | 
					bd63a557f3 | ||
| 
						 | 
					49aa798082 | ||
| 
						 | 
					c6e5b67197 | ||
| 
						 | 
					e7050f97c4 | ||
| 
						 | 
					b28f3d43bf | ||
| 
						 | 
					edd467a12c | ||
| 
						 | 
					0bf1bd51c4 | ||
| 
						 | 
					4cf70e3069 | ||
| 
						 | 
					9efddfedab | ||
| 
						 | 
					4b11e19f26 | ||
| 
						 | 
					de681d3b8f | ||
| 
						 | 
					f33be3c313 | ||
| 
						 | 
					62a12b7faf | ||
| 
						 | 
					e75ab79bdb | ||
| 
						 | 
					abd7e32c66 | ||
| 
						 | 
					e2b6a45cfa | ||
| 
						 | 
					e0c0b2ba7d | ||
| 
						 | 
					debbcf81bb | ||
| 
						 | 
					8300a880cc | ||
| 
						 | 
					420bbd2e08 | ||
| 
						 | 
					d87981e4c1 | ||
| 
						 | 
					59091fa860 | ||
| 
						 | 
					dc659ec736 | ||
| 
						 | 
					09aa165942 | ||
| 
						 | 
					f2fbb5f3d5 | ||
| 
						 | 
					29bedfcf7f | ||
| 
						 | 
					ccdaa0b51f | ||
| 
						 | 
					f516734941 | ||
| 
						 | 
					d53d33698c | ||
| 
						 | 
					39926181ea | ||
| 
						 | 
					8415b4a271 | ||
| 
						 | 
					e4916145ef | ||
| 
						 | 
					3ec605de67 | ||
| 
						 | 
					a7e04cac78 | ||
| 
						 | 
					8ddc18a4f9 | ||
| 
						 | 
					0d3aa8b7be | ||
| 
						 | 
					496bbceef1 | ||
| 
						 | 
					901edd32b5 | ||
| 
						 | 
					0612c275a7 | ||
| 
						 | 
					f3d91528a1 | ||
| 
						 | 
					f7fae23546 | ||
| 
						 | 
					2d41efb71e | ||
| 
						 | 
					7abf2f44ec | ||
| 
						 | 
					3a36d4fdea | ||
| 
						 | 
					12b71e422f | ||
| 
						 | 
					d25a0a1bc8 | ||
| 
						 | 
					4d17e77532 | ||
| 
						 | 
					6a921197e2 | ||
| 
						 | 
					fa57a8a78e | ||
| 
						 | 
					eb4d65d0ba | ||
| 
						 | 
					e7d9ea8919 | ||
| 
						 | 
					372b141d5b | ||
| 
						 | 
					115e74a8ad | ||
| 
						 | 
					1b26fe39f9 | ||
| 
						 | 
					4674f3f115 | ||
| 
						 | 
					d8a1415646 | ||
| 
						 | 
					773e7e871e | ||
| 
						 | 
					1d937d62c0 | ||
| 
						 | 
					f3663a9d0f | ||
| 
						 | 
					199b2f4602 | ||
| 
						 | 
					49ab1d914c | ||
| 
						 | 
					f9a6e7b68d | ||
| 
						 | 
					5d64d657de | ||
| 
						 | 
					52caba0417 | ||
| 
						 | 
					ad1a70205f | ||
| 
						 | 
					d57eed6f22 | ||
| 
						 | 
					a3d39efa3b | ||
| 
						 | 
					50efb8f33e | ||
| 
						 | 
					ad75360ec7 | ||
| 
						 | 
					7f29bf61e2 | ||
| 
						 | 
					9ca395fded | ||
| 
						 | 
					68e140b2eb | ||
| 
						 | 
					283f68f660 | ||
| 
						 | 
					e6947f99ed | ||
| 
						 | 
					93e32e6f62 | ||
| 
						 | 
					f8a5ec1380 | ||
| 
						 | 
					2d0b2f294f | ||
| 
						 | 
					08e286ed68 | ||
| 
						 | 
					220caed248 | ||
| 
						 | 
					6eb0b5b917 | ||
| 
						 | 
					3bdc883c93 | ||
| 
						 | 
					cc85f813d1 | ||
| 
						 | 
					e723d2eb7c | ||
| 
						 | 
					b440c6638f | ||
| 
						 | 
					648c5b05c0 | ||
| 
						 | 
					011929cf4d | ||
| 
						 | 
					7f679c3da3 | ||
| 
						 | 
					3e4cd0b422 | ||
| 
						 | 
					fc4f777b42 | ||
| 
						 | 
					208a31f549 | ||
| 
						 | 
					e565631afe | ||
| 
						 | 
					9f2780a2ee | ||
| 
						 | 
					1a6969a887 | ||
| 
						 | 
					f56d753507 | ||
| 
						 | 
					e5165af5a6 | ||
| 
						 | 
					83e878420a | ||
| 
						 | 
					58a5f485db | ||
| 
						 | 
					e8fb77fac3 | ||
| 
						 | 
					d292088a83 | ||
| 
						 | 
					de100f8b51 | ||
| 
						 | 
					1cb2306ae0 | ||
| 
						 | 
					cc90a235f4 | ||
| 
						 | 
					e97ce57d0b | ||
| 
						 | 
					dc753b8315 | ||
| 
						 | 
					a5c4442ebf | ||
| 
						 | 
					a271cfb697 | ||
| 
						 | 
					6dffe9702d | ||
| 
						 | 
					f71139750d | ||
| 
						 | 
					690b3e58b2 | ||
| 
						 | 
					0c7cb0c10f | ||
| 
						 | 
					4816294f52 | ||
| 
						 | 
					6587ff440a | ||
| 
						 | 
					791e49134b | ||
| 
						 | 
					9254c3a103 | ||
| 
						 | 
					9c95ebcbe7 | ||
| 
						 | 
					3a4ed71b88 | ||
| 
						 | 
					d6d312d550 | ||
| 
						 | 
					1fa163fdf7 | ||
| 
						 | 
					82b27d1b97 | ||
| 
						 | 
					f7dee3b846 | ||
| 
						 | 
					a7b5045598 | ||
| 
						 | 
					b7fda8ec73 | ||
| 
						 | 
					3d7f4c0d77 | ||
| 
						 | 
					01771e50a1 | ||
| 
						 | 
					c23cf6a058 | ||
| 
						 | 
					79f9914af8 | ||
| 
						 | 
					803fb123cb | ||
| 
						 | 
					97728f5b1c | ||
| 
						 | 
					36d5f30b8c | ||
| 
						 | 
					e82a575894 | ||
| 
						 | 
					773a8fe598 | ||
| 
						 | 
					fa1c0d4a56 | ||
| 
						 | 
					7e01548d46 | ||
| 
						 | 
					14b36a8cba | ||
| 
						 | 
					1089d91e77 | ||
| 
						 | 
					556b68f44e | ||
| 
						 | 
					3f37ae471d | ||
| 
						 | 
					9f4e682ca9 | ||
| 
						 | 
					5fc8d4da45 | ||
| 
						 | 
					4af66b70fc | ||
| 
						 | 
					95dd343244 | ||
| 
						 | 
					e449aab0af | ||
| 
						 | 
					3a0192bea6 | ||
| 
						 | 
					37685848d1 | ||
| 
						 | 
					0412a201a3 | ||
| 
						 | 
					ca522d4787 | ||
| 
						 | 
					c2967c3c39 | ||
| 
						 | 
					70d7a9e6a5 | ||
| 
						 | 
					462d1c5231 | ||
| 
						 | 
					886391d145 | ||
| 
						 | 
					1442fab4b6 | ||
| 
						 | 
					aa93e2e638 | ||
| 
						 | 
					e1d541086c | ||
| 
						 | 
					3b0f52205d | ||
| 
						 | 
					b84eaff1d5 | ||
| 
						 | 
					9eb6fc1fb6 | ||
| 
						 | 
					253f5f1a9a | ||
| 
						 | 
					dd1f495c2f | ||
| 
						 | 
					12fa877f00 | ||
| 
						 | 
					580a2fe72b | ||
| 
						 | 
					7f0ec86769 | ||
| 
						 | 
					5e69ca0ebd | ||
| 
						 | 
					b6592e29a4 | ||
| 
						 | 
					4cba2ea1ad | ||
| 
						 | 
					14cb9d296c | ||
| 
						 | 
					df750c236c | ||
| 
						 | 
					154c9bc3b8 | ||
| 
						 | 
					508ad2c92f | ||
| 
						 | 
					36a90aeaec | ||
| 
						 | 
					f385b1976e | ||
| 
						 | 
					3d99b566a6 | ||
| 
						 | 
					99a3e2d769 | ||
| 
						 | 
					aaa42735e6 | ||
| 
						 | 
					50c80a49cc | ||
| 
						 | 
					6b7f169b10 | ||
| 
						 | 
					01e3bb98b5 | ||
| 
						 | 
					7052598e59 | ||
| 
						 | 
					ab52e20832 | ||
| 
						 | 
					f50678eda7 | ||
| 
						 | 
					3ded81188b | ||
| 
						 | 
					a435151735 | ||
| 
						 | 
					bfe5568c85 | ||
| 
						 | 
					7e45a1ac53 | ||
| 
						 | 
					76a51ef4b3 | ||
| 
						 | 
					fc7c4d6157 | ||
| 
						 | 
					4d17d6876e | ||
| 
						 | 
					0d6236f7e1 | ||
| 
						 | 
					0e4e72f193 | ||
| 
						 | 
					107413c021 | ||
| 
						 | 
					d7579087f2 | ||
| 
						 | 
					3415ac3866 | ||
| 
						 | 
					d50b209a7a | ||
| 
						 | 
					62e0f10eba | ||
| 
						 | 
					0b2b7439fe | ||
| 
						 | 
					edcd1981ea | ||
| 
						 | 
					ada9a9f4a1 | ||
| 
						 | 
					1c0e4f1178 | ||
| 
						 | 
					663d2080d1 | ||
| 
						 | 
					e5641a33bb | ||
| 
						 | 
					9b24c9a754 | ||
| 
						 | 
					99b96d5446 | ||
| 
						 | 
					cf7817eb38 | ||
| 
						 | 
					9bca9681ba | ||
| 
						 | 
					958987c214 | ||
| 
						 | 
					ed75842df0 | ||
| 
						 | 
					f35398e414 | ||
| 
						 | 
					3b39cee785 | ||
| 
						 | 
					dc932f739a | ||
| 
						 | 
					7d15651115 | ||
| 
						 | 
					e096072745 | ||
| 
						 | 
					5d947e973e | ||
| 
						 | 
					2465ff991f | ||
| 
						 | 
					d10a941d29 | ||
| 
						 | 
					5a58d51993 | ||
| 
						 | 
					142f40582f | ||
| 
						 | 
					4227407438 | ||
| 
						 | 
					6e29f5d1df | ||
| 
						 | 
					334c3df09d | ||
| 
						 | 
					4120b7b0c0 | ||
| 
						 | 
					fac1c13895 | ||
| 
						 | 
					649caa1953 | ||
| 
						 | 
					d8ee927be2 | ||
| 
						 | 
					3efb90dd75 | ||
| 
						 | 
					e4c5653035 | ||
| 
						 | 
					ad7e26b140 | ||
| 
						 | 
					f39749cee4 | ||
| 
						 | 
					87eb26a33d | ||
| 
						 | 
					9a48ca69fc | ||
| 
						 | 
					a259f66fa4 | ||
| 
						 | 
					83d77dc013 | ||
| 
						 | 
					e36914a425 | ||
| 
						 | 
					5bd0471315 | ||
| 
						 | 
					b791e158f0 | ||
| 
						 | 
					6cd0a90b52 | ||
| 
						 | 
					d5bb877fba | ||
| 
						 | 
					0c4907afcc | ||
| 
						 | 
					e5cd0cc402 | ||
| 
						 | 
					252423a725 | ||
| 
						 | 
					eaddf3d198 | ||
| 
						 | 
					a37a79c2a9 | ||
| 
						 | 
					fadf077502 | ||
| 
						 | 
					863c7c7282 | ||
| 
						 | 
					3a85b187c6 | ||
| 
						 | 
					296ccc35d2 | ||
| 
						 | 
					68826c25f8 | ||
| 
						 | 
					5e2fcc1f74 | ||
| 
						 | 
					e262a7265a | ||
| 
						 | 
					945c6f7279 | ||
| 
						 | 
					6ddec1f169 | ||
| 
						 | 
					9beae7693a | ||
| 
						 | 
					d204c62c39 | ||
| 
						 | 
					13dd99842a | ||
| 
						 | 
					2431b2caff | ||
| 
						 | 
					f44bc85545 | ||
| 
						 | 
					52df162c2f | ||
| 
						 | 
					60787171c7 | ||
| 
						 | 
					61e3d75def | ||
| 
						 | 
					27b7220f1b | ||
| 
						 | 
					a275365c72 | ||
| 
						 | 
					80ef1bad86 | ||
| 
						 | 
					686c70c5b5 | ||
| 
						 | 
					f94502ecba | ||
| 
						 | 
					4c70c3e820 | ||
| 
						 | 
					84990cb176 | ||
| 
						 | 
					eabbb5331a | ||
| 
						 | 
					898bf8bb0b | ||
| 
						 | 
					3d66d10fbe | ||
| 
						 | 
					7052daf475 | ||
| 
						 | 
					846d203d31 | ||
| 
						 | 
					7561cbda0a | ||
| 
						 | 
					c5c89862b2 | ||
| 
						 | 
					3a70d686ee | ||
| 
						 | 
					2d567af069 | ||
| 
						 | 
					d2f7037ff7 | ||
| 
						 | 
					c3614fa6a3 | ||
| 
						 | 
					f1da9e508e | ||
| 
						 | 
					9e80356dd5 | ||
| 
						 | 
					4a4295290d | ||
| 
						 | 
					57f67d0241 | ||
| 
						 | 
					d50c9218c7 | ||
| 
						 | 
					3c1bb36193 | ||
| 
						 | 
					16c747da76 | ||
| 
						 | 
					baf948db40 | ||
| 
						 | 
					9906eb8e19 | ||
| 
						 | 
					44d931dbc7 | ||
| 
						 | 
					d0ad607c46 | ||
| 
						 | 
					36f76396ea | ||
| 
						 | 
					1cb3cd1463 | ||
| 
						 | 
					a76235c008 | ||
| 
						 | 
					71b3cc08a6 | ||
| 
						 | 
					d8dd9b0008 | ||
| 
						 | 
					35fd3a3139 | ||
| 
						 | 
					90be1d157e | ||
| 
						 | 
					8433068f3a | ||
| 
						 | 
					e043cf22e2 | ||
| 
						 | 
					206039cb76 | ||
| 
						 | 
					4ba05e1128 | ||
| 
						 | 
					0ae7e93299 | ||
| 
						 | 
					5baf747e67 | ||
| 
						 | 
					3a61c98b65 | ||
| 
						 | 
					5173bab0bb | ||
| 
						 | 
					b291bbc9a6 | ||
| 
						 | 
					11e8600390 | ||
| 
						 | 
					93aea06ed9 | ||
| 
						 | 
					9e5aee63c7 | ||
| 
						 | 
					60cc5a3f27 | ||
| 
						 | 
					5ac047dc39 | ||
| 
						 | 
					6cd280fdfb | ||
| 
						 | 
					c8ac7a0d95 | ||
| 
						 | 
					44031f32a1 | ||
| 
						 | 
					7237221108 | ||
| 
						 | 
					ad36138f52 | ||
| 
						 | 
					8a16e48a6c | ||
| 
						 | 
					4c3a2318ae | ||
| 
						 | 
					7beac70644 | ||
| 
						 | 
					b16dfbee99 | ||
| 
						 | 
					202e54cf9c | ||
| 
						 | 
					e0d9e7a255 | ||
| 
						 | 
					c2bc5662b5 | ||
| 
						 | 
					f4569f10f0 | ||
| 
						 | 
					23cfb9a832 | ||
| 
						 | 
					b921777057 | ||
| 
						 | 
					ff6d9a1109 | ||
| 
						 | 
					053f6c85ef | ||
| 
						 | 
					9970fb863d | ||
| 
						 | 
					feeef39ebf | ||
| 
						 | 
					7bf11297fe | ||
| 
						 | 
					292ef5fabb | ||
| 
						 | 
					2b277f85f5 | ||
| 
						 | 
					9363d94f9b | ||
| 
						 | 
					ea1c98dccf | ||
| 
						 | 
					1109a4a629 | ||
| 
						 | 
					2d01740e1a | ||
| 
						 | 
					979a1e6237 | ||
| 
						 | 
					b60e0fa97e | ||
| 
						 | 
					41c6f68d94 | ||
| 
						 | 
					411d0cb715 | ||
| 
						 | 
					8b3946efda | ||
| 
						 | 
					763d6a8524 | ||
| 
						 | 
					232b051254 | ||
| 
						 | 
					aef6208bd7 | ||
| 
						 | 
					50c5a69d70 | ||
| 
						 | 
					9ebe4ab60c | ||
| 
						 | 
					a0edfb90c2 | ||
| 
						 | 
					93a8572928 | ||
| 
						 | 
					591fe66f18 | ||
| 
						 | 
					a99e6445bf | ||
| 
						 | 
					f3e5d4a602 | ||
| 
						 | 
					1d6248baa4 | ||
| 
						 | 
					61685fee7e | ||
| 
						 | 
					55e4d79111 | ||
| 
						 | 
					84b3c3b569 | ||
| 
						 | 
					4ea14b25df | ||
| 
						 | 
					4223f602ed | ||
| 
						 | 
					8146d46386 | ||
| 
						 | 
					36a2fac79f | ||
| 
						 | 
					58cf108251 | ||
| 
						 | 
					6c6e5522cb | ||
| 
						 | 
					aff9a817b4 | ||
| 
						 | 
					f4e987cd19 | ||
| 
						 | 
					b3afb31181 | ||
| 
						 | 
					a3ad4295c9 | ||
| 
						 | 
					2450506c83 | ||
| 
						 | 
					23a6041698 | ||
| 
						 | 
					979ba8a8b5 | ||
| 
						 | 
					cd9dea3091 | ||
| 
						 | 
					989ec98ebd | ||
| 
						 | 
					d262d0a62a | ||
| 
						 | 
					15b775e126 | ||
| 
						 | 
					3788f25eac | ||
| 
						 | 
					5b8852107b | ||
| 
						 | 
					cfe53768dd | ||
| 
						 | 
					947e656367 | ||
| 
						 | 
					50e7545118 | ||
| 
						 | 
					0839d6e6bc | ||
| 
						 | 
					bbafc27b42 | ||
| 
						 | 
					a7de09a966 | ||
| 
						 | 
					1410deb8f7 | ||
| 
						 | 
					7dea4acc46 | ||
| 
						 | 
					a3c09e636d | ||
| 
						 | 
					a025425d06 | ||
| 
						 | 
					4eb9ac0821 | ||
| 
						 | 
					77a5e7c646 | ||
| 
						 | 
					8f0abd31c5 | ||
| 
						 | 
					a13f85fb33 | ||
| 
						 | 
					3b048880ad | ||
| 
						 | 
					24ac5b8a6c | ||
| 
						 | 
					9bc97b2d3c | ||
| 
						 | 
					9825d81973 | ||
| 
						 | 
					1e012c5259 | ||
| 
						 | 
					68c508976f | ||
| 
						 | 
					4d8a53da2f | ||
| 
						 | 
					29d3deaee8 | ||
| 
						 | 
					6c56340e1a | ||
| 
						 | 
					134ab91358 | ||
| 
						 | 
					fb927939e2 | ||
| 
						 | 
					ac114ed45b | ||
| 
						 | 
					d46a735418 | ||
| 
						 | 
					5a87203fe4 | ||
| 
						 | 
					90e9c64f72 | ||
| 
						 | 
					8742d39060 | ||
| 
						 | 
					821302bcf3 | ||
| 
						 | 
					f68219ddaa | ||
| 
						 | 
					7e3cd82b50 | ||
| 
						 | 
					bc372815a8 | ||
| 
						 | 
					391a37ebbf | ||
| 
						 | 
					a61dc1e9c5 | ||
| 
						 | 
					2e0d1a55c6 | ||
| 
						 | 
					dfd1a636b4 | ||
| 
						 | 
					ee337309cf | ||
| 
						 | 
					437afe0767 | ||
| 
						 | 
					0ab2dff69c | ||
| 
						 | 
					bff59dac12 | ||
| 
						 | 
					ea53aed841 | ||
| 
						 | 
					e2555cf83d | ||
| 
						 | 
					f7c8a57206 | ||
| 
						 | 
					02bf6660bf | ||
| 
						 | 
					6c8e6df38f | ||
| 
						 | 
					96d3db1687 | ||
| 
						 | 
					3e43105ff1 | ||
| 
						 | 
					8ccc1148d9 | ||
| 
						 | 
					06c38330ba | ||
| 
						 | 
					0f4d042d3e | ||
| 
						 | 
					c79de8d86e | ||
| 
						 | 
					d670f308a6 | ||
| 
						 | 
					e64e9d7fed | ||
| 
						 | 
					ad5ead8bed | ||
| 
						 | 
					1b99d33b59 | ||
| 
						 | 
					800052dc50 | ||
| 
						 | 
					d4629fd395 | ||
| 
						 | 
					2c22feced2 | ||
| 
						 | 
					41688a1642 | ||
| 
						 | 
					2cf209d3f7 | ||
| 
						 | 
					909887f310 | ||
| 
						 | 
					d1d417664e | ||
| 
						 | 
					7d7e99104e | ||
| 
						 | 
					3eeea48839 | ||
| 
						 | 
					cd653f1be9 | ||
| 
						 | 
					5751796ddd | ||
| 
						 | 
					012c4ee1fa | ||
| 
						 | 
					426954ff95 | ||
| 
						 | 
					471c30372b | ||
| 
						 | 
					f6413f2cb4 | ||
| 
						 | 
					e80bdd66f9 | ||
| 
						 | 
					d083fac1fc | ||
| 
						 | 
					1d85f950bf | ||
| 
						 | 
					1d977b7848 | ||
| 
						 | 
					b3803903d1 | ||
| 
						 | 
					efc9410796 | ||
| 
						 | 
					45614d54c6 | ||
| 
						 | 
					50e690f2dd | ||
| 
						 | 
					2f9f843e8a | ||
| 
						 | 
					15d41dfbcd | ||
| 
						 | 
					bc01ad5b9e | ||
| 
						 | 
					dadc1026f1 | ||
| 
						 | 
					d8cf2d42c0 | ||
| 
						 | 
					96d7a95ce4 | ||
| 
						 | 
					d5d55a856e | ||
| 
						 | 
					dac045029a | ||
| 
						 | 
					1e98727c55 | ||
| 
						 | 
					1c700b5a5c | ||
| 
						 | 
					af9dc9f128 | ||
| 
						 | 
					4874aa6986 | ||
| 
						 | 
					c0336dcc52 | ||
| 
						 | 
					78fb476677 | ||
| 
						 | 
					3fed12a203 | ||
| 
						 | 
					ed2b831afe | ||
| 
						 | 
					f481b3e1dc | ||
| 
						 | 
					2769f3b245 | ||
| 
						 | 
					e9a545c710 | ||
| 
						 | 
					edce444551 | ||
| 
						 | 
					7bee4140e8 | ||
| 
						 | 
					cc48658564 | ||
| 
						 | 
					79e4aee185 | ||
| 
						 | 
					4d28012468 | ||
| 
						 | 
					e1d01045e2 | ||
| 
						 | 
					0717e4690e | ||
| 
						 | 
					a0a5668dbd | ||
| 
						 | 
					bfc7d6c11b | ||
| 
						 | 
					dfe0118033 | ||
| 
						 | 
					a701f3dddf | ||
| 
						 | 
					f99a1d4e82 | ||
| 
						 | 
					43bb20461f | ||
| 
						 | 
					b9d3c71178 | ||
| 
						 | 
					1e251a64f3 | ||
| 
						 | 
					776f0bd95e | ||
| 
						 | 
					cd9aabb474 | ||
| 
						 | 
					e42f806b3f | ||
| 
						 | 
					0850aec780 | ||
| 
						 | 
					ad77f760cf | ||
| 
						 | 
					a50d2a45d7 | ||
| 
						 | 
					17a834bc63 | ||
| 
						 | 
					c10bc0ef12 | ||
| 
						 | 
					f9b1981bd7 | ||
| 
						 | 
					451d34ce21 | ||
| 
						 | 
					445950aa70 | ||
| 
						 | 
					8be602cdfd | ||
| 
						 | 
					3dd40cca9a | ||
| 
						 | 
					f1445ea228 | ||
| 
						 | 
					c40309ae21 | ||
| 
						 | 
					fe0b5801ec | ||
| 
						 | 
					3de511b248 | ||
| 
						 | 
					b1aa8eb7ef | ||
| 
						 | 
					967cb4d75e | ||
| 
						 | 
					bcbaeaf7d5 | ||
| 
						 | 
					41be41358e | ||
| 
						 | 
					ecb818805b | ||
| 
						 | 
					d95f7129d5 | ||
| 
						 | 
					6294b356fb | ||
| 
						 | 
					3e64a76498 | ||
| 
						 | 
					dec9907c16 | ||
| 
						 | 
					527850928d | ||
| 
						 | 
					eee3f13134 | ||
| 
						 | 
					80d2be541d | ||
| 
						 | 
					472c4d8616 | ||
| 
						 | 
					45abf75e1e | ||
| 
						 | 
					4ec4e91de0 | ||
| 
						 | 
					f6645094a2 | ||
| 
						 | 
					7496e87d16 | ||
| 
						 | 
					bd4c081157 | ||
| 
						 | 
					927e392b31 | ||
| 
						 | 
					aeb5edbf07 | ||
| 
						 | 
					67dcddbef7 | ||
| 
						 | 
					7ffb8c6aee | ||
| 
						 | 
					344c378996 | ||
| 
						 | 
					445f54db57 | ||
| 
						 | 
					9b7c311929 | ||
| 
						 | 
					6a21a28048 | ||
| 
						 | 
					0adb75114b | ||
| 
						 | 
					ecfb53f06d | ||
| 
						 | 
					c020ee2eb6 | ||
| 
						 | 
					a3279d4baf | ||
| 
						 | 
					c45f43ce32 | ||
| 
						 | 
					0eb037a849 | ||
| 
						 | 
					5a089f6c1f | ||
| 
						 | 
					556d59dfcf | ||
| 
						 | 
					79cb1400ab | ||
| 
						 | 
					d1b94a5f3f | ||
| 
						 | 
					a07f43d202 | ||
| 
						 | 
					a717afc3a7 | ||
| 
						 | 
					f023b4cc79 | ||
| 
						 | 
					a7aacac5e8 | ||
| 
						 | 
					decdb93ccb | ||
| 
						 | 
					3e24c6a957 | ||
| 
						 | 
					00d2c9d92d | ||
| 
						 | 
					bd383f0c60 | ||
| 
						 | 
					900cecae96 | ||
| 
						 | 
					ffc58c6620 | ||
| 
						 | 
					39f673874f | ||
| 
						 | 
					fe291202db | ||
| 
						 | 
					4606dc4158 | ||
| 
						 | 
					36d6b16c23 | ||
| 
						 | 
					b4d8108ba1 | ||
| 
						 | 
					2c120aa05c | ||
| 
						 | 
					693df0fa34 | ||
| 
						 | 
					fb26b2bd98 | ||
| 
						 | 
					5554f1ccba | ||
| 
						 | 
					46accd62d1 | ||
| 
						 | 
					41535eaea9 | ||
| 
						 | 
					02437b2d51 | ||
| 
						 | 
					c964aedf3b | ||
| 
						 | 
					5f4fb857f0 | ||
| 
						 | 
					0334509754 | ||
| 
						 | 
					aad70aa24e | ||
| 
						 | 
					e9c835ad06 | ||
| 
						 | 
					0701b973df | ||
| 
						 | 
					ec59aa259f | ||
| 
						 | 
					ffc6d062d8 | ||
| 
						 | 
					757a7d0851 | ||
| 
						 | 
					25613503cb | ||
| 
						 | 
					60ef75f2ee | ||
| 
						 | 
					1cdc66d927 | ||
| 
						 | 
					ba12c5deda | ||
| 
						 | 
					203f66d0cb | ||
| 
						 | 
					54c6f2c7c0 | ||
| 
						 | 
					4cccceb034 | ||
| 
						 | 
					245ab7c796 | ||
| 
						 | 
					2bdf52d4c5 | ||
| 
						 | 
					f991a69cce | ||
| 
						 | 
					3dd26b7932 | ||
| 
						 | 
					a5e22867c7 | ||
| 
						 | 
					5c96266d45 | ||
| 
						 | 
					fcfc6de918 | ||
| 
						 | 
					da0b380655 | ||
| 
						 | 
					ed7ac3c932 | ||
| 
						 | 
					b5d4a71883 | ||
| 
						 | 
					a9d74e6c97 | ||
| 
						 | 
					d46afd2b6a | ||
| 
						 | 
					ce4b8420d1 | ||
| 
						 | 
					faabd44658 | ||
| 
						 | 
					2fe5f5ab4b | ||
| 
						 | 
					656d4b4c20 | ||
| 
						 | 
					7247041e21 | ||
| 
						 | 
					017a78d0c5 | ||
| 
						 | 
					9010bd3831 | ||
| 
						 | 
					ded884e825 | ||
| 
						 | 
					b53a5e92c0 | ||
| 
						 | 
					69bdb82586 | ||
| 
						 | 
					4799d39be6 | ||
| 
						 | 
					f32d011d90 | ||
| 
						 | 
					14f795816d | ||
| 
						 | 
					5987791516 | ||
| 
						 | 
					db074518c3 | ||
| 
						 | 
					64731b0056 | ||
| 
						 | 
					debe6a1432 | ||
| 
						 | 
					715c3f6482 | ||
| 
						 | 
					f232baf4d2 | ||
| 
						 | 
					b439e8ffb7 | ||
| 
						 | 
					475166fc8b | ||
| 
						 | 
					be2b742b85 | ||
| 
						 | 
					640d6a5564 | ||
| 
						 | 
					2e9d100d03 | ||
| 
						 | 
					294adcae9d | ||
| 
						 | 
					1fd16e7b04 | ||
| 
						 | 
					d1c08e1d85 | ||
| 
						 | 
					d7c09efeb1 | ||
| 
						 | 
					b83c7ade10 | ||
| 
						 | 
					7d6584e140 | ||
| 
						 | 
					31b6bb6a41 | ||
| 
						 | 
					b84607ff7b | ||
| 
						 | 
					ac2af59880 | ||
| 
						 | 
					d9f961ed2d | ||
| 
						 | 
					c7f5476416 | ||
| 
						 | 
					381c6c5d52 | ||
| 
						 | 
					9df8f9a63d | ||
| 
						 | 
					5eee801d06 | ||
| 
						 | 
					80a06403e4 | ||
| 
						 | 
					7ad69f59c7 | ||
| 
						 | 
					83b82e4472 | ||
| 
						 | 
					65dab79ca5 | ||
| 
						 | 
					f0089b6291 | ||
| 
						 | 
					d10508e08c | ||
| 
						 | 
					630995f40a | ||
| 
						 | 
					f7f7cd6cce | ||
| 
						 | 
					ce7326ed09 | ||
| 
						 | 
					b3591ec464 | ||
| 
						 | 
					b1952e773a | ||
| 
						 | 
					ce5db9a86e | ||
| 
						 | 
					94568f884d | ||
| 
						 | 
					d095b20d1c | ||
| 
						 | 
					18b809e7e4 | ||
| 
						 | 
					3f458fc650 | ||
| 
						 | 
					9935d33b8e | ||
| 
						 | 
					d42c6b7e78 | ||
| 
						 | 
					d70550f949 | ||
| 
						 | 
					679654bd47 | ||
| 
						 | 
					9e3f54431d | ||
| 
						 | 
					3d59934163 | ||
| 
						 | 
					a77d931cd0 | ||
| 
						 | 
					260c353577 | ||
| 
						 | 
					8823679e70 | ||
| 
						 | 
					722ece4055 | ||
| 
						 | 
					cc09e31acf | ||
| 
						 | 
					fe09079778 | ||
| 
						 | 
					8f5b80c715 | ||
| 
						 | 
					460979496e | ||
| 
						 | 
					cadcc12169 | ||
| 
						 | 
					22adcb9cd1 | ||
| 
						 | 
					597c1fe6bc | ||
| 
						 | 
					7201a5a290 | ||
| 
						 | 
					c6a0bb99af | ||
| 
						 | 
					622984de64 | ||
| 
						 | 
					a9af971c59 | ||
| 
						 | 
					171229e122 | ||
| 
						 | 
					b71ca15598 | ||
| 
						 | 
					1c604b7ba9 | ||
| 
						 | 
					749f5387c1 | ||
| 
						 | 
					7553341bad | ||
| 
						 | 
					c6f11b053d | ||
| 
						 | 
					7d6e2a3adb | ||
| 
						 | 
					43cc844d3f | ||
| 
						 | 
					941dfc502a | ||
| 
						 | 
					8341e8e502 | ||
| 
						 | 
					e85881d7ec | ||
| 
						 | 
					c9d154ca7f | ||
| 
						 | 
					5911485f38 | ||
| 
						 | 
					6d6de53eb9 | ||
| 
						 | 
					022996e5c7 | ||
| 
						 | 
					4935853eb9 | ||
| 
						 | 
					d1a3c9944e | ||
| 
						 | 
					8996a7346e | ||
| 
						 | 
					e4adbf4017 | ||
| 
						 | 
					c29740f0d8 | ||
| 
						 | 
					1a4fddb9ba | ||
| 
						 | 
					af19ff51e6 | ||
| 
						 | 
					5438ced6b3 | ||
| 
						 | 
					2eb3ad7678 | ||
| 
						 | 
					b86ad6438e | ||
| 
						 | 
					81f250be59 | ||
| 
						 | 
					9db5dfc15d | ||
| 
						 | 
					377ce6a2c2 | ||
| 
						 | 
					867c189ef7 | ||
| 
						 | 
					33525ac165 | ||
| 
						 | 
					5c52cacc98 | ||
| 
						 | 
					e612f73374 | ||
| 
						 | 
					ff5b6ff528 | ||
| 
						 | 
					c86768d856 | ||
| 
						 | 
					9f002b1289 | ||
| 
						 | 
					0436fbe226 | ||
| 
						 | 
					6494889e3b | ||
| 
						 | 
					f52534522c | ||
| 
						 | 
					0b615afac9 | ||
| 
						 | 
					b61c25af45 | ||
| 
						 | 
					bf20ed5984 | ||
| 
						 | 
					9d5c22d5ae | ||
| 
						 | 
					aaddfa0181 | ||
| 
						 | 
					17e13acd10 | ||
| 
						 | 
					5564e9a321 | ||
| 
						 | 
					a0118fb390 | ||
| 
						 | 
					57b6202eaa | ||
| 
						 | 
					0bbe184f1f | ||
| 
						 | 
					1b0af1c53a | ||
| 
						 | 
					23f8692058 | ||
| 
						 | 
					780652e5b6 | ||
| 
						 | 
					8297ac4a28 | ||
| 
						 | 
					45ef092cc2 | ||
| 
						 | 
					a191fe028c | ||
| 
						 | 
					343291ce37 | ||
| 
						 | 
					b864e25011 | ||
| 
						 | 
					24836d30f5 | ||
| 
						 | 
					ba1ff79b3f | ||
| 
						 | 
					09d593ade0 | ||
| 
						 | 
					d1b17779a3 | ||
| 
						 | 
					588b63a05b | ||
| 
						 | 
					a5c2a86649 | ||
| 
						 | 
					8a46c64c78 | ||
| 
						 | 
					2d4c0af528 | ||
| 
						 | 
					edd09a1b16 | ||
| 
						 | 
					0edab55dd2 | ||
| 
						 | 
					16643faaa1 | ||
| 
						 | 
					881c38b38a | ||
| 
						 | 
					59889d45da | ||
| 
						 | 
					734c17ae56 | ||
| 
						 | 
					48c1943824 | ||
| 
						 | 
					9ef76fecef | ||
| 
						 | 
					8aa2894bfb | ||
| 
						 | 
					f40467638d | ||
| 
						 | 
					2297eca103 | ||
| 
						 | 
					09ccfcdcd4 | ||
| 
						 | 
					bbc01c36d2 | ||
| 
						 | 
					b560428492 | ||
| 
						 | 
					d19134e644 | ||
| 
						 | 
					951e2a6545 | ||
| 
						 | 
					fcacd38036 | ||
| 
						 | 
					c4aca23ec4 | ||
| 
						 | 
					20943292ff | ||
| 
						 | 
					b2ddfb54a7 | ||
| 
						 | 
					76b9631d03 | ||
| 
						 | 
					58b1437cae | ||
| 
						 | 
					c611ac958e | ||
| 
						 | 
					e7160459ab | ||
| 
						 | 
					071fc74c0e | ||
| 
						 | 
					14597475b1 | ||
| 
						 | 
					de3281a3a8 | ||
| 
						 | 
					6e16985156 | ||
| 
						 | 
					50dacab379 | ||
| 
						 | 
					7c2930611b | ||
| 
						 | 
					84bc46ac3b | ||
| 
						 | 
					fd42247cac | ||
| 
						 | 
					0efcb57623 | ||
| 
						 | 
					6fde147273 | ||
| 
						 | 
					cc497fd153 | ||
| 
						 | 
					c1f31180a2 | ||
| 
						 | 
					d4ab68cd51 | ||
| 
						 | 
					e8c762981a | ||
| 
						 | 
					0ef3e6fe8a | ||
| 
						 | 
					adcbe03aeb | ||
| 
						 | 
					359c0eac0d | ||
| 
						 | 
					a53d7848eb | ||
| 
						 | 
					29b7fb628e | ||
| 
						 | 
					df760a0a4b | ||
| 
						 | 
					f2057eb744 | ||
| 
						 | 
					2956fe97a0 | ||
| 
						 | 
					1f9b0e70ab | ||
| 
						 | 
					8fae12b2f1 | ||
| 
						 | 
					7410210f19 | ||
| 
						 | 
					40e6b12cca | ||
| 
						 | 
					f2d422235b | ||
| 
						 | 
					6a678f6d64 | ||
| 
						 | 
					52ceab5e41 | ||
| 
						 | 
					cafcc242e6 | ||
| 
						 | 
					2ad0a7d20f | ||
| 
						 | 
					481094db90 | ||
| 
						 | 
					840c0af014 | ||
| 
						 | 
					f193ab4b59 | ||
| 
						 | 
					f7db3023a8 | ||
| 
						 | 
					cfe80449e2 | ||
| 
						 | 
					818d231849 | ||
| 
						 | 
					eb9937ec1a | ||
| 
						 | 
					070cd2b52f | ||
| 
						 | 
					96d9ddee38 | ||
| 
						 | 
					5629eeaec2 | ||
| 
						 | 
					46c2bc4bb6 | ||
| 
						 | 
					3938e0f58b | ||
| 
						 | 
					fa162e8feb | ||
| 
						 | 
					a95df8246b | ||
| 
						 | 
					8feb5110b5 | ||
| 
						 | 
					32899f8309 | ||
| 
						 | 
					dc7c6d1030 | ||
| 
						 | 
					7fdd0bd367 | ||
| 
						 | 
					4459d3b434 | ||
| 
						 | 
					7e7d89471a | ||
| 
						 | 
					e67d15b50e | ||
| 
						 | 
					bd78878cc3 | ||
| 
						 | 
					5974309d10 | ||
| 
						 | 
					d00e4a377b | ||
| 
						 | 
					afc6ade2b9 | ||
| 
						 | 
					734e8d6229 | ||
| 
						 | 
					61629d2c86 | ||
| 
						 | 
					cb48c6a3d8 | ||
| 
						 | 
					93a29c3c45 | ||
| 
						 | 
					e92b7c73bc | ||
| 
						 | 
					0ea74e3255 | ||
| 
						 | 
					3bd52e3cb1 | ||
| 
						 | 
					c7f9c51fe6 | ||
| 
						 | 
					b1da98170f | ||
| 
						 | 
					0496598e77 | ||
| 
						 | 
					fb3eee5f0b | ||
| 
						 | 
					e16bc91601 | ||
| 
						 | 
					a8c78cbbb0 | ||
| 
						 | 
					3a5a6038e7 | ||
| 
						 | 
					d412724598 | ||
| 
						 | 
					f95de76789 | ||
| 
						 | 
					33cf204e9a | ||
| 
						 | 
					dafc652f63 | ||
| 
						 | 
					c16dd085f1 | ||
| 
						 | 
					a7349a48ff | ||
| 
						 | 
					8042cd93c3 | ||
| 
						 | 
					394faaeb97 | ||
| 
						 | 
					5c2df3e1a4 | ||
| 
						 | 
					6fc55467f4 | ||
| 
						 | 
					a147a07956 | ||
| 
						 | 
					a10581d459 | ||
| 
						 | 
					cc2d6942bb | ||
| 
						 | 
					3974c02bb1 | ||
| 
						 | 
					09b5ddaea5 | ||
| 
						 | 
					acbcd68d89 | ||
| 
						 | 
					4281470fca | ||
| 
						 | 
					68a4aa6773 | ||
| 
						 | 
					905b160097 | ||
| 
						 | 
					52596c339b | ||
| 
						 | 
					73500267ee | ||
| 
						 | 
					e6011e33a6 | ||
| 
						 | 
					3454319c17 | ||
| 
						 | 
					02c78ecf81 | ||
| 
						 | 
					caca034302 | ||
| 
						 | 
					fb366ed35f | ||
| 
						 | 
					b352ffca15 | ||
| 
						 | 
					2d94856efd | ||
| 
						 | 
					ae66bd1284 | ||
| 
						 | 
					89d9d4e6c8 | ||
| 
						 | 
					fe60fc4730 | ||
| 
						 | 
					46690d5e1c | ||
| 
						 | 
					beaea8cb25 | ||
| 
						 | 
					409ec90c85 | ||
| 
						 | 
					4d423eeabe | ||
| 
						 | 
					019e612225 | ||
| 
						 | 
					6550d271f0 | ||
| 
						 | 
					c46da65263 | ||
| 
						 | 
					b46745759b | ||
| 
						 | 
					9687571a84 | ||
| 
						 | 
					c13236de25 | ||
| 
						 | 
					8ffbb6acd4 | ||
| 
						 | 
					a3e5d81765 | ||
| 
						 | 
					e2aecfe80f | ||
| 
						 | 
					a3c1248214 | ||
| 
						 | 
					b933639222 | ||
| 
						 | 
					27619fc450 | ||
| 
						 | 
					96fecba190 | ||
| 
						 | 
					50257d4f50 | ||
| 
						 | 
					3eb4ae031c | ||
| 
						 | 
					6a4ec3be81 | ||
| 
						 | 
					cc9ac6ad14 | ||
| 
						 | 
					644990a835 | ||
| 
						 | 
					d3b81ea3f7 | ||
| 
						 | 
					3660f67534 | ||
| 
						 | 
					203cc4a5c3 | ||
| 
						 | 
					c7be232fee | ||
| 
						 | 
					2617b379be | ||
| 
						 | 
					84ed5e755a | ||
| 
						 | 
					2f17615790 | ||
| 
						 | 
					acfa131c8c | ||
| 
						 | 
					793d0e27e1 | ||
| 
						 | 
					fdf0c443c3 | ||
| 
						 | 
					1b39b53321 | ||
| 
						 | 
					1679993e3b | ||
| 
						 | 
					4c831f8b68 | ||
| 
						 | 
					7a19923afa | ||
| 
						 | 
					3e122a765d | ||
| 
						 | 
					d873ba8c9f | ||
| 
						 | 
					8093338f39 | ||
| 
						 | 
					07660eea1e | ||
| 
						 | 
					a2b2d4cd5c | ||
| 
						 | 
					96e217b496 | ||
| 
						 | 
					2dd1518d63 | ||
| 
						 | 
					168703b7bf | ||
| 
						 | 
					0f2d680f1f | ||
| 
						 | 
					b7930b6ebd | ||
| 
						 | 
					8fa43b469a | ||
| 
						 | 
					894e52f61a | ||
| 
						 | 
					3c294691aa | ||
| 
						 | 
					acbf932861 | ||
| 
						 | 
					26f5c53be8 | ||
| 
						 | 
					8dd069604c | ||
| 
						 | 
					5dadbd094e | ||
| 
						 | 
					514a8739b6 | ||
| 
						 | 
					12e78a082e | ||
| 
						 | 
					9273096a8a | ||
| 
						 | 
					686c6133f8 | ||
| 
						 | 
					1d1276cc3a | ||
| 
						 | 
					d987676ef0 | ||
| 
						 | 
					6e4658c89d | ||
| 
						 | 
					b7cbcf7434 | ||
| 
						 | 
					e347d06a49 | ||
| 
						 | 
					2077e9365a | ||
| 
						 | 
					6e3adc9b14 | ||
| 
						 | 
					7954eee639 | ||
| 
						 | 
					f9f1f0e316 | ||
| 
						 | 
					a9afe6aa84 | ||
| 
						 | 
					6d36796135 | ||
| 
						 | 
					9e81fd5703 | ||
| 
						 | 
					609059b6ec | ||
| 
						 | 
					6af73f417a | ||
| 
						 | 
					32468a0072 | ||
| 
						 | 
					6800c45104 | ||
| 
						 | 
					0d8c754ffd | ||
| 
						 | 
					1b80276496 | ||
| 
						 | 
					bf9a138276 | ||
| 
						 | 
					b3f9c636b9 | ||
| 
						 | 
					18975d44a6 | ||
| 
						 | 
					b201db5cec | ||
| 
						 | 
					bbe23945e4 | ||
| 
						 | 
					bbdc0394ff | ||
| 
						 | 
					38a9b14965 | ||
| 
						 | 
					77ba0d3686 | ||
| 
						 | 
					065c8d7a95 | ||
| 
						 | 
					c704d1545c | ||
| 
						 | 
					62b65a5f20 | ||
| 
						 | 
					665a7a3848 | ||
| 
						 | 
					256b9f31e1 | ||
| 
						 | 
					a3037e1173 | ||
| 
						 | 
					f3e7a5d755 | ||
| 
						 | 
					5f0cba7775 | ||
| 
						 | 
					673759fe7e | ||
| 
						 | 
					b73612392d | ||
| 
						 | 
					f85935f0f9 | ||
| 
						 | 
					1e7e53c87e | ||
| 
						 | 
					b9fdf3cc3b | ||
| 
						 | 
					c462601362 | ||
| 
						 | 
					859877dcfc | ||
| 
						 | 
					c04ce95106 | ||
| 
						 | 
					98ee12bc35 | ||
| 
						 | 
					fdda786fa2 | ||
| 
						 | 
					831be4f4dd | ||
| 
						 | 
					41ae97e710 | ||
| 
						 | 
					f72ba7f79d | ||
| 
						 | 
					296046510b | ||
| 
						 | 
					db9f87f697 | ||
| 
						 | 
					3270ea55dd | ||
| 
						 | 
					a358ac24f4 | ||
| 
						 | 
					8bedd43b28 | ||
| 
						 | 
					9ea2087ede | ||
| 
						 | 
					9f7c634133 | ||
| 
						 | 
					da20d68a12 | ||
| 
						 | 
					d3e512c738 | ||
| 
						 | 
					339f84fe1f | ||
| 
						 | 
					2d41b735ec | ||
| 
						 | 
					e3b4dd08ff | ||
| 
						 | 
					6809a906bb | ||
| 
						 | 
					1c35cbcc07 | ||
| 
						 | 
					5f8989a436 | ||
| 
						 | 
					aa7b0648ff | ||
| 
						 | 
					2fbe61960f | ||
| 
						 | 
					bdb5e5a250 | ||
| 
						 | 
					48a580e609 | ||
| 
						 | 
					1361fc69b9 | ||
| 
						 | 
					93352e56d8 | ||
| 
						 | 
					d9246ff24d | ||
| 
						 | 
					9301bc3444 | ||
| 
						 | 
					76352c4e2d | ||
| 
						 | 
					428f41bd12 | ||
| 
						 | 
					99c32e460f | ||
| 
						 | 
					83f249cf65 | ||
| 
						 | 
					2c2baa93ea | ||
| 
						 | 
					f0278ca114 | ||
| 
						 | 
					297b1b5013 | ||
| 
						 | 
					e9f63bf4e8 | ||
| 
						 | 
					556ce1c6a1 | ||
| 
						 | 
					cc4ff62681 | ||
| 
						 | 
					0423fd9b55 | ||
| 
						 | 
					789ab20bf7 | ||
| 
						 | 
					b47462bd68 | ||
| 
						 | 
					1a94fee42d | ||
| 
						 | 
					a91ce6a5d6 | ||
| 
						 | 
					981ffd9fce | ||
| 
						 | 
					e76c960624 | ||
| 
						 | 
					416c92cc6f | ||
| 
						 | 
					fb731eb3e7 | ||
| 
						 | 
					6f2a4d290f | ||
| 
						 | 
					cefc8ba938 | ||
| 
						 | 
					d0bd644eef | ||
| 
						 | 
					071c95128e | ||
| 
						 | 
					1a192c489b | ||
| 
						 | 
					56014e74a0 | ||
| 
						 | 
					172271498d | ||
| 
						 | 
					f2882cb88c | ||
| 
						 | 
					152f1fee40 | ||
| 
						 | 
					968234e6ae | ||
| 
						 | 
					5e133e2dff | ||
| 
						 | 
					0049c09fc3 | ||
| 
						 | 
					a2a63c27f4 | ||
| 
						 | 
					c50a601f1a | ||
| 
						 | 
					bc0fd6db71 | ||
| 
						 | 
					52b631fade | ||
| 
						 | 
					2f0bc9d1f7 | ||
| 
						 | 
					5ef6520d4e | ||
| 
						 | 
					2c1925161e | ||
| 
						 | 
					0529b349d5 | ||
| 
						 | 
					b4620364a2 | ||
| 
						 | 
					634aef3895 | ||
| 
						 | 
					06c86d1a8c | ||
| 
						 | 
					79749f8eb4 | ||
| 
						 | 
					b036986b3e | ||
| 
						 | 
					938f1d1da7 | ||
| 
						 | 
					58b6b3df06 | ||
| 
						 | 
					f9c3347f7c | ||
| 
						 | 
					5b72eb0b03 | ||
| 
						 | 
					6dd4c13bc0 | ||
| 
						 | 
					e4e7db551f | ||
| 
						 | 
					ebfde8da56 | ||
| 
						 | 
					756bc0f4b7 | ||
| 
						 | 
					269d491b6a | ||
| 
						 | 
					449e5bc2ad | ||
| 
						 | 
					8736c11d84 | ||
| 
						 | 
					45fc760985 | ||
| 
						 | 
					7968e3c2de | ||
| 
						 | 
					964a41c75c | ||
| 
						 | 
					5931d53637 | ||
| 
						 | 
					3ed3ae5bcf | ||
| 
						 | 
					6519cc70c5 | ||
| 
						 | 
					505a4f27fa | ||
| 
						 | 
					79144eba99 | ||
| 
						 | 
					26e17d89c9 | ||
| 
						 | 
					4322c1106f | ||
| 
						 | 
					73071dfd4f | ||
| 
						 | 
					b7c14b3c27 | ||
| 
						 | 
					3130b44535 | ||
| 
						 | 
					a2bd73334f | ||
| 
						 | 
					1a393f5625 | ||
| 
						 | 
					d4951e837e | ||
| 
						 | 
					26f6365e93 | ||
| 
						 | 
					3a552b1e63 | ||
| 
						 | 
					69eb1790da | ||
| 
						 | 
					a1af6f3614 | ||
| 
						 | 
					3aced61465 | ||
| 
						 | 
					6f02ddfce8 | ||
| 
						 | 
					c2faa39b62 | ||
| 
						 | 
					2d3734b8b5 | ||
| 
						 | 
					ed908b7f89 | ||
| 
						 | 
					f7d795a364 | ||
| 
						 | 
					8919b39d54 | ||
| 
						 | 
					84cedc094e | ||
| 
						 | 
					3b2b2496d7 | ||
| 
						 | 
					445684c409 | ||
| 
						 | 
					898e067ccc | ||
| 
						 | 
					12859e345f | ||
| 
						 | 
					89f4af695e | ||
| 
						 | 
					308bc9d919 | ||
| 
						 | 
					db566c54ae | ||
| 
						 | 
					81d403e207 | ||
| 
						 | 
					2bd71d70ff | ||
| 
						 | 
					1eef6f44ba | ||
| 
						 | 
					204f03912f | ||
| 
						 | 
					f8c3b3aa18 | ||
| 
						 | 
					d4df981463 | ||
| 
						 | 
					497c6d516d | ||
| 
						 | 
					8288862b7e | ||
| 
						 | 
					9aae16c236 | ||
| 
						 | 
					80c194a70a | ||
| 
						 | 
					c832b2db5b | ||
| 
						 | 
					27018882ec | ||
| 
						 | 
					caf6e9c540 | ||
| 
						 | 
					e727fb82f2 | ||
| 
						 | 
					c78df56801 | ||
| 
						 | 
					d13202f43b | ||
| 
						 | 
					9d139a6b35 | ||
| 
						 | 
					d2abe44e6f | ||
| 
						 | 
					bc67228576 | ||
| 
						 | 
					ecf32c964a | ||
| 
						 | 
					e58f30b82a | ||
| 
						 | 
					654e3f1101 | ||
| 
						 | 
					86689dc524 | ||
| 
						 | 
					5f62a0c1ca | ||
| 
						 | 
					ad1bf0f389 | ||
| 
						 | 
					9c7703ace1 | ||
| 
						 | 
					4a8155b53c | ||
| 
						 | 
					80d6d5c5c4 | ||
| 
						 | 
					c624be8388 | ||
| 
						 | 
					09df1cd41e | ||
| 
						 | 
					52c5b57200 | ||
| 
						 | 
					5ea04a852e | ||
| 
						 | 
					a2eef05198 | ||
| 
						 | 
					55f75af353 | ||
| 
						 | 
					fb6a51b8fd | ||
| 
						 | 
					252cc2213e | ||
| 
						 | 
					73c5f24fa4 | ||
| 
						 | 
					4c80e103a0 | ||
| 
						 | 
					39ea557360 | ||
| 
						 | 
					d0cc92a01a | ||
| 
						 | 
					d7980c1a45 | ||
| 
						 | 
					e56ae1426c | ||
| 
						 | 
					696843c020 | ||
| 
						 | 
					6ff5621dd7 | ||
| 
						 | 
					e7fb72a732 | ||
| 
						 | 
					8d30d34e0c | ||
| 
						 | 
					bc7fe85f8a | ||
| 
						 | 
					89352d92c5 | ||
| 
						 | 
					c32390d84c | ||
| 
						 | 
					45ca866a2d | ||
| 
						 | 
					ceef206c21 | ||
| 
						 | 
					7c6424f0a9 | ||
| 
						 | 
					bc942de6f1 | ||
| 
						 | 
					06984df5cb | ||
| 
						 | 
					4f136a3a76 | ||
| 
						 | 
					363bf3ba30 | ||
| 
						 | 
					acb895956a | ||
| 
						 | 
					21e87b9bb3 | ||
| 
						 | 
					c896ebcf12 | ||
| 
						 | 
					d288222e80 | ||
| 
						 | 
					4eb2a6c9a3 | ||
| 
						 | 
					2563731c4d | ||
| 
						 | 
					4e410111db | ||
| 
						 | 
					5670563a26 | ||
| 
						 | 
					6caa656d01 | ||
| 
						 | 
					c12af7aed1 | ||
| 
						 | 
					dcb6d1c01d | ||
| 
						 | 
					18234cbdac | ||
| 
						 | 
					06bf988dc1 | ||
| 
						 | 
					55ff4c3f08 | ||
| 
						 | 
					4915002168 | ||
| 
						 | 
					5bd8d60e41 | ||
| 
						 | 
					fc872808c5 | ||
| 
						 | 
					0f4feda382 | ||
| 
						 | 
					90b0f38316 | ||
| 
						 | 
					18f630ab21 | ||
| 
						 | 
					e97fd44151 | ||
| 
						 | 
					b75679778f | ||
| 
						 | 
					35a84ad576 | ||
| 
						 | 
					4ed28be75a | ||
| 
						 | 
					e2f4656a86 | ||
| 
						 | 
					1e14da5c60 | ||
| 
						 | 
					b2ef79ef3d | ||
| 
						 | 
					f488874ff5 | ||
| 
						 | 
					23258648da | ||
| 
						 | 
					6b84ebe501 | ||
| 
						 | 
					07dd067f73 | ||
| 
						 | 
					420744d048 | ||
| 
						 | 
					01108e3a63 | ||
| 
						 | 
					8026b1e194 | ||
| 
						 | 
					a39d77227f | ||
| 
						 | 
					9f69deec7d | ||
| 
						 | 
					e912f772e0 | ||
| 
						 | 
					0102726aeb | ||
| 
						 | 
					1e7aa04040 | ||
| 
						 | 
					00a7c6fe6b | ||
| 
						 | 
					87f8c0d471 | ||
| 
						 | 
					334d78cd18 | ||
| 
						 | 
					2356325592 | ||
| 
						 | 
					d78ec593fa | ||
| 
						 | 
					d5043133e6 | ||
| 
						 | 
					509f69a457 | ||
| 
						 | 
					662c659220 | ||
| 
						 | 
					9a6566e774 | ||
| 
						 | 
					4da0428d9e | ||
| 
						 | 
					8ee1177206 | ||
| 
						 | 
					e9154b2549 | ||
| 
						 | 
					d398a0dd58 | ||
| 
						 | 
					7723a24297 | ||
| 
						 | 
					95a4b8db68 | ||
| 
						 | 
					663c1898a3 | ||
| 
						 | 
					465de793e8 | ||
| 
						 | 
					de9b76cef0 | ||
| 
						 | 
					1747a8d3d9 | ||
| 
						 | 
					1094e79749 | ||
| 
						 | 
					22569681bc | ||
| 
						 | 
					e615d117a0 | ||
| 
						 | 
					a51258b6bb | ||
| 
						 | 
					8894bd07b6 | ||
| 
						 | 
					ec45a9e825 | ||
| 
						 | 
					871358a6e5 | ||
| 
						 | 
					2e2e0fba60 | ||
| 
						 | 
					4a5139e3f4 | ||
| 
						 | 
					8f85933d7c | ||
| 
						 | 
					246f3a63f6 | ||
| 
						 | 
					e99eff4eb0 | ||
| 
						 | 
					c0197f19cf | ||
| 
						 | 
					3994d67eea | ||
| 
						 | 
					9ead79c9d4 | ||
| 
						 | 
					9371aed46c | ||
| 
						 | 
					940707ad66 | ||
| 
						 | 
					e6c267fb4c | ||
| 
						 | 
					93538fccd6 | ||
| 
						 | 
					83a7fad308 | ||
| 
						 | 
					3c7e33388e | ||
| 
						 | 
					7b0f35edb6 | ||
| 
						 | 
					94a157d0b0 | ||
| 
						 | 
					ca04620253 | ||
| 
						 | 
					073ef0b36a | ||
| 
						 | 
					c41c05d4f4 | ||
| 
						 | 
					f1ea54e07a | ||
| 
						 | 
					a139ce901a | ||
| 
						 | 
					7431957113 | ||
| 
						 | 
					1752d80915 | ||
| 
						 | 
					aa7420e109 | ||
| 
						 | 
					a290d4b9db | ||
| 
						 | 
					19a4314e7f | ||
| 
						 | 
					d166e85e0a | ||
| 
						 | 
					f213e857ab | ||
| 
						 | 
					eb6130baa7 | ||
| 
						 | 
					f69ea2c68a | ||
| 
						 | 
					078441d477 | ||
| 
						 | 
					95f6b15a67 | ||
| 
						 | 
					ee29dbdb8f | ||
| 
						 | 
					15f3f4c93f | ||
| 
						 | 
					6932e94e0e | ||
| 
						 | 
					3ef06d7efe | ||
| 
						 | 
					fb012b48e9 | ||
| 
						 | 
					bc77bf217f | ||
| 
						 | 
					37d1e9351e | ||
| 
						 | 
					4494c0dee0 | ||
| 
						 | 
					26afc604ac | ||
| 
						 | 
					9aefcada19 | ||
| 
						 | 
					69fc363760 | ||
| 
						 | 
					bea02ddebe | ||
| 
						 | 
					3fb257c39c | ||
| 
						 | 
					7c96c5a39b | ||
| 
						 | 
					efd836d971 | ||
| 
						 | 
					836aaa1647 | ||
| 
						 | 
					bf2b3dbf3e | ||
| 
						 | 
					b4fa2ff995 | ||
| 
						 | 
					2f9cabc30b | ||
| 
						 | 
					63593f5597 | ||
| 
						 | 
					c0acaa5d2c | ||
| 
						 | 
					2e46f8d0a6 | ||
| 
						 | 
					51da6aaa07 | ||
| 
						 | 
					c8b79e36db | ||
| 
						 | 
					208374bcc9 | ||
| 
						 | 
					7f0a6e7203 | ||
| 
						 | 
					54ebb9cfd4 | ||
| 
						 | 
					49e9c1495b | ||
| 
						 | 
					a84b0fbd52 | ||
| 
						 | 
					c95814c04d | ||
| 
						 | 
					9f8123f1b8 | ||
| 
						 | 
					8b23db4f4d | ||
| 
						 | 
					d77cc13374 | ||
| 
						 | 
					9a12db1aa2 | ||
| 
						 | 
					eb54d34bec | ||
| 
						 | 
					4b1203d4c9 | ||
| 
						 | 
					183a9c6244 | ||
| 
						 | 
					1f2294d585 | ||
| 
						 | 
					0b839c4f77 | ||
| 
						 | 
					1d4fd1fcae | ||
| 
						 | 
					b1d8d72c16 | ||
| 
						 | 
					bafb68b844 | ||
| 
						 | 
					21873b52e9 | ||
| 
						 | 
					0aa8b82871 | ||
| 
						 | 
					f9781afafd | ||
| 
						 | 
					fece361a55 | ||
| 
						 | 
					7b51b2f128 | ||
| 
						 | 
					22d88fb28e | ||
| 
						 | 
					f7c5b28e76 | ||
| 
						 | 
					5760f2a307 | ||
| 
						 | 
					ee46efb5a5 | ||
| 
						 | 
					eb6ffebfc7 | ||
| 
						 | 
					c06c44f286 | ||
| 
						 | 
					019c4088cf | ||
| 
						 | 
					0b0a88b78d | ||
| 
						 | 
					028e9cc56f | ||
| 
						 | 
					e0d8615ece | ||
| 
						 | 
					c8ecbda40b | ||
| 
						 | 
					2324c10d43 | ||
| 
						 | 
					89cfa76291 | ||
| 
						 | 
					072070a22c | ||
| 
						 | 
					3c3ad134ea | ||
| 
						 | 
					a4ffcfd4d5 | ||
| 
						 | 
					136670c58a | ||
| 
						 | 
					28169725fa | ||
| 
						 | 
					5b13106f54 | ||
| 
						 | 
					1a2db0dfb1 | ||
| 
						 | 
					696f95bb0a | ||
| 
						 | 
					acec588fe3 | ||
| 
						 | 
					6ed0da8e98 | ||
| 
						 | 
					7fd91d70bd | ||
| 
						 | 
					61788a0389 | ||
| 
						 | 
					0821447b5b | ||
| 
						 | 
					3cba274ba6 | ||
| 
						 | 
					df7bbcfd21 | ||
| 
						 | 
					021d406f0c | ||
| 
						 | 
					294569c502 | ||
| 
						 | 
					bfd00ac2ed | ||
| 
						 | 
					735a4714f4 | ||
| 
						 | 
					827fd47198 | ||
| 
						 | 
					e26b917661 | ||
| 
						 | 
					92872a2a3c | ||
| 
						 | 
					16ddb09cb4 | ||
| 
						 | 
					d37031f14e | ||
| 
						 | 
					b4e84ca7d2 | ||
| 
						 | 
					47970b9e6f | ||
| 
						 | 
					f65f120d50 | ||
| 
						 | 
					df00ec3c82 | ||
| 
						 | 
					ad6fca28f9 | ||
| 
						 | 
					fd33923496 | ||
| 
						 | 
					a55649dc82 | ||
| 
						 | 
					9558f229db | ||
| 
						 | 
					7917bfb1c9 | ||
| 
						 | 
					25f611ca42 | ||
| 
						 | 
					e6eb49e7e0 | ||
| 
						 | 
					9a075f53dc | ||
| 
						 | 
					4b3f800c03 | ||
| 
						 | 
					82bc76b243 | ||
| 
						 | 
					18b9b04907 | ||
| 
						 | 
					87f1f08b36 | ||
| 
						 | 
					7d7ebbe9f7 | ||
| 
						 | 
					5111ce782f | ||
| 
						 | 
					20b0e563ce | ||
| 
						 | 
					8b6cf239a3 | ||
| 
						 | 
					bcc285cffd | ||
| 
						 | 
					d5ba030942 | ||
| 
						 | 
					803f43592a | ||
| 
						 | 
					904b9ccaa3 | ||
| 
						 | 
					89721ff04a | ||
| 
						 | 
					6164823921 | ||
| 
						 | 
					f8b3c47f99 | ||
| 
						 | 
					56dd2da962 | ||
| 
						 | 
					68bb74d172 | ||
| 
						 | 
					bf5e12c8e0 | ||
| 
						 | 
					de11f5e53a | ||
| 
						 | 
					b125e8e23a | ||
| 
						 | 
					b28b616eb2 | ||
| 
						 | 
					4534ca238d | ||
| 
						 | 
					cee0e94294 | ||
| 
						 | 
					8319ea7078 | ||
| 
						 | 
					5334a58f9b | ||
| 
						 | 
					2616bdc4cd | ||
| 
						 | 
					c149b3f797 | ||
| 
						 | 
					d349eb3d43 | ||
| 
						 | 
					9b43ade1c0 | ||
| 
						 | 
					ad05d0a8d9 | ||
| 
						 | 
					e6bfbe9683 | ||
| 
						 | 
					c871efca4b | ||
| 
						 | 
					12c72b419c | ||
| 
						 | 
					a15b7691ca | ||
| 
						 | 
					01618d323b | ||
| 
						 | 
					bb6d0e37e3 | ||
| 
						 | 
					24a6100897 | ||
| 
						 | 
					0251563c98 | ||
| 
						 | 
					72673a351b | ||
| 
						 | 
					96b7131844 | ||
| 
						 | 
					dcc2f16416 | ||
| 
						 | 
					c2b8a04000 | ||
| 
						 | 
					d65587b06c | ||
| 
						 | 
					1ab0134522 | ||
| 
						 | 
					afffce80f0 | ||
| 
						 | 
					70b80b0160 | ||
| 
						 | 
					64067a04b5 | ||
| 
						 | 
					38cf0268c0 | ||
| 
						 | 
					2d2034703f | ||
| 
						 | 
					571ceeff90 | ||
| 
						 | 
					34c4ba4321 | ||
| 
						 | 
					babb372eb9 | ||
| 
						 | 
					5b9b82c1cd | ||
| 
						 | 
					075c534270 | ||
| 
						 | 
					f317f8b149 | ||
| 
						 | 
					f8d552dde5 | ||
| 
						 | 
					606f72bb13 | ||
| 
						 | 
					327e6a2b4f | ||
| 
						 | 
					be8f6c7f5c | ||
| 
						 | 
					073448e0ea | ||
| 
						 | 
					f136f435b5 | ||
| 
						 | 
					ebea6b487b | ||
| 
						 | 
					e5b7dc56e6 | ||
| 
						 | 
					c2d8025a0a | ||
| 
						 | 
					853e240e1d | ||
| 
						 | 
					8755a6d1ac | ||
| 
						 | 
					9f723061cb | ||
| 
						 | 
					652683fc04 | ||
| 
						 | 
					83a463891d | ||
| 
						 | 
					957b618fdc | ||
| 
						 | 
					ebe5191b63 | ||
| 
						 | 
					c426234df7 | ||
| 
						 | 
					8c3a10392e | ||
| 
						 | 
					d0e44946e9 | ||
| 
						 | 
					46a593d968 | ||
| 
						 | 
					eb0cc34951 | ||
| 
						 | 
					1c7dfda4bc | ||
| 
						 | 
					3c0e4a2fa1 | ||
| 
						 | 
					c753072ae1 | ||
| 
						 | 
					243942a7aa | ||
| 
						 | 
					8d5ac8b43c | ||
| 
						 | 
					17962b3d2e | ||
| 
						 | 
					f70acd5979 | ||
| 
						 | 
					ffe5c46224 | ||
| 
						 | 
					3242ea5f66 | ||
| 
						 | 
					39a282bffc | ||
| 
						 | 
					29583004ce | ||
| 
						 | 
					0a1a185874 | ||
| 
						 | 
					8f809e2a93 | ||
| 
						 | 
					f216059b49 | ||
| 
						 | 
					9121b1f41d | ||
| 
						 | 
					60e015d0c1 | ||
| 
						 | 
					7e049fca61 | ||
| 
						 | 
					0f0e4de6a4 | ||
| 
						 | 
					bc1102922b | ||
| 
						 | 
					a3d3642a30 | ||
| 
						 | 
					248eb47329 | ||
| 
						 | 
					52ebf50607 | ||
| 
						 | 
					d34a4b126e | ||
| 
						 | 
					de96719a45 | ||
| 
						 | 
					9876ed09fe | ||
| 
						 | 
					17cbbe3dc5 | ||
| 
						 | 
					b995af17eb | ||
| 
						 | 
					6589579850 | ||
| 
						 | 
					5ddc260fc2 | ||
| 
						 | 
					db5c9cd4c0 | ||
| 
						 | 
					9b6d010aef | ||
| 
						 | 
					065b87e949 | ||
| 
						 | 
					a6206a3aef | ||
| 
						 | 
					30639ed72b | ||
| 
						 | 
					9d02a39e13 | ||
| 
						 | 
					fc0af0d4d1 | ||
| 
						 | 
					a683416081 | ||
| 
						 | 
					9faf57ee8d | ||
| 
						 | 
					44b9ccb7e2 | ||
| 
						 | 
					de003d9cf8 | ||
| 
						 | 
					8a2a523c70 | ||
| 
						 | 
					c3dfe50aaf | ||
| 
						 | 
					9659d862c7 | ||
| 
						 | 
					69ab4cd391 | ||
| 
						 | 
					498f3985b3 | ||
| 
						 | 
					977175d4fd | ||
| 
						 | 
					3ddc7b9390 | ||
| 
						 | 
					10e9bf623f | ||
| 
						 | 
					48a5c64e94 | ||
| 
						 | 
					140606ccd5 | ||
| 
						 | 
					f56d006f93 | ||
| 
						 | 
					beb13a1d3e | ||
| 
						 | 
					fa47138327 | ||
| 
						 | 
					9421d4510a | ||
| 
						 | 
					ff8abfca85 | ||
| 
						 | 
					5c858965b8 | ||
| 
						 | 
					e3f83cb17a | ||
| 
						 | 
					de6008e01a | ||
| 
						 | 
					6417e696df | ||
| 
						 | 
					5d28f3781b | ||
| 
						 | 
					10026bb62e | ||
| 
						 | 
					21c16f923c | ||
| 
						 | 
					32cef52f0d | ||
| 
						 | 
					e7dd7c54ff | ||
| 
						 | 
					b0b50bd12a | ||
| 
						 | 
					f2c6057490 | ||
| 
						 | 
					169b2eeb94 | ||
| 
						 | 
					f81d027f60 | ||
| 
						 | 
					872eeb7339 | ||
| 
						 | 
					7f67a28c2a | ||
| 
						 | 
					30a46e1135 | ||
| 
						 | 
					3a01478ce8 | ||
| 
						 | 
					53d71fab60 | ||
| 
						 | 
					be891f112c | ||
| 
						 | 
					89934239d7 | ||
| 
						 | 
					8986037fdd | ||
| 
						 | 
					a7c72b7abf | ||
| 
						 | 
					409ac80710 | ||
| 
						 | 
					fc7bebdf55 | ||
| 
						 | 
					ca52549557 | ||
| 
						 | 
					8948a65654 | ||
| 
						 | 
					b4e33cfcc7 | ||
| 
						 | 
					86742e8334 | ||
| 
						 | 
					173b35eaf8 | ||
| 
						 | 
					2b054e5309 | ||
| 
						 | 
					a302ff1605 | ||
| 
						 | 
					f7bb4e6138 | ||
| 
						 | 
					5c5489916b | ||
| 
						 | 
					5627cf7167 | ||
| 
						 | 
					c05dae4a68 | ||
| 
						 | 
					57e61e3743 | ||
| 
						 | 
					a6c395c156 | ||
| 
						 | 
					543e0b1e0f | ||
| 
						 | 
					64b0ff875f | ||
| 
						 | 
					a034208a00 | ||
| 
						 | 
					5f1251586b | ||
| 
						 | 
					6f6cffdc32 | ||
| 
						 | 
					21a98ef264 | ||
| 
						 | 
					aa90436435 | ||
| 
						 | 
					61225052f9 | ||
| 
						 | 
					dee3163d95 | ||
| 
						 | 
					8b0668b99e | ||
| 
						 | 
					8471a82c85 | ||
| 
						 | 
					ed4dff63b9 | ||
| 
						 | 
					838e776542 | ||
| 
						 | 
					39c12790bc | ||
| 
						 | 
					126e6d6645 | ||
| 
						 | 
					5796a1b282 | ||
| 
						 | 
					90982529fc | ||
| 
						 | 
					aba51d6b60 | ||
| 
						 | 
					49bc4567bb | ||
| 
						 | 
					2ac52705c6 | ||
| 
						 | 
					d0eb56dd97 | ||
| 
						 | 
					b9c60df04b | ||
| 
						 | 
					8c236e4dfa | ||
| 
						 | 
					154a59f21f | ||
| 
						 | 
					9689e1c548 | ||
| 
						 | 
					5a83976c99 | ||
| 
						 | 
					b5276a9a69 | ||
| 
						 | 
					30377baa5e | ||
| 
						 | 
					aa8b7dd336 | ||
| 
						 | 
					f26a338a54 | ||
| 
						 | 
					c4383f1d99 | ||
| 
						 | 
					4527995e66 | ||
| 
						 | 
					b0fbb98f41 | ||
| 
						 | 
					63667dfd96 | ||
| 
						 | 
					77c388c928 | ||
| 
						 | 
					a69b814ded | ||
| 
						 | 
					c51ada766d | ||
| 
						 | 
					ef2709f97c | ||
| 
						 | 
					bf9b9ca29d | ||
| 
						 | 
					64f224bb22 | ||
| 
						 | 
					285a8fe4d0 | ||
| 
						 | 
					3773d76dfd | ||
| 
						 | 
					94c5c7bd6d | ||
| 
						 | 
					12cfc4c0b0 | ||
| 
						 | 
					9a2de6e6ee | ||
| 
						 | 
					2ede47b8c8 | ||
| 
						 | 
					76e107506f | ||
| 
						 | 
					6f35ed51dc | ||
| 
						 | 
					c94ba66310 | ||
| 
						 | 
					a15133f5cf | ||
| 
						 | 
					cc09e9d4c2 | ||
| 
						 | 
					16e0da2c4b | ||
| 
						 | 
					ed22f75241 | ||
| 
						 | 
					ba25cad6e2 | ||
| 
						 | 
					abb01123cb | ||
| 
						 | 
					e2d249f8c5 | ||
| 
						 | 
					4a2ac166fa | ||
| 
						 | 
					5fab55383d | ||
| 
						 | 
					f152f23a68 | ||
| 
						 | 
					24e78b3571 | ||
| 
						 | 
					9a239edb52 | ||
| 
						 | 
					abcc5c5a82 | ||
| 
						 | 
					cb5ba675a7 | ||
| 
						 | 
					2288086695 | ||
| 
						 | 
					61421b7a8f | ||
| 
						 | 
					6a7e53a7c7 | ||
| 
						 | 
					ca134d5522 | ||
| 
						 | 
					ec24efda74 | ||
| 
						 | 
					7f0f10e498 | ||
| 
						 | 
					aa5af100b4 | ||
| 
						 | 
					37ae32f688 | ||
| 
						 | 
					d0cffdec5d | ||
| 
						 | 
					0f34521612 | ||
| 
						 | 
					e69362df22 | ||
| 
						 | 
					3de8f6f38e | ||
| 
						 | 
					5359bc8083 | ||
| 
						 | 
					eb6a14fe10 | ||
| 
						 | 
					2912537533 | ||
| 
						 | 
					cfb32da198 | ||
| 
						 | 
					9b4f92130f | ||
| 
						 | 
					5a2ab686a6 | ||
| 
						 | 
					3b8583b014 | ||
| 
						 | 
					ed29552b1e | ||
| 
						 | 
					a2ada3cf96 | ||
| 
						 | 
					88825a1187 | ||
| 
						 | 
					264e7fc58b | ||
| 
						 | 
					1698015e3c | ||
| 
						 | 
					39dc14c002 | ||
| 
						 | 
					04c499a5fc | ||
| 
						 | 
					efbe930a69 | ||
| 
						 | 
					747f87f61e | ||
| 
						 | 
					5a4c56fc44 | ||
| 
						 | 
					81f45ba92a | ||
| 
						 | 
					a5dc4e32f2 | ||
| 
						 | 
					2b839853ec | ||
| 
						 | 
					66b6cd68ed | ||
| 
						 | 
					0ef3d90838 | ||
| 
						 | 
					5cc50f9b27 | ||
| 
						 | 
					e879e26a5b | ||
| 
						 | 
					96d84150e1 | ||
| 
						 | 
					2aa0c6c488 | ||
| 
						 | 
					811138386f | ||
| 
						 | 
					c433cf7459 | ||
| 
						 | 
					e0d6ebc2f2 | ||
| 
						 | 
					4938991ab8 | ||
| 
						 | 
					13722f536e | ||
| 
						 | 
					57f0e3292d | ||
| 
						 | 
					da5ae565ab | ||
| 
						 | 
					87c5066242 | ||
| 
						 | 
					b528bde470 | ||
| 
						 | 
					57572e550f | ||
| 
						 | 
					3aea0d3d68 | ||
| 
						 | 
					9ae920c1b6 | ||
| 
						 | 
					dff406a360 | ||
| 
						 | 
					d346ba5c3c | ||
| 
						 | 
					978541adc2 | ||
| 
						 | 
					637bce2707 | ||
| 
						 | 
					07e3dc2ee2 | ||
| 
						 | 
					ead065d803 | ||
| 
						 | 
					0150bff7b4 | ||
| 
						 | 
					0f493b6038 | ||
| 
						 | 
					f26b709c50 | ||
| 
						 | 
					ae10d9cf22 | ||
| 
						 | 
					81af9674ed | ||
| 
						 | 
					b63df7991a | ||
| 
						 | 
					a79990465c | ||
| 
						 | 
					ad6bd530ac | ||
| 
						 | 
					c1b369fd4c | ||
| 
						 | 
					01fcd3c2d5 | ||
| 
						 | 
					7196d784d3 | ||
| 
						 | 
					0f0aaf51e0 | ||
| 
						 | 
					b5f493c55a | ||
| 
						 | 
					0aa031beb9 | ||
| 
						 | 
					db6ff224f8 | ||
| 
						 | 
					b3c7cd61f3 | ||
| 
						 | 
					9ae05c4d91 | ||
| 
						 | 
					264e6f6efd | ||
| 
						 | 
					ec7bccf671 | ||
| 
						 | 
					49f75ee8ce | ||
| 
						 | 
					4bcc866c52 | ||
| 
						 | 
					c65e088caf | ||
| 
						 | 
					6ca4116555 | ||
| 
						 | 
					f6cdb820af | ||
| 
						 | 
					081e5a82ff | ||
| 
						 | 
					2ad2a4bd9f | ||
| 
						 | 
					645e700da3 | ||
| 
						 | 
					92aea29a30 | ||
| 
						 | 
					e1c01af929 | ||
| 
						 | 
					7ef749497d | ||
| 
						 | 
					d72aa49126 | ||
| 
						 | 
					e92bd312ec | ||
| 
						 | 
					b097c2cfb0 | ||
| 
						 | 
					a39cdc80b7 | ||
| 
						 | 
					a47250810e | ||
| 
						 | 
					1f50f3031f | ||
| 
						 | 
					75145dd753 | ||
| 
						 | 
					d0b97f7e1f | ||
| 
						 | 
					199a0311e2 | ||
| 
						 | 
					fa446f860f | ||
| 
						 | 
					7a74303f3c | ||
| 
						 | 
					7d9eabb981 | ||
| 
						 | 
					ff5308a5af | ||
| 
						 | 
					3f8ba3a986 | ||
| 
						 | 
					4a555de1b2 | ||
| 
						 | 
					d27e4a08f9 | ||
| 
						 | 
					bf678a1ca9 | ||
| 
						 | 
					13a903de28 | ||
| 
						 | 
					a3c14c031e | ||
| 
						 | 
					e90d528026 | ||
| 
						 | 
					d64dd77993 | ||
| 
						 | 
					113850a748 | ||
| 
						 | 
					1c49a00d64 | ||
| 
						 | 
					eef6c83503 | ||
| 
						 | 
					ceb5648eb7 | ||
| 
						 | 
					a0eadb76ea | ||
| 
						 | 
					065852e46c | ||
| 
						 | 
					e5e2fb8274 | ||
| 
						 | 
					0210b3c893 | ||
| 
						 | 
					7df5677b46 | ||
| 
						 | 
					2e71876b28 | ||
| 
						 | 
					11576b1142 | ||
| 
						 | 
					ce011b8a2d | ||
| 
						 | 
					12cfb4f7ee | ||
| 
						 | 
					9e1123debe | ||
| 
						 | 
					c7354142c0 | ||
| 
						 | 
					dee84f448f | ||
| 
						 | 
					1607711603 | ||
| 
						 | 
					8bca5e05b8 | ||
| 
						 | 
					f68505ee23 | ||
| 
						 | 
					d2174da641 | ||
| 
						 | 
					255b1e68d0 | ||
| 
						 | 
					fbee6b87f5 | ||
| 
						 | 
					3836a70f97 | ||
| 
						 | 
					e0ec9fa294 | ||
| 
						 | 
					80fe50590f | ||
| 
						 | 
					ae18d1c55a | ||
| 
						 | 
					75194373e0 | ||
| 
						 | 
					f3875048f6 | ||
| 
						 | 
					210af986ad | ||
| 
						 | 
					c03044f492 | ||
| 
						 | 
					522b85ae21 | ||
| 
						 | 
					208e56dbe9 | ||
| 
						 | 
					42acb00c81 | ||
| 
						 | 
					ca6e770837 | ||
| 
						 | 
					775968003c | ||
| 
						 | 
					323d3e9b5d | ||
| 
						 | 
					16f9755e73 | ||
| 
						 | 
					66eb98bb0a | ||
| 
						 | 
					299546f5c0 | ||
| 
						 | 
					7be9b4c418 | ||
| 
						 | 
					03c22b4576 | ||
| 
						 | 
					ef749fa9ce | ||
| 
						 | 
					a23c92596e | ||
| 
						 | 
					abb1497c98 | ||
| 
						 | 
					7a8594da43 | ||
| 
						 | 
					cbf28daed9 | ||
| 
						 | 
					0ff1ca30c3 | ||
| 
						 | 
					2cff251863 | ||
| 
						 | 
					73d996bf26 | ||
| 
						 | 
					5bc78cb724 | ||
| 
						 | 
					cdba92ac3c | ||
| 
						 | 
					6d28f92ffe | ||
| 
						 | 
					01387f42c5 | ||
| 
						 | 
					8f52b731f4 | ||
| 
						 | 
					d442088ed3 | ||
| 
						 | 
					22a323890a | ||
| 
						 | 
					163bba1410 | ||
| 
						 | 
					db1c618fcf | ||
| 
						 | 
					01bdfa7b6d | ||
| 
						 | 
					6a88c8d845 | ||
| 
						 | 
					b8a6913e09 | ||
| 
						 | 
					744d8c1006 | ||
| 
						 | 
					c2e2c98d81 | ||
| 
						 | 
					3fa353a2d3 | ||
| 
						 | 
					c27c9f80d2 | ||
| 
						 | 
					b5a74715cf | ||
| 
						 | 
					13ee2901f4 | ||
| 
						 | 
					32c03eadd6 | ||
| 
						 | 
					0fa512f26d | ||
| 
						 | 
					219d88518c | ||
| 
						 | 
					ecf3aee43a | ||
| 
						 | 
					7f08cab73e | ||
| 
						 | 
					c4e9ef199e | ||
| 
						 | 
					9e612b5550 | ||
| 
						 | 
					203633d34d | ||
| 
						 | 
					45bd009bb1 | ||
| 
						 | 
					ee656415c4 | ||
| 
						 | 
					156aad198f | ||
| 
						 | 
					b1ffb79a50 | ||
| 
						 | 
					d6654bfe00 | ||
| 
						 | 
					eefdd67d22 | ||
| 
						 | 
					86a86d7afd | ||
| 
						 | 
					b6dac2b484 | ||
| 
						 | 
					e6367abae9 | ||
| 
						 | 
					fc4d1d9a60 | ||
| 
						 | 
					94bae20776 | ||
| 
						 | 
					bb8c8d273c | ||
| 
						 | 
					ee600ace37 | ||
| 
						 | 
					da86e32eb4 | ||
| 
						 | 
					b5bbc04ad1 | ||
| 
						 | 
					265c58611f | ||
| 
						 | 
					25c973a39e | ||
| 
						 | 
					123c7b32db | ||
| 
						 | 
					e2d8e2c4ae | ||
| 
						 | 
					701509d322 | ||
| 
						 | 
					c3cc616264 | ||
| 
						 | 
					91b84b89e4 | ||
| 
						 | 
					017ec204a9 | ||
| 
						 | 
					8dbfecd153 | ||
| 
						 | 
					512db1bc54 | ||
| 
						 | 
					e157aabd4d | ||
| 
						 | 
					db2fea448c | ||
| 
						 | 
					dd82d69b8c | ||
| 
						 | 
					27328281b7 | ||
| 
						 | 
					51d205b267 | ||
| 
						 | 
					84800914f6 | ||
| 
						 | 
					9b296e65bd | ||
| 
						 | 
					5f649a1649 | ||
| 
						 | 
					daea056210 | ||
| 
						 | 
					30c0db06bd | ||
| 
						 | 
					91168c005c | ||
| 
						 | 
					cfa0054077 | ||
| 
						 | 
					3d5820648b | ||
| 
						 | 
					d08df97fe5 | ||
| 
						 | 
					fd6624a058 | ||
| 
						 | 
					8aa41dd04b | ||
| 
						 | 
					e890113fc6 | ||
| 
						 | 
					e2e64798b5 | ||
| 
						 | 
					b9b6a6566a | ||
| 
						 | 
					dc9e415602 | ||
| 
						 | 
					84fa12c885 | ||
| 
						 | 
					296b35fe9b | ||
| 
						 | 
					0ff89b9c3c | ||
| 
						 | 
					3b33540c99 | ||
| 
						 | 
					29d0174253 | ||
| 
						 | 
					cc7f2a0d08 | ||
| 
						 | 
					b1579aed2f | ||
| 
						 | 
					9247daf953 | ||
| 
						 | 
					9031e33b66 | ||
| 
						 | 
					1ee1f5f427 | ||
| 
						 | 
					a5874a5393 | ||
| 
						 | 
					969217c9d9 | ||
| 
						 | 
					e399502c7a | ||
| 
						 | 
					6883f0c49f | ||
| 
						 | 
					3fc2c813cc | ||
| 
						 | 
					9de4b99fc7 | ||
| 
						 | 
					24e7036822 | ||
| 
						 | 
					ec9acbcda7 | ||
| 
						 | 
					c0460660d5 | ||
| 
						 | 
					b03f4919fb | ||
| 
						 | 
					08620743b9 | ||
| 
						 | 
					41362f063a | ||
| 
						 | 
					5b3069e265 | ||
| 
						 | 
					b466924717 | ||
| 
						 | 
					cbc0f65fa3 | ||
| 
						 | 
					35089a4289 | ||
| 
						 | 
					aef3131e92 | ||
| 
						 | 
					342fce97af | ||
| 
						 | 
					fb5d267bd0 | ||
| 
						 | 
					c19844a0a3 | ||
| 
						 | 
					22cf05519a | ||
| 
						 | 
					511ce35631 | ||
| 
						 | 
					e9b7548dd6 | ||
| 
						 | 
					010cde0a4a | ||
| 
						 | 
					cac5251a98 | ||
| 
						 | 
					3b825bcbfb | ||
| 
						 | 
					31959fb24b | ||
| 
						 | 
					5e9675ad1e | ||
| 
						 | 
					084b7675b2 | ||
| 
						 | 
					ed8be5bc55 | ||
| 
						 | 
					efca2943a0 | ||
| 
						 | 
					371da7132f | ||
| 
						 | 
					9a3ff5c46a | ||
| 
						 | 
					b36c654a3d | ||
| 
						 | 
					ddeb2613ec | ||
| 
						 | 
					2d02d20911 | ||
| 
						 | 
					b2563b9f9f | ||
| 
						 | 
					fccf6925b1 | ||
| 
						 | 
					4a7cf65064 | ||
| 
						 | 
					56587e2821 | ||
| 
						 | 
					33b8e71583 | ||
| 
						 | 
					1c96128695 | ||
| 
						 | 
					ca516b1b26 | ||
| 
						 | 
					ba4e69bebc | ||
| 
						 | 
					de5e9f100c | ||
| 
						 | 
					955da86a3e | ||
| 
						 | 
					8d85be4c5e | ||
| 
						 | 
					93eadfb10f | ||
| 
						 | 
					f8e0b18439 | ||
| 
						 | 
					64bbe9dfaf | ||
| 
						 | 
					2e8a9416af | ||
| 
						 | 
					5dd40bd0bb | ||
| 
						 | 
					1822dd0549 | ||
| 
						 | 
					751e49fb0a | ||
| 
						 | 
					56c43604d0 | ||
| 
						 | 
					7438c378be | ||
| 
						 | 
					0e0caf7c06 | ||
| 
						 | 
					5644f4a295 | ||
| 
						 | 
					98e1605b17 | ||
| 
						 | 
					73f0e32d1a | ||
| 
						 | 
					713cb56fea | ||
| 
						 | 
					bd3bb70ee8 | ||
| 
						 | 
					8aa3f14303 | ||
| 
						 | 
					ac285b453e | ||
| 
						 | 
					daf55705e4 | ||
| 
						 | 
					7140baae72 | ||
| 
						 | 
					27a2e590cd | ||
| 
						 | 
					7172fa058a | ||
| 
						 | 
					c0790ccf08 | ||
| 
						 | 
					87c43517cd | ||
| 
						 | 
					6561ec524b | ||
| 
						 | 
					982c5460f0 | ||
| 
						 | 
					2a3a8848f3 | ||
| 
						 | 
					752520e428 | ||
| 
						 | 
					8095b776fe | ||
| 
						 | 
					e504103e2c | ||
| 
						 | 
					904183262a | ||
| 
						 | 
					2a0bc64226 | ||
| 
						 | 
					6b975c308c | ||
| 
						 | 
					74be55a477 | ||
| 
						 | 
					394832c2d6 | ||
| 
						 | 
					f636c12255 | ||
| 
						 | 
					03e4a8214c | ||
| 
						 | 
					6d7785a35b | ||
| 
						 | 
					904f579332 | ||
| 
						 | 
					a72d789b08 | ||
| 
						 | 
					87ad7ace18 | ||
| 
						 | 
					35153eb524 | ||
| 
						 | 
					c8ee1fa62e | ||
| 
						 | 
					5c1a6ed719 | ||
| 
						 | 
					9d68fde148 | ||
| 
						 | 
					c7d517f6d2 | ||
| 
						 | 
					183f1531d3 | ||
| 
						 | 
					6dfe0ec31e | ||
| 
						 | 
					8b3f1cebda | ||
| 
						 | 
					086daf913c | ||
| 
						 | 
					6a3e2272e9 | ||
| 
						 | 
					d0e0bf53a6 | ||
| 
						 | 
					0009e4dfb9 | ||
| 
						 | 
					30b7a9f172 | ||
| 
						 | 
					c74cb59e08 | ||
| 
						 | 
					c1f29a8e08 | ||
| 
						 | 
					cb895ec335 | ||
| 
						 | 
					2df4866cfa | ||
| 
						 | 
					423a1cf486 | ||
| 
						 | 
					7aeb63c817 | ||
| 
						 | 
					476fa1f4d2 | ||
| 
						 | 
					0bea215560 | ||
| 
						 | 
					3c20b98d99 | ||
| 
						 | 
					8bcdda29d4 | ||
| 
						 | 
					c88036405f | ||
| 
						 | 
					60cddab4f2 | ||
| 
						 | 
					411ca1c050 | ||
| 
						 | 
					d1be3a4a1d | ||
| 
						 | 
					b5dd257427 | ||
| 
						 | 
					4cf953678d | ||
| 
						 | 
					ca5678c8c1 | ||
| 
						 | 
					9e4594be53 | ||
| 
						 | 
					d16c757c28 | ||
| 
						 | 
					312bcafd05 | ||
| 
						 | 
					be24652d4d | ||
| 
						 | 
					6ab44d9439 | ||
| 
						 | 
					108cb14d1f | ||
| 
						 | 
					b98308b524 | ||
| 
						 | 
					215c445583 | ||
| 
						 | 
					20d8e32a58 | ||
| 
						 | 
					33306b2749 | ||
| 
						 | 
					94eeeba79a | ||
| 
						 | 
					ecd29a289a | ||
| 
						 | 
					e7d0af72e3 | ||
| 
						 | 
					fcb1d3521a | ||
| 
						 | 
					890bf3bd27 | ||
| 
						 | 
					dafd81178f | ||
| 
						 | 
					99dfdebc64 | ||
| 
						 | 
					c1cfdd6323 | ||
| 
						 | 
					264a9bc6ed | ||
| 
						 | 
					f79f5cbf82 | ||
| 
						 | 
					7313501e30 | ||
| 
						 | 
					d8b2c819e7 | ||
| 
						 | 
					69f6d14b81 | ||
| 
						 | 
					9f3856e646 | ||
| 
						 | 
					a46e2e9900 | ||
| 
						 | 
					14f0dd2dd0 | ||
| 
						 | 
					c051438fa1 | ||
| 
						 | 
					52e32ac1d3 | ||
| 
						 | 
					7f8ad34ba2 | ||
| 
						 | 
					a9c0302454 | ||
| 
						 | 
					a33e89b44a | ||
| 
						 | 
					e203ecebee | ||
| 
						 | 
					2f8e7f56b3 | ||
| 
						 | 
					2443e1f38c | ||
| 
						 | 
					eb164098b7 | ||
| 
						 | 
					62527fa98a | ||
| 
						 | 
					b9f8e80b14 | ||
| 
						 | 
					b79e250ed2 | ||
| 
						 | 
					fc5c9d8f17 | ||
| 
						 | 
					72d57a8ee6 | ||
| 
						 | 
					23262e30bc | ||
| 
						 | 
					8b4ad40ed6 | ||
| 
						 | 
					d7e9797365 | ||
| 
						 | 
					e54e0c7877 | ||
| 
						 | 
					5cb06d8fd6 | ||
| 
						 | 
					2b34d4e1f7 | ||
| 
						 | 
					c7aa095fac | ||
| 
						 | 
					93f1784526 | ||
| 
						 | 
					559dc503c2 | ||
| 
						 | 
					414afe0935 | ||
| 
						 | 
					4ad4f3fc70 | ||
| 
						 | 
					67273eed9b | ||
| 
						 | 
					3c63e1d8d9 | ||
| 
						 | 
					cae555c977 | ||
| 
						 | 
					407583e8e2 | ||
| 
						 | 
					131645dc31 | ||
| 
						 | 
					dafd644fe7 | ||
| 
						 | 
					73cc1742af | ||
| 
						 | 
					87afd7686f | ||
| 
						 | 
					8ce10b5dfa | ||
| 
						 | 
					943e31b35c | ||
| 
						 | 
					20f85b94df | ||
| 
						 | 
					17b784381e | ||
| 
						 | 
					e3031fddb9 | ||
| 
						 | 
					38c994a7ae | ||
| 
						 | 
					85e2e96fb6 | ||
| 
						 | 
					be35b3ad03 | ||
| 
						 | 
					dbbd871ea1 | ||
| 
						 | 
					813911db59 | ||
| 
						 | 
					3c49b405de | ||
| 
						 | 
					4cfffd6c4a | ||
| 
						 | 
					e9f1c12f0f | ||
| 
						 | 
					4fe252847c | ||
| 
						 | 
					109cbbe9c5 | ||
| 
						 | 
					fd3881eaa6 | ||
| 
						 | 
					08ef208fb7 | ||
| 
						 | 
					8c45e2a641 | ||
| 
						 | 
					25dc520163 | ||
| 
						 | 
					fc37ef9e4b | ||
| 
						 | 
					11ba367fc9 | ||
| 
						 | 
					78473f71eb | ||
| 
						 | 
					8b77f40f99 | ||
| 
						 | 
					d866716565 | ||
| 
						 | 
					307d0effe2 | ||
| 
						 | 
					b47b053e54 | ||
| 
						 | 
					b79f01caf3 | ||
| 
						 | 
					0db227f55e | ||
| 
						 | 
					ac48b38842 | ||
| 
						 | 
					0cbb9365c6 | ||
| 
						 | 
					798b8c522b | ||
| 
						 | 
					15bc7e19f9 | ||
| 
						 | 
					0be3f1a063 | ||
| 
						 | 
					c0257c6721 | ||
| 
						 | 
					9aec0fc7de | ||
| 
						 | 
					bce5e0d82c | ||
| 
						 | 
					62032ee248 | ||
| 
						 | 
					775645f29b | ||
| 
						 | 
					99c0456872 | ||
| 
						 | 
					0236bee5de | ||
| 
						 | 
					59c11b82d5 | ||
| 
						 | 
					98871d1e9e | ||
| 
						 | 
					b40dc5d742 | ||
| 
						 | 
					17b0723713 | ||
| 
						 | 
					ec585e8907 | ||
| 
						 | 
					0aeb25ff3b | ||
| 
						 | 
					a928f2c4aa | ||
| 
						 | 
					51fcee6f81 | ||
| 
						 | 
					654be65590 | ||
| 
						 | 
					105ec79b2b | ||
| 
						 | 
					c759d8427a | ||
| 
						 | 
					c7b03d6479 | ||
| 
						 | 
					2080738883 | ||
| 
						 | 
					48bc73c271 | ||
| 
						 | 
					3d0969d1d1 | ||
| 
						 | 
					323f195036 | ||
| 
						 | 
					c3c392fc98 | ||
| 
						 | 
					5d2944c211 | ||
| 
						 | 
					fe3ba1dd11 | ||
| 
						 | 
					0c00eb93a0 | ||
| 
						 | 
					baa77ec13b | ||
| 
						 | 
					9263652c6d | ||
| 
						 | 
					bc74375543 | ||
| 
						 | 
					edb1756050 | ||
| 
						 | 
					5215f6f654 | ||
| 
						 | 
					1913b4eeed | ||
| 
						 | 
					b44a4da5df | ||
| 
						 | 
					919878fbb2 | ||
| 
						 | 
					06bdf83419 | ||
| 
						 | 
					2ff2810a92 | ||
| 
						 | 
					20d9c1b30d | ||
| 
						 | 
					bbe10cb0cb | ||
| 
						 | 
					daba8f3a70 | ||
| 
						 | 
					1458c3668d | ||
| 
						 | 
					980a47b42b | ||
| 
						 | 
					f7ca561b06 | ||
| 
						 | 
					cacd756efd | ||
| 
						 | 
					8539e76cb9 | ||
| 
						 | 
					3bbf694d5a | ||
| 
						 | 
					44debdde62 | ||
| 
						 | 
					c6cf2b8e93 | ||
| 
						 | 
					69c5452b25 | ||
| 
						 | 
					d321056e8d | ||
| 
						 | 
					d9a1a59f22 | ||
| 
						 | 
					0b898b5a8a | ||
| 
						 | 
					a9e0885be0 | ||
| 
						 | 
					57ff28c9b7 | ||
| 
						 | 
					86cc34c0de | ||
| 
						 | 
					39028f1bd4 | ||
| 
						 | 
					71f4c05665 | ||
| 
						 | 
					9ef9797998 | ||
| 
						 | 
					ab9374de57 | ||
| 
						 | 
					913e997061 | ||
| 
						 | 
					8e50d6b6f3 | ||
| 
						 | 
					2db0744a7b | ||
| 
						 | 
					2de0028349 | ||
| 
						 | 
					35d04c5398 | ||
| 
						 | 
					b1becd0ed5 | ||
| 
						 | 
					bd9650bc81 | ||
| 
						 | 
					969a25d1b2 | ||
| 
						 | 
					f144f77ba7 | ||
| 
						 | 
					abea1f8910 | ||
| 
						 | 
					8eaa7fec76 | ||
| 
						 | 
					fdace647e8 | ||
| 
						 | 
					d7531c18fc | ||
| 
						 | 
					ef3f978784 | ||
| 
						 | 
					e410860e0e | ||
| 
						 | 
					c64fca1b0c | ||
| 
						 | 
					15b2a3af91 | ||
| 
						 | 
					8358505b6d | ||
| 
						 | 
					1c42779845 | ||
| 
						 | 
					32823f17e0 | ||
| 
						 | 
					e1c2e3f5e9 | ||
| 
						 | 
					044755b30f | ||
| 
						 | 
					9aa22399a8 | ||
| 
						 | 
					f564905ac4 | ||
| 
						 | 
					00e4f81446 | ||
| 
						 | 
					8927ddec16 | ||
| 
						 | 
					f6525ae200 | ||
| 
						 | 
					0be7944d66 | ||
| 
						 | 
					47819ea86e | ||
| 
						 | 
					96ce3461ad | ||
| 
						 | 
					8b6d555421 | ||
| 
						 | 
					3b9ef8dfc8 | ||
| 
						 | 
					db6d4bcf47 | ||
| 
						 | 
					471f1d694f | ||
| 
						 | 
					495f6f6bd3 | ||
| 
						 | 
					36e35b6f60 | ||
| 
						 | 
					192606bc4b | ||
| 
						 | 
					53a9fdf078 | ||
| 
						 | 
					ef436bdbe8 | ||
| 
						 | 
					72d722b07b | ||
| 
						 | 
					21fc402c01 | ||
| 
						 | 
					381f77756d | ||
| 
						 | 
					a386562d9a | ||
| 
						 | 
					2bc84fb163 | ||
| 
						 | 
					08f8917acb | ||
| 
						 | 
					62d205a2ec | ||
| 
						 | 
					29e873b12d | ||
| 
						 | 
					95f78080ab | ||
| 
						 | 
					9549cfde02 | ||
| 
						 | 
					2361aabbef | ||
| 
						 | 
					e0cc8d2ce9 | ||
| 
						 | 
					53c0e97117 | ||
| 
						 | 
					bb44791bf3 | ||
| 
						 | 
					9ebcfe9dff | ||
| 
						 | 
					f339bf613c | ||
| 
						 | 
					b00c59816d | ||
| 
						 | 
					a00918116d | ||
| 
						 | 
					d26c318321 | ||
| 
						 | 
					eb8770506f | ||
| 
						 | 
					c06171a802 | ||
| 
						 | 
					5528c1eaa5 | ||
| 
						 | 
					93516effe4 | ||
| 
						 | 
					38e518c710 | ||
| 
						 | 
					3f6133be27 | ||
| 
						 | 
					c3bfb355c5 | ||
| 
						 | 
					c69dd14cbc | ||
| 
						 | 
					7954652b80 | ||
| 
						 | 
					ca35b39900 | ||
| 
						 | 
					09df9b90c3 | ||
| 
						 | 
					308ae5cbf2 | ||
| 
						 | 
					1cd5cdfccb | ||
| 
						 | 
					606e7fd744 | ||
| 
						 | 
					e8109b09b1 | ||
| 
						 | 
					536ea60d73 | ||
| 
						 | 
					3390b6446c | ||
| 
						 | 
					bfc7f1e4ac | ||
| 
						 | 
					8ba410a56e | ||
| 
						 | 
					14d1da3ae0 | ||
| 
						 | 
					2a72641a0b | ||
| 
						 | 
					9c4e5dc3ee | ||
| 
						 | 
					540e5ffa90 | ||
| 
						 | 
					c1a57591ee | ||
| 
						 | 
					1a4f72dd4f | ||
| 
						 | 
					c3c8bbd3b2 | ||
| 
						 | 
					fb7d34cea8 | ||
| 
						 | 
					0866c1b52d | ||
| 
						 | 
					136f728b49 | ||
| 
						 | 
					5d28a857a4 | ||
| 
						 | 
					edbe0d166c | ||
| 
						 | 
					4db8c8b1a3 | ||
| 
						 | 
					2b16b8604a | ||
| 
						 | 
					f630929810 | ||
| 
						 | 
					016abdfef6 | ||
| 
						 | 
					fd915609cd | ||
| 
						 | 
					064697fde6 | ||
| 
						 | 
					a03fd7b81c | ||
| 
						 | 
					1cfcbc50a6 | ||
| 
						 | 
					ea1f138c08 | ||
| 
						 | 
					d560207ea1 | ||
| 
						 | 
					90b51831fd | ||
| 
						 | 
					38ed8938d8 | ||
| 
						 | 
					547e91dbf0 | ||
| 
						 | 
					04da96e044 | ||
| 
						 | 
					4a7def101b | ||
| 
						 | 
					541e5a3b82 | ||
| 
						 | 
					5af61716aa | ||
| 
						 | 
					6f3e0051c3 | ||
| 
						 | 
					703ecc3521 | ||
| 
						 | 
					67b0f9aacd | ||
| 
						 | 
					854277bae5 | ||
| 
						 | 
					ca9760756a | ||
| 
						 | 
					f1f993a25b | ||
| 
						 | 
					eb0f727818 | ||
| 
						 | 
					dc3d0289d6 | ||
| 
						 | 
					bd830c6f4d | ||
| 
						 | 
					51d602f973 | ||
| 
						 | 
					30d5401f31 | ||
| 
						 | 
					ab6b0f9843 | ||
| 
						 | 
					c560327f26 | ||
| 
						 | 
					28939dd45c | ||
| 
						 | 
					3853e3d6f3 | ||
| 
						 | 
					6062a1bd68 | ||
| 
						 | 
					8d94688fd1 | ||
| 
						 | 
					6b4532b592 | ||
| 
						 | 
					286fb6f645 | ||
| 
						 | 
					340caf5da3 | ||
| 
						 | 
					171c4fd49f | ||
| 
						 | 
					b8a0fb1dfe | ||
| 
						 | 
					e65993bccb | ||
| 
						 | 
					7ffb4660ec | ||
| 
						 | 
					974f314f57 | ||
| 
						 | 
					4cec22fa19 | ||
| 
						 | 
					069477d35c | ||
| 
						 | 
					eaff1a344e | ||
| 
						 | 
					1fe1e39a88 | ||
| 
						 | 
					33b06f56f0 | ||
| 
						 | 
					61a84abe2a | ||
| 
						 | 
					3d03100079 | ||
| 
						 | 
					5297a52bf0 | ||
| 
						 | 
					88631276e8 | ||
| 
						 | 
					2c0d9ad64c | ||
| 
						 | 
					5c691ed835 | ||
| 
						 | 
					f73864a045 | ||
| 
						 | 
					94da04fcac | ||
| 
						 | 
					5f758fbd11 | ||
| 
						 | 
					fb29529a52 | ||
| 
						 | 
					3cd2673077 | ||
| 
						 | 
					d242214e18 | ||
| 
						 | 
					468b787272 | ||
| 
						 | 
					cfdb6f851c | ||
| 
						 | 
					7886f120f3 | ||
| 
						 | 
					76fe69b133 | ||
| 
						 | 
					e1bae4fc7e | ||
| 
						 | 
					bc9705f758 | ||
| 
						 | 
					c819e234b8 | ||
| 
						 | 
					ce021b79a7 | ||
| 
						 | 
					805a2f6f99 | ||
| 
						 | 
					eb78400b53 | ||
| 
						 | 
					4852f9ffbd | ||
| 
						 | 
					c8d2ad2513 | ||
| 
						 | 
					9f374c2050 | ||
| 
						 | 
					5799852424 | ||
| 
						 | 
					6417fa95cf | ||
| 
						 | 
					61f6284a35 | ||
| 
						 | 
					6b1a1a62a3 | ||
| 
						 | 
					feacb4b481 | ||
| 
						 | 
					fe3c874001 | ||
| 
						 | 
					d9459b54d9 | ||
| 
						 | 
					017be8a882 | ||
| 
						 | 
					b86e543a13 | ||
| 
						 | 
					c2d4fd876c | ||
| 
						 | 
					58cad04bbb | ||
| 
						 | 
					9bb64d6827 | ||
| 
						 | 
					4441df90c1 | ||
| 
						 | 
					f51f2417c5 | ||
| 
						 | 
					aad617647d | ||
| 
						 | 
					49c0d62dda | ||
| 
						 | 
					f752098ba5 | ||
| 
						 | 
					a4477b9e4b | ||
| 
						 | 
					ad3cef0fc8 | ||
| 
						 | 
					d89dbe5bd6 | ||
| 
						 | 
					b0475dbdbc | ||
| 
						 | 
					60b2e74fa3 | ||
| 
						 | 
					cda16297d1 | ||
| 
						 | 
					d6c9a72e15 | ||
| 
						 | 
					4d7b1512c1 | ||
| 
						 | 
					d8a35d745e | ||
| 
						 | 
					e22657ea13 | ||
| 
						 | 
					d06d6b5534 | ||
| 
						 | 
					cec8ab1fde | ||
| 
						 | 
					9fc62a8dd0 | ||
| 
						 | 
					61540b98c2 | ||
| 
						 | 
					465ae39e86 | ||
| 
						 | 
					01f04b9a41 | ||
| 
						 | 
					34f9ab1046 | ||
| 
						 | 
					699876778b | ||
| 
						 | 
					8fc5a0d19e | ||
| 
						 | 
					62b5926d58 | ||
| 
						 | 
					4d1037f385 | ||
| 
						 | 
					e4addb3975 | ||
| 
						 | 
					2aef351980 | ||
| 
						 | 
					d88c153c7d | ||
| 
						 | 
					9e9883082e | ||
| 
						 | 
					71440df4c7 | ||
| 
						 | 
					80b004a57d | ||
| 
						 | 
					ea8476a2dc | ||
| 
						 | 
					cb85ca18ab | ||
| 
						 | 
					f1103b95cf | ||
| 
						 | 
					aa5ff53bcf | ||
| 
						 | 
					907dabed5d | ||
| 
						 | 
					0cacbc892c | ||
| 
						 | 
					6753c3c715 | ||
| 
						 | 
					36e1363e3d | ||
| 
						 | 
					d1a711eb6a | ||
| 
						 | 
					d8dea4dcc7 | ||
| 
						 | 
					ca161737bc | ||
| 
						 | 
					3612c3774e | ||
| 
						 | 
					e6a65bb3ef | ||
| 
						 | 
					ff291eee48 | ||
| 
						 | 
					66b8f48a88 | ||
| 
						 | 
					634760cbdc | ||
| 
						 | 
					a23a897ad2 | ||
| 
						 | 
					d9c244278d | ||
| 
						 | 
					b6c4185b27 | ||
| 
						 | 
					5896d35e72 | ||
| 
						 | 
					b4dfdd8bbc | ||
| 
						 | 
					e6ed3478ea | ||
| 
						 | 
					db08d9c6b9 | ||
| 
						 | 
					9490278ece | ||
| 
						 | 
					fd8bf5f171 | ||
| 
						 | 
					c9bc14a222 | ||
| 
						 | 
					63708cbfb0 | ||
| 
						 | 
					d9f307623c | ||
| 
						 | 
					540f77a627 | ||
| 
						 | 
					71bb2d0b8b | ||
| 
						 | 
					87dc44e434 | ||
| 
						 | 
					29e0fcd091 | ||
| 
						 | 
					2e9a798f09 | ||
| 
						 | 
					b32a39f44f | ||
| 
						 | 
					d86f9611b3 | ||
| 
						 | 
					6a62fc4a40 | ||
| 
						 | 
					7cdd6455d7 | ||
| 
						 | 
					e4fefd088d | ||
| 
						 | 
					95e601e2b1 | ||
| 
						 | 
					b1ffe7b74a | ||
| 
						 | 
					417c8fb602 | ||
| 
						 | 
					85efa64c31 | ||
| 
						 | 
					d8cb026e80 | ||
| 
						 | 
					41dd5121f0 | ||
| 
						 | 
					94482d7ca5 | ||
| 
						 | 
					4d0e51aead | ||
| 
						 | 
					ae8a8c8ba4 | ||
| 
						 | 
					7d043f46d5 | ||
| 
						 | 
					cbca19d6c2 | ||
| 
						 | 
					b40b9677b6 | ||
| 
						 | 
					c80ad865db | ||
| 
						 | 
					758eae49ab | ||
| 
						 | 
					721b05e343 | ||
| 
						 | 
					a333bddeeb | ||
| 
						 | 
					4c6a52fe90 | ||
| 
						 | 
					792d73a9cf | ||
| 
						 | 
					9a95a3f8c3 | ||
| 
						 | 
					485edb777f | ||
| 
						 | 
					a8c3431ae9 | ||
| 
						 | 
					6fe4a6fa9a | ||
| 
						 | 
					6d8c7356d6 | ||
| 
						 | 
					a782c96e81 | ||
| 
						 | 
					c795123cd5 | ||
| 
						 | 
					0ec370e6fb | ||
| 
						 | 
					3d5732d4e0 | ||
| 
						 | 
					b795929858 | ||
| 
						 | 
					535258ffe4 | ||
| 
						 | 
					cc161b96ac | ||
| 
						 | 
					5c4b422b18 | ||
| 
						 | 
					89bad584c3 | ||
| 
						 | 
					e21926f7f0 | ||
| 
						 | 
					e452f467d4 | ||
| 
						 | 
					dfda7ba456 | ||
| 
						 | 
					feb6b6445e | ||
| 
						 | 
					0b57fa9c51 | ||
| 
						 | 
					55c6f60c90 | ||
| 
						 | 
					9def011e8e | ||
| 
						 | 
					7cf6e8c9cc | ||
| 
						 | 
					cdee43aa59 | ||
| 
						 | 
					9c25b58b4c | ||
| 
						 | 
					83f35463f5 | ||
| 
						 | 
					818cdb879e | ||
| 
						 | 
					3eead2d6c4 | ||
| 
						 | 
					5cffe055ad | ||
| 
						 | 
					3d4511daf3 | ||
| 
						 | 
					4748b40ad9 | ||
| 
						 | 
					c40b4f6c39 | ||
| 
						 | 
					d3b96dd394 | ||
| 
						 | 
					f946df640b | ||
| 
						 | 
					fef78bd6f1 | ||
| 
						 | 
					9e6cc86bf7 | ||
| 
						 | 
					b544c5fa5c | ||
| 
						 | 
					afa64ee31f | ||
| 
						 | 
					e9bfef0eb1 | ||
| 
						 | 
					ddbcccd43d | ||
| 
						 | 
					5370d7a6eb | ||
| 
						 | 
					685b180ab6 | ||
| 
						 | 
					9dab850874 | ||
| 
						 | 
					0d5bfe883e | ||
| 
						 | 
					cc2f1d4894 | ||
| 
						 | 
					a8dd13db4c | ||
| 
						 | 
					325391aef9 | ||
| 
						 | 
					3474ec4ecb | ||
| 
						 | 
					ec1736d488 | ||
| 
						 | 
					4522579688 | ||
| 
						 | 
					907a6e0eed | ||
| 
						 | 
					d20186a7b8 | ||
| 
						 | 
					b28051881e | ||
| 
						 | 
					bdea56cd3f | ||
| 
						 | 
					8a3ec2c659 | ||
| 
						 | 
					14e9420d2c | ||
| 
						 | 
					5b58e61f28 | ||
| 
						 | 
					be2f3071b5 | ||
| 
						 | 
					85dbf82d93 | ||
| 
						 | 
					a9c4963cc0 | ||
| 
						 | 
					a4934387d5 | ||
| 
						 | 
					e88a2ec6fc | ||
| 
						 | 
					0666960173 | ||
| 
						 | 
					f114caca90 | ||
| 
						 | 
					9468c9c796 | ||
| 
						 | 
					76c53c690c | ||
| 
						 | 
					c341b11aaf | ||
| 
						 | 
					6212e6990a | ||
| 
						 | 
					28049a183c | ||
| 
						 | 
					5d3dd7911e | ||
| 
						 | 
					ae8375516b | ||
| 
						 | 
					e3f10eb825 | ||
| 
						 | 
					2b1f683239 | ||
| 
						 | 
					a2b19c9a63 | ||
| 
						 | 
					4146ce8267 | ||
| 
						 | 
					170bd6dafc | ||
| 
						 | 
					7e16ec8724 | ||
| 
						 | 
					8c459156f8 | ||
| 
						 | 
					2db894807b | ||
| 
						 | 
					95ceeb6e0b | ||
| 
						 | 
					c9c00d2a23 | ||
| 
						 | 
					1afe49864d | ||
| 
						 | 
					6924bee3a0 | ||
| 
						 | 
					39d4552dab | ||
| 
						 | 
					a23c63738f | ||
| 
						 | 
					e911945c55 | ||
| 
						 | 
					6d58d13710 | ||
| 
						 | 
					0b177cb165 | ||
| 
						 | 
					3e31b619de | ||
| 
						 | 
					f925979b2f | ||
| 
						 | 
					49f7fa82b9 | ||
| 
						 | 
					e4cd4cf3f3 | ||
| 
						 | 
					e74b20926d | ||
| 
						 | 
					a312127c91 | ||
| 
						 | 
					1dc5bf4f73 | ||
| 
						 | 
					01cfe670c5 | ||
| 
						 | 
					fd307bfe29 | ||
| 
						 | 
					a00de093a7 | ||
| 
						 | 
					7bfe853af3 | ||
| 
						 | 
					cbaecca8e9 | ||
| 
						 | 
					8edfb370a8 | ||
| 
						 | 
					4c08c8f7db | ||
| 
						 | 
					c174680a03 | ||
| 
						 | 
					cb5f6e18e6 | ||
| 
						 | 
					b798e7a5ae | ||
| 
						 | 
					5deab7ad27 | ||
| 
						 | 
					12cdfd282d | ||
| 
						 | 
					eba8035e12 | ||
| 
						 | 
					edcbf4350b | ||
| 
						 | 
					9289ea471f | ||
| 
						 | 
					7d06185aa6 | ||
| 
						 | 
					01ecb1d7e7 | ||
| 
						 | 
					e177f14595 | ||
| 
						 | 
					5c6eddcadd | ||
| 
						 | 
					b3b4786990 | ||
| 
						 | 
					fbe2907599 | ||
| 
						 | 
					343da8d4b3 | ||
| 
						 | 
					8d97792dbc | ||
| 
						 | 
					8d07c87be7 | ||
| 
						 | 
					ed21701df3 | ||
| 
						 | 
					df01507582 | ||
| 
						 | 
					f2bda5fd5b | ||
| 
						 | 
					cba9838e8f | ||
| 
						 | 
					b6dba9f5dd | ||
| 
						 | 
					6e9d1617c6 | ||
| 
						 | 
					ea811fee52 | ||
| 
						 | 
					7391fd8f6a | ||
| 
						 | 
					6c00c58f2a | ||
| 
						 | 
					4931fbce49 | ||
| 
						 | 
					fefc7ea600 | ||
| 
						 | 
					d220389647 | ||
| 
						 | 
					a1f910c159 | ||
| 
						 | 
					e4866563de | ||
| 
						 | 
					47f45aa229 | ||
| 
						 | 
					affe334675 | ||
| 
						 | 
					ee7e184e26 | ||
| 
						 | 
					bec0ebacf1 | ||
| 
						 | 
					5bd6d631c6 | ||
| 
						 | 
					fd1799f3bb | ||
| 
						 | 
					d84a0c51e0 | ||
| 
						 | 
					d9a7c7de51 | ||
| 
						 | 
					d57e09889a | ||
| 
						 | 
					eecb86bfb0 | ||
| 
						 | 
					0b1197936c | ||
| 
						 | 
					b545ac6391 | ||
| 
						 | 
					a922132e4a | ||
| 
						 | 
					9474e8d6d2 | ||
| 
						 | 
					6328428568 | ||
| 
						 | 
					ea9a88a9b8 | ||
| 
						 | 
					aec7358ca4 | ||
| 
						 | 
					3c334b2bb6 | ||
| 
						 | 
					75bba0da92 | ||
| 
						 | 
					c0bfe7be15 | ||
| 
						 | 
					22ac08e06d | ||
| 
						 | 
					87037136ef | ||
| 
						 | 
					2182e37433 | ||
| 
						 | 
					1de82b220d | ||
| 
						 | 
					bd878756fc | ||
| 
						 | 
					8d7f402efb | ||
| 
						 | 
					d3299beec7 | ||
| 
						 | 
					f9192db358 | ||
| 
						 | 
					c69c0c0446 | ||
| 
						 | 
					deb2911c0e | ||
| 
						 | 
					e31a306a38 | ||
| 
						 | 
					d9a7773011 | ||
| 
						 | 
					2b14916813 | ||
| 
						 | 
					1d1530e14c | ||
| 
						 | 
					b4fdc025a8 | ||
| 
						 | 
					f1c14fe0b4 | ||
| 
						 | 
					38306cda54 | ||
| 
						 | 
					5a0f0023cf | ||
| 
						 | 
					6dcdb8b821 | ||
| 
						 | 
					781f52a287 | ||
| 
						 | 
					f75ff58b4b | ||
| 
						 | 
					ae9bf16dee | ||
| 
						 | 
					17a8bf212f | ||
| 
						 | 
					4fc76afef4 | ||
| 
						 | 
					a31155a72a | ||
| 
						 | 
					75601f7924 | ||
| 
						 | 
					8b6314ccfb | ||
| 
						 | 
					6de7dc5879 | ||
| 
						 | 
					6aaee5f23b | ||
| 
						 | 
					dd06dcebe1 | ||
| 
						 | 
					b35c26b751 | ||
| 
						 | 
					128f341635 | ||
| 
						 | 
					e48bc1be48 | ||
| 
						 | 
					0077b9c0a2 | ||
| 
						 | 
					fe37fb5921 | ||
| 
						 | 
					221ecd0a30 | ||
| 
						 | 
					560492707d | ||
| 
						 | 
					dfdf4916fa | ||
| 
						 | 
					97a8c98886 | ||
| 
						 | 
					62fb70e9d1 | ||
| 
						 | 
					8a9098a36c | ||
| 
						 | 
					28027c2aa2 | ||
| 
						 | 
					d60029d66e | ||
| 
						 | 
					226fe8bdf9 | ||
| 
						 | 
					33237b4502 | ||
| 
						 | 
					af6c394785 | ||
| 
						 | 
					558d12d7f6 | ||
| 
						 | 
					bfa8a6da26 | ||
| 
						 | 
					aa6b3d22a2 | ||
| 
						 | 
					2eb355733f | ||
| 
						 | 
					e66cdacb93 | ||
| 
						 | 
					c67f2da283 | ||
| 
						 | 
					e192261788 | ||
| 
						 | 
					c63ca99c1c | ||
| 
						 | 
					1c99c4ad11 | ||
| 
						 | 
					bbcfc10677 | ||
| 
						 | 
					47e67eab26 | ||
| 
						 | 
					650b95045d | ||
| 
						 | 
					5603134e58 | ||
| 
						 | 
					d12fd897cb | ||
| 
						 | 
					5e95203a5d | ||
| 
						 | 
					cad4a571ce | ||
| 
						 | 
					139ab3740a | ||
| 
						 | 
					7b832e1745 | ||
| 
						 | 
					914b9e441b | ||
| 
						 | 
					f0f6ab49f5 | ||
| 
						 | 
					436d147925 | ||
| 
						 | 
					4bd78a7df4 | ||
| 
						 | 
					7ee6a9dc25 | ||
| 
						 | 
					1b56ae8478 | ||
| 
						 | 
					d52c0b6f05 | ||
| 
						 | 
					3ff2bfa0e4 | ||
| 
						 | 
					aa21a3d5c3 | ||
| 
						 | 
					fc33ad8cf2 | ||
| 
						 | 
					779043f7a3 | ||
| 
						 | 
					265bb99382 | ||
| 
						 | 
					7493db2338 | ||
| 
						 | 
					c3ad019c99 | ||
| 
						 | 
					05b84bfe91 | ||
| 
						 | 
					dbfa1e55b6 | ||
| 
						 | 
					a0fd63f611 | ||
| 
						 | 
					4ec0401529 | ||
| 
						 | 
					61e6554b7f | ||
| 
						 | 
					f6f3f79aa8 | ||
| 
						 | 
					c16c017f8b | ||
| 
						 | 
					2f03ef39d1 | ||
| 
						 | 
					db33926432 | ||
| 
						 | 
					946090b9cd | ||
| 
						 | 
					1f7f0fda71 | ||
| 
						 | 
					b84d947be4 | ||
| 
						 | 
					07c67138c9 | ||
| 
						 | 
					10717bd39b | ||
| 
						 | 
					302bb4a4b3 | ||
| 
						 | 
					81b5af2d1b | ||
| 
						 | 
					87c562845c | ||
| 
						 | 
					6c81d74626 | ||
| 
						 | 
					533c24a471 | ||
| 
						 | 
					6a9697387a | ||
| 
						 | 
					85c8981b3d | ||
| 
						 | 
					6c5b8e1d59 | ||
| 
						 | 
					2cc16d89e6 | ||
| 
						 | 
					42eb74922d | ||
| 
						 | 
					c528a7ee33 | ||
| 
						 | 
					eb2da7ec2b | ||
| 
						 | 
					01ed950bbe | ||
| 
						 | 
					b1076e0a9e | ||
| 
						 | 
					332eb7651a | ||
| 
						 | 
					cfdcf5c933 | ||
| 
						 | 
					820de919b6 | ||
| 
						 | 
					a32cd520bd | ||
| 
						 | 
					b93a60daf9 | ||
| 
						 | 
					e2844f5e04 | ||
| 
						 | 
					cabb46db3d | ||
| 
						 | 
					d09b436937 | ||
| 
						 | 
					10fdb1d743 | ||
| 
						 | 
					f0d3fccd4b | ||
| 
						 | 
					aff19f64b5 | ||
| 
						 | 
					15a56b42d6 | ||
| 
						 | 
					d3706814e9 | ||
| 
						 | 
					6513dcef68 | ||
| 
						 | 
					81f22465ba | ||
| 
						 | 
					dccc77a325 | ||
| 
						 | 
					13ac89af24 | ||
| 
						 | 
					ffefcab1bc | ||
| 
						 | 
					0226b53b75 | ||
| 
						 | 
					bbf80d0f93 | ||
| 
						 | 
					6003f24f78 | ||
| 
						 | 
					4382a80b9a | ||
| 
						 | 
					9fe920cd90 | ||
| 
						 | 
					f0ee7115d3 | ||
| 
						 | 
					5986c653ef | ||
| 
						 | 
					0e7203be89 | ||
| 
						 | 
					52dbc96c32 | ||
| 
						 | 
					1c8da21083 | ||
| 
						 | 
					8f304d8167 | ||
| 
						 | 
					30a0bd9cf5 | ||
| 
						 | 
					ae40cdf92f | ||
| 
						 | 
					b342fbdcda | ||
| 
						 | 
					d1ea596f88 | ||
| 
						 | 
					064cf971ef | ||
| 
						 | 
					91b1598756 | ||
| 
						 | 
					17b18bca3c | ||
| 
						 | 
					be3d601217 | ||
| 
						 | 
					ca0fd33d2d | ||
| 
						 | 
					271f96f78f | ||
| 
						 | 
					b0130e6b3b | ||
| 
						 | 
					d0c1f3e25b | ||
| 
						 | 
					b244710ddb | ||
| 
						 | 
					d465291ded | ||
| 
						 | 
					84e462d5f6 | ||
| 
						 | 
					508466a175 | ||
| 
						 | 
					e6dd4a6456 | ||
| 
						 | 
					8d62e21072 | ||
| 
						 | 
					25fe47f262 | ||
| 
						 | 
					fe8365d214 | ||
| 
						 | 
					2519a8cc9f | ||
| 
						 | 
					b8ff21124a | ||
| 
						 | 
					6aafc2dfd2 | ||
| 
						 | 
					65b22480f4 | ||
| 
						 | 
					60f19269d0 | ||
| 
						 | 
					5121499082 | ||
| 
						 | 
					3e049a90b7 | ||
| 
						 | 
					c5d97df7f1 | ||
| 
						 | 
					c2479ccb7a | ||
| 
						 | 
					fc07eb45f4 | ||
| 
						 | 
					c7cdb0f266 | ||
| 
						 | 
					92aedf850e | ||
| 
						 | 
					dd157fc349 | ||
| 
						 | 
					05f3ca880f | ||
| 
						 | 
					a18d41a463 | ||
| 
						 | 
					1affbff8f9 | ||
| 
						 | 
					c55d0bb804 | ||
| 
						 | 
					0ffec712e1 | ||
| 
						 | 
					6ebac3dc76 | ||
| 
						 | 
					3b976ea9f1 | ||
| 
						 | 
					2c16dfb526 | ||
| 
						 | 
					fe3a78ab19 | ||
| 
						 | 
					1a984ea847 | ||
| 
						 | 
					2a0cde3041 | ||
| 
						 | 
					3552775b52 | ||
| 
						 | 
					818a632e80 | ||
| 
						 | 
					00afb0f638 | ||
| 
						 | 
					2e32d415c0 | ||
| 
						 | 
					3dfc509d33 | ||
| 
						 | 
					4379142af7 | ||
| 
						 | 
					8a6dc57212 | ||
| 
						 | 
					af636c535c | ||
| 
						 | 
					2f77b0a4c6 | ||
| 
						 | 
					08ad385e0e | ||
| 
						 | 
					5623e0bb0e | ||
| 
						 | 
					3d438d8d64 | ||
| 
						 | 
					d89c495782 | ||
| 
						 | 
					f5ba174f4d | ||
| 
						 | 
					329bcf3a71 | ||
| 
						 | 
					0cb12d7e78 | ||
| 
						 | 
					3bfa06c9a2 | ||
| 
						 | 
					f34573c8e2 | ||
| 
						 | 
					4163b86cd2 | ||
| 
						 | 
					5b948512f9 | ||
| 
						 | 
					2297a7a70c | ||
| 
						 | 
					dc82f9e6df | ||
| 
						 | 
					e60e7414b9 | ||
| 
						 | 
					c6caa9fd60 | ||
| 
						 | 
					c84ad40ccd | ||
| 
						 | 
					ab7f25ab41 | ||
| 
						 | 
					6d213e207d | ||
| 
						 | 
					9b6545c479 | ||
| 
						 | 
					96fb118251 | ||
| 
						 | 
					617d6eb7ce | ||
| 
						 | 
					99888388dc | ||
| 
						 | 
					7d24ce9651 | ||
| 
						 | 
					cbc35b1fb8 | ||
| 
						 | 
					027fc719cc | ||
| 
						 | 
					f6b2e9e8a4 | ||
| 
						 | 
					c4f1a9f690 | ||
| 
						 | 
					542055074b | ||
| 
						 | 
					7b93348aae | ||
| 
						 | 
					eaf475b538 | ||
| 
						 | 
					4118c68df1 | ||
| 
						 | 
					69d5d88259 | ||
| 
						 | 
					7e6a36ea7b | ||
| 
						 | 
					6878c0b88f | ||
| 
						 | 
					bbdc9f15e7 | ||
| 
						 | 
					ae4f8243a9 | ||
| 
						 | 
					1c83dee948 | ||
| 
						 | 
					b66dedc017 | ||
| 
						 | 
					b07e2a08f9 | ||
| 
						 | 
					64543e09ec | ||
| 
						 | 
					58936efff6 | ||
| 
						 | 
					dbd32278f8 | ||
| 
						 | 
					6d35984286 | ||
| 
						 | 
					c046dc904c | ||
| 
						 | 
					bc8375a1e8 | ||
| 
						 | 
					83877d5ec6 | ||
| 
						 | 
					3f248dd163 | ||
| 
						 | 
					c9954d1941 | ||
| 
						 | 
					e165332211 | ||
| 
						 | 
					d25310cb6f | ||
| 
						 | 
					fbb9d23a25 | ||
| 
						 | 
					2d32e8831b | ||
| 
						 | 
					42a9d96fae | ||
| 
						 | 
					3edd9b4dfc | ||
| 
						 | 
					1a8cf79ae0 | ||
| 
						 | 
					b736bdc8e5 | ||
| 
						 | 
					babb985f1a | ||
| 
						 | 
					b22a5f756c | ||
| 
						 | 
					d733061873 | ||
| 
						 | 
					bca0c8d253 | ||
| 
						 | 
					53ac8004e7 | ||
| 
						 | 
					7b76499e82 | ||
| 
						 | 
					9f45190fa1 | ||
| 
						 | 
					f933cb3b75 | ||
| 
						 | 
					c6822f5a7f | ||
| 
						 | 
					4e276b1b68 | ||
| 
						 | 
					50e9f8ffd3 | ||
| 
						 | 
					7d3daa598f | ||
| 
						 | 
					7349940bdb | ||
| 
						 | 
					78000dbd5d | ||
| 
						 | 
					b585f411cd | ||
| 
						 | 
					5ccd6bb842 | ||
| 
						 | 
					5193894603 | ||
| 
						 | 
					29b76a52fb | ||
| 
						 | 
					0436bc22f2 | ||
| 
						 | 
					cd16efa2f2 | ||
| 
						 | 
					56562bad59 | ||
| 
						 | 
					a26081b555 | ||
| 
						 | 
					aa9c01ad3e | ||
| 
						 | 
					4e37187e44 | ||
| 
						 | 
					74d5a6fb3b | ||
| 
						 | 
					83da58ce91 | ||
| 
						 | 
					45cc78fdbc | ||
| 
						 | 
					010044e03c | ||
| 
						 | 
					db0e3cc60c | ||
| 
						 | 
					8dd6a4e369 | ||
| 
						 | 
					92abbcef4c | ||
| 
						 | 
					1e8f0c5771 | ||
| 
						 | 
					532bca41e5 | ||
| 
						 | 
					b438c46764 | ||
| 
						 | 
					ef48c73783 | ||
| 
						 | 
					2c5e416591 | ||
| 
						 | 
					8e91d5de8e | ||
| 
						 | 
					2f85f3b147 | ||
| 
						 | 
					20a47acb3a | ||
| 
						 | 
					6bc85a94f9 | ||
| 
						 | 
					71bf8a6985 | ||
| 
						 | 
					59a76e4010 | ||
| 
						 | 
					65b9c0d44d | ||
| 
						 | 
					f2a25966cf | ||
| 
						 | 
					51afc3d8c5 | ||
| 
						 | 
					0c2f60036a | ||
| 
						 | 
					3dcdcfc572 | ||
| 
						 | 
					9f8c51cbd8 | ||
| 
						 | 
					de79348a90 | ||
| 
						 | 
					56bc31e9f9 | ||
| 
						 | 
					a9181f8f00 | ||
| 
						 | 
					3685f792cb | ||
| 
						 | 
					e227a276ce | ||
| 
						 | 
					7b5b60d275 | ||
| 
						 | 
					e719f4169c | ||
| 
						 | 
					d8fb2b2e63 | ||
| 
						 | 
					fdeaae678d | ||
| 
						 | 
					f30102f038 | ||
| 
						 | 
					a27ac6f394 | ||
| 
						 | 
					093c0a098e | ||
| 
						 | 
					c3363f833c | ||
| 
						 | 
					47def8091c | ||
| 
						 | 
					cfb32ec0cd | ||
| 
						 | 
					5d9ae88f58 | ||
| 
						 | 
					9d066935e5 | ||
| 
						 | 
					bc40063e07 | ||
| 
						 | 
					3c92d45386 | ||
| 
						 | 
					fcf4fccfa4 | ||
| 
						 | 
					eafd2c6bd5 | ||
| 
						 | 
					64f00454e5 | ||
| 
						 | 
					d678727430 | ||
| 
						 | 
					efc15fb128 | ||
| 
						 | 
					3d4cd8c9aa | ||
| 
						 | 
					420259993e | ||
| 
						 | 
					66087bdac6 | ||
| 
						 | 
					ac70a43452 | ||
| 
						 | 
					72dbe9da72 | ||
| 
						 | 
					dd02881788 | ||
| 
						 | 
					ced8955325 | ||
| 
						 | 
					51ca5fcbe0 | ||
| 
						 | 
					56ff2aa059 | ||
| 
						 | 
					9f77771ff9 | ||
| 
						 | 
					f0fa858885 | ||
| 
						 | 
					3298630500 | ||
| 
						 | 
					dc27488c47 | ||
| 
						 | 
					375e615a6d | ||
| 
						 | 
					6918427fae | ||
| 
						 | 
					9d342bbf07 | ||
| 
						 | 
					afc81ada0c | ||
| 
						 | 
					5cd267b2be | ||
| 
						 | 
					09da90076f | ||
| 
						 | 
					d0079d9054 | ||
| 
						 | 
					ede5b54edc | ||
| 
						 | 
					c5fdeef41d | ||
| 
						 | 
					6ca45beaed | ||
| 
						 | 
					2a07626aa8 | ||
| 
						 | 
					9127554852 | ||
| 
						 | 
					9ff28a8237 | ||
| 
						 | 
					e9aa07f660 | ||
| 
						 | 
					88e21894c7 | ||
| 
						 | 
					09da2c1767 | ||
| 
						 | 
					ae2ecfc5cb | ||
| 
						 | 
					cc610f0d1f | ||
| 
						 | 
					8333644c84 | ||
| 
						 | 
					4d13b2cc64 | ||
| 
						 | 
					48dc74aecc | ||
| 
						 | 
					888d39e083 | ||
| 
						 | 
					7239ecd456 | ||
| 
						 | 
					598e8dfbfb | ||
| 
						 | 
					9efdb68035 | ||
| 
						 | 
					14b898cb05 | ||
| 
						 | 
					8d16b2b119 | ||
| 
						 | 
					4d2cb8b32a | ||
| 
						 | 
					d5001a3f0b | ||
| 
						 | 
					91f5ac4d5c | ||
| 
						 | 
					f9977df50d | ||
| 
						 | 
					711650b178 | ||
| 
						 | 
					c9adbc9f1c | ||
| 
						 | 
					611fbfa917 | ||
| 
						 | 
					ecfacfb334 | ||
| 
						 | 
					645413f5ef | ||
| 
						 | 
					5becdc38b3 | ||
| 
						 | 
					f36cea67fe | ||
| 
						 | 
					b556d6caee | ||
| 
						 | 
					a17a78c477 | ||
| 
						 | 
					146413a53c | ||
| 
						 | 
					437fd064c9 | ||
| 
						 | 
					28dd4e4f1f | ||
| 
						 | 
					f92dc70beb | ||
| 
						 | 
					6d8f1328bf | ||
| 
						 | 
					8d1d93d56d | ||
| 
						 | 
					f8e102c485 | ||
| 
						 | 
					d816fcc965 | ||
| 
						 | 
					e30dcd0501 | ||
| 
						 | 
					24dc7cffbd | ||
| 
						 | 
					3bc83926ce | ||
| 
						 | 
					c5cca4d059 | ||
| 
						 | 
					0db04c4f56 | ||
| 
						 | 
					5c566c9aa3 | ||
| 
						 | 
					822f02313d | ||
| 
						 | 
					d934890c1e | ||
| 
						 | 
					0e25cf41c4 | ||
| 
						 | 
					5214dbbd02 | ||
| 
						 | 
					0c716d51ad | ||
| 
						 | 
					86367d675a | ||
| 
						 | 
					bd8cef5a70 | ||
| 
						 | 
					708431e2ea | ||
| 
						 | 
					db5c1c61e5 | ||
| 
						 | 
					aa4ff6d8b9 | ||
| 
						 | 
					6d5b8b50e1 | ||
| 
						 | 
					600d7b11e6 | ||
| 
						 | 
					afa7648be6 | ||
| 
						 | 
					5c344fc23a | ||
| 
						 | 
					5a905e0bb8 | ||
| 
						 | 
					c31216949d | ||
| 
						 | 
					2cb893575d | ||
| 
						 | 
					63f1f58077 | ||
| 
						 | 
					36e9507e29 | ||
| 
						 | 
					1fde1431c9 | ||
| 
						 | 
					bec97a0999 | ||
| 
						 | 
					07de3c9df0 | ||
| 
						 | 
					8950a2dfa1 | ||
| 
						 | 
					be47d83555 | ||
| 
						 | 
					d5054ad52d | ||
| 
						 | 
					051fad8d88 | ||
| 
						 | 
					c4532b9a07 | ||
| 
						 | 
					0e7824d1a9 | ||
| 
						 | 
					a2c78607a6 | ||
| 
						 | 
					cc1a4edf3d | ||
| 
						 | 
					db7bde1d7a | ||
| 
						 | 
					719008596a | ||
| 
						 | 
					377e78d917 | ||
| 
						 | 
					894b47da9b | ||
| 
						 | 
					54e7246342 | ||
| 
						 | 
					9b3b050640 | ||
| 
						 | 
					a0e389caa2 | ||
| 
						 | 
					b747408f9e | ||
| 
						 | 
					d3e55d8155 | ||
| 
						 | 
					96c7253cea | ||
| 
						 | 
					3f5227dfc7 | ||
| 
						 | 
					b91103099a | ||
| 
						 | 
					82d3ded922 | ||
| 
						 | 
					5a8d1c4cd1 | ||
| 
						 | 
					46372c04ee | ||
| 
						 | 
					6147879837 | ||
| 
						 | 
					e2e3c95d3b | ||
| 
						 | 
					c3b448dcea | ||
| 
						 | 
					86da31e031 | ||
| 
						 | 
					1d7075e339 | ||
| 
						 | 
					610ec27d93 | ||
| 
						 | 
					70f2717c11 | ||
| 
						 | 
					b31a54c46a | ||
| 
						 | 
					08238f4320 | ||
| 
						 | 
					06993556f3 | ||
| 
						 | 
					144459d364 | ||
| 
						 | 
					0fa61eff77 | ||
| 
						 | 
					a0be515d2d | ||
| 
						 | 
					5900c0f767 | ||
| 
						 | 
					d10cf2ba94 | ||
| 
						 | 
					bae1a75731 | ||
| 
						 | 
					f5adc8e53f | ||
| 
						 | 
					67df4c9e6c | ||
| 
						 | 
					50adfe3be9 | ||
| 
						 | 
					71794da389 | ||
| 
						 | 
					6ef11f0b13 | ||
| 
						 | 
					a5705acc9c | ||
| 
						 | 
					47e7a3e678 | ||
| 
						 | 
					0ece1b5c34 | ||
| 
						 | 
					315954c175 | ||
| 
						 | 
					27ce46a85d | ||
| 
						 | 
					ea3cc81487 | ||
| 
						 | 
					a9b139b25c | ||
| 
						 | 
					bbdd5adf6e | ||
| 
						 | 
					d425f5389d | ||
| 
						 | 
					26983053c4 | ||
| 
						 | 
					8e0043165a | ||
| 
						 | 
					c13dbf7bae | ||
| 
						 | 
					a2b6ef3478 | ||
| 
						 | 
					b6526af442 | ||
| 
						 | 
					4edba42c7c | ||
| 
						 | 
					1180ef4b31 | ||
| 
						 | 
					94bf462473 | ||
| 
						 | 
					233b3f718f | ||
| 
						 | 
					0452fd8657 | ||
| 
						 | 
					613eafaf02 | ||
| 
						 | 
					725bd1dddf | ||
| 
						 | 
					9835629801 | ||
| 
						 | 
					3c52c53ddd | ||
| 
						 | 
					321ba15a82 | ||
| 
						 | 
					9e5dfc15ac | ||
| 
						 | 
					8d52681e1d | ||
| 
						 | 
					56f6815d3d | ||
| 
						 | 
					ce07e79f3c | ||
| 
						 | 
					723ced9336 | ||
| 
						 | 
					73417b59c7 | ||
| 
						 | 
					f4e2774ab8 | ||
| 
						 | 
					d5112c0dec | ||
| 
						 | 
					aace68c91b | ||
| 
						 | 
					4034f31823 | ||
| 
						 | 
					5323340cae | ||
| 
						 | 
					3aae2ec511 | ||
| 
						 | 
					df09214c62 | ||
| 
						 | 
					12acab9b86 | ||
| 
						 | 
					c9c2115088 | ||
| 
						 | 
					d73d28a75b | ||
| 
						 | 
					13bf964b78 | ||
| 
						 | 
					3fb9c5727c | ||
| 
						 | 
					b69f33ed44 | ||
| 
						 | 
					56e8d073bf | ||
| 
						 | 
					83a8786fe1 | ||
| 
						 | 
					e3d7cc895b | ||
| 
						 | 
					0f425b01aa | ||
| 
						 | 
					c5a4b52d83 | ||
| 
						 | 
					fc2d24105c | ||
| 
						 | 
					6704d44dd4 | ||
| 
						 | 
					3d9aeccc90 | ||
| 
						 | 
					08655d8d5d | ||
| 
						 | 
					3e5dbac7a2 | ||
| 
						 | 
					05d9c9b849 | ||
| 
						 | 
					4c2fb64e21 | ||
| 
						 | 
					46a897f604 | ||
| 
						 | 
					d4b23198fa | ||
| 
						 | 
					6581663687 | ||
| 
						 | 
					4398151fd5 | ||
| 
						 | 
					d5fbfa3d0b | ||
| 
						 | 
					3a588fc9e7 | ||
| 
						 | 
					7dbad3c382 | ||
| 
						 | 
					8f55c3d47d | ||
| 
						 | 
					732d80a770 | ||
| 
						 | 
					bd277e3daa | ||
| 
						 | 
					a1cec0e49a | ||
| 
						 | 
					9027005411 | ||
| 
						 | 
					1d3542a38f | ||
| 
						 | 
					429b09ee04 | ||
| 
						 | 
					6c2a9009e9 | ||
| 
						 | 
					1b00298b52 | ||
| 
						 | 
					5ad4a52281 | ||
| 
						 | 
					db5e67e34a | ||
| 
						 | 
					a2688b6ca1 | ||
| 
						 | 
					ceb8f1cb22 | ||
| 
						 | 
					a7a3d49996 | ||
| 
						 | 
					c36fc521bd | ||
| 
						 | 
					ca43cd46a7 | ||
| 
						 | 
					47ff6f29f4 | ||
| 
						 | 
					861ca06f11 | ||
| 
						 | 
					d9e54a3cdf | ||
| 
						 | 
					32eaf9e83a | ||
| 
						 | 
					9ce94207e2 | ||
| 
						 | 
					9518e06413 | ||
| 
						 | 
					aa21e42d5b | ||
| 
						 | 
					16215e80d2 | ||
| 
						 | 
					658c7e8afc | ||
| 
						 | 
					666d0b67d1 | ||
| 
						 | 
					97f3099ff6 | ||
| 
						 | 
					5a0a51a7ac | ||
| 
						 | 
					38783506fe | ||
| 
						 | 
					70ad8a0b2b | ||
| 
						 | 
					cec8a3afb2 | ||
| 
						 | 
					f78de2d8c1 | ||
| 
						 | 
					7d17713d62 | ||
| 
						 | 
					546f4dca52 | ||
| 
						 | 
					09a9b57bae | ||
| 
						 | 
					10ab082188 | ||
| 
						 | 
					4999087879 | ||
| 
						 | 
					bff5f1b944 | ||
| 
						 | 
					6e22b74253 | ||
| 
						 | 
					a547f3a21e | ||
| 
						 | 
					db9bb9221f | ||
| 
						 | 
					7994817185 | ||
| 
						 | 
					5ce97dbf0a | ||
| 
						 | 
					0879515d4c | ||
| 
						 | 
					2a6e1ea83c | ||
| 
						 | 
					ea6d35d973 | ||
| 
						 | 
					a80f65c578 | ||
| 
						 | 
					7751756636 | ||
| 
						 | 
					2de6d8baf6 | ||
| 
						 | 
					b8c69928db | ||
| 
						 | 
					b73746ae43 | ||
| 
						 | 
					ca06bbe583 | ||
| 
						 | 
					a9665b092b | ||
| 
						 | 
					1ad7023758 | ||
| 
						 | 
					1a7e13e166 | ||
| 
						 | 
					3a37c0ae23 | ||
| 
						 | 
					ccb3a13ce6 | ||
| 
						 | 
					94a3886455 | ||
| 
						 | 
					616d8eda41 | ||
| 
						 | 
					85bb25e628 | ||
| 
						 | 
					83a5e39065 | ||
| 
						 | 
					bd0afd8db4 | ||
| 
						 | 
					2d68ea45d8 | ||
| 
						 | 
					5f42ef8f5b | ||
| 
						 | 
					dff0145447 | ||
| 
						 | 
					8e1f95ac7d | ||
| 
						 | 
					95e7e551f6 | ||
| 
						 | 
					5afc694879 | ||
| 
						 | 
					b1c57788f3 | ||
| 
						 | 
					3d4bb3be22 | ||
| 
						 | 
					0c063f85fc | ||
| 
						 | 
					c11a1bf72a | ||
| 
						 | 
					f195502064 | ||
| 
						 | 
					4df9d94414 | ||
| 
						 | 
					9a7fc9ce3a | ||
| 
						 | 
					9fa464aa94 | ||
| 
						 | 
					d95ed06aa9 | ||
| 
						 | 
					5abe5f664a | ||
| 
						 | 
					e9e5197cea | ||
| 
						 | 
					7b4b166718 | ||
| 
						 | 
					e32641d412 | ||
| 
						 | 
					1603f64771 | ||
| 
						 | 
					c8926138d1 | ||
| 
						 | 
					ab6c8a06e0 | ||
| 
						 | 
					f35b6e90f5 | ||
| 
						 | 
					b49565308f | ||
| 
						 | 
					f8c357e4ff | ||
| 
						 | 
					4b6c240832 | ||
| 
						 | 
					022ea42265 | ||
| 
						 | 
					b54b68ac7b | ||
| 
						 | 
					1ddf2907c7 | ||
| 
						 | 
					33dc9c1f95 | ||
| 
						 | 
					f112cc14b9 | ||
| 
						 | 
					5de39884c3 | ||
| 
						 | 
					e840c109e7 | ||
| 
						 | 
					f1ce203686 | ||
| 
						 | 
					d6ccc33dec | ||
| 
						 | 
					1b2f4031e1 | ||
| 
						 | 
					64822958e6 | ||
| 
						 | 
					af59b9b94c | ||
| 
						 | 
					59ab21ed07 | ||
| 
						 | 
					edec65246a | ||
| 
						 | 
					95837043e2 | ||
| 
						 | 
					dcfb10fb31 | ||
| 
						 | 
					0553ab8181 | ||
| 
						 | 
					410dd54da7 | ||
| 
						 | 
					7b9ec9507f | ||
| 
						 | 
					4045cd5ec0 | ||
| 
						 | 
					81b6ebc0f4 | ||
| 
						 | 
					56da5a05be | ||
| 
						 | 
					c528dc53c9 | ||
| 
						 | 
					ed786290e2 | ||
| 
						 | 
					8b2861da85 | ||
| 
						 | 
					2a70465434 | ||
| 
						 | 
					d60cd937b7 | ||
| 
						 | 
					76125e196c | ||
| 
						 | 
					8219990012 | ||
| 
						 | 
					f8d09660cd | ||
| 
						 | 
					823fa6d273 | ||
| 
						 | 
					2cf45f68b0 | ||
| 
						 | 
					7950a95401 | ||
| 
						 | 
					24805e17d7 | ||
| 
						 | 
					490d46affb | ||
| 
						 | 
					d30c478378 | ||
| 
						 | 
					5b6640960a | ||
| 
						 | 
					6f543f3ede | ||
| 
						 | 
					93bcfd4e65 | ||
| 
						 | 
					1400561a5a | ||
| 
						 | 
					8dc4ac2147 | ||
| 
						 | 
					7948b0becc | ||
| 
						 | 
					72e67d3b9d | ||
| 
						 | 
					711a3a79e3 | ||
| 
						 | 
					a6a3673804 | ||
| 
						 | 
					944f9a73f4 | ||
| 
						 | 
					5ab1a10e9c | ||
| 
						 | 
					1813d2ddf7 | ||
| 
						 | 
					2827f5327a | ||
| 
						 | 
					47bb09e908 | ||
| 
						 | 
					7f21669ef2 | ||
| 
						 | 
					3a145180cc | ||
| 
						 | 
					f24d54a9c4 | ||
| 
						 | 
					9478d796a3 | ||
| 
						 | 
					00b00c6931 | ||
| 
						 | 
					e791f6ec58 | ||
| 
						 | 
					8987244758 | ||
| 
						 | 
					9b69f6faab | ||
| 
						 | 
					e7b966b9eb | ||
| 
						 | 
					e7801afed1 | ||
| 
						 | 
					929366b5ae | ||
| 
						 | 
					e1d8c5daa7 | ||
| 
						 | 
					2b44fdab2e | ||
| 
						 | 
					3e0a95bb78 | ||
| 
						 | 
					f0efa89484 | ||
| 
						 | 
					45037a39aa | ||
| 
						 | 
					31336d63ae | ||
| 
						 | 
					2c39a4381a | ||
| 
						 | 
					532624bafe | ||
| 
						 | 
					8469918306 | ||
| 
						 | 
					9646a8b346 | ||
| 
						 | 
					5e2a74fcc4 | ||
| 
						 | 
					813d7585c7 | ||
| 
						 | 
					ae55c1c144 | ||
| 
						 | 
					1a6143feba | ||
| 
						 | 
					b70a4227b3 | ||
| 
						 | 
					7d82bc81a2 | ||
| 
						 | 
					be449bdea1 | ||
| 
						 | 
					798aaf0c0a | ||
| 
						 | 
					6f2fca53ad | ||
| 
						 | 
					cd4aed6690 | ||
| 
						 | 
					fa601af722 | ||
| 
						 | 
					303b3cf41c | ||
| 
						 | 
					fc535aa086 | ||
| 
						 | 
					cd33795903 | ||
| 
						 | 
					c9d233d34a | ||
| 
						 | 
					bd192d5387 | ||
| 
						 | 
					4ac7a087c6 | ||
| 
						 | 
					2d5039184e | ||
| 
						 | 
					b1bbaebb17 | ||
| 
						 | 
					8f6997cbde | ||
| 
						 | 
					e18ecaf108 | ||
| 
						 | 
					fe67ba6d2b | ||
| 
						 | 
					e39e6c537e | ||
| 
						 | 
					4e4a899306 | ||
| 
						 | 
					9a78db6e59 | ||
| 
						 | 
					6475600afa | ||
| 
						 | 
					e450888b15 | ||
| 
						 | 
					23522a66d1 | ||
| 
						 | 
					116462a512 | ||
| 
						 | 
					217e033120 | ||
| 
						 | 
					259ac2dd77 | ||
| 
						 | 
					4ebf001d37 | ||
| 
						 | 
					5e326014cd | ||
| 
						 | 
					0b0bbffa35 | ||
| 
						 | 
					2b35432fcc | ||
| 
						 | 
					ef8a2bc4fc | ||
| 
						 | 
					96d235d9a3 | ||
| 
						 | 
					eaf51b62b9 | ||
| 
						 | 
					80994a123e | ||
| 
						 | 
					b1cd033c27 | ||
| 
						 | 
					268867311e | ||
| 
						 | 
					6840f80d21 | ||
| 
						 | 
					cac6876734 | ||
| 
						 | 
					753011c8db | ||
| 
						 | 
					2774dc390a | ||
| 
						 | 
					eb4534f735 | ||
| 
						 | 
					efb957039d | ||
| 
						 | 
					fe82ddda46 | ||
| 
						 | 
					94af496ac4 | ||
| 
						 | 
					6f17c2f140 | ||
| 
						 | 
					490c00fb30 | ||
| 
						 | 
					2d0dbd87c3 | ||
| 
						 | 
					13a5e16f35 | ||
| 
						 | 
					3d54ba1b9e | ||
| 
						 | 
					e051f904f2 | ||
| 
						 | 
					f8d94a3849 | ||
| 
						 | 
					ac691cae88 | ||
| 
						 | 
					43d0d75688 | ||
| 
						 | 
					77f34915ce | ||
| 
						 | 
					72b8993164 | ||
| 
						 | 
					6b9bd96c06 | ||
| 
						 | 
					6532f737eb | ||
| 
						 | 
					928ff54388 | ||
| 
						 | 
					95c94bf658 | ||
| 
						 | 
					7f295939d0 | ||
| 
						 | 
					aa27db6986 | ||
| 
						 | 
					4ce5fa3ea9 | ||
| 
						 | 
					ffa7c13117 | ||
| 
						 | 
					fbca7a83fc | ||
| 
						 | 
					870bacd689 | ||
| 
						 | 
					d9f39cc99b | ||
| 
						 | 
					f2e6d235f2 | ||
| 
						 | 
					baa220c1af | ||
| 
						 | 
					cabef4732d | ||
| 
						 | 
					cab90bf98a | ||
| 
						 | 
					ab449cce73 | ||
| 
						 | 
					b541537c66 | ||
| 
						 | 
					285e998fae | ||
| 
						 | 
					c503930b8d | ||
| 
						 | 
					5c6859e537 | ||
| 
						 | 
					4e376a2f1a | ||
| 
						 | 
					edd608aa76 | ||
| 
						 | 
					88d536eb3b | ||
| 
						 | 
					d567659bf4 | ||
| 
						 | 
					e0558ae541 | ||
| 
						 | 
					034f6378da | ||
| 
						 | 
					af129c499e | ||
| 
						 | 
					8b4809a898 | ||
| 
						 | 
					88d14e96ca | ||
| 
						 | 
					04d1491a6b | ||
| 
						 | 
					de16ddd5b4 | ||
| 
						 | 
					27751df6ec | ||
| 
						 | 
					cf02eb11f6 | ||
| 
						 | 
					22b8d387bc | ||
| 
						 | 
					bfd89c8078 | ||
| 
						 | 
					223c48e6b5 | ||
| 
						 | 
					7bb7550e23 | ||
| 
						 | 
					adf00f5b2e | ||
| 
						 | 
					0844c4fdb2 | ||
| 
						 | 
					38cabc4fdb | ||
| 
						 | 
					ec340e3e33 | ||
| 
						 | 
					f44f512f24 | ||
| 
						 | 
					ce0e2cc017 | ||
| 
						 | 
					b082832220 | ||
| 
						 | 
					1e5e0f9a26 | ||
| 
						 | 
					ac3ae8f775 | ||
| 
						 | 
					a51fd91db2 | ||
| 
						 | 
					d300cf4d84 | ||
| 
						 | 
					a9d0a85842 | ||
| 
						 | 
					81da4fc995 | ||
| 
						 | 
					b6ca1be1cd | ||
| 
						 | 
					20d67917c4 | ||
| 
						 | 
					915b10052c | ||
| 
						 | 
					d3516810a7 | ||
| 
						 | 
					68af9a222e | ||
| 
						 | 
					58c3bdc1a4 | ||
| 
						 | 
					72dec6cfec | ||
| 
						 | 
					8dc9f4330c | ||
| 
						 | 
					c77f77a1ce | ||
| 
						 | 
					2966ef6661 | ||
| 
						 | 
					93c53424c8 | ||
| 
						 | 
					4a2812c5e8 | ||
| 
						 | 
					4852a4930c | ||
| 
						 | 
					b555ca5baa | ||
| 
						 | 
					4a6eaf1b95 | ||
| 
						 | 
					a8bc40fe4e | ||
| 
						 | 
					1b9e26a287 | ||
| 
						 | 
					9f24645a5b | ||
| 
						 | 
					441a957d57 | ||
| 
						 | 
					adc0edc44b | ||
| 
						 | 
					4836154cef | ||
| 
						 | 
					0058e87ed5 | ||
| 
						 | 
					23903306a7 | ||
| 
						 | 
					49b9926d5a | ||
| 
						 | 
					6c50d2ee7d | ||
| 
						 | 
					9e8615ae1d | ||
| 
						 | 
					bb51c20c8b | ||
| 
						 | 
					a84af986fd | ||
| 
						 | 
					3ab3be1b6e | ||
| 
						 | 
					3ceb2bcbb9 | ||
| 
						 | 
					2457a31948 | ||
| 
						 | 
					9e1e318691 | ||
| 
						 | 
					e1132ecbe6 | ||
| 
						 | 
					ccb92f1a8a | ||
| 
						 | 
					8526fa97ce | ||
| 
						 | 
					f85c29aad8 | ||
| 
						 | 
					4677f733b2 | ||
| 
						 | 
					e82d2dc634 | ||
| 
						 | 
					b56f1e5185 | ||
| 
						 | 
					c7c942861a | ||
| 
						 | 
					a50fac0e63 | ||
| 
						 | 
					e0f56897d5 | ||
| 
						 | 
					c7dbde9f3f | ||
| 
						 | 
					8fd89d6b93 | ||
| 
						 | 
					632e951e14 | ||
| 
						 | 
					a3a2d200fa | ||
| 
						 | 
					4c2ca97d6d | ||
| 
						 | 
					11f2464a22 | ||
| 
						 | 
					291075b12f | ||
| 
						 | 
					282939c6fe | ||
| 
						 | 
					fef1fc0d32 | ||
| 
						 | 
					dc6da007ad | ||
| 
						 | 
					7be8993f94 | ||
| 
						 | 
					bad4c8967b | ||
| 
						 | 
					4dbac041f1 | ||
| 
						 | 
					dd344b65f2 | ||
| 
						 | 
					5c25c7bbfa | ||
| 
						 | 
					a6d9ccf66b | ||
| 
						 | 
					89ba66e071 | ||
| 
						 | 
					85631150ce | ||
| 
						 | 
					3654bd1b56 | ||
| 
						 | 
					237edbc9d8 | ||
| 
						 | 
					4127903183 | ||
| 
						 | 
					2ffc20dc7c | ||
| 
						 | 
					a2a446cb2f | ||
| 
						 | 
					9304055df5 | ||
| 
						 | 
					53e0c1b1a6 | ||
| 
						 | 
					4efa1e8e4c | ||
| 
						 | 
					ecba113125 | ||
| 
						 | 
					350c536f6c | ||
| 
						 | 
					a33eb9881c | ||
| 
						 | 
					bbe8aa073e | ||
| 
						 | 
					14521b418e | ||
| 
						 | 
					73982c65d2 | ||
| 
						 | 
					2eb94acb95 | ||
| 
						 | 
					6a80fb3482 | ||
| 
						 | 
					26d4c80049 | ||
| 
						 | 
					3974f30ed4 | ||
| 
						 | 
					44c246dbf2 | ||
| 
						 | 
					ef07903a51 | ||
| 
						 | 
					a7dc45997f | ||
| 
						 | 
					583c2e2f09 | ||
| 
						 | 
					90cce2ae3a | ||
| 
						 | 
					775dc07eb5 | ||
| 
						 | 
					a652db18bd | ||
| 
						 | 
					48f3feed59 | ||
| 
						 | 
					4ddb3fbbf4 | ||
| 
						 | 
					cc872ebc19 | ||
| 
						 | 
					ba46006896 | ||
| 
						 | 
					0b7e0638a9 | ||
| 
						 | 
					be49b01952 | ||
| 
						 | 
					8d0c1d5495 | ||
| 
						 | 
					2769a9ab0b | ||
| 
						 | 
					8ea5b5bbd0 | ||
| 
						 | 
					0ce49cb7ed | ||
| 
						 | 
					d802dfe86a | ||
| 
						 | 
					aabc0c08a1 | ||
| 
						 | 
					476addb9c1 | ||
| 
						 | 
					37d7a198d5 | ||
| 
						 | 
					16fe0c9be3 | ||
| 
						 | 
					f88ff705a4 | ||
| 
						 | 
					e83550f511 | ||
| 
						 | 
					fde31f0988 | ||
| 
						 | 
					d3090ac3f9 | ||
| 
						 | 
					2cf26d4fb7 | ||
| 
						 | 
					f470a131a6 | ||
| 
						 | 
					04b20b7ed2 | ||
| 
						 | 
					ff4f4abe4b | ||
| 
						 | 
					f4703aee2f | ||
| 
						 | 
					4c485994db | ||
| 
						 | 
					a921ee7b52 | ||
| 
						 | 
					f6d4a25f68 | ||
| 
						 | 
					2dfd2c642d | ||
| 
						 | 
					a2072a1fd0 | ||
| 
						 | 
					03fea9722c | ||
| 
						 | 
					a44a8cef99 | ||
| 
						 | 
					97ad165a63 | ||
| 
						 | 
					a508e73a8d | ||
| 
						 | 
					32f966b239 | ||
| 
						 | 
					60a43561e2 | ||
| 
						 | 
					a91b7d461d | ||
| 
						 | 
					8755c44d40 | ||
| 
						 | 
					5dd1cb0614 | ||
| 
						 | 
					b34bee45ca | ||
| 
						 | 
					e22fb3e7bc | ||
| 
						 | 
					6ea51f3cd7 | ||
| 
						 | 
					8e9f0a73d0 | ||
| 
						 | 
					80fbcdf2f2 | ||
| 
						 | 
					0fd9f64287 | ||
| 
						 | 
					b6175ec792 | ||
| 
						 | 
					1ee7f92ce4 | ||
| 
						 | 
					3fd65fb7d8 | ||
| 
						 | 
					ebcafe73b3 | ||
| 
						 | 
					8274bee963 | ||
| 
						 | 
					60aa975610 | ||
| 
						 | 
					28a9108257 | ||
| 
						 | 
					d1b0b08ba0 | ||
| 
						 | 
					cc7fc20251 | ||
| 
						 | 
					5ab751f5d0 | ||
| 
						 | 
					fb1ce5fd5b | ||
| 
						 | 
					fd8ea204c0 | ||
| 
						 | 
					b86674174a | ||
| 
						 | 
					69994f0114 | ||
| 
						 | 
					879c6c5711 | ||
| 
						 | 
					18f044f19d | ||
| 
						 | 
					d7b54eb835 | ||
| 
						 | 
					5eafb69bdb | ||
| 
						 | 
					a086e99bae | ||
| 
						 | 
					62056a644f | ||
| 
						 | 
					b2362bf51c | ||
| 
						 | 
					022099266e | ||
| 
						 | 
					870cea2aea | ||
| 
						 | 
					04c10e021c | ||
| 
						 | 
					d712a4e800 | ||
| 
						 | 
					d9f989c8c8 | ||
| 
						 | 
					90bb87b40e | ||
| 
						 | 
					025fa762f6 | ||
| 
						 | 
					ac510ab6a4 | ||
| 
						 | 
					65b286ca35 | ||
| 
						 | 
					cc5c53454a | ||
| 
						 | 
					f7874cad29 | ||
| 
						 | 
					84e71e1c50 | ||
| 
						 | 
					88bb054e1d | ||
| 
						 | 
					b054fbaebd | ||
| 
						 | 
					53e3c225ee | ||
| 
						 | 
					50a53d4eec | ||
| 
						 | 
					6bd1ed034a | ||
| 
						 | 
					fa491ed910 | ||
| 
						 | 
					66a1e3df69 | ||
| 
						 | 
					28497e7ee4 | ||
| 
						 | 
					87c7f403a9 | ||
| 
						 | 
					1a2c3acb3b | ||
| 
						 | 
					b54d752783 | ||
| 
						 | 
					b1328430c9 | ||
| 
						 | 
					34efa74a59 | ||
| 
						 | 
					794d08a728 | ||
| 
						 | 
					0abc999c4d | ||
| 
						 | 
					3e65062be2 | ||
| 
						 | 
					45ffb16c2a | ||
| 
						 | 
					0b8b0b7c86 | ||
| 
						 | 
					053bf49bd2 | ||
| 
						 | 
					8b08dfed38 | ||
| 
						 | 
					ba3a3553dc | ||
| 
						 | 
					6a26104724 | ||
| 
						 | 
					8b35b89f4d | ||
| 
						 | 
					31f9d4016d | ||
| 
						 | 
					bb601731ea | ||
| 
						 | 
					9a85172896 | ||
| 
						 | 
					a0eb52bee1 | ||
| 
						 | 
					6235a8d969 | ||
| 
						 | 
					0d6a87ed7a | ||
| 
						 | 
					b6241b3c89 | ||
| 
						 | 
					1e14f8d4c7 | ||
| 
						 | 
					bc5954fe2d | ||
| 
						 | 
					02f6894af5 | ||
| 
						 | 
					76576cd1e2 | ||
| 
						 | 
					997672ba9a | ||
| 
						 | 
					ec1f42a154 | ||
| 
						 | 
					aa1c3bb46d | ||
| 
						 | 
					95f0714ff8 | ||
| 
						 | 
					c050619b36 | ||
| 
						 | 
					58085dbbf6 | ||
| 
						 | 
					546572da04 | ||
| 
						 | 
					005536cc28 | ||
| 
						 | 
					3d5b6aa3b0 | ||
| 
						 | 
					f8d883355d | ||
| 
						 | 
					c23df41d83 | ||
| 
						 | 
					8e7b261984 | ||
| 
						 | 
					08e3d034ef | ||
| 
						 | 
					2f869f89ff | ||
| 
						 | 
					0f310a5001 | ||
| 
						 | 
					ad1abee441 | ||
| 
						 | 
					669709f80e | ||
| 
						 | 
					ea409d0374 | ||
| 
						 | 
					eaaa1a1fd4 | ||
| 
						 | 
					78b4851da1 | ||
| 
						 | 
					38c47803dd | ||
| 
						 | 
					455663ba5e | ||
| 
						 | 
					efb5d9a403 | ||
| 
						 | 
					b1a5208e6b | ||
| 
						 | 
					e6dacd92ec | ||
| 
						 | 
					952b3a2c0f | ||
| 
						 | 
					721f9bca84 | ||
| 
						 | 
					ad4d5fabf8 | ||
| 
						 | 
					aa860990ad | ||
| 
						 | 
					0fa9135d9f | ||
| 
						 | 
					8f0114a4dd | ||
| 
						 | 
					5980c2977b | ||
| 
						 | 
					19f8d71508 | ||
| 
						 | 
					6f3bccd911 | ||
| 
						 | 
					96f81a5c4a | ||
| 
						 | 
					ca05d1b59c | ||
| 
						 | 
					895dc5e530 | ||
| 
						 | 
					bcc6ca6fd1 | ||
| 
						 | 
					d538241a58 | ||
| 
						 | 
					71b4b2ffa9 | ||
| 
						 | 
					65b4a63f56 | ||
| 
						 | 
					ecbee01f4b | ||
| 
						 | 
					34fed76a35 | ||
| 
						 | 
					0adf0cfde7 | ||
| 
						 | 
					d6c456db85 | ||
| 
						 | 
					36c88343d3 | ||
| 
						 | 
					2360e5ce12 | ||
| 
						 | 
					d445eac162 | ||
| 
						 | 
					e0a6d20e20 | ||
| 
						 | 
					3bb979b897 | ||
| 
						 | 
					010daec776 | ||
| 
						 | 
					e2b0ad8429 | ||
| 
						 | 
					6eed95103a | ||
| 
						 | 
					4eb2a165e8 | ||
| 
						 | 
					b7fc1e45b5 | ||
| 
						 | 
					3395a2fa9e | ||
| 
						 | 
					a564a54e21 | ||
| 
						 | 
					92186dc3d3 | ||
| 
						 | 
					7bd6507eec | ||
| 
						 | 
					d4cc810de3 | ||
| 
						 | 
					bea7bbee1b | ||
| 
						 | 
					fe64570d5d | ||
| 
						 | 
					df6ad8d8d6 | ||
| 
						 | 
					f8e1fc32de | ||
| 
						 | 
					8c6d56f1f9 | ||
| 
						 | 
					1841c8ee6a | ||
| 
						 | 
					70793595fe | ||
| 
						 | 
					28a8e1602d | ||
| 
						 | 
					cce05b9138 | ||
| 
						 | 
					72a7fd4dc7 | ||
| 
						 | 
					9a6a476cf5 | ||
| 
						 | 
					5d0efedd2d | ||
| 
						 | 
					a426818a78 | ||
| 
						 | 
					bfe413d8bd | ||
| 
						 | 
					dbbd20646f | ||
| 
						 | 
					b8fe4deb13 | ||
| 
						 | 
					332a016e3c | ||
| 
						 | 
					3738e4bdc0 | ||
| 
						 | 
					3201d2dafa | ||
| 
						 | 
					0a1e002ca4 | ||
| 
						 | 
					9195bb64d4 | ||
| 
						 | 
					11ee547a0e | ||
| 
						 | 
					147de35d41 | ||
| 
						 | 
					e16e9b91ae | ||
| 
						 | 
					f9cde0646f | ||
| 
						 | 
					195233ed5c | ||
| 
						 | 
					048e654514 | ||
| 
						 | 
					dfbd45142d | 
							
								
								
									
										17
									
								
								.cvsignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								.cvsignore
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
compile
 | 
			
		||||
config.log
 | 
			
		||||
Makefile
 | 
			
		||||
libtool
 | 
			
		||||
Makefile.in
 | 
			
		||||
aclocal.m4
 | 
			
		||||
aclocal.m4.bak
 | 
			
		||||
configure
 | 
			
		||||
config.h
 | 
			
		||||
config.status
 | 
			
		||||
curl-config
 | 
			
		||||
autom4te.cache
 | 
			
		||||
depcomp
 | 
			
		||||
config.guess
 | 
			
		||||
config.sub
 | 
			
		||||
ltmain.sh
 | 
			
		||||
libcurl.pc
 | 
			
		||||
							
								
								
									
										21
									
								
								COPYING
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								COPYING
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
COPYRIGHT AND PERMISSION NOTICE
 | 
			
		||||
 | 
			
		||||
Copyright (c) 1996 - 2008, Daniel Stenberg, <daniel@haxx.se>.
 | 
			
		||||
 | 
			
		||||
All rights reserved.
 | 
			
		||||
 | 
			
		||||
Permission to use, copy, modify, and distribute this software for any purpose
 | 
			
		||||
with or without fee is hereby granted, provided that the above copyright
 | 
			
		||||
notice and this permission notice appear in all copies.
 | 
			
		||||
 | 
			
		||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
 | 
			
		||||
NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
 | 
			
		||||
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
 | 
			
		||||
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
 | 
			
		||||
OR OTHER DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
Except as contained in this notice, the name of a copyright holder shall not
 | 
			
		||||
be used in advertising or otherwise to promote the sale, use or other dealings
 | 
			
		||||
in this Software without prior written authorization of the copyright holder.
 | 
			
		||||
							
								
								
									
										71
									
								
								CVS-INFO
									
									
									
									
									
								
							
							
						
						
									
										71
									
								
								CVS-INFO
									
									
									
									
									
								
							@@ -1,22 +1,67 @@
 | 
			
		||||
This file is only present in the CVS - never in release archives.
 | 
			
		||||
                                  _   _ ____  _     
 | 
			
		||||
                              ___| | | |  _ \| |    
 | 
			
		||||
                             / __| | | | |_) | |    
 | 
			
		||||
                            | (__| |_| |  _ <| |___ 
 | 
			
		||||
                             \___|\___/|_| \_\_____|
 | 
			
		||||
 | 
			
		||||
This contains information about other files and things that the CVS repository
 | 
			
		||||
keeps in its inner sanctum.
 | 
			
		||||
CVS-INFO
 | 
			
		||||
 | 
			
		||||
CHANGES.0     contains ancient changes.
 | 
			
		||||
This file is only present in the CVS - never in release archives. It contains
 | 
			
		||||
information about other files and things that the CVS repository keeps in its
 | 
			
		||||
inner sanctum.
 | 
			
		||||
 | 
			
		||||
memanalyze.pl is for analyzing the output generated by curl if -DMALLOCDEBUG
 | 
			
		||||
              is used when compiling
 | 
			
		||||
Compile and build instructions follow below.
 | 
			
		||||
 | 
			
		||||
Makefile.dist is included as the root Makefile in distribution archives
 | 
			
		||||
  CHANGES.0     contains ancient changes
 | 
			
		||||
  CHANGES       contains the most recent changes
 | 
			
		||||
 | 
			
		||||
perl/         is a subdirectory with various perl scripts
 | 
			
		||||
  Makefile.dist is included as the root Makefile in distribution archives
 | 
			
		||||
 | 
			
		||||
To build after having extracted everything from CVS, do this:
 | 
			
		||||
  perl/         is a subdirectory with various perl scripts
 | 
			
		||||
 | 
			
		||||
automake
 | 
			
		||||
aclocal
 | 
			
		||||
autoheader
 | 
			
		||||
autoconf
 | 
			
		||||
To build in environments that support configure, after having extracted
 | 
			
		||||
everything from CVS, do this:
 | 
			
		||||
 | 
			
		||||
./buildconf
 | 
			
		||||
./configure
 | 
			
		||||
make
 | 
			
		||||
 | 
			
		||||
  Daniel uses a ./configure line similar to this for easier development:
 | 
			
		||||
 | 
			
		||||
  ./configure --disable-shared --enable-debug --enable-maintainer-mode
 | 
			
		||||
 | 
			
		||||
In environments that don't support configure (i.e. Microsoft), do this:
 | 
			
		||||
 | 
			
		||||
buildconf.bat
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
REQUIREMENTS
 | 
			
		||||
 | 
			
		||||
 For buildconf (not buildconf.bat) to work, you need the following software
 | 
			
		||||
installed:
 | 
			
		||||
 | 
			
		||||
 o autoconf 2.57  (or later)
 | 
			
		||||
 o automake 1.7   (or later)
 | 
			
		||||
 o libtool  1.4.2 (or later)
 | 
			
		||||
 o GNU m4 (required by autoconf)
 | 
			
		||||
 | 
			
		||||
 o nroff + perl
 | 
			
		||||
 | 
			
		||||
   If you don't have nroff and perl and you for some reason don't want to
 | 
			
		||||
   install them, you can rename the source file src/hugehelp.c.cvs to
 | 
			
		||||
   src/hugehelp.c and avoid having to generate this file. This will give you
 | 
			
		||||
   a stubbed version of the file that doesn't contain actual content.
 | 
			
		||||
 | 
			
		||||
MAC OS X
 | 
			
		||||
 | 
			
		||||
 With Mac OS X 10.2 and the associated Developer Tools, the installed versions
 | 
			
		||||
 of the build tools are adequate.  For Mac OS X 10.1 users, Guido Neitzer
 | 
			
		||||
 wrote the following step-by-step guide:
 | 
			
		||||
 | 
			
		||||
 1. Install fink (http://fink.sourceforge.net)
 | 
			
		||||
 2. Update fink to the newest version (with the installed fink)
 | 
			
		||||
 3. Install the latest version of autoconf, automake and m4 with fink
 | 
			
		||||
 4. Install version 1.4.1 of libtool - you find it in the "unstable" section
 | 
			
		||||
    (read the manual to see how to get unstable versions)
 | 
			
		||||
 5. Get cURL from the cvs
 | 
			
		||||
 6. Build cURL with "./buildconf", "./configure", "make", "sudo make install"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										25
									
								
								LEGAL
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								LEGAL
									
									
									
									
									
								
							@@ -1,25 +0,0 @@
 | 
			
		||||
 Copyright (C) 2000, Daniel Stenberg, <daniel@haxx.se>, et al.
 | 
			
		||||
 | 
			
		||||
 Everyone is permitted to copy and distribute verbatim copies of this license
 | 
			
		||||
 document, but changing it is not allowed.
 | 
			
		||||
 | 
			
		||||
 In order to be useful for every potential user, the curl and libcurl are
 | 
			
		||||
 dual-licensed under the MPL and the MIT/X-derivate licenses.
 | 
			
		||||
 | 
			
		||||
 You may opt to use, copy, modify, merge, publish, distribute and/or sell
 | 
			
		||||
 copies of the Software, and permit persons to whom the Software is furnished
 | 
			
		||||
 to do so, under the terms of the MPL or the MIT/X-derivate licenses. You may
 | 
			
		||||
 pick one of these licenses. The files MITX.txt and MPL-1.1.txt contain the
 | 
			
		||||
 license texts.
 | 
			
		||||
 | 
			
		||||
 As a courtesy to the open-source and free software community, we ask you to
 | 
			
		||||
 dual-license any modifications that you make as well, under the terms of this
 | 
			
		||||
 document.
 | 
			
		||||
 | 
			
		||||
 Please remember to always keep the licensing information included in
 | 
			
		||||
 individual source files up-to-date, so as to avoid misleading anyone as to
 | 
			
		||||
 the status of these files.
 | 
			
		||||
 | 
			
		||||
 I will use a submission policy according to which I will only enter
 | 
			
		||||
 contributions into the CVS tree if the contributor agrees to both licenses
 | 
			
		||||
 and this dual-license approach.
 | 
			
		||||
							
								
								
									
										28
									
								
								MITX.txt
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								MITX.txt
									
									
									
									
									
								
							@@ -1,28 +0,0 @@
 | 
			
		||||
COPYRIGHT AND PERMISSION NOTICE
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2000, Daniel Stenberg, <daniel@haxx.se>.
 | 
			
		||||
 | 
			
		||||
All rights reserved.
 | 
			
		||||
 | 
			
		||||
Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
in the Software without restriction, including without limitation the rights
 | 
			
		||||
to use, copy, modify, merge, publish, distribute, and/or sell copies of the
 | 
			
		||||
Software, and to permit persons to whom the Software is furnished to do so,
 | 
			
		||||
provided that the above copyright notice(s) and this permission notice appear
 | 
			
		||||
in all copies of the Software and that both the above copyright notice(s) and
 | 
			
		||||
this permission notice appear in supporting documentation.
 | 
			
		||||
 | 
			
		||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
 | 
			
		||||
NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE
 | 
			
		||||
LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY
 | 
			
		||||
DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 | 
			
		||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
 | 
			
		||||
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 | 
			
		||||
 | 
			
		||||
Except as contained in this notice, the name of a copyright holder shall not
 | 
			
		||||
be used in advertising or otherwise to promote the sale, use or other dealings
 | 
			
		||||
in this Software without prior written authorization of the copyright holder.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										470
									
								
								MPL-1.1.txt
									
									
									
									
									
								
							
							
						
						
									
										470
									
								
								MPL-1.1.txt
									
									
									
									
									
								
							@@ -1,470 +0,0 @@
 | 
			
		||||
                          MOZILLA PUBLIC LICENSE
 | 
			
		||||
                                Version 1.1
 | 
			
		||||
 | 
			
		||||
                              ---------------
 | 
			
		||||
 | 
			
		||||
1. Definitions.
 | 
			
		||||
 | 
			
		||||
     1.0.1. "Commercial Use" means distribution or otherwise making the
 | 
			
		||||
     Covered Code available to a third party.
 | 
			
		||||
 | 
			
		||||
     1.1. "Contributor" means each entity that creates or contributes to
 | 
			
		||||
     the creation of Modifications.
 | 
			
		||||
 | 
			
		||||
     1.2. "Contributor Version" means the combination of the Original
 | 
			
		||||
     Code, prior Modifications used by a Contributor, and the Modifications
 | 
			
		||||
     made by that particular Contributor.
 | 
			
		||||
 | 
			
		||||
     1.3. "Covered Code" means the Original Code or Modifications or the
 | 
			
		||||
     combination of the Original Code and Modifications, in each case
 | 
			
		||||
     including portions thereof.
 | 
			
		||||
 | 
			
		||||
     1.4. "Electronic Distribution Mechanism" means a mechanism generally
 | 
			
		||||
     accepted in the software development community for the electronic
 | 
			
		||||
     transfer of data.
 | 
			
		||||
 | 
			
		||||
     1.5. "Executable" means Covered Code in any form other than Source
 | 
			
		||||
     Code.
 | 
			
		||||
 | 
			
		||||
     1.6. "Initial Developer" means the individual or entity identified
 | 
			
		||||
     as the Initial Developer in the Source Code notice required by Exhibit
 | 
			
		||||
     A.
 | 
			
		||||
 | 
			
		||||
     1.7. "Larger Work" means a work which combines Covered Code or
 | 
			
		||||
     portions thereof with code not governed by the terms of this License.
 | 
			
		||||
 | 
			
		||||
     1.8. "License" means this document.
 | 
			
		||||
 | 
			
		||||
     1.8.1. "Licensable" means having the right to grant, to the maximum
 | 
			
		||||
     extent possible, whether at the time of the initial grant or
 | 
			
		||||
     subsequently acquired, any and all of the rights conveyed herein.
 | 
			
		||||
 | 
			
		||||
     1.9. "Modifications" means any addition to or deletion from the
 | 
			
		||||
     substance or structure of either the Original Code or any previous
 | 
			
		||||
     Modifications. When Covered Code is released as a series of files, a
 | 
			
		||||
     Modification is:
 | 
			
		||||
          A. Any addition to or deletion from the contents of a file
 | 
			
		||||
          containing Original Code or previous Modifications.
 | 
			
		||||
 | 
			
		||||
          B. Any new file that contains any part of the Original Code or
 | 
			
		||||
          previous Modifications.
 | 
			
		||||
 | 
			
		||||
     1.10. "Original Code" means Source Code of computer software code
 | 
			
		||||
     which is described in the Source Code notice required by Exhibit A as
 | 
			
		||||
     Original Code, and which, at the time of its release under this
 | 
			
		||||
     License is not already Covered Code governed by this License.
 | 
			
		||||
 | 
			
		||||
     1.10.1. "Patent Claims" means any patent claim(s), now owned or
 | 
			
		||||
     hereafter acquired, including without limitation,  method, process,
 | 
			
		||||
     and apparatus claims, in any patent Licensable by grantor.
 | 
			
		||||
 | 
			
		||||
     1.11. "Source Code" means the preferred form of the Covered Code for
 | 
			
		||||
     making modifications to it, including all modules it contains, plus
 | 
			
		||||
     any associated interface definition files, scripts used to control
 | 
			
		||||
     compilation and installation of an Executable, or source code
 | 
			
		||||
     differential comparisons against either the Original Code or another
 | 
			
		||||
     well known, available Covered Code of the Contributor's choice. The
 | 
			
		||||
     Source Code can be in a compressed or archival form, provided the
 | 
			
		||||
     appropriate decompression or de-archiving software is widely available
 | 
			
		||||
     for no charge.
 | 
			
		||||
 | 
			
		||||
     1.12. "You" (or "Your")  means an individual or a legal entity
 | 
			
		||||
     exercising rights under, and complying with all of the terms of, this
 | 
			
		||||
     License or a future version of this License issued under Section 6.1.
 | 
			
		||||
     For legal entities, "You" includes any entity which controls, is
 | 
			
		||||
     controlled by, or is under common control with You. For purposes of
 | 
			
		||||
     this definition, "control" means (a) the power, direct or indirect,
 | 
			
		||||
     to cause the direction or management of such entity, whether by
 | 
			
		||||
     contract or otherwise, or (b) ownership of more than fifty percent
 | 
			
		||||
     (50%) of the outstanding shares or beneficial ownership of such
 | 
			
		||||
     entity.
 | 
			
		||||
 | 
			
		||||
2. Source Code License.
 | 
			
		||||
 | 
			
		||||
     2.1. The Initial Developer Grant.
 | 
			
		||||
     The Initial Developer hereby grants You a world-wide, royalty-free,
 | 
			
		||||
     non-exclusive license, subject to third party intellectual property
 | 
			
		||||
     claims:
 | 
			
		||||
          (a)  under intellectual property rights (other than patent or
 | 
			
		||||
          trademark) Licensable by Initial Developer to use, reproduce,
 | 
			
		||||
          modify, display, perform, sublicense and distribute the Original
 | 
			
		||||
          Code (or portions thereof) with or without Modifications, and/or
 | 
			
		||||
          as part of a Larger Work; and
 | 
			
		||||
 | 
			
		||||
          (b) under Patents Claims infringed by the making, using or
 | 
			
		||||
          selling of Original Code, to make, have made, use, practice,
 | 
			
		||||
          sell, and offer for sale, and/or otherwise dispose of the
 | 
			
		||||
          Original Code (or portions thereof).
 | 
			
		||||
 | 
			
		||||
          (c) the licenses granted in this Section 2.1(a) and (b) are
 | 
			
		||||
          effective on the date Initial Developer first distributes
 | 
			
		||||
          Original Code under the terms of this License.
 | 
			
		||||
 | 
			
		||||
          (d) Notwithstanding Section 2.1(b) above, no patent license is
 | 
			
		||||
          granted: 1) for code that You delete from the Original Code; 2)
 | 
			
		||||
          separate from the Original Code;  or 3) for infringements caused
 | 
			
		||||
          by: i) the modification of the Original Code or ii) the
 | 
			
		||||
          combination of the Original Code with other software or devices.
 | 
			
		||||
 | 
			
		||||
     2.2. Contributor Grant.
 | 
			
		||||
     Subject to third party intellectual property claims, each Contributor
 | 
			
		||||
     hereby grants You a world-wide, royalty-free, non-exclusive license
 | 
			
		||||
 | 
			
		||||
          (a)  under intellectual property rights (other than patent or
 | 
			
		||||
          trademark) Licensable by Contributor, to use, reproduce, modify,
 | 
			
		||||
          display, perform, sublicense and distribute the Modifications
 | 
			
		||||
          created by such Contributor (or portions thereof) either on an
 | 
			
		||||
          unmodified basis, with other Modifications, as Covered Code
 | 
			
		||||
          and/or as part of a Larger Work; and
 | 
			
		||||
 | 
			
		||||
          (b) under Patent Claims infringed by the making, using, or
 | 
			
		||||
          selling of  Modifications made by that Contributor either alone
 | 
			
		||||
          and/or in combination with its Contributor Version (or portions
 | 
			
		||||
          of such combination), to make, use, sell, offer for sale, have
 | 
			
		||||
          made, and/or otherwise dispose of: 1) Modifications made by that
 | 
			
		||||
          Contributor (or portions thereof); and 2) the combination of
 | 
			
		||||
          Modifications made by that Contributor with its Contributor
 | 
			
		||||
          Version (or portions of such combination).
 | 
			
		||||
 | 
			
		||||
          (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
 | 
			
		||||
          effective on the date Contributor first makes Commercial Use of
 | 
			
		||||
          the Covered Code.
 | 
			
		||||
 | 
			
		||||
          (d)    Notwithstanding Section 2.2(b) above, no patent license is
 | 
			
		||||
          granted: 1) for any code that Contributor has deleted from the
 | 
			
		||||
          Contributor Version; 2)  separate from the Contributor Version;
 | 
			
		||||
          3)  for infringements caused by: i) third party modifications of
 | 
			
		||||
          Contributor Version or ii)  the combination of Modifications made
 | 
			
		||||
          by that Contributor with other software  (except as part of the
 | 
			
		||||
          Contributor Version) or other devices; or 4) under Patent Claims
 | 
			
		||||
          infringed by Covered Code in the absence of Modifications made by
 | 
			
		||||
          that Contributor.
 | 
			
		||||
 | 
			
		||||
3. Distribution Obligations.
 | 
			
		||||
 | 
			
		||||
     3.1. Application of License.
 | 
			
		||||
     The Modifications which You create or to which You contribute are
 | 
			
		||||
     governed by the terms of this License, including without limitation
 | 
			
		||||
     Section 2.2. The Source Code version of Covered Code may be
 | 
			
		||||
     distributed only under the terms of this License or a future version
 | 
			
		||||
     of this License released under Section 6.1, and You must include a
 | 
			
		||||
     copy of this License with every copy of the Source Code You
 | 
			
		||||
     distribute. You may not offer or impose any terms on any Source Code
 | 
			
		||||
     version that alters or restricts the applicable version of this
 | 
			
		||||
     License or the recipients' rights hereunder. However, You may include
 | 
			
		||||
     an additional document offering the additional rights described in
 | 
			
		||||
     Section 3.5.
 | 
			
		||||
 | 
			
		||||
     3.2. Availability of Source Code.
 | 
			
		||||
     Any Modification which You create or to which You contribute must be
 | 
			
		||||
     made available in Source Code form under the terms of this License
 | 
			
		||||
     either on the same media as an Executable version or via an accepted
 | 
			
		||||
     Electronic Distribution Mechanism to anyone to whom you made an
 | 
			
		||||
     Executable version available; and if made available via Electronic
 | 
			
		||||
     Distribution Mechanism, must remain available for at least twelve (12)
 | 
			
		||||
     months after the date it initially became available, or at least six
 | 
			
		||||
     (6) months after a subsequent version of that particular Modification
 | 
			
		||||
     has been made available to such recipients. You are responsible for
 | 
			
		||||
     ensuring that the Source Code version remains available even if the
 | 
			
		||||
     Electronic Distribution Mechanism is maintained by a third party.
 | 
			
		||||
 | 
			
		||||
     3.3. Description of Modifications.
 | 
			
		||||
     You must cause all Covered Code to which You contribute to contain a
 | 
			
		||||
     file documenting the changes You made to create that Covered Code and
 | 
			
		||||
     the date of any change. You must include a prominent statement that
 | 
			
		||||
     the Modification is derived, directly or indirectly, from Original
 | 
			
		||||
     Code provided by the Initial Developer and including the name of the
 | 
			
		||||
     Initial Developer in (a) the Source Code, and (b) in any notice in an
 | 
			
		||||
     Executable version or related documentation in which You describe the
 | 
			
		||||
     origin or ownership of the Covered Code.
 | 
			
		||||
 | 
			
		||||
     3.4. Intellectual Property Matters
 | 
			
		||||
          (a) Third Party Claims.
 | 
			
		||||
          If Contributor has knowledge that a license under a third party's
 | 
			
		||||
          intellectual property rights is required to exercise the rights
 | 
			
		||||
          granted by such Contributor under Sections 2.1 or 2.2,
 | 
			
		||||
          Contributor must include a text file with the Source Code
 | 
			
		||||
          distribution titled "LEGAL" which describes the claim and the
 | 
			
		||||
          party making the claim in sufficient detail that a recipient will
 | 
			
		||||
          know whom to contact. If Contributor obtains such knowledge after
 | 
			
		||||
          the Modification is made available as described in Section 3.2,
 | 
			
		||||
          Contributor shall promptly modify the LEGAL file in all copies
 | 
			
		||||
          Contributor makes available thereafter and shall take other steps
 | 
			
		||||
          (such as notifying appropriate mailing lists or newsgroups)
 | 
			
		||||
          reasonably calculated to inform those who received the Covered
 | 
			
		||||
          Code that new knowledge has been obtained.
 | 
			
		||||
 | 
			
		||||
          (b) Contributor APIs.
 | 
			
		||||
          If Contributor's Modifications include an application programming
 | 
			
		||||
          interface and Contributor has knowledge of patent licenses which
 | 
			
		||||
          are reasonably necessary to implement that API, Contributor must
 | 
			
		||||
          also include this information in the LEGAL file.
 | 
			
		||||
 | 
			
		||||
               (c)    Representations.
 | 
			
		||||
          Contributor represents that, except as disclosed pursuant to
 | 
			
		||||
          Section 3.4(a) above, Contributor believes that Contributor's
 | 
			
		||||
          Modifications are Contributor's original creation(s) and/or
 | 
			
		||||
          Contributor has sufficient rights to grant the rights conveyed by
 | 
			
		||||
          this License.
 | 
			
		||||
 | 
			
		||||
     3.5. Required Notices.
 | 
			
		||||
     You must duplicate the notice in Exhibit A in each file of the Source
 | 
			
		||||
     Code.  If it is not possible to put such notice in a particular Source
 | 
			
		||||
     Code file due to its structure, then You must include such notice in a
 | 
			
		||||
     location (such as a relevant directory) where a user would be likely
 | 
			
		||||
     to look for such a notice.  If You created one or more Modification(s)
 | 
			
		||||
     You may add your name as a Contributor to the notice described in
 | 
			
		||||
     Exhibit A.  You must also duplicate this License in any documentation
 | 
			
		||||
     for the Source Code where You describe recipients' rights or ownership
 | 
			
		||||
     rights relating to Covered Code.  You may choose to offer, and to
 | 
			
		||||
     charge a fee for, warranty, support, indemnity or liability
 | 
			
		||||
     obligations to one or more recipients of Covered Code. However, You
 | 
			
		||||
     may do so only on Your own behalf, and not on behalf of the Initial
 | 
			
		||||
     Developer or any Contributor. You must make it absolutely clear than
 | 
			
		||||
     any such warranty, support, indemnity or liability obligation is
 | 
			
		||||
     offered by You alone, and You hereby agree to indemnify the Initial
 | 
			
		||||
     Developer and every Contributor for any liability incurred by the
 | 
			
		||||
     Initial Developer or such Contributor as a result of warranty,
 | 
			
		||||
     support, indemnity or liability terms You offer.
 | 
			
		||||
 | 
			
		||||
     3.6. Distribution of Executable Versions.
 | 
			
		||||
     You may distribute Covered Code in Executable form only if the
 | 
			
		||||
     requirements of Section 3.1-3.5 have been met for that Covered Code,
 | 
			
		||||
     and if You include a notice stating that the Source Code version of
 | 
			
		||||
     the Covered Code is available under the terms of this License,
 | 
			
		||||
     including a description of how and where You have fulfilled the
 | 
			
		||||
     obligations of Section 3.2. The notice must be conspicuously included
 | 
			
		||||
     in any notice in an Executable version, related documentation or
 | 
			
		||||
     collateral in which You describe recipients' rights relating to the
 | 
			
		||||
     Covered Code. You may distribute the Executable version of Covered
 | 
			
		||||
     Code or ownership rights under a license of Your choice, which may
 | 
			
		||||
     contain terms different from this License, provided that You are in
 | 
			
		||||
     compliance with the terms of this License and that the license for the
 | 
			
		||||
     Executable version does not attempt to limit or alter the recipient's
 | 
			
		||||
     rights in the Source Code version from the rights set forth in this
 | 
			
		||||
     License. If You distribute the Executable version under a different
 | 
			
		||||
     license You must make it absolutely clear that any terms which differ
 | 
			
		||||
     from this License are offered by You alone, not by the Initial
 | 
			
		||||
     Developer or any Contributor. You hereby agree to indemnify the
 | 
			
		||||
     Initial Developer and every Contributor for any liability incurred by
 | 
			
		||||
     the Initial Developer or such Contributor as a result of any such
 | 
			
		||||
     terms You offer.
 | 
			
		||||
 | 
			
		||||
     3.7. Larger Works.
 | 
			
		||||
     You may create a Larger Work by combining Covered Code with other code
 | 
			
		||||
     not governed by the terms of this License and distribute the Larger
 | 
			
		||||
     Work as a single product. In such a case, You must make sure the
 | 
			
		||||
     requirements of this License are fulfilled for the Covered Code.
 | 
			
		||||
 | 
			
		||||
4. Inability to Comply Due to Statute or Regulation.
 | 
			
		||||
 | 
			
		||||
     If it is impossible for You to comply with any of the terms of this
 | 
			
		||||
     License with respect to some or all of the Covered Code due to
 | 
			
		||||
     statute, judicial order, or regulation then You must: (a) comply with
 | 
			
		||||
     the terms of this License to the maximum extent possible; and (b)
 | 
			
		||||
     describe the limitations and the code they affect. Such description
 | 
			
		||||
     must be included in the LEGAL file described in Section 3.4 and must
 | 
			
		||||
     be included with all distributions of the Source Code. Except to the
 | 
			
		||||
     extent prohibited by statute or regulation, such description must be
 | 
			
		||||
     sufficiently detailed for a recipient of ordinary skill to be able to
 | 
			
		||||
     understand it.
 | 
			
		||||
 | 
			
		||||
5. Application of this License.
 | 
			
		||||
 | 
			
		||||
     This License applies to code to which the Initial Developer has
 | 
			
		||||
     attached the notice in Exhibit A and to related Covered Code.
 | 
			
		||||
 | 
			
		||||
6. Versions of the License.
 | 
			
		||||
 | 
			
		||||
     6.1. New Versions.
 | 
			
		||||
     Netscape Communications Corporation ("Netscape") may publish revised
 | 
			
		||||
     and/or new versions of the License from time to time. Each version
 | 
			
		||||
     will be given a distinguishing version number.
 | 
			
		||||
 | 
			
		||||
     6.2. Effect of New Versions.
 | 
			
		||||
     Once Covered Code has been published under a particular version of the
 | 
			
		||||
     License, You may always continue to use it under the terms of that
 | 
			
		||||
     version. You may also choose to use such Covered Code under the terms
 | 
			
		||||
     of any subsequent version of the License published by Netscape. No one
 | 
			
		||||
     other than Netscape has the right to modify the terms applicable to
 | 
			
		||||
     Covered Code created under this License.
 | 
			
		||||
 | 
			
		||||
     6.3. Derivative Works.
 | 
			
		||||
     If You create or use a modified version of this License (which you may
 | 
			
		||||
     only do in order to apply it to code which is not already Covered Code
 | 
			
		||||
     governed by this License), You must (a) rename Your license so that
 | 
			
		||||
     the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
 | 
			
		||||
     "MPL", "NPL" or any confusingly similar phrase do not appear in your
 | 
			
		||||
     license (except to note that your license differs from this License)
 | 
			
		||||
     and (b) otherwise make it clear that Your version of the license
 | 
			
		||||
     contains terms which differ from the Mozilla Public License and
 | 
			
		||||
     Netscape Public License. (Filling in the name of the Initial
 | 
			
		||||
     Developer, Original Code or Contributor in the notice described in
 | 
			
		||||
     Exhibit A shall not of themselves be deemed to be modifications of
 | 
			
		||||
     this License.)
 | 
			
		||||
 | 
			
		||||
7. DISCLAIMER OF WARRANTY.
 | 
			
		||||
 | 
			
		||||
     COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
 | 
			
		||||
     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
 | 
			
		||||
     WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
 | 
			
		||||
     DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
 | 
			
		||||
     THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
 | 
			
		||||
     IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
 | 
			
		||||
     YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
 | 
			
		||||
     COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
 | 
			
		||||
     OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
 | 
			
		||||
     ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
 | 
			
		||||
 | 
			
		||||
8. TERMINATION.
 | 
			
		||||
 | 
			
		||||
     8.1.  This License and the rights granted hereunder will terminate
 | 
			
		||||
     automatically if You fail to comply with terms herein and fail to cure
 | 
			
		||||
     such breach within 30 days of becoming aware of the breach. All
 | 
			
		||||
     sublicenses to the Covered Code which are properly granted shall
 | 
			
		||||
     survive any termination of this License. Provisions which, by their
 | 
			
		||||
     nature, must remain in effect beyond the termination of this License
 | 
			
		||||
     shall survive.
 | 
			
		||||
 | 
			
		||||
     8.2.  If You initiate litigation by asserting a patent infringement
 | 
			
		||||
     claim (excluding declatory judgment actions) against Initial Developer
 | 
			
		||||
     or a Contributor (the Initial Developer or Contributor against whom
 | 
			
		||||
     You file such action is referred to as "Participant")  alleging that:
 | 
			
		||||
 | 
			
		||||
     (a)  such Participant's Contributor Version directly or indirectly
 | 
			
		||||
     infringes any patent, then any and all rights granted by such
 | 
			
		||||
     Participant to You under Sections 2.1 and/or 2.2 of this License
 | 
			
		||||
     shall, upon 60 days notice from Participant terminate prospectively,
 | 
			
		||||
     unless if within 60 days after receipt of notice You either: (i)
 | 
			
		||||
     agree in writing to pay Participant a mutually agreeable reasonable
 | 
			
		||||
     royalty for Your past and future use of Modifications made by such
 | 
			
		||||
     Participant, or (ii) withdraw Your litigation claim with respect to
 | 
			
		||||
     the Contributor Version against such Participant.  If within 60 days
 | 
			
		||||
     of notice, a reasonable royalty and payment arrangement are not
 | 
			
		||||
     mutually agreed upon in writing by the parties or the litigation claim
 | 
			
		||||
     is not withdrawn, the rights granted by Participant to You under
 | 
			
		||||
     Sections 2.1 and/or 2.2 automatically terminate at the expiration of
 | 
			
		||||
     the 60 day notice period specified above.
 | 
			
		||||
 | 
			
		||||
     (b)  any software, hardware, or device, other than such Participant's
 | 
			
		||||
     Contributor Version, directly or indirectly infringes any patent, then
 | 
			
		||||
     any rights granted to You by such Participant under Sections 2.1(b)
 | 
			
		||||
     and 2.2(b) are revoked effective as of the date You first made, used,
 | 
			
		||||
     sold, distributed, or had made, Modifications made by that
 | 
			
		||||
     Participant.
 | 
			
		||||
 | 
			
		||||
     8.3.  If You assert a patent infringement claim against Participant
 | 
			
		||||
     alleging that such Participant's Contributor Version directly or
 | 
			
		||||
     indirectly infringes any patent where such claim is resolved (such as
 | 
			
		||||
     by license or settlement) prior to the initiation of patent
 | 
			
		||||
     infringement litigation, then the reasonable value of the licenses
 | 
			
		||||
     granted by such Participant under Sections 2.1 or 2.2 shall be taken
 | 
			
		||||
     into account in determining the amount or value of any payment or
 | 
			
		||||
     license.
 | 
			
		||||
 | 
			
		||||
     8.4.  In the event of termination under Sections 8.1 or 8.2 above,
 | 
			
		||||
     all end user license agreements (excluding distributors and resellers)
 | 
			
		||||
     which have been validly granted by You or any distributor hereunder
 | 
			
		||||
     prior to termination shall survive termination.
 | 
			
		||||
 | 
			
		||||
9. LIMITATION OF LIABILITY.
 | 
			
		||||
 | 
			
		||||
     UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
 | 
			
		||||
     (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
 | 
			
		||||
     DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
 | 
			
		||||
     OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
 | 
			
		||||
     ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
 | 
			
		||||
     CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
 | 
			
		||||
     WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
 | 
			
		||||
     COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
 | 
			
		||||
     INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
 | 
			
		||||
     LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
 | 
			
		||||
     RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
 | 
			
		||||
     PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
 | 
			
		||||
     EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
 | 
			
		||||
     THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
 | 
			
		||||
 | 
			
		||||
10. U.S. GOVERNMENT END USERS.
 | 
			
		||||
 | 
			
		||||
     The Covered Code is a "commercial item," as that term is defined in
 | 
			
		||||
     48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
 | 
			
		||||
     software" and "commercial computer software documentation," as such
 | 
			
		||||
     terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
 | 
			
		||||
     C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
 | 
			
		||||
     all U.S. Government End Users acquire Covered Code with only those
 | 
			
		||||
     rights set forth herein.
 | 
			
		||||
 | 
			
		||||
11. MISCELLANEOUS.
 | 
			
		||||
 | 
			
		||||
     This License represents the complete agreement concerning subject
 | 
			
		||||
     matter hereof. If any provision of this License is held to be
 | 
			
		||||
     unenforceable, such provision shall be reformed only to the extent
 | 
			
		||||
     necessary to make it enforceable. This License shall be governed by
 | 
			
		||||
     California law provisions (except to the extent applicable law, if
 | 
			
		||||
     any, provides otherwise), excluding its conflict-of-law provisions.
 | 
			
		||||
     With respect to disputes in which at least one party is a citizen of,
 | 
			
		||||
     or an entity chartered or registered to do business in the United
 | 
			
		||||
     States of America, any litigation relating to this License shall be
 | 
			
		||||
     subject to the jurisdiction of the Federal Courts of the Northern
 | 
			
		||||
     District of California, with venue lying in Santa Clara County,
 | 
			
		||||
     California, with the losing party responsible for costs, including
 | 
			
		||||
     without limitation, court costs and reasonable attorneys' fees and
 | 
			
		||||
     expenses. The application of the United Nations Convention on
 | 
			
		||||
     Contracts for the International Sale of Goods is expressly excluded.
 | 
			
		||||
     Any law or regulation which provides that the language of a contract
 | 
			
		||||
     shall be construed against the drafter shall not apply to this
 | 
			
		||||
     License.
 | 
			
		||||
 | 
			
		||||
12. RESPONSIBILITY FOR CLAIMS.
 | 
			
		||||
 | 
			
		||||
     As between Initial Developer and the Contributors, each party is
 | 
			
		||||
     responsible for claims and damages arising, directly or indirectly,
 | 
			
		||||
     out of its utilization of rights under this License and You agree to
 | 
			
		||||
     work with Initial Developer and Contributors to distribute such
 | 
			
		||||
     responsibility on an equitable basis. Nothing herein is intended or
 | 
			
		||||
     shall be deemed to constitute any admission of liability.
 | 
			
		||||
 | 
			
		||||
13. MULTIPLE-LICENSED CODE.
 | 
			
		||||
 | 
			
		||||
     Initial Developer may designate portions of the Covered Code as
 | 
			
		||||
     "Multiple-Licensed".  "Multiple-Licensed" means that the Initial
 | 
			
		||||
     Developer permits you to utilize portions of the Covered Code under
 | 
			
		||||
     Your choice of the NPL or the alternative licenses, if any, specified
 | 
			
		||||
     by the Initial Developer in the file described in Exhibit A.
 | 
			
		||||
 | 
			
		||||
EXHIBIT A -Mozilla Public License.
 | 
			
		||||
 | 
			
		||||
     ``The contents of this file are subject to the Mozilla Public License
 | 
			
		||||
     Version 1.1 (the "License"); you may not use this file except in
 | 
			
		||||
     compliance with the License. You may obtain a copy of the License at
 | 
			
		||||
     http://www.mozilla.org/MPL/
 | 
			
		||||
 | 
			
		||||
     Software distributed under the License is distributed on an "AS IS"
 | 
			
		||||
     basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
 | 
			
		||||
     License for the specific language governing rights and limitations
 | 
			
		||||
     under the License.
 | 
			
		||||
 | 
			
		||||
     The Original Code is ______________________________________.
 | 
			
		||||
 | 
			
		||||
     The Initial Developer of the Original Code is ________________________.
 | 
			
		||||
     Portions created by ______________________ are Copyright (C) ______
 | 
			
		||||
     _______________________. All Rights Reserved.
 | 
			
		||||
 | 
			
		||||
     Contributor(s): ______________________________________.
 | 
			
		||||
 | 
			
		||||
     Alternatively, the contents of this file may be used under the terms
 | 
			
		||||
     of the _____ license (the  "[___] License"), in which case the
 | 
			
		||||
     provisions of [______] License are applicable instead of those
 | 
			
		||||
     above.  If you wish to allow use of your version of this file only
 | 
			
		||||
     under the terms of the [____] License and not to allow others to use
 | 
			
		||||
     your version of this file under the MPL, indicate your decision by
 | 
			
		||||
     deleting  the provisions above and replace  them with the notice and
 | 
			
		||||
     other provisions required by the [___] License.  If you do not delete
 | 
			
		||||
     the provisions above, a recipient may use your version of this file
 | 
			
		||||
     under either the MPL or the [___] License."
 | 
			
		||||
 | 
			
		||||
     [NOTE: The text of this Exhibit A may differ slightly from the text of
 | 
			
		||||
     the notices in the Source Code files of the Original Code. You should
 | 
			
		||||
     use the text of this Exhibit A rather than the text found in the
 | 
			
		||||
     Original Code Source Code for Your Modifications.]
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										121
									
								
								Makefile.am
									
									
									
									
									
								
							
							
						
						
									
										121
									
								
								Makefile.am
									
									
									
									
									
								
							@@ -1,23 +1,85 @@
 | 
			
		||||
#***************************************************************************
 | 
			
		||||
#                                  _   _ ____  _
 | 
			
		||||
#  Project                     ___| | | |  _ \| |
 | 
			
		||||
#                             / __| | | | |_) | |
 | 
			
		||||
#                            | (__| |_| |  _ <| |___
 | 
			
		||||
#                             \___|\___/|_| \_\_____|
 | 
			
		||||
#
 | 
			
		||||
# Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
 | 
			
		||||
#
 | 
			
		||||
# This software is licensed as described in the file COPYING, which
 | 
			
		||||
# you should have received as part of this distribution. The terms
 | 
			
		||||
# are also available at http://curl.haxx.se/docs/copyright.html.
 | 
			
		||||
#
 | 
			
		||||
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
 | 
			
		||||
# copies of the Software, and permit persons to whom the Software is
 | 
			
		||||
# furnished to do so, under the terms of the COPYING file.
 | 
			
		||||
#
 | 
			
		||||
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 | 
			
		||||
# KIND, either express or implied.
 | 
			
		||||
#
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
###########################################################################
 | 
			
		||||
 | 
			
		||||
AUTOMAKE_OPTIONS = foreign no-dependencies
 | 
			
		||||
AUTOMAKE_OPTIONS = foreign
 | 
			
		||||
 | 
			
		||||
EXTRA_DIST = \
 | 
			
		||||
	CHANGES LEGAL maketgz MITX.txt MPL-1.1.txt \
 | 
			
		||||
	config-win32.h reconf packages/README Makefile.dist
 | 
			
		||||
ACLOCAL_AMFLAGS = -I m4
 | 
			
		||||
 | 
			
		||||
SUBDIRS = docs lib src include tests packages
 | 
			
		||||
EXTRA_DIST = CHANGES COPYING maketgz reconf Makefile.dist curl-config.in \
 | 
			
		||||
 curl-style.el sample.emacs RELEASE-NOTES buildconf buildconf.bat 	 \
 | 
			
		||||
 libcurl.pc.in vc6curl.dsw
 | 
			
		||||
 | 
			
		||||
bin_SCRIPTS = curl-config
 | 
			
		||||
 | 
			
		||||
SUBDIRS = lib src
 | 
			
		||||
DIST_SUBDIRS = $(SUBDIRS) tests include packages docs
 | 
			
		||||
 | 
			
		||||
pkgconfigdir = $(libdir)/pkgconfig
 | 
			
		||||
pkgconfig_DATA = libcurl.pc
 | 
			
		||||
 | 
			
		||||
# create a root makefile in the distribution:
 | 
			
		||||
dist-hook:
 | 
			
		||||
	cp $(srcdir)/Makefile.dist $(distdir)/Makefile
 | 
			
		||||
	rm -rf $(top_builddir)/tests/log
 | 
			
		||||
	find $(distdir) -name "*.dist" -exec rm {} \;
 | 
			
		||||
	(distit=`find $(srcdir) -name "*.dist"`; \
 | 
			
		||||
	for file in $$distit; do \
 | 
			
		||||
	  strip=`echo $$file | sed -e s/^$(srcdir)// -e s/\.dist//`; \
 | 
			
		||||
	  cp $$file $(distdir)$$strip; \
 | 
			
		||||
	done)
 | 
			
		||||
 | 
			
		||||
check: test
 | 
			
		||||
html:
 | 
			
		||||
	cd docs; make html
 | 
			
		||||
 | 
			
		||||
pdf:
 | 
			
		||||
	cd docs; make pdf
 | 
			
		||||
 | 
			
		||||
check: test examples
 | 
			
		||||
 | 
			
		||||
if CROSSCOMPILING
 | 
			
		||||
test-full: test
 | 
			
		||||
test-torture: test
 | 
			
		||||
 | 
			
		||||
test:
 | 
			
		||||
	@(cd tests; make quiet-test)
 | 
			
		||||
	@echo "NOTICE: we can't run the tests when cross-compiling!"
 | 
			
		||||
 | 
			
		||||
else
 | 
			
		||||
 | 
			
		||||
test:
 | 
			
		||||
	@(cd tests; $(MAKE) all quiet-test)
 | 
			
		||||
 | 
			
		||||
test-full:
 | 
			
		||||
	@(cd tests; $(MAKE) all full-test)
 | 
			
		||||
 | 
			
		||||
test-torture:
 | 
			
		||||
	@(cd tests; $(MAKE) all torture-test)
 | 
			
		||||
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
examples:
 | 
			
		||||
	@(cd docs/examples; $(MAKE) check)
 | 
			
		||||
 | 
			
		||||
clean-local:
 | 
			
		||||
	@(cd tests; $(MAKE) clean)
 | 
			
		||||
	@(cd docs; $(MAKE) clean)
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Build source and binary rpms. For rpm-3.0 and above, the ~/.rpmmacros
 | 
			
		||||
@@ -45,3 +107,42 @@ rpm:
 | 
			
		||||
	rpm -ba --clean --rmsource $$RPM_TOPDIR/SPECS/$(RPMDIST).spec ; \
 | 
			
		||||
	mv $$RPM_TOPDIR/RPMS/i386/$(RPMDIST)-*.rpm . ; \
 | 
			
		||||
	mv $$RPM_TOPDIR/SRPMS/$(RPMDIST)-*.src.rpm .
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Build a Solaris pkgadd format file
 | 
			
		||||
# run 'make pkgadd' once you've done './configure' and 'make' to make a Solaris pkgadd format
 | 
			
		||||
# file (which ends up back in this directory).
 | 
			
		||||
# The pkgadd file is in 'pkgtrans' format, so to install on Solaris, do
 | 
			
		||||
# pkgadd -d ./HAXXcurl-*
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
# gak - libtool requires an absoulte directory, hence the pwd below...
 | 
			
		||||
pkgadd:
 | 
			
		||||
	umask 022 ; \
 | 
			
		||||
	make install DESTDIR=`/bin/pwd`/packages/Solaris/root ; \
 | 
			
		||||
	cat COPYING > $(srcdir)/packages/Solaris/copyright ; \
 | 
			
		||||
	cd $(srcdir)/packages/Solaris && $(MAKE) package
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Build a cygwin binary tarball installation file
 | 
			
		||||
# resulting .tar.bz2 file will end up at packages/Win32/cygwin
 | 
			
		||||
cygwinbin:
 | 
			
		||||
	$(MAKE) -C packages/Win32/cygwin cygwinbin
 | 
			
		||||
 | 
			
		||||
# We extend the standard install with a custom hook:
 | 
			
		||||
install-data-hook:
 | 
			
		||||
	cd include && $(MAKE) install
 | 
			
		||||
	cd docs && $(MAKE) install
 | 
			
		||||
 | 
			
		||||
# We extend the standard uninstall with a custom hook:
 | 
			
		||||
uninstall-hook:
 | 
			
		||||
	cd include && $(MAKE) uninstall
 | 
			
		||||
	cd docs && $(MAKE) uninstall
 | 
			
		||||
 | 
			
		||||
ca-bundle: lib/mk-ca-bundle.pl
 | 
			
		||||
	@echo "generate a fresh ca-bundle.crt"
 | 
			
		||||
	@perl $< -b -l -u lib/ca-bundle.crt
 | 
			
		||||
 | 
			
		||||
ca-firefox: lib/firefox-db2pem.sh
 | 
			
		||||
	@echo "generate a fresh ca-bundle.crt"
 | 
			
		||||
	./lib/firefox-db2pem.sh lib/ca-bundle.crt
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										244
									
								
								Makefile.dist
									
									
									
									
									
								
							
							
						
						
									
										244
									
								
								Makefile.dist
									
									
									
									
									
								
							@@ -1,25 +1,27 @@
 | 
			
		||||
#############################################################################
 | 
			
		||||
#                                  _   _ ____  _     
 | 
			
		||||
#  Project                     ___| | | |  _ \| |    
 | 
			
		||||
#                             / __| | | | |_) | |    
 | 
			
		||||
#                            | (__| |_| |  _ <| |___ 
 | 
			
		||||
#***************************************************************************
 | 
			
		||||
#                                  _   _ ____  _
 | 
			
		||||
#  Project                     ___| | | |  _ \| |
 | 
			
		||||
#                             / __| | | | |_) | |
 | 
			
		||||
#                            | (__| |_| |  _ <| |___
 | 
			
		||||
#                             \___|\___/|_| \_\_____|
 | 
			
		||||
#
 | 
			
		||||
# Copyright (C) 2000, Daniel Stenberg, <daniel@haxx.se>, et al.
 | 
			
		||||
# Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
 | 
			
		||||
#
 | 
			
		||||
# In order to be useful for every potential user, curl and libcurl are
 | 
			
		||||
# dual-licensed under the MPL and the MIT/X-derivate licenses.
 | 
			
		||||
# This software is licensed as described in the file COPYING, which
 | 
			
		||||
# you should have received as part of this distribution. The terms
 | 
			
		||||
# are also available at http://curl.haxx.se/docs/copyright.html.
 | 
			
		||||
#
 | 
			
		||||
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
 | 
			
		||||
# copies of the Software, and permit persons to whom the Software is
 | 
			
		||||
# furnished to do so, under the terms of the MPL or the MIT/X-derivate
 | 
			
		||||
# licenses. You may pick one of these licenses.
 | 
			
		||||
# furnished to do so, under the terms of the COPYING file.
 | 
			
		||||
#
 | 
			
		||||
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 | 
			
		||||
# KIND, either express or implied.
 | 
			
		||||
#
 | 
			
		||||
# $Id$
 | 
			
		||||
#############################################################################
 | 
			
		||||
###########################################################################
 | 
			
		||||
 | 
			
		||||
VC=vc6
 | 
			
		||||
 | 
			
		||||
all:
 | 
			
		||||
	./configure
 | 
			
		||||
@@ -30,28 +32,177 @@ ssl:
 | 
			
		||||
	make
 | 
			
		||||
 | 
			
		||||
borland:
 | 
			
		||||
	cd lib; make -f Makefile.b32
 | 
			
		||||
	cd src; make -f Makefile.b32
 | 
			
		||||
	cd lib
 | 
			
		||||
	make -f Makefile.b32
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	make -f Makefile.b32
 | 
			
		||||
 | 
			
		||||
borland-ssl:
 | 
			
		||||
	cd lib
 | 
			
		||||
	make -f Makefile.b32 WITH_SSL=1
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	make -f Makefile.b32 WITH_SSL=1
 | 
			
		||||
 | 
			
		||||
borland-ssl-zlib:
 | 
			
		||||
	cd lib
 | 
			
		||||
	make -f Makefile.b32 WITH_SSL=1 WITH_ZLIB=1
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	make -f Makefile.b32 WITH_SSL=1 WITH_ZLIB=1
 | 
			
		||||
 | 
			
		||||
borland-clean:
 | 
			
		||||
	cd lib
 | 
			
		||||
	make -f Makefile.b32 clean
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	make -f Makefile.b32 clean
 | 
			
		||||
 | 
			
		||||
watcom:
 | 
			
		||||
	cd lib
 | 
			
		||||
	wmake -f Makefile.Watcom
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	wmake -f Makefile.Watcom
 | 
			
		||||
 | 
			
		||||
watcom-clean:
 | 
			
		||||
	cd lib
 | 
			
		||||
	wmake -f Makefile.Watcom clean
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	wmake -f Makefile.Watcom clean
 | 
			
		||||
 | 
			
		||||
mingw32:
 | 
			
		||||
	cd lib; make -f Makefile.m32
 | 
			
		||||
	cd src; make -f Makefile.m32
 | 
			
		||||
	$(MAKE) -C lib -f Makefile.m32
 | 
			
		||||
	$(MAKE) -C src -f Makefile.m32
 | 
			
		||||
 | 
			
		||||
mingw32-ssl:
 | 
			
		||||
	cd lib; make -f Makefile.m32 SSL=1
 | 
			
		||||
	cd src; make -f Makefile.m32 SSL=1
 | 
			
		||||
mingw32-zlib:
 | 
			
		||||
	$(MAKE) -C lib -f Makefile.m32 ZLIB=1
 | 
			
		||||
	$(MAKE) -C src -f Makefile.m32 ZLIB=1
 | 
			
		||||
 | 
			
		||||
mingw32-ssl-zlib:
 | 
			
		||||
	$(MAKE) -C lib -f Makefile.m32 SSL=1 ZLIB=1
 | 
			
		||||
	$(MAKE) -C src -f Makefile.m32 SSL=1 ZLIB=1
 | 
			
		||||
 | 
			
		||||
mingw32-ssh2-ssl-zlib:
 | 
			
		||||
	$(MAKE) -C lib -f Makefile.m32 SSH2=1 SSL=1 ZLIB=1
 | 
			
		||||
	$(MAKE) -C src -f Makefile.m32 SSH2=1 SSL=1 ZLIB=1
 | 
			
		||||
 | 
			
		||||
mingw32-ssh2-ssl-sspi-zlib:
 | 
			
		||||
	$(MAKE) -C lib -f Makefile.m32 SSH2=1 SSL=1 SSPI=1 ZLIB=1
 | 
			
		||||
	$(MAKE) -C src -f Makefile.m32 SSH2=1 SSL=1 SSPI=1 ZLIB=1
 | 
			
		||||
 | 
			
		||||
mingw32-clean:
 | 
			
		||||
	$(MAKE) -C lib -f Makefile.m32 clean
 | 
			
		||||
	$(MAKE) -C src -f Makefile.m32 clean
 | 
			
		||||
 | 
			
		||||
vc-clean:
 | 
			
		||||
	cd lib
 | 
			
		||||
	nmake -f Makefile.$(VC) clean
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	nmake -f Makefile.$(VC) clean
 | 
			
		||||
 | 
			
		||||
vc-all:
 | 
			
		||||
	cd lib
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=release
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=release-ssl
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=release-zlib
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=release-ssl-zlib
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=release-ssl-dll
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=release-zlib-dll
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=release-ssl-dll-zlib-dll
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=release-dll
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=release-dll-ssl-dll
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=release-dll-zlib-dll
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=release-dll-ssl-dll-zlib-dll
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=debug
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=debug-ssl
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=debug-zlib
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=debug-ssl-zlib
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=debug-ssl-dll
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=debug-zlib-dll
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=debug-ssl-dll-zlib-dll
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=debug-dll
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=debug-dll-ssl-dll
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=debug-dll-zlib-dll
 | 
			
		||||
	nmake -f Makefile.$(VC) cfg=debug-dll-ssl-dll-zlib-dll
 | 
			
		||||
 | 
			
		||||
vc:
 | 
			
		||||
	cd lib
 | 
			
		||||
	nmake -f Makefile.vc6
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	nmake -f Makefile.vc6
 | 
			
		||||
	nmake /f Makefile.$(VC)
 | 
			
		||||
 | 
			
		||||
vc-x64:
 | 
			
		||||
	cd lib
 | 
			
		||||
	MACHINE=x64 nmake /f Makefile.$(VC) cfg=release
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	MACHINE=x64 nmake /f Makefile.$(VC)
 | 
			
		||||
 | 
			
		||||
vc-zlib:
 | 
			
		||||
	cd lib
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-zlib
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-zlib
 | 
			
		||||
 | 
			
		||||
vc-ssl:
 | 
			
		||||
	cd lib
 | 
			
		||||
	nmake -f Makefile.vc6 release-ssl
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-ssl
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	nmake -f Makefile.vc6
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-ssl
 | 
			
		||||
 | 
			
		||||
vc-ssl-zlib:
 | 
			
		||||
	cd lib
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-ssl-zlib
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-ssl-zlib
 | 
			
		||||
 | 
			
		||||
vc-ssl-dll:
 | 
			
		||||
	cd lib
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-ssl-dll
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-ssl-dll
 | 
			
		||||
 | 
			
		||||
vc-dll-ssl-dll:
 | 
			
		||||
	cd lib
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-dll-ssl-dll
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-dll-ssl-dll
 | 
			
		||||
 | 
			
		||||
vc-dll:
 | 
			
		||||
	cd lib
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-dll
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-dll
 | 
			
		||||
 | 
			
		||||
vc-dll-zlib-dll:
 | 
			
		||||
	cd lib
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-dll-zlib-dll
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-dll-zlib-dll
 | 
			
		||||
 | 
			
		||||
vc-dll-ssl-dll-zlib-dll:
 | 
			
		||||
	cd lib
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-dll-ssl-dll-zlib-dll
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-dll-ssl-dll-zlib-dll
 | 
			
		||||
 | 
			
		||||
vc-ssl-dll-zlib-dll:
 | 
			
		||||
	cd lib
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-ssl-dll-zlib-dll
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-ssl-dll-zlib-dll
 | 
			
		||||
 | 
			
		||||
vc-zlib-dll:
 | 
			
		||||
	cd lib
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-zlib-dll
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release-zlib-dll
 | 
			
		||||
 | 
			
		||||
vc-sspi:
 | 
			
		||||
	cd lib
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release WINDOWS_SSPI=1
 | 
			
		||||
	cd ..\src
 | 
			
		||||
	nmake /f Makefile.$(VC) cfg=release WINDOWS_SSPI=1
 | 
			
		||||
 | 
			
		||||
djgpp:
 | 
			
		||||
	$(MAKE) -C lib -f Makefile.dj
 | 
			
		||||
	$(MAKE) -C src -f Makefile.dj
 | 
			
		||||
 | 
			
		||||
cygwin:
 | 
			
		||||
	./configure
 | 
			
		||||
@@ -61,6 +212,42 @@ cygwin-ssl:
 | 
			
		||||
	./configure --with-ssl
 | 
			
		||||
	make
 | 
			
		||||
 | 
			
		||||
amiga:
 | 
			
		||||
	cd ./lib && make -f makefile.amiga
 | 
			
		||||
	cd ./src && make -f makefile.amiga
 | 
			
		||||
 | 
			
		||||
netware:
 | 
			
		||||
	$(MAKE) -C lib -f Makefile.netware
 | 
			
		||||
	$(MAKE) -C src -f Makefile.netware
 | 
			
		||||
 | 
			
		||||
netware-ares:
 | 
			
		||||
	$(MAKE) -C lib -f Makefile.netware WITH_ARES=1
 | 
			
		||||
	$(MAKE) -C src -f Makefile.netware WITH_ARES=1
 | 
			
		||||
 | 
			
		||||
netware-ssl:
 | 
			
		||||
	$(MAKE) -C lib -f Makefile.netware WITH_SSL=1
 | 
			
		||||
	$(MAKE) -C src -f Makefile.netware WITH_SSL=1
 | 
			
		||||
 | 
			
		||||
netware-ssl-zlib:
 | 
			
		||||
	$(MAKE) -C lib -f Makefile.netware WITH_SSL=1 WITH_ZLIB=1
 | 
			
		||||
	$(MAKE) -C src -f Makefile.netware WITH_SSL=1 WITH_ZLIB=1
 | 
			
		||||
 | 
			
		||||
netware-ssh2-ssl-zlib:
 | 
			
		||||
	$(MAKE) -C lib -f Makefile.netware WITH_SSH2=1 WITH_SSL=1 WITH_ZLIB=1
 | 
			
		||||
	$(MAKE) -C src -f Makefile.netware WITH_SSH2=1 WITH_SSL=1 WITH_ZLIB=1
 | 
			
		||||
 | 
			
		||||
netware-zlib:
 | 
			
		||||
	$(MAKE) -C lib -f Makefile.netware WITH_ZLIB=1
 | 
			
		||||
	$(MAKE) -C src -f Makefile.netware WITH_ZLIB=1
 | 
			
		||||
 | 
			
		||||
netware-clean:
 | 
			
		||||
	$(MAKE) -C lib -f Makefile.netware clean
 | 
			
		||||
	$(MAKE) -C src -f Makefile.netware clean
 | 
			
		||||
 | 
			
		||||
netware-install:
 | 
			
		||||
	$(MAKE) -C lib -f Makefile.netware install
 | 
			
		||||
	$(MAKE) -C src -f Makefile.netware install
 | 
			
		||||
 | 
			
		||||
unix: all
 | 
			
		||||
 | 
			
		||||
unix-ssl: ssl
 | 
			
		||||
@@ -68,3 +255,16 @@ unix-ssl: ssl
 | 
			
		||||
linux: all
 | 
			
		||||
 | 
			
		||||
linux-ssl: ssl
 | 
			
		||||
 | 
			
		||||
vc8:
 | 
			
		||||
	@echo "generate VC8 makefiles"
 | 
			
		||||
	@sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/wsock32.lib/wsock32.lib bufferoverflowu.lib/g" -e "s/VC6/VC8/g" lib/Makefile.vc6 > lib/Makefile.vc8
 | 
			
		||||
	@sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/wsock32.lib/wsock32.lib bufferoverflowu.lib/g" -e "s/VC6/VC8/g" src/Makefile.vc6 > src/Makefile.vc8
 | 
			
		||||
 | 
			
		||||
ca-bundle: lib/mk-ca-bundle.pl
 | 
			
		||||
	@echo "generate a fresh ca-bundle.crt"
 | 
			
		||||
	@perl $< -b -l -u lib/ca-bundle.crt
 | 
			
		||||
 | 
			
		||||
ca-firefox: lib/firefox-db2pem.sh
 | 
			
		||||
	@echo "generate a fresh ca-bundle.crt"
 | 
			
		||||
	./lib/firefox-db2pem.sh lib/ca-bundle.crt
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										52
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										52
									
								
								README
									
									
									
									
									
								
							@@ -1,48 +1,52 @@
 | 
			
		||||
                                  _   _ ____  _     
 | 
			
		||||
                              ___| | | |  _ \| |    
 | 
			
		||||
                             / __| | | | |_) | |    
 | 
			
		||||
                            | (__| |_| |  _ <| |___ 
 | 
			
		||||
                                  _   _ ____  _
 | 
			
		||||
                              ___| | | |  _ \| |
 | 
			
		||||
                             / __| | | | |_) | |
 | 
			
		||||
                            | (__| |_| |  _ <| |___
 | 
			
		||||
                             \___|\___/|_| \_\_____|
 | 
			
		||||
 | 
			
		||||
README
 | 
			
		||||
 | 
			
		||||
  Curl is a command line tool for transfering data specified with URL
 | 
			
		||||
  syntax. Find out how to use Curl by reading the curl.1 man page or the
 | 
			
		||||
  Curl is a command line tool for transferring data specified with URL
 | 
			
		||||
  syntax. Find out how to use curl by reading the curl.1 man page or the
 | 
			
		||||
  MANUAL document. Find out how to install Curl by reading the INSTALL
 | 
			
		||||
  document.
 | 
			
		||||
 | 
			
		||||
  libcurl is a library that Curl is using to do its job. It is readily
 | 
			
		||||
  available to be used by your software. Read the LIBCURL document to
 | 
			
		||||
  find out how!
 | 
			
		||||
  libcurl is the library curl is using to do its job. It is readily
 | 
			
		||||
  available to be used by your software. Read the libcurl.3 man page to
 | 
			
		||||
  learn how!
 | 
			
		||||
 | 
			
		||||
  You find answers to the most frequent questions we get in the FAQ document.
 | 
			
		||||
 | 
			
		||||
  Study the LEGAL file for distribution terms and similar.
 | 
			
		||||
  Study the COPYING file for distribution terms and similar. If you distribute
 | 
			
		||||
  curl binaries or other binaries that involve libcurl, you might enjoy the
 | 
			
		||||
  LICENSE-MIXING document.
 | 
			
		||||
 | 
			
		||||
  Always try the Curl web site for the latest news:
 | 
			
		||||
CONTACT
 | 
			
		||||
 | 
			
		||||
        http://curl.haxx.se
 | 
			
		||||
  If you have problems, questions, ideas or suggestions, please contact us
 | 
			
		||||
  by posting to a suitable mailing list. See http://curl.haxx.se/mail/
 | 
			
		||||
 | 
			
		||||
  The official download mirror sites are:
 | 
			
		||||
  All contributors to the project are listed in the THANKS document.
 | 
			
		||||
 | 
			
		||||
        Sweden    -- ftp://ftp.sunet.se/pub/www/utilities/curl/
 | 
			
		||||
        Germany   -- ftp://ftp.fu-berlin.de/pub/unix/network/curl/
 | 
			
		||||
WEB SITE
 | 
			
		||||
 | 
			
		||||
  Visit the curl web site for the latest news and downloads:
 | 
			
		||||
 | 
			
		||||
        http://curl.haxx.se/
 | 
			
		||||
 | 
			
		||||
CVS
 | 
			
		||||
 | 
			
		||||
  To download the very latest source off the CVS server do this:
 | 
			
		||||
 | 
			
		||||
        cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl login
 | 
			
		||||
   cvs -d :pserver:anonymous@cool.haxx.se:/cvsroot/curl login
 | 
			
		||||
 | 
			
		||||
     (just press enter when asked for password)
 | 
			
		||||
  (just press enter when asked for password)
 | 
			
		||||
 | 
			
		||||
        cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl co .
 | 
			
		||||
   cvs -d :pserver:anonymous@cool.haxx.se:/cvsroot/curl co curl
 | 
			
		||||
 | 
			
		||||
     (now, you'll get all the latest sources downloaded into your current
 | 
			
		||||
     directory. Note that this does NOT create a directory named curl or
 | 
			
		||||
     anything)
 | 
			
		||||
  (you'll get a directory named curl created, filled with the source code)
 | 
			
		||||
 | 
			
		||||
        cvs -d :pserver:anonymous@cvs.curl.sourceforge.net:/cvsroot/curl logout
 | 
			
		||||
        
 | 
			
		||||
     (you're off the hook!)
 | 
			
		||||
NOTICE
 | 
			
		||||
 | 
			
		||||
  Curl contains pieces of source code that is Copyright (c) 1998, 1999
 | 
			
		||||
  Kungliga Tekniska H<>gskolan. This notice is included here to comply with the
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										42
									
								
								RELEASE-NOTES
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								RELEASE-NOTES
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
Curl and libcurl 7.19.3
 | 
			
		||||
 | 
			
		||||
 Public curl releases:         109
 | 
			
		||||
 Command line options:         128
 | 
			
		||||
 curl_easy_setopt() options:   158
 | 
			
		||||
 Public functions in libcurl:  58
 | 
			
		||||
 Known libcurl bindings:       37
 | 
			
		||||
 Contributors:                 683
 | 
			
		||||
 | 
			
		||||
This release includes the following changes:
 | 
			
		||||
 | 
			
		||||
 o 
 | 
			
		||||
 | 
			
		||||
This release includes the following bugfixes:
 | 
			
		||||
 | 
			
		||||
 o build failure when disabling FTP but enabling GSS
 | 
			
		||||
 o fixed several calls to memory functions that didn't check return codes
 | 
			
		||||
 o memory leak for SSL connects with libcurl/NSS when CURLOPT_ISSUERCERT was
 | 
			
		||||
   used
 | 
			
		||||
 o re-use of connections with the multi interface when multiple handles used
 | 
			
		||||
   the same server
 | 
			
		||||
 o memory leak with HTTP GSS/kerberos authentication
 | 
			
		||||
 o removed the default use of "Pragma: no-cache"
 | 
			
		||||
 o fix SCP/SFTP busyloop by using a new libssh2 0.19 function
 | 
			
		||||
 o bad fclose() after a fatal error in cookie code
 | 
			
		||||
 o curl_multi_remove_handle() when the handle was in use in a HTTP pipeline
 | 
			
		||||
 o GSS authentication infinite loop problem
 | 
			
		||||
 o 550 response from SIZE no longer treated as missing file
 | 
			
		||||
 o ftps:// control connections now use explicit protection level
 | 
			
		||||
 | 
			
		||||
This release includes the following known bugs:
 | 
			
		||||
 | 
			
		||||
 o see docs/KNOWN_BUGS (http://curl.haxx.se/docs/knownbugs.html)
 | 
			
		||||
 | 
			
		||||
This release would not have looked like this without help, code, reports and
 | 
			
		||||
advice from friends like these:
 | 
			
		||||
 | 
			
		||||
 Yang Tse, Daniel Fandrich, Jim Meyering, Christian Krause, Andreas Wurf,
 | 
			
		||||
 Markus Koetter, Josef Wolf, Vlad Grachov, Pawel Kierski, Igor Novoseltsev,
 | 
			
		||||
 Fred Machado, Ken Hirsch
 | 
			
		||||
 | 
			
		||||
        Thanks! (and sorry if I forgot to mention someone)
 | 
			
		||||
							
								
								
									
										24
									
								
								TODO-RELEASE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								TODO-RELEASE
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
To be addressed in 7.19.3 (planned release: January 2009)
 | 
			
		||||
=========================
 | 
			
		||||
 | 
			
		||||
193 - Fix zero-byte file transfers
 | 
			
		||||
      - Nobody has actually started for real on this
 | 
			
		||||
 | 
			
		||||
196 - #2351653 "crash in ConnectionExists"
 | 
			
		||||
      - Being worked on in the bug tracker
 | 
			
		||||
 | 
			
		||||
197 - IIS-bug in Digest
 | 
			
		||||
 | 
			
		||||
199 - "Bug 2351645" adjustment of the patch Daniel S applied
 | 
			
		||||
      - Suggested fix posted to list
 | 
			
		||||
 | 
			
		||||
200 - "afert redirect, the content length is not reset" by Shunlong Bai
 | 
			
		||||
 | 
			
		||||
201 - "bug: header data output to the body callback function after set header"
 | 
			
		||||
      by Shunlong Bai
 | 
			
		||||
 | 
			
		||||
202 - "hangs up of application above libcurl" - problems with the multi_socket
 | 
			
		||||
      implementation when using HTTP pipelining. Patch pending by 
 | 
			
		||||
      Igor Novoseltsev
 | 
			
		||||
 | 
			
		||||
203 -
 | 
			
		||||
							
								
								
									
										53
									
								
								acconfig.h
									
									
									
									
									
								
							
							
						
						
									
										53
									
								
								acconfig.h
									
									
									
									
									
								
							@@ -1,53 +0,0 @@
 | 
			
		||||
/* Name of this package! */
 | 
			
		||||
#undef PACKAGE
 | 
			
		||||
 | 
			
		||||
/* Version number of this archive. */
 | 
			
		||||
#undef VERSION
 | 
			
		||||
 | 
			
		||||
/* Define if you have the getpass function.  */
 | 
			
		||||
#undef HAVE_GETPASS
 | 
			
		||||
 | 
			
		||||
/* Define cpu-machine-OS */
 | 
			
		||||
#undef OS
 | 
			
		||||
 | 
			
		||||
/* Define if you have the gethostbyaddr_r() function with 5 arguments */
 | 
			
		||||
#undef HAVE_GETHOSTBYADDR_R_5
 | 
			
		||||
 | 
			
		||||
/* Define if you have the gethostbyaddr_r() function with 7 arguments */
 | 
			
		||||
#undef HAVE_GETHOSTBYADDR_R_7
 | 
			
		||||
 | 
			
		||||
/* Define if you have the gethostbyaddr_r() function with 8 arguments */
 | 
			
		||||
#undef HAVE_GETHOSTBYADDR_R_8
 | 
			
		||||
 | 
			
		||||
/* Define if you have the gethostbyname_r() function with 3 arguments */
 | 
			
		||||
#undef HAVE_GETHOSTBYNAME_R_3
 | 
			
		||||
 | 
			
		||||
/* Define if you have the gethostbyname_r() function with 5 arguments */
 | 
			
		||||
#undef HAVE_GETHOSTBYNAME_R_5
 | 
			
		||||
 | 
			
		||||
/* Define if you have the gethostbyname_r() function with 6 arguments */
 | 
			
		||||
#undef HAVE_GETHOSTBYNAME_R_6
 | 
			
		||||
 | 
			
		||||
/* Define if you have the inet_ntoa_r function declared. */
 | 
			
		||||
#undef HAVE_INET_NTOA_R_DECL
 | 
			
		||||
 | 
			
		||||
/* Define if you need the _REENTRANT define for some functions */
 | 
			
		||||
#undef NEED_REENTRANT
 | 
			
		||||
 | 
			
		||||
/* Define if you have the Kerberos4 libraries (including -ldes) */
 | 
			
		||||
#undef KRB4
 | 
			
		||||
 | 
			
		||||
/* Define if you want to enable IPv6 support */
 | 
			
		||||
#undef ENABLE_IPV6
 | 
			
		||||
 | 
			
		||||
/* Define this to 'int' if ssize_t is not an available typedefed type */
 | 
			
		||||
#undef ssize_t
 | 
			
		||||
 | 
			
		||||
/* Define this to 'int' if socklen_t is not an available typedefed type */
 | 
			
		||||
#undef socklen_t
 | 
			
		||||
 | 
			
		||||
/* Define this as a suitable file to read random data from */
 | 
			
		||||
#undef RANDOM_FILE
 | 
			
		||||
 | 
			
		||||
/* Define this to your Entropy Gathering Daemon socket pathname */
 | 
			
		||||
#undef EGD_SOCKET
 | 
			
		||||
							
								
								
									
										3126
									
								
								acinclude.m4
									
									
									
									
									
								
							
							
						
						
									
										3126
									
								
								acinclude.m4
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										24
									
								
								ares/.cvsignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								ares/.cvsignore
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
configure
 | 
			
		||||
autom4te.cache
 | 
			
		||||
Makefile
 | 
			
		||||
adig
 | 
			
		||||
ahost
 | 
			
		||||
config.log
 | 
			
		||||
config.status
 | 
			
		||||
aclocal.m4
 | 
			
		||||
.deps
 | 
			
		||||
Makefile.in
 | 
			
		||||
config.guess
 | 
			
		||||
config.h
 | 
			
		||||
config.h.in
 | 
			
		||||
config.sub
 | 
			
		||||
libtool
 | 
			
		||||
ltmain.sh
 | 
			
		||||
stamp-h1
 | 
			
		||||
*.lo
 | 
			
		||||
.libs
 | 
			
		||||
depcomp
 | 
			
		||||
libcares.la
 | 
			
		||||
missing
 | 
			
		||||
ares_version.h.dist
 | 
			
		||||
libcares.pc
 | 
			
		||||
							
								
								
									
										37
									
								
								ares/AUTHORS
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								ares/AUTHORS
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
			
		||||
c-ares is based on ares, and these are the people that have worked on it since
 | 
			
		||||
the fork was made:
 | 
			
		||||
 | 
			
		||||
Alexander Lazic
 | 
			
		||||
Alexey Simak
 | 
			
		||||
Andreas Rieke
 | 
			
		||||
Ashish Sharma
 | 
			
		||||
Brad House
 | 
			
		||||
Brad Spencer
 | 
			
		||||
Bram Matthys
 | 
			
		||||
Dan Fandrich
 | 
			
		||||
Daniel Stenberg
 | 
			
		||||
Dirk Manske
 | 
			
		||||
Dominick Meglio
 | 
			
		||||
Doug Goldstein
 | 
			
		||||
Duncan Wilcox
 | 
			
		||||
Eino Tuominen
 | 
			
		||||
Erik Kline
 | 
			
		||||
George Neill
 | 
			
		||||
Gisle Vanem
 | 
			
		||||
Guilherme Balena Versiani
 | 
			
		||||
Gunter Knauf
 | 
			
		||||
Henrik Stoerner
 | 
			
		||||
James Bursa
 | 
			
		||||
Michael Wallner
 | 
			
		||||
Nick Mathewson
 | 
			
		||||
Phil Blundell
 | 
			
		||||
Ravi Pratap
 | 
			
		||||
Robin Cornelius
 | 
			
		||||
Sebastian at basti79.de
 | 
			
		||||
Shmulik Regev
 | 
			
		||||
Steinar H. Gunderson
 | 
			
		||||
Tofu Linden
 | 
			
		||||
Vlad Dinulescu
 | 
			
		||||
William Ahern
 | 
			
		||||
Yang Tse
 | 
			
		||||
liren at vivisimo.com
 | 
			
		||||
							
								
								
									
										892
									
								
								ares/CHANGES
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										892
									
								
								ares/CHANGES
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,892 @@
 | 
			
		||||
  Changelog for the c-ares project
 | 
			
		||||
 | 
			
		||||
* December 9 2008 (Gisle Vanem)
 | 
			
		||||
 | 
			
		||||
  Fixes for Win32 targets using the Watt-32 tcp/ip stack.
 | 
			
		||||
 | 
			
		||||
* Dec 4 2008 (Daniel Stenberg)
 | 
			
		||||
 | 
			
		||||
  Gregor Jasny provided the patch that introduces ares_set_socket_callback(),
 | 
			
		||||
  and I edited it to also get duped by ares_dup().
 | 
			
		||||
 | 
			
		||||
* Dec 3 2008 (Daniel Stenberg)
 | 
			
		||||
 | 
			
		||||
  API changes:
 | 
			
		||||
 | 
			
		||||
  I made sure the public ares_config struct looks like before and yet it
 | 
			
		||||
  supports the ROTATE option thanks to c-ares now storing the "optmask"
 | 
			
		||||
  internally. Thus we should be ABI compatible with the past release(s)
 | 
			
		||||
  now. My efforts mentioned below should not break backwards ABI compliance.
 | 
			
		||||
 | 
			
		||||
  Here's how I suggest we proceed with the API:
 | 
			
		||||
 | 
			
		||||
  ares_init() will be primary "channel creator" function.
 | 
			
		||||
 | 
			
		||||
  ares_init_options() will continue to work exactly like now and before. For
 | 
			
		||||
  starters, it will be the (only) way to set the existing options.
 | 
			
		||||
 | 
			
		||||
  ares_save_options() will continue to work like today, but will ONLY save
 | 
			
		||||
  options that you can set today (including ARES_OPT_ROTATE actually) but new
 | 
			
		||||
  options that we add may not be saved with this.
 | 
			
		||||
 | 
			
		||||
  Instead we introduce:
 | 
			
		||||
 | 
			
		||||
  ares_dup() that instead can make a new channel and clone the config used
 | 
			
		||||
  from an existing channel. It will then clone all config options, including
 | 
			
		||||
  future new things we add.
 | 
			
		||||
 | 
			
		||||
  ares_set_*() style functions that set (new) config options. As a start we
 | 
			
		||||
  simply add these for new functionality, but over time we can also introduce
 | 
			
		||||
  them for existing "struct ares_options" so that we can eventually deprecate
 | 
			
		||||
  the two ares_*_options() functions.
 | 
			
		||||
 | 
			
		||||
  ares_get_*() style functions for extracting info from a channel handle that
 | 
			
		||||
  should be used instead of ares_save_options().
 | 
			
		||||
 | 
			
		||||
* Nov 26 2008 (Yang Tse)
 | 
			
		||||
- Brad Spencer provided changes to allow buildconf to work on OS X.
 | 
			
		||||
 | 
			
		||||
- Gerald Combs fixed a bug in ares_parse_ptr_reply() which would cause a
 | 
			
		||||
  buffer to shrink instead of expand if a reply contained 8 or more records.
 | 
			
		||||
 | 
			
		||||
* Nov 25 2008 (Yang Tse)
 | 
			
		||||
- In preparation for the upcomming IPv6 nameservers patch, the internal
 | 
			
		||||
  ares_addr union is now changed into an internal struct which also holds
 | 
			
		||||
  the address family.
 | 
			
		||||
 | 
			
		||||
* Nov 19 2008 (Daniel Stenberg)
 | 
			
		||||
- Brad Spencer brought the new function ares_gethostbyname_file() which simply
 | 
			
		||||
  resolves a host name from the given file, using the regular hosts syntax.
 | 
			
		||||
 | 
			
		||||
* Nov 1 2008 (Daniel Stenberg)
 | 
			
		||||
- Carlo Contavalli added support for the glibc "rotate" option, as documented
 | 
			
		||||
  in man resolv.conf:
 | 
			
		||||
 | 
			
		||||
  causes round robin selection of nameservers from among those listed.  This
 | 
			
		||||
  has the effect of spreading the query load among all listed servers, rather
 | 
			
		||||
  than having all clients try the first listed server first every time.
 | 
			
		||||
 | 
			
		||||
  You can enable it with ARES_OPT_ROTATE
 | 
			
		||||
 | 
			
		||||
* Oct 21 2008 (Yang Tse)
 | 
			
		||||
  Charles Hardin added handling of EINPROGRESS for UDP connects.
 | 
			
		||||
 | 
			
		||||
* Oct 18 2008 (Daniel Stenberg)
 | 
			
		||||
  Charles Hardin made adig support a regular numerical dotted IP address for the
 | 
			
		||||
  -s option as well.
 | 
			
		||||
 | 
			
		||||
* Oct 7 2008 (Yang Tse)
 | 
			
		||||
- Added --enable-optimize configure option to enable and disable compiler
 | 
			
		||||
  optimizations to allow decoupled setting from --enable-debug.
 | 
			
		||||
 | 
			
		||||
* Oct 2 2008 (Yang Tse)
 | 
			
		||||
- Added --enable-warnings configure option to enable and disable strict
 | 
			
		||||
  compiler warnings to allow decoupled setting from --enable-debug.
 | 
			
		||||
 | 
			
		||||
* Sep 17 2008 (Yang Tse)
 | 
			
		||||
- Code reorganization to allow internal/private use of "nameser.h" to any
 | 
			
		||||
  system that lacks arpa/nameser.h or arpa/nameser_compat.h header files.
 | 
			
		||||
 | 
			
		||||
* Sep 16 2008 (Yang Tse)
 | 
			
		||||
- Code reorganization to allow internal/private use of ares_writev to any
 | 
			
		||||
  system that lacks the writev function.
 | 
			
		||||
 | 
			
		||||
* Sep 15 2008 (Yang Tse)
 | 
			
		||||
- Code reorganization to allow internal/private use of ares_strcasecmp to any
 | 
			
		||||
  system that lacks the strcasecmp function.
 | 
			
		||||
 | 
			
		||||
- Improve configure detection of some string functions.
 | 
			
		||||
 | 
			
		||||
* Sep 11 2008 (Yang Tse)
 | 
			
		||||
- Code reorganization to allow internal/private use of ares_strdup to any
 | 
			
		||||
  system that lacks the strdup function.
 | 
			
		||||
 | 
			
		||||
Version 1.5.3 (Aug 29, 2008)
 | 
			
		||||
 | 
			
		||||
* Aug 25 2008 (Yang Tse)
 | 
			
		||||
- Improvement by Brad House:
 | 
			
		||||
 | 
			
		||||
  This patch addresses an issue in which a response could be sent back to the
 | 
			
		||||
  source port of a client from a different address than the request was made to.
 | 
			
		||||
  This is one form of a DNS cache poisoning attack.
 | 
			
		||||
 | 
			
		||||
  The patch simply uses recvfrom() rather than recv() and validates that the
 | 
			
		||||
  address returned from recvfrom() matches the address of the server we have
 | 
			
		||||
  connected to. Only necessary on UDP sockets as they are connection-less, TCP
 | 
			
		||||
  is unaffected.
 | 
			
		||||
 | 
			
		||||
- Fix by George Neill:
 | 
			
		||||
  Fixed compilation of acountry sample application failure on some systems.
 | 
			
		||||
 | 
			
		||||
* Aug 4 2008 (Daniel Stenberg)
 | 
			
		||||
- Fix by Tofu Linden:
 | 
			
		||||
 | 
			
		||||
  The symptom:
 | 
			
		||||
  * Users (usually, but not always) on 2-Wire routers and the Comcast service
 | 
			
		||||
  and a wired connection to their router would find that the second and
 | 
			
		||||
  subsequent DNS lookups from fresh processes using c-ares to resolve the same
 | 
			
		||||
  address would cause the process to never see a reply (it keeps polling for
 | 
			
		||||
  around 1m15s before giving up).
 | 
			
		||||
 | 
			
		||||
  The repro:
 | 
			
		||||
  * On such a machine (and yeah, it took us a lot of QA to find the systems
 | 
			
		||||
  that reproduce such a specific problem!), do 'ahost www.secondlife.com',
 | 
			
		||||
  then do it again.  The first process's lookup will work, subsequent lookups
 | 
			
		||||
  will time-out and fail.
 | 
			
		||||
 | 
			
		||||
  The cause:
 | 
			
		||||
  * init_id_key() was calling randomize_key() *before* it initialized
 | 
			
		||||
  key->state, meaning that the randomness generated by randomize_key() is
 | 
			
		||||
  immediately overwritten with deterministic values. (/dev/urandom was also
 | 
			
		||||
  being read incorrectly in the c-ares version we were using, but this was
 | 
			
		||||
  fixed in a later version.)
 | 
			
		||||
  * This makes the stream of generated query-IDs from any new c-ares process
 | 
			
		||||
  be an identical and predictable sequence of IDs.
 | 
			
		||||
  * This makes the 2-Wire's default built-in DNS server detect these queries
 | 
			
		||||
  as probable-duplicates and (erroneously) not respond at all.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* Aug 4 2008 (Yang Tse)
 | 
			
		||||
- Autoconf 2.62 has changed the behaviour of the AC_AIX macro which we use.
 | 
			
		||||
  Prior versions of autoconf defined _ALL_SOURCE if _AIX was defined. 2.62
 | 
			
		||||
  version of AC_AIX defines _ALL_SOURCE and other four preprocessor symbols
 | 
			
		||||
  no matter if the system is AIX or not. To keep the traditional behaviour,
 | 
			
		||||
  and an uniform one across autoconf versions AC_AIX is replaced with our
 | 
			
		||||
  own internal macro CARES_CHECK_AIX_ALL_SOURCE.
 | 
			
		||||
 | 
			
		||||
* Aug 1 2008 (Yang Tse)
 | 
			
		||||
- Configure process now checks if the preprocessor _REENTRANT symbol is already
 | 
			
		||||
  defined. If it isn't currently defined a set of checks are performed to test
 | 
			
		||||
  if its definition is required to make visible to the compiler a set of *_r
 | 
			
		||||
  functions. Finally, if _REENTRANT is already defined or needed it takes care
 | 
			
		||||
  of making adjustments necessary to ensure that it is defined equally for the
 | 
			
		||||
  configure process tests and generated config file.
 | 
			
		||||
 | 
			
		||||
* Jul 20 2008 (Yang Tse)
 | 
			
		||||
- When recvfrom prototype uses a void pointer for arguments 2, 5 or 6 this will
 | 
			
		||||
  now cause the definition, as appropriate, of RECVFROM_TYPE_ARG2_IS_VOID,
 | 
			
		||||
  RECVFROM_TYPE_ARG5_IS_VOID or RECVFROM_TYPE_ARG6_IS_VOID.
 | 
			
		||||
 | 
			
		||||
* Jul 17 2008 (Yang Tse)
 | 
			
		||||
- RECVFROM_TYPE_ARG2, RECVFROM_TYPE_ARG5 and RECVFROM_TYPE_ARG6 are now defined
 | 
			
		||||
  to the data type pointed by its respective argument and not the pointer type.
 | 
			
		||||
 | 
			
		||||
* Jul 16 2008 (Yang Tse)
 | 
			
		||||
- Improved configure detection of number of arguments for getservbyport_r.
 | 
			
		||||
  Detection is now based on compilation checks instead of linker ones.
 | 
			
		||||
 | 
			
		||||
- Configure process now checks availability of recvfrom() socket function and
 | 
			
		||||
  finds out its return type and the types of its arguments. Added definitions
 | 
			
		||||
  for non-configure systems config files, and introduced macro sreadfrom which
 | 
			
		||||
  will be used on udp sockets as a recvfrom() wrapper in the future.
 | 
			
		||||
 | 
			
		||||
* Jul 15 2008 (Yang Tse)
 | 
			
		||||
- Introduce definition of _REENTRANT symbol in setup.h to improve library
 | 
			
		||||
  usability.  Previously the configure process only used the AC_SYS_LARGEFILE
 | 
			
		||||
  macro for debug builds, now it is also used for non-debug ones enabling the
 | 
			
		||||
  use of configure options --enable-largefile and --disable-largefile which
 | 
			
		||||
  might be needed for library compatibility.  Remove checking the size of
 | 
			
		||||
  curl_off_t, it is no longer needed.
 | 
			
		||||
 | 
			
		||||
* Jul 3 2008 (Daniel Stenberg)
 | 
			
		||||
- Phil Blundell: If you ask ares_gethostbyname() to do an AF_INET6 lookup and
 | 
			
		||||
  the target host has only A records, it automatically falls back to an
 | 
			
		||||
  AF_INET lookup and gives you the A results.  However, if the target host has
 | 
			
		||||
  a CNAME record, this behaviour is defeated since the original query does
 | 
			
		||||
  return some data even though ares_parse_aaa_reply() doesn't consider it
 | 
			
		||||
  relevant. Here's a small patch to make it behave the same with and without
 | 
			
		||||
  the CNAME.
 | 
			
		||||
 | 
			
		||||
* Jul 2 2008 (Yang Tse)
 | 
			
		||||
- Fallback to gettimeofday when monotonic clock is unavailable at run-time.
 | 
			
		||||
 | 
			
		||||
* Jun 30 2008 (Daniel Stenberg)
 | 
			
		||||
 | 
			
		||||
- As was pointed out to me by Andreas Schuldei, the MAXHOSTNAMELEN define is
 | 
			
		||||
  not posix or anything and thus c-ares failed to build on hurd (and possibly
 | 
			
		||||
  elsewhere). The define was also somewhat artificially used in the windows
 | 
			
		||||
  port. Now, I instead rewrote the use of gethostbyname to enlarge the host
 | 
			
		||||
  name buffer in case of need and totally avoid the use of the MAXHOSTNAMELEN
 | 
			
		||||
  define. I thus also removed the defien from the namser.h file where it was
 | 
			
		||||
  once added for the windows build.
 | 
			
		||||
 | 
			
		||||
  I also fixed init_by_defaults() function to not leak memory in case if
 | 
			
		||||
  error.
 | 
			
		||||
 | 
			
		||||
* Jun 9 2008 (Yang Tse)
 | 
			
		||||
 | 
			
		||||
- Make libcares.pc generated file for pkg-config include information relative
 | 
			
		||||
  to the libraries needed for the static linking of c-ares.
 | 
			
		||||
 | 
			
		||||
* May 30 2008 (Yang Tse)
 | 
			
		||||
 | 
			
		||||
- Brad House fixed a missing header file inclusion in adig sample program.
 | 
			
		||||
 | 
			
		||||
Version 1.5.2 (May 29, 2008)
 | 
			
		||||
 | 
			
		||||
* May 13 2008 (Daniel Stenberg)
 | 
			
		||||
 | 
			
		||||
- Introducing millisecond resolution support for the timeout option. See
 | 
			
		||||
  ares_init_options()'s ARES_OPT_TIMEOUTMS.
 | 
			
		||||
 | 
			
		||||
* May 9 2008 (Yang Tse)
 | 
			
		||||
 | 
			
		||||
- Use monotonic time source if available, for private function ares__tvnow()
 | 
			
		||||
 | 
			
		||||
* May 7 2008 (Daniel Stenberg)
 | 
			
		||||
 | 
			
		||||
- Sebastian made c-ares able to return all PTR-records when doing reverse
 | 
			
		||||
  lookups. It is not common practice to have multiple PTR-Records for a single
 | 
			
		||||
  IP, but its perfectly legal and some sites have those.
 | 
			
		||||
 | 
			
		||||
- Doug Goldstein provided a configure patch: updates autoconf 2.13 usage to
 | 
			
		||||
  autoconf 2.57 usage (which is the version you have specified as the minimum
 | 
			
		||||
  version). It's a minor change but it does clean up some warnings with newer
 | 
			
		||||
  autoconf (specifically 2.62).
 | 
			
		||||
 | 
			
		||||
* May 5 2008 (Yang Tse)
 | 
			
		||||
 | 
			
		||||
- Improved parsing of resolver configuration files.
 | 
			
		||||
 | 
			
		||||
* April 4 2008 (Daniel Stenberg)
 | 
			
		||||
 | 
			
		||||
- Eino Tuominen improved the code when a file is used to seed the randomizer.
 | 
			
		||||
 | 
			
		||||
- Alexey Simak made adig support NAPTR records
 | 
			
		||||
 | 
			
		||||
- Alexey Simak fixed the VC dsp file by adding the missing source file
 | 
			
		||||
  ares_expand_string.c
 | 
			
		||||
 | 
			
		||||
* December 11 2007 (Gisle Vanem)
 | 
			
		||||
 | 
			
		||||
- Added another sample application; acountry.c which converts an
 | 
			
		||||
  IPv4-address(es) and/or host-name(s) to country-name and country-code.
 | 
			
		||||
  This uses the service of the DNSBL at countries.nerd.dk.
 | 
			
		||||
 | 
			
		||||
* December 3 2007 (Daniel Stenberg)
 | 
			
		||||
 | 
			
		||||
- Brad Spencer fixed the configure script to assume that there's no
 | 
			
		||||
  /dev/urandom when built cross-compiled as then the script cannot check for
 | 
			
		||||
  it.
 | 
			
		||||
 | 
			
		||||
- Erik Kline cleaned up ares_gethostbyaddr.c:next_lookup() somewhat
 | 
			
		||||
 | 
			
		||||
Version 1.5.1 (Nov 21, 2007)
 | 
			
		||||
 | 
			
		||||
* November 21 2007 (Daniel Stenberg)
 | 
			
		||||
 | 
			
		||||
- Robin Cornelius pointed out that ares_llist.h was missing in the release
 | 
			
		||||
  archive for 1.5.0
 | 
			
		||||
 | 
			
		||||
Version 1.5.0 (Nov 21, 2007)
 | 
			
		||||
 | 
			
		||||
* October 2 2007 (Daniel Stenberg)
 | 
			
		||||
 | 
			
		||||
- ares_strerror() segfaulted if the input error number was out of the currently
 | 
			
		||||
  supported range.
 | 
			
		||||
 | 
			
		||||
- Yang Tse: Avoid a segfault when generating a DNS "Transaction ID" in
 | 
			
		||||
  internal function init_id_key() under low memory conditions.
 | 
			
		||||
 | 
			
		||||
* September 28 2007 (Daniel Stenberg)
 | 
			
		||||
 | 
			
		||||
- Bumped version to 1.5.0 for next release and soname bumped to 2 due to ABI
 | 
			
		||||
  and API changes in the progress callback (and possibly more coming up from
 | 
			
		||||
  Steinar)
 | 
			
		||||
 | 
			
		||||
* September 28 2007 (Steinar H. Gunderson)
 | 
			
		||||
 | 
			
		||||
- Don't skip a server if it's the only one. (Bugfix from the Google tree.)
 | 
			
		||||
 | 
			
		||||
- Made the query callbacks receive the number of timeouts that happened during
 | 
			
		||||
  the execution of a query, and updated documentation accordingly. (Patch from
 | 
			
		||||
  the Google tree.)
 | 
			
		||||
 | 
			
		||||
- Support a few more socket options: ARES_OPT_SOCK_SNDBUF and
 | 
			
		||||
  ARES_OPT_SOCK_RCVBUF
 | 
			
		||||
 | 
			
		||||
- Always register for TCP events even if there are no outstanding queries, as
 | 
			
		||||
  the other side could always close the connection, which is a valid event
 | 
			
		||||
  which should be responded to.
 | 
			
		||||
 | 
			
		||||
* September 22 2007 (Daniel Stenberg)
 | 
			
		||||
 | 
			
		||||
- Steinar H. Gunderson fixed: Correctly clear sockets from the fd_set on in
 | 
			
		||||
  several functions (write_tcp_data, read_tcp_data, read_udp_packets) so that
 | 
			
		||||
  if it fails and the socket is closed the following code doesn't try to use
 | 
			
		||||
  the file descriptor.
 | 
			
		||||
 | 
			
		||||
- Steinar H. Gunderson modified c-ares to now also do to DNS retries even when
 | 
			
		||||
  TCP is used since there are several edge cases where it still makes sense.
 | 
			
		||||
 | 
			
		||||
- Brad House provided a fix for ares_save_options():
 | 
			
		||||
 | 
			
		||||
  Apparently I overlooked something with the ares_save_options() where it
 | 
			
		||||
  would try to do a malloc(0) when no options of that type needed to be saved.
 | 
			
		||||
  On most platforms, this was fine because malloc(0) doesn't actually return
 | 
			
		||||
  NULL, but on AIX it does, so ares_save_options would return ARES_ENOMEM.
 | 
			
		||||
 | 
			
		||||
* July 14 2007 (Daniel Stenberg)
 | 
			
		||||
 | 
			
		||||
- Vlad Dinulescu fixed two outstanding valgrind reports:
 | 
			
		||||
 | 
			
		||||
  1. In ares_query.c , in find_query_by_id we compare q->qid (which is a short
 | 
			
		||||
  int variable) with qid, which is declared as an int variable.  Moreover,
 | 
			
		||||
  DNS_HEADER_SET_QID is used to set the value of qid, but DNS_HEADER_SET_QID
 | 
			
		||||
  sets only the first two bytes of qid. I think that qid should be declared as
 | 
			
		||||
  "unsigned short" in this function.
 | 
			
		||||
 | 
			
		||||
  2. The same problem occurs in ares_process.c, process_answer() .  query->qid
 | 
			
		||||
  (an unsigned short integer variable) is compared with id, which is an
 | 
			
		||||
  integer variable. Moreover, id is initialized from DNS_HEADER_QID which sets
 | 
			
		||||
  only the first two bytes of id. I think that the id variable should be
 | 
			
		||||
  declared as "unsigned short" in this function.
 | 
			
		||||
 | 
			
		||||
  Even after declaring these variables as "unsigned short", the valgrind
 | 
			
		||||
  errors are still there. Which brings us to the third problem.
 | 
			
		||||
 | 
			
		||||
  3. The third problem is that Valgrind assumes that query->qid is not
 | 
			
		||||
  initialised correctly. And it does that because query->qid is set from
 | 
			
		||||
  DNS_HEADER_QID(qbuf); Valgrind says that qbuf has unitialised bytes. And
 | 
			
		||||
  qbuf has uninitialised bytes because of channel->next_id . And next_id is
 | 
			
		||||
  set by ares_init.c:ares__generate_new_id() . I found that putting short r=0
 | 
			
		||||
  in this function (instead of short r) makes all Valgrind warnings go away.
 | 
			
		||||
  I have studied ares__rc4() too, and this is the offending line:
 | 
			
		||||
 | 
			
		||||
        buffer_ptr[counter] ^= state[xorIndex];   (ares_query.c:62)
 | 
			
		||||
 | 
			
		||||
  This is what triggers Valgrind.. buffer_ptr is unitialised in this function,
 | 
			
		||||
  and by applying ^= on it, it remains unitialised.
 | 
			
		||||
 | 
			
		||||
Version 1.4.0 (June 8, 2007)
 | 
			
		||||
 | 
			
		||||
* June 4 2007 (Daniel Stenberg)
 | 
			
		||||
 | 
			
		||||
- James Bursa reported a major memory problem when resolving multi-IP names
 | 
			
		||||
  and I found and fixed the problem. It was added by Ashish Sharma's patch
 | 
			
		||||
  two days ago.
 | 
			
		||||
 | 
			
		||||
  When I then tried to verify multiple entries in /etc/hosts after my fix, I
 | 
			
		||||
  got another segfault and decided this code was not ripe for inclusion and I
 | 
			
		||||
  reverted the patch.
 | 
			
		||||
 | 
			
		||||
* June 2 2007
 | 
			
		||||
 | 
			
		||||
- Brad Spencer found and fixed three flaws in the code, found with the new
 | 
			
		||||
  gcc 4.2.0 warning: -Waddress
 | 
			
		||||
 | 
			
		||||
- Brad House fixed VS2005 compiler warnings due to time_t being 64bit.
 | 
			
		||||
  He also made recent Microsoft compilers use _strdup() instead of strdup().
 | 
			
		||||
 | 
			
		||||
- Brad House's man pages for ares_save_options() and ares_destroy_options()
 | 
			
		||||
  were added.
 | 
			
		||||
 | 
			
		||||
- Ashish Sharma provided a patch for supporting multiple entries in the
 | 
			
		||||
  /etc/hosts file. Patch edited for coding style and functionality by me
 | 
			
		||||
  (Daniel).
 | 
			
		||||
 | 
			
		||||
* May 30 2007
 | 
			
		||||
 | 
			
		||||
- Shmulik Regev brought cryptographically secure transaction IDs:
 | 
			
		||||
 | 
			
		||||
  The c-ares library implementation uses a DNS "Transaction ID" field that is
 | 
			
		||||
  seeded with a pseudo random number (based on gettimeofday) which is
 | 
			
		||||
  incremented (++) between consecutive calls and is therefore rather
 | 
			
		||||
  predictable. In general, predictability of DNS Transaction ID is a well
 | 
			
		||||
  known security problem (e.g.
 | 
			
		||||
  http://bak.spc.org/dms/archive/dns_id_attack.txt) and makes a c-ares based
 | 
			
		||||
  implementation vulnerable to DNS poisoning. Credit goes to Amit Klein
 | 
			
		||||
  (Trusteer) for identifying this problem.
 | 
			
		||||
 | 
			
		||||
  The patch I wrote changes the implementation to use a more secure way of
 | 
			
		||||
  generating unique IDs. It starts by obtaining a key with reasonable entropy
 | 
			
		||||
  which is used with an RC4 stream to generate the cryptographically secure
 | 
			
		||||
  transaction IDs.
 | 
			
		||||
 | 
			
		||||
  Note that the key generation code (in ares_init:randomize_key) has two
 | 
			
		||||
  versions, the Windows specific one uses a cryptographically safe function
 | 
			
		||||
  provided (but undocumented :) by the operating system (described at
 | 
			
		||||
  http://blogs.msdn.com/michael_howard/archive/2005/01/14/353379.aspx).  The
 | 
			
		||||
  default implementation is a bit naive and uses the standard 'rand'
 | 
			
		||||
  function. Surely a better way to generate random keys exists for other
 | 
			
		||||
  platforms.
 | 
			
		||||
 | 
			
		||||
  The patch can be tested by using the adig utility and using the '-s' option.
 | 
			
		||||
 | 
			
		||||
- Brad House added ares_save_options() and ares_destroy_options() that can be
 | 
			
		||||
  used to keep options for later re-usal when ares_init_options() is used.
 | 
			
		||||
 | 
			
		||||
  Problem: Calling ares_init() for each lookup can be unnecessarily resource
 | 
			
		||||
         intensive.  On windows, it must LoadLibrary() or search the registry
 | 
			
		||||
         on each call to ares_init().  On unix, it must read and parse
 | 
			
		||||
         multiple files to obtain the necessary configuration information.  In
 | 
			
		||||
         a single-threaded environment, it would make sense to only
 | 
			
		||||
         ares_init() once, but in a heavily multi-threaded environment, it is
 | 
			
		||||
         undesirable to ares_init() and ares_destroy() for each thread created
 | 
			
		||||
         and track that.
 | 
			
		||||
 | 
			
		||||
  Solution: Create ares_save_options() and ares_destroy_options() functions to
 | 
			
		||||
         retrieve and free options obtained from an initialized channel.  The
 | 
			
		||||
         options populated can be used to pass back into ares_init_options(),
 | 
			
		||||
         it should populate all needed fields and not retrieve any information
 | 
			
		||||
         from the system.  Probably wise to destroy the cache every minute or
 | 
			
		||||
         so to prevent the data from becoming stale.
 | 
			
		||||
 | 
			
		||||
- Daniel S added ares_process_fd() to allow applications to ask for processing
 | 
			
		||||
  on specific sockets and thus avoiding select() and associated
 | 
			
		||||
  functions/macros.  This function will be used by upcoming libcurl releases
 | 
			
		||||
  for this very reason. It also made me export the ares_socket_t type in the
 | 
			
		||||
  public ares.h header file, since ares_process_fd() uses that type for two of
 | 
			
		||||
  the arguments.
 | 
			
		||||
 | 
			
		||||
* May 25 2007
 | 
			
		||||
 | 
			
		||||
- Ravi Pratap fixed a flaw in the init_by_resolv_conf() function for windows
 | 
			
		||||
  that could cause it to return a bad return code.
 | 
			
		||||
 | 
			
		||||
* April 16 2007
 | 
			
		||||
 | 
			
		||||
- Yang Tse: Provide ares_getopt() command-line parser function as a source
 | 
			
		||||
  code helper function, not belonging to the actual c-ares library.
 | 
			
		||||
 | 
			
		||||
* February 19 2007
 | 
			
		||||
 | 
			
		||||
- Vlad Dinulescu added ares_parse_ns_reply().
 | 
			
		||||
 | 
			
		||||
* February 13 2007
 | 
			
		||||
 | 
			
		||||
- Yang Tse: Fix failure to get the search sequence of /etc/hosts and
 | 
			
		||||
  DNS from /etc/nsswitch.conf, /etc/host.conf or /etc/svc.conf when
 | 
			
		||||
  /etc/resolv.conf did not exist or was unable to read it.
 | 
			
		||||
 | 
			
		||||
* November 22 2006
 | 
			
		||||
 | 
			
		||||
- Install ares_dns.h too
 | 
			
		||||
 | 
			
		||||
- Michael Wallner fixed this problem: When I set domains in the options
 | 
			
		||||
  struct, and there are domain/search entries in /etc/resolv.conf, the domains
 | 
			
		||||
  of the options struct will be overridden.
 | 
			
		||||
 | 
			
		||||
* November 6 2006
 | 
			
		||||
 | 
			
		||||
- Yang Tse removed a couple of potential zero size memory allocations.
 | 
			
		||||
 | 
			
		||||
- Andreas Rieke fixed the line endings in the areslib.dsp file that I (Daniel)
 | 
			
		||||
  broke in the 1.3.2 release. We should switch to a system where that file is
 | 
			
		||||
  auto-generated. We could rip some code for that from curl...
 | 
			
		||||
 | 
			
		||||
Version 1.3.2 (November 3, 2006)
 | 
			
		||||
 | 
			
		||||
* October 12 2006
 | 
			
		||||
 | 
			
		||||
- Prevent ares_getsock() to overflow if more than 16 sockets are used.
 | 
			
		||||
 | 
			
		||||
* September 11 2006
 | 
			
		||||
 | 
			
		||||
- Guilherme Balena Versiani: I noted a strange BUG in Win32 port
 | 
			
		||||
  (ares_init.c/get_iphlpapi_dns_info() function): when I disable the network
 | 
			
		||||
  by hand or disconnect the network cable in Windows 2000 or Windows XP, my
 | 
			
		||||
  application gets 127.0.0.1 as the only name server. The problem comes from
 | 
			
		||||
  'GetNetworkParams' function, that returns the empty string "" as the only
 | 
			
		||||
  name server in that case. Moreover, the Windows implementation of
 | 
			
		||||
  inet_addr() returns INADDR_LOOPBACK instead of INADDR_NONE.
 | 
			
		||||
 | 
			
		||||
* August 29 2006
 | 
			
		||||
 | 
			
		||||
- Brad Spencer did
 | 
			
		||||
 | 
			
		||||
  o made ares_version.h use extern "C" for c++ compilers
 | 
			
		||||
  o fixed compiler warnings in ares_getnameinfo.c
 | 
			
		||||
  o fixed a buffer position init for TCP reads
 | 
			
		||||
 | 
			
		||||
* August 3 2006
 | 
			
		||||
 | 
			
		||||
- Ravi Pratap fixed ares_getsock() to actually return the proper bitmap and
 | 
			
		||||
  not always zero!
 | 
			
		||||
 | 
			
		||||
Version 1.3.1 (June 24, 2006)
 | 
			
		||||
 | 
			
		||||
* July 23, 2006
 | 
			
		||||
 | 
			
		||||
- Gisle Vanem added getopt() to the ahost program. Currently accepts
 | 
			
		||||
  only [-t {a|aaaa}] to specify address family in ares_gethostbyname().
 | 
			
		||||
 | 
			
		||||
* June 19, 2006
 | 
			
		||||
 | 
			
		||||
- (wahern) Removed "big endian" DNS section and RR data integer parser
 | 
			
		||||
  macros from ares_dns.h, which break c-ares on my Sparc64. Bit-wise
 | 
			
		||||
  operations in C operate on logical values. And in any event the octets are
 | 
			
		||||
  already in big-endian (aka network) byte order so they're being reversed
 | 
			
		||||
  (thus the source of the breakage).
 | 
			
		||||
 | 
			
		||||
* June 18, 2006
 | 
			
		||||
 | 
			
		||||
- William Ahern handles EAGAIN/EWOULDBLOCK errors in most of the I/O calls
 | 
			
		||||
  from area_process.c.
 | 
			
		||||
 | 
			
		||||
  TODO: Handle one last EAGAIN for a UDP socket send(2) in
 | 
			
		||||
  ares__send_query().
 | 
			
		||||
 | 
			
		||||
* May 10, 2006
 | 
			
		||||
 | 
			
		||||
- Bram Matthys brought my attention to a libtool peculiarity where detecting
 | 
			
		||||
  things such as C++ compiler actually is a bad thing and since we don't need
 | 
			
		||||
  that detection I added a work-around, much inspired by a previous patch by
 | 
			
		||||
  Paolo Bonzini. This also shortens the configure script quite a lot.
 | 
			
		||||
 | 
			
		||||
* May 3, 2006
 | 
			
		||||
 | 
			
		||||
- Nick Mathewson added the ARES_OPT_SOCK_STATE_CB option that when set makes
 | 
			
		||||
  c-ares call a callback on socket state changes. A better way than the
 | 
			
		||||
  ares_getsock() to get full control over the socket state.
 | 
			
		||||
 | 
			
		||||
* January 9, 2006
 | 
			
		||||
 | 
			
		||||
- Alexander Lazic improved the getservbyport_r() configure check.
 | 
			
		||||
 | 
			
		||||
* January 6, 2006
 | 
			
		||||
 | 
			
		||||
- Alexander Lazic pointed out that the buildconf should use the ACLOCAL_FLAGS
 | 
			
		||||
  variable for easier controlling what it does and how it runs.
 | 
			
		||||
 | 
			
		||||
* January 5, 2006
 | 
			
		||||
 | 
			
		||||
- James Bursa fixed c-ares to find the hosts file on RISC OS, and made it
 | 
			
		||||
  build with newer gcc versions that no longer defines "riscos".
 | 
			
		||||
 | 
			
		||||
* December 22
 | 
			
		||||
 | 
			
		||||
- Daniel Stenberg added ares_getsock() that extracts the set of sockets to
 | 
			
		||||
  wait for action on. Similar to ares_fds() but not restricted to using
 | 
			
		||||
  select() for the waiting.
 | 
			
		||||
 | 
			
		||||
* November 25
 | 
			
		||||
 | 
			
		||||
- Yang Tse fixed some send() / recv() compiler warnings
 | 
			
		||||
 | 
			
		||||
* September 18
 | 
			
		||||
 | 
			
		||||
- Added constants that will be used by ares_getaddrinfo
 | 
			
		||||
 | 
			
		||||
- Made ares_getnameinfo use the reentrant getservbyport (getservbyport_r) if it
 | 
			
		||||
  is available to ensure it works properly in a threaded environment.
 | 
			
		||||
 | 
			
		||||
* September 10
 | 
			
		||||
 | 
			
		||||
- configure fix for detecting a member in the sockaddr_in6 struct which failed
 | 
			
		||||
  on ipv6-enabled HP-UX 11.00
 | 
			
		||||
 | 
			
		||||
Version 1.3.0 (August 29, 2005)
 | 
			
		||||
 | 
			
		||||
* August 21
 | 
			
		||||
 | 
			
		||||
- Alfredo Tupone provided a fix for the Windows code in get_iphlpapi_dns_info()
 | 
			
		||||
  when getting the DNS server etc.
 | 
			
		||||
 | 
			
		||||
* June 19
 | 
			
		||||
 | 
			
		||||
- Added some checks for the addrinfo structure.
 | 
			
		||||
 | 
			
		||||
* June 2
 | 
			
		||||
 | 
			
		||||
- William Ahern:
 | 
			
		||||
 | 
			
		||||
  Make UDP sockets non-blocking. I've confirmed that at least on Linux 2.4 a
 | 
			
		||||
  read event can come back from poll() on a valid SOCK_DGRAM socket but
 | 
			
		||||
  recv(2) will still block. This patch doesn't ignore EAGAIN in
 | 
			
		||||
  read_udp_packets(), though maybe it should. (This patch was edited by Daniel
 | 
			
		||||
  Stenberg and a new configure test was added (imported from curl's configure)
 | 
			
		||||
  to properly detect what non-blocking socket approach to use.)
 | 
			
		||||
 | 
			
		||||
  I'm not quite sure how this was happening, but I've been seeing PTR queries
 | 
			
		||||
  which seem to return empty responses. At least, they were empty when calling
 | 
			
		||||
  ares_expand_name() on the record. Here's a patch which guarantees to
 | 
			
		||||
  NUL-terminate the expanded name. The old behavior failed to NUL-terminate if
 | 
			
		||||
  len was 0, and this was causing strlen() to run past the end of the buffer
 | 
			
		||||
  after calling ares_expand_name() and getting ARES_SUCCESS as the return
 | 
			
		||||
  value. If q is not greater than *s then it's equal and *s is always
 | 
			
		||||
  allocated with at least one byte.
 | 
			
		||||
 | 
			
		||||
* May 16
 | 
			
		||||
 | 
			
		||||
- Added ares_getnameinfo which mimics the getnameinfo API (another feature
 | 
			
		||||
  that could use testing).
 | 
			
		||||
 | 
			
		||||
* May 14
 | 
			
		||||
 | 
			
		||||
- Added an inet_ntop function from BIND for systems that do not have it.
 | 
			
		||||
 | 
			
		||||
* April 9
 | 
			
		||||
 | 
			
		||||
- Made sortlist support IPv6 (this can probably use some testing).
 | 
			
		||||
 | 
			
		||||
- Made sortlist support CIDR matching for IPv4.
 | 
			
		||||
 | 
			
		||||
* April 8
 | 
			
		||||
 | 
			
		||||
- Added preliminary IPv6 support to ares_gethostbyname. Currently, sortlist
 | 
			
		||||
  does not work with IPv6. Also provided an implementation of bitncmp from
 | 
			
		||||
  BIND for systems that do not supply this function. This will be used to add
 | 
			
		||||
  IPv6 support to sortlist.
 | 
			
		||||
 | 
			
		||||
- Made ares_gethostbyaddr support IPv6 by specifying AF_INET6 as the family.
 | 
			
		||||
  The function can lookup IPv6 addresses both from files (/etc/hosts) and
 | 
			
		||||
  DNS lookups.
 | 
			
		||||
 | 
			
		||||
* April 7
 | 
			
		||||
 | 
			
		||||
- Tupone Alfredo fixed includes of arpa/nameser_compat.h to build fine on Mac
 | 
			
		||||
  OS X.
 | 
			
		||||
 | 
			
		||||
* April 5
 | 
			
		||||
 | 
			
		||||
- Dominick Meglio: Provided implementations of inet_net_pton and inet_pton
 | 
			
		||||
  from BIND for systems that do not include these functions.
 | 
			
		||||
 | 
			
		||||
* March 11, 2005
 | 
			
		||||
 | 
			
		||||
- Dominick Meglio added ares_parse_aaaa_reply.c and did various
 | 
			
		||||
  adjustments. The first little steps towards IPv6 support!
 | 
			
		||||
 | 
			
		||||
* November 7
 | 
			
		||||
 | 
			
		||||
- Fixed the VC project and makefile to use ares_cancel and ares_version
 | 
			
		||||
 | 
			
		||||
* October 24
 | 
			
		||||
 | 
			
		||||
- The released ares_version.h from 1.2.1 says 1.2.0 due to a maketgz flaw.
 | 
			
		||||
  This is now fixed.
 | 
			
		||||
 | 
			
		||||
Version 1.2.1 (October 20, 2004)
 | 
			
		||||
 | 
			
		||||
* September 29
 | 
			
		||||
 | 
			
		||||
- Henrik Stoerner fix: got a report that Tru64 Unix (the unix from Digital
 | 
			
		||||
  when they made Alpha's) uses /etc/svc.conf for the purpose fixed below for
 | 
			
		||||
  other OSes. He made c-ares check for and understand it if present.
 | 
			
		||||
 | 
			
		||||
- Now c-ares will use local host name lookup _before_ DNS resolving by default
 | 
			
		||||
  if nothing else is told.
 | 
			
		||||
 | 
			
		||||
* September 26
 | 
			
		||||
 | 
			
		||||
- Henrik Stoerner: found out that c-ares does not look at the /etc/host.conf
 | 
			
		||||
  file to determine the sequence in which to search /etc/hosts and DNS.  So on
 | 
			
		||||
  systems where this order is defined by /etc/host.conf instead of a "lookup"
 | 
			
		||||
  entry in /etc/resolv.conf, c-ares will always default to looking in DNS
 | 
			
		||||
  first, and /etc/hosts second.
 | 
			
		||||
 | 
			
		||||
  c-ares now looks at
 | 
			
		||||
 | 
			
		||||
  1) resolv.conf (for the "lookup" line);
 | 
			
		||||
  2) nsswitch.fon (for the "hosts:" line);
 | 
			
		||||
  3) host.conf (for the "order" line).
 | 
			
		||||
 | 
			
		||||
  First match wins.
 | 
			
		||||
 | 
			
		||||
- Dominick Meglio patched: C-ares on Windows assumed that the HOSTS file is
 | 
			
		||||
  located in a static location. It assumed
 | 
			
		||||
  C:\Windows\System32\Drivers\Etc. This is a poor assumption to make. In fact,
 | 
			
		||||
  the location of the HOSTS file can be changed via a registry setting.
 | 
			
		||||
 | 
			
		||||
  There is a key called DatabasePath which specifies the path to the HOSTS
 | 
			
		||||
  file:
 | 
			
		||||
  http://www.microsoft.com/technet/itsolutions/network/deploy/depovg/tcpip2k.mspx
 | 
			
		||||
 | 
			
		||||
  The patch will make c-ares correctly consult the registry for the location
 | 
			
		||||
  of this file.
 | 
			
		||||
 | 
			
		||||
* August 29
 | 
			
		||||
 | 
			
		||||
- Gisle Vanem fixed the MSVC build files.
 | 
			
		||||
 | 
			
		||||
* August 20
 | 
			
		||||
 | 
			
		||||
- Gisle Vanem made c-ares build and work with his Watt-32 TCP/IP stack.
 | 
			
		||||
 | 
			
		||||
* August 13
 | 
			
		||||
 | 
			
		||||
- Harshal Pradhan made a minor syntax change in ares_init.c to make it build
 | 
			
		||||
  fine with MSVC 7.1
 | 
			
		||||
 | 
			
		||||
* July 24
 | 
			
		||||
 | 
			
		||||
- Made the lib get built static only if --enable-debug is used.
 | 
			
		||||
 | 
			
		||||
- Gisle Vanem fixed:
 | 
			
		||||
 | 
			
		||||
  Basically in loops like handle_errors(), 'query->next' was assigned a local
 | 
			
		||||
  variable and then query was referenced after the memory was freed by
 | 
			
		||||
  next_server(). I've changed that so next_server() and end_query() returns
 | 
			
		||||
  the next query. So callers should use this ret-value.
 | 
			
		||||
 | 
			
		||||
  The next problem was that 'server->tcp_buffer_pos' had a random value at
 | 
			
		||||
  entry to 1st recv() (luckily causing Winsock to return ENOBUFS).
 | 
			
		||||
 | 
			
		||||
  I've also added a ares_writev() for Windows to streamline the code a bit
 | 
			
		||||
  more.
 | 
			
		||||
 | 
			
		||||
* July 20
 | 
			
		||||
- Fixed a few variable return types for some system calls. Made configure
 | 
			
		||||
  check for ssize_t to make it possible to use that when receiving the send()
 | 
			
		||||
  error code. This is necessary to prevent compiler warnings on some systems.
 | 
			
		||||
 | 
			
		||||
- Made configure create config.h, and all source files now include setup.h that
 | 
			
		||||
  might include the proper config.h (or a handicrafted alternative).
 | 
			
		||||
 | 
			
		||||
- Switched to 'ares_socket_t' type for sockets in ares, since Windows don't
 | 
			
		||||
  use 'int' for that.
 | 
			
		||||
 | 
			
		||||
- automake-ified and libool-ified c-ares. Now it builds libcares as a shared
 | 
			
		||||
  lib on most platforms if wanted. (This bloated the size of the release
 | 
			
		||||
  archive with another 200K!)
 | 
			
		||||
 | 
			
		||||
- Makefile.am now uses Makefile.inc for the c sources, h headers and man
 | 
			
		||||
  pages, to make it easier for other makefiles to use the exact same set of
 | 
			
		||||
  files.
 | 
			
		||||
 | 
			
		||||
- Adjusted 'maketgz' to use the new automake magic when building distribution
 | 
			
		||||
  archives.
 | 
			
		||||
 | 
			
		||||
- Anyone desires HTML and/or PDF versions of the man pages in the release
 | 
			
		||||
  archives?
 | 
			
		||||
 | 
			
		||||
* July 3
 | 
			
		||||
- G<>nter Knauf made c-ares build and run on Novell Netware.
 | 
			
		||||
 | 
			
		||||
* July 1
 | 
			
		||||
- Gisle Vanem provided Makefile.dj to build with djgpp, added a few more djgpp
 | 
			
		||||
  fixes and made ares not use 'errno' to provide further info on Windows.
 | 
			
		||||
 | 
			
		||||
* June 30
 | 
			
		||||
- Gisle Vanem made it build with djgpp and run fine with the Watt-32 stack.
 | 
			
		||||
 | 
			
		||||
* June 10
 | 
			
		||||
- Gisle Vanem's init patch for Windows:
 | 
			
		||||
 | 
			
		||||
  The init_by_resolv_conf() function fetches the DNS-server(s)
 | 
			
		||||
  from a series of registry branches.
 | 
			
		||||
 | 
			
		||||
  This can be wrong in the case where DHCP has assigned nameservers, but the
 | 
			
		||||
  user has overridden these servers with other prefered settings. Then it's
 | 
			
		||||
  wrong to use the DHCPNAMESERVER setting in registry.
 | 
			
		||||
 | 
			
		||||
  In the case of no global DHCP-assigned or fixed servers, but DNS server(s)
 | 
			
		||||
  per adapter, one has to query the adapter branches.  But how can c-ares know
 | 
			
		||||
  which adapter is valid for use? AFAICS it can't. There could be one adapter
 | 
			
		||||
  that is down (e.g. a VPN adapter).
 | 
			
		||||
 | 
			
		||||
  So it's better to leave this to the IP Helper API (iphlapi) available in
 | 
			
		||||
  Win-98/2000 and later. My patch falls-back to the old way if not available.
 | 
			
		||||
 | 
			
		||||
* June 8
 | 
			
		||||
- James Bursa fixed an init issue for RISC OS.
 | 
			
		||||
 | 
			
		||||
* May 11
 | 
			
		||||
- Nico Stappenbelt reported that when processing domain and search lines in
 | 
			
		||||
  the resolv.conf file, the first entry encountered is processed and used as
 | 
			
		||||
  the search list. According to the manual pages for both Linux, Solaris and
 | 
			
		||||
  Tru64, the last entry of either a domain or a search field is used.
 | 
			
		||||
 | 
			
		||||
  This is now adjusted in the code
 | 
			
		||||
 | 
			
		||||
Version 1.2.0 (April 13, 2004)
 | 
			
		||||
 | 
			
		||||
* April 2, 2004
 | 
			
		||||
- Updated various man pages to look nicer when converted to HTML on the web
 | 
			
		||||
  site.
 | 
			
		||||
 | 
			
		||||
* April 1, 2004
 | 
			
		||||
- Dirk Manske provided a new function that is now named ares_cancel(). It is
 | 
			
		||||
  used to cancel/cleanup a resolve/request made using ares functions on the
 | 
			
		||||
  given ares channel. It does not destroy/kill the ares channel itself.
 | 
			
		||||
 | 
			
		||||
- Dominick Meglio cleaned up the formatting in several man pages.
 | 
			
		||||
 | 
			
		||||
* March 30, 2004
 | 
			
		||||
- Dominick Meglio's new ares_expand_string. A helper function when decoding
 | 
			
		||||
  incoming DNS packages.
 | 
			
		||||
 | 
			
		||||
- Daniel Stenberg modified the Makefile.in to use a for loop for the man page
 | 
			
		||||
  installation to improve overview and make it easier to add man pages.
 | 
			
		||||
 | 
			
		||||
Version 1.1.0 (March 11, 2004)
 | 
			
		||||
 | 
			
		||||
* March 9, 2004
 | 
			
		||||
- Gisle Vanem improved build on Windows.
 | 
			
		||||
 | 
			
		||||
* February 25, 2004
 | 
			
		||||
- Dan Fandrich found a flaw in the Feb 22 fix.
 | 
			
		||||
 | 
			
		||||
- Added better configure --enable-debug logic (taken from the curl configure
 | 
			
		||||
  script). Added acinclude.m4 to the tarball.
 | 
			
		||||
 | 
			
		||||
* February 23, 2004
 | 
			
		||||
- Removed ares_free_errmem(), the function, the file and the man page. It was
 | 
			
		||||
  not used and it did nothing.
 | 
			
		||||
 | 
			
		||||
- Fixed a lot of code that wasn't "64bit clean" and thus caused a lot of
 | 
			
		||||
  compiler warnings on picky compilers.
 | 
			
		||||
 | 
			
		||||
* February 22, 2004
 | 
			
		||||
- Dominick Meglio made ares init support multiple name servers in the
 | 
			
		||||
  NameServer key on Windows.
 | 
			
		||||
 | 
			
		||||
* February 16, 2004
 | 
			
		||||
- Modified ares_private.h to include libcurl's memory debug header if
 | 
			
		||||
  CURLDEBUG is set. This makes all the ares-functions supervised properly by
 | 
			
		||||
  the curl test suite. This also forced me to add inclusion of the
 | 
			
		||||
  ares_private.h header in a few more files that are using some kind of
 | 
			
		||||
  memory-related resources.
 | 
			
		||||
 | 
			
		||||
- Made the makefile only build ahost and adig if 'make demos' is used.
 | 
			
		||||
 | 
			
		||||
* February 10, 2004
 | 
			
		||||
- Dirk Manske made ares_version.h installed with 'make install'
 | 
			
		||||
 | 
			
		||||
* February 4, 2004
 | 
			
		||||
- ares_free_errmem() is subject for removal, it is simply present for future
 | 
			
		||||
  purposes, and since we removed the extra parameter in strerror() it won't
 | 
			
		||||
  be used by c-ares!
 | 
			
		||||
- configure --enable-debug now enables picky compiler options if gcc is used
 | 
			
		||||
- fixed several compiler warnings --enable-debug showed and Joerg Mueller-Tolk
 | 
			
		||||
  reported
 | 
			
		||||
 | 
			
		||||
Version 1.0.0 (February 3, 2004)
 | 
			
		||||
 | 
			
		||||
* February 3, 2004
 | 
			
		||||
- now we produce the libcares.a library instead of the previous libares.a
 | 
			
		||||
  since we are no longer compatible
 | 
			
		||||
 | 
			
		||||
* February 2, 2004
 | 
			
		||||
 | 
			
		||||
- ares_strerror() has one argument less. This is the first official
 | 
			
		||||
  modification of the existing provided ares API.
 | 
			
		||||
 | 
			
		||||
* January 29, 2004
 | 
			
		||||
 | 
			
		||||
- Dirk Manske fixed how the socket is set non-blocking.
 | 
			
		||||
 | 
			
		||||
* January 4, 2004
 | 
			
		||||
 | 
			
		||||
- Dominick Meglio made the private gettimeofday() become ares_gettimeofday()
 | 
			
		||||
  instead in order to not pollute the name space and risk colliding with
 | 
			
		||||
  other libraries' versions of this function.
 | 
			
		||||
 | 
			
		||||
* October 24, 2003. Daniel Stenberg
 | 
			
		||||
 | 
			
		||||
  Added ares_version().
 | 
			
		||||
 | 
			
		||||
Version 1.0-pre1 (8 October 2003)
 | 
			
		||||
 | 
			
		||||
- James Bursa made it run on RISC OS
 | 
			
		||||
 | 
			
		||||
- Dominick Meglio made it run fine on NT4
 | 
			
		||||
 | 
			
		||||
- Duncan Wilcox made it work fine on Mac OS X
 | 
			
		||||
 | 
			
		||||
- Daniel Stenberg adjusted the windows port
 | 
			
		||||
 | 
			
		||||
- liren at vivisimo.com made the initial windows port
 | 
			
		||||
 | 
			
		||||
* Imported the sources from ares 1.1.1
 | 
			
		||||
							
								
								
									
										117
									
								
								ares/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										117
									
								
								ares/Makefile.am
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,117 @@
 | 
			
		||||
AUTOMAKE_OPTIONS = foreign nostdinc
 | 
			
		||||
 | 
			
		||||
ACLOCAL_AMFLAGS = -I m4
 | 
			
		||||
 | 
			
		||||
# Specify our include paths here, and do it relative to $(top_srcdir) and
 | 
			
		||||
# $(top_builddir), to ensure that these paths which belong to the library
 | 
			
		||||
# being currently built and tested are searched before the library which
 | 
			
		||||
# might possibly already be installed in the system.
 | 
			
		||||
#
 | 
			
		||||
# When using the low-level hard-hacking memory leak tracking code from
 | 
			
		||||
# libcurl the generated curl/curlbuild.h file must also be reachable.
 | 
			
		||||
# Using the libcurl lowlevel code from within c-ares library is ugly and
 | 
			
		||||
# only works when c-ares is built and linked with a similarly debug-build
 | 
			
		||||
# libcurl, but we do this anyway for convenience.
 | 
			
		||||
#
 | 
			
		||||
# $(top_builddir)/../include is for libcurl's generated curl/curlbuild.h file
 | 
			
		||||
# $(top_builddir) is for c-ares's generated config.h file
 | 
			
		||||
# $(top_srcdir) is for c-ares's lib/setup.h and other "c-ares-private" files
 | 
			
		||||
 | 
			
		||||
if CURLDEBUG
 | 
			
		||||
INCLUDES = -I$(top_builddir)/../include \
 | 
			
		||||
           -I$(top_builddir)            \
 | 
			
		||||
           -I$(top_srcdir)
 | 
			
		||||
else
 | 
			
		||||
INCLUDES = -I$(top_builddir) \
 | 
			
		||||
           -I$(top_srcdir)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
lib_LTLIBRARIES = libcares.la
 | 
			
		||||
 | 
			
		||||
man_MANS = $(MANPAGES)
 | 
			
		||||
 | 
			
		||||
MSVCFILES = vc/vc.dsw vc/acountry/acountry.dsp vc/adig/adig.dsp \
 | 
			
		||||
 vc/ahost/ahost.dsp vc/areslib/areslib.dsp vc/areslib/areslib.dsw
 | 
			
		||||
 | 
			
		||||
if DEBUGBUILD
 | 
			
		||||
PROGS =
 | 
			
		||||
else
 | 
			
		||||
PROGS = ahost adig acountry
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
noinst_PROGRAMS =$(PROGS)
 | 
			
		||||
 | 
			
		||||
# adig and ahost are just sample programs and thus not mentioned with the
 | 
			
		||||
# regular sources and headers
 | 
			
		||||
EXTRA_DIST = AUTHORS CHANGES README.cares Makefile.inc Makefile.dj	   \
 | 
			
		||||
 Makefile.m32 Makefile.netware Makefile.vc6 $(man_MANS) $(MSVCFILES)	   \
 | 
			
		||||
 config-win32.h RELEASE-NOTES libcares.pc.in buildconf get_ver.awk maketgz \
 | 
			
		||||
 TODO
 | 
			
		||||
 | 
			
		||||
pkgconfigdir = $(libdir)/pkgconfig
 | 
			
		||||
pkgconfig_DATA = libcares.pc
 | 
			
		||||
 | 
			
		||||
VER=-version-info 2:0:0
 | 
			
		||||
# This flag accepts an argument of the form current[:revision[:age]]. So,
 | 
			
		||||
# passing -version-info 3:12:1 sets current to 3, revision to 12, and age to
 | 
			
		||||
# 1.
 | 
			
		||||
#
 | 
			
		||||
# If either revision or age are omitted, they default to 0. Also note that age
 | 
			
		||||
# must be less than or equal to the current interface number.
 | 
			
		||||
#
 | 
			
		||||
# Here are a set of rules to help you update your library version information: 
 | 
			
		||||
#
 | 
			
		||||
# 1.Start with version information of 0:0:0 for each libtool library.
 | 
			
		||||
#
 | 
			
		||||
# 2.Update the version information only immediately before a public release of
 | 
			
		||||
# your software. More frequent updates are unnecessary, and only guarantee
 | 
			
		||||
# that the current interface number gets larger faster.
 | 
			
		||||
#
 | 
			
		||||
# 3.If the library source code has changed at all since the last update, then
 | 
			
		||||
# increment revision (c:r+1:a)
 | 
			
		||||
#
 | 
			
		||||
# 4.If any interfaces have been added, removed, or changed since the last
 | 
			
		||||
# update, increment current, and set revision to 0. (c+1:r=0:a)
 | 
			
		||||
#
 | 
			
		||||
# 5.If any interfaces have been added since the last public release, then
 | 
			
		||||
# increment age. (c:r:a+1)
 | 
			
		||||
#
 | 
			
		||||
# 6.If any interfaces have been removed since the last public release, then
 | 
			
		||||
# set age to 0. (c:r:a=0)
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
if NO_UNDEFINED
 | 
			
		||||
# The -no-undefined flag is crucial for this to build fine on some platforms
 | 
			
		||||
UNDEF = -no-undefined
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
libcares_la_LDFLAGS = $(UNDEF) $(VER)
 | 
			
		||||
 | 
			
		||||
# Makefile.inc provides the CSOURCES and HHEADERS defines
 | 
			
		||||
include Makefile.inc
 | 
			
		||||
 | 
			
		||||
libcares_la_SOURCES = $(CSOURCES) $(HHEADERS)
 | 
			
		||||
 | 
			
		||||
# where to install the c-ares headers
 | 
			
		||||
libcares_ladir = $(includedir)
 | 
			
		||||
# what headers to install on 'make install':
 | 
			
		||||
libcares_la_HEADERS = ares.h ares_version.h ares_dns.h
 | 
			
		||||
 | 
			
		||||
ahost_SOURCES = ahost.c ares_getopt.c ares_getopt.h
 | 
			
		||||
ahost_LDADD = $(top_builddir)/$(lib_LTLIBRARIES)
 | 
			
		||||
 | 
			
		||||
adig_SOURCES = adig.c ares_getopt.c ares_getopt.h
 | 
			
		||||
adig_LDADD = $(top_builddir)/$(lib_LTLIBRARIES)
 | 
			
		||||
 | 
			
		||||
acountry_SOURCES = acountry.c ares_getopt.c ares_getopt.h
 | 
			
		||||
acountry_LDADD = $(top_builddir)/$(lib_LTLIBRARIES)
 | 
			
		||||
 | 
			
		||||
# Make files named *.dist replace the file without .dist extension
 | 
			
		||||
dist-hook:
 | 
			
		||||
	find $(distdir) -name "*.dist" -exec rm {} \;
 | 
			
		||||
	(distit=`find $(srcdir) -name "*.dist"`; \
 | 
			
		||||
	for file in $$distit; do \
 | 
			
		||||
	  strip=`echo $$file | sed -e s/^$(srcdir)// -e s/\.dist//`; \
 | 
			
		||||
	  cp $$file $(distdir)$$strip; \
 | 
			
		||||
	done)
 | 
			
		||||
							
								
								
									
										82
									
								
								ares/Makefile.dj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								ares/Makefile.dj
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,82 @@
 | 
			
		||||
#
 | 
			
		||||
# c-ares Makefile for djgpp/gcc/Watt-32.
 | 
			
		||||
#   By Gisle Vanem <giva@bgnett.no> 2004.
 | 
			
		||||
#
 | 
			
		||||
# $Id$
 | 
			
		||||
 | 
			
		||||
TOPDIR = ..
 | 
			
		||||
 | 
			
		||||
include ../packages/DOS/common.dj
 | 
			
		||||
 | 
			
		||||
include Makefile.inc
 | 
			
		||||
 | 
			
		||||
CFLAGS += -DWATT32 -DHAVE_AF_INET6 -DHAVE_PF_INET6 -DHAVE_IOCTLSOCKET \
 | 
			
		||||
          -DHAVE_IOCTLSOCKET_FIONBIO -DHAVE_STRUCT_IN6_ADDR \
 | 
			
		||||
          -DHAVE_SOCKADDR_IN6_SIN6_SCOPE_ID -DHAVE_SYS_TIME_H \
 | 
			
		||||
          -DHAVE_STRUCT_SOCKADDR_IN6 -DHAVE_STRUCT_ADDRINFO \
 | 
			
		||||
          -DHAVE_ARPA_NAMESER_H -DHAVE_ARPA_INET_H -DHAVE_SYS_SOCKET_H \
 | 
			
		||||
          -DHAVE_SYS_UIO_H -DHAVE_NETINET_IN_H -DHAVE_NETINET_TCP_H \
 | 
			
		||||
          -DNS_INADDRSZ=4 -DHAVE_RECV -DHAVE_SEND -DHAVE_GETTIMEOFDAY \
 | 
			
		||||
          -DSEND_TYPE_ARG1='int'   -DSEND_QUAL_ARG2='const' \
 | 
			
		||||
          -DSEND_TYPE_ARG2='void*' -DSEND_TYPE_ARG3='int' \
 | 
			
		||||
          -DSEND_TYPE_ARG4='int'   -DSEND_TYPE_RETV='int' \
 | 
			
		||||
          -DRECV_TYPE_ARG1='int'   -DRECV_TYPE_ARG2='void*' \
 | 
			
		||||
          -DRECV_TYPE_ARG3='int'   -DRECV_TYPE_ARG4='int' \
 | 
			
		||||
          -DRECV_TYPE_RETV='int'   -DHAVE_STRUCT_TIMEVAL \
 | 
			
		||||
          -Dselect=select_s        -Dsocklen_t=int -UHAVE_CONFIG_H \
 | 
			
		||||
          -DRECVFROM_TYPE_ARG1='int' -DRECVFROM_TYPE_ARG2='void' \
 | 
			
		||||
          -DRECVFROM_TYPE_ARG3='int' -DRECVFROM_TYPE_ARG4='int' \
 | 
			
		||||
          -DRECVFROM_TYPE_ARG6='int' -DRECVFROM_TYPE_RETV='int' \
 | 
			
		||||
          -DRECVFROM_TYPE_ARG5='struct sockaddr' -DHAVE_RECVFROM \
 | 
			
		||||
          -DRECVFROM_TYPE_ARG2_IS_VOID -DHAVE_STRDUP -DHAVE_NETDB_H \
 | 
			
		||||
          -DHAVE_STRCASECMP -DHAVE_STRNCASECMP -DHAVE_GETHOSTNAME
 | 
			
		||||
 | 
			
		||||
LDFLAGS = -s
 | 
			
		||||
 | 
			
		||||
ifeq ($(USE_DEBUG),1)
 | 
			
		||||
  EX_LIBS  = ../lib/libcurl.a
 | 
			
		||||
  OBJ_HACK = $(OBJECTS)
 | 
			
		||||
else
 | 
			
		||||
  OBJ_HACK = libcares.a
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(USE_SSL),1)
 | 
			
		||||
  EX_LIBS += $(OPENSSL_ROOT)/lib/libssl.a $(OPENSSL_ROOT)/lib/libcrypt.a
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(USE_ZLIB),1)
 | 
			
		||||
  EX_LIBS += $(ZLIB_ROOT)/libz.a
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(USE_IDNA),1)
 | 
			
		||||
  EX_LIBS += $(LIBIDN_ROOT)/lib/dj_obj/libidn.a -liconv
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
EX_LIBS += $(WATT32_ROOT)/lib/libwatt.a
 | 
			
		||||
 | 
			
		||||
OBJECTS = $(addprefix $(OBJ_DIR)/, $(CSOURCES:.c=.o))
 | 
			
		||||
 | 
			
		||||
all: $(OBJ_DIR) libcares.a ahost.exe adig.exe acountry.exe
 | 
			
		||||
	@echo Welcome to c-ares.
 | 
			
		||||
 | 
			
		||||
libcares.a: $(OBJECTS)
 | 
			
		||||
	ar rs $@ $?
 | 
			
		||||
 | 
			
		||||
ahost.exe: ahost.c $(OBJ_DIR)/ares_getopt.o $(OBJ_HACK)
 | 
			
		||||
	$(CC) $(LDFLAGS) $(CFLAGS) -o $@ $^ $(EX_LIBS)
 | 
			
		||||
 | 
			
		||||
adig.exe: adig.c $(OBJ_DIR)/ares_getopt.o $(OBJ_HACK)
 | 
			
		||||
	$(CC) $(LDFLAGS) $(CFLAGS) -o $@ $^ $(EX_LIBS)
 | 
			
		||||
 | 
			
		||||
acountry.exe: acountry.c $(OBJ_DIR)/ares_getopt.o $(OBJ_HACK)
 | 
			
		||||
	$(CC) $(LDFLAGS) $(CFLAGS) -o $@ $^ $(EX_LIBS)
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	rm -f $(OBJECTS) libcares.a
 | 
			
		||||
 | 
			
		||||
vclean realclean: clean
 | 
			
		||||
	rm -f ahost.exe adig.exe acountry.exe depend.dj
 | 
			
		||||
	- rmdir $(OBJ_DIR)
 | 
			
		||||
 | 
			
		||||
-include depend.dj
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										23
									
								
								ares/Makefile.inc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								ares/Makefile.inc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
			
		||||
CSOURCES = ares_fds.c ares_getsock.c ares_process.c ares_free_hostent.c	\
 | 
			
		||||
ares_query.c ares__close_sockets.c ares_free_string.c ares_search.c	\
 | 
			
		||||
ares__get_hostent.c ares_gethostbyaddr.c ares_send.c ares__read_line.c	\
 | 
			
		||||
ares_gethostbyname.c ares_strerror.c ares_cancel.c ares_init.c		\
 | 
			
		||||
ares_timeout.c ares_destroy.c ares_mkquery.c ares_version.c		\
 | 
			
		||||
ares_expand_name.c ares_parse_a_reply.c windows_port.c ares_strdup.c	\
 | 
			
		||||
ares_expand_string.c ares_parse_ptr_reply.c ares_parse_aaaa_reply.c	\
 | 
			
		||||
ares_getnameinfo.c inet_net_pton.c bitncmp.c inet_ntop.c ares_writev.c	\
 | 
			
		||||
ares_parse_ns_reply.c ares_llist.c ares__timeval.c ares_strcasecmp.c
 | 
			
		||||
 | 
			
		||||
HHEADERS = ares.h ares_private.h setup.h ares_dns.h ares_version.h          \
 | 
			
		||||
 nameser.h inet_net_pton.h inet_ntop.h ares_ipv6.h bitncmp.h setup_once.h   \
 | 
			
		||||
 ares_llist.h ares_strdup.h ares_strcasecmp.h ares_writev.h
 | 
			
		||||
 | 
			
		||||
MANPAGES= ares_destroy.3 ares_expand_name.3 ares_expand_string.3 ares_fds.3 \
 | 
			
		||||
 ares_free_hostent.3 ares_free_string.3 ares_gethostbyaddr.3		    \
 | 
			
		||||
 ares_gethostbyname.3 ares_init.3 ares_init_options.3 ares_mkquery.3	    \
 | 
			
		||||
 ares_parse_a_reply.3 ares_parse_ptr_reply.3 ares_process.3		    \
 | 
			
		||||
 ares_query.3 ares_search.3 ares_send.3 ares_strerror.3 ares_timeout.3	    \
 | 
			
		||||
 ares_version.3 ares_cancel.3 ares_parse_aaaa_reply.3 ares_getnameinfo.3    \
 | 
			
		||||
 ares_getsock.3 ares_parse_ns_reply.3 ares_dup.3 \
 | 
			
		||||
 ares_destroy_options.3 ares_save_options.3 ares_gethostbyname_file.3       \
 | 
			
		||||
 ares_set_socket_callback.3
 | 
			
		||||
							
								
								
									
										68
									
								
								ares/Makefile.m32
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								ares/Makefile.m32
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,68 @@
 | 
			
		||||
#############################################################
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
## Makefile for building libcares.a with MingW32 (GCC-3.2)
 | 
			
		||||
## Use: make -f Makefile.m32 [demos]
 | 
			
		||||
##
 | 
			
		||||
## Quick hack by Guenter; comments to: /dev/nul
 | 
			
		||||
#
 | 
			
		||||
########################################################
 | 
			
		||||
## Nothing more to do below this line!
 | 
			
		||||
 | 
			
		||||
LIB	= libcares.a
 | 
			
		||||
 | 
			
		||||
CC	= gcc
 | 
			
		||||
LD	= gcc
 | 
			
		||||
RANLIB	= ranlib
 | 
			
		||||
#RM	= rm -f
 | 
			
		||||
 | 
			
		||||
CFLAGS	= -O2 -Wall
 | 
			
		||||
LDFLAGS	= -s
 | 
			
		||||
LIBS	= -lwsock32
 | 
			
		||||
 | 
			
		||||
# Makefile.inc provides the CSOURCES and HHEADERS defines
 | 
			
		||||
include Makefile.inc
 | 
			
		||||
 | 
			
		||||
OBJLIB	:= $(patsubst %.c,%.o,$(strip $(CSOURCES)))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$(LIB): $(OBJLIB)
 | 
			
		||||
	ar cru $@ $^
 | 
			
		||||
	$(RANLIB) $@
 | 
			
		||||
 | 
			
		||||
all: $(LIB) demos
 | 
			
		||||
 | 
			
		||||
demos: adig.exe ahost.exe acountry.exe
 | 
			
		||||
 | 
			
		||||
tags:
 | 
			
		||||
	etags *.[ch]
 | 
			
		||||
 | 
			
		||||
%.exe: %.o ares_getopt.o $(LIB)
 | 
			
		||||
	$(LD) $(LDFLAGS) -o $@ $^ $(LIBS)
 | 
			
		||||
 | 
			
		||||
$(OBJLIB): ares.h ares_dns.h ares_private.h
 | 
			
		||||
 | 
			
		||||
.c.o:
 | 
			
		||||
	$(CC) $(CFLAGS) -c $<
 | 
			
		||||
 | 
			
		||||
check:
 | 
			
		||||
 | 
			
		||||
install:
 | 
			
		||||
	${top_srcdir}/mkinstalldirs ${DESTDIR}${libdir}
 | 
			
		||||
	${top_srcdir}/mkinstalldirs ${DESTDIR}${includedir}
 | 
			
		||||
	${top_srcdir}/mkinstalldirs ${DESTDIR}${mandir}/man3
 | 
			
		||||
	${INSTALL} -m 644 $(LIB) ${DESTDIR}${libdir}
 | 
			
		||||
	${RANLIB} ${DESTDIR}${libdir}/$(LIB)
 | 
			
		||||
	chmod u-w ${DESTDIR}${libdir}/$(LIB)
 | 
			
		||||
	${INSTALL} -m 444 ${srcdir}/ares.h ${DESTDIR}${includedir}
 | 
			
		||||
	${INSTALL} -m 444 ${srcdir}/ares_version.h ${DESTDIR}${includedir}
 | 
			
		||||
	(for man in $(MANPAGES); do \
 | 
			
		||||
	   ${INSTALL} -m 444 ${srcdir}/$${man} ${DESTDIR}${mandir}/man3; \
 | 
			
		||||
	done)
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	$(RM) ares_getopt.o $(OBJLIB) $(LIB) adig.exe ahost.exe acountry.exe
 | 
			
		||||
 | 
			
		||||
distclean: clean
 | 
			
		||||
	$(RM) config.cache config.log config.status Makefile
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										410
									
								
								ares/Makefile.netware
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										410
									
								
								ares/Makefile.netware
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,410 @@
 | 
			
		||||
#################################################################
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
## Makefile for building libcares (NetWare version - gnu make)
 | 
			
		||||
## Use: make -f Makefile.netware
 | 
			
		||||
##
 | 
			
		||||
## Comments to: Guenter Knauf http://www.gknw.de/phpbb
 | 
			
		||||
#
 | 
			
		||||
#################################################################
 | 
			
		||||
 | 
			
		||||
# Edit the path below to point to the base of your Novell NDK.
 | 
			
		||||
ifndef NDKBASE
 | 
			
		||||
NDKBASE	= c:/novell
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifndef INSTDIR
 | 
			
		||||
INSTDIR	= ../ares-$(LIBCARES_VERSION_STR)-bin-nw
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Edit the vars below to change NLM target settings.
 | 
			
		||||
TARGETS = adig.nlm ahost.nlm acountry.nlm
 | 
			
		||||
LTARGET = libcares.$(LIBEXT)
 | 
			
		||||
VERSION	= $(LIBCARES_VERSION)
 | 
			
		||||
COPYR	= Copyright (C) 1996 - 2008, Daniel Stenberg, <daniel@haxx.se>
 | 
			
		||||
DESCR	= cURL $(subst .def,,$(notdir $@)) $(LIBCARES_VERSION_STR) - http://curl.haxx.se
 | 
			
		||||
MTSAFE	= YES
 | 
			
		||||
STACK	= 64000
 | 
			
		||||
SCREEN	= none
 | 
			
		||||
#EXPORTS	=
 | 
			
		||||
# Comment the line below if you dont want to load protected automatically.
 | 
			
		||||
#LDRING	= 3
 | 
			
		||||
 | 
			
		||||
# Edit the var below to point to your lib architecture.
 | 
			
		||||
ifndef LIBARCH
 | 
			
		||||
LIBARCH = LIBC
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# must be equal to NDEBUG or DEBUG, CURLDEBUG
 | 
			
		||||
ifndef DB
 | 
			
		||||
DB	= NDEBUG
 | 
			
		||||
endif
 | 
			
		||||
# Optimization: -O<n> or debugging: -g
 | 
			
		||||
ifeq ($(DB),NDEBUG)
 | 
			
		||||
	OPT	= -O2
 | 
			
		||||
	OBJDIR	= release
 | 
			
		||||
else
 | 
			
		||||
	OPT	= -g
 | 
			
		||||
	OBJDIR	= debug
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Include the version info retrieved from curlver.h
 | 
			
		||||
-include $(OBJDIR)/version.inc
 | 
			
		||||
 | 
			
		||||
# The following lines defines your compiler.
 | 
			
		||||
ifdef CWFolder
 | 
			
		||||
	METROWERKS = $(CWFolder)
 | 
			
		||||
endif
 | 
			
		||||
ifdef METROWERKS
 | 
			
		||||
	# MWCW_PATH = $(subst \,/,$(METROWERKS))/Novell Support
 | 
			
		||||
	MWCW_PATH = $(subst \,/,$(METROWERKS))/Novell Support/Metrowerks Support
 | 
			
		||||
	CC = mwccnlm
 | 
			
		||||
else
 | 
			
		||||
	CC = gcc
 | 
			
		||||
endif
 | 
			
		||||
# a native win32 awk can be downloaded from here:
 | 
			
		||||
# http://www.gknw.net/development/prgtools/awk-20070501.zip
 | 
			
		||||
AWK	= awk
 | 
			
		||||
YACC	= bison -y
 | 
			
		||||
CP	= cp -afv
 | 
			
		||||
MKDIR	= mkdir
 | 
			
		||||
# RM	= rm -f
 | 
			
		||||
# if you want to mark the target as MTSAFE you will need a tool for
 | 
			
		||||
# generating the xdc data for the linker; here's a minimal tool:
 | 
			
		||||
# http://www.gknw.net/development/prgtools/mkxdc.zip
 | 
			
		||||
MPKXDC	= mkxdc
 | 
			
		||||
 | 
			
		||||
# Global flags for all compilers
 | 
			
		||||
CFLAGS	+= $(OPT) -D$(DB) -DNETWARE -DHAVE_CONFIG_H -nostdinc
 | 
			
		||||
 | 
			
		||||
ifeq ($(CC),mwccnlm)
 | 
			
		||||
LD	= mwldnlm
 | 
			
		||||
LDFLAGS	= -nostdlib $(PRELUDE) $(OBJEXE) $(<:.def=.o) -o $@ -commandfile
 | 
			
		||||
AR	= mwldnlm
 | 
			
		||||
ARFLAGS	= -nostdlib -type library -o
 | 
			
		||||
LIBEXT	= lib
 | 
			
		||||
#RANLIB	=
 | 
			
		||||
CFLAGS	+= -msgstyle gcc -gccinc -inline off -opt nointrinsics -proc 586
 | 
			
		||||
CFLAGS	+= -relax_pointers
 | 
			
		||||
#CFLAGS	+= -w on
 | 
			
		||||
ifeq ($(LIBARCH),LIBC)
 | 
			
		||||
	PRELUDE = $(SDK_LIBC)/imports/libcpre.o
 | 
			
		||||
	CFLAGS += -align 4
 | 
			
		||||
else
 | 
			
		||||
	# PRELUDE = $(SDK_CLIB)/imports/clibpre.o
 | 
			
		||||
	# to avoid the __init_* / __deinit_* whoes dont use prelude from NDK
 | 
			
		||||
	PRELUDE = "$(MWCW_PATH)/libraries/runtime/prelude.obj"
 | 
			
		||||
	# CFLAGS += -include "$(MWCW_PATH)/headers/nlm_clib_prefix.h"
 | 
			
		||||
	CFLAGS += -align 1
 | 
			
		||||
endif
 | 
			
		||||
else
 | 
			
		||||
LD	= nlmconv
 | 
			
		||||
LDFLAGS	= -T
 | 
			
		||||
AR	= ar
 | 
			
		||||
ARFLAGS	= -cq
 | 
			
		||||
LIBEXT	= a
 | 
			
		||||
RANLIB	= ranlib
 | 
			
		||||
CFLAGS	+= -fno-builtin -fpcc-struct-return -fno-strict-aliasing
 | 
			
		||||
CFLAGS	+= -Wall -Wno-format -Wno-uninitialized # -pedantic
 | 
			
		||||
ifeq ($(LIBARCH),LIBC)
 | 
			
		||||
	PRELUDE = $(SDK_LIBC)/imports/libcpre.gcc.o
 | 
			
		||||
else
 | 
			
		||||
	# PRELUDE = $(SDK_CLIB)/imports/clibpre.gcc.o
 | 
			
		||||
	# to avoid the __init_* / __deinit_* whoes dont use prelude from NDK
 | 
			
		||||
	# http://www.gknw.net/development/mk_nlm/gcc_pre.zip
 | 
			
		||||
	PRELUDE = $(NDK_ROOT)/pre/prelude.o
 | 
			
		||||
	CFLAGS += -include $(NDKBASE)/nlmconv/genlm.h
 | 
			
		||||
endif
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
NDK_ROOT = $(NDKBASE)/ndk
 | 
			
		||||
SDK_CLIB = $(NDK_ROOT)/nwsdk
 | 
			
		||||
SDK_LIBC = $(NDK_ROOT)/libc
 | 
			
		||||
 | 
			
		||||
ifeq ($(LIBARCH),LIBC)
 | 
			
		||||
	INCLUDES += -I$(SDK_LIBC)/include
 | 
			
		||||
	# INCLUDES += -I$(SDK_LIBC)/include/nks
 | 
			
		||||
	# INCLUDES += -I$(SDK_LIBC)/include/winsock
 | 
			
		||||
	CFLAGS += -D_POSIX_SOURCE
 | 
			
		||||
else
 | 
			
		||||
	INCLUDES += -I$(SDK_CLIB)/include/nlm
 | 
			
		||||
	# INCLUDES += -I$(SDK_CLIB)/include/nlm/obsolete
 | 
			
		||||
	# INCLUDES += -I$(SDK_CLIB)/include
 | 
			
		||||
endif
 | 
			
		||||
ifeq ($(DB),CURLDEBUG)
 | 
			
		||||
INCLUDES += -I../include
 | 
			
		||||
endif
 | 
			
		||||
CFLAGS	+= -I. $(INCLUDES)
 | 
			
		||||
 | 
			
		||||
ifeq ($(MTSAFE),YES)
 | 
			
		||||
	XDCOPT = -n
 | 
			
		||||
endif
 | 
			
		||||
ifeq ($(MTSAFE),NO)
 | 
			
		||||
	XDCOPT = -u
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(findstring linux,$(OSTYPE)),linux)
 | 
			
		||||
DL	= '
 | 
			
		||||
#-include $(NDKBASE)/nlmconv/ncpfs.inc
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Makefile.inc provides the CSOURCES and HHEADERS defines
 | 
			
		||||
include Makefile.inc
 | 
			
		||||
 | 
			
		||||
OBJLIB	:= $(patsubst %.c,$(OBJDIR)/%.o,$(strip $(CSOURCES)))
 | 
			
		||||
OBJEXE	= $(OBJLIB) $(OBJDIR)/ares_getopt.o
 | 
			
		||||
 | 
			
		||||
.PHONY: lib nlm prebuild dist install clean
 | 
			
		||||
 | 
			
		||||
lib: prebuild $(LTARGET)
 | 
			
		||||
 | 
			
		||||
nlm: prebuild $(TARGETS)
 | 
			
		||||
 | 
			
		||||
prebuild: $(OBJDIR) $(OBJDIR)/version.inc config.h
 | 
			
		||||
 | 
			
		||||
install: $(INSTDIR) all
 | 
			
		||||
	@$(CP) *.nlm $(INSTDIR)
 | 
			
		||||
	@$(CP) ../CHANGES $(INSTDIR)
 | 
			
		||||
	@$(CP) ../COPYING $(INSTDIR)
 | 
			
		||||
	@$(CP) ../README $(INSTDIR)
 | 
			
		||||
	@$(CP) ../RELEASE-NOTES $(INSTDIR)
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	-$(RM) $(LTARGET) $(TARGETS) config.h
 | 
			
		||||
	-$(RM) -r $(OBJDIR)
 | 
			
		||||
	-$(RM) -r arpa
 | 
			
		||||
 | 
			
		||||
%.$(LIBEXT): $(OBJLIB)
 | 
			
		||||
	@echo Creating $@
 | 
			
		||||
	@-$(RM) $@
 | 
			
		||||
	@$(AR) $(ARFLAGS) $@ $^
 | 
			
		||||
ifdef RANLIB
 | 
			
		||||
	@$(RANLIB) $@
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
%.nlm: $(OBJDIR)/%.def $(OBJDIR)/%.o $(OBJDIR)/%.xdc $(OBJEXE)
 | 
			
		||||
	@echo Linking $@
 | 
			
		||||
	@-$(RM) $@
 | 
			
		||||
	@$(LD) $(LDFLAGS) $<
 | 
			
		||||
 | 
			
		||||
$(OBJDIR) $(INSTDIR):
 | 
			
		||||
	@$(MKDIR) $@
 | 
			
		||||
 | 
			
		||||
$(OBJDIR)/%.o: %.c
 | 
			
		||||
#	@echo Compiling $<
 | 
			
		||||
	$(CC) $(CFLAGS) -c $< -o $@
 | 
			
		||||
 | 
			
		||||
$(OBJDIR)/version.inc: ares_version.h $(OBJDIR)
 | 
			
		||||
	@echo Creating $@
 | 
			
		||||
	@$(AWK) -f get_ver.awk $< > $@
 | 
			
		||||
 | 
			
		||||
$(OBJDIR)/%.xdc: Makefile.netware
 | 
			
		||||
	@echo Creating $@
 | 
			
		||||
	@$(MPKXDC) $(XDCOPT) $@
 | 
			
		||||
 | 
			
		||||
$(OBJDIR)/%.def: Makefile.netware
 | 
			
		||||
	@echo Creating $@
 | 
			
		||||
	@echo $(DL)# DEF file for linking with $(LD)$(DL) > $@
 | 
			
		||||
	@echo $(DL)# Do not edit this file - it is created by make!$(DL) >> $@
 | 
			
		||||
	@echo $(DL)# All your changes will be lost!!$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#$(DL) >> $@
 | 
			
		||||
	@echo $(DL)copyright "$(COPYR)"$(DL) >> $@
 | 
			
		||||
	@echo $(DL)description "$(DESCR)"$(DL) >> $@
 | 
			
		||||
	@echo $(DL)version $(VERSION)$(DL) >> $@
 | 
			
		||||
ifdef NLMTYPE
 | 
			
		||||
	@echo $(DL)type $(NLMTYPE)$(DL) >> $@
 | 
			
		||||
endif
 | 
			
		||||
ifdef STACK
 | 
			
		||||
	@echo $(DL)stack $(STACK)$(DL) >> $@
 | 
			
		||||
endif
 | 
			
		||||
ifdef SCREEN
 | 
			
		||||
	@echo $(DL)screenname "$(SCREEN)"$(DL) >> $@
 | 
			
		||||
else
 | 
			
		||||
	@echo $(DL)screenname "DEFAULT"$(DL) >> $@
 | 
			
		||||
endif
 | 
			
		||||
ifeq ($(DB),DEBUG)
 | 
			
		||||
	@echo $(DL)debug$(DL) >> $@
 | 
			
		||||
endif
 | 
			
		||||
	@echo $(DL)threadname "$^"$(DL) >> $@
 | 
			
		||||
ifdef XDCOPT
 | 
			
		||||
	@echo $(DL)xdcdata $(@:.def=.xdc)$(DL) >> $@
 | 
			
		||||
endif
 | 
			
		||||
ifeq ($(LDRING),0)
 | 
			
		||||
	@echo $(DL)flag_on 16$(DL) >> $@
 | 
			
		||||
endif
 | 
			
		||||
ifeq ($(LDRING),3)
 | 
			
		||||
	@echo $(DL)flag_on 512$(DL) >> $@
 | 
			
		||||
endif
 | 
			
		||||
ifeq ($(LIBARCH),CLIB)
 | 
			
		||||
	@echo $(DL)start _Prelude$(DL) >> $@
 | 
			
		||||
	@echo $(DL)exit _Stop$(DL) >> $@
 | 
			
		||||
	@echo $(DL)import @$(SDK_CLIB)/imports/clib.imp$(DL) >> $@
 | 
			
		||||
	@echo $(DL)import @$(SDK_CLIB)/imports/threads.imp$(DL) >> $@
 | 
			
		||||
	@echo $(DL)import @$(SDK_CLIB)/imports/nlmlib.imp$(DL) >> $@
 | 
			
		||||
	@echo $(DL)import @$(SDK_CLIB)/imports/socklib.imp$(DL) >> $@
 | 
			
		||||
	@echo $(DL)module clib$(DL) >> $@
 | 
			
		||||
else
 | 
			
		||||
	@echo $(DL)flag_on 64$(DL) >> $@
 | 
			
		||||
	@echo $(DL)pseudopreemption$(DL) >> $@
 | 
			
		||||
	@echo $(DL)start _LibCPrelude$(DL) >> $@
 | 
			
		||||
	@echo $(DL)exit _LibCPostlude$(DL) >> $@
 | 
			
		||||
	@echo $(DL)check _LibCCheckUnload$(DL) >> $@
 | 
			
		||||
	@echo $(DL)import @$(SDK_LIBC)/imports/libc.imp$(DL) >> $@
 | 
			
		||||
	@echo $(DL)import @$(SDK_LIBC)/imports/netware.imp$(DL) >> $@
 | 
			
		||||
	@echo $(DL)module libc$(DL) >> $@
 | 
			
		||||
endif
 | 
			
		||||
ifdef MODULES
 | 
			
		||||
	@echo $(DL)module $(MODULES)$(DL) >> $@
 | 
			
		||||
endif
 | 
			
		||||
ifdef EXPORTS
 | 
			
		||||
	@echo $(DL)export $(EXPORTS)$(DL) >> $@
 | 
			
		||||
endif
 | 
			
		||||
ifdef IMPORTS
 | 
			
		||||
	@echo $(DL)import $(IMPORTS)$(DL) >> $@
 | 
			
		||||
endif
 | 
			
		||||
ifeq ($(LD),nlmconv)
 | 
			
		||||
	@echo $(DL)input $(PRELUDE)$(DL) >> $@
 | 
			
		||||
	@echo $(DL)input $(OBJEXE)$(DL) >> $@
 | 
			
		||||
	@echo $(DL)input $(@:.def=.o)$(DL) >> $@
 | 
			
		||||
	@echo $(DL)output $(notdir $(@:.def=.nlm))$(DL) >> $@
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
config.h: Makefile.netware
 | 
			
		||||
	@echo Creating $@
 | 
			
		||||
	@echo $(DL)/* $@ for NetWare target.$(DL) > $@
 | 
			
		||||
	@echo $(DL)** Do not edit this file - it is created by make!$(DL) >> $@
 | 
			
		||||
	@echo $(DL)** All your changes will be lost!!$(DL) >> $@
 | 
			
		||||
	@echo $(DL)*/$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#ifndef NETWARE$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#error This $(notdir $@) is created for NetWare platform!$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#endif$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define VERSION "$(LIBCARES_VERSION_STR)"$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define PACKAGE_BUGREPORT "a suitable curl mailing list => http://curl.haxx.se/mail/"$(DL) >> $@
 | 
			
		||||
ifeq ($(LIBARCH),CLIB)
 | 
			
		||||
	@echo $(DL)#define OS "i586-pc-clib-NetWare"$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_STRICMP 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_STRNICMP 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define NETDB_USE_INTERNET 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define RECV_TYPE_ARG1 int$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define RECV_TYPE_ARG2 char *$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define RECV_TYPE_ARG3 int$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define RECV_TYPE_ARG4 int$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define RECV_TYPE_RETV int$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define RECVFROM_TYPE_ARG1 int$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define RECVFROM_TYPE_ARG2 char$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define RECVFROM_TYPE_ARG3 int$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define RECVFROM_TYPE_ARG4 int$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define RECVFROM_TYPE_ARG5 struct sockaddr$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define RECVFROM_TYPE_ARG6 int$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define RECVFROM_TYPE_RETV int$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define SEND_QUAL_ARG2$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define SEND_TYPE_ARG1 int$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define SEND_TYPE_ARG2 char *$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define SEND_TYPE_ARG3 int$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define SEND_TYPE_ARG4 int$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define SEND_TYPE_RETV int$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define socklen_t int$(DL) >> $@
 | 
			
		||||
else
 | 
			
		||||
	@echo $(DL)#define OS "i586-pc-libc-NetWare"$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_DLFCN_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_DLOPEN 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_FTRUNCATE 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_GETTIMEOFDAY 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_INTTYPES_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_LIMITS_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_LONGLONG 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_STDINT_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_STRCASECMP 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_STRLCAT 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_STRLCPY 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_STRTOLL 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_SYS_PARAM_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_SYS_SELECT_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_TERMIOS_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_AF_INET6 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_PF_INET6 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_STRUCT_IN6_ADDR 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_STRUCT_SOCKADDR_IN6 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define RECV_TYPE_ARG1 int$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define RECV_TYPE_ARG2 void *$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define RECV_TYPE_ARG3 size_t$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define RECV_TYPE_ARG4 int$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define RECV_TYPE_RETV ssize_t$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define RECVFROM_TYPE_ARG1 int$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define RECVFROM_TYPE_ARG2 void$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define RECVFROM_TYPE_ARG3 size_t$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define RECVFROM_TYPE_ARG4 int$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define RECVFROM_TYPE_ARG5 struct sockaddr$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define RECVFROM_TYPE_ARG6 size_t$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define RECVFROM_TYPE_RETV ssize_t$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define RECVFROM_TYPE_ARG2_IS_VOID 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define SEND_QUAL_ARG2$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define SEND_TYPE_ARG1 int$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define SEND_TYPE_ARG2 void *$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define SEND_TYPE_ARG3 size_t$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define SEND_TYPE_ARG4 int$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define SEND_TYPE_RETV ssize_t$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define SIZEOF_STRUCT_IN6_ADDR 16$(DL) >> $@
 | 
			
		||||
endif
 | 
			
		||||
	@echo $(DL)#define HAVE_ARPA_INET_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_ASSERT_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_ERR_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_FCNTL_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_GETHOSTBYADDR 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_GETHOSTBYNAME 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_GETHOSTNAME 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_GETPROTOBYNAME 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_GMTIME_R 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_INET_ADDR 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_IOCTL 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_IOCTL_FIONBIO 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_LL 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_LOCALTIME_R 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_MALLOC_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_NETINET_IN_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_RECV 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_RECVFROM 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_SELECT 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_SEND 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_SETJMP_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_SIGNAL 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_SIGNAL_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_SIG_ATOMIC_T 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_SOCKET 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_STDLIB_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_STRDUP 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_STRFTIME 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_STRING_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_STRSTR 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_STRUCT_ADDRINFO 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_STRUCT_TIMEVAL 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_SYS_IOCTL_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_SYS_STAT_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_SYS_TIME_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_TIME_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_UNAME 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_UNISTD_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_UTIME 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_UTIME_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_WRITEV 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define RETSIGTYPE void$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define SIZEOF_STRUCT_IN_ADDR 4$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define STDC_HEADERS 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define TIME_WITH_SYS_TIME 1$(DL) >> $@
 | 
			
		||||
ifdef NW_WINSOCK
 | 
			
		||||
	@echo $(DL)#define HAVE_CLOSESOCKET 1$(DL) >> $@
 | 
			
		||||
else
 | 
			
		||||
	@echo $(DL)#define HAVE_SYS_TYPES_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_SYS_SOCKET_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_SYS_SOCKIO_H 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_NETDB_H 1$(DL) >> $@
 | 
			
		||||
endif
 | 
			
		||||
	@echo $(DL)#ifdef __GNUC__$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_VARIADIC_MACROS_GCC 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#else$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#define HAVE_VARIADIC_MACROS_C99 1$(DL) >> $@
 | 
			
		||||
	@echo $(DL)#endif$(DL) >> $@
 | 
			
		||||
ifdef OLD_NOVELLSDK
 | 
			
		||||
	@echo $(DL)#define socklen_t int$(DL) >> $@
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										254
									
								
								ares/Makefile.vc6
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										254
									
								
								ares/Makefile.vc6
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,254 @@
 | 
			
		||||
# $Id$
 | 
			
		||||
#
 | 
			
		||||
# C-ares makefile for MSVC6+
 | 
			
		||||
# G. Vanem <giva@bgnett.no>.
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
CFG_MODEL   = MD
 | 
			
		||||
DEBUG_MODEL = d
 | 
			
		||||
USE_WATT32  = 0
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Configurations:
 | 
			
		||||
#  -MD   - msvcrt.dll,  threads, release (normal)
 | 
			
		||||
#  -MDd  - msvcrtd.dll, threads, debug
 | 
			
		||||
#  -ML   - libc, no threads,     release
 | 
			
		||||
#  -MLd  - libc, no threads,     debug
 | 
			
		||||
#  -MT   - libc, threads,        release
 | 
			
		||||
#  -MTd  - libc, threads,        debug
 | 
			
		||||
 | 
			
		||||
CC = cl
 | 
			
		||||
 | 
			
		||||
CFLAGS  = -nologo -$(CFG_MODEL)$(DEBUG_MODEL) -W3 -Yd -Zi
 | 
			
		||||
LDFLAGS = -machine:i386 -map
 | 
			
		||||
 | 
			
		||||
OBJ_DIR  = VC6_obj
 | 
			
		||||
DEF_FILE = cares.def
 | 
			
		||||
 | 
			
		||||
!if "$(USE_WATT32)" == "1"
 | 
			
		||||
CFLAGS  = $(CFLAGS) -UWIN32 -DWATT32 -D_USE_32BIT_TIME_T -I$(WATT_ROOT)\inc
 | 
			
		||||
EX_LIBS = $(WATT_ROOT)\lib\wattcpvc_imp.lib
 | 
			
		||||
 | 
			
		||||
!else
 | 
			
		||||
CFLAGS  = $(CFLAGS) -DWIN32 -DWIN32_LEAN_AND_MEAN
 | 
			
		||||
EX_LIBS = advapi32.lib ws2_32.lib
 | 
			
		||||
!endif
 | 
			
		||||
 | 
			
		||||
!if "$(DEBUG_MODEL)" == "d"
 | 
			
		||||
CFLAGS  = $(CFLAGS) -D_DEBUG -GZ
 | 
			
		||||
LDFLAGS = $(LDFLAGS) -debug -fixed:no
 | 
			
		||||
 | 
			
		||||
!else
 | 
			
		||||
CFLAGS  = $(CFLAGS) -O2 -Og
 | 
			
		||||
LDFLAGS = $(LDFLAGS) -release
 | 
			
		||||
!endif
 | 
			
		||||
 | 
			
		||||
OBJECTS = $(OBJ_DIR)\ares_fds.obj              \
 | 
			
		||||
          $(OBJ_DIR)\ares_process.obj          \
 | 
			
		||||
          $(OBJ_DIR)\ares_free_hostent.obj     \
 | 
			
		||||
          $(OBJ_DIR)\ares_query.obj            \
 | 
			
		||||
          $(OBJ_DIR)\ares__close_sockets.obj   \
 | 
			
		||||
          $(OBJ_DIR)\ares_free_string.obj      \
 | 
			
		||||
          $(OBJ_DIR)\ares_search.obj           \
 | 
			
		||||
          $(OBJ_DIR)\ares__get_hostent.obj     \
 | 
			
		||||
          $(OBJ_DIR)\ares_gethostbyaddr.obj    \
 | 
			
		||||
          $(OBJ_DIR)\ares_getsock.obj          \
 | 
			
		||||
          $(OBJ_DIR)\ares_send.obj             \
 | 
			
		||||
          $(OBJ_DIR)\ares__read_line.obj       \
 | 
			
		||||
          $(OBJ_DIR)\ares_gethostbyname.obj    \
 | 
			
		||||
          $(OBJ_DIR)\ares_getnameinfo.obj      \
 | 
			
		||||
          $(OBJ_DIR)\ares_strcasecmp.obj       \
 | 
			
		||||
          $(OBJ_DIR)\ares_strerror.obj         \
 | 
			
		||||
          $(OBJ_DIR)\ares_cancel.obj           \
 | 
			
		||||
          $(OBJ_DIR)\ares_init.obj             \
 | 
			
		||||
          $(OBJ_DIR)\ares_llist.obj            \
 | 
			
		||||
          $(OBJ_DIR)\ares_timeout.obj          \
 | 
			
		||||
          $(OBJ_DIR)\ares__timeval.obj         \
 | 
			
		||||
          $(OBJ_DIR)\ares_destroy.obj          \
 | 
			
		||||
          $(OBJ_DIR)\ares_mkquery.obj          \
 | 
			
		||||
          $(OBJ_DIR)\ares_version.obj          \
 | 
			
		||||
          $(OBJ_DIR)\ares_expand_name.obj      \
 | 
			
		||||
          $(OBJ_DIR)\ares_parse_a_reply.obj    \
 | 
			
		||||
          $(OBJ_DIR)\ares_parse_aaaa_reply.obj \
 | 
			
		||||
          $(OBJ_DIR)\ares_parse_ns_reply.obj   \
 | 
			
		||||
          $(OBJ_DIR)\windows_port.obj          \
 | 
			
		||||
          $(OBJ_DIR)\ares_expand_string.obj    \
 | 
			
		||||
          $(OBJ_DIR)\ares_parse_ptr_reply.obj  \
 | 
			
		||||
          $(OBJ_DIR)\ares_writev.obj           \
 | 
			
		||||
          $(OBJ_DIR)\bitncmp.obj               \
 | 
			
		||||
          $(OBJ_DIR)\inet_net_pton.obj         \
 | 
			
		||||
          $(OBJ_DIR)\inet_ntop.obj
 | 
			
		||||
 | 
			
		||||
all: $(OBJ_DIR) cares.lib cares.dll cares_imp.lib ahost.exe adig.exe acountry.exe
 | 
			
		||||
       @echo Welcome to c-ares library and examples
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR):
 | 
			
		||||
       mkdir $(OBJ_DIR)
 | 
			
		||||
 | 
			
		||||
cares.lib: $(OBJ_DIR) $(OBJECTS)
 | 
			
		||||
       lib -nologo -out:$@ $(OBJECTS)
 | 
			
		||||
 | 
			
		||||
cares_imp.lib cares.dll: $(OBJ_DIR) $(DEF_FILE) $(OBJECTS)
 | 
			
		||||
       link $(LDFLAGS) -dll -implib:cares_imp.lib -out:cares.dll \
 | 
			
		||||
            -def:$(DEF_FILE) $(OBJECTS) $(EX_LIBS)
 | 
			
		||||
 | 
			
		||||
$(DEF_FILE): $(OBJECTS) Makefile.VC6
 | 
			
		||||
       @echo ; Generated. DO NOT EDIT  > $@
 | 
			
		||||
       @echo LIBRARY cares.dll        >> $@
 | 
			
		||||
       @echo EXPORTS                  >> $@
 | 
			
		||||
       @echo   ares_cancel            >> $@
 | 
			
		||||
       @echo   ares_destroy           >> $@
 | 
			
		||||
       @echo   ares_expand_name       >> $@
 | 
			
		||||
       @echo   ares_expand_string     >> $@
 | 
			
		||||
       @echo   ares_fds               >> $@
 | 
			
		||||
       @echo   ares_free_hostent      >> $@
 | 
			
		||||
       @echo   ares_free_string       >> $@
 | 
			
		||||
       @echo   ares_gethostbyaddr     >> $@
 | 
			
		||||
       @echo   ares_gethostbyname     >> $@
 | 
			
		||||
       @echo   ares_getsock           >> $@
 | 
			
		||||
       @echo   ares_init              >> $@
 | 
			
		||||
       @echo   ares_init_options      >> $@
 | 
			
		||||
       @echo   ares_mkquery           >> $@
 | 
			
		||||
       @echo   ares_parse_a_reply     >> $@
 | 
			
		||||
       @echo   ares_parse_ptr_reply   >> $@
 | 
			
		||||
       @echo   ares_parse_ns_reply    >> $@
 | 
			
		||||
       @echo   ares_process           >> $@
 | 
			
		||||
       @echo   ares_process_fd        >> $@
 | 
			
		||||
       @echo   ares_query             >> $@
 | 
			
		||||
       @echo   ares_search            >> $@
 | 
			
		||||
       @echo   ares_strerror          >> $@
 | 
			
		||||
       @echo   ares_strncasecmp       >> $@
 | 
			
		||||
       @echo   ares_strcasecmp        >> $@
 | 
			
		||||
       @echo   ares_timeout           >> $@
 | 
			
		||||
       @echo   ares_version           >> $@
 | 
			
		||||
       @echo   ares_inet_net_pton     >> $@
 | 
			
		||||
       @echo   ares_inet_ntop         >> $@
 | 
			
		||||
       @echo   ares_inet_pton         >> $@
 | 
			
		||||
       @echo   ares_getnameinfo       >> $@
 | 
			
		||||
       @echo   ares_parse_aaaa_reply  >> $@
 | 
			
		||||
!if "$(USE_WATT32)" == "0"
 | 
			
		||||
       @echo   ares_writev            >> $@
 | 
			
		||||
!endif
 | 
			
		||||
 | 
			
		||||
ahost.exe: $(OBJ_DIR) $(OBJ_DIR)\ahost.obj $(OBJ_DIR)\ares_getopt.obj cares_imp.lib
 | 
			
		||||
       link $(LDFLAGS) -out:$@ $(OBJ_DIR)\ahost.obj $(OBJ_DIR)\ares_getopt.obj cares_imp.lib $(EX_LIBS)
 | 
			
		||||
 | 
			
		||||
adig.exe: $(OBJ_DIR) $(OBJ_DIR)\adig.obj $(OBJ_DIR)\ares_getopt.obj cares_imp.lib
 | 
			
		||||
       link $(LDFLAGS) -out:$@ $(OBJ_DIR)\adig.obj $(OBJ_DIR)\ares_getopt.obj cares_imp.lib $(EX_LIBS)
 | 
			
		||||
 | 
			
		||||
acountry.exe: $(OBJ_DIR) $(OBJ_DIR)\acountry.obj $(OBJ_DIR)\ares_getopt.obj cares_imp.lib
 | 
			
		||||
       link $(LDFLAGS) -out:$@ $(OBJ_DIR)\acountry.obj $(OBJ_DIR)\ares_getopt.obj cares_imp.lib $(EX_LIBS)
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
       - del $(OBJ_DIR)\*.obj *.ilk *.pdb *.pbt *.pbi *.pbo *._xe *.map
 | 
			
		||||
 | 
			
		||||
vclean realclean: clean
 | 
			
		||||
       - del $(DEF_FILE) cares.lib cares_imp.* cares.dll
 | 
			
		||||
       - del ahost.exe adig.exe acountry.exe
 | 
			
		||||
       - rd $(OBJ_DIR)
 | 
			
		||||
 | 
			
		||||
.c{$(OBJ_DIR)}.obj:
 | 
			
		||||
       $(CC) $(CFLAGS) -Fo$*.obj -c $<
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Copyright "gcc -MM .."
 | 
			
		||||
#
 | 
			
		||||
$(OBJ_DIR)\ares_fds.obj: ares_fds.c setup.h setup_once.h ares.h ares_private.h \
 | 
			
		||||
  ares_ipv6.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_process.obj: ares_process.c setup.h setup_once.h nameser.h     \
 | 
			
		||||
  ares.h ares_dns.h ares_private.h ares_ipv6.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_free_hostent.obj: ares_free_hostent.c setup.h setup_once.h     \
 | 
			
		||||
  ares.h ares_private.h ares_ipv6.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_query.obj: ares_query.c setup.h setup_once.h nameser.h         \
 | 
			
		||||
  ares.h ares_dns.h ares_private.h ares_ipv6.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares__close_sockets.obj: ares__close_sockets.c setup.h setup_once.h \
 | 
			
		||||
  ares.h ares_private.h ares_ipv6.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_free_string.obj: ares_free_string.c setup.h setup_once.h ares.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_search.obj: ares_search.c setup.h setup_once.h nameser.h       \
 | 
			
		||||
  ares.h ares_private.h ares_ipv6.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares__get_hostent.obj: ares__get_hostent.c setup.h setup_once.h     \
 | 
			
		||||
  ares.h ares_private.h ares_ipv6.h inet_net_pton.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_gethostbyaddr.obj: ares_gethostbyaddr.c setup.h setup_once.h   \
 | 
			
		||||
  nameser.h ares.h ares_private.h ares_ipv6.h inet_net_pton.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_send.obj: ares_send.c setup.h setup_once.h nameser.h ares.h    \
 | 
			
		||||
  ares_dns.h ares_private.h ares_ipv6.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares__read_line.obj: ares__read_line.c setup.h setup_once.h ares.h  \
 | 
			
		||||
  ares_private.h ares_ipv6.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_gethostbyname.obj: ares_gethostbyname.c setup.h setup_once.h   \
 | 
			
		||||
  nameser.h ares.h ares_private.h ares_ipv6.h inet_net_pton.h bitncmp.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_strcasecmp.obj: ares_strcasecmp.c setup.h setup_once.h ares.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_strerror.obj: ares_strerror.c setup.h setup_once.h ares.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_cancel.obj: ares_cancel.c setup.h setup_once.h ares.h          \
 | 
			
		||||
  ares_private.h ares_ipv6.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_init.obj: ares_init.c setup.h setup_once.h nameser.h ares.h    \
 | 
			
		||||
  ares_private.h ares_ipv6.h inet_net_pton.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_timeout.obj: ares_timeout.c setup.h setup_once.h ares.h        \
 | 
			
		||||
  ares_private.h ares_ipv6.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares__timeval.obj: ares__timeval.c setup.h setup_once.h ares.h      \
 | 
			
		||||
  ares_private.h ares_ipv6.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_destroy.obj: ares_destroy.c setup.h setup_once.h ares.h        \
 | 
			
		||||
  ares_private.h ares_ipv6.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_mkquery.obj: ares_mkquery.c setup.h setup_once.h nameser.h     \
 | 
			
		||||
  ares.h ares_dns.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_version.obj: ares_version.c setup.h setup_once.h ares_version.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_expand_name.obj: ares_expand_name.c setup.h setup_once.h       \
 | 
			
		||||
  nameser.h ares.h ares_private.h ares_ipv6.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_parse_a_reply.obj: ares_parse_a_reply.c setup.h setup_once.h   \
 | 
			
		||||
  nameser.h ares.h ares_dns.h ares_private.h ares_ipv6.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\windows_port.obj: windows_port.c setup.h setup_once.h nameser.h     \
 | 
			
		||||
  ares.h ares_private.h ares_ipv6.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_expand_string.obj: ares_expand_string.c setup.h setup_once.h   \
 | 
			
		||||
  nameser.h ares.h ares_private.h ares_ipv6.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_parse_ptr_reply.obj: ares_parse_ptr_reply.c setup.h            \
 | 
			
		||||
  setup_once.h nameser.h ares.h ares_dns.h ares_private.h ares_ipv6.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_parse_aaaa_reply.obj: ares_parse_aaaa_reply.c setup.h          \
 | 
			
		||||
  setup_once.h nameser.h ares.h ares_dns.h inet_net_pton.h ares_private.h      \
 | 
			
		||||
  ares_ipv6.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_parse_ns_reply.obj: ares_parse_ns_reply.c setup.h              \
 | 
			
		||||
  setup_once.h nameser.h ares.h ares_dns.h ares_private.h ares_ipv6.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_getnameinfo.obj: ares_getnameinfo.c setup.h setup_once.h       \
 | 
			
		||||
  nameser.h ares.h ares_private.h ares_ipv6.h inet_ntop.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\inet_net_pton.obj: inet_net_pton.c setup.h setup_once.h nameser.h   \
 | 
			
		||||
  ares_ipv6.h inet_net_pton.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\bitncmp.obj: bitncmp.c bitncmp.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\inet_ntop.obj: inet_ntop.c setup.h setup_once.h nameser.h           \
 | 
			
		||||
  ares_ipv6.h inet_ntop.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_getopt.obj: ares_getopt.c ares_getopt.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_llist.obj: ares_llist.c setup.h setup_once.h ares.h            \
 | 
			
		||||
  ares_private.h ares_llist.h
 | 
			
		||||
 | 
			
		||||
$(OBJ_DIR)\ares_writev.obj: ares_writev.c setup.h setup_once.h ares.h          \
 | 
			
		||||
  ares_writev.h
 | 
			
		||||
							
								
								
									
										21
									
								
								ares/NEWS
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								ares/NEWS
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
Major changes since:
 | 
			
		||||
* see the CHANGES file
 | 
			
		||||
 | 
			
		||||
Major changes in release 1.1.1:
 | 
			
		||||
* ares should now compile as C++ code (no longer uses reserved word
 | 
			
		||||
  "class").
 | 
			
		||||
* Added SRV support to adig test program.
 | 
			
		||||
* Fixed a few error handling bugs in query processing.
 | 
			
		||||
 | 
			
		||||
Major changes in release 1.1.0:
 | 
			
		||||
* Added ares_free_string() function so that memory can be freed in the
 | 
			
		||||
  same layer as it is allocated, a desirable feature in some
 | 
			
		||||
  environments.
 | 
			
		||||
* A few of the ares_dns.h macros are fixed to use the proper bitwise
 | 
			
		||||
  operator.
 | 
			
		||||
* Fixed a couple of fenceposts fixed in ares_expand_name()'s
 | 
			
		||||
  bounds-checking.
 | 
			
		||||
* In process_timeouts(), extract query->next before calling
 | 
			
		||||
  next_server() and possibly freeing the query structure.
 | 
			
		||||
* Casted arguments to ctype macros casted to unsigned char, since not
 | 
			
		||||
  all char values are valid inputs to those macros according to ANSI.
 | 
			
		||||
							
								
								
									
										46
									
								
								ares/README
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								ares/README
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,46 @@
 | 
			
		||||
This is c-ares, a forked version of the original ares. The original ares
 | 
			
		||||
README follows below, the c-ares specific details are in README.cares
 | 
			
		||||
 | 
			
		||||
====================================================================
 | 
			
		||||
 | 
			
		||||
This is ares, an asynchronous resolver library.  It is intended for
 | 
			
		||||
applications which need to perform DNS queries without blocking, or
 | 
			
		||||
need to perform multiple DNS queries in parallel.  The primary
 | 
			
		||||
examples of such applications are servers which communicate with
 | 
			
		||||
multiple clients and programs with graphical user interfaces.
 | 
			
		||||
 | 
			
		||||
This library implementation is not especially portable to crufty old
 | 
			
		||||
systems like SunOS 4.  It assumes a compiler which can handle ANSI C
 | 
			
		||||
syntax, a system malloc which properly handles realloc(NULL, foo) and
 | 
			
		||||
free(NULL), and a reasonably up-to-date <arpa/nameser.h>.
 | 
			
		||||
 | 
			
		||||
I have attempted to preserve the externally visible behavior of the
 | 
			
		||||
BIND resolver in nearly all respects.  The API of the library is, of
 | 
			
		||||
course, very different from the synchronous BIND API; instead of
 | 
			
		||||
invoking a function like res_send() and getting a return value back
 | 
			
		||||
indicating the number of bytes in the response, you invoke a function
 | 
			
		||||
like ares_send() and give it a callback function to invoke when the
 | 
			
		||||
response arrives.  You then have to select() on the file descriptors
 | 
			
		||||
indicated by ares_fds(), with a timeout given by ares_timeout().  You
 | 
			
		||||
call ares_process() when select() returns.
 | 
			
		||||
 | 
			
		||||
Some features are missing from the current version of ares, relative
 | 
			
		||||
to the BIND resolver:
 | 
			
		||||
 | 
			
		||||
	* There is no IPV6 support.                [not true for c-ares]
 | 
			
		||||
	* There is no hostname verification.
 | 
			
		||||
	* There is no logging of unexpected events.
 | 
			
		||||
	* There is no debugging-oriented logging.
 | 
			
		||||
	* There is no YP support.
 | 
			
		||||
 | 
			
		||||
libares requires an ANSI compiler to compile and use.  To build the
 | 
			
		||||
library, just run "./configure" and "make".  To install it, run "make
 | 
			
		||||
install".  Run "./configure --help" to see a list of options you can
 | 
			
		||||
provide to configure to change how the library builds.  libares has no
 | 
			
		||||
data files, so you can move the include file and library around freely
 | 
			
		||||
without leaving behind any dependencies on old paths.  Building the
 | 
			
		||||
library will also build the "adig" program, a little toy for trying
 | 
			
		||||
out the library.  It doesn't get installed.
 | 
			
		||||
 | 
			
		||||
libares is distributed at athena-dist.mit.edu:pub/ATHENA/ares.  Please
 | 
			
		||||
send bug reports and comments to ghudson@mit.edu.
 | 
			
		||||
							
								
								
									
										25
									
								
								ares/README.cares
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								ares/README.cares
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
			
		||||
c-ares
 | 
			
		||||
======
 | 
			
		||||
 | 
			
		||||
This package is based on ares 1.1.1 (written by Greg Hudson). I decided to
 | 
			
		||||
fork and release a separate project since the ares author didn't want the
 | 
			
		||||
improvements that were vital for our use of it.
 | 
			
		||||
 | 
			
		||||
This package is dubbed 'c-ares' since I (Daniel Stenberg) wanted this for use
 | 
			
		||||
within the curl project (hence the letter C) and it makes a nice pun. Also,
 | 
			
		||||
c-ares is not API compatible with ares: a new name makes that more obvious to
 | 
			
		||||
the public.
 | 
			
		||||
 | 
			
		||||
The full source code is available in the 'c-ares' release archives, and in the
 | 
			
		||||
'ares' subdir of the curl CVS source repository.
 | 
			
		||||
 | 
			
		||||
If you find bugs, correct flaws, have questions or have comments in general in
 | 
			
		||||
regard to c-ares (or by all means the original ares too), get in touch with us
 | 
			
		||||
on the c-ares mailing list: http://cool.haxx.se/mailman/listinfo/c-ares
 | 
			
		||||
 | 
			
		||||
c-ares is of course distributed under the same MIT-style license as the
 | 
			
		||||
original ares.
 | 
			
		||||
 | 
			
		||||
You'll find all c-ares details and news here:
 | 
			
		||||
 | 
			
		||||
        http://daniel.haxx.se/projects/c-ares
 | 
			
		||||
							
								
								
									
										25
									
								
								ares/RELEASE-NOTES
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								ares/RELEASE-NOTES
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
			
		||||
This is what's new and changed in the c-ares 1.6.0 release:
 | 
			
		||||
 | 
			
		||||
Changed:
 | 
			
		||||
 | 
			
		||||
 o Added support for the glibc "rotate" resolv.conf option (or ARES_OPT_ROTATE)
 | 
			
		||||
 o Added ares_gethostbyname_file()
 | 
			
		||||
 o Added ares_dup()
 | 
			
		||||
 o Added ares_set_socket_callback()
 | 
			
		||||
 | 
			
		||||
Fixed:
 | 
			
		||||
 | 
			
		||||
 o improved configure detection of several functions
 | 
			
		||||
 o improved source code portability
 | 
			
		||||
 o adig supports a regular numerical dotted IP address for the -s option
 | 
			
		||||
 o handling of EINPROGRESS for UDP connects
 | 
			
		||||
 o ares_parse_ptr_reply() would cause a buffer to shrink instead of expand if a
 | 
			
		||||
   reply contained 8 or more records
 | 
			
		||||
 o buildconf works on OS X
 | 
			
		||||
 | 
			
		||||
Thanks go to these friendly people for their efforts and contributions:
 | 
			
		||||
 | 
			
		||||
 Yang Tse, Charles Hardin, Carlo Contavalli, Brad Spencer, Gerald Combs,
 | 
			
		||||
 Gregor Jasny
 | 
			
		||||
 | 
			
		||||
Have fun!
 | 
			
		||||
							
								
								
									
										8
									
								
								ares/TODO
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								ares/TODO
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
TODO
 | 
			
		||||
====
 | 
			
		||||
 | 
			
		||||
ares_gethostbyname
 | 
			
		||||
 | 
			
		||||
- When built to support IPv6, it needs to also support PF_UNSPEC or similar,
 | 
			
		||||
  so that an application can ask for any protocol and then c-ares would return
 | 
			
		||||
  all known resolves and not just explicitly IPv4 _or_ IPv6 resolves.
 | 
			
		||||
							
								
								
									
										1732
									
								
								ares/acinclude.m4
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1732
									
								
								ares/acinclude.m4
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										614
									
								
								ares/acountry.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										614
									
								
								ares/acountry.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,614 @@
 | 
			
		||||
/*
 | 
			
		||||
 * $Id$
 | 
			
		||||
 *
 | 
			
		||||
 * IP-address/hostname to country converter.
 | 
			
		||||
 *
 | 
			
		||||
 * Problem; you want to know where IP a.b.c.d is located.
 | 
			
		||||
 *
 | 
			
		||||
 * Use ares_gethostbyname ("d.c.b.a.zz.countries.nerd.dk")
 | 
			
		||||
 * and get the CNAME (host->h_name). Result will be:
 | 
			
		||||
 *   CNAME = zz<CC>.countries.nerd.dk with address 127.0.x.y (ver 1) or
 | 
			
		||||
 *   CNAME = <a.b.c.d>.zz.countries.nerd.dk with address 127.0.x.y (ver 2)
 | 
			
		||||
 *
 | 
			
		||||
 * The 2 letter country code in <CC> and the ISO-3166 country
 | 
			
		||||
 * number in x.y (number = x*256 + y). Version 2 of the protocol is missing
 | 
			
		||||
 * the <CC> number.
 | 
			
		||||
 *
 | 
			
		||||
 * Ref: http://countries.nerd.dk/more.html
 | 
			
		||||
 *
 | 
			
		||||
 * Written by G. Vanem <gvanem@broadpark.no> 2006, 2007
 | 
			
		||||
 *
 | 
			
		||||
 * NB! This program may not be big-endian aware.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <stdarg.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <ctype.h>
 | 
			
		||||
#ifdef HAVE_UNISTD_H
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_STRINGS_H
 | 
			
		||||
#include <strings.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(WIN32) && !defined(WATT32)
 | 
			
		||||
  #include <winsock.h>
 | 
			
		||||
#else
 | 
			
		||||
  #include <sys/socket.h>
 | 
			
		||||
  #include <arpa/inet.h>
 | 
			
		||||
  #include <netinet/in.h>
 | 
			
		||||
  #include <netdb.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_getopt.h"
 | 
			
		||||
#include "inet_net_pton.h"
 | 
			
		||||
#include "inet_ntop.h"
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_STRDUP
 | 
			
		||||
#  include "ares_strdup.h"
 | 
			
		||||
#  define strdup(ptr) ares_strdup(ptr)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_STRCASECMP
 | 
			
		||||
#  include "ares_strcasecmp.h"
 | 
			
		||||
#  define strcasecmp(p1,p2) ares_strcasecmp(p1,p2)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_STRNCASECMP
 | 
			
		||||
#  include "ares_strcasecmp.h"
 | 
			
		||||
#  define strncasecmp(p1,p2,n) ares_strncasecmp(p1,p2,n)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef INADDR_NONE
 | 
			
		||||
#define INADDR_NONE 0xffffffff
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static const char *usage      = "acountry [-vh?] {host|addr} ...\n";
 | 
			
		||||
static const char  nerd_fmt[] = "%u.%u.%u.%u.zz.countries.nerd.dk";
 | 
			
		||||
static const char *nerd_ver1  = nerd_fmt + 14;
 | 
			
		||||
static const char *nerd_ver2  = nerd_fmt + 11;
 | 
			
		||||
static int         verbose    = 0;
 | 
			
		||||
 | 
			
		||||
#define TRACE(fmt) do {               \
 | 
			
		||||
                     if (verbose > 0) \
 | 
			
		||||
                       printf fmt ;   \
 | 
			
		||||
                   } while (0)
 | 
			
		||||
 | 
			
		||||
static void wait_ares(ares_channel channel);
 | 
			
		||||
static void callback(void *arg, int status, int timeouts, struct hostent *host);
 | 
			
		||||
static void callback2(void *arg, int status, int timeouts, struct hostent *host);
 | 
			
		||||
static void find_country_from_cname(const char *cname, struct in_addr addr);
 | 
			
		||||
 | 
			
		||||
static void Abort(const char *fmt, ...)
 | 
			
		||||
{
 | 
			
		||||
  va_list args;
 | 
			
		||||
  va_start(args, fmt);
 | 
			
		||||
  vfprintf(stderr, fmt, args);
 | 
			
		||||
  va_end(args);
 | 
			
		||||
  exit(1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
  ares_channel channel;
 | 
			
		||||
  int    ch, status;
 | 
			
		||||
 | 
			
		||||
#if defined(WIN32) && !defined(WATT32)
 | 
			
		||||
  WORD wVersionRequested = MAKEWORD(USE_WINSOCK,USE_WINSOCK);
 | 
			
		||||
  WSADATA wsaData;
 | 
			
		||||
  WSAStartup(wVersionRequested, &wsaData);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  while ((ch = ares_getopt(argc, argv, "dvh?")) != -1)
 | 
			
		||||
    switch (ch)
 | 
			
		||||
      {
 | 
			
		||||
      case 'd':
 | 
			
		||||
#ifdef WATT32
 | 
			
		||||
        dbug_init();
 | 
			
		||||
#endif
 | 
			
		||||
        break;
 | 
			
		||||
      case 'v':
 | 
			
		||||
        verbose++;
 | 
			
		||||
        break;
 | 
			
		||||
      case 'h':
 | 
			
		||||
      case '?':
 | 
			
		||||
      default:
 | 
			
		||||
        Abort(usage);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
  argc -= optind;
 | 
			
		||||
  argv += optind;
 | 
			
		||||
  if (argc < 1)
 | 
			
		||||
     Abort(usage);
 | 
			
		||||
 | 
			
		||||
  status = ares_init(&channel);
 | 
			
		||||
  if (status != ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      fprintf(stderr, "ares_init: %s\n", ares_strerror(status));
 | 
			
		||||
      return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Initiate the queries, one per command-line argument. */
 | 
			
		||||
  for ( ; *argv; argv++)
 | 
			
		||||
    {
 | 
			
		||||
      struct in_addr addr;
 | 
			
		||||
      char buf[100];
 | 
			
		||||
 | 
			
		||||
      /* If this fails, assume '*argv' is a host-name that
 | 
			
		||||
       * must be resolved first
 | 
			
		||||
       */
 | 
			
		||||
      if (ares_inet_pton(AF_INET, *argv, &addr) != 1)
 | 
			
		||||
        {
 | 
			
		||||
          ares_gethostbyname(channel, *argv, AF_INET, callback2, &addr);
 | 
			
		||||
          wait_ares(channel);
 | 
			
		||||
          if (addr.s_addr == INADDR_NONE)
 | 
			
		||||
            {
 | 
			
		||||
              printf("Failed to lookup %s\n", *argv);
 | 
			
		||||
              continue;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      sprintf(buf, nerd_fmt,
 | 
			
		||||
              (unsigned int)(addr.s_addr >> 24),
 | 
			
		||||
              (unsigned int)((addr.s_addr >> 16) & 255),
 | 
			
		||||
              (unsigned int)((addr.s_addr >> 8) & 255),
 | 
			
		||||
              (unsigned int)(addr.s_addr & 255));
 | 
			
		||||
      TRACE(("Looking up %s...", buf));
 | 
			
		||||
      fflush(stdout);
 | 
			
		||||
      ares_gethostbyname(channel, buf, AF_INET, callback, buf);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  wait_ares(channel);
 | 
			
		||||
  ares_destroy(channel);
 | 
			
		||||
 | 
			
		||||
#if defined(WIN32) && !defined(WATT32)
 | 
			
		||||
  WSACleanup();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Wait for the queries to complete.
 | 
			
		||||
 */
 | 
			
		||||
static void wait_ares(ares_channel channel)
 | 
			
		||||
{
 | 
			
		||||
  while (1)
 | 
			
		||||
    {
 | 
			
		||||
      struct timeval *tvp, tv;
 | 
			
		||||
      fd_set read_fds, write_fds;
 | 
			
		||||
      int nfds;
 | 
			
		||||
 | 
			
		||||
      FD_ZERO(&read_fds);
 | 
			
		||||
      FD_ZERO(&write_fds);
 | 
			
		||||
      nfds = ares_fds(channel, &read_fds, &write_fds);
 | 
			
		||||
      if (nfds == 0)
 | 
			
		||||
        break;
 | 
			
		||||
      tvp = ares_timeout(channel, NULL, &tv);
 | 
			
		||||
      select(nfds, &read_fds, &write_fds, NULL, tvp);
 | 
			
		||||
      ares_process(channel, &read_fds, &write_fds);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This is the callback used when we have the IP-address of interest.
 | 
			
		||||
 * Extract the CNAME and figure out the country-code from it.
 | 
			
		||||
 */
 | 
			
		||||
static void callback(void *arg, int status, int timeouts, struct hostent *host)
 | 
			
		||||
{
 | 
			
		||||
  const char *name = (const char*)arg;
 | 
			
		||||
  const char *cname;
 | 
			
		||||
  char buf[20];
 | 
			
		||||
 | 
			
		||||
  (void)timeouts;
 | 
			
		||||
 | 
			
		||||
  if (!host || status != ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      printf("Failed to lookup %s: %s\n", name, ares_strerror(status));
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  TRACE(("\nFound address %s, name %s\n",
 | 
			
		||||
         ares_inet_ntop(AF_INET,(const char*)host->h_addr,buf,sizeof(buf)),
 | 
			
		||||
         host->h_name));
 | 
			
		||||
 | 
			
		||||
  cname = host->h_name;  /* CNAME gets put here */
 | 
			
		||||
  if (!cname)
 | 
			
		||||
    printf("Failed to get CNAME for %s\n", name);
 | 
			
		||||
  else
 | 
			
		||||
    find_country_from_cname(cname, *(struct in_addr*)host->h_addr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This is the callback used to obtain the IP-address of the host of interest.
 | 
			
		||||
 */
 | 
			
		||||
static void callback2(void *arg, int status, int timeouts, struct hostent *host)
 | 
			
		||||
{
 | 
			
		||||
  struct in_addr *addr = (struct in_addr*) arg;
 | 
			
		||||
 | 
			
		||||
  (void)timeouts;
 | 
			
		||||
  if (!host || status != ARES_SUCCESS)
 | 
			
		||||
    memset(addr, INADDR_NONE, sizeof(*addr));
 | 
			
		||||
  else
 | 
			
		||||
    memcpy(addr, host->h_addr, sizeof(*addr));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct search_list {
 | 
			
		||||
       int         country_number; /* ISO-3166 country number */
 | 
			
		||||
       char        short_name[3];  /* A2 short country code */
 | 
			
		||||
       const char *long_name;      /* normal country name */
 | 
			
		||||
     };
 | 
			
		||||
 | 
			
		||||
static const struct search_list *list_lookup(int number, const struct search_list *list, int num)
 | 
			
		||||
{
 | 
			
		||||
  while (num > 0 && list->long_name)
 | 
			
		||||
    {
 | 
			
		||||
      if (list->country_number == number)
 | 
			
		||||
        return (list);
 | 
			
		||||
      num--;
 | 
			
		||||
      list++;
 | 
			
		||||
    }
 | 
			
		||||
  return (NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Ref: ftp://ftp.ripe.net/iso3166-countrycodes.txt
 | 
			
		||||
 */
 | 
			
		||||
static const struct search_list country_list[] = {
 | 
			
		||||
       {   4, "af", "Afghanistan"                          },
 | 
			
		||||
       { 248, "ax", "<EFBFBD>land Island"                         },
 | 
			
		||||
       {   8, "al", "Albania"                              },
 | 
			
		||||
       {  12, "dz", "Algeria"                              },
 | 
			
		||||
       {  16, "as", "American Samoa"                       },
 | 
			
		||||
       {  20, "ad", "Andorra"                              },
 | 
			
		||||
       {  24, "ao", "Angola"                               },
 | 
			
		||||
       { 660, "ai", "Anguilla"                             },
 | 
			
		||||
       {  10, "aq", "Antarctica"                           },
 | 
			
		||||
       {  28, "ag", "Antigua & Barbuda"                    },
 | 
			
		||||
       {  32, "ar", "Argentina"                            },
 | 
			
		||||
       {  51, "am", "Armenia"                              },
 | 
			
		||||
       { 533, "aw", "Aruba"                                },
 | 
			
		||||
       {  36, "au", "Australia"                            },
 | 
			
		||||
       {  40, "at", "Austria"                              },
 | 
			
		||||
       {  31, "az", "Azerbaijan"                           },
 | 
			
		||||
       {  44, "bs", "Bahamas"                              },
 | 
			
		||||
       {  48, "bh", "Bahrain"                              },
 | 
			
		||||
       {  50, "bd", "Bangladesh"                           },
 | 
			
		||||
       {  52, "bb", "Barbados"                             },
 | 
			
		||||
       { 112, "by", "Belarus"                              },
 | 
			
		||||
       {  56, "be", "Belgium"                              },
 | 
			
		||||
       {  84, "bz", "Belize"                               },
 | 
			
		||||
       { 204, "bj", "Benin"                                },
 | 
			
		||||
       {  60, "bm", "Bermuda"                              },
 | 
			
		||||
       {  64, "bt", "Bhutan"                               },
 | 
			
		||||
       {  68, "bo", "Bolivia"                              },
 | 
			
		||||
       {  70, "ba", "Bosnia & Herzegowina"                 },
 | 
			
		||||
       {  72, "bw", "Botswana"                             },
 | 
			
		||||
       {  74, "bv", "Bouvet Island"                        },
 | 
			
		||||
       {  76, "br", "Brazil"                               },
 | 
			
		||||
       {  86, "io", "British Indian Ocean Territory"       },
 | 
			
		||||
       {  96, "bn", "Brunei Darussalam"                    },
 | 
			
		||||
       { 100, "bg", "Bulgaria"                             },
 | 
			
		||||
       { 854, "bf", "Burkina Faso"                         },
 | 
			
		||||
       { 108, "bi", "Burundi"                              },
 | 
			
		||||
       { 116, "kh", "Cambodia"                             },
 | 
			
		||||
       { 120, "cm", "Cameroon"                             },
 | 
			
		||||
       { 124, "ca", "Canada"                               },
 | 
			
		||||
       { 132, "cv", "Cape Verde"                           },
 | 
			
		||||
       { 136, "ky", "Cayman Islands"                       },
 | 
			
		||||
       { 140, "cf", "Central African Republic"             },
 | 
			
		||||
       { 148, "td", "Chad"                                 },
 | 
			
		||||
       { 152, "cl", "Chile"                                },
 | 
			
		||||
       { 156, "cn", "China"                                },
 | 
			
		||||
       { 162, "cx", "Christmas Island"                     },
 | 
			
		||||
       { 166, "cc", "Cocos Islands"                        },
 | 
			
		||||
       { 170, "co", "Colombia"                             },
 | 
			
		||||
       { 174, "km", "Comoros"                              },
 | 
			
		||||
       { 178, "cg", "Congo"                                },
 | 
			
		||||
       { 180, "cd", "Congo"                                },
 | 
			
		||||
       { 184, "ck", "Cook Islands"                         },
 | 
			
		||||
       { 188, "cr", "Costa Rica"                           },
 | 
			
		||||
       { 384, "ci", "Cote d'Ivoire"                        },
 | 
			
		||||
       { 191, "hr", "Croatia"                              },
 | 
			
		||||
       { 192, "cu", "Cuba"                                 },
 | 
			
		||||
       { 196, "cy", "Cyprus"                               },
 | 
			
		||||
       { 203, "cz", "Czech Republic"                       },
 | 
			
		||||
       { 208, "dk", "Denmark"                              },
 | 
			
		||||
       { 262, "dj", "Djibouti"                             },
 | 
			
		||||
       { 212, "dm", "Dominica"                             },
 | 
			
		||||
       { 214, "do", "Dominican Republic"                   },
 | 
			
		||||
       { 218, "ec", "Ecuador"                              },
 | 
			
		||||
       { 818, "eg", "Egypt"                                },
 | 
			
		||||
       { 222, "sv", "El Salvador"                          },
 | 
			
		||||
       { 226, "gq", "Equatorial Guinea"                    },
 | 
			
		||||
       { 232, "er", "Eritrea"                              },
 | 
			
		||||
       { 233, "ee", "Estonia"                              },
 | 
			
		||||
       { 231, "et", "Ethiopia"                             },
 | 
			
		||||
       { 238, "fk", "Falkland Islands"                     },
 | 
			
		||||
       { 234, "fo", "Faroe Islands"                        },
 | 
			
		||||
       { 242, "fj", "Fiji"                                 },
 | 
			
		||||
       { 246, "fi", "Finland"                              },
 | 
			
		||||
       { 250, "fr", "France"                               },
 | 
			
		||||
       { 249, "fx", "France, Metropolitan"                 },
 | 
			
		||||
       { 254, "gf", "French Guiana"                        },
 | 
			
		||||
       { 258, "pf", "French Polynesia"                     },
 | 
			
		||||
       { 260, "tf", "French Southern Territories"          },
 | 
			
		||||
       { 266, "ga", "Gabon"                                },
 | 
			
		||||
       { 270, "gm", "Gambia"                               },
 | 
			
		||||
       { 268, "ge", "Georgia"                              },
 | 
			
		||||
       { 276, "de", "Germany"                              },
 | 
			
		||||
       { 288, "gh", "Ghana"                                },
 | 
			
		||||
       { 292, "gi", "Gibraltar"                            },
 | 
			
		||||
       { 300, "gr", "Greece"                               },
 | 
			
		||||
       { 304, "gl", "Greenland"                            },
 | 
			
		||||
       { 308, "gd", "Grenada"                              },
 | 
			
		||||
       { 312, "gp", "Guadeloupe"                           },
 | 
			
		||||
       { 316, "gu", "Guam"                                 },
 | 
			
		||||
       { 320, "gt", "Guatemala"                            },
 | 
			
		||||
       { 324, "gn", "Guinea"                               },
 | 
			
		||||
       { 624, "gw", "Guinea-Bissau"                        },
 | 
			
		||||
       { 328, "gy", "Guyana"                               },
 | 
			
		||||
       { 332, "ht", "Haiti"                                },
 | 
			
		||||
       { 334, "hm", "Heard & Mc Donald Islands"            },
 | 
			
		||||
       { 336, "va", "Vatican City"                         },
 | 
			
		||||
       { 340, "hn", "Honduras"                             },
 | 
			
		||||
       { 344, "hk", "Hong kong"                            },
 | 
			
		||||
       { 348, "hu", "Hungary"                              },
 | 
			
		||||
       { 352, "is", "Iceland"                              },
 | 
			
		||||
       { 356, "in", "India"                                },
 | 
			
		||||
       { 360, "id", "Indonesia"                            },
 | 
			
		||||
       { 364, "ir", "Iran"                                 },
 | 
			
		||||
       { 368, "iq", "Iraq"                                 },
 | 
			
		||||
       { 372, "ie", "Ireland"                              },
 | 
			
		||||
       { 376, "il", "Israel"                               },
 | 
			
		||||
       { 380, "it", "Italy"                                },
 | 
			
		||||
       { 388, "jm", "Jamaica"                              },
 | 
			
		||||
       { 392, "jp", "Japan"                                },
 | 
			
		||||
       { 400, "jo", "Jordan"                               },
 | 
			
		||||
       { 398, "kz", "Kazakhstan"                           },
 | 
			
		||||
       { 404, "ke", "Kenya"                                },
 | 
			
		||||
       { 296, "ki", "Kiribati"                             },
 | 
			
		||||
       { 408, "kp", "Korea (north)"                        },
 | 
			
		||||
       { 410, "kr", "Korea (south)"                        },
 | 
			
		||||
       { 414, "kw", "Kuwait"                               },
 | 
			
		||||
       { 417, "kg", "Kyrgyzstan"                           },
 | 
			
		||||
       { 418, "la", "Laos"                                 },
 | 
			
		||||
       { 428, "lv", "Latvia"                               },
 | 
			
		||||
       { 422, "lb", "Lebanon"                              },
 | 
			
		||||
       { 426, "ls", "Lesotho"                              },
 | 
			
		||||
       { 430, "lr", "Liberia"                              },
 | 
			
		||||
       { 434, "ly", "Libya"                                },
 | 
			
		||||
       { 438, "li", "Liechtenstein"                        },
 | 
			
		||||
       { 440, "lt", "Lithuania"                            },
 | 
			
		||||
       { 442, "lu", "Luxembourg"                           },
 | 
			
		||||
       { 446, "mo", "Macao"                                },
 | 
			
		||||
       { 807, "mk", "Macedonia"                            },
 | 
			
		||||
       { 450, "mg", "Madagascar"                           },
 | 
			
		||||
       { 454, "mw", "Malawi"                               },
 | 
			
		||||
       { 458, "my", "Malaysia"                             },
 | 
			
		||||
       { 462, "mv", "Maldives"                             },
 | 
			
		||||
       { 466, "ml", "Mali"                                 },
 | 
			
		||||
       { 470, "mt", "Malta"                                },
 | 
			
		||||
       { 584, "mh", "Marshall Islands"                     },
 | 
			
		||||
       { 474, "mq", "Martinique"                           },
 | 
			
		||||
       { 478, "mr", "Mauritania"                           },
 | 
			
		||||
       { 480, "mu", "Mauritius"                            },
 | 
			
		||||
       { 175, "yt", "Mayotte"                              },
 | 
			
		||||
       { 484, "mx", "Mexico"                               },
 | 
			
		||||
       { 583, "fm", "Micronesia"                           },
 | 
			
		||||
       { 498, "md", "Moldova"                              },
 | 
			
		||||
       { 492, "mc", "Monaco"                               },
 | 
			
		||||
       { 496, "mn", "Mongolia"                             },
 | 
			
		||||
       { 500, "ms", "Montserrat"                           },
 | 
			
		||||
       { 504, "ma", "Morocco"                              },
 | 
			
		||||
       { 508, "mz", "Mozambique"                           },
 | 
			
		||||
       { 104, "mm", "Myanmar"                              },
 | 
			
		||||
       { 516, "na", "Namibia"                              },
 | 
			
		||||
       { 520, "nr", "Nauru"                                },
 | 
			
		||||
       { 524, "np", "Nepal"                                },
 | 
			
		||||
       { 528, "nl", "Netherlands"                          },
 | 
			
		||||
       { 530, "an", "Netherlands Antilles"                 },
 | 
			
		||||
       { 540, "nc", "New Caledonia"                        },
 | 
			
		||||
       { 554, "nz", "New Zealand"                          },
 | 
			
		||||
       { 558, "ni", "Nicaragua"                            },
 | 
			
		||||
       { 562, "ne", "Niger"                                },
 | 
			
		||||
       { 566, "ng", "Nigeria"                              },
 | 
			
		||||
       { 570, "nu", "Niue"                                 },
 | 
			
		||||
       { 574, "nf", "Norfolk Island"                       },
 | 
			
		||||
       { 580, "mp", "Northern Mariana Islands"             },
 | 
			
		||||
       { 578, "no", "Norway"                               },
 | 
			
		||||
       { 512, "om", "Oman"                                 },
 | 
			
		||||
       { 586, "pk", "Pakistan"                             },
 | 
			
		||||
       { 585, "pw", "Palau"                                },
 | 
			
		||||
       { 275, "ps", "Palestinian Territory"                },
 | 
			
		||||
       { 591, "pa", "Panama"                               },
 | 
			
		||||
       { 598, "pg", "Papua New Guinea"                     },
 | 
			
		||||
       { 600, "py", "Paraguay"                             },
 | 
			
		||||
       { 604, "pe", "Peru"                                 },
 | 
			
		||||
       { 608, "ph", "Philippines"                          },
 | 
			
		||||
       { 612, "pn", "Pitcairn"                             },
 | 
			
		||||
       { 616, "pl", "Poland"                               },
 | 
			
		||||
       { 620, "pt", "Portugal"                             },
 | 
			
		||||
       { 630, "pr", "Puerto Rico"                          },
 | 
			
		||||
       { 634, "qa", "Qatar"                                },
 | 
			
		||||
       { 638, "re", "Reunion"                              },
 | 
			
		||||
       { 642, "ro", "Romania"                              },
 | 
			
		||||
       { 643, "ru", "Russia"                               },
 | 
			
		||||
       { 646, "rw", "Rwanda"                               },
 | 
			
		||||
       { 659, "kn", "Saint Kitts & Nevis"                  },
 | 
			
		||||
       { 662, "lc", "Saint Lucia"                          },
 | 
			
		||||
       { 670, "vc", "Saint Vincent"                        },
 | 
			
		||||
       { 882, "ws", "Samoa"                                },
 | 
			
		||||
       { 674, "sm", "San Marino"                           },
 | 
			
		||||
       { 678, "st", "Sao Tome & Principe"                  },
 | 
			
		||||
       { 682, "sa", "Saudi Arabia"                         },
 | 
			
		||||
       { 686, "sn", "Senegal"                              },
 | 
			
		||||
       { 891, "cs", "Serbia and Montenegro"                },
 | 
			
		||||
       { 690, "sc", "Seychelles"                           },
 | 
			
		||||
       { 694, "sl", "Sierra Leone"                         },
 | 
			
		||||
       { 702, "sg", "Singapore"                            },
 | 
			
		||||
       { 703, "sk", "Slovakia"                             },
 | 
			
		||||
       { 705, "si", "Slovenia"                             },
 | 
			
		||||
       {  90, "sb", "Solomon Islands"                      },
 | 
			
		||||
       { 706, "so", "Somalia"                              },
 | 
			
		||||
       { 710, "za", "South Africa"                         },
 | 
			
		||||
       { 239, "gs", "South Georgia"                        },
 | 
			
		||||
       { 724, "es", "Spain"                                },
 | 
			
		||||
       { 144, "lk", "Sri Lanka"                            },
 | 
			
		||||
       { 654, "sh", "St. Helena"                           },
 | 
			
		||||
       { 666, "pm", "St. Pierre & Miquelon"                },
 | 
			
		||||
       { 736, "sd", "Sudan"                                },
 | 
			
		||||
       { 740, "sr", "Suriname"                             },
 | 
			
		||||
       { 744, "sj", "Svalbard & Jan Mayen Islands"         },
 | 
			
		||||
       { 748, "sz", "Swaziland"                            },
 | 
			
		||||
       { 752, "se", "Sweden"                               },
 | 
			
		||||
       { 756, "ch", "Switzerland"                          },
 | 
			
		||||
       { 760, "sy", "Syrian Arab Republic"                 },
 | 
			
		||||
       { 626, "tl", "Timor-Leste"                          },
 | 
			
		||||
       { 158, "tw", "Taiwan"                               },
 | 
			
		||||
       { 762, "tj", "Tajikistan"                           },
 | 
			
		||||
       { 834, "tz", "Tanzania"                             },
 | 
			
		||||
       { 764, "th", "Thailand"                             },
 | 
			
		||||
       { 768, "tg", "Togo"                                 },
 | 
			
		||||
       { 772, "tk", "Tokelau"                              },
 | 
			
		||||
       { 776, "to", "Tonga"                                },
 | 
			
		||||
       { 780, "tt", "Trinidad & Tobago"                    },
 | 
			
		||||
       { 788, "tn", "Tunisia"                              },
 | 
			
		||||
       { 792, "tr", "Turkey"                               },
 | 
			
		||||
       { 795, "tm", "Turkmenistan"                         },
 | 
			
		||||
       { 796, "tc", "Turks & Caicos Islands"               },
 | 
			
		||||
       { 798, "tv", "Tuvalu"                               },
 | 
			
		||||
       { 800, "ug", "Uganda"                               },
 | 
			
		||||
       { 804, "ua", "Ukraine"                              },
 | 
			
		||||
       { 784, "ae", "United Arab Emirates"                 },
 | 
			
		||||
       { 826, "gb", "United Kingdom"                       },
 | 
			
		||||
       { 840, "us", "United States"                        },
 | 
			
		||||
       { 581, "um", "United States Minor Outlying Islands" },
 | 
			
		||||
       { 858, "uy", "Uruguay"                              },
 | 
			
		||||
       { 860, "uz", "Uzbekistan"                           },
 | 
			
		||||
       { 548, "vu", "Vanuatu"                              },
 | 
			
		||||
       { 862, "ve", "Venezuela"                            },
 | 
			
		||||
       { 704, "vn", "Vietnam"                              },
 | 
			
		||||
       {  92, "vg", "Virgin Islands (British)"             },
 | 
			
		||||
       { 850, "vi", "Virgin Islands (US)"                  },
 | 
			
		||||
       { 876, "wf", "Wallis & Futuna Islands"              },
 | 
			
		||||
       { 732, "eh", "Western Sahara"                       },
 | 
			
		||||
       { 887, "ye", "Yemen"                                },
 | 
			
		||||
       { 894, "zm", "Zambia"                               },
 | 
			
		||||
       { 716, "zw", "Zimbabwe"                             }
 | 
			
		||||
     };
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Check if start of 'str' is simply an IPv4 address.
 | 
			
		||||
 */
 | 
			
		||||
#define BYTE_OK(x) ((x) >= 0 && (x) <= 255)
 | 
			
		||||
 | 
			
		||||
static int is_addr(char *str, char **end)
 | 
			
		||||
{
 | 
			
		||||
  int a0, a1, a2, a3, num, rc = 0, length = 0;
 | 
			
		||||
 | 
			
		||||
  num = sscanf(str,"%3d.%3d.%3d.%3d%n",&a0,&a1,&a2,&a3,&length);
 | 
			
		||||
  if( (num == 4) &&
 | 
			
		||||
      BYTE_OK(a0) && BYTE_OK(a1) && BYTE_OK(a2) && BYTE_OK(a3) &&
 | 
			
		||||
      length >= (3+4))
 | 
			
		||||
    {
 | 
			
		||||
      rc = 1;
 | 
			
		||||
      *end = str + length;
 | 
			
		||||
    }
 | 
			
		||||
  return rc;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Find the country-code and name from the CNAME. E.g.:
 | 
			
		||||
 *   version 1: CNAME = zzno.countries.nerd.dk with address 127.0.2.66
 | 
			
		||||
 *              yields ccode_A" = "no" and cnumber 578 (2.66).
 | 
			
		||||
 *   version 2: CNAME = <a.b.c.d>.zz.countries.nerd.dk with address 127.0.2.66
 | 
			
		||||
 *              yields cnumber 578 (2.66). ccode_A is "";
 | 
			
		||||
 */
 | 
			
		||||
static void find_country_from_cname(const char *cname, struct in_addr addr)
 | 
			
		||||
{
 | 
			
		||||
  const struct search_list *country;
 | 
			
		||||
  char  ccode_A2[3], *ccopy, *dot_4;
 | 
			
		||||
  int   cnumber, z0, z1, ver_1, ver_2;
 | 
			
		||||
  u_long ip;
 | 
			
		||||
 | 
			
		||||
  ip = ntohl(addr.s_addr);
 | 
			
		||||
  z0 = tolower(cname[0]);
 | 
			
		||||
  z1 = tolower(cname[1]);
 | 
			
		||||
  ccopy = strdup(cname);
 | 
			
		||||
  dot_4 = NULL;
 | 
			
		||||
 | 
			
		||||
  ver_1 = (z0 == 'z' && z1 == 'z' && !strcasecmp(cname+4,nerd_ver1));
 | 
			
		||||
  ver_2 = (is_addr(ccopy,&dot_4) && !strcasecmp(dot_4,nerd_ver2));
 | 
			
		||||
 | 
			
		||||
  if (ver_1)
 | 
			
		||||
    {
 | 
			
		||||
      const char *dot = strchr(cname, '.');
 | 
			
		||||
      if ((z0 != 'z' && z1 != 'z') || dot != cname+4)
 | 
			
		||||
        {
 | 
			
		||||
          printf("Unexpected CNAME %s (ver_1)\n", cname);
 | 
			
		||||
          return;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  else if (ver_2)
 | 
			
		||||
    {
 | 
			
		||||
      z0 = tolower(dot_4[1]);
 | 
			
		||||
      z1 = tolower(dot_4[2]);
 | 
			
		||||
      if (z0 != 'z' && z1 != 'z')
 | 
			
		||||
        {
 | 
			
		||||
          printf("Unexpected CNAME %s (ver_2)\n", cname);
 | 
			
		||||
          return;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      printf("Unexpected CNAME %s (ver?)\n", cname);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (ver_1)
 | 
			
		||||
    {
 | 
			
		||||
      ccode_A2[0] = (char)tolower(cname[2]);
 | 
			
		||||
      ccode_A2[1] = (char)tolower(cname[3]);
 | 
			
		||||
      ccode_A2[2] = '\0';
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    ccode_A2[0] = '\0';
 | 
			
		||||
 | 
			
		||||
  cnumber = ip & 0xFFFF;
 | 
			
		||||
 | 
			
		||||
  TRACE(("Found country-code `%s', number %d\n",
 | 
			
		||||
         ver_1 ? ccode_A2 : "<n/a>", cnumber));
 | 
			
		||||
 | 
			
		||||
  country = list_lookup(cnumber, country_list,
 | 
			
		||||
                        sizeof(country_list) / sizeof(country_list[0]));
 | 
			
		||||
  if (!country)
 | 
			
		||||
    printf("Name for country-number %d not found.\n", cnumber);
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      if (ver_1 && *(unsigned short*)&country->short_name != *(unsigned*)&ccode_A2)
 | 
			
		||||
        printf("short-name mismatch; %s vs %s\n", country->short_name, ccode_A2);
 | 
			
		||||
 | 
			
		||||
      printf("%s (%s), number %d.\n",
 | 
			
		||||
             country->long_name, country->short_name, cnumber);
 | 
			
		||||
    }
 | 
			
		||||
  free(ccopy);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										721
									
								
								ares/adig.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										721
									
								
								ares/adig.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,721 @@
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * $Id$
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_SYS_SOCKET_H
 | 
			
		||||
#  include <sys/socket.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETINET_IN_H
 | 
			
		||||
#  include <netinet/in.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_INET_H
 | 
			
		||||
#  include <arpa/inet.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETDB_H
 | 
			
		||||
#  include <netdb.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_H
 | 
			
		||||
#  include <arpa/nameser.h>
 | 
			
		||||
#else
 | 
			
		||||
#  include "nameser.h"
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
 | 
			
		||||
#  include <arpa/nameser_compat.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_SYS_TIME_H
 | 
			
		||||
#  include <sys/time.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_UNISTD_H
 | 
			
		||||
#  include <unistd.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_STRINGS_H
 | 
			
		||||
#  include <strings.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <ctype.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_dns.h"
 | 
			
		||||
#include "inet_ntop.h"
 | 
			
		||||
#include "inet_net_pton.h"
 | 
			
		||||
#include "ares_getopt.h"
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_STRDUP
 | 
			
		||||
#  include "ares_strdup.h"
 | 
			
		||||
#  define strdup(ptr) ares_strdup(ptr)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_STRCASECMP
 | 
			
		||||
#  include "ares_strcasecmp.h"
 | 
			
		||||
#  define strcasecmp(p1,p2) ares_strcasecmp(p1,p2)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_STRNCASECMP
 | 
			
		||||
#  include "ares_strcasecmp.h"
 | 
			
		||||
#  define strncasecmp(p1,p2,n) ares_strncasecmp(p1,p2,n)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef WATT32
 | 
			
		||||
#undef WIN32  /* Redefined in MingW headers */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Mac OS X portability check */
 | 
			
		||||
#ifndef T_SRV
 | 
			
		||||
#define T_SRV 33 /* server selection */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
struct nv {
 | 
			
		||||
  const char *name;
 | 
			
		||||
  int value;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const struct nv flags[] = {
 | 
			
		||||
  { "usevc",            ARES_FLAG_USEVC },
 | 
			
		||||
  { "primary",          ARES_FLAG_PRIMARY },
 | 
			
		||||
  { "igntc",            ARES_FLAG_IGNTC },
 | 
			
		||||
  { "norecurse",        ARES_FLAG_NORECURSE },
 | 
			
		||||
  { "stayopen",         ARES_FLAG_STAYOPEN },
 | 
			
		||||
  { "noaliases",        ARES_FLAG_NOALIASES }
 | 
			
		||||
};
 | 
			
		||||
static const int nflags = sizeof(flags) / sizeof(flags[0]);
 | 
			
		||||
 | 
			
		||||
static const struct nv classes[] = {
 | 
			
		||||
  { "IN",       C_IN },
 | 
			
		||||
  { "CHAOS",    C_CHAOS },
 | 
			
		||||
  { "HS",       C_HS },
 | 
			
		||||
  { "ANY",      C_ANY }
 | 
			
		||||
};
 | 
			
		||||
static const int nclasses = sizeof(classes) / sizeof(classes[0]);
 | 
			
		||||
 | 
			
		||||
static const struct nv types[] = {
 | 
			
		||||
  { "A",        T_A },
 | 
			
		||||
  { "NS",       T_NS },
 | 
			
		||||
  { "MD",       T_MD },
 | 
			
		||||
  { "MF",       T_MF },
 | 
			
		||||
  { "CNAME",    T_CNAME },
 | 
			
		||||
  { "SOA",      T_SOA },
 | 
			
		||||
  { "MB",       T_MB },
 | 
			
		||||
  { "MG",       T_MG },
 | 
			
		||||
  { "MR",       T_MR },
 | 
			
		||||
  { "NULL",     T_NULL },
 | 
			
		||||
  { "WKS",      T_WKS },
 | 
			
		||||
  { "PTR",      T_PTR },
 | 
			
		||||
  { "HINFO",    T_HINFO },
 | 
			
		||||
  { "MINFO",    T_MINFO },
 | 
			
		||||
  { "MX",       T_MX },
 | 
			
		||||
  { "TXT",      T_TXT },
 | 
			
		||||
  { "RP",       T_RP },
 | 
			
		||||
  { "AFSDB",    T_AFSDB },
 | 
			
		||||
  { "X25",      T_X25 },
 | 
			
		||||
  { "ISDN",     T_ISDN },
 | 
			
		||||
  { "RT",       T_RT },
 | 
			
		||||
  { "NSAP",     T_NSAP },
 | 
			
		||||
  { "NSAP_PTR", T_NSAP_PTR },
 | 
			
		||||
  { "SIG",      T_SIG },
 | 
			
		||||
  { "KEY",      T_KEY },
 | 
			
		||||
  { "PX",       T_PX },
 | 
			
		||||
  { "GPOS",     T_GPOS },
 | 
			
		||||
  { "AAAA",     T_AAAA },
 | 
			
		||||
  { "LOC",      T_LOC },
 | 
			
		||||
  { "SRV",      T_SRV },
 | 
			
		||||
  { "AXFR",     T_AXFR },
 | 
			
		||||
  { "MAILB",    T_MAILB },
 | 
			
		||||
  { "MAILA",    T_MAILA },
 | 
			
		||||
  { "NAPTR",    T_NAPTR },
 | 
			
		||||
  { "ANY",      T_ANY }
 | 
			
		||||
};
 | 
			
		||||
static const int ntypes = sizeof(types) / sizeof(types[0]);
 | 
			
		||||
 | 
			
		||||
static const char *opcodes[] = {
 | 
			
		||||
  "QUERY", "IQUERY", "STATUS", "(reserved)", "NOTIFY",
 | 
			
		||||
  "(unknown)", "(unknown)", "(unknown)", "(unknown)",
 | 
			
		||||
  "UPDATEA", "UPDATED", "UPDATEDA", "UPDATEM", "UPDATEMA",
 | 
			
		||||
  "ZONEINIT", "ZONEREF"
 | 
			
		||||
};
 | 
			
		||||
  struct in_addr inaddr;
 | 
			
		||||
 | 
			
		||||
static const char *rcodes[] = {
 | 
			
		||||
  "NOERROR", "FORMERR", "SERVFAIL", "NXDOMAIN", "NOTIMP", "REFUSED",
 | 
			
		||||
  "(unknown)", "(unknown)", "(unknown)", "(unknown)", "(unknown)",
 | 
			
		||||
  "(unknown)", "(unknown)", "(unknown)", "(unknown)", "NOCHANGE"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void callback(void *arg, int status, int timeouts,
 | 
			
		||||
                     unsigned char *abuf, int alen);
 | 
			
		||||
static const unsigned char *display_question(const unsigned char *aptr,
 | 
			
		||||
                                             const unsigned char *abuf,
 | 
			
		||||
                                             int alen);
 | 
			
		||||
static const unsigned char *display_rr(const unsigned char *aptr,
 | 
			
		||||
                                       const unsigned char *abuf, int alen);
 | 
			
		||||
static const char *type_name(int type);
 | 
			
		||||
static const char *class_name(int dnsclass);
 | 
			
		||||
static void usage(void);
 | 
			
		||||
 | 
			
		||||
int main(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
  ares_channel channel;
 | 
			
		||||
  int c, i, optmask = ARES_OPT_FLAGS, dnsclass = C_IN, type = T_A;
 | 
			
		||||
  int status, nfds, count;
 | 
			
		||||
  struct ares_options options;
 | 
			
		||||
  struct hostent *hostent;
 | 
			
		||||
  fd_set read_fds, write_fds;
 | 
			
		||||
  struct timeval *tvp, tv;
 | 
			
		||||
 | 
			
		||||
#ifdef USE_WINSOCK
 | 
			
		||||
  WORD wVersionRequested = MAKEWORD(USE_WINSOCK,USE_WINSOCK);
 | 
			
		||||
  WSADATA wsaData;
 | 
			
		||||
  WSAStartup(wVersionRequested, &wsaData);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  options.flags = ARES_FLAG_NOCHECKRESP;
 | 
			
		||||
  options.servers = NULL;
 | 
			
		||||
  options.nservers = 0;
 | 
			
		||||
  while ((c = ares_getopt(argc, argv, "df:s:c:t:T:U:")) != -1)
 | 
			
		||||
    {
 | 
			
		||||
      switch (c)
 | 
			
		||||
        {
 | 
			
		||||
        case 'd':
 | 
			
		||||
#ifdef WATT32
 | 
			
		||||
          dbug_init();
 | 
			
		||||
#endif
 | 
			
		||||
          break;
 | 
			
		||||
 | 
			
		||||
        case 'f':
 | 
			
		||||
          /* Add a flag. */
 | 
			
		||||
          for (i = 0; i < nflags; i++)
 | 
			
		||||
            {
 | 
			
		||||
              if (strcmp(flags[i].name, optarg) == 0)
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
          if (i == nflags)
 | 
			
		||||
            usage();
 | 
			
		||||
          options.flags |= flags[i].value;
 | 
			
		||||
          break;
 | 
			
		||||
 | 
			
		||||
        case 's':
 | 
			
		||||
          /* Add a server, and specify servers in the option mask. */
 | 
			
		||||
          if (ares_inet_pton(AF_INET, optarg, &inaddr) <= 0)
 | 
			
		||||
            {
 | 
			
		||||
              hostent = gethostbyname(optarg);
 | 
			
		||||
              if (!hostent || hostent->h_addrtype != AF_INET)
 | 
			
		||||
                {
 | 
			
		||||
                  fprintf(stderr, "adig: server %s not found.\n", optarg);
 | 
			
		||||
                  return 1;
 | 
			
		||||
                }
 | 
			
		||||
              memcpy(&inaddr, hostent->h_addr, sizeof(struct in_addr));
 | 
			
		||||
            }
 | 
			
		||||
          options.servers = realloc(options.servers, (options.nservers + 1)
 | 
			
		||||
                                    * sizeof(struct in_addr));
 | 
			
		||||
          if (!options.servers)
 | 
			
		||||
            {
 | 
			
		||||
              fprintf(stderr, "Out of memory!\n");
 | 
			
		||||
              return 1;
 | 
			
		||||
            }
 | 
			
		||||
          memcpy(&options.servers[options.nservers], &inaddr,
 | 
			
		||||
                 sizeof(struct in_addr));
 | 
			
		||||
          options.nservers++;
 | 
			
		||||
          optmask |= ARES_OPT_SERVERS;
 | 
			
		||||
          break;
 | 
			
		||||
 | 
			
		||||
        case 'c':
 | 
			
		||||
          /* Set the query class. */
 | 
			
		||||
          for (i = 0; i < nclasses; i++)
 | 
			
		||||
            {
 | 
			
		||||
              if (strcasecmp(classes[i].name, optarg) == 0)
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
          if (i == nclasses)
 | 
			
		||||
            usage();
 | 
			
		||||
          dnsclass = classes[i].value;
 | 
			
		||||
          break;
 | 
			
		||||
 | 
			
		||||
        case 't':
 | 
			
		||||
          /* Set the query type. */
 | 
			
		||||
          for (i = 0; i < ntypes; i++)
 | 
			
		||||
            {
 | 
			
		||||
              if (strcasecmp(types[i].name, optarg) == 0)
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
          if (i == ntypes)
 | 
			
		||||
            usage();
 | 
			
		||||
          type = types[i].value;
 | 
			
		||||
          break;
 | 
			
		||||
 | 
			
		||||
        case 'T':
 | 
			
		||||
          /* Set the TCP port number. */
 | 
			
		||||
          if (!ISDIGIT(*optarg))
 | 
			
		||||
            usage();
 | 
			
		||||
          options.tcp_port = (unsigned short)strtol(optarg, NULL, 0);
 | 
			
		||||
          optmask |= ARES_OPT_TCP_PORT;
 | 
			
		||||
          break;
 | 
			
		||||
 | 
			
		||||
        case 'U':
 | 
			
		||||
          /* Set the UDP port number. */
 | 
			
		||||
          if (!ISDIGIT(*optarg))
 | 
			
		||||
            usage();
 | 
			
		||||
          options.udp_port = (unsigned short)strtol(optarg, NULL, 0);
 | 
			
		||||
          optmask |= ARES_OPT_UDP_PORT;
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  argc -= optind;
 | 
			
		||||
  argv += optind;
 | 
			
		||||
  if (argc == 0)
 | 
			
		||||
    usage();
 | 
			
		||||
 | 
			
		||||
  status = ares_init_options(&channel, &options, optmask);
 | 
			
		||||
 | 
			
		||||
  if (status != ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      fprintf(stderr, "ares_init_options: %s\n",
 | 
			
		||||
              ares_strerror(status));
 | 
			
		||||
      return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Initiate the queries, one per command-line argument.  If there is
 | 
			
		||||
   * only one query to do, supply NULL as the callback argument;
 | 
			
		||||
   * otherwise, supply the query name as an argument so we can
 | 
			
		||||
   * distinguish responses for the user when printing them out.
 | 
			
		||||
   */
 | 
			
		||||
  if (argc == 1)
 | 
			
		||||
    ares_query(channel, *argv, dnsclass, type, callback, (char *) NULL);
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      for (; *argv; argv++)
 | 
			
		||||
        ares_query(channel, *argv, dnsclass, type, callback, *argv);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Wait for all queries to complete. */
 | 
			
		||||
  while (1)
 | 
			
		||||
    {
 | 
			
		||||
      FD_ZERO(&read_fds);
 | 
			
		||||
      FD_ZERO(&write_fds);
 | 
			
		||||
      nfds = ares_fds(channel, &read_fds, &write_fds);
 | 
			
		||||
      if (nfds == 0)
 | 
			
		||||
        break;
 | 
			
		||||
      tvp = ares_timeout(channel, NULL, &tv);
 | 
			
		||||
      count = select(nfds, &read_fds, &write_fds, NULL, tvp);
 | 
			
		||||
      if (count < 0 && SOCKERRNO != EINVAL)
 | 
			
		||||
        {
 | 
			
		||||
          perror("select");
 | 
			
		||||
          return 1;
 | 
			
		||||
        }
 | 
			
		||||
      ares_process(channel, &read_fds, &write_fds);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  ares_destroy(channel);
 | 
			
		||||
 | 
			
		||||
#ifdef USE_WINSOCK
 | 
			
		||||
  WSACleanup();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void callback(void *arg, int status, int timeouts,
 | 
			
		||||
                     unsigned char *abuf, int alen)
 | 
			
		||||
{
 | 
			
		||||
  char *name = (char *) arg;
 | 
			
		||||
  int id, qr, opcode, aa, tc, rd, ra, rcode;
 | 
			
		||||
  unsigned int qdcount, ancount, nscount, arcount, i;
 | 
			
		||||
  const unsigned char *aptr;
 | 
			
		||||
 | 
			
		||||
  (void) timeouts;
 | 
			
		||||
 | 
			
		||||
  /* Display the query name if given. */
 | 
			
		||||
  if (name)
 | 
			
		||||
    printf("Answer for query %s:\n", name);
 | 
			
		||||
 | 
			
		||||
  /* Display an error message if there was an error, but only stop if
 | 
			
		||||
   * we actually didn't get an answer buffer.
 | 
			
		||||
   */
 | 
			
		||||
  if (status != ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      printf("%s\n", ares_strerror(status));
 | 
			
		||||
      if (!abuf)
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Won't happen, but check anyway, for safety. */
 | 
			
		||||
  if (alen < HFIXEDSZ)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  /* Parse the answer header. */
 | 
			
		||||
  id = DNS_HEADER_QID(abuf);
 | 
			
		||||
  qr = DNS_HEADER_QR(abuf);
 | 
			
		||||
  opcode = DNS_HEADER_OPCODE(abuf);
 | 
			
		||||
  aa = DNS_HEADER_AA(abuf);
 | 
			
		||||
  tc = DNS_HEADER_TC(abuf);
 | 
			
		||||
  rd = DNS_HEADER_RD(abuf);
 | 
			
		||||
  ra = DNS_HEADER_RA(abuf);
 | 
			
		||||
  rcode = DNS_HEADER_RCODE(abuf);
 | 
			
		||||
  qdcount = DNS_HEADER_QDCOUNT(abuf);
 | 
			
		||||
  ancount = DNS_HEADER_ANCOUNT(abuf);
 | 
			
		||||
  nscount = DNS_HEADER_NSCOUNT(abuf);
 | 
			
		||||
  arcount = DNS_HEADER_ARCOUNT(abuf);
 | 
			
		||||
 | 
			
		||||
  /* Display the answer header. */
 | 
			
		||||
  printf("id: %d\n", id);
 | 
			
		||||
  printf("flags: %s%s%s%s%s\n",
 | 
			
		||||
         qr ? "qr " : "",
 | 
			
		||||
         aa ? "aa " : "",
 | 
			
		||||
         tc ? "tc " : "",
 | 
			
		||||
         rd ? "rd " : "",
 | 
			
		||||
         ra ? "ra " : "");
 | 
			
		||||
  printf("opcode: %s\n", opcodes[opcode]);
 | 
			
		||||
  printf("rcode: %s\n", rcodes[rcode]);
 | 
			
		||||
 | 
			
		||||
  /* Display the questions. */
 | 
			
		||||
  printf("Questions:\n");
 | 
			
		||||
  aptr = abuf + HFIXEDSZ;
 | 
			
		||||
  for (i = 0; i < qdcount; i++)
 | 
			
		||||
    {
 | 
			
		||||
      aptr = display_question(aptr, abuf, alen);
 | 
			
		||||
      if (aptr == NULL)
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Display the answers. */
 | 
			
		||||
  printf("Answers:\n");
 | 
			
		||||
  for (i = 0; i < ancount; i++)
 | 
			
		||||
    {
 | 
			
		||||
      aptr = display_rr(aptr, abuf, alen);
 | 
			
		||||
      if (aptr == NULL)
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Display the NS records. */
 | 
			
		||||
  printf("NS records:\n");
 | 
			
		||||
  for (i = 0; i < nscount; i++)
 | 
			
		||||
    {
 | 
			
		||||
      aptr = display_rr(aptr, abuf, alen);
 | 
			
		||||
      if (aptr == NULL)
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Display the additional records. */
 | 
			
		||||
  printf("Additional records:\n");
 | 
			
		||||
  for (i = 0; i < arcount; i++)
 | 
			
		||||
    {
 | 
			
		||||
      aptr = display_rr(aptr, abuf, alen);
 | 
			
		||||
      if (aptr == NULL)
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const unsigned char *display_question(const unsigned char *aptr,
 | 
			
		||||
                                             const unsigned char *abuf,
 | 
			
		||||
                                             int alen)
 | 
			
		||||
{
 | 
			
		||||
  char *name;
 | 
			
		||||
  int type, dnsclass, status;
 | 
			
		||||
  long len;
 | 
			
		||||
 | 
			
		||||
  /* Parse the question name. */
 | 
			
		||||
  status = ares_expand_name(aptr, abuf, alen, &name, &len);
 | 
			
		||||
  if (status != ARES_SUCCESS)
 | 
			
		||||
    return NULL;
 | 
			
		||||
  aptr += len;
 | 
			
		||||
 | 
			
		||||
  /* Make sure there's enough data after the name for the fixed part
 | 
			
		||||
   * of the question.
 | 
			
		||||
   */
 | 
			
		||||
  if (aptr + QFIXEDSZ > abuf + alen)
 | 
			
		||||
    {
 | 
			
		||||
      ares_free_string(name);
 | 
			
		||||
      return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Parse the question type and class. */
 | 
			
		||||
  type = DNS_QUESTION_TYPE(aptr);
 | 
			
		||||
  dnsclass = DNS_QUESTION_CLASS(aptr);
 | 
			
		||||
  aptr += QFIXEDSZ;
 | 
			
		||||
 | 
			
		||||
  /* Display the question, in a format sort of similar to how we will
 | 
			
		||||
   * display RRs.
 | 
			
		||||
   */
 | 
			
		||||
  printf("\t%-15s.\t", name);
 | 
			
		||||
  if (dnsclass != C_IN)
 | 
			
		||||
    printf("\t%s", class_name(dnsclass));
 | 
			
		||||
  printf("\t%s\n", type_name(type));
 | 
			
		||||
  ares_free_string(name);
 | 
			
		||||
  return aptr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const unsigned char *display_rr(const unsigned char *aptr,
 | 
			
		||||
                                       const unsigned char *abuf, int alen)
 | 
			
		||||
{
 | 
			
		||||
  const unsigned char *p;
 | 
			
		||||
  int type, dnsclass, ttl, dlen, status;
 | 
			
		||||
  long len;
 | 
			
		||||
  char addr[46];
 | 
			
		||||
  union {
 | 
			
		||||
    unsigned char * as_uchar;
 | 
			
		||||
             char * as_char;
 | 
			
		||||
  } name;
 | 
			
		||||
 | 
			
		||||
  /* Parse the RR name. */
 | 
			
		||||
  status = ares_expand_name(aptr, abuf, alen, &name.as_char, &len);
 | 
			
		||||
  if (status != ARES_SUCCESS)
 | 
			
		||||
    return NULL;
 | 
			
		||||
  aptr += len;
 | 
			
		||||
 | 
			
		||||
  /* Make sure there is enough data after the RR name for the fixed
 | 
			
		||||
   * part of the RR.
 | 
			
		||||
   */
 | 
			
		||||
  if (aptr + RRFIXEDSZ > abuf + alen)
 | 
			
		||||
    {
 | 
			
		||||
      ares_free_string(name.as_char);
 | 
			
		||||
      return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Parse the fixed part of the RR, and advance to the RR data
 | 
			
		||||
   * field. */
 | 
			
		||||
  type = DNS_RR_TYPE(aptr);
 | 
			
		||||
  dnsclass = DNS_RR_CLASS(aptr);
 | 
			
		||||
  ttl = DNS_RR_TTL(aptr);
 | 
			
		||||
  dlen = DNS_RR_LEN(aptr);
 | 
			
		||||
  aptr += RRFIXEDSZ;
 | 
			
		||||
  if (aptr + dlen > abuf + alen)
 | 
			
		||||
    {
 | 
			
		||||
      ares_free_string(name.as_char);
 | 
			
		||||
      return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Display the RR name, class, and type. */
 | 
			
		||||
  printf("\t%-15s.\t%d", name.as_char, ttl);
 | 
			
		||||
  if (dnsclass != C_IN)
 | 
			
		||||
    printf("\t%s", class_name(dnsclass));
 | 
			
		||||
  printf("\t%s", type_name(type));
 | 
			
		||||
  ares_free_string(name.as_char);
 | 
			
		||||
 | 
			
		||||
  /* Display the RR data.  Don't touch aptr. */
 | 
			
		||||
  switch (type)
 | 
			
		||||
    {
 | 
			
		||||
    case T_CNAME:
 | 
			
		||||
    case T_MB:
 | 
			
		||||
    case T_MD:
 | 
			
		||||
    case T_MF:
 | 
			
		||||
    case T_MG:
 | 
			
		||||
    case T_MR:
 | 
			
		||||
    case T_NS:
 | 
			
		||||
    case T_PTR:
 | 
			
		||||
      /* For these types, the RR data is just a domain name. */
 | 
			
		||||
      status = ares_expand_name(aptr, abuf, alen, &name.as_char, &len);
 | 
			
		||||
      if (status != ARES_SUCCESS)
 | 
			
		||||
        return NULL;
 | 
			
		||||
      printf("\t%s.", name.as_char);
 | 
			
		||||
      ares_free_string(name.as_char);
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case T_HINFO:
 | 
			
		||||
      /* The RR data is two length-counted character strings. */
 | 
			
		||||
      p = aptr;
 | 
			
		||||
      len = *p;
 | 
			
		||||
      if (p + len + 1 > aptr + dlen)
 | 
			
		||||
        return NULL;
 | 
			
		||||
      printf("\t%.*s", (int)len, p + 1);
 | 
			
		||||
      p += len + 1;
 | 
			
		||||
      len = *p;
 | 
			
		||||
      if (p + len + 1 > aptr + dlen)
 | 
			
		||||
        return NULL;
 | 
			
		||||
      printf("\t%.*s", (int)len, p + 1);
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case T_MINFO:
 | 
			
		||||
      /* The RR data is two domain names. */
 | 
			
		||||
      p = aptr;
 | 
			
		||||
      status = ares_expand_name(p, abuf, alen, &name.as_char, &len);
 | 
			
		||||
      if (status != ARES_SUCCESS)
 | 
			
		||||
        return NULL;
 | 
			
		||||
      printf("\t%s.", name.as_char);
 | 
			
		||||
      ares_free_string(name.as_char);
 | 
			
		||||
      p += len;
 | 
			
		||||
      status = ares_expand_name(p, abuf, alen, &name.as_char, &len);
 | 
			
		||||
      if (status != ARES_SUCCESS)
 | 
			
		||||
        return NULL;
 | 
			
		||||
      printf("\t%s.", name.as_char);
 | 
			
		||||
      ares_free_string(name.as_char);
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case T_MX:
 | 
			
		||||
      /* The RR data is two bytes giving a preference ordering, and
 | 
			
		||||
       * then a domain name.
 | 
			
		||||
       */
 | 
			
		||||
      if (dlen < 2)
 | 
			
		||||
        return NULL;
 | 
			
		||||
      printf("\t%d", DNS__16BIT(aptr));
 | 
			
		||||
      status = ares_expand_name(aptr + 2, abuf, alen, &name.as_char, &len);
 | 
			
		||||
      if (status != ARES_SUCCESS)
 | 
			
		||||
        return NULL;
 | 
			
		||||
      printf("\t%s.", name.as_char);
 | 
			
		||||
      ares_free_string(name.as_char);
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case T_SOA:
 | 
			
		||||
      /* The RR data is two domain names and then five four-byte
 | 
			
		||||
       * numbers giving the serial number and some timeouts.
 | 
			
		||||
       */
 | 
			
		||||
      p = aptr;
 | 
			
		||||
      status = ares_expand_name(p, abuf, alen, &name.as_char, &len);
 | 
			
		||||
      if (status != ARES_SUCCESS)
 | 
			
		||||
        return NULL;
 | 
			
		||||
      printf("\t%s.\n", name.as_char);
 | 
			
		||||
      ares_free_string(name.as_char);
 | 
			
		||||
      p += len;
 | 
			
		||||
      status = ares_expand_name(p, abuf, alen, &name.as_char, &len);
 | 
			
		||||
      if (status != ARES_SUCCESS)
 | 
			
		||||
        return NULL;
 | 
			
		||||
      printf("\t\t\t\t\t\t%s.\n", name.as_char);
 | 
			
		||||
      ares_free_string(name.as_char);
 | 
			
		||||
      p += len;
 | 
			
		||||
      if (p + 20 > aptr + dlen)
 | 
			
		||||
        return NULL;
 | 
			
		||||
      printf("\t\t\t\t\t\t( %lu %lu %lu %lu %lu )",
 | 
			
		||||
             (unsigned long)DNS__32BIT(p), (unsigned long)DNS__32BIT(p+4),
 | 
			
		||||
             (unsigned long)DNS__32BIT(p+8), (unsigned long)DNS__32BIT(p+12),
 | 
			
		||||
             (unsigned long)DNS__32BIT(p+16));
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case T_TXT:
 | 
			
		||||
      /* The RR data is one or more length-counted character
 | 
			
		||||
       * strings. */
 | 
			
		||||
      p = aptr;
 | 
			
		||||
      while (p < aptr + dlen)
 | 
			
		||||
        {
 | 
			
		||||
          len = *p;
 | 
			
		||||
          if (p + len + 1 > aptr + dlen)
 | 
			
		||||
            return NULL;
 | 
			
		||||
          printf("\t%.*s", (int)len, p + 1);
 | 
			
		||||
          p += len + 1;
 | 
			
		||||
        }
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case T_A:
 | 
			
		||||
      /* The RR data is a four-byte Internet address. */
 | 
			
		||||
      if (dlen != 4)
 | 
			
		||||
        return NULL;
 | 
			
		||||
      printf("\t%s", ares_inet_ntop(AF_INET,aptr,addr,sizeof(addr)));
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case T_AAAA:
 | 
			
		||||
      /* The RR data is a 16-byte IPv6 address. */
 | 
			
		||||
      if (dlen != 16)
 | 
			
		||||
        return NULL;
 | 
			
		||||
      printf("\t%s", ares_inet_ntop(AF_INET6,aptr,addr,sizeof(addr)));
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case T_WKS:
 | 
			
		||||
      /* Not implemented yet */
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case T_SRV:
 | 
			
		||||
      /* The RR data is three two-byte numbers representing the
 | 
			
		||||
       * priority, weight, and port, followed by a domain name.
 | 
			
		||||
       */
 | 
			
		||||
 | 
			
		||||
      printf("\t%d", DNS__16BIT(aptr));
 | 
			
		||||
      printf(" %d", DNS__16BIT(aptr + 2));
 | 
			
		||||
      printf(" %d", DNS__16BIT(aptr + 4));
 | 
			
		||||
 | 
			
		||||
      status = ares_expand_name(aptr + 6, abuf, alen, &name.as_char, &len);
 | 
			
		||||
      if (status != ARES_SUCCESS)
 | 
			
		||||
        return NULL;
 | 
			
		||||
      printf("\t%s.", name.as_char);
 | 
			
		||||
      ares_free_string(name.as_char);
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case T_NAPTR:
 | 
			
		||||
 | 
			
		||||
      printf("\t%d", DNS__16BIT(aptr)); /* order */
 | 
			
		||||
      printf(" %d\n", DNS__16BIT(aptr + 2)); /* preference */
 | 
			
		||||
 | 
			
		||||
      p = aptr + 4;
 | 
			
		||||
      status = ares_expand_string(p, abuf, alen, &name.as_uchar, &len);
 | 
			
		||||
      if (status != ARES_SUCCESS)
 | 
			
		||||
        return NULL;
 | 
			
		||||
      printf("\t\t\t\t\t\t%s\n", name.as_char);
 | 
			
		||||
      ares_free_string(name.as_char);
 | 
			
		||||
      p += len;
 | 
			
		||||
 | 
			
		||||
      status = ares_expand_string(p, abuf, alen, &name.as_uchar, &len);
 | 
			
		||||
      if (status != ARES_SUCCESS)
 | 
			
		||||
        return NULL;
 | 
			
		||||
      printf("\t\t\t\t\t\t%s\n", name.as_char);
 | 
			
		||||
      ares_free_string(name.as_char);
 | 
			
		||||
      p += len;
 | 
			
		||||
 | 
			
		||||
      status = ares_expand_string(p, abuf, alen, &name.as_uchar, &len);
 | 
			
		||||
      if (status != ARES_SUCCESS)
 | 
			
		||||
        return NULL;
 | 
			
		||||
      printf("\t\t\t\t\t\t%s\n", name.as_char);
 | 
			
		||||
      ares_free_string(name.as_char);
 | 
			
		||||
      p += len;
 | 
			
		||||
 | 
			
		||||
      status = ares_expand_string(p, abuf, alen, &name.as_uchar, &len);
 | 
			
		||||
      if (status != ARES_SUCCESS)
 | 
			
		||||
        return NULL;
 | 
			
		||||
      printf("\t\t\t\t\t\t%s", name.as_char);
 | 
			
		||||
      ares_free_string(name.as_char);
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    default:
 | 
			
		||||
      printf("\t[Unknown RR; cannot parse]");
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
  printf("\n");
 | 
			
		||||
 | 
			
		||||
  return aptr + dlen;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const char *type_name(int type)
 | 
			
		||||
{
 | 
			
		||||
  int i;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < ntypes; i++)
 | 
			
		||||
    {
 | 
			
		||||
      if (types[i].value == type)
 | 
			
		||||
        return types[i].name;
 | 
			
		||||
    }
 | 
			
		||||
  return "(unknown)";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const char *class_name(int dnsclass)
 | 
			
		||||
{
 | 
			
		||||
  int i;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < nclasses; i++)
 | 
			
		||||
    {
 | 
			
		||||
      if (classes[i].value == dnsclass)
 | 
			
		||||
        return classes[i].name;
 | 
			
		||||
    }
 | 
			
		||||
  return "(unknown)";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void usage(void)
 | 
			
		||||
{
 | 
			
		||||
  fprintf(stderr, "usage: adig [-f flag] [-s server] [-c class] "
 | 
			
		||||
          "[-t type] [-p port] name ...\n");
 | 
			
		||||
  exit(1);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										192
									
								
								ares/ahost.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										192
									
								
								ares/ahost.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,192 @@
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * $Id$
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#if !defined(WIN32) || defined(WATT32)
 | 
			
		||||
#ifdef HAVE_SYS_TIME_H
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
#endif
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#include <arpa/inet.h>
 | 
			
		||||
#include <netdb.h>
 | 
			
		||||
#ifdef HAVE_UNISTD_H
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_STRINGS_H
 | 
			
		||||
#include <strings.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_dns.h"
 | 
			
		||||
#include "inet_ntop.h"
 | 
			
		||||
#include "inet_net_pton.h"
 | 
			
		||||
#include "ares_getopt.h"
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_STRDUP
 | 
			
		||||
#  include "ares_strdup.h"
 | 
			
		||||
#  define strdup(ptr) ares_strdup(ptr)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_STRCASECMP
 | 
			
		||||
#  include "ares_strcasecmp.h"
 | 
			
		||||
#  define strcasecmp(p1,p2) ares_strcasecmp(p1,p2)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_STRNCASECMP
 | 
			
		||||
#  include "ares_strcasecmp.h"
 | 
			
		||||
#  define strncasecmp(p1,p2,n) ares_strncasecmp(p1,p2,n)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static void callback(void *arg, int status, int timeouts, struct hostent *host);
 | 
			
		||||
static void usage(void);
 | 
			
		||||
 | 
			
		||||
int main(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
  ares_channel channel;
 | 
			
		||||
  int status, nfds, c, addr_family = AF_INET;
 | 
			
		||||
  fd_set read_fds, write_fds;
 | 
			
		||||
  struct timeval *tvp, tv;
 | 
			
		||||
  struct in_addr addr4;
 | 
			
		||||
  struct in6_addr addr6;
 | 
			
		||||
 | 
			
		||||
#ifdef USE_WINSOCK
 | 
			
		||||
  WORD wVersionRequested = MAKEWORD(USE_WINSOCK,USE_WINSOCK);
 | 
			
		||||
  WSADATA wsaData;
 | 
			
		||||
  WSAStartup(wVersionRequested, &wsaData);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  while ((c = ares_getopt(argc,argv,"dt:h")) != -1)
 | 
			
		||||
    {
 | 
			
		||||
      switch (c)
 | 
			
		||||
        {
 | 
			
		||||
        case 'd':
 | 
			
		||||
#ifdef WATT32
 | 
			
		||||
          dbug_init();
 | 
			
		||||
#endif
 | 
			
		||||
          break;
 | 
			
		||||
        case 't':
 | 
			
		||||
          if (!strcasecmp(optarg,"a"))
 | 
			
		||||
            addr_family = AF_INET;
 | 
			
		||||
          else if (!strcasecmp(optarg,"aaaa"))
 | 
			
		||||
            addr_family = AF_INET6;
 | 
			
		||||
          else
 | 
			
		||||
            usage();
 | 
			
		||||
          break;
 | 
			
		||||
        case 'h':
 | 
			
		||||
        default:
 | 
			
		||||
          usage();
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  argc -= optind;
 | 
			
		||||
  argv += optind;
 | 
			
		||||
  if (argc < 1)
 | 
			
		||||
    usage();
 | 
			
		||||
 | 
			
		||||
  status = ares_init(&channel);
 | 
			
		||||
  if (status != ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      fprintf(stderr, "ares_init: %s\n", ares_strerror(status));
 | 
			
		||||
      return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Initiate the queries, one per command-line argument. */
 | 
			
		||||
  for ( ; *argv; argv++)
 | 
			
		||||
    {
 | 
			
		||||
      if (ares_inet_pton(AF_INET, *argv, &addr4) == 1)
 | 
			
		||||
        {
 | 
			
		||||
          ares_gethostbyaddr(channel, &addr4, sizeof(addr4), AF_INET, callback,
 | 
			
		||||
                             *argv);
 | 
			
		||||
        }
 | 
			
		||||
      else if (ares_inet_pton(AF_INET6, *argv, &addr6) == 1)
 | 
			
		||||
        {
 | 
			
		||||
          ares_gethostbyaddr(channel, &addr6, sizeof(addr6), AF_INET6, callback,
 | 
			
		||||
                             *argv);
 | 
			
		||||
        }
 | 
			
		||||
      else
 | 
			
		||||
        {
 | 
			
		||||
          ares_gethostbyname(channel, *argv, addr_family, callback, *argv);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Wait for all queries to complete. */
 | 
			
		||||
  while (1)
 | 
			
		||||
    {
 | 
			
		||||
      FD_ZERO(&read_fds);
 | 
			
		||||
      FD_ZERO(&write_fds);
 | 
			
		||||
      nfds = ares_fds(channel, &read_fds, &write_fds);
 | 
			
		||||
      if (nfds == 0)
 | 
			
		||||
        break;
 | 
			
		||||
      tvp = ares_timeout(channel, NULL, &tv);
 | 
			
		||||
      select(nfds, &read_fds, &write_fds, NULL, tvp);
 | 
			
		||||
      ares_process(channel, &read_fds, &write_fds);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  ares_destroy(channel);
 | 
			
		||||
 | 
			
		||||
#ifdef USE_WINSOCK
 | 
			
		||||
  WSACleanup();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void callback(void *arg, int status, int timeouts, struct hostent *host)
 | 
			
		||||
{
 | 
			
		||||
  char **p;
 | 
			
		||||
 | 
			
		||||
  (void)timeouts;
 | 
			
		||||
 | 
			
		||||
  if (status != ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      fprintf(stderr, "%s: %s\n", (char *) arg, ares_strerror(status));
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  for (p = host->h_addr_list; *p; p++)
 | 
			
		||||
    {
 | 
			
		||||
      char addr_buf[46] = "??";
 | 
			
		||||
 | 
			
		||||
      ares_inet_ntop(host->h_addrtype, *p, addr_buf, sizeof(addr_buf));
 | 
			
		||||
      printf("%-32s\t%s", host->h_name, addr_buf);
 | 
			
		||||
#if 0
 | 
			
		||||
      if (host->h_aliases[0])
 | 
			
		||||
        {
 | 
			
		||||
           int i;
 | 
			
		||||
 | 
			
		||||
           printf (", Aliases: ");
 | 
			
		||||
           for (i = 0; host->h_aliases[i]; i++)
 | 
			
		||||
               printf("%s ", host->h_aliases[i]);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
      puts("");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void usage(void)
 | 
			
		||||
{
 | 
			
		||||
  fprintf(stderr, "usage: ahost [-t {a|aaaa}] {host|addr} ...\n");
 | 
			
		||||
  exit(1);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										321
									
								
								ares/ares.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										321
									
								
								ares/ares.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,321 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 * Copyright (C) 2007-2008 by Daniel Stenberg
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef ARES__H
 | 
			
		||||
#define ARES__H
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Define WIN32 when build target is Win32 API
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32)
 | 
			
		||||
#define WIN32
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
 | 
			
		||||
/* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish
 | 
			
		||||
   libc5-based Linux systems. Only include it on system that are known to
 | 
			
		||||
   require it! */
 | 
			
		||||
#if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \
 | 
			
		||||
    defined(__minix) || defined(__SYMBIAN32__) || defined(__INTEGRITY)
 | 
			
		||||
#include <sys/select.h>
 | 
			
		||||
#endif
 | 
			
		||||
#if (defined(NETWARE) && !defined(__NOVELL_LIBC__))
 | 
			
		||||
#include <sys/bsdskt.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(WATT32)
 | 
			
		||||
  #include <netinet/in.h>
 | 
			
		||||
  #include <sys/socket.h>
 | 
			
		||||
  #include <tcp.h>
 | 
			
		||||
#elif defined(WIN32)
 | 
			
		||||
#  ifndef WIN32_LEAN_AND_MEAN
 | 
			
		||||
#    define WIN32_LEAN_AND_MEAN
 | 
			
		||||
#  endif
 | 
			
		||||
#  include <windows.h>
 | 
			
		||||
#  include <winsock2.h>
 | 
			
		||||
#  include <ws2tcpip.h>
 | 
			
		||||
#else
 | 
			
		||||
  #include <sys/socket.h>
 | 
			
		||||
  #include <netinet/in.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef  __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define ARES_SUCCESS            0
 | 
			
		||||
 | 
			
		||||
/* Server error codes (ARES_ENODATA indicates no relevant answer) */
 | 
			
		||||
#define ARES_ENODATA            1
 | 
			
		||||
#define ARES_EFORMERR           2
 | 
			
		||||
#define ARES_ESERVFAIL          3
 | 
			
		||||
#define ARES_ENOTFOUND          4
 | 
			
		||||
#define ARES_ENOTIMP            5
 | 
			
		||||
#define ARES_EREFUSED           6
 | 
			
		||||
 | 
			
		||||
/* Locally generated error codes */
 | 
			
		||||
#define ARES_EBADQUERY          7
 | 
			
		||||
#define ARES_EBADNAME           8
 | 
			
		||||
#define ARES_EBADFAMILY         9
 | 
			
		||||
#define ARES_EBADRESP           10
 | 
			
		||||
#define ARES_ECONNREFUSED       11
 | 
			
		||||
#define ARES_ETIMEOUT           12
 | 
			
		||||
#define ARES_EOF                13
 | 
			
		||||
#define ARES_EFILE              14
 | 
			
		||||
#define ARES_ENOMEM             15
 | 
			
		||||
#define ARES_EDESTRUCTION       16
 | 
			
		||||
#define ARES_EBADSTR            17
 | 
			
		||||
 | 
			
		||||
/* ares_getnameinfo error codes */
 | 
			
		||||
#define ARES_EBADFLAGS          18
 | 
			
		||||
 | 
			
		||||
/* ares_getaddrinfo error codes */
 | 
			
		||||
#define ARES_ENONAME            19
 | 
			
		||||
#define ARES_EBADHINTS          20
 | 
			
		||||
 | 
			
		||||
/* Flag values */
 | 
			
		||||
#define ARES_FLAG_USEVC         (1 << 0)
 | 
			
		||||
#define ARES_FLAG_PRIMARY       (1 << 1)
 | 
			
		||||
#define ARES_FLAG_IGNTC         (1 << 2)
 | 
			
		||||
#define ARES_FLAG_NORECURSE     (1 << 3)
 | 
			
		||||
#define ARES_FLAG_STAYOPEN      (1 << 4)
 | 
			
		||||
#define ARES_FLAG_NOSEARCH      (1 << 5)
 | 
			
		||||
#define ARES_FLAG_NOALIASES     (1 << 6)
 | 
			
		||||
#define ARES_FLAG_NOCHECKRESP   (1 << 7)
 | 
			
		||||
 | 
			
		||||
/* Option mask values */
 | 
			
		||||
#define ARES_OPT_FLAGS          (1 << 0)
 | 
			
		||||
#define ARES_OPT_TIMEOUT        (1 << 1)
 | 
			
		||||
#define ARES_OPT_TRIES          (1 << 2)
 | 
			
		||||
#define ARES_OPT_NDOTS          (1 << 3)
 | 
			
		||||
#define ARES_OPT_UDP_PORT       (1 << 4)
 | 
			
		||||
#define ARES_OPT_TCP_PORT       (1 << 5)
 | 
			
		||||
#define ARES_OPT_SERVERS        (1 << 6)
 | 
			
		||||
#define ARES_OPT_DOMAINS        (1 << 7)
 | 
			
		||||
#define ARES_OPT_LOOKUPS        (1 << 8)
 | 
			
		||||
#define ARES_OPT_SOCK_STATE_CB  (1 << 9)
 | 
			
		||||
#define ARES_OPT_SORTLIST       (1 << 10)
 | 
			
		||||
#define ARES_OPT_SOCK_SNDBUF    (1 << 11)
 | 
			
		||||
#define ARES_OPT_SOCK_RCVBUF    (1 << 12)
 | 
			
		||||
#define ARES_OPT_TIMEOUTMS      (1 << 13)
 | 
			
		||||
#define ARES_OPT_ROTATE         (1 << 14)
 | 
			
		||||
 | 
			
		||||
/* Nameinfo flag values */
 | 
			
		||||
#define ARES_NI_NOFQDN                  (1 << 0)
 | 
			
		||||
#define ARES_NI_NUMERICHOST             (1 << 1)
 | 
			
		||||
#define ARES_NI_NAMEREQD                (1 << 2)
 | 
			
		||||
#define ARES_NI_NUMERICSERV             (1 << 3)
 | 
			
		||||
#define ARES_NI_DGRAM                   (1 << 4)
 | 
			
		||||
#define ARES_NI_TCP                     0
 | 
			
		||||
#define ARES_NI_UDP                     ARES_NI_DGRAM
 | 
			
		||||
#define ARES_NI_SCTP                    (1 << 5)
 | 
			
		||||
#define ARES_NI_DCCP                    (1 << 6)
 | 
			
		||||
#define ARES_NI_NUMERICSCOPE            (1 << 7)
 | 
			
		||||
#define ARES_NI_LOOKUPHOST              (1 << 8)
 | 
			
		||||
#define ARES_NI_LOOKUPSERVICE           (1 << 9)
 | 
			
		||||
/* Reserved for future use */
 | 
			
		||||
#define ARES_NI_IDN                     (1 << 10)
 | 
			
		||||
#define ARES_NI_IDN_ALLOW_UNASSIGNED    (1 << 11)
 | 
			
		||||
#define ARES_NI_IDN_USE_STD3_ASCII_RULES (1 << 12)
 | 
			
		||||
 | 
			
		||||
/* Addrinfo flag values */
 | 
			
		||||
#define ARES_AI_CANONNAME               (1 << 0)
 | 
			
		||||
#define ARES_AI_NUMERICHOST             (1 << 1)
 | 
			
		||||
#define ARES_AI_PASSIVE                 (1 << 2)
 | 
			
		||||
#define ARES_AI_NUMERICSERV             (1 << 3)
 | 
			
		||||
#define ARES_AI_V4MAPPED                (1 << 4)
 | 
			
		||||
#define ARES_AI_ALL                     (1 << 5)
 | 
			
		||||
#define ARES_AI_ADDRCONFIG              (1 << 6)
 | 
			
		||||
/* Reserved for future use */
 | 
			
		||||
#define ARES_AI_IDN                     (1 << 10)
 | 
			
		||||
#define ARES_AI_IDN_ALLOW_UNASSIGNED    (1 << 11)
 | 
			
		||||
#define ARES_AI_IDN_USE_STD3_ASCII_RULES (1 << 12)
 | 
			
		||||
#define ARES_AI_CANONIDN                (1 << 13)
 | 
			
		||||
 | 
			
		||||
#define ARES_AI_MASK (ARES_AI_CANONNAME|ARES_AI_NUMERICHOST|ARES_AI_PASSIVE| \
 | 
			
		||||
                      ARES_AI_NUMERICSERV|ARES_AI_V4MAPPED|ARES_AI_ALL| \
 | 
			
		||||
                      ARES_AI_ADDRCONFIG)
 | 
			
		||||
#define ARES_GETSOCK_MAXNUM 16 /* ares_getsock() can return info about this
 | 
			
		||||
                                  many sockets */
 | 
			
		||||
#define ARES_GETSOCK_READABLE(bits,num) (bits & (1<< (num)))
 | 
			
		||||
#define ARES_GETSOCK_WRITABLE(bits,num) (bits & (1 << ((num) + \
 | 
			
		||||
                                         ARES_GETSOCK_MAXNUM)))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Typedef our socket type
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef ares_socket_typedef
 | 
			
		||||
#ifdef WIN32
 | 
			
		||||
typedef SOCKET ares_socket_t;
 | 
			
		||||
#define ARES_SOCKET_BAD INVALID_SOCKET
 | 
			
		||||
#else
 | 
			
		||||
typedef int ares_socket_t;
 | 
			
		||||
#define ARES_SOCKET_BAD -1
 | 
			
		||||
#endif
 | 
			
		||||
#define ares_socket_typedef
 | 
			
		||||
#endif /* ares_socket_typedef */
 | 
			
		||||
 | 
			
		||||
typedef void (*ares_sock_state_cb)(void *data,
 | 
			
		||||
                                   ares_socket_t socket_fd,
 | 
			
		||||
                                   int readable,
 | 
			
		||||
                                   int writable);
 | 
			
		||||
 | 
			
		||||
struct apattern;
 | 
			
		||||
 | 
			
		||||
/* NOTE about the ares_options struct to users and developers.
 | 
			
		||||
 | 
			
		||||
   This struct will remain looking like this. It will not be extended nor
 | 
			
		||||
   shrunk in future releases, but all new options will be set by ares_set_*()
 | 
			
		||||
   options instead of with the ares_init_options() function.
 | 
			
		||||
 | 
			
		||||
   Eventually (in a galaxy far far away), all options will be settable by
 | 
			
		||||
   ares_set_*() options and the ares_init_options() function will become
 | 
			
		||||
   deprecated.
 | 
			
		||||
 | 
			
		||||
   When new options are added to c-ares, they are not added to this
 | 
			
		||||
   struct. And they are not "saved" with the ares_save_options() function but
 | 
			
		||||
   instead we encourage the use of the ares_dup() function. Needless to say,
 | 
			
		||||
   if you add config options to c-ares you need to make sure ares_dup()
 | 
			
		||||
   duplicates this new option.
 | 
			
		||||
 | 
			
		||||
 */
 | 
			
		||||
struct ares_options {
 | 
			
		||||
  int flags;
 | 
			
		||||
  int timeout; /* in seconds or milliseconds, depending on options */
 | 
			
		||||
  int tries;
 | 
			
		||||
  int ndots;
 | 
			
		||||
  unsigned short udp_port;
 | 
			
		||||
  unsigned short tcp_port;
 | 
			
		||||
  int socket_send_buffer_size;
 | 
			
		||||
  int socket_receive_buffer_size;
 | 
			
		||||
  struct in_addr *servers;
 | 
			
		||||
  int nservers;
 | 
			
		||||
  char **domains;
 | 
			
		||||
  int ndomains;
 | 
			
		||||
  char *lookups;
 | 
			
		||||
  ares_sock_state_cb sock_state_cb;
 | 
			
		||||
  void *sock_state_cb_data;
 | 
			
		||||
  struct apattern *sortlist;
 | 
			
		||||
  int nsort;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct hostent;
 | 
			
		||||
struct timeval;
 | 
			
		||||
struct sockaddr;
 | 
			
		||||
struct ares_channeldata;
 | 
			
		||||
typedef struct ares_channeldata *ares_channel;
 | 
			
		||||
typedef void (*ares_callback)(void *arg, int status, int timeouts,
 | 
			
		||||
                              unsigned char *abuf, int alen);
 | 
			
		||||
typedef void (*ares_host_callback)(void *arg, int status, int timeouts,
 | 
			
		||||
                                   struct hostent *hostent);
 | 
			
		||||
typedef void (*ares_nameinfo_callback)(void *arg, int status, int timeouts,
 | 
			
		||||
                                       char *node, char *service);
 | 
			
		||||
typedef int  (*ares_sock_create_callback)(ares_socket_t socket_fd,
 | 
			
		||||
                                          int type, void *data);
 | 
			
		||||
 | 
			
		||||
int ares_init(ares_channel *channelptr);
 | 
			
		||||
int ares_init_options(ares_channel *channelptr, struct ares_options *options,
 | 
			
		||||
                      int optmask);
 | 
			
		||||
int ares_save_options(ares_channel channel, struct ares_options *options,
 | 
			
		||||
                      int *optmask);
 | 
			
		||||
void ares_destroy_options(struct ares_options *options);
 | 
			
		||||
int ares_dup(ares_channel *dest, ares_channel src);
 | 
			
		||||
void ares_destroy(ares_channel channel);
 | 
			
		||||
void ares_cancel(ares_channel channel);
 | 
			
		||||
void ares_set_socket_callback(ares_channel channel,
 | 
			
		||||
                              ares_sock_create_callback callback,
 | 
			
		||||
                              void *user_data);
 | 
			
		||||
void ares_send(ares_channel channel, const unsigned char *qbuf, int qlen,
 | 
			
		||||
               ares_callback callback, void *arg);
 | 
			
		||||
void ares_query(ares_channel channel, const char *name, int dnsclass,
 | 
			
		||||
                int type, ares_callback callback, void *arg);
 | 
			
		||||
void ares_search(ares_channel channel, const char *name, int dnsclass,
 | 
			
		||||
                 int type, ares_callback callback, void *arg);
 | 
			
		||||
void ares_gethostbyname(ares_channel channel, const char *name, int family,
 | 
			
		||||
                        ares_host_callback callback, void *arg);
 | 
			
		||||
int ares_gethostbyname_file(ares_channel channel, const char *name,
 | 
			
		||||
                            int family, struct hostent **host);
 | 
			
		||||
void ares_gethostbyaddr(ares_channel channel, const void *addr, int addrlen,
 | 
			
		||||
                        int family, ares_host_callback callback, void *arg);
 | 
			
		||||
void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa,
 | 
			
		||||
                      socklen_t salen, int flags,
 | 
			
		||||
                      ares_nameinfo_callback callback,
 | 
			
		||||
                      void *arg);
 | 
			
		||||
int ares_fds(ares_channel channel, fd_set *read_fds, fd_set *write_fds);
 | 
			
		||||
int ares_getsock(ares_channel channel, int *socks, int numsocks);
 | 
			
		||||
struct timeval *ares_timeout(ares_channel channel, struct timeval *maxtv,
 | 
			
		||||
                             struct timeval *tv);
 | 
			
		||||
void ares_process(ares_channel channel, fd_set *read_fds, fd_set *write_fds);
 | 
			
		||||
void ares_process_fd(ares_channel channel, ares_socket_t read_fd,
 | 
			
		||||
                     ares_socket_t write_fd);
 | 
			
		||||
 | 
			
		||||
int ares_mkquery(const char *name, int dnsclass, int type, unsigned short id,
 | 
			
		||||
                 int rd, unsigned char **buf, int *buflen);
 | 
			
		||||
int ares_expand_name(const unsigned char *encoded, const unsigned char *abuf,
 | 
			
		||||
                     int alen, char **s, long *enclen);
 | 
			
		||||
int ares_expand_string(const unsigned char *encoded, const unsigned char *abuf,
 | 
			
		||||
                     int alen, unsigned char **s, long *enclen);
 | 
			
		||||
 | 
			
		||||
#if !defined(HAVE_STRUCT_IN6_ADDR) && !defined(s6_addr)
 | 
			
		||||
struct in6_addr {
 | 
			
		||||
  union {
 | 
			
		||||
    unsigned char _S6_u8[16];
 | 
			
		||||
  } _S6_un;
 | 
			
		||||
};
 | 
			
		||||
#define s6_addr _S6_un._S6_u8
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
struct addrttl {
 | 
			
		||||
  struct in_addr ipaddr;
 | 
			
		||||
  int            ttl;
 | 
			
		||||
};
 | 
			
		||||
struct addr6ttl {
 | 
			
		||||
  struct in6_addr ip6addr;
 | 
			
		||||
  int             ttl;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
** Parse the buffer, starting at *abuf and of length alen bytes, previously
 | 
			
		||||
** obtained from an ares_search call.  Put the results in *host, if nonnull.
 | 
			
		||||
** Also, if addrttls is nonnull, put up to *naddrttls IPv4 addresses along with
 | 
			
		||||
** their TTLs in that array, and set *naddrttls to the number of addresses
 | 
			
		||||
** so written.
 | 
			
		||||
*/
 | 
			
		||||
int ares_parse_a_reply(const unsigned char *abuf, int alen,
 | 
			
		||||
                       struct hostent **host,
 | 
			
		||||
                       struct addrttl *addrttls, int *naddrttls);
 | 
			
		||||
int ares_parse_aaaa_reply(const unsigned char *abuf, int alen,
 | 
			
		||||
                       struct hostent **host,
 | 
			
		||||
                       struct addr6ttl *addrttls, int *naddrttls);
 | 
			
		||||
int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
 | 
			
		||||
                         int addrlen, int family, struct hostent **host);
 | 
			
		||||
int ares_parse_ns_reply(const unsigned char *abuf, int alen,
 | 
			
		||||
                       struct hostent **host);
 | 
			
		||||
void ares_free_string(void *str);
 | 
			
		||||
void ares_free_hostent(struct hostent *host);
 | 
			
		||||
const char *ares_strerror(int code);
 | 
			
		||||
 | 
			
		||||
#ifdef  __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* ARES__H */
 | 
			
		||||
							
								
								
									
										67
									
								
								ares/ares__close_sockets.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								ares/ares__close_sockets.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,67 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#ifdef HAVE_UNISTD_H
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
void ares__close_sockets(ares_channel channel, struct server_state *server)
 | 
			
		||||
{
 | 
			
		||||
  struct send_request *sendreq;
 | 
			
		||||
 | 
			
		||||
  /* Free all pending output buffers. */
 | 
			
		||||
  while (server->qhead)
 | 
			
		||||
    {
 | 
			
		||||
      /* Advance server->qhead; pull out query as we go. */
 | 
			
		||||
      sendreq = server->qhead;
 | 
			
		||||
      server->qhead = sendreq->next;
 | 
			
		||||
      if (sendreq->data_storage != NULL)
 | 
			
		||||
        free(sendreq->data_storage);
 | 
			
		||||
      free(sendreq);
 | 
			
		||||
    }
 | 
			
		||||
  server->qtail = NULL;
 | 
			
		||||
 | 
			
		||||
  /* Reset any existing input buffer. */
 | 
			
		||||
  if (server->tcp_buffer)
 | 
			
		||||
    free(server->tcp_buffer);
 | 
			
		||||
  server->tcp_buffer = NULL;
 | 
			
		||||
  server->tcp_lenbuf_pos = 0;
 | 
			
		||||
 | 
			
		||||
  /* Reset brokenness */
 | 
			
		||||
  server->is_broken = 0;
 | 
			
		||||
 | 
			
		||||
  /* Close the TCP and UDP sockets. */
 | 
			
		||||
  if (server->tcp_socket != ARES_SOCKET_BAD)
 | 
			
		||||
    {
 | 
			
		||||
      SOCK_STATE_CALLBACK(channel, server->tcp_socket, 0, 0);
 | 
			
		||||
      closesocket(server->tcp_socket);
 | 
			
		||||
      server->tcp_socket = ARES_SOCKET_BAD;
 | 
			
		||||
      server->tcp_connection_generation = ++channel->tcp_connection_generation;
 | 
			
		||||
    }
 | 
			
		||||
  if (server->udp_socket != ARES_SOCKET_BAD)
 | 
			
		||||
    {
 | 
			
		||||
      SOCK_STATE_CALLBACK(channel, server->udp_socket, 0, 0);
 | 
			
		||||
      closesocket(server->udp_socket);
 | 
			
		||||
      server->udp_socket = ARES_SOCKET_BAD;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										199
									
								
								ares/ares__get_hostent.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										199
									
								
								ares/ares__get_hostent.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,199 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#if !defined(WIN32) || defined(WATT32)
 | 
			
		||||
#ifdef HAVE_SYS_SOCKET_H
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETINET_IN_H
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETDB_H
 | 
			
		||||
#include <netdb.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_INET_H
 | 
			
		||||
#include <arpa/inet.h>
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <ctype.h>
 | 
			
		||||
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "inet_net_pton.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
int ares__get_hostent(FILE *fp, int family, struct hostent **host)
 | 
			
		||||
{
 | 
			
		||||
  char *line = NULL, *p, *q, *canonical, **alias;
 | 
			
		||||
  int status, linesize, end_at_hostname, naliases;
 | 
			
		||||
  struct in_addr addr;
 | 
			
		||||
  struct in6_addr addr6;
 | 
			
		||||
  int addrlen = sizeof(struct in_addr);
 | 
			
		||||
  struct hostent *hostent = NULL;
 | 
			
		||||
 | 
			
		||||
  while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      /* Skip comment lines; terminate line at comment character. */
 | 
			
		||||
      if (*line == '#' || !*line)
 | 
			
		||||
        continue;
 | 
			
		||||
      p = strchr(line, '#');
 | 
			
		||||
      if (p)
 | 
			
		||||
        *p = 0;
 | 
			
		||||
 | 
			
		||||
      /* Get the address part. */
 | 
			
		||||
      p = line;
 | 
			
		||||
      while (*p && !ISSPACE(*p))
 | 
			
		||||
        p++;
 | 
			
		||||
      if (!*p)
 | 
			
		||||
        continue;
 | 
			
		||||
      *p = 0;
 | 
			
		||||
      addr.s_addr = inet_addr(line);
 | 
			
		||||
      if (addr.s_addr == INADDR_NONE)
 | 
			
		||||
       {
 | 
			
		||||
          if (ares_inet_pton(AF_INET6, line, &addr6) > 0)
 | 
			
		||||
            {
 | 
			
		||||
              if (family != AF_INET6)
 | 
			
		||||
                continue;
 | 
			
		||||
              addrlen = sizeof(struct in6_addr);
 | 
			
		||||
            }
 | 
			
		||||
          else
 | 
			
		||||
            continue;
 | 
			
		||||
       }
 | 
			
		||||
      else if (family != AF_INET)
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      /* Get the canonical hostname. */
 | 
			
		||||
      p++;
 | 
			
		||||
      while (ISSPACE(*p))
 | 
			
		||||
        p++;
 | 
			
		||||
      if (!*p)
 | 
			
		||||
        continue;
 | 
			
		||||
      q = p;
 | 
			
		||||
      while (*q && !ISSPACE(*q))
 | 
			
		||||
        q++;
 | 
			
		||||
      end_at_hostname = (*q == 0);
 | 
			
		||||
      *q = 0;
 | 
			
		||||
      canonical = p;
 | 
			
		||||
 | 
			
		||||
      naliases = 0;
 | 
			
		||||
      if (!end_at_hostname)
 | 
			
		||||
        {
 | 
			
		||||
          /* Count the aliases. */
 | 
			
		||||
          p = q + 1;
 | 
			
		||||
          while (ISSPACE(*p))
 | 
			
		||||
            p++;
 | 
			
		||||
          while (*p)
 | 
			
		||||
            {
 | 
			
		||||
              while (*p && !ISSPACE(*p))
 | 
			
		||||
                p++;
 | 
			
		||||
              while (ISSPACE(*p))
 | 
			
		||||
                p++;
 | 
			
		||||
              naliases++;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      /* Allocate memory for the host structure. */
 | 
			
		||||
      hostent = malloc(sizeof(struct hostent));
 | 
			
		||||
      if (!hostent)
 | 
			
		||||
        break;
 | 
			
		||||
      hostent->h_aliases = NULL;
 | 
			
		||||
      hostent->h_addr_list = NULL;
 | 
			
		||||
      hostent->h_name = strdup(canonical);
 | 
			
		||||
      if (!hostent->h_name)
 | 
			
		||||
        break;
 | 
			
		||||
      hostent->h_addr_list = malloc(2 * sizeof(char *));
 | 
			
		||||
      if (!hostent->h_addr_list)
 | 
			
		||||
        break;
 | 
			
		||||
      hostent->h_addr_list[0] = malloc(addrlen);
 | 
			
		||||
      if (!hostent->h_addr_list[0])
 | 
			
		||||
        break;
 | 
			
		||||
      hostent->h_aliases = malloc((naliases + 1) * sizeof(char *));
 | 
			
		||||
      if (!hostent->h_aliases)
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
      /* Copy in aliases. */
 | 
			
		||||
      naliases = 0;
 | 
			
		||||
      if (!end_at_hostname)
 | 
			
		||||
        {
 | 
			
		||||
          p = canonical + strlen(canonical) + 1;
 | 
			
		||||
          while (ISSPACE(*p))
 | 
			
		||||
            p++;
 | 
			
		||||
          while (*p)
 | 
			
		||||
            {
 | 
			
		||||
              q = p;
 | 
			
		||||
              while (*q && !ISSPACE(*q))
 | 
			
		||||
                q++;
 | 
			
		||||
              hostent->h_aliases[naliases] = malloc(q - p + 1);
 | 
			
		||||
              if (hostent->h_aliases[naliases] == NULL)
 | 
			
		||||
                break;
 | 
			
		||||
              memcpy(hostent->h_aliases[naliases], p, q - p);
 | 
			
		||||
              hostent->h_aliases[naliases][q - p] = 0;
 | 
			
		||||
              p = q;
 | 
			
		||||
              while (ISSPACE(*p))
 | 
			
		||||
                p++;
 | 
			
		||||
              naliases++;
 | 
			
		||||
            }
 | 
			
		||||
          if (*p)
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
      hostent->h_aliases[naliases] = NULL;
 | 
			
		||||
 | 
			
		||||
      hostent->h_addrtype = family;
 | 
			
		||||
      hostent->h_length = addrlen;
 | 
			
		||||
      if (family == AF_INET)
 | 
			
		||||
        memcpy(hostent->h_addr_list[0], &addr, addrlen);
 | 
			
		||||
      else if (family == AF_INET6)
 | 
			
		||||
        memcpy(hostent->h_addr_list[0], &addr6, addrlen);
 | 
			
		||||
      hostent->h_addr_list[1] = NULL;
 | 
			
		||||
      *host = hostent;
 | 
			
		||||
      free(line);
 | 
			
		||||
      return ARES_SUCCESS;
 | 
			
		||||
    }
 | 
			
		||||
  if(line)
 | 
			
		||||
    free(line);
 | 
			
		||||
 | 
			
		||||
  if (status == ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      /* Memory allocation failure; clean up. */
 | 
			
		||||
      if (hostent)
 | 
			
		||||
        {
 | 
			
		||||
          if(hostent->h_name)
 | 
			
		||||
            free((char *) hostent->h_name);
 | 
			
		||||
          if (hostent->h_aliases)
 | 
			
		||||
            {
 | 
			
		||||
              for (alias = hostent->h_aliases; *alias; alias++)
 | 
			
		||||
                free(*alias);
 | 
			
		||||
            }
 | 
			
		||||
          if(hostent->h_aliases)
 | 
			
		||||
            free(hostent->h_aliases);
 | 
			
		||||
          if (hostent->h_addr_list && hostent->h_addr_list[0])
 | 
			
		||||
            free(hostent->h_addr_list[0]);
 | 
			
		||||
          if(hostent->h_addr_list)
 | 
			
		||||
            free(hostent->h_addr_list);
 | 
			
		||||
          free(hostent);
 | 
			
		||||
        }
 | 
			
		||||
      *host = NULL;
 | 
			
		||||
      return ARES_ENOMEM;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return status;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										67
									
								
								ares/ares__read_line.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								ares/ares__read_line.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,67 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
/* This is an internal function.  Its contract is to read a line from
 | 
			
		||||
 * a file into a dynamically allocated buffer, zeroing the trailing
 | 
			
		||||
 * newline if there is one.  The calling routine may call
 | 
			
		||||
 * ares__read_line multiple times with the same buf and bufsize
 | 
			
		||||
 * pointers; *buf will be reallocated and *bufsize adjusted as
 | 
			
		||||
 * appropriate.  The initial value of *buf should be NULL.  After the
 | 
			
		||||
 * calling routine is done reading lines, it should free *buf.
 | 
			
		||||
 */
 | 
			
		||||
int ares__read_line(FILE *fp, char **buf, int *bufsize)
 | 
			
		||||
{
 | 
			
		||||
  char *newbuf;
 | 
			
		||||
  size_t offset = 0;
 | 
			
		||||
  size_t len;
 | 
			
		||||
 | 
			
		||||
  if (*buf == NULL)
 | 
			
		||||
    {
 | 
			
		||||
      *buf = malloc(128);
 | 
			
		||||
      if (!*buf)
 | 
			
		||||
        return ARES_ENOMEM;
 | 
			
		||||
      *bufsize = 128;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  while (1)
 | 
			
		||||
    {
 | 
			
		||||
      if (!fgets(*buf + offset, *bufsize - (int)offset, fp))
 | 
			
		||||
        return (offset != 0) ? 0 : (ferror(fp)) ? ARES_EFILE : ARES_EOF;
 | 
			
		||||
      len = offset + strlen(*buf + offset);
 | 
			
		||||
      if ((*buf)[len - 1] == '\n')
 | 
			
		||||
        {
 | 
			
		||||
          (*buf)[len - 1] = 0;
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
      offset = len;
 | 
			
		||||
 | 
			
		||||
      /* Allocate more space. */
 | 
			
		||||
      newbuf = realloc(*buf, *bufsize * 2);
 | 
			
		||||
      if (!newbuf)
 | 
			
		||||
        return ARES_ENOMEM;
 | 
			
		||||
      *buf = newbuf;
 | 
			
		||||
      *bufsize *= 2;
 | 
			
		||||
    }
 | 
			
		||||
  return ARES_SUCCESS;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										112
									
								
								ares/ares__timeval.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								ares/ares__timeval.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,112 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 2008 by Daniel Stenberg et al
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this software and its
 | 
			
		||||
 * documentation for any purpose and without fee is hereby granted, provided
 | 
			
		||||
 * that the above copyright notice appear in all copies and that both that
 | 
			
		||||
 * copyright notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in advertising or
 | 
			
		||||
 * publicity pertaining to distribution of the software without specific,
 | 
			
		||||
 * written prior permission.  M.I.T. makes no representations about the
 | 
			
		||||
 * suitability of this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
#if defined(WIN32) && !defined(MSDOS)
 | 
			
		||||
 | 
			
		||||
struct timeval ares__tvnow(void)
 | 
			
		||||
{
 | 
			
		||||
  /*
 | 
			
		||||
  ** GetTickCount() is available on _all_ Windows versions from W95 up
 | 
			
		||||
  ** to nowadays. Returns milliseconds elapsed since last system boot,
 | 
			
		||||
  ** increases monotonically and wraps once 49.7 days have elapsed.
 | 
			
		||||
  */
 | 
			
		||||
  struct timeval now;
 | 
			
		||||
  DWORD milliseconds = GetTickCount();
 | 
			
		||||
  now.tv_sec = milliseconds / 1000;
 | 
			
		||||
  now.tv_usec = (milliseconds % 1000) * 1000;
 | 
			
		||||
  return now;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#elif defined(HAVE_CLOCK_GETTIME_MONOTONIC)
 | 
			
		||||
 | 
			
		||||
struct timeval ares__tvnow(void)
 | 
			
		||||
{
 | 
			
		||||
  /*
 | 
			
		||||
  ** clock_gettime() is granted to be increased monotonically when the
 | 
			
		||||
  ** monotonic clock is queried. Time starting point is unspecified, it
 | 
			
		||||
  ** could be the system start-up time, the Epoch, or something else,
 | 
			
		||||
  ** in any case the time starting point does not change once that the
 | 
			
		||||
  ** system has started up.
 | 
			
		||||
  */
 | 
			
		||||
  struct timeval now;
 | 
			
		||||
  struct timespec tsnow;
 | 
			
		||||
  if(0 == clock_gettime(CLOCK_MONOTONIC, &tsnow)) {
 | 
			
		||||
    now.tv_sec = tsnow.tv_sec;
 | 
			
		||||
    now.tv_usec = tsnow.tv_nsec / 1000;
 | 
			
		||||
  }
 | 
			
		||||
  /*
 | 
			
		||||
  ** Even when the configure process has truly detected monotonic clock
 | 
			
		||||
  ** availability, it might happen that it is not actually available at
 | 
			
		||||
  ** run-time. When this occurs simply fallback to other time source.
 | 
			
		||||
  */
 | 
			
		||||
#ifdef HAVE_GETTIMEOFDAY
 | 
			
		||||
  else
 | 
			
		||||
    (void)gettimeofday(&now, NULL);
 | 
			
		||||
#else
 | 
			
		||||
  else {
 | 
			
		||||
    now.tv_sec = (long)time(NULL);
 | 
			
		||||
    now.tv_usec = 0;
 | 
			
		||||
  }
 | 
			
		||||
#endif
 | 
			
		||||
  return now;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#elif defined(HAVE_GETTIMEOFDAY)
 | 
			
		||||
 | 
			
		||||
struct timeval ares__tvnow(void)
 | 
			
		||||
{
 | 
			
		||||
  /*
 | 
			
		||||
  ** gettimeofday() is not granted to be increased monotonically, due to
 | 
			
		||||
  ** clock drifting and external source time synchronization it can jump
 | 
			
		||||
  ** forward or backward in time.
 | 
			
		||||
  */
 | 
			
		||||
  struct timeval now;
 | 
			
		||||
  (void)gettimeofday(&now, NULL);
 | 
			
		||||
  return now;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
struct timeval ares__tvnow(void)
 | 
			
		||||
{
 | 
			
		||||
  /*
 | 
			
		||||
  ** time() returns the value of time in seconds since the Epoch.
 | 
			
		||||
  */
 | 
			
		||||
  struct timeval now;
 | 
			
		||||
  now.tv_sec = (long)time(NULL);
 | 
			
		||||
  now.tv_usec = 0;
 | 
			
		||||
  return now;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if 0 /* Not used */
 | 
			
		||||
/*
 | 
			
		||||
 * Make sure that the first argument is the more recent time, as otherwise
 | 
			
		||||
 * we'll get a weird negative time-diff back...
 | 
			
		||||
 *
 | 
			
		||||
 * Returns: the time difference in number of milliseconds.
 | 
			
		||||
 */
 | 
			
		||||
long ares__tvdiff(struct timeval newer, struct timeval older)
 | 
			
		||||
{
 | 
			
		||||
  return (newer.tv_sec-older.tv_sec)*1000+
 | 
			
		||||
    (newer.tv_usec-older.tv_usec)/1000;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										39
									
								
								ares/ares_cancel.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								ares/ares_cancel.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_CANCEL 3 "31 March 2004"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_cancel \- Cancel a resolve
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B int ares_cancel(ares_channel \fIchannel\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The \fBares_cancel\fP function cancels all lookups/requests made on the the
 | 
			
		||||
name service channel identified by \fIchannel\fP.  \fBares_cancel\fP invokes
 | 
			
		||||
the callbacks for each pending query on the channel, passing a status of
 | 
			
		||||
.BR ARES_ETIMEOUT .
 | 
			
		||||
These calls give the callbacks a chance to clean up any state which
 | 
			
		||||
might have been stored in their arguments.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_init (3)
 | 
			
		||||
.BR ares_destroy (3)
 | 
			
		||||
.SH NOTES
 | 
			
		||||
This function was added in c-ares 1.2.0
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Dirk Manske
 | 
			
		||||
							
								
								
									
										64
									
								
								ares/ares_cancel.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								ares/ares_cancel.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,64 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 2004 by Daniel Stenberg et al
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this software and its
 | 
			
		||||
 * documentation for any purpose and without fee is hereby granted, provided
 | 
			
		||||
 * that the above copyright notice appear in all copies and that both that
 | 
			
		||||
 * copyright notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in advertising or
 | 
			
		||||
 * publicity pertaining to distribution of the software without specific,
 | 
			
		||||
 * written prior permission.  M.I.T. makes no representations about the
 | 
			
		||||
 * suitability of this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * ares_cancel() cancels all ongoing requests/resolves that might be going on
 | 
			
		||||
 * on the given channel. It does NOT kill the channel, use ares_destroy() for
 | 
			
		||||
 * that.
 | 
			
		||||
 */
 | 
			
		||||
void ares_cancel(ares_channel channel)
 | 
			
		||||
{
 | 
			
		||||
  struct query *query;
 | 
			
		||||
  struct list_node* list_head;
 | 
			
		||||
  struct list_node* list_node;
 | 
			
		||||
  int i;
 | 
			
		||||
 | 
			
		||||
  list_head = &(channel->all_queries);
 | 
			
		||||
  for (list_node = list_head->next; list_node != list_head; )
 | 
			
		||||
  {
 | 
			
		||||
    query = list_node->data;
 | 
			
		||||
    list_node = list_node->next;  /* since we're deleting the query */
 | 
			
		||||
    query->callback(query->arg, ARES_ETIMEOUT, 0, NULL, 0);
 | 
			
		||||
    ares__free_query(query);
 | 
			
		||||
  }
 | 
			
		||||
#ifndef NDEBUG
 | 
			
		||||
  /* Freeing the query should remove it from all the lists in which it sits,
 | 
			
		||||
   * so all query lists should be empty now.
 | 
			
		||||
   */
 | 
			
		||||
  assert(ares__is_list_empty(&(channel->all_queries)));
 | 
			
		||||
  for (i = 0; i < ARES_QID_TABLE_SIZE; i++)
 | 
			
		||||
    {
 | 
			
		||||
      assert(ares__is_list_empty(&(channel->queries_by_qid[i])));
 | 
			
		||||
    }
 | 
			
		||||
  for (i = 0; i < ARES_TIMEOUT_TABLE_SIZE; i++)
 | 
			
		||||
    {
 | 
			
		||||
      assert(ares__is_list_empty(&(channel->queries_by_timeout[i])));
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
  if (!(channel->flags & ARES_FLAG_STAYOPEN))
 | 
			
		||||
  {
 | 
			
		||||
    if (channel->servers)
 | 
			
		||||
    {
 | 
			
		||||
      for (i = 0; i < channel->nservers; i++)
 | 
			
		||||
        ares__close_sockets(channel, &channel->servers[i]);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										44
									
								
								ares/ares_destroy.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								ares/ares_destroy.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_DESTROY 3 "7 December 2004"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_destroy \- Destroy a resolver channel
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B void ares_destroy(ares_channel \fIchannel\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_destroy
 | 
			
		||||
function destroys the name service channel identified by
 | 
			
		||||
.IR channel ,
 | 
			
		||||
freeing all memory and closing all sockets used by the channel.
 | 
			
		||||
.B ares_destroy
 | 
			
		||||
invokes the callbacks for each pending query on the channel, passing a
 | 
			
		||||
status of
 | 
			
		||||
.BR ARES_EDESTRUCTION .
 | 
			
		||||
These calls give the callbacks a chance to clean up any state which
 | 
			
		||||
might have been stored in their arguments.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_init (3),
 | 
			
		||||
.BR ares_cancel (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Greg Hudson, MIT Information Systems
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										93
									
								
								ares/ares_destroy.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								ares/ares_destroy.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,93 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
void ares_destroy_options(struct ares_options *options)
 | 
			
		||||
{
 | 
			
		||||
  int i;
 | 
			
		||||
 | 
			
		||||
  free(options->servers);
 | 
			
		||||
  for (i = 0; i < options->ndomains; i++)
 | 
			
		||||
    free(options->domains[i]);
 | 
			
		||||
  free(options->domains);
 | 
			
		||||
  if(options->sortlist)
 | 
			
		||||
    free(options->sortlist);
 | 
			
		||||
  free(options->lookups);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ares_destroy(ares_channel channel)
 | 
			
		||||
{
 | 
			
		||||
  int i;
 | 
			
		||||
  struct query *query;
 | 
			
		||||
  struct list_node* list_head;
 | 
			
		||||
  struct list_node* list_node;
 | 
			
		||||
  
 | 
			
		||||
  if (!channel)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  list_head = &(channel->all_queries);
 | 
			
		||||
  for (list_node = list_head->next; list_node != list_head; )
 | 
			
		||||
    {
 | 
			
		||||
      query = list_node->data;
 | 
			
		||||
      list_node = list_node->next;  /* since we're deleting the query */
 | 
			
		||||
      query->callback(query->arg, ARES_EDESTRUCTION, 0, NULL, 0);
 | 
			
		||||
      ares__free_query(query);
 | 
			
		||||
    }
 | 
			
		||||
#ifndef NDEBUG
 | 
			
		||||
  /* Freeing the query should remove it from all the lists in which it sits,
 | 
			
		||||
   * so all query lists should be empty now.
 | 
			
		||||
   */
 | 
			
		||||
  assert(ares__is_list_empty(&(channel->all_queries)));
 | 
			
		||||
  for (i = 0; i < ARES_QID_TABLE_SIZE; i++)
 | 
			
		||||
    {
 | 
			
		||||
      assert(ares__is_list_empty(&(channel->queries_by_qid[i])));
 | 
			
		||||
    }
 | 
			
		||||
  for (i = 0; i < ARES_TIMEOUT_TABLE_SIZE; i++)
 | 
			
		||||
    {
 | 
			
		||||
      assert(ares__is_list_empty(&(channel->queries_by_timeout[i])));
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  if (channel->servers) {
 | 
			
		||||
    for (i = 0; i < channel->nservers; i++)
 | 
			
		||||
      {
 | 
			
		||||
        struct server_state *server = &channel->servers[i];
 | 
			
		||||
        ares__close_sockets(channel, server);
 | 
			
		||||
        assert(ares__is_list_empty(&(server->queries_to_server)));
 | 
			
		||||
      }
 | 
			
		||||
    free(channel->servers);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (channel->domains) {
 | 
			
		||||
    for (i = 0; i < channel->ndomains; i++)
 | 
			
		||||
      free(channel->domains[i]);
 | 
			
		||||
    free(channel->domains);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if(channel->sortlist)
 | 
			
		||||
    free(channel->sortlist);
 | 
			
		||||
 | 
			
		||||
  if (channel->lookups)
 | 
			
		||||
    free(channel->lookups);
 | 
			
		||||
 | 
			
		||||
  free(channel);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										39
									
								
								ares/ares_destroy_options.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								ares/ares_destroy_options.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_DESTROY_OPTIONS 3 "1 June 2007"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_destroy_options \- Destroy options initialized with ares_save_options
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B void ares_destroy_options(struct ares_options *\fIoptions\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_destroy_options
 | 
			
		||||
function destroys the options struct identified by
 | 
			
		||||
.IR options ,
 | 
			
		||||
freeing all memory allocated by ares_save_options.
 | 
			
		||||
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_save_options (3),
 | 
			
		||||
.BR ares_init_options (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Brad House
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										91
									
								
								ares/ares_dns.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								ares/ares_dns.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,91 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef ARES__DNS_H
 | 
			
		||||
#define ARES__DNS_H
 | 
			
		||||
 | 
			
		||||
#define DNS__16BIT(p)                   (((p)[0] << 8) | (p)[1])
 | 
			
		||||
#define DNS__32BIT(p)                   (((p)[0] << 24) | ((p)[1] << 16) | \
 | 
			
		||||
                                         ((p)[2] << 8) | (p)[3])
 | 
			
		||||
 | 
			
		||||
#define DNS__SET16BIT(p, v)  (((p)[0] = (unsigned char)(((v) >> 8) & 0xff)), \
 | 
			
		||||
                              ((p)[1] = (unsigned char)((v) & 0xff)))
 | 
			
		||||
#define DNS__SET32BIT(p, v)  (((p)[0] = (unsigned char)(((v) >> 24) & 0xff)), \
 | 
			
		||||
                              ((p)[1] = (unsigned char)(((v) >> 16) & 0xff)), \
 | 
			
		||||
                              ((p)[2] = (unsigned char)(((v) >> 8) & 0xff)), \
 | 
			
		||||
                              ((p)[3] = (unsigned char)((v) & 0xff)))
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
/* we cannot use this approach on systems where we can't access 16/32 bit
 | 
			
		||||
   data on un-aligned addresses */
 | 
			
		||||
#define DNS__16BIT(p)                   ntohs(*(unsigned short*)(p))
 | 
			
		||||
#define DNS__32BIT(p)                   ntohl(*(unsigned long*)(p))
 | 
			
		||||
#define DNS__SET16BIT(p, v)             *(unsigned short*)(p) = htons(v)
 | 
			
		||||
#define DNS__SET32BIT(p, v)             *(unsigned long*)(p) = htonl(v)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Macros for parsing a DNS header */
 | 
			
		||||
#define DNS_HEADER_QID(h)               DNS__16BIT(h)
 | 
			
		||||
#define DNS_HEADER_QR(h)                (((h)[2] >> 7) & 0x1)
 | 
			
		||||
#define DNS_HEADER_OPCODE(h)            (((h)[2] >> 3) & 0xf)
 | 
			
		||||
#define DNS_HEADER_AA(h)                (((h)[2] >> 2) & 0x1)
 | 
			
		||||
#define DNS_HEADER_TC(h)                (((h)[2] >> 1) & 0x1)
 | 
			
		||||
#define DNS_HEADER_RD(h)                ((h)[2] & 0x1)
 | 
			
		||||
#define DNS_HEADER_RA(h)                (((h)[3] >> 7) & 0x1)
 | 
			
		||||
#define DNS_HEADER_Z(h)                 (((h)[3] >> 4) & 0x7)
 | 
			
		||||
#define DNS_HEADER_RCODE(h)             ((h)[3] & 0xf)
 | 
			
		||||
#define DNS_HEADER_QDCOUNT(h)           DNS__16BIT((h) + 4)
 | 
			
		||||
#define DNS_HEADER_ANCOUNT(h)           DNS__16BIT((h) + 6)
 | 
			
		||||
#define DNS_HEADER_NSCOUNT(h)           DNS__16BIT((h) + 8)
 | 
			
		||||
#define DNS_HEADER_ARCOUNT(h)           DNS__16BIT((h) + 10)
 | 
			
		||||
 | 
			
		||||
/* Macros for constructing a DNS header */
 | 
			
		||||
#define DNS_HEADER_SET_QID(h, v)      DNS__SET16BIT(h, v)
 | 
			
		||||
#define DNS_HEADER_SET_QR(h, v)       ((h)[2] |= (unsigned char)(((v) & 0x1) << 7))
 | 
			
		||||
#define DNS_HEADER_SET_OPCODE(h, v)   ((h)[2] |= (unsigned char)(((v) & 0xf) << 3))
 | 
			
		||||
#define DNS_HEADER_SET_AA(h, v)       ((h)[2] |= (unsigned char)(((v) & 0x1) << 2))
 | 
			
		||||
#define DNS_HEADER_SET_TC(h, v)       ((h)[2] |= (unsigned char)(((v) & 0x1) << 1))
 | 
			
		||||
#define DNS_HEADER_SET_RD(h, v)       ((h)[2] |= (unsigned char)((v) & 0x1))
 | 
			
		||||
#define DNS_HEADER_SET_RA(h, v)       ((h)[3] |= (unsigned char)(((v) & 0x1) << 7))
 | 
			
		||||
#define DNS_HEADER_SET_Z(h, v)        ((h)[3] |= (unsigned char)(((v) & 0x7) << 4))
 | 
			
		||||
#define DNS_HEADER_SET_RCODE(h, v)    ((h)[3] |= (unsigned char)((v) & 0xf))
 | 
			
		||||
#define DNS_HEADER_SET_QDCOUNT(h, v)  DNS__SET16BIT((h) + 4, v)
 | 
			
		||||
#define DNS_HEADER_SET_ANCOUNT(h, v)  DNS__SET16BIT((h) + 6, v)
 | 
			
		||||
#define DNS_HEADER_SET_NSCOUNT(h, v)  DNS__SET16BIT((h) + 8, v)
 | 
			
		||||
#define DNS_HEADER_SET_ARCOUNT(h, v)  DNS__SET16BIT((h) + 10, v)
 | 
			
		||||
 | 
			
		||||
/* Macros for parsing the fixed part of a DNS question */
 | 
			
		||||
#define DNS_QUESTION_TYPE(q)            DNS__16BIT(q)
 | 
			
		||||
#define DNS_QUESTION_CLASS(q)           DNS__16BIT((q) + 2)
 | 
			
		||||
 | 
			
		||||
/* Macros for constructing the fixed part of a DNS question */
 | 
			
		||||
#define DNS_QUESTION_SET_TYPE(q, v)     DNS__SET16BIT(q, v)
 | 
			
		||||
#define DNS_QUESTION_SET_CLASS(q, v)    DNS__SET16BIT((q) + 2, v)
 | 
			
		||||
 | 
			
		||||
/* Macros for parsing the fixed part of a DNS resource record */
 | 
			
		||||
#define DNS_RR_TYPE(r)                  DNS__16BIT(r)
 | 
			
		||||
#define DNS_RR_CLASS(r)                 DNS__16BIT((r) + 2)
 | 
			
		||||
#define DNS_RR_TTL(r)                   DNS__32BIT((r) + 4)
 | 
			
		||||
#define DNS_RR_LEN(r)                   DNS__16BIT((r) + 8)
 | 
			
		||||
 | 
			
		||||
/* Macros for constructing the fixed part of a DNS resource record */
 | 
			
		||||
#define DNS_RR_SET_TYPE(r)              DNS__SET16BIT(r, v)
 | 
			
		||||
#define DNS_RR_SET_CLASS(r)             DNS__SET16BIT((r) + 2, v)
 | 
			
		||||
#define DNS_RR_SET_TTL(r)               DNS__SET32BIT((r) + 4, v)
 | 
			
		||||
#define DNS_RR_SET_LEN(r)               DNS__SET16BIT((r) + 8, v)
 | 
			
		||||
 | 
			
		||||
#endif /* ARES__DNS_H */
 | 
			
		||||
							
								
								
									
										43
									
								
								ares/ares_dup.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								ares/ares_dup.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,43 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright (C) 2007-2008 by Daniel Stenberg
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_DUP 3 "2 Dec 2008"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_dup \- Duplicate a resolver channel
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B int ares_dup(ares_channel *\fIchannel\fP, ares_channel \fIsource\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The \fBares_dup(3)\fP function duplicates an existing communications channel
 | 
			
		||||
for name service lookups.  If it returns successfully, \fBares_dup(3)\fP will
 | 
			
		||||
set the variable pointed to by \fIchannel\fP to a handle used to identify the
 | 
			
		||||
name service channel.  The caller should invoke \fIares_destroy(3)\fP on the
 | 
			
		||||
handle when the channel is no longer needed.
 | 
			
		||||
 | 
			
		||||
The \fBares_dup_options\fP function also initializes a name service channel,
 | 
			
		||||
with additional options set exactly as the \fIsource\fP channel has them
 | 
			
		||||
configured.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_destroy(3),
 | 
			
		||||
.BR ares_init(3)
 | 
			
		||||
.SH AVAILABILITY
 | 
			
		||||
ares_dup(3) was added in c-ares 1.6.0
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Daniel Stenberg
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										64
									
								
								ares/ares_expand_name.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								ares/ares_expand_name.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,64 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_EXPAND_NAME 3 "23 July 1998"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_expand_name \- Expand a DNS-encoded domain name
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B int ares_expand_name(const unsigned char *\fIencoded\fP,
 | 
			
		||||
.B      const unsigned char *\fIabuf\fP, int \fIalen\fP, char **\fIs\fP,
 | 
			
		||||
.B 	int *\fIenclen\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_expand_name
 | 
			
		||||
function converts a DNS-encoded domain name to a dot-separated C
 | 
			
		||||
string.  The argument
 | 
			
		||||
.I encoded
 | 
			
		||||
gives the beginning of the encoded domain name, and the arguments
 | 
			
		||||
.I abuf
 | 
			
		||||
and
 | 
			
		||||
.I alen
 | 
			
		||||
give the containing message buffer (necessary for the processing of
 | 
			
		||||
indirection pointers within the encoded domain name).  The result is
 | 
			
		||||
placed in a NUL-terminated allocated buffer, a pointer to which is
 | 
			
		||||
stored in the variable pointed to by
 | 
			
		||||
.IR s .
 | 
			
		||||
The length of the encoded name is stored in the variable pointed to by
 | 
			
		||||
.I enclen
 | 
			
		||||
so that the caller can advance past the encoded domain name to read
 | 
			
		||||
further data in the message.
 | 
			
		||||
.SH RETURN VALUES
 | 
			
		||||
.B ares_expand_name
 | 
			
		||||
can return any of the following values:
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_SUCCESS
 | 
			
		||||
Expansion of the encoded name succeeded.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_EBADNAME
 | 
			
		||||
The encoded domain name was malformed and could not be expanded.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_ENOMEM
 | 
			
		||||
Memory was exhausted.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_mkquery (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Greg Hudson, MIT Information Systems
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										179
									
								
								ares/ares_expand_name.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										179
									
								
								ares/ares_expand_name.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,179 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_SYS_SOCKET_H
 | 
			
		||||
#  include <sys/socket.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETINET_IN_H
 | 
			
		||||
#  include <netinet/in.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_H
 | 
			
		||||
#  include <arpa/nameser.h>
 | 
			
		||||
#else
 | 
			
		||||
#  include "nameser.h"
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
 | 
			
		||||
#  include <arpa/nameser_compat.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_private.h" /* for the memdebug */
 | 
			
		||||
 | 
			
		||||
static int name_length(const unsigned char *encoded, const unsigned char *abuf,
 | 
			
		||||
                       int alen);
 | 
			
		||||
 | 
			
		||||
/* Expand an RFC1035-encoded domain name given by encoded.  The
 | 
			
		||||
 * containing message is given by abuf and alen.  The result given by
 | 
			
		||||
 * *s, which is set to a NUL-terminated allocated buffer.  *enclen is
 | 
			
		||||
 * set to the length of the encoded name (not the length of the
 | 
			
		||||
 * expanded name; the goal is to tell the caller how many bytes to
 | 
			
		||||
 * move forward to get past the encoded name).
 | 
			
		||||
 *
 | 
			
		||||
 * In the simple case, an encoded name is a series of labels, each
 | 
			
		||||
 * composed of a one-byte length (limited to values between 0 and 63
 | 
			
		||||
 * inclusive) followed by the label contents.  The name is terminated
 | 
			
		||||
 * by a zero-length label.
 | 
			
		||||
 *
 | 
			
		||||
 * In the more complicated case, a label may be terminated by an
 | 
			
		||||
 * indirection pointer, specified by two bytes with the high bits of
 | 
			
		||||
 * the first byte (corresponding to INDIR_MASK) set to 11.  With the
 | 
			
		||||
 * two high bits of the first byte stripped off, the indirection
 | 
			
		||||
 * pointer gives an offset from the beginning of the containing
 | 
			
		||||
 * message with more labels to decode.  Indirection can happen an
 | 
			
		||||
 * arbitrary number of times, so we have to detect loops.
 | 
			
		||||
 *
 | 
			
		||||
 * Since the expanded name uses '.' as a label separator, we use
 | 
			
		||||
 * backslashes to escape periods or backslashes in the expanded name.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
int ares_expand_name(const unsigned char *encoded, const unsigned char *abuf,
 | 
			
		||||
                     int alen, char **s, long *enclen)
 | 
			
		||||
{
 | 
			
		||||
  int len, indir = 0;
 | 
			
		||||
  char *q;
 | 
			
		||||
  const unsigned char *p;
 | 
			
		||||
 | 
			
		||||
  len = name_length(encoded, abuf, alen);
 | 
			
		||||
  if (len == -1)
 | 
			
		||||
    return ARES_EBADNAME;
 | 
			
		||||
 | 
			
		||||
  *s = malloc(len + 1);
 | 
			
		||||
  if (!*s)
 | 
			
		||||
    return ARES_ENOMEM;
 | 
			
		||||
  q = *s;
 | 
			
		||||
 | 
			
		||||
  if (len == 0) {
 | 
			
		||||
    /* RFC2181 says this should be ".": the root of the DNS tree.
 | 
			
		||||
     * Since this function strips trailing dots though, it becomes ""
 | 
			
		||||
     */
 | 
			
		||||
    q[0] = '\0';
 | 
			
		||||
    *enclen = 1;  /* the caller should move one byte to get past this */
 | 
			
		||||
    return ARES_SUCCESS;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* No error-checking necessary; it was all done by name_length(). */
 | 
			
		||||
  p = encoded;
 | 
			
		||||
  while (*p)
 | 
			
		||||
    {
 | 
			
		||||
      if ((*p & INDIR_MASK) == INDIR_MASK)
 | 
			
		||||
        {
 | 
			
		||||
          if (!indir)
 | 
			
		||||
            {
 | 
			
		||||
              *enclen = p + 2 - encoded;
 | 
			
		||||
              indir = 1;
 | 
			
		||||
            }
 | 
			
		||||
          p = abuf + ((*p & ~INDIR_MASK) << 8 | *(p + 1));
 | 
			
		||||
        }
 | 
			
		||||
      else
 | 
			
		||||
        {
 | 
			
		||||
          len = *p;
 | 
			
		||||
          p++;
 | 
			
		||||
          while (len--)
 | 
			
		||||
            {
 | 
			
		||||
              if (*p == '.' || *p == '\\')
 | 
			
		||||
                *q++ = '\\';
 | 
			
		||||
              *q++ = *p;
 | 
			
		||||
              p++;
 | 
			
		||||
            }
 | 
			
		||||
          *q++ = '.';
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  if (!indir)
 | 
			
		||||
    *enclen = p + 1 - encoded;
 | 
			
		||||
 | 
			
		||||
  /* Nuke the trailing period if we wrote one. */
 | 
			
		||||
  if (q > *s)
 | 
			
		||||
    *(q - 1) = 0;
 | 
			
		||||
  else
 | 
			
		||||
    *q = 0; /* zero terminate */
 | 
			
		||||
 | 
			
		||||
  return ARES_SUCCESS;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Return the length of the expansion of an encoded domain name, or
 | 
			
		||||
 * -1 if the encoding is invalid.
 | 
			
		||||
 */
 | 
			
		||||
static int name_length(const unsigned char *encoded, const unsigned char *abuf,
 | 
			
		||||
                       int alen)
 | 
			
		||||
{
 | 
			
		||||
  int n = 0, offset, indir = 0;
 | 
			
		||||
 | 
			
		||||
  /* Allow the caller to pass us abuf + alen and have us check for it. */
 | 
			
		||||
  if (encoded == abuf + alen)
 | 
			
		||||
    return -1;
 | 
			
		||||
 | 
			
		||||
  while (*encoded)
 | 
			
		||||
    {
 | 
			
		||||
      if ((*encoded & INDIR_MASK) == INDIR_MASK)
 | 
			
		||||
        {
 | 
			
		||||
          /* Check the offset and go there. */
 | 
			
		||||
          if (encoded + 1 >= abuf + alen)
 | 
			
		||||
            return -1;
 | 
			
		||||
          offset = (*encoded & ~INDIR_MASK) << 8 | *(encoded + 1);
 | 
			
		||||
          if (offset >= alen)
 | 
			
		||||
            return -1;
 | 
			
		||||
          encoded = abuf + offset;
 | 
			
		||||
 | 
			
		||||
          /* If we've seen more indirects than the message length,
 | 
			
		||||
           * then there's a loop.
 | 
			
		||||
           */
 | 
			
		||||
          if (++indir > alen)
 | 
			
		||||
            return -1;
 | 
			
		||||
        }
 | 
			
		||||
      else
 | 
			
		||||
        {
 | 
			
		||||
          offset = *encoded;
 | 
			
		||||
          if (encoded + offset + 1 >= abuf + alen)
 | 
			
		||||
            return -1;
 | 
			
		||||
          encoded++;
 | 
			
		||||
          while (offset--)
 | 
			
		||||
            {
 | 
			
		||||
              n += (*encoded == '.' || *encoded == '\\') ? 2 : 1;
 | 
			
		||||
              encoded++;
 | 
			
		||||
            }
 | 
			
		||||
          n++;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* If there were any labels at all, then the number of dots is one
 | 
			
		||||
   * less than the number of labels, so subtract one.
 | 
			
		||||
   */
 | 
			
		||||
  return (n) ? n - 1 : n;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										62
									
								
								ares/ares_expand_string.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								ares/ares_expand_string.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,62 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_EXPAND_NAME 3 "23 July 1998"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_expand_string \- Expand a length encoded string
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B int ares_expand_string(const unsigned char *\fIencoded\fP,
 | 
			
		||||
.B      const unsigned char *\fIabuf\fP, int \fIalen\fP, unsigned char **\fIs\fP,
 | 
			
		||||
.B 	int *\fIenclen\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_expand_string
 | 
			
		||||
function converts a length encoded string to a NUL-terminated C
 | 
			
		||||
string.  The argument
 | 
			
		||||
.I encoded
 | 
			
		||||
gives the beginning of the encoded string, and the arguments
 | 
			
		||||
.I abuf
 | 
			
		||||
and
 | 
			
		||||
.I alen
 | 
			
		||||
give the containing message buffer (necessary for the processing of
 | 
			
		||||
indirection pointers within the encoded domain name).  The result is
 | 
			
		||||
placed in a NUL-terminated allocated buffer, a pointer to which is
 | 
			
		||||
stored in the variable pointed to by
 | 
			
		||||
.IR s .
 | 
			
		||||
The length of the encoded string is stored in the variable pointed to by
 | 
			
		||||
.I enclen
 | 
			
		||||
so that the caller can advance past the encoded string to read
 | 
			
		||||
further data in the message.
 | 
			
		||||
.SH RETURN VALUES
 | 
			
		||||
.B ares_expand_string
 | 
			
		||||
can return any of the following values:
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_SUCCESS
 | 
			
		||||
Expansion of the encoded string succeeded.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_EBADSTR
 | 
			
		||||
The encoded string was malformed and could not be expanded.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_ENOMEM
 | 
			
		||||
Memory was exhausted.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_free_string (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Dominick Meglio
 | 
			
		||||
							
								
								
									
										72
									
								
								ares/ares_expand_string.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								ares/ares_expand_string.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,72 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_SYS_SOCKET_H
 | 
			
		||||
#  include <sys/socket.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETINET_IN_H
 | 
			
		||||
#  include <netinet/in.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_H
 | 
			
		||||
#  include <arpa/nameser.h>
 | 
			
		||||
#else
 | 
			
		||||
#  include "nameser.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_private.h" /* for the memdebug */
 | 
			
		||||
 | 
			
		||||
/* Simply decodes a length-encoded character string. The first byte of the
 | 
			
		||||
 * input is the length of the string to be returned and the bytes thereafter
 | 
			
		||||
 * are the characters of the string. The returned result will be NULL
 | 
			
		||||
 * terminated.
 | 
			
		||||
 */
 | 
			
		||||
int ares_expand_string(const unsigned char *encoded,
 | 
			
		||||
                       const unsigned char *abuf,
 | 
			
		||||
                       int alen,
 | 
			
		||||
                       unsigned char **s,
 | 
			
		||||
                       long *enclen)
 | 
			
		||||
{
 | 
			
		||||
  unsigned char *q;
 | 
			
		||||
  long len;
 | 
			
		||||
  if (encoded == abuf+alen)
 | 
			
		||||
    return ARES_EBADSTR;
 | 
			
		||||
 | 
			
		||||
  len = *encoded;
 | 
			
		||||
  if (encoded+len+1 > abuf+alen)
 | 
			
		||||
    return ARES_EBADSTR;
 | 
			
		||||
 | 
			
		||||
  encoded++;
 | 
			
		||||
 | 
			
		||||
  *s = malloc(len+1);
 | 
			
		||||
  if (*s == NULL)
 | 
			
		||||
    return ARES_ENOMEM;
 | 
			
		||||
  q = *s;
 | 
			
		||||
  strncpy((char *)q, (char *)encoded, len);
 | 
			
		||||
  q[len] = '\0';
 | 
			
		||||
 | 
			
		||||
  *s = q;
 | 
			
		||||
 | 
			
		||||
  *enclen = len+1;
 | 
			
		||||
 | 
			
		||||
  return ARES_SUCCESS;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										62
									
								
								ares/ares_fds.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								ares/ares_fds.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,62 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_FDS 3 "23 July 1998"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_fds \- Get file descriptors to select on for name service
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B int ares_fds(ares_channel \fIchannel\fP, fd_set *\fIread_fds\fP,
 | 
			
		||||
.B	fd_set *\fIwrite_fds\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_fds
 | 
			
		||||
function retrieves the set of file descriptors which the calling
 | 
			
		||||
application should select on for reading and writing for the
 | 
			
		||||
processing of name service queries pending on the name service channel
 | 
			
		||||
identified by
 | 
			
		||||
.IR channel .
 | 
			
		||||
File descriptors will be set in the file descriptor sets pointed to by
 | 
			
		||||
.I read_fds
 | 
			
		||||
and
 | 
			
		||||
.I write_fds
 | 
			
		||||
as appropriate.  File descriptors already set in
 | 
			
		||||
.I read_fds
 | 
			
		||||
and
 | 
			
		||||
.I write_fds
 | 
			
		||||
will remain set; initialization of the file descriptor sets
 | 
			
		||||
(using
 | 
			
		||||
.BR FD_ZERO )
 | 
			
		||||
is the responsibility of the caller.
 | 
			
		||||
.SH RETURN VALUES
 | 
			
		||||
.B ares_fds
 | 
			
		||||
returns one greater than the number of the highest socket set in either
 | 
			
		||||
.I read_fds
 | 
			
		||||
or
 | 
			
		||||
.IR write_fds .
 | 
			
		||||
If no queries are active,
 | 
			
		||||
.B ares_fds
 | 
			
		||||
will return 0.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_timeout (3),
 | 
			
		||||
.BR ares_process (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Greg Hudson, MIT Information Systems
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										63
									
								
								ares/ares_fds.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								ares/ares_fds.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,63 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_SYS_TIME_H
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
int ares_fds(ares_channel channel, fd_set *read_fds, fd_set *write_fds)
 | 
			
		||||
{
 | 
			
		||||
  struct server_state *server;
 | 
			
		||||
  ares_socket_t nfds;
 | 
			
		||||
  int i;
 | 
			
		||||
 | 
			
		||||
  /* Are there any active queries? */
 | 
			
		||||
  int active_queries = !ares__is_list_empty(&(channel->all_queries));
 | 
			
		||||
 | 
			
		||||
  nfds = 0;
 | 
			
		||||
  for (i = 0; i < channel->nservers; i++)
 | 
			
		||||
    {
 | 
			
		||||
      server = &channel->servers[i];
 | 
			
		||||
      /* We only need to register interest in UDP sockets if we have
 | 
			
		||||
       * outstanding queries.
 | 
			
		||||
       */
 | 
			
		||||
      if (active_queries && server->udp_socket != ARES_SOCKET_BAD)
 | 
			
		||||
        {
 | 
			
		||||
          FD_SET(server->udp_socket, read_fds);
 | 
			
		||||
          if (server->udp_socket >= nfds)
 | 
			
		||||
            nfds = server->udp_socket + 1;
 | 
			
		||||
        }
 | 
			
		||||
      /* We always register for TCP events, because we want to know
 | 
			
		||||
       * when the other side closes the connection, so we don't waste
 | 
			
		||||
       * time trying to use a broken connection.
 | 
			
		||||
       */
 | 
			
		||||
      if (server->tcp_socket != ARES_SOCKET_BAD)
 | 
			
		||||
       {
 | 
			
		||||
         FD_SET(server->tcp_socket, read_fds);
 | 
			
		||||
         if (server->qhead)
 | 
			
		||||
           FD_SET(server->tcp_socket, write_fds);
 | 
			
		||||
         if (server->tcp_socket >= nfds)
 | 
			
		||||
           nfds = server->tcp_socket + 1;
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
  return (int)nfds;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										46
									
								
								ares/ares_free_hostent.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								ares/ares_free_hostent.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,46 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_FREE_HOSTENT 3 "23 July 1998"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_free_hostent \- Free host structure allocated by ares functions
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B void ares_free_hostent(struct hostent *\fIhost\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.I ares_free_hostent
 | 
			
		||||
function frees a
 | 
			
		||||
.B struct hostent
 | 
			
		||||
allocated by one of the functions \fIares_parse_a_reply(3)\fP,
 | 
			
		||||
\fIares_parse_aaaa_reply(3)\fP, or \fIares_parse_ptr_reply(3)\fP.
 | 
			
		||||
.SH NOTES
 | 
			
		||||
It is not necessary (and is not correct) to free the host structure passed to
 | 
			
		||||
the callback functions for \fIares_gethostbyname(3)\fP or
 | 
			
		||||
\fIares_gethostbyaddr(3)\fP. c-ares will automatically free such host
 | 
			
		||||
structures when the callback returns.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_parse_a_reply (3),
 | 
			
		||||
.BR ares_parse_aaaa_reply (3),
 | 
			
		||||
.BR ares_parse_ptr_reply (3),
 | 
			
		||||
.BR ares_parse_ns_reply (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Greg Hudson, MIT Information Systems
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										40
									
								
								ares/ares_free_hostent.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								ares/ares_free_hostent.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
 | 
			
		||||
#if !defined(WIN32) || defined(WATT32)
 | 
			
		||||
#include <netdb.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_private.h" /* for memdebug */
 | 
			
		||||
 | 
			
		||||
void ares_free_hostent(struct hostent *host)
 | 
			
		||||
{
 | 
			
		||||
  char **p;
 | 
			
		||||
 | 
			
		||||
  free((char *)(host->h_name));
 | 
			
		||||
  for (p = host->h_aliases; *p; p++)
 | 
			
		||||
    free(*p);
 | 
			
		||||
  free(host->h_aliases);
 | 
			
		||||
  free(host->h_addr_list[0]); /* no matter if there is one or many entries,
 | 
			
		||||
                                 there is only one malloc for all of them */
 | 
			
		||||
  free(host->h_addr_list);
 | 
			
		||||
  free(host);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										36
									
								
								ares/ares_free_string.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								ares/ares_free_string.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 2000 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_FREE_STRING 3 "4 February 2004"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_free_string \- Free strings allocated by ares functions
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B void ares_free_string(void *\fIstr\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.I ares_free_string
 | 
			
		||||
function frees a string allocated by an ares function.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_mkquery (3)
 | 
			
		||||
.BR ares_expand_string (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Greg Hudson, MIT Information Systems
 | 
			
		||||
.br
 | 
			
		||||
Copyright 2000 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										26
									
								
								ares/ares_free_string.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								ares/ares_free_string.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 2000 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
void ares_free_string(void *str)
 | 
			
		||||
{
 | 
			
		||||
  free(str);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										102
									
								
								ares/ares_gethostbyaddr.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								ares/ares_gethostbyaddr.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,102 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_GETHOSTBYADDR 3 "24 July 1998"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_gethostbyaddr \- Initiate a host query by address
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B typedef void (*ares_host_callback)(void *\fIarg\fP, int \fIstatus\fP,
 | 
			
		||||
.B	int \fItimeouts\fP, struct hostent *\fIhostent\fP)
 | 
			
		||||
.PP
 | 
			
		||||
.B void ares_gethostbyaddr(ares_channel \fIchannel\fP, const void *\fIaddr\fP,
 | 
			
		||||
.B 	int \fIaddrlen\fP, int \fIfamily\fP, ares_host_callback \fIcallback\fP,
 | 
			
		||||
.B 	void *\fIarg\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_gethostbyaddr
 | 
			
		||||
function initiates a host query by address on the name service channel
 | 
			
		||||
identified by
 | 
			
		||||
.IR channel .
 | 
			
		||||
The parameters
 | 
			
		||||
.I addr
 | 
			
		||||
and
 | 
			
		||||
.I addrlen
 | 
			
		||||
give the address as a series of bytes, and
 | 
			
		||||
.I family
 | 
			
		||||
gives the type of address.  When the query is complete or has failed, the ares
 | 
			
		||||
library will invoke \fIcallback\fP.  Completion or failure of the query may
 | 
			
		||||
happen immediately, or may happen during a later call to
 | 
			
		||||
\fIares_process(3)\fP, \fIares_destroy(3)\fP or \fIares_cancel(3)\fP.
 | 
			
		||||
.PP
 | 
			
		||||
The callback argument
 | 
			
		||||
.I arg
 | 
			
		||||
is copied from the
 | 
			
		||||
.B ares_gethostbyaddr
 | 
			
		||||
argument
 | 
			
		||||
.IR arg .
 | 
			
		||||
The callback argument
 | 
			
		||||
.I status
 | 
			
		||||
indicates whether the query succeeded and, if not, how it failed.  It
 | 
			
		||||
may have any of the following values:
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_SUCCESS
 | 
			
		||||
The host lookup completed successfully.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ENOTIMP
 | 
			
		||||
The ares library does not know how to look up addresses of type
 | 
			
		||||
.IR family .
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ENOTFOUND
 | 
			
		||||
The address
 | 
			
		||||
.I addr
 | 
			
		||||
was not found.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ENOMEM
 | 
			
		||||
Memory was exhausted.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_EDESTRUCTION
 | 
			
		||||
The name service channel
 | 
			
		||||
.I channel
 | 
			
		||||
is being destroyed; the query will not be completed.
 | 
			
		||||
.PP
 | 
			
		||||
The callback argument
 | 
			
		||||
.I timeouts
 | 
			
		||||
reports how many times a query timed out during the execution of the
 | 
			
		||||
given request.
 | 
			
		||||
.PP
 | 
			
		||||
On successful completion of the query, the callback argument
 | 
			
		||||
.I hostent
 | 
			
		||||
points to a
 | 
			
		||||
.B struct hostent
 | 
			
		||||
containing the name of the host returned by the query.  The callback
 | 
			
		||||
need not and should not attempt to free the memory pointed to by
 | 
			
		||||
.IR hostent ;
 | 
			
		||||
the ares library will free it when the callback returns.  If the query
 | 
			
		||||
did not complete successfully,
 | 
			
		||||
.I hostent
 | 
			
		||||
will be
 | 
			
		||||
.BR NULL .
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_process (3),
 | 
			
		||||
.BR ares_gethostbyname (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Greg Hudson, MIT Information Systems
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										284
									
								
								ares/ares_gethostbyaddr.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										284
									
								
								ares/ares_gethostbyaddr.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,284 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_SYS_SOCKET_H
 | 
			
		||||
#  include <sys/socket.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETINET_IN_H
 | 
			
		||||
#  include <netinet/in.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETDB_H
 | 
			
		||||
#  include <netdb.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_INET_H
 | 
			
		||||
#  include <arpa/inet.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_H
 | 
			
		||||
#  include <arpa/nameser.h>
 | 
			
		||||
#else
 | 
			
		||||
#  include "nameser.h"
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
 | 
			
		||||
#  include <arpa/nameser_compat.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "inet_net_pton.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
#ifdef WATT32
 | 
			
		||||
#undef WIN32
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
struct addr_query {
 | 
			
		||||
  /* Arguments passed to ares_gethostbyaddr() */
 | 
			
		||||
  ares_channel channel;
 | 
			
		||||
  struct ares_addr addr;
 | 
			
		||||
  ares_host_callback callback;
 | 
			
		||||
  void *arg;
 | 
			
		||||
 | 
			
		||||
  const char *remaining_lookups;
 | 
			
		||||
  int timeouts;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void next_lookup(struct addr_query *aquery);
 | 
			
		||||
static void addr_callback(void *arg, int status, int timeouts,
 | 
			
		||||
                          unsigned char *abuf, int alen);
 | 
			
		||||
static void end_aquery(struct addr_query *aquery, int status,
 | 
			
		||||
                       struct hostent *host);
 | 
			
		||||
static int file_lookup(struct ares_addr *addr, struct hostent **host);
 | 
			
		||||
static void ptr_rr_name(char *name, struct ares_addr *addr);
 | 
			
		||||
 | 
			
		||||
void ares_gethostbyaddr(ares_channel channel, const void *addr, int addrlen,
 | 
			
		||||
                        int family, ares_host_callback callback, void *arg)
 | 
			
		||||
{
 | 
			
		||||
  struct addr_query *aquery;
 | 
			
		||||
 | 
			
		||||
  if (family != AF_INET && family != AF_INET6)
 | 
			
		||||
    {
 | 
			
		||||
      callback(arg, ARES_ENOTIMP, 0, NULL);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if ((family == AF_INET && addrlen != sizeof(struct in_addr)) ||
 | 
			
		||||
      (family == AF_INET6 && addrlen != sizeof(struct in6_addr)))
 | 
			
		||||
    {
 | 
			
		||||
      callback(arg, ARES_ENOTIMP, 0, NULL);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  aquery = malloc(sizeof(struct addr_query));
 | 
			
		||||
  if (!aquery)
 | 
			
		||||
    {
 | 
			
		||||
      callback(arg, ARES_ENOMEM, 0, NULL);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
  aquery->channel = channel;
 | 
			
		||||
  if (family == AF_INET)
 | 
			
		||||
    memcpy(&aquery->addr.addrV4, addr, sizeof(struct in_addr));
 | 
			
		||||
  else
 | 
			
		||||
    memcpy(&aquery->addr.addrV6, addr, sizeof(struct in6_addr));
 | 
			
		||||
  aquery->addr.family = family;
 | 
			
		||||
  aquery->callback = callback;
 | 
			
		||||
  aquery->arg = arg;
 | 
			
		||||
  aquery->remaining_lookups = channel->lookups;
 | 
			
		||||
  aquery->timeouts = 0;
 | 
			
		||||
 | 
			
		||||
  next_lookup(aquery);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void next_lookup(struct addr_query *aquery)
 | 
			
		||||
{
 | 
			
		||||
  const char *p;
 | 
			
		||||
  char name[128];
 | 
			
		||||
  int status;
 | 
			
		||||
  struct hostent *host;
 | 
			
		||||
 | 
			
		||||
  for (p = aquery->remaining_lookups; *p; p++)
 | 
			
		||||
    {
 | 
			
		||||
      switch (*p)
 | 
			
		||||
        {
 | 
			
		||||
        case 'b':
 | 
			
		||||
          ptr_rr_name(name, &aquery->addr);
 | 
			
		||||
          aquery->remaining_lookups = p + 1;
 | 
			
		||||
          ares_query(aquery->channel, name, C_IN, T_PTR, addr_callback,
 | 
			
		||||
                     aquery);
 | 
			
		||||
          return;
 | 
			
		||||
        case 'f':
 | 
			
		||||
          status = file_lookup(&aquery->addr, &host);
 | 
			
		||||
 | 
			
		||||
          /* this status check below previously checked for !ARES_ENOTFOUND,
 | 
			
		||||
             but we should not assume that this single error code is the one
 | 
			
		||||
             that can occur, as that is in fact no longer the case */
 | 
			
		||||
          if (status == ARES_SUCCESS)
 | 
			
		||||
            {
 | 
			
		||||
              end_aquery(aquery, status, host);
 | 
			
		||||
              return;
 | 
			
		||||
            }
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  end_aquery(aquery, ARES_ENOTFOUND, NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void addr_callback(void *arg, int status, int timeouts,
 | 
			
		||||
                          unsigned char *abuf, int alen)
 | 
			
		||||
{
 | 
			
		||||
  struct addr_query *aquery = (struct addr_query *) arg;
 | 
			
		||||
  struct hostent *host;
 | 
			
		||||
 | 
			
		||||
  aquery->timeouts += timeouts;
 | 
			
		||||
  if (status == ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      if (aquery->addr.family == AF_INET)
 | 
			
		||||
        status = ares_parse_ptr_reply(abuf, alen, &aquery->addr.addrV4,
 | 
			
		||||
                                      sizeof(struct in_addr), AF_INET, &host);
 | 
			
		||||
      else
 | 
			
		||||
        status = ares_parse_ptr_reply(abuf, alen, &aquery->addr.addrV6,
 | 
			
		||||
                                      sizeof(struct in6_addr), AF_INET6, &host);
 | 
			
		||||
      end_aquery(aquery, status, host);
 | 
			
		||||
    }
 | 
			
		||||
  else if (status == ARES_EDESTRUCTION)
 | 
			
		||||
    end_aquery(aquery, status, NULL);
 | 
			
		||||
  else
 | 
			
		||||
    next_lookup(aquery);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void end_aquery(struct addr_query *aquery, int status,
 | 
			
		||||
                       struct hostent *host)
 | 
			
		||||
{
 | 
			
		||||
  aquery->callback(aquery->arg, status, aquery->timeouts, host);
 | 
			
		||||
  if (host)
 | 
			
		||||
    ares_free_hostent(host);
 | 
			
		||||
  free(aquery);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int file_lookup(struct ares_addr *addr, struct hostent **host)
 | 
			
		||||
{
 | 
			
		||||
  FILE *fp;
 | 
			
		||||
  int status;
 | 
			
		||||
  int error;
 | 
			
		||||
 | 
			
		||||
#ifdef WIN32
 | 
			
		||||
  char PATH_HOSTS[MAX_PATH];
 | 
			
		||||
  if (IS_NT()) {
 | 
			
		||||
    char tmp[MAX_PATH];
 | 
			
		||||
    HKEY hkeyHosts;
 | 
			
		||||
 | 
			
		||||
    if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ, &hkeyHosts)
 | 
			
		||||
        == ERROR_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      DWORD dwLength = MAX_PATH;
 | 
			
		||||
      RegQueryValueEx(hkeyHosts, DATABASEPATH, NULL, NULL, (LPBYTE)tmp,
 | 
			
		||||
                      &dwLength);
 | 
			
		||||
      ExpandEnvironmentStrings(tmp, PATH_HOSTS, MAX_PATH);
 | 
			
		||||
      RegCloseKey(hkeyHosts);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
    GetWindowsDirectory(PATH_HOSTS, MAX_PATH);
 | 
			
		||||
 | 
			
		||||
  strcat(PATH_HOSTS, WIN_PATH_HOSTS);
 | 
			
		||||
 | 
			
		||||
#elif defined(WATT32)
 | 
			
		||||
  extern const char *_w32_GetHostsFile (void);
 | 
			
		||||
  const char *PATH_HOSTS = _w32_GetHostsFile();
 | 
			
		||||
 | 
			
		||||
  if (!PATH_HOSTS)
 | 
			
		||||
    return ARES_ENOTFOUND;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  fp = fopen(PATH_HOSTS, "r");
 | 
			
		||||
  if (!fp)
 | 
			
		||||
    {
 | 
			
		||||
      error = ERRNO;
 | 
			
		||||
      switch(error)
 | 
			
		||||
        {
 | 
			
		||||
        case ENOENT:
 | 
			
		||||
        case ESRCH:
 | 
			
		||||
          return ARES_ENOTFOUND;
 | 
			
		||||
        default:
 | 
			
		||||
          DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n",
 | 
			
		||||
                         error, strerror(error)));
 | 
			
		||||
          DEBUGF(fprintf(stderr, "Error opening file: %s\n",
 | 
			
		||||
                         PATH_HOSTS));
 | 
			
		||||
          *host = NULL;
 | 
			
		||||
          return ARES_EFILE;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  while ((status = ares__get_hostent(fp, addr->family, host)) == ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      if (addr->family != (*host)->h_addrtype)
 | 
			
		||||
        {
 | 
			
		||||
          ares_free_hostent(*host);
 | 
			
		||||
          continue;
 | 
			
		||||
        }
 | 
			
		||||
      if (addr->family == AF_INET)
 | 
			
		||||
        {
 | 
			
		||||
          if (memcmp((*host)->h_addr, &addr->addrV4, sizeof(struct in_addr)) == 0)
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
      else if (addr->family == AF_INET6)
 | 
			
		||||
        {
 | 
			
		||||
          if (memcmp((*host)->h_addr, &addr->addrV6, sizeof(struct in6_addr)) == 0)
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
      ares_free_hostent(*host);
 | 
			
		||||
    }
 | 
			
		||||
  fclose(fp);
 | 
			
		||||
  if (status == ARES_EOF)
 | 
			
		||||
    status = ARES_ENOTFOUND;
 | 
			
		||||
  if (status != ARES_SUCCESS)
 | 
			
		||||
    *host = NULL;
 | 
			
		||||
  return status;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void ptr_rr_name(char *name, struct ares_addr *addr)
 | 
			
		||||
{
 | 
			
		||||
  if (addr->family == AF_INET)
 | 
			
		||||
    {
 | 
			
		||||
       unsigned long laddr = ntohl(addr->addrV4.s_addr);
 | 
			
		||||
       int a1 = (int)((laddr >> 24) & 0xff);
 | 
			
		||||
       int a2 = (int)((laddr >> 16) & 0xff);
 | 
			
		||||
       int a3 = (int)((laddr >> 8) & 0xff);
 | 
			
		||||
       int a4 = (int)(laddr & 0xff);
 | 
			
		||||
       sprintf(name, "%d.%d.%d.%d.in-addr.arpa", a4, a3, a2, a1);
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
       unsigned char *bytes = (unsigned char *)&addr->addrV6.s6_addr;
 | 
			
		||||
       /* There are too many arguments to do this in one line using
 | 
			
		||||
	* minimally C89-compliant compilers */
 | 
			
		||||
       sprintf(name,
 | 
			
		||||
                "%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.",
 | 
			
		||||
                bytes[15]&0xf, bytes[15] >> 4, bytes[14]&0xf, bytes[14] >> 4,
 | 
			
		||||
                bytes[13]&0xf, bytes[13] >> 4, bytes[12]&0xf, bytes[12] >> 4,
 | 
			
		||||
                bytes[11]&0xf, bytes[11] >> 4, bytes[10]&0xf, bytes[10] >> 4,
 | 
			
		||||
                bytes[9]&0xf, bytes[9] >> 4, bytes[8]&0xf, bytes[8] >> 4);
 | 
			
		||||
       sprintf(name+strlen(name),
 | 
			
		||||
                "%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.ip6.arpa",
 | 
			
		||||
                bytes[7]&0xf, bytes[7] >> 4, bytes[6]&0xf, bytes[6] >> 4,
 | 
			
		||||
                bytes[5]&0xf, bytes[5] >> 4, bytes[4]&0xf, bytes[4] >> 4,
 | 
			
		||||
                bytes[3]&0xf, bytes[3] >> 4, bytes[2]&0xf, bytes[2] >> 4,
 | 
			
		||||
                bytes[1]&0xf, bytes[1] >> 4, bytes[0]&0xf, bytes[0] >> 4);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										106
									
								
								ares/ares_gethostbyname.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								ares/ares_gethostbyname.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,106 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_GETHOSTBYNAME 3 "25 July 1998"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_gethostbyname \- Initiate a host query by name
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B typedef void (*ares_host_callback)(void *\fIarg\fP, int \fIstatus\fP,
 | 
			
		||||
.B	int \fItimeouts\fP, struct hostent *\fIhostent\fP)
 | 
			
		||||
.PP
 | 
			
		||||
.B void ares_gethostbyname(ares_channel \fIchannel\fP, const char *\fIname\fP,
 | 
			
		||||
.B 	int \fIfamily\fP, ares_host_callback \fIcallback\fP, void *\fIarg\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_gethostbyname
 | 
			
		||||
function initiates a host query by name on the name service channel
 | 
			
		||||
identified by
 | 
			
		||||
.IR channel .
 | 
			
		||||
The parameter
 | 
			
		||||
.I name
 | 
			
		||||
gives the hostname as a NUL-terminated C string, and
 | 
			
		||||
.I family
 | 
			
		||||
gives the desired type of address for the resulting host entry.  When the
 | 
			
		||||
query is complete or has failed, the ares library will invoke \fIcallback\fP.
 | 
			
		||||
Completion or failure of the query may happen immediately, or may happen
 | 
			
		||||
during a later call to \fIares_process(3)\fP, \fIares_destroy(3)\fP or
 | 
			
		||||
\fIares_cancel(3)\fP.
 | 
			
		||||
.PP
 | 
			
		||||
The callback argument
 | 
			
		||||
.I arg
 | 
			
		||||
is copied from the
 | 
			
		||||
.B ares_gethostbyname
 | 
			
		||||
argument
 | 
			
		||||
.IR arg .
 | 
			
		||||
The callback argument
 | 
			
		||||
.I status
 | 
			
		||||
indicates whether the query succeeded and, if not, how it failed.  It
 | 
			
		||||
may have any of the following values:
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_SUCCESS
 | 
			
		||||
The host lookup completed successfully.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ENOTIMP
 | 
			
		||||
The ares library does not know how to find addresses of type
 | 
			
		||||
.IR family .
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_EBADNAME
 | 
			
		||||
The hostname
 | 
			
		||||
.B name
 | 
			
		||||
is composed entirely of numbers and periods, but is not a valid
 | 
			
		||||
representation of an Internet address.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ENOTFOUND
 | 
			
		||||
The address
 | 
			
		||||
.I addr
 | 
			
		||||
was not found.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ENOMEM
 | 
			
		||||
Memory was exhausted.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_EDESTRUCTION
 | 
			
		||||
The name service channel
 | 
			
		||||
.I channel
 | 
			
		||||
is being destroyed; the query will not be completed.
 | 
			
		||||
.PP
 | 
			
		||||
The callback argument
 | 
			
		||||
.I timeouts
 | 
			
		||||
reports how many times a query timed out during the execution of the
 | 
			
		||||
given request.
 | 
			
		||||
.PP
 | 
			
		||||
On successful completion of the query, the callback argument
 | 
			
		||||
.I hostent
 | 
			
		||||
points to a
 | 
			
		||||
.B struct hostent
 | 
			
		||||
containing the name of the host returned by the query.  The callback
 | 
			
		||||
need not and should not attempt to free the memory pointed to by
 | 
			
		||||
.IR hostent ;
 | 
			
		||||
the ares library will free it when the callback returns.  If the query
 | 
			
		||||
did not complete successfully,
 | 
			
		||||
.I hostent
 | 
			
		||||
will be
 | 
			
		||||
.BR NULL .
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_process (3),
 | 
			
		||||
.BR ares_gethostbyaddr (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Greg Hudson, MIT Information Systems
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										492
									
								
								ares/ares_gethostbyname.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										492
									
								
								ares/ares_gethostbyname.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,492 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_SYS_SOCKET_H
 | 
			
		||||
#  include <sys/socket.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETINET_IN_H
 | 
			
		||||
#  include <netinet/in.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETDB_H
 | 
			
		||||
#  include <netdb.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_INET_H
 | 
			
		||||
#  include <arpa/inet.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_H
 | 
			
		||||
#  include <arpa/nameser.h>
 | 
			
		||||
#else
 | 
			
		||||
#  include "nameser.h"
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
 | 
			
		||||
#  include <arpa/nameser_compat.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <ctype.h>
 | 
			
		||||
#ifdef HAVE_STRINGS_H
 | 
			
		||||
#include <strings.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "inet_net_pton.h"
 | 
			
		||||
#include "bitncmp.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
#ifdef WATT32
 | 
			
		||||
#undef WIN32
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
struct host_query {
 | 
			
		||||
  /* Arguments passed to ares_gethostbyname() */
 | 
			
		||||
  ares_channel channel;
 | 
			
		||||
  char *name;
 | 
			
		||||
  ares_host_callback callback;
 | 
			
		||||
  void *arg;
 | 
			
		||||
  int family;
 | 
			
		||||
  const char *remaining_lookups;
 | 
			
		||||
  int timeouts;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void next_lookup(struct host_query *hquery, int status_code);
 | 
			
		||||
static void host_callback(void *arg, int status, int timeouts,
 | 
			
		||||
                          unsigned char *abuf, int alen);
 | 
			
		||||
static void end_hquery(struct host_query *hquery, int status,
 | 
			
		||||
                       struct hostent *host);
 | 
			
		||||
static int fake_hostent(const char *name, int family, ares_host_callback callback,
 | 
			
		||||
                        void *arg);
 | 
			
		||||
static int file_lookup(const char *name, int family, struct hostent **host);
 | 
			
		||||
static void sort_addresses(struct hostent *host, struct apattern *sortlist,
 | 
			
		||||
                           int nsort);
 | 
			
		||||
static void sort6_addresses(struct hostent *host, struct apattern *sortlist,
 | 
			
		||||
                           int nsort);
 | 
			
		||||
static int get_address_index(struct in_addr *addr, struct apattern *sortlist,
 | 
			
		||||
                             int nsort);
 | 
			
		||||
static int get6_address_index(struct in6_addr *addr, struct apattern *sortlist,
 | 
			
		||||
                             int nsort);
 | 
			
		||||
 | 
			
		||||
void ares_gethostbyname(ares_channel channel, const char *name, int family,
 | 
			
		||||
                        ares_host_callback callback, void *arg)
 | 
			
		||||
{
 | 
			
		||||
  struct host_query *hquery;
 | 
			
		||||
 | 
			
		||||
  /* Right now we only know how to look up Internet addresses. */
 | 
			
		||||
  if (family != AF_INET && family != AF_INET6)
 | 
			
		||||
    {
 | 
			
		||||
      callback(arg, ARES_ENOTIMP, 0, NULL);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (fake_hostent(name, family, callback, arg))
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  /* Allocate and fill in the host query structure. */
 | 
			
		||||
  hquery = malloc(sizeof(struct host_query));
 | 
			
		||||
  if (!hquery)
 | 
			
		||||
    {
 | 
			
		||||
      callback(arg, ARES_ENOMEM, 0, NULL);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
  hquery->channel = channel;
 | 
			
		||||
  hquery->name = strdup(name);
 | 
			
		||||
  hquery->family = family;
 | 
			
		||||
  if (!hquery->name)
 | 
			
		||||
    {
 | 
			
		||||
      free(hquery);
 | 
			
		||||
      callback(arg, ARES_ENOMEM, 0, NULL);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
  hquery->callback = callback;
 | 
			
		||||
  hquery->arg = arg;
 | 
			
		||||
  hquery->remaining_lookups = channel->lookups;
 | 
			
		||||
  hquery->timeouts = 0;
 | 
			
		||||
 | 
			
		||||
  /* Start performing lookups according to channel->lookups. */
 | 
			
		||||
  next_lookup(hquery, ARES_ECONNREFUSED /* initial error code */);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void next_lookup(struct host_query *hquery, int status_code)
 | 
			
		||||
{
 | 
			
		||||
  const char *p;
 | 
			
		||||
  struct hostent *host;
 | 
			
		||||
  int status = status_code;
 | 
			
		||||
 | 
			
		||||
  for (p = hquery->remaining_lookups; *p; p++)
 | 
			
		||||
    {
 | 
			
		||||
      switch (*p)
 | 
			
		||||
        {
 | 
			
		||||
        case 'b':
 | 
			
		||||
          /* DNS lookup */
 | 
			
		||||
          hquery->remaining_lookups = p + 1;
 | 
			
		||||
          if (hquery->family == AF_INET6)
 | 
			
		||||
            ares_search(hquery->channel, hquery->name, C_IN, T_AAAA,
 | 
			
		||||
                        host_callback, hquery);
 | 
			
		||||
          else
 | 
			
		||||
            ares_search(hquery->channel, hquery->name, C_IN, T_A, host_callback,
 | 
			
		||||
                        hquery);
 | 
			
		||||
          return;
 | 
			
		||||
 | 
			
		||||
        case 'f':
 | 
			
		||||
          /* Host file lookup */
 | 
			
		||||
          status = file_lookup(hquery->name, hquery->family, &host);
 | 
			
		||||
 | 
			
		||||
          /* this status check below previously checked for !ARES_ENOTFOUND,
 | 
			
		||||
             but we should not assume that this single error code is the one
 | 
			
		||||
             that can occur, as that is in fact no longer the case */
 | 
			
		||||
          if (status == ARES_SUCCESS)
 | 
			
		||||
            {
 | 
			
		||||
              end_hquery(hquery, status, host);
 | 
			
		||||
              return;
 | 
			
		||||
            }
 | 
			
		||||
          status = status_code;   /* Use original status code */
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  end_hquery(hquery, status, NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void host_callback(void *arg, int status, int timeouts,
 | 
			
		||||
                          unsigned char *abuf, int alen)
 | 
			
		||||
{
 | 
			
		||||
  struct host_query *hquery = (struct host_query *) arg;
 | 
			
		||||
  ares_channel channel = hquery->channel;
 | 
			
		||||
  struct hostent *host = NULL;
 | 
			
		||||
 | 
			
		||||
  hquery->timeouts += timeouts;
 | 
			
		||||
  if (status == ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      if (hquery->family == AF_INET)
 | 
			
		||||
        {
 | 
			
		||||
          status = ares_parse_a_reply(abuf, alen, &host, NULL, NULL);
 | 
			
		||||
          if (host && channel->nsort)
 | 
			
		||||
            sort_addresses(host, channel->sortlist, channel->nsort);
 | 
			
		||||
        }
 | 
			
		||||
      else if (hquery->family == AF_INET6)
 | 
			
		||||
        {
 | 
			
		||||
          status = ares_parse_aaaa_reply(abuf, alen, &host, NULL, NULL);
 | 
			
		||||
          if (status == ARES_ENODATA)
 | 
			
		||||
            {
 | 
			
		||||
              /* The query returned something (e.g. CNAME) but there were no
 | 
			
		||||
                 AAAA records.  Try looking up A instead.  */
 | 
			
		||||
              hquery->family = AF_INET;
 | 
			
		||||
              ares_search(hquery->channel, hquery->name, C_IN, T_A, host_callback,
 | 
			
		||||
                          hquery);
 | 
			
		||||
              return;
 | 
			
		||||
            }
 | 
			
		||||
          if (host && channel->nsort)
 | 
			
		||||
            sort6_addresses(host, channel->sortlist, channel->nsort);
 | 
			
		||||
        }
 | 
			
		||||
      end_hquery(hquery, status, host);
 | 
			
		||||
    }
 | 
			
		||||
  else if (status == ARES_ENODATA && hquery->family == AF_INET6)
 | 
			
		||||
    {
 | 
			
		||||
      /* There was no AAAA. Now lookup an A */
 | 
			
		||||
      hquery->family = AF_INET;
 | 
			
		||||
      ares_search(hquery->channel, hquery->name, C_IN, T_A, host_callback,
 | 
			
		||||
                  hquery);
 | 
			
		||||
    }
 | 
			
		||||
  else if (status == ARES_EDESTRUCTION)
 | 
			
		||||
    end_hquery(hquery, status, NULL);
 | 
			
		||||
  else
 | 
			
		||||
    next_lookup(hquery, status);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void end_hquery(struct host_query *hquery, int status,
 | 
			
		||||
                       struct hostent *host)
 | 
			
		||||
{
 | 
			
		||||
  hquery->callback(hquery->arg, status, hquery->timeouts, host);
 | 
			
		||||
  if (host)
 | 
			
		||||
    ares_free_hostent(host);
 | 
			
		||||
  free(hquery->name);
 | 
			
		||||
  free(hquery);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* If the name looks like an IP address, fake up a host entry, end the
 | 
			
		||||
 * query immediately, and return true.  Otherwise return false.
 | 
			
		||||
 */
 | 
			
		||||
static int fake_hostent(const char *name, int family, ares_host_callback callback,
 | 
			
		||||
                        void *arg)
 | 
			
		||||
{
 | 
			
		||||
  struct hostent hostent;
 | 
			
		||||
  char *aliases[1] = { NULL };
 | 
			
		||||
  char *addrs[2];
 | 
			
		||||
  int result = 0;
 | 
			
		||||
  struct in_addr in;
 | 
			
		||||
  struct in6_addr in6;
 | 
			
		||||
 | 
			
		||||
  if (family == AF_INET)
 | 
			
		||||
    {
 | 
			
		||||
      /* It only looks like an IP address if it's all numbers and dots. */
 | 
			
		||||
      int numdots = 0;
 | 
			
		||||
      const char *p;
 | 
			
		||||
      for (p = name; *p; p++)
 | 
			
		||||
        {
 | 
			
		||||
          if (!ISDIGIT(*p) && *p != '.') {
 | 
			
		||||
            return 0;
 | 
			
		||||
          } else if (*p == '.') {
 | 
			
		||||
            numdots++;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      /* if we don't have 3 dots, it is illegal
 | 
			
		||||
       * (although inet_addr doesn't think so).
 | 
			
		||||
       */
 | 
			
		||||
      if (numdots != 3)
 | 
			
		||||
        result = 0;
 | 
			
		||||
      else
 | 
			
		||||
        result = ((in.s_addr = inet_addr(name)) == INADDR_NONE ? 0 : 1);
 | 
			
		||||
    }
 | 
			
		||||
  else if (family == AF_INET6)
 | 
			
		||||
    result = (ares_inet_pton(AF_INET6, name, &in6) < 1 ? 0 : 1);
 | 
			
		||||
 | 
			
		||||
  if (!result)
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  if (family == AF_INET)
 | 
			
		||||
    {
 | 
			
		||||
      hostent.h_length = sizeof(struct in_addr);
 | 
			
		||||
      addrs[0] = (char *)∈
 | 
			
		||||
    }
 | 
			
		||||
  else if (family == AF_INET6)
 | 
			
		||||
    {
 | 
			
		||||
      hostent.h_length = sizeof(struct in6_addr);
 | 
			
		||||
      addrs[0] = (char *)&in6;
 | 
			
		||||
    }
 | 
			
		||||
  /* Duplicate the name, to avoid a constness violation. */
 | 
			
		||||
  hostent.h_name = strdup(name);
 | 
			
		||||
  if (!hostent.h_name)
 | 
			
		||||
    {
 | 
			
		||||
      callback(arg, ARES_ENOMEM, 0, NULL);
 | 
			
		||||
      return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Fill in the rest of the host structure and terminate the query. */
 | 
			
		||||
  addrs[1] = NULL;
 | 
			
		||||
  hostent.h_aliases = aliases;
 | 
			
		||||
  hostent.h_addrtype = family;
 | 
			
		||||
  hostent.h_addr_list = addrs;
 | 
			
		||||
  callback(arg, ARES_SUCCESS, 0, &hostent);
 | 
			
		||||
 | 
			
		||||
  free((char *)(hostent.h_name));
 | 
			
		||||
  return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* This is an API method */
 | 
			
		||||
int ares_gethostbyname_file(ares_channel channel, const char *name,
 | 
			
		||||
                            int family, struct hostent **host)
 | 
			
		||||
{
 | 
			
		||||
  int result;
 | 
			
		||||
 | 
			
		||||
  /* We only take the channel to ensure that ares_init() been called. */
 | 
			
		||||
  if(channel == NULL)
 | 
			
		||||
    {
 | 
			
		||||
      /* Anything will do, really.  This seems fine, and is consistent with
 | 
			
		||||
         other error cases. */
 | 
			
		||||
      *host = NULL;
 | 
			
		||||
      return ARES_ENOTFOUND;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Just chain to the internal implementation we use here; it's exactly
 | 
			
		||||
   * what we want.
 | 
			
		||||
   */
 | 
			
		||||
  result = file_lookup(name, family, host);
 | 
			
		||||
  if(result != ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      /* We guarantee a NULL hostent on failure. */
 | 
			
		||||
      *host = NULL;
 | 
			
		||||
    }
 | 
			
		||||
  return result;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int file_lookup(const char *name, int family, struct hostent **host)
 | 
			
		||||
{
 | 
			
		||||
  FILE *fp;
 | 
			
		||||
  char **alias;
 | 
			
		||||
  int status;
 | 
			
		||||
  int error;
 | 
			
		||||
 | 
			
		||||
#ifdef WIN32
 | 
			
		||||
  char PATH_HOSTS[MAX_PATH];
 | 
			
		||||
  if (IS_NT()) {
 | 
			
		||||
    char tmp[MAX_PATH];
 | 
			
		||||
    HKEY hkeyHosts;
 | 
			
		||||
 | 
			
		||||
    if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ, &hkeyHosts)
 | 
			
		||||
        == ERROR_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      DWORD dwLength = MAX_PATH;
 | 
			
		||||
      RegQueryValueEx(hkeyHosts, DATABASEPATH, NULL, NULL, (LPBYTE)tmp,
 | 
			
		||||
                      &dwLength);
 | 
			
		||||
      ExpandEnvironmentStrings(tmp, PATH_HOSTS, MAX_PATH);
 | 
			
		||||
      RegCloseKey(hkeyHosts);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
    GetWindowsDirectory(PATH_HOSTS, MAX_PATH);
 | 
			
		||||
 | 
			
		||||
  strcat(PATH_HOSTS, WIN_PATH_HOSTS);
 | 
			
		||||
 | 
			
		||||
#elif defined(WATT32)
 | 
			
		||||
  extern const char *_w32_GetHostsFile (void);
 | 
			
		||||
  const char *PATH_HOSTS = _w32_GetHostsFile();
 | 
			
		||||
 | 
			
		||||
  if (!PATH_HOSTS)
 | 
			
		||||
    return ARES_ENOTFOUND;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  fp = fopen(PATH_HOSTS, "r");
 | 
			
		||||
  if (!fp)
 | 
			
		||||
    {
 | 
			
		||||
      error = ERRNO;
 | 
			
		||||
      switch(error)
 | 
			
		||||
        {
 | 
			
		||||
        case ENOENT:
 | 
			
		||||
        case ESRCH:
 | 
			
		||||
          return ARES_ENOTFOUND;
 | 
			
		||||
        default:
 | 
			
		||||
          DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n",
 | 
			
		||||
                         error, strerror(error)));
 | 
			
		||||
          DEBUGF(fprintf(stderr, "Error opening file: %s\n",
 | 
			
		||||
                         PATH_HOSTS));
 | 
			
		||||
          *host = NULL;
 | 
			
		||||
          return ARES_EFILE;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  while ((status = ares__get_hostent(fp, family, host)) == ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      if (strcasecmp((*host)->h_name, name) == 0)
 | 
			
		||||
        break;
 | 
			
		||||
      for (alias = (*host)->h_aliases; *alias; alias++)
 | 
			
		||||
        {
 | 
			
		||||
          if (strcasecmp(*alias, name) == 0)
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
      if (*alias)
 | 
			
		||||
        break;
 | 
			
		||||
      ares_free_hostent(*host);
 | 
			
		||||
    }
 | 
			
		||||
  fclose(fp);
 | 
			
		||||
  if (status == ARES_EOF)
 | 
			
		||||
    status = ARES_ENOTFOUND;
 | 
			
		||||
  if (status != ARES_SUCCESS)
 | 
			
		||||
    *host = NULL;
 | 
			
		||||
  return status;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void sort_addresses(struct hostent *host, struct apattern *sortlist,
 | 
			
		||||
                           int nsort)
 | 
			
		||||
{
 | 
			
		||||
  struct in_addr a1, a2;
 | 
			
		||||
  int i1, i2, ind1, ind2;
 | 
			
		||||
 | 
			
		||||
  /* This is a simple insertion sort, not optimized at all.  i1 walks
 | 
			
		||||
   * through the address list, with the loop invariant that everything
 | 
			
		||||
   * to the left of i1 is sorted.  In the loop body, the value at i1 is moved
 | 
			
		||||
   * back through the list (via i2) until it is in sorted order.
 | 
			
		||||
   */
 | 
			
		||||
  for (i1 = 0; host->h_addr_list[i1]; i1++)
 | 
			
		||||
    {
 | 
			
		||||
      memcpy(&a1, host->h_addr_list[i1], sizeof(struct in_addr));
 | 
			
		||||
      ind1 = get_address_index(&a1, sortlist, nsort);
 | 
			
		||||
      for (i2 = i1 - 1; i2 >= 0; i2--)
 | 
			
		||||
        {
 | 
			
		||||
          memcpy(&a2, host->h_addr_list[i2], sizeof(struct in_addr));
 | 
			
		||||
          ind2 = get_address_index(&a2, sortlist, nsort);
 | 
			
		||||
          if (ind2 <= ind1)
 | 
			
		||||
            break;
 | 
			
		||||
          memcpy(host->h_addr_list[i2 + 1], &a2, sizeof(struct in_addr));
 | 
			
		||||
        }
 | 
			
		||||
      memcpy(host->h_addr_list[i2 + 1], &a1, sizeof(struct in_addr));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Find the first entry in sortlist which matches addr.  Return nsort
 | 
			
		||||
 * if none of them match.
 | 
			
		||||
 */
 | 
			
		||||
static int get_address_index(struct in_addr *addr, struct apattern *sortlist,
 | 
			
		||||
                             int nsort)
 | 
			
		||||
{
 | 
			
		||||
  int i;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < nsort; i++)
 | 
			
		||||
    {
 | 
			
		||||
      if (sortlist[i].family != AF_INET)
 | 
			
		||||
        continue;
 | 
			
		||||
      if (sortlist[i].type == PATTERN_MASK)
 | 
			
		||||
        {
 | 
			
		||||
          if ((addr->s_addr & sortlist[i].mask.addr4.s_addr)
 | 
			
		||||
              == sortlist[i].addrV4.s_addr)
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
      else
 | 
			
		||||
        {
 | 
			
		||||
          if (!ares_bitncmp(&addr->s_addr, &sortlist[i].addrV4.s_addr,
 | 
			
		||||
                            sortlist[i].mask.bits))
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  return i;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void sort6_addresses(struct hostent *host, struct apattern *sortlist,
 | 
			
		||||
                           int nsort)
 | 
			
		||||
{
 | 
			
		||||
  struct in6_addr a1, a2;
 | 
			
		||||
  int i1, i2, ind1, ind2;
 | 
			
		||||
 | 
			
		||||
  /* This is a simple insertion sort, not optimized at all.  i1 walks
 | 
			
		||||
   * through the address list, with the loop invariant that everything
 | 
			
		||||
   * to the left of i1 is sorted.  In the loop body, the value at i1 is moved
 | 
			
		||||
   * back through the list (via i2) until it is in sorted order.
 | 
			
		||||
   */
 | 
			
		||||
  for (i1 = 0; host->h_addr_list[i1]; i1++)
 | 
			
		||||
    {
 | 
			
		||||
      memcpy(&a1, host->h_addr_list[i1], sizeof(struct in6_addr));
 | 
			
		||||
      ind1 = get6_address_index(&a1, sortlist, nsort);
 | 
			
		||||
      for (i2 = i1 - 1; i2 >= 0; i2--)
 | 
			
		||||
        {
 | 
			
		||||
          memcpy(&a2, host->h_addr_list[i2], sizeof(struct in6_addr));
 | 
			
		||||
          ind2 = get6_address_index(&a2, sortlist, nsort);
 | 
			
		||||
          if (ind2 <= ind1)
 | 
			
		||||
            break;
 | 
			
		||||
          memcpy(host->h_addr_list[i2 + 1], &a2, sizeof(struct in6_addr));
 | 
			
		||||
        }
 | 
			
		||||
      memcpy(host->h_addr_list[i2 + 1], &a1, sizeof(struct in6_addr));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Find the first entry in sortlist which matches addr.  Return nsort
 | 
			
		||||
 * if none of them match.
 | 
			
		||||
 */
 | 
			
		||||
static int get6_address_index(struct in6_addr *addr, struct apattern *sortlist,
 | 
			
		||||
                             int nsort)
 | 
			
		||||
{
 | 
			
		||||
  int i;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < nsort; i++)
 | 
			
		||||
    {
 | 
			
		||||
      if (sortlist[i].family != AF_INET6)
 | 
			
		||||
        continue;
 | 
			
		||||
        if (!ares_bitncmp(&addr->s6_addr, &sortlist[i].addrV6.s6_addr, sortlist[i].mask.bits))
 | 
			
		||||
          break;
 | 
			
		||||
    }
 | 
			
		||||
  return i;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										84
									
								
								ares/ares_gethostbyname_file.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								ares/ares_gethostbyname_file.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,84 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_GETHOSTBYNAME 3 "25 July 1998"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_gethostbyname_file \- Lookup a name in the system's hosts file
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B void ares_gethostbyname_file(ares_channel \fIchannel\fP, const char *\fIname\fP,
 | 
			
		||||
.B 	int \fIfamily\fP, struct hostent **host)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_gethostbyname_file
 | 
			
		||||
function performs a host lookup by name against the system's hosts file (or equivalent local hostname database).  
 | 
			
		||||
The
 | 
			
		||||
.IR channel
 | 
			
		||||
parameter is required, but no asynchronous queries are performed.  Instead, the
 | 
			
		||||
lookup is done via the same mechanism used to perform 'f' lookups
 | 
			
		||||
(see the
 | 
			
		||||
.I lookups
 | 
			
		||||
options field in \fIares_init_options(3)\fP).
 | 
			
		||||
The parameter
 | 
			
		||||
.I name
 | 
			
		||||
gives the hostname as a NUL-terminated C string, and
 | 
			
		||||
.I family
 | 
			
		||||
gives the desired type of address for the resulting host entry.  
 | 
			
		||||
.PP
 | 
			
		||||
The return value indicates whether the query succeeded and, if not, how it
 | 
			
		||||
failed.  It may have any of the following values:
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_SUCCESS
 | 
			
		||||
The host lookup completed successfully and 
 | 
			
		||||
.I host
 | 
			
		||||
now points to the result (and must be freed with \fIares_free_hostent(3)\fP).
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ENOTFOUND
 | 
			
		||||
The hostname
 | 
			
		||||
.I name
 | 
			
		||||
was not found.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_EFILE
 | 
			
		||||
There was a file I/O error while performing the lookup.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ENOMEM
 | 
			
		||||
Memory was exhausted.
 | 
			
		||||
.PP
 | 
			
		||||
On successful completion of the query, the pointer pointed to by
 | 
			
		||||
.I host
 | 
			
		||||
points to a
 | 
			
		||||
.B struct hostent
 | 
			
		||||
containing the address of the host returned by the lookup.  The user must
 | 
			
		||||
free the memory pointed to by
 | 
			
		||||
.IR host
 | 
			
		||||
when finished with it by calling \fIares_free_hostent(3)\fP.  If the lookup did
 | 
			
		||||
not complete successfully, 
 | 
			
		||||
.I host
 | 
			
		||||
will be
 | 
			
		||||
.BR NULL .
 | 
			
		||||
.SH AVAILABILITY
 | 
			
		||||
Added in c-ares 1.5.4
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_gethostbyname (3),
 | 
			
		||||
.BR ares_free_hostent (3),
 | 
			
		||||
.BR ares_init_options (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Brad Spencer
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										150
									
								
								ares/ares_getnameinfo.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										150
									
								
								ares/ares_getnameinfo.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,150 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 2005 by Dominick Meglio.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_GETNAMEINFO 3 "16 May 2005"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_getnameinfo \- Address-to-nodename translation in protocol-independent manner
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B typedef void (*ares_nameinfo_callback)(void *\fIarg\fP, int \fIstatus\fP,
 | 
			
		||||
.B	int \fItimeouts\fP, char *\fInode\fP, char *\fIservice\fP)
 | 
			
		||||
.PP
 | 
			
		||||
.B void ares_getnameinfo(ares_channel \fIchannel\fP, const struct sockaddr *\fIsa\fP,
 | 
			
		||||
.B 	socklen_t \fIsalen\fP, int \fIflags\fP, ares_nameinfo_callback \fIcallback\fP,
 | 
			
		||||
.B 	void *\fIarg\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_getnameinfo
 | 
			
		||||
function is defined for protocol-independent address translation. The function
 | 
			
		||||
is a combination of \fIares_gethostbyaddr(3)\fP and \fIgetservbyport(3)\fP. The function will
 | 
			
		||||
translate the address either by executing a host query on the name service channel
 | 
			
		||||
identified by
 | 
			
		||||
.IR channel 
 | 
			
		||||
or it will attempt to resolve it locally if possible.
 | 
			
		||||
The parameters
 | 
			
		||||
.I sa
 | 
			
		||||
and
 | 
			
		||||
.I len
 | 
			
		||||
give the address as a sockaddr structure, and
 | 
			
		||||
.I flags
 | 
			
		||||
gives the options that the function will use.  Valid flags are listed below:
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_NI_NOFQDN
 | 
			
		||||
Only the nodename portion of the FQDN is returned for local hosts.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_NI_NUMERICHOST
 | 
			
		||||
The numeric form of the hostname is returned rather than the name.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_NI_NAMEREQD
 | 
			
		||||
An error is returned if the hostname cannot be found in the DNS.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_NI_NUMERICSERV
 | 
			
		||||
The numeric form of the service is returned rather than the name.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_NI_TCP
 | 
			
		||||
The service name is to be looked up for the TCP protocol.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_NI_UDP
 | 
			
		||||
The service name is to be looked up for the UDP protocol.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_NI_SCTP
 | 
			
		||||
The service name is to be looked up for the SCTP protocol.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_NI_DCCP
 | 
			
		||||
The service name is to be looked up for the DCCP protocol.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_NI_NUMERICSCOPE
 | 
			
		||||
The numeric form of the scope ID is returned rather than the name.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_NI_LOOKUPHOST
 | 
			
		||||
A hostname lookup is being requested.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_NI_LOOKUPSERVICE
 | 
			
		||||
A service name lookup is being requested.
 | 
			
		||||
.PP
 | 
			
		||||
When the query
 | 
			
		||||
is complete or has 
 | 
			
		||||
failed, the ares library will invoke \fIcallback\fP.  Completion or failure of 
 | 
			
		||||
the query may happen immediately, or may happen during a later call to
 | 
			
		||||
\fIares_process(3)\fP, \fIares_destroy(3)\fP or \fIares_cancel(3)\fP.
 | 
			
		||||
.PP
 | 
			
		||||
The callback argument
 | 
			
		||||
.I arg
 | 
			
		||||
is copied from the
 | 
			
		||||
.B ares_getnameinfo
 | 
			
		||||
argument
 | 
			
		||||
.IR arg .
 | 
			
		||||
The callback argument
 | 
			
		||||
.I status
 | 
			
		||||
indicates whether the query succeeded and, if not, how it failed.  It
 | 
			
		||||
may have any of the following values:
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_SUCCESS
 | 
			
		||||
The host lookup completed successfully.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ENOTIMP
 | 
			
		||||
The ares library does not know how to look up addresses of type
 | 
			
		||||
.IR family .
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ENOTFOUND
 | 
			
		||||
The address
 | 
			
		||||
.I addr
 | 
			
		||||
was not found.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ENOMEM
 | 
			
		||||
Memory was exhausted.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_EDESTRUCTION
 | 
			
		||||
The name service channel
 | 
			
		||||
.I channel
 | 
			
		||||
is being destroyed; the query will not be completed.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_EBADFLAGS
 | 
			
		||||
The
 | 
			
		||||
.I flags
 | 
			
		||||
parameter contains an illegal value.
 | 
			
		||||
.PP
 | 
			
		||||
The callback argument
 | 
			
		||||
.I timeouts
 | 
			
		||||
reports how many times a query timed out during the execution of the
 | 
			
		||||
given request.
 | 
			
		||||
.PP
 | 
			
		||||
On successful completion of the query, the callback argument
 | 
			
		||||
.I node
 | 
			
		||||
contains a string representing the hostname (assuming 
 | 
			
		||||
.B ARES_NI_LOOKUPHOST
 | 
			
		||||
was specified). Additionally, 
 | 
			
		||||
.I service
 | 
			
		||||
contains a string representing the service name (assuming
 | 
			
		||||
.B ARES_NI_LOOKUPSERVICE
 | 
			
		||||
was specified).
 | 
			
		||||
If the query did not complete successfully, or one of the values
 | 
			
		||||
was not requested, 
 | 
			
		||||
.I node
 | 
			
		||||
or
 | 
			
		||||
.I service
 | 
			
		||||
will be 
 | 
			
		||||
.BR NULL .
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_process (3),
 | 
			
		||||
.BR ares_getaddrinfo (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Dominick Meglio
 | 
			
		||||
.br
 | 
			
		||||
Copyright 2005 by Dominick Meglio.
 | 
			
		||||
							
								
								
									
										413
									
								
								ares/ares_getnameinfo.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										413
									
								
								ares/ares_getnameinfo.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,413 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 2005 by Dominick Meglio
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_GETSERVBYPORT_R
 | 
			
		||||
#  if !defined(GETSERVBYPORT_R_ARGS) || \
 | 
			
		||||
     (GETSERVBYPORT_R_ARGS < 4) || (GETSERVBYPORT_R_ARGS > 6)
 | 
			
		||||
#    error "you MUST specifiy a valid number of arguments for getservbyport_r"
 | 
			
		||||
#  endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_SYS_SOCKET_H
 | 
			
		||||
#  include <sys/socket.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETINET_IN_H
 | 
			
		||||
#  include <netinet/in.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETDB_H
 | 
			
		||||
#  include <netdb.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_INET_H
 | 
			
		||||
#  include <arpa/inet.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_H
 | 
			
		||||
#  include <arpa/nameser.h>
 | 
			
		||||
#else
 | 
			
		||||
#  include "nameser.h"
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
 | 
			
		||||
#  include <arpa/nameser_compat.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_NET_IF_H
 | 
			
		||||
#include <net/if.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_UNISTD_H
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_ipv6.h"
 | 
			
		||||
#include "inet_ntop.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
#ifdef WATT32
 | 
			
		||||
#undef WIN32
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
struct nameinfo_query {
 | 
			
		||||
  ares_nameinfo_callback callback;
 | 
			
		||||
  void *arg;
 | 
			
		||||
  union {
 | 
			
		||||
    struct sockaddr_in addr4;
 | 
			
		||||
    struct sockaddr_in6 addr6;
 | 
			
		||||
  } addr;
 | 
			
		||||
  int family;
 | 
			
		||||
  int flags;
 | 
			
		||||
  int timeouts;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
 | 
			
		||||
#define IPBUFSIZ 40+IF_NAMESIZE
 | 
			
		||||
#else
 | 
			
		||||
#define IPBUFSIZ 40
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static void nameinfo_callback(void *arg, int status, int timeouts, struct hostent *host);
 | 
			
		||||
static char *lookup_service(unsigned short port, int flags,
 | 
			
		||||
                            char *buf, size_t buflen);
 | 
			
		||||
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
 | 
			
		||||
static void append_scopeid(struct sockaddr_in6 *addr6, unsigned int scopeid,
 | 
			
		||||
                           char *buf, size_t buflen);
 | 
			
		||||
#endif
 | 
			
		||||
static char *ares_striendstr(const char *s1, const char *s2);
 | 
			
		||||
 | 
			
		||||
void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa, socklen_t salen,
 | 
			
		||||
                      int flags, ares_nameinfo_callback callback, void *arg)
 | 
			
		||||
{
 | 
			
		||||
  struct sockaddr_in *addr = NULL;
 | 
			
		||||
  struct sockaddr_in6 *addr6 = NULL;
 | 
			
		||||
  struct nameinfo_query *niquery;
 | 
			
		||||
 | 
			
		||||
  /* Verify the buffer size */
 | 
			
		||||
  if (salen == sizeof(struct sockaddr_in))
 | 
			
		||||
    addr = (struct sockaddr_in *)sa;
 | 
			
		||||
  else if (salen == sizeof(struct sockaddr_in6))
 | 
			
		||||
    addr6 = (struct sockaddr_in6 *)sa;
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      callback(arg, ARES_ENOTIMP, 0, NULL, NULL);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* If neither, assume they want a host */
 | 
			
		||||
  if (!(flags & ARES_NI_LOOKUPSERVICE) && !(flags & ARES_NI_LOOKUPHOST))
 | 
			
		||||
    flags |= ARES_NI_LOOKUPHOST;
 | 
			
		||||
 | 
			
		||||
  /* All they want is a service, no need for DNS */
 | 
			
		||||
  if ((flags & ARES_NI_LOOKUPSERVICE) && !(flags & ARES_NI_LOOKUPHOST))
 | 
			
		||||
    {
 | 
			
		||||
      char buf[33], *service;
 | 
			
		||||
      unsigned int port = 0;
 | 
			
		||||
 | 
			
		||||
      if (salen == sizeof(struct sockaddr_in))
 | 
			
		||||
        port = addr->sin_port;
 | 
			
		||||
      else
 | 
			
		||||
        port = addr6->sin6_port;
 | 
			
		||||
      service = lookup_service((unsigned short)(port & 0xffff),
 | 
			
		||||
                               flags, buf, sizeof(buf));
 | 
			
		||||
      callback(arg, ARES_SUCCESS, 0, NULL, service);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* They want a host lookup */
 | 
			
		||||
  if ((flags & ARES_NI_LOOKUPHOST))
 | 
			
		||||
    {
 | 
			
		||||
     /* A numeric host can be handled without DNS */
 | 
			
		||||
     if ((flags & ARES_NI_NUMERICHOST))
 | 
			
		||||
      {
 | 
			
		||||
        unsigned int port = 0;
 | 
			
		||||
        char ipbuf[IPBUFSIZ];
 | 
			
		||||
        char srvbuf[33];
 | 
			
		||||
        char *service = NULL;
 | 
			
		||||
        ipbuf[0] = 0;
 | 
			
		||||
 | 
			
		||||
        /* Specifying not to lookup a host, but then saying a host
 | 
			
		||||
         * is required has to be illegal.
 | 
			
		||||
         */
 | 
			
		||||
        if (flags & ARES_NI_NAMEREQD)
 | 
			
		||||
          {
 | 
			
		||||
            callback(arg, ARES_EBADFLAGS, 0, NULL, NULL);
 | 
			
		||||
            return;
 | 
			
		||||
          }
 | 
			
		||||
        if (salen == sizeof(struct sockaddr_in6))
 | 
			
		||||
          {
 | 
			
		||||
            ares_inet_ntop(AF_INET6, &addr6->sin6_addr, ipbuf, IPBUFSIZ);
 | 
			
		||||
            port = addr6->sin6_port;
 | 
			
		||||
            /* If the system supports scope IDs, use it */
 | 
			
		||||
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
 | 
			
		||||
            append_scopeid(addr6, flags, ipbuf, sizeof(ipbuf));
 | 
			
		||||
#endif
 | 
			
		||||
          }
 | 
			
		||||
        else
 | 
			
		||||
          {
 | 
			
		||||
            ares_inet_ntop(AF_INET, &addr->sin_addr, ipbuf, IPBUFSIZ);
 | 
			
		||||
            port = addr->sin_port;
 | 
			
		||||
          }
 | 
			
		||||
        /* They also want a service */
 | 
			
		||||
        if (flags & ARES_NI_LOOKUPSERVICE)
 | 
			
		||||
          service = lookup_service((unsigned short)(port & 0xffff),
 | 
			
		||||
                                   flags, srvbuf, sizeof(srvbuf));
 | 
			
		||||
        callback(arg, ARES_SUCCESS, 0, ipbuf, service);
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
    /* This is where a DNS lookup becomes necessary */
 | 
			
		||||
    else
 | 
			
		||||
      {
 | 
			
		||||
        niquery = malloc(sizeof(struct nameinfo_query));
 | 
			
		||||
        if (!niquery)
 | 
			
		||||
          {
 | 
			
		||||
            callback(arg, ARES_ENOMEM, 0, NULL, NULL);
 | 
			
		||||
            return;
 | 
			
		||||
          }
 | 
			
		||||
        niquery->callback = callback;
 | 
			
		||||
        niquery->arg = arg;
 | 
			
		||||
        niquery->flags = flags;
 | 
			
		||||
        niquery->timeouts = 0;
 | 
			
		||||
        if (sa->sa_family == AF_INET)
 | 
			
		||||
          {
 | 
			
		||||
            niquery->family = AF_INET;
 | 
			
		||||
            memcpy(&niquery->addr.addr4, addr, sizeof(addr));
 | 
			
		||||
            ares_gethostbyaddr(channel, &addr->sin_addr, sizeof(struct in_addr), AF_INET,
 | 
			
		||||
                               nameinfo_callback, niquery);
 | 
			
		||||
          }
 | 
			
		||||
        else
 | 
			
		||||
          {
 | 
			
		||||
            niquery->family = AF_INET6;
 | 
			
		||||
            memcpy(&niquery->addr.addr6, addr6, sizeof(addr6));
 | 
			
		||||
            ares_gethostbyaddr(channel, &addr6->sin6_addr, sizeof(struct in6_addr), AF_INET6,
 | 
			
		||||
                               nameinfo_callback, niquery);
 | 
			
		||||
          }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void nameinfo_callback(void *arg, int status, int timeouts, struct hostent *host)
 | 
			
		||||
{
 | 
			
		||||
  struct nameinfo_query *niquery = (struct nameinfo_query *) arg;
 | 
			
		||||
  char srvbuf[33];
 | 
			
		||||
  char *service = NULL;
 | 
			
		||||
 | 
			
		||||
  niquery->timeouts += timeouts;
 | 
			
		||||
  if (status == ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      /* They want a service too */
 | 
			
		||||
      if (niquery->flags & ARES_NI_LOOKUPSERVICE)
 | 
			
		||||
        {
 | 
			
		||||
          if (niquery->family == AF_INET)
 | 
			
		||||
            service = lookup_service(niquery->addr.addr4.sin_port,
 | 
			
		||||
                                     niquery->flags, srvbuf, sizeof(srvbuf));
 | 
			
		||||
          else
 | 
			
		||||
            service = lookup_service(niquery->addr.addr6.sin6_port,
 | 
			
		||||
                                     niquery->flags, srvbuf, sizeof(srvbuf));
 | 
			
		||||
        }
 | 
			
		||||
      /* NOFQDN means we have to strip off the domain name portion.
 | 
			
		||||
         We do this by determining our own domain name, then searching the string
 | 
			
		||||
         for this domain name and removing it.
 | 
			
		||||
       */
 | 
			
		||||
#ifdef HAVE_GETHOSTNAME
 | 
			
		||||
      if (niquery->flags & ARES_NI_NOFQDN)
 | 
			
		||||
        {
 | 
			
		||||
           char buf[255];
 | 
			
		||||
           char *domain;
 | 
			
		||||
           gethostname(buf, 255);
 | 
			
		||||
           if ((domain = strchr(buf, '.')))
 | 
			
		||||
             {
 | 
			
		||||
               char *end = ares_striendstr(host->h_name, domain);
 | 
			
		||||
               if (end)
 | 
			
		||||
                 *end = 0;
 | 
			
		||||
             }
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
      niquery->callback(niquery->arg, ARES_SUCCESS, niquery->timeouts, (char *)(host->h_name),
 | 
			
		||||
                        service);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
  /* We couldn't find the host, but it's OK, we can use the IP */
 | 
			
		||||
  else if (status == ARES_ENOTFOUND && !(niquery->flags & ARES_NI_NAMEREQD))
 | 
			
		||||
    {
 | 
			
		||||
      char ipbuf[IPBUFSIZ];
 | 
			
		||||
      if (niquery->family == AF_INET)
 | 
			
		||||
        ares_inet_ntop(AF_INET, &niquery->addr.addr4.sin_addr, ipbuf, IPBUFSIZ);
 | 
			
		||||
      else
 | 
			
		||||
        {
 | 
			
		||||
          ares_inet_ntop(AF_INET6, &niquery->addr.addr6.sin6_addr, ipbuf, IPBUFSIZ);
 | 
			
		||||
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
 | 
			
		||||
          append_scopeid(&niquery->addr.addr6, niquery->flags, ipbuf, sizeof(ipbuf));
 | 
			
		||||
#endif
 | 
			
		||||
        }
 | 
			
		||||
      /* They want a service too */
 | 
			
		||||
      if (niquery->flags & ARES_NI_LOOKUPSERVICE)
 | 
			
		||||
        {
 | 
			
		||||
          if (niquery->family == AF_INET)
 | 
			
		||||
            service = lookup_service(niquery->addr.addr4.sin_port,
 | 
			
		||||
                                     niquery->flags, srvbuf, sizeof(srvbuf));
 | 
			
		||||
          else
 | 
			
		||||
            service = lookup_service(niquery->addr.addr6.sin6_port,
 | 
			
		||||
                                     niquery->flags, srvbuf, sizeof(srvbuf));
 | 
			
		||||
        }
 | 
			
		||||
      niquery->callback(niquery->arg, ARES_SUCCESS, niquery->timeouts, ipbuf, service);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
  niquery->callback(niquery->arg, status, niquery->timeouts, NULL, NULL);
 | 
			
		||||
  free(niquery);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static char *lookup_service(unsigned short port, int flags,
 | 
			
		||||
                            char *buf, size_t buflen)
 | 
			
		||||
{
 | 
			
		||||
  const char *proto;
 | 
			
		||||
  struct servent *sep;
 | 
			
		||||
#ifdef HAVE_GETSERVBYPORT_R
 | 
			
		||||
  struct servent se;
 | 
			
		||||
#endif
 | 
			
		||||
  char tmpbuf[4096];
 | 
			
		||||
 | 
			
		||||
  if (port)
 | 
			
		||||
    {
 | 
			
		||||
      if (flags & ARES_NI_NUMERICSERV)
 | 
			
		||||
        sep = NULL;
 | 
			
		||||
      else
 | 
			
		||||
        {
 | 
			
		||||
          if (flags & ARES_NI_UDP)
 | 
			
		||||
            proto = "udp";
 | 
			
		||||
          else if (flags & ARES_NI_SCTP)
 | 
			
		||||
            proto = "sctp";
 | 
			
		||||
          else if (flags & ARES_NI_DCCP)
 | 
			
		||||
            proto = "dccp";
 | 
			
		||||
          else
 | 
			
		||||
            proto = "tcp";
 | 
			
		||||
#ifdef HAVE_GETSERVBYPORT_R
 | 
			
		||||
          sep = &se;
 | 
			
		||||
          memset(tmpbuf, 0, sizeof(tmpbuf));
 | 
			
		||||
#if GETSERVBYPORT_R_ARGS == 6
 | 
			
		||||
          if (getservbyport_r(port, proto, &se, (void *)tmpbuf, sizeof(tmpbuf), &sep) != 0)
 | 
			
		||||
            sep = NULL;
 | 
			
		||||
#elif GETSERVBYPORT_R_ARGS == 5
 | 
			
		||||
          sep = getservbyport_r(port, proto, &se, (void *)tmpbuf, sizeof(tmpbuf));
 | 
			
		||||
#elif GETSERVBYPORT_R_ARGS == 4
 | 
			
		||||
          if (getservbyport_r(port, proto, &se, (void *)tmpbuf) != 0)
 | 
			
		||||
            sep = NULL;
 | 
			
		||||
#else
 | 
			
		||||
          /* Lets just hope the OS uses TLS! */
 | 
			
		||||
          sep = getservbyport(port, proto);
 | 
			
		||||
#endif
 | 
			
		||||
#else
 | 
			
		||||
          /* Lets just hope the OS uses TLS! */
 | 
			
		||||
#if (defined(NETWARE) && !defined(__NOVELL_LIBC__))
 | 
			
		||||
          sep = getservbyport(port, (char*)proto);
 | 
			
		||||
#else
 | 
			
		||||
          sep = getservbyport(port, proto);
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
        }
 | 
			
		||||
      if (sep && sep->s_name)
 | 
			
		||||
        /* get service name */
 | 
			
		||||
        strcpy(tmpbuf, sep->s_name);
 | 
			
		||||
      else
 | 
			
		||||
        /* get port as a string */
 | 
			
		||||
        sprintf(tmpbuf, "%u", (unsigned int)ntohs(port));
 | 
			
		||||
      if (strlen(tmpbuf) < buflen)
 | 
			
		||||
        /* return it if buffer big enough */
 | 
			
		||||
        strcpy(buf, tmpbuf);
 | 
			
		||||
      else
 | 
			
		||||
        /* avoid reusing previous one */
 | 
			
		||||
        buf[0] = '\0';
 | 
			
		||||
      return buf;
 | 
			
		||||
    }
 | 
			
		||||
  buf[0] = '\0';
 | 
			
		||||
  return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
 | 
			
		||||
static void append_scopeid(struct sockaddr_in6 *addr6, unsigned int flags,
 | 
			
		||||
                           char *buf, size_t buflen)
 | 
			
		||||
{
 | 
			
		||||
#ifdef HAVE_IF_INDEXTONAME
 | 
			
		||||
  int is_ll, is_mcll;
 | 
			
		||||
#endif
 | 
			
		||||
  char fmt_u[] = "%u";
 | 
			
		||||
  char fmt_lu[] = "%lu";
 | 
			
		||||
  char tmpbuf[IF_NAMESIZE + 2];
 | 
			
		||||
  size_t bufl;
 | 
			
		||||
  char *fmt = (sizeof(addr6->sin6_scope_id) > sizeof(unsigned int))?fmt_lu:fmt_u;
 | 
			
		||||
 | 
			
		||||
  tmpbuf[0] = '%';
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_IF_INDEXTONAME
 | 
			
		||||
  is_ll = IN6_IS_ADDR_LINKLOCAL(&addr6->sin6_addr);
 | 
			
		||||
  is_mcll = IN6_IS_ADDR_MC_LINKLOCAL(&addr6->sin6_addr);
 | 
			
		||||
  if ((flags & ARES_NI_NUMERICSCOPE) ||
 | 
			
		||||
      (!is_ll && !is_mcll))
 | 
			
		||||
    {
 | 
			
		||||
       sprintf(&tmpbuf[1], fmt, addr6->sin6_scope_id);
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      if (if_indextoname(addr6->sin6_scope_id, &tmpbuf[1]) == NULL)
 | 
			
		||||
        sprintf(&tmpbuf[1], fmt, addr6->sin6_scope_id);
 | 
			
		||||
    }
 | 
			
		||||
#else
 | 
			
		||||
  sprintf(&tmpbuf[1], fmt, addr6->sin6_scope_id);
 | 
			
		||||
  (void) flags;
 | 
			
		||||
#endif
 | 
			
		||||
  tmpbuf[IF_NAMESIZE + 1] = '\0';
 | 
			
		||||
  bufl = strlen(buf);
 | 
			
		||||
 | 
			
		||||
  if(bufl + strlen(tmpbuf) < buflen)
 | 
			
		||||
    /* only append the scopeid string if it fits in the target buffer */
 | 
			
		||||
    strcpy(&buf[bufl], tmpbuf);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Determines if s1 ends with the string in s2 (case-insensitive) */
 | 
			
		||||
static char *ares_striendstr(const char *s1, const char *s2)
 | 
			
		||||
{
 | 
			
		||||
  const char *c1, *c2, *c1_begin;
 | 
			
		||||
  int lo1, lo2;
 | 
			
		||||
  size_t s1_len = strlen(s1), s2_len = strlen(s2);
 | 
			
		||||
 | 
			
		||||
  /* If the substr is longer than the full str, it can't match */
 | 
			
		||||
  if (s2_len > s1_len)
 | 
			
		||||
    return NULL;
 | 
			
		||||
 | 
			
		||||
  /* Jump to the end of s1 minus the length of s2 */
 | 
			
		||||
  c1_begin = s1+s1_len-s2_len;
 | 
			
		||||
  c1 = (const char *)c1_begin;
 | 
			
		||||
  c2 = s2;
 | 
			
		||||
  while (c2 < s2+s2_len)
 | 
			
		||||
    {
 | 
			
		||||
      lo1 = tolower(*c1);
 | 
			
		||||
      lo2 = tolower(*c2);
 | 
			
		||||
      if (lo1 != lo2)
 | 
			
		||||
        return NULL;
 | 
			
		||||
      else
 | 
			
		||||
        {
 | 
			
		||||
          c1++;
 | 
			
		||||
          c2++;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  if (c2 == c1 && c2 == NULL)
 | 
			
		||||
    return (char *)c1_begin;
 | 
			
		||||
  return NULL;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										123
									
								
								ares/ares_getopt.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										123
									
								
								ares/ares_getopt.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,123 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Original file name getopt.c  Initial import into the c-ares source tree
 | 
			
		||||
 * on 2007-04-11.  Lifted from version 5.2 of the 'Open Mash' project with
 | 
			
		||||
 * the modified BSD license, BSD license without the advertising clause.
 | 
			
		||||
 *
 | 
			
		||||
 * $Id$
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * getopt.c --
 | 
			
		||||
 *
 | 
			
		||||
 *      Standard UNIX getopt function.  Code is from BSD.
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (c) 1987-2001 The Regents of the University of California.
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * A. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer.
 | 
			
		||||
 * B. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
 *    and/or other materials provided with the distribution.
 | 
			
		||||
 * C. Neither the names of the copyright holders nor the names of its
 | 
			
		||||
 *    contributors may be used to endorse or promote products derived from this
 | 
			
		||||
 *    software without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
 | 
			
		||||
 * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 | 
			
		||||
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
			
		||||
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
 | 
			
		||||
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
			
		||||
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
			
		||||
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
			
		||||
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
			
		||||
 * POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* #if !defined(lint)
 | 
			
		||||
 * static char sccsid[] = "@(#)getopt.c 8.2 (Berkeley) 4/2/94";
 | 
			
		||||
 * #endif
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "ares_getopt.h"
 | 
			
		||||
 | 
			
		||||
int   opterr = 1,     /* if error message should be printed */
 | 
			
		||||
      optind = 1,     /* index into parent argv vector */
 | 
			
		||||
      optopt,         /* character checked for validity */
 | 
			
		||||
      optreset;       /* reset getopt */
 | 
			
		||||
char  *optarg;        /* argument associated with option */
 | 
			
		||||
 | 
			
		||||
#define  BADCH   (int)'?'
 | 
			
		||||
#define  BADARG  (int)':'
 | 
			
		||||
#define  EMSG    (char *)""
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * ares_getopt --
 | 
			
		||||
 *    Parse argc/argv argument vector.
 | 
			
		||||
 */
 | 
			
		||||
int
 | 
			
		||||
ares_getopt(int nargc, char * const nargv[], const char *ostr)
 | 
			
		||||
{
 | 
			
		||||
    static char *place = EMSG;                /* option letter processing */
 | 
			
		||||
    char *oli;                                /* option letter list index */
 | 
			
		||||
 | 
			
		||||
    if (optreset || !*place) {                /* update scanning pointer */
 | 
			
		||||
        optreset = 0;
 | 
			
		||||
        if (optind >= nargc || *(place = nargv[optind]) != '-') {
 | 
			
		||||
            place = EMSG;
 | 
			
		||||
            return (EOF);
 | 
			
		||||
        }
 | 
			
		||||
        if (place[1] && *++place == '-') {    /* found "--" */
 | 
			
		||||
            ++optind;
 | 
			
		||||
            place = EMSG;
 | 
			
		||||
            return (EOF);
 | 
			
		||||
        }
 | 
			
		||||
    }                                         /* option letter okay? */
 | 
			
		||||
    if ((optopt = (int)*place++) == (int)':' ||
 | 
			
		||||
        (oli = strchr(ostr, optopt)) == NULL) {
 | 
			
		||||
        /*
 | 
			
		||||
         * if the user didn't specify '-' as an option,
 | 
			
		||||
         * assume it means EOF.
 | 
			
		||||
         */
 | 
			
		||||
        if (optopt == (int)'-')
 | 
			
		||||
            return (EOF);
 | 
			
		||||
        if (!*place)
 | 
			
		||||
            ++optind;
 | 
			
		||||
        if (opterr && *ostr != ':')
 | 
			
		||||
            (void)fprintf(stderr,
 | 
			
		||||
                "%s: illegal option -- %c\n", __FILE__, optopt);
 | 
			
		||||
        return (BADCH);
 | 
			
		||||
    }
 | 
			
		||||
    if (*++oli != ':') {                      /* don't need argument */
 | 
			
		||||
        optarg = NULL;
 | 
			
		||||
        if (!*place)
 | 
			
		||||
            ++optind;
 | 
			
		||||
    }
 | 
			
		||||
    else {                                    /* need an argument */
 | 
			
		||||
        if (*place)                           /* no white space */
 | 
			
		||||
            optarg = place;
 | 
			
		||||
        else if (nargc <= ++optind) {         /* no arg */
 | 
			
		||||
            place = EMSG;
 | 
			
		||||
            if (*ostr == ':')
 | 
			
		||||
                return (BADARG);
 | 
			
		||||
            if (opterr)
 | 
			
		||||
                (void)fprintf(stderr,
 | 
			
		||||
                    "%s: option requires an argument -- %c\n",
 | 
			
		||||
                    __FILE__, optopt);
 | 
			
		||||
            return (BADCH);
 | 
			
		||||
        }
 | 
			
		||||
         else                                 /* white space */
 | 
			
		||||
            optarg = nargv[optind];
 | 
			
		||||
        place = EMSG;
 | 
			
		||||
        ++optind;
 | 
			
		||||
    }
 | 
			
		||||
    return (optopt);                          /* dump back option letter */
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										47
									
								
								ares/ares_getopt.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								ares/ares_getopt.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
			
		||||
#ifndef ARES_GETOPT_H
 | 
			
		||||
#define ARES_GETOPT_H
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 1987-2001 The Regents of the University of California.
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * A. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer.
 | 
			
		||||
 * B. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
 *    and/or other materials provided with the distribution.
 | 
			
		||||
 * C. Neither the names of the copyright holders nor the names of its
 | 
			
		||||
 *    contributors may be used to endorse or promote products derived from this
 | 
			
		||||
 *    software without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
 | 
			
		||||
 * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 | 
			
		||||
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
			
		||||
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
 | 
			
		||||
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
			
		||||
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
			
		||||
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
			
		||||
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
			
		||||
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
			
		||||
 * POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int ares_getopt(int nargc, char * const nargv[], const char *ostr);
 | 
			
		||||
 | 
			
		||||
#if defined(WATT32)
 | 
			
		||||
#undef optarg
 | 
			
		||||
#undef optind
 | 
			
		||||
#undef opterr
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
extern char *optarg;
 | 
			
		||||
extern int optind;
 | 
			
		||||
extern int opterr;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* ARES_GETOPT_H */
 | 
			
		||||
							
								
								
									
										58
									
								
								ares/ares_getsock.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								ares/ares_getsock.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by Daniel Stenberg
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_GETSOCK 3 "22 December 2005"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_getsock \- get file descriptors to wait on
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B int ares_getsock(ares_channel \fIchannel\fP, int *\fIsocks\fP, 
 | 
			
		||||
.B int \fInumsocks\fP);
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_getsock
 | 
			
		||||
function retrieves the set of file descriptors which the calling
 | 
			
		||||
application should wait on for reading and/or writing for the
 | 
			
		||||
processing of name service queries pending on the name service channel
 | 
			
		||||
identified by
 | 
			
		||||
.IR channel .
 | 
			
		||||
File descriptors will be set in the integer array pointed to by
 | 
			
		||||
\fIsocks\fP.
 | 
			
		||||
\fInumsocks\fP is the size of the given array in number of ints.
 | 
			
		||||
 | 
			
		||||
This function can only return information about up to 16 sockets. If more are
 | 
			
		||||
in use (however unlikely that is), they are simply not reported back.
 | 
			
		||||
.SH RETURN VALUES
 | 
			
		||||
\fBares_getsock\fP returns a bitmask for what actions to wait for on the
 | 
			
		||||
different sockets. The ares.h header file provides these convenience macros to
 | 
			
		||||
extract the information appropriately:
 | 
			
		||||
 | 
			
		||||
.nf
 | 
			
		||||
#define ARES_GETSOCK_MAXNUM 16 /* ares_getsock() can return info about
 | 
			
		||||
                                  this many sockets */
 | 
			
		||||
#define ARES_GETSOCK_READABLE(bits,num) (bits & (1<< (num)))
 | 
			
		||||
#define ARES_GETSOCK_WRITABLE(bits,num) (bits & (1 << ((num) + \
 | 
			
		||||
                                         ARES_GETSOCK_MAXNUM)))
 | 
			
		||||
.fi
 | 
			
		||||
.SH NOTES
 | 
			
		||||
This function was added in c-ares 1.3.1
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_timeout (3),
 | 
			
		||||
.BR ares_fds (3),
 | 
			
		||||
.BR ares_process (3)
 | 
			
		||||
							
								
								
									
										75
									
								
								ares/ares_getsock.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								ares/ares_getsock.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,75 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 2005 - 2007, Daniel Stenberg
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this software and its
 | 
			
		||||
 * documentation for any purpose and without fee is hereby granted, provided
 | 
			
		||||
 * that the above copyright notice appear in all copies and that both that
 | 
			
		||||
 * copyright notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in advertising or
 | 
			
		||||
 * publicity pertaining to distribution of the software without specific,
 | 
			
		||||
 * written prior permission.  M.I.T. makes no representations about the
 | 
			
		||||
 * suitability of this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_SYS_TIME_H
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
int ares_getsock(ares_channel channel,
 | 
			
		||||
                 int *s,
 | 
			
		||||
                 int numsocks) /* size of the 'socks' array */
 | 
			
		||||
{
 | 
			
		||||
  struct server_state *server;
 | 
			
		||||
  int i;
 | 
			
		||||
  int sockindex=0;
 | 
			
		||||
  int bitmap = 0;
 | 
			
		||||
  unsigned int setbits = 0xffffffff;
 | 
			
		||||
 | 
			
		||||
  ares_socket_t *socks = (ares_socket_t *)s;
 | 
			
		||||
 | 
			
		||||
  /* Are there any active queries? */
 | 
			
		||||
  int active_queries = !ares__is_list_empty(&(channel->all_queries));
 | 
			
		||||
 | 
			
		||||
  for (i = 0;
 | 
			
		||||
       (i < channel->nservers) && (sockindex < ARES_GETSOCK_MAXNUM);
 | 
			
		||||
       i++)
 | 
			
		||||
    {
 | 
			
		||||
      server = &channel->servers[i];
 | 
			
		||||
      /* We only need to register interest in UDP sockets if we have
 | 
			
		||||
       * outstanding queries.
 | 
			
		||||
       */
 | 
			
		||||
      if (active_queries && server->udp_socket != ARES_SOCKET_BAD)
 | 
			
		||||
        {
 | 
			
		||||
          if(sockindex >= numsocks)
 | 
			
		||||
            break;
 | 
			
		||||
          socks[sockindex] = server->udp_socket;
 | 
			
		||||
          bitmap |= ARES_GETSOCK_READABLE(setbits, sockindex);
 | 
			
		||||
          sockindex++;
 | 
			
		||||
        }
 | 
			
		||||
      /* We always register for TCP events, because we want to know
 | 
			
		||||
       * when the other side closes the connection, so we don't waste
 | 
			
		||||
       * time trying to use a broken connection.
 | 
			
		||||
       */
 | 
			
		||||
      if (server->tcp_socket != ARES_SOCKET_BAD)
 | 
			
		||||
       {
 | 
			
		||||
         if(sockindex >= numsocks)
 | 
			
		||||
           break;
 | 
			
		||||
         socks[sockindex] = server->tcp_socket;
 | 
			
		||||
         bitmap |= ARES_GETSOCK_READABLE(setbits, sockindex);
 | 
			
		||||
 | 
			
		||||
         if (server->qhead && active_queries)
 | 
			
		||||
           /* then the tcp socket is also writable! */
 | 
			
		||||
           bitmap |= ARES_GETSOCK_WRITABLE(setbits, sockindex);
 | 
			
		||||
 | 
			
		||||
         sockindex++;
 | 
			
		||||
       }
 | 
			
		||||
    }
 | 
			
		||||
  return bitmap;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										193
									
								
								ares/ares_init.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										193
									
								
								ares/ares_init.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,193 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\" Copyright (C) 2007-2008 by Daniel Stenberg
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_INIT 3 "13 May 2008"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_init, ares_init_options \- Initialize a resolver channel
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B int ares_init(ares_channel *\fIchannel\fP)
 | 
			
		||||
.B int ares_init_options(ares_channel *\fIchannel\fP,
 | 
			
		||||
.B 	struct ares_options *\fIoptions\fP, int \fIoptmask\fP)
 | 
			
		||||
.PP
 | 
			
		||||
.B cc file.c -lcares
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The \fBares_init\fP function initializes a communications channel for name
 | 
			
		||||
service lookups.  If it returns successfully, \fBares_init\fP will set the
 | 
			
		||||
variable pointed to by \fIchannel\fP to a handle used to identify the name
 | 
			
		||||
service channel.  The caller should invoke
 | 
			
		||||
.BR ares_destroy (3)
 | 
			
		||||
on the handle when the channel is no longer needed.
 | 
			
		||||
.PP
 | 
			
		||||
The \fBares_init_options\fP function also initializes a name service channel,
 | 
			
		||||
with additional options useful for applications requiring more control over
 | 
			
		||||
name service configuration. The \fIoptmask\fP parameter specifies which fields
 | 
			
		||||
in the structure pointed to by \fIoptions\fP are set, as follows:
 | 
			
		||||
.TP 18
 | 
			
		||||
.B ARES_OPT_FLAGS
 | 
			
		||||
.B int \fIflags\fP;
 | 
			
		||||
.br
 | 
			
		||||
Flags controlling the behavior of the resolver.  See below for a
 | 
			
		||||
description of possible flag values.
 | 
			
		||||
.TP 18
 | 
			
		||||
.B ARES_OPT_TIMEOUT
 | 
			
		||||
.B int \fItimeout\fP;
 | 
			
		||||
.br
 | 
			
		||||
The number of seconds each name server is given to respond to a query on the
 | 
			
		||||
first try.  (After the first try, the timeout algorithm becomes more
 | 
			
		||||
complicated, but scales linearly with the value of \fItimeout\fP.)  The
 | 
			
		||||
default is five seconds. This option is being deprecated by
 | 
			
		||||
\fIARES_OPT_TIMEOUTMS\fP starting in c-ares 1.5.2.
 | 
			
		||||
.TP 18
 | 
			
		||||
.B ARES_OPT_TIMEOUTMS
 | 
			
		||||
.B int \fItimeout\fP;
 | 
			
		||||
.br
 | 
			
		||||
The number of milliseconds each name server is given to respond to a query on
 | 
			
		||||
the first try.  (After the first try, the timeout algorithm becomes more
 | 
			
		||||
complicated, but scales linearly with the value of \fItimeout\fP.)  The
 | 
			
		||||
default is five seconds. Note that this option is specified with the same
 | 
			
		||||
struct field as the former \fIARES_OPT_TIMEOUT\fP, it is but the option bits
 | 
			
		||||
that tell c-ares how to interpret the number. This option was added in c-ares
 | 
			
		||||
1.5.2.
 | 
			
		||||
.TP 18
 | 
			
		||||
.B ARES_OPT_TRIES
 | 
			
		||||
.B int \fItries\fP;
 | 
			
		||||
.br
 | 
			
		||||
The number of tries the resolver will try contacting each name server
 | 
			
		||||
before giving up.  The default is four tries.
 | 
			
		||||
.TP 18
 | 
			
		||||
.B ARES_OPT_NDOTS
 | 
			
		||||
.B int \fIndots\fP;
 | 
			
		||||
.br
 | 
			
		||||
The number of dots which must be present in a domain name for it to be
 | 
			
		||||
queried for "as is" prior to querying for it with the default domain
 | 
			
		||||
extensions appended.  The default value is 1 unless set otherwise by
 | 
			
		||||
resolv.conf or the RES_OPTIONS environment variable.
 | 
			
		||||
.TP 18
 | 
			
		||||
.B ARES_OPT_PORT
 | 
			
		||||
.B unsigned short \fIport\fP;
 | 
			
		||||
.br
 | 
			
		||||
The port to use for queries (both TCP and UDP), in network byte order.
 | 
			
		||||
The default value is 53 (in network byte order), the standard name
 | 
			
		||||
service port.
 | 
			
		||||
.TP 18
 | 
			
		||||
.B ARES_OPT_SERVERS
 | 
			
		||||
.B struct in_addr *\fIservers\fP;
 | 
			
		||||
.br
 | 
			
		||||
.B int \fInservers\fP;
 | 
			
		||||
.br
 | 
			
		||||
The list of servers to contact, instead of the servers specified in
 | 
			
		||||
resolv.conf or the local named.
 | 
			
		||||
.TP 18
 | 
			
		||||
.B ARES_OPT_DOMAINS
 | 
			
		||||
.B char **\fIdomains\fP;
 | 
			
		||||
.br
 | 
			
		||||
.B int \fIndomains\fP;
 | 
			
		||||
.br
 | 
			
		||||
The domains to search, instead of the domains specified in resolv.conf
 | 
			
		||||
or the domain derived from the kernel hostname variable.
 | 
			
		||||
.TP 18
 | 
			
		||||
.B ARES_OPT_LOOKUPS
 | 
			
		||||
.B char *\fIlookups\fP;
 | 
			
		||||
.br
 | 
			
		||||
The lookups to perform for host queries.  
 | 
			
		||||
.I lookups
 | 
			
		||||
should be set to a string of the characters "b" or "f", where "b"
 | 
			
		||||
indicates a DNS lookup and "f" indicates a lookup in the hosts file.
 | 
			
		||||
.TP 18
 | 
			
		||||
.B ARES_OPT_SOCK_STATE_CB
 | 
			
		||||
.B void (*\fIsock_state_cb\fP)(void *data, int s, int read, int write);
 | 
			
		||||
.br
 | 
			
		||||
.B void *\fIsock_state_cb_data\fP;
 | 
			
		||||
.br
 | 
			
		||||
A callback function to be invoked when a socket changes state.
 | 
			
		||||
.I s
 | 
			
		||||
will be passed the socket whose state has changed;
 | 
			
		||||
.I read
 | 
			
		||||
will be set to true if the socket should listen for read events, and
 | 
			
		||||
.I write
 | 
			
		||||
will be set to true if the socket should listen for write events.
 | 
			
		||||
The value of
 | 
			
		||||
.I sock_state_cb_data
 | 
			
		||||
will be passed as the
 | 
			
		||||
.I data
 | 
			
		||||
argument.
 | 
			
		||||
.PP
 | 
			
		||||
The
 | 
			
		||||
.I flags
 | 
			
		||||
field should be the bitwise or of some subset of the following values:
 | 
			
		||||
.TP 23
 | 
			
		||||
.B ARES_FLAG_USEVC
 | 
			
		||||
Always use TCP queries (the "virtual circuit") instead of UDP
 | 
			
		||||
queries.  Normally, TCP is only used if a UDP query yields a truncated
 | 
			
		||||
result.
 | 
			
		||||
.TP 23
 | 
			
		||||
.B ARES_FLAG_PRIMARY
 | 
			
		||||
Only query the first server in the list of servers to query.
 | 
			
		||||
.TP 23
 | 
			
		||||
.B ARES_FLAG_IGNTC
 | 
			
		||||
If a truncated response to a UDP query is received, do not fall back
 | 
			
		||||
to TCP; simply continue on with the truncated response.
 | 
			
		||||
.TP 23
 | 
			
		||||
.B ARES_FLAG_NORECURSE
 | 
			
		||||
Do not set the "recursion desired" bit on outgoing queries, so that the name
 | 
			
		||||
server being contacted will not try to fetch the answer from other servers if
 | 
			
		||||
it doesn't know the answer locally. Be aware that ares will not do the
 | 
			
		||||
recursion for you.  Recursion must be handled by the application calling ares
 | 
			
		||||
if \fIARES_FLAG_NORECURSE\fP is set.
 | 
			
		||||
.TP 23
 | 
			
		||||
.B ARES_FLAG_STAYOPEN
 | 
			
		||||
Do not close communications sockets when the number of active queries
 | 
			
		||||
drops to zero.
 | 
			
		||||
.TP 23
 | 
			
		||||
.B ARES_FLAG_NOSEARCH
 | 
			
		||||
Do not use the default search domains; only query hostnames as-is or
 | 
			
		||||
as aliases.
 | 
			
		||||
.TP 23
 | 
			
		||||
.B ARES_FLAG_NOALIASES
 | 
			
		||||
Do not honor the HOSTALIASES environment variable, which normally
 | 
			
		||||
specifies a file of hostname translations.
 | 
			
		||||
.TP 23
 | 
			
		||||
.B ARES_FLAG_NOCHECKRESP
 | 
			
		||||
Do not discard responses with the SERVFAIL, NOTIMP, or REFUSED
 | 
			
		||||
response code or responses whose questions don't match the questions
 | 
			
		||||
in the request.  Primarily useful for writing clients which might be
 | 
			
		||||
used to test or debug name servers.
 | 
			
		||||
.SH RETURN VALUES
 | 
			
		||||
.I ares_init
 | 
			
		||||
or
 | 
			
		||||
.I ares_init_options
 | 
			
		||||
can return any of the following values:
 | 
			
		||||
.TP 14
 | 
			
		||||
.B ARES_SUCCESS
 | 
			
		||||
Initialization succeeded.
 | 
			
		||||
.TP 14
 | 
			
		||||
.B ARES_EFILE
 | 
			
		||||
A configuration file could not be read.
 | 
			
		||||
.TP 14
 | 
			
		||||
.B ARES_ENOMEM
 | 
			
		||||
The process's available memory was exhausted.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_destroy(3),
 | 
			
		||||
.BR ares_dup(3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Greg Hudson, MIT Information Systems
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										1564
									
								
								ares/ares_init.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1564
									
								
								ares/ares_init.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										2
									
								
								ares/ares_init_options.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								ares/ares_init_options.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
.so man3/ares_init.3
 | 
			
		||||
.\" $Id$
 | 
			
		||||
							
								
								
									
										84
									
								
								ares/ares_ipv6.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								ares/ares_ipv6.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,84 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright (C) 2005 by Dominick Meglio
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef ARES_IPV6_H
 | 
			
		||||
#define ARES_IPV6_H
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_PF_INET6
 | 
			
		||||
#define PF_INET6 AF_INET6
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if !defined(HAVE_STRUCT_IN6_ADDR) && !defined(s6_addr)
 | 
			
		||||
struct in6_addr {
 | 
			
		||||
  union {
 | 
			
		||||
    unsigned char _S6_u8[16];
 | 
			
		||||
  } _S6_un;
 | 
			
		||||
};
 | 
			
		||||
#define s6_addr _S6_un._S6_u8
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_STRUCT_SOCKADDR_IN6
 | 
			
		||||
struct sockaddr_in6
 | 
			
		||||
{
 | 
			
		||||
  unsigned short  sin6_family;
 | 
			
		||||
  unsigned short  sin6_port;
 | 
			
		||||
  unsigned long   sin6_flowinfo;
 | 
			
		||||
  struct in6_addr sin6_addr;
 | 
			
		||||
  unsigned int    sin6_scope_id;
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_STRUCT_ADDRINFO
 | 
			
		||||
struct addrinfo
 | 
			
		||||
{
 | 
			
		||||
  int              ai_flags;
 | 
			
		||||
  int              ai_family;
 | 
			
		||||
  int              ai_socktype;
 | 
			
		||||
  int              ai_protocol;
 | 
			
		||||
  socklen_t        ai_addrlen;   /* Follow rfc3493 struct addrinfo */
 | 
			
		||||
  char            *ai_canonname;
 | 
			
		||||
  struct sockaddr *ai_addr;
 | 
			
		||||
  struct addrinfo *ai_next;
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef NS_IN6ADDRSZ
 | 
			
		||||
#if SIZEOF_STRUCT_IN6_ADDR == 0
 | 
			
		||||
/* We cannot have it set to zero, so we pick a fixed value here */
 | 
			
		||||
#define NS_IN6ADDRSZ 16
 | 
			
		||||
#else
 | 
			
		||||
#define NS_IN6ADDRSZ SIZEOF_STRUCT_IN6_ADDR
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef NS_INADDRSZ
 | 
			
		||||
#define NS_INADDRSZ SIZEOF_STRUCT_IN_ADDR
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef NS_INT16SZ
 | 
			
		||||
#define NS_INT16SZ 2
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef IF_NAMESIZE
 | 
			
		||||
#ifdef IFNAMSIZ
 | 
			
		||||
#define IF_NAMESIZE IFNAMSIZ
 | 
			
		||||
#else
 | 
			
		||||
#define IF_NAMESIZE 256
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* ARES_IPV6_H */
 | 
			
		||||
							
								
								
									
										87
									
								
								ares/ares_llist.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								ares/ares_llist.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,87 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
/* Routines for managing doubly-linked circular linked lists with a
 | 
			
		||||
 * dummy head.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Initialize a new head node */
 | 
			
		||||
void ares__init_list_head(struct list_node* head) {
 | 
			
		||||
  head->prev = head;
 | 
			
		||||
  head->next = head;
 | 
			
		||||
  head->data = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Initialize a list node */
 | 
			
		||||
void ares__init_list_node(struct list_node* node, void* d) {
 | 
			
		||||
  node->prev = NULL;
 | 
			
		||||
  node->next = NULL;
 | 
			
		||||
  node->data = d;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Returns true iff the given list is empty */
 | 
			
		||||
int ares__is_list_empty(struct list_node* head) {
 | 
			
		||||
  return ((head->next == head) && (head->prev == head));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Inserts new_node before old_node */
 | 
			
		||||
void ares__insert_in_list(struct list_node* new_node,
 | 
			
		||||
                          struct list_node* old_node) {
 | 
			
		||||
  new_node->next = old_node;
 | 
			
		||||
  new_node->prev = old_node->prev;
 | 
			
		||||
  old_node->prev->next = new_node;
 | 
			
		||||
  old_node->prev = new_node;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Removes the node from the list it's in, if any */
 | 
			
		||||
void ares__remove_from_list(struct list_node* node) {
 | 
			
		||||
  if (node->next != NULL) {
 | 
			
		||||
    node->prev->next = node->next;
 | 
			
		||||
    node->next->prev = node->prev;
 | 
			
		||||
    node->prev = NULL;
 | 
			
		||||
    node->next = NULL;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Swap the contents of two lists */
 | 
			
		||||
void ares__swap_lists(struct list_node* head_a,
 | 
			
		||||
                      struct list_node* head_b) {
 | 
			
		||||
  int is_a_empty = ares__is_list_empty(head_a);
 | 
			
		||||
  int is_b_empty = ares__is_list_empty(head_b);
 | 
			
		||||
  struct list_node old_a = *head_a;
 | 
			
		||||
  struct list_node old_b = *head_b;
 | 
			
		||||
 | 
			
		||||
  if (is_a_empty) {
 | 
			
		||||
    ares__init_list_head(head_b);
 | 
			
		||||
  } else {
 | 
			
		||||
    *head_b = old_a;
 | 
			
		||||
    old_a.next->prev = head_b;
 | 
			
		||||
    old_a.prev->next = head_b;
 | 
			
		||||
  }
 | 
			
		||||
  if (is_b_empty) {
 | 
			
		||||
    ares__init_list_head(head_a);
 | 
			
		||||
  } else {
 | 
			
		||||
    *head_a = old_b;
 | 
			
		||||
    old_b.next->prev = head_a;
 | 
			
		||||
    old_b.prev->next = head_a;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										43
									
								
								ares/ares_llist.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								ares/ares_llist.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,43 @@
 | 
			
		||||
#ifndef __ARES_LLIST_H
 | 
			
		||||
#define __ARES_LLIST_H
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Node definition for circular, doubly-linked list */
 | 
			
		||||
struct list_node {
 | 
			
		||||
  struct list_node *prev;
 | 
			
		||||
  struct list_node *next;
 | 
			
		||||
  void* data;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void ares__init_list_head(struct list_node* head);
 | 
			
		||||
 | 
			
		||||
void ares__init_list_node(struct list_node* node, void* d);
 | 
			
		||||
 | 
			
		||||
int ares__is_list_empty(struct list_node* head);
 | 
			
		||||
 | 
			
		||||
void ares__insert_in_list(struct list_node* new_node,
 | 
			
		||||
                          struct list_node* old_node);
 | 
			
		||||
 | 
			
		||||
void ares__remove_from_list(struct list_node* node);
 | 
			
		||||
 | 
			
		||||
void ares__swap_lists(struct list_node* head_a,
 | 
			
		||||
                      struct list_node* head_b);
 | 
			
		||||
 | 
			
		||||
#endif /* __ARES_LLIST_H */
 | 
			
		||||
							
								
								
									
										76
									
								
								ares/ares_mkquery.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								ares/ares_mkquery.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,76 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998, 2000 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_MKQUERY 3 "4 January 2000"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_mkquery \- Compose a single-question DNS query buffer
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B int ares_mkquery(const char *\fIname\fP, int \fIdnsclass\fP, int \fItype\fP,
 | 
			
		||||
.B	unsigned short \fIid\fP, int \fIrd\fP, char **\fIbuf\fP,
 | 
			
		||||
.B	int *\fIbuflen\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_mkquery
 | 
			
		||||
function composes a DNS query with a single question.
 | 
			
		||||
The parameter
 | 
			
		||||
.I name
 | 
			
		||||
gives the query name as a NUL-terminated C string of period-separated
 | 
			
		||||
labels optionally ending with a period; periods and backslashes within
 | 
			
		||||
a label must be escaped with a backlash.  The parameters
 | 
			
		||||
.I dnsclass
 | 
			
		||||
and
 | 
			
		||||
.I type
 | 
			
		||||
give the class and type of the query using the values defined in
 | 
			
		||||
.BR <arpa/nameser.h> .
 | 
			
		||||
The parameter
 | 
			
		||||
.I id
 | 
			
		||||
gives a 16-bit identifier for the query.  The parameter
 | 
			
		||||
.I rd
 | 
			
		||||
should be nonzero if recursion is desired, zero if not.  The query
 | 
			
		||||
will be placed in an allocated buffer, a pointer to which will be
 | 
			
		||||
stored in the variable pointed to by
 | 
			
		||||
.IR buf ,
 | 
			
		||||
and the length of which will be stored in the variable pointed to by
 | 
			
		||||
.IR buflen .
 | 
			
		||||
It is the caller's responsibility to free this buffer using
 | 
			
		||||
\fIares_free_string(3)\fP when it is no longer needed.
 | 
			
		||||
.SH RETURN VALUES
 | 
			
		||||
.B ares_mkquery
 | 
			
		||||
can return any of the following values:
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_SUCCESS
 | 
			
		||||
Construction of the DNS query succeeded.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_EBADNAME
 | 
			
		||||
The query name
 | 
			
		||||
.I name
 | 
			
		||||
could not be encoded as a domain name, either because it contained a
 | 
			
		||||
zero-length label or because it contained a label of more than 63
 | 
			
		||||
characters.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_ENOMEM
 | 
			
		||||
Memory was exhausted.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_expand_name (3),
 | 
			
		||||
.BR ares_free_string (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Greg Hudson, MIT Information Systems
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998, 2000 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										196
									
								
								ares/ares_mkquery.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										196
									
								
								ares/ares_mkquery.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,196 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_SYS_SOCKET_H
 | 
			
		||||
#  include <sys/socket.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETINET_IN_H
 | 
			
		||||
#  include <netinet/in.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_H
 | 
			
		||||
#  include <arpa/nameser.h>
 | 
			
		||||
#else
 | 
			
		||||
#  include "nameser.h"
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
 | 
			
		||||
#  include <arpa/nameser_compat.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_dns.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
/* Header format, from RFC 1035:
 | 
			
		||||
 *                                  1  1  1  1  1  1
 | 
			
		||||
 *    0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5
 | 
			
		||||
 *  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
 | 
			
		||||
 *  |                      ID                       |
 | 
			
		||||
 *  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
 | 
			
		||||
 *  |QR|   Opcode  |AA|TC|RD|RA|   Z    |   RCODE   |
 | 
			
		||||
 *  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
 | 
			
		||||
 *  |                    QDCOUNT                    |
 | 
			
		||||
 *  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
 | 
			
		||||
 *  |                    ANCOUNT                    |
 | 
			
		||||
 *  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
 | 
			
		||||
 *  |                    NSCOUNT                    |
 | 
			
		||||
 *  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
 | 
			
		||||
 *  |                    ARCOUNT                    |
 | 
			
		||||
 *  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
 | 
			
		||||
 *
 | 
			
		||||
 * AA, TC, RA, and RCODE are only set in responses.  Brief description
 | 
			
		||||
 * of the remaining fields:
 | 
			
		||||
 *      ID      Identifier to match responses with queries
 | 
			
		||||
 *      QR      Query (0) or response (1)
 | 
			
		||||
 *      Opcode  For our purposes, always QUERY
 | 
			
		||||
 *      RD      Recursion desired
 | 
			
		||||
 *      Z       Reserved (zero)
 | 
			
		||||
 *      QDCOUNT Number of queries
 | 
			
		||||
 *      ANCOUNT Number of answers
 | 
			
		||||
 *      NSCOUNT Number of name server records
 | 
			
		||||
 *      ARCOUNT Number of additional records
 | 
			
		||||
 *
 | 
			
		||||
 * Question format, from RFC 1035:
 | 
			
		||||
 *                                  1  1  1  1  1  1
 | 
			
		||||
 *    0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5
 | 
			
		||||
 *  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
 | 
			
		||||
 *  |                                               |
 | 
			
		||||
 *  /                     QNAME                     /
 | 
			
		||||
 *  /                                               /
 | 
			
		||||
 *  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
 | 
			
		||||
 *  |                     QTYPE                     |
 | 
			
		||||
 *  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
 | 
			
		||||
 *  |                     QCLASS                    |
 | 
			
		||||
 *  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
 | 
			
		||||
 *
 | 
			
		||||
 * The query name is encoded as a series of labels, each represented
 | 
			
		||||
 * as a one-byte length (maximum 63) followed by the text of the
 | 
			
		||||
 * label.  The list is terminated by a label of length zero (which can
 | 
			
		||||
 * be thought of as the root domain).
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
int ares_mkquery(const char *name, int dnsclass, int type, unsigned short id,
 | 
			
		||||
                 int rd, unsigned char **buf, int *buflen)
 | 
			
		||||
{
 | 
			
		||||
  int len;
 | 
			
		||||
  unsigned char *q;
 | 
			
		||||
  const char *p;
 | 
			
		||||
 | 
			
		||||
  /* Set our results early, in case we bail out early with an error. */
 | 
			
		||||
  *buflen = 0;
 | 
			
		||||
  *buf = NULL;
 | 
			
		||||
 | 
			
		||||
  /* Compute the length of the encoded name so we can check buflen.
 | 
			
		||||
   * Start counting at 1 for the zero-length label at the end. */
 | 
			
		||||
  len = 1;
 | 
			
		||||
  for (p = name; *p; p++)
 | 
			
		||||
    {
 | 
			
		||||
      if (*p == '\\' && *(p + 1) != 0)
 | 
			
		||||
        p++;
 | 
			
		||||
      len++;
 | 
			
		||||
    }
 | 
			
		||||
  /* If there are n periods in the name, there are n + 1 labels, and
 | 
			
		||||
   * thus n + 1 length fields, unless the name is empty or ends with a
 | 
			
		||||
   * period.  So add 1 unless name is empty or ends with a period.
 | 
			
		||||
   */
 | 
			
		||||
  if (*name && *(p - 1) != '.')
 | 
			
		||||
    len++;
 | 
			
		||||
 | 
			
		||||
  /* Immediately reject names that are longer than the maximum of 255
 | 
			
		||||
   * bytes that's specified in RFC 1035 ("To simplify implementations,
 | 
			
		||||
   * the total length of a domain name (i.e., label octets and label
 | 
			
		||||
   * length octets) is restricted to 255 octets or less."). We aren't
 | 
			
		||||
   * doing this just to be a stickler about RFCs. For names that are
 | 
			
		||||
   * too long, 'dnscache' closes its TCP connection to us immediately
 | 
			
		||||
   * (when using TCP) and ignores the request when using UDP, and
 | 
			
		||||
   * BIND's named returns ServFail (TCP or UDP). Sending a request
 | 
			
		||||
   * that we know will cause 'dnscache' to close the TCP connection is
 | 
			
		||||
   * painful, since that makes any other outstanding requests on that
 | 
			
		||||
   * connection fail. And sending a UDP request that we know
 | 
			
		||||
   * 'dnscache' will ignore is bad because resources will be tied up
 | 
			
		||||
   * until we time-out the request.
 | 
			
		||||
   */
 | 
			
		||||
  if (len > MAXCDNAME)
 | 
			
		||||
    return ARES_EBADNAME;
 | 
			
		||||
 | 
			
		||||
  *buflen = len + HFIXEDSZ + QFIXEDSZ;
 | 
			
		||||
  *buf = malloc(*buflen);
 | 
			
		||||
  if (!*buf)
 | 
			
		||||
      return ARES_ENOMEM;
 | 
			
		||||
 | 
			
		||||
  /* Set up the header. */
 | 
			
		||||
  q = *buf;
 | 
			
		||||
  memset(q, 0, HFIXEDSZ);
 | 
			
		||||
  DNS_HEADER_SET_QID(q, id);
 | 
			
		||||
  DNS_HEADER_SET_OPCODE(q, QUERY);
 | 
			
		||||
  if (rd) {
 | 
			
		||||
    DNS_HEADER_SET_RD(q, 1);
 | 
			
		||||
  }
 | 
			
		||||
  else {
 | 
			
		||||
    DNS_HEADER_SET_RD(q, 0);
 | 
			
		||||
  }
 | 
			
		||||
  DNS_HEADER_SET_QDCOUNT(q, 1);
 | 
			
		||||
 | 
			
		||||
  /* A name of "." is a screw case for the loop below, so adjust it. */
 | 
			
		||||
  if (strcmp(name, ".") == 0)
 | 
			
		||||
    name++;
 | 
			
		||||
 | 
			
		||||
  /* Start writing out the name after the header. */
 | 
			
		||||
  q += HFIXEDSZ;
 | 
			
		||||
  while (*name)
 | 
			
		||||
    {
 | 
			
		||||
      if (*name == '.')
 | 
			
		||||
        return ARES_EBADNAME;
 | 
			
		||||
 | 
			
		||||
      /* Count the number of bytes in this label. */
 | 
			
		||||
      len = 0;
 | 
			
		||||
      for (p = name; *p && *p != '.'; p++)
 | 
			
		||||
        {
 | 
			
		||||
          if (*p == '\\' && *(p + 1) != 0)
 | 
			
		||||
            p++;
 | 
			
		||||
          len++;
 | 
			
		||||
        }
 | 
			
		||||
      if (len > MAXLABEL)
 | 
			
		||||
        return ARES_EBADNAME;
 | 
			
		||||
 | 
			
		||||
      /* Encode the length and copy the data. */
 | 
			
		||||
      *q++ = (unsigned char)len;
 | 
			
		||||
      for (p = name; *p && *p != '.'; p++)
 | 
			
		||||
        {
 | 
			
		||||
          if (*p == '\\' && *(p + 1) != 0)
 | 
			
		||||
            p++;
 | 
			
		||||
          *q++ = *p;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      /* Go to the next label and repeat, unless we hit the end. */
 | 
			
		||||
      if (!*p)
 | 
			
		||||
        break;
 | 
			
		||||
      name = p + 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Add the zero-length label at the end. */
 | 
			
		||||
  *q++ = 0;
 | 
			
		||||
 | 
			
		||||
  /* Finish off the question with the type and class. */
 | 
			
		||||
  DNS_QUESTION_SET_TYPE(q, type);
 | 
			
		||||
  DNS_QUESTION_SET_CLASS(q, dnsclass);
 | 
			
		||||
 | 
			
		||||
  return ARES_SUCCESS;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										79
									
								
								ares/ares_parse_a_reply.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								ares/ares_parse_a_reply.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,79 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_PARSE_A_REPLY 3 "25 July 1998"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_parse_a_reply \- Parse a reply to a DNS query of type A into a hostent
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B int ares_parse_a_reply(const unsigned char *\fIabuf\fP, int \fIalen\fP,
 | 
			
		||||
.B 	struct hostent **\fIhost\fP,
 | 
			
		||||
.B      struct addrttl *\fIaddrttls\fB, int *\fInaddrttls\fB);
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_parse_a_reply
 | 
			
		||||
function parses the response to a query of type A into a
 | 
			
		||||
.BR "struct hostent"
 | 
			
		||||
and/or an array of
 | 
			
		||||
.BR "struct addrttls" . 
 | 
			
		||||
The parameters
 | 
			
		||||
.I abuf
 | 
			
		||||
and
 | 
			
		||||
.I alen
 | 
			
		||||
give the contents of the response.  The result is stored in allocated
 | 
			
		||||
memory and a pointer to it stored into the variable pointed to by
 | 
			
		||||
.IR host ,
 | 
			
		||||
if host is nonnull.
 | 
			
		||||
It is the caller's responsibility to free the resulting host structure
 | 
			
		||||
using
 | 
			
		||||
.BR ares_free_hostent (3)
 | 
			
		||||
when it is no longer needed.
 | 
			
		||||
.PP
 | 
			
		||||
If
 | 
			
		||||
.IR addrttls
 | 
			
		||||
and
 | 
			
		||||
.IR naddrttls
 | 
			
		||||
are both nonnull,
 | 
			
		||||
then up to *naddrttls
 | 
			
		||||
.BR "struct addrttl"
 | 
			
		||||
records are stored in the array pointed to by addrttls,
 | 
			
		||||
and then *naddrttls is set to the number of records so stored.
 | 
			
		||||
Note that the memory for these records is supplied by the caller.
 | 
			
		||||
.SH RETURN VALUES
 | 
			
		||||
.B ares_parse_a_reply
 | 
			
		||||
can return any of the following values:
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_SUCCESS
 | 
			
		||||
The response was successfully parsed.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_EBADRESP
 | 
			
		||||
The response was malformatted.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_ENODATA
 | 
			
		||||
The response did not contain an answer to the query.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_ENOMEM
 | 
			
		||||
Memory was exhausted.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_gethostbyname (3),
 | 
			
		||||
.BR ares_free_hostent (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Greg Hudson, MIT Information Systems
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										252
									
								
								ares/ares_parse_a_reply.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										252
									
								
								ares/ares_parse_a_reply.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,252 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_SYS_SOCKET_H
 | 
			
		||||
#  include <sys/socket.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETINET_IN_H
 | 
			
		||||
#  include <netinet/in.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETDB_H
 | 
			
		||||
#  include <netdb.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_INET_H
 | 
			
		||||
#  include <arpa/inet.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_H
 | 
			
		||||
#  include <arpa/nameser.h>
 | 
			
		||||
#else
 | 
			
		||||
#  include "nameser.h"
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
 | 
			
		||||
#  include <arpa/nameser_compat.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_STRINGS_H
 | 
			
		||||
#  include <strings.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <limits.h>
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_dns.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
int ares_parse_a_reply(const unsigned char *abuf, int alen,
 | 
			
		||||
                       struct hostent **host,
 | 
			
		||||
                       struct addrttl *addrttls, int *naddrttls)
 | 
			
		||||
{
 | 
			
		||||
  unsigned int qdcount, ancount;
 | 
			
		||||
  int status, i, rr_type, rr_class, rr_len, rr_ttl, naddrs;
 | 
			
		||||
  int cname_ttl = INT_MAX;  /* the TTL imposed by the CNAME chain */
 | 
			
		||||
  int naliases;
 | 
			
		||||
  long len;
 | 
			
		||||
  const unsigned char *aptr;
 | 
			
		||||
  char *hostname, *rr_name, *rr_data, **aliases;
 | 
			
		||||
  struct in_addr *addrs;
 | 
			
		||||
  struct hostent *hostent;
 | 
			
		||||
  const int max_addr_ttls = (addrttls && naddrttls) ? *naddrttls : 0;
 | 
			
		||||
 | 
			
		||||
  /* Set *host to NULL for all failure cases. */
 | 
			
		||||
  if (host)
 | 
			
		||||
    *host = NULL;
 | 
			
		||||
  /* Same with *naddrttls. */
 | 
			
		||||
  if (naddrttls)
 | 
			
		||||
    *naddrttls = 0;
 | 
			
		||||
 | 
			
		||||
  /* Give up if abuf doesn't have room for a header. */
 | 
			
		||||
  if (alen < HFIXEDSZ)
 | 
			
		||||
    return ARES_EBADRESP;
 | 
			
		||||
 | 
			
		||||
  /* Fetch the question and answer count from the header. */
 | 
			
		||||
  qdcount = DNS_HEADER_QDCOUNT(abuf);
 | 
			
		||||
  ancount = DNS_HEADER_ANCOUNT(abuf);
 | 
			
		||||
  if (qdcount != 1)
 | 
			
		||||
    return ARES_EBADRESP;
 | 
			
		||||
 | 
			
		||||
  /* Expand the name from the question, and skip past the question. */
 | 
			
		||||
  aptr = abuf + HFIXEDSZ;
 | 
			
		||||
  status = ares_expand_name(aptr, abuf, alen, &hostname, &len);
 | 
			
		||||
  if (status != ARES_SUCCESS)
 | 
			
		||||
    return status;
 | 
			
		||||
  if (aptr + len + QFIXEDSZ > abuf + alen)
 | 
			
		||||
    {
 | 
			
		||||
      free(hostname);
 | 
			
		||||
      return ARES_EBADRESP;
 | 
			
		||||
    }
 | 
			
		||||
  aptr += len + QFIXEDSZ;
 | 
			
		||||
 | 
			
		||||
  if (host)
 | 
			
		||||
    {
 | 
			
		||||
      /* Allocate addresses and aliases; ancount gives an upper bound for both. */
 | 
			
		||||
      addrs = malloc(ancount * sizeof(struct in_addr));
 | 
			
		||||
      if (!addrs)
 | 
			
		||||
        {
 | 
			
		||||
          free(hostname);
 | 
			
		||||
          return ARES_ENOMEM;
 | 
			
		||||
        }
 | 
			
		||||
      aliases = malloc((ancount + 1) * sizeof(char *));
 | 
			
		||||
      if (!aliases)
 | 
			
		||||
        {
 | 
			
		||||
          free(hostname);
 | 
			
		||||
          free(addrs);
 | 
			
		||||
          return ARES_ENOMEM;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      addrs = NULL;
 | 
			
		||||
      aliases = NULL;
 | 
			
		||||
    }
 | 
			
		||||
  
 | 
			
		||||
  naddrs = 0;
 | 
			
		||||
  naliases = 0;
 | 
			
		||||
 | 
			
		||||
  /* Examine each answer resource record (RR) in turn. */
 | 
			
		||||
  for (i = 0; i < (int)ancount; i++)
 | 
			
		||||
    {
 | 
			
		||||
      /* Decode the RR up to the data field. */
 | 
			
		||||
      status = ares_expand_name(aptr, abuf, alen, &rr_name, &len);
 | 
			
		||||
      if (status != ARES_SUCCESS)
 | 
			
		||||
        break;
 | 
			
		||||
      aptr += len;
 | 
			
		||||
      if (aptr + RRFIXEDSZ > abuf + alen)
 | 
			
		||||
        {
 | 
			
		||||
          status = ARES_EBADRESP;
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
      rr_type = DNS_RR_TYPE(aptr);
 | 
			
		||||
      rr_class = DNS_RR_CLASS(aptr);
 | 
			
		||||
      rr_len = DNS_RR_LEN(aptr);
 | 
			
		||||
      rr_ttl = DNS_RR_TTL(aptr);
 | 
			
		||||
      aptr += RRFIXEDSZ;
 | 
			
		||||
 | 
			
		||||
      if (rr_class == C_IN && rr_type == T_A
 | 
			
		||||
          && rr_len == sizeof(struct in_addr)
 | 
			
		||||
          && strcasecmp(rr_name, hostname) == 0)
 | 
			
		||||
        {
 | 
			
		||||
          if (addrs)
 | 
			
		||||
            {
 | 
			
		||||
              if (aptr + sizeof(struct in_addr) > abuf + alen)
 | 
			
		||||
              {
 | 
			
		||||
                status = ARES_EBADRESP;
 | 
			
		||||
                break;
 | 
			
		||||
              }
 | 
			
		||||
              memcpy(&addrs[naddrs], aptr, sizeof(struct in_addr));
 | 
			
		||||
            }
 | 
			
		||||
          if (naddrs < max_addr_ttls)
 | 
			
		||||
            {
 | 
			
		||||
              struct addrttl * const at = &addrttls[naddrs];
 | 
			
		||||
              if (aptr + sizeof(struct in_addr) > abuf + alen)
 | 
			
		||||
              {
 | 
			
		||||
                status = ARES_EBADRESP;
 | 
			
		||||
                break;
 | 
			
		||||
              }
 | 
			
		||||
              memcpy(&at->ipaddr, aptr,  sizeof(struct in_addr));
 | 
			
		||||
              at->ttl = rr_ttl;
 | 
			
		||||
            }
 | 
			
		||||
          naddrs++;
 | 
			
		||||
          status = ARES_SUCCESS;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      if (rr_class == C_IN && rr_type == T_CNAME)
 | 
			
		||||
        {
 | 
			
		||||
          /* Record the RR name as an alias. */
 | 
			
		||||
          if (aliases)
 | 
			
		||||
            aliases[naliases] = rr_name;
 | 
			
		||||
          else
 | 
			
		||||
            free(rr_name);
 | 
			
		||||
          naliases++;
 | 
			
		||||
 | 
			
		||||
          /* Decode the RR data and replace the hostname with it. */
 | 
			
		||||
          status = ares_expand_name(aptr, abuf, alen, &rr_data, &len);
 | 
			
		||||
          if (status != ARES_SUCCESS)
 | 
			
		||||
            break;
 | 
			
		||||
          free(hostname);
 | 
			
		||||
          hostname = rr_data;
 | 
			
		||||
 | 
			
		||||
          /* Take the min of the TTLs we see in the CNAME chain. */
 | 
			
		||||
          if (cname_ttl > rr_ttl)
 | 
			
		||||
            cname_ttl = rr_ttl;
 | 
			
		||||
        }
 | 
			
		||||
      else
 | 
			
		||||
        free(rr_name);
 | 
			
		||||
 | 
			
		||||
      aptr += rr_len;
 | 
			
		||||
      if (aptr > abuf + alen)
 | 
			
		||||
        {
 | 
			
		||||
          status = ARES_EBADRESP;
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (status == ARES_SUCCESS && naddrs == 0)
 | 
			
		||||
    status = ARES_ENODATA;
 | 
			
		||||
  if (status == ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      /* We got our answer. */
 | 
			
		||||
      if (naddrttls)
 | 
			
		||||
        {
 | 
			
		||||
          const int n = naddrs < max_addr_ttls ? naddrs : max_addr_ttls;
 | 
			
		||||
          for (i = 0; i < n; i++)
 | 
			
		||||
            {
 | 
			
		||||
              /* Ensure that each A TTL is no larger than the CNAME TTL. */
 | 
			
		||||
              if (addrttls[i].ttl > cname_ttl)
 | 
			
		||||
                addrttls[i].ttl = cname_ttl;
 | 
			
		||||
            }
 | 
			
		||||
          *naddrttls = n;
 | 
			
		||||
        }
 | 
			
		||||
      if (aliases)
 | 
			
		||||
        aliases[naliases] = NULL;
 | 
			
		||||
      if (host)
 | 
			
		||||
        {
 | 
			
		||||
          /* Allocate memory to build the host entry. */
 | 
			
		||||
          hostent = malloc(sizeof(struct hostent));
 | 
			
		||||
          if (hostent)
 | 
			
		||||
            {
 | 
			
		||||
              hostent->h_addr_list = malloc((naddrs + 1) * sizeof(char *));
 | 
			
		||||
              if (hostent->h_addr_list)
 | 
			
		||||
                {
 | 
			
		||||
                  /* Fill in the hostent and return successfully. */
 | 
			
		||||
                  hostent->h_name = hostname;
 | 
			
		||||
                  hostent->h_aliases = aliases;
 | 
			
		||||
                  hostent->h_addrtype = AF_INET;
 | 
			
		||||
                  hostent->h_length = sizeof(struct in_addr);
 | 
			
		||||
                  for (i = 0; i < naddrs; i++)
 | 
			
		||||
                    hostent->h_addr_list[i] = (char *) &addrs[i];
 | 
			
		||||
                  hostent->h_addr_list[naddrs] = NULL;
 | 
			
		||||
                  *host = hostent;
 | 
			
		||||
                  return ARES_SUCCESS;
 | 
			
		||||
                }
 | 
			
		||||
              free(hostent);
 | 
			
		||||
            }
 | 
			
		||||
          status = ARES_ENOMEM;
 | 
			
		||||
        }
 | 
			
		||||
     }
 | 
			
		||||
  if (aliases)
 | 
			
		||||
    {
 | 
			
		||||
      for (i = 0; i < naliases; i++)
 | 
			
		||||
        free(aliases[i]);
 | 
			
		||||
      free(aliases);
 | 
			
		||||
    }
 | 
			
		||||
  free(addrs);
 | 
			
		||||
  free(hostname);
 | 
			
		||||
  return status;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										79
									
								
								ares/ares_parse_aaaa_reply.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								ares/ares_parse_aaaa_reply.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,79 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 2005 by Dominick Meglio.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_PARSE_AAAA_REPLY 3 "10 March 2005"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_parse_aaaa_reply \- Parse a reply to a DNS query of type AAAA into a hostent
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B int ares_parse_aaaa_reply(const unsigned char *\fIabuf\fP, int \fIalen\fP,
 | 
			
		||||
.B 	struct hostent **\fIhost\fP,         
 | 
			
		||||
.B      struct addrttl *\fIaddrttls\fB, int *\fInaddrttls\fB);
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_parse_aaaa_reply
 | 
			
		||||
function parses the response to a query of type AAAA into a
 | 
			
		||||
.BR "struct hostent"
 | 
			
		||||
and/or an array of
 | 
			
		||||
.BR "struct addrttls" . 
 | 
			
		||||
The parameters
 | 
			
		||||
.I abuf
 | 
			
		||||
and
 | 
			
		||||
.I alen
 | 
			
		||||
give the contents of the response.  The result is stored in allocated
 | 
			
		||||
memory and a pointer to it stored into the variable pointed to by
 | 
			
		||||
.IR host ,
 | 
			
		||||
if host is nonnull.
 | 
			
		||||
It is the caller's responsibility to free the resulting host structure
 | 
			
		||||
using
 | 
			
		||||
.BR ares_free_hostent (3)
 | 
			
		||||
when it is no longer needed.
 | 
			
		||||
.PP
 | 
			
		||||
If
 | 
			
		||||
.IR addrttls
 | 
			
		||||
and
 | 
			
		||||
.IR naddrttls
 | 
			
		||||
are both nonnull,
 | 
			
		||||
then up to *naddrttls
 | 
			
		||||
.BR "struct addr6ttl"
 | 
			
		||||
records are stored in the array pointed to by addrttls,
 | 
			
		||||
and then *naddrttls is set to the number of records so stored.
 | 
			
		||||
Note that the memory for these records is supplied by the caller.
 | 
			
		||||
.SH RETURN VALUES
 | 
			
		||||
.B ares_parse_aaaa_reply
 | 
			
		||||
can return any of the following values:
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_SUCCESS
 | 
			
		||||
The response was successfully parsed.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_EBADRESP
 | 
			
		||||
The response was malformatted.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_ENODATA
 | 
			
		||||
The response did not contain an answer to the query.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_ENOMEM
 | 
			
		||||
Memory was exhausted.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_gethostbyname (3),
 | 
			
		||||
.BR ares_free_hostent (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Dominick Meglio
 | 
			
		||||
.br
 | 
			
		||||
Copyright 2005 by Dominick Meglio.
 | 
			
		||||
							
								
								
									
										252
									
								
								ares/ares_parse_aaaa_reply.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										252
									
								
								ares/ares_parse_aaaa_reply.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,252 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 2005 Dominick Meglio
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_SYS_SOCKET_H
 | 
			
		||||
#  include <sys/socket.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETINET_IN_H
 | 
			
		||||
#  include <netinet/in.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETDB_H
 | 
			
		||||
#  include <netdb.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_INET_H
 | 
			
		||||
#  include <arpa/inet.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_H
 | 
			
		||||
#  include <arpa/nameser.h>
 | 
			
		||||
#else
 | 
			
		||||
#  include "nameser.h"
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
 | 
			
		||||
#  include <arpa/nameser_compat.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_STRINGS_H
 | 
			
		||||
#  include <strings.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <limits.h>
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_dns.h"
 | 
			
		||||
#include "inet_net_pton.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
int ares_parse_aaaa_reply(const unsigned char *abuf, int alen,
 | 
			
		||||
                          struct hostent **host, struct addr6ttl *addrttls,
 | 
			
		||||
                          int *naddrttls)
 | 
			
		||||
{
 | 
			
		||||
  unsigned int qdcount, ancount;
 | 
			
		||||
  int status, i, rr_type, rr_class, rr_len, rr_ttl, naddrs;
 | 
			
		||||
  int cname_ttl = INT_MAX;  /* the TTL imposed by the CNAME chain */
 | 
			
		||||
  int naliases;
 | 
			
		||||
  long len;
 | 
			
		||||
  const unsigned char *aptr;
 | 
			
		||||
  char *hostname, *rr_name, *rr_data, **aliases;
 | 
			
		||||
  struct in6_addr *addrs;
 | 
			
		||||
  struct hostent *hostent;
 | 
			
		||||
  const int max_addr_ttls = (addrttls && naddrttls) ? *naddrttls : 0;
 | 
			
		||||
 | 
			
		||||
  /* Set *host to NULL for all failure cases. */
 | 
			
		||||
  if (host)
 | 
			
		||||
    *host = NULL;
 | 
			
		||||
  /* Same with *naddrttls. */
 | 
			
		||||
  if (naddrttls)
 | 
			
		||||
    *naddrttls = 0;
 | 
			
		||||
 | 
			
		||||
  /* Give up if abuf doesn't have room for a header. */
 | 
			
		||||
  if (alen < HFIXEDSZ)
 | 
			
		||||
    return ARES_EBADRESP;
 | 
			
		||||
 | 
			
		||||
  /* Fetch the question and answer count from the header. */
 | 
			
		||||
  qdcount = DNS_HEADER_QDCOUNT(abuf);
 | 
			
		||||
  ancount = DNS_HEADER_ANCOUNT(abuf);
 | 
			
		||||
  if (qdcount != 1)
 | 
			
		||||
    return ARES_EBADRESP;
 | 
			
		||||
 | 
			
		||||
  /* Expand the name from the question, and skip past the question. */
 | 
			
		||||
  aptr = abuf + HFIXEDSZ;
 | 
			
		||||
  status = ares_expand_name(aptr, abuf, alen, &hostname, &len);
 | 
			
		||||
  if (status != ARES_SUCCESS)
 | 
			
		||||
    return status;
 | 
			
		||||
  if (aptr + len + QFIXEDSZ > abuf + alen)
 | 
			
		||||
    {
 | 
			
		||||
      free(hostname);
 | 
			
		||||
      return ARES_EBADRESP;
 | 
			
		||||
    }
 | 
			
		||||
  aptr += len + QFIXEDSZ;
 | 
			
		||||
 | 
			
		||||
  /* Allocate addresses and aliases; ancount gives an upper bound for both. */
 | 
			
		||||
  if (host)
 | 
			
		||||
    {
 | 
			
		||||
      addrs = malloc(ancount * sizeof(struct in6_addr));
 | 
			
		||||
      if (!addrs)
 | 
			
		||||
        {
 | 
			
		||||
          free(hostname);
 | 
			
		||||
          return ARES_ENOMEM;
 | 
			
		||||
        }
 | 
			
		||||
      aliases = malloc((ancount + 1) * sizeof(char *));
 | 
			
		||||
      if (!aliases)
 | 
			
		||||
        {
 | 
			
		||||
          free(hostname);
 | 
			
		||||
          free(addrs);
 | 
			
		||||
          return ARES_ENOMEM;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      addrs = NULL;
 | 
			
		||||
      aliases = NULL;
 | 
			
		||||
    }
 | 
			
		||||
  naddrs = 0;
 | 
			
		||||
  naliases = 0;
 | 
			
		||||
 | 
			
		||||
  /* Examine each answer resource record (RR) in turn. */
 | 
			
		||||
  for (i = 0; i < (int)ancount; i++)
 | 
			
		||||
    {
 | 
			
		||||
      /* Decode the RR up to the data field. */
 | 
			
		||||
      status = ares_expand_name(aptr, abuf, alen, &rr_name, &len);
 | 
			
		||||
      if (status != ARES_SUCCESS)
 | 
			
		||||
        break;
 | 
			
		||||
      aptr += len;
 | 
			
		||||
      if (aptr + RRFIXEDSZ > abuf + alen)
 | 
			
		||||
        {
 | 
			
		||||
          status = ARES_EBADRESP;
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
      rr_type = DNS_RR_TYPE(aptr);
 | 
			
		||||
      rr_class = DNS_RR_CLASS(aptr);
 | 
			
		||||
      rr_len = DNS_RR_LEN(aptr);
 | 
			
		||||
      rr_ttl = DNS_RR_TTL(aptr);
 | 
			
		||||
      aptr += RRFIXEDSZ;
 | 
			
		||||
 | 
			
		||||
      if (rr_class == C_IN && rr_type == T_AAAA
 | 
			
		||||
          && rr_len == sizeof(struct in6_addr)
 | 
			
		||||
          && strcasecmp(rr_name, hostname) == 0)
 | 
			
		||||
        {
 | 
			
		||||
          if (addrs)
 | 
			
		||||
            {
 | 
			
		||||
              if (aptr + sizeof(struct in6_addr) > abuf + alen)
 | 
			
		||||
              {
 | 
			
		||||
                status = ARES_EBADRESP;
 | 
			
		||||
                break;
 | 
			
		||||
              }
 | 
			
		||||
              memcpy(&addrs[naddrs], aptr, sizeof(struct in6_addr));
 | 
			
		||||
            }
 | 
			
		||||
          if (naddrs < max_addr_ttls)
 | 
			
		||||
            {
 | 
			
		||||
              struct addr6ttl * const at = &addrttls[naddrs];
 | 
			
		||||
              if (aptr + sizeof(struct in6_addr) > abuf + alen)
 | 
			
		||||
              {
 | 
			
		||||
                status = ARES_EBADRESP;
 | 
			
		||||
                break;
 | 
			
		||||
              }
 | 
			
		||||
              memcpy(&at->ip6addr, aptr,  sizeof(struct in6_addr));
 | 
			
		||||
              at->ttl = rr_ttl;
 | 
			
		||||
            }
 | 
			
		||||
          naddrs++;
 | 
			
		||||
          status = ARES_SUCCESS;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      if (rr_class == C_IN && rr_type == T_CNAME)
 | 
			
		||||
        {
 | 
			
		||||
          /* Record the RR name as an alias. */
 | 
			
		||||
          if (aliases)
 | 
			
		||||
            aliases[naliases] = rr_name;
 | 
			
		||||
          else
 | 
			
		||||
            free(rr_name);
 | 
			
		||||
          naliases++;
 | 
			
		||||
 | 
			
		||||
          /* Decode the RR data and replace the hostname with it. */
 | 
			
		||||
          status = ares_expand_name(aptr, abuf, alen, &rr_data, &len);
 | 
			
		||||
          if (status != ARES_SUCCESS)
 | 
			
		||||
            break;
 | 
			
		||||
          free(hostname);
 | 
			
		||||
          hostname = rr_data;
 | 
			
		||||
 | 
			
		||||
          /* Take the min of the TTLs we see in the CNAME chain. */
 | 
			
		||||
          if (cname_ttl > rr_ttl)
 | 
			
		||||
            cname_ttl = rr_ttl;
 | 
			
		||||
        }
 | 
			
		||||
      else
 | 
			
		||||
        free(rr_name);
 | 
			
		||||
 | 
			
		||||
      aptr += rr_len;
 | 
			
		||||
      if (aptr > abuf + alen)
 | 
			
		||||
        {
 | 
			
		||||
          status = ARES_EBADRESP;
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (status == ARES_SUCCESS && naddrs == 0)
 | 
			
		||||
    status = ARES_ENODATA;
 | 
			
		||||
  if (status == ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      /* We got our answer. */
 | 
			
		||||
      if (naddrttls)
 | 
			
		||||
        {
 | 
			
		||||
          const int n = naddrs < max_addr_ttls ? naddrs : max_addr_ttls;
 | 
			
		||||
          for (i = 0; i < n; i++)
 | 
			
		||||
            {
 | 
			
		||||
              /* Ensure that each A TTL is no larger than the CNAME TTL. */
 | 
			
		||||
              if (addrttls[i].ttl > cname_ttl)
 | 
			
		||||
                addrttls[i].ttl = cname_ttl;
 | 
			
		||||
            }
 | 
			
		||||
          *naddrttls = n;
 | 
			
		||||
        }
 | 
			
		||||
      if (aliases)
 | 
			
		||||
        aliases[naliases] = NULL;
 | 
			
		||||
      if (host)
 | 
			
		||||
        {
 | 
			
		||||
          /* Allocate memory to build the host entry. */
 | 
			
		||||
          hostent = malloc(sizeof(struct hostent));
 | 
			
		||||
          if (hostent)
 | 
			
		||||
            {
 | 
			
		||||
              hostent->h_addr_list = malloc((naddrs + 1) * sizeof(char *));
 | 
			
		||||
              if (hostent->h_addr_list)
 | 
			
		||||
                {
 | 
			
		||||
                  /* Fill in the hostent and return successfully. */
 | 
			
		||||
                  hostent->h_name = hostname;
 | 
			
		||||
                  hostent->h_aliases = aliases;
 | 
			
		||||
                  hostent->h_addrtype = AF_INET6;
 | 
			
		||||
                  hostent->h_length = sizeof(struct in6_addr);
 | 
			
		||||
                  for (i = 0; i < naddrs; i++)
 | 
			
		||||
                    hostent->h_addr_list[i] = (char *) &addrs[i];
 | 
			
		||||
                  hostent->h_addr_list[naddrs] = NULL;
 | 
			
		||||
                  *host = hostent;
 | 
			
		||||
                  return ARES_SUCCESS;
 | 
			
		||||
                }
 | 
			
		||||
              free(hostent);
 | 
			
		||||
            }
 | 
			
		||||
          status = ARES_ENOMEM;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  if (aliases)
 | 
			
		||||
    {
 | 
			
		||||
      for (i = 0; i < naliases; i++)
 | 
			
		||||
        free(aliases[i]);
 | 
			
		||||
      free(aliases);
 | 
			
		||||
    }
 | 
			
		||||
  free(addrs);
 | 
			
		||||
  free(hostname);
 | 
			
		||||
  return status;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										66
									
								
								ares/ares_parse_ns_reply.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								ares/ares_parse_ns_reply.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,66 @@
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_PARSE_NS_REPLY 3 "10 February 2007"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_parse_ns_reply \- Parse a reply to a DNS query of type NS into a hostent
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B int ares_parse_ns_reply(const unsigned char *\fIabuf\fP, int \fIalen\fP,
 | 
			
		||||
.B 	struct hostent **\fIhost\fP);
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_parse_ns_reply
 | 
			
		||||
function parses the response to a query of type NS into a
 | 
			
		||||
.BR "struct hostent" .
 | 
			
		||||
The parameters
 | 
			
		||||
.I abuf
 | 
			
		||||
and
 | 
			
		||||
.I alen
 | 
			
		||||
give the contents of the response.  The result is stored in allocated
 | 
			
		||||
memory and a pointer to it stored into the variable pointed to by
 | 
			
		||||
.IR host . 
 | 
			
		||||
The nameservers are stored into the 
 | 
			
		||||
.BR aliases 
 | 
			
		||||
field of the 
 | 
			
		||||
.IR host 
 | 
			
		||||
structure. 
 | 
			
		||||
It is the caller's responsibility to free the resulting host structure
 | 
			
		||||
using
 | 
			
		||||
.BR ares_free_hostent (3)
 | 
			
		||||
when it is no longer needed.
 | 
			
		||||
.SH RETURN VALUES
 | 
			
		||||
.B ares_parse_ns_reply
 | 
			
		||||
can return any of the following values:
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_SUCCESS
 | 
			
		||||
The response was successfully parsed.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_EBADRESP
 | 
			
		||||
The response was malformatted.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_ENODATA
 | 
			
		||||
The response did not contain an answer to the query.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_ENOMEM
 | 
			
		||||
Memory was exhausted.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_query (3),
 | 
			
		||||
.BR ares_free_hostent (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Written by Vlad Dinulescu <vlad.dinulescu@avira.com>, on behalf of AVIRA Gmbh http://www.avira.com
 | 
			
		||||
							
								
								
									
										179
									
								
								ares/ares_parse_ns_reply.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										179
									
								
								ares/ares_parse_ns_reply.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,179 @@
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
* Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
* fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
* documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
* software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * ares_parse_ns_reply created by Vlad Dinulescu <vlad.dinulescu@avira.com>
 | 
			
		||||
 *      on behalf of AVIRA Gmbh - http://www.avira.com
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_SYS_SOCKET_H
 | 
			
		||||
#  include <sys/socket.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETINET_IN_H
 | 
			
		||||
#  include <netinet/in.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETDB_H
 | 
			
		||||
#  include <netdb.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_INET_H
 | 
			
		||||
#  include <arpa/inet.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_H
 | 
			
		||||
#  include <arpa/nameser.h>
 | 
			
		||||
#else
 | 
			
		||||
#  include "nameser.h"
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
 | 
			
		||||
#  include <arpa/nameser_compat.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_dns.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
int ares_parse_ns_reply( const unsigned char* abuf, int alen,
 | 
			
		||||
                         struct hostent** host )
 | 
			
		||||
{
 | 
			
		||||
  unsigned int qdcount, ancount;
 | 
			
		||||
  int status, i, rr_type, rr_class, rr_len;
 | 
			
		||||
  int nameservers_num;
 | 
			
		||||
  long len;
 | 
			
		||||
  const unsigned char *aptr;
 | 
			
		||||
  char* hostname, *rr_name, *rr_data, **nameservers;
 | 
			
		||||
  struct hostent *hostent;
 | 
			
		||||
 | 
			
		||||
  /* Set *host to NULL for all failure cases. */
 | 
			
		||||
  *host = NULL;
 | 
			
		||||
 | 
			
		||||
  /* Give up if abuf doesn't have room for a header. */
 | 
			
		||||
  if ( alen < HFIXEDSZ )
 | 
			
		||||
    return ARES_EBADRESP;
 | 
			
		||||
 | 
			
		||||
  /* Fetch the question and answer count from the header. */
 | 
			
		||||
  qdcount = DNS_HEADER_QDCOUNT( abuf );
 | 
			
		||||
  ancount = DNS_HEADER_ANCOUNT( abuf );
 | 
			
		||||
  if ( qdcount != 1 )
 | 
			
		||||
    return ARES_EBADRESP;
 | 
			
		||||
 | 
			
		||||
  /* Expand the name from the question, and skip past the question. */
 | 
			
		||||
  aptr = abuf + HFIXEDSZ;
 | 
			
		||||
  status = ares_expand_name( aptr, abuf, alen, &hostname, &len );
 | 
			
		||||
  if ( status != ARES_SUCCESS )
 | 
			
		||||
    return status;
 | 
			
		||||
  if ( aptr + len + QFIXEDSZ > abuf + alen )
 | 
			
		||||
  {
 | 
			
		||||
    free( hostname );
 | 
			
		||||
    return ARES_EBADRESP;
 | 
			
		||||
  }
 | 
			
		||||
  aptr += len + QFIXEDSZ;
 | 
			
		||||
 | 
			
		||||
  /* Allocate nameservers array; ancount gives an upper bound */
 | 
			
		||||
  nameservers = malloc( ( ancount + 1 ) * sizeof( char * ) );
 | 
			
		||||
  if ( !nameservers )
 | 
			
		||||
  {
 | 
			
		||||
    free( hostname );
 | 
			
		||||
    return ARES_ENOMEM;
 | 
			
		||||
  }
 | 
			
		||||
  nameservers_num = 0;
 | 
			
		||||
 | 
			
		||||
  /* Examine each answer resource record (RR) in turn. */
 | 
			
		||||
  for ( i = 0; i < ( int ) ancount; i++ )
 | 
			
		||||
  {
 | 
			
		||||
    /* Decode the RR up to the data field. */
 | 
			
		||||
    status = ares_expand_name( aptr, abuf, alen, &rr_name, &len );
 | 
			
		||||
    if ( status != ARES_SUCCESS )
 | 
			
		||||
      break;
 | 
			
		||||
    aptr += len;
 | 
			
		||||
    if ( aptr + RRFIXEDSZ > abuf + alen )
 | 
			
		||||
    {
 | 
			
		||||
      status = ARES_EBADRESP;
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
    rr_type = DNS_RR_TYPE( aptr );
 | 
			
		||||
    rr_class = DNS_RR_CLASS( aptr );
 | 
			
		||||
    rr_len = DNS_RR_LEN( aptr );
 | 
			
		||||
    aptr += RRFIXEDSZ;
 | 
			
		||||
 | 
			
		||||
    if ( rr_class == C_IN && rr_type == T_NS )
 | 
			
		||||
    {
 | 
			
		||||
      /* Decode the RR data and add it to the nameservers list */
 | 
			
		||||
      status = ares_expand_name( aptr, abuf, alen, &rr_data, &len );
 | 
			
		||||
      if ( status != ARES_SUCCESS )
 | 
			
		||||
      {
 | 
			
		||||
        break;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      nameservers[nameservers_num] = malloc(strlen(rr_data)+1);
 | 
			
		||||
 | 
			
		||||
      if (nameservers[nameservers_num]==NULL)
 | 
			
		||||
      {
 | 
			
		||||
        free(rr_name);
 | 
			
		||||
        free(rr_data);
 | 
			
		||||
        status=ARES_ENOMEM;
 | 
			
		||||
        break;
 | 
			
		||||
      }
 | 
			
		||||
      strcpy(nameservers[nameservers_num],rr_data);
 | 
			
		||||
      free(rr_data);
 | 
			
		||||
 | 
			
		||||
      nameservers_num++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    free( rr_name );
 | 
			
		||||
 | 
			
		||||
    aptr += rr_len;
 | 
			
		||||
    if ( aptr > abuf + alen )
 | 
			
		||||
    {
 | 
			
		||||
      status = ARES_EBADRESP;
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if ( status == ARES_SUCCESS && nameservers_num == 0 )
 | 
			
		||||
  {
 | 
			
		||||
    status = ARES_ENODATA;
 | 
			
		||||
  }
 | 
			
		||||
  if ( status == ARES_SUCCESS )
 | 
			
		||||
  {
 | 
			
		||||
    /* We got our answer.  Allocate memory to build the host entry. */
 | 
			
		||||
    nameservers[nameservers_num] = NULL;
 | 
			
		||||
    hostent = malloc( sizeof( struct hostent ) );
 | 
			
		||||
    if ( hostent )
 | 
			
		||||
    {
 | 
			
		||||
      hostent->h_addr_list = malloc( 1 * sizeof( char * ) );
 | 
			
		||||
      if ( hostent->h_addr_list )
 | 
			
		||||
      {
 | 
			
		||||
        /* Fill in the hostent and return successfully. */
 | 
			
		||||
        hostent->h_name = hostname;
 | 
			
		||||
        hostent->h_aliases = nameservers;
 | 
			
		||||
        hostent->h_addrtype = AF_INET;
 | 
			
		||||
        hostent->h_length = sizeof( struct in_addr );
 | 
			
		||||
        hostent->h_addr_list[0] = NULL;
 | 
			
		||||
        *host = hostent;
 | 
			
		||||
        return ARES_SUCCESS;
 | 
			
		||||
      }
 | 
			
		||||
      free( hostent );
 | 
			
		||||
    }
 | 
			
		||||
    status = ARES_ENOMEM;
 | 
			
		||||
  }
 | 
			
		||||
  for ( i = 0; i < nameservers_num; i++ )
 | 
			
		||||
    free( nameservers[i] );
 | 
			
		||||
  free( nameservers );
 | 
			
		||||
  free( hostname );
 | 
			
		||||
  return status;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										75
									
								
								ares/ares_parse_ptr_reply.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								ares/ares_parse_ptr_reply.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,75 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_PARSE_PTR_REPLY 3 "25 July 1998"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_parse_ptr_reply \- Parse a reply to a DNS query of type PTR into a hostent
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B int ares_parse_ptr_reply(const unsigned char *\fIabuf\fP, int \fIalen\fP,
 | 
			
		||||
.B 	const void *\fIaddr\fP, int \fIaddrlen\fP, int \fIfamily\fP,
 | 
			
		||||
.B	struct hostent **\fIhost\fP);
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_parse_ptr_reply
 | 
			
		||||
function parses the response to a query of type PTR into a
 | 
			
		||||
.BR "struct hostent" .
 | 
			
		||||
The parameters
 | 
			
		||||
.I abuf
 | 
			
		||||
and
 | 
			
		||||
.I alen
 | 
			
		||||
give the contents of the response.  The parameters
 | 
			
		||||
.IR addr ,
 | 
			
		||||
.IR addrlen ,
 | 
			
		||||
and
 | 
			
		||||
.I family
 | 
			
		||||
specify which address was queried for; they are not used to verify the
 | 
			
		||||
response, merely used to fill in the address of the
 | 
			
		||||
.BR "struct hostent" .
 | 
			
		||||
The resulting
 | 
			
		||||
.B struct hostent
 | 
			
		||||
is stored in allocated memory and a pointer to it stored into the
 | 
			
		||||
variable pointed to by
 | 
			
		||||
.IR host .
 | 
			
		||||
It is the caller's responsibility to free the resulting host structure
 | 
			
		||||
using
 | 
			
		||||
.BR ares_free_hostent (3)
 | 
			
		||||
when it is no longer needed.
 | 
			
		||||
.SH RETURN VALUES
 | 
			
		||||
.B ares_parse_ptr_reply
 | 
			
		||||
can return any of the following values:
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_SUCCESS
 | 
			
		||||
The response was successfully parsed.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_EBADRESP
 | 
			
		||||
The response was malformatted.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_ENODATA
 | 
			
		||||
The response did not contain an answer to the query.
 | 
			
		||||
.TP 15
 | 
			
		||||
.B ARES_ENOMEM
 | 
			
		||||
Memory was exhausted.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_gethostbyaddr (3),
 | 
			
		||||
.BR ares_free_hostent (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Greg Hudson, MIT Information Systems
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										207
									
								
								ares/ares_parse_ptr_reply.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										207
									
								
								ares/ares_parse_ptr_reply.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,207 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_SYS_SOCKET_H
 | 
			
		||||
#  include <sys/socket.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETINET_IN_H
 | 
			
		||||
#  include <netinet/in.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETDB_H
 | 
			
		||||
#  include <netdb.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_H
 | 
			
		||||
#  include <arpa/nameser.h>
 | 
			
		||||
#else
 | 
			
		||||
#  include "nameser.h"
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
 | 
			
		||||
#  include <arpa/nameser_compat.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_STRINGS_H
 | 
			
		||||
#  include <strings.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_dns.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
 | 
			
		||||
                         int addrlen, int family, struct hostent **host)
 | 
			
		||||
{
 | 
			
		||||
  unsigned int qdcount, ancount;
 | 
			
		||||
  int status, i, rr_type, rr_class, rr_len;
 | 
			
		||||
  long len;
 | 
			
		||||
  const unsigned char *aptr;
 | 
			
		||||
  char *ptrname, *hostname, *rr_name, *rr_data;
 | 
			
		||||
  struct hostent *hostent;
 | 
			
		||||
  int aliascnt = 0;
 | 
			
		||||
  int alias_alloc = 8;
 | 
			
		||||
  char ** aliases;
 | 
			
		||||
 | 
			
		||||
  /* Set *host to NULL for all failure cases. */
 | 
			
		||||
  *host = NULL;
 | 
			
		||||
 | 
			
		||||
  /* Give up if abuf doesn't have room for a header. */
 | 
			
		||||
  if (alen < HFIXEDSZ)
 | 
			
		||||
    return ARES_EBADRESP;
 | 
			
		||||
 | 
			
		||||
  /* Fetch the question and answer count from the header. */
 | 
			
		||||
  qdcount = DNS_HEADER_QDCOUNT(abuf);
 | 
			
		||||
  ancount = DNS_HEADER_ANCOUNT(abuf);
 | 
			
		||||
  if (qdcount != 1)
 | 
			
		||||
    return ARES_EBADRESP;
 | 
			
		||||
 | 
			
		||||
  /* Expand the name from the question, and skip past the question. */
 | 
			
		||||
  aptr = abuf + HFIXEDSZ;
 | 
			
		||||
  status = ares_expand_name(aptr, abuf, alen, &ptrname, &len);
 | 
			
		||||
  if (status != ARES_SUCCESS)
 | 
			
		||||
    return status;
 | 
			
		||||
  if (aptr + len + QFIXEDSZ > abuf + alen)
 | 
			
		||||
    {
 | 
			
		||||
      free(ptrname);
 | 
			
		||||
      return ARES_EBADRESP;
 | 
			
		||||
    }
 | 
			
		||||
  aptr += len + QFIXEDSZ;
 | 
			
		||||
 | 
			
		||||
  /* Examine each answer resource record (RR) in turn. */
 | 
			
		||||
  hostname = NULL;
 | 
			
		||||
  aliases = malloc(alias_alloc * sizeof(char *));
 | 
			
		||||
  if (!aliases)
 | 
			
		||||
    {
 | 
			
		||||
      free(ptrname);
 | 
			
		||||
      return ARES_ENOMEM;
 | 
			
		||||
    }
 | 
			
		||||
  for (i = 0; i < (int)ancount; i++)
 | 
			
		||||
    {
 | 
			
		||||
      /* Decode the RR up to the data field. */
 | 
			
		||||
      status = ares_expand_name(aptr, abuf, alen, &rr_name, &len);
 | 
			
		||||
      if (status != ARES_SUCCESS)
 | 
			
		||||
        break;
 | 
			
		||||
      aptr += len;
 | 
			
		||||
      if (aptr + RRFIXEDSZ > abuf + alen)
 | 
			
		||||
        {
 | 
			
		||||
          status = ARES_EBADRESP;
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
      rr_type = DNS_RR_TYPE(aptr);
 | 
			
		||||
      rr_class = DNS_RR_CLASS(aptr);
 | 
			
		||||
      rr_len = DNS_RR_LEN(aptr);
 | 
			
		||||
      aptr += RRFIXEDSZ;
 | 
			
		||||
 | 
			
		||||
      if (rr_class == C_IN && rr_type == T_PTR
 | 
			
		||||
          && strcasecmp(rr_name, ptrname) == 0)
 | 
			
		||||
        {
 | 
			
		||||
          /* Decode the RR data and set hostname to it. */
 | 
			
		||||
          status = ares_expand_name(aptr, abuf, alen, &rr_data, &len);
 | 
			
		||||
          if (status != ARES_SUCCESS)
 | 
			
		||||
            break;
 | 
			
		||||
          if (hostname)
 | 
			
		||||
            free(hostname);
 | 
			
		||||
          hostname = rr_data;
 | 
			
		||||
          aliases[aliascnt] = malloc((strlen(rr_data)+1) * sizeof(char *));
 | 
			
		||||
          if (!aliases[aliascnt])
 | 
			
		||||
            {
 | 
			
		||||
              status = ARES_ENOMEM;
 | 
			
		||||
              break;
 | 
			
		||||
            }
 | 
			
		||||
          strncpy(aliases[aliascnt], rr_data, strlen(rr_data)+1);
 | 
			
		||||
          aliascnt++;
 | 
			
		||||
          if (aliascnt >= alias_alloc) {
 | 
			
		||||
            char **ptr;
 | 
			
		||||
            alias_alloc *= 2;
 | 
			
		||||
            ptr = realloc(aliases, alias_alloc * sizeof(char *));
 | 
			
		||||
            if(!ptr) {
 | 
			
		||||
              status = ARES_ENOMEM;
 | 
			
		||||
              break;
 | 
			
		||||
            }
 | 
			
		||||
            aliases = ptr;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      if (rr_class == C_IN && rr_type == T_CNAME)
 | 
			
		||||
        {
 | 
			
		||||
          /* Decode the RR data and replace ptrname with it. */
 | 
			
		||||
          status = ares_expand_name(aptr, abuf, alen, &rr_data, &len);
 | 
			
		||||
          if (status != ARES_SUCCESS)
 | 
			
		||||
            break;
 | 
			
		||||
          free(ptrname);
 | 
			
		||||
          ptrname = rr_data;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      free(rr_name);
 | 
			
		||||
      aptr += rr_len;
 | 
			
		||||
      if (aptr > abuf + alen)
 | 
			
		||||
        {
 | 
			
		||||
          status = ARES_EBADRESP;
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (status == ARES_SUCCESS && !hostname)
 | 
			
		||||
    status = ARES_ENODATA;
 | 
			
		||||
  if (status == ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      /* We got our answer.  Allocate memory to build the host entry. */
 | 
			
		||||
      hostent = malloc(sizeof(struct hostent));
 | 
			
		||||
      if (hostent)
 | 
			
		||||
        {
 | 
			
		||||
          hostent->h_addr_list = malloc(2 * sizeof(char *));
 | 
			
		||||
          if (hostent->h_addr_list)
 | 
			
		||||
            {
 | 
			
		||||
              hostent->h_addr_list[0] = malloc(addrlen);
 | 
			
		||||
              if (hostent->h_addr_list[0])
 | 
			
		||||
                {
 | 
			
		||||
                  hostent->h_aliases = malloc((aliascnt+1) * sizeof (char *));
 | 
			
		||||
                  if (hostent->h_aliases)
 | 
			
		||||
                    {
 | 
			
		||||
                      /* Fill in the hostent and return successfully. */
 | 
			
		||||
                      hostent->h_name = hostname;
 | 
			
		||||
                      for (i=0 ; i<aliascnt ; i++)
 | 
			
		||||
                        hostent->h_aliases[i] = aliases[i];
 | 
			
		||||
                      hostent->h_aliases[aliascnt] = NULL;
 | 
			
		||||
                      hostent->h_addrtype = family;
 | 
			
		||||
                      hostent->h_length = addrlen;
 | 
			
		||||
                      memcpy(hostent->h_addr_list[0], addr, addrlen);
 | 
			
		||||
                      hostent->h_addr_list[1] = NULL;
 | 
			
		||||
                      *host = hostent;
 | 
			
		||||
                      free(aliases);
 | 
			
		||||
                      free(ptrname);
 | 
			
		||||
                      return ARES_SUCCESS;
 | 
			
		||||
                    }
 | 
			
		||||
                  free(hostent->h_addr_list[0]);
 | 
			
		||||
                }
 | 
			
		||||
              free(hostent->h_addr_list);
 | 
			
		||||
            }
 | 
			
		||||
          free(hostent);
 | 
			
		||||
        }
 | 
			
		||||
      status = ARES_ENOMEM;
 | 
			
		||||
    }
 | 
			
		||||
  for (i=0 ; i<aliascnt ; i++)
 | 
			
		||||
    if (aliases[i]) 
 | 
			
		||||
      free(aliases[i]);
 | 
			
		||||
  free(aliases);
 | 
			
		||||
  if (hostname)
 | 
			
		||||
    free(hostname);
 | 
			
		||||
  free(ptrname);
 | 
			
		||||
  return status;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										343
									
								
								ares/ares_private.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										343
									
								
								ares/ares_private.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,343 @@
 | 
			
		||||
#ifndef __ARES_PRIVATE_H
 | 
			
		||||
#define __ARES_PRIVATE_H
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 * Copyright (C) 2004-2008 by Daniel Stenberg
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Define WIN32 when build target is Win32 API
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32)
 | 
			
		||||
#define WIN32
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
 | 
			
		||||
#if !defined(WIN32) || defined(WATT32)
 | 
			
		||||
#include <netinet/in.h>
 | 
			
		||||
/* We define closesocket() here so that we can use this function all over
 | 
			
		||||
   the source code for closing sockets. */
 | 
			
		||||
#define closesocket(x) close(x)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef WATT32
 | 
			
		||||
#include <tcp.h>
 | 
			
		||||
#include <sys/ioctl.h>
 | 
			
		||||
#undef  closesocket
 | 
			
		||||
#define closesocket(s)    close_s(s)
 | 
			
		||||
#define writev(s,v,c)     writev_s(s,v,c)
 | 
			
		||||
#define HAVE_WRITEV 1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef NETWARE
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define DEFAULT_TIMEOUT         5000 /* milliseconds */
 | 
			
		||||
#define DEFAULT_TRIES           4
 | 
			
		||||
#ifndef INADDR_NONE
 | 
			
		||||
#define INADDR_NONE 0xffffffff
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(WIN32) && !defined(WATT32)
 | 
			
		||||
 | 
			
		||||
#define IS_NT()        ((int)GetVersion() > 0)
 | 
			
		||||
#define WIN_NS_9X      "System\\CurrentControlSet\\Services\\VxD\\MSTCP"
 | 
			
		||||
#define WIN_NS_NT_KEY  "System\\CurrentControlSet\\Services\\Tcpip\\Parameters"
 | 
			
		||||
#define NAMESERVER     "NameServer"
 | 
			
		||||
#define DHCPNAMESERVER "DhcpNameServer"
 | 
			
		||||
#define DATABASEPATH   "DatabasePath"
 | 
			
		||||
#define WIN_PATH_HOSTS  "\\hosts"
 | 
			
		||||
 | 
			
		||||
#elif defined(WATT32)
 | 
			
		||||
 | 
			
		||||
#define PATH_RESOLV_CONF "/dev/ENV/etc/resolv.conf"
 | 
			
		||||
 | 
			
		||||
#elif defined(NETWARE)
 | 
			
		||||
 | 
			
		||||
#define PATH_RESOLV_CONF "sys:/etc/resolv.cfg"
 | 
			
		||||
#define PATH_HOSTS              "sys:/etc/hosts"
 | 
			
		||||
 | 
			
		||||
#elif defined(__riscos__)
 | 
			
		||||
 | 
			
		||||
#define PATH_HOSTS             "InetDBase:Hosts"
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
#define PATH_RESOLV_CONF        "/etc/resolv.conf"
 | 
			
		||||
#ifdef ETC_INET
 | 
			
		||||
#define PATH_HOSTS              "/etc/inet/hosts"
 | 
			
		||||
#else
 | 
			
		||||
#define PATH_HOSTS              "/etc/hosts"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define ARES_ID_KEY_LEN 31
 | 
			
		||||
 | 
			
		||||
#include "ares_ipv6.h"
 | 
			
		||||
#include "ares_llist.h"
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_STRDUP
 | 
			
		||||
#  include "ares_strdup.h"
 | 
			
		||||
#  define strdup(ptr) ares_strdup(ptr)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_STRCASECMP
 | 
			
		||||
#  include "ares_strcasecmp.h"
 | 
			
		||||
#  define strcasecmp(p1,p2) ares_strcasecmp(p1,p2)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_STRNCASECMP
 | 
			
		||||
#  include "ares_strcasecmp.h"
 | 
			
		||||
#  define strncasecmp(p1,p2,n) ares_strncasecmp(p1,p2,n)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_WRITEV
 | 
			
		||||
#  include "ares_writev.h"
 | 
			
		||||
#  define writev(s,ptr,cnt) ares_writev(s,ptr,cnt)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
struct ares_addr {
 | 
			
		||||
  int family;
 | 
			
		||||
  union {
 | 
			
		||||
    struct in_addr  addr4;
 | 
			
		||||
    struct in6_addr addr6;
 | 
			
		||||
  } addr;
 | 
			
		||||
};
 | 
			
		||||
#define addrV4 addr.addr4
 | 
			
		||||
#define addrV6 addr.addr6
 | 
			
		||||
 | 
			
		||||
struct query;
 | 
			
		||||
 | 
			
		||||
struct send_request {
 | 
			
		||||
  /* Remaining data to send */
 | 
			
		||||
  const unsigned char *data;
 | 
			
		||||
  size_t len;
 | 
			
		||||
 | 
			
		||||
  /* The query for which we're sending this data */
 | 
			
		||||
  struct query* owner_query;
 | 
			
		||||
  /* The buffer we're using, if we have our own copy of the packet */
 | 
			
		||||
  unsigned char *data_storage;
 | 
			
		||||
 | 
			
		||||
  /* Next request in queue */
 | 
			
		||||
  struct send_request *next;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct server_state {
 | 
			
		||||
  struct in_addr addr;
 | 
			
		||||
  ares_socket_t udp_socket;
 | 
			
		||||
  ares_socket_t tcp_socket;
 | 
			
		||||
 | 
			
		||||
  /* Mini-buffer for reading the length word */
 | 
			
		||||
  unsigned char tcp_lenbuf[2];
 | 
			
		||||
  int tcp_lenbuf_pos;
 | 
			
		||||
  int tcp_length;
 | 
			
		||||
 | 
			
		||||
  /* Buffer for reading actual TCP data */
 | 
			
		||||
  unsigned char *tcp_buffer;
 | 
			
		||||
  int tcp_buffer_pos;
 | 
			
		||||
 | 
			
		||||
  /* TCP output queue */
 | 
			
		||||
  struct send_request *qhead;
 | 
			
		||||
  struct send_request *qtail;
 | 
			
		||||
 | 
			
		||||
  /* Which incarnation of this connection is this? We don't want to
 | 
			
		||||
   * retransmit requests into the very same socket, but if the server
 | 
			
		||||
   * closes on us and we re-open the connection, then we do want to
 | 
			
		||||
   * re-send. */
 | 
			
		||||
  int tcp_connection_generation;
 | 
			
		||||
 | 
			
		||||
  /* Circular, doubly-linked list of outstanding queries to this server */
 | 
			
		||||
  struct list_node queries_to_server;
 | 
			
		||||
 | 
			
		||||
  /* Link back to owning channel */
 | 
			
		||||
  ares_channel channel;
 | 
			
		||||
 | 
			
		||||
  /* Is this server broken? We mark connections as broken when a
 | 
			
		||||
   * request that is queued for sending times out.
 | 
			
		||||
   */
 | 
			
		||||
  int is_broken;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* State to represent a DNS query */
 | 
			
		||||
struct query {
 | 
			
		||||
  /* Query ID from qbuf, for faster lookup, and current timeout */
 | 
			
		||||
  unsigned short qid;
 | 
			
		||||
  struct timeval timeout;
 | 
			
		||||
 | 
			
		||||
  /*
 | 
			
		||||
   * Links for the doubly-linked lists in which we insert a query.
 | 
			
		||||
   * These circular, doubly-linked lists that are hash-bucketed based
 | 
			
		||||
   * the attributes we care about, help making most important
 | 
			
		||||
   * operations O(1).
 | 
			
		||||
   */
 | 
			
		||||
  struct list_node queries_by_qid;    /* hopefully in same cache line as qid */
 | 
			
		||||
  struct list_node queries_by_timeout;
 | 
			
		||||
  struct list_node queries_to_server;
 | 
			
		||||
  struct list_node all_queries;
 | 
			
		||||
 | 
			
		||||
  /* Query buf with length at beginning, for TCP transmission */
 | 
			
		||||
  unsigned char *tcpbuf;
 | 
			
		||||
  int tcplen;
 | 
			
		||||
 | 
			
		||||
  /* Arguments passed to ares_send() (qbuf points into tcpbuf) */
 | 
			
		||||
  const unsigned char *qbuf;
 | 
			
		||||
  int qlen;
 | 
			
		||||
  ares_callback callback;
 | 
			
		||||
  void *arg;
 | 
			
		||||
 | 
			
		||||
  /* Query status */
 | 
			
		||||
  int try; /* Number of times we tried this query already. */
 | 
			
		||||
  int server; /* Server this query has last been sent to. */
 | 
			
		||||
  struct query_server_info *server_info;   /* per-server state */
 | 
			
		||||
  int using_tcp;
 | 
			
		||||
  int error_status;
 | 
			
		||||
  int timeouts; /* number of timeouts we saw for this request */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Per-server state for a query */
 | 
			
		||||
struct query_server_info {
 | 
			
		||||
  int skip_server;  /* should we skip server, due to errors, etc? */
 | 
			
		||||
  int tcp_connection_generation;  /* into which TCP connection did we send? */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* An IP address pattern; matches an IP address X if X & mask == addr */
 | 
			
		||||
#define PATTERN_MASK 0x1
 | 
			
		||||
#define PATTERN_CIDR 0x2
 | 
			
		||||
 | 
			
		||||
struct apattern {
 | 
			
		||||
  union
 | 
			
		||||
  {
 | 
			
		||||
    struct in_addr  addr4;
 | 
			
		||||
    struct in6_addr addr6;
 | 
			
		||||
  } addr;
 | 
			
		||||
  union
 | 
			
		||||
  {
 | 
			
		||||
    struct in_addr  addr4;
 | 
			
		||||
    struct in6_addr addr6;
 | 
			
		||||
    unsigned short  bits;
 | 
			
		||||
  } mask;
 | 
			
		||||
  int family;
 | 
			
		||||
  unsigned short type;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef struct rc4_key
 | 
			
		||||
{
 | 
			
		||||
  unsigned char state[256];
 | 
			
		||||
  unsigned char x;
 | 
			
		||||
  unsigned char y;
 | 
			
		||||
} rc4_key;
 | 
			
		||||
 | 
			
		||||
struct ares_channeldata {
 | 
			
		||||
  /* Configuration data */
 | 
			
		||||
  int flags;
 | 
			
		||||
  int timeout; /* in milliseconds */
 | 
			
		||||
  int tries;
 | 
			
		||||
  int ndots;
 | 
			
		||||
  int rotate; /* if true, all servers specified are used */
 | 
			
		||||
  int udp_port;
 | 
			
		||||
  int tcp_port;
 | 
			
		||||
  int socket_send_buffer_size;
 | 
			
		||||
  int socket_receive_buffer_size;
 | 
			
		||||
  char **domains;
 | 
			
		||||
  int ndomains;
 | 
			
		||||
  struct apattern *sortlist;
 | 
			
		||||
  int nsort;
 | 
			
		||||
  char *lookups;
 | 
			
		||||
 | 
			
		||||
  int optmask; /* the option bitfield passed in at init time */
 | 
			
		||||
 | 
			
		||||
  /* Server addresses and communications state */
 | 
			
		||||
  struct server_state *servers;
 | 
			
		||||
  int nservers;
 | 
			
		||||
 | 
			
		||||
  /* ID to use for next query */
 | 
			
		||||
  unsigned short next_id;
 | 
			
		||||
  /* key to use when generating new ids */
 | 
			
		||||
  rc4_key id_key;
 | 
			
		||||
 | 
			
		||||
  /* Generation number to use for the next TCP socket open/close */
 | 
			
		||||
  int tcp_connection_generation;
 | 
			
		||||
 | 
			
		||||
  /* The time at which we last called process_timeouts(). Uses integer seconds
 | 
			
		||||
     just to draw the line somewhere. */
 | 
			
		||||
  time_t last_timeout_processed;
 | 
			
		||||
 | 
			
		||||
  /* Last server we sent a query to. */
 | 
			
		||||
  int last_server;
 | 
			
		||||
 | 
			
		||||
  /* Circular, doubly-linked list of queries, bucketed various ways.... */
 | 
			
		||||
  /* All active queries in a single list: */
 | 
			
		||||
  struct list_node all_queries;
 | 
			
		||||
  /* Queries bucketed by qid, for quickly dispatching DNS responses: */
 | 
			
		||||
#define ARES_QID_TABLE_SIZE 2048
 | 
			
		||||
  struct list_node queries_by_qid[ARES_QID_TABLE_SIZE];
 | 
			
		||||
  /* Queries bucketed by timeout, for quickly handling timeouts: */
 | 
			
		||||
#define ARES_TIMEOUT_TABLE_SIZE 1024
 | 
			
		||||
  struct list_node queries_by_timeout[ARES_TIMEOUT_TABLE_SIZE];
 | 
			
		||||
 | 
			
		||||
  ares_sock_state_cb sock_state_cb;
 | 
			
		||||
  void *sock_state_cb_data;
 | 
			
		||||
 | 
			
		||||
  ares_sock_create_callback sock_create_cb;
 | 
			
		||||
  void *sock_create_cb_data;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* return true if now is exactly check time or later */
 | 
			
		||||
int ares__timedout(struct timeval *now,
 | 
			
		||||
                   struct timeval *check);
 | 
			
		||||
/* add the specific number of milliseconds to the time in the first argument */
 | 
			
		||||
int ares__timeadd(struct timeval *now,
 | 
			
		||||
                  int millisecs);
 | 
			
		||||
/* return time offset between now and (future) check, in milliseconds */
 | 
			
		||||
long ares__timeoffset(struct timeval *now,
 | 
			
		||||
                      struct timeval *check);
 | 
			
		||||
void ares__rc4(rc4_key* key,unsigned char *buffer_ptr, int buffer_len);
 | 
			
		||||
void ares__send_query(ares_channel channel, struct query *query,
 | 
			
		||||
                      struct timeval *now);
 | 
			
		||||
void ares__close_sockets(ares_channel channel, struct server_state *server);
 | 
			
		||||
int ares__get_hostent(FILE *fp, int family, struct hostent **host);
 | 
			
		||||
int ares__read_line(FILE *fp, char **buf, int *bufsize);
 | 
			
		||||
void ares__free_query(struct query *query);
 | 
			
		||||
unsigned short ares__generate_new_id(rc4_key* key);
 | 
			
		||||
struct timeval ares__tvnow(void);
 | 
			
		||||
#if 0 /* Not used */
 | 
			
		||||
long ares__tvdiff(struct timeval t1, struct timeval t2);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define ARES_SWAP_BYTE(a,b) \
 | 
			
		||||
  { unsigned char swapByte = *(a);  *(a) = *(b);  *(b) = swapByte; }
 | 
			
		||||
 | 
			
		||||
#define SOCK_STATE_CALLBACK(c, s, r, w)                                 \
 | 
			
		||||
  do {                                                                  \
 | 
			
		||||
    if ((c)->sock_state_cb)                                             \
 | 
			
		||||
      (c)->sock_state_cb((c)->sock_state_cb_data, (s), (r), (w));       \
 | 
			
		||||
  } while (0)
 | 
			
		||||
 | 
			
		||||
#ifdef CURLDEBUG
 | 
			
		||||
/* This is low-level hard-hacking memory leak tracking and similar. Using the
 | 
			
		||||
   libcurl lowlevel code from within library is ugly and only works when
 | 
			
		||||
   c-ares is built and linked with a similarly debug-build libcurl, but we do
 | 
			
		||||
   this anyway for convenience. */
 | 
			
		||||
#include "../lib/memdebug.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __ARES_PRIVATE_H */
 | 
			
		||||
							
								
								
									
										81
									
								
								ares/ares_process.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								ares/ares_process.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,81 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_PROCESS 3 "25 July 1998"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_process \- Process events for name resolution
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B void ares_process(ares_channel \fIchannel\fP, fd_set *\fIread_fds\fP,
 | 
			
		||||
.B	fd_set *\fIwrite_fds\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.PP
 | 
			
		||||
.B void ares_process_fd(ares_channel \fIchannel\fP,
 | 
			
		||||
.B      ares_socket_t \fIread_fd\fP,
 | 
			
		||||
.B	ares_socket_t \fIwrite_fd\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The \fBares_process(3)\fP function handles input/output events and timeouts
 | 
			
		||||
associated with queries pending on the name service channel identified by
 | 
			
		||||
.IR channel .
 | 
			
		||||
The file descriptor sets pointed to by \fIread_fds\fP and \fIwrite_fds\fP
 | 
			
		||||
should have file descriptors set in them according to whether the file
 | 
			
		||||
descriptors specified by \fIares_fds(3)\fP are ready for reading and writing.
 | 
			
		||||
(The easiest way to determine this information is to invoke
 | 
			
		||||
.B select
 | 
			
		||||
with a timeout no greater than the timeout given by \fIares_timeout(3)\fP ).
 | 
			
		||||
.PP
 | 
			
		||||
The
 | 
			
		||||
.B ares_process
 | 
			
		||||
function will invoke callbacks for pending queries if they complete
 | 
			
		||||
successfully or fail.
 | 
			
		||||
 | 
			
		||||
\fBares_process_fd(3)\fP works the same way but acts and operates only on the
 | 
			
		||||
specific file descriptors (sockets) you pass in to the function. Use
 | 
			
		||||
ARES_SOCKET_BAD for "no action". This function is of course provided to allow
 | 
			
		||||
users of c-ares to void select() in their applications and within c-ares.
 | 
			
		||||
.SS EXAMPLE
 | 
			
		||||
The following code fragment waits for all pending queries on a channel
 | 
			
		||||
to complete:
 | 
			
		||||
.PP
 | 
			
		||||
.RS
 | 
			
		||||
.nf
 | 
			
		||||
int nfds, count;
 | 
			
		||||
fd_set readers, writers;
 | 
			
		||||
struct timeval tv, *tvp;
 | 
			
		||||
 | 
			
		||||
while (1)
 | 
			
		||||
  {
 | 
			
		||||
    FD_ZERO(&readers);
 | 
			
		||||
    FD_ZERO(&writers);
 | 
			
		||||
    nfds = ares_fds(channel, &readers, &writers);
 | 
			
		||||
    if (nfds == 0)
 | 
			
		||||
      break;
 | 
			
		||||
    tvp = ares_timeout(channel, NULL, &tv);
 | 
			
		||||
    count = select(nfds, &readers, &writers, NULL, tvp);
 | 
			
		||||
    ares_process(channel, &readers, &writers);
 | 
			
		||||
  }
 | 
			
		||||
.fi
 | 
			
		||||
.RE
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_fds (3),
 | 
			
		||||
.BR ares_timeout (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Greg Hudson, MIT Information Systems
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										1167
									
								
								ares/ares_process.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1167
									
								
								ares/ares_process.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										147
									
								
								ares/ares_query.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										147
									
								
								ares/ares_query.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,147 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_QUERY 3 "24 July 1998"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_query \- Initiate a single-question DNS query
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B typedef void (*ares_callback)(void *\fIarg\fP, int \fIstatus\fP,
 | 
			
		||||
.B	int \fItimeouts\fP, unsigned char *\fIabuf\fP, int \fIalen\fP)
 | 
			
		||||
.PP
 | 
			
		||||
.B void ares_query(ares_channel \fIchannel\fP, const char *\fIname\fP,
 | 
			
		||||
.B 	int \fIdnsclass\fP, int \fItype\fP, ares_callback \fIcallback\fP,
 | 
			
		||||
.B	void *\fIarg\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_query
 | 
			
		||||
function initiates a single-question DNS query on the name service
 | 
			
		||||
channel identified by
 | 
			
		||||
.IR channel .
 | 
			
		||||
The parameter
 | 
			
		||||
.I name
 | 
			
		||||
gives the query name as a NUL-terminated C string of period-separated
 | 
			
		||||
labels optionally ending with a period; periods and backslashes within
 | 
			
		||||
a label must be escaped with a backslash.  The parameters
 | 
			
		||||
.I dnsclass
 | 
			
		||||
and
 | 
			
		||||
.I type
 | 
			
		||||
give the class and type of the query using the values defined in
 | 
			
		||||
.BR <arpa/nameser.h> .
 | 
			
		||||
When the query is complete or has failed, the ares library will invoke
 | 
			
		||||
.IR callback .
 | 
			
		||||
Completion or failure of the query may happen immediately, or may
 | 
			
		||||
happen during a later call to
 | 
			
		||||
.BR ares_process (3)
 | 
			
		||||
or
 | 
			
		||||
.BR ares_destroy (3).
 | 
			
		||||
.PP
 | 
			
		||||
The callback argument
 | 
			
		||||
.I arg
 | 
			
		||||
is copied from the
 | 
			
		||||
.B ares_query
 | 
			
		||||
argument
 | 
			
		||||
.IR arg .
 | 
			
		||||
The callback argument
 | 
			
		||||
.I status
 | 
			
		||||
indicates whether the query succeeded and, if not, how it failed.  It
 | 
			
		||||
may have any of the following values:
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_SUCCESS
 | 
			
		||||
The query completed successfully.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ENODATA
 | 
			
		||||
The query completed but contains no answers.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_EFORMERR
 | 
			
		||||
The query completed but the server claims that the query was
 | 
			
		||||
malformatted.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ESERVFAIL
 | 
			
		||||
The query completed but the server claims to have experienced a
 | 
			
		||||
failure.  (This code can only occur if the
 | 
			
		||||
.B ARES_FLAG_NOCHECKRESP
 | 
			
		||||
flag was specified at channel initialization time; otherwise, such
 | 
			
		||||
responses are ignored at the
 | 
			
		||||
.BR ares_send (3)
 | 
			
		||||
level.)
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ENOTFOUND
 | 
			
		||||
The query completed but the queried-for domain name was not found.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ENOTIMP
 | 
			
		||||
The query completed but the server does not implement the operation
 | 
			
		||||
requested by the query.  (This code can only occur if the
 | 
			
		||||
.B ARES_FLAG_NOCHECKRESP
 | 
			
		||||
flag was specified at channel initialization time; otherwise, such
 | 
			
		||||
responses are ignored at the
 | 
			
		||||
.BR ares_send (3)
 | 
			
		||||
level.)
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_EREFUSED
 | 
			
		||||
The query completed but the server refused the query.  (This code can
 | 
			
		||||
only occur if the
 | 
			
		||||
.B ARES_FLAG_NOCHECKRESP
 | 
			
		||||
flag was specified at channel initialization time; otherwise, such
 | 
			
		||||
responses are ignored at the
 | 
			
		||||
.BR ares_send (3)
 | 
			
		||||
level.)
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_EBADNAME
 | 
			
		||||
The query name
 | 
			
		||||
.I name
 | 
			
		||||
could not be encoded as a domain name, either because it contained a
 | 
			
		||||
zero-length label or because it contained a label of more than 63
 | 
			
		||||
characters.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ETIMEOUT
 | 
			
		||||
No name servers responded within the timeout period.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ECONNREFUSED
 | 
			
		||||
No name servers could be contacted.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ENOMEM
 | 
			
		||||
Memory was exhausted.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_EDESTRUCTION
 | 
			
		||||
The name service channel
 | 
			
		||||
.I channel
 | 
			
		||||
is being destroyed; the query will not be completed.
 | 
			
		||||
.PP
 | 
			
		||||
The callback argument
 | 
			
		||||
.I timeouts
 | 
			
		||||
reports how many times a query timed out during the execution of the
 | 
			
		||||
given request.
 | 
			
		||||
.PP
 | 
			
		||||
If the query completed (even if there was something wrong with it, as
 | 
			
		||||
indicated by some of the above error codes), the callback argument
 | 
			
		||||
.I abuf
 | 
			
		||||
points to a result buffer of length
 | 
			
		||||
.IR alen .
 | 
			
		||||
If the query did not complete,
 | 
			
		||||
.I abuf
 | 
			
		||||
will be NULL and
 | 
			
		||||
.I alen
 | 
			
		||||
will be 0.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_process (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Greg Hudson, MIT Information Systems
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										184
									
								
								ares/ares_query.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										184
									
								
								ares/ares_query.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,184 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_SYS_SOCKET_H
 | 
			
		||||
#  include <sys/socket.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETINET_IN_H
 | 
			
		||||
#  include <netinet/in.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_H
 | 
			
		||||
#  include <arpa/nameser.h>
 | 
			
		||||
#else
 | 
			
		||||
#  include "nameser.h"
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
 | 
			
		||||
#  include <arpa/nameser_compat.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_dns.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
struct qquery {
 | 
			
		||||
  ares_callback callback;
 | 
			
		||||
  void *arg;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void qcallback(void *arg, int status, int timeouts, unsigned char *abuf, int alen);
 | 
			
		||||
 | 
			
		||||
void ares__rc4(rc4_key* key, unsigned char *buffer_ptr, int buffer_len)
 | 
			
		||||
{
 | 
			
		||||
  unsigned char x;
 | 
			
		||||
  unsigned char y;
 | 
			
		||||
  unsigned char* state;
 | 
			
		||||
  unsigned char xorIndex;
 | 
			
		||||
  short counter;
 | 
			
		||||
 | 
			
		||||
  x = key->x;
 | 
			
		||||
  y = key->y;
 | 
			
		||||
 | 
			
		||||
  state = &key->state[0];
 | 
			
		||||
  for(counter = 0; counter < buffer_len; counter ++)
 | 
			
		||||
  {
 | 
			
		||||
    x = (unsigned char)((x + 1) % 256);
 | 
			
		||||
    y = (unsigned char)((state[x] + y) % 256);
 | 
			
		||||
    ARES_SWAP_BYTE(&state[x], &state[y]);
 | 
			
		||||
 | 
			
		||||
    xorIndex = (unsigned char)((state[x] + state[y]) % 256);
 | 
			
		||||
 | 
			
		||||
    buffer_ptr[counter] = (unsigned char)(buffer_ptr[counter]^state[xorIndex]);
 | 
			
		||||
  }
 | 
			
		||||
  key->x = x;
 | 
			
		||||
  key->y = y;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static struct query* find_query_by_id(ares_channel channel, unsigned short id)
 | 
			
		||||
{
 | 
			
		||||
  unsigned short qid;
 | 
			
		||||
  struct list_node* list_head;
 | 
			
		||||
  struct list_node* list_node;
 | 
			
		||||
  DNS_HEADER_SET_QID(((unsigned char*)&qid), id);
 | 
			
		||||
 | 
			
		||||
  /* Find the query corresponding to this packet. */
 | 
			
		||||
  list_head = &(channel->queries_by_qid[qid % ARES_QID_TABLE_SIZE]);
 | 
			
		||||
  for (list_node = list_head->next; list_node != list_head;
 | 
			
		||||
       list_node = list_node->next)
 | 
			
		||||
    {
 | 
			
		||||
       struct query *q = list_node->data;
 | 
			
		||||
       if (q->qid == qid)
 | 
			
		||||
	  return q;
 | 
			
		||||
    }
 | 
			
		||||
  return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* a unique query id is generated using an rc4 key. Since the id may already
 | 
			
		||||
   be used by a running query (as infrequent as it may be), a lookup is
 | 
			
		||||
   performed per id generation. In practice this search should happen only
 | 
			
		||||
   once per newly generated id
 | 
			
		||||
*/
 | 
			
		||||
static unsigned short generate_unique_id(ares_channel channel)
 | 
			
		||||
{
 | 
			
		||||
  unsigned short id;
 | 
			
		||||
 | 
			
		||||
  do {
 | 
			
		||||
    id = ares__generate_new_id(&channel->id_key);
 | 
			
		||||
  } while (find_query_by_id(channel, id));
 | 
			
		||||
 | 
			
		||||
  return (unsigned short)id;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ares_query(ares_channel channel, const char *name, int dnsclass,
 | 
			
		||||
                int type, ares_callback callback, void *arg)
 | 
			
		||||
{
 | 
			
		||||
  struct qquery *qquery;
 | 
			
		||||
  unsigned char *qbuf;
 | 
			
		||||
  int qlen, rd, status;
 | 
			
		||||
 | 
			
		||||
  /* Compose the query. */
 | 
			
		||||
  rd = !(channel->flags & ARES_FLAG_NORECURSE);
 | 
			
		||||
  status = ares_mkquery(name, dnsclass, type, channel->next_id, rd, &qbuf,
 | 
			
		||||
                        &qlen);
 | 
			
		||||
  if (status != ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      if (qbuf != NULL) free(qbuf);
 | 
			
		||||
      callback(arg, status, 0, NULL, 0);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  channel->next_id = generate_unique_id(channel);
 | 
			
		||||
 | 
			
		||||
  /* Allocate and fill in the query structure. */
 | 
			
		||||
  qquery = malloc(sizeof(struct qquery));
 | 
			
		||||
  if (!qquery)
 | 
			
		||||
    {
 | 
			
		||||
      ares_free_string(qbuf);
 | 
			
		||||
      callback(arg, ARES_ENOMEM, 0, NULL, 0);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
  qquery->callback = callback;
 | 
			
		||||
  qquery->arg = arg;
 | 
			
		||||
 | 
			
		||||
  /* Send it off.  qcallback will be called when we get an answer. */
 | 
			
		||||
  ares_send(channel, qbuf, qlen, qcallback, qquery);
 | 
			
		||||
  ares_free_string(qbuf);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void qcallback(void *arg, int status, int timeouts, unsigned char *abuf, int alen)
 | 
			
		||||
{
 | 
			
		||||
  struct qquery *qquery = (struct qquery *) arg;
 | 
			
		||||
  unsigned int ancount;
 | 
			
		||||
  int rcode;
 | 
			
		||||
 | 
			
		||||
  if (status != ARES_SUCCESS)
 | 
			
		||||
    qquery->callback(qquery->arg, status, timeouts, abuf, alen);
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      /* Pull the response code and answer count from the packet. */
 | 
			
		||||
      rcode = DNS_HEADER_RCODE(abuf);
 | 
			
		||||
      ancount = DNS_HEADER_ANCOUNT(abuf);
 | 
			
		||||
 | 
			
		||||
      /* Convert errors. */
 | 
			
		||||
      switch (rcode)
 | 
			
		||||
        {
 | 
			
		||||
        case NOERROR:
 | 
			
		||||
          status = (ancount > 0) ? ARES_SUCCESS : ARES_ENODATA;
 | 
			
		||||
          break;
 | 
			
		||||
        case FORMERR:
 | 
			
		||||
          status = ARES_EFORMERR;
 | 
			
		||||
          break;
 | 
			
		||||
        case SERVFAIL:
 | 
			
		||||
          status = ARES_ESERVFAIL;
 | 
			
		||||
          break;
 | 
			
		||||
        case NXDOMAIN:
 | 
			
		||||
          status = ARES_ENOTFOUND;
 | 
			
		||||
          break;
 | 
			
		||||
        case NOTIMP:
 | 
			
		||||
          status = ARES_ENOTIMP;
 | 
			
		||||
          break;
 | 
			
		||||
        case REFUSED:
 | 
			
		||||
          status = ARES_EREFUSED;
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
      qquery->callback(qquery->arg, status, timeouts, abuf, alen);
 | 
			
		||||
    }
 | 
			
		||||
  free(qquery);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										54
									
								
								ares/ares_save_options.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								ares/ares_save_options.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_SAVE_OPTIONS 3 "1 June 2007"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_save_options \- Save configuration values obtained from initialized ares_channel
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B void ares_save_options(ares_channel \fIchannel\fP, struct ares_options *\fIoptions\fP, int *\fIoptmask\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The \fBares_save_options(3)\fP function saves the channel data identified by
 | 
			
		||||
.IR channel ,
 | 
			
		||||
into the options struct identified by
 | 
			
		||||
.IR options ,
 | 
			
		||||
and saves the mask of options which are set to the integer
 | 
			
		||||
pointer (passed by reference) identified by
 | 
			
		||||
.IR optmask .
 | 
			
		||||
 | 
			
		||||
The resultant options and optmask are then able to be
 | 
			
		||||
passed directly to ares_init_options.  When the options
 | 
			
		||||
are no longer needed, ares_destroy_options should be called
 | 
			
		||||
to free any associated memory.
 | 
			
		||||
.SH NOTE
 | 
			
		||||
Since c-ares 1.6.0 the ares_options struct has been "locked" meaning that it
 | 
			
		||||
won't be extended to cover new funtions. This function will remain
 | 
			
		||||
functioning, but it can only return config data that can be represented in
 | 
			
		||||
this config struct, which may no longer be the complete set of config
 | 
			
		||||
options. \fBares_dup(3)\fP will not have that restriction.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_destroy_options (3),
 | 
			
		||||
.BR ares_init_options (3),
 | 
			
		||||
.BR ares_dup (3)
 | 
			
		||||
.SH AVAILABILITY
 | 
			
		||||
ares_save_options(3) was added in c-ares 1.4.0
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Brad House
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										149
									
								
								ares/ares_search.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										149
									
								
								ares/ares_search.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,149 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_SEARCH 3 "24 July 1998"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_search \- Initiate a DNS query with domain search
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B typedef void (*ares_callback)(void *\fIarg\fP, int \fIstatus\fP,
 | 
			
		||||
.B	int \fItimeouts\fP, unsigned char *\fIabuf\fP, int \fIalen\fP)
 | 
			
		||||
.PP
 | 
			
		||||
.B void ares_search(ares_channel \fIchannel\fP, const char *\fIname\fP,
 | 
			
		||||
.B 	int \fIdnsclass\fP, int \fItype\fP, ares_callback \fIcallback\fP,
 | 
			
		||||
.B	void *\fIarg\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_search
 | 
			
		||||
function initiates a series of single-question DNS queries on the name
 | 
			
		||||
service channel identified by
 | 
			
		||||
.IR channel ,
 | 
			
		||||
using the channel's search domains as well as a host alias file given
 | 
			
		||||
by the HOSTALIAS environment variable.  The parameter
 | 
			
		||||
.I name
 | 
			
		||||
gives the alias name or the base of the query name as a NUL-terminated
 | 
			
		||||
C string of period-separated labels; if it ends with a period, the
 | 
			
		||||
channel's search domains will not be used.  Periods and backslashes
 | 
			
		||||
within a label must be escaped with a backslash.  The parameters
 | 
			
		||||
.I dnsclass
 | 
			
		||||
and
 | 
			
		||||
.I type
 | 
			
		||||
give the class and type of the query using the values defined in
 | 
			
		||||
.BR <arpa/nameser.h> .
 | 
			
		||||
When the query sequence is complete or has failed, the ares library
 | 
			
		||||
will invoke
 | 
			
		||||
.IR callback .
 | 
			
		||||
Completion or failure of the query sequence may happen immediately, or
 | 
			
		||||
may happen during a later call to
 | 
			
		||||
.BR ares_process (3)
 | 
			
		||||
or
 | 
			
		||||
.BR ares_destroy (3).
 | 
			
		||||
.PP
 | 
			
		||||
The callback argument
 | 
			
		||||
.I arg
 | 
			
		||||
is copied from the
 | 
			
		||||
.B ares_search
 | 
			
		||||
argument
 | 
			
		||||
.IR arg .
 | 
			
		||||
The callback argument
 | 
			
		||||
.I status
 | 
			
		||||
indicates whether the query sequence ended with a successful query
 | 
			
		||||
and, if not, how the query sequence failed.  It may have any of the
 | 
			
		||||
following values:
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_SUCCESS
 | 
			
		||||
A query completed successfully.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ENODATA
 | 
			
		||||
No query completed successfully; when the query was tried without a
 | 
			
		||||
search domain appended, a response was returned with no answers.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_EFORMERR
 | 
			
		||||
A query completed but the server claimed that the query was
 | 
			
		||||
malformatted.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ESERVFAIL
 | 
			
		||||
No query completed successfully; when the query was tried without a
 | 
			
		||||
search domain appended, the server claimed to have experienced a
 | 
			
		||||
failure.  (This code can only occur if the
 | 
			
		||||
.B ARES_FLAG_NOCHECKRESP
 | 
			
		||||
flag was specified at channel initialization time; otherwise, such
 | 
			
		||||
responses are ignored at the
 | 
			
		||||
.BR ares_send (3)
 | 
			
		||||
level.)
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ENOTFOUND
 | 
			
		||||
No query completed successfully; when the query was tried without a
 | 
			
		||||
search domain appended, the server reported that the queried-for
 | 
			
		||||
domain name was not found.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ENOTIMP
 | 
			
		||||
A query completed but the server does not implement the operation
 | 
			
		||||
requested by the query.  (This code can only occur if the
 | 
			
		||||
.B ARES_FLAG_NOCHECKRESP
 | 
			
		||||
flag was specified at channel initialization time; otherwise, such
 | 
			
		||||
responses are ignored at the
 | 
			
		||||
.BR ares_send (3)
 | 
			
		||||
level.)
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_EREFUSED
 | 
			
		||||
A query completed but the server refused the query.  (This code can
 | 
			
		||||
only occur returned if the
 | 
			
		||||
.B ARES_FLAG_NOCHECKRESP
 | 
			
		||||
flag was specified at channel initialization time; otherwise, such
 | 
			
		||||
responses are ignored at the
 | 
			
		||||
.BR ares_send (3)
 | 
			
		||||
level.)
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_TIMEOUT
 | 
			
		||||
No name servers responded to a query within the timeout period.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ECONNREFUSED
 | 
			
		||||
No name servers could be contacted.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ENOMEM
 | 
			
		||||
Memory was exhausted.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_EDESTRUCTION
 | 
			
		||||
The name service channel
 | 
			
		||||
.I channel
 | 
			
		||||
is being destroyed; the query will not be completed.
 | 
			
		||||
.PP
 | 
			
		||||
The callback argument
 | 
			
		||||
.I timeouts
 | 
			
		||||
reports how many times a query timed out during the execution of the
 | 
			
		||||
given request.
 | 
			
		||||
.PP
 | 
			
		||||
If a query completed successfully, the callback argument
 | 
			
		||||
.I abuf
 | 
			
		||||
points to a result buffer of length
 | 
			
		||||
.IR alen .
 | 
			
		||||
If the query did not complete successfully,
 | 
			
		||||
.I abuf
 | 
			
		||||
will usually be NULL and
 | 
			
		||||
.I alen
 | 
			
		||||
will usually be 0, but in some cases an unsuccessful query result may
 | 
			
		||||
be placed in
 | 
			
		||||
.IR abuf .
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_process (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Greg Hudson, MIT Information Systems
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										322
									
								
								ares/ares_search.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										322
									
								
								ares/ares_search.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,322 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <ctype.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_STRINGS_H
 | 
			
		||||
#  include <strings.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
struct search_query {
 | 
			
		||||
  /* Arguments passed to ares_search */
 | 
			
		||||
  ares_channel channel;
 | 
			
		||||
  char *name;                   /* copied into an allocated buffer */
 | 
			
		||||
  int dnsclass;
 | 
			
		||||
  int type;
 | 
			
		||||
  ares_callback callback;
 | 
			
		||||
  void *arg;
 | 
			
		||||
 | 
			
		||||
  int status_as_is;             /* error status from trying as-is */
 | 
			
		||||
  int next_domain;              /* next search domain to try */
 | 
			
		||||
  int trying_as_is;             /* current query is for name as-is */
 | 
			
		||||
  int timeouts;                 /* number of timeouts we saw for this request */
 | 
			
		||||
  int ever_got_nodata;          /* did we ever get ARES_ENODATA along the way? */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void search_callback(void *arg, int status, int timeouts,
 | 
			
		||||
                            unsigned char *abuf, int alen);
 | 
			
		||||
static void end_squery(struct search_query *squery, int status,
 | 
			
		||||
                       unsigned char *abuf, int alen);
 | 
			
		||||
static int cat_domain(const char *name, const char *domain, char **s);
 | 
			
		||||
static int single_domain(ares_channel channel, const char *name, char **s);
 | 
			
		||||
 | 
			
		||||
void ares_search(ares_channel channel, const char *name, int dnsclass,
 | 
			
		||||
                 int type, ares_callback callback, void *arg)
 | 
			
		||||
{
 | 
			
		||||
  struct search_query *squery;
 | 
			
		||||
  char *s;
 | 
			
		||||
  const char *p;
 | 
			
		||||
  int status, ndots;
 | 
			
		||||
            
 | 
			
		||||
  /* If name only yields one domain to search, then we don't have
 | 
			
		||||
   * to keep extra state, so just do an ares_query().
 | 
			
		||||
   */
 | 
			
		||||
  status = single_domain(channel, name, &s);
 | 
			
		||||
  if (status != ARES_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      callback(arg, status, 0, NULL, 0);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
  if (s)
 | 
			
		||||
    {
 | 
			
		||||
      ares_query(channel, s, dnsclass, type, callback, arg);
 | 
			
		||||
      free(s);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Allocate a search_query structure to hold the state necessary for
 | 
			
		||||
   * doing multiple lookups.
 | 
			
		||||
   */
 | 
			
		||||
  squery = malloc(sizeof(struct search_query));
 | 
			
		||||
  if (!squery)
 | 
			
		||||
    {
 | 
			
		||||
      callback(arg, ARES_ENOMEM, 0, NULL, 0);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
  squery->channel = channel;
 | 
			
		||||
  squery->name = strdup(name);
 | 
			
		||||
  if (!squery->name)
 | 
			
		||||
    {
 | 
			
		||||
      free(squery);
 | 
			
		||||
      callback(arg, ARES_ENOMEM, 0, NULL, 0);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
  squery->dnsclass = dnsclass;
 | 
			
		||||
  squery->type = type;
 | 
			
		||||
  squery->status_as_is = -1;
 | 
			
		||||
  squery->callback = callback;
 | 
			
		||||
  squery->arg = arg;
 | 
			
		||||
  squery->timeouts = 0;
 | 
			
		||||
  squery->ever_got_nodata = 0;
 | 
			
		||||
 | 
			
		||||
  /* Count the number of dots in name. */
 | 
			
		||||
  ndots = 0;
 | 
			
		||||
  for (p = name; *p; p++)
 | 
			
		||||
    {
 | 
			
		||||
      if (*p == '.')
 | 
			
		||||
        ndots++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* If ndots is at least the channel ndots threshold (usually 1),
 | 
			
		||||
   * then we try the name as-is first.  Otherwise, we try the name
 | 
			
		||||
   * as-is last.
 | 
			
		||||
   */
 | 
			
		||||
  if (ndots >= channel->ndots)
 | 
			
		||||
    {
 | 
			
		||||
      /* Try the name as-is first. */
 | 
			
		||||
      squery->next_domain = 0;
 | 
			
		||||
      squery->trying_as_is = 1;
 | 
			
		||||
      ares_query(channel, name, dnsclass, type, search_callback, squery);
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      /* Try the name as-is last; start with the first search domain. */
 | 
			
		||||
      squery->next_domain = 1;
 | 
			
		||||
      squery->trying_as_is = 0;
 | 
			
		||||
      status = cat_domain(name, channel->domains[0], &s);
 | 
			
		||||
      if (status == ARES_SUCCESS)
 | 
			
		||||
        {
 | 
			
		||||
          ares_query(channel, s, dnsclass, type, search_callback, squery);
 | 
			
		||||
          free(s);
 | 
			
		||||
        }
 | 
			
		||||
      else
 | 
			
		||||
      {
 | 
			
		||||
        /* failed, free the malloc()ed memory */
 | 
			
		||||
        free(squery->name);
 | 
			
		||||
        free(squery);
 | 
			
		||||
        callback(arg, status, 0, NULL, 0);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void search_callback(void *arg, int status, int timeouts,
 | 
			
		||||
                            unsigned char *abuf, int alen)
 | 
			
		||||
{
 | 
			
		||||
  struct search_query *squery = (struct search_query *) arg;
 | 
			
		||||
  ares_channel channel = squery->channel;
 | 
			
		||||
  char *s;
 | 
			
		||||
                
 | 
			
		||||
  squery->timeouts += timeouts;
 | 
			
		||||
 | 
			
		||||
  /* Stop searching unless we got a non-fatal error. */
 | 
			
		||||
  if (status != ARES_ENODATA && status != ARES_ESERVFAIL
 | 
			
		||||
      && status != ARES_ENOTFOUND)
 | 
			
		||||
    end_squery(squery, status, abuf, alen);
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      /* Save the status if we were trying as-is. */
 | 
			
		||||
      if (squery->trying_as_is)
 | 
			
		||||
        squery->status_as_is = status;
 | 
			
		||||
 | 
			
		||||
      /* 
 | 
			
		||||
       * If we ever get ARES_ENODATA along the way, record that; if the search
 | 
			
		||||
       * should run to the very end and we got at least one ARES_ENODATA,
 | 
			
		||||
       * then callers like ares_gethostbyname() may want to try a T_A search
 | 
			
		||||
       * even if the last domain we queried for T_AAAA resource records
 | 
			
		||||
       * returned ARES_ENOTFOUND.
 | 
			
		||||
       */
 | 
			
		||||
      if (status == ARES_ENODATA)
 | 
			
		||||
        squery->ever_got_nodata = 1;
 | 
			
		||||
 | 
			
		||||
      if (squery->next_domain < channel->ndomains)
 | 
			
		||||
        {
 | 
			
		||||
          /* Try the next domain. */
 | 
			
		||||
          status = cat_domain(squery->name,
 | 
			
		||||
                              channel->domains[squery->next_domain], &s);
 | 
			
		||||
          if (status != ARES_SUCCESS)
 | 
			
		||||
            end_squery(squery, status, NULL, 0);
 | 
			
		||||
          else
 | 
			
		||||
            {
 | 
			
		||||
              squery->trying_as_is = 0;
 | 
			
		||||
              squery->next_domain++;
 | 
			
		||||
              ares_query(channel, s, squery->dnsclass, squery->type,
 | 
			
		||||
                         search_callback, squery);
 | 
			
		||||
              free(s);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
      else if (squery->status_as_is == -1)
 | 
			
		||||
        {
 | 
			
		||||
          /* Try the name as-is at the end. */
 | 
			
		||||
          squery->trying_as_is = 1;
 | 
			
		||||
          ares_query(channel, squery->name, squery->dnsclass, squery->type,
 | 
			
		||||
                     search_callback, squery);
 | 
			
		||||
        }
 | 
			
		||||
      else {
 | 
			
		||||
        if (squery->status_as_is == ARES_ENOTFOUND && squery->ever_got_nodata) {
 | 
			
		||||
          end_squery(squery, ARES_ENODATA, NULL, 0);
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
          end_squery(squery, squery->status_as_is, NULL, 0);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void end_squery(struct search_query *squery, int status,
 | 
			
		||||
                       unsigned char *abuf, int alen)
 | 
			
		||||
{
 | 
			
		||||
  squery->callback(squery->arg, status, squery->timeouts, abuf, alen);
 | 
			
		||||
  free(squery->name);
 | 
			
		||||
  free(squery);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Concatenate two domains. */
 | 
			
		||||
static int cat_domain(const char *name, const char *domain, char **s)
 | 
			
		||||
{
 | 
			
		||||
  size_t nlen = strlen(name);
 | 
			
		||||
  size_t dlen = strlen(domain);
 | 
			
		||||
 | 
			
		||||
  *s = malloc(nlen + 1 + dlen + 1);
 | 
			
		||||
  if (!*s)
 | 
			
		||||
    return ARES_ENOMEM;
 | 
			
		||||
  memcpy(*s, name, nlen);
 | 
			
		||||
  (*s)[nlen] = '.';
 | 
			
		||||
  memcpy(*s + nlen + 1, domain, dlen);
 | 
			
		||||
  (*s)[nlen + 1 + dlen] = 0;
 | 
			
		||||
  return ARES_SUCCESS;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Determine if this name only yields one query.  If it does, set *s to
 | 
			
		||||
 * the string we should query, in an allocated buffer.  If not, set *s
 | 
			
		||||
 * to NULL.
 | 
			
		||||
 */
 | 
			
		||||
static int single_domain(ares_channel channel, const char *name, char **s)
 | 
			
		||||
{
 | 
			
		||||
  size_t len = strlen(name);
 | 
			
		||||
  const char *hostaliases;
 | 
			
		||||
  FILE *fp;
 | 
			
		||||
  char *line = NULL;
 | 
			
		||||
  int linesize, status;
 | 
			
		||||
  const char *p, *q;
 | 
			
		||||
  int error;
 | 
			
		||||
 | 
			
		||||
  /* If the name contains a trailing dot, then the single query is the name
 | 
			
		||||
   * sans the trailing dot.
 | 
			
		||||
   */
 | 
			
		||||
  if (name[len - 1] == '.')
 | 
			
		||||
    {
 | 
			
		||||
      *s = strdup(name);
 | 
			
		||||
      return (*s) ? ARES_SUCCESS : ARES_ENOMEM;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (!(channel->flags & ARES_FLAG_NOALIASES) && !strchr(name, '.'))
 | 
			
		||||
    {
 | 
			
		||||
      /* The name might be a host alias. */
 | 
			
		||||
      hostaliases = getenv("HOSTALIASES");
 | 
			
		||||
      if (hostaliases)
 | 
			
		||||
        {
 | 
			
		||||
          fp = fopen(hostaliases, "r");
 | 
			
		||||
          if (fp)
 | 
			
		||||
            {
 | 
			
		||||
              while ((status = ares__read_line(fp, &line, &linesize))
 | 
			
		||||
                     == ARES_SUCCESS)
 | 
			
		||||
                {
 | 
			
		||||
                  if (strncasecmp(line, name, len) != 0 ||
 | 
			
		||||
                      !ISSPACE(line[len]))
 | 
			
		||||
                    continue;
 | 
			
		||||
                  p = line + len;
 | 
			
		||||
                  while (ISSPACE(*p))
 | 
			
		||||
                    p++;
 | 
			
		||||
                  if (*p)
 | 
			
		||||
                    {
 | 
			
		||||
                      q = p + 1;
 | 
			
		||||
                      while (*q && !ISSPACE(*q))
 | 
			
		||||
                        q++;
 | 
			
		||||
                      *s = malloc(q - p + 1);
 | 
			
		||||
                      if (*s)
 | 
			
		||||
                        {
 | 
			
		||||
                          memcpy(*s, p, q - p);
 | 
			
		||||
                          (*s)[q - p] = 0;
 | 
			
		||||
                        }
 | 
			
		||||
                      free(line);
 | 
			
		||||
                      fclose(fp);
 | 
			
		||||
                      return (*s) ? ARES_SUCCESS : ARES_ENOMEM;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
              free(line);
 | 
			
		||||
              fclose(fp);
 | 
			
		||||
              if (status != ARES_SUCCESS)
 | 
			
		||||
                return status;
 | 
			
		||||
            }
 | 
			
		||||
          else 
 | 
			
		||||
            {
 | 
			
		||||
              error = ERRNO;
 | 
			
		||||
              switch(error) 
 | 
			
		||||
                {
 | 
			
		||||
                case ENOENT:
 | 
			
		||||
                case ESRCH:
 | 
			
		||||
                  break;
 | 
			
		||||
                default:
 | 
			
		||||
                  DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n",
 | 
			
		||||
                                 error, strerror(error)));
 | 
			
		||||
                  DEBUGF(fprintf(stderr, "Error opening file: %s\n", 
 | 
			
		||||
                                 hostaliases));
 | 
			
		||||
                  *s = NULL;
 | 
			
		||||
                  return ARES_EFILE;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (channel->flags & ARES_FLAG_NOSEARCH || channel->ndomains == 0)
 | 
			
		||||
    {
 | 
			
		||||
      /* No domain search to do; just try the name as-is. */
 | 
			
		||||
      *s = strdup(name);
 | 
			
		||||
      return (*s) ? ARES_SUCCESS : ARES_ENOMEM;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  *s = NULL;
 | 
			
		||||
  return ARES_SUCCESS;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										121
									
								
								ares/ares_send.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										121
									
								
								ares/ares_send.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,121 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_SEND 3 "25 July 1998"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_send \- Initiate a DNS query
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B typedef void (*ares_callback)(void *\fIarg\fP, int \fIstatus\fP,
 | 
			
		||||
.B	int \fItimeouts\fP, unsigned char *\fIabuf\fP, int \fIalen\fP)
 | 
			
		||||
.PP
 | 
			
		||||
.B void ares_send(ares_channel \fIchannel\fP, const unsigned char *\fIqbuf\fP,
 | 
			
		||||
.B 	int \fIqlen\fP, ares_callback \fIcallback\fP, void *\fIarg\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_send
 | 
			
		||||
function initiates a DNS query on the name service channel identified
 | 
			
		||||
by
 | 
			
		||||
.IR channel .
 | 
			
		||||
The parameters
 | 
			
		||||
.I qbuf
 | 
			
		||||
and
 | 
			
		||||
.I qlen
 | 
			
		||||
give the DNS query, which should already have been formatted according
 | 
			
		||||
to the DNS protocol.  When the query is complete or has failed, the
 | 
			
		||||
ares library will invoke
 | 
			
		||||
.IR callback .
 | 
			
		||||
Completion or failure of the query may happen immediately, or may
 | 
			
		||||
happen during a later call to
 | 
			
		||||
.BR ares_process (3)
 | 
			
		||||
or
 | 
			
		||||
.BR ares_destroy (3).
 | 
			
		||||
.PP
 | 
			
		||||
The callback argument
 | 
			
		||||
.I arg
 | 
			
		||||
is copied from the
 | 
			
		||||
.B ares_send
 | 
			
		||||
argument
 | 
			
		||||
.IR arg .
 | 
			
		||||
The callback argument
 | 
			
		||||
.I status
 | 
			
		||||
indicates whether the query succeeded and, if not, how it failed.  It
 | 
			
		||||
may have any of the following values:
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_SUCCESS
 | 
			
		||||
The query completed.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_EBADQUERY
 | 
			
		||||
The query buffer was poorly formed (was not long enough for a DNS
 | 
			
		||||
header or was too long for TCP transmission).
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ETIMEOUT
 | 
			
		||||
No name servers responded within the timeout period.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ECONNREFUSED
 | 
			
		||||
No name servers could be contacted.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_ENOMEM
 | 
			
		||||
Memory was exhausted.
 | 
			
		||||
.TP 19
 | 
			
		||||
.B ARES_EDESTRUCTION
 | 
			
		||||
The name service channel
 | 
			
		||||
.I channel
 | 
			
		||||
is being destroyed; the query will not be completed.
 | 
			
		||||
.PP
 | 
			
		||||
The callback argument
 | 
			
		||||
.I timeouts
 | 
			
		||||
reports how many times a query timed out during the execution of the
 | 
			
		||||
given request.
 | 
			
		||||
.PP
 | 
			
		||||
If the query completed, the callback argument
 | 
			
		||||
.I abuf
 | 
			
		||||
points to a result buffer of length
 | 
			
		||||
.IR alen .
 | 
			
		||||
If the query did not complete,
 | 
			
		||||
.I abuf
 | 
			
		||||
will be NULL and
 | 
			
		||||
.I alen
 | 
			
		||||
will be 0.
 | 
			
		||||
.PP
 | 
			
		||||
Unless the flag
 | 
			
		||||
.B ARES_FLAG_NOCHECKRESP
 | 
			
		||||
was set at channel initialization time,
 | 
			
		||||
.B ares_send
 | 
			
		||||
will normally ignore responses whose questions do not match the
 | 
			
		||||
questions in
 | 
			
		||||
.IR qbuf ,
 | 
			
		||||
as well as responses with reply codes of
 | 
			
		||||
.BR SERVFAIL ,
 | 
			
		||||
.BR NOTIMP ,
 | 
			
		||||
and
 | 
			
		||||
.BR REFUSED .
 | 
			
		||||
Unlike other query functions in the ares library, however,
 | 
			
		||||
.B ares_send
 | 
			
		||||
does not inspect the header of the reply packet to determine the error
 | 
			
		||||
status, so a callback status of
 | 
			
		||||
.B ARES_SUCCESS
 | 
			
		||||
does not reflect as much about the response as for other query
 | 
			
		||||
functions.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_process (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Greg Hudson, MIT Information Systems
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										135
									
								
								ares/ares_send.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										135
									
								
								ares/ares_send.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,135 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_SYS_SOCKET_H
 | 
			
		||||
#  include <sys/socket.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_NETINET_IN_H
 | 
			
		||||
#  include <netinet/in.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_H
 | 
			
		||||
#  include <arpa/nameser.h>
 | 
			
		||||
#else
 | 
			
		||||
#  include "nameser.h"
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
 | 
			
		||||
#  include <arpa/nameser_compat.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
#include "ares_dns.h"
 | 
			
		||||
#include "ares_private.h"
 | 
			
		||||
 | 
			
		||||
void ares_send(ares_channel channel, const unsigned char *qbuf, int qlen,
 | 
			
		||||
               ares_callback callback, void *arg)
 | 
			
		||||
{
 | 
			
		||||
  struct query *query;
 | 
			
		||||
  int i;
 | 
			
		||||
  struct timeval now;
 | 
			
		||||
 | 
			
		||||
  /* Verify that the query is at least long enough to hold the header. */
 | 
			
		||||
  if (qlen < HFIXEDSZ || qlen >= (1 << 16))
 | 
			
		||||
    {
 | 
			
		||||
      callback(arg, ARES_EBADQUERY, 0, NULL, 0);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Allocate space for query and allocated fields. */
 | 
			
		||||
  query = malloc(sizeof(struct query));
 | 
			
		||||
  if (!query)
 | 
			
		||||
    {
 | 
			
		||||
      callback(arg, ARES_ENOMEM, 0, NULL, 0);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
  query->tcpbuf = malloc(qlen + 2);
 | 
			
		||||
  if (!query->tcpbuf)
 | 
			
		||||
    {
 | 
			
		||||
      free(query);
 | 
			
		||||
      callback(arg, ARES_ENOMEM, 0, NULL, 0);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
  query->server_info = malloc(channel->nservers *
 | 
			
		||||
                              sizeof(query->server_info[0]));
 | 
			
		||||
  if (!query->server_info)
 | 
			
		||||
    {
 | 
			
		||||
      free(query->tcpbuf);
 | 
			
		||||
      free(query);
 | 
			
		||||
      callback(arg, ARES_ENOMEM, 0, NULL, 0);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Compute the query ID.  Start with no timeout. */
 | 
			
		||||
  query->qid = (unsigned short)DNS_HEADER_QID(qbuf);
 | 
			
		||||
  query->timeout.tv_sec = 0;
 | 
			
		||||
  query->timeout.tv_usec = 0;
 | 
			
		||||
 | 
			
		||||
  /* Form the TCP query buffer by prepending qlen (as two
 | 
			
		||||
   * network-order bytes) to qbuf.
 | 
			
		||||
   */
 | 
			
		||||
  query->tcpbuf[0] = (unsigned char)((qlen >> 8) & 0xff);
 | 
			
		||||
  query->tcpbuf[1] = (unsigned char)(qlen & 0xff);
 | 
			
		||||
  memcpy(query->tcpbuf + 2, qbuf, qlen);
 | 
			
		||||
  query->tcplen = qlen + 2;
 | 
			
		||||
 | 
			
		||||
  /* Fill in query arguments. */
 | 
			
		||||
  query->qbuf = query->tcpbuf + 2;
 | 
			
		||||
  query->qlen = qlen;
 | 
			
		||||
  query->callback = callback;
 | 
			
		||||
  query->arg = arg;
 | 
			
		||||
 | 
			
		||||
  /* Initialize query status. */
 | 
			
		||||
  query->try = 0;
 | 
			
		||||
 | 
			
		||||
  /* Choose the server to send the query to. If rotation is enabled, keep track
 | 
			
		||||
   * of the next server we want to use. */
 | 
			
		||||
  query->server = channel->last_server;
 | 
			
		||||
  if (channel->rotate == 1)
 | 
			
		||||
    channel->last_server = (channel->last_server + 1) % channel->nservers;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < channel->nservers; i++)
 | 
			
		||||
    {
 | 
			
		||||
      query->server_info[i].skip_server = 0;
 | 
			
		||||
      query->server_info[i].tcp_connection_generation = 0;
 | 
			
		||||
    }
 | 
			
		||||
  query->using_tcp = (channel->flags & ARES_FLAG_USEVC) || qlen > PACKETSZ;
 | 
			
		||||
  query->error_status = ARES_ECONNREFUSED;
 | 
			
		||||
  query->timeouts = 0;
 | 
			
		||||
 | 
			
		||||
  /* Initialize our list nodes. */
 | 
			
		||||
  ares__init_list_node(&(query->queries_by_qid),     query);
 | 
			
		||||
  ares__init_list_node(&(query->queries_by_timeout), query);
 | 
			
		||||
  ares__init_list_node(&(query->queries_to_server),  query);
 | 
			
		||||
  ares__init_list_node(&(query->all_queries),        query);
 | 
			
		||||
 | 
			
		||||
  /* Chain the query into the list of all queries. */
 | 
			
		||||
  ares__insert_in_list(&(query->all_queries), &(channel->all_queries));
 | 
			
		||||
  /* Keep track of queries bucketed by qid, so we can process DNS
 | 
			
		||||
   * responses quickly.
 | 
			
		||||
   */
 | 
			
		||||
  ares__insert_in_list(
 | 
			
		||||
    &(query->queries_by_qid),
 | 
			
		||||
    &(channel->queries_by_qid[query->qid % ARES_QID_TABLE_SIZE]));
 | 
			
		||||
 | 
			
		||||
  /* Perform the first query action. */
 | 
			
		||||
  now = ares__tvnow();
 | 
			
		||||
  ares__send_query(channel, query, &now);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										24
									
								
								ares/ares_set_socket_callback.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								ares/ares_set_socket_callback.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_SET_SOCKET_CALLBACK 3 "2 Dec 2008"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_set_socket_callback \- Set a socket creation callback
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
int ares_set_socket_callback(ares_channel \fIchannel\fP,
 | 
			
		||||
                             ares_sock_create_callback \fIcallback\fP,
 | 
			
		||||
                             void *\fIuserdata\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
This function sets a \fIcallback\fP in the given ares channel handle. This
 | 
			
		||||
callback function will be invoked after the socket has been created, and
 | 
			
		||||
connected to the remote server. The callback must return ARES_SUCCESS if
 | 
			
		||||
things are fine, or use the standard ares error codes to signal errors
 | 
			
		||||
back. Returned errors will abort the ares operation.
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_init_options (3)
 | 
			
		||||
.SH AVAILABILITY
 | 
			
		||||
ares_set_socket_callback(3) was added in c-ares 1.6.0
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Gregor Jasny
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										67
									
								
								ares/ares_strcasecmp.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								ares/ares_strcasecmp.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,67 @@
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
#include "ares_strcasecmp.h"
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_STRCASECMP
 | 
			
		||||
int ares_strcasecmp(const char *a, const char *b)
 | 
			
		||||
{
 | 
			
		||||
#if defined(HAVE_STRCMPI)
 | 
			
		||||
  return strcmpi(a, b);
 | 
			
		||||
#elif defined(HAVE_STRICMP)
 | 
			
		||||
  return stricmp(a, b);
 | 
			
		||||
#else
 | 
			
		||||
  size_t i;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < (size_t)-1; i++) {
 | 
			
		||||
    int c1 = ISUPPER(a[i]) ? tolower(a[i]) : a[i];
 | 
			
		||||
    int c2 = ISUPPER(b[i]) ? tolower(b[i]) : b[i];
 | 
			
		||||
    if (c1 != c2)
 | 
			
		||||
      return c1-c2;
 | 
			
		||||
    if (!c1)
 | 
			
		||||
      break;
 | 
			
		||||
  }
 | 
			
		||||
  return 0;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_STRNCASECMP
 | 
			
		||||
int ares_strncasecmp(const char *a, const char *b, size_t n)
 | 
			
		||||
{
 | 
			
		||||
#if defined(HAVE_STRNCMPI)
 | 
			
		||||
  return strncmpi(a, b, n);
 | 
			
		||||
#elif defined(HAVE_STRNICMP)
 | 
			
		||||
  return strnicmp(a, b, n);
 | 
			
		||||
#else
 | 
			
		||||
  size_t i;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < n; i++) {
 | 
			
		||||
    int c1 = ISUPPER(a[i]) ? tolower(a[i]) : a[i];
 | 
			
		||||
    int c2 = ISUPPER(b[i]) ? tolower(b[i]) : b[i];
 | 
			
		||||
    if (c1 != c2)
 | 
			
		||||
      return c1-c2;
 | 
			
		||||
    if (!c1)
 | 
			
		||||
      break;
 | 
			
		||||
  }
 | 
			
		||||
  return 0;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										31
									
								
								ares/ares_strcasecmp.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								ares/ares_strcasecmp.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
#ifndef HEADER_CARES_STRCASECMP_H
 | 
			
		||||
#define HEADER_CARES_STRCASECMP_H
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_STRCASECMP
 | 
			
		||||
extern int ares_strcasecmp(const char *a, const char *b);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_STRNCASECMP
 | 
			
		||||
extern int ares_strncasecmp(const char *a, const char *b, size_t n);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* HEADER_CARES_STRCASECMP_H */
 | 
			
		||||
							
								
								
									
										43
									
								
								ares/ares_strdup.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								ares/ares_strdup.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,43 @@
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
#include "ares_strdup.h"
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_STRDUP
 | 
			
		||||
char *ares_strdup(const char *s1)
 | 
			
		||||
{
 | 
			
		||||
  size_t sz;
 | 
			
		||||
  char * s2;
 | 
			
		||||
 | 
			
		||||
  if(s1) {
 | 
			
		||||
    sz = strlen(s1);
 | 
			
		||||
    if(sz < (size_t)-1) {
 | 
			
		||||
      sz++;
 | 
			
		||||
      if(sz < ((size_t)-1) / sizeof(char)) {
 | 
			
		||||
        s2 = malloc(sz * sizeof(char));
 | 
			
		||||
        if(s2) {
 | 
			
		||||
          memcpy(s2, s1, sz * sizeof(char));
 | 
			
		||||
          return s2;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return (char *)NULL;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										27
									
								
								ares/ares_strdup.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								ares/ares_strdup.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
#ifndef HEADER_CARES_STRDUP_H
 | 
			
		||||
#define HEADER_CARES_STRDUP_H
 | 
			
		||||
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
 | 
			
		||||
#ifndef HAVE_STRDUP
 | 
			
		||||
extern char *ares_strdup(const char *s1);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* HEADER_CARES_STRDUP_H */
 | 
			
		||||
							
								
								
									
										38
									
								
								ares/ares_strerror.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								ares/ares_strerror.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_STRERROR 3 "25 July 1998"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_strerror \- Get the description of an ares library error code
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B const char *ares_strerror(int \fIcode\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_strerror
 | 
			
		||||
function gets the description of the ares library error code
 | 
			
		||||
.IR code ,
 | 
			
		||||
returning the result as a NUL-terminated C string.
 | 
			
		||||
.SH NOTES
 | 
			
		||||
This function is not compatible with ares, it takes a different set of
 | 
			
		||||
arguments.
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Greg Hudson, MIT Information Systems
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
							
								
								
									
										53
									
								
								ares/ares_strerror.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								ares/ares_strerror.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,53 @@
 | 
			
		||||
/* $Id$ */
 | 
			
		||||
 | 
			
		||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this
 | 
			
		||||
 * software and its documentation for any purpose and without
 | 
			
		||||
 * fee is hereby granted, provided that the above copyright
 | 
			
		||||
 * notice appear in all copies and that both that copyright
 | 
			
		||||
 * notice and this permission notice appear in supporting
 | 
			
		||||
 * documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
 * advertising or publicity pertaining to distribution of the
 | 
			
		||||
 * software without specific, written prior permission.
 | 
			
		||||
 * M.I.T. makes no representations about the suitability of
 | 
			
		||||
 * this software for any purpose.  It is provided "as is"
 | 
			
		||||
 * without express or implied warranty.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "setup.h"
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include "ares.h"
 | 
			
		||||
 | 
			
		||||
const char *ares_strerror(int code)
 | 
			
		||||
{
 | 
			
		||||
  /* Return a string literal from a table. */
 | 
			
		||||
  const char *errtext[] = {
 | 
			
		||||
    "Successful completion",
 | 
			
		||||
    "DNS server returned answer with no data",
 | 
			
		||||
    "DNS server claims query was misformatted",
 | 
			
		||||
    "DNS server returned general failure",
 | 
			
		||||
    "Domain name not found",
 | 
			
		||||
    "DNS server does not implement requested operation",
 | 
			
		||||
    "DNS server refused query",
 | 
			
		||||
    "Misformatted DNS query",
 | 
			
		||||
    "Misformatted domain name",
 | 
			
		||||
    "Unsupported address family",
 | 
			
		||||
    "Misformatted DNS reply",
 | 
			
		||||
    "Could not contact DNS servers",
 | 
			
		||||
    "Timeout while contacting DNS servers",
 | 
			
		||||
    "End of file",
 | 
			
		||||
    "Error reading file",
 | 
			
		||||
    "Out of memory",
 | 
			
		||||
    "Channel is being destroyed",
 | 
			
		||||
    "Misformatted string",
 | 
			
		||||
    "Illegal flags specified",
 | 
			
		||||
    "Given hostname is not numeric",
 | 
			
		||||
    "Illegal hints flags specified"
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  if(code >= 0 && code < (int)(sizeof(errtext) / sizeof(*errtext)))
 | 
			
		||||
    return errtext[code];
 | 
			
		||||
  else
 | 
			
		||||
    return "unknown";
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										62
									
								
								ares/ares_timeout.3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								ares/ares_timeout.3
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,62 @@
 | 
			
		||||
.\" $Id$
 | 
			
		||||
.\"
 | 
			
		||||
.\" Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
.\"
 | 
			
		||||
.\" Permission to use, copy, modify, and distribute this
 | 
			
		||||
.\" software and its documentation for any purpose and without
 | 
			
		||||
.\" fee is hereby granted, provided that the above copyright
 | 
			
		||||
.\" notice appear in all copies and that both that copyright
 | 
			
		||||
.\" notice and this permission notice appear in supporting
 | 
			
		||||
.\" documentation, and that the name of M.I.T. not be used in
 | 
			
		||||
.\" advertising or publicity pertaining to distribution of the
 | 
			
		||||
.\" software without specific, written prior permission.
 | 
			
		||||
.\" M.I.T. makes no representations about the suitability of
 | 
			
		||||
.\" this software for any purpose.  It is provided "as is"
 | 
			
		||||
.\" without express or implied warranty.
 | 
			
		||||
.\"
 | 
			
		||||
.TH ARES_TIMEOUT 3 "25 July 1998"
 | 
			
		||||
.SH NAME
 | 
			
		||||
ares_fds \- Get file descriptors to select on for name service
 | 
			
		||||
.SH SYNOPSIS
 | 
			
		||||
.nf
 | 
			
		||||
.B #include <ares.h>
 | 
			
		||||
.PP
 | 
			
		||||
.B struct timeval *ares_timeout(ares_channel \fIchannel\fP,
 | 
			
		||||
.B	struct timeval *\fImaxtv\fP, struct timeval *\fItvbuf\fP)
 | 
			
		||||
.fi
 | 
			
		||||
.SH DESCRIPTION
 | 
			
		||||
The
 | 
			
		||||
.B ares_timeout
 | 
			
		||||
function determines the maximum time for which the caller should wait before
 | 
			
		||||
invoking \fIares_process(3)\fP to process timeouts.  The parameter
 | 
			
		||||
.I maxtv
 | 
			
		||||
specifies a existing maximum timeout, or
 | 
			
		||||
.B NULL
 | 
			
		||||
if the caller does not wish to apply a maximum timeout.  The parameter
 | 
			
		||||
.I tvbuf
 | 
			
		||||
must point to a writable buffer of type
 | 
			
		||||
.BR "struct timeval" .
 | 
			
		||||
It is valid for
 | 
			
		||||
.I maxtv
 | 
			
		||||
and
 | 
			
		||||
.I tvbuf
 | 
			
		||||
to have the same value.
 | 
			
		||||
.PP
 | 
			
		||||
If no queries have timeouts pending sooner than the given maximum
 | 
			
		||||
timeout,
 | 
			
		||||
.B ares_timeout
 | 
			
		||||
returns the value of
 | 
			
		||||
.IR maxtv;
 | 
			
		||||
otherwise
 | 
			
		||||
.B ares_timeout
 | 
			
		||||
stores the appropriate timeout value into the buffer pointed to by
 | 
			
		||||
.I tvbuf
 | 
			
		||||
and returns the value of
 | 
			
		||||
.IR tvbuf .
 | 
			
		||||
.SH SEE ALSO
 | 
			
		||||
.BR ares_fds (3),
 | 
			
		||||
.BR ares_process (3)
 | 
			
		||||
.SH AUTHOR
 | 
			
		||||
Greg Hudson, MIT Information Systems
 | 
			
		||||
.br
 | 
			
		||||
Copyright 1998 by the Massachusetts Institute of Technology.
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user