diff options
author | lloyd <[email protected]> | 2010-02-24 02:18:55 +0000 |
---|---|---|
committer | lloyd <[email protected]> | 2010-02-24 02:18:55 +0000 |
commit | 6e50979c8d2a0635599228a2ae1a20d59b24a0c6 (patch) | |
tree | 587aaf6c20d45a6fa81ee180ca0aa533f51403d1 | |
parent | 888fc3d0f2f6f1dc5e9764e83e9b7fd64da916d8 (diff) | |
parent | 8c951ef2f1e54e1134e8db683662ec881df89c88 (diff) |
propagate from branch 'net.randombit.botan' (head 84baf58b29f3aaaee34e2b873d0040be5a6c4368)
to branch 'net.randombit.botan.gost_3410' (head 63cbe3e357c071d7960bfedc31101eff35895285)
237 files changed, 17412 insertions, 3352 deletions
diff --git a/.mtn-ignore b/.mtn-ignore index 2cac84769..8be5a95a8 100644 --- a/.mtn-ignore +++ b/.mtn-ignore @@ -13,6 +13,7 @@ callgrind.out.* ^doc/doxygen$ ^doc/[a-z]+\.(pdf|log|toc)$ ^doc/examples/.*\.pem$ +^doc/examples/[a-z0-9_]+$ ^src/wrap/perl-xs/Botan.(bs|c)$ ^src/wrap/perl-xs/Makefile(\.old)?$ ^src/wrap/perl-xs/.*blib$ diff --git a/checks/bench.cpp b/checks/bench.cpp index 3be61462a..cfb44070d 100644 --- a/checks/bench.cpp +++ b/checks/bench.cpp @@ -1,3 +1,8 @@ +/* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ #include <iostream> #include <iomanip> @@ -30,8 +35,6 @@ const std::string algos[] = { "GOST", "IDEA", "KASUMI", - "Lion(SHA-256,Turing,8192)", - "Luby-Rackoff(SHA-512)", "MARS", "MISTY1", "Noekeon", @@ -49,6 +52,11 @@ const std::string algos[] = { "Twofish", "XTEA", + /* Cipher constructions */ + "Cascade(Serpent,AES-128)", + "Lion(SHA-256,Salsa20,8192)", + "Luby-Rackoff(SHA-512)", + /* Cipher modes */ "TripleDES/CBC/PKCS7", "TripleDES/CBC/CTS", diff --git a/checks/bigint.cpp b/checks/bigint.cpp index a56fd9181..86e37cd7b 100644 --- a/checks/bigint.cpp +++ b/checks/bigint.cpp @@ -1,3 +1,9 @@ +/* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + #include <vector> #include <string> #include <fstream> diff --git a/checks/block.cpp b/checks/block.cpp index 8f07cd65c..c90e3e499 100644 --- a/checks/block.cpp +++ b/checks/block.cpp @@ -1,3 +1,9 @@ +/* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + /* We don't use the standard issue ECB filter, because we also want to check @@ -83,7 +89,7 @@ void ECB_Encryption_ErrorCheck::end_msg() } if(position) - throw Exception("ECB: input was not in full blocks"); + throw Encoding_Error("ECB: input was not in full blocks"); } Filter* lookup_block(const std::string& algname, const std::string& key) diff --git a/checks/check.cpp b/checks/check.cpp index 975315608..03579b51a 100644 --- a/checks/check.cpp +++ b/checks/check.cpp @@ -1,4 +1,10 @@ /* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +/* * Test Driver for Botan */ diff --git a/checks/dolook.cpp b/checks/dolook.cpp index b64c5a5a3..aa2d58e1f 100644 --- a/checks/dolook.cpp +++ b/checks/dolook.cpp @@ -1,3 +1,9 @@ +/* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + #include <vector> #include <string> @@ -54,9 +60,9 @@ class S2K_Filter : public Filter { passphrase += std::string(reinterpret_cast<const char*>(in), len); } void end_msg() { - s2k->change_salt(salt, salt.size()); - s2k->set_iterations(iterations); - SymmetricKey x = s2k->derive_key(outlen, passphrase); + SymmetricKey x = s2k->derive_key(outlen, passphrase, + &salt[0], salt.size(), + iterations); send(x.bits_of()); } S2K_Filter(S2K* algo, const SymmetricKey& s, u32bit o, u32bit i) diff --git a/checks/ec_tests.cpp b/checks/ec_tests.cpp index 0420e0ee2..871425d20 100644 --- a/checks/ec_tests.cpp +++ b/checks/ec_tests.cpp @@ -1,3 +1,9 @@ +/* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + #include <botan/build.h> #include "validate.h" @@ -79,16 +85,16 @@ void test_point_turn_on_sp_red_mul() CHECK_MESSAGE(r1 == r2, "error with point mul after extra turn on sp red mul"); CHECK(r1.get_affine_x().get_value() != BigInt("0")); - std::tr1::shared_ptr<PointGFp> p_r1(new PointGFp(r1)); - std::tr1::shared_ptr<PointGFp> p_r2(new PointGFp(r2)); + PointGFp p_r1 = r1; + PointGFp p_r2 = r2; - p_r1->mult2_in_place(); // wird für Fehler nicht gebraucht - p_r2->turn_on_sp_red_mul(); // 1. t_o() macht nur p_r2 kaputt - p_r2->turn_on_sp_red_mul(); // 2. t_o() macht auch p_r1 kaputt!!! - p_r2->mult2_in_place(); // wird für Fehler nicht gebraucht - CHECK_MESSAGE(p_r1->get_affine_x() == p_r2->get_affine_x(), "error with mult2 after extra turn on sp red mul"); - CHECK(p_r1->get_affine_x().get_value() != BigInt("0")); - CHECK(p_r2->get_affine_x().get_value() != BigInt("0")); + p_r1.mult2_in_place(); // wird für Fehler nicht gebraucht + p_r2.turn_on_sp_red_mul(); // 1. t_o() macht nur p_r2 kaputt + p_r2.turn_on_sp_red_mul(); // 2. t_o() macht auch p_r1 kaputt!!! + p_r2.mult2_in_place(); // wird für Fehler nicht gebraucht + CHECK_MESSAGE(p_r1.get_affine_x() == p_r2.get_affine_x(), "error with mult2 after extra turn on sp red mul"); + CHECK(p_r1.get_affine_x().get_value() != BigInt("0")); + CHECK(p_r2.get_affine_x().get_value() != BigInt("0")); r1.mult2_in_place(); r2.turn_on_sp_red_mul(); @@ -1066,28 +1072,6 @@ void test_mult_sec_mass(RandomNumberGenerator& rng) } } -/** -* The following test verifies that PointGFps copy-ctor and assignment operator -* produce non-sharing Objects -*/ -void test_point_ctors_ass_unshared() - { - std::cout << "." << std::flush; - - EC_Domain_Params dom_pars(get_EC_Dom_Pars_by_oid("1.3.132.0.8")); - PointGFp p = dom_pars.get_base_point(); - PointGFp ind_cpy(p); - - // doesn´t work this way, because getters of point return an independent copy! - CHECK(p.get_jac_proj_x().get_ptr_mod().get() != ind_cpy.get_jac_proj_x().get_ptr_mod().get()); - //CHECK(p.get_x().get_ptr_r().get() != ind_cpy.get_x().get_ptr_r().get()); - - PointGFp ind_ass(p); - ind_ass = p; - CHECK(p.get_jac_proj_x().get_ptr_mod().get() != ind_ass.get_jac_proj_x().get_ptr_mod().get()); - //CHECK(p.get_x().get_ptr_r().get() != ind_ass.get_x().get_ptr_r().get()); - } - void test_curve_cp_ctor() { std::cout << "." << std::flush; @@ -1210,7 +1194,6 @@ void do_ec_tests(RandomNumberGenerator& rng) test_point_swap(rng); test_mult_sec(); test_mult_sec_mass(rng); - test_point_ctors_ass_unshared(); test_curve_cp_ctor(); test_ec_key_cp_and_assignment(rng); test_ec_key_cast(rng); diff --git a/checks/ecdsa.cpp b/checks/ecdsa.cpp index 532a1c546..c86668baf 100644 --- a/checks/ecdsa.cpp +++ b/checks/ecdsa.cpp @@ -112,16 +112,8 @@ void test_hash_larger_than_n(RandomNumberGenerator& rng) // we make sure it doesn't fail because of the invalid signature, // but because of the Encoding_Error - bool ver_exc = false; - try - { - pk_verifier->verify_message(message, signature); - } - catch(Encoding_Error e) - { - ver_exc = true; - } - CHECK(ver_exc); + if(pk_verifier->verify_message(message, signature)) + std::cout << "Corrupt ECDSA signature verified, should not have\n"; } /** diff --git a/checks/getopt.cpp b/checks/getopt.cpp deleted file mode 100644 index c0145ca75..000000000 --- a/checks/getopt.cpp +++ /dev/null @@ -1,85 +0,0 @@ - -#include "getopt.h" - -#include <botan/parsing.h> -#include <botan/exceptn.h> - -OptionParser::OptionParser(const std::string& opt_string) - { - std::vector<std::string> opts = Botan::split_on(opt_string, '|'); - - for(size_t j = 0; j != opts.size(); j++) - flags.push_back(OptionFlag(opts[j])); - } - -OptionParser::OptionFlag -OptionParser::find_option(const std::string& name) const - { - for(size_t j = 0; j != flags.size(); j++) - if(flags[j].name() == name) - return flags[j]; - throw Botan::Exception("Unknown option " + name); - } - -bool OptionParser::is_set(const std::string& key) const - { - return (options.find(key) != options.end()); - } - -std::string OptionParser::value(const std::string& key) const - { - std::map<std::string, std::string>::const_iterator i = options.find(key); - if(i == options.end()) - throw Botan::Exception("Option " + key + " not found"); - return i->second; - } - -std::string OptionParser::value_if_set(const std::string& key) const - { - return is_set(key) ? value(key) : ""; - } - -void OptionParser::parse(char* argv[]) - { - std::vector<std::string> args; - for(int j = 1; argv[j]; j++) - args.push_back(argv[j]); - - for(size_t j = 0; j != args.size(); j++) - { - std::string arg = args[j]; - - if(arg.size() > 2 && arg[0] == '-' && arg[1] == '-') - { - const std::string opt_name = arg.substr(0, arg.find('=')); - - arg = arg.substr(2); - - std::string::size_type mark = arg.find('='); - - OptionFlag opt = find_option(arg.substr(0, mark)); - - if(opt.takes_arg()) - { - if(mark == std::string::npos) - throw Botan::Exception("Option " + opt_name + - " requires an argument"); - - std::string name = arg.substr(0, mark); - std::string value = arg.substr(mark+1); - - options[name] = value; - } - else - { - if(mark != std::string::npos) - throw Botan::Exception("Option " + opt_name + - " does not take an argument"); - - options[arg] = ""; - } - } - else - leftover.push_back(arg); - } - } diff --git a/checks/getopt.h b/checks/getopt.h index 6d6cfe89f..67cf979f9 100644 --- a/checks/getopt.h +++ b/checks/getopt.h @@ -1,22 +1,100 @@ +/* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ #ifndef BOTAN_CHECK_GETOPT_H__ #define BOTAN_CHECK_GETOPT_H__ #include <string> #include <vector> +#include <stdexcept> #include <map> +#include <botan/parsing.h> + class OptionParser { public: std::vector<std::string> leftovers() const { return leftover; } - bool is_set(const std::string&) const; - std::string value(const std::string&) const; - std::string value_if_set(const std::string&) const; + bool is_set(const std::string& key) const + { + return (options.find(key) != options.end()); + } + + std::string value(const std::string& key) const + { + std::map<std::string, std::string>::const_iterator i = options.find(key); + if(i == options.end()) + throw std::runtime_error("Option " + key + " not found"); + return i->second; + } + + std::string value_if_set(const std::string& key) const + { + return value_or_else(key, ""); + } + + std::string value_or_else(const std::string& key, + const std::string& or_else) const + { + return is_set(key) ? value(key) : or_else; + } + + void parse(char* argv[]) + { + std::vector<std::string> args; + for(int j = 1; argv[j]; j++) + args.push_back(argv[j]); + + for(size_t j = 0; j != args.size(); j++) + { + std::string arg = args[j]; + + if(arg.size() > 2 && arg[0] == '-' && arg[1] == '-') + { + const std::string opt_name = arg.substr(0, arg.find('=')); + + arg = arg.substr(2); + + std::string::size_type mark = arg.find('='); + OptionFlag opt = find_option(arg.substr(0, mark)); + + if(opt.takes_arg()) + { + if(mark == std::string::npos) + throw std::runtime_error("Option " + opt_name + + " requires an argument"); + + std::string name = arg.substr(0, mark); + std::string value = arg.substr(mark+1); + + options[name] = value; + } + else + { + if(mark != std::string::npos) + throw std::runtime_error("Option " + opt_name + + " does not take an argument"); + + options[arg] = ""; + } + } + else + leftover.push_back(arg); + } + } + + OptionParser(const std::string& opt_string) + { + std::vector<std::string> opts = Botan::split_on(opt_string, '|'); + + for(size_t j = 0; j != opts.size(); j++) + flags.push_back(OptionFlag(opts[j])); + } - void parse(char*[]); - OptionParser(const std::string&); private: class OptionFlag { @@ -35,7 +113,13 @@ class OptionParser bool opt_takes_arg; }; - OptionFlag find_option(const std::string&) const; + OptionFlag find_option(const std::string& name) const + { + for(size_t j = 0; j != flags.size(); j++) + if(flags[j].name() == name) + return flags[j]; + throw std::runtime_error("Unknown option " + name); + } std::vector<OptionFlag> flags; std::map<std::string, std::string> options; diff --git a/checks/gfpmath.cpp b/checks/gfpmath.cpp index 2352bba7e..50e1818c7 100644 --- a/checks/gfpmath.cpp +++ b/checks/gfpmath.cpp @@ -471,181 +471,23 @@ bool test_gfp_mult_u32bit() return pass; } -/** -* This tests verifies the functionality of sharing pointers for modulus dependent values -*/ -bool test_gfp_shared_vals() - { - std::cout << '.' << std::flush; - - bool pass = true; - - BigInt p("5334243285367"); - GFpElement a(p, BigInt("234090")); - GFpElement shcpy_a(1,0); - shcpy_a.share_assign(a); - std::tr1::shared_ptr<GFpModulus> ptr1 = a.get_ptr_mod(); - std::tr1::shared_ptr<GFpModulus> ptr2 = shcpy_a.get_ptr_mod(); - CHECK_MESSAGE(ptr1.get() == ptr2.get(), "shared pointers for moduli aren´t equal"); - - GFpElement b(1,0); - b = a; // create a non shared copy - std::tr1::shared_ptr<GFpModulus> ptr_b_p = b.get_ptr_mod(); - CHECK_MESSAGE(ptr1.get() != ptr_b_p.get(), "non shared pointers for moduli are equal"); - - a.turn_on_sp_red_mul(); - GFpElement c1 = a * shcpy_a; - GFpElement c2 = a * a; - GFpElement c3 = shcpy_a * shcpy_a; - GFpElement c4 = shcpy_a * a; - shcpy_a.turn_on_sp_red_mul(); - GFpElement c5 = shcpy_a * shcpy_a; - - if(c1 != c2 || c2 != c3 || c3 != c4 || c4 != c5) - { - std::cout << "test_gfp_shared_vals failed" - << " a=" << a - << " shcpy_a=" << shcpy_a - << " c1=" << c1 << " c2=" << c2 - << " c3=" << c3 << " c4=" << c4 - << " c5=" << c5 << "\n"; - pass = false; - } - - swap(a,shcpy_a); - std::tr1::shared_ptr<GFpModulus> ptr3 = a.get_ptr_mod(); - std::tr1::shared_ptr<GFpModulus> ptr4 = shcpy_a.get_ptr_mod(); - CHECK_MESSAGE(ptr3.get() == ptr4.get(), "shared pointers for moduli aren´t equal after swap"); - CHECK(ptr1.get() == ptr4.get()); - CHECK(ptr2.get() == ptr3.get()); - - swap(a,b); - std::tr1::shared_ptr<GFpModulus> ptr_a = a.get_ptr_mod(); - std::tr1::shared_ptr<GFpModulus> ptr_b = shcpy_a.get_ptr_mod(); - CHECK(ptr_a.get() == ptr_b_p.get()); - CHECK(ptr_b.get() == ptr3.get()); - return pass; - } - -/** -* The following test checks the behaviour of GFpElements assignment operator, which -* has quite complex behaviour with respect to sharing groups and precomputed values -* (with respect to montgomery mult.) -*/ -bool test_gfpel_ass_op() - { - std::cout << '.' << std::flush; - - bool pass = true; - - - // test different moduli - GFpElement a(23,4); - GFpElement b(11,6); - - GFpElement b2(11,6); - - a = b; - CHECK(a==b2); - CHECK(a.get_value() == b2.get_value()); - CHECK(a.get_p() == b2.get_p()); - CHECK(a.get_ptr_mod().get() != b.get_ptr_mod().get()); // sharing groups - // may not be fused! - - // also test some share_assign()... - a.share_assign(b); - CHECK(a==b2); - CHECK(a.get_value() == b2.get_value()); - CHECK(a.get_p() == b2.get_p()); - CHECK(a.get_ptr_mod().get() == b.get_ptr_mod().get()); // sharing groups - // shall be fused! - //--------------------------- - - // test assignment within sharing group - // with montg.mult. - GFpElement c(5,2); - GFpElement d(5,2); - d.share_assign(c); - CHECK(d.get_ptr_mod().get() == c.get_ptr_mod().get()); - CHECK(d.get_ptr_mod()->get_p() == c.get_ptr_mod()->get_p()); - CHECK(c.get_ptr_mod()->get_r().is_zero()); - c.turn_on_sp_red_mul(); - CHECK(d.get_ptr_mod().get() == c.get_ptr_mod().get()); - CHECK(d.get_ptr_mod()->get_p() == c.get_ptr_mod()->get_p()); - CHECK(!c.get_ptr_mod()->get_p().is_zero()); - GFpElement f(11,5); - d = f; - CHECK(f.get_ptr_mod().get() != c.get_ptr_mod().get()); - - GFpElement e = c*c; - GFpElement g = d*d; - GFpElement h = f*f; - CHECK(h == g); - - GFpElement c2(5,2); - GFpElement d2(5,2); - d2.share_assign(c2); - GFpElement f2(11,5); - d2 = f2; - c2.turn_on_sp_red_mul(); - CHECK(d2.get_ptr_mod().get() != c2.get_ptr_mod().get()); // the sharing group was left - CHECK(d2.get_ptr_mod()->get_r() == f2.get_ptr_mod()->get_r()); - CHECK(c2.get_p() == 5); // c2´s shared values weren´t modified because - // the sharing group with d2 was separated by - // the assignment "d2 = f2" - - d2.turn_on_sp_red_mul(); - CHECK(d2.get_ptr_mod()->get_p() != c2.get_ptr_mod()->get_p()); - GFpElement e2 = c2*c2; - GFpElement g2 = d2*d2; - GFpElement h2 = f2*f2; - CHECK(h2 == g2); - - GFpElement c3(5,2); - GFpElement d3(5,2); - d3.share_assign(c3); - GFpElement f3(11,2); - d3 = f3; - GFpElement e3 = c3*c3; - GFpElement g3 = d3*d3; - - CHECK(e == e2); - CHECK(g == g2); - - CHECK(e == e3); - CHECK(g == g2); - return pass; - } - bool test_gfp_swap() { std::cout << '.' << std::flush; bool pass = true; - BigInt p("173"); GFpElement a(p, BigInt("2342")); GFpElement b(p, BigInt("423420")); - GFpModulus* a_mod = a.get_ptr_mod().get(); - GFpModulus* b_mod = b.get_ptr_mod().get(); - - //GFpModulus* a_d = a.get_ptr_mod()->get_p_dash(); - //GFpModulus* b_d = b.get_ptr_mod()->get_p_dash(); - swap(a,b); CHECK_MESSAGE(b.get_value() == 2342%173, "actual value of b was: " << b.get_value() ); CHECK_MESSAGE(a.get_value() == 423420%173, "actual value of a was: " << a.get_value() ); - CHECK(a_mod == b.get_ptr_mod().get()); - CHECK(b_mod == a.get_ptr_mod().get()); - //CHECK(a_d == b.get_ptr_mod()->get_p_dash()); - //CHECK(b_d == a.get_ptr_p_dash()->get_p_dash()); - GFpElement c(p, BigInt("2342329")); GFpElement d(1,1); - d.share_assign(c); + d = c; d += d; c.swap(d); CHECK(d.get_value() == 2342329%173); @@ -792,8 +634,6 @@ u32bit do_gfpmath_tests(Botan::RandomNumberGenerator& rng) failed += !test_gfp_sub(); failed += !test_more_gfp_div(); failed += !test_gfp_mult_u32bit(); - failed += !test_gfp_shared_vals(); - failed += !test_gfpel_ass_op(); failed += !test_gfp_swap(); failed += !test_inv_in_place(); failed += !test_op_eq(); diff --git a/checks/misc.cpp b/checks/misc.cpp index a49778dc6..ff95ed10f 100644 --- a/checks/misc.cpp +++ b/checks/misc.cpp @@ -1,3 +1,9 @@ +/* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + #include <iostream> #include <vector> #include <string> diff --git a/checks/pk.cpp b/checks/pk.cpp index c02005245..9c243f1cf 100644 --- a/checks/pk.cpp +++ b/checks/pk.cpp @@ -1,3 +1,9 @@ +/* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + #include <iostream> #include <fstream> #include <string> @@ -166,7 +172,7 @@ u32bit validate_rsa_enc_pkcs8(const std::string& algo, RandomNumberGenerator& rng) { if(str.size() != 4 && str.size() != 5) - throw Exception("Invalid input from pk_valid.dat"); + throw std::runtime_error("Invalid input from pk_valid.dat"); #if defined(BOTAN_HAS_RSA) @@ -204,7 +210,7 @@ u32bit validate_rsa_enc(const std::string& algo, RandomNumberGenerator& rng) { if(str.size() != 6) - throw Exception("Invalid input from pk_valid.dat"); + throw std::runtime_error("Invalid input from pk_valid.dat"); #if defined(BOTAN_HAS_RSA) @@ -232,7 +238,7 @@ u32bit validate_elg_enc(const std::string& algo, RandomNumberGenerator& rng) { if(str.size() != 6 && str.size() != 7) - throw Exception("Invalid input from pk_valid.dat"); + throw std::runtime_error("Invalid input from pk_valid.dat"); #if defined(BOTAN_HAS_ELGAMAL) @@ -264,7 +270,7 @@ u32bit validate_rsa_sig(const std::string& algo, RandomNumberGenerator& rng) { if(str.size() != 6) - throw Exception("Invalid input from pk_valid.dat"); + throw std::runtime_error("Invalid input from pk_valid.dat"); #if defined(BOTAN_HAS_RSA) @@ -290,7 +296,7 @@ u32bit validate_rsa_ver(const std::string& algo, const std::vector<std::string>& str) { if(str.size() != 5) /* is actually 4, parse() adds an extra empty one */ - throw Exception("Invalid input from pk_valid.dat"); + throw std::runtime_error("Invalid input from pk_valid.dat"); #if defined(BOTAN_HAS_RSA) RSA_PublicKey key(to_bigint(str[1]), to_bigint(str[0])); @@ -314,7 +320,7 @@ u32bit validate_rsa_ver_x509(const std::string& algo, const std::vector<std::string>& str) { if(str.size() != 5) /* is actually 3, parse() adds extra empty ones */ - throw Exception("Invalid input from pk_valid.dat"); + throw std::runtime_error("Invalid input from pk_valid.dat"); #if defined(BOTAN_HAS_RSA) DataSource_Memory keysource(reinterpret_cast<const byte*>(str[0].c_str()), @@ -346,7 +352,7 @@ u32bit validate_rw_ver(const std::string& algo, const std::vector<std::string>& str) { if(str.size() != 5) - throw Exception("Invalid input from pk_valid.dat"); + throw std::runtime_error("Invalid input from pk_valid.dat"); @@ -373,7 +379,7 @@ u32bit validate_rw_sig(const std::string& algo, RandomNumberGenerator& rng) { if(str.size() != 6) - throw Exception("Invalid input from pk_valid.dat"); + throw std::runtime_error("Invalid input from pk_valid.dat"); #if defined(BOTAN_HAS_RW) @@ -399,7 +405,7 @@ u32bit validate_dsa_sig(const std::string& algo, RandomNumberGenerator& rng) { if(str.size() != 4 && str.size() != 5) - throw Exception("Invalid input from pk_valid.dat"); + throw std::runtime_error("Invalid input from pk_valid.dat"); std::string pass; if(str.size() == 5) pass = str[4]; @@ -436,7 +442,7 @@ u32bit validate_dsa_ver(const std::string& algo, const std::vector<std::string>& str) { if(str.size() != 5) /* is actually 3, parse() adds extra empty ones */ - throw Exception("Invalid input from pk_valid.dat"); + throw std::runtime_error("Invalid input from pk_valid.dat"); DataSource_Memory keysource(reinterpret_cast<const byte*>(str[0].c_str()), str[0].length()); @@ -470,7 +476,7 @@ u32bit validate_nr_sig(const std::string& algo, RandomNumberGenerator& rng) { if(str.size() != 8) - throw Exception("Invalid input from pk_valid.dat"); + throw std::runtime_error("Invalid input from pk_valid.dat"); #if defined(BOTAN_HAS_NYBERG_RUEPPEL) @@ -497,7 +503,7 @@ u32bit validate_dh(const std::string& algo, RandomNumberGenerator& rng) { if(str.size() != 5 && str.size() != 6) - throw Exception("Invalid input from pk_valid.dat"); + throw std::runtime_error("Invalid input from pk_valid.dat"); #if defined(BOTAN_HAS_DIFFIE_HELLMAN) @@ -528,7 +534,7 @@ u32bit validate_dlies(const std::string& algo, RandomNumberGenerator& rng) { if(str.size() != 6) - throw Exception("Invalid input from pk_valid.dat"); + throw std::runtime_error("Invalid input from pk_valid.dat"); #if defined(BOTAN_HAS_DLIES) DL_Group domain(to_bigint(str[0]), to_bigint(str[1])); @@ -541,7 +547,7 @@ u32bit validate_dlies(const std::string& algo, std::vector<std::string> options = split_on(opt_str, '/'); if(options.size() != 3) - throw Exception("DLIES needs three options: " + opt_str); + throw std::runtime_error("DLIES needs three options: " + opt_str); MessageAuthenticationCode* mac = get_mac(options[1]); u32bit mac_key_len = to_u32bit(options[2]); diff --git a/checks/pk_bench.cpp b/checks/pk_bench.cpp index 31c48c1da..a0ea1d1d3 100644 --- a/checks/pk_bench.cpp +++ b/checks/pk_bench.cpp @@ -1,3 +1,9 @@ +/* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + #include <botan/pkcs8.h> #include <botan/mem_ops.h> #include <botan/look_pk.h> diff --git a/checks/timer.cpp b/checks/timer.cpp index 1bdaebb7f..3736a4779 100644 --- a/checks/timer.cpp +++ b/checks/timer.cpp @@ -1,3 +1,9 @@ +/* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + #include "timer.h" #include <botan/time.h> #include <iomanip> diff --git a/checks/validate.cpp b/checks/validate.cpp index ff26e855a..093d5e3b7 100644 --- a/checks/validate.cpp +++ b/checks/validate.cpp @@ -1,4 +1,10 @@ /* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +/* Validation routines */ @@ -12,6 +18,11 @@ #include <botan/exceptn.h> #include <botan/selftest.h> #include <botan/libstate.h> + +#if defined(BOTAN_HAS_PASSHASH9) + #include <botan/passhash9.h> +#endif + using namespace Botan; #include "validate.h" @@ -55,6 +66,35 @@ std::vector<std::string> parse(const std::string&); void strip(std::string&); Botan::SecureVector<byte> decode_hex(const std::string&); +bool test_passhash(RandomNumberGenerator& rng) + { +#if defined(BOTAN_HAS_PASSHASH9) + + std::cout << "Testing Password Hashing: " << std::flush; + + const std::string input = "secret"; + const std::string fixed_hash = + "$9$AAAKhiHXTIUhNhbegwBXJvk03XXJdzFMy+i3GFMIBYKtthTTmXZA"; + + std::cout << "." << std::flush; + + if(!check_passhash9(input, fixed_hash)) + return false; + + std::cout << "." << std::flush; + + std::string gen_hash = generate_passhash9(input, rng, 5); + + if(!check_passhash9(input, gen_hash)) + return false; + + std::cout << "." << std::endl;; + +#endif + + return true; + } + u32bit do_validation_tests(const std::string& filename, RandomNumberGenerator& rng, bool should_pass) @@ -173,8 +213,16 @@ u32bit do_validation_tests(const std::string& filename, } } + if(should_pass) std::cout << std::endl; + + if(should_pass && !test_passhash(rng)) + { + std::cout << "Passhash9 tests failed" << std::endl; + errors++; + } + return errors; } diff --git a/checks/validate.dat b/checks/validate.dat index 9d319eaf3..0998348ec 100644 --- a/checks/validate.dat +++ b/checks/validate.dat @@ -8123,6 +8123,16 @@ FFFFFFFFFFFFFFFF:651F3092AFA551D0:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00000000000000000000000000000000:BA6933819299C71699A99F08F678178B:\ 00000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000\ +0000000000000000000000000000000000000000000000000000000000000000\ +0000000000000000000000000000000000000000000000000000000000000000\ +0000000000000000000000000000000000000000000000000000000000000000:\ +BA6933819299C71699A99F08F678178BBA6933819299C71699A99F08F678178B\ +BA6933819299C71699A99F08F678178BBA6933819299C71699A99F08F678178B\ +BA6933819299C71699A99F08F678178BBA6933819299C71699A99F08F678178B\ +BA6933819299C71699A99F08F678178BBA6933819299C71699A99F08F678178B:\ +00000000000000000000000000000000 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:52F88A7B283C1F7BDF7B6FAA5011C7D8:\ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF @@ -22950,6 +22960,52 @@ F922CA875B991A31:2763F255636A34C1:22EBE7A30E8855B3B453A6E926D4F187 B4ECC305C3DBD8E5:FBBEC8F5DBF4CEFD:1B5E23EBD915C1FEE59F57DD91AF7347 3DAADD7A9633E19B:4DE5C07EA1564A64:A6BFB85FA91B8CA4197C8B502A62F972 +# Cascade tests generated by Crypto++ 5.6.0 +[Cascade(Serpent,Twofish)] +0000000000000000000000000000000000000000000000000000000000000000:\ +E78516D21D23DA501939C24C48BCC79DE78516D21D23DA501939C24C48BCC79D:\ +B50638F695AFA16F9378D43374CA8568600135ECD1E513838722366346BC4B21\ +01422291558FAA30A3196CBEB42E67F4C075882482897F72A8A30AE9B3AD426D + +47CB8147C5290D6F94FBF3351777087FA731610A3F66E3CCFA6D9B18F980E687:\ +F234E056923B3DB26AABC8F604F0CE2C1A7F4C35B0B74958014D791668FF6BF4:\ +9E8F6BC09768AED8F533FA4FC35FF6FEB8020FFBC8350DDFD20ACA7ECF1889CF\ +BFCD78E261B9A3CD825401AFA7ADCDFA88DBA8230FB92D4B942C25EE92F27A02 + +B9A28D32734EF678BACD5539FF9FF951AF81F44AFE223256E5D8898FB862A767\ +B90BD2D95E17E4411D02D49481CCE4191EE2C7AE8EBDF6312BDC66317AD42140:\ +065E390C4FD10E9929F30D89A67E0D4CFA3AF90BEF46B2B435B53CBE0B7DD1B6\ +12D4C5E2D03028B488000C06517434FC70F7B62C273CA5DEBD9CA7034D853087:\ +1EF34E47005028F2D95120052855C6001225200A333CA4D7D5A356B5554EE2AE\ +7EBC9BA57BADA0DAFC84C2187C51CB3CCB5EEE40F27C00537FFFCA2851DD8BD8 + +[Cascade(Serpent,AES-256)] +06CEB2B4FD2F0A27B3C90D77D2E9BBD3665A8DCAC9187B1EE9F6A60D39042A9D\ +3719883B3E87845B9D4A8BE258379959775969CBF5768A359797B2FA19FC2FCC:\ +05FFBF6E8097FC746FFAD8C3306E6DB668148796180F26CA5DE06AE76DE16D07\ +8A0E72B259982423ED96FF95719DEB160CEFE7697752B0CFA984A18DDCEF2EC0:\ +EE426051D1ADCE09AC02E2023331F273BB1B2C4C5905DEDA3E1032CCD0DB5611\ +5B011F05688F781E3F790364968E06DC6E7BD5FA38DB068CBD34A85B6B3A9458 + +FBAF0DE6C09D10EB31F21A7C784BF453F82F51EFFA8B363EE6B33DF15204F434\ +45170DED1E39AB922548ED82AAADED6BF470A5226B69D025FE3D532AADDA069C\ +464D2C8A65E1A18698BD521AFB3053229C1539626392031F8C36229FF3178A7F\ +5C716E30DBEFDDD4AC2113071977B795A8B29DA7F467471A996FB63136387C28:\ +7ED1F730EED52DFB63E073A40EAE404E443ACEB9A3B55132E740ACE1EEDF99D0\ +F22B3F2326E2E124594E75ED1915C8D155F24269254B22B6E8C53E9F64E70552\ +D5E3004782C6C47341EBF8716B59DAB49B512B6DF7F9D7FB914FFA56F7F89B56\ +1B6A5DFE9334B7561144B25FE0F57BEBB4058EC7D9EEA57AB62825A86312BBC3:\ +CDCD23F5518DB5DAE8C69B56EB352D4F3C4A64A5FFC8E5BC2511B8310993C48E\ +FA30A0F9E2B98A0FB1FE64173E6A8038047AEBAE22E17392FE32CF1D0DE3BB76 + +[Cascade(Serpent,CAST-128)] +27EDE4B2A3784A33898FA330167317BF7354072672D49DD03D13D3F0856CF3D9\ +C17C1237565E7320BDD23C03BDE195A4FE58623A983DB9C308D5A976D92CD6A2:\ +2D7096A03BAB4DBDABEDB9F069FE68C3E12ED65ACCE43ECF7F6D810B5EEC36A5\ +22B605715BE12003E324436652BEA06BD289DBE886A5DE9E51CFF6C065A21F2B:\ +EFA9CC5F3E245AB463CC60A5015CB0F663676760832CEE6C633A518112E518D4\ +5DD4B627E9507CDB03A1ADD870E28362 + # MARKER: Cipher Modes # Cipher mode format is plaintext:ciphertext:key:iv @@ -22957,7 +23013,7 @@ B4ECC305C3DBD8E5:FBBEC8F5DBF4CEFD:1B5E23EBD915C1FEE59F57DD91AF7347 # The block cipher tests above are distinct from these ECB mode tests # for testing reasons. They could otherwise easily be CIPHER/ECB/NoPadding -[AES/ECB/NoPadding] +[AES-128/ECB/NoPadding] D8F532538289EF7D06B506A4FD5BE9C9FD7A929E0FD917686D9520ED236A276D\ 69E63C821F9DE0BF23CF1D19C7374FD1C3139DE2E1BA4693C3E9D29D774C2FF4\ 69E63C821F9DE0BF23CF1D19C7374FD1C3139DE2E1BA4693C3E9D29D774C2FF4\ @@ -23202,6 +23258,1020 @@ FFFFFFFFFFFFFFFF:7875DBF6738C64788F34C3C681C99695:0102030405:0000000000000000 FFFFFFFFFFFFFFFF7875DBF6738C647811223344556677:\ 7875DBF6738C64787CB3F1DF34F948117FD1A023A5BBA217:0102030405:0000000000000000 +[Noekeon/CBC/PKCS7] +13:34B809F9AE45A52C3C8509DB14932E88:\ +56C5E79C74EF63A2B64D831EC0FE0F5A:\ +D79A4D3B34BDE6BFB4DC0BF752987080 + +0D67:162A78296327F770DE69D67E4457A8C2:\ +F4983295EF1FA592DAB2310E2E880FFC:\ +51F3733F3165D6EB65D5B43EDF35D740 + +63AF95:D174647B1A88041C95C7F008C7BA4A28:\ +A91A7BF471F67C1A0965E581A2222406:\ +1B5F5B8141905F070FC52D9CD50968C1 + +F7EE3026:9C1498690EDD348D517ACCCE942235F0:\ +138AA1677CA227FEFAC8BFECE91CC2A3:\ +AB60820C1B2969460532B9C3AACF2863 + +0F330C110D:A3DB1F6987910561A9D34CC4B614CE73:\ +FB9DA8B850ACDE73B5995D5E913E9B7C:\ +A062C36CF4F5CDBF6424D6D37F33FCC2 + +74322DD18E42:D18CCAF4D22AD3D84BABD35A63DE9BDC:\ +387403BAE6E59D5E028D9AEAEEB3EA82:\ +62200EBB9FF187D0502B4DCFFCDE6314 + +C70A03E92ED032:8544D24B952DE66076CAFAF6908B61F1:\ +DEEE15B8CE0C0C413B0AF67C25BA154A:\ +B357D26FBA489278236388C9E6A21495 + +AF8CD43A3261B258:D504F374BE690B207353884B04C5C0E2:\ +CF66029926B58A127BE0EC73B2077100:\ +522D3061784EAD56F460947A6205300C + +839FB81A72FBF5C48B:53300ADAA73B7D064C1B988D188D7F69:\ +5818851FB541EA23F545CFB969436D98:\ +EB8BC39214CAA0EEFD886154433D3E3B + +58AFB2B30F6716934B01:0907B00FE2F8DEFD08FE54AABB5A4B10:\ +C5E00BAFA4F9E1705589441B9EA9505F:\ +24F146DF583FF0B84557446575EC3284 + +83F62FD42E895E13B7E34C:F64F02BED29282D976A61F6C02851B27:\ +2864CE9F3A5511F63903CF0CD0472240:\ +96C419A75FCEFA60E11312CEA3241EA4 + +99D8D0271E5D6C510B38CFEB:15CAFCF3AA4BB5A1F018267C81482B4E:\ +6D5E4E6B297C7A69AF683FCB18C4DEF4:\ +202DD513E6D521842CB116CECB1F17A4 + +58E5DD103A644F47351FE13A4C:AF390EE66A8987C6777B0070ED0D759C:\ +DFF926FD70664DBB19833EBC9068AE5F:\ +7E62EDC1E23489D5CE838CA3C5E327BA + +A35798EE1FBF7F92187633E57FAA:1C4D55E9F8B8D8458B751D8016E0CED2:\ +92D13CAC6300EE6F17197E299ECE8671:\ +3F31171C66235B9D9EF6DCBAD5A33AB6 + +D8A412EAB58D217D70C7B9C604B783:AE9DD1426DD34F2BF7B3B478E59D51B9:\ +99F1B3BF5F635B125C6E430BAF0FDE0B:\ +2D64CD72703C8841F8F451E586CE52BB + +2CC0A7196FFF6B14410437639D4E52A0:\ +21698232D55EB045290B49C25927502FCD4314242F2B9DF225514FEF90E313D2:\ +ACAE925B9F91D3BF59E6344D1996B7E6:\ +66BE0EC9F49DCF852451439BEF133EC1 + +0A6B5968D3AB48F00C501AF499BDED6FDB:\ +432003A72A1ABCD2A463465B9794357E209C315C087E35C5F48336295F67F685:\ +2AB3F9635F8ECE37C016FFA9DD5A5279:\ +596AB3D7A114DD167A147FCB4E8FA522 + +7E96CEAF7F052A4D85C487FAF30A712E5D6F:\ +790C13E773B628CF27A92925CB3E605351293D031696EE1EDF738727CC523DAE:\ +C2DE2993F036A42278976FA347EBBBC9:\ +D6AA4E2906CE2A41DA17CEE09FEFF11F + +D3AFD0D1F52D332005205944E465EA567D3DEB:\ +3707DDB6A30F4D69A5B37CA8ED053A7F1C638D9C9B940AA09AC57A4ED51878DD:\ +B20DE0EFD63F108EEA8BDB70D0392F6B:\ +329D0EFC4231C92E04D9A0F2BFD2AB0E + +5A82E2FC993C66A31C005313B34193DE78B4E04B:\ +AA1892D23ABBC7B9654155C9386C87D3D33BBB6086E567E1D713135E2CC2140B:\ +8A8A3F7D5FE8F459A1461153B4F76211:\ +947C1AEE44B94B91FC1C62C0E9028284 + +3077002017E6E8E72AEF13DE3FA8B6634F9ACD2F33:\ +897D3F4494E271915383322EE393A6C8C24E456446A04CEF0F183B79A322D9C6:\ +0B45B853970F62B6F24BC5498F1695E9:\ +860A1A59C1F3236B58069AE9B3F58BB1 + +8A6D053CEE814DCD67D809E325236B08658736119D36:\ +BE86C4BEB29B375D461B48A1838B689B6A22379442997C2ACC8D3BAFED8D4836:\ +A51BC2500F49C9CA2B684EAFC3929F63:\ +8E982F2645F6CA43C0E5FE6AA349297F + +BF4704F12FC4573DF7CA7A53FF1AC9FC9EC2D0A0155803:\ +392929D03CC9C781D66F57FEA40984985006AF5C5692359E40C3089A0C08DFDD:\ +6D0FF160740C3F2007F1A2D9FF0764F2:\ +2024652B0E280F4F8A93E1C4D586BAD4 + +DFECDB8353EBC87CD93D9032C85B6FC7E325DE835F69EA2D:\ +E706FDBCBC6678583BADA7959B49ED4FA21F4E601A7A68D2FDB60B676AFF33C0:\ +678B962676645FCCF06DA0DFCBD33AFF:\ +F120FC32EAAFFB07E35C0F15A8D9EDF0 + +ABC5F54DC200DD2DAA7EAB951F02181DD9720A80049E01BDC9:\ +0D37E7254C1ACBF30A7AC5C69490E90B65A0E359D2146BBF50B5BA4787EF9ACF:\ +5C592FDC4B2B3DAED6B5A7F6A2CE9CE4:\ +BA1583958621CA564AFDB695A0A050DA + +9EB4D3B7B4C56EB33A8030807FBAA27D22246071D983844703BC:\ +2304C35624BB448BDECA623D39445182AC592C71C20878F5E39C8E9A39762A1F:\ +ED4B91F32EEA0976A33F64FC43AF2CFE:\ +6EB6F57BDF2B1591FE46CA47D0DFC0DA + +AF7676154A55F1F3D15B76D19CADA03A5D8436FD2B6AEAEB222A5F:\ +FADDF8B2B3B5B1685923E5618022A832180493F47153AE61F8404A538B4DB737:\ +EBD731F49D23576D1E8CAF4BEF574A05:\ +CB9E26D5905B16EA48D219456C48EBC2 + +13122D32A60EB988D34AD32B788B8CF5CCB567FADA3528B0DE384050:\ +4B951CEDBFAA5A5178D22CDA8664AEBABE478DAB09FC0BF2DBE973C404FE07F6:\ +9A912A664FF96EE3F469C779155501CC:\ +024D04B050718AB5682DD19AC6A23592 + +E19A1FA72689052C2B9C76A33000D8A0EEC8922A1BE781A6896E38659F:\ +71A71BCC755B92120C31F1B99C085E236EC462FBC6C6296FAAC5AB0EF6CA811F:\ +2E7E22C4EC84A63DFB9F98306C0D45E4:\ +EF523F0DA968AEA82E2F2D23E8AD0F07 + +D0C9073DD44DB4A4970ED69029EB9FEC5BC336E9D6E92A680A75EF0C3151:\ +AFC5FAE5E52AC9CE466881AC5B667385234F6792DB7645F42D2CF36760FAE219:\ +1311EB599EAE368A9C1E74F9D1D47BAF:\ +4C7502264C3C81E0586EE0D9945B8649 + +20C167D950AC5A84B6FD9CBA41945F66C24F79969EF9B19DD116D76CF64A5A:\ +148752675C1DA7236701AFBBEE8245158CB80829CBE1079B5F4DFCF59DA4FA04:\ +F16CD73539227EC5BA4B516C7CFA75B3:\ +D17E2642CDE1B30AC5BD01CAC83CA84C + +C068288373DB250F6714E0F9DE4A63778C91E1EE81963BCF98F2CFF2BACF3553:\ +31E053FC7124B23E6FDC33878FFEB9A8421207456460673800798E422A7E94B1\ +195EF848BF1E063CAA7576AC094C1E4F:\ +EC35A92D97B902220D88C3386EABC55C:\ +5431D970289E7E024CC0BABADD674C67 + +03940BC21C33D89773064B8A35CD9FD282F090BDC208A0EED18AAB45AFA023A1\ +88:\ +D3B49ED8640D32CF6A088F8316929C703039D9D3B6C43C32DBE99F8CFE54CAE4\ +0C6B9B587F11F1E1B421D987AFDC7D71:\ +EFC07A770AB4FBAB2259B3A3DFBC6782:\ +5E3A9763D6DB8699B903D230387FD45D + +B6B8DE15FA0A356241354E771BEF08A82955F7F35DF8E286EF17DED946C770B0\ +5356:\ +D3E2469F505D7DC2683AFF037A1197362F40F5A623F7D8350BD5BD090B63793A\ +13A6958BF9E0AAC0A8A792B92584A295:\ +0B747E8737C8555F5FCC1418A8E31B5B:\ +0C403788F70790C0503152208A8E9CCE + +923EAE6FBB20806FD86F7EBE2ABDECC838EF66D8F9AC1C2C185EE3C1BAE0D9FA\ +32444E:\ +327E33EDEAD51CD874420D8FF3C0641CF4A1187B2C56259A71F60C23EA6D8CB7\ +DAE38198A8321B6ACC834D27EB509CCB:\ +F43A11C50188A97B132732245D88E2A6:\ +377F526D07DB430BE1C478225612841F + +9057941CE977D02B1F6894251363F425DC515C68150BA5CE6F3CB1AD2EAF1B56\ +66E67C16:\ +DE4DBF13CFF69DBAD566A98916B1AD670F6037DBA9E06B5F9A3CB59E08D24157\ +C6E6F2250211B5F32631D6775F06A579:\ +6158B9B7AACC9DD9643F0627A616ED3D:\ +E21158CCA6D0656B58C64195B3618B58 + +8DDB465D9C82EB9C14BF2C2E26D90D8F1B5E444B12ECF19791F16DBB2DEC2D5B\ +612F666D64:\ +FD774E848C09A079ACDD9D44A419300F2847F93478032C6066FA9E89359C1280\ +E7AAE4C1D1933A47FFE0E02E9582569D:\ +C8424ACD2EFD7C436FB1585AAE45CCF7:\ +C15FC97E431ED75E523814EF991E3D82 + +124B752BA886C4ABD367AA6DA00115EF08C02D9308F739A63197D132E7E1B21A\ +AED339229E3B:\ +2994CA132E3A30DC1B04D9368DC9F37401442E78AAA935A63CD6C7C9DFB1ABF8\ +18B48863CA8F20E8B4F5B582C3AF6284:\ +11F33F15B8C0682B634486C48BCCBBFD:\ +0D96D9FFDE5C617201E0997747EA02E7 + +37FCB3C6DBE79BA1FEA19FF5C4F14DED4F403E970DFA9501D57751E38A174514\ +862575CAFD31A4:\ +08D6FC20CA4B2487929F9548D7D43E6E6E0676B2030FB539FBCA79BDBED41315\ +AD1E1C6677B2B83274BFD5B6D62CDFC9:\ +B522777FCAC3652A1FED51D8FE3383E7:\ +C9170B715D6CA0EC9CC569074A21CA7E + +C7AF9A384643D90CA1FC461209048836AABED909BE8971B4D2B7613628A3A909\ +64A0891C4B658333:\ +B3D53C6E550347335D677019EB675DFEE6EF263946C43CA4C07D68340E745F51\ +B5019BE2841B834154F0D219598E0884:\ +E258D2823B59737DDEE65B6139C8FBCD:\ +32C7481FD836BC3A9945CAAD3477E16F + +A9F2347EE607A05E505CE488B779BB6908ADD5F7DCF20F47F895B64B029EDFC2\ +A3A84946BE935533BD:\ +AF1C8D0F1CAB3C4627E31B69A9207EBAE680D8D092A411994507DB4764399172\ +3B6AC3ED37CCE02B2B599F7A4C265011:\ +0F52FD5FBEFCC7E25CCEE870CF00DC25:\ +4EFB84578A93800AB7DA40997A79BD89 + +5FE50D3ED686D329D7DF5CC4952AEE83E0FD0265CCB032474152A19100C85154\ +CE0D68947450EC32D66F:\ +F08F5BD75CF2372E6B5D82FD25AD4C8CA2250280C1B611EEDEEE4715B9974773\ +E9D9E2183CE3DCE2138F9632472BF184:\ +1DFE339178BC2FCCDF847A885B026C3B:\ +8D1A7B3B4E1F32BD9D34A6FCA9C4689C + +1663DBE5C893D4FCA8DE266978D7C48D70197254796D394EBA09ACC27D528B63\ +DF4026B8AD27DB07988858:\ +F60B2CA4AC382B2127CF452CC9466B7388A7C78E1B8D9F27F3B95B70DA3D74E2\ +F9F092C5168FB96EFB220F90CE1AFE03:\ +98120F0F48839DC5E9B7472ABC73B61E:\ +F5D19A16FD2FEC948458C8ECD96A20EE + +AB6B6488895E81DCC4298427FDAD9EAD39561C5C99D933BA15F5DC705B5E094B\ +5387D2E88D91294FF6F3B8A7:\ +5401EFD707525F1E4915EA8E80BBE80C9FB5E6C45600426297FBE05ACAAC7DF0\ +9912C000F643E6E9462491B30D67658D:\ +213FF5A5FE08326FE2E5C5DC05604A01:\ +465280C995DE276B0B6B6378C8408CB9 + +392477CA63A896B14131842857FF6A2C30C1DAAC96818F89D313BE2EC14C39B8\ +8A855E30ED9504131CEF85640E:\ +2E196AEC24F2D6B59B57722F58BB8CD6585813B7050A83482C8E5C38825C1A62\ +65B7BBDA707F5E6CBB02C86643BA67D7:\ +2F3FC6D862409732B91F426A12EAA155:\ +D16992DF8C17F4CB936810C81CD963AA + +E14EA57790067110020E72DA6AA2A972352692F86264C3CEEF69CBA1AA5E58DD\ +23A991F988BE7DB99821333B7895:\ +D01D65E636A981F5F3D4AC9A829225E82AB76DEFD23E0691712CDA65FA6E6538\ +BC512D6E44EDBA17BC2D1CDB064DCC9E:\ +63D77FC7B6ABD00AAEBE33C9B2EC1E5D:\ +6F12888D71AEFB2420B163811AF9BFFF + +038534D14E2FC942B0C504B92C3DC1977B4C962235DD3BBCB5DE9D0E8A1B466A\ +BA575BFB125BAF3FF480FCEB6E4BED:\ +E344F758173083CD3813410BA07FF8F9E781E04890B27A598890DDA728D08B2C\ +19401462F2A649A76234F6D428160E32:\ +5A82107DD3B3FC7D9D1E4CC5117EFA7B:\ +0803AD8DE267CDC8BBA99069E8D892C4 + +564677770E8B7A02485987661EE2B6EF8EABBF80CBAE9404E75A2FF7C4E6834E\ +438FBF09E7FC2EC63521A12A6D4BB30D:\ +ADA7CBFB49234A49CF6098350B84A8A440504671889126C1D0F93B2CB616F988\ +D4FE79C9C15929843B60C35348FC91BC6244A225951C0A07F185DFEB127260E8:\ +D337AA8F200C073F4DE5E042F352CA42:\ +E5FD769526BBED0E5096997B57FF8D3A + +CE0C994114AA7919D9454BD386008A4B87CF2A54BBBCB122F2992F7B3FC01C5B\ +F0E4DF661265382C57F57A5D96F226BCE2:\ +CFEC3737847E8C27A58F7A616B76D875107C6E6DA75F2DBE21F6C2090AA45F08\ +2FF3ADE9ABCE4692D85D3EDB17C6EC108D4FEEAA67D5ABAE6BB8E5420F0F6BDD:\ +3F65622E95331BCCDF8A6514163AD1A1:\ +55D4064906F2C6F67F2ADB2D1A9CABE9 + +37B6E210FF6F2810B29653D3C3B2B80D939AC030C29C1E2D61D9C4B5432B3FD3\ +883D34C99DA9D701EBDD96273D3F292F3753:\ +7BA7D4D5A586552FC008A7A82E8D0475F3DB4C0795C9DE735700C0751634B329\ +F8F71D21701F74E1F179F87778000B765CDB3865CF9569713DB023092CA8B4C0:\ +64D7B821DC6916A464D41B2D3A352728:\ +CF8AE7BAF39569FDAB4BCDE9283E4EC4 + +ACB7AB275B18F55C0A45CE3B2CED3BE4DEB113CC4ADA87EE851A1196BADF0B9F\ +91D579104772040B3A33DD277F2A33843EE909:\ +11D15D948182EE585F2690F236A4ABFB74029D525CA579AADE4FCECF4C47A288\ +1BC6F04535C514D13A03B23D06B4BCA6EAD0C2756D6B5D5C616B229DAEB58848:\ +0CC7AA03EAE54E833C10616F0DF07FBB:\ +B77D7E2620DD96499F46F311696DDCEE + +27C36747E9672CABAFAA5BAA95E95FCDA760FAA3FC1C6C7F248C374E4C6C9A1E\ +4A44873BE795DDA3ECA213B2146DD8E722277619:\ +07299B862884F6FFE4657709404917F411BC24FDC2B6E504331E6D18E94A71F4\ +F5CDA54DF8FC3A0E77EFF63EC9D0B82F8CBDE1DF86B917CDAA45EC4E603E364E:\ +ED590A7F005156105AFC45D9CB50F525:\ +C5F2970624FDB6B7DBA0A6C2214EBA3A + +9581E9A8251C7DB9C4B15D2B208FF66874959D134FF812FF3639D1F1D05E02C7\ +806EF336D67782E8D05D1EE900785F7267BDBBE76E:\ +EF5E6E49F0A3A01BD37C078516E6A85D6B5B04B1E4CCE934FD3D2872FCD08BB9\ +49DD606B4771C02FCAEB09A666DE721BA86A68CB975BB394D1905E3A1A233B3D:\ +F567648AF7EF8A506E5F22542A3C2867:\ +DDD7C1DABB2436BD0FD28D6752359863 + +0683980F2EA98F5BF000D2E9AF1DC15A6311A13F398DE23D0579BAAFDF59B0A0\ +3F051AC214D80316416222305A676B17826565065FCA:\ +D96932925025F6D2CE24CDC3A4AD07A90456F011681A669C1C45B685CCFC7350\ +6514BF22E0DB166F37628F4B8DC3FFFDF60552C96B6840D0BDF510059467D7DD:\ +79FF68FEC504D32A717CDEAB94A7B5BA:\ +B30BB4EC282B3D4B6135A7E17C2D34CE + +4DCAAAFDF72971AED4B15B46436E19E7C8F79220C8EF7855FFFE378C35F578B7\ +5D0872A37B67DAC675083F9ADEBA89DC5C6A057F762F25:\ +BE12616523F94449F8120B6BE35C84511A59E4D40B0430EDA4C4DAC995BF0F08\ +856EAC2DD4E709BC9D813A40D8FBD588EFAB275E1A11966666CBEFC08050104E:\ +573A08B1064652C81BB99C46C7C1944C:\ +26FF1AF8F21A79BA6F59A7BA710A51E6 + +D41B814F718B82CD1B1F64071F9429BD180E1DE6F121692D17AFB7AFE64CDFF9\ +ADFC20E10B02A864901F90B863BA85D70E7CE4F53162FEE8:\ +70A7862DA2217F3374CE05AE4772231A489F2912BC1B9A3483A6CF9F11AA05C3\ +30BDB25BE9EA678F73868B29F908C1B4B715DF760DCB23B3172D7EBA94477541:\ +B493509AE30EC0AB626D2920D9E929DF:\ +43491F9196D8251FD46759222E3CBDBB + +4AAD61A9D21D7F76BFA86A6B054EF02BEF75EBA59DB3D7A8F6AF2472923E283D\ +0BD50DF43FB832B74EC6AC1A5B6C55EB8A929FC143E6A2CA5A:\ +59CC595EDFC1FF1EC7E3D179273EDDA43BDC9B7E91362C89E19910FC4BB131A0\ +0B7684E147D0912F3B71C8F2F9B00482AECEBB107923C38F89B7C6CB232BEC5D:\ +0BD6C4A47107E38C3C234BBA38F4794D:\ +0888924CB3C8DF8FBC8E3CEEECE1ECED + +1A0AC832E284616BE2EC6705DEBC789465339B961D029B00B9ECE780B32940D8\ +4EC00EB29991BD92572E51614C37312A44AF192C189F5D0B034D:\ +12CE713413361CAA87DD2E584677B44AF5449D09CB083BB459EE47F65C834A59\ +ABE9E557F4D961A6EA7C058B479243799B291FFAAA5B1771BCE62C0F83902A3C:\ +1022A5A56788270CBF3303D958D8E365:\ +BA4179A2F159004821934A0ABA0971BD + +77D91E9A2ED17549724830B17B5394B44C6F5D54862EC45D2124129471A3075D\ +75108F34662056550A4ECD24133FBECB413EE5BF58A5EB089EE8D3:\ +CC5DEB0FED41FF63865638826E70FB572CD040CCF9273183BAE3EDA2124AF444\ +44597AA311A182C59C6F2612A0A55B7CD048A1F735FDAB8E4BDA44EEE347DF2D:\ +A6E9CBB2936DCE26BBE3BB14A22C0B43:\ +0D061B14FCC07756F78590BEEBDFE3A1 + +508C2A9A589C470FE01A24303A63E7F54C4AEA5053805D1DB6B1F6481511FBEC\ +1D32BE1284B0CA1E24AA234EE9F6A77A448CE623C1EE0FBB343610E0:\ +424E77DCB1BACBCB1954F7FF54C5ACDC398F98B522E556C0362D9992E8A00953\ +D94514AD35311016DD51AE95BF7DDBE29E89F1827C65C278BDB0FB9D243E7B75:\ +930F2051D3BC4BA985241990B92C6C29:\ +6E12ABF415BE763B09326743C4D03EDF + +3DFCFB4B32C9FBA848403256BF0D3AECE761EC23D492DB5B9A6845123F017358\ +48487CB1CE198028B4FE605D40F7039BA46371436E2653EC84A132A7CC:\ +49355D300361AECAED24CBDBDAFD6A31EA8358646F84FF75B7900F6AAD59DD25\ +15F8FC834EBDDEA297D2AA36D1103FAE5DB9C60D213C4CDBFAABC24E62F631F4:\ +C5E25A158442E6248D257114484E4FF5:\ +6371100FB16BFBE598590476C43F143B + +C50339C7DC951DA35A36F4F613899000069F50A41BF957A75118C596C7CE758A\ +2BDF378E4B83F31EB4CD596D301B1617DC1C9E08C70B2C3EA410B546756D:\ +8ABAA6655CD7D6ADB51E22ACA8AE019743F47BDC8190C05B0FEFD88B5669434D\ +3202F1C121D51C5E46AE46B28DFF3195F2F8DF2A94F5CD0F7D11685AF6D10F0E:\ +478C7266D82E73C4C3882CA4A05C0A1A:\ +9C8336BEBB6F820268F2E6D0807EA389 + +1E570542A73BC1A212A8503E190AA8E24C7E5D87469ABC1208275E17DD5D7882\ +EF33F839A2CFC503F07641184C77A0B1B017EF916F638EBCE5B253C18B8212:\ +13638206A95985F22D055C9350F00926154ECE397C1FBBEF16B66A3E4B0D4046\ +9966E45C44222B903027F20D7AB620DCFC0AB5FE2D7E563B631E191F762ADCD2:\ +527317EC7A1D9762E6891BA823FE3500:\ +6B3E5D8466A4D655DEC67CD62807AFBA + +2E83482C2ACA9B7C9010809C25597D74D19F8AB95FAB3A469D1B31D9968BD375\ +5D26F12B4D0D2D54E83ADEF3DA53F879F095EBFC4AE8D1E8562E90C55B22FBBC:\ +857882CF9E0B8C298D1A4BA1AD25ECD9FA50B3512A9BE93632A1BD8F27E768DD\ +23C8955AF6B4EE745F6CC162D9EA7D9B99948B3F256078705A192FA527AF8D59\ +4FACE3E88F0D3844B1E24A7857477233:\ +6D632D11E9FD60638E3F7D11ECB29D2E:\ +66FC28B235FAA4C012262C716F9F7204 + +7BD83E3AC317811A304AF3428DCAB0379EF114DFB9971F6BF67677A2E513382F\ +AF0E352A32D7F3296475A39F3A7E851CD3E5225D0B0F675B94014DC9165A1D9A\ +1B:\ +0D15F0823F83D7652B4655D8ECCD0633FDF217CF477635269D6009DF41738236\ +1E413DF7495006E9967E82090A2D99D5A690A2349C9E6A350290CEBD1EFA4959\ +691BC52BD8BB24913C440B9623641A1D:\ +5566DD5873F4C7D4302AEA5217B1D5B9:\ +2C17CF9E41895A1871D5F3EACD478E20 + +1D464A69C8E8DDDFF2205F2E7336EB89C7EC1002660649CDB1ED826B5E8283BB\ +02FA96F18B4570458BFF5086B46EB4EF0F87CC9F39C7FF9B3E881978F7FEF9CD\ +48FD:\ +F4D03CC920684F92865C2E5B7DCD21A39F0223990AFD50C38A90325FD038817F\ +BAA975F2C3AC7EE4192B71104921B9F852868276192EB9545CC14B8F9BE36964\ +14745BB9ACC575C0DA3A1BC72DFE420D:\ +9AD3C01359760D2B9D7114ED4C54E35C:\ +1A0E62541D7AFD5ACBC18DF5EA79CDA1 + +44A5F5D7B96035F5A554499EA17B9B0193484376812C2C2DAB9F459F536D97A7\ +1FD4F723123156054FE53DF577BC448C124AF49AA9D003157272750BA3CE5712\ +776EE9:\ +E697871A69D625FC8F8894E6056097E354A88118E5189C215254E0AC2C85A6A1\ +092A34314CE547C56D60E14E494590C9965BDA9D75F47B20E8761D14AC2DABF3\ +51767830040808ED9673E88A89050BBB:\ +623FFF24CFCD55E89911987DA599012D:\ +5CE090821525286F0F60E46909107087 + +6FFC0D5515AC7AA12CC56503CE163F52789BA0FEFC324ACE7DB228187FF7E1EF\ +BC2EFBE3AA010B8F6D298952B0497FF677FC464B1FE51FD93E5C2895EA1CF4FB\ +4A773919:\ +1DBCA0F4EC05DAABDA02689166F93B7FB4A3229D7DEB3C97B3846E53F7671383\ +DE567BB10D8457E92B1947F36C5BD4B9AC68B5633AAC16453050D65CF8B85C88\ +E5F7B9EAC641038A6D225BC5B60BF39F:\ +3195B7E2AFE39355D556F29F21800597:\ +FC64A4493B82CB958966E1F93DBFFD8B + +FC9D3C47542680D7ED0FB2388D42361F9583D2ED2285AEE599FF6E5DF9471B80\ +E477F347B6C88A83ECD1167EBBEAFF93745BB0B06735EAF25579C679DBEBCFBC\ +335AD348B1:\ +A4652823CE03E688DAF56F93B2DF8C9F55E399B1B13ACF7E6AC344A7AAEFC327\ +185BA29AC9FD0A29C42367D8DD4740A4C464A5979827C793EB29068F08A4A3E5\ +FC118CAD6C58CDD04A6F925617010727:\ +FAA44A1072FE894478C7557B6FFF6394:\ +6E5B9C688C4A5C8EE4B4CA1A263D6E00 + +EAA0F53C3414A0B7B6BE05327F5F2D76ED2E5169E4ED5CF7A5F066B1196F4DEF\ +208D544116F2774B3A02608DF263415CAD366963F791C7808E2E248882880E26\ +65436C7E8B44:\ +D3AE352CB790D12797DEC61BF8C17AE0557A764B4E3F2ED2371BC624AFCB8A6B\ +340BC68A4E97447FAD51A52865B5A6A492BAF5AB525653F34392B299CBB74FAD\ +14A16F3D7EAF4C00DD73FCF4FC885EC2:\ +E7D0BD991DB9DA63027561A13D620F72:\ +DEFC409F9D66328C93426D55BCC5F3C8 + +0C3A5198A1F0D228611124BB18A94A59637B8EE8C3BC128003D90645067C1D7E\ +3F12440B08DFBB24493A50D963EFEA835497F85DE87A3857B1C5FAEB0354281D\ +76BD618D1214FF:\ +9A13204622AEA6CD7F70C34518555A2DA17A3CE11E7A832F6AB69F8EC8880BF7\ +2921470897BE8B0B90BA88020847BAD4AE5E9A37E22E6FAC568E6EDD1FC8BDC0\ +E4D7663CD573F35F43BF4BAF85BAB7EC:\ +6B422723B4A706C9A184FF4FC38824CC:\ +CD0ACA21752C4EEF842DED5A53BE27B6 + +DC05E863402163187548943B43533CDE7642FD31BE2A177EA79CDBE52053B538\ +A394EC65F09A1091593892D6251F325A38AE360D6D7AAF234F9DA6E841523A2F\ +7AC724447C9631EB:\ +3A927FB3306824B549B18FD5699643A08B64EC3B9E1322FECC32036875545F56\ +DB2FC7B34B7A097FB4C7E211BB5FD8E1B69813BFEED2DE4771AA6A4D4557C232\ +BB4A488ED9DDC5CE2CC8BB67A7B66932:\ +BA37159B1AC79AF43E716741699FE664:\ +CF45A98BED7B6ADEA83EA03B6054D857 + +6768571A03A74594A20909B61211C99F91D3EFAD8A72FA0460B5B3A404D7F0F1\ +94677A90AFB6857B05B923185C6AA6043A7E8373178647F528645E68E0FEF4CB\ +36187E0083613FF998:\ +88CD0288FBE70E08403BDE580AE08E23CD0DF5C7E1BCB076E6F0C274C48C3892\ +05A58F7E17871D1F3DABF5DD3DB597ECA98606DAD8A5F6F66AD5E5AB16E6DDDE\ +E91C55EB62CE86ACFE87C4C703710ECF:\ +D89F12C903BD9E3D82E05CC72F88DD2C:\ +2A46464A0975A3D77884BBBA01508D2C + +A6428DC3C3398CE37098E1F059873CB92D937C437A7D75D2129BFC5528544E4B\ +C50D29F6D882BFB8E500B2625BDEF5A6EB1DF2F3A5FFB9260C540EC67C033769\ +E6A84D6A137B257473E9:\ +B6218336CE13C1589B1892BE8507B218DFFA2018AFE90CC17EA792955069831A\ +DAC30AC868339EAE50B10E513E7F29EE2914FA41EA76B6CDC99C4D300DCA5E9C\ +2A96023F8D834B7404956F51667239A8:\ +197EA77B0320C3E2F913EBABEF18EB1B:\ +DE295D509AC3165B53922EA9C199CA85 + +FB413ADF6745E383C87EC50BB8DEB4CAAAA4C5D24AA3A449018DEC8A6B85B10B\ +774891EA61757BB17292B38ABEB12DB3B71C71DFA92D475963B0F1B1FEB93AB9\ +A753D11B753EBFD2A3D74A:\ +740830C6AAF2BCEA878799315F5C842C54D760771EEE19F172C9289C0876BDC0\ +3A608B81597EFA11BC8A7A7EBDBEED5761822EA62E22B9A6EA530C9410225BD1\ +A6398CC8E257EE054B2C3D87A05DB73E:\ +9741F404AAA4838905C2386DBEE885DE:\ +7D57C18C4C0BCA04FCDE6F8E38D413B7 + +B647566525347CFCE42CC44F4EEB9CCD8325B0350A4F123065621B7D03C04DFB\ +2A1F5C9F41D3B1ECD3814A2A7BDE4DE46EB0AEA673EA2FD582D00038F256D888\ +A94AA60488A7ACE9F4C29667:\ +70913C486EDDEB34D7E1D7A8B9CC75234E0B3D9000717949A59132AF2D2B056D\ +D0243E11748F6D2820D29C0BD15747A61AB1B2D87FA6E4438EA053DAA4D39A2F\ +BDD62DE2AD36725E9688E1A31DA8DEE4:\ +C18B48925AAEF9C1B8CE83C3C0541C5E:\ +F4358C6E2F0F1ACB31433337BF9630C8 + +C8D276B9194CEB3C01B3DD0E0B0F84FCE5D548F7FF60C634C0ECECF4C74B8154\ +514CF766960E34DDE8F9F7C60215C932589647B1548B0B408210727D4D4ECB6A\ +C654A6A4E786F5C124034586BD:\ +68EDED1A1230A88040241932A87C894C0F3EAC2363ED85EE077BCC869AC9D982\ +61DDF9186DE665CD5D70AB210CB4D266A2A9D990B37AD6489B55275019BC8D9B\ +06F19765E390156EFDA6DAFC6205321F:\ +8D12D956B50250AECAA4380C2FB5FB99:\ +C8F19FE75D91DDC9FEB38B71A47250FA + +95095496B695C5CFDF83F196F400CA78266F2CBDB9F58DDA77CCAC98FEE5BD13\ +8ADEF80CC73400B0BBAA66A3D57B0158AE49E393F3D78EF8196827775DE2F005\ +0C531C5EDF2528331BAB2C703AC8:\ +C3B78AF1743A14F1268D87EDFA707968191FFBC9820C410DFE39814681484965\ +8D5ED951E7EACEEDD27F2BCB821DA56B31FB9E2181E836A54C8E54763BF9EDE0\ +449ACE3E0F5757AE3BB07002DE63C25E:\ +3CF3AEAA654897E706E2AC1239667209:\ +4110B8B8CE35B9BC3523B05DAE24C69B + +A1B2C52B1B10F73DCAA6ED822B92B61C27245D344DBA2177F509D28ACC108642\ +F2013A0777C4B69B76C707CDAB448B451295F636163B4528EECD717DE79F3A12\ +8F32EC8D614412FD3F5FD2BD0FE633:\ +797323F717303F224CC9FC15C29BB15C9296D7C4885882BE3D55991607DF0058\ +67179BEFBB30C9034F0C6F94438A537D33CF4F644372E09F07BD023902AD54D2\ +CA2F14EB04D43FE04B4105514889EB02:\ +40A2DBE5EA11E2AB589DD95F71D4BF34:\ +6397EFD9F05A5A87C43730CD42C29033 + +1D156125591DD8E4C30B09961E5560DA5D201B6EBFF5CAC64A1DB78F33D3C2C5\ +CFFCD3F1E55B246DE700CBE18E045783B94195CE141E483AD9D70EDF28C61055\ +33BADD7DA4FFB971D1778756D11C8D3F:\ +905975D4AB9A1B4AA6C9A39A999FCF7581BAC9C9C96F0B6DA63020DB3877136C\ +1E9F8E89106942D9405C73486737AD57B4098A2AF29EC587D6B7DC07F469DF28\ +C075435735DAE3F6C2F7CECB9623174CC62EAE8DBAA72679E117FB5EC92F2267:\ +23822FCDF96E4DC4088077C0CFD93336:\ +6E4E85D4B38E442544B6B04FFC81352E + +F252679F2DDA76DD110584CD0D9E5FA64296BB880606A150122A7EDDB6A682EF\ +BE655BB59DF6885240AB11E4B74FD0A159C8DA83A8E3731DB39C8937E2927BAB\ +FD018F17B155BB818B3C0B358B6680992C:\ +B48FC12FEBE86486299CB3FE14C1134D2F61BA984334F8C3AEE08C8A0E2DEF12\ +C476096E9958576B81C6E05968382FC7EA17B85B8FF8805EC695BCBAE5608054\ +D5C830DF39CB646DD4798D3AC0C15B572953E5645EB37F431DAACC60B874A180:\ +B107244D1A4445A3C7ECE0B64FA7100C:\ +58CBBB9601C142CDA4CFB02A45861808 + +90F67AB45A02E5894862F15F0A919DD6D7833A2C1C46DFC9127D29A53B5A44C9\ +3B21141173F53CD4A854B7AF496CBAAFF654FE2B28A7B48048CC9D01113E0017\ +6DF95D7DD3CAECC5DA53367DAEFA377F84B2:\ +2BE5CC556D2E2E67C37FCBEFA7B0FED5C350C0B2541F85671556207BB847C3C7\ +E8B1910A7854B8590F0BDAC7CD1E52ACD6F1584D25B86407EA92222E951339D1\ +1F8D847108B0545580B5BFA551B9C1D7DEAAE8C100469F9A6E9A578FA2871104:\ +AADE936E95C2EADDC9FBB708A6753851:\ +04F4C5D43118F5568DA176A140913851 + +70A355394A84A1C6E0281A6E4D744248553F9F6C6A6E6E01DE13AEC21E7D36C2\ +B6BD7C608917A4D9F723229C020A677DDEDC2F3EBE9AE2D4AE490DB9E456212C\ +9AEDC04C2D34B2384BC75C8A9196FCC1CC642B:\ +9EBDBD9117F03F340AC4EE7BE24E45CF6A18C76CF4C79A8B19EB83D03B8F6202\ +E9F9E0D3BFBC351C407E699F4B592C93D0E6E037419C48167ECBA7531EB0162F\ +6D236682831409D1831CC309F227DEBE4FE0B395FA201E1E2633354381D30CE8:\ +2B3AE9E5A047CD4A5C40FBB546AD4CA3:\ +CE4C47854269A5C40CA58E56254B2264 + +DC75958667FE6AC96BC6B291DE43E04BCBA6500FBE005D5ECA3AE57AAC2E7754\ +8AC38A6DB461986F4523AC48FBCADF5B78259938DD037ABB4947D1F85538AE2B\ +89F0323FC1F7539465563A816B3FF633C1BBC6A2:\ +1DD9013DABCD617011B0E2C45549A3EFD665BD0E6ACF515A3AA4B3FEEF92DA1F\ +3391685E8824BB8767AB1FA38F8C21E02518319A42C15307FD645541B543E98F\ +74BD9383A5047C89D40B7B685999C086391E1FD2CEAD877361DA89BC89EDEECA:\ +0AD480367F7085E45E72A001A4B8A43B:\ +6A6841A5E07DC00A0015006F5F60D895 + +C160B510C45E17D2A5B38716E4A682884AFCD7BF1DA22E2C482FD291A713E623\ +18F20AE2A6369CD5F958EF3A03EF2A23ACF0DCB68D27112B2FEE8E5E623E4F91\ +849A061EF3D1707F698D682C62073D7D45A8406D16:\ +7129EE5D900251E38EADB39DA6F0301E85266848C1D014D2764757AD5EEC1960\ +FD8A46BA55A79EE64080D7808F2B967F9F6F8BA51F296D3EBAC8B653E920F8B0\ +D2632EEF1C96A5E36B51C1D0F60D1DB0FF5D55C567F4393EE790C0BE87610845:\ +10E06819D7EE77E7D55765948D2C21E3:\ +CFF4424C5812922ADBDFCE029CE63235 + +871D3A83E921FDF2902B25660181FF81260E671390472416F9E6270BAC539203\ +A93D4AC5F00DB1B63FB4E8B840CE4D118EE967AD74E6308CAE8850BE61B0CDE8\ +87FEFC61B341CECAE98A7815F5E699766F06B3AEBACC:\ +09AE43E962C2F9DDCFCD5AB82471CFCDAB1154C64DACD154C088D4BDA0937708\ +4167CB7D41A7F87D5DD0E702CBB78F0CE1BFD05C53485A91E7CF333E276A0FE8\ +4915FDDC7708F696F49C95894A4D6CB848DF06D52B0C5F720CE23A493E7F4DC1:\ +9A937835746821DDA24AF556C13D7DBC:\ +2866E153FE0BE9DAA8506D59707FA3CC + +2D1799655E6DD69CF3C2E40F700F8C2F1EEA99B3C6926647BE7A07882232E1A7\ +901F3B06829ADB9BE11391C190BCFBFE908C08CA5BA7EC5A5DED518B0F469A37\ +8D9ACB7F1E0B8D7F5E829799D1877604FA0F801D4A48EB:\ +A1687F960FC0DD54B32B86B4A6FA988740456FC8E2CEB701E841CE897265A7BB\ +FDAE0940D288355E894467CD703442D86C40D3DA31601FDAF990BD1576951426\ +F8FE6AD5ACDFF881D103C5FD6F40440D95DAEAB2A3593DDDC152FE9B09F1991C:\ +FAA109A3632C82622ABBAE17AABC60F0:\ +E057120AA0B73247D6608D148BA05399 + +311FE0F676F81A110EB931AC3CD2590AB2F3730A4077961D830E8B57C224EC4A\ +738D27CA58C205FA0872F2BF6EA1732761AD4DE851AB06220AFD82C1DB0C0B2F\ +1064C6F23AE0C092F0F5598B73F4CBC80F4FF249FB90D1D7:\ +2816A89C908CBC999D1D8E8497B15F5697D66265D05B7900ADFFB41139A57FC9\ +6D9249EC2DDD805B83DE85CBB97A4C44A5DC85BEB18D7064855CA38870CD1E4C\ +62EB78FDC7B95B32B93D146429830E76D48D56D1E9F6297ACB5EB959B30834E3:\ +A5DCC797CB0383C344617502A5908A43:\ +60284E3971826821263594FC36FB6E50 + +9154A2ECA919ECEC8C9B3B9BC0C68949A7291B9A645B5F2D2935C77AB506FF7F\ +27B5FE0962A9A912B1A05DBF5141D03E4401E3649025947EFEF8C0AE5A1FDFBC\ +FAE5487347174FB40A92550F54B7C8261413A50B8D4E6884BE:\ +CC1EDD80A0FD2D06320F90174E4DA2DEE7CCC33AC342C03FF0FD9ABCDAA269D3\ +EF75D24477B888F32221EA51A41866656A8CC3B95C601A95CFF53783179DB18A\ +F5BA92C5631342182F283E083AE3E7461A809D1BA74F591235BD66F338ABCCA0:\ +FC62D9B01185D06CEC0261D6FD496086:\ +4D689251DE48BBC21776AC578B59F6D8 + +A15E33298652A3E42473AB035BB94443A4CFCF9BF8F4E072898B9375E0CDA222\ +B07F8B902BA73F73806F08F85C13114A68EA480642CB3D459F0E1B04E4F88133\ +2CB5E05E9E358C91000C09A9F129A197339BC2A8B456455F0EAE:\ +BB98AAA7FC7FAB8FB8252E69E54C2DF97F7D0D2C0BC3A679F5BFE2E51191F8DA\ +0218681A3FA59B9D6584C4F2B1FD3A990764799084CAF60A45735B3B8A480CE2\ +8BA1EAC185601D4D6D76F25D39891DCA762E21D7D7911E4F4ADDFE7DB52DDE7D:\ +1BC51FA499556AF60332AD5D287C01DA:\ +8A23C560B6F0DEF3540A72423DF2C33D + +D253DF61440DCE5FDE0C166E99670CE05E415CF2AF02D55A03F9419DC53B94C1\ +83660DF91681809E64B5ECB77C9180487B95B4AC06F484EDA769194AA3E72FFD\ +6F95E475A925A2420040B004610B212102423D879F821E196A5A88:\ +775D59961E58EA72CE8F2173AE47E6BAAFEB68FD85BDE05346AB017D38954763\ +B90B63989A1487326510BDBC75637B06045369DE798BB97FD4885B44E1B42653\ +8F5C904E44D85AFF8828DC56329B55BEC8F64BF7957E837B70AC729D03A249AB:\ +F7B9E5CB7DF60D8F760D691B8E79C834:\ +B976C6CD3730B031060BEBD10E832747 + +B97529984693CE0621DCCF68F1690B49396E381E885AEECEAB3E1A7F61A8B7B2\ +C5E58BEF82FDDECD29C9D9CB5F417005BAD6B7EB0C57907F2E3AB3E557F11BDF\ +383EE5AB2902D46DB97827B26ED8C4C47368F677291E50ED9C1BEB3D:\ +D02E1E17E9274C18017105C929CB1FC9C84071AD0773E4880C84AFE08D243EC7\ +2B3570768506285CE5708E0D280673FF9F0004636B77266A9CCCC21FC590D845\ +D685B0F5292B9043FEC8F413E58D20844FBD626AC27F4A43A1CB0677098392DE:\ +6A42A8F7A638089C2E55A166F87444C0:\ +3EB4E4AC62EC1B18C96DDF1465C74286 + +5DA55FA078498CCC7D509213E96F8915D466AC5504BB9F0FB922ADD1DB7A040C\ +438470962BE659508C37F8C276E3C312D0ACCD1AD77755CA575336F2CDDA3B8E\ +39BF99CEE435FB23312576E3FAC190472223FEC1D693E2A717D12E7496:\ +4652C8A3FE43D4E4C8CA7C952AB5505F42959BFE42945B466F6BE08B512F21B7\ +C0AF4A818A699D8A61C2162D8FA4DEB2B94D28EEBE99A0CA5819F386F1BEE4DF\ +BF11F984D6594C6D2E4A5E75C0CA6EE74993AFE6817445290E0CA0A109AAD624:\ +483A477C5D7EFE8D7EE764194FE8E902:\ +F496A4D3745931C47A814F0D9F0144D8 + +92C61E6AB26DC701A371CB5B5BAFE00B2C44BD2736E856B1E893B7AAAA62C088\ +35784F02E3C1767D8FDB5DE91118CCA28585C5F03CB46591F8D3A3F09A0C602B\ +01EDE470CD42EBCDF4C72456639DF2BBF7897246D7F82FF7D083805EDEB5:\ +180659EDD79D6DDDDA8A64607957A449FB11EDBD4387863136650CBABD58411D\ +7CEBF5C7CCC8F9A8044626C644E1A1E303AC8B6E638B0817419BEF4FDF5DFD6D\ +6999CE8BD64FC09735DCD0CDD654824B6CD61A52B698310D116C1040526E7260:\ +2A2B340ED14BC9746488F04E2EBA7683:\ +578AF21489F2C8A42CF412A32906B1E6 + +9C28215AD7EB481E46752C39061377A489523A8DC9B62FC8E7CEB12B4E26CFD7\ +6F863B317999DD6F5A76686F9A4DD8E7558F64F9A0BAC89949A12D3F1599D7C6\ +4B6EA82A36F334B6055D0402048CA15127420FAC555E5E647814C4F4C6ECFA:\ +F3031EA9E88EB705899C304DB9B46F0817F3BD87FBB8178E3CD99AEE040D818B\ +2BDB27AD8034B3D31BF96783AB56EE91BC0F8DAC44C43F2BB0790429B8936991\ +E6652D69BB1F0C2B0577D7155BE3E5B34E1DE64655769740B2C35EF8DEFEF596:\ +3E433ACA43F4CFE3ADB678991613F6C6:\ +1073F4ADF297DF3FE37A0AE2B25C4A1E + +45663D4795BF75D79EB3BA5BF5A9675C257E526B190B598562BC4DB4D441025E\ +B9E61E95243165B21FD6965E2973DD04A141097EE5A85E535A80862B5D14ADA5\ +214A98DD161620D1B98B0AA3FD66A1D31005AC822F290D71D88B3B02F1B9EFE5:\ +85B49563722FFBB04C224DFAE52B97D7B69DE241C854B2CA795527957BDEC3EB\ +E3A47BD259484F0BC10EF487B00B30638418F1F069888FD347F4714589D12B64\ +7DCCA4F275B5DAF428C4EC28122FE7ED0E980B68FBD5B89925DC0E3BE1CADBA2\ +C9797F7FD5B07BB55CA139700AC5CC82:\ +94EAEB3A2E109BA196DAD6179CC6E4E0:\ +D0D97DF76AF11FA9120CDB1F4A0C5519 + +25994469BA58D88BD0A68A82D216FF3C15C8A1175CC712138529433FBE2E4058\ +A94968C115C29AA80094E99F34CA98E0DBB6FC2DF165472262B2E4215FA63613\ +3B9674B2098CBE807C6565FB2FB4600CDF9D81861EDD9C7B01ECFACF711CB7BD\ +31:\ +39C4F62666E8B240DB0968C11645DAB7F39EA201CAC1DE82CF08754192FB70F5\ +6DFF8E106E22711F7C11B1E08C973076075812B0BEA56BDD983C0891C1075295\ +08510E47BAB4080319ACA3AB3F5C647BC1962D3B91C4EDE3DE437D2C496D7653\ +16A153AE368FFD97F9D897A7A4B41B4D:\ +931096F41AD63122418B0694F08A5D1F:\ +BFBCDEC1E1336D3B0AF876771A8394E2 + +1F6C82684870A592B8FC13963078BA8A18BE42F6569396D9749C4E729742F3F5\ +94613FE0D47C681A9ADF5CB1AFB4CBF48B6783E679B5782486EFF08834908345\ +5DD97106FAD8D34C0219C32A2948810973C04406A5055629B3FEB44F086ED1B0\ +782B:\ +A7860FCD31608F84276797E5E62105D91D485D83EB591675B2D180EFFE41B795\ +A0BB525D8C963257156C16BE7D2F23F2303878193ECAD2B790681AE7D9D4002E\ +3644EC064D633DE7AEB9FE7F2F7A323F369AA48F28FAC66238BBA99E0263F51A\ +3181B804043C835F61F3664B1B1085EE:\ +54DE58CD3277EA8CDAB1E14AF30B96E9:\ +DA5A911787618709C0DDF10D4D370C9B + +CFA3BA888B4985577682E7BC34390EF53ED46677D6ABD2FF005D9B47CE9FE9DF\ +64DD6C89F61912FEC07B212CE6D4A8DC88AFF9F7E96F2CF1803FD3FEB9E538CD\ +0EE34288A3C84FFAEEEF7789AB99CA574D6F71A4A82E28396532830A1737E5AC\ +F1B768:\ +B4A9126CE1706351DF0AABE9EDD2F1E1BA10928DD2A15448A07DDEC6EA78C854\ +B98E82B6AFDA1BFBA57EDFA627A351C2F3819906FC9950844230AD32FB1EE0F3\ +4ABE20D488B36C693E35A1A177EF69307C675F4AD3A182AB20C395582DACD33F\ +30B5C7470D9BC2CCB5AC4CB39D5E665D:\ +DF2C9BDE5AE112FC52CB4CD935650ABF:\ +324E72A3E627412FB271C62D87106AD7 + +11053DEEFEBC7662CCE5373FF8624FFF4832229980A212A8CA936FB6459A53FB\ +4731936071BDC21D916C85C6E5F0560E6294E67979A8FD00AF9191DF4807B3D4\ +54D4F57FFBEEF3CC2728F9306DFD77AAB3259D4A72771939EAB7B78581CCD272\ +6DA93339:\ +22EBAB368D5548D61691A4F77B6468A4D9AA2C2600009C808EC8656F58E49D8D\ +674702E090E5910A4C67FD91335D149126478FF6FE2F342F42B8F50618EE6DD7\ +5A07E4A90D3CBFB0C2AD6CC1B9226E2522871C017C77A0345ABA7E44688AB5DF\ +E4691ADF90FD48843AEE7D3C289FB6D5:\ +F76BED433BAE0EED648D1B28878D4134:\ +2F8F480D2EBE3F01D63C7D1E1AC6AB64 + +574A77F969620F53546B46BD2CC524DE9DED870EC2F6B9F61063FE9E9A2C4C55\ +483B6B4172C034F04EDED86ACA242425241C984ACEAF7EF04001FAA887E66BF1\ +C33594022A968BBBFDA3A7D9D9C735F461DE459DECBF12093009E84618504E97\ +037EE7A648:\ +AAA424FAFC30A2BEDF0644E693FF02B2BF1CA14285092E980E522611BFB3A372\ +7F68BAB53F5B9098C1112716D4B848882D4ABD847DE3A6F5AFA0BD8D7834E853\ +D90CC96F1C35F7F3E1DCAF6B227031C70A29EA6B902A5A1266E16364999D5BC7\ +E9374A7467F4673A995D9D23144FBC6C:\ +9C0A96F10D955F3115174158E77BF4D8:\ +A0F912F87D0D937E388F9EFB14900921 + +1C5AF4082A03011D343A22628667787D1ED78ADCDCF4609C133DFDED8BF179C2\ +96A7B7E023503F42ED1ADC8676909A42DFB8CD7A5B57F77B4F13907B25A1D28B\ +787B33631B46240FC36B5D13B059312991F0A54DBC269787EAC7D4C02E8BA8BF\ +511375F0D18F:\ +2F86A992559C65306CCBC9138DA2C1987C168FF4278BBEBB4B48B416DFF7987F\ +9BE993AB153B8C3B03D7FF1E4ACABC2E645A108382F995C290FCE8D881BAFF65\ +3F1DBFCC8B957CD7C424EB5D91D758960233A48153197374F1649830CC924437\ +7BBDA7EE7C363096A1E0B94F83A75F2E:\ +0E10DBDCF81E7F360D3CDB71AA1A6200:\ +A44C029268CEFA5C2665E9C883C9179A + +C40A8815E2982C32C417F4B9369765F53D1546EA3A39CD5E07DB465DF161F878\ +D8A361069AD0BA13F158D6F955A20C0F0225B83CA4C6F1D92519F26A8C711ABB\ +68140270218B13CF2F85F008CFC5C62490FEDBE6DB2E0DC5978A365711E072C9\ +13F81B782C1A8B:\ +D57A23818F90CF982C32648BB61769DB8654CC81E795668A7AA6CBC1597A8086\ +E92EA40A8CF4950A87D3FED3260E5B30C90333CE3E90AF2452A6BD0D00221449\ +7A850DC2E3E1361FB689CD4AC25BF304F40D0ACD6A77DC96B5A52354AAF09EB9\ +E45E34CEE834EE78583ED0763C2D9583:\ +E8CC72398A38C02705E33FD308EC023D:\ +0982EF5D081AF4A2130AA9DC5895F4B1 + +8C38B56BDF41611178CB12970D12CDD3BA2A09BC9C90684C853455E70D995F94\ +D0C7CD30B572AB9E24356FD3FF66CA1AA913C5E4B596A30C504CF22592AB5BB2\ +66956C8706EBCEA543ECB8C07A9557B65F72A66328B92037A9D1EE4DB32EE7FA\ +DDB037BD75C5A711:\ +AB5B987C10DC96162447A9DA1B70DA9C7D6944CE39EB0D507715671E7AC4FFC4\ +663ACEB5FCF4AA8ABCA5CC155EC57FF43AE23E8854022F176D620B89B01C283F\ +4866696FDD03B4CC262F3C6BEE590E26A25914F569592B70D017D872CC3D3A2F\ +47B0194D7EB425442F3335FF0EE3AB05:\ +A9AF40EEB9D7057C167C020C922789E8:\ +DD54B94CBB23C203486F41CDA7742B75 + +05EA52CC288620CA6E4A8232F1F3CC99097438471E6709C146B9DA1B1AC166EB\ +E968FA273A8EBAA577CF673959B10D9008CA182F5075E86DFBD5BFAEAAE69013\ +5CEEB445088EAA7F870B71D9BFEA7DCDD2AF5C37D4DAAB468D67C70C1D556A10\ +A33DEE93C2B1FFB758:\ +1410F5CDDDDCC1FEC3E6793CCABCBDD2A1A14FC0D40325A9D6E69C4FE4D87191\ +DB1BD4ACF6E4727D7370EA59B77FD5E8F02F38CCB35448201363966106388A3E\ +007C4F76566F589C5326A847424FD0AB647974C3CAA452D95AA4CF8D86BB0939\ +B430E6746D35D45576EA810DDEF7DE73:\ +42E4792765C8D601F647096128C22E6C:\ +C0115D81CE8541848E778E2B90652AC2 + +7104B9314233A3DDFF2074862A21B3AD6CA9693785516E2C7A4EE69A823D82EF\ +0A4C57C3F5113C62D9B1E755F9EB7943D432C87EA9C6004F14281355DED99982\ +1B1ADA56C68736FCCDAB111ED640E9ACFD4D164310925F8E3AAAE63C8AAFA382\ +7B0E45FDCE03EDE162F6:\ +F53F4386FE121FE5B734048DA923054DD12F244CC12763FFB8DB1E9E842DA312\ +1827DC297AB6F11B8278E6E96ACABE3CE23E3C251078734F337E9BC92FBDF38A\ +FD0FB2CC86BFDF16595E01F361A2F042974E6DDBDE8B2AA10CA755BE051A0CD5\ +8179AA4571664A3980B0E1DCC8369F15:\ +7B4844C6EFBB9F47BA2AE3CD350B00A6:\ +2AE654A8577CAFB65B43407C0C6F23F7 + +328C825FAD8E873D66178434F534E832EFC8B273BD74E133701184D59EC5E3B6\ +1B58653B6646CD1E91AEFF9B4A569976FD055C3039CE76AB5DB5AADB8D479064\ +2D99346D9FBDC193B782F4F5C16F2F1C60084BF57B40736DF186EF9DBEB12B83\ +45FACDA9A957D20666A1C2:\ +6865D8CE0ADADF051BC5751DDC7DC02BD3E8425900F493A9866F9B0FF11704B2\ +6F949F38547859DFC1F7E4EC9066BD6825CE5596C32D97C11CE6ECBE63A58E32\ +C3B423114C1E4330789817AE298381050607A1F8FBD37246763CD98128565AB8\ +9FB05942B02BA92337E30E5F9F87A1D8:\ +0C76977CEDFF0BED19FD14FB31914BAE:\ +867FF78C9084E6B866BB74FF1549F0E1 + +1018329626BEEAEB50A5B078726E9BE6074CAB2FD2007790102626241CB54114\ +52B28C696FB5DA1BEA90BAAD90DF0F15A559FA821423EB500F0D76B785FFB7BC\ +2470509006CF192C3A5AB61CB6D5F7C6506C740C8BA763527FAED51748E33477\ +5D759F904B3CEB9520EEC9FA:\ +E3C6C758EE636F36B674E5D06B3FED93F848D5C781772E31A88EEE0F84D4DDAA\ +BD6BD6D439D36AA5EAEF61302BE6968EE3B786B5CAA20040A15EC740680A4E0D\ +788E445AD1D00CA2FA8A4D32D0C80821AECC9668CCF8D60D74B1BF960AA42861\ +D9339A064A7B50555ECAA71A475A87AE:\ +ACB06A6D35664BA240105546AFB89D88:\ +C4C566F5BE990271C34EB38B66F4A6B8 + +D30D40FF5BBB7E7D4BFD03B39DD4F7CDEEA3EE36CF59735140A2CD884C341885\ +A2ABB16B42883C17D0F8A8EA49932906C51B4E0B195438236C929E46C3DF0400\ +D6BFBF7E7CD09F78ED819E51CAFACF184CED6D9854F0C7FC3D4E2E92BC07B979\ +3F15240C221F9CD951BC1D8F7A:\ +D99D6BE44B4B07DEC16063AE56D734955FBFA4BF24156531336CBDFF718D1CE8\ +DD9414A5137F0F193B22351BDC56E4D62E827ADE0A414DBBCC99DB1FFB700153\ +0AD06D22C1685B7C608B97C9F282EA506C87F8F1E861E2F56AEDF96D02BB615E\ +222B9F83219D7C79E30E0A830DFDD089:\ +3A57AA735A2A5BEB67002A4B4E0F0FB7:\ +0FB689E2D76B4CB6886813714F78A471 + +D3C88CA0AD414F6A88903D4B2BB756CA44717CE6C542537066A898A343A3DD6A\ +E2609E717DA65C9E82777A29E5C134942455B04E5926DF69CC1B86EA95805AB5\ +267E9C456B29C89FB7D5EF184016178C8F5170F6456CB2D3A288264C501208C2\ +F71578A794526A40C02267CDB749:\ +12143011522BADD13CA2D5838548F63585804175B21B47AD9907FB3875049A17\ +A27EE2C7E3C9FB61C4F1BC8795D9FA8B267B698A216BC3E3370A04E27CDAADEA\ +D0C18E6F8564F3E82A779B2EE149F8DAC7CF9C7DB7E83BAAC17D366E3497135C\ +4D59C1C4D0DD8BE6520A1415D7A12729:\ +25C1B9E50A35623397E026342290F381:\ +99CF0F3E276941A23B8BA3AE4BC36FB5 + +1FA6BF67DE5B0B29BA7B510166D06CD100BA68E03EE4CC8D8340E1BDAAFD00DE\ +840147243E746C85F68409F62E474505BB8FE6251FC550A2D8C9CA071CED983A\ +57EAB7D7A0E636E809163E29677388B2E96F81165B4B7DBAC996D9DA923BF3F8\ +9BFD7E659AC6BAEEDC2C1F223C85E7:\ +FE2F1AE7085001374F5FE74E6C243763BA979839C7275B817FE5B1D93A8D31A2\ +C265B646ED0E9BAD5EDE61BC9A6BD7FCBAE22D818DEAFF76C39CE6F8F4302F0D\ +672628B36A1FE1DF90697408AA636F0F2EB12D00A87C1660C03257EC7F98FB0A\ +2750958FC5769FCE8681001134A4EBB2:\ +3FE0B766CCDA7B8AEC8FC3433DDDF5E4:\ +E5E7B817F2B2C47395F3DC983877C6C3 + +CB81F985B3551A1F653816EBC8472DEDB58C5BC66049A33543F92A64D9B06806\ +78C5AB54FBF03B7CF1CB964E903E92FA1D7D0C3A5B4E2A8393687F0CD73693CE\ +EFA32DBBB854CDA1BABF629CE10CFEDA1F16C8A60B9419069468A5D8E3070403\ +5EC4F7CE7D67A5547129FD136908C33D:\ +BFE9B413104A26F4B3B86AC448F793F138BE0DD31CAAFEFA7AE2AE69BD09402F\ +70F921081E66D0F3A092D3BC28CF2C8837991A200930F260443F9755F8AD46DE\ +F08FE5020792BEB7D2241F5D9B290A4F5F849E378B8184AA616B081196A38439\ +3FFD2A15622029829F0BEC293AADB6FEB5893AD9DD2A4B46A32A033FC06BFDD3:\ +7E9BD6AEA141BD2399CF9C34D8FD0EE0:\ +4265EE0DF32B9E35411F3890D981224B + +AEEC500F45E292E59DE2A9C4BF4B0BAB26E920386B8AF44934C5DBCE4BA66ED3\ +B294F0C4F4A88E70CEE9F9690E506A1C6E1F2B6E9085397BD3C8E197E8295728\ +815C47D859E0FAF1C5FA2ED9237FBFCA5843A9F99EB40E53554043AFEBE394FC\ +02F47E6734D3F01FBF0E4CD7D21FA3E631:\ +DD6A11239F7AD4FBAC8948E6E2D2F27D6EC5C818FA6501B910151B8CB3B5142D\ +AFA7141C0310F3668C7C79DC1ED8144F01D6B0BF1E9574896997545BB441A5C2\ +5CA4152492A1CE498B42B0D8681E47FDDF2F240C9D0E52B516F459C5AC029938\ +1FC7964D9A4EA8A28588F62D8BCF98C10C23999B81C20E971E4427CF32B72EC9:\ +DD22660F816ED9248F192406874D15C8:\ +5C25277D16E491388E300E43463ED773 + +255BAF2421268D3A748F891E76B7507BED31C86FAD52BF775DA0C6DDB4849F13\ +8E4246BF66449217FB62AC389B70D0A772D3B786526D358A83EEFA4E963CF5DC\ +473EBD53DDDE847F32D4B62D9616D1B0B37DFC552EB853A66FE62B58370756E1\ +7EF4D4ADBAF23091E5FC9D67CA0DA3FCBFEC:\ +E73F4EFA1943CE9EF9704BB173B14371056DB816BF9CD52D5D509D84417393D1\ +C3ABFCCF929F66F01E7CA8FF4E78BF73E3CF63F4557075875BF049A8F92CD8B8\ +B69F40CD384D94A2D6A217292834033CD94BA0A06D0B41B26E4F8B2C5F7B6079\ +630CD17CDDB518811A107D957645C7FF570E7F16EA4204EE79C625A5E9A873B4:\ +85F6C7EFEBDF11A904C8741F0C67411E:\ +60F0D61421D0D6F46D6BB01213C2AB33 + +F3CC75785335B638C1299C6D28856E4D66C060488BF17DB58E989EE2EFCE3D86\ +71A8949051543F360D9ED2C6990D41DDB9DE2EB9DE00D93B058E560786F6D065\ +C8F31B980275AB44F8553610ED91868B0F2200010B870C5F523F4B7059CBE889\ +F87103241B4BBD2303445144E0F183781801A9:\ +EC768FB206FFCBF14D21E57C2231CFEC6FFCA8F1679C97F1CD7F295E4E1A531E\ +F9846B2AB7B4D897D7814A124B3BB4BB6B3165A6B37C2DCD5A8BAA3F74735213\ +E52299B793D058D3D6AFEFFC08AAB7B746D4446BC264DF72AAFD9DE23091287A\ +A93C5267364A292A56EB20B011B4896021422527FFA26F3B8B833EC117BA4020:\ +B52E2A13114DF2F34844234C4A170705:\ +7818531571C5F69B1B4CF26F75DE0F21 + +0FE31EF68E81FD5CCD82FEC5F2CC6014AD31E41202A0E4C9FF8830C79DD77EE0\ +FA45870BFB3F8F8D0572564793A348BE277CFEB269EC1163F898E60CDAB5E729\ +87F1997B09732CEA505E59E6EF1230F638123CC2305DA0DF6BCA214D7775A8B5\ +6A712E73E426FE35C3D0B3F2AA2664EA0D323F35:\ +FF1155A412C0B8009C06A8518EEC87CE4614A7946E6F06760FB86B8BBA29485D\ +B78A2A15D168A0CC53FA494463A803FD8D702835754F0A1310B8AB33978D05E4\ +4C7E2155997706F65CEB71388B822230DF2EFE65B02FF949DFDDA0B6C6863334\ +C9F58B0AE50E3867514D53095483A19B0A44DB1ACA793BE988398FD3E523D3E9:\ +0E9881250175DC9F6564D3553B3DFDB2:\ +116C34C3DDB5321A21F100401EEF6390 + +A6EE4E43B382CC75FEC27BB90D2A3F204CC995033AB707FCF8EE2E7E76A3D189\ +BEB002EAF964004264A7D712AC5560AA19652C0BC593DD2231B15194D9221631\ +E09E4CCEBD1EF599AEF836772514B6D256F6BC22F05CBE6A452BE56328524EE8\ +B7A1C1683108BEA36BDF538A8CDB871038420CE29E:\ +52F203A1ACB1465A9D2EB0FCB9CE83957F4207C7649D74FFBF8EAE6C608EA87A\ +EF9CC76B90E28A73004B5D9B074BAE04888FB02194BE477B18DCDCE5E738DB76\ +10029DF664EB8C9C5887914760D69257E35A5B40885E2ACCF160AE0B0E0E59AA\ +CBBEFEED01108AFFD9A8F6A22EAC8B504D084BF6949823D5F59DD924AC52318B:\ +C6B2BB588ED1B6A954710036DB0166F0:\ +5D54E4FF322F6E012080E8FAA242FDE6 + +D69325940CF2E33246F5C0C931BECB9E0372173963F58FAAC297AF7AEB4784B6\ +0B16E98E2E4174FC1CB73EA690A4ADFCD38E4A955C7F1D915480C028D30E5849\ +2C0BF7DAB257D5DDF2230B3FE0B62B73B17B82F01D661E1AACFED564B9615995\ +EF7E0C81C373601BED078FB4668E55704119300BB31C:\ +6D0A03A606901BAC108C80DD968AC128964588F8E5B3BEF30FA0AAFE5092C5B1\ +B118B2FAB9AF379D701FBF9354B99048DB408B7CE3A954361A2110CA97386DE9\ +E0A8B52B86704D69BFAC08B77F3B961D39105FB3646E2075040C169A9388E68B\ +C36ACA6DD627036B15B2AC7424D11AFFA0BEB4414F5360B4349B656D8332D638:\ +86BF4DF958BE53CC007923FE8D6556AC:\ +20B3C91A3B5A66A6AB8599D01674AF45 + +E05554670BE695A32D397A2A6951DA076F4B760D0C6B7413656B8D38143056A6\ +A6074E4280D4EB70889B39ED6A27AE0F67D7FFD31A4933F8CD300BAC7C810162\ +D2F91CAFC8BF4238A44C09D06AD503E638AE1299E1575B2B3B3229A9F6A240C2\ +3F1534CEAB344FCA12724D8D185C1A96DCB3E040000B95:\ +05B2E6706BCA5507BCF4399F466212CE875C9C94436F7AA133630A3CA67A9C84\ +3230FC445177867E73A9AC89F7BB32C6653F1A30E4859EE98CF7BE8C5E1479A8\ +0285AE091AE932060F8093A63AF1417FADE414F33190359587A30280B330C657\ +E3DC35C8A003ED7ED92E61ACD08049C716AC2F12F362C4FFA1EBE7B7590C6876:\ +915AA4BE886620705DEF24FBBBA40598:\ +46A4D05C91E7931956C459CA51E4869F + +8E97900728874829423FF9E65CB2F3B4E3E720BBBEC1A3485F34A94B7580001E\ +5CC450E6D76516DD9A8E450320248441074FBBBCF9A0BB3702B100126F5260F3\ +81DEFC536D2905E78A3783CA969730AD188D34381D353908BE269B10ACAFE287\ +BFB37E93349A7F6FA96912975B817BDEBA0500B87CF95680:\ +2B1C832A0210ACCC143745BF8B4A32EE68C86584868B2AD2C64BB802D831303F\ +6028C0646107311F22ED520E063DEE06A2AED4F22D6ED762A299149B3723D30D\ +264847CCB233E8C522B1EEC6458DBD238CF15A33B55627470359A09483C66B66\ +2EF012EE8C26A92BD6E12634B413A1A27813C0C6DD39165B5FAE54069ED2486A:\ +6FA0FBBB491F305F512982ECEBEFCE3A:\ +20CFB9FCC146145657841CB97395B14F + +7D15F0ED3E7D504B3051AE6C00E01DDCD7FA4C6F3A3F3E0E9FC945847BAC9207\ +6D92C9BE830AF40D473DA1741DFF53EF78502796B21B66E7E37707A400EA7BD5\ +44FC234B655115394DAFE31C5CBE48846AD62E8F15B6D346A50CDAB34FDD2859\ +3D5B369BCD7D8F47783BE8CE2F5735C50AA266667E421E1E1F:\ +91F4FA1D9381C08E9C635ED7BB5D12421F44F80E13CF665AA2EBD06052B3DF7F\ +7DD1952D1BFC6B61E37953D7EFB4CD152111F74A80CD937FD88B83139E7860B6\ +78512C8A2D891B1AAB080C77B25C226F9C319B6B21D804471887A8EE9DECA336\ +B29988AB80D6FAD00A7E1DA5CBDFB757E146C592323CB381EF40166D644570BD:\ +5896FCEDBF16D103B6CC4909222B1493:\ +F29D9A05434E704CAC05D280A8FFEE5E + +9FACDD624D109102570E789B4BF006C1F0C24E95ACB8082D522615082DD933DD\ +550921F38907BA5AC30846F9CC63AE18BB46852E8E802CB9BED8C09F049D6B35\ +292767D4615648656FA05BC1CDC54A78B00E70A5098A884D0133171D5D884621\ +7775500B2F33EDFAE01109DB72BE4782C3EA1F839A1134C01A55:\ +F2D12969396FC6DFE22BA80E9F6A176C9F3D91536CED8CC2A83E1D2A7DB83C1E\ +AF6B069522CC1CABF7B30E6B1C082991D662F847B87F3DFF40C7A3CEC5D3D966\ +15640A3B48B95E755CA22B3B0B635C2A56A61F2A8435E1106F62C79D37372B82\ +BF71F6043C44813EB2E12729AB30565FC718392D5FEC1AEF0DFAB649EBA8EABA:\ +BF380C44E37BCA81F3C6036EA3586935:\ +32F440D2ECDD949684D4CDA9586A28F4 + +6A22387417FC3ECEC9443041CEE5E8440652146BBF214663631A4ABA37A5920E\ +1BC9611FD936729CDC28084B451C3E08F313F31612C2189E27BB73B48F581C71\ +17DB75CC22D821911CD70968B960AB771C83EC6BE2DEF41A22E36734EF56F250\ +0D3EAE610A860661DDE7F9EF7BB75FE765C427B79C545463747BC1:\ +6A9A030F41BE6BA42A1E7BD051794848D8A6EC6B57F4A0CF44A937A42164A767\ +D8799B9923F501621800E05BD2B3F65A890AD5603641ACB2E980A06CA3FBDE32\ +43CC2BD2AB50119576FABAEAEE19D75AEDD91616279A94F8B8B7F6A89E423055\ +718DD356250A3D466BDBD35322ADE654DE176AB4F2740716D4D6B61CD80C065F:\ +B81F13EAD324F6F9F9E45659D72D0EB3:\ +122A6645EFE2F81E6FFC8E4418ADCA30 + +344C97F9A847B33B5A950F5EF4EAB59971EF86D2D11C77B4196DCA55305B5F71\ +3303DA12E3D5C736B129706477BB8F71F3C81819766DE583BD915BFC4C9F528F\ +32D2A4DD4DAA5C5286415090DE7CEAE61BA1B18937CD41E69055BD5A99C73DD3\ +92606FEDC0D386696F2BE9002980CB5F1EE5135974CF859E802806A7:\ +16984B5B5369FD385CE7EFE789D8B2E80F3A7F3ACF0AFD8D00E7C31D7DBD24EB\ +0C6DD509A4AE6A1C04A7A322BD897D307C421EC9A1FE1EE935CAFC27C6FAD7ED\ +0617D184B75726FDC26174ABA388836A99CAF23818A4707EB60A233302E09CAD\ +7B2F7FADD02A9466F8C861D481023016ABF6E57BEDD4B288C8A81B7EFB8A4485:\ +20FE5765A855346A157FFAAEFB7CCE31:\ +F9147EBE79608EFFEB722B28AD6138E5 + +FB5EECD4A3BF6C6B1B0B4B4FF7F702FCF538AE425B5F7419687ACBF263F95872\ +90F32BC9D146A651F4036346934198DD14C0187BBB50834A627ED9136D8E51E5\ +EE2D4DD3D71A3546A3DD91F205905F4A4ECB83F1882E8D20A84371CF8886651E\ +DA9601D6A3E7A6B60D7B90552C19F786D4AEA805A7C5F9ECFBFA69776D:\ +BB60147DB21B8968AA6C60DF45053D8FDBA5FF5C95D468DC01A4030970685AD9\ +1FCCFCC5D35E19E50530EE6C3BE336EBD39BAC07E8C3B966692F2BE6149EB26F\ +E160913CF23BB49B30ABBC97468F65CF347EFE06DDDE60E899E28B801AE21F45\ +1470041F98F8A778F75E03649EA7CF6013FF285F8EB1CFBD8760B3DF147AA796:\ +01DC3A0701B7CE3EAFEAFA1A5FFD1B88:\ +213F409C520A489A000F30016C01CC21 + +7B1A9F40AC8BBB0E7E000CDFA8A715D9AAEA5C8488DEF0C31C4F5C4A2F2257D4\ +80F9C669B3023699C14F59D8240D86382E8DAB49F1F4FA10C69CE63137A21D17\ +DA7001BBA5434C577B7F17A22D5ABA62CF0169FC686AFA28EC780A955DC00332\ +81F569AADD0A7130FE25E8D517C78D90EF6FCE96863A0356FE9664DAE677:\ +1C3C3D5AB36DA982C99679AA52D3B6D91E64688958E72BCD7DA933DD509B5E24\ +6277CB1603125002964FF838EAE8769CBC63792BB5F087D31F12841D9776B523\ +3FDC4247679A99C050DCF0C14E8963D39551885F905FBA72C4689A92CCFE4837\ +82723783D560E6E8ADADB6F6BEA0762BA6F21F539E14BAB48AA69675CAA69069:\ +9B9B9E1B898CBC46D32CB73E38F4C3BB:\ +41C1C33D445AAE243A762D2A5EC6B719 + +AE5940BD642AE3A0487BDDDBCA420107E8A42982812995C5B6F97CFB7B1D1898\ +4D07151984685989294BE42DEF6CC4D0BFB41F2F100115ABD1F36407522C728E\ +84C3EB0E5C156B89C41BEF436FC0EFB1BCFEFB876936654F0738893D601F57B4\ +E791D0854AE1C6482D68355FCA5BE8BAEC3CBDAC383D187BDF85845843D400:\ +86F1B8E57A56C1936D226EB3133F8FC7368E172ECE39C70C39736CD17711C20D\ +AD4BFC8C445D1E94C6E313FEF1BFEBD4865805560E295F20E6860F26A8B35ABD\ +B3B64C230585E1E12D1C83BF8ACE9BC76141B2E9C7A7D7E3BE69C504AC3A4DC2\ +370918C0930B660106B90EC6799463EFCFC7FD057113A82134343AD3E51CB32E:\ +763992E428859B04AFBFCC8EA1670853:\ +38E2D175E535CC3CDAF3AE49A5D80385 + +18A0F0ADD69013BE387385E4B600D765FC39204E4284DAFB6A80062855C3C044\ +FBBBD10C41D13FF4247ADA22B6533647D2B5BD3C1BE520282BD087C04850017D\ +EBB7A2DD47527B2B9E3F148795994BE379790556C530AE12BDA2563FA0221168\ +1CCF34514DEAA6ED6AEF8568CF577A58606AE7E6384D572FDB7E17143E000B2C:\ +3924800EC62AFC28F39542F994316B1FD00CE52EC073030EA54493CBF259C2EF\ +96AC4FF8815A35408ED9A619A82094E3CD94426FE09469F6D940BA73E7F9472C\ +6AD14E8302CD46481E1971270B3EEEF22E0FEC16B530F9DB34385695EE904FA0\ +34DE7C6C1FA6D971DE0EDE7129DC0F6FC7404D7686ADB22383B0506CBDAA7888\ +DA1DEAEA3CE196301B311A59C8C28499:\ +79D8EE7B194C1DAC8D6AD992922B5E13:\ +A709D2673AF50F72F03013ADC79F8D61 + [DES/CBC/OneAndZeros] :79FCDEE6F5A94E74:0741219814F4369E:DEFD8C15FEB10458 61:AFE5BE1DF47E6958:3FAD1BFA365F515F:587FBFB91B510842 @@ -23587,13 +24657,14 @@ EDE3E69EE5B55AC758EB39E70E6533CC4D89C148F6AD68293E743CD82B9638F020EE589D:\ # From NIST Special Publication 800-XX (prerelease): "Recommendation for Block # Cipher Modes of Operation" -[AES/CBC/NoPadding] +[AES-128/CBC/NoPadding] 6BC1BEE22E409F96E93D7E117393172AAE2D8A571E03AC9C9EB76FAC45AF8E51\ 30C81C46A35CE411E5FBC1191A0A52EFF69F2445DF4F9B17AD2B417BE66C3710:\ 7649ABAC8119B246CEE98E9B12E9197D5086CB9B507219EE95DB113A917678B2\ 73BED6B8E3C1743B7116E69E222295163FF1CAA1681FAC09120ECA307586E1A7:\ 2B7E151628AED2A6ABF7158809CF4F3C:000102030405060708090A0B0C0D0E0F +[AES-192/CBC/NoPadding] 6BC1BEE22E409F96E93D7E117393172AAE2D8A571E03AC9C9EB76FAC45AF8E51\ 30C81C46A35CE411E5FBC1191A0A52EFF69F2445DF4F9B17AD2B417BE66C3710:\ 4F021DB243BC633D7178183A9FA071E8B4D9ADA9AD7DEDF4E5E738763F69145A\ @@ -23601,6 +24672,7 @@ EDE3E69EE5B55AC758EB39E70E6533CC4D89C148F6AD68293E743CD82B9638F020EE589D:\ 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:\ 000102030405060708090A0B0C0D0E0F +[AES-256/CBC/NoPadding] 6BC1BEE22E409F96E93D7E117393172AAE2D8A571E03AC9C9EB76FAC45AF8E51\ 30C81C46A35CE411E5FBC1191A0A52EFF69F2445DF4F9B17AD2B417BE66C3710:\ F58C4C04D6E5F1BA779EABFB5F7BFBD69CFC4E967EDB808D679F777BC6702C7D\ @@ -23608,14 +24680,16 @@ F58C4C04D6E5F1BA779EABFB5F7BFBD69CFC4E967EDB808D679F777BC6702C7D\ 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:\ 000102030405060708090A0B0C0D0E0F -[AES/CFB(8)] +[AES-128/CFB(8)] 6BC1BEE22E409F96E93D7E117393172AAE2D:3B79424C9C0DD436BACE9E0ED4586A4F32B9:\ 2B7E151628AED2A6ABF7158809CF4F3C:000102030405060708090A0B0C0D0E0F +[AES-192/CFB(8)] 6BC1BEE22E409F96E93D7E117393172AAE2D:CDA2521EF0A905CA44CD057CBF0D47A0678A:\ 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:\ 000102030405060708090A0B0C0D0E0F +[AES-256/CFB(8)] 6BC1BEE22E409F96E93D7E117393172AAE2D:DC1F1A8520A64DB55FCC8AC554844E889700:\ 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:\ 000102030405060708090A0B0C0D0E0F @@ -23664,7 +24738,7 @@ DC7E84BFDA79164B7ECD8486985D38604FEBDC6740D20B3AC88F6AD82A4FB08D\ # From NIST Special Publication 800-XX (prerelease): "Recommendation for Block # Cipher Modes of Operation" -[AES/CTR-BE] +[AES-128/CTR-BE] 6BC1BEE22E409F96E93D7E117393172AAE2D8A571E03AC9C9EB76FAC45AF8E51\ 30C81C46A35CE411E5FBC1191A0A52EFF69F2445DF4F9B17AD2B417BE66C3710:\ 874D6191B620E3261BEF6864990DB6CE9806F66B7970FDFF8617187BB9FFFDFF\ @@ -23678,6 +24752,7 @@ AE2D8A571E03AC9C9EB76FAC45AF8E51\ 5AE4DF3EDBD5D35E5B4F09020DB03EAB1E031DDA2FBE03D1792170A0F3009CEE:\ 2B7E151628AED2A6ABF7158809CF4F3C:F0F1F2F3F4F5F6F7F8F9FAFBFCFDFF +[AES-192/CTR-BE] 6BC1BEE22E409F96E93D7E117393172AAE2D8A571E03AC9C9EB76FAC45AF8E51\ 30C81C46A35CE411E5FBC1191A0A52EFF69F2445DF4F9B17AD2B417BE66C3710:\ 1ABC932417521CA24F2B0459FE7E6E0B090339EC0AA6FAEFD5CCC2C6F4CE8E94\ @@ -23685,6 +24760,7 @@ AE2D8A571E03AC9C9EB76FAC45AF8E51\ 8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B:\ F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF +[AES-256/CTR-BE] 6BC1BEE22E409F96E93D7E117393172AAE2D8A571E03AC9C9EB76FAC45AF8E51\ 30C81C46A35CE411E5FBC1191A0A52EFF69F2445DF4F9B17AD2B417BE66C3710:\ 601EC313775789A5B7A7F504BBF3D228F443E3CA4D62B59ACA84E990CACAF5C5\ @@ -23692,7 +24768,7 @@ F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF 603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4:\ F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF -[AES/EAX] +[AES-128/EAX] :32E55CE0C3FAEA48164B122C1BE22D85:\ C61A0851AB4E515D11525B92E2B9D850:C825FC7C4D539DC74887CECC70884F37 @@ -23990,14 +25066,14 @@ F71566B677596557D4C218DEC8A7D2611FE6FA07633C558FF372308F5D680C0F\ E9E5E812B623D9E72C23518F082EA48C:\ 251AD494D64DAB08B66A96CB8C7876A6:F87A825C39326949EB19EE5BD30CCBF9 -[AES/EAX(64)] +[AES-128/EAX(64)] :32E55CE0C3FAEA48:\ C61A0851AB4E515D11525B92E2B9D850:C825FC7C4D539DC74887CECC70884F37 60:710DABD24D400F3B6B:\ F956B879EC7F807F1FCB482B53623671:E64F90B4619D93137E6237929EABF297 -[AES/XTS] +[AES-128/XTS] # Vectors are from IEEE P1619 D11 0000000000000000000000000000000000000000000000000000000000000000:\ @@ -24225,6 +25301,27 @@ B3D32466028D0BA36555E7E11AB0EE0666061D1645D962444BC47A38188930A8\ 2718281828459045235360287471352631415926535897932384626433832795:\ FF000000000000000000000000000000 +# From Brian Gladman's XTS implementation +000102030405060708090A0B0C0D0E0F10:\ +6C1625DB4671522D3D7599601DE7CA09ED:\ +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0:\ +9A785634120000000000000000000000 + +000102030405060708090A0B0C0D0E0F1011:\ +D069444B7A7E0CAB09E24447D24DEB1FEDBF:\ +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0:\ +9A785634120000000000000000000000 + +000102030405060708090A0B0C0D0E0F101112:\ +E5DF1351C0544BA1350B3363CD8EF4BEEDBF9D:\ +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0:\ +9A785634120000000000000000000000 + +000102030405060708090A0B0C0D0E0F10111213:\ +9D84C813F719AA2C7BE3F66171C7C5C2EDBF9DAC:\ +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0:\ +9A785634120000000000000000000000 + 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F\ 202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F\ 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F\ @@ -24241,25 +25338,29 @@ E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF\ A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF\ C0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF\ E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF:\ -1C3B3A102F770386E4836C99E370CF9BEA00803F5E482357A4AE12D414A3E63B\ -5D31E276F8FE4A8D66B317F9AC683F44680A86AC35ADFC3345BEFECB4BB188FD\ -5776926C49A3095EB108FD1098BAEC70AAA66999A72A82F27D848B21D4A741B0\ -C5CD4D5FFF9DAC89AEBA122961D03A757123E9870F8ACF1000020887891429CA\ -2A3E7A7D7DF7B10355165C8B9A6D0A7DE8B062C4500DC4CD120C0F7418DAE3D0\ -B5781C34803FA75421C790DFE1DE1834F280D7667B327F6C8CD7557E12AC3A0F\ -93EC05C52E0493EF31A12D3D9260F79A289D6A379BC70C50841473D1A8CC81EC\ -583E9645E07B8D9670655BA5BBCFECC6DC3966380AD8FECB17B6BA02469A020A\ -84E18E8F84252070C13E9F1F289BE54FBC481457778F616015E1327A02B140F1\ -505EB309326D68378F8374595C849D84F4C333EC4423885143CB47BD71C5EDAE\ -9BE69A2FFECEB1BEC9DE244FBE15992B11B77C040F12BD8F6A975A44A0F90C29\ -A9ABC3D4D893927284C58754CCE294529F8614DCD2ABA991925FEDC4AE74FFAC\ -6E333B93EB4AFF0479DA9A410E4450E0DD7AE4C6E2910900575DA401FC07059F\ -645E8B7E9BFDEF33943054FF84011493C27B3429EAEDB4ED5376441A77ED4385\ -1AD77F16F541DFD269D50D6A5F14FB0AAB1CBB4C1550BE97F7AB4066193C4CAA\ -773DAD38014BD2092FA755C824BB5E54C4F36FFDA9FCEA70B9C6E693E148C151:\ -2718281828459045235360287471352662497757247093699959574966967627\ -3141592653589793238462643383279502884197169399375105820974944592:\ -FF000000000000000000000000000000 +38B45812EF43A05BD957E545907E223B954AB4AAF088303AD910EADF14B42BE6\ +8B2461149D8C8BA85F992BE970BC621F1B06573F63E867BF5875ACAFA04E42CC\ +BD7BD3C2A0FB1FFF791EC5EC36C66AE4AC1E806D81FBF709DBE29E471FAD3854\ +9C8E66F5345D7C1EB94F405D1EC785CC6F6A68F6254DD8339F9D84057E01A177\ +41990482999516B5611A38F41BB6478E6F173F320805DD71B1932FC333CB9EE3\ +9936BEEA9AD96FA10FB4112B901734DDAD40BC1878995F8E11AEE7D141A2F5D4\ +8B7A4E1E7F0B2C04830E69A4FD1378411C2F287EDF48C6C4E5C247A19680F7FE\ +41CEFBD49B582106E3616CBBE4DFB2344B2AE9519391F3E0FB4922254B1D6D2D\ +19C6D4D537B3A26F3BCC51588B32F3ECA0829B6A5AC72578FB814FB43CF80D64\ +A233E3F997A3F02683342F2B33D25B492536B93BECB2F5E1A8B82F5B88334272\ +9E8AE09D16938841A21A97FB543EEA3BBFF59F13C1A18449E398701C1AD51648\ +346CBC04C27BB2DA3B93A1372CCAE548FB53BEE476F9E9C91773B1BB19828394\ +D55D3E1A20ED69113A860B6829FFA847224604435070221B257E8DFF783615D2\ +CAE4803A93AA4334AB482A0AFAC9C0AEDA70B45A481DF5DEC5DF8CC0F423C77A\ +5FD46CD312021D4B438862419A791BE03BB4D97C0E59578542531BA466A83BAF\ +92CEFC151B5CC1611A167893819B63FB8A6B18E86DE60290FA72B797B0CE59F3:\ +E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECF:\ +21436587A90000000000000000000000 + +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E:\ +D05BC090A8E04F1B3D3ECDD5BAEC0FD4EDBF9DACE45D6F6A7306E64BE5DD82:\ +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0:\ +9A785634120000000000000000000000 000102030405060708090A0B0C0D0E0F10:\ 6C1625DB4671522D3D7599601DE7CA09ED:\ @@ -24281,6 +25382,61 @@ FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0:\ FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0:\ 9A785634120000000000000000000000 +000102030405060708090A0B0C0D0E0F1011121314:\ +2CD47E780DE4B008D8FDE727C1C325F4EDBF9DACE4:\ +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0:\ +9A785634120000000000000000000000 + +000102030405060708090A0B0C0D0E0F101112131415:\ +9148CA1ADE56C1914833BCA9F7742F4EEDBF9DACE45D:\ +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0:\ +9A785634120000000000000000000000 + +000102030405060708090A0B0C0D0E0F10111213141516:\ +95B3BDFF7122C424BA9501BA0B9E09F0EDBF9DACE45D6F:\ +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0:\ +9A785634120000000000000000000000 + +000102030405060708090A0B0C0D0E0F1011121314151617:\ +A2316435248154E2026E672372A6A789EDBF9DACE45D6F6A:\ +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0:\ +9A785634120000000000000000000000 + +000102030405060708090A0B0C0D0E0F101112131415161718:\ +8F4DCBAD55558D7B4E01D9379CD4EA22EDBF9DACE45D6F6A73:\ +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0:\ +9A785634120000000000000000000000 + +000102030405060708090A0B0C0D0E0F10111213141516171819:\ +4D184C4B48F4BE3B2491A04093713EC3EDBF9DACE45D6F6A7306:\ +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0:\ +9A785634120000000000000000000000 + +000102030405060708090A0B0C0D0E0F101112131415161718191A:\ +1FB75FF08D88C63CADBA2CCF5CDDE52FEDBF9DACE45D6F6A7306E6:\ +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0:\ +9A785634120000000000000000000000 + +000102030405060708090A0B0C0D0E0F101112131415161718191A1B:\ +5E20653F0988F211299DD6D76CCE0E72EDBF9DACE45D6F6A7306E64B:\ +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0:\ +9A785634120000000000000000000000 + +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C:\ +60D814B83896C40CC56EC143D38A7C7FEDBF9DACE45D6F6A7306E64BE5:\ +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0:\ +9A785634120000000000000000000000 + +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D:\ +24F3B2374C2EE6DD6E0B9ED63E354307EDBF9DACE45D6F6A7306E64BE5DD:\ +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0:\ +9A785634120000000000000000000000 + +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E:\ +D05BC090A8E04F1B3D3ECDD5BAEC0FD4EDBF9DACE45D6F6A7306E64BE5DD82:\ +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0:\ +9A785634120000000000000000000000 + 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F\ 202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F\ 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F\ @@ -24296,7 +25452,8 @@ E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF\ 808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F\ A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF\ C0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF\ -E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF:\ +E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF\ +0001020304050607:\ 38B45812EF43A05BD957E545907E223B954AB4AAF088303AD910EADF14B42BE6\ 8B2461149D8C8BA85F992BE970BC621F1B06573F63E867BF5875ACAFA04E42CC\ BD7BD3C2A0FB1FFF791EC5EC36C66AE4AC1E806D81FBF709DBE29E471FAD3854\ @@ -24312,18 +25469,7046 @@ A233E3F997A3F02683342F2B33D25B492536B93BECB2F5E1A8B82F5B88334272\ D55D3E1A20ED69113A860B6829FFA847224604435070221B257E8DFF783615D2\ CAE4803A93AA4334AB482A0AFAC9C0AEDA70B45A481DF5DEC5DF8CC0F423C77A\ 5FD46CD312021D4B438862419A791BE03BB4D97C0E59578542531BA466A83BAF\ -92CEFC151B5CC1611A167893819B63FB8A6B18E86DE60290FA72B797B0CE59F3:\ +92CEFC151B5CC1611A167893819B63FB37EC662BC0FC907DB74A94468A55A7BC\ +8A6B18E86DE60290:\ E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECF:\ 21436587A90000000000000000000000 -# Generated by Botan +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F\ +2021222324:\ +27A7479BEFA1D476489F308CD4CFA6E294E4CD40E4BA22AEF6C26F9F32DDC925\ +A96E4BBE32:\ +2718281828459045235360287471352631415926535897932384626433832795:\ +00000000000000000000000000000000 + +27A7479BEFA1D476489F308CD4CFA6E294E4CD40E4BA22AEF6C26F9F32DDC925\ +A96E4BBE32:\ +88DFFC5A67617A54952ADDCD9CCBDA5BA127EAAD95B20441788EFBC0462F6B54\ +F65FD7579B:\ +2718281828459045235360287471352631415926535897932384626433832795:\ +11000000000000000000000000000000 + +88DFFC5A67617A54952ADDCD9CCBDA5BA127EAAD95B20441788EFBC0462F6B54\ +F65FD7579B:\ +5000ECA5A1F6A49378030D9EE805ACEF460F314EE04BB514034EB27FB8DF2BC8\ +12AE5BDF8C:\ +2718281828459045235360287471352631415926535897932384626433832795:\ +22110000000000000000000000000000 + +5000ECA5A1F6A49378030D9EE805ACEF460F314EE04BB514034EB27FB8DF2BC8\ +12AE5BDF8C:\ +E59E6F233BE0E0830483C6BD4E82F4C39543558A25E3DB60A553A5948145A6FF\ +B5E6BE1DB5:\ +2718281828459045235360287471352631415926535897932384626433832795:\ +33221100000000000000000000000000 + +E59E6F233BE0E0830483C6BD4E82F4C39543558A25E3DB60A553A5948145A6FF\ +B5E6BE1DB5:\ +01C7772FEB67516E13E1BE201F0CDE25F84D71AACDA86A3957E285B2059D7C93\ +84F4432795:\ +2718281828459045235360287471352631415926535897932384626433832795:\ +44332211000000000000000000000000 + +01C7772FEB67516E13E1BE201F0CDE25F84D71AACDA86A3957E285B2059D7C93\ +84F4432795:\ +457BD3FE9531EBF13FF98F965AFC1A075B5C80108D3EBCC8041CD29DE4416A71\ +F1ED58F383:\ +2718281828459045235360287471352631415926535897932384626433832795:\ +55443322110000000000000000000000 + +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F\ +20212223:\ +27A7479BEFA1D476489F308CD4CFA6E288F548E5C4239F91712A587E2B05AC3D\ +A96E4BBE:\ +2718281828459045235360287471352631415926535897932384626433832795:\ +00000000000000000000000000000000 + +27A7479BEFA1D476489F308CD4CFA6E288F548E5C4239F91712A587E2B05AC3D\ +A96E4BBE:\ +88DFFC5A67617A54952ADDCD9CCBDA5B1A87DE598E8E9FC8E3CB6EB80141CDEC\ +AE9E78B3:\ +2718281828459045235360287471352631415926535897932384626433832795:\ +11000000000000000000000000000000 + +88DFFC5A67617A54952ADDCD9CCBDA5B1A87DE598E8E9FC8E3CB6EB80141CDEC\ +AE9E78B3:\ +5000ECA5A1F6A49378030D9EE805ACEF0CE949B3861EB92CC4C541507AFF4AAD\ +368E7FE5:\ +2718281828459045235360287471352631415926535897932384626433832795:\ +22110000000000000000000000000000 + +5000ECA5A1F6A49378030D9EE805ACEF0CE949B3861EB92CC4C541507AFF4AAD\ +368E7FE5:\ +E59E6F233BE0E0830483C6BD4E82F4C3C0C31FEB59D739BFE8CD96A7F3950E4C\ +4C21D832:\ +2718281828459045235360287471352631415926535897932384626433832795:\ +33221100000000000000000000000000 + +E59E6F233BE0E0830483C6BD4E82F4C3C0C31FEB59D739BFE8CD96A7F3950E4C\ +4C21D832:\ +01C7772FEB67516E13E1BE201F0CDE257A22160502BF1B7310153E0A5215D70D\ +1FA5E0FB:\ +2718281828459045235360287471352631415926535897932384626433832795:\ +44332211000000000000000000000000 + +01C7772FEB67516E13E1BE201F0CDE257A22160502BF1B7310153E0A5215D70D\ +1FA5E0FB:\ +457BD3FE9531EBF13FF98F965AFC1A07DB2431240FDD34D66A0F7457129A0A64\ +C838EE03:\ +2718281828459045235360287471352631415926535897932384626433832795:\ +55443322110000000000000000000000 + +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F\ +202122:\ +27A7479BEFA1D476489F308CD4CFA6E2DDF8A1A57E330896A2F95DC70D59CB51\ +A96E4B:\ +2718281828459045235360287471352631415926535897932384626433832795:\ +00000000000000000000000000000000 + +27A7479BEFA1D476489F308CD4CFA6E2DDF8A1A57E330896A2F95DC70D59CB51\ +A96E4B:\ +88DFFC5A67617A54952ADDCD9CCBDA5B688EBB032ED9C4B2223944AE7626956A\ +07577F:\ +2718281828459045235360287471352631415926535897932384626433832795:\ +11000000000000000000000000000000 + +88DFFC5A67617A54952ADDCD9CCBDA5B688EBB032ED9C4B2223944AE7626956A\ +07577F:\ +5000ECA5A1F6A49378030D9EE805ACEF5B0B898816A7CFA9D40DFBE35A731419\ +6D0F7F:\ +2718281828459045235360287471352631415926535897932384626433832795:\ +22110000000000000000000000000000 + +5000ECA5A1F6A49378030D9EE805ACEF5B0B898816A7CFA9D40DFBE35A731419\ +6D0F7F:\ +E59E6F233BE0E0830483C6BD4E82F4C341785B48E59353C2F55C05EFC6D6191A\ +733D0C:\ +2718281828459045235360287471352631415926535897932384626433832795:\ +33221100000000000000000000000000 + +E59E6F233BE0E0830483C6BD4E82F4C341785B48E59353C2F55C05EFC6D6191A\ +733D0C:\ +01C7772FEB67516E13E1BE201F0CDE25667EBBE69DB9728C534B88083A8FFFBA\ +758210:\ +2718281828459045235360287471352631415926535897932384626433832795:\ +44332211000000000000000000000000 + +01C7772FEB67516E13E1BE201F0CDE25667EBBE69DB9728C534B88083A8FFFBA\ +758210:\ +457BD3FE9531EBF13FF98F965AFC1A071762ABD95A529D51FDEE8137740857DE\ +1CB7F8:\ +2718281828459045235360287471352631415926535897932384626433832795:\ +55443322110000000000000000000000 + +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F\ +2021:\ +27A7479BEFA1D476489F308CD4CFA6E203C64AD2FF46C204CB36123C1BDB4B7A\ +A96E:\ +2718281828459045235360287471352631415926535897932384626433832795:\ +00000000000000000000000000000000 + +27A7479BEFA1D476489F308CD4CFA6E203C64AD2FF46C204CB36123C1BDB4B7A\ +A96E:\ +88DFFC5A67617A54952ADDCD9CCBDA5B45D25600AE3AB369378816F303C5EAFF\ +FA3F:\ +2718281828459045235360287471352631415926535897932384626433832795:\ +11000000000000000000000000000000 + +88DFFC5A67617A54952ADDCD9CCBDA5B45D25600AE3AB369378816F303C5EAFF\ +FA3F:\ +5000ECA5A1F6A49378030D9EE805ACEFEC47348F3EF418D34398192B465806DA\ +A025:\ +2718281828459045235360287471352631415926535897932384626433832795:\ +22110000000000000000000000000000 + +5000ECA5A1F6A49378030D9EE805ACEFEC47348F3EF418D34398192B465806DA\ +A025:\ +E59E6F233BE0E0830483C6BD4E82F4C38EA0534B5DBFA3FF0467797E0179C1EC\ +CC42:\ +2718281828459045235360287471352631415926535897932384626433832795:\ +33221100000000000000000000000000 + +E59E6F233BE0E0830483C6BD4E82F4C38EA0534B5DBFA3FF0467797E0179C1EC\ +CC42:\ +01C7772FEB67516E13E1BE201F0CDE25DE3C95403C6C12F005CBE1216ACCA26A\ +7CBD:\ +2718281828459045235360287471352631415926535897932384626433832795:\ +44332211000000000000000000000000 + +01C7772FEB67516E13E1BE201F0CDE25DE3C95403C6C12F005CBE1216ACCA26A\ +7CBD:\ +457BD3FE9531EBF13FF98F965AFC1A0707A896D7C002150B23BC4C24C04593F7\ +30A7:\ +2718281828459045235360287471352631415926535897932384626433832795:\ +55443322110000000000000000000000 + +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F\ +20:\ +27A7479BEFA1D476489F308CD4CFA6E2A3FCD5EA382FD25A6469DEA467377E2E\ +A9:\ +2718281828459045235360287471352631415926535897932384626433832795:\ +00000000000000000000000000000000 + +27A7479BEFA1D476489F308CD4CFA6E2A3FCD5EA382FD25A6469DEA467377E2E\ +A9:\ +88DFFC5A67617A54952ADDCD9CCBDA5BF0D6EDC2AC04C62D728FA4AA7F83F136\ +FD:\ +2718281828459045235360287471352631415926535897932384626433832795:\ +11000000000000000000000000000000 + +88DFFC5A67617A54952ADDCD9CCBDA5BF0D6EDC2AC04C62D728FA4AA7F83F136\ +FD:\ +5000ECA5A1F6A49378030D9EE805ACEFD0F354CA0758FE61E62B6BF79404154D\ +20:\ +2718281828459045235360287471352631415926535897932384626433832795:\ +22110000000000000000000000000000 + +5000ECA5A1F6A49378030D9EE805ACEFD0F354CA0758FE61E62B6BF79404154D\ +20:\ +E59E6F233BE0E0830483C6BD4E82F4C3E5288DD1FC040837735A40B3BE8AF83C\ +1D:\ +2718281828459045235360287471352631415926535897932384626433832795:\ +33221100000000000000000000000000 + +E59E6F233BE0E0830483C6BD4E82F4C3E5288DD1FC040837735A40B3BE8AF83C\ +1D:\ +01C7772FEB67516E13E1BE201F0CDE25C3ED2B1AB747C3BEDF68F3A293D27372\ +22:\ +2718281828459045235360287471352631415926535897932384626433832795:\ +44332211000000000000000000000000 + +01C7772FEB67516E13E1BE201F0CDE25C3ED2B1AB747C3BEDF68F3A293D27372\ +22:\ +457BD3FE9531EBF13FF98F965AFC1A07D308CACA9E8E9F86E104E47F5C60B703\ +C8:\ +2718281828459045235360287471352631415926535897932384626433832795:\ +55443322110000000000000000000000 + +[AES-256/XTS] +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F\ +202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F\ +404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F\ +606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F\ +808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F\ +A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF\ +C0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF\ +E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF\ +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F\ +202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F\ +404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F\ +606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F\ +808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F\ +A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF\ +C0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF\ +E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF:\ +1C3B3A102F770386E4836C99E370CF9BEA00803F5E482357A4AE12D414A3E63B\ +5D31E276F8FE4A8D66B317F9AC683F44680A86AC35ADFC3345BEFECB4BB188FD\ +5776926C49A3095EB108FD1098BAEC70AAA66999A72A82F27D848B21D4A741B0\ +C5CD4D5FFF9DAC89AEBA122961D03A757123E9870F8ACF1000020887891429CA\ +2A3E7A7D7DF7B10355165C8B9A6D0A7DE8B062C4500DC4CD120C0F7418DAE3D0\ +B5781C34803FA75421C790DFE1DE1834F280D7667B327F6C8CD7557E12AC3A0F\ +93EC05C52E0493EF31A12D3D9260F79A289D6A379BC70C50841473D1A8CC81EC\ +583E9645E07B8D9670655BA5BBCFECC6DC3966380AD8FECB17B6BA02469A020A\ +84E18E8F84252070C13E9F1F289BE54FBC481457778F616015E1327A02B140F1\ +505EB309326D68378F8374595C849D84F4C333EC4423885143CB47BD71C5EDAE\ +9BE69A2FFECEB1BEC9DE244FBE15992B11B77C040F12BD8F6A975A44A0F90C29\ +A9ABC3D4D893927284C58754CCE294529F8614DCD2ABA991925FEDC4AE74FFAC\ +6E333B93EB4AFF0479DA9A410E4450E0DD7AE4C6E2910900575DA401FC07059F\ +645E8B7E9BFDEF33943054FF84011493C27B3429EAEDB4ED5376441A77ED4385\ +1AD77F16F541DFD269D50D6A5F14FB0AAB1CBB4C1550BE97F7AB4066193C4CAA\ +773DAD38014BD2092FA755C824BB5E54C4F36FFDA9FCEA70B9C6E693E148C151:\ +2718281828459045235360287471352662497757247093699959574966967627\ +3141592653589793238462643383279502884197169399375105820974944592:\ +FF000000000000000000000000000000 + +# From Brian Gladman's XTS implementation +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F\ +2021222324:\ +3A060A8CAD115A6F44572E3759E43C8F8832FEDC28A8E35B357B5CF3EDBEF788\ +CAD8BFCB23:\ +2718281828459045235360287471352662497757247093699959574966967627\ +3141592653589793238462643383279502884197169399375105820974944592:\ +00000000000000000000000000000000 + +3A060A8CAD115A6F44572E3759E43C8F8832FEDC28A8E35B357B5CF3EDBEF788\ +CAD8BFCB23:\ +6D1C78A8BAD91DB2924C507CCEDE835F5BADD157DA0AF55C98BBC28CF676F9FA\ +61618FA696:\ +2718281828459045235360287471352662497757247093699959574966967627\ +3141592653589793238462643383279502884197169399375105820974944592:\ +11000000000000000000000000000000 + +6D1C78A8BAD91DB2924C507CCEDE835F5BADD157DA0AF55C98BBC28CF676F9FA\ +61618FA696:\ +818E287A6B1168B124FDBBD730488FE1E25330B96BA54A950A51AB35A8461E5B\ +9EDD4E72AA:\ +2718281828459045235360287471352662497757247093699959574966967627\ +3141592653589793238462643383279502884197169399375105820974944592:\ +22110000000000000000000000000000 + +818E287A6B1168B124FDBBD730488FE1E25330B96BA54A950A51AB35A8461E5B\ +9EDD4E72AA:\ +37AF0A0E7436B8C07A5AC8FC3C1007CF84366DB3978319DB9ACD3ADB8DDA164B\ +209ABC2CB9:\ +2718281828459045235360287471352662497757247093699959574966967627\ +3141592653589793238462643383279502884197169399375105820974944592:\ +33221100000000000000000000000000 + +37AF0A0E7436B8C07A5AC8FC3C1007CF84366DB3978319DB9ACD3ADB8DDA164B\ +209ABC2CB9:\ +6CF52A5E258BF080D9EF18301448061EC1A340F0B153C9028422D1F2DB83EE46\ +A77C4C3BB1:\ +2718281828459045235360287471352662497757247093699959574966967627\ +3141592653589793238462643383279502884197169399375105820974944592:\ +44332211000000000000000000000000 + +6CF52A5E258BF080D9EF18301448061EC1A340F0B153C9028422D1F2DB83EE46\ +A77C4C3BB1:\ +8245242C6A1CED243020B11D5DDE84199EBC07E90165554C6185F00D93500425\ +25F0F259E3:\ +2718281828459045235360287471352662497757247093699959574966967627\ +3141592653589793238462643383279502884197169399375105820974944592:\ +55443322110000000000000000000000 + +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F\ +20212223:\ +3A060A8CAD115A6F44572E3759E43C8F8F552508845701063BCE2A39F96FFDFC\ +CAD8BFCB:\ +2718281828459045235360287471352662497757247093699959574966967627\ +3141592653589793238462643383279502884197169399375105820974944592:\ +00000000000000000000000000000000 + +3A060A8CAD115A6F44572E3759E43C8F8F552508845701063BCE2A39F96FFDFC\ +CAD8BFCB:\ +6D1C78A8BAD91DB2924C507CCEDE835FAAF397703650CFD664F0446344D35FF5\ +93CACFAE:\ +2718281828459045235360287471352662497757247093699959574966967627\ +3141592653589793238462643383279502884197169399375105820974944592:\ +11000000000000000000000000000000 + +6D1C78A8BAD91DB2924C507CCEDE835FAAF397703650CFD664F0446344D35FF5\ +93CACFAE:\ +818E287A6B1168B124FDBBD730488FE117337F34591096E2BEF63932AC5F82A8\ +1462CC39:\ +2718281828459045235360287471352662497757247093699959574966967627\ +3141592653589793238462643383279502884197169399375105820974944592:\ +22110000000000000000000000000000 + +818E287A6B1168B124FDBBD730488FE117337F34591096E2BEF63932AC5F82A8\ +1462CC39:\ +37AF0A0E7436B8C07A5AC8FC3C1007CFCE294D5B61E003CBE1C1190B2436C9F2\ +67575578:\ +2718281828459045235360287471352662497757247093699959574966967627\ +3141592653589793238462643383279502884197169399375105820974944592:\ +33221100000000000000000000000000 + +37AF0A0E7436B8C07A5AC8FC3C1007CFCE294D5B61E003CBE1C1190B2436C9F2\ +67575578:\ +6CF52A5E258BF080D9EF18301448061E7504A2127E3EF31C3CF68C23E5C13676\ +3E32F96F:\ +2718281828459045235360287471352662497757247093699959574966967627\ +3141592653589793238462643383279502884197169399375105820974944592:\ +44332211000000000000000000000000 + +6CF52A5E258BF080D9EF18301448061E7504A2127E3EF31C3CF68C23E5C13676\ +3E32F96F:\ +8245242C6A1CED243020B11D5DDE8419BEA9DF5569B16CE9D98E412BF2990EAB\ +6614A200:\ +2718281828459045235360287471352662497757247093699959574966967627\ +3141592653589793238462643383279502884197169399375105820974944592:\ +55443322110000000000000000000000 + +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F\ +202122:\ +3A060A8CAD115A6F44572E3759E43C8F3A9C7A992A69177CAA7FEB093D4CB3C1\ +CAD8BF:\ +2718281828459045235360287471352662497757247093699959574966967627\ +3141592653589793238462643383279502884197169399375105820974944592:\ +00000000000000000000000000000000 + +3A060A8CAD115A6F44572E3759E43C8F3A9C7A992A69177CAA7FEB093D4CB3C1\ +CAD8BF:\ +6D1C78A8BAD91DB2924C507CCEDE835FBE8377FB3155793E49B47ADEF4ADAEC5\ +8FB3CB:\ +2718281828459045235360287471352662497757247093699959574966967627\ +3141592653589793238462643383279502884197169399375105820974944592:\ +11000000000000000000000000000000 + +6D1C78A8BAD91DB2924C507CCEDE835FBE8377FB3155793E49B47ADEF4ADAEC5\ +8FB3CB:\ +818E287A6B1168B124FDBBD730488FE199D1918615E54BD5F21AFD5F350A6AC4\ +B135CD:\ +2718281828459045235360287471352662497757247093699959574966967627\ +3141592653589793238462643383279502884197169399375105820974944592:\ +22110000000000000000000000000000 + +818E287A6B1168B124FDBBD730488FE199D1918615E54BD5F21AFD5F350A6AC4\ +B135CD:\ +37AF0A0E7436B8C07A5AC8FC3C1007CFFD7223FDEE014F60C8C273F9221D7A89\ +22570E:\ +2718281828459045235360287471352662497757247093699959574966967627\ +3141592653589793238462643383279502884197169399375105820974944592:\ +33221100000000000000000000000000 + +37AF0A0E7436B8C07A5AC8FC3C1007CFFD7223FDEE014F60C8C273F9221D7A89\ +22570E:\ +6CF52A5E258BF080D9EF18301448061EEC07582D787D2EC64E8C8BF8EE69BF70\ +16EF0C:\ +2718281828459045235360287471352662497757247093699959574966967627\ +3141592653589793238462643383279502884197169399375105820974944592:\ +44332211000000000000000000000000 + +6CF52A5E258BF080D9EF18301448061EEC07582D787D2EC64E8C8BF8EE69BF70\ +16EF0C:\ +8245242C6A1CED243020B11D5DDE841903C49424D4D444F23B893CBCD26B6D4E\ +F6885E:\ +2718281828459045235360287471352662497757247093699959574966967627\ +3141592653589793238462643383279502884197169399375105820974944592:\ +55443322110000000000000000000000 + +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F\ +2021:\ +3A060A8CAD115A6F44572E3759E43C8FCB1783BBA9A61375BCE3F6F8C0914DAE\ +CAD8:\ +2718281828459045235360287471352662497757247093699959574966967627\ +3141592653589793238462643383279502884197169399375105820974944592:\ +00000000000000000000000000000000 + +3A060A8CAD115A6F44572E3759E43C8FCB1783BBA9A61375BCE3F6F8C0914DAE\ +CAD8:\ +6D1C78A8BAD91DB2924C507CCEDE835F76233E917848CB1AAEE224FF8AE6F3F6\ +887A:\ +2718281828459045235360287471352662497757247093699959574966967627\ +3141592653589793238462643383279502884197169399375105820974944592:\ +11000000000000000000000000000000 + +6D1C78A8BAD91DB2924C507CCEDE835F76233E917848CB1AAEE224FF8AE6F3F6\ +887A:\ +818E287A6B1168B124FDBBD730488FE15DDDFE24D6C4F97C9F930F9C527E7B15\ +CE4E:\ +2718281828459045235360287471352662497757247093699959574966967627\ +3141592653589793238462643383279502884197169399375105820974944592:\ +22110000000000000000000000000000 + +818E287A6B1168B124FDBBD730488FE15DDDFE24D6C4F97C9F930F9C527E7B15\ +CE4E:\ +37AF0A0E7436B8C07A5AC8FC3C1007CFF904E371A7A59BD34C9A3DC636D6ADE1\ +23E9:\ +2718281828459045235360287471352662497757247093699959574966967627\ +3141592653589793238462643383279502884197169399375105820974944592:\ +33221100000000000000000000000000 + +37AF0A0E7436B8C07A5AC8FC3C1007CFF904E371A7A59BD34C9A3DC636D6ADE1\ +23E9:\ +6CF52A5E258BF080D9EF18301448061EAFEA108BC2CD25569599580348AD83AA\ +56C6:\ +2718281828459045235360287471352662497757247093699959574966967627\ +3141592653589793238462643383279502884197169399375105820974944592:\ +44332211000000000000000000000000 + +6CF52A5E258BF080D9EF18301448061EAFEA108BC2CD25569599580348AD83AA\ +56C6:\ +8245242C6A1CED243020B11D5DDE8419B844D25C4BD732A30C82E4F0237857F7\ +CAC1:\ +2718281828459045235360287471352662497757247093699959574966967627\ +3141592653589793238462643383279502884197169399375105820974944592:\ +55443322110000000000000000000000 + +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F\ +20:\ +3A060A8CAD115A6F44572E3759E43C8FBF97C76A8CD21BE09A0D530FE188CC1E\ +CA:\ +2718281828459045235360287471352662497757247093699959574966967627\ +3141592653589793238462643383279502884197169399375105820974944592:\ +00000000000000000000000000000000 + +3A060A8CAD115A6F44572E3759E43C8FBF97C76A8CD21BE09A0D530FE188CC1E\ +CA:\ +6D1C78A8BAD91DB2924C507CCEDE835FB4963EA5500367B0996D5725FB0279CE\ +7B:\ +2718281828459045235360287471352662497757247093699959574966967627\ +3141592653589793238462643383279502884197169399375105820974944592:\ +11000000000000000000000000000000 + +6D1C78A8BAD91DB2924C507CCEDE835FB4963EA5500367B0996D5725FB0279CE\ +7B:\ +818E287A6B1168B124FDBBD730488FE1B259DDE3A512332C6F23A80AFF648EF7\ +99:\ +2718281828459045235360287471352662497757247093699959574966967627\ +3141592653589793238462643383279502884197169399375105820974944592:\ +22110000000000000000000000000000 + +818E287A6B1168B124FDBBD730488FE1B259DDE3A512332C6F23A80AFF648EF7\ +99:\ +37AF0A0E7436B8C07A5AC8FC3C1007CFC03E12D003BB29D9814128E963D7163D\ +5A:\ +2718281828459045235360287471352662497757247093699959574966967627\ +3141592653589793238462643383279502884197169399375105820974944592:\ +33221100000000000000000000000000 + +37AF0A0E7436B8C07A5AC8FC3C1007CFC03E12D003BB29D9814128E963D7163D\ +5A:\ +6CF52A5E258BF080D9EF18301448061EBA65BBC63613F8E283AD5DE78AF98877\ +60:\ +2718281828459045235360287471352662497757247093699959574966967627\ +3141592653589793238462643383279502884197169399375105820974944592:\ +44332211000000000000000000000000 + +000102030405060708090A0B0C0D0E0F10:\ +7F117752CC598A8B0D81D88AF9F9BEC8C3:\ +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0\ +BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A0:\ +9A785634120000000000000000000000 + +000102030405060708090A0B0C0D0E0F1011:\ +D1F4418F240D4535734188CC83A52026C30C:\ +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0\ +BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A0:\ +9A785634120000000000000000000000 + +000102030405060708090A0B0C0D0E0F101112:\ +0DE2CDD2C2A5114AC78AACDEEF14638FC30CA8:\ +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0\ +BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A0:\ +9A785634120000000000000000000000 + +000102030405060708090A0B0C0D0E0F10111213:\ +A06CCD40F54385404CB839A1D668E151C30CA8F2:\ +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0\ +BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A0:\ +9A785634120000000000000000000000 + +000102030405060708090A0B0C0D0E0F1011121314:\ +CDE828C3996137292AE21DAD65526B3FC30CA8F2ED:\ +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0\ +BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A0:\ +9A785634120000000000000000000000 + +000102030405060708090A0B0C0D0E0F101112131415:\ +75E8188BCCE59ADA939F57DE2CB9A489C30CA8F2ED57:\ +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0\ +BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A0:\ +9A785634120000000000000000000000 + +000102030405060708090A0B0C0D0E0F10111213141516:\ +56403FD6ED03F69A2A95CA17B3B3D6C5C30CA8F2ED5730:\ +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0\ +BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A0:\ +9A785634120000000000000000000000 + +000102030405060708090A0B0C0D0E0F1011121314151617:\ +5708432F21D05AC571449A7A8F4E1089C30CA8F2ED57307E:\ +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0\ +BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A0:\ +9A785634120000000000000000000000 + +000102030405060708090A0B0C0D0E0F101112131415161718:\ +9ABC9FFB364D5AAEAA7849AE0A7349DEC30CA8F2ED57307EDC:\ +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0\ +BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A0:\ +9A785634120000000000000000000000 + +000102030405060708090A0B0C0D0E0F10111213141516171819:\ +1A7297CBA8C2992302DBA6F501F602ACC30CA8F2ED57307EDC87:\ +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0\ +BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A0:\ +9A785634120000000000000000000000 + +000102030405060708090A0B0C0D0E0F101112131415161718191A:\ +F21758C331F8E66678332E82F012A07DC30CA8F2ED57307EDC87E5:\ +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0\ +BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A0:\ +9A785634120000000000000000000000 + +000102030405060708090A0B0C0D0E0F101112131415161718191A1B:\ +34F8F1C5597F1BE62565DA0CBDA946F7C30CA8F2ED57307EDC87E544:\ +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0\ +BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A0:\ +9A785634120000000000000000000000 + +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C:\ +CF32C3DB8C72E063CC3AE59ED7C4A20FC30CA8F2ED57307EDC87E54486:\ +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0\ +BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A0:\ +9A785634120000000000000000000000 + +000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D:\ +F418C0D5ABE38D7D4FC79A9D51E9EFA0C30CA8F2ED57307EDC87E544867A:\ +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0\ +BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A0:\ +9A785634120000000000000000000000 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E:\ -D05BC090A8E04F1B3D3ECDD5BAEC0FD4EDBF9DACE45D6F6A7306E64BE5DD82:\ -FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0:\ +581EA1FEE5516AD432DDEBE75FD27C6FC30CA8F2ED57307EDC87E544867AC8:\ +FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0\ +BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A0:\ 9A785634120000000000000000000000 +[Twofish/XTS] +87527DDED4D4E85F8DB6D6D41EEAB39C1F:\ +CACE1598319D84999709808780DFB741AB:\ +879AB1F37890ACE3AA1FF21EB403C2029E225E4B82CC00CD6377EBFDF6A313ED\ +6152830450ABA4E5EED0055968E66C81BB6DF06BFA92910550819F0BCD3D484B:\ +A5F270CDCB5D92FE5F19805AA93B7D13 + +69C6D85BB44D5B8758AC5E88DEFBEA0CB844:\ +FB492A194BB05CE9D28EC2AA195722C09506:\ +5A4FCBB13F344844058CF9687437C096E9C20239A7949F1D6D70CB32C5D70312\ +D18C6B27235876876964DB679EF5CED2D70F106C05AE97D41BD464721765C371:\ +CBB7CE96ABD669FA96152049132EC6AE + +23CC70A3559643E9C9401E8DFA6F008EEEDA8F:\ +73F9AF37A518D8AEFB2235169377AA701C4EB8:\ +AEEDFFB4675F482BAB1350D3B9493636A0F6B4170DC850C85A87ABE5846A0634\ +7CCD26285095BE412BC7DE4E8E119CD422FDCE2C46C24777A0A4DE95181279EB:\ +2D251F7A24EECA0F700123AAAAA5EFA7 + +3293E3ACDA035B437F88F80F47A00C140148A52A:\ +0296B4C958FD6580F99A035BAAF87EA8B84C05CF:\ +B54A852A6CC321CC2BBF99504C540556E2E3C282D4D40F097E64623415B4218B\ +F945B103E2C146FC27AF91548FF5820F290B31547D2B53A0268B1886C3D98E8B:\ +D1B43C29AA040279E0E9BCADD74483FF + +239AA6B6496A1B17CAF7EBE841AD4D305F181D0E6D:\ +CDFA4BBE476B7359BCC50CF17B70B32AEF87CD93D5:\ +EDC17F6E1CF8F2BC275BBB35E53A178CCBBE2C8F9738A41A35D208660D5A7E8C\ +1BC328EF7C77653A067F4F2A1FECEBDE4C2F8255F6506A8616AA528755D24F83:\ +0FA23364740B89F399AA68F14B8529FA + +730EBFD04725B43CB168EF773D588DACF67E5BED6D95:\ +C32B428F3F2B3414306A0834B58BC41D17BFAFAB27C0:\ +53F45699D43A9CCFAB5394935CE6B12A0A55B03E1E25EDD563DCC7C49CB364A0\ +264400AA9D590E323AC79A1C6089A8BEFB3A174D0C648DF994E204FFFC7414C0:\ +5EAEBABB5548E2C7EFEA4D0CD5797583 + +8FD9A731CC0E7B316FEE1C6577FF931B392CF414518DAB:\ +0DA66DE3470E52CCC1D808EE0A1619C07163B4FA4FECBE:\ +8001E9D2179684224BFB8E427F90926CF2AD8AB9E52E6E9EDE9FE3728EF40DC6\ +55C805CDF8CA632D3E432255AD41B05013E33CA450251B96B157321E5EA8C1AC:\ +6D562A8DE34420965FAC9FAF45EF8E02 + +1204A2BA158F123A3EEFA21042F6AFD2045E87D92C31C2FF:\ +8E4CFF694676E7425FB42DFE77EEA7329A220517F94B1600:\ +0F151257A51F8CC61D52DF7C5A760E48974A74E7C8DCA5D7143DE3C1B676E642\ +19B797C53930E2AAE570FF237AEDD9575E85DEA692B5CFE33AD7B31484EFCC5E:\ +65F157992CCA26529661CACE1273C0E7 + +4089DD27BC860B16652704D7F4A9F76A02E0E1B672A7AC1CC7:\ +060F3C7AEB4BD9EBA297C677DD55CF2235BE25AFC0C9E3B2F0:\ +602AE17A8224EBBE7A6BC7FCD96EB32AE889DDC6BE690EE2BAB6A61CCCD84934\ +097787103551C04ACCA31718F0999E578B0097D9D1B8C87A6F9DF6F9824DD9A4:\ +EE18423DBA1011F590090CD015651D95 + +BF8AE22A658F3ECC49C8CC43E35A5C36E0E60BB6C430435EDA6D:\ +2226BB0328F5AE872ABBEE02FF27BB60D976D8CB0F6E41833E2C:\ +CDCCF36103F76D5251267F0747FCD883CEB1E04D6A6279A9785FCD1F5017EA44\ +E0C736484D36543F2A992C12767CAE20F5FC73EAFE0EB06F2BCEFDF8B2E9FF3F:\ +FC9BF0B209F90435C99658E1FC6C94C5 + +AD78007337C9ECA5F9789F0669B7FB280178F42D4EC87C07129D15:\ +36E70177507DC786A179575CCE35D8EC85BA8BD331C69718EA13BA:\ +BF053E1B82F633A2CBB8D73AC717F114D56F10612A4BB96B102E4BD4A5A969F0\ +D79AF23D3F42DD80592D372A9D63A58B825B098BA4B1E496710D4A7FEE9E15EC:\ +F655CCF9AE1252B0244394BCD0D1A93D + +4F585C2503E05A292529529B7B1B9900553A27D0B54EB7E311E69B4D:\ +7A13D1E088FD9D2D6BA28F2627A629A2D9899DFD74652A2EA85F3F84:\ +37AE23E7C14765CDA22D97C932EA602FF45D5EBD9C0B6892AA8CB8F41FE769A6\ +C401974FE8B8DEC62F3DB31C8CFCED2701C6153BA0C850D581634F89B6B3979C:\ +A202C063F41692F239E817140522EAD2 + +D4B346483D1423EBF0C37CC02E012B71F942A93FF81600E7CBDF889C5A:\ +64D5A716381E079CA0D942DEC2CEC99E393B41B1FD7929B373F43F4348:\ +26B1E4E72DF299E7ABEE82B7D7B0E726DADD522C38589DD8679328489EAB8B6C\ +B89043B615331559EA181A2E2B5F7A854C20A6703C7E07B2D002D6143812EDBE:\ +CCC952D38B9B7028EE1958102734CB56 + +6E46752B60A968DA60CFB3D3676CEF16E3D5F79EEA8D16CD27CB5A38CD9B:\ +585DCAC0CAE15C1FAE99A282740259A7A55A45F4435A146CA5ACC433124D:\ +ED3749DDCC889F4C8ABBCA8052112B2CB8B92E4E407C1D54281A77499B6D806B\ +3F908358AEE4B09A2809D31A2E27D5A3F419C4B2B282BD4EB084C7F926F739A5:\ +34DD22F9ACB18CCE540C370B332E7FF3 + +47130CDB3F935DF1481644E3C658302E633D9D37A7F4710DED757E069F0596:\ +F303516195129D801F1DFC1DEECCEE47637149AC40233E40F43FA5CA6DA5EC:\ +97E98A5FE136E1F8B339A8C1F1F826779D7DAF3FA346A0B2C5F84AF58CB9E4A7\ +5AC32645A021A4F3E2B35BACFB01C5D5CCC5AE530DB839AA53B426E2C33F6F04:\ +423A6F53B3B3C42E1A4ECEBBF51084DE + +600C9906025E0AD59334C97947099E0BB2A8459177D0DC40DDD7AE343FC68BC2:\ +1D0128E8306E6300506221FCCF90895E537B9B520603920B06CD7699A9557DC9:\ +A9B5B5F8C41DBF50FC1F3D38B1D707CCC69A6F34D5549867C7C0A4C6A3DBBBE1\ +C8D404CCC0B080F6E7897442460141D28C6622D67DB30010F59B49ABF1E9629D:\ +D76612D0ED6EAFF8DAA44F020F31AF95 + +9CB7E4FF0A54B62ADAC4420C0DEAF248EA432A657445D35543329843723797C0\ +74:\ +E1B6FC1A2D707E6F174736104A6256385DBADE3117B9F3F53EDA77D5B93FAB12\ +96:\ +93E92AC5C312CE90ECF68001F76839BA2ACC65C00FEA0EECE17614E2A6FE7EF4\ +9D4FC9FE7518AAA7BD8B634D0C8FC0D8EB4C7F0FE7A3D0F5FE1B3BAA0316D3AF:\ +28260B5DDAEF8184182DCC91B3E5DE82 + +94D5CF74985CF4504592242E956102237A467CB55B0095D58B95CF1FA9950106\ +052D:\ +D163461424F606B44ABB401D579F7F229FB5E33F7C816E39A1C32109DBAC2DD5\ +0074:\ +938CBEA21DEBFF288C30F528F1AFDE4AC5432D391B68C33F4C9035D0372CEC8A\ +DE5019DA1EF46B3C5DA8C526A39665C2BC42075E992CFC50E855AD1A37CD3B2D:\ +4978AB021CFFB63DD7BE72FA36524B26 + +A4E829AE491058EA52F7AB7F21C77B72008DA696CBC474D1361BED9A000817EE\ +89DFCB:\ +B6832399C95AC21450224E04A1B7809EAD1AF6F70DE3FF64CB508200EBAAAF76\ +047167:\ +C6315E81D91E73BCD60B0C6F1F579472A9EC6196243046DCD06BE28152EE4765\ +106516B43984CD0C0EB28A82E9AEA038EB0F0570D438CF95471725D667ADBAD9:\ +0B15215597147F6DE6276713B264EE13 + +E3F4F426006738DA72F7D9ADB5FB1CDB298056874C4653198F817F3C1214CAED\ +6CEFE9FC:\ +F41E10BCD2B6B8D663036FBFA9456DD4C4FEBC9F8E23CBCB128E08A492E68357\ +4A1C3806:\ +B678F7F0A0EC4248D0FBDB133F38535E4DB45DD6C9A041B66E6968E16C2C55F2\ +6DE5CF535B952ABAAA920DA2FD792FCF9F7A66CBC4A1308E47E76568179FC929:\ +96BD2E9E8DCC0172772762252F33183F + +A12AC58A2DA1E8E46F2802EB33EFA0A9DC49270453E580319229795A0788AEFE\ +063E6D4372:\ +3C5A2787B8A4052815164BF3D479E4ED4D1CD69D98AADC18596ADA13C67713A4\ +8FFFFE9F90:\ +12D98553D28D31725ED5B9E8543418EEF9F73F0143A2EBD877BD881BDF029C3A\ +16D8A61B297166D04B82505D1111C600E79AF616770E5B66A68FDB09E95C169E:\ +DC6B3F8FDF82A574D0E5462CC67453CF + +D6589A4DB377CCAC9835C08F5080F3558ACD9694464CC398D9C7D64C27473D86\ +A8498586A22B:\ +C617C6954F649C12E23339000AA3EC4383CBC790A74FB33186ABD1E84B2051CE\ +80BA2107402A:\ +CF73972F2996A9B0C436425930F25E3EE12DA4287F42939493ECA8A63761F950\ +A4E604F0128A739A0D3758FB5AE9338EFF5C76817C880C8011ADB7AB6EB6F24D:\ +E72CB48562C4E43D4D2192E3F03F75DB + +F7992231422C1146A7B033F21487BFAE7AA87394EEBB89AB94040AB854A7449A\ +52E8EBD10EF5D5:\ +AE28F8BDDBBC049D70CC0C963A946473B979E924EA333849365230952BE227FD\ +04246FEC526C5F:\ +70DBB4B28ED1F6A0C9B1E4179B77A40F12EE987ECC0B68525AFC21344E57B081\ +414D3F4E48B23AC57BE687026A064DB122413178E11BE6D0AC831BEB78BF6DC1:\ +BB86043B9AA9A75A24BEADD4E6792DE8 + +2F5B06525F44BB2B66BB254C5B0BB32E3E4A0326D002799752AF95FEA3F26B00\ +E23A098BAA48932D:\ +3CFC16EF31ED7BB13DF8DDDB6259223A1B4A3E5125564B9D53BDA6E3ABEE20C9\ +8E11AC62CBA200EB:\ +DB8AEB4BD5DB4E720C6FE726B16A040EE94BA1D03707EEE67D23771BBCE0C3C3\ +B9904692F44D6F9E0358E1AC7B77C7278D1DE30131BE74C8F9B5A3446BC637D2:\ +39A651FF0499DFA59C6901A56FBC6A97 + +B978223179B1129ADEABF71892901AE53D3F9938145C20FA1E203285F75A9F91\ +05489E48BA79B7F45D:\ +DB31E6F89ECD882B3DEA586CEFB19CA423C7AC3F17FCDCCA797D777EEEBC7D0B\ +ABD66EC813867F59CF:\ +5DFFC1F875185ABBFA453384F30BFA9B16966D5FCDFB55138BF21A9D06F6F8C0\ +636DF1E9700A785AD6327D553828D3BCD63653EAA4D1BBBFA8107A43227DECF2:\ +DBA11286EF4C39350DBEC5D2A933E26F + +A9B3BF6928AA42B50A6682BAF9A8BB6D3B37910968C84A41E5B74B26B29542B9\ +927A27DC9EE16A826018:\ +062DD7B2794B999AF7D50FD542A94B7001531D679DA332AD48F27AEC8DECFE1B\ +743DAD035D5DFC248DF0:\ +80E54D88EBAEC574E103E4F25563FFDAF5E4D81220D9B85D3573806E03417F70\ +86CBF1B166D0EE862A0A4EC490E6C6C5FC2F83CFB4181F41D0A453DC2F255F43:\ +02FB920EC7B12B308979408F416BAB73 + +0D8AE237538061D90E8F152615A97FE1D6F70313B1EE8DAEC98491529D64F4F3\ +FA8C533693E8259396ABAD:\ +433B99CBA9752A78714124BA2A64F5A0D258F6686AFA54F2A60E80061EAF325F\ +B5194F119EDDE9D35D347B:\ +CF4B05B0B683646C40D1CF14F0250948C1DAB60E38772C223DE9D8D82B2BAF05\ +7FB970C6E3A46079AE2525DEA66A121431865B3FCDFEAFDD1D7B73B3E70FCE71:\ +E2A45BCA6618C4D926422BD2F564EAEB + +2534EB81B8E5570D4A046B44B3B98FBA57B076E05C868086E1B8FCF70285D102\ +488684BF1081123C0D31B9E0:\ +409BC2D364AAFEE1A081EC84A86C6B1561F65E041CFE851A6176448ED7D2177C\ +AD56556DF372C5EC6A5F4C8F:\ +7CCC358E0072A30AD111576C52B5995B952B3B5A9C51664A7260E180E5EE7556\ +D3816E376E92EC67CEE44B2BDB16AE1377553F0BD7448C9E8F863D769182041A:\ +BE2B67B1154A7B6963E3E0591421135C + +4AC5B53CCB2D1EB7C06FC055F9F98D3BA2849733356F1DF0F8469136B76D0B28\ +4695DBC137EEDC3498A0EF11B9:\ +B532E2C54D766A7D1E52D9987423E3A91F73D15BAF7A9F48D7CECF2AB0BEA3F7\ +318F1710125F994333C5B95E90:\ +A8C5FC35D228348F7D3B4E829991D1D84101403791AD06C394492BEC0A370B02\ +479E9C3F1B05D48B42C6A0E8F53FC042EA53308E003E0F1B5888AC8F561C3181:\ +DA9761496B6C239000EBD8ECC8B4FECF + +D520EBEC3DB3DD896EC62ABB73A83FA1C1737489027B899B6DF710E059C83C95\ +8308DE975C842135CA5CA47D8A31:\ +0C1D35A0E30671AFD032C1077EA17AA3C27AE0E995FB2EA86C784E2C9F9F9814\ +BE6A0082B0937734A8E920663893:\ +03A7C00B80FAB58206F8E259ACB9465DB03A4C9ABE7A441C6B773CBF0520C597\ +98D4B869EB9E14960190968E1B2140ABBC6A33F96133371A963C48F92A05BC95:\ +A995B2989E68BD0F03630FE07F6995ED + +44A109A07472C7B6FFC8E5722476F8FBE1FF51E054290EBA3CDAA59748E2E045\ +D0254AD475EBC722E773A7B3D8E6E8:\ +4ACE9B6C8433304C631B20D965EED18CEEFC51C20687C7EDDFDC2F40D301BD16\ +2177459D0491C6EB5D6069A1F787FF:\ +90A1BD357146D7D0F4E5D667C5A0D714AB2B0B34F97B9C58664E695347A9A845\ +8AF655F3C6CCF70B5145AFC4F7B783BB92EEA10ED0E187DBE595CA1803799A4C:\ +3A724BB5719BD11F993CA26AF712ADEB + +3937B23B14007CE4ABB0327FCCFBC35A7ABB3D9B7F7E7DC8E4A0A170D3F3CFCB\ +C6C02A7D3C39F664CAA88C7618F99C23:\ +24FD61C5A38DC471B0A4F8C262AC142F2F927DCA9060534AB1D55AE0F4D1BB70\ +EA3F96D6974128B8F687D4D13F414421:\ +FE6E413A1EBB13243B96E3FB6044B6E19101DB311FC854C946B5DC8A244D7B03\ +68C8FCE9AA66AA3A569F391EF4037C9BF4C19A7BF403095FB1174710EEF9E076:\ +8C8C7624D029E0BB9F8331496B8D7136 + +FF1573C198D24FB7A0691B8173820C23D2F84A471B1B925B67A74FE91A17C531\ +750DA50749CD1920BC10E32833BBF0ACFA:\ +F76D6A07E1960422CA8478517509BD11E68128DD59A4092DC1D10B09742F35E0\ +9142463439259C5A136DE33DBDCC3C509F:\ +AF358329646F289900BE6EBBDB412534186C0C3997E614C75476D0FB119C80AE\ +42D53B0F295A2C15141D25F3063934E4EAAEBB50083CA2E905F5DC4209619DF5:\ +D5133470ECADC405613DEE0055E6B77A + +A2F02C43D4B9159A23135DA83941AD6793C58E41D1061C5E16B87F0678F6A2AC\ +BC45FD6BD7B2E807F6E187B80D43A5EEF0CA:\ +54679F2C4A14C003D9B36DBB442FDBCC549A89F728AE045BF56A7F206C83BEF4\ +7386FB383571C588E18F1C4C363B954C4159:\ +2892CFF943237F9E73CE5941C7DE9E5214AEE06B5E578EF25B0D3345A7F0F0EC\ +458A658F7F5AF65031D37A20D9B391AA8FB94B7713F347AC5AB5855A6542F0CB:\ +BD1B84BB5053F74D228E2782598DD29A + +243507D287EA4EAB58BD77518A0CE1B55E007C74CC7EE5056329B2B860CC0558\ +41AA7D331F16E262A96C2F8E994A28C0181ED9:\ +4EC40146A26B8FCF4A3AADD1B3F6526C8B648913C77E96192BF447C070DFD929\ +7A054B77FB461E821FFB092ADDE1189B69B6DB:\ +4FA106BC235B28235DB9AB979E7F71664A7C62F417A7330067299E705A76D61C\ +0BF79EE9319B8C1FB71C2F2F37A0C7E024FC6FA17F56A38ACDF7C0FBACE5B292:\ +D18F1AD318C22E6C05912D9AEABBB2EA + +CFBC2873013B2B02FBD7CE364C76DD5F2D4654441EE3DCD9F94293BE51A8F8FB\ +953EAD403476FE61E95B5741D3AD81DC7405AB52:\ +B6C66B387A0105C4265D156FBC893FDB474304D3EE08AF0FF97ABAF63088D6A2\ +D7B9E3705E656EFF0F895C272121DEB9E2FFC36F:\ +6D681CB65CA41C05CFEC4960F3F5F3F0298872A95D4F975C4B6851A44F8485BD\ +89E0EA5C0ACFEF92DF354629D1853F965A8CE67E6C0B8A76909116895A80E852:\ +815862ECF3B4887043C666145C0818C5 + +82DF1F023CCC985D6206C054B7615BFEDF24B2D1467A801A7871203BC685C0A3\ +EC1C5632FC5FAE7124CE06CC3EB62FF6751730A611:\ +BF743E9F687258C81CFE899BFFA0B444F87E04C9C69448FD5344456CB895CF61\ +09847A416F3DBEB36532D7A2C80D817287CF4E5ED5:\ +A6E4E6A72DA0E0FF1565D455602541F82E48FBD2A0C6890C33F260FB0AD7DE92\ +A77813F5616126B361181AF76E5A6245AB51DC7B6EC07559872AECC439F0EA1C:\ +9AD3179B5C322FB487CFACEF57DBF199 + +5C1AC7B74D982C05CEBC5F59344F0B93B9ECD91E5E37EAD7B12B85F1D2DAB7D2\ +2CC0DCB4B8D8D98EFE072992C511CADE440F908642C0:\ +7B1DEEBA9C9FD78A1C89C2447B1F97ECDD6B79F0E2DA3476A9CDBAB386F17582\ +B1AD23A7270754F3599A52EC24180B2CCAE1CC2C50EC:\ +0BF38567AF2104AC31773DA0F604B7D158739B09A0BF254A3B10A5CF5760B261\ +945D8E97D4F69B76D518E811D5CA8E9B0254F6A25D622337CB8825CE13ABFF76:\ +1BE92DAEB9F5905F079A53A2964A5508 + +BBE9F28370C9A996551C5C19212305774B87222CE6E1F6F99725F4FE8D4E8403\ +35C38C5590E11DBD94AC47FB7F62107D031ED419EFDE6B:\ +7F8F9B5C3C7F69B2A484ED8C064255113A923052BE94258E1BD84096310A354A\ +27AF788DED9356966EFA62B0D4DD93F900D9DBA8FB400F:\ +241EA8D3BC2D33DF661568F4C44A34C4B0330DD870C70D6F685B90145BF31655\ +F0AB4286DB11015BF85BA9DC9317B50AF5B277A1C1A39694CF6AE39CF61F68D0:\ +853CE9548BC247D41B6F38646F973A6F + +DC7C88B45E65244DD6F8F3147B01E56D28B616368F0CBA229710A516D6C82390\ +D1A7B43857C7F02AC24770A47EDC17A200199D1E9A275501:\ +3321E398240903DBBB79A4AF2F5793DAFA07901E363FE4258F26D9642EC3F9CA\ +C840C0795DC7B2E70FA5EDEBD2800ECEC8ADCA623E8AB35A:\ +515CF69DDE4E9F2B8C7265370EA11F1B676797F387A6A8A2294FD1B5BC7712E3\ +3D86BFBAA422AC1A9C5B547A863ADA9855F5FD46CEF9E5A7BD223D9AF88B7208:\ +52CB2BA31794B8156F37B26C7B202090 + +6848311D2BF4EB014DC70D6CA324E920531651E057E497FF16F92FEC1B34AACC\ +547BA516C77BE2880EA2C47A6160784DF51E752B8198141C24:\ +73C7312F7DC845D40D4ED52DCF54CC0DDCDFF58384421BDA6CA0FE40DA2BE106\ +EEFC6B0C290003ECD311FCEE924C4B58F61A342E3E80C36A0A:\ +C45611B1632B0F5B5640607909B12F29F2C750B389FD497B53E2FA52DCE1F47A\ +E3396301EB37A9939FC243F5C30DF986C713F4B9E008740FF647D7956E9040FB:\ +85CBFBD82D058BC24D6D4AE129D59199 + +1AA23FE9ED1451366F7262376813FEFE5C0F9E6F1380D4FE1311E78E5820A43A\ +F932181A7C7B1FA4DFDED6A45447FADC2D853DCEFDBA64CBEB56:\ +DA1680F7E9504E44239A8C2CE1F7D2DFB1F0A2DDFFEE822A9FEA7E66FA14A6E7\ +93A0ADAAD0529272BF5209D579542B5CED8D1EE2C38B762FE50D:\ +597457763DBC8FEB019C7C950FF2BBB4F912EA2878F7FB3CCDE8B5DDE3B52B9A\ +E8CE8166257B905DD395E5BB095D2779802A0BE02935B5D702438699135416AB:\ +5D782A2E109AFEE2965393A90578289F + +A3915C3F91218D64FF9B56194D8CF0733C97BB297C08761A671E631F20F377F7\ +0088E5C9908F28F79573934050ED744576DDB1A20DC7C0B6D9E825:\ +3AB87C3CD8EC19EC119E8900BCE7C12565A0BF5FC436B8A708687029E188D152\ +FDA2FD5408DBBDD7C7FFCA86CB08ABFFA50261FCBD40BCC984874B:\ +F3CCC9182D83F5F87A49D704069266B2F72558C677AE71C45C16106E177AA820\ +5DD6DF212B14462500171832E694C3F7D46FF6A552FFB3D824083FB6C9E79C4A:\ +5F6E60F9C0DFD3020FCF185ED4189461 + +4E81F4349A7C9185352FF1FE57719049CE0254621C4C1AE4E5379C318F95AEBB\ +9F3808BCD2366D5FF0FFDE14372B99D8C0E4E5C923CCF744F859162E:\ +F6EFBECCEA54D5ACA2231864D991218312C56BCB326367F18D0F881F42D11E50\ +D58D2EA2C005C716CE4E4B7BC9FFE6E2C929F56E16C5721EBA40F2AA:\ +3CDDFBB2D5225D35EC2581BE66082AFFBC8E9FF582F7D1FA3D1ADFD053CF4220\ +E0D21F803B1A5CD0197E134D117AD04C1BEAABE446F3C62A9E1DC975BFFB3C86:\ +679365EA67280B9E3A4C09806525972F + +B85A036B83B7C4FF91CB7594570A26AFCFEBAC804B03D594F6B4AB5848B12D65\ +1E27945F7C618A94A4009D5D952F06CC900350F149C906275ACC6ED0F8:\ +C467DCA8030C15EB8FB854C7A7E94AAD6014E431AED39DE299A19A2029A5AB07\ +089B030ED15C837618958C0C2DE842BB4F71AD46901F6C3D0DC543BE83:\ +3FA51F16A65294B2AE00B5C54A4F50B93B33C74B8A3E49BA1ABDD247B003F831\ +8528C53203968C2031D447432EA0265053CA6CF68E3A8F24A2790E3FC5461AE6:\ +A2AA2FB62C3236218015F9C276744187 + +6612182A789ADD553AF5490542E4F86172E1E52230D68F2AA40411104CCBE58B\ +4F5DEE2EAF0663DA6964E4BF96BEDD13D38477B1963E54F5F704ED46FB0E:\ +28F5EEB48A13E47C117C85F3FD66DF79FA6835F6633AEE6F02745CA6AD639532\ +2F9702F174487825F577934D54EADB6EBDBEADDD708F831ECAA6C2AB5862:\ +FE57C8D7369A1FFF7187AE124FA873C732A4439623F53D5B3D14383BCD48A29C\ +2B80F6A617F02407537A1809656CDB008989C44590C2B2299B608F5085BF1FE2:\ +9D8D82534C5EA4FD304980B1382D54A9 + +4FAEAE77D04AD3E836759258F437F8978958E210E69DD8FA6919C0663D654FD4\ +C58C4C59B1384469576ACA2420FC912696F0611AEA03297601E433125DF809:\ +318BF89443B7348EB32F1DBABB5E1ADCCB436E3E353088740CE729E14BC6848C\ +B08A602F53EE1F21FC03D868891A537B805E52B8B4979E03AB97746616ACAC:\ +AD3703990E0B3643EE0DC3AD77C1085E927E0F9A190CBDF3060681BE7E0B25E7\ +6AC7D43495CF5501C9513F8FCD22248A134A9DBD0295AD9674EEADCB149405C7:\ +E07166F0400A8ECEAFDD70E2ADFACE4D + +B94FF2E1D9BF4D42767047EC3FA55A84CC17C153E5B437B9668C8AA663B87B97\ +78332DF1C7686850BB846205211DB4D6EFAF5F4A4648268E098D9C0B8B87016D:\ +BD88EF97AC43746D688638FBBD64AB6AE61E40836B7847037507F67AA7DC00C1\ +D1E2C09BB701933B94449DC952B146699157AC02D64F506DFEFB2A0A93DF8C3F:\ +99D6EEC22AD27ED24CC9FA9CEA3F5629F62CDC324984C068F6654266752870A9\ +FAF5836B6AFD88ED3AF16D39295FF9629F23D0CCC7BC591058F51D52A70E4363:\ +E50E8FF77980A319D57FE313E8BF4A66 + +8A7681D3D79C9AEE5501FBCF56F4FE95B97DEE4895C3353E5ECBEFACBEF0DB93\ +D2B910671B60763CC7A7D3A4B8ECBC740E25BD06A8AC2D9243D0CA789E7680B4\ +23:\ +90501B65D55AC072BF345C449F999BBB0869064B8370675AC97E23DB3F393E4D\ +A98815A23AFAC4F94AD8F947090B6086441F6D394EFBB24845DCD941B98C17B1\ +70:\ +251E92FDD914EAD37144154697D3CDC0E2165FAEEE4ACEA216154E83BACBAD25\ +191A83BB8207F7B6C69618AF5C07DDD6A7F699F8EA6D3868DB38E2CD6E64392D:\ +664A67099997F33E28617EC42B758767 + +1EFB114DC234795EA397ECEC44DCCA39B40D6AD3A109D86033CCC719A447A7C2\ +66D5D32E9A7EFD5A1DD29243B2C82A90DED0E847A42A03A31F58A9D6AF12B1E2\ +B0A9:\ +2517175AEA1CB6A6E8458CDF2F9C03BA342D3D2E393D1F4B0B38BA716EF89E4A\ +9816E6D5B0CE76C9B578228BFEE1DC258CABF7B598A3AF03661AAE55DEE8D0B7\ +91EC:\ +E405257B7EDBC4A3C23386FEC7C28FEFFEBB62A295F0150216A53D55B4AE3A44\ +06BCE5AA211427C0E93E3FF196BB57B985CF5A5E96C925CC97B659B36C5978FA:\ +B8A48894E3651832B555924C677351AF + +4230874B7E9F676A87F3717BE8A10810262BC43CD63977978D433FCC74AC883E\ +06E7FD2BD6DB3F7B967DEC732878E580E55BF49CFD2535794779DA4BAC5A49E1\ +DE301F:\ +E74F4C437EB7AC14D15D8622F471E85785BBBAB29E91EDD564E235ADE5558959\ +D93497A2A7C77DC12B3179B48E2F972189B9A45E251B089A1FD390A8AB12D5B7\ +3530D0:\ +8FB60ABB22FF4DC7CAC8564C615B91E02C9F2325DCD6AA9FD73842F1531B908F\ +C26D98F5BE709509AE9BD49B405B92E735B1121FCF9AAE3D35EA3B53514F7797:\ +AB83433633A0BB1D893A3E4DD60EECA4 + +234A9F7E4FCFB807030F2EBC22E8BF5B13F1ED9F18A9BE48D5FCACAAF5BF360A\ +8FAF99FE464A7533F1D5F0CE9F769913E1A6D6F716C35FADEE60E2F0EC8DBBC2\ +CD7B1D23:\ +BA562E05F090F443867B73995EC3944DB57AF5321B5970B0AC88416D3B385E0C\ +CB8D2FC1E65B9561B05D2CEC32A42CA4C793F725FB974DF417DA440D0FDF77AA\ +C109FCB5:\ +4399B7D0A38243427C7289B3670464F8F98A073AD43625126FED9F58E0C8CCE9\ +CE04BD0BE7227F7C49862126A4AD12B730BE3ADBD950568FCB1E35017062646E:\ +00FEDB8FD80D13375600B5A4BFDDD16E + +78EBA6537E61B5FB5E0AA23E846AD8A82D5A025EE33E2B41A10A33B3D959585C\ +518AA13D44C22196A2EF155800C6A59F9835DEB84F4729D711DD67E9F904FA89\ +EFFB4C4FD1:\ +EE67F816C0AD3D8463B2717F6BE5380E095635B1B7B012F7341FAEF8E0DD9378\ +CBDAF39280717A6BC7BE899EE392ADC6AD8B51C22524E42B3201DAC4190DFE8A\ +E930543DDA:\ +68A7CEF97894ECE9C5209DDA624DB66B94AA787F754ABE48D8313F63B44CFDB1\ +6894E32322D3220C5AB95E4C41E1D92A2AC1BA241F9B37430D6C7157F618BFA8:\ +F7B37973DEFE48BB5D97AF65493FB2D2 + +5214D5ABD972A93398C1B42F6F01D3E6EB2DA81F05B93E3C2205DC63633632AF\ +C9C0E4D1FBDD06742194F0E0B4943F33DD3A00B8DD86EB9AD51B88E236567C2C\ +8DEA51535DD9:\ +5333EEAB97D891F648853CD99883A88E808427F9D55D3F9E13BD8406C61B34E9\ +492B02C19886B87A5FBA82F09FD86452CF9168122D7D01A8FA8A6CB39F7BEDCB\ +3DFE26007A3C:\ +54868B0E7A3981DC9445B3E12CCD98E212E91BD49324C5E7D05EA30C3784F33B\ +676AD02DA26B733047689B0F53120F10320AC713DC5A1CD8C1F3DDD981DB00A6:\ +5C90CB0E56FA07471F9E5CC8011ACE2D + +06C8226B0B8371FB2273BA54100CA17D21C0731D136F75D1AD265C578137F474\ +62805C80BE97601DA8CAEC4424959FBD36E22EB4111E414D92B4E87D450BD26A\ +6F99ADE217E4BC:\ +239C95E80E86CE6D2E4418470D0E6A8B0FB31DBC62C525055A73E4F1CBD3649B\ +652CAA386798A60BC8FCE0F8DA943EAA8049DC99C70D95C5864DCBFF171C0D92\ +2E95B6F6B6978C:\ +BBDA2A40751D51E4BFCEA4B3C182AC2EB0CF036DA11DA804B7BFBD6CD1A2EE70\ +FCA18FF3E7D6284B9E129664095D095DF425263E2249BD0CBFC7F9923D80FCBE:\ +0C049895133FFA08C805833D527A1C17 + +2CFF692A648482BA14A363BE84AFDE0F16C144DC2963804F78FF968EFCD6D88B\ +4395A1EE7920608D09A245FEC4ED81CE208046F84D230E1679FF0ABE17C54D6F\ +32D0E72AD9672DFC:\ +7EE68A642B84F28DBA809F5C28E250D3942DA8FA013C7C6D0A917720764BBE25\ +AC943041E47BC27E54E3BCBD97414679F75C3CFD6C9D5FE700E1D6721ABDEA30\ +472920AED086D76E:\ +ADC43AC858C693FDE13E931DF4EF45455A337805456DDFA82C5FA473652182BD\ +013B906D6DF6453D5534C303CEDD067AABFBF76EB4240AA5B117122777DE8883:\ +C3614FD41E162C520FBCB77AB47DF3F4 + +8A80B592D33E545DB579B8DCB75B1BD90ED588A3E924F91544E34837D36AF75F\ +6BA032D5C4933947AD375E76C6341738EF027320AEE95DDB6A13C187BE064A93\ +5D58756D100CCCE6BD:\ +357BAA66BA0464C001C1125D4F641DC9438E8EE56AAFD04C6F37F1EE70B5FD8E\ +AF364A1740A32E8D0D2ED3025C2C6A17928C9408456F3B5A784B1F0D0897B310\ +5F21FC5D57C929A730:\ +59278088106408777F2CD7793C7D50105027126DED275EFD465DB3DD9D68DA47\ +C22EFDAD216E508481B1467E08B934571E1C59E2EA60358423091972D62CD128:\ +D83A06D830FD4DF061F8D266158CB912 + +059ED050E8D00B3D602B6AACE7D46745CD4A38FD6A870FC77A81FE909A86FA3D\ +955BD763C644DD5B9D70B0D41EE1BD09ED91794758FDA6E9B547A3E7C68B7456\ +B4A680D673A5D82D2D45:\ +11DB33755520F3C54733FD6F413899807A4D6755B140E50D8C73AA067CB94ACE\ +55DFDEA22C576B3373290C50D2FA8C946DC27377D69E6CF65D6FB02EAA00A79B\ +3B40DF79BF43723EE613:\ +DA93A3852F02F7366D9643C1B576678DFE78161B6DAE9D8F20B6CD75D51E9709\ +493E76F87D0C6A11C8BCE3378F058C44A9A440A5FBC60DBBBF5217A53671E5CF:\ +1C4A77AE23392121FFC99E9851A197A3 + +B5F5508E02190B1467FCB3B07FD1D475DDD3EA124169D31AD0DFCC0E245734B3\ +4839AD37C0B204363E62F922F31CEA7C588E576B7CF5482C7F95DA81F2C26D17\ +E7169D52462B3BAF4E9690:\ +D63A3673F958971842DB40A48D5BCF20B1C02065750A30990915B2F95F131BC3\ +04FC3D9BB330F6B10606FF1B308E46050EC2252414E439A97E13F50348C6B789\ +044D579765CE58F8B7DF4A:\ +82D21F701895EEAC47E72866E78AEF8A3D0199F250027225F33F5A4A5CE62AEC\ +E808B34F8C9948B0E9740FC9649E7AD11D66DE12025B05FD60990E0976FDF0BB:\ +517117640B8C35E5172D3F968467FDAF + +D271157E98D0C9F8CCD732C971DA382ACB196240C3BC619DF0F50A5C0962C834\ +E5F8A3DD1A9B1B7CE5606B0D70BAC6B706F720D850E8CDFE701EB760FECF73A0\ +03A89FD176DE7839A8E35511:\ +EAEFBF1F37F585CBC6BA595CA7CBE2549A80A42CD24C0DBEF325ACBD3FEC55F7\ +72F42DF254F75AF75E8288F38CA6A0ED420947C8526B0FCA42FCAB2F1C72400F\ +D57958C6E459B8A2040713F7:\ +7C969F67ACFFFA400E8FB8ACFE15FFB497C7568111745AA3B253478593093890\ +04DF1E681FC2D20293C52CF26694B00BFAB0AA144980942A8B40A96943180E12:\ +45F487446077B94F9A60FBB4BFD193ED + +BDA47D56B2ED81452387B0720C5C8F03894DA74C549E74974897E50C717C4195\ +A328B9B1E765D227F207BF556FECC2B8B291FB83E925901CD7DFC71C70CAB13C\ +C285D880E823C0E7A638B71BE5:\ +ECDB5001C85CE86347836423724D92666FF5D9853D75CC2CB185A5D3F7F7AAE9\ +4BEFA01F0757E62C66AE8E37F53E9902931FF053A799C7866B5CEE5C37D468BF\ +6CFE040D9E2546107C50425901:\ +A16A48F88A94FF148D8CE7DFCC6165850FBDC2D218C4D7B5F3158B6D1E82DFA0\ +968C72F6D92635C9951939ED0C001700EA386D5F603270FA8F71EF1ADC700E76:\ +6F229479AE496EC175A4B6E2B0D15269 + +5CCACDF79AE2401653C5F849D4CF93E906F0087E0B22789F3984D244E1EBE94A\ +9BA7200364AFBAC2577513ECF320CB80767A5776CCAF2614B73689910CDBD481\ +E272293121F4874702BDF186FE83:\ +F649D325261C63B0A0FDE9423F5946B42607691159B363C8617E96CD9604F3B2\ +16C0524DFDEA001392CEE80EE08171EF0743E3F1D1A43601D3A74D06E1625074\ +06DFFC75436E7579D2A821B2A0EC:\ +5A4930305D8D82633AD8DA1766AEA6637B75620AD0BA8AFDD56A9C5E16EA1706\ +AF396F41A95FC6028AF36876D9BF447BBDAFC53B172358FFAB3F56CEDF1B9F8E:\ +F726778E94B38938C9812EBEEDFB0B03 + +74369DE551FA1B9E11CDBAE0B6BA6001186651EF911FBB16057C407BB41B0CB8\ +A41561A6F27DB865669D388CD3ED5D973EFD9C419B1C57F7783E96032313160D\ +4CDA67FB780A8E3D3D050AA5F9A367:\ +E6FC9552C33EC021204A1130420D235A486200073044D81432D11425C2349973\ +4CF3C50E1A984CE551F8CDAD58A78CC912D1AC1AD7995E2D90B7DB1F6573CF3D\ +BD69F0CE83802AB3AE158B5E840FC6:\ +DC5B30C8D64DC4660AC3C12FEAB3DAADFDB32D6933704DC99EAD9D7674376557\ +50A92F0946366591427B44A9D0B85C775C5AC84AA8F046E90997722D16B8C5D7:\ +6519A204A9F70C512C7BAA559D33A144 + +084222CF351556DA67ECA0573C732D6644276417B4E354DCC2D95558793D39A6\ +CD88E30D1B6498E259645B6BC96402124A1431CE496F3886DCE89C254B5F7772\ +8DBB5B00EE2F72C43BCAD6DF403BE005:\ +8C2CB2FFAA5EE3698F3F6A6F643E353F15BC289A6ABD49F80CB182E486DC5459\ +B9FB200EB999C183DB0FB73F7F56612635368DF4B0ED15CD3F66AB25F8D1F50D\ +667062231D117A6E47333A51EDF0899F:\ +682BF9DD19D9AB5EA5AA153FEDAC8A39E7D00068A45E2284B7A8D79F10A773B9\ +57768A3EA33ECFE9125B8A895A8822E94345909F88E32A244A2BAD6A5A5164DB:\ +D894D0F08227AEEBF9C3E0B57A8D4820 + +69C47340932A673CE1C038C2BBF7552800E0913B3A259633D6F1AB794B87A8E8\ +3ED88AA3B2A3C97E431316CACE38436B662F83AE7A1A3E967F4F88ADAC5B5573\ +680CC16700CE54DFDEDD0566590E743C0A:\ +BAC98D139459EDE20320F344A88DF6630F7CA91379AC5E5412A62350A7842B63\ +7A4E7CF2CAB9D57C072E2427E3DEA7115BA201C57931181EE3E6FEC90216B221\ +3B309A477DF138D65B10FDA75B3E87052A:\ +26CB295FDFE6C6F5BDFEDCF54364F0462BB05F4350DF3405EFDDFF3C4D151310\ +3FC9785FD4EC4635EAD09BCF481AFCAA0B3CDF3399876B8E95BC000D7CEBC853:\ +6AAF5CC4BEEAD2DD0FBE36B28ED921DF + +831B7700CDA1CABED51C0F73429620EC1B4E4FD0A06F15A1836C9248B7009E2F\ +2F3BFF094B8DDE74C18AA00EA7E9439406B93F8394CDCC2226788A50D46050CC\ +060AE597B8D35A5039999477F260D06A25D8:\ +C74592FBB612709C89DB77770295EAA61366D18FFF8066321EFDA8C662111132\ +7FEBBB648516F0A29C918AF6F071D22BAC307ED5B718EA614A2E6B7CF4CD7544\ +E6D674B4F5B6C46A60DE5EA2CFA6C7DEE23E:\ +6F7EB9C437872599AC225B81AF4D3E0A756879FC1E28F1C73682CC1029006B1E\ +BD44A387B61D902FE074D6A3DE3638C00F5FA5BC208691AEDE541CA0D391DBDB:\ +1A44D89FDC6ACE155B4BFE243F10DE8E + +33789651D5555B1E0471B658F4F27FDD7AECDC0689C6E7264A16686A36298AD5\ +75796787C2583E1C2A0014CC7E919D7B8353CF17A757E7CA6453ACCF4D7C308B\ +8028BBADB91A77025E70C649FC2C04F83CD40D:\ +2F2F1BB3237E681B358610182AA49093FC5949D1F56184B73C449E9C4A7B49DE\ +F117EF4EB4470742B641A5015C394E0DCFCDC615CDFB611D793E33594E8702B8\ +F10390EA8EB88C8A6BD800C599F4E51754E287:\ +706B6A96E33936778E1BD03F76670296DACA70F85C5927562A871DF2BD72FAE2\ +01F4649E170EF53B3D1CBFDD8A5837DCAB2B696888DE28915A05A42B06A205B9:\ +9AE3D26ADCF9942E551B8C4507502DA3 + +EC92A03B6BEB1ED3778FE286D67218F04B08A5D959650F4E71903395E03EA0E0\ +E8D4CD71239B11B76175124E12B02FA9BCB4FE8FE1059FF52A8ADF55EFF45DB5\ +122C4ECC491112CB322577357572755BBAB6641E:\ +17A3482630F3F60ABDA71B0E5393927AC76DAD8A4E682040CFD11BBA17F886BF\ +E7017783962B9ADDC48C19B4BBB4DEE2587C88AE14AB8D177494E7FEF799B576\ +44A141AEC0EF5F94D0DAFED9F3FB52F3AE0ECE14:\ +04A04947CF609691B147C8E066919D66213DD476F7AB32CF7A0E8AB1BAAD3456\ +54567CCECF2F047EC9D231BD6F10FDE57E9BFAE2B49C83275346237C84597DE6:\ +AE5685B285A841416C31F15143C0C59D + +CEF0348281F329EF6DF71DFE854E53586FD4B45285C4CB43A53C3DC9D50E60FB\ +61E1672BFFEB8583D347094456BC36D7BBF7DF768B3D5BD3BA6E776DDB1A3DCE\ +C5FB7D141412310D0E351FD48EABC2AA3BE8C8B0C2:\ +3F69A54E80D8B2AF5D85AF0347A64ABFC4482F41BEF98130757E48181EA41F7A\ +51D4BEF271B689AA66BC05AF745F9E85812C5093190DFF5B68C2C5623898AD60\ +4094DC589A1875C29605B92524EEFBC86E2016982E:\ +750E96CC7ACC6D0C1DA571E789A06C6DE785C8EECF85D8A0E603368FA5CD85AD\ +1ABA7F2E637324E5049D4C4AB34755AB1107232223CA6EC5DD79EA8B97910CA6:\ +6C5ABD43FC283BBC97F077A652EF5E81 + +82EAB935704E1FB44EB9218DF21EFEEDFD13B43B4014F03C9CD455E325851158\ +04A0ADFD1CD1D8E77439B355645807EA1C3D16187F6F64EBAF06EB653CFDCA86\ +950F26E92B284EF33AB0F8AC41324D0908DFEF079E6C:\ +34B61080088B2E6DCEAD63C9862F7544CA06B8D79F5A7F646663D040EF680D89\ +30521D1B0A798601365294B22C46F61EF120BBF9579FB9078E0194488CAB18B2\ +DDB299C062541EE99F0DAC83E33264B5333DB8542178:\ +D9998134F50ACBD6A3420AB7A4FCDCDF88C23F16DB056E96100864FDAECB8137\ +748145886DA377A655A24C4164DFA69DE49A656396B3FF2288B912BCC755E0AD:\ +0979C201CC8303344E382C4C569D031E + +67FED42EF9AE9A0046C28BC51197B0E2E545C60506D2109CB2F6D7F6BFB638F7\ +7FD2AB8D53927EF279C71D7BC04AEA3D39EB5698CEF1CE0E57F91D8496D001B8\ +A2F077EE7F7CE7B687D7091242435B6576D4CBEAC7B03A:\ +52BFACAAA8D0DC7725BF5435AB9260B2F7F073CD82A9491497154BA49F86C821\ +AEE98D6D8D8EB83C26349C0E9DC96CA898BFA28EEE52E5531267E7CE660FBD88\ +BA22F8A493435ED4C2F4486F064EC202BF76926C674723:\ +9D9BBEAC0A2C8E4795E73B510DD55CD2E720F0D1E9D0118E6FF630C7C601922D\ +D977CF0E2730FCD5E2D8A4BEAB437EE498B957E1CC828B59F66BE4BB60D3B264:\ +A5F56DB37AEDE6718159969D08165A76 + +D72987295C9A5D94E9886D46B87C7143D092492C63EC64C3E21965E8CCDAD257\ +DCF359330F96AB8B833FB25913B887636B9577F8B2101BC53409B8F6BB504FE6\ +2920242ED521B9A718AFEF485C1E62862FA83F8E28E91BF1:\ +DF342A4DD0BAA08CC0E18947B87EBDEEBCA73020CAA453EA3E84E797101D9057\ +865949B7DEC30CE8BE48A5B5B5E833732F1A8949EAE503EB4D2C443E1C5856E4\ +C952ECCBA6AAB538D30E53733CA522B8486D545DCCD7FCCD:\ +294BE26313DB83B29C4B8D9C73CAB785B355720988387D5B228797B4DFD9605B\ +115F97EF2D995CEC01600B7CFAB6A52091413D59575A2C2B9F51A287C77CD824:\ +091E39C65CFBE2F0AD505FF4ED63D143 + +D341BCA45D3074B2B3FAED471D5317ADA625531F74A8A873DFD7BB369827466D\ +623E5B43387AB0119634727C4602B35E0DF357186979827FF5A683AD3F21974B\ +104F59416EA0317F911416373328DC9899ACE1B9E83D62E66D:\ +012F2A625D71B3134F02C097BB85CC5C51A58CCD1B99D95EC008E5A055B6E096\ +2AF2A560FED8948C72AE2E63CFC76D8AFAE95AE849B2C3BD43B1689150257868\ +70DD16DA61B8E0EFF025DD0E68AF89F26067F1DF6B0A81310D:\ +851867621DD8F9DF3FA677494C2CB7DAC785F0ED8CF176BF08522D765408E42C\ +F01504CA8A93D38131F26A3AFFB3090312D60EB378D56AF2A06C271B7210A492:\ +09E2389F3E337DCBB665CA5C34D4B46B + +8A243340AD7968077509BD363266DB666623A4E1BBD2DAAB6DAC8521971D0E93\ +247ADE3D67AF23831EAAFC9403FC4AFE839A6CC9216B51568D3D264956372401\ +F7170B5FBFC0A8CB77706C9E35E6F80A6CB72063019379A4C235:\ +18706F504AD99D5B571FB0F6F31F5500A1EB7D46D766601E32E6FC45C094EE5A\ +6A1B8F7D10945E841428141A011FE3705AF7D4DAFDDE51414196547E07233140\ +95D2D221A57BAEE5AD50E4DBB5AA09100B0DA8D2278474050D66:\ +AE3DB29FD329B622362FF2A2C42E9728E2375896A4C157E45779E6E0A0DB280D\ +B9DDD0052B64190F7A7A9C00F5ABBC58402FDA12137833352CD9CACC6CDA09A8:\ +21AB5C631123C94F3BDE4A60B9F7E4B4 + +EB1624A74A857410F3538673C4D2DAC096F5CB949189984EE11848E784CFCE39\ +E96F60B8B899B647147D41C042E15F8250DE0E1F452F85E646B83D690A5B89A5\ +27ED998CFD4C3781CDFC812811ACFAE0F1425E87488634F8C474E6:\ +351D90C548894DCF668AA88041F06921F4B46907C250DFC69188C10A349CFAB6\ +F2659DE30D446CC95119B73FD8971BCB19C25870BBB8EA51D6FD956EF9F48EB8\ +428AAF3EEEE5C81BE2660EFF821578B99FF23C84A7611812B40282:\ +67748D70D9D72E6AFB14C2819302D08EA6F1F23EC8ED0B75E03D03BBFF0C6534\ +B6F0F5E50B8707E88B188D60529360026CF4BBB803E725B602F3E8C29EDDEFD9:\ +C8AEE1890BC2ABFA6EBFF88BD0AB56ED + +629181624FF121CDEF99AC7DFB9F702FB449DE66D55EE3502CE7FAF173FAD167\ +7F5FACDC888D91848F2786405FADB0CA680D1F94491690DE4CDF83EAD2173557\ +532B004C7D9922AD49183CFB0267D5AEBB57CFA0BC2955B38CD03C98:\ +BF0F45F87DADDF20472BC84B0D7D3E9EDB92E26B5DE9CC43450ACBA61B3F9375\ +B04F507C6DA921CC84C77FFB221BCBCAD69D57E340ACE5638F734B95C0DC4390\ +58B294A62E7FA80A5EE46427642925DA4572B8B9E6A776651CC35F61:\ +7F807212FB82AA3373035BCF85E1CF33992C660A3AC0973A42D8A772F5B773E7\ +9E9FF4AE2AEAD3B09F69415237DB31F4A33EB45DA361C95281BAF1964A791740:\ +3DC98DD398E67B7F91F55697332D8BBD + +9C09CB230F1BA4DCD7272B14661E7CD5A6C0C5B7FF3BD0BE7BC76BC6149871AF\ +4B5F2A0C4206B9D1EF68EB0F7E162105B7D50AE986990458C0721C9C9B8B3344\ +D232B393C0000C37CA01D6B9B854F49FE3CDBFD98BDAEA96018EAA0F96:\ +DDDEEF2D8A91835CAF279FB19AE5B0F73DCB79F20FAD9129E50DE85EC29398DD\ +F5F9DC74DD5B14A96C98F35CCADBDE84FF574A974969E6904648F0D07AFDD36D\ +AE2B2F205E25CA3B083456F5B332D45C69E9CCD96F88B90806BB3DA79E:\ +FBDB72BF24E41373E79167E690C63CA97B8E6E192BF257104548D0CD1FE75AB9\ +7B0F3C5AC6ED97B29D50D1DD50EA0D6999DF74A5F172FDDFC1AEF170BFBF19B2:\ +DCE436B817B5ED491A1A20E507D73F98 + +1B243FD52E890B65E47EF25CA9569A37F64869FB300A11EFBA3D04410DF1BB17\ +5B60A70F3255F45F8601EC2F9AF009D40C4D72E1BD295F9DA1C83B6D51306033\ +89E009064901300ADC5665B3BA2F62AC28E7C81E2319361FB4F2120C2C42:\ +19464437BE6486CDF6F24A75A229E59B08A640B66C41687B1246A84EA6F98FE1\ +ABA9AD430BE7D068D9BC59CB5DEB99EF69103A960D3C4E3CAF9DC3FCBB6FB61F\ +7F618901E6885842BB8784DA1F4F27C6E951B5304EF257470E6375D92527:\ +F7F61A9D1BAC2441D899552BCFBACC6420A8BABD2D9F2380BB74872E7243EF64\ +FB72185FD13B6B8D452AF2F59E7511662D2AC085B870B092138CD8625D3C54EA:\ +C2E32CD00AAFD581B8FD1E5B0768144F + +DFAC82EC8594B2E18CB607ACE5557D42E458EDDC939014A0A6060DDCC862EAB6\ +686E00093965DA2B9E5BE49E2ADA0D5568C0485F778F079B1CD732575ADC5A29\ +97BBA8DBB4BA84554B82434EEC14AE917C893F18BE69B02BE06F7822B90C0B:\ +B7B20B0D001B18707A5E2D9C99DC0A0A7AB212B80E39F04F00B9BF8CA3FFEB05\ +EEB3B227FEEC1C8F5B1CAA66F4A34CDC3E63758C32CECCBCC94B075719F7327C\ +FC119DB7F19F598A9E607AE1A05F6EE6E19325B61BD5EA4D2B7F492106B4F5:\ +5C8934050FE41218671234025E0A587E127ACDCAA0838D44BBFC877F719FFB9C\ +27F82D0DC83DF3FBEA9E18071D5FA9997A10B008C77C316327DF58BE6A5F868A:\ +5BE1AAFCE2071159446CEA40C0A49F72 + +30975F60F936909D5E92EB5246D966ADC490D89F3E332C4157C7C69A3ED6C826\ +EF3920B7183352CBE3B43CB88BF14BE089A09EF80BA23C609F2BB74B0DB69567\ +3B7EB758DD32DAC570F25EAB735996A8AD74006AF2FF13D8193F16280D41F71D:\ +BBB0A917F466E47943E5AD9F13D0A964A511FBE04C51487F8DB4AC86B80E4793\ +1787EB009974C270E9CC1752D116E8F89F6F8F181C636D106FB32C9AC07DBB66\ +D8ED8A482C998158924AD52814F14B8DE53EE8F262C7B1DFBFF8A02D6877D760:\ +56D33F5BDDAF8A57724F7E6447D1475D16D413F38D3F363837A148F987550695\ +EDBE2E27E40D37822E2333854DD887A533F643135E3FE431A05DAE1633829EEE:\ +EBFEF8C3C762AAEC0639862FF14FBFD2 + +75CBC9C2193E6D6C05D1442542B93D4DA1060F73069429D4B163B37CDA9C68DA\ +EE7EB478E0D13E1BB875D736ED6D827A9260FFCA15CDC7751B30DC9CCEA58EAF\ +39C4A2E663C2F7868E0AE87320604DEDF77D077D980948E29CD9297ACEFDBC34\ +7A:\ +A01AD8C32A56A58751CED48857DF006CE408266EC348D97489D86BD41F218F92\ +2E2934C82110EE355D9AA46D9E72C914A6596311CE3D6BA1A156141237D86B45\ +2FC89D47103E2AB79CA7B808799FFF771431E667418810B4385F07BD73055E64\ +FC:\ +C3C463811FD88AE0A7E63B73383ED92FC6D1D86D8B37BF9F24F54E6FE73096DA\ +2175B4DB6A37A3CA7DDDD25E0C56C4D2E98A1DD4CEB26649BFB50EC4FD40AF99:\ +AA54208D82C19213B61C3E6C9EFAE74A + +A5B814CBF93E5DD0D4EFD2C2697ACA8031350C6C0CBD4A7FEF33C51B95CB4A0E\ +28AC2C84A918BED457BE10BFD63381D316A25E13BDE0E79DAC0CC1943A11E6EE\ +11978E5F9AC7B108AF3548CC3803F26B2CBF3A80D02E4B5FD5B54742CDAD153E\ +B3E5:\ +64A63A3CD77B0AD9599078847A582F39571BE1AAD402A3EDFAB7BA1133B1A9AF\ +B2F49C0ED992210CC563CD6940DB34D46EEB1F38989937A9C92B89E9E5848493\ +3201A3208E526CECB6E89941AE5EFAA0173A3DBAFF77B4437449F1C9E14D1726\ +1048:\ +D9DA279E61E7D511786DDCA2BDFD285C9DD7739FD35D4EB4D89A686757005B3F\ +F28C7F5F3CA3DB02F104A8FB59B14F3008D6040AF9C8C7AC5CDE9626BEBE8402:\ +2049B5853574A6EABFFEF270C437550D + +26C813AB4457B48360A7A29D4B0FE64C67CD5D119096D2D44FD0A2515FA34862\ +6817CB4A039A9D707C717061545B4BBD630E9F5338E3B970E10E063C8BD93342\ +9A0F9F8D9CD31C55B090D68C99D0384282AAC273E197ADCB42587EBDF600D321\ +C29293:\ +E9D3E28823341923F6F1909D70E4F0D032AAF6A2C93D8AE9FE28AA26700B41BF\ +1B1BE7820F177D21F59FDC1702D149C6237B9F101A1B268AD617DAFA91356DB4\ +526FF9992F015B219C6019AE4F2F739FFA3EA558C78AE66612BEA6F8448A3E73\ +19C597:\ +E015CB4B3E1B95D4EF72910B9562CBE27915F3C5E46C76BB24BD54D9B72A87A8\ +B9051830D658DA4B21522AC9AAAF2B7E0C2FCA4EF907EC5F6F91CC6D78752118:\ +1695DCF0E5AC925C8013914969DD68AC + +F0E6108D8F632FE6824A56993FB7FFD02E02B57BD0CC18AA9F62B06C2F5F8AE1\ +46A5095A9793D49187BCA5B15B44B9EE97EB232D372E03E5EB3668D1A832723B\ +BBB1EE7798BDFA223B5B637758FC337A7A536C33365039748DA998AB12212C4D\ +C4D2F784:\ +F5960BA1E179155964114C194B78402E3E8198C6B4B82DAB7F99811541BFC101\ +F9FE56BE611E9D6AB98CF3CBBBE0AD9E5D139C1A0EAB0B6BC5B050528C9B888D\ +0E78B1622192189105D44350895959DDF4CB71F8CCCB75762201C1BFDD553435\ +98F5D483:\ +5E48FFFEBD528D21913555E3B68BCED994B23347A9FB7BAD69CAA3F920C08D0C\ +126EB5137A7AF1C50538F83DB3F1AB8EB600032514A5C1D301C3D4971FB59B26:\ +8423EEBCB184EC59ACFFB5A2A112B373 + +5DEFAEDB9EFD565E940C8FFC884B57EBCFEB9970DF117FED5D06ECDAF771AC7D\ +9D18E5527759F3953A365EB030B5A059F28D07F551B405932F62B1EF44341888\ +2E893FF9B7C798F9F5942B383CD67538E421FFEB75E5743F23CBCCF2719BCD99\ +E72393CA6A:\ +8967A3CA68A3F87FAD0A43752F3CF19127F5D67C5AA3F69DF5F60E1C9232AFC0\ +F2C7670C815DEB04147311C90AA57D5E1AAF521F174076891C82C5EB5028C3F9\ +A11390008B6C8D15E26C6B877AD50E88228C2059A3F915EF0AC7CB9A46F3D84E\ +03D91D04F9:\ +A218FA2FA0B5EF6714C067DDE8A65EB1A93FE5F814736407A93054622EB305B0\ +C8377FFECE049B7B37587083376FFDC5A2CAC4B2FC3E057AC83DC06C66196943:\ +7501AF345711B4C4A22B5C98D3F4F40D + +26E571A17404F047BCDDAFF7C4B2D2FD401D48CB817B0D91D5C7B47EB297B8EC\ +01F0716D53B743BD098280858862DC9D3D912C6EC730B5F2DD4DF55603D082FF\ +88257DD4CAC3317B41A8E664B2CDBD5D010835341A0CDB6B5C9DCE433A2D4608\ +E2E93A257C83:\ +3842B0186C89E3B823E1C0593DEDABA71C8CD81A3E338525233EBC1DFB2A1FA0\ +ADC1EC1836621852979F1220E28D90390B742F3659A34469600852DFD6ED2E43\ +85D5096A936CEA2A5B1458794E2E517A649FF99FC1DE7F0BF37E4B872BDBB217\ +484094A3E4B3:\ +B32E9B7D7C1B73EFE7F06EEF09678BCCB2079A79A5514A59C2C6C72C874AEAEA\ +D7A8D8F1554E216AA3B78C2F6CDEC896DB75FE1A6793CA6D395C39E44572D546:\ +30EBB2CFF6430058EDF5C8CF536257AF + +42E149C0E5314F7EB1A6CBFF095BE9AA6CB2117F96B8BA8993909FA01CF43D18\ +CAD5A559EF4BFD36A51D1A067165F4CE0DF560513704FA796F281F41D29366A9\ +A60ACE6D38F31E635BF61670EE89577E8B6B1E0A9D530E038E42647D0A0CAC80\ +706224E9A9A1E4:\ +738D56C272FA8B3D8C726645F7984EECF4318AC2FCE8AA7EC09D2ED7E25553AF\ +AE054DFBAE97305C73AA33C642B00E6548AA60FF834C0EF9D6EC3624A958E21A\ +A146A8AA636C55E2E4A0E84DD9B3B0D92F182B3D41F1784B50998B0C82A13370\ +CB013440124EC9:\ +373CFBA5AB9CEE59C7A2373C04ADD01D24505791927112285C7D0461DBFA6FCE\ +0ADF12DF44E9D8C46685D7861882CE1B01C903665A10011B51DB89D338F759D9:\ +A9B65C943F17BFC72C2581DA3288B6F9 + +C288E33D72941F41DD1D5310CFD541C6C07C8C8D70A7FBBE33C9E4EC940CF0CF\ +42588415CB0DA37453D31A46EFF7B4983E0BCF14D42410EA6C060C86C9717F9D\ +094A4649FD0A3D4F4F9F255C6B37E3F31925F12D48E86D102DA00B8F5B9E2407\ +746276BCF1864EB5:\ +D330F79E61AF0EF80088FBFE806D7685A7330A2B2468213DA4C2FD6B86759AE7\ +448FCFD647BDEA3C0247F4F9176418B62CADF5B9EE6F61682DCFAB82741B77C9\ +8CFC42FEC1B187ACE09CB8D06D14261138E5234974306203ED38FBB125F85BA9\ +55E7B9BECA0BDB75:\ +771338851F87F2099B0B5488FE8E600B2B3F92A528126CEE8B58FEC037D5C456\ +E848D755482DF9C10DE579356354BD7042D2CCA54D611553444F9887D9966955:\ +9DE9EBF3A3B502DD467A60AFD59E6559 + +B91BD41453D15E3FFB736E9FA98CC4073BDB7467CAEEF461B011033F284D42EC\ +588216DAA3113C2A3A8CB3139E02EEB0B36D0F82B7D24504F9C43BE93AD9F8CE\ +4EB8C25872312162D01DBD87C65811D0FC4F38C6B395C307E6573AFD9F75C264\ +4C1FF5D9F76FCEF13C:\ +D9A17555C2840A4263DE6566E9D59465211D43FA0A6B168E443A363FCE5FCBC7\ +B0E2BD646962B5DE01B9A91B680F3E18C1C0ACA0E8DB9ED24A5E2EA426CC016B\ +9819C2971B8CB697F3F4F28CBD605DE3A10623C45862F0EBC690F4295B83BFFF\ +61A114E7641920BFD6:\ +7AA8DD5F93B27BB4EED70810D33040B16041D180877E6C03E273E1B87F1A1F40\ +8F811D9B984C3914D0B81791E765ABFDE416BB681E8A1F93B7E544F65A83245F:\ +B3A8F6070CDED95ADCB8D420E35973B8 + +05BA4D0D1822FD84B2A9705E02490589446DE57762112C4E99D941B69BD29A74\ +6E2E4AA28487B300B1F7390A70DD1FB1BF48568F08FC229AC28415F0CBA5A299\ +F6C2D07D5D614A529F959FED3093BC3415780D64BF2F556FBC2FA0B4DF7D10A7\ +214A28269B2ABFCCCC86:\ +743B3DF0B4F8B7AF05ED0CE4AF77817BAFEA3E33980CFD1ACE91FED8F3AAE68B\ +026C0086C672EB22B712B78F61494584509962EF44085B3DCBBA81469782A94B\ +B53A03B03728E970CEB74FD2002EB496293089563A668A0A526376E5A33E4416\ +5F165DADB28C32A769F2:\ +90B71E846C7D462F8F1736B2CBB09CBED42B73C9B2C0CE843FFA0F8A28E6F41C\ +FADFD364746D7DA44CC8402A6EA769BDBF60A1189F8AB0A62E2EF2D10C84C8DB:\ +F86B79E7E9207F99C6F39860CD053C2F + +482ACC7C520FF73186986593741ADD91BBA635B381665A4C6284916B1F09BD40\ +4EF58A2E8C91C669E242C19A32CD9E8DB9BE9EFC39C8B1F04B850B9841400934\ +18C6ED9C45E132576D554701C62700B7BD94AFE1359856D9BFED69CAFA0059F0\ +6E9E130715A83D70F5B692:\ +E11C9D477350856F801A22102212533A5DA5D091318F832668EE7348607AC8B3\ +5C50F78A5A36228B0050927ADC5B1226D42ABE82D5E61869A1943DB7B33793AA\ +0055BAB40626C46754C113F8F6B1A07E956C032766DEFA78E0BF0E239C33E316\ +2B2869041CD151EA109654:\ +6E394318E1A810830FB68CC0D7D0A88F94E6AF97E548F8216BA57E08D56C7EE4\ +9B99385F3770A3A4BC8B8CEFF9A9BF8F4D42E28AC4D4A01365D9FE7DB01A256D:\ +949DB9612EA1BD78C7442FFB8182EF58 + +CD79855BB76EA55A63FF654ABF570703B28E7A0C810D6BB7118FE0766E4C1125\ +DBC7991EB52616373DDD82849847F5331DE6EB89CAD0F8BDF81C4875D1822B72\ +07127857B602A821971EDBBB1B4D0D17ACD1D26F7FC6331058C3F103BF23C4E9\ +3ED5D78B87F854241C3C9DAD:\ +831510AC8F3E9546D0D7E3CED8A636D26F9215C9EAB7584C72E36A113A078159\ +9E884AE39F594589F2C947259B0AE2AC7057BC96890BC8DE801D3B38E921DC2D\ +F4C7AECEB8ACA67034FAB417C5BFD5C5753EDF70605E87B669DBCF62F3C9C24F\ +495084DB5DE57F57884BAA8D:\ +D4F12CB27DCB67C904CB9D6C21B1FB3F16C69EBFB6B2F67BBAF5ADB99584FE6D\ +7D965F9CC4A304C677524C6EF60496676E20B854DE21561A22B62E161E1A5016:\ +5159D73396C90428993114810CF9E8FD + +D4F7CC4CBDE3AE3E974D66509F0E11C62AEF7DD4EB35A2A0BC42A92C07C82562\ +2F1C1133C4F519409A81697F3A6E4CF504ADD05A464669F4F9E3A13482C8228A\ +432D5D35BD0741298A6DF79F69F641A68A9D80E043EF99A3153984FD24E5BBC1\ +6B349334760F551076B5D38D30:\ +8AA942882A76DC77ADF1ACF7307077D9B106E09AEF456C7209F0145E989D2361\ +48B690520B9FFC5629E9A57E270068FBB61722988CDA618669E292E03A6FCC25\ +D514C524564A0EA66374E6A5706F552BDBA4D521F861DD3812A8303A81B81ED1\ +0C8BAFEACDF577A8410338C377:\ +7FA74A8FC8924760FCB20EA43A1F8F912780EDF3D0F4AEDE7484D2CC8A2A221D\ +47331B39FA278611CCC9FDE68D1F2AD91B831409D30BD585529A8404E11CC5E0:\ +25A4B3CCA27E618E5874793196B2A93D + +43B5BDBA30FA2F5EEEE6849963B1AEE9D97D03468F21351BD1F47062C7A95C77\ +5DD28849115A8FDE8D07810386CA63D21FF76F46777A7A72E996F0B4888ACDC9\ +5233343E026E962005B5F6DECF9A6FECA8B0E7EC58D1C3356D281EDDCB933C25\ +6843D35131897D83C1E8D0E94000:\ +CBD60463CAC1B512FFE256EA3B1D9E948C50A52EB3940770D2A51E2B84476FE7\ +BE00E96584B44254D5B709DB59A82C4D9459A896219C990463981C5D08CA65F3\ +56E23A5875C03A6C407FE2F52B92D0FA4F6C3B9D79EC20D51D8ECC1CF432C795\ +56F4DB64AEA9CA2702E511C5F138:\ +ECF41ADDDE48510E0AD24894C1D20672476DFE4C447C114AC7741CAF24F46C31\ +9747DBB3A14156976A1E553942FCD3C5C3723C6B9A077BED3431467961BD6A55:\ +340F276BF5D87280FA5959351D2C8F8A + +B5F26CAEF7C7A37581D87CD01F9F6D3B5B8DA6E587C73C593677FC95D34B065E\ +64C70615065176E500F01446B026B709D494E2FC3209FBB10BFC25038400BA3F\ +E0A8804B11706D0BDF8C7C5FF1FCF9426367103ECA49C9FFE8141281B8692717\ +792B4D3A091D17D8824556271BABAD:\ +DAA79FAF40F3F198F1D43C7011D9E0CCA0A15E855FDB336D0F346394ED85E00E\ +DFA8CCDBA9CF0A11F65D4EF8141D4501A399B92186D08B7B821841F8FE76FE2E\ +2FF386B70332D670F14265B9843DD503E00A1EB7232B8F775883ED8103037848\ +E94F229A000028AF93247C26CD3ADD:\ +8D9CC3AF3D5810799B8BAE673035E24EB553CEECFDA5C613DB418C253EECF7E3\ +2E792EFF4B225B9CC6E2157E4662463652BD00E0D52D9272ABC63A65A4F32CAD:\ +82B45A731D2F2393C500CDE3FDB1D059 + +780DCDECC88D3170FA13A1138D090C9C1FB2AD38B08A0D278DCB3B98365368F8\ +39D4A7FCB0874CB533C886A7D255923B599C486D5BBAE4CFE92755FBF73478A4\ +C282CDCE37E8B608F8018D08FC26059288EBCF8449C7F3BA78F83617B538741E\ +CE1FB1CC3F9E40952E67EE40391E387D:\ +721B4B9A6559E797C49AD734BAFFDD0EC92D1640B86659BC90B3AABBC5F87579\ +EC91F6BF209963F54B854F0AFF71A32D72D992A675BA38A2E7F61AFD39F1D115\ +5E445ADF475504AAC3A0CFCDF349412D8E2AA9BB6FE3E8283E123846ECA76D62\ +F0E34E6C3446C8CD46FD45D89B236DA8:\ +4DAA37EE05905CC235834281D4DAA2848E49605AA92AD7C7973C4EE3156C90BC\ +BBC120CBF72B0511CEA50BEFF6EDAFCAC1A066A47AA2FB1D145F22A431A4EE0E:\ +118C870333DEFB518E6BF6C28DE77C25 + +D6CF912FB9281A4B5086BC851F5F7C40B267D73E78ABAB8D1E417C2AAB413A89\ +BFBBB8BAC4BAFF248C1BF0EA5077E0241826C29038EE80748ACB14B5F88B76BB\ +F1270B9C3E97841B87AC63ACDE7239E570A5D5CDD52A350C3A7928745CE9599B\ +7AE683B5FCE6D5C49B45BDD35C06F4D271:\ +7711973849383EC7E80A9FE41D211705AE1DEF6138AFB7A1C4C9513774A2CC9C\ +79A4F95E6C2EB48CC6DA6F8C975EFD5821A054E027FA6F9976F5CCE8621E3A89\ +BB0776AE3DEBB20777F18475AC94EEB187BC4467C7366D20F977C1E3FF71258D\ +5F455F8676F3A3BEDF531D9720D79DEDEE:\ +C6CDD9D731B42C2E755100AEE2B36D7D4C0264329477170F72D2A576FEEA2AB5\ +9ED6BA0179BC1A55C21543E8D6CD47A626EC16B32698A19E92A2897B315C0B79:\ +4CDFF9A61F98BA414108867EB8AFDA61 + +13C1024C17B9B78C18F549185639B2DED3AF1C8EE70FAD794E784F4D305095CB\ +FDD2953ED736B75F8B2823C673149325E3DFFF8077731C20D3B12F5A2222B169\ +D3BEDA142E5DCA3F37F122C885BD4221E8776357B858261032B0183F4C38F3CF\ +FF19B96206094CC34F74FD5C6D29A593AA50:\ +29CB815364BD80AFBE4C1FAF09AAB793EEC973AD65A3CCE9C6B23901C84B90A3\ +622899CF5E6F8EBECBE993432741CA492DD49BB81309CE448EB4E4C8DE46EF4E\ +A097F908472A8EBD687523005C91FCF4FCC590CC6F45E4F61CA4F7AFC3295434\ +41BF7E6EE12A6A4C7EE58594289279E463C8:\ +CB53AC5FB4AC48240A75A5616FDB3935532F6357E57FC51BBAA6C5D227922811\ +6BCCA413F0F7ECBD85D939411BCC61FEAF5C73D0067874A045F016F49C1817B7:\ +F70C0F5B88C9695B94B7934CF8637401 + +F2F8A5CCD1DDAB9D5842FEBF253970FBB1F13FC158B545FE5E99907EEA4A25E6\ +051E88DDEA4FF9BD44453E9D31EB54772246A18EB73E1A35E9C0A8267D07BA97\ +D26AAD6E706BDD908AC0CD3F9D9C8E0FE24F1C5C7A0960D14C86A18D97BD3D55\ +FA2073D10676AC40601279321A5F00021AEA7C:\ +CC1E3D8138DC7993050D059C68F89172865A0D36C0CFB4AD58CC999149F3FF0C\ +1D623A0E068F080629CF04DDBCEF918AB8E4C9DCE0B4179AE7D9E0EB7CF8B420\ +44D930368455690E22E5FFB92169CDFBA5B48420C9B89AA7086708A8BF0CD677\ +0E1AC7277542A84EAE84043B9855ED876F41D4:\ +9CA8E3BA9C9610F1B15438CA0395C9538AB9AC408B05A68728E379893FD3F4ED\ +D3AD946EC26886526C5640D1D0FAD5929BDAF5107FA6A0DFE46303F20C7EB682:\ +A1369ECB4438A4EBBC918E19416560B0 + +1E73F5A84C10A6CF0680C8DC43687D5C76D29D34B09E327B8708B92BC020B28B\ +3DFD5FAA3FCF9AD00E4F726F4B3EF95ABBF14CE84481132A2D31A695993A60B8\ +5C2B68F3CEC092272F22A4732C67769AA1C21784696D0A06373FEFE72CE39F37\ +7C3048BB40886DC6F2FD7C43A23BF5FEFF7CEF0F:\ +24DB74B7D6EE6CDB3CC03416829F30C823488D98354E72476D4001249DC15ACE\ +9502580A2453398D08D45E2D5CD2A0359EA3576400D3A08214F70128009832BE\ +B2E7DBCE4F3FA6E223BD92FE23B0866CC656740DBEAD98AAC046D745969EBEEA\ +4F2C1DE55D467F932A0FB972B76C7515229F4D59:\ +0338A0F1A7DAFD77612275177E38F1EF8640B0E18D8C02E1B175DB6240C7E446\ +6EE7269DCEAA6A2BED27BCBD8E97CF11D85B70D1CFE3F958D076F064AE08B69C:\ +B21A3FD84F96556D0E68933409A7EEE7 + +66396189590430B5BE5AF1E5CFE5C831862ABFE66D22F63C5F0B8F04481594CE\ +FF1A39F7DA5A850E626630F346DFCED4EF67987ACA3D1FA9C4DD8BC18171BE38\ +79E91F6FAD52F1BBD90DF94DB52CE98239A850114A242ABD6611DD9C142F6CB3\ +0405199E0A65531C66777C8054EF03BB95248B4F57:\ +B73922288BACD4660A85AB0707FFB1D125A81531679B9E2974E2C7958840EA24\ +01B8C7C6B05913D7BAD2D9362EE829264D7271E7E47EE8BD45D085EDB48CFD69\ +A3D08B7C977D47D8867B22DC4ADD8988ACFB071C6867FC980A3AE179E3D3B5B3\ +C0127EC7ACE61AE48D1AFB16B9553DEB5583E5FB1D:\ +E403166D7FEF1000E0B6669238B6BA73C618BDD811A4368C4DC6B700B38E2210\ +E7AEDE34174CB0930400EE1325EA6BE3321C49B1D3DC185586100F580A875046:\ +F15BDD887F65D25D585770A222220219 + +3032CEC02AFF86B5F2E339CCE38864853768F1960BF20A3B53D2C4187735F428\ +DD082EC208FAB71F9AD3E1967CEAA3BF0777B87E98A696841DFC084E1347B822\ +67588B372F9642D66F9E08C161BE3EADC084AA9CD6FF3A8FBF3177808C4EF56C\ +187D0CC9121A84948D7446749EB685CE5F064DFCC939:\ +1CECF7BE8466B2FBE7612181CE78128D546B75AFEB5D567F63095ECA5A5DB776\ +EFE26618036DC48A580944BD34E08C54125594C3C1451CBBB37EDFF65F881376\ +537288E3E4BA4534A4199B00C36EE02A889FAA4FC33FABA02C633AD6628BB272\ +5C3E3E147E5196C1788B292CC7365FA3C9A15909BD87:\ +D277E8CA361DFBE5AFC2FF04A9EFBC47591B8AE68FC7CA91490BF3A7935DF35B\ +E29FA41561B424B7F9053046D1EADE655B60B82467963F087129DA002DF3224B:\ +B898F0C1F1382C9F9327B01F67368200 + +CFF35BB159EE8A3BEE6676C06A931588F1669CEF27FC33BFF8BDB94838F0E96F\ +21CDD44EE497BEB4FDF0499D63483D7C60CB2321B15CE6BE6DF6FD8AFC31B4A5\ +CD473AC49CB72E7C86AF56D5E7FBC38DA3FF5CB7D2A22B5FA2F4DAF7DD8DA105\ +E8DC6B08C78159D15629F7009EAD564F984DFDF2C38A7A:\ +8C2A04DF5D2F4B98E37D42DDEEC7411694CBF941F0D954E6312768BB4B9906CF\ +FA33D6877651240560A65F7A022B88A8B62BA58623B3C3EB892E1D1E43EC3E83\ +9C7111EF12A91FDAB754DF9169F324B36ECABC9F0037FB307A588356F50DBFE8\ +20C02E1AD377D6FBB17E8406092E52C7539EB87005026D:\ +7F5587B64A953FF3D12741C7F256716A99B7A88C21DE45FB45F3273D372F646F\ +AC13249140051C4684D6B386CB8A50B93B2187CFD971D25517B01CE188EB9B88:\ +33FDF38F0C938BAB399772D2F9E405D8 + +81B5D6B0524E67997F04A0E708A5B031C4B4EBBC2C8344F6012C1CF71DD44799\ +E54B7074288B68C464F89E6DA67AA2F1E3531A81869DD4C856861BB2618BF35C\ +E6AF27D0820B57982BD3332068085D55121D0A04E0448B9CAB9F951D3A63E108\ +84B5426F49CF6254033B63C59253DFF3163F7D0FA3E890EB:\ +FFB18F8B1287F8A98D59550F8714953975A4C0E3148EE40343DBC2E7CACC1013\ +67335F21CB190BE4D4687DFCE32DFB0E3B2DC9CE54D8123D8AD98CCDE7A9A80C\ +00CF1D1456D1499C837241B4AC5575D9916668ED10AE5AC398E18CF343054944\ +65C0E7DB20EE7EA6E9A0FB872A7C7574FD1283BB41714EF1:\ +8B395534016BCD55ADBA77CA7284A1565A66CAE0BDB22BD9316346CDD9419B5D\ +009D0BEFDFA4F40D1B6FBCE5ACE5FA044B3AB0AD3919BDC2498296C44183B267:\ +82E6A3DDAE62A789B7116DCE8DBA32DC + +2C4E8C31E0EC855E6FD937EA6B03D467A4B280B6988108AABBB5DACF6C9E84EE\ +565225A0832F92A665D98DA93EA0B6CA966C907B3C6029DBB1C595480DC90D57\ +1822FC1F0889FA3FB434A8FF4E13F20BF617A42910EA3B6DFA8077908948EA5D\ +447A662BCD478FD2681E98C9DC3D8A87B2A482B28D467E7263:\ +FBC9BD2212532AE048540DFACDCFE5A518A3C645D3B17B5CDBAEAF7C8EF359E0\ +BACACD90A4F4A667C2C9C07DFF132415A4494F62EAFE16FDF431F8BB105DE141\ +1DDF1E158D917F2DD114D3F67A71D65AD14542F0968BE10A1B284B6EA1427257\ +909A03547BAA212DA2928105C6A2847B7248C50DAC744642BE:\ +6DA973BB970599CCDE6BAA92BA993D962A6D9BE1B23A8831ADD3AD0388F68CA4\ +BD026CDA4F65C62CB41E83603BBF5375829B8F9D17ADC2CB8207FC59EEF25994:\ +0A0861098EBE2DD3BFF1F594E561F7FD + +95D6D6BCD231BE3D7C1316B142D57FCB47D2AE9EB58EE6C582F3D3CCDC78D228\ +AB555B5F79F15756231821F6A6657693FD6759D84BA734C86540B354C7EBFA56\ +44AD54BA1BB9A691B0C266C28863B04476F361DE70E665545A179A1746B8252B\ +76074D8ADA0CE0A5BECE2E6DCA1CC7F92B1EAB5B97B4B2831EA4:\ +5BDA57FB858168C911A9D815073FEBD91BC9FCF17E00B373095D81289CBB4B52\ +A8BD60744384AF161B7F03AE95EC030A02F9B2485763B7B573AFB5FBBCE316FB\ +2FAD0A2567C03D36535E8FDF253A01A9E56D0B06A4500876DC8C13E1B4C914F2\ +102CD4FF050801BFCDBE5FE2C4A95D7A4F88342C19DF6A70A446:\ +62B013DDC5BF950763A5E33385FB75BB43BCF75DC66CA54D9104B0236BC38C81\ +FCBC87997C0D6ADD4DC45BC8FBC22FE36AC00E105A46B5492B4005A50DD65116:\ +A2E9DE101E506438FD10DED90EABCB3C + +3BD568E69EACBFAF5D13322677BC92D0CE2BC7E4E7092CA041559AF23E42775D\ +E3A8D2167553DE22F31C2061A7A870B6AF5D5FDC8A6F4834E7FB44BDC31FF147\ +35C26B0893010A49261D68664120D2858002D887739E249CE730092460FCF7F4\ +6DA08F6B55622FD5750C73E5C5F0FD04D9096F9DE314873350C478:\ +368390C4520ADF7EB9602D6AFD8D5087C26FBC854907F9A5475FD0C0B2E07E15\ +3B5621E4EE651438F30BC67CD9668B188FB745EB69835C8C0B2FC8F7BEAD94C5\ +26C5A50B328AA0681311BC3091C6647A0FB6928D27DB289BB48D8D2E0C037E3F\ +D791C2FFC428D1B8A7042A961039919786718C9A25B7DD24F01AE5:\ +A483EAD017318E8BB4C0C8801462AE07257024E4BF17099B6B32ECDEFDA197FD\ +87F138CBA0D0B96DDB56105E81086A7A5886EFFF967C24FD94B8689D84F22C5B:\ +605D48F582078B0604F3C5DC3111F7C5 + +6758ED64AA790A0A39490F2C1D57D42738F4946065560F0B1A5285C2F466E7BD\ +D8F48DC2C71339BF73BD5E831B215EF0E20C9834DC3C77E874A3983EE0B404AF\ +CFD0D203B5251867B0D529207891DB47601E82C7275D9986160B0152BCB63373\ +B37D688827212E4C1BF62EC4CBDA2B365BCA7178D89ECE38A8718E86:\ +734D38002B9366E74F8E359B40997A63DEC0E1283EE0F2C20ABA3691F679995A\ +48D424CB7BEA0C39590021BF093CD50B614F2194335F22595F86B0A468A63AD2\ +81259DF6F54F1300AC7D9D2C221CB6E9EAA9EA36D94156822C938C54EAFD4A1C\ +196835EDD18F94C19694EEB6D0BE2AD24FE4F9A4A6F4BB467485DAF8:\ +63E4511330E7D1D2321FEC25201FFCC03F52EDF46C5880AFBC8C9ADBA5E768A6\ +13D257E272AADAE1A0AFB091F0850FFED65C9D670435E452BF0B0CFBCC17F6A8:\ +CDC6565013263CC5B1468EA8B270A9BC + +C0A73132E489967611D04F7C84B74CC3E2EB6B2C725EEB8D331542532F1AC452\ +809A64EE1FA4927EB32E7E55441C4789056FC6721C1186DE8F49CF413A68E928\ +49D9A59509D7B3155BD06FA91022D273496F0B26EDF671DBE3E69B3542F17286\ +1C1F40D1DFD9FDAEEE421F8223D5CB61A7BE99BC89888856E87F06B71E:\ +1FAE54A2D6A87893F58C3F478652DFE814338752823A20D722F583D94B24BA29\ +FCBD551B722765F6E472AFE2240B485A54235D83C865BD5E11E5F1165A5647A2\ +8F6BDC749F8B9A7FF1554CA86364E584415A9977BF0A108DA508A5DFE44AC4BB\ +3F93AB351E4CB749BFE9CE869DA3FBAC74C1EC669AF7910B4D0E5D1A49:\ +E1FDA54A463E177014F85F63B863E9996C6DD86AA476955FAA5FE2554CC20360\ +104C0C90FB6D3CFE69666941DB660E7785ABC880BB00DECF81AB9D17AEB01E4F:\ +97F77B1B0B71D103B62BDB3C58E1F1E1 + +21F2A4864B20BEB630EA2E92B980A4099078BA7C6359872D06B0E853EC7BB415\ +6E15F471820A0C98F57020B29AF21D65E6A78A230AC8BFCF8B1321A4A1DC0728\ +FCB9DFD7CD7F03048DE0A7AFF8AB291E566964F46E7A2376DB0E0119A635D697\ +B58C6CF1659F9707029560E65387E5B989354771414BBB59983ED6980AFC:\ +880424CF394E9813B8E9388D9E9832572C23EB1CD866BEFDC5201E309246F419\ +20EAB7FA86FE3D9E7EF39EFB68790D5EB5075398300A82A77722CE13CA7FF1EA\ +55B17F09F487A16D79E00F93CB6BB8D7845BA5A6E7055C3A145FAB4E81BAEDE7\ +C77F5835EFE213502DD461CFA69E6BC1176FC2B744871FD72AD90FAD562C:\ +26017D89A713F185A829C02EA39BABCED003EF442589E402B260F5DB9334E0DC\ +F9EF15D02BF3066F73BD73E180B4426CA5C57CDA926368733D2314AD1F51C2C3:\ +B186D4BCAB5F782F0FD654CECD90F39B + +66A37B60353183B31FC05232BD71F4CFCE7B8E080F28804A2D5940A2C61E1EB3\ +CDDF1EBB90055C1FD2AB7B39E5D081597C94F3D718A1C5E1D2C36EC844D4CA1A\ +FBA4BDC14B3F19BB9998EF4B3FFAF894C9887E204B6CC4E860DA8309D5E4981A\ +E9222820268A4FEA1EF02249E533360F68BB0DD1730E28F436FCD9372677A7:\ +80ACCA9006AA4097230D5948AB5629BF72AC6E43A08B74676E74B5D14B7C238E\ +48CDE24E319564912061B2DEE67955640EC5D9A5852F41237DE45440A2D8BDA9\ +B73C083120347EFD3B2C86851DA0EF02C24916AB58CD24B21235E54620FA934C\ +0EFB200EA7E29FBEE098EE537023A6D03956E17CEB15534D99938E8FD56390:\ +3B51B7A749B08DFC6F904FA000A4D9245F24124614A933335D75F5667E2B7C96\ +97FE44DF6AD825C43843E9C368F1BD4F173223D0A0DD9AED7C9C80BDF69C8334:\ +DFC1983F5119A9C4B55DEF420B59D2EB + +E46C7DE449CC38BC249ACF4953CF1BA66B94A5616A6203A3247BFE1E7D3309F8\ +86A96A2B5533ABE67369A1F1EA324A0D6D15A04E36787D23A16E33890BC8F2FC\ +A0540189A388E0B439703DF43CEE744EB0A1040DCDBBAB16BF37592C942D1E84\ +325047AAF28926A1E2D1D92A935FAD0C7C406A7FB8A0CB58FC685C834E81FE48:\ +69954B7111B4486FB4686B5F49D3D52CFFAE02222EF8A211D8618D9F2998BA73\ +239974DE5E51516225969E33F705688A6EFB5C7EF2B13ABB3E0E2DC2E3E039B8\ +5FBCE29A7001C4EEFD8D0143378A08F4C1289680248174EB2EC81AEA9C267202\ +3756ED685FEBF0DD7F748E469425C1C0027B64CC0E575656154B743C08DD6993:\ +E0104975E0561DC232B1DC0810A2FE19BEDD07EDC66E8208A3326111D51E2594\ +5A9D6D804147711D684E09471AA8E64FE328EF1D64C056F39291F9FDCE0E1845:\ +0E2B9BF4754A37E86C53786FCDAB4782 + +93C5A236ABE90F992ED6D5A7B82091BD8907DCB680EF326968281261393C8E7F\ +1EF8F37F631A7C2CD9E9EEA75F124D5D42E8A5C4FEC30AF989416CBE755D392D\ +493EE604E7A9384E3D423E5A5F4C5C966244C1503000AA509230DF31906164D3\ +0D2FEABA8C582C0557821917E6725ADFA0D6A2A61E89D933E92D9035D8E249C5\ +EB:\ +B425B00661CE5B18D263F21BFA59C8E487875D0FECDBE76B4E76465F77DE11A9\ +ECE56AD80ED1B07377E7B47EE4D653FFF8D7BD36A1AA254EAE0CCFED1CE6C212\ +5D64A743424F3BC01783046065453894A34616F7CD5AC648B7E6D282F17A8923\ +6393D04B6DC433512F050E05C62917C9AAA68328D92482DEE3B989C116C32B22\ +7B:\ +76AB2C69E81F734BA067B0B9D01C55A9FE7BFCCC1FE9C0A59DED509B7FAE0CB5\ +FD342300C5E276D59E239FB5ED5BD857C4EE178DFA14EB5C64C8381E4224541B:\ +9A711C7B8AA57E098ACE1F58EEC4CFFC + +A48758291351F2BFA2AF6FA0C5E211DE29B8C79BFC89104D08EE0CA595BE9544\ +A0E6999CD5E36F77AB19A071F8F6D04DD0E81A25E0341B5AB51FC6A7DC189A3D\ +6768B58ACDE108F1BE1218C78C88A7869FC84B1F35E299B0B79C4A09A1C0EE31\ +8DF926C6E5F699D39C76550CB727184B5DFF4A5DE3C89B147CBA34397AB042C1\ +0AB4:\ +F566F3EE9AE9A6E8DC0F27BFA6DD8065AA04F6EC22DBEFD6CC402B71424F0F49\ +32C3D30838CED4A8874D1455D8F79606EFF0AE5E67E3237282B62FD54D930EF9\ +1A3E1317CF51EF4EAD96E7C3938B9D62E34C2E9669C36E01D2307E3125B94EEC\ +B9572FE48912A45AF32835B79CAF90CBA384DC51459A767115D918C6D06F8F03\ +532E:\ +2BEF82CC3EB6BD4A000AC829CB9A679976C1461C822D919B5A34A24219B3E438\ +F1B05D19AE0471FD0A129F769C0E818EFC5666D33AD7E0FBEBCAC21DA9BFD56B:\ +35816266512D9C87E26CCEC6F8898107 + +54E25645EF4F0685286EB6D885282B89F658A84692E1D4729731BC0B8DAD1D01\ +92518982B0FE8D6C6904D9096E05F5E3A31667D402DCA644F05DBD8439A8F59D\ +D4BAEEFCB93BF5ADDACECF0EE6947B4FBB7F70BE8FBF898D02A36590D333EB3F\ +4AB4281B9E4AEFF3D1B8FB6512DFFC00F408C149A3309ADA4EA5C380E6DCD555\ +C77ED5:\ +81C281A5EFB2A4FB6F239A27291F29772C4FC08F9F296FAC4C740A984A6B9481\ +3EC7C203CCF56E014BBE46F173587C059D03A5889C8E02DF235D310CBFFD82E5\ +A3A3480094A9717DDFDE5C5ECABDF6931F0D2C205EFCF04157F3B40837944510\ +E46AC4BC2B1997B1B4DD090CA440683126818F50FC23BE698ADF209AD49A8A82\ +BB2F46:\ +7C31E78E2C7394EB9B5E6B3657443EFB99C08463A3300047A11E29C31280F4E8\ +A2BF9F45F06D33F48359F45550013FA6C9AE9147A1F8F257EE52E9FC4F50EDB7:\ +081BF9111E8FC26FF5F521B1FA0D8C5F + +06F3495E2ECE2F37DDF46363D03A474BC5635002F5452ADC8DC85678947B6934\ +DE6F50A599E8AECB412E3064C2B51A2AF386135B30202C7A21D735DD22BF97C3\ +AC23AFE003F1C04183BA73D5569FB919865EDEB13CE96616AD3C77317C5EE1A9\ +AB53DEA2E6BB429EF9FB37D660B31FAA2237360FAE61BA29F122A98254467AA9\ +BA1DEF4C:\ +9B6F2CD351822189251ED072CB97272464649308A16523562124F15AD966DECC\ +3B22A93AA6F75700DD6F8D06CE373C6F29BD5755F4E3E963632BC4DCE254B55C\ +4B77916193982085EE06AB800D5CAA1CEE1491DE1006F554BAA21B02D3023E01\ +96267863DE02C58D18A7B17517DD86702A4A9E1E3FAC7613528744D428DEDC66\ +7D16E6B0:\ +3BA6E21E1E7BDEAB22A5DA09C018B1ACA551E4D65EE2CF085870ECA5F1ECC93C\ +9492E6EA44446560612FF834CC30A9491A8C9008A2076D8630A65CBF39A34279:\ +5795EEB25804CDDA0EAC3BD3626F6ECF + +C8567C7DB4F901A083E4A3463FDF72F1B70A1EC7A6F18B9208A6DB88E36C84CE\ +2EAAA83444AE8C930B8ECDDFED95369095D6492981FD038DCD6F4D53F107B75E\ +DEFAD677FBFFA1AE7C218E9E4CEF32AD4875446C533D651AC2A407EA0DCD9E8B\ +17F72D2407E23141339FDA65ECE95EB70BAA2D3C3A854238C2008B0B212C0C39\ +E0953E7A11:\ +86DBDE68D137CAFA42181AFEC899D1002C34A848B57F706BEB5C35F80A2864C1\ +DE836051FC7B6C8457D368E49953823657927A7526CA3A78215BFCE1249D53D3\ +4F08E15BC9A4116E48907FD594740A1142A316FFA3AB8D4C6BC8C05942289EC1\ +1BC1A80E4A861374F053E08D401A174465CB407D616F5C59F42645C87F195989\ +29C8C11318:\ +4084365D0393AECE34B53482FDFFF0D23837051C04E680393A77CBC36ACF352C\ +67CB002A336D75C964ACCD2D6FE4A85140F23F8CEC5181DA8D7417CB168FB929:\ +730D1EE67161B93E102E9414AE051DB8 + +8469D3302EA60CC72FDE028DBCFDD7C633E2030E312E4BF127E2D3425395ED43\ +EAD12835D537E348A44E33634733758271BBA2C65CB4780C76D3A6BEBA69F32A\ +17DA522A4E22E7E7EE561F5C05A2788AD45A3ED4918A05DF4C3BFA4EB93FB07E\ +F1D1104B987853FE40EA56737C84EF8F00CDCB6363A5D568AD984CEC416404E7\ +88902556C9F9:\ +D0ED3237CF11A6FF2A05D2376726218A9D98AF8BB5270D9546D32FA2C394FCD6\ +59F008849E95910D638CD1A2A09A6946A9CEB08F7BA24E0D2E8518199FA88DD4\ +CFD4CAB123080C52251F01E29E673BEC855F9FEE6BBBA6594884D35BB68384AB\ +66E285F6E71362F4C78A1BAD4F976715F7F60A7EF2D3C7E601A3319FD2062714\ +704CF2846B1F:\ +6D2CCE44439F12CBFFFF9BD738A99D60123251E0D1F6F30848EF7C71E7C53D05\ +8F1A1483A6297EC383396C5301BA3E471E9AFEDD07C14668746C314A3146B2A3:\ +6556375FA789D768E9DAD4409E76FDF4 + +0F8D74722E2814BE690F915BBEC407C9BAD6AF6F53AD5315F70C8CB8D9504DD8\ +647D51553079E3A21C7A8070D23C3345D202B9C5DB41C8A27C29E65E96F16BB2\ +EBC324D452A4C7FB76AD80A421B9574F8E35E4D35C94406D9EDFDFFE9E31AB34\ +5FE69A63E3EA8537A92701188F58644FB29CE8CD990E25E8AF9A246A93DF2311\ +4463063A57DDBF:\ +52CC2A88639888CF9314FE15363700ECA64FE91088612D3D347991F98F91299D\ +330F6D92EF7EBA046315B3DF2B017BAD4B5834FC37FED528BAE0FC4A161056BE\ +7A805C4EDFFE887C58C1F311CCCBE8F01781F63C28C88A939264AB138AE8E688\ +B72FFFAF965D756238ACD876DA846153E3B9D685A45B7B0C91F5D2AD9A8A4F5B\ +66AFDCAF4509E1:\ +20E9D126623672BA3DA57683E89E0852E1C3753EFC76EAA125C2935ED0A85DE7\ +7A6645A4D225203BCDAE99645E9675EAE4D545529733F4CE49D570DD5FC1E5A5:\ +11673D9E38B88FBD5147EC125BB21B33 + +D3231A3DAAF07FDBD3A05024319FA12A70A31DC8D9A7D8356F06D8F5D7394AA3\ +6DEEFDDC29D4BD9CE5DA729CDE1251F86E4E79CDCF573570F58CBEAB342B1AC5\ +ADA6FFE3C62D292AD3F9CEE9DCB858C9A1FB0E4B11A3B21D6351FCF27CD9B5D6\ +A4B6D1A43AF1DA10C8AA7EBA15EC2C71620B343B71C028802304583059FF0646\ +5FE17ACCE35A9C30:\ +7D579CF1B29D202372FAB3C43618BCD1499BB26A2E5E71BBE7EFFFAFB295D9CA\ +5928FFC95E0AA58C59A9D0E5E42108AA63E79936167CEA865D808904567FD42E\ +45E061195B6234C12BF70122AAD6BC5C75097EBB16099B4F4F691F4550F180BC\ +61D837C9688653FA2082A52051D6F7001473C00C58B4ACFB35040F6B9FABCB8F\ +DC137905E0C8B722:\ +EF46366CA50D577E5F9DEE22282475B5231AA2F1A687C2A47BD66F46F06C8BA6\ +44F9294A117CCDE299608AB651EB665D4E95E7399BF895403CFF60C0691921D6:\ +75236DDC71FBF614FB079645DF5A8FA5 + +00246DB5F84B1F5BE9235BBC9B2AE432E0F5441A169CDC9DA78ACBFF727470C6\ +A768B2B14B1FB1BC88EADD9CBAC796D17F71629A829680FFB1797117A30B5FF4\ +F9D7A935840C04333D7BA95DFEAC25BD289BBC6AB07B8850241AFCED877EB8F3\ +9FA7B7F97D44641767BD33290242E42E856C7E282A6D7598419A4B547AA80D3A\ +9004B18FB54EDB839C:\ +E94817986CEAE0E54D4EDA3B7AE0F8A4200F6D6DC0A483EE2496E8F371E0A264\ +80F94ED3CDE72B6A7FABABB8E4619F6CF01A3A39880D9FFAA4BF3EB2425E5B3C\ +E46FDEA93FF05E91585F26E25DF3923D69EC42BA3AC7C2B82D615A66B4E95797\ +451F9C94D1161652409AFC670C3B64C87205D13A1BF049F54A591E916523E6A7\ +433A28AF85B2495B6E:\ +ECB1FAC66B4B74281A0DACE9F95911FDF79C2DC0E3B005124B7481E944A619D5\ +C905FB915C4337749F4BDEEC3153BD2BF075371EE709DE8F1962D35B67DEA5B6:\ +D255A2B05BE2AA1E606895A99BE85AAA + +B1167A2CF1CD06E919826114978664424C36B257D9B3B9188E1467B73DFA051F\ +6175984E35C6FA8E7AF54A85B663E2DC7EA3137F444BB76FD501AA01B37698CF\ +6237F45750547D6655BE389DC88A532C387AEC2E701178B7770C51BC5D2B2BB5\ +2046657D67EA49DE773C240DFF93ADAABB69B14785C071084047DCD24938AB01\ +23E8A4C84C5B79ACDF58:\ +845889650CCA54A1CD7FBFDB6BE1B3A54D295FAFCA3467A173AEF392BEA78D80\ +2558F0C8903A0DD60D53F11E3C34B26E5318632393794AD35F9D6C534EABDE5A\ +107DAC9312E4386C5ED9FA84D6ECD1A32206BF12EA3BCFCBE5C4D1BE2BCEC76C\ +8F2ABA19F1F27A89A2299E7D52F4BCD5C4186078BEFBFF85EE3266AF41CA8E5F\ +3A929858E66A31B99D25:\ +5D2C1141A0038B998B5C7FC7E24BA1CD2B6DBC3F6218D6F598C9A0A3A3145BE6\ +DFC88FFA319D96864620551A985518EFC9FC4D3F4A6C2B21BDAA00ABE64CE0A5:\ +0A68613719ECAFF4A9E3F17ACF914933 + +D11779689ADB5D3940CD4C1120D4D944BB0E7CC28F1F1C87E3E7E76E128F2CBB\ +542601F258CFFE937D4475A4309EE926B1D88A2D77AA8306E18D087DDEFA9E4F\ +9D06C3AE700DBA7368955A0F0C495E1149F85EC6DC0DD4BD430A5C037F85E06C\ +A615232442525840EBB12AFC6B287DFDAEFD9822BF5197486BBD51B826C7C11A\ +C7DB4DB3F300C223C3DFF6:\ +111EC8EA4E6F5094A8E3107F6A5A09052FD5BB317580EA80C65036537DBEF7F2\ +44BA22BE4514CEDB217FD914B4686A579BC8B023C8E16BC5466078BE193DC1BE\ +70EBD3C323CC5544924D0580C452D9B17C61B66202B44883C139280DC2028846\ +60C2CE6C26D95F70C64ED351D6B0E61BDB4E874F1B82EBA19386824F8CF7C63F\ +88C6AF4C949A00554D8957:\ +2BF4BC444006EBC96801952390E05B7C9CB6FA1267F9B50F09E29953579BEE18\ +22D5CDD0B3BC341DC187064E4A2AAE1A6B9EC545BB82BB355CAAA7CE1CC4D10E:\ +86E3421B6FE8939F1092D7A647EBED42 + +04766E2DB785725BA503819DC2BD4F340F9E788783981B8D0A48A91F7F3753BD\ +9612B2F66298AFD0DAF20B1C9B23BA45879A02A25515A5FA4FBB6AA4F9E29F5F\ +640385DBD9D0DC44EB8932EA3DB73D72FD55694852502E306241C25A603A3D1D\ +FC7CC6653F60CF5AC2DA758582C1002866BBD396E874563F06949D7B01A3B5AB\ +F6E992C5C218C3F9D3F54D84:\ +2FEFA5B6A8E4967520486C596E91FAA32C4D0CA2F87C5AD29D051ED24F08E961\ +121C750B7A8563E44A9B78F99A30E816BAAFFAA440BD29137A3ABEEC2304C586\ +57E667BD92508F5389E9E501B3E15380A94C754D628A51B4855E7DDF434D2922\ +2139C8D47B8A9077FB93A047F06870A39E1C932C9106C5F8549933167F01F34F\ +7545705627E631C4B3D5488E:\ +CC4774A4B2B0713E38662FDE415A674C77C8D860521BD7A837FBB6595035E505\ +D93754F035579809233D92A10F4EB9094F8816ECC7AFF9CAEDC48A8603E7F009:\ +D62291FA5B2B0CC678E86CFA70072394 + +C465F5C10941D4975F303E63731D7D65EBC7647DFDC4732635E4700969AC9A3C\ +5E7C1850F42AC01B0B8F07CB2D0E985A726F3C802946F4B36C624BC0DD50F322\ +890F33711F4434B64CC274C7CED8F15EFE7E088A6499739FA985D2E888376F53\ +5F3A6DD16A5AC6ECC836A734F4BB09C82DB1A0BB8494BD8C242D3D555C15E6D4\ +72651B814A02EA22E413320B4E:\ +FD6D89ED47D9EE30DDC776CA8592C0A8111F847DA753DC69834D9A6D092DFD5F\ +936F50A3FB3256B6A1BC76B6B51D361DA7A72773C7B4A92DB79FEF0536FFDAAC\ +18A479389BDF79974B363CA577E0C961C31A680C37E2529DA109BD57D3A1484E\ +ED7959061AF28581042367D0AAD824CBA8F96547A61EB7517B5B2473184B526F\ +1BF9F72B64A54524C2E251F173:\ +A194B48E1D5FD59441DF7B14DC819751A8F1AF7CDF6F1FE81C8AC4BD7CBCB657\ +7E178460B24EDB081A9423C0D9F6967A8C4BF7CD94EEBFBC7EA115ECD97C3ED6:\ +FDC8DB35960B6C0C58D4CFF2E76A3515 + +E65BA732DCB42FFD966AD5EF6AD3953C45FA4CEBF47142BE2FEE9D98DE020A88\ +B7536A633C151E77B16E37D6F30D1FB7BCE7E49EC3F3B5C7164590392ACE2C4D\ +A5206361A381D07CC182E0FAACAFD6842971E7FCF005D2992A7A2F9B6FDF40A4\ +78E36C631B8625CE0C196CEE270DF777A48BF2487BCC29A0394881A54B69B03C\ +F42E406D2FD69DD521E504393917:\ +B8C352F394058A4A2D87030557409AD0840E87F20B3F5481F88B9FDAE065BCF3\ +8433C0EC142332676B96482370EBCAC05B7FCAA68676F25F5CF06636F888A644\ +15DB39E3892D63605F530835383A8A6FC573A48F858CD1CDC7D7175D47324842\ +3F4B821D049D8604DA46EF2F8807AAF1F63D22D8922851279F645509C1A72808\ +6317A7A64C77377C792637795D6D:\ +69FD3BAF8258261004D9F1EA076BF5E358D1BDAFF0C779A70B0051961E516181\ +AAE416C6AED93A7FF465C2CC780EA7FFDA147C25BDAE869A2C0049A676FA0F03:\ +1F813975655755DB41D157C68AF69956 + +E2C37AE5B3ED0038B2994F316B7C1104812871AFBD4F1686BDCCA64D638FE6B6\ +70C6C24860A7E49AC34770691B1A45D97DF79940FD5E7FE2068751C5549815F5\ +62FAD16B3E11110C3BC4928A95823488EAA4CF91B4135830B6C979ED25638AF8\ +ACA6DDB52D169DE7C55AF958CB9A90C065121979A7C9E7F5C0D5C8B9688957E9\ +D0F447AE04A05085517AFD11CEDD08:\ +91A679E3D1FF2044C0708AA1940E9FA94768F1ED4CB60D67F0D393F6745ED762\ +791C9E3CD2AEA2B971C74B3248B1FBB012FDBBA109CAFC448C3DB0BA4194ED13\ +C611A15DA00D663994846C504CA22DD580ABB2E30F406A7440B238AD15175851\ +5B047C226153A3931B7C4E3F74889E9FE2C7CCD7BFA5DFE8D70F1D38155289E1\ +D2D55E3159C07E4692D1D937C0011D:\ +0125AF88A9951A38ACD20CE05E8CF99C6522F3E163E80BCBB4F428BDEA563420\ +427AA289D2F7676DDE807461749C2887852C82110A6A1CE8979837B5EB82431E:\ +9D4F8337DC1202FD53813F2A2DF16EF5 + +D69D8AEB53EBDCDBAA012D5FB0F3F2081DA76982B0A3FDF9B2B30A6080EAB923\ +F9E1AC5846AE2B85F63780EF92673780EF724BB6328D2A76F77923DB1A829822\ +22BBA8E996678C3B20BAB4396B3F234C349285B38391A2E6DED26BC0CD92132B\ +C5AA83D3E6DE09C847476776C59D167EF081A3ADAB47E0551BC304FEF5BB7D3B\ +A7FAE7187E971CFC6BC2DD6A5DDE7092:\ +DF12C4796004ABD43A0C77F0957B6DABB890BEC6819FE27DFC8D63BE5661BB46\ +C6FB3E39E0C2BDF89DFD781FAED9939092FD7FCAAAB6B82C469DEAA9EF520691\ +00436601BD409D444DCE19BD87EDC6CE973EE2B2877E6C31613D18DDEA67F51F\ +DF6C1394FB7463BA08A8431280A3228E53CA6F6158596A3C3E779619B816A1A9\ +BECF84D9B948842C3C32104BB7D4C71B:\ +8EDE3C0F2485BA4D271AF1A14FCB7B9D104EB76E09BC74A854F73ED8D6CE64AB\ +26162E0CB1BF890331686EF493F4D9355C242F9F5921ABC4DB31D18EA638D895:\ +4F6060E046D31FC96021507D1B1F7E4C + +A0238A55E1AF5AF4EC55B1660A51EE7C3B45868487D7CE808A521E39766D389E\ +F6C9B9768D7F97305A9C57E0589425E51F4FA6137C30E76A5F298D0EEBE07AB5\ +3E93AB49C63A7EAB441F7B1CAA6A61A4E81341E1CA784F5DE330CC93E8831E6A\ +11725191D4B9C601B3C0C1411587CB9189FA4FAB48173BF342BF411AD86210CF\ +89B015AD104E47CBD4FE6D51531E846485:\ +E5E404C161E65FD1BA86DD5FE29BDFD03DA4293A0E0BB211AADF6F71D7ECB704\ +2094A19948A27A653C213CC317C86A61A13AA7C83DEE76FC3FE9ACE61FBDF5C6\ +EC2244E238C8C30234275AFA9486536CF81FD60844CF3F981B743AF0B8756300\ +6B9693ADBCF2541462654EC438FDE2CE65BF7F81206AB1C692589B7D293EB025\ +37429B0062F39CD9741D577133F2CBF51C:\ +FB6C4EE5B44336B3513FBB1A6568546B9255D5417A453CD7BD056205F777C5F0\ +5C80B109D76D32AB6E81497B1798E009909A7249D92E7FF80585ECCABE09515E:\ +77C060C9615D7CBA606F943299740EEC + +833F44D9CA5D1E449AF04E987842C3B41FBE6C4B68FA49FE5299FFA5D44EEE1E\ +C20610C83005FAA10AE792201D2AB21D38FA16DA871A5A1CD3E4F33B4B97D705\ +6D8F4A8F8C5E2D3BED2DA938AB80F8A313C75C8644A47322AA2DA9AD0F114867\ +0C15EBB25388C4E8AF6021797084E0B6FE4811146ED33A0E516BC969703569A1\ +34756C00ADBB6E468D21F46F6A706FC87085:\ +39AA1DA3E9BE202090936EA41491A9AB803E587CB900E1080F77BBF2EA1482E7\ +5E01AD7B9F62DC87C9A50FC10BF927A6D06607C4C5E137DB32E7A89DD5675BEF\ +ADC05CE6E4E447C592541DD7B137D8FD5C9E16072C6B2B99EC8A7937B213C00E\ +B78F2C76EDCD5D64C8081F4CCE69948D75800E7C18493971B32258879530FD20\ +66529CC6B6134CD9A34053558B947338DBEA:\ +D3A7712282A755A22CB17176560345E8775C3D19499BC51272C2EB12D7359FB5\ +BDE1F74AB0930D919AEA9ECAF4CB9E77F188432C39BC37C47FA6FBAB6B0600DA:\ +59A6EBCD762486D7F9B1EB5DC2E59DE7 + +CAA2D0C1473747DBB283A4FEA119B70A020ADCDED0C16FA43BCABB211EB7D984\ +1CC6DC7C8912307DC06EF8A30F5DF7301C221C1E9C0F4FA439A70CE9B7F292F9\ +387BC279EE15B559F5506983B48A6EC164DF2D0CA2C114458D1E39CBBF7AE599\ +C4C2AE85DC02CD58D9EEE82CFA5CDA3F7A1EE4CCEA8E3247A69448551FE39F59\ +B8F3EC7B4C2C6939A9CEECC8B8C868FFDCC3D2:\ +FD97837BF9D3F50B1363CBA08028F29580E1BEC32C31B99AF140E1BBF8675D14\ +6720C727E038D626E949EA68E11A50974DB42E0798CDE9C3C1F5FC25205F6F10\ +B541933FCEEB4190D38E9FCD0C3A8AC4A5C041DF1CD9487B5478E24DDB2C5115\ +7924528592D9ADF093F8689F03D5EA3F04BB340CDA50EDD20E219BDE3F61F6A7\ +D96ECDB169DA7300B0D0F16FCCAFB064E4A6FB:\ +FF50D6009692A4656CEB5AD776E69FA55B07870564723F3C4E5EE65BEB053D4F\ +08E4DBA15081424EA9689FA6F893B9161C3FBAA7EBD910FE81657685EE009858:\ +EBCA601EDD1F962B139D2DC595737C43 + +18CB59AB4115FD49269438F2135E1DF69C5F599A0E6D74D7B25EE0DBC768947B\ +9BDE8BF1DBC72C72163C4610EBFA251C84D14AC27C5C8C0AA819C8D070252336\ +29C9BBB7F26443C1252DAE5E29A2E26676709E0DC0BA3322437CB2269937D461\ +E0DC366035C17868FF7EC65625A864E4F9DA97B57B04426F02BBD357F2C03220\ +AC4E6B1D55225FCC6FC82975CD7D80B0CBD53A5F:\ +711D01E11145CE9B88F7A6C0DBCEB7A5208ADCF4C6A20A258CF307B9E17A3352\ +C49930479F23BCD9B3FE145FE821537AF6E57E8FA79E916F5133A8F8303EDF57\ +DF919BEC301127B521337AA129F52707B0FE2127F7D49CCD2509F50F4EF63931\ +DE626E23844AD4925FAB2EB39FCF57365D2E7B06FBE32D8FFB9C2CFC63ED1772\ +36C79B9EB8FF69EB3BED7B7E5F39558991691669:\ +0148EB1C26916C7D4399D14B11177CBBE12E40FB4793B2D9D545D86B4489882A\ +A40C71A1678A1CEEBE68CCBDF20AA3DE2DD4562F4505EB9974341B4CCF0937CE:\ +F070781A32003D20773C27840AF449D8 + +C101DE3BC4ED6917EE34D2967ED3F11FA9ADB53D27A657BF6736E7DABB33686F\ +022565033B9F349C53048257919F90539AA17600D5027C475C05CA56AF72C256\ +DB7627E7199399513C6CD92598B150562D945572EA9D73FD2CAACC638B912241\ +5AE8AE028AAE6F8FF3F7247D4CBFD533813B6A4410FAD2B94463DAE3FF557889\ +5C47350AD95F26F37731B56B2AD1EADE9F9663D752:\ +E5E12CD8D80BA44BDB7753FE86CEB0AE4AEAC30A1C1D531445F4B4FFD070FB04\ +1F0CC48DE1C0739F862C8A3FA3477620100A46A643A5A40DCC8773A31AFCF5AE\ +9E29FA6AF612D39D7C99059E55C46A4A45149D3FE7F640841046D5438C76BBF4\ +37E6EF01369A37ACE3127159B657312175F800E25FD390BAB0E44BAAE0CB2960\ +E6BB270CFAA0D3173630C885CED0370F0E97311AC6:\ +635F6FB4B93E5D997E8229AD36357850BABEB96EDEB6D3E0C0077772784F3326\ +673C04CD4052A914E4A083F6C1D369242D145205EAFEBB8B10FD8D21510624D1:\ +78E5D339434BE5D744906DFB6C36355F + +D4AA658933CED4AD151674F5F1B17B767D978E0895C138E6F1CB1AE89C59A931\ +4570C31B447036CFB4859D24343A59E147C009B07ABB8ADECA7537E368AA18C7\ +08341432E48AE06BAA2175FEB0AB4D32C544F0B225DA52830196EBE12C61F048\ +1423EA8773F5113FE28BB4D888DDF54F3994BD631B59FF98982D4C56181C892A\ +EC9ADA5C9FD487797ECACA38EB8445D4EA1CA367DEEF:\ +B742DF92E3FA1A7846F7AEB6AAE3607A47A7BC20B52D7A4209786DE110D3D0FD\ +154C5620F7F5BC396EC21E3C3E9FE46B7F527413657D589C16B991A96BCA7524\ +819729329CA94C9719123EF2BD9A371730E6E0A658BD6113C301B3EC8007CC47\ +56F7138AA06137D333A986833839AECAB325611B869D02F771EAE7385BA3A019\ +3BFBA89081D2FD96507CAF0EA504C717D9807C1F2272:\ +17A8A4A8BBA9EE594818C91B97407C3BB8066960B83FF216E8FD855DE3BFB1F4\ +7119D9BAAD2962037254FF5C60A8609978F2C2CCD6C75D773CBF92FDF6A3A13D:\ +97C290F3C7EFED5EC7F31E4C2AC2EB3A + +E1E6BD03BAEB87DF26924E9A6E2F739D8AC726805C3D154A19A2DDE6F84BCBB0\ +804BB4D5B126763A124D51DC569E91A88720446A60764F0C253C3B946434CB4A\ +3B82E5ECEBE87F3172DAEEAF7FB4868EAD2E2AF903774CC66E67041BC9DC4A58\ +58083A1DE4B694D7121AD9A9098598E4300C67C8AD0E860826A0FBAECE317135\ +90B3295E5A264798120A3223474DFF5B3DD28A286AB8E3:\ +20882F1BD13FD6CAC712CDDADF035CB41D16A5D78B2F7F0CB7FACC0DB80A7675\ +2400EE878D05AE00874CA4B0AF7208A9E8A142F690767BE5078711197850207C\ +039DBDA3DF165CD94C0B7CFA2CB481E891401A44F696DABA86DABB6304436933\ +1EF12BBA9F1981B3256AED90251600BA91AC3641C917E2457B60F78939E62B8A\ +C89D1720CAF9543AC689B0D5CDE0BCA9D9EB0AD86188D4:\ +05FDB8E1957E1BB719C1FD3A4392D95847B861D556A39F3A97E27206B63E8642\ +5D262AA31BC580180479509D18BC3BE0A4F62C50E451D0015F05E98EDFBE97D4:\ +C8779A846670B7EDEBF457C76926E84D + +48BA18139223316087102714AA4D2DB6945A1E9BE9930B2856CA187E57B02CFC\ +EB82B5CE50275EF772F4A1DF4FABC008361721C62DDF1B01CE50DE2A628B2B2A\ +61B0D1FF3E2960143D021ED80166B26EC293F9088B46518B9EF163884A3A09CB\ +BB46CF6E298E0A859B240CAB3F105ED768FA90DCA66AE7239D2EFD3B7E7BA7E7\ +7D815DC9F16F824D0F25BA2971367517A159EDCE93660BB8:\ +2F5BCBEC75FB0AFB8F39C2F48F593F6863AC5B055B815DE9D56E848070398BBE\ +8341709E21855FE009CE7430127AD445642327E7641B83CDA94DB3F6098700B8\ +B524AC2D029B31BE6A75F29FE0B92D0DF86C098BC0C7169BC1AEDE9800DBBF18\ +D4C5AAA8D082B357EEAF2930BDCD658644B0AF7F116B63FC79ADF5A6D5CACCDE\ +CCDD0D05CD6D1ED79D77490C0A092628072128D408EA4DB2:\ +1FD85C1CCC7F8AC116367B040C3F53378BA7D9EF793E3F8C595BFA66C017F53B\ +7E82B43A30BEAC9ECDCB66BD1E825887D9AA5AF65E74A092FD489512CFBC5D9D:\ +C5228BB3100D3BA341297226B5B2BB19 + +BEE3329E50CEB79B31E9145D8BFF1641A6CD1EF4241E9CEB1250F8CF86046BDE\ +097DBE79B48305C3E41B0A7A8CF1067544477BF309567C2087D9DF818F0737E6\ +12F426AC6587E3693F3673453E6C05B0E5831382EA23E322698EF85176DF77E2\ +18ADE52491412AE0C119711E75183024F89B4031612517F39DC3E656C8A648B8\ +52DBEFE0F28A25CBB6D3C706A09506B3307713D418268A3CE0:\ +2E5B93BC1B4034410445C296C713E8EBE4EE088BF8305BFF5213EF4C10B1D859\ +9AE54F20F5C21B1E98D974C8712D0C224E75CD88127F999EB0CEB7C232777B65\ +D45C32D2690FFA784AA0DD97E679A962434921F57E59A7B0DA7A07D5F7EE026C\ +969CA5BF389F9F777D2B4158AC000CF8BDE62E4CF92ED98DA63BC33E5D6C20CD\ +F15423FEAC6F6FA541875FCBC84300795F270287F610C5C117:\ +D418E11CAB049E5B4876B581F353904F8E54B5BED4062A6DB854460DD7BC8053\ +23CF1EA9DCFF0659FCE3AC5D58E8ABBBEB0EA73E119B0AFB872EE3B3294F91F8:\ +3B2DCE189596B5A09D7768766C76346B + +9D75AF0B17241AE6B15AD8DE9E59C030FDF300456210A11773EACFA00046BE3D\ +03F06FC5AF5247FBBC63EEBB98048E0BB173BD52734C643D394B7535F981481A\ +940AF69B7FF5AE956B5BBF6306559E43B10E1F578E49BA6F8D3C029AEB96338A\ +E2FEC116B72C9C520BCC211D11CD0C4AA953CEA83AFA45497B15C5152452691A\ +70A261E29636D90B203C88DE29ED31A1F2C03EC3E8CD142A9637:\ +A24F09563DE9C2E63CF5202F2F8898836E46914C020F726ACE3D2D9B5C9D2443\ +2B02972DF083DA78975F76E1CF2928647BA5559D1AC9D26FFC1324E6E75F0327\ +E800950D10014FFE349E0C22B3370F8AE8C8FEE323E4AEB2846EAAC6A8FFE791\ +FE75B76730947A1054FFD391CE88C06C835A48F8D0E302E9009F8E7D2F7E343E\ +057FCB9C1D6E25D40B818536602CD4F5F28F8A591ECADF6D1DA7:\ +FC858C754F5A0F6DBC4CA9B4EE8794B7AB138D8217EA31D9E0471DD4E4B29E7A\ +341EE5E9D4AA9F5744DFF2F5BD4591E6D383B68ADE59CA5BACE4897E154F5A60:\ +DDD32533E7CCE75D145F9E75C9750FBC + +03147E9D41521AFEA74653C51F86AEBE54795997840CBCDF01C83F5C5CC51840\ +693ECF171F848909E6958B6293C6E2A6F998A5202461A99447B5701DC2DA093D\ +CF94E88F7704BB25CB2FB16B9EC84D0E5B20895A5BB413359EC2166EBB1C7FC5\ +2B9A8302A05C638BB2AEB43CACEC2167598E5B92DC202DC0E1843C827770A502\ +C65BC54D956C0B8B6817F1D9D85B37B50F5FB9BFFA9B3FD4E987C4:\ +DEF9E127A66407CD5B20C71CD91703044DF8EDE655529EF193399AC127D9B763\ +70606D7F187CC343E855967814B3BF265C3EC1FEA8017395B81BC9AF54F23A05\ +3B71EFD3E03A847E0B0B74A367E4F4400F0513A171066E2175E9404B3E06373F\ +3F568F4F2BB15031884406E67FA4A101D428446BB0093B8ADD0BECC1F5EC81F3\ +DAD6C20101D53046AA5478B6DE03199D4A9FD9CA0B7FF7E0378E02:\ +A96E4AFE8841E78095ACE8DC9DFA0B9C1D239E9B9EC21B4D621F537E116FF538\ +B3D980C69FD454144ADEAC7E8F48CB1E78DE10535D4B769C4635D467005739BD:\ +67CC9400071631DA0E28D38D62A9263C + +A5713A182C829934B7589CAC856F5708C8E0450466AA0E2BFE735A7F0B287914\ +F35D7E549B27AA7679F5C4644DDA3FEF0A5735017F9AFDBBC9651C05B5658CA8\ +6CD4632ABA3F521A73BC0CE784CF1CC744EB9C54081EA55EDA3842E2745052DD\ +23E7DCF4933E2AD0723F652DE05CD6BF70D0E24CA0AD224DA11AC44C85E78540\ +FAE16F4856CC5A372E1F4BD2D8205E2113636FE3582FD8EBF963C952:\ +77ACB02AB169E65C492B408FFAD8317B07475DB66E41D6EBCBDD7E70FA8BCB6C\ +FE7C44ADD7275D5EC85591F211720548DF116E162F92653E06BDE5DC3E870228\ +1D7CF91DBEB76BE4F1D0200DD3DAE721FC0C9689E57D84BE555CBA33BAF9B85C\ +59F420BE49707EE2E74A35787A95EECE418ACC88EFF8204535F9E8A994D9A434\ +FBAFAA1AC8E715609CA00813A40BB8F2122556F8429D6FD88D61ABA1:\ +3FAAEB0FE51CCF58ED4421CB967C3CB22EE234F137C9D68FDA639A466BDD053A\ +F1FE32D00A5E74F0E180330CFE861D55CDE113EFB9AD4287C0E0F33060B8A067:\ +12C67C590BFA135904A8B77A80F68C44 + +42C92C6513FBEEEA129DA7673A4B246AE288ECA8D04D34C6E3AB623115520ABE\ +6E45936F7384770108888CF3A10D09CC20C31DB156D15925098751E32AD9946E\ +2351A0CC3E50DB76BD9FDD8358252FB8A09AF008C72D08DB74042C0481633F2D\ +7E200CD391C46683A8279101521E8358DB666061B03E2647AF84E9C647950647\ +A641ABF8F23A23647908B92F4775CB46706C08CACFCA1BC510A7D83E6D:\ +2304811988309197D798FCD10C2AC5A6ADC402446A3E63B23845D09685BA5089\ +9291854C68207C5EA3CDD1701858D7EEEFF7AE5644048E3D9FF9386FA0EC6873\ +F4E2A4860270E59EE4379D803C520F54B1850BF27B492C39BA8680E780AC3A48\ +24D390F889B1E7BC150C5BF4BE22258AF437E6FDBB15AFB559771695E4C2EFE4\ +192860637F59F7DE1CC86426E8AFAAF8B723B24A338C12325AB5F9D472:\ +0A5989484C2CC25ED6B739204B3CEFC7A0F6326FD225BF223F4BE2A5E0487D62\ +7C76ECB1198EEDC7336B8AA14DD2F8035F5D0D3044BBC856103415D7D78F3D2D:\ +ADF628CAF9C5F249CCAF2CC89E34F9B3 + +3470A4AD21C00C966B17BC8DD5F8569ED0B854FCB9BE74EEE1FA807E54E9C1A7\ +0571CD0F553739C27754F6CCE705BBBD76FE1E8EDF3B4A7A84F5DABEC5B651F4\ +76762D369D1BF6B9A21EA657FBA7BC44639299736E24F1AAE37C9CA21F053444\ +F916530A01A7B8CEE66083D7E0FAA85FC4094AEAC43F196FD5FD529382F932E8\ +B90C17F60CE51E08BDDC990B0FDD976F9F30FC787F0C6374A98E40E220C5:\ +833FF82B7FE76670DBDF9933776CADC86CF3BCED569A04C6004A47F88C13102C\ +0D6093D01674DE7F6EEA71553D34B4827003FB12A5F5A8FD20545BAE090E7DF2\ +2FBC615DC47200267626F9044220CE27DCB0AC24B5B581E98A29E8B10AA3334C\ +B12C414A9B373E9273E23D5D8AEFF865DB27C2EB0A59FE44342ED12743F26DBB\ +EC77B832C5871F3E0F5427DB47BA22DD2A1C6CE269EF8FE1308EB2CCF1E3:\ +8DF9E4EB57FF2ED6DE948B6B53939D80515E38B1F955F07CBB3E0414ACF716EE\ +82272E447DF64ECB6A6A230A1A6ADB94CD218828833E6A7BAA9BC1D43A8A30E8:\ +0D7A40C5C46B0C04CDE693840874C7D5 + +36A07EC7777182BD6833687D237C92C4FF12A24D910F7C4CEB0ED4DC399AEA57\ +AEF55D8E545BC50C081E6A4A77E6485EC6FFBCB81CC41169B136D772E541D73B\ +1669316FB67EF6C70986FF1F2AF1068EE7EDEA2AEAF19483C31A56468FDDE03A\ +09F3EB4658A11192AD64791ED8A06252E30AD2CDD693A8C4D5E76D083FA632F8\ +0F85FE7A834DF7113928C5E1553D5EB05333E807C4D74B2D7ACB6432D9718A:\ +6D00149CB8CC148F4227EC5861D9389BDCA9292E6A1667F14F6CE272CAD86DDF\ +E9A3F54246793B2526B28F0EA618B4AD632E7EB49CE05F13E310F39CE4C21811\ +473BD0B3A8FD0679387849ECA70F9BDCABB40D18A25152CE4A74AB4D73756424\ +2FB7202D61A5D565DC46DE56768257C9574AD55E383C805C1CEEE9EA319C55A4\ +119A98839D9C606CAFC075BD588219392C95CFCA2F8B6E7DF01E81DFE17A19:\ +FFA0B110904FBD276074A7585BDC073542F0034E762C00884A0569A6E0058B05\ +F19812F21EB21E481C08F570F263310B9682514B48AD0AAD863E1988B428F8E1:\ +C3FEB8E49005914DCEA75C320A69AF24 + +D5503CA5AC2C07FEBA34D137985EE68693FF2361277A64004DA80FB35099AF45\ +08815D78EBD6A28B27CF8162735C59C70EB6FC670BB1B75A0E22D18EB156AA82\ +3644C15E197BC32C140AC1FA0D8EED8B66A5AABDD8070BA1340064F50918FA82\ +08A880E8197CFFCA0D7A781554480E4980D740712DF402A864649E610608CCA5\ +03B66E1A09F353500753658E17D44A98761D84D34282489CFDB2EE5039AC3777:\ +B21860D696ECA1216FF45105567831F5FD1315CED5F35F21428F9CDD2BECDBE3\ +97E6A69BD6E5B801F83542D8A67C52DCBB2766B7338DDE2299B6168348713834\ +9AB68B13970169672740286ED4F4E0A66050A72BEE429BCBE298FB07E16561B2\ +0E36F5C1FCC4AFFAE0A5DF457821F313F6581998BEEB7C0495296961DAA703FC\ +A6CAA584C049960D0136617174F24549BBFCD5164939CAF8CD7DE9049CA4164B:\ +BA3B88F214DB327F4C47A42B238762FABF73318D0DDC9B5D3DC33C9746E57DBC\ +39B91B4B1E1D755A1555E68CC291EE37788DB23A4ABE2FB465B112EEE06BBEF1:\ +431630AE857DB77B8B64A7737A10FD50 + +7933C19B0664A9A404E294A17F621506BCF48B8D9348BF1F6EBDE1246082E8D8\ +5ABE46D9CD7F6F05C8EB495C6A06EDBCBB1232BE78A450A9DDF6EFEDDA19E123\ +5D367E519C7FD30A4B085154B019B8D31E50F86EA0F8CA9C925D79DAACE28B35\ +7CD8A58B7B478676BABFF33D3EA0238C8EBBEE6A9DC2B9FF1D869FB9B8E51586\ +994320CAA7DDBBD1692EC82FBD96C35EF128946DAF1F1735D247161E6EE649C5\ +9D:\ +B6153EF1CA49763F3C73AAE1E00B3291322E66C5A6014DFC9FB8E9DAB772F89B\ +F1B9ACFC7541D6F505A690AD554175AD596A479AA79A717818200B36C8333379\ +A9E0EDA8356426D9C6CF88BA8D6A2E4924A6E74D31717520AF104B3D4172D521\ +6430B4ED1350AA9E89C8FA71BBA84238EDBB543BB97A719467237AA4472E5815\ +33D213BEB73F12500861B79A6CA05AC7D8FE8082175E2206185A12CE78B10219\ +1C:\ +9071A109B17914BECE4D1A15CCC15DBD3B93D7673DC4688316E20F209A242B4C\ +D234F600F1424294AD432B9738194C033AC38729E47296777311F2FCF46EA18E:\ +616BB9EDC46DECB42DD47FDE2D98F30E + +76503039E69DCCBC4387A31C0D693F362C4A66FF6FB90A2587D9D21A6BFC1FE7\ +38F7F561A3145E7619FED0A474BA9280743EC3A71F8E74F52D7FA77CE0CA4E47\ +8B7274ED1945A53A60317E7A954298EB6CF64921E31051E1BB0AC0ED1B91D12D\ +38B5F80E3D5118D02B6D168B5E7EF256673502709674CFA0918CF9384994283E\ +ED8C31FF1B0B2098787F578206AFAAB591572EEE220AEDAE302A0C4392C5ED9B\ +CC5A:\ +D008E55E9E942051A6CF11E35B4A70B11103819D8C3C09592455DF6C53878B09\ +84DD9128D44787881D8B8A8048E43CE56D009FA26E3C238B6D2D1FC001D69725\ +2CE3DAAC10AB31E2D4E4ED25476E2523F99B19D44897802D8CD4E28E8B552BAD\ +3975CDCB7EE3847B279787A1BAB79EA062AF2934A83CD7A6543E2F2CA9B55542\ +B0E11E93C41652DE73EB476D29E119413D8BA37C25AA31C559D51AD8689DF2D3\ +A70C:\ +9556F6DD01DD1CB5BFF6F98A783DDD7307DF95CAE25E3A037B351ECEA74D1208\ +A091C68699D0109FD41B04C7D36C38D4944BB04D3051246316D7606F8A7C3FD6:\ +C52EAC897B1C92C2ACBF5D77E9CDCF3E + +0E830E756DAC3A93AC9ABD80D932502CEF5EECB6CB6B9C903440D9026A529F17\ +3388AF70A2DAB1D38DE42EB02EE5BCF6C80B00FE9E0A06E5164B8FD04123DAD8\ +FBC5D78B3C5028FEF7576D7BEB80D346958A351B54308D32700C063F0843C821\ +4823A10323A5AE8DBCAC8734AC9B05795F807D265E74F4BA942ED9761398F199\ +14E9EBE95DBE972E51F6E7174702E04C7C42878B81C81335F0BF648BC00183A8\ +EBF69A:\ +B7BBE2A819733E59278E0ADEA206FB156335C366DADB423076690A939E345F7A\ +F2944F9C502B409ECC94BDDA44F8CD295F2333BCE4A6C930255F72A1E43A4E67\ +98912D1E9C6738BFD68E93A8EB83D74C0CA0CC64014E696CF64568D8A31F3242\ +489FE61941F6AD0F9B38BD5B90C781678301E41C6B82F324578F88EF6F157EA6\ +328842BBAD08841AB90BDDB8FF08CA9F2443FE9AAF299076F792FE03380A4DB2\ +F11F69:\ +498BC2D54FDBE02095B0A00BA331ADE4EBD6D14A26F40CF6E96F1C56DA08A282\ +D76EDA26B76D41399D66F91D8555AF54561ED162D5EAD46D96714BBC93AA192C:\ +01CC772A3EBA55EC4E5B5F03C0ABA17C + +44A0FD4C39905A704FACABEF27F0CDD8A2ED0E141AB6F112EEE466650F3A1D28\ +74351198294910C484ABC870E028A24EBEE81403148C4DC2B912A3C36D218A33\ +4FD846E3D0DF3C8110EFCB04FDCE27EFBE2F776691BD4218D3C3370AD5F57D76\ +C09B6A078964EBF9756D50C7910D10DBFF369F40420DCB202E601333C6455846\ +AC4ED3AB70444379FBADFD0549439FDAFBC61C532E7EF8FEC3B39378CB84A792\ +56F714EB:\ +D95488EC9DF7882AB907604B632EA32C98BE5500F9FDC6D79C2630A8CC874297\ +44044B4BCADDE1C86B24E222AA4FAEF13F909D57A495D1715994ED49D04B7ED7\ +2829C8CCC2303A4426F7A17135B33E54683B457C08016A7BAF4B0B1AA825DDA3\ +6968E6180EA33FEF561C191CFCE5EDE2372E05230B7DD98676DF6E282F14467E\ +040A489DFAFA6DF71F713CFBFCB188E861C60CED4B181FF435D7A1F04CD331EA\ +544F789A:\ +65E574BDC8C3C861F0F81E8FBEEF4244E66BEF56FEDAED4A8E76BB2D04B71D44\ +4A1E547BE8E7EC806A716C893D30AE91B0F7DAE1AC0DCC7B079133457B9CBD9B:\ +4B067CE2104FC2BA17A59292432380DD + +15CAA9DFE923DB957602D0D9EC9277AE8FC7603DF72B1707C05E96A9E5AB6E9B\ +17C1C7E4AB57A3495DC3D353A5E7FB29D1764DE841C600B0621FF0AD0AD3FE5E\ +58B674329462EE4DFB3EBF4BAE3B5E23145ED32FD199F206BF8AE1591E9B8459\ +6942745A0BD313AE2B45B77428066C6D0FD3166C6C98FB8B87865F65F382F74F\ +831BD2D2CBC83E63243B025FE0F695961A2E0B5DDF2569C3A81F6EA61A7013A6\ +C7E7109E63:\ +61B18CE005D9ABE43785073DB58262109AF3A1626551E1E436DB6B11DE937691\ +EFC9394A230A9D7AB375072F69C102AFC2B0967E24C6B38CF6E62AF31182F723\ +C425581394535E4FB5FE7C1C95677C5EFE70884E3A137D5DBB76BFAF33043982\ +83F4572C19FBB0070C33C902554D0E689D908800DFE277AF9C0F07AAAB1CE449\ +F3AA8AE0B3FAE7922E35690A969C7C11B45D806CA65F40B614B90ED2ACBE2C8E\ +701AC1B8B5:\ +6694D4039045434C986BFFC8CF2E65A74929FCD8C50CA9CC66089AF5D78D69F3\ +D1CDEADEE07951AAC601D30DFE6C0F919DBD2818B77E8FF68F6F22AA51ED658A:\ +569097E3EF1545EEDFF918679624C54C + +61EA089EB8475C4738FB91F5741D5BFFDEC475D53C2DC443F353659BB1219582\ +F67F18F3C580A8C7DAC724911D482034AA5742C56DFD3650E513461EE5E71DE7\ +17A2C76C0D284925BF627ED228AED4A47E9AE12CCF8BF1B31D3FAB701AC1338D\ +728E340B3321686DE327D74E81B87A1FDF144EFF120106A0A0572DCB55FDCB8D\ +917BBA5CB49B0D602A3400F991EACD3CCE8771C1E1A495F7AACACBBF4106AF41\ +8F9BBA5771E4:\ +321D87BA6DEC0981D1499FFEAB9141FF884CE06AF69477923F67DE22EB3E38BB\ +250C67FE84CBFD89F43CD9381B980604046602B9AA9F4B021B433ACD69B400DF\ +32EB486835AC655BC2677E6128A3E5E038022C627B332EEF2F9587B7754B4D86\ +7D0D321AFE23AC60928D3A625CFF873525EF77CF941DBAACD7B56859D0EBC693\ +18DAE44FED8B48ABC1C8F65DB354E9C2ABB26EDE74290001E7024CF7FE812A80\ +1B448B5B44CB:\ +56E4DE4690A9C46E1A2BD088605E4AAC59BA6628B8AFE9767A4A86B97DF7F254\ +3F4FAA1F63A6CCB9237491D909D11A38E029633B4C98F7A9D6291EC8AAA70035:\ +F87BA2EE1032135EE28BA4194C35AA92 + +F4DE4E8FE4D647944E70CABC8F6787CF0156E743D6F3B4E3F27D0E657E1E6D1C\ +D52F150F98FE1011DABD857C393C1486F4DF8CB2C137F114D97C5F920B1515F8\ +3BC052B9A2BE132F0A26116CCB2DFFCE3E8F59F9E7851EB7ACEB35D92DCD3BDC\ +0433416BD95D10FF72F3D8787F0C165CE6F46DAE2321B3826543683BB1A22E39\ +9CF3D18F2B44A805096EF15AF31FE70B86E24AAE7C0BB8EE124C5F8CC894348F\ +D1421675CE9102:\ +711011467AA91B37B7E949CB306AFD30D35C3162F57D2064EDCECA43FE94F91B\ +90A70506FC0BC9D24D0AAE3D3845F46440E2EBCF6E9B1DC2A0D9CB633A872CD1\ +91F9CDC7F09167A2E8BEB18EA6C4FDD214A261A64F81A847AB87A3FB8D51098F\ +D429402DA76DBAA038E615924042EAE29219AEDD14859A66222A2F7286507F92\ +C295583787756972F2F5BEECE05BE8D76CE08522AFB1F582B10947BF3B1AE594\ +3D3A89E6486F26:\ +BFA826E4AC4DFE776D0DF8DDDA39793DA889F672D5FB898B25B285B3F42BC784\ +325E1E409EB4D0B5DAD7F7E42164DBC6BB892FA87ECEAE137EC3A0ECD2484F42:\ +FED7CA3DA1BCA3994D0D3AE147E3F1FE + +9BDF21BACDEEC9C34656B418A5B9D470FC9A3AB86C68990A86B1D4B02AC6C54B\ +F88E3CBE9863AE6B8BDDD3EE59DFF09D81FAAC5AA76ACB601E677B1009A995FA\ +394DCE8FEFF5C3F0374009243BF87F1FC941B933C92D0359766612672D6A1B3B\ +3C29763B4D7F976457C2A643FEF87CBCFB5257FC60869983F901E7E237AAC0D3\ +CAF0F1780E0E2F72A9D60224FAC80633FA7A54688EB7E045D61D6684B4467797\ +E1C4ADDA2A27D031:\ +E9D79BCF79A2A078664921A91E2E0173BDD20B32E0F232FB9F0518C3E495767B\ +625C554C33D7E3A81865B6624B5A1899EAE6E5114BCC28D687FBF5D1D4699948\ +04D571FAE3F08F067CAF4D398C74893FC7CC11C732EA5A4D0021BB3C364E82B3\ +BB551C71AB76E913C6AAECD9BCD4FF31D0110DE721A5E7CA5064705EE2030853\ +97B9DFF75765ED9A421455C18F3C1FFAAAB0C3E22760CF14362FDC103DFB3BD9\ +7F7DE86FB8302DF1:\ +A6D9FB1C7D20E7E3F9AB81BE975B7674F7BC5A4DC6FBFC0F485FFB634FE3728E\ +90AA7C2A76010209579B4CF9636C9D556A0D8FFC97158580966786E0FA3339F6:\ +E72B8B864E1AC1D51B6E0396D5778F2E + +C615DB8A7FBE10BD792680B7F7A7E48A70085D124BDB7C124044EDF76E496D44\ +09BFBD10D139D1D22E0DFB52D02F3CEC8BD070A9C0638B03224ED25A2C893452\ +F4B472F7C7533068A579734299877E6DC52564AA0F66B1E71A58F4788E83AB8C\ +A7F35315B2FA08EC34843BDAC9B92D845F9597674FC6FC8C8541384A3C1A1B3B\ +B7E0387381F9A5B2BD498DD59AA1A08E6A6A388440C5086B9800B2DFD0C35F40\ +29D13384CF63C3469C:\ +66D12F0BDF0BAE2D12CF375A16552CAFA371FB4B79B474DC46EE1975561AD92B\ +F0A5B8F3F72CF1D714C38A345A651A34BFFF24B9ED6945D6C08FBCB6B8508888\ +08AD3EF5EFDDFB4B4B43A33B250AD57D6313E9DC5E02603E0DBF72643432AFE4\ +4397CB5FF4B04D318DA22C85298024B359C61C09459B09C95A679C81657E5819\ +A6A4B2FCEB6C18B81B4268D2642BEF0673537AD4CE74450A05C3E830E9472E11\ +A97FA954AA443A6A1E:\ +0876B75D86B0A36967F5661E5A0C95366ACF00EBDB818C98C0B37F67DC1D026A\ +84BF9B5D6C1E33695CA4CAA9645F02C8ADDB0177C7716569FED8190DE3D30FC7:\ +3670D6E827B6FF18102339B4CA24E91E + +4DAABEE4430E71DF544C7153760D76529E89A09C83354D8D3525366DFA2924C4\ +A9423D196DA121B7E0586F6E8A05937C99984A15C242CAC0EB9E461E1F38222A\ +27FD3A580E56B119B654A5E28124EA01401EBDDC252926E2FCA5E89189608218\ +1C9E611CA9688E0BDB6978936518C1F2413DB9E27E54B1F01266A56DA1F75147\ +19AED12F6FC127D651643886C21AEBD1EBEB6CE0E2F1B7203ABA4266D5B44F38\ +02B43A08A60F9734CE3A:\ +77A9EA4431E790EE78704CC10EE82F2B5C4A43EE8D7398CE0D625EDC68C3C378\ +143F8A3DDE0E0E72D5ADBCA3C0C517A2F97B69B0306212D448773F8B62BE84A9\ +D2674B83DA8820ED7D50B430148EE4C73305244E2D399A0EAF27A97EAC959C20\ +9841CC030EFEE1773F057A87711CFF16D749BFF94A1078E0BFD0B619F19A9112\ +15218E114E02832AEC05239345A785006AA1C1E2EF1124EA1FD7CE51D16D4338\ +19F4E2C4C5E8850E7267:\ +AADE70F812A185B4D67FC5C427481DEBCB79980A027C5ABD52C89650406065CD\ +2CF08437640DF24229C21630B3266031B788B2AE460BEB1C7F34FFCCD1C266BD:\ +05B5EB69C7A36A842F6A45DBF6613778 + +E5D58C8D66D6C1DF53B695E13B0F6E93E7057683B59D0DAA79014121FA3DF062\ +F56927A97D17B28AD6E0A8A8E83B9BB0E790A666B2D7AE8FDC5256F7C0AFB492\ +7D8555842C9E19C97D131BE5FEC8175C2EEC3CCFCC1C8B5CEADF2EECF03E3F71\ +FC8977B439693B6E2DB84E679EFFE5C0AD2B44560FD7CCB771DDECF7424B9189\ +916310B3E0FF79814E486C62D418ED244A31B7618C74039BCC04F021728E28B4\ +2D607A3E3C0F31FCEA10E4:\ +D487D3F8D0DC54E4EB2A3777A55E57C87D433B3854F8495F26A1FFCFAE49C756\ +B792544CD401D1DBCF36663DB13002FDE299307BD725CB37D6C8280E3B20F5E9\ +4A361F10656B0EEA72AC11856CBC5A73869365B5F8FCFCF1F3F8ED11AB155638\ +32409CC58A4426BB3F7CF045114CF7F9DA17CE656BC6A2E5FB5A26E2EDFF2986\ +AC4C6A44FCD78DA5809DBA5101416A5AE721965A975C9018788DB1B353922552\ +8538E94B684005BAE66120:\ +0C7FBA046B2175D2B3BF6525C5105A6BA8E22A2BB2E690A7A76557345DC5CE80\ +7C4F77C663794B302789C3EBFC45C150253DF057C4807BEF45BB3AEB57D27866:\ +A75C7C67A7226C4A4E172D168F7DB0EC + +725923CAFE2455B46A3813C76B715AD76E8D6CA4CCAB579F0211CC0B772C157B\ +7010056014A6FAF65CC52991A1B3D39E4CEDA5E53B82F9A8335E774667671D13\ +B427D136C76F253BAAC9F960F4C0367C30C1957F4A22270F25092DD747704C30\ +9F19FFC8D47BD85776F37DF72DC15C1BFADF76D22856CC28B1D84684F2E6EFDE\ +8C4E4F1964330560CFAC1F7B2051F2F1AAEFE6C46A5531D92A6ED61D3ED651AA\ +457E829E06C71BC366820111:\ +DD9A6B60EFF42B4E2B13824037D3F9BC1B056A74C57568E346777F48C69BCE8B\ +F14D538AE10935417F12A2C6458B918974B43A9E31FEB55B417C1FF9280A70EC\ +B86CA2DB8A3D7192E0AAE59F05B3975215F5B5D03D84704D52EA9ED6DD4FBD1F\ +1BFA8BDBEFC81BC66ECA8F2C29DC363782069E2A48CBAE2DB493EFD985E290A7\ +64F68F2923D1471057DC7140F6ACEF2C1496646FD10B3951E0A98C866840938B\ +2477FD8C8FB894916CDCAA88:\ +1C9DCF071F81ECBB4386E500216795CC0979594AC95241A0F2F202BDCBF8B771\ +76C548C4F1571F1691082BFF1E26B0E7CC015915DDF2760A38E16D55B8C212F4:\ +585958A7ED4EFB97BA1AB7A92522D8E4 + +A42241E600E862D1C77E1436444EE3B8A0511731401E818D10F7F1B9C88AB1EF\ +34069B3871977FAA5F3514B56126F628CC74755A945E31E2C06AB83EBCC999DE\ +1185CDAB0612DE962CC5FD8E9A833C79015E835BE196541E8EB6B67E9B14F9F6\ +5B667996B2B303DB5CD970C959BE43EEE4BC87F6F8515969131F93BAD5CA40A9\ +84C5BF7CC7BE8667476A3BCE769ABDBD38247B3C1A63B85137864FAF437C2C32\ +A4314A0A178B224F3C3FB91AE6:\ +AEB660ED08E1E60446F7E33BC58383A8657DA89D98F8D6502E95ED5E7545676A\ +8872DF494C4727A2D2A1A3BB98E03244D025BF8D6E236EC2B7269B88ECBDE6CC\ +439021B6899F0D95317D46043A61F37F13B95A6FB341C9D9752639241C29171B\ +71453D0EDE1FD8A550463F1A800591D707393039A24381E9D374336B488739E7\ +30F31D8FDDA00B3080B7321D3982EE7C249CD44DF0791FBE1F6AF49DB67089C4\ +BAC7E11BC91EF0471BAE50E6DD:\ +292D541B90F12BC9D268B003B8AEF93C70359B399071DD816019478C5F7AE956\ +E26F04EF8BBB550C8696D648BB34B20AFC4B6297738A20CF9605C6DA9918B00D:\ +6AF134B839C4586554F6B98F18B3C39B + +6516603026A028BF08B715FA5093F2B413629C9D69BCE927B0B36F1EA333376F\ +C3D1A34CDCB69D85B387E5446E04C6118184D9792B8C95EE7A571359B49C56E5\ +EF20A4F841045AE2EB6EF03EE7C7CE9AABC2B7AAEA125EEDA2C9671FE9C96654\ +599FED61D0D757DACAF13E20D64BCACDB2F0ECAF43A641BF009BD3329DD96295\ +28694B8BDBCC500795ADC1F079C4C4F8533DDE9518BE5557D882FB0CF9564254\ +0F4C74E65493475C9D090DC630A9:\ +5704C3A40BCB401405997DA8ECF098B74B279E95E7F3F0146C8BDAF118B858E4\ +6A4FBCAA54295F374B922E35A8C8E0F5C5B85CE0324F8DF48D3C5F14694887DE\ +EEC108B317FAFEC0D16B46BAF7BD5AB433913DBF19F4B57587AC1A95BE356878\ +DB5F3A3B67EC35F777A0892652FD9D7335E737FB7F6A8558DB61D50E1B621D34\ +73066BACE07091DC1916AE80495606F483B055D9D557B22AE00012893894BD27\ +4741501220A903A51A8157A76F0D:\ +814C64722D7CA27312FBD5032C9C452D049506B169B1702C0167D2E6263226DA\ +3F3807C80537D28DCE20DF7272FEF6C9B68531FEA7A5636DD03352BA34A82C84:\ +5A0AABED7BC74F505383C8A83799C279 + +D47D85E7D6B191D37DBA9080DED2BC59E19D7F038A8349BFB9DAC98D648F6AC7\ +D95C3B78D5672DC70192005C785BF9656DBE02ED74CAB53B7582A82EE67F00FB\ +B1EAAE04C77555807A6B7A8BC7BDAA66EFBDCCB104B33ACF797E08A85E2942B6\ +A4E759BBC941597B0FB189F57D85A300E3A0ECF56F782BBC487E714A47B8C5BD\ +50A506696C9F1C1FC0383E2235E6BDACB3E89D89739263BE47906CB893C332CC\ +F16C52B0D11AB7839576FBBD7054D3:\ +91E239A8F026CEBFD5CE2E25F44F2658C7F204AC5563FA454C966BCA94A0467D\ +AE4AF239DCAEB3D46EDC25F474D2E6A8251660748C69C2CDABF7F6CC3E342147\ +6F533631055E9E519CB6C5DC76CE2814B6638C91C8AD7F3D1567B37EF2B58BBD\ +CEE30C3B2207A00AA25C02A670E2D3305040E7B492816C9E83C29090BD2C71B2\ +4BE4DCE9123710A56FF1910FFBD7229FF82BFCEE5A66043CDB1AC06416070F9A\ +C7A6A7D7014DEF1E64FA309D4E2A31:\ +58F525BA87C99CACA875FE49FA6CA0E406C6D6A4437F7A5F118350503933DAED\ +77B7C64F01750302AEA446BA04AEFF44B58953F32DFEBD1A95F537A1404169E8:\ +32352F6E9C939DFBD0CDB248266B0327 + +27E638B2D906D09F193FE1588D325CE0DDA1A1A028EDC800BACB847FF74E6A7D\ +F41E525FA991203309FC49375B1B39EC57F7BE082C80BB972B3D8E88794F95A0\ +882B3868406CB4E02C4D3DB6B45FAB106FDC56F32E7E39E4E7BB6B2F24F22245\ +23E95D47D24D95A1F300DB37BA4E8141F4B885100B9783783B4AA38539028FFB\ +735EF697EB9043DA064DDDD8E8D08BB0442DE254CB604E89F7C7D82FBF366F62\ +801FBFA4A2B01C3ECF26C9C4C5E0272E:\ +22995D449720E1E0F27F3CEE80C2D8B821E31527A48E72818FB5DC7C5F7476D2\ +629D8CC26F64DB533CB1342A965C19D32359ED7C59ADFE2C219ABD547A9C907B\ +CDEE220DAD3156ED92B5A4B92FE6023CC632233142AE32639EB74A7EA47A59C3\ +837594C2BABB21A51DC47B1F19D6C0369D4DF14C00B9AD9267779774753D5059\ +13528AEFD93DF0C004F10DA9163AA0C871DA275531D74F9EE3099BE82EFB3216\ +D80A2DB5AE0CAC7F3007C73E493DDC9B:\ +B4915E26309027540ABCDD44373B0962902D039EC5F2C8D65EF6038F9853521F\ +8B8CBECF748B309BAB17AF2DB24515C39153233D6B85B61EB9FA4122A943277F:\ +FB9A3D0FCF6E73F05FBEE5CB85F1962B + +66148853A971DBCBC5541C6EC2AA9F439F5CE613F1FDC1F764093E5B4DA40C6B\ +B7DE5605E24468CE0C890B56E9286DB8646BB1B68EC671ACEC0D62137DD2D714\ +C9E6D21AC97A1044CD1B87803C8CA697657122B8795EB73D6BB9A83BD5EB7E01\ +BEE2614A528D20067F7CEA20A2CF6BC8371511E9A68C922C72898EEC6D636B8F\ +3AAC321EC1DF477CF04D3AA07D6581C846633AFA18E5C3A1D6FC3F1A0D0D4913\ +0F52E497BF34DCEE95E9A4907A525486B4:\ +1914CF1496620C8879F505103D41BD647450DD9AB88886DE7AFB7A607FC71FD6\ +13BA2D8FF0A5340CDBF4CD65F1DDE94CCE6CD8206B6039E5EF17C90FB4CBD2E7\ +186894109FA8B7FDA6DC90B0248344AB2C61EC746330A2D71B794935D8BD295C\ +2DE123041E9A54E12A042611DF5A7CEDAB6E43D7ECB4AEE98435772795612FBC\ +E8DCFCB415DB01ECAFB9E93ACFDE2B0FD7B4F2BC6B30BFCD3292EA1D96BE61C1\ +542CB2CA2392F0A10A13A362D5E50F6F9F:\ +F1BD3EF165421B150DB578BB945B77D81DE4801B62577F1B9392F33BABBB3733\ +0C044EC6CF464C3E9B87FFAC2EB150660F486BFD9554DFDCEB772676C45A9E8B:\ +69BC3A2DFD5BFCBDCD523D3C774D3A1E + +9EED8E0BB550F5CA3D84E1D73A8AF5C2AADCC2D0DA607DC25C801F5C4F1910A5\ +E9A119C5E979E0C87E1E70EAA6BA18EFF168C0B38E6EAFF8D6549CB2C2D9BD35\ +B5C3CE74D6B836A5E1A4CBBE60BAB759C0DC3161D2A0877A3E1E93DDD0593AFC\ +955229B6AFD95497EDDE5D518675B11C645105C989DDF00D39B32DF0B9D23395\ +7AF786D1AE6351FBDF768EA4A0B36E7E4731C3A8FEE0C4DE6F22706FD968B9E7\ +853261F77B115195D580BB116EC94D1CF60E:\ +9DCAEB90ED5B080CC167C05F7172A1CCCA7A48EA953AAD28EC40357FFE7AB3A8\ +2E00A0704DD7E2FD2CA8AE715E66EF2DFCEA1561E8F454487F79D9FC342B405D\ +BD38F0F0824B72341996F33FE002837C710988D24759B9EB57F55B488D7C01FC\ +8ED053726766318DD88DD954D586754FB1737E820D984859731C4DE9AAB23E4B\ +BD79A2F4F6F71E5F52591028DE8F1819D2B9B141C5F52B47DB979187273FECF6\ +A5E1572EDA6A7E4702228344548BD17FC19E:\ +E5D8BC2238FAD3A3C3C565D1CBEF967BAFBE088DFB95B676C383B4699EC71B4C\ +F74B89828261F76EAFCB0A465D111C0FF74417A517646A1F7C96904991DD5B16:\ +0F1F5163DB41F49F89BCE003EB792854 + +CB36C255CDF2768A8F29740B45507A28E0E3EE1865A78B6C35666C6311B4FC5E\ +C134AA4EF3629A497AC3BDC913BF8523C439436886D1C9AF3DA480D0CF6C3A61\ +6547EAF9486CBC4F99B0AA15D84EFB8919431AE33DB44B99855486DB4C0B5CB2\ +0C85F73A2142D18D89B771F394D78DD30CA9903830DFE140230F6F2A43B19F83\ +CA3FBB62358CA6A33F264DD31963E73ECA7B2DB42D7F62C04228596FD670E60A\ +20355A4B4DEC2FED6C653F89C4E21D2C19F104:\ +28D0A0033B0578BFC8E60566F79D393E96B76AF08B8F55771DFB81D7734EC27E\ +8241FFB17EA4A7B3A7932B96D52107EE052C94FE8B8DFCF25A7D8CE97FE88CEA\ +A9C10B3CDDAC754DF37FC30892B3DF44962B1CBCF25A0F0F1F0C1312B4791E51\ +882773D9999F7599B8C967C94D76DCC57A470DA60A49E47C5E46D5F8A47594C7\ +C7D2DEBF234307F55CF027D2E550055B70F16787E29A9D917A48FF0D15121C0F\ +55248720975950959B59C0D24053033F641E8F:\ +A187D9D49AC60D22EF8B3D47E295C028EC4DF05BF802EB6993A0BC52A16239C5\ +B949869D0B4148C93584C5B77D9B72529DC9031583EF5BFA790888B84D504C60:\ +55E37CD32E66714191798C6280AD75FF + +C38C7287D2765DD0D483FC4F41FDB5CE6DF637B0E792343E95F14CF4A7CEB177\ +5B01A3AD4E63C0B77ABF6640C6D0C37B88D3B4EE9AC568F7840DCB00BD30DC6A\ +3B1A9C67552FEB0938B5B881F2EAC65A56E524BCEDF332272D88F241BCBDC417\ +68C64A5E834F7599526D27E5F63F0C94587B512713E816689E7B69A3FCEEA707\ +59A0BD736D56A735C1AC3929CF36CF38C3C1160FEF59698B5544486CFAF53680\ +FFBA6797CB4D7570EFEC48E0E7C097C4F009BA6E:\ +201E4B369B955710982E88F22E2214D51AD805D99C3D9F2C43E04F08A8144165\ +0775AC589BCC4760F592921222D772E672F1247A502CBE2405DD4432EA73E2F7\ +5FFE441A11D0C6F25C6290A99C98FE6BA02907671DBC94F65E4AFDF6D0E63A6B\ +D2F7923A8D3BF2ABCBF3487D37ECFC74F5D0E2B6646AD9E6A04B273F6936A2EA\ +43B49512AD9D81A793286A7BA42C27A04B2258583B6A32BED901F161D3AA5F50\ +DA26D33539C093301456EE68254894F4B1DCEC66:\ +AB1A21714751B51353C601C85F2D5DC6729E59601B14D2E2020393A6CD0EC9D4\ +9F886ED07EFDA183EB93BA58BA704DD9DE5511116D806071C83FF1D955D20014:\ +9F9F9D6FB6C4B8A62E97C7B5D67974E4 + +7625E6E5003EC257F2B9255A341663E01BD6398D2C5458DC4C0DE6B9A77D3A45\ +5D75193B1F33E5CD1D8B16C3386BF4CBB356C299F8B24FAA389B297EDE289F7A\ +8FCF4DAEBD45918D9E98E3EA7EDA78115E3826BABB48E786444A691969C6C185\ +7D6B511388700285DBBCD44336B89B9E033EBFCA3A35093A6B41F5FF54495C11\ +D2C87FBB43168A89C10E755BA40156D25926D1148C97A0A0412B952821D2C0D3\ +25E6649CB409201045AF041820248D78C1D00C95A1:\ +1BE68233BC6557601760BC9121BA5CE47D6B911C046D4D2DF5EB111C66563E19\ +74F88C509F97703A4427A2936AE8180AD0513288530BBE5365EBA31BAEAAC622\ +6DE2D1F093956B5A97BD0FDFAE55ABF54B8A91197805899DF5BF6F84652113EB\ +27991887A560CE3A093BC74B7B0A25719E5DD2F3B07D5A7831EA0A99C6A16A6B\ +E527E4AF6CE7BAF5C7744F27B98D9E2F9981246765913E537AC69B3E04D31B5A\ +D5F9EBD55664A7DD7ADD8984984F08E64F8598A766:\ +AA6935EDB7F287F5BF42A259EA65459847631BF11DF4082A0C2702278ACD6ED9\ +DA5C54DA6B10032CDAD18EEFDEAFD8749B422B04747B3D4DBFE22C1200A1727F:\ +E9514BA0F3B74767B55EFC4595A2F122 + +7DE539616CDC8A30DD4E001B3386D7E4A1F61BCE4FAFD5C16FCF2E23F724C39E\ +31B2DA02A91CB4CFFDE8A3D0F95710D07C6CC95727C62F2C72B243740324D0AE\ +EC52FE624C9F3348C996756D251EE46E4764D933EF36356E4B409FF116F08E5E\ +C4D765DD048D1BC49B9A02456A01261E877D713DAF44500B27B0C2EBDBBE0020\ +AF0AADA465EF984A89ABCB6E74D514188689F0DA488EB0A0BE9B7F9A46F132FD\ +11EB69277BC0ABF65216F7745250FF64A9F4B5D5EF62:\ +49A858D82A3D9C7B7A38D4F7C9C2961D83345DA52C75DBAE7BEDF317DD540784\ +09E7B914CF2B08A080ACE50654A87454247978AE5F1AA86C065A5EE8666FD4E0\ +6A15AE11EE6388811BF94DFA3FFC3F8ECD2ECDA464A57373A79C06CA4109C593\ +70C9DAC196BBE7063FDC4DA048E5DD50D216EEDB03DC1D52DAE59A32F38C50EF\ +19935111EF3DDF28E46236DA0EE77C2833FCC38E465C8EC67DCC3DC2C28873DA\ +05EC0B9B6D651B4CC2B3245B4479A04A7EBDCBF21D87:\ +4AAD546B1D34CD5179D90DD836B6E761475F23CA09ACA77D2970344C8D6C216B\ +56B8C9FD859739234C763546EED4E7ADCC225829C8E9152A4BA31F7D16010E04:\ +6452C6862482AFBFF4C91F74F679CB10 + +8F986144100B7EAF52726D8E75E605D1F65DBEDE7B19D041E9C79F009A6EBC13\ +0A059DF15C1FA42E501A87F112C335D2C8FC4E9B95267B06F7327A9BCE3AD29B\ +9E44F119C53BA3238E77278EE6CA3B01AF2B0264E855FAA245FEB8B602D4F803\ +31CCB7225971347061CCAA19B58C25B234B84C99330946360476825E1B71A22C\ +D01EA8911932A2EF373E4EF0B6DFACA348CCE90E6EB8D51C2816DAA66FEC8A24\ +D2EFAB20D0CEFE91E4566A613695F6016A29099B209D4F:\ +2099C28E7762689917BC6AE46C861C3C633B3D74C7DED7C005FD6AD6E9381107\ +10B29F8D39D1DD74A114A4B4EC66890769D6F596B00D8A48AC4266419A379E07\ +43F5CA3AE2EAC7BF7BED592FD62DC0758475808C0BF3CBC60184B9BC0F5D62D2\ +DDFF525384916C03E5DB56490711FA1363B208DA8C1FB70E17849804E1F3534F\ +B14B1DA63B6DC02C4870A89A9E332351AAA91256E917F96FACF4F55E91968B0C\ +55FC2ED242104330F91D30810F503B1DE9CBED1BCD6D48:\ +E66CEAA1B5D4E2BC78F7E03C6F86A292FE0392806D8F9C282C47746926A54904\ +4D47254C861A9427CFA3A33CB685635BDE03E61B644544E65055A25B873BBD83:\ +02863060B296D8EFD8F4A7D266F968FE + +BEA4C330CAE5A15DBC4E0158F6D37B5566F75395BB7596C13552DEF57219E86E\ +E1F2FE2CF7E6AD6ED4013389469F027C2B6F6AD77EA0E914927460789F8E06BF\ +F978CA7968B3651498BA72BE1C0F355EE0F44EE1B8C9082D8A97BD11FD9E8253\ +4F953270B0B011CE2BC49DDD8A2E7F8DB7CA6A157A40430869ADCF23C0EBC174\ +2716F5DA731EC2B7EAFA0C631A78F3FE7291B93BAEFE1891FFB194E748A64165\ +87302D8829EC154C0A5D2CA11603DED4A0CED38935696882:\ +B30A92B97E9D0BFE0710CDA1E1A3D7587C9D826E98B0E154FFCCE257D7957F52\ +DDCF98C0B0189C64FB0A39A5826AA79B4C3B33677EC3A4E3D5E83C00BD80EF50\ +48E30D046C5FF5CA46078E162F2B00B0CCCA53E33F1E6D7299E3C5ECCC8E501F\ +7DC5CCBB2EE3C9E71F631D262BB75E040C62AF05FD9053105BFDF8AB364E8E57\ +9C730C063D4CDC736DB879342278DDADB53FE897D9F08C58C77749E889509FE5\ +47692ACD2053BD90A0F4DAB93D61FE75EFB8A59F5EEC8DFE:\ +23963ACF25AF2227DD843B7409FDC3DA5E9E9316F81EE8B5A2CCCEB1C69F58A3\ +22F707272DA8B4C76E0CFF5F965594D17C1DEC5D44B1A3950837D73A6C95F725:\ +ECAC60D619A3E3E751D0FFAD0663AB1B + +62664913FBB5B6456D74DBC567A448DF9376AE6FCCB0F38727BB5CA072924B38\ +7C8A3537DEA6B5513DB0B013E400A6BFAF7E00AEE97EBD6D2A214546593C6F14\ +8F0969317A559923E27FCBB196267B35268468F4FDA36D34B4572013642F32B6\ +9DD0A340E55D57477149F119483C552D6E5145C5AE95ADC85277DC7ABEC1FD96\ +37E80CBC7385B81AAC1DD0B3B900D3C9DF9BC074420373B8DE3236BE220B0BEB\ +2CF1E8F764B9994A3A77EE53856C9894E0A2580749E133F4C2:\ +C7D2A1E0FC1E4CD8BAA5EDD7DA174699990711CA471FCB435232AEE487CA370B\ +84AFCF6515A13ED8311BDE1DCE8BB7044D96F6C9874CF2763811099F5FA3554B\ +8EA0D43016BC9AF6D4D77129E4E81402D3A5DC59E81CCEB5C69F96CAF9AF52B9\ +9E9BA2BC7CD39FC98A01B70A0E0FCE3D5967DDB47C1809AAF3FABC75D83EACFA\ +249CCC1B245FF3E19DFA351E2E87F39C30DB4E5735A128F717A637801216D7BF\ +8AA3F4F299CB7267DB3DB2D5023A575B6084EF609E3410DCD4:\ +ACA7EE3DD9555536B650F4F53F0BA1152D8F60A870D55D425E041D9F9AB94FA2\ +CBD6971F6464B9F489C03F0CD5DCD9A019BEB956C17B6DBAF5C2E04D16995A91:\ +543D3D2F92BC46A81426EAC0CB795D69 + +C3C494F351BF2D314A4FA0A5A8E0119F8E0506AE2F030C75ACE586F3A0A9AAD9\ +56467F81607F3787AD327B11E9073F2C750AA1069C838A5FBF57352BFFE0049C\ +A63718DF8B9272F20E7BEEE83DBE61AB8436642F1D05D2C8C1DBF607488CBE45\ +7D57CF85C249F1D5EC6779A008F698CE8DAA4640B4A18C99CB6E21DB641464BA\ +3178064B8A49FF4F997D64B2C1CD3E6FCC590501AF2DBD55E4BADE852AB17E8B\ +80759BCFB24E9B8C0288EA1BDBB14B03D2FF32A5FA63CEF6E32B:\ +0E322AB41B4454267E0E0B7024AE969089C272429B389F74ED19065AD285081D\ +070CE8240E6FD0BF0C4AA4F1DB361C22634E81E3973AD9354B8DAEB208E9F6D2\ +9EB44439CF2E513019E4B3C7FF09CE129559462842C478608BBA469A8F08D608\ +7D8D2DAC87241B1046A3F208DA0B5F0D3AD7A6A20072B10B3D36BF45C67E3CDE\ +5D99EA175AA9B84BDCB0424D821E403093732DFA97A7F65C8D68F6EF21A7BE7F\ +AC92D7E7A192AD7DC7460FBB2ED1E0DD0225B576F1481130AA02:\ +D19F3D8BBD36A2ECA71AD0FD1E03CB29B66CA129D1517552FC28A88FD866C239\ +3A9140F010115225190B71D8E48C502F249717D002D0AAF0879AA7CB39862FD3:\ +2C3C41E91B8680B9A65C23255CD0F3A9 + +B9C3725BBD665B4E0A5AA9663FCA7078CC2036B7B7E9F2955E0C1E82257A5484\ +D3B4A20D9EF0437412DCA170507ACD8B48D576F18113AC9D191435EC91C6C03C\ +2E81BC3945477320FB4114D4AC917014341CFA083E25A7AC0C28FBA6309E7F99\ +6EADF2B641B156A7C82E68878251D2AEAA5A6828AC2E157B62A2B16409C25D09\ +EE882148C0D184EEDC8F533BE34585E6A20559379E6AF753D9899F65E87BA1CE\ +F8E0BF6E3CA80A984814E9E87D004F81BF2F8575D159A27090AD7A:\ +8AD45617139ED7C6DCA516B45F0B216F5AEB276043224330CE8D418C82AEF428\ +090055E1BCB54860BF0DAE0A344862EAEC249B92DBADCF931EB157A98F857189\ +F6C558696A797B23C224B36E5D94E36CFBCD2A9228A71F732EB77EAC86BE4343\ +F165012AC4AF8046214C3CEED46CF29C5C05CED26EF65E3E301582506394E92E\ +5885960B13A2E1A7F543B6757B36D17A71BEB2D8F81FC7B7EF7D3D6E9ABCCF1C\ +6983B49B4D3083F4F7425CB7FD842AD4FE76757BF3C5D45EC1E3F6:\ +637A99C167656B03D87D8C25DBE63ACE3F771D9650E7B3E51EB800B1BDE1D1AC\ +400DF68864CAC55B5116C59C7493B5131E5B9AF1A76D209F55B1357795D38544:\ +B0DC648EAFA497C868805B7FA3E20FB1 + +47816E0BBBF336A85EA59E248A3BB0FE6A7642C9E85F177D045738D642D5FB2E\ +78531AEB81427B829C439A7A305C020356DB936B9FEC36AF4E863004F329799B\ +3EE3916C01C6157F637296864516117E838815696A9787423ED8E3F0AE8AE66D\ +F8C3044772435FCBC630084D31945A4AADF087ED22B178B5DC8CCA72BBB4C3A0\ +BFEFA407A3F9C45816966CE4910054D9D06F28EEAB8CC9F91004A5C89B19FEA7\ +70B0942B87F6E795556A8E4D42CE252018E908273C442606244A3C72:\ +4549FA2E7E9E84F05256156EE62A8E16193261954AEFFD85C0EA3AB1A81EA1C5\ +5EDE1DD0525EDAA1A30F5A47666697E54602A8343AD642848E5AF59D89340D89\ +EA685478B738804C7BF108A964B6AFAE9C60DBD8AE863107722A877DAEB28924\ +B1DD946CA03FA3F2CEA414A4BA157C187A53666ADE8AB3B9FC163453CB492938\ +884ACF0DE9002511F41246A3D871F15B90A813189541EF6C6CEC1D91F9933C80\ +C41EDA3775A681CDFD4B180402538B925901390CCFD7FD827B3586F6:\ +19CA3AD5BE5FE687923D51770953F1A8E94EDAEC453F43ACE7FFA2AF41BB18CF\ +E619F1D53B86223A444DFD9C3033C51AF5B20E9840EED823180FA574407B4E42:\ +A84B2B2DCCB8DAC4B99040F05A69F77A + +F9B097CF2AAAB035BEA4DD3153A397FD44179D7A7EA9F6ABF7000B10E1AAF022\ +4F40B5767D9A2DB43BBCFD14D35154AD975061C9423AEE456546BF80ECB9FE51\ +B0E3E894D39AF72B8A589352E4094FD71A5EDF6B3290529012D20C4B946B4C9C\ +DC30FDBACFAB60B9F8B48555C1FA40866F2E6A7B61147035A6B97A0669A0668C\ +67329E4D1AAE9C599E107C9E15895C2869C2DB70F20B8541A8238A7918829160\ +FD31854D2C9F16CDF0EB730E60DA72E16FF58BBCAA37DA0A6FA8970AC5:\ +AF1941EADF7EE25C41E40C9CB5206B312C1E3B568825AC2CF2FC0D97ED98978C\ +BCC713BAAE8ADCCAA654A029690921F766306B886FC970115DE7E38753B14B0C\ +9954587826AD95F6CBC27C34BAB95EED0DB93F082F8AFC4BF1A9FD9F3B906227\ +08FC2B14E81460320A4C4D8545F30D04EB5393A82E1134BCD183E6A77A56C4B5\ +C6E9B83DCFEF8262B08D32A9E8DF9C033984416912C93AD09BE869B043E86269\ +8D660ADA549635D9C9A8D45D40F26B5BEC11396B480243332531B5F121:\ +EA4E575BA26D7118D5652C6206A0D552DE2D60E39569D87634E3F130BB85FF39\ +E5E72877B8475AA59609633C378CBCA9D463B523BFD221833626F35C9768CAAC:\ +0A232936E17DA9455384EBA191207CA5 + +93F7C2B2EB2E8C0684F0F60300ED17418275F09A7E826A61DA4D28B2B0D72A20\ +9330DA4694147DA1957D761E3D50F1CFF760AE7BB222E1C1B0A8DB34E156AD45\ +12EC4FEB15236B580CF45CF13DB8379C6E3EA61D506CD6748312B321AF52BF58\ +3AE86A14CA2F22FE8571B8B7DCACD4266035A5E3829647B8696A413BAC0B7039\ +84AF99AAA229814DD94CC045DB8CF0A9B2E6B743B7A1180B512CBF0E80D853CE\ +6E4E0C304D970D92F38D0D4E9B954CD14172F1745A69C4A82BE358FD8386:\ +B9020967A74C6EE0B02D9A42263045CF5F88934FF5C5F90E9355EDA925DDEE94\ +9DB4C1600CD0F720C65332180D99ECAF376626067E31D665361E21D5B72FF933\ +0ED7EE4E7D1FCFDAD0159AF07F60E4E2F35BA4AA4373B1DE845F56B572547656\ +4D240CCA4CFA4063C374DC6BFA5FFB5C454B35409F5C69C49FE1C50E02A85357\ +E3ADA166496A82C864A44065D8D38F9722DE5CAD066ECB4D327E8952CB4A80B3\ +8C5E76A1EB48EB6E249A5D04942146B1342C948369D250E6BFB32EB01A0A:\ +FDA8EEF72F4FB65FB0147AD49CD00036B0B4C2E604CF9E4BC9FA99964CD97304\ +221DA1AA2DAE411D7D7D88CCE21A69F735826EDF0322166565352A15D2D25A5D:\ +4CA75D128185C53C071D9C57D2820202 + +DFE82B84B22984A80EDA7A031493A56262693C41E0F08A27A80667D168DD6704\ +B8D82F92DEA1EDB2D4174E4017C4CE1D7E66506BDE130E2256385920D3D1E272\ +226C94330812CACFECC96BA9232905B74915DA30F7A233D8C961C6977DBFB646\ +26158E37A9878D26B85328E8A79097190A3F5F339E4AE201F8858C98AF5C5994\ +E858CFC8D34268689818CB2867705708BBD9CFFE88B2CF16C018DC47D730A6A5\ +B4B951AC57E99DCA5FA4E172A4A2292E1827F2ECEF94FF483962651404F64D:\ +9E9F025C8199E0AE3BBF78AF8131DD0E8CE35E330A50431BFC619BB8071480C9\ +49B896BEE8BEF08E383EEEDA92BF950EE45F8F335EB006DACC17A9C5FB3294CF\ +BAA2FCCF7819BB1DD7F645C5F21B08204AA9D89083648FDCDCC451B39BED9CF8\ +D61D79308DC80FFD04A901F1796CA15A9436D9E8F56C03858B8C31EEC9633D0F\ +29FACAECCCCD1E26E27A9B4B75F0CFFA89F93FF7B4C370B1224F3A99624770BF\ +956E69E60444BD81521DB8CA8694942824B0719846C75001F466A2D72CED4D:\ +65ECAB031D16120E74B745A1BAAE66B69994D210622A996E618E1B3ADE758196\ +9522A973336CD20E0ABEB9395D1ECBF2254F4FE7C3C98FB5BB7C7BB9E00986B6:\ +B8119F4F1169A094C93698B0CF33385F + +6AD77D39118158C637757331C96E96EA0083B575AC901DBA359D5986FCB7FC95\ +D0EBC94C1BDB41096DB2283D46FF939D42CDE66E2D186C2D93D74CAB23C38574\ +8083F63AEA5E7CE8DAACF3FDE49F599405B96DA231124F4A1810A5B0EB948692\ +5C86C1E5AB95D26A6C6E28127A2AE877B70C9E6EE94FCD47B642224262FDCD05\ +5A7219C76F74E8541289263A38039AEC327D50B4FDBC3F33E5E9DC1D74CF65A0\ +F0DF10B5AB7189FB19EA765BF8D7080AA563E62265FB59DA8C92D21EFDF19C14:\ +76C872A42D922821FE22FEC8BCD179F4C775FB3010C57A2F3E10F6DE19DC60F3\ +38E81D4D36E3C07E9736FD837BBDA7574CAB760E3EFB5E55BA954C0FAD01B472\ +CB3B159FC364EC6451D71CCC334FDEF95F38CC12757FA63005ACD6A8305BAF8B\ +421F299B4FE02D524727D51E7E9CDBF7E3C46001EC49C5F599410D5F06E23E13\ +30B49428CA36EA4DD7B28428AF2522C01EA9C214FB3C77BD43AF9BBAD49B8CDD\ +BC12BC28FE1415311077F475C835728CD31E189F1E582D08254EFA4D560A44A6:\ +60CF7CEE39E10377D97679D791DA74E1767A6E47BA720AA78EE6A16F84A7B69A\ +9C7DD398CB04A08DF6A70C4BBB48F84495A69F185C37B1DE2213F8F206C29F1F:\ +E3ADD082F8D83F9040BEB9352888EDAC + +33B72ED559810D293CDAA5F90538C1288EED84BD27863A1088489F38A5DD9C15\ +D9B63235A471B66A1D553FB94A7826852C32E64FC0C55D48D397AC368541EDDB\ +33686C15426EE7E3F939001A1DC81F374B8804851D7870148A29FD3A76BDB8AD\ +86CC8B5BD483F0EA0D1C40D6D22AD52A86162CC63703E0E48BAA5E7A85BDD407\ +7B6EE61C0D27F87EAD8859181F86FBD92FF30C096F765DF0ABD9D23DFF984FE8\ +9BCB9556E03927C49A66744CC56B7B0D8DDC3A2B6DF03AE91A6545C778B287D9\ +47:\ +569835F173A3A33F6035797D16BBD308D1B501137496BE22EF04C8C77B26A25E\ +0AB82E81EEBC4368264B470A6057FC1F13D612DC1A73127619684F0F1A44472E\ +B035CFE000E5ED3DEFD2938ADD11B0718DD76F8148234DC7F25470247FF46712\ +509F886B3E21E27055662926A3375C84CF9EA31F3F2D4F877E1D9FF9F89F7388\ +53F94953AA594E51462EE0C3144E5A6592D596BEEA53271B8CD3417FBE150FFC\ +948B652C8EC1C8715601FB02B62D0562F6526CE3E52A73B097F952A05F50F6BA\ +C1:\ +621F5484DFA2D820C57EE2A0A111D6F6202F1C34197F26F03ECA92279BDC3EB0\ +D0E974D90D8F04672A0B2D13C447B5120FFF859F57479C98C95A70FCFE9F27AC:\ +52C427FC02EDB8E6990F5CFA32E2409E + +558814DADEBF901790A50ED6EB7877905A7A1D08FE5BA318C7AA1D3ED42006DB\ +7B90156D940DE3B82463B46617BED8EB3E036B689582F38BA74021BE58107529\ +9C94DB0DFADDFE12C99990DA22A72978ED81FFD9536412D82BC74A00E6BCF467\ +BB3B777DE7D724A1EA8F3417E213E4A864A99A33F3277B5C4A4D5E6A39973733\ +721D5E2A6973B7062A43EE925254A53C94EA7332E3F891973367FFAD4264E892\ +678BDEF566AEDB60D4851520A22B580324EB6B0C4F04939DD8FD65843D90480A\ +7E4D:\ +E96F869FC3398DD68E2DD627DCCEE24B03EFED44B408D9D28A45B8D990619787\ +D47A02D4AA6E2CA5D1C53A7F860A55C4E52809031B8AE6961214397A76EE6F9F\ +5133302AB9D1EAB144638D4FF1225A1B3D3971D88770F6E1456E982A8E9CADB6\ +794A73CAC4CDAC67A9F24E0BA09F7DCF3D18A31B9B63B5A1EF961995B11288B4\ +3E6DAF8A019F24D91CF65305411A48647870C9CA2C438707890844ABFE0EB68C\ +2FA125B7973FA68223469EC72BB7010041C3005A2B43EB59DA1444D9C8FF4270\ +065C:\ +C9FAA4A9C46B4F3A16286EB2F00F9F4B530487385AF169EBD8B6A91639E90A94\ +0B22F7E83EEB1A2D45863E042F3509326F0F51C8DD9DC35E8E7B234FAFB6DA7C:\ +726DD701F3623EEC8074ACB0EEE33C08 + +7232544907730E42A16C9AC818D1EB8905DF1043DD3F779AB8563A6A456BB932\ +0787B13C9FC200613607A26177DB259496F2CA94BA7BAECA2D578ABF325EBBF3\ +D76F88102E51F254A9B3EE3277F0819C61064C81C398D0F80769CACA418E10F4\ +ED16BF4B3039623721FCF46E30FAA7F91DC2F80B06A5438CEEF3609A902E9654\ +AA69838D6E6E080B4F3BC1F937BC0A4855FDA9737F3AF29AFC4B05BD4850B208\ +0F4E3877211F9E6294CE9C0209082FAB17AEF21A344B1EF8AB14F131A63088DA\ +97C2A0:\ +947F1F61843BE3F4027CE622E6A9F881CEF608A9961E59DD7B036284A753FFC4\ +C3FE97354F66BE342A4DFAB4309F519D4F7DBECBBE284599DD00D1769FBB1257\ +78EA434545CD68958D5A775D3BE6DD60C056530A823B393818273602322CA9C5\ +A5386224F33D8530E0AFD9E159B116CAC0C07B6826666539E746C72676076C17\ +303964E3F9CD5759F30B079631D3DE70CAFDB36F751CE8E7B5E070ABE970E06E\ +1D6685599CB4005F09924988ABD5427A45D9EF4235C269742C3EC5351272FB3B\ +FCF8A9:\ +6550B6EED999066C926A7CA8044157CC89681E8F12AAF07E5836592A86EC2761\ +942BD821E0B33D93DE71F8A7C295B53F8A1DFA0D77B53DF684DE81CAEFB63E89:\ +F80966FA407929A27FADF059CC486A93 + +8E7F1F8DC7C94A6E2161691DD0916250C3E52655DE45216820884C5703A89E61\ +64AA94957A0BCD4DF4F7EC40DB6E8BBEAD2541A9C360B888D8D2F9A52161BF95\ +D69848A8F30EAC6AAFBC0EBD3EE6BC5E1D1F8A1B75226A555CCB3AE468304ECE\ +D198586D9FF10DB28E7987B6D61D95A0A0010B6512987A848D9B6E5639A07A9B\ +6C0AAD572A4462D6E33DCF27506B22B73C6427006F7CD23871414B33A2921FED\ +B2D495098AE7B38FF402105758915D63CFA37862B295779D43E95CA509EC171F\ +AA7948DE:\ +88AD68CCE9BD6F09B560FC429B85E661EFE66DB2DC1FB719756858EC957E6665\ +7A4E39FCD1E4D0BDA9BFE4258DABCCD20A85025DCFAD96FA09FF4F123647F027\ +553C16E2B44A659D833CBA9D57308EB8333DF1E9B330F2DB8BA8C7241E207F5B\ +64637BC3A2627E0067FE86ADF812585837FC32F32C1BE8B5D55E39C3B8D9148E\ +F835EFD92E3213CF60EA2B14051B6674AF51B6E79992C0A8A7C2C6DA82D677AD\ +E52C5884814C696EF17F46CE7E0164F38D6729EF65767FDAF68E20352B3C0515\ +D362DFCF:\ +11AC6CECF5F0EE65F7E80D6A67AF512EB7B78CC1AAECE515F7E18B0A134C849F\ +FF7E0F0A0CDA0A6EDE88672CECE501D01A37FBC1512635A9A88877BB91339774:\ +F5D202E8898E2AF85FD6BAE92F719628 + +823D9C292F162B6AE0791727C56C457D72123AC3DC6764ADF57526F53191440B\ +E38A483A3E0FFE8405F1EEFC20F01B23B874F09856532A108F9B94ED5D8351D7\ +9371C3AEC1CF86D60E0DC453B267092F664D5EA27428D926AC4F93CBEDEE3078\ +E354691FBF529716DFF11556A971F364DE4335C05AF97DF6382BE3D6D1C4EC08\ +0B99D08447DB0C680AB54C1C8AA26A41D259C7E5365EB301C1DC46651AEC6FBF\ +4322E725DD7D51437AB3F6329BCD18543A149DE9D7F78045E5ADDE4CE87E3371\ +855705BD8E:\ +C092FC16A03F7753BAF6DBA3AC0D57EDD955C92DA7CA1DB98576944054C069BC\ +870DE3EC175DB0952CDB6218D36230A02A29B4D81DD0E2C36BF3D9F71DD3C274\ +E1074A8CA39112B5FB133DC30CF8072FB6CDB5371E3F52239338E98DAEEA0B47\ +18443E5C981B18030CFEEF02DB93E673A6D810780B9AF4579D78FE55369CFC01\ +7929E390D5AE8A825ABAB2066F3FE652D12F2CA724E4576643977015F0691659\ +B1633E0769C09285B7C0F28AB28E1AA6EC0ED70FA6AE0DEA900EB516FFAC9DCD\ +B40CA3A9E2:\ +25A201441FA5563112EB8A0C4B6DC434319A8DEB69847A3A5329684ACA259799\ +995760EA8CB3529A6DA6728C3929B831E7724325CF7B8C11641447C3187C3759:\ +D07A20AE8E1B0F43C6D60A4EB6E5AC50 + +64D338A2C50E45AAE4C4C07CAE9534364DD33FDCB7E8FA003234FDF883E9DDA7\ +689E6DDCFB4FF0CBE330CF0AB5E8CEADCA1B09247101C0170469D33C52C50002\ +08118C2D8B9D081D0C7D742A8F103567486A30526FC0898584AEB2199D8A8DBD\ +0F48016B2F616A61F1CA3296030B1E21440BFAF92ACAF9CD5B92ECC5463BBB2F\ +7279E75CE3C9F6BBDB42629EF59AACA1F99C07DC90280F99F0606447D0463167\ +BCFCD1B1B5831ECA19FBBC06D35C58CAFC92FE5AACE9B5B835C882485DE0F7EB\ +91A4B818F8EE:\ +6523C551B41765D26F70C84DC0CA497B48686E45B5A5075AACF8186DA80C6B95\ +AD989FB89B47DECD6648219A6FE3FC0C192E758ED9DF8B4FB5D3DC039FEFDE69\ +68C301A0A5B45DB6042BEB70BEFC1865B7F5CFA46DCC1DB4CAC3CA3435BE0BC6\ +2A42BB5B390AD43CBDEFE615ECD29DC0669A8E27B18C83281F1CCC2BD7B6C9FA\ +5F384738D4A239E785BF2DE1F4C36C06C4FAE897872B0A90E24EC21630B39938\ +E96EFDDEEC4C71A369888A468537F9DA9110901523CE0A4BAAE1B3AB43649C80\ +25FD7F969F2B:\ +FE372A2BE18F88FFBEA1900463782A5210D8A533C2216E26EEDB4B3EB45D51EF\ +CDA0E4383D3B1B09F4512F773AC3BE774B8497233F3617A2430B8D8B99DEED76:\ +99B51F9AFFDC8CB26E44E0C0594C0A71 + +5FBCB5362CE55E799FF359DDFE348F4FFDA38D5F018DB27EC692AC334DDE413E\ +DE583F178FADBB4C3832A5DD6D588179EE4256FE449DA5617734616B2F2AD6F0\ +2AB989AC6A5423485FFE669652BED397F0E2093B4EBB38661E9D78AEF46987E7\ +C3DEE3C6CE08BA06C4E66D722E01AA4BB662BA0BD4E0B74FEB89E895CB5077AA\ +D0D792B344E5EF7B4B542BCE47FEAA88B7E626054BABA611577E9D20ACCCF9DB\ +6B06C88D36E6208F6BEB2AF0DE5B7BA1EFFA8FFD01EE752C1B138D9FD8818637\ +440805C907C59D:\ +BAC7E5588759B0A24569355323DDAE5AC088266839AF916D214591A20739233E\ +6967FCFC20044B158F1028917EE518D20F87AF47C48D976DD2B2A18C271960E0\ +8ACB0425D07B65EB16734252D9F401B19A1C5CB4F3E082AA0E511E8FC9B3D493\ +A6ADA1A555B1262DB19902982621BAB93BBCDA75B6E1A9896F60D2A15376919F\ +78F135F5E5B91C59023C5D7BC50C809A1EF7006B83CB6BA60AB0DF66909B5351\ +30C0193BF1F572632000D80ED77814696AD265D7CD5F45AB0DB9D73D8637C3D1\ +B9DDE5B36EF8A1:\ +7FB87D898FA0D7159C3F304D34A6F313DF4335CFBF0337AAEDF5343D10AC0CA2\ +3FE7241D9BB9A21DB4BBF9D7C93EB3172A5D9E1E54A1B363A6E4EF9B1BBB55F2:\ +9E264B3792B6626994A8BEC332D8D7F3 + +97F461B6865030E1AEFDBBCFBB7651242D690FBD8DB45FAAD049782616A62DAD\ +D00CFB2E7AB20A761682ECF01A8DBC3183A5C6121C3AF77E253D18AB7F0B0D80\ +8835547DB8BC41D8CD44C395CE370E6F618599576CA88A2C4DF990468D49A0D7\ +7481E1EC6ABF175F548EF0B39251F8D093A29D9667A9530E9D0BDE167C7FF118\ +E589DA7D37D21777B7E40C56E1F216CA3660A3E1E7DF721D131424FAB29C326C\ +E26AE08943040E0C498FE9DFE276705A7B0F526CAB8C31A970B6CAB30F7F9AC7\ +2A5196B52F8B1A43:\ +77EA54BC4AEDE40478C90B8A50779837B8FA233595D6B7DC96EDA6220B02DAFC\ +A083D10F73B80C4DB9AAC281AF962F72DA676F698D05E64DAFF713823EC6A4C0\ +D1B99FA64BDF2D59C25465BABBD3E439914F5FB144430D53AFF7604B21EB619A\ +DF33EC238691F43E930C0090BFD9DD13DFD2A62EB9C8D2BAD4E4BF750F976A49\ +8D6F9DD760F3DEC4125521F4204E662682D77E39A3B777DEAA801FF599BAA5FC\ +8C443DE5BA453F3593768DE7CFFB3B56C1A84D4443FCC7C428A0BF7FB494CA74\ +7389F05A97FBECE3:\ +2A11E33A15A29B8692A12C423B53A2E4073814D43F7014A2EF7FBB64199E0CDF\ +A51F67A1681AEE396825666F944E545E23F245A11C0907B590D9F73533D0421D:\ +5DF45A5EB5583410E0E762B8E283E4AD + +4E4D866DB7F432F970280097EA52E0EA81D35ED1C52C76E12061AE29EF662A58\ +82B72913B651E810F9EE588F89444559F42DD401CE1B0B9F6D7D49148DC6D835\ +C9A6A81193A4016057EE9DD64E902ED08474FFD916102FD27D95A60C9AD69FD9\ +3866082A0D4679F45FB8C966AC0D6508EC38D7F493924C40F3C2CDA856996933\ +C2D4FDBB78BC2FE8D9DA5DDC49860671EE058EE6BA28B65B136F54D5999652A8\ +49DB26D27FE5641A4ADF4C104FDEB4A26F5487DBA86C9D2A62A4BC5B4511F073\ +822D5EDBC5E3A81659:\ +1742264209D643662553CA2E0A05B1751AF2547622ED6172F72B15B65CCF300E\ +1E65DF050ED20F26AA5DAC492F90E58BBF278C916D9AEAA691C13497BD8DE7DB\ +18F0A5846FECBCB2181B3C488BE7B4AE62CC13BCF9634C93BAC8C911C56497AC\ +F776025CE29CE9A52A047A38E287D93E56DF20BEA7E6F0E897CB27E0B69F5412\ +6F1843D283C0F290800EC8B52B2EA9BAA4FA987D1E67870BC2903140ECC93682\ +7C86B610DAC2DE71D8128AA8692BF6F3790E9F518803358AEEB8588465F3956E\ +B530467CA36DB23075:\ +54169450B58DC995384B56B8589582503EC0438CE981E85DB2233296E03A5C74\ +29459207FA36859CB975E7EBBB512382FE8C9D4D86CF57976BF377B9CDE1C38B:\ +A4947A745153886122C8FE1349D67837 + +F10A011C7BF73FF432007FB7E791FAB8D9651D02CD9CEF8E3A464A063AF896D8\ +1D4CE9E7081B140E2F007365B1842287D373CD228B1EDF804D68C068C0A56642\ +C42D1C35950FEE0CA014E5EC26FA0F2D8EEF69E64102AFC9C450859914CDA8D8\ +0838191942A3B9DB71241E1092F8CA2CC4E578FFCCCE63CFE97B4DCB10485CF0\ +E5639796521ECBA451626DE37F23416EF8FC26AE2323FB0C2AB78E067C6DC4B8\ +C29A02663FBB25CFC99BD0AB1BCF2D282203C58E9ACDE093479D2F1644970DE8\ +CCCFB6ECD154368A5FC8:\ +4A563D84299330F82F07BB9C93419848446EBA03DE5B17A3444B8662626C82C5\ +F68F9862BD203D127A40E8C7BD735BBD7C918186A12E8E94C10DF5336EB1EB1C\ +FE04B73352B0A9C1EA4B1864F0B51CF879683909E34589B1A3FB742CFECB3A56\ +6AA0A342F741C19E9EC74E4CF1AF89015A8750AF9361D62E1FB42A75644E83B4\ +DFF4C3FCE0FFF85AD782AD1F66BAC393BB70D767AF6E1D5B517962180CF70150\ +E2BA56CBF632ED8545E34527B7460A359CBCCF598444B73D387B4E06E7EF061D\ +A53A280AAF89AFB529C6:\ +0E4189A200200CA465F873C0C73477CE503BFB689D2989E0F84247AF64D91E60\ +3153BA244AB9938B28DDEA17F062198D260D44C5518AC63C0302201B1344C08F:\ +8F01D0310D36ABFBB8AA420EBBCC0B00 + +DF55686B6C5C4B07AC9D773C9B84FBF544F046522DBCFA47B31DEFC615E82438\ +03C67B1C2E3273C239860E8DD536D19BAD4C42D9881072E04BE6BBC781D6E5E8\ +26ABCBFE9533114DDBB15DC708F6C0CFF2598713FEE9676CEAF5678C8ED38C6B\ +B4796ADC926CCEFAC87C33EDC062D2DDF6CFBCC35F0660D8C93013170EAA7798\ +76F297B8695D87A5CAEDAF470368D50AF33ECD099B175D8DD19E82FC57621AAE\ +9F910820E2A66C546BAB72D687EF7DCFEDFAC117E6E344D67349B794C39A3A3D\ +AA73DF58EAB3A1268452A4:\ +879EEDAF24203A141CA1207ECBC67264DDFB29A9ED1D8B2E06207112D8264B87\ +463DCBCF9B010703FAB6ED619E204924F74BBE9E5F5CA84232996F21A10D0F44\ +1C4AE19D955D91B821A1C2F1D8438DA7EDA2AF012471C6201B511A665F24BC4B\ +6EFDD03B0D87F70FF9BBEF05346F4CD537CF4A03F97675A59E89AAAACA4AE8BE\ +C18DD5DD4A850536AE95C1B8ACAA7E3FAFB0BA27E883D90E57327B1368D181A2\ +F1DF129FD658A077A3624489C20DB3A762CE66A2EE350438387C1D3CD86008CF\ +70678151EA7750E55B37AD:\ +855C0899401237F2B9E2707FB02755C38E9EB2FD53E0623BAA0D3EF98DD1B0F7\ +F26258B151415F6BF3D625EEC5A16883C52FF504E37EBEFBBE888179D56585A3:\ +F000E3FA7F45B7910B73D50A2E8B0FEB + +8CE6E2EE9454B5F7EA8BD12CB2A5AA220A249271CE44B2E51C6283A9BF220C7C\ +B09885D999ED0C111CE542D058E0CDE2564B37C46391FF64BB6994818A10462D\ +560567FCF7FEBA75B54DA5F0C9F3B0489643FE0FB8215D5269BD53FD446BF8B6\ +5B7A16756176C84A23054FD16C8DF85A8CC71952500A387EF379CF766DF40490\ +6E34A47D6164F092DF287F2E19E464185FE11AC014EF97749225128A95AB6520\ +4891321D69B0CB0038E5107FC70DC450E4E3D1E11B642A581159EC0E5E34CAB2\ +628A2B4DAE5FF94F24F3B21D:\ +3779E2D71D4A7B4F95024C217F29355EF163018F3466F924DEFC6AC2B249855F\ +7943BEC5E7D7F37DD0E463CE6C277ADAB8738EF42CA056F2AA613D2F2C02B227\ +7F914700695DA4AC794CC745EAA732B4C3E546452353332504384150A151C778\ +9D8F196703A777E94FB4D634EF10E23AF8BBC45E920AEA05CAFABE53FA57DFEA\ +D5339BDE2DEEB66373BCE7CEDF95A53BE10965035FB6964A9F716BB30E725853\ +6CDF610E31CED2507843728E3CBBA81408FD248416D62F87237212A1FBBA9C93\ +4A760CEE6A32CD842D503C48:\ +331DB15636D11BBA27FA7DDC5531C62FE1791FCECA8FF5167D0435AE89EFFE2E\ +557B6626428669095E99B9BB08B669BCE6FFF1C43092076F41299FFC74DB33DE:\ +CF136D9D7357C7D67E97BA403E63EE40 + +714E80E6B7262BC345047BBF74BAF4C240C28128A402D3A9758590F0E564498A\ +58E527CC323B9B45D4F89E4A6738F46695012A06C466EDCA22D0A007138D97C0\ +63032A137CB6963B850FF7FB4859664CF7B94619F870A2B3BA857AAC713CAEAC\ +0113BB733B0361DE3F6D7526A9D30027F00EBB8FF17E301292DCB077A0044F6A\ +307C00A3BDC798FC46EE20A87498C3B95FE7EA83EC6F204EF62385C193A9AC64\ +7F76151DC238A50780FB0A56D29B2D8CE597C0492EA4560079135504130AA4CD\ +7419350D98ABC037016F53FE80:\ +13721A9AD2F7F60EA7ABD6588535A7ABB74D2E68DDBB017C89E0A017D8A51B40\ +BE749ECAE6D77FAA7355F001CB042ECF296539A9C03CC778B8693F0D0ED880A6\ +534848A1EF61C627743E799C8DE5BC43DFCAAAAF58847C8892538281B43C2741\ +14BB193364ACE22CD93A2C4D764D691EAE8C5ED391CC2A8BE37FDEEB32741449\ +9B7166F71402EA0A017E895748AE990BFE4AA0D18C23D941BA7BE78716821459\ +D02544437BD2F34A38AE965E269A81F4D57414E53685D8A01B1F0705C873AB4B\ +A5B0245670BCA692173E36B45F:\ +C27D7529EA44721260768732C3AD8B24E3FC523213A0905D0238EB443B09E276\ +45593372883DC1AF298EEE66C6DDD74DC45A007E0C22A5CA16CB3D2997637090:\ +D806638B5EBC073775377182AA6506B9 + +4273D25B20A2AEFA2CA5432051C6B95DE336874C1063E5405E584CDF6C24E749\ +C9A6450D350DBE46489457E58C4BCDCB5A4C4DE5407CC572285D4097B1E55712\ +53F4937BA7848E44B8135196AEF8C867284CE2ECAE37F4D7CE69A15BE328C856\ +8414BE88560BF25F8E00FBC2E369C6732BCD87551F7B9C1B39DB5A237AF5D3E8\ +591E3BD9B0A431521436F286E5648A0DA116AC3982DD18FA272186293769B6BF\ +1359CB311DF8FB408BA3C1AD95110BEC065341708AF064C8FD795E8DB95F69A9\ +62C62E9FF27EC52648FB9A274FF5:\ +8F1120F0CB76E067DB6E7B1687C00741B32251D7FA6AC7DF2E5453989A92345A\ +3FC5E0CC598B56327C96FA32BE2865062862703F812AC835890D40B6EDF8F8BB\ +93834F9CB012D0ACB45FD63FBA06017584D055A7606726336AD64CF9CF339BCF\ +2D92352E42FAA832048C9F9C0FD3CF3F8D66F7018EB7FB71773795F7B9D1AE56\ +E146771F704911C1FE73A5B471F6224E85E287E2C6179AAF796385554F68FE91\ +9FF2F263D51189C32B7BB878BCFB694000FB2AF809E52961B90726811258F12B\ +E83498CEA9EF253B24CBBBC7A922:\ +9F2990AAA561A95239ADBC1535924CD4E588E7F8A70439E5E88D04BC94C795CD\ +7E7AE34A586411458E1D84EAA427733AE33DC339C22E2920A987B188E5D1F293:\ +84FAE789CC6DD71D5BED9323C2E72FB8 + +06C19C37793F6850ECDB9623BA722A9CAB05CE250EB821AE57C91375C4BD3CCE\ +CF0BD950A4E1FD7E85508471922F7FD94B150352428D710F9323B2434B9E7E01\ +E4D77F90D0E91753ABC6FAFC1AC6570E4D0A6C517508FBD73E9D58A4A0FBBED0\ +063AB966024B8D6BA7DBC38AAA0B06F84CB0FABBF97A7939C529EB4E0A034505\ +3CBB9ECAA8725E13005734131DF46EB90199687202A6816214A0E7AAD81981E9\ +AF8ABDDE1609B1646A2693A8EFE5BD29DE2CF66F56C9F768C6A27372B9D64940\ +7A2426969E6276F08CE90C64B2DCD6:\ +75DB49B13820E32B148FC7CF5C7E21C083D7BCB61AC50293FF61CEE1F9901EF0\ +40B00ED3EE647215016895629D748445F1566543F2510116FEE4961CAF8B8B71\ +F161CA538C99F6F3E2F54980218B77BE9415E25974013BF0575DB7E3B4993D96\ +FCF99A2A7287FA625EA0DC60D44E89E20DAB845AE1299E33EC936BC439DADCE7\ +954538F8894BBCBB637BEB32D7C9622D0ECEB49D551B1ED0770A26145EC39BF4\ +7E14E7DFE18452F31003FAF21539163694298C7EB7FAF306F3270DAC2169D172\ +CB60D9A58C07A7E65AF534C41EC67B:\ +A9132FC52C49EA0BAFB5A6548B9917C5399FE1319A563EA44B4D39C0487154C0\ +49D21EB305A67FEAE4416F9BCB52E103DEC893E59BC33A54D7E8874AE208CE36:\ +309AD070B6B593B53750224008400761 + +C05B8538AA9113759E7D0D158FF727C4BE290D2357DCCCFB424BA08BC3E5235A\ +67452950EE27E8C24716BFE6BF071C0D85859A320C8C872BFAB7DFA1E3E5C117\ +4207BE841610155BE32E373509A64183FE4A05F00A99B51D214023DD41812C78\ +32215F5B4F87AFB3231E93B7DF8F3274397A9AD5DA4197E3C7263192BF2CC310\ +8BE40822327D2A57EBC6268D8B59A600FD0C55AB57765B0231FDEC506D9DFDD9\ +4F215859BBD3E930959DF7D6B85652C1EF482BDE7DD6C05F160ED7BD88090788\ +8DD4F877782ADD48875DD944121AD4D6:\ +133161332BCE7B74D3BC79553ADDEE0387E035EA5A484B5F2C59898C45197989\ +BCC3848135752FD908604CF15377C38B093CF78126B5F08EF37095164B75CB13\ +C70BAF78A97887B7BC5F2236750A4B6F48320D851FC62A4764FAA646A388A04D\ +997C8A8BB0822E047EB7FC4C69A6635A303A2DB2A91E715FB74AF8A96D9678C1\ +0A57F605ACD2A64E94C714B46EDC4DAD531F3A9F23055AE5EA68F9076E98F902\ +1DD24D82DEA949C6D5F195A945178C9097D1E1738F0B8A206D7E5D458527A450\ +A782BB4EDEC4CCD90F312FF036D76FBE:\ +755EA8EE63346E8E7BE6DEF46F5C579031D587D876AF5289A8E5392E7113292F\ +1DF27DDD4D328F4E9E6F52913954EDDF20F5A576A378BFFB65B7E25891435DC8:\ +977F8DD381F808E45C651A4BEB336799 + +C843E946900F039553F3F862D50AF3E993A7E4AA4EA58EDDA4511F9F51250FA4\ +F89688D6D8915B573E2FE257F8A75ABBE16B2E96028173BB12A6A4212FEE8067\ +7051F0D188077D3BF73DCB8865C77D2DB817C2C1035A0989A2DF7F562AB05A61\ +53618AE7F1DD0EDA3351778B48DE902CCADCF1E33A66CDBEB03991D409FC1FF7\ +4A2DA5544D10A78D4A5B26F0084B1A863D911CAF23A5032AD29134CF98E20343\ +84C0EFFFF2EEFD53D1750BB15E36D52CC6D346D146CA8285B49C751E147D9AFD\ +352D90A95C44D20FF969A4538C2495F1F5:\ +5D11A231D5F3522FA1AA113461105D9544018396F1833081E46A836ED4D8CFD4\ +A889A53DC666B8D05C9D3E01C6740E737A4874CF6963884D6E7F287ABAC36B99\ +B9E78B76B0C621CD275EF86F5DD2E905404E47D316510719E059580988849330\ +68A63A22E32CD0474422FC55F404445227A8115F87663295D1F6D0EA05E187F4\ +C1676752531C4B2AB3E2B6B0F404F09A98DE2822360691FCCD380DE1188FA998\ +EF94069777A7AE8BB5B849DF89916CA95119D5AB3B5EC8EE0D653AC79902494F\ +7461D04E405AE9074885F651DF539199BC:\ +F0847AE871AE9B90893831C1E558ACEE64381846292C35102F699765B7B06AD2\ +79EB54F556594E2162D931F284FB48E2F26B530ADAD04D6D9C3163C29DDCDC6B:\ +21E6CC4D35D80D58C10223B2561F2E4A + +9A555E3351A07E9DF81AF4BB95C645CBE877FC2F7AD003D8CC2277BEEBBF54EC\ +47921AB1CDDB0720895A28D12E0DA7E00B5C549B4DE00282A4384C8D3CEC20E6\ +D9A3A4A6D69BF09C9F3C08B6B2DE1074C31148B75210D5CCB36CC35ACE5A20AD\ +BD524EB7F522E08837097DC692111BF6589B04B1E9CBB9C1E9DE9D523590261C\ +D3C8000EF8ABF9CD9C6CDA4F8613CD4641C6F9AF7B6813E1097130CCDD43B33B\ +3F9B273C43A245A5204349B63282935CAB6BF286870AF3535321D3BA94DD62AC\ +97F50B5476636AF14309ACF169AB3190FC91:\ +833A8801C3FF37A5A4F206ACF4EBFE2133D1D334109C856FB93DD721671B2071\ +F22DA5872FBE43B29FD7656128D09B66E9BB630F92CDC2A132620D703165E1AB\ +4F3949CBF6E8F4A254736AF521C1D3DBF97B5CBF9DE143969251A1B05AB96AD7\ +34FB01EAD1C9463BCE2C947E7EA10C8AE998C600A85280C09254AE651AC6F3EC\ +DC6A52F36F31F6BC88E46F649D4687F3772A74B642495C818229A43CB6AFE8E5\ +E100CEE924BB362B13CCB9BAEEA889E3738A0E782C68A247D95FA5D4FAA7CD1D\ +E7C9CE671640B8415C9974991ECB5E90B339:\ +DFA7906EF224FBDF694195E87689536C5B4C8462A806665455EF9F65476DACDA\ +9CFD9C5C424532F5DDAD54D7D8FA553055C8DD5A20193A3B37500BAF17370950:\ +7C55B66CDD8CD368839A2545AD549F12 + +34088A28DFA3292D584A845DF63886D74F6EBF84B7B3829458E732D224820AAB\ +238E9E1E502A5368AC95A68CBCC0E4C5824009AAA3CBECA04FBF50A1C51BB247\ +F1607E1A60CE0C97158DD44F786C3FDA89900DC393CCD3081C06E28957FEBFCF\ +6F0EE2BC66212017984A32329269151E2D40ACBB76B5E4E11E6D93C14C0A794D\ +33F485448770DD6AF0C0CF8A072FF1A16814053EEB10011B53DC4FE3B3417761\ +B54FBA6DD08F800AFE7EB0BE0000412F814EF2D4B8399BE655F544F6A0FDEF19\ +6A2C06B6E7368B2B9ECC85C896BEB23A2E2F67:\ +5048E5FD9A25F20EB0E2FAEF122A99EC11858639689F5987A6C4FE1FB80075D5\ +48C741C5CC929639C6009F9A7410DAA5C9253E5E520954BE4A903FE10C33A717\ +24C8B0C46F7711CE9574A23EB5DBD05D437700FA7DEBBF1ABDC364F3B5AADDB0\ +4B34245F184C29512B2351145F30B1E52B778040F39EDC570976CAD206FC402A\ +0689318325D9F32889D3D0DD863985BFB3237DADD2EDBC6B7FFCFC12569737DA\ +572E7B81B3704585CB2DA61CDA18FDEC10C26F44085E0F5A852EDF4E3292613E\ +2DF7F384A13EC3D310400233796BCB3D11FB45:\ +84A24DA96DA3FA33BF463E82614F5FF6BF8E1413106BE79C4C7A6E3A33A187EF\ +6F5544F7E48CA73B4D2D347996219264D3D6654825839D36CC6E94F293A10166:\ +1799A67D65836E239161014192BE8E2B + +D4938BCA1201D96883D5A36A05985A6DA771CD3024F288A9C3F5AAA93C5AE53F\ +14CF8612E48EC428665B0BAA3D85EFDC1835C82236E38E9CA86265DFA6316570\ +776D47031558790A5778E873BD636621CD1EB6276FCBEE47504AD2AFA523CC78\ +6E33C37E6DA30118C3B2859723D33957FCACEDED68AAEA410DCC9DCF1F35BFF2\ +7BA2033064C184B04BD28B1DFDDE1CC08C808054EE5308E6447C7D77D23BC2AD\ +05DEA5C73455C747DF65EA375DD24A79A17185BF1AE4262C2934CBA5557293A5\ +6041BB272132D4B42520E9CD5847917725640EE7:\ +1A73411481FB309E1D3897499C980DC2A4890CF6D375674DF789D39535B4ED0C\ +08076E33D009E87B07588A7562A40AF40943525BEF121A6C71DD8AE64769138C\ +ACCEA2B13B36DB494602DC9B71EE9BCC574F9C729400D70C85F8E502BA46AE97\ +BB414E021B6BECC1B31353E4399CDAE0923A1B3CF7B2F23EF3EC7F7F1F540F3D\ +3607C84E333D0EB246E6BF28F072364825F935D30911B3CCDEADA7E3C50E056B\ +D418EEAC935F6C937ACEB88D7EC809816057A6484A9E1553A5D8498375302FA9\ +330781B601A7E039EF2AF7E510AD017726564B23:\ +541440D3BAF4CD676C26977ACF4617D6AF2B5FAA9E22321698B1E988087ACCE0\ +F5E19B3BA323FD790CD30A2BE6F59FEAB0AACA0F6059EF869D49C72C5DAF73F1:\ +1E9434A26DCFF2BB417B84DB44CEACE2 + +8D8498D9D060DD792298C2DC1B209A363FD80B9FFF3FA3FF10931AC134AA6371\ +7BBDA6DB6F8F96A3C8FD11EFACBCF8C9F82F0377C536867CBDDE91A1A04EA493\ +A45B43554FD5C373C5B9E16C8901AF1FE32854CBFA2089C494F9C00B015DBF2A\ +A29FE0E052D5F5B1507BA9999E15BDA37589C3D8E731D233B8A8037FB174CD31\ +D4F98FB4DE61C4E174D73BB53FD8DC22317338D3F6F256DEEBC500FEC9557FE7\ +117D31E9AA251CFA06A8E7C4FDEDB4EE76269D53708D97BF2154739B41C05CE8\ +9662138C989BF4DD5B17C9D1517223FA29B0792209:\ +32474467AACA09704DE3E77691C76D840A16C600676C6ED091EF86B4E31E0047\ +CA9D0C74616495FEBEC14780E2CAAB2B1FFAAFABF638D0B09F29D1F1EDBF3938\ +1B1D2617C6099F5AEB0D679B12FD22FB81F43188E96DF5E315002FAA163AC440\ +664C55B24A6B6A39BFAD865168ED2155045D6B6BE594EDD6EDE1C6DFD4D6F690\ +CFABC46368AE683AFD75CE1493499D3D7646D52192C1445593E4D8DE7E43DDBF\ +00E8633444B059730FBCCE51B564DB7234D34CA67AFDDF38A03E82FB15DCEF5F\ +A0489B3505242C9C7481C4677FBF243E027C65E257:\ +DC51876B956FED42CA6CEBEBAD31D92A3379C896937D2DB10A59B6D266291992\ +3D9D3C4E578B2015E3383B3F93600941EF0029C8774DCAF52446597BCA6F64AC:\ +C452174505E5832F558FB9A514C17A58 + +F84C5474F05C4BB30F72B73964BD4EB005C0CA1C2375DE43ECBA366B8FA6FFC7\ +4E6506DE42BB78B4C16DFBA0D14FC90468EE6BDCC9D33177EC5B28E94CBDF8AC\ +D42D76D79D7075A68F6489ED4F2739ECC146998108CD88E6A88D591707B46FE2\ +AD2F74021006FD8B59FF70F18E5474379AB700304298C4EE9F889C5449B603F2\ +57186E82E7467D767DCEE43F1F33BA02388D5018F0B0F36B60D962CAD80D1DD0\ +01098EC8F0A05ADA6982ACB4B8AFDE5E5952559D7A690E28FA6B3B52F879FDFC\ +4C5B33F829D864EC85894D9C60FFE69D978EFEA54AE4:\ +518C99CCC99C66A8E47FC3F4E41B8DAE33D27B2843E51F02FF0015BF6D36684A\ +EE10344BC69F34158803F19EFAA08183FDC6B2B2AED95DD398B4AABC8C567ED8\ +DC6F581199597C008A39A763CFB859345874BDC8E8A6BB405E1362098E24C172\ +9DCA334B4AF3077F4B5F672FF6B6FF209602A3B6A3F0AECF69F47EAE0880E4C4\ +2F0EECFAE50F9F5EF7B1AF119037BC8EF288797ADBA69422DF524A4490221399\ +E47B8ABE06E5BD0AD61DF427415C4DC4DAB8B126F88F4CCFACEA237CD8761715\ +539D68FB7D24FEFC294B9CBA4924F6A260C747FB9BFC:\ +1775EAD6878EA57034A7C4171E24514E2F360A449E9B6D2606427D878CAE1808\ +A2260544464E363930B86F165442E32680890B134F6C169841603F8DF2B18FB8:\ +5ECE34595B263A5A4EA474C2F9496F8E + +4B38B233C1EFF3329BE5122E346C59F7E15787683CAFF90069129AFCA9EA92EA\ +ED7D2A32355A49D275BAF2841D0CD6E6FE7C2E7D5C70F9AF5EF5FF1E3CC0C178\ +A71818515DD6F36F25733A26AB17A21CDE8008C272477A495F44914466546628\ +200154A50CAC657995E7DF2CA8633446D18059CD726F5A6FFD7289C8538E8D2D\ +A389FFBE49484EAE75AC5B1DBFD9DE5D43DA81C7F41B08799288D62A761C8511\ +B60E1926CC80CE6539A1721D3A2C18A7F57B2737620C34E37CB6D3016C8900D1\ +FFE5EC64AADD4C65BF4D6A86BF12BEA4B6E8FAB3B3391A:\ +5984C4C70A614C93CF23F9BCF6D5FF8BEFF2E2CD24048E232633E56C10399E95\ +854C30FE70BD4A151B174621B8CB7DF009699215B4BA47441A3A267C939F98EF\ +950B23CD20879A53C678E9FA0CE4EBC218431B31586CDCD13086DDCFF661343B\ +74CAD55B0DFF0AB49B5504EE076874E62C01D57CEBAEF070D3E761F1A5A08F40\ +ECCDB4A58FEAEACB10C537ADF6F59AB02905B2D3AF6799E5AB8FE7C939F0794A\ +AF9228676BB3C3C8DE45B55F37C486E683F6A7BCAF1E144CE89DE4A745F6D1E6\ +6A82EA47317C9910476682C74DBA3D04FADB6911D70010:\ +F8082513FCC96F9BE2926B447D77E8B8805D1626B35756F3C0BFA8E92C0213D6\ +26F8C767F82F3AD6219082C8249454BB5640C7B438245F6F537CB3D379AF0E1C:\ +7FAFD73DA2B8990650FABA66CD918127 + +EB332D2F4C4531E2DBB33EA97D72B8805BE064FA0DA9D4525E34FBF235A90706\ +8A8FDDB91A2AF0E53B98C713790690F41617720BCCAADFF813C7044CD9AF94DB\ +17FC072531C8101686729F25DDACDF76A8A7CEA506D2CA91FC4EBBD2807E6D10\ +C87AE8EB51EAC125A172FA79ADA873BF2E519287D94C909797827842B600DF15\ +EB2B4ADC0EEC77C8F46B16482F6DE8313C0B9DEF2BF17F8872713E65FB1F5C7B\ +78543B0FB5300815231D8B39FA713D268238DB78720EF030CB183F12712B2C1E\ +4DE82222C5EACEAAC536AB6A283C99E3AC87E638AF5ADBCC:\ +57316026D2D86FCA3C7F98E18B97988931E9CFB58243549712A960943E5B7EF6\ +21EE3676E57D6362E9312584B50A723CFE356AC9DAB2B9804B72AD9C782CA112\ +D75B31255B9E701DB200653A160A5AF2DDEF3CD662482ACFE5A5124ACA4A4282\ +F7A9F95870F3058C6410D0A41F69B1C172DCA7DE2CDFB3C4CA1CCECC8B737828\ +C83DB457E74CA36113E06FC8B717D14E4E560A8318B38A14CA27C63B2F6971B7\ +08E4B94AD9FD8539DDCA8973CA3DDFAC510FBF4F21A22D69900CBFD248FF0BBB\ +56C6FDB30A561FF993DBFA0D6DC67EE82AF2BC5EF21923A5:\ +E4FE26B71D0F221D917F7138AEFE73A527C473CB5465B9E240F693C892A69C05\ +0E6DE0ACA357D653B61A418DC072C6D49588E31CCAEB42ED546663373A8A870D:\ +C5CAE055BF18D2A1E9175A8282425F8C + +64DCE8B7AAD08D95F47B43B72C75EB6E25C68A393FDF26C80EFA7E7D2AF1C7F0\ +52796E8EC81E5220E30D3750E9ABE6140C41FC287632EF085FBC89DD4C522C9C\ +8BDE74E5C66399069F30F9D4AE74D161717AD26CEA44D479108B193D4D32F9EB\ +529A399C9ADD4D42B560E8AE568B76B48ABF67BDF198964426396B7A0ADBB906\ +99553CF2A24E1C69DD724C58B525D1356166179CD741E6E5A0BF496D45DB5914\ +A4DD892068FA067C8514A3F7D877121444B9C9A460EF31C761A70BCDF2B9F137\ +77BFDBFC2B479318B0940F7B078315F113DD435BBC860CB73E:\ +141D1263397455C3695F163E207E560F9EDEFCADFE52ED430FD3E6CE0443910A\ +F18D6809E0458C0112E6D6A94ABEAA3289F61ABE39E8ED284188A48A8C9BBFAA\ +A3C3E21C8B4CFA038016A9465EA7618892D7DCE0C534A5DCD71036C4DA849162\ +6D28427E8FAEF7400C27A0FEB8A3107F3DF779CBF184A8DF7EF9701C9EBD6C1A\ +6BD9A4A72540C194ED866C8ED873D143ACA554E7C1AEEC3C2BD3C05F38C9C48B\ +55E4B212D18EE993B9B89659E1442ED3A4616899D91DAF285E5A304D41E01FF9\ +2AEFD797086800BF68FD02E3A86D4F20C66431CFDC8B40E9F6:\ +1CF3CCCDB640B9D7778416ACEE72878CE1F28BB324A74568667EE229D45CC52A\ +0DD1971336C2DD461488A2BD4FBD59B3A8DC9509D71C361469BEDD2EAC6FC3F3:\ +1316EF3DC8DAC3E4BE1CB7D84B55AA3D + +EE70D94C62B7E577166DEC9686B9CFAFE93B15C9AC839219B5ECE0288F71EF2F\ +FA3EE174A8744E7B9B353522D80C8EE725018A9213B1288E47158B0DA12D1521\ +BD45B366C7C61BF326F438FE120914679220A806F4C15778F4850C1040D6576A\ +353BAF07963AFBB6327BDF813B9D010A52CFA7DD0F7B63EE22797047AFB3A5CF\ +BFF09953706F0AC741C7852E135502A2823DD634602FC331F55C3F6283F093B8\ +0CE640625A789073A2F2BB010D8711BD1AA6CA6048674A0C2CDCF00A46DF04FD\ +5FDFC6406274F8FD1E0FC895C538A26B0FD57AAE15967DEA99C9:\ +5FF211189A9CAD18260097EA1CB0BE056A44A7914157B23C956F628A0B4EFB02\ +2592392AC8B9F6CD51B515FCAB0EE9A7076B441B56D0643787ED99165937171C\ +71D2A7E7FF5F51F622573C6D47647BCE4D6B698BB8F574DEAF72B04749DB7EF8\ +77B05883679AA2ECBB97A0A3A279405CBF3891C98CF0B57BD4962A6CA3BD281B\ +DF117F8ED5A8E34C73D69735D215878C614DB4BB1C56E6A0C920FA20ABFBB91B\ +F9CB431D619AD96F53C0A1B2A9AF703EA7A47F30F4745684B8F31A1B2A60DC40\ +D5224C4287A3A61DB3CB4C901ED101956842F50BAD8A19A134A0:\ +B15E06B5DBBB639C60D133A290DCE9EA79BC4DD482A75B5AB813C69A14D9824E\ +F6B529DA1973487A80941B8EB35A80CA608D5BF4C62568F1A64E93B1DAC49660:\ +8516F50528C900D3F91BD83376A30E51 + +F98269236AAEAF81C39C20D0F95873D9A3E3B370E260137B332951017AB8A342\ +DD2DC0E2D13EFB5178B3BCC773043C46C5032A4D9A700FB065A02EE674BE2EB7\ +A8EF2BC0156A02B698625FDEA2347F4BDA6F03BCEDF6BAF16BE6BDC5B43A4C4C\ +9CF85B47B4D7AA1F6AAEBCB8563A6C81CBA07B781E744FBF390C44C43A9690F2\ +EFA8DE98605773B2CB8A9D89D364DB90AEAE88D52E885384F086A426AE61A259\ +C8F34E0710CAAA977ABFA888C09477C6DA328DDE3C201EC52E6BA2507C969D58\ +7202BB74D2E0A97815DED40AF44F728997B5E71888CB6925056F5F:\ +42A8BA0460E011CB23DA387882DBF6E335DF7E40997DFF70352BD01A46FC535B\ +6E0C00625782CE194FCC77E6A0B0A85D96B607A6AB1F943B4D1EF1454E29C0EC\ +715450B4E474DED199E439FA515B52EC7F4B988EEBB00C3BC07C9845D7C5447C\ +78356B13924B420868F67FC6B5514BCC31B59BFA7A66FA40FE2FF4646DB8F99B\ +68C249B61742F9843B5879B7860A0E6EF4D4E27D82C4F8CDE0FD41F8A963F0B2\ +6E7C5E4024B7FDC2D0DD8B29F83BE3439E0425E7E44108BBCD0890B62FF3EF6B\ +A97138FD2196A9FE9B3E4B04F82D6E78B5D1DAB4533D783620142E:\ +9FC3D8F669CAD87D0D1C2F6D199D46EF5DA2A50464DF3AFED038DECD870DB299\ +E8C44A0075EDC9135D0580E9992BD1D542D046C2FCE3A1F3948A9E0DDD63D7E4:\ +A03612F1966CAB25024B7FAD475E3AE3 + +AD4408423B35829DFE511412DA37621CBEFB697029BBE3F8F3D0B66D468D70E5\ +DE2097106344895AE73429D865A832D7E5DE4F557278232B47119998509B25FB\ +D2EA8AC3246800B5E5F910E91DEA76E487CF76073C83072CE1F7E02101F9FC64\ +3C7A9CE782040AC7BA472BBE5319EA4ADEBE45467FF9A79517EC25CDD55C68D7\ +E8748EBA3A83271B288B80DAD432C7F48C7E88DDCB25569E2BE7795D62005489\ +BA48414E13165F8F19B2CCCC5BD142D91BC9F9A06F030D3A29304DE55A3D0252\ +A0CB592B65B4E8D41933BA024667B60B3E2AB1AF99655D144F329EAC:\ +28B8FED302DE29E2A073D5C85187C43902B1C20566349A0FCC0C766B4CDB7DE1\ +B27DF7CD3661937467986879E52F61A44ACD6A227C1C63DB51A72D9D9F2D9298\ +AE8AA6FF828B84A6163EF85F8D7639D751426628D133DA30F4E14D59C53A71FF\ +CCAD3D49A1107CAF75AAD3C4BEDBDFC2C177855A252D88C61506F8DB362B5598\ +0EE5475D63EA42C6838190D764F18F0B3AFD5914A9A3185BFE8590AF4FE551E7\ +2D915607FCB8727CFD919A5BAB216536E772AF04B850EC5FA030A5F3B6D5A7FD\ +4B6BCB3F15212D76000C9D6F7B772B0544948DBEE733D2235C7FDD50:\ +396A6EC3E247CD80247168D76046834FCE253ECA09994B9E928FF78B9547EEBF\ +9066F0DD515A9ADF0A8C2FB24F19916AD5C490971479F56CF145EBD91E73ABE3:\ +3F263CEE6014BA57E5DF4D1869B6AF4A + +3D2F27E83552156CA4419ED21A0785D13E54DE818026A2BC6451A20D3E153FFD\ +21C54F691849CB0DA44AC46468C7C4F10CA7500B862F5F59CD7489E7CE1A1F3F\ +F2C4D29EF5EF10F2EBFDC22C900963AF3846D8AAA54132F48CD35634E63B0C3B\ +C3907A80A08B4D9D4F2595371D3C12ACC225A28B163B94B910E22AE70F8A1207\ +2283C6DE071EA73CA2681F7258CDC6496930287512E9AD8F9691747F58DC4449\ +219BF609BBD507233E7594802F07534314A3825F086F5243883ADA234967E2E8\ +C30545CDBD16B2E32E5DCF827E1D6BD1A9BB7C9008D614D6F17736C1F6:\ +0D909DCA72772E4629D54909B46CCA9024FDA40A13016C3794F889809C41F6C4\ +9DA4ABF72832AE44F59328DDCCD33AC9A6FBA495478C3799EEFD2848186516B2\ +75A1764A2D3B25EB01E9D9AFF1D179FE49BF898409452F0DBBC95738931FF04F\ +CD18BBFCF679037724FADE72E10BC6847AC50051B93EE9F30B771C421C189427\ +7331D955A36FA7D5EACCD03435105B07D61598B1C8A0FE4BA977620C728362E3\ +BC3CAE0492F5A2794EC7E7DA25743AF4EF21432791096BB00D598DF433C784BB\ +A21F64F16CFDCACB26FB3D48ABE91E0F4642725C0703C205FAD257A470:\ +51827074453DEE619C6E3061A7E85510C89CC4279EE49A49F04560AD6A9B92D7\ +EDDD0254E1C7E147BA1284D1AF164742E74CDFF55FFF29EFCCA29F1EB03A0105:\ +CDB8755CB0501EEAC26E84585300AA65 + +287827BB55B859CAD808378AAA6E5213F59BD55D21663927B0B8A6E3705320A6\ +FD19563C2F73A9D2F7C10CF980C560435C21A4428E43D0F416347B780D1B6D08\ +04B3C68AA589B7AF441E74C8D50C5E0C6A01E4ED1CBF073FB6D7625C227B9EA1\ +B8A17C625EB5A465AA23620B3F1277D4F314C3A06499F657A1431B5A28D38DD9\ +98C577176353593B8154BA4260ADAF3B3B01DE1C8FC1364BE9C2C4F46D679FF8\ +820C02954914BD62B46C90B36A50D0D4C93088FDF42012D60F63D2E6F29532FD\ +D437A15600CBD9CEA33DF466CE16DDEF6F1E02912296C5866DE0F9818A9F:\ +5FF9AA509118BACEE02350AF42541C5423BF3983B3DB39EE3D23A97C4479FBFC\ +A341376388AB7E8AED241BC1E1CE1CE3CEA0777E02C40C2CF37F3915F60B8B74\ +3FBCEC5D4464C6B9FC168163A5565AAC32B3CCA434A8EFAB58D23876CA41E99D\ +4D753385C83D1330687453202638C00F63A2113013FAC0DB639EF8C491E4E4B1\ +507600E5DC2EC6BFD71A77208016520951898AC45660D8A530473AFD89244DA8\ +6D0CA0F0B10A9390D2909F11DFF75F36196EAEF39AAA2A9A31CDB8F1736A087C\ +3D8CE28A53CCFC5797E52D217F49FAB9B6C15FF179DDD55E239B33B24ED0:\ +752761C128E74655EAC40CA673BE297BBAD9427BADCB31FD41D2497732576473\ +4123DBB3F9C0551B4F9AF034B342411A6A37B0BE1EEBA45C36D013379541798B:\ +6C09C94F287D9EC0B341915A40339387 + +8AB2E59A24D5F2607842FC848DECF946F3DA1F5E00F54400F5A7B470B6EB87B9\ +40C4CED5D8A6A076AA35F81DD599CF7F7A5BED3E0846824F7F1E777C27907120\ +1B10AE0F3316B4699543E894976004FFF8E8C33A47BA25FD2D6F76E3B841C1B9\ +013C6FFC35697A8EAA1F5F5C622704BBB90816AEDF123C05EC8FCE8595D4A9F7\ +BC49677D745FA24F50B075AB35D1732620EFC3E039BCC92B0FA6E5103C2EA241\ +6E3CCDD8635B9A5BE842476983341DECB3864A4197D39561048B08DEF48BCC53\ +0767AFD98D06C3702F41B08A1149D5049A9AD08423ADA0CAD9E7C33F9AA88C:\ +30A3D1BAFBA4081D12DE7D9DA0526F51E1772F6093195ABAC1C69BDEED77EB4C\ +53B02BDC403FAA399DB6AA8B1827CF8D073A9D8CA78EB16679EEB4D50957E28C\ +F2BB6CA00D05C286219FDFBF0DE35D271081AFC3DE064712816FBE1C25EFC262\ +3E1E8E41CB82B6FE205979FDE7F96DBE18B101E0C204E481BC54D5B52CAD3B38\ +9A3BE224C1564D0BDE18EEB795B9D49E8B6BC0CF7C8DBBB48AC2F68A50B6612B\ +6A4800B7C171D4026111332C0DB320802F26A72FB444029063FAEAC94E9EBD5A\ +7AB820C38C22C594A787F6EA772FD74C1FA703635044F9F3F9A52910F60B2F:\ +F9DF053F6F86540A1FB48B7602389B7B07287920EEC03D256C9735A33F1BFC75\ +99B60539ABFDF9049B565582DE65CD4BC12E3AFB4C32F49039D5B875DD75AEE9:\ +387FC84933E350F71033BCC55ACA9366 + +CA8906F79303365439AC120FC7609F3FD454DEA9CF9DE7CABBEE34129896F5AA\ +83C100105789A2FE286688BCDD09F0D335D2A4647B90DE13DB0F9045E063492C\ +970334E131FB9E59E1F5ACE75D5C8891197A594FBA0A8E85249AB0CC033350FC\ +C794EDAD0B3A1DAD08C2A2110C40419C3E10EF47EB3ED1477CA5608E28844067\ +5A6858A7D6FB58F8D8A8824E4400DC5EEFE1F7BE986599AE2023E8ED078AEB2A\ +8734D0C2F3BDF52B689F8C511CE41D0FC780F02188E569E428045A34C752D506\ +C67109B0C49FF285A1AB8965A975DD199F8B582020AA9465A87494F36F536BD1:\ +545BD5C0D0230D6247F61D17C87845EEF542A5623D0AB439DA7B111DA728A972\ +A1E714A1537CC3BC52382D0EC1D894785C3BDEEC7A8320F39A1BD11FCB6A0FCC\ +462BCE2A63B4A0D8FCDE40BF1FEDDCA4D07C2EF859FAA8BCD774362982CB2E09\ +01FBAC5BDA0B6FAAF3F57E212794641ECECC3F63BE75DC76B937550753B2E1C8\ +741F42E4C8DBB4CE6DA0964563D35FF52D0AC3E1CFCAB37B2ABA342A2C949DE2\ +B3F37938B4702EF99900FDB578578FF7CF982D42412F42C767575D3D5BC7E617\ +F0DBE0EBD666A5E335377D3F8710FE431403B9600022F0FFF2585A722BB8177E:\ +25CD677272019AD4E231E6192FAFA22CDE641D3B46571C883D490388F5874559\ +0EF886A9735992E460F1668235FEC02A7317400FCEC60ECC829D42A08E73E3E7:\ +E9AA61C6E96EAB6B6BB2CEDA79010513 + +4EF7C5614320BA98111047AF34C8971A9B7DFA6DFEF4F037AF63C29B8BE853B8\ +42CE9E766CB33AEAF9B088BFE4731F34EBA07D2FFD845666249F86868BAF47EC\ +827E296C3782C0643A814F41532BD46BA4BA1AB5B2247BB4AF5166EEC812E117\ +48D5F082F3DD076BF00B2FFEDCE4FA5D39A3A893D593114D400AE680942676FD\ +B377E9445E541CCC418834CF92DA2EE396AEE87A2A24D99CB91F1CF75D721F29\ +49899BB6A2C6772B9790090DA747072B520CCF87262E3E537D404EFA1D916658\ +B11E9CD854B15BE677FEB47699E9B9874D464E80BD38D1FD2F30FA578C9088D7\ +DC:\ +AD67815E31CA6A69297F0F33FAE51721702DC6BDEF156CCE9D70EEB29534889C\ +4327D405AEC4E10D2CE344A7DB26899078EF715FA68BFE63591C8D27DE6AC3D9\ +341A41975325864F84725DA38F8B5087D4D4FDC8BE404F348E760C96FE222082\ +52DC8877B86A680EBDAC40FF976329502BB089D4F368431469748DFE5D9835BF\ +AF020DDC609146A70F1272D002CE08FDABC3171CE82C43356A13133D4EF87E0A\ +A3364CBA0C2DACA940A0A8A26A2EE470F183F736CDE46219E611E94BECBC7D8F\ +E69441EBE8C4F6AD3D9BCF810BA1A42741F7CB855CEC01E86F191789773A4732\ +65:\ +335310F6B3A04DB69AC5C39CF37D5A06B27E9CE5B4F20BE42E41F1FEFD23BF0A\ +D256F520A5EEB1A3130E70AC1A65BB92AAA1EDC73B3747B510C6A2F35D8F8936:\ +6C77E673E124E8C291F695BD10867EB8 + +912FA9586149CF6EC5ED842F70F6EB5A27580A88DD43828D824C0E476BF94054\ +2FE78ACDF16105E249452618D90F776D51DA2CB7E5C641077877398481FDF512\ +0F8E928C83C3EF9042A2050F1B59A0E6302B55A63E2C8234F01297D420E11588\ +A48703ED31513480B442885CB9333B9204CC0ED72E645220C90E9C77B76F8817\ +96D113B6B80F5C86389349F41C26E53C8ADD8FD60E299AFCBEFD37C2552EA269\ +EE8C9FFAAB31B99FD772A33FA134BB087461A54671A90D9C4A873027F9C1BE84\ +B6D289549E8B79BA5CCE6F39E72FFD446A8A3F70521DFEB7B19E077747159253\ +2635:\ +B17B2969B5614FB51F7F6981E3D09ACE20329121024F2E719DB3D581D48EB7F0\ +498F7C53DD31F4D3AFF1476EEE83090CB8DB1BC610435819313E5B6404082225\ +060C241C8C5EA35B9B2B61B04D5EAEEE4B1E606DDE8D7044A37114689665530F\ +AF2C5DB9619923F428CC7593840D277D8A54B5F9FB1AED5742519A83A3B33B3F\ +0ACB7A72BC1A7C9EC8CBF9B270657153A5E9F062511F7B7FB6F53EAC40B6BE69\ +07C83150489A7B20F27EDF739D52632309625723207121F8B4927A3473F4CC92\ +F6CB4A0C288BA93AEF412EB0E5AFEA66C9E92EADE2CC4A05C27A296A0DA75F50\ +398F:\ +57AF0AC08B589616E3276884E48C39B995257567F1308F089406F0738B648D6D\ +973C3D0B624EF86F3D114D25A68D38CC357200167A7609D74412FE5CD4E33568:\ +B42A39E6134016F07DD0210BFA8F753B + +EA17DB749595AEBB4A85112FA69DBA1F581C83C3C482C36C7D33A2229930A2BB\ +438989688E9008B29EE75068E4B04BAEBDD1D33685D9F2D6CFE90FB1B9EACD8A\ +E94452EC5BC0C953CD7F8BF24D938E53720E784F537DDEB3AAB4F410E1EE2736\ +C2C02C1DF998C066191207C89C5A5DFD52406FDEAA699BC8CC4ABF9637212230\ +1B3423006692CB14E8566B38D88365D06D9137908666EA8493085DF520ED9E05\ +E2A79072D5E899558E5CD0053251A787C27F41C621801AA24868D7664A32115E\ +3D055B5DB9556704AAB5F61604305777A7F8B52800CE0A151C86AEBBB4BF7A1C\ +899FB8:\ +71C48E3DAA44D1812B6F617DE3317840D31701365FFE58D87B1642F57B4D0627\ +4F36D1F7D50A34D9A62A056D25984A1D8B9175B7C85289C3C1989A990861E824\ +F642F06082E3ED9A30C39F2DF3362B96E03D468F4E5AFF7DE31B3FCF4E48D904\ +6CB4DE0EB6E00B7ED62ECDE10E9834A63C87864D333B252A55EB5F06A432F69A\ +2B43A57E2D69B53D9CCC6A998A4AECD77AF46811E7B0556AEC9FFC1280144813\ +E0CBB5DAABC3FA8B2EE19F99525AC326DEC76F4B59509A88E8D58AE7C1BE50FE\ +934D951AF7F330D92426C975B317A8B2A5CDE3472ACFB4EF0BC3B70B0F9ABC1B\ +1E1545:\ +6D06A63AA19C523105160215D50634024BB208CD465894AD8DC88AE5B0FB1F6D\ +EC4B93A44D64BBD44E460EAA9DA70DA4E23AF5ED8F8F8A44056FCD3ABD3F8DE8:\ +83AFF932BA2437132DD0EC7977FA2999 + +FCF93E6DF50872E63501B70B99F8ADB937B95B2A2AD38547FA767355B23F42F0\ +89D73DD9C4B8F13F3FE7803774173A006378FBADAF6B1F975819B372BFB36193\ +87A17AF82ECA6F1730684DC1237F15B894A4C6014EA93B77496928F6BE06B546\ +0ABAF78F5B06B35BD311B925185F3C37D2FF62F995FAEEB1340AEE71227BD26A\ +DCB5783900ACBF3C9BB3C414449E99BC8EFA5DDC5BCD7E55B12D4E21A7A4E12E\ +07CF888E8F05D5A5774C0EE2FD38AC45F0939B6810ED128BD42F33FC236242C2\ +4B365662668B497BA21B98E3CC403044361FB88C4C491DA34644104FED5ED501\ +88263B34:\ +DDE76466249800B6E76E59E28FF5A13C09F485E4CFE91D738C992E551918E244\ +A19E409D462B947218E053C7154431A891353EE5FCFCCB5C06180B29C2E3BF28\ +2E855B123F0166035BDCFB4CC9950DF7A72704150A2768DDE7A168CA3DEAD251\ +1C9FAAE3BA1B13E8AC01A16AF1E2414BED28B1B494FA3F2E4BA0908972951C17\ +11C594B1A31BA1C3AA31E2C7C1D9204B25F0A71165BAEE774E77886E24E1EB5D\ +72F9A99BB805007859999658E9F1E9DBA6C698DDFD2F1D92D741E75423A1B4A2\ +646889C461E4C22F8542362E6640B1B7A318A96F568D8FC6175ABA4FA45F0365\ +298BB41F:\ +7E4DCBDB3A16569F7BA83E628019F664420292E3B93F6258C3C8686022D4F03E\ +5CBB4BF3577CF85BBF00BA8BE772D99EA5DF436A65F7AAF93DEA8D6C5422C898:\ +DC8E94364CF778E8EBCDD101A19D4601 + +21FC19F9F97727B7DCB59C30B1D71632CBEE8636A8D5B204B0A243BDE418874D\ +1940CC068D5F47989806A883F6DA94B50178B9933B9375DC0DBBBB10163878FC\ +4398F459D28948E6D72C6585C20396AE45308FB3069F872CB9F3A4F83453D131\ +CBBA86F0CEB20EAAD36A39C4BE17018E030308323E5EEE3CF6DEDC9EDEAA6798\ +B413CCA0B44D4744FC81A1167CA0DAB5988AEFB7B2A02F240371CE29E9DFD164\ +64B6564825C3BEFCF4FB3CD489665F5F4BEAA7337EAF2FFFF4228F2FC0106A2B\ +666423C56065E931BABC44F26651229777170E7509F55323BAFDB316EBCD4D27\ +73A94C0A12:\ +F1E994870CF051780023DD718C14FFBD529BFB1C95BA5CAB5C559DCCFA3E1CBA\ +108784A609471E451D85D41474D2200A2FFAB6F2B9D6DC79BA8541537D21F9B8\ +95D57E9900156A1570972A477C14EAB75E65E19DFDF19F84A9C4EFD253B2AFFD\ +DDC7DF8F3C4F012AC3418A9F4E194DC859E43F2BDAA14A2C6BDC66CBA8B23C79\ +6C1E1FD440FEE6613459FFB177591002180D66995239DEE4703403267519BC36\ +9919C947CA6758BB5CDAAE2CB9F015FCB75792344B153CEFE6D2D70FF1047CA9\ +F618E3CE4A04EABC577493343A5205D84AAB7BD61B82BEF057C91BB8413C8716\ +458E870E41:\ +2D1281DF61A249E8CBB88A1E06DACAC054980A95674F05F7088D4E00DEB73973\ +2754CA620864BA716AEAE0225CDCC7AD95271C172FB0FC3DD32108258E7DF89B:\ +41382AA24332F1F64DA504B5792CF9A3 + +4BAB9EC9AF710A563D2403C1D8C7BC1C2960D42AD2BC9607C4C54602C6440065\ +953820ABDDBFF011DE6C352534181A993445F10D0E4674327343CCAE30B8638C\ +EFAE2DE298FDAAB3C80108313C0200FC135FEB694A9D9F5AA94EC9D57C55F4F2\ +D3132594EBE89BDE032206655EC6E012C053205DB271A985323A47C10A47D0B8\ +1D4A8A788D999B7473843776B28213108AF985D87892DABBFE8FDB03BFE07408\ +590AA982C34143906F246E05BA4CEA0EDA6024C915A95509922ACA4A2945F76A\ +11F70E230642E35F9BB49C226097D57002847A3F88A6B463F953E425548BB892\ +CA61CF9AD6AF:\ +0F8694CC1A6DB1B892333A5333A91E7A40F2B87D06BAC91078CAF1BEA410BDEC\ +A010E8A118D11E53173FDA34E9C5F1E0855165269E464C463CC892467351A08F\ +06E8217453B53D51842B9F0C4667CEB2333BC336D9F0BAEE6A84FD1155212B76\ +C2EA6CD05827344835006F4AA9D8DC87456D540E940FEFF82CEF51209002BDE8\ +882CD3B2F0484A752E168007D02590A4E6C164FB8B05FEF0678274C55D366F1B\ +DE2FD0CA580E54E94BF04583D34D6B89AC5DE76F154F8EE6E6B34834FCBD5DB3\ +CAB225B0C0B605A5B1AB4BAB1D0613BC4A97817E23A3904D6CAED8A989BBD428\ +AEB38A7F959F:\ +7301292EDF094D0184E0092C0DF8199CC56D2BC9A5D37B4CE0306A65E45CFBFD\ +50459A8733904BAAB33C5EF7E4F98B25E622EBC910C8C5BB1BF07EFF34CAB953:\ +F22D0385190A5C34E8782D80608C5B16 + +8A037025C10481ED49DF4F3E54384264DC5B5976B82FB43445C7617D803B9650\ +C492E555C7F5076E800A770874056C8BAF1B7B0ED780519A9A967AFFB71620EB\ +8636CF3CBD30E78E0FF356D98F6863CBD32F2910DD330E9CE70C6627E8C40269\ +E06F4BFB076570F2CF4B86F610F3CBBEEE6969237312B642F63723CAF57A8494\ +206E69D694A0D7D769C01BB9C5E1FD059AC750CFA4FF6EAF19051F60D7468000\ +855D7D69A8C4856D08DDB8A8AB4114956B0B241342726CFBFC0EB3A6D5A5C5B4\ +B26F5CC3D13932F8DD1A02DB330D1332FEAB6E745C1534193074E6C4A7995166\ +B2F303D3885B4F:\ +F770E5B5F3EE03CDD037E8611D89E5D291B1CB6EF23825A8299080116B2D0917\ +17BCF14820C9675C2300F9AD771A73A3748F69513456AC5AC15EE5B93EB23760\ +EFB1F734C61E886803E1A660D76BB2BAEA61D584E95D5595F3A0883BB5A73116\ +A072755616B82DFEB10B59FED3407776E8C12808521BC0AB98C795E50362AA1D\ +855E8CD7219613D31B9F9265C85A710ABC637EAD6D66B1B52C12058E10D4E9CE\ +887DA905C29E32EB6741863831AA6AEB2427AF7C8F7874F6416399A2447830EC\ +A01EA17C3B366C2E248241CF1628C1CCFFAE6C4169422703DDD5722EEF9AE3DB\ +FF3877BC2090CC:\ +570D4755AE5F33B093E98B02A1ED2CB5C01C14CD46AF4DF9257B0CE0C54EADC9\ +42C4E322B599B1449367AB197BD93FCB3DBE34BEA9D035A3145F5D0A45A57727:\ +36FE992E078CCA07611F66B9DCA23797 + +469132F5B6B71F13C221FE947170F189A350B49375E6EB98C2170AB7E2D819A4\ +515EFF75C392587D65B8C4CB0107800D2523DDB2C71D25F19AF1F0E1E65E9167\ +127F2BA673710A58FF61C1E24A3A1791FABDEEBDF4739728DF7A22E99FA269C2\ +BC33BF9D4909D6A4915CFE7A78EB9305C224533497FDE3629F8E6981BC83F716\ +69EC7A428C3EAEF98C304A55942132FF8704C325709F11A697DCD13F6328C117\ +039137BC427CA55B683E0512D8FA68F6F2D67E9388BD21FE0D4D2F6FFE648729\ +BF53C691696939CEB5BAAF14CFD9B34AE4921A4B713E6B796E3931C5C012FF6A\ +4462A261B2EB8F07:\ +F9E4CFE38CF201D9C260D1D85DE8EE3FB5E3B0CADB4D3EC290179B6D439D4EE4\ +898554DCC587A47F71F64C5E5306510CEABAA4F961A2B99FB3E63326FBB32F8C\ +E994953CF987A5736FA4EE0678A37EED814BC52B0ADA7A3C46F6BF2CCEB9DFC3\ +21296231DFBFB40C13193DC6C8E5163F7D97DA82FBA11C797F55740BD8DDBA90\ +BB097F36419B1B7E4B14809516FEB4844EB0E480573B06FB2FE62BD42ED7FD47\ +6C213287FB9BC9B336DB0B12D311E5F5222CD679D28186D8699D90007AF10A6C\ +518B0A23B4789AE2ED749E497D2EE4D7DAFFC8B904E92BAE48D9C0B54F2B1D63\ +847A8B2ACF014943:\ +C8E0B88E2FC9A9532DE10BA31455D76B7B25C46DED6A40CF45873DB3BCE50C39\ +F49096D4D418D513F7EA39E92000C76F95390C3C3B9AD04BA586BDB94C8D2A09:\ +502A91AC103E0D8C10DE5BFF3384B1D3 + +42895EFFA6DEB661509A8DB802CFBD51C13D7BA2E221A0087898B5E15AE55CEF\ +B592DC1B7E93EE8261FB20838B441C32F742AAD275FCF505DBBECE400B8E08B9\ +66A3D00BB110FEB9A4461514DCD020D2FD756AAFD5148531EA3451720CC91C1D\ +7E7938BA86127DD98F0A851B382311901466C83C6D278153A514EE3C6C6D9C9F\ +2E7AA0DAEBDEFBBEB247DBBE33D81DA0F845354B220C5D9059355BC5816B2715\ +02B884C10EAC8A8A275AFF3DD63FC90CC1E44590D686ED15DA610E1A93D8DE02\ +685574CC0F8CF42E0EB64485A366560D54DF4FC15AE5C5954EEC5B62B5C2B5AA\ +349F314C90A30D76CD:\ +741DC67C088D533B1FE360D3D501BA00BADFD2B6C256BB89E929F53226B7A559\ +7212FFFA5727F4FE77A273CC06CD4544E3AE994782186D8CF2977CBCB63F61CB\ +B5AFA9AE3E05907FE50E6C4BE1B4AB9213173A8DBA6FC6F4DC179E2123D85925\ +D9EFB4D4C23FA78D3D4A585FAF55C595F6DD37E83C5D5503A476FC3579AA1F66\ +49650A80D2AA2A5D35AC62C991DC06636F70677F8C566EF7126E793BEC976270\ +B68E510A2BC68F22AE6DF35FF56FDB6A15171F70E717C9F0F05F7CB953D01677\ +E0E1130518907AA573E531E25830D4E3E012BE7171B3098F3BC685AA89FBFCE0\ +ADBA90BDD7E7EB3AC6:\ +797361743DA7E544A17ED94CB6034496CAC8DB82690B3E3C6AD767FD5C21BA9F\ +067EA13C551A728C7B56A9F4E2D194EB7FF441C3BF1F536DCBED2B643A158BD8:\ +EECBD553AA8020CE0471796A24FF10FF + +DDFC4B8C96DA21137E0B405335428A17DD4B22634EC67F0DBD110895B06460CF\ +FC9BD8700A90C2E08873DBB3329A289CD9A0F05E904E310DD3DACA9D88C9F3AA\ +20931BEE38A57C9851F44F2D863617F6CCBBB246E97BD17BD6C80547F5B48D81\ +EF33D7BB142706A525C8A346AE48057EB8D4E44B6490D8F6F0ACA5C3C3B2254C\ +8272EC4773BF32F15DD69D00F51DDB4FBC399A292442EBBA4CADEAFB1EE3924E\ +FCF23066FFD8A43426FE1F38D892087FEAEF19A6EF0F2269DAD3C5DFACB37058\ +45501DF86B9B282595A50EC02CECE2E3359C7ADA5DA0058E11DFB01770E75505\ +FD8544E6AC809CF314A4:\ +B743430805C875DD05E8F1359759856C74653C8E026C08E772710CCE2B9D4F8E\ +560176F3340C3925D6CAF716BB96E4E90A1E25359B6B949968CC195828ACB268\ +FE01F584831DE33F355B6799D93800794380A9F0CB2803E77D89231756D1C1CF\ +7104B555F657DD2EE6E75A49D1D1E9B2009D3175D16B350215F1DB9ACAA658A9\ +C30629AF5DB460778CE1AF0B71E53FE1B1E34927CB96F22E4D8896D8663BAC98\ +993701CD6D441C4F810E90359D987EECB0ACB139E493BFE127CF9554CFBA9ADD\ +76A286F1AE431F2873ED59D5229C23CDA1676B08A30B0F3CAE14D5092476EC5D\ +729E4C1C04BE9C80BECA:\ +64FFBF63CE4528DD431EF5FE89431A1BA9EE3AF072F3860D392BA06800D8D1C2\ +EC523EE97A4805BF4CA1ECA8256226010C1D45B07115E2EC83C08D20F45FF7A7:\ +23B5FE790A89FF2C94135AEF589507C4 + +B9D13732E5789081E76FBDC151B9B5687E14084E85967EF1F466A96D180E99A0\ +EBFAD0BD62D3C0A9D95A7C091A6566E6EE16F431A745A280A57AAF96E825AEFE\ +43C910F03426D11B158FC0A564DF953F43C22A41B57FAE2441FF0081FBA6332B\ +46907029C05CC4B0B3808E62A928896B529CA834C95C82F961E5D5FC9EC2963E\ +8F05DB56ED106A83D69BE024BE2C3BBBE7277EF1DB65AE723111808A26EFCFA7\ +A2163AA7F3BEA56432CFCB128E33F52D0D9E74418D4125A207ADDA7095B432EE\ +AC6800FAE65CCE8F15BC1855B6AB339B936966228B9902463E2E4AE662EE0F2E\ +D461FD378C74D44FBA12ED:\ +276339F12D23B2F085F0CE29A03D40428E7D73616D987A535DF9F4CCAD37002C\ +801DA88FED3EF6F83BA6C831C81B5F1992D5373CDBC1272B0031499E02AEEE1E\ +FFD30D49BD13113FDEF45C8D25BCC488E3CEF5AD16B31C941D5CF8254BDEDD65\ +FA1FA999D361B1A70E828AA1457D1CD729613D2550260062AA0AC7DC8FD34F69\ +AAB065C58CC4A49973CBED22198C4F71AB3C912CEAB4F8675E6C52C55C520410\ +117B224F2C42A14A538816FE28EF1ADD9147698537FC61E8CF64540F88EC70B5\ +36477748E45D80B18E46155D2B6316444BF8719FEE78B6E00571BC3934204D07\ +09FF3F78421D5764983046:\ +DAF3B35002E91851700EE5AE30651FEE9D503A68E25DA1B0F995C85682BC0601\ +D7B214EAADFFB9019D85B5583D6F6D70B0B67DB9E667C950918459D91083621D:\ +FB5951B7CA80C7173B5848E840EB3597 + +47F0B01DD8D9F113B1111F687777FE1B8475BAB8D5D9F97986043467D4A1251C\ +674AA433A2FCECD248D2BFABD29649C49A596DE37934F3A22B621AB326E24772\ +B71FFFCF0B55BB2F11A95E398DB872DA7E7F97E3A78FDB03C9C295DD445038A0\ +3158ECB9A31DF7A5BCD44BDD1E412EA66AD320D7F8F80620A2215560237347A6\ +398493DDF42E71D97142571C5DF579B4925B982CEA4F71D0E36CD2449F4F52D5\ +278810549371D6253BDDF9FFA02BF89D1FB1F506CC2FB5F827876EFD4F1F8A78\ +17BD27BE8ED9C8FAA11FC9C647364CCA55847EF4BC8EEC950CEFD79070098AAA\ +ECD38993648621CF310AB2B6:\ +AB274153C3B88DB46CE7316E630897AB41FD99DD7B50BCE37A33C12398981796\ +44AC08A45865466E18D327F422F60BD0EC41B22422A06067611C349553120D74\ +63DB99AAFDB557DAF453477BB076FD0E0B9ECC54531734CA0BA750787DF9F37E\ +65A0657F531D86A2CABB597CF4AE6D0E3E8404D1DEC2FCAC1949DC572F1D51B7\ +B163C15C144D3E8A9A6241A7472C8D38FC9885D8F65DFBE5CB5D9D8411D48D93\ +261F94FCA257B6487E4F213537D7B227D9AF905FE7ED8090F26C77EAF5308FCC\ +EB5692FE383B5B3FC88A836165FA7D83E64A4B8D7983C267E1C21F8B845915AB\ +65C72A9ED5266C3462F870A0:\ +03F74F149E521E4C126B57261077D5802C574EAB94E75BDF4C0AF7D463D60A96\ +1EC8D5047E36AC203B4793E42D7231E38AF206128C483F849ADC9EF65A6DBED9:\ +9B65716CAE6C38FF4144C8729632C844 + +7442A74EE7A4E47CBFA5586C9755D50F344E7C03EB8414D121CA04DA644E44F9\ +276434A0034EDFBF2EA2AD5B227BA9D7CFDFF906517862BE6092FE320C59DAD5\ +EBA21692526563613DB4E70BF67A6E60B748EA1274D23C51E38D87CEBBE8628C\ +57600FA8D40FF7257F48A9D986E1E85F0D22E4035369AF1372A289204228C872\ +272FDDC1488B46AA440169FEA9B2532D1BC73732FC9B316589019265777AC9F8\ +7A773429861A0DD26042ED4C35645F7E2DB0D5D21D4F11FC485F330FA3545C47\ +1816F00B701BB055142EC630F35C9CE6E4FA45A34E7A782096ED31EDC1AC4150\ +7B5D16603146EB013324CB3ED4:\ +58E5AB04DC73919838D2E393ADB3BF0B854D2DFD1014B92F6E1F2457A7D3555D\ +919B9969ADB8A0F5BB4186633496C98C8672F79141F7364DF81DBD306EE0C457\ +BD8663318AD8020A8B77AC78F04AE830F255B44AF18A2BF81C393EB6E4742C6E\ +082586DD597EA811816D91259388718CE445F772BED05461338463521AC0C04E\ +2C2659B3C2E5B119318497EFA7A5B0F08350544C219ABF10EB7950633F48906A\ +7BDB5249CC19C13445DED003964DD425EB2C804DA0D5E4033BF94618FE97EBE9\ +DF437DE869F15E10B539E3A78EF8B05DECED51108D30147ED6D3CB592D7D2129\ +75B3F2EC7A75F110EE24B43219:\ +8C0409111B900DA2EA59092A1DA364F06AD0B5700353A5374E9AE381559077D4\ +1C8F5B1AECDEE1C07F4E11BFD4B20B84EF2C6FA3D64ABBF7B93BA039BC5EE7A2:\ +86CB12ECB42257430C2D79EB86C9D6CB + +18C68DF21BAB33BAE508515B99925FB785049F8F988EFB2DDC9BC44AFD79820E\ +654182B99571C19639FDCE6723F0151A1B35477CE64CDF2E88F73F361D111E0D\ +3428B04DE2D789F3154E357AA8F8ABC0D4EF7690A3F2F646F8E1CE7F8D9E5057\ +4241A8E41A75BFABBAA2D2037B893E51EFD9477B53D022ADAA64D382F8ED5959\ +ABAE95B912E04F035D795FB607DD9BBA4A9873C538E25C5DAC4BDCEFE0D63167\ +4AB2C6BD2F6AC8A2E4FDB892920490288E35B10894B33E75896FD84531E67BD8\ +2866B19051F59D964C001CAC6764D39460C8216394765A580A6410CC66A4A3E8\ +C4CB318AEF0F5FB4C6BD52D24D34:\ +BB211A3B1BAD325FC33B561EBE986D5E03A8F319B0114D3487A2F4B29735F4B5\ +2B9D1E83339B7169214F69E8BAED01FF0FE09AC0F04F222FAC7A99448F11B09F\ +42DB02E77D130C2EC0B1B146C8C3B9A27E8A03604267DF5FE8DF5F4F8EAB15B9\ +D2B4E7A02C157AC6FC18C4E2F82A630A9064418B9ADCDF4B0F98CA43435474A8\ +ABB0DF2E43AECEF571E4C382427BC2AC0BAC6567473CBC7220E7BF682050F17D\ +D67A0DF33DCC9079A6664ABC029B1308D6F969F88326748BEC0300AECF5EDBCE\ +8D2B9BC79791777F45BD2BBB5525CEEB3884914125ADA4CC0866E02C47E34089\ +6946EAED0D8917729A20B0BC5277:\ +E9085EE53951FAF5F0DEB5489066FD4C29D342764626075A25D1A6DCAE8FE201\ +BE2EDBCAE08B8D7D853827BBBBFA03B642D857324A5835151620B78FDD4A1D44:\ +14BE182E38A344D85D49FF2D8CE3E7AA + +15918520F3A5A8E78F554362E65BDED51966E000029685D8F5A61D184AC17B2E\ +BBF5BE9566CF5C46E2CC23623E7F1DC20744113761D01BDFDFFDB74C1DCCDE9F\ +2052A5516C848700DDE677667E52B03D89E8F147C698739664D52E9DFF2769F1\ +EEB37F9D9DD3418DB21E402806CF7F6EDAF35581284C42AC5501DA4FC2EB5F32\ +66693A26A383D5DFA66B291B8AE384AC922BEC973CD345EDAF41045A51FC4E36\ +A37DFF55D32A19978C239F43DAD3D8FEF4F98523C2E2FF28FEFE794C64D19991\ +30951EC74D1A0CDA56DF82FF158115B62B7BB062DCA0DB913C78BD33B44EF70B\ +758FE3EFA4E02F6AD1708C4F0B493D:\ +2D49D411F9237303B89D304B03E4CAA535C9299842363C82549EDDBA752B27BA\ +08CE73B7F30FFA78275255F6AD35973A0FCE8FE8D060586E90EF6AE64B19D871\ +77F911E43079B8232DDAEDBC7A77E294E2CD59E48BBF02DE77C76E8BD2D3F9F5\ +1E7F59044745A69243ADA6DE557F35F42E8D46C44ABDBB9AE3EF013BE854503E\ +C71BB6853EC11337D4E95764F5A83BAB2DEBCB16CBABE628525F195CC2EB4DBF\ +349CE9FDA73D001502FA872B6ED26A56738BBE0B1B23C9A847DA28905DEB2D82\ +02C3903DBD2E7DA694D1B999BBF7444AFF2575BFE84B671D576DF097D53E634F\ +D5DA9C1363641699FA678A5E2B9198:\ +50DA9EA5BC2A67B5F1F0DB776A3084A32F5F1F3318A330F1BC06577D9E50CAD5\ +3CC82002869D98056E38DF10F0BF30C33FC601AF527D6E5683C029D4F30A726E:\ +67131CB3F2D744E0C68BF4B872C2C5FE + +BC06C51D1422F4917B4E1AEDAB1682A4DE41A0AE0E29E916FF9966E05A3FDBA6\ +7AECD7E1E870633EED5E06CC223D3E8DE1DBD2ED672B2650F759A4D56552B1DD\ +C876309E35A74087B4ED8846EC811554F73BD30050ECC65DFAB8DC83F4FBC03B\ +2E08BC0F94E675E5BD79F5EEF270BABFD0E01F27BF24B29CE83FC211236EF9AA\ +541EBE0A2BC8565B6A70FD68B07E42F5151695A7E5C70E595F007E5EBD112045\ +D7879B8CA50FDA5C4EC9069E4B08967B7046204C62686D311F913A9CEBF3936C\ +A5AF98D7DF0FBE58237331A0F0D06204E9548A26F14603A23F9E8AE8B21D07E4\ +EC3FF0A6B31360954E10F115E1B9536B:\ +80E53B32929FA660B171E187CF208337620D14550A0EDCC3C4DC96F93C3A4E76\ +A27F3924E334B841610B486CA5FBADAD2BD6A663910C26017232805707748736\ +3647E5E977DD32E953C4B1A34B0B43A5E9CFCB974FC06DF890937FEF591D3506\ +68D6BE6477694C00C7B3D9C15FC6FFA058485EE3FEC5716FC8230665D8F71DC4\ +84E1D83D848BF6F0F020A1EA00E060254C6A7CA1DB49F101BB88786DA40878B5\ +AA758D63692FB65363DB11ED7DC63BDA3DBE18A509E567ED9D200386B5B878FE\ +C9571F39082A8DD7BBD48A936989ED4A95873A77EA4D24778FE0A5B5787F5B0B\ +2BB12629CE5AB14825E137DA01164BA3:\ +0C6CE2F496B1158EC119B0A0E9AB74B3F489B4CCBC9C895CD7E19850884F73DD\ +5B05727C9C0AF2078D8C578CE24E2F48DF4D3ABE6D238A473122F3831C4F0787:\ +FAE09A5BCB263B8ECC375BA60645D86E + +685E288E1C3800E1AD2B7438F78467430EDF29B1186D07655A44CF36D2D73E8E\ +CE227967117F581374AE4DA744557CB39CD85021E5C59173C0D89750E71B8FD5\ +FBD7617BFC427F854877AF7FE3CB7B0A3F637FA95C703956E8102C1FC3B054E8\ +BB58F4E8F483DD8CC178B1FDF398784C8716421799FAE814AD68588E5A68E2AA\ +907F4B27638AC73E76BFE65683DCD7FB84C41828D5F18E4CCC224AB00E72DD20\ +65DCFA293C79B4870350D91C2975698D88B33FEA46DFE08557F244C58B715900\ +E75B4B0CBB1976621596BCCD0FA241CC0C3B6E452690772A950DF5785F8D6478\ +3F3610B67ABAF7E6675A5A0505C982571D:\ +BF5B135026F3E73E6EEBBD22A1210E2A863C78E11C0BB11EE8A242E6C55F01F2\ +9B9DF915437DFCD72EC253A1D96AE713CF822D2C08F84BE16BF491E09353C3BA\ +8C41A4ABACB70A24F08EF17BB0BAE9BE6320E73F6CF2DFD758E7CC40109C3609\ +2AB5E93D3DEB6C03DF1C028ED44345E4852F8CF738FE41C98491C38605E40F89\ +15C14772A524042B02EA3C3A57C46BD91F8B7D2D6DCDF48E2DC23EF061043766\ +6CE3981D6D59126840369A11EF6E3304FADB64BDDD3BF5F8C183D6258DE174CD\ +2825BC84F7F469EAE12B622798585CCC639956B49594B3A6EAE92E1416AFBBD7\ +0BA2CF9C49AFBA035E28AD657613B053CE:\ +A9099ECA8DED735C5973D029F3EB1B7880AFB01E361DC27270F191FD24714C42\ +D5D2D5F03DCB344A43537077B1BB4D346699B61C381D177A76C9D316E3E93770:\ +AAD82154B7370B6A67D899B24CE21E3B + +1B7246ADBCF13C1D27708145F1269E684056DE1CF6D698C06E83DF2BFF3A1859\ +BE293228075844FDE9A1233EA6A9CB8AB2CC7893789B12A434E604E8EDED6A99\ +114BA6257CA34AB9CD2CA7D42147742DB2EDCE2845EF20AF596E6A6F115C486B\ +B9E1BD780693578162D210DF7569E10E280CE840FD47692CD1855EF58BEBAC8B\ +5EEEDE0AC581FF8ED8877640F60F73D79CD6D445106D76FEEF0FFC8144290981\ +8E2088440D1A5BC3457BCAC137EDC41DC03C73D2B0418E978C3268844FD1C8CF\ +6CF36F0DBA80319E2D452E1A0CEF619F11C08F2BDD5B79D52E30221AC2950737\ +882A2CD51581BF34D5FFE24E73D5BAE41985:\ +FA99A6CE219F8CE34E24B1E6949ECF6147984969CF0E6D1FEDDA7ED74775E055\ +85FA5711F97655FF7D3038381C7BE52C2F177CEE0C50D0F841DAC31C0A88FD65\ +A424D01167CEBD9F5ED533764080F922BEF0B90571AB5A79FE6E3549C26BE626\ +AED82E5CC2EEF781A2F2B8099413333454B490667D894C488FD9E27480F08259\ +0D3888F38E841F80BCE4900A2996B5382D1990331DD45B3632DEF6159F19CE46\ +904E1558B460FC17D8FC8C9E159AC634C8BB9300CD703879DDF2D6FD9622F1B6\ +6B1CB6D51A73B54B198CA34C73C5498685E629DE82DC3FC7A4C033C3566C044B\ +FD0CA8915C6C5C21726A38B60F28FE9AB511:\ +27ED87FF83D60062DA7B17EBEEA283896EDBE4C1C7A0955D36F49F361D696924\ +EA08584069AEBD0B2B90635D681D28E98027E1E742A96E2FCF8DDD84C0452757:\ +EBC60C3A26939CFC266533839EEC054F + +1EDFE0BDA25C2D9CB00ED63AF3C30E3BF7A7AFF9169B749802C97CCAEAC6B87C\ +C74646316A0F7F52BFC1B7AD674CC1CF2080A3EB780B0AF03C1AA27E5504F8B6\ +FB80D1ABBF46A40DFF5624BCD9D4267D53E3AAE275B961050F3D9F11DACA2708\ +2D258A52C8AB0DA603FCFE849D6625C4B75FC7AD37B513ADDB455DB40855AF37\ +D2C74A91CFB829935635CC1C41584984D394CAECB1260BF3CD44AF2113247EC7\ +F02D0DD9B6C7E70F4A70FDCB01559BF2CB71AAEE299327FF2753B72F354F6789\ +EEE630832022F8F69E0609C4C9C11874291F3ED2CEFF3EC6157B26C87E074ECA\ +17DEC907FCC47CB52CA51E7D886C720BECA9C2:\ +BA20D7C5B159868A2FA2559882EA88C82B1E3048E7F65A5EFE89B8FE11AC800F\ +3B046017826A5C6319FCE57B4E26D3642DF11270D0FD1D4455C441223D0008E3\ +BD8E3B78DBFD0E25B40BC62AADE9C9D83847E3865E650AB32C9933538199376A\ +CFBF9418874E71BFAB5A366F32567A77C9B6492DB3AAA1D0917556A2D4FF3E89\ +7552FA06522C539C6BD229CDFE109EC6A5BCC0D33C282464C3F3B4707C2847E8\ +501FC54DF0F99B8DAE8198798443228C51A97BB12C7BBDB5BEBC813EBBB28FA3\ +C1737B005E68ADE766F39EE72A8463AD9648DBDAF8341066F72C5BA7BA09AEAC\ +6B3CA46A5D80EC88D13D8FF63AB506331F4EDA:\ +EE566E33DA207FA5086607A1ECC2815A1AF4B05C4C96882727570A23A214517E\ +2E93C9FDC1FE860C67D823D29377F1BB45666323725D7A0D219F65EDA6B2DB16:\ +A7A1C1833033E0A92BCC961B291BC155 + +ED183973DAFCDBCDC28769895A208FCDF1D336FCD0AD6B2B038014AE2474957A\ +FBB14C7D96F95471C26A1D74E4A5471B811306DD9A11BA482CD9B62AE5798E62\ +1D5DF916F7EEDAC0B85604C59B3CB2E0683E0AEC5560CB9D66EB28B7404F9BDD\ +45735EEAAFB404AE56EAF78A824436384508DC4D8C075A73B5EC71B93A6684DC\ +906649557311303CB53F82E5AB97A5003587A375D75FCE337FF1ECABADF76C5A\ +B3B49E8F9CCD5F4BBB1E3136E5950DA150AD0D273025A163BE79AAFC2B706FF3\ +44E7AC07EAD93A18D1C1C6D732930E89D2EB50C55474F24AB2598EB6C54A8DC9\ +66ED61956BD8DC48F26F0317F9C2E0CBBF1E9EBF:\ +12A5E2CF12E3BD0E5EC9A319DD0592BE0CFC95A8EB313B800211A9F7529926ED\ +1EC026A8042B73245D02C3D3A527EF8F8672E62D30CCED471D5A20D02DB17658\ +A5A69A2EEC8E57AF1C2FD24F0830E634CB099F9F84E7821DFF344EA63A0C27D6\ +6D0E3ABA633D9C6698323B3A79D7F292A703F55D7F35DBEEE65A683FE28F9892\ +56112F889B80B2D8865060F7765A77A421C942D12F26E43C1FCDB67D26A4614C\ +A418129B3A571425944BB5320E0E8959A12AD661D63C00D7E7040DD077592A25\ +7FB4E799119567651E98EFEAE102B5440034C8F118F9D8A90315233EDE3ABE4D\ +50A76588DA3DCC84685269074635D5EC8463F63E:\ +D034A16BEF7526B8E15C0F74E5A5C615249F6462D609813DC10B964BEAC2D86F\ +AE8051446AEAB7332408967D4C0E11386EE1F3E580769C5D2E71D347FA5E1679:\ +CE090BBF1BADEDB45D510FE89AB34F1B + +511BBFEAA78DC9D2A7DF2470C103ED2E8D6CC2EB85C3C3529BF9F57D911280B8\ +62E29B083C7F737A05DC064B2A267D787F726F972E97431E23B568AF59A55562\ +5A8C592482EA12D0C07CEE98C96300978C035059444F9DD5200C2E43E3A3BA3B\ +B33AB03C1F36DDA5F254D8565BE0553F634CB0667DBBC3C7C1B3300321674B2C\ +CA87A1FA8945DAC6522F2E69FA30EAEA17F662A6F7CF421860ECC27506500E71\ +70F02C608BF55447E190D723CCE5DEC0166AA9DCAF48FB1AE4160AFC59603F54\ +DDDC9162B3FEF8EB6396F5321F0A27DE21CB0A65280EC883A9AD6C67C69C1E79\ +03C93F5258EEA047E277D67C9A139553140D20C748:\ +ED2702B34AF0FD94FAE86A0B1875EF1ED95F8199D4CAC8EB33010A7A7A36FEAC\ +1FC3F8BE873BCBE994196155061C40C9C6D649C2E0FDC68CE3285AD3FA058FD2\ +0E3753F98C1EE8F614D5031899AC813C982D6D2D26B72A829EF167A95433982F\ +692B4AE0605679E8212E06A638C24DFCC195F59F183A92A8DE46B730797E76F4\ +49937BEEFF19B323B72D352BF35D1123A2A74E5E7FC96FB8CB4C24D075203DC8\ +D416D7DB2B6B03D50AD35B6B2934D8161B1ADF0D16727BBB28D0B4C155ACCC7F\ +1EB855F2EAD86D6BC36A7588C4B05974B64F1F966E24AAC4AA64FCA82AE3ABB0\ +302F6FDEE7C2BD61F5998681454DAF3840173D31F6:\ +F8285A16BE35B63170F08921D8D28871C0ADE8C8CA3E780B6D2B9AA1AD6BE150\ +DD6E1C2D53A332E95D8FD2220D48684A677DC6CDC67284920D70423F4111705E:\ +3053654EC34DF7C87CAA98343F7CD89E + +2EDC8DA326BC92528CC18EE0F47CA74B33E7FEB8C5B5C4F715E1A792333E3953\ +F7A391DE6B8F720E6F96BC4FE883CCDC06AD791BF7A9B6702109CF9742628324\ +2FE0F32483E4DE8921537DD4C9C9470BC2FFAEBF71BB22E82CAF4930A2C43CEF\ +DFAB86A61096288345E603DEAEC5B8C2C2333BD07A95AA178BEACBEA4C9555A9\ +B47C3D2EE262EB2CDCD3EA5B36EC05755BFF04FFD12A5D79F062804B3055AC01\ +64656C9EFAF365027A9F0DDD0C10DFEED5987CCEA29986C89841FAB33D21DA67\ +E90E4991DF49B4A0187566D00922CEEF32CA2CD74CFDB8853DDEA3A0BCA30E26\ +86790E7AA6FC394CD9ED35BA10AAA6E3F37F6227AE92:\ +A4671B37B1D49987D5E6E1B0CC5781998B98BD9B0AFED9F71325A5F1DCE0EB48\ +B3AE2553842F7242DDDA6CE31E1050B97674755B245BBBBD4EA7467F36210147\ +B03EEF7E56CA7A64F9E61A5A24A468E90DB7F9B8A9711C51ACAAEF426D65A629\ +572226E634A2B683816FBD4365A7F1F34FC60020C60C8159CEF2B809814D3AF2\ +5F9A5448A478874E2433AE083B3FDAD289F15CDDD9D5844D646E399453DB9F9F\ +26EC787C42FF40D6191507E898D653D9225F15DC57EF30E589EE1B7B659EDAE6\ +7901FE0E23409B6491BEF6561A95474BD8D1B4F35C7D41DAD0A179A4798FC88E\ +2FFFAF221AD14779B0C23A99649AF19A35E9CF8648FA:\ +F53EA988F600C6CFCBB1D1A539FD2C4911B23E81B29D373CA23E63225FB7C33B\ +4947BABD0364EB7BFD460AB650317138082061AC82D7DC885F73FF1C1E6F51D9:\ +9731779293718D0E6635ACCD01B2E121 + +E348AFD877272E75AB4533E46A74D713423352E338E85F62FAFACB61CC353CA5\ +13702C0D42E5ABF5CF2B46C49E8128A153B47EC49BE7E5E349670ED0B760F774\ +6B5933A1E878D301F566FDA4E9F9F00151A71B3580D204EE40B2533831ED188E\ +4880E10EAC7420A74E2431EF778229B836CEB34642FCB05D2BA3345617CD7F90\ +8F35E4AC0073ABA016C49BA3C28AB470C846531E63FA83B034D73BC0EF73FCE3\ +2210F28012D92AFF26218D7FB79B59462EEDE2B1296D27C6EC6E40B2CB3F655F\ +B79D3284DA532D806395BA6940EEAE0503BE49856E9DBA2C8214046ADC604588\ +4AC8B0819C1999B30D6473520FE2B31B8682E6C17AE1F7:\ +5710629E5F9BD71516DE966C84983BFE939D39CE82DF4F80E7A9D48C77BECA8A\ +DBCBB1283FBD7BC863A2B174C67CC6D0192AA84636946898AC68119F39C3BF5E\ +EDA15A7AA935A4D592537A8518C36435D9E2149FBEE571ED80AD5E101BE4F9A3\ +7912D770F29F5D3DD83A1534D29108C0E142D7F3DC96B4AC8FF5E68219E0DA23\ +3C657C14F9FCC20445D152583286B11227118E82F3CE55AADEBFD5CC94628047\ +8921B981F37114BDA9FB1A9C3896C99F62FB59BA975D267BC7676038FCE21C32\ +4BEB6E31327AB5756AB57DFAD3FF1F696E5A9DB0325A6A6F30EB37BB260F67F0\ +A3C534B3D0170776F9A6DD3DC027038CCCB0D4A784E469:\ +C37C751FC481BDCF74BD09A3108755D55845BA1BE7ACCCF79DAEA329560939C5\ +C875C4B71CFBD9576689D4C28FA786421EF49832492348575C4617E5B532F0A2:\ +94659BFA2E1E6248ABDC13F6FD6B5251 + +B53FF69F8A08A98C6DE54BD5CCBBA661E17B63FEC51E675B4DB9AAC74BFC9C47\ +45164325345D2904B6AC9616EF350BB60D82D7CC8A202EB2BA0946425A13575D\ +E012026880C565F0B6DE087297E81783FCAA325EBB3E6354F80A89991A77F057\ +AFB9B90BDB1943BCC4D577A76554E11C59A88B6BED70414AB3241E0B11E2C0F1\ +31F9DBF7B0AE4A56D4338441DE51421D3611CFA51A838E8FC6370B597782AC46\ +914974135F1468C55978DBC1B2B1C4A5D65A67FF5D08270437A9512ACE3C7D42\ +BBFE205D1F48CC9CC631CE15BB6CD9F5459A1F57F4AC251F437C65D9368905D0\ +96CC634488CC8C2F33E677FB6A8D9AAB4C924475036435B0:\ +EAAD8BB070AE8E2C8336E635990A8C35FD7A9E1D54C0668FF7773AA62E80E286\ +5E90F8A6E414BE73CCB868F3A843C1F3C092941666535EC6CA5C08B274BA361C\ +1A36E4B38218D0FF16CA58DAE1EEB1DB51FB4AD48CD38E1EF39B8C84F3E00A43\ +B2F3333828D24F9306F13BDDF141EC83153C248AB63304E4FAE70037207D3E26\ +530ED4671DCA7DF505A1D4CDB7503CEC69BAE9FEA1CE5F7CC7505CF525C3CDEA\ +52071FE4A5110C84759C85BC1BABF52B8746A14A05C52813E5F02E21161A3AFC\ +A76C294B32A136F7C2D6CAAF233E8714F0C2D5B57683278789B2B0B545D6B599\ +AD0008E41D278FE9D3583165571D23A20C2849E87264D08D:\ +474361241C2D89DC2C1DA13160C53D7D9F33343D2A71F2636EF9B77D71B74641\ +36454573B66449B87047E15DDFCE2EB64E71BA381F65FECC4AFA40FD9FB596ED:\ +2A9A82BEBCA83CC800D76D78F9F21789 + +FBCB195863262F25E0DDB7AA269DA197C63BA5C03E3585AE31472314C9853181\ +B71F1B1365AC5369C8FE70A4B59DB1AE9C8E915055EB520B9BD87A54D51BFDCC\ +D1B6C7622C99B281ED8C63F6F829E87FC4F1A73C08A0BFB861A56EA3E4DE282B\ +0C57E5F8ED41BBE5E445E924485D4F8363857B917F7A93026ABE3D0EB647FCC0\ +3A938F67A4B1C6B8B0FC97EA6B8031725DB7288F3775247CFB25B4547694428F\ +580F51ED4C87DC0F1BE5DE2EE12A0260525AFF942E1159483D4A533448FF802E\ +827BE1DB7A90E65CD8D5195C920F7A2454920A203C94DF411BA6E3155FCF8456\ +D5566891F4E9416886ABB0C06A97F8C0E95A464630392D3A20:\ +878D6FF85F14EF6A5051CB2BEE2BC06AC8CCCF3925AC9A7E705E14BF51D6A97F\ +ACBEF5A830B9D0FC1F8FE14FE28143EDD63D5B6714BB12DEEF02798570A9E5A8\ +FCFD136FCBAC9471F71A69C59D1D389EC154214C9CD15C675C6DE9A890375221\ +9167BD864F6A79E69563A7154B6C88CE9E0DC360181214375F3CFC2A0F69B426\ +2C7F58F6B292328153473C826EC358B4EE4E9D6E7D4AF77FAFEC9F431E8A7C17\ +D3D0649865EFA3D55D19521851115993294A65EC89AEEA9DE8935EF65DA111B7\ +9D24F1260CCC1E2689D9BF285C05359941634AE5BEE9EB59759F4F4160F113E8\ +41F28DCEDC4151B6EEC54DD8A612226154D3B099D09FE2AED1:\ +EE6AA06605EAE130FCF2D9D32790440DB49792407D524CA1B4903C2FDFFC7396\ +8070C6114B6230F28277A02871F5B0459E2018122316FDAA6E1DB4684E126EE9:\ +725B2C0B298372EA36E977709B492E24 + +8413D77FEB86C319EE67E59B7175F8B9F534E50AE9FBA248249D45182157C998\ +AD2947E659D28877C7356ABE3F7D25025DBCE55640BF9A8594037937D659BDE7\ +F9B0A36828DC528092F77BAFF3C13B9E8E46726CE907859E0080874D7F557DCE\ +19FC7B59BC7294CE86A3651515DE9DFE32F19B09CE7A8C4BC968FE6CE9207804\ +92E46FD393C7C7F6AADD1E78A956419D5DA3B12410612D381AEC74DE440FB8E3\ +76FDC7BC0215FCD25E6BC33219F12E7484618C21502AE155233BC51105627912\ +67FA6EEA9FBE426FA6F08A5961925EBEC03067B5C362E1F8C4B73C50E6092BC7\ +266093AF7E54C3A8D352063284AE60CB93F5186F55575CFC52AB:\ +64E8DD987F52BD79D93A61FCE6B96B7E656D28DEF71A4924924C69CF89F6FC13\ +E51E8BAA372327483EB401436D8981CB3F9545870C12579FEDA86798E14EAC2C\ +2C2F948531444F8F30589202EF9491E883A3AA87F2BCFB68C475AC2E288CD8F2\ +0A807F35A6260A8E903ECA55368E9190091C30599CB87C2EC56E46AAFD26EF01\ +C071492AC2A3FF569F8F310236C9D8BAA6FCAE0AA9AD5C0DD13821BCD973E108\ +B1AA5CFB58DFC6D12016456E488B91F918BCD749F2E3A1C7BF564B5AFB2E572A\ +F56EB869977F5DD83D94A6E0EED58901B89FC8AF65C131FAE33CA28E0C71B8D3\ +A7F5DB23D27BB517977B7FD7BB3D4AED7FD65A9B17DD9884E561:\ +14FBDEF05D3DBA5A3D1D3B063BCABB96B86E2681FD070016C9DEC8CC4E1AA4DC\ +87B597F8F6BB3294F7E5C9F68342E29D578BD71D15423CBBA34A030AA5BF1AAC:\ +76BE7DC9A0DA36494FBBFF86344D27F3 + +C58CBAB2DB2DB412692422DF35E46D3D9F69EC55F0B9F94EC71AEAF6B52F15CA\ +7792F4A187DC0269EF0EB7540589B5815568344F6C06904AB625116913379202\ +672452476D5619ABB9AB059BCFF96F5575ACE2BE06F73C4A2E991C82D8862105\ +0DAC65FDA764E9B4D59CA0A3508841FF409D13EFC144E62D551DF65B5DFE84F6\ +28436999127EBADB0DE41DAC10F701B8E3D5FA9BE5551EF4A84B1D17BA4AE7FA\ +D33F73C940850896B756D93672DD0D7885FDA05330E1A9855DF6A077E59CF812\ +8D7F78C6073DF8488621C55E876F6B191CD573202330356C479C3DCCC63092BE\ +5719A970EA631B7AB3FA602145CBB60A216A848A8D194B61D7B1C1:\ +81F9F66C030B757029AEBB951DEC627EC72E2BB45AB309AA8693EEEF6B4433AF\ +9E96F28374E877288C1B776A91DD50699B7FD2D8C6D7118BED79FB7A8BEAA111\ +70D1276890906B9031B6F531318D10018C7C684B4B970210FBC348B16C2F8D21\ +D827FC1D587FFAC1346CAEEA8D4A63C8B1B49F0D96483ED300C5D8981DED4D40\ +55863E398B1379EB039CAAFEA87B6EC47ADB7B2D7CB07EE9D29A85B627B5685F\ +1154519EAD0295E8E17D02B15E03A5B058D679CB547B9CA5DEF8DFF3B81182C9\ +CB2C9D7ACE9B9055AB63FA8B443E97D93BBF9BCE84F0C5EE197E156C6EF15132\ +27A13DCCD33BAE432503B6FBCF0F0CE74590AFEA0D2786C33E3C3D:\ +1E6968CA450400AECE693F3EB5F0F50B2D3768CF547661113369C77F9F9B84F9\ +B57B659D06ECC463583F5EC1F19579C688BE206B6981508790100C15EAD608D2:\ +2C3EE199780755B8D469F2F9E6EC4564 + +948C211406A4634B01915C604736FB74B7FC60F1DE43B49106840A60DCEAA93D\ +8DD4468D13382C1CB2120924212045EF1FA7DBA0520EDD75A958ED16BB4AD0C4\ +4813365465DDF51139234214BD7E0BB414DEED1571B7EBDD3ED3BBC2F5CD04AA\ +92279D36235DBD1E25D9C3ACF5EA6603749FED072AFF287813F2650FA208DDFF\ +FC28A240C9E138CC0E83D478ED083C7CCC6A8BEF7ED7E8E89A11AC6EBFB8CA25\ +582EE1C76F880EE2FDD2E4E231DA4967CA8D6EBA943F602565E228D98A47ACCD\ +96CF2912351DCA293AB91B53878E99716B25458BF3CADB247C28F2C4852FB655\ +578BD8A5F6D30DAE3B0445AE3FDA30C77864D6D065122EF269B306AF:\ +61D1A1F7B08FE988864ED0C2075C17067454C98456583F6E7B34755D066C8ABB\ +CDE4F18219AC1CB1C4211CC8BEB7EAD789F2E8C8B0D18BF8AE19A38C82087498\ +18236C4B883D36D35D0791D13F41D67E51D19BBAB3B5B6F6886909C7743DD5FC\ +965BEA9F9F75FD8078E791897406C6F135BAABC1103C99088F700A6AAF66A665\ +DB22C4D38177348108029FE78D98CC48FF90D8B274C8451619D967909910E0E7\ +88CE75D9D7EA77B1AA35A84FC6525CA4D79BB10E8E375C232785A3F7620E84CE\ +26D88547571CC936F7E8B37C85CE4D15A38DB35CB98E75BCD748A6AA64BA3879\ +DA4797BC6FA239C3DE4B5C0F2FC2E2555936DD67564BE8C02C2B8697:\ +DE02ECE25089A30B519D54F375BCACA7D3111FEDA897046BE15EF308146CE733\ +A1D3F8A1EA1E176D0D348201C014CB3948E3735811DC6A3FD294A34DB9DA5DE7:\ +B6D88A316F8968B78D46E2581C49D8CB + +DFA4FAD43CB5B460770F02886FE505E930B479892D32466542ED5638DAD9BD66\ +13E5555FCE95BF1DA166881ED0E024AF9EC9EA083685D5ED0AE33CA22BF40A86\ +67F4351E62DD5D47A9973E5CAE0A3B1BA967F5475F7ACCF42C8E42E2C8466A38\ +C4E066E0C614FE9FD856CB9F4C23C6C8E5FBEB7AD45537F42657F1A7B703322C\ +3F087EE1D43C9ED6E9055A7B72D007C731D64A63969A3C2E256ECBAD3EE61949\ +E37006A8A7872D78BEEF3D470AB6C7D643DB6A63B0F7BE3D18758C1B246F9D77\ +0637C5F111AB21DE24F0CCA2C3316749E46D98B909D0187BC167FC1C755C3834\ +7B78C578F7475CE0A61EA0C0553E24253D87A10A768340F1E3474ADE2E:\ +A474D5A4F18E39C264827D3B2B44BCA5243D0C2B117DDCFACE4078D4AA136BBA\ +27244D6AD637FA1AAEABA4573BAD396DF3435649DA2BC081C9B7078C670CC47F\ +E9EFEE55D1CE351A9379A1A697ADB104954BBB786674EF3D942DA1870D49267D\ +FA93DBA094F72AD0B0085975BF38F401CDC0D99A44A3446EF55469EDD775CE60\ +8A07A3F2ABBF5CB963CBD3670B1EF93DCFBD54F19E7CCE3F837E65DC392D0127\ +4963828402DE7AB025B608C88153FFD193EC82D6DD82F9E738776A9B924591AE\ +9F563DA04E1CD64AB5E1ECEFED6DACCC68FF5CAFECB3876E026177E9FCD17CBA\ +3E692FBC2398E3D0859F72B7DD82322850C210DEFAE04D8E5A9CA25C88:\ +4CC31C503C936554D6B74A9511C4D5F1032F188597485A4BE78050D61BA49C4A\ +C2D9EC921487EA6D58EE66DEC9630623C0D781DB7990321A57DC455D31212653:\ +4565AE21BF25216372E57BE96B5428EB + +67D65B8A546886856699B229E6A955165A8546246DFB73B33634CC0D2152E85D\ +4453F00700A5534B3D1CBDD023DAF6572500300C8C7F1FB74521E2AEB12FEA74\ +DD9B5B559E7C731F0E46D4B13EA67350D01866F4F18DF37A5894925F5478E6A0\ +BE6C9F9F0277B365F309A45FE1B8B6250F43795152593DA988F3B3C00A49C676\ +CDEB84BD888B9DBE97A869D43BF1184DD6C7A1C7BD648752B8D623B043351A89\ +BF3F57D9784D9C78AD21E163EA8FE1D80FD3C8E7BDA24CE74F0AA1D162179874\ +268BEC2ED4B68711124E551733112929F1F2F416477CE2D3C3C2BFA071F9260B\ +6055273705196DE4063644D6987CA8408B222F60C0531033311598669BFD:\ +38508F9831BBC8F15D073F06F236686BE9076E236348662A38E7F5217976CA70\ +F2C16ACE77324490C00AA10C509E1C76E6C4B7A8FBFC2A9B67740F02B2D3DAD3\ +8B0556B12A15C5754F1B8243251A0177FE876DCE216D1250300C60F55410B302\ +2518440CBCF2DB81D947CB6D437094976A488CB659DEBC9BD40E508218250E9C\ +FDCF0015AD0EC3F5AA4E5828F87DB89E5A885214392ECE970035BBD263873DB1\ +CFD8B605C08EBCD1B7919B575B97657CF7914449EABB0DFD7F4018187C7A4BE1\ +30B638AE3DEF36384EA7E5AED4C02A72D038F8C92A9CD33E48587F6AA91ED84A\ +F2E234FAED0348FC27322D61E50791744226D536B7B4D4428AE188EDEAF4:\ +B36663375BFC993091B4E74A2BF2152695D8100AC0F9BB087F9575F04C34F1E6\ +E81E2F51A33F0C327403E81605391295FFB4AAE9E10D85B96D71F0EB3E888CD4:\ +ED53B4437B72771F35DBD4B0A6DCB510 + +76CBA3C36788D56286637AF36F40B8CD62DD6AE1E98035C6890C793CC9BD7B16\ +29BCE020FB1D7B9DA888C66740153AF23CAE3A1C67C12BAEFE5EB2E50658C11B\ +481B7570AD2E6171721465B8044BAFF4917A727E5270EDDE52F9EFD73BE6545F\ +3D1150F408C07185761D52B3B39AC97CE30CF6270612FDBE71F3F0119C1D97C5\ +08F196458D27A9F72BB70EC17AB19A2BF91ADB60279AF129A40621DC2D480035\ +E23DD602371D94CCA27797D6991F6F3BBAAC3AADA8B5D45ADAE004AE8C8CE0AA\ +471309C94BF54CEBEB5122B3FE553F3F01A96D85ABD604FB56DC2601E9D4FBE2\ +9088BEF2BD44F22EEADF68E26CCA389E3E683D013F8A396E0F7F35B6E72295:\ +E0C9B77CB1E62B69F73D14C0DDE478D35042CFC7E7BDE2375F54296278E27512\ +EDD25292970B0BE93BB08F77FE96E7DBD6B1BFAC0D69C040C3B08346DF6CED11\ +9B15B823FDB835F4BC0DAC5805BA9724FE89F4A1ACF1677A0DD8AC0F2A1A48CE\ +4452A778C209E54F12F46A663B8BACB11230D923F4F6DBC8AA6242B628554F11\ +BCC6A9F8BD4F589A397F8377D50113F56E42FED0233B8DA9BD285DFC058D989F\ +C3BED904FDC4447ADE85A52F8480BD647AA0287D2265CDF2311938298B484C6B\ +B59BB978A92E809FF5F93D324F65087AF075292C700C242F0030037C833A36BF\ +D8B4C13EF601E84FB07D31CBA3F898A97C56D4F2203B2B517E16E7A49DF4BC:\ +876713D5072CD46D22282404A9FF2B4F561644F6A97042E9EBF4B67E4C92AF47\ +7A2FE9E9B0AF0A7E83FFF22C3545C07862AE0A825C0426D17F6182DE87D114F1:\ +A9B40EA933EEC54BBCFC493688F03FE8 + +CEEF22020D5FE1E664D7B6A621599124B06396B2698AA835A1E7D18006DD7A1F\ +22A6DCB877C2D179BE4AABB0930533B13BC6B81393D01B959A480A1B53063792\ +D3BC0070DBC433B7BC296BECE86874FE1EF3B98E6E9953B5566BAAA8E74B380E\ +8AC347128EABCB92D30ECE67D9B4294FB24B697F8D3F9CE8A8AB20171A627D11\ +258D00F0E13E990A1B6EF0BD9019BBB7CDB3A0E6C2B8F45F599BD76D75D5CBE8\ +D1BA5802D9C08AE51972DAD1CE1FECC12F4FAB8D57725FC2D32CA6EED6099F07\ +D19F00AC51E9EC0E7F40027AE87B3B2A02577C1ACEEB0672AF205DADE8336403\ +6C767A0F4A264E03CB3497A66122A4D713F84F3D6813327A1193A9DE61D084AA:\ +8CEF8DFFE12D2E10B2587FD60464AEE0B76D07D5B1F7B9165669C7643EAC7777\ +6C0C6E4A1B7ADC275D816D24B67C84A12397E4260DB19651903DBDBBF15613D9\ +0E7CE72A1BF4EFF3A67F05CCB9995D6429C1A3105BA79DB70903C340BB969564\ +9EAC32737229B4EF57EFE6DBC638626D15765559782935FBE2F726B84BCC6F45\ +FA5580F9242D675443C7BD0834BC409420B546914711564B4E1649772D483A42\ +C93139D4BB95EF5AD6C4191EA5D50A5AFBF3A5A574967A29772A091C2B841098\ +075596BBE5B5196B7F88AA39A43CFD4FD51E6011778958683954FDC644AD8085\ +3D47B1EED46863E18C1A9D2317BA6C82AC5333CF159F239324475077FA623CD2:\ +03AB68E651BDF7A802B9CDCE5979E8C5BA50011CC598DEBF9C96D5AB24A6D687\ +C2A13F7CB02DA75CC169B630B70A03F899B8953E1E7A394A0DADC0317651A0BF:\ +FC6A578B92C0DE201C0D2397EA10FAEE + [Serpent/XTS] +A64912329C9D3A304B838FB087750A63C9:\ +C5C91A425602B4CE6B81AEF70C57CBD6FA:\ +2D2E5386BC3B936D07D9CE11E43CA175906837678B102FB8EEF6D8A02B214ECD\ +8E4B76A03B93CD69075081D9BAF99E83F88583E620E351B3C4172333969A7135:\ +38EC40B118BF54A851F55D7659FC6FE2 + +33792FCFCA4502858F43260657F986EE5A13:\ +7F040FC5EFD0EEEE7183D3AA8AC496FABBE0:\ +3303EECE235D3AA3111E48A580D0F7B9A008F102B1608A57B730E4671569CD61\ +50E22631F2C6227B7E27ADFABCEB9AC1A37B43946E21AF0B9FAE85B2C0E0A631:\ +C0E92A058A0921AB961FFBCACE0E39C8 + +114FDDFD42873966893DB4A97F54EF8062D57C:\ +C7D739AC4748BB6C0E6F578AB6482F436A56E6:\ +BC87297C1DABFF03DAD7080F4FD3F97378B8FEFD77489DB5DFF6EFBB05683661\ +ECC5785207495CE376F923E47076D218C2EA999F7D66A92E674EF7B49BA5C3CE:\ +A3090A3A117A4EF924069331945FE33F + +E0CD635C50BAF984FF26CE92EFD2068DD9B297A5:\ +52C4CA78FAA1D5C2012AA75835E095B0E3CA6BD2:\ +CA0A9E45CFC1E6AE704028690B46ABE1710F18AC3737347F71C5FEB8125FEB23\ +0CF6CA2A2364F300D9DD3428E301C5CECF5C33FD27167FA95D144BF1F3DD683E:\ +4D867869EB5EC15F99710603B457A23C + +F7FEBCE430AFA8FE5CEB11284B9DD6122EA5A40367:\ +763EA0F3EAC3935E25642AE16F88BC87B93F707092:\ +0D52EDAB29C08B1B06964AD97294D8E494955C9B46DACC57E67DECAAFD5A3399\ +8875DA8E4CBBD2E1E7AECBBC236F6EC068A5D8B123824CA08A14279F06599CA9:\ +572937FB80372E8C98E469509CC4BEDD + +B0F76A78D897A211DD8A18AA52AA8D72E859D3378BE0:\ +FA2B87DB768F28D3BAA970DC88521483670AE12222DC:\ +1026843F224740ECFE9B9346A1EAB9C47BF1B0A576C9376BF8DAA697F36D2366\ +BE8DD9DD884D55D87094FC5CB843B4F32200646E8CFC982A2CE13FF90BA82632:\ +8DEE91215E68187CE1B16B30D2CA4519 + +A2CFC2925ADEF9462638C2F3BA621874FF520CB515374A:\ +A3D2D5069608C7F1715E4B7420658DC186BA0BFAC8B89B:\ +CAD3CF326112C3257F265F12485758F5C726E0417088B9A378017893A74DED1B\ +47147D13935072A97F4E20DC75099A50B625673E7BDDF8674631CEAAC7B9FB5D:\ +EC1720B2B572F8B32FFFCC8DADB9BF42 + +937C6543FC91B6856C10FA0F7792850DA87251BF42CF3FD9:\ +759C6ABF8C39AAECE8C1DE05EC4FFBD669E60949A26CF6B2:\ +1401416942F0377C7BC3C6684D5B013A642CD5F46D3F30746B506DC115AA0D31\ +C78B21DC7D9DCAD632013FCED931F7A140BC9221EE96B1DE62CE5AB6075AE86D:\ +CA9891C64F86CA9D382CB22F5C9846AD + +B0438EA9AB012BB8E564FCAC88E69DBFA9E8FA7592D2CDB83F:\ +358C7D0888188D9B8326E5AB4FF7EDD1922DFA9012C8CE107D:\ +EF1484D894B1F28E9E0ECA1F118FC998A4EDA2F247B5D6513AF075CFE65765A9\ +93624F2EF4A5EFFA84B2726DE4896EE076DC67D16F8217F9D2880C442D6513FF:\ +25E39A07E7F0C1EA5027517BA44FCFCB + +1732C3978CDE150AA6B6E1ADF9478B420B2BBA68089109CBD3D8:\ +5E1167CA5C684874E94BA64B34FF31B35FA488030A0F2785166F:\ +EF330CCDABCA8C3A8E08303CDA4BFB3248F6AF50BAD447A89AC0DD939E4EE0B8\ +0EB4D03B515C2F5D6CDC5CDB882A4A0902A161EA7D5B3A55D162C8A9D72BE58B:\ +E368A7AC0867F1F037FA5BC712D16699 + +B5B8AF83F628EC63BE8179A967D52AED11A1D66821F641A10D9407:\ +319AECB42B0B41F460BC09AE543014CC773292130615D663D5377C:\ +268F88383FDBEF3D78654B8607A405AF8268E17606EFE3C21CE2A79E22431FD5\ +F03855E5345E3EFF0766F0AE6775D7DC14C8345D5830CFAAD7CC4DD1DDCDBB08:\ +1CAF4EA6F270285448E4FF67D8088019 + +071F2A61C5B56E2F547731CC1D5F436339FE4FCE9843F0F3BB6F3756:\ +5DBE768DCA4C4DBC23BA9F5F91D2A2C3CDFDF058F74A99512DE4F445:\ +8E27A37490956A547BC2B909968C2AB009AEC191479402AA8E2243197A26CB2E\ +4207AA7C71DBF268D5EB543B2D5923CC32173EB9F309A7EE7B48D4C96B446597:\ +22E85BEE91A412BB408D433CD69341C4 + +4002B4A6E526199D8970471121492C7268E26F43B4B9DEBE1C388A1F3B:\ +C3960534858D335D7A6AF3E6A4415EDA053BD5F53D28CE7F067B526998:\ +BCD2F39FC436A46F3DE97D7F3D14DF4D85C82156C2E877D1BF878320A653CDE8\ +CA714A3EE99E5DC6DCBDB4B3E20E774DDC5763422E8E66CBD4A934AB86153D0E:\ +5FE21A17925581D360C6BA3D5DCCFB57 + +A6BA11AE269BC64444693E1E1510578023FCA38D36B58080DA763747E443:\ +A7BDF3B1BC625B538E7A5F91647EB68B86E85F21F12D256AEF7FD6A467D1:\ +8BD07C2737B27FFEDB503F817AE4A8AF32713D462CC5EE428A6A2041508C9251\ +FCB30080EF8D08D8C59D3D8668CF71A2899006D673ED15E7ACDA41635646EE8E:\ +0467E8B154A1460A4915A1854723E168 + +B5CAAC897C50CBA32D2ED3A910F7632204FD9F21729F2AC0D4AF12FB42D7CF:\ +ED5B0D0B19AE8B63C0A4D6965133CE078A40E5931A739C476AA1364A8DFB93:\ +6E2FC001D8054AEDD2600DF63FCF87B6794170C99B5D2523F9F8F5B4285522F8\ +7A7F241200A0AB49D64C819C08F6AA9D3B0956637A05772FE80763FA369F051E:\ +30F231662ABBDED943FABDDE3221B631 + +62BB3594176F79E3C4D3E1A79E74544E7FBAB57CAD1D06175E660386522452F5:\ +1B87F8C19A41BCD059BDA7605EF5D39B361383017B48CED06FEB829BD096FD26:\ +F05A9EEC5DE3364407272E15822008E57E1E808634CFADCA76DF0942D94BBB63\ +536D8AEDB16C77B5FAA086DD41FD8C7B62968FE2A0C6844DB7FEAE51F22AA0C4:\ +85F2D8CA7FE78836B6A98FAFB03A911D + +15382AD48DDB5D5BE9B41FB73DE27CBF7FCD7A7C7FE5380648BDD92B0B228744\ +D2:\ +8C8E754185C53C63C1CDECBDBD49E6CD92695796703ED5B1E6782F33FA9FA714\ +72:\ +37E7D27C585832360629E34343F4015937EEB4987F28077D227DFABAA9398EB2\ +3BC3BAACE380AEC2A6B51F68F0646F2B33E6BD0FF714112FE3E28111DF8FE423:\ +E57ED1D0B5BCA67EFE6E19614B05BF1B + +67DFCBA843ACA0AD9BF86217AE1CD70BA0B5B72E5BAE11A70D2D458F28DA1B1A\ +7CD3:\ +754C70CF740610D4ECED7EF0188D08194DE86DB6EE68E0F957A41A0405B9BF47\ +9948:\ +F91CC4CC7C0621E4F9FF4B20C7460098A7FA3C66A6A6B4655291EF8BE03B4E92\ +9601FB324A5928F37D2BB5F5A13A21C4A13B828839297B7BD7DCF246B4B52E70:\ +395DC769949C27253E8F56398D14BAEA + +43CF81247F3B2263CABB1495818D21E62E1E5CFEFD9269EC65E558030C690775\ +3C8715:\ +9FAEAC3D4D9A0D809AFE1A7637C8D112C13B4D10482093F06A3F81E85826E0F3\ +3BB13D:\ +F30596A80E7B20DE5DD02DEF72C96A76827C3F704C2829DDA5DC402DE218485B\ +A02072CE6A8D9455EAA9A1FD7FB0320B7E61B91F1E20879AE971CE8E0ADCF423:\ +CA5375412A13D1CC69ACEA47238D915F + +D5DA49D4651F0A095F6C3BB6F26D6F3C74F82B66630D6E2BF88F599225B04E20\ +192A70C1:\ +512468CE96E079766A780057B99E017039BACE411E6F3DEEE1F3FECA585F7A71\ +4D9BAE40:\ +44230E0836B1316841C6A1D2ED0A0D2DB803252C5AC031C4B0D6D04BCA2C7B12\ +791F0D70BEE29D5B5925F3BE8273258270B99997021A63E03857B64403A3C74E:\ +21D5D494A0EF531662DE801F17FA9995 + +E98D055114E453F56891D614A4D4B1304F445729EE355A6FDE15510A3EBC3124\ +263B5362A4:\ +21725040DA3AB19E2F7BF49AAC0B3803A1810DA1169590C1A1E869BA82A45C50\ +6DDF6BDF36:\ +EDC32E7905157CAAB42581A0026CE8B72CB98F5850D43A0525089DA6EBE196F2\ +0A28BA6601CE626EDDD6A338F4A196E9804CF1DF39E0EA83AF591D6EF52BC091:\ +B0A5355902E88A45D903996F5CF2DAD2 + +04F9A067F81CB3B0C17B503BD2B3EED598E0FF016D78D52ADC2B20E0C9C819E4\ +311C050562B5:\ +1F779BCC7C2F3BF137A3C40A833F4642C9BCCE6B8017298DB2F4EA2BD970FA26\ +9F963A938138:\ +91D683EAA7FEB066EB00F1E8B499302DC5E94D476096E4C4E8A5499B6242A2AE\ +09A1708DA9311934E9CD3A194BF9332F8EA2772E18DD38F8D742FAC64B52A9AF:\ +D19CF496837C119C600BD2D9AB4A3A6E + +030DB028A774DAB81420BC35A6F108C14406F9190486207FF66A83ED3FB3B513\ +223704EB5B25A3:\ +453CB99DC809ACE604C6C74175675301C3214F046C54601E0FBF7416E7854691\ +F3CF0193E88C1B:\ +9BE4006397B5D065AD344491A6A6A4338F221710F72C3ED04A4B963A48FDB702\ +B465AD7D9ED9D16E8F7EB51F41A17E0A8865B06FA89D21DBF09CA6FECD3B7853:\ +1C3EC19EA57FF994C6E57877FBAC9F22 + +6E03086AD5B3950B55BB214D67573A9F996EA6B0A05F930685B5FCE95F13E324\ +1E0BC766E5328849:\ +DCBD06446C6DCD28A06BD287EC91D2873A08EEAAD444AA05B3E041590528B1BA\ +466A59CAA4CA8DC7:\ +436535A2B92E39E44A24CA2E5B478B419604C6DB68DCFC96A0C4742C4FBAC129\ +4B5322569F5F955CB4D2552F6703933F0F7A8BA5BE7FBCCA3A5ED4A5AEDE1EE9:\ +6EF7D677773CBFD4478550A8C50F1B93 + +71167FAEDC3DEBA25E2175634F8662502563EDACD7B1F04850E013BD559F8EBF\ +6A1B69758515CDE11C:\ +4A800A9187795890B13156AF8F321489B1CA3D80FCC1413FC0FDA34E979D1091\ +F5DB2DA14C715B8CC6:\ +9D52F124B7FA05A83BC93548254E1813F0F07EAC404E97417CCCFEE296360666\ +5D43E1A7FE9E561567F29A3F2581A1F22F3560DB7DE146632D7A4166A4397880:\ +803FD28367C59E8F989E2B3C82099BC5 + +331BAC0C68BA4C57CAB13CBAD0E1BF9185CB5334FB2AC62EBE1BDC8280AED203\ +2B0408C03070666E8A02:\ +9A597C07E449E4DB93B12AAA4ADEF1EBD2658900608B76A8F9E82F84B7E88B26\ +20A9DF213A4EFFF9BD09:\ +C6FEA95C04A8C60FB5D0F5E2584FDF47EB2052F1907DEBEA745466061A271C6C\ +68F964F3E632E33EE161A4362EF7138F342311F1F894EC64A917AA2BC9FE39CD:\ +D15B7109DDA41C6BF165BBD77E694153 + +E7A97BF5B4D93DF505C2F3100C02BD3517E503A1BAE1DB9A03F2C6C628E39113\ +C35B5DE32E3A1F0A845BEF:\ +CDBBAE44818CE74521CBE4640031136EE54D7CE063430DB4AC0265DB4781E501\ +D1F38613D7064329E34F66:\ +08583FDC6287F4111B846E9E441D86A684B283033D40FA4E05249BACA632648B\ +8C536E6F166731CC82E3B9E413E55013BC0C6F21E16986A83487059C7E760243:\ +20A1451F4A0C54B2850F8768C23EF2D2 + +F09943022DE835DC91022C8E3469DD30672936F47598AE45D2E9DA0AD202872F\ +2EECB9A0D7DF5C43141137E2:\ +B6B6A65915862C183AEB24BFB067D820B5C9A2A2D733DC8B6A447B92CFDCA885\ +65B329C13E0760A056AC1FF2:\ +D15FD7E98A90913F6955B818D3B0BB5FD6B5F69698A260047F5EB1695D1DBC2D\ +30B47FCACA64E008746402DFDDFF109F1CAB2097CE350E3815997E82B824E34D:\ +F1BA49B34B5241D103D5708759AA1043 + +787BCB7FA345E332F3155014BCE227ACAA34BF1B5F251C841D192DF9AACB9870\ +1A8B703659815326E347968892:\ +D7B568B6713868E3A370C42D9736270D2D2B530990F844E7B0662CC5AF5A0017\ +224B391C2BCD41DD967FAFF0A9:\ +6D9ED6B853D403CC8912AB580471996269B47DD71226A740A160FF324ECDBB17\ +984DF46B407C0E1538C09E88DFF7D3875377CFC2C181A47ED61D3A0211B3829C:\ +E70DAE7DE687411F326B3708606B1731 + +125B0831E1B9D2CF7D2217721C23C779BB6BC45AC62883785EC5E6C6F4493C4E\ +17BCB79832C1CFAE7535B0F52255:\ +E5EBE57CB7990D92E27B11A9A033FAEEC0DBEB058486125CB4546896E109036B\ +F6A42482D6AFB6BD6B9E19760863:\ +AF24F1326E477305A7F3C0E92F6AFB4C78E1354BF33FFF3A69F85CB46F3FFEE6\ +A376567FF4C48A89EF5D0F8BBE89A1067A72507F3B6E7796FBFDC2D6D66971A2:\ +520D7AC675F475EE27B403885B3FCAFD + +776D3FEBC22DF177452FA292B5600D1F8D2D9547DDF425E335A7781F4D7F9927\ +9881FBEB7C250BE7EECE6277F36B48:\ +BA5C3B967F3F5AA1FC6BFCA27B0DEB3690E97D656877A3A5818770E3F67EBB0C\ +45E85F3559EA97929E813DC62DD981:\ +AC1A14214B02A17B4D3D300A8EE70245AF1204959FFAEBD5AA8508A4F1D84102\ +CA67FA28E059A269E55DDB432AE6DDEF4BDDA000FC6DEB2FF11CE5B931996D2A:\ +34F0F96DC5CAF8E0A34E1263B3241B15 + +80F2B8E786863B481EB4EB37CACA034869AF225915173B4DD48502CED11AA9BA\ +7D97708A19165640B526A655A9C90187:\ +8F1FF889C3E7FC33D414365A191A41517B8BB420174C9E16F268B74BCA39E29F\ +609262506B1656A0ECF08FA8FFC7FC47:\ +AEF2902BD2C42F5A0844B7B4128D0D0D832B0EB2B70E0B308303CA118340D384\ +0A75D04B10EF6A5110F6C88448B7E6EDF6D5439B0E1CBC1FBF93EE4880EA3C7A:\ +D820B643CC274D882C94DBD8FFF6A253 + +618321D1920AF6AB3B8D047A707C0A26CEF5776D5F76D21AFA82CB56C26A5D05\ +15782DCE07EC23D7985E7A9F76665CFEF8:\ +CC31FD0BE47DDECAE38A95B67114C2F479FD43AB428569BF68125E040419F9C8\ +12A80274C765232816F9E97EC49BD62621:\ +021963C34CA80643037F5D395009153EF8F44907B46C9B72A32B93AEB2B6454E\ +D2F8EA52C34954FBFF83F3BA18950E5365FDB4F6FEF563F8C61018E8D09F9688:\ +7AD04E3741DD2BF2AC097D5650A2DED1 + +D6A914E0F066A2CD93B2B0B0DE71FD306F8B8CE6F2D7B0BEEAB39B96E8D688D1\ +B02BBD983B42E7670B9C6AE107DBB5FD0C4F:\ +C24784169E7A54A4B14940DF0E730D5A9EDB2D8BDEF6DBF13C0B23C312E7EA0D\ +8DE7C2B04CB384D0BFD0035743CD159AFBB3:\ +7D855D24BF28EC378ABEA95DEF6BC3AAC6F13573D716A2125CAC654175C99288\ +2D4756D6B46255A37C1741EEBA23681F26B70ED132AE3CD4E71BDF15AA41BB8A:\ +26A8B30348C34F534F9D116FD536AEEE + +548931C48B31AABC6B78A73CBC76AB51D92A5A53626B97A922B7EC7892FE4EA4\ +F506A58BB990EFA1CC771AA762F339FF536FE2:\ +730589AF27679A9726111FC1F133799DBA6FE7C7D0B944DA6CD8213589350354\ +F3DAA15B1539F09E3C1FF3133EE0519FD473F3:\ +678F63B7644823FC9CA76864852658798488037AA055BE143D56622250265E02\ +099427B369E9D789AEF43ECE7CDED6172FFE61A9FB77793792C8ABD1615F8D81:\ +5E7B9D9DA944D2FC5EFF825CB225986E + +07107C702CDC6E88600F8F329C907C47EA604DBEE2EE3048AFFC777DD766920D\ +DA86ED1DB84D0A74D05A1CA2E5FE31C784DC6F92:\ +8085E9F1F6A9C103B35D20C52F8F3628CFDE1F116C9B58AA7DEADF65F29C4FAF\ +C3F0A209BAD176EC86F0B05C4A7208EA5EA1240A:\ +67F070A8C89E7BB8C24EE530CEDF15CF68C2D2DDFE0572BB8A57F741A16B2F65\ +5979614C3D18837249E76164FC02654F896D7035B01ADF81D0A7F1EBA2209B23:\ +DF515A3BBE568EF7B1E308DB5D6B319C + +982BB3850E4DC983D4BDF06CF896A4E9D627143E63AB741C7A15F71589E3F281\ +53F8C6969CC1A72E4D657154108C4DDA860AF56FDC:\ +42D328E475E23632CEADEA4AF06A3A9AC7E04F190C953EF0734218D47C032B64\ +89A5F5FAE6BEECB7DB07A4CE2663C23A75F89E7E63:\ +D92BA285C5311C9721E06BDF23DC0AB4E9AA95224548E6FF05937B21753AA26B\ +DA9121696545B0F466E7265C8F6CFAEF3E3DAFC2E8F600978AE2B5FD592D79D4:\ +38ED78A11599AE454E17AD22652F428B + +79DF47BC899B7E1D793A7602F8A9932CC3EA231AE881F8DAEEC7C20CB6EA709E\ +451C0BB10E2C0634D8E7D47E28A57906778D8447E7BD:\ +30AC888D1011A4669FB77BCC413247F69C889EAD7C70009A4F805BC696DDB0AE\ +11A5E1FB2E9E6814C23C616E5AB640C15F3E080C91FC:\ +0641CD20CE2C2F599CEA485F594A700D71F686DAE8143DAE2BDC6A05A4EB7D43\ +07F55E27FD5AC064D65F1B1CF5A1E20AB17BD8FE00EB2184CFCE23E2CE9CB8EC:\ +AB73493267AAB67BFE11A45D0D133A61 + +4BA2A1BF88D9B51011509E40D1ADEB5EA352CB0948D77C4D35B99B5B608147B0\ +3A1C0F9FFDECCE78C90F46C5B542AF31C62F4CCFF4501B:\ +674D7CF26878208CF61EB61807CA6E816B96327C2DC69D5576A149B8A18AF171\ +707A74E4F6FFF2968FAD1791DF066160BD259E8586DFAC:\ +AC335B56AF79563F9CFE27B893C1B906B00F3008C3A7BAF007BE2BA4DF4A4DBA\ +ABEC4889CCC7BD87A568D2917ED7F9507D5AAA5183D9B4646B5B1389F927F85C:\ +505FA490887931BC21326BB51AECBF4A + +2D66D72E3D8A1A88B9663676EF1C5AF7B37A175D3BAF0F9BAA3AFBD34A01AD26\ +D7E0FCC2B49A79D9B96384490BEE585423214F75F142A184:\ +A84B6BD1009B8CE205E56F276F52F23C079A3E74F2B9223A3B5B62D51E11CB70\ +6E2480B726392500A47C7C1E67EE9C154C41E7476AB8D685:\ +89F8100C456800D0E6E7FC23E707B1D6016F9CA5C7AC04DF276BA763C969157D\ +6F1286DAD3A303F79E77F5347D861B36B80DE239361623C1E3873D6E1BC60897:\ +2B6407677B7BCD9AF8A200275F97DC0E + +9044BFFA517A1EAA7CDD8039C70B04835412A90AC3F55C3162ECBE83425A0633\ +3205BE4C3EAAAFAE8F7C7475E01F670229F3A63360E43BB603:\ +9DAB127B2981927BCE9A2F0147B81B67DC568DCE8843C1665846521D76CAD62B\ +DC9C6E4644782A62EDE283942F94446EE4459D1D0FF20A49BC:\ +70B64496637404919D1258209B9EEAF4299AFF4FA3B8D1FC27560FA1AF2D37FF\ +1FADF43E4845CFC24E535C140292353AAC2D0C74E659A72F7ED7FA87342FF14A:\ +05AD42D5E2E7633DA65906889DB23511 + +D960E3C53C4FC18E33D5438F3716DF0B249DB29303B3C978011A818C29CF7D14\ +296ABF23F437E6D60A5E33CD8D54CFC8B893C4AF5DD3F2ABB265:\ +073F377C34EDD3D3D80084E76DDA312A41175D6C7319EE87535CADA1FD06796A\ +A7DBE225B5682AC229C8E71947DF3F7C1E7759D14DA843D3F4F7:\ +4B3B4EC015C2965C677660ACF7290535AFDB961117EC174A6064C435ADE9DE72\ +ECD497531EF8A85E9C9ECA6DF819E0207857CBF05309045E3395F0CDED42BB7F:\ +6978A2805F56C9181A1E8A69A620C3B1 + +FAE7F5DEB49358554C36BF34C45E1CECCA4D78664E281549D970F9895D76D6C0\ +366715F690CD90D06461FD1EF6A12A4CEA6C98706C2DC28B7D61A5:\ +D733D742DF6A7327BC356933958D919D8595B91837A85D421B751515719492B2\ +D2CA83A582982C72085885DBA621724B1A17E1B94935651B3B0F37:\ +650246ADC746D8B040F5F66FA88B19E3B1D2170D4BBB420CE65C48367F46AE3F\ +362A7819AD347FDA0A897F9AB3B6BCCD30A6F6C01618E1C0E83E559FE49C66FB:\ +408111F50D7EF68EF9E5E0A674F56802 + +A7CED614F48880BD1F401AC2F1332F175D46417A19C17A90A941E0DED59C5C25\ +C152299D253108FC2EEBC972D0A954CB83203DC8EB72E393EAF90BCA:\ +E4D0CB9339F28918AC538B6E8947C1E6E54BA87BAEB88974D9D8E4F4C04F5B9B\ +C60C7181BE039F7B50D6B46768FB8951120FAF63F7B81CE50EE1092C:\ +0CF9B672743456723CEA953937E663FF4E2E583C3E9C819997CD1BB8F362E184\ +DE69AF4A4D040E1B5E710ADFAE3C1ECAE9734397BB634BC76E7DCFFDA9747C1C:\ +D54C647BA087A7712D538AB19F8A4F5B + +3007EDA2A3BEDB4443D23FCECC42936FAD5E33AA9733FBCC8B172692F034301A\ +288E9811E406384A79D84C859D0288ADADAC9239AD70E7E3F9A332729D:\ +8C3D6F96175D345DC5F25F19F3A30CC1ABF1051B0509520E91EF4FE9180C441B\ +AA40E84D5955566F402935FFBBA10C8774869CF50AC7FB17B5E3A95397:\ +4DA3D4D9A992155015C806D9E84EF5E149FD20A3D9E258DD7A69D2952C0C6E3C\ +C7867DED5926F7CA9FA6C0BC6AF1A3134E4AE9C4E97BC25BF339B4F907516E0D:\ +9A81E5FA3934D192EE249EA8E7562870 + +F8A4A921EF927C69B533DA38C7C691A6E348E0DEBAEC55642EEC34F42645D306\ +309A5BB3574836AB2C76EF3258639425D128CF65C7B19387C2D0813E63A3:\ +57440E748A38DE81CBBD80B1F3D1196C7EE9735D5CCC26201C05C28728FEF9E4\ +159691BA02E6A51F9D38CE9A89A8B80756B9A0FA4CA9B709303408CF2073:\ +C492F6251A50928E0DD8FABA215CE6C9763B8F3FC2C6EBCDC0EF24D5F09F0A68\ +B20CDFB7F40DCC8EDE656556713AB51421C6669C9B59FF11011DFC7DC590253F:\ +7B77974EAC00673107A64B08F29E3237 + +81D95F6987B2C0C104E2032911BB510F39A56368B1CE8B4B3FB0F5E53AFBBCC1\ +7CB15327D00B4FA44EB30D59C1622E23AB0E273811F7DAA70082DE1A44AA1C:\ +ADD06ABECFFE545062871E42E3F2D773B227026261AE545FE1E76E6DC6B0A626\ +2B95035A2A5C97DE5AC27565151ADF3FC17A61B9C1D77A25FBE48F6EC6DC26:\ +2E922CDB47B6E777700E1E78481C2D4C70C6F92F331098266EB143C1C381C2C0\ +9CA5C3DED5E7A0BAE46E30165DC88940B7A0452E240A6BF06DE41FC7074954FA:\ +3F5E84C1B5E54EBB29436C367310D491 + +15DC26624C9CA609300BC89CF5E65538C9813D3D6169B8567723CC1D20401A2A\ +AD3E24DE64FC2ABD9EF80EE99C5DFC4463AD7F17B24B9C34822F4DA2AA085139:\ +A7CEB2F08743695E4F292BCFCC7C73F166A241A411716665EF32E8A0A0974918\ +D70C08282FDFA91355CAB04DD4D5E2F4B65D56D153709B8791999F82C3D757C2:\ +4B4AE0BC8AED1CE4A52F1CBFAFCB2EEDC287E715D3506F3A8D80AD82BD7631F2\ +EAA9DAD03AB68F49C6DA9130E8E8BEA95E36AB423898D27E2D5E09B44EC0D280:\ +1056E8BDCEF6EA625148CD5F2F0F72CC + +CE6029DF95D6E1F322C30361328E59F8FDD28F9CC38C3E04671AABA20D5EA355\ +F6695AAE23A0224F34155A17D9DB8D56BF999AD680B937538F5D8C6732A6CB67\ +00:\ +6893C033D1E7C74C0B8185B0ED20DA8A60EE89B256857C3DA4E5C9912573AF55\ +66B54734E1A364F34D82940018E210F3A9CADD29C816951B7369C7D33271B801\ +CC:\ +BC5AD4FE0A1A75C1DFFF19FFD9E607EEDD9897E592079829CC99C27281C1ACE8\ +ABF7E78BD818905246D4D1ECDFACB9B3C7E33CEAE3E4A1213E372EA02B2B8446:\ +7E351957E1DB7F7F8947625469F59AB9 + +DA438EA0ACA5BB7CC14D9A426D32D946C912F8DB3A457E04345678A7CF4EDBD6\ +A1958EFB55E7E6DF23565F85F8EE0F0CA1DA721F7D1123FEA5444A53DF5E1E3A\ +3D28:\ +89B9CE7002F24085E6C432D45422EEFBA53E25F3375AC4C1F9F83C81470FB8C7\ +1CBEA5E95DC6817D6E89B80D1DFCE9D4C4A75F2A7540B6F097577AFA28DB5198\ +3B76:\ +CDB89E813EC48551AFA46C5EF5C63A863B704F57CD4E845006BC24095B5F4C83\ +896A88872AFF5A7FD2F54E8F8C8432A48DC4377287CE552E087C80F60D038266:\ +9828B8860EB06DA7807DCB2AA091292D + +38F219FD2B5E5ED6CB92A152E3E71469CD7A4E2CA7687E6A8B888229B54E50DC\ +0CD4126C2D5C43D147307431F1CD9FFB80AA173B556A35E7305116018DF1ACEB\ +109568:\ +7B6668FA3C4990108EF066D176851924237E7B9CA0EC5C217702D0E1C9BB6C54\ +27A47CBE4CF299EA6C47C54588578E7F6348FBF0CEE26AB13FD3A1C33A154D34\ +35A505:\ +EB09BC7197242B0BDED28D4CE461A52ED3B9BF7067ACF2047392103276618963\ +A6B95DDB960960B600AB904E14924D3F154DBC7B0F24EC01EFFC085F7DD24502:\ +E932CB26EF86BB92D8D0DBF874C123BA + +696C4AF722D3C897A497F58EAE0B96954E4CB00B3AE22E2634753ADB4FF6A10C\ +FD9D38EB4A9B297188B22034B4716620D72DA40E3D073AD47F98BAEE1F54165B\ +F43BA540:\ +5FE6D0DBBA54E0255A2994024E895AE773A517CA023E28F6B07777CDDE04A9F2\ +0A3283ECBEA25C47A67DFCEFE433E006E212FC266290B1ECD10CB4BFBF6FE040\ +42AF7C75:\ +82A117DF507C79C78460DFFA54CBE38FC42588D000075CA58A01375B4AF47954\ +F86A5B3649E6A81DDC73910AF02C47A5BCAEB5C09E1E5E7C03A8BCAC9D23F977:\ +61D4BAA8C572EF87F5AC5B265DFE870A + +83A845F6B6F794DB55AFF0720A238101C4AD89D3B159D32C6F8946CFC65BDD08\ +99042FDCFC2E0BCC23A5A375BC7743A4C516517923CACC0FA33CEFC8CF2F2086\ +D05E9A61C4:\ +1316872884AFDBA1FE0A4E16D38071786157B3544F6F19C798129115AE2BE44F\ +940FB3F7190F104C900E49FFFD3A5C21DA1B5B8ED2CB21839A18E79BE9542F98\ +DBFC766394:\ +800F53FE3329BBC1AD83B5CAAF0C4CE157550E5B595E6AC9E5D6F2AF9FF0EE6D\ +C88C87B2D3E2CF558B25DF5C274A68A1EFF2A5D163D7F056A79E2F279C9DFBFF:\ +7F2360CAF666793282F2A00E9A37F8FA + +F03E6746B6AA4BD48F7724B8DA122384A4B3E68E0C94E49D7D22DF006C32BDDB\ +8D874395546285259009BB930261BED3D89777581EE1435036189CD3BD1ABC3A\ +5AF7EBD4946E:\ +7019329131FDE731EDC64FD24FB5637E84C94AA687C3C754CC9B172E5AA7A5FE\ +BE7F17766ADCBADB7F5D91BFB0A88885A420BD485CDC10BC114CE134B51DF05F\ +288973FF4B47:\ +6D34AC195EAC4EC8597138156280061BC032A5A9028475CF8A22906E991DF3E6\ +F82BB9AF05778BD0D09D840EBF050E88950E56E8973AA3C329BDA9C7404C0E6B:\ +24066FFA473235D8241F55E16C525B76 + +0A20F39DB1567EC6CC1B61AEE4D40E59BA78343ECF9459B3B0F518105433E862\ +903C37E240EF6676AC3133E484D4105A192CCA7D80D75CAB3D1D27B0F78F9EFB\ +E1B9C0D694B8C5:\ +808BF3A738579EB79CBC2C5EEE9B6B14FB938E3798A162F39ECD3B59448B1303\ +AD44B0EE812941C77B49768B730277F8FCB7E338C14ED9987F66E25793D0F88B\ +0956ADCDBB7E4F:\ +4AD17BE331A3A592EBFB7B0E920F0BF6AB326C0B7059BBCB300710FE97699862\ +C92D72472C48EA6EFCE462D601A6B4EEDCC169BE473C776F10BCE9C8B17F7C44:\ +A181B65C04851CC450DC51EAF76ABDA2 + +DF9F849EF94245A1CDF7DD4555EAFBD4D1755B2A4E2821B3497890C8320A2169\ +3BD51F0AECE2DF3F4445B8DBC759BA2D4FC860F68AF5D4A7576695C63E39B606\ +D18B3802D370DDF8:\ +938CBC602BA5B8E0A2A6A894D6DB3E004909132602EDECF893679E1FEA0032C8\ +5FB087ECC430051BDA600C4ABBCCEA8BC22F5ECD4B87E9B4A43EF01A2264238D\ +2C1AEF886A90371F:\ +78217BACE102042F9C0BC63A4EFB81EE68CCC2A13083BF483E06635D1F585F92\ +E04E0AFBC4C52E1401E1AB5895644C6CCD74217E0EE60683700655B829B96781:\ +A0ECF2769438C1F6288BE9192D776A69 + +673CB7F14B4E1F148D4EB16C7EAAB862571C625E0285BDC2304EC299D520AE44\ +8168424588736A52B858F3EC23D98F48DC2DD81E459A04A4F4410C78498C686E\ +C0F4DD97B7011E6D65:\ +D60D4E5F585B9FA126E140AF76B1AC0CAFDEABD840C9C9DBDFB06F30BA6F449F\ +6A1008D7F8A3E8D029F6FCAA79CDCF23EE3FC07A3E0586EAB4AB6D9E3FF77FCF\ +F2F4FACD6B0552C66F:\ +CDB943D0C98907323D25E6E6F20D6C37AFA439EBB15A7C19613E4033347FD715\ +0E4A67D76C26B2B7C28787499531ABDA74203480A2D6C57F8C79FE7EA7E08178:\ +59E21CB577AE8B72C61695A53B90B1D0 + +C10B09A05BB1EDE31326114D6935A86493C2147B770F8B100F52106E0F22353C\ +3EBF3439A4D309E3A9E04707E0FD442092744B91A558365FF9DCC0DA6BE49114\ +A05EC24726ED7D135D44:\ +F1FE6F3B8DF82B819384799606746A2AC053E6D7A7C430EB21DEC88BF92AC725\ +0F6FEBD00AA9E2619EEDE13392E4173C8CEAAB033E7C59DC0DA5EECB533ADF4D\ +EFC5483AC0110F9DF980:\ +FF3A7CAAA2477056F09A539D31E5252CF016AB00FAF86A823D409406CF2D9BA0\ +91F842CD97938D3F875FAD92DC5847A02292679342F48E79D26BB688D5956D80:\ +C898B915B9AEFCAD0D3B9669DAA86CD3 + +0A4AD44748EBFF8F1DC606B18D1CAAECE82FFDB0997F4C4110FADFEAAB9E935E\ +85BA0F2CE5567A867903AFF1ACF3FABC52D942A1253D7C7E2AEBA223EC5B7444\ +27A7A18FA54C2BDF03A6F6:\ +DFC97C5F9BCBC36D79FFBEB1ED106461C71D1DE8712CF23BEE2883C0C4C4F2F2\ +D6BEAA3D1771BCDE52FC1849DED35E3F2334E1C42B4F78BCD08CB3E9F3C17D5A\ +C827757D4310483FFA98E2:\ +70783DBADE64C24169E2EAA718401922DE21E350A36919552C8EBE572F042C9E\ +C65A1131B090AF15B4C20F59B87D13FE48E7C8EC9D863B5B33985B79EA5D1436:\ +9CB193F8B79CE0788A5D48E5952D4817 + +DF2F1E70B33C587B640669B4B68EF926EC9C6B51BD14C937CB4C0BDBF7D5F014\ +8BC4DA12AC0CC6B888EF4EB94325969AA4D1FF38E5E787CA8B581F8C30E109CB\ +AD5DE520869A6965CE43623B:\ +81D88EBE06A2594DA4BFB6720883CB05C674D47F35019C965ABBF00547CEE5F9\ +848FFEE5F169B6D0E3944F0BDA6799E434C90FCF9595D33CBCDCD8AF5E11F3BB\ +677A87DCAB7ED2CABED2B0E8:\ +B931A97D7D1B9A0D8BF1CF7F7A9079F459E854FF083B999B8B56C39C0E612069\ +41CBC018EA4D3126682807A1F7C97D2BFBAC9B63B5D2A478ED00177D4E91B675:\ +4091BBB3614F9FEA3887EC5561F00433 + +436E6987152A372706942EEFBB7536E8B6D4CA6B363122E7F67EDC3004E1292B\ +79BF823E27DCDE0482DD1D31F4D0D022A5868F57EA5329618EE9EE6A43B16C4E\ +6F20435EE390F395AC1BB32A14:\ +26471DBD891F897FE3627511B21B2D9735580BDC714D02218C2090CA8E7AD7FA\ +FAD2264DDE925D0C77ABFA55CB3442BC8F08DF065AD2410F142DE823B02F6EC1\ +B9A85687A0F9D1687DE53CF616:\ +F2C5A19572BC5CB14AC927483160391BA6366CC53F7F93F83BD1CBEAA2008B34\ +83D097846180FB65B23D75BE5A0525612524A6300856A16D8D333783B4F23E93:\ +3DF4824B50A5247FBE3A97507C5AF538 + +56BE3FF29860DD6705172269FB85AB6D9330C6A8F650F951D3470F64AB3C5615\ +A1205D8067E8D39E5F366E9719B8BB01A44EED2964C70C9CDC7D42D4B5D67226\ +665C8B6ADEE8CCEF263F75F7E58B:\ +948C4CDE3D816931E4EBE4673227170C4814890E8A6628D984E3F4ED875CAAEE\ +816CE0E0669E5A213D166EEBC96872CE48FA69149D064146559DCD512E985616\ +51FE18EE0F5964E87F40CCCCB9A5:\ +2661E22FE507FC2A25319926A82D3EAA27018DB8DF21D08493F8BE33926E5C9F\ +ABB2C787BCE03F5DA0218675BB7D14A8A2731AAB55AC159A1B3B644196BE540E:\ +7C7A1AB29A923F568F9934A8F24EBD58 + +357E18FD9A2E891D20FE1ED5A4F1AAD547F419DAC97A26398E91CFBA2918FDA2\ +E7C4627F04BB6101ADBB7960BA07A86350722AB0FF01955664A36F7E53ECD1A1\ +06A73EF5AC50E16CC7D97AC7A24D15:\ +0338A1642C3265BA015164937148270F8C4E32BBB8DE648C13AA9729B384FB76\ +A1BA7FAA2BD255E07515229D0E6EFAA2EF3AF219281C2D375EABF36B35C7C31D\ +9656AFB7033C02039B5BAD81CB925F:\ +A381231E27F1320C0352CA0B74C6B47E8110F9690A343C1D5FD05926CDA42C2E\ +103E9429412ABB7A27806BE91D7EC5A32CEB19A2A3D7C0C07BD90BF143C4462F:\ +497D9185B73F6007DABE550F21C76424 + +BAE412A3709341D4E5BF5E2EA0069F6D229E2ED6004BED7E320B30FD31A0B6AC\ +5AE9D859EBC807C860363FF9157ABA3A6711AF5370256A02FC353ED73A145E3E\ +E9ECC5F131613524A9C268CC920C9E69:\ +3128F89DB3844EEDF812031BD5858240EC63F9BD1D390C27BE826F8680F34F36\ +544AF1B634599304807230F508E62F0A762E12A59258579031207060426ABDDF\ +82C2F8FAC7237D89BAA1513496833804:\ +E7F526508EEE6C79C4BF495E3844AE3240C804CC715089C14253E348758647F7\ +436E1B04439DC1E47867D5DDC06E30E435868696019E5715182234927CA62ADE:\ +D1B46349354DF67115BD1613806BA0E8 + +16A3761D5D19E38301085F93C8CF7BB7B57C07CEEFDFB35891DFE9D6DEDCCA77\ +1853779D24D9E68E834A32C6FAF7AB178B837B177E80ECA50F2108B6BF5B4D64\ +CE4C0AE4C26DA69D9D6C2DC597A20A9321:\ +2143139EE4F5056A392D0E360F5518092BA12B6C006238A410CE2FE9110ECD7A\ +9EA4944AC70F8A45E291088D40AE615E61EBA19C7CD807F627DB9207D03BD5F2\ +771D8BC55EAD7BBCDF23E638111AF3D0FD:\ +56E3F830924ADF6EB2ABA44FFBDE36FF50CEE692D224852D84759732F453DD1D\ +8F7CE8CD8BC89EC7D533FC07C5D60C6FDFEA83BC7A98422AA7C94F1176E81DF1:\ +59EC1B933DB7CB8C5DBBF2E255DDD83C + +24D7EEDEE5F9DC4C9C00D0A4F7CC008CAAB2ECC30A97353B9BE25587C3C55549\ +8257F8B1BA6225D64FE8456A86C10A945D5E2043B4F56A8097BDFE0BACBCDF2F\ +2B707894AA5B6236E4F1C1BD81DC20BCA411:\ +1DE794AD93BCFD57B300AD14B2D0F13CCCEE43C559DFC25BE16169F80AC0ACD0\ +514B012ED474C7EDAFDDA6F4CB0DEC2723E1D9F9D56881814E373FCD681C23F2\ +0D0471B351305C7DF8DD913DA452E4E1A7E0:\ +8E627F18B297CA10E2FD5F782035246D30E1790E306B19AE29DADDA2FD12BC9D\ +95F1F0CC2563827FFDD6C1CFCF01CE264265A601A1C64F71B58081F624E7098B:\ +E81534D4AC86F3A8548F392E12C396DF + +93EE17749850BA6962C5858815F83035A8D3BCD113A8343E3A9EFA3CF34FEF5D\ +CAD8A5BDC9CCAD6DE4AEDC4636F57BFD590C00B4505B20E05DF65808546B719E\ +3C90EF45ED1894CBC82B2A0CA9BB1C154419D6:\ +CCE37BFC28B2D0870E842DDEA150C30D6DA19F0C4190C8E8E53089E546A5E672\ +B19677751DE4B949B89BA5D6419F143BBC21673D104129F7EFBAEA2D0A512A9B\ +BE2C0531CDBE716575CC7C88EA34AC5A450A3A:\ +0A545B755C853852597731D5A1FBABB6D501CD59571D55C92AF8526FA97A6B7E\ +856510E9464047AFCE701CB7A178D5ADBF33BBC4D028A00DDA7B4772408D1CF2:\ +DD6D60AD262774C962C0C6F16AFCE04D + +E7E5CA48AED703C746578F607251D1B738534DEA0B0172D2172849671DEB88EF\ +BB9EA648B52981C4EF0056C487644F39DEBC4D1B5F5AF38D0E9A7EA1913C2999\ +55A07753B7E4CADCA08760C282A05EB98ECB91ED:\ +6125AD56EFF933C47AE48CD0A641F35F64BD178380F81C879495E25C5A82628F\ +79394BBA7E2BF5858A310B2E98A056FEB9484BC423169C15F97EFB727E5FDC3A\ +2B9802C93993EED836842E59709A38DA3634630D:\ +A6367980AFFA4B81776F23017DCEA51DC5C3AA7897BEA721FB3E77D2F165BF32\ +DF8B33DD12C126EB10CCD13A8A90066F694EBD2096E3756F6D2AACE7510C7370:\ +8FCD228AAAF79070C234543CEF7CEBD7 + +6308BD31A5D74B1CA56803174B911E7F82D2D7C7BAA18179B697507079346430\ +3676E94724E6C15A60131F09B6D0564D92931185726B730A7D33441042615062\ +E68997292D61AB1B998DD7F76997FE8A12C60E4A34:\ +A57EB6C6DA1DC33C882240E485CFAE952543C4432DF7304F3705267E1D7FBAA9\ +EBA5DAD60EE8CA4C02D20956750E266560497C2509F4CFFBB13EA0B2A59EF3C6\ +8D5E5A86715BE0F133AB49D6B21F094DE29CA56C19:\ +C1A7BA8BDF41E1071AE1B496FD67E99C10F95BD45E4DF7524A2AC04EA98711C1\ +40AC1837EAD2F3DEAE97465B257B256949CF89A15DD9C681917026735EFC7385:\ +06B34A3BCB427C6BC3E564F54147AD9E + +A562277E9787D912D4DA2E7BA2AC757CE779D3F3A0734E490041EE2B205E45B9\ +401E8A6D665759F3B6B3E25B02B793B5ABA13679605947BBE481FBCBA8B9D62B\ +D1F970CD5AA01AB847BAACED038C7CF3D11B13A0A559:\ +3C508BEEEC49B30F7CF5DC53373D45DB5878352890950251AEA39C74332A884E\ +C0664997248C3020CD4C8EBB125875A9DDB25459BED2A68931A7C6ACF32310AA\ +8A1CD49241A0C958ED855FCA46D4B993066144E2F4D2:\ +7C74B506CFDF194BEE89AA3E1CEA248D3CDE19339F25A054A6F0E0978A18018A\ +98E2771C2DF50ECAD7A828AFE1402BD9A04A504750C8BC1C7243C6E59B00F701:\ +8BB76FC3A74757C51373FD05BE707033 + +32AB1F3D501464AEF7D6B8CF0778E039F6FFE727334C07E855804E71C816B019\ +1B566EFB2C4E98611EECA7859DF3E0573A01B801888A0A72B74079E00F3ABC08\ +46D5A93A832086031CC8FAE91546793A834AC4815A503B:\ +65530F2B08B7C1F3A09872C967F9990024FB75480C9108EC48BDB93FDDCDE7A7\ +A2F7AE8AABD4854C491FA8DEC692B006E1C9556AD122EAD6849330F52971FFB5\ +2093CBC609DEA3D0A61E1B6546794C4646291EB7DD6E05:\ +5FEB3B25D878182C9A805C42E18F06B970E6A8DD77E3A773A86129FF6D6B6DA5\ +570FE972916FB3A08D9DFE64E93A190366062F3F102AB559A6CFB9585BE7AA08:\ +787A951115673D6EC7806383669E3D77 + +69AD99511C51DB7489F41C52BEE4554E35FDA8F015E2C15022275BA060133D44\ +C1ACF7BC7067E9DEE1A6F39A5F1CC16E2A8EE62C3C67412A65C5653F81C5233C\ +CD8FF29CAA3202B04071134AE53775D535B6C558D2242758:\ +9F57CD91402EC58903E500CB5B5C2144B4B4323A8C0E826E9E7B24181B9304AB\ +09FCD957A283E4A6DF1A354163905B191898666A08208A451714E8282141C3E3\ +3AF5BC2B4C4F03E66D7FC9E5AE2CA48683AA2AE64DEA758D:\ +893E15150A3507E4FD4817B72DDAD367B758E8CE96306EC9099B0FEDD2F52AAF\ +35B075D866449412A3E5F398DC10E84C446A464C4C51C0C45AE40DEC410B345F:\ +5256127987D73F87AA443FA66ECADE7D + +D6737D71FB176BCCE7C431B7664A221E7D4F516E6FC4D73B6FE2407290896531\ +38F8F35E1D65F3BA762EC3635D3CB0B56F59B10C928CDE06950E6A2653E5F0BE\ +DD5F046A89546A712B5C9CF7D88C55D0135583D424BD80EE6B:\ +636F9D4BA28929E2260B842D4F61A203A892A4B2875540E90AFFF65D2D36D6DF\ +B42E8066385A1AB671097572CB37E53FE8BBD49A0155487427428E098E536756\ +13F560F3883A8CA61F1AA8CAC7C2F76B271FE50471322A5446:\ +719DD3905FFF61879A4B092B6BC882DD65AA3384DF30003CF30FCC677535B359\ +26A621E4A95F3C98B29A4408B3E325EB411C84AD635E71169FD9DEC59FE4F6E0:\ +6D3BC653B3E4F85D9F5C75233916F575 + +1FC45ACA01C817498EC54C0BC908D9B7DF97A1999DAC65DCB7390690D97A7424\ +7F402AF1E19FAEE90C584F51DF1B4FAC34B988A279A864D15DC65FF59C74A291\ +F8AA97C8DB4379D11A9250AC3D06022069C29C75CA72ADA114C3:\ +6BE638D8C6C9AFC951B853FE2C7697A5E912920C70580420FF51D1BE0137ADB9\ +CAD25A63EAA1DFFA1E3790367617453BE4122F5A4CB2FD670585283B6F5156AC\ +D262BB9286AFA3799C7B313445FF8F2B74BD4DB33042D6EB8A21:\ +82A603ECAA527A78202DD1CCCD0FAD0D9CEC5CB1C87B7268CA6B37B8A93CD224\ +D0BA72B3A4EB9D88D4212CC84E3480173C9A4D6F25290F9243CD8A7FA3BBFD0B:\ +167A48FB0CBC423A21E8FDCAEEE1D2BB + +4676B5965D8497D940FF4F24EDE66F50A5562E3A988AD86D3265551B2D6DF8B8\ +D694820513F921E5D5B05DA82D03A4F2C3F1BB2877AD9A321151BA2BD2A406BE\ +F3951F5221DAAE46CF081544A4F4B6BC2049B8A51C6840FA5301E3:\ +7B5969E22AE7734260B2D2EDFCAAC3DD693731968A5BFC5B46000D3358F3F514\ +5F02E09596A53EA9F83100405BA6C25087CCCDF86522B3103C439A9D9598B4F1\ +CEE3F1836EA84DFFD6D0B90AA53512408B053E3D802C48C1A6B024:\ +AC59FC93884CB05F91D73E67A979288FDD3846DF208F8B20ABAE9BBE8D05B312\ +56358D089D64667DD77C4414D61567E58DE4B558B80D720161B68BF50CA43C82:\ +67128707B418CF21DBF934303B0C3FF7 + +820DBA2DBCB0F5F6940045CEBC40394F60C1AB9967052CD09B4F4F14C047D8EB\ +84EB422014F32BB2A51C0411B10163A785A6DBC90FEEA34A0D6452318C973F3D\ +5FE3EABA37E4A3459C057A41BBB93105D88A47FCB6E36356DC5E6DE7:\ +227535D0AD2FB287FE0581383B75AC2444E32E242994F898D002C369B7FEA3F8\ +C96AD42CFA31EEBEA29BC04AA0A189BB9141F173C066DB821DBEEB708694DA3C\ +CE18266CEA5411E02802062E83645CD6BBE8A380DF478D787FBC72D3:\ +EC9203195C8FC9DB886534C95075B1452F3DEAA5574EE0D94DA287A4229BBEEE\ +C550AD2C8D09D8D29DE5D83444175F0050BC89E2D5F8794A495499310670D055:\ +E010BF035E23F39637AE444BF0F50C47 + +E8664B228D28533B57A493FAF4C3F61126E85E8596BB9B73780D9202902A05DD\ +7BB8C68BB2DCC064E058252A6D0E3F7D482C123D14538EA74517F8CCD618CD51\ +82683811C35348FB1BDCB6B6B538F407C4AFED94EE98CAAE6EE122A629:\ +A8E7F8774614C1B1C6BEE486CB4FFD249AD07F22A93DFEF218BE32253D9895F9\ +74EE1D6DF2944AE977E3A7BAA13464C9F4C82CF501DBF96A81041DE5D3F4C839\ +7DDF974F9C7DB0C4016434AC17788480FBB5730C9E5DA783201E797B78:\ +1EDF654D9192AAC22A2E5C000911D1190BFF5146D8B624874938055753BC59AF\ +3C79ED1A2B63F7590E0D2E2B1BFC4FD9FD7E10F23F903C1F3748C4C8DEC20991:\ +CCF19F78C795044953CB405418702899 + +C20901D342B4BA042D9C30D99E25DEC320AF982935D47D82FB01172FA67999DB\ +923861E26794F5715E497457A126417F49503F16ED1D09F885E143C502C73733\ +02106180AAE95D500396CC3FAEF26DB5593AC8363A3F99D5DC345D7A103C:\ +585BD877F4930C0D56DC76B94B2A457DFFF37BE6C53DC3A6FA1106EC834B6CE7\ +72DA4F9D865B879A15A7C5F0F06542DABEF5912B745511F44FE085C45AE03028\ +1790949C9B851550E62931DEAE3A0778AED187AAD3FBD1D3AFB5EB4D2D9C:\ +A247A25C6E9EBDC50964866CCE6EED1DB33C8C6736183A0D05448702EB606CF5\ +E910B45ACC9024E1133B14003564C7A7C65538E39007A7BE77789B4CA817E659:\ +0BFBD60B9E526C33A8F7E58A698CE2E1 + +131A8A1D098EE03489D6470B6A84B0118BBED2AD70424AFD567FC6A6A6463441\ +2B4D2E796A22E88145082C4AB6A123C1F68C53ECFC9A46EAFD0CDE55523EBE9A\ +2A9622D3957C70155F8AC4CA96A1D4DF537D2F1BDDB3A99F5B8672C79951C4:\ +E1E158FDB46D7BB723384FB7752E1F198E3DCD829EF02B18F5399D95B462C607\ +14F46C1208E2DFB6CF312A35B18EE9B1D3763ECD2376F803948FDA78150143EE\ +128D094757D7B3F3D56C6CA50F80F398179577E65687C72B8EB189CEEDC0DE:\ +B2670B162B792BC69DB0E284F565BA6F34F79D4BDA1A983099EABDDC2FAD4E73\ +CAEFE5EE22C9DA8A4075D8528C83472240BCADD0BB083FCD5DE1A585543ED956:\ +7679CD4E42B5D2A831DDA76FCB988ACF + +5E4A0DE980F9F84D120851120D70B56B2A4F2E3256A7FA2266A729F9509600F7\ +621F33A3C56588A8CE22C685BE1EBA80BC66D3395B9746404E33E5A5F8FA4CE6\ +19B19126C04DBEC45DABD7BB99F87D407684EDDCA659461FB3835E8D6F0C3F11:\ +BE08C497B0296BAE9483DC975617E42C77EC5E74100A33516796B277B5D2C406\ +9C59A164CEEE2D70097374450284A06983291AD62314EA05B78142B34400D901\ +0454E33270E7C56BC272CCADC123D2681B6432CE9B70E096194DFDF4109D0CA6:\ +95E30268A8B51B1628F36878A8D399DBA9AE32C65EC2A586BB8C630A8C508C34\ +EBF6DB6CB084445BE218A80401E23413FED6B427B00775A24C5CE0B719C86E24:\ +4D6CBBADE1A824092490C63A00435572 + +AC3D621FB9D3F578CD668C778AE5684F788122453B96FE9F2BA25E520D655451\ +6C4EC590BCD1CE3AEF6D25FB057840266A921CF77170BE425ED1A3466EF03979\ +218325C201DB739E55A04AAC298E2D52EEDBEB9083B7DBE9B097BAEC77EAB946\ +53:\ +38D72DC8393E8A030FAF21405EE126AA7B220B0920819B5A31C3223E2225E5E4\ +D4A99FE5091DDEA2CACA86B8E5080F6DAC261C4DADFBE93A791BC6F42736F8E7\ +DCBBB7A6C9CDF7EC0143A5BF85A388C63C2E09FE2DE8F5623DAC6ABF84AB0546\ +F9:\ +CDDE1E3EC8CF36A175E859843A5E90BCC8E7D2F696AB254E4A6695481C09CDEE\ +F579A943C78554382EB27D6AB1A0EF46D585AAEA65267172C3357210E809769B:\ +B10879FB2570F4E30C9B75BF82F1D011 + +864A03A962A6CAF675E253FF4522060C282AA1CA16F334EB9C018258A4D16EC7\ +A6B8CF4C44C1C7C3DE0F4F33539C96FE128F31BB332F857CDDD479BBB67BE7E0\ +90BCA34E60B6EC60109619EF894198EA931DFCD46A132D4DCB456C18BA364BD7\ +4060:\ +6180EB27CADC6C94489EA99EF57CFA04EDE1EDD1C33B667A60803DA6D0357C02\ +CFF0C9EB91155D600B4410DA4C2E962B78CEACA1963B9F44BB6100FC7C03E2DD\ +A28892B1D332D34B07878C9AE6BA2CDA81EB61187CFE2608A2DC2C9C5429B31D\ +8F80:\ +1CC977EC5EA8B094303C623484908E6F7F4D5F8FEFF3CCBF17B46F0AE82A13D8\ +6D7649BFE202A210612D357C9831EF0A56AC4FD95BBA1D8378B940C302A3AD37:\ +E49ADE658CF74069BF4A0CF826D712CE + +098488C02872B0D0ED3E900E8C79A6E7E36D1F0A149CC29E2F39E983434345F3\ +F407468245DDDFA144CA817F9144F5CC0F7BD89814458FEEC309662EF186F60F\ +CE42FBC80CA4500E724E5F33B9E07E8B7DD31AB76BD8D57366FAD8E74FD53417\ +6FC4CE:\ +9B09E17E3A51B53374F67EC5842813F5FCF3CFECB1E3A4E06F03B46597A5195E\ +298F0F3227822CA8DCD9095BE716561A484723B808B20B958C53592CA11B1F55\ +89D7CE47BA9BDD706E352AE2B4F8B3F397B9B079DE192F05CC7AAEA8CC1805A3\ +E9E5E8:\ +64C912CE24102BBBF04B064809F5A2650119E9610B32CF62CB77F46812D9CF2A\ +7DFC897CDD4C61D1FDED8AA2CB1E0F4A09FF78BD7E6891E7F6F4A65ED82A5FAD:\ +0309584D284ECD6B46833ECBC65C00C0 + +E06AACA7D51EC448F96556BF1DFA5859CFF3FF283447749A329C8C21F4F0A7B7\ +B5A4CDFEC297B88A19CC4208F4D237B34F590A8EB72C98FF05F25725600D7844\ +7800F7831D6CBB0B4BEE113B54AAA96D732C59FEC9AFAB086781FEA7E785506E\ +8F2298A2:\ +8F3610B44FA700BFFA2A6E9D0FDBF9053D1189C1F4DC8148E6AD3C9093290902\ +C422377D443EBB44FCDB74848F7E274A22A38996ACFAB15C5328FD135AE07F58\ +880FE11039E3FA9C0BB8871192CE2126CCB1A5F2EE589672A7BFC10CEB906185\ +DB877382:\ +F41046323EBC41F937AF2108BA7CCFF29A60093A4F55A495BD8AA112C11E3279\ +39FACFCB848E4DB2989570D3AA76CA34639439D24627C18DD5A96E60EE38409C:\ +93745FC5648C8BEB999243A4DEAA8616 + +436AE1619D3BDC8C534F74681FF2573249FEBA565DB34C271BD2B34AFD3AF353\ +1645C4BCA31ACBDDCCB02A14E586E7EA95ACC297F725C7F6D35DA2D5ACADC569\ +270149FBD31EA52577BBE41AB92DF6AFFD46BBE3FA41444EABF1D41DA0600343\ +31A27EFC52:\ +80EA0E879126401735683D65102E398AACFA9CC89313D4720919E0B2855058FD\ +232C2DD84E8EF00922714111DC381B73C8D24A2BAECB3AD1B0E5E0289A80853D\ +39EF79CCC35282A4B3FF090A6DBD5D41AB90C254B3888A998E5D264031D3BBD5\ +C859C2DEB6:\ +FD9AE9F5110CD122692E59E32BCFBCE883ABC69987D247C019B6DD9C107F7112\ +CE462B8DA4D587CE0247D8372971A4D379EDE810E647725CDB5AF2E430CA3F2D:\ +2AF05DFDF65DAAC4BAEF3862C00A62C8 + +F69B6C84759D9504CA20083191FDFEE4F5E7FC0B5E3771FED2BC519DDE2074A7\ +80FD83B2378508687A5F9082FEAB301843F191768FC70DB1D245FDB42B3B62CB\ +5060FE8B8AD010C461DA73DC139E0FE15D0B924E6C396DF759A3AA68B327CB8A\ +5642B56E81B5:\ +F617F599E3035E7C0F0AA5EC17396835EBDCE26CF975618F01AEE9D5951A0578\ +23019CA37AB1F98FE68554DDD441EE60019C742B64C5A911C919C264A1372D54\ +95E7C1E3BC1043F8AE6F92EE1A2D5632FF8709AB513712DC16391E9C334C1B58\ +06D27415D9D5:\ +0D3A86358CFB0E854001E69ACC23A37DF9B0BE0D4F84CB357A6F45D5D94ED305\ +3C0CEF9629A83C3A93AD6BF60F3FEF165F4582A6CAF079E1EEEB3D00E4CD3E67:\ +FDCA2980196711165DDFF38BBF9AA69B + +41F2CE69907B4FFBAF77918CF2A95402F5BFF25DD1C3C34DFCF8C15AE0EDE2D9\ +5217AB3BA2D72CDA950180CE213B5CD6DB09602BF97E2C01014E9B366AD1F084\ +B9827CE35E2E834A35932FD13DB8EB93DA0B75C21DB91FCB15DFA629AF0C4529\ +0536566DBABF9B:\ +EC0C194AAC8CA99BDEFCD6C62C283B13282EB226CB3897DDEB1C440E15269C78\ +2BB559BA646D40A9980D3C8AC96D972AB8B93CCE8FEED92C79B80BB05628BFA8\ +3F49ED691E75B933C4D9B0DEBA89B2D2E9F4645BA34F0964D33779271C404069\ +5C6731856B1EC8:\ +E44A9B4784E90B955B5A9E05F478882F843C53D12F854315284BE36402E11150\ +3CDF2616E80CD6FDD182407377761D0FCAFDFFD8D6E5E105D0BEB94657323E73:\ +D6945949050855C4894202F6ACCD95F2 + +47C896A11889EF1BA5C4ECFF32A523C86D821315EBD7E37BDA73DC3AF9C449B0\ +642069C7D05B69ACEE58BCB497A5C96F5E2FAA5B9372CC6B9EB10296C20A39F8\ +81122D6CBE8F19ECF8B1A780E4D7704B5E5D583A52AC8948DEE8C4FDBAE8BFB6\ +B8E1F12598A6A20D:\ +680D5A4E363607CEE46E42213DF6DE86E26158D859783ACED21287804301F12D\ +B0BAA81D676E191152505BFF53D59CD2090D90C2BD9B2738A3390418473D4CF2\ +A488D581A8D9266D4B41A156CC66DE07E068A11E830488F57B851CDBC1CACECD\ +3A710FBDF6525DA7:\ +C15048C76201023234EDD517AC8DC1515940E81F54AEA2E6DF9420AEA5562AAC\ +BE234AF2DEDF5A7A1101C549E4FC2B70D4C801366527B7B0F48A0BD57DF684D4:\ +BCBCBFB73EFDCDCBF6E80D87C016A1B2 + +C8D2F64D6B9023E92BE952ABDBCC0C79EDBF1D126F5FF82DD2AAD907DDD9FBDE\ +65B074E0B1EA8ECE18A03ED154CC96CAF9DB7933ED4A1650331EA6EECC626123\ +85F2160F4CF857AA2D5B4471AF7C8E5EDEA758274BE1FE9777A33052FFAA5776\ +9093EC81D4766B9477:\ +50E9BAC4C87E3FB5759414ADFFDD25C63933ADCF340F4D6CD5A3B0D6742F5CA0\ +BC2FB7EA920AC08AA97F30CA61AF90F953ADC3414CC6EEBD98133BA3A6D94418\ +8E9D05EA0B697CC3404666B84B8B33FE504E29B85DF7FA135ABC9B3851714FD0\ +DCD86288F92A860FBB:\ +0BB0A123AD0774528795D29898837D54A8B945AA48B1DAA4EA3DD786DB62396C\ +2E6E2D7359E405FF09E917CADC15403F4928221BAC56CD4C94D3E2F25D7B1C52:\ +67D9D8BF8169D9B3B745A9C46A51CCE7 + +45D2DC013F863D5B2D57D7166C17E0C1771348078ED3AA5A15F4E814E90AB991\ +68480B8FC97C249A0AC3A842EEE370F45E54C8C08978EA5E7D230B5B02C3B4EB\ +0985C870FC230DFD01C83D354D89C65AD570D21D7BCCAEFE43DDF6BED05AD7C7\ +1E1C869FB7713A8FBE84:\ +F21C902C29308BC5DDD124A42710F70215B6E03C6634E07CF4F95278841449C2\ +E73BF59327AAD0243BB755D779BCF6D4BF1C5BEB593E5E3B56BBAA84B88392E9\ +00376059778924E48E1BF39FEDF5DCB39CB8D53DE75CE5074759E4EE316799C5\ +2C51D18A7BA86B5FF5F8:\ +DF5E8AA90F636AB694DEAFD9B2949DBF7E7F5B854D25AAB5848DB5AC79998DBB\ +99928D9D298FF690488E068C3A8DA51FB7B97282642694AC82C986D1FFA26013:\ +081F7DBBBE9EE22219F63B7E743783BD + +6BD7FAE104EE4AE74CE307BF57AE731C5AC99B399108F7F1FF1796DE8BA7FAC5\ +8BE8B29EB437B5E37FC64CB1689EC59737BCAE61A321876A8B14A58DFD5F0BFA\ +6C57D48A32FA0D4066408C8214ED7270D75E663D24AE1FD2284AB97645E0F5E7\ +BFD2B15CBA29E7567F95C3:\ +B6518039478C333FE12E5938C3154995E21036FE602FB19B542327542D90A334\ +E4AE5AAF242143B3E386F6CD16A865CD8E3B3D11C4F788268FCF8302D17D3C37\ +8D8EFA3E3A10E587478407CF3CB12C9C31B1CB8EAE169EF5EC0681624E755FEC\ +060ECC6D9BDD6FE577D1D5:\ +78B8E0290AA9957732C79F0699E027D9747132D1D3AADAF5915685CBA3183E3B\ +4B365BCFB8920058C1ED22FB475AC2D36720365D76DECFD0E5F2129B68E8B9DF:\ +9604CF4D052CCAD5C9F39CD2FDF4449E + +9F79D9E56BFE8C9B6A36D57370D1127A301C196AEA339F44075CF732AB496A41\ +2396041000811E02ACF8F8A4E3BFCDEB071BFF30F1018FB1BEABBF0C22B4D6B5\ +A4C1ABEF21E0E901696564DD42AD12FA611F7681C98BB59915BE65ACEF7E0DB4\ +0A4C768EB6352D2D8DCBCD5A:\ +9109612F993779D809F5BA0D110AB6763547D657657E9AD49BA60CA3E22769CB\ +DA5ABE73A541714D5FAE4576C310887679C981CE88AA7328862614B8D756B4C4\ +08D365BFABBC0302C18587BD5D4131B989D77C775281B4C3345049DBA721A614\ +76A814C6A56D6629308AA372:\ +60A2431CC82FBE4749CC173936028A44D4DAA914A5345715846FB4E102CB9AAB\ +C9F606C56F0C61F22FC5755586BC28B559B65C04D73033379BC0ECCE2971466F:\ +E2D8127E708B53A1E43FAC64C173D08A + +E3FB6DC979AB196164563724EF05C7B68A3196DA78B1405973027ADB273422C2\ +178297D8CFF3C961E12E2F1A74839A02CF734C888FDF56027EDF15F4C5F09EF7\ +35B5B4E4C82719917F53FEC5586C346609FA203445C160384DBA40434656CA22\ +B504499CCEC3D02E081053044F:\ +3CFA718F9DF27CB9E4F58758D66608FC9802834718076468C531024B19F9105B\ +6E515E2ECB98FCB2BDF104D911B758AA92DA3AD5CA815BF595F59B5EF07DD07C\ +164246398F70F24CC6116BBBAFD646407144AA216851B9950C509F9CD0CC39C8\ +53EADC592223C647F5CC4971B3:\ +406238ADDDF5C0B4047320A0AE2159B2726C7172F5449E2712D5BA4D8B12490D\ +5CC05C078E4FD20E16F3560304170D1B416B9574D5D1A149CACA906B4A98DF17:\ +D459AFF85AF06AFAFA1C637B3319C064 + +7C1768890833F7C25975F60B508EAF5E0E0C5A21854BF506AB71DDAAB963FEAB\ +16B8712C2DFF74E2262D8119494448CA15B153809C0A7049EE62CA2E940708C0\ +6BFCBC08D16AD286A024CB7B448C4C9EA3411293C34BC022DF1155F164A59652\ +3BAE1D36408184D329DEDDADDB20:\ +0F3126953B149457F23703B650AF15EB80B7BA6EF77E051E9D4478FC9E3B41F8\ +0564B8671919406C2969D5F56B03BE32C4BEB660E2BCA24A04B160D8B6283CEC\ +3AFEC54D9075671C4D5BCC58CF33BBB980DFC94A2947AE64146422121460A8A0\ +EF1B83D1CA8819751BD5C8F1D0D4:\ +79C7EE3C15D46F95B3E6ABC29D9040EF853DE87B4AEB31EA47BF9F2D571F127E\ +34811F7DC7C016DF34F45884771D1E16E034F2572ABFE5033133249EAD23399B:\ +5AF457B616D400B197E1333745939EAE + +1DB0E3C80F58750B51ABFCEA443A352298697B1F1B6E658EC0FBE03AB1365375\ +302266C7F25AFC177D59502408C1B48759B0DF21CBDAB3EA20A1B59F7AF9A186\ +432752639EA9B89D3B35A1AF0C10ECD70781583B86B3999F766A8D15C68063C3\ +6620E5AC2FFB9378360EBA25906410:\ +3335C951E4AB1A9A4A432BC7766E57AF65A4E6483EE3AC00650B0B77E96DA2C8\ +A3BC6D8656265053820A71AA789D5F72E28AC6D53F534A3CE3A36C5D812CDDFE\ +7663FE72E58515A1D4390F24F68E549E5F0D83ED1DE16BFA36D819DD8C43D459\ +1DEB849B97AAB7B84F7529EF6D16F8:\ +9DB3F4D3C0FDD3711023C0381604C174DF54D5B258FF10D34C9E27A27571BFA9\ +2261C81013D39906A56D437EE32E1541C8FA54204CFC7777D79FFE7A910898E4:\ +F34F5743C27986558CE1AEAE8300C654 + +317A8FB8293F59FA0A4BA82B30B6DF3BEED9A69E430E17F6773655ACCFD1033D\ +3ADAE04E159D22E1C8D946D188CBA6EB55C3D6AAA848A7F4DF2CA2C4E5BB4949\ +A66D71AFD72F4729715B64A39E39B376E7D18C20D3CD05D5702D1811C1E9A2AE\ +9A1CD8E59A3A36EBCA17B5815B873A83:\ +8D591DD637680338D536B31F949FA9190DCBE8E07CA8EEC40AD1C16B54192CA3\ +5FAB45F40F473C4A9E12DE29AF827A71C62E6F1525EE55FC8968C3B6C16CD789\ +B7EA938D7FFC214781983AACC68F634A927BC0BC9D95D5AC23261480826A0A5B\ +50ABB2F3482E947ECAE908404CA56589:\ +323AB39A5048DCCE476CD7035938C334D8F74AC40C091435E96C90694B310E06\ +AC15D048E08A1E847961748DB07C24583A71C9029DBB92684C61CFEED792F95D:\ +86DA4590E89B99CE6A369EC0BD6CB8F4 + +FF30DFAA708EC407B616571B090FDFFEB04ACB99080F30FA98D6929D05F87D18\ +A323A0DC749FDEA68C1F7927D399F89DAD0634684C6E8411CDA0A5F3B2302563\ +884C61AB605E7B3EC7B1FC0E18A018B9BF78E826E715DECC77B065F413C38823\ +B7EE7F5EBA47CB8A33DE68807380A0F2F0:\ +5179B345B442BF36758CA8B750F54509844644DE3D7955EF2E2D03BB105B1F82\ +2B44F9068E1A846DCFB82A0D598C5B2C38EC9B7442DD80D762215FEB68772031\ +39CF65051D59F20164582152638CEF22FD567FAE7A5ECD7B5105F72C87F2359D\ +7648FC45A4D7176D48E53C24E2031BBB22:\ +FBCE17D3C543B60D7C1E3D2212D067DD4FC6B45B5E8E401040549603D295781E\ +EA8489FCF1C1F02EC9685A759A45AA65292627677B92A56FCF516C65AEB9E1CE:\ +B7F5698EAC7866298C4BA0F2C8BDCE57 + +15A9032CB7FBA4C1B48C84FA108110DE0EDC32DC9A1752A86E0B15A38D700F8D\ +93E830D2B99C15DF1DF2BDBB59919C707D6A6AF9FD8B21A26D37A7AC802A6E0D\ +64BC2FC31DDCF72DC0E35CBF938EA1CBDCC12D3BFAD466DAD85B8405DABF0338\ +8992132CA3041FF2B384D7DD4CE8BC81621D:\ +0EFF57A8DC3FF960F183DC5569EFBF1693FEF4070EA59931051B4DA72D927F03\ +7CD6FC06D92AF8EB4648A408F84FEB00D531DC1C6C954A22868B8AA031E892C8\ +4619F4175C123A710E398B3E7B79A11BAF081BA91A640964F5DF985EA6BC313C\ +BD78F693D0F5B1F0C6F9AC9E5379FF2B53E5:\ +8760C0BEC871D986D5264761A6B28C9CE63C7CABDF795766CDFB6B75200228E1\ +08FC0BD09CB17663CC526F82237916E1D3794AD80F722D504F7472AC4F3D0E72:\ +A3DD31032D9179F26895FC472F82F7E8 + +2FA5D0A789720901C0F476243A1C07319DF83F6F06A5CAB05301A16D88716517\ +D8C9D11D806206F3A7E8827D1080DD327756B729D8EDBD42F6AAB210C05ABF63\ +CF8DEB54AC55DB63B2C0A21C9EF992FE86A92832AA5452AC1E4033A54E3BBBAF\ +D0CBC4362765B4527E459DEC09EE91A4FDB520:\ +9CF0FAC9D487BD7827D39A2C56D2691E9394E0F025DAD286EE701E5E83AA19DE\ +60090B03E01F0C445C3E0BA07D7898360E38C36D604178740C1205A837BCA0CE\ +DD86174B9DB0D451A6FBCF1B13A553F26F266D4957716DFFE2E28B9ADE18B42E\ +B3BD916B53208A43785BA9693561E6B68FEB80:\ +729638847E01B827CF51D79D1EB4A8DD5EC63641D24F38797BF0E9E91A42917E\ +FFD9CC62C3A8A3FE63A8D81A78DFAC280228AE204F670A13BE16A1B6E0334057:\ +14F8241C1A247FA7BC2865447AD9C18B + +09DEF4771CABD879DF77FE475D63B475EA4949BC6B5E0055F6FC48454A81235F\ +DE3A6E089D8CD84453A3BEDA6172D383DE7B1B47C8C20EFE50FB123CE9A55DB3\ +762393FE9CA10E0B81FD7D1FBCC3C5BB02F32A7B337A9A36AE70DEF8FEEA3ED6\ +64DC4C5DED0C47EC04C618229E90BEED92E51B30:\ +C459AA9069A7AD5126FDE41DBF86426FC5B06162ACE4D5BBCC0F88D183E55721\ +4D1C49CEAB56165F7CF6ADB0101C046304D0FCD41E70372383FC4B644D1F1E8D\ +0FE11C3792B22A70A2A12B6268A8F8D6FC611A4D84E9398E721AA15B5E398355\ +8ADC0F8DAB489424F7D93FE3F9CA2FD2CBAFEB71:\ +E96807377B3A102610CE11861E807773EE32679CC517B18D50DC19DE2775C855\ +9C2B42E43CB3CE6DBD3D3930DF148546E96483C5278234648841E19C31C7BE2E:\ +EB0834AC818F6CDF583C883221A2680D + +1CFF92B0C9F1ECCEC02F951447594DBC2D0649C4D927DF1ED39E125C03442679\ +3FB06B68B3C9EBFD266B0675A69A349179C636E70367A9D019E5A4FF64490F00\ +2485299C9426A07A18AD8AF1A25C7A60F9D0DBE6EA5962749299EF8876A0ADE1\ +EE700FBDA4268A8F0839134F8F5D9EE4FB93CFBCE6:\ +5131D396288281111C97991E2C9C1BC4DE3A4705AABC0623122B7AE250030C9D\ +A7C7F5441F2CD7CB5525BB21CA8439F1B919525A70B3CF659ED2760E8617CF47\ +7B71D40D8889C427752F3BB0214B1E916072D6AAC5769C08B32173D619D96210\ +752A624FE0F4A6C072A0E492CB4F3C4059F58ED534:\ +BEAA26F0B3AC4C0F4DFEEA5C3DF56A781AD2D37368C922BD5BB46D6FE532D824\ +83B721CEBE2602EEE6C0BFA6E8E91E5D6D48AE9A7A751B007D6DE9D927E9A4E1:\ +89F5F4272A6D04DB82F05F5BCA5E0448 + +C710F38527A635C3D0415F9A7106E43EE16BAA883B75009CA682B4A75185EA2A\ +65A9C64E43297CF406407AAF64D5FFDCBF115E9DCB8A941CD0D06F2A2ADF2013\ +043704F208595E9E5A1AC0C7A03404C9541B1B2C5EF7E6808E51DB8B8F4AE156\ +E268DCC47BAEF9F1BE83B32A62104ED0239FF29C98FF:\ +7A160D8D41CC3E14BC0F3961D18D0E6B3665ECF28378596259BF8C9A92C0A150\ +C2016C1FB28A87ED460778B9110117B1BF6DEDE35219307602463E9D7968E2F6\ +590F521006BBD6634FB0717176DCDBF3E7A77BD81671E8FEC705208A3F284464\ +41F13C8D438C5194CBA3E1931B81BE2F1DD3A9DAA097:\ +3BB9B9AAAE7B0F7A9C1FE00ADA5595BEFE4E7EE612FA97D4BE21859A64DF9BDB\ +75311701828FF1A6EDEFBF876CDCEE87297AB3F27A58BA3FC4807FAF1F7A0AEF:\ +FEF2159226251D571991E2ED70B4966A + +84A5E384DD70B8012D51F4A2CC8E5BCBFAB6A8C18E0FC4FFAA07298EFB07656D\ +E4224B3416ED9FA9E6D443B8693573D8FBA648DEC0D789171384010A0558877A\ +8CA3C576F940FFC2B911642ACB8AC866EE4228969FAE97ACF99FDBD9A762E7E2\ +C25BF4F5892563A1B584DB71DE49A5974EE5DC52FD88D6:\ +6256C709BDC87DB68F9353854CF2C95BB7152CC911A78BE75C172D2E87666F70\ +357E16D8B2AD0E0D428CE3F16DFC42AD958DFE8AFE21A4B7A282F9385523BC3B\ +AEEACA2D64C6249377744473AB16A098E161CB1E4E3930AEBC5EBE31C2A306FE\ +527D3A0DEC4AD307D7947C24B4D7CBB423673D04D1D6C7:\ +A1B17A739ECA52E0F1373D92CD876186C3C9A0A65DC7574E195845E342591F0A\ +EBE73E987A7EADED8B3FF5E8C5226BB3C4BA0677770AE4CA5B56511E4819A62A:\ +0FC28C8195B2923FE28432CF934C32EE + +720016F52B0036448C8026444D1425D81F7FEE2D97456E852AFC1E768362C18D\ +B228FA9D40E6D15D358A77C7AD519D07E706F51DBFE46A6BE5F57E55FF7AB295\ +833B4A0F44F2DFD2495CEEB9B43DBB75CD15EA4F094B9434F8F5810C2FE42C74\ +7E2E04CC4474A8AF6B2EAF9BB23A2C7181B4298AFC2FC0F9:\ +F2C052DB50B1B8745E1718F227EE875A1A5966C5A0CAA14F601C7388F2B6DB94\ +75254ACB3887AC2AC8ADF00A7A2076119E6CB8E118E4D237E183A658F08175B3\ +3E8BB63F85996750E1BE6619EDCA78BF14A5D12FBB278F46240ED743D4C1B0E2\ +DD6CC83C31436D208440D670AD073596229455EF95BB7012:\ +5A18D56D9168739F8A1B5727EC39775C99BE86E5A654680AE5A857CBFAE5E3C0\ +8B5095C01DBEF36FD628726829E08B301E3E2D0C942A9A6DCDC03C499D311432:\ +33CB2931CCFD7DF8DFA2814C9D0726C7 + +2E10C2BC220F1B4DBB95B9475F9353BDD8A8335540CC087CFE0C46860DCF6004\ +082A0C739D97A6F7781270A9194FC3F175B9B2857D06E3CB344D0C87E019BB2A\ +D70A366E868C251C165CE92F81BA7278E8584D4A4B34F9FF1EAA81D9827606C1\ +6F69CDA3867EE312EFBBEF386563A9C4C9CA11433D5EBE33DA:\ +5F73434D90D624484D09E2996BB7904A542917EBEEC334B69964C1F6E9ED6B7B\ +19455442D24180F6BCD54C023C479A8877CD8CA8937933D4EFD08A4A4B5B1189\ +426E2D00DE0DE249DB84191B70AF7043E1CC80E029BFB1FFCC53C1EF95CDCF0F\ +9A1F52A7C03E7283BA90FFD8D2E218E84C6B25ADE197CA48A8:\ +94689BBC5F14EA5C80672BB6AFB1661A5881AB0C9BC32306A292D289565CC22C\ +1B9BAC2B701113B003353803919ED19776B6407AF96147147EDF4307FF5E849B:\ +DE8A8E19A7E125F7B7EE60179D40703B + +EECD851851F5574F0C611C0E4AE716297E60D708785D2AA1272FA92949780D98\ +4317DFA38DB5C3F828F87BB93C02BE70C954738B6A2E76E1D7B37A7BBF1D0C20\ +728697946BF89BB0FFDA9AF5002EFEC8097E6138EDD278F94416D53D50E4EF33\ +856D732F0AF03F0B138174A5709E16BE736CB1ECA94A1137D7B9:\ +7A20D1FE8DEEBBE1E2B964AC46641D41BD19D15D29BB170900EDD35B0FA22BA5\ +309F7CB560F9AAF9DC98C230F68CD611A988E4B1F1E2F1B96AB6680C357011A4\ +38AADA89098E66F933C0E856CDB84EB4C06A07579575665C8C9C2C1C727B50D4\ +B894898A2657C8BBFBA1FDFD2D26D2D4A82EBE7340E5B110581B:\ +CAB4BF39AD1DD889CE0844FDDA2FF214E0E8B0B8F673680C664ED888593612FB\ +BE6B51A864B73273BC3EE2FBA5157286E2F9C517162D9F339D7E5316E364E00A:\ +1320B913AF0150B0CACF7BB5C65C512E + +D22FD6F61C04CAE2598AEEF105AD5A14C21CC91DA1040AC37094BEC60E3EB206\ +FEFD87E633044B119504B7BBA8AD24914D8176F412B6BC57F23021E24801977D\ +422DDFBE4DBA1786769059AFE712D9EDD99EEDB9B0237E78322058B27AD87758\ +914F880E42D8BA8A20AD984194741D8B380A4F2962ABA705EC6AF2:\ +2B1EF2D69B20A1063134D50CC73CBEA83F088A673D3B226746DAABF3F3E91BA9\ +AEF39BEACE531D1EC8F1688BACBBEC8C4D834BCC6D74EC15414F0C132D5F2BD0\ +5956A5319BEEDC3914F2459F50B07E6800278F7C335B3A19969FC47BF6ED2156\ +3D3A661F94EF4BED66EE582B196FE89E53B61076EF22C3E1EDE28C:\ +1DDF54C1F674BC63FC6CD4FD1212D4C510EA5643535B4866A63B9C3E4A3EEF61\ +10F2D94D27BC4A2BFBC960FEF6AB70FD131EB7DA2188473C38D9A6EB2BC96144:\ +0572477DD9BE3815B9E8F971A5C490CC + +86D500F74EA0A80FB65568F13FECA00EDA0F7C8052E4034C16E3D00798390FEA\ +9C04C5D9FED291FA1CABF37403B56EC770FA22F8742C79A63FA5C4F95E60970F\ +853050AC8567F3DFEDE8F7F9972FA258E74F0E72D626EDE641FC1EDBE7F8F09E\ +9D5E860732515EE69DE6F143777EE4F8A720A8531BBBBDF63DE98F6D:\ +54A50333EFF671BF4EA8EEEA0AF5E2F2E31266D04EB8DC93E6C82C287BEE00B5\ +65CD4A225142023A330314C90F952F8383C063138F9B503495435B74F574048B\ +9CF70F5AFB0F59EED85E6240A6989E5BAF9E35799699ACE70B29DC17BFC00E49\ +C29DD2D279EACAC0EB0B2F5A28C72010CDA6CD0202C7A8C816FC4900:\ +BD67D7C131B84E855A78DAB2065D4E9D929C2B6D6F95CA24C024B1345EC9FEF0\ +BBDC0421EB20BE6CB572B49F30E2AEF9DD3DED71D45D7272F02909782DD0D5FE:\ +2226118F51D8D3C6D4188CB5498C0A93 + +B4C0A353E4271B7EA7C6AE5160D703AB5C7AD5B0B51EBB293BD8A91E4F18768A\ +8380F6F361CC20ED27347CF549EF588284DDC96F0CD049142D0EF5C4E4E19F7D\ +9A8593DCE28D63990C6DBC664E3B805241B6BA5E9ED21B5CEAC1D5F7CD083A18\ +56AF03825E4420EEF8CF2DB0E3DE0BCE24CAE2656035312922D37AF0D1:\ +10E505734CFBCE50EB1C237A8D245E5206F69F514F4D6EB004BB09AE26534037\ +FEF36FE56168870A3182C98068A60DDC7D6BE7E2B51134868983CE1573CC582B\ +B354B68335818B336A5ABDA451ED7098B0C37030DE1839B6E0B0A8BAAD2B34E9\ +E87F472C6280C96D2EB1026B87DC34D46FCB08C2FC8F00B723F98C7AEB:\ +55AF3DD97B4176087A4093D9303ECF1763B4CF996543DE956C6BB41E6CC49BB3\ +BF434ABDE0175194E0EA8500FD601E2F6613C69546C1CCFBE0FB0531E81A7665:\ +6B223E75C4E21A9921E4CE04250C2EC1 + +27E952A8346D71E68AB76C66B8F0914ACE2E47FA6BE0D33D9FDCEDBB3AB21D6F\ +D68B9C3A6819226EF8714143AD9372FD1CED15DDD4B00E469921BBC1CAA84CD4\ +72B392BCFE6A72145F4767259A31A1C26012A0F185BA27567FE9534939BCADB8\ +518B5D46AD99BEBCEF0A8D6D3C05C38C72CC19F69910EBD35F3014891B34:\ +D15B7A804E64A8E1A9A095CAF6F599B8E41EF38C1A8290A2E00CBBF77157F445\ +77BE30B5AEE3EB26AABFB3A4D5DC3918742CB1DF19730FEAE589FC0D1755A2B0\ +636AEBE89EA454A7C7F91B631A84B49285F8AF0230BB186E1D812BE507EDF298\ +D26C8AA0C91C9857C9B8B44DFBDBEFC0E0D46624C8752DF2E3916A197E41:\ +80775DF24AA36DBC46F1220F0275217855B661A0C2574DA0EC1084AFF70C6F60\ +0508962700B50E79384C9C57C802CC8E69F0EE8F79B85982F99869255DDC81F2:\ +300DE070DC5DF16220D455AB95733CB4 + +C6CF174AADF9C16C7246928C7EDF00716297490F6A8F774E113B2EB9E0E1231D\ +2AC1A8C2000670DE9A27774AFEE98263E8CB31AD36270250ACA8E469E7A4E29A\ +2B33E22584B86AD3142B363B7D3AF1A40037FB14FC732ADAABB714D5CB27B4A9\ +EFA76DCA9ECBE4E06D644C03D075DA780E1EAF490C7EA36119E7134A118CB5:\ +BFE9123F44F649C212AFE38E0FA2884642EF2485B201ED153566645AE5330865\ +84CEAFC25241ECF6314DC0CB5F01D90A1DB9B2925B2FAF760D7D97E706C9714C\ +1347E8846DA2AB1BC4C4DCE9FF82DE3F11B908B1BBA8DE85B465663666D7C6CF\ +1583C8C39EA1CEE09B2680AB34DB00E093DBBF0066BAC8FBAA681F154AC722:\ +0BEB99D723ED26167BACFE5518C9D6276EEDD0A1F3438222B85A2916A4990551\ +63424C33980656B538847A9EC96B878D81DEC0733390C05447910869EE352C62:\ +15B89AB5313B4107E1BEA5AD2C09D23C + +D6BC799005A3D13522949BD71C098C87EC666D6B9D66585D5C6BFAECBE780252\ +CA47EBAFCCC2B19DA4E57FAEC294164C02347547DD1A45C9F1810BAFF44215BF\ +0774F1A1719C2113DDC2D41271C2FAA33AF962310989B2AB2596C8B8A367B862\ +FE6A43C67039F801467D20D1C69747574772C047DE78D2B23491856DCBF05CA9:\ +075BCA387DB963F8CC2113A4CCE7D5E4F1452BED6E1093E8C361C0C23D5B8587\ +BAE4DE1D6492782EE04F54BCD8A801AE87BBD5E0BA24CC28A9F2D8EC34D2BB5F\ +923F6A6E49508D4A6B582225949E298F3195283657AE5A6D2CFCCCCB660ABD54\ +C41AA07C11F36FF2CCBAFF6003324B57B1535547967EFE8BA1497B03DDACDDE8:\ +F9B94B4310C487F2EEB936F17717F625557932378E20B920A652A6CE905EEB48\ +58602726778968215E027BF0EBD36903379880379F000A555B621F1B0275AF5C:\ +C49CBF53E23776269C32C673C8392452 + +182C51D23A0D8AA74CA0D8F16464F428CD13DB264D854E2B8ED0EBDFEBBC7813\ +3CA32DE826645B3176EBA1B64019FD6F925316223BFB840AF2F9A63C829D6439\ +1E4EC11A8B78A1031B98ACB8E71CAFF35A394A728585C7A7459E6926BA237EA3\ +E64D295B4ECCE9FB99A9422212BB25B16E7E97FC18C015DBFDC3D26FAD5BA363\ +D6:\ +779A228D0653CA8405C2899C8371320353148114E2A0AE63BF262898AE21543D\ +15AE056A261992EDE7B3DA66DC2C8173D8FF06E1E2CC1CB2595C9FEF7574B97F\ +F8AE285D14C3C12CAE52034FBB8BEF5EE8089B280CDF420C5FC495C381142E1F\ +CBBDC9A81B082BCC17BC1C1102F2CA4FC20332447D636A11861BA550008F937E\ +E0:\ +AD2157D6E48794036F6B5AB706B220A96E11EA90BBA3C4D7ACF22B3BD2724D1F\ +733281F116AF23F476C73934B40A3B88F04D84BD881B663B4A9771418C6C0E4A:\ +1736850EBD663E8B15AC58BECBB27E03 + +40D8A3A75170592E5F529D29DA9006236D25CAF47291E0E6443D08CC819B9A5C\ +9151AD94413AE1CBF17B0A2C8EFEA76D5419054359A918BE23ED147DBA75E5A1\ +727AF567547E158296DD1817C4CB43CC02D87B6B62DA6A5A6192CD785D9A6A61\ +0C0D6869BF3506D63239A847371503D47F8DDC0C67B5482AE5D216B5FA30B352\ +D84D:\ +2B58636BBEBA1F3A83417E58A47D23B673B6CB12D0175905145BD7D2C725C5DE\ +DE5ADBC824755A19E2C177379CBC4DD4BF36F82057B5D5E6B3498B25C53E9DD7\ +BA154D74C7DE64A5D32B2DC774A9A003CD39193E7CD9E102316ECAC0FC5E45E7\ +D6751EC02EC409D1C062D8E32F6BE88DF4F1000BEAED42156D4458BBC03E4827\ +D96C:\ +2909E3C1DF3EBC1B4E2FE43346F62C3DBC401B4E95162244F9DBBF240C57A68F\ +8F6ACFACBD5F820A6FB7F88513E0F1FFF834D7EDF8B0A26CD360DBF805AC534B:\ +8E98DEA30C4597212A3377147F191C5C + +CDDD69036E9320BF1FF4E752E745E763FB470042A4F93AAE641B57D0CE100068\ +D2466302BC9D570DCD0FC88749EAF5AA0F35035FA0F5D04C69ED92B5447DD8DE\ +1C7B28D17D7BC9D1EFCCF05B02ECFF320FDF4836BDABF5DC572D34E65E4F0620\ +D26F540FC1123FA05F9EF432A87ACE2B2BE0A6A5EF6BB01401E8DDA43CB12B11\ +03D896:\ +BEFB4A3CEF539E0F5F15A2AC5594532E989F23AD63FB57DCBADC5697844064FA\ +94468A536AE43F487A2748F4A9281ED8C9CA72044CE809F799FD2EE3800D985B\ +111731A3F2E0DC15F3233187D1180FF502B131CA68ADA0347429325BF544F831\ +ED55D71D97A04B2ED3FDDF0214E570438EDA57558D7E22FFAAC630765A06D8D7\ +1F7760:\ +39F6E1C959EDDE1EC583CA985D981BADE2D796022ED1028FED4B7C6DC5CF5B73\ +F8B70B763702D55FDBF688389103155F18FF8F85EF0E86AE63F0C3CB4EAA464C:\ +077CF8F2FF97C558EE3C318A9781278C + +02AD0C442AC4B1CE3B4783981E9572A083B63C5A9625EDF48EB6D4C2048050EC\ +B02B3698F412888F4293CFB0B0F55BAA04D419C6CF8A5F35FE976FEE9D6A9080\ +34A77905F6B53335378FB518650B6B36612B323A197F7377D83FEC7A4A95D0C6\ +7BDB434822C1663D5998B16D85F4C9E075677720B01861D8009221E2CFDA7B24\ +6DE410F3:\ +A669D100570041BB5BA11723FED861B69451DAB7500C988E0E504624067DE27D\ +51872A19FC51E9EC3A022A735E5C7996FBD29F9B39B3364747CBD650FC812D7B\ +4AA581BA0E9D15E9B21238C1EDFBCECEE5FD7928BDF3864D78174DAD89CE113D\ +562F0EA33D0CDE8980B199E256A475900538AB46FB15B93D209EF1784E3030D9\ +B4DAB2C4:\ +B16B1D3CCCD67AB6F037052074874D04ACA71A70577DD9472DF03E78E6BE8039\ +9CBE59253E641A1AB0FAD3A61368358C27814AC32EC5939C921740ED451CC0ED:\ +079D85811EA541E3F7369E6642C88AFE + +8B03C8D1EB03D2EEC494B65E3529ECDB72325F444BC41721EC67B01AF957E3A9\ +7EFE3C39428281B87703E8C30CA13C7B1BFC1E0D72EA585BAA5FA68FA232C8AF\ +E3960A19C0898751AB390CFDF50F1C326204728C007EB185034B5272176C2DE0\ +978FE10C42F4F876BD089C9DC9C25E7BDA88316F817C0DE46AB2F5FDDA0AF1BD\ +2B8595D14E:\ +F498A04B9EF5E1C39F23AFD77F46856789EC50140464EC61D17538B52B412887\ +7C7B4BBFAC4A266B9EA396217A101C0A5781231385BAFF5C2B1E5C7500F0D825\ +732E94076A3EDB87DFCF6EE7E80AD89B6EFA1D2C142275AD7221E854E0B2BFE1\ +D661D357771DAE907EAB1BBB12F8CB3D9EC89E272F1774AFC75C6C6DE644B96A\ +8D5595A73C:\ +95A709AAA5982FD83517E032283ECF090BA772A2185D5C5A189689510E4D70F3\ +A4404E5A306259D68B4B6681B87E11F66F957DB31338EA8F61F4ED011DD80D28:\ +226A19FCD9AD661782BDFDAF94FB5CC5 + +904B084BFE1FCB161DD58ABCE8F857CEE874367121254A67EFAA72AC623F36E4\ +CCAD0977C2EE32B7BD41A1DAB344F704C353D6B7C3351B346A36A58715B79AED\ +B0554AC0B7FF5307B8E34393FD8034B9A3E386378F7F063323F052A839000807\ +7D38715CD26961165D02DFFEF6D7B23172FCE4E23CC4F39A2027409627947AEE\ +5016AF5C16AA:\ +DCFD7373BD77266A8C41040933BA345780946A5537DA0639D5B677E40AFBF456\ +EFD2785AD674B72AF8768A543F7BCB3960B010664617292D1A511FBF755DBD1D\ +C478486597901C075562503C5B328A29EB23D660B322A05DC5F76F8883F0700D\ +4C076DE1AD6836B7C03D8779102C5CB27BCB0416B25E94D689D1E04C7F66DB90\ +CC20711493E8:\ +A5FD0026C475221DB0B8175CB815B8EDC392B6A5A03BEF4F8A393EAB80905615\ +899DF15F554BED14576AFFE5A0850AE74AD5397687D6F0A36C68B6ED99208CC9:\ +D1938E9D13383D62411606CE3F7816A8 + +84E9BF42B31E381616233DE5165D54D813494600BC222162652DA83E0559A779\ +230F796B47B64AE6501063A95F0D3579FA170C8D59821EE746E3134E1262EBA9\ +23BAA0CFB806FA8AE933637ED9255853484DD007C4F2685020CF3C8AEEC2F461\ +9ED535F889F41F5B7104A6BFDB027EB58FB55CAA6828FE01D4F24D20A4B36D96\ +F96C50D5C4D5CA:\ +F1E7F0B33CEB81B200BFC509B849209D21127B10BD1390D87D45C28B949DE7E3\ +66027E4C14FF2E751B83078721A715D778FC298C817BB1EC3A96318F777867F8\ +304040A847990954C4397042C339557E9E9A484997A509A14F8E997459B3C7F2\ +7C8DCB8E017A69170704F564BC439CC08B18335280A2977DE8AAECEFFDE1DC59\ +19C86E11FFE565:\ +92CAAD32FEA3E17CA96F329B229B9412367B80AB903486FD61B593B52C5AD603\ +D257406165824BCB1DE7E45CCA2D3444EB4E6474AFFF6A1BC0D4885C2FA80E8C:\ +C0568E6A3DD0FE7E63FCB742A68257A2 + +3D9B6016E7DF175BC319CA6D06772E7D7A1BB39FBA8E6ADACE88D624E8C103A1\ +2A6DE705CCBADF7F92D86355764B72F1EC67215719A4B81166B83F183D8BEC1C\ +982D6468ED8A106070847B16763F210796459FC0BDF413E4619F41ABE20BB019\ +C2337C14F5DCCF56DA8D9A46FCADEFD5727A636F6C632810420AF0224ACF482F\ +D84CE859A9C4FA0B:\ +05B529C9354BF3855210936EF156484D35681FA23BE1D71A383C01D83300A263\ +DD1B269A92434985C1B8A65DB6FC79FD4772204818BA69408D7426E51B7F74D5\ +9FA5F425FEF5A2162C1C6D7D522CED9927C8D7163DA1F8155C1256F62BCE367E\ +C2584B9F367EF0ABE392FB8A70CB4251639E64E919B9A6578C211C1E2F58839A\ +0E1F46B64F35B77F:\ +23AD41F1D24AF8A060F8D921772B5F4F5A9E3283F90454D1368B9CF9973A9D34\ +CBA431072FBA74BB034601B5459EDFF1501E1BD1683ADCCCAD84C0F893991371:\ +E369152C812F3E4BEC0EB846D1C97CEC + +E8ACB643B23EB6C7EE66DCF988DCB94CAE68CA5DABB5EE5C03D0D747EB59EFE2\ +A3543C3DD25663274A135574F4EB374AA78E65361CB6E80CEB0DBC247B2073C6\ +BD5E9BE3670900F637F14B0E38B1162BDECE9C44059CC057274B2A8E39E42D71\ +C8249186015C142B4D3C1DE2334DF2EC2385AEF8B88F19D98D4A0FC34899DB3B\ +144F420ED6E831AD73:\ +E0F85816367A2719C991A40B0DC318250B73DBC585CCC7CFB9332CA84F453AF7\ +9DB65A4D026BF686061F304BE2350AD8EA0F1567D5695C35934293861C593E2B\ +78271C6EBA51FA849F6A8C2F3023751A2DD87E76B7FFFE5E9C01E1477CA17B95\ +FA04CD5477EF726020979AF84C6A75DEE16B2364140AEF0A76405B3B550CF7CC\ +576D22D0F81575514F:\ +1F3605C8060DB8AD0A2BD01F086F5D487774D5B27D14D3DC2FDDA54A008A19D2\ +F52F5F57F7BF58D0212677EAC5D08471054F5C6DA320DD8660145F6C385E9007:\ +6248FFC00CE886E8F822D5D2770C3FBB + +FFB0184DEF25C574183824DDA2A8CEA0134B7B5053FD57EE11D8BFA11E88628E\ +D765067187302B236B2D291CD2289E48B4FD6F16231C8A7DA0DD2E5E81FA9661\ +4B1327B991464DFF07C2FDDD97AA991CBE54EE17FBDD848F54F3FACE67EC72DD\ +880F5083B36CDBA177C157B46B681B4562CC6DEBB5EC5B35696F73CD1408EFE1\ +C02D677A797BA647C9D5:\ +E27D79EE294E42D8D7DEB91C43ED5C09D09BF7EB809CC0EECFEF8CB7396009F5\ +F6776A4E1379DDC094274AAFDE774774CC39499A0CA3F9FA597F205D3C361393\ +C564B7B24AD222BA91B8B907BB799859F3CFC0AEB7359346636AFA8081C502E9\ +911750CA924E7013691750D9FA6AEF4E273C03CE6EF3881630416A19537938D0\ +E0A2A0BBF5BBB1FFB8E3:\ +ED622D1037B91823A2312B1C9E815D30F3655FF083328C87C03987F34C91F572\ +C7FCD7F980FF22D5B6C6DD28F0AD1AC78CD65C4F18F01CDA6FF29A50244ED205:\ +15D2A6884E9C6F89EAF99C11DE5AEE9B + +24780C445108DE3264EAD2EBB2FF3CD875A69BF7D09C4DDE186E92DB5C607039\ +2646E997029BA4634EB9931B324423FB99B5EB177C7D012687D55791F8911F79\ +38EBAD323A039D9380C6D80FACDC28929D3DF83D48E068E633F74E084EA7F412\ +6477A7D9E17B1DB7D4877F3EC87E649BC471171D077DFC329B4FC25F349000B0\ +B76543907FAA19DD5776E8:\ +AD6985267114929F81143F1A9A97D893651C42C93A074E487E6B9476C9A1B950\ +D547243A152BD8CCF67154A4F5B080064B8FBD4D12AFE4B2649FEF167872BEA3\ +2E2AC2DEACA86122581245D7AEA354A03ADCC177546191E9AAE76A98698E5DC4\ +318D62F38362C7756A957E52F090D1E5526DA1FE771CE7D40C1AC9F7B0CE5443\ +96CBFD946DBCC3EEAABD5B:\ +FBF092E79DF6B472B940518F18C817C492AA5416B7498050F7E6590C337EB7ED\ +A3BD14A69260DE6E07033C8298B49DBC02C3867CF62D7BB9D470DB5EFBD4C2C5:\ +F1D54E3C09F2C0B350DDD3A99D953F99 + +631F8402A8A2F2A3037DCCC23A19B986A9A0FE342827942BFFDCD16887307D1A\ +236C76F62CF40B46B7C140123DEF9413BD0CB1439A7ED758FCAB8CCBB333D1B8\ +52EF9EC7C980F6D77DB9DFA91652E6BF6F22C2322157DF6B5A4ECE266998244A\ +7F69C9DE9CE4581A9FEA6033C8F73BC212966A7F0943A49BE2427B95C19CDFF1\ +FB6BA398AF708D0AE89AD8EA:\ +5CDFFFCD4B81042BE4FD2A861D74C8F2D1BC65D73733EF73DB9F0297DBF8D6E3\ +4383584094D283A4AADA1A28E4078B43E540DDEBA3299CDF2C6A51EFC01D9DB6\ +C4130644250AA7E4288E01AC4CC2784B83F8FFFF38434805A88B40140A310EB7\ +8AEFDE3FA66C62A2B026F69AA049202C9190EE247753D94BFF64F9D1280755AC\ +0406A37884B27DE673CB4637:\ +89AE5DBEE5261FBF22B3A7C50479B063441FAB45B652634D52D2C265926A7870\ +240D492A72A95E5972EFC22F019D0A9197975890C72C8170B09613C79F3AD31A:\ +4B4F456327C8A819E8F2A0B7EFD68E26 + +B6986DF10C1EF8C71B4C568EFECD0706A1605FA9F2A456808160C28A61F32846\ +B4CCCC01A50F725D05C076F933A848BDCBBAA82426DE3AA81708087878894E78\ +7537BD1901047E3196E22513B9914D6A95DDAF00E5DA6C21DBF5629809F27C17\ +40E423B9DF6619B5CD71766274AF3FD3023BD912A5EF6454C9D5A8AA05A89111\ +B4E8394F370F16AEFC085492C1:\ +F6DC7A7AACBA454E0B2DF92D648553D645D3E0C880EB9497EE98A355A0F6807B\ +9221F4B3C6317F915E15A979C922C14FB90FD71DE3AE69F7CAFBA2968BCD9F1B\ +14787B0B0DB258F0B8C3E01C9E06E6EC26F0584848151D9EDA97391344290F5A\ +F2051DCAC329CFCBF3E37A312BC4A7BE737308D0DB7AB9C83F243E1B37106A44\ +5F21982C586B72974C7A60E790:\ +B184011092C983E517FEAD6F05456D2032752A09E344EC1C86A897053A2B1C99\ +6337F5CCD1A15651BACF199C2EE3DC2CA2BAD5F957B59EB56728D1FA30A4B433:\ +6289A58D101ED6C868BD1688C05E3EE9 + +EFC485127099D25D967C8E755D4F91B5B2554275BF8144A365FE6CD0F9CF159D\ +5FFC07BD75A5E37F6C7584DB6077754D6D2FC49F2BD26C6D1F665D2B3BB24DA8\ +49263384CB5D239EFB4AD4C643EA11DF1F0C65047651FCD967A4474BECF9FFED\ +B1DD6ACBE55106AA20B5A0469BFB7027469FF0B790A7DFB57FD0EE9D05AE24E8\ +2B5F71E6033E8E66E700AD88254E:\ +8B1DD9F350FAEDBAB5BB77285D76EDAF6B38EC9F4D3FAAA9B7D13AE441F8EE37\ +DE9D0938FE5CDCC69C7F459C9FED76004708929DF4176A6B2264CD61EC9F127B\ +0DFA7F553EC0BFAAF9C84290E83424E95B8FB047C982D65F3D5848CE5B5A94CC\ +5C7F25C28AA7B19755A4897B98877CCB34197494706680EEC4A1D5A324825A24\ +4C04AAA757C7FBE10C60B26E9C10:\ +43D7124E5CDEE7E1025F8D16C816222CD64E2631AE6540EBD4CA39BE8A4CF9ED\ +6BF822EEF3A49D9D46347420A43D70B2F4F65D8E6BDE53C229810475254F9BFE:\ +4D1253F5D8A3436AF1B74B6EAE1EE153 + +F777D4626BC8E1EC3F1B3D634111626E15344EEB5EC756B133C41D9723E76CC2\ +438E5BD74DF9150608B222F7CFA6F1F88D9D4A01F63D3129A22559C3C8787664\ +A46D0785214BCB184D46735065CF36AC60CCD81B959846E25F89351493F65B4D\ +C924E7D550A891EF67848534530B8C051A1D125C534D0722EBEB092D129A802C\ +EE99782DD1E5B0E967CF103B116EF4:\ +EB95671E50E7CE4E1F1D37619A36D4CA589454D636691AA79BACFA56A3B6783D\ +42847889B58F1114C0BD0300BF31377CE37E444B6EE36DD8C3DEE5DEE5C3F1C0\ +5E156D1AC335B6BD0B51139E38E2D920F875DC2C35DE113C84112787D4A6B6A6\ +484183DD03AF97877BF439A6B7020F8A00D370295B88A80B291779BD3B48D5A1\ +685C814B1E95898562A11BEF62396F:\ +117300A3FB6AE24E901354B0DE987354ADC49A0196F4A6C4F840623BC34841F9\ +C34A5033B18CCBA4F74867DCF9F2E6B5BD1308A1F14EB9FC63F10649BE1140A7:\ +87A40D8CCED2C153978A307646B3430A + +60F27163F6B6BB28A798B17B2359C2304349A54A3B87B50ABFD5D9B77E106D0F\ +483E483ECF6C28302900F2F4ECCB675174610117443F2FF392903F2BEEF8C0A6\ +EE462454909913BD3614E8798D6EB0EAE943A73C214A95DC292F276551E9C4BE\ +D6A3BE4B15090D48303BDE9B3AEC70915825F88800D400F216F6C941B557B5E8\ +73D03A551917F90B795AF234816CB91A:\ +B869DE2DAE9D5B1D767D98ECBD9EAE4581984F1835733B49D1670E5724594F2B\ +67EB675B44493C0C7AA236F08667F2BF5CEAC40FC63BD4C3D51C4E7E26F45E0B\ +D45062631823C821D7B20A1D3706F8D2AFFAB6BAD8F9423E93A1B9AAE04D0462\ +033F95295D124AF4854AEE9D71E5F7EAAA0465BDD9E1278F590B38AADB725D6D\ +0F00B3D9553FE4645EE6D377DCF65CB0:\ +5A47E45D3E72A2F0CC66EB574C9F01E081668625D8D1F2415053A3B9778B141E\ +D3109DF96A5310F261C857709A7906BA78B2BE949071F440EFF88A9FD1F943D2:\ +801A180B177D6534970913222C592140 + +A78B5AE80E81F65CEA967D460E49681433539F2852262B89E92444293FCB01BF\ +AA4D14371C17C3B16FFC55D60CAB17ED13105EBC584BA065F85377E6E6262405\ +A890D62069DB359326BF71E739305EFFA2C2F42C39F2610105A3696F6C431178\ +679BEF02AC96F8A5D4B0E0C77D247DC5009C7E00036DCB4E8A555665F4D37304\ +2C645A87A0FD24CA273A4D1D20C82D4854:\ +7E6174D9FEE9347287DFA5AAF14A8AF5F3A78FE118CDFDB42CB8F4BC34B2F943\ +8F1513A874C661B8C88D59E667B0309E19A233225475D0BBBA6F710474EDCCFD\ +50BEE8A92651FBFA5D0CE4673D3C8AE6FC3FBE04F2CD60E913F6E9E432E5EAB2\ +60AF956C7A0CF607E8B0425DA8473671FF39A9FF191E59072E5C86C76368573F\ +81254D5C0716DCA77855E173F035551F03:\ +AA773417AFA9B1204CF5E216459C603CDC9201572B2733D0C60BBB56454D2C66\ +13E64E5F235DA766017F9F0CED7819642CBCAB7C4AB70C62F4177929751BF507:\ +976FE9850221B235F43DA870B9B0F6CD + +D2F8DB2B0686FDBD4BE64BC561FCBF9B738F78E2F2EFBF61D56BFE06CE9ECA4F\ +23CC442BF6D1D51B55A2921A73C2D5FEF0770FA85D705E0EB2D93CD0ECD66727\ +D6263D1FBA02C812890458385B6C138D6FFC83547646BB3931E2834DB5F28C84\ +DCE7692356C2670A7A05BBC61CB8D0902EEAF0D18AE8CF71C8703AADD202DA95\ +E9C7967A9700A43FDDF049924DA1D1A11379:\ +DA0885CAD1C8C75078AE7633F61B97B45B878CF2915B8B4F77C7BA456F0AC771\ +88BAA8D2DD0E929083F9928D4B123B8C90A40F61399A89B45140422BDCE57869\ +C313CEE655D497228CA7F084EA414820CE15C877D2C2610FDE831FD9953C5C9A\ +9BB3705F01CD4652C6B1CB153FFEFC2318A2AC74604BE1ACD0CBD8139C8E4603\ +6BAD1247CF5AE785A957493E04787B095B56:\ +4A202C1983B71E41DB112F14751587A50E9A6FBFC0CE44414862EE1B09417049\ +EA861062B2BA0956A0278A34E86B883B07F42750906BE819C1DD0C3BCD12FE8D:\ +C9BAFBE986B39D7DDCB8CE8B0D23E004 + +8D8A5722BBB70130FBA449CD5BEBD86330F035182D93FFDFD11DEE731BEB1700\ +AA69719256D4897240E2F39C54E390FF51D7B8895D2D04BB7F9A67EA8417E122\ +6A67E5A4A75F429161C999B5817C5135251C54855CFA0B10C9B11A1C252FD4AE\ +B368302CF470E0E1BC4E6EEDA8FEC2CCE1A9BE9E0B277503A427F4BDB0C3748D\ +718037CF28591A65EDEA5C7A5F2FE05BF93702:\ +2DEA2CE092FA848A885FC2022CD8A177715EEF94D252B6B36B27905DB6503DA8\ +2233C131519E164AB347339DFBDF8458F2517010A63186B1356C0FD154345E5A\ +22CA4B8952A31591E73CBF2905425CC1C4EA1A41F84D94D87262055CAAB28DAA\ +EBBC2EBBEE638811F187FBD472ED31F3BE5D58436EBF38F276E39FC24EE7C8B7\ +2543BF6AA1537CA25CCB0AD5998D6E70482AE6:\ +0D7E37CC074CC744DCFCBF5C0A407F8ED629C66942086E427972E07CA5B532AC\ +F13FE59C953F42AD1497137ED3985955581D6FF1AC52AC12EF3E88BB20628867:\ +6FCE49F4F9E8C5BC8A865A7A5C128760 + +24702D2AA753FB6B6A201E78FBD604850E2EEDB5E611BEF4969FB3687DEDEBC6\ +DE5942B854115CF03AC8C6DC08207A08BA9C066C1A1D76856D0C850AABF63428\ +81ECF252F29504BA62FD3517E858E79E87A9AA14155A75A9F9B7236C93E3D61D\ +1D80A655621C2636142B8CF4769E69E9FB9A6E4D007E919D7ACB2C776079586C\ +671AFCE2F7D823AA5461D4AA3A172A64AB04C6D7:\ +353A10040F30D579A09BF918B7DAD930D7C4326844A4B91382F311559A706289\ +25820AFCA85D2039A7FE4C9409BE2049EE8D1FA85734626DC93CB6AA49B5FBC8\ +E99AB0EC9930E23324C83AD2696612D297F0612D188C83C7EFD073E434B9C3C4\ +0BDC51A751288BD21F07E3A2E08A15F96FC86A395D7FB253ABE474B592ACCEFA\ +4E46FAB70A7BB7807FE486B26641CACBDF7AB67A:\ +DF3F3E2FA0418382E7D49CF65468846BF7B207BA149BD894DC47BA65A09F0C9D\ +DFBE81EC4DA0D3A42996884690E87328FE83D2AEC491768B1C682B20A52A6CA1:\ +78A98853B5C4C088892F617835B5BF43 + +E9A4C906FB3D7C3E102E99EB537BE282CE4C6B3D858CDC05B0C0A8C158C0F0F0\ +7CC4DD0F5ECFEF80DE8242AB82E16C2868BE283DB0BB0EC296F5493E4D292765\ +D2A9DB599DD6D811DA126F858DE07F323DF8CC339F6A0A6E3EFEC9A35C006304\ +447D0E0E1E9DE8FA678E8DF45AEDAE039FDE01350F38905181E900FB0C45C063\ +D426090D3D2FB719ECBB79F98216E3ED3D4C269F82:\ +6EB26655DC6F5F56B45D719A5D5379A5BD56D46BFD8C88D763A701D0C16DB997\ +1D1BB96891158281D020372AA580A2CAF8F809D500ED4C03149B540B12D0026A\ +A9D03CB3688C14A13D25EA35C8801EEB15B6B8CB9986FD940E820DEFA3B5F553\ +5401C97705168D53E3DAC0CFF8D4229F76C74FDE2C590B6629462F7825BFAC97\ +ECDFD9D8F86476432A3339541692A4C498A3773D67:\ +B42E8B5A90A4BBFE0E04B28C2A27EAC0A014EEBD1CFB3E8F601AD84C26188F43\ +3FFD9A4DC1B0A619078F16972B3CDE3F2278C6211E886631783EB64C4C84EB32:\ +BFE7AD86B83A5FB4368AE7770C2C8CB0 + +144EEAD91DFAD8259F884BB83198122346BC6877C0C2B5986F44EB9520878806\ +CFCB2B1D4145D92B53BF9F894BF58523A2F7770DFE8646B7144C63EDE7FC090C\ +3B64EA161A2D7AB48D7052AB727FEB1C0050004F44DB8F1F1FF562FFD7AB9815\ +83CCD3880E82953CDBAE0475F0612CF7E05533FC86B37985071274AB4B376EF7\ +BAA76743027C324C69BA0300B4ED4EF2F85B3B3D0573:\ +C7DFFDA2591B600EB79876A120427FFD5AB32DA0A9BBF872660D5D7C9A0632CA\ +B6FCF41CA1F1F482711C418725AB4C075E1D38BB22AA17B876EC5AB55385FBAA\ +7CD7C31C6C61EEC28AD03E1E9C5652F3BFF72B8A13D90DEFFDCF3316C7F984CE\ +C307D3C320DDB10F3467941B2DEDC26AEE46EB287FE1AD9A372C8BC129EB89A7\ +860B66D156ED6BF604F911D97F233946F80408E788BC:\ +81F401C4720AE2E11080F7F52322026DBD8507B09B0799DF2C8100B6132D93F7\ +54C0F0A59C6E2B81C389E4EBF55179A4B3A4BB970326B42107ED495D909F9801:\ +CF7A79F18165AFC5F3723FCFC87EA81E + +CAD0E14D6B97CD68F0B7F7E43166698B8DB87C00271B7D361674538595773FF6\ +5A9AE74275B9D8F174AA935240E3B6E7F321030111900ED7304B3CD3624DB444\ +6A7B66CC98D4F8E5053F6D4CA35D2583B6FD1732F776C7399C649C0BD2B03B00\ +9F283F41B2849BD1D1B735B365A0B728DE40EF0B08A9914C1889674293D0A9E4\ +9BC9FD70DB514200CA5BF2D396E6E512D04DAB6402900E:\ +099D2C6AE9FA3935BD67C1F13E1293137B3F262D9C936DEE9E41F6278311B985\ +22E6FBE196286CEDBFEB737E3B221ABBFB64FDDDD54C3D56F06A40AD8C36AC07\ +861A8F3EF7B4CEAB92C03BBF8161E0E951CE381E5AA4D5958B99E86C4CF48FA7\ +4D8F380ADE2EF9D58CD62B03854CEBD8099F6AAED5C0D13CF92C6BB89C0BE78A\ +A444291A5AF88E55159EA68252913B3B621EF5D1D3EED2:\ +E68779E736B5C1EEFB4E4C563AC2CBF5524C09CFCF99CD6A877557E53B3B9A35\ +55DC626A18FD32AEDC787E168B86CD2F893C6EF8A2AA522247B007CF01EBD3A7:\ +5C070C33AFB126201D6D9C41CB85FF92 + +855813289E39837785AEF095ED8051F8A87659E5B200E78B6F13C96185148CE5\ +F6F941942CF7C9C64D1250E8116E1F93AABBCAB2B147A241FD64883D18628444\ +50EE60412A2A38AF272B2254C31B09C07BFA14BAE2DC46F202028A6793C2F3E7\ +6AE50BB7CBC1C9A45CE2026FB1A1E9FF60617536251DFACD5CEBCDEE5C70B207\ +945540485E9DB825AB88915104BC257E349A3CEC028617E9:\ +07DAD2DF0247E86263755552CA7F12D30AA96AE29FE59B414E31D8921CA630E3\ +A57344E2CB7ECD42CF6E9DC896F13BF308D4B78553C2BFDCB8A654B49B3AF779\ +9C0318BA7CC25AC57EF98D9EA9D4AF4A54CB34EE84A6622D0D9320E72B8C0707\ +02C45EDE5F7DE2D8A0E073CE283BDD22FE831240B59BB4DC72EF915F051DD52B\ +48DA8C56FCC0666B14F7CD6337A2185040D136892EA6310E:\ +80DF01B1339A9576F412F52320C4EFF8243C95F163BCCBCEE828536B81E57F64\ +C3308A30110AB3FDE755551B12F7ECE074F3C7578CDBCD64EA4FB083FF568C20:\ +9AB550BEBD5F65E689799EEF77350BED + +4B980EC7F6C1C06403E001B970C57EBE64620AC8AFB1119263CF50AFDE86A75B\ +F24ADCF9B78FB4AA3E813CC14E366006FED0EFB26EB8A27079E32DD86D78B6AF\ +BD11CB50BCCF930CF69ACE2ABCF2D1AF3C9787E818F0942368712A91B5741CC3\ +6A848F9F6E59814E50E0C86339234E97ECC0DE1F303BC661260559E69765DE1D\ +17ECE34A936868D334AEF1813D4E7A4F5F29286194A8D8CB39:\ +C566BC1659179928650911541497964A465D84012569ABDFD54D0DA5A815AC0E\ +7E67AD83A9037AAB62424AED6FBBEEF92C9E1CF914242C8880D65EEE18F344F4\ +5961312CE18D11E4750853AF3A674AB607C2137FFB223A4D730434ABE6878E83\ +B2F2523AFD3C2C7091C6FFAF1458AB26585905C8067F3279F2270227D378E95C\ +925FE5EA37C55FA364B9764E3B72E0653AEF62F78E245CD01B:\ +F2BEF6770E2A6BC2F9F5263090FAE3270BEE133223CD5682FDE56254E37F62D2\ +B429D6E951DFFA004CEACE7207333589C3202F7178189BAEB6B87CF54D8E2EF5:\ +DC665BB1EFDDD25B933560B3D6488178 + +91631D65B5D1FD953709C0E5F13555437E0AC39B165A05191CA3E7CC2B83316D\ +C189EB21FEA46769E093C108DFD02A19210A3DDA4E744A7D6780F4FE1906BD5D\ +E022942A2BC453F5ED5B379613BDB703427F14B758D6F203EADCF8EEEACB3F18\ +FB665FCA19A8797E6EC034FB53816BB16715E732124C6A93004E2B83D3955647\ +3E321A836175DE6883032752BF5044F1036871935AA615278CEE:\ +2113EFED9A437854123F5CF3345ED55C99F29575CF292B415A31566AD81E29F8\ +3B4F9C4A3B3CCF8ED111D754583EE3E21007282DFD92E69D825556153BC8C4DB\ +8DB9B194A225AF36C1C16FDCBDC83299E755B77280EC92E9937D509DBE4708C0\ +E610AC378F53D810AB09799D5AC93CF3C8BE3DBF8A01EBF5AD264C04CAFAA454\ +9DF854F9EE416554CEBC188331B6DB08555C39897EC5CF735B97:\ +19AB0F1AA637F73D03FA490489A46C78E427343574AB38DC731181D190EB7782\ +9FC9D677ACDD74340A607249439CDC4D45BC4E6D14AD237D7AD6874116DDDBB8:\ +4F373F68CA1A9DE174745AD4BAB06E50 + +9C44DA0A64EB1839130DC756DD4E6C39348BADDFCF23978D8E664F69ACEDBB31\ +A89D0B6188D2DBECC770B82471D59023611249F1DA3CC80892D5ED3D4F38E945\ +84E6B8FD24C7F4CAD40582934470BD6F9204AE7ED69BD0BA7403DBB8075039A6\ +EAFEC38961777718FCB7F3032E9DFA3F5CB2827E6D1901318CEDA18A85AC6FF2\ +CDDBD6EDE7084B62370C3E36EAE051878A344FBC771A327DDA56D8:\ +02854B8C7D561BE4E831014A0F1D8B8D6AC07EB3BCCD836E4E79BDB2288353AE\ +DF9A45BFBBCB430E4122CE73230CB21817D29C9ABA68B41E74D6217FF877116C\ +95ADDEEEB8BC58C25E2A960E4FD0DFD8B9854EE2674BB20E68872D9C19051841\ +5FC6C4109E78E455415055698907DEED964A6DF167ABDA3FF1C03C0EC20C4406\ +E8EBCA083F3A26F421771668D93E7FAC5A44DBE2B00334A8FA48B3:\ +36F86422A1A8AD2786FDCF0D9B52E7230C79F65B0A14BDE95552C3EF460E6062\ +043741AF24550F653B65A74219FD5B82BBF65768102B83979B282A3355A70059:\ +7538D26B77BFF31D6E13E31850A4AA14 + +28E90084C2FC9B7A78FEBBA2207BB16508DCB86FB7FC49AAA00730C400C2FC9A\ +28BDBF8226B9ACEA3FB218978242E6FCAB72A711264A2B696CDCC3875ECE06C8\ +63CEBA9239A49CC05832FBC3EA3359B9D0818C1BCB73D81A5B547AAF4DCB9B21\ +0C322D966D6403740807E48A1DA21600BEC16469F2092499C457B2C3864D1647\ +1D75A229A514F4D30CB779C5AC31C1F5A3369753DFB42F469CC41BE7:\ +60A52B9DB1D33E16804F497DEFC3017170DE155FFABBDC5C004A558340219839\ +82DF04C01B1C9AF49D3188112105FFD9C4D82292A0C551B03B07EAFEB9B9ABB1\ +5DE5E134D0F1E1625EB4148A434D682225DB55371C97487ACB561D33ABDC1CE4\ +6869C876E29A5E824C69CEEB45D04AE3F615BECEC94ECB6F5A1DE3F6A66391D3\ +2D50A061B15BB4B1A97C11F994B0475F69DCE51121E00B0F5BB740E6:\ +B1D259B15223AEBFF9CC784908A27558E0D68B9F92A03B40FB4A2A851A720EFB\ +C96E3C66E8FC665912BA0BFD55E79172FB665C88837C05F487006B5356B9747A:\ +8589B4920D6AEB54F5E7A222B0C4B627 + +9E0575D75D3FD597613F1D544E0CC4FB11E2AAF3619E4255626C58E6A768AA43\ +A29591712724887B311EF40C7639F38C90D3D591417ED6E8919DF3FF2F0D9935\ +1F920F5450EF08832E50BE626BAD7D2F5376B858A19F1AE77852EA807A7CE9F4\ +5C763302AE8B174C655C5654275C3296D78A20DED07A0A6B3FE4A2811B161903\ +F4724978435B55AD25CFA3A82DD5C5198D8D6D344C63D66ECB08A8435C:\ +87EA74BA569F363D8223F4B8C0744C39BEF2E2FF4FD9C60886096E5B431E293E\ +40A6B5A5A948410B39F3EA2C561A0A1249AC0FF02F30B5AF58D014761B6D1E5B\ +9A4CB05B885B7F0E918D26D0D26F47C3CB56B078BB31C1060BAC33177089E83C\ +837875420F8F2E5F7ABD9664095422675BA652AAA5B0D02412643EA15C9BD592\ +407325F26ACEDC44B54A92FD0DAA63A498F04E8F22B24F4824CD45FA72:\ +63BA840AA75EBA1601E729596106D5A9784B1C96FB62105E72EA5DBE447A13E7\ +D8CB40ED861F2B02103B6263F01960ED3E0E801BCEFF6B592E2020B6B6E5280E:\ +9A629576FC30BD795BC5120841F1E0F8 + +F07862F285C06EE744B43BB659F9CC691B2216D92AA0A09E08E2DE81A68E1462\ +F0582BE06588DFB1CC7DF0D64ECA246DA8D666B025E7946327F83C04E4F78204\ +47C8CE1A50A4270BFA1D4EEB608B4020457CA06B1E53D38992B340580594CAEE\ +E1643BAC970A5DA5F79207500138A707A3D22CC9F2522E14287BC360192CE506\ +C70FE9FCF47E80B9B62D3E36B8473D65A54CE7BFA0D4AAB12E4D0CA6D95B:\ +828AAABDF802A6D3C367AA9639C5C3BBBB8665AE1032BD82E8253E94E9865943\ +E7400BEAF5A81EAD1140B70031E8E1E630D1C318E8119286E372EE23AB0D77DA\ +8215F0AD0ABBF0DF5088BB714507A83FDB10E0C5DDC83EBC27BB8E501BCC207B\ +D3113D31DC5D6580D2E11E5336C2AFE69BA1DDD0ED1D089705E0FC510889DD76\ +92753AEC9C06CFE5B274DD3FDF246B440943E52AAB04D0C4F92BE668FC34:\ +FB664243EA40C2E0DCF6AF9E7A1D38FA91310B373510CEBF9717654C9C45888D\ +467BF18D905521879C1B7C9E050C250D32BE37582873938A98B3D89E09FAAE52:\ +55FF333801629F078CA01FF9E481C288 + +ED64636F3E575D1ADD024A1CA62725E5BCD189CF03C12F54565D80ED1E2743C4\ +237A3FA1753B6F5913010AC39F7C8BC2EA5DDF5A697CD3E22B22359F0F7F2BCB\ +B696272A3532CA699A104FAD74D27C60F04B79E3946716AC8ABE22E712CAE051\ +615FAD7B14D949E2D0DE393709DC827DE1EEE146DB5ACE5A1DAD14C59F8678E0\ +A6BF913651DE3567FE1F9A5237924D9CEDFA823187A31846D6D721A1D5B087:\ +CA66251A56DF109C2A3F21D524FD20F0ED1F25CE8329E01D1CDB8A64B093F677\ +810CB176051ADC9A4CA8705E8C52F8B55512D847D3AE64E1D5A3544BFD145805\ +043CD9F8C40E629F15A0243C705753D22877BBB903E31345353D389B469D4A1A\ +B4A72322857D674C9C3EEDCE02DBC06286A865C21B8040E4CDFF02C91334EEAE\ +0C5A44626E5DB9D28581DEB82A24A5FD62FB84BE83A8105E89485C85E1C1F9:\ +6F46A21346AFC8D57630EAB85D3AEC58313E30F3436CFB5D75F1729D2CB8962C\ +8F014BE859E3CE31620A06A980D11161F0D40BC0103CB6984099D8FA37B3020F:\ +2BE2EB6FBB113FEF2C0169E1367A4D83 + +C58F2837B44C3166B99ED90BF974CDF99276D97D47BA88677749DF554ED8F19D\ +EE1D38030A98946A58B6C565336D4ABF64D01E6EFECB7962CF948A4473C82FAD\ +A17AF3448D2FECB51584BBD631C7AAD6C59BA6F94AB4F503E35B3D79ED78BCEA\ +E94C21F2AE92E5D67644C6101A74725E78E50230AA8C303983148EC7F2377C2E\ +32FCAB79E1E59E046AAB7B4E3DD382129F65DD0E02C597ED91A1EF3A4371D316:\ +2F89168484AEFD6F5BA42DC836006A4B5D63A9CAE45EA22A53855B00220CBD90\ +5F6131C8D7CB0BF5DECF9E26D8E305828067A63FDA8671D386E13D58397B61E9\ +426EA451E6956CF35858BE5745FA749D3C16D71C860C2C6B394F54CEEF818C02\ +306551232752BAB5732C63EE579837878ABA4D050BAA23CC414D47E42B6D3268\ +B7C14511016E6D1B077E5AEF75DE92864CECD399DDE104FA1AFEAF08DF4F0BC0:\ +DC519F4CC315A1A4CD3C2404FF61298C6F408E1D18C71724C8B338F108102E0F\ +BF2058D7BFE78418E4BDDCC8BB38BA7D04E4899E42C5605601BA5DD2BE0F8C6C:\ +CFB3AE17F5E805643192D1E3B3143E2D + +8015CB61C5F23AC0C425789F0671CB8A000B8C9207EFCC39D01B149F86EE42AA\ +DDBBE6EA8DFC0F0BAB556A6C1945E66C03697422FACD5DDDC7AF6F43733E611D\ +AC0EA877035FC63F7B7DB2F5E7FBA3EFA8FFE796EF8D3525BDEF4DA9BA8E65C7\ +22E3E191A47A29658FC8F993BE89B1AB16A221F4275A2879ADF5129E1CAA3C50\ +731A80A17A34EEC1485C80A753047FB0B844CF6870F68708C26941D87B3AAC6A\ +11:\ +BC79F30A2BBE68A1AFFDDCA05DD815A7624FC09BCA25A4F55BDAF47D9715C597\ +54A74E2DDAF1F8395AD054C444DBC68E63A56FF3677652B8505CD1EC285258F3\ +E6C3F5701D906648FE6A9DE9EAED5F82F2AF8B6D05DD08365226C278171810C3\ +57FCAB8647348226222E59607DEA2EECFE62F4A11037043254B06446251692B1\ +809E2F94F7CDE7B02AA543701D897B578491C57C771FCE60400EE7060F336BFB\ +B4:\ +63D001BB3BA9EF2152A84954436462B993507831BC16061F20FF35C15FDD2D24\ +1B7C1F8D7E9B742C0D5248CBFA10B41CD9B53150683090260733C4E0E6F999CC:\ +B6170D37CA1032D2C67B5CD14E26D641 + +175EA892388C6704E28E0059A99FC01FB61D5AC0DF1ECD94136C1AF18380E9B9\ +F4DE638CA8E5284026D10499EFCB6459569C4B47C56F3BE7F55D03A489612C37\ +047243A740664885C3D9FB303D28C6E1905154723F0AFDF9FE72BAE4C08705FA\ +27BF4F90C8025E4D29C3D25D134E82F725A0C9F3FE5B37B87B381C60FBF744AC\ +C2184A6FB1DE83EDDC8E8DB49E89FAB62575C1FDF543D77B5515BEEF9E9A81E0\ +D6BD:\ +A16A0AF17AE7F4067873699F837741904FEF70F705D65DA2C2561D34F965FACD\ +A065A7F0E969EC56FBE8AAF469BD251C0444F46DCD73F036034844E2F7D4D184\ +E9CBED269E2772CDFF9323CEA678A2070586CAED7589C7DC57FFD32C49870AED\ +155E3088FB41A2FD173C4A5F23D79553F524477BE40D90E08C81695359AA6B14\ +D9CEE4D25DAF286C917A011E5696F8A9737A5144CD959352660E5FA984D89836\ +30AA:\ +40342E898F45D16D7F8B217EA13479A6CE624E415B514B27D0DA3F2CB51A9EC5\ +D2D3E254DE7DC952F77262C6392A466846F4AFF35D5442F5B0189F58431018AB:\ +02E45B98DDD87A5508D0F9FB01BD4803 + +25BFCF57846C3E69DAED446B45DCD4CABBB8476EF543ECB297DBC5F62B6BF6B0\ +3D44E227F020C8BA5DBC9E986980A42A7172FBB0DDF66D82A85CEA529617292C\ +118FBDB112AA2B13BE6F924C5AED18CB0122990DCF9A358AF23DEEB00F8F3686\ +65AA1C293AC106A78AF14E887A29663CF30B7D7367675EE8C7B931F678B0AEA8\ +A024056B660223DEA8E7BC540C3AB5CAC2E287361C6F64B4CFE0B419E4D1E2BA\ +53D213:\ +95E762D269AD03E7547E9411B7D7042CF8C1A3268956B9FDB9914747D398E1A8\ +E03DE764725C649F085DF46E7273B8DBE4FE50762DABA4115873B7DA65D35528\ +92E4E2D8FDBEEBF43F6E5AA1D6BB8985A783BACFE32268EC1792E01476DA742C\ +8259631B724B46ED5370DE32D359B75FCD6F8DC0F73A7E5B225EC61EC354108B\ +8F6C5DA2483C87A5A5DE4F7FC7CD295980FF3603AF1AA397D093B7C417C4B7D8\ +55F476:\ +05B2C73EC44F52D1B6CCBF6DC5205FD0D99EA7E919AFA289DB75A16646F41132\ +A98E693119F3EFBB6EAA32D167F1C56A2DA68E4D60F1AEAD2277210E6386D62F:\ +EE237737F78FA7484451FF6CEAB84A45 + +5D53348746D8D90E5C128BA57EF254A2228DCE02E015ED46AEA8AB7894E14948\ +9D846AB9E51E635EAFD7B104250ACDCDA5C32D5642CA3EF5E75770B0B42BBDE5\ +72D8038559FE2D6F6DA2ADD3D70DBE0F810719ED036F39C14FA65ADDA926AA50\ +86416B1D8D4FC5F761186F8351928E2313D8C51312FF344D8D1A1EA98422031F\ +65F7228BE47993FDC3EE93C898B97C8675098F8A4133B03A5F80FC05AA1CF230\ +AFCE5187:\ +453B7BB1036114B66DD0845CA657F997BE111A445338866D8EDDC2D4086C555A\ +81F120E8E2F6021B7C3EF9340182818F6864617DBA787D9E94763BF63CCCEB54\ +9D49597EAD5D2EEA390E9EDE0B5AAF14AF95518B86816B8B094A8DBB6E9616A7\ +96282700988104EC43E2FCFD4616231F71FF917719EF7CD266F29E5E0D9ADFE7\ +805B1915D6B3E6030EAEC4E2D51A8EC2375E8D64A20011ED599927AFCE084A62\ +68084C7A:\ +2A2F0E7030F4937B0DE2DD365EB7F8E62943E3F44445949C9908ED1D9E78ADD2\ +4282D752283C8DA0467E0298C7477477ED577C1F07F786FA08A3C15FF01FA7CB:\ +1DFBEFE2C5E73C0F35AC39022F2F5250 + +46BD56FBB3471158ACD7309FF08839DFE84E8386479C5CFB608AF838C8E322A6\ +8B7404454802FD2B9378A3B2CCBE947C1C30D141543F497E64FF1A84A14542F7\ +FD8D485A6BE1C49C3F25BFC9160A8D3592C262B92A6A036D29107E0BCC3C34EA\ +496F666D21B2A9B6FE4E0CF0B1A9FB1D384C0240317CA825423B532C3D69A4B5\ +5BC1642F1A2947140EF51632E4365C72E816EDE42D46F43C4049041BB7E69B65\ +25C8868E74:\ +3D2630B3E1100113592D45E788D3012306964C12C52C61814A83C5BE7C087D9D\ +106ACA726E7D3B95415BE9E07EFFEBE6948E168A6D7D313C491EF3B5C6165F99\ +84AB50775F65D6CFEEAE54E92370EAAAE9A540F214A8945C9539ED2E15779D2B\ +F753BEC0517DCC81E43B0625068A2BA489E20D7EF38556648E24A701115B9C11\ +A7AE831E2B7F358B1D72437B8648E679300F992C601BD7FE95400BB06BE53D07\ +C3AB51824C:\ +3F39B0D2ABD3E6EE17A458F794F5CBAA553E21C78E649509D686DD64650ACE15\ +44C98E6F11797E158873D73E96465FCBFA09B96048810CB7CFB7947B0D7CC75F:\ +33B29834B357AD1A82D8D505F61C4216 + +74CE7A8FC17AB2513D69FE4F947B40B806A37BB615F6667BABFE9C160CFB0154\ +B729B64A9944129766832B8DF8A6BBE5A67AA7B47554BFDF521EB0A460CB249D\ +DAB0812664E51D6F995C9B158380AAE9D14E3851E1A96BF893A789CDDE35D164\ +9F3188DBBB214D220F67EEC6F4FB71361EA89E7F83773028D5D44D21EF543A74\ +53CA31C9E4EEE68CE8A26C702CDDC1F8D4D5567ADC00B3DBD814F2E7E98BDD9D\ +B7F74EEC6E28:\ +BC3A241DD09F3DD74328200E16FC3F0E84F26129EEC2C43C7CB2E541DA356E3B\ +6801F0F7510A02F2B6F9F8706C3C439D27130F75B956FE76D894C3FA42586DA3\ +7A906A50232DA7222E41E5F2818A52C24CDC2AC5F7C10F95423B8DC361381D27\ +6C96A6491ED1EA10629779C670C37CF7AFB8B6D5DAB445FAD022A4B2DB6DCA78\ +7BB69FC91AC7E1C3631C1A5F8BA1AB6543E443B8A7A61987F98154CB8525963E\ +FE174229C0B7:\ +EC692882EDB011616639B023AEB8CB3EBBB16C2AC13F70523869E2E213BE895C\ +513FE5EAD9A79D0B1FCB7BB6D5F2102E01D5378D8C29F20A604D5765120BE800:\ +BE49D1C557728CDA79D2D0BE20D49172 + +0470E50512A34C1DF99283CF4D9184E89948DB203520E275F5A522D2391B95C8\ +A5B85F9F2C0EA567DA078BDA69AF104E7E8493CC7AA620DF29B95415D52EA9E5\ +D94A3DDE13AAC17CC96639F0C5233D316DF656504EC796DB0E61AE8F694C6BBA\ +9E2A07A42F6A1B345E427BA441058BD004DD41C34C6387082442E6A52DC50C3B\ +A8172CFA293BD49F64EE4371DFB1EDDCF1ADA26111060EC107F83FBF80E8463F\ +B10B4450510B32:\ +C8DAD6A72DA01261E456D96FD701EA8BF9087E8759A529A2B8882EE275CA6997\ +CCC0ED7BF7F767960C003216AF788813E68CBD2F730BC223DF5B497016D19220\ +D4986C2FC8A1D24EDCE97332D3B7484143273615B47E8FDFE6B35D35905B9507\ +B59DCD18132895DCCC17694B2FDF23B770D342A49B3FCAE929450726A1E138BD\ +723CCCB53FD527F834F09C48AFE8B8BBAB5C35A74FFEC17DF55C5E2BDF3BE3B7\ +9C0339FA6E62DE:\ +287A4E69F4D9A76282BAE339E22B2638A46D94631D6432AC5A89F656405654BD\ +24662222BC177F58308FAFB5E764ADDC672AE1158602E814BD2B08F1FC3E36E7:\ +B9B12832D12D717517F258C1BE5690A2 + +7D03B4D4167C04FF8F41DD5976522F39A2338BF367BCBBC5682DFD0437070799\ +93F67571DCD86B4487FE88FFA978ECCFEAED8E7A549A5969F51D9B67926AE351\ +EA9DCB942F0D5295C577D0462496EE8E1F1205054AF3107ACEA7039B7396BF02\ +5307230F71B78C3BD5240A1A7AC5C6C92979A4BE78E709BCE228A4B59D72F134\ +8E8919896BFEAF6F8359F410D0FD1B5218E112A68884E1697C413166E70DF66A\ +3A40BD15894C877D:\ +F1434086EF7D7CB877B4C499A6081AFEE00274B2BF745EDB5567684A1E52420E\ +DDF7708999D62C34E6EA693CF5288978A87D5957A3759A26D527E8DF0DAC70F1\ +AC497F14ABAD4FD0E7ACC1BBB52560402DF9B314C99C938CAB4AEB85BF8BF399\ +62B0185673DED1F8AFF394C0A813A00FC8DD8092E27D1F71AF641F65DFFA069E\ +BD9D07FDFDCC96858182BC3EA94659FE63C8170839612BD836CBACB74635357A\ +5C75B30F8F68FED1:\ +605AB0EA23DA5AC1C0686368934E5A07D7B39D6621D6BB0062070FF61EFE1814\ +C64565999EAFFA72EDEF733D1CB2DDD36FA08B27F56EEADD164261B2B3EE559E:\ +50B23C029B17A5EF9E6E366A2051F1AD + +EDB1F511F0D4487A3E84915CBD97A0B40C0597A4F80CE26ECB19D0F75927AD01\ +C481901BFAF88B12C0830F34A546DB1EE5ABA985BCFA079CF70FEF61E826596C\ +65D4CF2E8ECBC2E9CBCFDB503C17DA79484EBD00AEB306F5F42B3CA0FEB8E6B7\ +79EA7DB842AC7E904C4DA16E199E09379F770CFB69B216AE8203B1733EC0EEE0\ +410C9D0B72B2C1206042A7F08DB2FABA2675C65D150B0E7A3884AD2C75AD8578\ +00F6E5B5348AD45D86:\ +048BDEA47D82862F3D18F81FFBAB7C67AB7E2DFCA8E0F7B46661D51050DB848C\ +0CC464092B496A9A448BEEDB4C07612D89E5274317064ACEF9E9F1DA36189E0A\ +08EB088629312850F6473208220142E126DEAB100E882FA7E989DD9039E73778\ +4C9E368B132D96EAF9D53DAF9D76E9ED44784FD47652FF640E1EA9141D723485\ +4239CAEC35BADA36CC900BB6CFC829ECAF563EE211BA534C47FD99C0A40CA405\ +8206063A961954156B:\ +9F67FD638AAC6B5B0E9A64F71447959C3ABA12A4B5008B82906E5659E15DC4EE\ +0903D42010BF1B3ED1B37D0DEE33C1A30234D70C63F62CBBD00048135160C920:\ +8E92FF08F492B43B205925F59340CE8C + +7FC1F05C2DC5317B325ED9B03F5B335BEE640D04B8AF3EF3F8016D97E4A20B43\ +171B1FB4F16EB06F58548B7D2B41F57B7EC1A0C681D431E436226B34ED0C6112\ +331C85080FFB631E949CC724E7B80E8DBEC711355520316A91D549F251384DCF\ +E367C568C70675C32D858E4199377487F20FD8C3EABF47A5978C5D25D317D6E6\ +DA721E732522F7FC98B8BD923E8B5262B52F4617EF5382741A3AEECED3D8CB80\ +6B81D578C932EB00D905:\ +B72A32BC2036AD390C2B72634479D9005B7CA3B91B5CAE0E7EAD8A7B8BAE28FB\ +837948F5170FF5BF10FA60B10F95EDD9FB4CB298DC4390534DC98DAB29FFCDD8\ +576A71E53BCD14D9E4D27E5E658A9D2AB193E26C9A0C2640FEF334DCEB24DF28\ +86EB253279FD196427AEB4859507A273AE728BC6FD095819DEBB7E4B26AB5EE0\ +7397EA1203BC36CCF46ED3C753E07548F6E0CE04E4082B21079EDA5D47AE1A9E\ +A0686866DB72A5D49901:\ +C9964226EF7B07ABAD30CA20D28D02D126A465DC8F99CB433CDAE7AFA7C97400\ +8556A34CA4AEFE35E5B23B047CE13EC038F0F381B8CFA1609B76682DF39B0C48:\ +8096E3A29B150D4D1086E72B6C68E677 + +074DEDF1EBF0CDF27B52AEAEB9192DE48A00B9F54046E49E253ED5670F9030B0\ +B6FC048DE0481079FD90FDD11C363DCD0FACD833A273520D81CFA1F11B5C07CB\ +3BF10F533AF2BF843CE0C6F98C7475CCA6BA790823E590D26E1934B5720A7F00\ +D9870FC73E05D4B1B80AEEB27F3CD2DC2AA7A2DCBEF69F40E348510C303BF0FD\ +99D2C06182642402203C327C86F18A432D0B1DD9D6A7778E8C9DC7DD5A178DA0\ +226EDF0A455F71124B3921:\ +AB1C8CFCB9459DBD044BCADBFC6ACDDFE6DBDB4F2E832A005B7E49576C1EB20C\ +37E340ECFC8D1131C6B2B5B80B398DC102EF780F9F75022B24F3E88E4B152FAF\ +49AF856535AD9C398EBC9C7DC3ECFA4C4A97A68069ACA3A6D7AC83B763F6B2F9\ +D3656EA4CCAF8F0BB3A37C19641741A4DF9F8898D1BB695234C53CF14BA554AF\ +E2857BE516DD22DBD106BBDF694A5F6C223AB1731BC12816F22FF985CB4914FC\ +0DCC3D59430220F1086022:\ +78C7366AB150CB962A22D34669DA30C58669A260642838BE5DA0732C49286623\ +24747426544369FC00FAE335C0A3110EE1E0B98B9F760897E7DC27341B69C6B1:\ +C4E3F365345CE9E167ECED4451F53D21 + +72E4138B27F098EA58B50569136A084DD9B1E10B4D2F5CC14823FBF5A9A64F0A\ +1E4D67E330811D7B3FDB0562B71CC70E31246434A9D4492C23860D2D3BD53FB0\ +C8B63ACCCDB999FCE782BD5C5862E81258870E823335F83AFB016F83365F14C0\ +D14E84EE89E69BD3D21923020B2D7BE8E0700F9F625DF4E5038781CCA5D1B16E\ +377017A06F7E1EB2E90C8AF51C6B0EA35600C49E57755363A60799624212AD15\ +70A799D2CEFDB6606E00BE7F:\ +446CCD9503D8DA3FC85A9A11AD73F70E29EC72612A518D30F62A3BEF3889CDB2\ +A468FC3629066D7AFE744C7FF2FB397DD150688C6EEFD828E5957517F9F1915C\ +672FE269E29A327C913B06240E2DAB6E73387E8DCC807F16B60BEEEA4DADF03F\ +837D5F40CC0BFAB2532F4D1980F0C2CEF54B4E417E36C79EE3AC2B7991151CA8\ +63989FDF8A1155DAF71A25C813F7068A66D4BA76CF0BF3BC4F1DDBCD8C2183D7\ +471905DAEB1A6B1D03CC50C2:\ +9C739944C94CD19E9AFB1B57257DA371857A1732CF22E4C043C8122F64A1DC17\ +BBD92B4E35E9CD9C666DCF634CE8F99217B8CA2A8EAEF50808923A642600F63F:\ +1B5FA8118184A055DB35491464856482 + +6450D405125780750A620B21E5F321C3135F0854035210D41D6097EC8D6400B5\ +43F588EB330AF977033DB532663B3EE83C3CE2249574494BBB6CC429EBD4B5B2\ +E498D94FEA58B860A0680BFE7034DC73DC74B595A6D5730666E8EF8140CF5CE4\ +EDB11A496EE6E84C3850FE132C36734A38DF8437A689AB87191C487D4C75002E\ +0D83301249A07DFB3A098364054C74FBBA7D875823B2A4BF7370466C1A6E0CAF\ +01918F3D6DB5E0FC923EE14310:\ +C608A2A5C9EE3324CF0F1508FDA3BC092D358CE21A3564E25AA3E455A9523BFE\ +7CCE8472CEED2CC94CC735544486551C665DAB777E5829D25266D339808386E5\ +7BA78EF5AB04EED9135ABFEF4AAA70661B48F6F0074405333DC19F936DF26E93\ +38A817FD55E2EF34071E01C0B96307962469EDA07974958D1570693D6254BC46\ +5511FEABB7D6223D45654BE5A3CE479E3BFF8E5EC9DE3931E894B039FA220B8D\ +E2DE3974479A7F621977CE7999:\ +6702A191E32F70E4912EDD6A68E411F88ED6967EF800E84915102899A3D096D3\ +A0CBC37A99A106B1B3C1C8AC946CF578AA638164264573085972517AB9F5AAC5:\ +C4A9288CE919D007E1823C446A04B33E + +EA3127AB21E2A44AF08AFCFAF6624A78080103314A48D59A309860D072B41511\ +FE993C67878E7566D2AE66D326D8F53B45DD7019744087D2E1853DBFE006281D\ +5B780D9747F0BBD9EE7A4FA2FA72C4F03B01CFDAFA3EC9A4777AF4127BB01A41\ +C12F851D1077135353EE80BDAEE96FE3C183271BD38A2FD0C6EBB210AF1C99E0\ +3E45B1417D18A3F8AD4BDF8BA03A707B0566121EEEC5C10B319B732B9B2421EB\ +6839F9ECF897478D28F4F6A79C79:\ +F7DDD97DAD526A8A8F75E9DD438791F088A6961FAF8E85FE9CB4B29E95E0F095\ +06E38258121B260874849C51E8939E2E630662B28EBBC379C56103882EAEC5FC\ +FA957B883CE9FE51A4AD930A5530A423CF8130989678D74E6CD0AC0F8E3CE67C\ +F639D56ACB0CA7A865C434A754EE663E3024E0565A3211DCDB5771A046670730\ +D2523D9B1FC39171515EAD97FC886B4C6D46C7E3DDB689E3BE470A21A80D0DF6\ +EF9D79555E1A877F6247EDB6F295:\ +2E21BD2FCD60D211F89A4FBDCBFB162C3B95F364B7F7FD7590F32C457EBAF1CE\ +CCE5B1AB9EB7A1BDFE705DBE8B5EF26AA3DEF4935D05B7CA35AFA55BC28F3C24:\ +82ADA377171705CBAD75FCB8F0E65D35 + +E8B2535D6A37682648469906AC881413CBA7D49BE0FC6F74EAE685ACE9677119\ +9941ED52DE67F69FBA34DB74D61D75063C4863C16310457164CB881ACC1CC566\ +71EEA602191513416F7B7C3072816EF31FEF7EAF2F7E82C61DE9A5940B94AFBA\ +33838D138F367F5C7B136370BCCE4C760D6E24BDB25B43AB4F3C3EA9683C9A9E\ +978891139924200437551A0F10F15240816DA6B222E309B80C6A4F5E3F61ECD5\ +0B36D4FB99221DB0302C153427AA51:\ +61265D8C6FCECD326A4F76A6768656523FB32068C5BE1FDA44F14C225EA50C7B\ +2180C470832CF8E0B05F698A700B7DBE93C79450DF3F69E2575AA6BE5A379258\ +50951D30AC621BBCCD898CB05E9860F5A05F23C3685C84470B7442BE7E6DF0C1\ +13E9D2A81C7E205491407AFF681FC57E3E03F6B865266938F943BBD4598554CB\ +5447BB577090B5551893FE99B5CBAAC814624A993041ECF5A451BD6A9C33C95B\ +FBF101C08190FA7D8106AA03B8ACE1:\ +C66D330C5436E86F4B16270736CB78241C201241EDC7EB5913716496A42BA4EB\ +E270AED737CFFA5F2C8CBBF9875DCEA4169284A412CF62896CF388013E36C79B:\ +800BFB1F8F673ABAE7178E94185F209C + +440AF99105B73ACA853DE9D61FBC738D5A9C7906B2E78C2381853E84F6BEBB26\ +C0DB3507C9FDC0465177A57C0161E90BA98F274EAB79116D1391822E367D59ED\ +447FF0D55A6A5FAC2DA9FD31F1C5E14029E0600600BE2D0BC0B1B02CE6D21624\ +09B44606CCDE909C2215BF46C9FC5BDD089B3238FFD522AC86B51389FC327870\ +471512F08D4911B80B521A6EE735F7EEDEECEBDFAA6E68C12598A36CE0EA2C36\ +853164DAF6545786B05E471E9E1E44C7:\ +F4E9C2DDCD58BFA0D71898E731DB623F9D4947B11D02563D8943803A4774D77F\ +A08F021AE17806CCB1923857A4D323C8CFBE5DEB36F66164EB66D07C5D3ECA9D\ +0860C3E89B7E1BEF59D976E4C0D90CD535EAFB00EDDEE7C393F3DFE5A79FF2BC\ +7B12879F4015A456FE416AE1CA62816856E50E79A760457254E3729D65784CAE\ +9623E97D5DC609B95E43497A59EAEBEA2F6AC83647935101CB791517A2171766\ +D4FEDA925505744A96BAF0527FD3D774:\ +C7C3824E1B8364D2DB2DC019957BB5E5CB65099A2C91730029DB0F33FAD5A989\ +CCF80612685563C9F4C8F5D1075B2D54DB58679A7B0DAE823F2E2170846374E4:\ +A46A9D0618A4666318C58CCBD42F6EC6 + +BEA38F61B4F285DBC6559D06B81E1F9401386F1BD0C96943B5C251012B648705\ +0ED43BE77FC95613449DAC4530E33A6DCC1D4AF1DFDEE7066533EDDF5B0F5181\ +AF0394FC640D3CEF6A6F2298EB8F48FF237105453693DCD960E3283602E1ABAA\ +64EB9523B53CBC8AEA28C09A4B55B9EEC4575D3F9F0998799F10FDE67C4B2921\ +2137627C988DA9D0878E9C0265F85E60E9946D3EAB9A973132506ACA6F57CD1A\ +AD563711D169CEE234B4995EB0BCCF065F:\ +242212A8F250C8770CA394EAF117FBF3F3581C86D23C00D8399638D9714D1428\ +5389D22230A2242902E8F9C654751857B1B1541C78DD9B3B2B2631FFD97DC179\ +A4DE3CFD8F2279C94ED1F8856016FC735606CFF8321494302DE8AAE0F0D7557D\ +011BB10CB781F8B101732E3BEC2822A20007C4856FD83017C562731782503BCB\ +9CAB5A393D892529192BDD409CC937FFAE058613080F7323413B911DCE832871\ +71B2401A9B34E6A1244E48B810623FA3A0:\ +2D021A692A6F036D2C373D80ECE5D2A3B73B2D66FAFB5B0A6B587C098FA321F0\ +7BD02F3F30584832093F0DC7A4073B55597F5C8F450360A1CC9CC6EE39788B6D:\ +EFB93BA156AEBFBD1D73ED80B110B52C + +91BFA5CBFD3696A51BEB86EA4AF4751E5D9F240CA3F45B247EE805BB380D264C\ +B350C7B72075930F0C3163F329D3EC42D046BB8713ED9522BD71D11F51117E61\ +670B6FE73C7D960C21DC63D144E7B790B67DD5690082CAE7750D59CF630A9C90\ +85BEC93DF7F7A14BD5A46E4F09E9BF73045D1BCA8BA676C8DE8C3E5148CE20DE\ +39FE4831A7C1FFA69CF6D7B2EE1413B5B8902316358435458BF7561CD7508CEF\ +9DEF25EA833491590419EAE766A90271C313:\ +F5D4B54EEA1F2524082BCB8284B588633CFC26D565B68AC2B5394E17DEC065D6\ +7EAC580F8E88720D470331B09D176559C032CB06A6A3C1D408B2ABFBB3C5C50C\ +E4FB2C142A62A63EE12C9F83B184E273520C91C77F9A4963F692DF477E920837\ +0C77E0C7B805271D08595C6A7CC080FE7767776D0614E2DCA49763783384F2D4\ +E70BB29C32140F04B9EFE8E7323E7441BBEC9262A9E3726BF0D76F6B3163B7E5\ +2C593E4560195465F4B39063F64C50FE782A:\ +4450F0026B43D66B3A815B3FD0A0A2DF6D1D980C08F0D8CA20B05C57A8291ED7\ +19898A7AE598B030FC166A4987F9E3600E45A6433CACB584DE54A15CED22DAAB:\ +EE277CD358D228D0F1A17638A3B5CB15 + +C7FAFD52C448D1B4268F834BC1CDECC5DA0DEAE4C30D470DFF9C7927A1A9E672\ +D3A7B97F2478C41DED153ACA0F477F6567C6A645AAD73EE50A01532F2D372124\ +B128FB75AFACC8E9A750728440220ED567B25E53466A6544C94B843FBB7C65F1\ +D8CAA66DDC8C6F26D61EC241D852381D2CAD9E0BA2D819A465B99C67BA275EB7\ +3A23C273E9FAD16C28629D89C4D8DE889A79BD4313DAE3BA6821C12188C2179F\ +087231E5281761E83115F55F6B60D96E2690CA:\ +94157A810F5B2EBA661046DD944EA27D9323F92818D8DC50DC94FD4F49C5C756\ +68FE433675A949128543CE5C3F40984C2A3A2171B0149751A9A577440A49D014\ +E2D6EA21210C19117A6C82997859C9B0EF56FD213B29ABC4B19D4A7E3D5228C8\ +AC14BD2110C6C435E0EFCE7551EF8CFD12D1B3660179B3F06D29908F2960E2E1\ +EAB8E9206B302D13CDD6ED99F6DA45365A74E478231ADD6AD026DBFCD9BCCC20\ +C8C95F92602D2AAF6DC42762C9A4CA834064CD:\ +5E5A8C394CE4BAFC5105AF3C3261C627ACC1FE43C0B237FD9806EACD0AB5079E\ +5EA69CB0D7D9DCA748E857D08AAC6BB08E64E39A9C0B89360FC9A006561BFF07:\ +3F8315ED1166CFC4C949D80C4C877B45 + +AE1AC26A91DFF93B4C079BD4E5E67AD33006172B9E01F1CD255B1300B09FAF6D\ +B44E3840986DB22E153B53CC3413B4BB01B945984B45059CF438AE11A6A54788\ +AF9B5FE3CB8F4C8A3C57E0E819F99225C2D8F4AD6263AD5A72F67A7B3551935F\ +F4BBA49841E92DF509BB2F34E67DA9C0B80DE3B0C3840DAF5C285758D0431875\ +AE25F6BFA24C957AE40B10972B966FCAAE32ABE91F9EBBF738F5D677A4CCA8A9\ +B1C420986098C9D0B48129BE01EA445EC2533943:\ +2876F104219955D951AC2320D2010877DC9C4202A38D6A9087C711A77CE84EBD\ +EA9719854D3B784343BE2A77D3D154879027F122FB41B8501AB4069BD1E13B59\ +03A9AFE82878FA8CC61048CEFC5103FE3BCD0C76A0E854646110BA35239E5C6C\ +34A45BC03F651131B831E119EBF846460D1F2E5754AF08AC9571A3D6FBB2C82B\ +5BDEA8A9A3C2FB9DEB4F8387595B5D6A4BD1A7122CD5CF058A80AA912B191FA1\ +0CC0CE6B69B6A7A2A8E7630F984E313F82D3F8E0:\ +233AF5A53B84497860C3A625F98B832F80347C03D53AB377CEDE75F9CBD8AEE5\ +7377A5E62E7C03F5D454B0337518AA1C8661CD9C96973A6F535232FE57AF0CE0:\ +1477D308F9F6F17E3840B5E23541D1DD + +407154D63304014D9F5CB425F13C5FAFEBBCE80918AD24D749E696330E3DB8D0\ +7B0D04ADFD67913BECC7B8843B0AD8ECA1EE7246A4811DD27E15B42776883675\ +53083DEDCBE550132A3CC16A1D088DCD5A8479EEDF25EB3C551569E73107F7CF\ +85E4F151877F22A85EB430FC0BC31EF2F06302CBD8B77B7DD724C9E449A907FE\ +5703551B6D4CE0042D53FF94CA7C7E747817BE50380E1785F075A5A6A702E6B6\ +B1682CC34FA475452358BFFD614DD8DA37EE7031AD:\ +03BD1AC569325096F5EEF5D3114FBFA770E9EB84B5A2CE314F81595152474E59\ +F1C235C0BD3309CB720D6707B90E2170719A525BD69A2E9D0409BA49019B435F\ +D46F42667F6D97A32A094C5AF984FAE19BE6909718099F98D8B01F937AF0FDD4\ +11FE19048B7F703EFEB4B5A51B0B023150B0CDD8B6B0B91DEF1FDF526FC8BF3F\ +B3BBE41DE16803935E45FCE9AC3E77F9980AB2031F40111DF44D8B4D8E8A9B09\ +18F84D8DB8F370B739A55E45F48C41666C6EB71F37:\ +B4003CDB89D9B78953A5F9CE584698B7F60D48F35A528AB607E7B3374EC8F358\ +9DEB32877E6AB60B7214E11A448B82E1C88ABE8137E4085DAC2F1C80B58458F5:\ +E37419CD5E7296D0A960BC833592B15D + +EBA6C6B0E9A3754972CFBDEF03046F87722C8CEF5712B10AEF2EEAD6AB01C92A\ +0074F2B37555E30D5FFD206BD1D85A810D26370D66494CA4DB339019A70F330B\ +228E06C310BE5B0A108ED70C71C7471ABB61A042E0014B41059FF86C2A2D7AB0\ +A5E978F9E1B1A0431B30BB27D1043BCB69810806D9558635B52B26DD915D9C99\ +0540DF2C5C6DD2FDF79652F509EB7CB22E9FE6BEFF80710EC013B7914DCBCA78\ +256DEA744BC6BF23351B8831E3E65D24F365C8276A68:\ +6D909A2AF702E986561209B48D684FEB8E8F182B196CC021EAF6C876874813F1\ +4C9755C4BF7E7D30A8CCDB76707B8D6AE236D974493EF2C0131E70E73AFD8112\ +55F319CDFD6B3E0C054F8340E18504EC94B42C6BA48927C80E8182A9E5D9E3F4\ +0822C71EEC43D209DDA15BBF4F7C2E880AC5044A41CCA11F52DF8E24671774A2\ +2A285E7915F063AF189CB90EF0845EE1B0C6C04E636CF0F6E85F0875E858BC4D\ +6810DCAA9236AE75EF83296063E7D4350F5C54EE694C:\ +19E6976CDA3657FD7B341388DE6EB2FE4CAD36489B55C26FEE2E854FA5803199\ +42C3D6EC2D7B8E998716FAA60539B5B08FB9B35105FF9D304641131844420711:\ +896A1A4A3F825C802B88D5A5DB5BFEF9 + +CA50890D0642170FB9EBE4C91598F52E43F62F4D9F3D65A26500D77B0DE07A19\ +D5856E746158C68702DC10C252C746A37A995DECA63B2C84F946117B45F49698\ +F355A110DAAD751EC2460C67DCE33A38E759D106B88374A6980FD3E06B4C5AAD\ +694900B11D43D2EA9CDB19561048471D480C3B62E8CC6365D1EDC65561A68EEB\ +01FD4394ED61F3E6C9283072B95629B9529DF7E6F2D98D35B49A7F5AA8564E37\ +66B25DC64383FC631404E05B94B0D39365CE1D44DD8F26:\ +A521CCD850FCA9E3A079127F4D4772170F517711574E9EE0283D5A6B329AC5DC\ +1D61971888B5A246BF223006CD8BF1826F6C9209EA7322F0F6EE33053EBD1AF6\ +97E4C5A30E05B4BF521086A91DD12846D2713CC8BE767B28E24D2D72C1F6E2A7\ +7A153285684D94EDAFB68B3855719FF00E3D393BC72CDDF8931AB96DB1E2BE2C\ +0AD0316D15F5EDA96DB35E1F4C0B1165047DF84E0B53A567CBEA98612F1747D1\ +6A6E170CCAC0906A5BF669A58B08CD3E62229A3C0064AB:\ +1C1911B5B6D11BA6D1B1D2B49DBA15CEB7102C2F2DED6A8FB6BE6E9F78AE31F9\ +70F080072B1E17ADECFAB5DA1433D72B9E0D12555929272AFFEBCD9D42857342:\ +5B6CF655605C126743C49F70A7686CE5 + +C06142F18A1AB96411B2CDE62F6D1815F0590F4E0DB928CE610DA0C2120B6151\ +8EEB6BDAD0C0CDCEADA0DBC8CBF280E8DB1C7CA40FD32436CCF700DC2A60E4E9\ +9F17E645E5B83AC795C7F2630EE22F2391640C67CC55183150CBE6E1515CDD4D\ +FD963C77BD4B076448A70BAA952927AA4A3160BE5AE41168D81941BFE19101BD\ +BEE24218B024D9A4E70FC204A1248F71B79E7D3B6935E2015A69FC09B291303E\ +4DA7E29C719644CF096DFAE7E86A1363F287503193D6596C:\ +8038EA8B31C83AE5344790734CBC6BC39F924C440E6B8BE4A44DD58D0EAA7BFA\ +DC283A6E802A05268CD3E52963AFB170B487BCD6C894F27655985CFD830E403B\ +818B6A7834D5C58997A0431F6F83C95981EDF1801F6CDAADC06E1DFF45CEE491\ +7BB58D1771FACA8B67EEAB2CD720E17B2C3D604A14850B18808B326833937B9C\ +A167C9FC35E5445C733E50FB2922F74C7132E54F9FF0ACEE973DCC3FC7AAEF66\ +2D2AFDA197112B9537A88D8A91298B552F4974837FDFB66D:\ +8EEAF603495BE33935430A0DB5E17D4BEA3E203DC90C54A6EBFAC5280EF4378A\ +FA0B42545FEB5FA38C40CAC5FFD6CAFF2AF7BC59F314AEA5B036D35E34F8123A:\ +60CA599121E8D4581F53B105A4C84B84 + +A2A6833D67884163B1BC4ACE349A201B0A6FBA76E30A6739DF79B399A54921B5\ +29BAB2654F29416E0FC55C8AE1B5B4A5083A87CA787F64B66DA424E879A5AADB\ +3882696FB9A03205AD2CFA80EEE2267C5023773E6E7A53E00ACBEFEADC9998CD\ +8D969D468D625C93FF57E5CBF00EA4AADAE1B8043F09F89AF2A9A478AECF162F\ +978139BB65AA73EE98D6DAD0C9D408760996E06BCD35147D89D87349BFF281E3\ +57684991BFCAD240D52111D9938E7BAA6D7B715ABE3F0EC47E:\ +FBA3835619C4E134A726891D95D664968AD65D4CA0C29CBFFB9B215D34D231A6\ +3BBAB20360BDE92FD88BABA8F0C97965DFA8E22A82685648CB77076C8111ECF5\ +BE98A75D060227305680F4DC7EBCD1708A1656A71B84014C7EC4EFA4F15A920D\ +3DD98A28898B7A9C7502AD78D45C2456EDDA2E8DFB1CAC3D4F0AF4A9912A6AC0\ +BF2619D82F9486FC8EDED6ADFA98BCA157E2D2C7ED9A4A342EBBA6536F079883\ +59AC27C29ED114C2BBDD695A8B64B3371C15A38DA9269869C3:\ +D800DF0DE1C35D66FF664BD96A411073B91CB9DDB69066CA1526A7AC75C1B115\ +E113B676FC647D18C393498D5ECCAF0DE6C2E47E40850921B8573CA6E8EC729E:\ +E745D3E0BC6FA789934944B88DC1F119 + +48982F039051E4BDE96D9D1344606A5ADD0CE02909632CABE2086FE832067CF9\ +A399BC333FE6CC7EC4F202D88D74C8E0AE52796FE1D32F546BD8B491607FBF0E\ +F6522DA1F261DADD337C9A15D29C6DB12B90035629FF4CE69C3AD8E8248142DD\ +F7BB1413132419C67B4835DCF6A0628A4AC6ABBD888C2C74A1F6EA4B57151387\ +33850CC7D5BF7F801AA8DC3D8ED1CBCFCC0ECDA1846533BAE13B6D20092F04B2\ +B2CB136CF968EAE4C4D8CBA1D53C8A6542E25E386B89BDA3ED42:\ +0B7DE8410E19DC8E15E7062A3D3D5C00AFF28173C073A72E989DF723505CF53D\ +E68D4B6A19D1F1B76B729D65DA274DAC8F7308E8EE7174DB85581D5BAB09A5BB\ +67809F99D07677F63FDEE0892193AD4C966DF08386B75FF819CC8AFFE0A02B22\ +26C04E5282D3998D2F7ED89B65F8D18667D3E4E17FA3F81E101836F8E696B987\ +FE91B81085454A27DB7524F792F1C07C7D2F1AD7BA06E8F60D99ED869723B69C\ +1A681B8EE00AAAA4B65E2A8AB724FEA98F30C8C88979FDDC0FF5:\ +0F5DFCBC3C722B1A770EF88883D997B9F1BF3D146E68345A0E28F8BE98199696\ +BD4A6FAE972E2DA9A60897F5DBA6721B276E3255777892D3D8DF8BA1914170E5:\ +FAB5694142CA9BB313090798147371FD + +7CF9CCE24D50A388C3B5B171F6508FA61E025A8504D55B8624C7CCCE3E2CA912\ +5247CF690B2BF388C36B5386979BD10E142B889AFD9A531EB16D88BF767FD083\ +7F7D71993498968F64820FBCFB28FCA13D6E5C1ED4AC4DA0ED1F6AB74E1308B4\ +7038DCD39A8DA33F15377E857D53429328D222F2D0325F20DC1CEFC3DF4E3F7E\ +456BF5C05897C70E33AAA4A918B44F2B02FF0065C845A3742354A25F492C651E\ +65BD2ADA8298FB85927E334C15DA3B51AEBA97F5CD332E32A26B79:\ +E55D0392687D295CF444AC734E7035DF1F99A679203810E0097CECC64E3A400D\ +0FBDEC877F8E8FE8E4160BAE15CB209B7EFC66406541424FA595C5E500F49EBC\ +C98941AC4B9D8CC41547252134177B8884A8D885210E886B2C942BFC9E54A3F3\ +FCBA4BCFF943AA27C565A0C9C3764281B847DEE305981608FC59FB6C596BCCC4\ +A99D4F872DEBA4DB4AB196635E7DFF57132691816D8CC936F13125444DDDCEF1\ +17679461BE1D3E3FD4923125CD2485BAE422EBA40C163C375B4C43:\ +01AB5EB282CABD0531560F5F5EE246FA9F90E26CB83029580BA49A24C9EE66BA\ +BA0305B536B2553E2F18B72CF0D2C94FB27216D1B570B14EE1B2317C2EEFBB35:\ +60CB3EFBFF62048EA13C465C0AA733DA + +2F99F7174171E5CF558758FE4A13C250F26036F4195A487DDE9518BB0774D500\ +9FE35359D1C15350A167C18B0888BB1BB776951C149C0848D973993375031D64\ +601DD0896E50097EE68C4D648B75C587E57B7B8BE8D8C02F44AFCECD91101C97\ +2A2C151D62FD715A53A732873F6969051AA80DB097EAC069F2CBF8454C01E0E0\ +4D996757DEBCEA1C4960F73DA472DC07B6B72F602B368C17DE8D83705DE1C948\ +B5281AC2FBF147BB12F3F0699BDDD873C046152F4450864F99B82F4F:\ +77A1EE11A9AE1BA68F5826591BC9C8D3690FBD7B2D997236368DCC7CF0C4500E\ +B1EEB71F1AD354EEA126F3DEE002268878F4738F6F4468D237911F5840E6DD4C\ +00DA1F2724E9BD4138ADCB9BF588BA8CE53617C8C08609D24716C543CF519AB1\ +446D05F3568CAE99685A833526C4B78ED55F4EE556F5844A17E020AF7F4B5351\ +AB65668BE7D1E46CA492A0C2CE46CA6EF302417DEA2D342CF12B390CB2753B8B\ +E4DC233483DD57570EDD36F2C3CC42425F3CE84D8A26CBF351A867AE:\ +E0E260BF128B586F8E49F7511E6ED886655BE3DACB5F6047110CD77EAA2BE2B7\ +82D53734407AB5250E276AD6721F13C3BF21B3EA2BF56F6A6ED13ED4AFF473DF:\ +18D62303ED5F3DD7825145EC928BBD5D + +BE6683241F0A0D16EE28870D7B9B53EAE2CE81428282DB940FA25F5A97156408\ +AAF0B9CC17F4008BFCDD15ED3605040BDD9183D41C660937E7B37AF283C6AD68\ +4EC3F3476E1772EAEADEAA68599323CEE4E8CB9238ECA5F1AEF151064CD0904F\ +5CDA1A9B55DC99553EF0227F916F957A1DB95BBAB9C8963327810F4B15D600A9\ +D8B49A0F12769D294FBB233A4CF7EF85F08631E144A247786271BBA0A07A5004\ +732DF666C8554960FF11E3AFFA060016224D3EBCEDF1E653C6B98F6594:\ +7E928D0727144C562E14A0629E7B7C9BF59B81951E30612962EA2EFF48CC1778\ +F4FE9F494703EE48545BEAB021E22037D0DACD9C95E51384DAF38EF63E4F741F\ +D8BB9650648100ED0467464281569A90FA7DAAB4930F0A59201CCD80947F73BB\ +EC3D0CB42226BF3D4A0B2741B4CB6E6662B44F8183EA8B058604499D4EE86C0C\ +E7E92736F11E5F57B03DE4D73D7E4D635E5702946790B5F9290B77F14892204E\ +A8709DF528958353BBE8C7C8B048C61D6910E5838CA39E3CF854EFA67C:\ +0854EAFD42578C7200803C7BB75BF68887BE1DA526D8E9A936B5A4602EB94B3A\ +353DAC9F4891DEB8A36CA2AD870A909CDF71D9A29FBF23BB73F556A7D0787421:\ +C38A6EA283B7B63C5E3D5E0554134C62 + +72201853E4271966921887B74A3FAA2A7D69900E334BB552C56045A608788954\ +CB434B597D7A3A90B0E4F380631FC39B6B97F3B716305107EAA08D7C9B9FFFFD\ +9966E873E62AFD3333F7B3AB66BDA1B7088E38C0C0E595F03193434D6A503B08\ +3F6B5939BA1FFBED2CFE98D86C2499C2FB0A412BB623E7BC0C962D57940E84A5\ +CE5135245DD6D23C0EA7C32D2BFCE1B2368597AA73CFF806C477D14391D12247\ +AE6FA1D2517DDDDFE110A0C33234089482434E5D4480789108A565233A34:\ +C5E2845B7306C15C425127AD6FDD198BF09A9706BE52EB9F06EAEFAE2426E3A6\ +0DB79DF0B4A859BCC741D3A21596EE325E0AC904B7BCA67C2855A8022EC0C977\ +46A18CDA481033E80B462FF238F2A3BF1ACDA1A8AD89B1C7E3DBE100E9BE3044\ +AB7E2E4264C0C5244F597506B9EBF74E93E1A051C9166E4E833E7D1E8677224F\ +535A62121DE0235C3D5DDD2DCEA45C7FF0C640E33A5033A619B416CF085DBDF8\ +661B3E3AA14EF0C81C62DC9B7E7FB0B475874490274CC958051F49045053:\ +BA7F55327FA917BDD6F5A9678F69E90E4AC4B52B14D75263653DA305DE0D2FBD\ +968696418F95F5BD8000BDC39D86B8F7C13E982AE4D5B0C2A698B1882FB8479D:\ +1844F3A80ABC2D2DE330292CF921379A + +10AAD0F7DE6F8D658AFF5CC5162A71A0AD67250B7E2E6332826B7BA8928B1910\ +B6A6E238E8AA85925FA7D50F9E725AD9192D895DC4F6960CAD0E9D79A90C6744\ +A70DAD60D96B8C933925209698550E4B93A17247C601444F4BAAFDDD63414A04\ +3146C21BA6F09ECE597DE730922657BC0E01148911E7591547A33A111C4B7BB4\ +AC2A803B4B2CABAF98E60440E635FDFA8386A94D77AB9989DC2270DB9335C26B\ +D7692FF3674A8F973747AF449A9BC3CBF41D999CA4F7B0D3FAE10B2EF4977A:\ +CE081752A44548135672520C5B3C49812F359C4EB5CFD2D9C85377AB7CABF248\ +F514AD88F6C86B3312CFABDBF9B94B5E07D5E711B0B355B0F1565C639E8DE246\ +505AC67C4EFF42C0F3C52FECAD6D9556C074B9321C8677099AC5B9B97BD03A2D\ +F231B45EEBAE2443343E62675D3FF7FB66520C07DAB62C498F35DC229E0F8A9E\ +DFBCFDFEC844D7D45FE23ACFB70D7B592E8DA050BC5390A669FB7B0D31B8C968\ +89A50D9365771DA0B7C738E321596CD706062FDFCBDC1C8EBE1543DE8C1339:\ +00425181802B691CE6D1AADE6B9195CBADDF8443D60C9515920ECA0763790430\ +2C85382CCA53F6803F5B02DF03AEAA36E38848A2001B4FDAF706FFE4374C6D3F:\ +F3732079EE37D05203170631E634D7CA + +836FA61AF56B019F692DE12395BFFE9E1FE2D9469DD6969AE32ABBD024F8E959\ +EFAF934FE1E80FCF17264C950E03CDF1B9F654373F8D454064D8CBE61E596D16\ +1743966F42B9FBC9A9948DB37CB770476A7FE5655739EF1A894C17D9B6526D7B\ +E8EF1EC19EA175D8EB478650D71FA824BB31CE6E5B1F96778A4E2EE11FD555ED\ +843E7A95E284F231D566ECAB8AE21A0C30D9B89443F96960F2792B3611CD59B4\ +1F8F884A3B7A93B769300AE037D17FD1762A71A315A41AE2F5DFCDC9D3A99760:\ +685D83824AE8A5607A5AB864E215BD6355F29A81E683852BAF9994D2148E0D9E\ +8E8DD8CEE9439FB265C8F07C68C34304FE15EAF392805769ACBE78AFB1CE56CC\ +07403FE4C8166D7276B22311437CF06780688FE697E8C93360E8C848C21CB33B\ +F655CE1B9D68EE9FCCD81CFE926981D969E35869C65DCD57A81DC543886A774A\ +3AD9B1845B95DA3A0F5975120C72CD7F67BC5F268546AED3D5AD471DF26ABB46\ +4BE4A614039B85CB926D947208F1754CF652A466F09305C6DBF20DC4A05907AE:\ +99B1AD739FB6E0B0541404A43C619A50224C98758CA12739E6781930020A58E4\ +F2F6B0E6D1FF0829BC67273B92E61A03DF9973EAEEA178D2914F0E85CED2D0BA:\ +BC2F2357CA8BD1AAA4E5B5E474A4AD8B + +FFB0CA3E6521204EBF83B9532306778EEA543B61A62EBA98658A37C3AAB970EA\ +888703A80C98584BF8C5DAEC130C216426BD46AC6D27664F5F3A39795D029B74\ +8BF4D3F9677E37362854235097827EC220D016E051BC41FFD90A8FCEEB13005B\ +A2700F73703B1E45ECC50904660FDB9567C9BCFFC4EE9B2C17E6DDE2663D6CE9\ +97EE01CD7B0A0EEDD02E6E447A090106B0E3825914FFBC0186712EA4A1B6B40C\ +A3116ADB0A3671B0574DDAC03EBE119D09A1A9068947251A6607EA410FF7768B\ +BE:\ +D8041389DA35C6C12AB5CAA407D588EDF56E27556F8A56BA0FC046EFCD590CDD\ +8122408AEF8C93EBCEA7D805B03A9459A34D536287DCB176472AC0B266BCC08A\ +28747E5A3E9E436BC3B10022144621C813DB89BCB08314368EA480A469EA19B0\ +C7A633E7E09B4F265CFF66E4BB4C14642BC02CA540B83A11B76C593B1D089D11\ +8BE75C289D41BF98466D22BB7012E8164B88BE7A4C0F19F21734A4B73E7E1114\ +55AD6F05750D91486DDC8FDFFD4923AFF703A7769349A6F77A408428B7867291\ +0A:\ +0F9359119866CC79545EB83B4532B7F002AC00BFADD8ED35BB96A27430609D74\ +1BE214E10A6CE667E177732CCF5757E793CF0C6BD54C87FDD7EDBCCD74F3E47A:\ +C77842E2421FC96B28CA883E7E0ECEB5 + +F4D74CF1120BB7D9ADC3F92D0B08610060E2ECF6CE7DCD85B2D4C0413735FF3B\ +D8EFAD39575F6A7477D3A7DE3DF6216A3B9417240BB7FF7B7A32B7A1AC0E3F6D\ +97B91E9BF884FD685D5E4ABA081A7D3DA1AE7D20089DF77D72181A2C7E3500EF\ +226708AECEF8E1AC2B60CB2690F5B6FD2318AC4AF94432947D87C911FED3B5EF\ +62F5AE5170FA4507DA2F063FA76EFF0F4E158C5F3537E7192304EB1E40789110\ +C10535BEE49397238A27410F6C10C592CB89EA7165C7D5D43081D07D53A74144\ +4950:\ +C6F36FE628D05D8037744D1B567DE8FE7AD85C97E036B04D3B27573E31D8E1E6\ +C6E126540895394655F8F01010B4847E28DF5C66AF7F4D50624776F4CE08B142\ +0FC95A6D7637E696AAAD1BE671F21E961055BB2CAA38EA3BCA2BF0515C0F7F6D\ +4EFADA92ACDA1414E370FE8BDD4D1C26520B11256152640189AE5B1374462E53\ +1B321EC624A3E254B6D01301B7C25408F424183330E59E238220283BD12B5354\ +4439C4EC1870FE892B1426B772B32C2F1022BB5ECE2AA37E9E97D7BF4BE1F15E\ +7740:\ +938F609B68DFD173878D66849BD764F736F4C34EAA0244B75C2C37AC2ABA8772\ +6C00303EC3843D8518CF7172C3CB4D186249522BED23C53090CBDBC997C28A2A:\ +C8C31D8874F3EA57EF15236BF87E919E + +EB5535E6E264DF02DFF862853713A89021CE45358D74D95204D6D3D788C07539\ +F28EEBAFEAB7023D81A40443D8C1437B6645DA895244266C4F6FBECDEA6EF08D\ +796AB42D70A6D076872C9541A81E3D518F2750B8B47C896688B981F1AA310F16\ +B0E85FE1E9AD3D8437F7FD57866FF1A934BB7BBE828BBCED3DD18EA9B9AF10D5\ +2CE35150A846F6AFAA8B72050E3F2639E61A26C5D929259EB58B7D74212804E4\ +FEF834EB29A4242386CF6859F63C0B5843F7EF39C75D88D262497679D5539699\ +651573:\ +71B800BE49F9E28C49BAB3118DF5A4215018ABB16A18C572CD170B97A9ACA4E2\ +BA03DEFC27F97A9743207D16C3606FBBA15D913CD790EA5B3EC7B6E1B3B9EEF5\ +82FA3836F688A22101F49405037B510D802B2EB30E1659AFE3B90C603D78E87E\ +9F9E92934D76695D218AF314A275B06D61DA250140232284C0B9169F9C00BF0A\ +10AAB0B73AC53737BFBAD23FC2E0AB7F3E61956507D58119C2FF95DE273D2710\ +B2E2AFABB473787AF4A6F58A4A5A762ECC633125B33AD564B7B83D60B8D7E6A8\ +D5ADBF:\ +4A27EB0BA6D6EC801314612D49E6905B49FC924B76BADCA0710EF57797BB3EDB\ +3F9A8FBEDE894B6230AA154F7374130255B7F5AC37CFB8271392CA1B974B4300:\ +BF6EA44D46B4878547CC370354DEBFE3 + +559E1A0F4AFC9269AF81A8D063FFDB4E633448C20C195C3BA8408C38EA6CE6D9\ +E63B41881E817281A6301B3E41356B0D4948F1DA4B771AF140734F698773C974\ +21899F5DD7AD05D6A70239298A343B4717198E7C52276E942168752878AFE0D9\ +FA764B3D30D65FE88B7DAF67A41DAE960F2997C803A77AC5DB5540521EF1F4C0\ +87C450CD19A7AE9B7858F599C0E194B81517A5A3DBEF27761A68C7D2DF424D7B\ +16AAAC1586CB0EC363ED6FD00F5E7B3F903C79319733AA6C6EE8E9F341DA4AE9\ +C4621DEE:\ +7AF5A8748E6DA60C341DD9217B5631BE653F294EFB8EDC237FB0F27187FAE80B\ +09E647813A8DED7E4183647C339D650453EB69EC9A6192DFF2CE426672E236A4\ +CAFD33541690678106937DF3B3F8D932DD6B215191FF0581ED893247837973A8\ +B99CC495187F940EEA39BE90AD3DE0E7CB9CDB581A52E9BB7F1BE78D7C8D6BE3\ +808CC35258EF2DA54F32D5AB231F97FAFCD29CBF1A34838E4C96A055F2F51AF2\ +7692DC6ADD11C4E0863E40BFF5760CB2DEAAB037049491D696EF9C352DC8372D\ +4AD0BE2E:\ +0014D024C8128479C7EB2EDBCD188459B403C487A8912C1D010656B66A2992D5\ +49B04467EAFC90F2B013FE5C52C109908082D81F639DF9FF5FCDF390F27C40A6:\ +7F80E0692AD8C618C525C7CB21A89F82 + +EAB86C11D76FF55B2F035303C4925A8D0D0D049C91BE92B9CFB9DDD545EA5D14\ +DAE32F1BE7B0EF21B3E0EDA1B2BFF9B2D387B310994635E4FC607936E1E365B8\ +0449EC00678E591771999C94F0DAFDC61BA2B191C356ED17928D2048AEA44A4E\ +19D9FF4107E44E2A46E6ABDBEF247B6FA796CB288631DF08621FCF5EB14716C9\ +5C35A77C9DD9AB9FEEF766E977292581199F747A3A7294B2898CE27FE86FBABD\ +1F05283E863BE8B95DE2FFCE529B473384F99CAB6B73B5E2247EBFEE42D92858\ +C2A369680E:\ +61C702443AC36E6A9E04D892C24A456C1611836412D3837420ACBE81632DD6F1\ +5DB8A37E36FF0301B033AA4446E2CE5B42160ABC986E5BF08306812E893D2665\ +670EAF0B32963100744AC8FDFEF34F29829DE7EDBB331C1FA7BBEEA3149AE5C7\ +FB77E8ACC8806ED07359EB140CE96D68F9FB798B36D91AE46CD1F4AF0C5B9E94\ +F6366674063D9DBFF1AF01D6586AE0A15149BAD137B7161FA0BD46B3753A4497\ +2001A651CD1C1DF5B013BFC4F64B22B840726BE02D02E3DC7AB199B220BFBBEF\ +AF1B24090A:\ +1EEC7FB21870D49015110AA970EF8D90AFA9A70D7C42D8565CA95FF4DB5C9BEC\ +B81C87B413DE401567AEF4336366D1AF9BD900EAE670E404FB1D0176B970E613:\ +2794A4A65C67CE7D7F426596A92593B4 + +D3CEF9E2293B9FCF61FAC8D66176B9B227D38BF32376335665EB2AB89BD2338F\ +480A6EC7F74697D901062D9D99C0B2BD3242A22C5511EB250BECDE63A37B32B8\ +B4545FA5CED7543427268456C75FFC201AA138EA5DB48BFCC80E939F9BC3F6E2\ +B16E8D614811B6E75491F1C3752DCF55B314EBAF26BF2BED9614F14CB553F501\ +3FAF0979EB3D15D40FF94702D3328D15D1539D2B265985A9D2AF836B99BD1592\ +35C0B1C3C27AEA16408182B457E70E6DDE0EE6EBFE487CD481BCF2349664D391\ +34D3F0409CD6:\ +30EBDCC9883E73A68A1DBE5F62B29924D4478F9A97FD87F9307087D02D130DA4\ +F1B4EEAC478B0A9492FFCF0BF3BB34799827B366824B7717E30AF71289CFDA2F\ +60C3F0F72568206190E88D3DD9251D1B8E9AED0BC9A8EA54436FE38593255750\ +E7FAB4F6A1CDEB703C6AFED2281AD873ADA562F1E302E74FD534B2680B9BCE2D\ +EC3D2988A2D028E3FEFD5337086C788CEE5FB3D76DA15E2C94CA69EC81BEC27D\ +374250C8B55F895BEB63F1FFE11F4BEDDF624F7296A4D135187D0EA0F1C352C9\ +BB61A71542E5:\ +91288086AC1F659A1901692B52C3E4EDAA0F598CFFA4EB58BAE8E318FE2B81F8\ +1BBAC50DAA94534683DEB7F7AE314B7B12E64B5E2C72E07D05F4F3AA15EA51CD:\ +8943336E2907D7901F0544481686E287 + +CE3565BA0A89F5FD63C7F3E30AFF76B1683A2A40556EB33CA38B2F53058DB11F\ +FDDB6EB83DCC51CC6B4EFF7A296481499E2B746674B6AC433088F52F09EDE54B\ +30BC6E2BD028E611A3ABAB6B86054DED15C7B43A56B3A22D15BB5C478D68F3BF\ +77CB0C60173856DCE5444E0B1043D26F1B6DD7E93D09A4F64894D63565289A01\ +532216C339B20ED8A5BE6700EF9BAD1E08F413F94A4291969DE1391611E1374F\ +B6EDDEC206E4586FFCC9EEC97CDCCE7E40C4F460DC115CAEE830B1CCAF5C70B0\ +1CFF670FD1DE98:\ +83C3626169B4AEED4F276AF82B2934463595C68D816C1C095598F1691AAD98A2\ +43703DAB5F3D68E2D56A2D2EBFDADE769D4DCD6BD132D8C32A977EF55DE984F6\ +A2A6E6C8CEE54209AC58E24CFBA30D04F2B50A9FD007FD0FF703AAC26D12DF79\ +9596543C425527236D5BD47EC59BD837406B4E6317518C5DBD5DB84271187545\ +5B9B88EA1FD5DE4CFBBF904CC10B2CC9D1EC949146B75B1AC84893E424962655\ +305B09B149273677794D5444C3BC1EA36FD92FB966EFC455FD5EC5AA769281EC\ +3A726223528C11:\ +FC1C13484B2B69BD698876A85D4E14F4C4AE82A1023207E532F8D20ED69882AD\ +62F83089C1F5E5CA8918B108C78F1C84FAE8ED83F7C8F8556673130118AD1E40:\ +09F24D8D1E75377816525F7F201E66B8 + +54843FA8D6C7434DA1E7FA2D2FB2EAAE7E2C1106F1636F35F0C97CA1101E6068\ +8C87CA5281C2C4BB6FF530DA7521FF42CF93FA2A150AA751E474350BDE382DCE\ +7895BC52E31EE95D3B4C5894B19628F58C3EE519545B5A7E0E73931CC2238E26\ +B921DB7A400EC6415B8B4DC490942AFD73C6BDCC6B351DCB390AC043F2370027\ +EF51516E8A1E28F8CEACB27C6E3DFEE94F70E2E744263DEB2C03AEB80AC1A6A1\ +D79F819FD114D1C67F3E397DE2A845BE2415FBE885B3B17EBA177F4CC4093BA3\ +A1ED3304F5E8416D:\ +35E5E45974FBF64355571C5A1BF0AA69148A8314904E8188A0DE952B4F9BB436\ +53529765EA698FB32C73CBFB26E7589B3EBBBCFED7ABD700957328A5A08EBD97\ +23D95AE5688A5DC83F3B490429A62BE8A746D0EBFE1A8F596296ED40E16BAC72\ +D3C9C8D7508A9743B9A950813E401A97DBBFAAC0605112B040537D562298A2BE\ +ED7E01002E01165979B963E44817A1B778929B9D416B0EF4E0D8643D339534A0\ +46F5D87E107C588C1C3624ED5C2B7379552EF21F62D1577B4A3A4FA95FBC3764\ +F5C43B589000A99E:\ +41A6D1880C7E6FB5BC5782AFC2015A2E9AEC92E1029EFB2138C7549FDB9780BB\ +32603E8C52447B5AEB024CE2D86030DDA01E696B4E8E2B2D594E5A45D383A9DF:\ +C94916E92FE1B1D443E2B8D02588EB0A + +FBA6AAF6319D687E7B47CDB6AD81E6C6EF8CF3E95C583C2CDC402AF1ABD7B580\ +8AB73BB9331D23140299D35E1E10D30FE957E314A5BB4DBADC2366BAAD9A0A0E\ +641194373F51BE4522461ACF2B5EE471EE356C47436C1DE4FD97DCF7515BF14B\ +8B45F05AB5134297B38E7A6756DA9FF14AEDFD0A9E9013C8791F1E4E142618F5\ +D59627421446589D6E61E7135963C5151358BC7282BA2B56D28DF9BAFA7E3605\ +99C4C948CED58B45119A2BD8E936EB362DC75AFBE06480AF2A985AA6168F2FC4\ +FF2ABA987FDC2253DC:\ +3C4416D1AAD1782CF5B2A2F229C4511D7272F166BEFDE191BA2BAF9B14AEB44C\ +A72E1E8C899A75C9D1282D55F6364EE2A13F0FF4AEC38A01172E4B7D30FC18AD\ +DD8387ACD3FDC59F39ED45F31756FE5C7A1EA1E674C8029DD562293129BC89A7\ +00ADBC8E0EA665B96BF04DE20433DB054DC33ECEF7773C7D7B117B633ED13673\ +8D95E8B31E2AB0941ECC780F855BC41504753F16835D63F1A51708E1AEB260D6\ +AB38E3AD7AAFB9A64CF1B11904D3D54BEE9AEC2F2AAA0FD1B68CB75DB0FFD344\ +1EF7056F7E292FC182:\ +01870569CC3ECB136C5413027144E51CCBD8A36E15F2853744DAE7B4E74D1066\ +00B801BBCA38B8C9EA64E87F42C4643351FA5C84D002295A1CE0FD75FE8DAA2A:\ +78CA0FC08EB3A11915A3CF5AEC8604A5 + +8B8F766092CE5D8DB2183EA44E5E8E18461845993E6EA588275D53FB45D2548C\ +E9EE837C66C8DE93E4A141CFA9C2B22987A5994E819AAB19654436F49F4594FD\ +F5D8E4772BF3D4460B94BE1665440BF1CE351EB74CDD87B21D7F843C6CF0D24B\ +A1DA47798A1BF180E47268C097CB112DA816479DF1078E556F232D29460E849E\ +C227106F6E25CB9D60BB956218416DACCCC102D28511ABBBE2F9A053F8A982A6\ +FE463C9761AACB368CB8D3F91F11BE6D4C4C90BD6011D7499AC760C0A9C3F807\ +0F3539F5B0F64E6D8DAB:\ +539DAB85CF2AC519581A6E0D4460B65AC271FA0883E9527FA1FE1EDAE9936902\ +D1C14DEEF8BF561DBB4AC4C7A59834DAE9909FE8FADC8AC4CCFA69E69EAC7DA9\ +84DF2413430C40DF35FCF6EEB0A3280BD96ACCBAEA2EF87537E27359E1CD59CC\ +7DD93E02A855586974B354B12764B31DEBC62774F43C193D7FFC0B836AA5DA66\ +0CB5AC08470B19B8709A90FA89E7FC77FE4BB31B53A4866D97AD138C154DA17C\ +D6C1C59634A0D12AA96D8C77D276D71A07E5F3E474FC8D422346488380FEA71C\ +D096889544B86F1F2030:\ +CE1EE8443C2889AD1094C8F215151896D7A938ADA99514525DD446E9B5438F47\ +70A550217775DB49E0194ADDEA387EFBA0B3FA28A825E62D92CE4760761000D9:\ +6B1E5A4B9A949178007C4A33B68C64DA + +D22225652EBEBC11D761C4F30D21495978B1F0F1D1E060190A9EE063D7385927\ +4E0930D22B44E57D0C02D3603FE1C85371769EAC22D4FA18566160AB5B1644D9\ +7961B9883050C162A4ED618BF10A148D38C06220AECE472C9C509E762686A7DA\ +2817A26713274DF49F72E6C142ECD830844E25B08EBC1782C39B05684216EA51\ +871C91AA28396CBF4D2B8A1C65D9C163C28EEE8FEF2D3C04106A9F87D33BAA54\ +8BB6A5BCBCC8B502053E38A7FEDFDF17CC406C88604FD6C3852BCEF2F3E22216\ +04F7BF1B59A00976CB705B:\ +9078B3B946188F775C3353011B5C1DCBBB43ABA72F454E6911B5C863D905BF7A\ +93118076029E4470D8F3BB2FE7E12A942E739C8E4563D458586FAF3D048FEA9E\ +294ACD4E218CDE4771B29E456A91ADB71F3889F8BDC1C3EE743392F307E30B6A\ +D2E2FACDDA13A3922D8D54E26F284EE6189912E50EA437E2EF0414C265545E29\ +0B1ECDE422941FEB4505EB350C0A338496A797E00B4014FD5983AC29729595ED\ +5227B0A401EB5462F78102D3B3372C042CDFA08C64ADE093B4A1150BEF1BDA2E\ +F722D4CB983C09C8E60CF7:\ +3E7AF68C7BC5A02CC26A61A72E6EB122F86870395D3DD8FF54DC2F7DCADB63F2\ +E1F64222D8C0721EC21389C58C2C3DED9F9D2162B6B9AD670C63B02793616F16:\ +41AF50E9009570145022F6D31E8D2409 + +535488E23D8EF1110EFE7F5D3D2CA7E14A3EBAEA9959E52D26B6557F26A327BD\ +06BFFB125B613721A2046A877363CAC3AD9D636DE77A2BFEE9B699145AC568AD\ +DC859947E19455EE33B129C589A508C587917DFD7EF4B9017E5ED3E98586B970\ +DA77526627B50CEF46E72D84B6372343DE29F9752F22D40E62CE30DF9ACC308F\ +B0BD4BFF1193127120724D44BFE2CD31A340A16F129656653BCA1CBE023F51B4\ +F7721F25E1FF6D8E6BBFFAFFDD95D57C2F5DCEB57B1D576AF664E3E7979EF370\ +B24C55FB2301A9EC85496963:\ +1F2BD60C7A4CCEEDA6010DEA2FB0D29491122B8A4BCD0DFA69AF58EB77DAF134\ +2575985C3146C8E0ABDBF9B67F1B93F492643FF699B4FA81DA8018741720749F\ +AF32B992F5FAFA93280D578A40632BD47D8750E2FE064D851DBCAE9C87A6AF00\ +1620CC179154BDF468332DC34259B6B2DC8E491A2E32EC85000D009AFD6708EF\ +73D0908B176C0057F9DA0C655D142097203D071C69C330D8667B678D9F748EE3\ +D3C21F475C29982890E1C115750B5E92B4B843D891FE7F6D9EF16356916DB25D\ +80834D2964E2EE8E94D3144A:\ +C3A5336F8A9E57BC35E34F741A8988FB86DD46E56DC9712E845C390E5246F300\ +E8AFF73F61CE4619DCE7F3437C43D7F11BDF7A8A6D6515CACAC126C9E6564E5B:\ +59CB65F72F9C67580A5925395DB98545 + +27F55D03CE4568AA46EF67CB5ED66D2575E0CB5729E1A4F49AD4273A4A312042\ +02FE603D3480496FDFC4BDA751E39FF0B277C79883FA3AAE55FAA9661669C0D7\ +37B80DF9871D578D5DF292CF74318C7C3DD8FD623133D91B4032CC6DA726C8A5\ +5185E8A95D4F54143E778CEAD9D8046AECDB4513FDFABA2289F2DE9E7870DBEA\ +9AB92E0DA186999F16FA4D7FDAF44E11F784CF1D76A05AA27A2EEAF288B6DA2C\ +864A7ACE5B853B4999C901386E178BE0CFF2E127D2FD92F8E15FDB9E1F0D12E5\ +06DD8321C2C6EAF6AE77C90455:\ +667A8684FDC754279564007897B708F55D017DACFA94582507B430B5C9E974F8\ +6286C80783D5141B284CCAB7874C6B1F1CCB2F2DDB0B0E10A6B7E73408C19F26\ +9F1C996E20C3C3570EE03CBC9BAAD580A2780D6CE28C83ADE227755B293112CF\ +7E100072833964A4BE6A56699D0451AF1C7C5007E3EE65A93F81C5E743117B78\ +CDAC949ACEA36DDC4576C4A14D078704FDA4B42B306EE82CEF538B1D4A4C9011\ +DDAB3714E950B360A49EB5F5AF43E4906C2A002D183B48FA4863D1B200EA5C55\ +C13949ABF0A32F662026283835:\ +166FCE6A689E4A5DB654490AB28EE5773B94FF4F85406C3CB06F1AB813020B5F\ +71CB5588475D950674EE39BFA247B1181987A2834709224873F96E557DC29C8D:\ +08CD9F4AAB271859780ABC85F02DA6BA + +87F23DDD6C133E12808B4A4E7A786988FA9A515EA83BD716D1503F1DB448E8F3\ +139ECF424775FC9A47D3C5B1FADF693B632BA0E380C352F491BACCB96B696E6C\ +E122DEB6494C94FABEB47CE633E333EEB83FA89143ABB7FC8683BFAA4F47D26E\ +C52F53438330CC84424C92B387C69222E7B4901C82C64EE069BC068B86620471\ +E434FC8E17B7A8AB635684402056C543B1743C3ECF8448E7B28FC2369AA5686A\ +B0E5D7BC3206FA2E0BD79DBAAB82D81DD75271A67301368EAC751368C527DAB9\ +73E1940B704BEBD528D0173AD67F:\ +08CE80E4171B67867ED224C3516E4D74EE85F3C2F7F0866803FFBFAC944D94E3\ +F34A703A21DD6D759A7170C416FB797EBEBCB326636A2303A0FEDC7A5558BA5E\ +546102E6931393F7BD4525DBA146153946910D7246EF570E481F470EE2D64AA7\ +452778897B6F4929F96BDC34317301EC8AFD0D19350A04B725678FEA80775970\ +A98E8E4187DDCC2C223C3B08DA6197ECF96F3686F1B46DF77BCA305CA75A3F93\ +E959B7C62EAA636818683BB002EE1592F6D84DEFCCC3CA8B5E755CD4F2B5CAA3\ +D162114A717850890744AC43B1B0:\ +6BBDE2C7C857D63A3BD561511630F09EB1EA1D4AC4062ACE2775E7B186D3559B\ +D9376E4584E3664ED7CD9750830AD66AF2A88A063DF721CE8AB0CDA309B5EEE6:\ +CF3559AD8AB802F2D91AB264AFEAD5F5 + +D5CB8E131F5954708629E18D602A29E6F1551311C28D2C808D2AA0EFCCCA922B\ +11E5E12D3CF1A656DB41D76A926439ED803218FAD76AD5B90D4E8BF90F77BC4C\ +73D0444C6CB7B8A8C133B0ECF85B52E9463B0F08FB20A5460EF84812D4B77C38\ +1A98463F76B37F2DD2BF3CB5046CA9561B5292EFC46FF32EB1A5D4F714961E31\ +E2A97B7CF7832730023DF0A6A1BD79A48D705337CB60F4B62B00137EFEC88018\ +A67362342863A0FE7E3A508D056E16E35648D5F13CB8D5871DC91BB814077EE1\ +B134483C76950BE28885B5E859A60B:\ +5AD28D8DD9727F8A2F4095F21A5B5374BCA27C483417A3729A9EB9A1A9D52C36\ +C03375F8824E27862F70D3923F795A7930B99555070FE1BE23BB5D257DD523D2\ +7A06713C8B6160D287F70783E020D99527349B1CF863E3B68ECB791E702BBEE8\ +FE4857939D9D361FE1526C70C512A6C55C1C2DACC969B7EC0F0DD0D3D277F2BC\ +9CA1910584DD8FC0A8A61189B9C2ABAD3C97368A1506F0938D71670D6DD84A74\ +ED40FA8C8DC3F08EBBC3F8EED784FB83E335561F45A43D776608AFD83B9926EC\ +D34EC4DCF051FF61F5F3D9282C7772:\ +A1589972F5DEC95D976E7B5DE44CFEC5A09DE4A6FC70C27894FE49FB9AD76F6B\ +7318651596805C8ED88E1D27293CB16782CF9622C93832EF3F70719E6725EAF8:\ +C1094E3715E3AAE75B71E27AA4A1AF12 + +8E843FD325442267456066C1B459DCA6B92D5CCDFCD18CCECE7F081F3578E9F8\ +CED6526EE5BD94EE35C4BF7BCFAB6C6CDAE5814F5630A7AC432A1A4A9CEC24DA\ +57F18FAA1C4E5EDB78BC3E6968A3D01D7AE65E419E13F9313C749E3A98BA012C\ +F8907BE47837E466BD391D22EB51141765029E991D34F60D6E8BDDF362289BED\ +54AB48BC1312B6B4F189021F4E0D8DBE75C2B34354614F15E4FBD482F9A535AF\ +CF7287461361D3460D893F95E368B1A9CA602A78280E741D81F338BFC8E560FD\ +8C09216D18648C247B90EF04A60A11BA:\ +64A6E1D09FCEC7F4A126E002D30A2FE00EBFB577861734A92DAC871A52C4182C\ +A140FCE10D9FC78F98D747BF36E368F01B5CB35D8A9F3CA824C03CCE0F34CF91\ +5872E0A913B5534CFCD135FA2DAF1346BF6EA236523FF3AC4F5E56F645BF7F95\ +C16BB9C944E289BA4F8F616F1E137D529C0E9F4D08C83971DB7F099F0A391FB7\ +EA6E5C5A5742794B984D4AE39D510A929AA17097BDA922024E1A2B1FCA0335F6\ +09DEEB2217474EEFDA9CC46990B4DA0CA0A70E37D6910DBF5EBD60F838D9BCD8\ +254C84CE4ACEB08DD3CC902D395EF7FB:\ +50C5796077D4D4B119F941EA5E83C143D0AF8B07C917C0F1BF60FC3FD80099EE\ +BCD3A0EA8EA2C3E91E02AADCC09AB58BF4CD3C87E3F09626FD532DC481A6ADD0:\ +B2F73EE5955E2EBCDFA7E942E5C819CA + +099259B6C95BB50843F59960740BFA94A6F001E02AE7E822F3385A9137F5D440\ +AAEF70AE9B34DB2F4827127C7594971ADD584DB84AE5E80B1002704BACAFD7C2\ +C0E3CF97AE76057B86DD215A917B918BC3122C505018725A35487150E31F18C3\ +AA5435D043AD825E4309E9E63F9EE6D655A6D6F9C08A62802B8FF2E9650D5D95\ +0F3B8B7E73C5F41DFFE3509FEB59FD71A609C47AB73DFC47EEC38D6A4284EBAB\ +6094D382FAF4FCDF5A5EF33ED44288FEDB524A8F7DAE6B05EF0621FF607ACBC0\ +89C4B69ED11A13A2162A275ECB673D4ADB:\ +9E12CF883A752DBBE6E184F1ABD72099001351238859B6C9B7CD04CEB78DF1C9\ +7EA8BAA0282B4F03CFF4E81F55153ECDD2BC20F3A25B029F302B30796B0C006B\ +FEC79D8F182300D74F1D0D4655A54B3C311E96431AD95ADF9F530FC3CC088A3D\ +54219B4AEAB5C01003339396E097BA1F716B842505CA4C492B898B805259CFA0\ +7BC18B9178BDFF658825010A1B4A63EE5D09CEDBFA205D1875AE4D423EC06D48\ +F319BB2D2688EFCC29E3D8914F63AD6EE979B5EB832FF1130FEC0610FAFEB57E\ +89DE31BF911624DA024AC1C76D023D7663:\ +2B316C30C2D2E3A7C4E2A7692A3DF1A403ABA403D50BD53813E68FDC254FC714\ +18E83C733F9F3B98DAEAD607B6CF76D7755106BD93F87592819646A8A4ABF96E:\ +64F6F7B88A048E7AC629F76B17C294D4 + +6A7890CF1CF056611B1FD8BA6F825832DADF96AFF3CFEA7C21F9D8EF7D6ED286\ +99E22E21B97F1CFA5BEB0CCC217915A38F2EACFAD1371865ED9AF1C89892DC11\ +CBA083706FC32221DDDF41AFD69DC92D08C874BD87D72C29605A1C986BCC0671\ +44CBE8511AFC2FA166BCA05A300D8CCC72545412B5558E1D0E626EA4DF8EF15C\ +F3532B477880AD18CDB913287574195E5D6A2FE03C1BFA588B14458518B2A3A7\ +AF06C23F5E0121EAD5C68DD933A6A8599ACAF630B5DC8CD11EF7D94E795D837A\ +F8D9DA3716170743231B60859BB89FB1297D:\ +EBBCD480D7D3D6577B08FF325D73B11FFB0B80C7F16AFBB824EE8EE4CFBF3A5C\ +3002675C560C7535F43CD765885FEBFE9049CD991DD69F3743A73D4C0D8F688B\ +14DDEDE0B9DC7080588B7E66D3F4233162044B725E3C16C94C55BCBB82EBE67F\ +BD8086BBE78FFE464B97FD7F6DAEA0BCB5FD153B7D76F4669D2A4A53F8A0B380\ +63289E8E76D0FAF64A7363BFDC12FBA45DB08CF6D07FEC9E67B768A98CCD5174\ +90DBC76DA9E52EE9240487AED24E13673232746715004F3F34CC66D30B95C7F3\ +6ADD7A2DF1AF7C64AA99705CC61B9EA6657C:\ +EA1B3E82A30A9F62AC3021043A5DB172096012E0A169E5DD1B45B0ADF1908E46\ +DF8083DBB2DE6065F9C6D131714DEE709685FB95CE8FAD19E489DEA4C1F9B97C:\ +946E436B399B25BC66782375D94B7600 + +8428CC4A7B48909337504B6C9C23018D8D468414B965CFF8FD787DE4B20AD4EF\ +8304E3E154BA6E623A027FDBE73DDE104E4B2D2BE6DF1987EC421694BFA5C402\ +146FEBCB3F7B7CE109C2D198F5DE789F63D76598765539C130BDA129246EC9E8\ +95D181D13760791AE362C85E70825717C050930F34B0BAC4B7637C793EEC3207\ +043E0098A737C7D333A75182BD904364ADF0939962AEE8E224370F797181AF10\ +F57CBAD4147583E98A90687CB4494E18841889FADAB088639F0A645D43E5A384\ +49265C2FCE10AA676DF23D4F154F10799D6FE2:\ +785F133C9EBC74DAB0DB954D5EF0D14BC5E235A1D37546140E00F804A9B24DAA\ +7AAE674FC24450197EA103844946987606338507D0772D442AA3B92DAD776013\ +7D240E7A44B5F5DDDB3E380616097210CF489FE4B5079216F01AA164D8FDCB08\ +7238E0B1B5DE7704C71098A8C8A561E44C515A592EC501516B2C282561877CDB\ +761208A1C4E2538163BE6F88B57DBB8BD599CCFDF2A2C7C9EBC9A1BFD7AAE38B\ +538847C0A8B1AF2538ED0929BE28FA6C8056D4A986F9B5E935F1C580B549B848\ +79B303D94929B8A7FBA272CD2F42A13EBE76B0:\ +EADE81F6DDE80B4E77B25B6D92B5BD621059A04A290717E42E36456A6A12FD75\ +65DC456036F450795DB624818A61434A6DDA30E3B767082B96BE3FF8717C9151:\ +47DE0EF7D67AE858B1C11D1FB3513FC2 + +CE14693992826312EC65686F4209E3358CDAD7AB398359AAA3B6766F24716D94\ +9363B70A4045D1212BE9EFDE8DCEE0019FA978A232029FA6733D71FA9E52E8CE\ +A4FF4A2E25FAA127863512F56B67EE3254E2E228EB5FA75465441E4DE9467B49\ +B51C72BDFA9A48DA81D0FD4DD5E398FC8C5A9864EBF98D0FE0D7A28DF7D0221C\ +623B89269BEE5C486D06E2511603C04907DDCE7BA7D3E7FE926089FF7C9934BD\ +D634BAE190D8861F8C49354E074512E707E62C85E87B1736B0E3200857609118\ +80F01C446AD8C35B03B441F4652D3738BD83ACD9:\ +0AE1E2547728A2C29D0483DF01A2B9C0F70527BC82E8AE765B0C02C757D89D68\ +60B0B50244BE85ADBB8B81FA76F2196341DF5DE5B10FFEC052D7BEE3E907A413\ +BC336C708658891060C6ACA2C98A54B1ABDD56247D98CC43D53B792C25A46544\ +60E2A339C6FE75FD65359A7F3B8BAE9E3404F038FCE000BE9F353A4924D88A43\ +292607142951F1CBD4A1CAB5B02AB7AADC8C97D3BCE9C7D649D8FD4C5A621E84\ +23069AC9C8F5CC3EE2A112A933A04F51E952CF1FFC1D6446329A47F09C831DC4\ +8CA9422524E3DBEF1F38F2E596D52952227EC8C2:\ +D9C6A87BD9637A09E23B26B6750F874C6A50433C8D849B66182394376063E0DB\ +2DF6623AA630344E0ECC0BD76A7E9572919DED7AB3223196DC79B871682737B2:\ +18A7808B43783513F9F57E88B059114F + +B424ECD5D5582856DFCE1286A4934C8CBE04F9C1C38AAFA645140160F1C684B4\ +AFDA695CDABCEC269A036D2BA57080197708776221ACBEE3E0BFE0CCA0E86F2F\ +788A128A96F21611BAF2C339FA213F7E1132D13E80360796A74C45DA817A7AE1\ +01BB067BC8596BAA691DBA798D60F7600E783FCF9D58DD3403B0589F2171160C\ +F671A7079BAF96F4CFA6119433A8225D7168CA7E521C709670B4252C0655FAA5\ +2E6642DAB67FA5101B801E597649554751D15F6C3953F74A05580668C5CD8809\ +20C6933534015C9342DC222C80F09876A60EE0E154:\ +25037CEBF302ED18A3300BAE1BAB4EC8800DAE716E0F4D806114F7E49D6FF8E6\ +89735BD644E30FD52DBC815EC20F224F9F96CB05C1E95E6B560D894036087D10\ +9428B891247E41DEE3BA17CEAB654C844CB562C9E78FCA748C45CD71CB727AC7\ +EE1136C6CE7E91D203DE43431E795AA5D1FDE7D975AB99415B04669EF6E290B4\ +533FED82EAC477E0BC4A07F6A8D7D5EF26D4FF13BE08F60EE970D20E3E4EE3B9\ +506230B12CB44395C421F154B5EC6637DCED2DC0A26851E617BC66774CB34776\ +0FDA897F7F6FFE0079BC090D71A581803B0A635BF7:\ +CE651C28DB642F182B6C4E5600EF2259916AA65A49B85A87405EC61CE51D9354\ +BCA3A88224F4B755500F898BD718F842A2EFF7B067D9D2BF2B87540F3A3D758F:\ +830AB7F7E062A6A7ECEA05ADD6C839A0 + +192717C9D60F3EF892CB7BCB5BDF933BAEEFA5320F3C9A15BCA141BFB4890A71\ +D6D053E6E725767BD1164B4C1EEED5717F7D4CF7C53825F46D47FCC0969B7B05\ +30AA14E67335AED29EB76C255788B4CBEE64BF842CF6421BEB7939BCB295BBA0\ +54E4098EDD7EA418FD3DC43E44012FE3E9E75B50E9DDE48E861167BD4E9EE07F\ +3C0A82ADC722273D62517BCE169A38BCD629F55B15198C1F96438F1451A16BF0\ +9628475DB409CB4254BC405E55813C32514516925604258AF4BAB8C1A0F594CD\ +D1E62C35E0614F20D4E5B5A9F481C5717F44F5DADC30:\ +980B4ECCC42EA4BB4CC6284EFD8BC17B570460D71551CB2B1CFE0D0D0EDF50A0\ +68DF0643216F22B03CEF2A588536D76904691F48E4F78652BFBD414361C5CA0A\ +FA504A7AEB4F126C584F737303ACF98DEE0F2D6401E8C83A61A782D40337F171\ +F718E9B48EEE2139C63FA1D6AB3A8755055FE2C5C076052ADACB728B1E8CAF22\ +B5D6E3EEE3BD33D577623B147A24FF5A91FD028A8D99312E3BE2FCB21B0E0656\ +0E6348E080064DB5BE9AB79DC67FB33043BC8A3948A19A15B27AF69445AE8FB5\ +13B647E93AEC6BD354E4D7FBB30B46264A6F6211D3B9:\ +BA332DC89AA47B6376A3EB64706BFA85E849168F1DBD8476A24191560785E929\ +3B71ACAF391261389DCCE973252839C71CC54A01FD40B2E8ECCE12E12DA4194C:\ +3CCCAF6C296F9E7BB5CA31DF74EF2B6B + +B74BFF82ED467D8484C6AE456F319158D9F5EE51157CF0F043F0706B9C1F4E35\ +B0D9366702C731B3F944FF0A3342A965DAA36B1E6C275B91819C2789F4F0D1F4\ +BC62312E9741EAF9D675958D71838ED51BCE0475EC2BFCD7A8B4D9BBFFD31F02\ +FD0728C8590CF8D5FEED6F89657C4BDA9B8B448B4F16FE384BAC312409423B6A\ +53B152B93D1F6BBC33408B4E39388A0BAFDD11B04DA646C9B1986393C493117A\ +F76EB16A5F35FB23081D4932A7AA24CF2C56CC6396981C48B516FB18C8D879DB\ +FC9598369220260922F4EB58A8D8007DDE7FD7B055E169:\ +E86971A770353B87F2120815B3BEC5223EA4D9AD9BDE8CFD0714218E6D341350\ +404F6A488711D274763266F8A493C039D08CB6CF5EE4203D7582C0D07E455524\ +D6AA6046E964163C870F953FA9D26D211BB675B167F5CEABDB4A2988DACA8C59\ +476E3E4A590A41395CEB65DE0EEE1BF6762124CD7C6BAC34BED5D4F690F45375\ +81479A65A04D14B3EE86DC79633D77DAFD989876EBC3F582C929555D2272FA05\ +043540EA7EE35CA58FD05E48EBF071B72CA5E24D14340137A5374C04E6FBD99F\ +DDFB6B14733B2FCC5ADA1680BE91F6D1CBF8D649354036:\ +CAEE3F484BDFDBCD061183E19AFBE6C43749335F852154F51C21A8BFAF005362\ +6E76489C6AEA1D95237C5E2F3A1C28F75888E5D846DACF4ECBD231705326B83E:\ +1D7BDA46E7E23C9BFCD5AC55C94FB881 + +379819C60503E7FA119E8CD735990055B3D238A6B8CC53F0B41929D12A550985\ +3895869AA17E3806014398E0ACB595D43C6C77FBF6CDE3C34054F0CCCBF6B51B\ +C8B8B8B7B782AD6A79AB319056B4927B3A5F4AB043E6F867246103BB4A3932B2\ +2932D44C9D0EA79AEA8D8E6B8A37FD377A080F8ED1C6A0F66CB9D10BFBA773B8\ +4C915D859737A68C12B90447296A6D66A234A8C7B6E2B62402F981A0A27DD1F4\ +F5CF43CF8B10A6D7DE8508DB849FE9AA53CFE62D7C0AB503602910F3C973A191\ +D88DB2314759268B5FA449FA518BEC9323618C3682A9F88B:\ +E10A1DF9724BCAF9EC82F1EEEF4091D723083D9B67C8E89F0F2C51071E6A8247\ +57D1859747ADA011001CEF4B6E5B6A022FC0107FF0CF8688896D857B39AE9F09\ +797846C5C0A6984F584CBDEDA20D6F9CA07884ED134E44E0F7A4359D37655172\ +B5A78253891275FE9CDF5FDB6180A67B71503CB355A0ED2C21EB57C769BCC831\ +E9A4BDF76730A5C77BC952A1E483779FC1893C74E022E03103225A588132841D\ +1FD60AF85BFD086A1DFDC01215BB7E1F2873D3FF2D7E8222D5DC4ED01FBEE99D\ +E93AA2BFAA92F491ECAC46CF3C104F0B138339F54184A45C:\ +D004CF57824774DBB801BAA3B099F6256D0BCEF7320723676F38DEC90CE1FC45\ +639195278EE548CBEA6D56899CC633B6BABC72B09462EAB196773ABA46863146:\ +36DBA52A07E615CA79BE663AAB87F313 + +61F559C5F810A1C8DAE33CE354847049DCD89BDBD3E93AB7CC51E543997C3AAB\ +395A89137754CCF5CFAD4A05EFD30AE6E708D8A0A6FACCADF703F0DDB5147DC4\ +097B967A468280F4F3F3923B4078FC11204FA28EF5CF8D440F329B4498B7C89F\ +A26C6B47FE722F829EF628888DDE04082F0135D52EAC0D688A52B124159AD015\ +6F0411BD76E3D297D49A5D793E3ABBD611EFE007B176EA3E21DDD5BC4114BB0A\ +218ADFD52EBE4CAA83970F7D28D5D2134C1534F56CAF9D0D9F730EF4EECB645A\ +48E606E70E536664F22084CB9CBE0307359FE88A3B90DF04B9:\ +3BA656F0AF42BB37CCDC8FA77698973C7F9386F450A1FBF5B5D8CB62CFCBBAF5\ +A043D7ED3AEFC4718B39DE52103332C1F9C22FC55AAE332F1106DEF40D86B36B\ +05F1FDD2A8B8D6BA601CF6B5F81E367E7EAB6D12DD1E0B93C8D83F7E8D78A7DA\ +35E584CC97CF47B8EC4B281EB052B06F7BE54799E65E460D6ECF30EECF472D77\ +40DC4B361DC250997FFA4A4241C26200EFC4DEE7E65D67D97F71BBF7B088CD62\ +283AC013AE1AF447D660D3E708266D6C6E8AF60072A0262EEF2459E206FED19A\ +F04D7E2A2D18FC298EBEA0F0FA39322AC8C4DF0B9DBE7687DD:\ +A3B3A08CCF65BACA8810583644E6F1D205BE1DF2A665C4F40C6C7B062B286089\ +D8759DF98134EAD1904CBBF515C90E84FB3299FBD7E985878D20338B73D920E8:\ +35E1CDED7A119251C8732A89F4DAE846 + +A680ED4AED1665E1126DBEB3A6836169E5D8E26E12C3B4314640577BAA0BD09E\ +892A089069F5F2E40897C9740B9316D79D550AE5EA9F82ADD1A4A9CB498671F7\ +71EBF6925175631E2A3A5930716E3153078998F457D38928B6C1ABCB75FF5D48\ +7E90435F8DFC567BC51BC86FC91B2F0F5743A547B1A7C98AC62AF3BBCD95EF05\ +4EBA38C03AF753F05FAA915C9A67BF1EAF64A67D8462E05A03793D2244892D0F\ +68074324490E5C497906742B76279426BCA93CB8D15627F99471BD157147DBBF\ +61093BBCB3916BF56DA36591E56DC16430AEEB7C1B1BE7ACD0D0:\ +D76864251D5CC12CA7CFC7365208F8024DED293D0C8FE964E6604F0889F5105F\ +7962E254B733D8AFAAB8A52F7D7ADE7FF3CE3B403E0804A79C980062F1E7F88E\ +1BE12F1AE2E424A6939C738022CA6307120A5AF914FC29697D2218252C7E90C1\ +14B0B8E72F6081CD74721DD52139212F4F8FBDAFFA05CF609F00DBAB8C32E29C\ +4D25A16977301DFA985078A3BCE695D27470F5F228485FCC5C71D6F1DD6E6B35\ +5CC3795894C934D64A56AA540DA4CF21AD9E73989F627F8C3434BFC4BDE9A8C8\ +60760626A8C9ADB297BA9A71D6253D3126E58ABD8290F4F1F0E3:\ +AE9040F33914977EC5E0F9C1A1B219C6430B31916B7E79C448E942AC079EAAB2\ +D31DC6F801CC2E97F6514D6D287D89CED938C988F9C140068890F6A35636B72B:\ +E2F10D2F09A6E83259372B86943D72D7 + +CAA8B0BB70CF71434B46AA9F5CB4FC8A10AD9AFA4DB9F97BEEC80F8F4927EBD1\ +69F7781598AE0F3FCF06D15A129D3537B2A2C287BFB45B92A62F15482F0D0798\ +CA3EA908E1B9C4DC5644EEAD5D3B855EEE6B39CA6FFC50C6A0F29ADE83316D5A\ +AA2EC52D8672F6A01007D436B1CEB47FA9CF4FDD3F2628FAD378C10B703B3C87\ +4B665FAAD28D32F8AE618DB40041404420765C0700D6C99F6E33C5A500A25D71\ +7F04514EAF8819C3CBF811720F43B4705C77BD0A621C5E41763942C980EC09D9\ +29BCFDB2E53DA1C8960FA01320F54024110C4F237977110B3751A1:\ +E8732913AE17B4444441A0A15E22BBE04889F49CF09864B05DF367A26496E6FE\ +2583AF287729359F7520FBE83DF2A146D8A3C630E8E374ECCE099B162C41CB64\ +34A0B36187A6309CC9F1A10ABBFA90AFA82FFB934999D911FDC573E3FC65C6AD\ +3651E4EE7B2FBB46BCACA8C71C6793C45A570A15AA9149EF067DE0E9EF6195B9\ +5593CC92307FC487B905B8370AF25DC64815D1226916476509D90CCBD50104DC\ +C905ACC2DDD9401A35999234C0E8711852668B5CB6535C4C357D4883168B23FB\ +6611AA80B075EDD633351A0623EFF59B477BD4E354BC79CE817616:\ +0B6D997F3908FE53060897B727679FDE48AC86B29F1BDA9CE993C197648940C0\ +FFA81A3C669305B008A44E221458937E4428CD4A8F18D1AF50CAA9628BC410C5:\ +14DF452EDCE5ECE3A37251FC7256C7A1 + +16AC7772715E633D8BDB7FAC8EDA6EE9C9B05B1378B0E44A6B34A47DA8D1611F\ +97203FEC682CE354E265B23D721BA46CE012AA0BEA53981B46F08CEFA3715D47\ +2D82F28F73ACCA404A5B27BE788058DEEE90A74AA2F817170A9D89DE03BB89BC\ +71BAF6B051262B42DFCC76B464A28655F20ED070976C95D359BDA68BB84482C7\ +2BC1B102E20F3E33B6ADA1535FD7E9CC7CC5A66B8561A980129F6968A9EE7A8C\ +5705784E19E280938FF6E3E8270EC29111CCE3066687640722CB55B1F6CE22E5\ +0432EAD7400EC0422FB37851CFB42972A4AB635844AEE2F343495984:\ +7AEC70526B029B01A975026C991F4184A88E516909837467AEE2478DCA909761\ +25982AE3B1A31E4E756B13991BA08EFCA1CCB7B869E39667FEB9026F2DCEA8A1\ +81C0B41842899D61B89582734058D5FAEDB836150A6956EA4A0CED81F2B70F55\ +A7F54505F384E060E302F537B18BC42CA8CC7227F8A309024E2008D372ADB2FA\ +DA174E54CC83BA89DCBCEE139EB64ECE945F60FEDFF01388EC1CDF1052373F26\ +75B634352B036CDC8A347214618663BEA4382A7F5AE388E750D2B5350F386A8F\ +CF953C52EF83E1FD227600F87ADE3C0C3AB3C0F4236CDD7BCEA9E530:\ +160F863CEFB8B8FBA180A59860B0C8BF1DEBC4C40F06A40D6864E8B0C42588CD\ +43B96AF941AB74256787959210F7A656A9C427C463CD3084414E13D6EB4D7D63:\ +7C5FA02FE028C04C64F4AB057CC52836 + +8140557DB2CB5053ECF29487BD5FEC3C1C6C4576B402CBC7AF1478AEFF83247D\ +9E38F8E59280123062C36DC1594E6AB207236595FA82E229E41FC758A0BFD798\ +F2E17CB3A31290A55301D11954D217DDD1362AF04CA93116FAD7A0F21883ED62\ +2621826DDF7CDF21144C8EA736B6AFC2209412E5C8AE382E4A35E85612C41C10\ +E767590074E990221F60D945779FE6220FE83C87B00AD1FB459974039D22D398\ +05E538CCA7A9E08309EBC6207BB18FFCB388042E3E0DFF69D2F767E0F11FE4E4\ +08147E61CF31C529A9CCF676E62153FCE538B648A9B6CD21E3892CD89A:\ +66ACD530764CFA33CCF68F294BBD6CD7104DA5D5F439E147B61D893404763F16\ +5EF6B059A9CB66A47CB7E754E3F1AF7EC3B956DEB4FDC46699B32BF6B3B3316E\ +82568C3EA798818035B737465EF2F059C5D2E25BEA585746BF9D4AFE0EF244FB\ +6366184CE666B0FE4398D5A1455BEE43008263B890A51959F9222E0D81847DFA\ +4CB51CB1C7A453D04A71813BA24714C8D5C5BE482BC860BD361A7AEE20FE274C\ +9C05FD20277E9FD4A828E3DA87094EB2DA18695D1E1082B88DCD8283A3EAA53C\ +7B35776003C3F6284E52F9D0849F83E3B66A86AD702C656C70EAEDC102:\ +181BFEC5A5EEB02ADD9EED07B2DE698322A41442D7329C1ECE634E1271A4C006\ +74B7B1FDB0F426EFCCF79ECB3A1D0F98F6C5E3FBAE81D2E16076931401F0BA89:\ +E386052F007FDC354E8212BF84E4EB7C + +1F36C3632270557285DB127EBBC1A2BAC63067C1865F16A7D0ECE4292016C0B1\ +A141F8F5FCC451EE7FE4DD8C405302A4955442233070C6D1E6152753C2C5D87A\ +962646F02DF695DBE5547C13012879134F4F97D15CD495C2AB1C59892639D823\ +F4C3CF9B82ECF81D6371F7E9BCB25555FF994BAFD9A041FC5C98051B9A29563B\ +3FAA848A8CAC0EFBCE8A0ADDDAAEBCD00D07C0F3864AE658E5063743E6B8675C\ +EC907BF25DF9A55A571C56DA278F04B0DCFC56ED6A3083F7918E0CFA0FE29B31\ +70D5B45A881BD9CDF7BA08CFE67D600D432ADB4A00A47D3B35D5374413F1:\ +380CCA842C11F5732967379CA69362B2DCF4E27F7E5223AA6FDC6530BC195E6D\ +355C72BC75D40CA2495788137A2513FEDC520AE3373EF14BF0B7EB17DD911A56\ +F8F7422FEB2233AD6CCBEAC941431FA23DB14FB487821DF2B8D94AE80E4C88DF\ +BC95FDF31E0CBB6EF7E284188CEFE49FD8A035562CA775A5E00C7991D47B3BD9\ +F3CD19B7FDEE6D1BD4F2BAAF2F81980DFA75C46A26E0EB9BDD8B35D8E01F5CC0\ +119153F5B223F2B69630D9CF20EB9F5D2854CC25A513F4CFAF40B9EB87690D6D\ +E65D247615C33D42BDD242015E96940264582DA80388E4803DD706B7D271:\ +85155B51760E67721FDC7A6737BAD458D51848B33B2D9F4ACCBD561CA3C85A1D\ +4847F3C5C2722D2D384A00834E0194F0B6E53CB8ABE16B6DC1F7FB19C4316B7A:\ +950BB6D39A0BD2EA8245541D8AE76E90 + +FA94A224D5431A48BAD45B7E25A556D77F8DF405AA2D970C5C2914EE7BDCC994\ +2E0ED75FDE601E5ED0216FA1C3B2DAA8649CF3E5B9AD73E872D2072E6711AF46\ +A00A868A87008EBD2F3A289F351DAC9CB6FF9418B7CE9D93784EC29A18353BB6\ +F4C7DC8F26842A60FBC2C567B58B66A95F25EBEC4C440CEAB05D8F0959DF2A04\ +F54E5CCB346E831EDCD392FE864FF877FCF2961167DDBEF56DE94CD422B85E6B\ +8B92E5AB4E777CD31A9F408634BC787558F17BA279C286F444344927C2E1ACDC\ +9B2AFC414AA1BC8FF1AD26C544C146E115F6C243EA76835A4B6BB422AB901B:\ +E384915C1DE4C2B1D116107B23B31B2C137574EAB3D78C5E76080050549507D8\ +CF22252E0872D94E421F592ED3B5CC13C1BBD76826A6EED30172605517A57EF4\ +03398757B6DF5795311C732B95C74CDE82FB9A0305B0941EC5077028929D82A2\ +9EB3AFB722A63C1EFE599D21E09C08CC20525A9A9A071063184DBD32288BE772\ +8FB924F49AEC43BBF230D34257C7FFCE1279F467A915B94DF4CD2C0B6FC27B37\ +1FEAE033F7AB5E0887809EBCBCE4A50F29008A22B2817E73381B4E125C2B9649\ +5FE3B880A9CE4B8C20279A8CF82FA6A315D76E8A1EBC2CB39ED060F7F2B136:\ +482E227371436B679E1FD990940D9E773AB17BE1AAF461CC0CF9EF49322B3191\ +FE24C116F4617697F0ECA8B3072B01745515C6A724866EE505AAF1A90FE964F2:\ +E02F01E558E161A08D163B9277476AF8 + +ECDBB7F858500B166D01586266EE6AE5C8207477E2C27FD2F502033ABC58E867\ +1D86766C01D297C6C061B5AC6AA14A0990C778E875C04B054FD59232845C5FD6\ +7F3B5261D03CC233B8562FF11220D5BF5DD3328C9957017B9927014766F0DCD1\ +B359210EA77274CE80DF9046334F57E7DEFB02F90E75639C066E5390433A7A22\ +386095A7BBCE0D62AB31F8C6A186FEACC324C7F930E9EAC78B32FDC7B9D26513\ +976F5A78374621F5114296F930D8E6C90AC37FAE57FB9A0511C61A2F911EF63B\ +6A2E9176DDD4C28CB091B7DE62DF087CAAD205A39CC20C04629A552C9CB4BFD9:\ +796B4E7F0D1C7551BB924AB3298C2C5D6F1530B717292D0C71CB9E54A2814FAA\ +67B679DB8575759C3F55CCA617DE84D49126AB3B3E240B5B64CE621533FD6546\ +C7F166E651166FAF2E8B6640AA804C37A5BC9E6146FBDFB46DCABADFB94DEECC\ +D0600BFC710BAC5D66E91D1E748F58E32F2CE99EEE10125B49C6657C80FA6ECB\ +20DE78EB3948D3EDEAB3146BB7D6BF4B8728CDDF6D9719917261FB36361FE5F8\ +8448F94C64A793CAF45863009392C37F5F768FD4253F90F69D574F7C69F1BA59\ +088B03AB7EA5BBDA213771392426307D330BC11711C10A3CCD0D9297747A594C:\ +253EFE776BDF1E56DE7DD6D048E9771222EE4D4083F8F8A0DE293CC84EC7037B\ +89DB568F89C9B2AD5009CF7F1B709194D87B7FB618397209212123FCD318CA8F:\ +5B26213DDF1761F242D5AE3C8CDBE989 + +18108F38311BDD38A8D45ADECB6A6F262460E0222009596FB1B3D5C0E997E7A1\ +8F358279A3825394378AF3C30F560E5188E2D346E9F2DF80BD8D2EE226BE572A\ +3BDF9451CD43632B442B732DBBD96C330C0D3919CD0A89ED4B693B81114C962A\ +E0E50D778E04270942CCB33DA65DAF0D82485442F655DD711DCC948DE92109EC\ +DC09A4719A7BB0D25A61104804F4096DDC5ECB538CE47A0B6C636C5D95F30C90\ +49F0A8E8198781F41774383AF16668E13C481D003433138BA1AD8CF0BB999385\ +61D6EE0E5D0B012AE7A0A2C1A1D128025C49B2140943253D9A0BD4AED8AFC649\ +AD:\ +5DAEA1C8171663763DA9B98D8A63251DAA97DAAB89A1BA12ECD6787D7D7BACBF\ +D7CA47394C6D71F60B6FA0CE44B9EBA881748A6DA93F6028F38B35CFAF33E949\ +83A5138850137E8726624096D02CAACDBD18B58DF5499E7FCEF4C850037F369E\ +DD4EFF4739A0D4049AFBCEF77CE2848162891ABF3AB41CCAEE87344B127A1FAC\ +E935B5F830637968CC9A4A5F22156E5E460509D226EC8B2BEF94A7336D4E74D0\ +D6412603B116C66B4AEBD1F4656EB6DFE9E86C959E41CAA9172BD97909A4CE70\ +002A750B5AFD67ADD71645F8B3C661841299D251000C602CDE4B17721F145FF7\ +FC:\ +50CC4D5ED53034A1C722EE0D23410474C6C0F991901EC4A12E78FDE91832CFA3\ +A4183FB0E2C62A54DAA3A1EF4574265F4E816392DD0F1A2F3C7F388FE3C9BC8E:\ +AA628CC121EE8DFE2E6332002E69F0F8 + +4EF285246ECF7558058F30980D58869DECB535EDDAF68D41508B783B6CB126EC\ +A86CA166DA47BF58CC4A91EE66C0233222B1DC056F9DF57A217815DDDF770871\ +9C22F967D76D0590075A730444550A822011608C230AA24792071C9829D62D8C\ +FE0B5FE3904C9EA6E93C232E45BDD60D72A78563B77FC8DE9F106571E0014E34\ +BE98A355F78A2849EED7EC6FC2BF9722544ECE20A7676D618F8AB71B9A73D929\ +AB1A3BE14BA6DE347A4BB534DBE7F580C06583E2D660528EDE539B79F276BA21\ +0A60AAB26E1DB8C1B293C9C733F0855663DD6920940A2B12B5FC4A306E197380\ +01F1:\ +F38ED44ED334177C347E6E47470F4E71E6B1C3552B3BE9EC9B1E27CF859B9416\ +768B91B7C5E98F2AAA16D3254835780AF653CC527B4035D91A4B28634AEEFDF8\ +000B959E5932AEBC5A8B74277F2AF492EA9BC33ECC7F1F2EAD89E0595CC25E77\ +1684F9DABDECD077189D409DD798625E22E371593B36368F31BD50F197A920B3\ +8EAFDA357155B881720E47203323BADE95F2B57BD703108BA228D50A80455768\ +361341C6612CCB1FF325EFF496033020BE489975B1C911620792B47EEF9B1E9B\ +F51F566C42B291EAEAE4383373D78F1C4BF8BC2AAFF33116A92A820DE320B4DF\ +8FFC:\ +96BF32F1EE668ED7BEF2F5EED2F8C5E10805A2B34D3DC2146774FB332ACBECAD\ +9CF93AB6A7F0EF8F4291D2403ECC3BA540D22B5D4D1062A992DB75BC0B7B707A:\ +DB8C10D2A7EB31779FA98666E65EF519 + +2BC7BCD80E91DA825583E394958609BE769537543CA8B44A9199D42EFD39DE59\ +2C8583BE50F78FFB49C726AE2ECF7664C776C8CF4EA70DB99198CC7F7DA043EE\ +9A8D618C8CB7F5EDB6567093BF00D01F146601968E9FA98390FFFAFB4FB2E17D\ +9E85742E9C77CE27E82B09210EA5E5EED3FE3A6DBAF2076110BB172F97604F05\ +FB8F52520A2689E5BBF10760D3E9C217E739B9A3E6ECE7C195862885549C2BC3\ +192BB07098BBC46623D46578FE0362134AECDD372375531AF491CE3BCAF286F9\ +D91A82606B7DD661BCF5C558C2C06FEEB4A48FC71A1DC8DCE92F77DC4F9477F4\ +17AE04:\ +26B0C5765CBD8D5BFE0BB2055CAC54D5261DB310F7F01BFF24C761E91287D6DD\ +6FE65BA5D2F46387AD338649920CA90EE40C139EB9B05BB77FA429CE90661C4E\ +BFF753FFB0CF9C6B81F2D0FDA2077AEA5706A3698D7140714604EEEFA195EE42\ +53F47080A4549CC560CD4ABC46DC1B589CC6ABC1505122CCEDA993AB59F2642F\ +D9D5EBEA41AF5E8AE395DE3F77239BCB9569C3E311330CF797717AEC89B272A7\ +1248E2865C927DCCD98D9FEDEDB8F872682DF41935BB1E5FA56797546D325BEE\ +ACFC2D73BD39771404AD4654F2D91652B266C8C2168AB1C85ADBB2EBFBBB782C\ +300DF4:\ +1AF15A49557AEB8D9B5DB578813FEF2B90F20A0C44A42F3AC11B71ED9F047921\ +401D4176A3DA1DC0C5833FB45977610B23C2D37A32A5A9778108976D63EFAAB0:\ +13042090CEC102EE1BA82EF07D3CC690 + +A09419A9CF48D3871D948FD40083168F7E9F51CEF2DF928E9B2CEDD7DE29F4D9\ +22182833EA7531D3CA8A4ED277A0D8A0DE1E9ABEDE595DC69867EBB006E74A02\ +2356C76CA508B8BE54E3E2F4E765998B8495F715B03D6C6F304E5D8EC64982AB\ +E34FCCF4E36FA43438803018A6BCC9EF880090F080D53C5011A4F6B0264D8335\ +124158EE84E861049B2A031BB4231CE1EA230C714FFE6BCB048013E02B8D84BC\ +5E35C5D6E59014E13FE6A03CC3543CF028417CAB8A629B237BD1FA8C5F4C474F\ +B4B13FB72EFF570D01157D091DA1F4F24CA96CF36F54BB781FEAF070348400F5\ +52E73A98:\ +DEB151765020FFB77E29EC9290AE63AE66C4A37FCF3825AC28388F5FEDC044E0\ +F2CB176C39F57938A617A94181F4E10690C78196DC1E2918A6E093F5D65E70C4\ +8C10EFBCB3D2A452C7C7A7D1B36FFBBDAA93B82E8D4EAB3B996FD7BB65D0667D\ +4D4B3E64626A0B37C34138BF4F7A6E29F03FE59AFAD5C9953D47EC64E9D34C17\ +E73506DD2424555B4C8120621A4A178B6C6EE6A414207FBEF6A6E24543E0D351\ +B710D579006CE3067CF9E2C95974D78FED31512D8571BF6134BE53EF1B363CF6\ +AE3C3695F34D17FB9161D36821D7E60B9E0BD2753C4BB237E97AE049C89A6E13\ +B9F98666:\ +381BE60317EF66B0087CEA6B553D2E553439D2DEEBAFA29E9316643E7BC59829\ +09B2E9EEA08604C754F143152B3505818CEDB529C080573178BE803E1FAE19B6:\ +8402587F5878EE9FB251B8FBB111A3C5 + +4CD0FC4FD0BA641A58D4D96AAA3F3A46E9B2273DB3277476BC9BCB67FBE9CCDA\ +01171F84FC1911F225DF5E1C147CF988A12F33204E7BA6AAF8CE2FEA57B0730D\ +DEB851A1A36C3CEFFFE7921041F9AFC6CCC7B9B08027CCB98621FAB24E059C55\ +8202118AA45B06C4D7440A4D075BE4E4440ED3E9B69A8351FCC89023B5679A02\ +6624F8F55376366C5111835E120FD7C099661E641D0311A1796711A3EA8AC9F8\ +102C2BD2F99273E4F847D626DB20666F7CC0B32B1A86023CA5A8B053C789346F\ +8C6A0615998B47EBD791FB944F9AB8CCD7C72B40F905C36E0EA55D5E5AA560CD\ +64978B8A75:\ +244079996958DAA3CAD92FE9683C17E7F22FE198C9B481F9229C4FF5756CBDB4\ +547049A9985F23A41BACD8DC84A93F29B8E34F8C4922C8E9640C52187BF817B8\ +B0300A9B291C648B41C246575ACC7C06A00E50AF824C12F3D2DE06451F508676\ +8EA14B87876DB103461B3DD6AF9E3B0B770CA3832D877EC73F567E7A42CE191A\ +DCF40FE08EB36F6A5DA0790AF6C0107BADF67711CA89FD0A2A45C8FBA6F7DDDF\ +260DEF3E180330C7BCD1FA5C1BF6210202A323B37883F08546D86E301B1A9CB2\ +BB91DE40F82CA568FF0B6D6EC58D7F64B412D1B8A798DA3FDB2DB05BDABC4AEF\ +B9F34A3A5E:\ +48CFC4A5ADF7E823291C54106FCB6F2DA50E24D2E184A5CBBD1C8B804C145C7A\ +9511EB31DCEA69AE3473C216D34975814357E1BC5D9D59DBA0E2F147AE008252:\ +61775FB9236455F8049283939B1C8E8B + +55052169AE5F934D73482F5B59807A8DC15F49BEBC828A6FF72568AC4FAE7A23\ +85D82CE7A46C930FA7A74E6C2FA3B247EB6F59D15339A473E5F4094E1F65C884\ +15CD3AD1ED1D611F99AA23F9EBA8642B90963A8F5167CBF1055D16A7AE39B08B\ +45E1EC30399A35CAC888A9011848B6C8ED8CA5D87C2FCAD1B20872750FD8B186\ +CBF80414971901AA919263367CAF80797B654F40AC309B4AA5668EAA4642F6FE\ +679AE887876BD0E1107DAFA42126C10DE61987627107534056E8F5A6C543C259\ +BD0904694A64445FDF88D7837E3E91051CE92C2E2EF38275BAECE50BF214B301\ +F2D9DED63913:\ +27E6D1787E4102D242BD2B5DCA9516EF931ED80B720D7A01E71AF88A276026C1\ +9538F51A3D3ADE757C814B85115072DE490C08516B2B5BEF6AC7EF47B7904183\ +6DF14EE11A11444F3303CD718E0CA65257F0AD0C45C7B35CBA0607C0F63DA6BD\ +98D252A0CC78C55EA980FF7A65E821FE00919C0B4F7D297C1E684DD968F0E7F8\ +A183FC84D43AACDDE017CCCF4C49709951D6124D32CC3935B849A139028825B0\ +5BA1B553C63F4FF85FA62B563B753A698731D6F8880BDAC123C191191C3E193F\ +85A6B59F3DA6C56E7DF39CEA9C0BE78A4A1D0E68F5D58A0767509901707D104A\ +35456C90909D:\ +8060B5563128C045386FFE9BF1F8B18B7E5F71984F6F0FCF4C109DFC03892AC3\ +043AA49059537B827D9EE51109BBC908034A96325A0FD1FB3A8B32858A5829F2:\ +AE91B76A65DD2FF40596DDCDAD8789D0 + +5D9F5ED753DF247B6E568117C89ACAAD756BF8999F3294D48B7380B4C650BF7D\ +CD694040A10B59648BA11437173F22733F89B12C520CAE574633C031487D4CEB\ +5E6BC8E61ED9F0DA492F2CA8544228416E316CE339814FBAAFF881450DC9A93F\ +E44A2E90B678EDA786145E7477FCBE9822FB2E74195ABC8A5A7F04DB47AE1EE4\ +697903F59B71B6E586B6DEB0F4794B1A2310CA07F631679FE6E67783FA3C93F1\ +2530D1EBAB62A84A52018D2AD55DB241024DAED00A43A004EB8672E48152B69A\ +FFF9ADAFFA465403ABA06C3E8A791CDC6D7B139C1E9CDFAE22DAD694F8CB31D5\ +17D7F0C575A32A:\ +8FFA678847702BD5D009A51E099D85620F8C0B6D0312614E0D926EA9B3200E82\ +055E01624094316FD2CA3A8D6F98D44343E4615AF7561423FE4864C21F82D894\ +4402CBFC90C0862468A866934A8A983BA7A102E5A1A8D0FC76452A09643C76B3\ +BD99A485953F10A69C9845B61467C583C5384EC885215215CB9A065D97EE4764\ +A293F73E57965E876DCB9094C171F06509A54E4E801FA0ADAB0E071FF0B85400\ +88A2B4C684B9271F70FA1DBFD6B7D4B81EF0B9C8059461BF4943AE59CEEE993C\ +E2653A032F977E1DCAC936843A2F59EFC32265269D43C38C6A4004219415E60C\ +FDF67943919D00:\ +169F3871F147E7BC5BBB2E1C8810808CD973CFEA0F7C3A126D7AA0A8514C53C2\ +B690C4FA06E0D4205F1F556C839897939022DB739CF925E16C39871DFF8D06FA:\ +B737D737EBE47D113625DF138D1FE2F7 + +993EC67AE7851538B136277E21A1F8433633345E118CAE117B45E27BB7559FC0\ +448F80FD61DAA0290F1090AF0DBE6E58687370619A1BF5234D47A298DF0DA546\ +2D38DA33AF5C8C6ABB37E07498E23A0390CBF37415162116A792B8530C421AFA\ +9AD4251A0101671B9F07D3DCD262EF2EDB00D7EE28BF82E4201E1854447B2ABC\ +C20B2EFBE26D3F7D35B73C64E33C6EC4B3E8C7FA6A815807673BB68F30D65EC1\ +4205759A40AAA6962AF4FCECA6583293A5FE70D9EA1F2743338DA5C5BE139140\ +5F30E025A1C3643BFB6ABAB4038F49015451BEC6E81FEFE7EBA8F0B4E370B750\ +2A769936F481F479:\ +33DA912E04453CFB58670E977FEB3488F386AB55BA973C8E47039322E5382F3F\ +9C3677F648394C556E1465F825ADAE200C1899B5EFF523D58B69899434E5B519\ +F26F98F93045DDA82046C036867BC86D66B2D4CCBB04D6F752749B308C22D4B7\ +69E5226DBF697EF7F9ADA1E5D665E65801927A7DC2D0B2D1940E4AD2CE976B67\ +6C8604C12EACE3B76A321F3DBD2425D0CB08C99408897E20C6D6AC61A0CA1A0B\ +0948F4C5B8D3E24F0303D7CF48916EF9C43A53DF40C5F54604B6985F4E8375A3\ +2E0CDDDD7A2E7D78777FD6FEB97549A2413EC5AC36F2A917F1B04074FEE84A5A\ +949ACB47E54D4893:\ +4B9C1FB18B46A36BCC2DFF9D5CB81542074BB24EB490B5080432C2BA095DCA22\ +0E6C52C6C29A010BD4E40420206BDC69B046B28A625937D07A44E21AD15D4CEA:\ +262476E43FAF79B40E3D790E10BF3973 + +A98C8CA7ABBEDCF0BD82FF89DBB9DB52E9AF07BDA7252054A74C2965750002AA\ +888EDE7206B9A8DD9A108F2365A22A80559A44D76A16DC4A7B969DB37BE3C4EF\ +831390B804B6937EB17ECA53A6CA6CA719D43407787AAA8C71A0D349BE3D1EC3\ +8B1EFDF316F1B4512E0EC7A24DB1D8EDAD448AD992DC5FF7F4D31109F9A33F64\ +C0EDF32D593C8248CEC38D79C8380684B96F569042343BB82B7098A235C16D5D\ +F57617EC73BDE4C5560F1D04B9E692181CB93E3DA0F2872F0F840614FEB674A1\ +4442025C388BCAA44427AD53E15826BB1744608CF830E97558CCF37B250F338D\ +C7BED023AE477BDB9F:\ +9BD1ECD532B5AEFB432B0F9BAC55FBBD2647FB137ACF078075AB31FBA1C46A9D\ +0D332EFEA8DC0D922A8AF2FE8049F8E5067AE8CCAC005540FBED877C17DA4998\ +39BA46CEE821DCAF37F653C7BDBB6F2671D90C26791C047912B7EEB60D7D6935\ +279C3F8B009F9642BD6F7015F29BAFB70219E95C4A2EDB98C31687ED7E5306AB\ +88666275BBBADBBC94B19ED669F2B5D5143C6EA4138994701FAF8D374B198047\ +EB39F9246CC0E14289C7AC1CB9EB0C51C7FA8C07B059DF58DD000635F0D02169\ +D5E31930E140A87859727279228A95A3E2D467E435FB58C1721B1AB7D0B3F195\ +C809F12A62200748C1:\ +B1F48DBE3C678DF01D16CAA8CC06C9F4213696380BD3469F4265AA9AB7FDC043\ +FC892170194D950D9AB3AEAC508836A07CDB6FB29D9CC4A2FD23267C515A63CC:\ +BE33C0927A2D2567EEA9F7D67076A422 + +8E370EA6ADF9A27086C9859A2E75DAD2586B4977C28B5AD3925F577C7EFEF51B\ +313C7B9BDCB9B35369A549C984B935CFE174351A326F3982DF4389A8902E6178\ +D5229C532FC9FF3B1CC299B94A5BF984CDA03F091852FAD110BBE2E7FF8E0299\ +B00F8C1336D41F8BE5086A49DF939E9C7B9E534D1475516613339807BBDD9DCE\ +B3118CAB26A430FF17961D629D7E2C4666F325E27FAA8CFA8040CF26CF2E2BFD\ +20731D9EC2A688ACA526FFC4307157C24FE3A02C219BC0647462DF122EE8D8BC\ +475AAD7FEA7072F54F23B3FA8EABE745E5B097061E1C6299D8300DE1620CCE10\ +829A07533629FC92ACFF:\ +F96E6FE4234FE39D56EE70D9BAB8C3B6F0A81774BD28A0A47505A00DA8037CE3\ +2E8B9DEE085416956F5BE415B2CE8BC6DA0E55A5E5C6F4A2D7CD2F2FC33DAAF2\ +06436760B525C85F166C802DC2B7CACA85706841E8F5EFB3D3DE198848B5C8F0\ +6D64812EB0EAFF4AD075F30DEA94F3EE967347688E921314D1B764457258B3D7\ +7D2F05F65DEB4415C49654C21C4562218D89009C4C0D9254FD92035406210EE8\ +7BA46418F16EA3971798A2FFB082774A20EA4301680D564DFF359301524B365F\ +3C5DCEB853826B6FE14C59AE00AE5CC1C3AB43A79225185F40297364A2CA23EB\ +129B8ED646B942C9466F:\ +BF85279B54CDB86BE5DC5E562CFEFE23CDA399B5A5D26A880CF2308172EB4937\ +B4661707EB476657C973431ACEB8DCE28B5E005FCCC660DEAE965F704E2805D7:\ +486DC46B6F20C779D9C02275B16FCCD6 + +B68CEA817ADD6ACB9CD5208C1941E3C9EEA46B65F7BAC167F8FC4B64DB363723\ +D32D1DAAF4B343BD0B081ABE7136DA05ADC200F5F0FB8B9D9FA9A3AA7AC15058\ +F876D5D7069C4583F9344BCDBE0FDCF3FDAE7D8A20DB53DB673F20C65EDD5384\ +16B9771B44FF03AC20C124DEB8B4D1796F2AB82C0E26CB7365668611BD3E2727\ +719480C6CBCC8E63165BFDAE741E638E90748F430510682510D9D870F9DF5325\ +7FA11EE28FE2DBED7EF11487D63ADDC2BA5745DE37588D9CF8F76CEB02F08B77\ +F7E4E960C3668688BE14ECC02E01C43AA6B086B97B081FC4D60BD5CEE15CCFC8\ +28CC90D595A80B5F373EFD:\ +468BB4682456362038E3FAE16208E6AE39DA3488F9109B1ECE0F66AD7434B95C\ +3D6384FF8D5DA7FA7A1D1CA0B1E064A027FF8214B5832723AF8D18C74FADE531\ +0B1FF85D751372D660921E9766770384106F992A68AC8BF3C9EBF92B39069AEB\ +3F39C825FAE33B16A98491F8BF1C667F98FE874D64F38CDA952C43B6932C4129\ +C5A862BBC5EB0CE594E4FBC24438CF9576FC101C92FC859E6CC002304DB21EF0\ +FBBA8A5F411EE7B71E1754710A93A6B630DA5F4ECD176A7FE5911DDFFFDC14E9\ +547857F981B0F7CF806AE14E5AF70C672EB6488FDB9B23A469E6D5D8B75F2606\ +13E20B1EE4139336C61D8A:\ +5B9F108E5237283F7604755A66C7039707A4F9684E2338CB7D6A482AFE2C9731\ +76A677F96070F3EE33B8D8D998FDA5F069DB484100203A12CD391A22BD8F7B29:\ +A5A790C40965B84AB067FA5922009E07 + +4FB59B1ED90C36CD0C28F2F0D279BB9D5E5D94A6DA04AF685486F390512E2019\ +B52D7A9071189802E4FFA2CA4E296326522550946D732A257931E26E36BFD41A\ +004C7F97BB5EC4EFD784B99B867A2F844B46BAF818C1E037C69211B582B50BE2\ +3144649A634AB38990C661ACB406D64555F14BEB519FCC3DC6BF8AA73185FF05\ +5A492B352D132FE7C78C03E24AC8B79192EF4CD66CAC6B016D4BF93A7A6CD4C6\ +0874668923ECAA457777EA1E54A6E98468D38249311F0851DCC4E19C9DF27104\ +960A7EF0201C275C3C655253A7A2EC6EA6646A3B902B5DDD8777DFF198CF53B7\ +DBC5C6C829D124E037B2EEB9:\ +91FEAF2306AE92DF99A5D413C986D7D06B45B2EA0E8E8553F4E7D04033B9686C\ +C92E6973D9879D2CA91298ED62658A0065373E8CA3866E8247CE35211531FCE1\ +6DBAD3BEAE1F7ECBD12DB50CD7A0FFD71EAF4D78B49D195152CC3554D7B0FE8E\ +D823EFCF8D50B04AC29A693545ECD0E28C9A86DD0792C28DB180AA49457255D9\ +6BF52366F9B7F8795C621115BB279A41C0BA8717F78E1D435CB95318E3D5135C\ +9547C282A1B6EFB3E45A7ED6FC4188AD287AF31A1A7E0A5575E6629DCD887FC1\ +A4588FCD72A3F0B583F54F4E2D935BC2B9AD2416054788C66FF9C26722DC2AC3\ +57D1FD5FFE8E0F62232D5979:\ +E67C49419F1D5222C82277968F4779384D5E14BCBA0D82E2CA08C89039698260\ +6877BBBED4910D4F528D8F88292A536ABB9A22C4DB0B1B83F39D378926E65C16:\ +39EB8A50A2F50973CD9CC50F40EC7BD1 + +9B0A6E6FA2F5E85790DD8FE601DF3FBC730594CB17F3C316121247D4FDA4BF3A\ +9BDDA606FC1C51677889C06BCC2DD0C62DF691DE07286C4F8ADC3F4A3C3484EB\ +781791A674DEF2AEAF1F16E0610976464F604FD39041F9F09BD8DA76C83372ED\ +74BA6FD68970BC4852AE4DCB36DE5B332247091292F5F30CE7082DD5BEF7832C\ +24A4383FB8393E621FD236E0FD4AC6A6EEFC4D8BE56119EC1B9A1A5957BC2B86\ +4472FCB49DF058D11214AB5D2D36E725D3723C98387F3843252F57E5C0B31005\ +2BE2F4717A36906BBC488F55CCB2579DFDF30196F9E8E76E71FD945EC72FCD95\ +BFF63B1C849FDC9ABB19D35F98:\ +33173B3AED526C3591DFE6E7B745958C09CD37F7AD339CA4297EADA1C0D05182\ +5919AF11A19D5ACE70D2E11847EF986464FFC76A7D990B44043491D36AB79F2D\ +96592B737CBB6E616AF7CBF7ABAEBFC802E275F211F3DBF2BEDBA6F4032F358B\ +F57471C0DADD4FDE43E79E43651CBB7AC1B569BB39A806C95DFD06917FA9D204\ +BED020CB0552F7397C3C367C33CB48402E64960FF0BDB1D136D93F35C86019E7\ +5899F6B1225A6710307D746B4D1FB785140E54C41C762CD096ACF58ED4E06774\ +9F6023A5D7DBA91DDDD2838089BD65EE101A9CB598C265517E2DEFA2FE037D80\ +80C0CDC07E491EC4F2268C352D:\ +4C6A5C8B9AABBBBAAF5CFD10B6AC195305658BDAB4004C1A2CC18C885BC9F2AB\ +D48760202A127337E407AEBAC65E034CA296514EE608EA316EFABA9FF200E7F4:\ +F46B3C066EDA800E22901E58AFF9342B + +F118B740E9FEC223D34AE72DDD8716234352DBD6EB95CE9B85A00DCC2B4EB4A3\ +B20462DC2BBBC7B04431F1AB72CE140F939AA3C11B32EA01E148497FA2F9D760\ +A87212918C3995102505618FFBFD5262310E8CA6EEE4BD0FB86B1A2FE02DB352\ +79ED8A4739F6F396F57027464F71EAFEF1E1B0D63EE4B5B79DE6BFC008E77FE5\ +EB588F803CE241B30BD48B06743E8D980858530B9922C59A5216EE13932C60EB\ +20CECFABB3185642F19F67265CCBDD85539FE4908EDDD654C45F7EB3ECAACBCA\ +9AC1F31BF0E31DC452DBC7EF40CA019CA2B21ECD26ED22185722A6E026485998\ +BA653617E34A9DA2E7C1687222E6:\ +7396FD2E8123BAC09944100181773B6FBDC073F42D2CAD9B62E6C548645F06C0\ +9A501978DE9040AFB4D07077EB937F132B033F46EE9B6FEBB5521DEE7F068DFC\ +5AD3E07655E10041251021F73039CCDDF6BD803D439DBFCC28F9BE26FF3BB172\ +58FDD5A4BFA3838741DDC93F3C880973BDCEBBF0DB7213AD378303EFF4E0F453\ +338E1B316A03F0D5F3758B1028E3BCF7DA00264DC2BAC3C01DC9CD2B05B2298E\ +2DD4A701A0345C096ADA401C28C54095185CA95C7C8572E92AA2B1D9523396E9\ +C0ABF49E2A99A64D27896708604C57698824C491ED3FDD5A3ECFF465AC9B33C1\ +5AF5171B12F5A69C2FC81F17541F:\ +B1D9AADD09F509BC9BFF419E371C734CAFE36CEB562D52316E0C654BE2725393\ +842A35BDC455F5D21B39109078348713E3D085D9164D036FF61711549EB75DDA:\ +C4E3E7806417443BEF2BAA322442D914 + +BAFF8BAD4027EE53B929B20A53DC09F593550E56BA260C95378819539279737C\ +1BB23613187BD077C4AB661AD688AB6D13FB6B6AA7D260B2B6B98D549A75BE38\ +D67FA934AD3CCC92BD87D86901DC475B9FB88833A5083172DBFEDA681FFEFC28\ +638E31C7F168D2278B75460A8F777718DD22A992731417879FCC33A0D11EBF3E\ +4D3FB426C053D647D4290AE61A0FC219FBC5E4D5EE0BD417EF425B2FFC2F3749\ +A7EEC397F4D1869F7207FDD33018684ED194C5FC540B3876710B2A611F73283C\ +BAACFACAF955AA9D837241C3AF2696E787139CD12E66361F4A0361E1C1C917F0\ +758023B913AF679F7C119FA9E96873:\ +BADEEB9DD59EA5BCE0705208F3576C6A4C8A4B5872FD259BDE0864BFF2FC414C\ +C535B7262BD4E90A3F4C0285AE70AEA2E2AD45DB2D35888B7123972E4D3979BC\ +F7ADC056360F8BA474EFADCB0F3D6BA52716B562F8364DACB6F2614A593EDA8B\ +CFAF85A1DAF1FFB972970FFACE83A4D0E9FDE6477A1E075152A63A06C47DB6B3\ +DF8D9196EFC0F94C457D4510963B799D422365DA5FD46BC14B444C05EDB95D0D\ +54FBA04CC3FA039390567D1D1F1277CA7268ADA9874CDD01AE390703DC76CF32\ +B797C30FCB627136617B87E093F76BB534FAB041C688CEDD8E0C62F147022AC3\ +2C8BE77E4663AFB238CEAF9E5B24BB:\ +442E1B62331D606EF0AA5CBFAB72538FF3A780E0F1C937FF74DC55486704FFBF\ +E16E93A4A8D9F4F0904270485398DC9FCAC96D165435DC5E06CC9CF7F4920CD9:\ +02F7BA33BB45EB68B442C12B791B7185 + +0D39B8516FAD8010419EC380123F1A9D416DD87CFAB9C4CE4B444C76B924AE46\ +1539BEEE41C9C7E0A226E33856253A9CCF4B4F4FF9C560D0D31DA2581FC0EEC3\ +DE64BB7A6825C5C422A1E97AA97595824EC61D8FC4CE816708FD82446478EA48\ +B3514D5A6788D1BFCB87558647F5151ADE70A0B900CCD32B39CC5915536FF888\ +943CBD1A5AB4E1F607AA6BCFECED73FF0E118BC6B9819597FE0088925D0BCAFA\ +96331C6B212460636EE6FE7D92237C560226C7187BBBE53E2F4752E5066B0E06\ +EF8E0B4724405840AB3FD7FBD19E3786EE8C280DE59A4D34682B217F39B24B59\ +1875C836845569E519BBE00E81A29946:\ +AD185526230E83DDDA6AD67353DB2E8508E1D6D54393268210A47D6086C41846\ +7BBFE8C3593CB544EDAAA750A68C6CD90B9AAD84D51149F4B506B74C9F3FD257\ +44E4FB7A7B84EB5D263AA828CF11A83053BF8B884301DA354A8019A86A04DDE1\ +EB578CC28BB61758E6835D22ACC3DB84D3FD7F92C866A71DE9B2CD48C8668301\ +9F6DCDE67DBE0BCE8F524D59E1BB372AAD5DC457FA4DD0DC50A5DE99E0FA9EB6\ +844FCA13C8D4F3B9735DCC93CF43890FB2029BAD90464809ACD5B0F63F87FC5A\ +2FC2FCF47B5B9B6C6CA28572061255E82BEA353353B909301FB1A1DD8274A158\ +2913829ADE95599393180F846F8A6B6E:\ +27F48E7753EAB3F9EB99BF76C80532415C7C01F8C7BA151694F7783F569BF103\ +A1CB71776AAA975BE0F2EFFEB825160FF0061EAB963341645F71DB9B60FC6110:\ +CA36082A7A37E54A96EA1C5610A58846 + +358CB82F5FEC1544203BA1B24F47A333DA1968646812C062D66CF9B35368D843\ +BEDCE6E8DD86F6417206E4343EAD88DBD47E80133441D738060A49194F69B492\ +9C5DF8C1E74F0F80328199ADE35B6D269833285D7D9373D1AE32DB5190F7F14B\ +6106D4251A7C4745C344F3F8397988428C14FCAB57D486E4F68FEA2AB7A39511\ +F0659A739ED7722DAD110BD29776F10700C0A16B260CBECFE9642FB1AD5B9105\ +FE2E9D175BA2D2122F5AE6514B6E4A20210EE5D036F9652CF582DD44F65C71E3\ +8488BEE6D4EF5B0FB6A40D68DF0CE00EC119C55C45CB0405A84BD4F366386846\ +43F6F97DE74BA8BCC4C03F41CA84F54B2B:\ +7FB17EC23C55F6151FE9D376BC3E5227068DB74E48F296A152303AEDB043BB55\ +8CA8415E0FB2F271E8F8F589E72643C7F3CB6982589225B158E5612E04B99CEB\ +909D2CDBAF9067BD5E2EAB1967EA1054FD3BA6D55D8B01E2358FDDD94E47CF74\ +DF1BFC613F49D2642725186DC2C4E1C2CE51885F373CA2A81604CEC4FB8BFA6B\ +2A57BAA46CEB759D14C26BCAAAF87DD1AA01CBFD53DFA53D7EE986AC70CE660D\ +86B4460118789694F7DF1029AC3DEE4F8FF04E6C474ADCE9ACB8F4B7CFF48947\ +D920826372B0877F293850D42540CF84E4A26D7453721AC406890CA4C3F96FD8\ +86FFF8D44D2DB0288FA154DA1B62E535BB:\ +25E2B8C88A0F8CAD2F66A7261A34869EBBF63A436A4A64E8EB2FDB39D2AD7697\ +1C981FC7DB4A7ADE918AB66D00AE3C06F7A38BAB2937D01756D4AF37887E9724:\ +9FBCEBF211BA9F0B6FB9A90AB2520A8F + +B3A1D5097071B378A9EDD5837F88BFE64CF820186B183B1F85A5B13FFB2334EF\ +B1D8B3E29B1BBBB2CE0BEF1070F1873FA75F33B2425906968D1761ED9B186CD0\ +34A851F662B3A0719E0ECCE1F7AEA86F9EF9469C61220F6BBAC363BFEF05493A\ +839B1962ABE241937EA64E4B4E0A73F8C20BD9BAABBB58477209A5C168EA4DEA\ +F3AE763E6138D845DDD6DA7E98F9C110798318E64905EB77F3673E71403AC2A8\ +EC18E7D261ADB7D497689FAC8CFFFADB0BE4E53459044D6D42BF7E977F1FD744\ +8DF152C530F9932B7A366EF95062E6B26E398B12AA322DCA7B6859219906D99A\ +F918553455140D9288F63BD7B988715A4539:\ +B74BB164D4A015FDDBA0D7CDE1F7A941A80743CA9CC57F4B20A5C20E4467802E\ +B47D652825F844D79B7F0061C53B3C169962FEF6C50739AF37E9D6C6D0EDAAEB\ +338BBE74B270EE58BB356F44E3EC9D44966DA8F7A6187C911271C22B275A4677\ +D31479AADC3D1F9C406EDA017B161F09763270E25E8F3300608329D98757FA6B\ +8683E67AF2346E6CD39B17F422833E91F47BC5D0BBF63D4961DEF6E0330A3427\ +59E859084B05B6C0981B8DCA0417FAB91E101423473007144564B008C74ACEBF\ +5A1DC1AC99E33FDEA99DADF1444EB065CFC021B64852ABBE903E14CC61257818\ +C6BC61348948EB05D3A283F5BEF38C6218D9:\ +9FAF194EC6AA5E6CA911A13252AB8719AD77F50ACCB426D6E567715C7BC5CB6A\ +C0A75A6EC870F00338549BDF1E6E309A5FEA74575F55DE4191A9D7CD23017E33:\ +1D07182FC4954198732B4AC989D44012 + +5A1AA96ECBB3C5C3E135831325444191F023D55F57C10C2F1851555BD333A854\ +25BD2850B2BC0CD46DA792BF541B3FD8614D1E1B031E2BC3864E18475C2E8C83\ +FB81AD05F59BB426BA17876E9050A02B63DBE2B7A8B6E5145DA9F5A1261DEAB8\ +793E89034E5F4201F9230C36FBDEC953BF3A5290BED68FEEE2C5EB68A46BAB12\ +1B5DBC840F5C6FE2F5E7B7CB97D880BA95304FBEE3A76D066BF874B6912479B1\ +5F45AF759A189D73120954F2B6EC8BE752551DFF00595E384765C00385DE5950\ +1D25F05243C3B721B6F5F8E80AA7338CB6A6C1F92A670600759C2AA3FCD1E350\ +762409D0C999ED1BDA7E00F5A85C857DB9D6BE:\ +25475474EA6E2043BEAB78EBEF2E4174B0AF2322D4C45EE9DBF6FBD04BB05059\ +5F894BFA57574071A0EA81491D816310CDA693C2020F14F3952DC14B20D270E4\ +636CABA1C6E3374EF91E048FE9CEE6776D767A579DFA42A5B7797523DADFEE65\ +25605A5281AD6A30BBFDDC32E7D2CC782A1C06264807E4E8966880DEF8F910AE\ +679F4CC0D52850C400192E70E60B496D9F3F94BEE515CFD74E28DC45CD054CA6\ +748350420DDB870FC139BA3D4F33253E5036D5A1BFAF91BB8433761AD43ABDD2\ +D995B4AE3E0D246925907A38F69D07AA57E4DAB26A0AC1EB1A9BA33CEC87C1FA\ +36B2309820A59032B134864F85F5F10390C94A:\ +6894A39E8F6B6657712E7F71F3E0E0E44507ECBB138EC3A7EDD33FC04DDF9EA5\ +5DA6666267E670E37B7C6CCF87DC2D2B0129627F190A75CB0AD527BC4ECAB443:\ +74E9B32C230BF80728C3D748E53E9E67 + +4BA6DE3707E14FFD21F3AF4E2C4CB03AAE76D32C39F03C1B5436BDBA57FD276E\ +527F93440F3BDBC2FA47F02CFF7182F07391EF0A458151E1E1C8291FBB9D0C0F\ +909ADDD916AF7E6101F62395F13EB1D1F2E78CB3B847230E38631C56E7A130A6\ +A506967AB287C8E3877ED25B4480574A04B371236546E21F90F9EE56E434C4CB\ +CE8F289C243191BD7D21AADD47C599D0B560CEA26CF7ABA5230C0CB308D82179\ +C405706D86552DD484B141623D6CFCDE54240130A87F755C81CB28D833683F12\ +5D6E55B97C2BE32BFE12793DBDDAEBC6E97BB357CD163C71730D3061BCC49A56\ +831035053B51F373D9FE6BD7C70755CE371F0985:\ +9A61431066681E479E1AAB08FFEA9B8210687A39ECB084C609FE34F61DFF7A1E\ +30324438931A5B4C5DF5D37F5ED94E90CF9D6C33D993B6B63129FD8E7F01125C\ +23E9CD03EFD5EBB65C887E527D9E64DE2B736E61F094CCF3756DA7378185CDAB\ +2EAB41B490F3A42FFC626B32672131325FE3724EDBF4A0EDE7A69F51DA235479\ +CE4BD74355E066E88F2541C7FF7B4023E6C10E680B64A682CE0280CEA3765014\ +326AD244B4F2FCD136637C859881E2125E25AA0DB6685A3A76BC3259D375176F\ +CB3D59295B2211C66ABCCB777729F8FBAC5BB8CBE7F30D412354D23BFCE03F16\ +0AB296CD20BA976F78B0BEC6A25A8E8ABC80E6AB:\ +0CB5720653ABD543CF56405DFBE9E16F4C1F3FA85F6056621FFFDC660D14F460\ +0C264A246CD7D3DFE72A7A6E2E92DE3E5C1BD269F85822C2A53B4F030B347D08:\ +09F2EF7BBF205D0D19C631099B4DF108 + +21E04706952DBE1139F0D5BB48607E166FFAB49106D572C3A157518189C9C75C\ +B5EEEE4F48B66781900D757A6CF867575F2DC01B96D453E3C146B20EC1365416\ +01C1A1DBF73B8B0BD70510BC267767A69F6E76824D9BF872F8DC197C8992B9F7\ +3D39BA8A3EFBBA43765245E9F9694D16A65CF30955F3252B30EAD9E61D96759A\ +8711ED527EBDBE0DA3A868F4C86965325F3816ABFCE2861878DC18D29396E166\ +4EC717935708F8E17F0553A1C0AE8D51C2A6899412130021A1CA8E9157CAFEF5\ +78FBAF304016D4B9DA8CF076C8B9D21FCDD5F0789F85E6E5410ABE32A702F77E\ +004E7E38AB4EBB9D837DA601D9B2A0FAA9E1B17CC1:\ +6CDF3A7C9B35B6763DDFE061E3EF275DE2DE317FCDF8082CB1E9748FBF645D20\ +25B035DDAEDBA18B1140384B0311B1EC746C10A461D89D4802D05297C57313DB\ +1CA0005580A00FCF4127B2406AD66F4CED6C15C61B8543D65CE8C87244BD9F4A\ +12686015CF2F1051CDBF84141AE68B38A09133152BD2D6E6A8288DBA5FD33FE0\ +2AC7DB872D3C7D14B8D4C142A99354115E69F7702221E8178E8832EC478FC388\ +C9B73CC383F6FAD68AD68C6D555CEB9B14860A9A38A501EAA2F34226B390344D\ +220097809356DDBD8AE01464A228D3C8BB9711133E7B4A6EC9A0CDA7AFE0D90F\ +E2BD7C97003692249452C1D4EE723F9F9C93A6BBBE:\ +65CA2CC54575DE5EA0C216C07797381D5FB65A9D334B94F3CC0B19DE8197D724\ +1B9A666BC1F8A3146F64850F503C8FFA4177E22AD8A9A5CB55FF7451DA3D4ED0:\ +ACC65AE9781DBBA0B21188A18AF04BF4 + +B1F770905E832BF875484FEE15A26F8A0014A614CA9D74FB1594DF831802C3EA\ +53FE84804766C6DC4BF4D02F5D01ADB41C40B2510EE26615DFD979D470736911\ +AB6FD0273CE3F6D982646051985AA6D332FAF260D53C57DE0F6E84E685775AC6\ +D300C36B871520548AB57D990CFDC2D6A1F1839540066B7F2103D4554490E76A\ +A70CD15AD45605D14B1AB1D15294D7C1AEBFABDE479380EB1527F7306CC9A7A5\ +6EDDA752050AB8C72D793B36F02A3431D8F8B4C9F6998CB05CE803477F36367B\ +671DFBFCD50D4EFA21E937F86CADD0BFFB434A7E309727C1DB30A2924DEEAAE6\ +42E49447D5EACAEF29A5A4EC5D0C68269FDCDBAD0794:\ +02121075F6F40403F77EA8B9596CF8DF247BB25D3CC6F0F0362C000430CA63EA\ +3D26ED1C5946E86F7C8A04A3F26D96CBAA130A636FB629B22B2C6A394995BC4F\ +832527BC33EF415ACE90A92D9164D2079D21F439DB9CEB3BC63F6BCB6ABE08E2\ +282CCFEEF210AC25F3443646C3E92A31D9EF2D7B9BBD1F0BA812DCAA643CBD89\ +183AD44E8F08C0920BC07A05C2FA80626A85CBFC8063B662F8D09F8F6AC83CCD\ +807B5B98DE32012D1C91EBE313FE6811D4AA366B0E01A3B71B1981CE320A7D17\ +BE524EEDB9D68123A2E36E6FD83DB65CB4E9271FEECD82959572314D38C31245\ +4F3EC73652B030C49E6B08759B87549444E1CF99F587:\ +3834A666AD82D3E981740807F4EDA8B85A43B33B24BEC0DAB23E534191CE396C\ +BD7CDA5344D324FA735C391FC4909183289F11DB275431FB019DE9D984DE983C:\ +F2F696A6B2DFFBCB20A62D2F37378E85 + +E041C65BCE08FB8F211263845C478B2B8E3BB602226C90D364DDA7DF90A7AF0D\ +CCE5249FBD86B34FFB42CC7EA11ACC32FCC4C283DA90B5658DFC459D9162D1A6\ +CFB9F039A7770576DB8FDDC8DED46D0028FBDE949FF9CBB4BFC0B669E31D48C3\ +5F216B4A19A38B54B56CD6D2537B074CC68E1E3F5380D92103C547A62BAB4CD8\ +2AA2DA1DB3FC7854A1946ED8C1BFB77FA155507088B396987612CE4A3791D866\ +878C2A06FDDB309FB3585573565221A6CCF9CE3645C68909E022A8D6FA4C1A30\ +5EF998E1B5A389CB1C82DBC8AAE6141ADE34609D565BF10577271833E4968897\ +19026D543637472A7DAB0FEC68F83BD903AAC38605A041:\ +66BDDD3C18E60D5FB2FEF68782AF56D3ADEF6C604A690EFB0FC523B64DA53C14\ +CF05CD0561BB8FA24371ECB60E4B7D78F43AFB352B7946BC880D90307D175FAB\ +5A6A1E7BFED40C334BF884D2A77CB0866D02EEC3BD1E9355E85E5E6F3DB94A33\ +8C27A028530EFDB109207F57CA91F5920146E463CF178F77E7535E7BA1E6EE6B\ +8861BDCD6EC00145754B4A0DA0F97F58ECB223192007DD008CC0F8C59C44A3F7\ +A19A4AF48E81F13AD5AA6E71B6B497B659EEB947009DD905F8ED34CD7F4EA69D\ +700040CB104C2E60F8654FD6E1CDF8A8550EEAC231B9CB3DBA9984902C61A531\ +8BD12839B39C27934EB4F0A4D0CCA9620DA569D7667D2A:\ +A0403EFD4F0B35C28E10BB35B47763AACD8548B792C46FCAFFD680A1FCDE4468\ +6E3A17283579ED029082A33EF635FF943FA6D1719FFF17DEBC1D29837AA21EB4:\ +C4D8B9557760CB777ACAAABC5309F74F + +99A35B8CBB3468CAAC183AC1F7C4992B3B8A051FC7431535DAF3A50260199EA8\ +8D23813F3B02E8F93969AF1020BAD0C709E927BD4F5B2AC2904C5BFCD376D68D\ +8F99164BF14CD9520E9C09161020D124FA6BFD3D37328BDC4915A7738EA9007F\ +19C0968EA8667EF7E89515DEEC810B843090E08946ECA12C16F66B29092CB7B7\ +DBF9E92430712CF507BA2F3FFE56359113D32400EB820912635AF043B1270EEB\ +33875F0A78CF01241FFF4404A778788B01DD58B6F9813EBA812378E8F1D69858\ +6F356D1C6A250A60F49F3F1ABB4468F35BF1D0197F186F4EA6B763396FC76003\ +D73A54CD24031E5BF45F04FABFF68A8C41170AFD58DF3D27:\ +AFE01B7B56E7CB1FD48F07E5F7C523AF7DBD20B5F7BDEE8BD3FC023C9C862DAA\ +CD83373311124E8716BCBF1DAAAE8A7832DA9CBC50B8237109F5115296DFFC9A\ +6ACC8ABD041A54B70D1D2437F1DB20EEF1974BA42144F6B48F16A49D955F34F9\ +2CF13CE98ADD4DA91B8C96E63A3CCEB96441CE5D47726748697901BA4DF2DDF2\ +0F87787FA467F5F718B801B04E005B5F2A9B592B4D836EE6CC22C63A126E45FA\ +419CA63D19B77EFDC30009FF279356D4BEF70546D73105EE2F5D98CB9B8A8802\ +52D094AAF9E9F0638EAAA3A6141AF1BF3923953BEB97A42B84F977CFA55D50AF\ +0C720D0B55574FD16FB96409CFB8D69176E25C796905FF45:\ +912CE1C64EB95CC07A798D2498723F2691C299D97B71FC103BF31ABDA26547BF\ +002BC1286DF4CD0190AB3D9406D1EE6400C022FDC68984E618D8017B3AC80F75:\ +D370B66E892B3B74D93B9AED10FAEC7D + +1D317168EC455679C436EC126E5DA02AE5DBD8F984A3907CE180CDFBD17BAB63\ +E42B15466E2A57A39B1544DC5508F3E34FB83EADE55DCC3315231760FDDB06CD\ +7A117DD153DEEB2C320871438685ABFF3F9F8DDE4E41F30C81D55448AD225468\ +B5E4BFD22E0B8BDD3D174D5133C6FE0D60BF48658FD108682F735E0B04BD2B2D\ +86E37CF5F72901BBA8ED0E7A9AD87659D1DA6FCABDDDB148C8272761B80B6A2A\ +8ECF37BF89B36BF89500756C6F481DB7C2BA4FCA1FC19B0119154E99172AD561\ +ED6C001FC1021F3F2F179FAE11FB380C49189CCCB01941B314B9775C131C2C7A\ +6EB531354C60F86C82AEA534E706093D3BB11D016A5838075C:\ +A3F7CBB2E8A0326FF75B80C4594DCE6CE266EF13B99D1FBF7FB34A77D5F857C7\ +21BAFE6C6C9D48C4CD1C8796111214433368D324B21C84EF82828A73F9EC8682\ +D9DFB9B4B428E14C9C16044EEDFB3F8C980636E6195BBBA9F0B92C94FDF6B274\ +FBF6C25F33962E57B4F94FA7FDE4B8FFC91D63F0189D4D9A010FAA3ACF444B00\ +B3A957D6219500C1885BF14EFD3E9879E0A5FA76FF3AD6F70BB4C0A87CDC1CFD\ +B082FE33F5FB6349CBD197271D81ED96D6A7820A69F0A907DEEFFDCBD655A245\ +47BA43AE78EAD99365BD0E836EFF16C789843A7F1E321C18E4D81BC334DBA3B3\ +57B1BD1107CD3DDE2E9BE8FCB9423C556A8FDFD07937705B8C:\ +8666320110FA484315410D173EC7F46D9C8527B8D0F702061C1CC524C33923E1\ +5E9D807277B323CE12A01D7E88041E47242C9BA86595C8F2CF212955FEDDA109:\ +47609FC73A46E39B8534D1E0E133C415 + +0D8F39796F3E3A18B928B368341684C7A4E7105C6447243D6E3C9A10562DE3A5\ +3F878AB599276D94B20B85372CC132CB2BB64278BBB7DF478138032EE2D56595\ +F0B01A915C73FA6B6EE6ED29FBA4AA74A73CD3B29DE16C6B177AA811897612C9\ +722EEB37D2C51FA0BDF2BB6B0D1AB7F0E636168EF6DFD9499B2EF05C475C231A\ +4CC63D2924942C817076E522FB6D8E5B7427EF49E4FA59C72C7C3FEB1458CF44\ +EB44042601EF3C0E1A3E17A52C2CA9A6E29C8DB633691F8A4A0FFA04BCBE6EC7\ +0F8028AA975A47F94B8455DADFA6F6D4F195B8D36377619C5872AB30DFBE8937\ +FDC740B96483F62DABA87B92AA7EB6E7600181F0C8C44A8977F3:\ +D8ED7819D1262A5B1579C694CF46132E13B82A25AF23B3ECEF5999A290993654\ +102500A024CA653258EA4581B1ED33182FEE3B91FDF0350CF991E22A876738FE\ +3AFFFFCF90AA3CAD3A462F08E92FAC53066EA8E41EB56B57AD696B3A4251B10D\ +A5A140CCB1AC09D2D969D9B8BFB0FECC72CA5EB8EA46D5EDE37480F269FA5CAD\ +08939B247124D49F1A929BAED9B021B1D0996E5F3EC22A7BEB37069A7495DC5A\ +4611D521FCBCDD4652C0412441A98146C56E6A9222EBE8C989869C77C6F0E37E\ +0BAA5FE9367635D937B3D274928A831362EFF700DAC6663D7F1600C2ECF299D7\ +D7CBEC3EFC82E453F7EDA0AF7385C2087A07731B9C61DA475D52:\ +249DD0E25FF78EC529608091F46CD9CE99CEC6B7B62D697174029CCF46AE0C4E\ +25A4BABB6878B083F66398325BDE5560FDA16A0EF8B230B61A84E80DFD278893:\ +BA52AADAFEDA198565D78AC8965A3633 + +F2408E4A597598BDEDAC5F66B877DA1A9C9B673EA3F95625035C5D74F3A82079\ +B7F39713AC3272532775478DEFA05BEAC846997F48C94C3B10A77559946FE96C\ +4F8957F7512EEFC60B599FDDFC46ACEBF46EDF156BFCA19B5928A0C518159F97\ +CCA85CE3F3738B2A6C9626F6EA87BD06B24F250E098768620E9E23FA87E828A3\ +2C03A36F90E228C4C71CAE3011B4B30ED16ED4C8DE6C534E2CC683FAC179F776\ +D524A3C128AC158349830E222E75F36AC6C404C53083DECA6AB852D5CFAECFC4\ +1E7FEB2D02EB47624B3C4972862C7C53BA6EE20EBFA2AA127E1E1759D983F5AF\ +3BDD793D8B6C13A42072A5976231A7C5B8435E145BAD599E422DA9:\ +E3877C96606320F9DC31CBEC621FFD5ADE7FF6770200998F04C1A94C816BFF0B\ +9D8E2033CD351982BE55D599BC2F3FBAD0159B57FED2CC82ACA9F20E7A96ABF4\ +DE4A308F2E589B84D91357812519BE6E37AD366A81FA1E4B74AB2122F38E79C8\ +B23120DECBF0D4BBAA7D1A9FB22216AD05AEA9165F2F8D427B3C77AB682B8CBD\ +4CDB960EEF145586E7F44E8EC4F7004AA028B3910075476B408C94216CBEE652\ +CAE307A5C05EEB1E20C37B66EB81A3DDD02A64DA5B857503B0ED2673D7A9C2F6\ +D36EE53B0F00B82FFC57A4591EC211D2EE8FF8419C3AD0E336A4E94EBA86FF3D\ +6D57C452E03A96E77CB24882F506C1B86623812043CF2C497051D2:\ +8950414F1BCB1E1544D93AB18F0E83153965C357FB26050948F33DECF9F9F5BB\ +F66683508118893287359273A85BF78A8236B65DE562C3FCDFD4550A11C75E3E:\ +CB53400A63F6B7D3186C49C6B5D065F1 + +DA3328D37C10F1086C15DA70960FFFAADFB7DF05D6E3571DE07FE15A260D5B99\ +0242820581E55FF826C0954548F4C0A4FE01A3A2998F3812EEFC4A69086575CE\ +8A0E42687BB45303734D77D84F9A890B830B5ACC74171CFB30C5BBA4ED207C08\ +7994EE29258B88CA29E278294C7A21E68348A3EA426E30E28B3A900712726050\ +CE2F40E31F9AFFCE4E42C28C29990D53D0514863A133A972EC26AE3AD8D0279E\ +02C96C00FE3CE5C40FFECC392B681F5349C77DD68470103113270091E7B596B8\ +926A143535DBC11B947281D725EDB073A9D7062715472FA1DB987CE8D36ED423\ +C2AADB5906C4D91784400E572AF75D471A64178715E4AE22B6EED796:\ +E317060435ADFC840E830F0C853A5369D30DD666E5ED98417409E546A891829F\ +DDF8A9E55284EAB364ED012B91DED2CDE5512220D6480FD64A78AD1C50170962\ +7AC3AB9416828973466FA127D0C6E168F42C8D0B60AD7ABAE72A8A8A19FCC6E1\ +3B65F5431869F61E4972E75E135025DEA54EA4933B6548320E398639BECB0F48\ +B2C4DE093FBFEDFD7CDB62A98CBC58F1C9F9581E1DACB1B6EFEA494C36D3A22C\ +5464612867466D19BE3E17CEE1140FFB3CC51CF6C3E3D0CB98DB5458CDB9CF69\ +E53BB57A2DCEDBBA2916E8E7C822254F0365B75D38CAE4C4DB97194E3EBEF5FB\ +0A1DA02D9D1ADA33CED23283F8DA97F1AD6050CF7BC4C824DD55A6C8:\ +50169CD100CCA22E4BF9E524770154CCFE9AD9EBFAE0C30C4641B73991ABA690\ +6592A2F3D0F2F48ABE13BEA89DC2B2EA93A5EDD8066BF1C31A4FB2006BD24EAE:\ +99D8AE326A10284D8FDDC06AA5F4BDF7 + +C22F2380493B5CC7EA4E59998252ACB600E61ECF8E6C2B121955C0F149DD9518\ +6EF33D66D573B6C6CF7EEE29F63CF1524CA027B67B30E92275D6F22CB81BE477\ +B002EC5ED16979BD696AB7A874866AD0171FF9B2D5F592617636CDD3A55C7857\ +8AD48CA803D73114C340B003D1BEF92993C3BD34ADB18AFD85BAB43C3720626B\ +A944243050868607C1795A453A13F132E035CD2B451E1B0AAD50FC27C5C1A3EF\ +7822AE6F530DB626B223E803584E23B6AF181E7AF4974ABAC12E42B44B56106D\ +D2FE49E08AACCD0DEBC1FFACA6DC3D277740059DDDB727EA1D7FD8C63B6FF768\ +FA2F0B8BD1C01D36CB5A190367EF7A78F1C790B50012C0FA24A3A6F995:\ +C80CB1B8AA44DDD9A7EB1D83074BE67B2E098C26BB1CB39113E3E14EFED0D337\ +0F645D43BA316060929338C549B908325BBBEEB8DA5DFCB1CC3EAAEEF471E424\ +7A2304786E1CBCC27052D267216F6AA741E7C392ECA0B9E83CA4EC13962853A0\ +E2A7F1C27D96D71C327777DF31A931525110D10EC33BDED7C7AD64FA05AFB97F\ +D91E31B4CE51740273E481640562201F2C19E67622D875573CFC0F9C4D31E882\ +B8CFE37541B0C4F072AD9E9F0261AE9D709A54C98572484DD42DAD163F33C1D6\ +254A80182934E8190AD1CB29F15D4913BAD2E7C93F7AA95C3782D50FAADC449D\ +A4AE98435EFA80BE52F80BF6DB60B27FDA6457E7426B0BA6393364F2F7:\ +FBDF921C80DA76FDF559BC8937823F8F7DB7096F164B9AFE49AC9268653A0736\ +1C62830DBD18A491DB9A7654E8C19613A284C35D7169D2E4DB3A3FE21B541C98:\ +FA8CF9134AC279FA9BEEB5110D322B72 + +263A9E751DDC9D7C8ABBABE64FFFE976C9BC41EB468B8319C94357AC1ABEFF93\ +6318CE13EB15EBF7E8E03340B7521EF7E83F68E22C40711A3227A05722B0F291\ +13DEFC3AAB5A078F1348035FF896DBF1AFD965B5E3788781994394A9B4004186\ +4AC70C6FA5B874024828F170DC039F8EC2D5B75F4469E16DFDF418E77E64BB6D\ +B444DBD58A06DA728632FDF1B4DBEC3B304DB33973768745B598739882003108\ +99FC8804AE157EAE270F4B8641A8A00A0B65A9D7B1C2C19301BA7B7DB39C9443\ +5FF3F0D1C59577ED3A71EA0AD377CE7FBEA781A876927C202249CF116B58740A\ +F6D93B57240EE900064C7F6227719E4737E9FFE3FCF42CAAF6EF326EE3BE:\ +58806A677977E5979EA8717ED88D5B141A6584839BF7B00D9C51D21C93463B8D\ +B59661EFD9E9925769DB1227B0AC23DBC3434E28DAD180B39A98C9876FB37DEF\ +3959A5B75E41AC5B339645F25A9D1E72A5CB01D5C4E5EB8129CF457D802F02CC\ +E979B42C2E288639EF8560D82A6A7F5D08FDC01B6AE4C0A0D3DFD4C34E146375\ +51D4731C9F780D09E22AE5AE5EAB5BCBCC9ECC35B3C546383722B3A74585ED67\ +9E8A9E58878F075858158784CE31A1C57C3A396C8D01431C41E102B41C6A8BFD\ +1AAD0AF3392414155DD615650C1388F2C158728FEADFDE384933F87B64E33204\ +6647522A67D5BDEBE4ED90577956B325107B837079A7D994102E78ABDED7:\ +BE5FA91C4BBB3884D6E5F8BC9EF746EAAC06BF3C093D68A2CEA6DB22A084E9E2\ +C63EA8FBB38D376C0B981637B712E5F2A46999FC7929A998FEC0A842AE40DC22:\ +8C5CD690539E81D98C73EB06645624D5 + +5F9E8D18BD77176BBFB38BB8A3427D899B24EF227C7FF3FE0EB545C3CFFA119E\ +687C72C865452F5E0D530CC96B79AD199D26F8E95D163C35C65CF7AFF4B62AE7\ +51FF396F895C4C5D3D4F243B9ED9CB291BD75EEC5A19976B26E0650AFD84F08A\ +487CB66AF7560C1C0D59DDE2C36BB7F9927A5073113D5D5BA2AF3012975C2B40\ +17BC50929C94C6222FB33B6C171B1D34D24C68EA1088F43C27F2D83D9366E4DF\ +3F6C675CAB04E9FB4B3B8613752A1E8F7A0D1030DA1C3E56D81A2E599AFC9E6B\ +2E084776F722D30B301132EF671BA32FA9E9ACE5007273DD94B2C393507832C9\ +233211740D2A173D4925C383AF898515155B27E9E08BA8D6F50CD60E8ABD8E:\ +5FCD2A960BA94A7BDE02789ADA3E2D25FF7AAEDE6BBF3267AAA6D99E276357D7\ +2DA671FDE45FC4A8414E47F913A4FC09DA9CC52C8F3538A47DC0E6DBA786A6BF\ +88F951E9E1CEDF38580177FC3B01F6B458E9B66876A46EEB457FD0FDEA030C6F\ +4ECAB1446607E8E4D95E89FC78A8E6650A6D849816F7AA3B322EF23452421D67\ +A33DE3867611EC24B7155EE33592D22364985D03A3D61DAF2CC8566EF9EDB63F\ +05270BD5C0D651306476DD62FAE9545DC1372E2E803D4617849BDEC2AB59B14D\ +4691E3C4B2D9F58BF083EB2D6A342AF825C67393B1C06E6952667F7D7D098DF7\ +FF709A83F3B36B1C84B4582EC3BAD62E01DCE7C14DD3580BB5B6EAE8F9F42A:\ +BFB8460C7B07214B606A4BA04ED62317A5770D110C84BC75B64D2AF31F76D00A\ +A2BBDCAE156A3EFD4604336BD3B690A592A5457511A8E3E4B6FC0DF8286E39EF:\ +7510B7E888B269F890C3371F636C4577 + +88CF2CD030D671A3407CC780E1229722F72271E9BBCDC01DFE11C94989AAE8EA\ +DF8BFDC610DB7EEA6F22D5599A81FAA2DC4895CDFFB30B65DB1A28DBF334FA5B\ +C7657D59F2A99C3BF96A713A0F0C984E93D9B3E566629D9327ACB2AE7078A026\ +ED4FE89BB0AD6DED7748FA222FDEEC3953A27892F6109BF67669AEB9D725542E\ +10C583AE3A00D9A2D0BB642BE1D553E7DEC70499B91F6C7906379B1CE62E4DB3\ +781BF9B40ECD87DC687E7EE5280EA0D338A62BDCE0315D69A801F45B6476008C\ +6B3FF9514B2ABD23B2A3177E41BFF3BC664C58FD09B8868D2C4DEC07B3B2769E\ +AD72C76EEADD4682A34C27DE98EB7817E36EE71A5EF9CB052DAFD65B9311ED1C:\ +E2047BCF89F120DD00E2AB2682E9798BBF01A16D3C55EBB5D12641BE5E43C69E\ +27CF8316A17BF17BA6F977B2E10CF8FDD9A1498EF440969590BC10139E909083\ +B2131B1DB88EF790A9541108A1C3CF6782CA7CA63C74A2E6BCDD1FB7A805C9A9\ +00ADDFC7B232CA7FFF09DA514ADFC666B1ACC86357AD2C12E9D6C2A8BC5C3AB8\ +C4DF5FD895C568BB824FC39DA96924054CB70B7CCB6DB1756143035D5D212522\ +5026303C3270E8FE0F83DD54DD12E133DEFC481157BB2BA5CD37A2B93C2B21F8\ +57ADDFF8CDDA74E1A713E8D4E44D30B8EDBD13B2AFB9CD1F2D97283F9F53888D\ +5B59F98C66DE5FA2950588DF3E3641C52517F6F0717C4F14F7F778E405F74AAC:\ +44765C5ED4BAA0FF3FCFC4B6E574E7C640A221F64B699C61D4A96BB405EFF36F\ +65A4957CA57D8EFA04EFCE61DE4F91F476F8951885AD50D842EAA74E9A75A577:\ +DA1A035D2F281D6962301C515C21AAAD 53514C69746520666F726D6174203300040001010040202091E4F9BE00000000\ 0000000000000000000000020000000100000000000000000000000100000000\ @@ -24459,6 +32644,4160 @@ E05D89E412243366DC2947F3418198FF5A0A38A383354ACDB3B2D79E99E7F734\ 9F7DC5DB8ECF4302325E0A993D761186BD59BD247615E560B704F8C9B6126A85:\ 92E8641C3A25F1A79D188D7DA317F4F1 +[TripleDES/XTS] +# Generated by botan +596E8B3B889BF5BBF2:\ +1C908494BE7CB290D3:\ +AF6E340E3361AD76756D9A72426A505D619997310DB84D5658A274258C1BF0A0\ +090F10E4A2B8B02277074A4D7CC9037F:\ +08E28CABCCC505C4 + +8C8AEE061C0AE36B302D:\ +C0D0251F337EB231C842:\ +1608738E2FF0304610913244F0169AB59D6ECD9935AA8A77ADB8991E58B1272C\ +901BC83D3F0BD954CDEF7814748AA601:\ +A30CFB4EEC4D2A34 + +F73A9E54AE1ADCD0FE2E54:\ +F839F5EA2522AE88B392FC:\ +C365656F981EB0CACAB0EBCC6EA6019ADC10C34F962509185B9776544F1A007B\ +AD0C8328F761146F9AE9EE6C61FF62D7:\ +5068252132D6CB50 + +E29DE83CB476A22DE6D57E46:\ +40258CCA6843A3CF49148A35:\ +BB8AC3BE60C519B23B90428F0E9FD2D73669A3A73BED60108C50D496340BA80A\ +71720AC17D4731B6FF0ED6EFE094D0F8:\ +001FACE467C3EB77 + +9FC6E51A2CBCA2698126D60460:\ +7363B23A26CF19145C234A02F8:\ +EB0445C3EDB50EDE5983E6EBF65C3B09DC8440F021D73D0455E57B8FA676AE03\ +0006E7F5951F5C5D44A9077DF8FB0C6E:\ +9F66C0D8BDF9C2B8 + +A520559F992E750E2E15147C6B22:\ +4CDB658ECF92BAB32591547AE27F:\ +9773982582D9B42FDF323BB75884FE0C0F0E35DD8AC8C528211C49AFC3BD02CA\ +81F96106B585A45F177D407C8AF333E0:\ +7C823793374D30BE + +B74E78431E0FBE59FB2C51C452BFD9:\ +33ABB8C1D9D19F6EDD34E92C23A5D7:\ +2A034D1DD9F504C02D0998AD22CB171714C3B7C86A5A5CABD32ACD7F60FF3E7D\ +D87A56C67FA8B492A65F638938E23DD7:\ +6FD09D721BDD359E + +61AF7681ABAC4B4DFDDEB1CBADE74238:\ +DD7116B54A456CA51A2C980F0961CD52:\ +21DBB4BD072BC8A9A8A3102158EE6FAD4113962BDFA1E67BE069519765C07991\ +4B90E2CE9AF64D71FF99C1205D935A24:\ +671EAEE385AF636A + +0DEC0D07D0510061DAF8F6C80D77465C73:\ +6A98AF6621F2983106899B372D251D3186:\ +458DCD428BC0FD84152940EB98CC9992200CB63F5DC52F78F9BA2374B7FD7BB1\ +EF468120A4CA96CDE9116811D608DFAA:\ +D1ADC21B3819DFA0 + +81E22D517081F4E7DFD58E7299F58C266379:\ +C0C0BEBDC9A24C787870ABF119F521AE078A:\ +8AE0650EA3C6C0532A4102F1443C64C47B8AF78FCA98364D732D00FA5AFF9466\ +3C0B8E64D21B0654403E94708D2D8013:\ +7F0F1016C809CCA8 + +63799C2645261603ADB10942168DA814EA6B01:\ +F291293423FFF359AF694B7F52C5F78D76D516:\ +DA3285F760EE345205CD3F9EDD9D4DD73A80C334B9F61993AF481C90B941F88B\ +AEA2C5D81C0CC8C7A87F904D8E585FC0:\ +C21CBA5C380AA0BC + +02869B01FB21E4DF2AE861F797A5656F57862F79:\ +FACD3C19A2B76E2E1662914327826B8B9E7B2BDC:\ +D5AECEEFBC4E6DCCA4C1B2F9D1790C060C6248BD94C1D8A84225EC00D2FA1F69\ +BD572F775E164D4B9272EF596D3807D3:\ +526DCB9D29074750 + +7D6DC02743A82F9D2A7D9A3022A632CE0FDE60B5B2:\ +0C776B17EACB4491D2402615C1ACFE46FB59F58F15:\ +F8A1AFB23439C2FEF85E9BF6630F577134315689AEF881868489B0E1CB37664D\ +825613D7944F673759B4B243A4BA0D87:\ +1A07AD2392B75CD7 + +44E411A23B08D54ECDE8D99FCD089B3D6967F400A7D5:\ +472077106C01A21D1566DED9D7E7517259F40AA541AA:\ +07360896E279D84C8DAF2CA6C67B8D8DB30F31BA20734D9E4000D0AA4BC1F34F\ +8B433E598D0589B10CBF01F2FE23C4F9:\ +227F43BDAE4F3707 + +34A2E9FD808D0172666EE3FF26914747FD8C999FD9374B:\ +87B05D3D27567A568AAF740BC6FFD2BFB47081B6530F1C:\ +96C5700F7E8C16C9B199BE51191FDB317473CCAC75259E02A863557BE410DCD2\ +E558F81D8DCCFCCE5C7DC70FA50BAD2D:\ +5FD5D57479014B05 + +B2EF1DF1B8265B7F8BE3A18D650F8CEE98C23DBFA25BD95A:\ +D445FAB8CB5B88DD1E13D2DEECA82489B2732F1AFA9F59AF:\ +7FDD65967D0B8056686B59143AC98B86EA0C500EC4976A9B419935D6DB53B7A0\ +44DBE70C4B93D4FF9C85F8C7FB1003D8:\ +DD2E43A40E72EAFD + +AA45161FE3AFF8C8B5771AB2DB7E2C681F04E5E8C67B001692:\ +3FC6BCA03D56554DC2F598F142181626CB5E8059B024F93F80:\ +8198AF071EDAE7AA4C316C0AC2280AEA82BC9ED7FCF24ECA60BB559C1E6FA9A9\ +A3A02A2FE7DFBDA248CEC6727293AB6B:\ +D2F06EE207D0F0F3 + +80DD67385FC8D461D56D86AC9A5B33A47F39D50B61D037BD8A3D:\ +A1398181740E1379CFF3C1A4EF7DA9393774DE5C013A46FCFDB6:\ +7863321EE44162E3F5B8682F760CB1DABA793D9C893FCD0DA886B2D521F7742B\ +04243B0756748C46D87DB45F387C12FB:\ +AB47B3578C27415E + +2FDD45060594F923731CF7C6324AE59BBE6AF2896B8A9CDABC2D9C:\ +3374F534D071E05DD40CBAA7D45FFE22CB9003FC3E84CBDE3C8B07:\ +69AB8BC60B6227975A5E254F390F8AD8E3ED4DD1F20188E730B395450D9316CA\ +CFCC34EEA68CC008764B873A4E8A706B:\ +82FF3F21B16D5775 + +3615C1398B7EBE5FD4395E84D551B95A7967386E27AC52DCA3D8D56F:\ +2F0DA401A37C4C734DD30EAF2B5C1BD5648D15BC9B2868210621169F:\ +0F05EAEEB51C5967E5E1A7A8101819C8207912E869AA013E6BE32FB1A1C625C4\ +30E00292F50DBB0B23BDD8750EA11784:\ +D273A4E9CB94CBDC + +A252C9802B1F381238454AE68859A9C715B7AEDAF0278446B74807F97B:\ +D12A4A1B01B1E24247D3E5508965727A1CF0133F1AE9D0E90CFF03134F:\ +2796428CF1A8DDEA1246EE9D4BAC6531F4EB8EA3E665AE2EB1162F7698D9DC51\ +F9B3F15FB1DC836578B4956174150E91:\ +897E8D993BFF8360 + +AD8DBD8D62E6FB60508C216EC7B3F5BD9B4A9F6ECC6CC00E9420A1719889:\ +83CCCBF0FFCF4D4C833E79681497B32C60B1C18389AD5A954C48B5AB26EE:\ +89FCD9E0596A40B9017EBE37C3A75D3518285533173799A26E444B23F0E24DB0\ +70C3CC834D08851321DDA672F77FC7F5:\ +307156BC32557CAE + +D839E3ED9E55A7EC8B39C3F76C48D0094244CF5DE8FEC94D95EE079E73E8C7:\ +59A69254B79CE95A9F553E518DE078C2ED46386F19EA5D9ACCFD8F16B68724:\ +DB8D3FA7E248FDFD96B5964E4E2F6F724DB00A84B1A19AF47F57FA500DC14647\ +7788F837EDDD7E1E7E864864AB32645E:\ +ECE48F3741CE377C + +8ACD2DD2232484DE924ECFCA148CC2750BCF19AB5F4C0B842BC85136E1B39E6B:\ +9A9B148B87511D46D1B15DBB9F31D141EDE588F13A50446F718EDB32C9ECEDE3:\ +BA868E442E8ECF78CE897EF30B7298D0D88E14B7F6763F8779C39C6CEC9F7CC1\ +807A33562AD16F5F0A91381F3439492F:\ +CCD513E94A91A33A + +EEA5D0D5AECFA03A0DDBE6690C07706F10EC6B48EEB8697C4ED415D9EF96E732\ +D3:\ +090EBBE41E2E4510F33D584B4A66BD4DB8D24BDC379CBB07106B22AD87C7DF8D\ +77:\ +EC4194666285368994FE4A5020DA2E2F688D68DA5B06E143019B73CD49EFBF39\ +4E62260BEE0B71DD7EF133D88764945E:\ +80EFBAEC64855C45 + +FDA674EF51FDB463346AE936811187FA02AE6BBBB73DE0AC8E325D7DC1BFF369\ +7395:\ +A9CF988E41A71AB459DE50CBDEE960ACF6CF92F6AB5F82A8C34694E9B6067527\ +8E87:\ +C187193AECAA580064B8D1BA695B8CD78718391FA3BB85F9A6F8AA272AF939C2\ +8EEF434F27964D72424A722FCFB219C8:\ +114FFD04DEA7AE4E + +299778C0B4DD0CBC695BFD8EF0A7404ECFB340B2B6B6FDC469841E7F6AB487B4\ +AD92A9:\ +6AB6BB5D5E8918E8FC1FA83E3C3704C0827769E62D99221153E4554160CD5EAA\ +993DA6:\ +53338E70693A229B7C2111BCCA25452E931509A9F5CA6849C8EEBA3EE03B3639\ +FD040E24AB5CCBC422E072C2E9892382:\ +8A6BA30158DF0B51 + +B958D0F35BC231303EB05954159780EC464C006684122978ED6E6129F1E22C91\ +E7B23C61:\ +E1CFA7A037C067CED96497D993D677E4FC5DEB8FFC307267D4470B6C4D813105\ +61D9B310:\ +CE0BD9F37CBDDFAAACED8DB559D40DA79A5361E640C239F12F8A16829A65379C\ +BBCB07F973FC97967E00A3A50C3A58E4:\ +AD433310B6F024C9 + +6BF6C007F979445600FBB6FC8D83AB7AE997D491C4E08AD62C0F682C34CC513A\ +E04A9EDC7C:\ +26F53672104CA5BC1357580F7DAA433787BD1186232A3041AAF105176BCA0CA2\ +443A1EA78B:\ +5B4661B65F651D92536B55C24F9EED149127429F691FB69CFD0322204CC85705\ +BDAFA66FBC93ED49D0F4F22BF1789D93:\ +2459803996080DD4 + +76B85B9497522E19E1896532A979DF3F54E1EBBB23C72372B0558E590379AF3E\ +9C688086D491:\ +1C20111EB5B9D609CC22B5D58B6C8A7CB129D464B5896CC135B9609BBB2BDDBF\ +9B05C722D784:\ +6367E933F46B1A0C9633558C80A0CE46CB62E4E9D915267D26E0C83EF11FC5D0\ +4F8E9B95B10DEC7A0BF9282FE837E09B:\ +7B1677EBD6E0F200 + +4A0336EE63DDCEE33EBF257B4B0D6F0F897A088809EAF4BF6EF71C34876339D2\ +8744F1FE315BA4:\ +3867EF6DBE2714E6B92FC34C4A628F9CF069CF8B301F05C2E48698B560A82E65\ +F6665962ADB689:\ +5A68F18295A6F1132D97F51C3F74167394379974B725F143E583CF41CC554CBE\ +73CA5C3EFAF1AB5E05AD724B2A67982D:\ +97C444FCC79E3734 + +8AF292869468D24D2AEFC76EEED436DA13E134FCA8BC02560720485F756DD0CE\ +8369F365A67FA0CA:\ +33C50E860C301EE73E5B92DCAD1F0AC7B2884D4B8470B9B436EFC85D84AFE447\ +885772FA87105B0A:\ +9EA75A5CF2A1E94DA68B5551873D3CB24B7708339E33D9487324A6A17CB4DB2C\ +B5D3ADF181614749420DEC2047E69D37:\ +52564631370A6DA1 + +C72EFF80BB0F2DEAA0FB855DDA8DF7D38F7B00EC1A7F6119FFBE8B2BAD113E6E\ +70875ED1E294A05B09:\ +F6C2C21ED43C03365259572B2B4775025DCBDF0240C8B5BA21D44B4C1DAEACEE\ +2D59F2FD82334FB2A3:\ +D2500D053E6F039C33D5849CD266970050445CF82D394AB5849AE9BE83F2FE3D\ +CBB1DD5050D41680AE98C103E758DCDF:\ +B345479C897450FB + +7BF9F9A04A2445E66BBF2B6C79E988EEC58D5E6F556904147D0C8C09F9A1B8C3\ +349269C30FC4713942D6:\ +E5D1982759140D0D8C4CF4D52C18D17FEAB91B15B454FF60DD5145C09BB92041\ +F570A33BDEF53C45A239:\ +765720903C07FDCC34AF41D64D729F2CDC8B8FE4AFE83D5133E4D0A380769FF6\ +FBB49CBACA8438AB9A34B856D83F1474:\ +BB0AD4434EEB88CA + +EBFB3E083BD1B0B0620579C6349AAEF641C0231B28AFA0CBE8E759F32486A113\ +EAB2EC27E749D46677889C:\ +0A5E9ABEEB628B6C0FA4F61AB3EC581C1DDD7F3BCB8B0F40D42D2EF42E86E341\ +327BBA97010A2DD2B4BA4C:\ +DCAFCD9744FBF18B1351F1021612240B1B4333BFE0C8A638210A730FEFFAF0A5\ +B2C9769322ED84CC084D1B11142F8167:\ +68A426CAE0CFF7D8 + +3814FE7BB60CAE10DE6B3DE6E5F6EC269B9FE5B61F775FF89350D13B8764F0F4\ +119C423FEBC3ED3A9A0A3044:\ +FB620A3222605A767FE6C7A9505FCFB6FFDD7FDEE7C4C1784EFA1B38D27FBFB2\ +2FC16F8F75FC6BC666A7AEB9:\ +B1926DFE6503F66BE119D426827FF29B734211C4B86C28614E567BAABE7F4CB5\ +4D3378C9DAF57422FC76CFD1125D0217:\ +F2BD1D54869CBFC9 + +9B4337D32C2F17BC68D2FCF4021F841FABDC758EE66372C3AEDF000305DE591F\ +8590B0F4D07FE007E1C30D31F3:\ +B4B0F4DF9160AC2A51E72FADDF9740099D0F81DA1B123B0877329877FD74C6B6\ +362DCD4152CA28496BCF5D5D1E:\ +7128048D53AB24CAFBF106CA749DC404D72765C14DEFF45B184E23A8908E9B66\ +B44EE78A8870E6080CE9D199372E1BAF:\ +5394BD5C1B6259EA + +C41D6960D546C18B44078A295A6743132814ED943949F3CE620B17DC536EA7E7\ +7AD5818E38C5C8462313A1564DBA:\ +A9AA8A908C8EAD3EF3A3A088A214C321F27F99E54604F5806E43506B0D0A2760\ +471A41EAB66A2B536DA999B3F19E:\ +E4D43CFBCEF4A861633ADF96835953E3B504B01C5C7BC9810C0A26DD55863F62\ +110DD3A53F5824B16027D5C77CE062BD:\ +C74532FB9F255125 + +BC5DD6D4AE7FEF35BB0686CC95AF9CAA46E6F2121D9BDF5415C9FF1E4CAF05CE\ +18D108914D7247C82E15C2BA3C9998:\ +9DD61DCD613FEE8DE8841E94A2C8A0412AD2B36B408F73BDFC12717A68C7671C\ +F50F40BAA6E74F9BCD8AEC4C62206E:\ +AC54274FE612D4D4A05673847593EB07CBFAFD2735B30AF6155A72075C195E3B\ +A975808E61EE1EB16757D2D5076FB923:\ +61F8987DDC762217 + +CE18C25075B4C1558F0A40A572A98BF90F99C7A943F205AAE5A3C2CAAAAB8264\ +6F0BD2F24EDB944F44F6DB2B987BB50C:\ +DA9212F2A27188A29AC9E696BAF55464399CB5FBDD0DE2343B9BC1CFAFFE0AEB\ +69B36B16A3FE9E145616B5FCE2CECCDE:\ +2E76801DDCB5C54A596F0FED1B2949AF267F57DE2208CFB819AF58D8A39DC63F\ +4D24D3796D3B6F6CCE1C429ACE1450BE:\ +ED3BE87AA83663F3 + +9F0C08508318031CBC205F7CBB7C5B71F653A6A5ED414269B63AB51274899A36\ +CD9347175A41D1E48067C6825EB2C08E05:\ +EC310F36CF71EEBA986B38FD54A3C8DB8541D955DF150B36AA71BD2C318E23D7\ +7E9407C7C299509F08E96DD974DF0EBBB1:\ +DDC4555F64F09723D423F89DF90FBFE51B1B7E25DDC4D33B8E91416F772621FE\ +2103B45C9F01BA7ED79B987E080DEF37:\ +6B597FC12C2E50E7 + +7124FAD711B1C3E3E5087E49BF9A1CA98673C7C5592AD8E9314AE71666AB653F\ +4816C97EAA9E50FB230EE984E41124F27028:\ +50524698ADA62763B48BAEB8C1B416CE7A904386A65BC6B58A5076E23C9C3246\ +481799F279F1A121E0876709DD8CC86D2556:\ +B0F597ECE1F8F996C4F6FD3E9FA95C866E95C31083C11D80084B99FC74576825\ +51F52A011FC3B9AB96F43E64EFDBFC58:\ +F64A6E9F42E164DB + +FE763D8179B6777D0ADA001F584956CD0ADAACFC6E07666218A5EDA14E41E3A5\ +44354C78498CB9D2729E559524D704205ACACC:\ +BAAEECF33E93BC5123099C33D5AB194A944782E2C3CEE9BACC97DAA54632CC0D\ +6D2DE89F924FA4216D8DA11CF0D4F3B993E7F5:\ +CE9BC717716E45E1B2EB93A5AD9EE1249909CE903BE15AC4A398B95F434DC495\ +4BAC7592877888D739E464492AC02E02:\ +E0A6F81C00EA6A69 + +8087C8ED9118E03A20747317DD147488DB5C2E2D43543FCF49E0A26FF4789BF7\ +C76334F6615A0670D0600F295876027A7C2693E9:\ +C0615E9A540CB52C92C397B986454B688D85FF9EE193329426CCE3B0CD817263\ +C038002B33D32BCED3B88C04972EE938B130E787:\ +7F47ADE7334964A04008B731061B452C77FF8E170FFA41BB54F51801BA1B933E\ +38788F8251F9B3A2BED52A204C312DA3:\ +BA9CF264B4EB2A47 + +20EA772DC8F686BFC66E82A02B1CC505CDADA444D3D9B9F63E1AEB6E752765DD\ +394EC68264152B50B4356C1DD41C4B56966BB3C66A:\ +051929AC82505C3594A3A13E3D6CEEA2AFDF31A4FD0C2627C69321ABAC37784B\ +297AD55134B5D379021AAFCAB9BEA0E08C508CE324:\ +7BF4EB01A8ED3EF99E58173B61EDBE5247ADB52CC1CA2375E239747CA4E56675\ +D5EE7910EEF6A283C576DF9A67DFE3A5:\ +B12704B4C7A8E537 + +B305C979FFE7BFA16A18CD2050547B39EAC2446D9013AF6649A04296FE3F2660\ +B4C973FC5D7F152CEB519F2B85E46409132DC51FBCA4:\ +438F74156B7FCF48132B50FC8217CEB943937727DF55C1178D447BB47DE2807B\ +4161B3C35B0E4E22ABFDC7C0E6C6AE3AD3979921DF8A:\ +604F13BDCA8FDFF10CF0D55EC09DD03C8E935595B47D30174F87B53D1E7B7ECF\ +1048BEF3D4CDC435C7AED84D8B1AFDC6:\ +D31DF8D646F20BD6 + +4C8266370CA735C9E60C92B34A5CF59E1914AD741AF71A618BA24EDBF9B325AB\ +E06D223B0D22B60534E69F165C0698BCE92B271340E4FC:\ +33FAB26D0F56F4E86922FFCAE59B3C5F4809BADB5422AFE2FADCA8F98E7B9DB3\ +147D2FD21C63C212F61E6DACF5EC58302F479A3832686C:\ +C6C183AA28ABDAC87EBCBFA70ADDC058BF7511BFE526FA59126204300328B1D3\ +8A22B64D6F4102E6D7BE50DD955E54CE:\ +00F7AD947D2D8D23 + +B825E025DAC722B990F294A7C2346D407A1D335768575A26AE8C7A0183118229\ +C17F5D1DD117BCBF36CF673E7042ECE70F033EF21488AB23:\ +2949703DCAC361526436DC494B9857FCBA4BB1704A7F26C34FFD5E3E7D4C45A3\ +10C361FBD5DF17A7B3AEC752FF612C8846445163BA75992A:\ +39558A42B17B0F10E3F8B3764A9AAC435AB995866771605924F54EF00EB2B88F\ +BDD9990346499DE4642150BEEA76CA43:\ +94010C456BD7FE52 + +608DB3842BE258F19115A98EC085FB84CAFB02B20F85750D549627C4C85C447D\ +3481AA5A64C8422E88CF41A76F6E36071141A4C9F7BF0963DB:\ +6CFE5F780EAD2ABC377D179978FDD085EE4363DD40ACC0638DEFD1994C7D430A\ +C6E0008E4BBA4D1D30D9580CCD7422C02DCD93D72E95083344:\ +A422F5FB8730DC6268916618FC1C1AAEA5B4FF893BACE974835671684F757484\ +7F0EAFA0AB44BDA321751980C01A6DFD:\ +962794CF1D474EA7 + +77ADB2F576D4A7CD951389A057FA5CA855B7F06E3940502BC278FF6BA759500E\ +1B2AD113F7B8BE187455700C2E10F55FF7E49C8A5F5E9F0F985F:\ +5705801A8A555BCF56FF4AFF1523C05810797F1F1FBB5272BF7AA3E3284321CE\ +DEF96F37F1888EFC5D2629ADC0D69079B59F8D98EF2044CFC172:\ +D2C95AF5FBEECED20892DB9C0C57A5283F53454CEC8E5A5D7354287F27F2AF46\ +8057353D8BA389F13BD777F98A3AC2E7:\ +DB4A8E90D80EA230 + +96B8FA71CE93C90BC6AAA009CEF365367A5D5C52CBCCDDFE185A848BFDED03E5\ +64FBD769E56992A0D339D8EAEF2FFEE326631D74F8E6B87AE77F39:\ +81D0D4025BD9D3ACB161B938EEB37BBDD3FDC5DF2DDEF36282D94A791FA59D5A\ +EA1964499987968066865D66A9BE47696BE585310D52FA32AE7452:\ +B33E02A74B493C1AADF8B3E76220840347F7A6806B7BC4B3C359393C0644B6C0\ +BA75DE92B562C1B743B42D0FE45F80DE:\ +854DB904B4E1DA80 + +05F03AD7E91D1AF05D86DF61FD4349518255390E7BCB9267F12932E05013B9AB\ +D32B3E9DFDAA58E1BE470D9F3F075DC29406B6617B67B4135C50E114:\ +76EBD2C33DA09E65BD24B1EE18C421621B3162BB35D23156359B02B6924C82B8\ +66CD87A1256A1318418A993F6D61101737AB5CC8DFA7A05AE3F22C64:\ +F7716AD1D000B4DD875851519F0097709C09B6200D8BA9DB6F487684B0B4FA0E\ +4D1B1D2FDD247E224CF56EEF3FE05ECE:\ +E5D4038BCD2DCACB + +4127143844722CE1FCBD8BF9468CBEEB347BFA24E082D131C2C2C787457F46ED\ +2FE674B2F323D6588FF9B6326108291BA2DB11EBBDE3D7FCB313BAF0B8:\ +5E784B084FCC0B7D9C8A9277472C551F4A2A50D47B832BA021305C289A719CCC\ +BDA0F724D6771EB7F9B00E9E4019724408BDA28F2D34896063AB4BBAE4:\ +CCEB436B623C2BF464BABF01AC88F9D9BB09AF44AED4A0D210A1B5AD3C724BBD\ +3BCC43C077FCD7255112F811A96C7553:\ +EBF874E8A1D35ED3 + +F87DCA3EDB085856542104A39C842F2491A78965751F41257F131FF937B1E425\ +CB358B6DB36C7E2AF8D44A4EFDA64DD3B627557E4F862EC2038143927C99:\ +CA18DCF6397F0946A4E8A557B86FE090F032BDD69D4323851025921A1599BC50\ +A12C61BD54BDAA7D4D7D16AD539FA2403D7D0F0CAE162AE0D6773EE94BD0:\ +D5B36B7A57B2A817148A905A781BF015B2F12EAFBDA9575D2B0EE777792DF576\ +D3C3B596659FEF5A66521C1E9165C65A:\ +289BA40CE084C8D5 + +A51793C51C9FAA514DB11AAF93AC334A7F810DFCBBE0728498B396BE7BCB96BE\ +15F63AB2AAC71D343B73A34129EFAA11B52EBB2C77B93FF813EB1F35486787:\ +547B0C7917CB199809BD8F8ED7E783E4550A44FE042470B2C1D729C7455E19C7\ +CAD27F64F5CC59492BA72A403C57ECBB42E34C48043A24B176D358883B2DD0:\ +CA46EAFB21A4F619DD77A9E1562D8ED1B88418F9514D82CD5C4EFD2183EDFD16\ +3028A31125AE86A14E702D9990E058B7:\ +8A85176A33215451 + +6644341E891F31A165A430025E3CC1C8890028189DEAB8662539BEF058519A4D\ +350A46E26C04D14D5BB526B9EFE0718F5E8BF28788BBB90342004DF0E15ED2E8:\ +41C9A09B2640B5938132A50C2F400EBA6680115FA76278F82D2615E3C4BD22A9\ +10F20F00B4965FEB3AED28367B888041E7EF4730E9046BA21438CFD27B5CB71F:\ +3E039B20F4178C25C9F45CF8C4C9098CC8C2B61D25F9F4492280074C4E6DF7FD\ +770D0A78175A63E4FF19B9A72278A15C:\ +EC0A8C77E6E1E39B + +595CF308FEC3BA026D24ADB2C3358B3A69E9DB297A55B5A5995D0096D59E2068\ +94FF10CCB74B2C0DFC6936CBB515FD2B2B3A3BD0826CC002ED25E862E52FDC9F\ +2A:\ +9AE1B1A56C2E6ECED863F6AB6966A4048F54AD79FF9A8E4377F6B2E1D2EEF799\ +9C7F41076FA7DABECB6DCC4355534E5A42529F2E9008EEA7FD69D3EB2F6666D5\ +C4:\ +25D2754D0E2F106DB93EC27F47168972C8DD54FB97E12312909AE6C236A104D0\ +A339FB793B1CC9C8227EBF2BBA8C154A:\ +6D0F264395890B48 + +15335851AC3B41ECBB11C1853F1262F4D146F09BA95EE5E61BFBDA5912D6D76C\ +8B53246A8AD03A6BBC2EE3523170C2E13E9A6D7622F1AFCB1512F06DF78D65C4\ +0421:\ +DC6F0BB8758D6422494D5A0BD8A7B97BD791CEE221288936DEDB596F537C3FF7\ +BCE04985EDE96AF69546A969FFCD380484A2AF168A96A55CF3D466E001A7B9E6\ +DC86:\ +BD69A39DE39D63357BC0C5664173E37BE71D8EADD0B8881DE396B8A616ADEBBF\ +D0B26EE6CA7A94F64B230A1AD2048698:\ +77CAFC7CE1C7AB65 + +DE55CDA2C48D19CD1634122BC99BE3F6FA9B4030C4A95233260098CD1365580F\ +D23EEA222C694F99D4F28C7FB73184F6D90BF83C966EC73178DCC301A594C395\ +CA18A9:\ +8E226F8DA16C0D37724A6AE6BA35F8310200C7A636569432ABF97B413F42D236\ +8B49AF96E44FA953A868D5840458FB578F4FFB888342DC51068136AFA321C2C9\ +C8D673:\ +BE5E0BB2CC8EDE601A0F1F39AF998005D3C930FDFBF072B3C857164F48006AC8\ +F40AFB45CCAD8EA47AE439A44D2F6242:\ +571BA076E2AEE410 + +DFB35E713B97B554E8C2CB6E67D19D33F2E2180C00F1BB131DB9D5C525DD35B8\ +C9E640E5B9650A0DFCE53254581B87B4AB8E8793B40DB50874D4EBD8319F5AB2\ +3518870D:\ +BA1BC58692C5D2900743B7F398C283F6DF199E65E760404B16B4B8997011DA50\ +2CD119C97F1F8192D3A95259763B6685F52BFE80C69747E555650C62E501F40D\ +0A4DAA43:\ +F78E4DBF4666041C85A4D1BD8E41E9B6C6A812E23D996155B924B221FB32A59A\ +6E4038A1200847A33006E7B6D6276786:\ +701C94F617ED4183 + +5F4CDA0DBB40C9E8272CD0480521726E8AF0814FED9535B03D980C389B4ACC86\ +B15354FB0EE1E90C5BE845832E659B6707CAE99D4B0254F6C1EC1C1033F68A1B\ +A51937A6E4:\ +17D4368D7EB5405E1200A80E45819DD43A0A450D257D5F37D585D8DC975AAFD5\ +A8C3519AB17D30F3953A6D970BB13FBFC5055E6783BE529B0304E31C0293E331\ +FF37A085BB:\ +9516FF82D3A3B84A087E99D15CB10EE198B89322DA03F42B22C8BE90D4CB652A\ +95333F4F6D3532F27D20D3E8AB3E7694:\ +A71575080D5811D0 + +A45A94B08ABD5129115F796A12ED6908692FDE75950ABD23D3B950C908370D6F\ +079840CED1845400B7242ED363C203338A616EF24849AC04F79D4087FC1C0AF8\ +3067C91A85F3:\ +024FC771952DB3472630D3A0E5D40493AD29B514A1DF20D204CF22CF3F364C52\ +A6EA46A80ABA899783F3FFA58241A6DEF5850DB5EBEECB5883A687116A41C5A7\ +5351DB460508:\ +2096C4B064315C356A4DFD0065F3155740E33ED2DBC687D0CFDB543E4B04C7BC\ +6FCDDB2C15768C90779D72A390B7A8CA:\ +11A0382CA4944FB6 + +9F0CC6280A56F1AA35D292153B3CCA4B493F823E28204F648F181EB4532F53D5\ +9CC314CEDC9DEF147F2D5126AE610A5C570DB7C2D5EEF17232D69A4ADFF77D1C\ +9C8AC26CDA5510:\ +399DC10E75CBD29700CEC9DAF9B6474E3EEF71CA051ACED22C7CF96E46EF7953\ +8D3312DAC7654F5F59D64C8969ED882E10829D3E271B9567CED2246C120DE327\ +DCD50D5B661F9A:\ +E4345C9D06A8BEA3B0320B2BF5E3F772368FE7C291C50856D76ABACCE8031DB3\ +545F4F9E2F9FD7831342A4038C4A666A:\ +3005F1F0400B9429 + +65C8F136DE4A255A2F7AF15855F3F3D058542768679CD4625FB42EC9BC23E0F7\ +52BB2D8A4737B86D7B250E74D2D787DAD0A1648534AB0E0EA35A6420AAA07F38\ +0B945E0FEF6010E2:\ +57699E2B659BE5D15D94E50103D1DDA5AB3B89799CE3CD1DD48D587279FBC6C3\ +B27500D115C0F18C50959EF60E811918FD667597983D6CE6F5AE92D7D35B2A54\ +F1DBC9040BD84838:\ +05EF770E99C4B9FBAFFC6680723E225332691D0274B7A9D1587C5B4165F7856C\ +05330C8AD36B542F3B9061ABE2E4D8D0:\ +603D1DA619FE5A6C + +0CC3DCA7C22D142FBBBDC28365B983B0B602E3661F6DDB57A13A78E25130920E\ +63897B1E5D6D0A255410CA31589B4FF012AE8EF7D206276AEA17280281C89B5E\ +90FC92CDAE3E90FA2D:\ +544C0869810FE42026FE2282BAC76632A869A5EF15EB5BAECF7118F913A09FEF\ +C32EEED3F9F057522E1914843484ADD60F5A5E0C8B4936CAF22A2B56C2FD1932\ +E6D2F69E67F0501457:\ +4444C76C004E32F4D86FFED0FC6E7F125FB3B97ABACB6A963B4153ED6F664656\ +6F09556B0128508A2EA704F425166BA2:\ +DE890A23A97AE34B + +46F56453DBC786E69C7A8B8343B44FA10BE3B62180D1055396200A4DEF7CD16B\ +3AC4A11498AE026DEC225974C074CC05C2E38A0C3D9863564D06C4C51363BE3B\ +34C6710A1C50A8DC4A49:\ +C7ED5707197AAC74CA3678C435915101B7F01ACF70E6EAE4CB620627812FE22A\ +E6FA729C0AD641D1DD047916AB127AC4340CE5E2950F59C13BFC58716851EF65\ +4E3CC8A00E1F7F9934E8:\ +2CC18B3F45FED30C9BB3E0C6162103D7F6383580DBA72AB3EDFB6759DBED7F2C\ +F75F494A8C8C2018155F523277CB1E33:\ +59B170E468FEEB18 + +4EC76D991B2A572B95CFBDC1B5EF14C40D623B60EB5B08F49387861F13A0C242\ +A017D608210260FF457701A732D1FF43E890EAB0AA8D88FA414E3E313D166B02\ +4F8138732A9A69342A082C:\ +75ED6A26E516620792BE14D58C314AA9668F26900026CC814D9F33262896F8D6\ +13893C5A1249AFE93B978487D44CD09FECCC5AF14C7B1D228B4D4255A3BE2D11\ +4C2CE7CD2F19D6D925FC5F:\ +C635A07B528B15D341FB3938FB1867A86637E41F7021AB0B2241A202220E83FD\ +D05C24A1652F2624F9FB43ADC75D1DE7:\ +25622E1F1E088394 + +EBE4A217240463C52F3E367637E35EB9914D1DA02A8E6BD1928CD70855884D2B\ +5B1B20E1B32A22DA27269FA5FC42EE67D268D97D460BC5EF93015859CB4CD34B\ +7306916EDA42DBFA52D62EE3:\ +AFD1396657E63F6B15C8E5172A5C98270E39BFAD0527A14CEB81DAC79894367A\ +45CEFB48033B39562DC1B23D7507E47DFBABE91656CD11A26B6D20EAC5C804AD\ +E02BF11A7C93D9CFA82EAAD5:\ +A789FAEBADF784EBC09697E4C7B7DA52F3EBFB682FEFBE6D6871BD1EA9E2072B\ +A5161F8BE55D201771CAE3D55847167D:\ +48218CCAEF67EDE2 + +0C49C0FEDC9D77D74EF36E5721F8899153C48EAB527AB6F30C688F7868F79CEC\ +CB80C03646D065724A7F5A94493B679F69B4C9B7631F5D6E51B38277D101BFD2\ +DACF5AB254A35666FD88CE199E:\ +C37215DEE1FE39F6AB4C33440324F9C19C8DA2161373D2881859E948AC2FEA19\ +1E0B219558C71358604CEA53B2A65D6E1AFFE203A737D50FD1D358495957B2C0\ +F33C33BCFE7D342231580532AE:\ +2A70AFD8A26A592A112B1CC8A4DE1C03DA4A2E71C7375B256842327624F7D455\ +B05135533C526D3B266B80402E97ACAF:\ +6C6BED5ED438A4A7 + +BD7CD146D054BACCE8B0EB21A59ABC1FD212BCC4794C0B6D600D153CE5AF65D9\ +F9BAB5C2B5D0A5E25C1039366137A93ED2332067E89FCFD6C5F6B5565C419C6A\ +3938F2473B08260335AEEB6C08DC:\ +F3702FE8AF684F0FDF7E85AD786F5ABBB5DA3F14E7F0F89023BE4E0B7409CDE1\ +BBD151BB3F9DB1B64F731ED2092D48E534B451C562864DB827EFF56B5CCD3F6B\ +14DBC0477EA245618C1B2F5440C6:\ +297085093FDAF2A1DC4586E5E2001D0BE9C03C667350BDF1D08C95B8BAD0E4E9\ +1EEB9CC01612BDCC142C0C78001B69DB:\ +1DFD551688FD9A60 + +D457E7E7AD66A8D7CB07C9C1E454CF8DE6E9D97948145731A8585078A524182C\ +25D9D782837F09A52196AB5BF4BE30108E2AA7984636BE4EF79966D72C7D6C19\ +D79B7A50A4C7D5F01EF9124A6660B8:\ +379FF84CC48112FAB0633FF279636366F0E9CFADB453AC48A74A9A26DD7DAB30\ +4DD6378AAD4AC5EF28AD0F4CFE809F02D2EDD3FEA11B13CB7480DD91A3F6001F\ +C3EBA4C80C31F5A562CDAC532DD8FD:\ +5720AA8DDF38F0215B1BCE8F7B5CFCCBD4A7C8043CBC3AB370FA7CBA0474FC6D\ +25D5B2EC2D5A0C748F63800F530DCA9D:\ +2E76E771E3FB53AD + +00C62822BFAEE16C7ACA5C16AC2F55AB52085716E89EBA9629394A44E86C2F85\ +8358ABB2421F07BB3F4FEE3D1294DB62B6FE9CACD797FACC8359679BA7F17B9E\ +A7E10212C74180017C8D2FA5F6498B1C:\ +6ECCA8B79406B8229FE44845621200AC352DBF6C1ED5937C47AAED3ABF8B0390\ +4D7E701752FED27D91A5151CC00885AE4D8A7A58CB1F6D31B9F21F699B03E243\ +FE1BE597B2114EC61BDE14A4796E4417:\ +BA80F73C66DD7CA229B6A845EF43DFF5524DA5A193A6BB21FC3CC790E1F0ACA4\ +B00606E4B39DB146F075ACFF7BE4E241:\ +B960B5837B4034B2 + +FDE0BA5524C3FC2C69D0070E77DB96B4AC9A8BB2EBBF3DCAA2E1E577F562A794\ +BE43FFD498DC0A03D79176C887363D746DE3EC65E279145EA4F0611677BBBBB4\ +B3F203146123B2F7968133A888446E51F6:\ +53B34B147D2E0926AEC3F418D8AC5ACEAFE3BEC4B7EE675ED84EF2AA5B439E6F\ +F66FD6948C376BAA071E2DF6E0AFE7C1F0843C1E20251295CA83BB30735909EC\ +0C899A12904DD060ABC3E100C87A3D72E5:\ +058768329BBF2E5DB735023DA3FF3D8EF1D0471C299DBAAA95AF4C1016572011\ +5245586CD5D0ABDCCFA3B52F83E36A21:\ +A1235BD14E93BAC1 + +AAF3EA1783A29E2273361063A0D41610FDAACAD6E8946E86C8874508BAAB02BD\ +2D8EDBFAD03F3D381E523EC5D6ED7AFB58EC9B8609C6735157AA7DC4F3F1052B\ +EABAC974E89ABB18BB260953D591F2F3D1ED:\ +2E6FE67EB83E2F436F8C0FB83DBE0F7536166757E7099D1E1EA6946AABECB6E0\ +2488DE9F08EDD53527A2D00C14A5EBB5FD72AC5577A30B0F95F7B2CFD86A163B\ +80069A1F1C9D532C715750D68857404EC03D:\ +AE1C6312C48CD1629A606389D1877E3C521B5101FD4CB760A87E2D1C1ED1D996\ +A1360C241FE36E2110D9556666C787A8:\ +7DFB18B303AC12FF + +3FD52D0E0CC3BBDE18B17632E662F0EE11EA8E1C7B148B630DDD1A6F01025E3D\ +BEE10DF37A9196ED4060A8B34FED461C81E70FEDBC521A83A4C2D47C710E4D20\ +77A1273FD43242D6BF235E748942C640B64F9D:\ +4B10774B3665EA10C53DDCFC1C9A2B96B233093901EB037AAFE9450EBEBBEBB5\ +6CFFA65D2B6E44337616648BC8E2341EA3ED0F5811402DF0C6142AEBF0C5A30B\ +2A05D85A6F94A39B6E284DD8666325D0B7D8A5:\ +7320E6495AFCAE1BDC67C72913254DB148B0A5C85DF023B308D3C411EC37031E\ +EAE5CB51DB63FB19C67151FED9CC46E8:\ +9E7A68212564E863 + +2CB8E796E207320493DB417D356B44C1F6FBC0E68F23B9371AC75D40F37089C9\ +C3FC9E0A4A33705E27E41152AAE27431FEA85BAE1607F111218961A18C3234DB\ +C0D41D172D14EEA038DDD971A6E6AD9511E82650:\ +87679F1AC604328B6C9B55C56C16505969FF9D40D1C8EE0EF9C9A9D5AB0A9510\ +CEEE677B752725B1D00916E26E293FEEED9F18F17F8BA9B77DA3BCBF591D0D67\ +DBE57AAE4AF7843DD176471528094A3A3FF2AEAA:\ +258CD6F5D26611A0D8035DCD1C0F26E0BD86B40670772BA7C9DC4DB18AD38F95\ +73D8C54A3CFC30862106E2BCE6C7A5C6:\ +ED8D0BA4895F10BE + +3CB66CE7DF4672FDD6F8BBE90754BD5BE92766C2EDAE10752EAA0136E81EC858\ +EDB967F7C071CD4156C4CE54B14C359B7B48F88F873B464994F12129EEAC74CB\ +02FCBB06F1A45A1EB75E265975521B2316E6DEE4DE:\ +2CC2ACC835F3E84FC6AFF725C290DAE36E67D7CB87162E52FCA1926EDA3C9ABE\ +A5A5AE623B25CCB1C0F702E55B5430D30915851D4E331F5EC8A0C448E8529E25\ +C3718201A536E6DFF6EF5C67038F8223EEDEC77C84:\ +641CB0E9630827685C75E93BF0324543337E877F65F82A86FA352C00476467BC\ +3B4D14997CBD00BCA9E37B24A6F8F1BA:\ +6E78260C205DDB9F + +2A79B7999079CFB7F63105C7AB916B9192380148FAEEDEBE5567A791ECCABC85\ +ABCA1F272D92484C6109C198E9BD4EBDC7F3505E93C3BA0F9E59E92DBB9A69CC\ +B65C22BFDD9D2BC1F329BD80F3D327574EC86904B0B5:\ +0FBFE0AA25EADC66EED7FE1E8F3F982CEB9911B8A97BE1B82879C6721485EAA6\ +F4B380D02A056C9E85F0417F39D31E42DF5E9BA117DF036F11082796706A3CD7\ +F23FAA5BBFA59231168F37698C962FDCCFD9E968613C:\ +7AEA1836CFF6AE59E983007C0241A61D732A2E53333BCB7810217D06AFFD79C1\ +A6E8FE9079F44FA35E88E00116A5FB3B:\ +805910FB562E63D5 + +792990AF12979761E29B4AB2B2ED3A895122F062F6CA099D73492175FFAEA0AF\ +87003C433FFC8AA353A24811C863D80E6212BBACCCDCB9FC0281EA334A186C92\ +9C73881136D01288E44D98B79503EDB12B9C10275ADC69:\ +EBC43CD03940FDD38213DF9FCC3D75D112FE8A9B1F5FD4A06947A79BC65C6527\ +DD1CCDC49D67432454351A7A289B2AD940DCE432B23AE99A4897C3C7A138470D\ +92FF497D5E88F631B93A9935C85F8B5FD404EBD41F2324:\ +8CCDE984AB70A7ACD1DAE69F5109576F8C808D0B16339B6B0A65B2E4712E6EDD\ +62159F1FB65FC9C0BE28433DB982DB3D:\ +1EBBB405BC55AD17 + +7BDCCD1ED5C7C58AA8C26EBC10FA60BBE484F26A9ACE21FAF753C95B013B6812\ +283AE19C54EF8BDA7308C9E52A4A0E19B5F774FCCB1803585ABEA0931852EF74\ +ECD087AD748E1509F1A22E1278874DA8178FE725D941D417:\ +C3F08696882A472D3759A605B577E4AEB9B1919416C194C550DE94FEA6B30546\ +0D6DF31B0907B5849C1ABEA0CF500D606E00BA4374ED606067C7A62816AF0943\ +2BE5EA6B7FDFFFF14C1E8A633A42E56EDE07D114582C40FD:\ +759B59DA28602EE92F28B80C104A6D243B33303FA93D82665B395BFA2225F121\ +3357D1373C8BDEF253C609F89D55DB0B:\ +3D7C31C77EC2433C + +32B78D9F5953B9CC21DB7102544F810B68B469E02A9FA6AC0AB4F03B732737D0\ +EDFD7836B0579E4D3A575E7137C67719A57BB5A157B9EBC8C783426B35AA338E\ +DEBE5ACF9FF475D22988277D74856588D86D04FE11F18E73D4:\ +4A9A71FF4A63F8DDFE8FE65DC8710F75AE6D39C9BE50DF5E4D12B043670DDD29\ +FC69A70F52ADFEBF75B5C56BFF9AED26B679F5D7A368CF8E210D4D7366CB1C43\ +6B1CE153B957616A321510F12D5DFC4FDBBC064C4558389478:\ +5777CBC6401567254EE47DA378097CEBE744AD04C03EAEBAF38C097A0E53B255\ +56CB1C2F9D184BA920B40A0595DAEEA4:\ +B6286B46D5FB2626 + +10E4881483058ED082484505A21A951BC3C3BC0F6582474EAECD4FE427C266CC\ +A872793E09B195C1BD03D821AD71442905621E5EA86C69466CE88AB676F804CD\ +6A7AC8AC633CDD1DEBD3E972D787FBD7AC100FF39CF6F0FC0CED:\ +F8AA3DC6043D41A2D77A1600955881223F08AFDC3F2EDDA6C0DAAEA450A26DD4\ +CDBBA6C8E6384F67F6B560CADE852525C903AAADBAC0DEFEDD3C2083B1EED434\ +01690236BE280BC6BC1BB736842CCEF568C1496358CAC7E613CF:\ +DD87FC5995355B2DBE4536F2E71F5236D4B449C4DB2B5537C8B5F190DCE575B5\ +ECF8E9F04999BC4488F639B9229B5046:\ +BB0F33B6CDC80B04 + +A46C63CF901DB73CBFA0BA50B2EF6BDE63136C43DBECAD130DED170D5984CD39\ +DED0B3224D31D051427239CA6A1C7AD610D40CCFA88C7266A60A391FE2C7AA9C\ +6654F6A8C5F40233422DE4273644194B7E61B65F36404820A92222:\ +B9F8099AE4DF4C95954749952E5FD52E55DB935C7BBE105C58F7503F077EBA80\ +57A80DD55991FE2E7B92DDF3F39CEF6710956F86647887A7A0F114647515A440\ +BD811F9EC635A39A0C0859EF8A6DC0F37D308E72834B98D61D6BE3:\ +9B02C6E552A553CB3D5D8368D69292278557D5C917B4F2219C91DBCE20B54087\ +233E0A09B88982841DC59C97CE270309:\ +528D9204AE720AAE + +D3CCFDC40C2986C6DEE37EA1B1C6D33D460AD4A26A75C5289779223C3E1474D0\ +5C27B8EE8521FCFEE5385BADB2ADE1CA31D18995BA5E12EFB0D7B3396E39A6C2\ +39C242AECD14DB7B786740317E96BBF8EDB8CDE1458FFB347885D565:\ +A4788B32E8975B9AC394C7D83DA712572DD81ED009CE4460FB11CEB9075CE625\ +E2639EC5AE48A1FC7E632B02C8C6CA63BE09D48B186BC65566EB370D3CE24F82\ +5553CE553C16F2FF5108330673E10F14E76B261CA5CD5F87E418693D:\ +D2C6F8A0F321983779559B315F69DF5802B121C97DFAD4A4612B510D9AFA4F6D\ +EB09E695EE72FEB2270F2CF8CE10924C:\ +88F6FDCB170B5823 + +1E14C76EFD5791F000A103BA786A43877283684B0485582BB5A4F96213D632B5\ +83116C1534A7D0E9025CBE76C557AEC9DA04235AB26BB96FC2D3115FDA6710B8\ +55E3C382458EC465F13182DF126BEBDCB94014D753A4B0A13991B1FD1D:\ +B59A09B54A9B5A98616EECBF20597D39675EE522A9CF7AC2540B50CF5C2AAA61\ +9A96F05CC8D5C39161C1D5F6286C108B24196E9D82E501A9E89062B296808D36\ +7D8D8C1F79A07DD26F3E7E5B0906DB452D7DD987DAA0A0E360CC5EBC86:\ +83CA3EF06A15B4F8B527B67A652F1EB2CE068411E0F2EAED14AE693880D66C2E\ +21911535824B9DCF584DADEB97630ACB:\ +15119A3F0E54DA4F + +89939F837D7EF2FA6055C4F3D2076C70CD392D40ADFF63D2A8B4BCC6FDBCF146\ +6F34F1E6892ADBF80AC6D9A2542CAD67918F0CEE22CC06667DA1FD603607B90B\ +E9B4E5FF98201F339E40086726FBCD7EA2675F5DF23AE70D5269DD8A1E3B:\ +602A85E8F4AE898E1AFBCD53098C9C9DDFED6A3DD5F953ED9019B2B45A5CE539\ +FC86E484C0BB062ECBC483067637F83983FAEFD00F5EB08A7F28B45361C05E17\ +DEBB56D4AE72AAFD8769C3E18BF0170B00C3ACF115E5B03A3FDE9D9D9A38:\ +9DC683A403924735B95D4C747011C7019926AEAF260C1488064AF8F258CA290B\ +C8FDB9A777B3CC1BE0785C54E4F0A0C2:\ +456851BE6B78CD1C + +363572DF82F8FF530ABB987648DA64208635B3522CA9FDFDEF14CDCBA67D314F\ +65963393BF9A75FA802C2FCFEFB7B1ADBE46A29904E5E886D665353DD15DA1E9\ +1D23DF6E3B573F4A5B0EB33B20EA96A1019F26336C2570B2CABE74EF09A2A9:\ +A7FE4D502D1317D9140ECDEDEE7B328EAA63CB81E4F04B98D26322583FC7C0AA\ +3EEF85E7E545A988DBAE860D91E6C9E8B5C1F1672629808C14189A46D81F543C\ +2A4B3B58D8245781444D5F8D13030B8B3BDA7198B0B80E357A32DE4B2663C8:\ +FD3049AA473E1A4B4B71ECAEFF6354CE4E7B2DCB212EFE01A171AED3D4A3D85C\ +73EDE789907FF5759C7346B5BBEB2D87:\ +47C9EFCFA01BDABE + +1E54C9A5C6B8491B04755DC3E271AA40B84DE522EA8AC0BB505A3863D6BB70C8\ +4DEAC0D3AE4B383E8D7470C73BB562B13F7D98A5ABD127CABA17E96E87A4FEF5\ +486EFB3FCE84E16B16F078C37AE75D51FB92D4DA02814839A6502485ABA10FD8:\ +DAEF43A3B5F158A0216DB87FC8AFD512F8C5B0E0A02FEF93061EE26C084A7FB0\ +445B3FBEF5D0C4EF5FC9E9AEA1927AFC925E001F031D90543C3B8456DCDD4247\ +70BA3B5A5626E0BC37372CE40F0421C72485B7F3070511C88971A3D0353BEF0C:\ +F8637008154408B2D169A29ABF0562F5E3F9138056642B36F6BC96ADC6D11B01\ +77781C5D5751A672F357FF2213915F73:\ +57EC7A53D72A6050 + +BE505B1B8D8574DAE9731479E64446C66205FE6732155E46B93497735DD005F4\ +67BA45B26F700EEE9702F14F2D66D3D7BB2C37384DF410C572024F0DA8303057\ +AE78E6AADB665F4754FE8E4F9CBFA0D52D845CED97822B209D1628D7FEC440E9\ +ED:\ +C7718C6903386C1FE3E06352D5D028EF552AF684A67D370755AFC213F889909D\ +90627204911E832884F0995B19C9BDCCAA6CDCA34532A7C67E4A102B2D4CE15F\ +4D34C7D450696A3C4835BF7BC184E4E463BBC500E833B000C90C86690BFE4D78\ +7B:\ +BB7596BF0FBEF3B5E8F445F941F7F8D81127465E0285E5778B28CFF2D7CC7DB6\ +51516DED09265039A2DC40E8FCBDDDC2:\ +F0C5923ABCF86DF3 + +93706C09FA219B561D5E98377F36AA97E24344EAF78E6FD9DD09F164FC63FD9A\ +5803CAA71860846A295340B66D2490949E29614F7F520634C6A333B985864023\ +77732375C16AD101A77119C813F96253146C70A611248964A32320508A075B09\ +486B:\ +220662DC9C37FD9B2324F52C97F9A2B290E64EED828FC5143B354BA952A71AB0\ +690517C1EA9418402FDD1B9CDDE018630CCC9CAAF9BB15C643A24B14139B3577\ +12ECE51A85F99176E87DFB247217714CB35F94F69443143C8AC4B23556302B63\ +3940:\ +3409E8B48E54DBD570F2A08CC97231B641C01B1124EE9E1847015864557C41B7\ +CAED50814BAFB12020952DE0919706ED:\ +0D87C3FD719A8A41 + +A07F4896900091174A2228A2C1451F2FEB7730FF252B064ACCDC5EE02E0F4195\ +0A2EA58E87BAF5FB0C3AF10D173B9109A7D35C93FEBB3A817808C35BFD735F06\ +E068125502C3927BC4FF91B30C653D2CD6D1EB4FD431BD7D0344393DC25AF200\ +F153BF:\ +E41CDF1572B1DEA05F141B76E900CDD443C63AF3138D48A40BA86E55173B9DDD\ +D58BE2DFD0283D80A19D6211FB746066AEEE687246334ED91DB94DBCFD5F3CD7\ +AE7D4C726D8E52401101DBF61E5B23A20F28172E1EF06A9A74CEA6E558523DD6\ +E27A24:\ +AD2BEBB797ABD77F7E1F02E37089009575BEAFB02B7104CE55A17D08E2A7196C\ +75307C6F315A1CB7A03C5010A73CF976:\ +D598B850E3F65256 + +23ED775F51A23B2DFFF0AFE780AC30DBD3F0E81F4C3815C73A8604C2E9539449\ +CCC4B5DA1FEC9F3EE270A5B45CCE0AE26F1C47F0C7A492656E3E760119CE8B0B\ +5C47C042EAFB0F81E842566D7EBF410F6C05FCABF94577DF64C8A04FA3B17167\ +8F49FBD7:\ +18064691A1876101BC7E44B8586299345C30118C710B0971C455AC2C9CA03297\ +FFD625E6AB591B14281616DE2F7EB60858BF204B0CE3D23ED3972AE45636CE69\ +FDB916620B63075AABB692404278423D8E165908332DCD86141CEACC79C9EF3F\ +1ADE49F5:\ +DBC40F78C4EC8EB9E008CEC9481E827F506157166B30960FC7D37725551E00FB\ +DA94D3127E77FD80CC8293F23DA5F2EC:\ +29038162670DE41F + +6DA8190E62172EBC0C4353881FC9D7CEDE4C34DEC14D771552E323B91D1641B3\ +802E02BB35DE22CF7B2FFC7A4CC0D923B745E6E1ECDD3B705C52488B82A2ADC1\ +6F8910151080CDCE760979DCD49F83CFBA7F404D6A564FBE2BE119321695FCB7\ +3A737FED53:\ +AF678AF0ED467ED7252D0D886CCDDBEF707A6F1DC5D9C4C9CEC036B15CBB1847\ +505D408B09EA31D705A40AFA0B125476F30E43D4CB23C7321554F151671F3350\ +3FD9C9165BBCE2A0778AC167BB9EFA94ECEF43F69440837575B369BF4C9FB50A\ +25F74BE2E7:\ +FB46F6F9BD972D0F6208EB0CB8B92FA2BC111E6045052F0AE4DCECF586FB06E6\ +970B587CDAEF0C4E821D3F667D3599B9:\ +700973A9E6C61EED + +3A0D8D953D9F291420E8CD7099191830111C71BAC5294CA880785829EF9DBBF2\ +01DAD5FA124B0F31794762465AFC678C8681F1A46DDC64F4BC3D8ED47ADB35FF\ +BB1120B09D6D720F74F270A516A217006649A759CA2076FFEC9990A4671B5D4E\ +251ABDC4E90A:\ +02CC827B1CA4806AA14035F587D56D4F75B22CB48F6511B8B9326B212771BE3C\ +3806C494BF6952D087A73EDD7759F6D0CEC7B2794B8ADD1D3154C43F3C2F7460\ +E1EB0989FB3DE93E06A8B10E2DACDAF74B769AB4227477F0A6EA2FF579CA5E82\ +1AC3928FF9C4:\ +89502CCCAB5CF8827C0AB805D1B3A5F94BEF4969FEA7B5D0A19ED930F9A8F3AB\ +21CD7BDBE84B23DFAAC0C794A007AA4D:\ +0F684E80EA1311E0 + +8DEC08BC76633DA1C5422E55AD5736E57B0FC871F727BE6C9AF892D6F8DC50A1\ +7059D4BDC38EF55E8D334F54D253F9C4F3AB60852B896124A91331AA7EC88E90\ +40B84CBBC877EB9AEFD4CE21A614DEB44D5E7DBA600848F1FA202F8743B0C27C\ +C816F303DFF835:\ +7392C4D3C71B92464AE1F221F49B42E01D867C03C63D97438F106583D68A9642\ +B557D39EC5F69992872FC1022917AD8A930B12510C363F7BF1FDD4C30535B1C3\ +751B1C063197DA27AC88DA521E6410BCC045F6D6643067CC099AF59172F3FE66\ +8AC4BA59B3979D:\ +BF89275DD43670F4746D7A6F3D9CB52887714CA795705E25EC58855A7809EF72\ +A78EDC25D9B3F9929A0E69422C46012F:\ +FFDCC94D1EA51492 + +8D043DB31E9EC2F90B1ECCF369AC28A912C01156246E4E8FB71EEC578744246F\ +0E415950D6BD1D1B87889A24F00B4657B8F2F11B6C067058817DAB2C7B2813CC\ +B87DE958E4034F3209FA5A0AFD47FE8DA06CE4263BDD5B2B33CCE1825D5D403A\ +F7B4BA1E0A40A662:\ +FF30AC926CC80F99172E0794C460CE53CF46500EE931550497A80A56C25C0329\ +0F9DBA4B85AB6CABEC30BD91334A82F69F94A4B90AE4BE0E8506F52E9CEFD000\ +D1E64642F439D6BDD39A4E7AE40CC81CEBB7DDBAA72639F1C068E6C83DAC5E6D\ +190848F1AC46AC74:\ +9D819A66A8C2943406FF51A5DCB7222904C70F138DA796B55726376E2DD9BFC1\ +7112BC6842012D352B31EAF42793DBB3:\ +C82E3B74B693371D + +98C51F1D9F4308741507412CF4A87E3385B108A665A1106F86FA8A17B30F192F\ +879496BAE8720E4E0AB3374E108D100F6951240B794D92294301666EBD93F13E\ +1838967DCA554CCDC355613197D2B42A42E9E30A283EFEB5D3124A3F1FC8FC72\ +649073786AC45FA99A:\ +50729CB7821BFF80A82CD63FB9E3EBD5CD930FDB3C7826CF4F257186CD5AEFB3\ +BD566E35C920A99F7D1972C40A1EA3FEFB53E9AAC1CEC106211E568F066894CF\ +22636BBA5EF1256DEF951EBCFFB9A1E2C622B48BF735FA129DDE4B222AEF6333\ +C263354454EBB8F294:\ +3F5711712D16295C653DD906E3D5DFDD7DA2707CE7CC3E1F0DF9BBA9F7D53E5F\ +743D79F4F54F363915DF3AD25E81EE63:\ +EED0FE35B9268BD1 + +095225A597E7703987E5AFC522F74CA7CD10148FD1745ED1C15B79FC9AEA7A7D\ +CF4A9CA18F34FB0C7C1DD562B99280BF771DD9E1A5853739AB094F75FC4DF146\ +C23BFE60EE4EF71C48F31A58D8E3E5EFF006ADABCE33D936CACCF58E7CAA3A3E\ +A9CDE825ACF174C483A9:\ +310FEA486B6A2B26E2058B73194CE153CE1812FC71E5E583CA1F7E4B28023669\ +8B2CC4557537975D76B87E2F224705334467BEEF35A65F6BA2D8F88E7F8CDBBD\ +06B9B23FB0E887AC97FF9A2528020B674E282CCB9C60384E1AC321F2B77503B4\ +946F0ACE9674113CFCF7:\ +F39966BEC7E60CE51BD220DC5B2A2B817A73CE7767D6195B08DE70D5B7BB6BA9\ +7F8E4DE1327DC33E6E1BE15759FCD685:\ +68F49770C9E8EF60 + +1EA813DB9BEA1AB0692B720B9753049D8AF9F5BBC88BB969678A3D70DE64A865\ +B1328AE3BB982267E87002F435DDDBC4F26698F15B997F920FEE7EB98C169A29\ +339AD006F0EC5BE1C68CC8F485CD9EE5792C3C2D200DD23026B377FBD7324314\ +53870C73C1679AFDD2C078:\ +EF982CFF693B0B6F1E9BBC70BD9890D645F720DD3E5F17AA7818BC6F578B0CE4\ +CF999E24EC9EC0805C147132218A168C71BCD5A4E70EDC736B7E82BD5CA5A562\ +DC8A825FF494DE2371E494233757E8730A0A87EEC27D69E78CD4F95FB8BF6D20\ +D76F84702A8D96E4AE5825:\ +937014D05FD4A6C7FC3DEBA0AC06B776730488157B714DDEDA80949C49941DF0\ +2A32AF225BB58F8EC633487E4E844B2E:\ +A8AEE70C872BEA7D + +DC85F77376B9FE9FC211C531E1E09AB0BA65CE08196F2C31EDE43D7752EBF5CE\ +5F166788E2A7B3BDA50A1A1D84136CE0883BAE64303B836BFBE515A17C6A660B\ +30A32C53D8F7E275F87C78D8FF043BA735F2A58A0818D1D3B7EE4BBA7F6B6C8D\ +BBA6A2B269275663785B4A68:\ +46B23BC98C9894BBE2E0727237C84C51FF5B61CA28457133173F74F9FD6C7B1B\ +6D0257DACE267AC674F8BDD132FA8B3441C216C5325535F13053453A28AD4C25\ +F00E9FF5AA2CC2624DC3C96106D3E4B6AC6928BEDC29BF64517E6C15283E6ECF\ +E9D5A78CFA04AAE1C6BC64D7:\ +BB974000A47E092D7086699EDE730B3D47D817AB689468A35AD22BFBE1783F52\ +E91C018C4FD873A3C3124F8FFCB6997B:\ +F380287DB78EAB5F + +5B9F4F0F7684A18101410FCCC4658C617B1BCD640D24A7136CD395006BBEADED\ +79D2ED278E69B4CE5C1E8B8A87FE32F5419CD57237892D6F0491F7C100FF4900\ +72D6D5C5BDEFA8F170789368C654AE2CECA1ACC1FD8A42BC352310937F76F421\ +E73BDD2B6F94884394AAA31F66:\ +0C20E6F66CF472C633C31C153E76EF66BDD04D83BD6C4CF2204583D3DE53C66F\ +778FDE72D2A223C71AEC84918840804D7618E95B71BBDD70F2427A2CD8CCCCB7\ +129C3C51373F0BE15A17674CD9CBB0C9E2EB58227C8B83E8F2E8A120B4D7C18D\ +D56F78A8164EE96E0322CE3FD2:\ +A71E32626200B616B73840AAEC8F1DBB372BCBA6B499724599F0DB60B5CCBF6A\ +3BA7873A5A8FB76595870D69739540EE:\ +5219C9F682ED60B1 + +9F7BC0B23B6E7FD175D36574A12BB1873613774711D8A5EAF1310CAD04886DCD\ +626DA73B2A823EACB83AC68AB208D2ABE0EA1F4C7905CBEB9D02918843D446CB\ +1A141E2E0774E17FFBEB962B2E1D5C4FC97FC4B12CE1408837B643177860E3E9\ +76131393BC43EFE284D8ACF38865:\ +D8DC8267F712888E0FDFADEC4D0617C7AF89CF46B4E300E18D1BEC07E1435608\ +A90FF500FDD0ACD2AB036B56510BC63FF4361E1AE6FEE739E9AA338037E4A774\ +CB6F6BE1803293DFA5865715CB58C3D6BD075588D0367B41343859ECA025AC54\ +B4CBD4BE5BD2A79D3D669479F0C9:\ +DC220CE4170F9D208B02B2913D416647F38FED24FF925AE59021AC4E3B67CC09\ +1924EEED317CEC8754F0986BA93AA26C:\ +629527F24208CE9B + +86BAA5033E5EEDC0A9F153EECC7849A21BE305F673AFED4E97B16F4441C9DDA1\ +24579B3BC85320B521E685EF09A66E17A2FE37DC3BE3F8A6AB5D861B484E1465\ +8517FD2BC026832C9F6464425FAC2437B27D7CDDF069AAAA16106235C751EA24\ +43D9F9BEA74FDEF0D60735BD78C731:\ +1CBF67E89E6D13483C98BAE5A36E6EDD1AD12885DEEE765C401DEB3E7EA04980\ +C499653F81D17DE8B6FD763F0D69FA2C977AC94DBF58FD17BB0ECC567F5CCF0C\ +9D85CF3FD7F7A2D3CC4B02892104A6B070FDA6510C3AA867CE1229660740850B\ +92CBBF26C4888901DDE695E09C3AC7:\ +012BFE1E9BD611171036AA701EEE7C7BBAE5943AE3515FB139A41BE23F82A212\ +1809B8042FACA96908E3D89704A7B71D:\ +AD0710909DD4F20D + +B531FAE3152A66C391E3A63CAACC1CC495599703871E34C07E00C654B733B7FE\ +67123CC899DC5C3F13A7B85604F53ED2993F5BD9143E9B493D3E0610F4F6F919\ +3C595E7576BAE7191AD57850D7431DCBFDF6DE5DEE3F7CAEF6B99CC89E9FB6EA\ +DADB41AE87408DEB85E05E8C9ABC5FC7:\ +4374EDD79E8C265C5D277941C3293075F5AE796533DE54E34C4065E167652370\ +238D673DE1FA618B80FA805A317C0B3B34D1230E8A63E8D91F701AC81E8DEE54\ +E33959D80A468404CD351A6CB7B8C1CE808F7EC77F6D6F36AF54555957EB3B0F\ +429332D1DCBE98030346F1766CFF5C1F:\ +7A4382B3A9E640981582C9ECFCFC0290297CD0CD40D00B0BC2FF88EBB229F4A5\ +03A920C4562C68A64BFC29FAF0BF7F5D:\ +AFC6C2F5D4C1DC54 + +381552281B5183553EA1605441A8811E5BCA184CF3135FAAD0B5913E632D1195\ +7D46FA45B0228B05D9C27F5782FBD48911E22EBBBF1BD923959D34D44D3BC947\ +4C1BF46A8B322A6B0177611CA9BE919356EFAD688D460D1FB3F2A1BE55B6314C\ +5E108CCAB29E71A879F3AA83A88747A757:\ +1998655B88BC035ED38A24E673AD49348E0EADB9F21420F1713BE09729FA844B\ +ECB82CF1327C949F5E40D371A326BE90EC3F449842161515D1728F348575D0F9\ +63520A1444EB1C880C0B4F190463DEC21E7A6B381D033AAEEB4D538C703694AD\ +628DEC56FDF2B545560087C22E93207EAC:\ +AA1F76305E46B7F90C6D80F92AE5E3921C8C693D383CB141B9A9B61529369AF1\ +5F042ABD45646E9771F2084AA0BE50F4:\ +C0CD473232F5675F + +E3A3B1FD4B3F0F6309777C419BB9D3FE17FCC10DB62BF03FD48F8E4DE5FD8FBD\ +5D8EF4B2F8335F6D7CD1F8F4DC65B9BD43C145584C5FE5ABDEDBF946C0D6B4A1\ +C7338B202437DAC59BBEF404B97E321D4A1658F358D4989412016408E1B32D25\ +4F860CE24D8475C9090647F68819AB5106F6:\ +66F4D4403CE5B68D31715468B537138EB40AE4290ADD05F4970DC0ABA75F1E03\ +52548E2597460CF93F1F952687318B28F1F35EEF6DE44BD966271A892F045F59\ +93BEEB90F3D5DFAB5EAF3FFFE2F1C396E9122555C03B40785D9BD5E48340462F\ +3D279C0C4815FA2635D9820EED98AA4E5312:\ +026BAF447B1F53B87A949C517D77874545A5534AFE810B380FF0D190424BB8A8\ +7FB570EA51739E190C69CCDE297CD610:\ +86BB1FC00DE415A1 + +961C1C4E0BA6355B95FF4D0682E7D3FC675BCEC97E6FE7B34715209FC366B8A5\ +51D1C2585304BF4AFCFEBC14D305C13D3851734A5FA21E037AB94E5AA0AE5DAC\ +31C595F75C8C86E3850F527D60649C8E02D896261F387253603450CFBA206BC5\ +CE3C23E15853AA520C8B29D018EF1BCA7E24B3:\ +DEDCB954C69B9E9E1018E356B5EBE808585CEAEA1FB3A1855FD45E27D002AFBF\ +C38B2648698B5AB2B4C9A730121E0E2416A95AF1BA8FF52C18298E1EDF742424\ +1DDC6D633AE2B4453B211064289DEF7D158EA812D20E5856A8AD90C0B205BD21\ +F9AFC0B3FBCC06097EF28210C8D1B813A82FFE:\ +1736488BF02FE3C6553160A5716A38880B53CB716EC071C5AA3CF1D655B769D8\ +11B0D727AB5AB2F1F055DB2A975ED089:\ +A42699BF4EB58014 + +63028B1B17E373F50F256F9F4B028DBEE83CB070FD6D3BFD73F2E2314A5414D2\ +DDBA20E499FD0F05AFC0A2414F9FBB6193F16D4F497EC48AB762092ECDC677C4\ +04959A91E167D0283719C2B42F2BE6DD09AC3D15A35227AFCBE10CBF931CC449\ +25163065BF2F2542DBE6489174153501017AADC3:\ +DF7EB8853E2EE46ABBFC0258DF6314E7DD9C60210652130B922FFC15A450E818\ +8397B4884B53E1C071871580CA14C560D3BEEB24B36D35C144977B8D862BF10F\ +8128F845909BC1205989AD4471219B5612FFAE3FEEC04FA0AB002408820A00A4\ +02CEDFAF9FFC7B0CACAB3A2B067332E20740FAD2:\ +AA84101A8B24FB8BFD62B6D7EC613FE221CDB265FC80E125404D6809D9A8017A\ +4F4113388D85222EC7450689627AA9B5:\ +CA8403CF35C4871B + +99B2AC13EAD705FC1553812E6ECC62D202F5C19A9D782B87D614412BC171EFAB\ +01E35086F3D2219FE992506768F93D80FC945E5CBFF059CE43636E09CD8099B1\ +2167B61ABCEE46CD65867FBA1DC17D0D1FCC3A0E24382E5D928E9ED2DA953929\ +4BE658E19586B8053EFBDB60D88775DC8DADB7A18E:\ +33CFE5B05C2A4006DEA05DEEE4E19D6C17A9224E85C4EA4BC9DF9384ED74DF6B\ +5FC75FD4984BD167F4F336CD112CBB8F3929322C9F69E06435FCE2345BBD0257\ +F00222D312EFF4388C2AE2E300F8842E8F4D4D97F8DB45750FEA5CB8776E7A66\ +DCC773EA607CF425DE41EFC1522713423BB49490E0:\ +54ACB5023D0AEDB2A7E631BE0E626392EEA5C036CB440125974EED5C1CD885AD\ +43BC0A4DBA63879E723E72F348A13ECB:\ +E7C4F1643A1C83D5 + +90FB2D5FF21B18C4D6A35A49388CD2D61D4406604A4CD3A6A6FDDD0F694FB506\ +B23F19354D36D54D13B92D391EE885925412121CA9F9437564B3419476AC46B9\ +09ED635A4907DEED2176A8FF9514A2233D80AEFD8DCDC0B397703E50997F13EB\ +A8A11CAE4D156B881BB942F467277A9EE962200E16C8:\ +937410964822DB97139DB2DE356C0468EE5773EF15CF9876B90CC8974A905A7F\ +781E5C016558501B434E94E6CDCBDA16B86C0BC008BB73152EA7ED24C0BC90EC\ +EAF0D81C600726D7F97199B3974FD57E8AC264FD64865217C8E93E97871646A3\ +8019F93AF873C8B02F79272E88C334132E3D86ECFB66:\ +512C09916DBDB5F8B75B8833F56845D5E155B5C4DF57F22DA737BF8530754FFD\ +68A64B1421B3420AFB5156806C4CAAB2:\ +BDF4C9FAE71847C5 + +326630CC6BC9FFCF1CC4E275CAD90F994BF3DE828838B004813432B581B64AAD\ +A2727BD63D9455B5D69973740BCF0E636B517ED556A71F13A23DF801582F71B8\ +18C243E0455C91E0E3E2857405A8760E56ADA3103E995CE05979856D23E0325A\ +060A9182052E94880FCF6786C8D89DF9B2EBE6D6D468B0:\ +E33B18E484EBB8F777DB40C98BA351939E3D7517F84C88B35A231988166C6BDC\ +A4DC349DACEE54EF438E4951B360C7DB39703F2E977FB9CB2D221280494DB648\ +F97ABD8847A4D7E56E32EE8B5EC16739E2574A837F12D62D3D3E70B010D6A6B1\ +3D894D84AAA3CBECDE4F5A2FD407325CC7A868561B9728:\ +96EB4B44EE1A3F55DB2BEF1F2835AAF095BF74D918B28A6159F5333AF6ABCB56\ +53662DB912C6D88776DA9BCAFC421860:\ +EC530DF9EF4DCEA1 + +7929A272F2A645A2C22F98CB3E51CA00A0027E32785600A13C537E1F1262EDFC\ +171CD2E2E5A3C2B7CF97720E9EC5E71AA7ABC2047868E1350DA36704488B4698\ +BB290B1FAE13712BEE2BCAE519FD1C02E4DA80B59B148C92D9FCEF5A3867F06B\ +1DD983D740E6E0C03A52A862820C96C8472F78A490DE2ED9:\ +3DD2F3651E53DCC3737D2B50A5DA016359D376DD53469D87A2356D9CC5078973\ +B6E9C9E9A263195090A35EA8D8C43C3B8716F738063E243164E8A185884BD638\ +EAE39DB8D80CA45CBC5FB1BC19660085EF959A12C65D9BCE178769A31BB1F15F\ +2C336D9B45790CD62F6DDF78701BE4CCB80459B8DB0C729E:\ +7F623C50A1B327877EF08FBCB5CF8EC385B4E0E1D385DA5BF230D00DBC27C069\ +6AF2D730F79C407EEBBA37EDC3996E0E:\ +0CFC07373E27E329 + +A8C07161CB10C5B83F027D883277BFCC92BBA4131B3256B685FC72E773B5FE79\ +7FA612817663910C19D77C2C1E3E60E0A1B0BA69065F60B446B816EDC1E5115B\ +57790A254758A8A7F156655C70AC82F891B99414657CDC3B07E22CDAE39D4986\ +60670C652856F8CF8C3B2B3863080D28CDE50B3768B322C5CF:\ +D6466C3BA9BC6F250286417929744CA7FA5A674511894C5A2B3D196A0864BA6A\ +F9D4914B3B69DC12ED10D9ABE4655C9276E876B6E91A77F076019B8E3D346849\ +0590F160414B22BF2B2A9838B456460FC281C69D4BAD7D80764B69E5A7422FB9\ +FC2DE6B0293152A132F795F7B67C4B1DD336675181EAE7F66A:\ +027088175B3BA6679A5A4B9F7969092F9D82341AD4CD0C26C3CCAB5EB842CA0A\ +F8D722A85C04BE5AA4A633EB2004B933:\ +A2FDA73196F77710 + +E397E0CB0CF5026433491726884F8FC9F26A240FB71AC556286FF70226C30E22\ +BAEF81ACA4A5B9AE7BC76A6886AF26D68ECEB353900D9C2C6867F668C7A4F003\ +53E10BD57544A2F227B5AA8012ADFE1AD305B4758D19416BD64611C2F1198C08\ +8FB3BE0764BFC6960AB30828A16452808442CE13160E3F15507B:\ +F3CB60A09256B5F00807646043E894123423D9BF394319E2881AE9DFDAB7EB0A\ +B6D0089A3D9252B7DFBB85AC2EE7B36BAC6942E484B8BF8E457250E2A590865A\ +F6B02E30C4F71D0A728129549DB3C2F7E2197E8472A9D2BFE61D42D125A3F8B6\ +0AE9D70C71653EF6F5E3CFAEA2AF197F84736A05D924EF6DF03E:\ +476CFBCBA17DD8C1DF71D12ACC2278FF358D44CE9C46969D78DDE006FF9C0B79\ +5AA4629E488B142A95B33B71A024B52D:\ +BAD16417F152E362 + +30E894D45041EC1C6C143CF9C0942EDB0E39ABAFF069518E63045213A34B15B4\ +706706F3CB100A3651F965EC31F2A2D5E1CF0E130398D2BF4D5E8D60EA262963\ +90A20E20EC15C443083FE6A9143A3261747FFE06654F95DB727B9B907D0518C3\ +733E6A37F9205A7E0C4CC319A11FE519218A91506B817F2137E487:\ +27396BA018765B71CB2D8086CF551A0C0D7A9092F82CC6636095EEC9DB0E031E\ +A443085825035602287D16A40CB4A30E2323F6F0A7D2284B744783015385DBEC\ +E6FF11633226E8E597F3BB4DC3A1A6B782A13DC241D35C603521548EF6449651\ +283754613641B23FAC4B562D8E747EDA82BF3A024AFC6483F7E84E:\ +3228B497EB4C8E1CCAB63280BE3611FBF719C032509D764363295104B2711FDE\ +F3C456C67D6D30F37DE5ADFEDC5DF7A0:\ +B471C77B86C53238 + +1CD106901E31D8C0BFADA8CA77466A1A8D03182EB9B7FD0F25F9913CF8D80491\ +2E1665C12531C10041BCBE01727161E43DDB85D5BF57FB2DFE7D28799BF19D70\ +46DCBB0B01EC8F9D3789BDC62A301FB0672AD1FBA4B61F520E408089628E511E\ +6A9268F33D4A913C449356051B8D1127C90052FB9A533F0D1CC9EE3A:\ +510EB1ABA53228A007AABDAD204E7D845C5801D192899DDB2A0AF3AED0F40813\ +AE28C62884027690A8A9934E07EF075CAFB161D3FF3D3ECB78DE8A4BB8FDE5EA\ +86A203594F314416E9CB6EBE714E9C16BD6971227014ECF7F4A0F5E926042CB6\ +430CBED27419D69CB1B25DDB4B3A5E5FDE85FD092A6BF8043ECF4F16:\ +2E2696E9A23F49DF3E75BE263A5B2AC3D359B2E66693768AEA3DBB84A8FCA201\ +9754B57ED1A4B5E88C8056963DE33AD9:\ +2E2C2A2708051A03 + +83828EFF523E59AE2910B8DD6FD1602F3653CF9F557555E1B129FF1C30B735D0\ +22A3A505E6E5E091F786ED1946F5751E9C1D6584893D5D6448E52839AB1AA9BF\ +BE40E15A8E6055BD2CA529AEAB21B3636FE4DC1708821412FFE29963CB529B2E\ +B39619C421E3D751BD6653B0259278D064B51C2247B284F5E90641BAF3:\ +424881C0608E74FA85D31F88693796005CEFD59EF52C393D02E30DB30E56A473\ +B5911E9FDE98D8D9F4D70A35131CE58ED4F02C2E07667E8B2ECE5C1F8C10A0E7\ +30EFEE9C6BEEEC016280F642A6284D70B7280710528B0A1855FE40C5FDBCBEE0\ +4DE73B15890C1FBFD5C1D449F94CA6E681C689C45D34D450E7324F8203:\ +05FDEB4B2A121EA8814A9349EC0C957BE90F78B1873D2B12F1C7381027C23DAB\ +D5AD13AB003E7308DA8673BC9C0DB19D:\ +1D9DAD8CEF8D5C8C + +84618CB880FF09C23976808DF38DC7ED98FEAEC593470448B090F984BFA5AA21\ +59C6199BCC19153B6432086ADFF5D163AA8ED058C70F4C45194490D363936571\ +DFE08E5EDF0C198E360A40BEA55331B5A1AEE82288FABB7E048C65B660F39FCD\ +9E05355E098057878C8C75CBA7B88C45B730489E6CCACC75FC943F5C2623:\ +260F58BC20B150792F35AD8987BE0392B11613F3B5CA1910351D046436FD439F\ +47007A7F1B30111C1DAFBAADC1594BA622CEC7856D968A7017F18C8EF885E36A\ +F07B11572D0F23D85E4F1DE3F31705E706F8537B23743751870E2BEB56851B6B\ +F86124937A1E9BB5109380E1ADB3680D78D2D915DB859EA6F3B00B3A3DD6:\ +5AA847862F9D37E61012209118228340DE7BD035951792893DB26EE6DFE11D43\ +4211CA6568E0656947A787DEF4AF63BC:\ +74F3DCEB52677BB1 + +241C0EDE24624310169483018309911076B72A6D79711B1CFD4F337CC4DD28A3\ +6F4DFBAEB1FA8A016D7A04973FDC30D1CB47ABE02E49D5136E1069E9269CA047\ +A5C641D554CD1FC034B8E5FBAFA82F640689274CAA3C03D2A00EC128A36F2A5A\ +43EFC189ACB7671A29564E4682A0C4E84EAE11651EA62CE56BDE33AE22B6A0:\ +3F403E71D84C65972E338AB50B344A75C97673869A03107A914B496E6A663D78\ +FB46417880AEA9F5C3DC1F507BEE6E43C84DB947C967DCD42031AB8B6A036ABD\ +B79AE2B109BC01AB6CEBAD9475890316A718FE6FBAC08C260CDDCD1EF7A9A9B6\ +E6818FAB45D66D567D6B90BA7630C5FE2B2875ECF11B540F6945F1D1ABD5DB:\ +4639E00979406AD3DF52BB846AF2CB20A90688DCC7BCDC94801F3F53FA6B30AC\ +2EF78FD4B774FBF75006F14169FF5005:\ +994E47543E886050 + +30B3F3EDCDD8961CF876F947DA372C6BBB4B98CE57653A7975335B0C571444C8\ +F1BADA230EEB0F1942066ACE8AFDF8EDEF0C114C8884BDD0EFB40E41464823CE\ +BC54DA9A59C73A4333C3A193BAF1D4BFEEA6A72FCDB5A42C034D843FFFD32F10\ +1D2BBA99FA96AA4374EA7181B4B8392557FCA8D3A0ACAE29A64EA1D67507CBC7:\ +0C523E6C12144C99B91366DB1845F20B66BBF7EEEF07D227B04DFEB0DEFE2D9F\ +2C930D7D819CEF968E89AA6812338AF942C15F6233E9AB551DC61454077F36B4\ +583035B4E383D8B3B07B8C6A43053FCF0E3315B371B55FD791DFCF3024417035\ +F8E4C281428107699E8CABCFC475DDBE5124F423B5616740ACB73742E7CF2035:\ +F994230CF918A2A9AE718C56190692242CE5EE9D9EC4224482F1DCB2CCD6F1DE\ +0C031E7DE9D328E22CC035073F29995F:\ +7791293C3BEAFEB5 + +96A550AA095EC65E187A257F9173864733C8BCCB52A252E664D00E693A02701D\ +4652295CA84F56D87D787CC5ACCC66470176AE1CEA5EF91B9ACD3C12EB011C99\ +A36C8402ED288679A1BCE3C1AEFE1419640D8ACAD65DCBA884EAE38AAF21312B\ +4A15A9F203891275F7BA4739F2D77777081A8360BE8013762E10EDE24E8F72BF\ +44AC020468DE4E88A1E21DEED4B065DA8C94764913B8559251C7273FE7D31E5D\ +A4AAF354FE9973D428C7419AC1979240A29835C91C1D589C385110EC5F4FBD07\ +07A63A9B4391E2598991C52D981E43872F5E53D501A868D1634C72C838B37A27\ +330839B86DDC4FDBD75F874C66AD0B7FBE399B44726DDF58C72514FED37D34AF\ +CF3B60786A3B88DCF6D527BCB3C83867B8F02DDC5FE5DF00370BBD9CAA9638B5\ +2972EA756D44440A92B94AF9AE58DD0CF30A1F403B05414E0FCCDAE06E85279B\ +2D471D2B675A3AF72068A8C08B77D465A67899AEA9F1617696FF3A811ACBD7B5\ +29B86C080C121DA387091E6487733E682EF1B79358553BD912EF0C0E064BF209\ +6FC05910A051C12AFC7412390DCCBA0F443302F081884A78E7D1AC4003E3AFF1\ +B878D4AE9CEC41FF28DB33C3A60DC042A0337C66421BE343B32A2D190149DA4D\ +29E8628D74585FA06D48C4660FC2433A7EB03F40B184BBD61C7CF34E7C54D7C2\ +E7248170846473547255ACDCBDF0BA94CB94268DAE79F7BDFD7AA68792AF1B47:\ +CABE649915F699A332C711AF76355D1D5D4D808A6BE79A1D2427CBCF78D3EA44\ +C243F1E75A42E0A5F40ECC8ED98ABD1B439180BB396C9717053A7A109F5D9101\ +02832869913AB9D3E458BFEA21C9C4BE18D153C14A4292FAD129BA600BD7FEBD\ +B3A1F4AB1B5A8B54E389817B700D29944BF00B6B7C8A3B43EFF7A7E9B0756CFD\ +B0BBB17350BACAF2CD229D828CE7052BCF64D87E7B0E39F2506CFCF5F4269CA9\ +076702D437AE47658ADC14A3C6E2CDCE58970303CED58F48839351AB86A18F52\ +61E088899EAB82B90AE3A129817C3DD55390D1A73A54A1536ADBED0CFB550EDB\ +D93E8DE77CB90F469213CC2F721B24B8368DFFEBEA7FC3CC02A892E4A2E7CEF1\ +DA2172EFEABB0C3941502747029A10157B257EE9A0734EFBD125064B412BEE6D\ +0CEC4F48E5134059618A86FF58F132719DA91EE2258FE7E1DA9F3FA356643127\ +39A9843C9C056D4C3FA3064284933F0DD48B316FCE6FD09769F05FBA38FE2A03\ +E658469A5045197307F60878A93F1FB725984FC737FE1049955CC0A1140230CF\ +8B4D7302A99D6F5F10B5A524B5018B93B81F2481D5B1F4139B37C246B5B5BF2E\ +3ECA966930CFD35A38B30D1BEE41965C4B5D936D98BBAE2CA49CD5359880D551\ +39E3A2A9B2AF9A3BF7292B1B370471D729B0767F1DA185DE2CC22A25C5DE3701\ +CBFC6B686CA6DE58B73780AACABF90E38E6285C65470C4D64D79BAEC366A569E:\ +88A8AE1F03C7A67A5674BFA270393D06FCC69E0D902928B276F7E208AFD46A5D\ +14427955D0D296A79CC2E0B581D6C7EC:\ +421849BC8362455F + +8795249E8A36B4DF61ABBE7DAE5D825E47BCF9BC3A2A20E313DA65EC2185B64D\ +F50B97A56657E8FB09DF29F3C9A1F23ADE5FF6A8F046E24CC067F82D325456E9\ +65C8943FA62FD89F72E6A36C2E365F40A89545C2F58114ED59AB88715573C42D\ +1B56F997F399C037042EE34D8308FADB788522D10A07A713D96B4148AC84AA9C\ +3022826AF28F59F8AC50877AB878BC0DCC7D98EB4F9FFB053A5AD638F0CC9880\ +B58DD2D3E191FE5CD57B348A35E7B77559C8B66C98DCEAD5592406DD340E5C8C\ +BB75621411BF0C2AEC88B5D4D88C4E8948C73EB377E0CB7EE979D41125802129\ +FC7609AF8E98181E43995CF7444CB2A6166FE755F49FC22E0F457C3DA821AAEC\ +0507EB7775A796542F79B07C5BA7B1FB70E7EFD0632A894F627BC0057CF3D46C\ +9F77A1E37CB039F8C4EE5DFE042053DAB9A240079F811CF9E56EFDCC049AFFC9\ +0EA3DDA6332F4AF24481BEBBE42677AB75A23C6BC4ED111C7E969E36E111D7B7\ +70306EC0B764F37C51E8E2FBBED2E985FB1E79A7A3EC790E32CA1BC5107FB99F\ +93FA95841819CA0DA82C0ABE4ED549ED02617369C83F3593FBE24741DE49C224\ +C493FD03275BA5177A74CE0D6A1167D2EB775170761398B999BEA4FA38C490B3\ +4FAE052ED6E9784A3A5E5ADD4C78A5A00BF01B69C66E001D17CA64A812881B5A\ +E53A7A02AEE073BD1606D7FE82B4A7C7EB10D8452A1B4D81E4296C1B963B5244\ +7D:\ +264FABACE6EEF1EE9FC5F20BFAE7B70E2456A720510426EA0DD93AE4B2DBD71C\ +26BA266CBD3CFF9C590B6A0DAF1F36F616F72724F15AE64CE2EEFC1C2973AE0B\ +34E3FEB268DA29D19495938FA547CCC13007D4C468CDCA2D777FBAC5A83860B3\ +E339BE1131DB6190971847AAA76655DF6F97766A1E423C7FCEE681795F17D594\ +5EDDE2A964C29F992E1E3E43E8EA7D2E99E99F8120FCD05A3008C47356773088\ +A71731577457D1EE2F448AC39D373C3533D124CFF7B8CA187BAA9A0EFF64E14E\ +47B8A1D0F965B5099139D466BA4C85FD298695DFEDC2736DEF2E6F96285755A1\ +2003667021F6DFB6E8F7BFE93AF0908D15B843887FFE4EB111C1ABC13949F718\ +E9E042D8572E895D7893C9FFC31518DD7235B777B6C6050B4341ECC726744C92\ +5592A659FBC956339DB8483BC8A1762CF7C6E2DC00A66F18D1C8F14C2FED4B6B\ +E0F19CA752F8E79F254C5F04FD0F5676BA41E6B7709948C0D3D59377F22E9ACD\ +015B920433CE5DB61F47D3600F8B3916CF7CB2192F1A62C2C7D34CCF9C85DEFC\ +1B759FD4AFB7DCD6475D2CA538AAB662F8C38907D1D6E54FC3CE7DED78DA52D2\ +4EADC22D43DD4BD65E010BB8E752C391C8AC8783CCA284496373641FB2B2ADCE\ +81DD52FC09B16F0E61174A40806B054A6C3D3F90174AA7C5CA4C6723B9C166DD\ +1B462FFE6B2D3BD71AF46F45B16528CA45624B31D46ADE4A032CF978F83D87CD\ +EB:\ +1B51A2E2BDCB58D9E175E2C216542C2E7EF4E7C347662A569A005250F465CBDA\ +009F67AE8D9A3EC146D927A39B76D072:\ +FA6B7AC9D1ADEA81 + +9F7646FEA7A03ADFFCA96D05DDB4BF00D6A928CEF34C27A064C9C31928736748\ +D758B8DC9F44590070DAD463C6114F642C3BBAD73A2CE2B981B547427B23D1F6\ +7A77C54E8DAB0AE4477F5F1072028954A53E615D5CFC8F2895B3DAE543F58F69\ +2C4F68A9B949740653B084511E6595522A95573C4A5F09F85957DDBAEA67984F\ +3B029D5CBF44606ADE017E1183EF7124C301949E40B58808C4A3948327BAEA69\ +E11EBF9D9E9A5F7C8D625DA97FF0763E38FDBB8A887C5F49B7B719B979C405FB\ +C4EDA281986B985B135B74E309B28707013B3A245983C07F2A136D9CB72588B6\ +1BA442DE714C9C091629FFCDFAC95FEBFBE63C90E220F4B9B3D7DD0A6E625796\ +990D94007C7E7C97346C9057B205D92993CD1C1E6921F15364379B5777FEBF75\ +7FAF31663C33FC2763F205761473CF898E25699758C2CDDB30A7DD642583E4B2\ +8FCEEFF668F60724A74C3FE464B202987723C0FEDD04B11149B38DDEC9D60944\ +C2E613C244AAE4DA6485BA513250EA26EE374B11F316F1900517074FE3CBB624\ +32392B21325E72F4BD7DD2336E7EABDE29E64077584505C15861F0A7FDA0DA6D\ +543AA898DC0EC81BE952990ED00E1EBED638DCFAE0EFECE83B57E284C8CB3AED\ +C4AFDF8B80A37793E76A7B243B242AFA7DB00A7C1771CC5EBE0BAFE0C5ABC433\ +821DDF98FB978294CCE9C91B8F3338FEA31B99B2A2797EF2DBF300F60AC1637D\ +9D2B:\ +56CDA1D2A211F800DAAF2CC5B6E1FB645C7C259FE7B4F0EC04F7A508E3704892\ +65300FBCB39583B0FAA1CF1CB2AF6BA828AAB07AD1248D24291CF23CEB1D57F9\ +9DB1CC77284A5F8E3F71FC343D7936448FF268E11E49FD1D26745FF3CBE06613\ +A0425971C067DC73FEC74BE27736014A614A169132C6CCE8DA4EF569670CF0F6\ +E3768D6CA52FEC5D7A713B68C7DC3954007FBD34C896413206889FEC2471A7D1\ +357BB511D19E5DE147E97E63647EE6C4C0E7173CA13002CE3E285F2EF5255F3F\ +3882ADC59B7E9CC31504A16D94944203B303A8E2D2D091E687DB658FE7374139\ +01EC3B4E1CA25A25E75D805E4707C62307C60BA2CFB35B54C5F4288EB315B2E8\ +7B9318DB3E619942C1BDBED18940A1F4614956BE155D222680C151DA78AEEED9\ +E36DC54C70971172A1EAFE5C55F2C4629F83D956FA2BE31A602FA1B064752719\ +19A87130617EA5C74D3AA436B2E1380714AEB48EBDF782D3CB884D7FECC6FF81\ +16291124B717B8137F0FFFA6351805DCAF4BA0E878B6CE7A4905690406C172C9\ +152E88D69AD2444D011CBC33E8803A0D4590EE4239330878F5C5E8A8E125E4F5\ +0B77E412DA658AE661C73326020587D9F2FB7838F51B95A482646489C67EEC26\ +E1DE39F098ED50EBEDD48651525D9C451D9299B473AF1A2E7C376A35AE4CA582\ +05537C6558776ED5C76A6DE1A38A3608615C1F8D33B55232F384B617F6735A28\ +403B:\ +2C811686E0A407B1B61D587ED7C043C0006CF7A9B390C4A2757BEC3C14C25FEC\ +236B53CF37AF788C12165424187F7112:\ +7D8EE12C9E460576 + +729094DD633A174039270D6A85B6C10A0DD0875B89B0256D9147ECD7095DEAC1\ +16540D4F39A37CE40617E3E3ED147F78FDDC4F32DE32AE0DA4D1913C6CA13397\ +323C8854D5D863B3DFDDE349C20C32456CE648C356200FE4F4ABF2D8D8C94C47\ +F95298E1C34139D85E5DD3DB56FEE7DDBBC49FAF000066AAEF0A5B8BEA6E0969\ +645A3C639F63BA673148D46B06957193BD2ADDC98164B6A702707456090297DF\ +4BA8B6573D8749A1C4D58D6CF4F1B0A001C398B2F904F369BD0BB0C52285274F\ +329F6CCC9645B48F5962EBEA6C771E1B60EBFA4DD7EF9D6AAAC9F9887484965D\ +BAB8EF2114FD60EE2E7517F26296EF126D9191376DD98364B8B08657BF9EF362\ +FB8F6A8E3D232880BFFC748A934C55544F1F6C117A0D5FD7307D4B6C0DD32C36\ +7AC5126EDF55BA34700452EDDCE4E71CF89D9B8ADE00D181DFDC5E427A2F029D\ +A00E10C29F4ACB4B31F203A1F5CA176654542138564BFECB6139813A741A1A62\ +505C41E1FD7994A14303FD920EF4B9D141FAEA43496EA8FF338852FE0E03BD94\ +A24914B910528890BEDA1C18C98839DDB20FBDD1B93E0D9D5275884D4D79E0ED\ +F1C7FAF3663EEC7689FB80C42F5A44A454067913C1450A7D94AB6624AFEA64F2\ +F79A541E8C436384AFC023D530F852B680642C0177054737E3992837651A321A\ +B1278999DE318C411D4E39789F2C44DC5620EBDA3AA9FD94B6A7897A7012D217\ +710D72:\ +61DBB89D2482423A6A890AF65B08551BDBCF769B009DC9FB35EB43D1DBB29DF7\ +5721430F710BE84BEF1D6753B65D8F9BD2C5E73117872C1D7BEC351BA21B3CC9\ +47E4AD9696E26A1FF624895273DBAA512DFD4C1C7803A997B403F363E08AC1E9\ +1084E2F99C67A28D711017F950459BD842261356379383285AF1D441E5B75D49\ +661B8F6FEA285B4F6CC9F77A93FBF8D59AE926676EF0FE5C2CA738F3CEE0C85E\ +AFB62230C60A4CDBF2EA8C3B0187C5BCDCCD5F32654B3D885E1F97650F937DFC\ +C93FDE41CCF40DB82CC4525D0C74C73C84D65DA61B1F954B08D4BF5B21F5F177\ +06C646A4EDAE6987E60FD02C6DBA12E9B33B2D6C7688577F5A9E3B13031D92E2\ +B2FFAA37BDA3ED771C38A6D898435D16BA27FC11B934E12D4B09B058442897A1\ +E8CD27886F697DB988E30456327C214390D6FA3205FEBF6E30BB3C6742350EEC\ +F0E6064A6D5180D06A2D9EFEC74967B4427AED44DA08D413DE60BA5F93DBF0AF\ +0FE3F70A744EC99F9D2481D5FA6C5EB350CEC1782B86C2B480692F83B3CFFD1F\ +A7F7BD14EDEF4F868DDA8C9DB4892960044CDA1696E392AFC8C735B2833538F3\ +D841E8F972A996DFEA2A1816604F1851AC88A0F4D274E4F35FB98EAE2C273499\ +C3114B9ED3A52443D5980551666EF42694CA159B469F844A7446ADF36BB88CF8\ +AB7EF73904C483A1BF6B9C76CB5234C42C999829D8D4238A283FE2D298FE485C\ +D941F4:\ +54C907782E8DDA9845AD7E4EEDD6E1A5B0F79551BE4AC805312C9EAC76AFA19F\ +71B1173E170E0AD4DF95BD22719B075D:\ +CFDA223B42DE19F0 + +49ED4C5CF19D7F5F499B51FC68FC483CDEB1B58B4A4FE77FA1F39AF7CB20F4B4\ +78BA982955CDCC3D614A4462E7BCE483545E0DDEEF5CE510658CE67DFEF211F7\ +33EC0636007D09645ABB7B9EE1BD7EF2300468C96F5B6FCB6E56470B40C6FA86\ +F01D957869E8ABE724CE072D17315A051FFDC8C576909A1E804C378B20F3AE98\ +F4F8F4C6C5FF67F96FF39E8B109A93BC4ABC11ED2B4C0B2BCCB31E38485F2595\ +CFEDBA3D859F20BDAED90642468CEDA31BA982D7857DC716EA4EAF6174A2E5B1\ +E0361E69CAFE9CD1A64F0E64C4B4702B9525213C21800E140CF7444580668906\ +19CEF0AC034865D00295979B7CDF63D3530BEEB544342BBB651B8EBA16B8E920\ +8926A83C1F353103A4C36A206612A5D6AACF32B867196DF586C6357429394A81\ +B65CD1FD97966721792BC53E7E1880341E3CE2FEA9D48CB257200C516A0BF435\ +1C810F3DF6B888F97BA1765C765B80E94554B100890DE7E0C3D5E5738D62E70B\ +C6151D541327887D7224A0B5FF20B7FEDEE54346BD3E21E5C802C3568841FA3F\ +EFDF72F437B9DF143B0E6A4FA859A9ED836FC6679C786E0D8559933A941AC1C5\ +EF51EE879699325A024DE0D919F88E4D9D86934B7AAE81544D165CF2779C248A\ +0B46F8D4D5A7FAB7B3C81568CDAAB73C405404129D8E56E67EC9FC291A8F17BF\ +153AF4DFA79E8FBF3786C60D58763F97799CED4E77CC6F042FCAE073F9F7BA3D\ +44BBF3BD:\ +1F9B3A83756B933D6B801D33AD8EFE9D40E2D0266B11CC363D99BC3ED52A9070\ +D997F397FE9791AC38658950B9B807FE2AF59EB8D718DA067A2F7ECC37530735\ +FC52897BC29F17E8DBA021137B2D9455B0A452E0194CAFFE93D67EBD6056AA47\ +FE21051107C07CEDC5D4301BB5B135C7BA42E46D55F26CC74887BFA5CBC1EF43\ +77F889B14CAF0E8915D438AD4E0AEA2481CCCEE62B9D1AE9B560576266410DF7\ +FAE7CE9AB0D3C3E3818C9884FFFCFEAC84588F8DCFD3253E842AD11FBE367829\ +2A15507D236D6929866544A9B6DB577280E0DA177F99432AEF2757D1E14516D8\ +4E499B041ACE58BA7F8C241F065CC59F30898561EE872D3BE93F815F1D81D85A\ +5039DD7F3A7FCA877D21E82572B792A0CE4BD61273AC9FAE0B6628D15CABC9F1\ +56505CE2E8D38A13BD11BFEF58D81508BACF2A27D9710CF58ADC67BB9ECC584A\ +F6DA155ADF9752544238C85D19A1E0E21CE36F395DBAAA0057171260DA02527C\ +2F3B94C89C50A427AF9C906557EFF93081F5F03E3DB2F5D3EFD436474EAC242E\ +62F2D3440304ABD63C5EB46B88A4205C241E7999BF0AE66118A007E03924ACA4\ +EE2CE4AA3C91286D30F9651803297280E89831C609AFE1A09A6D97E1C7238DF9\ +8965EC5E7E3A5A70F1DFC0BBE3ED035B07DF7288702D91DF2943EB0E844F3F43\ +F201CD48EC5AA46D4890EE823C63EBF7634753EED926A8AC3AAADB861EC475AF\ +6C432C96:\ +01878648BD27829D266AF6256A445B2FB1F9D72AAEFD0E571448094F0573434D\ +01594D6CC424F62B42F4B2EC419362FA:\ +6F2DBCEADBC6B5ED + +F2F30FE45D60DB1E5C661FF3D53770C9EDEEE81924DE4E4C5EB3B83CF644FB87\ +2422C375768A6A0B6B6311C952C3B9D988E487EC2610C99C48FD4E4ECEA5A68A\ +D09BE28CB809B286AC5021EAA5B3DBDF9B54926B901C889FE6A3388C9BD230C5\ +28C65EAF6369ECEDC3974DCA550CCF9545E44718A68DE9CB355CDA455B236537\ +CB2295748386B401A4E7035F20A66344171D81338702B0A3967336AF59374FC8\ +83C3DAD1104C0B379B75B58CCD8DE6413B97488CF4FD03EEE651C89A31D95A91\ +22DE041BC238130A7522B49998A2EB1CB665E68FA8F45E339E6781D6D260EC14\ +DA068D856C66E8291EF730679CAA190DE5B5FDEF70D30F21FBF590BF3F2C6087\ +2025C59EBC4B3A8657571C53FC5C121F8D590FEDF3F337298D92F75D78E8B89F\ +7B83C3438C0CADA0BAF4168DAADFB02F696628E664AC21E8FAD5550EBB711C93\ +1AAF6FD775F2BAF467161722855F98DC67FE081C9637BF9F896DA99252C8F4BA\ +A80949A3236D111112F7A2D2E935F667C21282D08C93D051CDDDDBE5A537B729\ +9DDA0F0DFD7A8EA80CD88EC47C12C889F74E4B99F02C121DF18902E07FC962CB\ +9DB1F618D525C99E7832472856F9A27B6254B318AC2962CD18D838DCD8E9F75E\ +DD85DFCFF1E3542BC2A6D7F721CEEFE17AD62AF2C1F3740FA974EB8C2AA65BA7\ +14BA84DD0E6F38F326D5FC9A81D8D3C4B674291861B9A49255D52A56BE8F22A7\ +97E9DD06B0:\ +36170FE27C9C3696DA79AF1108F688F6730608DC4686F464BA2ACA29EA40D6BC\ +FC0822174FA4DB9EAB70C124AE93996DF8D86F15614E228060B7101C1B00A9DA\ +F9ED7ED5FA45388D6EBABF17A11775426C05E3467C76D3AAAFC952269CFF5782\ +CEEB614342A6E8C16571C5E22A1B4729CB996462E9CE1CF8E89EB435CCDC0211\ +CDB193697447EA75CFF47BFBEEA6B292E569DD9DF5752A8ACABCEFDF44F8D08B\ +4B8AD9CE9F3A28F74AD7C7488A782755A949E299BD8F8C5913959704525332F7\ +35E0EC0ED2409D9161D49E2C72D4D932F75F34AE74858AB8AC4A2AC2AA0CB23F\ +B703B36DC00B4476A7496E96A0C3CE3063706FF17F98C4CE6A0DD76506425A96\ +6E07BC87B78951FB6B90BAD68FEEB6A9412292ADED8E94104698C97F1D8F7578\ +B15FB9E72F9984DE82AAB0ED4AAF3A03483BB6E94AE800E2DC426DAA926F1B6D\ +BEBAED02D686654EB05E05F8269CD1E6510E91FCA31129565B91686A7B78106F\ +8FB19EC24AF3DF65EF93CCD327E1FC256C5BABB20D6DB6A4A7EA40E56BFDD658\ +F0E65CE4EA852E9EF7CD26549875B12EC2AD7A4BAB4AA8703858CA1EEF8BA28C\ +3018C1FAF009D611D29D06C6D7F23EB30AFA8EA777458AF374443461D0B645F4\ +636D96F523023CA312C3C98AF07149FA178783451AA4AF062E67404484711418\ +660A38167D59630A06276FCD2D7B4A908DB3C5F738475F52FA229203F5828E29\ +F8381F664B:\ +BD63C9A9AF457AA8AC98A656BEED50AA5704FC1F8719DCF7EBFF3F0F17F654BA\ +077D52619BE6E2A945FB98DC49466D00:\ +84167B3A7987ADC2 + +5E0EA90031BF80B8D03349FF9D54D1E2614A6621A4FCA2366CC11A6EC7C382F5\ +63CE0DBABCC0CDE1FA93B0857C93E7360C70569B9DDAC860BDFD7E13B2A882C3\ +E61AB3361F2B12C064C1901E936F2317C8E4BBEBD7A9E653F965CDEB504531A8\ +D133A14DFCF064C1118B1505D3614E7109D180EA9B0D0CEEFBCC93D938EC6CFF\ +A1E8DEFAD464152DA5EAE8954CF7507149D79C54D47ADF40F4BDE034C5D4FEC3\ +F1FC187E47D8B43748B4AA32726ECE9A396A744635E3DC3FA8D769B08ABFD0F8\ +7CA77700EB28149BBEDDE28DEBF3137DF99BF7217D2B36BCE9EF71B85488D099\ +FB99870F3F9D23675C1DE2CB6E821F42B263A5F215EFB63CBFB78581783FEFAC\ +D044265DF2E80D1EAAD98E417B78FB94F7A5A2D79A9EB85DAB964ADB38D3505D\ +9DEA43532E68C30D280ABF3E69D84846A9DE15353CD2C937B744329ECA447990\ +699E32470947680E03F50134CA1A62FE96857930DD2F22221B0B1762608B9ACE\ +34D907932842BE5E380E27264E0176B9981E98E7539AD68A4327FD9A0B36AC29\ +1BE99F32E63935120B8D6FED34C4F6E6CBF870BF8775F4E3833F882A16620E27\ +E2E0FB668980BC757D497949A52A5850D0ECC0B0D40768E6DC5F40D0E6CFA79F\ +0A8917512F3CA467061DD608D4DA6D48E862051EFE8A8EB7813544CD393318D0\ +BA48F914C1A45A787D624EDF366070B8898113B8FCA46D7F6E2F449CF40DFBE5\ +1E503177FF7B:\ +8E745FB5E21C3878F34E578D61FA68C6600B68D9AEDF7AC07F2704A17FE65B27\ +00C86E55406273C016340A02DA1C4B742774F193C0C78B27AFE273D12DDF8F2D\ +70E29AB245E61CC3D3BF628AFCDE3C7E20444107FEAC1BCED6CB6A10837FD37C\ +890C444C600D4D9677A32480D09D0A38B6D49BBC43A0B02E576B3C396FD6710B\ +E3E1E05D20831FCCBC154CD80540D0F7396467B76BB4665EA58729EB312A0B2E\ +8A3A216C55EE620E36DCE56A0F4AB1058FECE4F3A7881356D7115085A3C78C82\ +10D3BDDAD512661DB85FD93D4A4779EA2B22027FE3E8040EF9145B779A3B99BB\ +F4A60FC3AC54E8BEC89A7EE7B76A390BACEB7ED76AEB04FB19F6386FD493E437\ +AB0A9147B88363C3FBECD53E0BBDFEF233C8E919F12314215E358D5BEC2CA0D9\ +C63F0A27BB6FDD125BE06609C38B7783A0B1A571744E1C9C381A7F55C84B9DE1\ +DE6AE75B1F035844E24C89BA287AC2508D75B48305D1A9EBD45EAE2479BD50A7\ +14964346113736D61E028FB962808BBF441290C5FC6E38D6361E4D910F5CE183\ +765287BBFBAC9FE1852B529565D65BC2AE704426C04244DB19135F0F39AE0850\ +2E926A0159C074A90F3EB1893A14AAE1D8291E23DA67D4ED9C7279D4E7F44EC2\ +4ADC1E4D0F9F0EE039A78EF0D881723921CB97DDEF563D782709107CC9EAAC5B\ +040E698FC935A76A733FEDCB934AABB34F0CE5B6B63E16009C9C3DCDEEA9CEDF\ +3E07820BAE88:\ +C32F72F4E89166E3EEC9885B1453867AA2E4940C7184A8DC7DCDBD144BFE0406\ +C5D9FAE4A432A8B7AAC50E435D2DD6D0:\ +936122A37F14C86E + +F3BF6B544D792A514B0E9A105DB900B4C5E649A4DDBF9C32400E296F8DE37C00\ +788A1D8DA34AA4AB46C6F37A8C6B793E71F85BFE935C0D616D762749475E0539\ +F690AA5ABF21D7995F6136910908EE9A9BB9876B9B26FB3038BE7293ED9116A5\ +CC048B5B928FE4B72658061CF212E76A76E0B6C5C3D516BB09184A42E4F795FF\ +8651EC6E999C3AAB35F8719BF72EF5AD6E60AF88185A68DECF957056418CD470\ +D2180221B0897EE24BC7545E799AD8B6540CE30CDBB87E1444C54605833C5928\ +84C0A894869FA9C2129BADEEB32D4A23BDBE8A3EBABFBE735B601A693013E614\ +78463D67818E2A3607D2CD4D24D069CB9AAA66D4ACB4CB0B065DF929BF97797C\ +5CB1015DDF8BD33F5F503CB2159F64F748F543188FF8EBEA71A6A669907B117D\ +F1535113A8E0FCA60AA095A43CAE9B21D20540C0D869CD7A970B16DAE3E52E84\ +ECDD4DA73CB56763F72158D93AA6BC10A0456DDF54D4E23E47B0D0E4D376F90B\ +10CAB0D6CE9EEB0792894B29104182B032BFA6F2812AF43CC05EF13BC7AFAA74\ +69E133FDEF68823F8D700D6D88BFBD04F13C1F692785A31A36B53CF9AEE267EE\ +4517C822BB9CCA44FA294601DFD0FB452B40C374E09542B0FA05AA264D35233F\ +82C2C202FBFFDC50665740732F114B11CCC4BF786E0DBAD56D730AC05E12EC23\ +4BA17418154A968E946F87F7813479339911D16F3422B483F9B0FAB0E20B1754\ +9D2BB46E5BCB76:\ +29DF14368A0F03474DCBB394BED5227EF922C15EBE44718169EE7047D66EFFFA\ +2E36AD3C4F3C1FC3759F9742B6E51356F3262AFE48A4D8ACAACE5B57B795BC8B\ +A11A8609ED34A96B59A3051D3CD5668DD8A15796E8CBE2821525438043C7CEF1\ +81BF3E146D9905AA67457C07BBFA4D080E86EEBEA9324D57EF8D790CB10C6430\ +58CF5BE170A7BF0B03CEA9AA81B76A6A090B8FCCDDD159195C3D129D0D6692AE\ +DCD6561CC61DE0EC9AD3A84EA6AD1178811113E84328E0F50B90AE9A23921FA5\ +45F58BA6E9B8F885FAA72B89952A6E889322948A7AF42896C80C03E0E1708A96\ +1DE724CB7607EB00BB6362C6E5C0826A40DE29DB0CC05E29D7880A9B3CA3776E\ +6A435674C60C2CEB8B2EC3B386FB3F46A86935F5D1590DCC0815EADCD070A250\ +BAB2464F0CD85AA8552C5506488602EBB46F80C3E6F9D5FE9F1BA1E8E3B94E4D\ +B55FBDD3628BE894F35A932662B358BDE9E8EFEF273CD35A3605381E3DFB7FB5\ +B1FB64F084D645C337C06376E3E1C30533036A2079DEFE4EB076EF7D254AC084\ +8DE99AC6B6BFEB18AC14D531EF98C4B4F71813F82F5A76435C587BF0027AA376\ +B24D09AA990B1EEC6E292E46A462B192E0B8EB85110F7B5870113E031D10E29B\ +9B02A9AD8C52D397D3F77AD810364E66A0DCBF04B6948DC322A11980495A6B12\ +1F8B3A8CE2EC4477F96E9832FBD3D777547A1B0199BF7696094AD2883F643A81\ +FA4580D5E73CFC:\ +EA269A4E6EABB2004133135AFF93EA6263B7D88CB603252178ED3BF30F31C944\ +9193BB64D627832E5A6B6556571384A1:\ +F55B4EA476A09C16 + +[TripleDES/CTR-BE] +# Generated by Crypto++ 5.6.0 + +97:0A:\ +88EC5C9E9F223D7FBA9B30756EF4599D456EC9862840CA14:\ +B49FDBD64C0714ED + +0BBD:F252:\ +12C9A28E27C2318703CC39D4CCF116D4222C86AC6243ECF6:\ +5FC33DA76B3D9006 + +F9AC35:FCB637:\ +1E796473468D5E91CE170CC8B5DB6C1EA46D058B5345D35A:\ +4B32CF8013B2D2B5 + +5F646CF8:1C2B4870:\ +0B6D5A41871596D3BDF22A486BD79D925A01DE716C23E10A:\ +6C164D7221E75CED + +0C2E20A965:63C6DFC9B1:\ +E061260828CDA4B86631F3FBB74D48F363B0E45604EB41CB:\ +4D6422429C41CD32 + +A13360ED3328:B3D7A1D9C0F9:\ +F123BA5416CF6208A06F4700A6F5F26C5D27C4929711E044:\ +A3731CF37938EC96 + +B050800567C2F9:24950B574E00C3:\ +AEC241C64A79B95F289BD4935691CCC72843216233905904:\ +B2D3675FB60B68DB + +68F8124B237BCB15:487F9E08F63717C9:\ +96A8129959AB9F86C6DA4C25CAC3AA8E6CB4780C9702DD3F:\ +E0937FECACFB7CBE + +9987D62F3B186AD519:6FBF00CB7E57B85FB1:\ +C7B972CECFBC119A6A48FE5A9C648494D255E1C798E957E2:\ +CEAA71BCEBB7FF2C + +8AC131BABB73725F9F93:87F0636BA739E1AF0420:\ +7DDA46EAB41941CA93ED65F9564A87B614D188CA40741C50:\ +C5C42B0F197379BC + +01C70F5350B3868244109A:319B4F8A15BD070C940ED3:\ +7E246740B8862DB45BAE9DDA9AA2371CA8924EBD10A83885:\ +1362D0F2A164F4B3 + +29B2E505CF74276EA0033323:4A81E054B1DDE289B7E8A339:\ +B395CBA236BE9E11B5C71476E31EA33FCA07706F41F9FFC9:\ +AF32EA8D33DAD998 + +0FCCA7134678D5B1F19809BFFB:CB2DC5F7DD24CA55DB73DD90E4:\ +7F7B0488E6AF4E17A815C5C47D1A84DFE90023693D8513D3:\ +2166865BE0E1B2BF + +BC2C8412AAE144C3DBE5FB8FA904:84418EBA5D8723FD6C5C3E6D1E10:\ +34E5CE0294A97A0012E11E0EE2BAE03A701B28C969B50573:\ +58AA4511AE4AF26E + +F268A2E1569E166B2F32ED6AE8B56D:70FE2961AE8647134952D4100E1EAE:\ +A09FF56F666975A778577D50D6B12A21625DEF840866787C:\ +90DB7E59DA534702 + +B4D921E1018766F3B5B57B62752E1410:EAE2F2B0A7ECCCDA47CB780802BF8113:\ +E86ED5142A2BDAE2E15387E500FA176F496690BD009FD017:\ +7585B73BE2B46DED + +CA032FE8596CD58286FB89F89EE75449F3:\ +588DAB35EC88B532925D113F501F48A4BD:\ +89B6D2747C5C6595FC0763B10FCE3414B4B6800DF6FDE760:\ +ABEAEAD81F34ACCF + +DD8E581A456A3BBD5D4C0FD412F15DD4DBFF:\ +0C0B17BDF30BCD4F2DD40FA59878ABB182EA:\ +1379A08A06CE56C40C2F71402D063D2BC45E2410872D91BF:\ +06EEBB1BC203C72A + +E69BA9AE4A7890B935EAFEDC4C1533ECA048FE:\ +52AA3C6A5A75E905AA9CC6773D0D9B8B91C550:\ +B78843AB2868780685B364FA4EC7E7BF3D8F2FBBB85FA573:\ +3C84AE0D3AF5F57B + +B73A4B8FE9F8BADB0E976DF555257F9AF67E2FC8:\ +77EC0EB7DD2A673502F480EE6E2CFF32306D07F0:\ +56FB990986DDD678E179AB6FC26897C2996FEEC6E58226BE:\ +4E0A07D63752071E + +ED9A5313244B3B47B7D122EBF4CDE71BB21B823B52:\ +5E80D463E271FA56B1D8FE417EC70B36443224BE24:\ +B2FC5F8BF1C5D267DBB96D819A1C4F9579ECC5F50B45748E:\ +D95DDE49F3720F90 + +28B33AB62AA9110B5E51511444859EC73DCC385B9DA1:\ +91A005C130858BF53E572231CA53B2C12C79A45F7A57:\ +E52FFD655C02ACBD8A764EC1C938A34FB7A60BC3214EBA75:\ +44A5958F8539B344 + +078FD39F4D444A18EEE155F12297D177D0CF3A7DB53EE1:\ +BD3B9A1FAD86FFC6AB61987C5854AD31FF922B135DE763:\ +EF8BE118E57C9B007525AC36A150C3A21F619F12B472FD70:\ +7F117F99E20199E5 + +5DD649549E995B9435118A33234E698829D6BF5EC642D1E8:\ +D2CD69C30E2BB267910B91171E25D31EAC1F86A161422803:\ +1A96CAEA23524343EEAAFBE71F8932B30C08B93C603FD543:\ +332840A8D9799055 + +11785EC120BED9A3C964B24D0AD7165C541524FFB48CA729:\ +69F5A5058E69DBC79ECE72355AAE125D0727813FC5602EBB:\ +37CF60330343BF4B535DEED7B84F635CC54E3B4ED931312C:\ +E24659F0266162BD + +53A0E3F42907DB065E17B055B17E91FFD69B201759C398EDF81C22A6:\ +747B39DBAA9E9C52BA6462D0C6AEE746CB73609FE779368CD4EBF049:\ +7F681F49EDF476AB1D6942CF78F3EBFE9B7C9465B96FA3F5:\ +CD93A0B282C2C4A4 + +065FFB79B513457D79739421F97EC777B53B23BB88A656A4693247D5A7318DD5:\ +1C7B575F4AFD516208D90B19D5BFF8A848418987AFE195D7D683B5840651FBC7:\ +9B1AD76C8D5951C3CB503C0AE24CAD3D1F3015072E4D9C93:\ +3C6815A30F546E5E + +47091AEA1CE82EFE6992AF5C5C732D49B16C11EF4F00D120B41E2756CBF7784E\ +DB3B42A8:\ +F2CED7ED0345477521672A39852D4C006644BD2317521AD6D47F8039572896EB\ +64E543CD:\ +C4BC7CB98D99F12665A24433AB47CE6E351D07E6D800DB36:\ +901D49B1E9EB2097 + +945082A1B920EE6874BE05E3DAB5B7DD011EF6FF80952F01CAB29F9A208736A4\ +8042B6C44481F7CD:\ +D143689BB576083DD9F87D970584D10F7EC14849ADE29841D617BFB855F04BD2\ +3182AC9ACEB79376:\ +1D795895A23AF9D60938477D717A4C2F4DF0113728E8147F:\ +21380F578AFD1C07 + +583BBAD6BA61BB298BF65186F27B343D54EE47BE29B2469F0BAE0EF40856CFDE\ +1832BFC79A499CE164F7F01A:\ +C829FAF9118F73A6409A134E76BB74C1F3A0EA67C4AB1183E945E5750D9DDA60\ +6444B80C6BFB31430C6D038D:\ +02AC9E4E449CBE29D49CE0B25EF137AD592A7442377DCFCC:\ +6EB9BB6851B2AB13 + +FC80BDE6EE7C14BE8CF25C00D651839E53991824EF3415FB127881EE4EC73A49\ +C107EFFAE1BB017583B3233CFFCD18CD:\ +6BD12088E4A1B86D5063C5C07601C874DD11B8813DB48D54F7D808A2754D543E\ +9D1782B45AE293DD0C4E5A78F215319C:\ +F8040495E58ECEF0E923C616DC10A520274BE053D388AA9F:\ +81F4BC6CDC689C7F + +FCF9A0FBE89ABF12FE10F9D2D3B801C7551F109562BCB30E40CE8BEF295141F5\ +155F3F05FDAAEE194255DDC5685475EDAAADD7C2:\ +5ADA184FECCFAE942E0B689F05318AB134F48903B2BA4D8B180DE482188BCC2C\ +05FB0E610913FB5A06C2B8676D7BA7EAD9385A24:\ +6477EAA65B50A234927B8DCCDDEB3FBE7404E91FFD907E99:\ +5F04100C1A2A2557 + +BC91C5CA49644998D9CAC72B43E4FC7FDEC32C7C4E911B24AA37DC4ABCFE0983\ +47AC134A3D4F5322619ADB922B00A1DA123E0ADF678E195F:\ +E3DEB62DDE6F5D1D91FDB0234FB0D8A1CA29AEA3A6FACC9E265DCDD87E096963\ +5623037EE6D9F43B74C6ACB933F097A8782847CF80213E73:\ +2A1D76651411F489300592B31BB215A659ECAC6D2786D3E5:\ +8FE416B43B775A22 + +EDF122577185F6AD11F6C3930A565CC6BFCA6D9E9A50D5D2033D985142145723\ +AD5DFA28A8C9EB5D6A99A18294154B596581D63B1B551734955A9584:\ +FDEB456EA993FDD98BBF939E59FB0138689473E449D40D01F49740B02A1E6CD2\ +3F5908877DBA2724C4CC12A0AA25D37DF1CAE0F576608B0447D68E58:\ +FEDEF66C02B8A055A845B268CF5CC8992F330CBB7D04126D:\ +70802B6B96EDA29D + +6392479C6E5917082DB4D58112A213D5822B9443E555F2C38D6AFDC167E9E089\ +D31BC3F6CBAFCEE28DCA4F5EBC72E524E132D745E4043CEF7020BA568EEE228E:\ +F67C1DFE15EB8E5CEBDDCCDB495E6418CE29EBC243F8FCDFB82975EC4114F8CE\ +C1BBD6FDEE6C2C6AC0BF8BB3504909D09DE527E1C0BAE9F462241F7830F794A5:\ +EE761404DEBA9A33565220C27F0813C39A5EBB242853CBF7:\ +852F8EA440CB5BAC + +83F82618BF2DD4EF4310B5F14F25C2EE63A36987B811C0AABAE5172ED44E0894\ +1D8FB5262C7AFB846615F10A0FB4E9EE04CB1CF83986DD206A751FD5F8879EDE\ +4729F45D:\ +F675B2434E294DCB7A044A27463D68DD7DB781BC156ED7159F35E5F867D4842D\ +38DFC9A2ED0CF055B2F97D3682F65CAAD778BECB1F3E2EEE7F0EACF1B00B8085\ +0BFCCF6B:\ +229CC4B93365854F0D1DFC204B7A10D220CF4CE01502858D:\ +E671E23612AC6A6F + +864172019C96F6A967D57A67DC2FD7D545F7165ADD8054FDD6383E0B127802AD\ +16C09F300AFE5858A291727CC5554216B0CC3DB6496EDE43D050554B7259A947\ +190B2EE0EBF1AE3E:\ +376764C231B95E5F5286F913C01BBCECAB034D0DA9C7E462592D49F5FF47CD00\ +380684DA628B37D3B89B2DD661E91FB3CA8A7A0C9D81F84A20DB949A3B7E7825\ +C0F4912A283FAC98:\ +359DA8E7D9C83F855455FB211E858CBC1F22ABE0A392CC01:\ +F091D747023D2E80 + +FB67553B92328B078608B5205B130ACF891C3FBB4B8871E924A3051DE9809ADC\ +5DEA0923B576F2A9CF3773EAD9922AC29BF6BAA2BD9712161C8039F73E642EC0\ +3FC8A55A5BC4EC09495CE6ED:\ +3E667A7DB0ED4258AC8DF0114320EC8FEF6E65D0BC77ECABF170D5E51A53F895\ +9CE646C019AD3FC808F0160BA87B106CD80050B8F702643111D538F742F314CD\ +3D4214F8F2B16FCF8D5C47FF:\ +4093748D277BD6B2E9F584AECE71043C6E47683E9E4BD0F9:\ +F4245FF774721187 + +0C395E448D57AA17E8468456585DE8720557E994F63CBB77005073760D53EA9A\ +2B5613C9BCCB8401F1808BE933AEB42E8A01C497E8D97C8CBD502D24FB7E115D\ +D6BC798C07ABDE32A22D75A21A84EF6A:\ +655AEFA5C512A857897A1543A0898C012A4873FE27FD48510E1E9FBD677C4151\ +222582FB0881DAC3D4E5D02B0BEAA19703F463EBB92F2FB2322B52E4B3A6770C\ +1272D2B6B384914CEED77D776DEACDCC:\ +1FD50583DA3D8B0EC7A9BAB3AD14447D51AC817C231F30CA:\ +4192D0FBDE37BE33 + +AD4B3D07459B913F32336BF93DF71BEFAB6B7A7ACFC69EBC8D987E0DFF89B8F1\ +ADECAFC75DCA658693DE5B7424459403905E67E6BDEFEE705B71C4DCB27EB6AA\ +F080E15B5DB90AF93EBC9C42EABCB8C310FBC8B7:\ +0EC7B56ADEC94177911B969D69B587A675D8349F3CA94DD550F107C85CADBAE2\ +5E6EDEEA2E2D6BB686BBBDD5187B0E54A7AFDB0E9270E03FE7413138CEC8CEDF\ +9FA3A4D9ED1301EA91F3D8B453D94BB0894B5995:\ +5D05BF58A304CF94C90635D56F37C1A0E9BA10935D428D69:\ +F305C881FA1A1F9C + +8F0217CF21EE1748F05CA42E5FEEF1BE1AA09BB00AD495FC3A09611348591DD1\ +E54C62856C39614782190C38642D42A515D642360DE095C7D55E72DDD831C6EC\ +1489625F3361A1064FDBDC888C8DF7F90B4431775EDE1C20:\ +79844FD0E851C81D5626CB05EC9C2C34ECD37B5D66C94C1E0DE4AE752BFDBF51\ +B1BB83C312113EB395BCF6A5E33B8D1462A6289A244AE2D2773A7203DE87D762\ +80196068C9D4F9034A5298FD364AF7AA8CC4846B1898EEAF:\ +78DD18BE23235BB33E2DC8AFB4DD531D1F48A8757223BA0B:\ +99BC592318BBF787 + +9D38B62D9033DB573EC84257CAED2CCA0D04CA5F7A11B47E45FF523DFA9ADB38\ +C93E586AFC80B300835B02CDE13F123A8B2E5BC66CF5C333FD216DA06BA0C937\ +02871142064D0B2A91362D390924A73648DFD9BDFDF504D07CF735A0:\ +60D1C89500BB05D2576F602A93154CA6193678B6D58EE65FE5078118C771B644\ +F452F21C1A881373DC4208D0759DE25F4581D8C799CD82C12DC018D6A61B060B\ +32B3F42DD649526CFBD6FACA694DB906325E0F0AD786CDE5F9997BA7:\ +57DB251A06982C2AA7424E1734FE88DDA1CDB78470412CB3:\ +18F8895E0B303F38 + +B54C5278A5091743E81F45CE4FFAD2640423AF7E5D033CFCED96729392E2D3EB\ +D6550291054C41AD58A0F9FA55AA204F4CC94A1DCC83ECD019E5594FB398663C\ +4E8D50709C70661B5CE507D51451BCCEFD5815824EF1F68C641C86C959594632:\ +A9A7642E3C372CC2A270D20B2E68124BBEA0D1111191C62544E7149918119EC4\ +3641440EFB83B2EC4D3E27D94547005364F62687655F697C7EA87E8863EC4B53\ +BDC88FEB22BAC3C7974A79E2F0BBCA3BE3B4C6A760C13D5645F4BF37722CF284:\ +2D0D09FEF1AA8DFFC59187E9F33AFEF527559D2B51349CDE:\ +4685C00F9FD16505 + +FA8E29577C3EB4B8C49048A0D61DC6ADD84C02A9B8C7DC86E1DABA258C54D8D4\ +C367594C2726B99F443FBF597F1C7C003E49B019B02891872F1F1CFE8EBCD22B\ +3FEF3A5997BAC3459816BD43EE9137205CA0AFE70671D0C03ED01AC7E6F957B1\ +B3AF8F92:\ +E736CF427A53CEB8A4CE9FDCBBB346B7D84311F3F3E8AF7C4FB5FCA9CE1C0F01\ +F4AE272614E7556F6AE12C58D98DE1A1B841A9CE95921CBB6F19A2EECB7E1359\ +D28CA79AF677933D13D7EFF3C1BB894EE20A44BFE196303F228DDBD1C8A28127\ +17D791CF:\ +10423E81CA423035E6CF0402BB817816E754BF0E7D5ABE67:\ +588C7B44583F4338 + +7210EFD49BD2BBDF2EF3488D8DF261597DF326BD2B1908DCC116CA077B1D8810\ +FCD788DEFD57B2285771EA00C2A71B928072AD92CD6634C7637B91BD3E138E17\ +9FF15CA24D156A831317972D4EBA7FE1EEE2B654BEC5598DEF97DA4D9AC99E16\ +5CF5441F5B0E6D16:\ +C548B70BCC936B8E0CB009941629C83EC3DE6EB7A9C7D36E9F1A369CD8C2D978\ +D39796906C5AC405208AD38D6851A0B7D7E07B2E4791DBAE703CFC3D172F1132\ +B47393044F2551222AF03439B2AAD4DE66E9E3B1890133DF11A2D7EECBAE60AC\ +42E51F0210C033DD:\ +FB6BE4E0CE90E551B235A395A780587E265459F3A2FB9301:\ +DB17C1C5F76F8B2A + +01560CE12D17C6690ECB8C08087A53ECEFDBAF5EAB66860BB3BEDD35F16145EA\ +13F790818D974DB4D1F4469876A24F11599B63E48F70ABBFBC4CF8911F017854\ +832D61B742BDF877EB2B1D7D05D3413155EAB0DEEDB077ED8B3CE940D30700C2\ +45068705B24AA653A3E31CAC:\ +CB6641AF44AF5FCFBF38D74764EF26DFA72259FADCA3E4B78427789FCD098737\ +4A307C488FDBFBDECFF1549346D04E3A03FD7E8E2B3680267CF05F99E983B5BC\ +7F40C9EAFD4A463D88080E23A65A8706CEF65FE7DB3E437C7625F6F3833DD777\ +96043FAB943D44634240EFC8:\ +AB41F667999698A7F657ACEA04E70F61ED64B1CA8FCBDE70:\ +1D89DFEECFE84C7E + +19D7CFF7182D41F083066B2AE61DB10AAA7E2C8CF302D5313E27E9A86A548453\ +ED06EDCDFAC0C4800CE11DA1D415003A06E42DA380887EF7CA62C265C19B3A40\ +5336822490D93B76F0D51A5A4DF4CBE8C5249F53807C42E85711EEB44C72F7E0\ +3153DE0F836DF7D92C02AE80FEE343AC:\ +4632E56DCB6973AEC10ECA9D9EA95F0FB5A0318E28DEA69C9770591060420F0D\ +88197B154654BE281A405E36104408F9848BF157BBD9AC676326D4023D0B0C22\ +9D9D2828678A04EEFBA56CCFDF8CCDF3F1EB5AF8C78A120D2F8A7FD452A56C9D\ +65B6F6E8542BC5889FC515D93146675B:\ +E14ACE55594044D6FB3F49C1D3D2F57590609D5E4A489CD4:\ +11692B3F434F1E6F + +245548CBB355FE0011E7E07A5BA73ED0A0A02DCC8E5DDAD2D5D4031A08684491\ +8A0308B0F4A115C690FC12B80BD9B9CAE8E85275BDF2A636A98B41D1DCB9A8F3\ +3BA47871E931136FECD36555167C1C272BDF59B5428F1FD628285428B36CFDBC\ +400FBCD5BBCA23E310F2EDE5809BA9862875E12F:\ +DBE0660F5AA3D77611CBDCA3A76994F7D7638E8FC528BF57C32C25E7CD3DCFEF\ +15FE6C05E04B6A1023DA5948FDB68DF5646432E126EFCE3D3BFDFD34E5DC0923\ +36CBC1B1A22C458A3F862A659BF39143B5FA990851FDE7D00DCC91128E6EEFA4\ +0E66E417DBE2800DACA867B1E2446C1F8DC16D8F:\ +BA33A52369C5A7841F38C908DB1C428168D1B99A8D5ECC0D:\ +7C9D2C555EE392B6 + +132D28F6AEFCD811A8CD9C7377C92A761A337BF58107DF513B9F27D5D343C190\ +BAAAF96D1932A5DC3668BA1DDCAFFF175817A82C7A5930B089EFADD712EB493B\ +FF23D622D855E920BD254B540CF779C90F7DCFA78697EED2D27C4CF33FAD8C33\ +574F167648D5CE82EC073DD1855F90E66F1257828435D403:\ +8E76B60626715EB0A129E6C2385F2064CEECED23B08B1E0E1EEE9A1050C9BC45\ +C52ECC36D3F503566F68C4A73E8737020DE93FC9BF2E0BA132746370D45E21E9\ +E101291511C95102A40A65EADCB5BF3B70E30273122488F8E5A98F88B32492B9\ +07799D3F126DA27718C410B629BCB323199A4533D2BE1566:\ +5896B26A6C98A462BFF52F189E09CB9582E721BDD4435C88:\ +8DFE5071427CC54F + +AB017A9FFAD2C7B1447A426AC1D4F3C103315E37724D4C18532AE13A5A1CEDE4\ +9828C18DADFBB27785ABB9EE20CBD22D4DE7F61B59A818BF59A6EC9C1E748868\ +9AB46890105616F78C4B511E81CDBB48A5C4A9E2B60061C4D76E000C9589BF07\ +24E6730950ED9420053F554164FD358F8DF17EA944414BA63C2BCD4C:\ +19D963BF720D19DA2AC9636203F5B5D2451BB384A750A0B38B1DCB74A58C7E67\ +7E5EB7CF62281E9D625CB6B3455877E4D9EFB7D9844BF4808D6B35EE6E5FDF98\ +10D29EE6A257BA601BF35E44574D165E739FF91B8CBDB7DA5D742A9F896384DF\ +8A309DA75EE053D86CD0A45AEFC8F13365DEF0255BFBD11A3BA660DD:\ +9823976A01E5CA3A0072F891737F2E804243C022DBF67DA8:\ +1A7D40F7A45D3B21 + +D88169C7440D4B715D00D29BE2C56650C38B88848A78C7F3397950A89CFE477B\ +DC4D9BA25C7126A0BBF98B1B712EC31026987D549B285338146CF6460391BFE3\ +DE28BA02DA4DC03712DBF7576B27FF0A9BF70A8F8ED9834C278B9B7D7C5DF14E\ +6E96F417A731C94FD65E4BB53397EAE04F02C70DBB166BB06B51EBF5D0E21556:\ +6AB43161D47BAA00611CF93F1CD22111B37C484D467C671737D0DBC3CC230E8D\ +06CBFFA4AE13D655A3D5F5B4538278956120B26FA62F6664666279E0ADE80601\ +579BE3EC92C236D16B0F0952AD277CAF995758C15E48D7319CDBFD60251B8C16\ +04AC8E3665B3B55CD7C1AAE69C78A8079ADF454928834E7CE857AC1F7C1B5D32:\ +D15F4AD42AD3B5E3E96F3C1B80F841A4638FF494433F0CDF:\ +69BD2AE022B36B53 + +17B3CEE55049B8D5678308E1AA3AC851785500ECD0B549C88A79F4BE3919E831\ +FA26AE8CA740C8DC605716419CCCD0EDEC6CD26636C6DFF4502E475C5925B78C\ +728E2033A3CED070311C006F75105EC1250265736D128E484FC75B8FF59C1A0E\ +8B2F6D1509CECC99BFC7F0AEF053BE99A0876A77BD2C292DFB8E302821A322E3\ +19F6166E:\ +9A412BC48FFC5241FF472C0A38B7A6DD90338D07BA5819337EFD2A1DF6E55DD1\ +35611A36964A9130F1D66647C408B300D5A65F158E738F545333E87490D3D640\ +3450A87C97EFE05F4C2FB1AD93B6D1D3DD0B5DA919C30E2FD4FAB0DBEBE3E5F3\ +76D848246ACBE7EDA4EDA0BFDD3222952A4B3E089E91D759E8579A6A5CF22607\ +5378D6BD:\ +30649520453107ADBDB89755E6A45BBC2B1441CAE80664A9:\ +69807CF1461E591A + +F2573AACCF5AF3863190B964E06CBB3D3BFA62C0A249B3371B0954CA44EA671D\ +EA8DB66CA82F0F6A31F905E9A868DF84FA91F5EBD63213EE2EAC81EAA2D53E0C\ +A532524E663EDE2D669F22944363A228318AE7D54B78D9D357DA2153D4FA74C0\ +EE86CA4FD1A2E4C40F7BE5EA9EAB8972B40333E76CB668E252C2842FD3CEA4E4\ +D0B474C5655ABB97:\ +AE9AD8224CB1C13935BCF06D72B231DFF0E03C1329B4B095D1FD1025D27749EE\ +054BD5C5FC191C0FF6DF19114F3A723BBC31FD2FBAF568FC11DD6BB75582909B\ +47945780D81D384415AFB1C239E61A47993BA6B3D28BBEA3A7B989CF9D2B0961\ +BF215C029ED736F14D379FD7BDBD2811E1D0F4E0082F88FF80B450704CC07269\ +47F82E3E3DEC4E90:\ +44ACC9C403CBA1CBC379BA5728A82184E3C6C5EBDE9937AA:\ +864C402CB6C3996C + +A79D7AAB3CA5CC819051D9ADB71CACB435E66752D5705E080C6BD918212409BF\ +0E1C99143C7DAD3A19364816F7E055960DD413F45550A4225E178754EEB6EB36\ +C78C400B59ABF6138788D5C86182E2FC5EC8BB54D532E7C0E1352E56E9F4667C\ +4D5D6A06CBC657BB447E8A23E42ECA31B8B8CE70C44D1FA08BDC2221D7CDD2CB\ +A13C7DA5909D5809FAB74EF1:\ +D27B0B90C84AA11EA79C30B8B6D836A0C873F1EFED6D1D70A8CD4B9167218552\ +8CD2D8F9D7AA044CE2465E8C8750D12D220ED7DEE8DD7E967535B68E97F51614\ +C7F2DDFA8F0EF69CC20949C2D0A0F69A0CC0D668B934EA6ACCEEDFF36DC9C95E\ +1BD0963BA58532EFD2390BF782135255DB25B09EA7AC663BA2E981D4BC24C216\ +67AFD63CB8ED3996A415FA17:\ +8BE0F9A2BBBA3CEF45DE714CB47A1DA46ACFE8C8E375B5C0:\ +36A3DA85013D20CB + +00675A08365A2C219162AF373BC3907A3F315065ADA8EDD8F95C1C72C30C0607\ +92B7DAFA6C6517C24815A974EFB1578A2E45B2A85877CF7AF4499BB61CFEE555\ +974DE01502E40934B30CE648C5558515EB118A25F2EF9F68DBC6A56D47C03FC2\ +76F656FF72092E07AFAB6F7CA3B20805CF87062D5BC48F6809B0010443DB9096\ +30681609E489F84E40C6EB05E82BD154:\ +2DE3E2479861C3935C30F117BF2EE076FFDB3BE6CED29ECB4568C573AEEEECF1\ +2A7A2553CEFEEB385CFE2E148D3520C04C3E3FCA827277C35AB79DF07FAE2440\ +0A75FAFE4122AD1B8DD2127AE7BF57B7206C45C9B1DC31E5EE8E7E96FB488C40\ +2A4B247EB848957D29FAFBA44162E41D598587C4578DA0026F91FBDEED83A493\ +984AE7F21A92C34A3166FD22813D43FC:\ +DF1FC69356F3D84F8504E86162BF62786BA068AFA274CF1D:\ +714D51ACB680EECE + +422C787B610A81BDAB601533DC7FE9D2AA365AD8D0C6CE79D9B278EC2EFBEB62\ +D6F786A39BE2EB40C07964D7E51D6D799714B9ADF950F87A190D8AC6E5EB5AFC\ +69268A473270897C4918F1994BC6D13D5DA7997CCCB90B08DD1398C0679E8A1A\ +F2EB22261D347822A2490CDFD4B6AFE1E73073EF7D35D6396591FF36884C5502\ +058A987656EB76E7AD5C723A128D1D5DCC6B9EDA:\ +EF213F63D55E34C88D1077F3E83A4E34533F11D913F495E35D2F69CC871505B7\ +2792A49801F546E574FCFC555477D9268EB7F047A9D158A6B13E282F1F970B8C\ +4AC465DE3CEDDC9956BA78BD18248AD3DF634EDA11D4938C2BB8417C59068D10\ +1C426808E089B63CD06FB8DEF20AD2EBC1102CC3DAE5BC3968BC888FC565B24E\ +3D47666CA13D1EE29C2BF2093CB1E8514AFB4142:\ +3B04007C7DAEE3281F302A1E59C19DC27C5828BF1D05B0B0:\ +F0EA4B24D5C8C04E + +366F71A1A3538E604A3A7E8F2E31812E90717243C69D260CE76193D6D311FF31\ +358BD320F99775D6D15C245BCFE724825F9DE2FB56846834DD215B2D00CE23CF\ +1A6A7F008F9B1FD499F8B7BE608F1E31B08009ADD2BAD8AB09B4D9A3720403A4\ +85EDB1100CCA5FC9C7A5B21F9D7B647EA950137834226EB251A16DA15C8B0356\ +38E0054CB8405EAB05A682551CF75F73CD485E3086F6D335:\ +924E375EB5F65F2F96A728B9CC81E64C4A5D732A8F0CF4FFB671FF2F54EF0623\ +CBB46ECD916C840D63201F6D032E32AAB8E55D3716AFECD884A7A576FC91279F\ +34A2404F62ECA75734CA87C2EB0A4603C16FF51DAFA609C25F9B9AC84F5D4270\ +AF689112B474EE22B96EB6CD9235018A44BFD65660F0EEA2C4A189A89F2863BA\ +19BF4F392C619134B2AB9833A8CAF09B593508F9EEE6C762:\ +4CDCB5507304374CE290C9A740ED58662B52E63392E62774:\ +E186BA54C8C15814 + +C96B1DAC091798FEB0A74010ABC768D2D5CE0D781752AA3DF34F50A6D9618FEB\ +EE91532172589BB22F9EF3CC87220B4DEA792C10F082057F18D7AA18460A3A79\ +CBE91A08076C4EFE816C8C90736BF26408415F57AA82B17DFD1E5AC972A103CE\ +747E7F8E76216AC93B683E26A8FD9C06F4355F7D4A59A74EEEA737866AF7590C\ +4E1A41CEE3080FF29E0B6DDAB926B131A75ED34EB990A4E332D6E53F:\ +B5D10BDCEAD213950A981584875633CFB9EE6C8FAE1D1C317970E4FD2739B6BB\ +8E3F977D2FAB4448D412A6084B503C918E77DEDEC48D96BF968C66D7E1B4A6BE\ +A461AF9CD9CBA8F981ACADC71E93BB33FDD0C3E83F5B87CEED3711CF8031B550\ +5ACEA43308E67D6775951971FAE57BA329B69CD3B0AFCBFEEC4E92AF3358D7C5\ +4E675AA9279F9615C1963D64610F388724FB993F34024ADD1B549B31:\ +9ED95D56BAD11AEB6AB3E936ED432A6E8B845065C876991B:\ +2D8C0EEA9AD90D46 + +A50B4007340EFBA7116E5C7D147FFD08DF940C883D6F0065DF2EE1DBC11DFB4E\ +2027596A61F00956A2659D887CDBB8F3C768853BA53B3994EF8969582874EC4C\ +89582DE4E113A34B31E3D31D694150A0D7851FA266EAAFD5CED7E7A6889E998E\ +9498EDCD018DBE45C7B71052BC0BD49C2F8FCD705DEFC77EF77C228ADB027439\ +031F95AFB48CA336D821D241160A977117B08AFA9677F0485E45804CF2A31295:\ +AA0F41F20FB792774E319AA8D26E600F14F99123AEA292E25AC0F5E77B152437\ +5568846BF2C88A141CF38DF69D5F0A4A13BB48D59C580E22172E8A1F8EC90DF1\ +1AFD59BC03EFDF649BFEFC28D55B92F449C2862F9DCE8D2A38FF251C620F30F0\ +1E13F5175D94099D18AF5CAC2A1B2AD42A13788B5739AFAE2A5330C5FEEDD8E3\ +02B11F2FFD94DE4E7F23D30BA7CAEE4DB4D4E16781625A4D88AE920A5FCFE406:\ +3E83C2C42EDFF2231203B04175289C7A13664D28CAF0367E:\ +CFC98241E9ED13FE + +65052507F0994AE9CAB2FA2BEC34760B08BD89E993B9A459F1AFB9D120946504\ +56B11BB015BA54C751790F3709330ADC28C52612980BF5BBACCDC9794B063EF9\ +4B26136F89510052043825F456309F9E64885C8365E96FAEFDD81378E933C562\ +833786186A05BD87DFBE30C5461ABCE236E8884646EB36CB13F19A6C37F6D036\ +1AAC771345BA794065A13DA8F353C35DEF1B3526FE90F6108312CDE61714A882\ +1811A985:\ +9656F278A0B988E5BFB80B677CE62820F386997A6AC0289651E4965EB30CF143\ +5FC53C3A34CBAF23D0874F03684096303C946FBCCDE8186D200F28EC3E502374\ +056B15973FB605BAC197F577862FD81317F11946B6645A89EEE49EC947FB1CE4\ +9DC7939F8453BF7F4CD0BA94F08B454508BE41105F579D73DD76ABFF37D12185\ +987FDFDADCBA342500E013A9DCFDE437AFA5CCEA0A772B56ACCCBD1AB18A8069\ +1065B3E6:\ +BF60941BA2CE07621165363216B1A8662883B5789D9FBE00:\ +79E1E8AA48BAE8BE + +2865B3FFAC2D9193240D4E70F90BDA48BDBA9B8FE9DC80782E321CFBCAF19409\ +5E204D511B864743AF0F4059A955B47D53ABC0D79071300BF4304516F31839CD\ +EAE23E47C9365B52A451702928C311CEA1F8D039301B00ACCEB342C251B32993\ +8C9FD47F7642930B7F8A859B51808B8E51E422D9E387DD13AE68B4A1D1B07AC9\ +A16D5713AF9EA3D06B2BDDD97B615DDE709D0E8CBC3D1C7080B2F9932A16A1C4\ +B33746A08D70EE0A:\ +A6CD74B4EA815342265082C682689329A47AA7671CE9058760C453FAE6F468DA\ +8A3AD9B7ACFB31A947FEF628204C9A6F085E99104C1E38CE194F6DF422C3B624\ +9FC3464C25AB78E576A7BC980C3F6E15FCB4F8B0D2A269B4323B998FCB297C49\ +3ECEEE97FD8F6E94B08E83C0B3F090ADF2DAB04E951FFE2C2EAB6F30615AEFAE\ +3958539E9AA6861C7AC1E97AF4A6D4B8591A6431CB1735FD51B110D94E05D1C5\ +E5D34E9EBE6B8C9E:\ +442541939F8392881C213DADA197907CD53D37030B426DC2:\ +CC469CF927E806BD + +DED01389883B988753CB3BC1242041A7DA950842C0FF4BA038348972707EF021\ +5C3CAF324478FA07EC69857F93B4D5FCF59D95ED83B1DA6EB247DCB8924C839E\ +474FF125AB188F2173F0B3EE6C143E3B8D0E65A9028930D4FB52914CDA17D5F6\ +0C5CAB8CB304DB9A6B02636D336F568DD4FBD44FBA911B3F8D7D8F3B8A698EA9\ +0D5910550A25A0F48F201A98749EFA7767A9DA32D60397B6794F2A0F4B483D2E\ +6FD729EF8588FE34F8A02508:\ +1723BEE6242BEF711C3B984948427D5D3A272833EB63B70083C68F845A0DF444\ +74B01DE09634DB18918D236E244BBF19C28DFF774D8A23FFD6D02931CAEDC711\ +4B1D4B6D3D0AD8525B87ACCA6FF577479B610244559D1A28B837BD3453A182D8\ +D2F3718179DEB55926FE6946398B04A0FC1F320AECE0B3AE1DD372CEAF51DAED\ +3F30F32EF9BCC98A398B67C7EAA478F6D50ED5131377C3E97BB8ACC7FF62F037\ +F4282EBEFB97C75E4349A6F1:\ +19DA2B67A303BD41D9C14113367FF130DBEA0E586CC94032:\ +989DB8AF81ADE45E + +13BE60919E667B31C3F52317D68AF40FA32E701D947996D754EF21CAF1E0D2C8\ +C801B59D610FC2FEF59058A80E95F2164B6CFBFC0CA8EBA67565F655023B8BAC\ +6E22E0FDCAC92086AC5258A9F86FB0E6B0F77BD32711C8BA7830821D4AD7E5AA\ +D4B9E763615EE1CEAF11393CF8FC03862FD11505DC88AA80870E518C35F19C38\ +98C18D9EFCDBA4D665C716E19302571156DA8AB3606B5B859637C67C03445478\ +D7524F52803F419F0D1576CDA2D4E23D:\ +BDC26765ACF6111BC0564AEB8D98894F03BE142F7BDB5FFA2809E637B0EA2AA2\ +30370C822DDD92DB0C271D429F9FD9E5121E7C8F386DACFA628132E47D800E2C\ +3B76CE0157041419F2D652ED49371E809C1EF46B3891DF86B4CCB1DB94A47B04\ +48BCC21A1A32570B04A62720013872859C7660869E2773D75D25F123D9AA45FC\ +4840AF1F28706E2BCB4352817158F02CE90C2DECC16E163E23E3EC566DAF7A66\ +4F7DA73CC65855F87E128F520289EDC3:\ +34C1FB60E4F910716522EF7284BE762E12D92C574C7117AF:\ +CCD1117DD7CE8C78 + +0E08C9AD2B7C2CD3CF87F1D5F4D41C4F5578EADE1CDD1C00FFDF4F755B409307\ +AB07FCCC64CBC36D2CF9B4D9332DEB326B1A13BFD75E24223234AF7916F6FE9A\ +A37F2F73D9441A49C7E9C5E6CB598ED438CD7C334845F00E6FDAFDA24A164A4F\ +B285A5A7F3D6A992691F74E21F3E10F27B27AF202B77F9ACF985D5E6D528260E\ +A59D7BEAFDBE0980D4976CD59027670582E5745F245D474A9A6384CB7B19B9E2\ +D7531F2558243732D98681CCE406B87E2FD86F81:\ +BCCBD9A965628459EB4ECE80B4266C2F4CBECDF281E8FC0512E3ADDF66C5F934\ +CFCD9FAF78182C3A7578234BCAE6DB34BED44974315C6D29FCFB6C7501D5F09F\ +13E7D163FD8290A8CA2C883EF490F82A7EFA122D3598F35715DD0209617BF9C0\ +3F462613B1CC578A258D1A708C5323DB478296B09F83C55E8349A4F9A9E0B21A\ +BA659BEE4B34B86F6FB8AF8390520C52B9874847B874A61FCEBB625C44DAA344\ +10422610F411101138D9047C72A421D13E8F881C:\ +A954794C8C5A6583AC5574BD5267FA456CCB861B035BCB4F:\ +D1C4168D5EF23BD7 + +293D0A81E72071209BEE7B31E2C70A958B552370A0B5454CAF294A3AA7F0061E\ +7DA53DF903CE3537A93BEEBB2B2FD6048BDAF6E856454814C2308760E2C1D809\ +096ACC4B6F1675C6BEF9B0A4FA81A879329083EC0CE758650EC69196F5654174\ +5E805C325963EDAA2F4C000510DE7532A88D236D2A52CA5F4F8F4D3BC28DC7DC\ +1C9286EFF9978E95D666DE1A0E3782F67D9F06986207368C319DF75928E4CBF4\ +3AE35D916D4E8DC800F0D979B244E08933F355F10E227A51:\ +4E47991B92A21D08A1327BD558A743FFECA01E1747E2E05B27B5519B14668F21\ +23FA0875D5E25944A34209C5B67F980B04D5B78CC96670496E8B52B38098C54C\ +2A53CA9213A1F3E26FCBE8A2FC229492F026D97B6FDCCFDE0C449A1319D8DA63\ +1641B80486A9F13A5511FE48BDE85C828F8AAA346315ED5044916A7FF10FDF24\ +732A5AC648864FC3D3305EA609C03726148DF121D85BB66281C8EEC32E5E0C8D\ +8BD46A101D0F201096410BFABC7AE4702CEA5A7B49809B96:\ +B79B4914046D2440188552463AE7D4953CD632B74EF57D5A:\ +28AEB01F6AF445F4 + +16E18ED62ED56EB7DFDC9A16C2A550C9A3FF4CF7B2994750C4716BCCA13D01AC\ +3E9F4687552935685AFED40CC6355CA7B18AA4688F86D0FE9782696FC7FD3702\ +20D6E1E07D14425818A047DFC6A59F850C12DF38EA4601E1D5B5AF2AC29D2B0C\ +5866BA044CBC0ADADD671FCDB7122D8BD085C66E7500C1BF245E24EA357781A6\ +3100150CEECBD4C4C93775A12CD24D48C90BA2926CE0BD03A57894314F9FAD3E\ +A6266A7543AF46A82BB5942E87684FF30E1A01B68BBE1B9822669717:\ +855DA36F0F1BFF9176FBCFD921E84709C0C0B65EE2343E5FB716D3A535EBFB68\ +A3472F23F60166E0413E8403A4A6CB948A16B9ACEC25C9D9A77A65A849866079\ +396F8580FE8B54773F7746EBB45010EF701624A4AFACE8C0C4F2237359F21DD8\ +AB12A27C46F48339C6B65C32B3321B0D1FBB03800A46D49A478D725D23BF3834\ +97148DBCB54CE07191D61CDE1F3EC48735240750D7E1BC61DBDBCA3FC219B661\ +028CF1F178F52F1B4449358A72C740EC3623EF93310B644541F17996:\ +CF5A147B024229FE958B9F55854F36E59818E78FB84526BF:\ +179B6E26C9B56072 + +1BD797B39442A5169CC93A5B49A186E2EF27B95B34187C49DB78E204ADC7F04C\ +A5174C02F9691CF7883B64262B1B15CCA987A16058ADB5CAFAC12DC45569B77F\ +EEA2A3B5DC5D5B096C0A9CBE3F0C4B20FDF8738930929ED5738CFD7A21A0892D\ +AE31B56244BE85809AD136490AA87D02CADEE0DE2F422C93C19B4ECA1CD87432\ +353DA547105EB7C748AB0DC9B2A9377E400D92D66AB8ACA5D9DCF2718986796F\ +4B20FDCB06A0EBFD2BF4DEAAA23EC4D01CFAF68569E9B623FB8729626FC26E38:\ +9815266577A019A1A49C0940BD3697149A50D77086DA172C6CDAAD2FEBDC3CD5\ +56C60BAD7A5F44FC2F219255BA567D3F6392901AADC38398089D8008AD255E8D\ +39786C3DA809E1C499070F3C7BA4787DCDD930EC173E393AC34EEDEF71D8CD69\ +E6DA2BD2C76C814770529646FB3D9C15FF4D19F7BF926E0F72840E378FF5F9C2\ +1D464B7FA8CE6514E68BDD95352AC81C1B817E85CB2EF9212353A20DFE14C797\ +8909CA2C96C84A73C93A7C64049A18DB5071CAD15CDCCEBEF9E45D7A4D3FD8E0:\ +422E846979E8EA7AED9218616BAA4C96134D46B02FF4A911:\ +7D2F503105732C9B + +76B8C05B6006C39E3D91DE9AF1E018CC41202F3E8068E160183F81F40A9D9B8D\ +8BF163B89AAF149361C04616E5540C56DC69A050812CD08D9C128EFA11AA919D\ +EFEDBB0295E2239A54813A4DD5F826836E3504C2ABDBE530912970D3656DE179\ +F8CE5D0ECD700604F5680F67DEFD0AEE2AAEA49C1B8024869482998A7BEC10C0\ +D0BBC07F90FFBB4E3295C35B11BD99F4178DCD34101ACBDF5E17078D9CA9D965\ +A4A04E1C855610CFDCA417C963A7D6628615B0FB1F746558ACF2C23F7FAAD1C6\ +60027F21:\ +06F6497B084EC666DA6706B607DE07D8F31F93ED7F0EA18BE167941216CED455\ +79AE91CAAB9CA67AAE82422F4130A27837B5E6FEE5AC618542BC3A5F594ED47E\ +57F733A63D854ADC13161F35B06889F9D22958CE7016D0954C1E056975CFB961\ +A7E787F403FDECE30B6481ACE56DABACF5BB3875AFD291AC1CF42789BAED5933\ +E41BEB20F314002A56D47A7D4871EC82F0637EA2F5CBE514C7436F90510CB394\ +783AC9C5E5312FDED24FF9B112770E9DFA01CA9514882F57BCF6A9A7D79B6119\ +970F7052:\ +5A34EF1248E6886E476E059C42EE93EDA4E50A37A7D9384D:\ +901FB557894F2198 + +0C9CC3DD901AC951FF9FD311B0DE4C3FA05996B687FF0F9053044D5C30358404\ +E1F475F98EB7F998B0490B5138F9EDA12E0F792DC0464DADD92483EB44830729\ +33FF5FCD78030FD75D0B3269B5ECE51AD9B246238D10F4FA6E6A06C1A18085C6\ +24EEF9F561E50EC1F4972FD57654902A1592CC617DCF94E08630C460BB463054\ +C2F657057499C258BA23B250683F75EA6C28214B05430BC1CFD0A8659188C362\ +8E8653035FD20F3DBBA7FCBFD3BE9B7AFD3FA81179141D8D10031B5C0E335CC3\ +FF15F40A82AF84D9:\ +3DE407D6675240D9715357F3D343DBB491E2B5A4F6B3B76F2BFFE495A2715B90\ +50FABB764C58F53BB665AF5C5CDC9E539D32858B406FAE4F6649A1499E3527AF\ +C5174E29DEBD45F62DE2CD23B44B9599B63A822FB18BAD935B09D70E9ACFA9C8\ +2A28F2900FDFC97EDB08391E6420C726DC290A6509D2F6236F744EEC83A81E32\ +8B832C7FA9D3E949A7505ACE8CEC9468E31F874D5E1CD4A1654BD9DADDF36238\ +704C1D5537AD7259CFF95A38F21F156A24618CACECBFFE07C0478530DADF57EA\ +4B34F3B4E68ACF48:\ +B74C40F0FA6016C94745F73FC4E6C39B1796EEE217223B5B:\ +945F1E1536AC7FB6 + +7E36435753B7C289495CAD8E1E208917CCC9C925A2B898E87B622B1D2C7407A7\ +6CBD144631243913BB9D452DC6B42C759FCD01E4D3CEFABF9D80E2A29A6D8545\ +78868E7DC8C696738C538695A688BC67D1ED7C7EF3AF687AB99A8B0C691B0BEB\ +71131A8E518A40BAD6EB0AE991421A1927EA61A5FF96C408BD6C4F7BA26835FE\ +71F9EB16F2F477A99BAF3B4DC1DA366592C3CE89BB8287CD8E2942F097BF6ACB\ +1C334270E45345168CD402399ECC8CA5E19801732DCF181C1EC53DBBC61719F2\ +6CBEDD581F77DC8EEC036D0B:\ +7D3DDDCD5AAA7E0B1AAB81687919E03FF63F7F4E619E1016EF9B3F84C9680AFA\ +7CF530C0AFA9F990FCC19A010153BF10EB3CA0899A973A66A7A94487F8E3DC2D\ +31E13EC2B2B9E4946BC97C7676E2329F2F42C0FFB14883DF8B449E16F95A6843\ +C3058393E5C72199905E0986A79247D64882ECB6ADD4E6A250FA227253EF163E\ +C548F561CE9A00C43C7D9316E373EE1FB715140EB9CD882A1D9D5FF6805F30F7\ +39668E3C8C51E29EEB7DC8005689928D9267E3F74FADFF38107202171C02A7C9\ +20E8FF0A678F0AE7121E16D6:\ +7ADA51356F87873ECB47B3EC609214E484DAA4ABC9439933:\ +CCB4D4C48FC17139 + +6E804B62EA711CA8D09B7B9BBFCC1EB2A8938A6889BC31ADE4548051F8F4450E\ +693FF9182B1BC1A62F4C7998A024506F4AAA85E6733F81121E6BBFAF9EF2547B\ +D01C40AD657345AB0B0EE97A8581E837A515071D376409CF4952ED47BE5DF95A\ +2E07AE6921C497FF1CB8057E8B8B38D4D8D0D6320B9A1E4445266C66210CCEDB\ +0D3695549CB3D70D56E5E85DA85D2A096E156477D5F4A4B1FBCEE2E36518FD17\ +21ED2504DF5F19410CD9030A8477ADE57375E08DA2CA15E7B85BD010D76C8CE1\ +B3ECDD91B1B970AEC36B37FB32D9DAE7:\ +0B95E5E14AFB699FA86B5CE3129BA5819814FB7C3302AE95478DF30B3FD2CA7E\ +EA12DA1AAA0100172A3230EE6677A114394206E60A8EAAE1BD20135B5EE425BC\ +6814F2084A7FB5C66B85E6B443D79C68909ECA4EFCCD0347BD5A66791E8632D6\ +3640A98076C19D4467B636157849F9BE971124A20CAB9CDFD3CDB63CF18117D5\ +47F4A6F761C7AF916BAB021C2AAAB37598C0470E45E672498A0F3745844C89E0\ +E4878C2FF25895ED51681574CBC5A815E38363F25BE1A6BBE01A789799081766\ +1D95B38DFDE40F61457BB40B3CA5AA82:\ +13DF6263560C0A2971FD5B50AABF8A0244958379762C82A2:\ +BB4E0CCA3D31EC88 + +F7A5CCC27DCC097B0FEF1DD3E4FC28C513C17E9C843C97E23E185F403D5282F4\ +17640E4FA86C9D53231AA6E62BDE9D6605119528C5EEE8A9A4926CB023D59DD6\ +895F3FB4A2BFF78A63388FC843BBF97268AC6E2E0DEFF46E5A6F0CFB01532461\ +6A6ADDB278E14DEF8DCFE40656776E5FAAFCD4E8A72F7B9937FC86B2854F32FB\ +341727F469D323D1BD0B9F9FD2BAE760C5AC102D2EDD66599CB41B9399F2B99F\ +D9D28E50EEE442A1A7F94DC7F0F6918C559BF1BF09A6C6AB3C44ABADB4306631\ +7CBA83888FCE81A5AF3AA43FBE9EC69CB44B61D5:\ +12F3F5A8B6759F29F1AE80CE3A6ABE73802CD1A723E80F83867AC2DE7B430272\ +E6F105E530482D114D1D6E9117D821629DCCA11047CA4C187638F3A9BA8E513A\ +1634A7F740F8EE889FBA8E6E2FFEB7830619C882585E6D8083076E0418C011B0\ +95A7CA3D2BA84E224B6C993C6FBAB9585135EAB90B78ECF282AC463832AC2CE6\ +23659806217D7B490C234EA58DAD352D5AEB3C84F5F33C7BF9435F684A128CE0\ +F2456FB01AA7527787EAD3040CDC2607C16103F4E5A535B0C9A63DBDE4309C32\ +AD4A8EFD1B8270A8152DEC0CD3892F2225062558:\ +2E5B70B7269AB9586BF23E8BAE7E9E0BC063957008D46F0A:\ +943BDEA705D18073 + +6AEF7368204C0B8BF4C7F9D1FBF33CC7E559A0BEFD6B74D08ECDC5BED0A62970\ +E32E011B38EC1BE7A691B877BDE9ABD4A35E5863DE39220635B0C856C87D7CB5\ +C0A6328F27A573F07EFFEFB52A1124F45052DA579805D00D71049B396F445353\ +95D6AA92558CF12CB77DBD1302D9F75A868BC528E9AA0EFE897B01B94FFB29D3\ +084AC4957E64ECE3D1949BD04CB328B01845D046C289B144F5D42B4746915C13\ +8A859FF6930ED05AB9AD195758B3D35FEDB0655377DD1271F45DD4C0897501BB\ +50BD815FF6B9705E93625CD8CCCFD566C34ADFD11DEB5964:\ +75EA8AE76211A99049C39F35780C797221C41F662A988D53D07B4BCC058B841C\ +B2B259204F5CDF9B8110064B87E8236CAE4657F22DDCA568FCE3B1D81E14BC12\ +D1D445B22D4E50B90F71E5500F111F20AF05DB126CCE0BD4613ACCBB180C0EBE\ +16A04354DBDA0E796FCDA0F1BBCBD505281B93E836A1B7505A210EACCCBE6FC3\ +5D0014007CEC5A6F0CD664E7BFEAD74C01D6B3B88B86B2799D8E27B41B1B6C10\ +0890F47851F0F9C8F2808F76CDB20570A9F4FE1BD92725FEC28DF54146A9CE81\ +42FD0D8BEA470F52750A0937AFD4993A3D872D65EA84F4DF:\ +092B81DB2BD6AC885D46310109E1D53AFFAEA6AC59F0AA66:\ +1713E9C1DC895CA9 + +8580313684E3AD8BA9A1F091AFBE7F2170C6B61556646F395A2D4A182920BA82\ +BB9B9334367B81BD5CAE18A279BD55B7F5B639F28FC5CB613C44CB459435C583\ +A5B6EA105E34C6233BAFBF55A2D25D19C1589F9F1B3D254721BA872F5763494D\ +FE47F73EB4088B23221C489D52B0CBEFA53DCF74D46948455F373A95F0CDB3A4\ +2B2D37BE00C4CAE1C3E0A9206997E6BA6DD03CE7F76CCB30A1B6C10BF1251DC1\ +5C8FAE513B4430BBC39A7202983A857C205C84B872300820036795ABCB443774\ +F89588910BEF0E5808890831D9613D75E11A653DA91EC66964C56457:\ +07051E15F921E7D97F48C3BA31B5329E8410E45E36634463406C8E6BD36F35D6\ +27D0FBBCDAEE49E803625B25BD529AE208E8175EFD101D5826DF8D8A14879A3D\ +D7BF8C1CFCB73F1037447ADED05A71D9B1B077ACCA26BF18B894171C6BA58D9C\ +6608974A1648F9B967908D25DF1F0D93FBF4BE99E81302B7A871CAA59ADBFB26\ +68C0B5828468F7A208AD5538810C31CB2E131E18D008ECF8F596EABEF5160DD3\ +96AF5761A765C05D3C8C11096FCFF5BA27BEA42A17EE451FA75E2B7EC1F9D299\ +2E5AF048AE3104D6B70E2CB5FE818BF4C5F1C62233D13CA678CEDC23:\ +F73F51FFF788A91B32A016648E9086748E6B75180E1D39E9:\ +BEBA357FC01A0163 + +B4F95F247179350D3E1519771561421F8D6C8F54F54D51FA68D06270FE0AA124\ +E6206546F08490FDA3CDAA366167A2507FA834907BA3BF569D30EF793232D5A2\ +7559C8847D3B44EFE20B80A14C2421F7FE110D34FDD456885B7C1DE7CE170510\ +191819FCC7368598A97D0145F674DD172D965A90C3B52694292990B57F32ED0C\ +E7F9CEE9F9F14FC529678E3804821D611DC811BE618FC844037FB2EF1501F591\ +D5CB5F4ACE37F400D0F81BE9809E20FED067200FFB4666E40C5EBF53F779DFF5\ +4E8B89FB23D13907930F7D6DC7756512CD9981ABD64A5E3D3CA1B65090204607:\ +7DA67C7CCAFD319A38C9013018749BCC4F24C89688476DE6233444D9FE8B0AB9\ +DE4EC7836945314551D95D6CC6B45CDD69233C7B96377C4DFCAFA28F93C2271D\ +D79E5822A3B37BC608D6A8A63754BC0415C487D4A90500FA262683980543983B\ +A345DC7C67034E412D1C90522F88D84B088DF3CC2D3FE06CCE15EA905024ABA8\ +166E1A915F70B1796EB1C091041D31A4C870AC18F2D181701CE4BF6B838A2485\ +33475FD52120025484DC4BD92E43DA4B576EF0F12760FFD6C566996F27962FB0\ +443F20216039EB57845A5483C1B73A9D2E344928FB58E18932748F2BCBD62014:\ +8561DD8C43E15F404B4E48974A581FD9C533947F0434D8A8:\ +C5703CC501187E82 + +2621B208787D71EFC115DDBBC1594CB99F7F85EB4D853D78D1085590C9B0E2DF\ +4917B94C7CF171F839F0BFBF68A1C1B9ED073B650F1784576ED5A42368FD3705\ +B72D4A9EE3B2128ED2698626881A93599C981FCA80242569F15D3DEF06D6507B\ +ECDAB0193301739EE573570AB0C4BE887D69273D7691BD44D2401EAA90AE6666\ +D526D9BA785847C25FF6C91D3EE3A1AED72E08119AEB41F1EAA202BCC81BB0A4\ +9153BFB290E7071E03A1F1670029556AC62201EBE063A9EADA1FE08B60BD90DD\ +3C8F6D6934634BD39202BDA3DB7A0DB496643CAC964B20B76B6DD6B2F4098406\ +6328A67C:\ +10909490510DA488F96575A0315FBF02F01647F5FDC8A805AC05FF6139F4E102\ +C52642A55EF11307B17A2C83E528F943526D2A8B9E59AB2ED47A250169AD7D35\ +C64C29F5296C7A7C81B6A8825BC0EB4D983003B125C8729098CF3A68F1B02F00\ +DCCEF3A86EE88CA312213AEC4B0DC012D86D89C48118A300F29338CF5AD3ECD2\ +3157F6C7B46B51CFCD7E845B016CAE7EE671A736D680D5EC06C68CE6B3855E75\ +A1038C8A425A833B11D544732AF14043A14352D202F3F5C9DCDF0C45E29CFD03\ +FA569A8FD01BA411FB3BDDEC28AD19EBF66B3E2B513AB21E915CAA6C6FDFCE80\ +CE79DA30:\ +52A58D8795CAD4BDD915B1FDF917698154D11F94B8E0C01D:\ +CDBD875DD5066730 + +8BD4EECE9E921E4B11B72AE59C51C60C541262274F08E9CA850C21BFDBEF5190\ +A69E177B23B180A6C64EF704AF486C93196A6DBCD892F9A436DB0FFE4687C3EE\ +82E6CF38E105A7BF07F99E9F016A25E937E2FDCC085CEF7642DF7F1785188715\ +9575531B7ABE751B3FFFE35E627F4A86E7A263A5A41D4938839D31C82C50E171\ +9446B85D3FB56C6E6E5F9789548D8469ED2697363C56C8FD24BC0C7268853699\ +D570913AC858F6F1CAFD84C0A39FDCAF2FDD7AB6E4AF92D2E37F6F85DEDAB8A3\ +433C3E6062F20A738C8517D256167CBD40A0AC3DE23C29E98E0D1862DDA52E71\ +DF88C0DF1C0340FE:\ +8FACA5517EF40BC3FA2A6A7AFF133CD23810B253C1E455FF8127460569A7F903\ +39E6FA5D3DED80D956638E7CB0EB13D550CC25F369C2DCA686A455A2F7BCCD97\ +249A4DD908D9F4AC8AE06FADAFC52E76E6D603F023E8BC3BFD5BB00E585B79E7\ +CEFDA9B747133001B710ACC9EA8B879439D8B13EB7C381BB80A031E95CB5727A\ +62ABC4ACBBE7881DB2782F7155236595EBAB7659B1FA6756A097C0F0AA447C82\ +E3350515C02FD25FB214AE7029422A26DA4D10BFAF8B48CB522C68C90489F659\ +72A21570C23E60ED9ED5330661BE68C0AEC3E6686E2D68500EFD83B32EE2CFE0\ +E03E522849079D42:\ +BCC08F969399E4AE6BC44F7F33145B1B0C2321D577A75CFF:\ +EA02AE6ADC349324 + +5565DECD079BBE370E3C1EDA1486C027E58E50BC8F2BA314E247CCCE3E99AF32\ +0EC1D66F3E40418C2739252D97D09A89090DF9166E1C49EE0CB963DBE8689F49\ +BA75E034950D76552F349F7AC7670352A14DF520FAED9F02AEFD74E87B8F912C\ +40110B9D0ED55354235D628B99DCF7482E049BA0B5985031A61B973652ED28E5\ +3A73AF6CBFE87F4BC43A896DB8CA0A59E6E42CBBE07C42676C09DA89962CE405\ +324832CFF103B5C78848535923562B903867D7D95E076EA1F93EE55E0C36DC90\ +E9206A2AC1B56B4D66F37024BCDDBD01FA795D6E307D1998C624D4AA00E1574B\ +78A5556E8A586E8DE9585B9E:\ +424373A6EF41676A850D1836DF76735EBAFF03C57750EE74D61BC78464BD9B82\ +C7EAD992702C6AD9773156120C5B8BAE57353A4D49466ED8920E4C6DC45C47D7\ +08C5E264C64683B3472F2C45AE7AAEB423ED3F00189B382716C5E79EF2066CD4\ +C10AC071DC354C2E63728D80EE43350C4AFD42881B0F5D98685CEA6B20118EC5\ +86C0B79482BB84340B53F8E4B1CC141EFE6211EF6CD75ACD251E7BBA1BC1F53E\ +50C5C0060038613D262C4E0C4052987137562011510E03247A772CB95490391D\ +24AF3276EB3D741A8A6CE10C555F4D5D0D9566CEB69F7FC77BA15E65FE309864\ +2EB7E5BF071EF554B5958C19:\ +32F0B4E2C8FFBCCB7755AA909E46485E6B78446829FA26B4:\ +CB2004E37500BEEA + +42D274AAAAAFCCC109C78854F36861CD07A9B0E827188FE94F4CBA603B544A09\ +C8CE0E9B30C9FEFCB8079D10F027288D1D72C8022EEBB4CED8C5BE8E00252B01\ +AE9EA2C5F52725B5F22430335279C443963DBBE59FD5356665DA34F182E24AF6\ +1651BF78D823CD35DA526AA6D56344CB71961843CC12D1308BEE06C29D286591\ +C6A9EC564D625443C224B647ABE3EF97AA95E56BF40D432C79A96EF57E9A3A91\ +E7A706D50C9E9DBDCD98259318EC208D6F78E4090D0B8C564CFCD115C0306EE2\ +8B146D9A4DF1882B9F871FF525D3B9C3CFEA5FD31301BC35BCAEA31BD4FD15B4\ +446E92ACD7247BC5D546A4C0FC9C1514:\ +BEA9C3D615055504C15FFE50B4A25CA57955958A7F498D32AABA4A88E1B1EBD6\ +08455126A77C59937EB0D0CB10EE92D9607CBE85B5F3F419281D984DAF3AC3D2\ +3DEC8864FD7663261CF40CD7504C02EBD10CB194EBB6C9672C1C3D01C85A5B0D\ +F43431BACCAC3CEFDC275C388F32C393423B0DAA3EE9C76D48EDAA932B86D9D6\ +BC2BE5508D96F31E7775027E227A4A40314C4D6D096BA8C1FF8EF88EA96184DA\ +0E2C8B070BD846E89EBE92851EE18439BECE1349EEC82054EB452B6DDA35834D\ +B0C3390A28B071011A10D730887F6CD847C0ED613E5A217E1F290AE0E015CB92\ +6C59576337975DD63C423A91B6407FF7:\ +82A6EF12BAFD7699D461AF7338CE13E3752BCD601E00E6DA:\ +47555233CBB27325 + +FB8858FF168E5ED4B497EE55F9CCEDE93F749155B4158DB4A18574E5DE00C516\ +DC892F012D045DC5AEE72633A95B2B94101519E0DB99BDEBFF448167DAC475D4\ +00567EEA27562042D3A111FAF1FB5D3A6FD6BC0F29FF85D23AA959A4F0DAAC05\ +A8D2CF00D29733711EB524EA58C0E0566BA6ABB8BB5AB873F843EFF5AA5AFAB4\ +9A31235980E97641EB508B50BC99F0250A018420ABBA39CE95E8E2846B7AE7E1\ +E1CFBE690581D2DEBCE4E51148585BAC6F66D65E3E2C10B84F904F92AA823158\ +08C8F05EF0FA961EB6AEE6EC898E6559FB32DC99A8E5770B0F891DB8297989E2\ +CC7DBE703A536292677E41CF7F0420E3FDB18B28:\ +03E094A8CA5A895C73EE8E2EE30C90C2B0A10D3D9E67432AD2E91ECDE41C7726\ +71171FD84D6B6D660A9EFAEC2C9353FD511D9C2A932A6C8AB4DF0434A950682C\ +CCEBEEE6D874425E0F0287F6872D1DCB8311394AB6F6190065B7D68F0B3F65E0\ +D1EC4395E531B5B5789E37D7AA8CF6B3E41054B85B9FBAB74E0FBE556665A16A\ +4DC3C9775BBF3602378AE6D53A3DA5E6B0A7B399A394AD8D5748BFBD02CFDC4D\ +869ACE9B4B2571CB6E4A01A813E126370919130B4D844FDCC2A32C1895C4687B\ +D1B1DE69C48DF14CFBCC78DF6B49A67D25025204BD2EB2C92AE07542FF64E075\ +D22BBB1A7F1A815DD954A9C5F6D8AA511C9F00E3:\ +7E1FF62F578C880405AE520FA53BA2F0105C2132B6AFB167:\ +3FFCB4B540A3CFF3 + +BA5E4EBDFCD93ABE7030828501D28875DEE6CD0E2DCEEFF2EBE54579FDE16878\ +195C7FAACAE794E6C3089AA92954290D65F329C1511DB2B95F07607076249259\ +35044B9107B681F564D3DB09477B5B75A421842B88223B2CB7F7DFDE9B40C029\ +B40D136452DBA02AF1D9447DDACE19C3D427B007F0A737746E6A122C5DA8CC88\ +49BA80841087C4E27FA3771C71AA8F4FB3281835B8ADEE0965676567D9BEEEAC\ +0C3E2B7E844414A0988BFC27B682C1A3D8214C37759C4D8E793E9A275CBFB6D8\ +534536DA22AE947F696AF989A4F1D5202762F2F4CA2BEE376342E041A9B233CB\ +3B7B4749A79B38F822D9C51E6572F8D1AD5C59B8A635A06D:\ +0E78CC6E7508507EF8D3420589DC844A88E34F4F68591E806499197E6C0CD398\ +0F4ED5AC4B82F85720782558D85E704E5D726BC5BB746CE096B1E080C31F0D70\ +FBE9BE28BB8C7AA5BC6A460A5C7F6E86D7BA4F307CF5F7B9F1E9A4C1945A9CF3\ +4F8DAEF8CAB0E52767C866784E7B944D41292A708290ED75B7EEDD5AF68113DD\ +2B7AAC39DAFB865A8B5800DA465F70D527E417E0D13A9A8A7DBBFA83D9FBEA23\ +7B518C604E73C4C5C34C1FE79E230C71133FE97EEB723E333E8D4272F973CDF4\ +0C361CCCB45D4803189CA3610B00F422C847E512CAFBFBFEB81912649A926494\ +6B748395CB6E96A79FF195D8520B2E60FB07AB5A5DC58D8D:\ +832F6080CEE1BEC955AADD3C785D1BFA311F2967EED12EDB:\ +C034E1AD1B590649 + +6A1275FBC6098126FE0D33265FCF81A0485776A0967763FF22B12231B34398D6\ +28D5AEA33BB989BAAF759BE8A07103FAACD7D68A7719E23295AA67B940285400\ +833D7E322D5A6F9350F2B289F67C25B86138CF29A2BEA8F5020D0087B02CD42F\ +BA68AD34A7C0908608A64F4B5F4A7EAEDECAE68D260AB92D172CD95FB7462631\ +57DD1679BFEC2741D5664BD8A80A1C95EDC6D9E35B040C7A38EE1D06B9BDA80C\ +FF8CE8555413DD1B40E377EBF76150F223CDEA9E74F2AC07CDC6E0426CAB2DB8\ +13C6014D4296F86ACC0C07734F55E4A5DEBB510C47B4C019D5E59960A7B3D5B8\ +7257839AA29E6AE1F9558FF072F2FE6D8FF672525BF2BC056B206C1D:\ +6651BD59D1DDCDFF52EA95DAFFCE663758BC46571E0CC3F2CA83986FBC2CDD79\ +45A1D0284AF73D371EAEF53C5A405A9944267F3DA755BF053EB94518ADE628E8\ +CA10A936FD747E64C48A83C40FEDEDDC5959735E031B41FF4422BA64EC906F14\ +256673CF4520AE76F10D910DAD129C270392471FFDB1CE601C53E9C032BAE528\ +F68BE2A553BBA36EF555D4A8D6D7F8F43EDD91AF6AEC19DB3FB8FA1F33701D67\ +82138F9D5F7FBC9170F50BD02AB0DE07A29B4A9C3CB2981DC251E5933C17942D\ +394DAD2784B7AEA3F0FF46D59DD919C7C2BB3D3D1B3CB541920F9624EDBECFA2\ +414B3E6A6EF69F83F20628C914F373E5D5AC68ABEA3E2AA8A5CF9D2D:\ +8B0E057E6B9953488C98A8292C7F87E0ECD574376C416AE2:\ +994DEE000EFC0A43 + +234D9E59F8C211DA83A8145EB1887725530805EEB27D19D77BCC951E6F8035A5\ +452C290ECF72C5E69E030824D0F1A2670A817B0B6C966A10261A64A6383571E8\ +BAC63BA9CB4D880A27C583BFAFF3FC5D373E0F0BDCB8E398F99021DD86F7FA92\ +DB3D4830F6A29DC7C52C1556AAC457FBB679EC2D8321DBEEEFAB900D7E02DA7A\ +2957F18D87DA97B683696CB6E3A3CDD12A5ABD32639DA7B1788349C98A05170C\ +ADE1957DD983BB109BDE21549A3C0EC290807DA2917A79D143B9F1C98C4D3F6D\ +57E38D03F3B2473EB15F5F318E30C33F67B0DF4F1C79F56CA1D52E2D77752C25\ +9F47E219F63151DA18A55DA0388653104DCCA9FE04B949A57FFCBBED59AE121C:\ +3A89A8A7DA09A31F0F6D222C293338527AEF97944C7862AC1001B2E26DD82860\ +8662E6AA71B3F24337C1233ACB49D633FD743D2B16ED5C429D4D0087DE42E6BA\ +949DDDB4BA562BA277D951936F7AA9CECDD02261E5F36043EAF97511B65867E9\ +65B2A5B2E8AF4DB5629C0B5E5F869DDA458E20A3DB4D34A4CE1B1642C791407D\ +83E3EA46DF87B5680F06CC1A0F97627163A54A6010A60F37E93A9A3EE9D97BCD\ +9561DDD12CAE952480ED2C4180E051652DDB00FEE1053F3E0B822D77DFB2D347\ +9197E0E8353A3C4EB4E21B594EC86A8758ED48B24BB2E1114EA64C5F2C001030\ +707A9896045EF2B48F8127EEBE2B76A32D698E39CB069C67B971C6BE57678CDB:\ +51F37FA4348F5FC1BD179FA259358A009E608B35AB363DA3:\ +2C5CC0EC6434D1E3 + +AC691B1AE64C871A70F6436E4E65CE0E10A692ED41B5FB07D35540C7E2D0CA6B\ +7DC54026782D70AAF08916CD340C5140DDA2E27F0CB93F804D15470B17C62E0C\ +5CDA2091C5706DEDF94F720EA7F76370F2EED8830C657B07766689750D30D0DC\ +AD8EFCADEA596113233FD328B0053A10486F13F3F2644386D4B177BBC70815E8\ +D2F847EAFDDD2ED9FE418231597C958E53DDF0B1EF8E801654CA95303CCD0ABA\ +7FB4DB4B34B199B7DB2F0727C89194F321353F842FC6AC5AD2F6ED982CE27FD8\ +5F8553265345BBFE00D316D7B6237010A93D1967D02C4391C1A10BCE8FDC45B3\ +2AEAA4A61BF99C6C3EEC6C7DC1E82B274A97F47513BB55C7604992F0FC211551\ +9D02162F:\ +FDA6F4772BD2BFCFFAC7CADCA4002590E2985E00C3AEAB56F76B4A3DFAC43926\ +7C22792D6DC8E05DCB7D2D79C553BB7BECBD330F4AA4DA20C26E1C173A6A931A\ +F7E98E4E9ABADA91FE3C4ED1E718A85283C47A289779B911E9A806499634C7BA\ +B246DE4F09EB3616C1C7D2C8B7498B2E57EA7500CC538FAB913F655C23ACC9A4\ +BDEBB2125113E4FA3A9B1B3A607AFABA5A6043487FE6681152BAB584157B282B\ +2293CC80CCB8DA5F8593016EEFDF77784A516569768368A94EAA9E6163CFE457\ +59C09173449013EA16CA4D4359AC9A383EF8A3A05FBA28F3A6C45F0F6BCC384F\ +FCA5D5FD83EC79E528AE29B0BEB5B32D7B6596FC092B141C831EDF5D41CA586E\ +8C952243:\ +CA7536E20BDE645FEA57A3BBEC79B7D744AF652A55998114:\ +5CB81DE076CD674D + +1C640B4A7984BDEA3F5F750C5F36EF29BE31864683A8773B4F7DEA9F892483F0\ +3C56426F2772EC33CBB90D2BADD731DF6CE09EE74578A4BE2D3E07FD2B71836C\ +82AC48B02465AC8EE4BB783DF66640C51D145FE7C297ECCD40BE49170F910BD3\ +BB0DE70DA38F71C53EFF59237A7337AF6B22CCE4C724C8BCC3891394F29D9446\ +144D1A26ABF6E04983C99653FD2B698AF15647F8F94304809BEAEA3A05381A35\ +994D5815B404D9F8CD10C7EE62BE99FC29E06F6D07851CD34964503BBB6169B9\ +1EF8AC411FA56B528C1C5D269884457998C4A6000525D7AE70D4426095037946\ +45C8AEA41BC793933836CA570CF75D9A5E9138B6907BCBE07C88D4C1BB1F588D\ +186BDFBC8D96D6F6:\ +E369F46021B17D34E30623D14F78526C89F54AAA7017447A7AE2BCD478C425D3\ +F54983E9FB0963F8AFA3673C3F2DB38B3AD8D0F73174AB9F649B3FDEB40AD561\ +74F289A7DABF99F976CEDFE11EA6B8B12F239DEB2DBBB8E829C9E8491C49D6A0\ +EF12AA0404A7957E8F67887BED1A559BA3DFB8ED758AA938F9AE86082D2CB769\ +02372455C129589B1ABDAFCC11C6E37E85F41BB5A1B5E7FAAB0653A6C370EF04\ +13AB4123061EA984F804AE41121D89C9E206B4D5836A8B145A599C0AE79A61F6\ +5CC01C8FEAC1D33A2D703AFD4D5F0E5B1634DE35BB79A0588A30BA04287C0DCF\ +8AD9E81891A70DA0970DD21DFABD2FEEE3D2EF6CF66B3FA87B0B10C6B92950C1\ +4733F5407540B52D:\ +AE1AC30A6AF3371429672219CC6D777FDDE1C1285446D5D7:\ +CA8B1934A27AA9FB + +43544DFA22889BE0247AC5A56049E26E7F606004B8D4BA3111A94FAD81F7B3FE\ +93D231CD1CE7658A26230C76F6CFD8CDAFFEA88ABB7264427CF63A3A3C4A9A6B\ +01FA3D56EE3F618A18CB4BA88A311B30EA55C2CEA8AD8DB65D564D5F5A58D9E4\ +12E82525E4185B5B4170172EA69B1C573C9F6A8156849BF2452DF82301E3DCE6\ +EF4DD2642968FC418D97FB04E25818C41EDA3D23DE5F91329A9819D88B3EB2CC\ +8037BC45C0D77F30E8248F946438FA9709A995E2EFAB9DA0F614E04ECE2A76A2\ +AD5991557630E2C1C04E1816CD08683B16C9564257C28FCF81D24341BC9C4443\ +090D43E98558FDA5850F1F76A1D150BD5F7284B55A971DDB2E934B05523600DE\ +7070EE002C3F4F34CBE5BEFE:\ +9A8E2F26D5E0ACCA216FF6BE29CCFF21D126717ACFE5796E72639AEE4856D043\ +A232F971970558D8606BBE267EC0CCBB584CA96792E01B522F51B4F0A3ECD77F\ +44B063407BEBC74B9A920743E2BC7D93AB3DB84DC20044F699E776D58A01F787\ +76F03F0C5A0F0F8878B6A32823D0E332AA030F64852BCE48A5509F2E37D86665\ +1BEADF1BED4DA0A0B02A3CFFF9C36F6F59256DD467335A60E9484220A2771DA2\ +29D23E12B5FDC2595BFDAD34F0B8DA138D69D820A6E1DAFBF89CF37E82D7008B\ +28D233801F3ACCE6F53CFE75AAB257AB707CDC9B6643CD4A2905A9454ADE457C\ +92D168B818D332FE749FBA4DF9A787A410C6E9F50B02F070786EDD812EF03058\ +F95BB542DCB16770BDE5B0BC:\ +621707897A8FF24C3E8E3C6DC8E7F06E7C9147F5FF6B05FD:\ +F5BFA58BFD2717D1 + +615D2D36A997D95EA3195335368D4E7E00324C9A6158C06E58730740E0818F2A\ +2FFE0B9A383754E22EDE3CBBFB7834F387CAC353C83A943104EF15254A468E55\ +140FD516EF90AE2707288D6F898638EE0103E6014EC6379D4829BB949EA2FAEB\ +498F0B67A06CF6BF7CDC46CD6ED7B10F2A18339568B7D66484EF669619782E2C\ +F8ADE1181CE2356942CD36758E44D11E9E2DDD54B16EEEB7FFEE6A18D46AE6BB\ +A1433D5B30EBAC173C028E8861E27249D764330FFC694BCE053DE44EF98D2BC2\ +7FB04676AEFA2FCEA016B37CB5F128063CA60BF40939F688B2796D01255C78EF\ +96506EBC1E7DE11AE466A8D2EBB135400A16A5C5D7DB80690D2636C0C912ADB9\ +8C27C65C8E59DA432FCFF17B013CCFF7:\ +F73A0035289E85D72C8D977E4EFAB3998F19F2B63B89E9FCAF26E7EA7733158F\ +931099AEC9539DD337EEE372597A61E4ECBFE61DEB55B5005E90B33D743801CB\ +1F1B5C99169DBDE75F8FF22410B6A2EF0EB097C79A3FB7ADD583D72D2C61800A\ +B2DD2632AB14A006CFC3F259ED96604DAB8FA77BA56E9569A839A6B0E58EF576\ +C46DF43A09704650FF9530A8E4D092DF1801B6E82F969E5E67F4EF03AE22D3C1\ +5C91756A465B7C636B51D175DC6A2DCD87715F78CBBDF7E22CE3652929860E94\ +A6B6EBB6D9188E15A13D3CDF3A5971F347A687481D68FAB9B6ADBCA4FD3BE8AA\ +B0D8399C2549AD6DA76917D49CB4BEBA4D12B6B5201272993D2164251E02B093\ +706C280A6C90E843C2F1754404A47373:\ +7D5C37E1A2450913AE41090DFA935AFFD4CA2FDEAFB49436:\ +B7BF5E2C46E32068 + +4BAFAB7E53594A75E17DA9B26F9602B1B2074E23C688D3EC32C345074BF3213D\ +F7B1D2F2639823C1FE8DA4DEB631E13DC2230CB9A39FD1A37F088A7DD154C664\ +28A0A16F0D833AF3F16F5A8A5154DB8047CE9E011C71D785AB755BACBD33CDCA\ +CD8B0708F2BC362BAFE5254640F9EE08C3F6C8992EBFE34B802374A34E97C9EB\ +9C5FEAEED35DC5E0EDA01DD818DB69BAA6D59AE8A9DA52E5A050EB9B6EA766A4\ +65AF2438DAD5587D10E414CCB59F6BBDE7E677A85920962B48C575DF4D89A820\ +AB8B02DB4042667FBA2861A495EFA045235E994650D286EC5ACF753608FB2410\ +158F5AE557A98501E94CE74987144536F5CA787AC064D8746B561E2185147AA1\ +84C376C69250CC12CFBAA2659E3D14DA0403F8C0:\ +9433395CA8E804CD7A181025AFCF050D5EE235E66493EE5AF8E88ADDFCED5651\ +A7A9430D2457C98B162E0C76EE05EA2FCCAFE2C1B3438640B564501408F6FAFC\ +4F6B995465052CB7FB108F6F94A088D648659BE9363EFDEB16FAF59E2AB6D47B\ +4272384651614B82A292C8A9512A144162E8F7814980F82845661C0C3CC88373\ +3B54C9A8A87A026C315F74A8419342C1DFF246128418FCDACC6C2EFB286DE745\ +0B8BB1B992563A5C9120A1FC70425CF48C7012CC282E3B81289EF335C628A46E\ +4D7FFC0E326462881DFC7D08B44D0061DAF58FED53D4FEB9FC899D34BCBDE304\ +2454981FDD354F159E98CBF530809B5B46C81A6F866142280610DFB21CC9791C\ +39095E8A7ACA7557C40A340C87B35E8D00DB4E41:\ +87B28DD21E1726A0AC57A9F243B232E3A46C6D064CA39253:\ +9D36D9BC1DBD0EC1 + +F6EA75879B0600B62F1300799896F7B424A4E2ACDCD8FE5EFEE417C773C9B09A\ +648F010F9CC695A3342715C6568C0AB6853FCDE462645C2D549BCD36673DA23E\ +8CBDF5AA302E10AE04A1C354B619D72993F0640D828AF8D04CBBB68B1325C1CC\ +28627EFC445DFB98E2D199CD250759AAD254B161AF3862F57D4457397E9D1E04\ +1E8EB5539360EE8FDBF73AB99C8294A6C6D09A663B4D86A63741AB55069C55CA\ +9D161561D7F97118455D4FE71EFF91017C50A1B2F8175A8D09CC6C3E4B51C5BF\ +2C49EAB03D9D2C01D36C5B507BD17054091C12B0E4C89A273478F6849DD16FDA\ +A06E2F54F615C64B0BAB4EF8A1C93DEA8BC43E0555D043BD79422450AAA64CCE\ +F24916C8687DC6B65901E58CD3A8F4F18CDF72D0BDEE7420:\ +D15BF53D4D44F0A18B70D12BE3C4A6DED44DB06F553740DBC07B327C28C24075\ +60DD7C913F5D73E582885786E4B454ADC40C156F75B7146B8A618A9BE43D6CE2\ +05126D72880E582F8384CCB928DDB371403F307108F3EF6DE85CAF538FAB2163\ +62409F99DCDCEF7A0CA8E1D9662240C193DE430EED6B5B15B8D3C2A90BB799C7\ +D37C7445C3994F727E438C9ACEEBE89D2F1449D0E83DB2523C063FA903F8A115\ +8FDC7CDD21D899A6C01B18A8D1E1E749A9E09F49BA5331914993B87FCBDBB43A\ +DD276789952B520EB6052DEDEBD3D91A22437365FF12A46FE9822AEFED416AC4\ +15BAD2C0848A11628D14794FBC83D1007F0E23449820290FD81DB2896EA62309\ +4B8F9B1F1E903279CFE34AAFB287573574CF65C19EE5B709:\ +E84CA677BB9563FC2965F57DF2F0D9B78FBAE62EAAF71224:\ +5F5077413611A4C7 + +1225D5D4FD1F49FF2239D496FF327DA3E2C528703414099FD1400A024608DE7B\ +78FCBB9741BE38101AAB6388E54100653AE15FEC668FBE9F9BBFB39C72484CF8\ +BA23151A6DC4FAAFB627F35CE91F1B2BE9F3B1E1DFF258C0CBBAC425F13A5606\ +7C0CCC297FA6BEA5B97272C716099E9784133732BC359F67A2BCE94E62C7A21D\ +CB03EFBD1B387A3D94CA245973ED31BB2EBE771F11D69BEF0C241AD339F7D719\ +B892D37597EE729830602FE685C9C55D8420CB3F4B6DB04BA14D5DAA6E979C0C\ +113270ABA4601B8B66B3C8FCC3D09FBA846FDB22F1827EB27EB65BECEFCC5E48\ +B75FC4023CA0934F71406633C0EDE28D644472A1EC3C218C081752F41F1FF796\ +57C513AE4694522B83B5C5D0E3F4F22A237654EBC5B64C1A032DE611:\ +93E4C7F2BDB46F448FA1C987D10DE2CFEC3B48BE384AA4931F05759A3F43FA7C\ +09930585F0D113273B2B0FC1350AB9615B852C2598F190108D6D2073E1009D92\ +30B0EDDD2AC6812E2EB3939969727FADE44763A83A585416CC2A3357BCBE8D7C\ +4285CD1A3C237B6EB2A31C73CF7B1C935FF9EC27D6DBFFE2D7D3DDB19F11678A\ +EA84A13FA19CB2A574FA324A841709A171F0AE6D1C661089EE817043A56295F7\ +34E69BB7AB06684896C308EDCA833B61A1E60C39CDB3E69955FF29F350CD6330\ +6FFF655AB0F842ACAD1480808E66F8EA32E722E325689D14F9F5D6A1370D1659\ +D54ECFC326647F5F860C9CEE7CA1E9D888C5B99786278755164B104F74BFE3AB\ +408683EDD67C5A9C6A0DD8266EBEBF4A249867DD3C9EB51FB2CAB9B2:\ +6532565097C11A19DABBE33579B118B3CDFCFC57AC9EF78C:\ +261FF08A8A234373 + +FCBF1E7B10B708FB50FEA0C3CDD48C283F47524160068710A1A13742221353B7\ +BE18919379C0D55464372643E16A0E6C0FB02159E627792F0BFB2DB290A99015\ +7006EED144F382E693C8C3B170E7FE2B19F9F79ECDC604427A45BD472D897798\ +3294DD36D081427D046AFDD637592CA150A9E0139CE6D3560BEE9853BCC96A1D\ +D8C7F194E59312EFA76895EB110417837D95417A636222BE47DD1D2DCDD13199\ +2D734BD3E67BCD7E6DCEC606060D9F8E264AE12C047F3339BCA9B44108D469B2\ +2F44DADCA49247EC2FA1C76C396737E40149AA535A1E7C05FCB1B8181D5AE8BC\ +DA411F616B307B19ABAFB36643322A803B1B46A477D0D1048625369CAC798BDC\ +937F8E726D59C635447B667F125E26303AFCB7DC0370160E6152E514EBFF9020:\ +63A887E0D27501AFBEE5A1ADC4DCA5443F9E4AFE1466D71666CB28A22F1D4CA0\ +913AAB49C08378CD41E89035FF15E4150992528AC15300E92C1F73CF6333AE3F\ +17898DDF031712F6A0CFA2147D435AA3A69496DB67FC1789C601AF00C16A025C\ +93F64F1EB7CED97D4E22079CD1A422E3212B55A8687D191C295FAB74DEE44A00\ +10AC51E167F080B4C0E1DDC6A26103FE61F02EB3F62BE3DEA3D9A056E46CB18F\ +154AB72DC93A9FA16C1372FDDC1CBF7850EB671440E1BC6B065B897ACEA27B15\ +0A26D135F0152EA998AB004B16E543C2E401B8C8F39F4089911D84E1D232D4FF\ +8E2614F0FADD57F8EA4B0AC90EBC7564A604128227B64BC534BE39B474056D88\ +46D24604172AD1FAB6AECA830B74DAE1FC6FCF931AC3F95E9C1FF325D6B65AFF:\ +4BDB2B06847394FCD4EB83F67D41F06B0F111956FF1244E7:\ +BA6E8680024B3FC2 + +3DECC0B1CED05031E8FD762217792EECCAAB16D2633BC19F54C8B61AF8EE9172\ +7F8E74D1AF880A72637326E1D78D85C72D8150864D04413FF83D7A2B0E3EF7CB\ +D9568D25E3ECCBCA57126EACEE14E35AFF3F052029A2E2570382E7E4219BE8E1\ +E30C0656320C3E4B5E4B2191C46E3C5FCE6450B766B258A89B0DC09A95F9E85E\ +1648189A2CDB5A999846E9EC8333782701131046E286D0459192D70279445A2B\ +591CA7D5AD1A95022D2B2627772AF2A6D009B8EB1E2E4E6CDDDE3E85033CBC7E\ +B61C6B77011BCB96C93970DC9A921BE397466E21D418DD5A4B3F596244758073\ +0677E3CB4671050B6768470F8F3CD9742E7B9269703B8227F63B37572AF7A60A\ +F37F6B3F53F3F3658B06D9B7FC860A294E47480DF9237B53885797C4CF580FC9\ +07BB188C:\ +043AD473EDC7463C7A8864B3E5DE8B0B8FBF700E7E5654BBDA0214B680488D20\ +B9F02D931A8DD953A5D22C9477DF8E99F1B55F863D96DD285BE49635364B165F\ +02E3BB45FEF18C8BE5EC665F96A36F4F2CF85AF35E70A6F6EA756398294842C2\ +AA9696EE6B7157A47D381E6503B7EDB56754485BEDFAA5F125EA50C2B7EF0024\ +EC62D0BEE490C516F1763EFFA23A2772E841540CEED0733C0B6BD66FF2D3E317\ +500BBA4E8DC019EEE025B47E62BB4FA2157A938BFD0F623C85DB379EC731CDDF\ +7E9F924DDFA3E6C5081ED6C6C88BE1FDD62611D66E3E019DF0A9B9671302225D\ +F0C5292E7686D82C422079B85676DA81DF752A389A51C2BC2BD177C46E753D8F\ +34FA038F6CFC3CE925C84A0894731DD3D188761B9A0F4112253388214BED7DB8\ +81730614:\ +2B77F833E806D416FB381A09A6D05116AC049FDA023A5E2B:\ +13D0606E5CDAF6F7 + +7BA7B59BAC0A8C726B383E52F11A995405835ED09DA1EBAA6BB0F208EDBA84F8\ +B0C6A2EE46B817B6CE76A06CED89A0B01BD355DF6448735EE9FB73B2C7F8A9F0\ +388908546B539E51A7A06D6C53E5CDA9BF46575B28B92DEBA62685B0B5FCB55E\ +4395EA38CC14070F51EBAA40F67E7F4FD754BC2072FC11AFCC1C3F5159AC9135\ +AB07005E77017FF4428F375A0F6EC9E9E1E6BE66DDB4C2BEFD1F4DB489236B3F\ +C2AD63165C2599147C021E54010297BC746A4D2933866F963A0C9A81958458F5\ +9E14BA4756B71FAF702B9812C4AD2E5B04490C0EAFEE74CD95F1052FF260BE45\ +CEA022A0C0E524A6F2C9CB8054A59702D02606EAFEDB322E001D5251A81BA1CE\ +7B323F6F663A4C079F2E3887604581CAD699E754E5743D0D40B0F24CC3B0924D\ +AEB7103FBA938F4D:\ +14A45FFCFCEE25886B7067F1A4FE029AE21E7343CA9DB9242ADEA2B33221A514\ +6096808C4B623F24669D5D65B9BA4BC063920C08E51123D01F6CCB00A42984E1\ +CC8A7B408544686E7FC1E79EAA64FFBA12A012DE56C9FADA55F56FE79726D3DD\ +DDFE51E1549785F40DB5C2D5F6D2C49F9EC87B13675E2D1C0A6846EA97D8ED65\ +FEC59D38EA10FC038AA1BACA09A3998C2DCF2351B5B56AA136064C4FE0644161\ +DF09C41564186E2AE3A25095176C0AC163BB28C55181B6AF8396C21004BB0054\ +9161608CE44BCFF29B72C2F22A005E2B7D71213BC8B7417083661CECCB82FB7B\ +D615B0D93B40A09ED2830ECBF94ECBD6C25C3289B6A79DF46A164B19767BFDF5\ +DAEBADA5C5B9C04B8B288154009D52D21025531FDBE5CCC80CD79BCD0CBA21F9\ +98A05B516C8CE336:\ +EDD9BC31C48BA0254D32D297D7BF8E7253CA57041665D5B7:\ +A86D049A6B161AD6 + +3AC25EE64B98F11977CCF9947978F5EB570D35F0CA9DFE2742ECCC7CE11FD09C\ +6E921011EBC965161A0B932650545953168AD660BDCF4F88618060347CB9B411\ +4885EBEB0593B79DC00D358E6088B312D764FBC4A90BC3B31CF5B96EAAE2491F\ +DE168941CE3BA9BED3A5448681750FA7CC7294ECCD1CCD6A7C3F4BC106922055\ +933645B8E298ADE83C9697EDB48F2CBBDB42FD70F6CB98B38E1EBC3F72DD77A8\ +4188422A5A3DF5BDC31F59B30BCA323492B4F253C04766C7AC09B64289651584\ +94845B4D3BD13F36C549D030248E7FD19CC102DF2696C403AF58E5DF0854802F\ +B1646921BD8F38AE62A594CE32AA0221C521AE4153CA6B0178DFBC0B96F0131B\ +B4BAD83CA4199C6A9F30867D036CED549CEF76BE7C62F94F15DA0ABCD28514CD\ +DC0D6955E162779BD148339D:\ +46119F1EEE4A5F47BD814261A0C6BD218943EE4DADA6362BFAEEAF4D01FB8D6A\ +D8BB2B20C16E2B8E73E495BEBEF3C935E1FF49B00EBBE6F364F38B3AA3E628AD\ +214D95EECC6932DD3916FF8758169091EB1E24226501D94C67FB0C8A69DA693D\ +659A988484BD5BF3E6C41B00840838E5BBDCABD61868A3B2701F7CE9A6BF71DA\ +44CFA116A46B378489F41B3FB4D004C79FB5C21321BB65ED5F9BAE24C5B558B7\ +642D46DD14C2B8C9DD04F68EF91A703C45454B5C12AFCB66E4DE5E649614F09A\ +BAA1D3D1D75BBA2AC6871EE1DE4577A37D535653C2D24C6ACF1DF665E297C135\ +F70522477649C624E7997BC3ED8B99220E675CC9B1F2CD94979BC9B393E7A186\ +9A6BBA8CF74CE041940566B5200682B19CFD85065EBE6CC64F34DBC92A9E7A44\ +85C81D4C64975E73391AD83B:\ +48AB74AB57DE668C6FD29F1C98B730381E0763913F7E19A6:\ +7277C0208A8BFA09 + +4C44EBCD81E742D2B08DC7DBCC22411E92F57D9FA9AC3C7EE93C8D176A62FE2F\ +C7FAC96B77F98AA3776F7A974B5854F229C778DBAA0F244F5767A42077A7E5A4\ +A5BD3BD8A393C379D9C810DA5B6C97CEAA750F638500194499D439BAB2EEAC83\ +CE6A51BC1246A4DEA5BEFEF0A90BEA5B818778CC249F68D1507630D2E993BF15\ +4907A5C40F8CB0FD2BF88F5A59F6ADF0F1F5CE9DAA04EA4EBE16F041E321DBC7\ +7ECE9FA6799D097F903BE1B108E153A941CA0C8F1E02CB8130D6BD8C281FF8B3\ +D9BA7ECBF10FFE42EC66EC90A12A8A7506A929101E0F952373BCFB3B41ADF70B\ +A556D82B190E986AB1A8716161F7E8D33AB449F7E8D898D8F0AE1266437AE290\ +B23E36677657102FD6B0C3041F573E19234983202571413ED54B2F2D2610B9BF\ +69240D8CF6040B3ED4026A992FE89CD2:\ +4478B18390CAE6D3E435808A3324BCE26AC469E04D9BD81C9C462DD1CC631EF2\ +5881F29D211EAC5079644721461D55FD70806BE9CF8EDC8E9BE7D9580CAEDAA1\ +A03E6B63165575E4898C0A85DD8A12ABD09431A037EDEB6549E6FA92424C76F5\ +035FE5A7AB183A28A212A678C97C53D95080AF4C5170CD454CB11BB5C57C7581\ +394441DD647DE9F24E3962BC1CF9D011FB14515BD452D93BF16297E0931DC007\ +2CF1269E33DC40FEA1FDAF43D33E4B46F009A8E0DC2FFC0E70754CCF3AF4579E\ +1251175D2E29CA7AA9535CB9084EA6651DEDE9918A6F845108B759628F74BF0A\ +3EA029FC3AF80B0A087CE9923CD0B1D181E8661BB55F2D3A8503B5E03FA24595\ +776760C3592796879442B5CC2696633EA8D35566CCBB532B667B2A09BE6A6CC7\ +931364B42712CF6DAE481499702077C0:\ +DDF2257D6C7E3735A8656AA5FF8FF253FF3E2D83385492E8:\ +3FEE5005E1B52CF7 + +8C59975C6947091366941557DE83CBB2CEB8B4E9439B9CD7981676CC209BE56C\ +D9D6A37F334E0E83CC2F94AE5041A62328A0400F910815AB90D135F72278C97C\ +2228B8D17574FE907BF9FE1847CCC0E125AD7CDF9361EE9EDE30211077E6F7D2\ +2DF72FC3441DD8E548A3E668F67E7340496E8080B60129F77ACE77B86920E553\ +C7630765620A4BE0DDD04DB1D233A61F207BF5BA5F8EE378D48D60F8CCA73742\ +9C7DCCD0AD14B3C27552DEA11682781742B5275D689DC52B80F99D743B1860C2\ +D6897F6F32CD203C5D6FAE1EBA0DBD0DBB68EE455B82BA9EE46B0F427CE1356D\ +9581AEEF491373A02073CEBE04B22A97540188C226540F048C49376B1BD2C3CD\ +60D90B27B66907ABE96B9F3BCB324265383BE6F9B4FDA7CC4EA5BB119D2B25BC\ +A8B191D0AC899839E95827826AD0F4A9A2C90913:\ +2D4AB476FD236B6561A1A91D2C2A1F57493E1060DAA19F4A633A2857B07FCAD5\ +34443C557AEB8C25AF0B6DAEC2C47BB0F12192C6CCB7A03F99D840403384A879\ +832A97D7557F87328FD58F103EBCE3B826187C3D879B1F3D80CF08F41AED6612\ +7CC9B9784E53F8610364E16A587EBEC13E22ECE24BE3F9F3CBD6095430B381A8\ +B62838D439B1D74F9AF503C06375BC7E30D639CBFB4F6175E520FEE2BD2F0470\ +DAF914AA94137E90408B48B17FDC69FED073017CCF16C56014F531D343D6A960\ +CF09053CAF6FB9E15257D40AA29610CF644830C0CA5671B0836F877AFCD0E06A\ +2A437F299C3CD31837D719E8B370B96BEEEA44547606383B6418A2C8BAE9CA76\ +742E1C5885477B7E718996B3B17D74BFEBB87292518DDBB349209AA7C421E3EB\ +7FE93E9197E671426F8AF63AD7C60829334D962E:\ +182A5086C289C129D13D2DF876858C0B56779A9DF2BCB89C:\ +EE531FD00382D1E2 + +7155EB9E3EFD5AE2DA9B60C2F00364B00C002215AFD91E3BC564D9E436BAE0E5\ +EEDF8C93C0F8C72BF35E22A8B9D4700487BE870527CEA56391CC80F2E848C14C\ +C24A0FFBE4D743C256064B96DC3451E4F93C1B79081A2501A597509FDA1A2E9D\ +C02CCB49F1DC2F0623F3A56972BF3AA21D4EEC2D3072395BDCE99F909B611903\ +188904BF24EAB921E27E061C75C40937EFA66647AA0BBF9A2A8C088F08F497C2\ +E2CB9839FDB1B0D68652391418A2CD664718BA93336F5511CFA9504D92CA14A4\ +59FAA90C5FD724BF8F616C6BA695F75B361865154EE6AE0A2C7A801BB051CEC6\ +92B2704212A1DC65423299209A959B1A75758404DB8D889BB6261B444310ED9E\ +11D95C1C0A138272F19AD025995AB8F44729FF6BAE3D025856360C1286DC586E\ +0B64E898A658330E6B18D127DD8E13696DFD750A14EFB724:\ +2E7FAC33AB17984A53797887E665A5040D329732815B9047516DBA272092D7F7\ +07C9659D7AEE0C9487F1A44D2BAE2C1DAD15E3A4D7CA317C9F562739031D50ED\ +6391D67083C15432920D35A66EC7AF77A293B3B83F46E905AE05512864006A9B\ +AD7F3A317B9322F0F19492291E88EAD6D494D6A6C6BDFC7719109669E40B542B\ +313B4BE2A65D495C25AB42A034CE10BCDF8567DA3044E9C040B905AD5C6E5FD3\ +E7974B420108F839042946A0297B0FEEBCE5173CA8F99E877FBC8CAEFB26BFE0\ +452E997C7B60507B5F18561308770B0559A86C7F789A179C05A78DC5ECD1E702\ +6ACB510AC672D53EF6A077F99AC3D3564EBE697928C156A94C5C4CD59DD5002A\ +8ADA3C81B6190A0CC13F423BD7A494A98C84ADF56748103C4AE0748558AC7F1E\ +0CD0DD29A513102292A900B9E1498DA77E9ED1C65091B6A8:\ +9C0AF3A096ADA3E92633F7BB7B2FF15C94F3EAB3BFFA83B3:\ +53A6552D82EF95DE + +5DC9AC7086EBEDDF3AB0FEE8129617831CCB2192EBD42CA4F5196E4CB5506986\ +0D68D4EC183FD284E471CF6E9361445EDA907BBAD25164F0839EC3D2CCC2865F\ +E14CF7387F3F14A85E8EF447ECB55D3605D65CCCB6258385819A916324616A8C\ +57FDE027F7F3C8A591C22C83D3F337F699C21CA5A301F469695865EAA89D6D26\ +8D5CAA2B3CAB311F179E5254C1CDA4E8A21284EFDCBE49CD117AC990ABEDE4C0\ +DA999912F62B1094BBBE37EA4B5D904D8C4692F387D55D1F87A72D597878D17C\ +B9188AF62C313E8548C8CD16735D92F5C1866F2139EB2453B91A1C9EFEEFFAE3\ +6DD3F1B81E35F2186A63CEF19EEDDFA74B6BC90094DFD555B7527A654741C9A7\ +EF45EE962D1FB5FA7CDC9285D657C9E43E1B0164F64CA2A9735F1B48AD06ED06\ +6A7491BBB21C67321DECF31CE027835ECF76D296BA2F842AD4A450C4:\ +30EADD3110B2E6603EF5248E340C7FB693550FB0EA21C01F1DC1D2F35CFE1802\ +5FB1C96CAF5C0E5F22A6C5813C81EDA92D0582A3AFE68F4B9AFC7C9CA0CE4DF7\ +30D392C9B7F51B5D19EC73FF8FE1BBA520747EA1318AA126FB7FD94F700D08FA\ +C59F7EDE8DB6016C308767B0040D5F85272EA1F9183F5A4E62959A0A3E43F6ED\ +30C367A3A7F9B0C650832CB78842ECA78E72C707B7ED0405459E550AD6ACC8D9\ +009342C86328E69BE238AFDAD8462580DCDA1340C88E93A777ABF14D8A5A4798\ +125C9B8776237AED3D4902A21FC8E54A1D02F46B11ADAEEA85FD0274F39647ED\ +9F1C6825FC393729C0AD88706D0A0B1503951FB6AD606C6F13A8EA546EA5E4E2\ +877319E3A692E482002E50A1FCF8F7AEC1C289BEB26D69FF203961D64A973D3C\ +93455543CA3267B0F9C671A1773F1AAF1B7452FFCF474A1EA17B1316:\ +9D23110F8F59D9F55823EB31C933B55A8EA284B0AEFF654E:\ +0164755CBAF55AC7 + +9FA8622118B9AF70E0DA09BDAFF78886B3C49CF6FD6F27A7378C72EC153328F3\ +DEB71BB1E8B27A0670D847F4EBBA1166A4A0A43C9E83F5E4A80577A7FC217324\ +F5528023A87E6F030425FA4B328D60BD821BF03FB719F994F3E65756E1123469\ +8312B65C5965A386DC05B0098A7B69A9997811DCD28299EDA2E6F27FBFCAB280\ +FAF0A1EC84A8A6A57392F03D3F721B35951FC6949F67979FB2799E7F30B2129A\ +2A51D7C2F77F2AAB347A07F82DBF869F5EBA4DB0C12AB55627F92D7BA48088B1\ +D4913629BEC1410AB7CB63F5E63192D9B128C08C39ACFA8895A59202F2464D6F\ +AF26065440C8F6A53DF4ED4845BF04BE313E4CDD887C5AFDEC7725C4E4D8935E\ +41E9E5F68CDAEDFA7B18D8CD6DF8E7C2BD87F2607E61C4425FDF0DFA85D610DC\ +B9BD2B3147A1B7598BAED49BC0D59954CF47CCC878A8060C735DEC2FA0C738D6:\ +09E0D1CF073CA78918D504CF0D24199DDABB278EF99B34D0C3393D7DE02CED88\ +7BA0B4D3E185CF0BEE92FFD9F534CD186BCF917DE09432A48C1CB720D4EA8CEC\ +9BC90F949DD226BBC372AD3630B7A4DCDE75812816C56E7935918D14BA1E3658\ +4FE7D268791A36CA5E82EACB6B4C9BE622DA475D8226557D2402FAF7D738A141\ +1BED25D60FA5B3F9AE500ED047B1391ECFBA8D7653F93C75F30398AF955C4F1C\ +6D2FA44DBABE0D96EE7EDAE84408F33E462B41240588A0C1C477F67B2A325B54\ +1CFDE246A8B85B06DBB568354D89FDB193D490DFB925C9B7AA4FB98C71DAC643\ +6BCA02A645EF076DE340AC4E4F138602FEBF29FF55C10D024A0F424DD1E06615\ +FAC83A2A89B62249656DFAE27BA505EF0AC4F30A69A0EEA3C4352A95D40AA3A5\ +7147350F5873FDF12EB8BB74DD27CCD898EAAC4E4D4D0DBCF488F0B089738B23:\ +191E940A45F962BC4FAAC5E1BC5059F1C3C0FA0915AD1679:\ +3D6557C0235861CB + +9C468511DCE7310072F9DECA8CEF6A14C446F4B0156CA225461D1768D2750A5E\ +A9F208247B9F3E531766D40D74AD03E4705AF84D00F27559B4BE48C2D054F842\ +E7D81EA3D167C0EB6D4C5717A5BABE03748E29DEA88CAA3822F6B7602D60E583\ +85B6FA3929A14A14012F7C904C25870C4FD9ABBC95BEC25EFAE71BA1C0385A1B\ +7693A5C63E2D79D4EC32DF572EADED07DA55D8202176E9B99A9780145493DBF6\ +D8347159D84008E6D84AF0D73BC1A783BD9F71F9F06ADDC1CEE6A46826B72B1E\ +F695BFB253B28144B14BEE5CFB85507AC733E96C0CDEA44AB8612B08656D4143\ +FDC190348A15586DEA60EC95F87CE0E1B5A3322A15784F1F4D1CDC5E778CFFA8\ +A1258E042CA7AE34AED94F7993A49B37EE7C35127D786C47AEA6B43D4A744B8F\ +81AE7AA1361255A6E9CFCCCA4480C437978826A10C3647EE546EDDADAF0156F2\ +D4569D32:\ +42EDEB6FF33F92559D7CB43E1CB8F3D48C45D04FD6D11CAEE0D1585431E59B09\ +3DCEA6B6C959B6353563BF66E0918B66459EC33AE16BC409787DD400CC170E7F\ +BF13AC75E2BE17AB84D316ABC829459E5E193E1D4FADDF55DD8A7D5F6672D670\ +44B14A5508F6D34AAFC78C78A0E49CD7D4F4D281A9589DD8C3CADE623E90D03B\ +ED78D6C322DFF058A5E3BBA8410E3E7C3D0B9A7F8D0BF28D00867D32443240C0\ +0304E9B5BF0D5189B018B80A3C5D9A8377D9E3ABD833444C4CDB4989A84C6449\ +302FCD2C97EA218AFADDEA255BEA2D448835A5D4169A59ED5E59FD886218CE2A\ +27D83E6EE813BD77067A972C75A7136854A6078CC19E81AD345B36E5D51A7AE5\ +BC60EDF2996508984DDBA1CFE5B64A87F723753172E7B7EF22D374822D982D83\ +B064F5F6295A5672E31E7C6CFB21CD31FE7C96246BC315613489997E2A5B3E5A\ +93B60D15:\ +31C7F37AA0A1AB4FB908B47F03CDCB302815DE0720A4AE99:\ +EDDC65C8A343E51C + +B158FB5A3C15E554B00797A1B7E10A5333C2D3A0887D0D71F2CD147A0B945DBE\ +9B7A7579DE16E55D01E760F3CB95136D0150DB2559872EE12B26697EBE6EE9C0\ +60AEC6BA15E30882D82BB28E86C24BCEB33824F3277AD43FA4D343FB33317338\ +A3B0ED7D7BA3697F2FE6474F9A8124D4057A59A511DDE033A17F819A3B9D5DC0\ +7478F49DF0271843493D81A68C26A8E4482910BB86C6DB4CBD0EFDC6CE7565BD\ +1550F794A19C851E72BA7CA0297D0B06F0E605F376303122B09A70A7139A135B\ +F18D1840D4EEEB713F4FD1EE730F1F1782C749E598EFEDC49704278311A356AF\ +8243ED1E65D294824FFB5E9C9128D8D26761996C51F8DDA5BB17FB9ACB815194\ +B29C1E64897E23859C5226265C4B56FEBE32AF265F9C2A423583459395C7936F\ +304EC59838189EAAC9103C179C78C386FE67863989898CDC6B85FA1D0ECE8283\ +A58043CA30023848:\ +4F4BC6E672383981A7D27F0A3C9EDDD29E0698E2B9FB414EA316324C7968D51C\ +2F717387695A256DE8CE4A3B8AA83776DB6A57FAE0D95CF0BBC4350735032A4A\ +15B7AC93E199C49782575F968F1D349C0F6508A42902305AAEB10DEECA944864\ +62840A2AFF37B5584A6F762E99CAA6ED12D59D8BE4EB71C2F28181544DDDB550\ +C532398752C14DEB2E130BE59ECAA2602A95BBFCBB2C499BBF7C4C5B6436D5DF\ +EEE9808020906E8EE60E001E9928E5A73992D9A3749540AA387E55AC9B266C1A\ +8A468F73EB25B6DC9D662B650367211597403E2C8E4E0B1F3D3B175EDC7DDC6F\ +CE63E79CA565F7629DF985C06F99BA5ABE27B7C85BDBA9CA00C394F896ACEC0F\ +8B09BDD10AD0E9C4244092F50ADC183E0E0C600DDBB228DE3F28DE96B45CE8FF\ +728E9B928593235206F98FD15548F99E7DCDA988924DB6D00A8BD9204162B2C8\ +B36EB3C147C5644C:\ +46FE912C13C289A8AFD5154E6607C221A44A1AD98C4F6D2D:\ +C7F32A4E0B63DB4C + +4A1982707F10B83BCF502FD556351C83C4A56AF83ABAD85DA79B9817FCA8B669\ +1EC7BC38192F93838A4259B2179438A4F0B8FF65CB02468870A135E6E582F7DA\ +63E50CC4268B03BD8FB2C2DE222142BE4F1E2DFDC715AA1DCA197CE3756C92E2\ +218889B8B48CED73C1E83D4BF4B924AC6EDC39178FACC616EE7D303F4225D81D\ +0B4C6952E470ED3FBD7D91B919F03B938319167A0FEDA38B0A842B8474692026\ +EDA147E8573EC41C74256443D2540A01CF6739D120D03F365190D481C2594D56\ +69D98EEF2EF22BA4F6D3907F95F3A77DC0BCE340DBF09F6CFF7D82320D814F7C\ +B1F0B7A6E236E39186CAE234322B6D9D749DF3316CB492F90DAB3C86E3C1D226\ +932221DA62D93EC65D1FA7A17B9981D89044F7BBFDB04531DC6822C6FFCE98CB\ +4AD845EE647832BBD9C7ECA6961247279505B7341329C131FC19F08B8606A8C8\ +5A8DA80CC69348F8BA34A7BB:\ +CA89689CB39EFC596DBE373A82F3B267EA515134292D49C50509A4F633468F21\ +29137958FE78B26F6B689B160F49FFAF20DD39E0CD26456797E0C2A252C37E36\ +6D75933093821C939225455A51EA70217E5D67D62683E81FDD46E6933419C3FE\ +204598C57E2F3A814D5E908A645F8BF8249DD74A2EB535946E786D22C4067943\ +41F2BD50FA087AE97371A0AC653C6ABF665595ECB7A6260F3BA931F282F35B13\ +ABEF5C69BA2BE90DF2743020C02DA8EF873CFF5AC911E54DCA33EF4B821318F2\ +A0E11B06433E5735F7377953E2438BF8B2699B76800E9BEA31BA385E8CB80A4D\ +3E13CF611AFD1BCA4ABAAB1AC0417255A99A7B45DE9152582F51E7579461657A\ +168159F2BE071DF0E57F9DE527328DFE87CC909C670C04DB2B469DA69A954A1E\ +064C5914A3A6AB9B01FC80660E4257A90CD293E625203C97A28C35CC651F732A\ +AE167BC88A2FC593917976D2:\ +F96E066A5C72C480B8742FBFB78ECF0E87F539F1F3BCE4DE:\ +EE9B92CBC273579D + +2667F91D5E9F8F2C96D4233314F0CFBA7C538A15E695624183FCF895EC76867C\ +97C0D4635BDA8629C48743BA2D472D284672868216AF08240E35E61CD3E952F5\ +686EFE572ABEC5BB07CA5A2F5E1BB5DDBD920985756D81CD27960AF2B794A1EA\ +C32198BAFFB7EAFA9E4A125277C4C6931CE8CDDB030E884E90A48A59CF15F1D9\ +318A86697BC2CC7DEDCE842F71C6B4064E2F911D3C94DFE2F58F00188BA01054\ +FB3CFE5D93E82A71869A01CA5E15F34DDA22473ECFE577557687A7CA0FA9EBC4\ +2D2F25F13ADB8800EC3477EE176BCC89301F429E25D86BA8256C2AF18E9C68C3\ +7BD4A8FF1871BB834BCFFF968C5BE3696ACD2634106E9D53D3BA0DFCEFBB2B4D\ +8C42CA6168F03DAEA7960D5306E25EE81F453E268E0D4980F878448C7FFE24E6\ +C7F181DF6E0118FB091119CD4279E5F082EA4B031B0A7A1D3E52987F705EB24B\ +3C2F6DA806DF672274BFE45561B12900:\ +3136CC2F6BEAA4974DCA793E03DABA0CBE0AD100954FADCA66F829F1A0293FAC\ +96B001237E53084F6631816247622A835D3DC178A4C7EA87B51E141BA7F2128B\ +66903238E376EBCEAAFA6A8385FAAC87C39C7208A7D5DD985B3578A73817473F\ +C0166DC2C8CB55DD2C32F02A586F684486DBE321184AD2C7B7B59FF3DB4A04AB\ +4C5695D52C9F66D99C2EE8D4CA5D6116412E0E50EE800827EAD6B6B0786C669A\ +79DEC09732654D6F8C4847911AE24CAFE778B79754332E0F1991F34F4393EFB8\ +0309389FC409663C655BD22225E76D97A49407ABB0C4A30D26CA9B8C2A85C4DD\ +1CBC54FCD9987DB2F160EA600648A808438E08A690E136D58DD44A0886C3E28C\ +0AB82400E3744C1E571FD82982287BA7B9D6892DBE605C82372856E55B8E506B\ +AAAA0AB88EA4D2E29CCD9A0BBDC2BDD45796E80087481B6A11F4DDBD32FAF64A\ +8EFABB8F056C47DDFD110C0806E8C224:\ +7DC34DA1B3AFE3579FA7418BF69F20D7F1EAE634CB1E6755:\ +C23C44FD0BFAEA4E + +121173FB02C48D6DD5D46BA28BF7A1F336CA04377B920A3CC209238301D4DF48\ +44136DCFFFD09D78C23F1CCF59EC22E203B0DEFC678DCEE424448B88D6ECD00C\ +87F2EFA7ED12AC742AD2ABB85A4EEC20963039CD7D12072806B39AC212CE4550\ +520AE46ADE97D8292FFD4ECEF0105C806DD6C033C09E85BB853BE01B27A6538D\ +6268E3F78D5FE685166F7EB4886636E621C777A6B2A42B64106B5C5EE966BB04\ +8C1D29B0D89175D91F4F57742D95E85F52C2BF93AD9C8F2FDAC45A8A126CCC2C\ +56E14C5B13401F7B411EF92EB66D1D8B5F7CCCA0A6F9A46C4E2F3B574B276061\ +08E863427CD03F9491EA5F30C4313AF84B660EEB2FCFAD5CD771D0B29178E85F\ +35E7D3DA61F439D2998A4B5D319B824639323FB6F736C90B985CC6058A084E5A\ +C85F34B3D6685F4D5161712A56B3533722EBB1237AFB6232A02B5107ECFCE801\ +90B9EA1771CCC6E7DF7A12EB99E9130AA454A631:\ +13C1FCE97C6C4698F94D0F6EB90FA1C468A1AE1CE7BCA7D7DE2ACD91F2C012D2\ +6E00DA3640FACBEBA9BE29F2A63AAFE646816D93F0E1647FE0667BC4DD311376\ +27114B0F63D342C39C432C2B32193AFC84FBCFEE87372460345FD757D4D83C51\ +EB364631677ED6A46985E2C56D114833685C088D3CD60C1D698853B388F6B891\ +62302BA5D9D017C438F9670DB6871127B2FDBA1A0CF6EB765A44721365408A8D\ +A30ADB097EB24EE0C3560E3918D9D92E8E7E690F563823694836DBF18BCD809B\ +9548F33E42740F68408667D7E4B2312C1AA566DA6A442B5EBE11BD92D6DA1600\ +C105C09891B68FFF45CB83F4DB26DFC0EBF51695CEEE8B31D8B976866395247D\ +94F158CF3AE621C32E40EA208532D90608D6C805365FCC55FAF4C72EB8F3F254\ +4718CD59B88A4682D0A42E645CF015E14751028111723861EF6BCC99D13737EE\ +FC99922FC4B16A6D07DB278C67A585CA55484E1D:\ +82D1CEAB43D9EF707E12862E4BBF3CFA4EDC35E9C845035D:\ +4E71D4162FC6C69F + +9417290C8343D14BB905E866113A856BA9823645226C88406BF80AF3FD18A831\ +844466E8734047FD4A97990BD8FF8FE90DEC55AB372A93EAE25FD098D3A23128\ +8095E8E3383BFC3402B6424BB86A1B17BFF93177381C54043D297D3F9389FA87\ +55D8B41713EFC12EC553D55BBDA231010EAFAD2150909E04782E962B231C1207\ +DF918A4079B7DE2ABE356B214DDCAC516803F077D3128024C409103937988578\ +65937B8A5ADDE65AEE0BDEFC1E7F008F06D6332DFF02CE0B1C9027C02C471EFC\ +BBE78C14308CE073F69F0E436734146DD930210AB072E7A10CC9D1F87DA29F17\ +1B6D93613F631147C110F7628B6FB55DE1F67979CD04FDABE70EBB34183D04A1\ +F7BCDEF0527B4F116708FCC0B7B04F9BDF741CC67A4CA5983326A6B48F0C0EF9\ +6AC6ADC57516049B7E4038424568472EBE1A778B62B324CCAF1D7D40C7EFE4ED\ +8E594F5E57F737BF7889111762FC2B8509B60284C3696AB5:\ +9820B0B24D15FA03E40B521FB67C043D1E55AB938687A2168D04035B9A216169\ +D1D8CEDED2C86586C67DFF31F401B3D15CE4E287560DB0747E28F86C97FF21E9\ +27E32FA3D2FEB5DD33A1B739D3A2B7CE06473557DE2EE164794EF23570D96EE3\ +911DE796554865162ADA1D2B9D24ABACA986028277223B10AC4FC84210FE8A58\ +6479B8D410A7E4CBA24843352CCAF119DA31D4310DA471DB2A42078BAEA4DA68\ +FA0A41399BADD34036B9670BA9EF43B39F786A29C23E19E4F60D119CE2F9C9F1\ +7DC1091EFC85DCA051B095933ED9375E6DCF6DD60356EEB5B9DDBA04761A412B\ +E475D5AB927CA00C3B01F136A15C13EB2E1349CC8EF8B4A2E27254B9E2A0C05C\ +20B809B8FD72DBC1DE9ADDFB8D987D0FB31D95C8104F656D3C4DBF1B75B33ED7\ +98C594785172767B00C7699455B3CF3331D19E47C29C52AC844D8A5B90642C6F\ +3D478A84C8DE4FDEFC1D6B421E3938E2C7352A059F69ACC0:\ +0F5AAFDC62CF013302133CDB2658C362D683120239C9B73B:\ +CB628A161D5BB00E + +77D4ED2A5321D0C218C203D971CB425FC74497708B5E8034741B79D022B2E54D\ +7C7B196C6DFB1B5FDC1C8A18DE787672D47AAEE01C267518E693BD02D1FA7B95\ +42626DE007AA524A8B82F339882625843D67402FEDE26C15099F8F52D03F2299\ +23ECA62A43FBFF8E672316899DB117B1313FA9562F0F60598CB85EF42F7218D8\ +19AF309DE57A6B262F79E4593FFEA910C7BF7015A4D3033D8EDDA1C102323139\ +9AEBF65CBFD9D43ACBB9C28B58381AACF7B25182D20B4C7BE9A2C1E7FD026F62\ +80C72F806912EF26CC559BD64ADABCB6F57F1EEA44D99EEF62B80B5AC08B1A40\ +4B9DC1F11A2401C93F5713C88F9BF1864FDFAC23199F6591EB0C1E3F152DA4A1\ +DCD830ADD9567595A55505A7237D245585BE2F802FC483C81BF895CB7EE0A27A\ +8D3E46AAFC0F57A71EED36107BEF7658EDAE3093559B81E9C6DF08DC7DA87BB7\ +E17421DF412612CEAA7BEFED5342E5FA9EAABD52ED6FDCB3272CBDA5:\ +FDFEF44290CB510F15B987C0F6F2D37BA5BD3CB19B21C0D75BF6048174D64B8D\ +1930F1D4B13B024A60A9C1AA39D6CA247F2D4C6310AB01C45AFB6748D93B5C35\ +3EAE103E6559E17DECF28C11C4DE59223D102785BF95485430A3D3C6E3425C83\ +EE602716B990624C2CDB40BD0444EAA313B5574778AFF53BE5CC7AD505EE4A66\ +9B7F77DEC4E1BE571635B444C5C38DB46F9673EB6883E99E918554FF0DE64C19\ +25C1E7784D36B899B1F5151F7E3D5488CAC0937CB6C130141EBDD3467AC3FEA4\ +BC940DDC22434F1B1883C1A983FB59E53C44410FC99F1B977CE4671D41543638\ +52630A2887BB80B3E2F8F42C5BB81D15BE85A07FD24E7E8DB66F7FEDCBE28D61\ +26E2124DFEC6F61B584FA0312304C5DEB510146C753EB7CE6BDB95115D024A05\ +002499358D62C998F48DBCAAC7B1BFC42F450F407E838A40B5CAB429C75D30E4\ +5A0A8B767F1D7F1C1A2C1E71389AB6E42FD0F969CB7FCE517FDD5E8E:\ +913BBA8D3FB9A5A7D58F616A6A921C4644819277965087A7:\ +B637FBB2CC939539 + +5E379056DA626CE62D94AAAC8996988A6840CCB2963CB2EBC79C681F55F8A754\ +0B6C602671856561F0FE623B362CD303EB124359581E3BD0763BB4DB2EE6B71F\ +9C5F747BAD3A3D12618D5A510BB3F8C3AA30F49579B24E88A26C7EDC31F8BE74\ +6D1452583611A01E0364E704B64DAA5C9F5A0CA698A1A24FD2EED1B133042905\ +F28DEF9241F05F7F391A67B29999BC003CE9A488A5DBB111056520F9BF6D612C\ +163B62F4CD122AD9DF51F346F9D4EBBE6FA470ED444DE596ECAF10042FCF06E5\ +FEDC5A6BBBAE01F34FE529279DA999B086669094D97CA5C1F2F7DA853158AA76\ +AD9BA9F64CD920F85E4686158C27EC5F49A07F34B893C5A8F3CE5C2D407D2137\ +12A157DFD0B03DED3BD39B6A79FC81C6875D0E10F4E2E90D337AC0C54120E6F5\ +E5CBA808F824517B7E78254058DA6D8B0FD014160D65188164B76FC928C6CE50\ +FB912F098B943D67CC523C76603D44D256FA0825DD8AEB0937E2533B4FD2881E:\ +97AF2D0FC9B2E50F2C08941BD25CC5AC703F44EC717C3DE880C6459EFD4BB6F6\ +2C9ACF35CD425A68500BDEF9069026944E1F45F4E841615B6961DB2D9D80C31A\ +C4A6160EAC57F09DD1F44E0E3C4FDC5CD38685F0F01F6CC2210F5E83B10A5C9F\ +308FA922DDD7946E1D44208CF6992DA34906CB0AA37D42BC0A4F16B8282C8033\ +6CFEDE8BCFBD5878CC6B0D7810E99D5AE81934EBC338FCE4C03156C86FDAD10F\ +48A10E64DA1FACD9B79DBA7A650BA4B1B7D82D2619D15AAB2D0C9CE8CA361A16\ +244C246AECDAA8C3AA3A90E03CCC1D39FEE72509A3396FE6A8E60A93A534FC22\ +A758B1FA5E0189ED70E88E868C53C95613A9DCBD6D7C3DEC488618A4F4259B91\ +55691C094C4F5B920FCEF09592A7A786D1A28D5B1582519042E8A14477DE6FAB\ +54CD88626B8AE99D3875888932F9C66D7E710DBFDF56BC435F5ACF80003E21B6\ +B1ACFBE3CBB45DB9F36AE2E0B99CD574D11D2E7D007640802CAB0A73DF42844A:\ +E5A12BB39909DFA7BB14C3287A8050A764425C616C5AA1AD:\ +F4B8C64D45C46352 + +0E3633046E8C46E483E0AABD132578BDD9D5CBA67743BCBAF7B4DF08380035DB\ +2FC67A0DD2360C698088C274039EDE20BBC315CA5ABCB31894E620328D11E58F\ +F72DBBC972765C17D7894CAEF1E702BC2273315B799CB60B10E0E56D4E1DFA2F\ +FD7CE1CC42DF14E1418269C539D3FDF23F35D124F6966E982EC4ADBF8D1CA639\ +2C7CA25161EBA77CC54FC7EA02ABB40B40D34086B4BB4A13CCEEC89797F97615\ +8F4C4BD979648C67F3757A29F84C4D8D49C1A066E89AB2EE182430840BE258B6\ +E56948FF0B37EB6AAB0289ED63C71C4FA9594E4EA93D288E4BFFB9DADE004FED\ +BEA3BC3B1CFE8A8D994A3C35508FB635A79ADAA6EDE65E9B674ADB305625104E\ +263F7E4B2D8E9651B820BD74EC718BE43C6AEF4B52C0A1751360F4172D585907\ +AA79EE213F54796686D504B1DFE55DC7CEF59F4B422318BC8670D412D2597E6A\ +1BA6E12AE843ECC64049CCA3967100A0C132E5806AEED14D6CAAA96C951F1AA1\ +C6EF715A:\ +DF660A38FAECF3B338A9480E35AEF4E9D098AB643B1067B9F8D84AE5E4D1CA47\ +1797D326570A993B12949A35314E261E9D59195EF31E352317D2C63BE60FEB56\ +81FC86A447D26E09C8FB5A9CFD83F085536921BFBE6F92F9F9CB274AD0F97117\ +4E970F6B717E5F24686CA068653785697A5D690F4443773900526A780AEBF836\ +C56AE7BDED3E57E4D9A69FE12B0349C2026023D4AAD5808B69097D9AC3CC451A\ +902E95DEDA9E5E0F2426A1E2FF13249F1FCFDA34B4525674AAD772292158FB9F\ +D4A5B522314127CCBF2933382E4A126FFF48205D0F7EA1EF4813C34D5BF2B445\ +6D9565FEA30EDCC30F2D1165B629443C3C5DBE802F5214DD6FE458C745932B58\ +9CDA0813AAA6427C709B46C45D764885854693D9F04B364B308AB6E7EE15394B\ +34899D04E50B5BEDEE9E431C83643EAB7ED6F91180F9D64F334067F5B77AB88D\ +10F1093065BA0C0655E5AB0B88D9F60E20887C1F85CAA902678C177EE67AED87\ +B3B0F1A2:\ +C7A36EACDF6E22781E61F131273155506F778BC0B5DBE974:\ +377210AD91C659B5 + +CD3546634E4EBEBB21CB70D51E0E4ACE02B49928135B71D23616AEAEB26466BE\ +DDED0D8695C997D874355345AC10A9AD6CCB84BC61B9032757CBE2A9DB83B956\ +03D166990DA301671BD4C8385242CE21CE9CFA1F10671BBBC5833A4D013B5A44\ +515120E29E8E777EBDE51F289F8B9C29461E56F77EDEF58D833C7AC5C2B6F2A1\ +D6F7147EDD2D4916C2BBE51076D549BEB7E2D39EC96E8DD7BA14311086A3A8F2\ +8F697BD50E66E7FE51142D318BD6CAFAB3D40D8173AEC1F0C6CF518D40F34640\ +550D8D2B1A4722CAA02FB05FFC11AD77CFA42C83362F084639EDA36CC7B9011B\ +F3BF7A5820D465ADFA42A12E67B01ECF5EEB441BA68B10221F56FB177C21FF61\ +3B4DC732F384644609D9FD963911A6BE6DC3BDC782A0380A3F3CC49BAA540EE3\ +0B0809329AB9F7E9E6AF0D6DA78BEA036507F8B5C360FA12EF10D24567761107\ +C1CE99262FD64A1E11D5089125A8D70FA36A291F0BD7107565B39A421B66591B\ +7C415E10BF33E82C:\ +60C6C6F5FD0D60F2FE85B68151630FB20DB5126FB9B893139BAB6D4ADD721E66\ +B68F5DA7D09760F95DC5374E47C0A604E9C43D06F2C7DBAD6593FC160CB55C81\ +7BAB7A1633325BA3C23A2FE7BA0218408E8FA13AB5F7165879B9C9FBABF56224\ +56A72FA7F4447B8E6BF6096E6ECE793693DAC517E539E81CBA254B73D79851C8\ +F4FF3AF3D97B5237240B33AB538704C6DFB7887DB1EA49DC18057E8E98DCED10\ +D1CDD199EC91552F63D7E0B8270B9E4DC1EC174BD294463F6E2939461BFC8BEF\ +F2900EC92CBAD64B6AC273874A89B8FDEFE4D60B8982934EB9297765CC51380C\ +803AACED9BAE5CD76D08BD4CEE2CB0D1DE2CF00872120BEF37036DDBD3A2BD4E\ +54E26D383EB39C2CAD52437C31191406FC69A59FB1534624640DB35A685FE24B\ +79FDB4C092D3BB2D823C508FEA2CA0E97B1FE431F7C65850A15B153DBE7D4C22\ +CFDF60437B3C9D383278CD814CFB08A4DDC98AB529883FC139270FA32EF14A47\ +C9303DC5BEA28168:\ +465AD62084182C4E4B46F597C49B0EF00F6FF40BC98E03E3:\ +90C4BA4499805CC0 + +C78F74D057C2CD4BDFEF207FA11D425C46B48681194461266EDA582D7811CCC9\ +DC54C5A7038D35938EC37A2C38253B4A0A23B3358DD9E62A2ACDFC8171B9EC53\ +AFE95D45AB21428F00E03F3AF50184E5138B0D69546FBE02D5DDD760CA367EE4\ +C6AD61F94B21B0DF1D9993B8BBE873F77D5C5F868AEC81106ACBCE2E391D84EC\ +2374122C48324CB4731CA41CC715FEBD36BE839DFC22265347439B3272AF6325\ +17DBADBE1A232737703E763CBE5B2873413FE2A04E22282E375981A0D6DDD5CC\ +7E446CE4EB5ED6989A5AD028CB7E0D03499B7D61D8EB85DDC6A53F7A455A77CB\ +0C930B6B7A620A312A7F978BB5AF8791A2F5CB116A000EDB70CA0B47459746D9\ +4958DC0376B7CDA39510CC9658AE927630B635C38837B6BE3ED31935C1B66E69\ +1368054F61F7EC304D7E408387B0DA71FA571B18056E0256BA89167C169993D4\ +5F46FAF8ABFA9921310E262A1FD45DDF62909089848C74269EE8D7AAD250792A\ +403DE8F48B38924BA0266E2F:\ +B4FB5DC3284EBCDBC0104B29B6D110EE04DA689C1C53DDE963BB9820E3792F72\ +797B9CEA9DDFDAE25597D91AEC5C4A8FD9625A3E08B44630092ECC995A7BDDC7\ +ECECD070276153F785F0BFB51FF801FA375B5B0EAB6F4C8577FAB96B33F87729\ +D4F99646B51EF2096FAD2510045A5CDDD525298AA4EDB95DC36F19537E6F9C3B\ +D61DBBC4312B96AA8A53A6328934A526FF6DFE51E6C841D6BD417D307FF1925F\ +C27E701BFCF44372C2FEA7EB66A93FBD70A985D3D4F16417329663DA0EDFFD4D\ +7EB209CE4AA435D24D91616F4DDEE729D1658110BAC4EF271CDE886CB0556F85\ +2E89B0F070A75F41A2B4C19785FC1B2506A6001CC7FF39C0FB2E095B8E3C66D4\ +BA9B2FB6064EA4202F366BBDBC73A5079FB9218ABB11E63CAA1B05F1B3798F45\ +58D270E8616AED4E2B45CC79AB1E2FED02D82F88018B621764D24FC1197B6F65\ +FAD59476A81E1DB2A1A6E0E94B5325208ADF4F9DE15066F4FEABA6524BF2D567\ +B75B8457B1EC8284453370F6:\ +88091BA332085DC1451D98A8E5BFDDC9CABB29D761D3ACAB:\ +E98559E21C907103 + +727AFBEF333BDC8E5D25C882792C12E5829635F89950FD18C8F34F4B1A27F405\ +1270DC484B64AADA5AE9DDDFEB0BB8829844844DC02BE2D305905257815ADDAC\ +34CFEB18571A4D930AF2754F13AFE034831E53F8E4968BB799E9FDE8CF514804\ +A9571261F87467BCE23545D3858145508C81CD91E311FEA8482C03C0BEC7688E\ +AA15BB61474020C14B54B4424D20E4474E886527000DF5B8489C99C8E4D49C69\ +F8D2D1292AEC62CEFB7B4D84D1CB0702DB88B51F709B087C0D5D9581EACE9EB4\ +43D5C6C12AFD8120AD777B233442449C9210E4D69A5D01D663D6CAF1C0DAB7B7\ +62996143DF15D9F1B53B5972E2EF5B042F872BBC0B5BD8447BA1ECBFCD27F759\ +DA6A96C9B0EF0B99059D3894B76EE98781B23FDD52B288305BB48D7D5848F10D\ +CD82B418E63313056039A97B765AC220C1035331F655BF468E868B0C8B1FB3B1\ +0F6D474EBE0E2FCB59A37F3D8E9890596FCF7652CFEF3FC4277C3193226D99E3\ +DCE54CB05A3C90A594092C43F90F2739:\ +18333A60E2C7502E1E12B956277B5166890876617152C075C532269CB3BDC3A3\ +17D92E862FB7F4864B8AE4FC33F04DF6DEEEF266B58298223424732CC70B29BD\ +70967F8661013BCF606109D49C7F69E6A890EF80B3762C32EE76B10004A63093\ +9EC9FB3EF69BA4EF05BE0DE8F1841320584362667DF600FF85465F3F530777D3\ +E2B61A352D700C1A74B6D569A6BACF6A86A278A2B7C2F0F32FF5DB364CABB07B\ +716F39BA658D1C12BDE3D85CDCF7D9CC949DB7827DC3DE0132A4B0127D96076B\ +76770E838436C680B2DFD8FB71D40B2976645DF4B93BBC3FB33C80D60FBBE0CE\ +2DBABA36EC24C350F14C8042F8DADCD410D3642121DB95790898A08847BA9AAB\ +4864D7B77123836AA5781124BA1447CC87DDDB18242311A4FBD21612B1F9B7FE\ +BF831CE1EB068076E0B4CE29313B32EA8260EB0D626CC5C4891D4F42A71CB339\ +935525742EA2058CDE9897F28122F43E229398825DC0B5327875E334A9DF114C\ +AC531B235026C211F81C6DCD6C5C5813:\ +BA14CD753C30AD563AE217A001919404D1201EC9E60A7910:\ +71BF1C99162D23DD + +F28C92127196B168979D38CB588EC92F1E61F31402111A7C87CB1C0811951F06\ +8308247AB6052EE03971FEDA999FA8BEB94C31BA1E82DB9088E1435B631EC040\ +39B53E9222A3BF014AD308CE587AD481486A1270A58CBC2A72F5B975AB81D1A6\ +B0233CD64B20A24769057E163A231DD54E33751E1289398A4532FA2727E8A6AC\ +8BEE48D500C87311084723E6BBDBAF3265333C8D69DE71D6E43B6AE1A4847959\ +91C0C57BD55D5C0B6F05237D9EA41722399C4B7ABA5864F9414D8A7311FE5945\ +FC534745C68576F18A5E6A2F0A435968788894EC6F1430E45E698EFBBB7AA5BD\ +7C4A0FB40938B7C77CFCB2FB27838748DB6EEB356782C393AABD3F5380B556B4\ +786D1C8E01BE5B02E5BF4AD724302436F5E3BA69D5D9C463AB4ADABAA84E2AD9\ +7D2C2329EBF4429CBF4025AF3698430701063743A4AF9FCFCFFA9BE5C2D651FB\ +B9F243B64678A9AA308D2F6B5EDDD9C43810515E7CAD9E8A6ECBDDCFE0325785\ +8D948F1346E7600918731B1ED2AF7CD6343532B7:\ +C26079BD4967EE47AF00242430A6B84A36DCF190DF2808D3E7722ECC684E58E8\ +12F476F357EC5C73770FD5A06940C35E2F89ECD20E39FB931D4E024767F0F88F\ +12FB67885DAA739ABD57891761796B0DCA6CD8BE0CBB4C1C8AB5DC0D9C8EA94A\ +ED98E5F5CFF5BE15936B55ED6CC6D337D27F141E2068059D40D2A393A2FDA709\ +81067FD283945A6E01A90A1D9DC8C25A555F878A46C3F3FE73F895A0D06C877D\ +4FA4125C469BEDE4A38B80C88084028435DACE330E1DA4A2E52EB92F06EF17BD\ +AE79CD492A7A07A8F383EFCD60281E5CE04B14CCFC1F977C63E7286AA690DEDA\ +C273387876B6CDA430836033DEE7D000EEC58078E106395C37C5020F4C2ADDDF\ +0CC7361BB187D5CECA597BF1E0CBF2AD5AC91D4659C315EC039A80307E569355\ +3216519314D9981ED5AF611F2D82DA3A358FD027414B44EFAC31042439C8B4EE\ +3E4C0455769C8640C0CBD752195A0D4B7EBC80CF881C15BD7F41C96EAB2D6A9E\ +5F2EA83B0DD67FD52C6B50A516828059DF50CD40:\ +9BD657917B8CCC9B5279D3117DD99B6B676C983FB92C5E7D:\ +9048DAE814ECB6DB + +7D0F500100462BE796798CD42A5A133BC9128650616B9E72CCE8CB52343FF8CC\ +205F1FD9478C6D8FE84E421C03BFE852806D05A4BCC3645EFAE0D0F357ACDD85\ +E950CB794527092676AD8CB1EAE3E52F8EEAF4EA80A2F94B70F95CD10C42F786\ +7D1F0CE740394CDC9C8E8A4A5841751ECCFB3ECEB635D3E2E050851826E663FC\ +390A16C5A421F9BD71653867272AA649CDC77264F41DFA666087CD5E6DC9CEEC\ +DDF77104E78299B4B4159A7476CF833C2E85106B9706D9AC1538E834270F9E09\ +B05A36F42EC62B4F79CCCBC4CA44ADCEE91DA2231B39F70ED8DC2B47B36FD2A2\ +562934F7349C65278F3F7DCC612DE1B9A0D14478975EB2B9FFA495A82FBFCB52\ +66B5C757856C8EABF1A1C8E5E2049A8DB546C87AB17ED8830B1224A94E1406FA\ +7D5E4CFDF70AF4594297C82B2005C53C08098DAC78EFFCB69CB3B321922A247A\ +E861E87AC0D32EC8274AC771CEC33DEF58AC9EF56A32484AFA10E354AEB72F12\ +7E01138B3C4205AEB6D0DB89BC0BBF38985E74871819458D:\ +8BF353E8349D0711C4A0CE2D2ADE28DD23F9372DCE7FB9EBFB177DA3ACB8BB18\ +A97889538E51FBB8E835D9048066CDF72C65F355137AA7EA30E8945896FEF268\ +CE2F875815EE76F6CC48495D01FE7F8D4E57936133E65212EF4B16013B1BC019\ +72547B4D4DDA809E2E61CFA97300B1B09BC2B08F3E44515F756D3E073180B516\ +064F9C5C5CA7A4C3F6EBC5B9A76953151A8FB1403E64BA82B1308061AFBD5574\ +B90AA7D28A59DE2FB7CFE050E2D6F3384A3405C8EC56BA2D477320C33334184F\ +7C2CE6E2F95B1C465356E0599D88A3B9CADC4FFF6CFD1B0DA788167381A4A291\ +DED18CB3A4A33C289EC637FE574379E55D09807761538E0D80A538513D78D778\ +B4F7AD386E2F5F96CEB5706BC22476D3FE49B907B4C0B6437976919D8C1DF55F\ +CB97F5B142154F4B9F4457058862E583A42B5833732D2332D4809BC61AAC43B6\ +62CCE9FBEECE99D27E6D674C7DD17318E8855425D025A65803FEA4D70D0E294E\ +227DB9D5C8ADACC98A068E6C1770BE4AC94D94B519233168:\ +1FA041BB9AE7CB1FF1080589BC676B2D134181CF5CE95307:\ +BAD8E5E34E447ED9 + +8D29FA50F355F8E9812FD5B1727F14CB3059A1FCC348F0021E0AEA8718EF066A\ +EF2998B6DB2D9B2E0FC25D900B8BD51A577CB08EBB0F8D5420F924947E7951AA\ +CBE6A5778F6F1BE32EBB90D0FF0E68958C485742ED9605476AA7619CD555346A\ +3FBF3594FA73EFBF74670C9766570138D9CCC82A76F8F386E10BEE6021A13C89\ +CED94B919001E050E115356E62F5D7C5E1164AF2AA1A508823B8DE6C628C675E\ +BC2C95BBB5C2DA8E107D2478B453EC4D5E57EF15015DA8B9AED441927B032BB9\ +B4E9F4C8D60FF7FF039AB7339B782FF51E67EAC602C4081CEB86E27FAF5AE452\ +F31BDA99D3AD4BEA0CE6DE369586E4F98ACE39E9A2EA3A9EB9AEDFBC92062723\ +FF93B653CBE6142E3BD3014E589BC2E56226043EC635B6C114626859C59D1070\ +007C69C1B9B46E69B38CB0157FD723DD1B0BDE08F8F09C9279A287538304CC04\ +F8FA528E637F5E152B9953E5A8C10CC1220835F69FB5E33BC2CAB0B7DD625BD1\ +730C1E2C8DA73EBE769146CF98070D5B667939836E5731E31BD57CDC:\ +4E1996018990AFEEB4CAB81B90F1E1545C6D2130ABE4B302FD286840898F9ACE\ +8AA5B9E7B260D4910A4F247197F7320CD253459B7DC631CC65FD6C10092B6620\ +403DA2DBE8B43C8C8EAB90333A10456FE2C53CD753915B5E77015E44F1CF43FB\ +1743E1F29D4B178CA404D823CCFF9DC7B10DFCE1B2A73A0039EB3465C4E88F8A\ +FA02233C3C54BF464D8727481C38653AD6131C351678ECC08AF3683D97898B4A\ +EFBF60472AA3AA6D602F5C276C43DCEE815232199BB71A199382F5ED029389FF\ +2CDDA22B2A8954E91C17CD5D78B0D8FFA0EE627A423EF726F566BE44C81B7011\ +1F3B98F6555EE999FCD37E2010A7F7B497CDCE086F950FBD6705204AADE1F870\ +4C5AB27B769D02B438BD6C9AE66730D4CE7170F456A7C76F1FDBAE8439CDD323\ +0A7CE630F52D2FFDB31C505690BE6C2361A0B6774C758F57486D9014EE857A3B\ +A5BC1D9CBD6B40D24B55907DE5CFE361DF28C3549B5D236F204CEB6CD664B6E1\ +4D1AF0413D03D586C0DA1BBE56A1484DE06C91011956CADA5D2DB68D:\ +9ABCE6D84309211902FF54CDDBBC31BB25193A763DA562A1:\ +C9750AC233CF3FF3 + +F6BCE4F7C6AC3457474D4B5013ECFE114A58F6B85C6B104CB0BCC2389BBDCF5D\ +618441A9C0705488714912B3F6B12A15D3198A3E41760A577020280B7B6137F5\ +707CA945A0E2E0F6C14731DCF9A3179F02AB0AEFF7F054C018BF0C6412C7AFA9\ +1D856EF576C70D6A35F1515367E5899D9647C31ACB9F0EFE2D2A67FB5117CC1E\ +F7609EF69E9C9C3C55BB36002A96EDD2FB7449B5A704EB8DB814EE982CC2C5F9\ +65C38E6B151DA2F586F2140DCBB24AC96F29BB34A3AF1EC8A441EE4C701BC9D0\ +66D2DA71A869D5301FFC426E24812C29A4B1727659136D3B0721F4842D18C350\ +5E2FB31FC88835ECCB6682F9B83BF9A2D4E5D2F42102D80092FECB017E823C1A\ +BD8056D07D254815EE3E96DB094DBCF36561EA49F1AE928362E4C6DA05E71478\ +BB118F27C1CEFEA4F2AC510F3240E50AEE5BCEF9F1422B624AA53099081A9473\ +0FAB191E1CA71A560E61DE365EF3783E212E8FE11A4C9266F8F8F6542C7702B6\ +04488921420DF1E20BD832274A25AC410F86B58BB713B3DA022EF3F62ED2FD93:\ +C9875BC3D4BF3C2DB51911DDAEE617B69E77BBCBE26F307E136DCDA3F396AF93\ +8C12E1AB3892B4F6E1882376DB37192E2354DD269F3B9ACA70FB41991A71E12B\ +F3B0F5FE2D9C290EA1E514CCDFE05567B6DBED2057CD24BA5C218DFB45060279\ +BF466F53E7B72CD0D1904DE6F5C7DD5AD6577BFBF4E31F0B3BEC549456D31B5C\ +392B021831F81703901561047E4055D305BDAE4028D86DA2F69C51CDDAA67D33\ +C9CA14A8C6B169DF04ECF51C3E8BD33DB3A28B1292AEEB582691F4EE6CCCDD52\ +99CE4DCA4A31BD5DC8DFCE32AD19C38CB335B387C8341FE5A039D55652D462A2\ +ECAEBB0E8D3071E8A7F05E515F42DAAE6168FF097ECF99E505847672874D3287\ +738C8C97232B4FBDA9F1D10066C0C597A5796C770AA281417C390847566DF5D7\ +C9B6EB74D28739C3DBD75178B4972B08F090D5CAB0165B8F8FBF321D84BBD178\ +5F1BDC303F950008ADBC15B6752B3CC648AFAB4D5A24A70243F11584D97EAEEB\ +5A02E52EFA110CC9297154E2994078BB9D160341AE68CF52BD4702DE135A8E96:\ +68FC9C0059B999569EEB2258B4E190E97E1F5B35D899873D:\ +97C48E84CE8B42EB + +99003587F17DCD76B0ABCDBAEF378EE36D275EE2AB6DC61889052AA97EE06A8B\ +6B30C10E3936661222CFA985BA181646AA9316962C7CB83D84012C8110B34D0C\ +366064F662964153A2D4332C7BAC76A3E6BA7147BB0014CFE7158A1EBCDD5318\ +5096FA6585306E97555AEC33E2745275D4B00423F8EA4E4BA2CD4F848D3B4D9F\ +0F65023298AF2A855EAB8D60EF35A46C7308AB9CE16FABB20B2212900133E15A\ +D3AE639FF5F81CF212D8204AA09AC7824C6538DFE715B55E0C46DD75C1A48F78\ +86E22CAD48C38FDD3F80E0E159FB2997687F734B56B0C920C34B544EB81D8B19\ +F3CEC5827A0ED9DFCC952827F9A24E35AB6FB199A3B6381D2E7995F6431233FA\ +40CBB6915B5BD853A03E6885B077D8D10191D56E53E4113F1D88D90532ACE444\ +4314D74FEB56C6B2BDD6EF93D7E6B4224487EC068D59B6972F2AAEC5F0488F10\ +1D603A659D80FBE556EEFD0A1780FBAB3163EF1D03689ED3BE2AE1761492F0EE\ +A4DE741978B64C0F45668DC6DC1ACCE3D39875E18EB33DC5D01ED3F6A94C9914\ +982A19AE:\ +D7FCC6158E5B203214E7F2F90BEFED9408BB56569670EB7142F02434ED3BF652\ +112AB4AB32CB7689EDDCBF5C97D3A6F3D7E198C66A05774D1E69428500C24A3C\ +03B9C39F94896CC0FD6BE69E37C6D4244007EB55CB8EA40F0990234EF042A82F\ +A0F8028C7950073DC316850AD928122BEC8D810769AF5E1F35B9A7CA9F16AC46\ +65B8AA7EF70DC7F8FF874BB2240220FB2AE6CB7BD2ECC2E913A7E0C064EDCA49\ +17E588EEA69A13CB0CFEA09F4EDB366D22F6414FEB060C62C75F6DF41F4742ED\ +5F204343B39ACB58E115CAD56D2666D870BCE34B0A7796309C8583897FF62512\ +8E2DD5D7B98980EC06B086CAA4F3B6D4E4C2739E341016B58488103BB298CFE6\ +0D0F29A75E77E22D869F22BDBA2AD9EBBE96AEAFEB73C1EA50116248891151A4\ +EE6BA9C9A081D391F4D763DA00F14DDBF1E15C41D87009C6F313931BFFE51633\ +7C43C8A11F957B2954ED68F34B385FBF46AA8D200ED5DEBA8531F125FF2EF2A7\ +D94A661BC1D89A8E9A1A9BFE715A3D95F117547E91E175857F95BB83CC49DFB8\ +60120A74:\ +606807F4D893898C22936B09472EA44C4D86A8F22A863F23:\ +1EEF5BFFF8F70233 + +4AFB9076339A137B25D7D07486C971A75E66C024A563FB24DD9E89E0B5CE1278\ +C2CB378621E173AE9C667CBFA8FD7AA6B8497CBCECDEA7BE4041D192FC61B431\ +1923264246E2AC8285761D32FACBC520B0A2C7F0D6984325BD51604FDF0DB5FF\ +B1DBBE903C43A25728C5EB7EB98ED51784FB66A12D04DEC4514F8E7DFF5C87E9\ +9832192DC7BA3D429EB116426C0640F6BF82ACE1ACE11B5ED96C88A320EE5C29\ +CF5C6956CAA8C2A90854A2A467FE471E2D1968FA88241E1F130BDFD1695D8CEC\ +1B93803A3DC37824DBF9BE5685A35A33BFD60F099E10E6A5393001CE7C45D5AB\ +369DDF162BF602F7462106681204C7D52585176A20010A0D5C2C23514AD5DDF0\ +A6C4E5899B189376AC53C5CC2B7A87AEB8A3248A8514EF044FE4E6185AC96B55\ +F6E88A40912ECCA21EA1EC328D7CA3F0FE5963B1B7A73A2800181943151BBE39\ +161EAE78BBFA3397331549E7184EB04B34F35B6ADEAC72C196FCBA68F98FFD50\ +2B62964C805CDB34DDD4E57DDBA1D6AAE8006679A9DC8B0594C5B76C14E25177\ +D874EE25ACCA9191:\ +CF532173EECA015F6AABDA36A4311A11BFBA0E31F82FED5FF503C5910F3755AC\ +5A41D34E7C546AF0175CE1C9C43F78E14067359222868275F142D8967308B5C5\ +2274E2C223162356F83228522DBE91E45DAE0B41DA640ADADF73D9BB1B167486\ +26418072A4E9E952CB60D746C4BE433B185BE7572CABD8378B47DAE8D0A68D70\ +43CCCAA4D6671FF25FF1EA737FFA5D40EE6C4580F016E6FAE1DE15D421D3FDA7\ +EEBE50096E70291E5773C04F38125D28E55DAD0ACEA9F8092519F1B27B384527\ +ED7E4F530D77FB2AB4A17044B64D7040DF6E31221EA3C8E0450CC247C0D3D8F4\ +25587B0816195C090B4F9E5E5FFB06533713B52A7FB24A1422B43BA970183082\ +FA416D0B25A0F5B27348300241B97743DCCFB7A1A8AAD8DA837312FC078D5431\ +EFE3AC24CB8570A76A0A9FAF84687A83DF24E88CA3BBF15A375A3057AA60145D\ +2A622A9061FD1A714CBD0BE8720F1BCA985F6E77652152E3D3B62DB9E0AD8564\ +457312427014AAD9CB60CE37CD5F576DD6C6BBC60E53F4676210AF86BB20BB20\ +B03462CE1FD5C726:\ +9F53C60932FB8AF55FEEAF79B451A18867199258BB881CD0:\ +75B68C251C5B0DEC + +D92EEA40EEFFB04585F6ED202DBC5D660EEC1BAA52E2968A8CEF6EA2C03B7176\ +793E3FB4A59CF61E29AD72CC90EC049860FED7C0BB07F1EAE0DF101C41ABE8B8\ +CB5AFC63BBD98D5E84CAD4682E03FB0735C7AA0E4DFC105F12EA3F9B4C799D27\ +47576249841C2EAA26B232FC8047BC2F972EF0FEC0C70B5C41824E8F9D43E8A4\ +B1ECDDBA69826BF99384D3CDF75A6A137199DDA67BA48C223214AFB844244755\ +F0E560933F76D154E2B9659D5904F9867E37B5045D5E0E5D64E6E23EEADAE96E\ +0815ECCB1BE57E56FB49EE7AC399478A62335986AA94BDE631937310C9589B93\ +300A94B10598478732A65EEEAE87243B5111D854C4D11F6FBA956D96FFCC5286\ +FB1197A4C374B1B21B21767D6FB5DE19B351A6917E8A08151DC184149EE46214\ +90E4723A2D203787BADB7D721602D00C0FDB429368E3A2B4436528A14EA0A138\ +29367D91F75F156CE2A777DABEAD8E723CE2BDD8BE6B00468052ECE459C47181\ +E51368BDA4878DBE034445CA2BBF210CDABDA7D681B1949B21750B5A4C904483\ +7DF2D75D0E20D7F9BDE01035:\ +792E449C773073AC251764612F18A018CEC05E08663B55E3AC25E21078D53865\ +B20D4215DCFA3B0550805CB7652954560B8262441586701EC27E7EC79A59D9A6\ +903ADCA809DB48F2054C92096C685E50B5F42118F0DC133B9FB94CD3DAED452C\ +C592C25C30253CBEDD8498A911F214E07B956A074B9E36B3A263C6A156FC3383\ +6850014D49BD618E0F0CA52E30E1B628B4E3F7C7D68AC98B37DC54E6A2E7C304\ +72EFC0EE3E032BECFE660B50B88CDB968E220CF067122355263595BEE9819528\ +D558D06A04B55255899F0A3A704DFDFF4D49789FE55CD1EE96594AB571EB06A2\ +687277396847B14DC9CDB9262F808C2593A1124C7C473DEE26BC0880C26B267F\ +CA7A6F0D9810A2EAE7E412DBF804E4B3A543500100154FD58AD42509DE3F495F\ +D11593E9A7762AE20D0D25A2E3367A028E6224658F042ACDA555EF61E2AA03C8\ +B28FABC26BFE099897179645213A317FA2A01889B5A0E73185C0D902823B5588\ +78CC2C6B49F54D992A00BCB1E0FE975C04CC2A6257C9C21B4C34390D16CB6BD8\ +05E1DFCF337B485F66C56B47:\ +E5364A9AAF1931704A704A65B9836806DBF218AEDC852176:\ +5BDF21C0893E2C63 + +5E49C42B83923D159A0302BC310DC0552AD04CEE3563193EE8614EFC6382AA8C\ +86EF1376091C86AD82C7C98F6C034014A3037FA9451676B1C0FACD4CEC91785B\ +1D437305384241E8C7B5E479220150F9E1A48C3E045477273FE224E541C32937\ +4EAE0680CE64C6A370A9512104D7CED78E9F2A6C478BE0172825C1EE8266AD51\ +955756B55E409FC1014A6A6D838C6D66DB24C763EFFD5341F8ACCD6CBBB4F1BE\ +7965110E999D83EF873A5D77F531A059AD3E994FA1C62C1F05F97DCCA1C2B092\ +8E554452B83662076EB317300687665169484452ED3533728F331295E27E0CEE\ +E0EA20C9A37941342EF92C40EAD23BA35CCC052DD02D2E1E230232A8DCB796F8\ +A4EE5EBDFD51017CD22EB1CC247FD4AC0CFDC0B69FF8D59BF72103D7D1B12325\ +47ECCB1D6EA34AD1D0D037077AE6C43AB42F5041E692947CA3A58584E2875573\ +221F4075CDE145A4B07C50C7539866125B8B733E01342C10C9A9E1B6315827AD\ +312B9EE7ABE4981D4FBBC4CD6F744B071F011337D7653B6C43D93C6EA56586C4\ +0184DC2BE1E88C9DAAFEADC3E3A7A737:\ +48AFF615CCFF3B8F3A18154CADDB269F067DD85D0EF412A7880AE3E464EB9BE1\ +567BBCBB4BF07A975C1305B9111A6D45F899A8935A2B8B90AB40C9B8CF1FA0E7\ +4ED5CF56B654CE9D87228607AC87A8AC1B7EEB79FD83246D7BC5FAC28D26E735\ +400E2F6F5EFD7F729E7A6CE9A99ECEFEE04ED6020133B4DACCDE0756E5F3C150\ +8DE68BCECAFFEF5C30AAB454AF870049279C73E32B4072A0A037FD5C8B870888\ +9BFA7F89EDEC41A2AF01A01C9E3DD845F88B7754F4A5E7A2C110E3E617B75D2A\ +612525EFD62C63252E812A109E1BBBDEE5EDAF9FB8507D97FE0A13725BD7B79E\ +A0F1632755379FB00A6424CDB8D236F796870420610A4E0CDE1CB5A13AB14DC1\ +20CE241A33F56719FFAA73876EB855D5C25454F64B0E4BC57092D1D8C8285F73\ +CB077F1BAEEFC400DEE87EECC7C848652080E99274615874551B64B1CC2B3D0E\ +F3FD4ABFC18C5DA95A61D7D3706AB735B4B9066CEE2887C2A714CE8115B8F91D\ +7E01728EB68FBC0D7D632126C460870BE823F5C64399F3CE9E9D9FACD01799B4\ +5E0A2278F693C7A2C9F44B4AFFB74D2C:\ +481FA65B4DDAF7FE670D87EFA173834D41230B31AA3E8820:\ +AF5B5455F64B539C + +53BEAD5B17B878F07921F079761EF7A267D540BC5731BFDC201F1A454CF465AD\ +CA5B1760529A340F8D5D6461A094F20D3F79519496A649A70E5305F6A9CEE0B9\ +E6D6C7B1E7809A0D816A0ADB7B5BC992C2532BF94E21A3C2D2A350D8C5095D80\ +29AC899D53EFBF4C0B35AD7CCCC0CC5BD6C9C40D2867DC7CCFEF12078F3A5E62\ +4DA10B7FED2941A18401BE5EA2CBB17311E0FDBB9E3F0F46F3D1A83AB98F2614\ +1E2D8BF6F561AF5CE0CEAD369601C1E4C05387037AC53B9F2ABE6CB1F5581B04\ +DA79AB513F477F79CA7AC824B18ACE5A62AB112B3743FB9D811A730D1B3F9B68\ +208E7EC9AC7ACD233B4B70C134F3B297C4633E5CE00D22471AC88BF451604920\ +E6AD152EB2A49E7FC6AF77B29599163B01AC3AE64ED55C25BB73F4508F183726\ +C1260A6E8D6879F03450F06141BE1C892432EFEFCC8A71235288DF37B541C81A\ +8B8C2161DA0069DC12251A3BD988E2DAF48243F2BC81A8AA97988D7907AD4A5E\ +655557528A8A0E3B3338E26D0CFFE7C793332D2D0FFA2370CFB920E4B54762E8\ +AB8933048F2B528E898168F589C564FEADA4004F:\ +6B03D9D299ACC9DBF19DA4A032451BF8C400AD001E8614F93F398EB776A67F4D\ +8AF32224E92FAEF35D5D014210FD48BBCD0EDA63CD638B12D72CC921AE20F3B2\ +4DDEC670146B70E7CD40A309E877C53BC8B5D22BCEB757CD7E25B2062D5AD73D\ +2EA7B3C19377251820169B9CC87A787D5C6D27D1019A8E2E3B866C2191FA9103\ +9D9F0C0F35240B07357F0F857E0E8DE2CACC6313CC92B43B07A3757A2118119E\ +B056BA612F1306CB4F7BA10BBD0CD56850D1FA0A48716C86CEC9ED1F88B4E1FE\ +4B7E8CE6EA6BEA15FCC5858AA4FEAB8E66404E78F3E05432A0C8D6F6780EA94F\ +5756CC158AE4669B503C3B2E6325CF18CD356D04790BCA44C71F83127BCA0342\ +C22DF8FF89CEB6F81014DCD8EB344909CAF91251A76736CBED0E6700B0BE765D\ +293BAF3C6C039047363570DB741254DB1B221B8365753FB12E48B3D140D4CF3E\ +FA0FEEFD79DE5D7FBAB5280E8477C6C24EDC716EFF11FD71BECC21FFE7DB6E78\ +273D24DCC1939C42D2E5C4DE6C3A3ED5B09C2277939B756B5B6B3B1EAAAA75BF\ +2F23DF5DB4E97333FBB577F138F0DD71159AD509:\ +272814882601F9E7EEBD53044D05E3BFE735AF7DA5B4EF13:\ +55A3447CF08BB668 + +72B4A89C778C8A7D348E3B4447228E65E058AABDA94C50DD11B24954B9F27362\ +C11A9432CB32F1E2F9287CD4FE1DED54F83FF0D7BAB4960AA968F6D0A75685F6\ +51625E0064E939AD176CB40837D30209A2FBE85497FD26CC42ADE9B402C2E026\ +87CA259BA33DF4818979C9157E2F236968470F784C8DB4F2D1FCB38D4318706A\ +924ABE15FA31DF55F8DBD0B5FEE7A5B75C25B1000462BFF375231696CCB5D855\ +D8B6AF465254DC6DFADD78875023A027228E26286E803841175EE291129FFBB2\ +45E38C594A40463FFAAF2E39ECB165454EBEACAEDAFF9136E602E81AAFA02341\ +2056F307B02EB8F519610DDD864989C72EFCE631CB7405D28AB6EE6F641C3C40\ +F90D94DC3804D3400DF8F3700390B2D969D644C129570FF262397DF481CA5DAE\ +F635AE4E01BDC9A5DCE8404BED7730B529D77C5AB5ECAC912F8FCEF8CEFE7FA6\ +7A8F201D5598988A15DC385398D8268E93E4105969217CA8DCD3DDFADEB68AC2\ +F0B180792B8AA90BAECE7175EDB481D182E83A19EFD7A751DA5989419A28E6D3\ +720585D1F6E1A1662E44D0D786E1860E7B2BAA1F0CF6C243:\ +7F647B760303C695184EB427CF072D2CBE168C00CF8AC8BD67CB75B085503173\ +FD86208FDA2D1C24AE647B868E876FB473A399B4A6450D8A6B3EF30353B4D65D\ +3BC08625E965D35CFFC7BF1B362C9E01ADA3158A73E44F50DEEBE8C9EFD8EDB4\ +ACD8FC282902D805E1DA403BE81358E5152CAE7477BCD0249D81D5978DF90CBA\ +F6A6D34036A083A9A0B32967C192A3D19A42729B9DEBD767785F7A272A2848AF\ +D38FDF5FAC11FE4CD9139541F7152CA2AF440CD1DDE5F69CDFD5EC5436573298\ +D73BA1E76A4EFC03733657020A09C69877B2A4F2E4C697183F142FBC78922282\ +B4457B3501AE47325AE346CBCD8127459F365CFC2D407EDE24143E1CC3D2D0A1\ +99C40E1EA45F49E6B21C10B36C59816979EB18EBEA2285321C3B070173A332A5\ +85345ED422A944221F8BD6AD78674DA56A047BB3406AC25B9298D2AB518CD51F\ +236C3493B244E231F82EE92CFED77BB141211C4722C5456904B11851CE383E2D\ +2588179FC058E860695FACD6F876A2EE98C85A5059A3681F136DBD439C874C86\ +7E429FF582261E8E189DE58A3B1B69B45D8EEA8AFECABB9B:\ +9A35761DC115FC9DE294CBB241A2707F0E3734E8539E605E:\ +7FA6D62960F072F1 + +88AF6C82AD45DE6C23B0480DC8D4EF4DC9CF75C5D856FA942225C9BECAAAED90\ +F0ECB9634D5D19A0BF176FFA63BD67F3F6A177F21035A788E0664E8413BA55B8\ +D8470F940F356D6C7E1D1614F0B8D4E25C6C079089FE655E5C9DA7703B37A581\ +C00B2CE6E049577887C3871D40885B9B075D29F2D92CC9306B6F0B7E673A64C9\ +B1444BE371FB1584D894A740B3DD27DD43CEE1BC5B905F42EB6B3B1DA8D47F10\ +8F322A2CD1508ECF305E348129EB4494DF9ABC135D02748B1514A54033DAE13D\ +DB6969DA9B936D7946FCB0317EB71C2339C2B916E0311C83CD0DDD132CFD9D9E\ +7B29A552C899A832CCBEDFE8469863F11B4DA6D916CB15DB06766A95BA19EC5E\ +790F4959FE647D995A254EF52D1811525EC326583D1CED2983F19232746C0FEF\ +937C4A144E18619B62C28BAB3376810ACF2604D85E7DE879A3D5F80684A7CEED\ +448886226F894F536943EF7354EDBAB0CD789AE1B009297364BDAB0DDF265349\ +F47FC6A72CA1FFB2322BDB23A2D084BF07AD839FC1711AF0F551ED7428D0192E\ +50F69DD1E728DE81ACB71D566726CC6D3A878320C4CBEE936C19DC89:\ +748365BF0EB638BF7C3DE839631A62978A76C3015A93E582AA139D867A5FAAFB\ +10B6CADDB5CBF08991793D806F7D05B17F80449873087333CAD4DCD0DE97194D\ +55BA20CCEAFAC03BF2C310E38CBA00EA2305E7352316710D781261BC76B8272C\ +E8249B2456EA225FACD6BF93E255D68A8B38D062D6CB471D52C6BD4A30653BAA\ +EDBC7A7EB62C93CE94527860540A741F7AC884715E713187648801229803CF78\ +ADC5DF414B85C44B92E35845AF7AB2B474B8E2B983FB17BE603AAA050EF962FE\ +2DCB1BFCF094144BFA0851FFE53BCFCA33458287D2CA8D361809C56A99B3513E\ +2F415414462C93C0AA07F0664B5116DDE47A13FD085500FB29AED78AB1713C04\ +C3644DDF1503CE5A070154F18B601D3127A273F370405ABE1083CD8C6EBB97F5\ +D71A5699F18DFF8B5B96D1FD02EB83C151D86A483C2BB1B9F846DA47B48D7345\ +EB7318836AB1EB702F05B1E8F552ED990B8B1FB23A134003C33A83240FEECEB9\ +A9E16FD1B5EA15377577B41701299D0130C6DBB41AEAC395EC06C241D40C541E\ +E1D7192C39880FBEF4D190BABB216769CC75A73E12E0BB31BB4560CD:\ +46115B745C8196BF3E7B2EE39F9B660F4FA9213328B06AD6:\ +32DB4603B9CE7B8D + +880CB4AAA5E49F2E67301B8105C7C42E4C3A021067E37A9984F33E82850BD04C\ +C6D7948257D1B07264D3CBB5FE31AAACB30779859AC5075B9475D3B6C76B4D5F\ +E910E6BAA050F5E45C9253FB667F557FF6C7F3E56FD94EB5D3DDE72076935F61\ +9326BD3FC98FEB8BA62788796A1E8DD5738528B053C579F4FCDEC7913C919A88\ +4991692A94C12CA498E96012FE10732C30410E32943BD5960F560B31A19C4C88\ +BB868EB058B788AB5295D0F9B98C5AF21A4DE533368724F17A01D955212AA33A\ +6B96A081085F9FA3BBAAC39C88E55C851D72C24B96B7A3CB574DE516A2A6923F\ +3A17B7E896D5BFEE8E19FD0D1F73073C087890FFE0F2B0481F9FB454201ADCB0\ +AA1DC04484EA5DB2EB10175DA8E2C003D6700D0FE3F2C8559BFD52E89295FBBE\ +3BB2BDE1FBD452674F5A9ED11FE5E11B855D2770CC9EF058F173E64BD8282CCB\ +FA82451294ABE4B65F36AE2123F9EBC46AAD5FD70C1DCC9BC5896D8C701BD206\ +3C41C161FD8B7327D01003CB4F62832531DB9A964A10F0FC3D99138F138DE21D\ +F19D5B7A983ADC46D8BB6C7978BA5344029B7CFD9DF6C6F971791A12758A3194:\ +33175826628CEB8736FF891D93230BCA418002DD41AE0DCCA373E2E21C6D8A65\ +217A1435E18C9F6B854E8C8D37EF0EFBB6997216B5E7D65FE162749801322BBB\ +71AEEBEFDB066EAB2F03D80B9B82B648056EFA7D44D2AD3539D3C651316B83E2\ +1F2306E92F47DF77AA3D47E83E92F0C754DFEAEA6261241E5F2E916E8FFB09F8\ +8A22B47BAF07DA26C0B6A0DA63EAD82643E13DA28924F697FDEF14678465EAF3\ +ECF0DC9C43EC776C098B3434921679468BBF56890CF1AACF7F5A1347B2F27B73\ +B40AA13A060D02DF6748BB84E9ED73746FC30C6D2E5A70A61CEE51870060118A\ +06A3439522DCAE983DAD0F4B64FACA697ECB4ABFA57E9CE9FE4BF69DD67F2AB0\ +FAB9FE5A8E54E4E2E165DE9B400FB6FAF23C624528FEE78F13FE8808EF84D100\ +BE45C538EED4A291A2A615E6121BE2A9A37F79E73F3C3CBA7D38FF19104412E2\ +159BB93D07F1A125CB1669B351E5968FAE2B6BA0C201586C3270278C7C4398EC\ +88372B7C23E7CEBF3E8CF0C6A3F6852BCCC1D9DFB09A25FF0457467736F3EE82\ +4CA555C7DADFBD00DD27B30E8DE7D3A2E1ACA8E5ECFF75F7BEDA63C70F5E57EC:\ +D781238EDFE368CC4C03919FA36A22D58A732B8817486A6A:\ +348A67FB90EBE157 + +D184A02AF2E0E10A69A92C047726FF67AE431138668821856BC352973AF3BFBB\ +DBD33C7E822F47BBB6AED6B8D3C11DD18667E901625AAFD8A0F4605AC16322F8\ +2FDC90915674A5ADCF3BE6E1D9198D177282E6B09439428654F4B37082CDF2F1\ +651B2478892F2D8AB303E3A20A23E8EF90DC588AD3E36B26142F481ED9E8A922\ +EA4E8C1D599F11C87B8FDC197ABFA65C7B7F386CA77110FCBF66AD97EC1C5204\ +453CC156701D31A03B83A453CCDCC2B646DBA2F5A1D8EADD7F805A890FF5DE96\ +40DF414D3AF314D32D2EE33FD81DCF70BD775ED277A4B369EE45B3760BE8B637\ +138A1A747ADB52A5B196253612F969E9D417FA7D38DCA78D3E96E130965303A7\ +FBC7E090AB8D7AF28D7C386C76F5553A9ABD2F8DDEECC3E4A4D1B1E187A05E77\ +4980D9A69C4653B28FECCE1698576875ABC5289223483B2759790A6F7A964E20\ +7D058A5893E6D89A623E1C09C5CBA52C5BC3AB5A3098AE3F704B69A8D20D75DE\ +005C3F784787CA6C064CC03E4659C6BB7F4AE3C5D8DAE12DD3B94F8F462A636A\ +8247530A46DA3F1FA4478CFF03CF08780B50FE8572C3FFAC044E0E71231D4382\ +D4F31FC4:\ +7F4660F693F8C07345BBD6E74EF3203FF8B653E48E6735679DDEA31C052E73D8\ +616493FE2D601976823EF96C7AA411BABC632EF5DC6C3BADA97655AB3FF3ADC1\ +4A452573E51562AC3E85732150B20671028E64E0C9D938E398968C821C1BFEBF\ +5874AA628D6203C95566A98114FBD1C3D5C17238B8E1255BC02885633CC4B6DD\ +824AFF1B1E7C39990EE2E513A8F3B29490B6E46F0FCA78E7B91F9DFE1D87611E\ +95FCEDB64F64B4A0B95E001DB55769F23D0D5DFA929FBF0942CCB615D6A8A45D\ +7ABE6FF2C5E02BC158983600A04141A63A3575CE14B124738A4671262C75EBBC\ +5594727FC78569F7D83B4FA28E79CADF80942C0F8093473C09C23E0035B3F821\ +736175282F801DC82BA2CA6441B7CD49945FD9DC6539AA9BD15EE203298FA639\ +A34BE1631E724EB320A0FC215D71631F574B2F822ECDC8AD59EDE641DE94DE18\ +0037BB815D0D667088BEADC0C3EC88C075C9BD2BCECB8BC4CFADC5DAE8A1CCC4\ +131ED582599DF4BA9E72F9D0F103B8D8909AA5B9D0C3C14B4B85C801C864AC0C\ +DB39AF01F3E9BA0390CB744DB2976FC8541F7D46284B6698B4BA80A22F0E8A5A\ +796D034B:\ +CE99B2DAEB8D8D838770CD20797B92E9FEE44BC7E613FE26:\ +58EDDF8F4961EB95 + +C1E31324A12D13EEAE38DB3EB0B8ADA43A1AE6CA8B85ADE8574E0D21699A1720\ +24989014AD40763A5D91EE0FD0072BB253E7B9A7D12AE6ED40394FAC153E781C\ +7520CB682291B87C83CE0C1D6A16CBCB890891381E204D9CF9F54FAEA53BD70D\ +1AAD34A837B6208F848890C9C94ADD13E81C730C88835EFA0620EB9B3D714F20\ +CB5C7DAA0822062756748A8B601ED55A265DA8273EA5A3EF7AF27E15EE6002AF\ +65C6AC12B55890C3AF1EB6853503B6499FC3446DBAF92B77A98439CEFABE2DDB\ +72A6C077A94FFEC2ABDC91B1FE9DFDEAF49F58F6AB4E42036BF5A027086E57E7\ +6B67713ED090AA9D85402027D84632355606FC82B07B4F966CBED0FBB5937E88\ +59DB8E5AD58DC2BFFA7641D5E22A537D7C3B5C9F57BBE95D56CF68E3E0748D1C\ +CC0468D7E7AC1941B76D49BC957969B6ED6A28FDA9CF75834CC4747FA8908392\ +A2E82A9AE352B41DB44161616B35139B4CD42EDD31162B114C604ABAE5843B21\ +79AA0B617752468EE97398D1ACE2172FA68BF1C1D44EEEDB676D15789519DBE4\ +18D7ACC69314032E21E7316DAC522970B5F0EFAD2B1C9AF99A376FE9F7AE45E4\ +314A3CF728017C39:\ +EB31D4353BBFD4AB9F2AAD58E69B17992B8FC696BD0D1991443A51589F31D420\ +88D706B4D8E66846596FB317E3A3EF9A7D8CD97540B8A0421D9C8EBBBAB66CED\ +4FF8C57D95E330543F4FD0B80C9223C2D549D08C944923E48FAB6C087A052E56\ +842FA8E82F6A3F73C79DBED3CC018AD14F2896AADA099E7E8F3F864F0D004782\ +D7DF3D27B742FBEAB6657AEDF1FB467B014EC47F279EA04C02025A0F8D92BCC5\ +CF3C554183B58CC4C892613CFBD85D5AC1EFFB4A329DEA31BE1526E7597E4CC4\ +B8FCD8846F41605B9A65770CCDB6B4BD56BDC78BCAE87AC7DF34AB059587C5C3\ +5E2DD2592347220645FE3E1FCAA5809723340492286169292D4C0CB37ACB5B0E\ +119E0BB74C37900EBADFB433294686D7621A21DBBC8B3BE8BF0084E742C3BCC0\ +0580A847BDB76E47D05C46520438A831257F16EEFBFAAC29EFCFB661A3858EF8\ +44EBF3015C5E86B804BE3915FE70FA4085F4879F96D0DE84CD2D34D20DB39246\ +2CA346E35CF9B8A12B7C2B01613528940EBF6B7A46BC015E34A443FA95A2AB66\ +A8426D25BB4BEAEED5859A510F3C302312C8B29C8320B33DA38AC5F81AD0D3E7\ +D7882548E91309A6:\ +BE52BE195399CB2F2D84BB2C791573504C3C08DDB5430C12:\ +48E24F3FF595F760 + +5F1A8C0633F3404E9AB98D9E9D94030127CB19A98AFD74F0ADB29AEA593F88D0\ +1B427A871C1ACD6DA823CA06A7B4EBDFDF5B44C1D63D79FC2E42C4395AB01D75\ +D20314ED6710355BE34E273CAD52B09DCBB33780932FD34640B8F0E92ED4032E\ +2E60CD5E07CD7CB1FA3FA0C2A1D979D48195424E3FDC234C9469D8EB61A42DE5\ +FBD467C58899AE2EB9934AD2D2AE36366C2B0CF79F4DC588BCC6FBAB22F826F0\ +C528BCE766FF96B886749480489BBA399D26E1ADADDECBE0EBF8B560E25288FB\ +4D43DA676DCFF245AB8FAFFE9AC32BF57FEA4512F73E52F2B05C726DCA64D987\ +0E26CE296A3FF506478D88899D70E368A312420133205FFDB819CA71C56378F2\ +DC1AD4C57E67ED057D15A0DF21B5EC609E2636C88FF135544D13E7F68D59EAFF\ +1FD71BBCBD1AD20095708B672D07BDFB559301B8E26F94DC7DD5C85FB6F238B3\ +098B8293CAFF217BB1172E03948A53FBF1EA6382E46C24A2BBFF3B21973B9D09\ +E5FA2E24ECFCE4920C864DA539CB95FCB9F095357F2547EE9DA85D0793B3EE9B\ +B75E0FE66F27F9FCEC51911B037478F1722D98229AEB5C1A80109777F3D9B5C8\ +E3A3FC24A9CB654F9B3A1206:\ +DBF587B0D739DCCEE53F1534BDD606AD25597E238CFC584242E8D04D01366761\ +903052598AC508827D580A3ECF55FFCED31E33AD9010185F9851090D7EBC71C9\ +5DFDA4F7A1BB0F5B62D889CE9E8B086BD94CDFF73BD8C83EDB67380954911448\ +86A23A3846040FEAC5FCFA226951D32AF26851BE06609CBC2C983E6F510AC6D7\ +8EC94BF17AC64BA345580BDA6DC7373C487B1A2942CC0DB6231C847B3B33191F\ +A65A28E9C2DD5BA26C0F5C937EE8D61612E88661FF9F75EAE5412FB83E21D2B6\ +843DC810624736D474075D43A6BC30F2905462BE2CDC792D436F41A5B28A1E86\ +0F24ED4C163BFD3140029D39E78FAB3EA2428399F200A2FC03BA333B313F8B81\ +DA0A091EB27C6FBCA677C86E8E7D80FA52341C1AC478F93B9E2757322E1CB09B\ +1F784DEFD5F2C9F3D91D5A99E04CCF81760D0EB3D6D47E73363C1C912720F56C\ +F2FD9B3EB2C35D81E6B5D98A64B9ED907D09FD82CD2003ABDA05FCD89C460F2F\ +BE0CFDB7B915CC4061B6380142243DF57F2DB475253CF4205B8704EE664C9ABD\ +16CAA305F374837E2383D90B9DC40B71CA26F62983B5F3EC67A4AAA5B10137F7\ +6FCFBF40CA6F4C0547FF27C0:\ +7D0E35629102D2B43C05955BEBDC1149EA841DEF772A9236:\ +A62D0287246F56B8 + +7E20C76A0F6423C7B91237BA3146DA58C3A8FE3DDCC3929FA2DA53C7796EEB1A\ +763FF3E4D04CA218A0A2B0E4179BD20E75C847A20A8D1AFBC73947AE49F115D4\ +0A10FEDEBC814649FF46BD240D7ABA37E99FEA9EA531D6D9E796F29C551FF70A\ +D7534FAFF4F4ACD9F97437BE5D99D8216593B4EB4D5E0FE44E0725BB9D8B2516\ +A40862E67376FBA7D38A54F10E75A3D167BF5A0DBC39EA533CA0BD9348AD737B\ +F38FD4839F8FE6C49B50CCA89F035F02533B909861222FC6E69CEF8241C5A098\ +C9D35390BD757100B62643F1E406043F36AAA218FBED89808D07F8E98BE073B6\ +C5BE89B067DCA4AE7C711F66AB32B55E07A5A413B45AB978EA8B43AC0FC2F49C\ +A6C99322E99746EA2F5F6405A5EA22B66BDE570646F15E344B431558943BAF70\ +07DD1D3B466BEBE184F71D7C781FC6BDFD6A46788992786AE84FDD6A99FC6FA0\ +B32AAA2151534529752F319EF3F844612CDFACC3CD9BDEC29EE60667F36B4CD4\ +369CFA3831967D1619194CFE30024692CF8BCD298FC88F589412BABB55620923\ +F7C144FE0E81D3504DB4C2327F5739A698D52AA0212335AFBE7FBDB336DB943E\ +25AAD75B15B4CDC83E11FDD5F95E15F1:\ +5184FEDDACBC6FF99A0045F9F6D79B29A1C983E197890FCE048F1F2E112A04D3\ +D57C0CA49CC3F76ACC4A12A032E8E292AFECBE9E1D5EDA0747951232B085F466\ +FBB2D7237814B84B69ED5A9D93D8265DE6B8D86FFBC8F3E21013053CC6504144\ +489B7C119CF123DE78964280AE78D2A3B6898BF4C4F6B0AFD47FE8E02ABEC796\ +4B1FDC64EB7B4E4E738BF4805480D92201337E6E9FB7E6F1F3AA668FEB5F449A\ +BDD8E7B8039AC207A0B0A35B7CCFEBB13DD3BD450B2C43BDA09827A9A8692589\ +93BC14E58D4E53BE3DA2E4147DAC7CD5F950C3B14DF18E4C7B3B0CF3637D1EE9\ +8B38215736EFEDFA3DD21738A3D5AE9992E40D4D64DF376039CE58EC9500BF21\ +A8AFC81D13178958C65820B725A3B600FEC7B3A60799545CC8AD417DAF3A7049\ +A8D45047BD03A21A4BFB630F16690540CB77B676CAE494A17247AC715B7D273F\ +89C440944D8E0D741C17FB82F6A9A1C1020826BAF8212D34288F70BB50657356\ +236BC0E9D75DBB86AF0A4564D7E2663FC050FA971D152EC2A1ACD627885828AE\ +BB1780DB1264C4C00BE0E0711D871117A8080B2F16E44F63AE20E02F1522FC43\ +F2DB7FE71A1F869406F8ECC92DE89E74:\ +A1693B445C656AC857AE865C2F146522A6F1C7026637CB10:\ +FF32D0FA13F4B46A + +D5EFC2B4655D791EF70A683983F9A50BCA04535422BDE57B803378854522FE5C\ +052672D4C98C2AA6EBB1FD0B60D2A2279A9EE8D369A375C4307DAE948768C309\ +DAD74AFB5BC442BEC942B4E18B4009DFEB9B74C37A2D5AF18A1A6FFA5133DA3B\ +1FE97E9714158ED411E047EC6328D8A082A3C04FA058A89BDF8ECCFE7E5E9C19\ +2E8B7089FDEA66F25B75D8BA9EBDC98ADBFE50716DD58D65DA2B0E3CEBCA7AF6\ +0A18597CACF0A0541A63A52056D504C2DB3E8118F20D9D02B1D4B877A3EE36C1\ +4474D0535C786CD507F231B72FA64EC7BA0EFBBB320EE692E4EC9CE75206F804\ +0AC0125BD4D5F0B4879A6F9785570365821863F1D43551AC87A9104D82C4B083\ +7BF80C0F955F43F48113F01337B9B37B1E0BF0826B57BF5BFD0A0117EF5821E1\ +E833211FEC425DA8E5924FB5794A5CFB706BDC13B2D246A89770505BD4E67B17\ +0F2BE51301219FC97F4568232A98F4521886FF6A4928E07DE8849AC38FACBE21\ +B2D69BBF8B1FE1A44428A551F04FA62D00B2D8848AE83A42B3FA165D35E584AD\ +036AD0746374DFE44E650F25A4F72DF59D5BB974DDE6CB7E86C4691E825453EE\ +BAEBC13BEF7E279E63668DCD98C17CF86F309BD7:\ +85CA6E09A63C848C8CD3E1C88EF5484E30FCC585E268499279F1DBB2866C2069\ +A23141927AC4AFD4DC0CFA2CE44B0BA02729D5444BD946528B3CF0DA3E08481E\ +437A7A9717EE0DB2A4E9F99A5648F8A2B9ADBE5FD7A234541C1B5E8DA0B2DD22\ +7DE6783FAA9B79CEA7C9262946DF15FA04487982A514D67FD6D58EB6AB506E7B\ +D4663462862FA17C85E9AE1BD6ED106C639D67FEE6E85931935FB859F756EEFE\ +59EF340EFC30B2022F9973D9AF4967379BEC95574398F48E9235716AF57CCD97\ +81B7A404676AD1A3EB696FF7C2D05479541AEAEA281BF11DC4C16A186A9DB1A0\ +8A3DA311F9D9829A28DEA38C730B19C114A0EF1839C6A95C68487D90456603F2\ +9F29E23686B084A69253E4EF4FE70A54A9C6B3D3D4F9654BCA0A65F238AB2A11\ +55CC78AB23D0C8DA7A749B88B800307BDCD5FBF94F1317447E57B872D6AE9FA8\ +1B36C8747BC78AE1C357C115D541B8B83FFC54B02E36D0CF8FBA7E1D54A6B033\ +FA419A9A69C4B39040B20EA331438B4B468C0B43D929AC36A79ABFCEDC241A32\ +812EC609D44BDAF61B3F25466668DF9F912A075FEAC397B7B13EB872D05C5A7A\ +729F3C254CBF54D8BE179278A85D89C79C2CF370:\ +28714FA7BABF4E6A5A7E2C7BBF489209DB3826674CDE9828:\ +12612898F8DF5697 + +0B5CEF18737F479CF817386EF44A017C8B7793080D5133175703BF0AF6BBFDED\ +410B6F55A32E678AD3844E756CA9BE031028B9100B7A354E05AB2CED46CEADD0\ +31C7EFDF5CA52159BF669669997BE25DA8537E4E55CB5712385D00D4B209E475\ +D0CAFD2593C019D942AF863824A4B24B90B2B099717D9DF0ECE879EBA5143DEA\ +0AE4627BD11DAEA8670D5E3F52B7C5B899DFD8EBDE05619B0C349205A8837B18\ +81B7D16463C44AD99B6F0639EE8BBFDA413FF36A94991D9CF0ED4F0F517CB8A2\ +AFAE1CA57BE8DEE05DB161A10A1FE0C2E69673F6969F76C19F919021FE86797A\ +85111159D9793869754CC1AA3702B05BA590B96A18859AA1D64DCEE8AA254A13\ +3AE1C57D9F7788D956CDE737D5F67B1F31F86DD67B18EEB905BED8CEA6393696\ +17C78C2B70186059FD19B21B2E4DB1755A4F47A116AB39EAD06ABB4D8754FAF9\ +32EA369DB6E164F3577F2529B76368A19A0921D6A572C220431BB2CE1D20CCA9\ +7C3E7DF5E38EE718ED4FE5E64BCDF3274516AD1452D988091562447EF94F29F0\ +F8B1161F422A772272AD9D14AD16AAE0CCE7F9F368542C5E3728CA5A3E246FC3\ +E65783A106AF2823166E7707747CD4FB0ADDC8DFFDA8171D:\ +3F1C038C678EDB2951B044D2B28DC10839FD112830C5A124D0077E4DFC8C1AFC\ +8011D7FC5EA03FB9B71E96DE73E592F419A1097A7D3443B95F25F477CC6E2818\ +CEA472C864D87A260C19124B669F7CB132004845C87CB2B9BEA7CF36983E8A5D\ +09AB44A620B414C3A395B3EDA8034548BBFDC130584A025BF671E4662BE51AF2\ +6EF1E98045599322BDBFDD5E7DED654D8E8964692A611C292E97C7ACAE6A3C89\ +F58248F2D699DF3E9C899B6A323FE0D4BD833922A9C028C693687E076F840963\ +39A6B3627B2718E93F18097F6EFF14467B60040E81E0DB2FAC283D56BE1CBB3B\ +FB47863F36BCE01DB727AD280B394AC65BCB870954D04C6CC7F0431A6F72849D\ +25ED8D883F8319BCF21603F997461D7F9B9376A18307CBECC0D0C0FED7C6358E\ +DD10093B161525999B50C673A557FB36F11BB63A4CC4B3C37B47EADFD332E27E\ +6D1DFBF216C535D087FAE46A941AE6271C47736C47DA38008C78043F8097C0A1\ +41AAA2A9997013E9DDCAECBD3326D246EA06E8BCA96B13998574D9083870091A\ +97D3AA55133282C2348D3E5C9AC097FC7AF858A526F1A0B09224D393C968DFED\ +5EDC5E3AF267A991B1C01B79DA0AABA17CE292253C5A8659:\ +6103C50E4C8EC76B1376D2CD980363B4354FCB61ECE2A524:\ +4A9DC67DCE5428AF + +7368741C50FEB6B0262AC0A348ABD964A042080AFC2C95700060C35A2F732B19\ +C0E8E847D8980B81CDEFC8625291536C50D2543418DEBA82F18C807315DC5E91\ +93EDC66E6620F7D565215E2E8444016FE1505E696F22C97F9ACC3D459E25622F\ +84489AC227D0CEC84DA5BA682E9493489CABE454576FDEAEC803802C0CF86DFA\ +CC4A3F6561ADE9C0419DE9895DDE9AA64ED8E9E0CC5E1548A431D12C46773840\ +F741B5CF61534BD1D27BF100935F7217E1B469647045BAB2F63CD76E8AD4C2EF\ +60A33DB917B9B545CFD103895931DF1811471CD0BC2E48A363774A59D0DE1CE7\ +573E06AC7ED19126CDAD543E6CC41329FBE64781F66D275B2EFB2DC12F6C20E1\ +E52784EFC9C50B86285AAB90F30F01E50CBB22CCA499EF4FCCF8864572F27EFC\ +34584F5FACBD5B1A12F19EAE5D2B31AC085F3147751825CA9C679C70C353D989\ +559F84CEA30C24D33C0CB1FB9DF90F2F244661CE0E70E94EBE145F8D6ED08D4C\ +4F51FCDE422D2536389F1CF29E9BE85B906F30EDB913DFB6958684B542A09CE3\ +9C40CF80949D85A1B6300367D2D699C4FD71F2C632208E1F5A12B3B746315E48\ +17168C2EC4CBBA01CC6DC9F7CE84D7751EAA66A84AC639F34DAE9F4B:\ +125A71A64FD9BCF2F6199B9B7D0BFD4D0844BFECDDB70B9B3C58988F883CDA46\ +F3C8579BCEEF47270E0B371491FB40F0F64F95CC7B055B9F8D651203ECF52E6E\ +113998369D30C8195D18EB1CD2777814B1F8787F1B50C6E89B3CD953E04AD8FC\ +6D0B0FF857B2E3ED15CB5DEFEC6FE887514D06A053667C5069EE6A030705CF9C\ +32009188BA4400CA7E60884A4825F16210E2C4C4839887886EC173FB09A0FA7F\ +1B8C2C9C1DA193326C776EC43D70D5D2CB8ADAFF2E0DC0F437870C284A23DD9B\ +725335AA3228D047A7EDECD64CF8DC52669E72514DDFF6A2BFB0F0A9316421AC\ +2F62A767801FDD8A00993D7C5ABAA47714D6259E86506BE1C37F211F6F91F04D\ +B2F3FC3B26BC5EA2A9B66C91124178AA1219F15DAD459B1250C191E908C3D14E\ +7F42C4D8756287D3B6A68051599F0E74499D13826A1B5D863CB358027796819B\ +DC9A718EB7F62F3F5BB221B4E4406E17A6D6F04FB10ACD096CAB8FD11E602E0C\ +CAD15F119BC8BDEB68C50B382B5F6140E9D6053640CD09FA595C08584160F316\ +26E6EAE0CE40DE68E12717A4E174825B788448F324391C4249E0004031AB7611\ +B59B4AA1903E67448A9FB6A2E30C8CCDB4128F3D9CB48DC62342DAA6:\ +E27FAE46E89D6C1ED3A8739D081D0D8D2C8AE46D83DA11D3:\ +5A287BD3FA98DA9C + +D2E6EC03AAA82F6666418C4FFBF6974A767C92D2730837F3D4854037197A587D\ +DE7A1EDF6CC053B1CE3B9B218EC24EA0671246619E02CDD73E9A1206C9F99D77\ +0F96C9D1E561404FA23F7FEB51FB14B342A9652A5FB87F55E3958EF62E3CB897\ +9953A7835B2E51A4A68C9BAB7F2ABDB9119F4D8BA100A3CDB57A99F9BC95114F\ +16681A111914A424A9DA081B781450413494857B496AE4E63EE999542E9091FB\ +30E221D5F3902433EF4FC73E9E81C774D921E4CD86D6D6218A47AC50C053812A\ +FAC3DABD1CE064859C18AFEEF63897E5DD06F71E84936AEEAC3D2C55855665CB\ +C179E293C86DCB6CC34FCA9E32645DF23F41D3A56C1C7BCCE7C0A119B5FEE1AA\ +0CD4AEEA3FE84D79B7BB78D19FCEFC732CD5D2D72DC28E227190C1F4A0915EE9\ +A3C986D26EE7258C528F9B07BD377DFECB2B63BBC08621DA43F24FF2D901D408\ +2754BF3FEAC65328C87EB52826A85DDE1C856142EAFA2C23CF401857DDB200F0\ +A7245AC2DACE481B2463789B74CE52CF504427D6600B46E0848C2B170E8C7536\ +5E82EE1CE3A6A8F0A7091A30828DFF05A8FCC9123A17AE916D6895AECFEEC0FC\ +684DA570C3BEC0B2CEE4959E7AD2E74007C2B7A5DCCFD76A6A044BC5E94A96E8:\ +3A33C663146466F9B17841C6A1812CCE796F98588DCAA891E9C84AC8744B6BE8\ +99F1E1B1AA26CB3E80B6E3F9FA19ED187FDE0757B6E15E80269FFE667F83DAF6\ +9ABE7133794103641ADC35A9881B15F8DA308BF46ACA2C33B1AE937721371EE9\ +7A0DBBE65AD4DC6C18C9E2C6C00F278B8E13011BDB1F976AE8038DBA4B6DBE10\ +5663E28C2AC1E4375708433E988AFE5096FFB7C485D6ED7D57A82ACAA9755045\ +3E9BB5F2C25C0EF0468EC1C3FDBF881DB6075A8884235E23E3BE39816E29644B\ +37DA9FD767A853C899C3AAF91D0CF9FF31CC79AD965EE3C789583E2D35A2F1A3\ +505061F3EEF131A20E9042A75F0AA32DD4942A5B70E6BE3AA3F20CC621D8CC4E\ +31214AA99DCCF540A80CA3F5E2093161D59D62AC065EF5FF66D0388854DF6DE6\ +8F946E95DBDFCB48A52C495EB0D7BF1B00D79883A5EFD28536F0D5D99D521780\ +5CC4D308E6A50E75255B286902CB586FFAB43A62A49EFFDF2B7D39785D1B5EF2\ +97528509BD90AD7762AF4D62DBF9FDE7D6F26B35C183606DD1AEFDE10B79836E\ +6308AD751B25082F17011AA7B4FD91973277B8131BC20ED6E8064C9C92DD2C00\ +FF58B9354B45BD4D1C268CC078BEA5EB4371B8281EB060935274A1F071415BBA:\ +F82127A92B2B1CE42A944907BD71363921A27FBAFEEAFAC6:\ +4C10029042307407 + +B498E657E77F564CFB09C804645F7E40FB6E7C2FA60EB968E3C7D23513D5726C\ +348857B06EEE3116675596DE2FA6C576E0A01C2F95AD3B81C0D0D0D79088E568\ +09F87A67E81583828BCEDD7D154A645D73F3BC5E0D2D1DF790092019FC292D35\ +B73EB6CBAC179F95988BBD739BF3316DC8924F6B451AC11BFF0A01705A1B234D\ +F82166ABFB7EB4A4A99E9041C0B8EB7DFD89B2F110AA7D5F971F58B662906B9E\ +1EFE77B597660ED73861618CEA40535272BF1704E5349AE7A5FF16869AB91220\ +E56606E2F04B8A60DC5F667CC35AAB44CE8F6531A95DFB17CB168131DB2DA918\ +6ACB8CF395597FBBED3B0315F33E7AE148DD5D514DB1BCFE6153E39F4406B6FB\ +8F5A8700135B9F8FAE96ACC7A2E8954336F4B4F508CAECA1CA351AE5D02A0B47\ +A525E6D6171D9398EEA8BD969423EFF7704329E0249C49B3E7903C7EC514EF7E\ +543DA8A9444C8453C110F3A9963C23DA0D8412A4DA40A0C2279848DFB51FC093\ +2D5CDC742080B2080373A1B9D9D14518D1D8A9AB7F3C1E34837E3DF80FEB9D64\ +6E8E3143837F84031A894F5BB359AB194EF19851E965D0CF1531ED0011E8BCD3\ +ACB3C156361D0CA8FFD1B00CBD71444611DCD3E539C41B18F46C6036669C74F0\ +4FA49112:\ +141E77FA01EE4AC4495482C3E2D004DBC73907007B2D2A2C68349CA02738D761\ +E2F4C40F7A7A547B81B274014BE1B394A7440AEB67BAC6971522C1498A5977DC\ +390DDE6E40014BC654109F7442FA3DCBDC29DD1408D47C8C9FE39000CD5CD50E\ +E73C4D941AF0F6C0ADC66EA28EDE9A575EF66F486FB1E9FF16D70D7D6CBC2772\ +6C23356D6465923CE9637A68A145133850EDA4E743F19746E526FDE79E0B12C7\ +0E2AB8C5FFE2AA766563FAE99C0F2405AE4011CDE80764F2F8EFE1C6AE12AA04\ +9357085B25DC7E7BEF595837DFDE18C43DABB514D025B544D2ABB19A690D587A\ +7FE25BF9468F5A0E20EB4546916022E3B904C80A862CBB25DD03CDDFC4D842A1\ +D04A960C32E03AFBED6211FF003BD2ED384D379F5F8D02BD918CC47B40ABECC0\ +C0E540CC8D673D47D25BAD6F16BD12BE9A799B8B2538932D21677A0A481AD698\ +6FF193A455270451E6D4DA3CAECEEBD2FAB6FF6A15F569A29D09EDBA86B7626A\ +DB96FE9750E661C405A3542987F1E16CDB3655D70EFE3F6A1AE30C04EC069B8E\ +9D592051190306A571D5E8673E677E1AC0454A3769C7C3ACF2C222FACA2E7F03\ +9BD5C6972FC7782A96C6F350F64F4966A8E492369B6F5A911D38AB1940046F6F\ +F69D6198:\ +004742BB9488135DBAC7904BD58A56BF2F11A844821C41F9:\ +1EF01ADC9729DA44 + +013202D20D95E17606E6E7C77EDA4FBDCEF3CEAEA4E3665AF9B7AA6F4C7468A9\ +E03A382FBB0A998074552CD458522539C6ED83DBEF826DEA9EF830BCA6275FE2\ +1A9CC715C99ECBE6EA90E3AB58720B151AF341F5466FD9D1BC877C07725929FC\ +FF62A8D2B6F3040368734B3D1425F6A81A1A159EFD39E27E5D81E487B85B87E5\ +FE16C54E16E4D7DEDE7D8C4CC04789C8B0A3AE267968AD961C28A1828BF1DEE3\ +46E7662961DA3B207BB636BA0D2B5BE7D33D186D276002431BB17B549C3FAF8F\ +85582AFE78AD3E5879010E3AB3C1A4CCD14C776EF17E67A698AFD2B1941ADB45\ +F5D0444B4D06AC85051B61602233CC6162BE0360720CA01EEFDC157065D68052\ +5000ED8B1C9F633AED07420B9D04694745D0013DE91C0BEB7E7C9CCA02780116\ +91B5C47A912DDF87EEC336E12A4207370128003A347641515839A885189293F4\ +45C4BCB26148840AC667E4D48E952F68E9C89A7C5FF2B8C463A98F39B07C8104\ +A5DCDBF7B72E71E17C522CC5E0851BEFE4046E836410298EA4461569CEF948ED\ +12DCD73943435F948F431380637782D59EF8D9B6B31C175762ED6C44740D1AF0\ +84A64FA86968857933150B22595B0921D9EA37075914D638D768670F3F95F0E4\ +0D5660B2A023B17B:\ +29A49FCF039DDAF22E6531915769B12323D2A48CF1F06A71AB14AF22FF38C816\ +A8469B6678ACB7CFAC479B830C84E65F4E4090C888B5F5120347531332B3690F\ +A5A000C2904C25118BB1BCF045815DF8C0CEE58119CDECBE7A6D1F042E64DF5C\ +4578F1897900DC50D2C3567697593A9FB8929D646456C930085830929F59C4E2\ +D8262989F87146AF16A61C2A15E1C3126EE9AA97BD2EDEBAB648A098BA4BC6AD\ +5B3455FA539145E57943BA347E379CD24FE0D6BCA965DA723386FB569918179A\ +8DA0D246F70AF48C7B840A23DAC840E5D5588ADCD86BACDD5D9BB39FB71D1919\ +7AF5F3707154D14E2610DC221016FD9AA1B0755059382D620065C3EAD772AA41\ +87DD24C16BF481E21A017DA62D5E521F3DE2E60DB4BD96C3AD1BA09663143329\ +A4187C23F2ECD2DA585017071667F1C382FF3F3A3BC50BA23BF6E7863AEE19C5\ +E11032925F9BB28DDCF618F5A594B15F56D077D8123C015077F6AD464F787848\ +D195A970F1E0030978C81D2C86C86948B0DA7349517A3486480E29B827F18CDE\ +8BE517B2FE120E5FF6546575F2DFB2B45927E5C69B94FC016D44C5FC8ACEE3B9\ +6229491D8D46FB07E5158EAA021C6B69F720DD57718D928FB191B91F78DCF6AC\ +926DAAB34FA33133:\ +8190659CF5611333623FBD73CB27EBF6C9BDE2E0B4F564E9:\ +703710E9623D9919 + +795DBB320C532AEDB31CCA66CA67A437C694AAF459DA1F46F33633FDFFA9AD8D\ +E60FDC7BB6B10107177AD6540A8F6646A6632D9976479B10D7B54907C81F1489\ +09A807130A56EAA7D3DAE7F45F908CA14D9FFB78CAFCFFF2881A63FC9D60315F\ +5C35086FFDCA1A244F12DF72C5E76A8D004946911A4A8E56DD769A2BA56EDDCA\ +623CA5A67917EA3CD37E495CA925EDECCB0413759D7F2888A242ACFF15946027\ +C29243661AD28F07CBDF7CBD2159AD5FF710B31F2BBF8138857A5CCAB2A98628\ +A2F6A22B78B1F5E70B7F006CA702C6AE1A733031C70724BC1E9AA91807B5F7CE\ +D0A1DC49792B89C557B1C3C189F093471035D73ECD46557AE8111D7B7DF0708E\ +4CE1958D40D651FF4E5AC37C57F213F144B78CC22F701383AEF41F017BD4275E\ +672D9875272744C60D53F71EC77E55FDD2E4DDD7A1BF965690FF89C0FA6F0D87\ +6607A8D04A4AD292C4B2B528F376314A0378CCA764BBB4A2BB9A761EDFBA6270\ +827C222D4BD479F990ABE6824C8336021A76F4B5C5F777090787E1540254DBE3\ +C301E8103ABBF71B5016ADB11B6CE75A09ED4A5FCD6E1F593DF1A947E92E2884\ +3E807231CDC13BD5C98E245304ACE15566DC34E3AA5DB8BF2159E1997E903D64\ +DDFEACAE8E02126CB1D56BD9:\ +B943E172A63343A1DE25F7148E75DA6287C8B5B343546A2A280581112CEB3BDF\ +D270BBAABBC802249CA134027BEE0E96BC6A04EB7A34F81AB5749414558A5AB9\ +3B3D8B3686958B25B4A6423D40D6D8A743267EFB222D283AEF1032839A7804BF\ +2FB9739064C5D0D3ADA84861AF5C0C7EB7921F5B87E13D4B44E0841CC92C3C87\ +175117FFB932DB9EF0C546AE90209490B138CB9EFF67E32CC9EC218F55B596D7\ +B477F4C64924E91D7DB2FC249E24030049537CB120E3CBF63B1CEDAF930E8A67\ +5D863E21C4AFE3344057E4C368904CCED47BE9ADB0880707109781788AC56F23\ +513D014C9529E35684F519E8ED795937DEDC0734AF61A50DB9E48AF7401701F8\ +B18707D86244DDBC8E0330B2085305D0446924F30587D260FDDD6E18BEBDE4A9\ +687FA3ACE3995F386D3ED9B7B8D646DA4A44C664DF3DA832D58634F00A230261\ +1B81EB7C4C9A88C3115E1DCB55EB3B92E762AAE4FB80243B4F9C33E65179826E\ +73D57A04C0458070DC6A6C0428D1EBC4C01875B43361140B33EB67BDF3DD2C70\ +7B9B2AFCE9C7E5D2B193CB1E9ADD08AB31496D86B3F3786329CADBEE270B9BFA\ +84AAE8DE2059CE88B409FF6CB9743B2B5E4F59C4EB93565021C149CB309CF9E5\ +5F99D94B76C271ED0C89FFC1:\ +C56605CC3B7FDB9E645ECDD67F66707C6CD05B348F14CD2C:\ +4A2073674C9330FE + +39CB105721050C0EA06846CDCB0CF939692ED1A0EA2527BB8D92DE135AFBE071\ +417BAC099F3B7F7A06EA3EDD121BC333B7E670108B4BD0C3DF91353F75B452AA\ +F2B24E2D99CD0BAC055F7AC5AA4F6358719E8973E4E2E23E26E2912B93FFD5E9\ +E4CC61EF203D72ECED180F616D9ADDB797902E96337E517B481F8EF39BDC4893\ +42534703800AB246852EAEFD3E715E9DFC240515EE4EE5F74C819021A4A081B2\ +7D478C59ABB5BF83C8339E2DB5CF4AD779C62579543A8EE1CDCE1D8AF9D22EB2\ +67EB4E96D7A3771DAE1EBE3E92A1376BA6217CD351B1DFA28E76B871F55DC79F\ +2137F4A6271616DACC5DC1052BE7B01DC2DC740BE29CF8223633CA3994B6D970\ +E547F55440E2B57033BA1E412F25C97CD2417984EA264F2E95460F458C99B40A\ +D29753A43C789E8CC5D97813BF197CC64D7789DB8E7D01005596713DCBC24A7D\ +05257FAD9D635777F497BEF9B993620B76CFC8302AF18AC76A53864D53ABE4EC\ +08A02C7BEBE061ADD158C3D2805202B000D83DF112BCB7E120453AD4C347B5AE\ +CA76F76E1319639243B21591B938DAC089B828B381B0C3DDFA914011D658BD00\ +0355ECBCDF5D6A5C8086C8AF8CC6840439D9FA842DAADD0E5DFC14C87ED52FF4\ +6A33DEFAE485648A1D67588C716D4E9A:\ +5DA8B03C7F9041D7F41CF447322736D97FB954D89DB08BD936B215771583B2F2\ +20491501206A18144168EAD7CE59C279B9E8A28C7E4CCC02573A672AE08528FA\ +B030FDF7590B2A7403D960BB002460A2D1772E1CA43BD503931E13C9C4DDC2DC\ +4BD18C2982C9ADD95935E24B5D000298A3887AC27721E870D088FC2F8DD70BDF\ +0B2366CD4A2A9DA179E081DFC75532B4FD9F773C906E151CE8CF8167BB212B60\ +A0332D2AD96AA33A66D64A5752713B60637BD599AE5987CDE0B4D7B258903223\ +6050A74BD65E5D0D27828B9E3C11D1C08AE1F9FFC60A7CD735BCAEC5DBF179D7\ +3BD88639034E1F7C47E955F192E6D90F6A8B1F74F00C7CBB575755F3A21E0A02\ +7EB2F7A8A376E7695001B521154B4ACDA68E2B3399DC5FC62BA6ED1DEC3958F3\ +FBB453C957EB0610BCCC9F1177BA138FFEF23B91B2F8A45504A251302DB9690D\ +79638A25EEB406A42B759A6358EA8FF886FA9379A5223DAF765099DE4947C65C\ +DB30A3097DFD1A7467B3A739D376A48CD2942CAC17BED5E7D937ECE050D5DDE7\ +7041AFE7EBF1BB4B2D5EE6CA982492F50189EA1BDCEE220BA900FBEA1E125D64\ +83207658E46918A3B7A7D147799D56F3BCAD506F8849C327B293BD97D86FCD2B\ +7B5A3BF9241D821E5C96C1579206BD0A:\ +23410846065EA605C5720B0BC2053E5A2A331B486657D66D:\ +FD110946E8F54E87 + +FF164D432F068EF38BC3573316474CEF62A7509808F849B9657443D3118F4627\ +86DE31D174FF8BB86DE93B9D92E85117C1F2475D5B80A5CC7F8C91F2C576ADF9\ +3ED9F5B19065006C0D8D32FC1C1C13D3CEF6C93E5B018BF908C50AB8040A91BC\ +C433D56B770513E1FD2BF4B487B20ADC0767BA5A9ACE2757DD84E3411B09402A\ +FDE27B886717A71C043B00CF2F35DB291150756DFF5F748A5BF5EA6D3A66C0CF\ +08422673EF4AE2D939AD364FF6C892FF54723AF65F9E53FC93A5E439E1A09A61\ +F3E02C35F8237719C3787C16CB75077772A9363662BDCAF4D7A323D613FC2E5C\ +6611BFE8CF1D60BC20B6840CE89C96E28EF4828BC51B36C05C5BE257370718C9\ +D0F87B3B486789DB2007707B37C9CB4412E266D17256FE6C6EDED088B48DA163\ +36E0367DCD5560BA5C944F98D7AF3B113D6D6718CF7D530BB2F25B32170AF122\ +27379A542E3071EB880A999E390FEC21D772F428BBF23134A386AE761477CA68\ +D0860875A11E3B996DCABB5559FF87E64A33522BE02CB04B15C3399788940FB2\ +71167EF6E62AA26B3BF6FBA03B954342704C4007DF1780EF1BF8881B13B4BC01\ +23734D3A8DE5C38A864E40BDDED3753DD2E7CE955B79CCE31774206BE9DB4B22\ +BC8E83C6A473E76CD1A70C29B230359D741474AE:\ +C75174D425E5658053951488BB414F89A2EE1FB266DF278BE78E42DCC27461A4\ +ADC4F8F443D907A6D226189E69CEEF1801BCB7AE721F09FD2518CB0B95509571\ +AA91372B8752797E5723CA1B70949C1C9BA8F59B56777F230518932173D17E6D\ +5A7D4E8A2021902DCC244C39DEECD1DF9920A0F7A14ABBDCAF57B0D5EA207FF0\ +00C14C786786C710A0FDE97AA3D6A5F2988DC64C17138D0D45321C8409F36226\ +FDB59A73544C52AE279F0EC64AFF23623DB81349CA8753FCF7D7BB9E31FC1241\ +A88B9E701615A71D3B53B8E25A621F85F6608B01A1A07D8CB84DE5A5CBCD2AFB\ +6DF5571E13BD39011B97FEF0EFDE5446D5C2EC729176A2D715DB5B6DB96F70DE\ +E1ADEA964643AAC3D2D11FE277C8ABE07B53D4E2784D54E09CDED91CF09219C7\ +6448E6889E2E7F44FF0E908ED18511749496CFD0E2C923D6E7F6E94E8F50F6A8\ +A9F33358D612FB968A75CC73A86CF9174B0B99E14409CF1496056BF59FCBB5AC\ +504B4924AE7B2D7C62470CD35E847C0E3AFB86456366255912843832DBD393E1\ +27CEB9F87CE376247EB464E08C34DEA43E6876567B3215B56CFE5130CE1D39B9\ +F6967652182C9306CAB89BD6260FEBA65ED74908D70B00133553D022478B82DD\ +CFA7F15A874BE568BB37A6B2DB1D5E8CECF4309D:\ +9448DEFAB1274C6004C98EE85FCF97CF8E3841ED05AA05D6:\ +B909B4879F2AB8C7 + +94E86836C44E6AD45FF50CA1A0D74C5025C397B9EAF703F4912578A324DE2556\ +F06924FBCE0C7E865B129F9CB4CFAEE0837F9D101B5E8CE29272C7EE1A6AF58E\ +5EC397173B20C2682912FEDD5AC40FF0F01711010350AB88E4CB6B806DAC5D7B\ +BE7422AC1D1FD83B0DF3A8E4806B7A2921A165A02C0F22949E6D97EB6DCB0626\ +3F9519325025B7F4BA7EA7345946F575171D20150A3DEB031417F752E1092E55\ +D669052E1E24C0E550A4423DFBE018CE33197AD4CD7039C0FD962BCB900471B9\ +A1B2F001B5C0E8A40B7A3599DEE31B072DBFB81F5A459D4CDB975CE2CF984FE5\ +0144D8B29BBD1B2147197A79534AA4AB22108D4D20CA50CDFEE235B0B5AA9EB2\ +47D9E9B9873488F9E5CAFA91C1CB8839E6FC4AD39622D58300346FBB7910BD32\ +96D6827685EA80A24FD821AB914B20A7B9230CB34E056487E5A590F4E3CD2D03\ +E56CDAE09426361B608DC93D2C4E546F426C1DE6073132D497935E02A124D1CB\ +CF08E6368071E24F1D27DCD7A3B586CD66D7D215445257404D486008B7275216\ +EC6BBDDD4379AEC026AD02EAD7CA7E7B480F6839C74BB8D4FBD758FF3BA18026\ +7371CB83BF19AC6F30D9A54962CDD85BCA8FE323FBFE5FE55191370A450FB941\ +B77A7E89942F605275F8B61C8333FC189256B21D20E3C283:\ +D5AE51A811E1CD6F1BE11CED422314814B3D6CB6D8547E486AEB4C053227A39F\ +72E54DB1B517793581951534F4EAEC79D49C994D25DEFBBB96F0249B03880B73\ +0CBF723BB1C49CCB5D94A1A12D21BBEC2B8C9D58CCE5BD49475307F8BBF7F737\ +FEB52E433D516EB59EB48DA4E3CA3025275C190C4C3F306BA801E7175211EF6F\ +E4CBFCD8DF7CEE48A6A3936C0849075CFB31D572187EE18E6F057E7EEF784D37\ +D4BC28D36979E7A8D0715569D32CC6F09EEC8D27A604E07B218005EBA77537F8\ +56F7D883592D166BCB5FFEF722EB76DAFB12691A9BF8C635064F3C6C153BB8E1\ +8C1AE48D6DEC6632AB6047743C5BFEEA51B42FBA59F500426B17C3ADAD9ACDE6\ +0958C00EB25B592E183E7D54A79789D08E97B499EA1011D252C07C1ECF4389A9\ +2031B22AD673EBBC51CF30E8EBE997BDFF37E886227BFD88F3C3721EBA42C6D7\ +3688BFAD82CBD864BBC9919B2FC52B745E216D2AB8FBB6FD1A02A99D77A32D05\ +719CAA4C5438995C5456DD8E2725ABFCFF7FFCE426311AC632F3E0A929695262\ +C9709DF208EEFFBC9C02AEED55BFCCBA37998703C49279E0907FC091A17A74EF\ +43A0712996C2024F482F2988C6CF9219C21CD35A9E1DF0990C5EE26C14BE5F3A\ +7504AB439B406628161F09856E8314E83A9AEFF2000EBE4B:\ +C8F54AAF1AC36D94D2E0332FF63AF41FC4B83F9031463CCF:\ +33CB7CB2846FAB9C + +A3F7314020EB905728AAC9648E0E20A48E076775ECE129CA40332FB23F2E37D4\ +E30B5E7D7EA1917124AD8FA313430BAB8FAC8C68154F403699397A10B0D802D9\ +A933B663F4F8B4A4EFAE5C45F46ED57E0CB54CA070BDCD5D22ABD9079E7DBF09\ +598F0D97F4FF706736D52B46C197A89777E35B09FC5E5089D1F08164E90AFB28\ +D0ED03E8EF28AB434390BE895889AA6E1EBFADA0075A654ECE885B479C89135B\ +070F3B705619FFD7C42E7F0CAD0AA3B0584452D55E8FEC6EE245AE724216E776\ +2485ECBE03ADFA4E71C25AA8EBF3FFC6D570EC461A060A3E28A490F27ED34C7D\ +CEB7944BBB72D088FDD91B6CAC1B6C6975CA4B0ABC5591D167DC0EC84E172FBA\ +6887A875D59CE866ACD5ED6895B67902EDFF6419951DE5C1E337A357E7B1DC04\ +B20BB791BBEF56148AB3A5BC7EC6B9580EBADE1FEC6CDB1698EC5CDA5A99DFC4\ +B1FF10596243F6201F428DFE52F6D1034F4E31ED193165991C5EA3E6255B8F82\ +F3BF19FA2C1C9E949979DF32F665054AEDF199FBB530A9C3E91D5522504CBD51\ +A41D7EB885E12B952DE58EA1E1BB88B1DFE0D15B0DCBDA1D906BC03B1ECED138\ +6C413AC9B375687F0AE00BE6565070E019423844CE1999C20E61C5A9C216CE36\ +9510A3CBCEAE029AE651645797FB03530FADBDA8E3115191E0B3C210:\ +C7D08547D362AAF8FE7EBEA483A38C2889B0FEF3B4AC797A3529322FBE638F61\ +5338BC15A6C3AD0E779602DD2DBE821C441299B587636B5F90FCDD7215ABEBD8\ +910D3C528DF941D03CA84FE051868A782E907A8346367A353F0DCCBB7BAA8FA7\ +066B9B2E5BCF29E2D20C42F9D605C5B593B07FBBA4CD04FA9B5B587D555BE5A4\ +15C5658EBF26F774E3399E1C150E0F7CF45C9EE4C71A06D9E4D3DEDE7A51BCD5\ +36636779FBDB5FB616243759A731DAD1859012528F1AE29EC798645E951C6D36\ +9754E470ACC5C904D0DFEFC8830689BA946D7D2DE3B7CE502077B4C17337B647\ +D6EAB7AA8D48E9C1F1CE6893C69F2251DAEF2DB88259934D12AB1A4D1A4F93E4\ +9B5168C109700F9E716C7DCC6623390C3008508A0AFC987670DB44F9FFF8E5B1\ +D4021F4B121345D144ABF066757D348A0BC34D4DD9F75008066B5BA444C86ED5\ +CB02B8D8035DC77DFA56045EF607E559C3AE9389962F48AD3496D8E89236D77C\ +F668711862777B88E3E17E6680FC4A70526FA4F39688EC1C4B7E47C539FC2A20\ +3377E4ECA9F4090D9AF9ACDBA4C245F1B8342AD9093F6149D3D98A695FE5DB88\ +CD6A7961C6C56D739EEF31402EDD9EF3D80DC1D55E140A4C2BE8251D2FDFC267\ +F745682C3F67AA3BA8F5D1DC0330CD5D455BEE89AE1AB358CB490BDF:\ +2C73658F0111C07A0A75A1998E5B2246F7A3A77AD7257EDA:\ +0A8B3AF05B4687A1 + +AE7DFFE7F4926AEFBB5338070A74A9F6E91BBF11683B676653D92332A6031ED4\ +83118B948A940B211051606D97C23B26402EE761BFF6499CE4BB517702D9CC1C\ +853B42261E42CFE6626C92F026C78CB86771F2852BA6E334420D04294A453AD8\ +9CD84014EC614657C3F264D1F657C69D3DB370FBD19F338C6CA6F779540C8898\ +6EF698E484D51D87518952EE663AF8C066855624E8CFF94F9889CFA90A9E7F2F\ +6D4EC5119A6CC36F0C6551E5786A671A1EA74A5D3F6D9845A0D7764320F45FB8\ +0A8295D9C5756B91C711DFADB8535D3880CFA8025726AD4ADE8005867EBC5165\ +6C59B63AC950E1D2597CD6B353EEEF211340415CE4EC196E10F0749B890E483D\ +5FF600BAF56FE861F6DE509BDE62C57D9A50108F0D9F148677C3A4E350816C57\ +ADD907889137271A267D6943405D66D1C6F88B994CF7B9306EC688C4C0EB3E9F\ +2D7E24DB280ADB515B54C42BFE4DEADA12B164329FEF3ED502DFC5F20E6ABA1E\ +DB0F071D1248DB67B8CE6DF2B714ECC3FE760BBE70C5E99D532B797274899592\ +41AE6C64472BA435E0B0E51989D9C20F3469290C7A9CEF78DC9877D08B4A0D70\ +9E2A50A954E1F35AB9846AE42E4CCD466667EB19EC31F93946DE481738E812B7\ +304C70807ADED09A66E6783B96F017D95C86DF0BB39EBFE5581A4414644210F3:\ +50F8886790779DEDB925B5CA21E0F071605ED5418B440B79ECCA476281C85130\ +20752B6EFE34CA00DEF44AF65EA9E98AEADFA9B646BA3A65B8FEC36F414CD0D9\ +71AC921644DFCD11774BA16398160DA06C6A5AF3DB6F9A3D2D012E573499E7E8\ +4B4324395AC646B1DE374CA0C194FC325FEA7345F1A6FB8F0702044F61912C85\ +9F8143B4583D50041E91CBB1D520A5CE3AF83F00D4D2C6EED07494F275FE4558\ +B46669D66FA8E268AAE3FDDF663B0A9D36381E6839BC81E0512F767E32195F48\ +57BF604A9C0786E4F63F36E0650426A8858DAAB71616FCB822C69716AA05E0A1\ +2E0A7B37EC294593703525CE56EA77A554BEA5061E7AB7DB4076C035B0544C6B\ +49EEA6E968EDE4AD659359B8BBC52D81D547130B6581BA3138308598FEAEBF55\ +4276696E84B38BA0344AA9E80139363590685EC282FE2FC9E243897A28A24CA8\ +9254893DA7C5DF62B700992503BE2B91B8588080BFD61A5CD30F03C46A2099E8\ +8EC7E118A04080D55E064AD9D5D5CF3D00727CC66D1DACE00D3F0BAF5F24EEE6\ +EE80187A6183F2F3A9E98B6A8131F549D8F7AF8FA2BF63AF0CFD227661EA5655\ +51E1535EC45A6D4219BA9FB6DE4732FAAC383032A7D4F90149277486E5F76D8C\ +ED94FD80030E285E4F54DE215C8ED63402A963B6526BC3C9BE5E28C6B7C02D1F:\ +D6D8F361FFDD7D2DE03D13FFAE2C81551A4570312D58EC62:\ +F6A50F45C5AA206C + +653E5169FCBFC8E0C9CCF57474E5F19C88A359E1A19770274394EF9D9CDB4ED9\ +457A137ABA3D09644D26389CA6C0ED305A45A6C831AD15766F45885E245A6172\ +6B4A10592A8C09B2306096592B6457385CC9095952C19033C389CEFEE6C44EB8\ +8F330DE1CCEF569FF52AFDFA1A53DB226E6BFD0B5C27402C4443A466B494BEF3\ +1F24A851FA78AD668C159EEE859B24926ADAEB4F9D654F1954DA30F1A6CEB172\ +CD8CEA39B7ACC205C65F7AD550F9835D6B6C35DB88F7B79663B7B5A5317ABEC5\ +7C9412184AC42B5B3574571180CC808F5ADAAC97A5EC9F8D957F547742ED420C\ +1760B9176B37CA4251B393828C0BA648841812CA3137B1FC8B90DA7A1E3C0498\ +FD579F9E3DC1A590B6775EA5B5A23C811C0C8E638422ADE05F0432083CE498BD\ +CCE6D69B1C57C37C1A95C28471DACF424A1D94BEC17E7F6432E680E24757BF9E\ +1026585C65A40CD44F78C695C2185E7E10C364B760DCFE5FBCB897B4FECA55E1\ +488F95FC58E3BAD40B205F9C74B2F38924253D68929C6E7D3FA160E8D77045C0\ +5CC7517D6C7B960543DD8C04E5FC5D604BBD15E0F9CB5033BAD7B11EFAD14F99\ +0D7F887F555C19E01224035A4AC43D6EA6BEA8C6B796B5E991EF8DA089981E23\ +1A9EFD24B49CD38F8114F2A41C18489780F78E0A1A900152FAC2C253952C2720\ +9FC9DC04:\ +301759A39A270E4DA92FA0CE410EBF3DABB914CA0BCCE4683BA76BE517279174\ +846CEFB1A728F211826DD38ADF512BC2E2923068687FBF9C5EC9F602517CBABD\ +C190EE50E578D346A809EFDCB3A33294AF734FF6226643C7FCAFD86B37A5DB10\ +8379D6ECCC41A0BF30647AA85B4FAB76741256A5D1C45B509F57150E88EDCE9C\ +1EA8001E98C226252E2EE85F21FF7E75DD330FDC9054AC82CF4B8E3339BC6FF0\ +DEC415ED379810D6EAE3D94073606352857BC52AEC07D7AFA43A8B2461C5A617\ +022C2AF5FEAF05BC2423256FD148A68696B8604143132AE5F59A7AB984DFE6E0\ +50E3B279CA4294DD73E514B48631E20F78EAA96F40E749FD810FA48B3D5EEF1C\ +0FD66B14F82305FAF6D08D04A5755F2880036F274BA069D9364C8616B812F229\ +679805B707E6C24957D0F112F694AA89027E2524A0F624ED8E8CF9127A0D5A1A\ +748771CFFC646C819A6B30BCB1BAA11F906BA855DBE790516BB6BF97F7B03DC7\ +5AB06C81EFE4046A21212083CD62D30E250AE261FF119424603A32C199DBE118\ +0261A338128301F43557077EF35E4BFC8924D23BB9F7A3FE733583CF6D850C67\ +926C6F082C21B2BA7E0D9A52289D8B0E37E861BB8224AD24DB872A4FAEFFD93F\ +D1DEC41F8C1916B4F35D12FCFE4A5324A37D2F45C0D2C3F9BCA21D1554CB6ACB\ +A88FC548:\ +A9D0FDA8E66738A4E3E5E8B3C4B4A4E0F6D9EED74A1B5C77:\ +CDD7DA51E14D237B + +A2430BEE2B78B787A3711A1D3AFE40E0735C88610DD04F7AF71A1EC3FC6A5F51\ +6BCB72E6E6FC23F49902A86A06633C409333B0B7A10A6D795548008C8E62CDC7\ +CBE8910FF16330B39C9F440684382562F14CC2A2597A0474C49FFB8E7DA2A445\ +3DAF492062F69B7DA5EF4BD9E080B950A184B20639ACDF459EDEFCD4E43EECE0\ +524CE005144DCDB5BEF5143C5F6117EF49794AB8EA70A0DB889D1C2EEC121151\ +1B5C16C6C4000EDFABB59FAA6278864ABF61DC3B7B91D02272D69EE06BC195DB\ +463CC5E48138093DCDF26120F393A61B18212BE4844738CA17E51AD52B78665C\ +C4CEED7469511F2C01FBAA59A65A033A87792F4AD205A4DEDF9B9C91F0436622\ +7FA1322F6CD39DCDE3B8BFFFEB50AC052F48CBAB2CA14798458B3B9A16B62234\ +91C2B785234390339EE88E3C7EEAD5458EB03FA69A3F511933AE0F079A2A2D5E\ +9F2684446AD707F6F825CD792C1A50C50E47E537B816B89D2E9C126B9A2CC40E\ +0ADF33D56DCDBD344734CC651D5243080B0152FBC5EEABD59CF4E784325AC9A0\ +58D8460C6D557DA9B418D08FD836975D8E8D7B47C3531BF1E208A9AD1AAF3E28\ +62FF586927F344570F3DB06A3F7EACFF4D67554377645F850B0821343534EA46\ +2AD8127299D4D549CEFB21AED61A8FC921AFAC85A957CBD12262DFACAB9E269D\ +E4E42F1667B5E3C2:\ +BEE849F8FF046CAB988F6AE1311AF3C2FA5CA6CE594EE9DA7D8A7EBD065179DA\ +D6A141EDA654ED454F46821F8E484D805BB375FC081D0A53AC35DBABDA69C43F\ +20E8FD10CC5CBC65A6BA7FDDBDDCAA111B07FB5F6B091EE3A87660EF5518F7C0\ +86D8A8375243F9011BA6433ADD2223F3B8CFA96CCBF8059595ED3908C35655E2\ +7D97CEFE653321E48D1CEA8B8426488E50AA4CD30775EAF55C3A84BFF61761D6\ +2AEC030518ACE8B5417333B9E790C1072ACC36ED6FC3D40822F63ED74E183471\ +A2FAE3128F61D2100E2B842C4C1ED81CB6F2DB031F94B7F4E39D170B1FAB2024\ +70BD3A70F49E20141058B549013CC29DAC64CB3C56EBF50F0EEFFBECE9B226EF\ +7D40440DB8AC592CB7A16FA1E41190174D70DFCF04DE7F384EAB679D30DBA803\ +2E32472858F9154417DEEF3224992F1B9AFA4932233BCC6A03B049281E7061AB\ +092C820E68AE4C57E5B578728DC89C8095B814A50DBE15F3516611939D77DD6E\ +3A5DCDD9696A89C3C369AA2908E9ED3A771983BA81526F956D8B3BDAA33F6008\ +69EB76BE506AEF07B1C68BFE1E423AC6D10E4ECA7D40A35691FFCDD4109AEFC2\ +65C7BEF396545A052F24FDF563E73C767C934D8D1ED19BAA6D2D7CF72455B6D2\ +6F2C7DD1017E1C2C2651BB1E61EA71C9CE6D9E818AEEA5FBBC81797867B60658\ +2E7BBCE28538FD07:\ +0F33CEF21D511D5B58B022428E60664D17E853D031EFF74B:\ +0A6B64BC12561FB6 + +A33B7D0F50A3AE535EE81517D4776C461BCF7464C2F155449D563FF5C70CBE9A\ +749A13CD728133C778B31ED75C962C170EDDDC34F21C8D4C3492AF837DEDC247\ +57D1C344BB2A92E3F604981DE16E3222B73E5E3266D5967420EA25630117F84A\ +E70EED77C8B16E53F61901B7A936508D469CF3062BF4578EBE0FA3C70AE9402D\ +BF1DE0380AB20CE99656F5421C2B3436E1EFEDEC902D938371D01063B9C2F984\ +1EA22A896791C4916E42BE6952234E6AA29069EE8D61A10B84C44CCBD5AF7A4D\ +05F6BC02FE443AD794D32B18F05629CB52BD91DC514E7F99E61839A3D0E3FC5D\ +C34B286010B6B9761DC2140C5FF643869B860E2444C0097D89287127AD661783\ +2477CFB94CAF234D0F6877CD36D805ED65DB35B4B8BF4985D8FCA8C70D57C50F\ +1A41D43229A7C88EA1F4299CDD56508B6CCB07FD3AABB9AEC3579FC915483C9E\ +149B6F42A967F84831194C72B8AAC97484CFA2027FAB6FB876980479A7312F02\ +0C25E5C9071816039EDAE8A20DCBE76F89563337A7FEE287C51624621807FDC7\ +6769B375E7D98332DFBFDB8B4F5C1882E907FBD39FE2C8A908998AB7D3E663E1\ +73E13B9083316CAB80C8583C3556D25420C69E8418040BF621DDDBABC758AAF7\ +00115BF1372FA420F2E6E3D22B8CD448809CA1AECD4A276BFAD23EF020454EA1\ +459CF05EA99725C74FFF119D:\ +4B4C7B53B4E0BC28E7C7BEAF6AF925E324F3A3C0454240B7107560409FBEA642\ +566BD252DB8681FC83EFA4E6DA54C4C2ABF853B6A4FDAB91F9E4F8599455CB10\ +DB8FB7481CD2D1E69673450D882CACEBF3912078A1597A28FA8F6D30165696D6\ +EAB0B5F7800F6519193E18F01F736C0026666CB40CD38B66B43572847D4EBF98\ +1894D8DA25C69707C739995A5635F905E25C2AEB33EC5B972EEE04AF00EACCF4\ +3764B1819D6EFF7E5D97E35A167009C01FBC7F0C24C29838D6EDAB8E508BB1AE\ +A3FDD2E65B564A5539ABAFC877717A8D43A269AAAE8EF5F84B5CB290C60164F3\ +00F2DA2CFACD52476C5710C930CA033F832873B4B84AA15C557CCCF4A5895DE1\ +2F444C8E0CFC7FA722EF445C65F14C4A15A372AE3DE624B3BF4184DFAA65BF69\ +3147B50637D4465C62424F644760F018D36643D5C959BE24AD9AAD07C9AFEFFA\ +4E6751AA58CDB91478EBF536567F8614B6726F266A726B9B79B178CCCF5E2069\ +372B27640360A3D647FB7FF6BFB49BA29B3B8961316577D6423DA51703F8D67D\ +B5CF359EDD938361CF62CC84F7BBC9408B2172D08E574C347D2D669453D786DD\ +72A48074D283B6929B1EF4304722433C149614A6B25669111EDBA9DAB34B1D4D\ +9970C1310CDD9246A5D250DAE9D7AEBEFF16E70E2FFF073239A4202B17413B8D\ +D86C6E26D9DC90A7BAFFC357:\ +3F9EF31A91BDDC965C48D6DF92F1C2B094A47C2E5F5F0E06:\ +E0CFD4BCD2DC6B55 + +ABCDECCCEE654A4B3908E39259E750AC8875F1AED64A3B13D20CF3DF54B24F11\ +6D5C1A3CEE7AE3330D0EFAD04CF87E29BA14BF02AFF8C066B41B08A0A0AF3E87\ +A04933C4B947DDCCA09BC7ED0FF6BB1399FB9DF9A9202C8A7202BB8FB1642E10\ +14883FEB3D1C57F9D8030FCB20911AAF7410EA89F19DBFDDB006783A5B4D18F7\ +E8664DB8EA8E3E4511F82F3E12D9EB734523795213EEB54D3CC4C077D62E89BF\ +61C34670A07E7871C664756E4C4A2F645799C0F74BA9487EE7CEBF7EFB87ADDD\ +11087A39FD768C275BBCF5CC3CBBD8CFBCDFAECB405B16AD243782FAC87E348E\ +BD1EBA3DC7135DF6BB92E8D952D8AFB7A8198206ECCCC09291E0015D9C516895\ +B9AE4A31909936CD1D31D614E39166C8EDFA72424867B9EBBBF10654DE6122B5\ +6EDB4EDF03E0FA8B91E015543B8DFAE0034A46B49BC8755BE3C846524FCEF2BE\ +AFB3E845F0E84C77CBB578C5B911C5E76BD56317D7975ECFCCD490FC23E2ECA7\ +C1DC4EA41BB28129782ADA77E13ED32EF1CC4C5A3EFBC85AEEDF51A310913055\ +745B2C26C7C292C432934D1B9B3E6AB6FE58AE59CFCF95BDAC939EDC635D80A8\ +209CD418B65D1F31FC7C8B11F4539966E6AC0534A5953C88E80E74970A8B2A17\ +1232DC112E6BD67A9D2B07D020265ECBC75FE328951705E2DEA26B782FF879CA\ +13263348433820E18993FC2E22FF8732:\ +DDBB478CFC853BD0FF6E51D1FB5E84C5772FE3AB3FA46B59CEE71B6CF7E07D8D\ +16DBF7E14C13D16578A1988D47F64C000850DB304EEAAA5E2DFF5818567C2EC4\ +52174918EC045B54E59FC27D31695F9503FECDAEEC2E96AF8BC170D763390CB8\ +A2E2D215E521D8BC1C9A2F9B7FBAFE70B63202675B65F9A9F333F41154DAC6DE\ +0B14D0A614CA3AB325A765BC21A73FB333171959A329538AEFB9B30118DA972C\ +0A33B38A4D0FAF1C31E6C9E7867369720CA968642E56B828F8B4E8607E8D35B7\ +2196416B206335379E12CDB1EEF8C8F41BB00F6C9071940040C3B22D396851FA\ +C1A90CD7993E58B8B1D5D31CC594A3F439CBC7DCF70D19E53F0E3BFF3EFB9101\ +D7B63F2A175005CE8C2ACC01434C6AAA0F82433DFAF40EEFE3ED7C0B39C56546\ +1A22DF1899DC216892A41744DD623C58EF8C28B300E9D9137DC04396C67EE582\ +58E6681C95CBCD8BB23073FC886351F5EC6C9219ED95E0F42C72CF7B62B7F4DB\ +A8605D9B15E5C0018A41582DF3CBF3BA7764A0EF4D0140BA79EB698846E32DFB\ +9E0C84741A7E21B059F6C9F3B27E5C26D708A92A275BFF00D0C40F6E06A340AA\ +F2BB44D24A60A555FA59DEAF6AAF5790D927FD1F29EA0E0790181C5B2FED8772\ +846AE5A80D59BC9FF15A5276590FC8E64879533E862BF264CD539EFAE2C3775F\ +CF3ECD9D07B74F670E460CECE79E52EA:\ +E963967A40FA1B96CF35CA1886CB0A200974C968007216C4:\ +C7F1DA502B161586 + +0B9568AEEFAF01DE0FC072FA1F8F10EE4CC157F607EA37075752BF49C49CD914\ +81A7F9F62522C2BF8D7F4DA1232A86020EFF960C8F7B73AA6BA91C40A15A34FE\ +E766DD13E57B9AF0B24FC1A3D5154ED1B09956ECA158741B55F464041CC0FEE2\ +2A010270BC596A0BF988CE9199CFBDB82B3B0075C4EFD1F20EB9E1D915D6A907\ +58502EBB2EF76A6EF7BD565C6DFE8AEF96661ED4FD0078C0D3A97249473911D1\ +4F60B2BBD0ADE8EA6CBF99030BEA5210620670C9447A70D6ADD2EBA0064C8F0D\ +FA7C8B354C89209C760556F6DE1A586F898CA171A1F3460E370217E4E5143E85\ +5988C70981EEFA25F177095EA3F1E3EC6FC1CCDAA6BF5310C8849CBE5F5525A8\ +B9C0D2E12DB5730B750D29AD656A644310365B0839F069DCAC8868B60F5F68B6\ +510019EDD81544B0098179FC2D153D224A19BD2BF4889FFD4712E138ECB82F2F\ +2800C9759AB5FA2B49052BC63703CB2125D0BFD74BAD142DBE4613942B409764\ +3A233098B75C58584DEB1C31F8058D052A9BDA7EBAD241B1D4A3C62EE1A9F3F3\ +A64EA96C712088DF0D04D4EC00EB9A123BA4CA039374F8037C1C3BB49FF2E1D1\ +77669C0BF6AE9E506A226C569F2D27AAFF9F3B2C6D44B7209BE29E2959CF93E0\ +40EACBABCCAA898B508FF281AAE975308A3E4BCA8740A05C17D5461041BED828\ +FA34699CB19FD50CB7F502CF7F1A483ECEFD69E7:\ +1F68542DDD508744386AF7313C5B46B9B36CC1F862F26338948ADC490E1398F1\ +18ACC5244B5723DE0F44ADF5797D289E13A4D13378D33E3CA6E777F3762CDEA2\ +AC2083668A1D2EE9B330F2D688FEC8629515953848362EF3D77B5308E1637A0F\ +ED9DD590D42A88392B2B7E75E9B9A4077869A2BAE5585E60F2E3F0564578C3EF\ +F508EF1E202900698CAADBF3121621AB6C8B2A23076F114BE5F8249B4D3BC441\ +ED49F66160CF65FB5E5EAFA1CFB47B3CCCB142FBF947A4656E22313C7258CB69\ +180B97C5A6B94028E9A94CA95F392405E18DA31815F2ED7D8C921D0CE617458B\ +14782A597F29505A1DC68D3999548FFEFFBF5CED35279A73FD404DACA8AADE27\ +C3194F033CC08CA840EFD5621F97AD8E4FC5D7797D8465AFE168630543B4FB89\ +3A6428FD340FBA18496F5DB05FCB9E43EB009F10A4D44FA5F116E9441A32A652\ +A34E1703622F4C28FB77BB17A2DF9FE5B112E3695152693142E425753D246416\ +41951479A90C879ECEF77417503DB0CD081C13BC879ADBAF4110C13F19BF69C5\ +A7C260041847F394CF41481465C63F6E5F552543EF45DF25739C8B4CC46BD76B\ +2C9A8E43F614C37BC1D19AEC9ACCBADF07BDF053C5AF119030DEE90C485D359D\ +763F124E7DA7EC3D1D366BCACECF7FBFAEEE4E19772A7CC9733D4B03848664CC\ +D7D0A679ABD51D0A41BE05F62F3A120B381C4B16:\ +20EF4A13DF4132039A177078C0A095BB8B4D5CD990818535:\ +CFB3079EE79921DF + +22D74C51876400184E31C74A0F3EE5843ED57A59EBE4E5A556B56078F881990D\ +D2CF2DA5C7BD08FA877A62981E698927039F278FB7080EF036DCABB3F5AA742B\ +DC2AF907A9AF315B77C98B21E3581B668D9F131B42E4729F25597D277F912280\ +8870475CA96F15F0C6B9303B7BFD97B5BF79FC5BC2D190A52764841C2DD68E7B\ +3C5853233674E3238EBAC0FC9AAF0F9DA253D1215092CF192EBD573AD0A5CA4B\ +CFF708391EF0AE8154C393CEFF8CA5E5B7157AFEE5917C0DA6A4C285A5E2C328\ +205BAEF3BF39FA0F1E145DD072BF43687DE36E4F524E493169D01D274E6C97D4\ +1E9C592A5815FF839CF0C39877BAA2F479339D62B770AFAD555E44EDEA781185\ +C6D76D186C0FEF2F96006378A0C7CBEE19E7F8FCB52B774FD9564302FB494C87\ +A598BB9160B4D44C51B6694E3314ED52EF7619A7D98C33A6655A702E279DDF5C\ +8024A7E7922B148555E69951380250086BA3565D3E806B719399AED264637FAE\ +080ED33B4B0FA8B76CBA3C05B8D81B29CB43A79286B444ED84EA2DA7DA657F6E\ +F76BF338D28526AF9482E15ED69F8712CAD5293EA86B2540B9B1BFDC726243B3\ +C065D1FEC80C50601C6293CA822BB5257C60E5D49F14FA1875C46BC42054B414\ +DC4B1D6152C4EE939CFC7F1AC456E9BCC1CAAE61ECA6071437BAD0A6E21CB2F4\ +3B77E42C560DD1293DB5FD0EBFA36115DDB5943BBA34BC10:\ +A8BFEC976102A91234A58944FEA83171C7D93D24277350B3CF1123D62D50B78F\ +6E3EDB3EBDC2823881286614D6B3BA2B81B9445CC78B624D570BAF46C4EB2DA0\ +D1790856BB56AC46E8C418F7B82A315B0BDD5E1FF50AAE5CDD786A069767678D\ +A38A66DC351A563FC31C438B6D2BABD1EBBBFE576359FF35652E06E0539309A1\ +E32A924658BA34AC514E3417AD3DB053DA2947FDBB46875F5A2ABF16F7E8D34C\ +F067A7DB89B16226FD16F474822968D42C076BF52DAB16414711FD4986453E08\ +5CC78AE5E6B957B8F4168D85C0E2C4457AC11CCDD2BC42E6B3315623B091F0BB\ +BD38B2FC2DCCBDC4AABF610DC078621C50B07A6343A1A8442E0D5B9F8A0A9679\ +FDFBD4DBD44818FD92570FB1C66142710A40664F5788771FDADF877A8CF0542D\ +7582E3ADBD2C9464E329177AC757502A2AF907FCBE79F7C040BB4DE56539BAF3\ +24ED42045CAE55181E3EF43350CF2F8189A403C6AAE6D749F5B42F3D2327363C\ +B21F1CB805A041AC2E4F6C1AA399BB17CD856B513258C29945505CA8A1D8E287\ +1A83E56B69AD3806332D404EC2DEE586EB64DE316AEF8AAA65C08C4410395E21\ +3955CE27A7E036ED6E62F68CB4B6D342CBB2187311900489B9FBC78BF204964E\ +298C219AA10AB9B12B64621DEEA48CA6F73E8CD638123A4107FA392C5345129B\ +09533971A6DDAF22B462700AC85CAF79BB6A0241E0A1E6AE:\ +299C903D9FD23A9C5D88EE6837A09304A6BB359802D1DD02:\ +160A8EAD3112071E + +61FE1D3F0620C7BA9D93B5D457CF2433F7AB42BB25492F8A5BB7F55D031A5871\ +CD054A05544247C8F04DF692653A8C887E5FFB482F0DF760DC95EF6D3EEB6D89\ +50D0D3686E30F9464FB4F81B54F96B85F1F0A7B76E93E62B3DF152A44D3A82A6\ +AEF7817DAAA724BDB5B2AF4DBAFFD6BDE7E8FDFB30C5D112308A394048B59C2A\ +EF403A62F38157529E27668AB907CF97EA49A214D16CCF6F22D7B9F673E29C58\ +F44C2BE9134E12C1FC6AD13F846C3E4E2B738A3413810EFCC7BC8CBFC87D7161\ +1A00030B2306C3ED8B17A4A71749696A53FEDE8B5DE94707232BEE81C84AA07C\ +A7D0686FD026748AD1E2E813DE666D2C36B99CC18901B99503D53D2BF7EBAAB9\ +B58EB26AE05C0790FC002DA29419B04351E9BDD0D310FE3A4AA8D50209A0DE3C\ +312AF5C61FC3F9D7D932C37A8A8361D7AB813051B2A3DCE0B6F8B95BD4EC4475\ +6639465DBE1042A046C2719D5590020F6A4E1B295143545FA1CEA183FFC6A809\ +157678BD0F8212C3995A494FFD60FC58EE002129E56CB236169793B999D92B30\ +4026C28802A1F380DB4B35B89DDE35719E32A8C183FFF45C6F8BD0CB485B1B38\ +C508EB1DA4DA151A75A552CB2120CF7C5199B4E157606607119F7869167526A8\ +F3CC5BE02CFE4F37DE43CD5D026AA210984307C73E40329A5A4B503890B0B82D\ +BD68C79D2C8839FDF534F496755EAA0130DA0EBC0E31E64F561EAB12:\ +4CBC7466274898801916701BB98617BDB7A55A89561F4DB89B36B6C88E192776\ +F7FAB7FF4BF9039B8F2521F1D4F5E19F3EF57E18A91B7128C5FBD507ABDF4B15\ +95F99AF60C7F340578DE0523B2D5FD8F3BC81B997DEFC8E3F304C57A3533AF11\ +D3604621980DBF1A96A33FE89901BF65EAC0C7AF5184100689904C7D2C30CEBD\ +8398F4E33DEB2F3CCB9AFB41CC5895E614D690323DD5A32CD379247B2E325783\ +73281F6B53AC37009F9CC23947FE3DDDA14EB89D157425418A10CC0BF69192EF\ +1C63CF4869EF382EBEF0CD208788E3C7B5063E5FAB9079044520885D242979E5\ +78BF20CF1F04C6E5B623269F48715BC58D2F74C7B4F5B7145EDF96139F73F7EA\ +52072AD9ADD0BAE79AC1961F9A5359EC322DECC5007019B6C1B3F93E19CD2A16\ +17CC55F8E9AF9BBAA3E25577BE7393D30C23902DD524906B57F5FED71577C40D\ +072FCE4F0D61885E28321F4E6F1C5AE784ABBC154E348565602A8C9D16EAC8A8\ +7F0C4F18FB8B4C587E147AB26F57DEADA50C1E5C31BB0920E9B85E40CB050643\ +E2FF19A583CD50454CE26368BDC0EED0FE82710F43138C1F7AA514A53335B05E\ +65291827A1D829700FAE7F68810E4F82E9B58CBB66401CEA0B662260339A0736\ +ED29007DFDCDA45CB1FF76EC6548BA5AD6C4EAA0D8CE9CFA949652325EA9249F\ +2AE7A38F88F60E9205192E2CB997E415AF5FCEDCE4D850ED2B2A44DD:\ +0C3B364010A5C0D93A13532F4C8AAA223D50ACAE66A74136:\ +BC05FC6E02732767 + +FFF24DCBE1447BE1D5711BAE7EC2659303A3443519ECC5993F06C2B34A714F8E\ +C4EC862B2BB6B5F1733E5CEC90468EA8B2E1E722B4C2EEAEE6DF43DA3D4CC0C8\ +EE36260E45E71D2FD9067DA44A1F4E25F58552D4643F45079BB52E58CDB84B2E\ +2846AF57E6A583157D5C898030BD57DFE19870128DCF0B6D03BEF58334F7DF54\ +F620BDD8FE7E001506331C5F9C2D6B40F88D8AA79BB60CE6BB71D66E3675096F\ +1FFE730ACA82649B0FD3C52A6D52D55AB9FB385002E18849BEDAA8E075326224\ +F194EA2726A9FC412063FFA1ABE1F191A35EAE0AAF1A137F8BB3388CBBF4FCB9\ +804D2E24EA21501582ED7CA4F4A2959A032265D3BAB06F88F084C771761C4E53\ +9248859C818AE82DC4AE12291C4F4C107BAA031D4BB78E2B0636E0F825146D75\ +4AB87A420F8622B2C73667C50977EC0FB654D7612E2578B646DC5B84BB0EE90C\ +FD40C53831BB6F39940A98B1A0A9852CAFFFD3FB93A04676B736D1552996E503\ +ADD196FF5D99703DD3D2B91053F8BB45791331128D52972FF52A52A1D48FFB74\ +48DAE01FCCAA8B24A61CDEFFF171CF1E06038950C09BE254A7B64580082D09FD\ +CF17A8CC30A234ACE62F434DB980C0E4D54475BC0DFC755BFA84C1C912A5E054\ +5F8779E3EAD6251674C937DD3E43B74E87BE10FD1F947E7FA91F7BEADBFBAB9D\ +89FBB22997621BCBCC1A40F0389C68FA852E98FE19FB3CD7681D6111FD2B0150:\ +D5BA6D89EAD46B65918F5E7B48CA070405E60FA10D6128AE9EFB099E467C417A\ +0AAAB7C27A19DEE540A68F5D3C20399F9873419FEFB2A4444AC4392FBA747A24\ +86C1A7BD232089E182BBBEC20975D38EDE288DDC2EA0BA993D536A2F346304D5\ +9E90B7F47F4C877857FC812D53563189F81FAE9CF8DF19A40C6B68F0774A0E0F\ +F67E01CAAF18E725FDA8B1245FDD1783143A146A5AEEE6BF98EDE27A4916452B\ +B0EE509D26EA8EF2ACD80402C3F927A91F0F982DBDD7AE08E556720F195BACBD\ +AA30FB252F54BAF3DAB9F859AC8065EE6725DF20F05965BADB31C7629C664D0E\ +42CFE925C4D8FF4694DF23C48D33495A1D7A860B27B49F93ACA2544F523EC0DF\ +C10CAED0E7094F0C7582460C68EE922A1B9C93248979C23FA9DDE6FB17E2B583\ +285090FE61813C443AD3CE0411C9B53F3233088863074CBA8E63837F6EBA0A85\ +90963797E8E238608ED3A3201A472F561257238D5434D719037F35C4E2011E43\ +C5A9817DF6D4AACF056EBF68214BC1E89F3395D2838EA4E313606BCA816E813A\ +5E6C13471316288D03A6B4D9109480A3E3162FBF0C051553CAB4AB4BBCF2031D\ +156C81BBF40D115A9035ACA04EDF9F38A26D4533EE53F39F1D5AFF2FBD1F7261\ +F2DAB62D0931FC334D1F5AB869AB1BF11E687E18A8AAC18B35EBCB594D2CDB77\ +0F01648F6D132A963375049E137D756997F46ACA56C5EDCF347926E6B67277A7:\ +BA9FCFE6E8E1F77EA676F3A94DBDC534860D138668519AD6:\ +8782B005DAE54235 + +7E4A3175450AE6168E6647319B754D765EA933316AD38083332D3EC7BFC27B67\ +F3FCFA4FBBD513362BFCCB9B775BA250A2B32705A97F6188941EB58D7DF1FB54\ +DEB7DD98864FE8B0CF06F2BDE8C54DB44365061B0AC797D67895A593C7B93B48\ +1E0B16782B638821304676BC9CC6C4E8C19A5DED2C4D939D4A247005CCE4BE41\ +F7FC41128E45C5E4ABD528F440CF7DD9A0FDC4E56FA5B377282F9B582434F972\ +7D6A7015EE7EE2A250A0A63FDD4FD05C3C9ED401D3387C75C4B4E4E1BC3A9ED0\ +5D119E17557E89690DD7207FD8796F8DFA3031BAC20AFA355A97DD43EC97B5AC\ +AB96C0BBD8A4ED22D3A39B3DE7BCE65BFD3EA5F259EC0DF383BF9AF81CDBC50E\ +6287DBB64425E792279ADD9DBDDA90F409F4427A821FCD7141CA412594FA1BC0\ +A82918380181ABA6F906925B78F867247AA91D8DEE8500F1484488EC0151DA10\ +3AE98B51AA8811F394B4BB8D50D3A563D291E9A9C89B933765B39F31F8138502\ +83A9F1EEE6770FCE5432759D504F5DA1D221F3C1A3787BF1E9FA611A55FD6941\ +7F60D0C7CDA5E271602A72E8EB21AA9759F9D1BE29C72953F3CA2AFC95034D68\ +E2683A295F31FB799068886AD1ABCE47B87A2517C7CC234BB60498779E25CA3C\ +A3610C1F0AB186A2040F554E92F849FC1CC7E083CC6649575D037B61C3945CA7\ +DF0760ABAB83FE4D92906E3C4C8C2BA4C15AF61CC6E58EC4C8801E6C94141E9B\ +1EBAAB4A:\ +2111619CD276C8D5110EC5CCAA217AEA3728412FC53283EE1EB15EB6195DC4DF\ +15A9206EE1803858C7F8ED428397A353B29ED0B7F4C8725F3ECF6A1D23BAC955\ +ED57EE53BDF1DD04DD545DECD9617BFD562E89A17AA59E4621718AC2D533D73F\ +ED11AF9BEE9D4BB492872B4D9231D874992AACA5432A4C682961F008AB83E436\ +556863A9BC3392D4999BC26832F8189C1AFFF6A4C3D7EBAA913BAF4E422B7CAD\ +D8B0B8EA94E7D7728C2B6D459A3DF6733E0BE36B4EF63EDF9223ED0EDE17FC15\ +F556D79E1822BD9D1C0FA45A061F6CA43FBF97CBC64E96762AF59EC39E674492\ +E3E96AEF4F09C4F396E6033059ED0A87DC1160EC55047A4C48B48EF8A1E5BE8B\ +9DDA609697061D20E6E6964546367506CD3D74A87CB349D5A5760CAEFCD2C21B\ +5E005FB5D1C17AF372417EF157C6B32627C7459C031421145E20C08ACA84BD17\ +7D4F95426CA93F129DD9EEE74E532AEA737882B230A969F268DE722B97190ED7\ +EF538D05EEC2DFF4BC89002306FC139143C8503B2C77B8262C7C3DB0C43EE56E\ +9F41E8E038781951D67F5A1DF5268430683736BA03839CE52FF5AACC75B1459F\ +319282E072A6CE3800722F2550780C9EB5DB283A4214A9BE3D087CDF17B53CF2\ +53A303D5C3AD95D451AEE896ACB657C12B9DC42C6ADD5DC46D085D1CCA7DA9B3\ +29E1C5C7F5EA0D19773895EC10A9A5AA6716CF25126AF5DA6978003CB0E9CE4B\ +F723CDEA:\ +D78DC039B9F1C25BE368712FFFA0EEAD0F9373D1BFA68CAB:\ +4C079826FB98EA25 + +F47B2AACAF0711AD04EC04C760D5CF3BE9BE42CAE6272CFF7172F4B0F7F1235A\ +6B1195B0AE0CF39F28E919040EF7D34CC6FDED0872106A8BA2969CA6EEDE6755\ +6CABEC04DB7896892DACAD714C8D10CD3120B79E5D0E886972064786699FCE1A\ +9343982A08542B7C3D96BC02FF72CEF2381F240A2EF062687E108E5BB3F9CA2D\ +048AA03573B08792C0D89BAF4714D1D33CF59794C9A8C6D83F604B2DC920A5DF\ +13FAB79C6C58F32046C805036FD56B3DC271DC5885243A0317211835BB5CB852\ +A4CAA08FF5662A4859C06228B73320A0FD1354CD2A0AF64C4DF0E91337576C35\ +5ECE02728DD5BA5181CF6D35B6521D3649B4C6918B22652093E672C3F791901B\ +477C87EFCD4139E9D483271C56FDF33FB0BDFDB4E61C79EA7D504149B2C83EAA\ +17F1E79D327DFDDC0C5C0BBA35B02769B4B15241DF2EBE60AE06CF221B257BC8\ +3357F0B3256E14E66A143B458BDA48F346E8920BB599D32754E0F89ECE4A832E\ +2CE8C90AB7AEFBF2A2303B0DEC950B618FAB9B6944D99F8EDF7CBBD0A306FBA7\ +558CCE0DB1B2B02C315FC4E503957569AB5821E9C3C65D22B9BCC6C034B68C19\ +1A1EFA3216B85518EC923E131A265323AF45BC06F3F0F5FA712ECAB6CC50B037\ +8B04C58A7CDF84A7DA1153C58DA793D949B9F12A8AD611EE1A137913EEA42151\ +830EF9E451E4974D30CD2DC7C15C4B52DB58C837029B11C7E5C00FB1F8F5C52D\ +FE552190AFA39F69683F8FB8FDB843D40B8EA29BF5B26A09580B38072EC612C7\ +6F1A59BB36212C3AED57B546742402C0316CC5320D7D03E97470ED4161BC1176\ +C54FA92910EA05FE125E3B54422467C8BE2593A12FE303D882BCCFA393F436B4\ +62743B0C47CCFC9C8D9A878337B7CEE12117D3B6ACFD051930E270043B33B6C0\ +F581971FEC18067CFB6B5C16A7E74BF6F04151059FC04F0945CCFB31B2019BB2\ +B822E19099F08FC9E24BD45B6F6AFF87D58D7452F5C028A91849FCB08FF1AE5A\ +884BAE1222EA4D94F0704903AF009F9D87087D0410F0C68A574ED50E27FA2DD6\ +915228FF2050B731F5E25464F088A01D600BE49A0A2BA4A230833C6B35EF360A\ +06DAAA5FDAA31A35ADD1D16B1EE223B03FB8CB852B576A92488237323E017D6A\ +AA904B5D79A60B9BD8F8312124A125B7390925BC4179286155A7F77AB0D7426B\ +EB84D6F790A5166B97987EC2B42E84D251DE0F5DA59B849A9F836D3F5373C33C\ +E5153EE29756D325F400F77363DA2A29DBA537A26C530A57E9368BE2236A30E5\ +CB9D0B2C5D3C6B765375DBB6F0D79B31C27A6E0FAD4C7740095F6219B299BE7C\ +48A954E719051A5A48FFADC51BF96B2FB0389EAD449E63E42549667342FED323\ +A398507CEBCA8B202A99573040C384A251CEAB34D508955ADA861BF6AB73DC0A\ +9C1D291E4A9903E752C5A54FBDE4B73D4BDF38642FD1011F070EDAC8C2370FCA:\ +AA33DD431C05B53F558F5A9394D28B938F8E8149AA494CB5FDBC7A73E5E8AF94\ +EADA457D0A86C871CFD001E14E29A7718696052EF6392B4108A66A68A103A060\ +1AB1703AC6C7EF17981DFAE8BD1DB8AC47C211E241184B926FF6B3BC35B60E0D\ +FF1161902106AB81E463EE1DF41420729D7C164FDE18AA42E697F1C4E01B2C49\ +5FD4E9276FA34C45FAD5AC98DE47F137D1098C0918608853DB8506CBA17C1D4C\ +12A41A9CAD5F7F490D46C15DE97ADB0BC83854114E5F9A1872DB4A3AE8E400AF\ +ADE2D5A33A0C6663A394839423CA9B8EBF417F3C5F047C76D61E171F6654FD08\ +EE424C2078B063D118CB3F69665342A4C16864029259EF76F303E5A1E23A7789\ +F99206E43CF03E58AC070812B977A7D30FBB582429193CB0526211C6F002D233\ +94E9A6D2DECA4C83A3CF092B4047FF86E36E2FE1EB09BCAA1D7B929BF9ADB48D\ +EC871D67FEF35B0FCA8018EBEB3AB9527FBADE5AB45A47918C61FF6AE21C2108\ +387C9750F0B37155B7893E1A13B9226A9723B2597EADA5039938AB1679917DF8\ +4C491A2EE6E76C6840177E556B35F292DA3C785CF37E477BA53A1816D592D318\ +6E4FC4A15BEA60AB799C681D8B64A7E17D781EBB6F9139C9CCC789244A6A0E66\ +91E278ECA60A9654826FCEE4519E8725D209A6CE4180C91C17698A5C48EABBC7\ +BBE7F335AC4331D4D352A2C99B6784245E046A334179A29DDA41EF6BE685F634\ +FE02020A8B787659B123BA086536415BA7AF3C31ECB3A05E06FF1EAF2DB92D79\ +4817C89C568436C56608EFF8E6745C9DE92141C0CB99A13D137D723D23092E6E\ +06D084747E9D778D268CFE64BB2423D92BC5391E395AE4663EE83B2E8E703EA5\ +77E67EB00A6310C2C28119EE9D6C10849ABC97A55BABCA512FFEBA057857DA44\ +BB149B5FB0900CE09CD65A975AA29213D9B6E3849FECB62A12FD85FCF2E1EF67\ +D121FE8C9FAC0C20E1EF41C7C7F01FA177C66AFD31418ACBA38517B10CCCE164\ +4B5BA691D79D70E4C0AFAC83FE051D871A6149BF027938A0F8E03EB10688372D\ +65DF17EE27C8E193701066DDD5758D216C75775CFD0AED04232FDAFEA16199CD\ +3BE58F7C6EE1EFAF3BE8D08FBB179D1D3D4AD61B8772A076AECAD5F3C82BAF24\ +527A357DA547DD03DF1DD5D9CDB1C8DE65608E673378C1ECE400C1D2CCBEA486\ +7E4F24DEF07CA60EE21513C52180F93555DD75BF22391A0615EBA90A9B4CB4CC\ +95A3DEC8ADAEF579BFC78E5FCFB0AADF05223C1726A6F1367B96F9CFE7711620\ +DAE28644514E79605F70C8EA3B60C3CBCC93FBF414276A99AB1E1F28D63E4611\ +C1B1A0CEC1F32DCEB3A85EF7803C9B8499CFA7409E15D4488C787B2D04E8F58E\ +94256DDADFF89A0DF9A2975558EEB5E52E8322EA46B96FBE68DA49BABE11A6E9\ +54C6724213881A4DA032E361860AC881FBE19EBF199E4330DB9A7BEC002FBC6F:\ +385F7F95B75CD2676193034A2A842D8AFD585D1EC7A47288:\ +9176BDCAFFCFACB3 + [Serpent/CTR-BE] F3:3A:\ 740614949B42870F0851A0D639A37AC8288898B0F9CC3B326B983ADA69BDBB76:\ @@ -25785,6 +38124,1003 @@ AC52A4BABAB8223A05549532ED8386F6D621E2CB97B829C0FE9886DC67CDDA9E3A0D19E8\ 00276019:\ A0C7A1DD857747698B49D1E6127F564E +[Noekeon/CTR-BE] +21:D9:E6CB9AEBBEFE8C4EE3B4763AF201BAE3:\ +1B17F86B0A89CB174F5DC673C187803C + +0FA1:8EE1:A4B6826186ADDAE5E4E5055D899F56E8:\ +4247E4911362FFBF59B407BB5AF5CD82 + +193D02:3E6DA0:DD4A440EA6DB12B9A7B59F8A56F9E0E8:\ +81ED06DC0A1318D286945F012C5D5CD7 + +96C298F7:A47A2E54:323B98A8D64754A9A33FFE88A3611896:\ +3CBE77BDCA7742A28E46BDF357674539 + +E807140F0D:1954A24EA1:4784F2F3CC6AF39DDF680A99C7771864:\ +E26C455121A66ED165E6C99719572BDC + +5B15EC624053:037D86CA7EA9:8E525E8F28A847EE0F0CD2983CBD2218:\ +1798DFABC785ACA2B0947B2200EFA751 + +45E0C038C4EABE:1ECF07B2734A04:42A9DF33ADEFCB8829DB8E04325B84AE:\ +0D0DE03906AE076872ECF96A1C8032E6 + +366BB3B18C1EE9BB:7EFB806DD92DBF81:F427B0752E20A18707FE6EE3A5E618BF:\ +509920DDFB13129FB166D7F15F4F7A08 + +CA3574A484B30C861C:73C3DF6535E7EA2513:3D1493AB0D6FA0480759227590200870:\ +33C02954E7B23D691DC9E55487B93544 + +7B7C1CF2E041771A7C66:D5382A6934345A7CEAF3:C3F327FD724506FDCEF4A1CFE91FC19D:\ +83BAFDDA70B7F521325D4666B097972F + +6F7ECF3563E45900D78870:CD7B586F2A1F6F1C33A203:\ +9D193DDC4FF8FCF4059DD58B6619A4B6:\ +7FBCFAE85957F510D3BB234A8CE3EF48 + +5C354F161AB87D48978BED40:7ED102A25E2D50B7FA437F92:\ +F7307D92DB9AF3F4F3D86E07066F8605:\ +4951661393781B8C65DC17E14D0B6117 + +279745A7F70E9C8F8279870A5D:FE2C6E2726177A56F151497E13:\ +8EA31DF7E30BD06FCA94C76015FC7971:\ +1DE58DD80BF16E30CC11EA53DC00964C + +F803982606FD583BF5AC8CC06AF8:90CA27B45F3BBA71239A2B7D695E:\ +D139C37458AFC755E2152F71F3977A84:\ +CBA8F0E570AEC74BB05AD388AD00A971 + +EAB7D98D9394C39C8F8B414892D34B:00106AFF5E616269337A1D03F9A293:\ +30934136861FD92DB16CCEE4576FDE5E:\ +1FC104FA8E1F5E7A163BCE1393C9FE9E + +5F1FCEF49BB2CCDEE1B0F26E69A68979:EB5534749B9FEFB16AB0B8D5E4A581DC:\ +3676C4095C06E9013491AB481CB4D526:\ +8C3B99D61432DAEA2FF8D5A72FFCA449 + +4F9CFE3CE3E86BF2A01AA4925D922B2DE6:5FBBB53B53852E977E7FD7BC350B0563D1:\ +8E23F92D86C55185CB5121B04C366A58:\ +A1BF4B384F7BC0E154F081654D282957 + +921157A2FA3293584B0AE4A63326251D022F:8F9D3B44559151D9FE636DDE0B029C3140EA:\ +0B04F22C6219A26CE72D989F120FE3BA:\ +FECEEAB827516C3A7A35A0A4431234B2 + +AA30402A478C8FA4341A98F17C03CFDBC6CF66:\ +3D84E0B9FEBDD66617EC4CD40B8DE06E3A550F:\ +C7AB8FE20D48280AC05348EB99E60856:\ +9BB889897236F3D9934432E39A678C9D + +F268E0F11C1C53B18373F7951DC04DC85F69BB1D:\ +D8D4BF072F0D743D942F15F082A2F5662367159F:\ +9F493B0FD458928C9F4E14E3BBAEE80F:\ +E41AB5247E989AB4828CA3C2A65128F1 + +59D4C8631BF4F21C857334AEE6BCF1585F5F0C5CD3:\ +5FF9E4072585125EC1D08AB79B744C189136D8394D:\ +728E75F900674124142AA337CA1DD561:\ +A488B3EBBD9DCC78F4F63EEFD6F95DF8 + +BDC114F0241652BB4ADA3B33FDA18722F7C8CA0F0EA6:\ +A554815F48F5E97A9D79F074B40D4553B7614BC1E1E3:\ +B176CFEA51C6BD14EFF032BC66F6C7F3:\ +0F24D4CCAEF29554B886B75382B6CAA9 + +CFF7BA8451ABA766F874E708A2762CB5FA20B0B880EA2D:\ +DA5EE8406F03D84032207B50F84DD490E3B78C8DC9AE3B:\ +F47516C38DBB7B8E879F0226D29318E0:\ +F85828355C8913A3D52DCA893C6AF736 + +AE60C714E058625A84B905D94507FF7A0D91CF2FD28FCE9C:\ +4FE77BA0D3C58497290AAF37D5C129C22B7BB62B450C43ED:\ +3EC64B66F25B7DF1B6AF3F64E072A4A6:\ +A1F158D936BB8D54E10B590EC36FCCFB + +D776BF1BEFEBA895F63816B634836D04BE7925C360B847A7CB:\ +012A6BB13F3BAE6F9BDC69DECF667CE8753E2B6F5C2875B45F:\ +29561184F97395058CC4FDE45B78AEDC:\ +77DA790BDAF8445CEF0B3C7CB5682FFA + +A34724CE5BCFB822B3D60BA0CB5AB46C63B98424E46CDAC89A92:\ +D7FEADCB3909C594CEECE8BA38C3ECD2CE77508F117095350458:\ +B3C263C819CDBC8E7A7296D9D349115C:\ +7080A7A1ACB9BC675DE05186805CB4D3 + +F935DF934AECFEF97B2F3C289E8E5F444CFF6EC8043FED9912F5FD:\ +79C745EC22125C4A5EB67A98E56154C4FAC1749C8823C912830B47:\ +945EF1858BE2949562316E1AFDBDDA39:\ +F621DD4CF531940FE1EEE47774E3A6C8 + +2F7B4634AE008B66DC1424763FFCD771521DFE4A8C55B83B3EB59A72:\ +887D0AE0873FA0575CFBE21018E0ADC15ADDDC4CA446FE9961560B5B:\ +EEB53F967B99F636DAD0E691DAC87E7F:\ +4AA26B55083FF42C0106E35767FCA76C + +DAC816A9AD72387DF047FBCDF545B67939FCC12C589B1B4358944CC6EC:\ +C62DFFDA9DC4451A0A4356A2BD15B570BF93CD885784C8DB3709B93E79:\ +F1C8548CE25FBC255D6AAB47D379DEA4:\ +2F03398A4FA867F855D844EE45B8EBC8 + +7672DE06D10FD6B5F1B3E5AC61F2B27746586CAE09930C336E46BA801F0B:\ +22C85E005F98728A845775998F23F5F9CAA6631B05FE3AD786551CE8822F:\ +1F534B2B8F89DDB9F70B83A83D03984D:\ +53C876314889F9D06C990384D3641EC8 + +C1D9527AA95E22C82B06DD6179958B528CDFDBC982E099FF1BE20132AB85E5:\ +8D6FAE173EC8ED2CA49DC9991955926DF776442DC1B017099AE357B73B69C2:\ +51ACEC63AA4B0DE98B36531375EB30AD:\ +23DFDDDA97F97A1BC58A5E3B228271B5 + +F49311B047ED65667B79E02E347232C305E38DBADCE1557BC9766D0837C808CE:\ +33A4561CA1D8D7E59F3CCF80202C2BB05342C4BE8CEF2D1C413C5362E71EE39C:\ +AE1F2169BFEB95359CB55717D36631FF:\ +4694AE380F4932DC01A035040EE4DA04 + +FFDB5DD9D9A73FF949F98031B8E54CA7D086D7BD83F566E8CBE817F7A5930E68\ +27:\ +01B2143586C36DEFB4300F3179A9CFB0C981A1C3AB7FD6134E83632FBC5EC885\ +B2:\ +17FCC4B22BF006E19FE47A7F3D1ACDA7:\ +9B24E8C1B46791511094FA0822AB94E5 + +985BAF3296A7807B36605FA762CD74033B07A0D19A572032CC90144A30A22B7B\ +5AFC:\ +95C1717EC7071A9C9365E8E8AB56A63C3F6F5188FD56D071515E654769263E75\ +23B4:\ +A744181C72A954702461521205CE235B:\ +F1E5E566D925F72E67FD7C16742FC5BD + +A571D98D9FAFF69964D8FD5AE62D998AA948E64C3EC2114F2966273722DC9A85\ +361D4A:\ +2D3776235BFCB3F176C7B82FF34B821DB0C637B3F906FC5E6EB8517110385CD3\ +6B2A23:\ +5E752ED4C2A65DFF022F75750E622126:\ +04E3BC70FE0B5287FB8F3B563B4B39B9 + +5A96FB6B4022B903049C1DC7B209890DA31B16D9A4161E861DEF53FF461C98B5\ +0D18F805:\ +5C7B8E2A358CE90696FA9CEC20C5E2D8ED1A2A6EF5E4824DEEC0BBC0E843F39E\ +F74F706C:\ +690C8B04CB3AAD2265D6CFF3D1EA21F5:\ +7DCD6F2721D22132F53484918EBFE4DC + +77552AAB1804ACF379E9FF3CD8210D36CCBE8B5DDEF1C416668953B4747D4315\ +D1D5643BFD:\ +D6222DA67139F9CB63E66E51CEC9B8C7F2C371D3F1417AAAA99A47BCAD4BADA2\ +9F8E552B79:\ +6A6B6FB6F30634782A4AC05DC64186A3:\ +EB992E4B1255989D047D486DCAED9117 + +E139C1EF006AF64F6EE97E37FC12DF87F93317D7F9067BB80E93690CD03A54DD\ +F8009032B41F:\ +7FBFF983C5B55472AA881DE7D639B672E53CA89112C454FC1BCEA3D5CCB5360F\ +8325DFD38A70:\ +F304C4DB0E3669597A8D760A596C14A4:\ +3446DD04202AE3F7DF2FB86B324514EE + +658A21D4E0B513DD7609A820BE3A0F55C4BED000A009567BA41EBC3695719CF4\ +2A835B42AA8CF6:\ +1FA58300ADEA19460C194BFBD799EE58FCACD72C943A4999959E74EE4226A72E\ +CF022C95637FB6:\ +5993951EF368014469C049140FF4C774:\ +A8CA0BAD1B2F913D0907D0AAA8C40AB0 + +A4BB6603C8706616B4E3932F4D17392A71F7C1798C8621E7420BBA20B7FFE69E\ +76A43D732E851EF8:\ +BE78096ECEF8D4A521BCB2FAE811AC748177438FED3FA3B69DD294038B189AB4\ +7D3E6D1725362417:\ +C15284EBF517E72FF4D6E700240B1924:\ +0403E95837CA6FCE033E1609EBC2E137 + +1100C1895AC0A3A551BFBF4007E7D14CAF9F7F4C6EE1F70134D7EA376C819AF9\ +DD8A5387DB47A68C81:\ +CBD14325C9691735B07716B0137F9323B9FB8A09892382CA2E58613551A52D14\ +65577C2ECC5F516E8D:\ +630A843465F6748FEC11706E0C1A30AE:\ +C327AE44C20C6B7AAA39CD482B0FAC08 + +3D9EE4E182C06BAA806BE849E1EEE0F1204B4689CCBE5A76A3FDD8DC814AB2CE\ +102AB08EEF4F7166065A:\ +F930939B3DC17ABC2128B4F57DB554CDAE8FB753E5982B63923F0FC2B967A4D3\ +EC37694390A5DE94E5D5:\ +71CCC4B282A3B8683CF7B23212C9755E:\ +BC3BE9DEC1C4CA5753C7ECABBED3BA03 + +6A429CD60FA9DF30151381700B21B297FFA3B422A6E5743E1A17014F1B4DACEB\ +E5D4E1EF5046B88F347BC6:\ +78F328303105166AA2A007F5A781EA11A4BB64A333BF379F05F7D8615520E8F5\ +6339648C2FB0AB9FB12281:\ +365207F51C75603FDDFCA7FCFD0AA943:\ +6135D9DC5EFCD2336B7BD8504F318522 + +19026566E90BEFDE96EA10ACCB15475BDF4F051451FFC7F42E93B94B1FB59C33\ +94E21960374B4E694A94B79B:\ +2B3C08655920C3AA770231AA83D05316299EA120EADEAF94884A32714FC1B73B\ +0A9B3B573A53D12890683A29:\ +03D889839F78DAEE42EB1A64578B0735:\ +2841BD9252AB693AD1488E74572BFECF + +4964BE4642F182D57708C17AC58BE92555CDD0A0C2B9C0F373FF0093EADB02AF\ +E934E0D316FADACAC1AF457E3E:\ +EFEE5CF69CDAB2C2D1AC105C6EC38535D91020D1B54D04C56D2C37E592FFB487\ +06131A352330813F047686D534:\ +7531E248C3607BF709BDE889983E8BD7:\ +2C6804B5C23BBB1F41DC3DA8B9B135C8 + +320A987FFDADDBDBDA13911C14438966E2D44BE18270BA5B65DC6799C981E34A\ +BF277C49B0EB6F147528F0E05DDB:\ +DF6ABDC41BDB76425F2D8CFC5F6E372D269FA011AE3C2AA493DB30F569B75DDA\ +1552920A9A0AFCB574DA7EBE5483:\ +9B9E8F6A1E642D3F148141F44A702B78:\ +11237C7423EDA19C1EAE0C84F6BC3B7E + +9A891EB88E6F35BAD450EFBC09CEA0779C139A9679AEA59597C98EDCC8B3172B\ +36683AB62D3249E8E31538592C8668:\ +02A25E9C253CCB466B6D34FA3B36D113A287F7AC406823EFAF0E3EB21120DAF9\ +2F484E6E9A2C913EC2B8B86E913DE5:\ +0C8F881ED6BFD47B5B8F458488634ED2:\ +623F903A40E152910B828F7EDECB0CC0 + +EE2D21B3B4D7BB0963A524126B86ADD09F17E07FD7A41A4CD0B957EFC9A9DF32\ +047CC4626615B34FA5BAC3EE160DEBC8:\ +EF6064B1616A36CFE516DE3DE86C273016E2AC92BBD2B5345E3C3D25BBB6AE55\ +F1CB79C896A5115C61DF76BC93687DB0:\ +E0D6BEC46CBA9137A4C19DC9ACA26B22:\ +53088D58E6BB077E85B752DDBC902C52 + +61C4987F76789FE99F310290AB2444B4EBA482F29BA3738FE8FEEE66B4087BDC\ +2E2B0745EFB15B6F9FB93E60CA5A55A8EE:\ +61719F9D07B0F044E8FA6980C220D4E5297F7612427302DEE94F2F381F10AD59\ +26C133C496E65A3293498D2E2CA5C3F41E:\ +80254224459BB50962188755D792FE3A:\ +38063270D707EC6D3EEA123C6D4912B8 + +59ACE34D84974EF492E04A809FD3D45CA0B8B445461B59B6524F2CCFA3D2FD59\ +B018D4CEBA2094AB668F9671966B165BAFC1:\ +11D166C2ACBC481AFBC65D461864D9EE04C879A4ACC14A1693A57C07971A4B9A\ +A3A33BB094ADFD6BBFEF0AF61AFA0C311BED:\ +F340A9624C475D33A2CBCC1A5242FF6E:\ +7C76FCFB3D19F64CAC2A7278AF846A70 + +9B0E3DE0C6A835B46112E807B1BC3A8384DEE51ECCA166D6A757963FFF766AB3\ +2D0E1565861775CEFE8455C64E81C7EF6AA10D:\ +D17E90D24691B153B8917DA9C3520D405465D4F2C7FDB2DD82365D0E356DB712\ +C5909C594D83AE4EB079F5C392317BAD0EDBFE:\ +977184379DA6CE1B1E3132AEDB6A2FE4:\ +7445CC4DF79D018242B1E6B9EE22E9CD + +55A74416A6C1E33A09CF3C1514ACD9FBCFDE9741D0C386AB84F1F01815F3A7A1\ +626B1CBDF9D6D25712FF220B6DFCC91FC97E4842:\ +6268AC60330EBFBE8F3C7762B6B00DD92F0D85396098B57474BA98ADECE9FD56\ +8AF86B5695AE6918648BF883868A17BEB4359D3B:\ +A3A5F12ADF2EE262843B4489245A0A92:\ +57C202A720888F578CB6481BE5214CE5 + +10302F2893D19D0429A4B893763302849B8DD13F79DD01FC64168C938278F7FE\ +9F399DD4271C0B832CEC29F1C26BF1B5DB8B1BF793:\ +2C1F2FE864FDA7D93A08AF5F0FD4186B5ADE3A0833F7029DE495EF6991E72354\ +280F385430D16DFED118C984DB1E3065ED57DCBE7E:\ +E72BFE997F80D8D8B16657C6B754505A:\ +22F9E33AB71D200A64C2F05CC426A748 + +701BB84145F1DC20F7A457624AF353F0148F1C2091B840C49CB5FCC9B637A27A\ +ED4AB17BDEEE88FB982337E8BAAE35540283CBB38F38:\ +A8FD582216D3FF768FECAEF5F619B056362692D8F43C2E3E75694AD274D753C4\ +51B7AFE90089012445D470C5404A74F40B88494EAB5F:\ +5C6E15752D992AEF84C7D61385168ADE:\ +689EAE57ACACCDBC3C02265A42EF4965 + +CB1D8554194AC2AE0E3C9F9C2B7E3797848E6AF752690B2A30EEE0D545D41E33\ +6C2EBCB7C24CC5038D79265414F74453AACB5BBEBBDDE4:\ +BD19014FBC75D13E2F2EB1F18D8C1D8336B6DCFD2D17D7D27F62331AB78637BE\ +DF9C1F4378165D08C79034FBEAC9B2B90D4FD6F197177C:\ +C56BE3DF2461B1CE444FA14943E121E4:\ +284CBFEC11CFDC509E5EC53CC2E33AFE + +348A8FAD0985490F232862FAE0563E8AAF58A4463F9C6ABCD600B8F6662C7291\ +4666583653A4B9C3FB499C2594ADD05EAF82B8DDB27FACBE:\ +2F10D18D90F9471996EB7127D1219439D1867795EC1911E75DF16AE6019FF569\ +611D9A7043DBCCE61B9D261E1CAC663851C4A0303313DD47:\ +4740158FBCD99CF0DCD425A55783DCD0:\ +312B1208A28974B5135DD517D8F6C643 + +B15B6F7C6B48E6C6F9499E72311DBD707CC3C3C9534902C988729E520B9DC997\ +B3D246F009C93E16C7F54AA9E2DBB870DB6FC266F254A5EB97:\ +4A8E6487E3676E1111C79CD542FB77E20E0C6B27F5502FE47A70B0E328568DA7\ +5C736333E23707AD3A53D65C091B5A886B4F0121F7B90B714B:\ +435E6E1F17830FC1B3129CB31DC25BCD:\ +FC83C06D644CFDBD069B8C01ADA12184 + +8916C5F7DC966C0D7B9C6FADA33BE730674861B908E08392A9FB7F66A58DF32B\ +2BD3D8626274E848235C7A213BAAD607A3377D116CEC891B33E2:\ +56070C7041E650EA2C28902560BEF65100959E1FB2D2B53888E69286861A7117\ +48B7693FB597A657C27069E91F386D896727340BCFBEF79AADD1:\ +3FB7F70F55A40D38B40070F047F0A845:\ +101A58E039261D052C457D83FE99B7EA + +04DBF311335F163FEE6A1588FD6FCD433E3AF7D4CCB72FE8507C23853F3F6738\ +6DCF8019AF7C58B20A1CF7F0BF915E9C2C8C6785B702AD4EE599AF:\ +174F696EE3197A93384A8E53B1315C3C448E4F2B1AB0086AE68221383BF12C9F\ +43833283CF54E4EA421E09702724D59B4760EF4FE935692ACB837E:\ +F4CAFC7D939BEFC4B7C9BB5645C2863F:\ +DE8BACE1BCD71A743E153EDAB0F6C8B7 + +2F5249B8FC8326634C5D80DA4D6EE63E77162E211C4C562C100B861571034266\ +27C6182EC81439662BE17C3ACCDC8E23AD637CCFADB6EA97816C3395:\ +CCDBBF547E5F39797D5BB8BE1A7D840D16A8E60555F84494C551E10E1E9B2950\ +55A1CFA85CD0DF95A9E90F4AE6F43053BABB28604F88937A384225E2:\ +7725DFC7A01FA56A262FF5DE277C9C58:\ +4E856EFEED281F39164BB5D426AA42C0 + +B3FDFB3E75FC0B934C084152E96DFFDB625FCADDB005345732643419FBEE2760\ +CCF336B7B76E45A4E441AC88C94C87F70C48AD057C9440E032A20003B6:\ +021A9DB9599E243EE850AE3803359248169DF6F1E109B5DEFC3E3181A7F54580\ +B6655BD4B886802FC7E0F32872A93D3729B4C4E4CAB61DE7C5D9F3D687:\ +276AE6149D3D365BF4DB65B31BD3C10F:\ +E998FC4FFD8E0171069FF3F08F66D984 + +3D3FAAA063794263890F4DDECE9EAF9D8E8E89C11A8F779D82FCD178615F5E23\ +25ED84378682169835C7013C7E23CC9BE74C71BF9D6CF291C3AB3304C13A:\ +CD1C1D2E2539E6AC4198125E968C2E68D16427DCF681FA2006CC79AD23DEAED2\ +2CE38DC53D84445E5628F87AC621BD781E1BE45EB83B0979B922EC41D1FE:\ +86F47F53472E329EDE94D33D391EFD51:\ +3E9AD8839B92C6730D1E1B4BBDDBDE08 + +C7BE811918B7292EF452E75842F1C8C744A9FCC616B1267DDDC9B7761922B657\ +D2653DC1DFE1BE4D5F20BF76F3C196ACFE38EE1038FF3EC62470DB25825701:\ +E2128982F4EA238ADA0AC44FCA33D64F1FD1D3F8343EA61683BEE0E3D330EE15\ +6D18E8C26EEB4010F8CB0B20FA964E479DC129386D30460611253822A85507:\ +1305148EF4895A0FC12CD652FA9FA2B7:\ +BE33A68DCBFD831CD6456D77A2CD8E12 + +3A2BB9D146DB73B3CAC8C2ADD1A1D06BADD759A0968E978E36EA82E8C918AB24\ +A85F9AF8BADC2E19350B4C04E9F9894C8764B64C6BD00AF8C44AAC04588AB10B:\ +C03B4714C9E4BAF3A42E2EA7BF63CD28325828B25DA057FFA79BC56E63B7E419\ +C9C67BCC2F61085849665F549DC8A12FEB9026B4D6B041948060F0F0C9339490:\ +5580BE3D3A5A727F22B4595BE16E0F3F:\ +678ED31CDE4D6CAFC8BAA875713FF0B9 + +315FD1212F0B4FCCCDF9951DB7AE90F980E6CDAB1EC35E41332007F3FB00DB05\ +4FECC6F0B639BB916883F02423A768547144D5B8856DD1693B72329A73866459\ +9B:\ +8EC652D3962EF9CF22A2B1849730EF08730F74A0EB86FD0C4EE9E7751B45F45F\ +F6BD85167F9FFEDB8828F5D4F3D442A240180E1F296BCDE462CC4B7DE977C02C\ +FD:\ +0A127BC8C04D7718AD77F62927CF0B2E:\ +C97672CA375539D43E6CC3E06167A001 + +16B82523B23A8C431B7315C307EF103CFE366E76D7F8A6464FE6C7E3BC78B9DD\ +E6A2DA4D09D05D3DF2EC2CC71E2C5E2ADA89E2C4C263BDB24BFFE8300B0AB3CA\ +B673:\ +4A0E874F284057A72F55FE2FC5733F2A81E8DA3C35BA2B2758BB4376D8B88FB7\ +203932F4F664B0EB848A182AF957AFF953AE69A59480B40D13CF457ECFE4F4BE\ +E41B:\ +D5781536A2EDA21FFE45B78B49F5293C:\ +60D2607E881FDBBBBB215CA56F9E1855 + +83AA1A09444886437356E2833AFA415AA29EA1C16E8FEC269DBD7E502B1D4C09\ +24A42E357F8896C2D5FAE8389A369CB365F771F14229A506A5056EF2CA9381C8\ +08316C:\ +5A16F9A3E1E29371E72B3A96EF2BDBE312CC353AA464C88789D9DAFE2C5024A1\ +EE2E39FD450C62DD85E48566D3771ADDE03222178705D7128A6A4912A8AB1349\ +DC226C:\ +3ED48E0EED488B5D3F3B4D7A6C36679F:\ +659ECD5DC78B7435CBCB12B50836D477 + +86AB436404A846C845BBC3261E367E43B71C1CBFBE83A1E678259BECCF7E7878\ +5E2D473402FAB1DEB3781910B24FA07966634B8CDD3C8EACE0E0503196211001\ +F31B9738:\ +77E4424C70A4AA48521D003A917803CD0FBC72FB7E4E3F61D6618A84EE7436DB\ +BE3B103BF55B367990FC1607CA89E07E694D0E7E4237D0748E9370BBC6C99D2A\ +72024534:\ +0FFC4C7E8EDC3704A564CF4848BA0ADD:\ +A0B0AADCB21B64CE81E6FA519D9071B8 + +95B0C1A5D1D183C95ED5B77A473657CDAD06374613F94B2731157947E2008AF6\ +A0A343442A69FEF44EC1C3A9A526C1B850E3196E67966D8CA2467D2D8C8743B7\ +4EE755E1DC:\ +F8D5B408682F43946CB95B071F24AEC63E94C74F7812299C2CC7F63A6C9C3218\ +6FFCE730D98020748639BE446870BFE848AD881D02B8213A6287ADC00F430E5F\ +590B6F6F8A:\ +648A228F34AED9F09440653A56299825:\ +DC35F21F735FF7890B771720B46266C1 + +A65E02A60F709E2CB021CDA6BC4D3F580138DD86FC32014E3671D4B917077BC7\ +E81BD7D9BD4C61DC5791AEEA8CB37D18C0E2CAB4555C2C797120BE459F050F64\ +1DD876666D67:\ +05798DAA3D2815D7A6C84ED8CE2DB04E183B9072E7472176BC23D6D0F55A938A\ +8C1700C4838CABBC842D5313D389301C23E6B76D62A2A7BB6A605ABBB5A50458\ +2A1373A690AB:\ +C8473A5A85EC5D7D67B0DAE1BAF55F0F:\ +7FC23300A2B3F939AA57ADAD11EA06C1 + +4A2357AAA2042E7EF941158FBAD441083CBDED6F0361246B2A1C28751B657FDE\ +C5BD1A197A0E5F90AC47C84218673BC6CAF33A78E2E499E0FC5B7A08A300FC76\ +BE7FF78F045513:\ +C8659F0DCF964501606EAC3C3F91D17D0F6B8E6076E6C85CC8BB3D0410553E1A\ +261C4A4ECC6C19DF80EFED89999E67035AC997CCC837A2B19DC9AA514E7EA9F1\ +50A9A22BF029AC:\ +F4FBF67893DF61037133787730E27576:\ +11684438979AE34D371EBAAFA7E28C4F + +FCEAB567A1DB78D58043E922B56DCF529FBEC49ECFB44D4E90ED9B5352F1BE95\ +6B894C438202F32DB57D0066B2E2732D495B7B77B60BC3EADB3B8D22CB71861F\ +00710DA68D8CDB68:\ +96FA555FFD8542AC2185C67F6C2B1DE9D037F570716CEBB9AB31258637D9B066\ +AF2D2A46D0BC0F4F8DE7DBAA79E1D7771512B7CC788740FF68E5FA26A168DF23\ +74D8602D525AC547:\ +18B9EA7CD25DFDDFB21FCB5EBBCA965B:\ +58E6A7597E2725CE4151C2601432B094 + +9DD176CC9D27F2B8EEDB272E2C87FF9C7944CFA57BD12A9E1E7A4DADF9F256F8\ +BC33E959487CCE2CA07E04DD29A1642F0B8B7E16DE15E45EB0C5CCE687962483\ +8E43EC6BD4A1F68AED:\ +660549FFBC7351074ED0433212D7B57A8D4076DD137D83280DEE8DD50DD7242D\ +A3266ADBD2027CA03553F137EBD437083C86AE3D88136D190AD25431EFCF94DE\ +0E38406C9B592A3E5D:\ +AB1242B47A230D3CA9AA74A65AD314D3:\ +2DB97AE77EF56836261C2B2857B37C4F + +484971404DD0EE0EEFF12365C8960632134926A1C625BF847EA6AA61568F9961\ +4AEC5C688ACC889BA25BD0BE6D39230A422A997E6C861EFDD2724B307A9FFDB2\ +2AF4401ADA3AE4C269C2:\ +452D66F14FF4092DBE60FDDFC469CB7807A4BBF727EFE47F9DD3898B0FDF1D22\ +9F5864C7F22C60DB40DD6F6E4C6E726A949CBB297E251F9687B089AEB1EFD472\ +936FFD8B6890062FDF1E:\ +0F6E2F2743E2459AB610AA4905D3FB13:\ +044478F8EBABBCBA92283C03729CA544 + +9ECFAB84D359E87B8E46D6F0CFC6BB06EF2F8AA27D66864E36D2840D3606624A\ +BA8BB13E53C55371CE7D4BCB1BA5F012273E131F79CA0DC72D89222AB0A32A61\ +33FDE7740BAE09BB1E08E4:\ +CA9C5F1C3C49D22C03847418907DB46363A6B2BCF6AAE9D982B502B0CB8E02CF\ +DA5C2AC9B0BEC8E4162993C2DEE53B48458359AA7BFC2D8827D8B98227880419\ +32037A7DE2C6CAB4CC0762:\ +5188AA01382907A2F6A586FBC29EBBEE:\ +446D533F257AB6335457D53772391AC6 + +6878D201901DE244EC5CF495D04794918C150CB6F5C0D953E5B4F8B9622389D7\ +F2AA3317CDDC5571E0F7974A6B2415B7547FEDD7316747B949A224F0C7BFB46C\ +DD14BB7A332CED6C8813F668:\ +9EFB38AAF7FA4F5E249E128D3F17593537C39E317B766F256836E9F7E3A17FCC\ +C1409F1C5CFDA928E74969848DC43FB4E941FF5554F06C50185A1182617CDBE2\ +43E9CE7D9E7DC3597EEB91AF:\ +447CB21EAF8051964EE8781F901A8733:\ +36F18B4676A549C0DE722B2659BA5A8C + +23CA3DEA8D4D6E4F568BBE6EA90640EF95FC7429E2A4466FC30BD0D9BEEB83D9\ +B35014DF8E7ADBD38ECC65B46E6CA23D89664CF28258D73BCFDD3227FD428EA6\ +FA5B11F03FF154BE1598DBE70C:\ +ABC4F45E59A9071E2EAA2A58049B2579CA0595090139F08F66C27703F8B83327\ +62862924395D9D345360D082634FF4B5404B296509216E8E276BD81BBF180F8E\ +9FDFA80F43C7F285782EEEED1D:\ +B77551B5360452D628085B62AD73F5A6:\ +1D682D5795A81A894190FBA6B24C0F1F + +83C71BAD6F39E2A0CB7D925A2933D195FF186ADB4ED7CFBB9A0E4BA50ADC8250\ +EED58A02B37831DDE8D67C765535448FE1CACE1B63B352DE87BC9E10EA1911BD\ +A66C62FE3671AF87C6F3ACD24A3C:\ +90BEC207BDC7180A465F153A622EFA99BA31B01F4DF1AA9D3E8B2B85DDF4DEFE\ +D5991E29E45854CFECE24FEE5FC08353D4C25C56E19AE2FD2CB97CE01CF39D90\ +5315BE033828B4BF30AEF84B8968:\ +773FAFD175509B681A7AF4617A6F432F:\ +8550EC205F5C64480E294FE0C60D73E2 + +27EB2A8D1DC6DEF8142C2E35324F19BA17DB1B24F7C94836DE9E7508AB3AC9B8\ +37DEEED54723232B7ADEC3AB27534E1B726AA7A47C182003FD09991B5EEC8CF1\ +01BDE534BB8B486E1D74612D7D1568:\ +281B411FA4702FEA5930AA30F14C6CFAAD7CC47B84334C03D063CDF52D8339CF\ +12EAD9632AA3218476A953933FA4D1287FB0DE5CABB0EC8AE298DD0FEC1844D0\ +CEC638A1D167C7BA24619053F26D9F:\ +11074EEE43942BAB676A6A54C0F680D7:\ +B5F1FD9945A0693DF1372682FBEA929E + +A020AF13D35857A95FC8745EFA6DB000F6627A41E3B2429AC57B3A862828BCBB\ +22152F68530FD7FD7E2889C2AE6B4B203AB136E81126DEBDB673F1E8FDDFA1BF\ +53CFC7E2B8E00107BBA47E525D36D990:\ +E91AB36A19C2050F7AAB135988AA74F36CD5252EC92CC7F5E66E76279386FDBD\ +131A09BD655E5C788C9142A3418EB40C15A29F8262406E4BA790D364907821EC\ +7D77281F6F2B99E69692AF8D0BC229E2:\ +DDF28D5F03B45367C97AA207D351C92A:\ +53666B1F1E067310CDB1D4B22B419C50 + +DF2FFF4CD40DD8B4A6563C086F29A800C5D56517B28EDBE26BDB95EF2E51E40E\ +EC70B6EC5132830B8F64DEF59D8974597351F9124B6FBEECC054E76472A3D8D4\ +1DFB6C5CDEAF4F8F655818AB707AA711EE:\ +102FC701D542EC9BC687BE8DADBB953C2F328B009A4624BCFA17212387A13481\ +205A6C7F55CC81FBF97EE5A595597E4E6ED3903C4D91B4142B73B0B15030470C\ +6936FCFFCB15DA3C26CF8207659505D054:\ +83E81608A49F2F4CD6D4CE9E38F8F9E7:\ +02279A85D49830F8A904CD9484A87C54 + +F17144E09A92D6390CE9BEB91CAA4ED3E5D1FCC65630FC7FFD7CC70476E97F83\ +430EAEA112D52912DBE6CB77F774AB551EA321D755C4A62A7BE4FDA10BB0E89F\ +60C882A239ED2AEF199B3C8F48FB10013019:\ +ACE1B6EFDA7EE7407DFCDBE573B954B7ED7E8645DAAFBB25246E15446D2E4CA3\ +A3A2EDC39E66636E763153D8BF37F9D3DE907FC9D98C3ECC9782E8B510216CC4\ +14C4F4D28395821A35C4845A850382DECF86:\ +8E1F0454359FEBC2471FF02259561758:\ +AC18B91487815D98AB996E940EAF2287 + +1CFF90AB8BCF241A734AF795E3DD1FB0F63C196F423AFDB2FC3342F416C00D61\ +208AF7CF38F4C821B29F07E6A55DB219E8BC04C325765C47D87C281189ECF549\ +82F752CE7ED382D194B08D03B4A7534F916129:\ +DF5FB08A8AE10DC102D61877CC48DAA16843EA8CD807564AF2B6F4F82B4C3350\ +F318FC2A04D88E805098C71C63E0937CC8DBF7701A48A37E32A67E33304C2286\ +6743B83B1730BDBE219B93B695A24C6D18115B:\ +5AC6369174587D48E1AE1B7744F46C97:\ +1DE42C0FBCCD3D87301E750B0066E847 + +9CA6CD595F4C8A21F6D5947A0DE2B61C76E422D6C677965BD2C5559A11E0063B\ +4F93E09EDCB777D6B3EC51B379C5437BC88AF8EAB8E72F8504952B743D2215B3\ +3C1C98A1BB16B07CF3C1893ECB3C6F440B75E1CE:\ +6EA26BE272B9D9A53DE12B89F9EEFD6425FB9AEAA2642201B1545F6C3D97B0EC\ +B4BB6C37828AC99C9EE23AEA72DB4C8FBA438AF542EB262673BDA1E0D16BC933\ +4CE74FE1DE6B851C9C21EC245020F1AE124D58F3:\ +D73F74BB2331CC59766404A7FD68FC12:\ +C912AA5C9C69FE793F9B0D13E79A491F + +C0F380619D41DE3D3C0FC84C606DA8BE129644EED457395E263A3D56A9A109DA\ +BE2F925D4ACACF2176E8762C4ACAEBA27123C074DA90B1F71D6E30B283265B32\ +7B0C2DBD94EC65A70FDE2953B5E25AA9AC0DE428CB:\ +7DD11E74A9568DC2B22267E13AC51F15EFFBD02F64DE4388AB2EFEF3ECC7282D\ +930F52336E7A6283CA638CA4CD98708295997576AE4E4BEC3495CA57F2FF7B07\ +10B629E9F67FFCB91C99F7162F250956D469D41B48:\ +02CAB723734573136AA95AD75F64BB54:\ +5C9CACC35FE500E156BA2CE520CDB23B + +01513EE1D2E470ADCE8BE57112727AAEF1480C38D92E68FA99D568FF4979EC51\ +A3A63E21921933642002B99F41E590CBCF257B735AB586E3F2CFADCCA522946C\ +A1CED4EA49D07F5C70965AECE0A7678FF56DD9CAE320:\ +2FE8BF3C296F7E36517DF326103D7BBCFC7AA093B6034373E6571E1CB2AA808F\ +E0166EBC122458CE819ABCC6DA5BA4E6AFFE98F9C4DE2F7BE01225A265E57621\ +681F0CE8683DD642924F54734D510A660ADB7382E438:\ +4DE074EEBA050628135F6E0BB6153455:\ +7DCE705726988AC486109D330CB4841B + +158604D8D8A4508C2CACA26910C43941A7737304EF901B34ABEC9BCA8F7395A8\ +6B6395BC8B60FD952A12F4321A0C556280B7EB192673B758ECEFD4ACF1EDD738\ +5705E97B661B24CBDA98777737FC1939A7DD84DFA810FE:\ +A7C9B667DC31C97D5095776AC3967E9F3B2912C7E596FF507F2D10FBA8881C5D\ +6FC1F17643E83600CA5CF78B28E3104C4A97A3B3AD9ED537DE2AF85737572438\ +C200FD3D8E06644CA347618B85243FECAC8B062F9CDAFF:\ +529AE17D04AF5F81DF48B7BFEA78CF25:\ +D689379FE4A642D0A6E988BBC0B0A74B + +D93C5846F4647B17032AB3548D81116644B093B5B19E4E2AFC49198268DF9750\ +716F537D9BFDC9B466909C496FE259134F8950E2994336A3EA2D3B41226FEE6C\ +05A279B12D23370EFC7B09D6313CCA54D5940C828D066889:\ +527CB7BC14045AAEC07C679D842DE0F7DBEFDB86FC6DF79888032A872C91D12C\ +E8778F2F7A0AC7D2FFB3A6370398ECE9E532AB4550F269D0CBCDC116CA6C60B8\ +B2A161D34AFDB049A32665A90541BC97051B6C73E2264712:\ +F02044299833E58B08F0DF2E7CFB1559:\ +4B88F3384E330930637851DAA0FCBD6E + +BFC943E6F9FC3E8967A860BB09AD85EF183000779B202B5E5DE738F010D32768\ +3154F5C03E8BD2FB9B26C9385463B2B198F160DE25E7D6BEE423E4836524C636\ +87A31BFE042759C3BC94D3D2CB8219DE07C9444541D148CF24:\ +9DE102B2350C51B27B9A209001ABA87F74DA02B3EC7888EFD095D350B1670240\ +CCC2868B8DE8F75AC21DAF34A82BF8FBB585C8087F9309C30EE7FE1516BB8DE4\ +D93EFA938382AA834ABFF1069EAB633EA817890BE0340C7471:\ +5DE936BAB4C06AF24B4083D42006B6F1:\ +B355BA45A1690385C48B557E22DAAF37 + +D1592D0C67A705130543605408D6F919FC30A2BEF6D4D0CDAE5A7CA1AEBCEB4A\ +EDF779C9DC7F36E1742CDB993A8FE10C3DD02878F9B906EDECABB5B6ECA1CBF3\ +13B31B0A24C075626027E113A27D9A8D2AA466FFFBCCF0A69ABB:\ +D2F41E4F5FCBA0CBA4B116BEE8A18E07610AA1CCA0309E9FBF35ADBD2842AC71\ +7F996C569697F73BBBBC852622781D2F9D0A06F59070019109FACA505C91E70B\ +8C592020364C8DF7464C1F5170A0640D3910F74BDFB22BF10FF1:\ +BBF991E78408A06E251F1C3A5CE70D52:\ +9BD49245886221FBF69C849460E29BB9 + +1C1B4F2F4297E12CBCBA6309AF806D4484683299500447C0C7E89910679DDCD2\ +D4BF27F759A9D8E8D6FC5C3B358A510F69F4BE2A460DA4183985D426E1E5D171\ +D5AC363330FF4C42E893F20D9BE08CBA3FEF9E4EB56260B866FED1:\ +1DFD895B9E4C944D6965517F115729D6C6CBA48F1FA75B63CA669705FDB31EE7\ +D73973988F5B73CEED023AA6398AF1C01ED3CD9FCF9BE04AD675E3D49A50F9FC\ +386533C12F89BF5CC0C8800A2F769D2BFC01FE0E4D7BFBDB254FC4:\ +270DE1437695766D234EC8AA7550955E:\ +EC6DBCF2BF725BB446A026DECDBC3536 + +96E90DF1B05F9FCEBC85566B90AA6B54CB45B20F86A2FF093E09014109D01D82\ +BDDE0FC837D2BDFE461E8C280C517B1E9C4899D19E35939919FB29DCBDDF98CC\ +59C29298399A9E3B75DD0AD13061D785136112251DC93DC6458E354D:\ +F02AE9B596A60B1B55A0A1AED885AA41CCAC58A620ACFE54F222592C4F9FF9E6\ +38A6F8E57276420EB14104940F128DF0DCE8998427A1FEB6D0077D92061CA9BD\ +AB42554329C8D44597A346CAFDF19DD6EF1E271CB444E1594EEFF448:\ +65B0D4643037333894C2567F1200651A:\ +5CDFB2A7DCC2E1903BFDEC88954BD0E2 + +F41F334F73D002068F64A43533BAEA6A0AB6703D68AF6D85621AE7993CCF08F7\ +637E047C0B9E8F679B7228AAC16ECE23B3019F80900100AD079E5F9FE571C524\ +9C3CF9B8BA13C7566F0EFD29AF4F4827C1676D2E895C8C743DC9B48E33:\ +FF27467D014B193A4A435A0851A6F70C27BA92ED82A2E4ED18152EF20FD5E7DB\ +1EFA494ECB64588B29FFF34827A49EE511C29A93B68CA661732C286AFDB08727\ +1421D4F4AA8D0BC9E71C59E4CE6169227435BC2652EAB29F3A63F1E9BE:\ +37C4175403C4A0CE66F44A0D89398150:\ +2B447659DF9022B1EF5EC995B4EED6C4 + +0A17E8BC90EC5C507694C084AD918F6B42EBCBB0FA695794CB8A41A3B8F9F4CE\ +3ABC272B3B1F2E46F55A89E13A99A4509FB68EE322AA95ABDA5DD65519056210\ +FC327BCE11E8A772998ECEEAAE0718D5677746FF68E4E24E890C775AD3F5:\ +176F5728351F63009F37BDFF6D7B305E77CBFBD621140530BC4B9CFC65EB7761\ +13BFA8FC6282979907E78E0A14D2C7F97359B3648F841C98EEC4DDD0F15BA1D3\ +057A0EBE0212EA54D3F41ADCBF5315EE23926870408FCBDB0D47292A1F01:\ +30E5E7F3199B6F4B9B4799D0FF8DA9B8:\ +8443B0454B241D603E3A4CAC72D562CF + +1F322F9D6F5CF8D38AB21E1B655261316C1CA0BBA2236F9F2FF5550998B0CC0A\ +376826CF6142E3D1165B3949D172A098C6ACF50468BE1E498FE020CCE0B37C5F\ +DD32233CDB4DCC5BA2A70AAF1F27683B1DE6A210DF857AE6DBEAA5477320E1:\ +D3930D3B1915CD157DECA33D14B79F62D0BEC44F51A669E07F2899CC21A849D7\ +6011453BD064189415B726D9AF12C8F50CB887AB6714FBC71CF83E3953BF52C3\ +7FEBEB48D14C62B1A64F04F987BFC6F311BBC27C79F4520C2C710B69047BCE:\ +711E9F19B40F63409045565634E94FEF:\ +00D36E6FB099D38C94DF4CE767A26DB9 + +C830A4AA5EDD5AC64121F0D47441884D2E9CDEFA5F7138B4B8505DF55185170A\ +80164F8B1BF583A0EEBAA52ACA5BAA81471CAF81FF79E234FB5DD5066F8E1DDE\ +FCBEA047B9B02C80DA480FCC5B67378AA3554DDA138256696A875FEDDBB233F0:\ +35A8F3F1C7333DD3F1713680B1ADBB4268FF3DF157C7E1A83DFEC1C224723FDC\ +864559B9436CCF36A6F930AAA7BA03CEF94C2A01ACC587E3CBB334779833ADBC\ +22B873E71506207A4A1320FE881C0B5F6EC5B384B7C50E88FB8100AFE85C0E0F:\ +8D2FC9D115F014FB6F61AEA91DA55153:\ +0E0E45107F52F186FC2F38B35565B8D2 + +08155837372A1F8587F31553D0CC20BFF1B499D0EA035FD3809CC14F6BF2A5D9\ +565A734831A2EFCF4EA5939FC74BB76A0C8822958C8FC73E77D4C856339E5790\ +22EE3AE26E737A8E9C6E3A9481796EAC61035BD97AD45EC7CE746AA0D587369E\ +D2:\ +E9B72DEAFD9DF0839B94F32937C8F4571F83C648EA7E26193A264A75734DE940\ +006D9CB5F10E2647E5253D234898021118578CFD50F7D9A32E59C48A98859D05\ +7CFFB16F9C345002A0C577E875A561A15C78983771D75A7DF7286B8924EBA24E\ +59:\ +6F7035148AA370DE95DF32625C61DF1E:\ +89D60899E5C54E72C9E86AFC88E283C1 + +652D41B854C0D18458B8C583D5122DA3AC6B278ED180E9A98A2CBBD23854DB32\ +DBCF4377E44F339DD6571AE16693D9E5AD9834D38836A71002C40BF320C28EBD\ +C5824F6701EF35996C8D6C6F843C585C83A42C5F775073AC065AA1FBD61F7F18\ +D68F:\ +3C56B8394BDDFF0471148D0A9CD7B0F6B179EC21B829EA808D6E55450CA688E8\ +EDEE29B1AC3AEAC76B0C3A2D8604F09FF3E777085B522925CAE621DA0E66CD80\ +63440838FF3FDDDF09A64F3ABA5CB43B88FEEF6572C053076BAEF92454729C08\ +7AD2:\ +7CB41B5675945EDADD9065E47EB1A2D8:\ +883FECB5355C16D075A7DE014BA9A05A + +3756825A44E0C3D7E90C0F4EBFCB2FA4561EAA12C693E7FD8707AD206133D0BD\ +EEDA0BA65EF58030546076FC9904214E65CD9DF37DDAD962626868A3B32AB476\ +BB694534D37A77953D6F1109515C5B5FC239C88FCEE22BACF54C44E03E9E3784\ +CD9099:\ +FF9FC9F00DF578810D3D9F7D50B881B2578E9D7EE8328A3F8C702F9298800621\ +DCE4CDC2E55E2B75B0574A57A9296400F811FA6E899CB8214583B969C9D5CB03\ +EA966FDF32A2F1FCA8B0B64BE84C18CB4A7F7BD8DDEC03953E744520D95A6D65\ +FC735D:\ +21C9044F7F1F71AA0FB698E80120DE7B:\ +FDABFE4911247EFA953293DD7FE6D5DF + +FCD4675A023315724B2BB939E6E1A62E403B90C9DD267DD6C2E4B39DFD171117\ +4B9D13004827B08A65193BC21A9A6C0AAE8C2527ACE9C62AF6810ECAD8671403\ +CFAAF86BBD72E3BBB1875D9254D04A8209AE9E800E41A7BA5514F9913E94CD84\ +69A7B6F7:\ +5C7AEC623C486C256635814A95F07235A4D6932FC23CB54CD0A6C76ABD58DED9\ +EC90B9802B7D4366ED11E7AEDE696D3A47B716312DB0577662C1B8B8F8523EAD\ +62FFCA8F3C6D15CE2280B7DC8144782D9CDA5D609F871051C79FAAF9006F686B\ +068E9B97:\ +E06085A98E76F04B2B78476A4FEFA542:\ +9A619CF8924C6DCF2CBA067A34B3A761 + +9483B567F791C819D9F4F607AB82E0E2F75DC02BFFF7836563B1F89CF0F3C859\ +AD93852485A76A5D51260376C7877E2A875BE3C6528D339C6BE1597688805022\ +AF963A47A188112C714CBEC0435AE99B9441CB7D5D3B3048CF9C3CFB91C7D248\ +3C3CBABE75:\ +3FF3298943869CAD3CE99857B849455232AF6A0420985364BED603D012F1AB29\ +DAE327C27FB107FF25E061A60933772EE5F9FAB717378E739ACB6D2F09FD8A3D\ +1B02C2359E0AA8C07593367BFF1C5FB70C20BA8742D4EBA2A9D12678FE08CB75\ +8F17428DCC:\ +BB11666DCE893166774A99EB9F4E4A55:\ +103399E7EA5A24A0CA60FF24DC08B391 + +00080A114314369DF72FD1339E2A83F2427DF458221236C416ED129563D07E71\ +1BB378FFBA1787809C8AA09B031D23033EA418E0BFD8E694B0904C73B964D73F\ +975462D3264C3F8E09182F732E8E14A2FFE3F50E5A6F81BDF6D49D8579AACD98\ +52E699C23502:\ +04B30B016A92070ED18565327AF7CB82C4940B3289B28BA4A1208357B8DB6F79\ +930E885E05F617C5C152D619950C1B986CCCDFEB7F9BE26C41F2142DD05C25C3\ +B92857B87FD7944611AC6ECFFB66011CC313C2BC96581D7624931D061ADA6FAF\ +4EA4B72D2E73:\ +1A7031DBAD6A06FDFC79B25C77E9EB9A:\ +64D45D74ADDB71224104B3A4188916AC + +D5576F37BDE9BC6FB4BEF8F83BF565C8E710F05D9F2FE47E4266EB23875C54EF\ +63C5937A506B7BC3FF6ECA77D953EC905A2F3A84B36CAC6572BF8564D0D33C1F\ +F3BDC96F374AA75C7262F49338AFA81A6E6415FE60E4E61F3994CDD19589BF38\ +9CE4BA169B99FC:\ +BB5653A4C90F6BADB14DE8D41C55648BCFFD7017F8CE43CF7D78A4FEF9DE625B\ +0B9EDAA83C901C5079E7A3E2353E9679032A029CE34C5DCA41D917659E2D46AF\ +062728E7D170FD743C1E52851CB00AA95ADBC2216C109523B605041C1C220959\ +16EF8ABAB9C471:\ +B2414750A8AE2768688F7C82B6DB8C63:\ +04B8131DF59B53A0BA806FBD07EEF083 + +47621B4D2805AEE6DEF034678EEACB4D6C4395B39D8ADD4A60A9165E2CA7B388\ +0404B40AF1B1E9083AF8FA1D69CE83BC9530B67D2BCDFE9E36D1FF05D6FB6213\ +49FAF662C55F62727C447B35AB2336FE86ED7C4F3EA6880352EC6826B5E61BD7\ +2478941454973E3D:\ +95AE682E1A4A92FB00D8855C22E3763064BD8A771EB2AE675E0C676117AA425B\ +B885C63E7FFEE58402170FFEA5FAC4B5EAFB53AFF6998804C6F99AB09821F8D4\ +2F8B7EC788F0E10CDA6714788DF679976F928349FD8E8F14548C1FF4FE9025C3\ +547E486B0ABCC410:\ +BB7CF3E17CDE92291B4F5B97D5091ACF:\ +B5D12B6A1B4AC6904FC2C77DF2A76772 + +358B57B91E90956DD981B9AD2F570908502F1FBEF230A350B324316FC52E1BC6\ +E69A2CCF39990AAF1FCD59BC7B712CD1321F7F9915CE1A46D0A1CE9E3F500BB0\ +D0F1B9DB3E1EAA8CB532489AEF8FF6FA4F6970D7BC8045E0BC9F304E257145EA\ +7A5828902FFA9A6B89:\ +70607CBE0266AC893D82198992E0EB8687B6787350E8797A96B16FBD8444A092\ +058810420DD51854E87E532BD45402682C9FA77ED1499CE07D6DAFCD5C15D056\ +000052E3D9403FDEAFC91C479AD9DFA313DE0C9AA3700664D32190348B29F9FD\ +B5BFBAF249F10FF0B7:\ +2F5B82638FAB8E485826C4B65992577A:\ +5BD1063BED52DDA5D04D0F85486763EF + +B713EA5878BA973DB81463CBC2DCCEAB876AC10EF2BEF98F141428A933DC6968\ +BC657F53AB286B28FF6E141F6DEDA0D0E708B20F17BFBFCC0D994B443A853A29\ +2C94A254A8055B713122AA27D079CD6741BF813DBD9471A8981E433F824311C0\ +295225FB9553A4038254:\ +4A8D9EA5DF1462E152F8DE358A92B7283723D49565CDACB3DB050E4C93C152C1\ +4063265DDFB76D46FF2319309169C2086A31D521BAE0B9B3CA670E1C2C033F31\ +56BB9350B0BE208A7D41101A0B063F71771E2AE2A0A5984DB5341C76A5091CAA\ +A536AE7CE4695FD37B99:\ +8F4FCEC73EFFE3DB1DAA37494D1229E0:\ +82FB062F71C5984EE7A80643BDE0659D + +BD2C3B366C5480ABA112A5481AABC79A024ADD95F6FDED50B328EADC4109F669\ +103636F1C6DD7F1D57E307535F4FF3DC963C96A8DDCF51470FF02AB21FFE9100\ +08A8DF16EB2373DE599189DFF12CDC348D67A6F33357E86DFA5F813877FC1679\ +74AE1E835469497A682D68:\ +11CEE8C48CF3398082D0820F8FD1B200FF0D0BF29E8EA12F845EF999C1B4E9B0\ +938CE474755921C86DFF4658C29615F0A2D64179AF384FDEDB103B3B642D3FF7\ +99E24394BE70C9BBFFFC56194FE861B124C9A605629ECADA990CB736513C2843\ +5D1935E3145A3CC4BA754B:\ +7E3D876FBE4849C64A2E6FBD6935B8B3:\ +8699121F1CDCEEAFC4ADD47DD4822507 + +3E4A39011E58A44C9ABE3368A899426D034DB05E097060C01C63F0DE3149D0D1\ +69B9F185B7C38506AC7976E6E182DF704844F1DB5736821543E978B9299614D0\ +E3027B7D39B4FD4034E3562D71C685FBAFDDC16D0A6C4DD1A5B3DE255ADD980B\ +C2CA50B117CC6561CE792AD8:\ +D5445539FA5E9045304A7FB13ABFE5E535AA8BD830AE8FA0A8787FD0497A995A\ +9E42A622B2D9C00CBD66E48A74C4C32CB4862FBCB38BEA626DCF65408D7CFBC8\ +2527DD709AE68908D14A9F0AAE118A7A90A94BF970F6E4375E42C377609C04C9\ +D86F5F18109A8B21B22BEBF0:\ +4856224AF0495A558349E5A8A13EB199:\ +7E9E8FBF19BA323CB2B8060E79FB526D + +0178CC505660EE73D385D55A680C13F66811CADDACB97C303D90FB9AA735B91E\ +025A5871125B1F8F728A1A4CE1ABF2B68A1DD66F72E9CB6A28B7BF13190EE5C8\ +8D68FCDD44FFBE340935B0F32AE0E3071554B94F7CC069AE0C1E465B7FEFB643\ +04B84B4548A2B6BEB219CA9C03:\ +C43FEF0049C62915C5E7966A2D51AF66A61AC78A7E7725D007E41808C3BF0806\ +71EB8710CE36C78905B4EF0A2C4F294F702AE24D2DBBDBDA8FBB7E3DBC1EA0B9\ +7A884AE62B008770A08C909552D48F076268B9C14F94EC1BA17D504A63BB7B68\ +B7D2A7C0ED2AF76CCE495287BC:\ +1D8F327BF9485ECF42100325FCA85813:\ +28C5C1D3FAAF5703E95EE78096C53022 + +7A8B2BF9414A0648449541D609CE1DE8D3E8060BF09F449BE3F98FC4D6CA7B41\ +FB3DF2306B33BD700C767C99F934C78051BEFF6F21661F4C211A2AE7D8BC328C\ +57953B39E1B424994B0EF865ED752A5094A4DA28DB42F1D492435E7D4FB92B4F\ +E61D5034921D0371B0DA05E90A43:\ +28261AAFE01C7FEEC442ADE2C7E298C09F7BE36D8883A3A81C8266523B8CDF1F\ +A4C45B9C41E96FB53F8781EF4A91192342C473AE3E2B0D3C026803868D0978DA\ +488EBBE8282CC07AE95E8042C863EC66A73482481450B9715E8279D5D4FEF788\ +2F81913679FC022624BC9E800C9D:\ +D84FEF97E5FF1A5CB866B8965AE205C1:\ +56DD14E0C72D31557A35F16D93F36973 + +459F416851ACC54284A9E82CB878B82AA6C589A9EF96BDCF18F47663083F53A6\ +FB5596F976ECC5BB49078C07E7F31E68AFB84F6BE1C157E93A4D0D86505881DE\ +A2FCECFE477BA35FCDDA2CD2B9E85194A63FDB06DB8AB5CF6C25CA323C09D6F1\ +14BFEA93CE791FDB588A068D27BAEB:\ +D7E8EFCB3081AC49002FDC9B899FACD2326AA7D13ED97360AF2859F86ABA346C\ +C7A230E0889269DBAEE7E83BCDAAB0274CC84B4C3353EF0F75646C5ECED75AB7\ +BBFF646376155DB30EAA1CE5E0AFC3BA38D0EED7FC9EDEC2418FB6BD00E8DB24\ +8C07B2AC8C92D5696D1B26456F67DE:\ +E274D29F8D942F2DEA0F2EB56EA4A65D:\ +B060E8D64520B1F3FDD513421461DB88 + +2CC8CB49AF1488C956C3E065C6E4E14E40C0890BC5D0042E49F0B42E0FC54347\ +0D34C98A894FB31EBAEC18327888CDDDEBF3A6467DED49BDC7AB0EF1F3BE1DE7\ +B6A7C0B63D94F818E21823E9AD75D4416C55848FBB6BE2A9F06190089E455B4C\ +EC9B5E45AD86D93A31E4AA84508CF9B8:\ +16C084E323E61E22443BB67DD8BC82A4F42DDD86A187242802F4E6EBA7381D7C\ +9BAF5D439884B2B7231F93951AEF45E843EAE09AC7208D774B5F3798ADD4CE74\ +A41508E0AC7D7DB8A6C47AF8BBC49C41B96DF51867BF4C650EB39DCFFC6AC736\ +5952C585CFECA818C62BBBB2A653D426:\ +710DF4F3ED2C815B98B0D6100F79F9C6:\ +E79A134DBF61E5B7229C75C312F5C02D + +4CF8A7BD22E0EBEB7BA5D619A9964EDF83518B08A074597616385B8D48AF8A7C\ +1F779E728229B69FDC5A8624F95C9B891FD27153E5CA3BDD40C7BE56D2A5FFBA\ +E32CAF544B5BAE9A7A9669BBF1ECEFF913D037EF7DD016496C52199E3613314B\ +D78084518A5661F42DFA7E87ADCE83C5DB:\ +6051562B133B0AA03D3CAD98E8696FBFC45BC457D7888DCC302EF3A6CEC34295\ +FB6E96237B2168B8F7EC6566E49A28840D12A9B4A6429C57F2EF46A2B8F3EFBF\ +79252D86D7AF9C600AD4E01728791F349DFCF97E6B0C487CF14EA8D79FD72A54\ +88FCB6F728C5214BFA987B4A0521A22F22:\ +6B1E9BCAAC6D93564DBE4EA67AF7FE82:\ +EB899146B055647A2A32798D45EB8DC7 + +0C78FFF41C47BA8610D9EECE738A4451CA1AC3267D9F6268AF5E8EBE432E8252\ +FA8E378E0C4F0A7000C93B415249C66719BA3435593F216937E7F7DC64EC3E26\ +B38055822175D8D27979CF4AF86B3A61447E29BEE7EFFC249483FC29815B8A93\ +791DE7A8E3182AAEC0A3ECC4C5945A203D5A:\ +56562246286CFB3BA6BD411A3009CC25BFA6CCDFBBA44BC90C1EE7B4FB07A5B3\ +66183C2B230844108CCEED0FABD01B15168F82AA9B8315422A5175D86DB2EB6F\ +452837F2C9D4EA7956D6B254E4E4979F278518617A1985BE35B71F80B6CF5589\ +F076689E022EEE974F496147F29FE5810CAE:\ +641A4B7E4268220890E145488960C185:\ +59432C9E1519A223838B180634B51521 + +34B22337AC8C2D57B79208DF0CC4AD245FD02776876F0EBC5B3EF57A4E35BD52\ +2B8F8F3ED20F630F2C4C706845D1142FE636C69BBAF78E9A32C86F7ECECFF5BD\ +AB8ED1C72CECF59E7120D6C1A1C91BADF25F7E2E710FE6A8C97EEEEFBC2E45B1\ +49DF05FD33C1D8B7A37F7A31CDC43A56409961:\ +8D4133BAC7BC2644BCA4E525AB21D57036DFF7CF713C4A80B913E0E0DAAB1EDE\ +268B7D2629CD5DA5E69DEC179C64666AF7944482D051A43E3008DEF5E1871A1D\ +E6DEF3539AF563F42839F67AE0A36D1E18381C8D8A50E27E28998E3637BEF02B\ +409AE040DF719AADBE213EBA57B179FC5BB0A9:\ +D3BC0E0818C1D968378290A948DFAD06:\ +F9CFED1A6FD8B74DC354D25315A12869 + +6A70DF92C64A831F654DC3C347D12317441F012C3B34B62E3BFE9F4BC65F9EE7\ +7520B11A109D60CB5C97CC071504E900ACC32C85754CF17685C12178C40FF85A\ +453293404AFADFBC4369EE134AA1EA6E417BFD290B2FFFC5B244CBFF10008644\ +523D50962D7FA7779B818D20DF1032E0D08DBB36:\ +938BAC00576D4C6A3AA073F1AB7E06FF98F57838F17F7FFEE2BA079DF12DB2AE\ +79DB5225B274D943F90A1BBCF239755E2117AA9C7631AD60D93A03DC2D848E5B\ +BD3CBAA245621B4E124AA1772BA423DD3D6B86478C8DE0EEA53B43728A299305\ +E96A93FE337D06500DC4C19E96AD20DB495D2A01:\ +45931A0BC3F330A3390A1285121CBA69:\ +DFA9D41C68B05242052C49B3F9476722 + +1B46DC2A194A4EC1D6DECB3B4EEE8B9E815052293884070A0CE77818BDA476FF\ +820CE494A8A620358E560E978BE89F6753FF625E7B9FAA2183E173FBE7B8EC09\ +ED968733010412A31BE5155FFB5E1A31063CCE011425C2C0BFB6E7851BC6937F\ +324F8B6CD7409C14DABDDDE9D90054B97D01A9D030:\ +7C474EC6ADB6D2E9CC286690FDC89B3BBBB53DCCE2529FEE1E7385A73ED7812E\ +C1D0C07558218889872793A7ACE8AA08C2AF2DA5CC529E588A26896E96F257F9\ +5779B797353B3784870FD49706C9F53C0D3F7698264B92E437435431AC793ACC\ +740A68B2096FC4BC696AD35BC84BE379F08C2B75C1:\ +2BE723871AF751A8F29FE427EB4AFCF6:\ +9BD948CAEC0C63433EABC81058FC54D6 + +9B09EC9C26135DD7E328C616BACFC1166CB0A6DE265DE3930EE2F6C2A2F17A6B\ +9ECB4C695B1D6195903AAAE922EA99FA72F2FCDCB4A0CA4691904809E9835D2F\ +87ED4B8485F2B1378A8D14710E0CB21223BF4A031996FFD9BB053597B124FE42\ +D712369DF9E42662C4F353381B016FFB39117953231E:\ +93FFE4FA99138A95461489C915CFA41F0BD8E73DA1D02D6CD28B4516A1D151B1\ +CEB905E4F4282A586A41F567D324D6D90E1814CF86E463CCBBBC20C7F4A95174\ +4CB375A621FECCC418FBA8DAC781A8E89E003B34E1C3D95313543318517C02F0\ +2544854305DB91B05CED444B02956E1ABD7A464CA158:\ +3DC16EBE791AB24559F9B2F1F6C80D13:\ +EB15B43C7C1FA499E13972ABB38E5059 + +77D6EBCA61FC06C689515C26C8D13F7BAEF7539E63ECB3DED59B3A12A5277674\ +507A94EAB4F7333159929EE79BC000CD474AC416159E0CCDBD77C4218398C784\ +4A98B549BE8CBE06B7A3CFA269347DF9BBFF1C7E9346F6045548C922E1E5B961\ +84A0F5384242C404EF31CD0ECA6B5A0D3D1B825959F87D:\ +76AD0A59D48C62648DAA6AFE551A76D734EB420CAE0ED368EFB29ED715ECDF9B\ +A06BB58AC17986CF78307D12C8477F7FCBE77D47D14700F998561F8045C4CF53\ +C98B048E21C773AA68AA6DF4571C64084DE4D96CE838C103643C077E1CB35EFA\ +664820F478F4844312FACEB4FC014E4B8404B8BC8C3540:\ +62A399748E8768CFC4354749FE98E1AE:\ +9DE4950CA5BF39BA05EB3A5B867FCD59 + +8973F0C9A1AB4E76CC645D59DD60877081349151C5F39705D432C6AA3AC1AF56\ +5AF923F6CF1635919F59F28F18754462D0A63E909AF3901D0D4643CC627A3D75\ +0A737035A1C43E58BF43E90BF44F7B766CDAFC1001962DF30B54462DC1156A4B\ +A34FE80EC38AF8EE0715A01F2835907D2C2341FB624909E8:\ +D88924E63979C8990E1508D198C019573250A3FEF243ECF82B5C6F3D5977CE69\ +38A688C63F7D44890B1AFF1F0D82C78C21B2F2660E612093E161C5CFA9D02B0F\ +13C3689AFE54CB930370A24E8EC7AD90C3AABA0278CA36A14E938929117CBCE8\ +ABB102ABF2CA46E7413D4DC265AE42FE513954CE88C330C7:\ +00D7603484E89AA807CCDCCAA7FCEEFB:\ +B20E59D1782A9B2D156E82083F5F0AE9 + +6E617AFED34D6D72176C41071C562D462ABC10C698A3D30D7CCE1702669670C9\ +EF485FB7239DB3BF58B0CCEFF683BB57EA7C717B007D19358517E78DA5BB9B83\ +B336441F99367523E3824B842A6F58D8E4525D8A04BC011DBACF413F8B2FDE1B\ +2E69B59289ACCB6F67E8C74222FB8EAB8396DB82142C9C227C:\ +0D63C50EE0DF01B0D6757489B6124D16779A7756EF292C0D1527B9B12A9C1EDD\ +F14CF75B9AFE7AFFE082916D44FF3D7FD5950597A3D3507D9C25240DF0959439\ +1ABF42D4B9F126F9CE7C5022724196878C7FB7D845D28BFB7E2B8063D9BF1CDB\ +06632FAF53B05CEDF1BFBBF7FD9A900893C1A1BB80CBB13B80:\ +2BC487B3F0B5849461A34EC826530DDC:\ +A626101B94FB228B40D9BFE968B93283 + +8057464E6C7CA4832841C68AA8DAD0820D9B6F914B58152DF50D17DC0573EDB2\ +143EBECC208E15F85040624B1AC941A5739E36508964FB23DD6BBE4A869ACBA1\ +660E545794024D8CF79F2F7F47F7AD27132EBD9BD45DF4F0B4CB2E892F3B8F3A\ +5A6A4443825B19D2BBE1ABFF243050338A8E6A94E7299779C04B:\ +2152EBD90B8D0A132CB4A0FEAE79D17C415C64EF95C08D178B6D106860A1806A\ +BB36ABA214ABDD07EE9D188C6EC64281008739C5ABE99341BEAE5F3BE8947EAD\ +04CF713DBFC3E808EA1A25721298083736851F618541FD740F5037977157B751\ +C2C665AAB37B53EF2133416000861164309944FD2C7BAF01E0DA:\ +24EC777AD83D32FD0B3E273CBDC3D06C:\ +0A864DCAADFBCB0B21681045573805A6 + +9A1964D4FA2038D123902B51A09FA1A5EAA84B5F6A1F622E78F799D487EA90BF\ +44C6D591C5F1785628A98045DB7E5750C6782AF367186431B07C8782C1D5D5D6\ +E09455079DD6DD1F7B0AE3BD3634EFF698A19A6D86D91143179A7B350A956DE1\ +B44946BA9E111BD690DBB0277DBC2C79F5627E491C4BFBA09A7E91:\ +B13D67461B776D04C361BB32202C29F576A082BD63A58D4A059CCDA610546D32\ +87992D6D62B72DDE8FD2C828C8CF40D4C8E83FDC28457510F90C3379A394797C\ +D9375F139042116573728BD54F7A42B312813D656DDA88245318F957D4A560E4\ +5B395DECA5FAD456BBDD6EA37CD9AC21A87377D2FE18DDC19FC83F:\ +4C5C40C1DE409372518E3D2486181C44:\ +989F5547C5F79F05B04E40353DB89A76 + +70A6A74CC6C98DEA90BD6D18D8BBAFED2CB45F757184DACA942B1EB2728BAF94\ +A245CF5A3F27FC8CABB9564BF803EA75DE2B62DDF361454823ED68B691A1C4C8\ +6A0361543B950FA9D67FF767C1DC20E384B7FEB48518D0B251553520E39A05B9\ +50A7BB2B44B7B8737AEFEC2A875FDA8B901E130B3947B65CF9736103:\ +1254535BAE8A3CEEB81C5AA04851A3AD15CAEB906ADBAFC93F05436619C037C5\ +9ECC67B1B4419733B9D5BA4323225B4BE11CB0347BB750E1B40603E23FD06736\ +3C616ADBAE85C1526FE2C8F11AFED5CECAB321CF97EB314B999AB118F098E2AE\ +1F89E56F13FB501E77C02DA692E49C8BBEAA1AA9EE97E7551756C2F0:\ +F156CFAA28C87F157DC989170929E8A2:\ +94A82BC348B0AFACD194C3423AA8875D + +F5AD5AFB27665589C9F524176716C60BCFF9E3E41FC9F6C5E8B83C5485F956C9\ +BA7BFD0D8742F6F391D75178E6B560C0BB32AD3701998697C23EBDF74CE4876C\ +9B1C89E43736653D6A0AC442B143DEED7F2C5E84DD4874E1854E676CAC32F0FF\ +E5C0057F83DEA1BFF2044D5FBD4768D809A61FCFAF4A654AE21D233BF8:\ +FD66135ED18956B6F07BCE45BD57F0FD1DE39935B8CEEE781988DFEED303D189\ +CD49725F10BA59876F00569C1B7E941F3EEB21BA0E04D0B617C435D5638331E5\ +6EB7CE315C4FA4D875ACCD1C4B8660E15A3FDCDAA77398271E80DCB0B8B861B9\ +7A2E2B509234BD538FE0E8EAEC36BE2AD4CFC46591487297981769036A:\ +4E36103C8C67DE1AFBF8109D10BF10B1:\ +41EB43240037C71DD6D6B2CCA3261338 + +92233AAFE15359C0E59E8EF3595311AA370D18FBFAD06204346CA4F2F0BE6DE1\ +D3302819BE77F4898615C4D3D887F3F0209E66E77B002150CA32709C91099BE4\ +20E95B5E753D6F5C0C09F67B0DCB5DDAD0842F6CBD3CD16A187691E24A7B2F14\ +BC95EFC3359B80A2C3C93FDE2BEEBDB20020A3041F5D83EB5AE89FD09637:\ +7285EFB954C50E78998DFAD44F952F436CEB2C47D303DF1281CA8629145794BE\ +88B62AD6D8F35B00C308B321901C3EFB2AA32121276C64079EFA6FCD86F7812A\ +8AE11E99274DED703DA1DDCAD91ACDE50C3FB38900E07D4C1F6B74CD6010D6FD\ +6116B9BFD956BF0A3D391C39EA314236E14DDD9AEBDD03C1CC65C6337348:\ +11A8AF11A03B80A71452973CC6664AEB:\ +A46F37AB9C79CAE2C0067913BEAEFB52 + +9A94824C6C3551364320E09FD9586C515AABD15AFCDBBE31C2AF0E7188BBAFF9\ +BD249C3892FE6F4D16927C1B65D3106B3EA4977E1A1DBEB0F0BD88ACAC7492F6\ +D5834DCAAA12B9723DE2CB00D634DA187C15DC212542C7B0D495FAB7ECADF22A\ +F95C4CE4E762D18EBD4673F2A2AEA54F43D0048C80A907CB609EB3B3FC5F1A:\ +9F6DAE40324E5E369817F79A5B4D57474B75C5E9EED2A7450BAF7A5E94F1DFA1\ +194EC919030EC853A7B33BC1D3D5C0BAD403102C5BFD76383A8723C73E88B406\ +5267E075A5A42665384B1336E7435C36BCE4DD98B220D42770C6485175707427\ +8EE9654D9E9798F73BABA1CBD48C80178332EC159A5BBC7009D7D627FCD37C:\ +59AC380799FF7D4A6126A445ACE889D5:\ +18FFB0A05F2FF079D89E1D36082A4579 + +E71039961AC14FCF7212ACA932E1C6307696CF7D98A96048D888CACE6B95A32A\ +268EF802CD311EDAA92D96019938D7F6D1E12C70306A1A893341F610D387248F\ +00A113BE0BA43CE254B0958EE5DDCF10BDE3223EFF0BB7FB71C833A7A3AE52F7\ +8E00B7A294A23B76868A53B74737E23B93A7B89F6890791CBA7657715B9DA9BD:\ +E411BA4401573E11E51D6D7E318D6DDCF23E5927CA429DCA57C419BBC391CAC9\ +EAE01A2384F4705EAC94B06F151638BC7299DD8FF570404363430E9B06FFAABE\ +C5E1384485E7A085AAF6E2692742F7E9003B18A4B9FD5D772EB0A326655F38F3\ +9B2D49035C484AE4B4F12B14A7BC74A1F0ED2BEC9906E45C22C085C04679DB62:\ +F1E297E1C4E33229EA69EA943BDD5C41:\ +D43BE1D1871642996713B6400DA4B0A7 + [TEA/CTR-BE] 0779B5A4D94C4B572257340F8F86FBDC5AE955DB72E588CB3D8298FE27ADC668:\ 6D787EAE01A5D7946C8526B75BAAF2A8D1F13CE4AF93E469A21B7C53965A1CE1:\ diff --git a/checks/x509.cpp b/checks/x509.cpp index 69dd29492..8b7ce7d47 100644 --- a/checks/x509.cpp +++ b/checks/x509.cpp @@ -1,3 +1,9 @@ +/* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + #include <botan/filters.h> diff --git a/configure.py b/configure.py index fa4be8bd1..b4712b171 100755 --- a/configure.py +++ b/configure.py @@ -132,6 +132,11 @@ def process_command_line(args): formatter = IndentedHelpFormatter(max_help_position = 50), version = BuildConfigurationInformation.version_string) + parser.add_option('--verbose', action='store_true', default=False, + help='Show debug messages') + parser.add_option('--quiet', action='store_true', default=False, + help='Show only warnings and errors') + target_group = OptionGroup(parser, 'Target options') target_group.add_option('--cc', dest='compiler', @@ -315,6 +320,25 @@ def process_command_line(args): options.enable_isa_extns = parse_multiple_enable(options.enable_isa_extns) options.disable_isa_extns = parse_multiple_enable(options.disable_isa_extns) + def enabled_or_disabled_isa(isa): + if isa in options.enable_isa_extns: + return True + if isa in options.disable_isa_extns: + return True + return False + + isa_dependencies = { + 'ssse3': 'sse2', + 'aes_ni': 'sse2' + } + + if 'sse2' in options.disable_isa_extns: + sse2_deps = ['ssse3', 'aes_ni'] + + for isa in sse2_deps: + if not enabled_or_disabled_isa(isa): + options.disable_isa_extns.append(isa) + return options """ @@ -445,12 +469,9 @@ class ModuleInfo(object): return os.path.join(os.path.split(self.lives_in)[0], *filename.split(':')) - self.source = map(add_dir_name, self.source) - self.header_internal = map(add_dir_name, self.header_internal) - self.header_public = map(add_dir_name, self.header_public) - - if len([f for f in self.source if f.endswith('h')]) > 0: - print self.lives_in + self.source = [add_dir_name(s) for s in self.source] + self.header_internal = [add_dir_name(s) for s in self.header_internal] + self.header_public = [add_dir_name(s) for s in self.header_public] self.mp_bits = int(self.mp_bits) @@ -509,9 +530,9 @@ class ModuleInfo(object): about any that do not """ def dependencies_exist(self, modules): - all_deps = map(lambda s: s.split('|'), self.dependencies()) + all_deps = [s.split('|') for s in self.dependencies()] - for missing in filter(lambda s: s not in modules, flatten(all_deps)): + for missing in [s for s in flatten(all_deps) if s not in modules]: logging.warn("Module '%s', dep of '%s', does not exist" % ( missing, self.basename)) @@ -527,6 +548,7 @@ class ArchInfo(object): lex_me_harder(infofile, self, ['aliases', 'submodels', 'submodel_aliases', 'isa_extn'], { 'endian': None, + 'family': None, 'unaligned': 'no' }) @@ -589,6 +611,7 @@ class ArchInfo(object): if endian != None: macros.append('TARGET_CPU_IS_%s_ENDIAN' % (endian.upper())) + logging.info('Assuming CPU is %s endian' % (endian)) unaligned_ok = options.unaligned_mem if unaligned_ok is None: @@ -596,6 +619,9 @@ class ArchInfo(object): if unaligned_ok: logging.info('Assuming unaligned memory access works') + if self.family is not None: + macros.append('TARGET_CPU_IS_%s_FAMILY' % (self.family.upper())) + macros.append('TARGET_UNALIGNED_MEMORY_ACCESS_OK %d' % (unaligned_ok)) return macros @@ -1014,18 +1040,18 @@ def choose_modules_to_use(modules, archinfo, options): to_load.append(modname) # trust the user elif not module.compatible_cpu(archinfo, options): - cannot_use_because(modname, 'CPU incompatible') + cannot_use_because(modname, 'incompatible CPU') elif not module.compatible_os(options.os): - cannot_use_because(modname, 'OS incompatible') + cannot_use_because(modname, 'incompatible OS') elif not module.compatible_compiler(options.compiler, options.with_tr1): - cannot_use_because(modname, 'compiler incompatible') + cannot_use_because(modname, 'incompatible compiler') else: if module.load_on == 'never': cannot_use_because(modname, 'disabled as buggy') elif module.load_on == 'request': - cannot_use_because(modname, 'loaded on request only') + cannot_use_because(modname, 'by request only') elif module.load_on == 'dep': maybe_dep.append(modname) @@ -1055,8 +1081,7 @@ def choose_modules_to_use(modules, archinfo, options): while dependency_failure: dependency_failure = False for modname in to_load: - for deplist in map(lambda s: s.split('|'), - modules[modname].dependencies()): + for deplist in [s.split('|') for s in modules[modname].dependencies()]: dep_met = False for mod in deplist: @@ -1076,7 +1101,7 @@ def choose_modules_to_use(modules, archinfo, options): to_load.remove(modname) if modname in maybe_dep: maybe_dep.remove(modname) - cannot_use_because(modname, 'of dependency failure') + cannot_use_because(modname, 'dependency failure') for not_a_dep in maybe_dep: cannot_use_because(not_a_dep, 'loaded only if needed by dependency') @@ -1085,7 +1110,7 @@ def choose_modules_to_use(modules, archinfo, options): disabled_mods = sorted(set([mod for mod in not_using_because[reason]])) if disabled_mods != []: - logging.info('Skipping mod because %s - %s' % ( + logging.info('Skipping, %s - %s' % ( reason, ' '.join(disabled_mods))) logging.debug('Loading modules %s', ' '.join(sorted(to_load))) @@ -1224,17 +1249,18 @@ def setup_build(build_config, options, template_vars): finally: f.close() - logging.debug('Linking %d public header files in %s' % ( - len(build_config.public_headers), build_config.botan_include_dir)) + def link_headers(header_list, type, dir): + logging.debug('Linking %d %s header files in %s' % ( + len(header_list), type, dir)) - for header_file in build_config.public_headers: - portable_symlink(header_file, build_config.botan_include_dir) + for header_file in header_list: + portable_symlink(header_file, dir) - logging.debug('Linking %d internal header files in %s' % ( - len(build_config.internal_headers), build_config.internal_include_dir)) + link_headers(build_config.public_headers, 'public', + build_config.botan_include_dir) - for header_file in build_config.internal_headers: - portable_symlink(header_file, build_config.internal_include_dir) + link_headers(build_config.internal_headers, 'internal', + build_config.internal_include_dir) """ Generate Amalgamation @@ -1337,8 +1363,8 @@ def generate_amalgamation(build_config): botan_all_h.write("\n#endif\n") internal_header_amalag = Amalgamation_Generator( - filter(lambda s: s.find('asm_macr_') == -1, - build_config.internal_headers)) + [s for s in build_config.internal_headers + if s.find('asm_macr_') == -1]) botan_all_cpp = open('botan_all.cpp', 'w') @@ -1369,9 +1395,18 @@ def main(argv = None): if argv is None: argv = sys.argv + options = process_command_line(argv[1:]) + + def log_level(): + if options.verbose: + return logging.DEBUG + if options.quiet: + return logging.WARNING + return logging.INFO + logging.basicConfig(stream = sys.stdout, format = '%(levelname) 7s: %(message)s', - level = logging.INFO) + level = log_level()) logging.debug('%s invoked with options "%s"' % ( argv[0], ' '.join(argv[1:]))) @@ -1379,8 +1414,6 @@ def main(argv = None): logging.debug('Platform: OS="%s" machine="%s" proc="%s"' % ( platform.system(), platform.machine(), platform.processor())) - options = process_command_line(argv[1:]) - if options.os == "java": raise Exception("Jython detected: need --os and --cpu to set target") @@ -1464,6 +1497,16 @@ def main(argv = None): else: options.with_tr1 = 'none' + if options.gen_amalgamation: + if options.asm_ok: + logging.info('Disabling assembly code, cannot use in amalgamation') + options.asm_ok = False + + for mod in ['sha1_sse2', 'serpent_simd']: + if mod not in options.disabled_modules: + logging.info('Disabling %s, cannot use in amalgamation' % (mod)) + options.disabled_modules.append(mod) + modules_to_use = choose_modules_to_use(modules, archinfo[options.arch], options) diff --git a/doc/api.tex b/doc/api.tex index 556e76aa0..dc920d07b 100644 --- a/doc/api.tex +++ b/doc/api.tex @@ -12,7 +12,7 @@ \title{\textbf{Botan API Reference}} \author{} -\date{2009/2/19} +\date{2010/02/05} \newcommand{\filename}[1]{\texttt{#1}} \newcommand{\manpage}[2]{\texttt{#1}(#2)} @@ -2621,53 +2621,124 @@ degree of applicability. \subsection{S2K Algorithms} -There are various procedures (usually fairly ad-hoc) for turning a passphrase -into a (mostly) arbitrary length key for a symmetric cipher. A general -interface for such algorithms is presented in \filename{s2k.h}. The main -function is \function{derive\_key}, which takes a passphrase, and the desired -length of the output key, and returns a key of that length, deterministically -produced from the passphrase. If an algorithm can't produce a key of that size, -it will throw an exception (most notably, PKCS \#5's PBKDF1 can only produce -strings between 1 and $n$ bytes, where $n$ is the output size of the underlying -hash function). - -Most such algorithms allow the use of a ``salt'', which provides some extra -randomness and helps against dictionary attacks on the passphrase. Simply call -\function{change\_salt} (there are variations of it for most of the ways you -might wish to specify a salt, check the header for details) with a block of -random data. You can also have the class generate a new salt for you with -\function{new\_random\_salt}; the salt that was generated can be retrieved with -\function{current\_salt}. - -Additionally some algorithms allow you to set some sort of iteration -count, which will make the algorithm take longer to compute the final -key (reducing the speed of brute-force attacks of various kinds). This -can be changed with the \function{set\_iterations} function. Most -standards recommend an iteration count of at least 1000. Currently -defined S2K algorithms are ``PBKDF1(digest)'', ``PBKDF2(digest)'', and -``OpenPGP-S2K(digest)''; you can retrieve any of these using the -\function{get\_s2k}, found in \filename{lookup.h}. As of this writing, -``PBKDF2(SHA-256)'' with 10000 iterations and an 8 byte salt is -recommend for new applications. +There are various procedures (usually fairly ad-hoc) for turning a +passphrase into a (mostly) arbitrary length key for a symmetric +cipher. A general interface for such algorithms is presented in +\filename{s2k.h}. The main function is \function{derive\_key}, which +takes a passphrase, a salt, an iteration count, and the desired length +of the output key, and returns a key of that length, deterministically +produced from the passphrase and salt. If an algorithm can't produce a +key of that size, it will throw an exception (most notably, PKCS \#5's +PBKDF1 can only produce strings between 1 and $n$ bytes, where $n$ is +the output size of the underlying hash function). + +The purpose of the iteration count is to make the algorithm take +longer to compute the final key (reducing the speed of brute-force +attacks of various kinds). Most standards recommend an iteration count +of at least 10000. Currently defined S2K algorithms are +``PBKDF1(digest)'', ``PBKDF2(digest)'', and ``OpenPGP-S2K(digest)''; +you can retrieve any of these using the \function{get\_s2k}, found in +\filename{lookup.h}. As of this writing, ``PBKDF2(SHA-256)'' with +10000 iterations and a 16 byte salt is recommend for new applications. \subsubsection{OpenPGP S2K} -There are some oddities about OpenPGP's S2K algorithms that are documented -here. For one thing, it uses the iteration count in a strange manner; instead -of specifying how many times to iterate the hash, it tells how many -\emph{bytes} should be hashed in total (including the salt). So the exact -iteration count will depend on the size of the salt (which is fixed at 8 bytes -by the OpenPGP standard, though the implementation will allow any salt size) -and the size of the passphrase. - -To get what OpenPGP calls ``Simple S2K'', set iterations to 0 (the default for -OpenPGP S2K), and do not specify a salt. To get ``Salted S2K'', again leave the -iteration count at 0, but give an 8-byte salt. ``Salted and Iterated S2K'' -requires an 8-byte salt and some iteration count (this should be significantly -larger than the size of the longest passphrase that might reasonably be used; -somewhere from 1024 to 65536 would probably be about right). Using both a -reasonably sized salt and a large iteration count is highly recommended to -prevent password guessing attempts. +There are some oddities about OpenPGP's S2K algorithms that are +documented here. For one thing, it uses the iteration count in a +strange manner; instead of specifying how many times to iterate the +hash, it tells how many \emph{bytes} should be hashed in total +(including the salt). So the exact iteration count will depend on the +size of the salt (which is fixed at 8 bytes by the OpenPGP standard, +though the implementation will allow any salt size) and the size of +the passphrase. + +To get what OpenPGP calls ``Simple S2K'', set iterations to 0, and do +not specify a salt. To get ``Salted S2K'', again leave the iteration +count at 0, but give an 8-byte salt. ``Salted and Iterated S2K'' +requires an 8-byte salt and some iteration count (this should be +significantly larger than the size of the longest passphrase that +might reasonably be used; somewhere from 1024 to 65536 would probably +be about right). Using both a reasonably sized salt and a large +iteration count is highly recommended to prevent password guessing +attempts. + +\subsection{Password Hashing} + +Storing passwords for user authentication purposes in plaintext is the +simplest but least secure method; when an attacker compromises the +database in which the passwords are stored, they immediately gain +access to all of them. Often passwords are reused among multiple +services or machines, meaning once a password to a single service is +known an attacker has a substantial head start on attacking other +machines. + +The general approach is to store, instead of the password, the output +of a one way function of the password. Upon receiving an +authentication request, the authenticator can recompute the one way +function and compare the value just computed with the one that was +stored. If they match, then the authentication request succeeds. But +when an attacker gains access to the database, they only have the +output of the one way function, not the original password. + +Common hash functions such as SHA-256 are one way, but used alone they +have problems for this purpose. What an attacker can do, upon gaining +access to such a stored password database, is hash common dictionary +words and other possible passwords, storing them in a list. Then he +can search through his list; if a stored hash and an entry in his list +match, then he has found the password. Even worse, this can happen +\emph{offline}: an attacker can begin hashing common passwords days, +months, or years before ever gaining access to the database. In +addition, if two users choose the same password, the one way function +output will be the same for both of them, which will be visible upon +inspection of the database. + +There are two solutions to these problems: salting and +iteration. Salting refers to including, along with the password, a +randomly chosen value which perturbs the one way function. Salting can +reduce the effectivness of offline dictionary generation (because for +each potential password, an attacker would have to compute the one way +function output for all possible salts - with a large enough salt, +this can make the problem quite difficult). It also prevents the same +password from producing the same output, as long as the salts do not +collide. With a large salt (say 80 to 128 bits) this will be quite +unlikely. Iteration refers to the general technique of forcing +multiple one way function evaluations when computing the output, to +slow down the operation. For instance if hashing a single password +requires running SHA-256 100,000 times instead of just once, that will +slow down user authentication by a factor of 100,000, but user +authentication happens quite rarely, and usually there are more +expensive operations that need to occur anyway (network and database +I/O, etc). On the other hand, an attacker who is attempting to break a +database full of stolen password hashes will be seriously +inconvenienced by a factor of 100,000 slowdown; they will be able to +only test at a rate of .0001\% of what they would without iterations +(or, equivalently, will require 100,000 times as many zombie botnet +hosts). + +There are many different ways of doing this password hashing +operation, with common ones including Unix's crypt (which is based on +DES) and OpenBSD's bcrypt (based on Blowfish). Other variants using +MD5 or SHA-256 are also in use on various systems. + +Botan provides a technique called passhash9, in +\filename{passhash9.h}, which is based on PBKDF2. Two functions are +provided in this header, \function{generate\_passhash9} and +\function{check\_passhash9}. The generate function takes the password +to hash, a \type{RandomNumberGenerator}, and a work factor, which +tells how many iterations to compute. The default work factor is 10 +(which means 100,000 iterations), but any non-zero value is accepted. +The check function takes a password and a passhash9 output and checks +if the password is the same as the one that was used to generate the +passhash9 output, returning a boolean true (same) or false (not same). +An example can be found in \filename{doc/examples/passhash.cpp}. + +Passhash9 currently uses HMAC(SHA-1) for the underlying PBKDF2 +psuedo-random function, but can be extended to use different +algorithms in the future if necessary. For instance using a PRF based +on Blowfish (a block cipher that requires 4 KiB of RAM for efficient +execution) could be used to make hardware-based password cracking more +expensive (this was one motivation for Blowfish's use in the bcrypt +hashing scheme, in fact). \subsection{Checksums} diff --git a/doc/examples/asn1.cpp b/doc/examples/asn1.cpp index 95757ec19..b0a6aa104 100644 --- a/doc/examples/asn1.cpp +++ b/doc/examples/asn1.cpp @@ -1,4 +1,10 @@ /* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +/* A simple ASN.1 parser, similiar to 'dumpasn1' or 'openssl asn1parse', though without some of the bells and whistles of those. Primarily used for testing the BER decoder. The output format is modeled loosely on 'asn1parse -i' @@ -14,12 +20,8 @@ - Nov 25: Much improved BIT STRING output Can deal with non-constructed taggings Can produce UTF-8 output - - This file is in the public domain. */ -/*******************************************************************/ - // Set this if your terminal understands UTF-8; otherwise output is in Latin-1 #define UTF8_TERMINAL 1 @@ -30,8 +32,6 @@ */ #define INITIAL_LEVEL 0 -/*******************************************************************/ - #include <botan/botan.h> #include <botan/bigint.h> #include <botan/der_enc.h> @@ -56,7 +56,7 @@ int main(int argc, char* argv[]) printf("Usage: %s <file>\n", argv[0]); return 1; } - + Botan::LibraryInitializer init; try { diff --git a/doc/examples/base.cpp b/doc/examples/base.cpp deleted file mode 100644 index eca0ccf24..000000000 --- a/doc/examples/base.cpp +++ /dev/null @@ -1,44 +0,0 @@ -/* - A simple template for Botan applications, showing startup, etc -*/ -#include <botan/botan.h> -using namespace Botan; - -/* This is how you can do compile-time version checking */ - -#if BOTAN_VERSION_CODE < BOTAN_VERSION_CODE_FOR(1,6,3) - #error Your Botan installation is too old; upgrade to 1.6.3 or later -#endif - -#include <iostream> - -int main(int argc, char* argv[]) - { - Botan::LibraryInitializer init; - - try - { - /* Put it inside the try block so exceptions at startup/shutdown will - get caught. - - It will be initialized with default options - */ - - if(argc > 2) - { - std::cout << "Usage: " << argv[0] << "[initializer args]\n"; - return 2; - } - - std::string args = (argc == 2) ? argv[1] : ""; - - LibraryInitializer init(args); - // your operations here - } - catch(std::exception& e) - { - std::cout << e.what() << std::endl; - return 1; - } - return 0; - } diff --git a/doc/examples/base64.cpp b/doc/examples/base64.cpp index d35aaf593..dbe8d19e3 100644 --- a/doc/examples/base64.cpp +++ b/doc/examples/base64.cpp @@ -1,12 +1,10 @@ /* -An Botan example application which emulates a poorly written version of -"uuencode -m" - -Written by Jack Lloyd ([email protected]), in maybe an hour scattered -over 2000/2001 - -This file is in the public domain +* Encode/decode base64 strings +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license */ + #include <fstream> #include <iostream> #include <string> diff --git a/doc/examples/bench.cpp b/doc/examples/bench.cpp index 6a15df7c0..87a537493 100644 --- a/doc/examples/bench.cpp +++ b/doc/examples/bench.cpp @@ -1,3 +1,9 @@ +/* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + #include <botan/benchmark.h> #include <botan/init.h> #include <botan/auto_rng.h> diff --git a/doc/examples/benchmark.cpp b/doc/examples/benchmark.cpp index fa91726e5..006450314 100644 --- a/doc/examples/benchmark.cpp +++ b/doc/examples/benchmark.cpp @@ -1,3 +1,9 @@ +/* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + #include <botan/botan.h> #include <botan/benchmark.h> diff --git a/doc/examples/bzip.cpp b/doc/examples/bzip.cpp index 02252fb94..c3509c4da 100644 --- a/doc/examples/bzip.cpp +++ b/doc/examples/bzip.cpp @@ -1,10 +1,10 @@ /* -An Botan example application which emulates a poorly written version of bzip2 - -Written by Jack Lloyd ([email protected]), Jun 9, 2001 - -This file is in the public domain +* Bzip2 Compression/Decompression +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license */ + #include <string> #include <cstring> #include <vector> @@ -12,6 +12,14 @@ This file is in the public domain #include <iostream> #include <botan/botan.h> +/* +* If Bzip2 isn't included, we know nothing works at compile time, but +* we wait to fail at runtime. Otherwise I would get 2-3 mails a month +* about how this was failing to compile (even with an informative +* #error message explaining the situation) because bzip2 wasn't +* included in the build. +*/ + #if defined(BOTAN_HAS_COMPRESSOR_BZIP2) #include <botan/bzip2.h> #endif diff --git a/doc/examples/ca.cpp b/doc/examples/ca.cpp index f5eccdde9..8dd3e981f 100644 --- a/doc/examples/ca.cpp +++ b/doc/examples/ca.cpp @@ -1,4 +1,10 @@ /* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +/* Implement the functionality of a simple CA: read in a CA certificate, the associated private key, and a PKCS #10 certificate request. Sign the request and print out the new certificate. @@ -7,10 +13,6 @@ cacert.pem: The CA's certificate (perhaps created by self_sig) caprivate.pem: The CA's private key req.pem: The user's PKCS #10 certificate request - - Written by Jack Lloyd, May 19, 2003 - - This file is in the public domain. */ #include <botan/botan.h> diff --git a/doc/examples/checksum.cpp b/doc/examples/checksum.cpp index 232be057c..dba7a7d70 100644 --- a/doc/examples/checksum.cpp +++ b/doc/examples/checksum.cpp @@ -1,3 +1,9 @@ +/* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + #include <botan/botan.h> #include <botan/filters.h> diff --git a/doc/examples/cms_dec.cpp b/doc/examples/cms_dec.cpp index de4d732f0..6a9d99137 100644 --- a/doc/examples/cms_dec.cpp +++ b/doc/examples/cms_dec.cpp @@ -1,3 +1,9 @@ +/* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + #include <botan/botan.h> #include <botan/pkcs8.h> #include <botan/cms_dec.h> diff --git a/doc/examples/cms_enc.cpp b/doc/examples/cms_enc.cpp index de16bbaae..2cf813987 100644 --- a/doc/examples/cms_enc.cpp +++ b/doc/examples/cms_enc.cpp @@ -1,3 +1,9 @@ +/* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + #include <botan/botan.h> #include <botan/cms_enc.h> using namespace Botan; diff --git a/doc/examples/cpuid.cpp b/doc/examples/cpuid.cpp index 76438783f..8adc8be6c 100644 --- a/doc/examples/cpuid.cpp +++ b/doc/examples/cpuid.cpp @@ -1,3 +1,9 @@ +/* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + #include <iostream> #include <botan/cpuid.h> @@ -22,7 +28,6 @@ int main() print_if_feature("SSE4.2", CPUID::has_sse42()); print_if_feature("AES-NI", CPUID::has_aes_intel()); - print_if_feature("AES-VIA", CPUID::has_aes_via()); print_if_feature("AltiVec", CPUID::has_altivec()); } diff --git a/doc/examples/cryptobox.cpp b/doc/examples/cryptobox.cpp index 0a769b0cd..f45f00ca1 100644 --- a/doc/examples/cryptobox.cpp +++ b/doc/examples/cryptobox.cpp @@ -1,6 +1,9 @@ /* -* Cryptobox example +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license */ + #include <botan/botan.h> #include <botan/cryptobox.h> #include <fstream> diff --git a/doc/examples/decrypt.cpp b/doc/examples/decrypt.cpp index 68d5f890b..de261b5f3 100644 --- a/doc/examples/decrypt.cpp +++ b/doc/examples/decrypt.cpp @@ -1,14 +1,17 @@ /* -Decrypt files encrypted with the 'encrypt' example application. - -I'm being lazy and writing the output to stdout rather than stripping off the -".enc" suffix and writing it there. So all diagnostics go to stderr so there is -no confusion. +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ -Written by Jack Lloyd ([email protected]) on August 5, 2002 +/* +Decrypt files encrypted with the 'encrypt' example application. -This file is in the public domain +I'm being lazy and writing the output to stdout rather than stripping +off the ".enc" suffix and writing it there. So all diagnostics go to +stderr so there is no confusion. */ + #include <fstream> #include <iostream> #include <string> @@ -103,12 +106,22 @@ int main(int argc, char* argv[]) const u32bit iv_len = block_size_of(algo); std::auto_ptr<S2K> s2k(get_s2k("PBKDF2(SHA-1)")); - s2k->set_iterations(8192); - s2k->change_salt(b64_decode(salt_str)); - SymmetricKey bc_key = s2k->derive_key(key_len, "BLK" + passphrase); - InitializationVector iv = s2k->derive_key(iv_len, "IVL" + passphrase); - SymmetricKey mac_key = s2k->derive_key(16, "MAC" + passphrase); + const u32bit PBKDF2_ITERATIONS = 8192; + + SecureVector<byte> salt = b64_decode(salt_str); + + SymmetricKey bc_key = s2k->derive_key(key_len, "BLK" + passphrase, + &salt[0], salt.size(), + PBKDF2_ITERATIONS); + + InitializationVector iv = s2k->derive_key(iv_len, "IVL" + passphrase, + &salt[0], salt.size(), + PBKDF2_ITERATIONS); + + SymmetricKey mac_key = s2k->derive_key(16, "MAC" + passphrase, + &salt[0], salt.size(), + PBKDF2_ITERATIONS); Pipe pipe(new Base64_Decoder, get_cipher(algo + "/CBC", bc_key, iv, DECRYPTION), diff --git a/doc/examples/dh.cpp b/doc/examples/dh.cpp index 7855aeae5..4c6961234 100644 --- a/doc/examples/dh.cpp +++ b/doc/examples/dh.cpp @@ -1,10 +1,9 @@ /* - A simple DH example - - Written by Jack Lloyd ([email protected]), on December 24, 2003 - - This file is in the public domain +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license */ + #include <botan/botan.h> #include <botan/dh.h> #include <botan/rng.h> diff --git a/doc/examples/dsa_kgen.cpp b/doc/examples/dsa_kgen.cpp index 4669cf705..e949ae54a 100644 --- a/doc/examples/dsa_kgen.cpp +++ b/doc/examples/dsa_kgen.cpp @@ -1,19 +1,23 @@ /* -Generate a 1024 bit DSA key and put it into a file. The public key format is -that specified by X.509, while the private key format is PKCS #8. +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ -The domain parameters are the ones specified as the Java default DSA -parameters. There is nothing special about these, it's just the only 1024-bit -DSA parameter set that's included in Botan at the time of this writing. The -application always reads/writes all of the domain parameters to/from the file, -so a new set could be used without any problems. We could generate a new set -for each key, or read a set of DSA params from a file and use those, but they -mostly seem like needless complications. -Written by Jack Lloyd ([email protected]), August 5, 2002 - Updated to use X.509 and PKCS #8 formats, October 21, 2002 +/** +Generate a 1024 bit DSA key and put it into a file. The public key +format is that specified by X.509, while the private key format is +PKCS #8. -This file is in the public domain +The domain parameters are the ones specified as the Java default DSA +parameters. There is nothing special about these, it's just the only +1024-bit DSA parameter set that's included in Botan at the time of +this writing. The application always reads/writes all of the domain +parameters to/from the file, so a new set could be used without any +problems. We could generate a new set for each key, or read a set of +DSA params from a file and use those, but they mostly seem like +needless complications. */ #include <iostream> diff --git a/doc/examples/dsa_sign.cpp b/doc/examples/dsa_sign.cpp index caf050313..abc22d0de 100644 --- a/doc/examples/dsa_sign.cpp +++ b/doc/examples/dsa_sign.cpp @@ -1,10 +1,8 @@ /* -Decrypt an encrypted DSA private key. Then use that key to sign a message. - -Written by Jack Lloyd ([email protected]), August 5, 2002 - Updated to use X.509 and PKCS #8 format keys, October 21, 2002 - -This file is in the public domain +* DSA signature generation example +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license */ #include <iostream> diff --git a/doc/examples/dsa_ver.cpp b/doc/examples/dsa_ver.cpp index 3b7ea0255..4a2f62ce4 100644 --- a/doc/examples/dsa_ver.cpp +++ b/doc/examples/dsa_ver.cpp @@ -1,14 +1,16 @@ /* -Grab an DSA public key from the file given as an argument, grab a signature -from another file, and verify the message (which, suprise, is also in a file). - -The signature format isn't particularly standard, but it's not bad. It's simply -the IEEE 1363 signature format, encoded into base64 with a trailing newline +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ -Written by Jack Lloyd ([email protected]), August 5, 2002 - Updated to use X.509 format keys, October 21, 2002 +/* +Grab an DSA public key from the file given as an argument, grab a +signature from another file, and verify the message (which, suprise, +is also in a file). -This file is in the public domain +The signature format isn't particularly standard: take the IEEE 1363 +signature format, encoded into base64 with a trailing newline. */ #include <iostream> diff --git a/doc/examples/eax_test.cpp b/doc/examples/eax_test.cpp index 283e33501..3f7dbcbc8 100644 --- a/doc/examples/eax_test.cpp +++ b/doc/examples/eax_test.cpp @@ -1,3 +1,9 @@ +/* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + #include <fstream> #include <iostream> #include <sstream> diff --git a/doc/examples/ecdsa.cpp b/doc/examples/ecdsa.cpp index 065203a94..f55005544 100644 --- a/doc/examples/ecdsa.cpp +++ b/doc/examples/ecdsa.cpp @@ -1,3 +1,9 @@ +/* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + #include <botan/botan.h> #include <botan/ecdsa.h> #include <botan/pubkey.h> diff --git a/doc/examples/encrypt.cpp b/doc/examples/encrypt.cpp index 348ee8d39..4999fa086 100644 --- a/doc/examples/encrypt.cpp +++ b/doc/examples/encrypt.cpp @@ -1,4 +1,10 @@ /* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +/* Encrypt a file using a block cipher in CBC mode. Compresses the plaintext with Zlib, MACs with HMAC(SHA-1). Stores the block cipher used in the file, so you don't have to specify it when decrypting. @@ -10,13 +16,8 @@ was compressed. Bonus points for supporting multiple compression schemes. Another flaw is that is stores the entire ciphertext in memory, so if the file you're encrypting is 1 Gb... you better have a lot of RAM. - -Based on the base64 example, of all things - -Written by Jack Lloyd ([email protected]) on August 5, 2002 - -This file is in the public domain */ + #include <fstream> #include <iostream> #include <string> @@ -124,17 +125,26 @@ int main(int argc, char* argv[]) AutoSeeded_RNG rng; std::auto_ptr<S2K> s2k(get_s2k("PBKDF2(SHA-1)")); - s2k->set_iterations(8192); - s2k->new_random_salt(rng, 8); - SymmetricKey bc_key = s2k->derive_key(key_len, "BLK" + passphrase); - InitializationVector iv = s2k->derive_key(iv_len, "IVL" + passphrase); - SymmetricKey mac_key = s2k->derive_key(16, "MAC" + passphrase); + SecureVector<byte> salt(8); + rng.randomize(&salt[0], salt.size()); + + const u32bit PBKDF2_ITERATIONS = 8192; + + SymmetricKey bc_key = s2k->derive_key(key_len, "BLK" + passphrase, + &salt[0], salt.size(), + PBKDF2_ITERATIONS); + InitializationVector iv = s2k->derive_key(iv_len, "IVL" + passphrase, + &salt[0], salt.size(), + PBKDF2_ITERATIONS); + SymmetricKey mac_key = s2k->derive_key(16, "MAC" + passphrase, + &salt[0], salt.size(), + PBKDF2_ITERATIONS); // Just to be all fancy we even write a (simple) header. out << "-------- ENCRYPTED FILE --------" << std::endl; out << algo << std::endl; - out << b64_encode(s2k->current_salt()) << std::endl; + out << b64_encode(salt) << std::endl; Pipe pipe(new Fork( new Chain(new MAC_Filter("HMAC(SHA-1)", mac_key), diff --git a/doc/examples/encrypt2.cpp b/doc/examples/encrypt2.cpp index 4af0cf019..41f4fb478 100644 --- a/doc/examples/encrypt2.cpp +++ b/doc/examples/encrypt2.cpp @@ -1,3 +1,9 @@ +/* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + #include <botan/botan.h> #include <botan/pbkdf2.h> #include <botan/hmac.h> @@ -20,16 +26,21 @@ int main() PKCS5_PBKDF2 pbkdf2(new HMAC(new SHA_160)); - pbkdf2.set_iterations(4096); - pbkdf2.new_random_salt(rng, 8); - SecureVector<byte> the_salt = pbkdf2.current_salt(); + const u32bit PBKDF2_ITERATIONS = 8192; + + SecureVector<byte> salt(8); + rng.randomize(&salt[0], salt.size()); - SecureVector<byte> master_key = pbkdf2.derive_key(48, passphrase).bits_of(); + SecureVector<byte> master_key = pbkdf2.derive_key(48, passphrase, + &salt[0], salt.size(), + PBKDF2_ITERATIONS).bits_of(); KDF* kdf = get_kdf("KDF2(SHA-1)"); SymmetricKey key = kdf->derive_key(20, master_key, "cipher key"); + SymmetricKey mac_key = kdf->derive_key(20, master_key, "hmac key"); + InitializationVector iv = kdf->derive_key(8, master_key, "cipher iv"); Pipe pipe(new Fork( @@ -44,7 +55,7 @@ int main() ) ); - outfile.write((const char*)the_salt.begin(), the_salt.size()); + outfile.write((const char*)salt.begin(), salt.size()); pipe.start_msg(); infile >> pipe; diff --git a/doc/examples/factor.cpp b/doc/examples/factor.cpp index ff3c23c5d..7700d9b2d 100644 --- a/doc/examples/factor.cpp +++ b/doc/examples/factor.cpp @@ -1,4 +1,10 @@ /* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +/* Factor integers using a combination of trial division by small primes, and Pollard's Rho algorithm */ diff --git a/doc/examples/fpe.cpp b/doc/examples/fpe.cpp index 7108b3ece..73773994b 100644 --- a/doc/examples/fpe.cpp +++ b/doc/examples/fpe.cpp @@ -1,4 +1,10 @@ /* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +/* * Encrypt credit cards numbers with valid checksums into other credit * card numbers with valid checksums using format preserving encryption. */ diff --git a/doc/examples/gen_certs.cpp b/doc/examples/gen_certs.cpp index 8490a167e..0d04d6d1c 100644 --- a/doc/examples/gen_certs.cpp +++ b/doc/examples/gen_certs.cpp @@ -1,4 +1,10 @@ /* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +/* * Generate a root CA plus httpd, dovecot, and postfix certs/keys * */ diff --git a/doc/examples/gtk/gtk_ui.h b/doc/examples/gtk/gtk_ui.h index 9ced83a81..065a4f76b 100644 --- a/doc/examples/gtk/gtk_ui.h +++ b/doc/examples/gtk/gtk_ui.h @@ -1,6 +1,8 @@ -/************************************************* -* GTK+ User Interface Header File * -*************************************************/ +/* +* (C) 2006 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ #ifndef BOTAN_EXT_GTK_UI__ #define BOTAN_EXT_GTK_UI__ @@ -8,9 +10,9 @@ #include <botan/ui.h> #include <gtk/gtk.h> -/************************************************* -* GTK+ Passphrase Callback Object * -*************************************************/ +/* +* GTK+ Passphrase Callback Object +*/ class GTK_UI : public Botan::User_Interface { public: diff --git a/doc/examples/hash.cpp b/doc/examples/hash.cpp index a97cd6082..feaa2e9b3 100644 --- a/doc/examples/hash.cpp +++ b/doc/examples/hash.cpp @@ -1,13 +1,7 @@ /* -Prints the message digest of files, using an arbitrary hash function -chosen by the user. This is less flexible that I might like, for example: - ./hash sha1 some_file [or md5 or sha-1 or ripemd160 or ...] -will not work, cause the name lookup is case-sensitive. Oh well... - -Written by Jack Lloyd ([email protected]), on August 4, 2002 - - December 16, 2003: "Fixed" to accept "sha1" or "md5" as a hash name - -This file is in the public domain +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license */ #include <iostream> diff --git a/doc/examples/hash_fd.cpp b/doc/examples/hash_fd.cpp index 82ca2c3b4..32acdbec3 100644 --- a/doc/examples/hash_fd.cpp +++ b/doc/examples/hash_fd.cpp @@ -1,18 +1,17 @@ /* -Written by Jack Lloyd ([email protected]), on Prickle-Prickle, -the 10th of Bureaucracy, 3167. - -This file is in the public domain - -This is just like the normal hash application, but uses the Unix I/O system -calls instead of C++ iostreams. Previously, this version was much faster and -smaller, but GCC 3.1's libstdc++ seems to have been improved enough that the -difference is now fairly minimal. +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ -Nicely enough, doing the change required changing only about 3 lines of code. +/* +This is just like the normal hash application, but uses the Unix I/O +system calls instead of C++ iostreams. Previously, this version was +much faster and smaller, but GCC 3.1's libstdc++ seems to have been +improved enough that the difference is now fairly minimal. -Note that this requires you to be on a machine running some sort of Unix. Well, -I guess any POSIX.1 compliant OS (in theory). +Nicely enough, doing the change required changing only about 3 lines +of code. */ #include <iostream> diff --git a/doc/examples/hash_quickly.cpp b/doc/examples/hash_quickly.cpp index c8c8ca5fb..a5236b381 100644 --- a/doc/examples/hash_quickly.cpp +++ b/doc/examples/hash_quickly.cpp @@ -1,3 +1,9 @@ +/* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + #include <botan/botan.h> #include <botan/benchmark.h> #include <botan/filters.h> diff --git a/doc/examples/hasher.cpp b/doc/examples/hasher.cpp index 5ba982fc0..f3f2ab874 100644 --- a/doc/examples/hasher.cpp +++ b/doc/examples/hasher.cpp @@ -1,12 +1,9 @@ /* -A Botan example application which emulates a -poorly written version of "gpg --print-md" - -Written by Jack Lloyd ([email protected]), quite a while ago (as of June -2001) - -This file is in the public domain +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license */ + #include <fstream> #include <iostream> #include <string> diff --git a/doc/examples/hasher2.cpp b/doc/examples/hasher2.cpp index 12d3c853d..abbe11622 100644 --- a/doc/examples/hasher2.cpp +++ b/doc/examples/hasher2.cpp @@ -1,15 +1,18 @@ /* -Identical to hasher.cpp, but uses Pipe in a different way. - -Note this tends to be much less efficient than hasher.cpp, because it does -three passes over the file. For a small file, it doesn't really matter. But for -a large file, or for something you can't re-read easily (socket, stdin, ...) -this is a bad idea. +* (C) 2001 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ -Written by Jack Lloyd ([email protected]), Feb 8 2001 +/* +Identical to hasher.cpp, but uses Pipe in a different way. -This file is in the public domain +Note this tends to be much less efficient than hasher.cpp, because it +does three passes over the file. For a small file, it doesn't really +matter. But for a large file, or for something you can't re-read +easily (socket, stdin, ...) this is a bad idea. */ + #include <fstream> #include <iostream> #include <string> diff --git a/doc/examples/make_prime.cpp b/doc/examples/make_prime.cpp index eaff1867f..acaaac698 100644 --- a/doc/examples/make_prime.cpp +++ b/doc/examples/make_prime.cpp @@ -1,3 +1,9 @@ +/* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + #include <botan/numthry.h> #include <botan/auto_rng.h> #include <botan/botan.h> diff --git a/doc/examples/package.cpp b/doc/examples/package.cpp index 866dd7e96..14d215f73 100644 --- a/doc/examples/package.cpp +++ b/doc/examples/package.cpp @@ -1,3 +1,9 @@ +/* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + #include <botan/botan.h> #include <botan/serpent.h> diff --git a/doc/examples/passhash.cpp b/doc/examples/passhash.cpp index 7f5bbc2bb..586c28c3f 100644 --- a/doc/examples/passhash.cpp +++ b/doc/examples/passhash.cpp @@ -1,15 +1,15 @@ +/* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + #include <botan/botan.h> -#include <botan/pbkdf2.h> -#include <botan/hmac.h> -#include <botan/sha160.h> +#include <botan/passhash9.h> #include <iostream> #include <memory> -using namespace Botan; - -std::string password_hash(const std::string& pass, - RandomNumberGenerator& rng); -bool password_hash_ok(const std::string& pass, const std::string& hash); +#include <stdio.h> int main(int argc, char* argv[]) { @@ -27,14 +27,14 @@ int main(int argc, char* argv[]) if(argc == 2) { - AutoSeeded_RNG rng; + Botan::AutoSeeded_RNG rng; std::cout << "H('" << argv[1] << "') = " - << password_hash(argv[1], rng) << '\n'; + << Botan::generate_passhash9(argv[1], rng) << '\n'; } else { - bool ok = password_hash_ok(argv[1], argv[2]); + bool ok = Botan::check_passhash9(argv[1], argv[2]); if(ok) std::cout << "Password and hash match\n"; else @@ -48,39 +48,3 @@ int main(int argc, char* argv[]) } return 0; } - -std::string password_hash(const std::string& pass, - RandomNumberGenerator& rng) - { - PKCS5_PBKDF2 kdf(new HMAC(new SHA_160)); - - kdf.set_iterations(10000); - kdf.new_random_salt(rng, 6); // 48 bits - - Pipe pipe(new Base64_Encoder); - pipe.start_msg(); - pipe.write(kdf.current_salt()); - pipe.write(kdf.derive_key(12, pass).bits_of()); - pipe.end_msg(); - - return pipe.read_all_as_string(); - } - -bool password_hash_ok(const std::string& pass, const std::string& hash) - { - Pipe pipe(new Base64_Decoder); - pipe.start_msg(); - pipe.write(hash); - pipe.end_msg(); - - SecureVector<byte> hash_bin = pipe.read_all(); - - PKCS5_PBKDF2 kdf(new HMAC(new SHA_160)); - - kdf.set_iterations(10000); - kdf.change_salt(hash_bin, 6); - - SecureVector<byte> cmp = kdf.derive_key(12, pass).bits_of(); - - return same_mem(cmp.begin(), hash_bin.begin() + 6, 12); - } diff --git a/doc/examples/pkcs10.cpp b/doc/examples/pkcs10.cpp index d9fa9accb..3f5ec8e05 100644 --- a/doc/examples/pkcs10.cpp +++ b/doc/examples/pkcs10.cpp @@ -1,12 +1,9 @@ /* -Generate a 1024 bit RSA key, and then create a PKCS #10 certificate request for -that key. The private key will be stored as an encrypted PKCS #8 object, and -stored in another file. - -Written by Jack Lloyd ([email protected]), April 7, 2003 - -This file is in the public domain +* (C) 2003 Jack Lloyd +* +* Distributed under the terms of the Botan license */ + #include <botan/init.h> #include <botan/auto_rng.h> #include <botan/x509self.h> diff --git a/doc/examples/pqg_gen.cpp b/doc/examples/pqg_gen.cpp index e4b959883..e797233f9 100644 --- a/doc/examples/pqg_gen.cpp +++ b/doc/examples/pqg_gen.cpp @@ -1,3 +1,9 @@ +/* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + #include <iostream> #include <fstream> #include <string> @@ -25,7 +31,7 @@ int main() std::ifstream in("PQGGen.rsp"); if(!in) - throw Exception("Can't open response file"); + throw std::runtime_error("Can't open response file"); std::map<std::string, std::string> inputs; @@ -40,7 +46,7 @@ int main() std::vector<std::string> name_and_val = split_on(line, '='); if(name_and_val.size() != 2) - throw Decoding_Error("Unexpected input: " + line); + throw std::runtime_error("Unexpected input: " + line); name_and_val[0].erase(name_and_val[0].size()-1); name_and_val[1].erase(0, 1); diff --git a/doc/examples/read_ssh.cpp b/doc/examples/read_ssh.cpp index a88306caa..52c758ceb 100644 --- a/doc/examples/read_ssh.cpp +++ b/doc/examples/read_ssh.cpp @@ -1,4 +1,10 @@ /* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +/* * Example of reading SSH2 format public keys (see RFC 4716) */ diff --git a/doc/examples/ressol.cpp b/doc/examples/ressol.cpp index 43bb68d37..286377fc6 100644 --- a/doc/examples/ressol.cpp +++ b/doc/examples/ressol.cpp @@ -1,3 +1,9 @@ +/* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + #include <botan/numthry.h> #include <botan/auto_rng.h> #include <botan/botan.h> diff --git a/doc/examples/rng_test.cpp b/doc/examples/rng_test.cpp index 8d4253a6e..05f2c28a4 100644 --- a/doc/examples/rng_test.cpp +++ b/doc/examples/rng_test.cpp @@ -1,3 +1,9 @@ +/* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + #include <botan/botan.h> #include <botan/x931_rng.h> #include <botan/filters.h> diff --git a/doc/examples/row_encryptor.cpp b/doc/examples/row_encryptor.cpp index 162e962e0..7c234105d 100644 --- a/doc/examples/row_encryptor.cpp +++ b/doc/examples/row_encryptor.cpp @@ -1,3 +1,9 @@ +/* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + #include <string> #include <memory> #include <sstream> @@ -60,10 +66,9 @@ void Row_Encryptor::init(const std::string& passphrase) { std::auto_ptr<S2K> s2k(get_s2k("PBKDF2(SHA-160)")); - s2k->set_iterations(10000); - s2k->change_salt(&s2k_salt[0], s2k_salt.size()); - - SecureVector<byte> key = s2k->derive_key(32, passphrase).bits_of(); + SecureVector<byte> key = s2k->derive_key(32, passphrase, + &s2k_salt[0], s2k_salt.size(), + 10000).bits_of(); /* Save pointers to the EAX objects so we can change the IV as needed @@ -99,8 +104,8 @@ std::string Row_Encryptor::decrypt(const std::string& input, return dec_pipe.read_all_as_string(Pipe::LAST_MESSAGE); } -/************************* - Test code follows: +/* +* Test code follows: */ int main() diff --git a/doc/examples/rsa_dec.cpp b/doc/examples/rsa_dec.cpp index 25ce33f47..1e789d748 100644 --- a/doc/examples/rsa_dec.cpp +++ b/doc/examples/rsa_dec.cpp @@ -1,11 +1,13 @@ /* +* (C) 2002 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +/* Decrypt an encrypted RSA private key. Then use that key to decrypt a message. This program can decrypt messages generated by rsa_enc, and uses the same key format as that generated by rsa_kgen. - -Written by Jack Lloyd ([email protected]), June 3-5, 2002 - -This file is in the public domain */ #include <iostream> diff --git a/doc/examples/rsa_enc.cpp b/doc/examples/rsa_enc.cpp index f9b8c5561..904b1e379 100644 --- a/doc/examples/rsa_enc.cpp +++ b/doc/examples/rsa_enc.cpp @@ -1,4 +1,10 @@ /* +* (C) 2002 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +/* Grab an RSA public key from the file given as an argument, grab a message from another file, and encrypt the message. @@ -18,12 +24,6 @@ the _plaintext_ 3) Following lines are base64 encoded ciphertext (CAST-128 as described), each broken after ~72 characters. - -Written by Jack Lloyd ([email protected]), June 3, 2002 - Updated to use KDF2, September 8, 2002 - Updated to read X.509 keys, October 21, 2002 - -This file is in the public domain */ #include <iostream> diff --git a/doc/examples/rsa_kgen.cpp b/doc/examples/rsa_kgen.cpp index b7e90ef8a..1108b46db 100644 --- a/doc/examples/rsa_kgen.cpp +++ b/doc/examples/rsa_kgen.cpp @@ -1,12 +1,13 @@ /* +* (C) 2002 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +/* Generate an RSA key of a specified bitlength, and put it into a pair of key files. One is the public key in X.509 format (PEM encoded), the private key is in PKCS #8 format (also PEM encoded). - -Written by Jack Lloyd ([email protected]), June 2-3, 2002 - Updated to use X.509 and PKCS #8 on October 21, 2002 - -This file is in the public domain */ #include <iostream> diff --git a/doc/examples/rsa_manykey.cpp b/doc/examples/rsa_manykey.cpp index 4122bc8ef..e6a511753 100644 --- a/doc/examples/rsa_manykey.cpp +++ b/doc/examples/rsa_manykey.cpp @@ -1,4 +1,10 @@ /* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +/* Generate a whole sequence of keys (for benchmarking) */ diff --git a/doc/examples/self_sig.cpp b/doc/examples/self_sig.cpp index 93161f7d2..6710cfb51 100644 --- a/doc/examples/self_sig.cpp +++ b/doc/examples/self_sig.cpp @@ -1,14 +1,17 @@ /* -Generate a 1024 bit RSA key, and then create a self-signed X.509v3 certificate -with that key. If the do_CA variable is set to true, then it will be marked for -CA use, otherwise it will get extensions appropriate for use with a client -certificate. The private key is stored as an encrypted PKCS #8 object in -another file. - -Written by Jack Lloyd ([email protected]), April 7, 2003 +* (C) 2003 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ -This file is in the public domain +/* +Generate a 1024 bit RSA key, and then create a self-signed X.509v3 +certificate with that key. If the do_CA variable is set to true, then +it will be marked for CA use, otherwise it will get extensions +appropriate for use with a client certificate. The private key is +stored as an encrypted PKCS #8 object in another file. */ + #include <botan/botan.h> #include <botan/x509self.h> #include <botan/rsa.h> diff --git a/doc/examples/sig_gen.cpp b/doc/examples/sig_gen.cpp index 6dd749097..fca069862 100644 --- a/doc/examples/sig_gen.cpp +++ b/doc/examples/sig_gen.cpp @@ -1,3 +1,9 @@ +/* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + #include <iostream> #include <fstream> #include <string> diff --git a/doc/examples/stack.cpp b/doc/examples/stack.cpp index 1522b05f5..f569004fc 100644 --- a/doc/examples/stack.cpp +++ b/doc/examples/stack.cpp @@ -1,11 +1,13 @@ /* -An Botan example application showing how to use the pop and prepend functions -of Pipe. Based on the md5 example. It's output should always be identical to -such. - -Written by Jack Lloyd ([email protected]), Feb 3, 2002 +* (C) 2002 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ -This file is in the public domain +/* +An Botan example application showing how to use the pop and prepend +functions of Pipe. Based on the md5 example. It's output should always +be identical to such. */ #include <iostream> diff --git a/doc/examples/test_es.cpp b/doc/examples/test_es.cpp deleted file mode 100644 index b5510ab75..000000000 --- a/doc/examples/test_es.cpp +++ /dev/null @@ -1,115 +0,0 @@ -#include <botan/botan.h> -#include <stdio.h> - -#if defined(BOTAN_HAS_ENTROPY_SRC_DEV_RANDOM) - #include <botan/internal/dev_random.h> -#endif - -#if defined(BOTAN_HAS_ENTROPY_SRC_EGD) - #include <botan/internal/es_egd.h> -#endif - -#if defined(BOTAN_HAS_ENTROPY_SRC_UNIX) - #include <botan/internal/es_unix.h> -#endif - -#if defined(BOTAN_HAS_ENTROPY_SRC_BEOS) - #include <botan/internal/es_beos.h> -#endif - -#if defined(BOTAN_HAS_ENTROPY_SRC_CAPI) - #include <botan/internal/es_capi.h> -#endif - -#if defined(BOTAN_HAS_ENTROPY_SRC_WIN32) - #include <botan/internal/es_win32.h> -#endif - -#if defined(BOTAN_HAS_ENTROPY_SRC_FTW) - #include <botan/internal/es_ftw.h> -#endif - - -using namespace Botan; - -class Saver_Of_Bytes : public Entropy_Accumulator - { - public: - Saver_Of_Bytes(u32bit bits) : - Entropy_Accumulator(bits), outbuf(64), written(0) {} - - void add_bytes(const byte in[], u32bit length) - { - for(size_t i = 0; i != length; ++i) - outbuf[i % outbuf.size()] ^= in[i]; - - written += length; - } - - void trunc() { if(written < 64) outbuf.resize(written); } - - std::vector<byte> outbuf; - u32bit written; - }; - -void test_entropy_source(EntropySource* es) - { - // sometimes iostreams really is just a pain - - printf("Polling '%s':\n", es->name().c_str()); - - Saver_Of_Bytes accum(128); - - es->poll(accum); - - accum.trunc(); - - printf("Got %d bytes\n", accum.written); - for(size_t i = 0; i != accum.outbuf.size(); ++i) - printf("%02X", accum.outbuf[i]); - printf("\n"); - - delete es; - } - -int main() - { - Botan::LibraryInitializer init; - -#if defined(BOTAN_HAS_ENTROPY_SRC_DEV_RANDOM) - test_entropy_source( - new Device_EntropySource( - split_on("/dev/random:/dev/srandom:/dev/urandom", ':') - ) - ); -#endif - -#if defined(BOTAN_HAS_ENTROPY_SRC_EGD) - test_entropy_source( - new EGD_EntropySource(split_on("/var/run/egd-pool:/dev/egd-pool", ':')) - ); -#endif - -#if defined(BOTAN_HAS_ENTROPY_SRC_CAPI) - test_entropy_source(new Win32_CAPI_EntropySource); -#endif - -#if defined(BOTAN_HAS_ENTROPY_SRC_FTW) - test_entropy_source(new FTW_EntropySource("/proc")); -#endif - - -#if defined(BOTAN_HAS_ENTROPY_SRC_WIN32) - test_entropy_source(new Win32_EntropySource); -#endif - -#if defined(BOTAN_HAS_ENTROPY_SRC_BEOS) - test_entropy_source(new BeOS_EntropySource); -#endif - -#if defined(BOTAN_HAS_ENTROPY_SRC_UNIX) - test_entropy_source( - new Unix_EntropySource(split_on("/bin:/sbin:/usr/bin:/usr/sbin", ':')) - ); -#endif - } diff --git a/doc/examples/toolbox.cpp b/doc/examples/toolbox.cpp new file mode 100644 index 000000000..622a1f56f --- /dev/null +++ b/doc/examples/toolbox.cpp @@ -0,0 +1,235 @@ +/* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#include <botan/botan.h> + +#if defined(BOTAN_HAS_COMPRESSOR_BZIP2) + #include <botan/bzip2.h> +#endif + +#if defined(BOTAN_HAS_COMPRESSOR_ZLIB) + #include <botan/zlib.h> +#endif + +#include <iostream> +#include <fstream> + +using namespace Botan; + +#include "../../checks/getopt.h" + +class Encoder_Decoder + { + public: + Encoder_Decoder(const std::string& command, + bool decode, + const std::vector<std::string>& args) : + type(command), + args(args), + decode(decode) + { } + + void run(std::istream& in, std::ostream& out) + { + Filter* filt = decode ? decoder(type) : encoder(type); + + DataSource_Stream src(in); + Pipe pipe(filt, new DataSink_Stream(out)); + pipe.process_msg(src); + } + + Filter* encoder(const std::string& type) const + { + if(type == "hex") return new Hex_Encoder; + if(type == "base64") return new Base64_Encoder; + +#if defined(BOTAN_HAS_COMPRESSOR_BZIP2) + if(type == "bzip2") return new Bzip_Compression; +#endif + +#if defined(BOTAN_HAS_COMPRESSOR_ZLIB) + if(type == "zlib") return new Zlib_Compression; +#endif + return 0; + } + + Filter* decoder(const std::string& type) const + { + if(type == "hex") return new Hex_Decoder; + if(type == "base64") return new Base64_Decoder; + +#if defined(BOTAN_HAS_COMPRESSOR_BZIP2) + if(type == "bzip2") return new Bzip_Decompression; +#endif + +#if defined(BOTAN_HAS_COMPRESSOR_ZLIB) + if(type == "zlib") return new Zlib_Decompression; +#endif + + return 0; + } + + private: + std::string type; + std::vector<std::string> args; + bool decode; + }; + +void run_command(const std::string& command, + const std::vector<std::string>& arguments, + const OptionParser& opts) + { + if(command == "hex" || + command == "base64" || + command == "bzip2" || + command == "zlib") + { + bool decode = opts.is_set("decode"); + + std::string output = opts.value_or_else("output", "-"); + std::string input = opts.value_or_else("input", "-"); + + Encoder_Decoder enc_dec(command, decode, arguments); + + try + { + if(output == "-") + { + if(input == "-") + enc_dec.run(std::cin, std::cout); + else + { + std::ifstream in(input.c_str()); + enc_dec.run(in, std::cout); + } + } + else // output != "-" + { + std::ofstream out(output.c_str()); + + if(input == "-") + enc_dec.run(std::cin, out); + else + { + std::ifstream in(input.c_str()); + enc_dec.run(in, out); + } + } + } + catch(Botan::Stream_IO_Error& e) + { + std::cout << "I/O failure - " << e.what() << '\n'; + } + } + else if(command == "hash" || + command == "sha1" || + command == "md5") + { + std::string hash; + + if(command == "md5") + hash = "MD5"; + if(command == "sha1") + hash = "SHA-160"; + else + hash = opts.value_or_else("hash", "SHA-160"); // sha1 is default + + Pipe pipe(new Hash_Filter(get_hash(hash)), + new Hex_Encoder(false, 0, Hex_Encoder::Lowercase)); + + for(size_t i = 0; i != arguments.size(); ++i) + { + std::string file_name = arguments[i]; + + u32bit previously = pipe.message_count(); + + if(file_name == "-") + { + pipe.start_msg(); + std::cin >> pipe; + pipe.end_msg(); + } + else + { + std::ifstream in(file_name.c_str()); + if(in) + { + pipe.start_msg(); + in >> pipe; + pipe.end_msg(); + } + else + std::cerr << "Could not read " << file_name << '\n'; + } + + if(pipe.message_count() > previously) + std::cout << pipe.read_all_as_string(Pipe::LAST_MESSAGE) << " " + << file_name << '\n'; + } + + } + else + { + std::cerr << "Command " << command << " not known\n"; + } + } + +int main(int argc, char* argv[]) + { + LibraryInitializer init; + + OptionParser opts("help|version|seconds=|" + "input=|output=|decode|" + "hash=|key="); + + try + { + opts.parse(argv); + } + catch(std::runtime_error& e) + { + std::cout << "Command line problem: " << e.what() << '\n'; + return 2; + } + + if(opts.is_set("version") || argc <= 1) + { + std::cerr << "Botan Toolbox v" << version_string() << '\n'; + std::cerr << "Commands: hash hex base64 "; +#if defined(BOTAN_HAS_COMPRESSOR_BZIP2) + std::cerr << "bzip2 "; +#endif + +#if defined(BOTAN_HAS_COMPRESSOR_ZLIB) + std::cerr << "zlib "; +#endif + + std::cerr << "\n"; + + return 0; + } + + if(opts.is_set("help")) + { + std::vector<std::string> what = opts.leftovers(); + + for(size_t i = 0; i != what.size(); ++i) + std::cerr << what[i] << "? Never heard of it\n"; + return 0; + } + + std::vector<std::string> args = opts.leftovers(); + + if(args.size() == 0) + return 0; + + std::string command = args[0]; + args.erase(args.begin()); + + run_command(command, args, opts); + + return 0; + } diff --git a/doc/examples/tss.cpp b/doc/examples/tss.cpp index 1881ffe24..03d7699bf 100644 --- a/doc/examples/tss.cpp +++ b/doc/examples/tss.cpp @@ -1,3 +1,9 @@ +/* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + #include <botan/botan.h> #include <botan/tss.h> #include <iostream> diff --git a/doc/examples/x509info.cpp b/doc/examples/x509info.cpp index 0e34f2fab..8f4d83c45 100644 --- a/doc/examples/x509info.cpp +++ b/doc/examples/x509info.cpp @@ -1,12 +1,10 @@ /* - Read an X.509 certificate, and print various things about it - - Written by Jack Lloyd, March 23 2003 - - October 31, 2003: Prints the public key - - November 1, 2003: Removed the -d flag; it can tell automatically now - - This file is in the public domain +* Read an X.509 certificate, and print various things about it +* (C) 2003 Jack Lloyd +* +* Distributed under the terms of the Botan license */ + #include <botan/botan.h> #include <botan/x509cert.h> #include <botan/oids.h> diff --git a/doc/examples/xor_ciph.cpp b/doc/examples/xor_ciph.cpp index 6a914b150..3174e103e 100644 --- a/doc/examples/xor_ciph.cpp +++ b/doc/examples/xor_ciph.cpp @@ -1,11 +1,11 @@ /* - An implementation of the highly secure (not) XOR cipher. AKA, how to write - and use your own cipher object. DO NOT make up your own ciphers. Please. - - Written by Jack Lloyd ([email protected]) on Feb 17, 2004 - Update November 21 2008 for new algorithm factory in 1.8 +* (C) 2004,2008 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ - This file is in the public domain +/* + Adding a simple XOR cipher to the internal tables */ #include <botan/stream_cipher.h> diff --git a/doc/license.txt b/doc/license.txt index 9d1067cc1..599bf7f63 100644 --- a/doc/license.txt +++ b/doc/license.txt @@ -1,6 +1,6 @@ Botan (http://botan.randombit.net/) is distributed under these terms: -Copyright (C) 1999-2009 Jack Lloyd +Copyright (C) 1999-2010 Jack Lloyd 2001 Peter J Jones 2004-2007 Justin Karneges 2005 Matthew Gregan @@ -14,6 +14,7 @@ Copyright (C) 1999-2009 Jack Lloyd 2007 Manuel Hartl 2007 Christoph Ludwig 2007 Patrick Sona + 2010 Olivier de Gaalon All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/doc/log.txt b/doc/log.txt index c150e6f66..313c468c9 100644 --- a/doc/log.txt +++ b/doc/log.txt @@ -1,8 +1,19 @@ * 1.9.4-dev, ????-??-?? + - Add SIMD implementation of Noekeon - Add SSE2 implementation of IDEA + - Perform XTS encryption and decryption in parallel where possible + - Perform CBC decryption in parallel where possible + - Add SQLite3 db encryption codec, contributed by Olivier de Gaalon + - Add a block cipher cascade construction + - Add support for password hashing for authentication (passhash9.h) - Add support for Win32 high resolution system timers + - Changed S2K interface: derive_key now takes salt, iteration count + - Remove dependency on TR1 for ECC and CVC code + - Fix crash in GMP_Engine if library is shutdown and reinitialized + - Fix an invalid memory read in MD4 - Remove Timer class entirely + - Switch default PKCS #8 encryption algorithm from 3DES to AES-256 - New option --gen-amalgamation for creating a SQLite-style amalgamation - Many headers are now explicitly internal-use-only and are not installed - Greatly improve the Win32 installer diff --git a/src/algo_factory/algo_factory.cpp b/src/algo_factory/algo_factory.cpp index 38c6387e5..ad8b1215f 100644 --- a/src/algo_factory/algo_factory.cpp +++ b/src/algo_factory/algo_factory.cpp @@ -70,8 +70,7 @@ const T* factory_prototype(const std::string& algo_spec, { if(provider == "" || engines[i]->provider_name() == provider) { - T* impl = engine_get_algo<T>(engines[i], scan_name, af); - if(impl) + if(T* impl = engine_get_algo<T>(engines[i], scan_name, af)) cache->add(impl, algo_spec, engines[i]->provider_name()); } } diff --git a/src/algo_factory/algo_factory.h b/src/algo_factory/algo_factory.h index ac985b72b..3b479c2d7 100644 --- a/src/algo_factory/algo_factory.h +++ b/src/algo_factory/algo_factory.h @@ -46,61 +46,110 @@ class BOTAN_DLL Algorithm_Factory */ ~Algorithm_Factory(); - /* - * Provider management + /** + * @param algo_spec the algorithm we are querying + * @returns list of providers of this algorithm */ std::vector<std::string> providers_of(const std::string& algo_spec); + /** + * @param algo_spec the algorithm we are setting a provider for + * @param provider the provider we would like to use + */ void set_preferred_provider(const std::string& algo_spec, const std::string& provider); - /* - * Block cipher operations + /** + * @param algo_spec the algorithm we want + * @param provider the provider we would like to use + * @returns pointer to const prototype object, readiny for clone(), or NULL */ const BlockCipher* prototype_block_cipher(const std::string& algo_spec, const std::string& provider = ""); + /** + * @param algo_spec the algorithm we want + * @param provider the provider we would like to use + * @returns pointer to freshly created instance of the request algorithm + */ BlockCipher* make_block_cipher(const std::string& algo_spec, const std::string& provider = ""); - void add_block_cipher(BlockCipher* hash, const std::string& provider); + /** + * @param algo the algorithm to add + * @param provider the provider of this algorithm + */ + void add_block_cipher(BlockCipher* algo, const std::string& provider); - /* - * Stream cipher operations + /** + * @param algo_spec the algorithm we want + * @param provider the provider we would like to use + * @returns pointer to const prototype object, readiny for clone(), or NULL */ const StreamCipher* prototype_stream_cipher(const std::string& algo_spec, const std::string& provider = ""); + /** + * @param algo_spec the algorithm we want + * @param provider the provider we would like to use + * @returns pointer to freshly created instance of the request algorithm + */ StreamCipher* make_stream_cipher(const std::string& algo_spec, const std::string& provider = ""); - void add_stream_cipher(StreamCipher* hash, const std::string& provider); + /** + * @param algo the algorithm to add + * @param provider the provider of this algorithm + */ + void add_stream_cipher(StreamCipher* algo, const std::string& provider); - /* - * Hash function operations + /** + * @param algo_spec the algorithm we want + * @param provider the provider we would like to use + * @returns pointer to const prototype object, readiny for clone(), or NULL */ const HashFunction* prototype_hash_function(const std::string& algo_spec, const std::string& provider = ""); + /** + * @param algo_spec the algorithm we want + * @param provider the provider we would like to use + * @returns pointer to freshly created instance of the request algorithm + */ HashFunction* make_hash_function(const std::string& algo_spec, const std::string& provider = ""); - void add_hash_function(HashFunction* hash, const std::string& provider); + /** + * @param algo the algorithm to add + * @param provider the provider of this algorithm + */ + void add_hash_function(HashFunction* algo, const std::string& provider); - /* - * MAC operations + /** + * @param algo_spec the algorithm we want + * @param provider the provider we would like to use + * @returns pointer to const prototype object, readiny for clone(), or NULL */ const MessageAuthenticationCode* prototype_mac(const std::string& algo_spec, const std::string& provider = ""); + /** + * @param algo_spec the algorithm we want + * @param provider the provider we would like to use + * @returns pointer to freshly created instance of the request algorithm + */ MessageAuthenticationCode* make_mac(const std::string& algo_spec, const std::string& provider = ""); - void add_mac(MessageAuthenticationCode* mac, + /** + * @param algo the algorithm to add + * @param provider the provider of this algorithm + */ + void add_mac(MessageAuthenticationCode* algo, const std::string& provider); /* diff --git a/src/algo_factory/prov_weight.cpp b/src/algo_factory/prov_weight.cpp index c7c2d8d8d..17284d024 100644 --- a/src/algo_factory/prov_weight.cpp +++ b/src/algo_factory/prov_weight.cpp @@ -19,15 +19,17 @@ u32bit static_provider_weight(const std::string& prov_name) * them, set the provider explicitly for the algorithms you want */ - if(prov_name == "core") return 5; - if(prov_name == "ia32") return 6; - if(prov_name == "amd64") return 7; + if(prov_name == "aes_isa") return 9; if(prov_name == "simd") return 8; + if(prov_name == "amd64") return 7; + if(prov_name == "ia32") return 6; + + if(prov_name == "core") return 5; if(prov_name == "openssl") return 2; if(prov_name == "gmp") return 1; - return 0; // other + return 0; // other/unknown } } diff --git a/src/alloc/mem_pool/mem_pool.cpp b/src/alloc/mem_pool/mem_pool.cpp index 2945a4cef..4180d2602 100644 --- a/src/alloc/mem_pool/mem_pool.cpp +++ b/src/alloc/mem_pool/mem_pool.cpp @@ -15,19 +15,6 @@ namespace Botan { -namespace { - -/* -* Memory Allocation Exception -*/ -struct Memory_Exhaustion : public std::bad_alloc - { - const char* what() const throw() - { return "Ran out of memory, allocation failed"; } - }; - -} - /* * Memory_Block Constructor */ diff --git a/src/alloc/system_alloc/defalloc.cpp b/src/alloc/system_alloc/defalloc.cpp index faaeb3c58..311057462 100644 --- a/src/alloc/system_alloc/defalloc.cpp +++ b/src/alloc/system_alloc/defalloc.cpp @@ -94,7 +94,7 @@ Allocator* Allocator::get(bool locking) if(alloc) return alloc; - throw Exception("Couldn't find an allocator to use in get_allocator"); + throw Internal_Error("Couldn't find an allocator to use in get_allocator"); } } diff --git a/src/asn1/ber_dec.cpp b/src/asn1/ber_dec.cpp index b34bf8ca2..66a27dd4e 100644 --- a/src/asn1/ber_dec.cpp +++ b/src/asn1/ber_dec.cpp @@ -7,7 +7,7 @@ #include <botan/ber_dec.h> #include <botan/bigint.h> -#include <botan/loadstor.h> +#include <botan/get_byte.h> namespace Botan { diff --git a/src/asn1/der_enc.cpp b/src/asn1/der_enc.cpp index 3c318c291..e410292bb 100644 --- a/src/asn1/der_enc.cpp +++ b/src/asn1/der_enc.cpp @@ -8,9 +8,9 @@ #include <botan/der_enc.h> #include <botan/asn1_int.h> #include <botan/bigint.h> -#include <botan/loadstor.h> -#include <botan/internal/bit_ops.h> +#include <botan/get_byte.h> #include <botan/parsing.h> +#include <botan/internal/bit_ops.h> #include <algorithm> namespace Botan { diff --git a/src/block/block_cipher.h b/src/block/block_cipher.h index e97eebf0f..06e8c5cea 100644 --- a/src/block/block_cipher.h +++ b/src/block/block_cipher.h @@ -59,8 +59,21 @@ class BOTAN_DLL BlockCipher : public SymmetricAlgorithm */ void decrypt(byte block[]) const { decrypt_n(block, block, 1); } + /** + * Encrypt one or more blocks + * @param in the input buffer (multiple of BLOCK_SIZE) + * @param out the output buffer (same size as in) + * @param blocks the number of blocks to process + */ virtual void encrypt_n(const byte in[], byte out[], u32bit blocks) const = 0; + + /** + * Decrypt one or more blocks + * @param in the input buffer (multiple of BLOCK_SIZE) + * @param out the output buffer (same size as in) + * @param blocks the number of blocks to process + */ virtual void decrypt_n(const byte in[], byte out[], u32bit blocks) const = 0; diff --git a/src/block/cascade/cascade.cpp b/src/block/cascade/cascade.cpp new file mode 100644 index 000000000..f72ef7b76 --- /dev/null +++ b/src/block/cascade/cascade.cpp @@ -0,0 +1,98 @@ +/* +* Block Cipher Cascade +* (C) 2010 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#include <botan/cascade.h> + +namespace Botan { + +void Cascade_Cipher::encrypt_n(const byte in[], byte out[], + u32bit blocks) const + { + u32bit c1_blocks = blocks * (BLOCK_SIZE / cipher1->BLOCK_SIZE); + u32bit c2_blocks = blocks * (BLOCK_SIZE / cipher2->BLOCK_SIZE); + + cipher1->encrypt_n(in, out, c1_blocks); + cipher2->encrypt_n(out, out, c2_blocks); + } + +void Cascade_Cipher::decrypt_n(const byte in[], byte out[], + u32bit blocks) const + { + u32bit c1_blocks = blocks * (BLOCK_SIZE / cipher1->BLOCK_SIZE); + u32bit c2_blocks = blocks * (BLOCK_SIZE / cipher2->BLOCK_SIZE); + + cipher2->decrypt_n(in, out, c2_blocks); + cipher1->decrypt_n(out, out, c1_blocks); + } + +void Cascade_Cipher::key_schedule(const byte key[], u32bit) + { + const byte* key2 = key + cipher1->MAXIMUM_KEYLENGTH; + + cipher1->set_key(key , cipher1->MAXIMUM_KEYLENGTH); + cipher2->set_key(key2, cipher2->MAXIMUM_KEYLENGTH); + } + +void Cascade_Cipher::clear() + { + cipher1->clear(); + cipher2->clear(); + } + +std::string Cascade_Cipher::name() const + { + return "Cascade(" + cipher1->name() + "," + cipher2->name() + ")"; + } + +BlockCipher* Cascade_Cipher::clone() const + { + return new Cascade_Cipher(cipher1->clone(), + cipher2->clone()); + } + +namespace { + +u32bit euclids_algorithm(u32bit a, u32bit b) + { + while(b != 0) // gcd + { + u32bit t = b; + b = a % b; + a = t; + } + + return a; + } + +u32bit block_size_for_cascade(u32bit bs, u32bit bs2) + { + if(bs == bs2) + return bs; + + u32bit gcd = euclids_algorithm(bs, bs2); + + return (bs * bs2) / gcd; + } + +} + +Cascade_Cipher::Cascade_Cipher(BlockCipher* c1, BlockCipher* c2) : + BlockCipher(block_size_for_cascade(c1->BLOCK_SIZE, c2->BLOCK_SIZE), + c1->MAXIMUM_KEYLENGTH + c2->MAXIMUM_KEYLENGTH), + cipher1(c1), cipher2(c2) + { + if(BLOCK_SIZE % c1->BLOCK_SIZE || BLOCK_SIZE % c2->BLOCK_SIZE) + throw Internal_Error("Failure in " + name() + " constructor"); + } + +Cascade_Cipher::~Cascade_Cipher() + { + delete cipher1; + delete cipher2; + } + +} diff --git a/src/block/cascade/cascade.h b/src/block/cascade/cascade.h new file mode 100644 index 000000000..98c64fb3e --- /dev/null +++ b/src/block/cascade/cascade.h @@ -0,0 +1,41 @@ +/* +* Block Cipher Cascade +* (C) 2010 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#ifndef BOTAN_CASCADE_H__ +#define BOTAN_CASCADE_H__ + +#include <botan/block_cipher.h> + +namespace Botan { + +/* +* Block Cipher Cascade +*/ +class BOTAN_DLL Cascade_Cipher : public BlockCipher + { + public: + void encrypt_n(const byte in[], byte out[], u32bit blocks) const; + void decrypt_n(const byte in[], byte out[], u32bit blocks) const; + + void clear(); + std::string name() const; + BlockCipher* clone() const; + + Cascade_Cipher(BlockCipher* cipher1, BlockCipher* cipher2); + + ~Cascade_Cipher(); + private: + void key_schedule(const byte[], u32bit); + + BlockCipher* cipher1; + BlockCipher* cipher2; + }; + + +} + +#endif diff --git a/src/block/cascade/info.txt b/src/block/cascade/info.txt new file mode 100644 index 000000000..0e6f4acdd --- /dev/null +++ b/src/block/cascade/info.txt @@ -0,0 +1,9 @@ +define CASCADE + +<header:public> +cascade.h +</header:public> + +<source> +cascade.cpp +</source> diff --git a/src/block/idea_sse2/idea_sse2.cpp b/src/block/idea_sse2/idea_sse2.cpp index c00d13ee9..0fe35112d 100644 --- a/src/block/idea_sse2/idea_sse2.cpp +++ b/src/block/idea_sse2/idea_sse2.cpp @@ -6,7 +6,6 @@ */ #include <botan/idea_sse2.h> -#include <botan/loadstor.h> #include <emmintrin.h> namespace Botan { diff --git a/src/block/lion/lion.cpp b/src/block/lion/lion.cpp index e590a78ce..d8dfd1fcb 100644 --- a/src/block/lion/lion.cpp +++ b/src/block/lion/lion.cpp @@ -116,8 +116,9 @@ Lion::Lion(HashFunction* hash_in, StreamCipher* sc_in, u32bit block_len) : { if(2*LEFT_SIZE + 1 > BLOCK_SIZE) throw Invalid_Argument(name() + ": Chosen block size is too small"); + if(!cipher->valid_keylength(LEFT_SIZE)) - throw Exception(name() + ": This stream/hash combination is invalid"); + throw Invalid_Argument(name() + ": This stream/hash combo is invalid"); key1.resize(LEFT_SIZE); key2.resize(LEFT_SIZE); diff --git a/src/block/noekeon/noekeon.h b/src/block/noekeon/noekeon.h index 4532c1be2..22ef65342 100644 --- a/src/block/noekeon/noekeon.h +++ b/src/block/noekeon/noekeon.h @@ -26,7 +26,7 @@ class BOTAN_DLL Noekeon : public BlockCipher BlockCipher* clone() const { return new Noekeon; } Noekeon() : BlockCipher(16, 16) {} - private: + protected: void key_schedule(const byte[], u32bit); static const byte RC[17]; diff --git a/src/block/noekeon_simd/info.txt b/src/block/noekeon_simd/info.txt new file mode 100644 index 000000000..b73954cff --- /dev/null +++ b/src/block/noekeon_simd/info.txt @@ -0,0 +1,7 @@ +define NOEKEON_SIMD + +<requires> +noekeon +simd_32 +simd_engine +</requires> diff --git a/src/block/noekeon_simd/noekeon_simd.cpp b/src/block/noekeon_simd/noekeon_simd.cpp new file mode 100644 index 000000000..f44104901 --- /dev/null +++ b/src/block/noekeon_simd/noekeon_simd.cpp @@ -0,0 +1,161 @@ +/* +* Noekeon in SIMD +* (C) 2010 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#include <botan/noekeon_simd.h> +#include <botan/internal/simd_32.h> + +namespace Botan { + +/* +* Noekeon's Theta Operation +*/ +#define NOK_SIMD_THETA(A0, A1, A2, A3, K0, K1, K2, K3) \ + do { \ + SIMD_32 T = A0 ^ A2; \ + T ^= rotate_left(T, 8) ^ rotate_right(T, 8); \ + A1 ^= T; \ + A3 ^= T; \ + \ + A0 ^= K0; \ + A1 ^= K1; \ + A2 ^= K2; \ + A3 ^= K3; \ + \ + T = A1 ^ A3; \ + T ^= rotate_left(T, 8) ^ rotate_right(T, 8); \ + A0 ^= T; \ + A2 ^= T; \ + } while(0) + +/* +* Noekeon's Gamma S-Box Layer +*/ +#define NOK_SIMD_GAMMA(A0, A1, A2, A3) \ + do \ + { \ + A1 ^= A3.andc(~A2); \ + A0 ^= A2 & A1; \ + \ + SIMD_32 T = A3; \ + A3 = A0; \ + A0 = T; \ + \ + A2 ^= A0 ^ A1 ^ A3; \ + \ + A1 ^= A3.andc(~A2); \ + A0 ^= A2 & A1; \ + } while(0) + +/* +* Noekeon Encryption +*/ +void Noekeon_SIMD::encrypt_n(const byte in[], byte out[], u32bit blocks) const + { + SIMD_32 K0 = SIMD_32(EK[0]); + SIMD_32 K1 = SIMD_32(EK[1]); + SIMD_32 K2 = SIMD_32(EK[2]); + SIMD_32 K3 = SIMD_32(EK[3]); + + while(blocks >= 4) + { + SIMD_32 A0 = SIMD_32::load_be(in ); + SIMD_32 A1 = SIMD_32::load_be(in + 16); + SIMD_32 A2 = SIMD_32::load_be(in + 32); + SIMD_32 A3 = SIMD_32::load_be(in + 48); + + SIMD_32::transpose(A0, A1, A2, A3); + + for(u32bit i = 0; i != 16; ++i) + { + A0 ^= SIMD_32(RC[i]); + + NOK_SIMD_THETA(A0, A1, A2, A3, K0, K1, K2, K3); + + A1.rotate_left(1); + A2.rotate_left(5); + A3.rotate_left(2); + + NOK_SIMD_GAMMA(A0, A1, A2, A3); + + A1.rotate_right(1); + A2.rotate_right(5); + A3.rotate_right(2); + } + + A0 ^= SIMD_32(RC[16]); + NOK_SIMD_THETA(A0, A1, A2, A3, K0, K1, K2, K3); + + SIMD_32::transpose(A0, A1, A2, A3); + + A0.store_be(out); + A1.store_be(out + 16); + A2.store_be(out + 32); + A3.store_be(out + 48); + + in += 64; + out += 64; + blocks -= 4; + } + + Noekeon::encrypt_n(in, out, blocks); + } + +/* +* Noekeon Encryption +*/ +void Noekeon_SIMD::decrypt_n(const byte in[], byte out[], u32bit blocks) const + { + SIMD_32 K0 = SIMD_32(DK[0]); + SIMD_32 K1 = SIMD_32(DK[1]); + SIMD_32 K2 = SIMD_32(DK[2]); + SIMD_32 K3 = SIMD_32(DK[3]); + + while(blocks >= 4) + { + SIMD_32 A0 = SIMD_32::load_be(in ); + SIMD_32 A1 = SIMD_32::load_be(in + 16); + SIMD_32 A2 = SIMD_32::load_be(in + 32); + SIMD_32 A3 = SIMD_32::load_be(in + 48); + + SIMD_32::transpose(A0, A1, A2, A3); + + for(u32bit i = 0; i != 16; ++i) + { + NOK_SIMD_THETA(A0, A1, A2, A3, K0, K1, K2, K3); + + A0 ^= SIMD_32(RC[16-i]); + + A1.rotate_left(1); + A2.rotate_left(5); + A3.rotate_left(2); + + NOK_SIMD_GAMMA(A0, A1, A2, A3); + + A1.rotate_right(1); + A2.rotate_right(5); + A3.rotate_right(2); + } + + NOK_SIMD_THETA(A0, A1, A2, A3, K0, K1, K2, K3); + A0 ^= SIMD_32(RC[0]); + + SIMD_32::transpose(A0, A1, A2, A3); + + A0.store_be(out); + A1.store_be(out + 16); + A2.store_be(out + 32); + A3.store_be(out + 48); + + in += 64; + out += 64; + blocks -= 4; + } + + Noekeon::decrypt_n(in, out, blocks); + } + +} diff --git a/src/block/noekeon_simd/noekeon_simd.h b/src/block/noekeon_simd/noekeon_simd.h new file mode 100644 index 000000000..466c4b741 --- /dev/null +++ b/src/block/noekeon_simd/noekeon_simd.h @@ -0,0 +1,29 @@ +/* +* Noekeon in SIMD +* (C) 2010 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#ifndef BOTAN_NOEKEON_SIMD_H__ +#define BOTAN_NOEKEON_SIMD_H__ + +#include <botan/noekeon.h> + +namespace Botan { + +/* +* Noekeon +*/ +class BOTAN_DLL Noekeon_SIMD : public Noekeon + { + public: + void encrypt_n(const byte in[], byte out[], u32bit blocks) const; + void decrypt_n(const byte in[], byte out[], u32bit blocks) const; + + BlockCipher* clone() const { return new Noekeon_SIMD; } + }; + +} + +#endif diff --git a/src/build-data/arch/amd64.txt b/src/build-data/arch/amd64.txt index 58d1d3fa6..b0cf546d7 100644 --- a/src/build-data/arch/amd64.txt +++ b/src/build-data/arch/amd64.txt @@ -1,6 +1,8 @@ endian little unaligned ok +family x86 + <aliases> x86-64 x86_64 # for RPM diff --git a/src/build-data/arch/ia32.txt b/src/build-data/arch/ia32.txt index 40066851d..d9b09746d 100644 --- a/src/build-data/arch/ia32.txt +++ b/src/build-data/arch/ia32.txt @@ -1,6 +1,8 @@ endian little unaligned ok +family x86 + <aliases> x86 ix86 diff --git a/src/build-data/arch/ppc.txt b/src/build-data/arch/ppc.txt index 811eb53e7..dc3ea7829 100644 --- a/src/build-data/arch/ppc.txt +++ b/src/build-data/arch/ppc.txt @@ -1,6 +1,8 @@ endian big unaligned ok +family ppc + <aliases> powerpc </aliases> diff --git a/src/build-data/arch/ppc64.txt b/src/build-data/arch/ppc64.txt index b99aa9b8b..7a2e6b6b3 100644 --- a/src/build-data/arch/ppc64.txt +++ b/src/build-data/arch/ppc64.txt @@ -1,5 +1,7 @@ endian big +family ppc + <aliases> powerpc64 </aliases> diff --git a/src/build-data/arch/sparc32.txt b/src/build-data/arch/sparc32.txt index ae75a2a4b..fc015e520 100644 --- a/src/build-data/arch/sparc32.txt +++ b/src/build-data/arch/sparc32.txt @@ -1,5 +1,7 @@ endian big +family sparc + <aliases> sparc </aliases> diff --git a/src/build-data/arch/sparc64.txt b/src/build-data/arch/sparc64.txt index a1ed16549..e20d0fde6 100644 --- a/src/build-data/arch/sparc64.txt +++ b/src/build-data/arch/sparc64.txt @@ -1,3 +1,6 @@ + +family sparc + <submodels> ultrasparc ultrasparc3 diff --git a/src/build-data/buildh.in b/src/build-data/buildh.in index 7588dc99b..231a7aeeb 100644 --- a/src/build-data/buildh.in +++ b/src/build-data/buildh.in @@ -27,11 +27,11 @@ * * CBC and CFB can only use parallel processing in decryption mode */ -#define BOTAN_PARALLEL_BLOCKS_ECB 8 -#define BOTAN_PARALLEL_BLOCKS_CBC 8 -#define BOTAN_PARALLEL_BLOCKS_CFB 8 +#define BOTAN_PARALLEL_BLOCKS_ECB 16 +#define BOTAN_PARALLEL_BLOCKS_CBC 16 +#define BOTAN_PARALLEL_BLOCKS_CFB 16 #define BOTAN_PARALLEL_BLOCKS_CTR 16 -#define BOTAN_PARALLEL_BLOCKS_XTS 8 +#define BOTAN_PARALLEL_BLOCKS_XTS 16 /* PK key consistency checking toggles */ #define BOTAN_PUBLIC_KEY_STRONG_CHECKS_ON_LOAD 1 diff --git a/src/build-data/makefile/nmake.in b/src/build-data/makefile/nmake.in index 79b80745c..2d89850fd 100644 --- a/src/build-data/makefile/nmake.in +++ b/src/build-data/makefile/nmake.in @@ -17,7 +17,7 @@ DESTDIR = %{prefix} LIBDIR = $(DESTDIR)\%{libdir} HEADERDIR = $(DESTDIR)\%{includedir}\botan -DOCDIR = $(DESTDIR)\%{docdir}\Botan-$(VERSION) +DOCDIR = $(DESTDIR)\%{docdir}\botan-$(VERSION) ### Aliases for Common Programs AR = %{ar_command} diff --git a/src/build-data/makefile/unix.in b/src/build-data/makefile/unix.in index 22ff919cc..c525aa6bf 100644 --- a/src/build-data/makefile/unix.in +++ b/src/build-data/makefile/unix.in @@ -16,7 +16,7 @@ DESTDIR = %{prefix} BINDIR = $(DESTDIR)/bin LIBDIR = $(DESTDIR)/%{libdir} HEADERDIR = $(DESTDIR)/%{includedir}/botan -DOCDIR = $(DESTDIR)/%{docdir}/Botan-$(VERSION) +DOCDIR = $(DESTDIR)/%{docdir}/botan-$(VERSION) PKGCONF_DIR = $(LIBDIR)/pkgconfig CONFIG_SCRIPT = %{botan_config} @@ -76,7 +76,7 @@ $(STATIC_LIB): $(LIBOBJS) static: $(STATIC_LIB) doxygen: - doxygen %{doc_src_dir}/botan.doxy + doxygen %{build_dir}/botan.doxy clean: $(RM_R) %{build_dir}/lib/* %{build_dir}/checks/* diff --git a/src/build-data/makefile/unix_shr.in b/src/build-data/makefile/unix_shr.in index 499b7eb92..aaedeeaf8 100644 --- a/src/build-data/makefile/unix_shr.in +++ b/src/build-data/makefile/unix_shr.in @@ -19,7 +19,7 @@ DESTDIR = %{prefix} BINDIR = $(DESTDIR)/bin LIBDIR = $(DESTDIR)/%{libdir} HEADERDIR = $(DESTDIR)/%{includedir}/botan -DOCDIR = $(DESTDIR)/%{docdir}/Botan-$(VERSION) +DOCDIR = $(DESTDIR)/%{docdir}/botan-$(VERSION) PKGCONF_DIR = $(LIBDIR)/pkgconfig CONFIG_SCRIPT = %{botan_config} @@ -90,7 +90,7 @@ static: $(STATIC_LIB) shared: $(SHARED_LIB) doxygen: - doxygen %{doc_src_dir}/botan.doxy + doxygen %{build_dir}/botan.doxy clean: $(RM_R) %{build_dir}/lib/* %{build_dir}/checks/* diff --git a/src/cert/cvc/asn1_eac_tm.cpp b/src/cert/cvc/asn1_eac_tm.cpp index dc38e3296..73a2843f7 100644 --- a/src/cert/cvc/asn1_eac_tm.cpp +++ b/src/cert/cvc/asn1_eac_tm.cpp @@ -182,9 +182,9 @@ bool EAC_Time::passes_sanity_check() const return true; } -/****************************************** +/* * modification functions -******************************************/ +*/ void EAC_Time::add_years(u32bit years) { diff --git a/src/cert/cvc/cvc_ado.cpp b/src/cert/cvc/cvc_ado.cpp index 6e1484e90..fcce0ff82 100644 --- a/src/cert/cvc/cvc_ado.cpp +++ b/src/cert/cvc/cvc_ado.cpp @@ -8,11 +8,10 @@ #include <botan/cvc_ado.h> #include <fstream> -#include <assert.h> namespace Botan { -EAC1_1_ADO::EAC1_1_ADO(std::tr1::shared_ptr<DataSource> in) +EAC1_1_ADO::EAC1_1_ADO(DataSource& in) { init(in); do_decode(); @@ -20,7 +19,7 @@ EAC1_1_ADO::EAC1_1_ADO(std::tr1::shared_ptr<DataSource> in) EAC1_1_ADO::EAC1_1_ADO(const std::string& in) { - std::tr1::shared_ptr<DataSource> stream(new DataSource_Stream(in, true)); + DataSource_Stream stream(in, true); init(stream); do_decode(); } @@ -41,7 +40,7 @@ void EAC1_1_ADO::force_decode() .end_cons() .get_contents(); - std::tr1::shared_ptr<DataSource> req_source(new DataSource_Memory(req_bits)); + DataSource_Memory req_source(req_bits); m_req = EAC1_1_Req(req_source); sig_algo = m_req.sig_algo; } @@ -53,14 +52,13 @@ MemoryVector<byte> EAC1_1_ADO::make_signed( { SecureVector<byte> concat_sig = EAC1_1_obj<EAC1_1_ADO>::make_signature(signer.get(), tbs_bits, rng); - assert(concat_sig.size() % 2 == 0); - MemoryVector<byte> result = DER_Encoder() + + return DER_Encoder() .start_cons(ASN1_Tag(7), APPLICATION) .raw_bytes(tbs_bits) .encode(concat_sig, OCTET_STRING, ASN1_Tag(55), APPLICATION) .end_cons() .get_contents(); - return result; } ASN1_Car EAC1_1_ADO::get_car() const @@ -68,14 +66,15 @@ ASN1_Car EAC1_1_ADO::get_car() const return m_car; } -void EAC1_1_ADO::decode_info(SharedPtrConverter<DataSource> source, +void EAC1_1_ADO::decode_info(DataSource& source, SecureVector<byte> & res_tbs_bits, ECDSA_Signature & res_sig) { SecureVector<byte> concat_sig; SecureVector<byte> cert_inner_bits; ASN1_Car car; - BER_Decoder(*source.get_ptr().get()) + + BER_Decoder(source) .start_cons(ASN1_Tag(7)) .start_cons(ASN1_Tag(33)) .raw_bytes(cert_inner_bits) @@ -89,28 +88,30 @@ void EAC1_1_ADO::decode_info(SharedPtrConverter<DataSource> source, .raw_bytes(cert_inner_bits) .end_cons() .get_contents(); + SecureVector<byte> enc_car = DER_Encoder() .encode(car) .get_contents(); + res_tbs_bits = enc_cert; res_tbs_bits.append(enc_car); res_sig = decode_concatenation(concat_sig); - - } + void EAC1_1_ADO::encode(Pipe& out, X509_Encoding encoding) const { - SecureVector<byte> concat_sig(EAC1_1_obj<EAC1_1_ADO>::m_sig.get_concatenation()); - SecureVector<byte> der = DER_Encoder() - .start_cons(ASN1_Tag(7), APPLICATION) - .raw_bytes(tbs_bits) - .encode(concat_sig, OCTET_STRING, ASN1_Tag(55), APPLICATION) - .end_cons() - .get_contents(); if(encoding == PEM) throw Invalid_Argument("EAC1_1_ADO::encode() cannot PEM encode an EAC object"); - else - out.write(der); + + SecureVector<byte> concat_sig( + EAC1_1_obj<EAC1_1_ADO>::m_sig.get_concatenation()); + + out.write(DER_Encoder() + .start_cons(ASN1_Tag(7), APPLICATION) + .raw_bytes(tbs_bits) + .encode(concat_sig, OCTET_STRING, ASN1_Tag(55), APPLICATION) + .end_cons() + .get_contents()); } SecureVector<byte> EAC1_1_ADO::tbs_data() const @@ -120,8 +121,6 @@ SecureVector<byte> EAC1_1_ADO::tbs_data() const bool EAC1_1_ADO::operator==(EAC1_1_ADO const& rhs) const { - assert(((this->m_req == rhs.m_req) && (this->tbs_data() == rhs.tbs_data())) || - ((this->m_req != rhs.m_req) && (this->tbs_data() != rhs.tbs_data()))); return (this->get_concat_sig() == rhs.get_concat_sig() && this->tbs_data() == rhs.tbs_data() && this->get_car() == rhs.get_car()); diff --git a/src/cert/cvc/cvc_ado.h b/src/cert/cvc/cvc_ado.h index a0dbec2a6..80e6a82b7 100644 --- a/src/cert/cvc/cvc_ado.h +++ b/src/cert/cvc/cvc_ado.h @@ -38,7 +38,7 @@ class BOTAN_DLL EAC1_1_ADO : public EAC1_1_obj<EAC1_1_ADO> * Construct a CVC ADO request from a data source * @param source the data source */ - EAC1_1_ADO(std::tr1::shared_ptr<DataSource> source); + EAC1_1_ADO(DataSource& source); /** * Create a signed CVC ADO request from to be signed (TBS) data @@ -83,7 +83,7 @@ class BOTAN_DLL EAC1_1_ADO : public EAC1_1_obj<EAC1_1_ADO> EAC1_1_Req m_req; void force_decode(); - static void decode_info(SharedPtrConverter<DataSource> source, + static void decode_info(DataSource& source, SecureVector<byte> & res_tbs_bits, ECDSA_Signature & res_sig); }; diff --git a/src/cert/cvc/cvc_ca.cpp b/src/cert/cvc/cvc_ca.cpp index 8ca8db0c2..814df216b 100644 --- a/src/cert/cvc/cvc_ca.cpp +++ b/src/cert/cvc/cvc_ca.cpp @@ -37,8 +37,7 @@ EAC1_1_CVC EAC1_1_CVC_CA::make_cert(std::auto_ptr<PK_Signer> signer, EAC1_1_CVC::build_cert_body(tbs), rng); - std::tr1::shared_ptr<DataSource> source(new DataSource_Memory(signed_cert)); - + DataSource_Memory source(signed_cert); return EAC1_1_CVC(source); } diff --git a/src/cert/cvc/cvc_cert.cpp b/src/cert/cvc/cvc_cert.cpp index d2be12df8..94d80af21 100644 --- a/src/cert/cvc/cvc_cert.cpp +++ b/src/cert/cvc/cvc_cert.cpp @@ -56,7 +56,7 @@ void EAC1_1_CVC::force_decode() throw Decoding_Error("CertificateHolderAuthorizationValue was not of length 1"); if(cpi != 0) - throw Decoding_Error("EAC1_1 certificate´s cpi was not 0"); + throw Decoding_Error("EAC1_1 certificate's cpi was not 0"); // FIXME: PK algos have no notion of EAC encoder/decoder currently #if 0 @@ -78,7 +78,7 @@ void EAC1_1_CVC::force_decode() /* * CVC Certificate Constructor */ -EAC1_1_CVC::EAC1_1_CVC(std::tr1::shared_ptr<DataSource>& in) +EAC1_1_CVC::EAC1_1_CVC(DataSource& in) { init(in); self_signed = false; @@ -87,7 +87,7 @@ EAC1_1_CVC::EAC1_1_CVC(std::tr1::shared_ptr<DataSource>& in) EAC1_1_CVC::EAC1_1_CVC(const std::string& in) { - std::tr1::shared_ptr<DataSource> stream(new DataSource_Stream(in, true)); + DataSource_Stream stream(in, true); init(stream); self_signed = false; do_decode(); diff --git a/src/cert/cvc/cvc_cert.h b/src/cert/cvc/cvc_cert.h index 17671d332..ae0c21d7b 100644 --- a/src/cert/cvc/cvc_cert.h +++ b/src/cert/cvc/cvc_cert.h @@ -59,7 +59,7 @@ class BOTAN_DLL EAC1_1_CVC : public EAC1_1_gen_CVC<EAC1_1_CVC>//Signed_Object * Construct a CVC from a data source * @param source the data source */ - EAC1_1_CVC(std::tr1::shared_ptr<DataSource>& source); + EAC1_1_CVC(DataSource& source); /** * Construct a CVC from a file diff --git a/src/cert/cvc/cvc_gen_cert.h b/src/cert/cvc/cvc_gen_cert.h index 797970e29..096f7898c 100644 --- a/src/cert/cvc/cvc_gen_cert.h +++ b/src/cert/cvc/cvc_gen_cert.h @@ -16,7 +16,6 @@ #include <botan/ecdsa.h> #include <botan/ecdsa_sig.h> #include <string> -#include <assert.h> namespace Botan { @@ -87,7 +86,7 @@ class BOTAN_DLL EAC1_1_gen_CVC : public EAC1_1_obj<Derived> // CRTP continuation ASN1_Chr m_chr; bool self_signed; - static void decode_info(SharedPtrConverter<DataSource> source, + static void decode_info(DataSource& source, SecureVector<byte> & res_tbs_bits, ECDSA_Signature & res_sig); @@ -109,7 +108,7 @@ template<typename Derived> MemoryVector<byte> EAC1_1_gen_CVC<Derived>::make_sign RandomNumberGenerator& rng) // static { SecureVector<byte> concat_sig = EAC1_1_obj<Derived>::make_signature(signer.get(), tbs_bits, rng); - assert(concat_sig.size() % 2 == 0); + return DER_Encoder() .start_cons(ASN1_Tag(33), APPLICATION) .raw_bytes(tbs_bits) @@ -156,12 +155,12 @@ template<typename Derived> void EAC1_1_gen_CVC<Derived>::encode(Pipe& out, X509_ template<typename Derived> void EAC1_1_gen_CVC<Derived>::decode_info( - SharedPtrConverter<DataSource> source, + DataSource& source, SecureVector<byte> & res_tbs_bits, ECDSA_Signature & res_sig) { SecureVector<byte> concat_sig; - BER_Decoder(*source.get_shared().get()) + BER_Decoder(source) .start_cons(ASN1_Tag(33)) .start_cons(ASN1_Tag(78)) .raw_bytes(res_tbs_bits) diff --git a/src/cert/cvc/cvc_req.cpp b/src/cert/cvc/cvc_req.cpp index 70a44bacd..78dbdea52 100644 --- a/src/cert/cvc/cvc_req.cpp +++ b/src/cert/cvc/cvc_req.cpp @@ -10,19 +10,17 @@ #include <botan/ber_dec.h> #include <botan/pem.h> #include <botan/parsing.h> -#include <assert.h> #include <botan/cvc_key.h> #include <botan/oids.h> #include <botan/look_pk.h> #include <botan/cvc_req.h> -#include <botan/freestore.h> namespace Botan { bool EAC1_1_Req::operator==(EAC1_1_Req const& rhs) const { - return (this->tbs_data() == rhs.tbs_data() - && this->get_concat_sig() == rhs.get_concat_sig()); + return (this->tbs_data() == rhs.tbs_data() && + this->get_concat_sig() == rhs.get_concat_sig()); } void EAC1_1_Req::force_decode() @@ -36,10 +34,9 @@ void EAC1_1_Req::force_decode() .end_cons() .decode(m_chr) .verify_end(); + if(cpi != 0) - { - throw Decoding_Error("EAC1_1 request´s cpi was not 0"); - } + throw Decoding_Error("EAC1_1 requests cpi was not 0"); // FIXME: No EAC support in ECDSA #if 0 @@ -50,7 +47,7 @@ void EAC1_1_Req::force_decode() #endif } -EAC1_1_Req::EAC1_1_Req(std::tr1::shared_ptr<DataSource> in) +EAC1_1_Req::EAC1_1_Req(DataSource& in) { init(in); self_signed = true; @@ -59,7 +56,7 @@ EAC1_1_Req::EAC1_1_Req(std::tr1::shared_ptr<DataSource> in) EAC1_1_Req::EAC1_1_Req(const std::string& in) { - std::tr1::shared_ptr<DataSource> stream(new DataSource_Stream(in, true)); + DataSource_Stream stream(in, true); init(stream); self_signed = true; do_decode(); diff --git a/src/cert/cvc/cvc_req.h b/src/cert/cvc/cvc_req.h index 28f03db80..2abc72c9a 100644 --- a/src/cert/cvc/cvc_req.h +++ b/src/cert/cvc/cvc_req.h @@ -35,7 +35,7 @@ class BOTAN_DLL EAC1_1_Req : public EAC1_1_gen_CVC<EAC1_1_Req> * Construct a CVC request from a data source. * @param source the data source */ - EAC1_1_Req(std::tr1::shared_ptr<DataSource> source); + EAC1_1_Req(DataSource& source); /** * Construct a CVC request from a DER encoded CVC reqeust file. diff --git a/src/cert/cvc/cvc_self.cpp b/src/cert/cvc/cvc_self.cpp index 227ff4136..deef351b9 100644 --- a/src/cert/cvc/cvc_self.cpp +++ b/src/cert/cvc/cvc_self.cpp @@ -16,14 +16,15 @@ #include <botan/cvc_ado.h> #include <botan/time.h> #include <sstream> +#include <assert.h> namespace Botan { namespace { -/******************************* +/* * cvc CHAT values -*******************************/ +*/ enum CHAT_values{ CVCA = 0xC0, DVCA_domestic = 0x80, @@ -42,6 +43,7 @@ std::string padding_and_hash_from_oid(OID const& oid) padding_and_hash.erase(0, padding_and_hash.find("/",0) + 1); return padding_and_hash; } + std::string fixed_len_seqnr(u32bit seqnr, u32bit len) { std::stringstream ss; @@ -80,7 +82,7 @@ EAC1_1_CVC create_self_signed_cert(Private_Key const& key, ASN1_Chr chr(opt.car.value()); AlgorithmIdentifier sig_algo; - std::string padding_and_hash(eac_cvc_emsa + "(" + opt.hash_alg + ")"); + std::string padding_and_hash("EMSA1_BSI(" + opt.hash_alg + ")"); sig_algo.oid = OIDS::lookup(priv_key->algo_name() + "/" + padding_and_hash); sig_algo = AlgorithmIdentifier(sig_algo.oid, AlgorithmIdentifier::USE_NULL_PARAM); @@ -109,7 +111,7 @@ EAC1_1_Req create_cvc_req(Private_Key const& key, throw Invalid_Argument("CVC_EAC::create_self_signed_cert(): unsupported key type"); } AlgorithmIdentifier sig_algo; - std::string padding_and_hash(eac_cvc_emsa + "(" + hash_alg + ")"); + std::string padding_and_hash("EMSA1_BSI(" + hash_alg + ")"); sig_algo.oid = OIDS::lookup(priv_key->algo_name() + "/" + padding_and_hash); sig_algo = AlgorithmIdentifier(sig_algo.oid, AlgorithmIdentifier::USE_NULL_PARAM); @@ -131,7 +133,8 @@ EAC1_1_Req create_cvc_req(Private_Key const& key, .get_contents(); MemoryVector<byte> signed_cert = EAC1_1_gen_CVC<EAC1_1_Req>::make_signed(signer, EAC1_1_gen_CVC<EAC1_1_Req>::build_cert_body(tbs), rng); - std::tr1::shared_ptr<DataSource> source(new DataSource_Memory(signed_cert)); + + DataSource_Memory source(signed_cert); return EAC1_1_Req(source); } @@ -151,7 +154,8 @@ EAC1_1_ADO create_ado_req(Private_Key const& key, SecureVector<byte> tbs_bits = req.BER_encode(); tbs_bits.append(DER_Encoder().encode(car).get_contents()); MemoryVector<byte> signed_cert = EAC1_1_ADO::make_signed(signer, tbs_bits, rng); - std::tr1::shared_ptr<DataSource> source(new DataSource_Memory(signed_cert)); + + DataSource_Memory source(signed_cert); return EAC1_1_ADO(source); } @@ -206,7 +210,7 @@ EAC1_1_CVC link_cvca(EAC1_1_CVC const& signer, } if (signer.signature_algorithm() != signee.signature_algorithm()) { - throw Invalid_Argument("link_cvca(): signature algorithms of signer and signee don´t match"); + throw Invalid_Argument("link_cvca(): signature algorithms of signer and signee don't match"); } AlgorithmIdentifier sig_algo = signer.signature_algorithm(); std::string padding_and_hash = padding_and_hash_from_oid(sig_algo.oid); diff --git a/src/cert/cvc/eac_obj.h b/src/cert/cvc/eac_obj.h index d357adb7d..e4eb895c1 100644 --- a/src/cert/cvc/eac_obj.h +++ b/src/cert/cvc/eac_obj.h @@ -18,13 +18,10 @@ #include <botan/oids.h> #include <botan/look_pk.h> #include <botan/ecdsa_sig.h> -#include <botan/freestore.h> #include <string> namespace Botan { -const std::string eac_cvc_emsa("EMSA1_BSI"); - /* * TR03110 v1.1 EAC CV Certificate */ @@ -52,7 +49,7 @@ class BOTAN_DLL EAC1_1_obj : public EAC_Signed_Object virtual bool check_signature(Public_Key& pub_key) const; protected: - void init(SharedPtrConverter<DataSource> in); + void init(DataSource& in); static SecureVector<byte> make_signature(PK_Signer* signer, const MemoryRegion<byte>& tbs_bits, @@ -80,11 +77,12 @@ EAC1_1_obj<Derived>::make_signature(PK_Signer* signer, return concat_sig; } -template<typename Derived> void EAC1_1_obj<Derived>::init(SharedPtrConverter<DataSource> in) +template<typename Derived> +void EAC1_1_obj<Derived>::init(DataSource& in) { try { - Derived::decode_info(in.get_shared(), tbs_bits, m_sig); + Derived::decode_info(in, tbs_bits, m_sig); } catch(Decoding_Error) { diff --git a/src/cert/cvc/freestore.h b/src/cert/cvc/freestore.h deleted file mode 100644 index 7f8b85388..000000000 --- a/src/cert/cvc/freestore.h +++ /dev/null @@ -1,84 +0,0 @@ -/* -* (C) 2007 Christoph Ludwig -* -* Distributed under the terms of the Botan license -*/ - -#ifndef BOTAN_FREESTORE_H__ -#define BOTAN_FREESTORE_H__ - -#include <botan/build.h> - -#if defined(BOTAN_USE_STD_TR1) - #include <tr1/memory> -#elif defined(BOTAN_USE_BOOST_TR1) - #include <boost/tr1/memory.hpp> -#else - #error "Please choose a TR1 implementation in build.h" -#endif - -namespace Botan { - -/** -* This class is intended as an function call parameter type and -* enables convenient automatic conversions between plain and smart -* pointer types. It internally stores a SharedPointer which can be -* accessed. -*/ -template<typename T> -class BOTAN_DLL SharedPtrConverter - { - public: - typedef std::tr1::shared_ptr<T> SharedPtr; - - /** - * Construct a null pointer equivalent object. - */ - SharedPtrConverter() : ptr() {} - - /** - * Copy constructor. - */ - SharedPtrConverter(SharedPtrConverter const& other) : - ptr(other.ptr) {} - - /** - * Construct a converter object from another pointer type. - * @param p the pointer which shall be set as the internally stored - * pointer value of this converter. - */ - template<typename Ptr> - SharedPtrConverter(Ptr p) - : ptr(p) {} - - /** - * Get the internally stored shared pointer. - * @return the internally stored shared pointer - */ - SharedPtr const& get_ptr() const { return this->ptr; } - - /** - * Get the internally stored shared pointer. - * @return the internally stored shared pointer - */ - SharedPtr get_ptr() { return this->ptr; } - - /** - * Get the internally stored shared pointer. - * @return the internally stored shared pointer - */ - SharedPtr const& get_shared() const { return this->ptr; } - - /** - * Get the internally stored shared pointer. - * @return the internally stored shared pointer - */ - SharedPtr get_shared() { return this->ptr; } - - private: - SharedPtr ptr; - }; - -} - -#endif diff --git a/src/cert/cvc/info.txt b/src/cert/cvc/info.txt index 2033b9576..f3cf42a0e 100644 --- a/src/cert/cvc/info.txt +++ b/src/cert/cvc/info.txt @@ -1,7 +1,5 @@ define CARD_VERIFIABLE_CERTIFICATES -uses_tr1 yes - load_on auto <header:public> @@ -15,7 +13,6 @@ cvc_self.h eac_asn_obj.h eac_obj.h ecdsa_sig.h -freestore.h signed_obj.h </header:public> diff --git a/src/cert/x509/x509_ext.cpp b/src/cert/x509/x509_ext.cpp index 9a03c9d23..69b21d8b3 100644 --- a/src/cert/x509/x509_ext.cpp +++ b/src/cert/x509/x509_ext.cpp @@ -473,7 +473,7 @@ MemoryVector<byte> Certificate_Policies::encode_inner() const { // FIXME #if 1 - throw Exception("Certificate_Policies::encode_inner: Bugged"); + throw Internal_Error("Certificate_Policies::encode_inner: Bugged"); #else std::vector<Policy_Information> policies; diff --git a/src/checksum/crc24/crc24.cpp b/src/checksum/crc24/crc24.cpp index e50b4d33e..5441020f5 100644 --- a/src/checksum/crc24/crc24.cpp +++ b/src/checksum/crc24/crc24.cpp @@ -6,7 +6,7 @@ */ #include <botan/crc24.h> -#include <botan/loadstor.h> +#include <botan/get_byte.h> namespace Botan { diff --git a/src/cms/cms_dalg.cpp b/src/cms/cms_dalg.cpp index 7ed793f4f..1fc4e2faa 100644 --- a/src/cms/cms_dalg.cpp +++ b/src/cms/cms_dalg.cpp @@ -195,7 +195,7 @@ void CMS_Decoder::decode_layer() else if(type == OIDS::lookup("CMS.SignedData")) { #if 1 - throw Exception("FIXME: not implemented"); + throw Internal_Error("FIXME: not implemented"); #else u32bit version; @@ -258,11 +258,11 @@ void CMS_Decoder::decode_layer() } else if(type == OIDS::lookup("CMS.EnvelopedData")) { - throw Exception("FIXME: not implemented"); + throw Internal_Error("FIXME: not implemented"); } else if(type == OIDS::lookup("CMS.AuthenticatedData")) { - throw Exception("FIXME: not implemented"); + throw Internal_Error("FIXME: not implemented"); } else throw Decoding_Error("CMS: Unknown content ID " + type.as_string()); diff --git a/src/cms/cms_dec.cpp b/src/cms/cms_dec.cpp index 222399f6c..038d01869 100644 --- a/src/cms/cms_dec.cpp +++ b/src/cms/cms_dec.cpp @@ -17,7 +17,7 @@ namespace Botan { * CMS_Decoder Constructor */ CMS_Decoder::CMS_Decoder(DataSource& in, const X509_Store& x509store, - User_Interface& ui_ref, PKCS8_PrivateKey* key) : + User_Interface& ui_ref, Private_Key* key) : ui(ui_ref), store(x509store) { status = GOOD; @@ -57,7 +57,7 @@ void CMS_Decoder::initial_read(DataSource&) /* * Add another private key to use */ -void CMS_Decoder::add_key(PKCS8_PrivateKey* key) +void CMS_Decoder::add_key(Private_Key* key) { if(!key) return; diff --git a/src/cms/cms_dec.h b/src/cms/cms_dec.h index 75b61c9cb..a00b44766 100644 --- a/src/cms/cms_dec.h +++ b/src/cms/cms_dec.h @@ -37,10 +37,10 @@ class BOTAN_DLL CMS_Decoder void next_layer() { decode_layer(); } - void add_key(PKCS8_PrivateKey*); + void add_key(Private_Key*); CMS_Decoder(DataSource&, const X509_Store&, User_Interface&, - PKCS8_PrivateKey* = 0); + Private_Key* = 0); private: std::string get_passphrase(const std::string&); void read_econtent(BER_Decoder&); @@ -52,7 +52,7 @@ class BOTAN_DLL CMS_Decoder X509_Store store; std::vector<std::string> passphrases; - std::vector<PKCS8_PrivateKey*> keys; + std::vector<Private_Key*> keys; OID type, next_type; SecureVector<byte> data; diff --git a/src/cms/cms_ealg.cpp b/src/cms/cms_ealg.cpp index 2970e8e79..60479a820 100644 --- a/src/cms/cms_ealg.cpp +++ b/src/cms/cms_ealg.cpp @@ -97,7 +97,7 @@ void CMS_Encoder::encrypt(RandomNumberGenerator& rng, { const std::string cipher = choose_algo(user_cipher, "TripleDES"); - std::auto_ptr<X509_PublicKey> key(to.subject_public_key()); + std::auto_ptr<Public_Key> key(to.subject_public_key()); const std::string algo = key->algo_name(); Key_Constraints constraints = to.constraints(); @@ -165,10 +165,10 @@ void CMS_Encoder::encrypt_ktri(RandomNumberGenerator& rng, */ void CMS_Encoder::encrypt_kari(RandomNumberGenerator&, const X509_Certificate&, - X509_PublicKey*, + Public_Key*, const std::string&) { - throw Exception("FIXME: unimplemented"); + throw Internal_Error("FIXME: unimplemented"); #if 0 SymmetricKey cek = setup_key(rng, cipher); @@ -198,7 +198,7 @@ void CMS_Encoder::encrypt(RandomNumberGenerator& rng, const SymmetricKey& kek, const std::string& user_cipher) { - throw Exception("FIXME: untested"); + throw Internal_Error("FIXME: untested"); const std::string cipher = choose_algo(user_cipher, "TripleDES"); SymmetricKey cek = setup_key(rng, cipher); @@ -232,7 +232,7 @@ void CMS_Encoder::encrypt(RandomNumberGenerator&, const std::string& user_cipher) { const std::string cipher = choose_algo(user_cipher, "TripleDES"); - throw Exception("FIXME: unimplemented"); + throw Internal_Error("FIXME: unimplemented"); /* SymmetricKey cek = setup_key(key); @@ -287,7 +287,7 @@ SecureVector<byte> CMS_Encoder::do_encrypt(RandomNumberGenerator& rng, * Sign a message */ void CMS_Encoder::sign(const X509_Certificate& cert, - const PKCS8_PrivateKey& key, + const Private_Key& key, RandomNumberGenerator& rng, const std::vector<X509_Certificate>& chain, const std::string& hash, @@ -375,7 +375,7 @@ void CMS_Encoder::authenticate(const X509_Certificate&, const std::string& mac_algo) { const std::string mac = choose_algo(mac_algo, "HMAC(SHA-1)"); - throw Exception("FIXME: unimplemented"); + throw Internal_Error("FIXME: unimplemented"); } /* @@ -385,7 +385,7 @@ void CMS_Encoder::authenticate(const SymmetricKey&, const std::string& mac_algo) { const std::string mac = choose_algo(mac_algo, "HMAC(SHA-1)"); - throw Exception("FIXME: unimplemented"); + throw Internal_Error("FIXME: unimplemented"); } /* @@ -395,7 +395,7 @@ void CMS_Encoder::authenticate(const std::string&, const std::string& mac_algo) { const std::string mac = choose_algo(mac_algo, "HMAC(SHA-1)"); - throw Exception("FIXME: unimplemented"); + throw Internal_Error("FIXME: unimplemented"); } } diff --git a/src/cms/cms_enc.h b/src/cms/cms_enc.h index 6fdd2b726..b1e18ef7d 100644 --- a/src/cms/cms_enc.h +++ b/src/cms/cms_enc.h @@ -36,7 +36,7 @@ class BOTAN_DLL CMS_Encoder void authenticate(const SymmetricKey&, const std::string& = ""); void sign(const X509_Certificate& cert, - const PKCS8_PrivateKey& key, + const Private_Key& key, RandomNumberGenerator& rng, const std::vector<X509_Certificate>& cert_chain, const std::string& hash, @@ -62,7 +62,7 @@ class BOTAN_DLL CMS_Encoder const X509_Certificate&, PK_Encrypting_Key*, const std::string&); void encrypt_kari(RandomNumberGenerator&, - const X509_Certificate&, X509_PublicKey*, + const X509_Certificate&, Public_Key*, const std::string&); SecureVector<byte> do_encrypt(RandomNumberGenerator& rng, diff --git a/src/constructs/aont/package.cpp b/src/constructs/aont/package.cpp index 8d2d7257d..5d1e674ca 100644 --- a/src/constructs/aont/package.cpp +++ b/src/constructs/aont/package.cpp @@ -9,7 +9,7 @@ #include <botan/package.h> #include <botan/filters.h> #include <botan/ctr.h> -#include <botan/loadstor.h> +#include <botan/get_byte.h> #include <botan/internal/xor_buf.h> namespace Botan { diff --git a/src/constructs/cryptobox/cryptobox.cpp b/src/constructs/cryptobox/cryptobox.cpp index ba7553c55..371b52e66 100644 --- a/src/constructs/cryptobox/cryptobox.cpp +++ b/src/constructs/cryptobox/cryptobox.cpp @@ -13,7 +13,7 @@ #include <botan/hmac.h> #include <botan/pbkdf2.h> #include <botan/pem.h> -#include <botan/loadstor.h> +#include <botan/get_byte.h> #include <botan/mem_ops.h> namespace Botan { @@ -48,10 +48,10 @@ std::string encrypt(const byte input[], u32bit input_len, rng.randomize(pbkdf_salt.begin(), pbkdf_salt.size()); PKCS5_PBKDF2 pbkdf(new HMAC(new SHA_512)); - pbkdf.change_salt(pbkdf_salt.begin(), pbkdf_salt.size()); - pbkdf.set_iterations(PBKDF_ITERATIONS); - OctetString mk = pbkdf.derive_key(PBKDF_OUTPUT_LEN, passphrase); + OctetString mk = pbkdf.derive_key(PBKDF_OUTPUT_LEN, passphrase, + &pbkdf_salt[0], pbkdf_salt.size(), + PBKDF_ITERATIONS); SymmetricKey cipher_key(mk.begin(), CIPHER_KEY_LEN); SymmetricKey mac_key(mk.begin() + CIPHER_KEY_LEN, MAC_KEY_LEN); @@ -109,10 +109,10 @@ std::string decrypt(const byte input[], u32bit input_len, SecureVector<byte> pbkdf_salt(ciphertext + VERSION_CODE_LEN, PBKDF_SALT_LEN); PKCS5_PBKDF2 pbkdf(new HMAC(new SHA_512)); - pbkdf.change_salt(pbkdf_salt.begin(), pbkdf_salt.size()); - pbkdf.set_iterations(PBKDF_ITERATIONS); - OctetString mk = pbkdf.derive_key(PBKDF_OUTPUT_LEN, passphrase); + OctetString mk = pbkdf.derive_key(PBKDF_OUTPUT_LEN, passphrase, + &pbkdf_salt[0], pbkdf_salt.size(), + PBKDF_ITERATIONS); SymmetricKey cipher_key(mk.begin(), CIPHER_KEY_LEN); SymmetricKey mac_key(mk.begin() + CIPHER_KEY_LEN, MAC_KEY_LEN); @@ -135,7 +135,7 @@ std::string decrypt(const byte input[], u32bit input_len, if(!same_mem(computed_mac, ciphertext + VERSION_CODE_LEN + PBKDF_SALT_LEN, MAC_OUTPUT_LEN)) - throw Integrity_Failure("CryptoBox integrity failure"); + throw Decoding_Error("CryptoBox integrity failure"); return pipe.read_all_as_string(0); } diff --git a/src/constructs/fpe/fpe.cpp b/src/constructs/fpe/fpe.cpp index 86e56625d..a0b3274b5 100644 --- a/src/constructs/fpe/fpe.cpp +++ b/src/constructs/fpe/fpe.cpp @@ -12,7 +12,7 @@ #include <botan/numthry.h> #include <botan/hmac.h> #include <botan/sha2_32.h> -#include <botan/loadstor.h> +#include <botan/get_byte.h> #include <stdexcept> namespace Botan { diff --git a/src/constructs/passhash/info.txt b/src/constructs/passhash/info.txt new file mode 100644 index 000000000..f96809f29 --- /dev/null +++ b/src/constructs/passhash/info.txt @@ -0,0 +1,9 @@ +define PASSHASH9 + +<requires> +libstate +pbkdf2 +rng +base64 +</requires> + diff --git a/src/constructs/passhash/passhash9.cpp b/src/constructs/passhash/passhash9.cpp new file mode 100644 index 000000000..9e5ff3257 --- /dev/null +++ b/src/constructs/passhash/passhash9.cpp @@ -0,0 +1,127 @@ +/* +* Passhash9 Password Hashing +* (C) 2010 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#include <botan/passhash9.h> +#include <botan/loadstor.h> +#include <botan/libstate.h> +#include <botan/pbkdf2.h> +#include <botan/base64.h> +#include <botan/pipe.h> + +namespace Botan { + +namespace { + +const std::string MAGIC_PREFIX = "$9$"; + +const u32bit WORKFACTOR_BYTES = 2; +const u32bit ALGID_BYTES = 1; +const u32bit SALT_BYTES = 12; // 96 bits of salt +const u32bit PBKDF_OUTPUT_LEN = 24; // 192 bits output + +const u32bit WORK_FACTOR_SCALE = 10000; + +MessageAuthenticationCode* get_pbkdf_prf(byte alg_id) + { + Algorithm_Factory& af = global_state().algorithm_factory(); + + if(alg_id == 0) + return af.make_mac("HMAC(SHA-1)"); + + return 0; + } + +std::pair<byte, MessageAuthenticationCode*> choose_pbkdf_prf() + { + byte alg_id = 0; + return std::make_pair(alg_id, get_pbkdf_prf(alg_id)); + } + +} + +std::string generate_passhash9(const std::string& pass, + RandomNumberGenerator& rng, + u16bit work_factor) + { + std::pair<byte, MessageAuthenticationCode*> prf = choose_pbkdf_prf(); + byte alg_id = prf.first; + + PKCS5_PBKDF2 kdf(prf.second); // takes ownership of pointer + + SecureVector<byte> salt(SALT_BYTES); + rng.randomize(&salt[0], salt.size()); + + u32bit kdf_iterations = WORK_FACTOR_SCALE * work_factor; + + SecureVector<byte> pbkdf2_output = + kdf.derive_key(PBKDF_OUTPUT_LEN, pass, + &salt[0], salt.size(), + kdf_iterations).bits_of(); + + Pipe pipe(new Base64_Encoder); + pipe.start_msg(); + pipe.write(alg_id); + pipe.write(get_byte(0, work_factor)); + pipe.write(get_byte(1, work_factor)); + pipe.write(salt); + pipe.write(pbkdf2_output); + pipe.end_msg(); + + return MAGIC_PREFIX + pipe.read_all_as_string(); + } + +bool check_passhash9(const std::string& pass, const std::string& hash) + { + const u32bit BINARY_LENGTH = + (ALGID_BYTES + WORKFACTOR_BYTES + PBKDF_OUTPUT_LEN + SALT_BYTES); + + const u32bit BASE64_LENGTH = + MAGIC_PREFIX.size() + (BINARY_LENGTH * 8) / 6; + + if(hash.size() != BASE64_LENGTH) + return false; + + for(size_t i = 0; i != MAGIC_PREFIX.size(); ++i) + if(hash[i] != MAGIC_PREFIX[i]) + return false; + + Pipe pipe(new Base64_Decoder); + pipe.start_msg(); + pipe.write(hash.c_str() + MAGIC_PREFIX.size()); + pipe.end_msg(); + + SecureVector<byte> bin = pipe.read_all(); + + if(bin.size() != BINARY_LENGTH) + return false; + + byte alg_id = bin[0]; + + u32bit kdf_iterations = + WORK_FACTOR_SCALE * load_be<u16bit>(bin + ALGID_BYTES, 0); + + if(kdf_iterations == 0) + return false; + + MessageAuthenticationCode* pbkdf_prf = get_pbkdf_prf(alg_id); + + if(pbkdf_prf == 0) + return false; // unknown algorithm, reject + + PKCS5_PBKDF2 kdf(pbkdf_prf); // takes ownership of pointer + + SecureVector<byte> cmp = kdf.derive_key( + PBKDF_OUTPUT_LEN, pass, + &bin[ALGID_BYTES + WORKFACTOR_BYTES], SALT_BYTES, + kdf_iterations).bits_of(); + + return same_mem(cmp.begin(), + bin.begin() + ALGID_BYTES + WORKFACTOR_BYTES + SALT_BYTES, + PBKDF_OUTPUT_LEN); + } + +} diff --git a/src/constructs/passhash/passhash9.h b/src/constructs/passhash/passhash9.h new file mode 100644 index 000000000..6020dce42 --- /dev/null +++ b/src/constructs/passhash/passhash9.h @@ -0,0 +1,35 @@ +/* +* Passhash9 Password Hashing +* (C) 2010 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#ifndef BOTAN_PASSHASH9_H__ +#define BOTAN_PASSHASH9_H__ + +#include <botan/rng.h> + +namespace Botan { + +/** +* Create a password hash using PBKDF2 +* @param password the password +* @param rng a random number generator +* @Param work_factor how much work to do to slow down guessing attacks +*/ +std::string BOTAN_DLL generate_passhash9(const std::string& password, + RandomNumberGenerator& rng, + u16bit work_factor = 10); + +/** +* Check a previously created password hash +* @param password the password to check against +* @param hash the stored hash to check against +*/ +bool BOTAN_DLL check_passhash9(const std::string& password, + const std::string& hash); + +} + +#endif diff --git a/src/engine/aes_isa_eng/aes_isa_engine.cpp b/src/engine/aes_isa_eng/aes_isa_engine.cpp index e57e4278d..682dfe6b1 100644 --- a/src/engine/aes_isa_eng/aes_isa_engine.cpp +++ b/src/engine/aes_isa_eng/aes_isa_engine.cpp @@ -5,17 +5,13 @@ * Distributed under the terms of the Botan license */ -#include <botan/aes_isa_engine.h> +#include <botan/internal/aes_isa_engine.h> #include <botan/cpuid.h> #if defined(BOTAN_HAS_AES_INTEL) #include <botan/aes_intel.h> #endif -#if defined(BOTAN_HAS_AES_VIA) - #include <botan/aes_via.h> -#endif - namespace Botan { BlockCipher* @@ -34,18 +30,6 @@ AES_ISA_Engine::find_block_cipher(const SCAN_Name& request, } #endif -#if defined(BOTAN_HAS_AES_VIA) - if(CPUID::has_aes_via()) - { - if(request.algo_name() == "AES-128") - return new AES_128_VIA; - if(request.algo_name() == "AES-192") - return new AES_192_VIA; - if(request.algo_name() == "AES-256") - return new AES_256_VIA; - } -#endif - return 0; } diff --git a/src/engine/def_engine/lookup_block.cpp b/src/engine/def_engine/lookup_block.cpp index cdad76c46..097a471b7 100644 --- a/src/engine/def_engine/lookup_block.cpp +++ b/src/engine/def_engine/lookup_block.cpp @@ -22,6 +22,10 @@ #include <botan/cast256.h> #endif +#if defined(BOTAN_HAS_CASCADE) + #include <botan/cascade.h> +#endif + #if defined(BOTAN_HAS_DES) #include <botan/des.h> #include <botan/desx.h> @@ -240,6 +244,17 @@ Default_Engine::find_block_cipher(const SCAN_Name& request, } #endif +#if defined(BOTAN_HAS_CASCADE) + if(request.algo_name() == "Cascade" && request.arg_count() == 2) + { + const BlockCipher* c1 = af.prototype_block_cipher(request.arg(0)); + const BlockCipher* c2 = af.prototype_block_cipher(request.arg(1)); + + if(c1 && c2) + return new Cascade_Cipher(c1->clone(), c2->clone()); + } +#endif + #if defined(BOTAN_HAS_LION) if(request.algo_name() == "Lion" && request.arg_count_between(2, 3)) { diff --git a/src/engine/gnump/gmp_mem.cpp b/src/engine/gnump/gmp_mem.cpp index 59e0cc4c5..f3650e716 100644 --- a/src/engine/gnump/gmp_mem.cpp +++ b/src/engine/gnump/gmp_mem.cpp @@ -1,6 +1,6 @@ /* * GNU MP Memory Handlers -* (C) 1999-2007 Jack Lloyd +* (C) 1999-2010 Jack Lloyd * * Distributed under the terms of the Botan license */ @@ -17,6 +17,7 @@ namespace { * Allocator used by GNU MP */ Allocator* gmp_alloc = 0; +u32bit gmp_alloc_refcnt = 0; /* * Allocation Function for GNU MP @@ -48,23 +49,28 @@ void gmp_free(void* ptr, size_t n) } /* -* Set the GNU MP memory functions +* GMP_Engine Constructor */ -void GMP_Engine::set_memory_hooks() +GMP_Engine::GMP_Engine() { if(gmp_alloc == 0) { gmp_alloc = Allocator::get(true); mp_set_memory_functions(gmp_malloc, gmp_realloc, gmp_free); } + + ++gmp_alloc_refcnt; } -/* -* GMP_Engine Constructor -*/ -GMP_Engine::GMP_Engine() +GMP_Engine::~GMP_Engine() { - set_memory_hooks(); + --gmp_alloc_refcnt; + + if(gmp_alloc_refcnt == 0) + { + mp_set_memory_functions(NULL, NULL, NULL); + gmp_alloc = 0; + } } } diff --git a/src/engine/gnump/gnump_engine.h b/src/engine/gnump/gnump_engine.h index ec4a7e721..d0b070441 100644 --- a/src/engine/gnump/gnump_engine.h +++ b/src/engine/gnump/gnump_engine.h @@ -18,6 +18,9 @@ namespace Botan { class GMP_Engine : public Engine { public: + GMP_Engine(); + ~GMP_Engine(); + std::string provider_name() const { return "gmp"; } #if defined(BOTAN_HAS_IF_PUBLIC_KEY_FAMILY) @@ -46,10 +49,6 @@ class GMP_Engine : public Engine Modular_Exponentiator* mod_exp(const BigInt&, Power_Mod::Usage_Hints) const; - - GMP_Engine(); - private: - static void set_memory_hooks(); }; } diff --git a/src/engine/simd_engine/simd_engine.cpp b/src/engine/simd_engine/simd_engine.cpp index b8ebd6a80..e889ca161 100644 --- a/src/engine/simd_engine/simd_engine.cpp +++ b/src/engine/simd_engine/simd_engine.cpp @@ -13,6 +13,10 @@ #include <botan/serp_simd.h> #endif +#if defined(BOTAN_HAS_NOEKEON_SIMD) + #include <botan/noekeon_simd.h> +#endif + #if defined(BOTAN_HAS_XTEA_SIMD) #include <botan/xtea_simd.h> #endif @@ -36,6 +40,11 @@ SIMD_Engine::find_block_cipher(const SCAN_Name& request, return new IDEA_SSE2; #endif +#if defined(BOTAN_HAS_NOEKEON_SIMD) + if(request.algo_name() == "Noekeon" && SIMD_32::enabled()) + return new Noekeon_SIMD; +#endif + #if defined(BOTAN_HAS_SERPENT_SIMD) if(request.algo_name() == "Serpent" && SIMD_32::enabled()) return new Serpent_SIMD; diff --git a/src/entropy/hres_timer/hres_timer.cpp b/src/entropy/hres_timer/hres_timer.cpp index d06ca7a9d..e1b4928df 100644 --- a/src/entropy/hres_timer/hres_timer.cpp +++ b/src/entropy/hres_timer/hres_timer.cpp @@ -31,7 +31,7 @@ void High_Resolution_Timestamp::poll(Entropy_Accumulator& accum) u64bit rtc = 0; -#if defined(BOTAN_TARGET_ARCH_IS_IA32) || defined(BOTAN_TARGET_ARCH_IS_AMD64) +#if defined(BOTAN_TARGET_CPU_IS_X86_FAMILY) if(CPUID::has_rdtsc()) // not availble on all x86 CPUs { u32bit rtc_low = 0, rtc_high = 0; @@ -39,7 +39,7 @@ void High_Resolution_Timestamp::poll(Entropy_Accumulator& accum) rtc = (static_cast<u64bit>(rtc_high) << 32) | rtc_low; } -#elif defined(BOTAN_TARGET_ARCH_IS_PPC) || defined(BOTAN_TARGET_ARCH_IS_PPC64) +#elif defined(BOTAN_TARGET_CPU_IS_PPC_FAMILY) u32bit rtc_low = 0, rtc_high = 0; asm volatile("mftbu %0; mftb %1" : "=r" (rtc_high), "=r" (rtc_low)); rtc = (static_cast<u64bit>(rtc_high) << 32) | rtc_low; diff --git a/src/filters/buf_filt.cpp b/src/filters/buf_filt.cpp index 0509e76e2..897fd9be7 100644 --- a/src/filters/buf_filt.cpp +++ b/src/filters/buf_filt.cpp @@ -1,71 +1,103 @@ /* -* Buffering Filter +* Buffered Filter * (C) 1999-2007 Jack Lloyd * * Distributed under the terms of the Botan license */ #include <botan/buf_filt.h> -#include <botan/exceptn.h> -#include <algorithm> +#include <botan/mem_ops.h> +#include <botan/internal/rounding.h> +#include <stdexcept> namespace Botan { /* -* Buffering_Filter Constructor +* Buffered_Filter Constructor */ -Buffering_Filter::Buffering_Filter(u32bit b, u32bit i) : INITIAL_BLOCK_SIZE(i), - BLOCK_SIZE(b) +Buffered_Filter::Buffered_Filter(u32bit b, u32bit f) : + main_block_mod(b), final_minimum(f) { - initial_block_pos = block_pos = 0; - initial.resize(INITIAL_BLOCK_SIZE); - block.resize(BLOCK_SIZE); + if(main_block_mod == 0) + throw std::invalid_argument("main_block_mod == 0"); + + if(final_minimum > main_block_mod) + throw std::invalid_argument("final_minimum > main_block_mod"); + + buffer.resize(2 * main_block_mod); + buffer_pos = 0; } /* -* Reset the Buffering Filter +* Buffer input into blocks, trying to minimize copying */ -void Buffering_Filter::end_msg() +void Buffered_Filter::write(const byte input[], u32bit input_size) { - if(initial_block_pos != INITIAL_BLOCK_SIZE) - throw Exception("Buffering_Filter: Not enough data for first block"); - final_block(block, block_pos); - initial_block_pos = block_pos = 0; - initial.clear(); - block.clear(); + if(!input_size) + return; + + if(buffer_pos + input_size >= main_block_mod + final_minimum) + { + u32bit to_copy = std::min<u32bit>(buffer.size() - buffer_pos, input_size); + + copy_mem(&buffer[buffer_pos], input, to_copy); + buffer_pos += to_copy; + + input += to_copy; + input_size -= to_copy; + + u32bit total_to_consume = + round_down(std::min(buffer_pos, + buffer_pos + input_size - final_minimum), + main_block_mod); + + buffered_block(&buffer[0], total_to_consume); + + buffer_pos -= total_to_consume; + + copy_mem(&buffer[0], &buffer[total_to_consume], buffer_pos); + } + + if(input_size >= final_minimum) + { + u32bit full_blocks = (input_size - final_minimum) / main_block_mod; + u32bit to_copy = full_blocks * main_block_mod; + + if(to_copy) + { + buffered_block(input, to_copy); + + input += to_copy; + input_size -= to_copy; + } + } + + copy_mem(&buffer[buffer_pos], input, input_size); + buffer_pos += input_size; } /* -* Buffer input into blocks +* Finish/flush operation */ -void Buffering_Filter::write(const byte input[], u32bit length) +void Buffered_Filter::end_msg() { - if(initial_block_pos != INITIAL_BLOCK_SIZE) + if(buffer_pos < final_minimum) + throw std::runtime_error("Buffered_Operation::final - not enough input"); + + u32bit spare_blocks = (buffer_pos - final_minimum) / main_block_mod; + + if(spare_blocks) { - u32bit copied = std::min(INITIAL_BLOCK_SIZE - initial_block_pos, length); - initial.copy(initial_block_pos, input, copied); - input += copied; - length -= copied; - initial_block_pos += copied; - if(initial_block_pos == INITIAL_BLOCK_SIZE) - initial_block(initial); + u32bit spare_bytes = main_block_mod * spare_blocks; + buffered_block(&buffer[0], spare_bytes); + buffered_final(&buffer[spare_bytes], buffer_pos - spare_bytes); } - block.copy(block_pos, input, length); - if(block_pos + length >= BLOCK_SIZE) + else { - main_block(block); - input += (BLOCK_SIZE - block_pos); - length -= (BLOCK_SIZE - block_pos); - while(length >= BLOCK_SIZE) - { - main_block(input); - input += BLOCK_SIZE; - length -= BLOCK_SIZE; - } - block.copy(input, length); - block_pos = 0; + buffered_final(&buffer[0], buffer_pos); } - block_pos += length; + + buffer_pos = 0; } } diff --git a/src/filters/buf_filt.h b/src/filters/buf_filt.h index ce3dbc926..de4102844 100644 --- a/src/filters/buf_filt.h +++ b/src/filters/buf_filt.h @@ -1,37 +1,39 @@ /* -* Buffering Filter +* Buffered Filter * (C) 1999-2007 Jack Lloyd * * Distributed under the terms of the Botan license */ -#ifndef BOTAN_BUFFERING_FILTER_H__ -#define BOTAN_BUFFERING_FILTER_H__ +#ifndef BOTAN_BUFFERED_FILTER_H__ +#define BOTAN_BUFFERED_FILTER_H__ -#include <botan/filter.h> +#include <botan/secmem.h> namespace Botan { -/** -* Buffering_Filter: This class represents filters for operations that -* maintain an internal state. -*/ - -class BOTAN_DLL Buffering_Filter : public Filter +class BOTAN_DLL Buffered_Filter { public: void write(const byte[], u32bit); - virtual void end_msg(); - Buffering_Filter(u32bit, u32bit = 0); - virtual ~Buffering_Filter() {} + void end_msg(); + + Buffered_Filter(u32bit block_size, u32bit final_minimum); + + virtual ~Buffered_Filter() {} protected: - virtual void initial_block(const byte[]) {} - virtual void main_block(const byte[]) = 0; - virtual void final_block(const byte[], u32bit) = 0; + virtual std::string name() const = 0; + + virtual void buffered_block(const byte input[], u32bit length) = 0; + virtual void buffered_final(const byte input[], u32bit length) = 0; + + u32bit current_position() const { return buffer_pos; } + void buffer_reset() { buffer_pos = 0; } private: - const u32bit INITIAL_BLOCK_SIZE, BLOCK_SIZE; - SecureVector<byte> initial, block; - u32bit initial_block_pos, block_pos; + u32bit main_block_mod, final_minimum; + + SecureVector<byte> buffer; + u32bit buffer_pos; }; } diff --git a/src/filters/bzip2/bzip2.cpp b/src/filters/bzip2/bzip2.cpp index 4cdca5355..9dcee8fdf 100644 --- a/src/filters/bzip2/bzip2.cpp +++ b/src/filters/bzip2/bzip2.cpp @@ -96,7 +96,7 @@ void Bzip_Compression::start_msg() clear(); bz = new Bzip_Stream; if(BZ2_bzCompressInit(&(bz->stream), level, 0, 0) != BZ_OK) - throw Exception("Bzip_Compression: Memory allocation error"); + throw Memory_Exhaustion(); } /* @@ -196,13 +196,15 @@ void Bzip_Decompression::write(const byte input_arr[], u32bit length) if(rc != BZ_OK && rc != BZ_STREAM_END) { clear(); + if(rc == BZ_DATA_ERROR) throw Decoding_Error("Bzip_Decompression: Data integrity error"); - if(rc == BZ_DATA_ERROR_MAGIC) + else if(rc == BZ_DATA_ERROR_MAGIC) throw Decoding_Error("Bzip_Decompression: Invalid input"); - if(rc == BZ_MEM_ERROR) - throw Exception("Bzip_Decompression: Memory allocation error"); - throw Exception("Bzip_Decompression: Unknown decompress error"); + else if(rc == BZ_MEM_ERROR) + throw Memory_Exhaustion(); + else + throw std::runtime_error("Bzip2 decompression: Unknown error"); } send(buffer, buffer.size() - bz->stream.avail_out); @@ -228,7 +230,7 @@ void Bzip_Decompression::start_msg() bz = new Bzip_Stream; if(BZ2_bzDecompressInit(&(bz->stream), 0, small_mem) != BZ_OK) - throw Exception("Bzip_Decompression: Memory allocation error"); + throw Memory_Exhaustion(); no_writes = true; } @@ -252,7 +254,7 @@ void Bzip_Decompression::end_msg() if(rc != BZ_OK && rc != BZ_STREAM_END) { clear(); - throw Exception("Bzip_Decompression: Error finalizing decompression"); + throw Decoding_Error("Bzip_Decompression: Error finalizing"); } send(buffer, buffer.size() - bz->stream.avail_out); diff --git a/src/filters/filter.cpp b/src/filters/filter.cpp index ca32a3801..ff223ae8c 100644 --- a/src/filters/filter.cpp +++ b/src/filters/filter.cpp @@ -6,7 +6,7 @@ */ #include <botan/filter.h> -#include <botan/internal/secqueue.h> +#include <botan/secqueue.h> #include <botan/exceptn.h> namespace Botan { diff --git a/src/filters/info.txt b/src/filters/info.txt index 94b91371b..95d411c76 100644 --- a/src/filters/info.txt +++ b/src/filters/info.txt @@ -24,11 +24,11 @@ filters.h key_filt.h pbe.h pipe.h +secqueue.h </header:public> <header:internal> out_buf.h -secqueue.h </header:internal> <requires> diff --git a/src/filters/modes/cbc/cbc.cpp b/src/filters/modes/cbc/cbc.cpp index 48ecdf509..7722fad2f 100644 --- a/src/filters/modes/cbc/cbc.cpp +++ b/src/filters/modes/cbc/cbc.cpp @@ -16,14 +16,13 @@ namespace Botan { */ CBC_Encryption::CBC_Encryption(BlockCipher* ciph, BlockCipherModePaddingMethod* pad) : + Buffered_Filter(ciph->BLOCK_SIZE, 0), cipher(ciph), padder(pad) { if(!padder->valid_blocksize(cipher->BLOCK_SIZE)) throw Invalid_Block_Size(name(), padder->name()); - buffer.resize(cipher->BLOCK_SIZE); state.resize(cipher->BLOCK_SIZE); - position = 0; } /* @@ -33,14 +32,13 @@ CBC_Encryption::CBC_Encryption(BlockCipher* ciph, BlockCipherModePaddingMethod* pad, const SymmetricKey& key, const InitializationVector& iv) : + Buffered_Filter(ciph->BLOCK_SIZE, 0), cipher(ciph), padder(pad) { if(!padder->valid_blocksize(cipher->BLOCK_SIZE)) throw Invalid_Block_Size(name(), padder->name()); - buffer.resize(cipher->BLOCK_SIZE); state.resize(cipher->BLOCK_SIZE); - position = 0; set_key(key); set_iv(iv); @@ -55,41 +53,52 @@ void CBC_Encryption::set_iv(const InitializationVector& iv) throw Invalid_IV_Length(name(), iv.length()); state = iv.bits_of(); - buffer.clear(); - position = 0; + buffer_reset(); } /* * Encrypt in CBC mode */ -void CBC_Encryption::write(const byte input[], u32bit length) +void CBC_Encryption::buffered_block(const byte input[], u32bit length) { - while(length) + u32bit blocks = length / state.size(); + + for(u32bit i = 0; i != blocks; ++i) { - u32bit xored = std::min(cipher->BLOCK_SIZE - position, length); - xor_buf(state + position, input, xored); - input += xored; - length -= xored; - position += xored; - if(position == cipher->BLOCK_SIZE) - { - cipher->encrypt(state); - send(state, cipher->BLOCK_SIZE); - position = 0; - } + xor_buf(state, input + i * cipher->BLOCK_SIZE, state.size()); + cipher->encrypt(state); + send(state, state.size()); } } /* * Finish encrypting in CBC mode */ +void CBC_Encryption::buffered_final(const byte input[], u32bit length) + { + if(length % cipher->BLOCK_SIZE == 0) + buffered_block(input, length); + else if(length != 0) + throw Encoding_Error(name() + ": Did not pad to full blocksize"); + } + +void CBC_Encryption::write(const byte input[], u32bit input_length) + { + Buffered_Filter::write(input, input_length); + } + void CBC_Encryption::end_msg() { + u32bit last_block = current_position() % cipher->BLOCK_SIZE; + SecureVector<byte> padding(cipher->BLOCK_SIZE); - padder->pad(padding, padding.size(), position); - write(padding, padder->pad_bytes(cipher->BLOCK_SIZE, position)); - if(position != 0) - throw Exception(name() + ": Did not pad to full blocksize"); + padder->pad(padding, padding.size(), last_block); + + u32bit pad_bytes = padder->pad_bytes(cipher->BLOCK_SIZE, last_block); + + if(pad_bytes) + Buffered_Filter::write(padding, pad_bytes); + Buffered_Filter::end_msg(); } /* @@ -105,15 +114,15 @@ std::string CBC_Encryption::name() const */ CBC_Decryption::CBC_Decryption(BlockCipher* ciph, BlockCipherModePaddingMethod* pad) : + Buffered_Filter(BOTAN_PARALLEL_BLOCKS_CBC * ciph->BLOCK_SIZE, + ciph->BLOCK_SIZE), cipher(ciph), padder(pad) { if(!padder->valid_blocksize(cipher->BLOCK_SIZE)) throw Invalid_Block_Size(name(), padder->name()); - buffer.resize(cipher->BLOCK_SIZE); state.resize(cipher->BLOCK_SIZE); - temp.resize(cipher->BLOCK_SIZE); - position = 0; + temp.resize(BOTAN_PARALLEL_BLOCKS_CBC * cipher->BLOCK_SIZE); } /* @@ -123,15 +132,15 @@ CBC_Decryption::CBC_Decryption(BlockCipher* ciph, BlockCipherModePaddingMethod* pad, const SymmetricKey& key, const InitializationVector& iv) : + Buffered_Filter(BOTAN_PARALLEL_BLOCKS_CBC * ciph->BLOCK_SIZE, + ciph->BLOCK_SIZE), cipher(ciph), padder(pad) { if(!padder->valid_blocksize(cipher->BLOCK_SIZE)) throw Invalid_Block_Size(name(), padder->name()); - buffer.resize(cipher->BLOCK_SIZE); state.resize(cipher->BLOCK_SIZE); - temp.resize(cipher->BLOCK_SIZE); - position = 0; + temp.resize(BOTAN_PARALLEL_BLOCKS_CBC * cipher->BLOCK_SIZE); set_key(key); set_iv(iv); @@ -146,46 +155,74 @@ void CBC_Decryption::set_iv(const InitializationVector& iv) throw Invalid_IV_Length(name(), iv.length()); state = iv.bits_of(); - buffer.clear(); - position = 0; + buffer_reset(); } /* * Decrypt in CBC mode */ -void CBC_Decryption::write(const byte input[], u32bit length) +void CBC_Decryption::buffered_block(const byte input[], u32bit length) { - while(length) + const u32bit blocks_in_temp = temp.size() / cipher->BLOCK_SIZE; + u32bit blocks = length / cipher->BLOCK_SIZE; + + while(blocks) { - if(position == cipher->BLOCK_SIZE) - { - cipher->decrypt(buffer, temp); - xor_buf(temp, state, cipher->BLOCK_SIZE); - send(temp, cipher->BLOCK_SIZE); - state = buffer; - position = 0; - } - - u32bit added = std::min(cipher->BLOCK_SIZE - position, length); - buffer.copy(position, input, added); - input += added; - length -= added; - position += added; + u32bit to_proc = std::min<u32bit>(blocks, blocks_in_temp); + + cipher->decrypt_n(input, &temp[0], to_proc); + + xor_buf(temp, state, cipher->BLOCK_SIZE); + + for(u32bit i = 1; i < to_proc; ++i) + xor_buf(temp + i * cipher->BLOCK_SIZE, + input + (i-1) * cipher->BLOCK_SIZE, + cipher->BLOCK_SIZE); + + state.set(input + (to_proc - 1) * cipher->BLOCK_SIZE, cipher->BLOCK_SIZE); + + send(temp, to_proc * cipher->BLOCK_SIZE); + + input += to_proc * cipher->BLOCK_SIZE; + blocks -= to_proc; } } /* -* Finish decrypting in CBC mode +* Finish encrypting in CBC mode */ -void CBC_Decryption::end_msg() +void CBC_Decryption::buffered_final(const byte input[], u32bit length) { - if(position != cipher->BLOCK_SIZE) - throw Decoding_Error(name()); - cipher->decrypt(buffer, temp); + if(length == 0 || length % cipher->BLOCK_SIZE != 0) + throw Decoding_Error(name() + ": Ciphertext not multiple of block size"); + + size_t extra_blocks = (length - 1) / cipher->BLOCK_SIZE; + + buffered_block(input, extra_blocks * cipher->BLOCK_SIZE); + + input += extra_blocks * cipher->BLOCK_SIZE; + + cipher->decrypt(input, temp); xor_buf(temp, state, cipher->BLOCK_SIZE); send(temp, padder->unpad(temp, cipher->BLOCK_SIZE)); - state = buffer; - position = 0; + + state.set(input, state.size()); + } + +/* +* Decrypt in CBC mode +*/ +void CBC_Decryption::write(const byte input[], u32bit length) + { + Buffered_Filter::write(input, length); + } + +/* +* Finish decrypting in CBC mode +*/ +void CBC_Decryption::end_msg() + { + Buffered_Filter::end_msg(); } /* diff --git a/src/filters/modes/cbc/cbc.h b/src/filters/modes/cbc/cbc.h index 91ab21ab6..6d9092041 100644 --- a/src/filters/modes/cbc/cbc.h +++ b/src/filters/modes/cbc/cbc.h @@ -11,13 +11,15 @@ #include <botan/block_cipher.h> #include <botan/key_filt.h> #include <botan/mode_pad.h> +#include <botan/buf_filt.h> namespace Botan { /* * CBC Encryption */ -class BOTAN_DLL CBC_Encryption : public Keyed_Filter +class BOTAN_DLL CBC_Encryption : public Keyed_Filter, + private Buffered_Filter { public: std::string name() const; @@ -37,21 +39,24 @@ class BOTAN_DLL CBC_Encryption : public Keyed_Filter const SymmetricKey& key, const InitializationVector& iv); - ~CBC_Encryption() { delete padder; } + ~CBC_Encryption() { delete cipher; delete padder; } private: - void write(const byte[], u32bit); + void buffered_block(const byte input[], u32bit input_length); + void buffered_final(const byte input[], u32bit input_length); + + void write(const byte input[], u32bit input_length); void end_msg(); BlockCipher* cipher; const BlockCipherModePaddingMethod* padder; - SecureVector<byte> buffer, state; - u32bit position; + SecureVector<byte> state; }; /* * CBC Decryption */ -class BOTAN_DLL CBC_Decryption : public Keyed_Filter +class BOTAN_DLL CBC_Decryption : public Keyed_Filter, + private Buffered_Filter { public: std::string name() const; @@ -71,15 +76,17 @@ class BOTAN_DLL CBC_Decryption : public Keyed_Filter const SymmetricKey& key, const InitializationVector& iv); - ~CBC_Decryption() { delete padder; } + ~CBC_Decryption() { delete cipher; delete padder; } private: + void buffered_block(const byte input[], u32bit input_length); + void buffered_final(const byte input[], u32bit input_length); + void write(const byte[], u32bit); void end_msg(); BlockCipher* cipher; const BlockCipherModePaddingMethod* padder; - SecureVector<byte> buffer, state, temp; - u32bit position; + SecureVector<byte> state, temp; }; } diff --git a/src/filters/modes/cfb/cfb.h b/src/filters/modes/cfb/cfb.h index 917125e46..249ae21db 100644 --- a/src/filters/modes/cfb/cfb.h +++ b/src/filters/modes/cfb/cfb.h @@ -34,6 +34,8 @@ class BOTAN_DLL CFB_Encryption : public Keyed_Filter const SymmetricKey& key, const InitializationVector& iv, u32bit feedback = 0); + + ~CFB_Encryption() { delete cipher; } private: void write(const byte[], u32bit); @@ -63,6 +65,8 @@ class BOTAN_DLL CFB_Decryption : public Keyed_Filter const SymmetricKey& key, const InitializationVector& iv, u32bit feedback = 0); + + ~CFB_Decryption() { delete cipher; } private: void write(const byte[], u32bit); diff --git a/src/filters/modes/cts/cts.cpp b/src/filters/modes/cts/cts.cpp index 3a15a1d68..b27b9b3c5 100644 --- a/src/filters/modes/cts/cts.cpp +++ b/src/filters/modes/cts/cts.cpp @@ -101,7 +101,8 @@ void CTS_Encryption::write(const byte input[], u32bit length) void CTS_Encryption::end_msg() { if(position < cipher->BLOCK_SIZE + 1) - throw Exception("CTS_Encryption: insufficient data to encrypt"); + throw Encoding_Error(name() + ": insufficient data to encrypt"); + xor_buf(state, buffer, cipher->BLOCK_SIZE); cipher->encrypt(state); SecureVector<byte> cn = state; diff --git a/src/filters/modes/cts/cts.h b/src/filters/modes/cts/cts.h index 4a7513fa0..c15fa9510 100644 --- a/src/filters/modes/cts/cts.h +++ b/src/filters/modes/cts/cts.h @@ -33,6 +33,8 @@ class BOTAN_DLL CTS_Encryption : public Keyed_Filter CTS_Encryption(BlockCipher* cipher, const SymmetricKey& key, const InitializationVector& iv); + + ~CTS_Encryption() { delete cipher; } private: void write(const byte[], u32bit); void end_msg(); @@ -63,6 +65,8 @@ class BOTAN_DLL CTS_Decryption : public Keyed_Filter CTS_Decryption(BlockCipher* cipher, const SymmetricKey& key, const InitializationVector& iv); + + ~CTS_Decryption() { delete cipher; } private: void write(const byte[], u32bit); void end_msg(); diff --git a/src/filters/modes/eax/eax_dec.cpp b/src/filters/modes/eax/eax_dec.cpp index f41327ffc..998773697 100644 --- a/src/filters/modes/eax/eax_dec.cpp +++ b/src/filters/modes/eax/eax_dec.cpp @@ -98,13 +98,13 @@ void EAX_Decryption::do_write(const byte input[], u32bit length) void EAX_Decryption::end_msg() { if((queue_end - queue_start) != TAG_SIZE) - throw Integrity_Failure(name() + ": Message authentication failure"); + throw Decoding_Error(name() + ": Message authentication failure"); SecureVector<byte> data_mac = cmac->final(); for(u32bit j = 0; j != TAG_SIZE; ++j) if(queue[queue_start+j] != (data_mac[j] ^ nonce_mac[j] ^ header_mac[j])) - throw Integrity_Failure(name() + ": Message authentication failure"); + throw Decoding_Error(name() + ": Message authentication failure"); queue_start = queue_end = 0; } diff --git a/src/filters/modes/ecb/ecb.cpp b/src/filters/modes/ecb/ecb.cpp index bff6d70f4..2ce6576e3 100644 --- a/src/filters/modes/ecb/ecb.cpp +++ b/src/filters/modes/ecb/ecb.cpp @@ -1,6 +1,6 @@ /* * ECB Mode -* (C) 1999-2007 Jack Lloyd +* (C) 1999-2009 Jack Lloyd * * Distributed under the terms of the Botan license */ @@ -9,25 +9,17 @@ namespace Botan { -namespace { - -const u32bit PARALLEL_BLOCKS = BOTAN_PARALLEL_BLOCKS_ECB; - -} - /* * ECB_Encryption Constructor */ ECB_Encryption::ECB_Encryption(BlockCipher* ciph, - BlockCipherModePaddingMethod* pad) + BlockCipherModePaddingMethod* pad) : + Buffered_Filter(ciph->BLOCK_SIZE * BOTAN_PARALLEL_BLOCKS_ECB, 0) { cipher = ciph; padder = pad; - plaintext.resize(cipher->BLOCK_SIZE); - ciphertext.resize(cipher->BLOCK_SIZE * PARALLEL_BLOCKS); - - position = 0; + temp.resize(cipher->BLOCK_SIZE * BOTAN_PARALLEL_BLOCKS_ECB); } /* @@ -35,15 +27,13 @@ ECB_Encryption::ECB_Encryption(BlockCipher* ciph, */ ECB_Encryption::ECB_Encryption(BlockCipher* ciph, BlockCipherModePaddingMethod* pad, - const SymmetricKey& key) + const SymmetricKey& key) : + Buffered_Filter(ciph->BLOCK_SIZE * BOTAN_PARALLEL_BLOCKS_ECB, 0) { cipher = ciph; padder = pad; - plaintext.resize(cipher->BLOCK_SIZE); - ciphertext.resize(cipher->BLOCK_SIZE * PARALLEL_BLOCKS); - - position = 0; + temp.resize(cipher->BLOCK_SIZE * BOTAN_PARALLEL_BLOCKS_ECB); cipher->set_key(key); } @@ -70,35 +60,7 @@ std::string ECB_Encryption::name() const */ void ECB_Encryption::write(const byte input[], u32bit length) { - const u32bit BLOCK_SIZE = cipher->BLOCK_SIZE; - - if(position) - { - plaintext.copy(position, input, length); - - if(position + length >= BLOCK_SIZE) - { - cipher->encrypt(plaintext, ciphertext); - send(ciphertext, BLOCK_SIZE); - input += (BLOCK_SIZE - position); - length -= (BLOCK_SIZE - position); - position = 0; - } - } - - while(length >= BLOCK_SIZE) - { - const u32bit to_proc = - std::min<u32bit>(length, ciphertext.size()) / BLOCK_SIZE; - - cipher->encrypt_n(input, ciphertext, to_proc); - send(ciphertext, to_proc * BLOCK_SIZE); - input += to_proc * BLOCK_SIZE; - length -= to_proc * BLOCK_SIZE; - } - - plaintext.copy(position, input, length); - position += length; + Buffered_Filter::write(input, length); } /* @@ -106,12 +68,41 @@ void ECB_Encryption::write(const byte input[], u32bit length) */ void ECB_Encryption::end_msg() { - const u32bit BLOCK_SIZE = cipher->BLOCK_SIZE; + u32bit last_block = current_position() % cipher->BLOCK_SIZE; + + SecureVector<byte> padding(cipher->BLOCK_SIZE); + padder->pad(padding, padding.size(), last_block); + + u32bit pad_bytes = padder->pad_bytes(cipher->BLOCK_SIZE, last_block); + + if(pad_bytes) + Buffered_Filter::write(padding, pad_bytes); + Buffered_Filter::end_msg(); + } + +void ECB_Encryption::buffered_block(const byte input[], u32bit input_length) + { + const u32bit blocks_in_temp = temp.size() / cipher->BLOCK_SIZE; + u32bit blocks = input_length / cipher->BLOCK_SIZE; + + while(blocks) + { + u32bit to_proc = std::min<u32bit>(blocks, blocks_in_temp); + + cipher->encrypt_n(input, &temp[0], to_proc); + + send(temp, to_proc * cipher->BLOCK_SIZE); + + input += to_proc * cipher->BLOCK_SIZE; + blocks -= to_proc; + } + } - SecureVector<byte> padding(BLOCK_SIZE); - padder->pad(padding, padding.size(), position); - write(padding, padder->pad_bytes(BLOCK_SIZE, position)); - if(position != 0) +void ECB_Encryption::buffered_final(const byte input[], u32bit input_length) + { + if(input_length % cipher->BLOCK_SIZE == 0) + buffered_block(input, input_length); + else if(input_length != 0) throw Encoding_Error(name() + ": Did not pad to full blocksize"); } @@ -119,15 +110,13 @@ void ECB_Encryption::end_msg() * ECB_Decryption Constructor */ ECB_Decryption::ECB_Decryption(BlockCipher* ciph, - BlockCipherModePaddingMethod* pad) + BlockCipherModePaddingMethod* pad) : + Buffered_Filter(ciph->BLOCK_SIZE * BOTAN_PARALLEL_BLOCKS_ECB, 1) { cipher = ciph; padder = pad; - ciphertext.resize(cipher->BLOCK_SIZE); - plaintext.resize(cipher->BLOCK_SIZE * PARALLEL_BLOCKS); - - position = 0; + temp.resize(cipher->BLOCK_SIZE * BOTAN_PARALLEL_BLOCKS_ECB); } /* @@ -135,15 +124,13 @@ ECB_Decryption::ECB_Decryption(BlockCipher* ciph, */ ECB_Decryption::ECB_Decryption(BlockCipher* ciph, BlockCipherModePaddingMethod* pad, - const SymmetricKey& key) + const SymmetricKey& key) : + Buffered_Filter(ciph->BLOCK_SIZE * BOTAN_PARALLEL_BLOCKS_ECB, 1) { cipher = ciph; padder = pad; - ciphertext.resize(cipher->BLOCK_SIZE); - plaintext.resize(cipher->BLOCK_SIZE * PARALLEL_BLOCKS); - - position = 0; + temp.resize(cipher->BLOCK_SIZE * BOTAN_PARALLEL_BLOCKS_ECB); cipher->set_key(key); } @@ -170,53 +157,54 @@ std::string ECB_Decryption::name() const */ void ECB_Decryption::write(const byte input[], u32bit length) { - const u32bit BLOCK_SIZE = cipher->BLOCK_SIZE; + Buffered_Filter::write(input, length); + } - if(position) - { - ciphertext.copy(position, input, length); - - if(position + length > BLOCK_SIZE) - { - cipher->decrypt(ciphertext, plaintext); - send(plaintext, BLOCK_SIZE); - input += (BLOCK_SIZE - position); - length -= (BLOCK_SIZE - position); - position = 0; - } - } +/* +* Finish decrypting in ECB mode +*/ +void ECB_Decryption::end_msg() + { + Buffered_Filter::end_msg(); + } - while(length > BLOCK_SIZE) +/* +* Decrypt in ECB mode +*/ +void ECB_Decryption::buffered_block(const byte input[], u32bit length) + { + const u32bit blocks_in_temp = temp.size() / cipher->BLOCK_SIZE; + u32bit blocks = length / cipher->BLOCK_SIZE; + + while(blocks) { - /* Always leave at least 1 byte left over, to ensure that (as long - as the input message actually is a multiple of the block size) - we will have the full final block left over in end_msg so as - to remove the padding - */ - const u32bit to_proc = - std::min<u32bit>(length - 1, plaintext.size()) / BLOCK_SIZE; - - cipher->decrypt_n(input, plaintext, to_proc); - send(plaintext, to_proc * BLOCK_SIZE); - input += to_proc * BLOCK_SIZE; - length -= to_proc * BLOCK_SIZE; - } + u32bit to_proc = std::min<u32bit>(blocks, blocks_in_temp); - ciphertext.copy(position, input, length); - position += length; + cipher->decrypt_n(input, &temp[0], to_proc); + + send(temp, to_proc * cipher->BLOCK_SIZE); + + input += to_proc * cipher->BLOCK_SIZE; + blocks -= to_proc; + } } /* -* Finish decrypting in ECB mode +* Finish encrypting in ECB mode */ -void ECB_Decryption::end_msg() +void ECB_Decryption::buffered_final(const byte input[], u32bit length) { - if(position != cipher->BLOCK_SIZE) - throw Decoding_Error(name()); + if(length == 0 || length % cipher->BLOCK_SIZE != 0) + throw Decoding_Error(name() + ": Ciphertext not multiple of block size"); + + size_t extra_blocks = (length - 1) / cipher->BLOCK_SIZE; + + buffered_block(input, extra_blocks * cipher->BLOCK_SIZE); + + input += extra_blocks * cipher->BLOCK_SIZE; - cipher->decrypt(ciphertext); - send(ciphertext, padder->unpad(ciphertext, cipher->BLOCK_SIZE)); - position = 0; + cipher->decrypt(input, temp); + send(temp, padder->unpad(temp, cipher->BLOCK_SIZE)); } } diff --git a/src/filters/modes/ecb/ecb.h b/src/filters/modes/ecb/ecb.h index 2b3b3fe83..2b88191c7 100644 --- a/src/filters/modes/ecb/ecb.h +++ b/src/filters/modes/ecb/ecb.h @@ -11,13 +11,15 @@ #include <botan/block_cipher.h> #include <botan/mode_pad.h> #include <botan/key_filt.h> +#include <botan/buf_filt.h> namespace Botan { /* * ECB Encryption */ -class BOTAN_DLL ECB_Encryption : public Keyed_Filter +class BOTAN_DLL ECB_Encryption : public Keyed_Filter, + private Buffered_Filter { public: std::string name() const; @@ -36,19 +38,22 @@ class BOTAN_DLL ECB_Encryption : public Keyed_Filter ~ECB_Encryption(); private: - void write(const byte[], u32bit); + void buffered_block(const byte input[], u32bit input_length); + void buffered_final(const byte input[], u32bit input_length); + + void write(const byte input[], u32bit input_length); void end_msg(); BlockCipher* cipher; BlockCipherModePaddingMethod* padder; - SecureVector<byte> plaintext, ciphertext; - u32bit position; + SecureVector<byte> temp; }; /* * ECB Decryption */ -class BOTAN_DLL ECB_Decryption : public Keyed_Filter +class BOTAN_DLL ECB_Decryption : public Keyed_Filter, + public Buffered_Filter { public: std::string name() const; @@ -67,13 +72,15 @@ class BOTAN_DLL ECB_Decryption : public Keyed_Filter ~ECB_Decryption(); private: - void write(const byte[], u32bit); + void buffered_block(const byte input[], u32bit input_length); + void buffered_final(const byte input[], u32bit input_length); + + void write(const byte input[], u32bit input_length); void end_msg(); BlockCipher* cipher; BlockCipherModePaddingMethod* padder; - SecureVector<byte> plaintext, ciphertext; - u32bit position; + SecureVector<byte> temp; }; } diff --git a/src/filters/modes/xts/xts.cpp b/src/filters/modes/xts/xts.cpp index c9b77e1eb..aeef4e88d 100644 --- a/src/filters/modes/xts/xts.cpp +++ b/src/filters/modes/xts/xts.cpp @@ -16,7 +16,7 @@ namespace { void poly_double(byte tweak[], u32bit size) { - const byte polynomial = 0x87; // for 128 bit ciphers + const byte polynomial = (size == 16) ? 0x87 : 0x1B; byte carry = 0; for(u32bit i = 0; i != size; ++i) @@ -35,15 +35,16 @@ void poly_double(byte tweak[], u32bit size) /* * XTS_Encryption constructor */ -XTS_Encryption::XTS_Encryption(BlockCipher* ciph) : cipher(ciph) +XTS_Encryption::XTS_Encryption(BlockCipher* ciph) : + Buffered_Filter(BOTAN_PARALLEL_BLOCKS_XTS * ciph->BLOCK_SIZE, + ciph->BLOCK_SIZE + 1), + cipher(ciph) { - if(cipher->BLOCK_SIZE != 16) + if(cipher->BLOCK_SIZE != 8 && cipher->BLOCK_SIZE != 16) throw std::invalid_argument("Bad cipher for XTS: " + cipher->name()); cipher2 = cipher->clone(); - tweak.resize(cipher->BLOCK_SIZE); - buffer.resize(2 * cipher->BLOCK_SIZE); - position = 0; + tweak.resize(BOTAN_PARALLEL_BLOCKS_XTS * cipher->BLOCK_SIZE); } /* @@ -51,15 +52,16 @@ XTS_Encryption::XTS_Encryption(BlockCipher* ciph) : cipher(ciph) */ XTS_Encryption::XTS_Encryption(BlockCipher* ciph, const SymmetricKey& key, - const InitializationVector& iv) : cipher(ciph) + const InitializationVector& iv) : + Buffered_Filter(BOTAN_PARALLEL_BLOCKS_XTS * ciph->BLOCK_SIZE, + ciph->BLOCK_SIZE + 1), + cipher(ciph) { - if(cipher->BLOCK_SIZE != 16) - throw std::invalid_argument("Bad cipher for XTS: " + cipher->name()); + if(cipher->BLOCK_SIZE != 8 && cipher->BLOCK_SIZE != 16) + throw std::invalid_argument("Bad cipher for XTS: " + cipher->name()); cipher2 = cipher->clone(); - tweak.resize(cipher->BLOCK_SIZE); - buffer.resize(2 * cipher->BLOCK_SIZE); - position = 0; + tweak.resize(BOTAN_PARALLEL_BLOCKS_XTS * cipher->BLOCK_SIZE); set_key(key); set_iv(iv); @@ -78,11 +80,22 @@ std::string XTS_Encryption::name() const */ void XTS_Encryption::set_iv(const InitializationVector& iv) { - if(iv.length() != tweak.size()) + if(iv.length() != cipher->BLOCK_SIZE) throw Invalid_IV_Length(name(), iv.length()); - tweak = iv.bits_of(); + const u32bit blocks_in_tweak = tweak.size() / cipher->BLOCK_SIZE; + + tweak.copy(iv.begin(), iv.length()); cipher2->encrypt(tweak); + + for(u32bit i = 1; i < blocks_in_tweak; ++i) + { + tweak.copy(i*cipher->BLOCK_SIZE, + tweak.begin() + (i-1)*cipher->BLOCK_SIZE, + cipher->BLOCK_SIZE); + + poly_double(&tweak[i*cipher->BLOCK_SIZE], cipher->BLOCK_SIZE); + } } void XTS_Encryption::set_key(const SymmetricKey& key) @@ -96,110 +109,116 @@ void XTS_Encryption::set_key(const SymmetricKey& key) cipher2->set_key(key.begin() + key_half, key_half); } -void XTS_Encryption::encrypt(const byte block[]) - { - /* - * We can always use the first 16 bytes of buffer as temp space, - * since either the input block is buffer (in which case this is - * just buffer ^= tweak) or it not, in which case we already read - * and used the data there and are processing new input. Kind of - * subtle/nasty, but saves allocating a distinct temp buf. - */ - - xor_buf(buffer, block, tweak, cipher->BLOCK_SIZE); - cipher->encrypt(buffer); - xor_buf(buffer, tweak, cipher->BLOCK_SIZE); - - poly_double(tweak, cipher->BLOCK_SIZE); - - send(buffer, cipher->BLOCK_SIZE); - } - /* * Encrypt in XTS mode */ void XTS_Encryption::write(const byte input[], u32bit length) { - const u32bit BLOCK_SIZE = cipher->BLOCK_SIZE; + Buffered_Filter::write(input, length); + } +/* +* Finish encrypting in XTS mode +*/ +void XTS_Encryption::end_msg() + { + Buffered_Filter::end_msg(); + } - u32bit copied = std::min(buffer.size() - position, length); - buffer.copy(position, input, copied); - length -= copied; - input += copied; - position += copied; +void XTS_Encryption::buffered_block(const byte input[], u32bit length) + { + const u32bit blocks_in_tweak = tweak.size() / cipher->BLOCK_SIZE; + u32bit blocks = length / cipher->BLOCK_SIZE; - if(length == 0) return; + SecureVector<byte> temp(tweak.size()); - encrypt(buffer); - if(length > BLOCK_SIZE) + while(blocks) { - encrypt(buffer + BLOCK_SIZE); - while(length > buffer.size()) + u32bit to_proc = std::min(blocks, blocks_in_tweak); + u32bit to_proc_bytes = to_proc * cipher->BLOCK_SIZE; + + xor_buf(temp, input, tweak, to_proc_bytes); + + cipher->encrypt_n(&temp[0], &temp[0], to_proc); + + xor_buf(temp, tweak, to_proc_bytes); + + send(temp, to_proc_bytes); + + tweak.copy(&tweak[(to_proc-1)*cipher->BLOCK_SIZE], + cipher->BLOCK_SIZE); + poly_double(&tweak[0], cipher->BLOCK_SIZE); + + for(u32bit i = 1; i < blocks_in_tweak; ++i) { - encrypt(input); - length -= BLOCK_SIZE; - input += BLOCK_SIZE; + tweak.copy(i*cipher->BLOCK_SIZE, + tweak.begin() + (i-1)*cipher->BLOCK_SIZE, + cipher->BLOCK_SIZE); + + poly_double(&tweak[i*cipher->BLOCK_SIZE], cipher->BLOCK_SIZE); } - position = 0; - } - else - { - copy_mem(buffer.begin(), buffer + BLOCK_SIZE, BLOCK_SIZE); - position = BLOCK_SIZE; + + input += to_proc * cipher->BLOCK_SIZE; + blocks -= to_proc; } - buffer.copy(position, input, length); - position += length; } /* * Finish encrypting in XTS mode */ -void XTS_Encryption::end_msg() +void XTS_Encryption::buffered_final(const byte input[], u32bit length) { - const u32bit BLOCK_SIZE = cipher->BLOCK_SIZE; + if(length <= cipher->BLOCK_SIZE) + throw Encoding_Error("XTS_Encryption: insufficient data to encrypt"); - if(position < BLOCK_SIZE) - throw Exception("XTS_Encryption: insufficient data to encrypt"); - else if(position == BLOCK_SIZE) - { - encrypt(buffer); - } - else if(position == 2*BLOCK_SIZE) + if(length % cipher->BLOCK_SIZE == 0) { - encrypt(buffer); - encrypt(buffer + BLOCK_SIZE); + buffered_block(input, length); } else { // steal ciphertext - xor_buf(buffer, tweak, cipher->BLOCK_SIZE); - cipher->encrypt(buffer); - xor_buf(buffer, tweak, cipher->BLOCK_SIZE); + + u32bit leftover_blocks = + ((length / cipher->BLOCK_SIZE) - 1) * cipher->BLOCK_SIZE; + + buffered_block(input, leftover_blocks); + + input += leftover_blocks; + length -= leftover_blocks; + + SecureVector<byte> temp(input, length); + + xor_buf(temp, tweak, cipher->BLOCK_SIZE); + cipher->encrypt(temp); + xor_buf(temp, tweak, cipher->BLOCK_SIZE); poly_double(tweak, cipher->BLOCK_SIZE); - for(u32bit i = 0; i != position - cipher->BLOCK_SIZE; ++i) - std::swap(buffer[i], buffer[i + cipher->BLOCK_SIZE]); + for(u32bit i = 0; i != length - cipher->BLOCK_SIZE; ++i) + std::swap(temp[i], temp[i + cipher->BLOCK_SIZE]); - xor_buf(buffer, tweak, cipher->BLOCK_SIZE); - cipher->encrypt(buffer); - xor_buf(buffer, tweak, cipher->BLOCK_SIZE); + xor_buf(temp, tweak, cipher->BLOCK_SIZE); + cipher->encrypt(temp); + xor_buf(temp, tweak, cipher->BLOCK_SIZE); - send(buffer, position); + send(temp, temp.size()); } - position = 0; + buffer_reset(); } /* * XTS_Decryption constructor */ -XTS_Decryption::XTS_Decryption(BlockCipher* ciph) +XTS_Decryption::XTS_Decryption(BlockCipher* ciph) : + Buffered_Filter(BOTAN_PARALLEL_BLOCKS_XTS * ciph->BLOCK_SIZE, + ciph->BLOCK_SIZE + 1), + cipher(ciph) { - cipher = ciph; + if(cipher->BLOCK_SIZE != 8 && cipher->BLOCK_SIZE != 16) + throw std::invalid_argument("Bad cipher for XTS: " + cipher->name()); + cipher2 = ciph->clone(); - tweak.resize(cipher->BLOCK_SIZE); - buffer.resize(2 * cipher->BLOCK_SIZE); - position = 0; + tweak.resize(BOTAN_PARALLEL_BLOCKS_XTS * cipher->BLOCK_SIZE); } /* @@ -207,13 +226,16 @@ XTS_Decryption::XTS_Decryption(BlockCipher* ciph) */ XTS_Decryption::XTS_Decryption(BlockCipher* ciph, const SymmetricKey& key, - const InitializationVector& iv) + const InitializationVector& iv) : + Buffered_Filter(BOTAN_PARALLEL_BLOCKS_XTS * ciph->BLOCK_SIZE, + ciph->BLOCK_SIZE + 1), + cipher(ciph) { - cipher = ciph; + if(cipher->BLOCK_SIZE != 8 && cipher->BLOCK_SIZE != 16) + throw std::invalid_argument("Bad cipher for XTS: " + cipher->name()); + cipher2 = ciph->clone(); - tweak.resize(cipher->BLOCK_SIZE); - buffer.resize(2 * cipher->BLOCK_SIZE); - position = 0; + tweak.resize(BOTAN_PARALLEL_BLOCKS_XTS * cipher->BLOCK_SIZE); set_key(key); set_iv(iv); @@ -232,11 +254,22 @@ std::string XTS_Decryption::name() const */ void XTS_Decryption::set_iv(const InitializationVector& iv) { - if(iv.length() != tweak.size()) + if(iv.length() != cipher->BLOCK_SIZE) throw Invalid_IV_Length(name(), iv.length()); - tweak = iv.bits_of(); + const u32bit blocks_in_tweak = tweak.size() / cipher->BLOCK_SIZE; + + tweak.copy(iv.begin(), iv.length()); cipher2->encrypt(tweak); + + for(u32bit i = 1; i < blocks_in_tweak; ++i) + { + tweak.copy(i*cipher->BLOCK_SIZE, + tweak.begin() + (i-1)*cipher->BLOCK_SIZE, + cipher->BLOCK_SIZE); + + poly_double(&tweak[i*cipher->BLOCK_SIZE], cipher->BLOCK_SIZE); + } } void XTS_Decryption::set_key(const SymmetricKey& key) @@ -251,94 +284,98 @@ void XTS_Decryption::set_key(const SymmetricKey& key) } /* -* Decrypt a block +* Decrypt in XTS mode */ -void XTS_Decryption::decrypt(const byte block[]) +void XTS_Decryption::write(const byte input[], u32bit length) { - xor_buf(buffer, block, tweak, cipher->BLOCK_SIZE); - cipher->decrypt(buffer); - xor_buf(buffer, tweak, cipher->BLOCK_SIZE); - - poly_double(tweak, cipher->BLOCK_SIZE); - - send(buffer, cipher->BLOCK_SIZE); + Buffered_Filter::write(input, length); } /* -* Decrypt in XTS mode +* Finish decrypting in XTS mode */ -void XTS_Decryption::write(const byte input[], u32bit length) +void XTS_Decryption::end_msg() { - const u32bit BLOCK_SIZE = cipher->BLOCK_SIZE; + Buffered_Filter::end_msg(); + } - u32bit copied = std::min(buffer.size() - position, length); - buffer.copy(position, input, copied); - length -= copied; - input += copied; - position += copied; +void XTS_Decryption::buffered_block(const byte input[], u32bit input_length) + { + const u32bit blocks_in_tweak = tweak.size() / cipher->BLOCK_SIZE; + u32bit blocks = input_length / cipher->BLOCK_SIZE; - if(length == 0) return; + SecureVector<byte> temp(tweak.size()); - decrypt(buffer); - if(length > BLOCK_SIZE) + while(blocks) { - decrypt(buffer + BLOCK_SIZE); - while(length > 2*BLOCK_SIZE) + u32bit to_proc = std::min(blocks, blocks_in_tweak); + u32bit to_proc_bytes = to_proc * cipher->BLOCK_SIZE; + + xor_buf(temp, input, tweak, to_proc_bytes); + + cipher->decrypt_n(&temp[0], &temp[0], to_proc); + + xor_buf(temp, tweak, to_proc_bytes); + + send(temp, to_proc_bytes); + + tweak.copy(&tweak[(to_proc-1)*cipher->BLOCK_SIZE], + cipher->BLOCK_SIZE); + poly_double(&tweak[0], cipher->BLOCK_SIZE); + + for(u32bit i = 1; i < blocks_in_tweak; ++i) { - decrypt(input); - length -= BLOCK_SIZE; - input += BLOCK_SIZE; + tweak.copy(i*cipher->BLOCK_SIZE, + tweak.begin() + (i-1)*cipher->BLOCK_SIZE, + cipher->BLOCK_SIZE); + + poly_double(&tweak[i*cipher->BLOCK_SIZE], cipher->BLOCK_SIZE); } - position = 0; - } - else - { - copy_mem(buffer.begin(), buffer + BLOCK_SIZE, BLOCK_SIZE); - position = BLOCK_SIZE; + + input += to_proc * cipher->BLOCK_SIZE; + blocks -= to_proc; } - buffer.copy(position, input, length); - position += length; } -/* -* Finish decrypting in XTS mode -*/ -void XTS_Decryption::end_msg() +void XTS_Decryption::buffered_final(const byte input[], u32bit length) { - const u32bit BLOCK_SIZE = cipher->BLOCK_SIZE; + if(length <= cipher->BLOCK_SIZE) + throw Decoding_Error("XTS_Decryption: insufficient data to decrypt"); - if(position < BLOCK_SIZE) - throw Exception("XTS_Decryption: insufficient data to decrypt"); - else if(position == BLOCK_SIZE) + if(length % cipher->BLOCK_SIZE == 0) { - decrypt(buffer); - } - else if(position == 2*BLOCK_SIZE) - { - decrypt(buffer); - decrypt(buffer + BLOCK_SIZE); + buffered_block(input, length); } else { - SecureVector<byte> tweak2 = tweak; + u32bit leftover_blocks = + ((length / cipher->BLOCK_SIZE) - 1) * cipher->BLOCK_SIZE; + + buffered_block(input, leftover_blocks); + + input += leftover_blocks; + length -= leftover_blocks; + + SecureVector<byte> temp(input, length); + SecureVector<byte> tweak_copy(&tweak[0], cipher->BLOCK_SIZE); - poly_double(tweak2, cipher->BLOCK_SIZE); + poly_double(tweak_copy, cipher->BLOCK_SIZE); - xor_buf(buffer, tweak2, cipher->BLOCK_SIZE); - cipher->decrypt(buffer); - xor_buf(buffer, tweak2, cipher->BLOCK_SIZE); + xor_buf(temp, tweak_copy, cipher->BLOCK_SIZE); + cipher->decrypt(temp); + xor_buf(temp, tweak_copy, cipher->BLOCK_SIZE); - for(u32bit i = 0; i != position - cipher->BLOCK_SIZE; ++i) - std::swap(buffer[i], buffer[i + cipher->BLOCK_SIZE]); + for(u32bit i = 0; i != length - cipher->BLOCK_SIZE; ++i) + std::swap(temp[i], temp[i + cipher->BLOCK_SIZE]); - xor_buf(buffer, tweak, cipher->BLOCK_SIZE); - cipher->decrypt(buffer); - xor_buf(buffer, tweak, cipher->BLOCK_SIZE); + xor_buf(temp, tweak, cipher->BLOCK_SIZE); + cipher->decrypt(temp); + xor_buf(temp, tweak, cipher->BLOCK_SIZE); - send(buffer, position); + send(temp, length); } - position = 0; + buffer_reset(); } } diff --git a/src/filters/modes/xts/xts.h b/src/filters/modes/xts/xts.h index 9badd3666..a01b1da1d 100644 --- a/src/filters/modes/xts/xts.h +++ b/src/filters/modes/xts/xts.h @@ -8,15 +8,17 @@ #ifndef BOTAN_XTS_H__ #define BOTAN_XTS_H__ -#include <botan/key_filt.h> #include <botan/block_cipher.h> +#include <botan/key_filt.h> +#include <botan/buf_filt.h> namespace Botan { /* * XTS Encryption */ -class BOTAN_DLL XTS_Encryption : public Keyed_Filter +class BOTAN_DLL XTS_Encryption : public Keyed_Filter, + private Buffered_Filter { public: void set_key(const SymmetricKey& key); @@ -37,19 +39,20 @@ class BOTAN_DLL XTS_Encryption : public Keyed_Filter private: void write(const byte[], u32bit); void end_msg(); - void encrypt(const byte block[]); + + void buffered_block(const byte input[], u32bit input_length); + void buffered_final(const byte input[], u32bit input_length); BlockCipher* cipher; BlockCipher* cipher2; SecureVector<byte> tweak; - SecureVector<byte> buffer; - u32bit position; }; /* * XTS Decryption */ -class BOTAN_DLL XTS_Decryption : public Keyed_Filter +class BOTAN_DLL XTS_Decryption : public Keyed_Filter, + private Buffered_Filter { public: void set_key(const SymmetricKey& key); @@ -65,16 +68,18 @@ class BOTAN_DLL XTS_Decryption : public Keyed_Filter XTS_Decryption(BlockCipher* ciph, const SymmetricKey& key, const InitializationVector& iv); + + ~XTS_Decryption() { delete cipher; delete cipher2; } private: void write(const byte[], u32bit); void end_msg(); - void decrypt(const byte[]); + + void buffered_block(const byte input[], u32bit input_length); + void buffered_final(const byte input[], u32bit input_length); BlockCipher* cipher; BlockCipher* cipher2; SecureVector<byte> tweak; - SecureVector<byte> buffer; - u32bit position; }; } diff --git a/src/filters/out_buf.cpp b/src/filters/out_buf.cpp index 80189eb3c..e3ea0cfb5 100644 --- a/src/filters/out_buf.cpp +++ b/src/filters/out_buf.cpp @@ -6,7 +6,7 @@ */ #include <botan/internal/out_buf.h> -#include <botan/internal/secqueue.h> +#include <botan/secqueue.h> namespace Botan { diff --git a/src/filters/pipe.cpp b/src/filters/pipe.cpp index 80b6f27aa..77e4ae283 100644 --- a/src/filters/pipe.cpp +++ b/src/filters/pipe.cpp @@ -7,21 +7,11 @@ #include <botan/pipe.h> #include <botan/internal/out_buf.h> -#include <botan/internal/secqueue.h> +#include <botan/secqueue.h> #include <botan/parsing.h> namespace Botan { -/* -* Constructor for Invalid_Message_Number -*/ -Pipe::Invalid_Message_Number::Invalid_Message_Number(const std::string& where, - message_id msg) - { - set_msg("Pipe::" + where + ": Invalid message number " + - to_string(msg)); - } - namespace { /* diff --git a/src/filters/pipe.h b/src/filters/pipe.h index ba17e7e68..9af21a13f 100644 --- a/src/filters/pipe.h +++ b/src/filters/pipe.h @@ -28,10 +28,12 @@ class BOTAN_DLL Pipe : public DataSource public: typedef u32bit message_id; - class BOTAN_DLL Invalid_Message_Number : public Invalid_Argument + struct BOTAN_DLL Invalid_Message_Number : public Invalid_Argument { - public: - Invalid_Message_Number(const std::string&, message_id); + Invalid_Message_Number(const std::string& where, message_id msg) : + Invalid_Argument("Pipe::" + where + ": Invalid message number " + + to_string(msg)) + {} }; static const message_id LAST_MESSAGE; diff --git a/src/filters/pipe_rw.cpp b/src/filters/pipe_rw.cpp index 756a1cf09..20119c75b 100644 --- a/src/filters/pipe_rw.cpp +++ b/src/filters/pipe_rw.cpp @@ -7,7 +7,7 @@ #include <botan/pipe.h> #include <botan/internal/out_buf.h> -#include <botan/internal/secqueue.h> +#include <botan/secqueue.h> namespace Botan { @@ -34,7 +34,7 @@ Pipe::message_id Pipe::get_message_no(const std::string& func_name, void Pipe::write(const byte input[], u32bit length) { if(!inside_msg) - throw Exception("Cannot write to a Pipe while it is not processing"); + throw Invalid_State("Cannot write to a Pipe while it is not processing"); pipe->write(input, length); } diff --git a/src/filters/pk_filts/pk_filts.cpp b/src/filters/pk_filts/pk_filts.cpp index d604436e0..05b45227f 100644 --- a/src/filters/pk_filts/pk_filts.cpp +++ b/src/filters/pk_filts/pk_filts.cpp @@ -73,7 +73,7 @@ void PK_Verifier_Filter::write(const byte input[], u32bit length) void PK_Verifier_Filter::end_msg() { if(signature.empty()) - throw Exception("PK_Verifier_Filter: No signature to check against"); + throw Invalid_State("PK_Verifier_Filter: No signature to check against"); bool is_valid = verifier->check_signature(signature, signature.size()); send((is_valid ? 1 : 0)); } diff --git a/src/filters/secqueue.cpp b/src/filters/secqueue.cpp index 74897805c..f63ef898c 100644 --- a/src/filters/secqueue.cpp +++ b/src/filters/secqueue.cpp @@ -5,7 +5,7 @@ * Distributed under the terms of the Botan license */ -#include <botan/internal/secqueue.h> +#include <botan/secqueue.h> #include <algorithm> namespace Botan { diff --git a/src/filters/secqueue.h b/src/filters/secqueue.h index 75f650030..fc1fc213a 100644 --- a/src/filters/secqueue.h +++ b/src/filters/secqueue.h @@ -16,7 +16,7 @@ namespace Botan { /* * SecureQueue */ -class SecureQueue : public Fanout_Filter, public DataSource +class BOTAN_DLL SecureQueue : public Fanout_Filter, public DataSource { public: void write(const byte[], u32bit); diff --git a/src/filters/zlib/zlib.cpp b/src/filters/zlib/zlib.cpp index 246e32924..171caa73f 100644 --- a/src/filters/zlib/zlib.cpp +++ b/src/filters/zlib/zlib.cpp @@ -95,7 +95,7 @@ void Zlib_Compression::start_msg() clear(); zlib = new Zlib_Stream; if(deflateInit(&(zlib->stream), level) != Z_OK) - throw Exception("Zlib_Compression: Memory allocation error"); + throw Memory_Exhaustion(); } /* @@ -187,7 +187,7 @@ void Zlib_Decompression::start_msg() clear(); zlib = new Zlib_Stream; if(inflateInit(&(zlib->stream)) != Z_OK) - throw Exception("Zlib_Decompression: Memory allocation error"); + throw Memory_Exhaustion(); } /* @@ -215,11 +215,12 @@ void Zlib_Decompression::write(const byte input_arr[], u32bit length) clear(); if(rc == Z_DATA_ERROR) throw Decoding_Error("Zlib_Decompression: Data integrity error"); - if(rc == Z_NEED_DICT) + else if(rc == Z_NEED_DICT) throw Decoding_Error("Zlib_Decompression: Need preset dictionary"); - if(rc == Z_MEM_ERROR) - throw Exception("Zlib_Decompression: Memory allocation error"); - throw Exception("Zlib_Decompression: Unknown decompress error"); + else if(rc == Z_MEM_ERROR) + throw Memory_Exhaustion(); + else + throw std::runtime_error("Zlib decompression: Unknown error"); } send(buffer.begin(), buffer.size() - zlib->stream.avail_out); @@ -258,7 +259,7 @@ void Zlib_Decompression::end_msg() if(rc != Z_OK && rc != Z_STREAM_END) { clear(); - throw Exception("Zlib_Decompression: Error finalizing decompression"); + throw Decoding_Error("Zlib_Decompression: Error finalizing"); } send(buffer.begin(), buffer.size() - zlib->stream.avail_out); diff --git a/src/hash/md4/md4.h b/src/hash/md4/md4.h index 0b76a70e4..0bff5a4ce 100644 --- a/src/hash/md4/md4.h +++ b/src/hash/md4/md4.h @@ -27,7 +27,7 @@ class BOTAN_DLL MD4 : public MDx_HashFunction void hash_old(const byte[]); void copy_out(byte[]); - SecureBuffer<u32bit, 48> M; + SecureBuffer<u32bit, 16> M; SecureBuffer<u32bit, 4> digest; }; diff --git a/src/hash/md4_ia32/md4_ia32.cpp b/src/hash/md4_ia32/md4_ia32.cpp index 12fe71da4..8a60d8f0e 100644 --- a/src/hash/md4_ia32/md4_ia32.cpp +++ b/src/hash/md4_ia32/md4_ia32.cpp @@ -6,7 +6,6 @@ */ #include <botan/md4_ia32.h> -#include <botan/loadstor.h> namespace Botan { diff --git a/src/hash/md5_ia32/md5_ia32.cpp b/src/hash/md5_ia32/md5_ia32.cpp index 443569b3b..affd0b8f7 100644 --- a/src/hash/md5_ia32/md5_ia32.cpp +++ b/src/hash/md5_ia32/md5_ia32.cpp @@ -6,7 +6,6 @@ */ #include <botan/md5_ia32.h> -#include <botan/loadstor.h> namespace Botan { diff --git a/src/hash/sha1/sha160.cpp b/src/hash/sha1/sha160.cpp index ff44593f6..1ad08d483 100644 --- a/src/hash/sha1/sha160.cpp +++ b/src/hash/sha1/sha160.cpp @@ -134,8 +134,8 @@ void SHA_160::compress_n(const byte input[], u32bit blocks) */ void SHA_160::copy_out(byte output[]) { - for(u32bit j = 0; j != OUTPUT_LENGTH; j += 4) - store_be(digest[j/4], output + j); + for(u32bit i = 0; i != OUTPUT_LENGTH; i += 4) + store_be(digest[i/4], output + i); } /* diff --git a/src/hash/sha1_ia32/sha1_ia32.cpp b/src/hash/sha1_ia32/sha1_ia32.cpp index 0fa0b6bf2..6eecdab56 100644 --- a/src/hash/sha1_ia32/sha1_ia32.cpp +++ b/src/hash/sha1_ia32/sha1_ia32.cpp @@ -6,7 +6,6 @@ */ #include <botan/sha1_ia32.h> -#include <botan/loadstor.h> namespace Botan { diff --git a/src/hash/tiger/tiger.cpp b/src/hash/tiger/tiger.cpp index 4f4d4dc83..3013ab38e 100644 --- a/src/hash/tiger/tiger.cpp +++ b/src/hash/tiger/tiger.cpp @@ -12,6 +12,23 @@ namespace Botan { +namespace { + +/* +* Tiger Mixing Function +*/ +inline void mix(u64bit X[8]) + { + X[0] -= X[7] ^ 0xA5A5A5A5A5A5A5A5; X[1] ^= X[0]; + X[2] += X[1]; X[3] -= X[2] ^ ((~X[1]) << 19); X[4] ^= X[3]; + X[5] += X[4]; X[6] -= X[5] ^ ((~X[4]) >> 23); X[7] ^= X[6]; + X[0] += X[7]; X[1] -= X[0] ^ ((~X[7]) << 19); X[2] ^= X[1]; + X[3] += X[2]; X[4] -= X[3] ^ ((~X[2]) >> 23); X[5] ^= X[4]; + X[6] += X[5]; X[7] -= X[6] ^ 0x0123456789ABCDEF; + } + +} + /* * Tiger Compression Function */ @@ -114,19 +131,6 @@ void Tiger::pass(u64bit& A, u64bit& B, u64bit& C, u64bit X[8], byte mul) } /* -* Tiger Mixing Function -*/ -void Tiger::mix(u64bit X[8]) - { - X[0] -= X[7] ^ 0xA5A5A5A5A5A5A5A5; X[1] ^= X[0]; - X[2] += X[1]; X[3] -= X[2] ^ ((~X[1]) << 19); X[4] ^= X[3]; - X[5] += X[4]; X[6] -= X[5] ^ ((~X[4]) >> 23); X[7] ^= X[6]; - X[0] += X[7]; X[1] -= X[0] ^ ((~X[7]) << 19); X[2] ^= X[1]; - X[3] += X[2]; X[4] -= X[3] ^ ((~X[2]) >> 23); X[5] ^= X[4]; - X[6] += X[5]; X[7] -= X[6] ^ 0x0123456789ABCDEF; - } - -/* * Clear memory of sensitive data */ void Tiger::clear() diff --git a/src/hash/tiger/tiger.h b/src/hash/tiger/tiger.h index 86ddcd270..20dcf99ff 100644 --- a/src/hash/tiger/tiger.h +++ b/src/hash/tiger/tiger.h @@ -27,7 +27,6 @@ class BOTAN_DLL Tiger : public MDx_HashFunction void copy_out(byte[]); static void pass(u64bit&, u64bit&, u64bit&, u64bit[8], byte); - static void mix(u64bit[8]); static const u64bit SBOX1[256]; static const u64bit SBOX2[256]; diff --git a/src/kdf/kdf2/kdf2.cpp b/src/kdf/kdf2/kdf2.cpp index 167f64436..7cc1d7416 100644 --- a/src/kdf/kdf2/kdf2.cpp +++ b/src/kdf/kdf2/kdf2.cpp @@ -6,7 +6,7 @@ */ #include <botan/kdf2.h> -#include <botan/loadstor.h> +#include <botan/get_byte.h> namespace Botan { diff --git a/src/kdf/mgf1/mgf1.cpp b/src/kdf/mgf1/mgf1.cpp index a8c7e5fa3..340e87a7c 100644 --- a/src/kdf/mgf1/mgf1.cpp +++ b/src/kdf/mgf1/mgf1.cpp @@ -6,7 +6,7 @@ */ #include <botan/mgf1.h> -#include <botan/loadstor.h> +#include <botan/get_byte.h> #include <botan/exceptn.h> #include <botan/internal/xor_buf.h> #include <algorithm> diff --git a/src/libstate/libstate.cpp b/src/libstate/libstate.cpp index 9ac15e381..919b12494 100644 --- a/src/libstate/libstate.cpp +++ b/src/libstate/libstate.cpp @@ -316,8 +316,7 @@ void Library_State::initialize(bool thread_safe) m_algorithm_factory = new Algorithm_Factory(engines, *mutex_factory); #if defined(BOTAN_HAS_SELFTESTS) - if(!passes_self_tests(algorithm_factory())) - throw Self_Test_Failure("Startup self tests failed"); + confirm_startup_self_tests(algorithm_factory()); #endif } diff --git a/src/libstate/libstate.h b/src/libstate/libstate.h index a0421953e..d5c442214 100644 --- a/src/libstate/libstate.h +++ b/src/libstate/libstate.h @@ -18,6 +18,8 @@ namespace Botan { +class Mutex; + /* * Global State Container Base */ @@ -29,11 +31,28 @@ class BOTAN_DLL Library_State void initialize(bool thread_safe); + /** + * @return the global Algorithm_Factory + */ Algorithm_Factory& algorithm_factory(); - Allocator* get_allocator(const std::string& = "") const; - void add_allocator(Allocator*); - void set_default_allocator(const std::string&); + /** + * @param name the name of the allocator + * @return allocator matching this name, or NULL + */ + Allocator* get_allocator(const std::string& name = "") const; + + /** + * Add a new allocator to the list of available ones + * @param alloc the allocator to add + */ + void add_allocator(Allocator* alloc); + + /** + * Set the default allocator + * @param name the name of the allocator to use as the default + */ + void set_default_allocator(const std::string& name); /** * Get a parameter value as std::string. @@ -52,7 +71,8 @@ class BOTAN_DLL Library_State * @result true if the parameters value is set, * false otherwise */ - bool is_set(const std::string& section, const std::string& key) const; + bool is_set(const std::string& section, + const std::string& key) const; /** * Set a configuration parameter. @@ -62,8 +82,10 @@ class BOTAN_DLL Library_State * will be overwritten even if it is already set, otherwise * no existing values will be overwritten. */ - void set(const std::string& section, const std::string& key, - const std::string& value, bool overwrite = true); + void set(const std::string& section, + const std::string& key, + const std::string& value, + bool overwrite = true); /** * Get a parameters value out of the "conf" section ( @@ -77,23 +99,28 @@ class BOTAN_DLL Library_State * @param key the key of the option to set * @param value the value to set */ - void set_option(const std::string& key, const std::string& value); + void set_option(const std::string& key, + const std::string& value); /** * Add a parameter value to the "alias" section. * @param key the name of the parameter which shall have a new alias * @param value the new alias */ - void add_alias(const std::string&, const std::string&); + void add_alias(const std::string& key, + const std::string& value); /** * Resolve an alias. * @param alias the alias to resolve. * @return what the alias stands for */ - std::string deref_alias(const std::string&) const; + std::string deref_alias(const std::string& alias) const; - class Mutex* get_mutex() const; + /** + * @return a newly created Mutex (free with delete) + */ + Mutex* get_mutex() const; private: void load_default_config(); @@ -103,9 +130,9 @@ class BOTAN_DLL Library_State class Mutex_Factory* mutex_factory; std::map<std::string, std::string> config; - class Mutex* config_lock; + Mutex* config_lock; - class Mutex* allocator_lock; + Mutex* allocator_lock; std::map<std::string, Allocator*> alloc_factory; mutable Allocator* cached_default_allocator; std::vector<Allocator*> allocators; diff --git a/src/libstate/lookup.cpp b/src/libstate/lookup.cpp index 9016dbe6e..01f4a3d42 100644 --- a/src/libstate/lookup.cpp +++ b/src/libstate/lookup.cpp @@ -12,138 +12,34 @@ namespace Botan { /** -* Acquire a block cipher -*/ -const BlockCipher* retrieve_block_cipher(const std::string& algo_spec) - { - Algorithm_Factory& af = global_state().algorithm_factory(); - return af.prototype_block_cipher(algo_spec); - } - -/** -* Get a block cipher by name -*/ -BlockCipher* get_block_cipher(const std::string& algo_spec) - { - Algorithm_Factory& af = global_state().algorithm_factory(); - return af.make_block_cipher(algo_spec); - } - -/** -* Acquire a stream cipher -*/ -const StreamCipher* retrieve_stream_cipher(const std::string& algo_spec) - { - Algorithm_Factory& af = global_state().algorithm_factory(); - return af.prototype_stream_cipher(algo_spec); - } - -/** -* Get a stream cipher by name -*/ -StreamCipher* get_stream_cipher(const std::string& algo_spec) - { - Algorithm_Factory& af = global_state().algorithm_factory(); - return af.make_stream_cipher(algo_spec); - } - -/** -* Acquire a hash function -*/ -const HashFunction* retrieve_hash(const std::string& algo_spec) - { - Algorithm_Factory& af = global_state().algorithm_factory(); - return af.prototype_hash_function(algo_spec); - } - -/** -* Get a hash function by name -*/ -HashFunction* get_hash(const std::string& algo_spec) - { - Algorithm_Factory& af = global_state().algorithm_factory(); - return af.make_hash_function(algo_spec); - } - -/** -* Query if Botan has the named hash function -*/ -bool have_hash(const std::string& algo_spec) - { - Algorithm_Factory& af = global_state().algorithm_factory(); - return (af.prototype_hash_function(algo_spec) != 0); - } - -/** -* Acquire an authentication code -*/ -const MessageAuthenticationCode* retrieve_mac(const std::string& algo_spec) - { - Algorithm_Factory& af = global_state().algorithm_factory(); - return af.prototype_mac(algo_spec); - } - -/** -* Get a MAC by name -*/ -MessageAuthenticationCode* get_mac(const std::string& algo_spec) - { - Algorithm_Factory& af = global_state().algorithm_factory(); - return af.make_mac(algo_spec); - } - -/** -* Query if Botan has the named MAC -*/ -bool have_mac(const std::string& algo_spec) - { - Algorithm_Factory& af = global_state().algorithm_factory(); - return (af.prototype_mac(algo_spec) != 0); - } - -/** * Query if an algorithm exists */ bool have_algorithm(const std::string& name) { - if(retrieve_block_cipher(name)) + Algorithm_Factory& af = global_state().algorithm_factory(); + + if(af.prototype_block_cipher(name)) return true; - if(retrieve_stream_cipher(name)) + if(af.prototype_stream_cipher(name)) return true; - if(retrieve_hash(name)) + if(af.prototype_hash_function(name)) return true; - if(retrieve_mac(name)) + if(af.prototype_mac(name)) return true; return false; } /** -* Query if Botan has the named block cipher -*/ -bool have_block_cipher(const std::string& name) - { - return (retrieve_block_cipher(name) != 0); - } - -/** -* Query if Botan has the named stream cipher -*/ -bool have_stream_cipher(const std::string& name) - { - return (retrieve_stream_cipher(name) != 0); - } - -/** * Query the block size of a cipher or hash */ u32bit block_size_of(const std::string& name) { - const BlockCipher* cipher = retrieve_block_cipher(name); - if(cipher) + Algorithm_Factory& af = global_state().algorithm_factory(); + + if(const BlockCipher* cipher = af.prototype_block_cipher(name)) return cipher->BLOCK_SIZE; - const HashFunction* hash = retrieve_hash(name); - if(hash) + if(const HashFunction* hash = af.prototype_hash_function(name)) return hash->HASH_BLOCK_SIZE; throw Algorithm_Not_Found(name); @@ -154,12 +50,12 @@ u32bit block_size_of(const std::string& name) */ u32bit output_length_of(const std::string& name) { - const HashFunction* hash = retrieve_hash(name); - if(hash) + Algorithm_Factory& af = global_state().algorithm_factory(); + + if(const HashFunction* hash = af.prototype_hash_function(name)) return hash->OUTPUT_LENGTH; - const MessageAuthenticationCode* mac = retrieve_mac(name); - if(mac) + if(const MessageAuthenticationCode* mac = af.prototype_mac(name)) return mac->OUTPUT_LENGTH; throw Algorithm_Not_Found(name); @@ -170,16 +66,15 @@ u32bit output_length_of(const std::string& name) */ bool valid_keylength_for(u32bit key_len, const std::string& name) { - const BlockCipher* bc = retrieve_block_cipher(name); - if(bc) + Algorithm_Factory& af = global_state().algorithm_factory(); + + if(const BlockCipher* bc = af.prototype_block_cipher(name)) return bc->valid_keylength(key_len); - const StreamCipher* sc = retrieve_stream_cipher(name); - if(sc) + if(const StreamCipher* sc = af.prototype_stream_cipher(name)) return sc->valid_keylength(key_len); - const MessageAuthenticationCode* mac = retrieve_mac(name); - if(mac) + if(const MessageAuthenticationCode* mac = af.prototype_mac(name)) return mac->valid_keylength(key_len); throw Algorithm_Not_Found(name); @@ -190,16 +85,15 @@ bool valid_keylength_for(u32bit key_len, const std::string& name) */ u32bit min_keylength_of(const std::string& name) { - const BlockCipher* bc = retrieve_block_cipher(name); - if(bc) + Algorithm_Factory& af = global_state().algorithm_factory(); + + if(const BlockCipher* bc = af.prototype_block_cipher(name)) return bc->MINIMUM_KEYLENGTH; - const StreamCipher* sc = retrieve_stream_cipher(name); - if(sc) + if(const StreamCipher* sc = af.prototype_stream_cipher(name)) return sc->MINIMUM_KEYLENGTH; - const MessageAuthenticationCode* mac = retrieve_mac(name); - if(mac) + if(const MessageAuthenticationCode* mac = af.prototype_mac(name)) return mac->MINIMUM_KEYLENGTH; throw Algorithm_Not_Found(name); @@ -210,16 +104,15 @@ u32bit min_keylength_of(const std::string& name) */ u32bit max_keylength_of(const std::string& name) { - const BlockCipher* bc = retrieve_block_cipher(name); - if(bc) + Algorithm_Factory& af = global_state().algorithm_factory(); + + if(const BlockCipher* bc = af.prototype_block_cipher(name)) return bc->MAXIMUM_KEYLENGTH; - const StreamCipher* sc = retrieve_stream_cipher(name); - if(sc) + if(const StreamCipher* sc = af.prototype_stream_cipher(name)) return sc->MAXIMUM_KEYLENGTH; - const MessageAuthenticationCode* mac = retrieve_mac(name); - if(mac) + if(const MessageAuthenticationCode* mac = af.prototype_mac(name)) return mac->MAXIMUM_KEYLENGTH; throw Algorithm_Not_Found(name); @@ -230,16 +123,15 @@ u32bit max_keylength_of(const std::string& name) */ u32bit keylength_multiple_of(const std::string& name) { - const BlockCipher* bc = retrieve_block_cipher(name); - if(bc) + Algorithm_Factory& af = global_state().algorithm_factory(); + + if(const BlockCipher* bc = af.prototype_block_cipher(name)) return bc->KEYLENGTH_MULTIPLE; - const StreamCipher* sc = retrieve_stream_cipher(name); - if(sc) + if(const StreamCipher* sc = af.prototype_stream_cipher(name)) return sc->KEYLENGTH_MULTIPLE; - const MessageAuthenticationCode* mac = retrieve_mac(name); - if(mac) + if(const MessageAuthenticationCode* mac = af.prototype_mac(name)) return mac->KEYLENGTH_MULTIPLE; throw Algorithm_Not_Found(name); @@ -257,8 +149,7 @@ Keyed_Filter* get_cipher(const std::string& algo_spec, while(Engine* engine = i.next()) { - Keyed_Filter* algo = engine->get_cipher(algo_spec, direction, af); - if(algo) + if(Keyed_Filter* algo = engine->get_cipher(algo_spec, direction, af)) return algo; } diff --git a/src/libstate/lookup.h b/src/libstate/lookup.h index 0f48dddfb..5f10bb3f8 100644 --- a/src/libstate/lookup.h +++ b/src/libstate/lookup.h @@ -8,17 +8,14 @@ #ifndef BOTAN_LOOKUP_H__ #define BOTAN_LOOKUP_H__ -#include <botan/block_cipher.h> -#include <botan/stream_cipher.h> -#include <botan/hash.h> -#include <botan/mac.h> -#include <botan/s2k.h> - +#include <botan/libstate.h> +#include <botan/engine.h> #include <botan/filters.h> #include <botan/mode_pad.h> #include <botan/kdf.h> #include <botan/eme.h> #include <botan/emsa.h> +#include <botan/s2k.h> namespace Botan { @@ -28,59 +25,90 @@ namespace Botan { // NOTE: these functions return internally stored objects, library // retains ownership -BOTAN_DLL const BlockCipher* -retrieve_block_cipher(const std::string&); - -BOTAN_DLL const StreamCipher* -retrieve_stream_cipher(const std::string&); - -BOTAN_DLL const HashFunction* -retrieve_hash(const std::string&); - -BOTAN_DLL const MessageAuthenticationCode* -retrieve_mac(const std::string&); +inline const BlockCipher* +retrieve_block_cipher(const std::string& algo_spec) + { + Algorithm_Factory& af = global_state().algorithm_factory(); + return af.prototype_block_cipher(algo_spec); + } + +inline const StreamCipher* +retrieve_stream_cipher(const std::string& algo_spec) + { + Algorithm_Factory& af = global_state().algorithm_factory(); + return af.prototype_stream_cipher(algo_spec); + } + +inline const HashFunction* +retrieve_hash(const std::string& algo_spec) + { + Algorithm_Factory& af = global_state().algorithm_factory(); + return af.prototype_hash_function(algo_spec); + } + +inline const MessageAuthenticationCode* +retrieve_mac(const std::string& algo_spec) + { + Algorithm_Factory& af = global_state().algorithm_factory(); + return af.prototype_mac(algo_spec); + } /* * Get an algorithm object +* NOTE: these functions create and return new objects, letting the +* caller assume ownership of them */ -// NOTE: these functions create and return new objects, letting the -// caller assume ownership of them /** * Block cipher factory method. * @param algo_spec the name of the desired block cipher * @return a pointer to the block cipher object */ -BOTAN_DLL BlockCipher* get_block_cipher(const std::string& name); - +inline BlockCipher* get_block_cipher(const std::string& algo_spec) + { + Algorithm_Factory& af = global_state().algorithm_factory(); + return af.make_block_cipher(algo_spec); + } /** * Stream cipher factory method. * @param algo_spec the name of the desired stream cipher * @return a pointer to the stream cipher object */ -BOTAN_DLL StreamCipher* get_stream_cipher(const std::string& name); +inline StreamCipher* get_stream_cipher(const std::string& algo_spec) + { + Algorithm_Factory& af = global_state().algorithm_factory(); + return af.make_stream_cipher(algo_spec); + } /** * Hash function factory method. * @param algo_spec the name of the desired hash function * @return a pointer to the hash function object */ -BOTAN_DLL HashFunction* get_hash(const std::string& name); +inline HashFunction* get_hash(const std::string& algo_spec) + { + Algorithm_Factory& af = global_state().algorithm_factory(); + return af.make_hash_function(algo_spec); + } /** * MAC factory method. * @param algo_spec the name of the desired MAC * @return a pointer to the MAC object */ -BOTAN_DLL MessageAuthenticationCode* get_mac(const std::string& name); +inline MessageAuthenticationCode* get_mac(const std::string& algo_spec) + { + Algorithm_Factory& af = global_state().algorithm_factory(); + return af.make_mac(algo_spec); + } /** * String to key algorithm factory method. * @param name the name of the desired string to key (S2K) algorithm * @return a pointer to the string to key algorithm object */ -BOTAN_DLL S2K* get_s2k(const std::string& name); +BOTAN_DLL S2K* get_s2k(const std::string& algo_spec); /* * Get an EMSA/EME/KDF/MGF function @@ -93,7 +121,7 @@ BOTAN_DLL S2K* get_s2k(const std::string& name); * @param name the name of the EME to create * @return a pointer to the desired EME object */ -BOTAN_DLL EME* get_eme(const std::string& name); +BOTAN_DLL EME* get_eme(const std::string& algo_spec); /** * Factory method for EMSA (message-encoding methods for signatures @@ -101,14 +129,14 @@ BOTAN_DLL EME* get_eme(const std::string& name); * @param name the name of the EME to create * @return a pointer to the desired EME object */ -BOTAN_DLL EMSA* get_emsa(const std::string& name); +BOTAN_DLL EMSA* get_emsa(const std::string& algo_spec); /** * Factory method for KDF (key derivation function) * @param name the name of the KDF to create * @return a pointer to the desired KDF object */ -BOTAN_DLL KDF* get_kdf(const std::string& name); +BOTAN_DLL KDF* get_kdf(const std::string& algo_spec); /* * Get a cipher object @@ -120,8 +148,8 @@ BOTAN_DLL KDF* get_kdf(const std::string& name); * @param key the key to be used for encryption/decryption performed by * the filter * @param iv the initialization vector to be used -* @param direction determines whether the filter will be an encrypting or decrypting -* filter +* @param direction determines whether the filter will be an encrypting +* or decrypting filter * @return a pointer to the encryption or decryption filter */ BOTAN_DLL Keyed_Filter* get_cipher(const std::string& name, @@ -133,8 +161,8 @@ BOTAN_DLL Keyed_Filter* get_cipher(const std::string& name, * @param algo_spec the name of the desired cipher * @param key the key to be used for encryption/decryption performed by * the filter -* @param direction determines whether the filter will be an encrypting or decrypting -* filter +* @param direction determines whether the filter will be an encrypting +* or decrypting filter * @return a pointer to the encryption or decryption filter */ BOTAN_DLL Keyed_Filter* get_cipher(const std::string& name, @@ -156,35 +184,51 @@ BOTAN_DLL Keyed_Filter* get_cipher(const std::string& name, Cipher_Dir dir); * @param name the name of the algorithm to check for * @return true if the algorithm exists, false otherwise */ -BOTAN_DLL bool have_algorithm(const std::string& name); +BOTAN_DLL bool have_algorithm(const std::string& algo_spec); /** * Check if a block cipher algorithm exists. * @param name the name of the algorithm to check for * @return true if the algorithm exists, false otherwise */ -BOTAN_DLL bool have_block_cipher(const std::string& name); +inline bool have_block_cipher(const std::string& algo_spec) + { + Algorithm_Factory& af = global_state().algorithm_factory(); + return (af.prototype_block_cipher(algo_spec) != 0); + } /** * Check if a stream cipher algorithm exists. * @param name the name of the algorithm to check for * @return true if the algorithm exists, false otherwise */ -BOTAN_DLL bool have_stream_cipher(const std::string& name); +inline bool have_stream_cipher(const std::string& algo_spec) + { + Algorithm_Factory& af = global_state().algorithm_factory(); + return (af.prototype_stream_cipher(algo_spec) != 0); + } /** * Check if a hash algorithm exists. * @param algo_spec the name of the algorithm to check for * @return true if the algorithm exists, false otherwise */ -BOTAN_DLL bool have_hash(const std::string& name); +inline bool have_hash(const std::string& algo_spec) + { + Algorithm_Factory& af = global_state().algorithm_factory(); + return (af.prototype_hash_function(algo_spec) != 0); + } /** * Check if a MAC algorithm exists. * @param algo_spec the name of the algorithm to check for * @return true if the algorithm exists, false otherwise */ -BOTAN_DLL bool have_mac(const std::string& name); +inline bool have_mac(const std::string& algo_spec) + { + Algorithm_Factory& af = global_state().algorithm_factory(); + return (af.prototype_mac(algo_spec) != 0); + } /* * Query information about an algorithm @@ -195,14 +239,14 @@ BOTAN_DLL bool have_mac(const std::string& name); * @param name the name of the algorithm * @return the block size of the specified algorithm */ -BOTAN_DLL u32bit block_size_of(const std::string& name); +BOTAN_DLL u32bit block_size_of(const std::string& algo_spec); /** * Find out the output length of a certain symmetric algorithm. * @param name the name of the algorithm * @return the output length of the specified algorithm */ -BOTAN_DLL u32bit output_length_of(const std::string& name); +BOTAN_DLL u32bit output_length_of(const std::string& algo_spec); /** * Find out the whether a certain key length is allowd for a given @@ -211,28 +255,29 @@ BOTAN_DLL u32bit output_length_of(const std::string& name); * @param name the name of the algorithm * @return true if the key length is valid for that algorithm, false otherwise */ -BOTAN_DLL bool valid_keylength_for(u32bit keylen, const std::string& name); +BOTAN_DLL bool valid_keylength_for(u32bit keylen, + const std::string& algo_spec); /** * Find out the minimum key size of a certain symmetric algorithm. * @param name the name of the algorithm * @return the minimum key length of the specified algorithm */ -BOTAN_DLL u32bit min_keylength_of(const std::string& name); +BOTAN_DLL u32bit min_keylength_of(const std::string& algo_spec); /** * Find out the maximum key size of a certain symmetric algorithm. * @param name the name of the algorithm * @return the maximum key length of the specified algorithm */ -BOTAN_DLL u32bit max_keylength_of(const std::string& name); +BOTAN_DLL u32bit max_keylength_of(const std::string& algo_spec); /** * Find out the size any valid key is a multiple of for a certain algorithm. * @param name the name of the algorithm * @return the size any valid key is a multiple of */ -BOTAN_DLL u32bit keylength_multiple_of(const std::string& name); +BOTAN_DLL u32bit keylength_multiple_of(const std::string& algo_spec); } diff --git a/src/libstate/policy.cpp b/src/libstate/policy.cpp index 45c99e674..3e9c8e122 100644 --- a/src/libstate/policy.cpp +++ b/src/libstate/policy.cpp @@ -48,6 +48,8 @@ void set_default_oids(Library_State& config) add_oid(config, "2.16.840.1.101.3.4.1.2", "AES-128/CBC"); add_oid(config, "2.16.840.1.101.3.4.1.22", "AES-192/CBC"); add_oid(config, "2.16.840.1.101.3.4.1.42", "AES-256/CBC"); + add_oid(config, "1.2.410.200004.1.4", "SEED/CBC"); // RFC 4010 + add_oid(config, "1.3.6.1.4.1.25258.3.1", "Serpent/CBC"); /* Hash Functions */ add_oid(config, "1.2.840.113549.2.5", "MD5"); @@ -59,6 +61,13 @@ void set_default_oids(Library_State& config) add_oid(config, "2.16.840.1.101.3.4.2.2", "SHA-384"); add_oid(config, "2.16.840.1.101.3.4.2.3", "SHA-512"); + /* MACs */ + add_oid(config, "1.2.840.113549.2.7", "HMAC(SHA-1)"); + add_oid(config, "1.2.840.113549.2.8", "HMAC(SHA-224)"); + add_oid(config, "1.2.840.113549.2.9", "HMAC(SHA-256)"); + add_oid(config, "1.2.840.113549.2.10", "HMAC(SHA-384)"); + add_oid(config, "1.2.840.113549.2.11", "HMAC(SHA-512)"); + /* Key Wrap */ add_oid(config, "1.2.840.113549.1.9.16.3.6", "KeyWrap.TripleDES"); add_oid(config, "1.2.840.113549.1.9.16.3.7", "KeyWrap.RC2"); diff --git a/src/libstate/scan_name.cpp b/src/libstate/scan_name.cpp index 9e046e8ea..eccb15565 100644 --- a/src/libstate/scan_name.cpp +++ b/src/libstate/scan_name.cpp @@ -63,7 +63,7 @@ deref_aliases(const std::pair<u32bit, std::string>& in) } -SCAN_Name::SCAN_Name(const std::string& algo_spec) +SCAN_Name::SCAN_Name(std::string algo_spec) { orig_algo_spec = algo_spec; @@ -71,6 +71,10 @@ SCAN_Name::SCAN_Name(const std::string& algo_spec) u32bit level = 0; std::pair<u32bit, std::string> accum = std::make_pair(level, ""); + std::string decoding_error = "Bad SCAN name '" + algo_spec + "': "; + + algo_spec = global_state().deref_alias(algo_spec); + for(u32bit i = 0; i != algo_spec.size(); ++i) { char c = algo_spec[i]; @@ -82,7 +86,7 @@ SCAN_Name::SCAN_Name(const std::string& algo_spec) else if(c == ')') { if(level == 0) - throw Decoding_Error("Bad SCAN name " + algo_spec); + throw Decoding_Error(decoding_error + "Mismatched parens"); --level; } @@ -102,8 +106,11 @@ SCAN_Name::SCAN_Name(const std::string& algo_spec) if(accum.second != "") name.push_back(deref_aliases(accum)); - if(level != 0 || name.size() == 0) - throw Decoding_Error("Bad SCAN name " + algo_spec); + if(level != 0) + throw Decoding_Error(decoding_error + "Missing close paren"); + + if(name.size() == 0) + throw Decoding_Error(decoding_error + "Empty name"); alg_name = name[0].second; @@ -146,7 +153,7 @@ std::string SCAN_Name::algo_name_and_args() const std::string SCAN_Name::arg(u32bit i) const { if(i >= arg_count()) - throw std::range_error("SCAN_Name::argument"); + throw std::range_error("SCAN_Name::argument - i out of range"); return args[i]; } diff --git a/src/libstate/scan_name.h b/src/libstate/scan_name.h index 7992d7498..4350dca86 100644 --- a/src/libstate/scan_name.h +++ b/src/libstate/scan_name.h @@ -23,9 +23,9 @@ class BOTAN_DLL SCAN_Name { public: /** - @param algo_spec A SCAN name + @param algo_spec A SCAN-format name */ - SCAN_Name(const std::string& algo_spec); + SCAN_Name(std::string algo_spec); /** @return the original input string diff --git a/src/math/bigint/bigint.cpp b/src/math/bigint/bigint.cpp index 70bb11a83..09ac2a75d 100644 --- a/src/math/bigint/bigint.cpp +++ b/src/math/bigint/bigint.cpp @@ -7,7 +7,7 @@ #include <botan/bigint.h> #include <botan/internal/mp_core.h> -#include <botan/loadstor.h> +#include <botan/get_byte.h> #include <botan/parsing.h> #include <botan/internal/rounding.h> diff --git a/src/math/gfpmath/curve_gfp.cpp b/src/math/gfpmath/curve_gfp.cpp index 3cdb08a65..e6e69ab0f 100644 --- a/src/math/gfpmath/curve_gfp.cpp +++ b/src/math/gfpmath/curve_gfp.cpp @@ -2,7 +2,7 @@ * Elliptic curves over GF(p) * * (C) 2007 Martin Doering, Christoph Ludwig, Falko Strenzke -* 2008 Jack Lloyd +* 2008-2010 Jack Lloyd * * Distributed under the terms of the Botan license */ @@ -14,147 +14,40 @@ namespace Botan { -void CurveGFp::set_shrd_mod(const std::tr1::shared_ptr<GFpModulus> mod) - { - mp_mod = mod; - mA.turn_off_sp_red_mul();// m.m. is not needed, must be trf. back - mB.turn_off_sp_red_mul();// m.m. is not needed, must be trf. back - //ok, above we destroy any evantually computated montg. mult. values, - // but that won't influence performance in usual applications - mA.set_shrd_mod(mod); - mB.set_shrd_mod(mod); - } - CurveGFp::CurveGFp(const GFpElement& a, const GFpElement& b, - const BigInt& p) - : mA(a), - mB(b) + const BigInt& p) : + modulus(p), mA(a), mB(b), + mres_a(mA), mres_b(mB), mres_one(p, 1) { - if(!((p == mA.get_p()) && (p == mB.get_p()))) - { + if(p != mA.get_p() || p != mB.get_p()) throw Invalid_Argument("could not construct curve: moduli of arguments differ"); - } - std::tr1::shared_ptr<GFpModulus> p_mod = std::tr1::shared_ptr<GFpModulus>(new GFpModulus(p)); - // the above is the creation of the GFpModuls object which will be shared point-wide - // (in the context of a point of course) - set_shrd_mod(p_mod); - } -// copy constructor -CurveGFp::CurveGFp(const CurveGFp& other) - : mA(other.get_a()), - mB(other.get_b()) - { - mp_mod = std::tr1::shared_ptr<GFpModulus>(new GFpModulus(*other.mp_mod)); - assert(mp_mod->p_equal_to(mA.get_p())); - assert(mp_mod->p_equal_to(mB.get_p())); - set_shrd_mod(mp_mod); - if(other.mp_mres_a.get()) - { - mp_mres_a = std::tr1::shared_ptr<GFpElement>(new GFpElement(*other.mp_mres_a)); - } - if(other.mp_mres_b.get()) - { - mp_mres_b = std::tr1::shared_ptr<GFpElement>(new GFpElement(*other.mp_mres_b)); - } - if(other.mp_mres_one.get()) - { - mp_mres_one = std::tr1::shared_ptr<GFpElement>(new GFpElement(*other.mp_mres_one)); - } - - } -// assignment operator -const CurveGFp& CurveGFp::operator=(const CurveGFp& other) - { - // for exception safety... - GFpElement a_tmp = other.mA; - GFpElement b_tmp = other.mB; - mA.swap(a_tmp); - mB.swap(b_tmp); - - std::tr1::shared_ptr<GFpModulus> p_mod = std::tr1::shared_ptr<GFpModulus>(new GFpModulus(*other.mp_mod)); - set_shrd_mod(p_mod); - - // exception safety note: no problem if we have a throw from here on... - if(other.mp_mres_a.get()) - { - mp_mres_a = std::tr1::shared_ptr<GFpElement>(new GFpElement(*other.mp_mres_a)); - } - if(other.mp_mres_b.get()) - { - mp_mres_b = std::tr1::shared_ptr<GFpElement>(new GFpElement(*other.mp_mres_b)); - } - if(other.mp_mres_one.get()) - { - mp_mres_one = std::tr1::shared_ptr<GFpElement>(new GFpElement(*other.mp_mres_one)); - } - return *this; - } - -// getters -const GFpElement& CurveGFp::get_a() const - { - return mA; - } + mres_a.turn_on_sp_red_mul(); + mres_a.get_mres(); -const GFpElement& CurveGFp::get_b() const - { - return mB; - } + mres_b.turn_on_sp_red_mul(); + mres_b.get_mres(); -const BigInt CurveGFp::get_p() const - { - assert(mp_mod.get() != 0); - return mp_mod->get_p(); + mres_one.turn_on_sp_red_mul(); + mres_one.get_mres(); } // swaps the states of *this and other, does not throw void CurveGFp::swap(CurveGFp& other) { - mA.swap(other.mA); - mB.swap(other.mB); - mp_mod.swap(other.mp_mod); - std::swap(mp_mres_a, other.mp_mres_a); - std::swap(mp_mres_b, other.mp_mres_b); - std::swap(mp_mres_one, other.mp_mres_one); - } - -GFpElement const CurveGFp::get_mres_a() const - { - if(mp_mres_a.get() == 0) - { - mp_mres_a = std::tr1::shared_ptr<GFpElement>(new GFpElement(mA)); - mp_mres_a->turn_on_sp_red_mul(); - mp_mres_a->get_mres(); - } - return GFpElement(*mp_mres_a); - } - -GFpElement const CurveGFp::get_mres_b() const - { - if(mp_mres_b.get() == 0) - { - mp_mres_b = std::tr1::shared_ptr<GFpElement>(new GFpElement(mB)); - mp_mres_b->turn_on_sp_red_mul(); - mp_mres_b->get_mres(); - } - return GFpElement(*mp_mres_b); - } - -std::tr1::shared_ptr<GFpElement const> const CurveGFp::get_mres_one() const - { - if(mp_mres_one.get() == 0) - { - mp_mres_one = std::tr1::shared_ptr<GFpElement>(new GFpElement(mp_mod->get_p(), 1)); - mp_mres_one->turn_on_sp_red_mul(); - mp_mres_one->get_mres(); - } - return mp_mres_one; + std::swap(mA, other.mA); + std::swap(mB, other.mB); + std::swap(modulus, other.modulus); + std::swap(mres_a, other.mres_a); + std::swap(mres_b, other.mres_b); + std::swap(mres_one, other.mres_one); } bool operator==(const CurveGFp& lhs, const CurveGFp& rhs) { - return (lhs.get_p() == rhs.get_p() && lhs.get_a() == rhs.get_a() && lhs.get_b() == rhs.get_b()); + return (lhs.get_p() == rhs.get_p() && + lhs.get_a() == rhs.get_a() && + lhs.get_b() == rhs.get_b()); } std::ostream& operator<<(std::ostream& output, const CurveGFp& elem) diff --git a/src/math/gfpmath/curve_gfp.h b/src/math/gfpmath/curve_gfp.h index 53bbc1f3c..5641e80d1 100644 --- a/src/math/gfpmath/curve_gfp.h +++ b/src/math/gfpmath/curve_gfp.h @@ -2,6 +2,7 @@ * Elliptic curves over GF(p) * * (C) 2007 Martin Doering, Christoph Ludwig, Falko Strenzke +* 2010 Jack Lloyd * * Distributed under the terms of the Botan license */ @@ -9,7 +10,6 @@ #ifndef BOTAN_GFP_CURVE_H__ #define BOTAN_GFP_CURVE_H__ -#include <botan/bigint.h> #include <botan/gfp_element.h> #include <iosfwd> @@ -31,28 +31,8 @@ class BOTAN_DLL CurveGFp CurveGFp(const GFpElement& a, const GFpElement& b, const BigInt& p); - /** - * Copy constructor - * @param other The curve to clone - */ - CurveGFp(const CurveGFp& other); - - /** - * Assignment operator - * @param other The curve to use as source for the assignment - */ - const CurveGFp& operator=(const CurveGFp& other); - - /** - * Set the shared GFpModulus object. - * Warning: do not use this function unless you know in detail how - * the sharing of values - * in the various EC related objects works. - * Do NOT spread pointers to a GFpModulus over different threads! - * @param mod a shared pointer to a GFpModulus object suitable for - * *this. - */ - void set_shrd_mod(const std::tr1::shared_ptr<GFpModulus> mod); + // CurveGFp(const CurveGFp& other) = default; + // CurveGFp& operator=(const CurveGFp& other) = default; // getters @@ -60,13 +40,13 @@ class BOTAN_DLL CurveGFp * Get coefficient a * @result coefficient a */ - const GFpElement& get_a() const; + const GFpElement& get_a() const { return mA; } /** * Get coefficient b * @result coefficient b */ - const GFpElement& get_b() const; + const GFpElement& get_b() const { return mB; } /** * Get the GFpElement coefficient a transformed @@ -75,7 +55,7 @@ class BOTAN_DLL CurveGFp * function. * @result the coefficient a, transformed to its m-residue */ - GFpElement const get_mres_a() const; + const GFpElement& get_mres_a() const { return mres_a; } /** * Get the GFpElement coefficient b transformed @@ -84,8 +64,7 @@ class BOTAN_DLL CurveGFp * function. * @result the coefficient b, transformed to its m-residue */ - GFpElement const get_mres_b() const; - + const GFpElement& get_mres_b() const { return mres_b; } /** * Get the GFpElement 1 transformed @@ -94,31 +73,13 @@ class BOTAN_DLL CurveGFp * function. * @result the GFpElement 1, transformed to its m-residue */ - std::tr1::shared_ptr<GFpElement const> const get_mres_one() const; + const GFpElement& get_mres_one() { return mres_one; } /** * Get prime modulus of the field of the curve * @result prime modulus of the field of the curve */ - BigInt const get_p() const; - /*inline std::tr1::shared_ptr<BigInt> const get_ptr_p() const - { - return mp_p; - }*/ - - /** - * Retrieve a shared pointer to the curves GFpModulus object for - * efficient storage and computation of montgomery multiplication - * related data members and functions. Warning: do not use this - * function unless you know in detail how the sharing of values - * in the various EC related objects works. Do NOT spread - * pointers to a GFpModulus over different threads! - * @result a shared pointer to a GFpModulus object - */ - inline std::tr1::shared_ptr<GFpModulus> const get_ptr_mod() const - { - return mp_mod; - } + const BigInt& get_p() const { return modulus.get_p(); } /** * swaps the states of *this and other, does not throw @@ -127,12 +88,10 @@ class BOTAN_DLL CurveGFp void swap(CurveGFp& other); private: - std::tr1::shared_ptr<GFpModulus> mp_mod; + GFpModulus modulus; GFpElement mA; GFpElement mB; - mutable std::tr1::shared_ptr<GFpElement> mp_mres_a; - mutable std::tr1::shared_ptr<GFpElement> mp_mres_b; - mutable std::tr1::shared_ptr<GFpElement> mp_mres_one; + GFpElement mres_a, mres_b, mres_one; }; // relational operators diff --git a/src/math/gfpmath/gfp_element.cpp b/src/math/gfpmath/gfp_element.cpp index 233f2e4cd..3bb4d0002 100644 --- a/src/math/gfpmath/gfp_element.cpp +++ b/src/math/gfpmath/gfp_element.cpp @@ -165,47 +165,20 @@ BigInt montg_trf_to_ordres(const BigInt& m_res, const BigInt& m, const BigInt& r } -GFpElement::GFpElement(const BigInt& p, const BigInt& value, bool use_montgm) - : mp_mod(), - m_value(value %p), - m_use_montgm(use_montgm), - m_is_trf(false) - { - assert(mp_mod.get() == 0); - mp_mod = std::tr1::shared_ptr<GFpModulus>(new GFpModulus(p)); - assert(mp_mod->m_p_dash == 0); +GFpElement::GFpElement(const BigInt& p, const BigInt& value, bool use_montgomery) + : modulus(p), m_value(value %p), m_use_montgm(use_montgomery), m_is_trf(false) + { if(m_use_montgm) ensure_montgm_precomp(); } -GFpElement::GFpElement(std::tr1::shared_ptr<GFpModulus> const mod, const BigInt& value, bool use_montgm) - : mp_mod(), - m_value(value % mod->m_p), - m_use_montgm(use_montgm), - m_is_trf(false) - { - assert(mp_mod.get() == 0); - mp_mod = mod; - } - -GFpElement::GFpElement(const GFpElement& other) - : m_value(other.m_value), - m_use_montgm(other.m_use_montgm), - m_is_trf(other.m_is_trf) - - { - //creates an independent copy - assert((other.m_is_trf && other.m_use_montgm) || !other.m_is_trf); - mp_mod.reset(new GFpModulus(*other.mp_mod)); // copy-ctor of GFpModulus - } - -void GFpElement::turn_on_sp_red_mul() const +void GFpElement::turn_on_sp_red_mul() { ensure_montgm_precomp(); m_use_montgm = true; } -void GFpElement::turn_off_sp_red_mul() const +void GFpElement::turn_off_sp_red_mul() { if(m_is_trf) { @@ -216,40 +189,25 @@ void GFpElement::turn_off_sp_red_mul() const m_use_montgm = false; } -void GFpElement::ensure_montgm_precomp() const +void GFpElement::ensure_montgm_precomp() { - if((!mp_mod->m_r.is_zero()) && (!mp_mod->m_r_inv.is_zero()) && (!mp_mod->m_p_dash.is_zero())) + if((!modulus.get_r().is_zero()) && (!modulus.get_r_inv().is_zero()) && (!modulus.get_p_dash().is_zero())) { // values are already set, nothing more to do } else { - BigInt tmp_r(montgm_calc_r_oddmod(mp_mod->m_p)); - - BigInt tmp_r_inv(inverse_mod(tmp_r, mp_mod->m_p)); + BigInt tmp_r(montgm_calc_r_oddmod(modulus.get_p())); - BigInt tmp_p_dash(montgm_calc_m_dash(tmp_r, mp_mod->m_p, tmp_r_inv)); + BigInt tmp_r_inv(inverse_mod(tmp_r, modulus.get_p())); - mp_mod->m_r.grow_reg(tmp_r.size()); - mp_mod->m_r_inv.grow_reg(tmp_r_inv.size()); - mp_mod->m_p_dash.grow_reg(tmp_p_dash.size()); + BigInt tmp_p_dash(montgm_calc_m_dash(tmp_r, modulus.get_p(), tmp_r_inv)); - mp_mod->m_r = tmp_r; - mp_mod->m_r_inv = tmp_r_inv; - mp_mod->m_p_dash = tmp_p_dash; - - assert(!mp_mod->m_r.is_zero()); - assert(!mp_mod->m_r_inv.is_zero()); - assert(!mp_mod->m_p_dash.is_zero()); + modulus.reset_values(tmp_p_dash, tmp_r, tmp_r_inv); } } -void GFpElement::set_shrd_mod(std::tr1::shared_ptr<GFpModulus> const p_mod) - { - mp_mod = p_mod; - } - void GFpElement::trf_to_mres() const { if(!m_use_montgm) @@ -257,27 +215,27 @@ void GFpElement::trf_to_mres() const throw Illegal_Transformation("GFpElement is not allowed to be transformed to m-residue"); } assert(m_is_trf == false); - assert(!mp_mod->m_r_inv.is_zero()); - assert(!mp_mod->m_p_dash.is_zero()); - m_value = montg_trf_to_mres(m_value, mp_mod->m_r, mp_mod->m_p); + assert(!modulus.get_r_inv().is_zero()); + assert(!modulus.get_p_dash().is_zero()); + m_value = montg_trf_to_mres(m_value, modulus.get_r(), modulus.get_p()); m_is_trf = true; } void GFpElement::trf_to_ordres() const { assert(m_is_trf == true); - m_value = montg_trf_to_ordres(m_value, mp_mod->m_p, mp_mod->m_r_inv); + m_value = montg_trf_to_ordres(m_value, modulus.get_p(), modulus.get_r_inv()); m_is_trf = false; } bool GFpElement::align_operands_res(const GFpElement& lhs, const GFpElement& rhs) //static { - assert(lhs.mp_mod->m_p == rhs.mp_mod->m_p); + assert(lhs.modulus.get_p() == rhs.modulus.get_p()); if(lhs.m_use_montgm && rhs.m_use_montgm) { - assert(rhs.mp_mod->m_p_dash == lhs.mp_mod->m_p_dash); - assert(rhs.mp_mod->m_r == lhs.mp_mod->m_r); - assert(rhs.mp_mod->m_r_inv == lhs.mp_mod->m_r_inv); + assert(rhs.modulus.get_p_dash() == lhs.modulus.get_p_dash()); + assert(rhs.modulus.get_r() == lhs.modulus.get_r()); + assert(rhs.modulus.get_r_inv() == lhs.modulus.get_r_inv()); if(!lhs.m_is_trf && !rhs.m_is_trf) { return false; @@ -327,7 +285,7 @@ bool GFpElement::is_trf_to_mres() const const BigInt& GFpElement::get_p() const { - return (mp_mod->m_p); + return (modulus.get_p()); } const BigInt& GFpElement::get_value() const @@ -345,7 +303,7 @@ const BigInt& GFpElement::get_mres() const if(!m_use_montgm) { // does the following exception really make sense? - // wouldn´t it be better to simply turn on montg.mult. when + // wouldn't it be better to simply turn on montg.mult. when // this explicit request is made? throw Illegal_Transformation("GFpElement is not allowed to be transformed to m-residue"); } @@ -357,107 +315,17 @@ const BigInt& GFpElement::get_mres() const return m_value; } -const GFpElement& GFpElement::operator=(const GFpElement& other) - { - m_value.grow_reg(other.m_value.size()); // grow first for exception safety - - //m_value = other.m_value; - - // m_use_montgm = other.m_use_montgm; - // m_is_trf = other.m_is_trf; - // we want to keep the member pointers, which might be part of a "sharing group" - // but we may not simply overwrite the BigInt values with those of the argument!! - // if ours already contains precomputations, it would be hazardous to - // set them back to zero. - // thus we first check for equality of the moduli, - // then whether either of the two objects already contains - // precomputed values. - - // we also deal with the case were the pointers themsevles are equal: - if(mp_mod.get() == other.mp_mod.get()) - { - // everything ok, we are in the same sharing group anyway, nothing to do - m_value = other.m_value; // cannot throw - m_use_montgm = other.m_use_montgm; - m_is_trf = other.m_is_trf; - return *this; - } - if(mp_mod->m_p != other.mp_mod->m_p) - { - // the moduli are different, this is a special case - // which will not occur in usual applications, - // so we don´t hesitate to simply create new objects - // (we do want to create an independent copy) - mp_mod.reset(new GFpModulus(*other.mp_mod)); // this could throw, - // and because of this - // we haven't modified - // anything so far - m_value = other.m_value; // can't throw - m_use_montgm = other.m_use_montgm; - m_is_trf = other.m_is_trf; - return *this; - } - // exception safety note: from now on we are on the safe - // side with respect to the modulus, - // so we can assign the value now: - m_value = other.m_value; - m_use_montgm = other.m_use_montgm; - m_is_trf = other.m_is_trf; - // the moduli are equal, but we deal with different sharing groups. - // we will NOT fuse the sharing goups - // and we will NOT reset already precomputed values - if(mp_mod->has_precomputations()) - { - // our own sharing group already has precomputed values, - // so nothing to do. - return *this; - } - else - { - // let´s see whether the argument has something for us... - if(other.mp_mod->has_precomputations()) - { - // fetch them for our sharing group - // exc. safety note: grow first - mp_mod->m_p_dash.grow_reg(other.mp_mod->m_p_dash.size()); - mp_mod->m_r.grow_reg(other.mp_mod->m_r.size()); - mp_mod->m_r_inv.grow_reg(other.mp_mod->m_r_inv.size()); - - mp_mod->m_p_dash = other.mp_mod->m_p_dash; - mp_mod->m_r = other.mp_mod->m_r; - mp_mod->m_r_inv = other.mp_mod->m_r_inv; - return *this; - } - } - // our precomputations aren´t set, the arguments neither, - // so we let them alone - return *this; - } - -void GFpElement::share_assign(const GFpElement& other) - { - assert((other.m_is_trf && other.m_use_montgm) || !other.m_is_trf); - - // use grow_to to make it exc safe - m_value.grow_reg(other.m_value.size()); - m_value = other.m_value; - - m_use_montgm = other.m_use_montgm; - m_is_trf = other.m_is_trf; - mp_mod = other.mp_mod; // cannot throw - } - GFpElement& GFpElement::operator+=(const GFpElement& rhs) { GFpElement::align_operands_res(*this, rhs); - workspace = m_value; + BigInt workspace = m_value; workspace += rhs.m_value; - if(workspace >= mp_mod->m_p) - workspace -= mp_mod->m_p; + if(workspace >= modulus.get_p()) + workspace -= modulus.get_p(); m_value = workspace; - assert(m_value < mp_mod->m_p); + assert(m_value < modulus.get_p()); assert(m_value >= 0); return *this; @@ -467,39 +335,39 @@ GFpElement& GFpElement::operator-=(const GFpElement& rhs) { GFpElement::align_operands_res(*this, rhs); - workspace = m_value; + BigInt workspace = m_value; workspace -= rhs.m_value; if(workspace.is_negative()) - workspace += mp_mod->m_p; + workspace += modulus.get_p(); m_value = workspace; - assert(m_value < mp_mod->m_p); + assert(m_value < modulus.get_p()); assert(m_value >= 0); return *this; } GFpElement& GFpElement::operator*= (u32bit rhs) { - workspace = m_value; + BigInt workspace = m_value; workspace *= rhs; - workspace %= mp_mod->m_p; + workspace %= modulus.get_p(); m_value = workspace; return *this; } GFpElement& GFpElement::operator*=(const GFpElement& rhs) { - assert(rhs.mp_mod->m_p == mp_mod->m_p); + assert(rhs.modulus.get_p() == modulus.get_p()); // here, we do not use align_operands_res() for one simple reason: // we want to enforce the transformation to an m-residue, otherwise it would // never happen if(m_use_montgm && rhs.m_use_montgm) { - assert(rhs.mp_mod->m_p == mp_mod->m_p); // is montgm. mult is on, then precomps must be there - assert(rhs.mp_mod->m_p_dash == mp_mod->m_p_dash); - assert(rhs.mp_mod->m_r == mp_mod->m_r); + assert(rhs.modulus.get_p() == modulus.get_p()); // is montgm. mult is on, then precomps must be there + assert(rhs.modulus.get_p_dash() == modulus.get_p_dash()); + assert(rhs.modulus.get_r() == modulus.get_r()); if(!m_is_trf) { trf_to_mres(); @@ -508,8 +376,8 @@ GFpElement& GFpElement::operator*=(const GFpElement& rhs) { rhs.trf_to_mres(); } - workspace = m_value; - montg_mult(m_value, workspace, rhs.m_value, mp_mod->m_p, mp_mod->m_p_dash, mp_mod->m_r); + BigInt workspace = m_value; + montg_mult(m_value, workspace, rhs.m_value, modulus.get_p(), modulus.get_p_dash(), modulus.get_r()); } else // ordinary multiplication { @@ -524,9 +392,9 @@ GFpElement& GFpElement::operator*=(const GFpElement& rhs) rhs.trf_to_ordres(); } - workspace = m_value; + BigInt workspace = m_value; workspace *= rhs.m_value; - workspace %= mp_mod->m_p; + workspace %= modulus.get_p(); m_value = workspace; } return *this; @@ -536,18 +404,17 @@ GFpElement& GFpElement::operator/=(const GFpElement& rhs) { bool use_mres = GFpElement::align_operands_res(*this, rhs); assert((this->m_is_trf && rhs.m_is_trf) || !(this->m_is_trf && rhs.m_is_trf)); - // (internal note: see C86) + if(use_mres) { assert(m_use_montgm && rhs.m_use_montgm); GFpElement rhs_ordres(rhs); rhs_ordres.trf_to_ordres(); rhs_ordres.inverse_in_place(); - workspace = m_value; - workspace *= rhs_ordres.get_value(); - workspace %= mp_mod->m_p; + BigInt workspace = m_value; + workspace *= rhs_ordres.get_value(); + workspace %= modulus.get_p(); m_value = workspace; - } else { @@ -566,30 +433,31 @@ bool GFpElement::is_zero() GFpElement& GFpElement::inverse_in_place() { - m_value = inverse_mod(m_value, mp_mod->m_p); + m_value = inverse_mod(m_value, modulus.get_p()); + if(m_is_trf) { assert(m_use_montgm); - m_value *= mp_mod->m_r; - m_value *= mp_mod->m_r; - m_value %= mp_mod->m_p; + m_value *= modulus.get_r(); + m_value *= modulus.get_r(); + m_value %= modulus.get_p(); } - assert(m_value <= mp_mod->m_p); + assert(m_value <= modulus.get_p()); return *this; } GFpElement& GFpElement::negate() { - m_value = mp_mod->m_p - m_value; - assert(m_value <= mp_mod->m_p); + m_value = modulus.get_p() - m_value; + assert(m_value <= modulus.get_p()); return *this; } void GFpElement::swap(GFpElement& other) { - m_value.swap(other.m_value); - mp_mod.swap(other.mp_mod); + std::swap(m_value, other.m_value); + std::swap(modulus, other.modulus); std::swap<bool>(m_use_montgm,other.m_use_montgm); std::swap<bool>(m_is_trf,other.m_is_trf); } @@ -601,15 +469,9 @@ std::ostream& operator<<(std::ostream& output, const GFpElement& elem) bool operator==(const GFpElement& lhs, const GFpElement& rhs) { - // for effeciency reasons we firstly check whether - //the modulus pointers are different in the first place: - if(lhs.get_ptr_mod() != rhs.get_ptr_mod()) - { - if(lhs.get_p() != rhs.get_p()) - { - return false; - } - } + if(lhs.get_p() != rhs.get_p()) + return false; + // so the modulus is equal, now check the values bool use_mres = GFpElement::align_operands_res(lhs, rhs); diff --git a/src/math/gfpmath/gfp_element.h b/src/math/gfpmath/gfp_element.h index c6cfc9d32..538d41a47 100644 --- a/src/math/gfpmath/gfp_element.h +++ b/src/math/gfpmath/gfp_element.h @@ -2,6 +2,7 @@ * Arithmetic for prime fields GF(p) * * (C) 2007 Martin Doering, Christoph Ludwig, Falko Strenzke +* 2009-2010 Jack Lloyd * * Distributed under the terms of the Botan license */ @@ -13,14 +14,6 @@ #include <botan/gfp_modulus.h> #include <iosfwd> -#if defined(BOTAN_USE_STD_TR1) - #include <tr1/memory> -#elif defined(BOTAN_USE_BOOST_TR1) - #include <boost/tr1/memory.hpp> -#else - #error "Please choose a TR1 implementation in build.h" -#endif - namespace Botan { struct BOTAN_DLL Illegal_Transformation : public Exception @@ -45,57 +38,21 @@ class BOTAN_DLL GFpElement * @param value the element value * @param use_montgm whether this object will use Montgomery multiplication */ - explicit GFpElement (const BigInt& p, const BigInt& value, bool use_montgm = false); - - - /** construct an element of GF(p) with the given value (defaults - * to 0). use_montg defaults to false and determines wether - * montgomery multiplications will be use when applying operators - * '*' , '*='. Use this constructor for efficient use of - * Montgomery multiplication in a context with a fixed a modulus. - * Warning: do not use this function unless you know in detail - * about the implications of using the shared GFpModulus objects! - * @param mod shared pointer to the GFpModulus to be shared - * @param value the element value - * @param use_montgm whether this object will use Montgomery multiplication - */ - explicit GFpElement(std::tr1::shared_ptr<GFpModulus> const mod, - const BigInt& value, bool use_mongm = false); + GFpElement(const BigInt& p, const BigInt& value, bool use_montgm = true); - /** - * Copy constructor - * @param other The element to clone - */ - GFpElement(const GFpElement& other); - - /** - * Assignment operator. - * makes *this a totally independent object - * (gives *this independent modulus specific values). - - * @param other The element to assign to our object - */ - const GFpElement& operator=(const GFpElement& other); + // GFpElement(const GFpElement& other) = default; - /** - * Works like the assignment operator, but lets - * *this share the modulus dependend value with other. - * Warning: do not use this function unless you know in detail about - * the implications of using - * the shared GFpModulus objects! - * @param other The element to assign to our object - */ - void share_assign(const GFpElement& other); + // const GFpElement& operator=(const GFpElement& other) = default; /** * Switch Montgomery multiplcation optimizations ON */ - void turn_on_sp_red_mul() const; + void turn_on_sp_red_mul(); /** * Switch Montgomery multiplcation optimizations OFF */ - void turn_off_sp_red_mul() const; + void turn_off_sp_red_mul(); /** * += Operator @@ -129,7 +86,7 @@ class BOTAN_DLL GFpElement * @param rhs the value to multiply with the local value * @result *this */ - GFpElement& operator*= (u32bit rhs); + GFpElement& operator*=(u32bit rhs); /** * Negate internal value(*this *= -1 ) @@ -164,31 +121,9 @@ class BOTAN_DLL GFpElement const BigInt& get_value() const; /** - * Returns the shared pointer to the GFpModulus of *this. - * Warning: do not use this function unless you know in detail about - * the implications of using - * the shared GFpModulus objects! - * @result the shared pointer to the GFpModulus of *this - */ - inline std::tr1::shared_ptr<GFpModulus> const get_ptr_mod() const - { - return mp_mod; - } - - - /** - * Sets the shared pointer to the GFpModulus of *this. - * Warning: do not use this function unless you know in detail about - * the implications of using - * the shared GFpModulus objects! - * @param mod a shared pointer to a GFpModulus that will be held in *this - */ - void set_shrd_mod(std::tr1::shared_ptr<GFpModulus> const mod); - - /** - * Tells whether this GFpElement is currently transformed to it´ m-residue, + * Tells whether this GFpElement is currently transformed to an m-residue, * i.e. in the form x_bar = x * r mod m. - * @result true if it is currently transformed to it´s m-residue. + * @result true if it is currently transformed to its m-residue. */ bool is_trf_to_mres() const; @@ -213,7 +148,7 @@ class BOTAN_DLL GFpElement * in ordinary residue representation (returns false). * m-residue is prefered in case of ambiguity. * does not toggle m_use_montgm of the arguments. - * Don´t be confused about the constness of the arguments: + * Don't be confused about the constness of the arguments: * the transformation between normal residue and m-residue is * considered as leaving the object const. * @param lhs the first operand to be aligned @@ -223,31 +158,22 @@ class BOTAN_DLL GFpElement */ static bool align_operands_res(const GFpElement& lhs, const GFpElement& rhs); - //friend declarations for non-member functions - - friend class Point_Coords_GFp; - /** * swaps the states of *this and other, does not throw! * @param other The value to swap with */ void swap(GFpElement& other); private: - void ensure_montgm_precomp() const; + void ensure_montgm_precomp(); void trf_to_mres() const; void trf_to_ordres() const; - std::tr1::shared_ptr<GFpModulus> mp_mod; + GFpModulus modulus; mutable BigInt m_value; // ordinary residue or m-residue respectively - mutable BigInt workspace; - // ***************************************** // data members for montgomery multiplication - mutable bool m_use_montgm; - //mutable BigInt m_mres; - // this bool tells use whether the m_mres carries - // the actual value (in this case mValue doesn´t) - mutable bool m_is_trf; + bool m_use_montgm; + mutable bool m_is_trf; // if m_value is montgomery }; // relational operators @@ -264,8 +190,8 @@ GFpElement BOTAN_DLL operator-(const GFpElement& lhs); GFpElement BOTAN_DLL operator*(const GFpElement& lhs, const GFpElement& rhs); GFpElement BOTAN_DLL operator/(const GFpElement& lhs, const GFpElement& rhs); -GFpElement BOTAN_DLL operator* (const GFpElement& lhs, u32bit rhs); -GFpElement BOTAN_DLL operator* (u32bit rhs, const GFpElement& lhs); +GFpElement BOTAN_DLL operator*(const GFpElement& lhs, u32bit rhs); +GFpElement BOTAN_DLL operator*(u32bit rhs, const GFpElement& lhs); /** diff --git a/src/math/gfpmath/gfp_modulus.h b/src/math/gfpmath/gfp_modulus.h index 4773a8b89..fcdd13ee1 100644 --- a/src/math/gfpmath/gfp_modulus.h +++ b/src/math/gfpmath/gfp_modulus.h @@ -13,7 +13,7 @@ namespace Botan { -class BOTAN_DLL GFpElement; +class GFpElement; /** * This class represents a GFpElement modulus including the modulus @@ -22,24 +22,26 @@ class BOTAN_DLL GFpElement; class BOTAN_DLL GFpModulus { public: - friend class GFpElement; /** * Construct a GF(P)-Modulus from a BigInt */ - GFpModulus(BigInt p) + GFpModulus(const BigInt& p) : m_p(p), m_p_dash(), m_r(), m_r_inv() {} + // GFpModulus(const GFpModulus& other) = default; + // GFpModulus& operator=(const GFpModulus& other) = default; + /** * Tells whether the precomputations necessary for the use of the * montgomery multiplication have yet been established. * @result true if the precomputated value are already available. */ - inline bool has_precomputations() const + bool has_precomputations() const { return(!m_p_dash.is_zero() && !m_r.is_zero() && !m_r_inv.is_zero()); } @@ -48,12 +50,12 @@ class BOTAN_DLL GFpModulus * Swaps this with another GFpModulus, does not throw. * @param other the GFpModulus to swap *this with. */ - inline void swap(GFpModulus& other) + void swap(GFpModulus& other) { - m_p.swap(other.m_p); - m_p_dash.swap(other.m_p_dash); - m_r.swap(other.m_r); - m_r_inv.swap(other.m_r_inv); + std::swap(m_p, other.m_p); + std::swap(m_p_dash, other.m_p_dash); + std::swap(m_r, other.m_r); + std::swap(m_r_inv, other.m_r_inv); } /** @@ -61,7 +63,7 @@ class BOTAN_DLL GFpModulus * @param mod the modulus to compare this with * @result true if the modulus of *this and the argument are equal. */ - inline bool p_equal_to(const BigInt& mod) const + bool p_equal_to(const BigInt& mod) const { return (m_p == mod); } @@ -70,7 +72,7 @@ class BOTAN_DLL GFpModulus * Return the modulus of this GFpModulus. * @result the modulus of *this. */ - inline const BigInt& get_p() const + const BigInt& get_p() const { return m_p; } @@ -81,7 +83,7 @@ class BOTAN_DLL GFpModulus * performed! * @result r */ - inline const BigInt& get_r() const + const BigInt& get_r() const { return m_r; } @@ -92,7 +94,7 @@ class BOTAN_DLL GFpModulus * performed! * @result r^{-1} */ - inline const BigInt& get_r_inv() const + const BigInt& get_r_inv() const { return m_r_inv; } @@ -103,17 +105,25 @@ class BOTAN_DLL GFpModulus * performed! * @result p' */ - inline const BigInt& get_p_dash() const + const BigInt& get_p_dash() const { return m_p_dash; } - // default cp-ctor, op= are fine + + void reset_values(const BigInt& new_p_dash, + const BigInt& new_r, + const BigInt& new_r_inv) + { + m_p_dash = new_p_dash; + m_r = new_r; + m_r_inv = new_r_inv; + } private: BigInt m_p; // the modulus itself - mutable BigInt m_p_dash; - mutable BigInt m_r; - mutable BigInt m_r_inv; + BigInt m_p_dash; + BigInt m_r; + BigInt m_r_inv; }; } diff --git a/src/math/gfpmath/info.txt b/src/math/gfpmath/info.txt index a02dbc044..b7b430805 100644 --- a/src/math/gfpmath/info.txt +++ b/src/math/gfpmath/info.txt @@ -1,7 +1,5 @@ define BIGINT_GFP -uses_tr1 yes - <header:public> curve_gfp.h gfp_element.h diff --git a/src/math/gfpmath/point_gfp.cpp b/src/math/gfpmath/point_gfp.cpp index f95add9f7..4b2de7913 100644 --- a/src/math/gfpmath/point_gfp.cpp +++ b/src/math/gfpmath/point_gfp.cpp @@ -13,295 +13,114 @@ namespace Botan { // construct the point at infinity or a random point -PointGFp::PointGFp(const CurveGFp& curve) - : mC(curve), - mX(curve.get_p(), 0), - mY(curve.get_p(), 1), - mZ(curve.get_p(), 0), - mZpow2(curve.get_p(),0), - mZpow3(curve.get_p(),0), - mAZpow4(curve.get_p(),0), - mZpow2_set(false), - mZpow3_set(false), - mAZpow4_set(false) +PointGFp::PointGFp(const CurveGFp& curve) : + mC(curve), + mX(curve.get_p(), 0), + mY(curve.get_p(), 1), + mZ(curve.get_p(), 0) { - // first set the point wide pointer - - set_shrd_mod(mC.get_ptr_mod()); - } // construct a point given its jacobian projective coordinates PointGFp::PointGFp(const CurveGFp& curve, const GFpElement& x, - const GFpElement& y, const GFpElement& z) - : mC(curve), - mX(x), - mY(y), - mZ(z), - mZpow2(curve.get_p(),0), - mZpow3(curve.get_p(),0), - mAZpow4(curve.get_p(),0), - mZpow2_set(false), - mZpow3_set(false), - mAZpow4_set(false) - { - set_shrd_mod(mC.get_ptr_mod()); - } -PointGFp::PointGFp ( const CurveGFp& curve, const GFpElement& x, - const GFpElement& y ) - :mC(curve), - mX(x), - mY(y), - mZ(curve.get_p(),1), - mZpow2(curve.get_p(),0), - mZpow3(curve.get_p(),0), - mAZpow4(curve.get_p(),0), - mZpow2_set(false), - mZpow3_set(false), - mAZpow4_set(false) - { - set_shrd_mod(mC.get_ptr_mod()); - } - -// copy constructor -PointGFp::PointGFp(const PointGFp& other) - : mC(other.mC), - mX(other.mX), - mY(other.mY), - mZ(other.mZ), - mZpow2(other.mZpow2), - mZpow3(other.mZpow3), - mAZpow4(other.mAZpow4), - mZpow2_set(other.mZpow2_set), - mZpow3_set(other.mZpow3_set), - mAZpow4_set(other.mAZpow4_set) + const GFpElement& y, const GFpElement& z) : + mC(curve), + mX(x), + mY(y), + mZ(z) { - set_shrd_mod(mC.get_ptr_mod()); } -// assignment operator -const PointGFp& PointGFp::operator=(PointGFp const& other) +PointGFp::PointGFp(const CurveGFp& curve, + const GFpElement& x, + const GFpElement& y) : + mC(curve), + mX(x), + mY(y), + mZ(curve.get_p(),1) { - mC = other.get_curve(); - mX = other.get_jac_proj_x(); - mY = other.get_jac_proj_y(); - mZ = other.get_jac_proj_z(); - mZpow2 = GFpElement(other.mZpow2); - mZpow3 = GFpElement(other.mZpow3); - mAZpow4 = GFpElement(other.mAZpow4); - mZpow2_set = other.mZpow2_set; - mZpow3_set = other.mZpow3_set; - mAZpow4_set = other.mAZpow4_set; - set_shrd_mod(mC.get_ptr_mod()); - return *this; - } - -const PointGFp& PointGFp::assign_within_same_curve(PointGFp const& other) - { - mX = other.get_jac_proj_x(); - mY = other.get_jac_proj_y(); - mZ = other.get_jac_proj_z(); - mZpow2_set = false; - mZpow3_set = false; - mAZpow4_set = false; - // the rest stays! - return *this; - } - -void PointGFp::set_shrd_mod(std::tr1::shared_ptr<GFpModulus> p_mod) - { - mX.set_shrd_mod(p_mod); - mY.set_shrd_mod(p_mod); - mZ.set_shrd_mod(p_mod); - mZpow2.set_shrd_mod(p_mod); - mZpow3.set_shrd_mod(p_mod); - mAZpow4.set_shrd_mod(p_mod); - } - -void PointGFp::ensure_worksp() const - { - if (mp_worksp_gfp_el.get() != 0) - { - if ((*mp_worksp_gfp_el).size() == GFPEL_WKSP_SIZE) - { - return; - } - else - { - throw Invalid_State("encountered incorrect size for PointGFp´s GFpElement workspace"); - } - } - - mp_worksp_gfp_el = std::tr1::shared_ptr<std::vector<GFpElement> >(new std::vector<GFpElement>); - mp_worksp_gfp_el->reserve(9); - for (u32bit i=0; i<GFPEL_WKSP_SIZE; i++) - { - mp_worksp_gfp_el->push_back(GFpElement(1,0)); - - } } // arithmetic operators PointGFp& PointGFp::operator+=(const PointGFp& rhs) { - if (is_zero()) + if(is_zero()) { *this = rhs; return *this; } - if (rhs.is_zero()) + if(rhs.is_zero()) { return *this; } - ensure_worksp(); - - if (rhs.mZ == *(mC.get_mres_one())) - { - //U1 = mX; - (*mp_worksp_gfp_el)[0].share_assign(mX); - - //S1 = mY; - (*mp_worksp_gfp_el)[2].share_assign(mY); - } - else - { - if ((!rhs.mZpow2_set) || (!rhs.mZpow3_set)) - { - rhs.mZpow2 = rhs.mZ; - rhs.mZpow2 *= rhs.mZ; - rhs.mZpow3 = rhs.mZpow2; - rhs.mZpow3 *= rhs.mZ; - - rhs.mZpow2_set = true; - rhs.mZpow3_set = true; - } - //U1 = mX * rhs.mZpow2; - (*mp_worksp_gfp_el)[0].share_assign(mX); - (*mp_worksp_gfp_el)[0] *= rhs.mZpow2; - //S1 = mY * rhs.mZpow3; - (*mp_worksp_gfp_el)[2].share_assign(mY); - (*mp_worksp_gfp_el)[2] *= rhs.mZpow3; + GFpElement U1 = mX; + GFpElement S1 = mY; - } - if (mZ == *(mC.get_mres_one())) + if(rhs.mZ != mC.get_mres_one()) { - //U2 = rhs.mX; - (*mp_worksp_gfp_el)[1].share_assign(rhs.mX); + GFpElement rhs_z2 = rhs.mZ * rhs.mZ; - //S2 = rhs.mY; - (*mp_worksp_gfp_el)[3].share_assign(rhs.mY); + U1 *= rhs_z2; + S1 *= rhs_z2 * rhs.mZ; } - else - { - if ((!mZpow2_set) || (!mZpow3_set)) - { - // precomputation can´t be used, because *this changes anyway - mZpow2 = mZ; - mZpow2 *= mZ; - mZpow3 = mZpow2; - mZpow3 *= mZ; - } - //U2 = rhs.mX * mZpow2; - (*mp_worksp_gfp_el)[1].share_assign(rhs.mX); - (*mp_worksp_gfp_el)[1] *= mZpow2; + GFpElement U2 = rhs.mX; + GFpElement S2 = rhs.mY; - //S2 = rhs.mY * mZpow3; - (*mp_worksp_gfp_el)[3].share_assign(rhs.mY); - (*mp_worksp_gfp_el)[3] *= mZpow3; + if(mZ != mC.get_mres_one()) + { + GFpElement lhs_z2 = mZ * mZ; + U2 *= lhs_z2; + S2 *= lhs_z2 * mZ; } - //GFpElement H(U2 - U1); - - (*mp_worksp_gfp_el)[4].share_assign((*mp_worksp_gfp_el)[1]); - (*mp_worksp_gfp_el)[4] -= (*mp_worksp_gfp_el)[0]; - //GFpElement r(S2 - S1); - (*mp_worksp_gfp_el)[5].share_assign((*mp_worksp_gfp_el)[3]); - (*mp_worksp_gfp_el)[5] -= (*mp_worksp_gfp_el)[2]; - - //if(H.is_zero()) - if ((*mp_worksp_gfp_el)[4].is_zero()) + GFpElement H(U2 - U1); + GFpElement r(S2 - S1); + if(H.is_zero()) { - if ((*mp_worksp_gfp_el)[5].is_zero()) - + if(r.is_zero()) { mult2_in_place(); return *this; } + *this = PointGFp(mC); // setting myself to zero return *this; } - //U2 = H * H; - (*mp_worksp_gfp_el)[1].share_assign((*mp_worksp_gfp_el)[4]); - (*mp_worksp_gfp_el)[1] *= (*mp_worksp_gfp_el)[4]; + U2 = H * H; - //S2 = U2 * H; - (*mp_worksp_gfp_el)[3].share_assign((*mp_worksp_gfp_el)[1]); - (*mp_worksp_gfp_el)[3] *= (*mp_worksp_gfp_el)[4]; + S2 = U2 * H; - //U2 *= U1; - (*mp_worksp_gfp_el)[1] *= (*mp_worksp_gfp_el)[0]; + U2 *= U1; - //GFpElement x(r*r - S2 - (U2+U2)); - (*mp_worksp_gfp_el)[6].share_assign((*mp_worksp_gfp_el)[5]); - (*mp_worksp_gfp_el)[6] *= (*mp_worksp_gfp_el)[5]; - (*mp_worksp_gfp_el)[6] -= (*mp_worksp_gfp_el)[3]; - (*mp_worksp_gfp_el)[6] -= (*mp_worksp_gfp_el)[1]; - (*mp_worksp_gfp_el)[6] -= (*mp_worksp_gfp_el)[1]; + GFpElement x(r*r - S2 - (U2+U2)); - //GFpElement z(S1 * S2); - (*mp_worksp_gfp_el)[8].share_assign((*mp_worksp_gfp_el)[2]); - (*mp_worksp_gfp_el)[8] *= (*mp_worksp_gfp_el)[3]; + GFpElement z(S1 * S2); - //GFpElement y(r * (U2-x) - z); - (*mp_worksp_gfp_el)[7].share_assign((*mp_worksp_gfp_el)[1]); - (*mp_worksp_gfp_el)[7] -= (*mp_worksp_gfp_el)[6]; - (*mp_worksp_gfp_el)[7] *= (*mp_worksp_gfp_el)[5]; - (*mp_worksp_gfp_el)[7] -= (*mp_worksp_gfp_el)[8]; + GFpElement y(r * (U2-x) - z); - if (mZ == *(mC.get_mres_one())) + if(mZ == mC.get_mres_one()) { - if (rhs.mZ != *(mC.get_mres_one())) - { - //z = rhs.mZ * H; - (*mp_worksp_gfp_el)[8].share_assign(rhs.mZ); - (*mp_worksp_gfp_el)[8] *= (*mp_worksp_gfp_el)[4]; - } + if(rhs.mZ != mC.get_mres_one()) + z = rhs.mZ * H; else - { - //z = H; - (*mp_worksp_gfp_el)[8].share_assign((*mp_worksp_gfp_el)[4]); - } + z = H; } - else if (rhs.mZ != *(mC.get_mres_one())) + else if(rhs.mZ != mC.get_mres_one()) { - //U1 = mZ * rhs.mZ; - (*mp_worksp_gfp_el)[0].share_assign(mZ); - (*mp_worksp_gfp_el)[0] *= rhs.mZ; - - //z = U1 * H; - (*mp_worksp_gfp_el)[8].share_assign((*mp_worksp_gfp_el)[0]); - (*mp_worksp_gfp_el)[8] *= (*mp_worksp_gfp_el)[4]; - + U1 = mZ * rhs.mZ; + z = U1 * H; } else - { - //z = mZ * H; - (*mp_worksp_gfp_el)[8].share_assign(mZ); - (*mp_worksp_gfp_el)[8] *= (*mp_worksp_gfp_el)[4]; + z = mZ * H; - } - mZpow2_set = false; - mZpow3_set = false; - mAZpow4_set = false; - - mX = (*mp_worksp_gfp_el)[6]; - mY = (*mp_worksp_gfp_el)[7]; - mZ = (*mp_worksp_gfp_el)[8]; + mX = x; + mY = y; + mZ = z; return *this; @@ -310,7 +129,7 @@ PointGFp& PointGFp::operator-=(const PointGFp& rhs) { PointGFp minus_rhs = PointGFp(rhs).negate(); - if (is_zero()) + if(is_zero()) { *this = minus_rhs; } @@ -336,92 +155,39 @@ PointGFp& PointGFp::mult_this_secure(const BigInt& scalar, // use montgomery mult. in this operation this->turn_on_sp_red_mul(); - std::tr1::shared_ptr<PointGFp> H(new PointGFp(this->mC)); - std::tr1::shared_ptr<PointGFp> tmp; // used for AADA + PointGFp H(mC); PointGFp P(*this); BigInt m(scalar); - if (m < BigInt(0)) + if(m < BigInt(0)) { m = -m; P.negate(); } - if (P.is_zero() || (m == BigInt(0))) + if(P.is_zero() || (m == BigInt(0))) { - *this = *H; + *this = H; return *this; } - if (m == BigInt(1)) - { + if(m == BigInt(1)) return *this; - } - // -#ifdef CM_AADA -#ifndef CM_RAND_EXP - int max_secr_bits = max_secr.bits(); -#endif -#endif - - int mul_bits = m.bits(); // this is used for a determined number of loop runs in - // the mult_loop where leading zero´s are padded if necessary. - // Here we assign the value that will be used when no countermeasures are specified -#ifdef CM_RAND_EXP - u32bit rand_r_bit_len = 20; // Coron(99) proposes 20 bit for r -#ifdef CM_AADA + int mul_bits = m.bits(); - BigInt r_max(1); - -#endif // CM_AADA - - // use randomized exponent -#ifdef TA_COLL_T - static BigInt r_randexp; - if (new_rand) + for(int i = mul_bits - 1; i >= 0; i--) { - r_randexp = random_integer(rand_r_bit_len); - } - //assert(!r_randexp.is_zero()); -#else - BigInt r_randexp(random_integer(rand_r_bit_len)); -#endif - - m += r_randexp * point_order; - // determine mul_bits... -#ifdef CM_AADA - // AADA with rand. Exp. - //assert(rand_r_bit_len > 0); - r_max <<= rand_r_bit_len; - r_max -= 1; - //assert(r_max.bits() == rand_r_bit_len); - mul_bits = (max_secr + point_order * r_max).bits(); -#else - // rand. Exp. without AADA - mul_bits = m.bits(); -#endif // CM_AADA - - -#endif // CM_RAND_EXP - - // determine mul_bits... -#if (CM_AADA == 1 && CM_RAND_EXP != 1) - - mul_bits = max_secr_bits; -#endif // CM_AADA without CM_RAND_EXP - - //assert(mul_bits != 0); + H.mult2_in_place(); + if(m.get_bit(i)) + H += P; + } - H = mult_loop(mul_bits-1, m, H, tmp, P); + if(!H.is_zero()) // cannot convert if H == O + *this = H.get_z_to_one(); + else + *this = H; - if (!H->is_zero()) // cannot convert if H == O - { - *this = H->get_z_to_one(); - }else - { - *this = *H; - } mX.turn_off_sp_red_mul(); mY.turn_off_sp_red_mul(); mZ.turn_off_sp_red_mul(); @@ -439,226 +205,100 @@ PointGFp& PointGFp::operator*=(const BigInt& scalar) PointGFp P(*this); P.turn_on_sp_red_mul(); BigInt m(scalar); - if (m < BigInt(0)) + + if(m < BigInt(0)) { m = -m; P.negate(); } - if (P.is_zero() || (m == BigInt(0))) + + if(P.is_zero() || (m == BigInt(0))) { *this = H; return *this; } - if (m == BigInt(1)) - { - //*this == P already + + if(m == BigInt(1)) //*this == P already return *this; - } const int l = m.bits() - 1; - for (int i=l; i >=0; i--) + for(int i = l; i >= 0; --i) { - H.mult2_in_place(); - if (m.get_bit(i)) - { + if(m.get_bit(i)) H += P; - } } - if (!H.is_zero()) // cannot convert if H == O - { + if(!H.is_zero()) // cannot convert if H == O *this = H.get_z_to_one(); - }else - { + else *this = H; - } - return *this; - } - -inline std::tr1::shared_ptr<PointGFp> PointGFp::mult_loop(int l, - const BigInt& m, - std::tr1::shared_ptr<PointGFp> H, - std::tr1::shared_ptr<PointGFp> tmp, - const PointGFp& P) - { - //assert(l >= (int)m.bits()- 1); - tmp = H; - std::tr1::shared_ptr<PointGFp> to_add(new PointGFp(P)); // we just need some point - // so that we can use op= - // inside the loop - for (int i=l; i >=0; i--) - { - H->mult2_in_place(); - -#ifndef CM_AADA - - if (m.get_bit(i)) - { - *H += P; - } -#else // (CM_AADA is in) - - if (H.get() == to_add.get()) - { - to_add = tmp; // otherwise all pointers might point to the same object - // and we always need two objects to be able to switch around - } - to_add->assign_within_same_curve(*H); - tmp = H; - *tmp += P; // tmp already points to H - - if (m.get_bit(i)) - { - H = tmp; // NOTE: assign the pointer, not the value! - // (so that the operation is fast and thus as difficult - // to detect as possible) - } - else - { - H = to_add; // NOTE: this is necessary, because the assignment - // "*tmp = ..." already changed what H pointed to - - - } -#endif // CM_AADA - } - return H; + return *this; } PointGFp& PointGFp::negate() { - if (!is_zero()) - { + if(!is_zero()) mY.negate(); - } + return *this; } // *this *= 2 PointGFp& PointGFp::mult2_in_place() { - if (is_zero()) - { + if(is_zero()) return *this; - } - if (mY.is_zero()) + else if(mY.is_zero()) { - *this = PointGFp(mC); // setting myself to zero return *this; } - ensure_worksp(); - (*mp_worksp_gfp_el)[0].share_assign(mY); - (*mp_worksp_gfp_el)[0] *= mY; + GFpElement Y_squared = mY*mY; - //GFpElement S(mX * z); - (*mp_worksp_gfp_el)[1].share_assign(mX); - (*mp_worksp_gfp_el)[1] *= (*mp_worksp_gfp_el)[0]; + GFpElement S = mX * Y_squared; - //GFpElement x(S + S); - (*mp_worksp_gfp_el)[2].share_assign((*mp_worksp_gfp_el)[1]); - (*mp_worksp_gfp_el)[2] += (*mp_worksp_gfp_el)[1]; + GFpElement x = S + S; - //S = x + x; - (*mp_worksp_gfp_el)[1].share_assign((*mp_worksp_gfp_el)[2]); - (*mp_worksp_gfp_el)[1] += (*mp_worksp_gfp_el)[2]; + S = x + x; - if (!mAZpow4_set) + GFpElement a_z4 = mC.get_mres_a(); + if(mZ != mC.get_mres_one()) { - if (mZ == *(mC.get_mres_one())) - { - mAZpow4 = mC.get_mres_a(); - mAZpow4_set = true; - } - else - { - if (!mZpow2_set) - { - mZpow2 = mZ; - mZpow2 *= mZ; + GFpElement z2 = mZ * mZ; + a_z4 *= z2; + a_z4 *= z2; + } - mZpow2_set = true; - } - //x = mZpow2 * mZpow2; - (*mp_worksp_gfp_el)[2].share_assign(mZpow2); - (*mp_worksp_gfp_el)[2] *= mZpow2; + GFpElement y(mX * mX); - //mAZpow4 = mC.get_mres_a() * x; - mAZpow4 = mC.get_mres_a(); - mAZpow4 *= (*mp_worksp_gfp_el)[2]; + GFpElement M(y + y + y + a_z4); - } + x = M * M - (S+S); - } + y = Y_squared * Y_squared; - //GFpElement y(mX * mX); - (*mp_worksp_gfp_el)[3].share_assign(mX); - (*mp_worksp_gfp_el)[3] *= mX; - - //GFpElement M(y + y + y + mAZpow4); - (*mp_worksp_gfp_el)[4].share_assign((*mp_worksp_gfp_el)[3]); - (*mp_worksp_gfp_el)[4] += (*mp_worksp_gfp_el)[3]; - (*mp_worksp_gfp_el)[4] += (*mp_worksp_gfp_el)[3]; - (*mp_worksp_gfp_el)[4] += mAZpow4; - - //x = M * M - (S+S); - (*mp_worksp_gfp_el)[2].share_assign((*mp_worksp_gfp_el)[4]); - (*mp_worksp_gfp_el)[2] *= (*mp_worksp_gfp_el)[4]; - (*mp_worksp_gfp_el)[2] -= (*mp_worksp_gfp_el)[1]; - (*mp_worksp_gfp_el)[2] -= (*mp_worksp_gfp_el)[1]; - - //y = z * z; - (*mp_worksp_gfp_el)[3].share_assign((*mp_worksp_gfp_el)[0]); - (*mp_worksp_gfp_el)[3] *= (*mp_worksp_gfp_el)[0]; - - //GFpElement U(y + y); - (*mp_worksp_gfp_el)[5].share_assign((*mp_worksp_gfp_el)[3]); - (*mp_worksp_gfp_el)[5] += (*mp_worksp_gfp_el)[3]; - - //z = U + U; - (*mp_worksp_gfp_el)[0].share_assign((*mp_worksp_gfp_el)[5]); - (*mp_worksp_gfp_el)[0] += (*mp_worksp_gfp_el)[5]; - - //U = z + z; - (*mp_worksp_gfp_el)[5].share_assign((*mp_worksp_gfp_el)[0]); - (*mp_worksp_gfp_el)[5] += (*mp_worksp_gfp_el)[0]; - - //y = M * (S - x) - U; - (*mp_worksp_gfp_el)[3].share_assign((*mp_worksp_gfp_el)[1]); - (*mp_worksp_gfp_el)[3] -= (*mp_worksp_gfp_el)[2]; - (*mp_worksp_gfp_el)[3] *= (*mp_worksp_gfp_el)[4]; - (*mp_worksp_gfp_el)[3] -= (*mp_worksp_gfp_el)[5]; - - if (mZ != *(mC.get_mres_one())) - { - //z = mY * mZ; - (*mp_worksp_gfp_el)[0].share_assign(mY); - (*mp_worksp_gfp_el)[0] *= mZ; + GFpElement U(y + y); - } + GFpElement z = U + U; + + U = z + z; + + y = M * (S - x) - U; + + if(mZ != mC.get_mres_one()) + z = mY * mZ; else - { - //z = mY; - (*mp_worksp_gfp_el)[0].share_assign(mY); + z = mY; + + z = z + z; + + mX = x; + mY = y; + mZ = z; - } - //z = z + z; - (*mp_worksp_gfp_el)[6].share_assign((*mp_worksp_gfp_el)[0]); - (*mp_worksp_gfp_el)[0] += (*mp_worksp_gfp_el)[6]; - - //mX = x; - //mY = y; - //mZ = z; - mX = (*mp_worksp_gfp_el)[2]; - mY = (*mp_worksp_gfp_el)[3]; - mZ = (*mp_worksp_gfp_el)[0]; - - mZpow2_set = false; - mZpow3_set = false; - mAZpow4_set = false; return *this; } @@ -676,19 +316,14 @@ void PointGFp::turn_on_sp_red_mul() const mX.get_mres(); mY.get_mres(); mZ.get_mres(); - - mZpow2.turn_on_sp_red_mul(); - mZpow3.turn_on_sp_red_mul(); - mAZpow4.turn_on_sp_red_mul(); } -// getters /** * returns a point equivalent to *this but were * Z has value one, i.e. x and y correspond to * their values in affine coordinates */ -PointGFp const PointGFp::get_z_to_one() const +PointGFp PointGFp::get_z_to_one() const { return PointGFp(*this).set_z_to_one(); } @@ -701,7 +336,7 @@ PointGFp const PointGFp::get_z_to_one() const */ const PointGFp& PointGFp::set_z_to_one() const { - if (!(mZ.get_value() == BigInt(1)) && !(mZ.get_value() == BigInt(0))) + if(!(mZ.get_value() == BigInt(1)) && !(mZ.get_value() == BigInt(0))) { GFpElement z = inverse(mZ); GFpElement z2 = z * z; @@ -714,7 +349,7 @@ const PointGFp& PointGFp::set_z_to_one() const } else { - if (mZ.get_value() == BigInt(0)) + if(mZ.get_value() == BigInt(0)) { throw Illegal_Transformation("cannot convert Z to one"); } @@ -722,58 +357,35 @@ const PointGFp& PointGFp::set_z_to_one() const return *this; // mZ = 1 already } -const CurveGFp PointGFp::get_curve() const +GFpElement PointGFp::get_affine_x() const { - return mC; - } - -GFpElement const PointGFp::get_affine_x() const - { - - if (is_zero()) - { + if(is_zero()) throw Illegal_Transformation("cannot convert to affine"); - } - /*if(!mZpow2_set) - {*/ - mZpow2 = mZ * mZ; - mZpow2_set = true; - //} - //assert(mZpow2 == mZ*mZ); - GFpElement z2 = mZpow2; + GFpElement z2 = mZ * mZ; return mX * z2.inverse_in_place(); } -GFpElement const PointGFp::get_affine_y() const +GFpElement PointGFp::get_affine_y() const { - - if (is_zero()) - { + if(is_zero()) throw Illegal_Transformation("cannot convert to affine"); - } - /*if(!mZpow3_set ) - {*/ - mZpow3 = mZ * mZ * mZ; - mZpow3_set = true; - //} - //assert(mZpow3 == mZ * mZ *mZ); - GFpElement z3 = mZpow3; + GFpElement z3 = mZ * mZ * mZ; return mY * z3.inverse_in_place(); } -GFpElement const PointGFp::get_jac_proj_x() const +GFpElement PointGFp::get_jac_proj_x() const { return GFpElement(mX); } -GFpElement const PointGFp::get_jac_proj_y() const +GFpElement PointGFp::get_jac_proj_y() const { return GFpElement(mY); } -GFpElement const PointGFp::get_jac_proj_z() const +GFpElement PointGFp::get_jac_proj_z() const { return GFpElement(mZ); } @@ -794,14 +406,14 @@ bool PointGFp::is_zero() const void PointGFp::check_invariants() const { - if (is_zero()) + if(is_zero()) { return; } const GFpElement y2 = mY * mY; const GFpElement x3 = mX * mX * mX; - if (mZ.get_value() == BigInt(1)) + if(mZ.get_value() == BigInt(1)) { GFpElement ax = mC.get_a() * mX; if(y2 != (x3 + ax + mC.get_b())) @@ -811,16 +423,13 @@ void PointGFp::check_invariants() const } - mZpow2 = mZ * mZ; - mZpow2_set = true; - mZpow3 = mZpow2 * mZ; - mZpow3_set = true; - mAZpow4 = mZpow3 * mZ * mC.get_a(); - mAZpow4_set = true; - const GFpElement aXZ4 = mAZpow4 * mX; - const GFpElement bZ6 = mC.get_b() * mZpow3 * mZpow3; + GFpElement Zpow2 = mZ * mZ; + GFpElement Zpow3 = Zpow2 * mZ; + GFpElement AZpow4 = Zpow3 * mZ * mC.get_a(); + const GFpElement aXZ4 = AZpow4 * mX; + const GFpElement bZ6 = mC.get_b() * Zpow3 * Zpow3; - if (y2 != (x3 + aXZ4 + bZ6)) + if(y2 != (x3 + aXZ4 + bZ6)) throw Illegal_Point(); } @@ -831,12 +440,6 @@ void PointGFp::swap(PointGFp& other) mX.swap(other.mX); mY.swap(other.mY); mZ.swap(other.mZ); - mZpow2.swap(other.mZpow2); - mZpow3.swap(other.mZpow3); - mAZpow4.swap(other.mAZpow4); - std::swap<bool>(mZpow2_set, other.mZpow2_set); - std::swap<bool>(mZpow3_set, other.mZpow3_set); - std::swap<bool>(mAZpow4_set, other.mAZpow4_set); } PointGFp mult2(const PointGFp& point) @@ -846,11 +449,11 @@ PointGFp mult2(const PointGFp& point) bool operator==(const PointGFp& lhs, PointGFp const& rhs) { - if (lhs.is_zero() && rhs.is_zero()) + if(lhs.is_zero() && rhs.is_zero()) { return true; } - if ((lhs.is_zero() && !rhs.is_zero()) || (!lhs.is_zero() && rhs.is_zero())) + if((lhs.is_zero() && !rhs.is_zero()) || (!lhs.is_zero() && rhs.is_zero())) { return false; } @@ -906,22 +509,22 @@ PointGFp mult_point_secure(const PointGFp& point, const BigInt& scalar, SecureVector<byte> EC2OSP(const PointGFp& point, byte format) { SecureVector<byte> result; - if (format == PointGFp::UNCOMPRESSED) + if(format == PointGFp::UNCOMPRESSED) { result = encode_uncompressed(point); } - else if (format == PointGFp::COMPRESSED) + else if(format == PointGFp::COMPRESSED) { result = encode_compressed(point); } - else if (format == PointGFp::HYBRID) + else if(format == PointGFp::HYBRID) { result = encode_hybrid(point); } else { - throw Format_Error("illegal point encoding format specification"); + throw Invalid_Argument("illegal point encoding format specification"); } return result; } @@ -929,7 +532,7 @@ SecureVector<byte> encode_compressed(const PointGFp& point) { - if (point.is_zero()) + if(point.is_zero()) { SecureVector<byte> result (1); result[0] = 0; @@ -938,7 +541,7 @@ SecureVector<byte> encode_compressed(const PointGFp& point) } u32bit l = point.get_curve().get_p().bits(); int dummy = l & 7; - if (dummy != 0) + if(dummy != 0) { l += 8 - dummy; } @@ -949,7 +552,7 @@ SecureVector<byte> encode_compressed(const PointGFp& point) SecureVector<byte> bX = BigInt::encode_1363(x, l); result.copy(1, bX.begin(), bX.size()); BigInt y = point.get_affine_y().get_value(); - if (y.get_bit(0)) + if(y.get_bit(0)) { result[0] |= 1; } @@ -959,7 +562,7 @@ SecureVector<byte> encode_compressed(const PointGFp& point) SecureVector<byte> encode_uncompressed(const PointGFp& point) { - if (point.is_zero()) + if(point.is_zero()) { SecureVector<byte> result (1); result[0] = 0; @@ -967,7 +570,7 @@ SecureVector<byte> encode_uncompressed(const PointGFp& point) } u32bit l = point.get_curve().get_p().bits(); int dummy = l & 7; - if (dummy != 0) + if(dummy != 0) { l += 8 - dummy; } @@ -986,7 +589,7 @@ SecureVector<byte> encode_uncompressed(const PointGFp& point) SecureVector<byte> encode_hybrid(const PointGFp& point) { - if (point.is_zero()) + if(point.is_zero()) { SecureVector<byte> result (1); result[0] = 0; @@ -994,7 +597,7 @@ SecureVector<byte> encode_hybrid(const PointGFp& point) } u32bit l = point.get_curve().get_p().bits(); int dummy = l & 7; - if (dummy != 0) + if(dummy != 0) { l += 8 - dummy; } @@ -1007,7 +610,7 @@ SecureVector<byte> encode_hybrid(const PointGFp& point) SecureVector<byte> bY = BigInt::encode_1363(y, l); result.copy(1, bX.begin(), bX.size()); result.copy(l+1, bY.begin(), bY.size()); - if (y.get_bit(0)) + if(y.get_bit(0)) { result[0] |= 1; } @@ -1016,7 +619,7 @@ SecureVector<byte> encode_hybrid(const PointGFp& point) PointGFp OS2ECP(MemoryRegion<byte> const& os, const CurveGFp& curve) { - if (os.size() == 1 && os[0] == 0) + if(os.size() == 1 && os[0] == 0) { return PointGFp(curve); // return zero } @@ -1038,10 +641,6 @@ PointGFp OS2ECP(MemoryRegion<byte> const& os, const CurveGFp& curve) bX = SecureVector<byte>(os.size() - 1); bX.copy(os.begin()+1, os.size()-1); - /* Problem wäre, wenn decode() das erste bit als Vorzeichen interpretiert. - *--------------------- - * AW(FS): decode() interpretiert das erste Bit nicht als Vorzeichen - */ bi_dec_x = BigInt::decode(bX, bX.size()); x = GFpElement(curve.get_p(), bi_dec_x); bool yMod2; @@ -1072,13 +671,13 @@ PointGFp OS2ECP(MemoryRegion<byte> const& os, const CurveGFp& curve) bX.copy(os.begin() + 1, l); bY.copy(os.begin()+1+l, l); yMod2 = (pc & 0x01) == 1; - if (!(PointGFp::decompress(yMod2, x, curve) == y)) + if(!(PointGFp::decompress(yMod2, x, curve) == y)) { throw Illegal_Point("error during decoding hybrid format"); } break; default: - throw Format_Error("encountered illegal format specification while decoding point"); + throw Invalid_Argument("encountered illegal format specification while decoding point"); } z = GFpElement(curve.get_p(), BigInt(1)); //assert((x.is_trf_to_mres() && x.is_use_montgm()) || !x.is_trf_to_mres()); @@ -1107,7 +706,7 @@ GFpElement PointGFp::decompress(bool yMod2, const GFpElement& x, throw Illegal_Point("error during decompression"); bool zMod2 = z.get_bit(0); - if ((zMod2 && ! yMod2) || (!zMod2 && yMod2)) + if((zMod2 && ! yMod2) || (!zMod2 && yMod2)) { z = curve.get_p() - z; } diff --git a/src/math/gfpmath/point_gfp.h b/src/math/gfpmath/point_gfp.h index 0c7bb8428..276635f56 100644 --- a/src/math/gfpmath/point_gfp.h +++ b/src/math/gfpmath/point_gfp.h @@ -2,7 +2,7 @@ * Arithmetic for point groups of elliptic curves over GF(p) * * (C) 2007 Martin Doering, Christoph Ludwig, Falko Strenzke -* 2008 Jack Lloyd +* 2008-2010 Jack Lloyd * * Distributed under the terms of the Botan license */ @@ -11,9 +11,6 @@ #define BOTAN_POINT_GFP_H__ #include <botan/curve_gfp.h> -#include <botan/gfp_element.h> -#include <botan/bigint.h> -#include <botan/exceptn.h> #include <vector> namespace Botan { @@ -24,7 +21,7 @@ struct BOTAN_DLL Illegal_Point : public Exception }; /** -* This class represents one point on a curve of GF(p). +* This class represents one point on a curve of GF(p) */ class BOTAN_DLL PointGFp { @@ -48,7 +45,7 @@ class BOTAN_DLL PointGFp * Construct the point O * @param curve The base curve */ - explicit PointGFp(const CurveGFp& curve); + PointGFp(const CurveGFp& curve); /** * Construct a point given its affine coordinates @@ -56,8 +53,9 @@ class BOTAN_DLL PointGFp * @param x affine x coordinate * @param y affine y coordinate */ - explicit PointGFp(const CurveGFp& curve, GFpElement const& x, - GFpElement const& y); + PointGFp(const CurveGFp& curve, + const GFpElement& x, + const GFpElement& y); /** * Construct a point given its jacobian projective coordinates @@ -66,28 +64,13 @@ class BOTAN_DLL PointGFp * @param y jacobian projective y coordinate * @param z jacobian projective y coordinate */ - explicit PointGFp(const CurveGFp& curve, GFpElement const& x, - GFpElement const& y, GFpElement const& z); - - /** - * copy constructor - * @param other the value to clone - */ - PointGFp(const PointGFp& other); - - /** - * assignment operator - * @param other The point to use as source for the assignment - */ - const PointGFp& operator=(const PointGFp& other); - - /** - * assign another point which is on the same curve as *this - * @param other The point to use as source for the assignment - */ - const PointGFp& assign_within_same_curve(const PointGFp& other); - + PointGFp(const CurveGFp& curve, + const GFpElement& x, + const GFpElement& y, + const GFpElement& z); + //PointGFp(const PointGFp& other) = default; + //PointGFp& operator=(const PointGFp& other) = default; /** * += Operator @@ -126,8 +109,7 @@ class BOTAN_DLL PointGFp */ PointGFp& mult_this_secure(const BigInt& scalar, const BigInt& point_order, - const BigInt& max_secr - ); + const BigInt& max_secr); /** * Negate internal value(*this *= -1 ) @@ -162,43 +144,43 @@ class BOTAN_DLL PointGFp * thus x and y have just the affine values. * @result *this */ - PointGFp const get_z_to_one() const; + PointGFp get_z_to_one() const; /** * Return base curve of this point * @result the curve over GF(p) of this point */ - CurveGFp const get_curve() const; + const CurveGFp& get_curve() const { return mC; } /** * get affine x coordinate * @result affine x coordinate */ - GFpElement const get_affine_x() const; + GFpElement get_affine_x() const; /** * get affine y coordinate * @result affine y coordinate */ - GFpElement const get_affine_y() const; + GFpElement get_affine_y() const; /** * get the jacobian projective x coordinate * @result jacobian projective x coordinate */ - GFpElement const get_jac_proj_x() const; + GFpElement get_jac_proj_x() const; /** * get the jacobian projective y coordinate * @result jacobian projective y coordinate */ - GFpElement const get_jac_proj_y() const; + GFpElement get_jac_proj_y() const; /** * get the jacobian projective z coordinate * @result jacobian projective z coordinate */ - GFpElement const get_jac_proj_z() const; + GFpElement get_jac_proj_z() const; /** * Is this the point at infinity? @@ -214,49 +196,19 @@ class BOTAN_DLL PointGFp */ void check_invariants() const; - /** - * swaps the states of *this and other, does not throw! + * swaps the states of *this and other, does not throw! * @param other the object to swap values with */ void swap(PointGFp& other); - /** - * Sets the shared pointer to the GFpModulus that will be - * held in *this, specifically the various members of *this. - * Warning: do not use this function unless you know in detail about - * the implications of using - * the shared GFpModulus objects! - * Do NOT spread a shared pointer to GFpModulus over different - * threads! - * @param mod a shared pointer to a GFpModulus that will - * be held in the members *this - */ - void set_shrd_mod(std::tr1::shared_ptr<GFpModulus> p_mod); - static GFpElement decompress(bool yMod2, GFpElement const& x, const CurveGFp& curve); private: - static const u32bit GFPEL_WKSP_SIZE = 9; - void ensure_worksp() const; - - inline std::tr1::shared_ptr<PointGFp> mult_loop(int l, const BigInt& m, - std::tr1::shared_ptr<PointGFp> H, - std::tr1::shared_ptr<PointGFp> tmp, - const PointGFp& P); - CurveGFp mC; mutable GFpElement mX; // NOTE: these values must be mutable (affine<->proj) mutable GFpElement mY; mutable GFpElement mZ; - mutable GFpElement mZpow2; // mZ^2 - mutable GFpElement mZpow3; // mZ^3 - mutable GFpElement mAZpow4; // mA*mZ^4 - mutable bool mZpow2_set; - mutable bool mZpow3_set; - mutable bool mAZpow4_set; - mutable std::tr1::shared_ptr<std::vector<GFpElement> > mp_worksp_gfp_el; - }; // relational operators diff --git a/src/math/numbertheory/powm_mnt.cpp b/src/math/numbertheory/powm_mnt.cpp index e356387c0..2d18ccdef 100644 --- a/src/math/numbertheory/powm_mnt.cpp +++ b/src/math/numbertheory/powm_mnt.cpp @@ -156,10 +156,9 @@ BigInt Montgomery_Exponentiator::execute() const Montgomery_Exponentiator::Montgomery_Exponentiator(const BigInt& mod, Power_Mod::Usage_Hints hints) { - if(!mod.is_positive()) - throw Exception("Montgomery_Exponentiator: modulus must be positive"); - if(mod.is_even()) - throw Exception("Montgomery_Exponentiator: modulus must be odd"); + // Montgomery reduction only works for positive odd moduli + if(!mod.is_positive() || mod.is_even()) + throw Invalid_Argument("Montgomery_Exponentiator: invalid modulus"); window_bits = 0; this->hints = hints; diff --git a/src/mutex/pthreads/mux_pthr.cpp b/src/mutex/pthreads/mux_pthr.cpp index 75a116fe8..165132239 100644 --- a/src/mutex/pthreads/mux_pthr.cpp +++ b/src/mutex/pthreads/mux_pthr.cpp @@ -28,19 +28,19 @@ Mutex* Pthread_Mutex_Factory::make() void lock() { if(pthread_mutex_lock(&mutex) != 0) - throw Exception("Pthread_Mutex::lock: Error occured"); + throw Invalid_State("Pthread_Mutex::lock: Error occured"); } void unlock() { if(pthread_mutex_unlock(&mutex) != 0) - throw Exception("Pthread_Mutex::unlock: Error occured"); + throw Invalid_State("Pthread_Mutex::unlock: Error occured"); } Pthread_Mutex() { if(pthread_mutex_init(&mutex, 0) != 0) - throw Exception("Pthread_Mutex: initialization failed"); + throw Invalid_State("Pthread_Mutex: initialization failed"); } ~Pthread_Mutex() diff --git a/src/pbe/pbes1/pbes1.cpp b/src/pbe/pbes1/pbes1.cpp index 1d851d1a5..36cfaa6b4 100644 --- a/src/pbe/pbes1/pbes1.cpp +++ b/src/pbe/pbes1/pbes1.cpp @@ -80,9 +80,9 @@ void PBE_PKCS5v15::set_key(const std::string& passphrase) { PKCS5_PBKDF1 pbkdf(hash_function->clone()); - pbkdf.set_iterations(iterations); - pbkdf.change_salt(salt, salt.size()); - SymmetricKey key_and_iv = pbkdf.derive_key(16, passphrase); + SymmetricKey key_and_iv = pbkdf.derive_key(16, passphrase, + &salt[0], salt.size(), + iterations); key.set(key_and_iv.begin(), 8); iv.set(key_and_iv.begin() + 8, 8); diff --git a/src/pbe/pbes2/pbes2.cpp b/src/pbe/pbes2/pbes2.cpp index bd24c449b..63772263f 100644 --- a/src/pbe/pbes2/pbes2.cpp +++ b/src/pbe/pbes2/pbes2.cpp @@ -87,9 +87,9 @@ void PBE_PKCS5v20::set_key(const std::string& passphrase) { PKCS5_PBKDF2 pbkdf(new HMAC(hash_function->clone())); - pbkdf.set_iterations(iterations); - pbkdf.change_salt(salt, salt.size()); - key = pbkdf.derive_key(key_length, passphrase).bits_of(); + key = pbkdf.derive_key(key_length, passphrase, + &salt[0], salt.size(), + iterations).bits_of(); } /** diff --git a/src/pk_pad/eme1/eme1.cpp b/src/pk_pad/eme1/eme1.cpp index 13f68f8e4..d99ffaf58 100644 --- a/src/pk_pad/eme1/eme1.cpp +++ b/src/pk_pad/eme1/eme1.cpp @@ -21,7 +21,7 @@ SecureVector<byte> EME1::pad(const byte in[], u32bit in_length, key_length /= 8; if(in_length > key_length - 2*HASH_LENGTH - 1) - throw Exception("EME1: Input is too large"); + throw Invalid_Argument("EME1: Input is too large"); SecureVector<byte> out(key_length); diff --git a/src/pubkey/dl_group/dl_group.cpp b/src/pubkey/dl_group/dl_group.cpp index a2e239783..7940e69b2 100644 --- a/src/pubkey/dl_group/dl_group.cpp +++ b/src/pubkey/dl_group/dl_group.cpp @@ -193,7 +193,7 @@ const BigInt& DL_Group::get_q() const { init_check(); if(q == 0) - throw Format_Error("DLP group has no q prime specified"); + throw Invalid_State("DLP group has no q prime specified"); return q; } @@ -325,7 +325,7 @@ BigInt DL_Group::make_dsa_generator(const BigInt& p, const BigInt& q) } if(g == 1) - throw Exception("DL_Group: Couldn't create a suitable generator"); + throw Internal_Error("DL_Group: Couldn't create a suitable generator"); return g; } diff --git a/src/pubkey/dlies/dlies.cpp b/src/pubkey/dlies/dlies.cpp index 3a3ab52ee..6ef3292e1 100644 --- a/src/pubkey/dlies/dlies.cpp +++ b/src/pubkey/dlies/dlies.cpp @@ -127,7 +127,7 @@ SecureVector<byte> DLIES_Decryptor::dec(const byte msg[], u32bit length) const mac->update(0); SecureVector<byte> T2 = mac->final(); if(T != T2) - throw Integrity_Failure("DLIES: message authentication failed"); + throw Decoding_Error("DLIES: message authentication failed"); xor_buf(C, K.begin() + mac_keylen, C.size()); diff --git a/src/pubkey/dsa/dsa.cpp b/src/pubkey/dsa/dsa.cpp index b0688ae0d..5be3e1d48 100644 --- a/src/pubkey/dsa/dsa.cpp +++ b/src/pubkey/dsa/dsa.cpp @@ -97,6 +97,8 @@ SecureVector<byte> DSA_PrivateKey::sign(const byte in[], u32bit length, { const BigInt& q = group_q(); + rng.add_entropy(in, length); + BigInt k; do k.randomize(rng, q.bits()); diff --git a/src/pubkey/ec_dompar/ec_dompar.cpp b/src/pubkey/ec_dompar/ec_dompar.cpp index 6c688f34e..3719153f0 100644 --- a/src/pubkey/ec_dompar/ec_dompar.cpp +++ b/src/pubkey/ec_dompar/ec_dompar.cpp @@ -564,18 +564,16 @@ EC_Domain_Params decode_ber_ec_dompar(SecureVector<byte> const& encoded) { BER_Decoder dec(encoded); BER_Object obj = dec.get_next_object(); - ASN1_Tag tag = obj.type_tag; - std::auto_ptr<EC_Domain_Params> p_result; - if(tag == OBJECT_ID) + if(obj.type_tag == OBJECT_ID) { OID dom_par_oid; BER_Decoder(encoded).decode(dom_par_oid); return EC_Domain_Params(get_ec_dompar(dom_par_oid.as_string())); } - else if(tag == SEQUENCE) + else if(obj.type_tag == SEQUENCE) return EC_Domain_Params(decode_ber_ec_dompar_explicit(encoded)); - else if(tag == NULL_TAG) + else if(obj.type_tag == NULL_TAG) throw Decoding_Error("cannot decode ECDSA parameters that are ImplicitCA"); throw Decoding_Error("encountered unexpected when trying to decode domain parameters"); diff --git a/src/pubkey/ecc_key/ecc_key.cpp b/src/pubkey/ecc_key/ecc_key.cpp index 677a5088e..b7f58eecc 100644 --- a/src/pubkey/ecc_key/ecc_key.cpp +++ b/src/pubkey/ecc_key/ecc_key.cpp @@ -134,9 +134,9 @@ void EC_PublicKey::set_parameter_encoding(EC_dompar_enc type) m_param_enc = type; } -/******************************** +/* * EC_PrivateKey -********************************/ +*/ void EC_PrivateKey::affirm_init() const // virtual { if(m_private_value == 0) diff --git a/src/pubkey/ecc_key/ecc_key.h b/src/pubkey/ecc_key/ecc_key.h index 0ca9a0e75..c1a227bf2 100644 --- a/src/pubkey/ecc_key/ecc_key.h +++ b/src/pubkey/ecc_key/ecc_key.h @@ -16,6 +16,7 @@ #include <botan/ec_dompar.h> #include <botan/x509_key.h> #include <botan/pkcs8.h> +#include <memory> namespace Botan { diff --git a/src/pubkey/ecdsa/ecdsa.cpp b/src/pubkey/ecdsa/ecdsa.cpp index 9d352c70f..6116f7b13 100644 --- a/src/pubkey/ecdsa/ecdsa.cpp +++ b/src/pubkey/ecdsa/ecdsa.cpp @@ -156,9 +156,9 @@ u32bit ECDSA_PublicKey::max_input_bits() const return mp_dom_pars->get_order().bits(); } -/************************* +/* * ECDSA_PrivateKey -*************************/ +*/ void ECDSA_PrivateKey::affirm_init() const // virtual { EC_PrivateKey::affirm_init(); diff --git a/src/pubkey/eckaeg/eckaeg.cpp b/src/pubkey/eckaeg/eckaeg.cpp index dc6eb925b..3e0f717e0 100644 --- a/src/pubkey/eckaeg/eckaeg.cpp +++ b/src/pubkey/eckaeg/eckaeg.cpp @@ -16,9 +16,9 @@ namespace Botan { -/********************************* +/* * ECKAEG_PublicKey -*********************************/ +*/ void ECKAEG_PublicKey::affirm_init() const // virtual { @@ -72,9 +72,9 @@ ECKAEG_PublicKey::ECKAEG_PublicKey(EC_Domain_Params const& dom_par, PointGFp con m_eckaeg_core = ECKAEG_Core(*mp_dom_pars, BigInt(0), *mp_public_point); } -/********************************* +/* * ECKAEG_PrivateKey -*********************************/ +*/ void ECKAEG_PrivateKey::affirm_init() const // virtual { EC_PrivateKey::affirm_init(); diff --git a/src/pubkey/pk_codecs/pkcs8.cpp b/src/pubkey/pk_codecs/pkcs8.cpp index f287e1e63..d0954df39 100644 --- a/src/pubkey/pk_codecs/pkcs8.cpp +++ b/src/pubkey/pk_codecs/pkcs8.cpp @@ -168,7 +168,7 @@ void encrypt_key(const Private_Key& key, const std::string& pass, const std::string& pbe_algo, X509_Encoding encoding) { - const std::string DEFAULT_PBE = "PBE-PKCS5v20(SHA-1,TripleDES/CBC)"; + const std::string DEFAULT_PBE = "PBE-PKCS5v20(SHA-1,AES-128/CBC)"; Pipe raw_key; raw_key.start_msg(); diff --git a/src/pubkey/pk_codecs/pkcs8.h b/src/pubkey/pk_codecs/pkcs8.h index 28008bdba..adfad0e63 100644 --- a/src/pubkey/pk_codecs/pkcs8.h +++ b/src/pubkey/pk_codecs/pkcs8.h @@ -82,9 +82,8 @@ BOTAN_DLL void encode(const Private_Key& key, Pipe& pipe, * @param pipe the pipe to feed the encoded key into * @param pass the password to use for encryption * @param rng the rng to use -* @param pbe_algo the name of the desired password-based encryption algorithm. -* Provide an empty string to use the default PBE defined in the configuration -* under base/default_pbe. +* @param pbe_algo the name of the desired password-based encryption algorithm; + if empty ("") a reasonable (portable/secure) default will be chosen. * @param enc the encoding type to use */ BOTAN_DLL void encrypt_key(const Private_Key& key, @@ -108,9 +107,8 @@ BOTAN_DLL std::string PEM_encode(const Private_Key& key); * @param key the key to encode * @param rng the rng to use * @param pass the password to use for encryption -* @param pbe_algo the name of the desired password-based encryption algorithm. -* Provide an empty string to use the default PBE defined in the configuration -* under base/default_pbe. +* @param pbe_algo the name of the desired password-based encryption algorithm; + if empty ("") a reasonable (portable/secure) default will be chosen. */ BOTAN_DLL std::string PEM_encode(const Private_Key& key, RandomNumberGenerator& rng, diff --git a/src/pubkey/pubkey.cpp b/src/pubkey/pubkey.cpp index 44e31159c..dc0a505f5 100644 --- a/src/pubkey/pubkey.cpp +++ b/src/pubkey/pubkey.cpp @@ -73,7 +73,7 @@ PK_Encryptor_MR_with_EME::enc(const byte msg[], message.set(msg, length); if(8*(message.size() - 1) + high_bit(message[0]) > key.max_input_bits()) - throw Exception("PK_Encryptor_MR_with_EME: Input is too large"); + throw Invalid_Argument("PK_Encryptor_MR_with_EME: Input is too large"); return key.encrypt(message, message.size(), rng); } @@ -113,11 +113,7 @@ SecureVector<byte> PK_Decryptor_MR_with_EME::dec(const byte msg[], } catch(Invalid_Argument) { - throw Exception("PK_Decryptor_MR_with_EME: Input is invalid"); - } - catch(Decoding_Error) - { - throw Exception("PK_Decryptor_MR_with_EME: Input is invalid"); + throw Decoding_Error("PK_Decryptor_MR_with_EME: Input is invalid"); } } @@ -331,7 +327,6 @@ bool PK_Verifier::check_signature(const byte sig[], u32bit length) to_string(sig_format)); } catch(Invalid_Argument) { return false; } - catch(Decoding_Error) { return false; } } /* diff --git a/src/rng/auto_rng/auto_rng.cpp b/src/rng/auto_rng/auto_rng.cpp index 5befc9d14..78a7ca21d 100644 --- a/src/rng/auto_rng/auto_rng.cpp +++ b/src/rng/auto_rng/auto_rng.cpp @@ -6,10 +6,8 @@ */ #include <botan/auto_rng.h> +#include <botan/libstate.h> #include <botan/parsing.h> -#include <botan/hmac.h> -#include <botan/sha2_32.h> -#include <botan/sha2_64.h> #if defined(BOTAN_HAS_RANDPOOL) #include <botan/randpool.h> @@ -23,10 +21,6 @@ #include <botan/x931_rng.h> #endif -#if defined(BOTAN_HAS_AES) - #include <botan/aes.h> -#endif - #if defined(BOTAN_HAS_ENTROPY_SRC_HIGH_RESOLUTION_TIMER) #include <botan/internal/hres_timer.h> #endif @@ -115,10 +109,18 @@ AutoSeeded_RNG::AutoSeeded_RNG(u32bit poll_bits) { rng = 0; + Algorithm_Factory& af = global_state().algorithm_factory(); + #if defined(BOTAN_HAS_HMAC_RNG) - rng = new HMAC_RNG(new HMAC(new SHA_512), new HMAC(new SHA_256)); + + rng = new HMAC_RNG(af.make_mac("HMAC(SHA-512)"), + af.make_mac("HMAC(SHA-256)")); + #elif defined(BOTAN_HAS_RANDPOOL) && defined(BOTAN_HAS_AES) - rng = new Randpool(new AES_256, new HMAC(new SHA_256)); + + rng = new Randpool(af.make_block_cipher("AES-256"), + af.make_mac("HMAC(SHA-256)")); + #endif if(!rng) @@ -126,7 +128,9 @@ AutoSeeded_RNG::AutoSeeded_RNG(u32bit poll_bits) /* If X9.31 is available, use it to wrap the other RNG as a failsafe */ #if defined(BOTAN_HAS_X931_RNG) && defined(BOTAN_HAS_AES) - rng = new ANSI_X931_RNG(new AES_256, rng); + + rng = new ANSI_X931_RNG(af.make_block_cipher("AES-256"), rng); + #endif add_entropy_sources(rng); diff --git a/src/rng/hmac_rng/hmac_rng.cpp b/src/rng/hmac_rng/hmac_rng.cpp index 995ec9259..84a7b1c13 100644 --- a/src/rng/hmac_rng/hmac_rng.cpp +++ b/src/rng/hmac_rng/hmac_rng.cpp @@ -6,7 +6,7 @@ */ #include <botan/hmac_rng.h> -#include <botan/loadstor.h> +#include <botan/get_byte.h> #include <botan/internal/xor_buf.h> #include <botan/internal/stl_util.h> #include <algorithm> diff --git a/src/rng/randpool/randpool.cpp b/src/rng/randpool/randpool.cpp index f6479b2dd..9a4d77e55 100644 --- a/src/rng/randpool/randpool.cpp +++ b/src/rng/randpool/randpool.cpp @@ -6,7 +6,7 @@ */ #include <botan/randpool.h> -#include <botan/loadstor.h> +#include <botan/get_byte.h> #include <botan/internal/xor_buf.h> #include <botan/internal/stl_util.h> #include <algorithm> diff --git a/src/s2k/info.txt b/src/s2k/info.txt index 1d5226524..861b6f760 100644 --- a/src/s2k/info.txt +++ b/src/s2k/info.txt @@ -1,4 +1,3 @@ <requires> -rng sym_algo </requires> diff --git a/src/s2k/pbkdf1/pbkdf1.cpp b/src/s2k/pbkdf1/pbkdf1.cpp index 04e3aa453..a8270e26f 100644 --- a/src/s2k/pbkdf1/pbkdf1.cpp +++ b/src/s2k/pbkdf1/pbkdf1.cpp @@ -6,22 +6,23 @@ */ #include <botan/pbkdf1.h> +#include <botan/exceptn.h> namespace Botan { /* * Return a PKCS#5 PBKDF1 derived key */ -OctetString PKCS5_PBKDF1::derive(u32bit key_len, - const std::string& passphrase, - const byte salt[], u32bit salt_size, - u32bit iterations) const +OctetString PKCS5_PBKDF1::derive_key(u32bit key_len, + const std::string& passphrase, + const byte salt[], u32bit salt_size, + u32bit iterations) const { if(iterations == 0) - throw Invalid_Argument("PKCS#5 PBKDF1: Invalid iteration count"); + throw Invalid_Argument("PKCS5_PBKDF1: Invalid iteration count"); if(key_len > hash->OUTPUT_LENGTH) - throw Exception("PKCS#5 PBKDF1: Requested output length too long"); + throw Invalid_Argument("PKCS5_PBKDF1: Requested output length too long"); hash->update(passphrase); hash->update(salt, salt_size); diff --git a/src/s2k/pbkdf1/pbkdf1.h b/src/s2k/pbkdf1/pbkdf1.h index 4e5cafdb0..053a2dbe1 100644 --- a/src/s2k/pbkdf1/pbkdf1.h +++ b/src/s2k/pbkdf1/pbkdf1.h @@ -22,6 +22,11 @@ class BOTAN_DLL PKCS5_PBKDF1 : public S2K std::string name() const; S2K* clone() const; + OctetString derive_key(u32bit output_len, + const std::string& passphrase, + const byte salt[], u32bit salt_len, + u32bit iterations) const; + /** * Create a PKCS #5 instance using the specified hash function. * @param hash a pointer to a hash function object to use @@ -33,9 +38,6 @@ class BOTAN_DLL PKCS5_PBKDF1 : public S2K ~PKCS5_PBKDF1() { delete hash; } private: - OctetString derive(u32bit, const std::string&, - const byte[], u32bit, u32bit) const; - HashFunction* hash; }; diff --git a/src/s2k/pbkdf2/pbkdf2.cpp b/src/s2k/pbkdf2/pbkdf2.cpp index 6f790c06b..f1fc6e29f 100644 --- a/src/s2k/pbkdf2/pbkdf2.cpp +++ b/src/s2k/pbkdf2/pbkdf2.cpp @@ -6,7 +6,7 @@ */ #include <botan/pbkdf2.h> -#include <botan/loadstor.h> +#include <botan/get_byte.h> #include <botan/internal/xor_buf.h> namespace Botan { @@ -14,10 +14,10 @@ namespace Botan { /* * Return a PKCS#5 PBKDF2 derived key */ -OctetString PKCS5_PBKDF2::derive(u32bit key_len, - const std::string& passphrase, - const byte salt[], u32bit salt_size, - u32bit iterations) const +OctetString PKCS5_PBKDF2::derive_key(u32bit key_len, + const std::string& passphrase, + const byte salt[], u32bit salt_size, + u32bit iterations) const { if(iterations == 0) throw Invalid_Argument("PKCS#5 PBKDF2: Invalid iteration count"); diff --git a/src/s2k/pbkdf2/pbkdf2.h b/src/s2k/pbkdf2/pbkdf2.h index 7510338bb..b6d231916 100644 --- a/src/s2k/pbkdf2/pbkdf2.h +++ b/src/s2k/pbkdf2/pbkdf2.h @@ -22,6 +22,11 @@ class BOTAN_DLL PKCS5_PBKDF2 : public S2K std::string name() const; S2K* clone() const; + OctetString derive_key(u32bit output_len, + const std::string& passphrase, + const byte salt[], u32bit salt_len, + u32bit iterations) const; + /** * Create a PKCS #5 instance using the specified message auth code * @param mac the MAC to use @@ -29,9 +34,6 @@ class BOTAN_DLL PKCS5_PBKDF2 : public S2K PKCS5_PBKDF2(MessageAuthenticationCode* mac); ~PKCS5_PBKDF2(); private: - OctetString derive(u32bit, const std::string&, - const byte[], u32bit, u32bit) const; - MessageAuthenticationCode* mac; }; diff --git a/src/s2k/pgps2k/pgp_s2k.cpp b/src/s2k/pgps2k/pgp_s2k.cpp index 86394d84d..49ff6892c 100644 --- a/src/s2k/pgps2k/pgp_s2k.cpp +++ b/src/s2k/pgps2k/pgp_s2k.cpp @@ -14,9 +14,10 @@ namespace Botan { /* * Derive a key using the OpenPGP S2K algorithm */ -OctetString OpenPGP_S2K::derive(u32bit key_len, const std::string& passphrase, - const byte salt_buf[], u32bit salt_size, - u32bit iterations) const +OctetString OpenPGP_S2K::derive_key(u32bit key_len, + const std::string& passphrase, + const byte salt_buf[], u32bit salt_size, + u32bit iterations) const { SecureVector<byte> key(key_len), hash_buf; diff --git a/src/s2k/pgps2k/pgp_s2k.h b/src/s2k/pgps2k/pgp_s2k.h index 00e95f7fa..7f25623f3 100644 --- a/src/s2k/pgps2k/pgp_s2k.h +++ b/src/s2k/pgps2k/pgp_s2k.h @@ -22,12 +22,14 @@ class BOTAN_DLL OpenPGP_S2K : public S2K std::string name() const; S2K* clone() const; + OctetString derive_key(u32bit output_len, + const std::string& passphrase, + const byte salt[], u32bit salt_len, + u32bit iterations) const; + OpenPGP_S2K(HashFunction* hash_in) : hash(hash_in) {} ~OpenPGP_S2K() { delete hash; } private: - OctetString derive(u32bit, const std::string&, - const byte[], u32bit, u32bit) const; - HashFunction* hash; }; diff --git a/src/s2k/s2k.cpp b/src/s2k/s2k.cpp deleted file mode 100644 index 42064529d..000000000 --- a/src/s2k/s2k.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/* -* S2K -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/s2k.h> - -namespace Botan { - -/* -* Derive a key from a passphrase -*/ -OctetString S2K::derive_key(u32bit key_len, - const std::string& passphrase) const - { - return derive(key_len, passphrase, salt, salt.size(), iterations()); - } - -/* -* Set the number of iterations -*/ -void S2K::set_iterations(u32bit i) - { - iter = i; - } - -/* -* Change the salt -*/ -void S2K::change_salt(const byte new_salt[], u32bit length) - { - salt.set(new_salt, length); - } - -/* -* Change the salt -*/ -void S2K::change_salt(const MemoryRegion<byte>& new_salt) - { - change_salt(new_salt.begin(), new_salt.size()); - } - -/* -* Create a new random salt -*/ -void S2K::new_random_salt(RandomNumberGenerator& rng, - u32bit length) - { - salt.resize(length); - rng.randomize(salt, length); - } - -} diff --git a/src/s2k/s2k.h b/src/s2k/s2k.h index 7af92519b..055ef8911 100644 --- a/src/s2k/s2k.h +++ b/src/s2k/s2k.h @@ -9,7 +9,6 @@ #define BOTAN_S2K_H__ #include <botan/symkey.h> -#include <botan/rng.h> namespace Botan { @@ -19,9 +18,9 @@ namespace Botan { class BOTAN_DLL S2K { public: + /** - * Create a copy of this object. - * @return an auto_ptr to a copy of this object + * @return a new instance of this same algorithm */ virtual S2K* clone() const = 0; @@ -39,62 +38,22 @@ class BOTAN_DLL S2K /** * Derive a key from a passphrase with this S2K object. It will use * the salt value and number of iterations configured in this object. - * @param key_len the desired length of the key to produce + * @param output_len the desired length of the key to produce * @param passphrase the password to derive the key from + * @param salt the randomly chosen salt + * @param salt_len length of salt in bytes + * @param iterations the number of iterations to use (use 10K or more) */ - OctetString derive_key(u32bit key_len, - const std::string& passphrase) const; - - /** - * Set the number of iterations for the one-way function during - * key generation. - * @param n the desired number of iterations - */ - void set_iterations(u32bit n); - - /** - * Set a new salt value. - * @param new_salt a byte array defining the new salt value - * @param len the length of the above byte array - */ - void change_salt(const byte new_salt[], u32bit len); - - /** - * Set a new salt value. - * @param new_salt the new salt value - */ - void change_salt(const MemoryRegion<byte>& new_salt); + virtual OctetString derive_key(u32bit output_len, + const std::string& passphrase, + const byte salt[], u32bit salt_len, + u32bit iterations) const = 0; - /** - * Create a new random salt value using the rng - * @param rng the random number generator to use - * @param len the desired length of the new salt value - */ - void new_random_salt(RandomNumberGenerator& rng, u32bit len); - - /** - * Get the number of iterations for the key derivation currently - * configured in this S2K object. - * @return the current number of iterations - */ - u32bit iterations() const { return iter; } - - /** - * Get the currently configured salt value of this S2K object. - * @return the current salt value - */ - SecureVector<byte> current_salt() const { return salt; } - - S2K() { iter = 0; } + S2K() {} virtual ~S2K() {} private: S2K(const S2K&) {} S2K& operator=(const S2K&) { return (*this); } - - virtual OctetString derive(u32bit, const std::string&, - const byte[], u32bit, u32bit) const = 0; - SecureVector<byte> salt; - u32bit iter; }; } diff --git a/src/selftest/selftest.cpp b/src/selftest/selftest.cpp index 291643f2c..215569cbb 100644 --- a/src/selftest/selftest.cpp +++ b/src/selftest/selftest.cpp @@ -198,89 +198,97 @@ void cipher_kat(Algorithm_Factory& af, * Perform Self Tests */ bool passes_self_tests(Algorithm_Factory& af) - { - try - { - cipher_kat(af, "DES", - "0123456789ABCDEF", "1234567890ABCDEF", - "4E6F77206973207468652074696D6520666F7220616C6C20", - "3FA40E8A984D48156A271787AB8883F9893D51EC4B563B53", - "E5C7CDDE872BF27C43E934008C389C0F683788499A7C05F6", - "F3096249C7F46E51A69E839B1A92F78403467133898EA622", - "F3096249C7F46E5135F24A242EEB3D3F3D6D5BE3255AF8C3", - "F3096249C7F46E51163A8CA0FFC94C27FA2F80F480B86F75"); - - cipher_kat(af, "TripleDES", - "385D7189A5C3D485E1370AA5D408082B5CCCCB5E19F2D90E", - "C141B5FCCD28DC8A", - "6E1BD7C6120947A464A6AAB293A0F89A563D8D40D3461B68", - "64EAAD4ACBB9CEAD6C7615E7C7E4792FE587D91F20C7D2F4", - "6235A461AFD312973E3B4F7AA7D23E34E03371F8E8C376C9", - "E26BA806A59B0330DE40CA38E77A3E494BE2B212F6DD624B", - "E26BA806A59B03307DE2BCC25A08BA40A8BA335F5D604C62", - "E26BA806A59B03303C62C2EFF32D3ACDD5D5F35EBCC53371"); - - cipher_kat(af, "AES-128", - "2B7E151628AED2A6ABF7158809CF4F3C", - "000102030405060708090A0B0C0D0E0F", - "6BC1BEE22E409F96E93D7E117393172A" - "AE2D8A571E03AC9C9EB76FAC45AF8E51", - "3AD77BB40D7A3660A89ECAF32466EF97" - "F5D3D58503B9699DE785895A96FDBAAF", - "7649ABAC8119B246CEE98E9B12E9197D" - "5086CB9B507219EE95DB113A917678B2", - "3B3FD92EB72DAD20333449F8E83CFB4A" - "C8A64537A0B3A93FCDE3CDAD9F1CE58B", - "3B3FD92EB72DAD20333449F8E83CFB4A" - "7789508D16918F03F53C52DAC54ED825", - "3B3FD92EB72DAD20333449F8E83CFB4A" - "010C041999E03F36448624483E582D0E"); - - hash_test(af, "SHA-1", - "", "DA39A3EE5E6B4B0D3255BFEF95601890AFD80709"); - - hash_test(af, "SHA-1", - "616263", "A9993E364706816ABA3E25717850C26C9CD0D89D"); - - hash_test(af, "SHA-1", - "6162636462636465636465666465666765666768666768696768696A" - "68696A6B696A6B6C6A6B6C6D6B6C6D6E6C6D6E6F6D6E6F706E6F7071", - "84983E441C3BD26EBAAE4AA1F95129E5E54670F1"); - - mac_test(af, "HMAC(SHA-1)", - "4869205468657265", - "B617318655057264E28BC0B6FB378C8EF146BE00", - "0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B"); - - hash_test(af, "SHA-256", - "", - "E3B0C44298FC1C149AFBF4C8996FB924" - "27AE41E4649B934CA495991B7852B855"); - - hash_test(af, "SHA-256", - "616263", - "BA7816BF8F01CFEA414140DE5DAE2223" - "B00361A396177A9CB410FF61F20015AD"); - - hash_test(af, "SHA-256", - "6162636462636465636465666465666765666768666768696768696A" - "68696A6B696A6B6C6A6B6C6D6B6C6D6E6C6D6E6F6D6E6F706E6F7071", - "248D6A61D20638B8E5C026930C3E6039" - "A33CE45964FF2167F6ECEDD419DB06C1"); - - mac_test(af, "HMAC(SHA-256)", - "4869205468657265", - "198A607EB44BFBC69903A0F1CF2BBDC5" - "BA0AA3F3D9AE3C1C7A3B1696A0B68CF7", - "0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B" - "0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B"); - } - catch(Self_Test_Failure) - { - return false; - } + { + try + { + confirm_startup_self_tests(af); + } + catch(Self_Test_Failure) + { + return false; + } - return true; + return true; + } + +/* +* Perform Self Tests +*/ +void confirm_startup_self_tests(Algorithm_Factory& af) + { + cipher_kat(af, "DES", + "0123456789ABCDEF", "1234567890ABCDEF", + "4E6F77206973207468652074696D6520666F7220616C6C20", + "3FA40E8A984D48156A271787AB8883F9893D51EC4B563B53", + "E5C7CDDE872BF27C43E934008C389C0F683788499A7C05F6", + "F3096249C7F46E51A69E839B1A92F78403467133898EA622", + "F3096249C7F46E5135F24A242EEB3D3F3D6D5BE3255AF8C3", + "F3096249C7F46E51163A8CA0FFC94C27FA2F80F480B86F75"); + + cipher_kat(af, "TripleDES", + "385D7189A5C3D485E1370AA5D408082B5CCCCB5E19F2D90E", + "C141B5FCCD28DC8A", + "6E1BD7C6120947A464A6AAB293A0F89A563D8D40D3461B68", + "64EAAD4ACBB9CEAD6C7615E7C7E4792FE587D91F20C7D2F4", + "6235A461AFD312973E3B4F7AA7D23E34E03371F8E8C376C9", + "E26BA806A59B0330DE40CA38E77A3E494BE2B212F6DD624B", + "E26BA806A59B03307DE2BCC25A08BA40A8BA335F5D604C62", + "E26BA806A59B03303C62C2EFF32D3ACDD5D5F35EBCC53371"); + + cipher_kat(af, "AES-128", + "2B7E151628AED2A6ABF7158809CF4F3C", + "000102030405060708090A0B0C0D0E0F", + "6BC1BEE22E409F96E93D7E117393172A" + "AE2D8A571E03AC9C9EB76FAC45AF8E51", + "3AD77BB40D7A3660A89ECAF32466EF97" + "F5D3D58503B9699DE785895A96FDBAAF", + "7649ABAC8119B246CEE98E9B12E9197D" + "5086CB9B507219EE95DB113A917678B2", + "3B3FD92EB72DAD20333449F8E83CFB4A" + "C8A64537A0B3A93FCDE3CDAD9F1CE58B", + "3B3FD92EB72DAD20333449F8E83CFB4A" + "7789508D16918F03F53C52DAC54ED825", + "3B3FD92EB72DAD20333449F8E83CFB4A" + "010C041999E03F36448624483E582D0E"); + + hash_test(af, "SHA-1", + "", "DA39A3EE5E6B4B0D3255BFEF95601890AFD80709"); + + hash_test(af, "SHA-1", + "616263", "A9993E364706816ABA3E25717850C26C9CD0D89D"); + + hash_test(af, "SHA-1", + "6162636462636465636465666465666765666768666768696768696A" + "68696A6B696A6B6C6A6B6C6D6B6C6D6E6C6D6E6F6D6E6F706E6F7071", + "84983E441C3BD26EBAAE4AA1F95129E5E54670F1"); + + mac_test(af, "HMAC(SHA-1)", + "4869205468657265", + "B617318655057264E28BC0B6FB378C8EF146BE00", + "0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B"); + + hash_test(af, "SHA-256", + "", + "E3B0C44298FC1C149AFBF4C8996FB924" + "27AE41E4649B934CA495991B7852B855"); + + hash_test(af, "SHA-256", + "616263", + "BA7816BF8F01CFEA414140DE5DAE2223" + "B00361A396177A9CB410FF61F20015AD"); + + hash_test(af, "SHA-256", + "6162636462636465636465666465666765666768666768696768696A" + "68696A6B696A6B6C6A6B6C6D6B6C6D6E6C6D6E6F6D6E6F706E6F7071", + "248D6A61D20638B8E5C026930C3E6039" + "A33CE45964FF2167F6ECEDD419DB06C1"); + + mac_test(af, "HMAC(SHA-256)", + "4869205468657265", + "198A607EB44BFBC69903A0F1CF2BBDC5" + "BA0AA3F3D9AE3C1C7A3B1696A0B68CF7", + "0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B" + "0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B"); } } diff --git a/src/selftest/selftest.h b/src/selftest/selftest.h index 4cb6e23d7..df71e6f8e 100644 --- a/src/selftest/selftest.h +++ b/src/selftest/selftest.h @@ -18,6 +18,8 @@ namespace Botan { /* * Self Tests */ +BOTAN_DLL void confirm_startup_self_tests(Algorithm_Factory& af); + BOTAN_DLL bool passes_self_tests(Algorithm_Factory& af); BOTAN_DLL std::map<std::string, bool> diff --git a/src/stream/stream_cipher.h b/src/stream/stream_cipher.h index 29c16c8b5..cb6fb3481 100644 --- a/src/stream/stream_cipher.h +++ b/src/stream/stream_cipher.h @@ -42,8 +42,8 @@ class BOTAN_DLL StreamCipher : public SymmetricAlgorithm virtual void set_iv(const byte[], u32bit iv_len) { if(iv_len) - throw Exception("The stream cipher " + name() + - " does not support resyncronization"); + throw Invalid_Argument("The stream cipher " + name() + + " does not support resyncronization"); } /** diff --git a/src/utils/bswap.h b/src/utils/bswap.h index 96ec4982a..fcb0fa7ea 100644 --- a/src/utils/bswap.h +++ b/src/utils/bswap.h @@ -16,10 +16,6 @@ #include <emmintrin.h> #endif -#if defined(BOTAN_TARGET_CPU_HAS_SSSE3) - #include <tmmintrin.h> -#endif - namespace Botan { /* @@ -32,8 +28,7 @@ inline u16bit reverse_bytes(u16bit input) inline u32bit reverse_bytes(u32bit input) { -#if BOTAN_USE_GCC_INLINE_ASM && (defined(BOTAN_TARGET_ARCH_IS_IA32) || \ - defined(BOTAN_TARGET_ARCH_IS_AMD64)) +#if BOTAN_USE_GCC_INLINE_ASM && defined(BOTAN_TARGET_CPU_IS_X86_FAMILY) // GCC-style inline assembly for x86 or x86-64 asm("bswapl %0" : "=r" (input) : "0" (input)); @@ -83,23 +78,7 @@ inline void bswap_4(T x[4]) x[3] = reverse_bytes(x[3]); } -#if defined(BOTAN_TARGET_CPU_HAS_SSSE3) - -template<> -inline void bswap_4(u32bit x[4]) - { - const __m128i bswap_mask = _mm_set_epi8( - 12, 13, 14, 15, - 8, 9, 10, 11, - 4, 5, 6, 7, - 0, 1, 2, 3); - - __m128i T = _mm_loadu_si128((const __m128i*)x); - T = _mm_shuffle_epi8(T, bswap_mask); - _mm_storeu_si128((__m128i*)x, T); - } - -#elif defined(BOTAN_TARGET_CPU_HAS_SSE2) +#if defined(BOTAN_TARGET_CPU_HAS_SSE2) template<> inline void bswap_4(u32bit x[4]) diff --git a/src/utils/cpuid.cpp b/src/utils/cpuid.cpp index 2ba7f9b77..8d801b75f 100644 --- a/src/utils/cpuid.cpp +++ b/src/utils/cpuid.cpp @@ -7,10 +7,14 @@ #include <botan/cpuid.h> #include <botan/types.h> -#include <botan/loadstor.h> +#include <botan/get_byte.h> #include <botan/mem_ops.h> -#if defined(BOTAN_TARGET_ARCH_IS_IA32) || defined(BOTAN_TARGET_ARCH_IS_AMD64) +#if defined(BOTAN_TARGET_OS_IS_DARWIN) + #include <sys/sysctl.h> +#endif + +#if defined(BOTAN_TARGET_CPU_IS_X86_FAMILY) #if defined(BOTAN_BUILD_COMPILER_IS_MSVC) @@ -64,6 +68,73 @@ u32bit get_x86_cache_line_size() return 32; // default cache line guess } +#if defined(BOTAN_TARGET_CPU_IS_PPC_FAMILY) + +bool altivec_check_sysctl() + { +#if defined(BOTAN_TARGET_OS_IS_DARWIN) + + // From Apple's docs + int sels[2] = { CTL_HW, HW_VECTORUNIT }; + int vector_type = 0; + size_t length = sizeof(vector_type); + int error = sysctl(sels, 2, &vector_type, &length, NULL, 0); + + if(error == 0 && vector_type > 0) + return true; +#endif + + return false; + } + +bool altivec_check_pvr_emul() + { + bool altivec_capable = false; + +#if defined(BOTAN_TARGET_OS_IS_LINUX) || defined(BOTAN_TARGET_OS_IS_NETBSD) + + /* + On PowerPC, MSR 287 is PVR, the Processor Version Number + Normally it is only accessible to ring 0, but Linux and NetBSD + (others, too, maybe?) will trap and emulate it for us. + + PVR identifiers for various AltiVec enabled CPUs. Taken from + PearPC and Linux sources, mostly. + */ + + const u16bit PVR_G4_7400 = 0x000C; + const u16bit PVR_G5_970 = 0x0039; + const u16bit PVR_G5_970FX = 0x003C; + const u16bit PVR_G5_970MP = 0x0044; + const u16bit PVR_G5_970GX = 0x0045; + const u16bit PVR_POWER6 = 0x003E; + const u16bit PVR_CELL_PPU = 0x0070; + + // Motorola produced G4s with PVR 0x800[0123C] (at least) + const u16bit PVR_G4_74xx_24 = 0x800; + + u32bit pvr = 0; + + asm volatile("mfspr %0, 287" : "=r" (pvr)); + + // Top 16 bit suffice to identify model + pvr >>= 16; + + altivec_capable |= (pvr == PVR_G4_7400); + altivec_capable |= ((pvr >> 4) == PVR_G4_74xx_24); + altivec_capable |= (pvr == PVR_G5_970); + altivec_capable |= (pvr == PVR_G5_970FX); + altivec_capable |= (pvr == PVR_G5_970MP); + altivec_capable |= (pvr == PVR_G5_970GX); + altivec_capable |= (pvr == PVR_POWER6); + altivec_capable |= (pvr == PVR_CELL_PPU); +#endif + + return altivec_capable; + } + +#endif + } /* @@ -105,58 +176,9 @@ bool CPUID::has_altivec() if(first_time) { -#if defined(BOTAN_TARGET_ARCH_IS_PPC) || defined(BOTAN_TARGET_ARCH_IS_PPC64) - - /* - PVR identifiers for various AltiVec enabled CPUs. Taken from - PearPC and Linux sources, mostly. - */ - const u16bit PVR_G4_7400 = 0x000C; - const u16bit PVR_G5_970 = 0x0039; - const u16bit PVR_G5_970FX = 0x003C; - const u16bit PVR_G5_970MP = 0x0044; - const u16bit PVR_G5_970GX = 0x0045; - const u16bit PVR_POWER6 = 0x003E; - const u16bit PVR_CELL_PPU = 0x0070; - - // Motorola produced G4s with PVR 0x800[0123C] (at least) - const u16bit PVR_G4_74xx_24 = 0x800; - - /* - On PowerPC, MSR 287 is PVR, the Processor Version Number - - Normally it is only accessible to ring 0, but Linux and NetBSD - (at least) will trap and emulate it for us. This is roughly 20x - saner than every other approach I've seen for AltiVec detection - (all of which are entirely OS specific, to boot). - - Apparently OS X doesn't support this, but then again OS X - doesn't really support PPC anymore, so I'm not worrying about it. - - For OSes that aren't (known to) support the emulation, skip the - call, leaving pvr as 0 which will cause all subsequent model - number checks to fail (and we'll assume no AltiVec) - */ - -#if defined(BOTAN_TARGET_OS_IS_LINUX) || defined(BOTAN_TARGET_OS_IS_NETBSD) - #define BOTAN_TARGET_OS_SUPPORTS_MFSPR_EMUL -#endif - - u32bit pvr = 0; - -#if defined(BOTAN_TARGET_OS_SUPPORTS_MFSPR_EMUL) - asm volatile("mfspr %0, 287" : "=r" (pvr)); -#endif - // Top 16 bit suffice to identify model - pvr >>= 16; - - altivec_capable |= (pvr == PVR_G4_7400); - altivec_capable |= ((pvr >> 8) == PVR_G4_74xx_24); - altivec_capable |= (pvr == PVR_G5_970); - altivec_capable |= (pvr == PVR_G5_970FX); - altivec_capable |= (pvr == PVR_G5_970MP); - altivec_capable |= (pvr == PVR_G5_970GX); - altivec_capable |= (pvr == PVR_CELL_PPU); +#if defined(BOTAN_TARGET_CPU_IS_PPC_FAMILY) + if(altivec_check_sysctl() || altivec_check_pvr_emul()) + altivec_capable = true; #endif first_time = false; diff --git a/src/utils/cpuid.h b/src/utils/cpuid.h index 2c9599899..1de97f129 100644 --- a/src/utils/cpuid.h +++ b/src/utils/cpuid.h @@ -21,7 +21,7 @@ class BOTAN_DLL CPUID CPUID_SSSE3_BIT = 41, CPUID_SSE41_BIT = 51, CPUID_SSE42_BIT = 52, - CPUID_INTEL_AES_BIT = 57, + CPUID_INTEL_AES_BIT = 57 }; /** @@ -66,12 +66,6 @@ class BOTAN_DLL CPUID { return ((x86_processor_flags() >> CPUID_INTEL_AES_BIT) & 1); } /** - * Check if the processor supports VIA's AES instructions - * (not implemented) - */ - static bool has_aes_via() { return false; } - - /** * Check if the processor supports AltiVec/VMX */ static bool has_altivec(); diff --git a/src/utils/debug.h b/src/utils/debug.h new file mode 100644 index 000000000..271e0047b --- /dev/null +++ b/src/utils/debug.h @@ -0,0 +1,37 @@ +/** +* Internal-use debugging functions for Botan +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#ifndef BOTAN_DEBUG_H__ +#define BOTAN_DEBUG_H__ + +#include <botan/secmem.h> +#include <cstdio> + +namespace Botan { + +namespace Debug { + +inline void print_vec(const std::string& name, + const byte array[], size_t array_len) + { + std::printf("%s = ", name.c_str()); + for(size_t i = 0; i != array_len; ++i) + std::printf("%02X", array[i]); + std::printf("\n"); + } + +inline void print_vec(const std::string& name, + const MemoryRegion<byte>& vec) + { + print_vec(name, &vec[0], vec.size()); + } + +} + +} + +#endif diff --git a/src/utils/exceptn.cpp b/src/utils/exceptn.cpp deleted file mode 100644 index 753d63424..000000000 --- a/src/utils/exceptn.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/* -* Exceptions -* (C) 1999-2007 Jack Lloyd -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/exceptn.h> -#include <botan/parsing.h> - -namespace Botan { - -/* -* Constructor for Invalid_Key_Length -*/ -Invalid_Key_Length::Invalid_Key_Length(const std::string& name, u32bit length) - { - set_msg(name + " cannot accept a key of length " + to_string(length)); - } - -/* -* Constructor for Invalid_Block_Size -*/ -Invalid_Block_Size::Invalid_Block_Size(const std::string& mode, - const std::string& pad) - { - set_msg("Padding method " + pad + " cannot be used with " + mode); - } - -/* -* Constructor for Invalid_IV_Length -*/ -Invalid_IV_Length::Invalid_IV_Length(const std::string& mode, u32bit bad_len) - { - set_msg("IV length " + to_string(bad_len) + " is invalid for " + mode); - } - -/* -* Constructor for Algorithm_Not_Found -*/ -Algorithm_Not_Found::Algorithm_Not_Found(const std::string& name) - { - set_msg("Could not find any algorithm named \"" + name + "\""); - } - -/* -* Constructor for Invalid_Algorithm_Name -*/ -Invalid_Algorithm_Name::Invalid_Algorithm_Name(const std::string& name) - { - set_msg("Invalid algorithm name: " + name); - } - -/* -* Constructor for Config_Error -*/ -Config_Error::Config_Error(const std::string& err, u32bit line) - { - set_msg("Config error at line " + to_string(line) + ": " + err); - } - -} diff --git a/src/utils/exceptn.h b/src/utils/exceptn.h index a55d842bc..86efebc7c 100644 --- a/src/utils/exceptn.h +++ b/src/utils/exceptn.h @@ -1,6 +1,6 @@ /* * Exceptions -* (C) 1999-2007 Jack Lloyd +* (C) 1999-2009 Jack Lloyd * * Distributed under the terms of the Botan license */ @@ -9,32 +9,44 @@ #define BOTAN_EXCEPTION_H__ #include <botan/types.h> +#include <botan/parsing.h> #include <exception> +#include <stdexcept> #include <string> namespace Botan { +typedef std::runtime_error Exception; +typedef std::invalid_argument Invalid_Argument; + /* -* Exception Base Class +* Invalid_State Exception */ -class BOTAN_DLL Exception : public std::exception +struct BOTAN_DLL Invalid_State : public Exception { - public: - const char* what() const throw() { return msg.c_str(); } - Exception(const std::string& m = "Unknown error") { set_msg(m); } - virtual ~Exception() throw() {} - protected: - void set_msg(const std::string& m) { msg = "Botan: " + m; } - private: - std::string msg; + Invalid_State(const std::string& err) : + Exception(err) + {} }; /* -* Invalid_Argument Exception +* Lookup_Error Exception */ -struct BOTAN_DLL Invalid_Argument : public Exception +struct BOTAN_DLL Lookup_Error : public Exception { - Invalid_Argument(const std::string& err = "") : Exception(err) {} + Lookup_Error(const std::string& err) : + Exception(err) + {} + }; + +/* +* Internal_Error Exception +*/ +struct BOTAN_DLL Internal_Error : public Exception + { + Internal_Error(const std::string& err) : + Exception("Internal error: " + err) + {} }; /* @@ -42,7 +54,10 @@ struct BOTAN_DLL Invalid_Argument : public Exception */ struct BOTAN_DLL Invalid_Key_Length : public Invalid_Argument { - Invalid_Key_Length(const std::string&, u32bit); + Invalid_Key_Length(const std::string& name, u32bit length) : + Invalid_Argument(name + " cannot accept a key of length " + + to_string(length)) + {} }; /* @@ -50,7 +65,11 @@ struct BOTAN_DLL Invalid_Key_Length : public Invalid_Argument */ struct BOTAN_DLL Invalid_Block_Size : public Invalid_Argument { - Invalid_Block_Size(const std::string&, const std::string&); + Invalid_Block_Size(const std::string& mode, + const std::string& pad) : + Invalid_Argument("Padding method " + pad + + " cannot be used with " + mode) + {} }; /* @@ -58,15 +77,10 @@ struct BOTAN_DLL Invalid_Block_Size : public Invalid_Argument */ struct BOTAN_DLL Invalid_IV_Length : public Invalid_Argument { - Invalid_IV_Length(const std::string&, u32bit); - }; - -/* -* Invalid_State Exception -*/ -struct BOTAN_DLL Invalid_State : public Exception - { - Invalid_State(const std::string& err) : Exception(err) {} + Invalid_IV_Length(const std::string& mode, u32bit bad_len) : + Invalid_Argument("IV length " + to_string(bad_len) + + " is invalid for " + mode) + {} }; /* @@ -75,7 +89,8 @@ struct BOTAN_DLL Invalid_State : public Exception struct BOTAN_DLL PRNG_Unseeded : public Invalid_State { PRNG_Unseeded(const std::string& algo) : - Invalid_State("PRNG not seeded: " + algo) {} + Invalid_State("PRNG not seeded: " + algo) + {} }; /* @@ -84,57 +99,46 @@ struct BOTAN_DLL PRNG_Unseeded : public Invalid_State struct BOTAN_DLL Policy_Violation : public Invalid_State { Policy_Violation(const std::string& err) : - Invalid_State("Policy violation: " + err) {} - }; - -/* -* Lookup_Error Exception -*/ -struct BOTAN_DLL Lookup_Error : public Exception - { - Lookup_Error(const std::string& err) : Exception(err) {} + Invalid_State("Policy violation: " + err) + {} }; /* * Algorithm_Not_Found Exception */ -struct BOTAN_DLL Algorithm_Not_Found : public Exception +struct BOTAN_DLL Algorithm_Not_Found : public Lookup_Error { - Algorithm_Not_Found(const std::string&); - }; - -/* -* Format_Error Exception -*/ -struct BOTAN_DLL Format_Error : public Exception - { - Format_Error(const std::string& err = "") : Exception(err) {} + Algorithm_Not_Found(const std::string& name) : + Lookup_Error("Could not find any algorithm named \"" + name + "\"") + {} }; /* * Invalid_Algorithm_Name Exception */ -struct BOTAN_DLL Invalid_Algorithm_Name : public Format_Error +struct BOTAN_DLL Invalid_Algorithm_Name : public Invalid_Argument { - Invalid_Algorithm_Name(const std::string&); + Invalid_Algorithm_Name(const std::string& name): + Invalid_Argument("Invalid algorithm name: " + name) + {} }; /* * Encoding_Error Exception */ -struct BOTAN_DLL Encoding_Error : public Format_Error +struct BOTAN_DLL Encoding_Error : public Invalid_Argument { Encoding_Error(const std::string& name) : - Format_Error("Encoding error: " + name) {} + Invalid_Argument("Encoding error: " + name) {} }; /* * Decoding_Error Exception */ -struct BOTAN_DLL Decoding_Error : public Format_Error +struct BOTAN_DLL Decoding_Error : public Invalid_Argument { Decoding_Error(const std::string& name) : - Format_Error("Decoding error: " + name) {} + Invalid_Argument("Decoding error: " + name) {} }; /* @@ -152,44 +156,27 @@ struct BOTAN_DLL Invalid_OID : public Decoding_Error struct BOTAN_DLL Stream_IO_Error : public Exception { Stream_IO_Error(const std::string& err) : - Exception("I/O error: " + err) {} + Exception("I/O error: " + err) + {} }; /* -* Configuration Error Exception -*/ -struct BOTAN_DLL Config_Error : public Format_Error - { - Config_Error(const std::string& err) : - Format_Error("Config error: " + err) {} - Config_Error(const std::string&, u32bit); - }; - -/* -* Integrity Failure Exception -*/ -struct BOTAN_DLL Integrity_Failure : public Exception - { - Integrity_Failure(const std::string& err) : - Exception("Integrity failure: " + err) {} - }; - -/* -* Internal_Error Exception +* Self Test Failure Exception */ -struct BOTAN_DLL Internal_Error : public Exception +struct BOTAN_DLL Self_Test_Failure : public Internal_Error { - Internal_Error(const std::string& err) : - Exception("Internal error: " + err) {} + Self_Test_Failure(const std::string& err) : + Internal_Error("Self test failed: " + err) + {} }; /* -* Self Test Failure Exception +* Memory Allocation Exception */ -struct BOTAN_DLL Self_Test_Failure : public Internal_Error +struct BOTAN_DLL Memory_Exhaustion : public std::bad_alloc { - Self_Test_Failure(const std::string& err) : - Internal_Error("Self test failed: " + err) {} + const char* what() const throw() + { return "Ran out of memory, allocation failed"; } }; } diff --git a/src/utils/get_byte.h b/src/utils/get_byte.h new file mode 100644 index 000000000..fce87af83 --- /dev/null +++ b/src/utils/get_byte.h @@ -0,0 +1,27 @@ +/* +* Read out bytes +* (C) 1999-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#ifndef BOTAN_GET_BYTE_H__ +#define BOTAN_GET_BYTE_H__ + +#include <botan/types.h> + +namespace Botan { + +/* +* Byte Extraction Function +*/ +template<typename T> inline byte get_byte(u32bit byte_num, T input) + { + return static_cast<byte>( + input >> ((sizeof(T)-1-(byte_num&(sizeof(T)-1))) << 3) + ); + } + +} + +#endif diff --git a/src/utils/info.txt b/src/utils/info.txt index 93ece2e78..2fb3e79a5 100644 --- a/src/utils/info.txt +++ b/src/utils/info.txt @@ -5,7 +5,6 @@ load_on always <source> charset.cpp cpuid.cpp -exceptn.cpp mlock.cpp parsing.cpp time.cpp @@ -15,6 +14,7 @@ version.cpp <header:internal> bit_ops.h +debug.h mlock.h prefetch.h rounding.h @@ -35,6 +35,7 @@ time.h types.h ui.h version.h +get_byte.h </header:public> <libs> diff --git a/src/utils/loadstor.h b/src/utils/loadstor.h index bd2acc87d..ffd27540d 100644 --- a/src/utils/loadstor.h +++ b/src/utils/loadstor.h @@ -11,6 +11,7 @@ #include <botan/types.h> #include <botan/bswap.h> +#include <botan/get_byte.h> #include <cstring> #if BOTAN_TARGET_UNALIGNED_MEMORY_ACCESS_OK @@ -38,16 +39,6 @@ namespace Botan { /* -* Byte Extraction Function -*/ -template<typename T> inline byte get_byte(u32bit byte_num, T input) - { - return static_cast<byte>( - input >> ((sizeof(T)-1-(byte_num&(sizeof(T)-1))) << 3) - ); - } - -/* * Byte to Word Conversions */ inline u16bit make_u16bit(byte i0, byte i1) diff --git a/src/utils/mlock.cpp b/src/utils/mlock.cpp index bb3a38d4e..5d6fc3591 100644 --- a/src/utils/mlock.cpp +++ b/src/utils/mlock.cpp @@ -22,9 +22,9 @@ namespace Botan { bool lock_mem(void* ptr, u32bit bytes) { #if defined(BOTAN_TARGET_OS_HAS_POSIX_MLOCK) - return (mlock(ptr, bytes) == 0); + return (::mlock(ptr, bytes) == 0); #elif defined(BOTAN_TARGET_OS_HAS_WIN32_VIRTUAL_LOCK) - return (VirtualLock(ptr, bytes) != 0); + return (::VirtualLock(ptr, bytes) != 0); #else return false; #endif @@ -36,9 +36,9 @@ bool lock_mem(void* ptr, u32bit bytes) void unlock_mem(void* ptr, u32bit bytes) { #if defined(BOTAN_TARGET_OS_HAS_POSIX_MLOCK) - munlock(ptr, bytes); + ::munlock(ptr, bytes); #elif defined(BOTAN_TARGET_OS_HAS_WIN32_VIRTUAL_LOCK) - VirtualUnlock(ptr, bytes); + ::VirtualUnlock(ptr, bytes); #endif } diff --git a/src/utils/parsing.cpp b/src/utils/parsing.cpp index 58a8e0b38..e8259ac52 100644 --- a/src/utils/parsing.cpp +++ b/src/utils/parsing.cpp @@ -8,7 +8,7 @@ #include <botan/parsing.h> #include <botan/exceptn.h> #include <botan/charset.h> -#include <botan/loadstor.h> +#include <botan/get_byte.h> namespace Botan { @@ -168,7 +168,7 @@ std::vector<std::string> split_on(const std::string& str, char delim) } if(substr == "") - throw Format_Error("Unable to split string: " + str); + throw Invalid_Argument("Unable to split string: " + str); elems.push_back(substr); return elems; diff --git a/src/utils/prefetch.h b/src/utils/prefetch.h index 7afdbda0a..ede196692 100644 --- a/src/utils/prefetch.h +++ b/src/utils/prefetch.h @@ -32,7 +32,7 @@ inline void readwrite(const T* addr, u32bit length) const u32bit Ts_per_cache_line = CPUID::cache_line_size() / sizeof(T); for(u32bit i = 0; i <= length; i += Ts_per_cache_line) - __builtin_prefetch(addr + i, 0); + __builtin_prefetch(addr + i, 1); #endif } diff --git a/src/utils/simd_32/info.txt b/src/utils/simd_32/info.txt index 08cbdfa52..362e90235 100644 --- a/src/utils/simd_32/info.txt +++ b/src/utils/simd_32/info.txt @@ -1,7 +1,5 @@ define SIMD_32 -load_on always - <header:internal> simd_32.h simd_sse.h diff --git a/src/utils/simd_32/simd_32.h b/src/utils/simd_32/simd_32.h index 38ea078d0..4bd983f5e 100644 --- a/src/utils/simd_32/simd_32.h +++ b/src/utils/simd_32/simd_32.h @@ -27,4 +27,20 @@ #endif +namespace Botan { + +inline SIMD_32 rotate_left(SIMD_32 x, u32bit rot) + { + x.rotate_left(rot); + return x; + } + +inline SIMD_32 rotate_right(SIMD_32 x, u32bit rot) + { + x.rotate_right(rot); + return x; + } + +} + #endif diff --git a/src/utils/simd_32/simd_altivec.h b/src/utils/simd_32/simd_altivec.h index 9cc5c1068..859a48a5f 100644 --- a/src/utils/simd_32/simd_altivec.h +++ b/src/utils/simd_32/simd_altivec.h @@ -145,6 +145,11 @@ class SIMD_Altivec reg = vec_or(reg, other.reg); } + SIMD_Altivec operator&(const SIMD_Altivec& other) + { + return vec_and(reg, other.reg); + } + void operator&=(const SIMD_Altivec& other) { reg = vec_and(reg, other.reg); diff --git a/src/utils/simd_32/simd_scalar.h b/src/utils/simd_32/simd_scalar.h index 148b76c35..5cf1a11c3 100644 --- a/src/utils/simd_32/simd_scalar.h +++ b/src/utils/simd_32/simd_scalar.h @@ -142,6 +142,14 @@ class SIMD_Scalar R3 |= other.R3; } + SIMD_Scalar operator&(const SIMD_Scalar& other) + { + return SIMD_Scalar(R0 & other.R0, + R1 & other.R1, + R2 & other.R2, + R3 & other.R3); + } + void operator&=(const SIMD_Scalar& other) { R0 &= other.R0; diff --git a/src/utils/simd_32/simd_sse.h b/src/utils/simd_32/simd_sse.h index 31bbce2c7..0189c2e4d 100644 --- a/src/utils/simd_32/simd_sse.h +++ b/src/utils/simd_32/simd_sse.h @@ -101,6 +101,11 @@ class SIMD_SSE2 reg = _mm_or_si128(reg, other.reg); } + SIMD_SSE2 operator&(const SIMD_SSE2& other) + { + return _mm_and_si128(reg, other.reg); + } + void operator&=(const SIMD_SSE2& other) { reg = _mm_and_si128(reg, other.reg); diff --git a/src/wrap/python/filter.cpp b/src/wrap/python/filter.cpp index a678af9e5..48a3f84eb 100644 --- a/src/wrap/python/filter.cpp +++ b/src/wrap/python/filter.cpp @@ -1,7 +1,9 @@ -/************************************************* -* Boost.Python module definition * -* (C) 1999-2007 Jack Lloyd * -*************************************************/ +/* +* Boost.Python module definition +* (C) 1999-2007 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ #include <boost/python.hpp> using namespace boost::python; diff --git a/src/wrap/python/python_botan.h b/src/wrap/python/python_botan.h index 646c2e2c1..a7a2e505e 100644 --- a/src/wrap/python/python_botan.h +++ b/src/wrap/python/python_botan.h @@ -1,3 +1,8 @@ +/* +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ #ifndef BOTAN_BOOST_PYTHON_COMMON_H__ #define BOTAN_BOOST_PYTHON_COMMON_H__ diff --git a/src/wrap/python/x509.cpp b/src/wrap/python/x509.cpp index 90c2bba1c..c2c9533c8 100644 --- a/src/wrap/python/x509.cpp +++ b/src/wrap/python/x509.cpp @@ -1,7 +1,9 @@ -/************************************************* -* Boost.Python module definition * -* (C) 1999-2007 Jack Lloyd * -*************************************************/ +/* +* Boost.Python module definition +* (C) 2009 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ #include <botan/oids.h> #include <botan/pipe.h> diff --git a/src/wrap/sqlite/codec.cpp b/src/wrap/sqlite/codec.cpp new file mode 100644 index 000000000..5dfcea82e --- /dev/null +++ b/src/wrap/sqlite/codec.cpp @@ -0,0 +1,123 @@ +/* + * Codec class for SQLite3 encryption codec. + * (C) 2010 Olivier de Gaalon + * + * Distributed under the terms of the Botan license + */ + +#include "codec.h" +#include <botan/init.h> + +Codec::Codec(void *db) +{ + InitializeCodec(db); +} + +Codec::Codec(const Codec& other, void *db) +{ + //Only used to copy main db key for an attached db + InitializeCodec(db); + m_hasReadKey = other.m_hasReadKey; + m_hasWriteKey = other.m_hasWriteKey; + m_readKey = other.m_readKey; + m_ivReadKey = other.m_ivReadKey; + m_writeKey = other.m_writeKey; + m_ivWriteKey = other.m_ivWriteKey; +} + +void +Codec::InitializeCodec(void *db) +{ + bool botanInitialized = false; + Library_State* state = swap_global_state(0); + if(state) + { + botanInitialized = true; + swap_global_state(state); // should return NULL FIXME: what if not? + } + + if (!botanInitialized) + LibraryInitializer::initialize(); + + m_hasReadKey = false; + m_hasWriteKey = false; + m_db = db; + + m_encipherFilter = get_cipher(BLOCK_CIPHER_STR, ENCRYPTION); + m_decipherFilter = get_cipher(BLOCK_CIPHER_STR, DECRYPTION); + m_cmac = new MAC_Filter(MAC_STR); + m_encipherPipe.append(m_encipherFilter); + m_decipherPipe.append(m_decipherFilter); + m_macPipe.append(m_cmac); +} + +void +Codec::GenerateWriteKey(const char* userPassword, int passwordLength) +{ + S2K* s2k = get_s2k(S2K_STR); + s2k->set_iterations(S2K_ITERATIONS); + s2k->change_salt((const byte*)SALT_STR.c_str(), SALT_SIZE); + + SymmetricKey masterKey = + s2k->derive_key(KEY_SIZE + IV_DERIVATION_KEY_SIZE, std::string(userPassword, passwordLength)); + + m_writeKey = SymmetricKey(masterKey.bits_of(), KEY_SIZE); + m_ivWriteKey = SymmetricKey(masterKey.bits_of() + KEY_SIZE, IV_DERIVATION_KEY_SIZE); + + m_hasWriteKey = true; +} + +void +Codec::DropWriteKey() +{ + m_hasWriteKey = false; +} + +void +Codec::SetReadIsWrite() +{ + m_readKey = m_writeKey; + m_ivReadKey = m_ivWriteKey; + m_hasReadKey = m_hasWriteKey; +} + +void +Codec::SetWriteIsRead() +{ + m_writeKey = m_readKey; + m_ivWriteKey = m_ivReadKey; + m_hasWriteKey = m_hasReadKey; +} + +unsigned char * +Codec::Encrypt(int page, unsigned char* data, bool useWriteKey) +{ + memcpy(m_page, data, m_pageSize); + + m_encipherFilter->set_key(useWriteKey ? m_writeKey : m_readKey); + m_encipherFilter->set_iv(GetIVForPage(page, useWriteKey)); + m_encipherPipe.process_msg(m_page, m_pageSize); + m_encipherPipe.read(m_page, m_encipherPipe.remaining(Pipe::LAST_MESSAGE), Pipe::LAST_MESSAGE); + + return m_page; //return location of newly ciphered data +} + +void +Codec::Decrypt(int page, unsigned char* data) +{ + m_decipherFilter->set_key(m_readKey); + m_decipherFilter->set_iv(GetIVForPage(page, false)); + m_decipherPipe.process_msg(data, m_pageSize); + m_decipherPipe.read(data, m_decipherPipe.remaining(Pipe::LAST_MESSAGE), Pipe::LAST_MESSAGE); +} + +InitializationVector +Codec::GetIVForPage(u32bit page, bool useWriteKey) +{ + static unsigned char* intiv[4]; + store_le(page, (byte*)intiv); + m_cmac->set_key(useWriteKey ? m_ivWriteKey : m_ivReadKey); + m_macPipe.process_msg((byte*)intiv, 4); + return m_macPipe.read_all(Pipe::LAST_MESSAGE); +} + diff --git a/src/wrap/sqlite/codec.h b/src/wrap/sqlite/codec.h new file mode 100644 index 000000000..8b753be62 --- /dev/null +++ b/src/wrap/sqlite/codec.h @@ -0,0 +1,127 @@ +/* + * Codec class for SQLite3 encryption codec. + * (C) 2010 Olivier de Gaalon + * + * Distributed under the terms of the Botan license + */ + +#ifndef _CODEC_H_ +#define _CODEC_H_ + +#include <string> +#include <botan/botan.h> +#include <botan/loadstor.h> + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(__BORLANDC__) +#define __STDC__ 1 +#endif + +#include "./sqliteInt.h" + +#if defined(__BORLANDC__) +#undef __STDC__ +#endif + +/* ATTENTION: Macro similar to that in pager.c + * Needed because pager is forward declared when needed most + * TODO: Check in case of new version of SQLite + * ... but it's VERY unlikely to change (it'd break all past DBs) + */ +#include "./os.h" +#define CODEC_PAGER_MJ_PGNO(x) ((PENDING_BYTE/(x))+1) + +#ifdef __cplusplus +} /* End of the 'extern "C"' block */ +#endif + +using namespace std; +using namespace Botan; + +/*These constants can be used to tweak the codec behavior as follows + *Note that once you've encrypted a database with these settings, + *recompiling with any different settings will give you a library that + *cannot read that database, even given the same passphrase.*/ + +//BLOCK_CIPHER_STR: Cipher and mode used for encrypting the database +//make sure to add "/NoPadding" for modes that use padding schemes +const string BLOCK_CIPHER_STR = "Twofish/XTS"; + +//S2K_STR: Key derivation function used to derive both the encryption +//and IV derivation keys from the given database passphrase +const string S2K_STR = "PBKDF2(SHA-160)"; + +//SALT_STR: Hard coded salt used to derive the key from the passphrase. +const string SALT_STR = "&g#nB'9]"; + +//MAC_STR: CMAC used to derive the IV that is used for db page +//encryption +const string MAC_STR = "CMAC(Twofish)"; + +//S2K_ITERATIONS: Number of hash iterations used in the key derivation +//process. +const int S2K_ITERATIONS = 10000; + +//SALT_SIZE: Size of the salt in bytes (as given in SALT_STR) +const int SALT_SIZE = 64/8; //64 bit, 8 byte salt + +//KEY_SIZE: Size of the encryption key. Note that XTS splits the key +//between two ciphers, so if you're using XTS, double the intended key +//size. (ie, "AES-128/XTS" should have a 256 bit KEY_SIZE) +const int KEY_SIZE = 512/8; //512 bit, 64 byte key. (256 bit XTS key) + +//IV_DERIVATION_KEY_SIZE: Size of the key used with the CMAC (MAC_STR) +//above. +const int IV_DERIVATION_KEY_SIZE = 256/8; //256 bit, 32 byte key + +class Codec +{ +public: + Codec(void *db); + Codec(const Codec& other, void *db); + + void GenerateWriteKey(const char* userPassword, int passwordLength); + void DropWriteKey(); + void SetWriteIsRead(); + void SetReadIsWrite(); + + unsigned char* Encrypt(int page, unsigned char* data, bool useWriteKey); + void Decrypt(int page, unsigned char* data); + + void SetPageSize(int pageSize) { m_pageSize = pageSize; } + + bool HasReadKey() { return m_hasReadKey; } + bool HasWriteKey() { return m_hasWriteKey; } + void* GetDB() { return m_db; } + +private: + bool m_hasReadKey; + bool m_hasWriteKey; + + SymmetricKey + m_readKey, + m_writeKey, + m_ivReadKey, + m_ivWriteKey; + + Pipe + m_encipherPipe, + m_decipherPipe, + m_macPipe; + + Keyed_Filter *m_encipherFilter; + Keyed_Filter *m_decipherFilter; + MAC_Filter *m_cmac; + + int m_pageSize; + unsigned char m_page[SQLITE_MAX_PAGE_SIZE]; + void* m_db; + + InitializationVector GetIVForPage(u32bit page, bool useWriteKey); + void InitializeCodec(void *db); +}; + +#endif diff --git a/src/wrap/sqlite/codecext.cpp b/src/wrap/sqlite/codecext.cpp new file mode 100644 index 000000000..e542df975 --- /dev/null +++ b/src/wrap/sqlite/codecext.cpp @@ -0,0 +1,261 @@ +/* + * SQLite3 encryption extention codec + * (C) 2010 Olivier de Gaalon + * + * Distributed under the terms of the Botan license + */ + +#ifndef SQLITE_OMIT_DISKIO +#ifdef SQLITE_HAS_CODEC + +#include "codec.h" +#include "sqlite3.h" + +// Required to implement, called from pragma.c, guessing that "see" is related to the +// "SQLite Encryption Extension" (the semi-official, for-pay, encryption codec) +extern "C" +void sqlite3_activate_see(const char *info) { } + +// Free the encryption codec, called from pager.c (address passed in sqlite3PagerSetCodec) +extern "C" +void sqlite3PagerFreeCodec(void *pCodec) +{ + if (pCodec) + delete (Codec*) pCodec; +} + +// Report the page size to the codec, called from pager.c (address passed in sqlite3PagerSetCodec) +extern "C" +void sqlite3CodecSizeChange(void *pCodec, int pageSize, int nReserve) +{ + Codec* codec = (Codec*) pCodec; + codec->SetPageSize(pageSize); +} + +// Encrypt/Decrypt functionality, called by pager.c +extern "C" +void* sqlite3Codec(void* pCodec, void* data, Pgno nPageNum, int nMode) +{ + if (pCodec == NULL) //Db not encrypted + return data; + + Codec* codec = (Codec*) pCodec; + + try + { + switch(nMode) + { + case 0: // Undo a "case 7" journal file encryption + case 2: // Reload a page + case 3: // Load a page + if (codec->HasReadKey()) + codec->Decrypt(nPageNum, (unsigned char*) data); + break; + case 6: // Encrypt a page for the main database file + if (codec->HasWriteKey()) + data = codec->Encrypt(nPageNum, (unsigned char*) data, true); + break; + case 7: // Encrypt a page for the journal file + /* + *Under normal circumstances, the readkey is the same as the writekey. However, + *when the database is being rekeyed, the readkey is not the same as the writekey. + *(The writekey is the "destination key" for the rekey operation and the readkey + *is the key the db is currently encrypted with) + *Therefore, for case 7, when the rollback is being written, always encrypt using + *the database's readkey, which is guaranteed to be the same key that was used to + *read and write the original data. + */ + if (codec->HasReadKey()) + data = codec->Encrypt(nPageNum, (unsigned char*) data, false); + break; + } + } + catch(Botan::Exception e) + { + sqlite3Error((sqlite3*)codec->GetDB(), SQLITE_ERROR, "Botan Error: %s", e.what()); + } + + return data; +} + +//These functions are defined in pager.c +extern "C" void* sqlite3PagerGetCodec(Pager *pPager); +extern "C" void sqlite3PagerSetCodec( + Pager *pPager, + void *(*xCodec)(void*,void*,Pgno,int), + void (*xCodecSizeChng)(void*,int,int), + void (*xCodecFree)(void*), + void *pCodec +); + + +extern "C" +int sqlite3CodecAttach(sqlite3* db, int nDb, const void* zKey, int nKey) +{ + try { + if (zKey == NULL || nKey <= 0) + { + // No key specified, could mean either use the main db's encryption or no encryption + if (nDb != 0 && nKey < 0) + { + //Is an attached database, therefore use the key of main database, if main database is encrypted + Codec* mainCodec = (Codec*) sqlite3PagerGetCodec(sqlite3BtreePager(db->aDb[0].pBt)); + if (mainCodec != NULL) + { + Codec* codec = new Codec(*mainCodec, db); + sqlite3PagerSetCodec(sqlite3BtreePager(db->aDb[nDb].pBt), + sqlite3Codec, + sqlite3CodecSizeChange, + sqlite3PagerFreeCodec, codec); + } + } + } + else + { + // Key specified, setup encryption key for database + Codec* codec = new Codec(db); + codec->GenerateWriteKey((const char*) zKey, nKey); + codec->SetReadIsWrite(); + sqlite3PagerSetCodec(sqlite3BtreePager(db->aDb[nDb].pBt), + sqlite3Codec, + sqlite3CodecSizeChange, + sqlite3PagerFreeCodec, codec); + } + } + catch(Botan::Exception e) { + sqlite3Error(db, SQLITE_ERROR, "Botan Error: %s", e.what()); + return SQLITE_ERROR; + } + return SQLITE_OK; +} + +extern "C" +void sqlite3CodecGetKey(sqlite3* db, int nDb, void** zKey, int* nKey) +{ + // The unencrypted password is not stored for security reasons + // therefore always return NULL + *zKey = NULL; + *nKey = -1; +} + +extern "C" +int sqlite3_key(sqlite3 *db, const void *zKey, int nKey) +{ + // The key is only set for the main database, not the temp database + return sqlite3CodecAttach(db, 0, zKey, nKey); +} + +extern "C" +int sqlite3_rekey(sqlite3 *db, const void *zKey, int nKey) +{ + // Changes the encryption key for an existing database. + int rc = SQLITE_ERROR; + Btree* pbt = db->aDb[0].pBt; + Pager* pPager = sqlite3BtreePager(pbt); + Codec* codec = (Codec*) sqlite3PagerGetCodec(pPager); + + if ((zKey == NULL || nKey == 0) && codec == NULL) + { + // Database not encrypted and key not specified. Do nothing + return SQLITE_OK; + } + + if (codec == NULL) + { + // Database not encrypted, but key specified. Encrypt database + try { + codec = new Codec(db); + codec->GenerateWriteKey((const char*) zKey, nKey); + } catch (Botan::Exception e) { + sqlite3Error(db, SQLITE_ERROR, "Botan Error %s", e.what()); + return SQLITE_ERROR; + } + sqlite3PagerSetCodec(pPager, sqlite3Codec, sqlite3CodecSizeChange, sqlite3PagerFreeCodec, codec); + } + else if (zKey == NULL || nKey == 0) + { + // Database encrypted, but key not specified. Decrypt database + // Keep read key, drop write key + codec->DropWriteKey(); + } + else + { + // Database encrypted and key specified. Re-encrypt database with new key + // Keep read key, change write key to new key + try { + codec->GenerateWriteKey((const char*) zKey, nKey); + } catch (Botan::Exception e) { + sqlite3Error(db, SQLITE_ERROR, "Botan Error %s", e.what()); + return SQLITE_ERROR; + } + } + + // Start transaction + rc = sqlite3BtreeBeginTrans(pbt, 1); + if (rc == SQLITE_OK) + { + // Rewrite all pages using the new encryption key (if specified) + int nPageCount = -1; + int rc = sqlite3PagerPagecount(pPager, &nPageCount); + Pgno nPage = (Pgno) nPageCount; + int pageSize = sqlite3BtreeGetPageSize(pbt); + //Can't use SQLite3 macro here since pager is forward declared...sigh + Pgno nSkip = CODEC_PAGER_MJ_PGNO(pageSize); + DbPage *pPage; + + for (Pgno n = 1; rc == SQLITE_OK && n <= nPage; n++) + { + if (n == nSkip) + continue; + + rc = sqlite3PagerGet(pPager, n, &pPage); + + if (!rc) + { + rc = sqlite3PagerWrite(pPage); + sqlite3PagerUnref(pPage); + } + else + sqlite3Error(db, SQLITE_ERROR, "%s", "Error while rekeying database page. Transaction Canceled."); + } + } + else + sqlite3Error(db, SQLITE_ERROR, "%s", "Error beginning rekey transaction. Make sure that the current encryption key is correct."); + + if (rc == SQLITE_OK) + { + // All good, commit + rc = sqlite3BtreeCommit(pbt); + + if (rc == SQLITE_OK) + { + //Database rekeyed and committed successfully, update read key + if (codec->HasWriteKey()) + codec->SetReadIsWrite(); + else //No write key == no longer encrypted + sqlite3PagerSetCodec(pPager, NULL, NULL, NULL, NULL); + } + else + { + //FIXME: can't trigger this, not sure if rollback is needed, reference implementation didn't rollback + sqlite3Error(db, SQLITE_ERROR, "%s", "Could not commit rekey transaction."); + } + } + else + { + // Rollback, rekey failed + sqlite3BtreeRollback(pbt); + + // go back to read key + if (codec->HasReadKey()) + codec->SetWriteIsRead(); + else //Database wasn't encrypted to start with + sqlite3PagerSetCodec(pPager, NULL, NULL, NULL, NULL); + } + + return rc; +} + +#endif // SQLITE_HAS_CODEC + +#endif // SQLITE_OMIT_DISKIO diff --git a/src/wrap/sqlite/readme.txt b/src/wrap/sqlite/readme.txt new file mode 100644 index 000000000..e131f9e91 --- /dev/null +++ b/src/wrap/sqlite/readme.txt @@ -0,0 +1,36 @@ +Build instructions for Botan SQLite3 codec +--- + +1. Requires Botan 1.8.8 or later (earlier versions OK if you switch to + CBC mode from XTS) + +2. Download SQLite3 version 3.6.17 or later, get the version "as + extracted from the source control system", NOT the amalgamation. + +3. Apply the patch "sqlite.diff" [*]: + $ patch -p0 < ../sqlite.diff + patching file Makefile.in + patching file src/pager.c + + If the patch to pager.c fails for some reason (ie, changes in + SQLite3), all that need be done is remove the "static" keyword from + the functions sqlite3PagerSetCodec and sqlite3PagerGetCodec. + +5. Create a folder called "botan" in the SQLite3 src dir and copy + "codec.cpp", "codec.h", and "codecext.cpp" into it. + +6. As desired, edit the constants in codec.h to tweak the encryption + type to your needs. (Currently, Twofish/XTS with 256 bit key) + +7. Run ./configure in the SQLite3 root directory with the + "--disable-amalgamation" and (if desired) "--disable-shared" + arguments, and then run make. + +And to make sure it all worked... + +8. Make the test_sqlite.cpp file: + $ g++ test_sqlite.cpp -o test_sqlite -lbotan /path/to/libsqlite3.a +9. Run it + $ ./test_sqlite +10. Look for "All seems good" + diff --git a/src/wrap/sqlite/sqlite.diff b/src/wrap/sqlite/sqlite.diff new file mode 100644 index 000000000..1a3ef764c --- /dev/null +++ b/src/wrap/sqlite/sqlite.diff @@ -0,0 +1,77 @@ +--- Makefile.in.orig 2009-10-30 09:34:59.000000000 -0400 ++++ Makefile.in 2010-01-21 22:51:22.000000000 -0500 +@@ -133,7 +133,10 @@ + GCOV_LDFLAGS1 = -lgcov + USE_GCOV = @USE_GCOV@ + LTCOMPILE_EXTRAS += $(GCOV_CFLAGS$(USE_GCOV)) ++LTCOMPILE_EXTRAS += -DSQLITE_HAS_CODEC + LTLINK_EXTRAS += $(GCOV_LDFLAGS$(USE_GCOV)) ++LTLINK_EXTRAS += -lstdc++ ++LTLINK_EXTRAS += -lbotan + + + # The directory into which to store package information for +@@ -176,7 +179,8 @@ + table.lo tokenize.lo trigger.lo update.lo \ + util.lo vacuum.lo \ + vdbe.lo vdbeapi.lo vdbeaux.lo vdbeblob.lo vdbemem.lo \ +- walker.lo where.lo utf.lo vtab.lo ++ walker.lo where.lo utf.lo vtab.lo \ ++ codec.lo codecext.lo + + # Object files for the amalgamation. + # +@@ -275,7 +279,10 @@ + $(TOP)/src/vdbeInt.h \ + $(TOP)/src/vtab.c \ + $(TOP)/src/walker.c \ +- $(TOP)/src/where.c ++ $(TOP)/src/where.c \ ++ $(TOP)/src/botan/codec.cpp \ ++ $(TOP)/src/botan/codecext.cpp \ ++ $(TOP)/src/botan/codec.h + + # Generated source code files + # +@@ -411,6 +418,7 @@ + $(TOP)/src/sqlite3ext.h \ + $(TOP)/src/sqliteInt.h \ + $(TOP)/src/vdbe.h \ ++ $(TOP)/src/botan/codec.h \ + $(TOP)/src/vdbeInt.h \ + parse.h \ + config.h +@@ -622,6 +630,13 @@ + notify.lo: $(TOP)/src/notify.c $(HDR) + $(LTCOMPILE) $(TEMP_STORE) -c $(TOP)/src/notify.c + ++codec.lo: $(TOP)/src/botan/codec.cpp $(HDR) $(TOP)/src/botan/codec.h ++ $(LTCOMPILE) $(TEMP_STORE) -c $(TOP)/src/botan/codec.cpp ++ ++codecext.lo: $(TOP)/src/botan/codecext.cpp $(HDR) $(TOP)/src/botan/codec.h ++ $(LTCOMPILE) $(TEMP_STORE) -c $(TOP)/src/botan/codecext.cpp ++ ++ + pager.lo: $(TOP)/src/pager.c $(HDR) $(TOP)/src/pager.h + $(LTCOMPILE) $(TEMP_STORE) -c $(TOP)/src/pager.c + +--- src/pager.c.orig 2009-10-30 17:01:07.000000000 -0400 ++++ src/pager.c 2010-01-21 22:51:53.000000000 -0500 +@@ -5046,7 +5046,7 @@ + /* + ** Set or retrieve the codec for this pager + */ +-static void sqlite3PagerSetCodec( ++void sqlite3PagerSetCodec( + Pager *pPager, + void *(*xCodec)(void*,void*,Pgno,int), + void (*xCodecSizeChng)(void*,int,int), +@@ -5060,7 +5060,7 @@ + pPager->pCodec = pCodec; + pagerReportSize(pPager); + } +-static void *sqlite3PagerGetCodec(Pager *pPager){ ++void *sqlite3PagerGetCodec(Pager *pPager){ + return pPager->pCodec; + } + #endif diff --git a/src/wrap/sqlite/test_sqlite.cpp b/src/wrap/sqlite/test_sqlite.cpp new file mode 100644 index 000000000..8d8cad946 --- /dev/null +++ b/src/wrap/sqlite/test_sqlite.cpp @@ -0,0 +1,101 @@ +/* + * Quick and dirty test for SQLite3 encryption codec. + * (C) 2010 Olivier de Gaalon + * + * Distributed under the terms of the Botan license + */ + +#include <sqlite3.h> +#include <stdio.h> + +namespace SQL +{ + const char * CREATE_TABLE_TEST = + "create table 'test' (id INTEGER PRIMARY KEY, name TEXT, creationtime TEXT);"; + const char * CREATE_TABLE_TEST2 = + "create table 'test2' (id INTEGER PRIMARY KEY, name TEXT, creationtime TEXT);"; + const char * INSERT_INTO_TEST = + "INSERT INTO test (name, creationtime) VALUES ('widget', '1st time');\ + INSERT INTO test (name, creationtime) VALUES ('widget', '2nd time');\ + INSERT INTO test (name, creationtime) VALUES ('widget', '3rd time');\ + INSERT INTO test (name, creationtime) VALUES ('widget', '4th time');\ + INSERT INTO test (name, creationtime) VALUES ('widget', '5th time');"; + const char * INSERT_INTO_TEST2 = + "INSERT INTO test2 (name, creationtime) VALUES ('widget2', '1st time2');\ + INSERT INTO test2 (name, creationtime) VALUES ('widget2', '2nd time2');\ + INSERT INTO test2 (name, creationtime) VALUES ('widget2', '3rd time2');\ + INSERT INTO test2 (name, creationtime) VALUES ('widget2', '4th time2');\ + INSERT INTO test2 (name, creationtime) VALUES ('widget2', '5th time2');"; + const char * SELECT_FROM_TEST = + "SELECT * FROM test;"; + const char * SELECT_FROM_TEST2 = + "SELECT * FROM test2;"; +}; + +static int callback(void *NotUsed, int argc, char **argv, char **azColName){ + int i; + fprintf(stderr, "\t"); + for(i=0; i<argc; i++){ + fprintf(stderr, "%s = %s | ", azColName[i], argv[i] ? argv[i] : "NULL"); + } + fprintf(stderr, "\n"); + return 0; +} + +int main(int argc, char** argv) +{ + sqlite3 * db; + const char * key = "testkey"; + const char * dbname = "./testdb"; + int keylen = 7; + char * error=0; + + fprintf(stderr, "Creating Database \"%s\"\n", dbname); + int rc = sqlite3_open(dbname, &db); + if (rc != SQLITE_OK) { fprintf(stderr, "Can't open/create database: %s\n", sqlite3_errmsg(db)); return 1; } + + fprintf(stderr, "Keying Database with key \"%s\"\n", key); + rc = sqlite3_key(db, key, keylen); + if (rc != SQLITE_OK) { fprintf(stderr, "Can't key database: %s\n", sqlite3_errmsg(db)); return 1; } + + fprintf(stderr, "Creating table \"test\"\n"); + rc = sqlite3_exec(db, SQL::CREATE_TABLE_TEST, 0, 0, &error); + if (rc != SQLITE_OK) { fprintf(stderr, "SQL error: %s\n", error); return 1; } + + fprintf(stderr, "Creating table \"test2\"\n"); + rc = sqlite3_exec(db, SQL::CREATE_TABLE_TEST2, 0, 0, &error); + if (rc != SQLITE_OK) { fprintf(stderr, "SQL error: %s\n", error); return 1; } + + fprintf(stderr, "Inserting into table \"test\"\n"); + rc = sqlite3_exec(db, SQL::INSERT_INTO_TEST, 0, 0, &error); + if (rc != SQLITE_OK) { fprintf(stderr, "SQL error: %s\n", error); return 1; } + + fprintf(stderr, "Inserting into table \"test2\"\n"); + rc = sqlite3_exec(db, SQL::INSERT_INTO_TEST2, 0, 0, &error); + if (rc != SQLITE_OK) { fprintf(stderr, "SQL error: %s\n", error); return 1; } + + fprintf(stderr, "Closing Database \"%s\"\n", dbname); + sqlite3_close(db); + + fprintf(stderr, "Opening Database \"%s\"\n", dbname); + rc = sqlite3_open(dbname, &db); + if (rc != SQLITE_OK) { fprintf(stderr, "Can't open/create database: %s\n", sqlite3_errmsg(db)); return 1; } + + fprintf(stderr, "Keying Database with key \"%s\"\n", key); + rc = sqlite3_key(db, key, keylen); + if (rc != SQLITE_OK) { fprintf(stderr, "Can't key database: %s\n", sqlite3_errmsg(db)); return 1; } + + fprintf(stderr, "Selecting all from test\n"); + rc = sqlite3_exec(db, SQL::SELECT_FROM_TEST, callback, 0, &error); + if (rc != SQLITE_OK) { fprintf(stderr, "SQL error: %s\n", error); return 1; } + + fprintf(stderr, "Selecting all from test2\n"); + rc = sqlite3_exec(db, SQL::SELECT_FROM_TEST2, callback, 0, &error); + if (rc != SQLITE_OK) { fprintf(stderr, "SQL error: %s\n", error); return 1; } + + fprintf(stderr, "Closing Database \"%s\"\n", dbname); + sqlite3_close(db); + + fprintf(stderr, "All Seems Good \n"); + return 0; +} |