diff options
author | mdroe <mdroe@stsci.edu> | 2014-06-13 14:24:20 -0400 |
---|---|---|
committer | mdroe <mdroe@stsci.edu> | 2014-06-13 14:24:20 -0400 |
commit | d323b761917b1c713fbb367a86dac84bfa7e0af6 (patch) | |
tree | 642dd555d28607fcd043f5f62dc749caf026703c /stsci | |
parent | 23349b8f5f7c89596bfd8289ffaf67f36c2786c8 (diff) | |
download | stsci.sphere-d323b761917b1c713fbb367a86dac84bfa7e0af6.tar.gz |
Add regression tests based on real data that had trouble in the past.
git-svn-id: http://svn.stsci.edu/svn/ssb/stsci_python/stsci.sphere/trunk@32539 fe389314-cf27-0410-b35b-8c050e845b92
Former-commit-id: f371222ebbc956ebbef4af6fba283e60e90e5a5b
Diffstat (limited to 'stsci')
-rw-r--r-- | stsci/sphere/test/data/difficult_intersections.txt | 160 | ||||
-rw-r--r-- | stsci/sphere/test/test_intersection.py | 46 | ||||
-rw-r--r-- | stsci/sphere/test/test_union.py | 72 |
3 files changed, 218 insertions, 60 deletions
diff --git a/stsci/sphere/test/data/difficult_intersections.txt b/stsci/sphere/test/data/difficult_intersections.txt new file mode 100644 index 0000000..d64bf83 --- /dev/null +++ b/stsci/sphere/test/data/difficult_intersections.txt @@ -0,0 +1,160 @@ +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +342725c5a7f4e03ffe145f1466abe63f0214215de2d6ddbf3f0e54139efae03f5be87d454eaae63f0dd46743a3ccddbf27ff490df0fbe03fbc36d7a398a7e63fb0d0b033ded1ddbf67a776f9d9f5e03fdb8ecf6cc6a8e63f7d7de66f22dcddbf599738a6e3f5e03fa5511ba3b4a8e63f05a5ec7242dcddbfb6d3b606fafbe03fb7e2abe685a7e63fd9c7326c00d2ddbf91c17b9b59fde03fbe05f15fb7a4e63fd7b7b9bf65d7ddbf269321d729f7e03f5f32135cfba5e63f13de56baa0e1ddbf599738a6e3f5e03fa5511ba3b4a8e63f05a5ec7242dcddbf67a776f9d9f5e03fdb8ecf6cc6a8e63f7d7de66f22dcddbf342725c5a7f4e03ffe145f1466abe63f0214215de2d6ddbf +2478b4e986f9e03fb182a9b2c3a6e63f513326c8e1d9ddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +4895dbdb02fce03f05fc1df572a7e63f0f5b5fdd25d2ddbfc2ff337462fde03fac08e365a4a4e63fe43308338bd7ddbfabe554a532f7e03f8c391260e8a5e63f28f82949c6e1ddbf6d840b71ecf5e03fb97569afa1a8e63f47cd61ff67dcddbf55ab09c4e2f5e03fc80f8d79b3a8e63f17a3fbfb47dcddbf44267c8cb0f4e03fea711d2953abe63f4274ece607d7ddbfc7dde1e4a6fae03f9364745c3baae63faa9e46b2c8ccddbf154552e2f8fbe03f52ad9fb285a7e63f163d7ea403d2ddbf55ab09c4e2f5e03fc80f8d79b3a8e63f17a3fbfb47dcddbf6d840b71ecf5e03fb97569afa1a8e63f47cd61ff67dcddbf4895dbdb02fce03f05fc1df572a7e63f0f5b5fdd25d2ddbf +d4fa4dbb8ff9e03f6f28e1bbb0a6e63fb5b4574807daddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +6cc363a907fce03f78b8bcea7aa7e63f9dec77bc02d2ddbf3b5f624cbef5e03fd5bb2e3f0ba9e63f0a90476790dbddbf277bfd94c6f5e03fb7f452c7f9a8e63ff9cd719cb2dbddbf22af672810fce03f58ea238868a7e63f8547473f27d2ddbf611a6c6d35fde03fbde7d1e0a9a4e63f37f8f319e1d7ddbf54544963d3f6e03f501b610451a6e63f3ca2035b61e1ddbf277bfd94c6f5e03fb7f452c7f9a8e63ff9cd719cb2dbddbf3b5f624cbef5e03fd5bb2e3f0ba9e63f0a90476790dbddbfd84fead9c3f4e03fbfc80f5b9aabe63f417220a903d6ddbf32f9711beefae03f7217bb1321aae63f75f6195a76ccddbf6cc363a907fce03f78b8bcea7aa7e63f9dec77bc02d2ddbf +ed11627466f9e03fc04c0083e0a6e63f1a57d526d4d9ddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +bd59cb9432f7e03fd2fa62f3e7a5e63f2b6e37b8c7e1ddbf3e91985fecf5e03fbe94c739a1a8e63f88f4108c69dcddbfeb8a34b2e2f5e03fcdf13e04b3a8e63fe6448e8849dcddbf1f268b79b0f4e03f02c82dab52abe63f46c9aa9009d7ddbfeb6c84b6a6fae03f292a37ed3aaae63f19c65d6ecaccddbfb50dabb4f8fbe03fed16784c85a7e63f0809ed4205d2ddbfeb8a34b2e2f5e03fcdf13e04b3a8e63fe6448e8849dcddbf3e91985fecf5e03fbe94c739a1a8e63f88f4108c69dcddbfa2163cae02fce03f7fd9ec8e72a7e63f49f3d67b27d2ddbffc61354762fde03f5e570a09a4a4e63f05364bb38cd7ddbfbd59cb9432f7e03fd2fa62f3e7a5e63f2b6e37b8c7e1ddbf +41316a9c8ff9e03ff04e5152b0a6e63fa70700cf08daddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +518c8fe1b1f4e03ff2a2888551abe63fe243b4da09d7ddbfd4dff533a8fae03fef301bc039aae63f5df0159dcaccddbfc47b4934fafbe03f00e8981684a7e63f9eb4978605d2ddbfb477041ce4f5e03fa29d2cd6b1a8e63ff98869e749dcddbf68b958c9edf5e03f7c08ad0ba0a8e63f61f323eb69dcddbfc895ea2d04fce03f40b5e95871a7e63fafeec4bf27d2ddbf229930c963fde03f4574f8c9a2a4e63f1d81b20c8dd7ddbf0ab48d0034f7e03ff12c89bce6a5e63f456e822cc8e1ddbf68b958c9edf5e03f7c08ad0ba0a8e63f61f323eb69dcddbfb477041ce4f5e03fa29d2cd6b1a8e63ff98869e749dcddbf518c8fe1b1f4e03ff2a2888551abe63fe243b4da09d7ddbf +1c26fc1191f9e03f8fd2f41bafa6e63f0375492b09daddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +f304b366e4f5e03f2e5ecf01b3a8e63f8bbd3fb045dcddbfd90bf613eef5e03fa9b86237a1a8e63facc1eeb365dcddbf38baa07a04fce03f1e9aa48272a7e63fcf1a4c8823d2ddbfb673751564fde03f9bde4cf3a3a4e63f91c597d888d7ddbff7dbb64a34f7e03f6c44e0e7e7a5e63f4f4496f8c3e1ddbfd90bf613eef5e03fa9b86237a1a8e63facc1eeb365dcddbff304b366e4f5e03f2e5ecf01b3a8e63f8bbd3fb045dcddbf0981b42cb2f4e03f31d686b152abe63faa2c4ca005d7ddbf3b812181a8fae03fb88532ea3aaae63f4c9c5462c6ccddbf71af0381fafbe03f44ea4a4085a7e63f8544294f01d2ddbff304b366e4f5e03f2e5ecf01b3a8e63f8bbd3fb045dcddbf +bc46685d91f9e03faf968146b0a6e63fc7b196f504daddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +e903db8064fde03f908f5533a4a4e63fcd60ab2187d7ddbf1418b4a634f7e03fe8504d3fe8a5e63fd423a11ec2e1ddbf77d7bd7aeef5e03f0bf1698ea1a8e63f87e144c263dcddbfe13686cee4f5e03f5664b257b3a8e63f08e0aabf43dcddbfac3b309fb2f4e03f7482100753abe63f3d2f289803d7ddbf41ec7802a9fae03f9fba7b293baae63f960c047bc4ccddbf6fa9a5f7fafbe03f39a6977f85a7e63f3e288980ffd1ddbfe13686cee4f5e03f5664b257b3a8e63f08e0aabf43dcddbf77d7bd7aeef5e03f0bf1698ea1a8e63f87e144c263dcddbfbd1bedf004fce03f814185c272a7e63f4e97afb821d2ddbfe903db8064fde03f908f5533a4a4e63fcd60ab2187d7ddbf +4a7274c691f9e03ff2ed5192b0a6e63f24338b2003daddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +4cb0b669c7f5e03f72aed011f9a8e63fbec21fe0b2dbddbf79f80b20bff5e03fce1cfe8a0aa9e63fb57c60a990dbddbfcef7f19fc4f4e03f50a2f3ad99abe63ff50c18f503d6ddbf4a4286e2eefae03f6b54ab7820aae63f95a0166c76ccddbf5b3e7a7e08fce03f6b6eb0487aa7e63fd3736dc302d2ddbf79f80b20bff5e03fce1cfe8a0aa9e63fb57c60a990dbddbf4cb0b669c7f5e03f72aed011f9a8e63fbec21fe0b2dbddbf5b77ddfd10fce03fd63f59e567a7e63f1ea3a34727d2ddbf5c522f5136fde03f0c89aa36a9a4e63f0c8bb817e1d7ddbfab9ef145d4f6e03f50a77e4750a6e63f0399fe9461e1ddbf4cb0b669c7f5e03f72aed011f9a8e63fbec21fe0b2dbddbf +d0bd6c5067f9e03fca170bd3dfa6e63fed7f6e48d4d9ddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +c504d2fc68f2e03f201f494dbbaae63fd621208e02deddbfe72689fd49f5e03f7f49244f2cade63f9d4f43480cd0ddbf5474305e38f8e03fe4f04f038caae63fc18da75c5dd1ddbfd64f2beb38f5e03fa1ececc522a8e63f3c7292dc80dfddbfbca1107b4cf5e03fb243692d12a8e63fe1e20dca86dfddbfde5ba4e64cf8e03f2a1a59647aaae63f726a9d3264d1ddbf785cf11e56fbe03fdb22ed34c3a7e63f8a50d87fbbd2ddbf8f18aff439f8e03f812c7eec65a5e63f53edffb0fbe0ddbfbca1107b4cf5e03fb243692d12a8e63fe1e20dca86dfddbfd64f2beb38f5e03fa1ececc522a8e63f3c7292dc80dfddbfc504d2fc68f2e03f201f494dbbaae63fd621208e02deddbf +fcbfa07a3df8e03f7f864fceeca7e63f2aa9fe1949d9ddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +1f3a4ff001fce03fd3b03baa72a7e63fc5668bd928d2ddbf5881a78761fde03fe201471ca4a4e63fae52222d8ed7ddbf64242bbb31f7e03f360c2516e8a5e63fc0c2123dc9e1ddbffb14d587ebf5e03fa5f23e64a1a8e63f02de5ff56adcddbf0277dfdae1f5e03fdd66522eb3a8e63f019f11f24adcddbf47ea3aa4aff4e03ff306b2dc52abe63fd77709df0ad7ddbff21555faa5fae03f6e724b103baae63fb38088b0cbccddbf493acdf6f7fbe03fa57eb06785a7e63f92b7c3a006d2ddbf0277dfdae1f5e03fdd66522eb3a8e63f019f11f24adcddbffb14d587ebf5e03fa5f23e64a1a8e63f02de5ff56adcddbf1f3a4ff001fce03fd3b03baa72a7e63fc5668bd928d2ddbf +7e2a77d08ef9e03fb25d7871b0a6e63fe46157400adaddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +7bcb818aa7fae03f152bf5543aaae63f949a6f5acaccddbfbf59bd8ef9fbe03fda696cad84a7e63f3ee46a3505d2ddbf6dd10a81e3f5e03f9e8b8062b2a8e63fa471929d49dcddbf62a6cd2eedf5e03f1f0d8f97a0a8e63f2ec9ada169dcddbf9c977d8803fce03f6ea28aef71a7e63fa295ed6e27d2ddbfa77cb92763fde03f78919562a3a4e63f2f9a35ad8cd7ddbf668cfc6933f7e03fe68d3d4ae7a5e63fc542d9d4c7e1ddbf62a6cd2eedf5e03f1f0d8f97a0a8e63f2ec9ada169dcddbf6dd10a81e3f5e03f9e8b8062b2a8e63fa471929d49dcddbf6bdd9e42b1f4e03f74a1171052abe63f136ae99e09d7ddbf7bcb818aa7fae03f152bf5543aaae63f949a6f5acaccddbf +94170f7490f9e03f925b0baeafa6e63f367e19d708daddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +817ced9903fce03f6702292a71a7e63fe66afb9e29d2ddbf37e40a2963fde03f35b369a7a2a4e63f180949e28ed7ddbfa92de37233f7e03f60f8b7a0e6a5e63f8b8791c2c9e1ddbfc4655747edf5e03f4f38e5e39fa8e63f397f3f8b6bdcddbfee81c19ae3f5e03fe45d77adb1a8e63f6ab8a6884bdcddbf74588c6bb1f4e03ff76b545151abe63f840a92850bd7ddbf667827aca7fae03fb177068539aae63f06e45686ccccddbfe880a8a0f9fbe03f450535e783a7e63f040cee6607d2ddbfee81c19ae3f5e03fe45d77adb1a8e63f6ab8a6884bdcddbfc4655747edf5e03f4f38e5e39fa8e63f397f3f8b6bdcddbf817ced9903fce03f6702292a71a7e63fe66afb9e29d2ddbf +98114a8190f9e03f1740b3f6aea6e63f72c87be50adaddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +13bfb781c0f5e03f6aeeb8b40aa9e63fb48c1d078ddbddbf3e7af1cbc8f5e03f320fd53af9a8e63f2abbc43eafdbddbfdd4f746612fce03f422f7d1568a7e63f32beda7f23d2ddbf098e1bc237fde03f6632a860a9a4e63f738a3350ddd7ddbf33ba3ab0d5f6e03f97f3706a50a6e63f90ba4df45de1ddbf3e7af1cbc8f5e03f320fd53af9a8e63f2abbc43eafdbddbf13bfb781c0f5e03f6aeeb8b40aa9e63fb48c1d078ddbddbf3910c8f9c5f4e03faf9582dd99abe63f6b7e605200d6ddbfdbc1c042f0fae03f57361eaf20aae63ff87a97a372ccddbf53c0d8e609fce03f3a5043797aa7e63f1848d0fafed1ddbf13bfb781c0f5e03f6aeeb8b40aa9e63fb48c1d078ddbddbf +29e6cfb968f9e03fb0f38bfcdfa6e63fec1b7794d0d9ddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +d3e36d82a9f4e03f93d1651567abe63f3bebf45bdbd6ddbf04f547cf9ffae03f75090c4d4faae63f6c33c02d9cccddbf64e2accef1fbe03f534c97a999a7e63f0b8e7318d7d1ddbf71d30fbcdbf5e03fecebfa6bc7a8e63f31a998691bdcddbff9954169e5f5e03f54aacaa1b5a8e63f89d0206d3bdcddbfaca644c8fbfbe03f38eb25ec86a7e63ffbf27051f9d1ddbfdb4098625bfde03fe1877d63b8a4e63fea64829f5ed7ddbf866f999f2bf7e03fd20bcf58fca5e63fe19371af99e1ddbff9954169e5f5e03f54aacaa1b5a8e63f89d0206d3bdcddbf71d30fbcdbf5e03fecebfa6bc7a8e63f31a998691bdcddbfd3e36d82a9f4e03f93d1651567abe63f3bebf45bdbd6ddbf +5bb7b8ae88f9e03fd416b9b3c4a6e63fb69f79b5dad9ddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +d03f5bea03fce03f7cf51c9471a7e63f0a04cba527d2ddbfdd1d5b7a63fde03f130bac08a3a4e63fb32bec018dd7ddbf1001a9ab33f7e03fbabfe60de7a5e63fb874a1f6c7e1ddbfdf66827fedf5e03fe9686e59a0a8e63f1bc9e3a669dcddbfdbe124d3e3f5e03f7e32d822b2a8e63f4b9a42a449dcddbf12b588a3b1f4e03fb268c2ce51abe63f64372b8909d7ddbfeb08c9fba7fae03f625a73f739aae63f5389bd74caccddbfa3e211f1f9fbe03f8924335184a7e63f66d4a56d05d2ddbfdbe124d3e3f5e03f7e32d822b2a8e63f4b9a42a449dcddbfdf66827fedf5e03fe9686e59a0a8e63f1bc9e3a669dcddbfd03f5bea03fce03f7cf51c9471a7e63f0a04cba527d2ddbf +cb97b9c590f9e03ff6115d62afa6e63fdc570c0309daddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +07ab56a8a7fae03f72533e953aaae63f6d45df52c9ccddbfd39a72a7f9fbe03f44e6c1eb84a7e63f7c66b53f04d2ddbf4ab96d8de3f5e03fcb5abcadb2a8e63feeba129d48dcddbf42a5a23aedf5e03f49de5fe3a0a8e63f9becada068dcddbf71a409a103fce03f1c01252e72a7e63f6f3bc67826d2ddbf8de7123b63fde03f4e483e9fa3a4e63fc6750ac98bd7ddbff1d99d7033f7e03f05eb4c94e7a5e63fbd1644e5c6e1ddbf42a5a23aedf5e03f49de5fe3a0a8e63f9becada068dcddbf4ab96d8de3f5e03fcb5abcadb2a8e63feeba129d48dcddbfa34b2f54b1f4e03f4595095d52abe63fdde42b8d08d7ddbf07ab56a8a7fae03f72533e953aaae63f6d45df52c9ccddbf +c5d6908390f9e03f47ca78f2afa6e63fd9f523e407daddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +f8bb1c87d5f6e03f62eeb99c4fa6e63fe26e6ac160e1ddbfd74ff3a3c8f5e03fd8e84f69f8a8e63f659aac15b2dbddbf995cba59c0f5e03f49fd28e309a9e63f0a6829de8fdbddbf1e6fd0d2c5f4e03ffce0490899abe63f6e55023303d6ddbf34f20412f0fae03fab8749dd1faae63fe0740d9175ccddbfd163e9b409fce03f2a563dab79a7e63f6039a2de01d2ddbf995cba59c0f5e03f49fd28e309a9e63f0a6829de8fdbddbfd74ff3a3c8f5e03fd8e84f69f8a8e63f659aac15b2dbddbf3b0b7b3412fce03fcbcc8a4767a7e63f556b826326d2ddbf0c28df8e37fde03f2ee2a696a8a4e63f9088f229e0d7ddbff8bb1c87d5f6e03f62eeb99c4fa6e63fe26e6ac160e1ddbf +a4d3558c68f9e03f1521af2edfa6e63fc231c46cd3d9ddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +db582cd1e5f5e03f6c5ab145b2a8e63fe3a4b6b344dcddbf9c1eae7eeff5e03fa52cf37aa0a8e63f9c0bccb764dcddbf2a18a2ef05fce03fd523dcc671a7e63f23b4217122d2ddbf6e81658f65fde03f9be08431a3a4e63f65720dc887d7ddbf23dd21ba35f7e03f17fd9525e7a5e63f4e0d3203c3e1ddbf9c1eae7eeff5e03fa52cf37aa0a8e63f9c0bccb764dcddbfdb582cd1e5f5e03f6c5ab145b2a8e63fe3a4b6b344dcddbf9826ac92b3f4e03f88250afb51abe63f8247359d04d7ddbfefc535f1a9fae03f5f876d343aaae63f21d07044c5ccddbfea44e0f5fbfbe03f6f96c18484a7e63f355b953700d2ddbfdb582cd1e5f5e03f6c5ab145b2a8e63fe3a4b6b344dcddbf +b3948bcf92f9e03f9d857987afa6e63fe7107fef03daddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +304fdf22e5f5e03f679ae700b3a8e63f2611790744dcddbff1f6b3d0eef5e03f3ba7e735a1a8e63fbc239d0b64dcddbf69ee342505fce03f01c1ff8f72a7e63fc08519db21d2ddbf9f5fadc464fde03ff3dfca04a4a4e63f3de9791487d7ddbf26f72b0c35f7e03fe36045eae7a5e63f2b9dfa39c2e1ddbff1f6b3d0eef5e03f3ba7e735a1a8e63fbc239d0b64dcddbf304fdf22e5f5e03f679ae700b3a8e63f2611790744dcddbf7ec321e4b2f4e03f789fddac52abe63fb88a8c0d04d7ddbf342af726a9fae03fbc19b8f33aaae63f683169cbc4ccddbf1b5e722bfbfbe03f2c38e34d85a7e63fd02c91a1ffd1ddbf304fdf22e5f5e03f679ae700b3a8e63f2611790744dcddbf +42718b1392f9e03f8c54454eb0a6e63fa8f7bc3f03daddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +7b78cbc233f7e03fe66dfbf6e7a5e63f067a77ffc4e1ddbf67f8cf98edf5e03fe5720644a1a8e63f4a575ba566dcddbf955bb7ece3f5e03f8447280db3a8e63fd8bcf2a246dcddbff3024abfb1f4e03f5fd889ba52abe63fe3e59a7d06d7ddbf5e7d611fa8fae03f8b543ddc3aaae63fbc22936bc7ccddbfb7fb8b12fafbe03f6546603485a7e63fcbbd0a6f02d2ddbf955bb7ece3f5e03f8447280db3a8e63fd8bcf2a246dcddbf67f8cf98edf5e03fe5720644a1a8e63f4a575ba566dcddbff993c30b04fce03fec79697772a7e63f1088fea624d2ddbfcc97a09963fde03ffffc56eaa3a4e63f2c6aca0d8ad7ddbf7b78cbc233f7e03fe66dfbf6e7a5e63f067a77ffc4e1ddbf +1c64f1e190f9e03f217c9b48b0a6e63fbbfa090806daddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +e4b3af09a9fae03f9d350e083aaae63f6cc818dbc7ccddbf2a80aa10fbfbe03f2d8b506584a7e63f9c6451a102d2ddbfa1b3cc14e5f5e03f695b530eb2a8e63f240bc00747dcddbfbec3fcc2eef5e03f1d38f742a0a8e63f4bd9260c67dcddbf5be5810a05fce03f39b749a771a7e63fc92610db24d2ddbf55ce7cac64fde03fc6f23a1fa3a4e63f935a4d048ad7ddbfa8570a0135f7e03f822a4bfae6a5e63f42e3ca2ac5e1ddbfbec3fcc2eef5e03f1d38f742a0a8e63f4bd9260c67dcddbfa1b3cc14e5f5e03f695b530eb2a8e63f240bc00747dcddbf64326fd3b2f4e03f74116cb751abe63fa167591d07d7ddbfe4b3af09a9fae03f9d350e083aaae63f6cc818dbc7ccddbf +ec17b70092f9e03f757bd961afa6e63fc3b9243806daddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +cc20be1963fde03ff489c76ea4a4e63f42080f9f89d7ddbf7dae874c33f7e03f5c44ed66e8a5e63f5733abb8c4e1ddbfe9ca4c17edf5e03feee83eb6a1a8e63fcdbdea7066dcddbf703b326ae3f5e03f57987d80b3a8e63f08a0696d46dcddbf479cb531b1f4e03ff59a073053abe63f74565f5a06d7ddbff54c8288a7fae03fe8b74c653baae63f80be7222c7ccddbf8fc8e186f9fbe03f763786bb85a7e63f04dc8a1202d2ddbf703b326ae3f5e03f57987d80b3a8e63f08a0696d46dcddbfe9ca4c17edf5e03feee83eb6a1a8e63fcdbdea7066dcddbff491728003fce03f2a1ff7fd72a7e63f94b4844b24d2ddbfcc20be1963fde03ff489c76ea4a4e63f42080f9f89d7ddbf +f893356190f9e03fc69fb7c3b0a6e63f548831b705daddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +184bffb0d9f6e03ffd28b1373ca6e63fe065c81a92e1ddbf68ab9ed4ccf5e03f130ecd07e5a8e63f26abd165e3dbddbfc2cade8ac4f5e03f3d143d81f6a8e63f0bd7e42ec1dbddbf57dca40acaf4e03f707ec8a985abe63f3d81877a34d6ddbfe0b4a553f4fae03f18cfe5750caae63f02a7bee5a6ccddbf8005d4ef0dfce03fdbe3344066a7e63fbe70fc3c33d2ddbfc2cade8ac4f5e03f3d143d81f6a8e63f0bd7e42ec1dbddbf68ab9ed4ccf5e03f130ecd07e5a8e63f26abd165e3dbddbf69e0396f16fce03fc5a7a7dc53a7e63f36e65dc157d2ddbf1368c4c23bfde03f567c0c2895a4e63fb23c6a9111d8ddbf184bffb0d9f6e03ffd28b1373ca6e63fe065c81a92e1ddbf +40a496be6cf9e03f6cfccac6cba6e63fc70147c804daddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +7825f9c038f8e03feea8d86264a5e63f67297a1503e1ddbfb20c7d3a4bf5e03f292df2b310a8e63f97a5181b8edfddbf7467cfaa37f5e03fa3e6714c21a8e63f402d2c2d88dfddbf33f51fb067f2e03fb82097e3b9aae63fdf9e36cb09deddbf778f4bca48f5e03fd4845dea2aade63fd89bd24013d0ddbfedc6013837f8e03fa2d7698e8aaae63f05de2e6864d1ddbf7467cfaa37f5e03fa3e6714c21a8e63f402d2c2d88dfddbfb20c7d3a4bf5e03f292df2b310a8e63f97a5181b8edfddbf86ad93c04bf8e03fa59755ef78aae63f32fa373e6bd1ddbfb67e5d0655fbe03fb0165dafc1a7e63f6684a29ec2d2ddbf7825f9c038f8e03feea8d86264a5e63f67297a1503e1ddbf +fb968c4d3cf8e03f4cd1f94eeba7e63f8d39835250d9ddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +e6b42740bff5e03f5613a1770ba9e63fdce40b928ddbddbf7c5a4d89c7f5e03fdb5c17fff9a8e63fa9150ec8afdbddbfbbadc21f11fce03f82b138c868a7e63f1ef7064924d2ddbf1c0c706c36fde03ff0bf241caaa4e63f51cd3521ded7ddbf1969085fd4f6e03f90916b3751a6e63fa7b68d845ee1ddbf7c5a4d89c7f5e03fdb5c17fff9a8e63fa9150ec8afdbddbfe6b42740bff5e03f5613a1770ba9e63fdce40b928ddbddbf95f36ec6c4f4e03f51c40b989aabe63f0e9a1cd600d6ddbf23471b0beffae03fa806be5821aae63f61aee06573ccddbf2f448ba008fce03f505b372b7ba7e63f504174c5ffd1ddbfe6b42740bff5e03f5613a1770ba9e63fdce40b928ddbddbf +1131e86d67f9e03f66f382bce0a6e63f61fcb740d1d9ddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +5ba6d1fd3ffbe03f65587a1fd4a7e63f369efb7fbad2ddbf42aa9bcf23f8e03f04b428d776a5e63f8dd062b6fae0ddbf3bcf3e5336f5e03f4f4b541723a8e63f112428c985dfddbfd53264c322f5e03f87babdaf33a8e63f0e2184db7fdfddbf4a6f67d252f2e03fa72d6736ccaae63fbf36e78601deddbf50e1c3d633f5e03fcf3f21383dade63f000cae3b0bd0ddbf29e92e3a22f8e03f79f703ed9caae63f005351565cd1ddbfd53264c322f5e03f87babdaf33a8e63f0e2184db7fdfddbf3bcf3e5336f5e03f4f4b541723a8e63f112428c985dfddbfda73a9c236f8e03f5f26224e8baae63f405b5d2c63d1ddbf5ba6d1fd3ffbe03f65587a1fd4a7e63f369efb7fbad2ddbf +19f1115627f8e03f2ac289b8fda7e63f4b42981948d9ddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +154ac5e996fae03f2dda240164aae63fff2b3a7771ccddbfe1c4a8e0e8fbe03f6ec5195eaea7e63f58e4a484acd1ddbf6e9e7eb9d2f5e03f38693f3adca8e63f9e0162baf0dbddbfea0a9f65dcf5e03f619f5471caa8e63f0c45e6bc10dcddbf744ef9d9f2fbe03f61614fa19ba7e63fa8f6b9bcced1ddbf5b11b46b52fde03f552d3b19cda4e63f4b32c02d34d7ddbfe59c5b9322f7e03fced9302911a6e63fccedff206fe1ddbfea0a9f65dcf5e03f619f5471caa8e63f0c45e6bc10dcddbf6e9e7eb9d2f5e03f38693f3adca8e63f9e0162baf0dbddbf4b707588a0f4e03f7087e1e27babe63f954c508bb0d6ddbf154ac5e996fae03f2dda240164aae63fff2b3a7771ccddbf +02bf50b17ff9e03f027eae76d9a6e63fbac5ab23b0d9ddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +e9925498b2f4e03f3b10270b52abe63f38c73fa506d7ddbf19e88adfa8fae03f18afbf3f3aaae63f6a18b691c7ccddbfbb2eebd7fafbe03f431e0c9e84a7e63f2ad2337602d2ddbf7ceb35cbe4f5e03fe0da7d63b2a8e63f4ec66fac46dcddbf65eb0478eef5e03fbc2ea599a0a8e63fa23962af66dcddbfe0b94dd104fce03f3938cee071a7e63fb3469bae24d2ddbf7dea676464fde03fe9cc025aa3a4e63f85ec0cf689d7ddbffe9261a734f7e03f946b8352e7a5e63fc21cf5eac4e1ddbf65eb0478eef5e03fbc2ea599a0a8e63fa23962af66dcddbf7ceb35cbe4f5e03fe0da7d63b2a8e63f4ec66fac46dcddbfe9925498b2f4e03f3b10270b52abe63f38c73fa506d7ddbf +caed2cb791f9e03f55afebaaafa6e63faecba10106daddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +ea1ad49903fce03f7d2778e472a7e63f027f2b5f24d2ddbf99b7613b63fde03f11c4804fa4a4e63f33fb60b189d7ddbf7c51496933f7e03ff09fae3ee8a5e63ff6095ff1c4e1ddbf4e500e2cedf5e03ff578bb93a1a8e63f634784aa66dcddbfcf8d5a7ee3f5e03f8501b05eb3a8e63f56ed37a646dcddbf8ed4163eb1f4e03f87feb91353abe63f85ce3d9406d7ddbf75069699a7fae03fd85ac0513baae63f8aedff36c7ccddbf78e203a0f9fbe03f9fb277a285a7e63f24ee6c2502d2ddbfcf8d5a7ee3f5e03f8501b05eb3a8e63f56ed37a646dcddbf4e500e2cedf5e03ff578bb93a1a8e63f634784aa66dcddbfea1ad49903fce03f7d2778e472a7e63f027f2b5f24d2ddbf +926d3d7c90f9e03f3112cba2b0a6e63fb4e8a3dd05daddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +857eaaac36f7e03f1a63c043e6a5e63fc5fc0c89c3e1ddbfcb2e4a74f0f5e03f20db68919fa8e63fa97ba14e65dcddbf5ba9cec6e6f5e03ff1d30e5cb1a8e63f8c67cb4a45dcddbf1887288bb4f4e03f8c03fc0951abe63f994cef4405d7ddbf09c6cdd6aafae03f925ed64839aae63f9fbfe805c6ccddbf7cd63fd8fcfbe03fae8bdda083a7e63fca825de800d2ddbf5ba9cec6e6f5e03ff1d30e5cb1a8e63f8c67cb4a45dcddbfcb2e4a74f0f5e03f20db68919fa8e63fa97ba14e65dcddbf29c4e9d106fce03f5cb320e370a7e63f18b5a02123d2ddbffa8c4f6e66fde03ff11cc155a2a4e63f7cd3686788d7ddbf857eaaac36f7e03f1a63c043e6a5e63fc5fc0c89c3e1ddbf +cc0516ba93f9e03f043aa3a4aea6e63f6fea808a04daddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +ebf2006632f7e03f65b70f11e8a5e63f40c883c8c7e1ddbf509f672decf5e03f0edf5b63a1a8e63f4d3ce57f69dcddbf5fa81080e2f5e03f8673e42db3a8e63f92ed0f7c49dcddbf569a5044b0f4e03f183f4be052abe63f72f13e6809d7ddbf49fcae9ea6fae03f6f9ee4183baae63f014ece1fcaccddbf902776a0f8fbe03f5b523b6c85a7e63f94f9701005d2ddbf5fa81080e2f5e03f8673e42db3a8e63f92ed0f7c49dcddbf509f672decf5e03f0edf5b63a1a8e63f4d3ce57f69dcddbfc5c5219a02fce03f1d447cae72a7e63f876cbc4927d2ddbfc412ec3662fde03f0d0c481ca4a4e63f321dfc9d8cd7ddbfebf2006632f7e03f65b70f11e8a5e63f40c883c8c7e1ddbf +6fdbc27a8ff9e03f1a900671b0a6e63f5cfa57be08daddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +f9f1eb7bb0f4e03f493a6a3d52abe63f8125cfd80ad7ddbf1fa14dc9a6fae03f5a892b723aaae63f3ae2e3b9cbccddbf02d796c3f8fbe03f7af289cd84a7e63f7728a5a206d2ddbfcac291b0e2f5e03fbe8de592b2a8e63f9f8452e44adcddbf4072755decf5e03f368cefc8a0a8e63fcea66de76adcddbf882b08bd02fce03f4a5b321072a7e63f8d7437db28d2ddbf2a441c5262fde03f979a5c86a3a4e63f96e515278ed7ddbf4f2dae8e32f7e03ff7b5d67ee7a5e63f59b36f27c9e1ddbf4072755decf5e03f368cefc8a0a8e63fcea66de76adcddbfcac291b0e2f5e03fbe8de592b2a8e63f9f8452e44adcddbff9f1eb7bb0f4e03f493a6a3d52abe63f8125cfd80ad7ddbf +db14a5a08ff9e03f297dc8d8afa6e63f2e1a41360adaddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +66efefa435f7e03f0fdc713ce6a5e63f535623f6c5e1ddbf2cdd0e6aeff5e03f561cb7939fa8e63fa4e17fa467dcddbf2306a7bce5f5e03f538f5f5eb1a8e63fd9b376a047dcddbf0a9ac17eb3f4e03f58a38f1551abe63f843ccf8307d7ddbfaf6a21e3a9fae03feedac54b39aae63fe4e35428c8ccddbfeb4a44e7fbfbe03f46b5299a83a7e63f526cbe2103d2ddbf2306a7bce5f5e03f538f5f5eb1a8e63fd9b376a047dcddbf2cdd0e6aeff5e03f561cb7939fa8e63fa4e17fa467dcddbfb3a401e105fce03fbd8748dc70a7e63fd36a425b25d2ddbfc2503f8065fde03f415ff344a2a4e63f57d18db88ad7ddbf66efefa435f7e03f0fdc713ce6a5e63f535623f6c5e1ddbf +2d1b98bd92f9e03f5776a49daea6e63fdd820bde06daddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +6d6f57cf35f7e03f877f05eee6a5e63fdd647b7bc3e1ddbfce33fa9aeff5e03fb5c63038a0a8e63ffd1a234265dcddbff327c8ede5f5e03f6be67c02b2a8e63ff71ab43e45dcddbf48b405b6b3f4e03f0ca410ad51abe63fa306cf3905d7ddbf82fbc2fda9fae03f5a4873e839aae63f77d5fa0ec6ccddbf288827fbfbfbe03f54a2dc4384a7e63fd706c2f000d2ddbff327c8ede5f5e03f6be67c02b2a8e63ff71ab43e45dcddbfce33fa9aeff5e03fb5c63038a0a8e63ffd1a234265dcddbf9d83b1f405fce03feec4598671a7e63faa89a02923d2ddbf7bbbee8c65fde03f166f84fca2a4e63faf26876e88d7ddbf6d6f57cf35f7e03f877f05eee6a5e63fdd647b7bc3e1ddbf +38ffd7dc92f9e03f133b674bafa6e63f7d0e938704daddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +9ea7d889dbf5e03fa270e826caa8e63f4a12239213dcddbf94fee0ddd1f5e03f1c8b95efdba8e63f690e0090f3dbddbf219b8cb09ff4e03fe749ad917babe63f40ead86cb3d6ddbf753beb0396fae03f043db0b163aae63f3b27d67474ccddbff35cc9f6e7fbe03f5b4a6215aea7e63fecde7476afd1ddbf94fee0ddd1f5e03f1c8b95efdba8e63f690e0090f3dbddbf9ea7d889dbf5e03fa270e826caa8e63f4a12239213dcddbfdcfbfaeff1fbe03fa091cf589ba7e63f995524aed1d1ddbf72ca8b7d51fde03ff3c7b9d7cca4e63fd443f31237d7ddbf22d7acb321f7e03f560991e510a6e63f422108ea71e1ddbf9ea7d889dbf5e03fa270e826caa8e63f4a12239213dcddbf +4ab493cc7ef9e03fd1439830d9a6e63f6074b400b3d9ddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +7a3e363c62fde03f56979620a3a4e63f9c14d88d8fd7ddbfaa385b7632f7e03f2e808b0de7a5e63f3e4b25b6cae1ddbf7d236e3cecf5e03fa5ac015da0a8e63f466a0e7a6cdcddbfe96ada8ee2f5e03f211bc627b2a8e63fac2f13764cdcddbfa93db851b0f4e03ffc0170d751abe63f6d929d6e0cd7ddbf233a6fa1a6fae03f14265d173aaae63f90f70229cdccddbfe77777a4f8fbe03f5520a06d84a7e63fe1ed010d08d2ddbfe96ada8ee2f5e03f211bc627b2a8e63fac2f13764cdcddbf7d236e3cecf5e03fa5ac015da0a8e63f466a0e7a6cdcddbf03002e9e02fce03f96d9ccaf71a7e63fb2026c462ad2ddbf7a3e363c62fde03f56979620a3a4e63f9c14d88d8fd7ddbf +0de408858ff9e03fe7b1dd6fafa6e63fbb8c7eb30bdaddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +78a58f94a8fae03f2b0111cf39aae63f516b6993c9ccddbfb35bd88dfafbe03ff0d9c22c84a7e63fa797357704d2ddbffa043c81e4f5e03f832a3bf0b1a8e63ff6265cb248dcddbf03d6202eeef5e03f5c8d4726a0a8e63f26f16bb568dcddbfad71428704fce03f2319756f71a7e63f5704b9af26d2ddbf28de491b64fde03f71ca06e8a2a4e63f1a0083f68bd7ddbfce17655e34f7e03f2b7081dee6a5e63fed9768f0c6e1ddbf03d6202eeef5e03f5c8d4726a0a8e63f26f16bb568dcddbffa043c81e4f5e03f832a3bf0b1a8e63ff6265cb248dcddbfd8cf774db2f4e03f6da7829851abe63f819dc6ab08d7ddbf78a58f94a8fae03f2b0111cf39aae63f516b6993c9ccddbf +0f25a96d91f9e03fe2c83a38afa6e63f4e7bf30408daddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +bec71ed863fde03fa933aabca3a4e63f43211a0a8ad7ddbf6f13de2834f7e03f82d2919ee7a5e63fcaffb123c5e1ddbfaf2270eeedf5e03f39779ae6a0a8e63f404860fe66dcddbfff0c9740e4f5e03f030f96b1b2a8e63f5e4056fa46dcddbfe14acb02b2f4e03fdca1145a52abe63f7a55490907d7ddbfecd7b63ca8fae03ff16b31a43aaae63fde1b3bd3c7ccddbfee611640fafbe03f361ff80185a7e63fbe4c77a002d2ddbfff0c9740e4f5e03f030f96b1b2a8e63f5e4056fa46dcddbfaf2270eeedf5e03f39779ae6a0a8e63f404860fe66dcddbf1dc1d03904fce03f7035244472a7e63f0719e0d924d2ddbfbec71ed863fde03fa933aabca3a4e63f43211a0a8ad7ddbf +4075422c91f9e03fba027602b0a6e63f400ae83306daddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +9799fc9fb3f4e03f9277e0d350abe63fb113e1ff07d7ddbf6e1f0df1a9fae03fca932b0939aae63f049d3ad3c8ccddbf225501edfbfbe03faba8da6183a7e63fc3bbc7bf03d2ddbf4b0234d6e5f5e03f87c7bb26b1a8e63fc9124c0f48dcddbf94292f83eff5e03ff518a35c9fa8e63fa2b4961268dcddbf99af7fe605fce03fa1f567a470a7e63f4b3f8af825d2ddbf6c0b4c7d65fde03f34c6c717a2a4e63f191c5e488bd7ddbf7ebb0ab635f7e03f5331d00fe6a5e63f4ad59956c6e1ddbf94292f83eff5e03ff518a35c9fa8e63fa2b4961268dcddbf4b0234d6e5f5e03f87c7bb26b1a8e63fc9124c0f48dcddbf9799fc9fb3f4e03f9277e0d350abe63fb113e1ff07d7ddbf +946408c992f9e03fd84b606baea6e63f0aca975c07daddbf +0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbfcff2fa0063fde03f2bf14980a3a4e63f9e4c49ab8cd7ddbf2deff23a33f7e03f71d5847be7a5e63f40a146aac7e1ddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfc141412ab1f4e03f4260e63a52abe63f2dc2355409d7ddbf2e98257aa7fae03f2ca20d6d3aaae63f20a66a36caccddbfdfba7773f9fbe03f49f9ebc784a7e63f1bc5062305d2ddbf5095ec5de3f5e03f72e7ee8fb2a8e63f3530766349dcddbfb657b50aedf5e03fe72f14c6a0a8e63fdd5f7c6669dcddbf0636e16c03fce03fb5c1a00a72a7e63f5818865b27d2ddbf +19b5af4e90f9e03fadd75bd4afa6e63fdcd0d0b708daddbf +8173bee9a5fae03f642024283aaae63f3c589d98ceccddbf8d3785e4f7fbe03ff4d5b57884a7e63f61b09da009d2ddbf212bf7b2e1f5e03fecfee44bb2a8e63f416b03fc4ddcddbf21ff8c5febf5e03f38132682a0a8e63f2c8d25ff6ddcddbfc55ff8dd01fce03f226153bb71a7e63fb7bd49d92bd2ddbf9d74a87361fde03f01145c26a3a4e63fb0210c4591d7ddbf6de0099131f7e03f6e36592de7a5e63fdeef825ecce1ddbf21ff8c5febf5e03f38132682a0a8e63f2c8d25ff6ddcddbf212bf7b2e1f5e03fecfee44bb2a8e63f416b03fc4ddcddbf9ca84b7eaff4e03fb454bc0052abe63f6a2baad10dd7ddbf8173bee9a5fae03f642024283aaae63f3c589d98ceccddbf +fd6915b28ef9e03fd737b885afa6e63f1d0efc500ddaddbf diff --git a/stsci/sphere/test/test_intersection.py b/stsci/sphere/test/test_intersection.py index 8127e95..8cf10b2 100644 --- a/stsci/sphere/test/test_intersection.py +++ b/stsci/sphere/test/test_intersection.py @@ -140,28 +140,6 @@ def test4(): X = Apoly.intersection(Bpoly) -# def test5(): -# from astropy.io import fits -# from astropy import wcs as pywcs - -# A = fits.open(os.path.join(ROOT_DIR, '2chipA.fits.gz')) -# B = fits.open(os.path.join(ROOT_DIR, '2chipB.fits.gz')) - -# wcs = pywcs.WCS(A[1].header, fobj=A) -# chipA1 = polygon.SphericalPolygon.from_wcs(wcs) -# wcs = pywcs.WCS(A[4].header, fobj=A) -# chipA2 = polygon.SphericalPolygon.from_wcs(wcs) -# wcs = pywcs.WCS(B[1].header, fobj=B) -# chipB1 = polygon.SphericalPolygon.from_wcs(wcs) -# wcs = pywcs.WCS(B[4].header, fobj=B) -# chipB2 = polygon.SphericalPolygon.from_wcs(wcs) - -# Apoly = chipA1.union(chipA2) -# Bpoly = chipB1.union(chipB2) - -# Apoly.overlap(chipB1) - - @intersection_test(0, 90) def test6(): from astropy.io import fits @@ -188,6 +166,30 @@ def test_intersection_empty(): assert_array_almost_equal(p2._points, []) +def test_difficult_intersections(): + # Tests a number of intersections of real data that have been + # problematic in previous revisions of sphere + + def test_intersection(polys): + A, B = polys + A.intersection(B) + + fname = resolve_imagename(ROOT_DIR, "difficult_intersections.txt") + with open(fname, 'rb') as fd: + lines = fd.readlines() + + def to_array(line): + x = np.frombuffer(line.strip().decode('hex'), dtype='<f8') + return x.reshape((len(x) / 3, 3)) + + for i in range(0, len(lines), 4): + Apoints, Ainside, Bpoints, Binside = [ + to_array(line) for line in lines[i:i+4]] + polyA = polygon.SphericalPolygon(Apoints, Ainside) + polyB = polygon.SphericalPolygon(Bpoints, Binside) + yield test_intersection, (polyA, polyB) + + if __name__ == '__main__': if '--profile' not in sys.argv: GRAPH_MODE = True diff --git a/stsci/sphere/test/test_union.py b/stsci/sphere/test/test_union.py index 24de9e6..60ea572 100644 --- a/stsci/sphere/test/test_union.py +++ b/stsci/sphere/test/test_union.py @@ -113,32 +113,6 @@ def test2(): return [poly1, poly2, poly3, poly4, poly5, poly6] -# @union_test(0, 90) -# def test3(): -# random.seed(0) -# polys = [] -# for i in range(10): -# polys.append(polygon.SphericalPolygon.from_cone( -# random.randrange(-180, 180), -# random.randrange(20, 90), -# random.randrange(5, 16), -# steps=16)) -# return polys - - -# @union_test(0, 15) -# def test4(): -# random.seed(64) -# polys = [] -# for i in range(10): -# polys.append(polygon.SphericalPolygon.from_cone( -# random.randrange(-30, 30), -# random.randrange(-15, 60), -# random.randrange(5, 16), -# steps=16)) -# return polys - - def test5(): from astropy.io import fits from astropy import wcs as pywcs @@ -204,18 +178,6 @@ def test8(): return [poly1, poly2] -if __name__ == '__main__': - if '--profile' not in sys.argv: - GRAPH_MODE = True - from mpl_toolkits.basemap import Basemap - from matplotlib import pyplot as plt - - functions = [(k, v) for k, v in globals().items() if k.startswith('test')] - functions.sort() - for k, v in functions: - v() - - def test_union_empty(): p = polygon.SphericalPolygon.from_cone( random.randrange(-180, 180), @@ -226,3 +188,37 @@ def test_union_empty(): p2 = p.union(polygon.SphericalPolygon([])) assert_array_almost_equal(p2._points, p._points) + + +def test_difficult_unions(): + # Tests a number of intersections of real data that have been + # problematic in previous revisions of sphere + + fname = resolve_imagename(ROOT_DIR, "difficult_intersections.txt") + with open(fname, 'rb') as fd: + lines = fd.readlines() + + def to_array(line): + x = np.frombuffer(line.strip().decode('hex'), dtype='<f8') + return x.reshape((len(x) / 3, 3)) + + polys = [] + for i in range(0, len(lines), 2): + points, inside, = [ + to_array(line) for line in lines[i:i+2]] + poly = polygon.SphericalPolygon(points, inside) + polys.append(poly) + + polygon.SphericalPolygon.multi_union(polys) + + +if __name__ == '__main__': + if '--profile' not in sys.argv: + GRAPH_MODE = True + from mpl_toolkits.basemap import Basemap + from matplotlib import pyplot as plt + + functions = [(k, v) for k, v in globals().items() if k.startswith('test')] + functions.sort() + for k, v in functions: + v() |