diff --git a/third_party/prio/LICENSE b/third_party/prio/LICENSE deleted file mode 100644 index a612ad9813b0..000000000000 --- a/third_party/prio/LICENSE +++ /dev/null @@ -1,373 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -1. Definitions --------------- - -1.1. "Contributor" - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -1.2. "Contributor Version" - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -1.3. "Contribution" - means Covered Software of a particular Contributor. - -1.4. "Covered Software" - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -1.5. "Incompatible With Secondary Licenses" - means - - (a) that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or - - (b) that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -1.6. "Executable Form" - means any form of the work other than Source Code Form. - -1.7. "Larger Work" - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -1.8. "License" - means this document. - -1.9. "Licensable" - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -1.10. "Modifications" - means any of the following: - - (a) any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or - - (b) any new file in Source Code Form that contains any Covered - Software. - -1.11. "Patent Claims" of a Contributor - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -1.12. "Secondary License" - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -1.13. "Source Code Form" - means the form of the work preferred for making modifications. - -1.14. "You" (or "Your") - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, "control" means (a) the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or (b) ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - -2. License Grants and Conditions --------------------------------- - -2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -(a) under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and - -(b) under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -(a) for any code that a Contributor has removed from Covered Software; - or - -(b) for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - -(c) under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - -3. Responsibilities -------------------- - -3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -(a) such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -(b) You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - -4. Inability to Comply Due to Statute or Regulation ---------------------------------------------------- - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: (a) comply with -the terms of this License to the maximum extent possible; and (b) -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - -5. Termination --------------- - -5.1. The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated (a) provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and (b) on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - -************************************************************************ -* * -* 6. Disclaimer of Warranty * -* ------------------------- * -* * -* Covered Software is provided under this License on an "as is" * -* basis, without warranty of any kind, either expressed, implied, or * -* statutory, including, without limitation, warranties that the * -* Covered Software is free of defects, merchantable, fit for a * -* particular purpose or non-infringing. The entire risk as to the * -* quality and performance of the Covered Software is with You. * -* Should any Covered Software prove defective in any respect, You * -* (not any Contributor) assume the cost of any necessary servicing, * -* repair, or correction. This disclaimer of warranty constitutes an * -* essential part of this License. No use of any Covered Software is * -* authorized under this License except under this disclaimer. * -* * -************************************************************************ - -************************************************************************ -* * -* 7. Limitation of Liability * -* -------------------------- * -* * -* Under no circumstances and under no legal theory, whether tort * -* (including negligence), contract, or otherwise, shall any * -* Contributor, or anyone who distributes Covered Software as * -* permitted above, be liable to You for any direct, indirect, * -* special, incidental, or consequential damages of any character * -* including, without limitation, damages for lost profits, loss of * -* goodwill, work stoppage, computer failure or malfunction, or any * -* and all other commercial damages or losses, even if such party * -* shall have been informed of the possibility of such damages. This * -* limitation of liability shall not apply to liability for death or * -* personal injury resulting from such party's negligence to the * -* extent applicable law prohibits such limitation. Some * -* jurisdictions do not allow the exclusion or limitation of * -* incidental or consequential damages, so this exclusion and * -* limitation may not apply to You. * -* * -************************************************************************ - -8. Litigation -------------- - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - -9. Miscellaneous ----------------- - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - -10. Versions of the License ---------------------------- - -10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary -Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice -------------------------------------------- - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - "Incompatible With Secondary Licenses" Notice ---------------------------------------------------------- - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. diff --git a/third_party/prio/README-mozilla b/third_party/prio/README-mozilla index 9a1a1d18ac76..8028e908aac0 100644 --- a/third_party/prio/README-mozilla +++ b/third_party/prio/README-mozilla @@ -1,7 +1,7 @@ This directory contains the Prio source from the upstream repo: https://github.com/mozilla/libprio -Current version: 1.0 [commit bfbcf1f95001047c61f4a29c3e68499b2f0c9f3b] +Current version: 1.1 [commit 488da2d729d73f18ed45add59edd18b257e1ceaa] UPDATING: @@ -14,4 +14,4 @@ To simplify this, the in-tree copy can be updated by running from within the third_party/libprio directory. If the collection of source files changes, manual updates to moz.build may be -needed as we don't use the upstream makefiles. \ No newline at end of file +needed as we don't use the upstream makefiles. diff --git a/third_party/prio/README.md b/third_party/prio/README.md deleted file mode 100644 index 6b449d4e4585..000000000000 --- a/third_party/prio/README.md +++ /dev/null @@ -1,136 +0,0 @@ -# libprio - A Prio library in C using NSS - -**Warning:** -We do our best to write bug-free code, but I have no doubt -that there are scary bugs, side-channel attacks, and memory leaks -lurking herein. - -**Important:** -We have not yet implemented the items -described in the "Security-Critical TODOs" section below. -Without these features, do not use the code in a production environment. - - -## Overview - -This is an implementation of the core cryptographic routines -for the [Prio system](https://crypto.stanford.edu/prio/) -for the private computation of aggregate statistics: -> "Prio: Private, Robust, and Scalable Computation of Aggregate Statistics"
-> by Henry Corrigan-Gibbs and Dan Boneh
-> USENIX Symposium on Networked Systems Design and Implementation
-> March 2017 -> -> Available online at: -> https://crypto.stanford.edu/prio/ - -**Usage scenario.** -The library implements the cryptographic routines necessary -for the following application scenario: -Each client holds a vector of boolean values. -Each client uses the library to encode her private vector into two -encoded packets—one for server A and one for server B. - -After receiving shares from a client, the servers can use the routines -implemented here to check whether the client-provided packets are -well formed. -(Without this check, a single malicious client can corrupt the -output of the computation.) - -After collecting data packets from many clients, the servers -can combine their state to learn how many clients had the -*i*th bit of their data vector set to `true` and how many -clients had the *i*th bit of their data vector set to `false`. -As long as at least one of the two servers is honest -(i.e., runs the correct code), -the servers learn *nothing else* about the clients' data, -under standard cryptographic assumptions. - -For example, the *i*th bit of the data vector could indicate -whether the client ever visited the *i*th-ranked website -in the Alexa Top 500. -The servers would learn how many clients visited each of the -Top 500 websites *without learning* which clients visited -which websites. - -**Efficiency considerations.** -The code makes no use of public-key crypto, so it should -be relatively fast. -When each a data packet is of length *N*, -all arithmetic is modulo a prime *p* (we use an 87-bit prime by default), -and "elements" are integers modulo *p*, -the dominant costs of the system are: -* **Client compute:** O(*N* log *N*) multiplications -* **Client-to-server communication:** 2*N* + O(1) elements
-* **Server compute:** O(*N* log *N*) multiplications to check each packet
- (NOTE: Using an optimization we haven't yet implemented, we can - drop this cost to O(*N*) multiplications per packet.) -* **Server-to-server communication:** O(1) elements -* **Server storage:** O(*N*) elements - -## Running the code - -You must first install -[NSS/NSPR](https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS), -[scons](http://scons.org/), and -[msgpack-c](https://github.com/msgpack/msgpack-c) version 2.1.5 (or newer?). -On Ubuntu, you can instal NSS and scons with: - - $ sudo apt install scons libnspr4-dev libnss3-dev - -and you will have to download [msgpack-c 2.1.5 or newer here](https://github.com/msgpack/msgpack-c/releases), -since the Ubuntu packages for msgpack are far out of date. - -For macOS using Homebrew: - $ brew install nss nspr scons msgpack - - $ export LDFLAGS="-L/usr/local/opt/nss/lib" - $ export CPPFLAGS="-I/usr/local/opt/nss/include -I/usr/local/opt/nspr/include/nspr" - -To compile the code, run: - - $ scons - -To run the test suite, execute: - - $ build/ptest/ptest -v - -To print debug messages while compiling: - - $ scons VERBOSE=1 - -To compile with debug symbols, run: - - $ scons BUILDTYPE=DEBUG - -To clean up the object and binary files, run: - - $ scons -c - -The files in this directory are: -```` -/build - Binaries, object files, etc. -/include - Exported header files - (Note: The public header is since - NSPR already has a file called .) -/mpi - NSS MPI bignum library -/pclient - Example code that uses the Prio library -/prio - Prio library core code -/ptest - Tests and test runner -```` - -## Optimizations and features not yet implemented -* **Server compute.** - By using a fast polynomial interpolation-and-evaluation - routine, we can reduce the cost of checking a single client - request from O(*N* log *N*) multiplications down to O(*N*) - multiplications, for a data packet of *N* items. -* **Differential privacy.** - It would be very straightforward to add some small amount of - noise to the final statistics to provide differential privacy. - If this would be useful, I can add it. -* **Misc.** - There are TODO notes scattered throughout code indicating - places for potential performance optimizations. - - diff --git a/third_party/prio/SConstruct b/third_party/prio/SConstruct deleted file mode 100644 index 43e7a1cac483..000000000000 --- a/third_party/prio/SConstruct +++ /dev/null @@ -1,41 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -import os -import SCons - -opts = Variables() -opts.AddVariables( - BoolVariable("DEBUG", "Make debug build", 1), - BoolVariable("VERBOSE", "Show full build information", 0)) - -env = Environment(options = opts, - ENV = os.environ) -if "CFLAGS" in os.environ: - env.Append(CFLAGS = SCons.Util.CLVar(os.getenv("CFLAGS"))) -if "CPPFLAGS" in os.environ: - env.Append(CPPFLAGS = SCons.Util.CLVar(os.getenv("CPPFLAGS"))) -if "CXXFLAGS" in os.environ: - env.Append(CXXFLAGS = SCons.Util.CLVar(os.getenv("CXXFLAGS"))) -if "LDFLAGS" in os.environ: - env.Append(LINKFLAGS = SCons.Util.CLVar(os.getenv("LDFLAGS"))) - -if env["DEBUG"]: - print "DEBUG MODE!" - env.Append(CPPFLAGS = [ "-g", "-DDEBUG"]) - -env.Append(LIBS = ["mprio", "mpi", "nss3", "nspr4"], \ - LIBPATH = ['#build/prio', "#build/mpi"], - CFLAGS = [ "-Wall", "-Werror", "-Wextra", "-O3", "-std=c99", - "-I/usr/include/nspr", "-Impi", "-DDO_PR_CLEANUP"]) - -env.Append(CPPPATH = ["#include", "#."]) -Export('env') - -SConscript('browser-test/SConscript', variant_dir='build/browser-test') -SConscript('mpi/SConscript', variant_dir='build/mpi') -SConscript('pclient/SConscript', variant_dir='build/pclient') -SConscript('prio/SConscript', variant_dir='build/prio') -SConscript('ptest/SConscript', variant_dir='build/ptest') - diff --git a/third_party/prio/browser-test/SConscript b/third_party/prio/browser-test/SConscript deleted file mode 100644 index 183f1c378b60..000000000000 --- a/third_party/prio/browser-test/SConscript +++ /dev/null @@ -1,19 +0,0 @@ -import sys - -Import('env') - -prio_env = env.Clone() - -src = [ - "main.c", -] - -libs = [ - "mprio", - "msgpackc", -] - -prio_env.Append(LIBS = libs) -prio_env.Install("encode-once.js") -prio_env.Program("browser-test", src) - diff --git a/third_party/prio/browser-test/encode-once.js b/third_party/prio/browser-test/encode-once.js deleted file mode 100644 index 817b109b805a..000000000000 --- a/third_party/prio/browser-test/encode-once.js +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2018, Henry Corrigan-Gibbs - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -ChromeUtils.import('resource://gre/modules/Services.jsm'); - -let [publicKeyA, publicKeyB, batchID, param1, param2, param3] = arguments; - -Services.prefs.setStringPref('prio.publicKeyA', publicKeyA); -Services.prefs.setStringPref('prio.publicKeyB', publicKeyB); - -async function test() { - let params = { - 'startupCrashDetected': Number(param1), - 'safeModeUsage': Number(param2), - 'browserIsUserDefault': Number(param3) - }; - - try { - let result = await PrioEncoder.encode(batchID, params); - - const toTypedArray = byteString => { - let u8Array = new Uint8Array(byteString.length); - for (let i in byteString) { - u8Array[i] = byteString.charCodeAt(i); - } - return u8Array; - } - - const toHexString = bytes => - bytes.reduce((str, byte) => str + byte.toString(16).padStart(2, '0') + ',', ''); - - console.log(toHexString(result.a) + '$' + toHexString(result.b)); - console.log(''); - } catch(e) { - console.log('Failure.', e); - console.log(v); - } -} - -test().then(); diff --git a/third_party/prio/browser-test/main.c b/third_party/prio/browser-test/main.c deleted file mode 100644 index 41d6d221365f..000000000000 --- a/third_party/prio/browser-test/main.c +++ /dev/null @@ -1,320 +0,0 @@ -/* - * Copyright (c) 2018, Henry Corrigan-Gibbs - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -#define _GNU_SOURCE - -#include -#include -#include -#include -#include - -#include "prio/encrypt.h" -#include "prio/util.h" - -static void -init_data (bool *data, int datalen) -{ - // The client's data submission is an arbitrary boolean vector. - for (int i=0; i < datalen; i++) { - // Arbitrary data - data[i] = rand () % 2; - } -} - -static SECStatus -read_string_from_hex (unsigned char **str_out, unsigned int *strLen, - const char *input, const char **new_input) -{ - SECStatus rv = SECSuccess; - *strLen = 0; - int read = 0; - int outCount = 0; - const char *inp = input; - - while (true) { - unsigned char byte = '\0'; - const int retval = sscanf(inp, "%02hhx,%n", &byte, &read); - if (retval < 1 || read != 3) { - break; - } - - inp += read; - (*str_out)[outCount] = byte; - outCount++; - *strLen = *strLen + 1; - } - - if (new_input) - *new_input = inp + 1; - - return rv; -} - -static SECStatus -read_browser_reply (FILE *infile, - unsigned char **for_server_a, unsigned int *aLen, - unsigned char **for_server_b, unsigned int *bLen) -{ - SECStatus rv = SECFailure; - char *raw_input = NULL; - size_t rawLen = 0; - - puts ("Getting line of input."); - P_CHECKCB (getline (&raw_input, &rawLen, infile) > 0); - puts ("Got line of input."); - - P_CHECKA (*for_server_a = malloc (rawLen * sizeof (unsigned char))); - P_CHECKA (*for_server_b = malloc (rawLen * sizeof (unsigned char))); - - *aLen = 0; - *bLen = 0; - - P_CHECKCB (rawLen > 14); - - // Header is 14 chars long - const char *new_input; - puts ("Reading string A"); - P_CHECKC (read_string_from_hex (for_server_a, aLen, raw_input + 14, &new_input)); - puts ("Read string A"); - - // Skip over for_server_a string and one-char delimeter - puts ("Reading string B"); - P_CHECKC (read_string_from_hex (for_server_b, bLen, new_input, NULL)); - puts ("Read string B"); - -cleanup: - if (raw_input) free (raw_input); - return rv; -} - -static int -verify_full (const char *path_to_xpcshell, int pathlen) -{ - SECStatus rv = SECSuccess; - - PublicKey pkA = NULL; - PublicKey pkB = NULL; - PrivateKey skA = NULL; - PrivateKey skB = NULL; - - PrioConfig cfg = NULL; - PrioServer sA = NULL; - PrioServer sB = NULL; - PrioVerifier vA = NULL; - PrioVerifier vB = NULL; - PrioPacketVerify1 p1A = NULL; - PrioPacketVerify1 p1B = NULL; - PrioPacketVerify2 p2A = NULL; - PrioPacketVerify2 p2B = NULL; - PrioTotalShare tA = NULL; - PrioTotalShare tB = NULL; - - FILE *shell = NULL; - int cmdlen = pathlen + 2*CURVE25519_KEY_LEN_HEX + 128; - char cmd[cmdlen]; - memset (cmd, 0, cmdlen); - - unsigned char *for_server_a = NULL; - unsigned char *for_server_b = NULL; - - const int seed = time (NULL); - srand (seed); - printf ("Using srand seed %d\n", seed); - - // Number of different boolean data fields we collect. - const int ndata = 3; - - //unsigned char batch_id_str[] = "abcde"; - unsigned char batch_id_str[32]; - memset (batch_id_str, 0, sizeof batch_id_str); - snprintf ((char *)batch_id_str, sizeof batch_id_str, "%d", rand()); - - bool data_items[ndata]; - unsigned long output[ndata]; - init_data (data_items, ndata); - - // Initialize NSS random number generator. - P_CHECKC (Prio_init ()); - - // Generate keypairs for servers - P_CHECKC (Keypair_new (&skA, &pkA)); - P_CHECKC (Keypair_new (&skB, &pkB)); - - // Export public keys to hex and print to stdout - unsigned char pk_hexA[CURVE25519_KEY_LEN_HEX+1]; - unsigned char pk_hexB[CURVE25519_KEY_LEN_HEX+1]; - P_CHECKC (PublicKey_export_hex (pkA, pk_hexA)); - P_CHECKC (PublicKey_export_hex (pkB, pk_hexB)); - - snprintf (cmd, cmdlen, "%s %s %s %s %s %d %d %d", - path_to_xpcshell, "encode-once.js", - pk_hexA, pk_hexB, batch_id_str, - data_items[0], data_items[1], data_items[2]); - - printf ("> %s\n", cmd); - P_CHECKA (shell = popen(cmd, "r")); - puts("Ran command."); - - // Use the default configuration parameters. - P_CHECKA (cfg = PrioConfig_new (ndata, pkA, pkB, batch_id_str, - strlen ((char *)batch_id_str))); - - PrioPRGSeed server_secret; - P_CHECKC (PrioPRGSeed_randomize (&server_secret)); - - // Initialize two server objects. The role of the servers need not - // be symmetric. In a deployment, we envision that: - // * Server A is the main telemetry server that is always online. - // Clients send their encrypted data packets to Server A and - // Server A stores them. - // * Server B only comes online when the two servers want to compute - // the final aggregate statistics. - P_CHECKA (sA = PrioServer_new (cfg, PRIO_SERVER_A, skA, server_secret)); - P_CHECKA (sB = PrioServer_new (cfg, PRIO_SERVER_B, skB, server_secret)); - - // Initialize empty verifier objects - P_CHECKA (vA = PrioVerifier_new (sA)); - P_CHECKA (vB = PrioVerifier_new (sB)); - - // Initialize shares of final aggregate statistics - P_CHECKA (tA = PrioTotalShare_new ()); - P_CHECKA (tB = PrioTotalShare_new ()); - - // Initialize shares of verification packets - P_CHECKA (p1A = PrioPacketVerify1_new ()); - P_CHECKA (p1B = PrioPacketVerify1_new ()); - P_CHECKA (p2A = PrioPacketVerify2_new ()); - P_CHECKA (p2B = PrioPacketVerify2_new ()); - - // I. CLIENT DATA SUBMISSION. - // - // Read in the client data packets - unsigned int aLen = 0, bLen = 0; - - puts ("Reading..."); - P_CHECKC (read_browser_reply (shell, &for_server_a, &aLen, &for_server_b, &bLen)); - printf ("Read reply from browser. LenA: %u, LenB: %u\n", aLen, bLen); - - // II. VALIDATION PROTOCOL. (at servers) - // - // The servers now run a short 2-step protocol to check each - // client's packet: - // 1) Servers A and B broadcast one message (PrioPacketVerify1) - // to each other. - // 2) Servers A and B broadcast another message (PrioPacketVerify2) - // to each other. - // 3) Servers A and B can both determine whether the client's data - // submission is well-formed (in which case they add it to their - // running total of aggregate statistics) or ill-formed - // (in which case they ignore it). - // These messages must be sent over an authenticated channel, so - // that each server is assured that every received message came - // from its peer. - - // Set up a Prio verifier object. - P_CHECKC (PrioVerifier_set_data (vA, for_server_a, aLen)); - P_CHECKC (PrioVerifier_set_data (vB, for_server_b, bLen)); - puts("Imported data."); - - // Both servers produce a packet1. Server A sends p1A to Server B - // and vice versa. - P_CHECKC (PrioPacketVerify1_set_data (p1A, vA)); - P_CHECKC (PrioPacketVerify1_set_data (p1B, vB)); - puts("Set data."); - - // Both servers produce a packet2. Server A sends p2A to Server B - // and vice versa. - P_CHECKC (PrioPacketVerify2_set_data(p2A, vA, p1A, p1B)); - P_CHECKC (PrioPacketVerify2_set_data(p2B, vB, p1A, p1B)); - - // Using p2A and p2B, the servers can determine whether the request - // is valid. (In fact, only Server A needs to perform this - // check, since Server A can just tell Server B whether the check - // succeeded or failed.) - puts ("Checking validity."); - P_CHECKC (PrioVerifier_isValid (vA, p2A, p2B)); - P_CHECKC (PrioVerifier_isValid (vB, p2A, p2B)); - puts ("Are valid."); - - // If we get here, the client packet is valid, so add it to the aggregate - // statistic counter for both servers. - P_CHECKC (PrioServer_aggregate (sA, vA)); - P_CHECKC (PrioServer_aggregate (sB, vB)); - - // The servers repeat the steps above for each client submission. - - // III. PRODUCTION OF AGGREGATE STATISTICS. - // - // After collecting aggregates from MANY clients, the servers can compute - // their shares of the aggregate statistics. - // - // Server B can send tB to Server A. - P_CHECKC (PrioTotalShare_set_data (tA, sA)); - P_CHECKC (PrioTotalShare_set_data (tB, sB)); - - // Once Server A has tA and tB, it can learn the aggregate statistics - // in the clear. - P_CHECKC (PrioTotalShare_final (cfg, output, tA, tB)); - - for (int i=0; i < ndata; i++) { - //printf("output[%d] = %lu\n", i, output[i]); - //printf("data[%d] = %d\n", i, (int)data_items[i]); - P_CHECKCB (output[i] == data_items[i]); - } - - puts ("Success!"); - -cleanup: - if (rv != SECSuccess) { - fprintf (stderr, "Warning: unexpected failure.\n"); - } - - if (for_server_a) free (for_server_a); - if (for_server_b) free (for_server_b); - - PrioTotalShare_clear (tA); - PrioTotalShare_clear (tB); - - PrioPacketVerify2_clear (p2A); - PrioPacketVerify2_clear (p2B); - - PrioPacketVerify1_clear (p1A); - PrioPacketVerify1_clear (p1B); - - PrioVerifier_clear (vA); - PrioVerifier_clear (vB); - - PrioServer_clear (sA); - PrioServer_clear (sB); - PrioConfig_clear (cfg); - - PublicKey_clear (pkA); - PublicKey_clear (pkB); - - PrivateKey_clear (skA); - PrivateKey_clear (skB); - - Prio_clear (); - - return !(rv == SECSuccess); -} - -int -main (int argc, char **argv) -{ - puts("== Prio browser test utility. =="); - puts("(Note: Expects to be run in the same directory as encode-once.js.)"); - if (argc != 2) { - fprintf (stderr, "Usage ./%s \n", argv[0]); - return 1; - } - - return verify_full (argv[1], strlen (argv[1])); -} - diff --git a/third_party/prio/include/mprio.h b/third_party/prio/include/mprio.h index fb105da70051..a7208dca929b 100644 --- a/third_party/prio/include/mprio.h +++ b/third_party/prio/include/mprio.h @@ -1,6 +1,6 @@ /* * Copyright (c) 2018, Henry Corrigan-Gibbs - * + * * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this @@ -13,10 +13,10 @@ extern "C" { #endif +#include #include -#include -#include -#include +#include +#include #include #include @@ -33,47 +33,44 @@ typedef unsigned char PrioPRGSeed[PRG_SEED_LENGTH]; /* * Type for each of the two servers. */ -typedef enum { - PRIO_SERVER_A, - PRIO_SERVER_B -} PrioServerId; +typedef enum { PRIO_SERVER_A, PRIO_SERVER_B } PrioServerId; /* * Opaque types */ -typedef struct prio_config *PrioConfig; -typedef const struct prio_config *const_PrioConfig; +typedef struct prio_config* PrioConfig; +typedef const struct prio_config* const_PrioConfig; -typedef struct prio_server *PrioServer; -typedef const struct prio_server *const_PrioServer; +typedef struct prio_server* PrioServer; +typedef const struct prio_server* const_PrioServer; -typedef struct prio_verifier *PrioVerifier; -typedef const struct prio_verifier *const_PrioVerifier; +typedef struct prio_verifier* PrioVerifier; +typedef const struct prio_verifier* const_PrioVerifier; -typedef struct prio_packet_verify1 *PrioPacketVerify1; -typedef const struct prio_packet_verify1 *const_PrioPacketVerify1; +typedef struct prio_packet_verify1* PrioPacketVerify1; +typedef const struct prio_packet_verify1* const_PrioPacketVerify1; -typedef struct prio_packet_verify2 *PrioPacketVerify2; -typedef const struct prio_packet_verify2 *const_PrioPacketVerify2; +typedef struct prio_packet_verify2* PrioPacketVerify2; +typedef const struct prio_packet_verify2* const_PrioPacketVerify2; -typedef struct prio_total_share *PrioTotalShare; -typedef const struct prio_total_share *const_PrioTotalShare; +typedef struct prio_total_share* PrioTotalShare; +typedef const struct prio_total_share* const_PrioTotalShare; -typedef SECKEYPublicKey *PublicKey; -typedef const SECKEYPublicKey *const_PublicKey; +typedef SECKEYPublicKey* PublicKey; +typedef const SECKEYPublicKey* const_PublicKey; -typedef SECKEYPrivateKey *PrivateKey; -typedef const SECKEYPrivateKey *const_PrivateKey; +typedef SECKEYPrivateKey* PrivateKey; +typedef const SECKEYPrivateKey* const_PrivateKey; -/* +/* * Initialize and clear random number generator state. * You must call Prio_init() before using the library. * To avoid memory leaks, call Prio_clear() afterwards. */ -SECStatus Prio_init (); +SECStatus Prio_init(); void Prio_clear(); -/* +/* * PrioConfig holds the system parameters. The two relevant things determined * by the config object are: * (1) the number of data fields we are collecting, and @@ -87,35 +84,37 @@ void Prio_clear(); * Each set of aggregate statistics should use a different `batch_id`. * * `PrioConfig_new` does not keep a pointer to the `batch_id` string that the - * caller passes in, so you may free the `batch_id` string as soon as + * caller passes in, so you may free the `batch_id` string as soon as * `PrioConfig_new` returns. */ -PrioConfig PrioConfig_new (int n_fields, PublicKey server_a, PublicKey server_b, - const unsigned char *batch_id, unsigned int batch_id_len); -void PrioConfig_clear (PrioConfig cfg); -int PrioConfig_numDataFields (const_PrioConfig cfg); +PrioConfig PrioConfig_new(int n_fields, PublicKey server_a, PublicKey server_b, + const unsigned char* batch_id, + unsigned int batch_id_len); +void PrioConfig_clear(PrioConfig cfg); +int PrioConfig_numDataFields(const_PrioConfig cfg); /* - * Create a PrioConfig object with no encryption keys. This routine is + * Create a PrioConfig object with no encryption keys. This routine is * useful for testing, but PrioClient_encode() will always fail when used with * this config. */ -PrioConfig PrioConfig_newTest (int n_fields); +PrioConfig PrioConfig_newTest(int n_fields); - -/* +/* * We use the PublicKey and PrivateKey objects for public-key encryption. Each * Prio server has an associated public key, and the clients use these keys to * encrypt messages to the servers. */ -SECStatus Keypair_new (PrivateKey *pvtkey, PublicKey *pubkey); +SECStatus Keypair_new(PrivateKey* pvtkey, PublicKey* pubkey); /* - * Import a new curve25519 public key from the raw bytes given. The key passed in + * Import a new curve25519 public key from the raw bytes given. The key passed + * in * as `data` should be of length `CURVE25519_KEY_LEN`. This function allocates * a new PublicKey object, which the caller must free using `PublicKey_clear`. */ -SECStatus PublicKey_import (PublicKey *pk, const unsigned char *data, unsigned int dataLen); +SECStatus PublicKey_import(PublicKey* pk, const unsigned char* data, + unsigned int dataLen); /* * Import a new curve25519 public key from a hex string that contains only the @@ -123,138 +122,136 @@ SECStatus PublicKey_import (PublicKey *pk, const unsigned char *data, unsigned i * length `CURVE25519_KEY_LEN_HEX`. This function allocates a new PublicKey * object, which the caller must free using `PublicKey_clear`. */ -SECStatus PublicKey_import_hex (PublicKey *pk, const unsigned char *hex_data, - unsigned int dataLen); +SECStatus PublicKey_import_hex(PublicKey* pk, const unsigned char* hex_data, + unsigned int dataLen); /* * Export a curve25519 public key as a raw byte-array. */ -SECStatus PublicKey_export (const_PublicKey pk, unsigned char data[CURVE25519_KEY_LEN]); +SECStatus PublicKey_export(const_PublicKey pk, + unsigned char data[CURVE25519_KEY_LEN]); /* * Export a curve25519 public key as a NULL-terminated hex string. */ -SECStatus PublicKey_export_hex (const_PublicKey pk, - unsigned char data[CURVE25519_KEY_LEN_HEX+1]); - - -void PublicKey_clear (PublicKey pubkey); -void PrivateKey_clear (PrivateKey pvtkey); +SECStatus PublicKey_export_hex(const_PublicKey pk, + unsigned char data[CURVE25519_KEY_LEN_HEX + 1]); +void PublicKey_clear(PublicKey pubkey); +void PrivateKey_clear(PrivateKey pvtkey); /* * PrioPacketClient_encode * - * Takes as input a pointer to an array (`data_in`) of boolean values - * whose length is equal to the number of data fields specified in + * Takes as input a pointer to an array (`data_in`) of boolean values + * whose length is equal to the number of data fields specified in * the config. It then encodes the data for servers A and B into a - * string. + * string. * * NOTE: The caller must free() the strings `for_server_a` and * `for_server_b` to avoid memory leaks. */ -SECStatus -PrioClient_encode (const_PrioConfig cfg, const bool *data_in, - unsigned char **for_server_a, unsigned int *aLen, - unsigned char **for_server_b, unsigned int *bLen); +SECStatus PrioClient_encode(const_PrioConfig cfg, const bool* data_in, + unsigned char** for_server_a, unsigned int* aLen, + unsigned char** for_server_b, unsigned int* bLen); /* * Generate a new PRG seed using the NSS global randomness source. * Use this routine to initialize the secret that the two Prio servers * share. */ -SECStatus PrioPRGSeed_randomize (PrioPRGSeed *seed); +SECStatus PrioPRGSeed_randomize(PrioPRGSeed* seed); /* * The PrioServer object holds the state of the Prio servers. * Pass in the _same_ secret PRGSeed when initializing the two servers. * The PRGSeed must remain secret to the two servers. */ -PrioServer PrioServer_new (const_PrioConfig cfg, PrioServerId server_idx, - PrivateKey server_priv, const PrioPRGSeed server_shared_secret); -void PrioServer_clear (PrioServer s); +PrioServer PrioServer_new(const_PrioConfig cfg, PrioServerId server_idx, + PrivateKey server_priv, + const PrioPRGSeed server_shared_secret); +void PrioServer_clear(PrioServer s); - -/* +/* * After receiving a client packet, each of the servers generate * a PrioVerifier object that they use to check whether the client's * encoded packet is well formed. */ -PrioVerifier PrioVerifier_new (PrioServer s); -void PrioVerifier_clear (PrioVerifier v); +PrioVerifier PrioVerifier_new(PrioServer s); +void PrioVerifier_clear(PrioVerifier v); -/* +/* * Read in encrypted data from the client, decrypt it, and prepare to check the * request for validity. */ -SECStatus PrioVerifier_set_data (PrioVerifier v, - unsigned char *data, unsigned int dataLen); +SECStatus PrioVerifier_set_data(PrioVerifier v, unsigned char* data, + unsigned int dataLen); /* * Generate the first packet that servers need to exchange to verify the * client's submission. This should be sent over a TLS connection between the * servers. */ -PrioPacketVerify1 PrioPacketVerify1_new (void); -void PrioPacketVerify1_clear (PrioPacketVerify1 p1); +PrioPacketVerify1 PrioPacketVerify1_new(void); +void PrioPacketVerify1_clear(PrioPacketVerify1 p1); -SECStatus PrioPacketVerify1_set_data (PrioPacketVerify1 p1, - const_PrioVerifier v); +SECStatus PrioPacketVerify1_set_data(PrioPacketVerify1 p1, + const_PrioVerifier v); -SECStatus PrioPacketVerify1_write (const_PrioPacketVerify1 p, - msgpack_packer *pk); -SECStatus PrioPacketVerify1_read (PrioPacketVerify1 p, - msgpack_unpacker *upk, const_PrioConfig cfg); +SECStatus PrioPacketVerify1_write(const_PrioPacketVerify1 p, + msgpack_packer* pk); +SECStatus PrioPacketVerify1_read(PrioPacketVerify1 p, msgpack_unpacker* upk, + const_PrioConfig cfg); -/* +/* * Generate the second packet that the servers need to exchange to verify the * client's submission. The routine takes as input the PrioPacketVerify1 * packets from both server A and server B. * * This should be sent over a TLS connection between the servers. */ -PrioPacketVerify2 PrioPacketVerify2_new (void); -void PrioPacketVerify2_clear (PrioPacketVerify2 p); +PrioPacketVerify2 PrioPacketVerify2_new(void); +void PrioPacketVerify2_clear(PrioPacketVerify2 p); -SECStatus PrioPacketVerify2_set_data (PrioPacketVerify2 p2, const_PrioVerifier v, - const_PrioPacketVerify1 p1A, const_PrioPacketVerify1 p1B); +SECStatus PrioPacketVerify2_set_data(PrioPacketVerify2 p2, const_PrioVerifier v, + const_PrioPacketVerify1 p1A, + const_PrioPacketVerify1 p1B); -SECStatus PrioPacketVerify2_write (const_PrioPacketVerify2 p, - msgpack_packer *pk); -SECStatus PrioPacketVerify2_read (PrioPacketVerify2 p, - msgpack_unpacker *upk, const_PrioConfig cfg); +SECStatus PrioPacketVerify2_write(const_PrioPacketVerify2 p, + msgpack_packer* pk); +SECStatus PrioPacketVerify2_read(PrioPacketVerify2 p, msgpack_unpacker* upk, + const_PrioConfig cfg); -/* +/* * Use the PrioPacketVerify2s from both servers to check whether * the client's submission is well formed. */ -SECStatus PrioVerifier_isValid (const_PrioVerifier v, - const_PrioPacketVerify2 pA, const_PrioPacketVerify2 pB); +SECStatus PrioVerifier_isValid(const_PrioVerifier v, const_PrioPacketVerify2 pA, + const_PrioPacketVerify2 pB); /* * Each of the two servers calls this routine to aggregate the data * submission from a client that is included in the PrioVerifier object. * * IMPORTANT: This routine does *not* check the validity of the client's - * data packet. The servers must execute the verification checks + * data packet. The servers must execute the verification checks * above before aggregating any client data. */ -SECStatus PrioServer_aggregate (PrioServer s, PrioVerifier v); +SECStatus PrioServer_aggregate(PrioServer s, PrioVerifier v); -/* +/* * After the servers have aggregated data packets from "enough" clients * (this determines the anonymity set size), each server runs this routine - * to get a share of the aggregate statistics. + * to get a share of the aggregate statistics. */ -PrioTotalShare PrioTotalShare_new (void); -void PrioTotalShare_clear (PrioTotalShare t); +PrioTotalShare PrioTotalShare_new(void); +void PrioTotalShare_clear(PrioTotalShare t); -SECStatus PrioTotalShare_set_data (PrioTotalShare t, const_PrioServer s); +SECStatus PrioTotalShare_set_data(PrioTotalShare t, const_PrioServer s); -SECStatus PrioTotalShare_write (const_PrioTotalShare t, - msgpack_packer *pk); -SECStatus PrioTotalShare_read (PrioTotalShare t, - msgpack_unpacker *upk, const_PrioConfig cfg); +SECStatus PrioTotalShare_write(const_PrioTotalShare t, msgpack_packer* pk); +SECStatus PrioTotalShare_read(PrioTotalShare t, msgpack_unpacker* upk, + const_PrioConfig cfg); /* * Read the output data into an array of unsigned longs. You should @@ -262,9 +259,9 @@ SECStatus PrioTotalShare_read (PrioTotalShare t, * the pointer `output` points to a buffer large enough to store * one long per data field. */ -SECStatus PrioTotalShare_final (const_PrioConfig cfg, unsigned long *output, - const_PrioTotalShare tA, const_PrioTotalShare tB); - +SECStatus PrioTotalShare_final(const_PrioConfig cfg, unsigned long* output, + const_PrioTotalShare tA, + const_PrioTotalShare tB); #endif /* __PRIO_H__ */ diff --git a/third_party/prio/pclient/SConscript b/third_party/prio/pclient/SConscript deleted file mode 100644 index 389deae6171d..000000000000 --- a/third_party/prio/pclient/SConscript +++ /dev/null @@ -1,18 +0,0 @@ -import sys - -Import('env') - -prio_env = env.Clone() - -src = [ - "main.c", -] - -libs = [ - "mprio", - "msgpackc", -] - -prio_env.Append(LIBS = libs) -prio_env.Program("pclient", src) - diff --git a/third_party/prio/pclient/main.c b/third_party/prio/pclient/main.c deleted file mode 100644 index b30a852ef631..000000000000 --- a/third_party/prio/pclient/main.c +++ /dev/null @@ -1,229 +0,0 @@ -/* - * Copyright (c) 2018, Henry Corrigan-Gibbs - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -#include -#include -#include - -#include "prio/util.h" - -int -verify_full (void) -{ - SECStatus rv = SECSuccess; - - PublicKey pkA = NULL; - PublicKey pkB = NULL; - PrivateKey skA = NULL; - PrivateKey skB = NULL; - - PrioConfig cfg = NULL; - PrioServer sA = NULL; - PrioServer sB = NULL; - PrioVerifier vA = NULL; - PrioVerifier vB = NULL; - PrioPacketVerify1 p1A = NULL; - PrioPacketVerify1 p1B = NULL; - PrioPacketVerify2 p2A = NULL; - PrioPacketVerify2 p2B = NULL; - PrioTotalShare tA = NULL; - PrioTotalShare tB = NULL; - - unsigned char *for_server_a = NULL; - unsigned char *for_server_b = NULL; - - const unsigned char *batch_id = (unsigned char *)"prio_batch_2018-04-17"; - const unsigned int batch_id_len = strlen ((char *)batch_id); - - // Initialize NSS random number generator. - P_CHECKC (Prio_init ()); - - // Number of different boolean data fields we collect. - const int ndata = 100; - - // Number of clients to simulate. - const int nclients = 10; - - - // New scope to avoid goto weirdness - { - bool data_items[ndata]; - - // Generate keypairs for servers - P_CHECKC (Keypair_new (&skA, &pkA)); - P_CHECKC (Keypair_new (&skB, &pkB)); - - // Use the default configuration parameters. - P_CHECKA (cfg = PrioConfig_new (ndata, pkA, pkB, batch_id, batch_id_len)); - - PrioPRGSeed server_secret; - P_CHECKC (PrioPRGSeed_randomize (&server_secret)); - - // Initialize two server objects. The role of the servers need not - // be symmetric. In a deployment, we envision that: - // * Server A is the main telemetry server that is always online. - // Clients send their encrypted data packets to Server A and - // Server A stores them. - // * Server B only comes online when the two servers want to compute - // the final aggregate statistics. - P_CHECKA (sA = PrioServer_new (cfg, PRIO_SERVER_A, skA, server_secret)); - P_CHECKA (sB = PrioServer_new (cfg, PRIO_SERVER_B, skB, server_secret)); - - // Initialize empty verifier objects - P_CHECKA (vA = PrioVerifier_new (sA)); - P_CHECKA (vB = PrioVerifier_new (sB)); - - // Initialize shares of final aggregate statistics - P_CHECKA (tA = PrioTotalShare_new ()); - P_CHECKA (tB = PrioTotalShare_new ()); - - // Initialize shares of verification packets - P_CHECKA (p1A = PrioPacketVerify1_new ()); - P_CHECKA (p1B = PrioPacketVerify1_new ()); - P_CHECKA (p2A = PrioPacketVerify2_new ()); - P_CHECKA (p2B = PrioPacketVerify2_new ()); - - // Generate client data packets. - for (int c=0; c < nclients; c++) { - - // The client's data submission is an arbitrary boolean vector. - for (int i=0; i < ndata; i++) { - // Arbitrary data - data_items[i] = (i % 3 == 1) || (c % 5 == 3); - } - - // I. CLIENT DATA SUBMISSION. - // - // Construct the client data packets. - unsigned int aLen, bLen; - P_CHECKC (PrioClient_encode (cfg, data_items, - &for_server_a, &aLen, &for_server_b, &bLen)); - - // The Prio servers A and B can come online later (e.g., at the end of - // each day) to download the encrypted telemetry packets from the - // telemetry server and run the protocol that computes the aggregate - // statistics. In this way, the client only needs to send a - // single message (the pair of encrypted ClientPacketData packets) - // to a single server (the telemetry-data-collection server). - - // THE CLIENT'S JOB IS DONE. The rest of the processing just takes place - // between the two servers A and B. - - - // II. VALIDATION PROTOCOL. (at servers) - // - // The servers now run a short 2-step protocol to check each - // client's packet: - // 1) Servers A and B broadcast one message (PrioPacketVerify1) - // to each other. - // 2) Servers A and B broadcast another message (PrioPacketVerify2) - // to each other. - // 3) Servers A and B can both determine whether the client's data - // submission is well-formed (in which case they add it to their - // running total of aggregate statistics) or ill-formed - // (in which case they ignore it). - // These messages must be sent over an authenticated channel, so - // that each server is assured that every received message came - // from its peer. - - // Set up a Prio verifier object. - P_CHECKC (PrioVerifier_set_data (vA, for_server_a, aLen)); - P_CHECKC (PrioVerifier_set_data (vB, for_server_b, bLen)); - - // Both servers produce a packet1. Server A sends p1A to Server B - // and vice versa. - P_CHECKC (PrioPacketVerify1_set_data (p1A, vA)); - P_CHECKC (PrioPacketVerify1_set_data (p1B, vB)); - - // Both servers produce a packet2. Server A sends p2A to Server B - // and vice versa. - P_CHECKC (PrioPacketVerify2_set_data(p2A, vA, p1A, p1B)); - P_CHECKC (PrioPacketVerify2_set_data(p2B, vB, p1A, p1B)); - - // Using p2A and p2B, the servers can determine whether the request - // is valid. (In fact, only Server A needs to perform this - // check, since Server A can just tell Server B whether the check - // succeeded or failed.) - P_CHECKC (PrioVerifier_isValid (vA, p2A, p2B)); - P_CHECKC (PrioVerifier_isValid (vB, p2A, p2B)); - - // If we get here, the client packet is valid, so add it to the aggregate - // statistic counter for both servers. - P_CHECKC (PrioServer_aggregate (sA, vA)); - P_CHECKC (PrioServer_aggregate (sB, vB)); - - free (for_server_a); - free (for_server_b); - for_server_a = NULL; - for_server_b = NULL; - } - - // The servers repeat the steps above for each client submission. - - // III. PRODUCTION OF AGGREGATE STATISTICS. - // - // After collecting aggregates from MANY clients, the servers can compute - // their shares of the aggregate statistics. - // - // Server B can send tB to Server A. - P_CHECKC (PrioTotalShare_set_data (tA, sA)); - P_CHECKC (PrioTotalShare_set_data (tB, sB)); - - // Once Server A has tA and tB, it can learn the aggregate statistics - // in the clear. - unsigned long output[ndata]; - P_CHECKC (PrioTotalShare_final (cfg, output, tA, tB)); - - // Now the output[i] contains a counter that indicates how many clients - // submitted TRUE for data value i. We print out this data. - for (int i=0; i < ndata; i++) - printf("output[%d] = %lu\n", i, output[i]); - } - -cleanup: - if (rv != SECSuccess) { - fprintf (stderr, "Warning: unexpected failure.\n"); - } - - if (for_server_a) free (for_server_a); - if (for_server_b) free (for_server_b); - - PrioTotalShare_clear (tA); - PrioTotalShare_clear (tB); - - PrioPacketVerify2_clear (p2A); - PrioPacketVerify2_clear (p2B); - - PrioPacketVerify1_clear (p1A); - PrioPacketVerify1_clear (p1B); - - PrioVerifier_clear (vA); - PrioVerifier_clear (vB); - - PrioServer_clear (sA); - PrioServer_clear (sB); - PrioConfig_clear (cfg); - - PublicKey_clear (pkA); - PublicKey_clear (pkB); - - PrivateKey_clear (skA); - PrivateKey_clear (skB); - - Prio_clear (); - - return !(rv == SECSuccess); -} - -int -main (void) -{ - puts ("This utility demonstrates how to invoke the Prio API."); - return verify_full (); -} - diff --git a/third_party/prio/prio/SConscript b/third_party/prio/prio/SConscript index 7571bc4d9e43..36e32e56e245 100644 --- a/third_party/prio/prio/SConscript +++ b/third_party/prio/prio/SConscript @@ -21,9 +21,6 @@ libs = [ "msgpackc" ] -# Enable mp_print() -penv.Append(CFLAGS = ['-DMP_IOFUNC']) - penv.Append(LIBS = libs) penv.StaticLibrary("mprio", src) diff --git a/third_party/prio/prio/client.c b/third_party/prio/prio/client.c index 61426b783c34..cf4eefc34bbf 100644 --- a/third_party/prio/prio/client.c +++ b/third_party/prio/prio/client.c @@ -1,6 +1,6 @@ /* * Copyright (c) 2018, Henry Corrigan-Gibbs - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ @@ -21,7 +21,7 @@ #include "util.h" // Let the points of data_in be [x1, x2, x3, ... ]. -// We construct the polynomial f such that +// We construct the polynomial f such that // (a) f(0) = random, // (b) f(i) = x_i for all i >= 1, // (c) degree(f)+1 is a power of two. @@ -30,10 +30,10 @@ // and we return f(0) as `const_term`. static SECStatus data_polynomial_evals(const_PrioConfig cfg, const_MPArray data_in, - MPArray evals_out, mp_int *const_term) + MPArray evals_out, mp_int* const_term) { SECStatus rv = SECSuccess; - const mp_int *mod = &cfg->modulus; + const mp_int* mod = &cfg->modulus; MPArray points_f = NULL; MPArray poly_f = NULL; @@ -43,88 +43,87 @@ data_polynomial_evals(const_PrioConfig cfg, const_MPArray data_in, // Little n is the number of points on the polynomials. // The constant term is randomized, so it's (mul_gates + 1). const int n = mul_gates + 1; - - // Big N is n rounded up to a power of two. - const int N = next_power_of_two (n); - P_CHECKA (points_f = MPArray_new (N)); - P_CHECKA (poly_f = MPArray_new (N)); + // Big N is n rounded up to a power of two. + const int N = next_power_of_two(n); + + P_CHECKA(points_f = MPArray_new(N)); + P_CHECKA(poly_f = MPArray_new(N)); // Set constant term f(0) to random - P_CHECKC (rand_int (&points_f->data[0], mod)); - MP_CHECKC (mp_copy (&points_f->data[0], const_term)); + P_CHECKC(rand_int(&points_f->data[0], mod)); + MP_CHECKC(mp_copy(&points_f->data[0], const_term)); // Set other values of f(x) - for (int i=1; idata[i-1], &points_f->data[i])); + for (int i = 1; i < n; i++) { + MP_CHECKC(mp_copy(&data_in->data[i - 1], &points_f->data[i])); } // Interpolate through the Nth roots of unity - P_CHECKC (poly_fft(poly_f, points_f, cfg, true)); + P_CHECKC(poly_fft(poly_f, points_f, cfg, true)); - // Evaluate at all 2N-th roots of unity. + // Evaluate at all 2N-th roots of unity. // To do so, first resize the eval arrays and fill upper // values with zeros. - P_CHECKC (MPArray_resize (poly_f, 2*N)); - P_CHECKC (MPArray_resize (evals_out, 2*N)); - + P_CHECKC(MPArray_resize(poly_f, 2 * N)); + P_CHECKC(MPArray_resize(evals_out, 2 * N)); + // Evaluate at the 2N-th roots of unity - P_CHECKC (poly_fft(evals_out, poly_f, cfg, false)); + P_CHECKC(poly_fft(evals_out, poly_f, cfg, false)); cleanup: - MPArray_clear (points_f); - MPArray_clear (poly_f); + MPArray_clear(points_f); + MPArray_clear(poly_f); return rv; } - static SECStatus -share_polynomials (const_PrioConfig cfg, const_MPArray data_in, - PrioPacketClient pA, PrioPacketClient pB, PRG prgB) +share_polynomials(const_PrioConfig cfg, const_MPArray data_in, + PrioPacketClient pA, PrioPacketClient pB, PRG prgB) { SECStatus rv = SECSuccess; - const mp_int *mod = &cfg->modulus; + const mp_int* mod = &cfg->modulus; const_MPArray points_f = data_in; mp_int f0, g0; - MP_DIGITS (&f0) = NULL; - MP_DIGITS (&g0) = NULL; + MP_DIGITS(&f0) = NULL; + MP_DIGITS(&g0) = NULL; MPArray points_g = NULL; MPArray evals_f_2N = NULL; MPArray evals_g_2N = NULL; - P_CHECKA (points_g = MPArray_dup (points_f)); - P_CHECKA (evals_f_2N = MPArray_new (0)); - P_CHECKA (evals_g_2N = MPArray_new (0)); - MP_CHECKC (mp_init (&f0)); - MP_CHECKC (mp_init (&g0)); + P_CHECKA(points_g = MPArray_dup(points_f)); + P_CHECKA(evals_f_2N = MPArray_new(0)); + P_CHECKA(evals_g_2N = MPArray_new(0)); + MP_CHECKC(mp_init(&f0)); + MP_CHECKC(mp_init(&g0)); - for (int i=0; ilen; i++) { + for (int i = 0; i < points_f->len; i++) { // For each input value x_i, we compute x_i * (x_i-1). // f(i) = x_i // g(i) = x_i - 1 - MP_CHECKC (mp_sub_d (&points_g->data[i], 1, &points_g->data[i])); - MP_CHECKC (mp_mod (&points_g->data[i], mod, &points_g->data[i])); + MP_CHECKC(mp_sub_d(&points_g->data[i], 1, &points_g->data[i])); + MP_CHECKC(mp_mod(&points_g->data[i], mod, &points_g->data[i])); } - P_CHECKC (data_polynomial_evals(cfg, points_f, evals_f_2N, &f0)); - P_CHECKC (data_polynomial_evals(cfg, points_g, evals_g_2N, &g0)); + P_CHECKC(data_polynomial_evals(cfg, points_f, evals_f_2N, &f0)); + P_CHECKC(data_polynomial_evals(cfg, points_g, evals_g_2N, &g0)); // The values f(0) and g(0) are set to random values. // We must send to each server a share of the points // f(0), g(0), and h(0) = f(0)*g(0) - P_CHECKC (share_int (cfg, &f0, &pA->f0_share, &pB->f0_share)); - P_CHECKC (share_int (cfg, &g0, &pA->g0_share, &pB->g0_share)); + P_CHECKC(share_int(cfg, &f0, &pA->f0_share, &pB->f0_share)); + P_CHECKC(share_int(cfg, &g0, &pA->g0_share, &pB->g0_share)); // Compute h(0) = f(0)*g(0). - MP_CHECKC (mp_mulmod (&f0, &g0, mod, &f0)); + MP_CHECKC(mp_mulmod(&f0, &g0, mod, &f0)); // Give one share of h(0) to each server. - P_CHECKC (share_int (cfg, &f0, &pA->h0_share, &pB->h0_share)); + P_CHECKC(share_int(cfg, &f0, &pA->h0_share, &pB->h0_share)); - //const int lenN = (evals_f_2N->len/2); - //P_CHECKC (MPArray_resize (pA->shares.A.h_points, lenN)); + // const int lenN = (evals_f_2N->len/2); + // P_CHECKC (MPArray_resize (pA->shares.A.h_points, lenN)); // We need to send to the servers the evaluations of // f(r) * g(r) @@ -135,34 +134,35 @@ share_polynomials (const_PrioConfig cfg, const_MPArray data_in, // send a share of this value to each server. int j = 0; for (int i = 1; i < evals_f_2N->len; i += 2) { - MP_CHECKC (mp_mulmod (&evals_f_2N->data[i], &evals_g_2N->data[i], mod, &f0)); - P_CHECKC (PRG_share_int (prgB, &pA->shares.A.h_points->data[j], &f0, cfg)); + MP_CHECKC(mp_mulmod(&evals_f_2N->data[i], &evals_g_2N->data[i], mod, &f0)); + P_CHECKC(PRG_share_int(prgB, &pA->shares.A.h_points->data[j], &f0, cfg)); j++; } cleanup: - MPArray_clear (evals_f_2N); - MPArray_clear (evals_g_2N); - MPArray_clear (points_g); - mp_clear (&f0); - mp_clear (&g0); + MPArray_clear(evals_f_2N); + MPArray_clear(evals_g_2N); + MPArray_clear(points_g); + mp_clear(&f0); + mp_clear(&g0); return rv; } PrioPacketClient -PrioPacketClient_new (const_PrioConfig cfg, PrioServerId for_server) +PrioPacketClient_new(const_PrioConfig cfg, PrioServerId for_server) { - SECStatus rv = SECSuccess; + SECStatus rv = SECSuccess; const int data_len = cfg->num_data_fields; PrioPacketClient p = NULL; - p = malloc (sizeof (*p)); - if (!p) return NULL; + p = malloc(sizeof(*p)); + if (!p) + return NULL; p->for_server = for_server; p->triple = NULL; - MP_DIGITS (&p->f0_share) = NULL; - MP_DIGITS (&p->g0_share) = NULL; - MP_DIGITS (&p->h0_share) = NULL; + MP_DIGITS(&p->f0_share) = NULL; + MP_DIGITS(&p->g0_share) = NULL; + MP_DIGITS(&p->h0_share) = NULL; switch (p->for_server) { case PRIO_SERVER_A: @@ -170,7 +170,7 @@ PrioPacketClient_new (const_PrioConfig cfg, PrioServerId for_server) p->shares.A.h_points = NULL; break; case PRIO_SERVER_B: - memset (p->shares.B.seed, 0, PRG_SEED_LENGTH); + memset(p->shares.B.seed, 0, PRG_SEED_LENGTH); break; default: // Should never get here @@ -178,20 +178,20 @@ PrioPacketClient_new (const_PrioConfig cfg, PrioServerId for_server) goto cleanup; } - MP_CHECKC (mp_init (&p->f0_share)); - MP_CHECKC (mp_init (&p->g0_share)); - MP_CHECKC (mp_init (&p->h0_share)); - P_CHECKA (p->triple = BeaverTriple_new ()); + MP_CHECKC(mp_init(&p->f0_share)); + MP_CHECKC(mp_init(&p->g0_share)); + MP_CHECKC(mp_init(&p->h0_share)); + P_CHECKA(p->triple = BeaverTriple_new()); if (p->for_server == PRIO_SERVER_A) { - const int num_h_points = PrioConfig_hPoints (cfg); - P_CHECKA (p->shares.A.data_shares = MPArray_new (data_len)); - P_CHECKA (p->shares.A.h_points = MPArray_new (num_h_points)); + const int num_h_points = PrioConfig_hPoints(cfg); + P_CHECKA(p->shares.A.data_shares = MPArray_new(data_len)); + P_CHECKA(p->shares.A.h_points = MPArray_new(num_h_points)); } cleanup: if (rv != SECSuccess) { - PrioPacketClient_clear (p); + PrioPacketClient_clear(p); return NULL; } @@ -199,69 +199,74 @@ cleanup: } SECStatus -PrioPacketClient_set_data (const_PrioConfig cfg, const bool *data_in, - PrioPacketClient pA, PrioPacketClient pB) +PrioPacketClient_set_data(const_PrioConfig cfg, const bool* data_in, + PrioPacketClient pA, PrioPacketClient pB) { MPArray client_data = NULL; PRG prgB = NULL; SECStatus rv = SECSuccess; const int data_len = cfg->num_data_fields; - if (!data_in) return SECFailure; + if (!data_in) + return SECFailure; - P_CHECKC (PrioPRGSeed_randomize (&pB->shares.B.seed)); - P_CHECKA (prgB = PRG_new (pB->shares.B.seed)); + P_CHECKC(PrioPRGSeed_randomize(&pB->shares.B.seed)); + P_CHECKA(prgB = PRG_new(pB->shares.B.seed)); - P_CHECKC (BeaverTriple_set_rand (cfg, pA->triple, pB->triple)); - P_CHECKA (client_data = MPArray_new_bool (data_len, data_in)); - P_CHECKC (PRG_share_array (prgB, pA->shares.A.data_shares, - client_data, cfg)); - P_CHECKC (share_polynomials (cfg, client_data, pA, pB, prgB)); + P_CHECKC(BeaverTriple_set_rand(cfg, pA->triple, pB->triple)); + P_CHECKA(client_data = MPArray_new_bool(data_len, data_in)); + P_CHECKC(PRG_share_array(prgB, pA->shares.A.data_shares, client_data, cfg)); + P_CHECKC(share_polynomials(cfg, client_data, pA, pB, prgB)); cleanup: - MPArray_clear (client_data); - PRG_clear (prgB); + MPArray_clear(client_data); + PRG_clear(prgB); return rv; } void -PrioPacketClient_clear (PrioPacketClient p) +PrioPacketClient_clear(PrioPacketClient p) { - if (p == NULL) return; + if (p == NULL) + return; if (p->for_server == PRIO_SERVER_A) { - MPArray_clear (p->shares.A.h_points); - MPArray_clear (p->shares.A.data_shares); + MPArray_clear(p->shares.A.h_points); + MPArray_clear(p->shares.A.data_shares); } - BeaverTriple_clear (p->triple); - mp_clear (&p->f0_share); - mp_clear (&p->g0_share); - mp_clear (&p->h0_share); - free (p); + BeaverTriple_clear(p->triple); + mp_clear(&p->f0_share); + mp_clear(&p->g0_share); + mp_clear(&p->h0_share); + free(p); } -bool -PrioPacketClient_areEqual (const_PrioPacketClient p1, - const_PrioPacketClient p2) +bool +PrioPacketClient_areEqual(const_PrioPacketClient p1, const_PrioPacketClient p2) { - if (!BeaverTriple_areEqual (p1->triple, p2->triple)) return false; - if (mp_cmp (&p1->f0_share, &p2->f0_share)) return false; - if (mp_cmp (&p1->g0_share, &p2->g0_share)) return false; - if (mp_cmp (&p1->h0_share, &p2->h0_share)) return false; - if (p1->for_server != p2->for_server) return false; + if (!BeaverTriple_areEqual(p1->triple, p2->triple)) + return false; + if (mp_cmp(&p1->f0_share, &p2->f0_share)) + return false; + if (mp_cmp(&p1->g0_share, &p2->g0_share)) + return false; + if (mp_cmp(&p1->h0_share, &p2->h0_share)) + return false; + if (p1->for_server != p2->for_server) + return false; switch (p1->for_server) { case PRIO_SERVER_A: - if (!MPArray_areEqual (p1->shares.A.data_shares, - p2->shares.A.data_shares)) return false; - if (!MPArray_areEqual (p1->shares.A.h_points, - p2->shares.A.h_points)) return false; - break; + if (!MPArray_areEqual(p1->shares.A.data_shares, p2->shares.A.data_shares)) + return false; + if (!MPArray_areEqual(p1->shares.A.h_points, p2->shares.A.h_points)) + return false; + break; case PRIO_SERVER_B: - if (memcmp (p1->shares.B.seed, p2->shares.B.seed, - PRG_SEED_LENGTH)) return false; + if (memcmp(p1->shares.B.seed, p2->shares.B.seed, PRG_SEED_LENGTH)) + return false; break; default: // Should never get here. @@ -271,83 +276,85 @@ PrioPacketClient_areEqual (const_PrioPacketClient p1, return true; } -SECStatus -PrioClient_encode (const_PrioConfig cfg, const bool *data_in, - unsigned char **for_server_a, unsigned int *aLen, - unsigned char **for_server_b, unsigned int *bLen) +SECStatus +PrioClient_encode(const_PrioConfig cfg, const bool* data_in, + unsigned char** for_server_a, unsigned int* aLen, + unsigned char** for_server_b, unsigned int* bLen) { SECStatus rv = SECSuccess; PrioPacketClient pA = NULL; PrioPacketClient pB = NULL; *for_server_a = NULL; *for_server_b = NULL; - - P_CHECKA (pA = PrioPacketClient_new (cfg, PRIO_SERVER_A)); - P_CHECKA (pB = PrioPacketClient_new (cfg, PRIO_SERVER_B)); + + P_CHECKA(pA = PrioPacketClient_new(cfg, PRIO_SERVER_A)); + P_CHECKA(pB = PrioPacketClient_new(cfg, PRIO_SERVER_B)); msgpack_sbuffer sbufA, sbufB; msgpack_packer packerA, packerB; - msgpack_sbuffer_init (&sbufA); - msgpack_sbuffer_init (&sbufB); - msgpack_packer_init (&packerA, &sbufA, msgpack_sbuffer_write); - msgpack_packer_init (&packerB, &sbufB, msgpack_sbuffer_write); + msgpack_sbuffer_init(&sbufA); + msgpack_sbuffer_init(&sbufB); + msgpack_packer_init(&packerA, &sbufA, msgpack_sbuffer_write); + msgpack_packer_init(&packerB, &sbufB, msgpack_sbuffer_write); - P_CHECKC (PrioPacketClient_set_data (cfg, data_in, pA, pB)); - P_CHECKC (serial_write_packet_client (&packerA, pA, cfg)); - P_CHECKC (serial_write_packet_client (&packerB, pB, cfg)); + P_CHECKC(PrioPacketClient_set_data(cfg, data_in, pA, pB)); + P_CHECKC(serial_write_packet_client(&packerA, pA, cfg)); + P_CHECKC(serial_write_packet_client(&packerB, pB, cfg)); - P_CHECKC (PublicKey_encryptSize (sbufA.size, aLen)); - P_CHECKC (PublicKey_encryptSize (sbufB.size, bLen)); + P_CHECKC(PublicKey_encryptSize(sbufA.size, aLen)); + P_CHECKC(PublicKey_encryptSize(sbufB.size, bLen)); - P_CHECKA (*for_server_a = malloc (*aLen)); - P_CHECKA (*for_server_b = malloc (*bLen)); + P_CHECKA(*for_server_a = malloc(*aLen)); + P_CHECKA(*for_server_b = malloc(*bLen)); unsigned int writtenA; unsigned int writtenB; - P_CHECKC (PublicKey_encrypt (cfg->server_a_pub, *for_server_a, &writtenA, *aLen, - (unsigned char *)sbufA.data, sbufA.size)); - P_CHECKC (PublicKey_encrypt (cfg->server_b_pub, *for_server_b, &writtenB, *bLen, - (unsigned char *)sbufB.data, sbufB.size)); + P_CHECKC(PublicKey_encrypt(cfg->server_a_pub, *for_server_a, &writtenA, *aLen, + (unsigned char*)sbufA.data, sbufA.size)); + P_CHECKC(PublicKey_encrypt(cfg->server_b_pub, *for_server_b, &writtenB, *bLen, + (unsigned char*)sbufB.data, sbufB.size)); - P_CHECKCB (writtenA == *aLen); - P_CHECKCB (writtenB == *bLen); + P_CHECKCB(writtenA == *aLen); + P_CHECKCB(writtenB == *bLen); cleanup: if (rv != SECSuccess) { - if (*for_server_a) free (*for_server_a); - if (*for_server_b) free (*for_server_b); + if (*for_server_a) + free(*for_server_a); + if (*for_server_b) + free(*for_server_b); *for_server_a = NULL; *for_server_b = NULL; } - PrioPacketClient_clear (pA); - PrioPacketClient_clear (pB); - msgpack_sbuffer_destroy (&sbufA); - msgpack_sbuffer_destroy (&sbufB); - + PrioPacketClient_clear(pA); + PrioPacketClient_clear(pB); + msgpack_sbuffer_destroy(&sbufA); + msgpack_sbuffer_destroy(&sbufB); + return rv; } -SECStatus -PrioPacketClient_decrypt (PrioPacketClient p, const_PrioConfig cfg, - PrivateKey server_priv, const unsigned char *data_in, unsigned int data_len) +SECStatus +PrioPacketClient_decrypt(PrioPacketClient p, const_PrioConfig cfg, + PrivateKey server_priv, const unsigned char* data_in, + unsigned int data_len) { SECStatus rv = SECSuccess; msgpack_unpacker upk; - P_CHECKCB (msgpack_unpacker_init (&upk, data_len)); + P_CHECKCB(msgpack_unpacker_init(&upk, data_len)); // Decrypt the ciphertext into dec_buf unsigned int bytes_decrypted; - P_CHECKC (PrivateKey_decrypt (server_priv, - (unsigned char *)msgpack_unpacker_buffer (&upk), &bytes_decrypted, - data_len, data_in, data_len)); - msgpack_unpacker_buffer_consumed (&upk, bytes_decrypted); + P_CHECKC(PrivateKey_decrypt(server_priv, + (unsigned char*)msgpack_unpacker_buffer(&upk), + &bytes_decrypted, data_len, data_in, data_len)); + msgpack_unpacker_buffer_consumed(&upk, bytes_decrypted); - P_CHECKC (serial_read_packet_client (&upk, p, cfg)); + P_CHECKC(serial_read_packet_client(&upk, p, cfg)); cleanup: - msgpack_unpacker_destroy (&upk); + msgpack_unpacker_destroy(&upk); return rv; } - diff --git a/third_party/prio/prio/client.h b/third_party/prio/prio/client.h index fe05a6a0b752..cedd1048d749 100644 --- a/third_party/prio/prio/client.h +++ b/third_party/prio/prio/client.h @@ -1,9 +1,9 @@ /* * Copyright (c) 2018, Henry Corrigan-Gibbs - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef __CLIENT_H__ @@ -13,23 +13,24 @@ #include "prg.h" #include "share.h" - /* * The PrioPacketClient object holds the encoded client data. * The client sends one packet to server A and one packet to * server B. The `for_server` parameter determines which server * the packet is for. */ -typedef struct prio_packet_client *PrioPacketClient; -typedef const struct prio_packet_client *const_PrioPacketClient; +typedef struct prio_packet_client* PrioPacketClient; +typedef const struct prio_packet_client* const_PrioPacketClient; -struct server_a_data { +struct server_a_data +{ // These values are only set for server A. MPArray data_shares; MPArray h_points; }; -struct server_b_data { +struct server_b_data +{ // This value is only used for server B. // // We use a pseudo-random generator to compress the secret-shared data @@ -39,9 +40,10 @@ struct server_b_data { }; /* - * The data that a Prio client sends to each server. + * The data that a Prio client sends to each server. */ -struct prio_packet_client { +struct prio_packet_client +{ // TODO: Can also use a PRG to avoid need for sending Beaver triple shares. // Since this optimization only saves ~30 bytes of communication, we haven't // bothered implementing it yet. @@ -50,25 +52,26 @@ struct prio_packet_client { mp_int f0_share, g0_share, h0_share; PrioServerId for_server; - union { + union + { struct server_a_data A; struct server_b_data B; } shares; }; +PrioPacketClient PrioPacketClient_new(const_PrioConfig cfg, + PrioServerId for_server); +void PrioPacketClient_clear(PrioPacketClient p); +SECStatus PrioPacketClient_set_data(const_PrioConfig cfg, const bool* data_in, + PrioPacketClient for_server_a, + PrioPacketClient for_server_b); -PrioPacketClient PrioPacketClient_new (const_PrioConfig cfg, PrioServerId for_server); -void PrioPacketClient_clear (PrioPacketClient p); -SECStatus PrioPacketClient_set_data (const_PrioConfig cfg, const bool *data_in, - PrioPacketClient for_server_a, PrioPacketClient for_server_b); - -SECStatus PrioPacketClient_decrypt (PrioPacketClient p, - const_PrioConfig cfg, PrivateKey server_priv, - const unsigned char *data_in, unsigned int data_len); - -bool PrioPacketClient_areEqual (const_PrioPacketClient p1, - const_PrioPacketClient p2); +SECStatus PrioPacketClient_decrypt(PrioPacketClient p, const_PrioConfig cfg, + PrivateKey server_priv, + const unsigned char* data_in, + unsigned int data_len); +bool PrioPacketClient_areEqual(const_PrioPacketClient p1, + const_PrioPacketClient p2); #endif /* __CLIENT_H__ */ - diff --git a/third_party/prio/prio/config.c b/third_party/prio/prio/config.c index 708df1fe688b..fc27b00b8d50 100644 --- a/third_party/prio/prio/config.c +++ b/third_party/prio/prio/config.c @@ -1,47 +1,47 @@ /* * Copyright (c) 2018, Henry Corrigan-Gibbs - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include #include #include "config.h" -#include "params.h" #include "mparray.h" +#include "params.h" #include "rand.h" #include "util.h" // The PrioConfig object stores "2^k-th roots of unity" modulo -// the prime modulus we use for all arithmetic. We use -// these roots to perform fast FFT-style polynomial +// the prime modulus we use for all arithmetic. We use +// these roots to perform fast FFT-style polynomial // interpolation and evaluation. // -// In particular, we use a prime modulus p such that +// In particular, we use a prime modulus p such that // p = (2^k)q + 1. // The roots are integers such that r^{2^k} = 1 mod p. static SECStatus -initialize_roots (MPArray arr, const char *values[]) +initialize_roots(MPArray arr, const char* values[]) { // TODO: Read in only the number of roots of unity we need. // Right now we read in all 4096 roots whether or not we use // them all. - for (int i=0; i < arr->len; i++) { - MP_CHECK (mp_read_radix (&arr->data[i], values[i], 16)); + for (int i = 0; i < arr->len; i++) { + MP_CHECK(mp_read_radix(&arr->data[i], values[i], 16)); } - + return SECSuccess; } -PrioConfig -PrioConfig_new (int n_fields, PublicKey server_a, PublicKey server_b, - const unsigned char *batch_id, unsigned int batch_id_len) +PrioConfig +PrioConfig_new(int n_fields, PublicKey server_a, PublicKey server_b, + const unsigned char* batch_id, unsigned int batch_id_len) { SECStatus rv = SECSuccess; - PrioConfig cfg = malloc (sizeof (*cfg)); + PrioConfig cfg = malloc(sizeof(*cfg)); if (!cfg) return NULL; @@ -61,72 +61,73 @@ PrioConfig_new (int n_fields, PublicKey server_a, PublicKey server_b, goto cleanup; } - P_CHECKA (cfg->batch_id = malloc (batch_id_len)); - strncpy ((char *)cfg->batch_id, (char *)batch_id, batch_id_len); + P_CHECKA(cfg->batch_id = malloc(batch_id_len)); + strncpy((char*)cfg->batch_id, (char*)batch_id, batch_id_len); - MP_CHECKC (mp_init (&cfg->modulus)); - MP_CHECKC (mp_read_radix (&cfg->modulus, Modulus, 16)); + MP_CHECKC(mp_init(&cfg->modulus)); + MP_CHECKC(mp_read_radix(&cfg->modulus, Modulus, 16)); // Compute 2^{-1} modulo M - MP_CHECKC (mp_init (&cfg->inv2)); - mp_set (&cfg->inv2, 2); - MP_CHECKC (mp_invmod (&cfg->inv2, &cfg->modulus, &cfg->inv2)); + MP_CHECKC(mp_init(&cfg->inv2)); + mp_set(&cfg->inv2, 2); + MP_CHECKC(mp_invmod(&cfg->inv2, &cfg->modulus, &cfg->inv2)); - P_CHECKA (cfg->roots = MPArray_new (cfg->n_roots)); - P_CHECKA (cfg->rootsInv = MPArray_new (cfg->n_roots)); - MP_CHECKC (initialize_roots (cfg->roots, Roots)); - MP_CHECKC (initialize_roots (cfg->rootsInv, RootsInv)); + P_CHECKA(cfg->roots = MPArray_new(cfg->n_roots)); + P_CHECKA(cfg->rootsInv = MPArray_new(cfg->n_roots)); + MP_CHECKC(initialize_roots(cfg->roots, Roots)); + MP_CHECKC(initialize_roots(cfg->rootsInv, RootsInv)); cleanup: if (rv != SECSuccess) { - PrioConfig_clear (cfg); + PrioConfig_clear(cfg); return NULL; } return cfg; } -PrioConfig -PrioConfig_newTest (int nFields) +PrioConfig +PrioConfig_newTest(int nFields) { - return PrioConfig_new (nFields, NULL, NULL, - (unsigned char *)"testBatch", 9); -} - -void -PrioConfig_clear (PrioConfig cfg) -{ - if (!cfg) return; - if (cfg->batch_id) free (cfg->batch_id); - MPArray_clear (cfg->roots); - MPArray_clear (cfg->rootsInv); - mp_clear (&cfg->modulus); - mp_clear (&cfg->inv2); - free (cfg); -} - -int -PrioConfig_numDataFields (const_PrioConfig cfg) -{ - return cfg->num_data_fields; - -} - -SECStatus -Prio_init (void) -{ - return rand_init (); + return PrioConfig_new(nFields, NULL, NULL, (unsigned char*)"testBatch", 9); } void -Prio_clear (void) +PrioConfig_clear(PrioConfig cfg) { - rand_clear (); + if (!cfg) + return; + if (cfg->batch_id) + free(cfg->batch_id); + MPArray_clear(cfg->roots); + MPArray_clear(cfg->rootsInv); + mp_clear(&cfg->modulus); + mp_clear(&cfg->inv2); + free(cfg); } -int PrioConfig_hPoints (const_PrioConfig cfg) +int +PrioConfig_numDataFields(const_PrioConfig cfg) +{ + return cfg->num_data_fields; +} + +SECStatus +Prio_init(void) +{ + return rand_init(); +} + +void +Prio_clear(void) +{ + rand_clear(); +} + +int +PrioConfig_hPoints(const_PrioConfig cfg) { const int mul_gates = cfg->num_data_fields + 1; - const int N = next_power_of_two (mul_gates); + const int N = next_power_of_two(mul_gates); return N; } diff --git a/third_party/prio/prio/config.h b/third_party/prio/prio/config.h index 2e76d426909d..037d01455f41 100644 --- a/third_party/prio/prio/config.h +++ b/third_party/prio/prio/config.h @@ -1,9 +1,9 @@ /* * Copyright (c) 2018, Henry Corrigan-Gibbs - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef __CONFIG_H__ @@ -13,12 +13,12 @@ #include "mparray.h" -struct prio_config { +struct prio_config +{ int num_data_fields; - unsigned char *batch_id; + unsigned char* batch_id; unsigned int batch_id_len; - PublicKey server_a_pub; PublicKey server_b_pub; @@ -30,7 +30,6 @@ struct prio_config { MPArray rootsInv; }; -int PrioConfig_hPoints (const_PrioConfig cfg); +int PrioConfig_hPoints(const_PrioConfig cfg); #endif /* __CONFIG_H__ */ - diff --git a/third_party/prio/prio/debug.h b/third_party/prio/prio/debug.h index 7d4bd3878664..15f25c805c0a 100644 --- a/third_party/prio/prio/debug.h +++ b/third_party/prio/prio/debug.h @@ -1,9 +1,9 @@ /* * Copyright (c) 2018, Henry Corrigan-Gibbs - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef __DEBUG_H__ @@ -12,10 +12,12 @@ #include #ifdef DEBUG -#define PRIO_DEBUG(msg) do { fprintf(stderr, "Error: %s\n", msg); } while(false); +#define PRIO_DEBUG(msg) \ + do { \ + fprintf(stderr, "Error: %s\n", msg); \ + } while (false); #else #define PRIO_DEBUG(msg) ; #endif #endif /* __DEBUG_H__ */ - diff --git a/third_party/prio/prio/encrypt.c b/third_party/prio/prio/encrypt.c index f0c195235c9c..4b914879de23 100644 --- a/third_party/prio/prio/encrypt.c +++ b/third_party/prio/prio/encrypt.c @@ -1,14 +1,14 @@ /* * Copyright (c) 2018, Henry Corrigan-Gibbs - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#include -#include -#include +#include +#include +#include #include #include "encrypt.h" @@ -24,222 +24,251 @@ #define GCM_TAG_LEN_BYTES 16 #define PRIO_TAG "PrioPacket" -#define AAD_LEN (strlen (PRIO_TAG) + CURVE25519_KEY_LEN + GCM_IV_LEN_BYTES) +#define AAD_LEN (strlen(PRIO_TAG) + CURVE25519_KEY_LEN + GCM_IV_LEN_BYTES) // The all-zeros curve25519 public key, as DER-encoded SKPI blob. static const uint8_t curve25519_spki_zeros[] = { - 0x30, 0x39, 0x30, 0x14, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x09, 0x2b, - 0x06, 0x01, 0x04, 0x01, 0xda, 0x47, 0x0f, 0x01, 0x03, 0x21, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, + 0x30, 0x39, 0x30, 0x14, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, + 0x01, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0xda, 0x47, 0x0f, 0x01, + 0x03, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -static inline uint8_t -hex_to_int (char h) +// Note that we do not use isxdigit because it is locale-dependent +// See: https://github.com/mozilla/libprio/issues/20 +static inline char +is_hex_digit(char c) { - return (h > '9') ? toupper (h) - 'A' + 10 : (h - '0'); + return ('0' <= c && c <= '9') || ('a' <= c && c <= 'f') || + ('A' <= c && c <= 'F'); } -static inline unsigned char -int_to_hex (uint8_t i) +// Note that we do not use toupper because it is locale-dependent +// See: https://github.com/mozilla/libprio/issues/20 +static inline char +to_upper(char c) +{ + if (c >= 'a' && c <= 'z') { + return c - 0x20; + } else { + return c; + } +} + +static inline uint8_t +hex_to_int(char h) +{ + return (h > '9') ? to_upper(h) - 'A' + 10 : (h - '0'); +} + +static inline unsigned char +int_to_hex(uint8_t i) { return (i > 0x09) ? ((i - 10) + 'A') : i + '0'; } - -static SECStatus -derive_dh_secret (PK11SymKey **shared_secret, PrivateKey priv, PublicKey pub) +static SECStatus +derive_dh_secret(PK11SymKey** shared_secret, PrivateKey priv, PublicKey pub) { - if (priv == NULL) return SECFailure; - if (pub == NULL) return SECFailure; - if (shared_secret == NULL) return SECFailure; + if (priv == NULL) + return SECFailure; + if (pub == NULL) + return SECFailure; + if (shared_secret == NULL) + return SECFailure; SECStatus rv = SECSuccess; *shared_secret = NULL; - P_CHECKA (*shared_secret = PK11_PubDeriveWithKDF (priv, pub, PR_FALSE, - NULL, NULL, CKM_ECDH1_DERIVE, CKM_AES_GCM, - CKA_ENCRYPT | CKA_DECRYPT, 16, - CKD_SHA256_KDF, NULL, NULL)); + P_CHECKA(*shared_secret = PK11_PubDeriveWithKDF( + priv, pub, PR_FALSE, NULL, NULL, CKM_ECDH1_DERIVE, CKM_AES_GCM, + CKA_ENCRYPT | CKA_DECRYPT, 16, CKD_SHA256_KDF, NULL, NULL)); cleanup: return rv; } SECStatus -PublicKey_import (PublicKey *pk, const unsigned char *data, unsigned int dataLen) +PublicKey_import(PublicKey* pk, const unsigned char* data, unsigned int dataLen) { SECStatus rv = SECSuccess; - CERTSubjectPublicKeyInfo *pkinfo = NULL; + CERTSubjectPublicKeyInfo* pkinfo = NULL; *pk = NULL; if (dataLen != CURVE25519_KEY_LEN) return SECFailure; unsigned char key_bytes[dataLen]; - memcpy (key_bytes, data, dataLen); + memcpy(key_bytes, data, dataLen); - const int spki_len = sizeof (curve25519_spki_zeros); + const int spki_len = sizeof(curve25519_spki_zeros); uint8_t spki_data[spki_len]; - memcpy (spki_data, curve25519_spki_zeros, spki_len); + memcpy(spki_data, curve25519_spki_zeros, spki_len); SECItem spki_item = { siBuffer, spki_data, spki_len }; - // Import the all-zeros curve25519 public key. - P_CHECKA (pkinfo = SECKEY_DecodeDERSubjectPublicKeyInfo (&spki_item)); - P_CHECKA (*pk = SECKEY_ExtractPublicKey (pkinfo)); + // Import the all-zeros curve25519 public key. + P_CHECKA(pkinfo = SECKEY_DecodeDERSubjectPublicKeyInfo(&spki_item)); + P_CHECKA(*pk = SECKEY_ExtractPublicKey(pkinfo)); // Overwrite the all-zeros public key with the 32-byte curve25519 public key // given as input. - memcpy ((*pk)->u.ec.publicValue.data, data, CURVE25519_KEY_LEN); + memcpy((*pk)->u.ec.publicValue.data, data, CURVE25519_KEY_LEN); cleanup: - if (pkinfo) - SECKEY_DestroySubjectPublicKeyInfo (pkinfo); + if (pkinfo) + SECKEY_DestroySubjectPublicKeyInfo(pkinfo); if (rv != SECSuccess) - PublicKey_clear (*pk); + PublicKey_clear(*pk); return rv; } SECStatus -PublicKey_import_hex (PublicKey *pk, const unsigned char *hex_data, unsigned int dataLen) +PublicKey_import_hex(PublicKey* pk, const unsigned char* hex_data, + unsigned int dataLen) { unsigned char raw_bytes[CURVE25519_KEY_LEN]; if (dataLen != CURVE25519_KEY_LEN_HEX) return SECFailure; - for (unsigned int i=0; iu.ec.publicValue.data, CURVE25519_KEY_LEN); + memcpy(data, pk->u.ec.publicValue.data, CURVE25519_KEY_LEN); return SECSuccess; } -SECStatus -PublicKey_export_hex (const_PublicKey pk, unsigned char data[(2*CURVE25519_KEY_LEN)+1]) +SECStatus +PublicKey_export_hex(const_PublicKey pk, + unsigned char data[(2 * CURVE25519_KEY_LEN) + 1]) { unsigned char raw_data[CURVE25519_KEY_LEN]; - if (PublicKey_export (pk, raw_data) != SECSuccess) + if (PublicKey_export(pk, raw_data) != SECSuccess) return SECFailure; - const unsigned char *p = raw_data; - for (unsigned int i=0; i> 4; - data[2*i] = int_to_hex (byteu); - data[2*i + 1] = int_to_hex (bytel); + data[2 * i] = int_to_hex(byteu); + data[2 * i + 1] = int_to_hex(bytel); p++; } - data[2*CURVE25519_KEY_LEN] = '\0'; + data[2 * CURVE25519_KEY_LEN] = '\0'; return SECSuccess; } -SECStatus -Keypair_new (PrivateKey *pvtkey, PublicKey *pubkey) +SECStatus +Keypair_new(PrivateKey* pvtkey, PublicKey* pubkey) { - if (pvtkey == NULL) return SECFailure; - if (pubkey == NULL) return SECFailure; + if (pvtkey == NULL) + return SECFailure; + if (pubkey == NULL) + return SECFailure; SECStatus rv = SECSuccess; - SECOidData *oid_data = NULL; + SECOidData* oid_data = NULL; *pubkey = NULL; *pvtkey = NULL; SECKEYECParams ecp; ecp.data = NULL; - PK11SlotInfo *slot = NULL; + PK11SlotInfo* slot = NULL; - P_CHECKA (oid_data = SECOID_FindOIDByTag (CURVE_OID_TAG)); + P_CHECKA(oid_data = SECOID_FindOIDByTag(CURVE_OID_TAG)); const int oid_struct_len = 2 + oid_data->oid.len; - P_CHECKA (ecp.data = malloc (oid_struct_len)); + P_CHECKA(ecp.data = malloc(oid_struct_len)); ecp.len = oid_struct_len; - + ecp.type = siDEROID; ecp.data[0] = SEC_ASN1_OBJECT_ID; ecp.data[1] = oid_data->oid.len; - memcpy (&ecp.data[2], oid_data->oid.data, oid_data->oid.len); + memcpy(&ecp.data[2], oid_data->oid.data, oid_data->oid.len); - P_CHECKA (slot = PK11_GetInternalSlot ()); - P_CHECKA (*pvtkey = PK11_GenerateKeyPair(slot, CKM_EC_KEY_PAIR_GEN, &ecp, - (SECKEYPublicKey **)pubkey, PR_FALSE, PR_FALSE, NULL)); - PK11_FreeSlot (slot); + P_CHECKA(slot = PK11_GetInternalSlot()); + P_CHECKA(*pvtkey = PK11_GenerateKeyPair(slot, CKM_EC_KEY_PAIR_GEN, &ecp, + (SECKEYPublicKey**)pubkey, PR_FALSE, + PR_FALSE, NULL)); + PK11_FreeSlot(slot); cleanup: if (ecp.data) - free (ecp.data); + free(ecp.data); if (rv != SECSuccess) { - PublicKey_clear (*pubkey); - PrivateKey_clear (*pvtkey); + PublicKey_clear(*pubkey); + PrivateKey_clear(*pvtkey); } return rv; } -void -PublicKey_clear (PublicKey pubkey) +void +PublicKey_clear(PublicKey pubkey) { - if (pubkey) + if (pubkey) SECKEY_DestroyPublicKey(pubkey); } -void -PrivateKey_clear (PrivateKey pvtkey) +void +PrivateKey_clear(PrivateKey pvtkey) { - if (pvtkey) - SECKEY_DestroyPrivateKey(pvtkey); + if (pvtkey) + SECKEY_DestroyPrivateKey(pvtkey); } -const SECItem * -PublicKey_toBytes (const_PublicKey pubkey) +const SECItem* +PublicKey_toBytes(const_PublicKey pubkey) { return &pubkey->u.ec.publicValue; } SECStatus -PublicKey_encryptSize (unsigned int inputLen, unsigned int *outputLen) +PublicKey_encryptSize(unsigned int inputLen, unsigned int* outputLen) { if (outputLen == NULL || inputLen >= MAX_ENCRYPT_LEN) return SECFailure; // public key, IV, tag, and input - *outputLen = CURVE25519_KEY_LEN + GCM_IV_LEN_BYTES + GCM_TAG_LEN_BYTES + inputLen; + *outputLen = + CURVE25519_KEY_LEN + GCM_IV_LEN_BYTES + GCM_TAG_LEN_BYTES + inputLen; return SECSuccess; } -static void -set_gcm_params (SECItem *paramItem, CK_GCM_PARAMS *param, unsigned char *nonce, - const_PublicKey pubkey, unsigned char *aadBuf) +static void +set_gcm_params(SECItem* paramItem, CK_GCM_PARAMS* param, unsigned char* nonce, + const_PublicKey pubkey, unsigned char* aadBuf) { int offset = 0; - memcpy (aadBuf, PRIO_TAG, strlen (PRIO_TAG)); - offset += strlen (PRIO_TAG); - memcpy (aadBuf + offset, PublicKey_toBytes (pubkey)->data, CURVE25519_KEY_LEN); + memcpy(aadBuf, PRIO_TAG, strlen(PRIO_TAG)); + offset += strlen(PRIO_TAG); + memcpy(aadBuf + offset, PublicKey_toBytes(pubkey)->data, CURVE25519_KEY_LEN); offset += CURVE25519_KEY_LEN; - memcpy (aadBuf + offset, nonce, GCM_IV_LEN_BYTES); - + memcpy(aadBuf + offset, nonce, GCM_IV_LEN_BYTES); + param->pIv = nonce; param->ulIvLen = GCM_IV_LEN_BYTES; param->pAAD = aadBuf; @@ -247,17 +276,14 @@ set_gcm_params (SECItem *paramItem, CK_GCM_PARAMS *param, unsigned char *nonce, param->ulTagBits = GCM_TAG_LEN_BYTES * 8; paramItem->type = siBuffer; - paramItem->data = (void *)param; - paramItem->len = sizeof (*param); - + paramItem->data = (void*)param; + paramItem->len = sizeof(*param); } -SECStatus -PublicKey_encrypt (PublicKey pubkey, - unsigned char *output, - unsigned int *outputLen, - unsigned int maxOutputLen, - const unsigned char *input, unsigned int inputLen) +SECStatus +PublicKey_encrypt(PublicKey pubkey, unsigned char* output, + unsigned int* outputLen, unsigned int maxOutputLen, + const unsigned char* input, unsigned int inputLen) { if (pubkey == NULL) return SECFailure; @@ -266,55 +292,53 @@ PublicKey_encrypt (PublicKey pubkey, return SECFailure; unsigned int needLen; - if (PublicKey_encryptSize (inputLen, &needLen) != SECSuccess) + if (PublicKey_encryptSize(inputLen, &needLen) != SECSuccess) return SECFailure; - if (maxOutputLen < needLen) + if (maxOutputLen < needLen) return SECFailure; SECStatus rv = SECSuccess; - PublicKey eph_pub = NULL; - PrivateKey eph_priv = NULL; - PK11SymKey *aes_key = NULL; + PublicKey eph_pub = NULL; + PrivateKey eph_priv = NULL; + PK11SymKey* aes_key = NULL; unsigned char nonce[GCM_IV_LEN_BYTES]; unsigned char aadBuf[AAD_LEN]; - P_CHECKC (rand_bytes (nonce, GCM_IV_LEN_BYTES)); + P_CHECKC(rand_bytes(nonce, GCM_IV_LEN_BYTES)); - P_CHECKC (Keypair_new (&eph_priv, &eph_pub)); - P_CHECKC (derive_dh_secret (&aes_key, eph_priv, pubkey)); + P_CHECKC(Keypair_new(&eph_priv, &eph_pub)); + P_CHECKC(derive_dh_secret(&aes_key, eph_priv, pubkey)); CK_GCM_PARAMS param; SECItem paramItem; - set_gcm_params (¶mItem, ¶m, nonce, eph_pub, aadBuf); + set_gcm_params(¶mItem, ¶m, nonce, eph_pub, aadBuf); - const SECItem *pk = PublicKey_toBytes (eph_pub); - P_CHECKCB (pk->len == CURVE25519_KEY_LEN); - memcpy (output, pk->data, pk->len); - memcpy (output + CURVE25519_KEY_LEN, param.pIv, param.ulIvLen); + const SECItem* pk = PublicKey_toBytes(eph_pub); + P_CHECKCB(pk->len == CURVE25519_KEY_LEN); + memcpy(output, pk->data, pk->len); + memcpy(output + CURVE25519_KEY_LEN, param.pIv, param.ulIvLen); const int offset = CURVE25519_KEY_LEN + param.ulIvLen; - P_CHECKC (PK11_Encrypt (aes_key, CKM_AES_GCM, ¶mItem, output + offset, - outputLen, maxOutputLen - offset, input, inputLen)); + P_CHECKC(PK11_Encrypt(aes_key, CKM_AES_GCM, ¶mItem, output + offset, + outputLen, maxOutputLen - offset, input, inputLen)); *outputLen = *outputLen + CURVE25519_KEY_LEN + GCM_IV_LEN_BYTES; cleanup: - PublicKey_clear (eph_pub); - PrivateKey_clear (eph_priv); - if (aes_key) - PK11_FreeSymKey (aes_key); + PublicKey_clear(eph_pub); + PrivateKey_clear(eph_priv); + if (aes_key) + PK11_FreeSymKey(aes_key); return rv; } -SECStatus -PrivateKey_decrypt (PrivateKey privkey, - unsigned char *output, - unsigned int *outputLen, - unsigned int maxOutputLen, - const unsigned char *input, unsigned int inputLen) +SECStatus +PrivateKey_decrypt(PrivateKey privkey, unsigned char* output, + unsigned int* outputLen, unsigned int maxOutputLen, + const unsigned char* input, unsigned int inputLen) { - PK11SymKey *aes_key = NULL; + PK11SymKey* aes_key = NULL; PublicKey eph_pub = NULL; unsigned char aad_buf[AAD_LEN]; @@ -323,34 +347,33 @@ PrivateKey_decrypt (PrivateKey privkey, SECStatus rv = SECSuccess; unsigned int headerLen; - if (PublicKey_encryptSize (0, &headerLen) != SECSuccess) + if (PublicKey_encryptSize(0, &headerLen) != SECSuccess) return SECFailure; - if (inputLen < headerLen) + if (inputLen < headerLen) return SECFailure; const unsigned int msglen = inputLen - headerLen; if (maxOutputLen < msglen || msglen >= MAX_ENCRYPT_LEN) return SECFailure; - P_CHECKC (PublicKey_import (&eph_pub, input, CURVE25519_KEY_LEN)); + P_CHECKC(PublicKey_import(&eph_pub, input, CURVE25519_KEY_LEN)); unsigned char nonce[GCM_IV_LEN_BYTES]; - memcpy (nonce, input + CURVE25519_KEY_LEN, GCM_IV_LEN_BYTES); + memcpy(nonce, input + CURVE25519_KEY_LEN, GCM_IV_LEN_BYTES); SECItem paramItem; CK_GCM_PARAMS param; - set_gcm_params (¶mItem, ¶m, nonce, eph_pub, aad_buf); - - P_CHECKC (derive_dh_secret (&aes_key, privkey, eph_pub)); + set_gcm_params(¶mItem, ¶m, nonce, eph_pub, aad_buf); + + P_CHECKC(derive_dh_secret(&aes_key, privkey, eph_pub)); const int offset = CURVE25519_KEY_LEN + GCM_IV_LEN_BYTES; - P_CHECKC (PK11_Decrypt (aes_key, CKM_AES_GCM, ¶mItem, output, - outputLen, maxOutputLen, input + offset, inputLen - offset)); + P_CHECKC(PK11_Decrypt(aes_key, CKM_AES_GCM, ¶mItem, output, outputLen, + maxOutputLen, input + offset, inputLen - offset)); cleanup: - PublicKey_clear (eph_pub); - if (aes_key) - PK11_FreeSymKey (aes_key); + PublicKey_clear(eph_pub); + if (aes_key) + PK11_FreeSymKey(aes_key); return rv; } - diff --git a/third_party/prio/prio/encrypt.h b/third_party/prio/prio/encrypt.h index 67288f4786f7..bc4b1cf331fc 100644 --- a/third_party/prio/prio/encrypt.h +++ b/third_party/prio/prio/encrypt.h @@ -1,12 +1,11 @@ /* * Copyright (c) 2018, Henry Corrigan-Gibbs - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - #ifndef __ENCRYPT_H__ #define __ENCRYPT_H__ @@ -15,7 +14,7 @@ /******* * These functions attempt to implement CCA-secure public-key encryption using - * the NSS library. We use hashed-ElGamal encryption with Curve25519 as the + * the NSS library. We use hashed-ElGamal encryption with Curve25519 as the * underlying group and AES128-GCM as the bulk encryption mode of operation. * * I make no guarantees that I am using NSS correctly or that this encryption @@ -25,7 +24,7 @@ * to implement these functions. */ -/* +/* * Messages encrypted using this library must be smaller than MAX_ENCRYPT_LEN. * Enforcing this length limit helps avoid integer overflow. */ @@ -38,12 +37,12 @@ * is too large (larger than `MAX_ENCRYPT_LEN`), this function returns * an error. */ -SECStatus PublicKey_encryptSize (unsigned int inputLen, unsigned int *outputLen); +SECStatus PublicKey_encryptSize(unsigned int inputLen, unsigned int* outputLen); /* * Generate a new keypair for public-key encryption. */ -SECStatus Keypair_new (PrivateKey *pvtkey, PublicKey *pubkey); +SECStatus Keypair_new(PrivateKey* pvtkey, PublicKey* pubkey); /* * Encrypt an arbitrary bitstring to the specified public key. The buffer @@ -53,22 +52,17 @@ SECStatus Keypair_new (PrivateKey *pvtkey, PublicKey *pubkey); * * The value `inputLen` must be smaller than `MAX_ENCRYPT_LEN`. */ -SECStatus PublicKey_encrypt (PublicKey pubkey, - unsigned char *output, - unsigned int *outputLen, - unsigned int maxOutputLen, - const unsigned char *input, unsigned int inputLen); +SECStatus PublicKey_encrypt(PublicKey pubkey, unsigned char* output, + unsigned int* outputLen, unsigned int maxOutputLen, + const unsigned char* input, unsigned int inputLen); /* * Decrypt an arbitrary bitstring using the specified private key. The output * buffer should be at least 16 bytes larger than the plaintext you expect. If * `outputLen` >= `inputLen`, you should be safe. */ -SECStatus PrivateKey_decrypt (PrivateKey privkey, - unsigned char *output, - unsigned int *outputLen, - unsigned int maxOutputLen, - const unsigned char *input, unsigned int inputLen); +SECStatus PrivateKey_decrypt(PrivateKey privkey, unsigned char* output, + unsigned int* outputLen, unsigned int maxOutputLen, + const unsigned char* input, unsigned int inputLen); #endif /* __ENCRYPT_H__ */ - diff --git a/third_party/prio/prio/mparray.c b/third_party/prio/prio/mparray.c index a49f376767ec..e7115457ab8b 100644 --- a/third_party/prio/prio/mparray.c +++ b/third_party/prio/prio/mparray.c @@ -1,9 +1,9 @@ /* * Copyright (c) 2018, Henry Corrigan-Gibbs - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include @@ -15,31 +15,31 @@ #include "util.h" MPArray -MPArray_new (int len) +MPArray_new(int len) { SECStatus rv = SECSuccess; - MPArray arr = malloc (sizeof *arr); - if (!arr) + MPArray arr = malloc(sizeof *arr); + if (!arr) return NULL; arr->data = NULL; arr->len = len; - P_CHECKA(arr->data = calloc (len, sizeof (mp_int))); + P_CHECKA(arr->data = calloc(len, sizeof(mp_int))); // Initialize these to NULL so that we can figure // out which allocations failed (if any) - for (int i=0; idata[i]) = NULL; + for (int i = 0; i < len; i++) { + MP_DIGITS(&arr->data[i]) = NULL; } - for (int i=0; idata[i])); + for (int i = 0; i < len; i++) { + MP_CHECKC(mp_init(&arr->data[i])); } cleanup: if (rv != SECSuccess) { - MPArray_clear (arr); + MPArray_clear(arr); return NULL; } @@ -47,87 +47,89 @@ cleanup: } MPArray -MPArray_new_bool (int len, const bool *data_in) +MPArray_new_bool(int len, const bool* data_in) { - MPArray arr = MPArray_new (len); - if (arr == NULL) return NULL; + MPArray arr = MPArray_new(len); + if (arr == NULL) + return NULL; - for (int i=0; idata[i], data_in[i]); + for (int i = 0; i < len; i++) { + mp_set(&arr->data[i], data_in[i]); } - + return arr; } SECStatus -MPArray_resize (MPArray arr, int newlen) +MPArray_resize(MPArray arr, int newlen) { SECStatus rv = SECSuccess; const int oldlen = arr->len; if (oldlen == newlen) - return rv; + return rv; // TODO: Use realloc for this? - mp_int *newdata = calloc (newlen, sizeof (mp_int)); + mp_int* newdata = calloc(newlen, sizeof(mp_int)); if (newdata == NULL) return SECFailure; for (int i = 0; i < newlen; i++) { - MP_DIGITS (&newdata[i]) = NULL; + MP_DIGITS(&newdata[i]) = NULL; } // Initialize new array for (int i = 0; i < newlen; i++) { - MP_CHECKC (mp_init (&newdata[i])); + MP_CHECKC(mp_init(&newdata[i])); } // Copy old data into new array for (int i = 0; i < newlen && i < oldlen; i++) { - MP_CHECKC (mp_copy (&arr->data[i], &newdata[i])); + MP_CHECKC(mp_copy(&arr->data[i], &newdata[i])); } // Free old data for (int i = 0; i < oldlen; i++) { - mp_clear (&arr->data[i]); + mp_clear(&arr->data[i]); } - free (arr->data); + free(arr->data); arr->data = newdata; arr->len = newlen; cleanup: if (rv != SECSuccess) { - for (int i=0; i < newlen; i++) { - mp_clear (&newdata[i]); + for (int i = 0; i < newlen; i++) { + mp_clear(&newdata[i]); } - free (newdata); + free(newdata); } return rv; } MPArray -MPArray_dup (const_MPArray src) +MPArray_dup(const_MPArray src) { - MPArray dst = MPArray_new (src->len); - if (!dst) return NULL; + MPArray dst = MPArray_new(src->len); + if (!dst) + return NULL; - SECStatus rv = MPArray_copy (dst, src); + SECStatus rv = MPArray_copy(dst, src); if (rv == SECSuccess) { return dst; } else { - MPArray_clear (dst); + MPArray_clear(dst); return NULL; } } SECStatus -MPArray_copy (MPArray dst, const_MPArray src) +MPArray_copy(MPArray dst, const_MPArray src) { if (dst->len != src->len) return SECFailure; - for (int i=0; ilen; i++) { + for (int i = 0; i < src->len; i++) { if (mp_copy(&src->data[i], &dst->data[i]) != MP_OKAY) { return SECFailure; } @@ -136,10 +138,9 @@ MPArray_copy (MPArray dst, const_MPArray src) return SECSuccess; } - SECStatus -MPArray_set_share (MPArray arrA, MPArray arrB, - const_MPArray src, const_PrioConfig cfg) +MPArray_set_share(MPArray arrA, MPArray arrB, const_MPArray src, + const_PrioConfig cfg) { SECStatus rv = SECSuccess; if (arrA->len != src->len || arrB->len != src->len) @@ -147,48 +148,49 @@ MPArray_set_share (MPArray arrA, MPArray arrB, const int len = src->len; - for (int i=0; i < len; i++) { - P_CHECK(share_int (cfg, &src->data[i], &arrA->data[i], &arrB->data[i])); + for (int i = 0; i < len; i++) { + P_CHECK(share_int(cfg, &src->data[i], &arrA->data[i], &arrB->data[i])); } return rv; } - -void -MPArray_clear (MPArray arr) +void +MPArray_clear(MPArray arr) { - if (arr == NULL) return; + if (arr == NULL) + return; if (arr->data != NULL) { - for (int i=0; ilen; i++) { + for (int i = 0; i < arr->len; i++) { mp_clear(&arr->data[i]); } - free (arr->data); + free(arr->data); } - free (arr); + free(arr); } SECStatus -MPArray_addmod (MPArray dst, const_MPArray to_add, const mp_int *mod) +MPArray_addmod(MPArray dst, const_MPArray to_add, const mp_int* mod) { if (dst->len != to_add->len) return SECFailure; - for (int i=0; ilen; i++) { - MP_CHECK (mp_addmod (&dst->data[i], &to_add->data[i], mod, &dst->data[i])); + for (int i = 0; i < dst->len; i++) { + MP_CHECK(mp_addmod(&dst->data[i], &to_add->data[i], mod, &dst->data[i])); } return SECSuccess; } -bool -MPArray_areEqual (const_MPArray arr1, const_MPArray arr2) +bool +MPArray_areEqual(const_MPArray arr1, const_MPArray arr2) { - if (arr1->len != arr2->len) return false; + if (arr1->len != arr2->len) + return false; - for (int i=0; ilen; i++) { - if (mp_cmp (&arr1->data[i], &arr2->data[i])) + for (int i = 0; i < arr1->len; i++) { + if (mp_cmp(&arr1->data[i], &arr2->data[i])) return false; } diff --git a/third_party/prio/prio/mparray.h b/third_party/prio/prio/mparray.h index b3b9c5d6e459..b268336de75d 100644 --- a/third_party/prio/prio/mparray.h +++ b/third_party/prio/prio/mparray.h @@ -1,9 +1,9 @@ /* * Copyright (c) 2018, Henry Corrigan-Gibbs - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef __MPARRAY_H__ @@ -12,60 +12,59 @@ #include #include -struct mparray { +struct mparray +{ int len; - mp_int *data; + mp_int* data; }; -typedef struct mparray *MPArray; -typedef const struct mparray *const_MPArray; +typedef struct mparray* MPArray; +typedef const struct mparray* const_MPArray; /* * Initialize an array of `mp_int`s of the given length. */ -MPArray MPArray_new (int len); -void MPArray_clear (MPArray arr); +MPArray MPArray_new(int len); +void MPArray_clear(MPArray arr); -/* +/* * Copies secret sharing of data from src into arrays * arrA and arrB. The lengths of the three input arrays * must be identical. */ -SECStatus MPArray_set_share (MPArray arrA, MPArray arrB, - const_MPArray src, const_PrioConfig cfg); +SECStatus MPArray_set_share(MPArray arrA, MPArray arrB, const_MPArray src, + const_PrioConfig cfg); -/* +/* * Initializes array with 0/1 values specified in boolean array `data_in` */ -MPArray MPArray_new_bool (int len, const bool *data_in); +MPArray MPArray_new_bool(int len, const bool* data_in); -/* +/* * Expands or shrinks the MPArray to the desired size. If shrinking, * will clear the values on the end of array. */ -SECStatus MPArray_resize (MPArray arr, int newlen); +SECStatus MPArray_resize(MPArray arr, int newlen); /* - * Initializes dst and creates a duplicate of the array in src. + * Initializes dst and creates a duplicate of the array in src. */ -MPArray MPArray_dup (const_MPArray src); +MPArray MPArray_dup(const_MPArray src); /* * Copies array from src to dst. Arrays must have the same length. */ -SECStatus MPArray_copy (MPArray dst, const_MPArray src); +SECStatus MPArray_copy(MPArray dst, const_MPArray src); /* For each index i into the array, set: * dst[i] = dst[i] + to_add[i] (modulo mod) */ -SECStatus MPArray_addmod (MPArray dst, const_MPArray to_add, - const mp_int *mod); +SECStatus MPArray_addmod(MPArray dst, const_MPArray to_add, const mp_int* mod); /* * Return true iff the two arrays are equal in length * and contents. This comparison is NOT constant time. */ -bool MPArray_areEqual (const_MPArray arr1, const_MPArray arr2); +bool MPArray_areEqual(const_MPArray arr1, const_MPArray arr2); #endif /* __MPARRAY_H__ */ - diff --git a/third_party/prio/prio/params.h b/third_party/prio/prio/params.h index 4680671a3662..414ecf14058f 100644 --- a/third_party/prio/prio/params.h +++ b/third_party/prio/prio/params.h @@ -1,9 +1,9 @@ /* * Copyright (c) 2018, Henry Corrigan-Gibbs - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /**** @@ -15,7 +15,7 @@ #define __PARAMS_H__ // A prime modulus p. -static const char *Modulus = "8000000000000000080001"; +static const char* Modulus = "8000000000000000080001"; // A generator g of a subgroup of Z*_p. // static const char *Generator = "5569560418e73ff9db709"; @@ -24,8203 +24,8198 @@ static const char *Modulus = "8000000000000000080001"; // order 2^Generator2Order in Z*_p. static const int Generator2Order = 12; -static const char *Roots[] = { - "1", - "5569560418e73ff9db709", - "5bf795c6d548a19b6ac340", - "760df490123f6613b0a970", - "7cec29d14a0eefb222bde7", - "3c70a3f0e9c5b206031a33", - "1cec8c96472b84936bbc22", - "3315173915ca23d8c1b814", - "39a0c4e1da321f1bc126f4", - "760f3656c1130b21d369d9", - "452231c3bcde7b7b5b0af8", - "6fe27c77d57e2feb8cbcbf", - "3a7a488015e75feec809f8", - "c16d15fea9d61c8df5121", - "5a8a9b5c659b71e837ea18", - "506d84c9f4d4bc400fdd25", - "4d7566cd294f75be6620f3", - "5f80095f2580ec4cf13b51", - "34eea7a66e8ff3dcc8988e", - "899b1ac6f72ffff8aedfc", - "3cb5a124ce563c3967dbc3", - "16d5205447831696c5d6a0", - "414e761d40341e7f97c304", - "498104aa12355244a9b0d6", - "3a8c5a9525f5d62cea294d", - "1c90fea5f39d8ac4dfc2a3", - "6a716dae106b9aeff2133e", - "735cfad9acf49090fb7037", - "5f4e7c70ff55ff2f888f05", - "2f39a2788d5c2a24e16acc", - "38d9d05f9463a537f470b2", - "72b5d8f8e65cb7509a93d8", - "75066462fdbbc7301e209b", - "55afbc51e7c2cc748942ac", - "47a1f466100bf70dd5689", - "57d88b5e0b434eb1a0dc08", - "27ec8c6636679988dd1267", - "4818e9ef0ea7625cfc3d0", - "68fa3ecc3845db5d523ad9", - "4c95bed884bd87ec1d5e70", - "7136b3dd116ed121aab68", - "60617400353c1eb8e8832b", - "19772e34181f57b670bf9", - "2f58f2df794a35875efc99", - "690aa96130f8c533d77ce4", - "df261ad3b5157a525bb81", - "6a437e22c95fc6c6a4449d", - "1cc2526113f2bae9b540c1", - "7fc2bcc524b4326eb8303d", - "751e9eb348bc8239d6e118", - "2fb170a11f1aecdf586d25", - "32aafc640e8c99bda8faa7", - "552aca5af025ea1e84aadb", - "30a3461d63ca9807464dd6", - "3f68fa1a9ab7772758d0ba", - "6ba1300374acd487b23577", - "35865b2ca16d3453781f41", - "3d1155c4a53835d991a0f", - "74bb588b5553c2b2d4ac78", - "3778fd3a46ffde4755b6ce", - "1d2b9ca2f44294070d4e86", - "38596ed050f14596adc07f", - "2015aa6fc7e48fa3bc5ab5", - "2ad2546b270547fc24541b", - "1dd1b432dc809fe4c879b3", - "149e6a0b6c6543ae895e07", - "7851b3168b92e5daed021f", - "2bee268df09cc40864a917", - "76c2f0ba37187112ee4d4d", - "53016aa1427381b9f28ea5", - "397f144a181805e1a097c9", - "634478b621f7f0a455c48c", - "7cc0116bd0bc164835ee72", - "310e395e429c4494a5f850", - "63e0dbdfb13b4fbb46f00c", - "4a9e2e5d8ad0e2e82aa7de", - "7d0578a8908ba294259bd", - "17276a59aa9630c1141c17", - "393fe0be8f011593a7e1ef", - "475e84f70334cc0bc8292", - "1ccd174e9aa4e58e7414bc", - "19b666810d736e639b51f2", - "2a48d89ce122dfa7deba2f", - "6520599b30ba3568ad0f09", - "4b35e35e82bffb49d0d830", - "3943e926fbe3d426004ea9", - "4e501beb4617be0f02deb4", - "343dad4f059acb87d3b0e2", - "7bb4f9d707b4ee3a20e779", - "7de4927696bdd6d3b718", - "6da3828f2d4926651f7a27", - "3601174a7dc823bf4dc3a6", - "223160cdd1bfa322ca3e6c", - "31a504d1dcc251075e4436", - "1b1ca5d6c688c4cf99448d", - "4309c1c59a581af63d922d", - "6077a88144957827c07205", - "22e321253c3e0fb875c4df", - "6b4728ee168cd23e2fe47c", - "1c35e13f8ffb7c470fa61c", - "4bacbc68650c41520d312c", - "455c9131bfa1c33274be37", - "23c82ae839bf5380a55acf", - "171e59c89024b148534f1b", - "165ff53589519199fc1846", - "69bb33c18017fddf18d091", - "2797689917c95a9d4073ae", - "527c4b155e3708972293d1", - "6e007172a16a9c673e635d", - "1921f3262afb2f3766f357", - "70a2d453b688803716fdbf", - "4fbc987e428ed0ce9cb76c", - "58320debe89492ceee77e", - "1b0c27c7452322264822f3", - "66ffe80af410522139e92f", - "5e56a7d976f1a3334f57c3", - "536a736ad3a37793dd9f54", - "407333b3b6a3bed3ef8920", - "76fed7d89907843db9af52", - "18019c176b4c9453028db8", - "4a54d9b3589d5340a01e23", - "1a4e5bc143bf00e8928403", - "61f4a55b140e767495cd59", - "25cab751e23d8e69bb5048", - "591bac661062f64b8e3f2c", - "7006ef130d31e12bc44c5a", - "6a23876a8c802d81d83d29", - "7cf9338ca9bcab73862b81", - "e941ecc714605cea72177", - "4839c6454f97ececa9969f", - "672d7083ec424e5d883cec", - "3722a55f27f2c02b34eddc", - "4f72850630f6f8c1a68862", - "1a63315aa52cb254b65ce0", - "5a0c2602dcbbbf468b67e0", - "23f219093e9b0bb3b5217d", - "4f6d8c8b0b9b376d42c4b1", - "7abf68b2e4cc9e3a3b2c5f", - "75f4eb6de0d35eeaa16cf8", - "6a81a8d913b71671629ad5", - "3afeb7cc8f8e5bb8770da", - "2b0fed7a534d25697e5c7b", - "2964973c288dced7dae8fc", - "a6c54d0ec55adb4911efd", - "7e958697030784ae5ddf86", - "7fd4ee663460087b793a80", - "5cafa83a10f929b5076c60", - "452d3dfff11e24bf680356", - "39242760b51f2f93fd4721", - "18ec20d19a478746123b", - "30f4f5617cc73435ce74c2", - "1851e925707895d37a37f2", - "6400e87749e3bcbd750d89", - "6c8879d694e1a0b99f8e42", - "3ecf9d05cd62341c4f7784", - "7895b432001edf846b7b3e", - "7c6b359299af5c59043711", - "13f13f9f2c877cb73ba5c", - "2193bc73ac4b40415c95b5", - "6351b2a5f477112f552683", - "48eaf0293f956717b8f048", - "21a363ab0e08a4336f2e44", - "d8c34dffd92c1a20d6a9a", - "7dc98aa964908b313939a9", - "327b2b8d0b75e0d83a5b04", - "2d1b2f087facf1fbfc7e69", - "6e97dd298eaee757a3cec1", - "504d29ae2e5a021d2bb278", - "5344962f90f45cfaeb1bce", - "767dc9d34c09b03db4a0e9", - "731a7b89f357bfb855a5b2", - "42cd59499a0ef57d6b0009", - "5d711409f3faa9ea87abfc", - "352389083277fbbbe66ac3", - "30a77107da1d91a699e9f5", - "39bf9c3f1f0a1a15264530", - "5ce5e0595ad07c8855357b", - "4499c1c16fec3546d5903c", - "5b8e9d8b290e89e5d9afc3", - "214f18ae0c9aa7a1b8c02e", - "639c2fcec8b9dfcc987387", - "1536906705870049755028", - "e0800809dbab6d41345b4", - "39489c7fdb445490d498cd", - "52c4d1c2ad153a3f70bc0a", - "540f5a33d5aeafadcad19d", - "6081e77fedf3898fd66607", - "584b7d6f0b43ddd0b397e4", - "7d8b341c82b019a8d56c92", - "2478db790ed59756cef964", - "93cbb2483673e4e0dda30", - "18ba9d869c489f11ce52e7", - "52cfcbd15dfc6c476cfc76", - "7ae1d007cf030664c6b815", - "9bea90a26f9e93743a998", - "7e62c15038abb8244531b4", - "3cb748f77d638122329dca", - "1fa330f6dd5f3ca09176ce", - "779559a53e6b62275896e9", - "51a9b0945a0908b1d40d24", - "2b13e041339df4d5a521ce", - "7256923d608836710a659c", - "48a999a2dc1a23a934a6fc", - "ef75fc5d77fc146e975f7", - "a058b3353ac6290d9f864", - "290ac68bec8aa8955b7e97", - "754ffe6bc2e7525e892fe", - "5d7c2a1d1267b7a252da1", - "35714b90920ce6fe1f850", - "456138a50c3717947be48e", - "1e2093f76475f58a2dfd79", - "4d8859f357a36792b7211f", - "3505fcb3eb2690f88b3be3", - "2735b2e6f5f08a9e9418bb", - "4c1f6b587fd26654ea69e1", - "351c5a0b997e45ec21b614", - "1c960c994194a1366a2222", - "352a4a136ebd7ef294f370", - "2df28a1b78b46f16aaf53b", - "29bbe5fdf14e69065cb80c", - "30eff32d49c10f325b8e9c", - "628d18e095a8dbcb9f43bf", - "1efd2b46d4a8724e929fd9", - "13221a23af3045ec5cea35", - "15d4218f4bbf0c95cd9649", - "3f5027ce278d444a4dd243", - "2d5e8f78718c2d4660cc69", - "49cb6ac7a2bfdc54300006", - "a134915353ce113eb72dd", - "479e7025ae3fdc2bbcbe22", - "64ed03e382c11a32e34cf4", - "3d73fd3c3744e9ec5d2d04", - "116da33e19c8b80384fe28", - "68ee183b2208228da8bab7", - "1abc0d15793c655cee4a9c", - "307727bd97c5db086074b3", - "1d6812727d8421d0e03a6f", - "5b39ddb704fa58142076d", - "2f78c0f7e7a90558573941", - "35a3ab4773c5054a30c44d", - "76c132264ad2a774a55164", - "620084c5da2910137e2b10", - "31541f24753a28cc5b51d8", - "52f5adde99e4501e4d1c61", - "779eb73caa637aa28db87c", - "3a89578d6ca992f91249be", - "536be2b3e3829710aec51b", - "53c95b2787b88db0682132", - "4a0fb16cc4d1bdfbb239c", - "8b462e0f7448b549fd688", - "783e0229f219bc18b705e4", - "17dd6e40297f1d32786291", - "4f2cc1f6f7aba8c20a670c", - "479fc9912c9c81152eb474", - "117480f169f81bb3e8609c", - "df7ae04689867c9ad97d8", - "70a1107bc42bfb598164ea", - "557361125249092a7bf932", - "5cd319aa7906a96d2f6c7e", - "72a7ca4a8dc56f9c652281", - "dce90e419e8d3f96eb5b4", - "15bb5d9b44eebb27a1e60e", - "2baeaedf76503008b9e428", - "7aa81a94a5a230cf59a0b9", - "55d7bf2f5724b5dd0a04ae", - "e1ef803b3674bf39884ae", - "1738ee1c8e104064e07249", - "7ce4bd3337a7333159cb2c", - "38110b962a169200cc9f0a", - "1ddeaa1e583e9146210f69", - "cfc86f804a481df48868e", - "55a41153a33cb4649703a5", - "5eb4d93a33b2d2e2c2adad", - "4cd904fd9401eac5ad7f1c", - "502c6a2df8916b18106088", - "6259df76b87ab2eff6659f", - "2f85e68dfb9aea66d7f07c", - "1f1eea8231315133cde938", - "6863984d7793407587e8e2", - "7b5272bdeb1b01fe56bc29", - "26b7df388a02a8279b0652", - "7fe76cd2c5affa913c2b41", - "733b81816da25936e81af1", - "235baa54adcc67af92d06d", - "4e6cb8ec1b00e2f28b3a7e", - "88b8371baafc87a9713f4", - "3b0283be973d59ebf4242f", - "587cce1cbd0dee8b98f262", - "6cfdd09fe2bd66b85c2e00", - "12a3196afc09a79694eb31", - "4feae15528510f186aa1fa", - "449ccc3923e92a0bd2e3ba", - "4f74e7ee01738298062093", - "6ce98c831091728c0e73bb", - "4bfd93fb985a44ed0569f4", - "3c8b04f81e14e10396b582", - "6cf76079225189eb2608ce", - "76e87d4d2740e137511b26", - "c62790b24bc842a717e31", - "516640d56302eb15061b25", - "60c8d2e958387c0d0627a8", - "402c7149b20bce787c7e83", - "64c275af1abda385c2af0b", - "5088a2317aa34dd5bb1b4d", - "67a9131aabd5255bdce732", - "d452f805a2c35e686e107", - "5ef5512b3384aa1243daa6", - "6c1076c01e9e44fb047889", - "46bdbd32d31b2a36e04e0a", - "527456447c2748239033cf", - "356211f56936e183312837", - "449d4feccb40da2e122aa1", - "43ee4b35cb3cdc84d1d5db", - "7651ee2e0f4d348cbe95bd", - "2ef2be0f7e33ace73bab4", - "4b8968b5c5a93dbb4b2b55", - "7d2db742721c9ba686ff30", - "48e4926c40cd6ab5e92ffc", - "506e6a05e8de5c9198ae69", - "74a156e77589342bbef3d5", - "798019b397419c8d54fda1", - "5a7d2dd2aa2028d4da8f42", - "5ebb44d93cb77417b61c4f", - "1630a212afc84f038374d9", - "3ae30b1b5931eb630bbf6c", - "37ba1e609c7b12a8e32733", - "238de3e1606bc0e1c33adb", - "149d706db4fce00c71da76", - "524b77666e02692a642407", - "ac6c9987de6c73f2259d9", - "51c819b9ec191b60920096", - "a961f7b95836d3a578170", - "2bb1db818cfd733dcce0b0", - "51eb043d3564fa91215f1b", - "23693b4063cf0fa20dad42", - "4fbaae68fdb253d715d528", - "69a784edece7c38bcf7297", - "1d595362f3a1b4c77729e7", - "22f18c95264f1fb742c348", - "5637e5d4438a119a23f043", - "75a7fc26a6faacf109b345", - "3a051daeeae9770973713e", - "4b21ef5da2b744139c3cf1", - "471eec9edf3f5af18be6bf", - "341851bd5e48e20f0a412f", - "f125d56d3c0c2aaf7ad05", - "c91beeecaf54c95dc1b37", - "38e1e6200860f4072a8a1d", - "3b3a5f854ba249c04d075", - "4170c011864f5582d6a738", - "17fc45b2690c315a5249e8", - "1bab6e088abbb7a786ff3d", - "1b388caec4f8538425d93c", - "6df80f50564e811e245eb5", - "65a5c9fe061a38a8c6c2e0", - "18e5cae7f3bd61293a8c2b", - "408e6268fcd75479c3bece", - "514d622fcdfc26212b5d14", - "435abcd28c0cfc9f321db0", - "710608c33a517ea5d5359e", - "96cf28ae783cd1e477aa5", - "5685392e26e4e637394c54", - "32f953543bd07093a29e5f", - "6806f2889f5316f4c57e07", - "668c0767178119bd41ac3", - "6e885e79f7b5fe77214da5", - "3915c8d33da94da27c1249", - "762f2aec62b91b262cc99f", - "7ce0b194ba3e31249ab36d", - "5dd52a5a11350a9b7572fc", - "404ae85658f9b08174632", - "7772e0b990ccdc614c11c3", - "573747456cbe53c844796c", - "3cf5810d8c38a097a7561f", - "269c017af27ad44e6b201e", - "2835e7f4b39073c5a451bb", - "ba07dcfdd701f16f45aca", - "1b6a00fcabec41d4b43ba2", - "67da5d093fc207176dbdb2", - "311601fec45703953f2b91", - "483ca240f22946b37af3c", - "758f193f192584a42ebc31", - "16fb077509115b4c0ee442", - "2334ccde40867fa1d0bc15", - "3f0177714af6ab07d870c0", - "697c3f9accda8d3543f182", - "59a5901c521b74864c8fb2", - "17961b8be9d0332a213177", - "69defadcac1e44c7a1c0bd", - "2df92a33b308b4efdcaee3", - "3a603b28f5e57fbfd764b9", - "65c75439faa2303912b32e", - "121daf29269045f5bdd20b", - "7adedaa3d8ff64ef5910ed", - "7b59158d38abcc0653e41", - "63bd657552fcd47a1fea3b", - "3951fc47c9cf417968c09a", - "7b97dd845f9509d060f296", - "67cd089f73cfc8807dd840", - "b17adb15bd895ea825438", - "3860f5646a470f19d720f1", - "1365575dcf06e2b1987b3f", - "5fdf7c6cf80f5f4d619b9c", - "1e86f8d9f30e1c9ee2f741", - "2f4da63191088795366c81", - "1f527bd93add787e619f2f", - "1bf7de225f0abb4eae1da2", - "7eede9c7d2fd05759ff0d5", - "7c4ebd51c09994a5c2702b", - "2f27f9f5b37e53f26a3367", - "1a91f5500bd170effa0820", - "14e76412c1e117fa60f762", - "27869ae6bfa80052e928d4", - "36e5208ae458480078d5d", - "193c88995f60dbabf1ee79", - "55509fd3a52bd88fe29e11", - "60188d16e528a5d2e06d3d", - "3cd40ccabd157073f9e356", - "6f7417b6bfc27461fd2524", - "60f671cf9f662680d04313", - "6a1b97013fc782623a1d18", - "4a5a912df871eba16ca2bf", - "4bafb874450e24655961f3", - "7fa7e63240bd502dd4b06b", - "3ac9b63dfc3067c1c4627d", - "11978ed9a01677cec42ee0", - "6b488f646fce9835d43f44", - "2449f6a2ba5fdac5a9c1d4", - "1fb4d17ac6ee317ce5a547", - "230119c3b2a6b1bafca00", - "5ba00e958e1473bae28031", - "2e0a934adfe422dd136191", - "64af53c3c0ad963e3055c1", - "173ee21e60a88ae566e166", - "c25f982adccb58e81ce02", - "1c0d48f6283945e321fdac", - "15b86ea9fb5f9d46bb9d95", - "12ea1cc2026e4f5211a159", - "4948e72d6c06974bcf7212", - "474d5e705efa51e5e97d39", - "3a928b86dc180342e1f053", - "68570d0c5fc94ab3c18486", - "33294a38a5c8a431b3624c", - "7f5271355a686a4df7e516", - "2176005ea62a7fae1a0ec5", - "7b7ba8150a404335a3e978", - "7ee167869f16d0f3096184", - "37b012fbed4994b5319766", - "5a9897a2da0299756dfdb3", - "22c922d5b0fc736e5f1adc", - "7c793c0d415e26d57ec92", - "11326e189db8b15b0744ff", - "39f2517276288f74c45e3a", - "47b94fbc156b869e9d16b9", - "4a27b941aa4c6ad1e07548", - "796842dd6bfad2f98912a6", - "561331256e1d21664a1287", - "4d3db82b9d6efaedc42576", - "26293d249066a3014c3338", - "29d711357943b0afaa5b59", - "3baf4fa4e9f273acdf732c", - "22f4901fc0a8b24cf62fe4", - "fa65751eb4d84785986bf", - "1c89d8520ef104ebd20ee", - "3251a62ebf3abdb7c9ed58", - "59db917020bf7253782d5c", - "52c455dad0b267d43552f0", - "599102d1f2500d61d762c9", - "77024358b3e776b2c5e1af", - "3248d851d401112b750bc", - "36f20d7e24da8778ce35f5", - "4dbcbf0e0833361017aadd", - "7a6a150f8921047e15edcb", - "5d53571a7cc3688e6944b0", - "3de0a5abf20a4845d76439", - "330bf157841f4554c8f5de", - "7faf5fb28aa48ff83cc07", - "ff765fa35889a47189d5c", - "1bb928a5ce5b6a93e4a6be", - "443f4b4ed3b1f2c8fe8ce8", - "159314ac561f7431a71dd2", - "2ad8da8cd83b1521d7659a", - "2e6c1f41a9866f4d867e01", - "2bf095a2fbcdb3391aec69", - "7286bedeaa0c2687819d8a", - "1a1cfff05adf1a427c023e", - "7677202d8f05f9287a6047", - "144036e909f39a00a79653", - "5d5d0b6bedf48b96c5eb79", - "2aeb5606838c910769daa9", - "36b57535eb2f884ec435f1", - "26639427b4cd468207f354", - "567c07ffdf5609acdc57cd", - "46c6a4606b83331dd733e4", - "214ab6242649bf5f0673b5", - "456b75b7118ddbd9c05113", - "23f47a79fc10179e2f1aad", - "6750d083991451ddf24ddc", - "9a91d432ec896438ac971", - "62cba5cd6ece1fcc005653", - "146e2b3f7404eaa2825f64", - "73a1489a18b0815a03faf8", - "4b81add44caab6287f5254", - "43da9e4b9fc98c3225df02", - "73c9485e5e5379f878695", - "4b0e392a6b94b0716bcb0f", - "627d01094a2553e7bdde46", - "6e1c49a1adf3346b270d76", - "2c11fd859f539479044b3d", - "5ad56a9a03d1277384501c", - "538b76dc0991647c99d6ab", - "2fe38c447768175651bb27", - "2d8207ca3331c2f27a3943", - "ac1c0028dc3aa005da816", - "5830e5e1c9294904118c10", - "4fc1aa30a26bf05e1cf79e", - "37ca6d3b30cb2687e44f7a", - "3fbae766d352bf62d71ec9", - "5b8558cbc60eeb5d4d1e0c", - "3c0ef922648f93834d2bac", - "1f216750a4d1686b3b2227", - "54449f7dccf77fd8f14fff", - "25b4f424465c145a893505", - "1533a8f5ee81c2d4352c6", - "747f5812283a8ba1a43af4", - "42d3b2e606813eb48865e1", - "771e23d6155cbd6574be92", - "6937a623eafb54374944c3", - "7ebd8ffb86035ffa249a5c", - "65a59676f2a0f7f5358513", - "4cc1b8f60c7b3b604dd7f3", - "8c1b60a22d754654b3b0e", - "3542a00727cde7902f64", - "46dbb8e8c99f2d8cf603ab", - "449f89bc8e75ebc93c06c2", - "42fe3f1413aec51428fb64", - "6ea50d7820cf1c46cfdea8", - "5e81e2ee54fa1c8e9216bf", - "3cdbf096f176a11d399e68", - "1b8c58018b9ec962054ab0", - "292e4d75da1a76fa4eb730", - "23f737b6f1527cfce0303e", - "1f2e34fd7020d08b01b7f2", - "1103bc87eb4e4e572c882c", - "4796fc52e00fbc5d65fc02", - "6ecdfc4db1fa1b0104403a", - "5d780dd5bc1f62ed520130", - "403ccf27d3ff3c3686d654", - "7a42533b0f16560c421482", - "3c52f4c6c583d5b2a18105", - "32e84128c0dfcdebdcfc5e", - "db6d45038525122246c3a", - "7e9e8be590540d41cb48b7", - "4dac5ec68e30db33d790b3", - "4a9951c3005ac4b7d775a5", - "8d7ac16a6c7fb5dcaf362", - "7a7267a5eeee00421b1bd7", - "14b9cf8ea7c2a2aef663e9", - "7a75465db2452d11dbf6bf", - "49da4e6814895f7566132", - "6ac2b95852f2b3848657c4", - "29f43cc681e11325bf172b", - "41d82e9988854950bdb48c", - "6f5834f39b940405114e26", - "754181ae9689816d4fae85", - "394398fcb25e82a48b8d32", - "693e564c43456862d84db1", - "5fa8c4e879ae9ef5c6f178", - "3937d6181e67f43d9bec08", - "4bd73bb75df0b9c8f31e93", - "417a5a771b0fe4694065d", - "47ddc74fced651c57b4d1f", - "7746c161815ab2091d9e21", - "72216a00ebfc9de1e963c8", - "74c5b771dcd8c4719355d3", - "450dcdc45566039112cb21", - "1ffc37c5751a51bd676a97", - "553adfba4c4a6d20491557", - "d65fa4e9fad0f9180af7", - "6151a60a864edd0e7c7b30", - "57a6c26c5e5dea61f133ee", - "39f0a0674e65b2cad4a706", - "29105da153f2a098ad094b", - "c16242d78c3d8fbfddea4", - "235bf7672a2cda1ab01fb3", - "3faddb5ddd2bdc683de72f", - "75964f1abb3f7cc93e9f96", - "62019722b2962f2ad1787f", - "67427f6921fbdb98c3e375", - "2a0c42a5cba7fe55a006e5", - "2bcf3f6e0be988750bc0c3", - "31cc33f2d92bb3dc73372f", - "553e86c66c2fba13b95f56", - "75f53c77a2d34dd51c6882", - "6f8c0ef46d2275dfe7e84f", - "5c1c9591ed7cecac5be504", - "e0fd267f226bcb77b4105", - "1aa73126a375b6cf5e8b5", - "5e4eaaa44cce4760757194", - "a15cce75efaba6c1b571b", - "7f779a7314dbb8bea5c652", - "2359b0102f9a1f774278d", - "20bd84ec27cae248ea38a3", - "38a3fd25a6d9f4f7c85efc", - "2117da386a0ba848e04619", - "6db55a7581d577d97e45ef", - "68437c168764f9b52e36f", - "5574ce6446f5f9b2cb3ade", - "2a8fc7a338bd0e95e61238", - "6dd1e30b456df046e42f20", - "360136af955e5fa1edc1", - "403c97fd7a8e612b101803", - "e8a31983f38b3bc04d83f", - "2fc4119b8d9484cd86a0bd", - "23b23c226ec7148e9ecfd4", - "40f14f4642441c80c723a2", - "255da48e767df6db73178f", - "5f4ee2c7a7d447e781b997", - "4945531dd0d285dff322e3", - "58de9434dcaeb21007cf50", - "4eb92d6051c08bfec28d32", - "46777bd089a8dc8c44ba66", - "155305c9e80b8231f3fea7", - "27e0d5b6d5b01b974468e6", - "3337445fe49877ddd94c8c", - "23ff36317f41cdc69b5f8c", - "5798f45a6d32a5d9e220c4", - "6b1b87bf69d8ba16154459", - "d959366c9d2eed9c988e", - "7914f6f164e20860badddb", - "fca586b3bb595a8d4101", - "68bf1a165a85b17f192a39", - "7b94e69ecfb1ba4bdf42b9", - "363177aa4ad204478f4d2e", - "4ec109ed0d029a0c6bd1c3", - "ccd4be560162041ae08e2", - "3e7a71b985de5c6c7a9f57", - "1dcb001f06c75da3270a59", - "7feefa2c38e3a6212b4cc2", - "58a47971604afebfc2dfe", - "175182c7cd2ce431b0150e", - "1ff2197a0e5b3d0b65c928", - "497b40c11c5d479cab5f20", - "5448bba652328fd63e3ca2", - "748cb85b7df9ca5a82d4a0", - "5b60aca7fe85259aa048ba", - "68bba5659f4f20356a0cad", - "16a2f9f4e53133020d693f", - "75df623177a9cc914a680f", - "dfa61531c98e389318ffc", - "12502410f917e813c566e4", - "385c720d2080ae9544a074", - "15c5021e3387b5104eda39", - "6ed402123cbfe00df8030b", - "4e9e415c8033fbf3989b6d", - "1ead4bf29c5aa1e11118b1", - "3eed8387e5a22f84995caa", - "6207f87b59fc321d1fa8c5", - "5527388c03206dff6a464b", - "232706fb395f1e37b2683d", - "5eacde9e13242553f24977", - "257f0dc17de9e402db5577", - "26c8838f41263334d39302", - "5ed2c798bc4d3df9693b4a", - "59048c7bc400c1b2f055f1", - "60ea199093a4e9f80613b6", - "3fdb397b831af56c0902f1", - "47be6483decbcd32c50b44", - "715687651f6925a41a3bf1", - "5c585a64ca68d89750e9da", - "1f5e885344b51456b2195b", - "5d2602e9c7bafe79929bee", - "25b65fbcf4deba1535165c", - "4bba04cb6f7dfe33e4bd", - "4e1dab19fafdbf4d11123", - "3b79806e60c6443e5b75ae", - "28390f3626b1fdadbcbfd8", - "2ac5b705311ca0e8e6bcda", - "21cbfd5db5cf856bb6980a", - "31340daa6bee66dc702e47", - "4520d49550bf0a2328020f", - "6a91ca9f24a59bd3f77cce", - "590c069f4d458da38448fb", - "4eca5fbd35a4778cd18f80", - "288723d0eb9a25150c0772", - "6bd55e81cea4df6934b8f5", - "684e96f56360b04576ab1f", - "10c2f27dd2e5d8f77a071d", - "78b61404bffa36b135773d", - "9b13c11e290284a86caf", - "415d623b63f929b3ef879f", - "4dd2e16c6f9989907671be", - "72e3a111047449df428c07", - "27c4576460764aabe86ca", - "509ca3fe7eae200044712a", - "1488492f946cb788d721d6", - "5fd2fb0300581c5f59fa7c", - "cae1cd222ac38b9a89a19", - "62a4fc7a9af2d27e92b08f", - "2dd86ec9cb242b4e68016c", - "615326e14c6c74c717def2", - "454b67d8b7470679eeda79", - "359b739ee10f4c4f24e721", - "6714be0beb22d71708c5e6", - "571cc10547604b09ba9b69", - "64981a92737099a91d3794", - "58b898760417610a09ff41", - "5e1c654c63269bdc77fee1", - "37e704706a7967491e3628", - "76a279212b584d95ed2cd0", - "64d1d7c43b00bfc99b8bb2", - "524919eb6636c6c6c14a82", - "4176799b704bfacae7d897", - "2113e1a93f5d2f1cba0377", - "47626057be8af9d92cef74", - "31fcd9e9b87aae6bf32f83", - "2cf0b3c6e55d4f6c794d8f", - "2f36ea2bf51461b1407878", - "2840ecdbeaf847ed4e56fd", - "4dba440f7f398ce0198b25", - "6ef7e0b470470f565c088f", - "58a41d74e16c1b1fb6cbf", - "68b020f430372f0b20817e", - "396792f2585d3e823623df", - "171772c43b172c6f59b4ee", - "35da7f1fc27e6edf7e2774", - "5fe19870cf156902f09ea2", - "4a99080981fd90fd8f202c", - "4fb7ac8e103e64af4c501b", - "32124e45d595b542218cca", - "4cbbf282cb8d5b492509da", - "26e8b6fae1b81184be307f", - "4019e2ed5f4f686e75a334", - "aebf119c49f1f5d4fa77", - "214de8b9e305b92a9ebc6a", - "155503fef8a8a42650f8de", - "4cfa062853643ca21aa8e4", - "210804240b673797c1da0b", - "4499b6e3311b7fe5b9c98e", - "904098cdbfd4389279e30", - "575c81fbd5408f583cec84", - "2cb3e5c4dae6b173319195", - "411254ef95bca10cdc61b9", - "14266a10ce4302dd32d262", - "14a25dabe8f8f9bd2745b5", - "7c2bf4a989b0889ab6c2ee", - "7bb42f21df6b474c926cab", - "4edae7063e31e196fbffc4", - "706df4fd50e1c42994aed3", - "312ecee1519b0617d31186", - "32f8a36cc1b46c25cdcc28", - "6cc9f90d012be002904668", - "69498de156a0aa10a4e2dc", - "6bf558bed09b770ac7b7db", - "45166035762ea541feeea1", - "2bcddd9fb0f98505c98aa9", - "56b71258283af76e7bcfab", - "3349dac2077bfdf6a12d86", - "39450177cdd3980c4efafa", - "4ebe9580f66ecfa62bdae4", - "2d2c322dac49b5fc4277a6", - "63a2efcfe030b5eb3fd526", - "2327087d544749f348c909", - "3d49c943bed92220933501", - "2501ea3eadb12569e01e7e", - "7c2fed1746d715eb95529", - "3adbdefe2bc4d894d3eea5", - "574f9294e066c8fdb761b7", - "69527863032c1ba7d7e238", - "78778c448d7d69eeff19c7", - "63a482d47b34384d6c0abf", - "37120883f03d674fbee3d7", - "46789b05c1e88afd58b2c6", - "62e55ea318373ea102e458", - "7bfe5c12baaa86c60d8117", - "6c065cf636d6bc65762095", - "45109475272b0ee96581b7", - "1b4e22a54398ec5712c2f5", - "c0bc8c55f3b95e521ebf8", - "614224558d52e5d4eb23b8", - "532cc2e0afe1d979c42a70", - "6e48887c0bee3ba8386f63", - "726d30610282ed39d8f203", - "53a902325a9087232d64a1", - "6e72d626e97997cb842159", - "1fa48382ab305e0404adc", - "3d3a2d2ef7d22dc8adb10e", - "59aab11c164124e5cdf604", - "7529b300b4b89c580a5f62", - "206a9c38358f291b01e407", - "47267802b4baf11a616d7b", - "1d50b663f8750fc777a8a9", - "4113025c4b26d50d501a53", - "21e6a33067365b1e718020", - "1e3f1f00ee5c87d8bcc6a5", - "37902c15fea70cc2588984", - "330554538efb3452d928d9", - "eb12a34ffd8e97426aebf", - "7f53a40fb6d59c55fc0a6a", - "2ccc62a5fe0c2d164b78ac", - "3a82f64175d5b3caec9c53", - "676d8d92a92b0706da21e1", - "5c91f707bee21c71c33c34", - "2ab6145578df975521753c", - "6e20ab59697e8bf608ee9d", - "96afde4db924db62eec7", - "2d980e097ecb2ab91b9b92", - "352a1b67a355f38121c462", - "7c3ad9d6ed54817d082b65", - "65e071aa89e8e9caa17f", - "4e4d1094ae9ce9f42b1d71", - "6d82429df8c04f3e8cbdea", - "201a5f031183f9e3136174", - "4b31d20ed3a1f68f117d30", - "309eb70bbb47b20185134f", - "bf1c05f166718be1c6836", - "29dc0e371f2a3ea6cf4d60", - "610a799f5f9443dd8f333", - "7ca0b74cff2de67657aaa1", - "31018337a926110b0a5b91", - "3c066553be4fa2a741db4d", - "194fc13ec819c9e2289cea", - "3c7d066200b6ae5892048a", - "768b4e15703c2b99a95ee7", - "66673b06f4474ab9ac84e3", - "75b60c74c3f4835e0ba3f1", - "282bde17894173789173e7", - "6b386c8a9795cf0b45e160", - "1984882a708094eb26643e", - "7e84a589b79843d0f09d89", - "7f30d40bb0193bcc3bff38", - "1e9e640158c2d5ef405818", - "46f7147d837df6469c39be", - "717a62d953937ab8d63ef4", - "29d27ddd5f46b0a514ec85", - "7f5d5abee4ea627ca346c", - "1ba30d22d8ca0e3412c0e7", - "1b892a6bc6d106036dc210", - "78208a8be2c33504df2573", - "2d92e146c92e5c2141114e", - "65ccc844f43d7740c3bb83", - "6cbec7ee27571943d99309", - "7ab8d7968452d732fc3362", - "51e871e33b066886db1e57", - "70cc62d0a35cccb85972ee", - "7db23dcfd5b48847b2da44", - "38863908f348e0ff24d2ea", - "5f7998cdc984bda089a530", - "593ba411e3481cff090a6e", - "30c01b8abdb9d98a7941dd", - "46861d4c2ab5de181f3e32", - "2f44e6e7eed452c1b02ade", - "31e4383d0d65d0adfc3084", - "44b51755bfc5410d6cfad6", - "2b89a454954d4c6b2e2120", - "7a1817cf8f21c4f863437a", - "1ece2489d9c16fd0d7c093", - "7fd049d0f5d16bca84fbf0", - "284cbec8937114a1728cdb", - "2a6ced30aaeaaa3957eaf", - "41ec16a5c725c7d32d3a8d", - "2c1cf6d476ed98aad97b90", - "715fb02624875de3ce495c", - "3d325eede75d0a573042e2", - "4550a8c9126d63e137546e", - "116c396589d81e0684d5a0", - "48ad93093caf03d61b0aa8", - "29bfa87365d098b3fe8377", - "3e14120ed24ebae50e64ef", - "1924697a3681efc60e8e70", - "1e1de465daadd9547d63fe", - "32c9397c9adff65d943965", - "41ff1be99bebe99b10f273", - "cb351e8f1a28278af3af8", - "5939fc19fad9c14c8917a9", - "634af4f8ff5eecb70f9b3b", - "14b126e3c0b0f4dae2ddfb", - "39bc9fe63b4ca1891dbe7f", - "3b77afb6ec85d92608bbc9", - "6308b8f5574126f70ec3cf", - "2928531ef291fb90d243e3", - "7d43897c9a717ea4ffaf53", - "542f3c6130072ffd145c0a", - "57b79cb347145bcbe43bcf", - "68855602ae559673b8a2dc", - "77f657453333dfbed3c7e5", - "1fb7c568bdffd12b767330", - "abbcfb2e4c3da6b090978", - "36224c16a9190272a21e14", - "47df2e03e1548a16e223be", - "f6c4daf384fb3d39aa985", - "6978fb86dcb4ccc82a3738", - "670c6449f82194e5367c1d", - "75a29d53450973ae07e5b6", - "1a0cc5d78d1da3759fd0fb", - "319945f43efa75c6d6fbd6", - "4a8154e2948099e7b7c4c5", - "2353c3f920ce7af530f96d", - "781973046ae51aa956a060", - "21789b3595bc366315af2", - "4d63e68650d056d4e2cca2", - "6eceb600a9b81fd3aa7175", - "2021e0329a909a39851fe3", - "45d43d697cb8503c85839a", - "7489fd5407cd56abfcfc49", - "57bcb68e1f52791794bf4b", - "71db6b9125d5ab5b3e7493", - "4e72dcffc8f26eb136b7c7", - "890072ab6d3eb608d30ea", - "2f1b9eb8c8ceec3aba8c3f", - "269ad3cfbd18bd255786fd", - "7e18b1dc04cb3af247aa31", - "43cebcc2f248fc1fcbd6b4", - "1b9995439565d095eb8a8c", - "66e2564796168c2d0a015a", - "13c9d1e81de8cbb64a1797", - "657128352843035ba5fee1", - "58c411222783451febdf82", - "2970c6e86dd017c5341ddc", - "7bb1913bf745fa526f18a8", - "4d0a046c7ec4f54117f367", - "36f24af02e5318171bea53", - "9cf05f6855d4068390948", - "1107ffccdffb2932659325", - "2ae1383e51812f870ebf41", - "3aa6d80b7b4477df65330a", - "6cc6a998d40d1bad211cd", - "7d58cee39bf1830f1b3ec0", - "dbd1bb9693e65c5eeef4a", - "4385d494a7bdb154810c4d", - "4a64cce2fc4633dbb63e09", - "3e9654e3940c0f541b93cd", - "1207aa2a4ea7c882b5e76f", - "43bc8bffd5b4fa12491d7c", - "7df66ef2eea696dbe6ad95", - "4e203019ba4b94cd691d60", - "61978b574cf8f6d53118d6", - "14816e04a6b799d1ce9e1e", - "5c699bfc1a98ced38d7c88", - "509dfa92ab81408672391b", - "2025bd13134bf0ca69b0f6", - "675948e6670907b03227ed", - "90bd6d6fef2e358a664bf", - "2f1dd3930a2948f2187f86", - "6336954989b8a716380f64", - "2655fc5da8cafdc10e8c6c", - "be26e79f27c2fffd5718b", - "7568ac37df7da28c47bab9", - "3128342c1cd21185c739db", - "1318f3d7743d8ee4ecfdb2", - "26102582959271955d45bb", - "1118a89d656497538996f2", - "4d74065738715d35d47743", - "2644cda468b716b53c99d1", - "2aec8efef6c41604b67a83", - "76393b1564fa2cd841480e", - "87eada956963224c06418", - "44f34a642236b1e7e4c8fe", - "5edc4541d1854504d071a", - "4a292844d7aa26520c09b1", - "1526a67a2f54717285cebc", - "7decc101d84d7378c8efe2", - "1f8889a7c0321f5279b37a", - "71d26320321cdb1dc925e0", - "b8385ec48f904d72393ba", - "4a2cef4e3606d1b9422334", - "db7255fca12f37c452ffa", - "4374a87512bdcb27925ebe", - "99539a5120bf06fd3edb8", - "4f7806a65676c896ee7db9", - "365cb247c96e7933341e76", - "7964fb4049b23d750b6f0e", - "48cd6ee15c4874d342b21f", - "221728332d3142e3346be", - "198d839621f761dde4f853", - "259839d29faddb791e3548", - "15324434e27844cc4fba51", - "60e351e7834b181d30a00c", - "6337453f9c180b8ddb37c4", - "608a29bc043b54adde90b0", - "4cb0c7462e90f28fa251d", - "b5f14620587f1e8ed5a45", - "3c994e655edabd5cfbe8b8", - "35ebfb3fd5a71979daee0c", - "2a1abd32897155b55014be", - "67d12b5d61741b8623f378", - "21469f9c49fb4d2fb54baa", - "728aa131a37012e184c2b6", - "6f085a8f46a66e79fe4f92", - "1a95aa2ba56c053acf7e56", - "1f1c7eef9d0f99e1e209db", - "5b57bc12988f27dd0ed418", - "5e9464fbce6027257d92c6", - "41be4715ccf6dde8b12086", - "25ff556cf1afefe2cd2ba9", - "59f67a0c66d5e9744004c6", - "23c20aae79c2ffaa75a36c", - "574f95a475dce62a3071ca", - "4a98326f880a44e2d6ea5e", - "39f7a72e1daced6411b1a6", - "37a4477749686070e7e049", - "51524048af5a6750b1955", - "43012f86bfa02bf0033ee9", - "4253e27061630b9343ddfd", - "520db901eb8309582e12a2", - "656f70349417ef562616d7", - "13cc5c5fa7afb2b7468106", - "1916345f1ad90cf48c6472", - "a80defe299bf7c4d81738", - "673a9bc1330de8c0b0abe1", - "226f7d490aa9d47314570", - "4762e175d924ca1dff7d06", - "79ae8d3a65221805ed59d3", - "65838019d10030d2edd34c", - "46d2651ce40dd1fdd11e69", - "4277911fa0e430960db091", - "5370ef9f2399e3c803b5a6", - "69110081782c350722756f", - "be2266f15dfa6e02e4a02", - "7c64411c354fca180b974e", - "3669075c083d3a0547d7ee", - "49212e86ec70f1b328e11a", - "70628248b6cda7311de5ca", - "5593dc730a3a85d6ce77d2", - "4a2416a8cf412f996e9654", - "56f01f51a5be66f649b1d6", - "1c7c6456335bb722881302", - "4f571e68d11ba0c201ec2c", - "2f615de4e96f8f9837947f", - "9cc0a7524feb44aafa989", - "13705ad9594243161047cf", - "358734094106c4c77371f8", - "48384f03b178aecb456dbb", - "336699d6c6f15f6ab914e2", - "5dd2532249188dbe3d2539", - "520d412f22645bfa3f3a33", - "45838fc0d9bd4e814df398", - "5d172643cb569d9b2ab357", - "34470b1eee2f871c42ba71", - "16103ea0d454ef686ebf4d", - "31e4aec6d42e52c762e301", - "217d231f2ea4bf28c97e44", - "15bef1b795296c7e8862d0", - "225461e731f47cbf2cbf5f", - "520f0b6932233966b7bdb1", - "6db3eec1da4e57eacd7cf4", - "5728f13fbf1367c5292a3a", - "7856c391e8828b90a94afe", - "6b36296c1bd668243e920e", - "2f8aa359ac5538f4834ed7", - "208dfefbc938eb8f166f28", - "6506edb4005521bcb61671", - "202377a9328fcb8f661a5d", - "6f4a829757301eb1143585", - "5baffc06fe51f5caa49a4c", - "1c24006c67392d350aebe9", - "a3d31a1daca53878fe695", - "6a3f78db4e25085a772f7a", - "423813f9eb92bfadf14d9a", - "60548a10984139e59f5d8a", - "ee2c219af9300476a7d41", - "6a4862d59f8198b4ea0fd5", - "76d72d56a09f253d257f0e", - "52492b4a4856d777ca0682", - "2dd44a6d1765874cf1dbb4", - "73040349f8459e94069012", - "6c290f053f3f46327ee8ec", - "6d575f1601945a3ca29eb8", - "3aac1aff3b6e14d31a91e7", - "4972dfe88d7e4fb02ffe72", - "5a86321f172c81fbf185ef", - "50b37142bd10ca63ad3866", - "50148cebf8644fa7375aa", - "322164812a5696cb2322b0", - "4303859a49916073987344", - "bac1f8bfa0e63045ec3ea", - "67b770c97867478cc69b37", - "2cd2d00d4262f35754bb13", - "678fb8bf7f6342c5764339", - "656e5b10b9da085176e0e4", - "59dbf0c177e94a664cfe3b", - "1f8b63c5fea99ffd6a5348", - "4debfa77d5d5f3fa106f86", - "147a0d7fc26817e7251ada", - "3f26224827d27901ba392a", - "24364b397921eedc03333e", - "361de61b4e6057d1cb2274", - "14b5583a83133add54d368", - "6ead11e0936e4bb4e855e1", - "30e484fb4ce5927a937373", - "571513666bf5e4e0b1c7c0", - "4be11f1cd60954626093b7", - "775bde6bde2d0aa4187fe7", - "5a1b57c203d09cc8a22696", - "5d5e844e1fd78c36c3341e", - "33b05c78a18798e4462d45", - "624f69e6f91d2b9574cb8", - "172e3a20b269ac416b7186", - "1f08599df3ce28d2e2a99", - "3d50a612150493864e2df9", - "42e82d8613957e0acb2b09", - "50e45902fe1a308ec88670", - "23db937264552bf6dc2858", - "6395a035a6a5e009dcf586", - "23931a4d64503bc81a5a33", - "f6074b1e17e08713a2a46", - "1e604eea4a6fb7804d131c", - "246e8276fd64f7af18402a", - "7fdefc35775213402acc91", - "31f0df7953457ce90524a8", - "731437b69ca76a93992caf", - "3559d5470cc8be88bbee52", - "2a6da3e3f6425cc4caf185", - "384ac895940651e4b3df31", - "20cfa0c6bfbdce5e399a70", - "72f290cf9ea470dcec1318", - "77ae05c9ad4bb1a82ee6f6", - "33f6606f82062475e2caf5", - "373211f704832f37df113f", - "c663e7994203d116af45d", - "25b286320c27c0f91c388", - "2219a8eabaec2cc4da44cf", - "3fa82c77c11ef3ce373a08", - "6c65a41601a28b4854db0b", - "398768a52710b109c92dcd", - "45e67b0777cb6facf28d74", - "21ac3ebe991cfe1bade37d", - "6db9060a2078f4de4b4e1b", - "1f6a141f6eb54cb95d54af", - "68c1092ddd7cea180b7a8a", - "e5d22d0ba9e3194e2337d", - "68075aa010a2a7afcb2078", - "577a2773ebc9e2412cb050", - "1634b76faeb97237505ef4", - "1aadb770481974ec7ba970", - "42a1f9791054781a203d9b", - "7a520385f587099a8da6a1", - "1a88cb781abea4a70cdfa7", - "655b44d3a92231714b14c8", - "651be8b59b15d629ab774a", - "550e4c9178e5dead2f815e", - "ee736adb9b9c1860d483b", - "ceff6274c7b15ae86dcc", - "214d49f3e2681b232cf62e", - "2330589e6c22439bef95d1", - "7e1ce3bec1e98dd35947ed", - "72118d192add3aa4c1e0b6", - "67daf6ba4dc4d74236df77", - "d16f53a28b7042d305524", - "6f52ff1c7f6dba719401b2", - "6ebb0dee9291bd90cd2215", - "78dfe864170ab14a408743", - "601b382825c1515525a19c", - "2e5ffe59b5dd3843fa4c17", - "2bf32012cc6354c709ad2", - "669f3588d7a4ca7ee3dd1f", - "3de21ce46f7c8be3bab3b9", - "432c0a15a9dc31696b79c7", - "349470b19ee7a8cf922b33", - "3c53d6131f8c41d5d7317b", - "5e83dc6dedd0679793feca", - "54c245a123767ef7f22e33", - "563e208513fb23ff9ca7d", - "b512df0270e6ffe2d4a9f", - "b0715d55fe0c1edd9613b", - "c0ecef4f88f5957d4b1b", - "c8806bb60205886d4ff9d", - "32c2902887e1700cd5dddb", - "49d6a78a88159326775c2e", - "56359d56dcb06ea3ab68ec", - "2d794034e6ae324ba7041c", - "64f201a4086e40b2a3a19d", - "7eaf34148ada80711a86fe", - "2142584bb5cff6c1e5011e", - "15060a6e69612092d45768", - "4de3353d33028c5f557394", - "70594464b46de9acc11f02", - "1fc064c4398ccf6bf7b1de", - "51cf9e84f5414c7907e79a", - "71be60f1312db2fcc7f045", - "5fa826fd6352f83c34bb5e", - "62baea1b89700a3953e872", - "4a266217d4534cc588119", - "7bc0acaa724475da5a8a83", - "3d9a1023138b0e9cbe7d70", - "388d8c3c958b6abcbf6aba", - "98079c36403a029b3f0bd", - "72716051b13a2c1876c8ef", - "515a0593d1e619118d226b", - "2a035934ba5fafe2ebaf47", - "316bc661e89aeb9e7e20a6", - "25330fc3e5df50eee77cd4", - "6c8071fad8933706efff6c", - "3669984e1ddcb753afb878", - "4781781ebc739ed9d4e35", - "3915c71f3b447b64ce4513", - "726dd56f61c4c5016201f9", - "7b8ff43621b7fb13c3edd2", - "2bfe7376e8ab62fafbff59", - "207cf80fa76e8708f88dc9", - "3a4a4ac73bb38c0c48aea2", - "52e6bde0fed2ecd82f7bf", - "523ee7b96bbc2b0977b4f", - "551b691726c66f9ec1f9e8", - "361fe28e640ec02ae49613", - "71e1aa5a9aacb38b66f605", - "d427f0f9d14ecf4c54fbd", - "629e9c894bbbebf06d3299", - "37f7d323d5bf332eed1bcd", - "7fcd5bd9328b9f06223a1a", - "744db8f7e25f69bc47f2cb", - "4b0d1ff6297b378945b906", - "7c1d3420db42a6ffd37cef", - "2f8592e02ef759cdd34c72", - "4dac1ce4b87e60431b8a4d", - "451e904c04882b739d233e", - "5bb2eece8c95a515d2e2ea", - "797d4c38129f52836fa5c7", - "5d29345f097e1dc041bc7f", - "6b25878a1ec102b9e883f1", - "610d07557d991d9db3dea7", - "5d3293ca54de6a3aa06b08", - "62e4e44df51bf11734aafc", - "1945686d70d9df98093dd1", - "2c16632a312edfedcc7f72", - "19675db116558d90bb4f6", - "620c14b60053b660420c4b", - "39a26bf8336439ba9968b4", - "376c7a8d0fa0abf4c0bb7c", - "7f2209419e3163fbb4cd8a", - "6aece787aae5251b57b3ae", - "6b380bf5d71fe523ad1e4d", - "2306ed04565a9cf9fa84c2", - "7e37a126be9507ba4c717f", - "67ae2ace35fde529154a8f", - "352d204330140b3786230b", - "6927c4b12865ac8f053dcb", - "7e61e3317d07a1009894dd", - "2768a7a783d9baa4e5cce3", - "260213253056e29f0ac6e3", - "61539cf7b388689e7a260a", - "3d9131aa5802e27a83eb61", - "5f87453deb48ed6c9a1afa", - "418b73330a3b4d1a80474f", - "5cd3a1cc8bf78e4c7e3747", - "784bdef1566f244d4ff44d", - "2c4bac0a0cf06ff50ff71e", - "3608208e4497b40a62b3a0", - "6e8b2732511303a48ef731", - "1ef9edb1f958cdf81fb9d8", - "4bdbd2765933e2b1d70563", - "b2687172956319218655e", - "4f787847feba11bfcbc764", - "49ede33966bc3f0dc8757c", - "12a2fa8c4d06a694b748c6", - "2146fc84389596cf6fa8ca", - "536bfe32ac8da07b253be0", - "773a63e6b7c9e3bec91272", - "6bc6acd592c0200b749e07", - "3d28e1c12f9c60e500dce7", - "5687a42dcd55b43227f657", - "36b36922114363ceb85a26", - "51e267e9a5a7684ebfd343", - "5b4aec35da23a27808974", - "2e684b7951a2526d838fd7", - "62b2e70d411eb11bf0a695", - "6473dbfbe4a3f63d08e3f2", - "661787ba011711628186b7", - "7234cde8ecc6673caf864a", - "1e39f05dac576881e6c295", - "420c1c0074adbe0616df4b", - "177f43e8d62e87c66b9da", - "10fafca3d5f71faff8f1a", - "43dcb4450a256b9a0eb673", - "460372cf36a22fb6b9641e", - "a4d6bd96f61637d730c9c", - "1754f51aa79c3b0803bf00", - "65fe3a22c7d35ad3f875e7", - "150c29ddf5483fb74be06", - "716991a2a17f536244885f", - "475131d01f3e6dc3b169fe", - "569bfe59efe21364bf57e7", - "75ac7a48082d5afa148e7a", - "63f5fe049f46d509d141d8", - "2b90f954efc9f58a07a363", - "39c167fbee27f65e96cc7e", - "1db83df0a168bac450e4f8", - "127118c35aaf80dac2a57", - "20601a054af9d51633fab1", - "728cea43531fbac95263a5", - "ff53eda132c9a3cfecc65", - "786d54b4d5ce74ddde20a8", - "1175d70c2c07855db37245", - "2cfcb08879a9aecacf316e", - "ecef39a1ef4b4d1e8c6dd", - "70357dabf2c34c8309c723", - "4db4f1a602cec485019670", - "735a03f218370f8bd85ee7", - "3c9ecb18a83b901f901704", - "4c7d0db8193430b75f41f5", - "28eb082844c0ed277d2520", - "a3cfbf8b779e15bf28c99", - "624d49c04a48d42d76c466", - "221bb5afe07669d916e136", - "358d745e0bc4be1c3f4586", - "1ce2a05bccecd36df96b64", - "362261ed7c97591714ea9c", - "20f6e36fbf07174b587397", - "12413ef53ba7fc6fb5cd35", - "3dd366ce71f1fed428c326", - "b66201b62ddf6d13c5534", - "3164747c95104338a78b5e", - "5ca6e41b81529e38a59f6d", - "3834a1b7acb0f05d9e53ca", - "3a2f442f3b3a9a2af00b28", - "270dae1c5ccafaa07ae8ff", - "71e916ff79204bdad49695", - "4d43f85ff03e3cd18ef302", - "2a2b13112979d27489208e", - "442eb4a36ab0287728c1d2", - "4dd985f2fef5c539fa6a96", - "522619b83283553c71de74", - "794294f26a938e1caf3c0", - "25d1c185377c3cd8e704a2", - "3e7db1002a9116a5e20032", - "720aa7a7bdeaa025a23a54", - "70f2550983dbddb8957b2d", - "57aede4ca861e5051b15ea", - "52f87910ef7e6dde1f16dc", - "79c75783449d733d93b4a7", - "5186a4a6ce8351b40466bb", - "1208a98ea1dd68a01d3ec8", - "3d66483aa6674adb6569c3", - "728caa6061cb6ff29e6b21", - "3ca90695aca0fd32b28871", - "18eecc5a940548e7c51e57", - "cb8a50376e8204b8b5ea9", - "7731327e4c6ae66c8e47a1", - "16f732c5fac8192629ddb6", - "13b16e69e645c1703bf7c2", - "789addf402241ff646d77d", - "169566a480e42dcc8863ac", - "5ca4bcb81d4d03018b177", - "8ea7f70a71ad46c0c260d", - "4a67b54dcc404423e6b631", - "7b609aae44a59cf088c570", - "59fdfd7775c9750e48d811", - "5738f30e5cb40b4ed83e60", - "78b5c76a3ee8c2ef071fa1", - "2ff21a8761b9bce5f34f74", - "71af54a2496a076b559a6a", - "11f2c34fc87060adca2837", - "4476f33d15e77d3ea6c712", - "1dc0a99973375f6c4a4583", - "5cee3684d600afc7804db0", - "20fe6d6e332154329f831c", - "1b9850e5f0f8fec4d967b8", - "6b5617e9152db554d999bc", - "144303d93b170584849f6c", - "8a006b686db9c86eb0756", - "1d9a776cbeec9f5dec9407", - "503f8d64438b7a99b8de08", - "7b084b907f4fc0301dbd5", - "dea3527d089eceb4c22e3", - "38a39ada5dac01b5c2adf0", - "4cfeaacecd47507ead712a", - "3ff99310762f37d685ca95", - "492683ece46681328f9912", - "27c1b7b41af947101d694d", - "39a95d47cf87d7d7d6bc8e", - "48b438b41e1bc7e58e6ef2", - "7b0ba619013363524f168a", - "557bc3fd4a1a6866c5d19c", - "46ef25878ebd3ab0b864d2", - "70044b2b283269e2d14166", - "47226da695602ab6e77894", - "142fa830b7ba88d08608e3", - "3019d2c9a4a70055fade00", - "6bd645b33c041537bb5186", - "3fc3e580d2ad754a34bc48", - "5e8a5f959be2a17534c9bb", - "5a2cdb29cc6790b45d1f04", - "1c28b93f693054a06fb391", - "242cca5b643a5f97a01a20", - "48a0fd415822566b2ecfbd", - "308ab3a2c4d7f4df4b6a31", - "4566810f52dbdc6e52d908", - "53cf166384d9f967e4ee4a", - "32a9d4d4f421cf83f9237a", - "7f4b55a70795b9d26512fa", - "7222af7c6bff611029c53a", - "718c4a4aea9ee0da236930", - "71b31c9be0276caacd1146", - "4d89a145aa9c4acc9cbc8c", - "26b549a59dc35ee5ea7b82", - "59308e5db85655d5ae0c4", - "2f63eb0fae8122aa717440", - "4346fce81f02878bbc28d6", - "3a0c64739838b20476e0bd", - "389f7a523536bc08e2c52e", - "1a756f67d7e3e663369a04", - "732b807455afe5538cf678", - "421e7c19466e0847ffaea1", - "75aa7d0184dbe8ff376045", - "178e61138a7396d55d224e", - "2a07033e306623cf4e37d", - "25d293607604db30df2e4e", - "1e6b9387cb8fb6494ace9", - "524a00dd634d2f57ac7c6e", - "106fdb273227296116f40a", - "47efddee37fa0ef6a72a47", - "2a17c7297a08a3839ca0e1", - "4c60164f9602341914167c", - "656c647508629462e9a821", - "54e5b2458bb84fd7d4433c", - "15a3be22e80e0f6f498608", - "152b3e507f8b7898991275", - "10cc6c74c4f9fcc9428f7f", - "7e185faaca849a7f135848", - "62ae26dfe2273af99c4830", - "7255e6805e164cf9788cce", - "49b4801e9a2a64a27691d2", - "3fd90efbd4f0a4e173f589", - "4afedaa595cb8c309d3fbf", - "c57749387141da5f8fd27", - "1ba28761d3577e14d38b38", - "10a61010d82426d21109af", - "4d23f5ec809ab5057c2705", - "31e9d0607a42f7e54a8c81", - "37107b083cae132372e4d4", - "16eaf321bf41ee635d6d46", - "44bf623ac807d4c96747f7", - "b720b9f07a6b1f41654e1", - "68705a826f80224f09c337", - "798b816a4dea5ab964c64a", - "2adb843a58d472c17edcb6", - "17c5a39deb46d102235506", - "70c9c69419338ba44d6b8e", - "858c45884b129dd66817a", - "7ffd3daf76b1e818134f24", - "5b509a0106f1d06627c353", - "4d6d3f3602597781bd2ea0", - "4fb33de912dd8d2f8b8081", - "2b7758dc0945a30687fabe", - "38271b1467ee062bfe15c1", - "1d41ed28d87d24620da24", - "5b80c6e1a5c4dcb3166335", - "560e1e8aafcab315236068", - "31204f9f1e25342bbe28db", - "35d63c19d36b85b5e96648", - "38aafca45b266dbeef6fc5", - "426b930b670412d271a091", - "59f2c50a64b0c2a3e77442", - "7cb4b7b324b314195807c8", - "4a1381ccb93c34dc44cab", - "14da57f8c43c94d5133d50", - "499a1abb2a1381278175e6", - "6334fc3ff70d17dd837781", - "6717c0177a36454aef446a", - "7bd177160999a650655c6e", - "2acc282877d9cac38e38c3", - "18b021fe09fa8bdc44e567", - "45638582a87d07b0339df2", - "664ad54353749f2ad36105", - "5c53790457f0f66baaae2f", - "1edb6eab35de11d4922150", - "38c3b4008c9d0442e7b602", - "76dcede51c5087d374b20d", - "1901320882ec0093fcda5d", - "68f5ab17da1cc5dda22c36", - "4e4199871aec7ec1f99895", - "68d4b88b77dfae0da7a5d", - "a4f6b861d9a460f5b65a6", - "f7cdb22a187815c33c5e0", - "7b398d970ad745817bcb61", - "2e061928a5c3ad9bd6d9be", - "5be7c40d96f7c97153eaba", - "21887a11425a371d17db86", - "2cc7417260782c0d2394d3", - "6b421c0667b336723fc0a1", - "1d78f3d7e887debfa04bf3", - "1d165ccd9ac1e4efca4a32", - "163690a8fd51b113410cc0", - "419d9a35dec3e5f421baef", - "215c7e9a1d796b37a56336", - "541a69af40655a83e366ca", - "3f98705d2cf6346bf00972", - "4ba668ebddeaa069043875", - "2aad9e8261535baeb20b71", - "6766e290c73bba54bcc710", - "65118f1b7c366a8bbffcb8", - "7d88a8aadc667bc60fcb2e", - "16d8ad198832545831c93f", - "567508a3d2a7b4fe3b395b", - "3282cc1545c9e77ce08abd", - "57d0cd94e03404b9cc57cb", - "14f23f2aade2de50fb350d", - "280bf57e6ab95037683d33", - "15db077682cfbf170ce259", - "2e1709b850c77f2d508334", - "34ddcae84938327a3cbc30", - "ba357a389bca1484d7e54", - "bc149e667cbe5a17ed77d", - "25032025485a4979b90394", - "467db4fe225847525ef33f", - "54112eabbed42ad31637c5", - "14b68001dbf2f798322812", - "7146b897c3d924725bd0cb", - "6a76e3eb445dada83ceb12", - "30abf45ef025352e681192", - "2f687a83227d2d20f3b227", - "186605e063004c7e4a9375", - "21ba4c5acd17d59fca0ed6", - "2cad73640590abfa319b6a", - "5db729c46c687ddd7690e6", - "73673685484b4f3492976d", - "282a80b8de04941c547168", - "4b53718060040e8179d82", - "5d50e00035655b4d4ddcb7", - "546ec9785ee72a2a72d886", - "4328d17f00529ea0fead97", - "71faf2ef0654e97e0c23fb", - "49374e550d8b335cb151d2", - "42772160e3ea402851c9c6", - "c1fd8fe80d24243e7b5eb", - "111d6b945ff69be530cfca", - "2dd21df4dbce295378bd06", - "3d8509040aa8739f034dac", - "68d439e82561e55cbf1eed", - "65a1f7025bafea5088145c", - "5f70485b00138272e9a41b", - "48ede8d4a9a88f7613388e", - "1de402b5c6118ec8861aad", - "50f371336a648ade74999b", - "17da7c01f870089371d6df", - "2f64ac4f819f8343111866", - "648ea8b083a9828f8af17f", - "28d6cf3e20845dc7283634", - "7dfd6cbe22024260a179ef", - "65ab167d8e02a8df26439e", - "79d07c6a6298d34020dfe7", - "55407685456c2cb8311d26", - "413278937e6487a988805d", - "168ebadbade1cbc44496d4", - "7d6f33ec4a123fa281cabb", - "59bc93698864451646a053", - "4d1a8b95ded29dc79fd401", - "21b466e3230d809af7aa6b", - "35fa1fca985387fb7fcd19", - "1a789636807476ba5bd789", - "7b115c7c405c6e4356bac1", - "378ef780c4d32c3f15b3c3", - "23dfbd70bcc040f36d4c8d", - "6a545ca829ed278f6ee7f4", - "c06cc01bfe2a9b427102e", - "126dab6c2bfc9b83475847", - "15bf0eb485af1135b0e453", - "3b929cf6fdabeb45375120", - "11c773ac555182d789142c", - "444a50dba1a2bf390bea1e", - "1976a9fa25af6d21cad47a", - "2f88b1c87d7d02f6c2614d", - "7fa540fb3906a29b513bed", - "2b23443976252ed21088d1", - "5d9383670de64bf15eb49b", - "1540f88099c93111d6c8cd", - "2c33c53227ef5693d69f36", - "2648a635c5981b8daca07d", - "7b71ed8d456ee35292c960", - "62c36a3627b9d2b3c18de1", - "3e985c35adacaa90f5715b", - "7401d0da6ddc33225bec4e", - "740f62900b9523de37b6b0", - "3aaa2c73e60edc333c904d", - "35accc5a1e3fb474285daa", - "1d85b86a2f3f20e2832ec7", - "6dddda58fac4e8afe0c9e7", - "2fd82a7276af1cf8b372ed", - "9377e0e5c8d0de1856f6c", - "75266a81bf7f77865e6f", - "1de1227159008ec9b59ac1", - "1b5200adee3adf189b056e", - "4d8b0cd0d3401fd04e351", - "438e5a19094bce43b5b5ae", - "6f339aa4d977875b1f1f80", - "297ac1b2d19eb1e6e32d87", - "638d0229863032ef249643", - "65c9be7a29bf45e5992a7e", - "7dcf3e6b7d3d02033c946d", - "6565aab9eaab16f7430411", - "374a0e75bc76f0adac7af5", - "8649a3995ad114bb4d72f", - "45f5960a9db06a62821bf0", - "36735381ceff20a76e32eb", - "1416e580fa8bcb421dc6ae", - "64f00973a0eb117b548182", - "7507998b275e3c9bd4e10e", - "305213c4b30a9e8be153ce", - "233860a2ed2d566e131431", - "235809998758cf7e4acb1c", - "2102dede4011c5cfefb7eb", - "79486109c44990eca52723", - "43b23b71c3202b31d91018", - "63606d420b8e8397875647", - "697396e6df9539532709dc", - "581eb843dc9919f85a6644", - "3b98704f287b0ee4e659aa", - "3886dff828cc76dd830466", - "1c9f86b8742e14b6caf79b", - "bafe681e7e52073b86d32", - "1a5853834033d093c63d55", - "736d05572fd4ef85eca2b1", - "61170002cc409ddc34946c", - "5fc3c4b7f7ad5deab829bf", - "4597c1546c899a3656689", - "6667dbaf666f92bd61da79", - "a2e07f9d73c5e3effd370", - "63942ffcaaae948e9056c4", - "6a7db7fb47d3a18b620d6", - "58b95d74eb4e654735bebc", - "78a4c0445f77f31209ed17", - "7203cc213679d179eabc35", - "22884c181cdc222cad8e5c", - "7f8bc7233e2784039454db", - "aa2cbd696160321682a6c", - "4356ada1ada2921353892", - "72f7dab0b2d2a35e62478a", - "32e5682bfa3fd95762512b", - "77da1b5a2124b6c9e11847", - "593c091517fff61973996a", - "264e4b26d39119bcdc0985", - "fa33fcce55fe6a32e0915", - "127c199cd032273073f003", - "169665894aa2b356779b61", - "9dfe57d1a9a3265476d14", - "364f70dfdbb439b78e5236", - "54fb5f18b6d001ef7be401", - "321e3fdbb0b890caadc570", - "64532524c99ecb3c365a41", - "aa480c5cc76379e0cd2de", - "6ac2b70efaf88fd42c4044", - "6810dd5945e01cd2c90841", - "10aab6ed7d1b631aa4b45b", - "19537a8ee281cd28d6388e", - "5ba2a8023e5bb50b06e03", - "646ce329dbe03b0b8312de", - "4f0024b5b5580d91de0338", - "2b4b238bbabe3c70748eff", - "3bec30574a99903f587887", - "24e71c2d01e956269446cd", - "68c4a816c641b5b1090781", - "6fd170c2ab312a1f05d814", - "64d8389dc8d1b8910fc0a", - "4807e0d9a38d358d8e14c5", - "14ee39af97cd5a57b0e17c", - "24974593a8d59a89588659", - "59a7f220e101601c1d1b21", - "43fea0cf26a3e256438525", - "2b3c80a17ef583b6205fd4", - "44741cea6d95eb07e7f01d", - "2ccb45ece6ec9abb9396c7", - "5ba0eb3a703d0e42cf4094", - "400f76e25d392f347d4911", - "419e79b02e607a42e6e091", - "36c0bf9a937fe6ca772d0d", - "2244b09bebeaafafb0c481", - "1501743c447af65014399b", - "2791e42c7f90ab8d4e7fbc", - "150365cfcc4a012a673c13", - "7869636f37e63a4ffff7cd", - "211dcdb529a6bab73ad8a6", - "239309f551f303d0037140", - "3f1e6a84c6b836f245c178", - "27b94ffb61590cd0bcd89f", - "61ade8e7a0bcc40ee4c2a8", - "750f475708a1369e3fcc26", - "30bed73f7a94de9252a38c", - "3e26ac2b23b8b913845e11", - "42aa10dc273607be680d72", - "65a0cb312051f321a95f5d", - "1ae82d51e4845bef8c5d14", - "37c6007c4a0d223bec9e13", - "4f140e806dac75cc67fa3c", - "78acf4423afa2cfe1a6fc1", - "3915d17a2935e69936525d", - "7fdd8bd273e4a717226cc", - "15da282cec1859a9591ab9", - "75d3c5c33e5a2023adfd4a", - "51890cd139740ee3c35339", - "2b514798a553e5bdcd8ec1", - "722f9dc13384479d1c4455", - "1e2bd3f41ae5c299bb720f", - "5ab5c85d4bf835440ff962", - "178cb915d7350e37948956", - "184e317201ff0ac25eb6e6", - "37755ea728b820f0ab2bdf", - "5e147628ce9e9a9493f495", - "79790e81fd0d2b63f9d1b9", - "7252d249ce8cd4fb010950", - "d165a455f92b5083e0627", - "6354a865e088a0488f2701", - "43c2ec8afca87567ee9294", - "55744f373c8b8520d62370", - "63069f756c8115e5fc4c52", - "3f5c0a52d2b564cc250982", - "6b828169b3ba13bbcddb05", - "46a78cc83c010019e8b2b", - "27c6ad85e824da21b1cf9d", - "6e9f47f009d809f84a56da", - "255358696f5e9ddbfa467c", - "738abcc274fbdc4ab5efd7", - "70b9ea82f6a6c02939510c", - "5f24e71937dd097c0e8678", - "41e1bc8a63d042ba714c97", - "6da26efc24e2d57c26c090", - "575d4696bb0e4edef99446", - "4c028ddef259fa2c7d4868", - "33525d5afa91fda7d5fea5", - "49a3641c16382337f3c777", - "760b4f231686ca10ea6ea9", - "547264d2566596f18bbb5a", - "703a6cf857e651748dc09a", - "298200a0909b55e97005f2", - "5ccbc128a5721a5dd853eb", - "33d5a814c00e980600811f", - "5d66f0d9dde7339dbcd24", - "5ef30e941639d08bff19c4", - "363a65fc59f4a8184d3d78", - "366546b3844bf45b7527a5", - "18bc8168956ccd63ac68a1", - "83bfa3efcf5b970ad41cd", - "4bc9c371d07d4a025a739b", - "4636e2935765905adcc41b", - "4d08f00a99d95d0043cc4", - "3e94b32e50da81bb5afc03", - "48a13c03c03191471f1164", - "3018be3223f82c7f0c9ebe", - "185254fa056de9af1a6bd2", - "1fe069b8c57a9fbe5f6009", - "6c03f094dfe48c9743be89", - "1086eae159340e441fa0a4", - "222ea07afe042cf765ce5f", - "7754a6a5fe6be54c00f4c8", - "152dc9fc63d3c1eb6c335f", - "3f3aeb0a1df198d9c95768", - "7ef4c5361ca08ac1cb6216", - "527e969f4f6eefe6289ece", - "6b105359a1a68d94862411", - "2674d42d16e97493518d2", - "369c62fe5aafda2a550912", - "51eb860c87e1e5b70bb623", - "29f3402339c3128a1e2c1", - "413f256a64feb56e242e90", - "11ea8c21342ce42ebbf9ec", - "5517c01ca3bd4da9aef0ad", - "5d2972b12e50e727a2721d", - "4eac7fa0d6b168c3bec4e3", - "5cd8f5f9eb6806f67db613", - "412ae12837a29724832877", - "770b83b55e13465063e5a", - "76201f5e0110544f41d9be", - "c8918a059fa77676f0587", - "287593985c21589f72c821", - "6b923e02dfb1da62f37204", - "2600c04d980b2307982b22", - "25f7e1ac0d4153b6365c1c", - "484281d930b8ee32f366f0", - "3827eb26c007235c46c676", - "6cd2d14ecc5fc7c2c1b52f", - "4f0841f63a0c64aad5232e", - "77c4b593ec648025df03f6", - "81dc886feeee4945edceb", - "522afb743f67b3ca56b20", - "5505b22d0ddba48ae2020b", - "2f3b362f4b742eb82f8a34", - "1c7831e5dec267ccb26741", - "2ddac7db8be22e88618b58", - "4e6a2eb425fbd18fb02cb2", - "147b65e0e829ca30fd88c2", - "36304be3f0777300703af", - "215dcfa076749277897e0", - "3c2f54ef99be42fe30d32d", - "62a01fb38e5c88098fbcc9", - "5f84ae1685459ae7e24bf2", - "3ecd8205beb790946eaa8f", - "5ba344fee845769c2c86d8", - "36a92b305c21171dd5a616", - "3650c22d9c1072238cfcfe", - "9225712405a5bd9ade58d", - "594ae94ad86b9a719f54a7", - "59f0f5465ff1e16be9bfb2", - "4c6a0f6de7e50ac450c0c3", - "685afb7cdd699d5a8f020e", - "4f1c406e243fb2af67cd42", - "2dac9d433ff98cf24eae81", - "1167717f2d3d6238b3d21d", - "381012de4c9a82f9ef1d72", - "7047a4510b8c2107737ece", - "185033e62f44aa85a7799b", - "41e135572f9ce788481248", - "4759751a101953dd340d89", - "34d59de432c0dbb24ae55b", - "5bcd4418d37c976110b37c", - "6545cb112ea4be72bc80f7", - "52d104741cfa5fa49fa55e", - "7322c20a545b3845b54b34", - "783c78a9025283e7188a8b", - "3c81a9658bae42644c317a", - "1eb56fdccfc12b22db2048", - "3c3f770d148b4692e25b59", - "4f75e255d88657b2ba4755", - "260d6ba9444df4b85dfb92", - "34f0f61d6d8d062b6b9d9b", - "74fc1bfd19b3cbc9867bff", - "3f0d18b1efb7248950daeb", - "65b7b50446c767e6fa72fe", - "1124cfa0e070cf6fe3c638", - "2d127e6ce6bd0f1872b1", - "3fdb99cce8884ed923271f", - "2d2a15867cf9361defac4f", - "9a39acfeb3a1b4c2bc79c", - "7adeede80a05e40854e6e", - "4431184365a358de692057", - "1e4fdc54209c2229d7ffcb", - "50cfa48cfb994ab2b77aa3", - "1f4b918e0e0d47c89aa2d8", - "78ba33e419cbc7f177437f", - "5f7482c17a568566c785c9", - "6fff35974d5f0b86faa46a", - "5106bba99e6268d7bef3e4", - "67cb80a136db30b9d60d6f", - "594a3b6273b1ed2b542eaa", - "6a1d554c48496d8d543eac", - "9d8d18a72607c311d6f76", - "7047889925ed18a885358a", - "283508a2ed137e839b2207", - "65fb4589487aa5a16bd767", - "1a14d5b10cbcbb9ad3216", - "4a469bacdcaf5434109262", - "40ebb7bac65bd815945e49", - "7b2ef1bbf74c4989ed5ddc", - "5ca51c82df4def8b1588cf", - "3b22ed42f28069f29c280b", - "669e7a28f7a7c30460a80a", - "2071c913edfd4fd6daa6bc", - "3828df7e9ab6753fb83dc1", - "4cd15a66ba5a2f18c8823c", - "1ac96b01993da8677b2fd7", - "4f9634be1ae125361bd4c2", - "681fcdfe60f23e3be083f6", - "2d5bb2b553d4ed5bc0795d", - "4c4424602626193266d943", - "2df30214a49a31c21380ef", - "48b920d23514d06befaf52", - "4b4c7f0a822537ff62cdcd", - "ee9d6b69f13ec8f385e6f", - "793fd256b009d961487499", - "2d70f946f2915679b314e6", - "1bc4e87c1100a2d26aeff3", - "6b1cbac9279eaab9b503c4", - "5725842b7246179896a39d", - "4dcc6ee20983f0020ad69", - "57dbda5c8b230a87030357", - "78c437adc3b6ce946cdd", - "20ea7b335b7621642b29a6", - "179d4134709978c75bf6d2", - "36a3336f56c91232544e8c", - "e243f28e043030ee3a43f", - "2d678e77df571d7ac4859d", - "5566a844e8b1c572f69612", - "27244290f774a00786ca95", - "1812bd60b720f8920fe80d", - "7f45c48d28fd31ceeb3fd7", - "1bea5758655f1400515db4", - "249b7a4d080be0f548cabd", - "71215d6fd5e662d930a424", - "7684536a92d49a5af59f1a", - "74d39a89d87bdaa449438c", - "3e4e77e268fb6e7602e96c", - "46c6313b3914ecd376b959", - "31b9dd76b9ed5f88dd4609", - "46734211b970f8a6448a60", - "7a6d5b1013830761b58026", - "6157a651f2640a73f1f90", - "38793daa7aa086d5e70798", - "58d7de0f8254a81b5d0f5a", - "5a1fe9fffdaa20f4ab7eae", - "7e8fbf173741aea1b95c93", - "4bee7e482b290b1d3869be", - "c075fe6224a62c1010fb8", - "7340d7daed67bcc5cd4391", - "2e12097225e5783b545083", - "518711fe03b241cfb95160", - "4956721f6a2ced1fc736fe", - "636b15a893c301ff23f5f5", - "5696a96208101739ec4ba0", - "54fc920cc0125e53a92499", - "7c2e242ec2b95580a9b3bf", - "4d0e82bdf34ff4cb3a603e", - "786571b85b2768309c8ed2", - "1418facce22bf24a5e6a51", - "681a88fafe4e6f0620910", - "5e263af53ea065e044720d", - "1c614cf9a9d87d69154c21", - "346f2a2b086e1b35095d7e", - "4b6ed31d0715952774511", - "67a3f20bb5e980364816b9", - "339dd42a42d94342bf8399", - "3b55da90ad9a162be1756", - "1c07c875b3a9cdedf7611d", - "33567e972c90754c86a5ff", - "3ee5a2cc90e335867f0ce8", - "4b3a8d22fdb2c83abba9b9", - "5b6b96beb19fb0dbada937", - "5169af1cd74986160450d0", - "724f8bcd40bfc9f1ca0c68", - "51603bcc8667777e664f9d", - "78aded63d2f85ac948c449", - "73862de61086c1fd5e0678", - "5efbbe073364ace07f02c7", - "144a6c20d0a8d5dce2b12b", - "2aead0dac004faa8ab67e4", - "3f8cb5eb229acba822b48d", - "34c50fc58872b7325366", - "3c1fd5d9a6223b2ce7b02a", - "554f5cfd133bac2188241d", - "559752d946b02da4c2f657", - "3950591be73642bfa23264", - "2e8edc0b6dfcfb2392ce87", - "4c3c570182916f32a6f96c", - "65cf5014ab215afd17cef7", - "54ad7fa69dfd0b4c19f7ed", - "f4af5a6143d8f44e48afc", - "1a08e273719d3411178252", - "668b9e16f3948f582a5b94", - "3fac097802d8f5fb376d58", - "3c2dca32abbdc029f4a212", - "753f0795048443573283b2", - "622b540293b1275c5a9446", - "5a2c8ca58cb488822e9f49", - "295932427e10aface718fb", - "43e36b6d5a937387b49f6c", - "4e1162d634d0d5811a2441", - "19915afea85d27cf8df109", - "7eb8dfe838ec5ef9d3ee21", - "2c18c59d95a21961c42f21", - "7233f4136f3ace41bedb12", - "142c59f31fc82fb58a7dd5", - "452816c1b54aa2bfddcc17", - "6f24ffc802a08273be511b", - "32d68fc9b8a9c17b315382", - "5aaabbd40fa78dd417edf5", - "51d8b3e6fa0afa106abc40", - "394faf6069c716fcf8a76c", - "3f7d2ee6cb32c6bbeee194", - "4354f51efc9392bcd6e51d", - "5e73615c65ae9e74eb1ef3", - "761e42e1c908c2f09e096a", - "25df9f831698604e15991c", - "351db0dca5d74808f36d33", - "aef2488954588af921ab8", - "296a247b4b36d5c2a1884f", - "b1fe15d9ac88348f41a87", - "97342eefdbc78b9689120", - "1e47a4330f0bce93db13fd", - "7511506751237c1959933c", - "31e8a39712fb3a7a11f909", - "6116bef6a79fb2fc15f0e2", - "6d849a39e47370e473a913", - "42a81f5e10b5435180e643", - "17715e6c96cbe096c4f9c2", - "606e14eaa7d60eb7ea925a", - "30cb89652c8629b5e0dcc3", - "2625096534f2cf10d83a26", - "61036fcac29b84e5ca02ad", - "4669a41d4e444c1284d024", - "2b81c6e67e55aeb6e93a", - "23564d97f447b0091e74ce", - "494807a247f7ffab73a644", - "692eeb4ff69b42372517d7", - "3eda92314bf1d09cb5b08", - "24b22771f303ef742b8ce1", - "5c616b0d1a7bc591e70e46", - "4aad58987821ba8f33d96e", - "10d0aa100248920b9cab77", - "1ead89a48b89a75ebaa7d8", - "7fe887d8c5fb53af79cbd6", - "ab8e1dd4d27b02d09fe48", - "2294095a6b77aaa416cbd7", - "69fecb55ba6da700789d7c", - "681750fd18618072db2068", - "30a18088f5b2af396bbfd9", - "2e03d3c0794703b9605de0", - "f26a2dc235ace7b34f4b6", - "356497a9675898bccf4e79", - "3286bf159405584d85567c", - "464550e0adf269403f3e22", - "3f603c7b410b4c2db2c8e2", - "445381f98a1f5669880827", - "23eabb9cc5f4086c74bc31", - "4628eb872cffa1868b96ee", - "6ac77b7cb23565518aa2d4", - "1cfd8f0d12bcce21589c11", - "39cdc5e6675ab081ffe60b", - "1e378fb7157cdaa6fc3a50", - "669f4c5ec3934953500b78", - "46a91d898168488fd5ac51", - "64add9cabf8efdd5f7b57b", - "45813314ca1d165bcf242c", - "6f37e3a85128974cdfaa69", - "7f42b66317d26c3f938805", - "181ee17c34ab8aea52c900", - "68e8a818d524954278bbf6", - "7a6ffa939b86786a779a44", - "31d809b078cdefaaf45266", - "7f216769148f0e997c7805", - "3a82369bb1a4da519bbd70", - "25920b5c96127e9d8ab05e", - "29702fc1f57fddc3369967", - "616dbeafd6aa623c1a7d7e", - "634d2540fd670a82f219a5", - "3d9abe3ec82d9602d9dd6b", - "665bc65420c0b0a151c97e", - "37d50d7838efaf03049cd7", - "385f7f48a7be6b46d108ef", - "5f2bc99aad2f27cdee05f4", - "3b6b43619a3730d5995ae4", - "5eb76c6301d8a849a1903f", - "38910d873da8dfd237e8f0", - "41558cae58d4f9a9001b87", - "58fc1b58696f8c22cfe344", - "64520e4823f48c1f48749a", - "3827b84269040363e5e02d", - "6c9c81ea487986867245b8", - "217bd444ac8e9808b3ae5a", - "44dd70b9323f17568e4ba3", - "50226b4aa22a0465ceea0c", - "6335fb7682400180e10d15", - "1857324131e535b1b2458f", - "3845bd22f959dda9197376", - "4d7797e0b2f77a7ffee785", - "16bed27a9c005817ccf111", - "5bf1d1c71be0c49ad75d9a", - "6d16d10feb1728044f2dc3", - "3abbf8af06f889daf59c4d", - "45769a307f5593bbf72056", - "2a640efe463008db4ed634", - "57f0f7ecb2d7dad43748ee", - "8000000000000000080000", - "7aa96a9fbe718c006a48f8", - "24086a392ab75e649d3cc1", - "9f20b6fedc099ec575691", - "313d62eb5f1104de5421a", - "438f5c0f163a4dfa04e5ce", - "63137369b8d47b6c9c43df", - "4ceae8c6ea35dc274647ed", - "465f3b1e25cde0e446d90d", - "9f0c9a93eecf4de349628", - "3addce3c43218484acf509", - "101d83882a81d0147b4342", - "4585b77fea18a0113ff609", - "73e92ea015629e3728aee0", - "257564a39a648e17d015e9", - "2f927b360b2b43bff822dc", - "328a9932d6b08a41a1df0e", - "207ff6a0da7f13b316c4b0", - "4b11585991700c233f6773", - "77664e53908d00007d1205", - "434a5edb31a9c3c6a0243e", - "692adfabb87ce969422961", - "3eb189e2bfcbe180703cfd", - "367efb55edcaadbb5e4f2b", - "4573a56ada0a29d31dd6b4", - "636f015a0c62753b283d5e", - "158e9251ef94651015ecc3", - "ca30526530b6f6f0c8fca", - "20b1838f00aa00d07f70fc", - "50c65d8772a3d5db269535", - "47262fa06b9c5ac8138f4f", - "d4a270719a348af6d6c29", - "af99b9d024438cfe9df66", - "2a5043ae183d338b7ebd55", - "7b85e0b99eff408f2aa978", - "282774a1f4bcb14e6723f9", - "58137399c99866772aed9a", - "7b7e71610f1589da383c31", - "1705c133c7ba24a2b5c528", - "336a41277b427813eaa191", - "78ec94c22ee912eded5499", - "1f9e8bffcac3e1471f7cd6", - "7e688d1cbe7e0a84a0f408", - "50a70d2086b5ca78a90368", - "16f5569ecf073acc30831d", - "720d9e52c4aea85ae24480", - "15bc81dd36a0393963bb64", - "633dad9eec0d451652bf40", - "3d433adb4bcd914fcfc4", - "ae1614cb7437dc6311ee9", - "504e8f5ee0e51320af92dc", - "4d55039bf17366425f055a", - "2ad535a50fda15e1835526", - "4f5cb9e29c3567f8c1b22b", - "409705e5654888d8af2f47", - "145ecffc8b532b7855ca8a", - "4a79a4d35e92cbac8fe0c0", - "7c2eeaa3b5ac7ca26ee5f2", - "b44a774aaac3d4d335389", - "488702c5b90021b8b24933", - "62d4635d0bbd6bf8fab17b", - "47a6912faf0eba695a3f82", - "5fea5590381b705c4ba54c", - "552dab94d8fab803e3abe6", - "622e4bcd237f601b3f864e", - "6b6195f4939abc517ea1fa", - "7ae4ce9746d1a251afde2", - "5411d9720f633bf7a356ea", - "93d0f45c8e78eed19b2b4", - "2cfe955ebd8c7e4615715c", - "4680ebb5e7e7fa1e676838", - "1cbb8749de080f5bb23b75", - "33fee942f43e9b7d2118f", - "4ef1c6a1bd63bb6b6207b1", - "1c1f24204ec4b044c10ff5", - "3561d1a2752f1d17dd5823", - "782fa87576f745d6c5a644", - "68d895a65569cf3ef3e3ea", - "46c01f4170feea6c601e12", - "7b8a17b08fccb33f4b7d6f", - "6332e8b1655b1a7193eb45", - "6649997ef28c919c6cae0f", - "55b727631edd20582945d2", - "1adfa664cf45ca975af0f8", - "34ca1ca17d4004b63727d1", - "46bc16d9041c2bda07b158", - "31afe414b9e841f105214d", - "4bc252b0fa653478344f1f", - "44b0628f84b11c5e71888", - "7f821b6d896942293448e9", - "125c7d70d2b6d99ae885da", - "49fee8b58237dc40ba3c5b", - "5dce9f322e405cdd3dc195", - "4e5afb2e233daef8a9bbcb", - "64e35a2939773b306ebb74", - "3cf63e3a65a7e509ca6dd4", - "1f88577ebb6a87d8478dfc", - "5d1cdedac3c1f047923b22", - "14b8d711e9732dc1d81b85", - "63ca1ec0700483b8f859e5", - "345343979af3beadfaced5", - "3aa36ece405e3ccd9341ca", - "5c37d517c640ac7f62a532", - "68e1a6376fdb4eb7b4b0e6", - "69a00aca76ae6e660be7bb", - "1644cc3e7fe80220ef2f70", - "58689766e836a562c78c53", - "2d83b4eaa1c8f768e56c30", - "11ff8e8d5e956398c99ca4", - "66de0cd9d504d0c8a10caa", - "f5d2bac49777fc8f10242", - "30436781bd712f316b4895", - "7a7cdf214176b6d3191883", - "64f3d838badcddd9bfdd0e", - "190017f50befaddece16d2", - "21a95826890e5cccb8a83e", - "2c958c952c5c886c2a60ad", - "3f8ccc4c495c412c1876e1", - "901282766f87bc24e50af", - "67fe63e894b36bad057249", - "35ab264ca762acbf67e1de", - "65b1a43ebc40ff17757bfe", - "1e0b5aa4ebf1898b7232a8", - "5a3548ae1dc271964cafb9", - "26e45399ef9d09b479c0d5", - "ff910ecf2ce1ed443b3a7", - "15dc7895737fd27e2fc2d8", - "306cc735643548c81d480", - "716be1338eb9fa3160de8a", - "37c639bab06813135e6962", - "18d28f7c13bdb1a27fc315", - "48dd5aa0d80d3fd4d31225", - "308d7af9cf09073e61779f", - "659ccea55ad34dab51a321", - "25f3d9fd234440b97c9821", - "5c0de6f6c164f44c52de84", - "30927374f464c892c53b50", - "540974d1b3361c5ccd3a2", - "a0b14921f2ca115669309", - "157e5726ec48e98ea5652c", - "7c50148337071a44808f27", - "54f01285acb2da9689a386", - "569b68c3d77231282d1705", - "7593ab2f13aa524b76e104", - "16a7968fcf87b51aa207b", - "2b1199cb9ff7848ec581", - "235057c5ef06d64b0093a1", - "3ad2c2000ee1db409ffcab", - "46dbd89f4ae0d06c0ab8e0", - "7fe713df2e65b878c1edc6", - "4f0b0a9e8338cbca398b3f", - "67ae16da8f876a2c8dc80f", - "1bff1788b61c434292f278", - "137786296b1e5f466871bf", - "413062fa329dcbe3b8887d", - "76a4bcdffe1207b9c84c3", - "394ca6d6650a3a703c8f0", - "7ec0ec060d3788349445a5", - "5e6c438c53b4bfbeab6a4c", - "1cae4d5a0b88eed0b2d97e", - "37150fd6c06a98e84f0fb9", - "5e5c9c54f1f75bcc98d1bd", - "7273cb20026d3e5dfa9567", - "23675569b6f74cecec658", - "4d84d472f48a1f27cda4fd", - "52e4d0f780530e040b8198", - "116822d6715118a8643140", - "2fb2d651d1a5fde2dc4d89", - "2cbb69d06f0ba3051ce433", - "982362cb3f64fc2535f18", - "ce584760ca84047b25a4f", - "3d32a6b665f10a829cfff8", - "228eebf60c055615805405", - "4adc76f7cd88044421953e", - "4f588ef825e26e596e160c", - "464063c0e0f5e5eae1bad1", - "231a1fa6a52f8377b2ca86", - "3b663e3e9013cab9326fc5", - "24716274d6f1761a2e503e", - "5eb0e751f365585e4f3fd3", - "1c63d031374620336f8c7a", - "6ac96f98fa78ffb692afd9", - "71f7ff7f6245492bf4ba4d", - "46b7638024bbab6f336734", - "2d3b2e3d52eac5c09743f7", - "2bf0a5cc2a5150523d2e64", - "1f7e1880120c76703199fa", - "27b48290f4bc222f54681d", - "274cbe37d4fe65732936f", - "5b872486f12a68a939069d", - "76c344db7c98c1b1fa25d1", - "6745627963b760ee39ad1a", - "2d30342ea20393b89b038b", - "51e2ff830fcf99b4147ec", - "764156f5d90616c8c45669", - "19d3eafc75447dbc2ce4d", - "4348b708829c7eddd56237", - "605ccf0922a0c35f768933", - "86aa65ac1949dd8af6918", - "2e564f6ba5f6f74e33f2dd", - "54ec1fbecc620b2a62de33", - "da96dc29f77c98efd9a65", - "3756665d23e5dc56d35905", - "7108a03a28803eb91e8a0a", - "75fa74ccac539d6f2e079d", - "56f539741375576aac816a", - "78ab001943d18ada1f6d03", - "7a283d5e2ed98485e2d260", - "7ca8eb46f6df31902607b1", - "3a9ec75af3c8e86b8c1b73", - "61df6c089b8a0a75da0288", - "3277a60ca85c986d50dee2", - "4afa034c14d96f077cc41e", - "58ca4d190a0f756173e746", - "33e094a7802d99ab1d9620", - "4ae3a5f46681ba13e649ed", - "6369f366be6b5ec99ddddf", - "4ad5b5ec9142810d730c91", - "520d75e4874b90e95d0ac6", - "56441a020eb196f9ab47f5", - "4f100cd2b63ef0cdac7165", - "1d72e71f6a57243468bc42", - "6102d4b92b578db1756028", - "6cdde5dc50cfba13ab15cc", - "6a2bde70b440f36a3a69b8", - "40afd831d872bbb5ba2dbe", - "52a170878e73d2b9a73398", - "363495385d4023abd7fffb", - "75ecb6eacac31eec1c8d24", - "38618fda51c023d44b41df", - "1b12fc1c7d3ee5cd24b30d", - "428c02c3c8bb1613aad2fd", - "6e925cc1e63747fc8301d9", - "1711e7c4ddf7dd725f454a", - "6543f2ea86c39aa319b565", - "4f88d842683a24f7a78b4e", - "6297ed8d827bde2f27c592", - "7a4c62248fb05a7ec5f894", - "50873f081856faa7b0c6c0", - "4a5c54b88c3afab5d73bb4", - "93ecdd9b52d588b62ae9d", - "1dff7b3a25d6efec89d4f1", - "4eabe0db8ac5d733acae29", - "2d0a5221661bafe1bae3a0", - "86148c3559c855d7a4785", - "4576a87293566d06f5b643", - "2c941d4c1c7d68ef593ae6", - "2c36a4d87847724f9fdecf", - "7b5f04e933b2e4204cdc65", - "774b9d1f08bb74ab682979", - "7c1fdd60de643e750fa1d", - "682291bfd680e2cd8f9d70", - "30d33e090854573dfd98f5", - "3860366ed3637eead94b8d", - "6e8b7f0e9607e44c1f9f65", - "720851fb976798365a6829", - "f5eef843bd404a6869b17", - "2a8c9eedadb6f6d58c06cf", - "232ce65586f95692d89383", - "d5835b5723a9063a2dd80", - "72316f1be6172c06994a4d", - "6a44a264bb1144d86619f3", - "5451512089afcff74e1bd9", - "557e56b5a5dcf30ae5f48", - "2a2840d0a8db4a22fdfb53", - "71e107fc4c98b40c6f7b53", - "68c711e371efbf9b278db8", - "31b42ccc858ccceae34d5", - "47eef469d5e96dff3b60f7", - "622155e1a7c16eb9e6f098", - "73037907fb5b7e20bf7973", - "2a5beeac5cc34b9b70fc5c", - "214b26c5cc4d2d1d455254", - "3326fb026bfe153a5a80e5", - "2fd395d2076e94e7f79f79", - "1da6208947854d10119a62", - "507a197204651599300f85", - "60e1157dceceaecc3a16c9", - "179c67b2886cbf8a80171f", - "4ad8d4214e4fe01b143d8", - "594820c775fd57d86cf9af", - "18932d3a50056ecbd4c0", - "cc47e7e925da6c91fe510", - "5ca455ab52339850752f94", - "31934713e4ff1d0d7cc583", - "77747c8e4550378570ec0d", - "44fd7c4168c2a61413dbd2", - "278331e342f211746f0d9f", - "13022f601d429947abd201", - "6d5ce69503f658697314d0", - "30151eaad7aef0e79d5e07", - "3b6333c6dc16d5f4351c47", - "308b1811fe8c7d6801df6e", - "1316737cef6e8d73f98c46", - "34026c0467a5bb1302960d", - "4374fb07e1eb1efc714a7f", - "13089f86ddae7614e1f733", - "91782b2d8bf1ec8b6e4db", - "739d86f4db437bd59681d0", - "2e99bf2a9cfd14eb01e4dc", - "1f372d16a7c783f301d859", - "3fd38eb64df431878b817e", - "1b3d8a50e5425c7a4550f6", - "2f775dce855cb22a4ce4b4", - "1856ece5542adaa42b18cf", - "72bad07fa5d3ca19811efa", - "210aaed4cc7b55edc4255b", - "13ef893fe161bb05038778", - "394242cd2ce4d5c927b1f7", - "2d8ba9bb83d8b7dc77cc32", - "4a9dee0a96c91e7cd6d7ca", - "3b62b01334bf25d1f5d560", - "3c11b4ca34c3237b362a26", - "9ae11d1f0b2cb73496a44", - "7d10d41f081cc53194454d", - "3476974a3a56c244bcd4ac", - "2d248bd8de364598100d1", - "371b6d93bf32954a1ed005", - "2f9195fa1721a36e6f5198", - "b5ea9188a76cbd4490c2c", - "67fe64c68be6372b30260", - "2582d22d55dfd72b2d70bf", - "2144bb26c3488be851e3b2", - "69cf5ded5037b0fc848b28", - "451cf4e4a6ce149cfc4095", - "4845e19f6384ed5724d8ce", - "5c721c1e9f943f1e44c526", - "6b628f924b031ff396258b", - "2db4889991fd96d5a3dbfa", - "75393667821938c0e5a628", - "2e37e64613e6e49f75ff6b", - "7569e0846a7c92c5b07e91", - "544e247e73028cc23b1f51", - "2e14fbc2ca9b056ee6a0e6", - "5c96c4bf9c30f05dfa52bf", - "30455197024dac28f22ad9", - "16587b1213183c74388d6a", - "62a6ac9d0c5e4b3890d61a", - "5d0e736ad9b0e048c53cb9", - "29c81a2bbc75ee65e40fbe", - "a5803d95905530efe4cbc", - "45fae251151688f6948ec3", - "34de10a25d48bbec6bc310", - "38e1136120c0a50e7c1942", - "4be7ae42a1b71df0fdbed2", - "70eda2a92c3f3d551052fc", - "736e4111350ab36a2be4ca", - "471e19dff79f0bf8dd75e4", - "7c4c5a07ab45db64032f8c", - "3e8f3fee79b0aa7d3158c9", - "6803ba4d96f3cea5b5b619", - "645491f7754448588100c4", - "64c773513b07ac7be226c5", - "1207f0afa9b17ee1e3a14c", - "1a5a3601f9e5c757413d21", - "671a35180c429ed6cd73d6", - "3f719d970328ab86444133", - "2eb29dd03203d9dedca2ed", - "3ca5432d73f30360d5e251", - "ef9f73cc5ae815a32ca63", - "76930d75187c32e1c0855c", - "297ac6d1d91b19c8ceb3ad", - "4d06acabc42f8f6c6561a2", - "17f90d7760ace90b4281fa", - "79973f898e87ee6433e53e", - "1177a186084a0188e6b25c", - "46ea372cc256b25d8bedb8", - "9d0d5139d46e4d9db3662", - "31f4e6b45c1cedb6d4c94", - "222ad5a5eecaf564928d05", - "7bfb517a9a7064f7f0b9cf", - "88d1f466f33239ebbee3e", - "28c8b8ba9341ac37c38695", - "430a7ef273c75f6860a9e2", - "5963fe850d852bb19cdfe3", - "57ca180b4c6f8c3a63ae46", - "745f8230228fe0e913a537", - "6495ff035413be2b53c45f", - "1825a2f6c03df8e89a424f", - "4ee9fe013ba8fc6ac8d470", - "7b7c35dbf0dd6b94d050c5", - "a70e6c0e6da7b5bd943d0", - "6904f88af6eea4b3f91bbf", - "5ccb3321bf79805e3743ec", - "40fe888eb50954f82f8f41", - "1683c065332572cac40e7f", - "265a6fe3ade48b79bb704f", - "6869e474162fccd5e6ce8a", - "1621052353e1bb38663f44", - "5206d5cc4cf74b102b511e", - "459fc4d70a1a8040309b48", - "1a38abc6055dcfc6f54cd3", - "6de250d6d96fba0a4a2df6", - "521255c27009b10aeef14", - "784a6ea72c75433fa2c1c0", - "1c429a8aad032b85e815c6", - "46ae03b83630be869f3f67", - "468227ba06af62fa70d6b", - "1832f7608c30377f8a27c1", - "74e8524ea4276a1585abc9", - "479f0a9b95b8f0e630df10", - "6c9aa8a230f91d4e6f84c2", - "2020839307f0a0b2a66465", - "617907260cf1e3612508c0", - "50b259ce6ef7786ad19380", - "60ad8426c5228781a660d2", - "640821dda0f544b159e25f", - "11216382d02fa8a680f2c", - "3b142ae3f666b5a458fd6", - "50d8060a4c81ac0d9dcc9a", - "656e0aaff42e8f100df7e1", - "6b189bed3e1ee805a7089f", - "587965194057ffad1ed72d", - "7c91adf751ba7b800072a4", - "66c37766a09f2454161188", - "2aaf602c5ad427702561f0", - "1fe772e91ad75a2d2792c4", - "432bf33542ea8f8c0e1cab", - "108be849403d8b9e0adadd", - "1f098e306099d97f37bcee", - "15e468fec0387d9dcde2e9", - "35a56ed2078e145e9b5d42", - "3450478bbaf1db9aae9e0e", - "5819cdbf42afd2334f96", - "453649c203cf983e439d84", - "6e6871265fe9883143d121", - "14b7709b903167ca33c0bd", - "5bb6095d45a0253a5e3e2d", - "604b2e853911ce83225aba", - "7dcfee63c4d594e4583601", - "245ff16a71eb8c45257fd0", - "51f56cb5201bdd22f49e70", - "1b50ac3c3f5269c1d7aa40", - "68c11de19f57751aa11e9b", - "73da067d52334a718631ff", - "63f2b709d7c6ba1ce60255", - "6a47915604a062b94c626c", - "6d15e33dfd91b0adf65ea8", - "36b718d293f968b4388def", - "38b2a18fa105ae1a1e82c8", - "456d747923e7fcbd260fae", - "17a8f2f3a036b54c467b7b", - "4cd6b5c75a375bce549db5", - "ad8ecaa59795b2101aeb", - "5e89ffa159d58051edf13c", - "48457eaf5bfbcca641689", - "11e987960e92f0cfe9e7d", - "484fed0412b66b4ad6689b", - "2567685d25fd668a9a024e", - "5d36dd2a4f038c91a8e525", - "78386c3f2bea1d92b0136f", - "6ecd91e762474ea500bb02", - "460dae8d89d7708b43a1c7", - "3846b043ea9479616ae948", - "35d846be55b3952e278ab9", - "697bd2294052d067eed5b", - "29ecceda91e2de99bded7a", - "32c247d46291051243da8b", - "59d6c2db6f995cfebbccc9", - "5628eeca86bc4f505da4a8", - "4450b05b160d8c53288cd5", - "5d0b6fe03f574db311d01d", - "7059a8ae14b27b87ae7942", - "7e37627adf10efb14adf13", - "4dae59d140c542483e12a9", - "26246e8fdf408dac8fd2a5", - "2d3baa252f4d982bd2ad11", - "266efd2e0daff29e309d38", - "8fdbca74c18894d421e52", - "7cdb727ae2bfeeed50af45", - "490df281db25788739ca0c", - "324340f1f7ccc9eff05524", - "595eaf076defb81f21236", - "22aca8e5833c97719ebb51", - "421f5a540df5b7ba309bc8", - "4cf40ea87be0baab3f0a23", - "78050a04d755b7008433fa", - "70089a05ca7765b8ef62a5", - "6446d75a31a4956c235943", - "3bc0b4b12c4e0d37097319", - "6a6ceb53a9e08bce60e22f", - "5527257327c4eade309a67", - "5193e0be567990b2818200", - "540f6a5d04324cc6ed1398", - "d79412155f3d978866277", - "65e3000fa520e5bd8bfdc3", - "988dfd270fa06d78d9fba", - "6bbfc916f60c65ff6069ae", - "22a2f494120b7469421488", - "5514a9f97c736ef89e2558", - "494a8aca14d077b143ca10", - "599c6bd84b32b97e000cad", - "2983f80020a9f6532ba834", - "39395b9f947ccce230cc1d", - "5eb549dbd9b640a1018c4c", - "3a948a48ee72242647aeee", - "5c0b858603efe861d8e554", - "18af2f7c66ebae2215b225", - "7656e2bcd13769bc7d3690", - "1d345a329131e03407a9ae", - "6b91d4c08bfb155d85a09d", - "c5eb765e74f7ea6040509", - "347e522bb35549d788adad", - "3c2561b4603673cde220ff", - "78c36b7a1a1ac86080796c", - "34f1c6d5946b4f8e9c34f2", - "1d82fef6b5daac184a21bb", - "11e3b65e520ccb94e0f28b", - "53ee027a60ac6b8703b4c4", - "252a9565fc2ed88c83afe5", - "2c748923f66e9b836e2956", - "501c73bb8897e8a9b644da", - "527df835ccce3d0d8dc6be", - "753e3ffd723c55ffaa57eb", - "27cf1a1e36d6b6fbf673f1", - "303e55cf5d940fa1eb0863", - "483592c4cf34d97823b087", - "404518992cad409d30e138", - "247aa73439f114a2bae1f5", - "43f106dd9b706c7cbad455", - "60de98af5b2e9794ccddda", - "2bbb60823308802716b002", - "5a4b0bdbb9a3eba57ecafc", - "7eacc570a117e3d2c4ad3b", - "b80a7edd7c5745e63c50d", - "3d2c4d19f97ec14b7f9a20", - "8e1dc29eaa3429a93416f", - "16c859dc1504abc8bebb3e", - "142700479fca005e365a5", - "1a5a69890d5f080ad27aee", - "333e4709f384c49fba280e", - "773e49f5dd28ab9abcc4f3", - "7fcabd5ff8d8321877d09d", - "392447173660d27311fc56", - "3b607643718a1436cbf93f", - "3d01c0ebec513aebdf049d", - "115af287df30e3b9382159", - "217e1d11ab05e37175e942", - "43240f690e895ee2ce6199", - "6473a7fe7461369e02b551", - "56d1b28a25e58905b948d1", - "5c08c8490ead830327cfc3", - "60d1cb028fdf2f7506480f", - "6efc437814b1b1a8db77d5", - "386903ad1ff043a2a203ff", - "113203b24e05e4ff03bfc7", - "2287f22a43e09d12b5fed1", - "3fc330d82c00c3c98129ad", - "5bdacc4f0e9a9f3c5eb7f", - "43ad0b393a7c2a4d667efc", - "4d17bed73f2032142b03a3", - "72492bafc7adaedde393c7", - "161741a6fabf2be3cb74a", - "3253a13971cf24cc306f4e", - "3566ae3cffa53b48308a5c", - "772853e9593804a23d0c9f", - "58d985a1111ffbdece42a", - "6b463071583d5d51119c18", - "58ab9a24dbad2ee2c0942", - "7b625b197eb76a08b19ecf", - "153d46a7ad0d4c7b81a83d", - "560bc3397e1eecda48e8d6", - "3e27d166777ab6af4a4b75", - "10a7cb0c646bfbfaf6b1db", - "abe7e5169767e92b8517c", - "46bc67034da17d5b7c72cf", - "16c1a9b3bcba979d2fb250", - "20573b178651610a410e89", - "46c829e7e1980bc26c13f9", - "3428c448a20f463714e16e", - "7be85a588e4f01b973f9a4", - "382238b03129ae3a8cb2e2", - "8b93e9e7ea54df6ea61e0", - "dde95ff1403621e1e9c39", - "b3a488e23273b8e74aa2e", - "3af2323baa99fc6ef534e0", - "6003c83a8ae5ae42a0956a", - "2ac52045b3b592dfbeeaaa", - "7f29a05b16052f06eff50a", - "1eae59f579b122f18b84d1", - "28593d93a1a2159e16cc13", - "460f5f98b19a4d353358fb", - "56efa25eac0d5f675af6b6", - "73e9dbd2873c27040a215d", - "5ca40898d5d325e557e04e", - "405224a222d42397ca18d2", - "a69b0e544c08336c9606b", - "1dfe68dd4d69d0d5368782", - "18bd8096de042467441c8c", - "55f3bd5a345801aa67f91c", - "5430c091f416778afc3f3e", - "4e33cc0d26d44c2394c8d2", - "2ac1793993d045ec4ea0ab", - "a0ac3885d2cb22aeb977f", - "1073f10b92dd8a202017b2", - "23e36a6e12831353ac1afd", - "71f02d980dd943488cbefc", - "7e558ced95c8a49312174c", - "21b1555bb331b89f928e6d", - "75ea3318a1054593eca8e6", - "88658ceb2447416239af", - "7dca64fefd065e0893d874", - "5f427b13d8351db71dc75e", - "475c02da59260b083fa105", - "5ee825c795f457b727b9e8", - "124aa58a7e2a882689ba12", - "797bc83e9789b064b51c92", - "2a8b319bb90a064d3cc523", - "5570385cc742f16a21edc9", - "122e1cf4ba920fb923d0e1", - "7fc9fec9506aa1a0661240", - "3fc3680285719ed4f7e7fe", - "7175ce67c0c74c440327c2", - "503bee64726b7b32815f44", - "5c4dc3dd9138eb7169302d", - "3f0eb0b9bdbbe37f40dc5f", - "5aa25b718982092494e872", - "20b11d38582bb81886466a", - "36baace22f2d7a2014dd1e", - "27216bcb23514df00030b1", - "3146d29fae3f74014572cf", - "3988842f76572373c3459b", - "6aacfa3617f47dce14015a", - "581f2a492a4fe468c3971b", - "4cc8bba01b6788222eb375", - "5c00c9ce80be32396ca075", - "28670ba592cd5a2625df3d", - "14e47840962745e9f2bba8", - "7f26a6c99362d1126b6773", - "6eb090e9b1df79f4d2226", - "7f035a794c44a6a57abf00", - "1740e5e9a57a4e80eed5c8", - "46b1961304e45b428bd48", - "49ce8855b52dfbb878b2d3", - "313ef612f2fd65f39c2e3e", - "7332b41a9fe9dfbe59f71f", - "41858e467a21a3938d60aa", - "6234ffe0f938a25ce0f5a8", - "1105d3c71c59dedcb33f", - "7a75b868e9fb50140bd203", - "68ae7d3832d31bce57eaf3", - "600de685f1a4c2f4a236d9", - "3684bf3ee3a2b8635ca0e1", - "2bb74459adcd7029c9c35f", - "b7347a4820635a5852b61", - "249f5358017ada6567b747", - "17445a9a60b0dfca9df354", - "695d060b1aceccfdfa96c2", - "a209dce8856336ebd97f2", - "72059eace3671c76d67005", - "6dafdbef06e817ec42991d", - "47a38df2df7f516ac35f8d", - "6a3afde1cc784aefb925c8", - "112bfdedc3401ff20ffcf6", - "3161bea37fcc040c6f6494", - "6152b40d63a55e1ef6e750", - "41127c781a5dd07b6ea357", - "1df80784a603cde2e8573c", - "2ad8c773fcdf92009db9b6", - "5cd8f904c6a0e1c85597c4", - "21532161ecdbdaac15b68a", - "5a80f23e82161bfd2caa8a", - "59377c70bed9cccb346cff", - "212d386743b2c2069ec4b7", - "26fb73843bff3e4d17aa10", - "1f15e66f6c5b160801ec4b", - "4024c6847ce50a93fefd10", - "38419b7c213432cd42f4bd", - "ea9789ae096da5bedc410", - "23a7a59b35972768b71627", - "60a177acbb4aeba955e6a6", - "22d9fd1638450186756413", - "5a49a0430b2145ead2e9a5", - "7fb445fb34908201d41b44", - "7b1e254e6050240b36eede", - "44867f919f39bbc1ac8a53", - "57c6f0c9d94e02524b4029", - "553a48facee35f17214327", - "5e3402a24a307a945167f7", - "4ecbf2559411992397d1ba", - "3adf2b6aaf40f5dcdffdf2", - "156e3560db5a642c108333", - "26f3f960b2ba725c83b706", - "3135a042ca5b8873367081", - "5778dc2f1465daeafbf88f", - "142aa17e315b2096d3470c", - "17b1690a9c9f4fba9154e2", - "6f3d0d822d1a27088df8e4", - "749ebfb4005c94ed288c4", - "7f64ec3ee1d6fd7b5f9352", - "3ea29dc49c06d64c187862", - "322d1e939066766f918e43", - "d1c5eeefb8bb620c573fa", - "7d83ba89b9f89b55497937", - "2f635c018151dfffc38ed7", - "6b77b6d06b93487730de2b", - "202d04fcffa7e3a0ae0585", - "7351e32ddd53c7465f65e8", - "1d5b0385650d2d81754f72", - "5227913634dbd4b19ffe95", - "1eacd91eb3938b38f0210f", - "3ab4982748b8f986192588", - "4a648c611ef0b3b0e318e0", - "18eb41f414dd28e8ff3a1b", - "28e33efab89fb4f64d6498", - "1b67e56d8c8f6656eac86d", - "27476789fbe89ef5fe00c0", - "21e39ab39cd96423900120", - "4818fb8f958698b6e9c9d9", - "95d86ded4a7b26a1ad331", - "1b2e283bc4ff40366c744f", - "2db6e61499c9393946b57f", - "3e8986648fb4053520276a", - "5eec1e56c0a2d0e34dfc8a", - "389d9fa841750626db108d", - "4e0326164785519414d07e", - "530f4c391aa2b0938eb272", - "50c915d40aeb9e4ec78789", - "57bf13241507b812b9a904", - "3245bbf080c6731fee74dc", - "11081f4b8fb8f0a9abf772", - "7a75be28b1e93e4e0c9342", - "174fdf0bcfc8d0f4e77e83", - "46986d0da7a2c17dd1dc22", - "68e88d3bc4e8d390ae4b13", - "4a2580e03d81912089d88d", - "201e678f30ea96fd17615f", - "3566f7f67e026f0278dfd5", - "30485371efc19b50bbafe6", - "4dedb1ba2a6a4abde67337", - "33440d7d3472a4b6e2f627", - "591749051e47ee7b49cf82", - "3fe61d12a0b09791925ccd", - "7f5140ee63b60e0a33058a", - "5eb217461cfa46d5694397", - "6aaafc0107575bd9b70723", - "3305f9d7ac9bc35ded571d", - "5ef7fbdbf498c8684625f6", - "3b66491ccee4801a4e3673", - "76fbf6732402bc76e061d1", - "28a37e042abf70a7cb137d", - "534c1a3b25194e8cd66e6c", - "3eedab106a435ef32b9e48", - "6bd995ef31bcfd22d52d9f", - "6b5da25417070642e0ba4c", - "3d40b56764f7765513d13", - "44bd0de2094b8b3759356", - "312518f9c1ce1e690c003d", - "f920b02af1e3bd673512e", - "4ed1311eae64f9e834ee7b", - "4d075c933e4b93da3a33d9", - "133606f2fed41ffd77b999", - "16b6721ea95f55ef631d25", - "140aa7412f6488f5404826", - "3ae99fca89d15abe091160", - "543222604f067afa3e7558", - "2948eda7d7c508918c3056", - "4cb6253df884020966d27b", - "46bafe88322c67f3b90507", - "31416a7f09913059dc251d", - "52d3cdd253b64a03c5885b", - "1c5d10301fcf4a14c82adb", - "5cd8f782abb8b60cbf36f8", - "42b636bc4126dddf74cb00", - "5afe15c1524eda9627e183", - "783d012e8b928ea14eaad8", - "45242101d43b276b34115c", - "28b06d6b1f993702509e4a", - "16ad879cfcd3e458301dc9", - "78873bb7282961108e63a", - "1c5b7d2b84cbc7b29bf542", - "48edf77c0fc298b0491c2a", - "398764fa3e177502af4d3b", - "1d1aa15ce7c8c15f051ba9", - "401a3ed45557939fa7eea", - "13f9a309c929439a91df6c", - "3aef6b8ad8d4f116a27e4a", - "64b1dd5abc6713a8f53d0c", - "73f4373aa0c46a1ae61409", - "1ebddbaa72ad1a2b1cdc49", - "2cd33d1f501e268643d591", - "11b77783f411c457cf909e", - "d92cf9efd7d12c62f0dfe", - "2c56fdcda56f78dcda9b60", - "118d29d91686683483dea8", - "7e05b7c7d54cfa1fc7b525", - "42c5d2d1082dd2375a4ef3", - "26554ee3e9bedb1a3a09fd", - "ad64cff4b4763a7fda09f", - "5f9563c7ca70d6e5061bfa", - "38d987fd4b450ee5a69286", - "62af499c078af038905758", - "3eecfda3b4d92af2b7e5ae", - "5e195ccf98c9a4e1967fe1", - "61c0e0ff11a378274b395c", - "486fd3ea0158f33daf767d", - "4cfaabac7104cbad2ed728", - "714ed5cb0027168be15142", - "ac5bf0492a63aa0bf597", - "53339d5a01f3d2e9bc8755", - "457d09be8a2a4c351b63ae", - "1892726d56d4f8f92dde20", - "236e08f8411de38e44c3cd", - "5549ebaa872068aae68ac5", - "11df54a696817409ff1164", - "7f695021b246db24a5113a", - "5267f1f68134d546ec646f", - "4ad5e4985caa0c7ee63b9f", - "3c5262912ab7e82ffd49c", - "7f9a1f8e557617163d5e82", - "31b2ef6b5163160bdce290", - "127dbd62073fb0c17b4217", - "5fe5a0fcee7c061cf49e8d", - "34ce2df12c5e0970f682d1", - "4f6148f444b84dfe82ecb2", - "740e3fa0e998e741eb97cb", - "5623f1c8e0d5c15938b2a1", - "79ef58660a06bbc22f0cce", - "35f48b300d21989b05560", - "4efe7cc856d9eef4fda470", - "43f99aac41b05d58c624b4", - "66b03ec137e6361ddf6317", - "4382f99dff4951a775fb77", - "974b1ea8fc3d4665ea11a", - "1998c4f90bb8b5465b7b1e", - "a49f38b3c0b7ca1fc5c10", - "57d421e876be8c87768c1a", - "14c79375686a30f4c21ea1", - "667b77d58f7f6b14e19bc3", - "17b5a764867bc2f176278", - "cf2bf44fe6c433cc00c9", - "61619bfea73d2a10c7a7e9", - "3908eb827c8209b96bc643", - "e859d26ac6c854731c10d", - "562d8222a0b94f5af3137c", - "780a2a5411b159d83dcb95", - "645cf2dd2735f1cbf53f1a", - "6476d594392ef9fc9a3df1", - "7df75741d3ccafb28da8e", - "526d1eb936d1a3dec6eeb3", - "1a3337bb0bc288bf44447e", - "13413811d8a8e6bc2e6cf8", - "54728697bad28cd0bcc9f", - "2e178e1cc4f997792ce1aa", - "f339d2f5ca33347ae8d13", - "24dc2302a4b77b85525bd", - "4779c6f70cb71f00e32d17", - "20866732367b425f7e5ad1", - "26c45bee1cb7e300fef593", - "4f3fe475424626758ebe24", - "3979e2b3d54a21e7e8c1cf", - "50bb1918112bad3e57d523", - "4e1bc7c2f29a2f520bcf7d", - "3b4ae8aa403abef29b052b", - "54765bab6ab2b394d9dee1", - "5e7e83070de3b07a4bc87", - "6131db76263e902f303f6e", - "2fb62f0a2e9435830411", - "57b341376c8eeb5e957326", - "7d59312cf551555c728152", - "3e13e95a38da382cdac574", - "53e3092b891267552e8471", - "ea04fd9db78a21c39b6a5", - "42cda11218a2f5a8d7bd1f", - "3aaf5736ed929c1ed0ab93", - "6e93c69a7627e1f9832a61", - "37526cf6c350fc29ecf559", - "5640578c9a2f674c097c8a", - "41ebedf12db1451af99b12", - "66db9685c97e1039f97191", - "61e21b9a255226ab8a9c03", - "4d36c683652009a273c69c", - "3e00e41664141664f70d8e", - "734cae170e5d7d8758c509", - "26c603e605263eb37ee858", - "1cb50b0700a11348f864c6", - "6b4ed91c3f4f0b25252206", - "46436019c4b35e76ea4182", - "44885049137a26d9ff4438", - "1cf7470aa8bed908f93c32", - "56d7ace10d6e046f35bc1e", - "2bc7683658e815b0850ae", - "2bd0c39ecff8d002f3a3f7", - "2848634cb8eba43423c432", - "177aa9fd51aa698c4f5d25", - "809a8bacccc204134381c", - "60483a9742002ed4918cd1", - "7544304d1b3c2594fef689", - "49ddb3e956e6fd8d65e1ed", - "3820d1fc1eab75e925dc43", - "7093b250c7b04c2c6d567c", - "16870479234b3337ddc8c9", - "18f39bb607de6b1ad183e4", - "a5d62acbaf68c52001a4b", - "65f33a2872e25c8a682f06", - "4e66ba0bc1058a3931042b", - "357eab1d6b7f6618503b3c", - "5cac3c06df31850ad70694", - "7e68cfb951ae556b15fa1", - "7de8764ca6a43c99d6a50f", - "329c1979af2fa92b25335f", - "113149ff5647e02c5d8e8c", - "5fde1fcd656f65c682e01e", - "3a2bc2968347afc3827c67", - "b7602abf832a9540b03b8", - "28434971e0ad86e87340b6", - "e24946eda2a54a4c98b6e", - "318d2300370d914ed1483a", - "776ff8d5492c149f7acf17", - "50e46147373113c54d73c2", - "59652c3042e742dab07904", - "1e74e23fb34c50dc055d0", - "3c31433d0db703e03c294d", - "64666abc6a9a2f6a1c7575", - "191da9b869e973d2fdfea7", - "6c362e17e2173449bde86a", - "1a8ed7cad7bcfca4620120", - "273beeddd87cbae01c207f", - "568f3917922fe83ad3e225", - "44e6ec408ba05ad98e759", - "32f5fb93813b0abef00c9a", - "490db50fd1ace7e8ec15ae", - "7630fa097aa2bf97cef6b9", - "6ef800332004d6cda26cdc", - "551ec7c1ae7ed078f940c0", - "455927f484bb8820a2ccf7", - "7933956672bf2e4535ee34", - "2a7311c640e7cf0ecc141", - "7242e44696c19a3a1910b7", - "3c7a2b6b58424eab86f3b4", - "359b331d03b9cc2451c1f8", - "4169ab1c6bf3f0abec6c34", - "6df855d5b158377d521892", - "3c4374002a4b05edbee285", - "209910d1159692421526c", - "31dfcfe645b46b329ee2a1", - "1e6874a8b307092ad6e72b", - "6b7e91fb5948662e3961e3", - "23966403e567312c7a8379", - "2f62056d547ebf7995c6e6", - "5fda42ececb40f359e4f0b", - "18a6b71998f6f84fd5d814", - "76f42929010d1ca7619b42", - "50e22c6cf5d6b70def807b", - "1cc96ab6764758e9cff09d", - "59aa03a25735023ef97395", - "741d91860d83d000328e76", - "a9753c820825d73c04548", - "4ed7cbd3e32dee7a40c626", - "6ce70c288bc2711b1b024f", - "59efda7d6a6d8e6aaaba46", - "6ee757629a9b68ac7e690f", - "328bf9a8c78ea2ca3388be", - "59bb325b9748e94acb6630", - "55137101093be9fb51857e", - "9c6c4ea9b05d327c6b7f3", - "77815256a969cddb479be9", - "3b0cb59bddc94e18233703", - "7a123babe2e7abafbaf8e7", - "35d6d7bb2855d9adfbf650", - "6ad95985d0ab8e8d823145", - "2133efe27b28c873f101f", - "607776583fcde0ad8e4c87", - "e2d9cdfcde324e23eda21", - "747c7a13b706fb28e46c47", - "35d310b1c9f92e46c5dccd", - "7248daa035ed0c83c2d007", - "3c8b578aed4234d875a143", - "766ac65aedf40f90341249", - "3087f959a9893769198248", - "49a34db8369186ccd3e18b", - "69b04bfb64dc28afc90f3", - "3732911ea3b78b2cc54de2", - "7dde8d7ccd2cebd1d4b943", - "66727c69de089e222307ae", - "5a67c62d60522486e9cab9", - "6acdbbcb1d87bb33b845b0", - "1f1cae187cb4e7e2d75ff5", - "1cc8bac063e7f4722cc83d", - "1f75d643fbc4ab52296f51", - "7b34f38b9d16f0d70ddae4", - "74a0eb9dfa780e171aa5bc", - "4366b19aa12542a30c1749", - "4a1404c02a58e6862d11f5", - "55e542cd768eaa4ab7eb43", - "182ed4a29e8be479e40c89", - "5eb96063b604b2d052b457", - "d755ece5c8fed1e833d4b", - "10f7a570b959918609b06f", - "656a55d45a93fac53881ab", - "60e3811062f0661e25f626", - "24a843ed6770d822f92be9", - "216b9b04319fd8da8a6d3b", - "3e41b8ea3309221756df7b", - "5a00aa930e50101d3ad458", - "260985f3992a168bc7fb3b", - "5c3df551863d0055925c95", - "28b06a5b8a2319d5d78e37", - "3567cd9077f5bb1d3115a3", - "460858d1e253129bf64e5b", - "485bb888b6979f8f201fb8", - "7aeadbfb750a598afce6ac", - "3cfed079405fd41004c118", - "3dac1d8f9e9cf46cc42204", - "2df246fe147cf6a7d9ed5f", - "1a908fcb6be810a9e1e92a", - "6c33a3a058504d48c17efb", - "66e9cba0e526f30b7b9b8f", - "757f2101d664083b2fe8c9", - "18c5643eccf2173f575420", - "7dd9082b6f5562b8d6ba91", - "389d1e8a26db35e20882fb", - "65172c59adde7fa1aa62e", - "1a7c7fe62effcf2d1a2cb5", - "392d9ae31bf22e0236e198", - "3d886ee05f1bcf69fa4f70", - "2c8f1060dc661c38044a5b", - "16eeff7e87d3caf8e58a92", - "741dd990ea20591fd9b5ff", - "39bbee3cab035e7fc68b3", - "4996f8a3f7c2c5fac02813", - "36ded179138f0e4cdf1ee7", - "f9d7db7493258ceea1a37", - "2a6c238cf5c57a2939882f", - "35dbe95730bed0669969ad", - "290fe0ae5a419909be4e2b", - "63839ba9cca448dd7fecff", - "30a8e1972ee45f3e0613d5", - "509ea21b16907067d06b82", - "7633f58adb014bb5585678", - "6c8fa526a6bdbce9f7b832", - "4a78cbf6bef93b38948e09", - "37c7b0fc4e875134c29246", - "4c996629390ea0954eeb1f", - "222dacddb6e77241cadac8", - "2df2bed0dd9ba405c8c5ce", - "3a7c703f2642b17eba0c69", - "22e8d9bc34a96264dd4caa", - "4bb8f4e111d078e3c54590", - "69efc15f2bab10979940b4", - "4e1b51392bd1ad38a51d00", - "5e82dce0d15b40d73e81bd", - "6a410e486ad693817f9d31", - "5dab9e18ce0b8340db40a2", - "2df0f496cddcc699504250", - "124c113e25b1a8153a830d", - "28d70ec040ec983aded5c7", - "7a93c6e177d746f5eb503", - "14c9d693e42997dbc96df3", - "50755ca653aac70b84b12a", - "5f72010436c71470f190d9", - "1af9124bffaade4351e990", - "5fdc8856cd703470a1e5a4", - "10b57d68a8cfe14ef3ca7c", - "245003f901ae0a356365b5", - "63dbff9398c6d2cafd1418", - "75c2ce5e2535ac7878196c", - "15c08724b1daf7a590d087", - "3dc7ec06146d405216b267", - "1fab75ef67bec61a68a277", - "711d3de6506cffb89d82c0", - "15b79d2a607e674b1df02c", - "928d2a95f60dac2e280f3", - "2db6d4b5b7a928883df97f", - "522bb592e89a78b316244d", - "cfbfcb607ba616c016fef", - "13d6f0fac0c0b9cd891715", - "12a8a0e9fe6ba5c3656149", - "4553e500c491eb2ced6e1a", - "368d20177281b04fd8018f", - "2579cde0e8d37e04167a12", - "2f4c8ebd42ef359c5ac79b", - "7afeb7314079bb05948a57", - "4dde9b7ed5a96934e4dd51", - "3cfc7a65b66e9f8c6f8cbd", - "7453e07405f19cfba93c17", - "18488f368798b8734164ca", - "532d2ff2bd9d0ca8b344ee", - "18704740809cbd3a91bcc8", - "1a91a4ef4625f7ae911f1d", - "26240f3e8816b599bb01c6", - "60749c3a015660029dacb9", - "321405882a2a0c05f7907b", - "6b85f2803d97e818e2e527", - "40d9ddb7d82d86fe4dc6d7", - "5bc9b4c686de112404ccc3", - "49e219e4b19fa82e3cdd8d", - "6b4aa7c57cecc522b32c99", - "1152ee1f6c91b44b1faa20", - "4f1b7b04b31a6d85748c8e", - "28eaec99940a1b1f563841", - "341ee0e329f6ab9da76c4a", - "8a4219421d2f55bef801a", - "25e4a83dfc2f633765d96b", - "22a17bb1e02873c944cbe3", - "4c4fa3875e78671bc1d2bc", - "79db0961906e2d46b0b349", - "68d1c5df4d9653be9c8e7b", - "7e0f7a6620c31d72d9d568", - "42af59edeafb6c79b9d208", - "3d17d279ec6a81f53cd4f8", - "2f1ba6fd01e5cf713f7991", - "5c246c8d9baad4092bd7a9", - "1c6a5fca595a1ff62b0a7b", - "5c6ce5b29bafc437eda5ce", - "709f8b4e1e81f78ecdd5bb", - "619fb115b590487fbaece5", - "5b917d89029b0850efbfd7", - "2103ca88adecbfdd3370", - "4e0f2086acba831702db59", - "cebc8496358956c6ed352", - "4aa62ab8f33741774c11af", - "55925c1c09bda33b3d0e7c", - "47b5376a6bf9ae1b5420d0", - "5f305f39404231a1ce6591", - "d0d6f30615b8f231bece9", - "851fa3652b44e57d9190b", - "4c099f907df9db8a25350c", - "48cdee08fb7cd0c828eec2", - "7399c1866bdfc2ee9d0ba4", - "7da4d79cdf3d83f0763c79", - "5de657154513d33b2dbb32", - "4057d3883ee10c31d0c5f9", - "139a5be9fe5d74b7b324f6", - "4678975ad8ef4ef63ed234", - "3a1984f88834905315728d", - "5e53c14166e301e45a1c84", - "1246f9f5df870b21bcb1e6", - "6095ebe0914ab346aaab52", - "173ef6d2228315e7fc8577", - "71a2dd2f4561ce6b25cc84", - "17f8a55fef5d58503cdf89", - "2885d88c14361dbedb4fb1", - "69cb489051468dc8b7a10d", - "6552488fb7e68b138c5691", - "3d5e0686efab87e5e7c266", - "5adfc7a0a78f6657a5960", - "65773487e5415b58fb205a", - "1aa4bb2c56ddce8ebceb39", - "1ae4174a64ea29d65c88b7", - "2af1b36e871a2152d87ea3", - "7118c95246463e79fab7c6", - "7f31009d8b384ea51f9235", - "5eb2b60c1d97e4dcdb09d3", - "5ccfa76193ddbc64186a30", - "1e31c413e16722caeb814", - "dee72e6d522c55b461f4b", - "18250945b23b28bdd1208a", - "72e90ac5d748fbd2d7aadd", - "10ad00e38092458e73fe4f", - "1144f2116d6e426f3addec", - "720179be8f54eb5c778be", - "1fe4c7d7da3eaeaae25e65", - "51a001a64a22c7bc0db3ea", - "7d40cdfed339cab397652f", - "1960ca77285b35812422e2", - "421de31b9083741c4d4c48", - "3cd3f5ea5623ce969c863a", - "4b6b8f4e6118573075d4ce", - "43ac29ece073be2a30ce86", - "217c2392122f9868740137", - "2b3dba5edc89810815d1ce", - "7a9c1df7aec04dc00e3584", - "74aed20fd8f19001dab562", - "74f8ea2aa01f3e122e9ec6", - "7f3f1310b0770a6a8ab4e6", - "7377f9449fdfa779330064", - "4d3d6fd7781e8ff3322226", - "3629587577ea6cd990a3d3", - "29ca62a9234f915c5c9715", - "5286bfcb1951cdb460fbe5", - "1b0dfe5bf791bf4d645e64", - "150cbeb75257f8eed7903", - "5ebda7b44a30093e22fee3", - "6af9f591969edf6d33a899", - "321ccac2ccfd73a0b28c6d", - "fa6bb9b4b92165346e0ff", - "603f9b3bc6733094104e23", - "2e30617b0abeb387001867", - "e419f0eced24d03400fbc", - "2057d9029cad07c3d344a3", - "1d4515e4768ff5c6b4178f", - "7b5d99de82bacb33af7ee8", - "43f53558dbb8a25ad757e", - "4265efdcec74f163498291", - "477273c36a749543489547", - "767f863c9bfc5fd6540f44", - "d8e9fae4ec5d3e7913712", - "2ea5fa6c2e19e6ee7add96", - "55fca6cb45a0501d1c50ba", - "4e94399e1765146189df5b", - "5accf03c1a20af1120832d", - "137f8e05276cc8f9180095", - "499667b1e22348ac584789", - "7b87e87e1438c6126ab1cc", - "46ea38e0c4bb849b39baee", - "d922a909e3b3afea5fe08", - "4700bc9de4804ec44122f", - "54018c8917549d050c00a8", - "5f8307f0589178f70f7238", - "45b5b538c44c73f3bf515f", - "7ad19421f012d132850842", - "7adc118469443d4f7084b2", - "2ae496e8d9399061460619", - "49e01d719bf13fd52369ee", - "e1e55a565534c74a109fc", - "72bd80f062eb130b42b044", - "1d616376b444140f9acd68", - "48082cdc2a40ccd11ae434", - "32a426cd7460f9e5c5e7", - "bb247081da09643c00d36", - "34f2e009d684c876c246fb", - "3e2cbdf24bd5900348312", - "507a6d1fd108a63234b38f", - "3253e31b47819fbcec75b4", - "3ae16fb3fb77d48c6adcc3", - "244d1131736a5aea351d17", - "682b3c7ed60ad7c985a3a", - "22d6cba0f681e23fc64382", - "14da7875e13efd461f7c10", - "1ef2f8aa8266e26254215a", - "22cd6c35ab2195c56794f9", - "1d1b1bb20ae40ee8d35505", - "66ba97928f262067fec230", - "53e99cd5ced120123b808f", - "7e698a24ee9aa726fc4b0b", - "1df3eb49ffac499fc5f3b6", - "465d9407cc9bc6456e974d", - "48938572f05f540b474485", - "ddf6be61ce9c04533277", - "15131878551adae4b04c53", - "14c7f40a28e01adc5ae1b4", - "5cf912fba9a563060d7b3f", - "1c85ed9416af845bb8e82", - "1851d531ca021ad6f2b572", - "4ad2dfbccfebf4c881dcf6", - "16d83b4ed79a537102c236", - "19e1cce82f85eff6f6b24", - "589758587c26455b22331e", - "59fdecdacfa91d60fd391e", - "1eac63084c7797618dd9f7", - "426ece55a7fd1d858414a0", - "2078bac214b712936de507", - "3e748cccf5c4b2e587b8b2", - "232c5e33740871b389c8ba", - "7b4210ea990dbb2b80bb4", - "53b453f5f30f900af808e3", - "49f7df71bb684bf5a54c61", - "1174d8cdaeecfc5b7908d0", - "6106124e06a73207e84629", - "34242d89a6cc1d4e30fa9e", - "74d978e8d6a9ce6def9aa3", - "308787b80145ee403c389d", - "36121cc69943c0f23f8a85", - "6d5d0573b2f9596b50b73b", - "5eb9037bc76a6930985737", - "2c9401cd53725f84e2c421", - "8c59c1948361c413eed8f", - "1439532a6d3fdff49361fa", - "42d71e3ed0639f1b07231a", - "29785bd232aa4bcde009aa", - "494c96ddeebc9c314fa5db", - "2e1d98165a5897b1482cbe", - "7a4b513ca25dc5d887768d", - "5197b486ae5dad9284702a", - "1d4d18f2bee14ee417596c", - "1b8c24041b5c09c2ff1c0f", - "19e87845fee8ee9d86794a", - "dcb3217133998c35879b7", - "61c60fa253a8977e213d6c", - "3df3e3ff8b5241f9f120b6", - "7e880bc1729d1783a14627", - "7ef05035c2a08e050870e7", - "3c234bbaf5da9465f9498e", - "39fc8d30c95dd0494e9be3", - "75b29426909e9c8294f365", - "68ab0ae55863c4f8044101", - "1a01c5dd382ca52c0f8a1a", - "7eaf3d6220ab7c049341fb", - "e966e5d5e80ac9dc377a2", - "38aece2fe0c1923c569603", - "296401a6101dec9b48a81a", - "a5385b7f7d2a505f37187", - "1c0a01fb60b92af636be29", - "546f06ab10360a76005c9e", - "463e980411d809a1713383", - "6247c20f5e97453bb71b09", - "7ed8ee73ca5507f25bd5aa", - "5f9fe5fab5062ae9d40550", - "d7315bcace04536b59c5c", - "700ac125ecd365c309339c", - "792ab4b2a318b2229df59", - "6e8a28f3d3f87aa2548dbc", - "53034f778656513538ce93", - "71310c65e10b4b2e1f3924", - "fca82540d3cb37cfe38de", - "324b0e59fd313b7b066991", - "ca5fc0de7c8f0742fa11a", - "436134e757c46fe077e8fd", - "3382f247e6cbcf48a8be0c", - "5714f7d7bb3f12d88adae1", - "75c3040748861ea4157368", - "1db2b63fb5b72bd2913b9b", - "5de44a501f899626f11ecb", - "4a728ba1f43b41e3c8ba7b", - "631d5fa433132c920e949d", - "49dd9e128368a6e8f31565", - "5f091c9040f8e8b4af8c6a", - "6dbec10ac45803905232cc", - "422c99318e0e012bdf3cdb", - "7499dfe49d22092ecbaacd", - "4e9b8b836aefbcc76074a3", - "23591be47ead61c7626094", - "47cb5e48534f0fa269ac37", - "45d0bbd0c4c565d517f4d9", - "58f251e3a335055f8d1702", - "e16e90086dfb42533696c", - "32bc07a00fc1c32e790cff", - "55d4eceed6862d8b7edf73", - "3bd14b5c954fd788df3e2f", - "32267a0d010a3ac60d956b", - "2dd9e647cd7caac396218d", - "786bd6b0d956c71e3d0c41", - "5a2e3e7ac883c32720fb5f", - "41824effd56ee95a25ffcf", - "df5585842155fda65c5ad", - "f0daaf67c2422477284d4", - "285121b3579e1afaecea17", - "2d0786ef10819221e8e925", - "638a87cbb628cc2744b5a", - "2e795b59317cae4c039946", - "6df756715e22975feac139", - "4299b7c55998b524a2963e", - "d73559f9e34900d6994e0", - "4356f96a535f02cd557790", - "671133a56bfab71842e1aa", - "73475afc8917dfb47ca158", - "8cecd81b395199379b860", - "6908cd3a0537e6d9de224b", - "6c4e919619ba3e8fcc083f", - "765220bfddbe009c12884", - "696a995b7f1bd2337f9c55", - "7a35b4347e2b2fcfef4e8a", - "7715808f58e52b93fbd9f4", - "35984ab233bfbbdc2149d0", - "49f6551bb5a630f7f3a91", - "260202888a368af1bf27f0", - "28c70cf1a34bf4b12fc1a1", - "74a3895c1173d1100e060", - "500de5789e46431a14b08d", - "e50ab5db695f894b26597", - "6e0d3cb0378f9f523dd7ca", - "3b890cc2ea1882c16138ef", - "623f56668cc8a093bdba7e", - "2311c97b29ff503887b251", - "5f019291ccdeabcd687ce5", - "6467af1a0f07013b2e9849", - "14a9e816ead24aab2e6645", - "6bbcfc26c4e8fa7b836095", - "775ff949792463791cf8ab", - "62658893411360a21b6bfa", - "2fc0729bbc7485664f21f9", - "784f7b46f80b03fd06242c", - "7215cad82f761314bbdd1e", - "475c6525a253fe4a455211", - "3301553132b8af815a8ed7", - "40066cef89d0c82982356c", - "36d97c131b997ecd7866ef", - "583e484be506b8efea96b4", - "4656a2b830782828314373", - "374bc74be1e4381a79910f", - "4f459e6fecc9cadb8e977", - "2a843c02b5e59799422e65", - "3910da787142c54f4f9b2f", - "ffbb4d4d7cd961d36be9b", - "38dd92596a9fd54920876d", - "6bd057cf4845772f81f71e", - "4fe62d365b58ffaa0d2201", - "1429ba4cc3fbeac84cae7b", - "403c1a7f2d528ab5d343b9", - "2175a06a641d5e8ad33646", - "25d324d633986f4baae0fd", - "63d746c096cfab5f984c70", - "5bd335a49bc5a06867e5e1", - "375f02bea7dda994d93044", - "4f754c5d3b280b20bc95d0", - "3a997ef0ad242391b526f9", - "2c30e99c7b2606982311b7", - "4d562b2b0bde307c0edc87", - "b4aa58f86a462da2ed07", - "ddd508394009eefde3ac7", - "e73b5b515611f25e496d1", - "e4ce3641fd893553aeebb", - "32765eba5563b5336b4375", - "594ab65a623ca11a1d847f", - "7a6cf71a247a9aa2ad1f3d", - "509c14f0517edd55968bc1", - "3cb90317e0fd78744bd72b", - "45f39b8c67c74dfb911f44", - "476085adcac943f7253ad3", - "658a9098281c199cd165fd", - "cd47f8baa501aac7b0989", - "3de183e6b991f7b8085160", - "a5582fe7b241700d09fbc", - "68719eec758c692aaaddb3", - "7d5f8fcc1cf99dc3131c84", - "5a2d6c9f89fb24cf28d1b3", - "7e1946c78347049b735318", - "2db5ff229cb2d0a85b8393", - "6f9024d8cdd8d69ef10bf7", - "38102211c805f10960d5ba", - "55e838d685f75c7c6b5f20", - "339fe9b069fdcbe6f3e985", - "1a939b8af79d6b9d1e57e0", - "2b1a4dba7447b02833bcc5", - "6a5c41dd17f1f090be79f9", - "6ad4c1af807487676eed8c", - "6f33938b3b060336c57082", - "1e7a055357b6580f4a7b9", - "1d51d9201dd8c5066bb7d1", - "daa197fa1e9b3068f7333", - "364b7fe165d59b5d916e2f", - "4026f1042b0f5b1e940a78", - "3501255a6a3473cf6ac042", - "73a88b6c78ebe25a0f02da", - "645d789e2ca881eb3474c9", - "6f59efef27dbd92df6f652", - "32dc0a137f654afa8bd8fc", - "4e162f9f85bd081abd7380", - "48ef84f7c351ecdc951b2d", - "69150cde40be119caa92bb", - "3b409dc537f82b36a0b80a", - "748df460f8594e0bf1ab20", - "178fa57d907fddb0fe3cca", - "6747e95b215a546a339b7", - "55247bc5a72b8d3e89234b", - "683a5c6214b92efde4aafb", - "f36396be6cc745bba9473", - "77a73ba77b4ed622a17e87", - "2c250894e17e7f4b0dd", - "24af65fef90e2f99e03cae", - "3292c0c9fda6887e4ad161", - "304cc216ed2272d07c7f80", - "5488a723f6ba5cf9800543", - "47d8e4eb9811f9d409ea40", - "7e2be12d72782db9e725dd", - "247f391e5a3b234cf19ccc", - "29f1e17550354ceae49f99", - "4edfb060e1dacbd449d726", - "4a29c3e62c947a4a1e99b9", - "4755035ba4d9924118903c", - "3d946cf498fbed2d965f70", - "260d3af59b4f3d5c208bbf", - "34b484cdb4cebe6aff839", - "7b5ec7e3346c3cb243b356", - "6b25a8073bc36b2af4c2b1", - "3665e544d5ec7ed8868a1b", - "1ccb03c008f2e822848880", - "18e83fe885c9bab518bb97", - "42e88e9f66659afa2a393", - "5533d7d78826353c79c73e", - "674fde01f6057423c31a9a", - "3a9c7a7d5782f84fd4620f", - "19b52abcac8b60d5349efc", - "23ac86fba80f09945d51d2", - "61249154ca21ee2b75deb1", - "473c4bff7362fbbd2049ff", - "923121ae3af782c934df4", - "66fecdf77d13ff6c0b25a4", - "170a54e825e33a2265d3cb", - "31be6678e513813e0e676c", - "7972b4774882051f2d85a4", - "75b09479e265b9f0ac9a5b", - "708324dd5e787ea3d43a21", - "4c67268f528ba7e8c34a0", - "51f9e6d75a3c5264312643", - "24183bf26908368eb41547", - "5e7785eebda5c8e2f0247b", - "5338be8d9f87d3f2e46b2e", - "14bde3f9984cc98dc83f60", - "62870c281778214067b40e", - "62e9a332653e1b103db5cf", - "69c96f5702ae4eecc6f341", - "3e6265ca213c1a0be64512", - "5ea38165e28694c8629ccb", - "2be59650bf9aa57c249937", - "40678fa2d309cb9417f68f", - "3459971422155f9703c78c", - "5552617d9eaca45155f490", - "18991d6f38c445ab4b38f1", - "1aee70e483c99574480349", - "277575523998439f834d3", - "692752e677cdaba7d636c2", - "298af75c2d584b01ccc6a6", - "4d7d33eaba361883277544", - "282f326b1fcbfb463ba836", - "6b0dc0d5521d21af0ccaf4", - "57f40a819546afc89fc2ce", - "6a24f8897d3040e8fb1da8", - "51e8f647af3880d2b77ccd", - "4b223517b6c7cd85cb43d1", - "745ca85c76435eb7ba81ad", - "743eb61998341a5e892884", - "5afcdfdab7a5b6864efc6d", - "39824b01dda7b8ada90cc2", - "2beed154412bd52cf1c83c", - "6b497ffe240d0867d5d7ef", - "eb947683c26db8dac2f36", - "15891c14bba25257cb14ef", - "4f540ba10fdacad19fee6f", - "5097857cdd82d2df144dda", - "6799fa1f9cffb381bd6c8c", - "5e45b3a532e82a603df12b", - "53528c9bfa6f5405d66497", - "2248d63b93978222916f1b", - "c98c97ab7b4b0cb756894", - "57d57f4721fb6be3b38e99", - "7b4ac8e7f9ffbf17f0627f", - "22af1fffca9aa4b2ba234a", - "2b913687a118d5d595277b", - "3cd72e80ffad615f09526a", - "e050d10f9ab1681fbdc06", - "36c8b1aaf274cca356ae2f", - "3d88de9f1c15bfd7b6363b", - "73e027017f2dbdbc204a16", - "6ee2946ba009641ad73037", - "522de20b2431d6ac8f42fb", - "427af6fbf5578c6104b255", - "172bc617da9e1aa348e114", - "1a5e08fda45015af7feba5", - "208fb7a4ffec7d8d1e5be6", - "3712172b56577089f4c773", - "621bfd4a39ee713781e554", - "2f0c8ecc959b7521936666", - "682583fe078ff76c962922", - "509b53b07e607cbcf6e79b", - "1b71574f7c567d707d0e82", - "572930c1df7ba238dfc9cd", - "2029341ddfdbd9f668612", - "1a54e98271fd5720e1bc63", - "62f83959d672cbfe7201a", - "2abf897aba93d347d6e2db", - "3ecd876c819b78567f7fa4", - "69714524521e343bc3692d", - "290cc13b5edc05d863546", - "26436c96779bbae9c15fae", - "32e5746a212d6238682c00", - "5e4b991cdcf27f65105596", - "4a05e03567ac78048832e8", - "658769c97f8b8945ac2878", - "4eea383bfa391bcb14540", - "4871087f3b2cd3c0f24c3e", - "5c20428f433fbf0c9ab374", - "15aba357d612d87099180d", - "73f933fe401d564be0efd3", - "6d925493d403647cc0a7ba", - "6a40f14b7a50eeca571bae", - "446d6309025414bad0aee1", - "6e388c53aaae7d287eebd5", - "3bb5af245e5d40c6fc15e3", - "66895605da5092de3d2b87", - "50774e378282fd09459eb4", - "5abf04c6f95d64b6c414", - "54dcbbc689dad12df77730", - "226c7c98f219b40ea94b66", - "6abf077f6636ceee313734", - "53cc3acdd810a96c3160cb", - "59b759ca3a67e4725b5f84", - "48e1272ba911cad7536a1", - "1d3c95c9d8462d4c467220", - "4167a3ca5253556f128ea6", - "bfe2f259223ccddac13b3", - "bf09d6ff46adc21d04951", - "4555d38c19f123cccb6fb4", - "4a5333a5e1c04b8bdfa257", - "627a4795d0c0df1d84d13a", - "122225a7053b175027361a", - "5027d58d8950e307548d14", - "76c881f1a372f21e829095", - "7f8ad9957e40808881a192", - "621edd8ea6ff7136526540", - "64adff5211c520e76cfa93", - "7b274f32f2cbfe03031cb0", - "3c71a5e6f6b431bc524a53", - "10cc655b268878a4e8e081", - "56853e4d2e614e1924d27a", - "1c72fdd679cfcd10e369be", - "1a364185d640ba1a6ed583", - "230c19482c2fdfccb6b94", - "1a9a55461554e908c4fbf0", - "48b5f18a43890f525b850c", - "779b65c66a52eeb45328d2", - "3a0a69f5624f959d85e411", - "498cac7e3100df5899cd16", - "6be91a7f057434bdea3953", - "1b0ff68c5f14ee84b37e7f", - "af86674d8a1c364331ef3", - "4fadec3b4cf5617426ac33", - "5cc79f5d12d2a991f4ebd0", - "5ca7f66678a73081bd34e5", - "5efd2121bfee3a30184816", - "6b79ef63bb66f1362d8de", - "3c4dc48e3cdfd4ce2eefe9", - "1c9f92bdf4717c6880a9ba", - "168c6919206ac6ace0f625", - "27e147bc2366e607ad99bd", - "44678fb0d784f11b21a657", - "47792007d733892284fb9b", - "636079478bd1eb493d0866", - "7450197e181adf8c4f92cf", - "65a7ac7cbfcc2f6c41c2ac", - "c92faa8d02b107a1b5d50", - "1ee8fffd33bf6223d36b95", - "203c3b480852a2154fd642", - "7ba683eab937665ca29978", - "1998245099906d42a62588", - "75d1f80628c3a1c1082c91", - "1c6bd00355516b7177a93d", - "795824804b82c5e751df2b", - "2746a28b14b19ab8d24145", - "75b3fbba0880cedfe12ea", - "dfc33dec9862e861d43cc", - "5d77b3e7e323ddd35a71a5", - "7438dcc1d87bfc73ab26", - "755d342969e9fcde9fd595", - "7bca9525e525d6ded2c76f", - "d08254f4d2d5ca1a5b877", - "4d1a97d405c026a8a5aed6", - "825e4a5dedb493626e7ba", - "26c3f6eae80009e6946697", - "59b1b4d92c6ee6432bf67c", - "705cc0331aa0195cd9f6ec", - "6d83e6632fcdd8cf940ffe", - "69699a76b55d4ca99064a0", - "76201a82e565cd9ac092ed", - "49b08f20244bc64879adcb", - "2b04a0e7492ffe108c1c00", - "4de1c0244f476f355a3a91", - "1bacdadb366134c3d1a5c0", - "755b7f3a3389c861fb2d23", - "153d48f10507702bdbbfbd", - "17ef22a6ba1fe32d3ef7c0", - "6f55491282e49ce5634ba6", - "66ac85711d7e32d731c773", - "7a45d57fdc1a44af5791fe", - "1b931cd6241fc4f484ed23", - "30ffdb4a4aa7f26e29fcc9", - "54b4dc744541c38f937102", - "4413cfa8b5666fc0af877a", - "5b18e3d2fe16a9d973b934", - "173b57e939be4a4efef880", - "102e8f3d54ced5e10227ed", - "79b27c762372e476f703f7", - "37f81f265c72ca7279eb3c", - "6b11c6506832a5a8571e85", - "5b68ba6c572a6576af79a8", - "26580ddf1efe9fe3eae4e0", - "3c015f30d95c1da9c47adc", - "54c37f5e810a7c49e7a02d", - "3b8be315926a14f8200fe4", - "5334ba131913654474693a", - "245f14c58fc2f1bd38bf6d", - "3ff0891da2c6d0cb8ab6f0", - "3e61864fd19f85bd211f70", - "493f40656c80193590d2f4", - "5dbb4f6414155050573b80", - "6afe8bc3bb8509aff3c666", - "586e1bd3806f5472b98045", - "6afc9a3033b5fed5a0c3ee", - "7969c90c819c5b0080834", - "5ee2324ad6594548cd275b", - "5c6cf60aae0cfc30048ec1", - "40e1957b3947c90dc23e89", - "5846b0049ea6f32f4b2762", - "1e5217185f433bf1233d59", - "af0b8a8f75ec961c833db", - "4f4128c0856b216db55c75", - "41d953d4dc4746ec83a1f0", - "3d55ef23d8c9f8419ff28f", - "1a5f34cedfae0cde5ea0a4", - "6517d2ae1b7ba4107ba2ed", - "4839ff83b5f2ddc41b61ee", - "30ebf17f92538a33a005c5", - "7530bbdc505d301ed9040", - "46ea2e85d6ca1966d1ada4", - "78022742d8c1b58e95d935", - "6a25d7d313e7a656aee548", - "a2c3a3cc1a5dfdc5a02b7", - "2e76f32ec68bf11c44acc8", - "54aeb8675aac1a423a7140", - "dd0623ecc7bb862ebbbac", - "61d42c0be51a3d664c8df2", - "254a37a2b407cabbf8069f", - "687346ea28caf1c87376ab", - "67b1ce8dfe00f53da9491b", - "488aa158d747df0f5cd422", - "21eb89d73161656b740b6c", - "686f17e02f2d49c0e2e48", - "dad2db631732b0506f6b1", - "72e9a5baa06d4af7c9f9da", - "1cab579a1f775fb778d900", - "3c3d137503578a98196d6d", - "2a8bb0c8c3747adf31dc91", - "1cf9608a937eea1a0bb3af", - "40a3f5ad2d4a9b33e2f67f", - "147d7e964c45ec443a24fc", - "7b9587337c3feffe6974d6", - "5839527a17db25de563064", - "1160b80ff627f607bda927", - "5aaca79690a162240db985", - "c75433d8b0423b552102a", - "f46157d09593fd6ceaef5", - "20db18e6c822f683f97989", - "3e1e43759c2fbd4596b36a", - "125d9103db1d2a83e13f71", - "28a2b96944f1b1210e6bbb", - "33fd72210da605d38ab799", - "4cada2a5056e025832015c", - "365c9be3e9c7dcc814388a", - "9f4b0dce97935ef1d9158", - "2b8d9b2da99a690e7c44a7", - "fc59307a819ae8b7a3f67", - "567dff5f6f64aa1697fa0f", - "23343ed75a8de5a22fac16", - "4c2a57eb3ff167fa077ee2", - "7a2990f262218cc62c32dd", - "210cf16be9c62f7408e63d", - "49c59a03a60b57e7bac289", - "499ab94c7bb40ba492d85c", - "67437e976a93329c5b9760", - "77c405c1030a468f5abe34", - "34363c8e2f82b5fdad8c66", - "39c91d6ca89a6fa52b3be6", - "7b2f70ff56626a3003c33d", - "416b4cd1af257e44ad03fe", - "375ec3fc3fce6eb8e8ee9d", - "4fe741cddc07d380fb6143", - "67adab05fa921650ed942f", - "601f96473a856041a89ff8", - "13fc0f6b201b7368c44178", - "6f79151ea6cbf1bbe85f5d", - "5dd15f8501fbd308a231a2", - "8ab595a01941ab4070b39", - "6ad236039c2c3e149bcca2", - "40c514f5e20e67263ea899", - "10b3ac9e35f753e3c9deb", - "2d816960b0911019df6133", - "14efaca65e59726b81dbf0", - "7d98b2bd2e9168b6d2e72f", - "49639d01a55025d5b2f6ef", - "2e1479f3781e1a48fc49de", - "7d60cbfdcc63ced7661d40", - "3ec0da959b014a91e3d171", - "6e1573decbd31bd14c0615", - "2ae83fe35c42b256590f54", - "22d68d4ed1af18d8658de4", - "3153805f294e973c493b1e", - "23270a061497f9098a49ee", - "3ed51ed7c85d68db84d78a", - "788f47c4aa1ecb9b01c1a7", - "9dfe0a1feefabb0c62643", - "7376e75fa605889898fa7a", - "578a6c67a3dea7609537e0", - "146dc1fd204e259d148dfd", - "59ff3fb267f4dcf86fd4df", - "5a081e53f2beac49d1a3e5", - "37bd7e26cf4711cd149911", - "47d814d93ff8dca3c1398b", - "132d2eb133a0383d464ad2", - "30f7be09c5f39b5532dcd3", - "83b4a6c139b7fda28fc0b", - "77e2377901111b6ba92316", - "7add5048bc0984c36294e1", - "2afa4dd2f2245b7525fdf6", - "50c4c9d0b48bd147d875cd", - "6387ce1a213d98335598c0", - "52253824741dd177a674a9", - "3195d14bda042e7057d34f", - "6b849a1f17d635cf0a773f", - "7c9cfb41c0f888d000fc52", - "7dea2305f898b6d88f6821", - "43d0ab106641bd01d72cd4", - "1d5fe04c71a377f6784338", - "207b51e97aba651825b40f", - "41327dfa41486f6b995572", - "245cbb0117ba8963db7929", - "4956d4cfa3dee8e23259eb", - "49af3dd263ef8ddc7b0303", - "76dda8edbfa5a4265a1a74", - "26b516b52794658e68ab5a", - "260f0ab9a00e1e941e404f", - "3395f092181af53bb73f3e", - "17a50483229662a578fdf3", - "30e3bf91dbc04d50a032bf", - "525362bcc006730db95180", - "6e988e80d2c29dc7542de4", - "47efed21b3657d0618e28f", - "fb85baef473def8948133", - "67afcc19d0bb557a608666", - "3e1ecaa8d0631877bfedb9", - "38a68ae5efe6ac22d3f278", - "4b2a621bcd3f244dbd1aa6", - "2432bbe72c83689ef74c85", - "1aba34eed15b418d4b7f0a", - "2d2efb8be305a05b685aa3", - "cdd3df5aba4c7ba52b4cd", - "7c38756fdad7c18ef7576", - "437e569a7451bd9bbbce87", - "614a9023303ed4dd2cdfb9", - "43c088f2eb74b96d25a4a8", - "308a1daa2779a84d4db8ac", - "59f29456bbb20b47aa046f", - "4b0f09e29272f9d49c6266", - "b03e402e64c3436818402", - "40f2e74e1048db76b72516", - "1a484afbb93898190d8d03", - "6edb305f1f8f30902439c9", - "7fd2ed81931942f0ef8d50", - "402466331777b126e4d8e2", - "52d5ea798306c9e21853b2", - "765c653014c5e4b3dc3865", - "785211217f5fa1bf82b193", - "3bcee7bc9a5ca7219edfaa", - "61b023abdf63ddd6300036", - "2f305b730466b54d50855e", - "60b46e71f1f2b8376d5d29", - "745cc1be634380e90bc82", - "208b7d3e85a97a99407a38", - "1000ca68b2a0f4790d5b97", - "2ef94456619d9728490c1d", - "18347f5ec924cf4631f292", - "26b5c49d8c4e12d4b3d157", - "15e2aab3b7b69272b3c155", - "76272e758d9f83ceea908b", - "fb87766da12e75782ca77", - "57caf75d12ec817c6cddfa", - "1a04ba76b7855a5e9c289a", - "7e5eb2a4ef3434465acdeb", - "35b964532350abcbf76d9f", - "3f14484539a427ea73a1b8", - "4d10e4408b3b6761aa225", - "235ae37d20b21074f27732", - "44dd12bd0d7f960d6bd7f6", - "196185d708583cfba757f7", - "5f8e36ec1202b0292d5945", - "47d7208165498ac04fc240", - "332ea59945a5d0e73f7dc5", - "653694fe66c257988cd02a", - "3069cb41e51edac9ec2b3f", - "17e032019f0dc1c4277c0b", - "52a44d4aac2b12a44786a4", - "33bbdb9fd9d9e6cda126be", - "520cfdeb5b65ce3df47f12", - "3746df2dcaeb2f941850af", - "34b380f57ddac800a53234", - "7116294960ec1370cfa192", - "6c02da94ff6269ebf8b68", - "528f06b90d6ea98654eb1b", - "643b1783eeff5d2d9d100e", - "14e34536d861554652fc3d", - "28da7bd48db9e867715c64", - "7b233911df67c0ffe75298", - "282425a374dcf57904fcaa", - "7f873bc8523c4931739324", - "5f1584cca489de9bdcd65b", - "6862becb8f668738ac092f", - "495ccc90a936edcdb3b175", - "71dbc0d71fbcfcf1245bc2", - "5298718820a8e285437a64", - "2a9957bb174e3a8d1169ef", - "58dbbd6f088b5ff881356c", - "67ed429f48df076df817f4", - "ba3b72d702ce311cc02a", - "6415a8a79aa0ebffb6a24d", - "5b6485b2f7f41f0abf3544", - "edea2902a199d26d75bdd", - "97bac956d2b65a51260e7", - "b2c65762784255bbebc75", - "41b1881d9704918a051695", - "3939cec4c6eb132c9146a8", - "4e4622894612a0772ab9f8", - "398cbdee468f0759c375a1", - "592a4efec7cf89e527fdb", - "79ea859ae0d9bf58c8e071", - "4786c255855f792a20f869", - "272821f07dab57e4aaf0a7", - "25e016000255df0b5c8153", - "17040e8c8be515e4ea36e", - "341181b7d4d6f4e2cf9643", - "73f8a019ddb59d3f06f049", - "cbf28251298433a3abc70", - "51edf68dda1a87c4b3af7e", - "2e78ee01fc4dbe304eaea1", - "36a98de095d312e040c903", - "1c94ea576c3cfe00e40a0c", - "2969569df7efe8c61bb461", - "2b036df33feda1ac5edb68", - "3d1dbd13d46aa7f5e4c42", - "32f17d420cb00b34cd9fc3", - "79a8e47a4d897cf6b712f", - "6be705331dd40db5a995b0", - "797e5770501b190fa5f6f1", - "21d9c50ac15f9a1fc38df4", - "639eb30656278296f2b3e0", - "4b90d5d4f791e4cafea283", - "7b4912ce2f8ea6ad90baf0", - "185c0df44a167fc9bfe948", - "4c622bd5bd26bcbd487c68", - "7c4aa256f5265e9d49e8ab", - "63f8378a4c563212109ee4", - "4ca98168d36f8ab3815a02", - "411a5d336f1cca7988f319", - "34c572dd024d37c54c5648", - "249469414e604f245a56ca", - "2e9650e328b679ea03af31", - "db07432bf40360e3df399", - "2e9fc43379988881a1b064", - "752129c2d07a536bf3bb8", - "c79d219ef793e02a9f989", - "210441f8cc9b531f88fd3a", - "6bb593df2f572a23254ed6", - "55152f253ffb05575c981d", - "40734a14dd653457e54b74", - "7fcb3af03a778d48d5ac9b", - "43e02a2659ddc4d3204fd7", - "2ab0a302ecc453de7fdbe4", - "2a68ad26b94fd25b4509aa", - "46afa6e418c9bd4065cd9d", - "517123f4920304dc75317a", - "33c3a8fe7d6e90cd610695", - "1a30afeb54dea502f0310a", - "2b5280596202f4b3ee0814", - "70b50a59ebc270bb237505", - "65f71d8c8e62cbeef07daf", - "197461e90c6b70a7dda46d", - "4053f687fd270a04d092a9", - "43d235cd54423fd6135def", - "ac0f86afb7bbca8d57c4f", - "1dd4abfd6c4ed8a3ad6bbb", - "25d3735a734b777dd960b8", - "56a6cdbd81ef505320e706", - "3c1c9492a56c8c78536095", - "31ee9d29cb2f2a7eeddbc0", - "666ea50157a2d8307a0ef8", - "1472017c713a1063411e0", - "53e73a626a5de69e43d0e0", - "dcc0bec90c531be4924ef", - "6bd3a60ce037d04a7d822c", - "3ad7e93e4ab55d402a33ea", - "10db0037fd5f7d8c49aee6", - "4d29703647563e84d6ac7f", - "2555442bf058722bf0120c", - "2e274c1905f505ef9d43c1", - "46b0509f9638e9030f5895", - "4082d11934cd3944191e6d", - "3cab0ae1036c6d43311ae4", - "218c9ea39a51618b1ce10e", - "9e1bd1e36f73d0f69f697", - "5a20607ce9679fb1f266e5", - "4ae24f235a28b7f71492ce", - "7510db776aba775075e549", - "5695db84b4c92a3d6677b2", - "74e01ea265377cb713e57a", - "768cbd11024387469f6ee1", - "61b85bccf0f4316c2cec04", - "aeeaf98aedc83e6ae6cc5", - "4e175c68ed04c585f606f8", - "1ee9410958604d03f20f1f", - "127b65c61b8c8f1b9456ee", - "3d57e0a1ef4abcae8719be", - "688ea19369341f6943063f", - "1f91eb155829f1481d6da7", - "4f34769ad379d64a27233e", - "59daf69acb0d30ef2fc5db", - "1efc90353d647b1a3dfd54", - "39965be2b1bbb3ed832fdd", - "7fd47e391981aa515116c7", - "5ca9b2680bb84ff6e98b33", - "36b7f85db80800549459bd", - "16d114b00964bdc8e2e82a", - "7c1256dceb40e2f63ca4f9", - "5b4dd88e0cfc108bdc7320", - "239e94f2e5843a6e20f1bb", - "3552a76787de4570d42693", - "6f2f55effdb76df46b548a", - "6152765b747658a14d5829", - "1778273a04ac508e342b", - "75471e22b2d84fd2fe01b9", - "5d6bf6a59488555bf1342a", - "160134aa459258ff8f6285", - "17e8af02e79e7f8d2cdf99", - "4f5e7f770a4d50c69c4028", - "51fc2c3f86b8fc46a7a221", - "70d95d23dca53184d30b4b", - "4a9b685698a7674338b188", - "4d7940ea6bfaa7b282a985", - "39baaf1f520d96bfc8c1df", - "409fc384bef4b3d255371f", - "3bac7e0675e0a9967ff7da", - "5c1544633a0bf7939343d0", - "39d71478d3005e797c6913", - "153884834dca9aae7d5d2d", - "630270f2ed4331deaf63f0", - "46323a1998a54f7e0819f6", - "61c87048ea8325590bc5b1", - "1960b3a13c6cb6acb7f489", - "3956e2767e97b7703253b0", - "1b5226354071022a104a86", - "3a7ecceb35e2e9a438dbd5", - "10c81c57aed768b3285598", - "bd499ce82d93c07477fc", - "67e11e83cb547515b53701", - "171757e72adb6abd8f440b", - "590056c647987959065bd", - "4e27f64f8732105513ad9b", - "de9896eb70f1668b87fc", - "457dc9644e5b25ae6c4291", - "5a6df4a369ed81627d4fa3", - "568fd03e0a80223cd1669a", - "1e92415029559dc3ed8283", - "1cb2dabf0298f57d15e65c", - "426541c137d269fd2e2296", - "19a439abdf3f4f5eb63683", - "482af287c71050fd03632a", - "47a080b7584194b936f712", - "20d4366552d0d83219fa0d", - "4494bc9e65c8cf2a6ea51d", - "2148939cfe2757b6666fc2", - "476ef278c257202dd01711", - "3eaa7351a72b065707e47a", - "2703e4a7969073dd381cbd", - "1badf1b7dc0b73e0bf8b67", - "47d847bd96fbfc9c221fd4", - "13637e15b786797995ba49", - "5e842bbb537167f75451a7", - "3b228f46cdc0e8a979b45e", - "2fdd94b55dd5fb9a3915f5", - "1cca04897dbffe7f26f2ec", - "67a8cdbece1aca4e55ba72", - "47ba42dd06a62256ee8c8b", - "3288681f4d08858009187c", - "69412d8563ffa7e83b0ef0", - "240e2e38e41f3b6530a267", - "12e92ef014e8d7fbb8d23e", - "45440750f90776251263b4", - "3a8965cf80aa6c4410dfab", - "559bf101b9cff724b929cd", - "280f08134d28252bd0b713" -}; +static const char* Roots[] = { "1", + "5569560418e73ff9db709", + "5bf795c6d548a19b6ac340", + "760df490123f6613b0a970", + "7cec29d14a0eefb222bde7", + "3c70a3f0e9c5b206031a33", + "1cec8c96472b84936bbc22", + "3315173915ca23d8c1b814", + "39a0c4e1da321f1bc126f4", + "760f3656c1130b21d369d9", + "452231c3bcde7b7b5b0af8", + "6fe27c77d57e2feb8cbcbf", + "3a7a488015e75feec809f8", + "c16d15fea9d61c8df5121", + "5a8a9b5c659b71e837ea18", + "506d84c9f4d4bc400fdd25", + "4d7566cd294f75be6620f3", + "5f80095f2580ec4cf13b51", + "34eea7a66e8ff3dcc8988e", + "899b1ac6f72ffff8aedfc", + "3cb5a124ce563c3967dbc3", + "16d5205447831696c5d6a0", + "414e761d40341e7f97c304", + "498104aa12355244a9b0d6", + "3a8c5a9525f5d62cea294d", + "1c90fea5f39d8ac4dfc2a3", + "6a716dae106b9aeff2133e", + "735cfad9acf49090fb7037", + "5f4e7c70ff55ff2f888f05", + "2f39a2788d5c2a24e16acc", + "38d9d05f9463a537f470b2", + "72b5d8f8e65cb7509a93d8", + "75066462fdbbc7301e209b", + "55afbc51e7c2cc748942ac", + "47a1f466100bf70dd5689", + "57d88b5e0b434eb1a0dc08", + "27ec8c6636679988dd1267", + "4818e9ef0ea7625cfc3d0", + "68fa3ecc3845db5d523ad9", + "4c95bed884bd87ec1d5e70", + "7136b3dd116ed121aab68", + "60617400353c1eb8e8832b", + "19772e34181f57b670bf9", + "2f58f2df794a35875efc99", + "690aa96130f8c533d77ce4", + "df261ad3b5157a525bb81", + "6a437e22c95fc6c6a4449d", + "1cc2526113f2bae9b540c1", + "7fc2bcc524b4326eb8303d", + "751e9eb348bc8239d6e118", + "2fb170a11f1aecdf586d25", + "32aafc640e8c99bda8faa7", + "552aca5af025ea1e84aadb", + "30a3461d63ca9807464dd6", + "3f68fa1a9ab7772758d0ba", + "6ba1300374acd487b23577", + "35865b2ca16d3453781f41", + "3d1155c4a53835d991a0f", + "74bb588b5553c2b2d4ac78", + "3778fd3a46ffde4755b6ce", + "1d2b9ca2f44294070d4e86", + "38596ed050f14596adc07f", + "2015aa6fc7e48fa3bc5ab5", + "2ad2546b270547fc24541b", + "1dd1b432dc809fe4c879b3", + "149e6a0b6c6543ae895e07", + "7851b3168b92e5daed021f", + "2bee268df09cc40864a917", + "76c2f0ba37187112ee4d4d", + "53016aa1427381b9f28ea5", + "397f144a181805e1a097c9", + "634478b621f7f0a455c48c", + "7cc0116bd0bc164835ee72", + "310e395e429c4494a5f850", + "63e0dbdfb13b4fbb46f00c", + "4a9e2e5d8ad0e2e82aa7de", + "7d0578a8908ba294259bd", + "17276a59aa9630c1141c17", + "393fe0be8f011593a7e1ef", + "475e84f70334cc0bc8292", + "1ccd174e9aa4e58e7414bc", + "19b666810d736e639b51f2", + "2a48d89ce122dfa7deba2f", + "6520599b30ba3568ad0f09", + "4b35e35e82bffb49d0d830", + "3943e926fbe3d426004ea9", + "4e501beb4617be0f02deb4", + "343dad4f059acb87d3b0e2", + "7bb4f9d707b4ee3a20e779", + "7de4927696bdd6d3b718", + "6da3828f2d4926651f7a27", + "3601174a7dc823bf4dc3a6", + "223160cdd1bfa322ca3e6c", + "31a504d1dcc251075e4436", + "1b1ca5d6c688c4cf99448d", + "4309c1c59a581af63d922d", + "6077a88144957827c07205", + "22e321253c3e0fb875c4df", + "6b4728ee168cd23e2fe47c", + "1c35e13f8ffb7c470fa61c", + "4bacbc68650c41520d312c", + "455c9131bfa1c33274be37", + "23c82ae839bf5380a55acf", + "171e59c89024b148534f1b", + "165ff53589519199fc1846", + "69bb33c18017fddf18d091", + "2797689917c95a9d4073ae", + "527c4b155e3708972293d1", + "6e007172a16a9c673e635d", + "1921f3262afb2f3766f357", + "70a2d453b688803716fdbf", + "4fbc987e428ed0ce9cb76c", + "58320debe89492ceee77e", + "1b0c27c7452322264822f3", + "66ffe80af410522139e92f", + "5e56a7d976f1a3334f57c3", + "536a736ad3a37793dd9f54", + "407333b3b6a3bed3ef8920", + "76fed7d89907843db9af52", + "18019c176b4c9453028db8", + "4a54d9b3589d5340a01e23", + "1a4e5bc143bf00e8928403", + "61f4a55b140e767495cd59", + "25cab751e23d8e69bb5048", + "591bac661062f64b8e3f2c", + "7006ef130d31e12bc44c5a", + "6a23876a8c802d81d83d29", + "7cf9338ca9bcab73862b81", + "e941ecc714605cea72177", + "4839c6454f97ececa9969f", + "672d7083ec424e5d883cec", + "3722a55f27f2c02b34eddc", + "4f72850630f6f8c1a68862", + "1a63315aa52cb254b65ce0", + "5a0c2602dcbbbf468b67e0", + "23f219093e9b0bb3b5217d", + "4f6d8c8b0b9b376d42c4b1", + "7abf68b2e4cc9e3a3b2c5f", + "75f4eb6de0d35eeaa16cf8", + "6a81a8d913b71671629ad5", + "3afeb7cc8f8e5bb8770da", + "2b0fed7a534d25697e5c7b", + "2964973c288dced7dae8fc", + "a6c54d0ec55adb4911efd", + "7e958697030784ae5ddf86", + "7fd4ee663460087b793a80", + "5cafa83a10f929b5076c60", + "452d3dfff11e24bf680356", + "39242760b51f2f93fd4721", + "18ec20d19a478746123b", + "30f4f5617cc73435ce74c2", + "1851e925707895d37a37f2", + "6400e87749e3bcbd750d89", + "6c8879d694e1a0b99f8e42", + "3ecf9d05cd62341c4f7784", + "7895b432001edf846b7b3e", + "7c6b359299af5c59043711", + "13f13f9f2c877cb73ba5c", + "2193bc73ac4b40415c95b5", + "6351b2a5f477112f552683", + "48eaf0293f956717b8f048", + "21a363ab0e08a4336f2e44", + "d8c34dffd92c1a20d6a9a", + "7dc98aa964908b313939a9", + "327b2b8d0b75e0d83a5b04", + "2d1b2f087facf1fbfc7e69", + "6e97dd298eaee757a3cec1", + "504d29ae2e5a021d2bb278", + "5344962f90f45cfaeb1bce", + "767dc9d34c09b03db4a0e9", + "731a7b89f357bfb855a5b2", + "42cd59499a0ef57d6b0009", + "5d711409f3faa9ea87abfc", + "352389083277fbbbe66ac3", + "30a77107da1d91a699e9f5", + "39bf9c3f1f0a1a15264530", + "5ce5e0595ad07c8855357b", + "4499c1c16fec3546d5903c", + "5b8e9d8b290e89e5d9afc3", + "214f18ae0c9aa7a1b8c02e", + "639c2fcec8b9dfcc987387", + "1536906705870049755028", + "e0800809dbab6d41345b4", + "39489c7fdb445490d498cd", + "52c4d1c2ad153a3f70bc0a", + "540f5a33d5aeafadcad19d", + "6081e77fedf3898fd66607", + "584b7d6f0b43ddd0b397e4", + "7d8b341c82b019a8d56c92", + "2478db790ed59756cef964", + "93cbb2483673e4e0dda30", + "18ba9d869c489f11ce52e7", + "52cfcbd15dfc6c476cfc76", + "7ae1d007cf030664c6b815", + "9bea90a26f9e93743a998", + "7e62c15038abb8244531b4", + "3cb748f77d638122329dca", + "1fa330f6dd5f3ca09176ce", + "779559a53e6b62275896e9", + "51a9b0945a0908b1d40d24", + "2b13e041339df4d5a521ce", + "7256923d608836710a659c", + "48a999a2dc1a23a934a6fc", + "ef75fc5d77fc146e975f7", + "a058b3353ac6290d9f864", + "290ac68bec8aa8955b7e97", + "754ffe6bc2e7525e892fe", + "5d7c2a1d1267b7a252da1", + "35714b90920ce6fe1f850", + "456138a50c3717947be48e", + "1e2093f76475f58a2dfd79", + "4d8859f357a36792b7211f", + "3505fcb3eb2690f88b3be3", + "2735b2e6f5f08a9e9418bb", + "4c1f6b587fd26654ea69e1", + "351c5a0b997e45ec21b614", + "1c960c994194a1366a2222", + "352a4a136ebd7ef294f370", + "2df28a1b78b46f16aaf53b", + "29bbe5fdf14e69065cb80c", + "30eff32d49c10f325b8e9c", + "628d18e095a8dbcb9f43bf", + "1efd2b46d4a8724e929fd9", + "13221a23af3045ec5cea35", + "15d4218f4bbf0c95cd9649", + "3f5027ce278d444a4dd243", + "2d5e8f78718c2d4660cc69", + "49cb6ac7a2bfdc54300006", + "a134915353ce113eb72dd", + "479e7025ae3fdc2bbcbe22", + "64ed03e382c11a32e34cf4", + "3d73fd3c3744e9ec5d2d04", + "116da33e19c8b80384fe28", + "68ee183b2208228da8bab7", + "1abc0d15793c655cee4a9c", + "307727bd97c5db086074b3", + "1d6812727d8421d0e03a6f", + "5b39ddb704fa58142076d", + "2f78c0f7e7a90558573941", + "35a3ab4773c5054a30c44d", + "76c132264ad2a774a55164", + "620084c5da2910137e2b10", + "31541f24753a28cc5b51d8", + "52f5adde99e4501e4d1c61", + "779eb73caa637aa28db87c", + "3a89578d6ca992f91249be", + "536be2b3e3829710aec51b", + "53c95b2787b88db0682132", + "4a0fb16cc4d1bdfbb239c", + "8b462e0f7448b549fd688", + "783e0229f219bc18b705e4", + "17dd6e40297f1d32786291", + "4f2cc1f6f7aba8c20a670c", + "479fc9912c9c81152eb474", + "117480f169f81bb3e8609c", + "df7ae04689867c9ad97d8", + "70a1107bc42bfb598164ea", + "557361125249092a7bf932", + "5cd319aa7906a96d2f6c7e", + "72a7ca4a8dc56f9c652281", + "dce90e419e8d3f96eb5b4", + "15bb5d9b44eebb27a1e60e", + "2baeaedf76503008b9e428", + "7aa81a94a5a230cf59a0b9", + "55d7bf2f5724b5dd0a04ae", + "e1ef803b3674bf39884ae", + "1738ee1c8e104064e07249", + "7ce4bd3337a7333159cb2c", + "38110b962a169200cc9f0a", + "1ddeaa1e583e9146210f69", + "cfc86f804a481df48868e", + "55a41153a33cb4649703a5", + "5eb4d93a33b2d2e2c2adad", + "4cd904fd9401eac5ad7f1c", + "502c6a2df8916b18106088", + "6259df76b87ab2eff6659f", + "2f85e68dfb9aea66d7f07c", + "1f1eea8231315133cde938", + "6863984d7793407587e8e2", + "7b5272bdeb1b01fe56bc29", + "26b7df388a02a8279b0652", + "7fe76cd2c5affa913c2b41", + "733b81816da25936e81af1", + "235baa54adcc67af92d06d", + "4e6cb8ec1b00e2f28b3a7e", + "88b8371baafc87a9713f4", + "3b0283be973d59ebf4242f", + "587cce1cbd0dee8b98f262", + "6cfdd09fe2bd66b85c2e00", + "12a3196afc09a79694eb31", + "4feae15528510f186aa1fa", + "449ccc3923e92a0bd2e3ba", + "4f74e7ee01738298062093", + "6ce98c831091728c0e73bb", + "4bfd93fb985a44ed0569f4", + "3c8b04f81e14e10396b582", + "6cf76079225189eb2608ce", + "76e87d4d2740e137511b26", + "c62790b24bc842a717e31", + "516640d56302eb15061b25", + "60c8d2e958387c0d0627a8", + "402c7149b20bce787c7e83", + "64c275af1abda385c2af0b", + "5088a2317aa34dd5bb1b4d", + "67a9131aabd5255bdce732", + "d452f805a2c35e686e107", + "5ef5512b3384aa1243daa6", + "6c1076c01e9e44fb047889", + "46bdbd32d31b2a36e04e0a", + "527456447c2748239033cf", + "356211f56936e183312837", + "449d4feccb40da2e122aa1", + "43ee4b35cb3cdc84d1d5db", + "7651ee2e0f4d348cbe95bd", + "2ef2be0f7e33ace73bab4", + "4b8968b5c5a93dbb4b2b55", + "7d2db742721c9ba686ff30", + "48e4926c40cd6ab5e92ffc", + "506e6a05e8de5c9198ae69", + "74a156e77589342bbef3d5", + "798019b397419c8d54fda1", + "5a7d2dd2aa2028d4da8f42", + "5ebb44d93cb77417b61c4f", + "1630a212afc84f038374d9", + "3ae30b1b5931eb630bbf6c", + "37ba1e609c7b12a8e32733", + "238de3e1606bc0e1c33adb", + "149d706db4fce00c71da76", + "524b77666e02692a642407", + "ac6c9987de6c73f2259d9", + "51c819b9ec191b60920096", + "a961f7b95836d3a578170", + "2bb1db818cfd733dcce0b0", + "51eb043d3564fa91215f1b", + "23693b4063cf0fa20dad42", + "4fbaae68fdb253d715d528", + "69a784edece7c38bcf7297", + "1d595362f3a1b4c77729e7", + "22f18c95264f1fb742c348", + "5637e5d4438a119a23f043", + "75a7fc26a6faacf109b345", + "3a051daeeae9770973713e", + "4b21ef5da2b744139c3cf1", + "471eec9edf3f5af18be6bf", + "341851bd5e48e20f0a412f", + "f125d56d3c0c2aaf7ad05", + "c91beeecaf54c95dc1b37", + "38e1e6200860f4072a8a1d", + "3b3a5f854ba249c04d075", + "4170c011864f5582d6a738", + "17fc45b2690c315a5249e8", + "1bab6e088abbb7a786ff3d", + "1b388caec4f8538425d93c", + "6df80f50564e811e245eb5", + "65a5c9fe061a38a8c6c2e0", + "18e5cae7f3bd61293a8c2b", + "408e6268fcd75479c3bece", + "514d622fcdfc26212b5d14", + "435abcd28c0cfc9f321db0", + "710608c33a517ea5d5359e", + "96cf28ae783cd1e477aa5", + "5685392e26e4e637394c54", + "32f953543bd07093a29e5f", + "6806f2889f5316f4c57e07", + "668c0767178119bd41ac3", + "6e885e79f7b5fe77214da5", + "3915c8d33da94da27c1249", + "762f2aec62b91b262cc99f", + "7ce0b194ba3e31249ab36d", + "5dd52a5a11350a9b7572fc", + "404ae85658f9b08174632", + "7772e0b990ccdc614c11c3", + "573747456cbe53c844796c", + "3cf5810d8c38a097a7561f", + "269c017af27ad44e6b201e", + "2835e7f4b39073c5a451bb", + "ba07dcfdd701f16f45aca", + "1b6a00fcabec41d4b43ba2", + "67da5d093fc207176dbdb2", + "311601fec45703953f2b91", + "483ca240f22946b37af3c", + "758f193f192584a42ebc31", + "16fb077509115b4c0ee442", + "2334ccde40867fa1d0bc15", + "3f0177714af6ab07d870c0", + "697c3f9accda8d3543f182", + "59a5901c521b74864c8fb2", + "17961b8be9d0332a213177", + "69defadcac1e44c7a1c0bd", + "2df92a33b308b4efdcaee3", + "3a603b28f5e57fbfd764b9", + "65c75439faa2303912b32e", + "121daf29269045f5bdd20b", + "7adedaa3d8ff64ef5910ed", + "7b59158d38abcc0653e41", + "63bd657552fcd47a1fea3b", + "3951fc47c9cf417968c09a", + "7b97dd845f9509d060f296", + "67cd089f73cfc8807dd840", + "b17adb15bd895ea825438", + "3860f5646a470f19d720f1", + "1365575dcf06e2b1987b3f", + "5fdf7c6cf80f5f4d619b9c", + "1e86f8d9f30e1c9ee2f741", + "2f4da63191088795366c81", + "1f527bd93add787e619f2f", + "1bf7de225f0abb4eae1da2", + "7eede9c7d2fd05759ff0d5", + "7c4ebd51c09994a5c2702b", + "2f27f9f5b37e53f26a3367", + "1a91f5500bd170effa0820", + "14e76412c1e117fa60f762", + "27869ae6bfa80052e928d4", + "36e5208ae458480078d5d", + "193c88995f60dbabf1ee79", + "55509fd3a52bd88fe29e11", + "60188d16e528a5d2e06d3d", + "3cd40ccabd157073f9e356", + "6f7417b6bfc27461fd2524", + "60f671cf9f662680d04313", + "6a1b97013fc782623a1d18", + "4a5a912df871eba16ca2bf", + "4bafb874450e24655961f3", + "7fa7e63240bd502dd4b06b", + "3ac9b63dfc3067c1c4627d", + "11978ed9a01677cec42ee0", + "6b488f646fce9835d43f44", + "2449f6a2ba5fdac5a9c1d4", + "1fb4d17ac6ee317ce5a547", + "230119c3b2a6b1bafca00", + "5ba00e958e1473bae28031", + "2e0a934adfe422dd136191", + "64af53c3c0ad963e3055c1", + "173ee21e60a88ae566e166", + "c25f982adccb58e81ce02", + "1c0d48f6283945e321fdac", + "15b86ea9fb5f9d46bb9d95", + "12ea1cc2026e4f5211a159", + "4948e72d6c06974bcf7212", + "474d5e705efa51e5e97d39", + "3a928b86dc180342e1f053", + "68570d0c5fc94ab3c18486", + "33294a38a5c8a431b3624c", + "7f5271355a686a4df7e516", + "2176005ea62a7fae1a0ec5", + "7b7ba8150a404335a3e978", + "7ee167869f16d0f3096184", + "37b012fbed4994b5319766", + "5a9897a2da0299756dfdb3", + "22c922d5b0fc736e5f1adc", + "7c793c0d415e26d57ec92", + "11326e189db8b15b0744ff", + "39f2517276288f74c45e3a", + "47b94fbc156b869e9d16b9", + "4a27b941aa4c6ad1e07548", + "796842dd6bfad2f98912a6", + "561331256e1d21664a1287", + "4d3db82b9d6efaedc42576", + "26293d249066a3014c3338", + "29d711357943b0afaa5b59", + "3baf4fa4e9f273acdf732c", + "22f4901fc0a8b24cf62fe4", + "fa65751eb4d84785986bf", + "1c89d8520ef104ebd20ee", + "3251a62ebf3abdb7c9ed58", + "59db917020bf7253782d5c", + "52c455dad0b267d43552f0", + "599102d1f2500d61d762c9", + "77024358b3e776b2c5e1af", + "3248d851d401112b750bc", + "36f20d7e24da8778ce35f5", + "4dbcbf0e0833361017aadd", + "7a6a150f8921047e15edcb", + "5d53571a7cc3688e6944b0", + "3de0a5abf20a4845d76439", + "330bf157841f4554c8f5de", + "7faf5fb28aa48ff83cc07", + "ff765fa35889a47189d5c", + "1bb928a5ce5b6a93e4a6be", + "443f4b4ed3b1f2c8fe8ce8", + "159314ac561f7431a71dd2", + "2ad8da8cd83b1521d7659a", + "2e6c1f41a9866f4d867e01", + "2bf095a2fbcdb3391aec69", + "7286bedeaa0c2687819d8a", + "1a1cfff05adf1a427c023e", + "7677202d8f05f9287a6047", + "144036e909f39a00a79653", + "5d5d0b6bedf48b96c5eb79", + "2aeb5606838c910769daa9", + "36b57535eb2f884ec435f1", + "26639427b4cd468207f354", + "567c07ffdf5609acdc57cd", + "46c6a4606b83331dd733e4", + "214ab6242649bf5f0673b5", + "456b75b7118ddbd9c05113", + "23f47a79fc10179e2f1aad", + "6750d083991451ddf24ddc", + "9a91d432ec896438ac971", + "62cba5cd6ece1fcc005653", + "146e2b3f7404eaa2825f64", + "73a1489a18b0815a03faf8", + "4b81add44caab6287f5254", + "43da9e4b9fc98c3225df02", + "73c9485e5e5379f878695", + "4b0e392a6b94b0716bcb0f", + "627d01094a2553e7bdde46", + "6e1c49a1adf3346b270d76", + "2c11fd859f539479044b3d", + "5ad56a9a03d1277384501c", + "538b76dc0991647c99d6ab", + "2fe38c447768175651bb27", + "2d8207ca3331c2f27a3943", + "ac1c0028dc3aa005da816", + "5830e5e1c9294904118c10", + "4fc1aa30a26bf05e1cf79e", + "37ca6d3b30cb2687e44f7a", + "3fbae766d352bf62d71ec9", + "5b8558cbc60eeb5d4d1e0c", + "3c0ef922648f93834d2bac", + "1f216750a4d1686b3b2227", + "54449f7dccf77fd8f14fff", + "25b4f424465c145a893505", + "1533a8f5ee81c2d4352c6", + "747f5812283a8ba1a43af4", + "42d3b2e606813eb48865e1", + "771e23d6155cbd6574be92", + "6937a623eafb54374944c3", + "7ebd8ffb86035ffa249a5c", + "65a59676f2a0f7f5358513", + "4cc1b8f60c7b3b604dd7f3", + "8c1b60a22d754654b3b0e", + "3542a00727cde7902f64", + "46dbb8e8c99f2d8cf603ab", + "449f89bc8e75ebc93c06c2", + "42fe3f1413aec51428fb64", + "6ea50d7820cf1c46cfdea8", + "5e81e2ee54fa1c8e9216bf", + "3cdbf096f176a11d399e68", + "1b8c58018b9ec962054ab0", + "292e4d75da1a76fa4eb730", + "23f737b6f1527cfce0303e", + "1f2e34fd7020d08b01b7f2", + "1103bc87eb4e4e572c882c", + "4796fc52e00fbc5d65fc02", + "6ecdfc4db1fa1b0104403a", + "5d780dd5bc1f62ed520130", + "403ccf27d3ff3c3686d654", + "7a42533b0f16560c421482", + "3c52f4c6c583d5b2a18105", + "32e84128c0dfcdebdcfc5e", + "db6d45038525122246c3a", + "7e9e8be590540d41cb48b7", + "4dac5ec68e30db33d790b3", + "4a9951c3005ac4b7d775a5", + "8d7ac16a6c7fb5dcaf362", + "7a7267a5eeee00421b1bd7", + "14b9cf8ea7c2a2aef663e9", + "7a75465db2452d11dbf6bf", + "49da4e6814895f7566132", + "6ac2b95852f2b3848657c4", + "29f43cc681e11325bf172b", + "41d82e9988854950bdb48c", + "6f5834f39b940405114e26", + "754181ae9689816d4fae85", + "394398fcb25e82a48b8d32", + "693e564c43456862d84db1", + "5fa8c4e879ae9ef5c6f178", + "3937d6181e67f43d9bec08", + "4bd73bb75df0b9c8f31e93", + "417a5a771b0fe4694065d", + "47ddc74fced651c57b4d1f", + "7746c161815ab2091d9e21", + "72216a00ebfc9de1e963c8", + "74c5b771dcd8c4719355d3", + "450dcdc45566039112cb21", + "1ffc37c5751a51bd676a97", + "553adfba4c4a6d20491557", + "d65fa4e9fad0f9180af7", + "6151a60a864edd0e7c7b30", + "57a6c26c5e5dea61f133ee", + "39f0a0674e65b2cad4a706", + "29105da153f2a098ad094b", + "c16242d78c3d8fbfddea4", + "235bf7672a2cda1ab01fb3", + "3faddb5ddd2bdc683de72f", + "75964f1abb3f7cc93e9f96", + "62019722b2962f2ad1787f", + "67427f6921fbdb98c3e375", + "2a0c42a5cba7fe55a006e5", + "2bcf3f6e0be988750bc0c3", + "31cc33f2d92bb3dc73372f", + "553e86c66c2fba13b95f56", + "75f53c77a2d34dd51c6882", + "6f8c0ef46d2275dfe7e84f", + "5c1c9591ed7cecac5be504", + "e0fd267f226bcb77b4105", + "1aa73126a375b6cf5e8b5", + "5e4eaaa44cce4760757194", + "a15cce75efaba6c1b571b", + "7f779a7314dbb8bea5c652", + "2359b0102f9a1f774278d", + "20bd84ec27cae248ea38a3", + "38a3fd25a6d9f4f7c85efc", + "2117da386a0ba848e04619", + "6db55a7581d577d97e45ef", + "68437c168764f9b52e36f", + "5574ce6446f5f9b2cb3ade", + "2a8fc7a338bd0e95e61238", + "6dd1e30b456df046e42f20", + "360136af955e5fa1edc1", + "403c97fd7a8e612b101803", + "e8a31983f38b3bc04d83f", + "2fc4119b8d9484cd86a0bd", + "23b23c226ec7148e9ecfd4", + "40f14f4642441c80c723a2", + "255da48e767df6db73178f", + "5f4ee2c7a7d447e781b997", + "4945531dd0d285dff322e3", + "58de9434dcaeb21007cf50", + "4eb92d6051c08bfec28d32", + "46777bd089a8dc8c44ba66", + "155305c9e80b8231f3fea7", + "27e0d5b6d5b01b974468e6", + "3337445fe49877ddd94c8c", + "23ff36317f41cdc69b5f8c", + "5798f45a6d32a5d9e220c4", + "6b1b87bf69d8ba16154459", + "d959366c9d2eed9c988e", + "7914f6f164e20860badddb", + "fca586b3bb595a8d4101", + "68bf1a165a85b17f192a39", + "7b94e69ecfb1ba4bdf42b9", + "363177aa4ad204478f4d2e", + "4ec109ed0d029a0c6bd1c3", + "ccd4be560162041ae08e2", + "3e7a71b985de5c6c7a9f57", + "1dcb001f06c75da3270a59", + "7feefa2c38e3a6212b4cc2", + "58a47971604afebfc2dfe", + "175182c7cd2ce431b0150e", + "1ff2197a0e5b3d0b65c928", + "497b40c11c5d479cab5f20", + "5448bba652328fd63e3ca2", + "748cb85b7df9ca5a82d4a0", + "5b60aca7fe85259aa048ba", + "68bba5659f4f20356a0cad", + "16a2f9f4e53133020d693f", + "75df623177a9cc914a680f", + "dfa61531c98e389318ffc", + "12502410f917e813c566e4", + "385c720d2080ae9544a074", + "15c5021e3387b5104eda39", + "6ed402123cbfe00df8030b", + "4e9e415c8033fbf3989b6d", + "1ead4bf29c5aa1e11118b1", + "3eed8387e5a22f84995caa", + "6207f87b59fc321d1fa8c5", + "5527388c03206dff6a464b", + "232706fb395f1e37b2683d", + "5eacde9e13242553f24977", + "257f0dc17de9e402db5577", + "26c8838f41263334d39302", + "5ed2c798bc4d3df9693b4a", + "59048c7bc400c1b2f055f1", + "60ea199093a4e9f80613b6", + "3fdb397b831af56c0902f1", + "47be6483decbcd32c50b44", + "715687651f6925a41a3bf1", + "5c585a64ca68d89750e9da", + "1f5e885344b51456b2195b", + "5d2602e9c7bafe79929bee", + "25b65fbcf4deba1535165c", + "4bba04cb6f7dfe33e4bd", + "4e1dab19fafdbf4d11123", + "3b79806e60c6443e5b75ae", + "28390f3626b1fdadbcbfd8", + "2ac5b705311ca0e8e6bcda", + "21cbfd5db5cf856bb6980a", + "31340daa6bee66dc702e47", + "4520d49550bf0a2328020f", + "6a91ca9f24a59bd3f77cce", + "590c069f4d458da38448fb", + "4eca5fbd35a4778cd18f80", + "288723d0eb9a25150c0772", + "6bd55e81cea4df6934b8f5", + "684e96f56360b04576ab1f", + "10c2f27dd2e5d8f77a071d", + "78b61404bffa36b135773d", + "9b13c11e290284a86caf", + "415d623b63f929b3ef879f", + "4dd2e16c6f9989907671be", + "72e3a111047449df428c07", + "27c4576460764aabe86ca", + "509ca3fe7eae200044712a", + "1488492f946cb788d721d6", + "5fd2fb0300581c5f59fa7c", + "cae1cd222ac38b9a89a19", + "62a4fc7a9af2d27e92b08f", + "2dd86ec9cb242b4e68016c", + "615326e14c6c74c717def2", + "454b67d8b7470679eeda79", + "359b739ee10f4c4f24e721", + "6714be0beb22d71708c5e6", + "571cc10547604b09ba9b69", + "64981a92737099a91d3794", + "58b898760417610a09ff41", + "5e1c654c63269bdc77fee1", + "37e704706a7967491e3628", + "76a279212b584d95ed2cd0", + "64d1d7c43b00bfc99b8bb2", + "524919eb6636c6c6c14a82", + "4176799b704bfacae7d897", + "2113e1a93f5d2f1cba0377", + "47626057be8af9d92cef74", + "31fcd9e9b87aae6bf32f83", + "2cf0b3c6e55d4f6c794d8f", + "2f36ea2bf51461b1407878", + "2840ecdbeaf847ed4e56fd", + "4dba440f7f398ce0198b25", + "6ef7e0b470470f565c088f", + "58a41d74e16c1b1fb6cbf", + "68b020f430372f0b20817e", + "396792f2585d3e823623df", + "171772c43b172c6f59b4ee", + "35da7f1fc27e6edf7e2774", + "5fe19870cf156902f09ea2", + "4a99080981fd90fd8f202c", + "4fb7ac8e103e64af4c501b", + "32124e45d595b542218cca", + "4cbbf282cb8d5b492509da", + "26e8b6fae1b81184be307f", + "4019e2ed5f4f686e75a334", + "aebf119c49f1f5d4fa77", + "214de8b9e305b92a9ebc6a", + "155503fef8a8a42650f8de", + "4cfa062853643ca21aa8e4", + "210804240b673797c1da0b", + "4499b6e3311b7fe5b9c98e", + "904098cdbfd4389279e30", + "575c81fbd5408f583cec84", + "2cb3e5c4dae6b173319195", + "411254ef95bca10cdc61b9", + "14266a10ce4302dd32d262", + "14a25dabe8f8f9bd2745b5", + "7c2bf4a989b0889ab6c2ee", + "7bb42f21df6b474c926cab", + "4edae7063e31e196fbffc4", + "706df4fd50e1c42994aed3", + "312ecee1519b0617d31186", + "32f8a36cc1b46c25cdcc28", + "6cc9f90d012be002904668", + "69498de156a0aa10a4e2dc", + "6bf558bed09b770ac7b7db", + "45166035762ea541feeea1", + "2bcddd9fb0f98505c98aa9", + "56b71258283af76e7bcfab", + "3349dac2077bfdf6a12d86", + "39450177cdd3980c4efafa", + "4ebe9580f66ecfa62bdae4", + "2d2c322dac49b5fc4277a6", + "63a2efcfe030b5eb3fd526", + "2327087d544749f348c909", + "3d49c943bed92220933501", + "2501ea3eadb12569e01e7e", + "7c2fed1746d715eb95529", + "3adbdefe2bc4d894d3eea5", + "574f9294e066c8fdb761b7", + "69527863032c1ba7d7e238", + "78778c448d7d69eeff19c7", + "63a482d47b34384d6c0abf", + "37120883f03d674fbee3d7", + "46789b05c1e88afd58b2c6", + "62e55ea318373ea102e458", + "7bfe5c12baaa86c60d8117", + "6c065cf636d6bc65762095", + "45109475272b0ee96581b7", + "1b4e22a54398ec5712c2f5", + "c0bc8c55f3b95e521ebf8", + "614224558d52e5d4eb23b8", + "532cc2e0afe1d979c42a70", + "6e48887c0bee3ba8386f63", + "726d30610282ed39d8f203", + "53a902325a9087232d64a1", + "6e72d626e97997cb842159", + "1fa48382ab305e0404adc", + "3d3a2d2ef7d22dc8adb10e", + "59aab11c164124e5cdf604", + "7529b300b4b89c580a5f62", + "206a9c38358f291b01e407", + "47267802b4baf11a616d7b", + "1d50b663f8750fc777a8a9", + "4113025c4b26d50d501a53", + "21e6a33067365b1e718020", + "1e3f1f00ee5c87d8bcc6a5", + "37902c15fea70cc2588984", + "330554538efb3452d928d9", + "eb12a34ffd8e97426aebf", + "7f53a40fb6d59c55fc0a6a", + "2ccc62a5fe0c2d164b78ac", + "3a82f64175d5b3caec9c53", + "676d8d92a92b0706da21e1", + "5c91f707bee21c71c33c34", + "2ab6145578df975521753c", + "6e20ab59697e8bf608ee9d", + "96afde4db924db62eec7", + "2d980e097ecb2ab91b9b92", + "352a1b67a355f38121c462", + "7c3ad9d6ed54817d082b65", + "65e071aa89e8e9caa17f", + "4e4d1094ae9ce9f42b1d71", + "6d82429df8c04f3e8cbdea", + "201a5f031183f9e3136174", + "4b31d20ed3a1f68f117d30", + "309eb70bbb47b20185134f", + "bf1c05f166718be1c6836", + "29dc0e371f2a3ea6cf4d60", + "610a799f5f9443dd8f333", + "7ca0b74cff2de67657aaa1", + "31018337a926110b0a5b91", + "3c066553be4fa2a741db4d", + "194fc13ec819c9e2289cea", + "3c7d066200b6ae5892048a", + "768b4e15703c2b99a95ee7", + "66673b06f4474ab9ac84e3", + "75b60c74c3f4835e0ba3f1", + "282bde17894173789173e7", + "6b386c8a9795cf0b45e160", + "1984882a708094eb26643e", + "7e84a589b79843d0f09d89", + "7f30d40bb0193bcc3bff38", + "1e9e640158c2d5ef405818", + "46f7147d837df6469c39be", + "717a62d953937ab8d63ef4", + "29d27ddd5f46b0a514ec85", + "7f5d5abee4ea627ca346c", + "1ba30d22d8ca0e3412c0e7", + "1b892a6bc6d106036dc210", + "78208a8be2c33504df2573", + "2d92e146c92e5c2141114e", + "65ccc844f43d7740c3bb83", + "6cbec7ee27571943d99309", + "7ab8d7968452d732fc3362", + "51e871e33b066886db1e57", + "70cc62d0a35cccb85972ee", + "7db23dcfd5b48847b2da44", + "38863908f348e0ff24d2ea", + "5f7998cdc984bda089a530", + "593ba411e3481cff090a6e", + "30c01b8abdb9d98a7941dd", + "46861d4c2ab5de181f3e32", + "2f44e6e7eed452c1b02ade", + "31e4383d0d65d0adfc3084", + "44b51755bfc5410d6cfad6", + "2b89a454954d4c6b2e2120", + "7a1817cf8f21c4f863437a", + "1ece2489d9c16fd0d7c093", + "7fd049d0f5d16bca84fbf0", + "284cbec8937114a1728cdb", + "2a6ced30aaeaaa3957eaf", + "41ec16a5c725c7d32d3a8d", + "2c1cf6d476ed98aad97b90", + "715fb02624875de3ce495c", + "3d325eede75d0a573042e2", + "4550a8c9126d63e137546e", + "116c396589d81e0684d5a0", + "48ad93093caf03d61b0aa8", + "29bfa87365d098b3fe8377", + "3e14120ed24ebae50e64ef", + "1924697a3681efc60e8e70", + "1e1de465daadd9547d63fe", + "32c9397c9adff65d943965", + "41ff1be99bebe99b10f273", + "cb351e8f1a28278af3af8", + "5939fc19fad9c14c8917a9", + "634af4f8ff5eecb70f9b3b", + "14b126e3c0b0f4dae2ddfb", + "39bc9fe63b4ca1891dbe7f", + "3b77afb6ec85d92608bbc9", + "6308b8f5574126f70ec3cf", + "2928531ef291fb90d243e3", + "7d43897c9a717ea4ffaf53", + "542f3c6130072ffd145c0a", + "57b79cb347145bcbe43bcf", + "68855602ae559673b8a2dc", + "77f657453333dfbed3c7e5", + "1fb7c568bdffd12b767330", + "abbcfb2e4c3da6b090978", + "36224c16a9190272a21e14", + "47df2e03e1548a16e223be", + "f6c4daf384fb3d39aa985", + "6978fb86dcb4ccc82a3738", + "670c6449f82194e5367c1d", + "75a29d53450973ae07e5b6", + "1a0cc5d78d1da3759fd0fb", + "319945f43efa75c6d6fbd6", + "4a8154e2948099e7b7c4c5", + "2353c3f920ce7af530f96d", + "781973046ae51aa956a060", + "21789b3595bc366315af2", + "4d63e68650d056d4e2cca2", + "6eceb600a9b81fd3aa7175", + "2021e0329a909a39851fe3", + "45d43d697cb8503c85839a", + "7489fd5407cd56abfcfc49", + "57bcb68e1f52791794bf4b", + "71db6b9125d5ab5b3e7493", + "4e72dcffc8f26eb136b7c7", + "890072ab6d3eb608d30ea", + "2f1b9eb8c8ceec3aba8c3f", + "269ad3cfbd18bd255786fd", + "7e18b1dc04cb3af247aa31", + "43cebcc2f248fc1fcbd6b4", + "1b9995439565d095eb8a8c", + "66e2564796168c2d0a015a", + "13c9d1e81de8cbb64a1797", + "657128352843035ba5fee1", + "58c411222783451febdf82", + "2970c6e86dd017c5341ddc", + "7bb1913bf745fa526f18a8", + "4d0a046c7ec4f54117f367", + "36f24af02e5318171bea53", + "9cf05f6855d4068390948", + "1107ffccdffb2932659325", + "2ae1383e51812f870ebf41", + "3aa6d80b7b4477df65330a", + "6cc6a998d40d1bad211cd", + "7d58cee39bf1830f1b3ec0", + "dbd1bb9693e65c5eeef4a", + "4385d494a7bdb154810c4d", + "4a64cce2fc4633dbb63e09", + "3e9654e3940c0f541b93cd", + "1207aa2a4ea7c882b5e76f", + "43bc8bffd5b4fa12491d7c", + "7df66ef2eea696dbe6ad95", + "4e203019ba4b94cd691d60", + "61978b574cf8f6d53118d6", + "14816e04a6b799d1ce9e1e", + "5c699bfc1a98ced38d7c88", + "509dfa92ab81408672391b", + "2025bd13134bf0ca69b0f6", + "675948e6670907b03227ed", + "90bd6d6fef2e358a664bf", + "2f1dd3930a2948f2187f86", + "6336954989b8a716380f64", + "2655fc5da8cafdc10e8c6c", + "be26e79f27c2fffd5718b", + "7568ac37df7da28c47bab9", + "3128342c1cd21185c739db", + "1318f3d7743d8ee4ecfdb2", + "26102582959271955d45bb", + "1118a89d656497538996f2", + "4d74065738715d35d47743", + "2644cda468b716b53c99d1", + "2aec8efef6c41604b67a83", + "76393b1564fa2cd841480e", + "87eada956963224c06418", + "44f34a642236b1e7e4c8fe", + "5edc4541d1854504d071a", + "4a292844d7aa26520c09b1", + "1526a67a2f54717285cebc", + "7decc101d84d7378c8efe2", + "1f8889a7c0321f5279b37a", + "71d26320321cdb1dc925e0", + "b8385ec48f904d72393ba", + "4a2cef4e3606d1b9422334", + "db7255fca12f37c452ffa", + "4374a87512bdcb27925ebe", + "99539a5120bf06fd3edb8", + "4f7806a65676c896ee7db9", + "365cb247c96e7933341e76", + "7964fb4049b23d750b6f0e", + "48cd6ee15c4874d342b21f", + "221728332d3142e3346be", + "198d839621f761dde4f853", + "259839d29faddb791e3548", + "15324434e27844cc4fba51", + "60e351e7834b181d30a00c", + "6337453f9c180b8ddb37c4", + "608a29bc043b54adde90b0", + "4cb0c7462e90f28fa251d", + "b5f14620587f1e8ed5a45", + "3c994e655edabd5cfbe8b8", + "35ebfb3fd5a71979daee0c", + "2a1abd32897155b55014be", + "67d12b5d61741b8623f378", + "21469f9c49fb4d2fb54baa", + "728aa131a37012e184c2b6", + "6f085a8f46a66e79fe4f92", + "1a95aa2ba56c053acf7e56", + "1f1c7eef9d0f99e1e209db", + "5b57bc12988f27dd0ed418", + "5e9464fbce6027257d92c6", + "41be4715ccf6dde8b12086", + "25ff556cf1afefe2cd2ba9", + "59f67a0c66d5e9744004c6", + "23c20aae79c2ffaa75a36c", + "574f95a475dce62a3071ca", + "4a98326f880a44e2d6ea5e", + "39f7a72e1daced6411b1a6", + "37a4477749686070e7e049", + "51524048af5a6750b1955", + "43012f86bfa02bf0033ee9", + "4253e27061630b9343ddfd", + "520db901eb8309582e12a2", + "656f70349417ef562616d7", + "13cc5c5fa7afb2b7468106", + "1916345f1ad90cf48c6472", + "a80defe299bf7c4d81738", + "673a9bc1330de8c0b0abe1", + "226f7d490aa9d47314570", + "4762e175d924ca1dff7d06", + "79ae8d3a65221805ed59d3", + "65838019d10030d2edd34c", + "46d2651ce40dd1fdd11e69", + "4277911fa0e430960db091", + "5370ef9f2399e3c803b5a6", + "69110081782c350722756f", + "be2266f15dfa6e02e4a02", + "7c64411c354fca180b974e", + "3669075c083d3a0547d7ee", + "49212e86ec70f1b328e11a", + "70628248b6cda7311de5ca", + "5593dc730a3a85d6ce77d2", + "4a2416a8cf412f996e9654", + "56f01f51a5be66f649b1d6", + "1c7c6456335bb722881302", + "4f571e68d11ba0c201ec2c", + "2f615de4e96f8f9837947f", + "9cc0a7524feb44aafa989", + "13705ad9594243161047cf", + "358734094106c4c77371f8", + "48384f03b178aecb456dbb", + "336699d6c6f15f6ab914e2", + "5dd2532249188dbe3d2539", + "520d412f22645bfa3f3a33", + "45838fc0d9bd4e814df398", + "5d172643cb569d9b2ab357", + "34470b1eee2f871c42ba71", + "16103ea0d454ef686ebf4d", + "31e4aec6d42e52c762e301", + "217d231f2ea4bf28c97e44", + "15bef1b795296c7e8862d0", + "225461e731f47cbf2cbf5f", + "520f0b6932233966b7bdb1", + "6db3eec1da4e57eacd7cf4", + "5728f13fbf1367c5292a3a", + "7856c391e8828b90a94afe", + "6b36296c1bd668243e920e", + "2f8aa359ac5538f4834ed7", + "208dfefbc938eb8f166f28", + "6506edb4005521bcb61671", + "202377a9328fcb8f661a5d", + "6f4a829757301eb1143585", + "5baffc06fe51f5caa49a4c", + "1c24006c67392d350aebe9", + "a3d31a1daca53878fe695", + "6a3f78db4e25085a772f7a", + "423813f9eb92bfadf14d9a", + "60548a10984139e59f5d8a", + "ee2c219af9300476a7d41", + "6a4862d59f8198b4ea0fd5", + "76d72d56a09f253d257f0e", + "52492b4a4856d777ca0682", + "2dd44a6d1765874cf1dbb4", + "73040349f8459e94069012", + "6c290f053f3f46327ee8ec", + "6d575f1601945a3ca29eb8", + "3aac1aff3b6e14d31a91e7", + "4972dfe88d7e4fb02ffe72", + "5a86321f172c81fbf185ef", + "50b37142bd10ca63ad3866", + "50148cebf8644fa7375aa", + "322164812a5696cb2322b0", + "4303859a49916073987344", + "bac1f8bfa0e63045ec3ea", + "67b770c97867478cc69b37", + "2cd2d00d4262f35754bb13", + "678fb8bf7f6342c5764339", + "656e5b10b9da085176e0e4", + "59dbf0c177e94a664cfe3b", + "1f8b63c5fea99ffd6a5348", + "4debfa77d5d5f3fa106f86", + "147a0d7fc26817e7251ada", + "3f26224827d27901ba392a", + "24364b397921eedc03333e", + "361de61b4e6057d1cb2274", + "14b5583a83133add54d368", + "6ead11e0936e4bb4e855e1", + "30e484fb4ce5927a937373", + "571513666bf5e4e0b1c7c0", + "4be11f1cd60954626093b7", + "775bde6bde2d0aa4187fe7", + "5a1b57c203d09cc8a22696", + "5d5e844e1fd78c36c3341e", + "33b05c78a18798e4462d45", + "624f69e6f91d2b9574cb8", + "172e3a20b269ac416b7186", + "1f08599df3ce28d2e2a99", + "3d50a612150493864e2df9", + "42e82d8613957e0acb2b09", + "50e45902fe1a308ec88670", + "23db937264552bf6dc2858", + "6395a035a6a5e009dcf586", + "23931a4d64503bc81a5a33", + "f6074b1e17e08713a2a46", + "1e604eea4a6fb7804d131c", + "246e8276fd64f7af18402a", + "7fdefc35775213402acc91", + "31f0df7953457ce90524a8", + "731437b69ca76a93992caf", + "3559d5470cc8be88bbee52", + "2a6da3e3f6425cc4caf185", + "384ac895940651e4b3df31", + "20cfa0c6bfbdce5e399a70", + "72f290cf9ea470dcec1318", + "77ae05c9ad4bb1a82ee6f6", + "33f6606f82062475e2caf5", + "373211f704832f37df113f", + "c663e7994203d116af45d", + "25b286320c27c0f91c388", + "2219a8eabaec2cc4da44cf", + "3fa82c77c11ef3ce373a08", + "6c65a41601a28b4854db0b", + "398768a52710b109c92dcd", + "45e67b0777cb6facf28d74", + "21ac3ebe991cfe1bade37d", + "6db9060a2078f4de4b4e1b", + "1f6a141f6eb54cb95d54af", + "68c1092ddd7cea180b7a8a", + "e5d22d0ba9e3194e2337d", + "68075aa010a2a7afcb2078", + "577a2773ebc9e2412cb050", + "1634b76faeb97237505ef4", + "1aadb770481974ec7ba970", + "42a1f9791054781a203d9b", + "7a520385f587099a8da6a1", + "1a88cb781abea4a70cdfa7", + "655b44d3a92231714b14c8", + "651be8b59b15d629ab774a", + "550e4c9178e5dead2f815e", + "ee736adb9b9c1860d483b", + "ceff6274c7b15ae86dcc", + "214d49f3e2681b232cf62e", + "2330589e6c22439bef95d1", + "7e1ce3bec1e98dd35947ed", + "72118d192add3aa4c1e0b6", + "67daf6ba4dc4d74236df77", + "d16f53a28b7042d305524", + "6f52ff1c7f6dba719401b2", + "6ebb0dee9291bd90cd2215", + "78dfe864170ab14a408743", + "601b382825c1515525a19c", + "2e5ffe59b5dd3843fa4c17", + "2bf32012cc6354c709ad2", + "669f3588d7a4ca7ee3dd1f", + "3de21ce46f7c8be3bab3b9", + "432c0a15a9dc31696b79c7", + "349470b19ee7a8cf922b33", + "3c53d6131f8c41d5d7317b", + "5e83dc6dedd0679793feca", + "54c245a123767ef7f22e33", + "563e208513fb23ff9ca7d", + "b512df0270e6ffe2d4a9f", + "b0715d55fe0c1edd9613b", + "c0ecef4f88f5957d4b1b", + "c8806bb60205886d4ff9d", + "32c2902887e1700cd5dddb", + "49d6a78a88159326775c2e", + "56359d56dcb06ea3ab68ec", + "2d794034e6ae324ba7041c", + "64f201a4086e40b2a3a19d", + "7eaf34148ada80711a86fe", + "2142584bb5cff6c1e5011e", + "15060a6e69612092d45768", + "4de3353d33028c5f557394", + "70594464b46de9acc11f02", + "1fc064c4398ccf6bf7b1de", + "51cf9e84f5414c7907e79a", + "71be60f1312db2fcc7f045", + "5fa826fd6352f83c34bb5e", + "62baea1b89700a3953e872", + "4a266217d4534cc588119", + "7bc0acaa724475da5a8a83", + "3d9a1023138b0e9cbe7d70", + "388d8c3c958b6abcbf6aba", + "98079c36403a029b3f0bd", + "72716051b13a2c1876c8ef", + "515a0593d1e619118d226b", + "2a035934ba5fafe2ebaf47", + "316bc661e89aeb9e7e20a6", + "25330fc3e5df50eee77cd4", + "6c8071fad8933706efff6c", + "3669984e1ddcb753afb878", + "4781781ebc739ed9d4e35", + "3915c71f3b447b64ce4513", + "726dd56f61c4c5016201f9", + "7b8ff43621b7fb13c3edd2", + "2bfe7376e8ab62fafbff59", + "207cf80fa76e8708f88dc9", + "3a4a4ac73bb38c0c48aea2", + "52e6bde0fed2ecd82f7bf", + "523ee7b96bbc2b0977b4f", + "551b691726c66f9ec1f9e8", + "361fe28e640ec02ae49613", + "71e1aa5a9aacb38b66f605", + "d427f0f9d14ecf4c54fbd", + "629e9c894bbbebf06d3299", + "37f7d323d5bf332eed1bcd", + "7fcd5bd9328b9f06223a1a", + "744db8f7e25f69bc47f2cb", + "4b0d1ff6297b378945b906", + "7c1d3420db42a6ffd37cef", + "2f8592e02ef759cdd34c72", + "4dac1ce4b87e60431b8a4d", + "451e904c04882b739d233e", + "5bb2eece8c95a515d2e2ea", + "797d4c38129f52836fa5c7", + "5d29345f097e1dc041bc7f", + "6b25878a1ec102b9e883f1", + "610d07557d991d9db3dea7", + "5d3293ca54de6a3aa06b08", + "62e4e44df51bf11734aafc", + "1945686d70d9df98093dd1", + "2c16632a312edfedcc7f72", + "19675db116558d90bb4f6", + "620c14b60053b660420c4b", + "39a26bf8336439ba9968b4", + "376c7a8d0fa0abf4c0bb7c", + "7f2209419e3163fbb4cd8a", + "6aece787aae5251b57b3ae", + "6b380bf5d71fe523ad1e4d", + "2306ed04565a9cf9fa84c2", + "7e37a126be9507ba4c717f", + "67ae2ace35fde529154a8f", + "352d204330140b3786230b", + "6927c4b12865ac8f053dcb", + "7e61e3317d07a1009894dd", + "2768a7a783d9baa4e5cce3", + "260213253056e29f0ac6e3", + "61539cf7b388689e7a260a", + "3d9131aa5802e27a83eb61", + "5f87453deb48ed6c9a1afa", + "418b73330a3b4d1a80474f", + "5cd3a1cc8bf78e4c7e3747", + "784bdef1566f244d4ff44d", + "2c4bac0a0cf06ff50ff71e", + "3608208e4497b40a62b3a0", + "6e8b2732511303a48ef731", + "1ef9edb1f958cdf81fb9d8", + "4bdbd2765933e2b1d70563", + "b2687172956319218655e", + "4f787847feba11bfcbc764", + "49ede33966bc3f0dc8757c", + "12a2fa8c4d06a694b748c6", + "2146fc84389596cf6fa8ca", + "536bfe32ac8da07b253be0", + "773a63e6b7c9e3bec91272", + "6bc6acd592c0200b749e07", + "3d28e1c12f9c60e500dce7", + "5687a42dcd55b43227f657", + "36b36922114363ceb85a26", + "51e267e9a5a7684ebfd343", + "5b4aec35da23a27808974", + "2e684b7951a2526d838fd7", + "62b2e70d411eb11bf0a695", + "6473dbfbe4a3f63d08e3f2", + "661787ba011711628186b7", + "7234cde8ecc6673caf864a", + "1e39f05dac576881e6c295", + "420c1c0074adbe0616df4b", + "177f43e8d62e87c66b9da", + "10fafca3d5f71faff8f1a", + "43dcb4450a256b9a0eb673", + "460372cf36a22fb6b9641e", + "a4d6bd96f61637d730c9c", + "1754f51aa79c3b0803bf00", + "65fe3a22c7d35ad3f875e7", + "150c29ddf5483fb74be06", + "716991a2a17f536244885f", + "475131d01f3e6dc3b169fe", + "569bfe59efe21364bf57e7", + "75ac7a48082d5afa148e7a", + "63f5fe049f46d509d141d8", + "2b90f954efc9f58a07a363", + "39c167fbee27f65e96cc7e", + "1db83df0a168bac450e4f8", + "127118c35aaf80dac2a57", + "20601a054af9d51633fab1", + "728cea43531fbac95263a5", + "ff53eda132c9a3cfecc65", + "786d54b4d5ce74ddde20a8", + "1175d70c2c07855db37245", + "2cfcb08879a9aecacf316e", + "ecef39a1ef4b4d1e8c6dd", + "70357dabf2c34c8309c723", + "4db4f1a602cec485019670", + "735a03f218370f8bd85ee7", + "3c9ecb18a83b901f901704", + "4c7d0db8193430b75f41f5", + "28eb082844c0ed277d2520", + "a3cfbf8b779e15bf28c99", + "624d49c04a48d42d76c466", + "221bb5afe07669d916e136", + "358d745e0bc4be1c3f4586", + "1ce2a05bccecd36df96b64", + "362261ed7c97591714ea9c", + "20f6e36fbf07174b587397", + "12413ef53ba7fc6fb5cd35", + "3dd366ce71f1fed428c326", + "b66201b62ddf6d13c5534", + "3164747c95104338a78b5e", + "5ca6e41b81529e38a59f6d", + "3834a1b7acb0f05d9e53ca", + "3a2f442f3b3a9a2af00b28", + "270dae1c5ccafaa07ae8ff", + "71e916ff79204bdad49695", + "4d43f85ff03e3cd18ef302", + "2a2b13112979d27489208e", + "442eb4a36ab0287728c1d2", + "4dd985f2fef5c539fa6a96", + "522619b83283553c71de74", + "794294f26a938e1caf3c0", + "25d1c185377c3cd8e704a2", + "3e7db1002a9116a5e20032", + "720aa7a7bdeaa025a23a54", + "70f2550983dbddb8957b2d", + "57aede4ca861e5051b15ea", + "52f87910ef7e6dde1f16dc", + "79c75783449d733d93b4a7", + "5186a4a6ce8351b40466bb", + "1208a98ea1dd68a01d3ec8", + "3d66483aa6674adb6569c3", + "728caa6061cb6ff29e6b21", + "3ca90695aca0fd32b28871", + "18eecc5a940548e7c51e57", + "cb8a50376e8204b8b5ea9", + "7731327e4c6ae66c8e47a1", + "16f732c5fac8192629ddb6", + "13b16e69e645c1703bf7c2", + "789addf402241ff646d77d", + "169566a480e42dcc8863ac", + "5ca4bcb81d4d03018b177", + "8ea7f70a71ad46c0c260d", + "4a67b54dcc404423e6b631", + "7b609aae44a59cf088c570", + "59fdfd7775c9750e48d811", + "5738f30e5cb40b4ed83e60", + "78b5c76a3ee8c2ef071fa1", + "2ff21a8761b9bce5f34f74", + "71af54a2496a076b559a6a", + "11f2c34fc87060adca2837", + "4476f33d15e77d3ea6c712", + "1dc0a99973375f6c4a4583", + "5cee3684d600afc7804db0", + "20fe6d6e332154329f831c", + "1b9850e5f0f8fec4d967b8", + "6b5617e9152db554d999bc", + "144303d93b170584849f6c", + "8a006b686db9c86eb0756", + "1d9a776cbeec9f5dec9407", + "503f8d64438b7a99b8de08", + "7b084b907f4fc0301dbd5", + "dea3527d089eceb4c22e3", + "38a39ada5dac01b5c2adf0", + "4cfeaacecd47507ead712a", + "3ff99310762f37d685ca95", + "492683ece46681328f9912", + "27c1b7b41af947101d694d", + "39a95d47cf87d7d7d6bc8e", + "48b438b41e1bc7e58e6ef2", + "7b0ba619013363524f168a", + "557bc3fd4a1a6866c5d19c", + "46ef25878ebd3ab0b864d2", + "70044b2b283269e2d14166", + "47226da695602ab6e77894", + "142fa830b7ba88d08608e3", + "3019d2c9a4a70055fade00", + "6bd645b33c041537bb5186", + "3fc3e580d2ad754a34bc48", + "5e8a5f959be2a17534c9bb", + "5a2cdb29cc6790b45d1f04", + "1c28b93f693054a06fb391", + "242cca5b643a5f97a01a20", + "48a0fd415822566b2ecfbd", + "308ab3a2c4d7f4df4b6a31", + "4566810f52dbdc6e52d908", + "53cf166384d9f967e4ee4a", + "32a9d4d4f421cf83f9237a", + "7f4b55a70795b9d26512fa", + "7222af7c6bff611029c53a", + "718c4a4aea9ee0da236930", + "71b31c9be0276caacd1146", + "4d89a145aa9c4acc9cbc8c", + "26b549a59dc35ee5ea7b82", + "59308e5db85655d5ae0c4", + "2f63eb0fae8122aa717440", + "4346fce81f02878bbc28d6", + "3a0c64739838b20476e0bd", + "389f7a523536bc08e2c52e", + "1a756f67d7e3e663369a04", + "732b807455afe5538cf678", + "421e7c19466e0847ffaea1", + "75aa7d0184dbe8ff376045", + "178e61138a7396d55d224e", + "2a07033e306623cf4e37d", + "25d293607604db30df2e4e", + "1e6b9387cb8fb6494ace9", + "524a00dd634d2f57ac7c6e", + "106fdb273227296116f40a", + "47efddee37fa0ef6a72a47", + "2a17c7297a08a3839ca0e1", + "4c60164f9602341914167c", + "656c647508629462e9a821", + "54e5b2458bb84fd7d4433c", + "15a3be22e80e0f6f498608", + "152b3e507f8b7898991275", + "10cc6c74c4f9fcc9428f7f", + "7e185faaca849a7f135848", + "62ae26dfe2273af99c4830", + "7255e6805e164cf9788cce", + "49b4801e9a2a64a27691d2", + "3fd90efbd4f0a4e173f589", + "4afedaa595cb8c309d3fbf", + "c57749387141da5f8fd27", + "1ba28761d3577e14d38b38", + "10a61010d82426d21109af", + "4d23f5ec809ab5057c2705", + "31e9d0607a42f7e54a8c81", + "37107b083cae132372e4d4", + "16eaf321bf41ee635d6d46", + "44bf623ac807d4c96747f7", + "b720b9f07a6b1f41654e1", + "68705a826f80224f09c337", + "798b816a4dea5ab964c64a", + "2adb843a58d472c17edcb6", + "17c5a39deb46d102235506", + "70c9c69419338ba44d6b8e", + "858c45884b129dd66817a", + "7ffd3daf76b1e818134f24", + "5b509a0106f1d06627c353", + "4d6d3f3602597781bd2ea0", + "4fb33de912dd8d2f8b8081", + "2b7758dc0945a30687fabe", + "38271b1467ee062bfe15c1", + "1d41ed28d87d24620da24", + "5b80c6e1a5c4dcb3166335", + "560e1e8aafcab315236068", + "31204f9f1e25342bbe28db", + "35d63c19d36b85b5e96648", + "38aafca45b266dbeef6fc5", + "426b930b670412d271a091", + "59f2c50a64b0c2a3e77442", + "7cb4b7b324b314195807c8", + "4a1381ccb93c34dc44cab", + "14da57f8c43c94d5133d50", + "499a1abb2a1381278175e6", + "6334fc3ff70d17dd837781", + "6717c0177a36454aef446a", + "7bd177160999a650655c6e", + "2acc282877d9cac38e38c3", + "18b021fe09fa8bdc44e567", + "45638582a87d07b0339df2", + "664ad54353749f2ad36105", + "5c53790457f0f66baaae2f", + "1edb6eab35de11d4922150", + "38c3b4008c9d0442e7b602", + "76dcede51c5087d374b20d", + "1901320882ec0093fcda5d", + "68f5ab17da1cc5dda22c36", + "4e4199871aec7ec1f99895", + "68d4b88b77dfae0da7a5d", + "a4f6b861d9a460f5b65a6", + "f7cdb22a187815c33c5e0", + "7b398d970ad745817bcb61", + "2e061928a5c3ad9bd6d9be", + "5be7c40d96f7c97153eaba", + "21887a11425a371d17db86", + "2cc7417260782c0d2394d3", + "6b421c0667b336723fc0a1", + "1d78f3d7e887debfa04bf3", + "1d165ccd9ac1e4efca4a32", + "163690a8fd51b113410cc0", + "419d9a35dec3e5f421baef", + "215c7e9a1d796b37a56336", + "541a69af40655a83e366ca", + "3f98705d2cf6346bf00972", + "4ba668ebddeaa069043875", + "2aad9e8261535baeb20b71", + "6766e290c73bba54bcc710", + "65118f1b7c366a8bbffcb8", + "7d88a8aadc667bc60fcb2e", + "16d8ad198832545831c93f", + "567508a3d2a7b4fe3b395b", + "3282cc1545c9e77ce08abd", + "57d0cd94e03404b9cc57cb", + "14f23f2aade2de50fb350d", + "280bf57e6ab95037683d33", + "15db077682cfbf170ce259", + "2e1709b850c77f2d508334", + "34ddcae84938327a3cbc30", + "ba357a389bca1484d7e54", + "bc149e667cbe5a17ed77d", + "25032025485a4979b90394", + "467db4fe225847525ef33f", + "54112eabbed42ad31637c5", + "14b68001dbf2f798322812", + "7146b897c3d924725bd0cb", + "6a76e3eb445dada83ceb12", + "30abf45ef025352e681192", + "2f687a83227d2d20f3b227", + "186605e063004c7e4a9375", + "21ba4c5acd17d59fca0ed6", + "2cad73640590abfa319b6a", + "5db729c46c687ddd7690e6", + "73673685484b4f3492976d", + "282a80b8de04941c547168", + "4b53718060040e8179d82", + "5d50e00035655b4d4ddcb7", + "546ec9785ee72a2a72d886", + "4328d17f00529ea0fead97", + "71faf2ef0654e97e0c23fb", + "49374e550d8b335cb151d2", + "42772160e3ea402851c9c6", + "c1fd8fe80d24243e7b5eb", + "111d6b945ff69be530cfca", + "2dd21df4dbce295378bd06", + "3d8509040aa8739f034dac", + "68d439e82561e55cbf1eed", + "65a1f7025bafea5088145c", + "5f70485b00138272e9a41b", + "48ede8d4a9a88f7613388e", + "1de402b5c6118ec8861aad", + "50f371336a648ade74999b", + "17da7c01f870089371d6df", + "2f64ac4f819f8343111866", + "648ea8b083a9828f8af17f", + "28d6cf3e20845dc7283634", + "7dfd6cbe22024260a179ef", + "65ab167d8e02a8df26439e", + "79d07c6a6298d34020dfe7", + "55407685456c2cb8311d26", + "413278937e6487a988805d", + "168ebadbade1cbc44496d4", + "7d6f33ec4a123fa281cabb", + "59bc93698864451646a053", + "4d1a8b95ded29dc79fd401", + "21b466e3230d809af7aa6b", + "35fa1fca985387fb7fcd19", + "1a789636807476ba5bd789", + "7b115c7c405c6e4356bac1", + "378ef780c4d32c3f15b3c3", + "23dfbd70bcc040f36d4c8d", + "6a545ca829ed278f6ee7f4", + "c06cc01bfe2a9b427102e", + "126dab6c2bfc9b83475847", + "15bf0eb485af1135b0e453", + "3b929cf6fdabeb45375120", + "11c773ac555182d789142c", + "444a50dba1a2bf390bea1e", + "1976a9fa25af6d21cad47a", + "2f88b1c87d7d02f6c2614d", + "7fa540fb3906a29b513bed", + "2b23443976252ed21088d1", + "5d9383670de64bf15eb49b", + "1540f88099c93111d6c8cd", + "2c33c53227ef5693d69f36", + "2648a635c5981b8daca07d", + "7b71ed8d456ee35292c960", + "62c36a3627b9d2b3c18de1", + "3e985c35adacaa90f5715b", + "7401d0da6ddc33225bec4e", + "740f62900b9523de37b6b0", + "3aaa2c73e60edc333c904d", + "35accc5a1e3fb474285daa", + "1d85b86a2f3f20e2832ec7", + "6dddda58fac4e8afe0c9e7", + "2fd82a7276af1cf8b372ed", + "9377e0e5c8d0de1856f6c", + "75266a81bf7f77865e6f", + "1de1227159008ec9b59ac1", + "1b5200adee3adf189b056e", + "4d8b0cd0d3401fd04e351", + "438e5a19094bce43b5b5ae", + "6f339aa4d977875b1f1f80", + "297ac1b2d19eb1e6e32d87", + "638d0229863032ef249643", + "65c9be7a29bf45e5992a7e", + "7dcf3e6b7d3d02033c946d", + "6565aab9eaab16f7430411", + "374a0e75bc76f0adac7af5", + "8649a3995ad114bb4d72f", + "45f5960a9db06a62821bf0", + "36735381ceff20a76e32eb", + "1416e580fa8bcb421dc6ae", + "64f00973a0eb117b548182", + "7507998b275e3c9bd4e10e", + "305213c4b30a9e8be153ce", + "233860a2ed2d566e131431", + "235809998758cf7e4acb1c", + "2102dede4011c5cfefb7eb", + "79486109c44990eca52723", + "43b23b71c3202b31d91018", + "63606d420b8e8397875647", + "697396e6df9539532709dc", + "581eb843dc9919f85a6644", + "3b98704f287b0ee4e659aa", + "3886dff828cc76dd830466", + "1c9f86b8742e14b6caf79b", + "bafe681e7e52073b86d32", + "1a5853834033d093c63d55", + "736d05572fd4ef85eca2b1", + "61170002cc409ddc34946c", + "5fc3c4b7f7ad5deab829bf", + "4597c1546c899a3656689", + "6667dbaf666f92bd61da79", + "a2e07f9d73c5e3effd370", + "63942ffcaaae948e9056c4", + "6a7db7fb47d3a18b620d6", + "58b95d74eb4e654735bebc", + "78a4c0445f77f31209ed17", + "7203cc213679d179eabc35", + "22884c181cdc222cad8e5c", + "7f8bc7233e2784039454db", + "aa2cbd696160321682a6c", + "4356ada1ada2921353892", + "72f7dab0b2d2a35e62478a", + "32e5682bfa3fd95762512b", + "77da1b5a2124b6c9e11847", + "593c091517fff61973996a", + "264e4b26d39119bcdc0985", + "fa33fcce55fe6a32e0915", + "127c199cd032273073f003", + "169665894aa2b356779b61", + "9dfe57d1a9a3265476d14", + "364f70dfdbb439b78e5236", + "54fb5f18b6d001ef7be401", + "321e3fdbb0b890caadc570", + "64532524c99ecb3c365a41", + "aa480c5cc76379e0cd2de", + "6ac2b70efaf88fd42c4044", + "6810dd5945e01cd2c90841", + "10aab6ed7d1b631aa4b45b", + "19537a8ee281cd28d6388e", + "5ba2a8023e5bb50b06e03", + "646ce329dbe03b0b8312de", + "4f0024b5b5580d91de0338", + "2b4b238bbabe3c70748eff", + "3bec30574a99903f587887", + "24e71c2d01e956269446cd", + "68c4a816c641b5b1090781", + "6fd170c2ab312a1f05d814", + "64d8389dc8d1b8910fc0a", + "4807e0d9a38d358d8e14c5", + "14ee39af97cd5a57b0e17c", + "24974593a8d59a89588659", + "59a7f220e101601c1d1b21", + "43fea0cf26a3e256438525", + "2b3c80a17ef583b6205fd4", + "44741cea6d95eb07e7f01d", + "2ccb45ece6ec9abb9396c7", + "5ba0eb3a703d0e42cf4094", + "400f76e25d392f347d4911", + "419e79b02e607a42e6e091", + "36c0bf9a937fe6ca772d0d", + "2244b09bebeaafafb0c481", + "1501743c447af65014399b", + "2791e42c7f90ab8d4e7fbc", + "150365cfcc4a012a673c13", + "7869636f37e63a4ffff7cd", + "211dcdb529a6bab73ad8a6", + "239309f551f303d0037140", + "3f1e6a84c6b836f245c178", + "27b94ffb61590cd0bcd89f", + "61ade8e7a0bcc40ee4c2a8", + "750f475708a1369e3fcc26", + "30bed73f7a94de9252a38c", + "3e26ac2b23b8b913845e11", + "42aa10dc273607be680d72", + "65a0cb312051f321a95f5d", + "1ae82d51e4845bef8c5d14", + "37c6007c4a0d223bec9e13", + "4f140e806dac75cc67fa3c", + "78acf4423afa2cfe1a6fc1", + "3915d17a2935e69936525d", + "7fdd8bd273e4a717226cc", + "15da282cec1859a9591ab9", + "75d3c5c33e5a2023adfd4a", + "51890cd139740ee3c35339", + "2b514798a553e5bdcd8ec1", + "722f9dc13384479d1c4455", + "1e2bd3f41ae5c299bb720f", + "5ab5c85d4bf835440ff962", + "178cb915d7350e37948956", + "184e317201ff0ac25eb6e6", + "37755ea728b820f0ab2bdf", + "5e147628ce9e9a9493f495", + "79790e81fd0d2b63f9d1b9", + "7252d249ce8cd4fb010950", + "d165a455f92b5083e0627", + "6354a865e088a0488f2701", + "43c2ec8afca87567ee9294", + "55744f373c8b8520d62370", + "63069f756c8115e5fc4c52", + "3f5c0a52d2b564cc250982", + "6b828169b3ba13bbcddb05", + "46a78cc83c010019e8b2b", + "27c6ad85e824da21b1cf9d", + "6e9f47f009d809f84a56da", + "255358696f5e9ddbfa467c", + "738abcc274fbdc4ab5efd7", + "70b9ea82f6a6c02939510c", + "5f24e71937dd097c0e8678", + "41e1bc8a63d042ba714c97", + "6da26efc24e2d57c26c090", + "575d4696bb0e4edef99446", + "4c028ddef259fa2c7d4868", + "33525d5afa91fda7d5fea5", + "49a3641c16382337f3c777", + "760b4f231686ca10ea6ea9", + "547264d2566596f18bbb5a", + "703a6cf857e651748dc09a", + "298200a0909b55e97005f2", + "5ccbc128a5721a5dd853eb", + "33d5a814c00e980600811f", + "5d66f0d9dde7339dbcd24", + "5ef30e941639d08bff19c4", + "363a65fc59f4a8184d3d78", + "366546b3844bf45b7527a5", + "18bc8168956ccd63ac68a1", + "83bfa3efcf5b970ad41cd", + "4bc9c371d07d4a025a739b", + "4636e2935765905adcc41b", + "4d08f00a99d95d0043cc4", + "3e94b32e50da81bb5afc03", + "48a13c03c03191471f1164", + "3018be3223f82c7f0c9ebe", + "185254fa056de9af1a6bd2", + "1fe069b8c57a9fbe5f6009", + "6c03f094dfe48c9743be89", + "1086eae159340e441fa0a4", + "222ea07afe042cf765ce5f", + "7754a6a5fe6be54c00f4c8", + "152dc9fc63d3c1eb6c335f", + "3f3aeb0a1df198d9c95768", + "7ef4c5361ca08ac1cb6216", + "527e969f4f6eefe6289ece", + "6b105359a1a68d94862411", + "2674d42d16e97493518d2", + "369c62fe5aafda2a550912", + "51eb860c87e1e5b70bb623", + "29f3402339c3128a1e2c1", + "413f256a64feb56e242e90", + "11ea8c21342ce42ebbf9ec", + "5517c01ca3bd4da9aef0ad", + "5d2972b12e50e727a2721d", + "4eac7fa0d6b168c3bec4e3", + "5cd8f5f9eb6806f67db613", + "412ae12837a29724832877", + "770b83b55e13465063e5a", + "76201f5e0110544f41d9be", + "c8918a059fa77676f0587", + "287593985c21589f72c821", + "6b923e02dfb1da62f37204", + "2600c04d980b2307982b22", + "25f7e1ac0d4153b6365c1c", + "484281d930b8ee32f366f0", + "3827eb26c007235c46c676", + "6cd2d14ecc5fc7c2c1b52f", + "4f0841f63a0c64aad5232e", + "77c4b593ec648025df03f6", + "81dc886feeee4945edceb", + "522afb743f67b3ca56b20", + "5505b22d0ddba48ae2020b", + "2f3b362f4b742eb82f8a34", + "1c7831e5dec267ccb26741", + "2ddac7db8be22e88618b58", + "4e6a2eb425fbd18fb02cb2", + "147b65e0e829ca30fd88c2", + "36304be3f0777300703af", + "215dcfa076749277897e0", + "3c2f54ef99be42fe30d32d", + "62a01fb38e5c88098fbcc9", + "5f84ae1685459ae7e24bf2", + "3ecd8205beb790946eaa8f", + "5ba344fee845769c2c86d8", + "36a92b305c21171dd5a616", + "3650c22d9c1072238cfcfe", + "9225712405a5bd9ade58d", + "594ae94ad86b9a719f54a7", + "59f0f5465ff1e16be9bfb2", + "4c6a0f6de7e50ac450c0c3", + "685afb7cdd699d5a8f020e", + "4f1c406e243fb2af67cd42", + "2dac9d433ff98cf24eae81", + "1167717f2d3d6238b3d21d", + "381012de4c9a82f9ef1d72", + "7047a4510b8c2107737ece", + "185033e62f44aa85a7799b", + "41e135572f9ce788481248", + "4759751a101953dd340d89", + "34d59de432c0dbb24ae55b", + "5bcd4418d37c976110b37c", + "6545cb112ea4be72bc80f7", + "52d104741cfa5fa49fa55e", + "7322c20a545b3845b54b34", + "783c78a9025283e7188a8b", + "3c81a9658bae42644c317a", + "1eb56fdccfc12b22db2048", + "3c3f770d148b4692e25b59", + "4f75e255d88657b2ba4755", + "260d6ba9444df4b85dfb92", + "34f0f61d6d8d062b6b9d9b", + "74fc1bfd19b3cbc9867bff", + "3f0d18b1efb7248950daeb", + "65b7b50446c767e6fa72fe", + "1124cfa0e070cf6fe3c638", + "2d127e6ce6bd0f1872b1", + "3fdb99cce8884ed923271f", + "2d2a15867cf9361defac4f", + "9a39acfeb3a1b4c2bc79c", + "7adeede80a05e40854e6e", + "4431184365a358de692057", + "1e4fdc54209c2229d7ffcb", + "50cfa48cfb994ab2b77aa3", + "1f4b918e0e0d47c89aa2d8", + "78ba33e419cbc7f177437f", + "5f7482c17a568566c785c9", + "6fff35974d5f0b86faa46a", + "5106bba99e6268d7bef3e4", + "67cb80a136db30b9d60d6f", + "594a3b6273b1ed2b542eaa", + "6a1d554c48496d8d543eac", + "9d8d18a72607c311d6f76", + "7047889925ed18a885358a", + "283508a2ed137e839b2207", + "65fb4589487aa5a16bd767", + "1a14d5b10cbcbb9ad3216", + "4a469bacdcaf5434109262", + "40ebb7bac65bd815945e49", + "7b2ef1bbf74c4989ed5ddc", + "5ca51c82df4def8b1588cf", + "3b22ed42f28069f29c280b", + "669e7a28f7a7c30460a80a", + "2071c913edfd4fd6daa6bc", + "3828df7e9ab6753fb83dc1", + "4cd15a66ba5a2f18c8823c", + "1ac96b01993da8677b2fd7", + "4f9634be1ae125361bd4c2", + "681fcdfe60f23e3be083f6", + "2d5bb2b553d4ed5bc0795d", + "4c4424602626193266d943", + "2df30214a49a31c21380ef", + "48b920d23514d06befaf52", + "4b4c7f0a822537ff62cdcd", + "ee9d6b69f13ec8f385e6f", + "793fd256b009d961487499", + "2d70f946f2915679b314e6", + "1bc4e87c1100a2d26aeff3", + "6b1cbac9279eaab9b503c4", + "5725842b7246179896a39d", + "4dcc6ee20983f0020ad69", + "57dbda5c8b230a87030357", + "78c437adc3b6ce946cdd", + "20ea7b335b7621642b29a6", + "179d4134709978c75bf6d2", + "36a3336f56c91232544e8c", + "e243f28e043030ee3a43f", + "2d678e77df571d7ac4859d", + "5566a844e8b1c572f69612", + "27244290f774a00786ca95", + "1812bd60b720f8920fe80d", + "7f45c48d28fd31ceeb3fd7", + "1bea5758655f1400515db4", + "249b7a4d080be0f548cabd", + "71215d6fd5e662d930a424", + "7684536a92d49a5af59f1a", + "74d39a89d87bdaa449438c", + "3e4e77e268fb6e7602e96c", + "46c6313b3914ecd376b959", + "31b9dd76b9ed5f88dd4609", + "46734211b970f8a6448a60", + "7a6d5b1013830761b58026", + "6157a651f2640a73f1f90", + "38793daa7aa086d5e70798", + "58d7de0f8254a81b5d0f5a", + "5a1fe9fffdaa20f4ab7eae", + "7e8fbf173741aea1b95c93", + "4bee7e482b290b1d3869be", + "c075fe6224a62c1010fb8", + "7340d7daed67bcc5cd4391", + "2e12097225e5783b545083", + "518711fe03b241cfb95160", + "4956721f6a2ced1fc736fe", + "636b15a893c301ff23f5f5", + "5696a96208101739ec4ba0", + "54fc920cc0125e53a92499", + "7c2e242ec2b95580a9b3bf", + "4d0e82bdf34ff4cb3a603e", + "786571b85b2768309c8ed2", + "1418facce22bf24a5e6a51", + "681a88fafe4e6f0620910", + "5e263af53ea065e044720d", + "1c614cf9a9d87d69154c21", + "346f2a2b086e1b35095d7e", + "4b6ed31d0715952774511", + "67a3f20bb5e980364816b9", + "339dd42a42d94342bf8399", + "3b55da90ad9a162be1756", + "1c07c875b3a9cdedf7611d", + "33567e972c90754c86a5ff", + "3ee5a2cc90e335867f0ce8", + "4b3a8d22fdb2c83abba9b9", + "5b6b96beb19fb0dbada937", + "5169af1cd74986160450d0", + "724f8bcd40bfc9f1ca0c68", + "51603bcc8667777e664f9d", + "78aded63d2f85ac948c449", + "73862de61086c1fd5e0678", + "5efbbe073364ace07f02c7", + "144a6c20d0a8d5dce2b12b", + "2aead0dac004faa8ab67e4", + "3f8cb5eb229acba822b48d", + "34c50fc58872b7325366", + "3c1fd5d9a6223b2ce7b02a", + "554f5cfd133bac2188241d", + "559752d946b02da4c2f657", + "3950591be73642bfa23264", + "2e8edc0b6dfcfb2392ce87", + "4c3c570182916f32a6f96c", + "65cf5014ab215afd17cef7", + "54ad7fa69dfd0b4c19f7ed", + "f4af5a6143d8f44e48afc", + "1a08e273719d3411178252", + "668b9e16f3948f582a5b94", + "3fac097802d8f5fb376d58", + "3c2dca32abbdc029f4a212", + "753f0795048443573283b2", + "622b540293b1275c5a9446", + "5a2c8ca58cb488822e9f49", + "295932427e10aface718fb", + "43e36b6d5a937387b49f6c", + "4e1162d634d0d5811a2441", + "19915afea85d27cf8df109", + "7eb8dfe838ec5ef9d3ee21", + "2c18c59d95a21961c42f21", + "7233f4136f3ace41bedb12", + "142c59f31fc82fb58a7dd5", + "452816c1b54aa2bfddcc17", + "6f24ffc802a08273be511b", + "32d68fc9b8a9c17b315382", + "5aaabbd40fa78dd417edf5", + "51d8b3e6fa0afa106abc40", + "394faf6069c716fcf8a76c", + "3f7d2ee6cb32c6bbeee194", + "4354f51efc9392bcd6e51d", + "5e73615c65ae9e74eb1ef3", + "761e42e1c908c2f09e096a", + "25df9f831698604e15991c", + "351db0dca5d74808f36d33", + "aef2488954588af921ab8", + "296a247b4b36d5c2a1884f", + "b1fe15d9ac88348f41a87", + "97342eefdbc78b9689120", + "1e47a4330f0bce93db13fd", + "7511506751237c1959933c", + "31e8a39712fb3a7a11f909", + "6116bef6a79fb2fc15f0e2", + "6d849a39e47370e473a913", + "42a81f5e10b5435180e643", + "17715e6c96cbe096c4f9c2", + "606e14eaa7d60eb7ea925a", + "30cb89652c8629b5e0dcc3", + "2625096534f2cf10d83a26", + "61036fcac29b84e5ca02ad", + "4669a41d4e444c1284d024", + "2b81c6e67e55aeb6e93a", + "23564d97f447b0091e74ce", + "494807a247f7ffab73a644", + "692eeb4ff69b42372517d7", + "3eda92314bf1d09cb5b08", + "24b22771f303ef742b8ce1", + "5c616b0d1a7bc591e70e46", + "4aad58987821ba8f33d96e", + "10d0aa100248920b9cab77", + "1ead89a48b89a75ebaa7d8", + "7fe887d8c5fb53af79cbd6", + "ab8e1dd4d27b02d09fe48", + "2294095a6b77aaa416cbd7", + "69fecb55ba6da700789d7c", + "681750fd18618072db2068", + "30a18088f5b2af396bbfd9", + "2e03d3c0794703b9605de0", + "f26a2dc235ace7b34f4b6", + "356497a9675898bccf4e79", + "3286bf159405584d85567c", + "464550e0adf269403f3e22", + "3f603c7b410b4c2db2c8e2", + "445381f98a1f5669880827", + "23eabb9cc5f4086c74bc31", + "4628eb872cffa1868b96ee", + "6ac77b7cb23565518aa2d4", + "1cfd8f0d12bcce21589c11", + "39cdc5e6675ab081ffe60b", + "1e378fb7157cdaa6fc3a50", + "669f4c5ec3934953500b78", + "46a91d898168488fd5ac51", + "64add9cabf8efdd5f7b57b", + "45813314ca1d165bcf242c", + "6f37e3a85128974cdfaa69", + "7f42b66317d26c3f938805", + "181ee17c34ab8aea52c900", + "68e8a818d524954278bbf6", + "7a6ffa939b86786a779a44", + "31d809b078cdefaaf45266", + "7f216769148f0e997c7805", + "3a82369bb1a4da519bbd70", + "25920b5c96127e9d8ab05e", + "29702fc1f57fddc3369967", + "616dbeafd6aa623c1a7d7e", + "634d2540fd670a82f219a5", + "3d9abe3ec82d9602d9dd6b", + "665bc65420c0b0a151c97e", + "37d50d7838efaf03049cd7", + "385f7f48a7be6b46d108ef", + "5f2bc99aad2f27cdee05f4", + "3b6b43619a3730d5995ae4", + "5eb76c6301d8a849a1903f", + "38910d873da8dfd237e8f0", + "41558cae58d4f9a9001b87", + "58fc1b58696f8c22cfe344", + "64520e4823f48c1f48749a", + "3827b84269040363e5e02d", + "6c9c81ea487986867245b8", + "217bd444ac8e9808b3ae5a", + "44dd70b9323f17568e4ba3", + "50226b4aa22a0465ceea0c", + "6335fb7682400180e10d15", + "1857324131e535b1b2458f", + "3845bd22f959dda9197376", + "4d7797e0b2f77a7ffee785", + "16bed27a9c005817ccf111", + "5bf1d1c71be0c49ad75d9a", + "6d16d10feb1728044f2dc3", + "3abbf8af06f889daf59c4d", + "45769a307f5593bbf72056", + "2a640efe463008db4ed634", + "57f0f7ecb2d7dad43748ee", + "8000000000000000080000", + "7aa96a9fbe718c006a48f8", + "24086a392ab75e649d3cc1", + "9f20b6fedc099ec575691", + "313d62eb5f1104de5421a", + "438f5c0f163a4dfa04e5ce", + "63137369b8d47b6c9c43df", + "4ceae8c6ea35dc274647ed", + "465f3b1e25cde0e446d90d", + "9f0c9a93eecf4de349628", + "3addce3c43218484acf509", + "101d83882a81d0147b4342", + "4585b77fea18a0113ff609", + "73e92ea015629e3728aee0", + "257564a39a648e17d015e9", + "2f927b360b2b43bff822dc", + "328a9932d6b08a41a1df0e", + "207ff6a0da7f13b316c4b0", + "4b11585991700c233f6773", + "77664e53908d00007d1205", + "434a5edb31a9c3c6a0243e", + "692adfabb87ce969422961", + "3eb189e2bfcbe180703cfd", + "367efb55edcaadbb5e4f2b", + "4573a56ada0a29d31dd6b4", + "636f015a0c62753b283d5e", + "158e9251ef94651015ecc3", + "ca30526530b6f6f0c8fca", + "20b1838f00aa00d07f70fc", + "50c65d8772a3d5db269535", + "47262fa06b9c5ac8138f4f", + "d4a270719a348af6d6c29", + "af99b9d024438cfe9df66", + "2a5043ae183d338b7ebd55", + "7b85e0b99eff408f2aa978", + "282774a1f4bcb14e6723f9", + "58137399c99866772aed9a", + "7b7e71610f1589da383c31", + "1705c133c7ba24a2b5c528", + "336a41277b427813eaa191", + "78ec94c22ee912eded5499", + "1f9e8bffcac3e1471f7cd6", + "7e688d1cbe7e0a84a0f408", + "50a70d2086b5ca78a90368", + "16f5569ecf073acc30831d", + "720d9e52c4aea85ae24480", + "15bc81dd36a0393963bb64", + "633dad9eec0d451652bf40", + "3d433adb4bcd914fcfc4", + "ae1614cb7437dc6311ee9", + "504e8f5ee0e51320af92dc", + "4d55039bf17366425f055a", + "2ad535a50fda15e1835526", + "4f5cb9e29c3567f8c1b22b", + "409705e5654888d8af2f47", + "145ecffc8b532b7855ca8a", + "4a79a4d35e92cbac8fe0c0", + "7c2eeaa3b5ac7ca26ee5f2", + "b44a774aaac3d4d335389", + "488702c5b90021b8b24933", + "62d4635d0bbd6bf8fab17b", + "47a6912faf0eba695a3f82", + "5fea5590381b705c4ba54c", + "552dab94d8fab803e3abe6", + "622e4bcd237f601b3f864e", + "6b6195f4939abc517ea1fa", + "7ae4ce9746d1a251afde2", + "5411d9720f633bf7a356ea", + "93d0f45c8e78eed19b2b4", + "2cfe955ebd8c7e4615715c", + "4680ebb5e7e7fa1e676838", + "1cbb8749de080f5bb23b75", + "33fee942f43e9b7d2118f", + "4ef1c6a1bd63bb6b6207b1", + "1c1f24204ec4b044c10ff5", + "3561d1a2752f1d17dd5823", + "782fa87576f745d6c5a644", + "68d895a65569cf3ef3e3ea", + "46c01f4170feea6c601e12", + "7b8a17b08fccb33f4b7d6f", + "6332e8b1655b1a7193eb45", + "6649997ef28c919c6cae0f", + "55b727631edd20582945d2", + "1adfa664cf45ca975af0f8", + "34ca1ca17d4004b63727d1", + "46bc16d9041c2bda07b158", + "31afe414b9e841f105214d", + "4bc252b0fa653478344f1f", + "44b0628f84b11c5e71888", + "7f821b6d896942293448e9", + "125c7d70d2b6d99ae885da", + "49fee8b58237dc40ba3c5b", + "5dce9f322e405cdd3dc195", + "4e5afb2e233daef8a9bbcb", + "64e35a2939773b306ebb74", + "3cf63e3a65a7e509ca6dd4", + "1f88577ebb6a87d8478dfc", + "5d1cdedac3c1f047923b22", + "14b8d711e9732dc1d81b85", + "63ca1ec0700483b8f859e5", + "345343979af3beadfaced5", + "3aa36ece405e3ccd9341ca", + "5c37d517c640ac7f62a532", + "68e1a6376fdb4eb7b4b0e6", + "69a00aca76ae6e660be7bb", + "1644cc3e7fe80220ef2f70", + "58689766e836a562c78c53", + "2d83b4eaa1c8f768e56c30", + "11ff8e8d5e956398c99ca4", + "66de0cd9d504d0c8a10caa", + "f5d2bac49777fc8f10242", + "30436781bd712f316b4895", + "7a7cdf214176b6d3191883", + "64f3d838badcddd9bfdd0e", + "190017f50befaddece16d2", + "21a95826890e5cccb8a83e", + "2c958c952c5c886c2a60ad", + "3f8ccc4c495c412c1876e1", + "901282766f87bc24e50af", + "67fe63e894b36bad057249", + "35ab264ca762acbf67e1de", + "65b1a43ebc40ff17757bfe", + "1e0b5aa4ebf1898b7232a8", + "5a3548ae1dc271964cafb9", + "26e45399ef9d09b479c0d5", + "ff910ecf2ce1ed443b3a7", + "15dc7895737fd27e2fc2d8", + "306cc735643548c81d480", + "716be1338eb9fa3160de8a", + "37c639bab06813135e6962", + "18d28f7c13bdb1a27fc315", + "48dd5aa0d80d3fd4d31225", + "308d7af9cf09073e61779f", + "659ccea55ad34dab51a321", + "25f3d9fd234440b97c9821", + "5c0de6f6c164f44c52de84", + "30927374f464c892c53b50", + "540974d1b3361c5ccd3a2", + "a0b14921f2ca115669309", + "157e5726ec48e98ea5652c", + "7c50148337071a44808f27", + "54f01285acb2da9689a386", + "569b68c3d77231282d1705", + "7593ab2f13aa524b76e104", + "16a7968fcf87b51aa207b", + "2b1199cb9ff7848ec581", + "235057c5ef06d64b0093a1", + "3ad2c2000ee1db409ffcab", + "46dbd89f4ae0d06c0ab8e0", + "7fe713df2e65b878c1edc6", + "4f0b0a9e8338cbca398b3f", + "67ae16da8f876a2c8dc80f", + "1bff1788b61c434292f278", + "137786296b1e5f466871bf", + "413062fa329dcbe3b8887d", + "76a4bcdffe1207b9c84c3", + "394ca6d6650a3a703c8f0", + "7ec0ec060d3788349445a5", + "5e6c438c53b4bfbeab6a4c", + "1cae4d5a0b88eed0b2d97e", + "37150fd6c06a98e84f0fb9", + "5e5c9c54f1f75bcc98d1bd", + "7273cb20026d3e5dfa9567", + "23675569b6f74cecec658", + "4d84d472f48a1f27cda4fd", + "52e4d0f780530e040b8198", + "116822d6715118a8643140", + "2fb2d651d1a5fde2dc4d89", + "2cbb69d06f0ba3051ce433", + "982362cb3f64fc2535f18", + "ce584760ca84047b25a4f", + "3d32a6b665f10a829cfff8", + "228eebf60c055615805405", + "4adc76f7cd88044421953e", + "4f588ef825e26e596e160c", + "464063c0e0f5e5eae1bad1", + "231a1fa6a52f8377b2ca86", + "3b663e3e9013cab9326fc5", + "24716274d6f1761a2e503e", + "5eb0e751f365585e4f3fd3", + "1c63d031374620336f8c7a", + "6ac96f98fa78ffb692afd9", + "71f7ff7f6245492bf4ba4d", + "46b7638024bbab6f336734", + "2d3b2e3d52eac5c09743f7", + "2bf0a5cc2a5150523d2e64", + "1f7e1880120c76703199fa", + "27b48290f4bc222f54681d", + "274cbe37d4fe65732936f", + "5b872486f12a68a939069d", + "76c344db7c98c1b1fa25d1", + "6745627963b760ee39ad1a", + "2d30342ea20393b89b038b", + "51e2ff830fcf99b4147ec", + "764156f5d90616c8c45669", + "19d3eafc75447dbc2ce4d", + "4348b708829c7eddd56237", + "605ccf0922a0c35f768933", + "86aa65ac1949dd8af6918", + "2e564f6ba5f6f74e33f2dd", + "54ec1fbecc620b2a62de33", + "da96dc29f77c98efd9a65", + "3756665d23e5dc56d35905", + "7108a03a28803eb91e8a0a", + "75fa74ccac539d6f2e079d", + "56f539741375576aac816a", + "78ab001943d18ada1f6d03", + "7a283d5e2ed98485e2d260", + "7ca8eb46f6df31902607b1", + "3a9ec75af3c8e86b8c1b73", + "61df6c089b8a0a75da0288", + "3277a60ca85c986d50dee2", + "4afa034c14d96f077cc41e", + "58ca4d190a0f756173e746", + "33e094a7802d99ab1d9620", + "4ae3a5f46681ba13e649ed", + "6369f366be6b5ec99ddddf", + "4ad5b5ec9142810d730c91", + "520d75e4874b90e95d0ac6", + "56441a020eb196f9ab47f5", + "4f100cd2b63ef0cdac7165", + "1d72e71f6a57243468bc42", + "6102d4b92b578db1756028", + "6cdde5dc50cfba13ab15cc", + "6a2bde70b440f36a3a69b8", + "40afd831d872bbb5ba2dbe", + "52a170878e73d2b9a73398", + "363495385d4023abd7fffb", + "75ecb6eacac31eec1c8d24", + "38618fda51c023d44b41df", + "1b12fc1c7d3ee5cd24b30d", + "428c02c3c8bb1613aad2fd", + "6e925cc1e63747fc8301d9", + "1711e7c4ddf7dd725f454a", + "6543f2ea86c39aa319b565", + "4f88d842683a24f7a78b4e", + "6297ed8d827bde2f27c592", + "7a4c62248fb05a7ec5f894", + "50873f081856faa7b0c6c0", + "4a5c54b88c3afab5d73bb4", + "93ecdd9b52d588b62ae9d", + "1dff7b3a25d6efec89d4f1", + "4eabe0db8ac5d733acae29", + "2d0a5221661bafe1bae3a0", + "86148c3559c855d7a4785", + "4576a87293566d06f5b643", + "2c941d4c1c7d68ef593ae6", + "2c36a4d87847724f9fdecf", + "7b5f04e933b2e4204cdc65", + "774b9d1f08bb74ab682979", + "7c1fdd60de643e750fa1d", + "682291bfd680e2cd8f9d70", + "30d33e090854573dfd98f5", + "3860366ed3637eead94b8d", + "6e8b7f0e9607e44c1f9f65", + "720851fb976798365a6829", + "f5eef843bd404a6869b17", + "2a8c9eedadb6f6d58c06cf", + "232ce65586f95692d89383", + "d5835b5723a9063a2dd80", + "72316f1be6172c06994a4d", + "6a44a264bb1144d86619f3", + "5451512089afcff74e1bd9", + "557e56b5a5dcf30ae5f48", + "2a2840d0a8db4a22fdfb53", + "71e107fc4c98b40c6f7b53", + "68c711e371efbf9b278db8", + "31b42ccc858ccceae34d5", + "47eef469d5e96dff3b60f7", + "622155e1a7c16eb9e6f098", + "73037907fb5b7e20bf7973", + "2a5beeac5cc34b9b70fc5c", + "214b26c5cc4d2d1d455254", + "3326fb026bfe153a5a80e5", + "2fd395d2076e94e7f79f79", + "1da6208947854d10119a62", + "507a197204651599300f85", + "60e1157dceceaecc3a16c9", + "179c67b2886cbf8a80171f", + "4ad8d4214e4fe01b143d8", + "594820c775fd57d86cf9af", + "18932d3a50056ecbd4c0", + "cc47e7e925da6c91fe510", + "5ca455ab52339850752f94", + "31934713e4ff1d0d7cc583", + "77747c8e4550378570ec0d", + "44fd7c4168c2a61413dbd2", + "278331e342f211746f0d9f", + "13022f601d429947abd201", + "6d5ce69503f658697314d0", + "30151eaad7aef0e79d5e07", + "3b6333c6dc16d5f4351c47", + "308b1811fe8c7d6801df6e", + "1316737cef6e8d73f98c46", + "34026c0467a5bb1302960d", + "4374fb07e1eb1efc714a7f", + "13089f86ddae7614e1f733", + "91782b2d8bf1ec8b6e4db", + "739d86f4db437bd59681d0", + "2e99bf2a9cfd14eb01e4dc", + "1f372d16a7c783f301d859", + "3fd38eb64df431878b817e", + "1b3d8a50e5425c7a4550f6", + "2f775dce855cb22a4ce4b4", + "1856ece5542adaa42b18cf", + "72bad07fa5d3ca19811efa", + "210aaed4cc7b55edc4255b", + "13ef893fe161bb05038778", + "394242cd2ce4d5c927b1f7", + "2d8ba9bb83d8b7dc77cc32", + "4a9dee0a96c91e7cd6d7ca", + "3b62b01334bf25d1f5d560", + "3c11b4ca34c3237b362a26", + "9ae11d1f0b2cb73496a44", + "7d10d41f081cc53194454d", + "3476974a3a56c244bcd4ac", + "2d248bd8de364598100d1", + "371b6d93bf32954a1ed005", + "2f9195fa1721a36e6f5198", + "b5ea9188a76cbd4490c2c", + "67fe64c68be6372b30260", + "2582d22d55dfd72b2d70bf", + "2144bb26c3488be851e3b2", + "69cf5ded5037b0fc848b28", + "451cf4e4a6ce149cfc4095", + "4845e19f6384ed5724d8ce", + "5c721c1e9f943f1e44c526", + "6b628f924b031ff396258b", + "2db4889991fd96d5a3dbfa", + "75393667821938c0e5a628", + "2e37e64613e6e49f75ff6b", + "7569e0846a7c92c5b07e91", + "544e247e73028cc23b1f51", + "2e14fbc2ca9b056ee6a0e6", + "5c96c4bf9c30f05dfa52bf", + "30455197024dac28f22ad9", + "16587b1213183c74388d6a", + "62a6ac9d0c5e4b3890d61a", + "5d0e736ad9b0e048c53cb9", + "29c81a2bbc75ee65e40fbe", + "a5803d95905530efe4cbc", + "45fae251151688f6948ec3", + "34de10a25d48bbec6bc310", + "38e1136120c0a50e7c1942", + "4be7ae42a1b71df0fdbed2", + "70eda2a92c3f3d551052fc", + "736e4111350ab36a2be4ca", + "471e19dff79f0bf8dd75e4", + "7c4c5a07ab45db64032f8c", + "3e8f3fee79b0aa7d3158c9", + "6803ba4d96f3cea5b5b619", + "645491f7754448588100c4", + "64c773513b07ac7be226c5", + "1207f0afa9b17ee1e3a14c", + "1a5a3601f9e5c757413d21", + "671a35180c429ed6cd73d6", + "3f719d970328ab86444133", + "2eb29dd03203d9dedca2ed", + "3ca5432d73f30360d5e251", + "ef9f73cc5ae815a32ca63", + "76930d75187c32e1c0855c", + "297ac6d1d91b19c8ceb3ad", + "4d06acabc42f8f6c6561a2", + "17f90d7760ace90b4281fa", + "79973f898e87ee6433e53e", + "1177a186084a0188e6b25c", + "46ea372cc256b25d8bedb8", + "9d0d5139d46e4d9db3662", + "31f4e6b45c1cedb6d4c94", + "222ad5a5eecaf564928d05", + "7bfb517a9a7064f7f0b9cf", + "88d1f466f33239ebbee3e", + "28c8b8ba9341ac37c38695", + "430a7ef273c75f6860a9e2", + "5963fe850d852bb19cdfe3", + "57ca180b4c6f8c3a63ae46", + "745f8230228fe0e913a537", + "6495ff035413be2b53c45f", + "1825a2f6c03df8e89a424f", + "4ee9fe013ba8fc6ac8d470", + "7b7c35dbf0dd6b94d050c5", + "a70e6c0e6da7b5bd943d0", + "6904f88af6eea4b3f91bbf", + "5ccb3321bf79805e3743ec", + "40fe888eb50954f82f8f41", + "1683c065332572cac40e7f", + "265a6fe3ade48b79bb704f", + "6869e474162fccd5e6ce8a", + "1621052353e1bb38663f44", + "5206d5cc4cf74b102b511e", + "459fc4d70a1a8040309b48", + "1a38abc6055dcfc6f54cd3", + "6de250d6d96fba0a4a2df6", + "521255c27009b10aeef14", + "784a6ea72c75433fa2c1c0", + "1c429a8aad032b85e815c6", + "46ae03b83630be869f3f67", + "468227ba06af62fa70d6b", + "1832f7608c30377f8a27c1", + "74e8524ea4276a1585abc9", + "479f0a9b95b8f0e630df10", + "6c9aa8a230f91d4e6f84c2", + "2020839307f0a0b2a66465", + "617907260cf1e3612508c0", + "50b259ce6ef7786ad19380", + "60ad8426c5228781a660d2", + "640821dda0f544b159e25f", + "11216382d02fa8a680f2c", + "3b142ae3f666b5a458fd6", + "50d8060a4c81ac0d9dcc9a", + "656e0aaff42e8f100df7e1", + "6b189bed3e1ee805a7089f", + "587965194057ffad1ed72d", + "7c91adf751ba7b800072a4", + "66c37766a09f2454161188", + "2aaf602c5ad427702561f0", + "1fe772e91ad75a2d2792c4", + "432bf33542ea8f8c0e1cab", + "108be849403d8b9e0adadd", + "1f098e306099d97f37bcee", + "15e468fec0387d9dcde2e9", + "35a56ed2078e145e9b5d42", + "3450478bbaf1db9aae9e0e", + "5819cdbf42afd2334f96", + "453649c203cf983e439d84", + "6e6871265fe9883143d121", + "14b7709b903167ca33c0bd", + "5bb6095d45a0253a5e3e2d", + "604b2e853911ce83225aba", + "7dcfee63c4d594e4583601", + "245ff16a71eb8c45257fd0", + "51f56cb5201bdd22f49e70", + "1b50ac3c3f5269c1d7aa40", + "68c11de19f57751aa11e9b", + "73da067d52334a718631ff", + "63f2b709d7c6ba1ce60255", + "6a47915604a062b94c626c", + "6d15e33dfd91b0adf65ea8", + "36b718d293f968b4388def", + "38b2a18fa105ae1a1e82c8", + "456d747923e7fcbd260fae", + "17a8f2f3a036b54c467b7b", + "4cd6b5c75a375bce549db5", + "ad8ecaa59795b2101aeb", + "5e89ffa159d58051edf13c", + "48457eaf5bfbcca641689", + "11e987960e92f0cfe9e7d", + "484fed0412b66b4ad6689b", + "2567685d25fd668a9a024e", + "5d36dd2a4f038c91a8e525", + "78386c3f2bea1d92b0136f", + "6ecd91e762474ea500bb02", + "460dae8d89d7708b43a1c7", + "3846b043ea9479616ae948", + "35d846be55b3952e278ab9", + "697bd2294052d067eed5b", + "29ecceda91e2de99bded7a", + "32c247d46291051243da8b", + "59d6c2db6f995cfebbccc9", + "5628eeca86bc4f505da4a8", + "4450b05b160d8c53288cd5", + "5d0b6fe03f574db311d01d", + "7059a8ae14b27b87ae7942", + "7e37627adf10efb14adf13", + "4dae59d140c542483e12a9", + "26246e8fdf408dac8fd2a5", + "2d3baa252f4d982bd2ad11", + "266efd2e0daff29e309d38", + "8fdbca74c18894d421e52", + "7cdb727ae2bfeeed50af45", + "490df281db25788739ca0c", + "324340f1f7ccc9eff05524", + "595eaf076defb81f21236", + "22aca8e5833c97719ebb51", + "421f5a540df5b7ba309bc8", + "4cf40ea87be0baab3f0a23", + "78050a04d755b7008433fa", + "70089a05ca7765b8ef62a5", + "6446d75a31a4956c235943", + "3bc0b4b12c4e0d37097319", + "6a6ceb53a9e08bce60e22f", + "5527257327c4eade309a67", + "5193e0be567990b2818200", + "540f6a5d04324cc6ed1398", + "d79412155f3d978866277", + "65e3000fa520e5bd8bfdc3", + "988dfd270fa06d78d9fba", + "6bbfc916f60c65ff6069ae", + "22a2f494120b7469421488", + "5514a9f97c736ef89e2558", + "494a8aca14d077b143ca10", + "599c6bd84b32b97e000cad", + "2983f80020a9f6532ba834", + "39395b9f947ccce230cc1d", + "5eb549dbd9b640a1018c4c", + "3a948a48ee72242647aeee", + "5c0b858603efe861d8e554", + "18af2f7c66ebae2215b225", + "7656e2bcd13769bc7d3690", + "1d345a329131e03407a9ae", + "6b91d4c08bfb155d85a09d", + "c5eb765e74f7ea6040509", + "347e522bb35549d788adad", + "3c2561b4603673cde220ff", + "78c36b7a1a1ac86080796c", + "34f1c6d5946b4f8e9c34f2", + "1d82fef6b5daac184a21bb", + "11e3b65e520ccb94e0f28b", + "53ee027a60ac6b8703b4c4", + "252a9565fc2ed88c83afe5", + "2c748923f66e9b836e2956", + "501c73bb8897e8a9b644da", + "527df835ccce3d0d8dc6be", + "753e3ffd723c55ffaa57eb", + "27cf1a1e36d6b6fbf673f1", + "303e55cf5d940fa1eb0863", + "483592c4cf34d97823b087", + "404518992cad409d30e138", + "247aa73439f114a2bae1f5", + "43f106dd9b706c7cbad455", + "60de98af5b2e9794ccddda", + "2bbb60823308802716b002", + "5a4b0bdbb9a3eba57ecafc", + "7eacc570a117e3d2c4ad3b", + "b80a7edd7c5745e63c50d", + "3d2c4d19f97ec14b7f9a20", + "8e1dc29eaa3429a93416f", + "16c859dc1504abc8bebb3e", + "142700479fca005e365a5", + "1a5a69890d5f080ad27aee", + "333e4709f384c49fba280e", + "773e49f5dd28ab9abcc4f3", + "7fcabd5ff8d8321877d09d", + "392447173660d27311fc56", + "3b607643718a1436cbf93f", + "3d01c0ebec513aebdf049d", + "115af287df30e3b9382159", + "217e1d11ab05e37175e942", + "43240f690e895ee2ce6199", + "6473a7fe7461369e02b551", + "56d1b28a25e58905b948d1", + "5c08c8490ead830327cfc3", + "60d1cb028fdf2f7506480f", + "6efc437814b1b1a8db77d5", + "386903ad1ff043a2a203ff", + "113203b24e05e4ff03bfc7", + "2287f22a43e09d12b5fed1", + "3fc330d82c00c3c98129ad", + "5bdacc4f0e9a9f3c5eb7f", + "43ad0b393a7c2a4d667efc", + "4d17bed73f2032142b03a3", + "72492bafc7adaedde393c7", + "161741a6fabf2be3cb74a", + "3253a13971cf24cc306f4e", + "3566ae3cffa53b48308a5c", + "772853e9593804a23d0c9f", + "58d985a1111ffbdece42a", + "6b463071583d5d51119c18", + "58ab9a24dbad2ee2c0942", + "7b625b197eb76a08b19ecf", + "153d46a7ad0d4c7b81a83d", + "560bc3397e1eecda48e8d6", + "3e27d166777ab6af4a4b75", + "10a7cb0c646bfbfaf6b1db", + "abe7e5169767e92b8517c", + "46bc67034da17d5b7c72cf", + "16c1a9b3bcba979d2fb250", + "20573b178651610a410e89", + "46c829e7e1980bc26c13f9", + "3428c448a20f463714e16e", + "7be85a588e4f01b973f9a4", + "382238b03129ae3a8cb2e2", + "8b93e9e7ea54df6ea61e0", + "dde95ff1403621e1e9c39", + "b3a488e23273b8e74aa2e", + "3af2323baa99fc6ef534e0", + "6003c83a8ae5ae42a0956a", + "2ac52045b3b592dfbeeaaa", + "7f29a05b16052f06eff50a", + "1eae59f579b122f18b84d1", + "28593d93a1a2159e16cc13", + "460f5f98b19a4d353358fb", + "56efa25eac0d5f675af6b6", + "73e9dbd2873c27040a215d", + "5ca40898d5d325e557e04e", + "405224a222d42397ca18d2", + "a69b0e544c08336c9606b", + "1dfe68dd4d69d0d5368782", + "18bd8096de042467441c8c", + "55f3bd5a345801aa67f91c", + "5430c091f416778afc3f3e", + "4e33cc0d26d44c2394c8d2", + "2ac1793993d045ec4ea0ab", + "a0ac3885d2cb22aeb977f", + "1073f10b92dd8a202017b2", + "23e36a6e12831353ac1afd", + "71f02d980dd943488cbefc", + "7e558ced95c8a49312174c", + "21b1555bb331b89f928e6d", + "75ea3318a1054593eca8e6", + "88658ceb2447416239af", + "7dca64fefd065e0893d874", + "5f427b13d8351db71dc75e", + "475c02da59260b083fa105", + "5ee825c795f457b727b9e8", + "124aa58a7e2a882689ba12", + "797bc83e9789b064b51c92", + "2a8b319bb90a064d3cc523", + "5570385cc742f16a21edc9", + "122e1cf4ba920fb923d0e1", + "7fc9fec9506aa1a0661240", + "3fc3680285719ed4f7e7fe", + "7175ce67c0c74c440327c2", + "503bee64726b7b32815f44", + "5c4dc3dd9138eb7169302d", + "3f0eb0b9bdbbe37f40dc5f", + "5aa25b718982092494e872", + "20b11d38582bb81886466a", + "36baace22f2d7a2014dd1e", + "27216bcb23514df00030b1", + "3146d29fae3f74014572cf", + "3988842f76572373c3459b", + "6aacfa3617f47dce14015a", + "581f2a492a4fe468c3971b", + "4cc8bba01b6788222eb375", + "5c00c9ce80be32396ca075", + "28670ba592cd5a2625df3d", + "14e47840962745e9f2bba8", + "7f26a6c99362d1126b6773", + "6eb090e9b1df79f4d2226", + "7f035a794c44a6a57abf00", + "1740e5e9a57a4e80eed5c8", + "46b1961304e45b428bd48", + "49ce8855b52dfbb878b2d3", + "313ef612f2fd65f39c2e3e", + "7332b41a9fe9dfbe59f71f", + "41858e467a21a3938d60aa", + "6234ffe0f938a25ce0f5a8", + "1105d3c71c59dedcb33f", + "7a75b868e9fb50140bd203", + "68ae7d3832d31bce57eaf3", + "600de685f1a4c2f4a236d9", + "3684bf3ee3a2b8635ca0e1", + "2bb74459adcd7029c9c35f", + "b7347a4820635a5852b61", + "249f5358017ada6567b747", + "17445a9a60b0dfca9df354", + "695d060b1aceccfdfa96c2", + "a209dce8856336ebd97f2", + "72059eace3671c76d67005", + "6dafdbef06e817ec42991d", + "47a38df2df7f516ac35f8d", + "6a3afde1cc784aefb925c8", + "112bfdedc3401ff20ffcf6", + "3161bea37fcc040c6f6494", + "6152b40d63a55e1ef6e750", + "41127c781a5dd07b6ea357", + "1df80784a603cde2e8573c", + "2ad8c773fcdf92009db9b6", + "5cd8f904c6a0e1c85597c4", + "21532161ecdbdaac15b68a", + "5a80f23e82161bfd2caa8a", + "59377c70bed9cccb346cff", + "212d386743b2c2069ec4b7", + "26fb73843bff3e4d17aa10", + "1f15e66f6c5b160801ec4b", + "4024c6847ce50a93fefd10", + "38419b7c213432cd42f4bd", + "ea9789ae096da5bedc410", + "23a7a59b35972768b71627", + "60a177acbb4aeba955e6a6", + "22d9fd1638450186756413", + "5a49a0430b2145ead2e9a5", + "7fb445fb34908201d41b44", + "7b1e254e6050240b36eede", + "44867f919f39bbc1ac8a53", + "57c6f0c9d94e02524b4029", + "553a48facee35f17214327", + "5e3402a24a307a945167f7", + "4ecbf2559411992397d1ba", + "3adf2b6aaf40f5dcdffdf2", + "156e3560db5a642c108333", + "26f3f960b2ba725c83b706", + "3135a042ca5b8873367081", + "5778dc2f1465daeafbf88f", + "142aa17e315b2096d3470c", + "17b1690a9c9f4fba9154e2", + "6f3d0d822d1a27088df8e4", + "749ebfb4005c94ed288c4", + "7f64ec3ee1d6fd7b5f9352", + "3ea29dc49c06d64c187862", + "322d1e939066766f918e43", + "d1c5eeefb8bb620c573fa", + "7d83ba89b9f89b55497937", + "2f635c018151dfffc38ed7", + "6b77b6d06b93487730de2b", + "202d04fcffa7e3a0ae0585", + "7351e32ddd53c7465f65e8", + "1d5b0385650d2d81754f72", + "5227913634dbd4b19ffe95", + "1eacd91eb3938b38f0210f", + "3ab4982748b8f986192588", + "4a648c611ef0b3b0e318e0", + "18eb41f414dd28e8ff3a1b", + "28e33efab89fb4f64d6498", + "1b67e56d8c8f6656eac86d", + "27476789fbe89ef5fe00c0", + "21e39ab39cd96423900120", + "4818fb8f958698b6e9c9d9", + "95d86ded4a7b26a1ad331", + "1b2e283bc4ff40366c744f", + "2db6e61499c9393946b57f", + "3e8986648fb4053520276a", + "5eec1e56c0a2d0e34dfc8a", + "389d9fa841750626db108d", + "4e0326164785519414d07e", + "530f4c391aa2b0938eb272", + "50c915d40aeb9e4ec78789", + "57bf13241507b812b9a904", + "3245bbf080c6731fee74dc", + "11081f4b8fb8f0a9abf772", + "7a75be28b1e93e4e0c9342", + "174fdf0bcfc8d0f4e77e83", + "46986d0da7a2c17dd1dc22", + "68e88d3bc4e8d390ae4b13", + "4a2580e03d81912089d88d", + "201e678f30ea96fd17615f", + "3566f7f67e026f0278dfd5", + "30485371efc19b50bbafe6", + "4dedb1ba2a6a4abde67337", + "33440d7d3472a4b6e2f627", + "591749051e47ee7b49cf82", + "3fe61d12a0b09791925ccd", + "7f5140ee63b60e0a33058a", + "5eb217461cfa46d5694397", + "6aaafc0107575bd9b70723", + "3305f9d7ac9bc35ded571d", + "5ef7fbdbf498c8684625f6", + "3b66491ccee4801a4e3673", + "76fbf6732402bc76e061d1", + "28a37e042abf70a7cb137d", + "534c1a3b25194e8cd66e6c", + "3eedab106a435ef32b9e48", + "6bd995ef31bcfd22d52d9f", + "6b5da25417070642e0ba4c", + "3d40b56764f7765513d13", + "44bd0de2094b8b3759356", + "312518f9c1ce1e690c003d", + "f920b02af1e3bd673512e", + "4ed1311eae64f9e834ee7b", + "4d075c933e4b93da3a33d9", + "133606f2fed41ffd77b999", + "16b6721ea95f55ef631d25", + "140aa7412f6488f5404826", + "3ae99fca89d15abe091160", + "543222604f067afa3e7558", + "2948eda7d7c508918c3056", + "4cb6253df884020966d27b", + "46bafe88322c67f3b90507", + "31416a7f09913059dc251d", + "52d3cdd253b64a03c5885b", + "1c5d10301fcf4a14c82adb", + "5cd8f782abb8b60cbf36f8", + "42b636bc4126dddf74cb00", + "5afe15c1524eda9627e183", + "783d012e8b928ea14eaad8", + "45242101d43b276b34115c", + "28b06d6b1f993702509e4a", + "16ad879cfcd3e458301dc9", + "78873bb7282961108e63a", + "1c5b7d2b84cbc7b29bf542", + "48edf77c0fc298b0491c2a", + "398764fa3e177502af4d3b", + "1d1aa15ce7c8c15f051ba9", + "401a3ed45557939fa7eea", + "13f9a309c929439a91df6c", + "3aef6b8ad8d4f116a27e4a", + "64b1dd5abc6713a8f53d0c", + "73f4373aa0c46a1ae61409", + "1ebddbaa72ad1a2b1cdc49", + "2cd33d1f501e268643d591", + "11b77783f411c457cf909e", + "d92cf9efd7d12c62f0dfe", + "2c56fdcda56f78dcda9b60", + "118d29d91686683483dea8", + "7e05b7c7d54cfa1fc7b525", + "42c5d2d1082dd2375a4ef3", + "26554ee3e9bedb1a3a09fd", + "ad64cff4b4763a7fda09f", + "5f9563c7ca70d6e5061bfa", + "38d987fd4b450ee5a69286", + "62af499c078af038905758", + "3eecfda3b4d92af2b7e5ae", + "5e195ccf98c9a4e1967fe1", + "61c0e0ff11a378274b395c", + "486fd3ea0158f33daf767d", + "4cfaabac7104cbad2ed728", + "714ed5cb0027168be15142", + "ac5bf0492a63aa0bf597", + "53339d5a01f3d2e9bc8755", + "457d09be8a2a4c351b63ae", + "1892726d56d4f8f92dde20", + "236e08f8411de38e44c3cd", + "5549ebaa872068aae68ac5", + "11df54a696817409ff1164", + "7f695021b246db24a5113a", + "5267f1f68134d546ec646f", + "4ad5e4985caa0c7ee63b9f", + "3c5262912ab7e82ffd49c", + "7f9a1f8e557617163d5e82", + "31b2ef6b5163160bdce290", + "127dbd62073fb0c17b4217", + "5fe5a0fcee7c061cf49e8d", + "34ce2df12c5e0970f682d1", + "4f6148f444b84dfe82ecb2", + "740e3fa0e998e741eb97cb", + "5623f1c8e0d5c15938b2a1", + "79ef58660a06bbc22f0cce", + "35f48b300d21989b05560", + "4efe7cc856d9eef4fda470", + "43f99aac41b05d58c624b4", + "66b03ec137e6361ddf6317", + "4382f99dff4951a775fb77", + "974b1ea8fc3d4665ea11a", + "1998c4f90bb8b5465b7b1e", + "a49f38b3c0b7ca1fc5c10", + "57d421e876be8c87768c1a", + "14c79375686a30f4c21ea1", + "667b77d58f7f6b14e19bc3", + "17b5a764867bc2f176278", + "cf2bf44fe6c433cc00c9", + "61619bfea73d2a10c7a7e9", + "3908eb827c8209b96bc643", + "e859d26ac6c854731c10d", + "562d8222a0b94f5af3137c", + "780a2a5411b159d83dcb95", + "645cf2dd2735f1cbf53f1a", + "6476d594392ef9fc9a3df1", + "7df75741d3ccafb28da8e", + "526d1eb936d1a3dec6eeb3", + "1a3337bb0bc288bf44447e", + "13413811d8a8e6bc2e6cf8", + "54728697bad28cd0bcc9f", + "2e178e1cc4f997792ce1aa", + "f339d2f5ca33347ae8d13", + "24dc2302a4b77b85525bd", + "4779c6f70cb71f00e32d17", + "20866732367b425f7e5ad1", + "26c45bee1cb7e300fef593", + "4f3fe475424626758ebe24", + "3979e2b3d54a21e7e8c1cf", + "50bb1918112bad3e57d523", + "4e1bc7c2f29a2f520bcf7d", + "3b4ae8aa403abef29b052b", + "54765bab6ab2b394d9dee1", + "5e7e83070de3b07a4bc87", + "6131db76263e902f303f6e", + "2fb62f0a2e9435830411", + "57b341376c8eeb5e957326", + "7d59312cf551555c728152", + "3e13e95a38da382cdac574", + "53e3092b891267552e8471", + "ea04fd9db78a21c39b6a5", + "42cda11218a2f5a8d7bd1f", + "3aaf5736ed929c1ed0ab93", + "6e93c69a7627e1f9832a61", + "37526cf6c350fc29ecf559", + "5640578c9a2f674c097c8a", + "41ebedf12db1451af99b12", + "66db9685c97e1039f97191", + "61e21b9a255226ab8a9c03", + "4d36c683652009a273c69c", + "3e00e41664141664f70d8e", + "734cae170e5d7d8758c509", + "26c603e605263eb37ee858", + "1cb50b0700a11348f864c6", + "6b4ed91c3f4f0b25252206", + "46436019c4b35e76ea4182", + "44885049137a26d9ff4438", + "1cf7470aa8bed908f93c32", + "56d7ace10d6e046f35bc1e", + "2bc7683658e815b0850ae", + "2bd0c39ecff8d002f3a3f7", + "2848634cb8eba43423c432", + "177aa9fd51aa698c4f5d25", + "809a8bacccc204134381c", + "60483a9742002ed4918cd1", + "7544304d1b3c2594fef689", + "49ddb3e956e6fd8d65e1ed", + "3820d1fc1eab75e925dc43", + "7093b250c7b04c2c6d567c", + "16870479234b3337ddc8c9", + "18f39bb607de6b1ad183e4", + "a5d62acbaf68c52001a4b", + "65f33a2872e25c8a682f06", + "4e66ba0bc1058a3931042b", + "357eab1d6b7f6618503b3c", + "5cac3c06df31850ad70694", + "7e68cfb951ae556b15fa1", + "7de8764ca6a43c99d6a50f", + "329c1979af2fa92b25335f", + "113149ff5647e02c5d8e8c", + "5fde1fcd656f65c682e01e", + "3a2bc2968347afc3827c67", + "b7602abf832a9540b03b8", + "28434971e0ad86e87340b6", + "e24946eda2a54a4c98b6e", + "318d2300370d914ed1483a", + "776ff8d5492c149f7acf17", + "50e46147373113c54d73c2", + "59652c3042e742dab07904", + "1e74e23fb34c50dc055d0", + "3c31433d0db703e03c294d", + "64666abc6a9a2f6a1c7575", + "191da9b869e973d2fdfea7", + "6c362e17e2173449bde86a", + "1a8ed7cad7bcfca4620120", + "273beeddd87cbae01c207f", + "568f3917922fe83ad3e225", + "44e6ec408ba05ad98e759", + "32f5fb93813b0abef00c9a", + "490db50fd1ace7e8ec15ae", + "7630fa097aa2bf97cef6b9", + "6ef800332004d6cda26cdc", + "551ec7c1ae7ed078f940c0", + "455927f484bb8820a2ccf7", + "7933956672bf2e4535ee34", + "2a7311c640e7cf0ecc141", + "7242e44696c19a3a1910b7", + "3c7a2b6b58424eab86f3b4", + "359b331d03b9cc2451c1f8", + "4169ab1c6bf3f0abec6c34", + "6df855d5b158377d521892", + "3c4374002a4b05edbee285", + "209910d1159692421526c", + "31dfcfe645b46b329ee2a1", + "1e6874a8b307092ad6e72b", + "6b7e91fb5948662e3961e3", + "23966403e567312c7a8379", + "2f62056d547ebf7995c6e6", + "5fda42ececb40f359e4f0b", + "18a6b71998f6f84fd5d814", + "76f42929010d1ca7619b42", + "50e22c6cf5d6b70def807b", + "1cc96ab6764758e9cff09d", + "59aa03a25735023ef97395", + "741d91860d83d000328e76", + "a9753c820825d73c04548", + "4ed7cbd3e32dee7a40c626", + "6ce70c288bc2711b1b024f", + "59efda7d6a6d8e6aaaba46", + "6ee757629a9b68ac7e690f", + "328bf9a8c78ea2ca3388be", + "59bb325b9748e94acb6630", + "55137101093be9fb51857e", + "9c6c4ea9b05d327c6b7f3", + "77815256a969cddb479be9", + "3b0cb59bddc94e18233703", + "7a123babe2e7abafbaf8e7", + "35d6d7bb2855d9adfbf650", + "6ad95985d0ab8e8d823145", + "2133efe27b28c873f101f", + "607776583fcde0ad8e4c87", + "e2d9cdfcde324e23eda21", + "747c7a13b706fb28e46c47", + "35d310b1c9f92e46c5dccd", + "7248daa035ed0c83c2d007", + "3c8b578aed4234d875a143", + "766ac65aedf40f90341249", + "3087f959a9893769198248", + "49a34db8369186ccd3e18b", + "69b04bfb64dc28afc90f3", + "3732911ea3b78b2cc54de2", + "7dde8d7ccd2cebd1d4b943", + "66727c69de089e222307ae", + "5a67c62d60522486e9cab9", + "6acdbbcb1d87bb33b845b0", + "1f1cae187cb4e7e2d75ff5", + "1cc8bac063e7f4722cc83d", + "1f75d643fbc4ab52296f51", + "7b34f38b9d16f0d70ddae4", + "74a0eb9dfa780e171aa5bc", + "4366b19aa12542a30c1749", + "4a1404c02a58e6862d11f5", + "55e542cd768eaa4ab7eb43", + "182ed4a29e8be479e40c89", + "5eb96063b604b2d052b457", + "d755ece5c8fed1e833d4b", + "10f7a570b959918609b06f", + "656a55d45a93fac53881ab", + "60e3811062f0661e25f626", + "24a843ed6770d822f92be9", + "216b9b04319fd8da8a6d3b", + "3e41b8ea3309221756df7b", + "5a00aa930e50101d3ad458", + "260985f3992a168bc7fb3b", + "5c3df551863d0055925c95", + "28b06a5b8a2319d5d78e37", + "3567cd9077f5bb1d3115a3", + "460858d1e253129bf64e5b", + "485bb888b6979f8f201fb8", + "7aeadbfb750a598afce6ac", + "3cfed079405fd41004c118", + "3dac1d8f9e9cf46cc42204", + "2df246fe147cf6a7d9ed5f", + "1a908fcb6be810a9e1e92a", + "6c33a3a058504d48c17efb", + "66e9cba0e526f30b7b9b8f", + "757f2101d664083b2fe8c9", + "18c5643eccf2173f575420", + "7dd9082b6f5562b8d6ba91", + "389d1e8a26db35e20882fb", + "65172c59adde7fa1aa62e", + "1a7c7fe62effcf2d1a2cb5", + "392d9ae31bf22e0236e198", + "3d886ee05f1bcf69fa4f70", + "2c8f1060dc661c38044a5b", + "16eeff7e87d3caf8e58a92", + "741dd990ea20591fd9b5ff", + "39bbee3cab035e7fc68b3", + "4996f8a3f7c2c5fac02813", + "36ded179138f0e4cdf1ee7", + "f9d7db7493258ceea1a37", + "2a6c238cf5c57a2939882f", + "35dbe95730bed0669969ad", + "290fe0ae5a419909be4e2b", + "63839ba9cca448dd7fecff", + "30a8e1972ee45f3e0613d5", + "509ea21b16907067d06b82", + "7633f58adb014bb5585678", + "6c8fa526a6bdbce9f7b832", + "4a78cbf6bef93b38948e09", + "37c7b0fc4e875134c29246", + "4c996629390ea0954eeb1f", + "222dacddb6e77241cadac8", + "2df2bed0dd9ba405c8c5ce", + "3a7c703f2642b17eba0c69", + "22e8d9bc34a96264dd4caa", + "4bb8f4e111d078e3c54590", + "69efc15f2bab10979940b4", + "4e1b51392bd1ad38a51d00", + "5e82dce0d15b40d73e81bd", + "6a410e486ad693817f9d31", + "5dab9e18ce0b8340db40a2", + "2df0f496cddcc699504250", + "124c113e25b1a8153a830d", + "28d70ec040ec983aded5c7", + "7a93c6e177d746f5eb503", + "14c9d693e42997dbc96df3", + "50755ca653aac70b84b12a", + "5f72010436c71470f190d9", + "1af9124bffaade4351e990", + "5fdc8856cd703470a1e5a4", + "10b57d68a8cfe14ef3ca7c", + "245003f901ae0a356365b5", + "63dbff9398c6d2cafd1418", + "75c2ce5e2535ac7878196c", + "15c08724b1daf7a590d087", + "3dc7ec06146d405216b267", + "1fab75ef67bec61a68a277", + "711d3de6506cffb89d82c0", + "15b79d2a607e674b1df02c", + "928d2a95f60dac2e280f3", + "2db6d4b5b7a928883df97f", + "522bb592e89a78b316244d", + "cfbfcb607ba616c016fef", + "13d6f0fac0c0b9cd891715", + "12a8a0e9fe6ba5c3656149", + "4553e500c491eb2ced6e1a", + "368d20177281b04fd8018f", + "2579cde0e8d37e04167a12", + "2f4c8ebd42ef359c5ac79b", + "7afeb7314079bb05948a57", + "4dde9b7ed5a96934e4dd51", + "3cfc7a65b66e9f8c6f8cbd", + "7453e07405f19cfba93c17", + "18488f368798b8734164ca", + "532d2ff2bd9d0ca8b344ee", + "18704740809cbd3a91bcc8", + "1a91a4ef4625f7ae911f1d", + "26240f3e8816b599bb01c6", + "60749c3a015660029dacb9", + "321405882a2a0c05f7907b", + "6b85f2803d97e818e2e527", + "40d9ddb7d82d86fe4dc6d7", + "5bc9b4c686de112404ccc3", + "49e219e4b19fa82e3cdd8d", + "6b4aa7c57cecc522b32c99", + "1152ee1f6c91b44b1faa20", + "4f1b7b04b31a6d85748c8e", + "28eaec99940a1b1f563841", + "341ee0e329f6ab9da76c4a", + "8a4219421d2f55bef801a", + "25e4a83dfc2f633765d96b", + "22a17bb1e02873c944cbe3", + "4c4fa3875e78671bc1d2bc", + "79db0961906e2d46b0b349", + "68d1c5df4d9653be9c8e7b", + "7e0f7a6620c31d72d9d568", + "42af59edeafb6c79b9d208", + "3d17d279ec6a81f53cd4f8", + "2f1ba6fd01e5cf713f7991", + "5c246c8d9baad4092bd7a9", + "1c6a5fca595a1ff62b0a7b", + "5c6ce5b29bafc437eda5ce", + "709f8b4e1e81f78ecdd5bb", + "619fb115b590487fbaece5", + "5b917d89029b0850efbfd7", + "2103ca88adecbfdd3370", + "4e0f2086acba831702db59", + "cebc8496358956c6ed352", + "4aa62ab8f33741774c11af", + "55925c1c09bda33b3d0e7c", + "47b5376a6bf9ae1b5420d0", + "5f305f39404231a1ce6591", + "d0d6f30615b8f231bece9", + "851fa3652b44e57d9190b", + "4c099f907df9db8a25350c", + "48cdee08fb7cd0c828eec2", + "7399c1866bdfc2ee9d0ba4", + "7da4d79cdf3d83f0763c79", + "5de657154513d33b2dbb32", + "4057d3883ee10c31d0c5f9", + "139a5be9fe5d74b7b324f6", + "4678975ad8ef4ef63ed234", + "3a1984f88834905315728d", + "5e53c14166e301e45a1c84", + "1246f9f5df870b21bcb1e6", + "6095ebe0914ab346aaab52", + "173ef6d2228315e7fc8577", + "71a2dd2f4561ce6b25cc84", + "17f8a55fef5d58503cdf89", + "2885d88c14361dbedb4fb1", + "69cb489051468dc8b7a10d", + "6552488fb7e68b138c5691", + "3d5e0686efab87e5e7c266", + "5adfc7a0a78f6657a5960", + "65773487e5415b58fb205a", + "1aa4bb2c56ddce8ebceb39", + "1ae4174a64ea29d65c88b7", + "2af1b36e871a2152d87ea3", + "7118c95246463e79fab7c6", + "7f31009d8b384ea51f9235", + "5eb2b60c1d97e4dcdb09d3", + "5ccfa76193ddbc64186a30", + "1e31c413e16722caeb814", + "dee72e6d522c55b461f4b", + "18250945b23b28bdd1208a", + "72e90ac5d748fbd2d7aadd", + "10ad00e38092458e73fe4f", + "1144f2116d6e426f3addec", + "720179be8f54eb5c778be", + "1fe4c7d7da3eaeaae25e65", + "51a001a64a22c7bc0db3ea", + "7d40cdfed339cab397652f", + "1960ca77285b35812422e2", + "421de31b9083741c4d4c48", + "3cd3f5ea5623ce969c863a", + "4b6b8f4e6118573075d4ce", + "43ac29ece073be2a30ce86", + "217c2392122f9868740137", + "2b3dba5edc89810815d1ce", + "7a9c1df7aec04dc00e3584", + "74aed20fd8f19001dab562", + "74f8ea2aa01f3e122e9ec6", + "7f3f1310b0770a6a8ab4e6", + "7377f9449fdfa779330064", + "4d3d6fd7781e8ff3322226", + "3629587577ea6cd990a3d3", + "29ca62a9234f915c5c9715", + "5286bfcb1951cdb460fbe5", + "1b0dfe5bf791bf4d645e64", + "150cbeb75257f8eed7903", + "5ebda7b44a30093e22fee3", + "6af9f591969edf6d33a899", + "321ccac2ccfd73a0b28c6d", + "fa6bb9b4b92165346e0ff", + "603f9b3bc6733094104e23", + "2e30617b0abeb387001867", + "e419f0eced24d03400fbc", + "2057d9029cad07c3d344a3", + "1d4515e4768ff5c6b4178f", + "7b5d99de82bacb33af7ee8", + "43f53558dbb8a25ad757e", + "4265efdcec74f163498291", + "477273c36a749543489547", + "767f863c9bfc5fd6540f44", + "d8e9fae4ec5d3e7913712", + "2ea5fa6c2e19e6ee7add96", + "55fca6cb45a0501d1c50ba", + "4e94399e1765146189df5b", + "5accf03c1a20af1120832d", + "137f8e05276cc8f9180095", + "499667b1e22348ac584789", + "7b87e87e1438c6126ab1cc", + "46ea38e0c4bb849b39baee", + "d922a909e3b3afea5fe08", + "4700bc9de4804ec44122f", + "54018c8917549d050c00a8", + "5f8307f0589178f70f7238", + "45b5b538c44c73f3bf515f", + "7ad19421f012d132850842", + "7adc118469443d4f7084b2", + "2ae496e8d9399061460619", + "49e01d719bf13fd52369ee", + "e1e55a565534c74a109fc", + "72bd80f062eb130b42b044", + "1d616376b444140f9acd68", + "48082cdc2a40ccd11ae434", + "32a426cd7460f9e5c5e7", + "bb247081da09643c00d36", + "34f2e009d684c876c246fb", + "3e2cbdf24bd5900348312", + "507a6d1fd108a63234b38f", + "3253e31b47819fbcec75b4", + "3ae16fb3fb77d48c6adcc3", + "244d1131736a5aea351d17", + "682b3c7ed60ad7c985a3a", + "22d6cba0f681e23fc64382", + "14da7875e13efd461f7c10", + "1ef2f8aa8266e26254215a", + "22cd6c35ab2195c56794f9", + "1d1b1bb20ae40ee8d35505", + "66ba97928f262067fec230", + "53e99cd5ced120123b808f", + "7e698a24ee9aa726fc4b0b", + "1df3eb49ffac499fc5f3b6", + "465d9407cc9bc6456e974d", + "48938572f05f540b474485", + "ddf6be61ce9c04533277", + "15131878551adae4b04c53", + "14c7f40a28e01adc5ae1b4", + "5cf912fba9a563060d7b3f", + "1c85ed9416af845bb8e82", + "1851d531ca021ad6f2b572", + "4ad2dfbccfebf4c881dcf6", + "16d83b4ed79a537102c236", + "19e1cce82f85eff6f6b24", + "589758587c26455b22331e", + "59fdecdacfa91d60fd391e", + "1eac63084c7797618dd9f7", + "426ece55a7fd1d858414a0", + "2078bac214b712936de507", + "3e748cccf5c4b2e587b8b2", + "232c5e33740871b389c8ba", + "7b4210ea990dbb2b80bb4", + "53b453f5f30f900af808e3", + "49f7df71bb684bf5a54c61", + "1174d8cdaeecfc5b7908d0", + "6106124e06a73207e84629", + "34242d89a6cc1d4e30fa9e", + "74d978e8d6a9ce6def9aa3", + "308787b80145ee403c389d", + "36121cc69943c0f23f8a85", + "6d5d0573b2f9596b50b73b", + "5eb9037bc76a6930985737", + "2c9401cd53725f84e2c421", + "8c59c1948361c413eed8f", + "1439532a6d3fdff49361fa", + "42d71e3ed0639f1b07231a", + "29785bd232aa4bcde009aa", + "494c96ddeebc9c314fa5db", + "2e1d98165a5897b1482cbe", + "7a4b513ca25dc5d887768d", + "5197b486ae5dad9284702a", + "1d4d18f2bee14ee417596c", + "1b8c24041b5c09c2ff1c0f", + "19e87845fee8ee9d86794a", + "dcb3217133998c35879b7", + "61c60fa253a8977e213d6c", + "3df3e3ff8b5241f9f120b6", + "7e880bc1729d1783a14627", + "7ef05035c2a08e050870e7", + "3c234bbaf5da9465f9498e", + "39fc8d30c95dd0494e9be3", + "75b29426909e9c8294f365", + "68ab0ae55863c4f8044101", + "1a01c5dd382ca52c0f8a1a", + "7eaf3d6220ab7c049341fb", + "e966e5d5e80ac9dc377a2", + "38aece2fe0c1923c569603", + "296401a6101dec9b48a81a", + "a5385b7f7d2a505f37187", + "1c0a01fb60b92af636be29", + "546f06ab10360a76005c9e", + "463e980411d809a1713383", + "6247c20f5e97453bb71b09", + "7ed8ee73ca5507f25bd5aa", + "5f9fe5fab5062ae9d40550", + "d7315bcace04536b59c5c", + "700ac125ecd365c309339c", + "792ab4b2a318b2229df59", + "6e8a28f3d3f87aa2548dbc", + "53034f778656513538ce93", + "71310c65e10b4b2e1f3924", + "fca82540d3cb37cfe38de", + "324b0e59fd313b7b066991", + "ca5fc0de7c8f0742fa11a", + "436134e757c46fe077e8fd", + "3382f247e6cbcf48a8be0c", + "5714f7d7bb3f12d88adae1", + "75c3040748861ea4157368", + "1db2b63fb5b72bd2913b9b", + "5de44a501f899626f11ecb", + "4a728ba1f43b41e3c8ba7b", + "631d5fa433132c920e949d", + "49dd9e128368a6e8f31565", + "5f091c9040f8e8b4af8c6a", + "6dbec10ac45803905232cc", + "422c99318e0e012bdf3cdb", + "7499dfe49d22092ecbaacd", + "4e9b8b836aefbcc76074a3", + "23591be47ead61c7626094", + "47cb5e48534f0fa269ac37", + "45d0bbd0c4c565d517f4d9", + "58f251e3a335055f8d1702", + "e16e90086dfb42533696c", + "32bc07a00fc1c32e790cff", + "55d4eceed6862d8b7edf73", + "3bd14b5c954fd788df3e2f", + "32267a0d010a3ac60d956b", + "2dd9e647cd7caac396218d", + "786bd6b0d956c71e3d0c41", + "5a2e3e7ac883c32720fb5f", + "41824effd56ee95a25ffcf", + "df5585842155fda65c5ad", + "f0daaf67c2422477284d4", + "285121b3579e1afaecea17", + "2d0786ef10819221e8e925", + "638a87cbb628cc2744b5a", + "2e795b59317cae4c039946", + "6df756715e22975feac139", + "4299b7c55998b524a2963e", + "d73559f9e34900d6994e0", + "4356f96a535f02cd557790", + "671133a56bfab71842e1aa", + "73475afc8917dfb47ca158", + "8cecd81b395199379b860", + "6908cd3a0537e6d9de224b", + "6c4e919619ba3e8fcc083f", + "765220bfddbe009c12884", + "696a995b7f1bd2337f9c55", + "7a35b4347e2b2fcfef4e8a", + "7715808f58e52b93fbd9f4", + "35984ab233bfbbdc2149d0", + "49f6551bb5a630f7f3a91", + "260202888a368af1bf27f0", + "28c70cf1a34bf4b12fc1a1", + "74a3895c1173d1100e060", + "500de5789e46431a14b08d", + "e50ab5db695f894b26597", + "6e0d3cb0378f9f523dd7ca", + "3b890cc2ea1882c16138ef", + "623f56668cc8a093bdba7e", + "2311c97b29ff503887b251", + "5f019291ccdeabcd687ce5", + "6467af1a0f07013b2e9849", + "14a9e816ead24aab2e6645", + "6bbcfc26c4e8fa7b836095", + "775ff949792463791cf8ab", + "62658893411360a21b6bfa", + "2fc0729bbc7485664f21f9", + "784f7b46f80b03fd06242c", + "7215cad82f761314bbdd1e", + "475c6525a253fe4a455211", + "3301553132b8af815a8ed7", + "40066cef89d0c82982356c", + "36d97c131b997ecd7866ef", + "583e484be506b8efea96b4", + "4656a2b830782828314373", + "374bc74be1e4381a79910f", + "4f459e6fecc9cadb8e977", + "2a843c02b5e59799422e65", + "3910da787142c54f4f9b2f", + "ffbb4d4d7cd961d36be9b", + "38dd92596a9fd54920876d", + "6bd057cf4845772f81f71e", + "4fe62d365b58ffaa0d2201", + "1429ba4cc3fbeac84cae7b", + "403c1a7f2d528ab5d343b9", + "2175a06a641d5e8ad33646", + "25d324d633986f4baae0fd", + "63d746c096cfab5f984c70", + "5bd335a49bc5a06867e5e1", + "375f02bea7dda994d93044", + "4f754c5d3b280b20bc95d0", + "3a997ef0ad242391b526f9", + "2c30e99c7b2606982311b7", + "4d562b2b0bde307c0edc87", + "b4aa58f86a462da2ed07", + "ddd508394009eefde3ac7", + "e73b5b515611f25e496d1", + "e4ce3641fd893553aeebb", + "32765eba5563b5336b4375", + "594ab65a623ca11a1d847f", + "7a6cf71a247a9aa2ad1f3d", + "509c14f0517edd55968bc1", + "3cb90317e0fd78744bd72b", + "45f39b8c67c74dfb911f44", + "476085adcac943f7253ad3", + "658a9098281c199cd165fd", + "cd47f8baa501aac7b0989", + "3de183e6b991f7b8085160", + "a5582fe7b241700d09fbc", + "68719eec758c692aaaddb3", + "7d5f8fcc1cf99dc3131c84", + "5a2d6c9f89fb24cf28d1b3", + "7e1946c78347049b735318", + "2db5ff229cb2d0a85b8393", + "6f9024d8cdd8d69ef10bf7", + "38102211c805f10960d5ba", + "55e838d685f75c7c6b5f20", + "339fe9b069fdcbe6f3e985", + "1a939b8af79d6b9d1e57e0", + "2b1a4dba7447b02833bcc5", + "6a5c41dd17f1f090be79f9", + "6ad4c1af807487676eed8c", + "6f33938b3b060336c57082", + "1e7a055357b6580f4a7b9", + "1d51d9201dd8c5066bb7d1", + "daa197fa1e9b3068f7333", + "364b7fe165d59b5d916e2f", + "4026f1042b0f5b1e940a78", + "3501255a6a3473cf6ac042", + "73a88b6c78ebe25a0f02da", + "645d789e2ca881eb3474c9", + "6f59efef27dbd92df6f652", + "32dc0a137f654afa8bd8fc", + "4e162f9f85bd081abd7380", + "48ef84f7c351ecdc951b2d", + "69150cde40be119caa92bb", + "3b409dc537f82b36a0b80a", + "748df460f8594e0bf1ab20", + "178fa57d907fddb0fe3cca", + "6747e95b215a546a339b7", + "55247bc5a72b8d3e89234b", + "683a5c6214b92efde4aafb", + "f36396be6cc745bba9473", + "77a73ba77b4ed622a17e87", + "2c250894e17e7f4b0dd", + "24af65fef90e2f99e03cae", + "3292c0c9fda6887e4ad161", + "304cc216ed2272d07c7f80", + "5488a723f6ba5cf9800543", + "47d8e4eb9811f9d409ea40", + "7e2be12d72782db9e725dd", + "247f391e5a3b234cf19ccc", + "29f1e17550354ceae49f99", + "4edfb060e1dacbd449d726", + "4a29c3e62c947a4a1e99b9", + "4755035ba4d9924118903c", + "3d946cf498fbed2d965f70", + "260d3af59b4f3d5c208bbf", + "34b484cdb4cebe6aff839", + "7b5ec7e3346c3cb243b356", + "6b25a8073bc36b2af4c2b1", + "3665e544d5ec7ed8868a1b", + "1ccb03c008f2e822848880", + "18e83fe885c9bab518bb97", + "42e88e9f66659afa2a393", + "5533d7d78826353c79c73e", + "674fde01f6057423c31a9a", + "3a9c7a7d5782f84fd4620f", + "19b52abcac8b60d5349efc", + "23ac86fba80f09945d51d2", + "61249154ca21ee2b75deb1", + "473c4bff7362fbbd2049ff", + "923121ae3af782c934df4", + "66fecdf77d13ff6c0b25a4", + "170a54e825e33a2265d3cb", + "31be6678e513813e0e676c", + "7972b4774882051f2d85a4", + "75b09479e265b9f0ac9a5b", + "708324dd5e787ea3d43a21", + "4c67268f528ba7e8c34a0", + "51f9e6d75a3c5264312643", + "24183bf26908368eb41547", + "5e7785eebda5c8e2f0247b", + "5338be8d9f87d3f2e46b2e", + "14bde3f9984cc98dc83f60", + "62870c281778214067b40e", + "62e9a332653e1b103db5cf", + "69c96f5702ae4eecc6f341", + "3e6265ca213c1a0be64512", + "5ea38165e28694c8629ccb", + "2be59650bf9aa57c249937", + "40678fa2d309cb9417f68f", + "3459971422155f9703c78c", + "5552617d9eaca45155f490", + "18991d6f38c445ab4b38f1", + "1aee70e483c99574480349", + "277575523998439f834d3", + "692752e677cdaba7d636c2", + "298af75c2d584b01ccc6a6", + "4d7d33eaba361883277544", + "282f326b1fcbfb463ba836", + "6b0dc0d5521d21af0ccaf4", + "57f40a819546afc89fc2ce", + "6a24f8897d3040e8fb1da8", + "51e8f647af3880d2b77ccd", + "4b223517b6c7cd85cb43d1", + "745ca85c76435eb7ba81ad", + "743eb61998341a5e892884", + "5afcdfdab7a5b6864efc6d", + "39824b01dda7b8ada90cc2", + "2beed154412bd52cf1c83c", + "6b497ffe240d0867d5d7ef", + "eb947683c26db8dac2f36", + "15891c14bba25257cb14ef", + "4f540ba10fdacad19fee6f", + "5097857cdd82d2df144dda", + "6799fa1f9cffb381bd6c8c", + "5e45b3a532e82a603df12b", + "53528c9bfa6f5405d66497", + "2248d63b93978222916f1b", + "c98c97ab7b4b0cb756894", + "57d57f4721fb6be3b38e99", + "7b4ac8e7f9ffbf17f0627f", + "22af1fffca9aa4b2ba234a", + "2b913687a118d5d595277b", + "3cd72e80ffad615f09526a", + "e050d10f9ab1681fbdc06", + "36c8b1aaf274cca356ae2f", + "3d88de9f1c15bfd7b6363b", + "73e027017f2dbdbc204a16", + "6ee2946ba009641ad73037", + "522de20b2431d6ac8f42fb", + "427af6fbf5578c6104b255", + "172bc617da9e1aa348e114", + "1a5e08fda45015af7feba5", + "208fb7a4ffec7d8d1e5be6", + "3712172b56577089f4c773", + "621bfd4a39ee713781e554", + "2f0c8ecc959b7521936666", + "682583fe078ff76c962922", + "509b53b07e607cbcf6e79b", + "1b71574f7c567d707d0e82", + "572930c1df7ba238dfc9cd", + "2029341ddfdbd9f668612", + "1a54e98271fd5720e1bc63", + "62f83959d672cbfe7201a", + "2abf897aba93d347d6e2db", + "3ecd876c819b78567f7fa4", + "69714524521e343bc3692d", + "290cc13b5edc05d863546", + "26436c96779bbae9c15fae", + "32e5746a212d6238682c00", + "5e4b991cdcf27f65105596", + "4a05e03567ac78048832e8", + "658769c97f8b8945ac2878", + "4eea383bfa391bcb14540", + "4871087f3b2cd3c0f24c3e", + "5c20428f433fbf0c9ab374", + "15aba357d612d87099180d", + "73f933fe401d564be0efd3", + "6d925493d403647cc0a7ba", + "6a40f14b7a50eeca571bae", + "446d6309025414bad0aee1", + "6e388c53aaae7d287eebd5", + "3bb5af245e5d40c6fc15e3", + "66895605da5092de3d2b87", + "50774e378282fd09459eb4", + "5abf04c6f95d64b6c414", + "54dcbbc689dad12df77730", + "226c7c98f219b40ea94b66", + "6abf077f6636ceee313734", + "53cc3acdd810a96c3160cb", + "59b759ca3a67e4725b5f84", + "48e1272ba911cad7536a1", + "1d3c95c9d8462d4c467220", + "4167a3ca5253556f128ea6", + "bfe2f259223ccddac13b3", + "bf09d6ff46adc21d04951", + "4555d38c19f123cccb6fb4", + "4a5333a5e1c04b8bdfa257", + "627a4795d0c0df1d84d13a", + "122225a7053b175027361a", + "5027d58d8950e307548d14", + "76c881f1a372f21e829095", + "7f8ad9957e40808881a192", + "621edd8ea6ff7136526540", + "64adff5211c520e76cfa93", + "7b274f32f2cbfe03031cb0", + "3c71a5e6f6b431bc524a53", + "10cc655b268878a4e8e081", + "56853e4d2e614e1924d27a", + "1c72fdd679cfcd10e369be", + "1a364185d640ba1a6ed583", + "230c19482c2fdfccb6b94", + "1a9a55461554e908c4fbf0", + "48b5f18a43890f525b850c", + "779b65c66a52eeb45328d2", + "3a0a69f5624f959d85e411", + "498cac7e3100df5899cd16", + "6be91a7f057434bdea3953", + "1b0ff68c5f14ee84b37e7f", + "af86674d8a1c364331ef3", + "4fadec3b4cf5617426ac33", + "5cc79f5d12d2a991f4ebd0", + "5ca7f66678a73081bd34e5", + "5efd2121bfee3a30184816", + "6b79ef63bb66f1362d8de", + "3c4dc48e3cdfd4ce2eefe9", + "1c9f92bdf4717c6880a9ba", + "168c6919206ac6ace0f625", + "27e147bc2366e607ad99bd", + "44678fb0d784f11b21a657", + "47792007d733892284fb9b", + "636079478bd1eb493d0866", + "7450197e181adf8c4f92cf", + "65a7ac7cbfcc2f6c41c2ac", + "c92faa8d02b107a1b5d50", + "1ee8fffd33bf6223d36b95", + "203c3b480852a2154fd642", + "7ba683eab937665ca29978", + "1998245099906d42a62588", + "75d1f80628c3a1c1082c91", + "1c6bd00355516b7177a93d", + "795824804b82c5e751df2b", + "2746a28b14b19ab8d24145", + "75b3fbba0880cedfe12ea", + "dfc33dec9862e861d43cc", + "5d77b3e7e323ddd35a71a5", + "7438dcc1d87bfc73ab26", + "755d342969e9fcde9fd595", + "7bca9525e525d6ded2c76f", + "d08254f4d2d5ca1a5b877", + "4d1a97d405c026a8a5aed6", + "825e4a5dedb493626e7ba", + "26c3f6eae80009e6946697", + "59b1b4d92c6ee6432bf67c", + "705cc0331aa0195cd9f6ec", + "6d83e6632fcdd8cf940ffe", + "69699a76b55d4ca99064a0", + "76201a82e565cd9ac092ed", + "49b08f20244bc64879adcb", + "2b04a0e7492ffe108c1c00", + "4de1c0244f476f355a3a91", + "1bacdadb366134c3d1a5c0", + "755b7f3a3389c861fb2d23", + "153d48f10507702bdbbfbd", + "17ef22a6ba1fe32d3ef7c0", + "6f55491282e49ce5634ba6", + "66ac85711d7e32d731c773", + "7a45d57fdc1a44af5791fe", + "1b931cd6241fc4f484ed23", + "30ffdb4a4aa7f26e29fcc9", + "54b4dc744541c38f937102", + "4413cfa8b5666fc0af877a", + "5b18e3d2fe16a9d973b934", + "173b57e939be4a4efef880", + "102e8f3d54ced5e10227ed", + "79b27c762372e476f703f7", + "37f81f265c72ca7279eb3c", + "6b11c6506832a5a8571e85", + "5b68ba6c572a6576af79a8", + "26580ddf1efe9fe3eae4e0", + "3c015f30d95c1da9c47adc", + "54c37f5e810a7c49e7a02d", + "3b8be315926a14f8200fe4", + "5334ba131913654474693a", + "245f14c58fc2f1bd38bf6d", + "3ff0891da2c6d0cb8ab6f0", + "3e61864fd19f85bd211f70", + "493f40656c80193590d2f4", + "5dbb4f6414155050573b80", + "6afe8bc3bb8509aff3c666", + "586e1bd3806f5472b98045", + "6afc9a3033b5fed5a0c3ee", + "7969c90c819c5b0080834", + "5ee2324ad6594548cd275b", + "5c6cf60aae0cfc30048ec1", + "40e1957b3947c90dc23e89", + "5846b0049ea6f32f4b2762", + "1e5217185f433bf1233d59", + "af0b8a8f75ec961c833db", + "4f4128c0856b216db55c75", + "41d953d4dc4746ec83a1f0", + "3d55ef23d8c9f8419ff28f", + "1a5f34cedfae0cde5ea0a4", + "6517d2ae1b7ba4107ba2ed", + "4839ff83b5f2ddc41b61ee", + "30ebf17f92538a33a005c5", + "7530bbdc505d301ed9040", + "46ea2e85d6ca1966d1ada4", + "78022742d8c1b58e95d935", + "6a25d7d313e7a656aee548", + "a2c3a3cc1a5dfdc5a02b7", + "2e76f32ec68bf11c44acc8", + "54aeb8675aac1a423a7140", + "dd0623ecc7bb862ebbbac", + "61d42c0be51a3d664c8df2", + "254a37a2b407cabbf8069f", + "687346ea28caf1c87376ab", + "67b1ce8dfe00f53da9491b", + "488aa158d747df0f5cd422", + "21eb89d73161656b740b6c", + "686f17e02f2d49c0e2e48", + "dad2db631732b0506f6b1", + "72e9a5baa06d4af7c9f9da", + "1cab579a1f775fb778d900", + "3c3d137503578a98196d6d", + "2a8bb0c8c3747adf31dc91", + "1cf9608a937eea1a0bb3af", + "40a3f5ad2d4a9b33e2f67f", + "147d7e964c45ec443a24fc", + "7b9587337c3feffe6974d6", + "5839527a17db25de563064", + "1160b80ff627f607bda927", + "5aaca79690a162240db985", + "c75433d8b0423b552102a", + "f46157d09593fd6ceaef5", + "20db18e6c822f683f97989", + "3e1e43759c2fbd4596b36a", + "125d9103db1d2a83e13f71", + "28a2b96944f1b1210e6bbb", + "33fd72210da605d38ab799", + "4cada2a5056e025832015c", + "365c9be3e9c7dcc814388a", + "9f4b0dce97935ef1d9158", + "2b8d9b2da99a690e7c44a7", + "fc59307a819ae8b7a3f67", + "567dff5f6f64aa1697fa0f", + "23343ed75a8de5a22fac16", + "4c2a57eb3ff167fa077ee2", + "7a2990f262218cc62c32dd", + "210cf16be9c62f7408e63d", + "49c59a03a60b57e7bac289", + "499ab94c7bb40ba492d85c", + "67437e976a93329c5b9760", + "77c405c1030a468f5abe34", + "34363c8e2f82b5fdad8c66", + "39c91d6ca89a6fa52b3be6", + "7b2f70ff56626a3003c33d", + "416b4cd1af257e44ad03fe", + "375ec3fc3fce6eb8e8ee9d", + "4fe741cddc07d380fb6143", + "67adab05fa921650ed942f", + "601f96473a856041a89ff8", + "13fc0f6b201b7368c44178", + "6f79151ea6cbf1bbe85f5d", + "5dd15f8501fbd308a231a2", + "8ab595a01941ab4070b39", + "6ad236039c2c3e149bcca2", + "40c514f5e20e67263ea899", + "10b3ac9e35f753e3c9deb", + "2d816960b0911019df6133", + "14efaca65e59726b81dbf0", + "7d98b2bd2e9168b6d2e72f", + "49639d01a55025d5b2f6ef", + "2e1479f3781e1a48fc49de", + "7d60cbfdcc63ced7661d40", + "3ec0da959b014a91e3d171", + "6e1573decbd31bd14c0615", + "2ae83fe35c42b256590f54", + "22d68d4ed1af18d8658de4", + "3153805f294e973c493b1e", + "23270a061497f9098a49ee", + "3ed51ed7c85d68db84d78a", + "788f47c4aa1ecb9b01c1a7", + "9dfe0a1feefabb0c62643", + "7376e75fa605889898fa7a", + "578a6c67a3dea7609537e0", + "146dc1fd204e259d148dfd", + "59ff3fb267f4dcf86fd4df", + "5a081e53f2beac49d1a3e5", + "37bd7e26cf4711cd149911", + "47d814d93ff8dca3c1398b", + "132d2eb133a0383d464ad2", + "30f7be09c5f39b5532dcd3", + "83b4a6c139b7fda28fc0b", + "77e2377901111b6ba92316", + "7add5048bc0984c36294e1", + "2afa4dd2f2245b7525fdf6", + "50c4c9d0b48bd147d875cd", + "6387ce1a213d98335598c0", + "52253824741dd177a674a9", + "3195d14bda042e7057d34f", + "6b849a1f17d635cf0a773f", + "7c9cfb41c0f888d000fc52", + "7dea2305f898b6d88f6821", + "43d0ab106641bd01d72cd4", + "1d5fe04c71a377f6784338", + "207b51e97aba651825b40f", + "41327dfa41486f6b995572", + "245cbb0117ba8963db7929", + "4956d4cfa3dee8e23259eb", + "49af3dd263ef8ddc7b0303", + "76dda8edbfa5a4265a1a74", + "26b516b52794658e68ab5a", + "260f0ab9a00e1e941e404f", + "3395f092181af53bb73f3e", + "17a50483229662a578fdf3", + "30e3bf91dbc04d50a032bf", + "525362bcc006730db95180", + "6e988e80d2c29dc7542de4", + "47efed21b3657d0618e28f", + "fb85baef473def8948133", + "67afcc19d0bb557a608666", + "3e1ecaa8d0631877bfedb9", + "38a68ae5efe6ac22d3f278", + "4b2a621bcd3f244dbd1aa6", + "2432bbe72c83689ef74c85", + "1aba34eed15b418d4b7f0a", + "2d2efb8be305a05b685aa3", + "cdd3df5aba4c7ba52b4cd", + "7c38756fdad7c18ef7576", + "437e569a7451bd9bbbce87", + "614a9023303ed4dd2cdfb9", + "43c088f2eb74b96d25a4a8", + "308a1daa2779a84d4db8ac", + "59f29456bbb20b47aa046f", + "4b0f09e29272f9d49c6266", + "b03e402e64c3436818402", + "40f2e74e1048db76b72516", + "1a484afbb93898190d8d03", + "6edb305f1f8f30902439c9", + "7fd2ed81931942f0ef8d50", + "402466331777b126e4d8e2", + "52d5ea798306c9e21853b2", + "765c653014c5e4b3dc3865", + "785211217f5fa1bf82b193", + "3bcee7bc9a5ca7219edfaa", + "61b023abdf63ddd6300036", + "2f305b730466b54d50855e", + "60b46e71f1f2b8376d5d29", + "745cc1be634380e90bc82", + "208b7d3e85a97a99407a38", + "1000ca68b2a0f4790d5b97", + "2ef94456619d9728490c1d", + "18347f5ec924cf4631f292", + "26b5c49d8c4e12d4b3d157", + "15e2aab3b7b69272b3c155", + "76272e758d9f83ceea908b", + "fb87766da12e75782ca77", + "57caf75d12ec817c6cddfa", + "1a04ba76b7855a5e9c289a", + "7e5eb2a4ef3434465acdeb", + "35b964532350abcbf76d9f", + "3f14484539a427ea73a1b8", + "4d10e4408b3b6761aa225", + "235ae37d20b21074f27732", + "44dd12bd0d7f960d6bd7f6", + "196185d708583cfba757f7", + "5f8e36ec1202b0292d5945", + "47d7208165498ac04fc240", + "332ea59945a5d0e73f7dc5", + "653694fe66c257988cd02a", + "3069cb41e51edac9ec2b3f", + "17e032019f0dc1c4277c0b", + "52a44d4aac2b12a44786a4", + "33bbdb9fd9d9e6cda126be", + "520cfdeb5b65ce3df47f12", + "3746df2dcaeb2f941850af", + "34b380f57ddac800a53234", + "7116294960ec1370cfa192", + "6c02da94ff6269ebf8b68", + "528f06b90d6ea98654eb1b", + "643b1783eeff5d2d9d100e", + "14e34536d861554652fc3d", + "28da7bd48db9e867715c64", + "7b233911df67c0ffe75298", + "282425a374dcf57904fcaa", + "7f873bc8523c4931739324", + "5f1584cca489de9bdcd65b", + "6862becb8f668738ac092f", + "495ccc90a936edcdb3b175", + "71dbc0d71fbcfcf1245bc2", + "5298718820a8e285437a64", + "2a9957bb174e3a8d1169ef", + "58dbbd6f088b5ff881356c", + "67ed429f48df076df817f4", + "ba3b72d702ce311cc02a", + "6415a8a79aa0ebffb6a24d", + "5b6485b2f7f41f0abf3544", + "edea2902a199d26d75bdd", + "97bac956d2b65a51260e7", + "b2c65762784255bbebc75", + "41b1881d9704918a051695", + "3939cec4c6eb132c9146a8", + "4e4622894612a0772ab9f8", + "398cbdee468f0759c375a1", + "592a4efec7cf89e527fdb", + "79ea859ae0d9bf58c8e071", + "4786c255855f792a20f869", + "272821f07dab57e4aaf0a7", + "25e016000255df0b5c8153", + "17040e8c8be515e4ea36e", + "341181b7d4d6f4e2cf9643", + "73f8a019ddb59d3f06f049", + "cbf28251298433a3abc70", + "51edf68dda1a87c4b3af7e", + "2e78ee01fc4dbe304eaea1", + "36a98de095d312e040c903", + "1c94ea576c3cfe00e40a0c", + "2969569df7efe8c61bb461", + "2b036df33feda1ac5edb68", + "3d1dbd13d46aa7f5e4c42", + "32f17d420cb00b34cd9fc3", + "79a8e47a4d897cf6b712f", + "6be705331dd40db5a995b0", + "797e5770501b190fa5f6f1", + "21d9c50ac15f9a1fc38df4", + "639eb30656278296f2b3e0", + "4b90d5d4f791e4cafea283", + "7b4912ce2f8ea6ad90baf0", + "185c0df44a167fc9bfe948", + "4c622bd5bd26bcbd487c68", + "7c4aa256f5265e9d49e8ab", + "63f8378a4c563212109ee4", + "4ca98168d36f8ab3815a02", + "411a5d336f1cca7988f319", + "34c572dd024d37c54c5648", + "249469414e604f245a56ca", + "2e9650e328b679ea03af31", + "db07432bf40360e3df399", + "2e9fc43379988881a1b064", + "752129c2d07a536bf3bb8", + "c79d219ef793e02a9f989", + "210441f8cc9b531f88fd3a", + "6bb593df2f572a23254ed6", + "55152f253ffb05575c981d", + "40734a14dd653457e54b74", + "7fcb3af03a778d48d5ac9b", + "43e02a2659ddc4d3204fd7", + "2ab0a302ecc453de7fdbe4", + "2a68ad26b94fd25b4509aa", + "46afa6e418c9bd4065cd9d", + "517123f4920304dc75317a", + "33c3a8fe7d6e90cd610695", + "1a30afeb54dea502f0310a", + "2b5280596202f4b3ee0814", + "70b50a59ebc270bb237505", + "65f71d8c8e62cbeef07daf", + "197461e90c6b70a7dda46d", + "4053f687fd270a04d092a9", + "43d235cd54423fd6135def", + "ac0f86afb7bbca8d57c4f", + "1dd4abfd6c4ed8a3ad6bbb", + "25d3735a734b777dd960b8", + "56a6cdbd81ef505320e706", + "3c1c9492a56c8c78536095", + "31ee9d29cb2f2a7eeddbc0", + "666ea50157a2d8307a0ef8", + "1472017c713a1063411e0", + "53e73a626a5de69e43d0e0", + "dcc0bec90c531be4924ef", + "6bd3a60ce037d04a7d822c", + "3ad7e93e4ab55d402a33ea", + "10db0037fd5f7d8c49aee6", + "4d29703647563e84d6ac7f", + "2555442bf058722bf0120c", + "2e274c1905f505ef9d43c1", + "46b0509f9638e9030f5895", + "4082d11934cd3944191e6d", + "3cab0ae1036c6d43311ae4", + "218c9ea39a51618b1ce10e", + "9e1bd1e36f73d0f69f697", + "5a20607ce9679fb1f266e5", + "4ae24f235a28b7f71492ce", + "7510db776aba775075e549", + "5695db84b4c92a3d6677b2", + "74e01ea265377cb713e57a", + "768cbd11024387469f6ee1", + "61b85bccf0f4316c2cec04", + "aeeaf98aedc83e6ae6cc5", + "4e175c68ed04c585f606f8", + "1ee9410958604d03f20f1f", + "127b65c61b8c8f1b9456ee", + "3d57e0a1ef4abcae8719be", + "688ea19369341f6943063f", + "1f91eb155829f1481d6da7", + "4f34769ad379d64a27233e", + "59daf69acb0d30ef2fc5db", + "1efc90353d647b1a3dfd54", + "39965be2b1bbb3ed832fdd", + "7fd47e391981aa515116c7", + "5ca9b2680bb84ff6e98b33", + "36b7f85db80800549459bd", + "16d114b00964bdc8e2e82a", + "7c1256dceb40e2f63ca4f9", + "5b4dd88e0cfc108bdc7320", + "239e94f2e5843a6e20f1bb", + "3552a76787de4570d42693", + "6f2f55effdb76df46b548a", + "6152765b747658a14d5829", + "1778273a04ac508e342b", + "75471e22b2d84fd2fe01b9", + "5d6bf6a59488555bf1342a", + "160134aa459258ff8f6285", + "17e8af02e79e7f8d2cdf99", + "4f5e7f770a4d50c69c4028", + "51fc2c3f86b8fc46a7a221", + "70d95d23dca53184d30b4b", + "4a9b685698a7674338b188", + "4d7940ea6bfaa7b282a985", + "39baaf1f520d96bfc8c1df", + "409fc384bef4b3d255371f", + "3bac7e0675e0a9967ff7da", + "5c1544633a0bf7939343d0", + "39d71478d3005e797c6913", + "153884834dca9aae7d5d2d", + "630270f2ed4331deaf63f0", + "46323a1998a54f7e0819f6", + "61c87048ea8325590bc5b1", + "1960b3a13c6cb6acb7f489", + "3956e2767e97b7703253b0", + "1b5226354071022a104a86", + "3a7ecceb35e2e9a438dbd5", + "10c81c57aed768b3285598", + "bd499ce82d93c07477fc", + "67e11e83cb547515b53701", + "171757e72adb6abd8f440b", + "590056c647987959065bd", + "4e27f64f8732105513ad9b", + "de9896eb70f1668b87fc", + "457dc9644e5b25ae6c4291", + "5a6df4a369ed81627d4fa3", + "568fd03e0a80223cd1669a", + "1e92415029559dc3ed8283", + "1cb2dabf0298f57d15e65c", + "426541c137d269fd2e2296", + "19a439abdf3f4f5eb63683", + "482af287c71050fd03632a", + "47a080b7584194b936f712", + "20d4366552d0d83219fa0d", + "4494bc9e65c8cf2a6ea51d", + "2148939cfe2757b6666fc2", + "476ef278c257202dd01711", + "3eaa7351a72b065707e47a", + "2703e4a7969073dd381cbd", + "1badf1b7dc0b73e0bf8b67", + "47d847bd96fbfc9c221fd4", + "13637e15b786797995ba49", + "5e842bbb537167f75451a7", + "3b228f46cdc0e8a979b45e", + "2fdd94b55dd5fb9a3915f5", + "1cca04897dbffe7f26f2ec", + "67a8cdbece1aca4e55ba72", + "47ba42dd06a62256ee8c8b", + "3288681f4d08858009187c", + "69412d8563ffa7e83b0ef0", + "240e2e38e41f3b6530a267", + "12e92ef014e8d7fbb8d23e", + "45440750f90776251263b4", + "3a8965cf80aa6c4410dfab", + "559bf101b9cff724b929cd", + "280f08134d28252bd0b713" }; -static const char *RootsInv[] = { - "1", - "280f08134d28252bd0b713", - "559bf101b9cff724b929cd", - "3a8965cf80aa6c4410dfab", - "45440750f90776251263b4", - "12e92ef014e8d7fbb8d23e", - "240e2e38e41f3b6530a267", - "69412d8563ffa7e83b0ef0", - "3288681f4d08858009187c", - "47ba42dd06a62256ee8c8b", - "67a8cdbece1aca4e55ba72", - "1cca04897dbffe7f26f2ec", - "2fdd94b55dd5fb9a3915f5", - "3b228f46cdc0e8a979b45e", - "5e842bbb537167f75451a7", - "13637e15b786797995ba49", - "47d847bd96fbfc9c221fd4", - "1badf1b7dc0b73e0bf8b67", - "2703e4a7969073dd381cbd", - "3eaa7351a72b065707e47a", - "476ef278c257202dd01711", - "2148939cfe2757b6666fc2", - "4494bc9e65c8cf2a6ea51d", - "20d4366552d0d83219fa0d", - "47a080b7584194b936f712", - "482af287c71050fd03632a", - "19a439abdf3f4f5eb63683", - "426541c137d269fd2e2296", - "1cb2dabf0298f57d15e65c", - "1e92415029559dc3ed8283", - "568fd03e0a80223cd1669a", - "5a6df4a369ed81627d4fa3", - "457dc9644e5b25ae6c4291", - "de9896eb70f1668b87fc", - "4e27f64f8732105513ad9b", - "590056c647987959065bd", - "171757e72adb6abd8f440b", - "67e11e83cb547515b53701", - "bd499ce82d93c07477fc", - "10c81c57aed768b3285598", - "3a7ecceb35e2e9a438dbd5", - "1b5226354071022a104a86", - "3956e2767e97b7703253b0", - "1960b3a13c6cb6acb7f489", - "61c87048ea8325590bc5b1", - "46323a1998a54f7e0819f6", - "630270f2ed4331deaf63f0", - "153884834dca9aae7d5d2d", - "39d71478d3005e797c6913", - "5c1544633a0bf7939343d0", - "3bac7e0675e0a9967ff7da", - "409fc384bef4b3d255371f", - "39baaf1f520d96bfc8c1df", - "4d7940ea6bfaa7b282a985", - "4a9b685698a7674338b188", - "70d95d23dca53184d30b4b", - "51fc2c3f86b8fc46a7a221", - "4f5e7f770a4d50c69c4028", - "17e8af02e79e7f8d2cdf99", - "160134aa459258ff8f6285", - "5d6bf6a59488555bf1342a", - "75471e22b2d84fd2fe01b9", - "1778273a04ac508e342b", - "6152765b747658a14d5829", - "6f2f55effdb76df46b548a", - "3552a76787de4570d42693", - "239e94f2e5843a6e20f1bb", - "5b4dd88e0cfc108bdc7320", - "7c1256dceb40e2f63ca4f9", - "16d114b00964bdc8e2e82a", - "36b7f85db80800549459bd", - "5ca9b2680bb84ff6e98b33", - "7fd47e391981aa515116c7", - "39965be2b1bbb3ed832fdd", - "1efc90353d647b1a3dfd54", - "59daf69acb0d30ef2fc5db", - "4f34769ad379d64a27233e", - "1f91eb155829f1481d6da7", - "688ea19369341f6943063f", - "3d57e0a1ef4abcae8719be", - "127b65c61b8c8f1b9456ee", - "1ee9410958604d03f20f1f", - "4e175c68ed04c585f606f8", - "aeeaf98aedc83e6ae6cc5", - "61b85bccf0f4316c2cec04", - "768cbd11024387469f6ee1", - "74e01ea265377cb713e57a", - "5695db84b4c92a3d6677b2", - "7510db776aba775075e549", - "4ae24f235a28b7f71492ce", - "5a20607ce9679fb1f266e5", - "9e1bd1e36f73d0f69f697", - "218c9ea39a51618b1ce10e", - "3cab0ae1036c6d43311ae4", - "4082d11934cd3944191e6d", - "46b0509f9638e9030f5895", - "2e274c1905f505ef9d43c1", - "2555442bf058722bf0120c", - "4d29703647563e84d6ac7f", - "10db0037fd5f7d8c49aee6", - "3ad7e93e4ab55d402a33ea", - "6bd3a60ce037d04a7d822c", - "dcc0bec90c531be4924ef", - "53e73a626a5de69e43d0e0", - "1472017c713a1063411e0", - "666ea50157a2d8307a0ef8", - "31ee9d29cb2f2a7eeddbc0", - "3c1c9492a56c8c78536095", - "56a6cdbd81ef505320e706", - "25d3735a734b777dd960b8", - "1dd4abfd6c4ed8a3ad6bbb", - "ac0f86afb7bbca8d57c4f", - "43d235cd54423fd6135def", - "4053f687fd270a04d092a9", - "197461e90c6b70a7dda46d", - "65f71d8c8e62cbeef07daf", - "70b50a59ebc270bb237505", - "2b5280596202f4b3ee0814", - "1a30afeb54dea502f0310a", - "33c3a8fe7d6e90cd610695", - "517123f4920304dc75317a", - "46afa6e418c9bd4065cd9d", - "2a68ad26b94fd25b4509aa", - "2ab0a302ecc453de7fdbe4", - "43e02a2659ddc4d3204fd7", - "7fcb3af03a778d48d5ac9b", - "40734a14dd653457e54b74", - "55152f253ffb05575c981d", - "6bb593df2f572a23254ed6", - "210441f8cc9b531f88fd3a", - "c79d219ef793e02a9f989", - "752129c2d07a536bf3bb8", - "2e9fc43379988881a1b064", - "db07432bf40360e3df399", - "2e9650e328b679ea03af31", - "249469414e604f245a56ca", - "34c572dd024d37c54c5648", - "411a5d336f1cca7988f319", - "4ca98168d36f8ab3815a02", - "63f8378a4c563212109ee4", - "7c4aa256f5265e9d49e8ab", - "4c622bd5bd26bcbd487c68", - "185c0df44a167fc9bfe948", - "7b4912ce2f8ea6ad90baf0", - "4b90d5d4f791e4cafea283", - "639eb30656278296f2b3e0", - "21d9c50ac15f9a1fc38df4", - "797e5770501b190fa5f6f1", - "6be705331dd40db5a995b0", - "79a8e47a4d897cf6b712f", - "32f17d420cb00b34cd9fc3", - "3d1dbd13d46aa7f5e4c42", - "2b036df33feda1ac5edb68", - "2969569df7efe8c61bb461", - "1c94ea576c3cfe00e40a0c", - "36a98de095d312e040c903", - "2e78ee01fc4dbe304eaea1", - "51edf68dda1a87c4b3af7e", - "cbf28251298433a3abc70", - "73f8a019ddb59d3f06f049", - "341181b7d4d6f4e2cf9643", - "17040e8c8be515e4ea36e", - "25e016000255df0b5c8153", - "272821f07dab57e4aaf0a7", - "4786c255855f792a20f869", - "79ea859ae0d9bf58c8e071", - "592a4efec7cf89e527fdb", - "398cbdee468f0759c375a1", - "4e4622894612a0772ab9f8", - "3939cec4c6eb132c9146a8", - "41b1881d9704918a051695", - "b2c65762784255bbebc75", - "97bac956d2b65a51260e7", - "edea2902a199d26d75bdd", - "5b6485b2f7f41f0abf3544", - "6415a8a79aa0ebffb6a24d", - "ba3b72d702ce311cc02a", - "67ed429f48df076df817f4", - "58dbbd6f088b5ff881356c", - "2a9957bb174e3a8d1169ef", - "5298718820a8e285437a64", - "71dbc0d71fbcfcf1245bc2", - "495ccc90a936edcdb3b175", - "6862becb8f668738ac092f", - "5f1584cca489de9bdcd65b", - "7f873bc8523c4931739324", - "282425a374dcf57904fcaa", - "7b233911df67c0ffe75298", - "28da7bd48db9e867715c64", - "14e34536d861554652fc3d", - "643b1783eeff5d2d9d100e", - "528f06b90d6ea98654eb1b", - "6c02da94ff6269ebf8b68", - "7116294960ec1370cfa192", - "34b380f57ddac800a53234", - "3746df2dcaeb2f941850af", - "520cfdeb5b65ce3df47f12", - "33bbdb9fd9d9e6cda126be", - "52a44d4aac2b12a44786a4", - "17e032019f0dc1c4277c0b", - "3069cb41e51edac9ec2b3f", - "653694fe66c257988cd02a", - "332ea59945a5d0e73f7dc5", - "47d7208165498ac04fc240", - "5f8e36ec1202b0292d5945", - "196185d708583cfba757f7", - "44dd12bd0d7f960d6bd7f6", - "235ae37d20b21074f27732", - "4d10e4408b3b6761aa225", - "3f14484539a427ea73a1b8", - "35b964532350abcbf76d9f", - "7e5eb2a4ef3434465acdeb", - "1a04ba76b7855a5e9c289a", - "57caf75d12ec817c6cddfa", - "fb87766da12e75782ca77", - "76272e758d9f83ceea908b", - "15e2aab3b7b69272b3c155", - "26b5c49d8c4e12d4b3d157", - "18347f5ec924cf4631f292", - "2ef94456619d9728490c1d", - "1000ca68b2a0f4790d5b97", - "208b7d3e85a97a99407a38", - "745cc1be634380e90bc82", - "60b46e71f1f2b8376d5d29", - "2f305b730466b54d50855e", - "61b023abdf63ddd6300036", - "3bcee7bc9a5ca7219edfaa", - "785211217f5fa1bf82b193", - "765c653014c5e4b3dc3865", - "52d5ea798306c9e21853b2", - "402466331777b126e4d8e2", - "7fd2ed81931942f0ef8d50", - "6edb305f1f8f30902439c9", - "1a484afbb93898190d8d03", - "40f2e74e1048db76b72516", - "b03e402e64c3436818402", - "4b0f09e29272f9d49c6266", - "59f29456bbb20b47aa046f", - "308a1daa2779a84d4db8ac", - "43c088f2eb74b96d25a4a8", - "614a9023303ed4dd2cdfb9", - "437e569a7451bd9bbbce87", - "7c38756fdad7c18ef7576", - "cdd3df5aba4c7ba52b4cd", - "2d2efb8be305a05b685aa3", - "1aba34eed15b418d4b7f0a", - "2432bbe72c83689ef74c85", - "4b2a621bcd3f244dbd1aa6", - "38a68ae5efe6ac22d3f278", - "3e1ecaa8d0631877bfedb9", - "67afcc19d0bb557a608666", - "fb85baef473def8948133", - "47efed21b3657d0618e28f", - "6e988e80d2c29dc7542de4", - "525362bcc006730db95180", - "30e3bf91dbc04d50a032bf", - "17a50483229662a578fdf3", - "3395f092181af53bb73f3e", - "260f0ab9a00e1e941e404f", - "26b516b52794658e68ab5a", - "76dda8edbfa5a4265a1a74", - "49af3dd263ef8ddc7b0303", - "4956d4cfa3dee8e23259eb", - "245cbb0117ba8963db7929", - "41327dfa41486f6b995572", - "207b51e97aba651825b40f", - "1d5fe04c71a377f6784338", - "43d0ab106641bd01d72cd4", - "7dea2305f898b6d88f6821", - "7c9cfb41c0f888d000fc52", - "6b849a1f17d635cf0a773f", - "3195d14bda042e7057d34f", - "52253824741dd177a674a9", - "6387ce1a213d98335598c0", - "50c4c9d0b48bd147d875cd", - "2afa4dd2f2245b7525fdf6", - "7add5048bc0984c36294e1", - "77e2377901111b6ba92316", - "83b4a6c139b7fda28fc0b", - "30f7be09c5f39b5532dcd3", - "132d2eb133a0383d464ad2", - "47d814d93ff8dca3c1398b", - "37bd7e26cf4711cd149911", - "5a081e53f2beac49d1a3e5", - "59ff3fb267f4dcf86fd4df", - "146dc1fd204e259d148dfd", - "578a6c67a3dea7609537e0", - "7376e75fa605889898fa7a", - "9dfe0a1feefabb0c62643", - "788f47c4aa1ecb9b01c1a7", - "3ed51ed7c85d68db84d78a", - "23270a061497f9098a49ee", - "3153805f294e973c493b1e", - "22d68d4ed1af18d8658de4", - "2ae83fe35c42b256590f54", - "6e1573decbd31bd14c0615", - "3ec0da959b014a91e3d171", - "7d60cbfdcc63ced7661d40", - "2e1479f3781e1a48fc49de", - "49639d01a55025d5b2f6ef", - "7d98b2bd2e9168b6d2e72f", - "14efaca65e59726b81dbf0", - "2d816960b0911019df6133", - "10b3ac9e35f753e3c9deb", - "40c514f5e20e67263ea899", - "6ad236039c2c3e149bcca2", - "8ab595a01941ab4070b39", - "5dd15f8501fbd308a231a2", - "6f79151ea6cbf1bbe85f5d", - "13fc0f6b201b7368c44178", - "601f96473a856041a89ff8", - "67adab05fa921650ed942f", - "4fe741cddc07d380fb6143", - "375ec3fc3fce6eb8e8ee9d", - "416b4cd1af257e44ad03fe", - "7b2f70ff56626a3003c33d", - "39c91d6ca89a6fa52b3be6", - "34363c8e2f82b5fdad8c66", - "77c405c1030a468f5abe34", - "67437e976a93329c5b9760", - "499ab94c7bb40ba492d85c", - "49c59a03a60b57e7bac289", - "210cf16be9c62f7408e63d", - "7a2990f262218cc62c32dd", - "4c2a57eb3ff167fa077ee2", - "23343ed75a8de5a22fac16", - "567dff5f6f64aa1697fa0f", - "fc59307a819ae8b7a3f67", - "2b8d9b2da99a690e7c44a7", - "9f4b0dce97935ef1d9158", - "365c9be3e9c7dcc814388a", - "4cada2a5056e025832015c", - "33fd72210da605d38ab799", - "28a2b96944f1b1210e6bbb", - "125d9103db1d2a83e13f71", - "3e1e43759c2fbd4596b36a", - "20db18e6c822f683f97989", - "f46157d09593fd6ceaef5", - "c75433d8b0423b552102a", - "5aaca79690a162240db985", - "1160b80ff627f607bda927", - "5839527a17db25de563064", - "7b9587337c3feffe6974d6", - "147d7e964c45ec443a24fc", - "40a3f5ad2d4a9b33e2f67f", - "1cf9608a937eea1a0bb3af", - "2a8bb0c8c3747adf31dc91", - "3c3d137503578a98196d6d", - "1cab579a1f775fb778d900", - "72e9a5baa06d4af7c9f9da", - "dad2db631732b0506f6b1", - "686f17e02f2d49c0e2e48", - "21eb89d73161656b740b6c", - "488aa158d747df0f5cd422", - "67b1ce8dfe00f53da9491b", - "687346ea28caf1c87376ab", - "254a37a2b407cabbf8069f", - "61d42c0be51a3d664c8df2", - "dd0623ecc7bb862ebbbac", - "54aeb8675aac1a423a7140", - "2e76f32ec68bf11c44acc8", - "a2c3a3cc1a5dfdc5a02b7", - "6a25d7d313e7a656aee548", - "78022742d8c1b58e95d935", - "46ea2e85d6ca1966d1ada4", - "7530bbdc505d301ed9040", - "30ebf17f92538a33a005c5", - "4839ff83b5f2ddc41b61ee", - "6517d2ae1b7ba4107ba2ed", - "1a5f34cedfae0cde5ea0a4", - "3d55ef23d8c9f8419ff28f", - "41d953d4dc4746ec83a1f0", - "4f4128c0856b216db55c75", - "af0b8a8f75ec961c833db", - "1e5217185f433bf1233d59", - "5846b0049ea6f32f4b2762", - "40e1957b3947c90dc23e89", - "5c6cf60aae0cfc30048ec1", - "5ee2324ad6594548cd275b", - "7969c90c819c5b0080834", - "6afc9a3033b5fed5a0c3ee", - "586e1bd3806f5472b98045", - "6afe8bc3bb8509aff3c666", - "5dbb4f6414155050573b80", - "493f40656c80193590d2f4", - "3e61864fd19f85bd211f70", - "3ff0891da2c6d0cb8ab6f0", - "245f14c58fc2f1bd38bf6d", - "5334ba131913654474693a", - "3b8be315926a14f8200fe4", - "54c37f5e810a7c49e7a02d", - "3c015f30d95c1da9c47adc", - "26580ddf1efe9fe3eae4e0", - "5b68ba6c572a6576af79a8", - "6b11c6506832a5a8571e85", - "37f81f265c72ca7279eb3c", - "79b27c762372e476f703f7", - "102e8f3d54ced5e10227ed", - "173b57e939be4a4efef880", - "5b18e3d2fe16a9d973b934", - "4413cfa8b5666fc0af877a", - "54b4dc744541c38f937102", - "30ffdb4a4aa7f26e29fcc9", - "1b931cd6241fc4f484ed23", - "7a45d57fdc1a44af5791fe", - "66ac85711d7e32d731c773", - "6f55491282e49ce5634ba6", - "17ef22a6ba1fe32d3ef7c0", - "153d48f10507702bdbbfbd", - "755b7f3a3389c861fb2d23", - "1bacdadb366134c3d1a5c0", - "4de1c0244f476f355a3a91", - "2b04a0e7492ffe108c1c00", - "49b08f20244bc64879adcb", - "76201a82e565cd9ac092ed", - "69699a76b55d4ca99064a0", - "6d83e6632fcdd8cf940ffe", - "705cc0331aa0195cd9f6ec", - "59b1b4d92c6ee6432bf67c", - "26c3f6eae80009e6946697", - "825e4a5dedb493626e7ba", - "4d1a97d405c026a8a5aed6", - "d08254f4d2d5ca1a5b877", - "7bca9525e525d6ded2c76f", - "755d342969e9fcde9fd595", - "7438dcc1d87bfc73ab26", - "5d77b3e7e323ddd35a71a5", - "dfc33dec9862e861d43cc", - "75b3fbba0880cedfe12ea", - "2746a28b14b19ab8d24145", - "795824804b82c5e751df2b", - "1c6bd00355516b7177a93d", - "75d1f80628c3a1c1082c91", - "1998245099906d42a62588", - "7ba683eab937665ca29978", - "203c3b480852a2154fd642", - "1ee8fffd33bf6223d36b95", - "c92faa8d02b107a1b5d50", - "65a7ac7cbfcc2f6c41c2ac", - "7450197e181adf8c4f92cf", - "636079478bd1eb493d0866", - "47792007d733892284fb9b", - "44678fb0d784f11b21a657", - "27e147bc2366e607ad99bd", - "168c6919206ac6ace0f625", - "1c9f92bdf4717c6880a9ba", - "3c4dc48e3cdfd4ce2eefe9", - "6b79ef63bb66f1362d8de", - "5efd2121bfee3a30184816", - "5ca7f66678a73081bd34e5", - "5cc79f5d12d2a991f4ebd0", - "4fadec3b4cf5617426ac33", - "af86674d8a1c364331ef3", - "1b0ff68c5f14ee84b37e7f", - "6be91a7f057434bdea3953", - "498cac7e3100df5899cd16", - "3a0a69f5624f959d85e411", - "779b65c66a52eeb45328d2", - "48b5f18a43890f525b850c", - "1a9a55461554e908c4fbf0", - "230c19482c2fdfccb6b94", - "1a364185d640ba1a6ed583", - "1c72fdd679cfcd10e369be", - "56853e4d2e614e1924d27a", - "10cc655b268878a4e8e081", - "3c71a5e6f6b431bc524a53", - "7b274f32f2cbfe03031cb0", - "64adff5211c520e76cfa93", - "621edd8ea6ff7136526540", - "7f8ad9957e40808881a192", - "76c881f1a372f21e829095", - "5027d58d8950e307548d14", - "122225a7053b175027361a", - "627a4795d0c0df1d84d13a", - "4a5333a5e1c04b8bdfa257", - "4555d38c19f123cccb6fb4", - "bf09d6ff46adc21d04951", - "bfe2f259223ccddac13b3", - "4167a3ca5253556f128ea6", - "1d3c95c9d8462d4c467220", - "48e1272ba911cad7536a1", - "59b759ca3a67e4725b5f84", - "53cc3acdd810a96c3160cb", - "6abf077f6636ceee313734", - "226c7c98f219b40ea94b66", - "54dcbbc689dad12df77730", - "5abf04c6f95d64b6c414", - "50774e378282fd09459eb4", - "66895605da5092de3d2b87", - "3bb5af245e5d40c6fc15e3", - "6e388c53aaae7d287eebd5", - "446d6309025414bad0aee1", - "6a40f14b7a50eeca571bae", - "6d925493d403647cc0a7ba", - "73f933fe401d564be0efd3", - "15aba357d612d87099180d", - "5c20428f433fbf0c9ab374", - "4871087f3b2cd3c0f24c3e", - "4eea383bfa391bcb14540", - "658769c97f8b8945ac2878", - "4a05e03567ac78048832e8", - "5e4b991cdcf27f65105596", - "32e5746a212d6238682c00", - "26436c96779bbae9c15fae", - "290cc13b5edc05d863546", - "69714524521e343bc3692d", - "3ecd876c819b78567f7fa4", - "2abf897aba93d347d6e2db", - "62f83959d672cbfe7201a", - "1a54e98271fd5720e1bc63", - "2029341ddfdbd9f668612", - "572930c1df7ba238dfc9cd", - "1b71574f7c567d707d0e82", - "509b53b07e607cbcf6e79b", - "682583fe078ff76c962922", - "2f0c8ecc959b7521936666", - "621bfd4a39ee713781e554", - "3712172b56577089f4c773", - "208fb7a4ffec7d8d1e5be6", - "1a5e08fda45015af7feba5", - "172bc617da9e1aa348e114", - "427af6fbf5578c6104b255", - "522de20b2431d6ac8f42fb", - "6ee2946ba009641ad73037", - "73e027017f2dbdbc204a16", - "3d88de9f1c15bfd7b6363b", - "36c8b1aaf274cca356ae2f", - "e050d10f9ab1681fbdc06", - "3cd72e80ffad615f09526a", - "2b913687a118d5d595277b", - "22af1fffca9aa4b2ba234a", - "7b4ac8e7f9ffbf17f0627f", - "57d57f4721fb6be3b38e99", - "c98c97ab7b4b0cb756894", - "2248d63b93978222916f1b", - "53528c9bfa6f5405d66497", - "5e45b3a532e82a603df12b", - "6799fa1f9cffb381bd6c8c", - "5097857cdd82d2df144dda", - "4f540ba10fdacad19fee6f", - "15891c14bba25257cb14ef", - "eb947683c26db8dac2f36", - "6b497ffe240d0867d5d7ef", - "2beed154412bd52cf1c83c", - "39824b01dda7b8ada90cc2", - "5afcdfdab7a5b6864efc6d", - "743eb61998341a5e892884", - "745ca85c76435eb7ba81ad", - "4b223517b6c7cd85cb43d1", - "51e8f647af3880d2b77ccd", - "6a24f8897d3040e8fb1da8", - "57f40a819546afc89fc2ce", - "6b0dc0d5521d21af0ccaf4", - "282f326b1fcbfb463ba836", - "4d7d33eaba361883277544", - "298af75c2d584b01ccc6a6", - "692752e677cdaba7d636c2", - "277575523998439f834d3", - "1aee70e483c99574480349", - "18991d6f38c445ab4b38f1", - "5552617d9eaca45155f490", - "3459971422155f9703c78c", - "40678fa2d309cb9417f68f", - "2be59650bf9aa57c249937", - "5ea38165e28694c8629ccb", - "3e6265ca213c1a0be64512", - "69c96f5702ae4eecc6f341", - "62e9a332653e1b103db5cf", - "62870c281778214067b40e", - "14bde3f9984cc98dc83f60", - "5338be8d9f87d3f2e46b2e", - "5e7785eebda5c8e2f0247b", - "24183bf26908368eb41547", - "51f9e6d75a3c5264312643", - "4c67268f528ba7e8c34a0", - "708324dd5e787ea3d43a21", - "75b09479e265b9f0ac9a5b", - "7972b4774882051f2d85a4", - "31be6678e513813e0e676c", - "170a54e825e33a2265d3cb", - "66fecdf77d13ff6c0b25a4", - "923121ae3af782c934df4", - "473c4bff7362fbbd2049ff", - "61249154ca21ee2b75deb1", - "23ac86fba80f09945d51d2", - "19b52abcac8b60d5349efc", - "3a9c7a7d5782f84fd4620f", - "674fde01f6057423c31a9a", - "5533d7d78826353c79c73e", - "42e88e9f66659afa2a393", - "18e83fe885c9bab518bb97", - "1ccb03c008f2e822848880", - "3665e544d5ec7ed8868a1b", - "6b25a8073bc36b2af4c2b1", - "7b5ec7e3346c3cb243b356", - "34b484cdb4cebe6aff839", - "260d3af59b4f3d5c208bbf", - "3d946cf498fbed2d965f70", - "4755035ba4d9924118903c", - "4a29c3e62c947a4a1e99b9", - "4edfb060e1dacbd449d726", - "29f1e17550354ceae49f99", - "247f391e5a3b234cf19ccc", - "7e2be12d72782db9e725dd", - "47d8e4eb9811f9d409ea40", - "5488a723f6ba5cf9800543", - "304cc216ed2272d07c7f80", - "3292c0c9fda6887e4ad161", - "24af65fef90e2f99e03cae", - "2c250894e17e7f4b0dd", - "77a73ba77b4ed622a17e87", - "f36396be6cc745bba9473", - "683a5c6214b92efde4aafb", - "55247bc5a72b8d3e89234b", - "6747e95b215a546a339b7", - "178fa57d907fddb0fe3cca", - "748df460f8594e0bf1ab20", - "3b409dc537f82b36a0b80a", - "69150cde40be119caa92bb", - "48ef84f7c351ecdc951b2d", - "4e162f9f85bd081abd7380", - "32dc0a137f654afa8bd8fc", - "6f59efef27dbd92df6f652", - "645d789e2ca881eb3474c9", - "73a88b6c78ebe25a0f02da", - "3501255a6a3473cf6ac042", - "4026f1042b0f5b1e940a78", - "364b7fe165d59b5d916e2f", - "daa197fa1e9b3068f7333", - "1d51d9201dd8c5066bb7d1", - "1e7a055357b6580f4a7b9", - "6f33938b3b060336c57082", - "6ad4c1af807487676eed8c", - "6a5c41dd17f1f090be79f9", - "2b1a4dba7447b02833bcc5", - "1a939b8af79d6b9d1e57e0", - "339fe9b069fdcbe6f3e985", - "55e838d685f75c7c6b5f20", - "38102211c805f10960d5ba", - "6f9024d8cdd8d69ef10bf7", - "2db5ff229cb2d0a85b8393", - "7e1946c78347049b735318", - "5a2d6c9f89fb24cf28d1b3", - "7d5f8fcc1cf99dc3131c84", - "68719eec758c692aaaddb3", - "a5582fe7b241700d09fbc", - "3de183e6b991f7b8085160", - "cd47f8baa501aac7b0989", - "658a9098281c199cd165fd", - "476085adcac943f7253ad3", - "45f39b8c67c74dfb911f44", - "3cb90317e0fd78744bd72b", - "509c14f0517edd55968bc1", - "7a6cf71a247a9aa2ad1f3d", - "594ab65a623ca11a1d847f", - "32765eba5563b5336b4375", - "e4ce3641fd893553aeebb", - "e73b5b515611f25e496d1", - "ddd508394009eefde3ac7", - "b4aa58f86a462da2ed07", - "4d562b2b0bde307c0edc87", - "2c30e99c7b2606982311b7", - "3a997ef0ad242391b526f9", - "4f754c5d3b280b20bc95d0", - "375f02bea7dda994d93044", - "5bd335a49bc5a06867e5e1", - "63d746c096cfab5f984c70", - "25d324d633986f4baae0fd", - "2175a06a641d5e8ad33646", - "403c1a7f2d528ab5d343b9", - "1429ba4cc3fbeac84cae7b", - "4fe62d365b58ffaa0d2201", - "6bd057cf4845772f81f71e", - "38dd92596a9fd54920876d", - "ffbb4d4d7cd961d36be9b", - "3910da787142c54f4f9b2f", - "2a843c02b5e59799422e65", - "4f459e6fecc9cadb8e977", - "374bc74be1e4381a79910f", - "4656a2b830782828314373", - "583e484be506b8efea96b4", - "36d97c131b997ecd7866ef", - "40066cef89d0c82982356c", - "3301553132b8af815a8ed7", - "475c6525a253fe4a455211", - "7215cad82f761314bbdd1e", - "784f7b46f80b03fd06242c", - "2fc0729bbc7485664f21f9", - "62658893411360a21b6bfa", - "775ff949792463791cf8ab", - "6bbcfc26c4e8fa7b836095", - "14a9e816ead24aab2e6645", - "6467af1a0f07013b2e9849", - "5f019291ccdeabcd687ce5", - "2311c97b29ff503887b251", - "623f56668cc8a093bdba7e", - "3b890cc2ea1882c16138ef", - "6e0d3cb0378f9f523dd7ca", - "e50ab5db695f894b26597", - "500de5789e46431a14b08d", - "74a3895c1173d1100e060", - "28c70cf1a34bf4b12fc1a1", - "260202888a368af1bf27f0", - "49f6551bb5a630f7f3a91", - "35984ab233bfbbdc2149d0", - "7715808f58e52b93fbd9f4", - "7a35b4347e2b2fcfef4e8a", - "696a995b7f1bd2337f9c55", - "765220bfddbe009c12884", - "6c4e919619ba3e8fcc083f", - "6908cd3a0537e6d9de224b", - "8cecd81b395199379b860", - "73475afc8917dfb47ca158", - "671133a56bfab71842e1aa", - "4356f96a535f02cd557790", - "d73559f9e34900d6994e0", - "4299b7c55998b524a2963e", - "6df756715e22975feac139", - "2e795b59317cae4c039946", - "638a87cbb628cc2744b5a", - "2d0786ef10819221e8e925", - "285121b3579e1afaecea17", - "f0daaf67c2422477284d4", - "df5585842155fda65c5ad", - "41824effd56ee95a25ffcf", - "5a2e3e7ac883c32720fb5f", - "786bd6b0d956c71e3d0c41", - "2dd9e647cd7caac396218d", - "32267a0d010a3ac60d956b", - "3bd14b5c954fd788df3e2f", - "55d4eceed6862d8b7edf73", - "32bc07a00fc1c32e790cff", - "e16e90086dfb42533696c", - "58f251e3a335055f8d1702", - "45d0bbd0c4c565d517f4d9", - "47cb5e48534f0fa269ac37", - "23591be47ead61c7626094", - "4e9b8b836aefbcc76074a3", - "7499dfe49d22092ecbaacd", - "422c99318e0e012bdf3cdb", - "6dbec10ac45803905232cc", - "5f091c9040f8e8b4af8c6a", - "49dd9e128368a6e8f31565", - "631d5fa433132c920e949d", - "4a728ba1f43b41e3c8ba7b", - "5de44a501f899626f11ecb", - "1db2b63fb5b72bd2913b9b", - "75c3040748861ea4157368", - "5714f7d7bb3f12d88adae1", - "3382f247e6cbcf48a8be0c", - "436134e757c46fe077e8fd", - "ca5fc0de7c8f0742fa11a", - "324b0e59fd313b7b066991", - "fca82540d3cb37cfe38de", - "71310c65e10b4b2e1f3924", - "53034f778656513538ce93", - "6e8a28f3d3f87aa2548dbc", - "792ab4b2a318b2229df59", - "700ac125ecd365c309339c", - "d7315bcace04536b59c5c", - "5f9fe5fab5062ae9d40550", - "7ed8ee73ca5507f25bd5aa", - "6247c20f5e97453bb71b09", - "463e980411d809a1713383", - "546f06ab10360a76005c9e", - "1c0a01fb60b92af636be29", - "a5385b7f7d2a505f37187", - "296401a6101dec9b48a81a", - "38aece2fe0c1923c569603", - "e966e5d5e80ac9dc377a2", - "7eaf3d6220ab7c049341fb", - "1a01c5dd382ca52c0f8a1a", - "68ab0ae55863c4f8044101", - "75b29426909e9c8294f365", - "39fc8d30c95dd0494e9be3", - "3c234bbaf5da9465f9498e", - "7ef05035c2a08e050870e7", - "7e880bc1729d1783a14627", - "3df3e3ff8b5241f9f120b6", - "61c60fa253a8977e213d6c", - "dcb3217133998c35879b7", - "19e87845fee8ee9d86794a", - "1b8c24041b5c09c2ff1c0f", - "1d4d18f2bee14ee417596c", - "5197b486ae5dad9284702a", - "7a4b513ca25dc5d887768d", - "2e1d98165a5897b1482cbe", - "494c96ddeebc9c314fa5db", - "29785bd232aa4bcde009aa", - "42d71e3ed0639f1b07231a", - "1439532a6d3fdff49361fa", - "8c59c1948361c413eed8f", - "2c9401cd53725f84e2c421", - "5eb9037bc76a6930985737", - "6d5d0573b2f9596b50b73b", - "36121cc69943c0f23f8a85", - "308787b80145ee403c389d", - "74d978e8d6a9ce6def9aa3", - "34242d89a6cc1d4e30fa9e", - "6106124e06a73207e84629", - "1174d8cdaeecfc5b7908d0", - "49f7df71bb684bf5a54c61", - "53b453f5f30f900af808e3", - "7b4210ea990dbb2b80bb4", - "232c5e33740871b389c8ba", - "3e748cccf5c4b2e587b8b2", - "2078bac214b712936de507", - "426ece55a7fd1d858414a0", - "1eac63084c7797618dd9f7", - "59fdecdacfa91d60fd391e", - "589758587c26455b22331e", - "19e1cce82f85eff6f6b24", - "16d83b4ed79a537102c236", - "4ad2dfbccfebf4c881dcf6", - "1851d531ca021ad6f2b572", - "1c85ed9416af845bb8e82", - "5cf912fba9a563060d7b3f", - "14c7f40a28e01adc5ae1b4", - "15131878551adae4b04c53", - "ddf6be61ce9c04533277", - "48938572f05f540b474485", - "465d9407cc9bc6456e974d", - "1df3eb49ffac499fc5f3b6", - "7e698a24ee9aa726fc4b0b", - "53e99cd5ced120123b808f", - "66ba97928f262067fec230", - "1d1b1bb20ae40ee8d35505", - "22cd6c35ab2195c56794f9", - "1ef2f8aa8266e26254215a", - "14da7875e13efd461f7c10", - "22d6cba0f681e23fc64382", - "682b3c7ed60ad7c985a3a", - "244d1131736a5aea351d17", - "3ae16fb3fb77d48c6adcc3", - "3253e31b47819fbcec75b4", - "507a6d1fd108a63234b38f", - "3e2cbdf24bd5900348312", - "34f2e009d684c876c246fb", - "bb247081da09643c00d36", - "32a426cd7460f9e5c5e7", - "48082cdc2a40ccd11ae434", - "1d616376b444140f9acd68", - "72bd80f062eb130b42b044", - "e1e55a565534c74a109fc", - "49e01d719bf13fd52369ee", - "2ae496e8d9399061460619", - "7adc118469443d4f7084b2", - "7ad19421f012d132850842", - "45b5b538c44c73f3bf515f", - "5f8307f0589178f70f7238", - "54018c8917549d050c00a8", - "4700bc9de4804ec44122f", - "d922a909e3b3afea5fe08", - "46ea38e0c4bb849b39baee", - "7b87e87e1438c6126ab1cc", - "499667b1e22348ac584789", - "137f8e05276cc8f9180095", - "5accf03c1a20af1120832d", - "4e94399e1765146189df5b", - "55fca6cb45a0501d1c50ba", - "2ea5fa6c2e19e6ee7add96", - "d8e9fae4ec5d3e7913712", - "767f863c9bfc5fd6540f44", - "477273c36a749543489547", - "4265efdcec74f163498291", - "43f53558dbb8a25ad757e", - "7b5d99de82bacb33af7ee8", - "1d4515e4768ff5c6b4178f", - "2057d9029cad07c3d344a3", - "e419f0eced24d03400fbc", - "2e30617b0abeb387001867", - "603f9b3bc6733094104e23", - "fa6bb9b4b92165346e0ff", - "321ccac2ccfd73a0b28c6d", - "6af9f591969edf6d33a899", - "5ebda7b44a30093e22fee3", - "150cbeb75257f8eed7903", - "1b0dfe5bf791bf4d645e64", - "5286bfcb1951cdb460fbe5", - "29ca62a9234f915c5c9715", - "3629587577ea6cd990a3d3", - "4d3d6fd7781e8ff3322226", - "7377f9449fdfa779330064", - "7f3f1310b0770a6a8ab4e6", - "74f8ea2aa01f3e122e9ec6", - "74aed20fd8f19001dab562", - "7a9c1df7aec04dc00e3584", - "2b3dba5edc89810815d1ce", - "217c2392122f9868740137", - "43ac29ece073be2a30ce86", - "4b6b8f4e6118573075d4ce", - "3cd3f5ea5623ce969c863a", - "421de31b9083741c4d4c48", - "1960ca77285b35812422e2", - "7d40cdfed339cab397652f", - "51a001a64a22c7bc0db3ea", - "1fe4c7d7da3eaeaae25e65", - "720179be8f54eb5c778be", - "1144f2116d6e426f3addec", - "10ad00e38092458e73fe4f", - "72e90ac5d748fbd2d7aadd", - "18250945b23b28bdd1208a", - "dee72e6d522c55b461f4b", - "1e31c413e16722caeb814", - "5ccfa76193ddbc64186a30", - "5eb2b60c1d97e4dcdb09d3", - "7f31009d8b384ea51f9235", - "7118c95246463e79fab7c6", - "2af1b36e871a2152d87ea3", - "1ae4174a64ea29d65c88b7", - "1aa4bb2c56ddce8ebceb39", - "65773487e5415b58fb205a", - "5adfc7a0a78f6657a5960", - "3d5e0686efab87e5e7c266", - "6552488fb7e68b138c5691", - "69cb489051468dc8b7a10d", - "2885d88c14361dbedb4fb1", - "17f8a55fef5d58503cdf89", - "71a2dd2f4561ce6b25cc84", - "173ef6d2228315e7fc8577", - "6095ebe0914ab346aaab52", - "1246f9f5df870b21bcb1e6", - "5e53c14166e301e45a1c84", - "3a1984f88834905315728d", - "4678975ad8ef4ef63ed234", - "139a5be9fe5d74b7b324f6", - "4057d3883ee10c31d0c5f9", - "5de657154513d33b2dbb32", - "7da4d79cdf3d83f0763c79", - "7399c1866bdfc2ee9d0ba4", - "48cdee08fb7cd0c828eec2", - "4c099f907df9db8a25350c", - "851fa3652b44e57d9190b", - "d0d6f30615b8f231bece9", - "5f305f39404231a1ce6591", - "47b5376a6bf9ae1b5420d0", - "55925c1c09bda33b3d0e7c", - "4aa62ab8f33741774c11af", - "cebc8496358956c6ed352", - "4e0f2086acba831702db59", - "2103ca88adecbfdd3370", - "5b917d89029b0850efbfd7", - "619fb115b590487fbaece5", - "709f8b4e1e81f78ecdd5bb", - "5c6ce5b29bafc437eda5ce", - "1c6a5fca595a1ff62b0a7b", - "5c246c8d9baad4092bd7a9", - "2f1ba6fd01e5cf713f7991", - "3d17d279ec6a81f53cd4f8", - "42af59edeafb6c79b9d208", - "7e0f7a6620c31d72d9d568", - "68d1c5df4d9653be9c8e7b", - "79db0961906e2d46b0b349", - "4c4fa3875e78671bc1d2bc", - "22a17bb1e02873c944cbe3", - "25e4a83dfc2f633765d96b", - "8a4219421d2f55bef801a", - "341ee0e329f6ab9da76c4a", - "28eaec99940a1b1f563841", - "4f1b7b04b31a6d85748c8e", - "1152ee1f6c91b44b1faa20", - "6b4aa7c57cecc522b32c99", - "49e219e4b19fa82e3cdd8d", - "5bc9b4c686de112404ccc3", - "40d9ddb7d82d86fe4dc6d7", - "6b85f2803d97e818e2e527", - "321405882a2a0c05f7907b", - "60749c3a015660029dacb9", - "26240f3e8816b599bb01c6", - "1a91a4ef4625f7ae911f1d", - "18704740809cbd3a91bcc8", - "532d2ff2bd9d0ca8b344ee", - "18488f368798b8734164ca", - "7453e07405f19cfba93c17", - "3cfc7a65b66e9f8c6f8cbd", - "4dde9b7ed5a96934e4dd51", - "7afeb7314079bb05948a57", - "2f4c8ebd42ef359c5ac79b", - "2579cde0e8d37e04167a12", - "368d20177281b04fd8018f", - "4553e500c491eb2ced6e1a", - "12a8a0e9fe6ba5c3656149", - "13d6f0fac0c0b9cd891715", - "cfbfcb607ba616c016fef", - "522bb592e89a78b316244d", - "2db6d4b5b7a928883df97f", - "928d2a95f60dac2e280f3", - "15b79d2a607e674b1df02c", - "711d3de6506cffb89d82c0", - "1fab75ef67bec61a68a277", - "3dc7ec06146d405216b267", - "15c08724b1daf7a590d087", - "75c2ce5e2535ac7878196c", - "63dbff9398c6d2cafd1418", - "245003f901ae0a356365b5", - "10b57d68a8cfe14ef3ca7c", - "5fdc8856cd703470a1e5a4", - "1af9124bffaade4351e990", - "5f72010436c71470f190d9", - "50755ca653aac70b84b12a", - "14c9d693e42997dbc96df3", - "7a93c6e177d746f5eb503", - "28d70ec040ec983aded5c7", - "124c113e25b1a8153a830d", - "2df0f496cddcc699504250", - "5dab9e18ce0b8340db40a2", - "6a410e486ad693817f9d31", - "5e82dce0d15b40d73e81bd", - "4e1b51392bd1ad38a51d00", - "69efc15f2bab10979940b4", - "4bb8f4e111d078e3c54590", - "22e8d9bc34a96264dd4caa", - "3a7c703f2642b17eba0c69", - "2df2bed0dd9ba405c8c5ce", - "222dacddb6e77241cadac8", - "4c996629390ea0954eeb1f", - "37c7b0fc4e875134c29246", - "4a78cbf6bef93b38948e09", - "6c8fa526a6bdbce9f7b832", - "7633f58adb014bb5585678", - "509ea21b16907067d06b82", - "30a8e1972ee45f3e0613d5", - "63839ba9cca448dd7fecff", - "290fe0ae5a419909be4e2b", - "35dbe95730bed0669969ad", - "2a6c238cf5c57a2939882f", - "f9d7db7493258ceea1a37", - "36ded179138f0e4cdf1ee7", - "4996f8a3f7c2c5fac02813", - "39bbee3cab035e7fc68b3", - "741dd990ea20591fd9b5ff", - "16eeff7e87d3caf8e58a92", - "2c8f1060dc661c38044a5b", - "3d886ee05f1bcf69fa4f70", - "392d9ae31bf22e0236e198", - "1a7c7fe62effcf2d1a2cb5", - "65172c59adde7fa1aa62e", - "389d1e8a26db35e20882fb", - "7dd9082b6f5562b8d6ba91", - "18c5643eccf2173f575420", - "757f2101d664083b2fe8c9", - "66e9cba0e526f30b7b9b8f", - "6c33a3a058504d48c17efb", - "1a908fcb6be810a9e1e92a", - "2df246fe147cf6a7d9ed5f", - "3dac1d8f9e9cf46cc42204", - "3cfed079405fd41004c118", - "7aeadbfb750a598afce6ac", - "485bb888b6979f8f201fb8", - "460858d1e253129bf64e5b", - "3567cd9077f5bb1d3115a3", - "28b06a5b8a2319d5d78e37", - "5c3df551863d0055925c95", - "260985f3992a168bc7fb3b", - "5a00aa930e50101d3ad458", - "3e41b8ea3309221756df7b", - "216b9b04319fd8da8a6d3b", - "24a843ed6770d822f92be9", - "60e3811062f0661e25f626", - "656a55d45a93fac53881ab", - "10f7a570b959918609b06f", - "d755ece5c8fed1e833d4b", - "5eb96063b604b2d052b457", - "182ed4a29e8be479e40c89", - "55e542cd768eaa4ab7eb43", - "4a1404c02a58e6862d11f5", - "4366b19aa12542a30c1749", - "74a0eb9dfa780e171aa5bc", - "7b34f38b9d16f0d70ddae4", - "1f75d643fbc4ab52296f51", - "1cc8bac063e7f4722cc83d", - "1f1cae187cb4e7e2d75ff5", - "6acdbbcb1d87bb33b845b0", - "5a67c62d60522486e9cab9", - "66727c69de089e222307ae", - "7dde8d7ccd2cebd1d4b943", - "3732911ea3b78b2cc54de2", - "69b04bfb64dc28afc90f3", - "49a34db8369186ccd3e18b", - "3087f959a9893769198248", - "766ac65aedf40f90341249", - "3c8b578aed4234d875a143", - "7248daa035ed0c83c2d007", - "35d310b1c9f92e46c5dccd", - "747c7a13b706fb28e46c47", - "e2d9cdfcde324e23eda21", - "607776583fcde0ad8e4c87", - "2133efe27b28c873f101f", - "6ad95985d0ab8e8d823145", - "35d6d7bb2855d9adfbf650", - "7a123babe2e7abafbaf8e7", - "3b0cb59bddc94e18233703", - "77815256a969cddb479be9", - "9c6c4ea9b05d327c6b7f3", - "55137101093be9fb51857e", - "59bb325b9748e94acb6630", - "328bf9a8c78ea2ca3388be", - "6ee757629a9b68ac7e690f", - "59efda7d6a6d8e6aaaba46", - "6ce70c288bc2711b1b024f", - "4ed7cbd3e32dee7a40c626", - "a9753c820825d73c04548", - "741d91860d83d000328e76", - "59aa03a25735023ef97395", - "1cc96ab6764758e9cff09d", - "50e22c6cf5d6b70def807b", - "76f42929010d1ca7619b42", - "18a6b71998f6f84fd5d814", - "5fda42ececb40f359e4f0b", - "2f62056d547ebf7995c6e6", - "23966403e567312c7a8379", - "6b7e91fb5948662e3961e3", - "1e6874a8b307092ad6e72b", - "31dfcfe645b46b329ee2a1", - "209910d1159692421526c", - "3c4374002a4b05edbee285", - "6df855d5b158377d521892", - "4169ab1c6bf3f0abec6c34", - "359b331d03b9cc2451c1f8", - "3c7a2b6b58424eab86f3b4", - "7242e44696c19a3a1910b7", - "2a7311c640e7cf0ecc141", - "7933956672bf2e4535ee34", - "455927f484bb8820a2ccf7", - "551ec7c1ae7ed078f940c0", - "6ef800332004d6cda26cdc", - "7630fa097aa2bf97cef6b9", - "490db50fd1ace7e8ec15ae", - "32f5fb93813b0abef00c9a", - "44e6ec408ba05ad98e759", - "568f3917922fe83ad3e225", - "273beeddd87cbae01c207f", - "1a8ed7cad7bcfca4620120", - "6c362e17e2173449bde86a", - "191da9b869e973d2fdfea7", - "64666abc6a9a2f6a1c7575", - "3c31433d0db703e03c294d", - "1e74e23fb34c50dc055d0", - "59652c3042e742dab07904", - "50e46147373113c54d73c2", - "776ff8d5492c149f7acf17", - "318d2300370d914ed1483a", - "e24946eda2a54a4c98b6e", - "28434971e0ad86e87340b6", - "b7602abf832a9540b03b8", - "3a2bc2968347afc3827c67", - "5fde1fcd656f65c682e01e", - "113149ff5647e02c5d8e8c", - "329c1979af2fa92b25335f", - "7de8764ca6a43c99d6a50f", - "7e68cfb951ae556b15fa1", - "5cac3c06df31850ad70694", - "357eab1d6b7f6618503b3c", - "4e66ba0bc1058a3931042b", - "65f33a2872e25c8a682f06", - "a5d62acbaf68c52001a4b", - "18f39bb607de6b1ad183e4", - "16870479234b3337ddc8c9", - "7093b250c7b04c2c6d567c", - "3820d1fc1eab75e925dc43", - "49ddb3e956e6fd8d65e1ed", - "7544304d1b3c2594fef689", - "60483a9742002ed4918cd1", - "809a8bacccc204134381c", - "177aa9fd51aa698c4f5d25", - "2848634cb8eba43423c432", - "2bd0c39ecff8d002f3a3f7", - "2bc7683658e815b0850ae", - "56d7ace10d6e046f35bc1e", - "1cf7470aa8bed908f93c32", - "44885049137a26d9ff4438", - "46436019c4b35e76ea4182", - "6b4ed91c3f4f0b25252206", - "1cb50b0700a11348f864c6", - "26c603e605263eb37ee858", - "734cae170e5d7d8758c509", - "3e00e41664141664f70d8e", - "4d36c683652009a273c69c", - "61e21b9a255226ab8a9c03", - "66db9685c97e1039f97191", - "41ebedf12db1451af99b12", - "5640578c9a2f674c097c8a", - "37526cf6c350fc29ecf559", - "6e93c69a7627e1f9832a61", - "3aaf5736ed929c1ed0ab93", - "42cda11218a2f5a8d7bd1f", - "ea04fd9db78a21c39b6a5", - "53e3092b891267552e8471", - "3e13e95a38da382cdac574", - "7d59312cf551555c728152", - "57b341376c8eeb5e957326", - "2fb62f0a2e9435830411", - "6131db76263e902f303f6e", - "5e7e83070de3b07a4bc87", - "54765bab6ab2b394d9dee1", - "3b4ae8aa403abef29b052b", - "4e1bc7c2f29a2f520bcf7d", - "50bb1918112bad3e57d523", - "3979e2b3d54a21e7e8c1cf", - "4f3fe475424626758ebe24", - "26c45bee1cb7e300fef593", - "20866732367b425f7e5ad1", - "4779c6f70cb71f00e32d17", - "24dc2302a4b77b85525bd", - "f339d2f5ca33347ae8d13", - "2e178e1cc4f997792ce1aa", - "54728697bad28cd0bcc9f", - "13413811d8a8e6bc2e6cf8", - "1a3337bb0bc288bf44447e", - "526d1eb936d1a3dec6eeb3", - "7df75741d3ccafb28da8e", - "6476d594392ef9fc9a3df1", - "645cf2dd2735f1cbf53f1a", - "780a2a5411b159d83dcb95", - "562d8222a0b94f5af3137c", - "e859d26ac6c854731c10d", - "3908eb827c8209b96bc643", - "61619bfea73d2a10c7a7e9", - "cf2bf44fe6c433cc00c9", - "17b5a764867bc2f176278", - "667b77d58f7f6b14e19bc3", - "14c79375686a30f4c21ea1", - "57d421e876be8c87768c1a", - "a49f38b3c0b7ca1fc5c10", - "1998c4f90bb8b5465b7b1e", - "974b1ea8fc3d4665ea11a", - "4382f99dff4951a775fb77", - "66b03ec137e6361ddf6317", - "43f99aac41b05d58c624b4", - "4efe7cc856d9eef4fda470", - "35f48b300d21989b05560", - "79ef58660a06bbc22f0cce", - "5623f1c8e0d5c15938b2a1", - "740e3fa0e998e741eb97cb", - "4f6148f444b84dfe82ecb2", - "34ce2df12c5e0970f682d1", - "5fe5a0fcee7c061cf49e8d", - "127dbd62073fb0c17b4217", - "31b2ef6b5163160bdce290", - "7f9a1f8e557617163d5e82", - "3c5262912ab7e82ffd49c", - "4ad5e4985caa0c7ee63b9f", - "5267f1f68134d546ec646f", - "7f695021b246db24a5113a", - "11df54a696817409ff1164", - "5549ebaa872068aae68ac5", - "236e08f8411de38e44c3cd", - "1892726d56d4f8f92dde20", - "457d09be8a2a4c351b63ae", - "53339d5a01f3d2e9bc8755", - "ac5bf0492a63aa0bf597", - "714ed5cb0027168be15142", - "4cfaabac7104cbad2ed728", - "486fd3ea0158f33daf767d", - "61c0e0ff11a378274b395c", - "5e195ccf98c9a4e1967fe1", - "3eecfda3b4d92af2b7e5ae", - "62af499c078af038905758", - "38d987fd4b450ee5a69286", - "5f9563c7ca70d6e5061bfa", - "ad64cff4b4763a7fda09f", - "26554ee3e9bedb1a3a09fd", - "42c5d2d1082dd2375a4ef3", - "7e05b7c7d54cfa1fc7b525", - "118d29d91686683483dea8", - "2c56fdcda56f78dcda9b60", - "d92cf9efd7d12c62f0dfe", - "11b77783f411c457cf909e", - "2cd33d1f501e268643d591", - "1ebddbaa72ad1a2b1cdc49", - "73f4373aa0c46a1ae61409", - "64b1dd5abc6713a8f53d0c", - "3aef6b8ad8d4f116a27e4a", - "13f9a309c929439a91df6c", - "401a3ed45557939fa7eea", - "1d1aa15ce7c8c15f051ba9", - "398764fa3e177502af4d3b", - "48edf77c0fc298b0491c2a", - "1c5b7d2b84cbc7b29bf542", - "78873bb7282961108e63a", - "16ad879cfcd3e458301dc9", - "28b06d6b1f993702509e4a", - "45242101d43b276b34115c", - "783d012e8b928ea14eaad8", - "5afe15c1524eda9627e183", - "42b636bc4126dddf74cb00", - "5cd8f782abb8b60cbf36f8", - "1c5d10301fcf4a14c82adb", - "52d3cdd253b64a03c5885b", - "31416a7f09913059dc251d", - "46bafe88322c67f3b90507", - "4cb6253df884020966d27b", - "2948eda7d7c508918c3056", - "543222604f067afa3e7558", - "3ae99fca89d15abe091160", - "140aa7412f6488f5404826", - "16b6721ea95f55ef631d25", - "133606f2fed41ffd77b999", - "4d075c933e4b93da3a33d9", - "4ed1311eae64f9e834ee7b", - "f920b02af1e3bd673512e", - "312518f9c1ce1e690c003d", - "44bd0de2094b8b3759356", - "3d40b56764f7765513d13", - "6b5da25417070642e0ba4c", - "6bd995ef31bcfd22d52d9f", - "3eedab106a435ef32b9e48", - "534c1a3b25194e8cd66e6c", - "28a37e042abf70a7cb137d", - "76fbf6732402bc76e061d1", - "3b66491ccee4801a4e3673", - "5ef7fbdbf498c8684625f6", - "3305f9d7ac9bc35ded571d", - "6aaafc0107575bd9b70723", - "5eb217461cfa46d5694397", - "7f5140ee63b60e0a33058a", - "3fe61d12a0b09791925ccd", - "591749051e47ee7b49cf82", - "33440d7d3472a4b6e2f627", - "4dedb1ba2a6a4abde67337", - "30485371efc19b50bbafe6", - "3566f7f67e026f0278dfd5", - "201e678f30ea96fd17615f", - "4a2580e03d81912089d88d", - "68e88d3bc4e8d390ae4b13", - "46986d0da7a2c17dd1dc22", - "174fdf0bcfc8d0f4e77e83", - "7a75be28b1e93e4e0c9342", - "11081f4b8fb8f0a9abf772", - "3245bbf080c6731fee74dc", - "57bf13241507b812b9a904", - "50c915d40aeb9e4ec78789", - "530f4c391aa2b0938eb272", - "4e0326164785519414d07e", - "389d9fa841750626db108d", - "5eec1e56c0a2d0e34dfc8a", - "3e8986648fb4053520276a", - "2db6e61499c9393946b57f", - "1b2e283bc4ff40366c744f", - "95d86ded4a7b26a1ad331", - "4818fb8f958698b6e9c9d9", - "21e39ab39cd96423900120", - "27476789fbe89ef5fe00c0", - "1b67e56d8c8f6656eac86d", - "28e33efab89fb4f64d6498", - "18eb41f414dd28e8ff3a1b", - "4a648c611ef0b3b0e318e0", - "3ab4982748b8f986192588", - "1eacd91eb3938b38f0210f", - "5227913634dbd4b19ffe95", - "1d5b0385650d2d81754f72", - "7351e32ddd53c7465f65e8", - "202d04fcffa7e3a0ae0585", - "6b77b6d06b93487730de2b", - "2f635c018151dfffc38ed7", - "7d83ba89b9f89b55497937", - "d1c5eeefb8bb620c573fa", - "322d1e939066766f918e43", - "3ea29dc49c06d64c187862", - "7f64ec3ee1d6fd7b5f9352", - "749ebfb4005c94ed288c4", - "6f3d0d822d1a27088df8e4", - "17b1690a9c9f4fba9154e2", - "142aa17e315b2096d3470c", - "5778dc2f1465daeafbf88f", - "3135a042ca5b8873367081", - "26f3f960b2ba725c83b706", - "156e3560db5a642c108333", - "3adf2b6aaf40f5dcdffdf2", - "4ecbf2559411992397d1ba", - "5e3402a24a307a945167f7", - "553a48facee35f17214327", - "57c6f0c9d94e02524b4029", - "44867f919f39bbc1ac8a53", - "7b1e254e6050240b36eede", - "7fb445fb34908201d41b44", - "5a49a0430b2145ead2e9a5", - "22d9fd1638450186756413", - "60a177acbb4aeba955e6a6", - "23a7a59b35972768b71627", - "ea9789ae096da5bedc410", - "38419b7c213432cd42f4bd", - "4024c6847ce50a93fefd10", - "1f15e66f6c5b160801ec4b", - "26fb73843bff3e4d17aa10", - "212d386743b2c2069ec4b7", - "59377c70bed9cccb346cff", - "5a80f23e82161bfd2caa8a", - "21532161ecdbdaac15b68a", - "5cd8f904c6a0e1c85597c4", - "2ad8c773fcdf92009db9b6", - "1df80784a603cde2e8573c", - "41127c781a5dd07b6ea357", - "6152b40d63a55e1ef6e750", - "3161bea37fcc040c6f6494", - "112bfdedc3401ff20ffcf6", - "6a3afde1cc784aefb925c8", - "47a38df2df7f516ac35f8d", - "6dafdbef06e817ec42991d", - "72059eace3671c76d67005", - "a209dce8856336ebd97f2", - "695d060b1aceccfdfa96c2", - "17445a9a60b0dfca9df354", - "249f5358017ada6567b747", - "b7347a4820635a5852b61", - "2bb74459adcd7029c9c35f", - "3684bf3ee3a2b8635ca0e1", - "600de685f1a4c2f4a236d9", - "68ae7d3832d31bce57eaf3", - "7a75b868e9fb50140bd203", - "1105d3c71c59dedcb33f", - "6234ffe0f938a25ce0f5a8", - "41858e467a21a3938d60aa", - "7332b41a9fe9dfbe59f71f", - "313ef612f2fd65f39c2e3e", - "49ce8855b52dfbb878b2d3", - "46b1961304e45b428bd48", - "1740e5e9a57a4e80eed5c8", - "7f035a794c44a6a57abf00", - "6eb090e9b1df79f4d2226", - "7f26a6c99362d1126b6773", - "14e47840962745e9f2bba8", - "28670ba592cd5a2625df3d", - "5c00c9ce80be32396ca075", - "4cc8bba01b6788222eb375", - "581f2a492a4fe468c3971b", - "6aacfa3617f47dce14015a", - "3988842f76572373c3459b", - "3146d29fae3f74014572cf", - "27216bcb23514df00030b1", - "36baace22f2d7a2014dd1e", - "20b11d38582bb81886466a", - "5aa25b718982092494e872", - "3f0eb0b9bdbbe37f40dc5f", - "5c4dc3dd9138eb7169302d", - "503bee64726b7b32815f44", - "7175ce67c0c74c440327c2", - "3fc3680285719ed4f7e7fe", - "7fc9fec9506aa1a0661240", - "122e1cf4ba920fb923d0e1", - "5570385cc742f16a21edc9", - "2a8b319bb90a064d3cc523", - "797bc83e9789b064b51c92", - "124aa58a7e2a882689ba12", - "5ee825c795f457b727b9e8", - "475c02da59260b083fa105", - "5f427b13d8351db71dc75e", - "7dca64fefd065e0893d874", - "88658ceb2447416239af", - "75ea3318a1054593eca8e6", - "21b1555bb331b89f928e6d", - "7e558ced95c8a49312174c", - "71f02d980dd943488cbefc", - "23e36a6e12831353ac1afd", - "1073f10b92dd8a202017b2", - "a0ac3885d2cb22aeb977f", - "2ac1793993d045ec4ea0ab", - "4e33cc0d26d44c2394c8d2", - "5430c091f416778afc3f3e", - "55f3bd5a345801aa67f91c", - "18bd8096de042467441c8c", - "1dfe68dd4d69d0d5368782", - "a69b0e544c08336c9606b", - "405224a222d42397ca18d2", - "5ca40898d5d325e557e04e", - "73e9dbd2873c27040a215d", - "56efa25eac0d5f675af6b6", - "460f5f98b19a4d353358fb", - "28593d93a1a2159e16cc13", - "1eae59f579b122f18b84d1", - "7f29a05b16052f06eff50a", - "2ac52045b3b592dfbeeaaa", - "6003c83a8ae5ae42a0956a", - "3af2323baa99fc6ef534e0", - "b3a488e23273b8e74aa2e", - "dde95ff1403621e1e9c39", - "8b93e9e7ea54df6ea61e0", - "382238b03129ae3a8cb2e2", - "7be85a588e4f01b973f9a4", - "3428c448a20f463714e16e", - "46c829e7e1980bc26c13f9", - "20573b178651610a410e89", - "16c1a9b3bcba979d2fb250", - "46bc67034da17d5b7c72cf", - "abe7e5169767e92b8517c", - "10a7cb0c646bfbfaf6b1db", - "3e27d166777ab6af4a4b75", - "560bc3397e1eecda48e8d6", - "153d46a7ad0d4c7b81a83d", - "7b625b197eb76a08b19ecf", - "58ab9a24dbad2ee2c0942", - "6b463071583d5d51119c18", - "58d985a1111ffbdece42a", - "772853e9593804a23d0c9f", - "3566ae3cffa53b48308a5c", - "3253a13971cf24cc306f4e", - "161741a6fabf2be3cb74a", - "72492bafc7adaedde393c7", - "4d17bed73f2032142b03a3", - "43ad0b393a7c2a4d667efc", - "5bdacc4f0e9a9f3c5eb7f", - "3fc330d82c00c3c98129ad", - "2287f22a43e09d12b5fed1", - "113203b24e05e4ff03bfc7", - "386903ad1ff043a2a203ff", - "6efc437814b1b1a8db77d5", - "60d1cb028fdf2f7506480f", - "5c08c8490ead830327cfc3", - "56d1b28a25e58905b948d1", - "6473a7fe7461369e02b551", - "43240f690e895ee2ce6199", - "217e1d11ab05e37175e942", - "115af287df30e3b9382159", - "3d01c0ebec513aebdf049d", - "3b607643718a1436cbf93f", - "392447173660d27311fc56", - "7fcabd5ff8d8321877d09d", - "773e49f5dd28ab9abcc4f3", - "333e4709f384c49fba280e", - "1a5a69890d5f080ad27aee", - "142700479fca005e365a5", - "16c859dc1504abc8bebb3e", - "8e1dc29eaa3429a93416f", - "3d2c4d19f97ec14b7f9a20", - "b80a7edd7c5745e63c50d", - "7eacc570a117e3d2c4ad3b", - "5a4b0bdbb9a3eba57ecafc", - "2bbb60823308802716b002", - "60de98af5b2e9794ccddda", - "43f106dd9b706c7cbad455", - "247aa73439f114a2bae1f5", - "404518992cad409d30e138", - "483592c4cf34d97823b087", - "303e55cf5d940fa1eb0863", - "27cf1a1e36d6b6fbf673f1", - "753e3ffd723c55ffaa57eb", - "527df835ccce3d0d8dc6be", - "501c73bb8897e8a9b644da", - "2c748923f66e9b836e2956", - "252a9565fc2ed88c83afe5", - "53ee027a60ac6b8703b4c4", - "11e3b65e520ccb94e0f28b", - "1d82fef6b5daac184a21bb", - "34f1c6d5946b4f8e9c34f2", - "78c36b7a1a1ac86080796c", - "3c2561b4603673cde220ff", - "347e522bb35549d788adad", - "c5eb765e74f7ea6040509", - "6b91d4c08bfb155d85a09d", - "1d345a329131e03407a9ae", - "7656e2bcd13769bc7d3690", - "18af2f7c66ebae2215b225", - "5c0b858603efe861d8e554", - "3a948a48ee72242647aeee", - "5eb549dbd9b640a1018c4c", - "39395b9f947ccce230cc1d", - "2983f80020a9f6532ba834", - "599c6bd84b32b97e000cad", - "494a8aca14d077b143ca10", - "5514a9f97c736ef89e2558", - "22a2f494120b7469421488", - "6bbfc916f60c65ff6069ae", - "988dfd270fa06d78d9fba", - "65e3000fa520e5bd8bfdc3", - "d79412155f3d978866277", - "540f6a5d04324cc6ed1398", - "5193e0be567990b2818200", - "5527257327c4eade309a67", - "6a6ceb53a9e08bce60e22f", - "3bc0b4b12c4e0d37097319", - "6446d75a31a4956c235943", - "70089a05ca7765b8ef62a5", - "78050a04d755b7008433fa", - "4cf40ea87be0baab3f0a23", - "421f5a540df5b7ba309bc8", - "22aca8e5833c97719ebb51", - "595eaf076defb81f21236", - "324340f1f7ccc9eff05524", - "490df281db25788739ca0c", - "7cdb727ae2bfeeed50af45", - "8fdbca74c18894d421e52", - "266efd2e0daff29e309d38", - "2d3baa252f4d982bd2ad11", - "26246e8fdf408dac8fd2a5", - "4dae59d140c542483e12a9", - "7e37627adf10efb14adf13", - "7059a8ae14b27b87ae7942", - "5d0b6fe03f574db311d01d", - "4450b05b160d8c53288cd5", - "5628eeca86bc4f505da4a8", - "59d6c2db6f995cfebbccc9", - "32c247d46291051243da8b", - "29ecceda91e2de99bded7a", - "697bd2294052d067eed5b", - "35d846be55b3952e278ab9", - "3846b043ea9479616ae948", - "460dae8d89d7708b43a1c7", - "6ecd91e762474ea500bb02", - "78386c3f2bea1d92b0136f", - "5d36dd2a4f038c91a8e525", - "2567685d25fd668a9a024e", - "484fed0412b66b4ad6689b", - "11e987960e92f0cfe9e7d", - "48457eaf5bfbcca641689", - "5e89ffa159d58051edf13c", - "ad8ecaa59795b2101aeb", - "4cd6b5c75a375bce549db5", - "17a8f2f3a036b54c467b7b", - "456d747923e7fcbd260fae", - "38b2a18fa105ae1a1e82c8", - "36b718d293f968b4388def", - "6d15e33dfd91b0adf65ea8", - "6a47915604a062b94c626c", - "63f2b709d7c6ba1ce60255", - "73da067d52334a718631ff", - "68c11de19f57751aa11e9b", - "1b50ac3c3f5269c1d7aa40", - "51f56cb5201bdd22f49e70", - "245ff16a71eb8c45257fd0", - "7dcfee63c4d594e4583601", - "604b2e853911ce83225aba", - "5bb6095d45a0253a5e3e2d", - "14b7709b903167ca33c0bd", - "6e6871265fe9883143d121", - "453649c203cf983e439d84", - "5819cdbf42afd2334f96", - "3450478bbaf1db9aae9e0e", - "35a56ed2078e145e9b5d42", - "15e468fec0387d9dcde2e9", - "1f098e306099d97f37bcee", - "108be849403d8b9e0adadd", - "432bf33542ea8f8c0e1cab", - "1fe772e91ad75a2d2792c4", - "2aaf602c5ad427702561f0", - "66c37766a09f2454161188", - "7c91adf751ba7b800072a4", - "587965194057ffad1ed72d", - "6b189bed3e1ee805a7089f", - "656e0aaff42e8f100df7e1", - "50d8060a4c81ac0d9dcc9a", - "3b142ae3f666b5a458fd6", - "11216382d02fa8a680f2c", - "640821dda0f544b159e25f", - "60ad8426c5228781a660d2", - "50b259ce6ef7786ad19380", - "617907260cf1e3612508c0", - "2020839307f0a0b2a66465", - "6c9aa8a230f91d4e6f84c2", - "479f0a9b95b8f0e630df10", - "74e8524ea4276a1585abc9", - "1832f7608c30377f8a27c1", - "468227ba06af62fa70d6b", - "46ae03b83630be869f3f67", - "1c429a8aad032b85e815c6", - "784a6ea72c75433fa2c1c0", - "521255c27009b10aeef14", - "6de250d6d96fba0a4a2df6", - "1a38abc6055dcfc6f54cd3", - "459fc4d70a1a8040309b48", - "5206d5cc4cf74b102b511e", - "1621052353e1bb38663f44", - "6869e474162fccd5e6ce8a", - "265a6fe3ade48b79bb704f", - "1683c065332572cac40e7f", - "40fe888eb50954f82f8f41", - "5ccb3321bf79805e3743ec", - "6904f88af6eea4b3f91bbf", - "a70e6c0e6da7b5bd943d0", - "7b7c35dbf0dd6b94d050c5", - "4ee9fe013ba8fc6ac8d470", - "1825a2f6c03df8e89a424f", - "6495ff035413be2b53c45f", - "745f8230228fe0e913a537", - "57ca180b4c6f8c3a63ae46", - "5963fe850d852bb19cdfe3", - "430a7ef273c75f6860a9e2", - "28c8b8ba9341ac37c38695", - "88d1f466f33239ebbee3e", - "7bfb517a9a7064f7f0b9cf", - "222ad5a5eecaf564928d05", - "31f4e6b45c1cedb6d4c94", - "9d0d5139d46e4d9db3662", - "46ea372cc256b25d8bedb8", - "1177a186084a0188e6b25c", - "79973f898e87ee6433e53e", - "17f90d7760ace90b4281fa", - "4d06acabc42f8f6c6561a2", - "297ac6d1d91b19c8ceb3ad", - "76930d75187c32e1c0855c", - "ef9f73cc5ae815a32ca63", - "3ca5432d73f30360d5e251", - "2eb29dd03203d9dedca2ed", - "3f719d970328ab86444133", - "671a35180c429ed6cd73d6", - "1a5a3601f9e5c757413d21", - "1207f0afa9b17ee1e3a14c", - "64c773513b07ac7be226c5", - "645491f7754448588100c4", - "6803ba4d96f3cea5b5b619", - "3e8f3fee79b0aa7d3158c9", - "7c4c5a07ab45db64032f8c", - "471e19dff79f0bf8dd75e4", - "736e4111350ab36a2be4ca", - "70eda2a92c3f3d551052fc", - "4be7ae42a1b71df0fdbed2", - "38e1136120c0a50e7c1942", - "34de10a25d48bbec6bc310", - "45fae251151688f6948ec3", - "a5803d95905530efe4cbc", - "29c81a2bbc75ee65e40fbe", - "5d0e736ad9b0e048c53cb9", - "62a6ac9d0c5e4b3890d61a", - "16587b1213183c74388d6a", - "30455197024dac28f22ad9", - "5c96c4bf9c30f05dfa52bf", - "2e14fbc2ca9b056ee6a0e6", - "544e247e73028cc23b1f51", - "7569e0846a7c92c5b07e91", - "2e37e64613e6e49f75ff6b", - "75393667821938c0e5a628", - "2db4889991fd96d5a3dbfa", - "6b628f924b031ff396258b", - "5c721c1e9f943f1e44c526", - "4845e19f6384ed5724d8ce", - "451cf4e4a6ce149cfc4095", - "69cf5ded5037b0fc848b28", - "2144bb26c3488be851e3b2", - "2582d22d55dfd72b2d70bf", - "67fe64c68be6372b30260", - "b5ea9188a76cbd4490c2c", - "2f9195fa1721a36e6f5198", - "371b6d93bf32954a1ed005", - "2d248bd8de364598100d1", - "3476974a3a56c244bcd4ac", - "7d10d41f081cc53194454d", - "9ae11d1f0b2cb73496a44", - "3c11b4ca34c3237b362a26", - "3b62b01334bf25d1f5d560", - "4a9dee0a96c91e7cd6d7ca", - "2d8ba9bb83d8b7dc77cc32", - "394242cd2ce4d5c927b1f7", - "13ef893fe161bb05038778", - "210aaed4cc7b55edc4255b", - "72bad07fa5d3ca19811efa", - "1856ece5542adaa42b18cf", - "2f775dce855cb22a4ce4b4", - "1b3d8a50e5425c7a4550f6", - "3fd38eb64df431878b817e", - "1f372d16a7c783f301d859", - "2e99bf2a9cfd14eb01e4dc", - "739d86f4db437bd59681d0", - "91782b2d8bf1ec8b6e4db", - "13089f86ddae7614e1f733", - "4374fb07e1eb1efc714a7f", - "34026c0467a5bb1302960d", - "1316737cef6e8d73f98c46", - "308b1811fe8c7d6801df6e", - "3b6333c6dc16d5f4351c47", - "30151eaad7aef0e79d5e07", - "6d5ce69503f658697314d0", - "13022f601d429947abd201", - "278331e342f211746f0d9f", - "44fd7c4168c2a61413dbd2", - "77747c8e4550378570ec0d", - "31934713e4ff1d0d7cc583", - "5ca455ab52339850752f94", - "cc47e7e925da6c91fe510", - "18932d3a50056ecbd4c0", - "594820c775fd57d86cf9af", - "4ad8d4214e4fe01b143d8", - "179c67b2886cbf8a80171f", - "60e1157dceceaecc3a16c9", - "507a197204651599300f85", - "1da6208947854d10119a62", - "2fd395d2076e94e7f79f79", - "3326fb026bfe153a5a80e5", - "214b26c5cc4d2d1d455254", - "2a5beeac5cc34b9b70fc5c", - "73037907fb5b7e20bf7973", - "622155e1a7c16eb9e6f098", - "47eef469d5e96dff3b60f7", - "31b42ccc858ccceae34d5", - "68c711e371efbf9b278db8", - "71e107fc4c98b40c6f7b53", - "2a2840d0a8db4a22fdfb53", - "557e56b5a5dcf30ae5f48", - "5451512089afcff74e1bd9", - "6a44a264bb1144d86619f3", - "72316f1be6172c06994a4d", - "d5835b5723a9063a2dd80", - "232ce65586f95692d89383", - "2a8c9eedadb6f6d58c06cf", - "f5eef843bd404a6869b17", - "720851fb976798365a6829", - "6e8b7f0e9607e44c1f9f65", - "3860366ed3637eead94b8d", - "30d33e090854573dfd98f5", - "682291bfd680e2cd8f9d70", - "7c1fdd60de643e750fa1d", - "774b9d1f08bb74ab682979", - "7b5f04e933b2e4204cdc65", - "2c36a4d87847724f9fdecf", - "2c941d4c1c7d68ef593ae6", - "4576a87293566d06f5b643", - "86148c3559c855d7a4785", - "2d0a5221661bafe1bae3a0", - "4eabe0db8ac5d733acae29", - "1dff7b3a25d6efec89d4f1", - "93ecdd9b52d588b62ae9d", - "4a5c54b88c3afab5d73bb4", - "50873f081856faa7b0c6c0", - "7a4c62248fb05a7ec5f894", - "6297ed8d827bde2f27c592", - "4f88d842683a24f7a78b4e", - "6543f2ea86c39aa319b565", - "1711e7c4ddf7dd725f454a", - "6e925cc1e63747fc8301d9", - "428c02c3c8bb1613aad2fd", - "1b12fc1c7d3ee5cd24b30d", - "38618fda51c023d44b41df", - "75ecb6eacac31eec1c8d24", - "363495385d4023abd7fffb", - "52a170878e73d2b9a73398", - "40afd831d872bbb5ba2dbe", - "6a2bde70b440f36a3a69b8", - "6cdde5dc50cfba13ab15cc", - "6102d4b92b578db1756028", - "1d72e71f6a57243468bc42", - "4f100cd2b63ef0cdac7165", - "56441a020eb196f9ab47f5", - "520d75e4874b90e95d0ac6", - "4ad5b5ec9142810d730c91", - "6369f366be6b5ec99ddddf", - "4ae3a5f46681ba13e649ed", - "33e094a7802d99ab1d9620", - "58ca4d190a0f756173e746", - "4afa034c14d96f077cc41e", - "3277a60ca85c986d50dee2", - "61df6c089b8a0a75da0288", - "3a9ec75af3c8e86b8c1b73", - "7ca8eb46f6df31902607b1", - "7a283d5e2ed98485e2d260", - "78ab001943d18ada1f6d03", - "56f539741375576aac816a", - "75fa74ccac539d6f2e079d", - "7108a03a28803eb91e8a0a", - "3756665d23e5dc56d35905", - "da96dc29f77c98efd9a65", - "54ec1fbecc620b2a62de33", - "2e564f6ba5f6f74e33f2dd", - "86aa65ac1949dd8af6918", - "605ccf0922a0c35f768933", - "4348b708829c7eddd56237", - "19d3eafc75447dbc2ce4d", - "764156f5d90616c8c45669", - "51e2ff830fcf99b4147ec", - "2d30342ea20393b89b038b", - "6745627963b760ee39ad1a", - "76c344db7c98c1b1fa25d1", - "5b872486f12a68a939069d", - "274cbe37d4fe65732936f", - "27b48290f4bc222f54681d", - "1f7e1880120c76703199fa", - "2bf0a5cc2a5150523d2e64", - "2d3b2e3d52eac5c09743f7", - "46b7638024bbab6f336734", - "71f7ff7f6245492bf4ba4d", - "6ac96f98fa78ffb692afd9", - "1c63d031374620336f8c7a", - "5eb0e751f365585e4f3fd3", - "24716274d6f1761a2e503e", - "3b663e3e9013cab9326fc5", - "231a1fa6a52f8377b2ca86", - "464063c0e0f5e5eae1bad1", - "4f588ef825e26e596e160c", - "4adc76f7cd88044421953e", - "228eebf60c055615805405", - "3d32a6b665f10a829cfff8", - "ce584760ca84047b25a4f", - "982362cb3f64fc2535f18", - "2cbb69d06f0ba3051ce433", - "2fb2d651d1a5fde2dc4d89", - "116822d6715118a8643140", - "52e4d0f780530e040b8198", - "4d84d472f48a1f27cda4fd", - "23675569b6f74cecec658", - "7273cb20026d3e5dfa9567", - "5e5c9c54f1f75bcc98d1bd", - "37150fd6c06a98e84f0fb9", - "1cae4d5a0b88eed0b2d97e", - "5e6c438c53b4bfbeab6a4c", - "7ec0ec060d3788349445a5", - "394ca6d6650a3a703c8f0", - "76a4bcdffe1207b9c84c3", - "413062fa329dcbe3b8887d", - "137786296b1e5f466871bf", - "1bff1788b61c434292f278", - "67ae16da8f876a2c8dc80f", - "4f0b0a9e8338cbca398b3f", - "7fe713df2e65b878c1edc6", - "46dbd89f4ae0d06c0ab8e0", - "3ad2c2000ee1db409ffcab", - "235057c5ef06d64b0093a1", - "2b1199cb9ff7848ec581", - "16a7968fcf87b51aa207b", - "7593ab2f13aa524b76e104", - "569b68c3d77231282d1705", - "54f01285acb2da9689a386", - "7c50148337071a44808f27", - "157e5726ec48e98ea5652c", - "a0b14921f2ca115669309", - "540974d1b3361c5ccd3a2", - "30927374f464c892c53b50", - "5c0de6f6c164f44c52de84", - "25f3d9fd234440b97c9821", - "659ccea55ad34dab51a321", - "308d7af9cf09073e61779f", - "48dd5aa0d80d3fd4d31225", - "18d28f7c13bdb1a27fc315", - "37c639bab06813135e6962", - "716be1338eb9fa3160de8a", - "306cc735643548c81d480", - "15dc7895737fd27e2fc2d8", - "ff910ecf2ce1ed443b3a7", - "26e45399ef9d09b479c0d5", - "5a3548ae1dc271964cafb9", - "1e0b5aa4ebf1898b7232a8", - "65b1a43ebc40ff17757bfe", - "35ab264ca762acbf67e1de", - "67fe63e894b36bad057249", - "901282766f87bc24e50af", - "3f8ccc4c495c412c1876e1", - "2c958c952c5c886c2a60ad", - "21a95826890e5cccb8a83e", - "190017f50befaddece16d2", - "64f3d838badcddd9bfdd0e", - "7a7cdf214176b6d3191883", - "30436781bd712f316b4895", - "f5d2bac49777fc8f10242", - "66de0cd9d504d0c8a10caa", - "11ff8e8d5e956398c99ca4", - "2d83b4eaa1c8f768e56c30", - "58689766e836a562c78c53", - "1644cc3e7fe80220ef2f70", - "69a00aca76ae6e660be7bb", - "68e1a6376fdb4eb7b4b0e6", - "5c37d517c640ac7f62a532", - "3aa36ece405e3ccd9341ca", - "345343979af3beadfaced5", - "63ca1ec0700483b8f859e5", - "14b8d711e9732dc1d81b85", - "5d1cdedac3c1f047923b22", - "1f88577ebb6a87d8478dfc", - "3cf63e3a65a7e509ca6dd4", - "64e35a2939773b306ebb74", - "4e5afb2e233daef8a9bbcb", - "5dce9f322e405cdd3dc195", - "49fee8b58237dc40ba3c5b", - "125c7d70d2b6d99ae885da", - "7f821b6d896942293448e9", - "44b0628f84b11c5e71888", - "4bc252b0fa653478344f1f", - "31afe414b9e841f105214d", - "46bc16d9041c2bda07b158", - "34ca1ca17d4004b63727d1", - "1adfa664cf45ca975af0f8", - "55b727631edd20582945d2", - "6649997ef28c919c6cae0f", - "6332e8b1655b1a7193eb45", - "7b8a17b08fccb33f4b7d6f", - "46c01f4170feea6c601e12", - "68d895a65569cf3ef3e3ea", - "782fa87576f745d6c5a644", - "3561d1a2752f1d17dd5823", - "1c1f24204ec4b044c10ff5", - "4ef1c6a1bd63bb6b6207b1", - "33fee942f43e9b7d2118f", - "1cbb8749de080f5bb23b75", - "4680ebb5e7e7fa1e676838", - "2cfe955ebd8c7e4615715c", - "93d0f45c8e78eed19b2b4", - "5411d9720f633bf7a356ea", - "7ae4ce9746d1a251afde2", - "6b6195f4939abc517ea1fa", - "622e4bcd237f601b3f864e", - "552dab94d8fab803e3abe6", - "5fea5590381b705c4ba54c", - "47a6912faf0eba695a3f82", - "62d4635d0bbd6bf8fab17b", - "488702c5b90021b8b24933", - "b44a774aaac3d4d335389", - "7c2eeaa3b5ac7ca26ee5f2", - "4a79a4d35e92cbac8fe0c0", - "145ecffc8b532b7855ca8a", - "409705e5654888d8af2f47", - "4f5cb9e29c3567f8c1b22b", - "2ad535a50fda15e1835526", - "4d55039bf17366425f055a", - "504e8f5ee0e51320af92dc", - "ae1614cb7437dc6311ee9", - "3d433adb4bcd914fcfc4", - "633dad9eec0d451652bf40", - "15bc81dd36a0393963bb64", - "720d9e52c4aea85ae24480", - "16f5569ecf073acc30831d", - "50a70d2086b5ca78a90368", - "7e688d1cbe7e0a84a0f408", - "1f9e8bffcac3e1471f7cd6", - "78ec94c22ee912eded5499", - "336a41277b427813eaa191", - "1705c133c7ba24a2b5c528", - "7b7e71610f1589da383c31", - "58137399c99866772aed9a", - "282774a1f4bcb14e6723f9", - "7b85e0b99eff408f2aa978", - "2a5043ae183d338b7ebd55", - "af99b9d024438cfe9df66", - "d4a270719a348af6d6c29", - "47262fa06b9c5ac8138f4f", - "50c65d8772a3d5db269535", - "20b1838f00aa00d07f70fc", - "ca30526530b6f6f0c8fca", - "158e9251ef94651015ecc3", - "636f015a0c62753b283d5e", - "4573a56ada0a29d31dd6b4", - "367efb55edcaadbb5e4f2b", - "3eb189e2bfcbe180703cfd", - "692adfabb87ce969422961", - "434a5edb31a9c3c6a0243e", - "77664e53908d00007d1205", - "4b11585991700c233f6773", - "207ff6a0da7f13b316c4b0", - "328a9932d6b08a41a1df0e", - "2f927b360b2b43bff822dc", - "257564a39a648e17d015e9", - "73e92ea015629e3728aee0", - "4585b77fea18a0113ff609", - "101d83882a81d0147b4342", - "3addce3c43218484acf509", - "9f0c9a93eecf4de349628", - "465f3b1e25cde0e446d90d", - "4ceae8c6ea35dc274647ed", - "63137369b8d47b6c9c43df", - "438f5c0f163a4dfa04e5ce", - "313d62eb5f1104de5421a", - "9f20b6fedc099ec575691", - "24086a392ab75e649d3cc1", - "7aa96a9fbe718c006a48f8", - "8000000000000000080000", - "57f0f7ecb2d7dad43748ee", - "2a640efe463008db4ed634", - "45769a307f5593bbf72056", - "3abbf8af06f889daf59c4d", - "6d16d10feb1728044f2dc3", - "5bf1d1c71be0c49ad75d9a", - "16bed27a9c005817ccf111", - "4d7797e0b2f77a7ffee785", - "3845bd22f959dda9197376", - "1857324131e535b1b2458f", - "6335fb7682400180e10d15", - "50226b4aa22a0465ceea0c", - "44dd70b9323f17568e4ba3", - "217bd444ac8e9808b3ae5a", - "6c9c81ea487986867245b8", - "3827b84269040363e5e02d", - "64520e4823f48c1f48749a", - "58fc1b58696f8c22cfe344", - "41558cae58d4f9a9001b87", - "38910d873da8dfd237e8f0", - "5eb76c6301d8a849a1903f", - "3b6b43619a3730d5995ae4", - "5f2bc99aad2f27cdee05f4", - "385f7f48a7be6b46d108ef", - "37d50d7838efaf03049cd7", - "665bc65420c0b0a151c97e", - "3d9abe3ec82d9602d9dd6b", - "634d2540fd670a82f219a5", - "616dbeafd6aa623c1a7d7e", - "29702fc1f57fddc3369967", - "25920b5c96127e9d8ab05e", - "3a82369bb1a4da519bbd70", - "7f216769148f0e997c7805", - "31d809b078cdefaaf45266", - "7a6ffa939b86786a779a44", - "68e8a818d524954278bbf6", - "181ee17c34ab8aea52c900", - "7f42b66317d26c3f938805", - "6f37e3a85128974cdfaa69", - "45813314ca1d165bcf242c", - "64add9cabf8efdd5f7b57b", - "46a91d898168488fd5ac51", - "669f4c5ec3934953500b78", - "1e378fb7157cdaa6fc3a50", - "39cdc5e6675ab081ffe60b", - "1cfd8f0d12bcce21589c11", - "6ac77b7cb23565518aa2d4", - "4628eb872cffa1868b96ee", - "23eabb9cc5f4086c74bc31", - "445381f98a1f5669880827", - "3f603c7b410b4c2db2c8e2", - "464550e0adf269403f3e22", - "3286bf159405584d85567c", - "356497a9675898bccf4e79", - "f26a2dc235ace7b34f4b6", - "2e03d3c0794703b9605de0", - "30a18088f5b2af396bbfd9", - "681750fd18618072db2068", - "69fecb55ba6da700789d7c", - "2294095a6b77aaa416cbd7", - "ab8e1dd4d27b02d09fe48", - "7fe887d8c5fb53af79cbd6", - "1ead89a48b89a75ebaa7d8", - "10d0aa100248920b9cab77", - "4aad58987821ba8f33d96e", - "5c616b0d1a7bc591e70e46", - "24b22771f303ef742b8ce1", - "3eda92314bf1d09cb5b08", - "692eeb4ff69b42372517d7", - "494807a247f7ffab73a644", - "23564d97f447b0091e74ce", - "2b81c6e67e55aeb6e93a", - "4669a41d4e444c1284d024", - "61036fcac29b84e5ca02ad", - "2625096534f2cf10d83a26", - "30cb89652c8629b5e0dcc3", - "606e14eaa7d60eb7ea925a", - "17715e6c96cbe096c4f9c2", - "42a81f5e10b5435180e643", - "6d849a39e47370e473a913", - "6116bef6a79fb2fc15f0e2", - "31e8a39712fb3a7a11f909", - "7511506751237c1959933c", - "1e47a4330f0bce93db13fd", - "97342eefdbc78b9689120", - "b1fe15d9ac88348f41a87", - "296a247b4b36d5c2a1884f", - "aef2488954588af921ab8", - "351db0dca5d74808f36d33", - "25df9f831698604e15991c", - "761e42e1c908c2f09e096a", - "5e73615c65ae9e74eb1ef3", - "4354f51efc9392bcd6e51d", - "3f7d2ee6cb32c6bbeee194", - "394faf6069c716fcf8a76c", - "51d8b3e6fa0afa106abc40", - "5aaabbd40fa78dd417edf5", - "32d68fc9b8a9c17b315382", - "6f24ffc802a08273be511b", - "452816c1b54aa2bfddcc17", - "142c59f31fc82fb58a7dd5", - "7233f4136f3ace41bedb12", - "2c18c59d95a21961c42f21", - "7eb8dfe838ec5ef9d3ee21", - "19915afea85d27cf8df109", - "4e1162d634d0d5811a2441", - "43e36b6d5a937387b49f6c", - "295932427e10aface718fb", - "5a2c8ca58cb488822e9f49", - "622b540293b1275c5a9446", - "753f0795048443573283b2", - "3c2dca32abbdc029f4a212", - "3fac097802d8f5fb376d58", - "668b9e16f3948f582a5b94", - "1a08e273719d3411178252", - "f4af5a6143d8f44e48afc", - "54ad7fa69dfd0b4c19f7ed", - "65cf5014ab215afd17cef7", - "4c3c570182916f32a6f96c", - "2e8edc0b6dfcfb2392ce87", - "3950591be73642bfa23264", - "559752d946b02da4c2f657", - "554f5cfd133bac2188241d", - "3c1fd5d9a6223b2ce7b02a", - "34c50fc58872b7325366", - "3f8cb5eb229acba822b48d", - "2aead0dac004faa8ab67e4", - "144a6c20d0a8d5dce2b12b", - "5efbbe073364ace07f02c7", - "73862de61086c1fd5e0678", - "78aded63d2f85ac948c449", - "51603bcc8667777e664f9d", - "724f8bcd40bfc9f1ca0c68", - "5169af1cd74986160450d0", - "5b6b96beb19fb0dbada937", - "4b3a8d22fdb2c83abba9b9", - "3ee5a2cc90e335867f0ce8", - "33567e972c90754c86a5ff", - "1c07c875b3a9cdedf7611d", - "3b55da90ad9a162be1756", - "339dd42a42d94342bf8399", - "67a3f20bb5e980364816b9", - "4b6ed31d0715952774511", - "346f2a2b086e1b35095d7e", - "1c614cf9a9d87d69154c21", - "5e263af53ea065e044720d", - "681a88fafe4e6f0620910", - "1418facce22bf24a5e6a51", - "786571b85b2768309c8ed2", - "4d0e82bdf34ff4cb3a603e", - "7c2e242ec2b95580a9b3bf", - "54fc920cc0125e53a92499", - "5696a96208101739ec4ba0", - "636b15a893c301ff23f5f5", - "4956721f6a2ced1fc736fe", - "518711fe03b241cfb95160", - "2e12097225e5783b545083", - "7340d7daed67bcc5cd4391", - "c075fe6224a62c1010fb8", - "4bee7e482b290b1d3869be", - "7e8fbf173741aea1b95c93", - "5a1fe9fffdaa20f4ab7eae", - "58d7de0f8254a81b5d0f5a", - "38793daa7aa086d5e70798", - "6157a651f2640a73f1f90", - "7a6d5b1013830761b58026", - "46734211b970f8a6448a60", - "31b9dd76b9ed5f88dd4609", - "46c6313b3914ecd376b959", - "3e4e77e268fb6e7602e96c", - "74d39a89d87bdaa449438c", - "7684536a92d49a5af59f1a", - "71215d6fd5e662d930a424", - "249b7a4d080be0f548cabd", - "1bea5758655f1400515db4", - "7f45c48d28fd31ceeb3fd7", - "1812bd60b720f8920fe80d", - "27244290f774a00786ca95", - "5566a844e8b1c572f69612", - "2d678e77df571d7ac4859d", - "e243f28e043030ee3a43f", - "36a3336f56c91232544e8c", - "179d4134709978c75bf6d2", - "20ea7b335b7621642b29a6", - "78c437adc3b6ce946cdd", - "57dbda5c8b230a87030357", - "4dcc6ee20983f0020ad69", - "5725842b7246179896a39d", - "6b1cbac9279eaab9b503c4", - "1bc4e87c1100a2d26aeff3", - "2d70f946f2915679b314e6", - "793fd256b009d961487499", - "ee9d6b69f13ec8f385e6f", - "4b4c7f0a822537ff62cdcd", - "48b920d23514d06befaf52", - "2df30214a49a31c21380ef", - "4c4424602626193266d943", - "2d5bb2b553d4ed5bc0795d", - "681fcdfe60f23e3be083f6", - "4f9634be1ae125361bd4c2", - "1ac96b01993da8677b2fd7", - "4cd15a66ba5a2f18c8823c", - "3828df7e9ab6753fb83dc1", - "2071c913edfd4fd6daa6bc", - "669e7a28f7a7c30460a80a", - "3b22ed42f28069f29c280b", - "5ca51c82df4def8b1588cf", - "7b2ef1bbf74c4989ed5ddc", - "40ebb7bac65bd815945e49", - "4a469bacdcaf5434109262", - "1a14d5b10cbcbb9ad3216", - "65fb4589487aa5a16bd767", - "283508a2ed137e839b2207", - "7047889925ed18a885358a", - "9d8d18a72607c311d6f76", - "6a1d554c48496d8d543eac", - "594a3b6273b1ed2b542eaa", - "67cb80a136db30b9d60d6f", - "5106bba99e6268d7bef3e4", - "6fff35974d5f0b86faa46a", - "5f7482c17a568566c785c9", - "78ba33e419cbc7f177437f", - "1f4b918e0e0d47c89aa2d8", - "50cfa48cfb994ab2b77aa3", - "1e4fdc54209c2229d7ffcb", - "4431184365a358de692057", - "7adeede80a05e40854e6e", - "9a39acfeb3a1b4c2bc79c", - "2d2a15867cf9361defac4f", - "3fdb99cce8884ed923271f", - "2d127e6ce6bd0f1872b1", - "1124cfa0e070cf6fe3c638", - "65b7b50446c767e6fa72fe", - "3f0d18b1efb7248950daeb", - "74fc1bfd19b3cbc9867bff", - "34f0f61d6d8d062b6b9d9b", - "260d6ba9444df4b85dfb92", - "4f75e255d88657b2ba4755", - "3c3f770d148b4692e25b59", - "1eb56fdccfc12b22db2048", - "3c81a9658bae42644c317a", - "783c78a9025283e7188a8b", - "7322c20a545b3845b54b34", - "52d104741cfa5fa49fa55e", - "6545cb112ea4be72bc80f7", - "5bcd4418d37c976110b37c", - "34d59de432c0dbb24ae55b", - "4759751a101953dd340d89", - "41e135572f9ce788481248", - "185033e62f44aa85a7799b", - "7047a4510b8c2107737ece", - "381012de4c9a82f9ef1d72", - "1167717f2d3d6238b3d21d", - "2dac9d433ff98cf24eae81", - "4f1c406e243fb2af67cd42", - "685afb7cdd699d5a8f020e", - "4c6a0f6de7e50ac450c0c3", - "59f0f5465ff1e16be9bfb2", - "594ae94ad86b9a719f54a7", - "9225712405a5bd9ade58d", - "3650c22d9c1072238cfcfe", - "36a92b305c21171dd5a616", - "5ba344fee845769c2c86d8", - "3ecd8205beb790946eaa8f", - "5f84ae1685459ae7e24bf2", - "62a01fb38e5c88098fbcc9", - "3c2f54ef99be42fe30d32d", - "215dcfa076749277897e0", - "36304be3f0777300703af", - "147b65e0e829ca30fd88c2", - "4e6a2eb425fbd18fb02cb2", - "2ddac7db8be22e88618b58", - "1c7831e5dec267ccb26741", - "2f3b362f4b742eb82f8a34", - "5505b22d0ddba48ae2020b", - "522afb743f67b3ca56b20", - "81dc886feeee4945edceb", - "77c4b593ec648025df03f6", - "4f0841f63a0c64aad5232e", - "6cd2d14ecc5fc7c2c1b52f", - "3827eb26c007235c46c676", - "484281d930b8ee32f366f0", - "25f7e1ac0d4153b6365c1c", - "2600c04d980b2307982b22", - "6b923e02dfb1da62f37204", - "287593985c21589f72c821", - "c8918a059fa77676f0587", - "76201f5e0110544f41d9be", - "770b83b55e13465063e5a", - "412ae12837a29724832877", - "5cd8f5f9eb6806f67db613", - "4eac7fa0d6b168c3bec4e3", - "5d2972b12e50e727a2721d", - "5517c01ca3bd4da9aef0ad", - "11ea8c21342ce42ebbf9ec", - "413f256a64feb56e242e90", - "29f3402339c3128a1e2c1", - "51eb860c87e1e5b70bb623", - "369c62fe5aafda2a550912", - "2674d42d16e97493518d2", - "6b105359a1a68d94862411", - "527e969f4f6eefe6289ece", - "7ef4c5361ca08ac1cb6216", - "3f3aeb0a1df198d9c95768", - "152dc9fc63d3c1eb6c335f", - "7754a6a5fe6be54c00f4c8", - "222ea07afe042cf765ce5f", - "1086eae159340e441fa0a4", - "6c03f094dfe48c9743be89", - "1fe069b8c57a9fbe5f6009", - "185254fa056de9af1a6bd2", - "3018be3223f82c7f0c9ebe", - "48a13c03c03191471f1164", - "3e94b32e50da81bb5afc03", - "4d08f00a99d95d0043cc4", - "4636e2935765905adcc41b", - "4bc9c371d07d4a025a739b", - "83bfa3efcf5b970ad41cd", - "18bc8168956ccd63ac68a1", - "366546b3844bf45b7527a5", - "363a65fc59f4a8184d3d78", - "5ef30e941639d08bff19c4", - "5d66f0d9dde7339dbcd24", - "33d5a814c00e980600811f", - "5ccbc128a5721a5dd853eb", - "298200a0909b55e97005f2", - "703a6cf857e651748dc09a", - "547264d2566596f18bbb5a", - "760b4f231686ca10ea6ea9", - "49a3641c16382337f3c777", - "33525d5afa91fda7d5fea5", - "4c028ddef259fa2c7d4868", - "575d4696bb0e4edef99446", - "6da26efc24e2d57c26c090", - "41e1bc8a63d042ba714c97", - "5f24e71937dd097c0e8678", - "70b9ea82f6a6c02939510c", - "738abcc274fbdc4ab5efd7", - "255358696f5e9ddbfa467c", - "6e9f47f009d809f84a56da", - "27c6ad85e824da21b1cf9d", - "46a78cc83c010019e8b2b", - "6b828169b3ba13bbcddb05", - "3f5c0a52d2b564cc250982", - "63069f756c8115e5fc4c52", - "55744f373c8b8520d62370", - "43c2ec8afca87567ee9294", - "6354a865e088a0488f2701", - "d165a455f92b5083e0627", - "7252d249ce8cd4fb010950", - "79790e81fd0d2b63f9d1b9", - "5e147628ce9e9a9493f495", - "37755ea728b820f0ab2bdf", - "184e317201ff0ac25eb6e6", - "178cb915d7350e37948956", - "5ab5c85d4bf835440ff962", - "1e2bd3f41ae5c299bb720f", - "722f9dc13384479d1c4455", - "2b514798a553e5bdcd8ec1", - "51890cd139740ee3c35339", - "75d3c5c33e5a2023adfd4a", - "15da282cec1859a9591ab9", - "7fdd8bd273e4a717226cc", - "3915d17a2935e69936525d", - "78acf4423afa2cfe1a6fc1", - "4f140e806dac75cc67fa3c", - "37c6007c4a0d223bec9e13", - "1ae82d51e4845bef8c5d14", - "65a0cb312051f321a95f5d", - "42aa10dc273607be680d72", - "3e26ac2b23b8b913845e11", - "30bed73f7a94de9252a38c", - "750f475708a1369e3fcc26", - "61ade8e7a0bcc40ee4c2a8", - "27b94ffb61590cd0bcd89f", - "3f1e6a84c6b836f245c178", - "239309f551f303d0037140", - "211dcdb529a6bab73ad8a6", - "7869636f37e63a4ffff7cd", - "150365cfcc4a012a673c13", - "2791e42c7f90ab8d4e7fbc", - "1501743c447af65014399b", - "2244b09bebeaafafb0c481", - "36c0bf9a937fe6ca772d0d", - "419e79b02e607a42e6e091", - "400f76e25d392f347d4911", - "5ba0eb3a703d0e42cf4094", - "2ccb45ece6ec9abb9396c7", - "44741cea6d95eb07e7f01d", - "2b3c80a17ef583b6205fd4", - "43fea0cf26a3e256438525", - "59a7f220e101601c1d1b21", - "24974593a8d59a89588659", - "14ee39af97cd5a57b0e17c", - "4807e0d9a38d358d8e14c5", - "64d8389dc8d1b8910fc0a", - "6fd170c2ab312a1f05d814", - "68c4a816c641b5b1090781", - "24e71c2d01e956269446cd", - "3bec30574a99903f587887", - "2b4b238bbabe3c70748eff", - "4f0024b5b5580d91de0338", - "646ce329dbe03b0b8312de", - "5ba2a8023e5bb50b06e03", - "19537a8ee281cd28d6388e", - "10aab6ed7d1b631aa4b45b", - "6810dd5945e01cd2c90841", - "6ac2b70efaf88fd42c4044", - "aa480c5cc76379e0cd2de", - "64532524c99ecb3c365a41", - "321e3fdbb0b890caadc570", - "54fb5f18b6d001ef7be401", - "364f70dfdbb439b78e5236", - "9dfe57d1a9a3265476d14", - "169665894aa2b356779b61", - "127c199cd032273073f003", - "fa33fcce55fe6a32e0915", - "264e4b26d39119bcdc0985", - "593c091517fff61973996a", - "77da1b5a2124b6c9e11847", - "32e5682bfa3fd95762512b", - "72f7dab0b2d2a35e62478a", - "4356ada1ada2921353892", - "aa2cbd696160321682a6c", - "7f8bc7233e2784039454db", - "22884c181cdc222cad8e5c", - "7203cc213679d179eabc35", - "78a4c0445f77f31209ed17", - "58b95d74eb4e654735bebc", - "6a7db7fb47d3a18b620d6", - "63942ffcaaae948e9056c4", - "a2e07f9d73c5e3effd370", - "6667dbaf666f92bd61da79", - "4597c1546c899a3656689", - "5fc3c4b7f7ad5deab829bf", - "61170002cc409ddc34946c", - "736d05572fd4ef85eca2b1", - "1a5853834033d093c63d55", - "bafe681e7e52073b86d32", - "1c9f86b8742e14b6caf79b", - "3886dff828cc76dd830466", - "3b98704f287b0ee4e659aa", - "581eb843dc9919f85a6644", - "697396e6df9539532709dc", - "63606d420b8e8397875647", - "43b23b71c3202b31d91018", - "79486109c44990eca52723", - "2102dede4011c5cfefb7eb", - "235809998758cf7e4acb1c", - "233860a2ed2d566e131431", - "305213c4b30a9e8be153ce", - "7507998b275e3c9bd4e10e", - "64f00973a0eb117b548182", - "1416e580fa8bcb421dc6ae", - "36735381ceff20a76e32eb", - "45f5960a9db06a62821bf0", - "8649a3995ad114bb4d72f", - "374a0e75bc76f0adac7af5", - "6565aab9eaab16f7430411", - "7dcf3e6b7d3d02033c946d", - "65c9be7a29bf45e5992a7e", - "638d0229863032ef249643", - "297ac1b2d19eb1e6e32d87", - "6f339aa4d977875b1f1f80", - "438e5a19094bce43b5b5ae", - "4d8b0cd0d3401fd04e351", - "1b5200adee3adf189b056e", - "1de1227159008ec9b59ac1", - "75266a81bf7f77865e6f", - "9377e0e5c8d0de1856f6c", - "2fd82a7276af1cf8b372ed", - "6dddda58fac4e8afe0c9e7", - "1d85b86a2f3f20e2832ec7", - "35accc5a1e3fb474285daa", - "3aaa2c73e60edc333c904d", - "740f62900b9523de37b6b0", - "7401d0da6ddc33225bec4e", - "3e985c35adacaa90f5715b", - "62c36a3627b9d2b3c18de1", - "7b71ed8d456ee35292c960", - "2648a635c5981b8daca07d", - "2c33c53227ef5693d69f36", - "1540f88099c93111d6c8cd", - "5d9383670de64bf15eb49b", - "2b23443976252ed21088d1", - "7fa540fb3906a29b513bed", - "2f88b1c87d7d02f6c2614d", - "1976a9fa25af6d21cad47a", - "444a50dba1a2bf390bea1e", - "11c773ac555182d789142c", - "3b929cf6fdabeb45375120", - "15bf0eb485af1135b0e453", - "126dab6c2bfc9b83475847", - "c06cc01bfe2a9b427102e", - "6a545ca829ed278f6ee7f4", - "23dfbd70bcc040f36d4c8d", - "378ef780c4d32c3f15b3c3", - "7b115c7c405c6e4356bac1", - "1a789636807476ba5bd789", - "35fa1fca985387fb7fcd19", - "21b466e3230d809af7aa6b", - "4d1a8b95ded29dc79fd401", - "59bc93698864451646a053", - "7d6f33ec4a123fa281cabb", - "168ebadbade1cbc44496d4", - "413278937e6487a988805d", - "55407685456c2cb8311d26", - "79d07c6a6298d34020dfe7", - "65ab167d8e02a8df26439e", - "7dfd6cbe22024260a179ef", - "28d6cf3e20845dc7283634", - "648ea8b083a9828f8af17f", - "2f64ac4f819f8343111866", - "17da7c01f870089371d6df", - "50f371336a648ade74999b", - "1de402b5c6118ec8861aad", - "48ede8d4a9a88f7613388e", - "5f70485b00138272e9a41b", - "65a1f7025bafea5088145c", - "68d439e82561e55cbf1eed", - "3d8509040aa8739f034dac", - "2dd21df4dbce295378bd06", - "111d6b945ff69be530cfca", - "c1fd8fe80d24243e7b5eb", - "42772160e3ea402851c9c6", - "49374e550d8b335cb151d2", - "71faf2ef0654e97e0c23fb", - "4328d17f00529ea0fead97", - "546ec9785ee72a2a72d886", - "5d50e00035655b4d4ddcb7", - "4b53718060040e8179d82", - "282a80b8de04941c547168", - "73673685484b4f3492976d", - "5db729c46c687ddd7690e6", - "2cad73640590abfa319b6a", - "21ba4c5acd17d59fca0ed6", - "186605e063004c7e4a9375", - "2f687a83227d2d20f3b227", - "30abf45ef025352e681192", - "6a76e3eb445dada83ceb12", - "7146b897c3d924725bd0cb", - "14b68001dbf2f798322812", - "54112eabbed42ad31637c5", - "467db4fe225847525ef33f", - "25032025485a4979b90394", - "bc149e667cbe5a17ed77d", - "ba357a389bca1484d7e54", - "34ddcae84938327a3cbc30", - "2e1709b850c77f2d508334", - "15db077682cfbf170ce259", - "280bf57e6ab95037683d33", - "14f23f2aade2de50fb350d", - "57d0cd94e03404b9cc57cb", - "3282cc1545c9e77ce08abd", - "567508a3d2a7b4fe3b395b", - "16d8ad198832545831c93f", - "7d88a8aadc667bc60fcb2e", - "65118f1b7c366a8bbffcb8", - "6766e290c73bba54bcc710", - "2aad9e8261535baeb20b71", - "4ba668ebddeaa069043875", - "3f98705d2cf6346bf00972", - "541a69af40655a83e366ca", - "215c7e9a1d796b37a56336", - "419d9a35dec3e5f421baef", - "163690a8fd51b113410cc0", - "1d165ccd9ac1e4efca4a32", - "1d78f3d7e887debfa04bf3", - "6b421c0667b336723fc0a1", - "2cc7417260782c0d2394d3", - "21887a11425a371d17db86", - "5be7c40d96f7c97153eaba", - "2e061928a5c3ad9bd6d9be", - "7b398d970ad745817bcb61", - "f7cdb22a187815c33c5e0", - "a4f6b861d9a460f5b65a6", - "68d4b88b77dfae0da7a5d", - "4e4199871aec7ec1f99895", - "68f5ab17da1cc5dda22c36", - "1901320882ec0093fcda5d", - "76dcede51c5087d374b20d", - "38c3b4008c9d0442e7b602", - "1edb6eab35de11d4922150", - "5c53790457f0f66baaae2f", - "664ad54353749f2ad36105", - "45638582a87d07b0339df2", - "18b021fe09fa8bdc44e567", - "2acc282877d9cac38e38c3", - "7bd177160999a650655c6e", - "6717c0177a36454aef446a", - "6334fc3ff70d17dd837781", - "499a1abb2a1381278175e6", - "14da57f8c43c94d5133d50", - "4a1381ccb93c34dc44cab", - "7cb4b7b324b314195807c8", - "59f2c50a64b0c2a3e77442", - "426b930b670412d271a091", - "38aafca45b266dbeef6fc5", - "35d63c19d36b85b5e96648", - "31204f9f1e25342bbe28db", - "560e1e8aafcab315236068", - "5b80c6e1a5c4dcb3166335", - "1d41ed28d87d24620da24", - "38271b1467ee062bfe15c1", - "2b7758dc0945a30687fabe", - "4fb33de912dd8d2f8b8081", - "4d6d3f3602597781bd2ea0", - "5b509a0106f1d06627c353", - "7ffd3daf76b1e818134f24", - "858c45884b129dd66817a", - "70c9c69419338ba44d6b8e", - "17c5a39deb46d102235506", - "2adb843a58d472c17edcb6", - "798b816a4dea5ab964c64a", - "68705a826f80224f09c337", - "b720b9f07a6b1f41654e1", - "44bf623ac807d4c96747f7", - "16eaf321bf41ee635d6d46", - "37107b083cae132372e4d4", - "31e9d0607a42f7e54a8c81", - "4d23f5ec809ab5057c2705", - "10a61010d82426d21109af", - "1ba28761d3577e14d38b38", - "c57749387141da5f8fd27", - "4afedaa595cb8c309d3fbf", - "3fd90efbd4f0a4e173f589", - "49b4801e9a2a64a27691d2", - "7255e6805e164cf9788cce", - "62ae26dfe2273af99c4830", - "7e185faaca849a7f135848", - "10cc6c74c4f9fcc9428f7f", - "152b3e507f8b7898991275", - "15a3be22e80e0f6f498608", - "54e5b2458bb84fd7d4433c", - "656c647508629462e9a821", - "4c60164f9602341914167c", - "2a17c7297a08a3839ca0e1", - "47efddee37fa0ef6a72a47", - "106fdb273227296116f40a", - "524a00dd634d2f57ac7c6e", - "1e6b9387cb8fb6494ace9", - "25d293607604db30df2e4e", - "2a07033e306623cf4e37d", - "178e61138a7396d55d224e", - "75aa7d0184dbe8ff376045", - "421e7c19466e0847ffaea1", - "732b807455afe5538cf678", - "1a756f67d7e3e663369a04", - "389f7a523536bc08e2c52e", - "3a0c64739838b20476e0bd", - "4346fce81f02878bbc28d6", - "2f63eb0fae8122aa717440", - "59308e5db85655d5ae0c4", - "26b549a59dc35ee5ea7b82", - "4d89a145aa9c4acc9cbc8c", - "71b31c9be0276caacd1146", - "718c4a4aea9ee0da236930", - "7222af7c6bff611029c53a", - "7f4b55a70795b9d26512fa", - "32a9d4d4f421cf83f9237a", - "53cf166384d9f967e4ee4a", - "4566810f52dbdc6e52d908", - "308ab3a2c4d7f4df4b6a31", - "48a0fd415822566b2ecfbd", - "242cca5b643a5f97a01a20", - "1c28b93f693054a06fb391", - "5a2cdb29cc6790b45d1f04", - "5e8a5f959be2a17534c9bb", - "3fc3e580d2ad754a34bc48", - "6bd645b33c041537bb5186", - "3019d2c9a4a70055fade00", - "142fa830b7ba88d08608e3", - "47226da695602ab6e77894", - "70044b2b283269e2d14166", - "46ef25878ebd3ab0b864d2", - "557bc3fd4a1a6866c5d19c", - "7b0ba619013363524f168a", - "48b438b41e1bc7e58e6ef2", - "39a95d47cf87d7d7d6bc8e", - "27c1b7b41af947101d694d", - "492683ece46681328f9912", - "3ff99310762f37d685ca95", - "4cfeaacecd47507ead712a", - "38a39ada5dac01b5c2adf0", - "dea3527d089eceb4c22e3", - "7b084b907f4fc0301dbd5", - "503f8d64438b7a99b8de08", - "1d9a776cbeec9f5dec9407", - "8a006b686db9c86eb0756", - "144303d93b170584849f6c", - "6b5617e9152db554d999bc", - "1b9850e5f0f8fec4d967b8", - "20fe6d6e332154329f831c", - "5cee3684d600afc7804db0", - "1dc0a99973375f6c4a4583", - "4476f33d15e77d3ea6c712", - "11f2c34fc87060adca2837", - "71af54a2496a076b559a6a", - "2ff21a8761b9bce5f34f74", - "78b5c76a3ee8c2ef071fa1", - "5738f30e5cb40b4ed83e60", - "59fdfd7775c9750e48d811", - "7b609aae44a59cf088c570", - "4a67b54dcc404423e6b631", - "8ea7f70a71ad46c0c260d", - "5ca4bcb81d4d03018b177", - "169566a480e42dcc8863ac", - "789addf402241ff646d77d", - "13b16e69e645c1703bf7c2", - "16f732c5fac8192629ddb6", - "7731327e4c6ae66c8e47a1", - "cb8a50376e8204b8b5ea9", - "18eecc5a940548e7c51e57", - "3ca90695aca0fd32b28871", - "728caa6061cb6ff29e6b21", - "3d66483aa6674adb6569c3", - "1208a98ea1dd68a01d3ec8", - "5186a4a6ce8351b40466bb", - "79c75783449d733d93b4a7", - "52f87910ef7e6dde1f16dc", - "57aede4ca861e5051b15ea", - "70f2550983dbddb8957b2d", - "720aa7a7bdeaa025a23a54", - "3e7db1002a9116a5e20032", - "25d1c185377c3cd8e704a2", - "794294f26a938e1caf3c0", - "522619b83283553c71de74", - "4dd985f2fef5c539fa6a96", - "442eb4a36ab0287728c1d2", - "2a2b13112979d27489208e", - "4d43f85ff03e3cd18ef302", - "71e916ff79204bdad49695", - "270dae1c5ccafaa07ae8ff", - "3a2f442f3b3a9a2af00b28", - "3834a1b7acb0f05d9e53ca", - "5ca6e41b81529e38a59f6d", - "3164747c95104338a78b5e", - "b66201b62ddf6d13c5534", - "3dd366ce71f1fed428c326", - "12413ef53ba7fc6fb5cd35", - "20f6e36fbf07174b587397", - "362261ed7c97591714ea9c", - "1ce2a05bccecd36df96b64", - "358d745e0bc4be1c3f4586", - "221bb5afe07669d916e136", - "624d49c04a48d42d76c466", - "a3cfbf8b779e15bf28c99", - "28eb082844c0ed277d2520", - "4c7d0db8193430b75f41f5", - "3c9ecb18a83b901f901704", - "735a03f218370f8bd85ee7", - "4db4f1a602cec485019670", - "70357dabf2c34c8309c723", - "ecef39a1ef4b4d1e8c6dd", - "2cfcb08879a9aecacf316e", - "1175d70c2c07855db37245", - "786d54b4d5ce74ddde20a8", - "ff53eda132c9a3cfecc65", - "728cea43531fbac95263a5", - "20601a054af9d51633fab1", - "127118c35aaf80dac2a57", - "1db83df0a168bac450e4f8", - "39c167fbee27f65e96cc7e", - "2b90f954efc9f58a07a363", - "63f5fe049f46d509d141d8", - "75ac7a48082d5afa148e7a", - "569bfe59efe21364bf57e7", - "475131d01f3e6dc3b169fe", - "716991a2a17f536244885f", - "150c29ddf5483fb74be06", - "65fe3a22c7d35ad3f875e7", - "1754f51aa79c3b0803bf00", - "a4d6bd96f61637d730c9c", - "460372cf36a22fb6b9641e", - "43dcb4450a256b9a0eb673", - "10fafca3d5f71faff8f1a", - "177f43e8d62e87c66b9da", - "420c1c0074adbe0616df4b", - "1e39f05dac576881e6c295", - "7234cde8ecc6673caf864a", - "661787ba011711628186b7", - "6473dbfbe4a3f63d08e3f2", - "62b2e70d411eb11bf0a695", - "2e684b7951a2526d838fd7", - "5b4aec35da23a27808974", - "51e267e9a5a7684ebfd343", - "36b36922114363ceb85a26", - "5687a42dcd55b43227f657", - "3d28e1c12f9c60e500dce7", - "6bc6acd592c0200b749e07", - "773a63e6b7c9e3bec91272", - "536bfe32ac8da07b253be0", - "2146fc84389596cf6fa8ca", - "12a2fa8c4d06a694b748c6", - "49ede33966bc3f0dc8757c", - "4f787847feba11bfcbc764", - "b2687172956319218655e", - "4bdbd2765933e2b1d70563", - "1ef9edb1f958cdf81fb9d8", - "6e8b2732511303a48ef731", - "3608208e4497b40a62b3a0", - "2c4bac0a0cf06ff50ff71e", - "784bdef1566f244d4ff44d", - "5cd3a1cc8bf78e4c7e3747", - "418b73330a3b4d1a80474f", - "5f87453deb48ed6c9a1afa", - "3d9131aa5802e27a83eb61", - "61539cf7b388689e7a260a", - "260213253056e29f0ac6e3", - "2768a7a783d9baa4e5cce3", - "7e61e3317d07a1009894dd", - "6927c4b12865ac8f053dcb", - "352d204330140b3786230b", - "67ae2ace35fde529154a8f", - "7e37a126be9507ba4c717f", - "2306ed04565a9cf9fa84c2", - "6b380bf5d71fe523ad1e4d", - "6aece787aae5251b57b3ae", - "7f2209419e3163fbb4cd8a", - "376c7a8d0fa0abf4c0bb7c", - "39a26bf8336439ba9968b4", - "620c14b60053b660420c4b", - "19675db116558d90bb4f6", - "2c16632a312edfedcc7f72", - "1945686d70d9df98093dd1", - "62e4e44df51bf11734aafc", - "5d3293ca54de6a3aa06b08", - "610d07557d991d9db3dea7", - "6b25878a1ec102b9e883f1", - "5d29345f097e1dc041bc7f", - "797d4c38129f52836fa5c7", - "5bb2eece8c95a515d2e2ea", - "451e904c04882b739d233e", - "4dac1ce4b87e60431b8a4d", - "2f8592e02ef759cdd34c72", - "7c1d3420db42a6ffd37cef", - "4b0d1ff6297b378945b906", - "744db8f7e25f69bc47f2cb", - "7fcd5bd9328b9f06223a1a", - "37f7d323d5bf332eed1bcd", - "629e9c894bbbebf06d3299", - "d427f0f9d14ecf4c54fbd", - "71e1aa5a9aacb38b66f605", - "361fe28e640ec02ae49613", - "551b691726c66f9ec1f9e8", - "523ee7b96bbc2b0977b4f", - "52e6bde0fed2ecd82f7bf", - "3a4a4ac73bb38c0c48aea2", - "207cf80fa76e8708f88dc9", - "2bfe7376e8ab62fafbff59", - "7b8ff43621b7fb13c3edd2", - "726dd56f61c4c5016201f9", - "3915c71f3b447b64ce4513", - "4781781ebc739ed9d4e35", - "3669984e1ddcb753afb878", - "6c8071fad8933706efff6c", - "25330fc3e5df50eee77cd4", - "316bc661e89aeb9e7e20a6", - "2a035934ba5fafe2ebaf47", - "515a0593d1e619118d226b", - "72716051b13a2c1876c8ef", - "98079c36403a029b3f0bd", - "388d8c3c958b6abcbf6aba", - "3d9a1023138b0e9cbe7d70", - "7bc0acaa724475da5a8a83", - "4a266217d4534cc588119", - "62baea1b89700a3953e872", - "5fa826fd6352f83c34bb5e", - "71be60f1312db2fcc7f045", - "51cf9e84f5414c7907e79a", - "1fc064c4398ccf6bf7b1de", - "70594464b46de9acc11f02", - "4de3353d33028c5f557394", - "15060a6e69612092d45768", - "2142584bb5cff6c1e5011e", - "7eaf34148ada80711a86fe", - "64f201a4086e40b2a3a19d", - "2d794034e6ae324ba7041c", - "56359d56dcb06ea3ab68ec", - "49d6a78a88159326775c2e", - "32c2902887e1700cd5dddb", - "c8806bb60205886d4ff9d", - "c0ecef4f88f5957d4b1b", - "b0715d55fe0c1edd9613b", - "b512df0270e6ffe2d4a9f", - "563e208513fb23ff9ca7d", - "54c245a123767ef7f22e33", - "5e83dc6dedd0679793feca", - "3c53d6131f8c41d5d7317b", - "349470b19ee7a8cf922b33", - "432c0a15a9dc31696b79c7", - "3de21ce46f7c8be3bab3b9", - "669f3588d7a4ca7ee3dd1f", - "2bf32012cc6354c709ad2", - "2e5ffe59b5dd3843fa4c17", - "601b382825c1515525a19c", - "78dfe864170ab14a408743", - "6ebb0dee9291bd90cd2215", - "6f52ff1c7f6dba719401b2", - "d16f53a28b7042d305524", - "67daf6ba4dc4d74236df77", - "72118d192add3aa4c1e0b6", - "7e1ce3bec1e98dd35947ed", - "2330589e6c22439bef95d1", - "214d49f3e2681b232cf62e", - "ceff6274c7b15ae86dcc", - "ee736adb9b9c1860d483b", - "550e4c9178e5dead2f815e", - "651be8b59b15d629ab774a", - "655b44d3a92231714b14c8", - "1a88cb781abea4a70cdfa7", - "7a520385f587099a8da6a1", - "42a1f9791054781a203d9b", - "1aadb770481974ec7ba970", - "1634b76faeb97237505ef4", - "577a2773ebc9e2412cb050", - "68075aa010a2a7afcb2078", - "e5d22d0ba9e3194e2337d", - "68c1092ddd7cea180b7a8a", - "1f6a141f6eb54cb95d54af", - "6db9060a2078f4de4b4e1b", - "21ac3ebe991cfe1bade37d", - "45e67b0777cb6facf28d74", - "398768a52710b109c92dcd", - "6c65a41601a28b4854db0b", - "3fa82c77c11ef3ce373a08", - "2219a8eabaec2cc4da44cf", - "25b286320c27c0f91c388", - "c663e7994203d116af45d", - "373211f704832f37df113f", - "33f6606f82062475e2caf5", - "77ae05c9ad4bb1a82ee6f6", - "72f290cf9ea470dcec1318", - "20cfa0c6bfbdce5e399a70", - "384ac895940651e4b3df31", - "2a6da3e3f6425cc4caf185", - "3559d5470cc8be88bbee52", - "731437b69ca76a93992caf", - "31f0df7953457ce90524a8", - "7fdefc35775213402acc91", - "246e8276fd64f7af18402a", - "1e604eea4a6fb7804d131c", - "f6074b1e17e08713a2a46", - "23931a4d64503bc81a5a33", - "6395a035a6a5e009dcf586", - "23db937264552bf6dc2858", - "50e45902fe1a308ec88670", - "42e82d8613957e0acb2b09", - "3d50a612150493864e2df9", - "1f08599df3ce28d2e2a99", - "172e3a20b269ac416b7186", - "624f69e6f91d2b9574cb8", - "33b05c78a18798e4462d45", - "5d5e844e1fd78c36c3341e", - "5a1b57c203d09cc8a22696", - "775bde6bde2d0aa4187fe7", - "4be11f1cd60954626093b7", - "571513666bf5e4e0b1c7c0", - "30e484fb4ce5927a937373", - "6ead11e0936e4bb4e855e1", - "14b5583a83133add54d368", - "361de61b4e6057d1cb2274", - "24364b397921eedc03333e", - "3f26224827d27901ba392a", - "147a0d7fc26817e7251ada", - "4debfa77d5d5f3fa106f86", - "1f8b63c5fea99ffd6a5348", - "59dbf0c177e94a664cfe3b", - "656e5b10b9da085176e0e4", - "678fb8bf7f6342c5764339", - "2cd2d00d4262f35754bb13", - "67b770c97867478cc69b37", - "bac1f8bfa0e63045ec3ea", - "4303859a49916073987344", - "322164812a5696cb2322b0", - "50148cebf8644fa7375aa", - "50b37142bd10ca63ad3866", - "5a86321f172c81fbf185ef", - "4972dfe88d7e4fb02ffe72", - "3aac1aff3b6e14d31a91e7", - "6d575f1601945a3ca29eb8", - "6c290f053f3f46327ee8ec", - "73040349f8459e94069012", - "2dd44a6d1765874cf1dbb4", - "52492b4a4856d777ca0682", - "76d72d56a09f253d257f0e", - "6a4862d59f8198b4ea0fd5", - "ee2c219af9300476a7d41", - "60548a10984139e59f5d8a", - "423813f9eb92bfadf14d9a", - "6a3f78db4e25085a772f7a", - "a3d31a1daca53878fe695", - "1c24006c67392d350aebe9", - "5baffc06fe51f5caa49a4c", - "6f4a829757301eb1143585", - "202377a9328fcb8f661a5d", - "6506edb4005521bcb61671", - "208dfefbc938eb8f166f28", - "2f8aa359ac5538f4834ed7", - "6b36296c1bd668243e920e", - "7856c391e8828b90a94afe", - "5728f13fbf1367c5292a3a", - "6db3eec1da4e57eacd7cf4", - "520f0b6932233966b7bdb1", - "225461e731f47cbf2cbf5f", - "15bef1b795296c7e8862d0", - "217d231f2ea4bf28c97e44", - "31e4aec6d42e52c762e301", - "16103ea0d454ef686ebf4d", - "34470b1eee2f871c42ba71", - "5d172643cb569d9b2ab357", - "45838fc0d9bd4e814df398", - "520d412f22645bfa3f3a33", - "5dd2532249188dbe3d2539", - "336699d6c6f15f6ab914e2", - "48384f03b178aecb456dbb", - "358734094106c4c77371f8", - "13705ad9594243161047cf", - "9cc0a7524feb44aafa989", - "2f615de4e96f8f9837947f", - "4f571e68d11ba0c201ec2c", - "1c7c6456335bb722881302", - "56f01f51a5be66f649b1d6", - "4a2416a8cf412f996e9654", - "5593dc730a3a85d6ce77d2", - "70628248b6cda7311de5ca", - "49212e86ec70f1b328e11a", - "3669075c083d3a0547d7ee", - "7c64411c354fca180b974e", - "be2266f15dfa6e02e4a02", - "69110081782c350722756f", - "5370ef9f2399e3c803b5a6", - "4277911fa0e430960db091", - "46d2651ce40dd1fdd11e69", - "65838019d10030d2edd34c", - "79ae8d3a65221805ed59d3", - "4762e175d924ca1dff7d06", - "226f7d490aa9d47314570", - "673a9bc1330de8c0b0abe1", - "a80defe299bf7c4d81738", - "1916345f1ad90cf48c6472", - "13cc5c5fa7afb2b7468106", - "656f70349417ef562616d7", - "520db901eb8309582e12a2", - "4253e27061630b9343ddfd", - "43012f86bfa02bf0033ee9", - "51524048af5a6750b1955", - "37a4477749686070e7e049", - "39f7a72e1daced6411b1a6", - "4a98326f880a44e2d6ea5e", - "574f95a475dce62a3071ca", - "23c20aae79c2ffaa75a36c", - "59f67a0c66d5e9744004c6", - "25ff556cf1afefe2cd2ba9", - "41be4715ccf6dde8b12086", - "5e9464fbce6027257d92c6", - "5b57bc12988f27dd0ed418", - "1f1c7eef9d0f99e1e209db", - "1a95aa2ba56c053acf7e56", - "6f085a8f46a66e79fe4f92", - "728aa131a37012e184c2b6", - "21469f9c49fb4d2fb54baa", - "67d12b5d61741b8623f378", - "2a1abd32897155b55014be", - "35ebfb3fd5a71979daee0c", - "3c994e655edabd5cfbe8b8", - "b5f14620587f1e8ed5a45", - "4cb0c7462e90f28fa251d", - "608a29bc043b54adde90b0", - "6337453f9c180b8ddb37c4", - "60e351e7834b181d30a00c", - "15324434e27844cc4fba51", - "259839d29faddb791e3548", - "198d839621f761dde4f853", - "221728332d3142e3346be", - "48cd6ee15c4874d342b21f", - "7964fb4049b23d750b6f0e", - "365cb247c96e7933341e76", - "4f7806a65676c896ee7db9", - "99539a5120bf06fd3edb8", - "4374a87512bdcb27925ebe", - "db7255fca12f37c452ffa", - "4a2cef4e3606d1b9422334", - "b8385ec48f904d72393ba", - "71d26320321cdb1dc925e0", - "1f8889a7c0321f5279b37a", - "7decc101d84d7378c8efe2", - "1526a67a2f54717285cebc", - "4a292844d7aa26520c09b1", - "5edc4541d1854504d071a", - "44f34a642236b1e7e4c8fe", - "87eada956963224c06418", - "76393b1564fa2cd841480e", - "2aec8efef6c41604b67a83", - "2644cda468b716b53c99d1", - "4d74065738715d35d47743", - "1118a89d656497538996f2", - "26102582959271955d45bb", - "1318f3d7743d8ee4ecfdb2", - "3128342c1cd21185c739db", - "7568ac37df7da28c47bab9", - "be26e79f27c2fffd5718b", - "2655fc5da8cafdc10e8c6c", - "6336954989b8a716380f64", - "2f1dd3930a2948f2187f86", - "90bd6d6fef2e358a664bf", - "675948e6670907b03227ed", - "2025bd13134bf0ca69b0f6", - "509dfa92ab81408672391b", - "5c699bfc1a98ced38d7c88", - "14816e04a6b799d1ce9e1e", - "61978b574cf8f6d53118d6", - "4e203019ba4b94cd691d60", - "7df66ef2eea696dbe6ad95", - "43bc8bffd5b4fa12491d7c", - "1207aa2a4ea7c882b5e76f", - "3e9654e3940c0f541b93cd", - "4a64cce2fc4633dbb63e09", - "4385d494a7bdb154810c4d", - "dbd1bb9693e65c5eeef4a", - "7d58cee39bf1830f1b3ec0", - "6cc6a998d40d1bad211cd", - "3aa6d80b7b4477df65330a", - "2ae1383e51812f870ebf41", - "1107ffccdffb2932659325", - "9cf05f6855d4068390948", - "36f24af02e5318171bea53", - "4d0a046c7ec4f54117f367", - "7bb1913bf745fa526f18a8", - "2970c6e86dd017c5341ddc", - "58c411222783451febdf82", - "657128352843035ba5fee1", - "13c9d1e81de8cbb64a1797", - "66e2564796168c2d0a015a", - "1b9995439565d095eb8a8c", - "43cebcc2f248fc1fcbd6b4", - "7e18b1dc04cb3af247aa31", - "269ad3cfbd18bd255786fd", - "2f1b9eb8c8ceec3aba8c3f", - "890072ab6d3eb608d30ea", - "4e72dcffc8f26eb136b7c7", - "71db6b9125d5ab5b3e7493", - "57bcb68e1f52791794bf4b", - "7489fd5407cd56abfcfc49", - "45d43d697cb8503c85839a", - "2021e0329a909a39851fe3", - "6eceb600a9b81fd3aa7175", - "4d63e68650d056d4e2cca2", - "21789b3595bc366315af2", - "781973046ae51aa956a060", - "2353c3f920ce7af530f96d", - "4a8154e2948099e7b7c4c5", - "319945f43efa75c6d6fbd6", - "1a0cc5d78d1da3759fd0fb", - "75a29d53450973ae07e5b6", - "670c6449f82194e5367c1d", - "6978fb86dcb4ccc82a3738", - "f6c4daf384fb3d39aa985", - "47df2e03e1548a16e223be", - "36224c16a9190272a21e14", - "abbcfb2e4c3da6b090978", - "1fb7c568bdffd12b767330", - "77f657453333dfbed3c7e5", - "68855602ae559673b8a2dc", - "57b79cb347145bcbe43bcf", - "542f3c6130072ffd145c0a", - "7d43897c9a717ea4ffaf53", - "2928531ef291fb90d243e3", - "6308b8f5574126f70ec3cf", - "3b77afb6ec85d92608bbc9", - "39bc9fe63b4ca1891dbe7f", - "14b126e3c0b0f4dae2ddfb", - "634af4f8ff5eecb70f9b3b", - "5939fc19fad9c14c8917a9", - "cb351e8f1a28278af3af8", - "41ff1be99bebe99b10f273", - "32c9397c9adff65d943965", - "1e1de465daadd9547d63fe", - "1924697a3681efc60e8e70", - "3e14120ed24ebae50e64ef", - "29bfa87365d098b3fe8377", - "48ad93093caf03d61b0aa8", - "116c396589d81e0684d5a0", - "4550a8c9126d63e137546e", - "3d325eede75d0a573042e2", - "715fb02624875de3ce495c", - "2c1cf6d476ed98aad97b90", - "41ec16a5c725c7d32d3a8d", - "2a6ced30aaeaaa3957eaf", - "284cbec8937114a1728cdb", - "7fd049d0f5d16bca84fbf0", - "1ece2489d9c16fd0d7c093", - "7a1817cf8f21c4f863437a", - "2b89a454954d4c6b2e2120", - "44b51755bfc5410d6cfad6", - "31e4383d0d65d0adfc3084", - "2f44e6e7eed452c1b02ade", - "46861d4c2ab5de181f3e32", - "30c01b8abdb9d98a7941dd", - "593ba411e3481cff090a6e", - "5f7998cdc984bda089a530", - "38863908f348e0ff24d2ea", - "7db23dcfd5b48847b2da44", - "70cc62d0a35cccb85972ee", - "51e871e33b066886db1e57", - "7ab8d7968452d732fc3362", - "6cbec7ee27571943d99309", - "65ccc844f43d7740c3bb83", - "2d92e146c92e5c2141114e", - "78208a8be2c33504df2573", - "1b892a6bc6d106036dc210", - "1ba30d22d8ca0e3412c0e7", - "7f5d5abee4ea627ca346c", - "29d27ddd5f46b0a514ec85", - "717a62d953937ab8d63ef4", - "46f7147d837df6469c39be", - "1e9e640158c2d5ef405818", - "7f30d40bb0193bcc3bff38", - "7e84a589b79843d0f09d89", - "1984882a708094eb26643e", - "6b386c8a9795cf0b45e160", - "282bde17894173789173e7", - "75b60c74c3f4835e0ba3f1", - "66673b06f4474ab9ac84e3", - "768b4e15703c2b99a95ee7", - "3c7d066200b6ae5892048a", - "194fc13ec819c9e2289cea", - "3c066553be4fa2a741db4d", - "31018337a926110b0a5b91", - "7ca0b74cff2de67657aaa1", - "610a799f5f9443dd8f333", - "29dc0e371f2a3ea6cf4d60", - "bf1c05f166718be1c6836", - "309eb70bbb47b20185134f", - "4b31d20ed3a1f68f117d30", - "201a5f031183f9e3136174", - "6d82429df8c04f3e8cbdea", - "4e4d1094ae9ce9f42b1d71", - "65e071aa89e8e9caa17f", - "7c3ad9d6ed54817d082b65", - "352a1b67a355f38121c462", - "2d980e097ecb2ab91b9b92", - "96afde4db924db62eec7", - "6e20ab59697e8bf608ee9d", - "2ab6145578df975521753c", - "5c91f707bee21c71c33c34", - "676d8d92a92b0706da21e1", - "3a82f64175d5b3caec9c53", - "2ccc62a5fe0c2d164b78ac", - "7f53a40fb6d59c55fc0a6a", - "eb12a34ffd8e97426aebf", - "330554538efb3452d928d9", - "37902c15fea70cc2588984", - "1e3f1f00ee5c87d8bcc6a5", - "21e6a33067365b1e718020", - "4113025c4b26d50d501a53", - "1d50b663f8750fc777a8a9", - "47267802b4baf11a616d7b", - "206a9c38358f291b01e407", - "7529b300b4b89c580a5f62", - "59aab11c164124e5cdf604", - "3d3a2d2ef7d22dc8adb10e", - "1fa48382ab305e0404adc", - "6e72d626e97997cb842159", - "53a902325a9087232d64a1", - "726d30610282ed39d8f203", - "6e48887c0bee3ba8386f63", - "532cc2e0afe1d979c42a70", - "614224558d52e5d4eb23b8", - "c0bc8c55f3b95e521ebf8", - "1b4e22a54398ec5712c2f5", - "45109475272b0ee96581b7", - "6c065cf636d6bc65762095", - "7bfe5c12baaa86c60d8117", - "62e55ea318373ea102e458", - "46789b05c1e88afd58b2c6", - "37120883f03d674fbee3d7", - "63a482d47b34384d6c0abf", - "78778c448d7d69eeff19c7", - "69527863032c1ba7d7e238", - "574f9294e066c8fdb761b7", - "3adbdefe2bc4d894d3eea5", - "7c2fed1746d715eb95529", - "2501ea3eadb12569e01e7e", - "3d49c943bed92220933501", - "2327087d544749f348c909", - "63a2efcfe030b5eb3fd526", - "2d2c322dac49b5fc4277a6", - "4ebe9580f66ecfa62bdae4", - "39450177cdd3980c4efafa", - "3349dac2077bfdf6a12d86", - "56b71258283af76e7bcfab", - "2bcddd9fb0f98505c98aa9", - "45166035762ea541feeea1", - "6bf558bed09b770ac7b7db", - "69498de156a0aa10a4e2dc", - "6cc9f90d012be002904668", - "32f8a36cc1b46c25cdcc28", - "312ecee1519b0617d31186", - "706df4fd50e1c42994aed3", - "4edae7063e31e196fbffc4", - "7bb42f21df6b474c926cab", - "7c2bf4a989b0889ab6c2ee", - "14a25dabe8f8f9bd2745b5", - "14266a10ce4302dd32d262", - "411254ef95bca10cdc61b9", - "2cb3e5c4dae6b173319195", - "575c81fbd5408f583cec84", - "904098cdbfd4389279e30", - "4499b6e3311b7fe5b9c98e", - "210804240b673797c1da0b", - "4cfa062853643ca21aa8e4", - "155503fef8a8a42650f8de", - "214de8b9e305b92a9ebc6a", - "aebf119c49f1f5d4fa77", - "4019e2ed5f4f686e75a334", - "26e8b6fae1b81184be307f", - "4cbbf282cb8d5b492509da", - "32124e45d595b542218cca", - "4fb7ac8e103e64af4c501b", - "4a99080981fd90fd8f202c", - "5fe19870cf156902f09ea2", - "35da7f1fc27e6edf7e2774", - "171772c43b172c6f59b4ee", - "396792f2585d3e823623df", - "68b020f430372f0b20817e", - "58a41d74e16c1b1fb6cbf", - "6ef7e0b470470f565c088f", - "4dba440f7f398ce0198b25", - "2840ecdbeaf847ed4e56fd", - "2f36ea2bf51461b1407878", - "2cf0b3c6e55d4f6c794d8f", - "31fcd9e9b87aae6bf32f83", - "47626057be8af9d92cef74", - "2113e1a93f5d2f1cba0377", - "4176799b704bfacae7d897", - "524919eb6636c6c6c14a82", - "64d1d7c43b00bfc99b8bb2", - "76a279212b584d95ed2cd0", - "37e704706a7967491e3628", - "5e1c654c63269bdc77fee1", - "58b898760417610a09ff41", - "64981a92737099a91d3794", - "571cc10547604b09ba9b69", - "6714be0beb22d71708c5e6", - "359b739ee10f4c4f24e721", - "454b67d8b7470679eeda79", - "615326e14c6c74c717def2", - "2dd86ec9cb242b4e68016c", - "62a4fc7a9af2d27e92b08f", - "cae1cd222ac38b9a89a19", - "5fd2fb0300581c5f59fa7c", - "1488492f946cb788d721d6", - "509ca3fe7eae200044712a", - "27c4576460764aabe86ca", - "72e3a111047449df428c07", - "4dd2e16c6f9989907671be", - "415d623b63f929b3ef879f", - "9b13c11e290284a86caf", - "78b61404bffa36b135773d", - "10c2f27dd2e5d8f77a071d", - "684e96f56360b04576ab1f", - "6bd55e81cea4df6934b8f5", - "288723d0eb9a25150c0772", - "4eca5fbd35a4778cd18f80", - "590c069f4d458da38448fb", - "6a91ca9f24a59bd3f77cce", - "4520d49550bf0a2328020f", - "31340daa6bee66dc702e47", - "21cbfd5db5cf856bb6980a", - "2ac5b705311ca0e8e6bcda", - "28390f3626b1fdadbcbfd8", - "3b79806e60c6443e5b75ae", - "4e1dab19fafdbf4d11123", - "4bba04cb6f7dfe33e4bd", - "25b65fbcf4deba1535165c", - "5d2602e9c7bafe79929bee", - "1f5e885344b51456b2195b", - "5c585a64ca68d89750e9da", - "715687651f6925a41a3bf1", - "47be6483decbcd32c50b44", - "3fdb397b831af56c0902f1", - "60ea199093a4e9f80613b6", - "59048c7bc400c1b2f055f1", - "5ed2c798bc4d3df9693b4a", - "26c8838f41263334d39302", - "257f0dc17de9e402db5577", - "5eacde9e13242553f24977", - "232706fb395f1e37b2683d", - "5527388c03206dff6a464b", - "6207f87b59fc321d1fa8c5", - "3eed8387e5a22f84995caa", - "1ead4bf29c5aa1e11118b1", - "4e9e415c8033fbf3989b6d", - "6ed402123cbfe00df8030b", - "15c5021e3387b5104eda39", - "385c720d2080ae9544a074", - "12502410f917e813c566e4", - "dfa61531c98e389318ffc", - "75df623177a9cc914a680f", - "16a2f9f4e53133020d693f", - "68bba5659f4f20356a0cad", - "5b60aca7fe85259aa048ba", - "748cb85b7df9ca5a82d4a0", - "5448bba652328fd63e3ca2", - "497b40c11c5d479cab5f20", - "1ff2197a0e5b3d0b65c928", - "175182c7cd2ce431b0150e", - "58a47971604afebfc2dfe", - "7feefa2c38e3a6212b4cc2", - "1dcb001f06c75da3270a59", - "3e7a71b985de5c6c7a9f57", - "ccd4be560162041ae08e2", - "4ec109ed0d029a0c6bd1c3", - "363177aa4ad204478f4d2e", - "7b94e69ecfb1ba4bdf42b9", - "68bf1a165a85b17f192a39", - "fca586b3bb595a8d4101", - "7914f6f164e20860badddb", - "d959366c9d2eed9c988e", - "6b1b87bf69d8ba16154459", - "5798f45a6d32a5d9e220c4", - "23ff36317f41cdc69b5f8c", - "3337445fe49877ddd94c8c", - "27e0d5b6d5b01b974468e6", - "155305c9e80b8231f3fea7", - "46777bd089a8dc8c44ba66", - "4eb92d6051c08bfec28d32", - "58de9434dcaeb21007cf50", - "4945531dd0d285dff322e3", - "5f4ee2c7a7d447e781b997", - "255da48e767df6db73178f", - "40f14f4642441c80c723a2", - "23b23c226ec7148e9ecfd4", - "2fc4119b8d9484cd86a0bd", - "e8a31983f38b3bc04d83f", - "403c97fd7a8e612b101803", - "360136af955e5fa1edc1", - "6dd1e30b456df046e42f20", - "2a8fc7a338bd0e95e61238", - "5574ce6446f5f9b2cb3ade", - "68437c168764f9b52e36f", - "6db55a7581d577d97e45ef", - "2117da386a0ba848e04619", - "38a3fd25a6d9f4f7c85efc", - "20bd84ec27cae248ea38a3", - "2359b0102f9a1f774278d", - "7f779a7314dbb8bea5c652", - "a15cce75efaba6c1b571b", - "5e4eaaa44cce4760757194", - "1aa73126a375b6cf5e8b5", - "e0fd267f226bcb77b4105", - "5c1c9591ed7cecac5be504", - "6f8c0ef46d2275dfe7e84f", - "75f53c77a2d34dd51c6882", - "553e86c66c2fba13b95f56", - "31cc33f2d92bb3dc73372f", - "2bcf3f6e0be988750bc0c3", - "2a0c42a5cba7fe55a006e5", - "67427f6921fbdb98c3e375", - "62019722b2962f2ad1787f", - "75964f1abb3f7cc93e9f96", - "3faddb5ddd2bdc683de72f", - "235bf7672a2cda1ab01fb3", - "c16242d78c3d8fbfddea4", - "29105da153f2a098ad094b", - "39f0a0674e65b2cad4a706", - "57a6c26c5e5dea61f133ee", - "6151a60a864edd0e7c7b30", - "d65fa4e9fad0f9180af7", - "553adfba4c4a6d20491557", - "1ffc37c5751a51bd676a97", - "450dcdc45566039112cb21", - "74c5b771dcd8c4719355d3", - "72216a00ebfc9de1e963c8", - "7746c161815ab2091d9e21", - "47ddc74fced651c57b4d1f", - "417a5a771b0fe4694065d", - "4bd73bb75df0b9c8f31e93", - "3937d6181e67f43d9bec08", - "5fa8c4e879ae9ef5c6f178", - "693e564c43456862d84db1", - "394398fcb25e82a48b8d32", - "754181ae9689816d4fae85", - "6f5834f39b940405114e26", - "41d82e9988854950bdb48c", - "29f43cc681e11325bf172b", - "6ac2b95852f2b3848657c4", - "49da4e6814895f7566132", - "7a75465db2452d11dbf6bf", - "14b9cf8ea7c2a2aef663e9", - "7a7267a5eeee00421b1bd7", - "8d7ac16a6c7fb5dcaf362", - "4a9951c3005ac4b7d775a5", - "4dac5ec68e30db33d790b3", - "7e9e8be590540d41cb48b7", - "db6d45038525122246c3a", - "32e84128c0dfcdebdcfc5e", - "3c52f4c6c583d5b2a18105", - "7a42533b0f16560c421482", - "403ccf27d3ff3c3686d654", - "5d780dd5bc1f62ed520130", - "6ecdfc4db1fa1b0104403a", - "4796fc52e00fbc5d65fc02", - "1103bc87eb4e4e572c882c", - "1f2e34fd7020d08b01b7f2", - "23f737b6f1527cfce0303e", - "292e4d75da1a76fa4eb730", - "1b8c58018b9ec962054ab0", - "3cdbf096f176a11d399e68", - "5e81e2ee54fa1c8e9216bf", - "6ea50d7820cf1c46cfdea8", - "42fe3f1413aec51428fb64", - "449f89bc8e75ebc93c06c2", - "46dbb8e8c99f2d8cf603ab", - "3542a00727cde7902f64", - "8c1b60a22d754654b3b0e", - "4cc1b8f60c7b3b604dd7f3", - "65a59676f2a0f7f5358513", - "7ebd8ffb86035ffa249a5c", - "6937a623eafb54374944c3", - "771e23d6155cbd6574be92", - "42d3b2e606813eb48865e1", - "747f5812283a8ba1a43af4", - "1533a8f5ee81c2d4352c6", - "25b4f424465c145a893505", - "54449f7dccf77fd8f14fff", - "1f216750a4d1686b3b2227", - "3c0ef922648f93834d2bac", - "5b8558cbc60eeb5d4d1e0c", - "3fbae766d352bf62d71ec9", - "37ca6d3b30cb2687e44f7a", - "4fc1aa30a26bf05e1cf79e", - "5830e5e1c9294904118c10", - "ac1c0028dc3aa005da816", - "2d8207ca3331c2f27a3943", - "2fe38c447768175651bb27", - "538b76dc0991647c99d6ab", - "5ad56a9a03d1277384501c", - "2c11fd859f539479044b3d", - "6e1c49a1adf3346b270d76", - "627d01094a2553e7bdde46", - "4b0e392a6b94b0716bcb0f", - "73c9485e5e5379f878695", - "43da9e4b9fc98c3225df02", - "4b81add44caab6287f5254", - "73a1489a18b0815a03faf8", - "146e2b3f7404eaa2825f64", - "62cba5cd6ece1fcc005653", - "9a91d432ec896438ac971", - "6750d083991451ddf24ddc", - "23f47a79fc10179e2f1aad", - "456b75b7118ddbd9c05113", - "214ab6242649bf5f0673b5", - "46c6a4606b83331dd733e4", - "567c07ffdf5609acdc57cd", - "26639427b4cd468207f354", - "36b57535eb2f884ec435f1", - "2aeb5606838c910769daa9", - "5d5d0b6bedf48b96c5eb79", - "144036e909f39a00a79653", - "7677202d8f05f9287a6047", - "1a1cfff05adf1a427c023e", - "7286bedeaa0c2687819d8a", - "2bf095a2fbcdb3391aec69", - "2e6c1f41a9866f4d867e01", - "2ad8da8cd83b1521d7659a", - "159314ac561f7431a71dd2", - "443f4b4ed3b1f2c8fe8ce8", - "1bb928a5ce5b6a93e4a6be", - "ff765fa35889a47189d5c", - "7faf5fb28aa48ff83cc07", - "330bf157841f4554c8f5de", - "3de0a5abf20a4845d76439", - "5d53571a7cc3688e6944b0", - "7a6a150f8921047e15edcb", - "4dbcbf0e0833361017aadd", - "36f20d7e24da8778ce35f5", - "3248d851d401112b750bc", - "77024358b3e776b2c5e1af", - "599102d1f2500d61d762c9", - "52c455dad0b267d43552f0", - "59db917020bf7253782d5c", - "3251a62ebf3abdb7c9ed58", - "1c89d8520ef104ebd20ee", - "fa65751eb4d84785986bf", - "22f4901fc0a8b24cf62fe4", - "3baf4fa4e9f273acdf732c", - "29d711357943b0afaa5b59", - "26293d249066a3014c3338", - "4d3db82b9d6efaedc42576", - "561331256e1d21664a1287", - "796842dd6bfad2f98912a6", - "4a27b941aa4c6ad1e07548", - "47b94fbc156b869e9d16b9", - "39f2517276288f74c45e3a", - "11326e189db8b15b0744ff", - "7c793c0d415e26d57ec92", - "22c922d5b0fc736e5f1adc", - "5a9897a2da0299756dfdb3", - "37b012fbed4994b5319766", - "7ee167869f16d0f3096184", - "7b7ba8150a404335a3e978", - "2176005ea62a7fae1a0ec5", - "7f5271355a686a4df7e516", - "33294a38a5c8a431b3624c", - "68570d0c5fc94ab3c18486", - "3a928b86dc180342e1f053", - "474d5e705efa51e5e97d39", - "4948e72d6c06974bcf7212", - "12ea1cc2026e4f5211a159", - "15b86ea9fb5f9d46bb9d95", - "1c0d48f6283945e321fdac", - "c25f982adccb58e81ce02", - "173ee21e60a88ae566e166", - "64af53c3c0ad963e3055c1", - "2e0a934adfe422dd136191", - "5ba00e958e1473bae28031", - "230119c3b2a6b1bafca00", - "1fb4d17ac6ee317ce5a547", - "2449f6a2ba5fdac5a9c1d4", - "6b488f646fce9835d43f44", - "11978ed9a01677cec42ee0", - "3ac9b63dfc3067c1c4627d", - "7fa7e63240bd502dd4b06b", - "4bafb874450e24655961f3", - "4a5a912df871eba16ca2bf", - "6a1b97013fc782623a1d18", - "60f671cf9f662680d04313", - "6f7417b6bfc27461fd2524", - "3cd40ccabd157073f9e356", - "60188d16e528a5d2e06d3d", - "55509fd3a52bd88fe29e11", - "193c88995f60dbabf1ee79", - "36e5208ae458480078d5d", - "27869ae6bfa80052e928d4", - "14e76412c1e117fa60f762", - "1a91f5500bd170effa0820", - "2f27f9f5b37e53f26a3367", - "7c4ebd51c09994a5c2702b", - "7eede9c7d2fd05759ff0d5", - "1bf7de225f0abb4eae1da2", - "1f527bd93add787e619f2f", - "2f4da63191088795366c81", - "1e86f8d9f30e1c9ee2f741", - "5fdf7c6cf80f5f4d619b9c", - "1365575dcf06e2b1987b3f", - "3860f5646a470f19d720f1", - "b17adb15bd895ea825438", - "67cd089f73cfc8807dd840", - "7b97dd845f9509d060f296", - "3951fc47c9cf417968c09a", - "63bd657552fcd47a1fea3b", - "7b59158d38abcc0653e41", - "7adedaa3d8ff64ef5910ed", - "121daf29269045f5bdd20b", - "65c75439faa2303912b32e", - "3a603b28f5e57fbfd764b9", - "2df92a33b308b4efdcaee3", - "69defadcac1e44c7a1c0bd", - "17961b8be9d0332a213177", - "59a5901c521b74864c8fb2", - "697c3f9accda8d3543f182", - "3f0177714af6ab07d870c0", - "2334ccde40867fa1d0bc15", - "16fb077509115b4c0ee442", - "758f193f192584a42ebc31", - "483ca240f22946b37af3c", - "311601fec45703953f2b91", - "67da5d093fc207176dbdb2", - "1b6a00fcabec41d4b43ba2", - "ba07dcfdd701f16f45aca", - "2835e7f4b39073c5a451bb", - "269c017af27ad44e6b201e", - "3cf5810d8c38a097a7561f", - "573747456cbe53c844796c", - "7772e0b990ccdc614c11c3", - "404ae85658f9b08174632", - "5dd52a5a11350a9b7572fc", - "7ce0b194ba3e31249ab36d", - "762f2aec62b91b262cc99f", - "3915c8d33da94da27c1249", - "6e885e79f7b5fe77214da5", - "668c0767178119bd41ac3", - "6806f2889f5316f4c57e07", - "32f953543bd07093a29e5f", - "5685392e26e4e637394c54", - "96cf28ae783cd1e477aa5", - "710608c33a517ea5d5359e", - "435abcd28c0cfc9f321db0", - "514d622fcdfc26212b5d14", - "408e6268fcd75479c3bece", - "18e5cae7f3bd61293a8c2b", - "65a5c9fe061a38a8c6c2e0", - "6df80f50564e811e245eb5", - "1b388caec4f8538425d93c", - "1bab6e088abbb7a786ff3d", - "17fc45b2690c315a5249e8", - "4170c011864f5582d6a738", - "3b3a5f854ba249c04d075", - "38e1e6200860f4072a8a1d", - "c91beeecaf54c95dc1b37", - "f125d56d3c0c2aaf7ad05", - "341851bd5e48e20f0a412f", - "471eec9edf3f5af18be6bf", - "4b21ef5da2b744139c3cf1", - "3a051daeeae9770973713e", - "75a7fc26a6faacf109b345", - "5637e5d4438a119a23f043", - "22f18c95264f1fb742c348", - "1d595362f3a1b4c77729e7", - "69a784edece7c38bcf7297", - "4fbaae68fdb253d715d528", - "23693b4063cf0fa20dad42", - "51eb043d3564fa91215f1b", - "2bb1db818cfd733dcce0b0", - "a961f7b95836d3a578170", - "51c819b9ec191b60920096", - "ac6c9987de6c73f2259d9", - "524b77666e02692a642407", - "149d706db4fce00c71da76", - "238de3e1606bc0e1c33adb", - "37ba1e609c7b12a8e32733", - "3ae30b1b5931eb630bbf6c", - "1630a212afc84f038374d9", - "5ebb44d93cb77417b61c4f", - "5a7d2dd2aa2028d4da8f42", - "798019b397419c8d54fda1", - "74a156e77589342bbef3d5", - "506e6a05e8de5c9198ae69", - "48e4926c40cd6ab5e92ffc", - "7d2db742721c9ba686ff30", - "4b8968b5c5a93dbb4b2b55", - "2ef2be0f7e33ace73bab4", - "7651ee2e0f4d348cbe95bd", - "43ee4b35cb3cdc84d1d5db", - "449d4feccb40da2e122aa1", - "356211f56936e183312837", - "527456447c2748239033cf", - "46bdbd32d31b2a36e04e0a", - "6c1076c01e9e44fb047889", - "5ef5512b3384aa1243daa6", - "d452f805a2c35e686e107", - "67a9131aabd5255bdce732", - "5088a2317aa34dd5bb1b4d", - "64c275af1abda385c2af0b", - "402c7149b20bce787c7e83", - "60c8d2e958387c0d0627a8", - "516640d56302eb15061b25", - "c62790b24bc842a717e31", - "76e87d4d2740e137511b26", - "6cf76079225189eb2608ce", - "3c8b04f81e14e10396b582", - "4bfd93fb985a44ed0569f4", - "6ce98c831091728c0e73bb", - "4f74e7ee01738298062093", - "449ccc3923e92a0bd2e3ba", - "4feae15528510f186aa1fa", - "12a3196afc09a79694eb31", - "6cfdd09fe2bd66b85c2e00", - "587cce1cbd0dee8b98f262", - "3b0283be973d59ebf4242f", - "88b8371baafc87a9713f4", - "4e6cb8ec1b00e2f28b3a7e", - "235baa54adcc67af92d06d", - "733b81816da25936e81af1", - "7fe76cd2c5affa913c2b41", - "26b7df388a02a8279b0652", - "7b5272bdeb1b01fe56bc29", - "6863984d7793407587e8e2", - "1f1eea8231315133cde938", - "2f85e68dfb9aea66d7f07c", - "6259df76b87ab2eff6659f", - "502c6a2df8916b18106088", - "4cd904fd9401eac5ad7f1c", - "5eb4d93a33b2d2e2c2adad", - "55a41153a33cb4649703a5", - "cfc86f804a481df48868e", - "1ddeaa1e583e9146210f69", - "38110b962a169200cc9f0a", - "7ce4bd3337a7333159cb2c", - "1738ee1c8e104064e07249", - "e1ef803b3674bf39884ae", - "55d7bf2f5724b5dd0a04ae", - "7aa81a94a5a230cf59a0b9", - "2baeaedf76503008b9e428", - "15bb5d9b44eebb27a1e60e", - "dce90e419e8d3f96eb5b4", - "72a7ca4a8dc56f9c652281", - "5cd319aa7906a96d2f6c7e", - "557361125249092a7bf932", - "70a1107bc42bfb598164ea", - "df7ae04689867c9ad97d8", - "117480f169f81bb3e8609c", - "479fc9912c9c81152eb474", - "4f2cc1f6f7aba8c20a670c", - "17dd6e40297f1d32786291", - "783e0229f219bc18b705e4", - "8b462e0f7448b549fd688", - "4a0fb16cc4d1bdfbb239c", - "53c95b2787b88db0682132", - "536be2b3e3829710aec51b", - "3a89578d6ca992f91249be", - "779eb73caa637aa28db87c", - "52f5adde99e4501e4d1c61", - "31541f24753a28cc5b51d8", - "620084c5da2910137e2b10", - "76c132264ad2a774a55164", - "35a3ab4773c5054a30c44d", - "2f78c0f7e7a90558573941", - "5b39ddb704fa58142076d", - "1d6812727d8421d0e03a6f", - "307727bd97c5db086074b3", - "1abc0d15793c655cee4a9c", - "68ee183b2208228da8bab7", - "116da33e19c8b80384fe28", - "3d73fd3c3744e9ec5d2d04", - "64ed03e382c11a32e34cf4", - "479e7025ae3fdc2bbcbe22", - "a134915353ce113eb72dd", - "49cb6ac7a2bfdc54300006", - "2d5e8f78718c2d4660cc69", - "3f5027ce278d444a4dd243", - "15d4218f4bbf0c95cd9649", - "13221a23af3045ec5cea35", - "1efd2b46d4a8724e929fd9", - "628d18e095a8dbcb9f43bf", - "30eff32d49c10f325b8e9c", - "29bbe5fdf14e69065cb80c", - "2df28a1b78b46f16aaf53b", - "352a4a136ebd7ef294f370", - "1c960c994194a1366a2222", - "351c5a0b997e45ec21b614", - "4c1f6b587fd26654ea69e1", - "2735b2e6f5f08a9e9418bb", - "3505fcb3eb2690f88b3be3", - "4d8859f357a36792b7211f", - "1e2093f76475f58a2dfd79", - "456138a50c3717947be48e", - "35714b90920ce6fe1f850", - "5d7c2a1d1267b7a252da1", - "754ffe6bc2e7525e892fe", - "290ac68bec8aa8955b7e97", - "a058b3353ac6290d9f864", - "ef75fc5d77fc146e975f7", - "48a999a2dc1a23a934a6fc", - "7256923d608836710a659c", - "2b13e041339df4d5a521ce", - "51a9b0945a0908b1d40d24", - "779559a53e6b62275896e9", - "1fa330f6dd5f3ca09176ce", - "3cb748f77d638122329dca", - "7e62c15038abb8244531b4", - "9bea90a26f9e93743a998", - "7ae1d007cf030664c6b815", - "52cfcbd15dfc6c476cfc76", - "18ba9d869c489f11ce52e7", - "93cbb2483673e4e0dda30", - "2478db790ed59756cef964", - "7d8b341c82b019a8d56c92", - "584b7d6f0b43ddd0b397e4", - "6081e77fedf3898fd66607", - "540f5a33d5aeafadcad19d", - "52c4d1c2ad153a3f70bc0a", - "39489c7fdb445490d498cd", - "e0800809dbab6d41345b4", - "1536906705870049755028", - "639c2fcec8b9dfcc987387", - "214f18ae0c9aa7a1b8c02e", - "5b8e9d8b290e89e5d9afc3", - "4499c1c16fec3546d5903c", - "5ce5e0595ad07c8855357b", - "39bf9c3f1f0a1a15264530", - "30a77107da1d91a699e9f5", - "352389083277fbbbe66ac3", - "5d711409f3faa9ea87abfc", - "42cd59499a0ef57d6b0009", - "731a7b89f357bfb855a5b2", - "767dc9d34c09b03db4a0e9", - "5344962f90f45cfaeb1bce", - "504d29ae2e5a021d2bb278", - "6e97dd298eaee757a3cec1", - "2d1b2f087facf1fbfc7e69", - "327b2b8d0b75e0d83a5b04", - "7dc98aa964908b313939a9", - "d8c34dffd92c1a20d6a9a", - "21a363ab0e08a4336f2e44", - "48eaf0293f956717b8f048", - "6351b2a5f477112f552683", - "2193bc73ac4b40415c95b5", - "13f13f9f2c877cb73ba5c", - "7c6b359299af5c59043711", - "7895b432001edf846b7b3e", - "3ecf9d05cd62341c4f7784", - "6c8879d694e1a0b99f8e42", - "6400e87749e3bcbd750d89", - "1851e925707895d37a37f2", - "30f4f5617cc73435ce74c2", - "18ec20d19a478746123b", - "39242760b51f2f93fd4721", - "452d3dfff11e24bf680356", - "5cafa83a10f929b5076c60", - "7fd4ee663460087b793a80", - "7e958697030784ae5ddf86", - "a6c54d0ec55adb4911efd", - "2964973c288dced7dae8fc", - "2b0fed7a534d25697e5c7b", - "3afeb7cc8f8e5bb8770da", - "6a81a8d913b71671629ad5", - "75f4eb6de0d35eeaa16cf8", - "7abf68b2e4cc9e3a3b2c5f", - "4f6d8c8b0b9b376d42c4b1", - "23f219093e9b0bb3b5217d", - "5a0c2602dcbbbf468b67e0", - "1a63315aa52cb254b65ce0", - "4f72850630f6f8c1a68862", - "3722a55f27f2c02b34eddc", - "672d7083ec424e5d883cec", - "4839c6454f97ececa9969f", - "e941ecc714605cea72177", - "7cf9338ca9bcab73862b81", - "6a23876a8c802d81d83d29", - "7006ef130d31e12bc44c5a", - "591bac661062f64b8e3f2c", - "25cab751e23d8e69bb5048", - "61f4a55b140e767495cd59", - "1a4e5bc143bf00e8928403", - "4a54d9b3589d5340a01e23", - "18019c176b4c9453028db8", - "76fed7d89907843db9af52", - "407333b3b6a3bed3ef8920", - "536a736ad3a37793dd9f54", - "5e56a7d976f1a3334f57c3", - "66ffe80af410522139e92f", - "1b0c27c7452322264822f3", - "58320debe89492ceee77e", - "4fbc987e428ed0ce9cb76c", - "70a2d453b688803716fdbf", - "1921f3262afb2f3766f357", - "6e007172a16a9c673e635d", - "527c4b155e3708972293d1", - "2797689917c95a9d4073ae", - "69bb33c18017fddf18d091", - "165ff53589519199fc1846", - "171e59c89024b148534f1b", - "23c82ae839bf5380a55acf", - "455c9131bfa1c33274be37", - "4bacbc68650c41520d312c", - "1c35e13f8ffb7c470fa61c", - "6b4728ee168cd23e2fe47c", - "22e321253c3e0fb875c4df", - "6077a88144957827c07205", - "4309c1c59a581af63d922d", - "1b1ca5d6c688c4cf99448d", - "31a504d1dcc251075e4436", - "223160cdd1bfa322ca3e6c", - "3601174a7dc823bf4dc3a6", - "6da3828f2d4926651f7a27", - "7de4927696bdd6d3b718", - "7bb4f9d707b4ee3a20e779", - "343dad4f059acb87d3b0e2", - "4e501beb4617be0f02deb4", - "3943e926fbe3d426004ea9", - "4b35e35e82bffb49d0d830", - "6520599b30ba3568ad0f09", - "2a48d89ce122dfa7deba2f", - "19b666810d736e639b51f2", - "1ccd174e9aa4e58e7414bc", - "475e84f70334cc0bc8292", - "393fe0be8f011593a7e1ef", - "17276a59aa9630c1141c17", - "7d0578a8908ba294259bd", - "4a9e2e5d8ad0e2e82aa7de", - "63e0dbdfb13b4fbb46f00c", - "310e395e429c4494a5f850", - "7cc0116bd0bc164835ee72", - "634478b621f7f0a455c48c", - "397f144a181805e1a097c9", - "53016aa1427381b9f28ea5", - "76c2f0ba37187112ee4d4d", - "2bee268df09cc40864a917", - "7851b3168b92e5daed021f", - "149e6a0b6c6543ae895e07", - "1dd1b432dc809fe4c879b3", - "2ad2546b270547fc24541b", - "2015aa6fc7e48fa3bc5ab5", - "38596ed050f14596adc07f", - "1d2b9ca2f44294070d4e86", - "3778fd3a46ffde4755b6ce", - "74bb588b5553c2b2d4ac78", - "3d1155c4a53835d991a0f", - "35865b2ca16d3453781f41", - "6ba1300374acd487b23577", - "3f68fa1a9ab7772758d0ba", - "30a3461d63ca9807464dd6", - "552aca5af025ea1e84aadb", - "32aafc640e8c99bda8faa7", - "2fb170a11f1aecdf586d25", - "751e9eb348bc8239d6e118", - "7fc2bcc524b4326eb8303d", - "1cc2526113f2bae9b540c1", - "6a437e22c95fc6c6a4449d", - "df261ad3b5157a525bb81", - "690aa96130f8c533d77ce4", - "2f58f2df794a35875efc99", - "19772e34181f57b670bf9", - "60617400353c1eb8e8832b", - "7136b3dd116ed121aab68", - "4c95bed884bd87ec1d5e70", - "68fa3ecc3845db5d523ad9", - "4818e9ef0ea7625cfc3d0", - "27ec8c6636679988dd1267", - "57d88b5e0b434eb1a0dc08", - "47a1f466100bf70dd5689", - "55afbc51e7c2cc748942ac", - "75066462fdbbc7301e209b", - "72b5d8f8e65cb7509a93d8", - "38d9d05f9463a537f470b2", - "2f39a2788d5c2a24e16acc", - "5f4e7c70ff55ff2f888f05", - "735cfad9acf49090fb7037", - "6a716dae106b9aeff2133e", - "1c90fea5f39d8ac4dfc2a3", - "3a8c5a9525f5d62cea294d", - "498104aa12355244a9b0d6", - "414e761d40341e7f97c304", - "16d5205447831696c5d6a0", - "3cb5a124ce563c3967dbc3", - "899b1ac6f72ffff8aedfc", - "34eea7a66e8ff3dcc8988e", - "5f80095f2580ec4cf13b51", - "4d7566cd294f75be6620f3", - "506d84c9f4d4bc400fdd25", - "5a8a9b5c659b71e837ea18", - "c16d15fea9d61c8df5121", - "3a7a488015e75feec809f8", - "6fe27c77d57e2feb8cbcbf", - "452231c3bcde7b7b5b0af8", - "760f3656c1130b21d369d9", - "39a0c4e1da321f1bc126f4", - "3315173915ca23d8c1b814", - "1cec8c96472b84936bbc22", - "3c70a3f0e9c5b206031a33", - "7cec29d14a0eefb222bde7", - "760df490123f6613b0a970", - "5bf795c6d548a19b6ac340", - "5569560418e73ff9db709" -}; +static const char* RootsInv[] = { "1", + "280f08134d28252bd0b713", + "559bf101b9cff724b929cd", + "3a8965cf80aa6c4410dfab", + "45440750f90776251263b4", + "12e92ef014e8d7fbb8d23e", + "240e2e38e41f3b6530a267", + "69412d8563ffa7e83b0ef0", + "3288681f4d08858009187c", + "47ba42dd06a62256ee8c8b", + "67a8cdbece1aca4e55ba72", + "1cca04897dbffe7f26f2ec", + "2fdd94b55dd5fb9a3915f5", + "3b228f46cdc0e8a979b45e", + "5e842bbb537167f75451a7", + "13637e15b786797995ba49", + "47d847bd96fbfc9c221fd4", + "1badf1b7dc0b73e0bf8b67", + "2703e4a7969073dd381cbd", + "3eaa7351a72b065707e47a", + "476ef278c257202dd01711", + "2148939cfe2757b6666fc2", + "4494bc9e65c8cf2a6ea51d", + "20d4366552d0d83219fa0d", + "47a080b7584194b936f712", + "482af287c71050fd03632a", + "19a439abdf3f4f5eb63683", + "426541c137d269fd2e2296", + "1cb2dabf0298f57d15e65c", + "1e92415029559dc3ed8283", + "568fd03e0a80223cd1669a", + "5a6df4a369ed81627d4fa3", + "457dc9644e5b25ae6c4291", + "de9896eb70f1668b87fc", + "4e27f64f8732105513ad9b", + "590056c647987959065bd", + "171757e72adb6abd8f440b", + "67e11e83cb547515b53701", + "bd499ce82d93c07477fc", + "10c81c57aed768b3285598", + "3a7ecceb35e2e9a438dbd5", + "1b5226354071022a104a86", + "3956e2767e97b7703253b0", + "1960b3a13c6cb6acb7f489", + "61c87048ea8325590bc5b1", + "46323a1998a54f7e0819f6", + "630270f2ed4331deaf63f0", + "153884834dca9aae7d5d2d", + "39d71478d3005e797c6913", + "5c1544633a0bf7939343d0", + "3bac7e0675e0a9967ff7da", + "409fc384bef4b3d255371f", + "39baaf1f520d96bfc8c1df", + "4d7940ea6bfaa7b282a985", + "4a9b685698a7674338b188", + "70d95d23dca53184d30b4b", + "51fc2c3f86b8fc46a7a221", + "4f5e7f770a4d50c69c4028", + "17e8af02e79e7f8d2cdf99", + "160134aa459258ff8f6285", + "5d6bf6a59488555bf1342a", + "75471e22b2d84fd2fe01b9", + "1778273a04ac508e342b", + "6152765b747658a14d5829", + "6f2f55effdb76df46b548a", + "3552a76787de4570d42693", + "239e94f2e5843a6e20f1bb", + "5b4dd88e0cfc108bdc7320", + "7c1256dceb40e2f63ca4f9", + "16d114b00964bdc8e2e82a", + "36b7f85db80800549459bd", + "5ca9b2680bb84ff6e98b33", + "7fd47e391981aa515116c7", + "39965be2b1bbb3ed832fdd", + "1efc90353d647b1a3dfd54", + "59daf69acb0d30ef2fc5db", + "4f34769ad379d64a27233e", + "1f91eb155829f1481d6da7", + "688ea19369341f6943063f", + "3d57e0a1ef4abcae8719be", + "127b65c61b8c8f1b9456ee", + "1ee9410958604d03f20f1f", + "4e175c68ed04c585f606f8", + "aeeaf98aedc83e6ae6cc5", + "61b85bccf0f4316c2cec04", + "768cbd11024387469f6ee1", + "74e01ea265377cb713e57a", + "5695db84b4c92a3d6677b2", + "7510db776aba775075e549", + "4ae24f235a28b7f71492ce", + "5a20607ce9679fb1f266e5", + "9e1bd1e36f73d0f69f697", + "218c9ea39a51618b1ce10e", + "3cab0ae1036c6d43311ae4", + "4082d11934cd3944191e6d", + "46b0509f9638e9030f5895", + "2e274c1905f505ef9d43c1", + "2555442bf058722bf0120c", + "4d29703647563e84d6ac7f", + "10db0037fd5f7d8c49aee6", + "3ad7e93e4ab55d402a33ea", + "6bd3a60ce037d04a7d822c", + "dcc0bec90c531be4924ef", + "53e73a626a5de69e43d0e0", + "1472017c713a1063411e0", + "666ea50157a2d8307a0ef8", + "31ee9d29cb2f2a7eeddbc0", + "3c1c9492a56c8c78536095", + "56a6cdbd81ef505320e706", + "25d3735a734b777dd960b8", + "1dd4abfd6c4ed8a3ad6bbb", + "ac0f86afb7bbca8d57c4f", + "43d235cd54423fd6135def", + "4053f687fd270a04d092a9", + "197461e90c6b70a7dda46d", + "65f71d8c8e62cbeef07daf", + "70b50a59ebc270bb237505", + "2b5280596202f4b3ee0814", + "1a30afeb54dea502f0310a", + "33c3a8fe7d6e90cd610695", + "517123f4920304dc75317a", + "46afa6e418c9bd4065cd9d", + "2a68ad26b94fd25b4509aa", + "2ab0a302ecc453de7fdbe4", + "43e02a2659ddc4d3204fd7", + "7fcb3af03a778d48d5ac9b", + "40734a14dd653457e54b74", + "55152f253ffb05575c981d", + "6bb593df2f572a23254ed6", + "210441f8cc9b531f88fd3a", + "c79d219ef793e02a9f989", + "752129c2d07a536bf3bb8", + "2e9fc43379988881a1b064", + "db07432bf40360e3df399", + "2e9650e328b679ea03af31", + "249469414e604f245a56ca", + "34c572dd024d37c54c5648", + "411a5d336f1cca7988f319", + "4ca98168d36f8ab3815a02", + "63f8378a4c563212109ee4", + "7c4aa256f5265e9d49e8ab", + "4c622bd5bd26bcbd487c68", + "185c0df44a167fc9bfe948", + "7b4912ce2f8ea6ad90baf0", + "4b90d5d4f791e4cafea283", + "639eb30656278296f2b3e0", + "21d9c50ac15f9a1fc38df4", + "797e5770501b190fa5f6f1", + "6be705331dd40db5a995b0", + "79a8e47a4d897cf6b712f", + "32f17d420cb00b34cd9fc3", + "3d1dbd13d46aa7f5e4c42", + "2b036df33feda1ac5edb68", + "2969569df7efe8c61bb461", + "1c94ea576c3cfe00e40a0c", + "36a98de095d312e040c903", + "2e78ee01fc4dbe304eaea1", + "51edf68dda1a87c4b3af7e", + "cbf28251298433a3abc70", + "73f8a019ddb59d3f06f049", + "341181b7d4d6f4e2cf9643", + "17040e8c8be515e4ea36e", + "25e016000255df0b5c8153", + "272821f07dab57e4aaf0a7", + "4786c255855f792a20f869", + "79ea859ae0d9bf58c8e071", + "592a4efec7cf89e527fdb", + "398cbdee468f0759c375a1", + "4e4622894612a0772ab9f8", + "3939cec4c6eb132c9146a8", + "41b1881d9704918a051695", + "b2c65762784255bbebc75", + "97bac956d2b65a51260e7", + "edea2902a199d26d75bdd", + "5b6485b2f7f41f0abf3544", + "6415a8a79aa0ebffb6a24d", + "ba3b72d702ce311cc02a", + "67ed429f48df076df817f4", + "58dbbd6f088b5ff881356c", + "2a9957bb174e3a8d1169ef", + "5298718820a8e285437a64", + "71dbc0d71fbcfcf1245bc2", + "495ccc90a936edcdb3b175", + "6862becb8f668738ac092f", + "5f1584cca489de9bdcd65b", + "7f873bc8523c4931739324", + "282425a374dcf57904fcaa", + "7b233911df67c0ffe75298", + "28da7bd48db9e867715c64", + "14e34536d861554652fc3d", + "643b1783eeff5d2d9d100e", + "528f06b90d6ea98654eb1b", + "6c02da94ff6269ebf8b68", + "7116294960ec1370cfa192", + "34b380f57ddac800a53234", + "3746df2dcaeb2f941850af", + "520cfdeb5b65ce3df47f12", + "33bbdb9fd9d9e6cda126be", + "52a44d4aac2b12a44786a4", + "17e032019f0dc1c4277c0b", + "3069cb41e51edac9ec2b3f", + "653694fe66c257988cd02a", + "332ea59945a5d0e73f7dc5", + "47d7208165498ac04fc240", + "5f8e36ec1202b0292d5945", + "196185d708583cfba757f7", + "44dd12bd0d7f960d6bd7f6", + "235ae37d20b21074f27732", + "4d10e4408b3b6761aa225", + "3f14484539a427ea73a1b8", + "35b964532350abcbf76d9f", + "7e5eb2a4ef3434465acdeb", + "1a04ba76b7855a5e9c289a", + "57caf75d12ec817c6cddfa", + "fb87766da12e75782ca77", + "76272e758d9f83ceea908b", + "15e2aab3b7b69272b3c155", + "26b5c49d8c4e12d4b3d157", + "18347f5ec924cf4631f292", + "2ef94456619d9728490c1d", + "1000ca68b2a0f4790d5b97", + "208b7d3e85a97a99407a38", + "745cc1be634380e90bc82", + "60b46e71f1f2b8376d5d29", + "2f305b730466b54d50855e", + "61b023abdf63ddd6300036", + "3bcee7bc9a5ca7219edfaa", + "785211217f5fa1bf82b193", + "765c653014c5e4b3dc3865", + "52d5ea798306c9e21853b2", + "402466331777b126e4d8e2", + "7fd2ed81931942f0ef8d50", + "6edb305f1f8f30902439c9", + "1a484afbb93898190d8d03", + "40f2e74e1048db76b72516", + "b03e402e64c3436818402", + "4b0f09e29272f9d49c6266", + "59f29456bbb20b47aa046f", + "308a1daa2779a84d4db8ac", + "43c088f2eb74b96d25a4a8", + "614a9023303ed4dd2cdfb9", + "437e569a7451bd9bbbce87", + "7c38756fdad7c18ef7576", + "cdd3df5aba4c7ba52b4cd", + "2d2efb8be305a05b685aa3", + "1aba34eed15b418d4b7f0a", + "2432bbe72c83689ef74c85", + "4b2a621bcd3f244dbd1aa6", + "38a68ae5efe6ac22d3f278", + "3e1ecaa8d0631877bfedb9", + "67afcc19d0bb557a608666", + "fb85baef473def8948133", + "47efed21b3657d0618e28f", + "6e988e80d2c29dc7542de4", + "525362bcc006730db95180", + "30e3bf91dbc04d50a032bf", + "17a50483229662a578fdf3", + "3395f092181af53bb73f3e", + "260f0ab9a00e1e941e404f", + "26b516b52794658e68ab5a", + "76dda8edbfa5a4265a1a74", + "49af3dd263ef8ddc7b0303", + "4956d4cfa3dee8e23259eb", + "245cbb0117ba8963db7929", + "41327dfa41486f6b995572", + "207b51e97aba651825b40f", + "1d5fe04c71a377f6784338", + "43d0ab106641bd01d72cd4", + "7dea2305f898b6d88f6821", + "7c9cfb41c0f888d000fc52", + "6b849a1f17d635cf0a773f", + "3195d14bda042e7057d34f", + "52253824741dd177a674a9", + "6387ce1a213d98335598c0", + "50c4c9d0b48bd147d875cd", + "2afa4dd2f2245b7525fdf6", + "7add5048bc0984c36294e1", + "77e2377901111b6ba92316", + "83b4a6c139b7fda28fc0b", + "30f7be09c5f39b5532dcd3", + "132d2eb133a0383d464ad2", + "47d814d93ff8dca3c1398b", + "37bd7e26cf4711cd149911", + "5a081e53f2beac49d1a3e5", + "59ff3fb267f4dcf86fd4df", + "146dc1fd204e259d148dfd", + "578a6c67a3dea7609537e0", + "7376e75fa605889898fa7a", + "9dfe0a1feefabb0c62643", + "788f47c4aa1ecb9b01c1a7", + "3ed51ed7c85d68db84d78a", + "23270a061497f9098a49ee", + "3153805f294e973c493b1e", + "22d68d4ed1af18d8658de4", + "2ae83fe35c42b256590f54", + "6e1573decbd31bd14c0615", + "3ec0da959b014a91e3d171", + "7d60cbfdcc63ced7661d40", + "2e1479f3781e1a48fc49de", + "49639d01a55025d5b2f6ef", + "7d98b2bd2e9168b6d2e72f", + "14efaca65e59726b81dbf0", + "2d816960b0911019df6133", + "10b3ac9e35f753e3c9deb", + "40c514f5e20e67263ea899", + "6ad236039c2c3e149bcca2", + "8ab595a01941ab4070b39", + "5dd15f8501fbd308a231a2", + "6f79151ea6cbf1bbe85f5d", + "13fc0f6b201b7368c44178", + "601f96473a856041a89ff8", + "67adab05fa921650ed942f", + "4fe741cddc07d380fb6143", + "375ec3fc3fce6eb8e8ee9d", + "416b4cd1af257e44ad03fe", + "7b2f70ff56626a3003c33d", + "39c91d6ca89a6fa52b3be6", + "34363c8e2f82b5fdad8c66", + "77c405c1030a468f5abe34", + "67437e976a93329c5b9760", + "499ab94c7bb40ba492d85c", + "49c59a03a60b57e7bac289", + "210cf16be9c62f7408e63d", + "7a2990f262218cc62c32dd", + "4c2a57eb3ff167fa077ee2", + "23343ed75a8de5a22fac16", + "567dff5f6f64aa1697fa0f", + "fc59307a819ae8b7a3f67", + "2b8d9b2da99a690e7c44a7", + "9f4b0dce97935ef1d9158", + "365c9be3e9c7dcc814388a", + "4cada2a5056e025832015c", + "33fd72210da605d38ab799", + "28a2b96944f1b1210e6bbb", + "125d9103db1d2a83e13f71", + "3e1e43759c2fbd4596b36a", + "20db18e6c822f683f97989", + "f46157d09593fd6ceaef5", + "c75433d8b0423b552102a", + "5aaca79690a162240db985", + "1160b80ff627f607bda927", + "5839527a17db25de563064", + "7b9587337c3feffe6974d6", + "147d7e964c45ec443a24fc", + "40a3f5ad2d4a9b33e2f67f", + "1cf9608a937eea1a0bb3af", + "2a8bb0c8c3747adf31dc91", + "3c3d137503578a98196d6d", + "1cab579a1f775fb778d900", + "72e9a5baa06d4af7c9f9da", + "dad2db631732b0506f6b1", + "686f17e02f2d49c0e2e48", + "21eb89d73161656b740b6c", + "488aa158d747df0f5cd422", + "67b1ce8dfe00f53da9491b", + "687346ea28caf1c87376ab", + "254a37a2b407cabbf8069f", + "61d42c0be51a3d664c8df2", + "dd0623ecc7bb862ebbbac", + "54aeb8675aac1a423a7140", + "2e76f32ec68bf11c44acc8", + "a2c3a3cc1a5dfdc5a02b7", + "6a25d7d313e7a656aee548", + "78022742d8c1b58e95d935", + "46ea2e85d6ca1966d1ada4", + "7530bbdc505d301ed9040", + "30ebf17f92538a33a005c5", + "4839ff83b5f2ddc41b61ee", + "6517d2ae1b7ba4107ba2ed", + "1a5f34cedfae0cde5ea0a4", + "3d55ef23d8c9f8419ff28f", + "41d953d4dc4746ec83a1f0", + "4f4128c0856b216db55c75", + "af0b8a8f75ec961c833db", + "1e5217185f433bf1233d59", + "5846b0049ea6f32f4b2762", + "40e1957b3947c90dc23e89", + "5c6cf60aae0cfc30048ec1", + "5ee2324ad6594548cd275b", + "7969c90c819c5b0080834", + "6afc9a3033b5fed5a0c3ee", + "586e1bd3806f5472b98045", + "6afe8bc3bb8509aff3c666", + "5dbb4f6414155050573b80", + "493f40656c80193590d2f4", + "3e61864fd19f85bd211f70", + "3ff0891da2c6d0cb8ab6f0", + "245f14c58fc2f1bd38bf6d", + "5334ba131913654474693a", + "3b8be315926a14f8200fe4", + "54c37f5e810a7c49e7a02d", + "3c015f30d95c1da9c47adc", + "26580ddf1efe9fe3eae4e0", + "5b68ba6c572a6576af79a8", + "6b11c6506832a5a8571e85", + "37f81f265c72ca7279eb3c", + "79b27c762372e476f703f7", + "102e8f3d54ced5e10227ed", + "173b57e939be4a4efef880", + "5b18e3d2fe16a9d973b934", + "4413cfa8b5666fc0af877a", + "54b4dc744541c38f937102", + "30ffdb4a4aa7f26e29fcc9", + "1b931cd6241fc4f484ed23", + "7a45d57fdc1a44af5791fe", + "66ac85711d7e32d731c773", + "6f55491282e49ce5634ba6", + "17ef22a6ba1fe32d3ef7c0", + "153d48f10507702bdbbfbd", + "755b7f3a3389c861fb2d23", + "1bacdadb366134c3d1a5c0", + "4de1c0244f476f355a3a91", + "2b04a0e7492ffe108c1c00", + "49b08f20244bc64879adcb", + "76201a82e565cd9ac092ed", + "69699a76b55d4ca99064a0", + "6d83e6632fcdd8cf940ffe", + "705cc0331aa0195cd9f6ec", + "59b1b4d92c6ee6432bf67c", + "26c3f6eae80009e6946697", + "825e4a5dedb493626e7ba", + "4d1a97d405c026a8a5aed6", + "d08254f4d2d5ca1a5b877", + "7bca9525e525d6ded2c76f", + "755d342969e9fcde9fd595", + "7438dcc1d87bfc73ab26", + "5d77b3e7e323ddd35a71a5", + "dfc33dec9862e861d43cc", + "75b3fbba0880cedfe12ea", + "2746a28b14b19ab8d24145", + "795824804b82c5e751df2b", + "1c6bd00355516b7177a93d", + "75d1f80628c3a1c1082c91", + "1998245099906d42a62588", + "7ba683eab937665ca29978", + "203c3b480852a2154fd642", + "1ee8fffd33bf6223d36b95", + "c92faa8d02b107a1b5d50", + "65a7ac7cbfcc2f6c41c2ac", + "7450197e181adf8c4f92cf", + "636079478bd1eb493d0866", + "47792007d733892284fb9b", + "44678fb0d784f11b21a657", + "27e147bc2366e607ad99bd", + "168c6919206ac6ace0f625", + "1c9f92bdf4717c6880a9ba", + "3c4dc48e3cdfd4ce2eefe9", + "6b79ef63bb66f1362d8de", + "5efd2121bfee3a30184816", + "5ca7f66678a73081bd34e5", + "5cc79f5d12d2a991f4ebd0", + "4fadec3b4cf5617426ac33", + "af86674d8a1c364331ef3", + "1b0ff68c5f14ee84b37e7f", + "6be91a7f057434bdea3953", + "498cac7e3100df5899cd16", + "3a0a69f5624f959d85e411", + "779b65c66a52eeb45328d2", + "48b5f18a43890f525b850c", + "1a9a55461554e908c4fbf0", + "230c19482c2fdfccb6b94", + "1a364185d640ba1a6ed583", + "1c72fdd679cfcd10e369be", + "56853e4d2e614e1924d27a", + "10cc655b268878a4e8e081", + "3c71a5e6f6b431bc524a53", + "7b274f32f2cbfe03031cb0", + "64adff5211c520e76cfa93", + "621edd8ea6ff7136526540", + "7f8ad9957e40808881a192", + "76c881f1a372f21e829095", + "5027d58d8950e307548d14", + "122225a7053b175027361a", + "627a4795d0c0df1d84d13a", + "4a5333a5e1c04b8bdfa257", + "4555d38c19f123cccb6fb4", + "bf09d6ff46adc21d04951", + "bfe2f259223ccddac13b3", + "4167a3ca5253556f128ea6", + "1d3c95c9d8462d4c467220", + "48e1272ba911cad7536a1", + "59b759ca3a67e4725b5f84", + "53cc3acdd810a96c3160cb", + "6abf077f6636ceee313734", + "226c7c98f219b40ea94b66", + "54dcbbc689dad12df77730", + "5abf04c6f95d64b6c414", + "50774e378282fd09459eb4", + "66895605da5092de3d2b87", + "3bb5af245e5d40c6fc15e3", + "6e388c53aaae7d287eebd5", + "446d6309025414bad0aee1", + "6a40f14b7a50eeca571bae", + "6d925493d403647cc0a7ba", + "73f933fe401d564be0efd3", + "15aba357d612d87099180d", + "5c20428f433fbf0c9ab374", + "4871087f3b2cd3c0f24c3e", + "4eea383bfa391bcb14540", + "658769c97f8b8945ac2878", + "4a05e03567ac78048832e8", + "5e4b991cdcf27f65105596", + "32e5746a212d6238682c00", + "26436c96779bbae9c15fae", + "290cc13b5edc05d863546", + "69714524521e343bc3692d", + "3ecd876c819b78567f7fa4", + "2abf897aba93d347d6e2db", + "62f83959d672cbfe7201a", + "1a54e98271fd5720e1bc63", + "2029341ddfdbd9f668612", + "572930c1df7ba238dfc9cd", + "1b71574f7c567d707d0e82", + "509b53b07e607cbcf6e79b", + "682583fe078ff76c962922", + "2f0c8ecc959b7521936666", + "621bfd4a39ee713781e554", + "3712172b56577089f4c773", + "208fb7a4ffec7d8d1e5be6", + "1a5e08fda45015af7feba5", + "172bc617da9e1aa348e114", + "427af6fbf5578c6104b255", + "522de20b2431d6ac8f42fb", + "6ee2946ba009641ad73037", + "73e027017f2dbdbc204a16", + "3d88de9f1c15bfd7b6363b", + "36c8b1aaf274cca356ae2f", + "e050d10f9ab1681fbdc06", + "3cd72e80ffad615f09526a", + "2b913687a118d5d595277b", + "22af1fffca9aa4b2ba234a", + "7b4ac8e7f9ffbf17f0627f", + "57d57f4721fb6be3b38e99", + "c98c97ab7b4b0cb756894", + "2248d63b93978222916f1b", + "53528c9bfa6f5405d66497", + "5e45b3a532e82a603df12b", + "6799fa1f9cffb381bd6c8c", + "5097857cdd82d2df144dda", + "4f540ba10fdacad19fee6f", + "15891c14bba25257cb14ef", + "eb947683c26db8dac2f36", + "6b497ffe240d0867d5d7ef", + "2beed154412bd52cf1c83c", + "39824b01dda7b8ada90cc2", + "5afcdfdab7a5b6864efc6d", + "743eb61998341a5e892884", + "745ca85c76435eb7ba81ad", + "4b223517b6c7cd85cb43d1", + "51e8f647af3880d2b77ccd", + "6a24f8897d3040e8fb1da8", + "57f40a819546afc89fc2ce", + "6b0dc0d5521d21af0ccaf4", + "282f326b1fcbfb463ba836", + "4d7d33eaba361883277544", + "298af75c2d584b01ccc6a6", + "692752e677cdaba7d636c2", + "277575523998439f834d3", + "1aee70e483c99574480349", + "18991d6f38c445ab4b38f1", + "5552617d9eaca45155f490", + "3459971422155f9703c78c", + "40678fa2d309cb9417f68f", + "2be59650bf9aa57c249937", + "5ea38165e28694c8629ccb", + "3e6265ca213c1a0be64512", + "69c96f5702ae4eecc6f341", + "62e9a332653e1b103db5cf", + "62870c281778214067b40e", + "14bde3f9984cc98dc83f60", + "5338be8d9f87d3f2e46b2e", + "5e7785eebda5c8e2f0247b", + "24183bf26908368eb41547", + "51f9e6d75a3c5264312643", + "4c67268f528ba7e8c34a0", + "708324dd5e787ea3d43a21", + "75b09479e265b9f0ac9a5b", + "7972b4774882051f2d85a4", + "31be6678e513813e0e676c", + "170a54e825e33a2265d3cb", + "66fecdf77d13ff6c0b25a4", + "923121ae3af782c934df4", + "473c4bff7362fbbd2049ff", + "61249154ca21ee2b75deb1", + "23ac86fba80f09945d51d2", + "19b52abcac8b60d5349efc", + "3a9c7a7d5782f84fd4620f", + "674fde01f6057423c31a9a", + "5533d7d78826353c79c73e", + "42e88e9f66659afa2a393", + "18e83fe885c9bab518bb97", + "1ccb03c008f2e822848880", + "3665e544d5ec7ed8868a1b", + "6b25a8073bc36b2af4c2b1", + "7b5ec7e3346c3cb243b356", + "34b484cdb4cebe6aff839", + "260d3af59b4f3d5c208bbf", + "3d946cf498fbed2d965f70", + "4755035ba4d9924118903c", + "4a29c3e62c947a4a1e99b9", + "4edfb060e1dacbd449d726", + "29f1e17550354ceae49f99", + "247f391e5a3b234cf19ccc", + "7e2be12d72782db9e725dd", + "47d8e4eb9811f9d409ea40", + "5488a723f6ba5cf9800543", + "304cc216ed2272d07c7f80", + "3292c0c9fda6887e4ad161", + "24af65fef90e2f99e03cae", + "2c250894e17e7f4b0dd", + "77a73ba77b4ed622a17e87", + "f36396be6cc745bba9473", + "683a5c6214b92efde4aafb", + "55247bc5a72b8d3e89234b", + "6747e95b215a546a339b7", + "178fa57d907fddb0fe3cca", + "748df460f8594e0bf1ab20", + "3b409dc537f82b36a0b80a", + "69150cde40be119caa92bb", + "48ef84f7c351ecdc951b2d", + "4e162f9f85bd081abd7380", + "32dc0a137f654afa8bd8fc", + "6f59efef27dbd92df6f652", + "645d789e2ca881eb3474c9", + "73a88b6c78ebe25a0f02da", + "3501255a6a3473cf6ac042", + "4026f1042b0f5b1e940a78", + "364b7fe165d59b5d916e2f", + "daa197fa1e9b3068f7333", + "1d51d9201dd8c5066bb7d1", + "1e7a055357b6580f4a7b9", + "6f33938b3b060336c57082", + "6ad4c1af807487676eed8c", + "6a5c41dd17f1f090be79f9", + "2b1a4dba7447b02833bcc5", + "1a939b8af79d6b9d1e57e0", + "339fe9b069fdcbe6f3e985", + "55e838d685f75c7c6b5f20", + "38102211c805f10960d5ba", + "6f9024d8cdd8d69ef10bf7", + "2db5ff229cb2d0a85b8393", + "7e1946c78347049b735318", + "5a2d6c9f89fb24cf28d1b3", + "7d5f8fcc1cf99dc3131c84", + "68719eec758c692aaaddb3", + "a5582fe7b241700d09fbc", + "3de183e6b991f7b8085160", + "cd47f8baa501aac7b0989", + "658a9098281c199cd165fd", + "476085adcac943f7253ad3", + "45f39b8c67c74dfb911f44", + "3cb90317e0fd78744bd72b", + "509c14f0517edd55968bc1", + "7a6cf71a247a9aa2ad1f3d", + "594ab65a623ca11a1d847f", + "32765eba5563b5336b4375", + "e4ce3641fd893553aeebb", + "e73b5b515611f25e496d1", + "ddd508394009eefde3ac7", + "b4aa58f86a462da2ed07", + "4d562b2b0bde307c0edc87", + "2c30e99c7b2606982311b7", + "3a997ef0ad242391b526f9", + "4f754c5d3b280b20bc95d0", + "375f02bea7dda994d93044", + "5bd335a49bc5a06867e5e1", + "63d746c096cfab5f984c70", + "25d324d633986f4baae0fd", + "2175a06a641d5e8ad33646", + "403c1a7f2d528ab5d343b9", + "1429ba4cc3fbeac84cae7b", + "4fe62d365b58ffaa0d2201", + "6bd057cf4845772f81f71e", + "38dd92596a9fd54920876d", + "ffbb4d4d7cd961d36be9b", + "3910da787142c54f4f9b2f", + "2a843c02b5e59799422e65", + "4f459e6fecc9cadb8e977", + "374bc74be1e4381a79910f", + "4656a2b830782828314373", + "583e484be506b8efea96b4", + "36d97c131b997ecd7866ef", + "40066cef89d0c82982356c", + "3301553132b8af815a8ed7", + "475c6525a253fe4a455211", + "7215cad82f761314bbdd1e", + "784f7b46f80b03fd06242c", + "2fc0729bbc7485664f21f9", + "62658893411360a21b6bfa", + "775ff949792463791cf8ab", + "6bbcfc26c4e8fa7b836095", + "14a9e816ead24aab2e6645", + "6467af1a0f07013b2e9849", + "5f019291ccdeabcd687ce5", + "2311c97b29ff503887b251", + "623f56668cc8a093bdba7e", + "3b890cc2ea1882c16138ef", + "6e0d3cb0378f9f523dd7ca", + "e50ab5db695f894b26597", + "500de5789e46431a14b08d", + "74a3895c1173d1100e060", + "28c70cf1a34bf4b12fc1a1", + "260202888a368af1bf27f0", + "49f6551bb5a630f7f3a91", + "35984ab233bfbbdc2149d0", + "7715808f58e52b93fbd9f4", + "7a35b4347e2b2fcfef4e8a", + "696a995b7f1bd2337f9c55", + "765220bfddbe009c12884", + "6c4e919619ba3e8fcc083f", + "6908cd3a0537e6d9de224b", + "8cecd81b395199379b860", + "73475afc8917dfb47ca158", + "671133a56bfab71842e1aa", + "4356f96a535f02cd557790", + "d73559f9e34900d6994e0", + "4299b7c55998b524a2963e", + "6df756715e22975feac139", + "2e795b59317cae4c039946", + "638a87cbb628cc2744b5a", + "2d0786ef10819221e8e925", + "285121b3579e1afaecea17", + "f0daaf67c2422477284d4", + "df5585842155fda65c5ad", + "41824effd56ee95a25ffcf", + "5a2e3e7ac883c32720fb5f", + "786bd6b0d956c71e3d0c41", + "2dd9e647cd7caac396218d", + "32267a0d010a3ac60d956b", + "3bd14b5c954fd788df3e2f", + "55d4eceed6862d8b7edf73", + "32bc07a00fc1c32e790cff", + "e16e90086dfb42533696c", + "58f251e3a335055f8d1702", + "45d0bbd0c4c565d517f4d9", + "47cb5e48534f0fa269ac37", + "23591be47ead61c7626094", + "4e9b8b836aefbcc76074a3", + "7499dfe49d22092ecbaacd", + "422c99318e0e012bdf3cdb", + "6dbec10ac45803905232cc", + "5f091c9040f8e8b4af8c6a", + "49dd9e128368a6e8f31565", + "631d5fa433132c920e949d", + "4a728ba1f43b41e3c8ba7b", + "5de44a501f899626f11ecb", + "1db2b63fb5b72bd2913b9b", + "75c3040748861ea4157368", + "5714f7d7bb3f12d88adae1", + "3382f247e6cbcf48a8be0c", + "436134e757c46fe077e8fd", + "ca5fc0de7c8f0742fa11a", + "324b0e59fd313b7b066991", + "fca82540d3cb37cfe38de", + "71310c65e10b4b2e1f3924", + "53034f778656513538ce93", + "6e8a28f3d3f87aa2548dbc", + "792ab4b2a318b2229df59", + "700ac125ecd365c309339c", + "d7315bcace04536b59c5c", + "5f9fe5fab5062ae9d40550", + "7ed8ee73ca5507f25bd5aa", + "6247c20f5e97453bb71b09", + "463e980411d809a1713383", + "546f06ab10360a76005c9e", + "1c0a01fb60b92af636be29", + "a5385b7f7d2a505f37187", + "296401a6101dec9b48a81a", + "38aece2fe0c1923c569603", + "e966e5d5e80ac9dc377a2", + "7eaf3d6220ab7c049341fb", + "1a01c5dd382ca52c0f8a1a", + "68ab0ae55863c4f8044101", + "75b29426909e9c8294f365", + "39fc8d30c95dd0494e9be3", + "3c234bbaf5da9465f9498e", + "7ef05035c2a08e050870e7", + "7e880bc1729d1783a14627", + "3df3e3ff8b5241f9f120b6", + "61c60fa253a8977e213d6c", + "dcb3217133998c35879b7", + "19e87845fee8ee9d86794a", + "1b8c24041b5c09c2ff1c0f", + "1d4d18f2bee14ee417596c", + "5197b486ae5dad9284702a", + "7a4b513ca25dc5d887768d", + "2e1d98165a5897b1482cbe", + "494c96ddeebc9c314fa5db", + "29785bd232aa4bcde009aa", + "42d71e3ed0639f1b07231a", + "1439532a6d3fdff49361fa", + "8c59c1948361c413eed8f", + "2c9401cd53725f84e2c421", + "5eb9037bc76a6930985737", + "6d5d0573b2f9596b50b73b", + "36121cc69943c0f23f8a85", + "308787b80145ee403c389d", + "74d978e8d6a9ce6def9aa3", + "34242d89a6cc1d4e30fa9e", + "6106124e06a73207e84629", + "1174d8cdaeecfc5b7908d0", + "49f7df71bb684bf5a54c61", + "53b453f5f30f900af808e3", + "7b4210ea990dbb2b80bb4", + "232c5e33740871b389c8ba", + "3e748cccf5c4b2e587b8b2", + "2078bac214b712936de507", + "426ece55a7fd1d858414a0", + "1eac63084c7797618dd9f7", + "59fdecdacfa91d60fd391e", + "589758587c26455b22331e", + "19e1cce82f85eff6f6b24", + "16d83b4ed79a537102c236", + "4ad2dfbccfebf4c881dcf6", + "1851d531ca021ad6f2b572", + "1c85ed9416af845bb8e82", + "5cf912fba9a563060d7b3f", + "14c7f40a28e01adc5ae1b4", + "15131878551adae4b04c53", + "ddf6be61ce9c04533277", + "48938572f05f540b474485", + "465d9407cc9bc6456e974d", + "1df3eb49ffac499fc5f3b6", + "7e698a24ee9aa726fc4b0b", + "53e99cd5ced120123b808f", + "66ba97928f262067fec230", + "1d1b1bb20ae40ee8d35505", + "22cd6c35ab2195c56794f9", + "1ef2f8aa8266e26254215a", + "14da7875e13efd461f7c10", + "22d6cba0f681e23fc64382", + "682b3c7ed60ad7c985a3a", + "244d1131736a5aea351d17", + "3ae16fb3fb77d48c6adcc3", + "3253e31b47819fbcec75b4", + "507a6d1fd108a63234b38f", + "3e2cbdf24bd5900348312", + "34f2e009d684c876c246fb", + "bb247081da09643c00d36", + "32a426cd7460f9e5c5e7", + "48082cdc2a40ccd11ae434", + "1d616376b444140f9acd68", + "72bd80f062eb130b42b044", + "e1e55a565534c74a109fc", + "49e01d719bf13fd52369ee", + "2ae496e8d9399061460619", + "7adc118469443d4f7084b2", + "7ad19421f012d132850842", + "45b5b538c44c73f3bf515f", + "5f8307f0589178f70f7238", + "54018c8917549d050c00a8", + "4700bc9de4804ec44122f", + "d922a909e3b3afea5fe08", + "46ea38e0c4bb849b39baee", + "7b87e87e1438c6126ab1cc", + "499667b1e22348ac584789", + "137f8e05276cc8f9180095", + "5accf03c1a20af1120832d", + "4e94399e1765146189df5b", + "55fca6cb45a0501d1c50ba", + "2ea5fa6c2e19e6ee7add96", + "d8e9fae4ec5d3e7913712", + "767f863c9bfc5fd6540f44", + "477273c36a749543489547", + "4265efdcec74f163498291", + "43f53558dbb8a25ad757e", + "7b5d99de82bacb33af7ee8", + "1d4515e4768ff5c6b4178f", + "2057d9029cad07c3d344a3", + "e419f0eced24d03400fbc", + "2e30617b0abeb387001867", + "603f9b3bc6733094104e23", + "fa6bb9b4b92165346e0ff", + "321ccac2ccfd73a0b28c6d", + "6af9f591969edf6d33a899", + "5ebda7b44a30093e22fee3", + "150cbeb75257f8eed7903", + "1b0dfe5bf791bf4d645e64", + "5286bfcb1951cdb460fbe5", + "29ca62a9234f915c5c9715", + "3629587577ea6cd990a3d3", + "4d3d6fd7781e8ff3322226", + "7377f9449fdfa779330064", + "7f3f1310b0770a6a8ab4e6", + "74f8ea2aa01f3e122e9ec6", + "74aed20fd8f19001dab562", + "7a9c1df7aec04dc00e3584", + "2b3dba5edc89810815d1ce", + "217c2392122f9868740137", + "43ac29ece073be2a30ce86", + "4b6b8f4e6118573075d4ce", + "3cd3f5ea5623ce969c863a", + "421de31b9083741c4d4c48", + "1960ca77285b35812422e2", + "7d40cdfed339cab397652f", + "51a001a64a22c7bc0db3ea", + "1fe4c7d7da3eaeaae25e65", + "720179be8f54eb5c778be", + "1144f2116d6e426f3addec", + "10ad00e38092458e73fe4f", + "72e90ac5d748fbd2d7aadd", + "18250945b23b28bdd1208a", + "dee72e6d522c55b461f4b", + "1e31c413e16722caeb814", + "5ccfa76193ddbc64186a30", + "5eb2b60c1d97e4dcdb09d3", + "7f31009d8b384ea51f9235", + "7118c95246463e79fab7c6", + "2af1b36e871a2152d87ea3", + "1ae4174a64ea29d65c88b7", + "1aa4bb2c56ddce8ebceb39", + "65773487e5415b58fb205a", + "5adfc7a0a78f6657a5960", + "3d5e0686efab87e5e7c266", + "6552488fb7e68b138c5691", + "69cb489051468dc8b7a10d", + "2885d88c14361dbedb4fb1", + "17f8a55fef5d58503cdf89", + "71a2dd2f4561ce6b25cc84", + "173ef6d2228315e7fc8577", + "6095ebe0914ab346aaab52", + "1246f9f5df870b21bcb1e6", + "5e53c14166e301e45a1c84", + "3a1984f88834905315728d", + "4678975ad8ef4ef63ed234", + "139a5be9fe5d74b7b324f6", + "4057d3883ee10c31d0c5f9", + "5de657154513d33b2dbb32", + "7da4d79cdf3d83f0763c79", + "7399c1866bdfc2ee9d0ba4", + "48cdee08fb7cd0c828eec2", + "4c099f907df9db8a25350c", + "851fa3652b44e57d9190b", + "d0d6f30615b8f231bece9", + "5f305f39404231a1ce6591", + "47b5376a6bf9ae1b5420d0", + "55925c1c09bda33b3d0e7c", + "4aa62ab8f33741774c11af", + "cebc8496358956c6ed352", + "4e0f2086acba831702db59", + "2103ca88adecbfdd3370", + "5b917d89029b0850efbfd7", + "619fb115b590487fbaece5", + "709f8b4e1e81f78ecdd5bb", + "5c6ce5b29bafc437eda5ce", + "1c6a5fca595a1ff62b0a7b", + "5c246c8d9baad4092bd7a9", + "2f1ba6fd01e5cf713f7991", + "3d17d279ec6a81f53cd4f8", + "42af59edeafb6c79b9d208", + "7e0f7a6620c31d72d9d568", + "68d1c5df4d9653be9c8e7b", + "79db0961906e2d46b0b349", + "4c4fa3875e78671bc1d2bc", + "22a17bb1e02873c944cbe3", + "25e4a83dfc2f633765d96b", + "8a4219421d2f55bef801a", + "341ee0e329f6ab9da76c4a", + "28eaec99940a1b1f563841", + "4f1b7b04b31a6d85748c8e", + "1152ee1f6c91b44b1faa20", + "6b4aa7c57cecc522b32c99", + "49e219e4b19fa82e3cdd8d", + "5bc9b4c686de112404ccc3", + "40d9ddb7d82d86fe4dc6d7", + "6b85f2803d97e818e2e527", + "321405882a2a0c05f7907b", + "60749c3a015660029dacb9", + "26240f3e8816b599bb01c6", + "1a91a4ef4625f7ae911f1d", + "18704740809cbd3a91bcc8", + "532d2ff2bd9d0ca8b344ee", + "18488f368798b8734164ca", + "7453e07405f19cfba93c17", + "3cfc7a65b66e9f8c6f8cbd", + "4dde9b7ed5a96934e4dd51", + "7afeb7314079bb05948a57", + "2f4c8ebd42ef359c5ac79b", + "2579cde0e8d37e04167a12", + "368d20177281b04fd8018f", + "4553e500c491eb2ced6e1a", + "12a8a0e9fe6ba5c3656149", + "13d6f0fac0c0b9cd891715", + "cfbfcb607ba616c016fef", + "522bb592e89a78b316244d", + "2db6d4b5b7a928883df97f", + "928d2a95f60dac2e280f3", + "15b79d2a607e674b1df02c", + "711d3de6506cffb89d82c0", + "1fab75ef67bec61a68a277", + "3dc7ec06146d405216b267", + "15c08724b1daf7a590d087", + "75c2ce5e2535ac7878196c", + "63dbff9398c6d2cafd1418", + "245003f901ae0a356365b5", + "10b57d68a8cfe14ef3ca7c", + "5fdc8856cd703470a1e5a4", + "1af9124bffaade4351e990", + "5f72010436c71470f190d9", + "50755ca653aac70b84b12a", + "14c9d693e42997dbc96df3", + "7a93c6e177d746f5eb503", + "28d70ec040ec983aded5c7", + "124c113e25b1a8153a830d", + "2df0f496cddcc699504250", + "5dab9e18ce0b8340db40a2", + "6a410e486ad693817f9d31", + "5e82dce0d15b40d73e81bd", + "4e1b51392bd1ad38a51d00", + "69efc15f2bab10979940b4", + "4bb8f4e111d078e3c54590", + "22e8d9bc34a96264dd4caa", + "3a7c703f2642b17eba0c69", + "2df2bed0dd9ba405c8c5ce", + "222dacddb6e77241cadac8", + "4c996629390ea0954eeb1f", + "37c7b0fc4e875134c29246", + "4a78cbf6bef93b38948e09", + "6c8fa526a6bdbce9f7b832", + "7633f58adb014bb5585678", + "509ea21b16907067d06b82", + "30a8e1972ee45f3e0613d5", + "63839ba9cca448dd7fecff", + "290fe0ae5a419909be4e2b", + "35dbe95730bed0669969ad", + "2a6c238cf5c57a2939882f", + "f9d7db7493258ceea1a37", + "36ded179138f0e4cdf1ee7", + "4996f8a3f7c2c5fac02813", + "39bbee3cab035e7fc68b3", + "741dd990ea20591fd9b5ff", + "16eeff7e87d3caf8e58a92", + "2c8f1060dc661c38044a5b", + "3d886ee05f1bcf69fa4f70", + "392d9ae31bf22e0236e198", + "1a7c7fe62effcf2d1a2cb5", + "65172c59adde7fa1aa62e", + "389d1e8a26db35e20882fb", + "7dd9082b6f5562b8d6ba91", + "18c5643eccf2173f575420", + "757f2101d664083b2fe8c9", + "66e9cba0e526f30b7b9b8f", + "6c33a3a058504d48c17efb", + "1a908fcb6be810a9e1e92a", + "2df246fe147cf6a7d9ed5f", + "3dac1d8f9e9cf46cc42204", + "3cfed079405fd41004c118", + "7aeadbfb750a598afce6ac", + "485bb888b6979f8f201fb8", + "460858d1e253129bf64e5b", + "3567cd9077f5bb1d3115a3", + "28b06a5b8a2319d5d78e37", + "5c3df551863d0055925c95", + "260985f3992a168bc7fb3b", + "5a00aa930e50101d3ad458", + "3e41b8ea3309221756df7b", + "216b9b04319fd8da8a6d3b", + "24a843ed6770d822f92be9", + "60e3811062f0661e25f626", + "656a55d45a93fac53881ab", + "10f7a570b959918609b06f", + "d755ece5c8fed1e833d4b", + "5eb96063b604b2d052b457", + "182ed4a29e8be479e40c89", + "55e542cd768eaa4ab7eb43", + "4a1404c02a58e6862d11f5", + "4366b19aa12542a30c1749", + "74a0eb9dfa780e171aa5bc", + "7b34f38b9d16f0d70ddae4", + "1f75d643fbc4ab52296f51", + "1cc8bac063e7f4722cc83d", + "1f1cae187cb4e7e2d75ff5", + "6acdbbcb1d87bb33b845b0", + "5a67c62d60522486e9cab9", + "66727c69de089e222307ae", + "7dde8d7ccd2cebd1d4b943", + "3732911ea3b78b2cc54de2", + "69b04bfb64dc28afc90f3", + "49a34db8369186ccd3e18b", + "3087f959a9893769198248", + "766ac65aedf40f90341249", + "3c8b578aed4234d875a143", + "7248daa035ed0c83c2d007", + "35d310b1c9f92e46c5dccd", + "747c7a13b706fb28e46c47", + "e2d9cdfcde324e23eda21", + "607776583fcde0ad8e4c87", + "2133efe27b28c873f101f", + "6ad95985d0ab8e8d823145", + "35d6d7bb2855d9adfbf650", + "7a123babe2e7abafbaf8e7", + "3b0cb59bddc94e18233703", + "77815256a969cddb479be9", + "9c6c4ea9b05d327c6b7f3", + "55137101093be9fb51857e", + "59bb325b9748e94acb6630", + "328bf9a8c78ea2ca3388be", + "6ee757629a9b68ac7e690f", + "59efda7d6a6d8e6aaaba46", + "6ce70c288bc2711b1b024f", + "4ed7cbd3e32dee7a40c626", + "a9753c820825d73c04548", + "741d91860d83d000328e76", + "59aa03a25735023ef97395", + "1cc96ab6764758e9cff09d", + "50e22c6cf5d6b70def807b", + "76f42929010d1ca7619b42", + "18a6b71998f6f84fd5d814", + "5fda42ececb40f359e4f0b", + "2f62056d547ebf7995c6e6", + "23966403e567312c7a8379", + "6b7e91fb5948662e3961e3", + "1e6874a8b307092ad6e72b", + "31dfcfe645b46b329ee2a1", + "209910d1159692421526c", + "3c4374002a4b05edbee285", + "6df855d5b158377d521892", + "4169ab1c6bf3f0abec6c34", + "359b331d03b9cc2451c1f8", + "3c7a2b6b58424eab86f3b4", + "7242e44696c19a3a1910b7", + "2a7311c640e7cf0ecc141", + "7933956672bf2e4535ee34", + "455927f484bb8820a2ccf7", + "551ec7c1ae7ed078f940c0", + "6ef800332004d6cda26cdc", + "7630fa097aa2bf97cef6b9", + "490db50fd1ace7e8ec15ae", + "32f5fb93813b0abef00c9a", + "44e6ec408ba05ad98e759", + "568f3917922fe83ad3e225", + "273beeddd87cbae01c207f", + "1a8ed7cad7bcfca4620120", + "6c362e17e2173449bde86a", + "191da9b869e973d2fdfea7", + "64666abc6a9a2f6a1c7575", + "3c31433d0db703e03c294d", + "1e74e23fb34c50dc055d0", + "59652c3042e742dab07904", + "50e46147373113c54d73c2", + "776ff8d5492c149f7acf17", + "318d2300370d914ed1483a", + "e24946eda2a54a4c98b6e", + "28434971e0ad86e87340b6", + "b7602abf832a9540b03b8", + "3a2bc2968347afc3827c67", + "5fde1fcd656f65c682e01e", + "113149ff5647e02c5d8e8c", + "329c1979af2fa92b25335f", + "7de8764ca6a43c99d6a50f", + "7e68cfb951ae556b15fa1", + "5cac3c06df31850ad70694", + "357eab1d6b7f6618503b3c", + "4e66ba0bc1058a3931042b", + "65f33a2872e25c8a682f06", + "a5d62acbaf68c52001a4b", + "18f39bb607de6b1ad183e4", + "16870479234b3337ddc8c9", + "7093b250c7b04c2c6d567c", + "3820d1fc1eab75e925dc43", + "49ddb3e956e6fd8d65e1ed", + "7544304d1b3c2594fef689", + "60483a9742002ed4918cd1", + "809a8bacccc204134381c", + "177aa9fd51aa698c4f5d25", + "2848634cb8eba43423c432", + "2bd0c39ecff8d002f3a3f7", + "2bc7683658e815b0850ae", + "56d7ace10d6e046f35bc1e", + "1cf7470aa8bed908f93c32", + "44885049137a26d9ff4438", + "46436019c4b35e76ea4182", + "6b4ed91c3f4f0b25252206", + "1cb50b0700a11348f864c6", + "26c603e605263eb37ee858", + "734cae170e5d7d8758c509", + "3e00e41664141664f70d8e", + "4d36c683652009a273c69c", + "61e21b9a255226ab8a9c03", + "66db9685c97e1039f97191", + "41ebedf12db1451af99b12", + "5640578c9a2f674c097c8a", + "37526cf6c350fc29ecf559", + "6e93c69a7627e1f9832a61", + "3aaf5736ed929c1ed0ab93", + "42cda11218a2f5a8d7bd1f", + "ea04fd9db78a21c39b6a5", + "53e3092b891267552e8471", + "3e13e95a38da382cdac574", + "7d59312cf551555c728152", + "57b341376c8eeb5e957326", + "2fb62f0a2e9435830411", + "6131db76263e902f303f6e", + "5e7e83070de3b07a4bc87", + "54765bab6ab2b394d9dee1", + "3b4ae8aa403abef29b052b", + "4e1bc7c2f29a2f520bcf7d", + "50bb1918112bad3e57d523", + "3979e2b3d54a21e7e8c1cf", + "4f3fe475424626758ebe24", + "26c45bee1cb7e300fef593", + "20866732367b425f7e5ad1", + "4779c6f70cb71f00e32d17", + "24dc2302a4b77b85525bd", + "f339d2f5ca33347ae8d13", + "2e178e1cc4f997792ce1aa", + "54728697bad28cd0bcc9f", + "13413811d8a8e6bc2e6cf8", + "1a3337bb0bc288bf44447e", + "526d1eb936d1a3dec6eeb3", + "7df75741d3ccafb28da8e", + "6476d594392ef9fc9a3df1", + "645cf2dd2735f1cbf53f1a", + "780a2a5411b159d83dcb95", + "562d8222a0b94f5af3137c", + "e859d26ac6c854731c10d", + "3908eb827c8209b96bc643", + "61619bfea73d2a10c7a7e9", + "cf2bf44fe6c433cc00c9", + "17b5a764867bc2f176278", + "667b77d58f7f6b14e19bc3", + "14c79375686a30f4c21ea1", + "57d421e876be8c87768c1a", + "a49f38b3c0b7ca1fc5c10", + "1998c4f90bb8b5465b7b1e", + "974b1ea8fc3d4665ea11a", + "4382f99dff4951a775fb77", + "66b03ec137e6361ddf6317", + "43f99aac41b05d58c624b4", + "4efe7cc856d9eef4fda470", + "35f48b300d21989b05560", + "79ef58660a06bbc22f0cce", + "5623f1c8e0d5c15938b2a1", + "740e3fa0e998e741eb97cb", + "4f6148f444b84dfe82ecb2", + "34ce2df12c5e0970f682d1", + "5fe5a0fcee7c061cf49e8d", + "127dbd62073fb0c17b4217", + "31b2ef6b5163160bdce290", + "7f9a1f8e557617163d5e82", + "3c5262912ab7e82ffd49c", + "4ad5e4985caa0c7ee63b9f", + "5267f1f68134d546ec646f", + "7f695021b246db24a5113a", + "11df54a696817409ff1164", + "5549ebaa872068aae68ac5", + "236e08f8411de38e44c3cd", + "1892726d56d4f8f92dde20", + "457d09be8a2a4c351b63ae", + "53339d5a01f3d2e9bc8755", + "ac5bf0492a63aa0bf597", + "714ed5cb0027168be15142", + "4cfaabac7104cbad2ed728", + "486fd3ea0158f33daf767d", + "61c0e0ff11a378274b395c", + "5e195ccf98c9a4e1967fe1", + "3eecfda3b4d92af2b7e5ae", + "62af499c078af038905758", + "38d987fd4b450ee5a69286", + "5f9563c7ca70d6e5061bfa", + "ad64cff4b4763a7fda09f", + "26554ee3e9bedb1a3a09fd", + "42c5d2d1082dd2375a4ef3", + "7e05b7c7d54cfa1fc7b525", + "118d29d91686683483dea8", + "2c56fdcda56f78dcda9b60", + "d92cf9efd7d12c62f0dfe", + "11b77783f411c457cf909e", + "2cd33d1f501e268643d591", + "1ebddbaa72ad1a2b1cdc49", + "73f4373aa0c46a1ae61409", + "64b1dd5abc6713a8f53d0c", + "3aef6b8ad8d4f116a27e4a", + "13f9a309c929439a91df6c", + "401a3ed45557939fa7eea", + "1d1aa15ce7c8c15f051ba9", + "398764fa3e177502af4d3b", + "48edf77c0fc298b0491c2a", + "1c5b7d2b84cbc7b29bf542", + "78873bb7282961108e63a", + "16ad879cfcd3e458301dc9", + "28b06d6b1f993702509e4a", + "45242101d43b276b34115c", + "783d012e8b928ea14eaad8", + "5afe15c1524eda9627e183", + "42b636bc4126dddf74cb00", + "5cd8f782abb8b60cbf36f8", + "1c5d10301fcf4a14c82adb", + "52d3cdd253b64a03c5885b", + "31416a7f09913059dc251d", + "46bafe88322c67f3b90507", + "4cb6253df884020966d27b", + "2948eda7d7c508918c3056", + "543222604f067afa3e7558", + "3ae99fca89d15abe091160", + "140aa7412f6488f5404826", + "16b6721ea95f55ef631d25", + "133606f2fed41ffd77b999", + "4d075c933e4b93da3a33d9", + "4ed1311eae64f9e834ee7b", + "f920b02af1e3bd673512e", + "312518f9c1ce1e690c003d", + "44bd0de2094b8b3759356", + "3d40b56764f7765513d13", + "6b5da25417070642e0ba4c", + "6bd995ef31bcfd22d52d9f", + "3eedab106a435ef32b9e48", + "534c1a3b25194e8cd66e6c", + "28a37e042abf70a7cb137d", + "76fbf6732402bc76e061d1", + "3b66491ccee4801a4e3673", + "5ef7fbdbf498c8684625f6", + "3305f9d7ac9bc35ded571d", + "6aaafc0107575bd9b70723", + "5eb217461cfa46d5694397", + "7f5140ee63b60e0a33058a", + "3fe61d12a0b09791925ccd", + "591749051e47ee7b49cf82", + "33440d7d3472a4b6e2f627", + "4dedb1ba2a6a4abde67337", + "30485371efc19b50bbafe6", + "3566f7f67e026f0278dfd5", + "201e678f30ea96fd17615f", + "4a2580e03d81912089d88d", + "68e88d3bc4e8d390ae4b13", + "46986d0da7a2c17dd1dc22", + "174fdf0bcfc8d0f4e77e83", + "7a75be28b1e93e4e0c9342", + "11081f4b8fb8f0a9abf772", + "3245bbf080c6731fee74dc", + "57bf13241507b812b9a904", + "50c915d40aeb9e4ec78789", + "530f4c391aa2b0938eb272", + "4e0326164785519414d07e", + "389d9fa841750626db108d", + "5eec1e56c0a2d0e34dfc8a", + "3e8986648fb4053520276a", + "2db6e61499c9393946b57f", + "1b2e283bc4ff40366c744f", + "95d86ded4a7b26a1ad331", + "4818fb8f958698b6e9c9d9", + "21e39ab39cd96423900120", + "27476789fbe89ef5fe00c0", + "1b67e56d8c8f6656eac86d", + "28e33efab89fb4f64d6498", + "18eb41f414dd28e8ff3a1b", + "4a648c611ef0b3b0e318e0", + "3ab4982748b8f986192588", + "1eacd91eb3938b38f0210f", + "5227913634dbd4b19ffe95", + "1d5b0385650d2d81754f72", + "7351e32ddd53c7465f65e8", + "202d04fcffa7e3a0ae0585", + "6b77b6d06b93487730de2b", + "2f635c018151dfffc38ed7", + "7d83ba89b9f89b55497937", + "d1c5eeefb8bb620c573fa", + "322d1e939066766f918e43", + "3ea29dc49c06d64c187862", + "7f64ec3ee1d6fd7b5f9352", + "749ebfb4005c94ed288c4", + "6f3d0d822d1a27088df8e4", + "17b1690a9c9f4fba9154e2", + "142aa17e315b2096d3470c", + "5778dc2f1465daeafbf88f", + "3135a042ca5b8873367081", + "26f3f960b2ba725c83b706", + "156e3560db5a642c108333", + "3adf2b6aaf40f5dcdffdf2", + "4ecbf2559411992397d1ba", + "5e3402a24a307a945167f7", + "553a48facee35f17214327", + "57c6f0c9d94e02524b4029", + "44867f919f39bbc1ac8a53", + "7b1e254e6050240b36eede", + "7fb445fb34908201d41b44", + "5a49a0430b2145ead2e9a5", + "22d9fd1638450186756413", + "60a177acbb4aeba955e6a6", + "23a7a59b35972768b71627", + "ea9789ae096da5bedc410", + "38419b7c213432cd42f4bd", + "4024c6847ce50a93fefd10", + "1f15e66f6c5b160801ec4b", + "26fb73843bff3e4d17aa10", + "212d386743b2c2069ec4b7", + "59377c70bed9cccb346cff", + "5a80f23e82161bfd2caa8a", + "21532161ecdbdaac15b68a", + "5cd8f904c6a0e1c85597c4", + "2ad8c773fcdf92009db9b6", + "1df80784a603cde2e8573c", + "41127c781a5dd07b6ea357", + "6152b40d63a55e1ef6e750", + "3161bea37fcc040c6f6494", + "112bfdedc3401ff20ffcf6", + "6a3afde1cc784aefb925c8", + "47a38df2df7f516ac35f8d", + "6dafdbef06e817ec42991d", + "72059eace3671c76d67005", + "a209dce8856336ebd97f2", + "695d060b1aceccfdfa96c2", + "17445a9a60b0dfca9df354", + "249f5358017ada6567b747", + "b7347a4820635a5852b61", + "2bb74459adcd7029c9c35f", + "3684bf3ee3a2b8635ca0e1", + "600de685f1a4c2f4a236d9", + "68ae7d3832d31bce57eaf3", + "7a75b868e9fb50140bd203", + "1105d3c71c59dedcb33f", + "6234ffe0f938a25ce0f5a8", + "41858e467a21a3938d60aa", + "7332b41a9fe9dfbe59f71f", + "313ef612f2fd65f39c2e3e", + "49ce8855b52dfbb878b2d3", + "46b1961304e45b428bd48", + "1740e5e9a57a4e80eed5c8", + "7f035a794c44a6a57abf00", + "6eb090e9b1df79f4d2226", + "7f26a6c99362d1126b6773", + "14e47840962745e9f2bba8", + "28670ba592cd5a2625df3d", + "5c00c9ce80be32396ca075", + "4cc8bba01b6788222eb375", + "581f2a492a4fe468c3971b", + "6aacfa3617f47dce14015a", + "3988842f76572373c3459b", + "3146d29fae3f74014572cf", + "27216bcb23514df00030b1", + "36baace22f2d7a2014dd1e", + "20b11d38582bb81886466a", + "5aa25b718982092494e872", + "3f0eb0b9bdbbe37f40dc5f", + "5c4dc3dd9138eb7169302d", + "503bee64726b7b32815f44", + "7175ce67c0c74c440327c2", + "3fc3680285719ed4f7e7fe", + "7fc9fec9506aa1a0661240", + "122e1cf4ba920fb923d0e1", + "5570385cc742f16a21edc9", + "2a8b319bb90a064d3cc523", + "797bc83e9789b064b51c92", + "124aa58a7e2a882689ba12", + "5ee825c795f457b727b9e8", + "475c02da59260b083fa105", + "5f427b13d8351db71dc75e", + "7dca64fefd065e0893d874", + "88658ceb2447416239af", + "75ea3318a1054593eca8e6", + "21b1555bb331b89f928e6d", + "7e558ced95c8a49312174c", + "71f02d980dd943488cbefc", + "23e36a6e12831353ac1afd", + "1073f10b92dd8a202017b2", + "a0ac3885d2cb22aeb977f", + "2ac1793993d045ec4ea0ab", + "4e33cc0d26d44c2394c8d2", + "5430c091f416778afc3f3e", + "55f3bd5a345801aa67f91c", + "18bd8096de042467441c8c", + "1dfe68dd4d69d0d5368782", + "a69b0e544c08336c9606b", + "405224a222d42397ca18d2", + "5ca40898d5d325e557e04e", + "73e9dbd2873c27040a215d", + "56efa25eac0d5f675af6b6", + "460f5f98b19a4d353358fb", + "28593d93a1a2159e16cc13", + "1eae59f579b122f18b84d1", + "7f29a05b16052f06eff50a", + "2ac52045b3b592dfbeeaaa", + "6003c83a8ae5ae42a0956a", + "3af2323baa99fc6ef534e0", + "b3a488e23273b8e74aa2e", + "dde95ff1403621e1e9c39", + "8b93e9e7ea54df6ea61e0", + "382238b03129ae3a8cb2e2", + "7be85a588e4f01b973f9a4", + "3428c448a20f463714e16e", + "46c829e7e1980bc26c13f9", + "20573b178651610a410e89", + "16c1a9b3bcba979d2fb250", + "46bc67034da17d5b7c72cf", + "abe7e5169767e92b8517c", + "10a7cb0c646bfbfaf6b1db", + "3e27d166777ab6af4a4b75", + "560bc3397e1eecda48e8d6", + "153d46a7ad0d4c7b81a83d", + "7b625b197eb76a08b19ecf", + "58ab9a24dbad2ee2c0942", + "6b463071583d5d51119c18", + "58d985a1111ffbdece42a", + "772853e9593804a23d0c9f", + "3566ae3cffa53b48308a5c", + "3253a13971cf24cc306f4e", + "161741a6fabf2be3cb74a", + "72492bafc7adaedde393c7", + "4d17bed73f2032142b03a3", + "43ad0b393a7c2a4d667efc", + "5bdacc4f0e9a9f3c5eb7f", + "3fc330d82c00c3c98129ad", + "2287f22a43e09d12b5fed1", + "113203b24e05e4ff03bfc7", + "386903ad1ff043a2a203ff", + "6efc437814b1b1a8db77d5", + "60d1cb028fdf2f7506480f", + "5c08c8490ead830327cfc3", + "56d1b28a25e58905b948d1", + "6473a7fe7461369e02b551", + "43240f690e895ee2ce6199", + "217e1d11ab05e37175e942", + "115af287df30e3b9382159", + "3d01c0ebec513aebdf049d", + "3b607643718a1436cbf93f", + "392447173660d27311fc56", + "7fcabd5ff8d8321877d09d", + "773e49f5dd28ab9abcc4f3", + "333e4709f384c49fba280e", + "1a5a69890d5f080ad27aee", + "142700479fca005e365a5", + "16c859dc1504abc8bebb3e", + "8e1dc29eaa3429a93416f", + "3d2c4d19f97ec14b7f9a20", + "b80a7edd7c5745e63c50d", + "7eacc570a117e3d2c4ad3b", + "5a4b0bdbb9a3eba57ecafc", + "2bbb60823308802716b002", + "60de98af5b2e9794ccddda", + "43f106dd9b706c7cbad455", + "247aa73439f114a2bae1f5", + "404518992cad409d30e138", + "483592c4cf34d97823b087", + "303e55cf5d940fa1eb0863", + "27cf1a1e36d6b6fbf673f1", + "753e3ffd723c55ffaa57eb", + "527df835ccce3d0d8dc6be", + "501c73bb8897e8a9b644da", + "2c748923f66e9b836e2956", + "252a9565fc2ed88c83afe5", + "53ee027a60ac6b8703b4c4", + "11e3b65e520ccb94e0f28b", + "1d82fef6b5daac184a21bb", + "34f1c6d5946b4f8e9c34f2", + "78c36b7a1a1ac86080796c", + "3c2561b4603673cde220ff", + "347e522bb35549d788adad", + "c5eb765e74f7ea6040509", + "6b91d4c08bfb155d85a09d", + "1d345a329131e03407a9ae", + "7656e2bcd13769bc7d3690", + "18af2f7c66ebae2215b225", + "5c0b858603efe861d8e554", + "3a948a48ee72242647aeee", + "5eb549dbd9b640a1018c4c", + "39395b9f947ccce230cc1d", + "2983f80020a9f6532ba834", + "599c6bd84b32b97e000cad", + "494a8aca14d077b143ca10", + "5514a9f97c736ef89e2558", + "22a2f494120b7469421488", + "6bbfc916f60c65ff6069ae", + "988dfd270fa06d78d9fba", + "65e3000fa520e5bd8bfdc3", + "d79412155f3d978866277", + "540f6a5d04324cc6ed1398", + "5193e0be567990b2818200", + "5527257327c4eade309a67", + "6a6ceb53a9e08bce60e22f", + "3bc0b4b12c4e0d37097319", + "6446d75a31a4956c235943", + "70089a05ca7765b8ef62a5", + "78050a04d755b7008433fa", + "4cf40ea87be0baab3f0a23", + "421f5a540df5b7ba309bc8", + "22aca8e5833c97719ebb51", + "595eaf076defb81f21236", + "324340f1f7ccc9eff05524", + "490df281db25788739ca0c", + "7cdb727ae2bfeeed50af45", + "8fdbca74c18894d421e52", + "266efd2e0daff29e309d38", + "2d3baa252f4d982bd2ad11", + "26246e8fdf408dac8fd2a5", + "4dae59d140c542483e12a9", + "7e37627adf10efb14adf13", + "7059a8ae14b27b87ae7942", + "5d0b6fe03f574db311d01d", + "4450b05b160d8c53288cd5", + "5628eeca86bc4f505da4a8", + "59d6c2db6f995cfebbccc9", + "32c247d46291051243da8b", + "29ecceda91e2de99bded7a", + "697bd2294052d067eed5b", + "35d846be55b3952e278ab9", + "3846b043ea9479616ae948", + "460dae8d89d7708b43a1c7", + "6ecd91e762474ea500bb02", + "78386c3f2bea1d92b0136f", + "5d36dd2a4f038c91a8e525", + "2567685d25fd668a9a024e", + "484fed0412b66b4ad6689b", + "11e987960e92f0cfe9e7d", + "48457eaf5bfbcca641689", + "5e89ffa159d58051edf13c", + "ad8ecaa59795b2101aeb", + "4cd6b5c75a375bce549db5", + "17a8f2f3a036b54c467b7b", + "456d747923e7fcbd260fae", + "38b2a18fa105ae1a1e82c8", + "36b718d293f968b4388def", + "6d15e33dfd91b0adf65ea8", + "6a47915604a062b94c626c", + "63f2b709d7c6ba1ce60255", + "73da067d52334a718631ff", + "68c11de19f57751aa11e9b", + "1b50ac3c3f5269c1d7aa40", + "51f56cb5201bdd22f49e70", + "245ff16a71eb8c45257fd0", + "7dcfee63c4d594e4583601", + "604b2e853911ce83225aba", + "5bb6095d45a0253a5e3e2d", + "14b7709b903167ca33c0bd", + "6e6871265fe9883143d121", + "453649c203cf983e439d84", + "5819cdbf42afd2334f96", + "3450478bbaf1db9aae9e0e", + "35a56ed2078e145e9b5d42", + "15e468fec0387d9dcde2e9", + "1f098e306099d97f37bcee", + "108be849403d8b9e0adadd", + "432bf33542ea8f8c0e1cab", + "1fe772e91ad75a2d2792c4", + "2aaf602c5ad427702561f0", + "66c37766a09f2454161188", + "7c91adf751ba7b800072a4", + "587965194057ffad1ed72d", + "6b189bed3e1ee805a7089f", + "656e0aaff42e8f100df7e1", + "50d8060a4c81ac0d9dcc9a", + "3b142ae3f666b5a458fd6", + "11216382d02fa8a680f2c", + "640821dda0f544b159e25f", + "60ad8426c5228781a660d2", + "50b259ce6ef7786ad19380", + "617907260cf1e3612508c0", + "2020839307f0a0b2a66465", + "6c9aa8a230f91d4e6f84c2", + "479f0a9b95b8f0e630df10", + "74e8524ea4276a1585abc9", + "1832f7608c30377f8a27c1", + "468227ba06af62fa70d6b", + "46ae03b83630be869f3f67", + "1c429a8aad032b85e815c6", + "784a6ea72c75433fa2c1c0", + "521255c27009b10aeef14", + "6de250d6d96fba0a4a2df6", + "1a38abc6055dcfc6f54cd3", + "459fc4d70a1a8040309b48", + "5206d5cc4cf74b102b511e", + "1621052353e1bb38663f44", + "6869e474162fccd5e6ce8a", + "265a6fe3ade48b79bb704f", + "1683c065332572cac40e7f", + "40fe888eb50954f82f8f41", + "5ccb3321bf79805e3743ec", + "6904f88af6eea4b3f91bbf", + "a70e6c0e6da7b5bd943d0", + "7b7c35dbf0dd6b94d050c5", + "4ee9fe013ba8fc6ac8d470", + "1825a2f6c03df8e89a424f", + "6495ff035413be2b53c45f", + "745f8230228fe0e913a537", + "57ca180b4c6f8c3a63ae46", + "5963fe850d852bb19cdfe3", + "430a7ef273c75f6860a9e2", + "28c8b8ba9341ac37c38695", + "88d1f466f33239ebbee3e", + "7bfb517a9a7064f7f0b9cf", + "222ad5a5eecaf564928d05", + "31f4e6b45c1cedb6d4c94", + "9d0d5139d46e4d9db3662", + "46ea372cc256b25d8bedb8", + "1177a186084a0188e6b25c", + "79973f898e87ee6433e53e", + "17f90d7760ace90b4281fa", + "4d06acabc42f8f6c6561a2", + "297ac6d1d91b19c8ceb3ad", + "76930d75187c32e1c0855c", + "ef9f73cc5ae815a32ca63", + "3ca5432d73f30360d5e251", + "2eb29dd03203d9dedca2ed", + "3f719d970328ab86444133", + "671a35180c429ed6cd73d6", + "1a5a3601f9e5c757413d21", + "1207f0afa9b17ee1e3a14c", + "64c773513b07ac7be226c5", + "645491f7754448588100c4", + "6803ba4d96f3cea5b5b619", + "3e8f3fee79b0aa7d3158c9", + "7c4c5a07ab45db64032f8c", + "471e19dff79f0bf8dd75e4", + "736e4111350ab36a2be4ca", + "70eda2a92c3f3d551052fc", + "4be7ae42a1b71df0fdbed2", + "38e1136120c0a50e7c1942", + "34de10a25d48bbec6bc310", + "45fae251151688f6948ec3", + "a5803d95905530efe4cbc", + "29c81a2bbc75ee65e40fbe", + "5d0e736ad9b0e048c53cb9", + "62a6ac9d0c5e4b3890d61a", + "16587b1213183c74388d6a", + "30455197024dac28f22ad9", + "5c96c4bf9c30f05dfa52bf", + "2e14fbc2ca9b056ee6a0e6", + "544e247e73028cc23b1f51", + "7569e0846a7c92c5b07e91", + "2e37e64613e6e49f75ff6b", + "75393667821938c0e5a628", + "2db4889991fd96d5a3dbfa", + "6b628f924b031ff396258b", + "5c721c1e9f943f1e44c526", + "4845e19f6384ed5724d8ce", + "451cf4e4a6ce149cfc4095", + "69cf5ded5037b0fc848b28", + "2144bb26c3488be851e3b2", + "2582d22d55dfd72b2d70bf", + "67fe64c68be6372b30260", + "b5ea9188a76cbd4490c2c", + "2f9195fa1721a36e6f5198", + "371b6d93bf32954a1ed005", + "2d248bd8de364598100d1", + "3476974a3a56c244bcd4ac", + "7d10d41f081cc53194454d", + "9ae11d1f0b2cb73496a44", + "3c11b4ca34c3237b362a26", + "3b62b01334bf25d1f5d560", + "4a9dee0a96c91e7cd6d7ca", + "2d8ba9bb83d8b7dc77cc32", + "394242cd2ce4d5c927b1f7", + "13ef893fe161bb05038778", + "210aaed4cc7b55edc4255b", + "72bad07fa5d3ca19811efa", + "1856ece5542adaa42b18cf", + "2f775dce855cb22a4ce4b4", + "1b3d8a50e5425c7a4550f6", + "3fd38eb64df431878b817e", + "1f372d16a7c783f301d859", + "2e99bf2a9cfd14eb01e4dc", + "739d86f4db437bd59681d0", + "91782b2d8bf1ec8b6e4db", + "13089f86ddae7614e1f733", + "4374fb07e1eb1efc714a7f", + "34026c0467a5bb1302960d", + "1316737cef6e8d73f98c46", + "308b1811fe8c7d6801df6e", + "3b6333c6dc16d5f4351c47", + "30151eaad7aef0e79d5e07", + "6d5ce69503f658697314d0", + "13022f601d429947abd201", + "278331e342f211746f0d9f", + "44fd7c4168c2a61413dbd2", + "77747c8e4550378570ec0d", + "31934713e4ff1d0d7cc583", + "5ca455ab52339850752f94", + "cc47e7e925da6c91fe510", + "18932d3a50056ecbd4c0", + "594820c775fd57d86cf9af", + "4ad8d4214e4fe01b143d8", + "179c67b2886cbf8a80171f", + "60e1157dceceaecc3a16c9", + "507a197204651599300f85", + "1da6208947854d10119a62", + "2fd395d2076e94e7f79f79", + "3326fb026bfe153a5a80e5", + "214b26c5cc4d2d1d455254", + "2a5beeac5cc34b9b70fc5c", + "73037907fb5b7e20bf7973", + "622155e1a7c16eb9e6f098", + "47eef469d5e96dff3b60f7", + "31b42ccc858ccceae34d5", + "68c711e371efbf9b278db8", + "71e107fc4c98b40c6f7b53", + "2a2840d0a8db4a22fdfb53", + "557e56b5a5dcf30ae5f48", + "5451512089afcff74e1bd9", + "6a44a264bb1144d86619f3", + "72316f1be6172c06994a4d", + "d5835b5723a9063a2dd80", + "232ce65586f95692d89383", + "2a8c9eedadb6f6d58c06cf", + "f5eef843bd404a6869b17", + "720851fb976798365a6829", + "6e8b7f0e9607e44c1f9f65", + "3860366ed3637eead94b8d", + "30d33e090854573dfd98f5", + "682291bfd680e2cd8f9d70", + "7c1fdd60de643e750fa1d", + "774b9d1f08bb74ab682979", + "7b5f04e933b2e4204cdc65", + "2c36a4d87847724f9fdecf", + "2c941d4c1c7d68ef593ae6", + "4576a87293566d06f5b643", + "86148c3559c855d7a4785", + "2d0a5221661bafe1bae3a0", + "4eabe0db8ac5d733acae29", + "1dff7b3a25d6efec89d4f1", + "93ecdd9b52d588b62ae9d", + "4a5c54b88c3afab5d73bb4", + "50873f081856faa7b0c6c0", + "7a4c62248fb05a7ec5f894", + "6297ed8d827bde2f27c592", + "4f88d842683a24f7a78b4e", + "6543f2ea86c39aa319b565", + "1711e7c4ddf7dd725f454a", + "6e925cc1e63747fc8301d9", + "428c02c3c8bb1613aad2fd", + "1b12fc1c7d3ee5cd24b30d", + "38618fda51c023d44b41df", + "75ecb6eacac31eec1c8d24", + "363495385d4023abd7fffb", + "52a170878e73d2b9a73398", + "40afd831d872bbb5ba2dbe", + "6a2bde70b440f36a3a69b8", + "6cdde5dc50cfba13ab15cc", + "6102d4b92b578db1756028", + "1d72e71f6a57243468bc42", + "4f100cd2b63ef0cdac7165", + "56441a020eb196f9ab47f5", + "520d75e4874b90e95d0ac6", + "4ad5b5ec9142810d730c91", + "6369f366be6b5ec99ddddf", + "4ae3a5f46681ba13e649ed", + "33e094a7802d99ab1d9620", + "58ca4d190a0f756173e746", + "4afa034c14d96f077cc41e", + "3277a60ca85c986d50dee2", + "61df6c089b8a0a75da0288", + "3a9ec75af3c8e86b8c1b73", + "7ca8eb46f6df31902607b1", + "7a283d5e2ed98485e2d260", + "78ab001943d18ada1f6d03", + "56f539741375576aac816a", + "75fa74ccac539d6f2e079d", + "7108a03a28803eb91e8a0a", + "3756665d23e5dc56d35905", + "da96dc29f77c98efd9a65", + "54ec1fbecc620b2a62de33", + "2e564f6ba5f6f74e33f2dd", + "86aa65ac1949dd8af6918", + "605ccf0922a0c35f768933", + "4348b708829c7eddd56237", + "19d3eafc75447dbc2ce4d", + "764156f5d90616c8c45669", + "51e2ff830fcf99b4147ec", + "2d30342ea20393b89b038b", + "6745627963b760ee39ad1a", + "76c344db7c98c1b1fa25d1", + "5b872486f12a68a939069d", + "274cbe37d4fe65732936f", + "27b48290f4bc222f54681d", + "1f7e1880120c76703199fa", + "2bf0a5cc2a5150523d2e64", + "2d3b2e3d52eac5c09743f7", + "46b7638024bbab6f336734", + "71f7ff7f6245492bf4ba4d", + "6ac96f98fa78ffb692afd9", + "1c63d031374620336f8c7a", + "5eb0e751f365585e4f3fd3", + "24716274d6f1761a2e503e", + "3b663e3e9013cab9326fc5", + "231a1fa6a52f8377b2ca86", + "464063c0e0f5e5eae1bad1", + "4f588ef825e26e596e160c", + "4adc76f7cd88044421953e", + "228eebf60c055615805405", + "3d32a6b665f10a829cfff8", + "ce584760ca84047b25a4f", + "982362cb3f64fc2535f18", + "2cbb69d06f0ba3051ce433", + "2fb2d651d1a5fde2dc4d89", + "116822d6715118a8643140", + "52e4d0f780530e040b8198", + "4d84d472f48a1f27cda4fd", + "23675569b6f74cecec658", + "7273cb20026d3e5dfa9567", + "5e5c9c54f1f75bcc98d1bd", + "37150fd6c06a98e84f0fb9", + "1cae4d5a0b88eed0b2d97e", + "5e6c438c53b4bfbeab6a4c", + "7ec0ec060d3788349445a5", + "394ca6d6650a3a703c8f0", + "76a4bcdffe1207b9c84c3", + "413062fa329dcbe3b8887d", + "137786296b1e5f466871bf", + "1bff1788b61c434292f278", + "67ae16da8f876a2c8dc80f", + "4f0b0a9e8338cbca398b3f", + "7fe713df2e65b878c1edc6", + "46dbd89f4ae0d06c0ab8e0", + "3ad2c2000ee1db409ffcab", + "235057c5ef06d64b0093a1", + "2b1199cb9ff7848ec581", + "16a7968fcf87b51aa207b", + "7593ab2f13aa524b76e104", + "569b68c3d77231282d1705", + "54f01285acb2da9689a386", + "7c50148337071a44808f27", + "157e5726ec48e98ea5652c", + "a0b14921f2ca115669309", + "540974d1b3361c5ccd3a2", + "30927374f464c892c53b50", + "5c0de6f6c164f44c52de84", + "25f3d9fd234440b97c9821", + "659ccea55ad34dab51a321", + "308d7af9cf09073e61779f", + "48dd5aa0d80d3fd4d31225", + "18d28f7c13bdb1a27fc315", + "37c639bab06813135e6962", + "716be1338eb9fa3160de8a", + "306cc735643548c81d480", + "15dc7895737fd27e2fc2d8", + "ff910ecf2ce1ed443b3a7", + "26e45399ef9d09b479c0d5", + "5a3548ae1dc271964cafb9", + "1e0b5aa4ebf1898b7232a8", + "65b1a43ebc40ff17757bfe", + "35ab264ca762acbf67e1de", + "67fe63e894b36bad057249", + "901282766f87bc24e50af", + "3f8ccc4c495c412c1876e1", + "2c958c952c5c886c2a60ad", + "21a95826890e5cccb8a83e", + "190017f50befaddece16d2", + "64f3d838badcddd9bfdd0e", + "7a7cdf214176b6d3191883", + "30436781bd712f316b4895", + "f5d2bac49777fc8f10242", + "66de0cd9d504d0c8a10caa", + "11ff8e8d5e956398c99ca4", + "2d83b4eaa1c8f768e56c30", + "58689766e836a562c78c53", + "1644cc3e7fe80220ef2f70", + "69a00aca76ae6e660be7bb", + "68e1a6376fdb4eb7b4b0e6", + "5c37d517c640ac7f62a532", + "3aa36ece405e3ccd9341ca", + "345343979af3beadfaced5", + "63ca1ec0700483b8f859e5", + "14b8d711e9732dc1d81b85", + "5d1cdedac3c1f047923b22", + "1f88577ebb6a87d8478dfc", + "3cf63e3a65a7e509ca6dd4", + "64e35a2939773b306ebb74", + "4e5afb2e233daef8a9bbcb", + "5dce9f322e405cdd3dc195", + "49fee8b58237dc40ba3c5b", + "125c7d70d2b6d99ae885da", + "7f821b6d896942293448e9", + "44b0628f84b11c5e71888", + "4bc252b0fa653478344f1f", + "31afe414b9e841f105214d", + "46bc16d9041c2bda07b158", + "34ca1ca17d4004b63727d1", + "1adfa664cf45ca975af0f8", + "55b727631edd20582945d2", + "6649997ef28c919c6cae0f", + "6332e8b1655b1a7193eb45", + "7b8a17b08fccb33f4b7d6f", + "46c01f4170feea6c601e12", + "68d895a65569cf3ef3e3ea", + "782fa87576f745d6c5a644", + "3561d1a2752f1d17dd5823", + "1c1f24204ec4b044c10ff5", + "4ef1c6a1bd63bb6b6207b1", + "33fee942f43e9b7d2118f", + "1cbb8749de080f5bb23b75", + "4680ebb5e7e7fa1e676838", + "2cfe955ebd8c7e4615715c", + "93d0f45c8e78eed19b2b4", + "5411d9720f633bf7a356ea", + "7ae4ce9746d1a251afde2", + "6b6195f4939abc517ea1fa", + "622e4bcd237f601b3f864e", + "552dab94d8fab803e3abe6", + "5fea5590381b705c4ba54c", + "47a6912faf0eba695a3f82", + "62d4635d0bbd6bf8fab17b", + "488702c5b90021b8b24933", + "b44a774aaac3d4d335389", + "7c2eeaa3b5ac7ca26ee5f2", + "4a79a4d35e92cbac8fe0c0", + "145ecffc8b532b7855ca8a", + "409705e5654888d8af2f47", + "4f5cb9e29c3567f8c1b22b", + "2ad535a50fda15e1835526", + "4d55039bf17366425f055a", + "504e8f5ee0e51320af92dc", + "ae1614cb7437dc6311ee9", + "3d433adb4bcd914fcfc4", + "633dad9eec0d451652bf40", + "15bc81dd36a0393963bb64", + "720d9e52c4aea85ae24480", + "16f5569ecf073acc30831d", + "50a70d2086b5ca78a90368", + "7e688d1cbe7e0a84a0f408", + "1f9e8bffcac3e1471f7cd6", + "78ec94c22ee912eded5499", + "336a41277b427813eaa191", + "1705c133c7ba24a2b5c528", + "7b7e71610f1589da383c31", + "58137399c99866772aed9a", + "282774a1f4bcb14e6723f9", + "7b85e0b99eff408f2aa978", + "2a5043ae183d338b7ebd55", + "af99b9d024438cfe9df66", + "d4a270719a348af6d6c29", + "47262fa06b9c5ac8138f4f", + "50c65d8772a3d5db269535", + "20b1838f00aa00d07f70fc", + "ca30526530b6f6f0c8fca", + "158e9251ef94651015ecc3", + "636f015a0c62753b283d5e", + "4573a56ada0a29d31dd6b4", + "367efb55edcaadbb5e4f2b", + "3eb189e2bfcbe180703cfd", + "692adfabb87ce969422961", + "434a5edb31a9c3c6a0243e", + "77664e53908d00007d1205", + "4b11585991700c233f6773", + "207ff6a0da7f13b316c4b0", + "328a9932d6b08a41a1df0e", + "2f927b360b2b43bff822dc", + "257564a39a648e17d015e9", + "73e92ea015629e3728aee0", + "4585b77fea18a0113ff609", + "101d83882a81d0147b4342", + "3addce3c43218484acf509", + "9f0c9a93eecf4de349628", + "465f3b1e25cde0e446d90d", + "4ceae8c6ea35dc274647ed", + "63137369b8d47b6c9c43df", + "438f5c0f163a4dfa04e5ce", + "313d62eb5f1104de5421a", + "9f20b6fedc099ec575691", + "24086a392ab75e649d3cc1", + "7aa96a9fbe718c006a48f8", + "8000000000000000080000", + "57f0f7ecb2d7dad43748ee", + "2a640efe463008db4ed634", + "45769a307f5593bbf72056", + "3abbf8af06f889daf59c4d", + "6d16d10feb1728044f2dc3", + "5bf1d1c71be0c49ad75d9a", + "16bed27a9c005817ccf111", + "4d7797e0b2f77a7ffee785", + "3845bd22f959dda9197376", + "1857324131e535b1b2458f", + "6335fb7682400180e10d15", + "50226b4aa22a0465ceea0c", + "44dd70b9323f17568e4ba3", + "217bd444ac8e9808b3ae5a", + "6c9c81ea487986867245b8", + "3827b84269040363e5e02d", + "64520e4823f48c1f48749a", + "58fc1b58696f8c22cfe344", + "41558cae58d4f9a9001b87", + "38910d873da8dfd237e8f0", + "5eb76c6301d8a849a1903f", + "3b6b43619a3730d5995ae4", + "5f2bc99aad2f27cdee05f4", + "385f7f48a7be6b46d108ef", + "37d50d7838efaf03049cd7", + "665bc65420c0b0a151c97e", + "3d9abe3ec82d9602d9dd6b", + "634d2540fd670a82f219a5", + "616dbeafd6aa623c1a7d7e", + "29702fc1f57fddc3369967", + "25920b5c96127e9d8ab05e", + "3a82369bb1a4da519bbd70", + "7f216769148f0e997c7805", + "31d809b078cdefaaf45266", + "7a6ffa939b86786a779a44", + "68e8a818d524954278bbf6", + "181ee17c34ab8aea52c900", + "7f42b66317d26c3f938805", + "6f37e3a85128974cdfaa69", + "45813314ca1d165bcf242c", + "64add9cabf8efdd5f7b57b", + "46a91d898168488fd5ac51", + "669f4c5ec3934953500b78", + "1e378fb7157cdaa6fc3a50", + "39cdc5e6675ab081ffe60b", + "1cfd8f0d12bcce21589c11", + "6ac77b7cb23565518aa2d4", + "4628eb872cffa1868b96ee", + "23eabb9cc5f4086c74bc31", + "445381f98a1f5669880827", + "3f603c7b410b4c2db2c8e2", + "464550e0adf269403f3e22", + "3286bf159405584d85567c", + "356497a9675898bccf4e79", + "f26a2dc235ace7b34f4b6", + "2e03d3c0794703b9605de0", + "30a18088f5b2af396bbfd9", + "681750fd18618072db2068", + "69fecb55ba6da700789d7c", + "2294095a6b77aaa416cbd7", + "ab8e1dd4d27b02d09fe48", + "7fe887d8c5fb53af79cbd6", + "1ead89a48b89a75ebaa7d8", + "10d0aa100248920b9cab77", + "4aad58987821ba8f33d96e", + "5c616b0d1a7bc591e70e46", + "24b22771f303ef742b8ce1", + "3eda92314bf1d09cb5b08", + "692eeb4ff69b42372517d7", + "494807a247f7ffab73a644", + "23564d97f447b0091e74ce", + "2b81c6e67e55aeb6e93a", + "4669a41d4e444c1284d024", + "61036fcac29b84e5ca02ad", + "2625096534f2cf10d83a26", + "30cb89652c8629b5e0dcc3", + "606e14eaa7d60eb7ea925a", + "17715e6c96cbe096c4f9c2", + "42a81f5e10b5435180e643", + "6d849a39e47370e473a913", + "6116bef6a79fb2fc15f0e2", + "31e8a39712fb3a7a11f909", + "7511506751237c1959933c", + "1e47a4330f0bce93db13fd", + "97342eefdbc78b9689120", + "b1fe15d9ac88348f41a87", + "296a247b4b36d5c2a1884f", + "aef2488954588af921ab8", + "351db0dca5d74808f36d33", + "25df9f831698604e15991c", + "761e42e1c908c2f09e096a", + "5e73615c65ae9e74eb1ef3", + "4354f51efc9392bcd6e51d", + "3f7d2ee6cb32c6bbeee194", + "394faf6069c716fcf8a76c", + "51d8b3e6fa0afa106abc40", + "5aaabbd40fa78dd417edf5", + "32d68fc9b8a9c17b315382", + "6f24ffc802a08273be511b", + "452816c1b54aa2bfddcc17", + "142c59f31fc82fb58a7dd5", + "7233f4136f3ace41bedb12", + "2c18c59d95a21961c42f21", + "7eb8dfe838ec5ef9d3ee21", + "19915afea85d27cf8df109", + "4e1162d634d0d5811a2441", + "43e36b6d5a937387b49f6c", + "295932427e10aface718fb", + "5a2c8ca58cb488822e9f49", + "622b540293b1275c5a9446", + "753f0795048443573283b2", + "3c2dca32abbdc029f4a212", + "3fac097802d8f5fb376d58", + "668b9e16f3948f582a5b94", + "1a08e273719d3411178252", + "f4af5a6143d8f44e48afc", + "54ad7fa69dfd0b4c19f7ed", + "65cf5014ab215afd17cef7", + "4c3c570182916f32a6f96c", + "2e8edc0b6dfcfb2392ce87", + "3950591be73642bfa23264", + "559752d946b02da4c2f657", + "554f5cfd133bac2188241d", + "3c1fd5d9a6223b2ce7b02a", + "34c50fc58872b7325366", + "3f8cb5eb229acba822b48d", + "2aead0dac004faa8ab67e4", + "144a6c20d0a8d5dce2b12b", + "5efbbe073364ace07f02c7", + "73862de61086c1fd5e0678", + "78aded63d2f85ac948c449", + "51603bcc8667777e664f9d", + "724f8bcd40bfc9f1ca0c68", + "5169af1cd74986160450d0", + "5b6b96beb19fb0dbada937", + "4b3a8d22fdb2c83abba9b9", + "3ee5a2cc90e335867f0ce8", + "33567e972c90754c86a5ff", + "1c07c875b3a9cdedf7611d", + "3b55da90ad9a162be1756", + "339dd42a42d94342bf8399", + "67a3f20bb5e980364816b9", + "4b6ed31d0715952774511", + "346f2a2b086e1b35095d7e", + "1c614cf9a9d87d69154c21", + "5e263af53ea065e044720d", + "681a88fafe4e6f0620910", + "1418facce22bf24a5e6a51", + "786571b85b2768309c8ed2", + "4d0e82bdf34ff4cb3a603e", + "7c2e242ec2b95580a9b3bf", + "54fc920cc0125e53a92499", + "5696a96208101739ec4ba0", + "636b15a893c301ff23f5f5", + "4956721f6a2ced1fc736fe", + "518711fe03b241cfb95160", + "2e12097225e5783b545083", + "7340d7daed67bcc5cd4391", + "c075fe6224a62c1010fb8", + "4bee7e482b290b1d3869be", + "7e8fbf173741aea1b95c93", + "5a1fe9fffdaa20f4ab7eae", + "58d7de0f8254a81b5d0f5a", + "38793daa7aa086d5e70798", + "6157a651f2640a73f1f90", + "7a6d5b1013830761b58026", + "46734211b970f8a6448a60", + "31b9dd76b9ed5f88dd4609", + "46c6313b3914ecd376b959", + "3e4e77e268fb6e7602e96c", + "74d39a89d87bdaa449438c", + "7684536a92d49a5af59f1a", + "71215d6fd5e662d930a424", + "249b7a4d080be0f548cabd", + "1bea5758655f1400515db4", + "7f45c48d28fd31ceeb3fd7", + "1812bd60b720f8920fe80d", + "27244290f774a00786ca95", + "5566a844e8b1c572f69612", + "2d678e77df571d7ac4859d", + "e243f28e043030ee3a43f", + "36a3336f56c91232544e8c", + "179d4134709978c75bf6d2", + "20ea7b335b7621642b29a6", + "78c437adc3b6ce946cdd", + "57dbda5c8b230a87030357", + "4dcc6ee20983f0020ad69", + "5725842b7246179896a39d", + "6b1cbac9279eaab9b503c4", + "1bc4e87c1100a2d26aeff3", + "2d70f946f2915679b314e6", + "793fd256b009d961487499", + "ee9d6b69f13ec8f385e6f", + "4b4c7f0a822537ff62cdcd", + "48b920d23514d06befaf52", + "2df30214a49a31c21380ef", + "4c4424602626193266d943", + "2d5bb2b553d4ed5bc0795d", + "681fcdfe60f23e3be083f6", + "4f9634be1ae125361bd4c2", + "1ac96b01993da8677b2fd7", + "4cd15a66ba5a2f18c8823c", + "3828df7e9ab6753fb83dc1", + "2071c913edfd4fd6daa6bc", + "669e7a28f7a7c30460a80a", + "3b22ed42f28069f29c280b", + "5ca51c82df4def8b1588cf", + "7b2ef1bbf74c4989ed5ddc", + "40ebb7bac65bd815945e49", + "4a469bacdcaf5434109262", + "1a14d5b10cbcbb9ad3216", + "65fb4589487aa5a16bd767", + "283508a2ed137e839b2207", + "7047889925ed18a885358a", + "9d8d18a72607c311d6f76", + "6a1d554c48496d8d543eac", + "594a3b6273b1ed2b542eaa", + "67cb80a136db30b9d60d6f", + "5106bba99e6268d7bef3e4", + "6fff35974d5f0b86faa46a", + "5f7482c17a568566c785c9", + "78ba33e419cbc7f177437f", + "1f4b918e0e0d47c89aa2d8", + "50cfa48cfb994ab2b77aa3", + "1e4fdc54209c2229d7ffcb", + "4431184365a358de692057", + "7adeede80a05e40854e6e", + "9a39acfeb3a1b4c2bc79c", + "2d2a15867cf9361defac4f", + "3fdb99cce8884ed923271f", + "2d127e6ce6bd0f1872b1", + "1124cfa0e070cf6fe3c638", + "65b7b50446c767e6fa72fe", + "3f0d18b1efb7248950daeb", + "74fc1bfd19b3cbc9867bff", + "34f0f61d6d8d062b6b9d9b", + "260d6ba9444df4b85dfb92", + "4f75e255d88657b2ba4755", + "3c3f770d148b4692e25b59", + "1eb56fdccfc12b22db2048", + "3c81a9658bae42644c317a", + "783c78a9025283e7188a8b", + "7322c20a545b3845b54b34", + "52d104741cfa5fa49fa55e", + "6545cb112ea4be72bc80f7", + "5bcd4418d37c976110b37c", + "34d59de432c0dbb24ae55b", + "4759751a101953dd340d89", + "41e135572f9ce788481248", + "185033e62f44aa85a7799b", + "7047a4510b8c2107737ece", + "381012de4c9a82f9ef1d72", + "1167717f2d3d6238b3d21d", + "2dac9d433ff98cf24eae81", + "4f1c406e243fb2af67cd42", + "685afb7cdd699d5a8f020e", + "4c6a0f6de7e50ac450c0c3", + "59f0f5465ff1e16be9bfb2", + "594ae94ad86b9a719f54a7", + "9225712405a5bd9ade58d", + "3650c22d9c1072238cfcfe", + "36a92b305c21171dd5a616", + "5ba344fee845769c2c86d8", + "3ecd8205beb790946eaa8f", + "5f84ae1685459ae7e24bf2", + "62a01fb38e5c88098fbcc9", + "3c2f54ef99be42fe30d32d", + "215dcfa076749277897e0", + "36304be3f0777300703af", + "147b65e0e829ca30fd88c2", + "4e6a2eb425fbd18fb02cb2", + "2ddac7db8be22e88618b58", + "1c7831e5dec267ccb26741", + "2f3b362f4b742eb82f8a34", + "5505b22d0ddba48ae2020b", + "522afb743f67b3ca56b20", + "81dc886feeee4945edceb", + "77c4b593ec648025df03f6", + "4f0841f63a0c64aad5232e", + "6cd2d14ecc5fc7c2c1b52f", + "3827eb26c007235c46c676", + "484281d930b8ee32f366f0", + "25f7e1ac0d4153b6365c1c", + "2600c04d980b2307982b22", + "6b923e02dfb1da62f37204", + "287593985c21589f72c821", + "c8918a059fa77676f0587", + "76201f5e0110544f41d9be", + "770b83b55e13465063e5a", + "412ae12837a29724832877", + "5cd8f5f9eb6806f67db613", + "4eac7fa0d6b168c3bec4e3", + "5d2972b12e50e727a2721d", + "5517c01ca3bd4da9aef0ad", + "11ea8c21342ce42ebbf9ec", + "413f256a64feb56e242e90", + "29f3402339c3128a1e2c1", + "51eb860c87e1e5b70bb623", + "369c62fe5aafda2a550912", + "2674d42d16e97493518d2", + "6b105359a1a68d94862411", + "527e969f4f6eefe6289ece", + "7ef4c5361ca08ac1cb6216", + "3f3aeb0a1df198d9c95768", + "152dc9fc63d3c1eb6c335f", + "7754a6a5fe6be54c00f4c8", + "222ea07afe042cf765ce5f", + "1086eae159340e441fa0a4", + "6c03f094dfe48c9743be89", + "1fe069b8c57a9fbe5f6009", + "185254fa056de9af1a6bd2", + "3018be3223f82c7f0c9ebe", + "48a13c03c03191471f1164", + "3e94b32e50da81bb5afc03", + "4d08f00a99d95d0043cc4", + "4636e2935765905adcc41b", + "4bc9c371d07d4a025a739b", + "83bfa3efcf5b970ad41cd", + "18bc8168956ccd63ac68a1", + "366546b3844bf45b7527a5", + "363a65fc59f4a8184d3d78", + "5ef30e941639d08bff19c4", + "5d66f0d9dde7339dbcd24", + "33d5a814c00e980600811f", + "5ccbc128a5721a5dd853eb", + "298200a0909b55e97005f2", + "703a6cf857e651748dc09a", + "547264d2566596f18bbb5a", + "760b4f231686ca10ea6ea9", + "49a3641c16382337f3c777", + "33525d5afa91fda7d5fea5", + "4c028ddef259fa2c7d4868", + "575d4696bb0e4edef99446", + "6da26efc24e2d57c26c090", + "41e1bc8a63d042ba714c97", + "5f24e71937dd097c0e8678", + "70b9ea82f6a6c02939510c", + "738abcc274fbdc4ab5efd7", + "255358696f5e9ddbfa467c", + "6e9f47f009d809f84a56da", + "27c6ad85e824da21b1cf9d", + "46a78cc83c010019e8b2b", + "6b828169b3ba13bbcddb05", + "3f5c0a52d2b564cc250982", + "63069f756c8115e5fc4c52", + "55744f373c8b8520d62370", + "43c2ec8afca87567ee9294", + "6354a865e088a0488f2701", + "d165a455f92b5083e0627", + "7252d249ce8cd4fb010950", + "79790e81fd0d2b63f9d1b9", + "5e147628ce9e9a9493f495", + "37755ea728b820f0ab2bdf", + "184e317201ff0ac25eb6e6", + "178cb915d7350e37948956", + "5ab5c85d4bf835440ff962", + "1e2bd3f41ae5c299bb720f", + "722f9dc13384479d1c4455", + "2b514798a553e5bdcd8ec1", + "51890cd139740ee3c35339", + "75d3c5c33e5a2023adfd4a", + "15da282cec1859a9591ab9", + "7fdd8bd273e4a717226cc", + "3915d17a2935e69936525d", + "78acf4423afa2cfe1a6fc1", + "4f140e806dac75cc67fa3c", + "37c6007c4a0d223bec9e13", + "1ae82d51e4845bef8c5d14", + "65a0cb312051f321a95f5d", + "42aa10dc273607be680d72", + "3e26ac2b23b8b913845e11", + "30bed73f7a94de9252a38c", + "750f475708a1369e3fcc26", + "61ade8e7a0bcc40ee4c2a8", + "27b94ffb61590cd0bcd89f", + "3f1e6a84c6b836f245c178", + "239309f551f303d0037140", + "211dcdb529a6bab73ad8a6", + "7869636f37e63a4ffff7cd", + "150365cfcc4a012a673c13", + "2791e42c7f90ab8d4e7fbc", + "1501743c447af65014399b", + "2244b09bebeaafafb0c481", + "36c0bf9a937fe6ca772d0d", + "419e79b02e607a42e6e091", + "400f76e25d392f347d4911", + "5ba0eb3a703d0e42cf4094", + "2ccb45ece6ec9abb9396c7", + "44741cea6d95eb07e7f01d", + "2b3c80a17ef583b6205fd4", + "43fea0cf26a3e256438525", + "59a7f220e101601c1d1b21", + "24974593a8d59a89588659", + "14ee39af97cd5a57b0e17c", + "4807e0d9a38d358d8e14c5", + "64d8389dc8d1b8910fc0a", + "6fd170c2ab312a1f05d814", + "68c4a816c641b5b1090781", + "24e71c2d01e956269446cd", + "3bec30574a99903f587887", + "2b4b238bbabe3c70748eff", + "4f0024b5b5580d91de0338", + "646ce329dbe03b0b8312de", + "5ba2a8023e5bb50b06e03", + "19537a8ee281cd28d6388e", + "10aab6ed7d1b631aa4b45b", + "6810dd5945e01cd2c90841", + "6ac2b70efaf88fd42c4044", + "aa480c5cc76379e0cd2de", + "64532524c99ecb3c365a41", + "321e3fdbb0b890caadc570", + "54fb5f18b6d001ef7be401", + "364f70dfdbb439b78e5236", + "9dfe57d1a9a3265476d14", + "169665894aa2b356779b61", + "127c199cd032273073f003", + "fa33fcce55fe6a32e0915", + "264e4b26d39119bcdc0985", + "593c091517fff61973996a", + "77da1b5a2124b6c9e11847", + "32e5682bfa3fd95762512b", + "72f7dab0b2d2a35e62478a", + "4356ada1ada2921353892", + "aa2cbd696160321682a6c", + "7f8bc7233e2784039454db", + "22884c181cdc222cad8e5c", + "7203cc213679d179eabc35", + "78a4c0445f77f31209ed17", + "58b95d74eb4e654735bebc", + "6a7db7fb47d3a18b620d6", + "63942ffcaaae948e9056c4", + "a2e07f9d73c5e3effd370", + "6667dbaf666f92bd61da79", + "4597c1546c899a3656689", + "5fc3c4b7f7ad5deab829bf", + "61170002cc409ddc34946c", + "736d05572fd4ef85eca2b1", + "1a5853834033d093c63d55", + "bafe681e7e52073b86d32", + "1c9f86b8742e14b6caf79b", + "3886dff828cc76dd830466", + "3b98704f287b0ee4e659aa", + "581eb843dc9919f85a6644", + "697396e6df9539532709dc", + "63606d420b8e8397875647", + "43b23b71c3202b31d91018", + "79486109c44990eca52723", + "2102dede4011c5cfefb7eb", + "235809998758cf7e4acb1c", + "233860a2ed2d566e131431", + "305213c4b30a9e8be153ce", + "7507998b275e3c9bd4e10e", + "64f00973a0eb117b548182", + "1416e580fa8bcb421dc6ae", + "36735381ceff20a76e32eb", + "45f5960a9db06a62821bf0", + "8649a3995ad114bb4d72f", + "374a0e75bc76f0adac7af5", + "6565aab9eaab16f7430411", + "7dcf3e6b7d3d02033c946d", + "65c9be7a29bf45e5992a7e", + "638d0229863032ef249643", + "297ac1b2d19eb1e6e32d87", + "6f339aa4d977875b1f1f80", + "438e5a19094bce43b5b5ae", + "4d8b0cd0d3401fd04e351", + "1b5200adee3adf189b056e", + "1de1227159008ec9b59ac1", + "75266a81bf7f77865e6f", + "9377e0e5c8d0de1856f6c", + "2fd82a7276af1cf8b372ed", + "6dddda58fac4e8afe0c9e7", + "1d85b86a2f3f20e2832ec7", + "35accc5a1e3fb474285daa", + "3aaa2c73e60edc333c904d", + "740f62900b9523de37b6b0", + "7401d0da6ddc33225bec4e", + "3e985c35adacaa90f5715b", + "62c36a3627b9d2b3c18de1", + "7b71ed8d456ee35292c960", + "2648a635c5981b8daca07d", + "2c33c53227ef5693d69f36", + "1540f88099c93111d6c8cd", + "5d9383670de64bf15eb49b", + "2b23443976252ed21088d1", + "7fa540fb3906a29b513bed", + "2f88b1c87d7d02f6c2614d", + "1976a9fa25af6d21cad47a", + "444a50dba1a2bf390bea1e", + "11c773ac555182d789142c", + "3b929cf6fdabeb45375120", + "15bf0eb485af1135b0e453", + "126dab6c2bfc9b83475847", + "c06cc01bfe2a9b427102e", + "6a545ca829ed278f6ee7f4", + "23dfbd70bcc040f36d4c8d", + "378ef780c4d32c3f15b3c3", + "7b115c7c405c6e4356bac1", + "1a789636807476ba5bd789", + "35fa1fca985387fb7fcd19", + "21b466e3230d809af7aa6b", + "4d1a8b95ded29dc79fd401", + "59bc93698864451646a053", + "7d6f33ec4a123fa281cabb", + "168ebadbade1cbc44496d4", + "413278937e6487a988805d", + "55407685456c2cb8311d26", + "79d07c6a6298d34020dfe7", + "65ab167d8e02a8df26439e", + "7dfd6cbe22024260a179ef", + "28d6cf3e20845dc7283634", + "648ea8b083a9828f8af17f", + "2f64ac4f819f8343111866", + "17da7c01f870089371d6df", + "50f371336a648ade74999b", + "1de402b5c6118ec8861aad", + "48ede8d4a9a88f7613388e", + "5f70485b00138272e9a41b", + "65a1f7025bafea5088145c", + "68d439e82561e55cbf1eed", + "3d8509040aa8739f034dac", + "2dd21df4dbce295378bd06", + "111d6b945ff69be530cfca", + "c1fd8fe80d24243e7b5eb", + "42772160e3ea402851c9c6", + "49374e550d8b335cb151d2", + "71faf2ef0654e97e0c23fb", + "4328d17f00529ea0fead97", + "546ec9785ee72a2a72d886", + "5d50e00035655b4d4ddcb7", + "4b53718060040e8179d82", + "282a80b8de04941c547168", + "73673685484b4f3492976d", + "5db729c46c687ddd7690e6", + "2cad73640590abfa319b6a", + "21ba4c5acd17d59fca0ed6", + "186605e063004c7e4a9375", + "2f687a83227d2d20f3b227", + "30abf45ef025352e681192", + "6a76e3eb445dada83ceb12", + "7146b897c3d924725bd0cb", + "14b68001dbf2f798322812", + "54112eabbed42ad31637c5", + "467db4fe225847525ef33f", + "25032025485a4979b90394", + "bc149e667cbe5a17ed77d", + "ba357a389bca1484d7e54", + "34ddcae84938327a3cbc30", + "2e1709b850c77f2d508334", + "15db077682cfbf170ce259", + "280bf57e6ab95037683d33", + "14f23f2aade2de50fb350d", + "57d0cd94e03404b9cc57cb", + "3282cc1545c9e77ce08abd", + "567508a3d2a7b4fe3b395b", + "16d8ad198832545831c93f", + "7d88a8aadc667bc60fcb2e", + "65118f1b7c366a8bbffcb8", + "6766e290c73bba54bcc710", + "2aad9e8261535baeb20b71", + "4ba668ebddeaa069043875", + "3f98705d2cf6346bf00972", + "541a69af40655a83e366ca", + "215c7e9a1d796b37a56336", + "419d9a35dec3e5f421baef", + "163690a8fd51b113410cc0", + "1d165ccd9ac1e4efca4a32", + "1d78f3d7e887debfa04bf3", + "6b421c0667b336723fc0a1", + "2cc7417260782c0d2394d3", + "21887a11425a371d17db86", + "5be7c40d96f7c97153eaba", + "2e061928a5c3ad9bd6d9be", + "7b398d970ad745817bcb61", + "f7cdb22a187815c33c5e0", + "a4f6b861d9a460f5b65a6", + "68d4b88b77dfae0da7a5d", + "4e4199871aec7ec1f99895", + "68f5ab17da1cc5dda22c36", + "1901320882ec0093fcda5d", + "76dcede51c5087d374b20d", + "38c3b4008c9d0442e7b602", + "1edb6eab35de11d4922150", + "5c53790457f0f66baaae2f", + "664ad54353749f2ad36105", + "45638582a87d07b0339df2", + "18b021fe09fa8bdc44e567", + "2acc282877d9cac38e38c3", + "7bd177160999a650655c6e", + "6717c0177a36454aef446a", + "6334fc3ff70d17dd837781", + "499a1abb2a1381278175e6", + "14da57f8c43c94d5133d50", + "4a1381ccb93c34dc44cab", + "7cb4b7b324b314195807c8", + "59f2c50a64b0c2a3e77442", + "426b930b670412d271a091", + "38aafca45b266dbeef6fc5", + "35d63c19d36b85b5e96648", + "31204f9f1e25342bbe28db", + "560e1e8aafcab315236068", + "5b80c6e1a5c4dcb3166335", + "1d41ed28d87d24620da24", + "38271b1467ee062bfe15c1", + "2b7758dc0945a30687fabe", + "4fb33de912dd8d2f8b8081", + "4d6d3f3602597781bd2ea0", + "5b509a0106f1d06627c353", + "7ffd3daf76b1e818134f24", + "858c45884b129dd66817a", + "70c9c69419338ba44d6b8e", + "17c5a39deb46d102235506", + "2adb843a58d472c17edcb6", + "798b816a4dea5ab964c64a", + "68705a826f80224f09c337", + "b720b9f07a6b1f41654e1", + "44bf623ac807d4c96747f7", + "16eaf321bf41ee635d6d46", + "37107b083cae132372e4d4", + "31e9d0607a42f7e54a8c81", + "4d23f5ec809ab5057c2705", + "10a61010d82426d21109af", + "1ba28761d3577e14d38b38", + "c57749387141da5f8fd27", + "4afedaa595cb8c309d3fbf", + "3fd90efbd4f0a4e173f589", + "49b4801e9a2a64a27691d2", + "7255e6805e164cf9788cce", + "62ae26dfe2273af99c4830", + "7e185faaca849a7f135848", + "10cc6c74c4f9fcc9428f7f", + "152b3e507f8b7898991275", + "15a3be22e80e0f6f498608", + "54e5b2458bb84fd7d4433c", + "656c647508629462e9a821", + "4c60164f9602341914167c", + "2a17c7297a08a3839ca0e1", + "47efddee37fa0ef6a72a47", + "106fdb273227296116f40a", + "524a00dd634d2f57ac7c6e", + "1e6b9387cb8fb6494ace9", + "25d293607604db30df2e4e", + "2a07033e306623cf4e37d", + "178e61138a7396d55d224e", + "75aa7d0184dbe8ff376045", + "421e7c19466e0847ffaea1", + "732b807455afe5538cf678", + "1a756f67d7e3e663369a04", + "389f7a523536bc08e2c52e", + "3a0c64739838b20476e0bd", + "4346fce81f02878bbc28d6", + "2f63eb0fae8122aa717440", + "59308e5db85655d5ae0c4", + "26b549a59dc35ee5ea7b82", + "4d89a145aa9c4acc9cbc8c", + "71b31c9be0276caacd1146", + "718c4a4aea9ee0da236930", + "7222af7c6bff611029c53a", + "7f4b55a70795b9d26512fa", + "32a9d4d4f421cf83f9237a", + "53cf166384d9f967e4ee4a", + "4566810f52dbdc6e52d908", + "308ab3a2c4d7f4df4b6a31", + "48a0fd415822566b2ecfbd", + "242cca5b643a5f97a01a20", + "1c28b93f693054a06fb391", + "5a2cdb29cc6790b45d1f04", + "5e8a5f959be2a17534c9bb", + "3fc3e580d2ad754a34bc48", + "6bd645b33c041537bb5186", + "3019d2c9a4a70055fade00", + "142fa830b7ba88d08608e3", + "47226da695602ab6e77894", + "70044b2b283269e2d14166", + "46ef25878ebd3ab0b864d2", + "557bc3fd4a1a6866c5d19c", + "7b0ba619013363524f168a", + "48b438b41e1bc7e58e6ef2", + "39a95d47cf87d7d7d6bc8e", + "27c1b7b41af947101d694d", + "492683ece46681328f9912", + "3ff99310762f37d685ca95", + "4cfeaacecd47507ead712a", + "38a39ada5dac01b5c2adf0", + "dea3527d089eceb4c22e3", + "7b084b907f4fc0301dbd5", + "503f8d64438b7a99b8de08", + "1d9a776cbeec9f5dec9407", + "8a006b686db9c86eb0756", + "144303d93b170584849f6c", + "6b5617e9152db554d999bc", + "1b9850e5f0f8fec4d967b8", + "20fe6d6e332154329f831c", + "5cee3684d600afc7804db0", + "1dc0a99973375f6c4a4583", + "4476f33d15e77d3ea6c712", + "11f2c34fc87060adca2837", + "71af54a2496a076b559a6a", + "2ff21a8761b9bce5f34f74", + "78b5c76a3ee8c2ef071fa1", + "5738f30e5cb40b4ed83e60", + "59fdfd7775c9750e48d811", + "7b609aae44a59cf088c570", + "4a67b54dcc404423e6b631", + "8ea7f70a71ad46c0c260d", + "5ca4bcb81d4d03018b177", + "169566a480e42dcc8863ac", + "789addf402241ff646d77d", + "13b16e69e645c1703bf7c2", + "16f732c5fac8192629ddb6", + "7731327e4c6ae66c8e47a1", + "cb8a50376e8204b8b5ea9", + "18eecc5a940548e7c51e57", + "3ca90695aca0fd32b28871", + "728caa6061cb6ff29e6b21", + "3d66483aa6674adb6569c3", + "1208a98ea1dd68a01d3ec8", + "5186a4a6ce8351b40466bb", + "79c75783449d733d93b4a7", + "52f87910ef7e6dde1f16dc", + "57aede4ca861e5051b15ea", + "70f2550983dbddb8957b2d", + "720aa7a7bdeaa025a23a54", + "3e7db1002a9116a5e20032", + "25d1c185377c3cd8e704a2", + "794294f26a938e1caf3c0", + "522619b83283553c71de74", + "4dd985f2fef5c539fa6a96", + "442eb4a36ab0287728c1d2", + "2a2b13112979d27489208e", + "4d43f85ff03e3cd18ef302", + "71e916ff79204bdad49695", + "270dae1c5ccafaa07ae8ff", + "3a2f442f3b3a9a2af00b28", + "3834a1b7acb0f05d9e53ca", + "5ca6e41b81529e38a59f6d", + "3164747c95104338a78b5e", + "b66201b62ddf6d13c5534", + "3dd366ce71f1fed428c326", + "12413ef53ba7fc6fb5cd35", + "20f6e36fbf07174b587397", + "362261ed7c97591714ea9c", + "1ce2a05bccecd36df96b64", + "358d745e0bc4be1c3f4586", + "221bb5afe07669d916e136", + "624d49c04a48d42d76c466", + "a3cfbf8b779e15bf28c99", + "28eb082844c0ed277d2520", + "4c7d0db8193430b75f41f5", + "3c9ecb18a83b901f901704", + "735a03f218370f8bd85ee7", + "4db4f1a602cec485019670", + "70357dabf2c34c8309c723", + "ecef39a1ef4b4d1e8c6dd", + "2cfcb08879a9aecacf316e", + "1175d70c2c07855db37245", + "786d54b4d5ce74ddde20a8", + "ff53eda132c9a3cfecc65", + "728cea43531fbac95263a5", + "20601a054af9d51633fab1", + "127118c35aaf80dac2a57", + "1db83df0a168bac450e4f8", + "39c167fbee27f65e96cc7e", + "2b90f954efc9f58a07a363", + "63f5fe049f46d509d141d8", + "75ac7a48082d5afa148e7a", + "569bfe59efe21364bf57e7", + "475131d01f3e6dc3b169fe", + "716991a2a17f536244885f", + "150c29ddf5483fb74be06", + "65fe3a22c7d35ad3f875e7", + "1754f51aa79c3b0803bf00", + "a4d6bd96f61637d730c9c", + "460372cf36a22fb6b9641e", + "43dcb4450a256b9a0eb673", + "10fafca3d5f71faff8f1a", + "177f43e8d62e87c66b9da", + "420c1c0074adbe0616df4b", + "1e39f05dac576881e6c295", + "7234cde8ecc6673caf864a", + "661787ba011711628186b7", + "6473dbfbe4a3f63d08e3f2", + "62b2e70d411eb11bf0a695", + "2e684b7951a2526d838fd7", + "5b4aec35da23a27808974", + "51e267e9a5a7684ebfd343", + "36b36922114363ceb85a26", + "5687a42dcd55b43227f657", + "3d28e1c12f9c60e500dce7", + "6bc6acd592c0200b749e07", + "773a63e6b7c9e3bec91272", + "536bfe32ac8da07b253be0", + "2146fc84389596cf6fa8ca", + "12a2fa8c4d06a694b748c6", + "49ede33966bc3f0dc8757c", + "4f787847feba11bfcbc764", + "b2687172956319218655e", + "4bdbd2765933e2b1d70563", + "1ef9edb1f958cdf81fb9d8", + "6e8b2732511303a48ef731", + "3608208e4497b40a62b3a0", + "2c4bac0a0cf06ff50ff71e", + "784bdef1566f244d4ff44d", + "5cd3a1cc8bf78e4c7e3747", + "418b73330a3b4d1a80474f", + "5f87453deb48ed6c9a1afa", + "3d9131aa5802e27a83eb61", + "61539cf7b388689e7a260a", + "260213253056e29f0ac6e3", + "2768a7a783d9baa4e5cce3", + "7e61e3317d07a1009894dd", + "6927c4b12865ac8f053dcb", + "352d204330140b3786230b", + "67ae2ace35fde529154a8f", + "7e37a126be9507ba4c717f", + "2306ed04565a9cf9fa84c2", + "6b380bf5d71fe523ad1e4d", + "6aece787aae5251b57b3ae", + "7f2209419e3163fbb4cd8a", + "376c7a8d0fa0abf4c0bb7c", + "39a26bf8336439ba9968b4", + "620c14b60053b660420c4b", + "19675db116558d90bb4f6", + "2c16632a312edfedcc7f72", + "1945686d70d9df98093dd1", + "62e4e44df51bf11734aafc", + "5d3293ca54de6a3aa06b08", + "610d07557d991d9db3dea7", + "6b25878a1ec102b9e883f1", + "5d29345f097e1dc041bc7f", + "797d4c38129f52836fa5c7", + "5bb2eece8c95a515d2e2ea", + "451e904c04882b739d233e", + "4dac1ce4b87e60431b8a4d", + "2f8592e02ef759cdd34c72", + "7c1d3420db42a6ffd37cef", + "4b0d1ff6297b378945b906", + "744db8f7e25f69bc47f2cb", + "7fcd5bd9328b9f06223a1a", + "37f7d323d5bf332eed1bcd", + "629e9c894bbbebf06d3299", + "d427f0f9d14ecf4c54fbd", + "71e1aa5a9aacb38b66f605", + "361fe28e640ec02ae49613", + "551b691726c66f9ec1f9e8", + "523ee7b96bbc2b0977b4f", + "52e6bde0fed2ecd82f7bf", + "3a4a4ac73bb38c0c48aea2", + "207cf80fa76e8708f88dc9", + "2bfe7376e8ab62fafbff59", + "7b8ff43621b7fb13c3edd2", + "726dd56f61c4c5016201f9", + "3915c71f3b447b64ce4513", + "4781781ebc739ed9d4e35", + "3669984e1ddcb753afb878", + "6c8071fad8933706efff6c", + "25330fc3e5df50eee77cd4", + "316bc661e89aeb9e7e20a6", + "2a035934ba5fafe2ebaf47", + "515a0593d1e619118d226b", + "72716051b13a2c1876c8ef", + "98079c36403a029b3f0bd", + "388d8c3c958b6abcbf6aba", + "3d9a1023138b0e9cbe7d70", + "7bc0acaa724475da5a8a83", + "4a266217d4534cc588119", + "62baea1b89700a3953e872", + "5fa826fd6352f83c34bb5e", + "71be60f1312db2fcc7f045", + "51cf9e84f5414c7907e79a", + "1fc064c4398ccf6bf7b1de", + "70594464b46de9acc11f02", + "4de3353d33028c5f557394", + "15060a6e69612092d45768", + "2142584bb5cff6c1e5011e", + "7eaf34148ada80711a86fe", + "64f201a4086e40b2a3a19d", + "2d794034e6ae324ba7041c", + "56359d56dcb06ea3ab68ec", + "49d6a78a88159326775c2e", + "32c2902887e1700cd5dddb", + "c8806bb60205886d4ff9d", + "c0ecef4f88f5957d4b1b", + "b0715d55fe0c1edd9613b", + "b512df0270e6ffe2d4a9f", + "563e208513fb23ff9ca7d", + "54c245a123767ef7f22e33", + "5e83dc6dedd0679793feca", + "3c53d6131f8c41d5d7317b", + "349470b19ee7a8cf922b33", + "432c0a15a9dc31696b79c7", + "3de21ce46f7c8be3bab3b9", + "669f3588d7a4ca7ee3dd1f", + "2bf32012cc6354c709ad2", + "2e5ffe59b5dd3843fa4c17", + "601b382825c1515525a19c", + "78dfe864170ab14a408743", + "6ebb0dee9291bd90cd2215", + "6f52ff1c7f6dba719401b2", + "d16f53a28b7042d305524", + "67daf6ba4dc4d74236df77", + "72118d192add3aa4c1e0b6", + "7e1ce3bec1e98dd35947ed", + "2330589e6c22439bef95d1", + "214d49f3e2681b232cf62e", + "ceff6274c7b15ae86dcc", + "ee736adb9b9c1860d483b", + "550e4c9178e5dead2f815e", + "651be8b59b15d629ab774a", + "655b44d3a92231714b14c8", + "1a88cb781abea4a70cdfa7", + "7a520385f587099a8da6a1", + "42a1f9791054781a203d9b", + "1aadb770481974ec7ba970", + "1634b76faeb97237505ef4", + "577a2773ebc9e2412cb050", + "68075aa010a2a7afcb2078", + "e5d22d0ba9e3194e2337d", + "68c1092ddd7cea180b7a8a", + "1f6a141f6eb54cb95d54af", + "6db9060a2078f4de4b4e1b", + "21ac3ebe991cfe1bade37d", + "45e67b0777cb6facf28d74", + "398768a52710b109c92dcd", + "6c65a41601a28b4854db0b", + "3fa82c77c11ef3ce373a08", + "2219a8eabaec2cc4da44cf", + "25b286320c27c0f91c388", + "c663e7994203d116af45d", + "373211f704832f37df113f", + "33f6606f82062475e2caf5", + "77ae05c9ad4bb1a82ee6f6", + "72f290cf9ea470dcec1318", + "20cfa0c6bfbdce5e399a70", + "384ac895940651e4b3df31", + "2a6da3e3f6425cc4caf185", + "3559d5470cc8be88bbee52", + "731437b69ca76a93992caf", + "31f0df7953457ce90524a8", + "7fdefc35775213402acc91", + "246e8276fd64f7af18402a", + "1e604eea4a6fb7804d131c", + "f6074b1e17e08713a2a46", + "23931a4d64503bc81a5a33", + "6395a035a6a5e009dcf586", + "23db937264552bf6dc2858", + "50e45902fe1a308ec88670", + "42e82d8613957e0acb2b09", + "3d50a612150493864e2df9", + "1f08599df3ce28d2e2a99", + "172e3a20b269ac416b7186", + "624f69e6f91d2b9574cb8", + "33b05c78a18798e4462d45", + "5d5e844e1fd78c36c3341e", + "5a1b57c203d09cc8a22696", + "775bde6bde2d0aa4187fe7", + "4be11f1cd60954626093b7", + "571513666bf5e4e0b1c7c0", + "30e484fb4ce5927a937373", + "6ead11e0936e4bb4e855e1", + "14b5583a83133add54d368", + "361de61b4e6057d1cb2274", + "24364b397921eedc03333e", + "3f26224827d27901ba392a", + "147a0d7fc26817e7251ada", + "4debfa77d5d5f3fa106f86", + "1f8b63c5fea99ffd6a5348", + "59dbf0c177e94a664cfe3b", + "656e5b10b9da085176e0e4", + "678fb8bf7f6342c5764339", + "2cd2d00d4262f35754bb13", + "67b770c97867478cc69b37", + "bac1f8bfa0e63045ec3ea", + "4303859a49916073987344", + "322164812a5696cb2322b0", + "50148cebf8644fa7375aa", + "50b37142bd10ca63ad3866", + "5a86321f172c81fbf185ef", + "4972dfe88d7e4fb02ffe72", + "3aac1aff3b6e14d31a91e7", + "6d575f1601945a3ca29eb8", + "6c290f053f3f46327ee8ec", + "73040349f8459e94069012", + "2dd44a6d1765874cf1dbb4", + "52492b4a4856d777ca0682", + "76d72d56a09f253d257f0e", + "6a4862d59f8198b4ea0fd5", + "ee2c219af9300476a7d41", + "60548a10984139e59f5d8a", + "423813f9eb92bfadf14d9a", + "6a3f78db4e25085a772f7a", + "a3d31a1daca53878fe695", + "1c24006c67392d350aebe9", + "5baffc06fe51f5caa49a4c", + "6f4a829757301eb1143585", + "202377a9328fcb8f661a5d", + "6506edb4005521bcb61671", + "208dfefbc938eb8f166f28", + "2f8aa359ac5538f4834ed7", + "6b36296c1bd668243e920e", + "7856c391e8828b90a94afe", + "5728f13fbf1367c5292a3a", + "6db3eec1da4e57eacd7cf4", + "520f0b6932233966b7bdb1", + "225461e731f47cbf2cbf5f", + "15bef1b795296c7e8862d0", + "217d231f2ea4bf28c97e44", + "31e4aec6d42e52c762e301", + "16103ea0d454ef686ebf4d", + "34470b1eee2f871c42ba71", + "5d172643cb569d9b2ab357", + "45838fc0d9bd4e814df398", + "520d412f22645bfa3f3a33", + "5dd2532249188dbe3d2539", + "336699d6c6f15f6ab914e2", + "48384f03b178aecb456dbb", + "358734094106c4c77371f8", + "13705ad9594243161047cf", + "9cc0a7524feb44aafa989", + "2f615de4e96f8f9837947f", + "4f571e68d11ba0c201ec2c", + "1c7c6456335bb722881302", + "56f01f51a5be66f649b1d6", + "4a2416a8cf412f996e9654", + "5593dc730a3a85d6ce77d2", + "70628248b6cda7311de5ca", + "49212e86ec70f1b328e11a", + "3669075c083d3a0547d7ee", + "7c64411c354fca180b974e", + "be2266f15dfa6e02e4a02", + "69110081782c350722756f", + "5370ef9f2399e3c803b5a6", + "4277911fa0e430960db091", + "46d2651ce40dd1fdd11e69", + "65838019d10030d2edd34c", + "79ae8d3a65221805ed59d3", + "4762e175d924ca1dff7d06", + "226f7d490aa9d47314570", + "673a9bc1330de8c0b0abe1", + "a80defe299bf7c4d81738", + "1916345f1ad90cf48c6472", + "13cc5c5fa7afb2b7468106", + "656f70349417ef562616d7", + "520db901eb8309582e12a2", + "4253e27061630b9343ddfd", + "43012f86bfa02bf0033ee9", + "51524048af5a6750b1955", + "37a4477749686070e7e049", + "39f7a72e1daced6411b1a6", + "4a98326f880a44e2d6ea5e", + "574f95a475dce62a3071ca", + "23c20aae79c2ffaa75a36c", + "59f67a0c66d5e9744004c6", + "25ff556cf1afefe2cd2ba9", + "41be4715ccf6dde8b12086", + "5e9464fbce6027257d92c6", + "5b57bc12988f27dd0ed418", + "1f1c7eef9d0f99e1e209db", + "1a95aa2ba56c053acf7e56", + "6f085a8f46a66e79fe4f92", + "728aa131a37012e184c2b6", + "21469f9c49fb4d2fb54baa", + "67d12b5d61741b8623f378", + "2a1abd32897155b55014be", + "35ebfb3fd5a71979daee0c", + "3c994e655edabd5cfbe8b8", + "b5f14620587f1e8ed5a45", + "4cb0c7462e90f28fa251d", + "608a29bc043b54adde90b0", + "6337453f9c180b8ddb37c4", + "60e351e7834b181d30a00c", + "15324434e27844cc4fba51", + "259839d29faddb791e3548", + "198d839621f761dde4f853", + "221728332d3142e3346be", + "48cd6ee15c4874d342b21f", + "7964fb4049b23d750b6f0e", + "365cb247c96e7933341e76", + "4f7806a65676c896ee7db9", + "99539a5120bf06fd3edb8", + "4374a87512bdcb27925ebe", + "db7255fca12f37c452ffa", + "4a2cef4e3606d1b9422334", + "b8385ec48f904d72393ba", + "71d26320321cdb1dc925e0", + "1f8889a7c0321f5279b37a", + "7decc101d84d7378c8efe2", + "1526a67a2f54717285cebc", + "4a292844d7aa26520c09b1", + "5edc4541d1854504d071a", + "44f34a642236b1e7e4c8fe", + "87eada956963224c06418", + "76393b1564fa2cd841480e", + "2aec8efef6c41604b67a83", + "2644cda468b716b53c99d1", + "4d74065738715d35d47743", + "1118a89d656497538996f2", + "26102582959271955d45bb", + "1318f3d7743d8ee4ecfdb2", + "3128342c1cd21185c739db", + "7568ac37df7da28c47bab9", + "be26e79f27c2fffd5718b", + "2655fc5da8cafdc10e8c6c", + "6336954989b8a716380f64", + "2f1dd3930a2948f2187f86", + "90bd6d6fef2e358a664bf", + "675948e6670907b03227ed", + "2025bd13134bf0ca69b0f6", + "509dfa92ab81408672391b", + "5c699bfc1a98ced38d7c88", + "14816e04a6b799d1ce9e1e", + "61978b574cf8f6d53118d6", + "4e203019ba4b94cd691d60", + "7df66ef2eea696dbe6ad95", + "43bc8bffd5b4fa12491d7c", + "1207aa2a4ea7c882b5e76f", + "3e9654e3940c0f541b93cd", + "4a64cce2fc4633dbb63e09", + "4385d494a7bdb154810c4d", + "dbd1bb9693e65c5eeef4a", + "7d58cee39bf1830f1b3ec0", + "6cc6a998d40d1bad211cd", + "3aa6d80b7b4477df65330a", + "2ae1383e51812f870ebf41", + "1107ffccdffb2932659325", + "9cf05f6855d4068390948", + "36f24af02e5318171bea53", + "4d0a046c7ec4f54117f367", + "7bb1913bf745fa526f18a8", + "2970c6e86dd017c5341ddc", + "58c411222783451febdf82", + "657128352843035ba5fee1", + "13c9d1e81de8cbb64a1797", + "66e2564796168c2d0a015a", + "1b9995439565d095eb8a8c", + "43cebcc2f248fc1fcbd6b4", + "7e18b1dc04cb3af247aa31", + "269ad3cfbd18bd255786fd", + "2f1b9eb8c8ceec3aba8c3f", + "890072ab6d3eb608d30ea", + "4e72dcffc8f26eb136b7c7", + "71db6b9125d5ab5b3e7493", + "57bcb68e1f52791794bf4b", + "7489fd5407cd56abfcfc49", + "45d43d697cb8503c85839a", + "2021e0329a909a39851fe3", + "6eceb600a9b81fd3aa7175", + "4d63e68650d056d4e2cca2", + "21789b3595bc366315af2", + "781973046ae51aa956a060", + "2353c3f920ce7af530f96d", + "4a8154e2948099e7b7c4c5", + "319945f43efa75c6d6fbd6", + "1a0cc5d78d1da3759fd0fb", + "75a29d53450973ae07e5b6", + "670c6449f82194e5367c1d", + "6978fb86dcb4ccc82a3738", + "f6c4daf384fb3d39aa985", + "47df2e03e1548a16e223be", + "36224c16a9190272a21e14", + "abbcfb2e4c3da6b090978", + "1fb7c568bdffd12b767330", + "77f657453333dfbed3c7e5", + "68855602ae559673b8a2dc", + "57b79cb347145bcbe43bcf", + "542f3c6130072ffd145c0a", + "7d43897c9a717ea4ffaf53", + "2928531ef291fb90d243e3", + "6308b8f5574126f70ec3cf", + "3b77afb6ec85d92608bbc9", + "39bc9fe63b4ca1891dbe7f", + "14b126e3c0b0f4dae2ddfb", + "634af4f8ff5eecb70f9b3b", + "5939fc19fad9c14c8917a9", + "cb351e8f1a28278af3af8", + "41ff1be99bebe99b10f273", + "32c9397c9adff65d943965", + "1e1de465daadd9547d63fe", + "1924697a3681efc60e8e70", + "3e14120ed24ebae50e64ef", + "29bfa87365d098b3fe8377", + "48ad93093caf03d61b0aa8", + "116c396589d81e0684d5a0", + "4550a8c9126d63e137546e", + "3d325eede75d0a573042e2", + "715fb02624875de3ce495c", + "2c1cf6d476ed98aad97b90", + "41ec16a5c725c7d32d3a8d", + "2a6ced30aaeaaa3957eaf", + "284cbec8937114a1728cdb", + "7fd049d0f5d16bca84fbf0", + "1ece2489d9c16fd0d7c093", + "7a1817cf8f21c4f863437a", + "2b89a454954d4c6b2e2120", + "44b51755bfc5410d6cfad6", + "31e4383d0d65d0adfc3084", + "2f44e6e7eed452c1b02ade", + "46861d4c2ab5de181f3e32", + "30c01b8abdb9d98a7941dd", + "593ba411e3481cff090a6e", + "5f7998cdc984bda089a530", + "38863908f348e0ff24d2ea", + "7db23dcfd5b48847b2da44", + "70cc62d0a35cccb85972ee", + "51e871e33b066886db1e57", + "7ab8d7968452d732fc3362", + "6cbec7ee27571943d99309", + "65ccc844f43d7740c3bb83", + "2d92e146c92e5c2141114e", + "78208a8be2c33504df2573", + "1b892a6bc6d106036dc210", + "1ba30d22d8ca0e3412c0e7", + "7f5d5abee4ea627ca346c", + "29d27ddd5f46b0a514ec85", + "717a62d953937ab8d63ef4", + "46f7147d837df6469c39be", + "1e9e640158c2d5ef405818", + "7f30d40bb0193bcc3bff38", + "7e84a589b79843d0f09d89", + "1984882a708094eb26643e", + "6b386c8a9795cf0b45e160", + "282bde17894173789173e7", + "75b60c74c3f4835e0ba3f1", + "66673b06f4474ab9ac84e3", + "768b4e15703c2b99a95ee7", + "3c7d066200b6ae5892048a", + "194fc13ec819c9e2289cea", + "3c066553be4fa2a741db4d", + "31018337a926110b0a5b91", + "7ca0b74cff2de67657aaa1", + "610a799f5f9443dd8f333", + "29dc0e371f2a3ea6cf4d60", + "bf1c05f166718be1c6836", + "309eb70bbb47b20185134f", + "4b31d20ed3a1f68f117d30", + "201a5f031183f9e3136174", + "6d82429df8c04f3e8cbdea", + "4e4d1094ae9ce9f42b1d71", + "65e071aa89e8e9caa17f", + "7c3ad9d6ed54817d082b65", + "352a1b67a355f38121c462", + "2d980e097ecb2ab91b9b92", + "96afde4db924db62eec7", + "6e20ab59697e8bf608ee9d", + "2ab6145578df975521753c", + "5c91f707bee21c71c33c34", + "676d8d92a92b0706da21e1", + "3a82f64175d5b3caec9c53", + "2ccc62a5fe0c2d164b78ac", + "7f53a40fb6d59c55fc0a6a", + "eb12a34ffd8e97426aebf", + "330554538efb3452d928d9", + "37902c15fea70cc2588984", + "1e3f1f00ee5c87d8bcc6a5", + "21e6a33067365b1e718020", + "4113025c4b26d50d501a53", + "1d50b663f8750fc777a8a9", + "47267802b4baf11a616d7b", + "206a9c38358f291b01e407", + "7529b300b4b89c580a5f62", + "59aab11c164124e5cdf604", + "3d3a2d2ef7d22dc8adb10e", + "1fa48382ab305e0404adc", + "6e72d626e97997cb842159", + "53a902325a9087232d64a1", + "726d30610282ed39d8f203", + "6e48887c0bee3ba8386f63", + "532cc2e0afe1d979c42a70", + "614224558d52e5d4eb23b8", + "c0bc8c55f3b95e521ebf8", + "1b4e22a54398ec5712c2f5", + "45109475272b0ee96581b7", + "6c065cf636d6bc65762095", + "7bfe5c12baaa86c60d8117", + "62e55ea318373ea102e458", + "46789b05c1e88afd58b2c6", + "37120883f03d674fbee3d7", + "63a482d47b34384d6c0abf", + "78778c448d7d69eeff19c7", + "69527863032c1ba7d7e238", + "574f9294e066c8fdb761b7", + "3adbdefe2bc4d894d3eea5", + "7c2fed1746d715eb95529", + "2501ea3eadb12569e01e7e", + "3d49c943bed92220933501", + "2327087d544749f348c909", + "63a2efcfe030b5eb3fd526", + "2d2c322dac49b5fc4277a6", + "4ebe9580f66ecfa62bdae4", + "39450177cdd3980c4efafa", + "3349dac2077bfdf6a12d86", + "56b71258283af76e7bcfab", + "2bcddd9fb0f98505c98aa9", + "45166035762ea541feeea1", + "6bf558bed09b770ac7b7db", + "69498de156a0aa10a4e2dc", + "6cc9f90d012be002904668", + "32f8a36cc1b46c25cdcc28", + "312ecee1519b0617d31186", + "706df4fd50e1c42994aed3", + "4edae7063e31e196fbffc4", + "7bb42f21df6b474c926cab", + "7c2bf4a989b0889ab6c2ee", + "14a25dabe8f8f9bd2745b5", + "14266a10ce4302dd32d262", + "411254ef95bca10cdc61b9", + "2cb3e5c4dae6b173319195", + "575c81fbd5408f583cec84", + "904098cdbfd4389279e30", + "4499b6e3311b7fe5b9c98e", + "210804240b673797c1da0b", + "4cfa062853643ca21aa8e4", + "155503fef8a8a42650f8de", + "214de8b9e305b92a9ebc6a", + "aebf119c49f1f5d4fa77", + "4019e2ed5f4f686e75a334", + "26e8b6fae1b81184be307f", + "4cbbf282cb8d5b492509da", + "32124e45d595b542218cca", + "4fb7ac8e103e64af4c501b", + "4a99080981fd90fd8f202c", + "5fe19870cf156902f09ea2", + "35da7f1fc27e6edf7e2774", + "171772c43b172c6f59b4ee", + "396792f2585d3e823623df", + "68b020f430372f0b20817e", + "58a41d74e16c1b1fb6cbf", + "6ef7e0b470470f565c088f", + "4dba440f7f398ce0198b25", + "2840ecdbeaf847ed4e56fd", + "2f36ea2bf51461b1407878", + "2cf0b3c6e55d4f6c794d8f", + "31fcd9e9b87aae6bf32f83", + "47626057be8af9d92cef74", + "2113e1a93f5d2f1cba0377", + "4176799b704bfacae7d897", + "524919eb6636c6c6c14a82", + "64d1d7c43b00bfc99b8bb2", + "76a279212b584d95ed2cd0", + "37e704706a7967491e3628", + "5e1c654c63269bdc77fee1", + "58b898760417610a09ff41", + "64981a92737099a91d3794", + "571cc10547604b09ba9b69", + "6714be0beb22d71708c5e6", + "359b739ee10f4c4f24e721", + "454b67d8b7470679eeda79", + "615326e14c6c74c717def2", + "2dd86ec9cb242b4e68016c", + "62a4fc7a9af2d27e92b08f", + "cae1cd222ac38b9a89a19", + "5fd2fb0300581c5f59fa7c", + "1488492f946cb788d721d6", + "509ca3fe7eae200044712a", + "27c4576460764aabe86ca", + "72e3a111047449df428c07", + "4dd2e16c6f9989907671be", + "415d623b63f929b3ef879f", + "9b13c11e290284a86caf", + "78b61404bffa36b135773d", + "10c2f27dd2e5d8f77a071d", + "684e96f56360b04576ab1f", + "6bd55e81cea4df6934b8f5", + "288723d0eb9a25150c0772", + "4eca5fbd35a4778cd18f80", + "590c069f4d458da38448fb", + "6a91ca9f24a59bd3f77cce", + "4520d49550bf0a2328020f", + "31340daa6bee66dc702e47", + "21cbfd5db5cf856bb6980a", + "2ac5b705311ca0e8e6bcda", + "28390f3626b1fdadbcbfd8", + "3b79806e60c6443e5b75ae", + "4e1dab19fafdbf4d11123", + "4bba04cb6f7dfe33e4bd", + "25b65fbcf4deba1535165c", + "5d2602e9c7bafe79929bee", + "1f5e885344b51456b2195b", + "5c585a64ca68d89750e9da", + "715687651f6925a41a3bf1", + "47be6483decbcd32c50b44", + "3fdb397b831af56c0902f1", + "60ea199093a4e9f80613b6", + "59048c7bc400c1b2f055f1", + "5ed2c798bc4d3df9693b4a", + "26c8838f41263334d39302", + "257f0dc17de9e402db5577", + "5eacde9e13242553f24977", + "232706fb395f1e37b2683d", + "5527388c03206dff6a464b", + "6207f87b59fc321d1fa8c5", + "3eed8387e5a22f84995caa", + "1ead4bf29c5aa1e11118b1", + "4e9e415c8033fbf3989b6d", + "6ed402123cbfe00df8030b", + "15c5021e3387b5104eda39", + "385c720d2080ae9544a074", + "12502410f917e813c566e4", + "dfa61531c98e389318ffc", + "75df623177a9cc914a680f", + "16a2f9f4e53133020d693f", + "68bba5659f4f20356a0cad", + "5b60aca7fe85259aa048ba", + "748cb85b7df9ca5a82d4a0", + "5448bba652328fd63e3ca2", + "497b40c11c5d479cab5f20", + "1ff2197a0e5b3d0b65c928", + "175182c7cd2ce431b0150e", + "58a47971604afebfc2dfe", + "7feefa2c38e3a6212b4cc2", + "1dcb001f06c75da3270a59", + "3e7a71b985de5c6c7a9f57", + "ccd4be560162041ae08e2", + "4ec109ed0d029a0c6bd1c3", + "363177aa4ad204478f4d2e", + "7b94e69ecfb1ba4bdf42b9", + "68bf1a165a85b17f192a39", + "fca586b3bb595a8d4101", + "7914f6f164e20860badddb", + "d959366c9d2eed9c988e", + "6b1b87bf69d8ba16154459", + "5798f45a6d32a5d9e220c4", + "23ff36317f41cdc69b5f8c", + "3337445fe49877ddd94c8c", + "27e0d5b6d5b01b974468e6", + "155305c9e80b8231f3fea7", + "46777bd089a8dc8c44ba66", + "4eb92d6051c08bfec28d32", + "58de9434dcaeb21007cf50", + "4945531dd0d285dff322e3", + "5f4ee2c7a7d447e781b997", + "255da48e767df6db73178f", + "40f14f4642441c80c723a2", + "23b23c226ec7148e9ecfd4", + "2fc4119b8d9484cd86a0bd", + "e8a31983f38b3bc04d83f", + "403c97fd7a8e612b101803", + "360136af955e5fa1edc1", + "6dd1e30b456df046e42f20", + "2a8fc7a338bd0e95e61238", + "5574ce6446f5f9b2cb3ade", + "68437c168764f9b52e36f", + "6db55a7581d577d97e45ef", + "2117da386a0ba848e04619", + "38a3fd25a6d9f4f7c85efc", + "20bd84ec27cae248ea38a3", + "2359b0102f9a1f774278d", + "7f779a7314dbb8bea5c652", + "a15cce75efaba6c1b571b", + "5e4eaaa44cce4760757194", + "1aa73126a375b6cf5e8b5", + "e0fd267f226bcb77b4105", + "5c1c9591ed7cecac5be504", + "6f8c0ef46d2275dfe7e84f", + "75f53c77a2d34dd51c6882", + "553e86c66c2fba13b95f56", + "31cc33f2d92bb3dc73372f", + "2bcf3f6e0be988750bc0c3", + "2a0c42a5cba7fe55a006e5", + "67427f6921fbdb98c3e375", + "62019722b2962f2ad1787f", + "75964f1abb3f7cc93e9f96", + "3faddb5ddd2bdc683de72f", + "235bf7672a2cda1ab01fb3", + "c16242d78c3d8fbfddea4", + "29105da153f2a098ad094b", + "39f0a0674e65b2cad4a706", + "57a6c26c5e5dea61f133ee", + "6151a60a864edd0e7c7b30", + "d65fa4e9fad0f9180af7", + "553adfba4c4a6d20491557", + "1ffc37c5751a51bd676a97", + "450dcdc45566039112cb21", + "74c5b771dcd8c4719355d3", + "72216a00ebfc9de1e963c8", + "7746c161815ab2091d9e21", + "47ddc74fced651c57b4d1f", + "417a5a771b0fe4694065d", + "4bd73bb75df0b9c8f31e93", + "3937d6181e67f43d9bec08", + "5fa8c4e879ae9ef5c6f178", + "693e564c43456862d84db1", + "394398fcb25e82a48b8d32", + "754181ae9689816d4fae85", + "6f5834f39b940405114e26", + "41d82e9988854950bdb48c", + "29f43cc681e11325bf172b", + "6ac2b95852f2b3848657c4", + "49da4e6814895f7566132", + "7a75465db2452d11dbf6bf", + "14b9cf8ea7c2a2aef663e9", + "7a7267a5eeee00421b1bd7", + "8d7ac16a6c7fb5dcaf362", + "4a9951c3005ac4b7d775a5", + "4dac5ec68e30db33d790b3", + "7e9e8be590540d41cb48b7", + "db6d45038525122246c3a", + "32e84128c0dfcdebdcfc5e", + "3c52f4c6c583d5b2a18105", + "7a42533b0f16560c421482", + "403ccf27d3ff3c3686d654", + "5d780dd5bc1f62ed520130", + "6ecdfc4db1fa1b0104403a", + "4796fc52e00fbc5d65fc02", + "1103bc87eb4e4e572c882c", + "1f2e34fd7020d08b01b7f2", + "23f737b6f1527cfce0303e", + "292e4d75da1a76fa4eb730", + "1b8c58018b9ec962054ab0", + "3cdbf096f176a11d399e68", + "5e81e2ee54fa1c8e9216bf", + "6ea50d7820cf1c46cfdea8", + "42fe3f1413aec51428fb64", + "449f89bc8e75ebc93c06c2", + "46dbb8e8c99f2d8cf603ab", + "3542a00727cde7902f64", + "8c1b60a22d754654b3b0e", + "4cc1b8f60c7b3b604dd7f3", + "65a59676f2a0f7f5358513", + "7ebd8ffb86035ffa249a5c", + "6937a623eafb54374944c3", + "771e23d6155cbd6574be92", + "42d3b2e606813eb48865e1", + "747f5812283a8ba1a43af4", + "1533a8f5ee81c2d4352c6", + "25b4f424465c145a893505", + "54449f7dccf77fd8f14fff", + "1f216750a4d1686b3b2227", + "3c0ef922648f93834d2bac", + "5b8558cbc60eeb5d4d1e0c", + "3fbae766d352bf62d71ec9", + "37ca6d3b30cb2687e44f7a", + "4fc1aa30a26bf05e1cf79e", + "5830e5e1c9294904118c10", + "ac1c0028dc3aa005da816", + "2d8207ca3331c2f27a3943", + "2fe38c447768175651bb27", + "538b76dc0991647c99d6ab", + "5ad56a9a03d1277384501c", + "2c11fd859f539479044b3d", + "6e1c49a1adf3346b270d76", + "627d01094a2553e7bdde46", + "4b0e392a6b94b0716bcb0f", + "73c9485e5e5379f878695", + "43da9e4b9fc98c3225df02", + "4b81add44caab6287f5254", + "73a1489a18b0815a03faf8", + "146e2b3f7404eaa2825f64", + "62cba5cd6ece1fcc005653", + "9a91d432ec896438ac971", + "6750d083991451ddf24ddc", + "23f47a79fc10179e2f1aad", + "456b75b7118ddbd9c05113", + "214ab6242649bf5f0673b5", + "46c6a4606b83331dd733e4", + "567c07ffdf5609acdc57cd", + "26639427b4cd468207f354", + "36b57535eb2f884ec435f1", + "2aeb5606838c910769daa9", + "5d5d0b6bedf48b96c5eb79", + "144036e909f39a00a79653", + "7677202d8f05f9287a6047", + "1a1cfff05adf1a427c023e", + "7286bedeaa0c2687819d8a", + "2bf095a2fbcdb3391aec69", + "2e6c1f41a9866f4d867e01", + "2ad8da8cd83b1521d7659a", + "159314ac561f7431a71dd2", + "443f4b4ed3b1f2c8fe8ce8", + "1bb928a5ce5b6a93e4a6be", + "ff765fa35889a47189d5c", + "7faf5fb28aa48ff83cc07", + "330bf157841f4554c8f5de", + "3de0a5abf20a4845d76439", + "5d53571a7cc3688e6944b0", + "7a6a150f8921047e15edcb", + "4dbcbf0e0833361017aadd", + "36f20d7e24da8778ce35f5", + "3248d851d401112b750bc", + "77024358b3e776b2c5e1af", + "599102d1f2500d61d762c9", + "52c455dad0b267d43552f0", + "59db917020bf7253782d5c", + "3251a62ebf3abdb7c9ed58", + "1c89d8520ef104ebd20ee", + "fa65751eb4d84785986bf", + "22f4901fc0a8b24cf62fe4", + "3baf4fa4e9f273acdf732c", + "29d711357943b0afaa5b59", + "26293d249066a3014c3338", + "4d3db82b9d6efaedc42576", + "561331256e1d21664a1287", + "796842dd6bfad2f98912a6", + "4a27b941aa4c6ad1e07548", + "47b94fbc156b869e9d16b9", + "39f2517276288f74c45e3a", + "11326e189db8b15b0744ff", + "7c793c0d415e26d57ec92", + "22c922d5b0fc736e5f1adc", + "5a9897a2da0299756dfdb3", + "37b012fbed4994b5319766", + "7ee167869f16d0f3096184", + "7b7ba8150a404335a3e978", + "2176005ea62a7fae1a0ec5", + "7f5271355a686a4df7e516", + "33294a38a5c8a431b3624c", + "68570d0c5fc94ab3c18486", + "3a928b86dc180342e1f053", + "474d5e705efa51e5e97d39", + "4948e72d6c06974bcf7212", + "12ea1cc2026e4f5211a159", + "15b86ea9fb5f9d46bb9d95", + "1c0d48f6283945e321fdac", + "c25f982adccb58e81ce02", + "173ee21e60a88ae566e166", + "64af53c3c0ad963e3055c1", + "2e0a934adfe422dd136191", + "5ba00e958e1473bae28031", + "230119c3b2a6b1bafca00", + "1fb4d17ac6ee317ce5a547", + "2449f6a2ba5fdac5a9c1d4", + "6b488f646fce9835d43f44", + "11978ed9a01677cec42ee0", + "3ac9b63dfc3067c1c4627d", + "7fa7e63240bd502dd4b06b", + "4bafb874450e24655961f3", + "4a5a912df871eba16ca2bf", + "6a1b97013fc782623a1d18", + "60f671cf9f662680d04313", + "6f7417b6bfc27461fd2524", + "3cd40ccabd157073f9e356", + "60188d16e528a5d2e06d3d", + "55509fd3a52bd88fe29e11", + "193c88995f60dbabf1ee79", + "36e5208ae458480078d5d", + "27869ae6bfa80052e928d4", + "14e76412c1e117fa60f762", + "1a91f5500bd170effa0820", + "2f27f9f5b37e53f26a3367", + "7c4ebd51c09994a5c2702b", + "7eede9c7d2fd05759ff0d5", + "1bf7de225f0abb4eae1da2", + "1f527bd93add787e619f2f", + "2f4da63191088795366c81", + "1e86f8d9f30e1c9ee2f741", + "5fdf7c6cf80f5f4d619b9c", + "1365575dcf06e2b1987b3f", + "3860f5646a470f19d720f1", + "b17adb15bd895ea825438", + "67cd089f73cfc8807dd840", + "7b97dd845f9509d060f296", + "3951fc47c9cf417968c09a", + "63bd657552fcd47a1fea3b", + "7b59158d38abcc0653e41", + "7adedaa3d8ff64ef5910ed", + "121daf29269045f5bdd20b", + "65c75439faa2303912b32e", + "3a603b28f5e57fbfd764b9", + "2df92a33b308b4efdcaee3", + "69defadcac1e44c7a1c0bd", + "17961b8be9d0332a213177", + "59a5901c521b74864c8fb2", + "697c3f9accda8d3543f182", + "3f0177714af6ab07d870c0", + "2334ccde40867fa1d0bc15", + "16fb077509115b4c0ee442", + "758f193f192584a42ebc31", + "483ca240f22946b37af3c", + "311601fec45703953f2b91", + "67da5d093fc207176dbdb2", + "1b6a00fcabec41d4b43ba2", + "ba07dcfdd701f16f45aca", + "2835e7f4b39073c5a451bb", + "269c017af27ad44e6b201e", + "3cf5810d8c38a097a7561f", + "573747456cbe53c844796c", + "7772e0b990ccdc614c11c3", + "404ae85658f9b08174632", + "5dd52a5a11350a9b7572fc", + "7ce0b194ba3e31249ab36d", + "762f2aec62b91b262cc99f", + "3915c8d33da94da27c1249", + "6e885e79f7b5fe77214da5", + "668c0767178119bd41ac3", + "6806f2889f5316f4c57e07", + "32f953543bd07093a29e5f", + "5685392e26e4e637394c54", + "96cf28ae783cd1e477aa5", + "710608c33a517ea5d5359e", + "435abcd28c0cfc9f321db0", + "514d622fcdfc26212b5d14", + "408e6268fcd75479c3bece", + "18e5cae7f3bd61293a8c2b", + "65a5c9fe061a38a8c6c2e0", + "6df80f50564e811e245eb5", + "1b388caec4f8538425d93c", + "1bab6e088abbb7a786ff3d", + "17fc45b2690c315a5249e8", + "4170c011864f5582d6a738", + "3b3a5f854ba249c04d075", + "38e1e6200860f4072a8a1d", + "c91beeecaf54c95dc1b37", + "f125d56d3c0c2aaf7ad05", + "341851bd5e48e20f0a412f", + "471eec9edf3f5af18be6bf", + "4b21ef5da2b744139c3cf1", + "3a051daeeae9770973713e", + "75a7fc26a6faacf109b345", + "5637e5d4438a119a23f043", + "22f18c95264f1fb742c348", + "1d595362f3a1b4c77729e7", + "69a784edece7c38bcf7297", + "4fbaae68fdb253d715d528", + "23693b4063cf0fa20dad42", + "51eb043d3564fa91215f1b", + "2bb1db818cfd733dcce0b0", + "a961f7b95836d3a578170", + "51c819b9ec191b60920096", + "ac6c9987de6c73f2259d9", + "524b77666e02692a642407", + "149d706db4fce00c71da76", + "238de3e1606bc0e1c33adb", + "37ba1e609c7b12a8e32733", + "3ae30b1b5931eb630bbf6c", + "1630a212afc84f038374d9", + "5ebb44d93cb77417b61c4f", + "5a7d2dd2aa2028d4da8f42", + "798019b397419c8d54fda1", + "74a156e77589342bbef3d5", + "506e6a05e8de5c9198ae69", + "48e4926c40cd6ab5e92ffc", + "7d2db742721c9ba686ff30", + "4b8968b5c5a93dbb4b2b55", + "2ef2be0f7e33ace73bab4", + "7651ee2e0f4d348cbe95bd", + "43ee4b35cb3cdc84d1d5db", + "449d4feccb40da2e122aa1", + "356211f56936e183312837", + "527456447c2748239033cf", + "46bdbd32d31b2a36e04e0a", + "6c1076c01e9e44fb047889", + "5ef5512b3384aa1243daa6", + "d452f805a2c35e686e107", + "67a9131aabd5255bdce732", + "5088a2317aa34dd5bb1b4d", + "64c275af1abda385c2af0b", + "402c7149b20bce787c7e83", + "60c8d2e958387c0d0627a8", + "516640d56302eb15061b25", + "c62790b24bc842a717e31", + "76e87d4d2740e137511b26", + "6cf76079225189eb2608ce", + "3c8b04f81e14e10396b582", + "4bfd93fb985a44ed0569f4", + "6ce98c831091728c0e73bb", + "4f74e7ee01738298062093", + "449ccc3923e92a0bd2e3ba", + "4feae15528510f186aa1fa", + "12a3196afc09a79694eb31", + "6cfdd09fe2bd66b85c2e00", + "587cce1cbd0dee8b98f262", + "3b0283be973d59ebf4242f", + "88b8371baafc87a9713f4", + "4e6cb8ec1b00e2f28b3a7e", + "235baa54adcc67af92d06d", + "733b81816da25936e81af1", + "7fe76cd2c5affa913c2b41", + "26b7df388a02a8279b0652", + "7b5272bdeb1b01fe56bc29", + "6863984d7793407587e8e2", + "1f1eea8231315133cde938", + "2f85e68dfb9aea66d7f07c", + "6259df76b87ab2eff6659f", + "502c6a2df8916b18106088", + "4cd904fd9401eac5ad7f1c", + "5eb4d93a33b2d2e2c2adad", + "55a41153a33cb4649703a5", + "cfc86f804a481df48868e", + "1ddeaa1e583e9146210f69", + "38110b962a169200cc9f0a", + "7ce4bd3337a7333159cb2c", + "1738ee1c8e104064e07249", + "e1ef803b3674bf39884ae", + "55d7bf2f5724b5dd0a04ae", + "7aa81a94a5a230cf59a0b9", + "2baeaedf76503008b9e428", + "15bb5d9b44eebb27a1e60e", + "dce90e419e8d3f96eb5b4", + "72a7ca4a8dc56f9c652281", + "5cd319aa7906a96d2f6c7e", + "557361125249092a7bf932", + "70a1107bc42bfb598164ea", + "df7ae04689867c9ad97d8", + "117480f169f81bb3e8609c", + "479fc9912c9c81152eb474", + "4f2cc1f6f7aba8c20a670c", + "17dd6e40297f1d32786291", + "783e0229f219bc18b705e4", + "8b462e0f7448b549fd688", + "4a0fb16cc4d1bdfbb239c", + "53c95b2787b88db0682132", + "536be2b3e3829710aec51b", + "3a89578d6ca992f91249be", + "779eb73caa637aa28db87c", + "52f5adde99e4501e4d1c61", + "31541f24753a28cc5b51d8", + "620084c5da2910137e2b10", + "76c132264ad2a774a55164", + "35a3ab4773c5054a30c44d", + "2f78c0f7e7a90558573941", + "5b39ddb704fa58142076d", + "1d6812727d8421d0e03a6f", + "307727bd97c5db086074b3", + "1abc0d15793c655cee4a9c", + "68ee183b2208228da8bab7", + "116da33e19c8b80384fe28", + "3d73fd3c3744e9ec5d2d04", + "64ed03e382c11a32e34cf4", + "479e7025ae3fdc2bbcbe22", + "a134915353ce113eb72dd", + "49cb6ac7a2bfdc54300006", + "2d5e8f78718c2d4660cc69", + "3f5027ce278d444a4dd243", + "15d4218f4bbf0c95cd9649", + "13221a23af3045ec5cea35", + "1efd2b46d4a8724e929fd9", + "628d18e095a8dbcb9f43bf", + "30eff32d49c10f325b8e9c", + "29bbe5fdf14e69065cb80c", + "2df28a1b78b46f16aaf53b", + "352a4a136ebd7ef294f370", + "1c960c994194a1366a2222", + "351c5a0b997e45ec21b614", + "4c1f6b587fd26654ea69e1", + "2735b2e6f5f08a9e9418bb", + "3505fcb3eb2690f88b3be3", + "4d8859f357a36792b7211f", + "1e2093f76475f58a2dfd79", + "456138a50c3717947be48e", + "35714b90920ce6fe1f850", + "5d7c2a1d1267b7a252da1", + "754ffe6bc2e7525e892fe", + "290ac68bec8aa8955b7e97", + "a058b3353ac6290d9f864", + "ef75fc5d77fc146e975f7", + "48a999a2dc1a23a934a6fc", + "7256923d608836710a659c", + "2b13e041339df4d5a521ce", + "51a9b0945a0908b1d40d24", + "779559a53e6b62275896e9", + "1fa330f6dd5f3ca09176ce", + "3cb748f77d638122329dca", + "7e62c15038abb8244531b4", + "9bea90a26f9e93743a998", + "7ae1d007cf030664c6b815", + "52cfcbd15dfc6c476cfc76", + "18ba9d869c489f11ce52e7", + "93cbb2483673e4e0dda30", + "2478db790ed59756cef964", + "7d8b341c82b019a8d56c92", + "584b7d6f0b43ddd0b397e4", + "6081e77fedf3898fd66607", + "540f5a33d5aeafadcad19d", + "52c4d1c2ad153a3f70bc0a", + "39489c7fdb445490d498cd", + "e0800809dbab6d41345b4", + "1536906705870049755028", + "639c2fcec8b9dfcc987387", + "214f18ae0c9aa7a1b8c02e", + "5b8e9d8b290e89e5d9afc3", + "4499c1c16fec3546d5903c", + "5ce5e0595ad07c8855357b", + "39bf9c3f1f0a1a15264530", + "30a77107da1d91a699e9f5", + "352389083277fbbbe66ac3", + "5d711409f3faa9ea87abfc", + "42cd59499a0ef57d6b0009", + "731a7b89f357bfb855a5b2", + "767dc9d34c09b03db4a0e9", + "5344962f90f45cfaeb1bce", + "504d29ae2e5a021d2bb278", + "6e97dd298eaee757a3cec1", + "2d1b2f087facf1fbfc7e69", + "327b2b8d0b75e0d83a5b04", + "7dc98aa964908b313939a9", + "d8c34dffd92c1a20d6a9a", + "21a363ab0e08a4336f2e44", + "48eaf0293f956717b8f048", + "6351b2a5f477112f552683", + "2193bc73ac4b40415c95b5", + "13f13f9f2c877cb73ba5c", + "7c6b359299af5c59043711", + "7895b432001edf846b7b3e", + "3ecf9d05cd62341c4f7784", + "6c8879d694e1a0b99f8e42", + "6400e87749e3bcbd750d89", + "1851e925707895d37a37f2", + "30f4f5617cc73435ce74c2", + "18ec20d19a478746123b", + "39242760b51f2f93fd4721", + "452d3dfff11e24bf680356", + "5cafa83a10f929b5076c60", + "7fd4ee663460087b793a80", + "7e958697030784ae5ddf86", + "a6c54d0ec55adb4911efd", + "2964973c288dced7dae8fc", + "2b0fed7a534d25697e5c7b", + "3afeb7cc8f8e5bb8770da", + "6a81a8d913b71671629ad5", + "75f4eb6de0d35eeaa16cf8", + "7abf68b2e4cc9e3a3b2c5f", + "4f6d8c8b0b9b376d42c4b1", + "23f219093e9b0bb3b5217d", + "5a0c2602dcbbbf468b67e0", + "1a63315aa52cb254b65ce0", + "4f72850630f6f8c1a68862", + "3722a55f27f2c02b34eddc", + "672d7083ec424e5d883cec", + "4839c6454f97ececa9969f", + "e941ecc714605cea72177", + "7cf9338ca9bcab73862b81", + "6a23876a8c802d81d83d29", + "7006ef130d31e12bc44c5a", + "591bac661062f64b8e3f2c", + "25cab751e23d8e69bb5048", + "61f4a55b140e767495cd59", + "1a4e5bc143bf00e8928403", + "4a54d9b3589d5340a01e23", + "18019c176b4c9453028db8", + "76fed7d89907843db9af52", + "407333b3b6a3bed3ef8920", + "536a736ad3a37793dd9f54", + "5e56a7d976f1a3334f57c3", + "66ffe80af410522139e92f", + "1b0c27c7452322264822f3", + "58320debe89492ceee77e", + "4fbc987e428ed0ce9cb76c", + "70a2d453b688803716fdbf", + "1921f3262afb2f3766f357", + "6e007172a16a9c673e635d", + "527c4b155e3708972293d1", + "2797689917c95a9d4073ae", + "69bb33c18017fddf18d091", + "165ff53589519199fc1846", + "171e59c89024b148534f1b", + "23c82ae839bf5380a55acf", + "455c9131bfa1c33274be37", + "4bacbc68650c41520d312c", + "1c35e13f8ffb7c470fa61c", + "6b4728ee168cd23e2fe47c", + "22e321253c3e0fb875c4df", + "6077a88144957827c07205", + "4309c1c59a581af63d922d", + "1b1ca5d6c688c4cf99448d", + "31a504d1dcc251075e4436", + "223160cdd1bfa322ca3e6c", + "3601174a7dc823bf4dc3a6", + "6da3828f2d4926651f7a27", + "7de4927696bdd6d3b718", + "7bb4f9d707b4ee3a20e779", + "343dad4f059acb87d3b0e2", + "4e501beb4617be0f02deb4", + "3943e926fbe3d426004ea9", + "4b35e35e82bffb49d0d830", + "6520599b30ba3568ad0f09", + "2a48d89ce122dfa7deba2f", + "19b666810d736e639b51f2", + "1ccd174e9aa4e58e7414bc", + "475e84f70334cc0bc8292", + "393fe0be8f011593a7e1ef", + "17276a59aa9630c1141c17", + "7d0578a8908ba294259bd", + "4a9e2e5d8ad0e2e82aa7de", + "63e0dbdfb13b4fbb46f00c", + "310e395e429c4494a5f850", + "7cc0116bd0bc164835ee72", + "634478b621f7f0a455c48c", + "397f144a181805e1a097c9", + "53016aa1427381b9f28ea5", + "76c2f0ba37187112ee4d4d", + "2bee268df09cc40864a917", + "7851b3168b92e5daed021f", + "149e6a0b6c6543ae895e07", + "1dd1b432dc809fe4c879b3", + "2ad2546b270547fc24541b", + "2015aa6fc7e48fa3bc5ab5", + "38596ed050f14596adc07f", + "1d2b9ca2f44294070d4e86", + "3778fd3a46ffde4755b6ce", + "74bb588b5553c2b2d4ac78", + "3d1155c4a53835d991a0f", + "35865b2ca16d3453781f41", + "6ba1300374acd487b23577", + "3f68fa1a9ab7772758d0ba", + "30a3461d63ca9807464dd6", + "552aca5af025ea1e84aadb", + "32aafc640e8c99bda8faa7", + "2fb170a11f1aecdf586d25", + "751e9eb348bc8239d6e118", + "7fc2bcc524b4326eb8303d", + "1cc2526113f2bae9b540c1", + "6a437e22c95fc6c6a4449d", + "df261ad3b5157a525bb81", + "690aa96130f8c533d77ce4", + "2f58f2df794a35875efc99", + "19772e34181f57b670bf9", + "60617400353c1eb8e8832b", + "7136b3dd116ed121aab68", + "4c95bed884bd87ec1d5e70", + "68fa3ecc3845db5d523ad9", + "4818e9ef0ea7625cfc3d0", + "27ec8c6636679988dd1267", + "57d88b5e0b434eb1a0dc08", + "47a1f466100bf70dd5689", + "55afbc51e7c2cc748942ac", + "75066462fdbbc7301e209b", + "72b5d8f8e65cb7509a93d8", + "38d9d05f9463a537f470b2", + "2f39a2788d5c2a24e16acc", + "5f4e7c70ff55ff2f888f05", + "735cfad9acf49090fb7037", + "6a716dae106b9aeff2133e", + "1c90fea5f39d8ac4dfc2a3", + "3a8c5a9525f5d62cea294d", + "498104aa12355244a9b0d6", + "414e761d40341e7f97c304", + "16d5205447831696c5d6a0", + "3cb5a124ce563c3967dbc3", + "899b1ac6f72ffff8aedfc", + "34eea7a66e8ff3dcc8988e", + "5f80095f2580ec4cf13b51", + "4d7566cd294f75be6620f3", + "506d84c9f4d4bc400fdd25", + "5a8a9b5c659b71e837ea18", + "c16d15fea9d61c8df5121", + "3a7a488015e75feec809f8", + "6fe27c77d57e2feb8cbcbf", + "452231c3bcde7b7b5b0af8", + "760f3656c1130b21d369d9", + "39a0c4e1da321f1bc126f4", + "3315173915ca23d8c1b814", + "1cec8c96472b84936bbc22", + "3c70a3f0e9c5b206031a33", + "7cec29d14a0eefb222bde7", + "760df490123f6613b0a970", + "5bf795c6d548a19b6ac340", + "5569560418e73ff9db709" }; #endif /* __PARAMS_H__ */ - diff --git a/third_party/prio/prio/poly.c b/third_party/prio/prio/poly.c index 22d4f4595b0d..ad064bcf1f17 100644 --- a/third_party/prio/prio/poly.c +++ b/third_party/prio/prio/poly.c @@ -1,9 +1,9 @@ /* * Copyright (c) 2018, Henry Corrigan-Gibbs - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include @@ -16,109 +16,110 @@ * A nice exposition of the recursive FFT/DFT algorithm we implement * is in the book: * - * "Modern Computer Algebra" - * by Von zur Gathen and Gerhard. + * "Modern Computer Algebra" + * by Von zur Gathen and Gerhard. * Cambridge University Press, 2013. * * They present this algorithm as Algorithm 8.14. */ static SECStatus -fft_recurse (mp_int *out, const mp_int *mod, int n, - const mp_int *roots, const mp_int *ys, - mp_int *tmp, mp_int *ySub, mp_int *rootsSub) +fft_recurse(mp_int* out, const mp_int* mod, int n, const mp_int* roots, + const mp_int* ys, mp_int* tmp, mp_int* ySub, mp_int* rootsSub) { if (n == 1) { - MP_CHECK (mp_copy (&ys[0], &out[0])); + MP_CHECK(mp_copy(&ys[0], &out[0])); return SECSuccess; } - // Recurse on the first half - for (int i=0; i cfg->n_roots) + if (n_points > cfg->n_roots) return SECFailure; - const mp_int *roots_in = invert ? cfg->rootsInv->data : cfg->roots->data; + const mp_int* roots_in = invert ? cfg->rootsInv->data : cfg->roots->data; const int step_size = cfg->n_roots / n_points; - for (int i=0; i < n_points; i++) { + for (int i = 0; i < n_points; i++) { roots_out[i] = roots_in[i * step_size]; } @@ -126,63 +127,62 @@ poly_fft_get_roots (mp_int *roots_out, int n_points, const_PrioConfig cfg, bool } SECStatus -poly_fft (MPArray points_out, const_MPArray points_in, - const_PrioConfig cfg, bool invert) +poly_fft(MPArray points_out, const_MPArray points_in, const_PrioConfig cfg, + bool invert) { SECStatus rv = SECSuccess; const int n_points = points_in->len; if (points_out->len != points_in->len) return SECFailure; - if (n_points > cfg->n_roots) + if (n_points > cfg->n_roots) return SECFailure; - if (cfg->n_roots % n_points != 0) + if (cfg->n_roots % n_points != 0) return SECFailure; mp_int scaled_roots[n_points]; - P_CHECK (poly_fft_get_roots (scaled_roots, n_points, cfg, invert)); + P_CHECK(poly_fft_get_roots(scaled_roots, n_points, cfg, invert)); - MP_CHECK (fft_interpolate_raw (points_out->data, points_in->data, n_points, - scaled_roots, &cfg->modulus, invert)); + MP_CHECK(fft_interpolate_raw(points_out->data, points_in->data, n_points, + scaled_roots, &cfg->modulus, invert)); return SECSuccess; } - -SECStatus -poly_eval (mp_int *value, const_MPArray coeffs, const mp_int *eval_at, - const_PrioConfig cfg) -{ +SECStatus +poly_eval(mp_int* value, const_MPArray coeffs, const mp_int* eval_at, + const_PrioConfig cfg) +{ SECStatus rv = SECSuccess; const int n = coeffs->len; // Use Horner's method to evaluate the polynomial at the point // `eval_at` - mp_copy (&coeffs->data[n-1], value); - for (int i=n-2; i >= 0; i--) { - MP_CHECK (mp_mulmod (value, eval_at, &cfg->modulus, value)); - MP_CHECK (mp_addmod (value, &coeffs->data[i], &cfg->modulus, value)); + mp_copy(&coeffs->data[n - 1], value); + for (int i = n - 2; i >= 0; i--) { + MP_CHECK(mp_mulmod(value, eval_at, &cfg->modulus, value)); + MP_CHECK(mp_addmod(value, &coeffs->data[i], &cfg->modulus, value)); } return rv; } SECStatus -poly_interp_evaluate (mp_int *value, const_MPArray poly_points, - const mp_int *eval_at, const_PrioConfig cfg) +poly_interp_evaluate(mp_int* value, const_MPArray poly_points, + const mp_int* eval_at, const_PrioConfig cfg) { SECStatus rv; MPArray coeffs = NULL; const int N = poly_points->len; mp_int roots[N]; - - P_CHECKA (coeffs = MPArray_new (N)); - P_CHECKC (poly_fft_get_roots (roots, N, cfg, false)); + + P_CHECKA(coeffs = MPArray_new(N)); + P_CHECKC(poly_fft_get_roots(roots, N, cfg, false)); // Interpolate polynomial through roots of unity - P_CHECKC (poly_fft (coeffs, poly_points, cfg, true)) - P_CHECKC (poly_eval (value, coeffs, eval_at, cfg)); + P_CHECKC(poly_fft(coeffs, poly_points, cfg, true)) + P_CHECKC(poly_eval(value, coeffs, eval_at, cfg)); cleanup: - MPArray_clear (coeffs); + MPArray_clear(coeffs); return rv; } diff --git a/third_party/prio/prio/poly.h b/third_party/prio/prio/poly.h index 5f8e28f1b39a..c2dfeae7cffd 100644 --- a/third_party/prio/prio/poly.h +++ b/third_party/prio/prio/poly.h @@ -1,9 +1,9 @@ /* * Copyright (c) 2018, Henry Corrigan-Gibbs - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef _FFT__H @@ -21,39 +21,36 @@ * of two and must be no longer than the number of precomputed * roots in the PrioConfig object passed in. */ -SECStatus poly_fft(MPArray points_out, const_MPArray points_in, - const_PrioConfig cfg, bool invert); +SECStatus poly_fft(MPArray points_out, const_MPArray points_in, + const_PrioConfig cfg, bool invert); -/* +/* * Get an array - * (r^0, r^1, r^2, ... ) + * (r^0, r^1, r^2, ... ) * where r is an n-th root of unity, for n a power of two * less than cfg->n_roots. * - * Do NOT mp_clear() the mp_ints stored in roots_out. + * Do NOT mp_clear() the mp_ints stored in roots_out. * These are owned by the PrioConfig object. */ -SECStatus poly_fft_get_roots (mp_int *roots_out, int n_points, - const_PrioConfig cfg, bool invert); - - +SECStatus poly_fft_get_roots(mp_int* roots_out, int n_points, + const_PrioConfig cfg, bool invert); /* * Evaluate the polynomial specified by the coefficients * at the point `eval_at` and return the result as `value`. */ -SECStatus poly_eval (mp_int *value, const_MPArray coeffs, - const mp_int *eval_at, const_PrioConfig cfg); - +SECStatus poly_eval(mp_int* value, const_MPArray coeffs, const mp_int* eval_at, + const_PrioConfig cfg); /* - * Interpolate the polynomial through the points + * Interpolate the polynomial through the points * (x_1, y_1), ..., (x_N, y_N), * where x_i is an N-th root of unity and the y_i values are - * specified by `poly_points`. Evaluate the resulting polynomial + * specified by `poly_points`. Evaluate the resulting polynomial * at the point `eval_at`. Return the result as `value`. */ -SECStatus poly_interp_evaluate (mp_int *value, const_MPArray poly_points, - const mp_int *eval_at, const_PrioConfig cfg); +SECStatus poly_interp_evaluate(mp_int* value, const_MPArray poly_points, + const mp_int* eval_at, const_PrioConfig cfg); #endif diff --git a/third_party/prio/prio/prg.c b/third_party/prio/prio/prg.c index 992c6dea52d2..3c3708e29ae1 100644 --- a/third_party/prio/prio/prg.c +++ b/third_party/prio/prio/prg.c @@ -1,14 +1,14 @@ /* * Copyright (c) 2018, Henry Corrigan-Gibbs - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#include #include -#include -#include +#include #include #include "prg.h" @@ -16,23 +16,25 @@ #include "share.h" #include "util.h" -struct prg { - PK11SlotInfo *slot; - PK11SymKey *key; - PK11Context *ctx; +struct prg +{ + PK11SlotInfo* slot; + PK11SymKey* key; + PK11Context* ctx; }; -SECStatus -PrioPRGSeed_randomize (PrioPRGSeed *key) +SECStatus +PrioPRGSeed_randomize(PrioPRGSeed* key) { - return rand_bytes ((unsigned char *)key, PRG_SEED_LENGTH); + return rand_bytes((unsigned char*)key, PRG_SEED_LENGTH); } -PRG -PRG_new (const PrioPRGSeed key_in) +PRG +PRG_new(const PrioPRGSeed key_in) { - PRG prg = malloc (sizeof (struct prg)); - if (!prg) return NULL; + PRG prg = malloc(sizeof(struct prg)); + if (!prg) + return NULL; prg->slot = NULL; prg->key = NULL; prg->ctx = NULL; @@ -40,106 +42,104 @@ PRG_new (const PrioPRGSeed key_in) SECStatus rv = SECSuccess; const CK_MECHANISM_TYPE cipher = CKM_AES_CTR; - P_CHECKA (prg->slot = PK11_GetInternalSlot ()); + P_CHECKA(prg->slot = PK11_GetInternalSlot()); // Create a mutable copy of the key. PrioPRGSeed key_mut; - memcpy (key_mut, key_in, PRG_SEED_LENGTH); + memcpy(key_mut, key_in, PRG_SEED_LENGTH); - SECItem keyItem = {siBuffer, key_mut, PRG_SEED_LENGTH}; + SECItem keyItem = { siBuffer, key_mut, PRG_SEED_LENGTH }; // The IV can be all zeros since we only encrypt once with // each AES key. - CK_AES_CTR_PARAMS param = {128, {}}; - SECItem paramItem = {siBuffer, (void *)¶m, sizeof(CK_AES_CTR_PARAMS)}; + CK_AES_CTR_PARAMS param = { 128, {} }; + SECItem paramItem = { siBuffer, (void*)¶m, sizeof(CK_AES_CTR_PARAMS) }; - P_CHECKA (prg->key = PK11_ImportSymKey (prg->slot, cipher, PK11_OriginUnwrap, - CKA_ENCRYPT, &keyItem, NULL)); + P_CHECKA(prg->key = PK11_ImportSymKey(prg->slot, cipher, PK11_OriginUnwrap, + CKA_ENCRYPT, &keyItem, NULL)); - P_CHECKA (prg->ctx = PK11_CreateContextBySymKey(cipher, CKA_ENCRYPT, - prg->key, ¶mItem)); + P_CHECKA(prg->ctx = PK11_CreateContextBySymKey(cipher, CKA_ENCRYPT, prg->key, + ¶mItem)); cleanup: if (rv != SECSuccess) { - PRG_clear (prg); + PRG_clear(prg); prg = NULL; } return prg; } - -void -PRG_clear (PRG prg) +void +PRG_clear(PRG prg) { - if (!prg) return; + if (!prg) + return; if (prg->key) - PK11_FreeSymKey (prg->key); + PK11_FreeSymKey(prg->key); if (prg->slot) - PK11_FreeSlot (prg->slot); + PK11_FreeSlot(prg->slot); if (prg->ctx) - PK11_DestroyContext (prg->ctx, PR_TRUE); + PK11_DestroyContext(prg->ctx, PR_TRUE); - free (prg); + free(prg); } -static SECStatus -PRG_get_bytes_internal (void *prg_vp, unsigned char *bytes, size_t len) +static SECStatus +PRG_get_bytes_internal(void* prg_vp, unsigned char* bytes, size_t len) { PRG prg = (PRG)prg_vp; unsigned char in[len]; - memset (in, 0, len); + memset(in, 0, len); int outlen; - SECStatus rv = PK11_CipherOp (prg->ctx, bytes, &outlen, len, in, len); - return (rv != SECSuccess || (size_t)outlen != len) ? SECFailure: SECSuccess; -} - -SECStatus -PRG_get_bytes (PRG prg, unsigned char *bytes, size_t len) -{ - return PRG_get_bytes_internal ((void *)prg, bytes, len); -} - -SECStatus -PRG_get_int (PRG prg, mp_int *out, const mp_int *max) -{ - return rand_int_rng (out, max, &PRG_get_bytes_internal, (void *)prg); + SECStatus rv = PK11_CipherOp(prg->ctx, bytes, &outlen, len, in, len); + return (rv != SECSuccess || (size_t)outlen != len) ? SECFailure : SECSuccess; } SECStatus -PRG_get_array (PRG prg, MPArray dst, const mp_int *mod) +PRG_get_bytes(PRG prg, unsigned char* bytes, size_t len) +{ + return PRG_get_bytes_internal((void*)prg, bytes, len); +} + +SECStatus +PRG_get_int(PRG prg, mp_int* out, const mp_int* max) +{ + return rand_int_rng(out, max, &PRG_get_bytes_internal, (void*)prg); +} + +SECStatus +PRG_get_array(PRG prg, MPArray dst, const mp_int* mod) { SECStatus rv; - for (int i=0; ilen; i++) { - P_CHECK (PRG_get_int (prg, &dst->data[i], mod)); + for (int i = 0; i < dst->len; i++) { + P_CHECK(PRG_get_int(prg, &dst->data[i], mod)); } return SECSuccess; } SECStatus -PRG_share_int (PRG prgB, mp_int *shareA, const mp_int *src, const_PrioConfig cfg) +PRG_share_int(PRG prgB, mp_int* shareA, const mp_int* src, const_PrioConfig cfg) { SECStatus rv = SECSuccess; mp_int tmp; - MP_DIGITS (&tmp) = NULL; + MP_DIGITS(&tmp) = NULL; - MP_CHECKC (mp_init (&tmp)); - P_CHECKC (PRG_get_int (prgB, &tmp, &cfg->modulus)); - MP_CHECKC (mp_submod (src, &tmp, &cfg->modulus, shareA)); + MP_CHECKC(mp_init(&tmp)); + P_CHECKC(PRG_get_int(prgB, &tmp, &cfg->modulus)); + MP_CHECKC(mp_submod(src, &tmp, &cfg->modulus, shareA)); cleanup: - mp_clear (&tmp); + mp_clear(&tmp); return rv; } - -SECStatus -PRG_share_array (PRG prgB, MPArray arrA, - const_MPArray src, const_PrioConfig cfg) +SECStatus +PRG_share_array(PRG prgB, MPArray arrA, const_MPArray src, const_PrioConfig cfg) { SECStatus rv = SECSuccess; if (arrA->len != src->len) @@ -147,10 +147,9 @@ PRG_share_array (PRG prgB, MPArray arrA, const int len = src->len; - for (int i=0; i < len; i++) { - P_CHECK(PRG_share_int (prgB, &arrA->data[i], &src->data[i], cfg)); + for (int i = 0; i < len; i++) { + P_CHECK(PRG_share_int(prgB, &arrA->data[i], &src->data[i], cfg)); } return rv; - } diff --git a/third_party/prio/prio/prg.h b/third_party/prio/prio/prg.h index 020f72856839..5dc6520ceecf 100644 --- a/third_party/prio/prio/prg.h +++ b/third_party/prio/prio/prg.h @@ -1,62 +1,60 @@ /* * Copyright (c) 2018, Henry Corrigan-Gibbs - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef __PRG_H__ #define __PRG_H__ +#include #include -#include #include #include "config.h" -typedef struct prg *PRG; -typedef const struct prg *const_PRG; +typedef struct prg* PRG; +typedef const struct prg* const_PRG; -/* +/* * Initialize or destroy a pseudo-random generator. */ -PRG PRG_new (const PrioPRGSeed key); -void PRG_clear (PRG prg); +PRG PRG_new(const PrioPRGSeed key); +void PRG_clear(PRG prg); -/* +/* * Produce the next bytes of output from the PRG. */ -SECStatus PRG_get_bytes (PRG prg, unsigned char *bytes, size_t len); +SECStatus PRG_get_bytes(PRG prg, unsigned char* bytes, size_t len); /* * Use the PRG output to sample a big integer x in the range * 0 <= x < max. */ -SECStatus PRG_get_int (PRG prg, mp_int *out, const mp_int *max); +SECStatus PRG_get_int(PRG prg, mp_int* out, const mp_int* max); /* * Use secret sharing to split the int src into two shares. * Use PRG to generate the value `shareB`. * The mp_ints must be initialized. */ -SECStatus PRG_share_int (PRG prg, mp_int *shareA, const mp_int *src, - const_PrioConfig cfg); +SECStatus PRG_share_int(PRG prg, mp_int* shareA, const mp_int* src, + const_PrioConfig cfg); -/* +/* * Set each item in the array to a pseudorandom value in the range * [0, mod), where the values are generated using the PRG. */ -SECStatus PRG_get_array (PRG prg, MPArray arr, const mp_int *mod); +SECStatus PRG_get_array(PRG prg, MPArray arr, const mp_int* mod); -/* +/* * Secret shares the array in `src` into `arrA` using randomness * provided by `prgB`. The arrays `src` and `arrA` must be the same * length. */ -SECStatus PRG_share_array (PRG prgB, MPArray arrA, - const_MPArray src, const_PrioConfig cfg); - +SECStatus PRG_share_array(PRG prgB, MPArray arrA, const_MPArray src, + const_PrioConfig cfg); #endif /* __PRG_H__ */ - diff --git a/third_party/prio/prio/rand.c b/third_party/prio/prio/rand.c index d13ae924f7e5..7f47a4d386e8 100644 --- a/third_party/prio/prio/rand.c +++ b/third_party/prio/prio/rand.c @@ -1,16 +1,16 @@ /* * Copyright (c) 2018, Henry Corrigan-Gibbs - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include #include -#include -#include -#include +#include +#include +#include #include "debug.h" #include "rand.h" @@ -18,44 +18,41 @@ #define CHUNK_SIZE 8192 -static NSSInitContext *prioGlobalContext = NULL; +static NSSInitContext* prioGlobalContext = NULL; SECStatus -rand_init (void) +rand_init(void) { - if (prioGlobalContext) + if (prioGlobalContext) return SECSuccess; - prioGlobalContext = NSS_InitContext ("", "", "", "", NULL, - NSS_INIT_READONLY | - NSS_INIT_NOCERTDB | - NSS_INIT_NOMODDB | - NSS_INIT_FORCEOPEN | - NSS_INIT_NOROOTINIT); + prioGlobalContext = + NSS_InitContext("", "", "", "", NULL, + NSS_INIT_READONLY | NSS_INIT_NOCERTDB | NSS_INIT_NOMODDB | + NSS_INIT_FORCEOPEN | NSS_INIT_NOROOTINIT); return (prioGlobalContext != NULL) ? SECSuccess : SECFailure; } -static SECStatus -rand_bytes_internal (void *user_data, unsigned char *out, size_t n_bytes) +static SECStatus +rand_bytes_internal(void* user_data, unsigned char* out, size_t n_bytes) { // No pointer should ever be passed in. if (user_data != NULL) return SECFailure; - if (!NSS_IsInitialized ()) { - PRIO_DEBUG ("NSS not initialized. Call rand_init() first."); + if (!NSS_IsInitialized()) { + PRIO_DEBUG("NSS not initialized. Call rand_init() first."); return SECFailure; } SECStatus rv = SECFailure; int to_go = n_bytes; - unsigned char *cp = out; + unsigned char* cp = out; while (to_go) { - int to_gen = MIN (CHUNK_SIZE, to_go); - if ((rv = PK11_GenerateRandom (cp, to_gen)) != SECSuccess) - { - PRIO_DEBUG ("Error calling PK11_GenerateRandom"); + int to_gen = MIN(CHUNK_SIZE, to_go); + if ((rv = PK11_GenerateRandom(cp, to_gen)) != SECSuccess) { + PRIO_DEBUG("Error calling PK11_GenerateRandom"); return SECFailure; } @@ -66,67 +63,67 @@ rand_bytes_internal (void *user_data, unsigned char *out, size_t n_bytes) return rv; } -SECStatus -rand_bytes (unsigned char *out, size_t n_bytes) +SECStatus +rand_bytes(unsigned char* out, size_t n_bytes) { - return rand_bytes_internal (NULL, out, n_bytes); + return rand_bytes_internal(NULL, out, n_bytes); } SECStatus -rand_int (mp_int *out, const mp_int *max) +rand_int(mp_int* out, const mp_int* max) { - return rand_int_rng (out, max, &rand_bytes_internal, NULL); + return rand_int_rng(out, max, &rand_bytes_internal, NULL); } SECStatus -rand_int_rng (mp_int *out, const mp_int *max, - RandBytesFunc rng_func, void *user_data) +rand_int_rng(mp_int* out, const mp_int* max, RandBytesFunc rng_func, + void* user_data) { SECStatus rv = SECSuccess; // Ensure max value is > 0 - if (mp_cmp_z (max) == 0) + if (mp_cmp_z(max) == 0) return SECFailure; // Compute max-1, which tells us the largest // value we will ever need to generate. - MP_CHECK (mp_sub_d (max, 1, out)); + MP_CHECK(mp_sub_d(max, 1, out)); - const int nbytes = mp_unsigned_octet_size (out); + const int nbytes = mp_unsigned_octet_size(out); - // Figure out how many MSBs we need to get in the - // most-significant byte. + // Figure out how many MSBs we need to get in the + // most-significant byte. unsigned char max_bytes[nbytes]; - MP_CHECK (mp_to_fixlen_octets (out, max_bytes, nbytes)); - const unsigned char mask = msb_mask (max_bytes[0]); + MP_CHECK(mp_to_fixlen_octets(out, max_bytes, nbytes)); + const unsigned char mask = msb_mask(max_bytes[0]); // Buffer to store the pseudo-random bytes unsigned char buf[nbytes]; do { // Use rejection sampling to find a value strictly less than max. - P_CHECK (rng_func (user_data, buf, nbytes)); + P_CHECK(rng_func(user_data, buf, nbytes)); // Mask off high-order bits that we will never need. - P_CHECK (rng_func (user_data, &buf[0], 1)); - if (mask) buf[0] &= mask; + P_CHECK(rng_func(user_data, &buf[0], 1)); + if (mask) + buf[0] &= mask; - MP_CHECK (mp_read_unsigned_octets (out, buf, nbytes)); - } while (mp_cmp (out, max) != -1); + MP_CHECK(mp_read_unsigned_octets(out, buf, nbytes)); + } while (mp_cmp(out, max) != -1); return 0; } void -rand_clear (void) +rand_clear(void) { if (prioGlobalContext) { - NSS_ShutdownContext (prioGlobalContext); + NSS_ShutdownContext(prioGlobalContext); #ifdef DO_PR_CLEANUP - PR_Cleanup (); -#endif + PR_Cleanup(); +#endif } prioGlobalContext = NULL; } - diff --git a/third_party/prio/prio/rand.h b/third_party/prio/prio/rand.h index ea79beb7016d..ec610a19dc93 100644 --- a/third_party/prio/prio/rand.h +++ b/third_party/prio/prio/rand.h @@ -1,43 +1,44 @@ /* * Copyright (c) 2018, Henry Corrigan-Gibbs - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef __RAND_H__ #define __RAND_H__ #include -#include +#include #include /* * Typedef for function pointer. A function pointer of type RandBytesFunc * points to a function that fills the buffer `out` of with `len` random bytes. */ -typedef SECStatus (*RandBytesFunc) (void *user_data, unsigned char *out, size_t len); +typedef SECStatus (*RandBytesFunc)(void* user_data, unsigned char* out, + size_t len); -/* +/* * Initialize or cleanup the global random number generator * state that NSS uses. */ -SECStatus rand_init (void); -void rand_clear (void); +SECStatus rand_init(void); +void rand_clear(void); -/* +/* * Generate the specified number of random bytes using the * NSS random number generator. - */ -SECStatus rand_bytes (unsigned char *out, size_t n_bytes); + */ +SECStatus rand_bytes(unsigned char* out, size_t n_bytes); /* * Generate a random number x such that * 0 <= x < max * using the NSS random number generator. */ -SECStatus rand_int (mp_int *out, const mp_int *max); +SECStatus rand_int(mp_int* out, const mp_int* max); /* * Generate a random number x such that @@ -47,8 +48,7 @@ SECStatus rand_int (mp_int *out, const mp_int *max); * The pointer user_data is passed to RandBytesFung `rng` as a first * argument. */ -SECStatus rand_int_rng (mp_int *out, const mp_int *max, - RandBytesFunc rng, void *user_data); +SECStatus rand_int_rng(mp_int* out, const mp_int* max, RandBytesFunc rng, + void* user_data); #endif /* __RAND_H__ */ - diff --git a/third_party/prio/prio/serial.c b/third_party/prio/prio/serial.c index 5282e89c104f..4b5221ac0bd4 100644 --- a/third_party/prio/prio/serial.c +++ b/third_party/prio/prio/serial.c @@ -1,9 +1,9 @@ /* * Copyright (c) 2018, Henry Corrigan-Gibbs - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include @@ -17,277 +17,277 @@ #define MSGPACK_OK 0 -static SECStatus -serial_write_mp_int (msgpack_packer *pk, const mp_int *n) +static SECStatus +serial_write_mp_int(msgpack_packer* pk, const mp_int* n) { SECStatus rv = SECSuccess; - unsigned int n_size = mp_unsigned_octet_size (n); + unsigned int n_size = mp_unsigned_octet_size(n); unsigned char data[n_size]; - MP_CHECK (mp_to_fixlen_octets (n, data, n_size)); + MP_CHECK(mp_to_fixlen_octets(n, data, n_size)); - P_CHECK (msgpack_pack_str (pk, n_size)); - P_CHECK (msgpack_pack_str_body (pk, data, n_size)); + P_CHECK(msgpack_pack_str(pk, n_size)); + P_CHECK(msgpack_pack_str_body(pk, data, n_size)); return rv; } static SECStatus -object_to_mp_int (msgpack_object *obj, mp_int *n, const mp_int *max) +object_to_mp_int(msgpack_object* obj, mp_int* n, const mp_int* max) { SECStatus rv = SECSuccess; - P_CHECKCB (obj != NULL); - P_CHECKCB (obj->type == MSGPACK_OBJECT_STR); - P_CHECKCB (n != NULL); + P_CHECKCB(obj != NULL); + P_CHECKCB(obj->type == MSGPACK_OBJECT_STR); + P_CHECKCB(n != NULL); msgpack_object_str s = obj->via.str; - P_CHECKCB (s.ptr != NULL); - MP_CHECKC (mp_read_unsigned_octets (n, (unsigned char *)s.ptr, s.size)); + P_CHECKCB(s.ptr != NULL); + MP_CHECKC(mp_read_unsigned_octets(n, (unsigned char*)s.ptr, s.size)); - P_CHECKCB (mp_cmp_z (n) >= 0); - P_CHECKCB (mp_cmp (n, max) < 0); + P_CHECKCB(mp_cmp_z(n) >= 0); + P_CHECKCB(mp_cmp(n, max) < 0); cleanup: return rv; } -static SECStatus -serial_read_mp_int (msgpack_unpacker *upk, mp_int *n, const mp_int *max) +static SECStatus +serial_read_mp_int(msgpack_unpacker* upk, mp_int* n, const mp_int* max) { SECStatus rv = SECSuccess; - P_CHECKCB (upk != NULL); - P_CHECKCB (n != NULL); - P_CHECKCB (max != NULL); + P_CHECKCB(upk != NULL); + P_CHECKCB(n != NULL); + P_CHECKCB(max != NULL); msgpack_unpacked res; - msgpack_unpacked_init (&res); - UP_CHECK (msgpack_unpacker_next (upk, &res)) + msgpack_unpacked_init(&res); + UP_CHECK(msgpack_unpacker_next(upk, &res)) msgpack_object obj = res.data; - P_CHECKC (object_to_mp_int (&obj, n, max)); + P_CHECKC(object_to_mp_int(&obj, n, max)); cleanup: - msgpack_unpacked_destroy (&res); + msgpack_unpacked_destroy(&res); return rv; } -static SECStatus -serial_read_int (msgpack_unpacker *upk, int *n) +static SECStatus +serial_read_int(msgpack_unpacker* upk, int* n) { SECStatus rv = SECSuccess; - P_CHECKCB (upk != NULL); - P_CHECKCB (n != NULL); + P_CHECKCB(upk != NULL); + P_CHECKCB(n != NULL); msgpack_unpacked res; - msgpack_unpacked_init (&res); - UP_CHECK (msgpack_unpacker_next (upk, &res)) + msgpack_unpacked_init(&res); + UP_CHECK(msgpack_unpacker_next(upk, &res)) msgpack_object obj = res.data; - P_CHECKCB (obj.type == MSGPACK_OBJECT_POSITIVE_INTEGER); + P_CHECKCB(obj.type == MSGPACK_OBJECT_POSITIVE_INTEGER); *n = obj.via.i64; cleanup: - msgpack_unpacked_destroy (&res); + msgpack_unpacked_destroy(&res); return rv; } -static SECStatus -serial_write_mp_array (msgpack_packer *pk, const_MPArray arr) +static SECStatus +serial_write_mp_array(msgpack_packer* pk, const_MPArray arr) { SECStatus rv = SECSuccess; - P_CHECKCB (pk != NULL); - P_CHECKCB (arr != NULL); + P_CHECKCB(pk != NULL); + P_CHECKCB(arr != NULL); - P_CHECK (msgpack_pack_array (pk, arr->len)); + P_CHECK(msgpack_pack_array(pk, arr->len)); for (int i = 0; i < arr->len; i++) { - P_CHECK (serial_write_mp_int (pk, &arr->data[i])); + P_CHECK(serial_write_mp_int(pk, &arr->data[i])); } cleanup: return rv; } -static SECStatus -serial_read_mp_array (msgpack_unpacker *upk, MPArray arr, size_t len, const mp_int - *max) +static SECStatus +serial_read_mp_array(msgpack_unpacker* upk, MPArray arr, size_t len, + const mp_int* max) { SECStatus rv = SECSuccess; - P_CHECKCB (upk != NULL); - P_CHECKCB (arr != NULL); - P_CHECKCB (max != NULL); + P_CHECKCB(upk != NULL); + P_CHECKCB(arr != NULL); + P_CHECKCB(max != NULL); msgpack_unpacked res; - msgpack_unpacked_init (&res); - UP_CHECK (msgpack_unpacker_next (upk, &res)) + msgpack_unpacked_init(&res); + UP_CHECK(msgpack_unpacker_next(upk, &res)) msgpack_object obj = res.data; - P_CHECKCB (obj.type == MSGPACK_OBJECT_ARRAY); + P_CHECKCB(obj.type == MSGPACK_OBJECT_ARRAY); msgpack_object_array objarr = obj.via.array; - P_CHECKCB (objarr.size == len); + P_CHECKCB(objarr.size == len); - P_CHECKC (MPArray_resize (arr, len)); - for (unsigned int i=0; idata[i], max)); + P_CHECKC(MPArray_resize(arr, len)); + for (unsigned int i = 0; i < len; i++) { + P_CHECKC(object_to_mp_int(&objarr.ptr[i], &arr->data[i], max)); } cleanup: - msgpack_unpacked_destroy (&res); + msgpack_unpacked_destroy(&res); return rv; } - -static SECStatus -serial_write_beaver_triple (msgpack_packer *pk, const_BeaverTriple t) +static SECStatus +serial_write_beaver_triple(msgpack_packer* pk, const_BeaverTriple t) { SECStatus rv = SECSuccess; - P_CHECKCB (pk != NULL); - P_CHECKCB (t != NULL); + P_CHECKCB(pk != NULL); + P_CHECKCB(t != NULL); - P_CHECK (serial_write_mp_int (pk, &t->a)); - P_CHECK (serial_write_mp_int (pk, &t->b)); - P_CHECK (serial_write_mp_int (pk, &t->c)); + P_CHECK(serial_write_mp_int(pk, &t->a)); + P_CHECK(serial_write_mp_int(pk, &t->b)); + P_CHECK(serial_write_mp_int(pk, &t->c)); cleanup: return rv; } -static SECStatus -serial_read_beaver_triple (msgpack_unpacker *pk, BeaverTriple t, const mp_int *max) +static SECStatus +serial_read_beaver_triple(msgpack_unpacker* pk, BeaverTriple t, + const mp_int* max) { SECStatus rv = SECSuccess; - P_CHECKCB (pk != NULL); - P_CHECKCB (t != NULL); - P_CHECKCB (max != NULL); + P_CHECKCB(pk != NULL); + P_CHECKCB(t != NULL); + P_CHECKCB(max != NULL); - P_CHECK (serial_read_mp_int (pk, &t->a, max)); - P_CHECK (serial_read_mp_int (pk, &t->b, max)); - P_CHECK (serial_read_mp_int (pk, &t->c, max)); + P_CHECK(serial_read_mp_int(pk, &t->a, max)); + P_CHECK(serial_read_mp_int(pk, &t->b, max)); + P_CHECK(serial_read_mp_int(pk, &t->c, max)); cleanup: return rv; } -static SECStatus -serial_write_server_a_data (msgpack_packer *pk, const struct server_a_data *A) +static SECStatus +serial_write_server_a_data(msgpack_packer* pk, const struct server_a_data* A) { SECStatus rv = SECSuccess; - P_CHECKCB (pk != NULL); - P_CHECKCB (A != NULL); + P_CHECKCB(pk != NULL); + P_CHECKCB(A != NULL); - P_CHECK (serial_write_mp_array (pk, A->data_shares)); - P_CHECK (serial_write_mp_array (pk, A->h_points)); + P_CHECK(serial_write_mp_array(pk, A->data_shares)); + P_CHECK(serial_write_mp_array(pk, A->h_points)); cleanup: return rv; } -static SECStatus -serial_read_server_a_data (msgpack_unpacker *upk, struct server_a_data *A, - const_PrioConfig cfg) +static SECStatus +serial_read_server_a_data(msgpack_unpacker* upk, struct server_a_data* A, + const_PrioConfig cfg) { SECStatus rv = SECSuccess; - P_CHECKCB (upk != NULL); - P_CHECKCB (A != NULL); + P_CHECKCB(upk != NULL); + P_CHECKCB(A != NULL); - P_CHECK (serial_read_mp_array (upk, A->data_shares, cfg->num_data_fields, - &cfg->modulus)); - P_CHECK (serial_read_mp_array (upk, A->h_points, PrioConfig_hPoints (cfg), - &cfg->modulus)); + P_CHECK(serial_read_mp_array(upk, A->data_shares, cfg->num_data_fields, + &cfg->modulus)); + P_CHECK(serial_read_mp_array(upk, A->h_points, PrioConfig_hPoints(cfg), + &cfg->modulus)); cleanup: return rv; } -static SECStatus -serial_write_prg_seed (msgpack_packer *pk, const PrioPRGSeed *seed) +static SECStatus +serial_write_prg_seed(msgpack_packer* pk, const PrioPRGSeed* seed) { SECStatus rv = SECSuccess; - P_CHECKCB (pk != NULL); - P_CHECKCB (seed != NULL); + P_CHECKCB(pk != NULL); + P_CHECKCB(seed != NULL); - P_CHECK (msgpack_pack_str (pk, PRG_SEED_LENGTH)); - P_CHECK (msgpack_pack_str_body (pk, seed, PRG_SEED_LENGTH)); + P_CHECK(msgpack_pack_str(pk, PRG_SEED_LENGTH)); + P_CHECK(msgpack_pack_str_body(pk, seed, PRG_SEED_LENGTH)); cleanup: return rv; } -static SECStatus -serial_read_prg_seed (msgpack_unpacker *upk, PrioPRGSeed *seed) +static SECStatus +serial_read_prg_seed(msgpack_unpacker* upk, PrioPRGSeed* seed) { SECStatus rv = SECSuccess; - P_CHECKCB (upk != NULL); - P_CHECKCB (seed != NULL); + P_CHECKCB(upk != NULL); + P_CHECKCB(seed != NULL); msgpack_unpacked res; - msgpack_unpacked_init (&res); - UP_CHECK (msgpack_unpacker_next (upk, &res)) + msgpack_unpacked_init(&res); + UP_CHECK(msgpack_unpacker_next(upk, &res)) msgpack_object obj = res.data; - P_CHECKCB (obj.type == MSGPACK_OBJECT_STR); + P_CHECKCB(obj.type == MSGPACK_OBJECT_STR); msgpack_object_str s = obj.via.str; - P_CHECKCB (s.size == PRG_SEED_LENGTH); - memcpy (seed, s.ptr, PRG_SEED_LENGTH); + P_CHECKCB(s.size == PRG_SEED_LENGTH); + memcpy(seed, s.ptr, PRG_SEED_LENGTH); cleanup: - msgpack_unpacked_destroy (&res); + msgpack_unpacked_destroy(&res); return rv; } -static SECStatus -serial_write_server_b_data (msgpack_packer *pk, const struct server_b_data *B) +static SECStatus +serial_write_server_b_data(msgpack_packer* pk, const struct server_b_data* B) { SECStatus rv = SECSuccess; - P_CHECKCB (pk != NULL); - P_CHECKCB (B != NULL); + P_CHECKCB(pk != NULL); + P_CHECKCB(B != NULL); - rv = serial_write_prg_seed (pk, &B->seed); + rv = serial_write_prg_seed(pk, &B->seed); cleanup: return rv; } -static SECStatus -serial_read_server_b_data (msgpack_unpacker *upk, struct server_b_data *B) +static SECStatus +serial_read_server_b_data(msgpack_unpacker* upk, struct server_b_data* B) { SECStatus rv = SECSuccess; - P_CHECKCB (upk != NULL); - P_CHECKCB (B != NULL); - - rv =serial_read_prg_seed (upk, &B->seed); + P_CHECKCB(upk != NULL); + P_CHECKCB(B != NULL); + + rv = serial_read_prg_seed(upk, &B->seed); cleanup: return rv; } -SECStatus -serial_write_packet_client (msgpack_packer *pk, const_PrioPacketClient p, - const_PrioConfig cfg) +SECStatus +serial_write_packet_client(msgpack_packer* pk, const_PrioPacketClient p, + const_PrioConfig cfg) { SECStatus rv = SECSuccess; - P_CHECKCB (pk != NULL); - P_CHECKCB (p != NULL); + P_CHECKCB(pk != NULL); + P_CHECKCB(p != NULL); - P_CHECK (msgpack_pack_str (pk, cfg->batch_id_len)); - P_CHECK (msgpack_pack_str_body (pk, cfg->batch_id, cfg->batch_id_len)); + P_CHECK(msgpack_pack_str(pk, cfg->batch_id_len)); + P_CHECK(msgpack_pack_str_body(pk, cfg->batch_id, cfg->batch_id_len)); - P_CHECK (serial_write_beaver_triple (pk, p->triple)); + P_CHECK(serial_write_beaver_triple(pk, p->triple)); - P_CHECK (serial_write_mp_int (pk, &p->f0_share)); - P_CHECK (serial_write_mp_int (pk, &p->g0_share)); - P_CHECK (serial_write_mp_int (pk, &p->h0_share)); + P_CHECK(serial_write_mp_int(pk, &p->f0_share)); + P_CHECK(serial_write_mp_int(pk, &p->g0_share)); + P_CHECK(serial_write_mp_int(pk, &p->h0_share)); - P_CHECK (msgpack_pack_int (pk, p->for_server)); + P_CHECK(msgpack_pack_int(pk, p->for_server)); switch (p->for_server) { case PRIO_SERVER_A: - P_CHECK (serial_write_server_a_data (pk, &p->shares.A)); + P_CHECK(serial_write_server_a_data(pk, &p->shares.A)); break; case PRIO_SERVER_B: - P_CHECK (serial_write_server_b_data (pk, &p->shares.B)); + P_CHECK(serial_write_server_b_data(pk, &p->shares.B)); break; default: return SECFailure; @@ -297,146 +297,144 @@ cleanup: return rv; } -SECStatus -serial_read_server_id (msgpack_unpacker *upk, PrioServerId *s) +SECStatus +serial_read_server_id(msgpack_unpacker* upk, PrioServerId* s) { SECStatus rv = SECSuccess; - P_CHECKCB (upk != NULL); - P_CHECKCB (s != NULL); + P_CHECKCB(upk != NULL); + P_CHECKCB(s != NULL); int serv; - P_CHECK (serial_read_int (upk, &serv)); - P_CHECKCB (serv == PRIO_SERVER_A || serv == PRIO_SERVER_B); + P_CHECK(serial_read_int(upk, &serv)); + P_CHECKCB(serv == PRIO_SERVER_A || serv == PRIO_SERVER_B); *s = serv; cleanup: return rv; } -SECStatus -serial_read_packet_client (msgpack_unpacker *upk, PrioPacketClient p, - const_PrioConfig cfg) +SECStatus +serial_read_packet_client(msgpack_unpacker* upk, PrioPacketClient p, + const_PrioConfig cfg) { SECStatus rv = SECSuccess; - P_CHECKCB (upk != NULL); - P_CHECKCB (p != NULL); + P_CHECKCB(upk != NULL); + P_CHECKCB(p != NULL); msgpack_unpacked res; - msgpack_unpacked_init (&res); - UP_CHECK (msgpack_unpacker_next (upk, &res)) + msgpack_unpacked_init(&res); + UP_CHECK(msgpack_unpacker_next(upk, &res)) msgpack_object obj = res.data; - P_CHECKCB (obj.type == MSGPACK_OBJECT_STR); + P_CHECKCB(obj.type == MSGPACK_OBJECT_STR); msgpack_object_str s = obj.via.str; - P_CHECKCB (s.size == cfg->batch_id_len); - P_CHECKCB (!memcmp (s.ptr, (char *)cfg->batch_id, cfg->batch_id_len)); + P_CHECKCB(s.size == cfg->batch_id_len); + P_CHECKCB(!memcmp(s.ptr, (char*)cfg->batch_id, cfg->batch_id_len)); - P_CHECK (serial_read_beaver_triple (upk, p->triple, &cfg->modulus)); + P_CHECK(serial_read_beaver_triple(upk, p->triple, &cfg->modulus)); - P_CHECK (serial_read_mp_int (upk, &p->f0_share, &cfg->modulus)); - P_CHECK (serial_read_mp_int (upk, &p->g0_share, &cfg->modulus)); - P_CHECK (serial_read_mp_int (upk, &p->h0_share, &cfg->modulus)); + P_CHECK(serial_read_mp_int(upk, &p->f0_share, &cfg->modulus)); + P_CHECK(serial_read_mp_int(upk, &p->g0_share, &cfg->modulus)); + P_CHECK(serial_read_mp_int(upk, &p->h0_share, &cfg->modulus)); - P_CHECK (serial_read_server_id (upk, &p->for_server)); + P_CHECK(serial_read_server_id(upk, &p->for_server)); switch (p->for_server) { case PRIO_SERVER_A: - P_CHECK (serial_read_server_a_data (upk, &p->shares.A, cfg)); + P_CHECK(serial_read_server_a_data(upk, &p->shares.A, cfg)); break; case PRIO_SERVER_B: - P_CHECK (serial_read_server_b_data (upk, &p->shares.B)); + P_CHECK(serial_read_server_b_data(upk, &p->shares.B)); break; default: return SECFailure; } cleanup: - msgpack_unpacked_destroy (&res); + msgpack_unpacked_destroy(&res); return rv; } - -SECStatus -PrioPacketVerify1_write (const_PrioPacketVerify1 p, msgpack_packer *pk) +SECStatus +PrioPacketVerify1_write(const_PrioPacketVerify1 p, msgpack_packer* pk) { SECStatus rv = SECSuccess; - P_CHECKCB (pk != NULL); - P_CHECKCB (p != NULL); + P_CHECKCB(pk != NULL); + P_CHECKCB(p != NULL); - P_CHECK (serial_write_mp_int (pk, &p->share_d)); - P_CHECK (serial_write_mp_int (pk, &p->share_e)); + P_CHECK(serial_write_mp_int(pk, &p->share_d)); + P_CHECK(serial_write_mp_int(pk, &p->share_e)); cleanup: return rv; } -SECStatus -PrioPacketVerify1_read (PrioPacketVerify1 p, msgpack_unpacker *upk, - const_PrioConfig cfg) +SECStatus +PrioPacketVerify1_read(PrioPacketVerify1 p, msgpack_unpacker* upk, + const_PrioConfig cfg) { SECStatus rv = SECSuccess; - P_CHECKCB (upk != NULL); - P_CHECKCB (p != NULL); + P_CHECKCB(upk != NULL); + P_CHECKCB(p != NULL); - P_CHECK (serial_read_mp_int (upk, &p->share_d, &cfg->modulus)); - P_CHECK (serial_read_mp_int (upk, &p->share_e, &cfg->modulus)); + P_CHECK(serial_read_mp_int(upk, &p->share_d, &cfg->modulus)); + P_CHECK(serial_read_mp_int(upk, &p->share_e, &cfg->modulus)); cleanup: return rv; } -SECStatus -PrioPacketVerify2_write (const_PrioPacketVerify2 p, msgpack_packer *pk) +SECStatus +PrioPacketVerify2_write(const_PrioPacketVerify2 p, msgpack_packer* pk) { SECStatus rv = SECSuccess; - P_CHECKCB (pk != NULL); - P_CHECKCB (p != NULL); + P_CHECKCB(pk != NULL); + P_CHECKCB(p != NULL); - P_CHECK (serial_write_mp_int (pk, &p->share_out)); + P_CHECK(serial_write_mp_int(pk, &p->share_out)); cleanup: return rv; } -SECStatus -PrioPacketVerify2_read (PrioPacketVerify2 p, msgpack_unpacker *upk, - const_PrioConfig cfg) +SECStatus +PrioPacketVerify2_read(PrioPacketVerify2 p, msgpack_unpacker* upk, + const_PrioConfig cfg) { SECStatus rv = SECSuccess; - P_CHECKCB (upk != NULL); - P_CHECKCB (p != NULL); + P_CHECKCB(upk != NULL); + P_CHECKCB(p != NULL); - P_CHECK (serial_read_mp_int (upk, &p->share_out, &cfg->modulus)); + P_CHECK(serial_read_mp_int(upk, &p->share_out, &cfg->modulus)); cleanup: return rv; } -SECStatus -PrioTotalShare_write (const_PrioTotalShare t, msgpack_packer *pk) +SECStatus +PrioTotalShare_write(const_PrioTotalShare t, msgpack_packer* pk) { SECStatus rv = SECSuccess; - P_CHECKCB (t != NULL); - P_CHECKCB (pk != NULL); - P_CHECK (msgpack_pack_int (pk, t->idx)); - P_CHECK (serial_write_mp_array (pk, t->data_shares)); + P_CHECKCB(t != NULL); + P_CHECKCB(pk != NULL); + P_CHECK(msgpack_pack_int(pk, t->idx)); + P_CHECK(serial_write_mp_array(pk, t->data_shares)); cleanup: return rv; } -SECStatus -PrioTotalShare_read (PrioTotalShare t, msgpack_unpacker *upk, - const_PrioConfig cfg) +SECStatus +PrioTotalShare_read(PrioTotalShare t, msgpack_unpacker* upk, + const_PrioConfig cfg) { SECStatus rv = SECSuccess; - P_CHECKCB (t != NULL); - P_CHECKCB (upk != NULL); - P_CHECK (serial_read_server_id (upk, &t->idx)); - P_CHECK (serial_read_mp_array (upk, t->data_shares, cfg->num_data_fields, - &cfg->modulus)); + P_CHECKCB(t != NULL); + P_CHECKCB(upk != NULL); + P_CHECK(serial_read_server_id(upk, &t->idx)); + P_CHECK(serial_read_mp_array(upk, t->data_shares, cfg->num_data_fields, + &cfg->modulus)); cleanup: return rv; } - diff --git a/third_party/prio/prio/serial.h b/third_party/prio/prio/serial.h index f4c9e0329021..8d69f2205c92 100644 --- a/third_party/prio/prio/serial.h +++ b/third_party/prio/prio/serial.h @@ -1,9 +1,9 @@ /* * Copyright (c) 2018, Henry Corrigan-Gibbs - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef __SERIAL_H__ @@ -11,11 +11,11 @@ #include -SECStatus serial_write_packet_client (msgpack_packer *pk, const_PrioPacketClient p, - const_PrioConfig cfg); +SECStatus serial_write_packet_client(msgpack_packer* pk, + const_PrioPacketClient p, + const_PrioConfig cfg); -SECStatus serial_read_packet_client (msgpack_unpacker *upk, PrioPacketClient p, - const_PrioConfig cfg); +SECStatus serial_read_packet_client(msgpack_unpacker* upk, PrioPacketClient p, + const_PrioConfig cfg); #endif /* __SERIAL_H__ */ - diff --git a/third_party/prio/prio/server.c b/third_party/prio/prio/server.c index e30bd702160c..a96e6f2fd064 100644 --- a/third_party/prio/prio/server.c +++ b/third_party/prio/prio/server.c @@ -1,9 +1,9 @@ /* * Copyright (c) 2018, Henry Corrigan-Gibbs - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include @@ -12,49 +12,51 @@ #include #include "client.h" -#include "prg.h" -#include "poly.h" #include "mparray.h" +#include "poly.h" +#include "prg.h" #include "server.h" #include "util.h" -PrioServer -PrioServer_new (const_PrioConfig cfg, PrioServerId server_idx, - PrivateKey server_priv, const PrioPRGSeed seed) +PrioServer +PrioServer_new(const_PrioConfig cfg, PrioServerId server_idx, + PrivateKey server_priv, const PrioPRGSeed seed) { SECStatus rv = SECSuccess; - PrioServer s = malloc (sizeof (*s)); - if (!s) return NULL; + PrioServer s = malloc(sizeof(*s)); + if (!s) + return NULL; s->cfg = cfg; s->idx = server_idx; s->priv_key = server_priv; s->data_shares = NULL; s->prg = NULL; - - P_CHECKA (s->data_shares = MPArray_new (s->cfg->num_data_fields)); - P_CHECKA (s->prg = PRG_new (seed)); + + P_CHECKA(s->data_shares = MPArray_new(s->cfg->num_data_fields)); + P_CHECKA(s->prg = PRG_new(seed)); cleanup: if (rv != SECSuccess) { - PrioServer_clear (s); + PrioServer_clear(s); return NULL; } return s; } -void -PrioServer_clear (PrioServer s) +void +PrioServer_clear(PrioServer s) { - if (!s) return; + if (!s) + return; - PRG_clear (s->prg); - MPArray_clear (s->data_shares); + PRG_clear(s->prg); + MPArray_clear(s->data_shares); free(s); } SECStatus -PrioServer_aggregate (PrioServer s, PrioVerifier v) +PrioServer_aggregate(PrioServer s, PrioVerifier v) { MPArray arr = NULL; switch (s->idx) { @@ -69,48 +71,49 @@ PrioServer_aggregate (PrioServer s, PrioVerifier v) return SECFailure; } - return MPArray_addmod (s->data_shares, arr, &s->cfg->modulus); + return MPArray_addmod(s->data_shares, arr, &s->cfg->modulus); } -PrioTotalShare -PrioTotalShare_new (void) +PrioTotalShare +PrioTotalShare_new(void) { - PrioTotalShare t = malloc (sizeof (*t)); - if (!t) return NULL; + PrioTotalShare t = malloc(sizeof(*t)); + if (!t) + return NULL; - t->data_shares = MPArray_new (0); + t->data_shares = MPArray_new(0); if (!t->data_shares) { - free (t); + free(t); return NULL; } return t; } -void -PrioTotalShare_clear (PrioTotalShare t) +void +PrioTotalShare_clear(PrioTotalShare t) { - if (!t) return; - MPArray_clear (t->data_shares); - free (t); + if (!t) + return; + MPArray_clear(t->data_shares); + free(t); } SECStatus -PrioTotalShare_set_data (PrioTotalShare t, const_PrioServer s) +PrioTotalShare_set_data(PrioTotalShare t, const_PrioServer s) { t->idx = s->idx; SECStatus rv = SECSuccess; - - P_CHECK (MPArray_resize (t->data_shares, s->data_shares->len)); - P_CHECK (MPArray_copy (t->data_shares, s->data_shares)); + + P_CHECK(MPArray_resize(t->data_shares, s->data_shares->len)); + P_CHECK(MPArray_copy(t->data_shares, s->data_shares)); return rv; } SECStatus -PrioTotalShare_final (const_PrioConfig cfg, - unsigned long *output, - const_PrioTotalShare tA, const_PrioTotalShare tB) +PrioTotalShare_final(const_PrioConfig cfg, unsigned long* output, + const_PrioTotalShare tA, const_PrioTotalShare tB) { if (tA->data_shares->len != cfg->num_data_fields) return SECFailure; @@ -122,24 +125,24 @@ PrioTotalShare_final (const_PrioConfig cfg, SECStatus rv = SECSuccess; mp_int tmp; - MP_DIGITS (&tmp) = NULL; - MP_CHECKC (mp_init (&tmp)); + MP_DIGITS(&tmp) = NULL; + MP_CHECKC(mp_init(&tmp)); - for (int i=0; inum_data_fields; i++) { - MP_CHECKC (mp_addmod(&tA->data_shares->data[i], &tB->data_shares->data[i], - &cfg->modulus, &tmp)); + for (int i = 0; i < cfg->num_data_fields; i++) { + MP_CHECKC(mp_addmod(&tA->data_shares->data[i], &tB->data_shares->data[i], + &cfg->modulus, &tmp)); output[i] = tmp.dp[0]; } cleanup: - mp_clear (&tmp); + mp_clear(&tmp); return rv; } - -inline static mp_int * -get_data_share (const_PrioVerifier v, int i) { +inline static mp_int* +get_data_share(const_PrioVerifier v, int i) +{ switch (v->s->idx) { case PRIO_SERVER_A: return &v->clientp->shares.A.data_shares->data[i]; @@ -150,8 +153,9 @@ get_data_share (const_PrioVerifier v, int i) { return NULL; } -inline static mp_int * -get_h_share (const_PrioVerifier v, int i) { +inline static mp_int* +get_h_share(const_PrioVerifier v, int i) +{ switch (v->s->idx) { case PRIO_SERVER_A: return &v->clientp->shares.A.h_points->data[i]; @@ -168,118 +172,122 @@ get_h_share (const_PrioVerifier v, int i) { * by the shared secret. Store the evaluations in the verifier object. */ static SECStatus -compute_shares (PrioVerifier v, const_PrioPacketClient p) +compute_shares(PrioVerifier v, const_PrioPacketClient p) { SECStatus rv; const int n = v->s->cfg->num_data_fields + 1; - const int N = next_power_of_two (n); + const int N = next_power_of_two(n); mp_int eval_at; - MP_DIGITS (&eval_at) = NULL; + MP_DIGITS(&eval_at) = NULL; MPArray points_f = NULL; MPArray points_g = NULL; MPArray points_h = NULL; - MP_CHECKC (mp_init (&eval_at)); - P_CHECKA (points_f = MPArray_new (N)); - P_CHECKA (points_g = MPArray_new (N)); - P_CHECKA (points_h = MPArray_new (2*N)); + MP_CHECKC(mp_init(&eval_at)); + P_CHECKA(points_f = MPArray_new(N)); + P_CHECKA(points_g = MPArray_new(N)); + P_CHECKA(points_h = MPArray_new(2 * N)); // Use PRG to generate random point - MP_CHECKC (PRG_get_int (v->s->prg, &eval_at, &v->s->cfg->modulus)); - - // Reduce value into the field we're using. This + MP_CHECKC(PRG_get_int(v->s->prg, &eval_at, &v->s->cfg->modulus)); + + // Reduce value into the field we're using. This // doesn't yield exactly a uniformly random point, // but for values this large, it will be close // enough. - MP_CHECKC (mp_mod (&eval_at, &v->s->cfg->modulus, &eval_at)); + MP_CHECKC(mp_mod(&eval_at, &v->s->cfg->modulus, &eval_at)); // Client sends us the values of f(0) and g(0) - MP_CHECKC (mp_copy(&p->f0_share, &points_f->data[0])); - MP_CHECKC (mp_copy(&p->g0_share, &points_g->data[0])); - MP_CHECKC (mp_copy(&p->h0_share, &points_h->data[0])); + MP_CHECKC(mp_copy(&p->f0_share, &points_f->data[0])); + MP_CHECKC(mp_copy(&p->g0_share, &points_g->data[0])); + MP_CHECKC(mp_copy(&p->h0_share, &points_h->data[0])); - for (int i=1; idata[i])); + const mp_int* data_i_minus_1 = get_data_share(v, i - 1); + MP_CHECKC(mp_copy(data_i_minus_1, &points_f->data[i])); // [g](i) = i-th data share minus 1 // Only need to shift the share for 0-th server - MP_CHECKC (mp_copy(&points_f->data[i], &points_g->data[i])); + MP_CHECKC(mp_copy(&points_f->data[i], &points_g->data[i])); if (!v->s->idx) { - MP_CHECKC (mp_sub_d(&points_g->data[i], 1, &points_g->data[i])); - MP_CHECKC (mp_mod(&points_g->data[i], &v->s->cfg->modulus, &points_g->data[i])); + MP_CHECKC(mp_sub_d(&points_g->data[i], 1, &points_g->data[i])); + MP_CHECKC( + mp_mod(&points_g->data[i], &v->s->cfg->modulus, &points_g->data[i])); } } int j = 0; - for (int i=1; i<2*N; i+=2) { - const mp_int *h_point_j = get_h_share (v, j++); - MP_CHECKC (mp_copy(h_point_j, &points_h->data[i])); + for (int i = 1; i < 2 * N; i += 2) { + const mp_int* h_point_j = get_h_share(v, j++); + MP_CHECKC(mp_copy(h_point_j, &points_h->data[i])); } - P_CHECKC (poly_interp_evaluate (&v->share_fR, points_f, &eval_at, v->s->cfg)); - P_CHECKC (poly_interp_evaluate (&v->share_gR, points_g, &eval_at, v->s->cfg)); - P_CHECKC (poly_interp_evaluate (&v->share_hR, points_h, &eval_at, v->s->cfg)); + P_CHECKC(poly_interp_evaluate(&v->share_fR, points_f, &eval_at, v->s->cfg)); + P_CHECKC(poly_interp_evaluate(&v->share_gR, points_g, &eval_at, v->s->cfg)); + P_CHECKC(poly_interp_evaluate(&v->share_hR, points_h, &eval_at, v->s->cfg)); cleanup: - MPArray_clear (points_f); - MPArray_clear (points_g); - MPArray_clear (points_h); - mp_clear (&eval_at); + MPArray_clear(points_f); + MPArray_clear(points_g); + MPArray_clear(points_h); + mp_clear(&eval_at); return rv; } -PrioVerifier PrioVerifier_new (PrioServer s) +PrioVerifier +PrioVerifier_new(PrioServer s) { SECStatus rv = SECSuccess; - PrioVerifier v = malloc (sizeof *v); - if (!v) return NULL; + PrioVerifier v = malloc(sizeof *v); + if (!v) + return NULL; v->s = s; v->clientp = NULL; v->data_sharesB = NULL; v->h_pointsB = NULL; - MP_DIGITS (&v->share_fR) = NULL; - MP_DIGITS (&v->share_gR) = NULL; - MP_DIGITS (&v->share_hR) = NULL; + MP_DIGITS(&v->share_fR) = NULL; + MP_DIGITS(&v->share_gR) = NULL; + MP_DIGITS(&v->share_hR) = NULL; - MP_CHECKC (mp_init (&v->share_fR)); - MP_CHECKC (mp_init (&v->share_gR)); - MP_CHECKC (mp_init (&v->share_hR)); + MP_CHECKC(mp_init(&v->share_fR)); + MP_CHECKC(mp_init(&v->share_gR)); + MP_CHECKC(mp_init(&v->share_hR)); - P_CHECKA (v->clientp = PrioPacketClient_new (s->cfg, s->idx)); + P_CHECKA(v->clientp = PrioPacketClient_new(s->cfg, s->idx)); - const int N = next_power_of_two (s->cfg->num_data_fields + 1); + const int N = next_power_of_two(s->cfg->num_data_fields + 1); if (v->s->idx == PRIO_SERVER_B) { - P_CHECKA (v->data_sharesB = MPArray_new (v->s->cfg->num_data_fields)); - P_CHECKA (v->h_pointsB = MPArray_new (N)); + P_CHECKA(v->data_sharesB = MPArray_new(v->s->cfg->num_data_fields)); + P_CHECKA(v->h_pointsB = MPArray_new(N)); } cleanup: if (rv != SECSuccess) { - PrioVerifier_clear (v); + PrioVerifier_clear(v); return NULL; } return v; } -SECStatus -PrioVerifier_set_data (PrioVerifier v, unsigned char *data, unsigned int data_len) +SECStatus +PrioVerifier_set_data(PrioVerifier v, unsigned char* data, + unsigned int data_len) { SECStatus rv = SECSuccess; PRG prgB = NULL; - P_CHECKC (PrioPacketClient_decrypt (v->clientp, v->s->cfg, - v->s->priv_key, data, data_len)); + P_CHECKC(PrioPacketClient_decrypt(v->clientp, v->s->cfg, v->s->priv_key, data, + data_len)); PrioPacketClient p = v->clientp; if (p->for_server != v->s->idx) return SECFailure; - const int N = next_power_of_two (v->s->cfg->num_data_fields + 1); + const int N = next_power_of_two(v->s->cfg->num_data_fields + 1); if (v->s->idx == PRIO_SERVER_A) { // Check that packet has the correct number of data fields if (p->shares.A.data_shares->len != v->s->cfg->num_data_fields) @@ -289,70 +297,73 @@ PrioVerifier_set_data (PrioVerifier v, unsigned char *data, unsigned int data_le } if (v->s->idx == PRIO_SERVER_B) { - P_CHECKA (prgB = PRG_new (v->clientp->shares.B.seed)); - P_CHECKC (PRG_get_array (prgB, v->data_sharesB, &v->s->cfg->modulus)); - P_CHECKC (PRG_get_array (prgB, v->h_pointsB, &v->s->cfg->modulus)); + P_CHECKA(prgB = PRG_new(v->clientp->shares.B.seed)); + P_CHECKC(PRG_get_array(prgB, v->data_sharesB, &v->s->cfg->modulus)); + P_CHECKC(PRG_get_array(prgB, v->h_pointsB, &v->s->cfg->modulus)); } // TODO: This can be done much faster by using the combined - // interpolate-and-evaluate optimization described in the + // interpolate-and-evaluate optimization described in the // Prio paper. // // Compute share of f(r), g(r), h(r) - P_CHECKC (compute_shares (v, p)); + P_CHECKC(compute_shares(v, p)); cleanup: - PRG_clear (prgB); + PRG_clear(prgB); return rv; } - -void PrioVerifier_clear (PrioVerifier v) +void +PrioVerifier_clear(PrioVerifier v) { - if (v == NULL) return; - PrioPacketClient_clear (v->clientp); - MPArray_clear (v->data_sharesB); - MPArray_clear (v->h_pointsB); - mp_clear (&v->share_fR); - mp_clear (&v->share_gR); - mp_clear (&v->share_hR); - free (v); + if (v == NULL) + return; + PrioPacketClient_clear(v->clientp); + MPArray_clear(v->data_sharesB); + MPArray_clear(v->h_pointsB); + mp_clear(&v->share_fR); + mp_clear(&v->share_gR); + mp_clear(&v->share_hR); + free(v); } -PrioPacketVerify1 -PrioPacketVerify1_new (void) +PrioPacketVerify1 +PrioPacketVerify1_new(void) { SECStatus rv = SECSuccess; - PrioPacketVerify1 p = malloc (sizeof *p); - if (!p) return NULL; + PrioPacketVerify1 p = malloc(sizeof *p); + if (!p) + return NULL; - MP_DIGITS (&p->share_d) = NULL; - MP_DIGITS (&p->share_e) = NULL; + MP_DIGITS(&p->share_d) = NULL; + MP_DIGITS(&p->share_e) = NULL; - MP_CHECKC (mp_init (&p->share_d)); - MP_CHECKC (mp_init (&p->share_e)); + MP_CHECKC(mp_init(&p->share_d)); + MP_CHECKC(mp_init(&p->share_e)); cleanup: if (rv != SECSuccess) { - PrioPacketVerify1_clear (p); + PrioPacketVerify1_clear(p); return NULL; } return p; } -void -PrioPacketVerify1_clear (PrioPacketVerify1 p) +void +PrioPacketVerify1_clear(PrioPacketVerify1 p) { - if (!p) return; - mp_clear (&p->share_d); - mp_clear (&p->share_e); - free (p); + if (!p) + return; + mp_clear(&p->share_d); + mp_clear(&p->share_e); + free(p); } SECStatus -PrioPacketVerify1_set_data (PrioPacketVerify1 p1, const_PrioVerifier v) +PrioPacketVerify1_set_data(PrioPacketVerify1 p1, const_PrioVerifier v) { // See the Prio paper for details on how this works. // Appendix C descrives the MPC protocol used here. @@ -361,121 +372,121 @@ PrioPacketVerify1_set_data (PrioPacketVerify1 p1, const_PrioVerifier v) // Compute corrections. // [d] = [f(r)] - [a] - MP_CHECK (mp_sub (&v->share_fR, &v->clientp->triple->a, &p1->share_d)); - MP_CHECK (mp_mod (&p1->share_d, &v->s->cfg->modulus, &p1->share_d)); + MP_CHECK(mp_sub(&v->share_fR, &v->clientp->triple->a, &p1->share_d)); + MP_CHECK(mp_mod(&p1->share_d, &v->s->cfg->modulus, &p1->share_d)); // [e] = [g(r)] - [b] - MP_CHECK (mp_sub (&v->share_gR, &v->clientp->triple->b, &p1->share_e)); - MP_CHECK (mp_mod (&p1->share_e, &v->s->cfg->modulus, &p1->share_e)); + MP_CHECK(mp_sub(&v->share_gR, &v->clientp->triple->b, &p1->share_e)); + MP_CHECK(mp_mod(&p1->share_e, &v->s->cfg->modulus, &p1->share_e)); return rv; } -PrioPacketVerify2 -PrioPacketVerify2_new (void) +PrioPacketVerify2 +PrioPacketVerify2_new(void) { SECStatus rv = SECSuccess; - PrioPacketVerify2 p = malloc (sizeof *p); - if (!p) return NULL; + PrioPacketVerify2 p = malloc(sizeof *p); + if (!p) + return NULL; - MP_DIGITS (&p->share_out) = NULL; - MP_CHECKC (mp_init (&p->share_out)); + MP_DIGITS(&p->share_out) = NULL; + MP_CHECKC(mp_init(&p->share_out)); cleanup: if (rv != SECSuccess) { - PrioPacketVerify2_clear (p); + PrioPacketVerify2_clear(p); return NULL; } return p; } -void -PrioPacketVerify2_clear (PrioPacketVerify2 p) +void +PrioPacketVerify2_clear(PrioPacketVerify2 p) { - if (!p) return; - mp_clear (&p->share_out); - free (p); + if (!p) + return; + mp_clear(&p->share_out); + free(p); } SECStatus -PrioPacketVerify2_set_data (PrioPacketVerify2 p2, const_PrioVerifier v, - const_PrioPacketVerify1 p1A, const_PrioPacketVerify1 p1B) +PrioPacketVerify2_set_data(PrioPacketVerify2 p2, const_PrioVerifier v, + const_PrioPacketVerify1 p1A, + const_PrioPacketVerify1 p1B) { SECStatus rv = SECSuccess; mp_int d, e, tmp; - MP_DIGITS (&d) = NULL; - MP_DIGITS (&e) = NULL; - MP_DIGITS (&tmp) = NULL; + MP_DIGITS(&d) = NULL; + MP_DIGITS(&e) = NULL; + MP_DIGITS(&tmp) = NULL; - MP_CHECKC (mp_init (&d)); - MP_CHECKC (mp_init (&e)); - MP_CHECKC (mp_init (&tmp)); + MP_CHECKC(mp_init(&d)); + MP_CHECKC(mp_init(&e)); + MP_CHECKC(mp_init(&tmp)); - const mp_int *mod = &v->s->cfg->modulus; + const mp_int* mod = &v->s->cfg->modulus; // Compute share of f(r)*g(r) // [f(r)*g(r)] = [d*e/2] + d[b] + e[a] + [c] - - // Compute d - MP_CHECKC (mp_addmod (&p1A->share_d, &p1B->share_d, mod, &d)); + + // Compute d + MP_CHECKC(mp_addmod(&p1A->share_d, &p1B->share_d, mod, &d)); // Compute e - MP_CHECKC (mp_addmod (&p1A->share_e, &p1B->share_e, mod, &e)); + MP_CHECKC(mp_addmod(&p1A->share_e, &p1B->share_e, mod, &e)); // Compute d*e - MP_CHECKC (mp_mulmod (&d, &e, mod, &p2->share_out)); + MP_CHECKC(mp_mulmod(&d, &e, mod, &p2->share_out)); // out = d*e/2 - MP_CHECKC (mp_mulmod (&p2->share_out, &v->s->cfg->inv2, - mod, &p2->share_out)); + MP_CHECKC(mp_mulmod(&p2->share_out, &v->s->cfg->inv2, mod, &p2->share_out)); - // Compute d[b] - MP_CHECKC (mp_mulmod (&d, &v->clientp->triple->b, mod, &tmp)); - // out = d*e/2 + d[b] - MP_CHECKC (mp_addmod (&p2->share_out, &tmp, mod, &p2->share_out)); + // Compute d[b] + MP_CHECKC(mp_mulmod(&d, &v->clientp->triple->b, mod, &tmp)); + // out = d*e/2 + d[b] + MP_CHECKC(mp_addmod(&p2->share_out, &tmp, mod, &p2->share_out)); - // Compute e[a] - MP_CHECKC (mp_mulmod (&e, &v->clientp->triple->a, mod, &tmp)); + // Compute e[a] + MP_CHECKC(mp_mulmod(&e, &v->clientp->triple->a, mod, &tmp)); // out = d*e/2 + d[b] + e[a] - MP_CHECKC (mp_addmod (&p2->share_out, &tmp, mod, &p2->share_out)); + MP_CHECKC(mp_addmod(&p2->share_out, &tmp, mod, &p2->share_out)); // out = d*e/2 + d[b] + e[a] + [c] - MP_CHECKC (mp_addmod (&p2->share_out, &v->clientp->triple->c, mod, &p2->share_out)); + MP_CHECKC( + mp_addmod(&p2->share_out, &v->clientp->triple->c, mod, &p2->share_out)); // We want to compute f(r)*g(r) - h(r), // so subtract off [h(r)]: // out = d*e/2 + d[b] + e[a] + [c] - [h(r)] - MP_CHECKC (mp_sub (&p2->share_out, &v->share_hR, &p2->share_out)); - MP_CHECKC (mp_mod (&p2->share_out, mod, &p2->share_out)); + MP_CHECKC(mp_sub(&p2->share_out, &v->share_hR, &p2->share_out)); + MP_CHECKC(mp_mod(&p2->share_out, mod, &p2->share_out)); cleanup: - mp_clear (&d); - mp_clear (&e); - mp_clear (&tmp); + mp_clear(&d); + mp_clear(&e); + mp_clear(&tmp); return rv; } -int -PrioVerifier_isValid (const_PrioVerifier v, - const_PrioPacketVerify2 pA, const_PrioPacketVerify2 pB) +int +PrioVerifier_isValid(const_PrioVerifier v, const_PrioPacketVerify2 pA, + const_PrioPacketVerify2 pB) { SECStatus rv = SECSuccess; mp_int res; - MP_DIGITS (&res) = NULL; - MP_CHECKC (mp_init (&res)); + MP_DIGITS(&res) = NULL; + MP_CHECKC(mp_init(&res)); - // Add up the shares of the output wire value and + // Add up the shares of the output wire value and // ensure that the sum is equal to zero, which indicates // that // f(r) * g(r) == h(r). - MP_CHECKC (mp_addmod (&pA->share_out, &pB->share_out, - &v->s->cfg->modulus, &res)); + MP_CHECKC( + mp_addmod(&pA->share_out, &pB->share_out, &v->s->cfg->modulus, &res)); - rv = (mp_cmp_d (&res, 0) == 0) ? SECSuccess : SECFailure; + rv = (mp_cmp_d(&res, 0) == 0) ? SECSuccess : SECFailure; cleanup: - mp_clear (&res); + mp_clear(&res); return rv; } - - - diff --git a/third_party/prio/prio/server.h b/third_party/prio/prio/server.h index dd3ba6980dd1..ce549013ae97 100644 --- a/third_party/prio/prio/server.h +++ b/third_party/prio/prio/server.h @@ -1,9 +1,9 @@ /* * Copyright (c) 2018, Henry Corrigan-Gibbs - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef __SERVER_H__ @@ -13,12 +13,14 @@ #include "prg.h" #include "share.h" -struct prio_total_share { +struct prio_total_share +{ PrioServerId idx; MPArray data_shares; }; -struct prio_server { +struct prio_server +{ const_PrioConfig cfg; PrioServerId idx; @@ -34,7 +36,8 @@ struct prio_server { PRG prg; }; -struct prio_verifier { +struct prio_verifier +{ PrioServer s; PrioPacketClient clientp; @@ -47,14 +50,15 @@ struct prio_verifier { mp_int share_out; }; -struct prio_packet_verify1 { +struct prio_packet_verify1 +{ mp_int share_d; mp_int share_e; }; -struct prio_packet_verify2 { +struct prio_packet_verify2 +{ mp_int share_out; }; #endif /* __SERVER_H__ */ - diff --git a/third_party/prio/prio/share.c b/third_party/prio/prio/share.c index c2205e487e22..6349e82329a3 100644 --- a/third_party/prio/prio/share.c +++ b/third_party/prio/prio/share.c @@ -1,9 +1,9 @@ /* * Copyright (c) 2018, Henry Corrigan-Gibbs - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include @@ -12,86 +12,85 @@ #include "share.h" #include "util.h" - SECStatus -share_int (const struct prio_config *cfg, const mp_int *src, - mp_int *shareA, mp_int *shareB) +share_int(const struct prio_config* cfg, const mp_int* src, mp_int* shareA, + mp_int* shareB) { SECStatus rv; - P_CHECK (rand_int (shareA, &cfg->modulus)); - MP_CHECK (mp_submod (src, shareA, &cfg->modulus, shareB)); + P_CHECK(rand_int(shareA, &cfg->modulus)); + MP_CHECK(mp_submod(src, shareA, &cfg->modulus, shareB)); return rv; } BeaverTriple -BeaverTriple_new (void) +BeaverTriple_new(void) { - BeaverTriple triple = malloc (sizeof *triple); + BeaverTriple triple = malloc(sizeof *triple); if (!triple) return NULL; - MP_DIGITS (&triple->a) = NULL; - MP_DIGITS (&triple->b) = NULL; - MP_DIGITS (&triple->c) = NULL; + MP_DIGITS(&triple->a) = NULL; + MP_DIGITS(&triple->b) = NULL; + MP_DIGITS(&triple->c) = NULL; SECStatus rv = SECSuccess; - MP_CHECKC (mp_init (&triple->a)); - MP_CHECKC (mp_init (&triple->b)); - MP_CHECKC (mp_init (&triple->c)); + MP_CHECKC(mp_init(&triple->a)); + MP_CHECKC(mp_init(&triple->b)); + MP_CHECKC(mp_init(&triple->c)); cleanup: if (rv != SECSuccess) { - BeaverTriple_clear (triple); + BeaverTriple_clear(triple); return NULL; } return triple; } - void -BeaverTriple_clear (BeaverTriple triple) +BeaverTriple_clear(BeaverTriple triple) { - if (!triple) return; - mp_clear (&triple->a); - mp_clear (&triple->b); - mp_clear (&triple->c); - free (triple); + if (!triple) + return; + mp_clear(&triple->a); + mp_clear(&triple->b); + mp_clear(&triple->c); + free(triple); } SECStatus -BeaverTriple_set_rand (const struct prio_config *cfg, - struct beaver_triple *triple_1, - struct beaver_triple *triple_2) +BeaverTriple_set_rand(const struct prio_config* cfg, + struct beaver_triple* triple_1, + struct beaver_triple* triple_2) { SECStatus rv = SECSuccess; // TODO: Can shorten this code using share_int() // We need that - // (a1 + a2)(b1 + b2) = c1 + c2 (mod p) - P_CHECK (rand_int (&triple_1->a, &cfg->modulus)); - P_CHECK (rand_int (&triple_1->b, &cfg->modulus)); - P_CHECK (rand_int (&triple_2->a, &cfg->modulus)); - P_CHECK (rand_int (&triple_2->b, &cfg->modulus)); + // (a1 + a2)(b1 + b2) = c1 + c2 (mod p) + P_CHECK(rand_int(&triple_1->a, &cfg->modulus)); + P_CHECK(rand_int(&triple_1->b, &cfg->modulus)); + P_CHECK(rand_int(&triple_2->a, &cfg->modulus)); + P_CHECK(rand_int(&triple_2->b, &cfg->modulus)); // We are trying to be a little clever here to avoid the use of temp // variables. // c1 = a1 + a2 - MP_CHECK (mp_addmod (&triple_1->a, &triple_2->a, &cfg->modulus, &triple_1->c)); + MP_CHECK(mp_addmod(&triple_1->a, &triple_2->a, &cfg->modulus, &triple_1->c)); // c2 = b1 + b2 - MP_CHECK (mp_addmod (&triple_1->b, &triple_2->b, &cfg->modulus, &triple_2->c)); + MP_CHECK(mp_addmod(&triple_1->b, &triple_2->b, &cfg->modulus, &triple_2->c)); // c1 = c1 * c2 = (a1 + a2) (b1 + b2) - MP_CHECK (mp_mulmod (&triple_1->c, &triple_2->c, &cfg->modulus, &triple_1->c)); + MP_CHECK(mp_mulmod(&triple_1->c, &triple_2->c, &cfg->modulus, &triple_1->c)); // Set c2 to random blinding value - MP_CHECK (rand_int (&triple_2->c, &cfg->modulus)); + MP_CHECK(rand_int(&triple_2->c, &cfg->modulus)); // c1 = c1 - c2 - MP_CHECK (mp_submod (&triple_1->c, &triple_2->c, &cfg->modulus, &triple_1->c)); + MP_CHECK(mp_submod(&triple_1->c, &triple_2->c, &cfg->modulus, &triple_1->c)); // Now we should have random tuples satisfying: // (a1 + a2) (b1 + b2) = c1 + c2 @@ -99,10 +98,9 @@ BeaverTriple_set_rand (const struct prio_config *cfg, return rv; } -bool -BeaverTriple_areEqual (const_BeaverTriple t1, const_BeaverTriple t2) +bool +BeaverTriple_areEqual(const_BeaverTriple t1, const_BeaverTriple t2) { - return (mp_cmp (&t1->a, &t2->a) == 0 && - mp_cmp (&t1->b, &t2->b) == 0 && - mp_cmp (&t1->c, &t2->c) == 0); + return (mp_cmp(&t1->a, &t2->a) == 0 && mp_cmp(&t1->b, &t2->b) == 0 && + mp_cmp(&t1->c, &t2->c) == 0); } diff --git a/third_party/prio/prio/share.h b/third_party/prio/prio/share.h index bcf7e7b3a3d7..2a8ad3b4c531 100644 --- a/third_party/prio/prio/share.h +++ b/third_party/prio/prio/share.h @@ -1,12 +1,11 @@ /* * Copyright (c) 2018, Henry Corrigan-Gibbs - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - #ifndef __SHARE_H__ #define __SHARE_H__ @@ -14,23 +13,22 @@ #include "config.h" -struct beaver_triple { +struct beaver_triple +{ mp_int a; mp_int b; mp_int c; }; -typedef struct beaver_triple *BeaverTriple; -typedef const struct beaver_triple *const_BeaverTriple; - +typedef struct beaver_triple* BeaverTriple; +typedef const struct beaver_triple* const_BeaverTriple; /* * Use secret sharing to split the int src into two shares. * The mp_ints must be initialized. */ -SECStatus share_int (const_PrioConfig cfg, const mp_int *src, - mp_int *shareA, mp_int *shareB); - +SECStatus share_int(const_PrioConfig cfg, const mp_int* src, mp_int* shareA, + mp_int* shareB); /* * Prio uses Beaver triples to implement one step of the @@ -38,14 +36,12 @@ SECStatus share_int (const_PrioConfig cfg, const mp_int *src, * a sharing of random values a, b, c such that * a * b = c */ -BeaverTriple BeaverTriple_new (void); -void BeaverTriple_clear (BeaverTriple t); +BeaverTriple BeaverTriple_new(void); +void BeaverTriple_clear(BeaverTriple t); -SECStatus BeaverTriple_set_rand (const_PrioConfig cfg, - BeaverTriple triple_a, - BeaverTriple triple_b); +SECStatus BeaverTriple_set_rand(const_PrioConfig cfg, BeaverTriple triple_a, + BeaverTriple triple_b); -bool BeaverTriple_areEqual (const_BeaverTriple t1, const_BeaverTriple t2); +bool BeaverTriple_areEqual(const_BeaverTriple t1, const_BeaverTriple t2); #endif /* __SHARE_H__ */ - diff --git a/third_party/prio/prio/util.h b/third_party/prio/prio/util.h index 2e9e73b2391e..bbe8611a08ff 100644 --- a/third_party/prio/prio/util.h +++ b/third_party/prio/prio/util.h @@ -1,9 +1,9 @@ /* * Copyright (c) 2018, Henry Corrigan-Gibbs - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef __UTIL_H__ @@ -16,80 +16,88 @@ #define MIN(a, b) ((a) < (b) ? (a) : (b)) // Check a Prio error code and return failure if the call fails. -#define P_CHECK(s) \ - do { \ - if((rv = (s)) != SECSuccess) \ - return rv; \ - } while(0); +#define P_CHECK(s) \ + do { \ + if ((rv = (s)) != SECSuccess) \ + return rv; \ + } while (0); // Check an allocation that should not return NULL. If the allocation returns -// NULL, set the return value and jump to the cleanup label to free memory. -#define P_CHECKA(s) \ - do { \ - if((s) == NULL) {\ - rv = SECFailure;\ - goto cleanup;\ - }\ - } while(0); +// NULL, set the return value and jump to the cleanup label to free memory. +#define P_CHECKA(s) \ + do { \ + if ((s) == NULL) { \ + rv = SECFailure; \ + goto cleanup; \ + } \ + } while (0); // Check a Prio library call that should return SECSuccess. If it doesn't, // jump to the cleanup label. -#define P_CHECKC(s) \ - do { \ - if((rv = (s)) != SECSuccess) { \ - goto cleanup; \ - }\ - } while(0); +#define P_CHECKC(s) \ + do { \ + if ((rv = (s)) != SECSuccess) { \ + goto cleanup; \ + } \ + } while (0); // Check a boolean that should be true. If it not, // jump to the cleanup label. -#define P_CHECKCB(s) \ - do { \ - if(!(s)) { \ - rv = SECFailure; \ - goto cleanup; \ - }\ - } while(0); +#define P_CHECKCB(s) \ + do { \ + if (!(s)) { \ + rv = SECFailure; \ + goto cleanup; \ + } \ + } while (0); // Check an MPI library call and return failure if it fails. -#define MP_CHECK(s) do { if((s) != MP_OKAY) return SECFailure; } while(0); +#define MP_CHECK(s) \ + do { \ + if ((s) != MP_OKAY) \ + return SECFailure; \ + } while (0); // Check a msgpack object unpacked correctly -#define UP_CHECK(s) do { int r = (s); if(r != MSGPACK_UNPACK_SUCCESS &&\ - r != MSGPACK_UNPACK_EXTRA_BYTES) \ - return SECFailure; } while(0); +#define UP_CHECK(s) \ + do { \ + int r = (s); \ + if (r != MSGPACK_UNPACK_SUCCESS && r != MSGPACK_UNPACK_EXTRA_BYTES) \ + return SECFailure; \ + } while (0); // Check an MPI library call. If it fails, set the return code and jump // to the cleanup label. -#define MP_CHECKC(s) \ - do { \ - if((s) != MP_OKAY) { \ - rv = SECFailure; \ - goto cleanup; \ - }\ - } while(0); +#define MP_CHECKC(s) \ + do { \ + if ((s) != MP_OKAY) { \ + rv = SECFailure; \ + goto cleanup; \ + } \ + } while (0); static inline int -next_power_of_two (int val) +next_power_of_two(int val) { int i = val; int out = 0; - for ( ; i > 0; i >>= 1) { + for (; i > 0; i >>= 1) { out++; } int pow = 1 << out; - return (pow > 1 && pow/2 == val) ? val : pow; -} + return (pow > 1 && pow / 2 == val) ? val : pow; +} -/* +/* * Return a mask that masks out all of the zero bits */ static inline unsigned char -msb_mask (unsigned char val) +msb_mask(unsigned char val) { unsigned char mask; - for (mask = 0x00; (val & mask) != val; mask = (mask << 1) + 1); + for (mask = 0x00; (val & mask) != val; mask = (mask << 1) + 1) + ; return mask; } @@ -99,4 +107,3 @@ msb_mask (unsigned char val) #define UNUSED(x) (void)(x) #endif /* __UTIL_H__ */ - diff --git a/third_party/prio/ptest/MUTEST_LICENSE b/third_party/prio/ptest/MUTEST_LICENSE deleted file mode 100644 index c802e1e215bf..000000000000 --- a/third_party/prio/ptest/MUTEST_LICENSE +++ /dev/null @@ -1,30 +0,0 @@ -I don't like licenses, because I don't like having to worry about all this -legal stuff just for a simple piece of software I don't really mind anyone -using. But I also believe that it's important that people share and give back; -so I'm placing this work under the following license. - - -BOLA - Buena Onda License Agreement (v1.0) ------------------------------------------- - -This work is provided 'as-is', without any express or implied warranty. In no -event will the authors be held liable for any damages arising from the use of -this work. - -To all effects and purposes, this work is to be considered Public Domain. - - -However, if you want to be "Buena onda", you should: - -1. Not take credit for it, and give proper recognition to the authors. -2. Share your modifications, so everybody benefits from them. -4. Do something nice for the authors. -5. Help someone who needs it: sign up for some volunteer work or help your - neighbour paint the house. -6. Don't waste. Anything, but specially energy that comes from natural - non-renewable resources. Extra points if you discover or invent something - to replace them. -7. Be tolerant. Everything that's good in nature comes from cooperation. - -The order is important, and the further you go the more "Buena onda" you are. -Make the world a better place: be "Buena onda". diff --git a/third_party/prio/ptest/SConscript b/third_party/prio/ptest/SConscript deleted file mode 100644 index 18b6e2e50ac4..000000000000 --- a/third_party/prio/ptest/SConscript +++ /dev/null @@ -1,44 +0,0 @@ -import sys - -Import('env') - -prio_env = env.Clone() - -test_srcs = [ - "mutest.c", - "client_test.c", - "example_test.c", - "encrypt_test.c", - "fft_test.c", - "mpi_test.c", - "prg_test.c", - "rand_test.c", - "serial_test.c", - "server_test.c", - "share_test.c", -] - -libs = [ - "nss3", - "mpi", - "mprio", - "msgpackc" -] - -# Run the mutest script to generate the test harness code -bld = Builder(action = 'ptest/mkmutest ptest/mutest.h $SOURCES | $CC -c -xc -o $TARGET -') -prio_env.Append(BUILDERS = {'MkMutest' : bld}) - -prio_env.Append(LIBS = libs) - -# Enable mpi print -prio_env.Append(CFLAGS = ['-DMP_IOFUNC']) - -# Copy the mutest scripts to the build dir -prio_env.Install("mkmutest") -prio_env.Install("mutest.h") - -test_objs = prio_env.Object(test_srcs) -test_main = prio_env.MkMutest(test_objs) -prio_env.Program("ptest", [test_main] + test_objs) - diff --git a/third_party/prio/ptest/client_test.c b/third_party/prio/ptest/client_test.c deleted file mode 100644 index 4a66c687b7b3..000000000000 --- a/third_party/prio/ptest/client_test.c +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Copyright (c) 2018, Henry Corrigan-Gibbs - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -#include - -#include "prio/client.h" -#include "prio/server.h" -#include "prio/util.h" -#include "mutest.h" - -void -mu_test_client__new (void) -{ - SECStatus rv = SECSuccess; - PrioConfig cfg = NULL; - PrioPacketClient pA = NULL; - PrioPacketClient pB = NULL; - - P_CHECKA (cfg = PrioConfig_newTest(23)); - P_CHECKA (pA = PrioPacketClient_new (cfg, PRIO_SERVER_A)); - P_CHECKA (pB = PrioPacketClient_new (cfg, PRIO_SERVER_B)); - - { - const int ndata = PrioConfig_numDataFields (cfg); - bool data_items[ndata]; - - for (int i=0; i < ndata; i++) { - // Arbitrary data - data_items[i] = (i % 3 == 1) || (i % 5 == 3); - } - - P_CHECKC (PrioPacketClient_set_data (cfg, data_items, pA, pB)); - } - -cleanup: - mu_check (rv == SECSuccess); - - PrioPacketClient_clear (pA); - PrioPacketClient_clear (pB); - PrioConfig_clear (cfg); -} - -void -test_client_agg (int nclients) -{ - SECStatus rv = SECSuccess; - PublicKey pkA = NULL; - PublicKey pkB = NULL; - PrivateKey skA = NULL; - PrivateKey skB = NULL; - PrioConfig cfg = NULL; - PrioServer sA = NULL; - PrioServer sB = NULL; - PrioTotalShare tA = NULL; - PrioTotalShare tB = NULL; - PrioVerifier vA = NULL; - PrioVerifier vB = NULL; - unsigned char *for_a = NULL; - unsigned char *for_b = NULL; - const unsigned char *batch_id = (unsigned char *)"test_batch"; - unsigned int batch_id_len = strlen ((char *)batch_id); - - PrioPRGSeed seed; - P_CHECKC (PrioPRGSeed_randomize (&seed)); - - P_CHECKC (Keypair_new (&skA, &pkA)); - P_CHECKC (Keypair_new (&skB, &pkB)); - P_CHECKA (cfg = PrioConfig_new (133, pkA, pkB, batch_id, batch_id_len)); - P_CHECKA (sA = PrioServer_new (cfg, 0, skA, seed)); - P_CHECKA (sB = PrioServer_new (cfg, 1, skB, seed)); - P_CHECKA (tA = PrioTotalShare_new ()); - P_CHECKA (tB = PrioTotalShare_new ()); - P_CHECKA (vA = PrioVerifier_new (sA)); - P_CHECKA (vB = PrioVerifier_new (sB)); - - const int ndata = PrioConfig_numDataFields (cfg); - - { - bool data_items[ndata]; - for (int i=0; i < ndata; i++) { - // Arbitrary data - data_items[i] = (i % 3 == 1) || (i % 5 == 3); - } - - for (int i=0; i < nclients; i++) { - unsigned int aLen, bLen; - P_CHECKC (PrioClient_encode (cfg, data_items, &for_a, &aLen, - &for_b, &bLen)); - - P_CHECKC (PrioVerifier_set_data (vA, for_a, aLen)); - P_CHECKC (PrioVerifier_set_data (vB, for_b, bLen)); - - mu_check (PrioServer_aggregate (sA, vA) == SECSuccess); - mu_check (PrioServer_aggregate (sB, vB) == SECSuccess); - - free (for_a); - free (for_b); - - for_a = NULL; - for_b = NULL; - } - - mu_check (PrioTotalShare_set_data (tA, sA) == SECSuccess); - mu_check (PrioTotalShare_set_data (tB, sB) == SECSuccess); - - unsigned long output[ndata]; - mu_check (PrioTotalShare_final (cfg, output, tA, tB) == SECSuccess); - for (int i=0; i < ndata; i++) { - unsigned long v = ((i % 3 == 1) || (i % 5 == 3)); - mu_check (output[i] == v*nclients); - } - } - - //rv = SECFailure; - //goto cleanup; - -cleanup: - mu_check (rv == SECSuccess); - if (for_a) free (for_a); - if (for_b) free (for_b); - - PublicKey_clear (pkA); - PublicKey_clear (pkB); - PrivateKey_clear (skA); - PrivateKey_clear (skB); - - PrioVerifier_clear (vA); - PrioVerifier_clear (vB); - - PrioTotalShare_clear (tA); - PrioTotalShare_clear (tB); - - PrioServer_clear (sA); - PrioServer_clear (sB); - PrioConfig_clear (cfg); -} - -void -mu_test_client__agg_1 (void) -{ - test_client_agg (1); -} - -void -mu_test_client__agg_2 (void) -{ - test_client_agg (2); -} - -void -mu_test_client__agg_10 (void) -{ - test_client_agg (10); -} - diff --git a/third_party/prio/ptest/encrypt_test.c b/third_party/prio/ptest/encrypt_test.c deleted file mode 100644 index 5dfddabfcb23..000000000000 --- a/third_party/prio/ptest/encrypt_test.c +++ /dev/null @@ -1,228 +0,0 @@ -/* - * Copyright (c) 2018, Henry Corrigan-Gibbs - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -#include -#include -#include -#include -#include -#include - -#include "mutest.h" -#include "prio/encrypt.h" -#include "prio/rand.h" -#include "prio/util.h" - - -void -mu_test_keygen (void) -{ - SECStatus rv = SECSuccess; - PublicKey pubkey = NULL; - PrivateKey pvtkey = NULL; - - P_CHECKC (Keypair_new (&pvtkey, &pubkey)); - mu_check (SECKEY_PublicKeyStrength (pubkey) == 32); - -cleanup: - mu_check (rv == SECSuccess); - PublicKey_clear (pubkey); - PrivateKey_clear (pvtkey); - return; -} - -void -test_encrypt_once (int bad, unsigned int inlen) -{ - SECStatus rv = SECSuccess; - PublicKey pubkey = NULL; - PrivateKey pvtkey = NULL; - PublicKey pubkey2 = NULL; - PrivateKey pvtkey2 = NULL; - - unsigned char *bytes_in = NULL; - unsigned char *bytes_enc = NULL; - unsigned char *bytes_dec = NULL; - - unsigned int enclen; - P_CHECKC (PublicKey_encryptSize (inlen, &enclen)); - unsigned int declen = enclen; - - P_CHECKA (bytes_in = malloc (inlen)); - P_CHECKA (bytes_enc = malloc (enclen)); - P_CHECKA (bytes_dec= malloc (enclen)); - P_CHECKC (rand_bytes (bytes_in, inlen)); - - memset (bytes_dec, 0, declen); - - unsigned int encryptedBytes; - P_CHECKC (Keypair_new (&pvtkey, &pubkey)); - P_CHECKC (Keypair_new (&pvtkey2, &pubkey2)); - P_CHECKC (PublicKey_encrypt (pubkey, bytes_enc, - &encryptedBytes, enclen, - bytes_in, inlen)); - mu_check (encryptedBytes == enclen); - - if (bad == 1) - enclen = 30; - - if (bad == 2) { - bytes_enc[4] = 6; - bytes_enc[5] = 0; - } - - if (bad == 3) { - bytes_enc[40] = 6; - bytes_enc[41] = 0; - } - - unsigned int decryptedBytes; - PrivateKey key_to_use = (bad == 4) ? pvtkey2 : pvtkey; - P_CHECKC (PrivateKey_decrypt (key_to_use, bytes_dec, &decryptedBytes, declen, - bytes_enc, enclen)); - mu_check (decryptedBytes == inlen); - mu_check (!strncmp ((char *)bytes_in, (char *)bytes_dec, inlen)); - -cleanup: - mu_check (bad ? (rv == SECFailure) : (rv == SECSuccess)); - if (bytes_in) free (bytes_in); - if (bytes_enc) free (bytes_enc); - if (bytes_dec) free (bytes_dec); - - PublicKey_clear (pubkey); - PrivateKey_clear (pvtkey); - PublicKey_clear (pubkey2); - PrivateKey_clear (pvtkey2); - return; -} - -void -mu_test_encrypt_good (void) -{ - test_encrypt_once (0, 100); -} - -void -mu_test_encrypt_good_long (void) -{ - test_encrypt_once (0, 1000000); -} - -void -mu_test_encrypt_too_short (void) -{ - test_encrypt_once (1, 87); -} - -void -mu_test_encrypt_garbage (void) -{ - test_encrypt_once (2, 10023); -} - -void -mu_test_encrypt_garbage2 (void) -{ - test_encrypt_once (3, 8123); -} - -void -mu_test_decrypt_wrong_key (void) -{ - test_encrypt_once (4, 81230); -} - -void -mu_test_export (void) -{ - SECStatus rv = SECSuccess; - PublicKey pubkey = NULL; - - unsigned char raw_bytes[CURVE25519_KEY_LEN]; - unsigned char raw_bytes2[CURVE25519_KEY_LEN]; - for (int i=0; i< CURVE25519_KEY_LEN; i++) { - raw_bytes[i] = (3*i+7) % 0xFF; - } - - P_CHECKC (PublicKey_import (&pubkey, raw_bytes, CURVE25519_KEY_LEN)); - P_CHECKC (PublicKey_export (pubkey, raw_bytes2)); - - for (int i=0; i< CURVE25519_KEY_LEN; i++) { - mu_check (raw_bytes[i] == raw_bytes2[i]); - } - -cleanup: - mu_check (rv == SECSuccess); - PublicKey_clear (pubkey); - return; -} - -void -mu_test_export_hex (void) -{ - SECStatus rv = SECSuccess; - PublicKey pubkey = NULL; - - const unsigned char hex_bytes[2*CURVE25519_KEY_LEN] = \ - "102030405060708090A0B0C0D0E0F00000FFEEDDCCBBAA998877665544332211"; - const unsigned char hex_bytesl[2*CURVE25519_KEY_LEN] = \ - "102030405060708090a0B0C0D0E0F00000FfeEddcCbBaa998877665544332211"; - - const unsigned char raw_bytes_should[CURVE25519_KEY_LEN] = { - 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80, - 0x90, 0xA0, 0xB0, 0xC0, 0xD0, 0xE0, 0xF0, 0x00, - 0x00, 0xFF, 0xEE, 0xDD, 0xCC, 0xBB, 0xAA, 0x99, - 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11 }; - unsigned char raw_bytes[CURVE25519_KEY_LEN]; - unsigned char hex_bytes2[2*CURVE25519_KEY_LEN+1]; - - // Make sure that invalid lengths are rejected. - mu_check (PublicKey_import_hex (&pubkey, hex_bytes, - 2*CURVE25519_KEY_LEN-1) == SECFailure); - mu_check (PublicKey_import_hex (&pubkey, hex_bytes, - 2*CURVE25519_KEY_LEN+1) == SECFailure); - - // Import a key in upper-case hex - P_CHECKC (PublicKey_import_hex (&pubkey, hex_bytes, 2*CURVE25519_KEY_LEN)); - P_CHECKC (PublicKey_export (pubkey, raw_bytes)); - PublicKey_clear (pubkey); - pubkey = NULL; - - for (int i=0; i -#include "mutest.h" - - - -void -mu_test_example (void) -{ - mu_check (1); -} - - - diff --git a/third_party/prio/ptest/fft_test.c b/third_party/prio/ptest/fft_test.c deleted file mode 100644 index 75d168bede0c..000000000000 --- a/third_party/prio/ptest/fft_test.c +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Copyright (c) 2018, Henry Corrigan-Gibbs - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -#include -#include -#include - -#include "mutest.h" -#include "prio/config.h" -#include "prio/mparray.h" -#include "prio/poly.h" -#include "prio/util.h" - -void -mu_test__fft_one (void) -{ - SECStatus rv = SECSuccess; - PrioConfig cfg = NULL; - MPArray points_in = NULL; - MPArray points_out = NULL; - - P_CHECKA (cfg = PrioConfig_newTest (123)); - P_CHECKA (points_in = MPArray_new (1)); - P_CHECKA (points_out = MPArray_new (1)); - - mp_set (&points_in->data[0], 3); - mu_check (poly_fft (points_out, points_in, cfg, false) == SECSuccess); - - mu_check (mp_cmp_d(&points_in->data[0], 3) == 0); - mu_check (mp_cmp_d(&points_out->data[0], 3) == 0); - -cleanup: - mu_check (rv == SECSuccess); - MPArray_clear (points_in); - MPArray_clear (points_out); - - PrioConfig_clear (cfg); -} - -void -mu_test__fft_roots (void) -{ - SECStatus rv = SECSuccess; - PrioConfig cfg = NULL; - mp_int tmp; - MP_DIGITS (&tmp) = NULL; - - P_CHECKA (cfg = PrioConfig_newTest (90)); - MP_CHECKC (mp_init (&tmp)); - - mp_int roots[4]; - poly_fft_get_roots (roots, 4, cfg, false); - - for (int i=0; i<4; i++) { - mp_exptmod_d(&roots[i], 4, &cfg->modulus, &tmp); - mu_check (mp_cmp_d( &tmp, 1) == 0); - } - -cleanup: - mu_check (rv == SECSuccess); - mp_clear (&tmp); - PrioConfig_clear (cfg); -} - -void -mu_test__fft_simple (void) -{ - SECStatus rv = SECSuccess; - const int nPoints = 4; - - PrioConfig cfg = NULL; - MPArray points_in = NULL; - MPArray points_out = NULL; - - mp_int should_be, tmp; - mp_int roots[nPoints]; - MP_DIGITS (&should_be) = NULL; - MP_DIGITS (&tmp) = NULL; - for (int i=0; idata[0], 3); - mp_set (&points_in->data[1], 8); - mp_set (&points_in->data[2], 7); - mp_set (&points_in->data[3], 9); - mu_check (poly_fft (points_out, points_in, cfg, false) == SECSuccess); - - for (int i=0; imodulus, &tmp) == MP_OKAY); - mu_check (mp_mulmod(&tmp, &points_in->data[j], &cfg->modulus, &tmp) == MP_OKAY); - mu_check (mp_addmod(&should_be, &tmp, &cfg->modulus, &should_be) == MP_OKAY); - } - - /* - puts("Should be:"); - mp_print(&should_be, stdout); - puts(""); - mp_print(&points_out[i], stdout); - puts(""); - */ - mu_check (mp_cmp (&should_be, &points_out->data[i]) == 0); - } - -cleanup: - mu_check (rv == SECSuccess); - mp_clear (&tmp); - mp_clear (&should_be); - MPArray_clear (points_in); - MPArray_clear (points_out); - PrioConfig_clear (cfg); -} - -void -mu_test__fft_invert (void) -{ - SECStatus rv = SECSuccess; - const int nPoints = 8; - - PrioConfig cfg = NULL; - MPArray points_in = NULL; - MPArray points_out = NULL; - MPArray points_out2 = NULL; - mp_int roots[nPoints]; - - P_CHECKA (cfg = PrioConfig_newTest (91)); - P_CHECKA (points_in = MPArray_new (nPoints)); - P_CHECKA (points_out = MPArray_new (nPoints)); - P_CHECKA (points_out2 = MPArray_new (nPoints)); - - poly_fft_get_roots (roots, nPoints, cfg, false); - - mp_set (&points_in->data[0], 3); - mp_set (&points_in->data[1], 8); - mp_set (&points_in->data[2], 7); - mp_set (&points_in->data[3], 9); - mp_set (&points_in->data[4], 123); - mp_set (&points_in->data[5], 123123987); - mp_set (&points_in->data[6], 2); - mp_set (&points_in->data[7], 0); - mu_check (poly_fft(points_out, points_in, cfg, false) == SECSuccess); - mu_check (poly_fft(points_out2, points_out, cfg, true) == SECSuccess); - - for (int i=0; idata[i], &points_in->data[i]) == 0); - } - -cleanup: - mu_check (rv == SECSuccess); - - MPArray_clear (points_in); - MPArray_clear (points_out); - MPArray_clear (points_out2); - PrioConfig_clear (cfg); -} diff --git a/third_party/prio/ptest/mkmutest b/third_party/prio/ptest/mkmutest deleted file mode 100755 index d81501c19d3e..000000000000 --- a/third_party/prio/ptest/mkmutest +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env bash -# -# This file is part of mutest, a simple micro unit testing framework for C. -# -# mutest was written by Leandro Lucarella and is released -# under the BOLA license, please see the LICENSE file or visit: -# http://blitiri.com.ar/p/bola/ -# -# This is a simple script to generate a C file that runs all the test suites -# present in .o files passed as arguments. -# -# Please, read the README file for more details. -# - - -# the trick here is getting all the test cases present in an object file using -# nm. All the tests must take and return void, start with "mutest_" and, of -# course, should not be static, which leads to a small limitation: all test -# cases must have unique names, even across test suites. - -# the first argument should be mutest.h -if [ -z "$1" ] -then - echo "Too few arguments" >&2 - echo "Usage: $0 mutest_h_location [object files...]" >&2 - exit 1 -fi -mutest_h="$1" -shift -echo "#include \"$mutest_h\"" -echo "void mu_run_suites() {" -echo -for file in "$@" -do - pr_file=`echo "$file" | sed 's/\"/\\\\\"/g'` - suite=`basename "$file" .o | sed 's/\"/\\\\\"/g'` -#symbols=`nm "$file" | egrep '^[[:xdigit:]]{8} T mu_\w+$' | cut -c12-` - symbols=`nm "$file" | egrep ' T _mu_\w+$' | cut -c21-` - symbols+=`nm "$file" | egrep ' T mu_\w+$' | cut -c20-` - tests=`echo "$symbols" | egrep '^mu_test'` - inits=`echo "$symbols" | egrep '^mu_init'` - terms=`echo "$symbols" | egrep '^mu_term'` - echo -e '\tdo {' - echo -e '\t\tmutest_suite_name = "'"$suite"'";' - echo -e '\t\tmu_print(MU_SUITE, "\\nRunning suite '"'$suite'"'\\n");' - for init in $inits - do - echo -e "\\t\\tmu_run_init($init);" - done - for testcase in $tests - do - echo -e "\t\tmu_run_case($testcase);" - done - for term in $terms - do - echo -e "\t\tmu_run_term($term);" - done - echo -e "\t\tif (mutest_suite_failed) ++mutest_failed_suites;" - echo -e "\t\telse ++mutest_passed_suites;" - echo -e "\t\tmutest_suite_failed = 0;" - echo -e '\t} while (0);' - echo -done -echo "}" - diff --git a/third_party/prio/ptest/mpi_test.c b/third_party/prio/ptest/mpi_test.c deleted file mode 100644 index 8c8d4e268077..000000000000 --- a/third_party/prio/ptest/mpi_test.c +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2018, Henry Corrigan-Gibbs - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -#include - -#include "mutest.h" - - -void -mu_test_mpi__add (void) -{ - mp_int a; - mp_int b; - mp_int c; - - mu_check (mp_init (&a) == MP_OKAY); - mu_check (mp_init (&b) == MP_OKAY); - mu_check (mp_init (&c) == MP_OKAY); - - mp_set (&a, 10); - mp_set (&b, 7); - mp_add (&a, &b, &c); - - mp_set (&a, 17); - mu_check (mp_cmp (&a, &c) == 0); - - mp_clear (&a); - mp_clear (&b); - mp_clear (&c); -} - - - diff --git a/third_party/prio/ptest/mutest.c b/third_party/prio/ptest/mutest.c deleted file mode 100644 index 728340aa5cc2..000000000000 --- a/third_party/prio/ptest/mutest.c +++ /dev/null @@ -1,94 +0,0 @@ -/* - * This file is part of mutest, a simple micro unit testing framework for C. - * - * mutest was written by Leandro Lucarella and is released - * under the BOLA license, please see the LICENSE file or visit: - * http://blitiri.com.ar/p/bola/ - * - * This is the main program, it runs all the test suites and shows the - * results. The main work (of running the test suite) is done by the (usually) - * synthesized mu_run_suites() function, which can be generated using the - * mkmutest script (or written manually). - * - * Please, read the README file for more details. - */ - -#include -#include /* printf(), fprintf() */ -#include /* strncmp() */ - -#include "mutest.h" /* MU_* constants, mu_print() */ - -/* - * note that all global variables are public because they need to be accessed - * from other modules, like the test suites or the module implementing - * mu_run_suites() - */ - -/* globals for managing test suites */ -const char* mutest_suite_name; -int mutest_failed_suites; -int mutest_passed_suites; -int mutest_skipped_suites; -int mutest_suite_failed; - - -/* globals for managing test cases */ -const char* mutest_case_name; -int mutest_failed_cases; -int mutest_passed_cases; -int mutest_case_failed; - - -/* globals for managing checks */ -int mutest_failed_checks; -int mutest_passed_checks; - - -/* verbosity level, see mutest.h */ -int mutest_verbose_level = 1; /* exported for use in test suites */ - - - -/* - * only -v is supported right now, both "-v -v" and "-vv" are accepted for - * increasing the verbosity by 2. - */ -void parse_args(__attribute__((unused)) int argc, char* argv[]) { - while (*++argv) { - if (strncmp(*argv, "-v", 2) == 0) { - ++mutest_verbose_level; - char* c = (*argv) + 1; - while (*++c) { - if (*c != 'v') - break; - ++mutest_verbose_level; - } - } - } -} - - -int main(int argc, char* argv[]) { - - Prio_init (); - parse_args(argc, argv); - - mu_run_suites(); - - Prio_clear (); - - mu_print(MU_SUMMARY, "\n" - "Tests done:\n" - "\t%d test suite(s) passed, %d failed, %d skipped.\n" - "\t%d test case(s) passed, %d failed.\n" - "\t%d check(s) passed, %d failed.\n" - "\n", - mutest_passed_suites, mutest_failed_suites, - mutest_skipped_suites, - mutest_passed_cases, mutest_failed_cases, - mutest_passed_checks, mutest_failed_checks); - - return (mutest_failed_suites + mutest_skipped_suites) ? 1 : 0; -} - diff --git a/third_party/prio/ptest/mutest.h b/third_party/prio/ptest/mutest.h deleted file mode 100644 index 9afbac0c8d50..000000000000 --- a/third_party/prio/ptest/mutest.h +++ /dev/null @@ -1,248 +0,0 @@ -/* - * This file is part of mutest, a simple micro unit testing framework for C. - * - * mutest was written by Leandro Lucarella and is released - * under the BOLA license, please see the LICENSE file or visit: - * http://blitiri.com.ar/p/bola/ - * - * This header file should be included in the source files that will make up - * a test suite. It's used for both C and Python implementation, but when - * using the Python implementation you should define the MUTEST_PY macro. - * If you implement your mu_run_suites() function yourself, you probably will - * need to include this header too (see mkmutest). - * - * Please, read the README file for more details. - */ - -#include /* fprintf() */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* verbosity level (each level shows all the previous levels too) */ -enum { - MU_QUIET = 0, /* be completely quiet */ - MU_ERROR, /* shows errors only */ - MU_SUMMARY, /* shows a summary */ - MU_SUITE, /* shows test suites progress */ - MU_CASE, /* shows test cases progress */ - MU_CHECK /* shows the current running check */ -}; - -/* print a message according to the verbosity level */ -#define mu_print(level, ...) \ - do { \ - if (mutest_verbose_level >= level) { \ - if (mutest_verbose_level == MU_ERROR) \ - fprintf(stderr, __VA_ARGS__); \ - else \ - fprintf(stdout, __VA_ARGS__); \ - } \ - } while (0) - -/* print an error message */ -#define mu_printerr(name, action) \ - mu_print(MU_ERROR, __FILE__ ":%d: " name " failed, "\ - action " test case\n", __LINE__); - -/* modify the internal state so a failure gets counted */ -#define mutest_count_err ++mutest_failed_checks; mutest_case_failed = 1; - -/* modify the internal state so a success gets counted */ -#define mutest_count_suc ++mutest_passed_checks; - -#ifdef __cplusplus - -#include - -/* print an error message triggered by a C++ exception */ -#define mu_printex(name, action, ex) \ - mu_print(MU_ERROR, __FILE__ ":%d: " name " failed, " \ - "exception thrown (%s), " action \ - " test case\n", __LINE__, ex); - -#define mutest_try try { -#define mutest_catch(name, action, final) \ - } catch (const std::exception& e) { \ - mutest_count_err \ - mu_printex(name, action, e.what()); \ - final; \ - } catch (...) { \ - mutest_count_err \ - mu_printex(name, action, "[unknown]"); \ - final; \ - } - -#else /* !__cplusplus */ - -#define mutest_try -#define mutest_catch(name, action, exp) - -#endif /* __cplusplus */ - -/* check that an expression evaluates to true, continue if the check fails */ -#define mu_check_base(exp, name, action, final) \ - do { \ - mu_print(MU_CHECK, "\t\t* Checking " name "(" #exp ")...\n"); \ - mutest_try \ - if (exp) mutest_count_suc \ - else { \ - mutest_count_err \ - mu_printerr(name "(" #exp ")", action); \ - final; \ - } \ - mutest_catch(name, action, final) \ - } while (0) - -/* check that an expression evaluates to true, continue if the check fails */ -#define mu_check(exp) mu_check_base(exp, "mu_check", "resuming", continue) - -/* - * ensure that an expression evaluates to true, abort the current test - * case if the check fails - */ -#define mu_ensure(exp) mu_check_base(exp, "mu_ensure", "aborting", return) - -#ifdef __cplusplus - -#define mu_echeck_base(ex, exp, name, action, final) \ - do { \ - mu_print(MU_CHECK, "\t\t* Checking " name "(" #ex ", " #exp \ - ")...\n"); \ - try { \ - exp; \ - mutest_count_err \ - mu_printerr(name "(" #ex ", " #exp ")", \ - "no exception thrown, " action); \ - final; \ - } catch (const ex& e) { \ - mutest_count_suc \ - } catch (const std::exception& e) { \ - mutest_count_err \ - mu_printex(name "(" #ex ", " #exp ")", action, \ - e.what()); \ - final; \ - } catch (...) { \ - mutest_count_err \ - mu_printex(name "(" #ex ", " #exp ")", action, \ - "[unknown]"); \ - final; \ - } \ - } while (0) - -/* - * check that an expression throws a particular exception, continue if the - * check fails - */ -#define mu_echeck(ex, exp) \ - mu_echeck_base(ex, exp, "mu_echeck", "resuming", continue) - -/* - * ensure that an expression throws a particular exception, abort the current - * test case if the check fails - */ -#define mu_eensure(ex, exp) \ - mu_echeck_base(ex, exp, "mu_eensure", "aborting", return) - -#endif /* __cplusplus */ - -#ifndef MUTEST_PY /* we are using the C implementation */ - -/* - * this function implements the test suites execution, you should generate - * a module with this function using mkmutest, or take a look to that script - * if you want to implement your own customized version */ -void mu_run_suites(); - -/* macro for running a single initialization function */ -#ifndef mu_run_init -#define mu_run_init(name) \ - { \ - int name(); \ - int r; \ - mu_print(MU_CASE, "\t+ Executing initialization function " \ - "'" #name "'...\n"); \ - if ((r = name())) { \ - mu_print(MU_ERROR, "%s:" #name ": initialization " \ - "function failed (returned %d), " \ - "skipping test suite...\n", \ - mutest_suite_name, r); \ - ++mutest_skipped_suites; \ - break; \ - } \ - } do { } while (0) -#endif /* mu_run_init */ - -/* macro for running a single test case */ -#ifndef mu_run_case -#define mu_run_case(name) \ - do { \ - mu_print(MU_CASE, "\t* Executing test case '" #name "'...\n");\ - mutest_case_name = #name; \ - void name(); \ - name(); \ - if (mutest_case_failed) { \ - ++mutest_failed_cases; \ - mutest_suite_failed = 1; \ - } else ++mutest_passed_cases; \ - mutest_case_failed = 0; \ - } while (0) -#endif /* mu_run_case */ - -/* macro for running a single termination function */ -#ifndef mu_run_term -#define mu_run_term(name) \ - do { \ - mu_print(MU_CASE, "\t- Executing termination function '" \ - #name "'...\n"); \ - void name(); \ - name(); \ - } while (0) -#endif /* mu_run_term */ - -/* - * mutest exported variables for internal use, do not use directly unless you - * know what you're doing. - */ -extern const char* mutest_suite_name; -extern int mutest_failed_suites; -extern int mutest_passed_suites; -extern int mutest_skipped_suites; -extern int mutest_suite_failed; -/* test cases */ -extern const char* mutest_case_name; -extern int mutest_failed_cases; -extern int mutest_passed_cases; -extern int mutest_case_failed; -/* checks */ -extern int mutest_failed_checks; -extern int mutest_passed_checks; -/* verbosity */ -extern int mutest_verbose_level; - -#else /* MUTEST_PY is defined, using the Python implementation */ - -/* this increments when the "API" changes, it's just for sanity check */ -int mutest_api_version = 1; - -int mutest_case_failed; /* unused, for C implementation compatibility */ - -int mutest_passed_checks; -int mutest_failed_checks; -void mutest_reset_counters() { - mutest_passed_checks = 0; - mutest_failed_checks = 0; -} - -int mutest_verbose_level = MU_ERROR; -void mutest_set_verbose_level(int val) { - mutest_verbose_level = val; -} - -#endif /* MUTEST_PY */ - -#ifdef __cplusplus -} -#endif - diff --git a/third_party/prio/ptest/prg_test.c b/third_party/prio/ptest/prg_test.c deleted file mode 100644 index 289f8024b974..000000000000 --- a/third_party/prio/ptest/prg_test.c +++ /dev/null @@ -1,345 +0,0 @@ -/* - * Copyright (c) 2018, Henry Corrigan-Gibbs - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -#include - -#include "mutest.h" -#include "prio/prg.h" -#include "prio/util.h" - -void -mu_test__prg_simple (void) -{ - SECStatus rv = SECSuccess; - PrioPRGSeed key; - PRG prg = NULL; - - P_CHECKC (PrioPRGSeed_randomize (&key)); - P_CHECKA (prg = PRG_new (key)); - -cleanup: - mu_check (rv == SECSuccess); - PRG_clear (prg); -} - -void -mu_test__prg_repeat (void) -{ - SECStatus rv = SECSuccess; - const int buflen = 10000; - unsigned char buf1[buflen]; - unsigned char buf2[buflen]; - - PrioPRGSeed key; - PRG prg1 = NULL; - PRG prg2 = NULL; - - buf1[3] = 'a'; - buf2[3] = 'b'; - - P_CHECKC (PrioPRGSeed_randomize (&key)); - P_CHECKA (prg1 = PRG_new (key)); - P_CHECKA (prg2 = PRG_new (key)); - - P_CHECKC (PRG_get_bytes (prg1, buf1, buflen)); - P_CHECKC (PRG_get_bytes (prg2, buf2, buflen)); - - bool all_zero = true; - for (int i=0; i -1); - -cleanup: - mu_check (rv == SECSuccess); - mp_clear (&max); - mp_clear (&out); - PRG_clear (prg); -} - -void -mu_test_prg__multiple_of_8 (void) -{ - test_prg_once (256); - test_prg_once (256*256); -} - - -void -mu_test_prg__near_multiple_of_8 (void) -{ - test_prg_once (256+1); - test_prg_once (256*256+1); -} - -void -mu_test_prg__odd (void) -{ - test_prg_once (39); - test_prg_once (123); - test_prg_once (993123); -} - -void -mu_test_prg__large (void) -{ - test_prg_once (1231239933); -} - -void -mu_test_prg__bit(void) -{ - test_prg_once (1); - for (int i = 0; i < 100; i++) - test_prg_once (2); -} - -void -test_prg_distribution (int limit) -{ - int bins[limit]; - SECStatus rv = SECSuccess; - PrioPRGSeed key; - mp_int max; - mp_int out; - PRG prg = NULL; - - MP_DIGITS (&max) = NULL; - MP_DIGITS (&out) = NULL; - - P_CHECKC (PrioPRGSeed_randomize (&key)); - P_CHECKA (prg = PRG_new (key)); - - MP_CHECKC (mp_init (&max)); - MP_CHECKC (mp_init (&out)); - - mp_set (&max, limit); - - for (int i = 0; i < limit; i++) { - bins[i] = 0; - } - - for (int i = 0; i < limit*limit; i++) { - P_CHECKC (PRG_get_int (prg, &out, &max)); - mu_check (mp_cmp_d (&out, limit) == -1); - mu_check (mp_cmp_z (&out) > -1); - - unsigned char ival[2] = {0x00, 0x00}; - MP_CHECKC (mp_to_fixlen_octets (&out, ival, 2)); - if (ival[1] + 256*ival[0] < limit) { - bins[ival[1] + 256*ival[0]] += 1; - } else { - mu_check (false); - } - } - - for (int i = 0; i < limit; i++) { - mu_check (bins[i] > limit/2); - } - -cleanup: - mu_check (rv == SECSuccess); - mp_clear (&max); - mp_clear (&out); - PRG_clear (prg); -} - - -void -mu_test__prg_distribution123 (void) -{ - test_prg_distribution(123); -} - -void -mu_test__prg_distribution257 (void) -{ - test_prg_distribution(257); -} - -void -mu_test__prg_distribution259 (void) -{ - test_prg_distribution(259); -} - -void -test_prg_distribution_large (mp_int *max) -{ - const int limit = 16; - int bins[limit]; - SECStatus rv = SECSuccess; - PrioPRGSeed key; - mp_int out; - PRG prg = NULL; - - MP_DIGITS (&out) = NULL; - - P_CHECKC (PrioPRGSeed_randomize (&key)); - P_CHECKA (prg = PRG_new (key)); - - MP_CHECKC (mp_init (&out)); - - for (int i = 0; i < limit; i++) { - bins[i] = 0; - } - - for (int i = 0; i < 100*limit*limit; i++) { - MP_CHECKC (PRG_get_int (prg, &out, max)); - mu_check (mp_cmp (&out, max) == -1); - mu_check (mp_cmp_z (&out) > -1); - - unsigned long res; - MP_CHECKC (mp_mod_d (&out, limit, &res)); - bins[res] += 1; - } - - for (int i = 0; i < limit; i++) { - mu_check (bins[i] > limit/2); - } - -cleanup: - mu_check (rv == SECSuccess); - mp_clear (&out); - PRG_clear (prg); -} - -void -mu_test__prg_distribution_large (void) -{ - SECStatus rv = SECSuccess; - mp_int max; - MP_DIGITS (&max) = NULL; - MP_CHECKC (mp_init (&max)); - - char bytes[] = "FF1230985198451798EDC8123"; - MP_CHECKC (mp_read_radix (&max, bytes, 16)); - test_prg_distribution_large (&max); - -cleanup: - mu_check (rv == SECSuccess); - mp_clear (&max); -} - - -void -mu_test__prg_share_arr (void) -{ - SECStatus rv = SECSuccess; - PrioConfig cfg = NULL; - MPArray arr = NULL; - MPArray arr_share = NULL; - PRG prg = NULL; - PrioPRGSeed seed; - - P_CHECKA (cfg = PrioConfig_newTest (72)); - P_CHECKC (PrioPRGSeed_randomize (&seed)); - P_CHECKA (arr = MPArray_new (10)); - P_CHECKA (arr_share = MPArray_new (10)); - P_CHECKA (prg = PRG_new (seed)); - - for (int i=0; i<10; i++) { - mp_set (&arr->data[i], i); - } - - P_CHECKC (PRG_share_array (prg, arr_share, arr, cfg)); - - // Reset PRG - PRG_clear (prg); - P_CHECKA (prg = PRG_new (seed)); - - // Read pseudorandom values into arr - P_CHECKC (PRG_get_array (prg, arr, &cfg->modulus)); - - - for (int i=0; i<10; i++) { - MP_CHECKC (mp_addmod (&arr->data[i], &arr_share->data[i], - &cfg->modulus, &arr->data[i])); - mu_check (mp_cmp_d (&arr->data[i], i) == 0); - } - -cleanup: - mu_check (rv == SECSuccess); - - PRG_clear (prg); - MPArray_clear (arr); - MPArray_clear (arr_share); - PrioConfig_clear (cfg); -} diff --git a/third_party/prio/ptest/rand_test.c b/third_party/prio/ptest/rand_test.c deleted file mode 100644 index f0efc9ca9af4..000000000000 --- a/third_party/prio/ptest/rand_test.c +++ /dev/null @@ -1,194 +0,0 @@ -/* - * Copyright (c) 2018, Henry Corrigan-Gibbs - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -#include - -#include "mutest.h" -#include "prio/rand.h" -#include "prio/util.h" - -void -mu_test__util_msb_mast (void) -{ - mu_check (msb_mask (0x01) == 0x01); - mu_check (msb_mask (0x02) == 0x03); - mu_check (msb_mask (0x0C) == 0x0F); - mu_check (msb_mask (0x1C) == 0x1F); - mu_check (msb_mask (0xFF) == 0xFF); -} - -void -test_rand_once (int limit) -{ - mp_int max; - mp_int out; - - mu_check (mp_init (&max) == MP_OKAY); - mu_check (mp_init (&out) == MP_OKAY); - - mp_set (&max, limit); - - mu_check (rand_int (&out, &max) == MP_OKAY); - mu_check (mp_cmp_d (&out, limit) == -1); - mu_check (mp_cmp_z (&out) > -1); - - mp_clear (&max); - mp_clear (&out); -} - -void -mu_test_rand__multiple_of_8 (void) -{ - test_rand_once (256); - test_rand_once (256*256); -} - - -void -mu_test_rand__near_multiple_of_8 (void) -{ - test_rand_once (256+1); - test_rand_once (256*256+1); -} - -void -mu_test_rand__odd (void) -{ - test_rand_once (39); - test_rand_once (123); - test_rand_once (993123); -} - -void -mu_test_rand__large (void) -{ - test_rand_once (1231239933); -} - -void -mu_test_rand__bit(void) -{ - test_rand_once (1); - for (int i = 0; i < 100; i++) - test_rand_once (2); -} - -void -test_rand_distribution (int limit) -{ - SECStatus rv = SECSuccess; - int bins[limit]; - - mp_int max; - mp_int out; - - MP_DIGITS (&max) = NULL; - MP_DIGITS (&out) = NULL; - - MP_CHECKC (mp_init (&max)); - MP_CHECKC (mp_init (&out)); - - mp_set (&max, limit); - - for (int i = 0; i < limit; i++) { - bins[i] = 0; - } - - for (int i = 0; i < limit*limit; i++) { - mu_check (rand_int (&out, &max) == MP_OKAY); - mu_check (mp_cmp_d (&out, limit) == -1); - mu_check (mp_cmp_z (&out) > -1); - - unsigned char ival[2] = {0x00, 0x00}; - MP_CHECKC (mp_to_fixlen_octets (&out, ival, 2)); - if (ival[1] + 256*ival[0] < limit) { - bins[ival[1] + 256*ival[0]] += 1; - } else { - mu_check (false); - } - } - - for (int i = 0; i < limit; i++) { - mu_check (bins[i] > limit/2); - } - -cleanup: - mu_check (rv == SECSuccess); - mp_clear (&max); - mp_clear (&out); -} - - -void -mu_test__rand_distribution123 (void) -{ - test_rand_distribution(123); -} - -void -mu_test__rand_distribution257 (void) -{ - test_rand_distribution(257); -} - -void -mu_test__rand_distribution259 (void) -{ - test_rand_distribution(259); -} - -void -test_rand_distribution_large (mp_int *max) -{ - SECStatus rv = SECSuccess; - int limit = 16; - int bins[limit]; - - mp_int out; - MP_DIGITS (&out) = NULL; - MP_CHECKC (mp_init (&out)); - - for (int i = 0; i < limit; i++) { - bins[i] = 0; - } - - for (int i = 0; i < 100*limit*limit; i++) { - MP_CHECKC (rand_int (&out, max)); - mu_check (mp_cmp (&out, max) == -1); - mu_check (mp_cmp_z (&out) > -1); - - unsigned long res; - MP_CHECKC (mp_mod_d (&out, limit, &res)); - bins[res] += 1; - } - - for (int i = 0; i < limit; i++) { - mu_check (bins[i] > limit/2); - } - -cleanup: - mu_check (rv == SECSuccess); - mp_clear (&out); -} - -void -mu_test__rand_distribution_large (void) -{ - SECStatus rv = SECSuccess; - mp_int max; - MP_DIGITS (&max) = NULL; - MP_CHECKC (mp_init (&max)); - - char bytes[] = "FF1230985198451798EDC8123"; - MP_CHECKC (mp_read_radix (&max, bytes, 16)); - test_rand_distribution_large (&max); - -cleanup: - mu_check (rv == SECSuccess); - mp_clear (&max); -} diff --git a/third_party/prio/ptest/serial_test.c b/third_party/prio/ptest/serial_test.c deleted file mode 100644 index 02388c82e6bb..000000000000 --- a/third_party/prio/ptest/serial_test.c +++ /dev/null @@ -1,319 +0,0 @@ -/* - * Copyright (c) 2018, Henry Corrigan-Gibbs - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -#include -#include -#include - -#include "mutest.h" -#include "prio/client.h" -#include "prio/config.h" -#include "prio/serial.h" -#include "prio/server.h" -#include "prio/util.h" - -SECStatus -gen_client_packets (const_PrioConfig cfg, PrioPacketClient pA, PrioPacketClient pB) -{ - SECStatus rv = SECSuccess; - - const int ndata = cfg->num_data_fields; - bool data_items[ndata]; - - for (int i=0; i < ndata; i++) { - data_items[i] = (i % 3 == 1) || (i % 5 == 3); - } - - P_CHECKC (PrioPacketClient_set_data (cfg, data_items, pA, pB)); - -cleanup: - return rv; -} - - -void serial_client (int bad) -{ - SECStatus rv = SECSuccess; - PrioConfig cfg = NULL; - PrioConfig cfg2 = NULL; - PrioPacketClient pA = NULL; - PrioPacketClient pB = NULL; - PrioPacketClient qA = NULL; - PrioPacketClient qB = NULL; - - const unsigned char *batch_id1 = (unsigned char *)"my_test_prio_batch1"; - const unsigned char *batch_id2 = (unsigned char *)"my_test_prio_batch2"; - const unsigned int batch_id_len = strlen ((char *)batch_id1); - - msgpack_sbuffer sbufA, sbufB; - msgpack_packer pkA, pkB; - msgpack_unpacker upkA, upkB; - - msgpack_sbuffer_init (&sbufA); - msgpack_packer_init (&pkA, &sbufA, msgpack_sbuffer_write); - - msgpack_sbuffer_init (&sbufB); - msgpack_packer_init (&pkB, &sbufB, msgpack_sbuffer_write); - - P_CHECKA (cfg = PrioConfig_new (100, NULL, NULL, batch_id1, batch_id_len)); - P_CHECKA (cfg2 = PrioConfig_new (100, NULL, NULL, batch_id2, batch_id_len)); - P_CHECKA (pA = PrioPacketClient_new (cfg, PRIO_SERVER_A)); - P_CHECKA (pB = PrioPacketClient_new (cfg, PRIO_SERVER_B)); - P_CHECKA (qA = PrioPacketClient_new (cfg, PRIO_SERVER_A)); - P_CHECKA (qB = PrioPacketClient_new (cfg, PRIO_SERVER_B)); - - P_CHECKC (gen_client_packets (cfg, pA, pB)); - - P_CHECKC (serial_write_packet_client (&pkA, pA, cfg)); - P_CHECKC (serial_write_packet_client (&pkB, pB, cfg)); - - if (bad == 1) { - sbufA.size = 1; - } - - if (bad == 2) { - memset (sbufA.data, 0, sbufA.size); - } - - const int size_a = sbufA.size; - const int size_b = sbufB.size; - - P_CHECKCB (msgpack_unpacker_init (&upkA, 0)); - P_CHECKCB (msgpack_unpacker_init (&upkB, 0)); - - P_CHECKCB (msgpack_unpacker_reserve_buffer (&upkA, size_a)); - P_CHECKCB (msgpack_unpacker_reserve_buffer (&upkB, size_b)); - - memcpy (msgpack_unpacker_buffer (&upkA), sbufA.data, size_a); - memcpy (msgpack_unpacker_buffer (&upkB), sbufB.data, size_b); - - msgpack_unpacker_buffer_consumed (&upkA, size_a); - msgpack_unpacker_buffer_consumed (&upkB, size_b); - - P_CHECKC (serial_read_packet_client (&upkA, qA, cfg)); - P_CHECKC (serial_read_packet_client (&upkB, qB, (bad == 3) ? cfg2 : cfg)); - - if (!bad) { - mu_check (PrioPacketClient_areEqual (pA, qA)); - mu_check (PrioPacketClient_areEqual (pB, qB)); - mu_check (!PrioPacketClient_areEqual (pB, qA)); - mu_check (!PrioPacketClient_areEqual (pA, qB)); - } - -cleanup: - PrioPacketClient_clear (pA); - PrioPacketClient_clear (pB); - PrioPacketClient_clear (qA); - PrioPacketClient_clear (qB); - PrioConfig_clear (cfg); - PrioConfig_clear (cfg2); - msgpack_sbuffer_destroy (&sbufA); - msgpack_sbuffer_destroy (&sbufB); - msgpack_unpacker_destroy (&upkA); - msgpack_unpacker_destroy (&upkB); - mu_check (bad ? rv == SECFailure : rv == SECSuccess); -} - - -void mu_test__serial_client (void) -{ - serial_client (0); -} - -void mu_test__serial_client_bad1 (void) -{ - serial_client (1); -} - -void mu_test__serial_client_bad2 (void) -{ - serial_client (2); -} - -void mu_test__serial_client_bad3 (void) -{ - serial_client (3); -} - -void test_verify1 (int bad) -{ - SECStatus rv = SECSuccess; - PrioPacketVerify1 v1 = NULL; - PrioPacketVerify1 v2 = NULL; - PrioConfig cfg = NULL; - - P_CHECKA (cfg = PrioConfig_newTest (1)); - P_CHECKA (v1 = PrioPacketVerify1_new()); - P_CHECKA (v2 = PrioPacketVerify1_new()); - mp_set (&v1->share_d, 4); - mp_set (&v1->share_e, 10); - - msgpack_sbuffer sbuf; - msgpack_packer pk; - msgpack_unpacker upk; - - msgpack_sbuffer_init (&sbuf); - msgpack_packer_init (&pk, &sbuf, msgpack_sbuffer_write); - - P_CHECKC (PrioPacketVerify1_write (v1, &pk)); - - if (bad == 1) { - mp_set (&cfg->modulus, 6); - } - - P_CHECKCB (msgpack_unpacker_init (&upk, 0)); - P_CHECKCB (msgpack_unpacker_reserve_buffer (&upk, sbuf.size)); - memcpy (msgpack_unpacker_buffer (&upk), sbuf.data, sbuf.size); - msgpack_unpacker_buffer_consumed (&upk, sbuf.size); - - P_CHECKC (PrioPacketVerify1_read (v2, &upk, cfg)); - - mu_check (!mp_cmp (&v1->share_d, &v2->share_d)); - mu_check (!mp_cmp (&v1->share_e, &v2->share_e)); - mu_check (!mp_cmp_d (&v2->share_d, 4)); - mu_check (!mp_cmp_d (&v2->share_e, 10)); - -cleanup: - mu_check (bad ? rv == SECFailure : rv == SECSuccess); - PrioConfig_clear (cfg); - PrioPacketVerify1_clear (v1); - PrioPacketVerify1_clear (v2); - msgpack_unpacker_destroy (&upk); - msgpack_sbuffer_destroy (&sbuf); -} - -void mu_test_verify1_good (void) -{ - test_verify1 (0); -} - -void mu_test_verify1_bad (void) -{ - test_verify1 (1); -} - -void test_verify2 (int bad) -{ - SECStatus rv = SECSuccess; - PrioPacketVerify2 v1 = NULL; - PrioPacketVerify2 v2 = NULL; - PrioConfig cfg = NULL; - - P_CHECKA (cfg = PrioConfig_newTest (1)); - P_CHECKA (v1 = PrioPacketVerify2_new()); - P_CHECKA (v2 = PrioPacketVerify2_new()); - mp_set (&v1->share_out, 4); - - msgpack_sbuffer sbuf; - msgpack_packer pk; - msgpack_unpacker upk; - - msgpack_sbuffer_init (&sbuf); - msgpack_packer_init (&pk, &sbuf, msgpack_sbuffer_write); - - P_CHECKC (PrioPacketVerify2_write (v1, &pk)); - - if (bad == 1) { - mp_set (&cfg->modulus, 4); - } - - P_CHECKCB (msgpack_unpacker_init (&upk, 0)); - P_CHECKCB (msgpack_unpacker_reserve_buffer (&upk, sbuf.size)); - memcpy (msgpack_unpacker_buffer (&upk), sbuf.data, sbuf.size); - msgpack_unpacker_buffer_consumed (&upk, sbuf.size); - - P_CHECKC (PrioPacketVerify2_read (v2, &upk, cfg)); - - mu_check (!mp_cmp (&v1->share_out, &v2->share_out)); - mu_check (!mp_cmp_d (&v2->share_out, 4)); - -cleanup: - mu_check (bad ? rv == SECFailure : rv == SECSuccess); - PrioConfig_clear (cfg); - PrioPacketVerify2_clear (v1); - PrioPacketVerify2_clear (v2); - msgpack_unpacker_destroy (&upk); - msgpack_sbuffer_destroy (&sbuf); -} - -void mu_test_verify2_good (void) -{ - test_verify2 (0); -} - -void mu_test_verify2_bad (void) -{ - test_verify2 (1); -} - - -void test_total_share (int bad) -{ - SECStatus rv = SECSuccess; - PrioTotalShare t1 = NULL; - PrioTotalShare t2 = NULL; - PrioConfig cfg = NULL; - - P_CHECKA (cfg = PrioConfig_newTest ((bad == 2 ? 4 : 3))); - P_CHECKA (t1 = PrioTotalShare_new ()); - P_CHECKA (t2 = PrioTotalShare_new ()); - - t1->idx = PRIO_SERVER_A; - P_CHECKC (MPArray_resize (t1->data_shares, 3)); - - mp_set (&t1->data_shares->data[0], 10); - mp_set (&t1->data_shares->data[1], 20); - mp_set (&t1->data_shares->data[2], 30); - - msgpack_sbuffer sbuf; - msgpack_packer pk; - msgpack_unpacker upk; - - msgpack_sbuffer_init (&sbuf); - msgpack_packer_init (&pk, &sbuf, msgpack_sbuffer_write); - - P_CHECKC (PrioTotalShare_write (t1, &pk)); - - if (bad == 1) { - mp_set (&cfg->modulus, 4); - } - - P_CHECKCB (msgpack_unpacker_init (&upk, 0)); - P_CHECKCB (msgpack_unpacker_reserve_buffer (&upk, sbuf.size)); - memcpy (msgpack_unpacker_buffer (&upk), sbuf.data, sbuf.size); - msgpack_unpacker_buffer_consumed (&upk, sbuf.size); - - P_CHECKC (PrioTotalShare_read (t2, &upk, cfg)); - - mu_check (t1->idx == t2->idx); - mu_check (MPArray_areEqual (t1->data_shares, t2->data_shares)); - -cleanup: - mu_check (bad ? rv == SECFailure : rv == SECSuccess); - PrioConfig_clear (cfg); - PrioTotalShare_clear (t1); - PrioTotalShare_clear (t2); - msgpack_unpacker_destroy (&upk); - msgpack_sbuffer_destroy (&sbuf); -} - -void mu_test_total_good (void) -{ - test_total_share (0); -} - -void mu_test_total_bad1 (void) -{ - test_total_share (1); -} - -void mu_test_total_bad2 (void) -{ - test_total_share (2); -} - diff --git a/third_party/prio/ptest/server_test.c b/third_party/prio/ptest/server_test.c deleted file mode 100644 index 0a39c41bbd2a..000000000000 --- a/third_party/prio/ptest/server_test.c +++ /dev/null @@ -1,298 +0,0 @@ -/* - * Copyright (c) 2018, Henry Corrigan-Gibbs - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -#include -#include - -#include "mutest.h" -#include "prio/client.h" -#include "prio/server.h" -#include "prio/server.c" - -void mu_test__eval_poly (void) -{ - SECStatus rv = SECSuccess; - PrioConfig cfg = NULL; - MPArray coeffs = NULL; - mp_int eval_at, out; - - MP_DIGITS (&eval_at) = NULL; - MP_DIGITS (&out) = NULL; - - P_CHECKA (cfg = PrioConfig_newTest (54)); - P_CHECKA (coeffs = MPArray_new (3)); - - mp_set (&coeffs->data[0], 2); - mp_set (&coeffs->data[1], 8); - mp_set (&coeffs->data[2], 3); - - MP_CHECKC (mp_init (&eval_at)); - MP_CHECKC (mp_init (&out)); - mp_set (&eval_at, 7); - - const int val = 3*7*7 + 8*7 + 2; - mu_check (poly_eval (&out, coeffs, &eval_at, cfg) == SECSuccess); - mu_check (mp_cmp_d (&out, val) == 0); - -cleanup: - mu_check (rv == SECSuccess); - mp_clear (&out); - mp_clear (&eval_at); - MPArray_clear (coeffs); - PrioConfig_clear (cfg); -} - -void -mu_test__verify_new (void) -{ - SECStatus rv = SECSuccess; - PublicKey pkA = NULL; - PublicKey pkB = NULL; - PrivateKey skA = NULL; - PrivateKey skB = NULL; - PrioConfig cfg = NULL; - PrioServer sA = NULL; - PrioServer sB = NULL; - PrioVerifier vA = NULL; - PrioVerifier vB = NULL; - unsigned char *for_a = NULL; - unsigned char *for_b = NULL; - - mp_int fR, gR, hR; - MP_DIGITS (&fR) = NULL; - MP_DIGITS (&gR) = NULL; - MP_DIGITS (&hR) = NULL; - - PrioPRGSeed seed; - P_CHECKC (PrioPRGSeed_randomize (&seed)); - - P_CHECKC (Keypair_new (&skA, &pkA)); - P_CHECKC (Keypair_new (&skB, &pkB)); - P_CHECKA (cfg = PrioConfig_new (214, pkA, pkB, - (unsigned char *)"testbatch", 9)); - - const int ndata = PrioConfig_numDataFields (cfg); - { - bool data_items[ndata]; - for (int i=0; i < ndata; i++) { - // Arbitrary data - data_items[i] = (i % 3 == 1) || (i % 5 == 3); - } - - P_CHECKA (sA = PrioServer_new (cfg, 0, skA, seed)); - P_CHECKA (sB = PrioServer_new (cfg, 1, skB, seed)); - - unsigned int aLen, bLen; - P_CHECKC (PrioClient_encode (cfg, data_items, &for_a, &aLen, &for_b, &bLen)); - - MP_CHECKC (mp_init (&fR)); - MP_CHECKC (mp_init (&gR)); - MP_CHECKC (mp_init (&hR)); - - P_CHECKA (vA = PrioVerifier_new (sA)); - P_CHECKA (vB = PrioVerifier_new (sB)); - P_CHECKC (PrioVerifier_set_data (vA, for_a, aLen)); - P_CHECKC (PrioVerifier_set_data (vB, for_b, bLen)); - - PrioPacketClient pA = vA->clientp; - PrioPacketClient pB = vB->clientp; - MP_CHECKC (mp_addmod (&pA->f0_share, &pB->f0_share, &cfg->modulus, &fR)); - MP_CHECKC (mp_addmod (&pA->g0_share, &pB->g0_share, &cfg->modulus, &gR)); - MP_CHECKC (mp_addmod (&pA->h0_share, &pB->h0_share, &cfg->modulus, &hR)); - - MP_CHECKC (mp_mulmod (&fR, &gR, &cfg->modulus, &fR)); - mu_check (mp_cmp (&fR, &hR) == 0); - - - MP_CHECKC (mp_addmod (&vA->share_fR, &vB->share_fR, &cfg->modulus, &fR)); - MP_CHECKC (mp_addmod (&vA->share_gR, &vB->share_gR, &cfg->modulus, &gR)); - MP_CHECKC (mp_addmod (&vA->share_hR, &vB->share_hR, &cfg->modulus, &hR)); - - MP_CHECKC (mp_mulmod (&fR, &gR, &cfg->modulus, &fR)); - - //puts ("fR"); - //mp_print (&fR, stdout); - //puts ("hR"); - //mp_print (&hR, stdout); - mu_check (mp_cmp (&fR, &hR) == 0); - } - -cleanup: - mu_check (rv == SECSuccess); - - if (for_a) free (for_a); - if (for_b) free (for_b); - - mp_clear (&fR); - mp_clear (&gR); - mp_clear (&hR); - - PrioVerifier_clear (vA); - PrioVerifier_clear (vB); - - PrioServer_clear (sA); - PrioServer_clear (sB); - PrioConfig_clear (cfg); - - PublicKey_clear (pkA); - PublicKey_clear (pkB); - PrivateKey_clear (skA); - PrivateKey_clear (skB); - -} - -void -verify_full (int tweak) -{ - SECStatus rv = SECSuccess; - PublicKey pkA = NULL; - PublicKey pkB = NULL; - PrivateKey skA = NULL; - PrivateKey skB = NULL; - PrioConfig cfg = NULL; - PrioServer sA = NULL; - PrioServer sB = NULL; - PrioVerifier vA = NULL; - PrioVerifier vB = NULL; - PrioPacketVerify1 p1A = NULL; - PrioPacketVerify1 p1B = NULL; - PrioPacketVerify2 p2A = NULL; - PrioPacketVerify2 p2B = NULL; - unsigned char *for_a = NULL; - unsigned char *for_b = NULL; - - mp_int fR, gR, hR; - MP_DIGITS (&fR) = NULL; - MP_DIGITS (&gR) = NULL; - MP_DIGITS (&hR) = NULL; - - PrioPRGSeed seed; - P_CHECKC (PrioPRGSeed_randomize (&seed)); - - P_CHECKC (Keypair_new (&skA, &pkA)); - P_CHECKC (Keypair_new (&skB, &pkB)); - P_CHECKA (cfg = PrioConfig_new (47, pkA, pkB, (unsigned char *)"test4", 5)); - - const int ndata = PrioConfig_numDataFields (cfg); - { - bool data_items[ndata]; - for (int i=0; i < ndata; i++) { - // Arbitrary data - data_items[i] = (i % 3 == 1) || (i % 5 == 3); - } - - P_CHECKA (sA = PrioServer_new (cfg, 0, skA, seed)); - P_CHECKA (sB = PrioServer_new (cfg, 1, skB, seed)); - - unsigned int aLen, bLen; - P_CHECKC (PrioClient_encode (cfg, data_items, &for_a, &aLen, &for_b, &bLen)); - - if (tweak == 5) { - for_a[3] = 3; - for_a[4] = 4; - } - - P_CHECKA (vA = PrioVerifier_new (sA)); - P_CHECKA (vB = PrioVerifier_new (sB)); - P_CHECKC (PrioVerifier_set_data (vA, for_a, aLen)); - P_CHECKC (PrioVerifier_set_data (vB, for_b, bLen)); - - if (tweak == 3) { - mp_add_d (&vA->share_fR, 1, &vA->share_fR); - } - - if (tweak == 4) { - mp_add_d (&vB->share_gR, 1, &vB->share_gR); - } - - P_CHECKA (p1A = PrioPacketVerify1_new ()); - P_CHECKA (p1B = PrioPacketVerify1_new ()); - - P_CHECKC (PrioPacketVerify1_set_data (p1A, vA)); - P_CHECKC (PrioPacketVerify1_set_data (p1B, vB)); - - if (tweak == 1) { - mp_add_d (&p1B->share_d, 1, &p1B->share_d); - } - - P_CHECKA (p2A = PrioPacketVerify2_new ()); - P_CHECKA (p2B = PrioPacketVerify2_new ()); - P_CHECKC (PrioPacketVerify2_set_data (p2A, vA, p1A, p1B)); - P_CHECKC (PrioPacketVerify2_set_data (p2B, vB, p1A, p1B)); - - if (tweak == 2) { - mp_add_d (&p2A->share_out, 1, &p2B->share_out); - } - - int shouldBe = tweak ? SECFailure : SECSuccess; - mu_check (PrioVerifier_isValid (vA, p2A, p2B) == shouldBe); - mu_check (PrioVerifier_isValid (vB, p2A, p2B) == shouldBe); - } - -cleanup: - if (!tweak) { - mu_check (rv == SECSuccess); - } - - if (for_a) free (for_a); - if (for_b) free (for_b); - - PrioPacketVerify2_clear (p2A); - PrioPacketVerify2_clear (p2B); - - PrioPacketVerify1_clear (p1A); - PrioPacketVerify1_clear (p1B); - - PrioVerifier_clear (vA); - PrioVerifier_clear (vB); - - PrioServer_clear (sA); - PrioServer_clear (sB); - PrioConfig_clear (cfg); - - PublicKey_clear (pkA); - PublicKey_clear (pkB); - PrivateKey_clear (skA); - PrivateKey_clear (skB); -} - -void -mu_test__verify_full_good (void) -{ - verify_full (0); -} - -void -mu_test__verify_full_bad1 (void) -{ - verify_full (1); -} - -void -mu_test__verify_full_bad2 (void) -{ - verify_full (2); -} - -void -mu_test__verify_full_bad3 (void) -{ - verify_full (3); -} - -void -mu_test__verify_full_bad4 (void) -{ - verify_full (4); -} - -void -mu_test__verify_full_bad5 (void) -{ - verify_full (5); -} diff --git a/third_party/prio/ptest/share_test.c b/third_party/prio/ptest/share_test.c deleted file mode 100644 index 69e2a2ef6fad..000000000000 --- a/third_party/prio/ptest/share_test.c +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (c) 2018, Henry Corrigan-Gibbs - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -#include -#include - -#include "prio/client.h" -#include "prio/config.h" -#include "prio/mparray.h" -#include "prio/share.h" -#include "prio/util.h" -#include "mutest.h" - -void -mu_test_share (void) -{ - SECStatus rv = SECSuccess; - PrioConfig cfg = NULL; - mp_int a, b, c; - BeaverTriple t1 = NULL, t2 = NULL; - - MP_DIGITS (&a) = NULL; - MP_DIGITS (&b) = NULL; - MP_DIGITS (&c) = NULL; - - P_CHECKA (cfg = PrioConfig_newTest (93)); - P_CHECKA (t1 = BeaverTriple_new ()); - P_CHECKA (t2 = BeaverTriple_new ()); - - mu_check (BeaverTriple_set_rand (cfg, t1, t2) == SECSuccess); - - MP_CHECKC (mp_init (&a)); - MP_CHECKC (mp_init (&b)); - MP_CHECKC (mp_init (&c)); - - mu_check (mp_addmod (&t1->a, &t2->a, &cfg->modulus, &a) == MP_OKAY); - mu_check (mp_addmod (&t1->b, &t2->b, &cfg->modulus, &b) == MP_OKAY); - mu_check (mp_addmod (&t1->c, &t2->c, &cfg->modulus, &c) == MP_OKAY); - mu_check (mp_mulmod (&a, &b, &cfg->modulus, &a) == MP_OKAY); - mu_check (mp_cmp (&a, &c) == 0); - -cleanup: - mu_check (rv == SECSuccess); - mp_clear (&a); - mp_clear (&b); - mp_clear (&c); - - PrioConfig_clear (cfg); - BeaverTriple_clear (t1); - BeaverTriple_clear (t2); -} - -void -mu_test_arr (void) -{ - SECStatus rv = SECSuccess; - MPArray arr = NULL; - MPArray arr2 = NULL; - P_CHECKA (arr = MPArray_new (10)); - P_CHECKA (arr2 = MPArray_new (7)); - - for (int i=0; i<10; i++) { - mp_set (&arr->data[i], i); - } - - P_CHECKC (MPArray_resize (arr, 15)); - for (int i=10; i<15; i++) { - mu_check (mp_cmp_d (&arr->data[i], 0) == 0); - mp_set (&arr->data[i], i); - } - - P_CHECKC (MPArray_resize (arr, 7)); - for (int i=10; i<7; i++) { - mu_check (mp_cmp_d (&arr->data[i], i) == 0); - } - - P_CHECKC (MPArray_copy (arr2, arr)); - for (int i=10; i<7; i++) { - mu_check (mp_cmp (&arr->data[i], &arr2->data[i]) == 0); - } - -cleanup: - mu_check (rv == SECSuccess); - MPArray_clear (arr); - MPArray_clear (arr2); -} diff --git a/third_party/prio/update.sh b/third_party/prio/update.sh index 2c51c18a12cf..adda3ae07b33 100644 --- a/third_party/prio/update.sh +++ b/third_party/prio/update.sh @@ -1,20 +1,18 @@ #!/bin/sh -# Script to update the mozilla in-tree copy of the Prio library. -# Run this within the /third_party/prio directory of the source tree. +# Script to update the mozilla in-tree copy of the libprio library. +# Run this within the /third_party/libprio directory of the source tree. MY_TEMP_DIR=`mktemp -d -t libprio_update.XXXXXX` || exit 1 -VERSION=1.0 +COMMIT="488da2d729d73f18ed45add59edd18b257e1ceaa" -git clone https://github.com/mozilla/libprio ${MY_TEMP_DIR}/libprio -git -C ${MY_TEMP_DIR}/libprio checkout ${VERSION} +git clone -n https://github.com/mozilla/libprio ${MY_TEMP_DIR}/libprio +git -C ${MY_TEMP_DIR}/libprio checkout ${COMMIT} -COMMIT=$(git -C ${MY_TEMP_DIR}/libprio rev-parse HEAD) -perl -p -i -e "s/(\d+\.)(\d+\.)(\d+)/${VERSION}/" README-mozilla; -perl -p -i -e "s/\[commit [0-9a-f]{40}\]/[commit ${COMMIT}]/" README-mozilla; - -FILES="LICENSE README.md SConstruct browser-test include pclient prio ptest" +FILES="include prio" +VERSION=$(git -C ${MY_TEMP_DIR}/libprio describe --tags) +perl -p -i -e "s/Current version: \S+ \[commit [0-9a-f]{40}\]/Current version: ${VERSION} [commit ${COMMIT}]/" README-mozilla for f in $FILES; do rm -rf $f @@ -24,9 +22,9 @@ done rm -rf ${MY_TEMP_DIR} hg revert -r . moz.build -hg addremove +hg addremove . echo "###" -echo "### Updated Prio to $COMMIT." +echo "### Updated libprio to $COMMIT." echo "### Remember to verify and commit the changes to source control!" echo "###"