From 7d7b1345deabc8d02a91a4c1efa6cfad10d53d8b Mon Sep 17 00:00:00 2001 From: Lyberta Date: Wed, 29 Mar 2017 12:59:25 +0300 Subject: [PATCH] Fixed build of Debian-based systems by not using precompiled binaries. --- .../linux32/d0_blind_id/bin/blind_id | Bin 318011 -> 0 bytes .../d0_blind_id/include/d0_blind_id/d0.h | 66 - .../include/d0_blind_id/d0_blind_id.h | 91 - .../include/d0_blind_id/d0_rijndael.h | 21 - .../linux32/d0_blind_id/lib/libd0_blind_id.a | Bin 139586 -> 0 bytes .../linux32/d0_blind_id/lib/libd0_blind_id.la | 41 - .../linux32/d0_blind_id/lib/libd0_blind_id.so | 1 - .../d0_blind_id/lib/libd0_blind_id.so.0 | 1 - .../d0_blind_id/lib/libd0_blind_id.so.0.0.0 | Bin 105080 -> 0 bytes .../linux32/d0_blind_id/lib/libd0_rijndael.a | Bin 31622 -> 0 bytes .../linux32/d0_blind_id/lib/libd0_rijndael.la | 41 - .../linux32/d0_blind_id/lib/libd0_rijndael.so | 1 - .../d0_blind_id/lib/libd0_rijndael.so.0 | 1 - .../d0_blind_id/lib/libd0_rijndael.so.0.0.0 | Bin 31114 -> 0 bytes .../d0_blind_id/lib/pkgconfig/d0_blind_id.pc | 11 - .../d0_blind_id/lib/pkgconfig/d0_rijndael.pc | 11 - misc/builddeps/linux32/gmp/include/gmp.h | 2280 ------ misc/builddeps/linux32/gmp/lib/libgmp.a | Bin 806574 -> 0 bytes misc/builddeps/linux32/gmp/lib/libgmp.la | 41 - .../builddeps/linux32/gmp/share/info/gmp.info | 178 - .../linux32/gmp/share/info/gmp.info-1 | 7084 ----------------- .../linux32/gmp/share/info/gmp.info-2 | 3489 -------- .../linux64/d0_blind_id/bin/blind_id | Bin 376573 -> 0 bytes .../d0_blind_id/include/d0_blind_id/d0.h | 66 - .../include/d0_blind_id/d0_blind_id.h | 91 - .../include/d0_blind_id/d0_rijndael.h | 21 - .../linux64/d0_blind_id/lib/libd0_blind_id.a | Bin 212534 -> 0 bytes .../linux64/d0_blind_id/lib/libd0_blind_id.la | 41 - .../linux64/d0_blind_id/lib/libd0_blind_id.so | 1 - .../d0_blind_id/lib/libd0_blind_id.so.0 | 1 - .../d0_blind_id/lib/libd0_blind_id.so.0.0.0 | Bin 133584 -> 0 bytes .../linux64/d0_blind_id/lib/libd0_rijndael.a | Bin 54510 -> 0 bytes .../linux64/d0_blind_id/lib/libd0_rijndael.la | 41 - .../linux64/d0_blind_id/lib/libd0_rijndael.so | 1 - .../d0_blind_id/lib/libd0_rijndael.so.0 | 1 - .../d0_blind_id/lib/libd0_rijndael.so.0.0.0 | Bin 45786 -> 0 bytes .../d0_blind_id/lib/pkgconfig/d0_blind_id.pc | 11 - .../d0_blind_id/lib/pkgconfig/d0_rijndael.pc | 11 - misc/builddeps/linux64/gmp/include/gmp.h | 2280 ------ misc/builddeps/linux64/gmp/lib/libgmp.a | Bin 1175464 -> 0 bytes misc/builddeps/linux64/gmp/lib/libgmp.la | 41 - .../builddeps/linux64/gmp/share/info/gmp.info | 178 - .../linux64/gmp/share/info/gmp.info-1 | 7084 ----------------- .../linux64/gmp/share/info/gmp.info-2 | 3489 -------- misc/tools/all/xonotic.subr | 22 +- 45 files changed, 8 insertions(+), 26730 deletions(-) delete mode 100755 misc/builddeps/linux32/d0_blind_id/bin/blind_id delete mode 100644 misc/builddeps/linux32/d0_blind_id/include/d0_blind_id/d0.h delete mode 100644 misc/builddeps/linux32/d0_blind_id/include/d0_blind_id/d0_blind_id.h delete mode 100644 misc/builddeps/linux32/d0_blind_id/include/d0_blind_id/d0_rijndael.h delete mode 100644 misc/builddeps/linux32/d0_blind_id/lib/libd0_blind_id.a delete mode 100755 misc/builddeps/linux32/d0_blind_id/lib/libd0_blind_id.la delete mode 120000 misc/builddeps/linux32/d0_blind_id/lib/libd0_blind_id.so delete mode 120000 misc/builddeps/linux32/d0_blind_id/lib/libd0_blind_id.so.0 delete mode 100755 misc/builddeps/linux32/d0_blind_id/lib/libd0_blind_id.so.0.0.0 delete mode 100644 misc/builddeps/linux32/d0_blind_id/lib/libd0_rijndael.a delete mode 100755 misc/builddeps/linux32/d0_blind_id/lib/libd0_rijndael.la delete mode 120000 misc/builddeps/linux32/d0_blind_id/lib/libd0_rijndael.so delete mode 120000 misc/builddeps/linux32/d0_blind_id/lib/libd0_rijndael.so.0 delete mode 100755 misc/builddeps/linux32/d0_blind_id/lib/libd0_rijndael.so.0.0.0 delete mode 100644 misc/builddeps/linux32/d0_blind_id/lib/pkgconfig/d0_blind_id.pc delete mode 100644 misc/builddeps/linux32/d0_blind_id/lib/pkgconfig/d0_rijndael.pc delete mode 100644 misc/builddeps/linux32/gmp/include/gmp.h delete mode 100644 misc/builddeps/linux32/gmp/lib/libgmp.a delete mode 100755 misc/builddeps/linux32/gmp/lib/libgmp.la delete mode 100644 misc/builddeps/linux32/gmp/share/info/gmp.info delete mode 100644 misc/builddeps/linux32/gmp/share/info/gmp.info-1 delete mode 100644 misc/builddeps/linux32/gmp/share/info/gmp.info-2 delete mode 100755 misc/builddeps/linux64/d0_blind_id/bin/blind_id delete mode 100644 misc/builddeps/linux64/d0_blind_id/include/d0_blind_id/d0.h delete mode 100644 misc/builddeps/linux64/d0_blind_id/include/d0_blind_id/d0_blind_id.h delete mode 100644 misc/builddeps/linux64/d0_blind_id/include/d0_blind_id/d0_rijndael.h delete mode 100644 misc/builddeps/linux64/d0_blind_id/lib/libd0_blind_id.a delete mode 100755 misc/builddeps/linux64/d0_blind_id/lib/libd0_blind_id.la delete mode 120000 misc/builddeps/linux64/d0_blind_id/lib/libd0_blind_id.so delete mode 120000 misc/builddeps/linux64/d0_blind_id/lib/libd0_blind_id.so.0 delete mode 100755 misc/builddeps/linux64/d0_blind_id/lib/libd0_blind_id.so.0.0.0 delete mode 100644 misc/builddeps/linux64/d0_blind_id/lib/libd0_rijndael.a delete mode 100755 misc/builddeps/linux64/d0_blind_id/lib/libd0_rijndael.la delete mode 120000 misc/builddeps/linux64/d0_blind_id/lib/libd0_rijndael.so delete mode 120000 misc/builddeps/linux64/d0_blind_id/lib/libd0_rijndael.so.0 delete mode 100755 misc/builddeps/linux64/d0_blind_id/lib/libd0_rijndael.so.0.0.0 delete mode 100644 misc/builddeps/linux64/d0_blind_id/lib/pkgconfig/d0_blind_id.pc delete mode 100644 misc/builddeps/linux64/d0_blind_id/lib/pkgconfig/d0_rijndael.pc delete mode 100644 misc/builddeps/linux64/gmp/include/gmp.h delete mode 100644 misc/builddeps/linux64/gmp/lib/libgmp.a delete mode 100755 misc/builddeps/linux64/gmp/lib/libgmp.la delete mode 100644 misc/builddeps/linux64/gmp/share/info/gmp.info delete mode 100644 misc/builddeps/linux64/gmp/share/info/gmp.info-1 delete mode 100644 misc/builddeps/linux64/gmp/share/info/gmp.info-2 diff --git a/misc/builddeps/linux32/d0_blind_id/bin/blind_id b/misc/builddeps/linux32/d0_blind_id/bin/blind_id deleted file mode 100755 index 35bb6834de8df59b4dbeb3380f08a1db93fb8ccf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 318011 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

Q{e8W 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

+_YhR0*`<9KRjIH|ZwVt4S!JM9IX!nI_x) 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 EH&e8U_y7O^ diff --git a/misc/builddeps/linux32/d0_blind_id/include/d0_blind_id/d0.h b/misc/builddeps/linux32/d0_blind_id/include/d0_blind_id/d0.h deleted file mode 100644 index 4c8708e3..00000000 --- a/misc/builddeps/linux32/d0_blind_id/include/d0_blind_id/d0.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * FILE: d0.h - * AUTHOR: Rudolf Polzer - divVerent@xonotic.org - * - * Copyright (c) 2010, Rudolf Polzer - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the copyright holder nor the names of contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $Format:commit %H$ - * $Id: 6c55afeb50f24bd316079ae46582e65f8020b19b $ - */ - -#ifndef __D0_H__ -#define __D0_H__ - -#include // size_t - -#define D0_EXPORT __attribute__((__visibility__("default"))) -#define D0_USED __attribute__((used)) -#define D0_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) -#define D0_BOOL int - -typedef void *(d0_malloc_t)(size_t len); -typedef void (d0_free_t)(void *p); -typedef void *(d0_createmutex_t)(void); -typedef void (d0_destroymutex_t)(void *); -typedef int (d0_lockmutex_t)(void *); // zero on success -typedef int (d0_unlockmutex_t)(void *); // zero on success - -extern d0_malloc_t *d0_malloc; -extern d0_free_t *d0_free; -extern d0_createmutex_t *d0_createmutex; -extern d0_destroymutex_t *d0_destroymutex; -extern d0_lockmutex_t *d0_lockmutex; -extern d0_unlockmutex_t *d0_unlockmutex; - -void d0_setmallocfuncs(d0_malloc_t *m, d0_free_t *f); -void d0_setmutexfuncs(d0_createmutex_t *c, d0_destroymutex_t *d, d0_lockmutex_t *l, d0_unlockmutex_t *u); -void d0_initfuncs(void); // initializes them, this needs to be only called internally once - -extern const char *d0_bsd_license_notice; - -#endif diff --git a/misc/builddeps/linux32/d0_blind_id/include/d0_blind_id/d0_blind_id.h b/misc/builddeps/linux32/d0_blind_id/include/d0_blind_id/d0_blind_id.h deleted file mode 100644 index f546b679..00000000 --- a/misc/builddeps/linux32/d0_blind_id/include/d0_blind_id/d0_blind_id.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - * FILE: d0_blind_id.h - * AUTHOR: Rudolf Polzer - divVerent@xonotic.org - * - * Copyright (c) 2010, Rudolf Polzer - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the copyright holder nor the names of contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $Format:commit %H$ - * $Id: bf838f43093aceadcd2d20071684f1e7148a4332 $ - */ - -#ifndef __D0_BLIND_ID_H__ -#define __D0_BLIND_ID_H__ - -#include "d0.h" - -typedef struct d0_blind_id_s d0_blind_id_t; -typedef D0_BOOL (*d0_fastreject_function) (const d0_blind_id_t *ctx, void *pass); - -D0_EXPORT D0_WARN_UNUSED_RESULT d0_blind_id_t *d0_blind_id_new(void); -D0_EXPORT void d0_blind_id_free(d0_blind_id_t *a); -D0_EXPORT void d0_blind_id_clear(d0_blind_id_t *ctx); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_copy(d0_blind_id_t *ctx, const d0_blind_id_t *src); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_generate_private_key(d0_blind_id_t *ctx, int k); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_generate_private_key_fastreject(d0_blind_id_t *ctx, int k, d0_fastreject_function reject, void *pass); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_read_private_key(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_read_public_key(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_write_private_key(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_write_public_key(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_fingerprint64_public_key(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_generate_private_id_modulus(d0_blind_id_t *ctx); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_read_private_id_modulus(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_write_private_id_modulus(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_generate_private_id_start(d0_blind_id_t *ctx); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_generate_private_id_request(d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_answer_private_id_request(const d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen, char *outbuf, size_t *outbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_finish_private_id_request(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_read_private_id_request_camouflage(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_write_private_id_request_camouflage(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_read_private_id(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_read_public_id(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_write_private_id(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_write_public_id(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_authenticate_with_private_id_start(d0_blind_id_t *ctx, D0_BOOL is_first, D0_BOOL send_modulus, const char *message, size_t msglen, char *outbuf, size_t *outbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_authenticate_with_private_id_challenge(d0_blind_id_t *ctx, D0_BOOL is_first, D0_BOOL recv_modulus, const char *inbuf, size_t inbuflen, char *outbuf, size_t *outbuflen, D0_BOOL *status); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_authenticate_with_private_id_response(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen, char *outbuf, size_t *outbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_authenticate_with_private_id_verify(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen, char *msg, size_t *msglen, D0_BOOL *status); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_authenticate_with_private_id_generate_missing_signature(d0_blind_id_t *ctx); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_sign_with_private_id_sign(d0_blind_id_t *ctx, D0_BOOL is_first, D0_BOOL send_modulus, const char *message, size_t msglen, char *outbuf, size_t *outbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_sign_with_private_id_sign_detached(d0_blind_id_t *ctx, D0_BOOL is_first, D0_BOOL send_modulus, const char *message, size_t msglen, char *outbuf, size_t *outbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_sign_with_private_id_verify(d0_blind_id_t *ctx, D0_BOOL is_first, D0_BOOL recv_modulus, const char *inbuf, size_t inbuflen, char *msg, size_t *msglen, D0_BOOL *status); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_sign_with_private_id_verify_detached(d0_blind_id_t *ctx, D0_BOOL is_first, D0_BOOL recv_modulus, const char *inbuf, size_t inbuflen, const char *msg, size_t msglen, D0_BOOL *status); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_fingerprint64_public_id(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_verify_public_id(const d0_blind_id_t *ctx, D0_BOOL *status); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_verify_private_id(const d0_blind_id_t *ctx); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_sessionkey_public_id(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen); // can only be done after successful key exchange, this performs a modpow; key length is limited by SHA_DIGESTSIZE for now; also ONLY valid after successful d0_blind_id_authenticate_with_private_id_verify/d0_blind_id_fingerprint64_public_id - -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_INITIALIZE(void); -D0_EXPORT void d0_blind_id_SHUTDOWN(void); - -D0_EXPORT void d0_blind_id_util_sha256(char *out, const char *in, size_t n); - -// for exporting -D0_EXPORT void d0_blind_id_setmallocfuncs(d0_malloc_t *m, d0_free_t *f); -D0_EXPORT void d0_blind_id_setmutexfuncs(d0_createmutex_t *c, d0_destroymutex_t *d, d0_lockmutex_t *l, d0_unlockmutex_t *u); - -#endif diff --git a/misc/builddeps/linux32/d0_blind_id/include/d0_blind_id/d0_rijndael.h b/misc/builddeps/linux32/d0_blind_id/include/d0_blind_id/d0_rijndael.h deleted file mode 100644 index e1c8f71b..00000000 --- a/misc/builddeps/linux32/d0_blind_id/include/d0_blind_id/d0_rijndael.h +++ /dev/null @@ -1,21 +0,0 @@ -// from http://www.efgh.com/software/rijndael.htm (public domain) - -#ifndef H__RIJNDAEL -#define H__RIJNDAEL - -#include "d0.h" - -D0_EXPORT int d0_rijndael_setup_encrypt(unsigned long *rk, const unsigned char *key, - int keybits); -D0_EXPORT int d0_rijndael_setup_decrypt(unsigned long *rk, const unsigned char *key, - int keybits); -D0_EXPORT void d0_rijndael_encrypt(const unsigned long *rk, int nrounds, - const unsigned char plaintext[16], unsigned char ciphertext[16]); -D0_EXPORT void d0_rijndael_decrypt(const unsigned long *rk, int nrounds, - const unsigned char ciphertext[16], unsigned char plaintext[16]); - -#define D0_RIJNDAEL_KEYLENGTH(keybits) ((keybits)/8) -#define D0_RIJNDAEL_RKLENGTH(keybits) ((keybits)/8+28) -#define D0_RIJNDAEL_NROUNDS(keybits) ((keybits)/32+6) - -#endif diff --git a/misc/builddeps/linux32/d0_blind_id/lib/libd0_blind_id.a b/misc/builddeps/linux32/d0_blind_id/lib/libd0_blind_id.a deleted file mode 100644 index 8945205862514864bf7e286ae9eea4cdb797f5ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 139586 zcmdSC34B%6)joXgJvVTKKoSx(BEm%w10p0$B7=wwGO1C7;D8|{HxPvclY5yI1(K-o z7E2szTU!OGTCG~G);d<4K(x-aV6|_tRbMD{5UADK%J)2L?|tq*H#e#8`~QEx@An

4B#tb^)=P2%a_;Jtf+{` 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 z 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 Xq?cjmDBi6illz1l47-GT7o7bC?MLjd diff --git a/misc/builddeps/linux32/d0_blind_id/lib/libd0_rijndael.a b/misc/builddeps/linux32/d0_blind_id/lib/libd0_rijndael.a deleted file mode 100644 index 58897695527c4bbcd305fd40accf54c0c3022e2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31622 zcmchg2Ygh;*Y`KO2`msuAe4Xzq4%;Z(vr}7htQD{AoQMuBHaLHU8;(xbVWr)1eDN) z(3=$Li1ZR5^xog^x%X^X!2kbw-sgS(@A;Vg?%X?bX70><=iWK&#ynw>gS+;uoVHZR z>*jDeo#h;5o#o4ggp@WedH)UxaX89ofzD|y7K^XN;*-hyr(5YxgM0Pv-z_q#Z>Q*} znAm}xqWX6oJbYk`2hW9>~xf=P{GLEIqjHQ4Qu=O_|PGy`B-e0 zS1F67YNUC-tRaOh!ImtV)0CF3i>)Huwfx;J?d}eN0STo866)F#F9kbp2P6#iNxT$j z99R=C*&VlCX}RdjdB4Q7!JbR0jSQ*G4E4EM*G`T!UOCbkInrtluGaM@M|!Uu0Y;7t zMvie$$I>!aegA;*rL7hVxoOqFj9$5ejNF;jA6M&UCPx;p9NCNDI9!N_A~b=JRCz{2Tq zm&j^y+;$|o>IXXO-*eT^?5zLDRX^BS|C!X5a64{Oh}(CLr7#}MqH&vjoYl`zkm8P8 zuDyvjQW{_;sq+u5(`=9ylyb}nENv`U4XZ7T`r>R}l{R1ZC zfBEv|stmNbea8-)Cl9fd{_9$%$uR{j?)uN1)gRH+>VdS=Xj||scp$d+in?c zyBGJ=ZnSNfw9Vhsw%-bJB<)Kj?UV7KzXJcEO}GA++H}uo(<7rz&*Gk@rA@K%t7L65 z`pRq%e6?;B5tm%pT`SPt!S1S=-wtiAocTHOO?t*1xN0ROp0Q5Y=&F@GI@UcZX>v@Q z@8pJY_Q@^c{2d!zu_qHR`%VrEb&a}U^!um_?y_<2Dz30N_oxeT{VoK$%DYFMbW@0v zBl$h*WL&?Ka<(ET?VPf^931(_T?uqoBIzHu(brYR9h)3?HL%FGinm5CjvJNa6EI~e zb9oIvmT6K?+~&ZzO+Id?>z3ViZ!+QT zkGm`dJS2GXN+uR$3gloZDSBeE)Oa{arQe|0(aT8vdazlL97;c=7V3 zyH--%mcs2jcIvQs+T_>gQ=q%0%qMrO-93sW)f$jc-tXz%bC;T%h{%|>z3EeCULVfqoP>$xMyJ zD}kmnH?zgK^}UYRWOpo+-k3ecq&byCR4Gd;L%CWd4*#%{BF zOj9=#f=+VRVw62y?$?BPI5oifbM!NX`IOSV#N4k?4rqM)N1knq^;Z?34UVXnknqapH6df0WGq2S*138If$V_7mMzr2;|q;P*Bo>=Bn=DJR2UG1qM ziRIq2(9fMMcXveQM#|y?FVq~6@IaUSxKaLT1E%EQ&6cSYkZ||as^AXupvCwl%*U1E zj1iMN}Drkhu*p%gXTJWO%(_F|YaSIkubHbS_u zHiBA5_;N9M-(DMV%$#Cj2uRrc#@aA$skHo!<-wc|ta3c6<*k9o z3Uk11z68mGp%Go$i1(y7C&jB((fQGDI5wXY`b6C)Q%C0ZTdSi&|K^>4yvpm&S?D|+ z{?;^c&Rs{&|9VFF2TZXOy!iJsVk55p7iPp3)6IWmM(n`%e|JXgA@Bd)jMy(N|4+<_ zLpc6_oDs*o?)=}+h?C^}FJ^>0mQB-B&qg@$lCLe+?uuolxgalkW++FZKg42Q5CL$O zmnFcnc$+)zahHwY5PPoY@I&GP#`m#uB*ZE*+c^4Tl>h%t=+{=D|38ntBW-! zzO{|+@T$zy6z@uh`g%VyQtFV96t%wmSGBhG)oT5`t4&3<@=6xpI+)8dOg$*m~Y%S&%0N*{^E^BNR7dIqjnaMoO7gO=!Ad-Gujp3It>pvPuRljlX2&b zj^1s=+~QlOb=`??osRan8zrTzZ}LKeCudv#ap#PFKgg!*7|T$69e>fl_&VuD?eTRo z#CHma+Y)GO(ut3G;yuRx+ZU5XW&nbT$i2838%zDMEkhvtew+I1eNCSUc#HS z>!3UBYt5Ipo@*fgW5L_kO`M z{(>u}Ve^>>Lvu$p1wwXS$&`PT7Qukz;1K93Q2U`_zJBeVA<2X*OAzgm_bQ&}tkZ&_ zkn={JMtFxBja`%plsx8)plOO@s(97PTRIusV|p^C#@Z_Xm}JD+ zwF(Duq1)!pf_s;>Np6v8WZnUnrF+c{y>wAa07#hybm)II5eB|B5wyX^bVz|#XJC@E zPK?}^C%*eHX2L&Afn;a1Ve%;Uya%K_g`Vq>>n>hqthtNlKH0*%JG{PumwW8MG{giHex8^&^7W`ftgnGD9@y^sv%4D!qbrh%O7;29ZL2ZF3A14d%Q zc*EaolfmQfxx>uOj5H?$pL!kKWRX!l$VTv2q5#2A4IRz~T|FH3tsIV}6 zEm+6bSR!=MNLeYI%N9w!{QCrxz_?e>vPxPyngzmq@o~;uOip>8$nBf4KgqB`Ht`ID zyg0}^vbfWUA#cUTqsy^NPEn4no%hE6jaeakduj69(<0fkrT;g}hwM3w=(4njyY|cn z8BgbQV>@sDOFP|dLiG0h@LEuGR>;CmAIy_YzO0}|A9>9Ow)Lqz+xmYwA2w2$fAD|x z{_sDV4_gc`|LOU#gIfN3^I;D;|6xAJ7XJUkd@wik|Ks^!Z07$T=7VhU-7pa9|yRQGV^8k{93KXrv9I5ZQ`rd>ZabTHWk&%3KZYO*wh=< zno$i7nMPiB3zI1el#_kE>;_ZTp|{#$gfzU`VeaeAO6{)OLNHh92U&ACif^LZdO1s| zLvotidULyOZta_-b={6{l1_GZyptOt0rER`J3IP2{(Jj*hTSKlPk{_U>1-L^$&k?} zlTTnOi^ZDXk}h3kPFXBAJ!Eb4H4iNozpNIUy;8c+boGKPmQ*Eus`%S7kn}6$UoS{p zR88f>h17m#F28y~R(#q?8oA75nzFB5O-oX*S}f@Ts9t>g7qp0^e|6Eyhfgwi6(t$q z-GEos2YS^iQaLGSwfco1HebJ9{bMXvyPte^&1z3Ah*^F8ijwm6 zO-<$ij{IVsWh_3aD{;*)wt~gSF7>4Hp?MacomQVFs90N@sdtdngZs!eIV>*8K2gIZ z{fOfR{Mdit7ilTFke@WYEIzx9)N@j4XUf$*)>y=n&Q~Oz?+bqWkL6b?pW6KP$!jwz z?o6eN{4AD&wA00pQE^_IRNP#WM#Xt;Qt>F#X2p4JQt=$p=|_pL{6^Xu+f&+MCf0K? zLvK&Y8rwI$(WnA8X^l@SOMs7bf=?rx&r)h{l*MBCixTY^8>0n{Y{nr;yHP_UqlQ9~ z?rfHm7S$mQ3;1bli{jWi-9JrqX^T%&qm~|=NfYhxB&Qik2Ex3$#7H_lNgMr;CMKn9 zS0kBHc8HNoDZ9c*rj$*~q@ssAv-$coA=pC_Vx9?!&JtoUgN59hh{Q2J((t&R+`B&Mv_*V$w88o zJ2aCAj3jqxCZ8C|l(H3pIZaGT**KDxjB;-cX@90Z9K5sywTQx7+76uYv&p}``OD35 z7N?D)&9lL;&f@zMmw7hltFu&bWS)68M9*eu5mnaWlfx&$Je@z~bT_K&=<|npnkE?a zWoXfj`o8wLV4kK&Jg2GflFw7~G=1thO^rpZnaD?@dHMF7rpo@-BIar4lyTa)f z?l_GleQ#>@S#E7=W-Cm#k{nuc@yjZaR*R3%(+uhPZG4oK3GL(ksoj!Y$$|MX@T?s> z{e0SdX1{378^nM1qfz0upzfZdEauU;a9hST)~4Bd^sx2oZcAeivkeWi)(!5_BRn+R z7O>dXFvgbg!_e>&;kKBtH!l}lY+E^Iu`R=gwxK28yjG!P``>1iuV!y&8#dRL)_&(u z!%{aJm0DY?T4c2%o9vYx;FwHV6t0x7G;?uN2-k%HDQPcyy1@dG_%YhuU|B+T*O1f=a}ONBtCjkqd1@=S79v z$G046KN@PEZmkD0H5+Vo<%YA(lyN;~q{bBEiHRT@HbsGy!b&$w9bEYu!E)&Jepg)y`YjfDi>reEWH&z$66xjcC3BLsv*`2LF2;dIjWpK z)!rleXF545e9nSO^D7N$Sc&G?FEaepS~kd9Iy3o0gMLcMkLOVP&-QWQyQr2{mM%U$ ziY^8edynuaTE~AfETJ+im4enzF$RC_9D7_;ti2~?m@VOys7w|7w>ETMXpgAyXy!qo z|7p3m2ZgE|>7ZP*4PWD8JgkL+>Gx;`G1sYoKKRbG{$rc24Q-+7vr%_>_BnD!2La??I~zB{Vtvd$ynBZ*^ZB zvh%k}dq)M=Ki&01M~;h~oy}&}8WYjw%+PMj#xLo!Hs}0tFFq?~f83^L-GSMk*P8lK z-&3Ehd^DnYzJt*}owGI=+->X5;t*dn!4AEm03J6W3I-7+x30=GQ;y$6($7aI=m#jP{k7Ex*ZQl zo9Datdmd=fepaQDx+rjGq(?cZPCc;0!; zH}eYmJY08w@cUasyVoo``f2+iMQXTDZp*j3=drZ$TzV^?IWgai-x1h-O2Bqe{d$;uRlgZ5|rr&=)acJMHzZUy)^}rvV)cq`D z-fmawY?<_IQI0CN<{v9Qs@2VD&b-?j*ZU~(K!xKkzTP#dT)IPF>>GFgyTYeF__pAb zl_wT%__@l3IhBg1|72LxS$jJ5?oxYni%mh3A0(|hHm&2siY4#=viZZ`$99-E^3(mj zekgHxz^|DK>+)Pm%5wAgtjlZmmK#w2P?~vHkBnSeKgN`LFg@GkBaMbMT6(iai$*{0Iqm!Th4U*8 z%zY=mcf(b=izkk07FFB#YR5Sp-kanT9rMwXlGV~ZZTD`EUz`8=*C)CAR7oIezzufeB>}$GqRSZuQoy_Je;@@Q(oh&EWqz`0ob) z+u;8b_TwwoZ$Z%__qQ7?BM?q_^$;2eBgf${9A*6QSeU<{xqF9HAB z;J*U={lI?!_`d}I{NO(m{P%$WQ1D+5{_)^n0sQ|0|2p7*1^jmk|KJ}7{&m5BG59wI z|EJ*J3jA|{e;;9{~P;g8y9bZvy^bgMTmZ&kFu&!T%!o*8u-_ z!9N}N{|x@C!G8z%PXPah;J+69pM(EA@Lvc1Tfx69_zwa9li=SI{JVnxF7OWo|El00 z0{)}G{}K3S1pj{E-vIpYf`2mj?+5?B;QuA~KLP)|;J*d@bAbOb@V^QE+rd8({9k~7 zIq=^H{)NH6Aowo?{|n%s9{gv4e;4rI1pZ0j-x2)pga7Z~KN9?Z0RLaXKNS4G2mk)y zKLY&Ifd4)4_W}P!;2#D4qru+}{+Gc2IQZ`c|3lz^1pI#ie+T%N2LFxVUmpCw1OKJq zp9TEuga1SD&j9|Vz<)CMHv<0_;C~wY&x8Lv;J*s|$AG^t_;&#RXz(uy{_ViOIruxl zKM4FMf&T~KKLz|<;C}=B-vj^a;2#G5ZNa|^_zwsF4d8zj{M&H z__qcBIPlK{{=L9|2l%_de>nJ82LD0e-vs=B2LHw2UkUu{gTDj(o!~zP{D*@767Zi7 z{>8w*C-^@H|Gwb=2>cI%zZLwag8xt8Ul{y1f&U2bw}byj;QuZ7_XhtD!9OSX{|5ed z!2cZh-vj^O!M_XmzX1OT@NWtJXTkp(_$Pz^P4J%w{(<2CG5Dtfe?RbF5B`(EzXSLm z0{<-F{}lYMfPW3}p9}ug!QT!3?ZN*B_@@Q`0PxQx{Dc2Q@V^fJ1HpeV_`d}I3gCYj z{40Y0aq#~R{9Ay3N$~Fh{+Gf3bMT)I{#(I61pFI-e-7|p1O7$9{|xwN1ON2kza9J+ zf&UNSpB?;Dga6;)-x>T1g8zN+4+a0x;9ms%w}JmN@V^cIC&7OL_~!-xjNqRi{KLV& z4EQeq|5D&z8vL7s|9SAw3jV9Xzb^Q91OG|jUj_V&ga0(}Zw&qi!2fITPY3?v!2cBZ zPXYf8;6DfaKLP(e;9nd3gTQ|k_&)^yU%-DX_3Vc;JO z{wu-%EAa0R{+GaiANVJM|19t?2mWcmeTjBJNVZH z|61UG3j9Zae>C_v0RPvI*e<=880{>6Je?Iu<1^;)zKMnZ1!9M}~bAkVD z@Q(%mFTsBd`1^qWVDRq_{!hWb2KeU#|Lfp?0sI}{-xd64g8w$~uMhrf!T&M%7Xkmd z;J+OFCxU+>`2Pz21Hu0@@V^57&%pl{_>TgAC-~O`{|ey03;Yj(|9$ZP0Q^^i|IgrG z3H*nFe<$!C4gQnC{}}jJ1pm$8-vRvhga2XhF980F!9N)MXM=wz_!k8Kw&4F2_%{Ln z8Q}jC{MUhh7Vy6e{sX{&9{4W>|ApXR1^mAS|F6NnG5CK7{?ow!d+_%K|77t01N^6h ze_}2mdKf(VF_-6+H?co0q{GWq=IQZ8D|6jnrC-~eD-0sp?>zp6Qw2J4L-#!6%5uy3&n*aoaB_6;@{8;9M+j$%)- zk=S{xBK9FR3oC{3#oL!3VP&x?SPiTuwgo$dUBPx^EwB;TXIL5RJ8Tn{4-3a`U=6Vu zSURja_5|CEHOA~%No)bu9V?6-$MR##u_0J{>}#wZ)(>-I2e1OzVC)h00PBWL#Cl?1 zU|F$4*h1`mY!B7}i^3AHPq4n&K&&p-6nl(d>(=Q_OPB7uK`OKUeE<=+Ljv zzy7+@)n9(8wPE(`d=D2cjQD);;0x_HZk)Ag<;vKc&!3-N^697Hy$cp>*sff;zSXK! z8Et*|@P3m$d*a?NTej!DZ@+C;_Tt3@_S?4~e>!N;xoB{Sa5%bD$&#h0zpt;o`S$HI zqVnad-Es5gIfa9ROE38R^YQ_HerZ>H^;M}fsZ(btmnl>JS!2h(6MpX8>4Mj;{n4vX zp~inKUp{7DZ0yx{(xk~WH!kkonBv9Tl+2N%Y>9W?DYv|T|C2Y`wfpVq{Q2!4G;hAJ zQE2Fp$RkHq?)~-GQ6q{JXxrF1LaOF| z_U!zQWy^+NZ{I%Q_ujn^)!w~(^6}q)@6n)Q#lffQ*Z=HL!-iiZwP~}o{=R(^`t0Ao zw&=~9TQC0jW0R~;pI+ZuqsGLejT(K`(&_B}*@Ouh_tmQPap2>}S5jH6zT?J>d2y?0 z)A=>S!iKGxH?P3?MT;8TZPx7T7vFr-VPn;*V?Ulc)$iv|KB=;9&YV1TD^wWhd;k9J z)9coCO-x7_8hhfzFJ1HGsa`rTFeJyzmlreKz5Bf1pMP#>_{SgPGW+`nzZVo#uvBvL z=ChqT{r>gLneXkXSu?(3wrnL^Z`tzco$tSI`Qhl%&+3GSf3Ub)w;h)|bXZd?d-gIj zqN6X(@7#Ig7vsidKhUJf+%YFle$zc~-kPI}7H#py#M~H4x2X3>woaz`kRXv*Z8hWmo1B?Pp`Oe#tcXK3l|Q$hY!C~=JMskHFoT9 zw=G}3|H^*-PE49S*{9p#!^{3`+<5kxAAYF!Ti?FNp0sMUIQ6}IcMDv-y6=~$s9jS& z_~71^B}?iA+wFme*Q^;3KWx~o0R;-wA6&BJ`}uR`tZ@6g?^m<7lqYxY%6~U#@cGI0>mw(+-RUQM{BgjvfdkJ}uUvWLmK7@o{n)+xo?~_E zPV=+bQu#c1@Gw(`3^~7vjNH`ez4v-QZrysx{?)5{O`kY1TbsnhFAKf_(y{OUhp3Q{*}Rh5ctmo|NG$IQ}_q};^5yI z{Bwi<4)DJY{=b8NZSX%1{tdwY6!;$k|0M9Q5B`0?zbN=$1plnyzZLwCf`3c!{|x;1 zfqx+Qrvm?R;C~DJYl8n8@IMd!cftP!_-_RNkHPA? z4gNX6KLhyp1OJBLpBen$1OHOse-`||2LCxN>fpZx{C@=hW8m)x{yyNJ3H-kS|4!il82tBx|8($g1OA1; ze>M150RJHH{}ue5;J+692ZFx~{J#hP1n|!b{-1z<2>90n|CiuD4E#R;|Eb{r2>i!_ ze>U(x0sao~-v<7xz<)FNF9rXh;GYrvdFNjA4E&FPe7QYVuA>jWE z{Fi}$d+_fK{=32dckr(W{`JAXA^5ie|9#-UAN+5E|BvAR6#Q#|e{Mu8}P3R{!_vK6Y!q{{uRLgKKQQ#{{-+q0seWwKM?$1 zg8yCc{}cTG0Dph*4+8&W@b3ivGr_+m_-6zEE#Ut>_>TtvaPaR2{vE(SJNQR~e`oL? z2mVdK|0MY51^=SpKMnlj!M`^6-vIwr;GY@%Pl10&@J|Q+e}VrQ@Gk@YmB2qO_}2sf zRN$W<{ND%vP2hhJ{1=0N7x14B{xiV;0{9OH|I6UN1N_T_e?Rb_4E~3~zcKj#0RDZ! zzZLl31OKbw9|is&fd3Nkw}by0@E->L1;D=~_~!)w@4){z@ZSdhN#OrC_{V^MZt!ma z{_DZt4gMd4|3L7s4E`&?zdQKX1%Dg(KLGy>;2#P8?}2}7@Lvu76Tv?b{NDxtx!`{m z{2zh;7vP@}{Ck1_aqyo4{-1&WEbz|-{vUz=74Y8+{w=}3F!-Ma|4HD#0Q_CxpC0@- zfd3`%uMYk_!M_^#e+m92z&`-|mx6x_@Lvo5S;4<6_>Tntq2NCP{O^E&AMhUl{#(Jn zH2C{~e-H342L3O=|0wwX1pY(7e;4?F2>v_4e-!vX0spq(UkChef&b6oe+c})2LE5c ze>V6p1pmR{zY+Xbg8y^y{}lWSf`2*iuLAxL!G90kzaRL21^%hQKNI+m1^;v4e+~Q#f&X&wj|KlU;2#J6#lb%Z z_`d`G{lUK-_|FIb=HMR+{zt(7SMVEJ&D{4aq2aPYqj{yV_GJoxtm|H!;6D-k6T$yo@Sh9*XTkpw_)iC0N%P2x=w_mh~0#1kYoCvg&q>qx9fVnGr^llYs&p(O4h@id9MNlZp!I}$UK zxQN6nB=#urD~WqayiMYV5{r}=io}Ts5e<@fnZ#x!t|oC0iPcEFP-21-8NW5;u~#qr_Du&MEOKiIGZNNaC3i&y$#%#P1{yBylZ? zr%Ieu;y@CMlK7d#`6PZOu{?<}5n^mAaUh8$Nz6)OPZFDz7_G$rBqk}bMTy-?3`t^% z604M0q{MwBjwP{KiQ!6|Ok!aY3zC?iC#EGaKZ(^!Y)Rs^60?-plEh;rMk+B-iE~N( zkMLJ#i3v;GP-2D>1C;oc#5E@iK`CN-S97$P%BF7_`JVC6*{LONkFkd{bhD5@VEDs>F~bhAOdN zi9JfpPvXxK2bMUi#FHgnDKR>Ug-YyKV!{$%mYA%>IVGMh@i~biub0@Y#K|R&Eiqk*6-pdZV!{$r zl$g836D7XQyyert##ayI1HsmCff6$9BY2 zW!zeXWD=7vEkqi<5#uY`)jYO~%9k0udr9(6HLg!LbRpM$ED<9ACabR$(d#KU?&Zqv zbv>p1^C=U=@Y0nSbWf&Z}7Moar4`O?T?GZ){SInR%erIp#w7E3Z2Z}8!Nu0G&OJ3i&_bu|N5 zo*7pouHz=ea1(I_`I9f(P-cHRi{$~W;_wp9yi5Zq{wSlx@;H-m*b9fg+`O05(m2dw zw5?Sd=6ZnPw3Qu)7Y(Now{d#Ta2k<@FE2gdhvKR6{lxGeksaUu#(hK_#D6`*e}w0j zqHtQ+@YK|E>MN3`@XEk_gyTKwjl-{Se2-Rh_7@zdGFsd;5gBT9LrQTQtvzS7xcOC_ zpEg?D{5Vc`8cthn#HlouW*$RM8%~?u!0Bzeg3htfTDRe}nWs%TamYu9rHs+9=DjB) zR}H5T(yup+mNv_PLs?Il*FHGRWVAFQ2&dl|PE+n(zKPPzm}@bjJ{V$T+?j`2o!2<5OwrS?7e7YvSw`_z ze^UHAqj;+Yv?9i6MZ^-;<Z`Y|09O~h@bGCoo*zr z-lQcJzIWr8g&-{s58;jCK{ym|Ubj|@tLu!bO&fD{t8ukyG}T?AE;{LBs(V0P9DYT0 z{f+xbnS)=_a5t^y>I6KEHaskLoLH{)rK;i>sSJasTUHTSew#>8#3 zxT%cEP{V1&2%LUwIE`3`)0u|TX4i4L-*6gn1*c~WrxA~F+RkvA(hVQr-D=d($`?l* zdHwbHH~!AO&F7!4dj5vJd`Zo_tmp6D_rbmQc~5?+lm=_qkmMl5cw9McLwt>_j}qfux}(8#Qor|1NvK1N_FiSIoQ&F z@POF<-J&gh2lVd|l5$BL#zgfSXo>DQU~tUq=lM=vmtHZ^uT|)&s#HwBfu(3km%hFF zck9%vo9Xs#-(HR7Ye~j+6G^6Amq%`0 zM%Ht^VVvJY-;Zo5*X2Psht=<2U6)1ZkAJvsDH%PyUrb~dG-j}=Jv~Q*qxzOK2CHPZ z$e2h=$u7~+mXh6~y2SSA6xpTA;HV*%l9I(d)2n~?0p4l4J&N=Iv#6P;?|`n}Sq8>- z=^xoI3a78!L=KMZ-$PEBC1{GJWY+=x`bE*_CHoJEi7Lr>l!%Ur?Aph>Sogs=^7P|> zM`4vEf`^%Au8Mk-;8~p^-NIum#o~KdEc59{)&`@zaKyvO!eVEnWz57n%Ly;@@K%g- zlK;QTSDHN1K97k%yVnWNVRbTijwNr;g1jVpD)YKlnPcz!C_L0+S;~Bp`;b2H+=r}w z-u`|sYO&<~2Y-#<@ONyud0*mB?$6_|qxz#N!_JiCrK7MWkPtoWj(XQ?Z*8$0^9+vH zwOFrXDSD;@YrGt&d3+2a?R~#zyxJ#EW>5QE9DB-$i;grnL=MzE*Cvqm_Lqb|nIm$) zyvd~a`+{RBBjYDF8h=$hPDsn4{CuP8$+x}}^N({L^W6e zljQqM4%9qDxQ?{5gV&^#`{3;bK1D%sR zH;s*))GPfYb$aGJhn8Cmxb&6BJpMdsk9wc?wcLK`IWPM9{~1Nn-Ze+a$Ty`bbd)I5K`Wl z`n-#Jt{0cafq-*c8PHMi(ih6@}=agHxlw}>L$t*m#^H{P7Q9_o6<^IG72#q;vwea@4w z1x=GbpwM1*nCckSUsdJ*up#*lt0t@7Rc%5)$n{pLgH+>Hr>dS;y{hU*A4<8Ls`*q$ zqgEbDrDXiMUP-l@YF*Wis@+xlsm7>IQk|(fSM^)fwW^y{cc~swy{dX&^_i*-#H3x> zRr9D8RxPDkS2aSloob}&P}MQ26ICaxMuM)?(?|7V)tRb`RTESXt6orjshUc*tN004 z&8u2QwT^0I)i$cVR0pcYtA3(7U-f&{O{#}guc+Qt^<#~Yb_A&AQmv?3L$!%&q-syq zajI_BS*qWvZc#m`dP()Vsvirq)SpQ;r)nwHimJ6$o2$OBI#P9#>TK0-R5z&}RK2L0 ztm@0sCG}@e&86y84OgwB+Cnu_b+GDa)z4KIs;*Yuta@1Wq-v7t3st+s7NkE^OQ@Dt zt)|*QwTJ33Rk!LVs!LSYsP0ict9o74#k_&8mN?CaK<0eWsdC0xYyEziKhn_f%V`MyU={9iuu|^+(kN)vcMRkDc z5YQ&Wesy6DD`U6x8tCmp>Q*EspsX9P)g6cxm1l2pLPgHYA{E_40 zs!^%~RcEU%Q{AU}LiLhrcJ}e&$I1)4Xd2aAs)bc6tJYQRt{SU4S9OuEEXR6LsU8$O=x>xm>>UGtJs;PNLmUd)NEu#9K zYJJsassmKVs?JcIt(vI1TlKK&N!3fL&s9@r*ZNfps+Lv_SFNcUsoGCYP{+K)n%${RS&41SG}tGP&JE$ zL}^c6)k>;0RlBGTQ2kVOj_Qx9TUAe}UQoTK`a(5;jhEDyUA2U2dDZ%=%~X4<#;A^0 zb*nB^U81^5b(88b)vKzvRbQy)mN+o&DXv;mwXx~|)sd?6Rex07tNOQUvg%#cRJnA# zRr9MBQw>w?pgKTxi0Ta0d8*4*SF0XYJ*|30^{%RaZnOTZs-;!StF}_@qB=x%lSU9#lQ8`bgCtV%C>QHMeRJ)o|6Cs;yO{RVS)WR{cTsSJe%wJ5?{L-dBC8nkJ9g zj-09mRjaDjQSGieSaqW6WYwQlSF3JSJ+FFG)t=X^FIY9NYAMxhP*s=e z_o~ZO*Q;JvW&39FVK2z*sl|t90@_00qWzynfHDhX`bT5B-P~$k{FQxg)sfMf8 zRBfQzR<*Ng57j}clT^PDrJmWU^F?`P|EjuKb%!YRAJp_&)k}Kb&&Rx;Q51h!RI`iX zuefTMYBf>(HPm!7P509D2u-_HKNZFAOx0PU_+6rE#5M5uyQVjblHRN7gPKm(^i$Qe z_!K|cRST<@SFNquQnjBbeq%-X8Lm1?6hHDu3Pop#l5f7IztyzFuI2g)P4Ct8->S)~ zPgT>}%>3C^3#*n_mH3sc-vd-9sLoPduDVn8jOs(x48CUh0;*L+X?H_SJ7j!mi!pEc k1^@s6 diff --git a/misc/builddeps/linux32/d0_blind_id/lib/libd0_rijndael.la b/misc/builddeps/linux32/d0_blind_id/lib/libd0_rijndael.la deleted file mode 100755 index 49c9909f..00000000 --- a/misc/builddeps/linux32/d0_blind_id/lib/libd0_rijndael.la +++ /dev/null @@ -1,41 +0,0 @@ -# libd0_rijndael.la - a libtool library file -# Generated by ltmain.sh (GNU libtool) 2.2.6b Debian-2.2.6b-2ubuntu1 -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# The name that we can dlopen(3). -dlname='' - -# Names of this library. -library_names='' - -# The name of the static archive. -old_library='libd0_rijndael.a' - -# Linker flags that can not go in dependency_libs. -inherited_linker_flags='' - -# Libraries that this one depends upon. -dependency_libs=' -L/tmp/d0_blind_id.deps/lib/ /tmp/gg/lib/libgmp.la' - -# Names of additional weak libraries provided by this library -weak_library_names='' - -# Version information for libd0_rijndael. -current=0 -age=0 -revision=0 - -# Is this an already installed library? -installed=yes - -# Should we warn about portability when linking against -modules? -shouldnotlink=no - -# Files to dlopen/dlpreopen -dlopen='' -dlpreopen='' - -# Directory that this library needs to be installed in: -libdir='/usr/local/lib' diff --git a/misc/builddeps/linux32/d0_blind_id/lib/libd0_rijndael.so b/misc/builddeps/linux32/d0_blind_id/lib/libd0_rijndael.so deleted file mode 120000 index 01dce017..00000000 --- a/misc/builddeps/linux32/d0_blind_id/lib/libd0_rijndael.so +++ /dev/null @@ -1 +0,0 @@ -libd0_rijndael.so.0.0.0 \ No newline at end of file diff --git a/misc/builddeps/linux32/d0_blind_id/lib/libd0_rijndael.so.0 b/misc/builddeps/linux32/d0_blind_id/lib/libd0_rijndael.so.0 deleted file mode 120000 index 01dce017..00000000 --- a/misc/builddeps/linux32/d0_blind_id/lib/libd0_rijndael.so.0 +++ /dev/null @@ -1 +0,0 @@ -libd0_rijndael.so.0.0.0 \ No newline at end of file diff --git a/misc/builddeps/linux32/d0_blind_id/lib/libd0_rijndael.so.0.0.0 b/misc/builddeps/linux32/d0_blind_id/lib/libd0_rijndael.so.0.0.0 deleted file mode 100755 index b98c986b4651a1bcbe3e3605ca02ddd026624aac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31114 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

__qW9;ox5l{I7$55%50*{^!BJ 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�I%;K5girbtNf9N;LymJq2aOd;bUL< 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 /* for std::istream, std::ostream, std::string */ -#include -#endif - - -/* Instantiated by configure. */ -#if ! defined (__GMP_WITHIN_CONFIGURE) -#define __GMP_HAVE_HOST_CPU_FAMILY_power 0 -#define __GMP_HAVE_HOST_CPU_FAMILY_powerpc 0 -#define GMP_LIMB_BITS 32 -#define GMP_NAIL_BITS 0 -#endif -#define GMP_NUMB_BITS (GMP_LIMB_BITS - GMP_NAIL_BITS) -#define GMP_NUMB_MASK ((~ __GMP_CAST (mp_limb_t, 0)) >> GMP_NAIL_BITS) -#define GMP_NUMB_MAX GMP_NUMB_MASK -#define GMP_NAIL_MASK (~ GMP_NUMB_MASK) - - -/* The following (everything under ifndef __GNU_MP__) must be identical in - gmp.h and mp.h to allow both to be included in an application or during - the library build. */ -#ifndef __GNU_MP__ -#define __GNU_MP__ 5 - -#define __need_size_t /* tell gcc stddef.h we only want size_t */ -#if defined (__cplusplus) -#include /* for size_t */ -#else -#include /* for size_t */ -#endif -#undef __need_size_t - -/* Instantiated by configure. */ -#if ! defined (__GMP_WITHIN_CONFIGURE) -/* #undef _LONG_LONG_LIMB */ -#define __GMP_LIBGMP_DLL 0 -#endif - - -/* __STDC__ - some ANSI compilers define this only to 0, hence the use of - "defined" and not "__STDC__-0". In particular Sun workshop C 5.0 - sets __STDC__ to 0, but requires "##" for token pasting. - - _AIX - gnu ansidecl.h asserts that all known AIX compilers are ANSI but - don't always define __STDC__. - - __DECC - current versions of DEC C (5.9 for instance) for alpha are ANSI, - but don't define __STDC__ in their default mode. Don't know if old - versions might have been K&R, but let's not worry about that unless - someone is still using one. - - _mips - gnu ansidecl.h says the RISC/OS MIPS compiler is ANSI in SVR4 - mode, but doesn't define __STDC__. - - _MSC_VER - Microsoft C is ANSI, but __STDC__ is undefined unless the /Za - option is given (in which case it's 1). - - _WIN32 - tested for by gnu ansidecl.h, no doubt on the assumption that - all w32 compilers are ansi. - - Note: This same set of tests is used by gen-psqr.c and - demos/expr/expr-impl.h, so if anything needs adding, then be sure to - update those too. */ - -#if defined (__STDC__) \ - || defined (__cplusplus) \ - || defined (_AIX) \ - || defined (__DECC) \ - || (defined (__mips) && defined (_SYSTYPE_SVR4)) \ - || defined (_MSC_VER) \ - || defined (_WIN32) -#define __GMP_HAVE_CONST 1 -#define __GMP_HAVE_PROTOTYPES 1 -#define __GMP_HAVE_TOKEN_PASTE 1 -#else -#define __GMP_HAVE_CONST 0 -#define __GMP_HAVE_PROTOTYPES 0 -#define __GMP_HAVE_TOKEN_PASTE 0 -#endif - - -#if __GMP_HAVE_CONST -#define __gmp_const const -#define __gmp_signed signed -#else -#define __gmp_const -#define __gmp_signed -#endif - - -/* __GMP_DECLSPEC supports Windows DLL versions of libgmp, and is empty in - all other circumstances. - - When compiling objects for libgmp, __GMP_DECLSPEC is an export directive, - or when compiling for an application it's an import directive. The two - cases are differentiated by __GMP_WITHIN_GMP defined by the GMP Makefiles - (and not defined from an application). - - __GMP_DECLSPEC_XX is similarly used for libgmpxx. __GMP_WITHIN_GMPXX - indicates when building libgmpxx, and in that case libgmpxx functions are - exports, but libgmp functions which might get called are imports. - - libmp.la uses __GMP_DECLSPEC, just as if it were libgmp.la. libgmp and - libmp don't call each other, so there's no conflict or confusion. - - Libtool DLL_EXPORT define is not used. - - There's no attempt to support GMP built both static and DLL. Doing so - would mean applications would have to tell us which of the two is going - to be used when linking, and that seems very tedious and error prone if - using GMP by hand, and equally tedious from a package since autoconf and - automake don't give much help. - - __GMP_DECLSPEC is required on all documented global functions and - variables, the various internals in gmp-impl.h etc can be left unadorned. - But internals used by the test programs or speed measuring programs - should have __GMP_DECLSPEC, and certainly constants or variables must - have it or the wrong address will be resolved. - - In gcc __declspec can go at either the start or end of a prototype. - - In Microsoft C __declspec must go at the start, or after the type like - void __declspec(...) *foo()". There's no __dllexport or anything to - guard against someone foolish #defining dllexport. _export used to be - available, but no longer. - - In Borland C _export still exists, but needs to go after the type, like - "void _export foo();". Would have to change the __GMP_DECLSPEC syntax to - make use of that. Probably more trouble than it's worth. */ - -#if defined (__GNUC__) -#define __GMP_DECLSPEC_EXPORT __declspec(__dllexport__) -#define __GMP_DECLSPEC_IMPORT __declspec(__dllimport__) -#endif -#if defined (_MSC_VER) || defined (__BORLANDC__) -#define __GMP_DECLSPEC_EXPORT __declspec(dllexport) -#define __GMP_DECLSPEC_IMPORT __declspec(dllimport) -#endif -#ifdef __WATCOMC__ -#define __GMP_DECLSPEC_EXPORT __export -#define __GMP_DECLSPEC_IMPORT __import -#endif -#ifdef __IBMC__ -#define __GMP_DECLSPEC_EXPORT _Export -#define __GMP_DECLSPEC_IMPORT _Import -#endif - -#if __GMP_LIBGMP_DLL -#if __GMP_WITHIN_GMP -/* compiling to go into a DLL libgmp */ -#define __GMP_DECLSPEC __GMP_DECLSPEC_EXPORT -#else -/* compiling to go into an application which will link to a DLL libgmp */ -#define __GMP_DECLSPEC __GMP_DECLSPEC_IMPORT -#endif -#else -/* all other cases */ -#define __GMP_DECLSPEC -#endif - - -#ifdef __GMP_SHORT_LIMB -typedef unsigned int mp_limb_t; -typedef int mp_limb_signed_t; -#else -#ifdef _LONG_LONG_LIMB -typedef unsigned long long int mp_limb_t; -typedef long long int mp_limb_signed_t; -#else -typedef unsigned long int mp_limb_t; -typedef long int mp_limb_signed_t; -#endif -#endif -typedef unsigned long int mp_bitcnt_t; - -/* For reference, note that the name __mpz_struct gets into C++ mangled - function names, which means although the "__" suggests an internal, we - must leave this name for binary compatibility. */ -typedef struct -{ - int _mp_alloc; /* Number of *limbs* allocated and pointed - to by the _mp_d field. */ - int _mp_size; /* abs(_mp_size) is the number of limbs the - last field points to. If _mp_size is - negative this is a negative number. */ - mp_limb_t *_mp_d; /* Pointer to the limbs. */ -} __mpz_struct; - -#endif /* __GNU_MP__ */ - - -typedef __mpz_struct MP_INT; /* gmp 1 source compatibility */ -typedef __mpz_struct mpz_t[1]; - -typedef mp_limb_t * mp_ptr; -typedef __gmp_const mp_limb_t * mp_srcptr; -#if defined (_CRAY) && ! defined (_CRAYMPP) -/* plain `int' is much faster (48 bits) */ -#define __GMP_MP_SIZE_T_INT 1 -typedef int mp_size_t; -typedef int mp_exp_t; -#else -#define __GMP_MP_SIZE_T_INT 0 -typedef long int mp_size_t; -typedef long int mp_exp_t; -#endif - -typedef struct -{ - __mpz_struct _mp_num; - __mpz_struct _mp_den; -} __mpq_struct; - -typedef __mpq_struct MP_RAT; /* gmp 1 source compatibility */ -typedef __mpq_struct mpq_t[1]; - -typedef struct -{ - int _mp_prec; /* Max precision, in number of `mp_limb_t's. - Set by mpf_init and modified by - mpf_set_prec. The area pointed to by the - _mp_d field contains `prec' + 1 limbs. */ - int _mp_size; /* abs(_mp_size) is the number of limbs the - last field points to. If _mp_size is - negative this is a negative number. */ - mp_exp_t _mp_exp; /* Exponent, in the base of `mp_limb_t'. */ - mp_limb_t *_mp_d; /* Pointer to the limbs. */ -} __mpf_struct; - -/* typedef __mpf_struct MP_FLOAT; */ -typedef __mpf_struct mpf_t[1]; - -/* Available random number generation algorithms. */ -typedef enum -{ - GMP_RAND_ALG_DEFAULT = 0, - GMP_RAND_ALG_LC = GMP_RAND_ALG_DEFAULT /* Linear congruential. */ -} gmp_randalg_t; - -/* Random state struct. */ -typedef struct -{ - mpz_t _mp_seed; /* _mp_d member points to state of the generator. */ - gmp_randalg_t _mp_alg; /* Currently unused. */ - union { - void *_mp_lc; /* Pointer to function pointers structure. */ - } _mp_algdata; -} __gmp_randstate_struct; -typedef __gmp_randstate_struct gmp_randstate_t[1]; - -/* Types for function declarations in gmp files. */ -/* ??? Should not pollute user name space with these ??? */ -typedef __gmp_const __mpz_struct *mpz_srcptr; -typedef __mpz_struct *mpz_ptr; -typedef __gmp_const __mpf_struct *mpf_srcptr; -typedef __mpf_struct *mpf_ptr; -typedef __gmp_const __mpq_struct *mpq_srcptr; -typedef __mpq_struct *mpq_ptr; - - -/* This is not wanted in mp.h, so put it outside the __GNU_MP__ common - section. */ -#if __GMP_LIBGMP_DLL -#if __GMP_WITHIN_GMPXX -/* compiling to go into a DLL libgmpxx */ -#define __GMP_DECLSPEC_XX __GMP_DECLSPEC_EXPORT -#else -/* compiling to go into a application which will link to a DLL libgmpxx */ -#define __GMP_DECLSPEC_XX __GMP_DECLSPEC_IMPORT -#endif -#else -/* all other cases */ -#define __GMP_DECLSPEC_XX -#endif - - -#if __GMP_HAVE_PROTOTYPES -#define __GMP_PROTO(x) x -#else -#define __GMP_PROTO(x) () -#endif - -#ifndef __MPN -#if __GMP_HAVE_TOKEN_PASTE -#define __MPN(x) __gmpn_##x -#else -#define __MPN(x) __gmpn_/**/x -#endif -#endif - -/* For reference, "defined(EOF)" cannot be used here. In g++ 2.95.4, - defines EOF but not FILE. */ -#if defined (FILE) \ - || defined (H_STDIO) \ - || defined (_H_STDIO) /* AIX */ \ - || defined (_STDIO_H) /* glibc, Sun, SCO */ \ - || defined (_STDIO_H_) /* BSD, OSF */ \ - || defined (__STDIO_H) /* Borland */ \ - || defined (__STDIO_H__) /* IRIX */ \ - || defined (_STDIO_INCLUDED) /* HPUX */ \ - || defined (__dj_include_stdio_h_) /* DJGPP */ \ - || defined (_FILE_DEFINED) /* Microsoft */ \ - || defined (__STDIO__) /* Apple MPW MrC */ \ - || defined (_MSL_STDIO_H) /* Metrowerks */ \ - || defined (_STDIO_H_INCLUDED) /* QNX4 */ \ - || defined (_ISO_STDIO_ISO_H) /* Sun C++ */ -#define _GMP_H_HAVE_FILE 1 -#endif - -/* In ISO C, if a prototype involving "struct obstack *" is given without - that structure defined, then the struct is scoped down to just the - prototype, causing a conflict if it's subsequently defined for real. So - only give prototypes if we've got obstack.h. */ -#if defined (_OBSTACK_H) /* glibc */ -#define _GMP_H_HAVE_OBSTACK 1 -#endif - -/* The prototypes for gmp_vprintf etc are provided only if va_list is - available, via an application having included or . - Usually va_list is a typedef so can't be tested directly, but C99 - specifies that va_start is a macro (and it was normally a macro on past - systems too), so look for that. - - will define some sort of va_list for vprintf and vfprintf, but - let's not bother trying to use that since it's not standard and since - application uses for gmp_vprintf etc will almost certainly require the - whole or anyway. */ - -#ifdef va_start -#define _GMP_H_HAVE_VA_LIST 1 -#endif - -/* Test for gcc >= maj.min, as per __GNUC_PREREQ in glibc */ -#if defined (__GNUC__) && defined (__GNUC_MINOR__) -#define __GMP_GNUC_PREREQ(maj, min) \ - ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) -#else -#define __GMP_GNUC_PREREQ(maj, min) 0 -#endif - -/* "pure" is in gcc 2.96 and up, see "(gcc)Function Attributes". Basically - it means a function does nothing but examine its arguments and memory - (global or via arguments) to generate a return value, but changes nothing - and has no side-effects. __GMP_NO_ATTRIBUTE_CONST_PURE lets - tune/common.c etc turn this off when trying to write timing loops. */ -#if __GMP_GNUC_PREREQ (2,96) && ! defined (__GMP_NO_ATTRIBUTE_CONST_PURE) -#define __GMP_ATTRIBUTE_PURE __attribute__ ((__pure__)) -#else -#define __GMP_ATTRIBUTE_PURE -#endif - - -/* __GMP_CAST allows us to use static_cast in C++, so our macros are clean - to "g++ -Wold-style-cast". - - Casts in "extern inline" code within an extern "C" block don't induce - these warnings, so __GMP_CAST only needs to be used on documented - macros. */ - -#ifdef __cplusplus -#define __GMP_CAST(type, expr) (static_cast (expr)) -#else -#define __GMP_CAST(type, expr) ((type) (expr)) -#endif - - -/* An empty "throw ()" means the function doesn't throw any C++ exceptions, - this can save some stack frame info in applications. - - Currently it's given only on functions which never divide-by-zero etc, - don't allocate memory, and are expected to never need to allocate memory. - This leaves open the possibility of a C++ throw from a future GMP - exceptions scheme. - - mpz_set_ui etc are omitted to leave open the lazy allocation scheme - described in doc/tasks.html. mpz_get_d etc are omitted to leave open - exceptions for float overflows. - - Note that __GMP_NOTHROW must be given on any inlines the same as on their - prototypes (for g++ at least, where they're used together). Note also - that g++ 3.0 demands that __GMP_NOTHROW is before other attributes like - __GMP_ATTRIBUTE_PURE. */ - -#if defined (__cplusplus) -#define __GMP_NOTHROW throw () -#else -#define __GMP_NOTHROW -#endif - - -/* PORTME: What other compilers have a useful "extern inline"? "static - inline" would be an acceptable substitute if the compiler (or linker) - discards unused statics. */ - - /* gcc has __inline__ in all modes, including strict ansi. Give a prototype - for an inline too, so as to correctly specify "dllimport" on windows, in - case the function is called rather than inlined. - GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 - inline semantics, unless -fgnu89-inline is used. */ -#ifdef __GNUC__ -#if (defined __GNUC_STDC_INLINE__) || (__GNUC__ == 4 && __GNUC_MINOR__ == 2) -#define __GMP_EXTERN_INLINE extern __inline__ __attribute__ ((__gnu_inline__)) -#else -#define __GMP_EXTERN_INLINE extern __inline__ -#endif -#define __GMP_INLINE_PROTOTYPES 1 -#endif - -/* DEC C (eg. version 5.9) supports "static __inline foo()", even in -std1 - strict ANSI mode. Inlining is done even when not optimizing (ie. -O0 - mode, which is the default), but an unnecessary local copy of foo is - emitted unless -O is used. "extern __inline" is accepted, but the - "extern" appears to be ignored, ie. it becomes a plain global function - but which is inlined within its file. Don't know if all old versions of - DEC C supported __inline, but as a start let's do the right thing for - current versions. */ -#ifdef __DECC -#define __GMP_EXTERN_INLINE static __inline -#endif - -/* SCO OpenUNIX 8 cc supports "static inline foo()" but not in -Xc strict - ANSI mode (__STDC__ is 1 in that mode). Inlining only actually takes - place under -O. Without -O "foo" seems to be emitted whether it's used - or not, which is wasteful. "extern inline foo()" isn't useful, the - "extern" is apparently ignored, so foo is inlined if possible but also - emitted as a global, which causes multiple definition errors when - building a shared libgmp. */ -#ifdef __SCO_VERSION__ -#if __SCO_VERSION__ > 400000000 && __STDC__ != 1 \ - && ! defined (__GMP_EXTERN_INLINE) -#define __GMP_EXTERN_INLINE static inline -#endif -#endif - -/* Microsoft's C compiler accepts __inline */ -#ifdef _MSC_VER -#define __GMP_EXTERN_INLINE __inline -#endif - -/* Recent enough Sun C compilers want "inline" */ -#if defined (__SUNPRO_C) && __SUNPRO_C >= 0x560 \ - && ! defined (__GMP_EXTERN_INLINE) -#define __GMP_EXTERN_INLINE inline -#endif - -/* Somewhat older Sun C compilers want "static inline" */ -#if defined (__SUNPRO_C) && __SUNPRO_C >= 0x540 \ - && ! defined (__GMP_EXTERN_INLINE) -#define __GMP_EXTERN_INLINE static inline -#endif - - -/* C++ always has "inline" and since it's a normal feature the linker should - discard duplicate non-inlined copies, or if it doesn't then that's a - problem for everyone, not just GMP. */ -#if defined (__cplusplus) && ! defined (__GMP_EXTERN_INLINE) -#define __GMP_EXTERN_INLINE inline -#endif - -/* Don't do any inlining within a configure run, since if the compiler ends - up emitting copies of the code into the object file it can end up - demanding the various support routines (like mpn_popcount) for linking, - making the "alloca" test and perhaps others fail. And on hppa ia64 a - pre-release gcc 3.2 was seen not respecting the "extern" in "extern - __inline__", triggering this problem too. */ -#if defined (__GMP_WITHIN_CONFIGURE) && ! __GMP_WITHIN_CONFIGURE_INLINE -#undef __GMP_EXTERN_INLINE -#endif - -/* By default, don't give a prototype when there's going to be an inline - version. Note in particular that Cray C++ objects to the combination of - prototype and inline. */ -#ifdef __GMP_EXTERN_INLINE -#ifndef __GMP_INLINE_PROTOTYPES -#define __GMP_INLINE_PROTOTYPES 0 -#endif -#else -#define __GMP_INLINE_PROTOTYPES 1 -#endif - - -#define __GMP_ABS(x) ((x) >= 0 ? (x) : -(x)) -#define __GMP_MAX(h,i) ((h) > (i) ? (h) : (i)) - -/* __GMP_USHRT_MAX is not "~ (unsigned short) 0" because short is promoted - to int by "~". */ -#define __GMP_UINT_MAX (~ (unsigned) 0) -#define __GMP_ULONG_MAX (~ (unsigned long) 0) -#define __GMP_USHRT_MAX ((unsigned short) ~0) - - -/* __builtin_expect is in gcc 3.0, and not in 2.95. */ -#if __GMP_GNUC_PREREQ (3,0) -#define __GMP_LIKELY(cond) __builtin_expect ((cond) != 0, 1) -#define __GMP_UNLIKELY(cond) __builtin_expect ((cond) != 0, 0) -#else -#define __GMP_LIKELY(cond) (cond) -#define __GMP_UNLIKELY(cond) (cond) -#endif - -#ifdef _CRAY -#define __GMP_CRAY_Pragma(str) _Pragma (str) -#else -#define __GMP_CRAY_Pragma(str) -#endif - - -/* Allow direct user access to numerator and denominator of a mpq_t object. */ -#define mpq_numref(Q) (&((Q)->_mp_num)) -#define mpq_denref(Q) (&((Q)->_mp_den)) - - -#if defined (__cplusplus) -extern "C" { -using std::FILE; -#endif - -#define mp_set_memory_functions __gmp_set_memory_functions -__GMP_DECLSPEC void mp_set_memory_functions __GMP_PROTO ((void *(*) (size_t), - void *(*) (void *, size_t, size_t), - void (*) (void *, size_t))) __GMP_NOTHROW; - -#define mp_get_memory_functions __gmp_get_memory_functions -__GMP_DECLSPEC void mp_get_memory_functions __GMP_PROTO ((void *(**) (size_t), - void *(**) (void *, size_t, size_t), - void (**) (void *, size_t))) __GMP_NOTHROW; - -#define mp_bits_per_limb __gmp_bits_per_limb -__GMP_DECLSPEC extern __gmp_const int mp_bits_per_limb; - -#define gmp_errno __gmp_errno -__GMP_DECLSPEC extern int gmp_errno; - -#define gmp_version __gmp_version -__GMP_DECLSPEC extern __gmp_const char * __gmp_const gmp_version; - - -/**************** Random number routines. ****************/ - -/* obsolete */ -#define gmp_randinit __gmp_randinit -__GMP_DECLSPEC void gmp_randinit __GMP_PROTO ((gmp_randstate_t, gmp_randalg_t, ...)); - -#define gmp_randinit_default __gmp_randinit_default -__GMP_DECLSPEC void gmp_randinit_default __GMP_PROTO ((gmp_randstate_t)); - -#define gmp_randinit_lc_2exp __gmp_randinit_lc_2exp -__GMP_DECLSPEC void gmp_randinit_lc_2exp __GMP_PROTO ((gmp_randstate_t, - mpz_srcptr, unsigned long int, - mp_bitcnt_t)); - -#define gmp_randinit_lc_2exp_size __gmp_randinit_lc_2exp_size -__GMP_DECLSPEC int gmp_randinit_lc_2exp_size __GMP_PROTO ((gmp_randstate_t, mp_bitcnt_t)); - -#define gmp_randinit_mt __gmp_randinit_mt -__GMP_DECLSPEC void gmp_randinit_mt __GMP_PROTO ((gmp_randstate_t)); - -#define gmp_randinit_set __gmp_randinit_set -__GMP_DECLSPEC void gmp_randinit_set __GMP_PROTO ((gmp_randstate_t, __gmp_const __gmp_randstate_struct *)); - -#define gmp_randseed __gmp_randseed -__GMP_DECLSPEC void gmp_randseed __GMP_PROTO ((gmp_randstate_t, mpz_srcptr)); - -#define gmp_randseed_ui __gmp_randseed_ui -__GMP_DECLSPEC void gmp_randseed_ui __GMP_PROTO ((gmp_randstate_t, unsigned long int)); - -#define gmp_randclear __gmp_randclear -__GMP_DECLSPEC void gmp_randclear __GMP_PROTO ((gmp_randstate_t)); - -#define gmp_urandomb_ui __gmp_urandomb_ui -__GMP_DECLSPEC unsigned long gmp_urandomb_ui __GMP_PROTO ((gmp_randstate_t, unsigned long)); - -#define gmp_urandomm_ui __gmp_urandomm_ui -__GMP_DECLSPEC unsigned long gmp_urandomm_ui __GMP_PROTO ((gmp_randstate_t, unsigned long)); - - -/**************** Formatted output routines. ****************/ - -#define gmp_asprintf __gmp_asprintf -__GMP_DECLSPEC int gmp_asprintf __GMP_PROTO ((char **, __gmp_const char *, ...)); - -#define gmp_fprintf __gmp_fprintf -#ifdef _GMP_H_HAVE_FILE -__GMP_DECLSPEC int gmp_fprintf __GMP_PROTO ((FILE *, __gmp_const char *, ...)); -#endif - -#define gmp_obstack_printf __gmp_obstack_printf -#if defined (_GMP_H_HAVE_OBSTACK) -__GMP_DECLSPEC int gmp_obstack_printf __GMP_PROTO ((struct obstack *, __gmp_const char *, ...)); -#endif - -#define gmp_obstack_vprintf __gmp_obstack_vprintf -#if defined (_GMP_H_HAVE_OBSTACK) && defined (_GMP_H_HAVE_VA_LIST) -__GMP_DECLSPEC int gmp_obstack_vprintf __GMP_PROTO ((struct obstack *, __gmp_const char *, va_list)); -#endif - -#define gmp_printf __gmp_printf -__GMP_DECLSPEC int gmp_printf __GMP_PROTO ((__gmp_const char *, ...)); - -#define gmp_snprintf __gmp_snprintf -__GMP_DECLSPEC int gmp_snprintf __GMP_PROTO ((char *, size_t, __gmp_const char *, ...)); - -#define gmp_sprintf __gmp_sprintf -__GMP_DECLSPEC int gmp_sprintf __GMP_PROTO ((char *, __gmp_const char *, ...)); - -#define gmp_vasprintf __gmp_vasprintf -#if defined (_GMP_H_HAVE_VA_LIST) -__GMP_DECLSPEC int gmp_vasprintf __GMP_PROTO ((char **, __gmp_const char *, va_list)); -#endif - -#define gmp_vfprintf __gmp_vfprintf -#if defined (_GMP_H_HAVE_FILE) && defined (_GMP_H_HAVE_VA_LIST) -__GMP_DECLSPEC int gmp_vfprintf __GMP_PROTO ((FILE *, __gmp_const char *, va_list)); -#endif - -#define gmp_vprintf __gmp_vprintf -#if defined (_GMP_H_HAVE_VA_LIST) -__GMP_DECLSPEC int gmp_vprintf __GMP_PROTO ((__gmp_const char *, va_list)); -#endif - -#define gmp_vsnprintf __gmp_vsnprintf -#if defined (_GMP_H_HAVE_VA_LIST) -__GMP_DECLSPEC int gmp_vsnprintf __GMP_PROTO ((char *, size_t, __gmp_const char *, va_list)); -#endif - -#define gmp_vsprintf __gmp_vsprintf -#if defined (_GMP_H_HAVE_VA_LIST) -__GMP_DECLSPEC int gmp_vsprintf __GMP_PROTO ((char *, __gmp_const char *, va_list)); -#endif - - -/**************** Formatted input routines. ****************/ - -#define gmp_fscanf __gmp_fscanf -#ifdef _GMP_H_HAVE_FILE -__GMP_DECLSPEC int gmp_fscanf __GMP_PROTO ((FILE *, __gmp_const char *, ...)); -#endif - -#define gmp_scanf __gmp_scanf -__GMP_DECLSPEC int gmp_scanf __GMP_PROTO ((__gmp_const char *, ...)); - -#define gmp_sscanf __gmp_sscanf -__GMP_DECLSPEC int gmp_sscanf __GMP_PROTO ((__gmp_const char *, __gmp_const char *, ...)); - -#define gmp_vfscanf __gmp_vfscanf -#if defined (_GMP_H_HAVE_FILE) && defined (_GMP_H_HAVE_VA_LIST) -__GMP_DECLSPEC int gmp_vfscanf __GMP_PROTO ((FILE *, __gmp_const char *, va_list)); -#endif - -#define gmp_vscanf __gmp_vscanf -#if defined (_GMP_H_HAVE_VA_LIST) -__GMP_DECLSPEC int gmp_vscanf __GMP_PROTO ((__gmp_const char *, va_list)); -#endif - -#define gmp_vsscanf __gmp_vsscanf -#if defined (_GMP_H_HAVE_VA_LIST) -__GMP_DECLSPEC int gmp_vsscanf __GMP_PROTO ((__gmp_const char *, __gmp_const char *, va_list)); -#endif - - -/**************** Integer (i.e. Z) routines. ****************/ - -#define _mpz_realloc __gmpz_realloc -#define mpz_realloc __gmpz_realloc -__GMP_DECLSPEC void *_mpz_realloc __GMP_PROTO ((mpz_ptr, mp_size_t)); - -#define mpz_abs __gmpz_abs -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_abs) -__GMP_DECLSPEC void mpz_abs __GMP_PROTO ((mpz_ptr, mpz_srcptr)); -#endif - -#define mpz_add __gmpz_add -__GMP_DECLSPEC void mpz_add __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_add_ui __gmpz_add_ui -__GMP_DECLSPEC void mpz_add_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_addmul __gmpz_addmul -__GMP_DECLSPEC void mpz_addmul __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_addmul_ui __gmpz_addmul_ui -__GMP_DECLSPEC void mpz_addmul_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_and __gmpz_and -__GMP_DECLSPEC void mpz_and __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_array_init __gmpz_array_init -__GMP_DECLSPEC void mpz_array_init __GMP_PROTO ((mpz_ptr, mp_size_t, mp_size_t)); - -#define mpz_bin_ui __gmpz_bin_ui -__GMP_DECLSPEC void mpz_bin_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_bin_uiui __gmpz_bin_uiui -__GMP_DECLSPEC void mpz_bin_uiui __GMP_PROTO ((mpz_ptr, unsigned long int, unsigned long int)); - -#define mpz_cdiv_q __gmpz_cdiv_q -__GMP_DECLSPEC void mpz_cdiv_q __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_cdiv_q_2exp __gmpz_cdiv_q_2exp -__GMP_DECLSPEC void mpz_cdiv_q_2exp __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long)); - -#define mpz_cdiv_q_ui __gmpz_cdiv_q_ui -__GMP_DECLSPEC unsigned long int mpz_cdiv_q_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_cdiv_qr __gmpz_cdiv_qr -__GMP_DECLSPEC void mpz_cdiv_qr __GMP_PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_cdiv_qr_ui __gmpz_cdiv_qr_ui -__GMP_DECLSPEC unsigned long int mpz_cdiv_qr_ui __GMP_PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_cdiv_r __gmpz_cdiv_r -__GMP_DECLSPEC void mpz_cdiv_r __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_cdiv_r_2exp __gmpz_cdiv_r_2exp -__GMP_DECLSPEC void mpz_cdiv_r_2exp __GMP_PROTO ((mpz_ptr, mpz_srcptr, mp_bitcnt_t)); - -#define mpz_cdiv_r_ui __gmpz_cdiv_r_ui -__GMP_DECLSPEC unsigned long int mpz_cdiv_r_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_cdiv_ui __gmpz_cdiv_ui -__GMP_DECLSPEC unsigned long int mpz_cdiv_ui __GMP_PROTO ((mpz_srcptr, unsigned long int)) __GMP_ATTRIBUTE_PURE; - -#define mpz_clear __gmpz_clear -__GMP_DECLSPEC void mpz_clear __GMP_PROTO ((mpz_ptr)); - -#define mpz_clears __gmpz_clears -__GMP_DECLSPEC void mpz_clears __GMP_PROTO ((mpz_ptr, ...)); - -#define mpz_clrbit __gmpz_clrbit -__GMP_DECLSPEC void mpz_clrbit __GMP_PROTO ((mpz_ptr, mp_bitcnt_t)); - -#define mpz_cmp __gmpz_cmp -__GMP_DECLSPEC int mpz_cmp __GMP_PROTO ((mpz_srcptr, mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_cmp_d __gmpz_cmp_d -__GMP_DECLSPEC int mpz_cmp_d __GMP_PROTO ((mpz_srcptr, double)) __GMP_ATTRIBUTE_PURE; - -#define _mpz_cmp_si __gmpz_cmp_si -__GMP_DECLSPEC int _mpz_cmp_si __GMP_PROTO ((mpz_srcptr, signed long int)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define _mpz_cmp_ui __gmpz_cmp_ui -__GMP_DECLSPEC int _mpz_cmp_ui __GMP_PROTO ((mpz_srcptr, unsigned long int)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_cmpabs __gmpz_cmpabs -__GMP_DECLSPEC int mpz_cmpabs __GMP_PROTO ((mpz_srcptr, mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_cmpabs_d __gmpz_cmpabs_d -__GMP_DECLSPEC int mpz_cmpabs_d __GMP_PROTO ((mpz_srcptr, double)) __GMP_ATTRIBUTE_PURE; - -#define mpz_cmpabs_ui __gmpz_cmpabs_ui -__GMP_DECLSPEC int mpz_cmpabs_ui __GMP_PROTO ((mpz_srcptr, unsigned long int)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_com __gmpz_com -__GMP_DECLSPEC void mpz_com __GMP_PROTO ((mpz_ptr, mpz_srcptr)); - -#define mpz_combit __gmpz_combit -__GMP_DECLSPEC void mpz_combit __GMP_PROTO ((mpz_ptr, mp_bitcnt_t)); - -#define mpz_congruent_p __gmpz_congruent_p -__GMP_DECLSPEC int mpz_congruent_p __GMP_PROTO ((mpz_srcptr, mpz_srcptr, mpz_srcptr)) __GMP_ATTRIBUTE_PURE; - -#define mpz_congruent_2exp_p __gmpz_congruent_2exp_p -__GMP_DECLSPEC int mpz_congruent_2exp_p __GMP_PROTO ((mpz_srcptr, mpz_srcptr, mp_bitcnt_t)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_congruent_ui_p __gmpz_congruent_ui_p -__GMP_DECLSPEC int mpz_congruent_ui_p __GMP_PROTO ((mpz_srcptr, unsigned long, unsigned long)) __GMP_ATTRIBUTE_PURE; - -#define mpz_divexact __gmpz_divexact -__GMP_DECLSPEC void mpz_divexact __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_divexact_ui __gmpz_divexact_ui -__GMP_DECLSPEC void mpz_divexact_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long)); - -#define mpz_divisible_p __gmpz_divisible_p -__GMP_DECLSPEC int mpz_divisible_p __GMP_PROTO ((mpz_srcptr, mpz_srcptr)) __GMP_ATTRIBUTE_PURE; - -#define mpz_divisible_ui_p __gmpz_divisible_ui_p -__GMP_DECLSPEC int mpz_divisible_ui_p __GMP_PROTO ((mpz_srcptr, unsigned long)) __GMP_ATTRIBUTE_PURE; - -#define mpz_divisible_2exp_p __gmpz_divisible_2exp_p -__GMP_DECLSPEC int mpz_divisible_2exp_p __GMP_PROTO ((mpz_srcptr, mp_bitcnt_t)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_dump __gmpz_dump -__GMP_DECLSPEC void mpz_dump __GMP_PROTO ((mpz_srcptr)); - -#define mpz_export __gmpz_export -__GMP_DECLSPEC void *mpz_export __GMP_PROTO ((void *, size_t *, int, size_t, int, size_t, mpz_srcptr)); - -#define mpz_fac_ui __gmpz_fac_ui -__GMP_DECLSPEC void mpz_fac_ui __GMP_PROTO ((mpz_ptr, unsigned long int)); - -#define mpz_fdiv_q __gmpz_fdiv_q -__GMP_DECLSPEC void mpz_fdiv_q __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_fdiv_q_2exp __gmpz_fdiv_q_2exp -__GMP_DECLSPEC void mpz_fdiv_q_2exp __GMP_PROTO ((mpz_ptr, mpz_srcptr, mp_bitcnt_t)); - -#define mpz_fdiv_q_ui __gmpz_fdiv_q_ui -__GMP_DECLSPEC unsigned long int mpz_fdiv_q_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_fdiv_qr __gmpz_fdiv_qr -__GMP_DECLSPEC void mpz_fdiv_qr __GMP_PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_fdiv_qr_ui __gmpz_fdiv_qr_ui -__GMP_DECLSPEC unsigned long int mpz_fdiv_qr_ui __GMP_PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_fdiv_r __gmpz_fdiv_r -__GMP_DECLSPEC void mpz_fdiv_r __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_fdiv_r_2exp __gmpz_fdiv_r_2exp -__GMP_DECLSPEC void mpz_fdiv_r_2exp __GMP_PROTO ((mpz_ptr, mpz_srcptr, mp_bitcnt_t)); - -#define mpz_fdiv_r_ui __gmpz_fdiv_r_ui -__GMP_DECLSPEC unsigned long int mpz_fdiv_r_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_fdiv_ui __gmpz_fdiv_ui -__GMP_DECLSPEC unsigned long int mpz_fdiv_ui __GMP_PROTO ((mpz_srcptr, unsigned long int)) __GMP_ATTRIBUTE_PURE; - -#define mpz_fib_ui __gmpz_fib_ui -__GMP_DECLSPEC void mpz_fib_ui __GMP_PROTO ((mpz_ptr, unsigned long int)); - -#define mpz_fib2_ui __gmpz_fib2_ui -__GMP_DECLSPEC void mpz_fib2_ui __GMP_PROTO ((mpz_ptr, mpz_ptr, unsigned long int)); - -#define mpz_fits_sint_p __gmpz_fits_sint_p -__GMP_DECLSPEC int mpz_fits_sint_p __GMP_PROTO ((mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_fits_slong_p __gmpz_fits_slong_p -__GMP_DECLSPEC int mpz_fits_slong_p __GMP_PROTO ((mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_fits_sshort_p __gmpz_fits_sshort_p -__GMP_DECLSPEC int mpz_fits_sshort_p __GMP_PROTO ((mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_fits_uint_p __gmpz_fits_uint_p -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_fits_uint_p) -__GMP_DECLSPEC int mpz_fits_uint_p __GMP_PROTO ((mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; -#endif - -#define mpz_fits_ulong_p __gmpz_fits_ulong_p -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_fits_ulong_p) -__GMP_DECLSPEC int mpz_fits_ulong_p __GMP_PROTO ((mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; -#endif - -#define mpz_fits_ushort_p __gmpz_fits_ushort_p -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_fits_ushort_p) -__GMP_DECLSPEC int mpz_fits_ushort_p __GMP_PROTO ((mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; -#endif - -#define mpz_gcd __gmpz_gcd -__GMP_DECLSPEC void mpz_gcd __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_gcd_ui __gmpz_gcd_ui -__GMP_DECLSPEC unsigned long int mpz_gcd_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_gcdext __gmpz_gcdext -__GMP_DECLSPEC void mpz_gcdext __GMP_PROTO ((mpz_ptr, mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_get_d __gmpz_get_d -__GMP_DECLSPEC double mpz_get_d __GMP_PROTO ((mpz_srcptr)) __GMP_ATTRIBUTE_PURE; - -#define mpz_get_d_2exp __gmpz_get_d_2exp -__GMP_DECLSPEC double mpz_get_d_2exp __GMP_PROTO ((signed long int *, mpz_srcptr)); - -#define mpz_get_si __gmpz_get_si -__GMP_DECLSPEC /* signed */ long int mpz_get_si __GMP_PROTO ((mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_get_str __gmpz_get_str -__GMP_DECLSPEC char *mpz_get_str __GMP_PROTO ((char *, int, mpz_srcptr)); - -#define mpz_get_ui __gmpz_get_ui -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_get_ui) -__GMP_DECLSPEC unsigned long int mpz_get_ui __GMP_PROTO ((mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; -#endif - -#define mpz_getlimbn __gmpz_getlimbn -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_getlimbn) -__GMP_DECLSPEC mp_limb_t mpz_getlimbn __GMP_PROTO ((mpz_srcptr, mp_size_t)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; -#endif - -#define mpz_hamdist __gmpz_hamdist -__GMP_DECLSPEC mp_bitcnt_t mpz_hamdist __GMP_PROTO ((mpz_srcptr, mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_import __gmpz_import -__GMP_DECLSPEC void mpz_import __GMP_PROTO ((mpz_ptr, size_t, int, size_t, int, size_t, __gmp_const void *)); - -#define mpz_init __gmpz_init -__GMP_DECLSPEC void mpz_init __GMP_PROTO ((mpz_ptr)); - -#define mpz_init2 __gmpz_init2 -__GMP_DECLSPEC void mpz_init2 __GMP_PROTO ((mpz_ptr, mp_bitcnt_t)); - -#define mpz_inits __gmpz_inits -__GMP_DECLSPEC void mpz_inits __GMP_PROTO ((mpz_ptr, ...)); - -#define mpz_init_set __gmpz_init_set -__GMP_DECLSPEC void mpz_init_set __GMP_PROTO ((mpz_ptr, mpz_srcptr)); - -#define mpz_init_set_d __gmpz_init_set_d -__GMP_DECLSPEC void mpz_init_set_d __GMP_PROTO ((mpz_ptr, double)); - -#define mpz_init_set_si __gmpz_init_set_si -__GMP_DECLSPEC void mpz_init_set_si __GMP_PROTO ((mpz_ptr, signed long int)); - -#define mpz_init_set_str __gmpz_init_set_str -__GMP_DECLSPEC int mpz_init_set_str __GMP_PROTO ((mpz_ptr, __gmp_const char *, int)); - -#define mpz_init_set_ui __gmpz_init_set_ui -__GMP_DECLSPEC void mpz_init_set_ui __GMP_PROTO ((mpz_ptr, unsigned long int)); - -#define mpz_inp_raw __gmpz_inp_raw -#ifdef _GMP_H_HAVE_FILE -__GMP_DECLSPEC size_t mpz_inp_raw __GMP_PROTO ((mpz_ptr, FILE *)); -#endif - -#define mpz_inp_str __gmpz_inp_str -#ifdef _GMP_H_HAVE_FILE -__GMP_DECLSPEC size_t mpz_inp_str __GMP_PROTO ((mpz_ptr, FILE *, int)); -#endif - -#define mpz_invert __gmpz_invert -__GMP_DECLSPEC int mpz_invert __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_ior __gmpz_ior -__GMP_DECLSPEC void mpz_ior __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_jacobi __gmpz_jacobi -__GMP_DECLSPEC int mpz_jacobi __GMP_PROTO ((mpz_srcptr, mpz_srcptr)) __GMP_ATTRIBUTE_PURE; - -#define mpz_kronecker mpz_jacobi /* alias */ - -#define mpz_kronecker_si __gmpz_kronecker_si -__GMP_DECLSPEC int mpz_kronecker_si __GMP_PROTO ((mpz_srcptr, long)) __GMP_ATTRIBUTE_PURE; - -#define mpz_kronecker_ui __gmpz_kronecker_ui -__GMP_DECLSPEC int mpz_kronecker_ui __GMP_PROTO ((mpz_srcptr, unsigned long)) __GMP_ATTRIBUTE_PURE; - -#define mpz_si_kronecker __gmpz_si_kronecker -__GMP_DECLSPEC int mpz_si_kronecker __GMP_PROTO ((long, mpz_srcptr)) __GMP_ATTRIBUTE_PURE; - -#define mpz_ui_kronecker __gmpz_ui_kronecker -__GMP_DECLSPEC int mpz_ui_kronecker __GMP_PROTO ((unsigned long, mpz_srcptr)) __GMP_ATTRIBUTE_PURE; - -#define mpz_lcm __gmpz_lcm -__GMP_DECLSPEC void mpz_lcm __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_lcm_ui __gmpz_lcm_ui -__GMP_DECLSPEC void mpz_lcm_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long)); - -#define mpz_legendre mpz_jacobi /* alias */ - -#define mpz_lucnum_ui __gmpz_lucnum_ui -__GMP_DECLSPEC void mpz_lucnum_ui __GMP_PROTO ((mpz_ptr, unsigned long int)); - -#define mpz_lucnum2_ui __gmpz_lucnum2_ui -__GMP_DECLSPEC void mpz_lucnum2_ui __GMP_PROTO ((mpz_ptr, mpz_ptr, unsigned long int)); - -#define mpz_millerrabin __gmpz_millerrabin -__GMP_DECLSPEC int mpz_millerrabin __GMP_PROTO ((mpz_srcptr, int)) __GMP_ATTRIBUTE_PURE; - -#define mpz_mod __gmpz_mod -__GMP_DECLSPEC void mpz_mod __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_mod_ui mpz_fdiv_r_ui /* same as fdiv_r because divisor unsigned */ - -#define mpz_mul __gmpz_mul -__GMP_DECLSPEC void mpz_mul __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_mul_2exp __gmpz_mul_2exp -__GMP_DECLSPEC void mpz_mul_2exp __GMP_PROTO ((mpz_ptr, mpz_srcptr, mp_bitcnt_t)); - -#define mpz_mul_si __gmpz_mul_si -__GMP_DECLSPEC void mpz_mul_si __GMP_PROTO ((mpz_ptr, mpz_srcptr, long int)); - -#define mpz_mul_ui __gmpz_mul_ui -__GMP_DECLSPEC void mpz_mul_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_neg __gmpz_neg -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_neg) -__GMP_DECLSPEC void mpz_neg __GMP_PROTO ((mpz_ptr, mpz_srcptr)); -#endif - -#define mpz_nextprime __gmpz_nextprime -__GMP_DECLSPEC void mpz_nextprime __GMP_PROTO ((mpz_ptr, mpz_srcptr)); - -#define mpz_out_raw __gmpz_out_raw -#ifdef _GMP_H_HAVE_FILE -__GMP_DECLSPEC size_t mpz_out_raw __GMP_PROTO ((FILE *, mpz_srcptr)); -#endif - -#define mpz_out_str __gmpz_out_str -#ifdef _GMP_H_HAVE_FILE -__GMP_DECLSPEC size_t mpz_out_str __GMP_PROTO ((FILE *, int, mpz_srcptr)); -#endif - -#define mpz_perfect_power_p __gmpz_perfect_power_p -__GMP_DECLSPEC int mpz_perfect_power_p __GMP_PROTO ((mpz_srcptr)) __GMP_ATTRIBUTE_PURE; - -#define mpz_perfect_square_p __gmpz_perfect_square_p -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_perfect_square_p) -__GMP_DECLSPEC int mpz_perfect_square_p __GMP_PROTO ((mpz_srcptr)) __GMP_ATTRIBUTE_PURE; -#endif - -#define mpz_popcount __gmpz_popcount -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_popcount) -__GMP_DECLSPEC mp_bitcnt_t mpz_popcount __GMP_PROTO ((mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; -#endif - -#define mpz_pow_ui __gmpz_pow_ui -__GMP_DECLSPEC void mpz_pow_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_powm __gmpz_powm -__GMP_DECLSPEC void mpz_powm __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_powm_sec __gmpz_powm_sec -__GMP_DECLSPEC void mpz_powm_sec __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_powm_ui __gmpz_powm_ui -__GMP_DECLSPEC void mpz_powm_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int, mpz_srcptr)); - -#define mpz_probab_prime_p __gmpz_probab_prime_p -__GMP_DECLSPEC int mpz_probab_prime_p __GMP_PROTO ((mpz_srcptr, int)) __GMP_ATTRIBUTE_PURE; - -#define mpz_random __gmpz_random -__GMP_DECLSPEC void mpz_random __GMP_PROTO ((mpz_ptr, mp_size_t)); - -#define mpz_random2 __gmpz_random2 -__GMP_DECLSPEC void mpz_random2 __GMP_PROTO ((mpz_ptr, mp_size_t)); - -#define mpz_realloc2 __gmpz_realloc2 -__GMP_DECLSPEC void mpz_realloc2 __GMP_PROTO ((mpz_ptr, mp_bitcnt_t)); - -#define mpz_remove __gmpz_remove -__GMP_DECLSPEC unsigned long int mpz_remove __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_root __gmpz_root -__GMP_DECLSPEC int mpz_root __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_rootrem __gmpz_rootrem -__GMP_DECLSPEC void mpz_rootrem __GMP_PROTO ((mpz_ptr,mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_rrandomb __gmpz_rrandomb -__GMP_DECLSPEC void mpz_rrandomb __GMP_PROTO ((mpz_ptr, gmp_randstate_t, mp_bitcnt_t)); - -#define mpz_scan0 __gmpz_scan0 -__GMP_DECLSPEC mp_bitcnt_t mpz_scan0 __GMP_PROTO ((mpz_srcptr, mp_bitcnt_t)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_scan1 __gmpz_scan1 -__GMP_DECLSPEC mp_bitcnt_t mpz_scan1 __GMP_PROTO ((mpz_srcptr, mp_bitcnt_t)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_set __gmpz_set -__GMP_DECLSPEC void mpz_set __GMP_PROTO ((mpz_ptr, mpz_srcptr)); - -#define mpz_set_d __gmpz_set_d -__GMP_DECLSPEC void mpz_set_d __GMP_PROTO ((mpz_ptr, double)); - -#define mpz_set_f __gmpz_set_f -__GMP_DECLSPEC void mpz_set_f __GMP_PROTO ((mpz_ptr, mpf_srcptr)); - -#define mpz_set_q __gmpz_set_q -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_set_q) -__GMP_DECLSPEC void mpz_set_q __GMP_PROTO ((mpz_ptr, mpq_srcptr)); -#endif - -#define mpz_set_si __gmpz_set_si -__GMP_DECLSPEC void mpz_set_si __GMP_PROTO ((mpz_ptr, signed long int)); - -#define mpz_set_str __gmpz_set_str -__GMP_DECLSPEC int mpz_set_str __GMP_PROTO ((mpz_ptr, __gmp_const char *, int)); - -#define mpz_set_ui __gmpz_set_ui -__GMP_DECLSPEC void mpz_set_ui __GMP_PROTO ((mpz_ptr, unsigned long int)); - -#define mpz_setbit __gmpz_setbit -__GMP_DECLSPEC void mpz_setbit __GMP_PROTO ((mpz_ptr, mp_bitcnt_t)); - -#define mpz_size __gmpz_size -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_size) -__GMP_DECLSPEC size_t mpz_size __GMP_PROTO ((mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; -#endif - -#define mpz_sizeinbase __gmpz_sizeinbase -__GMP_DECLSPEC size_t mpz_sizeinbase __GMP_PROTO ((mpz_srcptr, int)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_sqrt __gmpz_sqrt -__GMP_DECLSPEC void mpz_sqrt __GMP_PROTO ((mpz_ptr, mpz_srcptr)); - -#define mpz_sqrtrem __gmpz_sqrtrem -__GMP_DECLSPEC void mpz_sqrtrem __GMP_PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr)); - -#define mpz_sub __gmpz_sub -__GMP_DECLSPEC void mpz_sub __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_sub_ui __gmpz_sub_ui -__GMP_DECLSPEC void mpz_sub_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_ui_sub __gmpz_ui_sub -__GMP_DECLSPEC void mpz_ui_sub __GMP_PROTO ((mpz_ptr, unsigned long int, mpz_srcptr)); - -#define mpz_submul __gmpz_submul -__GMP_DECLSPEC void mpz_submul __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_submul_ui __gmpz_submul_ui -__GMP_DECLSPEC void mpz_submul_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_swap __gmpz_swap -__GMP_DECLSPEC void mpz_swap __GMP_PROTO ((mpz_ptr, mpz_ptr)) __GMP_NOTHROW; - -#define mpz_tdiv_ui __gmpz_tdiv_ui -__GMP_DECLSPEC unsigned long int mpz_tdiv_ui __GMP_PROTO ((mpz_srcptr, unsigned long int)) __GMP_ATTRIBUTE_PURE; - -#define mpz_tdiv_q __gmpz_tdiv_q -__GMP_DECLSPEC void mpz_tdiv_q __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_tdiv_q_2exp __gmpz_tdiv_q_2exp -__GMP_DECLSPEC void mpz_tdiv_q_2exp __GMP_PROTO ((mpz_ptr, mpz_srcptr, mp_bitcnt_t)); - -#define mpz_tdiv_q_ui __gmpz_tdiv_q_ui -__GMP_DECLSPEC unsigned long int mpz_tdiv_q_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_tdiv_qr __gmpz_tdiv_qr -__GMP_DECLSPEC void mpz_tdiv_qr __GMP_PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_tdiv_qr_ui __gmpz_tdiv_qr_ui -__GMP_DECLSPEC unsigned long int mpz_tdiv_qr_ui __GMP_PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_tdiv_r __gmpz_tdiv_r -__GMP_DECLSPEC void mpz_tdiv_r __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_tdiv_r_2exp __gmpz_tdiv_r_2exp -__GMP_DECLSPEC void mpz_tdiv_r_2exp __GMP_PROTO ((mpz_ptr, mpz_srcptr, mp_bitcnt_t)); - -#define mpz_tdiv_r_ui __gmpz_tdiv_r_ui -__GMP_DECLSPEC unsigned long int mpz_tdiv_r_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_tstbit __gmpz_tstbit -__GMP_DECLSPEC int mpz_tstbit __GMP_PROTO ((mpz_srcptr, mp_bitcnt_t)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_ui_pow_ui __gmpz_ui_pow_ui -__GMP_DECLSPEC void mpz_ui_pow_ui __GMP_PROTO ((mpz_ptr, unsigned long int, unsigned long int)); - -#define mpz_urandomb __gmpz_urandomb -__GMP_DECLSPEC void mpz_urandomb __GMP_PROTO ((mpz_ptr, gmp_randstate_t, mp_bitcnt_t)); - -#define mpz_urandomm __gmpz_urandomm -__GMP_DECLSPEC void mpz_urandomm __GMP_PROTO ((mpz_ptr, gmp_randstate_t, mpz_srcptr)); - -#define mpz_xor __gmpz_xor -#define mpz_eor __gmpz_xor -__GMP_DECLSPEC void mpz_xor __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - - -/**************** Rational (i.e. Q) routines. ****************/ - -#define mpq_abs __gmpq_abs -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpq_abs) -__GMP_DECLSPEC void mpq_abs __GMP_PROTO ((mpq_ptr, mpq_srcptr)); -#endif - -#define mpq_add __gmpq_add -__GMP_DECLSPEC void mpq_add __GMP_PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr)); - -#define mpq_canonicalize __gmpq_canonicalize -__GMP_DECLSPEC void mpq_canonicalize __GMP_PROTO ((mpq_ptr)); - -#define mpq_clear __gmpq_clear -__GMP_DECLSPEC void mpq_clear __GMP_PROTO ((mpq_ptr)); - -#define mpq_clears __gmpq_clears -__GMP_DECLSPEC void mpq_clears __GMP_PROTO ((mpq_ptr, ...)); - -#define mpq_cmp __gmpq_cmp -__GMP_DECLSPEC int mpq_cmp __GMP_PROTO ((mpq_srcptr, mpq_srcptr)) __GMP_ATTRIBUTE_PURE; - -#define _mpq_cmp_si __gmpq_cmp_si -__GMP_DECLSPEC int _mpq_cmp_si __GMP_PROTO ((mpq_srcptr, long, unsigned long)) __GMP_ATTRIBUTE_PURE; - -#define _mpq_cmp_ui __gmpq_cmp_ui -__GMP_DECLSPEC int _mpq_cmp_ui __GMP_PROTO ((mpq_srcptr, unsigned long int, unsigned long int)) __GMP_ATTRIBUTE_PURE; - -#define mpq_div __gmpq_div -__GMP_DECLSPEC void mpq_div __GMP_PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr)); - -#define mpq_div_2exp __gmpq_div_2exp -__GMP_DECLSPEC void mpq_div_2exp __GMP_PROTO ((mpq_ptr, mpq_srcptr, mp_bitcnt_t)); - -#define mpq_equal __gmpq_equal -__GMP_DECLSPEC int mpq_equal __GMP_PROTO ((mpq_srcptr, mpq_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpq_get_num __gmpq_get_num -__GMP_DECLSPEC void mpq_get_num __GMP_PROTO ((mpz_ptr, mpq_srcptr)); - -#define mpq_get_den __gmpq_get_den -__GMP_DECLSPEC void mpq_get_den __GMP_PROTO ((mpz_ptr, mpq_srcptr)); - -#define mpq_get_d __gmpq_get_d -__GMP_DECLSPEC double mpq_get_d __GMP_PROTO ((mpq_srcptr)) __GMP_ATTRIBUTE_PURE; - -#define mpq_get_str __gmpq_get_str -__GMP_DECLSPEC char *mpq_get_str __GMP_PROTO ((char *, int, mpq_srcptr)); - -#define mpq_init __gmpq_init -__GMP_DECLSPEC void mpq_init __GMP_PROTO ((mpq_ptr)); - -#define mpq_inits __gmpq_inits -__GMP_DECLSPEC void mpq_inits __GMP_PROTO ((mpq_ptr, ...)); - -#define mpq_inp_str __gmpq_inp_str -#ifdef _GMP_H_HAVE_FILE -__GMP_DECLSPEC size_t mpq_inp_str __GMP_PROTO ((mpq_ptr, FILE *, int)); -#endif - -#define mpq_inv __gmpq_inv -__GMP_DECLSPEC void mpq_inv __GMP_PROTO ((mpq_ptr, mpq_srcptr)); - -#define mpq_mul __gmpq_mul -__GMP_DECLSPEC void mpq_mul __GMP_PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr)); - -#define mpq_mul_2exp __gmpq_mul_2exp -__GMP_DECLSPEC void mpq_mul_2exp __GMP_PROTO ((mpq_ptr, mpq_srcptr, mp_bitcnt_t)); - -#define mpq_neg __gmpq_neg -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpq_neg) -__GMP_DECLSPEC void mpq_neg __GMP_PROTO ((mpq_ptr, mpq_srcptr)); -#endif - -#define mpq_out_str __gmpq_out_str -#ifdef _GMP_H_HAVE_FILE -__GMP_DECLSPEC size_t mpq_out_str __GMP_PROTO ((FILE *, int, mpq_srcptr)); -#endif - -#define mpq_set __gmpq_set -__GMP_DECLSPEC void mpq_set __GMP_PROTO ((mpq_ptr, mpq_srcptr)); - -#define mpq_set_d __gmpq_set_d -__GMP_DECLSPEC void mpq_set_d __GMP_PROTO ((mpq_ptr, double)); - -#define mpq_set_den __gmpq_set_den -__GMP_DECLSPEC void mpq_set_den __GMP_PROTO ((mpq_ptr, mpz_srcptr)); - -#define mpq_set_f __gmpq_set_f -__GMP_DECLSPEC void mpq_set_f __GMP_PROTO ((mpq_ptr, mpf_srcptr)); - -#define mpq_set_num __gmpq_set_num -__GMP_DECLSPEC void mpq_set_num __GMP_PROTO ((mpq_ptr, mpz_srcptr)); - -#define mpq_set_si __gmpq_set_si -__GMP_DECLSPEC void mpq_set_si __GMP_PROTO ((mpq_ptr, signed long int, unsigned long int)); - -#define mpq_set_str __gmpq_set_str -__GMP_DECLSPEC int mpq_set_str __GMP_PROTO ((mpq_ptr, __gmp_const char *, int)); - -#define mpq_set_ui __gmpq_set_ui -__GMP_DECLSPEC void mpq_set_ui __GMP_PROTO ((mpq_ptr, unsigned long int, unsigned long int)); - -#define mpq_set_z __gmpq_set_z -__GMP_DECLSPEC void mpq_set_z __GMP_PROTO ((mpq_ptr, mpz_srcptr)); - -#define mpq_sub __gmpq_sub -__GMP_DECLSPEC void mpq_sub __GMP_PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr)); - -#define mpq_swap __gmpq_swap -__GMP_DECLSPEC void mpq_swap __GMP_PROTO ((mpq_ptr, mpq_ptr)) __GMP_NOTHROW; - - -/**************** Float (i.e. F) routines. ****************/ - -#define mpf_abs __gmpf_abs -__GMP_DECLSPEC void mpf_abs __GMP_PROTO ((mpf_ptr, mpf_srcptr)); - -#define mpf_add __gmpf_add -__GMP_DECLSPEC void mpf_add __GMP_PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr)); - -#define mpf_add_ui __gmpf_add_ui -__GMP_DECLSPEC void mpf_add_ui __GMP_PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); -#define mpf_ceil __gmpf_ceil -__GMP_DECLSPEC void mpf_ceil __GMP_PROTO ((mpf_ptr, mpf_srcptr)); - -#define mpf_clear __gmpf_clear -__GMP_DECLSPEC void mpf_clear __GMP_PROTO ((mpf_ptr)); - -#define mpf_clears __gmpf_clears -__GMP_DECLSPEC void mpf_clears __GMP_PROTO ((mpf_ptr, ...)); - -#define mpf_cmp __gmpf_cmp -__GMP_DECLSPEC int mpf_cmp __GMP_PROTO ((mpf_srcptr, mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_cmp_d __gmpf_cmp_d -__GMP_DECLSPEC int mpf_cmp_d __GMP_PROTO ((mpf_srcptr, double)) __GMP_ATTRIBUTE_PURE; - -#define mpf_cmp_si __gmpf_cmp_si -__GMP_DECLSPEC int mpf_cmp_si __GMP_PROTO ((mpf_srcptr, signed long int)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_cmp_ui __gmpf_cmp_ui -__GMP_DECLSPEC int mpf_cmp_ui __GMP_PROTO ((mpf_srcptr, unsigned long int)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_div __gmpf_div -__GMP_DECLSPEC void mpf_div __GMP_PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr)); - -#define mpf_div_2exp __gmpf_div_2exp -__GMP_DECLSPEC void mpf_div_2exp __GMP_PROTO ((mpf_ptr, mpf_srcptr, mp_bitcnt_t)); - -#define mpf_div_ui __gmpf_div_ui -__GMP_DECLSPEC void mpf_div_ui __GMP_PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); - -#define mpf_dump __gmpf_dump -__GMP_DECLSPEC void mpf_dump __GMP_PROTO ((mpf_srcptr)); - -#define mpf_eq __gmpf_eq -__GMP_DECLSPEC int mpf_eq __GMP_PROTO ((mpf_srcptr, mpf_srcptr, unsigned long int)) __GMP_ATTRIBUTE_PURE; - -#define mpf_fits_sint_p __gmpf_fits_sint_p -__GMP_DECLSPEC int mpf_fits_sint_p __GMP_PROTO ((mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_fits_slong_p __gmpf_fits_slong_p -__GMP_DECLSPEC int mpf_fits_slong_p __GMP_PROTO ((mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_fits_sshort_p __gmpf_fits_sshort_p -__GMP_DECLSPEC int mpf_fits_sshort_p __GMP_PROTO ((mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_fits_uint_p __gmpf_fits_uint_p -__GMP_DECLSPEC int mpf_fits_uint_p __GMP_PROTO ((mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_fits_ulong_p __gmpf_fits_ulong_p -__GMP_DECLSPEC int mpf_fits_ulong_p __GMP_PROTO ((mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_fits_ushort_p __gmpf_fits_ushort_p -__GMP_DECLSPEC int mpf_fits_ushort_p __GMP_PROTO ((mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_floor __gmpf_floor -__GMP_DECLSPEC void mpf_floor __GMP_PROTO ((mpf_ptr, mpf_srcptr)); - -#define mpf_get_d __gmpf_get_d -__GMP_DECLSPEC double mpf_get_d __GMP_PROTO ((mpf_srcptr)) __GMP_ATTRIBUTE_PURE; - -#define mpf_get_d_2exp __gmpf_get_d_2exp -__GMP_DECLSPEC double mpf_get_d_2exp __GMP_PROTO ((signed long int *, mpf_srcptr)); - -#define mpf_get_default_prec __gmpf_get_default_prec -__GMP_DECLSPEC mp_bitcnt_t mpf_get_default_prec __GMP_PROTO ((void)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_get_prec __gmpf_get_prec -__GMP_DECLSPEC mp_bitcnt_t mpf_get_prec __GMP_PROTO ((mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_get_si __gmpf_get_si -__GMP_DECLSPEC long mpf_get_si __GMP_PROTO ((mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_get_str __gmpf_get_str -__GMP_DECLSPEC char *mpf_get_str __GMP_PROTO ((char *, mp_exp_t *, int, size_t, mpf_srcptr)); - -#define mpf_get_ui __gmpf_get_ui -__GMP_DECLSPEC unsigned long mpf_get_ui __GMP_PROTO ((mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_init __gmpf_init -__GMP_DECLSPEC void mpf_init __GMP_PROTO ((mpf_ptr)); - -#define mpf_init2 __gmpf_init2 -__GMP_DECLSPEC void mpf_init2 __GMP_PROTO ((mpf_ptr, mp_bitcnt_t)); - -#define mpf_inits __gmpf_inits -__GMP_DECLSPEC void mpf_inits __GMP_PROTO ((mpf_ptr, ...)); - -#define mpf_init_set __gmpf_init_set -__GMP_DECLSPEC void mpf_init_set __GMP_PROTO ((mpf_ptr, mpf_srcptr)); - -#define mpf_init_set_d __gmpf_init_set_d -__GMP_DECLSPEC void mpf_init_set_d __GMP_PROTO ((mpf_ptr, double)); - -#define mpf_init_set_si __gmpf_init_set_si -__GMP_DECLSPEC void mpf_init_set_si __GMP_PROTO ((mpf_ptr, signed long int)); - -#define mpf_init_set_str __gmpf_init_set_str -__GMP_DECLSPEC int mpf_init_set_str __GMP_PROTO ((mpf_ptr, __gmp_const char *, int)); - -#define mpf_init_set_ui __gmpf_init_set_ui -__GMP_DECLSPEC void mpf_init_set_ui __GMP_PROTO ((mpf_ptr, unsigned long int)); - -#define mpf_inp_str __gmpf_inp_str -#ifdef _GMP_H_HAVE_FILE -__GMP_DECLSPEC size_t mpf_inp_str __GMP_PROTO ((mpf_ptr, FILE *, int)); -#endif - -#define mpf_integer_p __gmpf_integer_p -__GMP_DECLSPEC int mpf_integer_p __GMP_PROTO ((mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_mul __gmpf_mul -__GMP_DECLSPEC void mpf_mul __GMP_PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr)); - -#define mpf_mul_2exp __gmpf_mul_2exp -__GMP_DECLSPEC void mpf_mul_2exp __GMP_PROTO ((mpf_ptr, mpf_srcptr, mp_bitcnt_t)); - -#define mpf_mul_ui __gmpf_mul_ui -__GMP_DECLSPEC void mpf_mul_ui __GMP_PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); - -#define mpf_neg __gmpf_neg -__GMP_DECLSPEC void mpf_neg __GMP_PROTO ((mpf_ptr, mpf_srcptr)); - -#define mpf_out_str __gmpf_out_str -#ifdef _GMP_H_HAVE_FILE -__GMP_DECLSPEC size_t mpf_out_str __GMP_PROTO ((FILE *, int, size_t, mpf_srcptr)); -#endif - -#define mpf_pow_ui __gmpf_pow_ui -__GMP_DECLSPEC void mpf_pow_ui __GMP_PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); - -#define mpf_random2 __gmpf_random2 -__GMP_DECLSPEC void mpf_random2 __GMP_PROTO ((mpf_ptr, mp_size_t, mp_exp_t)); - -#define mpf_reldiff __gmpf_reldiff -__GMP_DECLSPEC void mpf_reldiff __GMP_PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr)); - -#define mpf_set __gmpf_set -__GMP_DECLSPEC void mpf_set __GMP_PROTO ((mpf_ptr, mpf_srcptr)); - -#define mpf_set_d __gmpf_set_d -__GMP_DECLSPEC void mpf_set_d __GMP_PROTO ((mpf_ptr, double)); - -#define mpf_set_default_prec __gmpf_set_default_prec -__GMP_DECLSPEC void mpf_set_default_prec __GMP_PROTO ((mp_bitcnt_t)) __GMP_NOTHROW; - -#define mpf_set_prec __gmpf_set_prec -__GMP_DECLSPEC void mpf_set_prec __GMP_PROTO ((mpf_ptr, mp_bitcnt_t)); - -#define mpf_set_prec_raw __gmpf_set_prec_raw -__GMP_DECLSPEC void mpf_set_prec_raw __GMP_PROTO ((mpf_ptr, mp_bitcnt_t)) __GMP_NOTHROW; - -#define mpf_set_q __gmpf_set_q -__GMP_DECLSPEC void mpf_set_q __GMP_PROTO ((mpf_ptr, mpq_srcptr)); - -#define mpf_set_si __gmpf_set_si -__GMP_DECLSPEC void mpf_set_si __GMP_PROTO ((mpf_ptr, signed long int)); - -#define mpf_set_str __gmpf_set_str -__GMP_DECLSPEC int mpf_set_str __GMP_PROTO ((mpf_ptr, __gmp_const char *, int)); - -#define mpf_set_ui __gmpf_set_ui -__GMP_DECLSPEC void mpf_set_ui __GMP_PROTO ((mpf_ptr, unsigned long int)); - -#define mpf_set_z __gmpf_set_z -__GMP_DECLSPEC void mpf_set_z __GMP_PROTO ((mpf_ptr, mpz_srcptr)); - -#define mpf_size __gmpf_size -__GMP_DECLSPEC size_t mpf_size __GMP_PROTO ((mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_sqrt __gmpf_sqrt -__GMP_DECLSPEC void mpf_sqrt __GMP_PROTO ((mpf_ptr, mpf_srcptr)); - -#define mpf_sqrt_ui __gmpf_sqrt_ui -__GMP_DECLSPEC void mpf_sqrt_ui __GMP_PROTO ((mpf_ptr, unsigned long int)); - -#define mpf_sub __gmpf_sub -__GMP_DECLSPEC void mpf_sub __GMP_PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr)); - -#define mpf_sub_ui __gmpf_sub_ui -__GMP_DECLSPEC void mpf_sub_ui __GMP_PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); - -#define mpf_swap __gmpf_swap -__GMP_DECLSPEC void mpf_swap __GMP_PROTO ((mpf_ptr, mpf_ptr)) __GMP_NOTHROW; - -#define mpf_trunc __gmpf_trunc -__GMP_DECLSPEC void mpf_trunc __GMP_PROTO ((mpf_ptr, mpf_srcptr)); - -#define mpf_ui_div __gmpf_ui_div -__GMP_DECLSPEC void mpf_ui_div __GMP_PROTO ((mpf_ptr, unsigned long int, mpf_srcptr)); - -#define mpf_ui_sub __gmpf_ui_sub -__GMP_DECLSPEC void mpf_ui_sub __GMP_PROTO ((mpf_ptr, unsigned long int, mpf_srcptr)); - -#define mpf_urandomb __gmpf_urandomb -__GMP_DECLSPEC void mpf_urandomb __GMP_PROTO ((mpf_t, gmp_randstate_t, mp_bitcnt_t)); - - -/************ Low level positive-integer (i.e. N) routines. ************/ - -/* This is ugly, but we need to make user calls reach the prefixed function. */ - -#define mpn_add __MPN(add) -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_add) -__GMP_DECLSPEC mp_limb_t mpn_add __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr,mp_size_t)); -#endif - -#define mpn_add_1 __MPN(add_1) -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_add_1) -__GMP_DECLSPEC mp_limb_t mpn_add_1 __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)) __GMP_NOTHROW; -#endif - -#define mpn_add_n __MPN(add_n) -__GMP_DECLSPEC mp_limb_t mpn_add_n __GMP_PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); - -#define mpn_addmul_1 __MPN(addmul_1) -__GMP_DECLSPEC mp_limb_t mpn_addmul_1 __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); - -#define mpn_cmp __MPN(cmp) -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_cmp) -__GMP_DECLSPEC int mpn_cmp __GMP_PROTO ((mp_srcptr, mp_srcptr, mp_size_t)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; -#endif - -#define mpn_divexact_by3(dst,src,size) \ - mpn_divexact_by3c (dst, src, size, __GMP_CAST (mp_limb_t, 0)) - -#define mpn_divexact_by3c __MPN(divexact_by3c) -__GMP_DECLSPEC mp_limb_t mpn_divexact_by3c __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); - -#define mpn_divmod_1(qp,np,nsize,dlimb) \ - mpn_divrem_1 (qp, __GMP_CAST (mp_size_t, 0), np, nsize, dlimb) - -#define mpn_divrem __MPN(divrem) -__GMP_DECLSPEC mp_limb_t mpn_divrem __GMP_PROTO ((mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr, mp_size_t)); - -#define mpn_divrem_1 __MPN(divrem_1) -__GMP_DECLSPEC mp_limb_t mpn_divrem_1 __GMP_PROTO ((mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t)); - -#define mpn_divrem_2 __MPN(divrem_2) -__GMP_DECLSPEC mp_limb_t mpn_divrem_2 __GMP_PROTO ((mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr)); - -#define mpn_gcd __MPN(gcd) -__GMP_DECLSPEC mp_size_t mpn_gcd __GMP_PROTO ((mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t)); - -#define mpn_gcd_1 __MPN(gcd_1) -__GMP_DECLSPEC mp_limb_t mpn_gcd_1 __GMP_PROTO ((mp_srcptr, mp_size_t, mp_limb_t)) __GMP_ATTRIBUTE_PURE; - -#define mpn_gcdext_1 __MPN(gcdext_1) -__GMP_DECLSPEC mp_limb_t mpn_gcdext_1 __GMP_PROTO ((mp_limb_signed_t *, mp_limb_signed_t *, mp_limb_t, mp_limb_t)); - -#define mpn_gcdext __MPN(gcdext) -__GMP_DECLSPEC mp_size_t mpn_gcdext __GMP_PROTO ((mp_ptr, mp_ptr, mp_size_t *, mp_ptr, mp_size_t, mp_ptr, mp_size_t)); - -#define mpn_get_str __MPN(get_str) -__GMP_DECLSPEC size_t mpn_get_str __GMP_PROTO ((unsigned char *, int, mp_ptr, mp_size_t)); - -#define mpn_hamdist __MPN(hamdist) -__GMP_DECLSPEC mp_bitcnt_t mpn_hamdist __GMP_PROTO ((mp_srcptr, mp_srcptr, mp_size_t)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpn_lshift __MPN(lshift) -__GMP_DECLSPEC mp_limb_t mpn_lshift __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, unsigned int)); - -#define mpn_mod_1 __MPN(mod_1) -__GMP_DECLSPEC mp_limb_t mpn_mod_1 __GMP_PROTO ((mp_srcptr, mp_size_t, mp_limb_t)) __GMP_ATTRIBUTE_PURE; - -#define mpn_mul __MPN(mul) -__GMP_DECLSPEC mp_limb_t mpn_mul __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t)); - -#define mpn_mul_1 __MPN(mul_1) -__GMP_DECLSPEC mp_limb_t mpn_mul_1 __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); - -#define mpn_mul_n __MPN(mul_n) -__GMP_DECLSPEC void mpn_mul_n __GMP_PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); - -#define mpn_sqr __MPN(sqr) -__GMP_DECLSPEC void mpn_sqr __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t)); - -#define mpn_neg __MPN(neg) -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_neg) -__GMP_DECLSPEC mp_limb_t mpn_neg __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t)); -#endif - -#define mpn_com __MPN(com) -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_com) -__GMP_DECLSPEC void mpn_com __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t)); -#endif - -#define mpn_perfect_square_p __MPN(perfect_square_p) -__GMP_DECLSPEC int mpn_perfect_square_p __GMP_PROTO ((mp_srcptr, mp_size_t)) __GMP_ATTRIBUTE_PURE; - -#define mpn_perfect_power_p __MPN(perfect_power_p) -__GMP_DECLSPEC int mpn_perfect_power_p __GMP_PROTO ((mp_srcptr, mp_size_t)) __GMP_ATTRIBUTE_PURE; - -#define mpn_popcount __MPN(popcount) -__GMP_DECLSPEC mp_bitcnt_t mpn_popcount __GMP_PROTO ((mp_srcptr, mp_size_t)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpn_pow_1 __MPN(pow_1) -__GMP_DECLSPEC mp_size_t mpn_pow_1 __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_ptr)); - -/* undocumented now, but retained here for upward compatibility */ -#define mpn_preinv_mod_1 __MPN(preinv_mod_1) -__GMP_DECLSPEC mp_limb_t mpn_preinv_mod_1 __GMP_PROTO ((mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t)) __GMP_ATTRIBUTE_PURE; - -#define mpn_random __MPN(random) -__GMP_DECLSPEC void mpn_random __GMP_PROTO ((mp_ptr, mp_size_t)); - -#define mpn_random2 __MPN(random2) -__GMP_DECLSPEC void mpn_random2 __GMP_PROTO ((mp_ptr, mp_size_t)); - -#define mpn_rshift __MPN(rshift) -__GMP_DECLSPEC mp_limb_t mpn_rshift __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, unsigned int)); - -#define mpn_scan0 __MPN(scan0) -__GMP_DECLSPEC mp_bitcnt_t mpn_scan0 __GMP_PROTO ((mp_srcptr, mp_bitcnt_t)) __GMP_ATTRIBUTE_PURE; - -#define mpn_scan1 __MPN(scan1) -__GMP_DECLSPEC mp_bitcnt_t mpn_scan1 __GMP_PROTO ((mp_srcptr, mp_bitcnt_t)) __GMP_ATTRIBUTE_PURE; - -#define mpn_set_str __MPN(set_str) -__GMP_DECLSPEC mp_size_t mpn_set_str __GMP_PROTO ((mp_ptr, __gmp_const unsigned char *, size_t, int)); - -#define mpn_sqrtrem __MPN(sqrtrem) -__GMP_DECLSPEC mp_size_t mpn_sqrtrem __GMP_PROTO ((mp_ptr, mp_ptr, mp_srcptr, mp_size_t)); - -#define mpn_sub __MPN(sub) -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_sub) -__GMP_DECLSPEC mp_limb_t mpn_sub __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr,mp_size_t)); -#endif - -#define mpn_sub_1 __MPN(sub_1) -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_sub_1) -__GMP_DECLSPEC mp_limb_t mpn_sub_1 __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)) __GMP_NOTHROW; -#endif - -#define mpn_sub_n __MPN(sub_n) -__GMP_DECLSPEC mp_limb_t mpn_sub_n __GMP_PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); - -#define mpn_submul_1 __MPN(submul_1) -__GMP_DECLSPEC mp_limb_t mpn_submul_1 __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); - -#define mpn_tdiv_qr __MPN(tdiv_qr) -__GMP_DECLSPEC void mpn_tdiv_qr __GMP_PROTO ((mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t)); - -#define mpn_and_n __MPN(and_n) -__GMP_DECLSPEC void mpn_and_n __GMP_PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); -#define mpn_andn_n __MPN(andn_n) -__GMP_DECLSPEC void mpn_andn_n __GMP_PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); -#define mpn_nand_n __MPN(nand_n) -__GMP_DECLSPEC void mpn_nand_n __GMP_PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); -#define mpn_ior_n __MPN(ior_n) -__GMP_DECLSPEC void mpn_ior_n __GMP_PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); -#define mpn_iorn_n __MPN(iorn_n) -__GMP_DECLSPEC void mpn_iorn_n __GMP_PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); -#define mpn_nior_n __MPN(nior_n) -__GMP_DECLSPEC void mpn_nior_n __GMP_PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); -#define mpn_xor_n __MPN(xor_n) -__GMP_DECLSPEC void mpn_xor_n __GMP_PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); -#define mpn_xnor_n __MPN(xnor_n) -__GMP_DECLSPEC void mpn_xnor_n __GMP_PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); - -#define mpn_copyi __MPN(copyi) -__GMP_DECLSPEC void mpn_copyi __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t)); -#define mpn_copyd __MPN(copyd) -__GMP_DECLSPEC void mpn_copyd __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t)); -#define mpn_zero __MPN(zero) -__GMP_DECLSPEC void mpn_zero __GMP_PROTO ((mp_ptr, mp_size_t)); - -/**************** mpz inlines ****************/ - -/* The following are provided as inlines where possible, but always exist as - library functions too, for binary compatibility. - - Within gmp itself this inlining generally isn't relied on, since it - doesn't get done for all compilers, whereas if something is worth - inlining then it's worth arranging always. - - There are two styles of inlining here. When the same bit of code is - wanted for the inline as for the library version, then __GMP_FORCE_foo - arranges for that code to be emitted and the __GMP_EXTERN_INLINE - directive suppressed, eg. mpz_fits_uint_p. When a different bit of code - is wanted for the inline than for the library version, then - __GMP_FORCE_foo arranges the inline to be suppressed, eg. mpz_abs. */ - -#if defined (__GMP_EXTERN_INLINE) && ! defined (__GMP_FORCE_mpz_abs) -__GMP_EXTERN_INLINE void -mpz_abs (mpz_ptr __gmp_w, mpz_srcptr __gmp_u) -{ - if (__gmp_w != __gmp_u) - mpz_set (__gmp_w, __gmp_u); - __gmp_w->_mp_size = __GMP_ABS (__gmp_w->_mp_size); -} -#endif - -#if GMP_NAIL_BITS == 0 -#define __GMPZ_FITS_UTYPE_P(z,maxval) \ - mp_size_t __gmp_n = z->_mp_size; \ - mp_ptr __gmp_p = z->_mp_d; \ - return (__gmp_n == 0 || (__gmp_n == 1 && __gmp_p[0] <= maxval)); -#else -#define __GMPZ_FITS_UTYPE_P(z,maxval) \ - mp_size_t __gmp_n = z->_mp_size; \ - mp_ptr __gmp_p = z->_mp_d; \ - return (__gmp_n == 0 || (__gmp_n == 1 && __gmp_p[0] <= maxval) \ - || (__gmp_n == 2 && __gmp_p[1] <= ((mp_limb_t) maxval >> GMP_NUMB_BITS))); -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_fits_uint_p) -#if ! defined (__GMP_FORCE_mpz_fits_uint_p) -__GMP_EXTERN_INLINE -#endif -int -mpz_fits_uint_p (mpz_srcptr __gmp_z) __GMP_NOTHROW -{ - __GMPZ_FITS_UTYPE_P (__gmp_z, __GMP_UINT_MAX); -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_fits_ulong_p) -#if ! defined (__GMP_FORCE_mpz_fits_ulong_p) -__GMP_EXTERN_INLINE -#endif -int -mpz_fits_ulong_p (mpz_srcptr __gmp_z) __GMP_NOTHROW -{ - __GMPZ_FITS_UTYPE_P (__gmp_z, __GMP_ULONG_MAX); -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_fits_ushort_p) -#if ! defined (__GMP_FORCE_mpz_fits_ushort_p) -__GMP_EXTERN_INLINE -#endif -int -mpz_fits_ushort_p (mpz_srcptr __gmp_z) __GMP_NOTHROW -{ - __GMPZ_FITS_UTYPE_P (__gmp_z, __GMP_USHRT_MAX); -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_get_ui) -#if ! defined (__GMP_FORCE_mpz_get_ui) -__GMP_EXTERN_INLINE -#endif -unsigned long -mpz_get_ui (mpz_srcptr __gmp_z) __GMP_NOTHROW -{ - mp_ptr __gmp_p = __gmp_z->_mp_d; - mp_size_t __gmp_n = __gmp_z->_mp_size; - mp_limb_t __gmp_l = __gmp_p[0]; - /* This is a "#if" rather than a plain "if" so as to avoid gcc warnings - about "<< GMP_NUMB_BITS" exceeding the type size, and to avoid Borland - C++ 6.0 warnings about condition always true for something like - "__GMP_ULONG_MAX < GMP_NUMB_MASK". */ -#if GMP_NAIL_BITS == 0 || defined (_LONG_LONG_LIMB) - /* limb==long and no nails, or limb==longlong, one limb is enough */ - return (__gmp_n != 0 ? __gmp_l : 0); -#else - /* limb==long and nails, need two limbs when available */ - __gmp_n = __GMP_ABS (__gmp_n); - if (__gmp_n <= 1) - return (__gmp_n != 0 ? __gmp_l : 0); - else - return __gmp_l + (__gmp_p[1] << GMP_NUMB_BITS); -#endif -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_getlimbn) -#if ! defined (__GMP_FORCE_mpz_getlimbn) -__GMP_EXTERN_INLINE -#endif -mp_limb_t -mpz_getlimbn (mpz_srcptr __gmp_z, mp_size_t __gmp_n) __GMP_NOTHROW -{ - mp_limb_t __gmp_result = 0; - if (__GMP_LIKELY (__gmp_n >= 0 && __gmp_n < __GMP_ABS (__gmp_z->_mp_size))) - __gmp_result = __gmp_z->_mp_d[__gmp_n]; - return __gmp_result; -} -#endif - -#if defined (__GMP_EXTERN_INLINE) && ! defined (__GMP_FORCE_mpz_neg) -__GMP_EXTERN_INLINE void -mpz_neg (mpz_ptr __gmp_w, mpz_srcptr __gmp_u) -{ - if (__gmp_w != __gmp_u) - mpz_set (__gmp_w, __gmp_u); - __gmp_w->_mp_size = - __gmp_w->_mp_size; -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_perfect_square_p) -#if ! defined (__GMP_FORCE_mpz_perfect_square_p) -__GMP_EXTERN_INLINE -#endif -int -mpz_perfect_square_p (mpz_srcptr __gmp_a) -{ - mp_size_t __gmp_asize; - int __gmp_result; - - __gmp_asize = __gmp_a->_mp_size; - __gmp_result = (__gmp_asize >= 0); /* zero is a square, negatives are not */ - if (__GMP_LIKELY (__gmp_asize > 0)) - __gmp_result = mpn_perfect_square_p (__gmp_a->_mp_d, __gmp_asize); - return __gmp_result; -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_popcount) -#if ! defined (__GMP_FORCE_mpz_popcount) -__GMP_EXTERN_INLINE -#endif -mp_bitcnt_t -mpz_popcount (mpz_srcptr __gmp_u) __GMP_NOTHROW -{ - mp_size_t __gmp_usize; - mp_bitcnt_t __gmp_result; - - __gmp_usize = __gmp_u->_mp_size; - __gmp_result = (__gmp_usize < 0 ? __GMP_ULONG_MAX : 0); - if (__GMP_LIKELY (__gmp_usize > 0)) - __gmp_result = mpn_popcount (__gmp_u->_mp_d, __gmp_usize); - return __gmp_result; -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_set_q) -#if ! defined (__GMP_FORCE_mpz_set_q) -__GMP_EXTERN_INLINE -#endif -void -mpz_set_q (mpz_ptr __gmp_w, mpq_srcptr __gmp_u) -{ - mpz_tdiv_q (__gmp_w, mpq_numref (__gmp_u), mpq_denref (__gmp_u)); -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_size) -#if ! defined (__GMP_FORCE_mpz_size) -__GMP_EXTERN_INLINE -#endif -size_t -mpz_size (mpz_srcptr __gmp_z) __GMP_NOTHROW -{ - return __GMP_ABS (__gmp_z->_mp_size); -} -#endif - - -/**************** mpq inlines ****************/ - -#if defined (__GMP_EXTERN_INLINE) && ! defined (__GMP_FORCE_mpq_abs) -__GMP_EXTERN_INLINE void -mpq_abs (mpq_ptr __gmp_w, mpq_srcptr __gmp_u) -{ - if (__gmp_w != __gmp_u) - mpq_set (__gmp_w, __gmp_u); - __gmp_w->_mp_num._mp_size = __GMP_ABS (__gmp_w->_mp_num._mp_size); -} -#endif - -#if defined (__GMP_EXTERN_INLINE) && ! defined (__GMP_FORCE_mpq_neg) -__GMP_EXTERN_INLINE void -mpq_neg (mpq_ptr __gmp_w, mpq_srcptr __gmp_u) -{ - if (__gmp_w != __gmp_u) - mpq_set (__gmp_w, __gmp_u); - __gmp_w->_mp_num._mp_size = - __gmp_w->_mp_num._mp_size; -} -#endif - - -/**************** mpn inlines ****************/ - -/* The comments with __GMPN_ADD_1 below apply here too. - - The test for FUNCTION returning 0 should predict well. If it's assumed - {yp,ysize} will usually have a random number of bits then the high limb - won't be full and a carry out will occur a good deal less than 50% of the - time. - - ysize==0 isn't a documented feature, but is used internally in a few - places. - - Producing cout last stops it using up a register during the main part of - the calculation, though gcc (as of 3.0) on an "if (mpn_add (...))" - doesn't seem able to move the true and false legs of the conditional up - to the two places cout is generated. */ - -#define __GMPN_AORS(cout, wp, xp, xsize, yp, ysize, FUNCTION, TEST) \ - do { \ - mp_size_t __gmp_i; \ - mp_limb_t __gmp_x; \ - \ - /* ASSERT ((ysize) >= 0); */ \ - /* ASSERT ((xsize) >= (ysize)); */ \ - /* ASSERT (MPN_SAME_OR_SEPARATE2_P (wp, xsize, xp, xsize)); */ \ - /* ASSERT (MPN_SAME_OR_SEPARATE2_P (wp, xsize, yp, ysize)); */ \ - \ - __gmp_i = (ysize); \ - if (__gmp_i != 0) \ - { \ - if (FUNCTION (wp, xp, yp, __gmp_i)) \ - { \ - do \ - { \ - if (__gmp_i >= (xsize)) \ - { \ - (cout) = 1; \ - goto __gmp_done; \ - } \ - __gmp_x = (xp)[__gmp_i]; \ - } \ - while (TEST); \ - } \ - } \ - if ((wp) != (xp)) \ - __GMPN_COPY_REST (wp, xp, xsize, __gmp_i); \ - (cout) = 0; \ - __gmp_done: \ - ; \ - } while (0) - -#define __GMPN_ADD(cout, wp, xp, xsize, yp, ysize) \ - __GMPN_AORS (cout, wp, xp, xsize, yp, ysize, mpn_add_n, \ - (((wp)[__gmp_i++] = (__gmp_x + 1) & GMP_NUMB_MASK) == 0)) -#define __GMPN_SUB(cout, wp, xp, xsize, yp, ysize) \ - __GMPN_AORS (cout, wp, xp, xsize, yp, ysize, mpn_sub_n, \ - (((wp)[__gmp_i++] = (__gmp_x - 1) & GMP_NUMB_MASK), __gmp_x == 0)) - - -/* The use of __gmp_i indexing is designed to ensure a compile time src==dst - remains nice and clear to the compiler, so that __GMPN_COPY_REST can - disappear, and the load/add/store gets a chance to become a - read-modify-write on CISC CPUs. - - Alternatives: - - Using a pair of pointers instead of indexing would be possible, but gcc - isn't able to recognise compile-time src==dst in that case, even when the - pointers are incremented more or less together. Other compilers would - very likely have similar difficulty. - - gcc could use "if (__builtin_constant_p(src==dst) && src==dst)" or - similar to detect a compile-time src==dst. This works nicely on gcc - 2.95.x, it's not good on gcc 3.0 where __builtin_constant_p(p==p) seems - to be always false, for a pointer p. But the current code form seems - good enough for src==dst anyway. - - gcc on x86 as usual doesn't give particularly good flags handling for the - carry/borrow detection. It's tempting to want some multi instruction asm - blocks to help it, and this was tried, but in truth there's only a few - instructions to save and any gain is all too easily lost by register - juggling setting up for the asm. */ - -#if GMP_NAIL_BITS == 0 -#define __GMPN_AORS_1(cout, dst, src, n, v, OP, CB) \ - do { \ - mp_size_t __gmp_i; \ - mp_limb_t __gmp_x, __gmp_r; \ - \ - /* ASSERT ((n) >= 1); */ \ - /* ASSERT (MPN_SAME_OR_SEPARATE_P (dst, src, n)); */ \ - \ - __gmp_x = (src)[0]; \ - __gmp_r = __gmp_x OP (v); \ - (dst)[0] = __gmp_r; \ - if (CB (__gmp_r, __gmp_x, (v))) \ - { \ - (cout) = 1; \ - for (__gmp_i = 1; __gmp_i < (n);) \ - { \ - __gmp_x = (src)[__gmp_i]; \ - __gmp_r = __gmp_x OP 1; \ - (dst)[__gmp_i] = __gmp_r; \ - ++__gmp_i; \ - if (!CB (__gmp_r, __gmp_x, 1)) \ - { \ - if ((src) != (dst)) \ - __GMPN_COPY_REST (dst, src, n, __gmp_i); \ - (cout) = 0; \ - break; \ - } \ - } \ - } \ - else \ - { \ - if ((src) != (dst)) \ - __GMPN_COPY_REST (dst, src, n, 1); \ - (cout) = 0; \ - } \ - } while (0) -#endif - -#if GMP_NAIL_BITS >= 1 -#define __GMPN_AORS_1(cout, dst, src, n, v, OP, CB) \ - do { \ - mp_size_t __gmp_i; \ - mp_limb_t __gmp_x, __gmp_r; \ - \ - /* ASSERT ((n) >= 1); */ \ - /* ASSERT (MPN_SAME_OR_SEPARATE_P (dst, src, n)); */ \ - \ - __gmp_x = (src)[0]; \ - __gmp_r = __gmp_x OP (v); \ - (dst)[0] = __gmp_r & GMP_NUMB_MASK; \ - if (__gmp_r >> GMP_NUMB_BITS != 0) \ - { \ - (cout) = 1; \ - for (__gmp_i = 1; __gmp_i < (n);) \ - { \ - __gmp_x = (src)[__gmp_i]; \ - __gmp_r = __gmp_x OP 1; \ - (dst)[__gmp_i] = __gmp_r & GMP_NUMB_MASK; \ - ++__gmp_i; \ - if (__gmp_r >> GMP_NUMB_BITS == 0) \ - { \ - if ((src) != (dst)) \ - __GMPN_COPY_REST (dst, src, n, __gmp_i); \ - (cout) = 0; \ - break; \ - } \ - } \ - } \ - else \ - { \ - if ((src) != (dst)) \ - __GMPN_COPY_REST (dst, src, n, 1); \ - (cout) = 0; \ - } \ - } while (0) -#endif - -#define __GMPN_ADDCB(r,x,y) ((r) < (y)) -#define __GMPN_SUBCB(r,x,y) ((x) < (y)) - -#define __GMPN_ADD_1(cout, dst, src, n, v) \ - __GMPN_AORS_1(cout, dst, src, n, v, +, __GMPN_ADDCB) -#define __GMPN_SUB_1(cout, dst, src, n, v) \ - __GMPN_AORS_1(cout, dst, src, n, v, -, __GMPN_SUBCB) - - -/* Compare {xp,size} and {yp,size}, setting "result" to positive, zero or - negative. size==0 is allowed. On random data usually only one limb will - need to be examined to get a result, so it's worth having it inline. */ -#define __GMPN_CMP(result, xp, yp, size) \ - do { \ - mp_size_t __gmp_i; \ - mp_limb_t __gmp_x, __gmp_y; \ - \ - /* ASSERT ((size) >= 0); */ \ - \ - (result) = 0; \ - __gmp_i = (size); \ - while (--__gmp_i >= 0) \ - { \ - __gmp_x = (xp)[__gmp_i]; \ - __gmp_y = (yp)[__gmp_i]; \ - if (__gmp_x != __gmp_y) \ - { \ - /* Cannot use __gmp_x - __gmp_y, may overflow an "int" */ \ - (result) = (__gmp_x > __gmp_y ? 1 : -1); \ - break; \ - } \ - } \ - } while (0) - - -#if defined (__GMPN_COPY) && ! defined (__GMPN_COPY_REST) -#define __GMPN_COPY_REST(dst, src, size, start) \ - do { \ - /* ASSERT ((start) >= 0); */ \ - /* ASSERT ((start) <= (size)); */ \ - __GMPN_COPY ((dst)+(start), (src)+(start), (size)-(start)); \ - } while (0) -#endif - -/* Copy {src,size} to {dst,size}, starting at "start". This is designed to - keep the indexing dst[j] and src[j] nice and simple for __GMPN_ADD_1, - __GMPN_ADD, etc. */ -#if ! defined (__GMPN_COPY_REST) -#define __GMPN_COPY_REST(dst, src, size, start) \ - do { \ - mp_size_t __gmp_j; \ - /* ASSERT ((size) >= 0); */ \ - /* ASSERT ((start) >= 0); */ \ - /* ASSERT ((start) <= (size)); */ \ - /* ASSERT (MPN_SAME_OR_SEPARATE_P (dst, src, size)); */ \ - __GMP_CRAY_Pragma ("_CRI ivdep"); \ - for (__gmp_j = (start); __gmp_j < (size); __gmp_j++) \ - (dst)[__gmp_j] = (src)[__gmp_j]; \ - } while (0) -#endif - -/* Enhancement: Use some of the smarter code from gmp-impl.h. Maybe use - mpn_copyi if there's a native version, and if we don't mind demanding - binary compatibility for it (on targets which use it). */ - -#if ! defined (__GMPN_COPY) -#define __GMPN_COPY(dst, src, size) __GMPN_COPY_REST (dst, src, size, 0) -#endif - - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_add) -#if ! defined (__GMP_FORCE_mpn_add) -__GMP_EXTERN_INLINE -#endif -mp_limb_t -mpn_add (mp_ptr __gmp_wp, mp_srcptr __gmp_xp, mp_size_t __gmp_xsize, mp_srcptr __gmp_yp, mp_size_t __gmp_ysize) -{ - mp_limb_t __gmp_c; - __GMPN_ADD (__gmp_c, __gmp_wp, __gmp_xp, __gmp_xsize, __gmp_yp, __gmp_ysize); - return __gmp_c; -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_add_1) -#if ! defined (__GMP_FORCE_mpn_add_1) -__GMP_EXTERN_INLINE -#endif -mp_limb_t -mpn_add_1 (mp_ptr __gmp_dst, mp_srcptr __gmp_src, mp_size_t __gmp_size, mp_limb_t __gmp_n) __GMP_NOTHROW -{ - mp_limb_t __gmp_c; - __GMPN_ADD_1 (__gmp_c, __gmp_dst, __gmp_src, __gmp_size, __gmp_n); - return __gmp_c; -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_cmp) -#if ! defined (__GMP_FORCE_mpn_cmp) -__GMP_EXTERN_INLINE -#endif -int -mpn_cmp (mp_srcptr __gmp_xp, mp_srcptr __gmp_yp, mp_size_t __gmp_size) __GMP_NOTHROW -{ - int __gmp_result; - __GMPN_CMP (__gmp_result, __gmp_xp, __gmp_yp, __gmp_size); - return __gmp_result; -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_sub) -#if ! defined (__GMP_FORCE_mpn_sub) -__GMP_EXTERN_INLINE -#endif -mp_limb_t -mpn_sub (mp_ptr __gmp_wp, mp_srcptr __gmp_xp, mp_size_t __gmp_xsize, mp_srcptr __gmp_yp, mp_size_t __gmp_ysize) -{ - mp_limb_t __gmp_c; - __GMPN_SUB (__gmp_c, __gmp_wp, __gmp_xp, __gmp_xsize, __gmp_yp, __gmp_ysize); - return __gmp_c; -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_sub_1) -#if ! defined (__GMP_FORCE_mpn_sub_1) -__GMP_EXTERN_INLINE -#endif -mp_limb_t -mpn_sub_1 (mp_ptr __gmp_dst, mp_srcptr __gmp_src, mp_size_t __gmp_size, mp_limb_t __gmp_n) __GMP_NOTHROW -{ - mp_limb_t __gmp_c; - __GMPN_SUB_1 (__gmp_c, __gmp_dst, __gmp_src, __gmp_size, __gmp_n); - return __gmp_c; -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_neg) -#if ! defined (__GMP_FORCE_mpn_neg) -__GMP_EXTERN_INLINE -#endif -mp_limb_t -mpn_neg (mp_ptr __gmp_rp, mp_srcptr __gmp_up, mp_size_t __gmp_n) -{ - mp_limb_t __gmp_ul, __gmp_cy; - __gmp_cy = 0; - do { - __gmp_ul = *__gmp_up++; - *__gmp_rp++ = -__gmp_ul - __gmp_cy; - __gmp_cy |= __gmp_ul != 0; - } while (--__gmp_n != 0); - return __gmp_cy; -} -#endif - -#if defined (__cplusplus) -} -#endif - - -/* Allow faster testing for negative, zero, and positive. */ -#define mpz_sgn(Z) ((Z)->_mp_size < 0 ? -1 : (Z)->_mp_size > 0) -#define mpf_sgn(F) ((F)->_mp_size < 0 ? -1 : (F)->_mp_size > 0) -#define mpq_sgn(Q) ((Q)->_mp_num._mp_size < 0 ? -1 : (Q)->_mp_num._mp_size > 0) - -/* When using GCC, optimize certain common comparisons. */ -#if defined (__GNUC__) && __GNUC__ >= 2 -#define mpz_cmp_ui(Z,UI) \ - (__builtin_constant_p (UI) && (UI) == 0 \ - ? mpz_sgn (Z) : _mpz_cmp_ui (Z,UI)) -#define mpz_cmp_si(Z,SI) \ - (__builtin_constant_p (SI) && (SI) == 0 ? mpz_sgn (Z) \ - : __builtin_constant_p (SI) && (SI) > 0 \ - ? _mpz_cmp_ui (Z, __GMP_CAST (unsigned long int, SI)) \ - : _mpz_cmp_si (Z,SI)) -#define mpq_cmp_ui(Q,NUI,DUI) \ - (__builtin_constant_p (NUI) && (NUI) == 0 \ - ? mpq_sgn (Q) : _mpq_cmp_ui (Q,NUI,DUI)) -#define mpq_cmp_si(q,n,d) \ - (__builtin_constant_p ((n) >= 0) && (n) >= 0 \ - ? mpq_cmp_ui (q, __GMP_CAST (unsigned long, n), d) \ - : _mpq_cmp_si (q, n, d)) -#else -#define mpz_cmp_ui(Z,UI) _mpz_cmp_ui (Z,UI) -#define mpz_cmp_si(Z,UI) _mpz_cmp_si (Z,UI) -#define mpq_cmp_ui(Q,NUI,DUI) _mpq_cmp_ui (Q,NUI,DUI) -#define mpq_cmp_si(q,n,d) _mpq_cmp_si(q,n,d) -#endif - - -/* Using "&" rather than "&&" means these can come out branch-free. Every - mpz_t has at least one limb allocated, so fetching the low limb is always - allowed. */ -#define mpz_odd_p(z) (((z)->_mp_size != 0) & __GMP_CAST (int, (z)->_mp_d[0])) -#define mpz_even_p(z) (! mpz_odd_p (z)) - - -/**************** C++ routines ****************/ - -#ifdef __cplusplus -__GMP_DECLSPEC_XX std::ostream& operator<< (std::ostream &, mpz_srcptr); -__GMP_DECLSPEC_XX std::ostream& operator<< (std::ostream &, mpq_srcptr); -__GMP_DECLSPEC_XX std::ostream& operator<< (std::ostream &, mpf_srcptr); -__GMP_DECLSPEC_XX std::istream& operator>> (std::istream &, mpz_ptr); -__GMP_DECLSPEC_XX std::istream& operator>> (std::istream &, mpq_ptr); -__GMP_DECLSPEC_XX std::istream& operator>> (std::istream &, mpf_ptr); -#endif - - -/* Source-level compatibility with GMP 2 and earlier. */ -#define mpn_divmod(qp,np,nsize,dp,dsize) \ - mpn_divrem (qp, __GMP_CAST (mp_size_t, 0), np, nsize, dp, dsize) - -/* Source-level compatibility with GMP 1. */ -#define mpz_mdiv mpz_fdiv_q -#define mpz_mdivmod mpz_fdiv_qr -#define mpz_mmod mpz_fdiv_r -#define mpz_mdiv_ui mpz_fdiv_q_ui -#define mpz_mdivmod_ui(q,r,n,d) \ - (((r) == 0) ? mpz_fdiv_q_ui (q,n,d) : mpz_fdiv_qr_ui (q,r,n,d)) -#define mpz_mmod_ui(r,n,d) \ - (((r) == 0) ? mpz_fdiv_ui (n,d) : mpz_fdiv_r_ui (r,n,d)) - -/* Useful synonyms, but not quite compatible with GMP 1. */ -#define mpz_div mpz_fdiv_q -#define mpz_divmod mpz_fdiv_qr -#define mpz_div_ui mpz_fdiv_q_ui -#define mpz_divmod_ui mpz_fdiv_qr_ui -#define mpz_div_2exp mpz_fdiv_q_2exp -#define mpz_mod_2exp mpz_fdiv_r_2exp - -enum -{ - GMP_ERROR_NONE = 0, - GMP_ERROR_UNSUPPORTED_ARGUMENT = 1, - GMP_ERROR_DIVISION_BY_ZERO = 2, - GMP_ERROR_SQRT_OF_NEGATIVE = 4, - GMP_ERROR_INVALID_ARGUMENT = 8 -}; - -/* Define CC and CFLAGS which were used to build this version of GMP */ -#define __GMP_CC "gcc -std=gnu99" -#define __GMP_CFLAGS "-m32 -O2 -pedantic -fomit-frame-pointer -mtune=pentiumpro -march=pentiumpro" - -/* Major version number is the value of __GNU_MP__ too, above and in mp.h. */ -#define __GNU_MP_VERSION 5 -#define __GNU_MP_VERSION_MINOR 0 -#define __GNU_MP_VERSION_PATCHLEVEL 1 -#define __GMP_MP_RELEASE (__GNU_MP_VERSION * 10000 + __GNU_MP_VERSION_MINOR * 100 + __GNU_MP_VERSION_PATCHLEVEL) - -#define __GMP_H__ -#endif /* __GMP_H__ */ diff --git a/misc/builddeps/linux32/gmp/lib/libgmp.a b/misc/builddeps/linux32/gmp/lib/libgmp.a deleted file mode 100644 index e61da303c19623b6e09915f22ade913f27a0f3a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 806574 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

rpQtjHDW5u@8sHn@Y27R7`F^xKWS_RmsR~|vc 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. See -*Note Reporting Bugs:: for information about reporting bugs. - - -1.1 How to use this Manual -========================== - -Everyone should read *Note GMP Basics::. If you need to install the -library yourself, then read *Note Installing GMP::. If you have a -system with multiple ABIs, then read *Note ABI and ISA::, for the -compiler options that must be used on applications. - - The rest of the manual can be used for later reference, although it -is probably a good idea to glance through it. - - -File: gmp.info, Node: Installing GMP, Next: GMP Basics, Prev: Introduction to GMP, Up: Top - -2 Installing GMP -**************** - -GMP has an autoconf/automake/libtool based configuration system. On a -Unix-like system a basic build can be done with - - ./configure - make - -Some self-tests can be run with - - make check - -And you can install (under `/usr/local' by default) with - - make install - - If you experience problems, please report them to -. See *Note Reporting Bugs::, for information on -what to include in useful bug reports. - -* Menu: - -* Build Options:: -* ABI and ISA:: -* Notes for Package Builds:: -* Notes for Particular Systems:: -* Known Build Problems:: -* Performance optimization:: - - -File: gmp.info, Node: Build Options, Next: ABI and ISA, Prev: Installing GMP, Up: Installing GMP - -2.1 Build Options -================= - -All the usual autoconf configure options are available, run `./configure ---help' for a summary. The file `INSTALL.autoconf' has some generic -installation information too. - -Tools - `configure' requires various Unix-like tools. See *Note Notes for - Particular Systems::, for some options on non-Unix systems. - - It might be possible to build without the help of `configure', - certainly all the code is there, but unfortunately you'll be on - your own. - -Build Directory - To compile in a separate build directory, `cd' to that directory, - and prefix the configure command with the path to the GMP source - directory. For example - - cd /my/build/dir - /my/sources/gmp-5.0.1/configure - - Not all `make' programs have the necessary features (`VPATH') to - support this. In particular, SunOS and Slowaris `make' have bugs - that make them unable to build in a separate directory. Use GNU - `make' instead. - -`--prefix' and `--exec-prefix' - The `--prefix' option can be used in the normal way to direct GMP - to install under a particular tree. The default is `/usr/local'. - - `--exec-prefix' can be used to direct architecture-dependent files - like `libgmp.a' to a different location. This can be used to share - architecture-independent parts like the documentation, but - separate the dependent parts. Note however that `gmp.h' and - `mp.h' are architecture-dependent since they encode certain - aspects of `libgmp', so it will be necessary to ensure both - `$prefix/include' and `$exec_prefix/include' are available to the - compiler. - -`--disable-shared', `--disable-static' - By default both shared and static libraries are built (where - possible), but one or other can be disabled. Shared libraries - result in smaller executables and permit code sharing between - separate running processes, but on some CPUs are slightly slower, - having a small cost on each function call. - -Native Compilation, `--build=CPU-VENDOR-OS' - For normal native compilation, the system can be specified with - `--build'. By default `./configure' uses the output from running - `./config.guess'. On some systems `./config.guess' can determine - the exact CPU type, on others it will be necessary to give it - explicitly. For example, - - ./configure --build=ultrasparc-sun-solaris2.7 - - In all cases the `OS' part is important, since it controls how - libtool generates shared libraries. Running `./config.guess' is - the simplest way to see what it should be, if you don't know - already. - -Cross Compilation, `--host=CPU-VENDOR-OS' - When cross-compiling, the system used for compiling is given by - `--build' and the system where the library will run is given by - `--host'. For example when using a FreeBSD Athlon system to build - GNU/Linux m68k binaries, - - ./configure --build=athlon-pc-freebsd3.5 --host=m68k-mac-linux-gnu - - Compiler tools are sought first with the host system type as a - prefix. For example `m68k-mac-linux-gnu-ranlib' is tried, then - plain `ranlib'. This makes it possible for a set of - cross-compiling tools to co-exist with native tools. The prefix - is the argument to `--host', and this can be an alias, such as - `m68k-linux'. But note that tools don't have to be setup this - way, it's enough to just have a `PATH' with a suitable - cross-compiling `cc' etc. - - Compiling for a different CPU in the same family as the build - system is a form of cross-compilation, though very possibly this - would merely be special options on a native compiler. In any case - `./configure' avoids depending on being able to run code on the - build system, which is important when creating binaries for a - newer CPU since they very possibly won't run on the build system. - - In all cases the compiler must be able to produce an executable - (of whatever format) from a standard C `main'. Although only - object files will go to make up `libgmp', `./configure' uses - linking tests for various purposes, such as determining what - functions are available on the host system. - - Currently a warning is given unless an explicit `--build' is used - when cross-compiling, because it may not be possible to correctly - guess the build system type if the `PATH' has only a - cross-compiling `cc'. - - Note that the `--target' option is not appropriate for GMP. It's - for use when building compiler tools, with `--host' being where - they will run, and `--target' what they'll produce code for. - Ordinary programs or libraries like GMP are only interested in the - `--host' part, being where they'll run. (Some past versions of - GMP used `--target' incorrectly.) - -CPU types - In general, if you want a library that runs as fast as possible, - you should configure GMP for the exact CPU type your system uses. - However, this may mean the binaries won't run on older members of - the family, and might run slower on other members, older or newer. - The best idea is always to build GMP for the exact machine type - you intend to run it on. - - The following CPUs have specific support. See `configure.in' for - details of what code and compiler options they select. - - * Alpha: alpha, alphaev5, alphaev56, alphapca56, alphapca57, - alphaev6, alphaev67, alphaev68 alphaev7 - - * Cray: c90, j90, t90, sv1 - - * HPPA: hppa1.0, hppa1.1, hppa2.0, hppa2.0n, hppa2.0w, hppa64 - - * IA-64: ia64, itanium, itanium2 - - * MIPS: mips, mips3, mips64 - - * Motorola: m68k, m68000, m68010, m68020, m68030, m68040, - m68060, m68302, m68360, m88k, m88110 - - * POWER: power, power1, power2, power2sc - - * PowerPC: powerpc, powerpc64, powerpc401, powerpc403, - powerpc405, powerpc505, powerpc601, powerpc602, powerpc603, - powerpc603e, powerpc604, powerpc604e, powerpc620, powerpc630, - powerpc740, powerpc7400, powerpc7450, powerpc750, powerpc801, - powerpc821, powerpc823, powerpc860, powerpc970 - - * SPARC: sparc, sparcv8, microsparc, supersparc, sparcv9, - ultrasparc, ultrasparc2, ultrasparc2i, ultrasparc3, sparc64 - - * x86 family: i386, i486, i586, pentium, pentiummmx, pentiumpro, - pentium2, pentium3, pentium4, k6, k62, k63, athlon, amd64, - viac3, viac32 - - * Other: a29k, arm, clipper, i960, ns32k, pyramid, sh, sh2, vax, - z8k - - CPUs not listed will use generic C code. - -Generic C Build - If some of the assembly code causes problems, or if otherwise - desired, the generic C code can be selected with CPU `none'. For - example, - - ./configure --host=none-unknown-freebsd3.5 - - Note that this will run quite slowly, but it should be portable - and should at least make it possible to get something running if - all else fails. - -Fat binary, `--enable-fat' - Using `--enable-fat' selects a "fat binary" build on x86, where - optimized low level subroutines are chosen at runtime according to - the CPU detected. This means more code, but gives good - performance on all x86 chips. (This option might become available - for more architectures in the future.) - -`ABI' - On some systems GMP supports multiple ABIs (application binary - interfaces), meaning data type sizes and calling conventions. By - default GMP chooses the best ABI available, but a particular ABI - can be selected. For example - - ./configure --host=mips64-sgi-irix6 ABI=n32 - - See *Note ABI and ISA::, for the available choices on relevant - CPUs, and what applications need to do. - -`CC', `CFLAGS' - By default the C compiler used is chosen from among some likely - candidates, with `gcc' normally preferred if it's present. The - usual `CC=whatever' can be passed to `./configure' to choose - something different. - - For various systems, default compiler flags are set based on the - CPU and compiler. The usual `CFLAGS="-whatever"' can be passed to - `./configure' to use something different or to set good flags for - systems GMP doesn't otherwise know. - - The `CC' and `CFLAGS' used are printed during `./configure', and - can be found in each generated `Makefile'. This is the easiest way - to check the defaults when considering changing or adding - something. - - Note that when `CC' and `CFLAGS' are specified on a system - supporting multiple ABIs it's important to give an explicit - `ABI=whatever', since GMP can't determine the ABI just from the - flags and won't be able to select the correct assembly code. - - If just `CC' is selected then normal default `CFLAGS' for that - compiler will be used (if GMP recognises it). For example - `CC=gcc' can be used to force the use of GCC, with default flags - (and default ABI). - -`CPPFLAGS' - Any flags like `-D' defines or `-I' includes required by the - preprocessor should be set in `CPPFLAGS' rather than `CFLAGS'. - Compiling is done with both `CPPFLAGS' and `CFLAGS', but - preprocessing uses just `CPPFLAGS'. This distinction is because - most preprocessors won't accept all the flags the compiler does. - Preprocessing is done separately in some configure tests, and in - the `ansi2knr' support for K&R compilers. - -`CC_FOR_BUILD' - Some build-time programs are compiled and run to generate - host-specific data tables. `CC_FOR_BUILD' is the compiler used - for this. It doesn't need to be in any particular ABI or mode, it - merely needs to generate executables that can run. The default is - to try the selected `CC' and some likely candidates such as `cc' - and `gcc', looking for something that works. - - No flags are used with `CC_FOR_BUILD' because a simple invocation - like `cc foo.c' should be enough. If some particular options are - required they can be included as for instance `CC_FOR_BUILD="cc - -whatever"'. - -C++ Support, `--enable-cxx' - C++ support in GMP can be enabled with `--enable-cxx', in which - case a C++ compiler will be required. As a convenience - `--enable-cxx=detect' can be used to enable C++ support only if a - compiler can be found. The C++ support consists of a library - `libgmpxx.la' and header file `gmpxx.h' (*note Headers and - Libraries::). - - A separate `libgmpxx.la' has been adopted rather than having C++ - objects within `libgmp.la' in order to ensure dynamic linked C - programs aren't bloated by a dependency on the C++ standard - library, and to avoid any chance that the C++ compiler could be - required when linking plain C programs. - - `libgmpxx.la' will use certain internals from `libgmp.la' and can - only be expected to work with `libgmp.la' from the same GMP - version. Future changes to the relevant internals will be - accompanied by renaming, so a mismatch will cause unresolved - symbols rather than perhaps mysterious misbehaviour. - - In general `libgmpxx.la' will be usable only with the C++ compiler - that built it, since name mangling and runtime support are usually - incompatible between different compilers. - -`CXX', `CXXFLAGS' - When C++ support is enabled, the C++ compiler and its flags can be - set with variables `CXX' and `CXXFLAGS' in the usual way. The - default for `CXX' is the first compiler that works from a list of - likely candidates, with `g++' normally preferred when available. - The default for `CXXFLAGS' is to try `CFLAGS', `CFLAGS' without - `-g', then for `g++' either `-g -O2' or `-O2', or for other - compilers `-g' or nothing. Trying `CFLAGS' this way is convenient - when using `gcc' and `g++' together, since the flags for `gcc' will - usually suit `g++'. - - It's important that the C and C++ compilers match, meaning their - startup and runtime support routines are compatible and that they - generate code in the same ABI (if there's a choice of ABIs on the - system). `./configure' isn't currently able to check these things - very well itself, so for that reason `--disable-cxx' is the - default, to avoid a build failure due to a compiler mismatch. - Perhaps this will change in the future. - - Incidentally, it's normally not good enough to set `CXX' to the - same as `CC'. Although `gcc' for instance recognises `foo.cc' as - C++ code, only `g++' will invoke the linker the right way when - building an executable or shared library from C++ object files. - -Temporary Memory, `--enable-alloca=' - GMP allocates temporary workspace using one of the following three - methods, which can be selected with for instance - `--enable-alloca=malloc-reentrant'. - - * `alloca' - C library or compiler builtin. - - * `malloc-reentrant' - the heap, in a re-entrant fashion. - - * `malloc-notreentrant' - the heap, with global variables. - - For convenience, the following choices are also available. - `--disable-alloca' is the same as `no'. - - * `yes' - a synonym for `alloca'. - - * `no' - a synonym for `malloc-reentrant'. - - * `reentrant' - `alloca' if available, otherwise - `malloc-reentrant'. This is the default. - - * `notreentrant' - `alloca' if available, otherwise - `malloc-notreentrant'. - - `alloca' is reentrant and fast, and is recommended. It actually - allocates just small blocks on the stack; larger ones use - malloc-reentrant. - - `malloc-reentrant' is, as the name suggests, reentrant and thread - safe, but `malloc-notreentrant' is faster and should be used if - reentrancy is not required. - - The two malloc methods in fact use the memory allocation functions - selected by `mp_set_memory_functions', these being `malloc' and - friends by default. *Note Custom Allocation::. - - An additional choice `--enable-alloca=debug' is available, to help - when debugging memory related problems (*note Debugging::). - -FFT Multiplication, `--disable-fft' - By default multiplications are done using Karatsuba, 3-way Toom, - and Fermat FFT. The FFT is only used on large to very large - operands and can be disabled to save code size if desired. - -Berkeley MP, `--enable-mpbsd' - The Berkeley MP compatibility library (`libmp') and header file - (`mp.h') are built and installed only if `--enable-mpbsd' is used. - *Note BSD Compatible Functions::. - -Assertion Checking, `--enable-assert' - This option enables some consistency checking within the library. - This can be of use while debugging, *note Debugging::. - -Execution Profiling, `--enable-profiling=prof/gprof/instrument' - Enable profiling support, in one of various styles, *note - Profiling::. - -`MPN_PATH' - Various assembly versions of each mpn subroutines are provided. - For a given CPU, a search is made though a path to choose a - version of each. For example `sparcv8' has - - MPN_PATH="sparc32/v8 sparc32 generic" - - which means look first for v8 code, then plain sparc32 (which is - v7), and finally fall back on generic C. Knowledgeable users with - special requirements can specify a different path. Normally this - is completely unnecessary. - -Documentation - The source for the document you're now reading is `doc/gmp.texi', - in Texinfo format, see *Note Texinfo: (texinfo)Top. - - Info format `doc/gmp.info' is included in the distribution. The - usual automake targets are available to make PostScript, DVI, PDF - and HTML (these will require various TeX and Texinfo tools). - - DocBook and XML can be generated by the Texinfo `makeinfo' program - too, see *Note Options for `makeinfo': (texinfo)makeinfo options. - - Some supplementary notes can also be found in the `doc' - subdirectory. - - - -File: gmp.info, Node: ABI and ISA, Next: Notes for Package Builds, Prev: Build Options, Up: Installing GMP - -2.2 ABI and ISA -=============== - -ABI (Application Binary Interface) refers to the calling conventions -between functions, meaning what registers are used and what sizes the -various C data types are. ISA (Instruction Set Architecture) refers to -the instructions and registers a CPU has available. - - Some 64-bit ISA CPUs have both a 64-bit ABI and a 32-bit ABI -defined, the latter for compatibility with older CPUs in the family. -GMP supports some CPUs like this in both ABIs. In fact within GMP -`ABI' means a combination of chip ABI, plus how GMP chooses to use it. -For example in some 32-bit ABIs, GMP may support a limb as either a -32-bit `long' or a 64-bit `long long'. - - By default GMP chooses the best ABI available for a given system, -and this generally gives significantly greater speed. But an ABI can -be chosen explicitly to make GMP compatible with other libraries, or -particular application requirements. For example, - - ./configure ABI=32 - - In all cases it's vital that all object code used in a given program -is compiled for the same ABI. - - Usually a limb is implemented as a `long'. When a `long long' limb -is used this is encoded in the generated `gmp.h'. This is convenient -for applications, but it does mean that `gmp.h' will vary, and can't be -just copied around. `gmp.h' remains compiler independent though, since -all compilers for a particular ABI will be expected to use the same -limb type. - - Currently no attempt is made to follow whatever conventions a system -has for installing library or header files built for a particular ABI. -This will probably only matter when installing multiple builds of GMP, -and it might be as simple as configuring with a special `libdir', or it -might require more than that. Note that builds for different ABIs need -to done separately, with a fresh `./configure' and `make' each. - - -AMD64 (`x86_64') - On AMD64 systems supporting both 32-bit and 64-bit modes for - applications, the following ABI choices are available. - - `ABI=64' - The 64-bit ABI uses 64-bit limbs and pointers and makes full - use of the chip architecture. This is the default. - Applications will usually not need special compiler flags, - but for reference the option is - - gcc -m64 - - `ABI=32' - The 32-bit ABI is the usual i386 conventions. This will be - slower, and is not recommended except for inter-operating - with other code not yet 64-bit capable. Applications must be - compiled with - - gcc -m32 - - (In GCC 2.95 and earlier there's no `-m32' option, it's the - only mode.) - - -HPPA 2.0 (`hppa2.0*', `hppa64') - - `ABI=2.0w' - The 2.0w ABI uses 64-bit limbs and pointers and is available - on HP-UX 11 or up. Applications must be compiled with - - gcc [built for 2.0w] - cc +DD64 - - `ABI=2.0n' - The 2.0n ABI means the 32-bit HPPA 1.0 ABI and all its normal - calling conventions, but with 64-bit instructions permitted - within functions. GMP uses a 64-bit `long long' for a limb. - This ABI is available on hppa64 GNU/Linux and on HP-UX 10 or - higher. Applications must be compiled with - - gcc [built for 2.0n] - cc +DA2.0 +e - - Note that current versions of GCC (eg. 3.2) don't generate - 64-bit instructions for `long long' operations and so may be - slower than for 2.0w. (The GMP assembly code is the same - though.) - - `ABI=1.0' - HPPA 2.0 CPUs can run all HPPA 1.0 and 1.1 code in the 32-bit - HPPA 1.0 ABI. No special compiler options are needed for - applications. - - All three ABIs are available for CPU types `hppa2.0w', `hppa2.0' - and `hppa64', but for CPU type `hppa2.0n' only 2.0n or 1.0 are - considered. - - Note that GCC on HP-UX has no options to choose between 2.0n and - 2.0w modes, unlike HP `cc'. Instead it must be built for one or - the other ABI. GMP will detect how it was built, and skip to the - corresponding `ABI'. - - -IA-64 under HP-UX (`ia64*-*-hpux*', `itanium*-*-hpux*') - HP-UX supports two ABIs for IA-64. GMP performance is the same in - both. - - `ABI=32' - In the 32-bit ABI, pointers, `int's and `long's are 32 bits - and GMP uses a 64 bit `long long' for a limb. Applications - can be compiled without any special flags since this ABI is - the default in both HP C and GCC, but for reference the flags - are - - gcc -milp32 - cc +DD32 - - `ABI=64' - In the 64-bit ABI, `long's and pointers are 64 bits and GMP - uses a `long' for a limb. Applications must be compiled with - - gcc -mlp64 - cc +DD64 - - On other IA-64 systems, GNU/Linux for instance, `ABI=64' is the - only choice. - - -MIPS under IRIX 6 (`mips*-*-irix[6789]') - IRIX 6 always has a 64-bit MIPS 3 or better CPU, and supports ABIs - o32, n32, and 64. n32 or 64 are recommended, and GMP performance - will be the same in each. The default is n32. - - `ABI=o32' - The o32 ABI is 32-bit pointers and integers, and no 64-bit - operations. GMP will be slower than in n32 or 64, this - option only exists to support old compilers, eg. GCC 2.7.2. - Applications can be compiled with no special flags on an old - compiler, or on a newer compiler with - - gcc -mabi=32 - cc -32 - - `ABI=n32' - The n32 ABI is 32-bit pointers and integers, but with a - 64-bit limb using a `long long'. Applications must be - compiled with - - gcc -mabi=n32 - cc -n32 - - `ABI=64' - The 64-bit ABI is 64-bit pointers and integers. Applications - must be compiled with - - gcc -mabi=64 - cc -64 - - Note that MIPS GNU/Linux, as of kernel version 2.2, doesn't have - the necessary support for n32 or 64 and so only gets a 32-bit limb - and the MIPS 2 code. - - -PowerPC 64 (`powerpc64', `powerpc620', `powerpc630', `powerpc970', `power4', `power5') - - `ABI=aix64' - The AIX 64 ABI uses 64-bit limbs and pointers and is the - default on PowerPC 64 `*-*-aix*' systems. Applications must - be compiled with - - gcc -maix64 - xlc -q64 - - `ABI=mode64' - The `mode64' ABI uses 64-bit limbs and pointers, and is the - default on 64-bit GNU/Linux, BSD, and Mac OS X/Darwin - systems. Applications must be compiled with - - gcc -m64 - - `ABI=mode32' - The `mode32' ABI uses a 64-bit `long long' limb but with the - chip still in 32-bit mode and using 32-bit calling - conventions. This is the default on for systems where the - true 64-bit ABIs are unavailable. No special compiler - options are needed for applications. - - `ABI=32' - This is the basic 32-bit PowerPC ABI, with a 32-bit limb. No - special compiler options are needed for applications. - - GMP speed is greatest in `aix64' and `mode32'. In `ABI=32' only - the 32-bit ISA is used and this doesn't make full use of a 64-bit - chip. On a suitable system we could perhaps use more of the ISA, - but there are no plans to do so. - - -Sparc V9 (`sparc64', `sparcv9', `ultrasparc*') - - `ABI=64' - The 64-bit V9 ABI is available on the various BSD sparc64 - ports, recent versions of Sparc64 GNU/Linux, and Solaris 2.7 - and up (when the kernel is in 64-bit mode). GCC 3.2 or - higher, or Sun `cc' is required. On GNU/Linux, depending on - the default `gcc' mode, applications must be compiled with - - gcc -m64 - - On Solaris applications must be compiled with - - gcc -m64 -mptr64 -Wa,-xarch=v9 -mcpu=v9 - cc -xarch=v9 - - On the BSD sparc64 systems no special options are required, - since 64-bits is the only ABI available. - - `ABI=32' - For the basic 32-bit ABI, GMP still uses as much of the V9 - ISA as it can. In the Sun documentation this combination is - known as "v8plus". On GNU/Linux, depending on the default - `gcc' mode, applications may need to be compiled with - - gcc -m32 - - On Solaris, no special compiler options are required for - applications, though using something like the following is - recommended. (`gcc' 2.8 and earlier only support `-mv8' - though.) - - gcc -mv8plus - cc -xarch=v8plus - - GMP speed is greatest in `ABI=64', so it's the default where - available. The speed is partly because there are extra registers - available and partly because 64-bits is considered the more - important case and has therefore had better code written for it. - - Don't be confused by the names of the `-m' and `-x' compiler - options, they're called `arch' but effectively control both ABI - and ISA. - - On Solaris 2.6 and earlier, only `ABI=32' is available since the - kernel doesn't save all registers. - - On Solaris 2.7 with the kernel in 32-bit mode, a normal native - build will reject `ABI=64' because the resulting executables won't - run. `ABI=64' can still be built if desired by making it look - like a cross-compile, for example - - ./configure --build=none --host=sparcv9-sun-solaris2.7 ABI=64 - - -File: gmp.info, Node: Notes for Package Builds, Next: Notes for Particular Systems, Prev: ABI and ISA, Up: Installing GMP - -2.3 Notes for Package Builds -============================ - -GMP should present no great difficulties for packaging in a binary -distribution. - - Libtool is used to build the library and `-version-info' is set -appropriately, having started from `3:0:0' in GMP 3.0 (*note Library -interface versions: (libtool)Versioning.). - - The GMP 4 series will be upwardly binary compatible in each release -and will be upwardly binary compatible with all of the GMP 3 series. -Additional function interfaces may be added in each release, so on -systems where libtool versioning is not fully checked by the loader an -auxiliary mechanism may be needed to express that a dynamic linked -application depends on a new enough GMP. - - An auxiliary mechanism may also be needed to express that -`libgmpxx.la' (from `--enable-cxx', *note Build Options::) requires -`libgmp.la' from the same GMP version, since this is not done by the -libtool versioning, nor otherwise. A mismatch will result in -unresolved symbols from the linker, or perhaps the loader. - - When building a package for a CPU family, care should be taken to use -`--host' (or `--build') to choose the least common denominator among -the CPUs which might use the package. For example this might mean plain -`sparc' (meaning V7) for SPARCs. - - For x86s, `--enable-fat' sets things up for a fat binary build, -making a runtime selection of optimized low level routines. This is a -good choice for packaging to run on a range of x86 chips. - - Users who care about speed will want GMP built for their exact CPU -type, to make best use of the available optimizations. Providing a way -to suitably rebuild a package may be useful. This could be as simple -as making it possible for a user to omit `--build' (and `--host') so -`./config.guess' will detect the CPU. But a way to manually specify a -`--build' will be wanted for systems where `./config.guess' is inexact. - - On systems with multiple ABIs, a packaged build will need to decide -which among the choices is to be provided, see *Note ABI and ISA::. A -given run of `./configure' etc will only build one ABI. If a second -ABI is also required then a second run of `./configure' etc must be -made, starting from a clean directory tree (`make distclean'). - - As noted under "ABI and ISA", currently no attempt is made to follow -system conventions for install locations that vary with ABI, such as -`/usr/lib/sparcv9' for `ABI=64' as opposed to `/usr/lib' for `ABI=32'. -A package build can override `libdir' and other standard variables as -necessary. - - Note that `gmp.h' is a generated file, and will be architecture and -ABI dependent. When attempting to install two ABIs simultaneously it -will be important that an application compile gets the correct `gmp.h' -for its desired ABI. If compiler include paths don't vary with ABI -options then it might be necessary to create a `/usr/include/gmp.h' -which tests preprocessor symbols and chooses the correct actual `gmp.h'. - - -File: gmp.info, Node: Notes for Particular Systems, Next: Known Build Problems, Prev: Notes for Package Builds, Up: Installing GMP - -2.4 Notes for Particular Systems -================================ - -AIX 3 and 4 - On systems `*-*-aix[34]*' shared libraries are disabled by - default, since some versions of the native `ar' fail on the - convenience libraries used. A shared build can be attempted with - - ./configure --enable-shared --disable-static - - Note that the `--disable-static' is necessary because in a shared - build libtool makes `libgmp.a' a symlink to `libgmp.so', - apparently for the benefit of old versions of `ld' which only - recognise `.a', but unfortunately this is done even if a fully - functional `ld' is available. - -ARM - On systems `arm*-*-*', versions of GCC up to and including 2.95.3 - have a bug in unsigned division, giving wrong results for some - operands. GMP `./configure' will demand GCC 2.95.4 or later. - -Compaq C++ - Compaq C++ on OSF 5.1 has two flavours of `iostream', a standard - one and an old pre-standard one (see `man iostream_intro'). GMP - can only use the standard one, which unfortunately is not the - default but must be selected by defining `__USE_STD_IOSTREAM'. - Configure with for instance - - ./configure --enable-cxx CPPFLAGS=-D__USE_STD_IOSTREAM - -Floating Point Mode - On some systems, the hardware floating point has a control mode - which can set all operations to be done in a particular precision, - for instance single, double or extended on x86 systems (x87 - floating point). The GMP functions involving a `double' cannot be - expected to operate to their full precision when the hardware is - in single precision mode. Of course this affects all code, - including application code, not just GMP. - -MS-DOS and MS Windows - On an MS-DOS system DJGPP can be used to build GMP, and on an MS - Windows system Cygwin, DJGPP and MINGW can be used. All three are - excellent ports of GCC and the various GNU tools. - - `http://www.cygwin.com/' - `http://www.delorie.com/djgpp/' - `http://www.mingw.org/' - - Microsoft also publishes an Interix "Services for Unix" which can - be used to build GMP on Windows (with a normal `./configure'), but - it's not free software. - -MS Windows DLLs - On systems `*-*-cygwin*', `*-*-mingw*' and `*-*-pw32*' by default - GMP builds only a static library, but a DLL can be built instead - using - - ./configure --disable-static --enable-shared - - Static and DLL libraries can't both be built, since certain export - directives in `gmp.h' must be different. - - A MINGW DLL build of GMP can be used with Microsoft C. Libtool - doesn't install a `.lib' format import library, but it can be - created with MS `lib' as follows, and copied to the install - directory. Similarly for `libmp' and `libgmpxx'. - - cd .libs - lib /def:libgmp-3.dll.def /out:libgmp-3.lib - - MINGW uses the C runtime library `msvcrt.dll' for I/O, so - applications wanting to use the GMP I/O routines must be compiled - with `cl /MD' to do the same. If one of the other C runtime - library choices provided by MS C is desired then the suggestion is - to use the GMP string functions and confine I/O to the application. - -Motorola 68k CPU Types - `m68k' is taken to mean 68000. `m68020' or higher will give a - performance boost on applicable CPUs. `m68360' can be used for - CPU32 series chips. `m68302' can be used for "Dragonball" series - chips, though this is merely a synonym for `m68000'. - -OpenBSD 2.6 - `m4' in this release of OpenBSD has a bug in `eval' that makes it - unsuitable for `.asm' file processing. `./configure' will detect - the problem and either abort or choose another m4 in the `PATH'. - The bug is fixed in OpenBSD 2.7, so either upgrade or use GNU m4. - -Power CPU Types - In GMP, CPU types `power*' and `powerpc*' will each use - instructions not available on the other, so it's important to - choose the right one for the CPU that will be used. Currently GMP - has no assembly code support for using just the common instruction - subset. To get executables that run on both, the current - suggestion is to use the generic C code (CPU `none'), possibly - with appropriate compiler options (like `-mcpu=common' for `gcc'). - CPU `rs6000' (which is not a CPU but a family of workstations) is - accepted by `config.sub', but is currently equivalent to `none'. - -Sparc CPU Types - `sparcv8' or `supersparc' on relevant systems will give a - significant performance increase over the V7 code selected by plain - `sparc'. - -Sparc App Regs - The GMP assembly code for both 32-bit and 64-bit Sparc clobbers the - "application registers" `g2', `g3' and `g4', the same way that the - GCC default `-mapp-regs' does (*note SPARC Options: (gcc)SPARC - Options.). - - This makes that code unsuitable for use with the special V9 - `-mcmodel=embmedany' (which uses `g4' as a data segment pointer), - and for applications wanting to use those registers for special - purposes. In these cases the only suggestion currently is to - build GMP with CPU `none' to avoid the assembly code. - -SunOS 4 - `/usr/bin/m4' lacks various features needed to process `.asm' - files, and instead `./configure' will automatically use - `/usr/5bin/m4', which we believe is always available (if not then - use GNU m4). - -x86 CPU Types - `i586', `pentium' or `pentiummmx' code is good for its intended P5 - Pentium chips, but quite slow when run on Intel P6 class chips - (PPro, P-II, P-III). `i386' is a better choice when making - binaries that must run on both. - -x86 MMX and SSE2 Code - If the CPU selected has MMX code but the assembler doesn't support - it, a warning is given and non-MMX code is used instead. This - will be an inferior build, since the MMX code that's present is - there because it's faster than the corresponding plain integer - code. The same applies to SSE2. - - Old versions of `gas' don't support MMX instructions, in particular - version 1.92.3 that comes with FreeBSD 2.2.8 or the more recent - OpenBSD 3.1 doesn't. - - Solaris 2.6 and 2.7 `as' generate incorrect object code for - register to register `movq' instructions, and so can't be used for - MMX code. Install a recent `gas' if MMX code is wanted on these - systems. - - -File: gmp.info, Node: Known Build Problems, Next: Performance optimization, Prev: Notes for Particular Systems, Up: Installing GMP - -2.5 Known Build Problems -======================== - -You might find more up-to-date information at `http://gmplib.org/'. - -Compiler link options - The version of libtool currently in use rather aggressively strips - compiler options when linking a shared library. This will - hopefully be relaxed in the future, but for now if this is a - problem the suggestion is to create a little script to hide them, - and for instance configure with - - ./configure CC=gcc-with-my-options - -DJGPP (`*-*-msdosdjgpp*') - The DJGPP port of `bash' 2.03 is unable to run the `configure' - script, it exits silently, having died writing a preamble to - `config.log'. Use `bash' 2.04 or higher. - - `make all' was found to run out of memory during the final - `libgmp.la' link on one system tested, despite having 64Mb - available. Running `make libgmp.la' directly helped, perhaps - recursing into the various subdirectories uses up memory. - -GNU binutils `strip' prior to 2.12 - `strip' from GNU binutils 2.11 and earlier should not be used on - the static libraries `libgmp.a' and `libmp.a' since it will - discard all but the last of multiple archive members with the same - name, like the three versions of `init.o' in `libgmp.a'. Binutils - 2.12 or higher can be used successfully. - - The shared libraries `libgmp.so' and `libmp.so' are not affected by - this and any version of `strip' can be used on them. - -`make' syntax error - On certain versions of SCO OpenServer 5 and IRIX 6.5 the native - `make' is unable to handle the long dependencies list for - `libgmp.la'. The symptom is a "syntax error" on the following - line of the top-level `Makefile'. - - libgmp.la: $(libgmp_la_OBJECTS) $(libgmp_la_DEPENDENCIES) - - Either use GNU Make, or as a workaround remove - `$(libgmp_la_DEPENDENCIES)' from that line (which will make the - initial build work, but if any recompiling is done `libgmp.la' - might not be rebuilt). - -MacOS X (`*-*-darwin*') - Libtool currently only knows how to create shared libraries on - MacOS X using the native `cc' (which is a modified GCC), not a - plain GCC. A static-only build should work though - (`--disable-shared'). - -NeXT prior to 3.3 - The system compiler on old versions of NeXT was a massacred and - old GCC, even if it called itself `cc'. This compiler cannot be - used to build GMP, you need to get a real GCC, and install that. - (NeXT may have fixed this in release 3.3 of their system.) - -POWER and PowerPC - Bugs in GCC 2.7.2 (and 2.6.3) mean it can't be used to compile GMP - on POWER or PowerPC. If you want to use GCC for these machines, - get GCC 2.7.2.1 (or later). - -Sequent Symmetry - Use the GNU assembler instead of the system assembler, since the - latter has serious bugs. - -Solaris 2.6 - The system `sed' prints an error "Output line too long" when - libtool builds `libgmp.la'. This doesn't seem to cause any - obvious ill effects, but GNU `sed' is recommended, to avoid any - doubt. - -Sparc Solaris 2.7 with gcc 2.95.2 in `ABI=32' - A shared library build of GMP seems to fail in this combination, - it builds but then fails the tests, apparently due to some - incorrect data relocations within `gmp_randinit_lc_2exp_size'. - The exact cause is unknown, `--disable-shared' is recommended. - - -File: gmp.info, Node: Performance optimization, Prev: Known Build Problems, Up: Installing GMP - -2.6 Performance optimization -============================ - -For optimal performance, build GMP for the exact CPU type of the target -computer, see *Note Build Options::. - - Unlike what is the case for most other programs, the compiler -typically doesn't matter much, since GMP uses assembly language for the -most critical operation. - - In particular for long-running GMP applications, and applications -demanding extremely large numbers, building and running the `tuneup' -program in the `tune' subdirectory, can be important. For example, - - cd tune - make tuneup - ./tuneup - - will generate better contents for the `gmp-mparam.h' parameter file. - - To use the results, put the output in the file file indicated in the -`Parameters for ...' header. Then recompile from scratch. - - The `tuneup' program takes one useful parameter, `-f NNN', which -instructs the program how long to check FFT multiply parameters. If -you're going to use GMP for extremely large numbers, you may want to -run `tuneup' with a large NNN value. - - -File: gmp.info, Node: GMP Basics, Next: Reporting Bugs, Prev: Installing GMP, Up: Top - -3 GMP Basics -************ - -*Using functions, macros, data types, etc. not documented in this -manual is strongly discouraged. If you do so your application is -guaranteed to be incompatible with future versions of GMP.* - -* Menu: - -* Headers and Libraries:: -* Nomenclature and Types:: -* Function Classes:: -* Variable Conventions:: -* Parameter Conventions:: -* Memory Management:: -* Reentrancy:: -* Useful Macros and Constants:: -* Compatibility with older versions:: -* Demonstration Programs:: -* Efficiency:: -* Debugging:: -* Profiling:: -* Autoconf:: -* Emacs:: - - -File: gmp.info, Node: Headers and Libraries, Next: Nomenclature and Types, Prev: GMP Basics, Up: GMP Basics - -3.1 Headers and Libraries -========================= - -All declarations needed to use GMP are collected in the include file -`gmp.h'. It is designed to work with both C and C++ compilers. - - #include - - Note however that prototypes for GMP functions with `FILE *' -parameters are only provided if `' is included too. - - #include - #include - - Likewise `' (or `') is required for prototypes -with `va_list' parameters, such as `gmp_vprintf'. And `' -for prototypes with `struct obstack' parameters, such as -`gmp_obstack_printf', when available. - - All programs using GMP must link against the `libgmp' library. On a -typical Unix-like system this can be done with `-lgmp', for example - - gcc myprogram.c -lgmp - - GMP C++ functions are in a separate `libgmpxx' library. This is -built and installed if C++ support has been enabled (*note Build -Options::). For example, - - g++ mycxxprog.cc -lgmpxx -lgmp - - GMP is built using Libtool and an application can use that to link -if desired, *note GNU Libtool: (libtool)Top. - - If GMP has been installed to a non-standard location then it may be -necessary to use `-I' and `-L' compiler options to point to the right -directories, and some sort of run-time path for a shared library. - - -File: gmp.info, Node: Nomenclature and Types, Next: Function Classes, Prev: Headers and Libraries, Up: GMP Basics - -3.2 Nomenclature and Types -========================== - -In this manual, "integer" usually means a multiple precision integer, as -defined by the GMP library. The C data type for such integers is -`mpz_t'. Here are some examples of how to declare such integers: - - mpz_t sum; - - struct foo { mpz_t x, y; }; - - mpz_t vec[20]; - - "Rational number" means a multiple precision fraction. The C data -type for these fractions is `mpq_t'. For example: - - mpq_t quotient; - - "Floating point number" or "Float" for short, is an arbitrary -precision mantissa with a limited precision exponent. The C data type -for such objects is `mpf_t'. For example: - - mpf_t fp; - - The floating point functions accept and return exponents in the C -type `mp_exp_t'. Currently this is usually a `long', but on some -systems it's an `int' for efficiency. - - A "limb" means the part of a multi-precision number that fits in a -single machine word. (We chose this word because a limb of the human -body is analogous to a digit, only larger, and containing several -digits.) Normally a limb is 32 or 64 bits. The C data type for a limb -is `mp_limb_t'. - - Counts of limbs of a multi-precision number represented in the C type -`mp_size_t'. Currently this is normally a `long', but on some systems -it's an `int' for efficiency, and on some systems it will be `long -long' in the future. - - Counts of bits of a multi-precision number are represented in the C -type `mp_bitcnt_t'. Currently this is always an `unsigned long', but on -some systems it will be an `unsigned long long' in the future . - - "Random state" means an algorithm selection and current state data. -The C data type for such objects is `gmp_randstate_t'. For example: - - gmp_randstate_t rstate; - - Also, in general `mp_bitcnt_t' is used for bit counts and ranges, and -`size_t' is used for byte or character counts. - - -File: gmp.info, Node: Function Classes, Next: Variable Conventions, Prev: Nomenclature and Types, Up: GMP Basics - -3.3 Function Classes -==================== - -There are six classes of functions in the GMP library: - - 1. Functions for signed integer arithmetic, with names beginning with - `mpz_'. The associated type is `mpz_t'. There are about 150 - functions in this class. (*note Integer Functions::) - - 2. Functions for rational number arithmetic, with names beginning with - `mpq_'. The associated type is `mpq_t'. There are about 40 - functions in this class, but the integer functions can be used for - arithmetic on the numerator and denominator separately. (*note - Rational Number Functions::) - - 3. Functions for floating-point arithmetic, with names beginning with - `mpf_'. The associated type is `mpf_t'. There are about 60 - functions is this class. (*note Floating-point Functions::) - - 4. Functions compatible with Berkeley MP, such as `itom', `madd', and - `mult'. The associated type is `MINT'. (*note BSD Compatible - Functions::) - - 5. Fast low-level functions that operate on natural numbers. These - are used by the functions in the preceding groups, and you can - also call them directly from very time-critical user programs. - These functions' names begin with `mpn_'. The associated type is - array of `mp_limb_t'. There are about 30 (hard-to-use) functions - in this class. (*note Low-level Functions::) - - 6. Miscellaneous functions. Functions for setting up custom - allocation and functions for generating random numbers. (*note - Custom Allocation::, and *note Random Number Functions::) - - -File: gmp.info, Node: Variable Conventions, Next: Parameter Conventions, Prev: Function Classes, Up: GMP Basics - -3.4 Variable Conventions -======================== - -GMP functions generally have output arguments before input arguments. -This notation is by analogy with the assignment operator. The BSD MP -compatibility functions are exceptions, having the output arguments -last. - - GMP lets you use the same variable for both input and output in one -call. For example, the main function for integer multiplication, -`mpz_mul', can be used to square `x' and put the result back in `x' with - - mpz_mul (x, x, x); - - Before you can assign to a GMP variable, you need to initialize it -by calling one of the special initialization functions. When you're -done with a variable, you need to clear it out, using one of the -functions for that purpose. Which function to use depends on the type -of variable. See the chapters on integer functions, rational number -functions, and floating-point functions for details. - - A variable should only be initialized once, or at least cleared -between each initialization. After a variable has been initialized, it -may be assigned to any number of times. - - For efficiency reasons, avoid excessive initializing and clearing. -In general, initialize near the start of a function and clear near the -end. For example, - - void - foo (void) - { - mpz_t n; - int i; - mpz_init (n); - for (i = 1; i < 100; i++) - { - mpz_mul (n, ...); - mpz_fdiv_q (n, ...); - ... - } - mpz_clear (n); - } - - -File: gmp.info, Node: Parameter Conventions, Next: Memory Management, Prev: Variable Conventions, Up: GMP Basics - -3.5 Parameter Conventions -========================= - -When a GMP variable is used as a function parameter, it's effectively a -call-by-reference, meaning if the function stores a value there it will -change the original in the caller. Parameters which are input-only can -be designated `const' to provoke a compiler error or warning on -attempting to modify them. - - When a function is going to return a GMP result, it should designate -a parameter that it sets, like the library functions do. More than one -value can be returned by having more than one output parameter, again -like the library functions. A `return' of an `mpz_t' etc doesn't -return the object, only a pointer, and this is almost certainly not -what's wanted. - - Here's an example accepting an `mpz_t' parameter, doing a -calculation, and storing the result to the indicated parameter. - - void - foo (mpz_t result, const mpz_t param, unsigned long n) - { - unsigned long i; - mpz_mul_ui (result, param, n); - for (i = 1; i < n; i++) - mpz_add_ui (result, result, i*7); - } - - int - main (void) - { - mpz_t r, n; - mpz_init (r); - mpz_init_set_str (n, "123456", 0); - foo (r, n, 20L); - gmp_printf ("%Zd\n", r); - return 0; - } - - `foo' works even if the mainline passes the same variable for -`param' and `result', just like the library functions. But sometimes -it's tricky to make that work, and an application might not want to -bother supporting that sort of thing. - - For interest, the GMP types `mpz_t' etc are implemented as -one-element arrays of certain structures. This is why declaring a -variable creates an object with the fields GMP needs, but then using it -as a parameter passes a pointer to the object. Note that the actual -fields in each `mpz_t' etc are for internal use only and should not be -accessed directly by code that expects to be compatible with future GMP -releases. - - -File: gmp.info, Node: Memory Management, Next: Reentrancy, Prev: Parameter Conventions, Up: GMP Basics - -3.6 Memory Management -===================== - -The GMP types like `mpz_t' are small, containing only a couple of sizes, -and pointers to allocated data. Once a variable is initialized, GMP -takes care of all space allocation. Additional space is allocated -whenever a variable doesn't have enough. - - `mpz_t' and `mpq_t' variables never reduce their allocated space. -Normally this is the best policy, since it avoids frequent reallocation. -Applications that need to return memory to the heap at some particular -point can use `mpz_realloc2', or clear variables no longer needed. - - `mpf_t' variables, in the current implementation, use a fixed amount -of space, determined by the chosen precision and allocated at -initialization, so their size doesn't change. - - All memory is allocated using `malloc' and friends by default, but -this can be changed, see *Note Custom Allocation::. Temporary memory -on the stack is also used (via `alloca'), but this can be changed at -build-time if desired, see *Note Build Options::. - - -File: gmp.info, Node: Reentrancy, Next: Useful Macros and Constants, Prev: Memory Management, Up: GMP Basics - -3.7 Reentrancy -============== - -GMP is reentrant and thread-safe, with some exceptions: - - * If configured with `--enable-alloca=malloc-notreentrant' (or with - `--enable-alloca=notreentrant' when `alloca' is not available), - then naturally GMP is not reentrant. - - * `mpf_set_default_prec' and `mpf_init' use a global variable for the - selected precision. `mpf_init2' can be used instead, and in the - C++ interface an explicit precision to the `mpf_class' constructor. - - * `mpz_random' and the other old random number functions use a global - random state and are hence not reentrant. The newer random number - functions that accept a `gmp_randstate_t' parameter can be used - instead. - - * `gmp_randinit' (obsolete) returns an error indication through a - global variable, which is not thread safe. Applications are - advised to use `gmp_randinit_default' or `gmp_randinit_lc_2exp' - instead. - - * `mp_set_memory_functions' uses global variables to store the - selected memory allocation functions. - - * If the memory allocation functions set by a call to - `mp_set_memory_functions' (or `malloc' and friends by default) are - not reentrant, then GMP will not be reentrant either. - - * If the standard I/O functions such as `fwrite' are not reentrant - then the GMP I/O functions using them will not be reentrant either. - - * It's safe for two threads to read from the same GMP variable - simultaneously, but it's not safe for one to read while the - another might be writing, nor for two threads to write - simultaneously. It's not safe for two threads to generate a - random number from the same `gmp_randstate_t' simultaneously, - since this involves an update of that variable. - - -File: gmp.info, Node: Useful Macros and Constants, Next: Compatibility with older versions, Prev: Reentrancy, Up: GMP Basics - -3.8 Useful Macros and Constants -=============================== - - -- Global Constant: const int mp_bits_per_limb - The number of bits per limb. - - -- Macro: __GNU_MP_VERSION - -- Macro: __GNU_MP_VERSION_MINOR - -- Macro: __GNU_MP_VERSION_PATCHLEVEL - The major and minor GMP version, and patch level, respectively, as - integers. For GMP i.j, these numbers will be i, j, and 0, - respectively. For GMP i.j.k, these numbers will be i, j, and k, - respectively. - - -- Global Constant: const char * const gmp_version - The GMP version number, as a null-terminated string, in the form - "i.j.k". This release is "5.0.1". Note that the format "i.j" was - used when k was zero was used before version 4.3.0. - - -- Macro: __GMP_CC - -- Macro: __GMP_CFLAGS - The compiler and compiler flags, respectively, used when compiling - GMP, as strings. - - -File: gmp.info, Node: Compatibility with older versions, Next: Demonstration Programs, Prev: Useful Macros and Constants, Up: GMP Basics - -3.9 Compatibility with older versions -===================================== - -This version of GMP is upwardly binary compatible with all 4.x and 3.x -versions, and upwardly compatible at the source level with all 2.x -versions, with the following exceptions. - - * `mpn_gcd' had its source arguments swapped as of GMP 3.0, for - consistency with other `mpn' functions. - - * `mpf_get_prec' counted precision slightly differently in GMP 3.0 - and 3.0.1, but in 3.1 reverted to the 2.x style. - - There are a number of compatibility issues between GMP 1 and GMP 2 -that of course also apply when porting applications from GMP 1 to GMP -4. Please see the GMP 2 manual for details. - - The Berkeley MP compatibility library (*note BSD Compatible -Functions::) is source and binary compatible with the standard `libmp'. - - -File: gmp.info, Node: Demonstration Programs, Next: Efficiency, Prev: Compatibility with older versions, Up: GMP Basics - -3.10 Demonstration programs -=========================== - -The `demos' subdirectory has some sample programs using GMP. These -aren't built or installed, but there's a `Makefile' with rules for them. -For instance, - - make pexpr - ./pexpr 68^975+10 - -The following programs are provided - - * `pexpr' is an expression evaluator, the program used on the GMP - web page. - - * The `calc' subdirectory has a similar but simpler evaluator using - `lex' and `yacc'. - - * The `expr' subdirectory is yet another expression evaluator, a - library designed for ease of use within a C program. See - `demos/expr/README' for more information. - - * `factorize' is a Pollard-Rho factorization program. - - * `isprime' is a command-line interface to the `mpz_probab_prime_p' - function. - - * `primes' counts or lists primes in an interval, using a sieve. - - * `qcn' is an example use of `mpz_kronecker_ui' to estimate quadratic - class numbers. - - * The `perl' subdirectory is a comprehensive perl interface to GMP. - See `demos/perl/INSTALL' for more information. Documentation is - in POD format in `demos/perl/GMP.pm'. - - As an aside, consideration has been given at various times to some -sort of expression evaluation within the main GMP library. Going -beyond something minimal quickly leads to matters like user-defined -functions, looping, fixnums for control variables, etc, which are -considered outside the scope of GMP (much closer to language -interpreters or compilers, *Note Language Bindings::.) Something -simple for program input convenience may yet be a possibility, a -combination of the `expr' demo and the `pexpr' tree back-end perhaps. -But for now the above evaluators are offered as illustrations. - - -File: gmp.info, Node: Efficiency, Next: Debugging, Prev: Demonstration Programs, Up: GMP Basics - -3.11 Efficiency -=============== - -Small Operands - On small operands, the time for function call overheads and memory - allocation can be significant in comparison to actual calculation. - This is unavoidable in a general purpose variable precision - library, although GMP attempts to be as efficient as it can on - both large and small operands. - -Static Linking - On some CPUs, in particular the x86s, the static `libgmp.a' should - be used for maximum speed, since the PIC code in the shared - `libgmp.so' will have a small overhead on each function call and - global data address. For many programs this will be - insignificant, but for long calculations there's a gain to be had. - -Initializing and Clearing - Avoid excessive initializing and clearing of variables, since this - can be quite time consuming, especially in comparison to otherwise - fast operations like addition. - - A language interpreter might want to keep a free list or stack of - initialized variables ready for use. It should be possible to - integrate something like that with a garbage collector too. - -Reallocations - An `mpz_t' or `mpq_t' variable used to hold successively increasing - values will have its memory repeatedly `realloc'ed, which could be - quite slow or could fragment memory, depending on the C library. - If an application can estimate the final size then `mpz_init2' or - `mpz_realloc2' can be called to allocate the necessary space from - the beginning (*note Initializing Integers::). - - It doesn't matter if a size set with `mpz_init2' or `mpz_realloc2' - is too small, since all functions will do a further reallocation - if necessary. Badly overestimating memory required will waste - space though. - -`2exp' Functions - It's up to an application to call functions like `mpz_mul_2exp' - when appropriate. General purpose functions like `mpz_mul' make - no attempt to identify powers of two or other special forms, - because such inputs will usually be very rare and testing every - time would be wasteful. - -`ui' and `si' Functions - The `ui' functions and the small number of `si' functions exist for - convenience and should be used where applicable. But if for - example an `mpz_t' contains a value that fits in an `unsigned - long' there's no need extract it and call a `ui' function, just - use the regular `mpz' function. - -In-Place Operations - `mpz_abs', `mpq_abs', `mpf_abs', `mpz_neg', `mpq_neg' and - `mpf_neg' are fast when used for in-place operations like - `mpz_abs(x,x)', since in the current implementation only a single - field of `x' needs changing. On suitable compilers (GCC for - instance) this is inlined too. - - `mpz_add_ui', `mpz_sub_ui', `mpf_add_ui' and `mpf_sub_ui' benefit - from an in-place operation like `mpz_add_ui(x,x,y)', since usually - only one or two limbs of `x' will need to be changed. The same - applies to the full precision `mpz_add' etc if `y' is small. If - `y' is big then cache locality may be helped, but that's all. - - `mpz_mul' is currently the opposite, a separate destination is - slightly better. A call like `mpz_mul(x,x,y)' will, unless `y' is - only one limb, make a temporary copy of `x' before forming the - result. Normally that copying will only be a tiny fraction of the - time for the multiply, so this is not a particularly important - consideration. - - `mpz_set', `mpq_set', `mpq_set_num', `mpf_set', etc, make no - attempt to recognise a copy of something to itself, so a call like - `mpz_set(x,x)' will be wasteful. Naturally that would never be - written deliberately, but if it might arise from two pointers to - the same object then a test to avoid it might be desirable. - - if (x != y) - mpz_set (x, y); - - Note that it's never worth introducing extra `mpz_set' calls just - to get in-place operations. If a result should go to a particular - variable then just direct it there and let GMP take care of data - movement. - -Divisibility Testing (Small Integers) - `mpz_divisible_ui_p' and `mpz_congruent_ui_p' are the best - functions for testing whether an `mpz_t' is divisible by an - individual small integer. They use an algorithm which is faster - than `mpz_tdiv_ui', but which gives no useful information about - the actual remainder, only whether it's zero (or a particular - value). - - However when testing divisibility by several small integers, it's - best to take a remainder modulo their product, to save - multi-precision operations. For instance to test whether a number - is divisible by any of 23, 29 or 31 take a remainder modulo - 23*29*31 = 20677 and then test that. - - The division functions like `mpz_tdiv_q_ui' which give a quotient - as well as a remainder are generally a little slower than the - remainder-only functions like `mpz_tdiv_ui'. If the quotient is - only rarely wanted then it's probably best to just take a - remainder and then go back and calculate the quotient if and when - it's wanted (`mpz_divexact_ui' can be used if the remainder is - zero). - -Rational Arithmetic - The `mpq' functions operate on `mpq_t' values with no common - factors in the numerator and denominator. Common factors are - checked-for and cast out as necessary. In general, cancelling - factors every time is the best approach since it minimizes the - sizes for subsequent operations. - - However, applications that know something about the factorization - of the values they're working with might be able to avoid some of - the GCDs used for canonicalization, or swap them for divisions. - For example when multiplying by a prime it's enough to check for - factors of it in the denominator instead of doing a full GCD. Or - when forming a big product it might be known that very little - cancellation will be possible, and so canonicalization can be left - to the end. - - The `mpq_numref' and `mpq_denref' macros give access to the - numerator and denominator to do things outside the scope of the - supplied `mpq' functions. *Note Applying Integer Functions::. - - The canonical form for rationals allows mixed-type `mpq_t' and - integer additions or subtractions to be done directly with - multiples of the denominator. This will be somewhat faster than - `mpq_add'. For example, - - /* mpq increment */ - mpz_add (mpq_numref(q), mpq_numref(q), mpq_denref(q)); - - /* mpq += unsigned long */ - mpz_addmul_ui (mpq_numref(q), mpq_denref(q), 123UL); - - /* mpq -= mpz */ - mpz_submul (mpq_numref(q), mpq_denref(q), z); - -Number Sequences - Functions like `mpz_fac_ui', `mpz_fib_ui' and `mpz_bin_uiui' are - designed for calculating isolated values. If a range of values is - wanted it's probably best to call to get a starting point and - iterate from there. - -Text Input/Output - Hexadecimal or octal are suggested for input or output in text - form. Power-of-2 bases like these can be converted much more - efficiently than other bases, like decimal. For big numbers - there's usually nothing of particular interest to be seen in the - digits, so the base doesn't matter much. - - Maybe we can hope octal will one day become the normal base for - everyday use, as proposed by King Charles XII of Sweden and later - reformers. - - -File: gmp.info, Node: Debugging, Next: Profiling, Prev: Efficiency, Up: GMP Basics - -3.12 Debugging -============== - -Stack Overflow - Depending on the system, a segmentation violation or bus error - might be the only indication of stack overflow. See - `--enable-alloca' choices in *Note Build Options::, for how to - address this. - - In new enough versions of GCC, `-fstack-check' may be able to - ensure an overflow is recognised by the system before too much - damage is done, or `-fstack-limit-symbol' or - `-fstack-limit-register' may be able to add checking if the system - itself doesn't do any (*note Options for Code Generation: - (gcc)Code Gen Options.). These options must be added to the - `CFLAGS' used in the GMP build (*note Build Options::), adding - them just to an application will have no effect. Note also - they're a slowdown, adding overhead to each function call and each - stack allocation. - -Heap Problems - The most likely cause of application problems with GMP is heap - corruption. Failing to `init' GMP variables will have - unpredictable effects, and corruption arising elsewhere in a - program may well affect GMP. Initializing GMP variables more than - once or failing to clear them will cause memory leaks. - - In all such cases a `malloc' debugger is recommended. On a GNU or - BSD system the standard C library `malloc' has some diagnostic - facilities, see *Note Allocation Debugging: (libc)Allocation - Debugging, or `man 3 malloc'. Other possibilities, in no - particular order, include - - `http://www.inf.ethz.ch/personal/biere/projects/ccmalloc/' - `http://dmalloc.com/' - `http://www.perens.com/FreeSoftware/' (electric fence) - `http://packages.debian.org/stable/devel/fda' - `http://www.gnupdate.org/components/leakbug/' - `http://people.redhat.com/~otaylor/memprof/' - `http://www.cbmamiga.demon.co.uk/mpatrol/' - - The GMP default allocation routines in `memory.c' also have a - simple sentinel scheme which can be enabled with `#define DEBUG' - in that file. This is mainly designed for detecting buffer - overruns during GMP development, but might find other uses. - -Stack Backtraces - On some systems the compiler options GMP uses by default can - interfere with debugging. In particular on x86 and 68k systems - `-fomit-frame-pointer' is used and this generally inhibits stack - backtracing. Recompiling without such options may help while - debugging, though the usual caveats about it potentially moving a - memory problem or hiding a compiler bug will apply. - -GDB, the GNU Debugger - A sample `.gdbinit' is included in the distribution, showing how - to call some undocumented dump functions to print GMP variables - from within GDB. Note that these functions shouldn't be used in - final application code since they're undocumented and may be - subject to incompatible changes in future versions of GMP. - -Source File Paths - GMP has multiple source files with the same name, in different - directories. For example `mpz', `mpq' and `mpf' each have an - `init.c'. If the debugger can't already determine the right one - it may help to build with absolute paths on each C file. One way - to do that is to use a separate object directory with an absolute - path to the source directory. - - cd /my/build/dir - /my/source/dir/gmp-5.0.1/configure - - This works via `VPATH', and might require GNU `make'. Alternately - it might be possible to change the `.c.lo' rules appropriately. - -Assertion Checking - The build option `--enable-assert' is available to add some - consistency checks to the library (see *Note Build Options::). - These are likely to be of limited value to most applications. - Assertion failures are just as likely to indicate memory - corruption as a library or compiler bug. - - Applications using the low-level `mpn' functions, however, will - benefit from `--enable-assert' since it adds checks on the - parameters of most such functions, many of which have subtle - restrictions on their usage. Note however that only the generic C - code has checks, not the assembly code, so CPU `none' should be - used for maximum checking. - -Temporary Memory Checking - The build option `--enable-alloca=debug' arranges that each block - of temporary memory in GMP is allocated with a separate call to - `malloc' (or the allocation function set with - `mp_set_memory_functions'). - - This can help a malloc debugger detect accesses outside the - intended bounds, or detect memory not released. In a normal - build, on the other hand, temporary memory is allocated in blocks - which GMP divides up for its own use, or may be allocated with a - compiler builtin `alloca' which will go nowhere near any malloc - debugger hooks. - -Maximum Debuggability - To summarize the above, a GMP build for maximum debuggability - would be - - ./configure --disable-shared --enable-assert \ - --enable-alloca=debug --host=none CFLAGS=-g - - For C++, add `--enable-cxx CXXFLAGS=-g'. - -Checker - The GCC checker (`http://savannah.nongnu.org/projects/checker/') - can be used with GMP. It contains a stub library which means GMP - applications compiled with checker can use a normal GMP build. - - A build of GMP with checking within GMP itself can be made. This - will run very very slowly. On GNU/Linux for example, - - ./configure --host=none-pc-linux-gnu CC=checkergcc - - `--host=none' must be used, since the GMP assembly code doesn't - support the checking scheme. The GMP C++ features cannot be used, - since current versions of checker (0.9.9.1) don't yet support the - standard C++ library. - -Valgrind - The valgrind program (`http://valgrind.org/') is a memory checker - for x86s. It translates and emulates machine instructions to do - strong checks for uninitialized data (at the level of individual - bits), memory accesses through bad pointers, and memory leaks. - - Recent versions of Valgrind are getting support for MMX and - SSE/SSE2 instructions, for past versions GMP will need to be - configured not to use those, ie. for an x86 without them (for - instance plain `i486'). - -Other Problems - Any suspected bug in GMP itself should be isolated to make sure - it's not an application problem, see *Note Reporting Bugs::. - - -File: gmp.info, Node: Profiling, Next: Autoconf, Prev: Debugging, Up: GMP Basics - -3.13 Profiling -============== - -Running a program under a profiler is a good way to find where it's -spending most time and where improvements can be best sought. The -profiling choices for a GMP build are as follows. - -`--disable-profiling' - The default is to add nothing special for profiling. - - It should be possible to just compile the mainline of a program - with `-p' and use `prof' to get a profile consisting of - timer-based sampling of the program counter. Most of the GMP - assembly code has the necessary symbol information. - - This approach has the advantage of minimizing interference with - normal program operation, but on most systems the resolution of - the sampling is quite low (10 milliseconds for instance), - requiring long runs to get accurate information. - -`--enable-profiling=prof' - Build with support for the system `prof', which means `-p' added - to the `CFLAGS'. - - This provides call counting in addition to program counter - sampling, which allows the most frequently called routines to be - identified, and an average time spent in each routine to be - determined. - - The x86 assembly code has support for this option, but on other - processors the assembly routines will be as if compiled without - `-p' and therefore won't appear in the call counts. - - On some systems, such as GNU/Linux, `-p' in fact means `-pg' and in - this case `--enable-profiling=gprof' described below should be used - instead. - -`--enable-profiling=gprof' - Build with support for `gprof', which means `-pg' added to the - `CFLAGS'. - - This provides call graph construction in addition to call counting - and program counter sampling, which makes it possible to count - calls coming from different locations. For example the number of - calls to `mpn_mul' from `mpz_mul' versus the number from - `mpf_mul'. The program counter sampling is still flat though, so - only a total time in `mpn_mul' would be accumulated, not a - separate amount for each call site. - - The x86 assembly code has support for this option, but on other - processors the assembly routines will be as if compiled without - `-pg' and therefore not be included in the call counts. - - On x86 and m68k systems `-pg' and `-fomit-frame-pointer' are - incompatible, so the latter is omitted from the default flags in - that case, which might result in poorer code generation. - - Incidentally, it should be possible to use the `gprof' program - with a plain `--enable-profiling=prof' build. But in that case - only the `gprof -p' flat profile and call counts can be expected - to be valid, not the `gprof -q' call graph. - -`--enable-profiling=instrument' - Build with the GCC option `-finstrument-functions' added to the - `CFLAGS' (*note Options for Code Generation: (gcc)Code Gen - Options.). - - This inserts special instrumenting calls at the start and end of - each function, allowing exact timing and full call graph - construction. - - This instrumenting is not normally a standard system feature and - will require support from an external library, such as - - `http://sourceforge.net/projects/fnccheck/' - - This should be included in `LIBS' during the GMP configure so that - test programs will link. For example, - - ./configure --enable-profiling=instrument LIBS=-lfc - - On a GNU system the C library provides dummy instrumenting - functions, so programs compiled with this option will link. In - this case it's only necessary to ensure the correct library is - added when linking an application. - - The x86 assembly code supports this option, but on other - processors the assembly routines will be as if compiled without - `-finstrument-functions' meaning time spent in them will - effectively be attributed to their caller. - - -File: gmp.info, Node: Autoconf, Next: Emacs, Prev: Profiling, Up: GMP Basics - -3.14 Autoconf -============= - -Autoconf based applications can easily check whether GMP is installed. -The only thing to be noted is that GMP library symbols from version 3 -onwards have prefixes like `__gmpz'. The following therefore would be -a simple test, - - AC_CHECK_LIB(gmp, __gmpz_init) - - This just uses the default `AC_CHECK_LIB' actions for found or not -found, but an application that must have GMP would want to generate an -error if not found. For example, - - AC_CHECK_LIB(gmp, __gmpz_init, , - [AC_MSG_ERROR([GNU MP not found, see http://gmplib.org/])]) - - If functions added in some particular version of GMP are required, -then one of those can be used when checking. For example `mpz_mul_si' -was added in GMP 3.1, - - AC_CHECK_LIB(gmp, __gmpz_mul_si, , - [AC_MSG_ERROR( - [GNU MP not found, or not 3.1 or up, see http://gmplib.org/])]) - - An alternative would be to test the version number in `gmp.h' using -say `AC_EGREP_CPP'. That would make it possible to test the exact -version, if some particular sub-minor release is known to be necessary. - - In general it's recommended that applications should simply demand a -new enough GMP rather than trying to provide supplements for features -not available in past versions. - - Occasionally an application will need or want to know the size of a -type at configuration or preprocessing time, not just with `sizeof' in -the code. This can be done in the normal way with `mp_limb_t' etc, but -GMP 4.0 or up is best for this, since prior versions needed certain -`-D' defines on systems using a `long long' limb. The following would -suit Autoconf 2.50 or up, - - AC_CHECK_SIZEOF(mp_limb_t, , [#include ]) - - -File: gmp.info, Node: Emacs, Prev: Autoconf, Up: GMP Basics - -3.15 Emacs -========== - - (`info-lookup-symbol') is a good way to find documentation on -C functions while editing (*note Info Documentation Lookup: (emacs)Info -Lookup.). - - The GMP manual can be included in such lookups by putting the -following in your `.emacs', - - (eval-after-load "info-look" - '(let ((mode-value (assoc 'c-mode (assoc 'symbol info-lookup-alist)))) - (setcar (nthcdr 3 mode-value) - (cons '("(gmp)Function Index" nil "^ -.* " "\\>") - (nth 3 mode-value))))) - - -File: gmp.info, Node: Reporting Bugs, Next: Integer Functions, Prev: GMP Basics, Up: Top - -4 Reporting Bugs -**************** - -If you think you have found a bug in the GMP library, please -investigate it and report it. We have made this library available to -you, and it is not too much to ask you to report the bugs you find. - - Before you report a bug, check it's not already addressed in *Note -Known Build Problems::, or perhaps *Note Notes for Particular -Systems::. You may also want to check `http://gmplib.org/' for patches -for this release. - - Please include the following in any report, - - * The GMP version number, and if pre-packaged or patched then say so. - - * A test program that makes it possible for us to reproduce the bug. - Include instructions on how to run the program. - - * A description of what is wrong. If the results are incorrect, in - what way. If you get a crash, say so. - - * If you get a crash, include a stack backtrace from the debugger if - it's informative (`where' in `gdb', or `$C' in `adb'). - - * Please do not send core dumps, executables or `strace's. - - * The configuration options you used when building GMP, if any. - - * The name of the compiler and its version. For `gcc', get the - version with `gcc -v', otherwise perhaps `what `which cc`', or - similar. - - * The output from running `uname -a'. - - * The output from running `./config.guess', and from running - `./configfsf.guess' (might be the same). - - * If the bug is related to `configure', then the compressed contents - of `config.log'. - - * If the bug is related to an `asm' file not assembling, then the - contents of `config.m4' and the offending line or lines from the - temporary `mpn/tmp-.s'. - - Please make an effort to produce a self-contained report, with -something definite that can be tested or debugged. Vague queries or -piecemeal messages are difficult to act on and don't help the -development effort. - - It is not uncommon that an observed problem is actually due to a bug -in the compiler; the GMP code tends to explore interesting corners in -compilers. - - If your bug report is good, we will do our best to help you get a -corrected version of the library; if the bug report is poor, we won't -do anything about it (except maybe ask you to send a better report). - - Send your report to: . - - If you think something in this manual is unclear, or downright -incorrect, or if the language needs to be improved, please send a note -to the same address. - - -File: gmp.info, Node: Integer Functions, Next: Rational Number Functions, Prev: Reporting Bugs, Up: Top - -5 Integer Functions -******************* - -This chapter describes the GMP functions for performing integer -arithmetic. These functions start with the prefix `mpz_'. - - GMP integers are stored in objects of type `mpz_t'. - -* Menu: - -* Initializing Integers:: -* Assigning Integers:: -* Simultaneous Integer Init & Assign:: -* Converting Integers:: -* Integer Arithmetic:: -* Integer Division:: -* Integer Exponentiation:: -* Integer Roots:: -* Number Theoretic Functions:: -* Integer Comparisons:: -* Integer Logic and Bit Fiddling:: -* I/O of Integers:: -* Integer Random Numbers:: -* Integer Import and Export:: -* Miscellaneous Integer Functions:: -* Integer Special Functions:: - - -File: gmp.info, Node: Initializing Integers, Next: Assigning Integers, Prev: Integer Functions, Up: Integer Functions - -5.1 Initialization Functions -============================ - -The functions for integer arithmetic assume that all integer objects are -initialized. You do that by calling the function `mpz_init'. For -example, - - { - mpz_t integ; - mpz_init (integ); - ... - mpz_add (integ, ...); - ... - mpz_sub (integ, ...); - - /* Unless the program is about to exit, do ... */ - mpz_clear (integ); - } - - As you can see, you can store new values any number of times, once an -object is initialized. - - -- Function: void mpz_init (mpz_t X) - Initialize X, and set its value to 0. - - -- Function: void mpz_inits (mpz_t X, ...) - Initialize a NULL-terminated list of `mpz_t' variables, and set - their values to 0. - - -- Function: void mpz_init2 (mpz_t X, mp_bitcnt_t N) - Initialize X, with space for N-bit numbers, and set its value to 0. - Calling this function instead of `mpz_init' or `mpz_inits' is never - necessary; reallocation is handled automatically by GMP when - needed. - - N is only the initial space, X will grow automatically in the - normal way, if necessary, for subsequent values stored. - `mpz_init2' makes it possible to avoid such reallocations if a - maximum size is known in advance. - - -- Function: void mpz_clear (mpz_t X) - Free the space occupied by X. Call this function for all `mpz_t' - variables when you are done with them. - - -- Function: void mpz_clears (mpz_t X, ...) - Free the space occupied by a NULL-terminated list of `mpz_t' - variables. - - -- Function: void mpz_realloc2 (mpz_t X, mp_bitcnt_t N) - Change the space allocated for X to N bits. The value in X is - preserved if it fits, or is set to 0 if not. - - Calling this function is never necessary; reallocation is handled - automatically by GMP when needed. But this function can be used - to increase the space for a variable in order to avoid repeated - automatic reallocations, or to decrease it to give memory back to - the heap. - - -File: gmp.info, Node: Assigning Integers, Next: Simultaneous Integer Init & Assign, Prev: Initializing Integers, Up: Integer Functions - -5.2 Assignment Functions -======================== - -These functions assign new values to already initialized integers -(*note Initializing Integers::). - - -- Function: void mpz_set (mpz_t ROP, mpz_t OP) - -- Function: void mpz_set_ui (mpz_t ROP, unsigned long int OP) - -- Function: void mpz_set_si (mpz_t ROP, signed long int OP) - -- Function: void mpz_set_d (mpz_t ROP, double OP) - -- Function: void mpz_set_q (mpz_t ROP, mpq_t OP) - -- Function: void mpz_set_f (mpz_t ROP, mpf_t OP) - Set the value of ROP from OP. - - `mpz_set_d', `mpz_set_q' and `mpz_set_f' truncate OP to make it an - integer. - - -- Function: int mpz_set_str (mpz_t ROP, char *STR, int BASE) - Set the value of ROP from STR, a null-terminated C string in base - BASE. White space is allowed in the string, and is simply ignored. - - The BASE may vary from 2 to 62, or if BASE is 0, then the leading - characters are used: `0x' and `0X' for hexadecimal, `0b' and `0B' - for binary, `0' for octal, or decimal otherwise. - - For bases up to 36, case is ignored; upper-case and lower-case - letters have the same value. For bases 37 to 62, upper-case - letter represent the usual 10..35 while lower-case letter - represent 36..61. - - This function returns 0 if the entire string is a valid number in - base BASE. Otherwise it returns -1. - - -- Function: void mpz_swap (mpz_t ROP1, mpz_t ROP2) - Swap the values ROP1 and ROP2 efficiently. - - -File: gmp.info, Node: Simultaneous Integer Init & Assign, Next: Converting Integers, Prev: Assigning Integers, Up: Integer Functions - -5.3 Combined Initialization and Assignment Functions -==================================================== - -For convenience, GMP provides a parallel series of initialize-and-set -functions which initialize the output and then store the value there. -These functions' names have the form `mpz_init_set...' - - Here is an example of using one: - - { - mpz_t pie; - mpz_init_set_str (pie, "3141592653589793238462643383279502884", 10); - ... - mpz_sub (pie, ...); - ... - mpz_clear (pie); - } - -Once the integer has been initialized by any of the `mpz_init_set...' -functions, it can be used as the source or destination operand for the -ordinary integer functions. Don't use an initialize-and-set function -on a variable already initialized! - - -- Function: void mpz_init_set (mpz_t ROP, mpz_t OP) - -- Function: void mpz_init_set_ui (mpz_t ROP, unsigned long int OP) - -- Function: void mpz_init_set_si (mpz_t ROP, signed long int OP) - -- Function: void mpz_init_set_d (mpz_t ROP, double OP) - Initialize ROP with limb space and set the initial numeric value - from OP. - - -- Function: int mpz_init_set_str (mpz_t ROP, char *STR, int BASE) - Initialize ROP and set its value like `mpz_set_str' (see its - documentation above for details). - - If the string is a correct base BASE number, the function returns - 0; if an error occurs it returns -1. ROP is initialized even if - an error occurs. (I.e., you have to call `mpz_clear' for it.) - - -File: gmp.info, Node: Converting Integers, Next: Integer Arithmetic, Prev: Simultaneous Integer Init & Assign, Up: Integer Functions - -5.4 Conversion Functions -======================== - -This section describes functions for converting GMP integers to -standard C types. Functions for converting _to_ GMP integers are -described in *Note Assigning Integers:: and *Note I/O of Integers::. - - -- Function: unsigned long int mpz_get_ui (mpz_t OP) - Return the value of OP as an `unsigned long'. - - If OP is too big to fit an `unsigned long' then just the least - significant bits that do fit are returned. The sign of OP is - ignored, only the absolute value is used. - - -- Function: signed long int mpz_get_si (mpz_t OP) - If OP fits into a `signed long int' return the value of OP. - Otherwise return the least significant part of OP, with the same - sign as OP. - - If OP is too big to fit in a `signed long int', the returned - result is probably not very useful. To find out if the value will - fit, use the function `mpz_fits_slong_p'. - - -- Function: double mpz_get_d (mpz_t OP) - Convert OP to a `double', truncating if necessary (ie. rounding - towards zero). - - If the exponent from the conversion is too big, the result is - system dependent. An infinity is returned where available. A - hardware overflow trap may or may not occur. - - -- Function: double mpz_get_d_2exp (signed long int *EXP, mpz_t OP) - Convert OP to a `double', truncating if necessary (ie. rounding - towards zero), and returning the exponent separately. - - The return value is in the range 0.5<=abs(D)<1 and the exponent is - stored to `*EXP'. D * 2^EXP is the (truncated) OP value. If OP - is zero, the return is 0.0 and 0 is stored to `*EXP'. - - This is similar to the standard C `frexp' function (*note - Normalization Functions: (libc)Normalization Functions.). - - -- Function: char * mpz_get_str (char *STR, int BASE, mpz_t OP) - Convert OP to a string of digits in base BASE. The base argument - may vary from 2 to 62 or from -2 to -36. - - For BASE in the range 2..36, digits and lower-case letters are - used; for -2..-36, digits and upper-case letters are used; for - 37..62, digits, upper-case letters, and lower-case letters (in - that significance order) are used. - - If STR is `NULL', the result string is allocated using the current - allocation function (*note Custom Allocation::). The block will be - `strlen(str)+1' bytes, that being exactly enough for the string and - null-terminator. - - If STR is not `NULL', it should point to a block of storage large - enough for the result, that being `mpz_sizeinbase (OP, BASE) + 2'. - The two extra bytes are for a possible minus sign, and the - null-terminator. - - A pointer to the result string is returned, being either the - allocated block, or the given STR. - - -File: gmp.info, Node: Integer Arithmetic, Next: Integer Division, Prev: Converting Integers, Up: Integer Functions - -5.5 Arithmetic Functions -======================== - - -- Function: void mpz_add (mpz_t ROP, mpz_t OP1, mpz_t OP2) - -- Function: void mpz_add_ui (mpz_t ROP, mpz_t OP1, unsigned long int - OP2) - Set ROP to OP1 + OP2. - - -- Function: void mpz_sub (mpz_t ROP, mpz_t OP1, mpz_t OP2) - -- Function: void mpz_sub_ui (mpz_t ROP, mpz_t OP1, unsigned long int - OP2) - -- Function: void mpz_ui_sub (mpz_t ROP, unsigned long int OP1, mpz_t - OP2) - Set ROP to OP1 - OP2. - - -- Function: void mpz_mul (mpz_t ROP, mpz_t OP1, mpz_t OP2) - -- Function: void mpz_mul_si (mpz_t ROP, mpz_t OP1, long int OP2) - -- Function: void mpz_mul_ui (mpz_t ROP, mpz_t OP1, unsigned long int - OP2) - Set ROP to OP1 times OP2. - - -- Function: void mpz_addmul (mpz_t ROP, mpz_t OP1, mpz_t OP2) - -- Function: void mpz_addmul_ui (mpz_t ROP, mpz_t OP1, unsigned long - int OP2) - Set ROP to ROP + OP1 times OP2. - - -- Function: void mpz_submul (mpz_t ROP, mpz_t OP1, mpz_t OP2) - -- Function: void mpz_submul_ui (mpz_t ROP, mpz_t OP1, unsigned long - int OP2) - Set ROP to ROP - OP1 times OP2. - - -- Function: void mpz_mul_2exp (mpz_t ROP, mpz_t OP1, mp_bitcnt_t OP2) - Set ROP to OP1 times 2 raised to OP2. This operation can also be - defined as a left shift by OP2 bits. - - -- Function: void mpz_neg (mpz_t ROP, mpz_t OP) - Set ROP to -OP. - - -- Function: void mpz_abs (mpz_t ROP, mpz_t OP) - Set ROP to the absolute value of OP. - - -File: gmp.info, Node: Integer Division, Next: Integer Exponentiation, Prev: Integer Arithmetic, Up: Integer Functions - -5.6 Division Functions -====================== - -Division is undefined if the divisor is zero. Passing a zero divisor -to the division or modulo functions (including the modular powering -functions `mpz_powm' and `mpz_powm_ui'), will cause an intentional -division by zero. This lets a program handle arithmetic exceptions in -these functions the same way as for normal C `int' arithmetic. - - -- Function: void mpz_cdiv_q (mpz_t Q, mpz_t N, mpz_t D) - -- Function: void mpz_cdiv_r (mpz_t R, mpz_t N, mpz_t D) - -- Function: void mpz_cdiv_qr (mpz_t Q, mpz_t R, mpz_t N, mpz_t D) - -- Function: unsigned long int mpz_cdiv_q_ui (mpz_t Q, mpz_t N, - unsigned long int D) - -- Function: unsigned long int mpz_cdiv_r_ui (mpz_t R, mpz_t N, - unsigned long int D) - -- Function: unsigned long int mpz_cdiv_qr_ui (mpz_t Q, mpz_t R, - mpz_t N, unsigned long int D) - -- Function: unsigned long int mpz_cdiv_ui (mpz_t N, - unsigned long int D) - -- Function: void mpz_cdiv_q_2exp (mpz_t Q, mpz_t N, mp_bitcnt_t B) - -- Function: void mpz_cdiv_r_2exp (mpz_t R, mpz_t N, mp_bitcnt_t B) - - -- Function: void mpz_fdiv_q (mpz_t Q, mpz_t N, mpz_t D) - -- Function: void mpz_fdiv_r (mpz_t R, mpz_t N, mpz_t D) - -- Function: void mpz_fdiv_qr (mpz_t Q, mpz_t R, mpz_t N, mpz_t D) - -- Function: unsigned long int mpz_fdiv_q_ui (mpz_t Q, mpz_t N, - unsigned long int D) - -- Function: unsigned long int mpz_fdiv_r_ui (mpz_t R, mpz_t N, - unsigned long int D) - -- Function: unsigned long int mpz_fdiv_qr_ui (mpz_t Q, mpz_t R, - mpz_t N, unsigned long int D) - -- Function: unsigned long int mpz_fdiv_ui (mpz_t N, - unsigned long int D) - -- Function: void mpz_fdiv_q_2exp (mpz_t Q, mpz_t N, mp_bitcnt_t B) - -- Function: void mpz_fdiv_r_2exp (mpz_t R, mpz_t N, mp_bitcnt_t B) - - -- Function: void mpz_tdiv_q (mpz_t Q, mpz_t N, mpz_t D) - -- Function: void mpz_tdiv_r (mpz_t R, mpz_t N, mpz_t D) - -- Function: void mpz_tdiv_qr (mpz_t Q, mpz_t R, mpz_t N, mpz_t D) - -- Function: unsigned long int mpz_tdiv_q_ui (mpz_t Q, mpz_t N, - unsigned long int D) - -- Function: unsigned long int mpz_tdiv_r_ui (mpz_t R, mpz_t N, - unsigned long int D) - -- Function: unsigned long int mpz_tdiv_qr_ui (mpz_t Q, mpz_t R, - mpz_t N, unsigned long int D) - -- Function: unsigned long int mpz_tdiv_ui (mpz_t N, - unsigned long int D) - -- Function: void mpz_tdiv_q_2exp (mpz_t Q, mpz_t N, mp_bitcnt_t B) - -- Function: void mpz_tdiv_r_2exp (mpz_t R, mpz_t N, mp_bitcnt_t B) - - Divide N by D, forming a quotient Q and/or remainder R. For the - `2exp' functions, D=2^B. The rounding is in three styles, each - suiting different applications. - - * `cdiv' rounds Q up towards +infinity, and R will have the - opposite sign to D. The `c' stands for "ceil". - - * `fdiv' rounds Q down towards -infinity, and R will have the - same sign as D. The `f' stands for "floor". - - * `tdiv' rounds Q towards zero, and R will have the same sign - as N. The `t' stands for "truncate". - - In all cases Q and R will satisfy N=Q*D+R, and R will satisfy - 0<=abs(R) 0 and that MOD is odd. - - This function is designed to take the same time and have the same - cache access patterns for any two same-size arguments, assuming - that function arguments are placed at the same position and that - the machine state is identical upon function entry. This function - is intended for cryptographic purposes, where resilience to - side-channel attacks is desired. - - -- Function: void mpz_pow_ui (mpz_t ROP, mpz_t BASE, unsigned long int - EXP) - -- Function: void mpz_ui_pow_ui (mpz_t ROP, unsigned long int BASE, - unsigned long int EXP) - Set ROP to BASE raised to EXP. The case 0^0 yields 1. - - -File: gmp.info, Node: Integer Roots, Next: Number Theoretic Functions, Prev: Integer Exponentiation, Up: Integer Functions - -5.8 Root Extraction Functions -============================= - - -- Function: int mpz_root (mpz_t ROP, mpz_t OP, unsigned long int N) - Set ROP to the truncated integer part of the Nth root of OP. - Return non-zero if the computation was exact, i.e., if OP is ROP - to the Nth power. - - -- Function: void mpz_rootrem (mpz_t ROOT, mpz_t REM, mpz_t U, - unsigned long int N) - Set ROOT to the truncated integer part of the Nth root of U. Set - REM to the remainder, U-ROOT**N. - - -- Function: void mpz_sqrt (mpz_t ROP, mpz_t OP) - Set ROP to the truncated integer part of the square root of OP. - - -- Function: void mpz_sqrtrem (mpz_t ROP1, mpz_t ROP2, mpz_t OP) - Set ROP1 to the truncated integer part of the square root of OP, - like `mpz_sqrt'. Set ROP2 to the remainder OP-ROP1*ROP1, which - will be zero if OP is a perfect square. - - If ROP1 and ROP2 are the same variable, the results are undefined. - - -- Function: int mpz_perfect_power_p (mpz_t OP) - Return non-zero if OP is a perfect power, i.e., if there exist - integers A and B, with B>1, such that OP equals A raised to the - power B. - - Under this definition both 0 and 1 are considered to be perfect - powers. Negative values of OP are accepted, but of course can - only be odd perfect powers. - - -- Function: int mpz_perfect_square_p (mpz_t OP) - Return non-zero if OP is a perfect square, i.e., if the square - root of OP is an integer. Under this definition both 0 and 1 are - considered to be perfect squares. - - -File: gmp.info, Node: Number Theoretic Functions, Next: Integer Comparisons, Prev: Integer Roots, Up: Integer Functions - -5.9 Number Theoretic Functions -============================== - - -- Function: int mpz_probab_prime_p (mpz_t N, int REPS) - Determine whether N is prime. Return 2 if N is definitely prime, - return 1 if N is probably prime (without being certain), or return - 0 if N is definitely composite. - - This function does some trial divisions, then some Miller-Rabin - probabilistic primality tests. REPS controls how many such tests - are done, 5 to 10 is a reasonable number, more will reduce the - chances of a composite being returned as "probably prime". - - Miller-Rabin and similar tests can be more properly called - compositeness tests. Numbers which fail are known to be composite - but those which pass might be prime or might be composite. Only a - few composites pass, hence those which pass are considered - probably prime. - - -- Function: void mpz_nextprime (mpz_t ROP, mpz_t OP) - Set ROP to the next prime greater than OP. - - This function uses a probabilistic algorithm to identify primes. - For practical purposes it's adequate, the chance of a composite - passing will be extremely small. - - -- Function: void mpz_gcd (mpz_t ROP, mpz_t OP1, mpz_t OP2) - Set ROP to the greatest common divisor of OP1 and OP2. The result - is always positive even if one or both input operands are negative. - - -- Function: unsigned long int mpz_gcd_ui (mpz_t ROP, mpz_t OP1, - unsigned long int OP2) - Compute the greatest common divisor of OP1 and OP2. If ROP is not - `NULL', store the result there. - - If the result is small enough to fit in an `unsigned long int', it - is returned. If the result does not fit, 0 is returned, and the - result is equal to the argument OP1. Note that the result will - always fit if OP2 is non-zero. - - -- Function: void mpz_gcdext (mpz_t G, mpz_t S, mpz_t T, mpz_t A, - mpz_t B) - Set G to the greatest common divisor of A and B, and in addition - set S and T to coefficients satisfying A*S + B*T = G. The value - in G is always positive, even if one or both of A and B are - negative. The values in S and T are chosen such that abs(S) <= - abs(B) and abs(T) <= abs(A). - - If T is `NULL' then that value is not computed. - - -- Function: void mpz_lcm (mpz_t ROP, mpz_t OP1, mpz_t OP2) - -- Function: void mpz_lcm_ui (mpz_t ROP, mpz_t OP1, unsigned long OP2) - Set ROP to the least common multiple of OP1 and OP2. ROP is - always positive, irrespective of the signs of OP1 and OP2. ROP - will be zero if either OP1 or OP2 is zero. - - -- Function: int mpz_invert (mpz_t ROP, mpz_t OP1, mpz_t OP2) - Compute the inverse of OP1 modulo OP2 and put the result in ROP. - If the inverse exists, the return value is non-zero and ROP will - satisfy 0 <= ROP < OP2. If an inverse doesn't exist the return - value is zero and ROP is undefined. - - -- Function: int mpz_jacobi (mpz_t A, mpz_t B) - Calculate the Jacobi symbol (A/B). This is defined only for B odd. - - -- Function: int mpz_legendre (mpz_t A, mpz_t P) - Calculate the Legendre symbol (A/P). This is defined only for P - an odd positive prime, and for such P it's identical to the Jacobi - symbol. - - -- Function: int mpz_kronecker (mpz_t A, mpz_t B) - -- Function: int mpz_kronecker_si (mpz_t A, long B) - -- Function: int mpz_kronecker_ui (mpz_t A, unsigned long B) - -- Function: int mpz_si_kronecker (long A, mpz_t B) - -- Function: int mpz_ui_kronecker (unsigned long A, mpz_t B) - Calculate the Jacobi symbol (A/B) with the Kronecker extension - (a/2)=(2/a) when a odd, or (a/2)=0 when a even. - - When B is odd the Jacobi symbol and Kronecker symbol are - identical, so `mpz_kronecker_ui' etc can be used for mixed - precision Jacobi symbols too. - - For more information see Henri Cohen section 1.4.2 (*note - References::), or any number theory textbook. See also the - example program `demos/qcn.c' which uses `mpz_kronecker_ui'. - - -- Function: mp_bitcnt_t mpz_remove (mpz_t ROP, mpz_t OP, mpz_t F) - Remove all occurrences of the factor F from OP and store the - result in ROP. The return value is how many such occurrences were - removed. - - -- Function: void mpz_fac_ui (mpz_t ROP, unsigned long int OP) - Set ROP to OP!, the factorial of OP. - - -- Function: void mpz_bin_ui (mpz_t ROP, mpz_t N, unsigned long int K) - -- Function: void mpz_bin_uiui (mpz_t ROP, unsigned long int N, - unsigned long int K) - Compute the binomial coefficient N over K and store the result in - ROP. Negative values of N are supported by `mpz_bin_ui', using - the identity bin(-n,k) = (-1)^k * bin(n+k-1,k), see Knuth volume 1 - section 1.2.6 part G. - - -- Function: void mpz_fib_ui (mpz_t FN, unsigned long int N) - -- Function: void mpz_fib2_ui (mpz_t FN, mpz_t FNSUB1, unsigned long - int N) - `mpz_fib_ui' sets FN to to F[n], the N'th Fibonacci number. - `mpz_fib2_ui' sets FN to F[n], and FNSUB1 to F[n-1]. - - These functions are designed for calculating isolated Fibonacci - numbers. When a sequence of values is wanted it's best to start - with `mpz_fib2_ui' and iterate the defining F[n+1]=F[n]+F[n-1] or - similar. - - -- Function: void mpz_lucnum_ui (mpz_t LN, unsigned long int N) - -- Function: void mpz_lucnum2_ui (mpz_t LN, mpz_t LNSUB1, unsigned - long int N) - `mpz_lucnum_ui' sets LN to to L[n], the N'th Lucas number. - `mpz_lucnum2_ui' sets LN to L[n], and LNSUB1 to L[n-1]. - - These functions are designed for calculating isolated Lucas - numbers. When a sequence of values is wanted it's best to start - with `mpz_lucnum2_ui' and iterate the defining L[n+1]=L[n]+L[n-1] - or similar. - - The Fibonacci numbers and Lucas numbers are related sequences, so - it's never necessary to call both `mpz_fib2_ui' and - `mpz_lucnum2_ui'. The formulas for going from Fibonacci to Lucas - can be found in *Note Lucas Numbers Algorithm::, the reverse is - straightforward too. - - -File: gmp.info, Node: Integer Comparisons, Next: Integer Logic and Bit Fiddling, Prev: Number Theoretic Functions, Up: Integer Functions - -5.10 Comparison Functions -========================= - - -- Function: int mpz_cmp (mpz_t OP1, mpz_t OP2) - -- Function: int mpz_cmp_d (mpz_t OP1, double OP2) - -- Macro: int mpz_cmp_si (mpz_t OP1, signed long int OP2) - -- Macro: int mpz_cmp_ui (mpz_t OP1, unsigned long int OP2) - Compare OP1 and OP2. Return a positive value if OP1 > OP2, zero - if OP1 = OP2, or a negative value if OP1 < OP2. - - `mpz_cmp_ui' and `mpz_cmp_si' are macros and will evaluate their - arguments more than once. `mpz_cmp_d' can be called with an - infinity, but results are undefined for a NaN. - - -- Function: int mpz_cmpabs (mpz_t OP1, mpz_t OP2) - -- Function: int mpz_cmpabs_d (mpz_t OP1, double OP2) - -- Function: int mpz_cmpabs_ui (mpz_t OP1, unsigned long int OP2) - Compare the absolute values of OP1 and OP2. Return a positive - value if abs(OP1) > abs(OP2), zero if abs(OP1) = abs(OP2), or a - negative value if abs(OP1) < abs(OP2). - - `mpz_cmpabs_d' can be called with an infinity, but results are - undefined for a NaN. - - -- Macro: int mpz_sgn (mpz_t OP) - Return +1 if OP > 0, 0 if OP = 0, and -1 if OP < 0. - - This function is actually implemented as a macro. It evaluates - its argument multiple times. - - -File: gmp.info, Node: Integer Logic and Bit Fiddling, Next: I/O of Integers, Prev: Integer Comparisons, Up: Integer Functions - -5.11 Logical and Bit Manipulation Functions -=========================================== - -These functions behave as if twos complement arithmetic were used -(although sign-magnitude is the actual implementation). The least -significant bit is number 0. - - -- Function: void mpz_and (mpz_t ROP, mpz_t OP1, mpz_t OP2) - Set ROP to OP1 bitwise-and OP2. - - -- Function: void mpz_ior (mpz_t ROP, mpz_t OP1, mpz_t OP2) - Set ROP to OP1 bitwise inclusive-or OP2. - - -- Function: void mpz_xor (mpz_t ROP, mpz_t OP1, mpz_t OP2) - Set ROP to OP1 bitwise exclusive-or OP2. - - -- Function: void mpz_com (mpz_t ROP, mpz_t OP) - Set ROP to the one's complement of OP. - - -- Function: mp_bitcnt_t mpz_popcount (mpz_t OP) - If OP>=0, return the population count of OP, which is the number - of 1 bits in the binary representation. If OP<0, the number of 1s - is infinite, and the return value is the largest possible - `mp_bitcnt_t'. - - -- Function: mp_bitcnt_t mpz_hamdist (mpz_t OP1, mpz_t OP2) - If OP1 and OP2 are both >=0 or both <0, return the hamming - distance between the two operands, which is the number of bit - positions where OP1 and OP2 have different bit values. If one - operand is >=0 and the other <0 then the number of bits different - is infinite, and the return value is the largest possible - `mp_bitcnt_t'. - - -- Function: mp_bitcnt_t mpz_scan0 (mpz_t OP, mp_bitcnt_t STARTING_BIT) - -- Function: mp_bitcnt_t mpz_scan1 (mpz_t OP, mp_bitcnt_t STARTING_BIT) - Scan OP, starting from bit STARTING_BIT, towards more significant - bits, until the first 0 or 1 bit (respectively) is found. Return - the index of the found bit. - - If the bit at STARTING_BIT is already what's sought, then - STARTING_BIT is returned. - - If there's no bit found, then the largest possible `mp_bitcnt_t' is - returned. This will happen in `mpz_scan0' past the end of a - negative number, or `mpz_scan1' past the end of a nonnegative - number. - - -- Function: void mpz_setbit (mpz_t ROP, mp_bitcnt_t BIT_INDEX) - Set bit BIT_INDEX in ROP. - - -- Function: void mpz_clrbit (mpz_t ROP, mp_bitcnt_t BIT_INDEX) - Clear bit BIT_INDEX in ROP. - - -- Function: void mpz_combit (mpz_t ROP, mp_bitcnt_t BIT_INDEX) - Complement bit BIT_INDEX in ROP. - - -- Function: int mpz_tstbit (mpz_t OP, mp_bitcnt_t BIT_INDEX) - Test bit BIT_INDEX in OP and return 0 or 1 accordingly. - - -File: gmp.info, Node: I/O of Integers, Next: Integer Random Numbers, Prev: Integer Logic and Bit Fiddling, Up: Integer Functions - -5.12 Input and Output Functions -=============================== - -Functions that perform input from a stdio stream, and functions that -output to a stdio stream. Passing a `NULL' pointer for a STREAM -argument to any of these functions will make them read from `stdin' and -write to `stdout', respectively. - - When using any of these functions, it is a good idea to include -`stdio.h' before `gmp.h', since that will allow `gmp.h' to define -prototypes for these functions. - - -- Function: size_t mpz_out_str (FILE *STREAM, int BASE, mpz_t OP) - Output OP on stdio stream STREAM, as a string of digits in base - BASE. The base argument may vary from 2 to 62 or from -2 to -36. - - For BASE in the range 2..36, digits and lower-case letters are - used; for -2..-36, digits and upper-case letters are used; for - 37..62, digits, upper-case letters, and lower-case letters (in - that significance order) are used. - - Return the number of bytes written, or if an error occurred, - return 0. - - -- Function: size_t mpz_inp_str (mpz_t ROP, FILE *STREAM, int BASE) - Input a possibly white-space preceded string in base BASE from - stdio stream STREAM, and put the read integer in ROP. - - The BASE may vary from 2 to 62, or if BASE is 0, then the leading - characters are used: `0x' and `0X' for hexadecimal, `0b' and `0B' - for binary, `0' for octal, or decimal otherwise. - - For bases up to 36, case is ignored; upper-case and lower-case - letters have the same value. For bases 37 to 62, upper-case - letter represent the usual 10..35 while lower-case letter - represent 36..61. - - Return the number of bytes read, or if an error occurred, return 0. - - -- Function: size_t mpz_out_raw (FILE *STREAM, mpz_t OP) - Output OP on stdio stream STREAM, in raw binary format. The - integer is written in a portable format, with 4 bytes of size - information, and that many bytes of limbs. Both the size and the - limbs are written in decreasing significance order (i.e., in - big-endian). - - The output can be read with `mpz_inp_raw'. - - Return the number of bytes written, or if an error occurred, - return 0. - - The output of this can not be read by `mpz_inp_raw' from GMP 1, - because of changes necessary for compatibility between 32-bit and - 64-bit machines. - - -- Function: size_t mpz_inp_raw (mpz_t ROP, FILE *STREAM) - Input from stdio stream STREAM in the format written by - `mpz_out_raw', and put the result in ROP. Return the number of - bytes read, or if an error occurred, return 0. - - This routine can read the output from `mpz_out_raw' also from GMP - 1, in spite of changes necessary for compatibility between 32-bit - and 64-bit machines. - - -File: gmp.info, Node: Integer Random Numbers, Next: Integer Import and Export, Prev: I/O of Integers, Up: Integer Functions - -5.13 Random Number Functions -============================ - -The random number functions of GMP come in two groups; older function -that rely on a global state, and newer functions that accept a state -parameter that is read and modified. Please see the *Note Random -Number Functions:: for more information on how to use and not to use -random number functions. - - -- Function: void mpz_urandomb (mpz_t ROP, gmp_randstate_t STATE, - mp_bitcnt_t N) - Generate a uniformly distributed random integer in the range 0 to - 2^N-1, inclusive. - - The variable STATE must be initialized by calling one of the - `gmp_randinit' functions (*Note Random State Initialization::) - before invoking this function. - - -- Function: void mpz_urandomm (mpz_t ROP, gmp_randstate_t STATE, - mpz_t N) - Generate a uniform random integer in the range 0 to N-1, inclusive. - - The variable STATE must be initialized by calling one of the - `gmp_randinit' functions (*Note Random State Initialization::) - before invoking this function. - - -- Function: void mpz_rrandomb (mpz_t ROP, gmp_randstate_t STATE, - mp_bitcnt_t N) - Generate a random integer with long strings of zeros and ones in - the binary representation. Useful for testing functions and - algorithms, since this kind of random numbers have proven to be - more likely to trigger corner-case bugs. The random number will - be in the range 0 to 2^N-1, inclusive. - - The variable STATE must be initialized by calling one of the - `gmp_randinit' functions (*Note Random State Initialization::) - before invoking this function. - - -- Function: void mpz_random (mpz_t ROP, mp_size_t MAX_SIZE) - Generate a random integer of at most MAX_SIZE limbs. The generated - random number doesn't satisfy any particular requirements of - randomness. Negative random numbers are generated when MAX_SIZE - is negative. - - This function is obsolete. Use `mpz_urandomb' or `mpz_urandomm' - instead. - - -- Function: void mpz_random2 (mpz_t ROP, mp_size_t MAX_SIZE) - Generate a random integer of at most MAX_SIZE limbs, with long - strings of zeros and ones in the binary representation. Useful - for testing functions and algorithms, since this kind of random - numbers have proven to be more likely to trigger corner-case bugs. - Negative random numbers are generated when MAX_SIZE is negative. - - This function is obsolete. Use `mpz_rrandomb' instead. - - -File: gmp.info, Node: Integer Import and Export, Next: Miscellaneous Integer Functions, Prev: Integer Random Numbers, Up: Integer Functions - -5.14 Integer Import and Export -============================== - -`mpz_t' variables can be converted to and from arbitrary words of binary -data with the following functions. - - -- Function: void mpz_import (mpz_t ROP, size_t COUNT, int ORDER, - size_t SIZE, int ENDIAN, size_t NAILS, const void *OP) - Set ROP from an array of word data at OP. - - The parameters specify the format of the data. COUNT many words - are read, each SIZE bytes. ORDER can be 1 for most significant - word first or -1 for least significant first. Within each word - ENDIAN can be 1 for most significant byte first, -1 for least - significant first, or 0 for the native endianness of the host CPU. - The most significant NAILS bits of each word are skipped, this - can be 0 to use the full words. - - There is no sign taken from the data, ROP will simply be a positive - integer. An application can handle any sign itself, and apply it - for instance with `mpz_neg'. - - There are no data alignment restrictions on OP, any address is - allowed. - - Here's an example converting an array of `unsigned long' data, most - significant element first, and host byte order within each value. - - unsigned long a[20]; - /* Initialize Z and A */ - mpz_import (z, 20, 1, sizeof(a[0]), 0, 0, a); - - This example assumes the full `sizeof' bytes are used for data in - the given type, which is usually true, and certainly true for - `unsigned long' everywhere we know of. However on Cray vector - systems it may be noted that `short' and `int' are always stored - in 8 bytes (and with `sizeof' indicating that) but use only 32 or - 46 bits. The NAILS feature can account for this, by passing for - instance `8*sizeof(int)-INT_BIT'. - - -- Function: void * mpz_export (void *ROP, size_t *COUNTP, int ORDER, - size_t SIZE, int ENDIAN, size_t NAILS, mpz_t OP) - Fill ROP with word data from OP. - - The parameters specify the format of the data produced. Each word - will be SIZE bytes and ORDER can be 1 for most significant word - first or -1 for least significant first. Within each word ENDIAN - can be 1 for most significant byte first, -1 for least significant - first, or 0 for the native endianness of the host CPU. The most - significant NAILS bits of each word are unused and set to zero, - this can be 0 to produce full words. - - The number of words produced is written to `*COUNTP', or COUNTP - can be `NULL' to discard the count. ROP must have enough space - for the data, or if ROP is `NULL' then a result array of the - necessary size is allocated using the current GMP allocation - function (*note Custom Allocation::). In either case the return - value is the destination used, either ROP or the allocated block. - - If OP is non-zero then the most significant word produced will be - non-zero. If OP is zero then the count returned will be zero and - nothing written to ROP. If ROP is `NULL' in this case, no block - is allocated, just `NULL' is returned. - - The sign of OP is ignored, just the absolute value is exported. An - application can use `mpz_sgn' to get the sign and handle it as - desired. (*note Integer Comparisons::) - - There are no data alignment restrictions on ROP, any address is - allowed. - - When an application is allocating space itself the required size - can be determined with a calculation like the following. Since - `mpz_sizeinbase' always returns at least 1, `count' here will be - at least one, which avoids any portability problems with - `malloc(0)', though if `z' is zero no space at all is actually - needed (or written). - - numb = 8*size - nail; - count = (mpz_sizeinbase (z, 2) + numb-1) / numb; - p = malloc (count * size); - - -File: gmp.info, Node: Miscellaneous Integer Functions, Next: Integer Special Functions, Prev: Integer Import and Export, Up: Integer Functions - -5.15 Miscellaneous Functions -============================ - - -- Function: int mpz_fits_ulong_p (mpz_t OP) - -- Function: int mpz_fits_slong_p (mpz_t OP) - -- Function: int mpz_fits_uint_p (mpz_t OP) - -- Function: int mpz_fits_sint_p (mpz_t OP) - -- Function: int mpz_fits_ushort_p (mpz_t OP) - -- Function: int mpz_fits_sshort_p (mpz_t OP) - Return non-zero iff the value of OP fits in an `unsigned long int', - `signed long int', `unsigned int', `signed int', `unsigned short - int', or `signed short int', respectively. Otherwise, return zero. - - -- Macro: int mpz_odd_p (mpz_t OP) - -- Macro: int mpz_even_p (mpz_t OP) - Determine whether OP is odd or even, respectively. Return - non-zero if yes, zero if no. These macros evaluate their argument - more than once. - - -- Function: size_t mpz_sizeinbase (mpz_t OP, int BASE) - Return the size of OP measured in number of digits in the given - BASE. BASE can vary from 2 to 62. The sign of OP is ignored, - just the absolute value is used. The result will be either exact - or 1 too big. If BASE is a power of 2, the result is always - exact. If OP is zero the return value is always 1. - - This function can be used to determine the space required when - converting OP to a string. The right amount of allocation is - normally two more than the value returned by `mpz_sizeinbase', one - extra for a minus sign and one for the null-terminator. - - It will be noted that `mpz_sizeinbase(OP,2)' can be used to locate - the most significant 1 bit in OP, counting from 1. (Unlike the - bitwise functions which start from 0, *Note Logical and Bit - Manipulation Functions: Integer Logic and Bit Fiddling.) - - -File: gmp.info, Node: Integer Special Functions, Prev: Miscellaneous Integer Functions, Up: Integer Functions - -5.16 Special Functions -====================== - -The functions in this section are for various special purposes. Most -applications will not need them. - - -- Function: void mpz_array_init (mpz_t INTEGER_ARRAY, mp_size_t - ARRAY_SIZE, mp_size_t FIXED_NUM_BITS) - This is a special type of initialization. *Fixed* space of - FIXED_NUM_BITS is allocated to each of the ARRAY_SIZE integers in - INTEGER_ARRAY. There is no way to free the storage allocated by - this function. Don't call `mpz_clear'! - - The INTEGER_ARRAY parameter is the first `mpz_t' in the array. For - example, - - mpz_t arr[20000]; - mpz_array_init (arr[0], 20000, 512); - - This function is only intended for programs that create a large - number of integers and need to reduce memory usage by avoiding the - overheads of allocating and reallocating lots of small blocks. In - normal programs this function is not recommended. - - The space allocated to each integer by this function will not be - automatically increased, unlike the normal `mpz_init', so an - application must ensure it is sufficient for any value stored. - The following space requirements apply to various routines, - - * `mpz_abs', `mpz_neg', `mpz_set', `mpz_set_si' and - `mpz_set_ui' need room for the value they store. - - * `mpz_add', `mpz_add_ui', `mpz_sub' and `mpz_sub_ui' need room - for the larger of the two operands, plus an extra - `mp_bits_per_limb'. - - * `mpz_mul', `mpz_mul_ui' and `mpz_mul_ui' need room for the sum - of the number of bits in their operands, but each rounded up - to a multiple of `mp_bits_per_limb'. - - * `mpz_swap' can be used between two array variables, but not - between an array and a normal variable. - - For other functions, or if in doubt, the suggestion is to - calculate in a regular `mpz_init' variable and copy the result to - an array variable with `mpz_set'. - - -- Function: void * _mpz_realloc (mpz_t INTEGER, mp_size_t NEW_ALLOC) - Change the space for INTEGER to NEW_ALLOC limbs. The value in - INTEGER is preserved if it fits, or is set to 0 if not. The return - value is not useful to applications and should be ignored. - - `mpz_realloc2' is the preferred way to accomplish allocation - changes like this. `mpz_realloc2' and `_mpz_realloc' are the same - except that `_mpz_realloc' takes its size in limbs. - - -- Function: mp_limb_t mpz_getlimbn (mpz_t OP, mp_size_t N) - Return limb number N from OP. The sign of OP is ignored, just the - absolute value is used. The least significant limb is number 0. - - `mpz_size' can be used to find how many limbs make up OP. - `mpz_getlimbn' returns zero if N is outside the range 0 to - `mpz_size(OP)-1'. - - -- Function: size_t mpz_size (mpz_t OP) - Return the size of OP measured in number of limbs. If OP is zero, - the returned value will be zero. - - -File: gmp.info, Node: Rational Number Functions, Next: Floating-point Functions, Prev: Integer Functions, Up: Top - -6 Rational Number Functions -*************************** - -This chapter describes the GMP functions for performing arithmetic on -rational numbers. These functions start with the prefix `mpq_'. - - Rational numbers are stored in objects of type `mpq_t'. - - All rational arithmetic functions assume operands have a canonical -form, and canonicalize their result. The canonical from means that the -denominator and the numerator have no common factors, and that the -denominator is positive. Zero has the unique representation 0/1. - - Pure assignment functions do not canonicalize the assigned variable. -It is the responsibility of the user to canonicalize the assigned -variable before any arithmetic operations are performed on that -variable. - - -- Function: void mpq_canonicalize (mpq_t OP) - Remove any factors that are common to the numerator and - denominator of OP, and make the denominator positive. - -* Menu: - -* Initializing Rationals:: -* Rational Conversions:: -* Rational Arithmetic:: -* Comparing Rationals:: -* Applying Integer Functions:: -* I/O of Rationals:: - - -File: gmp.info, Node: Initializing Rationals, Next: Rational Conversions, Prev: Rational Number Functions, Up: Rational Number Functions - -6.1 Initialization and Assignment Functions -=========================================== - - -- Function: void mpq_init (mpq_t X) - Initialize X and set it to 0/1. Each variable should normally - only be initialized once, or at least cleared out (using the - function `mpq_clear') between each initialization. - - -- Function: void mpq_inits (mpq_t X, ...) - Initialize a NULL-terminated list of `mpq_t' variables, and set - their values to 0/1. - - -- Function: void mpq_clear (mpq_t X) - Free the space occupied by X. Make sure to call this function for - all `mpq_t' variables when you are done with them. - - -- Function: void mpq_clears (mpq_t X, ...) - Free the space occupied by a NULL-terminated list of `mpq_t' - variables. - - -- Function: void mpq_set (mpq_t ROP, mpq_t OP) - -- Function: void mpq_set_z (mpq_t ROP, mpz_t OP) - Assign ROP from OP. - - -- Function: void mpq_set_ui (mpq_t ROP, unsigned long int OP1, - unsigned long int OP2) - -- Function: void mpq_set_si (mpq_t ROP, signed long int OP1, unsigned - long int OP2) - Set the value of ROP to OP1/OP2. Note that if OP1 and OP2 have - common factors, ROP has to be passed to `mpq_canonicalize' before - any operations are performed on ROP. - - -- Function: int mpq_set_str (mpq_t ROP, char *STR, int BASE) - Set ROP from a null-terminated string STR in the given BASE. - - The string can be an integer like "41" or a fraction like - "41/152". The fraction must be in canonical form (*note Rational - Number Functions::), or if not then `mpq_canonicalize' must be - called. - - The numerator and optional denominator are parsed the same as in - `mpz_set_str' (*note Assigning Integers::). White space is - allowed in the string, and is simply ignored. The BASE can vary - from 2 to 62, or if BASE is 0 then the leading characters are - used: `0x' or `0X' for hex, `0b' or `0B' for binary, `0' for - octal, or decimal otherwise. Note that this is done separately - for the numerator and denominator, so for instance `0xEF/100' is - 239/100, whereas `0xEF/0x100' is 239/256. - - The return value is 0 if the entire string is a valid number, or - -1 if not. - - -- Function: void mpq_swap (mpq_t ROP1, mpq_t ROP2) - Swap the values ROP1 and ROP2 efficiently. - - -File: gmp.info, Node: Rational Conversions, Next: Rational Arithmetic, Prev: Initializing Rationals, Up: Rational Number Functions - -6.2 Conversion Functions -======================== - - -- Function: double mpq_get_d (mpq_t OP) - Convert OP to a `double', truncating if necessary (ie. rounding - towards zero). - - If the exponent from the conversion is too big or too small to fit - a `double' then the result is system dependent. For too big an - infinity is returned when available. For too small 0.0 is - normally returned. Hardware overflow, underflow and denorm traps - may or may not occur. - - -- Function: void mpq_set_d (mpq_t ROP, double OP) - -- Function: void mpq_set_f (mpq_t ROP, mpf_t OP) - Set ROP to the value of OP. There is no rounding, this conversion - is exact. - - -- Function: char * mpq_get_str (char *STR, int BASE, mpq_t OP) - Convert OP to a string of digits in base BASE. The base may vary - from 2 to 36. The string will be of the form `num/den', or if the - denominator is 1 then just `num'. - - If STR is `NULL', the result string is allocated using the current - allocation function (*note Custom Allocation::). The block will be - `strlen(str)+1' bytes, that being exactly enough for the string and - null-terminator. - - If STR is not `NULL', it should point to a block of storage large - enough for the result, that being - - mpz_sizeinbase (mpq_numref(OP), BASE) - + mpz_sizeinbase (mpq_denref(OP), BASE) + 3 - - The three extra bytes are for a possible minus sign, possible - slash, and the null-terminator. - - A pointer to the result string is returned, being either the - allocated block, or the given STR. - - -File: gmp.info, Node: Rational Arithmetic, Next: Comparing Rationals, Prev: Rational Conversions, Up: Rational Number Functions - -6.3 Arithmetic Functions -======================== - - -- Function: void mpq_add (mpq_t SUM, mpq_t ADDEND1, mpq_t ADDEND2) - Set SUM to ADDEND1 + ADDEND2. - - -- Function: void mpq_sub (mpq_t DIFFERENCE, mpq_t MINUEND, mpq_t - SUBTRAHEND) - Set DIFFERENCE to MINUEND - SUBTRAHEND. - - -- Function: void mpq_mul (mpq_t PRODUCT, mpq_t MULTIPLIER, mpq_t - MULTIPLICAND) - Set PRODUCT to MULTIPLIER times MULTIPLICAND. - - -- Function: void mpq_mul_2exp (mpq_t ROP, mpq_t OP1, mp_bitcnt_t OP2) - Set ROP to OP1 times 2 raised to OP2. - - -- Function: void mpq_div (mpq_t QUOTIENT, mpq_t DIVIDEND, mpq_t - DIVISOR) - Set QUOTIENT to DIVIDEND/DIVISOR. - - -- Function: void mpq_div_2exp (mpq_t ROP, mpq_t OP1, mp_bitcnt_t OP2) - Set ROP to OP1 divided by 2 raised to OP2. - - -- Function: void mpq_neg (mpq_t NEGATED_OPERAND, mpq_t OPERAND) - Set NEGATED_OPERAND to -OPERAND. - - -- Function: void mpq_abs (mpq_t ROP, mpq_t OP) - Set ROP to the absolute value of OP. - - -- Function: void mpq_inv (mpq_t INVERTED_NUMBER, mpq_t NUMBER) - Set INVERTED_NUMBER to 1/NUMBER. If the new denominator is zero, - this routine will divide by zero. - - -File: gmp.info, Node: Comparing Rationals, Next: Applying Integer Functions, Prev: Rational Arithmetic, Up: Rational Number Functions - -6.4 Comparison Functions -======================== - - -- Function: int mpq_cmp (mpq_t OP1, mpq_t OP2) - Compare OP1 and OP2. Return a positive value if OP1 > OP2, zero - if OP1 = OP2, and a negative value if OP1 < OP2. - - To determine if two rationals are equal, `mpq_equal' is faster than - `mpq_cmp'. - - -- Macro: int mpq_cmp_ui (mpq_t OP1, unsigned long int NUM2, unsigned - long int DEN2) - -- Macro: int mpq_cmp_si (mpq_t OP1, long int NUM2, unsigned long int - DEN2) - Compare OP1 and NUM2/DEN2. Return a positive value if OP1 > - NUM2/DEN2, zero if OP1 = NUM2/DEN2, and a negative value if OP1 < - NUM2/DEN2. - - NUM2 and DEN2 are allowed to have common factors. - - These functions are implemented as a macros and evaluate their - arguments multiple times. - - -- Macro: int mpq_sgn (mpq_t OP) - Return +1 if OP > 0, 0 if OP = 0, and -1 if OP < 0. - - This function is actually implemented as a macro. It evaluates its - arguments multiple times. - - -- Function: int mpq_equal (mpq_t OP1, mpq_t OP2) - Return non-zero if OP1 and OP2 are equal, zero if they are - non-equal. Although `mpq_cmp' can be used for the same purpose, - this function is much faster. - - -File: gmp.info, Node: Applying Integer Functions, Next: I/O of Rationals, Prev: Comparing Rationals, Up: Rational Number Functions - -6.5 Applying Integer Functions to Rationals -=========================================== - -The set of `mpq' functions is quite small. In particular, there are few -functions for either input or output. The following functions give -direct access to the numerator and denominator of an `mpq_t'. - - Note that if an assignment to the numerator and/or denominator could -take an `mpq_t' out of the canonical form described at the start of -this chapter (*note Rational Number Functions::) then -`mpq_canonicalize' must be called before any other `mpq' functions are -applied to that `mpq_t'. - - -- Macro: mpz_t mpq_numref (mpq_t OP) - -- Macro: mpz_t mpq_denref (mpq_t OP) - Return a reference to the numerator and denominator of OP, - respectively. The `mpz' functions can be used on the result of - these macros. - - -- Function: void mpq_get_num (mpz_t NUMERATOR, mpq_t RATIONAL) - -- Function: void mpq_get_den (mpz_t DENOMINATOR, mpq_t RATIONAL) - -- Function: void mpq_set_num (mpq_t RATIONAL, mpz_t NUMERATOR) - -- Function: void mpq_set_den (mpq_t RATIONAL, mpz_t DENOMINATOR) - Get or set the numerator or denominator of a rational. These - functions are equivalent to calling `mpz_set' with an appropriate - `mpq_numref' or `mpq_denref'. Direct use of `mpq_numref' or - `mpq_denref' is recommended instead of these functions. - - -File: gmp.info, Node: I/O of Rationals, Prev: Applying Integer Functions, Up: Rational Number Functions - -6.6 Input and Output Functions -============================== - -When using any of these functions, it's a good idea to include `stdio.h' -before `gmp.h', since that will allow `gmp.h' to define prototypes for -these functions. - - Passing a `NULL' pointer for a STREAM argument to any of these -functions will make them read from `stdin' and write to `stdout', -respectively. - - -- Function: size_t mpq_out_str (FILE *STREAM, int BASE, mpq_t OP) - Output OP on stdio stream STREAM, as a string of digits in base - BASE. The base may vary from 2 to 36. Output is in the form - `num/den' or if the denominator is 1 then just `num'. - - Return the number of bytes written, or if an error occurred, - return 0. - - -- Function: size_t mpq_inp_str (mpq_t ROP, FILE *STREAM, int BASE) - Read a string of digits from STREAM and convert them to a rational - in ROP. Any initial white-space characters are read and - discarded. Return the number of characters read (including white - space), or 0 if a rational could not be read. - - The input can be a fraction like `17/63' or just an integer like - `123'. Reading stops at the first character not in this form, and - white space is not permitted within the string. If the input - might not be in canonical form, then `mpq_canonicalize' must be - called (*note Rational Number Functions::). - - The BASE can be between 2 and 36, or can be 0 in which case the - leading characters of the string determine the base, `0x' or `0X' - for hexadecimal, `0' for octal, or decimal otherwise. The leading - characters are examined separately for the numerator and - denominator of a fraction, so for instance `0x10/11' is 16/11, - whereas `0x10/0x11' is 16/17. - - -File: gmp.info, Node: Floating-point Functions, Next: Low-level Functions, Prev: Rational Number Functions, Up: Top - -7 Floating-point Functions -************************** - -GMP floating point numbers are stored in objects of type `mpf_t' and -functions operating on them have an `mpf_' prefix. - - The mantissa of each float has a user-selectable precision, limited -only by available memory. Each variable has its own precision, and -that can be increased or decreased at any time. - - The exponent of each float is a fixed precision, one machine word on -most systems. In the current implementation the exponent is a count of -limbs, so for example on a 32-bit system this means a range of roughly -2^-68719476768 to 2^68719476736, or on a 64-bit system this will be -greater. Note however `mpf_get_str' can only return an exponent which -fits an `mp_exp_t' and currently `mpf_set_str' doesn't accept exponents -bigger than a `long'. - - Each variable keeps a size for the mantissa data actually in use. -This means that if a float is exactly represented in only a few bits -then only those bits will be used in a calculation, even if the -selected precision is high. - - All calculations are performed to the precision of the destination -variable. Each function is defined to calculate with "infinite -precision" followed by a truncation to the destination precision, but -of course the work done is only what's needed to determine a result -under that definition. - - The precision selected for a variable is a minimum value, GMP may -increase it a little to facilitate efficient calculation. Currently -this means rounding up to a whole limb, and then sometimes having a -further partial limb, depending on the high limb of the mantissa. But -applications shouldn't be concerned by such details. - - The mantissa in stored in binary, as might be imagined from the fact -precisions are expressed in bits. One consequence of this is that -decimal fractions like 0.1 cannot be represented exactly. The same is -true of plain IEEE `double' floats. This makes both highly unsuitable -for calculations involving money or other values that should be exact -decimal fractions. (Suitably scaled integers, or perhaps rationals, -are better choices.) - - `mpf' functions and variables have no special notion of infinity or -not-a-number, and applications must take care not to overflow the -exponent or results will be unpredictable. This might change in a -future release. - - Note that the `mpf' functions are _not_ intended as a smooth -extension to IEEE P754 arithmetic. In particular results obtained on -one computer often differ from the results on a computer with a -different word size. - -* Menu: - -* Initializing Floats:: -* Assigning Floats:: -* Simultaneous Float Init & Assign:: -* Converting Floats:: -* Float Arithmetic:: -* Float Comparison:: -* I/O of Floats:: -* Miscellaneous Float Functions:: - - -File: gmp.info, Node: Initializing Floats, Next: Assigning Floats, Prev: Floating-point Functions, Up: Floating-point Functions - -7.1 Initialization Functions -============================ - - -- Function: void mpf_set_default_prec (mp_bitcnt_t PREC) - Set the default precision to be *at least* PREC bits. All - subsequent calls to `mpf_init' will use this precision, but - previously initialized variables are unaffected. - - -- Function: mp_bitcnt_t mpf_get_default_prec (void) - Return the default precision actually used. - - An `mpf_t' object must be initialized before storing the first value -in it. The functions `mpf_init' and `mpf_init2' are used for that -purpose. - - -- Function: void mpf_init (mpf_t X) - Initialize X to 0. Normally, a variable should be initialized - once only or at least be cleared, using `mpf_clear', between - initializations. The precision of X is undefined unless a default - precision has already been established by a call to - `mpf_set_default_prec'. - - -- Function: void mpf_init2 (mpf_t X, mp_bitcnt_t PREC) - Initialize X to 0 and set its precision to be *at least* PREC - bits. Normally, a variable should be initialized once only or at - least be cleared, using `mpf_clear', between initializations. - - -- Function: void mpf_inits (mpf_t X, ...) - Initialize a NULL-terminated list of `mpf_t' variables, and set - their values to 0. The precision of the initialized variables is - undefined unless a default precision has already been established - by a call to `mpf_set_default_prec'. - - -- Function: void mpf_clear (mpf_t X) - Free the space occupied by X. Make sure to call this function for - all `mpf_t' variables when you are done with them. - - -- Function: void mpf_clears (mpf_t X, ...) - Free the space occupied by a NULL-terminated list of `mpf_t' - variables. - - Here is an example on how to initialize floating-point variables: - { - mpf_t x, y; - mpf_init (x); /* use default precision */ - mpf_init2 (y, 256); /* precision _at least_ 256 bits */ - ... - /* Unless the program is about to exit, do ... */ - mpf_clear (x); - mpf_clear (y); - } - - The following three functions are useful for changing the precision -during a calculation. A typical use would be for adjusting the -precision gradually in iterative algorithms like Newton-Raphson, making -the computation precision closely match the actual accurate part of the -numbers. - - -- Function: mp_bitcnt_t mpf_get_prec (mpf_t OP) - Return the current precision of OP, in bits. - - -- Function: void mpf_set_prec (mpf_t ROP, mp_bitcnt_t PREC) - Set the precision of ROP to be *at least* PREC bits. The value in - ROP will be truncated to the new precision. - - This function requires a call to `realloc', and so should not be - used in a tight loop. - - -- Function: void mpf_set_prec_raw (mpf_t ROP, mp_bitcnt_t PREC) - Set the precision of ROP to be *at least* PREC bits, without - changing the memory allocated. - - PREC must be no more than the allocated precision for ROP, that - being the precision when ROP was initialized, or in the most recent - `mpf_set_prec'. - - The value in ROP is unchanged, and in particular if it had a higher - precision than PREC it will retain that higher precision. New - values written to ROP will use the new PREC. - - Before calling `mpf_clear' or the full `mpf_set_prec', another - `mpf_set_prec_raw' call must be made to restore ROP to its original - allocated precision. Failing to do so will have unpredictable - results. - - `mpf_get_prec' can be used before `mpf_set_prec_raw' to get the - original allocated precision. After `mpf_set_prec_raw' it - reflects the PREC value set. - - `mpf_set_prec_raw' is an efficient way to use an `mpf_t' variable - at different precisions during a calculation, perhaps to gradually - increase precision in an iteration, or just to use various - different precisions for different purposes during a calculation. - - -File: gmp.info, Node: Assigning Floats, Next: Simultaneous Float Init & Assign, Prev: Initializing Floats, Up: Floating-point Functions - -7.2 Assignment Functions -======================== - -These functions assign new values to already initialized floats (*note -Initializing Floats::). - - -- Function: void mpf_set (mpf_t ROP, mpf_t OP) - -- Function: void mpf_set_ui (mpf_t ROP, unsigned long int OP) - -- Function: void mpf_set_si (mpf_t ROP, signed long int OP) - -- Function: void mpf_set_d (mpf_t ROP, double OP) - -- Function: void mpf_set_z (mpf_t ROP, mpz_t OP) - -- Function: void mpf_set_q (mpf_t ROP, mpq_t OP) - Set the value of ROP from OP. - - -- Function: int mpf_set_str (mpf_t ROP, char *STR, int BASE) - Set the value of ROP from the string in STR. The string is of the - form `M@N' or, if the base is 10 or less, alternatively `MeN'. - `M' is the mantissa and `N' is the exponent. The mantissa is - always in the specified base. The exponent is either in the - specified base or, if BASE is negative, in decimal. The decimal - point expected is taken from the current locale, on systems - providing `localeconv'. - - The argument BASE may be in the ranges 2 to 62, or -62 to -2. - Negative values are used to specify that the exponent is in - decimal. - - For bases up to 36, case is ignored; upper-case and lower-case - letters have the same value; for bases 37 to 62, upper-case letter - represent the usual 10..35 while lower-case letter represent - 36..61. - - Unlike the corresponding `mpz' function, the base will not be - determined from the leading characters of the string if BASE is 0. - This is so that numbers like `0.23' are not interpreted as octal. - - White space is allowed in the string, and is simply ignored. - [This is not really true; white-space is ignored in the beginning - of the string and within the mantissa, but not in other places, - such as after a minus sign or in the exponent. We are considering - changing the definition of this function, making it fail when - there is any white-space in the input, since that makes a lot of - sense. Please tell us your opinion about this change. Do you - really want it to accept "3 14" as meaning 314 as it does now?] - - This function returns 0 if the entire string is a valid number in - base BASE. Otherwise it returns -1. - - -- Function: void mpf_swap (mpf_t ROP1, mpf_t ROP2) - Swap ROP1 and ROP2 efficiently. Both the values and the - precisions of the two variables are swapped. - - -File: gmp.info, Node: Simultaneous Float Init & Assign, Next: Converting Floats, Prev: Assigning Floats, Up: Floating-point Functions - -7.3 Combined Initialization and Assignment Functions -==================================================== - -For convenience, GMP provides a parallel series of initialize-and-set -functions which initialize the output and then store the value there. -These functions' names have the form `mpf_init_set...' - - Once the float has been initialized by any of the `mpf_init_set...' -functions, it can be used as the source or destination operand for the -ordinary float functions. Don't use an initialize-and-set function on -a variable already initialized! - - -- Function: void mpf_init_set (mpf_t ROP, mpf_t OP) - -- Function: void mpf_init_set_ui (mpf_t ROP, unsigned long int OP) - -- Function: void mpf_init_set_si (mpf_t ROP, signed long int OP) - -- Function: void mpf_init_set_d (mpf_t ROP, double OP) - Initialize ROP and set its value from OP. - - The precision of ROP will be taken from the active default - precision, as set by `mpf_set_default_prec'. - - -- Function: int mpf_init_set_str (mpf_t ROP, char *STR, int BASE) - Initialize ROP and set its value from the string in STR. See - `mpf_set_str' above for details on the assignment operation. - - Note that ROP is initialized even if an error occurs. (I.e., you - have to call `mpf_clear' for it.) - - The precision of ROP will be taken from the active default - precision, as set by `mpf_set_default_prec'. - - -File: gmp.info, Node: Converting Floats, Next: Float Arithmetic, Prev: Simultaneous Float Init & Assign, Up: Floating-point Functions - -7.4 Conversion Functions -======================== - - -- Function: double mpf_get_d (mpf_t OP) - Convert OP to a `double', truncating if necessary (ie. rounding - towards zero). - - If the exponent in OP is too big or too small to fit a `double' - then the result is system dependent. For too big an infinity is - returned when available. For too small 0.0 is normally returned. - Hardware overflow, underflow and denorm traps may or may not occur. - - -- Function: double mpf_get_d_2exp (signed long int *EXP, mpf_t OP) - Convert OP to a `double', truncating if necessary (ie. rounding - towards zero), and with an exponent returned separately. - - The return value is in the range 0.5<=abs(D)<1 and the exponent is - stored to `*EXP'. D * 2^EXP is the (truncated) OP value. If OP - is zero, the return is 0.0 and 0 is stored to `*EXP'. - - This is similar to the standard C `frexp' function (*note - Normalization Functions: (libc)Normalization Functions.). - - -- Function: long mpf_get_si (mpf_t OP) - -- Function: unsigned long mpf_get_ui (mpf_t OP) - Convert OP to a `long' or `unsigned long', truncating any fraction - part. If OP is too big for the return type, the result is - undefined. - - See also `mpf_fits_slong_p' and `mpf_fits_ulong_p' (*note - Miscellaneous Float Functions::). - - -- Function: char * mpf_get_str (char *STR, mp_exp_t *EXPPTR, int - BASE, size_t N_DIGITS, mpf_t OP) - Convert OP to a string of digits in base BASE. The base argument - may vary from 2 to 62 or from -2 to -36. Up to N_DIGITS digits - will be generated. Trailing zeros are not returned. No more - digits than can be accurately represented by OP are ever - generated. If N_DIGITS is 0 then that accurate maximum number of - digits are generated. - - For BASE in the range 2..36, digits and lower-case letters are - used; for -2..-36, digits and upper-case letters are used; for - 37..62, digits, upper-case letters, and lower-case letters (in - that significance order) are used. - - If STR is `NULL', the result string is allocated using the current - allocation function (*note Custom Allocation::). The block will be - `strlen(str)+1' bytes, that being exactly enough for the string and - null-terminator. - - If STR is not `NULL', it should point to a block of N_DIGITS + 2 - bytes, that being enough for the mantissa, a possible minus sign, - and a null-terminator. When N_DIGITS is 0 to get all significant - digits, an application won't be able to know the space required, - and STR should be `NULL' in that case. - - The generated string is a fraction, with an implicit radix point - immediately to the left of the first digit. The applicable - exponent is written through the EXPPTR pointer. For example, the - number 3.1416 would be returned as string "31416" and exponent 1. - - When OP is zero, an empty string is produced and the exponent - returned is 0. - - A pointer to the result string is returned, being either the - allocated block or the given STR. - - -File: gmp.info, Node: Float Arithmetic, Next: Float Comparison, Prev: Converting Floats, Up: Floating-point Functions - -7.5 Arithmetic Functions -======================== - - -- Function: void mpf_add (mpf_t ROP, mpf_t OP1, mpf_t OP2) - -- Function: void mpf_add_ui (mpf_t ROP, mpf_t OP1, unsigned long int - OP2) - Set ROP to OP1 + OP2. - - -- Function: void mpf_sub (mpf_t ROP, mpf_t OP1, mpf_t OP2) - -- Function: void mpf_ui_sub (mpf_t ROP, unsigned long int OP1, mpf_t - OP2) - -- Function: void mpf_sub_ui (mpf_t ROP, mpf_t OP1, unsigned long int - OP2) - Set ROP to OP1 - OP2. - - -- Function: void mpf_mul (mpf_t ROP, mpf_t OP1, mpf_t OP2) - -- Function: void mpf_mul_ui (mpf_t ROP, mpf_t OP1, unsigned long int - OP2) - Set ROP to OP1 times OP2. - - Division is undefined if the divisor is zero, and passing a zero -divisor to the divide functions will make these functions intentionally -divide by zero. This lets the user handle arithmetic exceptions in -these functions in the same manner as other arithmetic exceptions. - - -- Function: void mpf_div (mpf_t ROP, mpf_t OP1, mpf_t OP2) - -- Function: void mpf_ui_div (mpf_t ROP, unsigned long int OP1, mpf_t - OP2) - -- Function: void mpf_div_ui (mpf_t ROP, mpf_t OP1, unsigned long int - OP2) - Set ROP to OP1/OP2. - - -- Function: void mpf_sqrt (mpf_t ROP, mpf_t OP) - -- Function: void mpf_sqrt_ui (mpf_t ROP, unsigned long int OP) - Set ROP to the square root of OP. - - -- Function: void mpf_pow_ui (mpf_t ROP, mpf_t OP1, unsigned long int - OP2) - Set ROP to OP1 raised to the power OP2. - - -- Function: void mpf_neg (mpf_t ROP, mpf_t OP) - Set ROP to -OP. - - -- Function: void mpf_abs (mpf_t ROP, mpf_t OP) - Set ROP to the absolute value of OP. - - -- Function: void mpf_mul_2exp (mpf_t ROP, mpf_t OP1, mp_bitcnt_t OP2) - Set ROP to OP1 times 2 raised to OP2. - - -- Function: void mpf_div_2exp (mpf_t ROP, mpf_t OP1, mp_bitcnt_t OP2) - Set ROP to OP1 divided by 2 raised to OP2. - - -File: gmp.info, Node: Float Comparison, Next: I/O of Floats, Prev: Float Arithmetic, Up: Floating-point Functions - -7.6 Comparison Functions -======================== - - -- Function: int mpf_cmp (mpf_t OP1, mpf_t OP2) - -- Function: int mpf_cmp_d (mpf_t OP1, double OP2) - -- Function: int mpf_cmp_ui (mpf_t OP1, unsigned long int OP2) - -- Function: int mpf_cmp_si (mpf_t OP1, signed long int OP2) - Compare OP1 and OP2. Return a positive value if OP1 > OP2, zero - if OP1 = OP2, and a negative value if OP1 < OP2. - - `mpf_cmp_d' can be called with an infinity, but results are - undefined for a NaN. - - -- Function: int mpf_eq (mpf_t OP1, mpf_t OP2, mp_bitcnt_t op3) - Return non-zero if the first OP3 bits of OP1 and OP2 are equal, - zero otherwise. I.e., test if OP1 and OP2 are approximately equal. - - Caution 1: All version of GMP up to version 4.2.4 compared just - whole limbs, meaning sometimes more than OP3 bits, sometimes fewer. - - Caution 2: This function will consider XXX11...111 and XX100...000 - different, even if ... is replaced by a semi-infinite number of - bits. Such numbers are really just one ulp off, and should be - considered equal. - - -- Function: void mpf_reldiff (mpf_t ROP, mpf_t OP1, mpf_t OP2) - Compute the relative difference between OP1 and OP2 and store the - result in ROP. This is abs(OP1-OP2)/OP1. - - -- Macro: int mpf_sgn (mpf_t OP) - Return +1 if OP > 0, 0 if OP = 0, and -1 if OP < 0. - - This function is actually implemented as a macro. It evaluates - its arguments multiple times. - - -File: gmp.info, Node: I/O of Floats, Next: Miscellaneous Float Functions, Prev: Float Comparison, Up: Floating-point Functions - -7.7 Input and Output Functions -============================== - -Functions that perform input from a stdio stream, and functions that -output to a stdio stream. Passing a `NULL' pointer for a STREAM -argument to any of these functions will make them read from `stdin' and -write to `stdout', respectively. - - When using any of these functions, it is a good idea to include -`stdio.h' before `gmp.h', since that will allow `gmp.h' to define -prototypes for these functions. - - -- Function: size_t mpf_out_str (FILE *STREAM, int BASE, size_t - N_DIGITS, mpf_t OP) - Print OP to STREAM, as a string of digits. Return the number of - bytes written, or if an error occurred, return 0. - - The mantissa is prefixed with an `0.' and is in the given BASE, - which may vary from 2 to 62 or from -2 to -36. An exponent is - then printed, separated by an `e', or if the base is greater than - 10 then by an `@'. The exponent is always in decimal. The - decimal point follows the current locale, on systems providing - `localeconv'. - - For BASE in the range 2..36, digits and lower-case letters are - used; for -2..-36, digits and upper-case letters are used; for - 37..62, digits, upper-case letters, and lower-case letters (in - that significance order) are used. - - Up to N_DIGITS will be printed from the mantissa, except that no - more digits than are accurately representable by OP will be - printed. N_DIGITS can be 0 to select that accurate maximum. - - -- Function: size_t mpf_inp_str (mpf_t ROP, FILE *STREAM, int BASE) - Read a string in base BASE from STREAM, and put the read float in - ROP. The string is of the form `M@N' or, if the base is 10 or - less, alternatively `MeN'. `M' is the mantissa and `N' is the - exponent. The mantissa is always in the specified base. The - exponent is either in the specified base or, if BASE is negative, - in decimal. The decimal point expected is taken from the current - locale, on systems providing `localeconv'. - - The argument BASE may be in the ranges 2 to 36, or -36 to -2. - Negative values are used to specify that the exponent is in - decimal. - - Unlike the corresponding `mpz' function, the base will not be - determined from the leading characters of the string if BASE is 0. - This is so that numbers like `0.23' are not interpreted as octal. - - Return the number of bytes read, or if an error occurred, return 0. - - -File: gmp.info, Node: Miscellaneous Float Functions, Prev: I/O of Floats, Up: Floating-point Functions - -7.8 Miscellaneous Functions -=========================== - - -- Function: void mpf_ceil (mpf_t ROP, mpf_t OP) - -- Function: void mpf_floor (mpf_t ROP, mpf_t OP) - -- Function: void mpf_trunc (mpf_t ROP, mpf_t OP) - Set ROP to OP rounded to an integer. `mpf_ceil' rounds to the - next higher integer, `mpf_floor' to the next lower, and `mpf_trunc' - to the integer towards zero. - - -- Function: int mpf_integer_p (mpf_t OP) - Return non-zero if OP is an integer. - - -- Function: int mpf_fits_ulong_p (mpf_t OP) - -- Function: int mpf_fits_slong_p (mpf_t OP) - -- Function: int mpf_fits_uint_p (mpf_t OP) - -- Function: int mpf_fits_sint_p (mpf_t OP) - -- Function: int mpf_fits_ushort_p (mpf_t OP) - -- Function: int mpf_fits_sshort_p (mpf_t OP) - Return non-zero if OP would fit in the respective C data type, when - truncated to an integer. - - -- Function: void mpf_urandomb (mpf_t ROP, gmp_randstate_t STATE, - mp_bitcnt_t NBITS) - Generate a uniformly distributed random float in ROP, such that 0 - <= ROP < 1, with NBITS significant bits in the mantissa. - - The variable STATE must be initialized by calling one of the - `gmp_randinit' functions (*Note Random State Initialization::) - before invoking this function. - - -- Function: void mpf_random2 (mpf_t ROP, mp_size_t MAX_SIZE, mp_exp_t - EXP) - Generate a random float of at most MAX_SIZE limbs, with long - strings of zeros and ones in the binary representation. The - exponent of the number is in the interval -EXP to EXP (in limbs). - This function is useful for testing functions and algorithms, - since these kind of random numbers have proven to be more likely - to trigger corner-case bugs. Negative random numbers are - generated when MAX_SIZE is negative. - - -File: gmp.info, Node: Low-level Functions, Next: Random Number Functions, Prev: Floating-point Functions, Up: Top - -8 Low-level Functions -********************* - -This chapter describes low-level GMP functions, used to implement the -high-level GMP functions, but also intended for time-critical user code. - - These functions start with the prefix `mpn_'. - - The `mpn' functions are designed to be as fast as possible, *not* to -provide a coherent calling interface. The different functions have -somewhat similar interfaces, but there are variations that make them -hard to use. These functions do as little as possible apart from the -real multiple precision computation, so that no time is spent on things -that not all callers need. - - A source operand is specified by a pointer to the least significant -limb and a limb count. A destination operand is specified by just a -pointer. It is the responsibility of the caller to ensure that the -destination has enough space for storing the result. - - With this way of specifying operands, it is possible to perform -computations on subranges of an argument, and store the result into a -subrange of a destination. - - A common requirement for all functions is that each source area -needs at least one limb. No size argument may be zero. Unless -otherwise stated, in-place operations are allowed where source and -destination are the same, but not where they only partly overlap. - - The `mpn' functions are the base for the implementation of the -`mpz_', `mpf_', and `mpq_' functions. - - This example adds the number beginning at S1P and the number -beginning at S2P and writes the sum at DESTP. All areas have N limbs. - - cy = mpn_add_n (destp, s1p, s2p, n) - - It should be noted that the `mpn' functions make no attempt to -identify high or low zero limbs on their operands, or other special -forms. On random data such cases will be unlikely and it'd be wasteful -for every function to check every time. An application knowing -something about its data can take steps to trim or perhaps split its -calculations. - - -In the notation used below, a source operand is identified by the -pointer to the least significant limb, and the limb count in braces. -For example, {S1P, S1N}. - - -- Function: mp_limb_t mpn_add_n (mp_limb_t *RP, const mp_limb_t *S1P, - const mp_limb_t *S2P, mp_size_t N) - Add {S1P, N} and {S2P, N}, and write the N least significant limbs - of the result to RP. Return carry, either 0 or 1. - - This is the lowest-level function for addition. It is the - preferred function for addition, since it is written in assembly - for most CPUs. For addition of a variable to itself (i.e., S1P - equals S2P) use `mpn_lshift' with a count of 1 for optimal speed. - - -- Function: mp_limb_t mpn_add_1 (mp_limb_t *RP, const mp_limb_t *S1P, - mp_size_t N, mp_limb_t S2LIMB) - Add {S1P, N} and S2LIMB, and write the N least significant limbs - of the result to RP. Return carry, either 0 or 1. - - -- Function: mp_limb_t mpn_add (mp_limb_t *RP, const mp_limb_t *S1P, - mp_size_t S1N, const mp_limb_t *S2P, mp_size_t S2N) - Add {S1P, S1N} and {S2P, S2N}, and write the S1N least significant - limbs of the result to RP. Return carry, either 0 or 1. - - This function requires that S1N is greater than or equal to S2N. - - -- Function: mp_limb_t mpn_sub_n (mp_limb_t *RP, const mp_limb_t *S1P, - const mp_limb_t *S2P, mp_size_t N) - Subtract {S2P, N} from {S1P, N}, and write the N least significant - limbs of the result to RP. Return borrow, either 0 or 1. - - This is the lowest-level function for subtraction. It is the - preferred function for subtraction, since it is written in - assembly for most CPUs. - - -- Function: mp_limb_t mpn_sub_1 (mp_limb_t *RP, const mp_limb_t *S1P, - mp_size_t N, mp_limb_t S2LIMB) - Subtract S2LIMB from {S1P, N}, and write the N least significant - limbs of the result to RP. Return borrow, either 0 or 1. - - -- Function: mp_limb_t mpn_sub (mp_limb_t *RP, const mp_limb_t *S1P, - mp_size_t S1N, const mp_limb_t *S2P, mp_size_t S2N) - Subtract {S2P, S2N} from {S1P, S1N}, and write the S1N least - significant limbs of the result to RP. Return borrow, either 0 or - 1. - - This function requires that S1N is greater than or equal to S2N. - - -- Function: void mpn_neg (mp_limb_t *RP, const mp_limb_t *SP, - mp_size_t N) - Perform the negation of {SP, N}, and write the result to {RP, N}. - Return carry-out. - - -- Function: void mpn_mul_n (mp_limb_t *RP, const mp_limb_t *S1P, - const mp_limb_t *S2P, mp_size_t N) - Multiply {S1P, N} and {S2P, N}, and write the 2*N-limb result to - RP. - - The destination has to have space for 2*N limbs, even if the - product's most significant limb is zero. No overlap is permitted - between the destination and either source. - - If the two input operands are the same, use `mpn_sqr'. - - -- Function: mp_limb_t mpn_mul (mp_limb_t *RP, const mp_limb_t *S1P, - mp_size_t S1N, const mp_limb_t *S2P, mp_size_t S2N) - Multiply {S1P, S1N} and {S2P, S2N}, and write the (S1N+S2N)-limb - result to RP. Return the most significant limb of the result. - - The destination has to have space for S1N + S2N limbs, even if the - product's most significant limb is zero. No overlap is permitted - between the destination and either source. - - This function requires that S1N is greater than or equal to S2N. - - -- Function: void mpn_sqr (mp_limb_t *RP, const mp_limb_t *S1P, - mp_size_t N) - Compute the square of {S1P, N} and write the 2*N-limb result to RP. - - The destination has to have space for 2*N limbs, even if the - result's most significant limb is zero. No overlap is permitted - between the destination and the source. - - -- Function: mp_limb_t mpn_mul_1 (mp_limb_t *RP, const mp_limb_t *S1P, - mp_size_t N, mp_limb_t S2LIMB) - Multiply {S1P, N} by S2LIMB, and write the N least significant - limbs of the product to RP. Return the most significant limb of - the product. {S1P, N} and {RP, N} are allowed to overlap provided - RP <= S1P. - - This is a low-level function that is a building block for general - multiplication as well as other operations in GMP. It is written - in assembly for most CPUs. - - Don't call this function if S2LIMB is a power of 2; use - `mpn_lshift' with a count equal to the logarithm of S2LIMB - instead, for optimal speed. - - -- Function: mp_limb_t mpn_addmul_1 (mp_limb_t *RP, const mp_limb_t - *S1P, mp_size_t N, mp_limb_t S2LIMB) - Multiply {S1P, N} and S2LIMB, and add the N least significant - limbs of the product to {RP, N} and write the result to RP. - Return the most significant limb of the product, plus carry-out - from the addition. - - This is a low-level function that is a building block for general - multiplication as well as other operations in GMP. It is written - in assembly for most CPUs. - - -- Function: mp_limb_t mpn_submul_1 (mp_limb_t *RP, const mp_limb_t - *S1P, mp_size_t N, mp_limb_t S2LIMB) - Multiply {S1P, N} and S2LIMB, and subtract the N least significant - limbs of the product from {RP, N} and write the result to RP. - Return the most significant limb of the product, plus borrow-out - from the subtraction. - - This is a low-level function that is a building block for general - multiplication and division as well as other operations in GMP. - It is written in assembly for most CPUs. - - -- Function: void mpn_tdiv_qr (mp_limb_t *QP, mp_limb_t *RP, mp_size_t - QXN, const mp_limb_t *NP, mp_size_t NN, const mp_limb_t *DP, - mp_size_t DN) - Divide {NP, NN} by {DP, DN} and put the quotient at {QP, NN-DN+1} - and the remainder at {RP, DN}. The quotient is rounded towards 0. - - No overlap is permitted between arguments, except that NP might - equal RP. The dividend size NN must be greater than or equal to - divisor size DN. The most significant limb of the divisor must be - non-zero. The QXN operand must be zero. - - -- Function: mp_limb_t mpn_divrem (mp_limb_t *R1P, mp_size_t QXN, - mp_limb_t *RS2P, mp_size_t RS2N, const mp_limb_t *S3P, - mp_size_t S3N) - [This function is obsolete. Please call `mpn_tdiv_qr' instead for - best performance.] - - Divide {RS2P, RS2N} by {S3P, S3N}, and write the quotient at R1P, - with the exception of the most significant limb, which is - returned. The remainder replaces the dividend at RS2P; it will be - S3N limbs long (i.e., as many limbs as the divisor). - - In addition to an integer quotient, QXN fraction limbs are - developed, and stored after the integral limbs. For most usages, - QXN will be zero. - - It is required that RS2N is greater than or equal to S3N. It is - required that the most significant bit of the divisor is set. - - If the quotient is not needed, pass RS2P + S3N as R1P. Aside from - that special case, no overlap between arguments is permitted. - - Return the most significant limb of the quotient, either 0 or 1. - - The area at R1P needs to be RS2N - S3N + QXN limbs large. - - -- Function: mp_limb_t mpn_divrem_1 (mp_limb_t *R1P, mp_size_t QXN, - mp_limb_t *S2P, mp_size_t S2N, mp_limb_t S3LIMB) - -- Macro: mp_limb_t mpn_divmod_1 (mp_limb_t *R1P, mp_limb_t *S2P, - mp_size_t S2N, mp_limb_t S3LIMB) - Divide {S2P, S2N} by S3LIMB, and write the quotient at R1P. - Return the remainder. - - The integer quotient is written to {R1P+QXN, S2N} and in addition - QXN fraction limbs are developed and written to {R1P, QXN}. - Either or both S2N and QXN can be zero. For most usages, QXN will - be zero. - - `mpn_divmod_1' exists for upward source compatibility and is - simply a macro calling `mpn_divrem_1' with a QXN of 0. - - The areas at R1P and S2P have to be identical or completely - separate, not partially overlapping. - - -- Function: mp_limb_t mpn_divmod (mp_limb_t *R1P, mp_limb_t *RS2P, - mp_size_t RS2N, const mp_limb_t *S3P, mp_size_t S3N) - [This function is obsolete. Please call `mpn_tdiv_qr' instead for - best performance.] - - -- Macro: mp_limb_t mpn_divexact_by3 (mp_limb_t *RP, mp_limb_t *SP, - mp_size_t N) - -- Function: mp_limb_t mpn_divexact_by3c (mp_limb_t *RP, mp_limb_t - *SP, mp_size_t N, mp_limb_t CARRY) - Divide {SP, N} by 3, expecting it to divide exactly, and writing - the result to {RP, N}. If 3 divides exactly, the return value is - zero and the result is the quotient. If not, the return value is - non-zero and the result won't be anything useful. - - `mpn_divexact_by3c' takes an initial carry parameter, which can be - the return value from a previous call, so a large calculation can - be done piece by piece from low to high. `mpn_divexact_by3' is - simply a macro calling `mpn_divexact_by3c' with a 0 carry - parameter. - - These routines use a multiply-by-inverse and will be faster than - `mpn_divrem_1' on CPUs with fast multiplication but slow division. - - The source a, result q, size n, initial carry i, and return value - c satisfy c*b^n + a-i = 3*q, where b=2^GMP_NUMB_BITS. The return - c is always 0, 1 or 2, and the initial carry i must also be 0, 1 - or 2 (these are both borrows really). When c=0 clearly q=(a-i)/3. - When c!=0, the remainder (a-i) mod 3 is given by 3-c, because b - == 1 mod 3 (when `mp_bits_per_limb' is even, which is always so - currently). - - -- Function: mp_limb_t mpn_mod_1 (mp_limb_t *S1P, mp_size_t S1N, - mp_limb_t S2LIMB) - Divide {S1P, S1N} by S2LIMB, and return the remainder. S1N can be - zero. - - -- Function: mp_limb_t mpn_lshift (mp_limb_t *RP, const mp_limb_t *SP, - mp_size_t N, unsigned int COUNT) - Shift {SP, N} left by COUNT bits, and write the result to {RP, N}. - The bits shifted out at the left are returned in the least - significant COUNT bits of the return value (the rest of the return - value is zero). - - COUNT must be in the range 1 to mp_bits_per_limb-1. The regions - {SP, N} and {RP, N} may overlap, provided RP >= SP. - - This function is written in assembly for most CPUs. - - -- Function: mp_limb_t mpn_rshift (mp_limb_t *RP, const mp_limb_t *SP, - mp_size_t N, unsigned int COUNT) - Shift {SP, N} right by COUNT bits, and write the result to {RP, - N}. The bits shifted out at the right are returned in the most - significant COUNT bits of the return value (the rest of the return - value is zero). - - COUNT must be in the range 1 to mp_bits_per_limb-1. The regions - {SP, N} and {RP, N} may overlap, provided RP <= SP. - - This function is written in assembly for most CPUs. - - -- Function: int mpn_cmp (const mp_limb_t *S1P, const mp_limb_t *S2P, - mp_size_t N) - Compare {S1P, N} and {S2P, N} and return a positive value if S1 > - S2, 0 if they are equal, or a negative value if S1 < S2. - - -- Function: mp_size_t mpn_gcd (mp_limb_t *RP, mp_limb_t *XP, - mp_size_t XN, mp_limb_t *YP, mp_size_t YN) - Set {RP, RETVAL} to the greatest common divisor of {XP, XN} and - {YP, YN}. The result can be up to YN limbs, the return value is - the actual number produced. Both source operands are destroyed. - - {XP, XN} must have at least as many bits as {YP, YN}. {YP, YN} - must be odd. Both operands must have non-zero most significant - limbs. No overlap is permitted between {XP, XN} and {YP, YN}. - - -- Function: mp_limb_t mpn_gcd_1 (const mp_limb_t *XP, mp_size_t XN, - mp_limb_t YLIMB) - Return the greatest common divisor of {XP, XN} and YLIMB. Both - operands must be non-zero. - - -- Function: mp_size_t mpn_gcdext (mp_limb_t *GP, mp_limb_t *SP, - mp_size_t *SN, mp_limb_t *XP, mp_size_t XN, mp_limb_t *YP, - mp_size_t YN) - Let U be defined by {XP, XN} and let V be defined by {YP, YN}. - - Compute the greatest common divisor G of U and V. Compute a - cofactor S such that G = US + VT. The second cofactor T is not - computed but can easily be obtained from (G - U*S) / V (the - division will be exact). It is required that U >= V > 0. - - S satisfies S = 1 or abs(S) < V / (2 G). S = 0 if and only if V - divides U (i.e., G = V). - - Store G at GP and let the return value define its limb count. - Store S at SP and let |*SN| define its limb count. S can be - negative; when this happens *SN will be negative. The areas at GP - and SP should each have room for XN+1 limbs. - - The areas {XP, XN+1} and {YP, YN+1} are destroyed (i.e. the input - operands plus an extra limb past the end of each). - - Compatibility note: GMP 4.3.0 and 4.3.1 defined S less strictly. - Earlier as well as later GMP releases define S as described here. - - -- Function: mp_size_t mpn_sqrtrem (mp_limb_t *R1P, mp_limb_t *R2P, - const mp_limb_t *SP, mp_size_t N) - Compute the square root of {SP, N} and put the result at {R1P, - ceil(N/2)} and the remainder at {R2P, RETVAL}. R2P needs space - for N limbs, but the return value indicates how many are produced. - - The most significant limb of {SP, N} must be non-zero. The areas - {R1P, ceil(N/2)} and {SP, N} must be completely separate. The - areas {R2P, N} and {SP, N} must be either identical or completely - separate. - - If the remainder is not wanted then R2P can be `NULL', and in this - case the return value is zero or non-zero according to whether the - remainder would have been zero or non-zero. - - A return value of zero indicates a perfect square. See also - `mpz_perfect_square_p'. - - -- Function: mp_size_t mpn_get_str (unsigned char *STR, int BASE, - mp_limb_t *S1P, mp_size_t S1N) - Convert {S1P, S1N} to a raw unsigned char array at STR in base - BASE, and return the number of characters produced. There may be - leading zeros in the string. The string is not in ASCII; to - convert it to printable format, add the ASCII codes for `0' or - `A', depending on the base and range. BASE can vary from 2 to 256. - - The most significant limb of the input {S1P, S1N} must be - non-zero. The input {S1P, S1N} is clobbered, except when BASE is - a power of 2, in which case it's unchanged. - - The area at STR has to have space for the largest possible number - represented by a S1N long limb array, plus one extra character. - - -- Function: mp_size_t mpn_set_str (mp_limb_t *RP, const unsigned char - *STR, size_t STRSIZE, int BASE) - Convert bytes {STR,STRSIZE} in the given BASE to limbs at RP. - - STR[0] is the most significant byte and STR[STRSIZE-1] is the - least significant. Each byte should be a value in the range 0 to - BASE-1, not an ASCII character. BASE can vary from 2 to 256. - - The return value is the number of limbs written to RP. If the most - significant input byte is non-zero then the high limb at RP will be - non-zero, and only that exact number of limbs will be required - there. - - If the most significant input byte is zero then there may be high - zero limbs written to RP and included in the return value. - - STRSIZE must be at least 1, and no overlap is permitted between - {STR,STRSIZE} and the result at RP. - - -- Function: mp_bitcnt_t mpn_scan0 (const mp_limb_t *S1P, mp_bitcnt_t - BIT) - Scan S1P from bit position BIT for the next clear bit. - - It is required that there be a clear bit within the area at S1P at - or beyond bit position BIT, so that the function has something to - return. - - -- Function: mp_bitcnt_t mpn_scan1 (const mp_limb_t *S1P, mp_bitcnt_t - BIT) - Scan S1P from bit position BIT for the next set bit. - - It is required that there be a set bit within the area at S1P at or - beyond bit position BIT, so that the function has something to - return. - - -- Function: void mpn_random (mp_limb_t *R1P, mp_size_t R1N) - -- Function: void mpn_random2 (mp_limb_t *R1P, mp_size_t R1N) - Generate a random number of length R1N and store it at R1P. The - most significant limb is always non-zero. `mpn_random' generates - uniformly distributed limb data, `mpn_random2' generates long - strings of zeros and ones in the binary representation. - - `mpn_random2' is intended for testing the correctness of the `mpn' - routines. - - -- Function: mp_bitcnt_t mpn_popcount (const mp_limb_t *S1P, mp_size_t - N) - Count the number of set bits in {S1P, N}. - - -- Function: mp_bitcnt_t mpn_hamdist (const mp_limb_t *S1P, const - mp_limb_t *S2P, mp_size_t N) - Compute the hamming distance between {S1P, N} and {S2P, N}, which - is the number of bit positions where the two operands have - different bit values. - - -- Function: int mpn_perfect_square_p (const mp_limb_t *S1P, mp_size_t - N) - Return non-zero iff {S1P, N} is a perfect square. - - -- Function: void mpn_and_n (mp_limb_t *RP, const mp_limb_t *S1P, - const mp_limb_t *S2P, mp_size_t N) - Perform the bitwise logical and of {S1P, N} and {S2P, N}, and - write the result to {RP, N}. - - -- Function: void mpn_ior_n (mp_limb_t *RP, const mp_limb_t *S1P, - const mp_limb_t *S2P, mp_size_t N) - Perform the bitwise logical inclusive or of {S1P, N} and {S2P, N}, - and write the result to {RP, N}. - - -- Function: void mpn_xor_n (mp_limb_t *RP, const mp_limb_t *S1P, - const mp_limb_t *S2P, mp_size_t N) - Perform the bitwise logical exclusive or of {S1P, N} and {S2P, N}, - and write the result to {RP, N}. - - -- Function: void mpn_andn_n (mp_limb_t *RP, const mp_limb_t *S1P, - const mp_limb_t *S2P, mp_size_t N) - Perform the bitwise logical and of {S1P, N} and the bitwise - complement of {S2P, N}, and write the result to {RP, N}. - - -- Function: void mpn_iorn_n (mp_limb_t *RP, const mp_limb_t *S1P, - const mp_limb_t *S2P, mp_size_t N) - Perform the bitwise logical inclusive or of {S1P, N} and the - bitwise complement of {S2P, N}, and write the result to {RP, N}. - - -- Function: void mpn_nand_n (mp_limb_t *RP, const mp_limb_t *S1P, - const mp_limb_t *S2P, mp_size_t N) - Perform the bitwise logical and of {S1P, N} and {S2P, N}, and - write the bitwise complement of the result to {RP, N}. - - -- Function: void mpn_nior_n (mp_limb_t *RP, const mp_limb_t *S1P, - const mp_limb_t *S2P, mp_size_t N) - Perform the bitwise logical inclusive or of {S1P, N} and {S2P, N}, - and write the bitwise complement of the result to {RP, N}. - - -- Function: void mpn_xnor_n (mp_limb_t *RP, const mp_limb_t *S1P, - const mp_limb_t *S2P, mp_size_t N) - Perform the bitwise logical exclusive or of {S1P, N} and {S2P, N}, - and write the bitwise complement of the result to {RP, N}. - - -- Function: void mpn_com (mp_limb_t *RP, const mp_limb_t *SP, - mp_size_t N) - Perform the bitwise complement of {SP, N}, and write the result to - {RP, N}. - - -- Function: void mpn_copyi (mp_limb_t *RP, const mp_limb_t *S1P, - mp_size_t N) - Copy from {S1P, N} to {RP, N}, increasingly. - - -- Function: void mpn_copyd (mp_limb_t *RP, const mp_limb_t *S1P, - mp_size_t N) - Copy from {S1P, N} to {RP, N}, decreasingly. - - -- Function: void mpn_zero (mp_limb_t *RP, mp_size_t N) - Zero {RP, N}. - - -8.1 Nails -========= - -*Everything in this section is highly experimental and may disappear or -be subject to incompatible changes in a future version of GMP.* - - Nails are an experimental feature whereby a few bits are left unused -at the top of each `mp_limb_t'. This can significantly improve carry -handling on some processors. - - All the `mpn' functions accepting limb data will expect the nail -bits to be zero on entry, and will return data with the nails similarly -all zero. This applies both to limb vectors and to single limb -arguments. - - Nails can be enabled by configuring with `--enable-nails'. By -default the number of bits will be chosen according to what suits the -host processor, but a particular number can be selected with -`--enable-nails=N'. - - At the mpn level, a nail build is neither source nor binary -compatible with a non-nail build, strictly speaking. But programs -acting on limbs only through the mpn functions are likely to work -equally well with either build, and judicious use of the definitions -below should make any program compatible with either build, at the -source level. - - For the higher level routines, meaning `mpz' etc, a nail build -should be fully source and binary compatible with a non-nail build. - - -- Macro: GMP_NAIL_BITS - -- Macro: GMP_NUMB_BITS - -- Macro: GMP_LIMB_BITS - `GMP_NAIL_BITS' is the number of nail bits, or 0 when nails are - not in use. `GMP_NUMB_BITS' is the number of data bits in a limb. - `GMP_LIMB_BITS' is the total number of bits in an `mp_limb_t'. In - all cases - - GMP_LIMB_BITS == GMP_NAIL_BITS + GMP_NUMB_BITS - - -- Macro: GMP_NAIL_MASK - -- Macro: GMP_NUMB_MASK - Bit masks for the nail and number parts of a limb. - `GMP_NAIL_MASK' is 0 when nails are not in use. - - `GMP_NAIL_MASK' is not often needed, since the nail part can be - obtained with `x >> GMP_NUMB_BITS', and that means one less large - constant, which can help various RISC chips. - - -- Macro: GMP_NUMB_MAX - The maximum value that can be stored in the number part of a limb. - This is the same as `GMP_NUMB_MASK', but can be used for clarity - when doing comparisons rather than bit-wise operations. - - The term "nails" comes from finger or toe nails, which are at the -ends of a limb (arm or leg). "numb" is short for number, but is also -how the developers felt after trying for a long time to come up with -sensible names for these things. - - In the future (the distant future most likely) a non-zero nail might -be permitted, giving non-unique representations for numbers in a limb -vector. This would help vector processors since carries would only -ever need to propagate one or two limbs. - - -File: gmp.info, Node: Random Number Functions, Next: Formatted Output, Prev: Low-level Functions, Up: Top - -9 Random Number Functions -************************* - -Sequences of pseudo-random numbers in GMP are generated using a -variable of type `gmp_randstate_t', which holds an algorithm selection -and a current state. Such a variable must be initialized by a call to -one of the `gmp_randinit' functions, and can be seeded with one of the -`gmp_randseed' functions. - - The functions actually generating random numbers are described in -*Note Integer Random Numbers::, and *Note Miscellaneous Float -Functions::. - - The older style random number functions don't accept a -`gmp_randstate_t' parameter but instead share a global variable of that -type. They use a default algorithm and are currently not seeded -(though perhaps that will change in the future). The new functions -accepting a `gmp_randstate_t' are recommended for applications that -care about randomness. - -* Menu: - -* Random State Initialization:: -* Random State Seeding:: -* Random State Miscellaneous:: - - -File: gmp.info, Node: Random State Initialization, Next: Random State Seeding, Prev: Random Number Functions, Up: Random Number Functions - -9.1 Random State Initialization -=============================== - - -- Function: void gmp_randinit_default (gmp_randstate_t STATE) - Initialize STATE with a default algorithm. This will be a - compromise between speed and randomness, and is recommended for - applications with no special requirements. Currently this is - `gmp_randinit_mt'. - - -- Function: void gmp_randinit_mt (gmp_randstate_t STATE) - Initialize STATE for a Mersenne Twister algorithm. This algorithm - is fast and has good randomness properties. - - -- Function: void gmp_randinit_lc_2exp (gmp_randstate_t STATE, mpz_t - A, unsigned long C, mp_bitcnt_t M2EXP) - Initialize STATE with a linear congruential algorithm X = (A*X + - C) mod 2^M2EXP. - - The low bits of X in this algorithm are not very random. The least - significant bit will have a period no more than 2, and the second - bit no more than 4, etc. For this reason only the high half of - each X is actually used. - - When a random number of more than M2EXP/2 bits is to be generated, - multiple iterations of the recurrence are used and the results - concatenated. - - -- Function: int gmp_randinit_lc_2exp_size (gmp_randstate_t STATE, - mp_bitcnt_t SIZE) - Initialize STATE for a linear congruential algorithm as per - `gmp_randinit_lc_2exp'. A, C and M2EXP are selected from a table, - chosen so that SIZE bits (or more) of each X will be used, ie. - M2EXP/2 >= SIZE. - - If successful the return value is non-zero. If SIZE is bigger - than the table data provides then the return value is zero. The - maximum SIZE currently supported is 128. - - -- Function: void gmp_randinit_set (gmp_randstate_t ROP, - gmp_randstate_t OP) - Initialize ROP with a copy of the algorithm and state from OP. - - -- Function: void gmp_randinit (gmp_randstate_t STATE, - gmp_randalg_t ALG, ...) - *This function is obsolete.* - - Initialize STATE with an algorithm selected by ALG. The only - choice is `GMP_RAND_ALG_LC', which is `gmp_randinit_lc_2exp_size' - described above. A third parameter of type `unsigned long' is - required, this is the SIZE for that function. - `GMP_RAND_ALG_DEFAULT' or 0 are the same as `GMP_RAND_ALG_LC'. - - `gmp_randinit' sets bits in the global variable `gmp_errno' to - indicate an error. `GMP_ERROR_UNSUPPORTED_ARGUMENT' if ALG is - unsupported, or `GMP_ERROR_INVALID_ARGUMENT' if the SIZE parameter - is too big. It may be noted this error reporting is not thread - safe (a good reason to use `gmp_randinit_lc_2exp_size' instead). - - -- Function: void gmp_randclear (gmp_randstate_t STATE) - Free all memory occupied by STATE. - - -File: gmp.info, Node: Random State Seeding, Next: Random State Miscellaneous, Prev: Random State Initialization, Up: Random Number Functions - -9.2 Random State Seeding -======================== - - -- Function: void gmp_randseed (gmp_randstate_t STATE, mpz_t SEED) - -- Function: void gmp_randseed_ui (gmp_randstate_t STATE, - unsigned long int SEED) - Set an initial seed value into STATE. - - The size of a seed determines how many different sequences of - random numbers that it's possible to generate. The "quality" of - the seed is the randomness of a given seed compared to the - previous seed used, and this affects the randomness of separate - number sequences. The method for choosing a seed is critical if - the generated numbers are to be used for important applications, - such as generating cryptographic keys. - - Traditionally the system time has been used to seed, but care - needs to be taken with this. If an application seeds often and - the resolution of the system clock is low, then the same sequence - of numbers might be repeated. Also, the system time is quite easy - to guess, so if unpredictability is required then it should - definitely not be the only source for the seed value. On some - systems there's a special device `/dev/random' which provides - random data better suited for use as a seed. - - -File: gmp.info, Node: Random State Miscellaneous, Prev: Random State Seeding, Up: Random Number Functions - -9.3 Random State Miscellaneous -============================== - - -- Function: unsigned long gmp_urandomb_ui (gmp_randstate_t STATE, - unsigned long N) - Return a uniformly distributed random number of N bits, ie. in the - range 0 to 2^N-1 inclusive. N must be less than or equal to the - number of bits in an `unsigned long'. - - -- Function: unsigned long gmp_urandomm_ui (gmp_randstate_t STATE, - unsigned long N) - Return a uniformly distributed random number in the range 0 to - N-1, inclusive. - - -File: gmp.info, Node: Formatted Output, Next: Formatted Input, Prev: Random Number Functions, Up: Top - -10 Formatted Output -******************* - -* Menu: - -* Formatted Output Strings:: -* Formatted Output Functions:: -* C++ Formatted Output:: - - -File: gmp.info, Node: Formatted Output Strings, Next: Formatted Output Functions, Prev: Formatted Output, Up: Formatted Output - -10.1 Format Strings -=================== - -`gmp_printf' and friends accept format strings similar to the standard C -`printf' (*note Formatted Output: (libc)Formatted Output.). A format -specification is of the form - - % [flags] [width] [.[precision]] [type] conv - - GMP adds types `Z', `Q' and `F' for `mpz_t', `mpq_t' and `mpf_t' -respectively, `M' for `mp_limb_t', and `N' for an `mp_limb_t' array. -`Z', `Q', `M' and `N' behave like integers. `Q' will print a `/' and a -denominator, if needed. `F' behaves like a float. For example, - - mpz_t z; - gmp_printf ("%s is an mpz %Zd\n", "here", z); - - mpq_t q; - gmp_printf ("a hex rational: %#40Qx\n", q); - - mpf_t f; - int n; - gmp_printf ("fixed point mpf %.*Ff with %d digits\n", n, f, n); - - mp_limb_t l; - gmp_printf ("limb %Mu\n", l); - - const mp_limb_t *ptr; - mp_size_t size; - gmp_printf ("limb array %Nx\n", ptr, size); - - For `N' the limbs are expected least significant first, as per the -`mpn' functions (*note Low-level Functions::). A negative size can be -given to print the value as a negative. - - All the standard C `printf' types behave the same as the C library -`printf', and can be freely intermixed with the GMP extensions. In the -current implementation the standard parts of the format string are -simply handed to `printf' and only the GMP extensions handled directly. - - The flags accepted are as follows. GLIBC style ' is only for the -standard C types (not the GMP types), and only if the C library -supports it. - - 0 pad with zeros (rather than spaces) - # show the base with `0x', `0X' or `0' - + always show a sign - (space) show a space or a `-' sign - ' group digits, GLIBC style (not GMP types) - - The optional width and precision can be given as a number within the -format string, or as a `*' to take an extra parameter of type `int', the -same as the standard `printf'. - - The standard types accepted are as follows. `h' and `l' are -portable, the rest will depend on the compiler (or include files) for -the type and the C library for the output. - - h short - hh char - j intmax_t or uintmax_t - l long or wchar_t - ll long long - L long double - q quad_t or u_quad_t - t ptrdiff_t - z size_t - -The GMP types are - - F mpf_t, float conversions - Q mpq_t, integer conversions - M mp_limb_t, integer conversions - N mp_limb_t array, integer conversions - Z mpz_t, integer conversions - - The conversions accepted are as follows. `a' and `A' are always -supported for `mpf_t' but depend on the C library for standard C float -types. `m' and `p' depend on the C library. - - a A hex floats, C99 style - c character - d decimal integer - e E scientific format float - f fixed point float - i same as d - g G fixed or scientific float - m `strerror' string, GLIBC style - n store characters written so far - o octal integer - p pointer - s string - u unsigned integer - x X hex integer - - `o', `x' and `X' are unsigned for the standard C types, but for -types `Z', `Q' and `N' they are signed. `u' is not meaningful for `Z', -`Q' and `N'. - - `M' is a proxy for the C library `l' or `L', according to the size -of `mp_limb_t'. Unsigned conversions will be usual, but a signed -conversion can be used and will interpret the value as a twos complement -negative. - - `n' can be used with any type, even the GMP types. - - Other types or conversions that might be accepted by the C library -`printf' cannot be used through `gmp_printf', this includes for -instance extensions registered with GLIBC `register_printf_function'. -Also currently there's no support for POSIX `$' style numbered arguments -(perhaps this will be added in the future). - - The precision field has it's usual meaning for integer `Z' and float -`F' types, but is currently undefined for `Q' and should not be used -with that. - - `mpf_t' conversions only ever generate as many digits as can be -accurately represented by the operand, the same as `mpf_get_str' does. -Zeros will be used if necessary to pad to the requested precision. This -happens even for an `f' conversion of an `mpf_t' which is an integer, -for instance 2^1024 in an `mpf_t' of 128 bits precision will only -produce about 40 digits, then pad with zeros to the decimal point. An -empty precision field like `%.Fe' or `%.Ff' can be used to specifically -request just the significant digits. - - The decimal point character (or string) is taken from the current -locale settings on systems which provide `localeconv' (*note Locales -and Internationalization: (libc)Locales.). The C library will normally -do the same for standard float output. - - The format string is only interpreted as plain `char's, multibyte -characters are not recognised. Perhaps this will change in the future. - - -File: gmp.info, Node: Formatted Output Functions, Next: C++ Formatted Output, Prev: Formatted Output Strings, Up: Formatted Output - -10.2 Functions -============== - -Each of the following functions is similar to the corresponding C -library function. The basic `printf' forms take a variable argument -list. The `vprintf' forms take an argument pointer, see *Note Variadic -Functions: (libc)Variadic Functions, or `man 3 va_start'. - - It should be emphasised that if a format string is invalid, or the -arguments don't match what the format specifies, then the behaviour of -any of these functions will be unpredictable. GCC format string -checking is not available, since it doesn't recognise the GMP -extensions. - - The file based functions `gmp_printf' and `gmp_fprintf' will return --1 to indicate a write error. Output is not "atomic", so partial -output may be produced if a write error occurs. All the functions can -return -1 if the C library `printf' variant in use returns -1, but this -shouldn't normally occur. - - -- Function: int gmp_printf (const char *FMT, ...) - -- Function: int gmp_vprintf (const char *FMT, va_list AP) - Print to the standard output `stdout'. Return the number of - characters written, or -1 if an error occurred. - - -- Function: int gmp_fprintf (FILE *FP, const char *FMT, ...) - -- Function: int gmp_vfprintf (FILE *FP, const char *FMT, va_list AP) - Print to the stream FP. Return the number of characters written, - or -1 if an error occurred. - - -- Function: int gmp_sprintf (char *BUF, const char *FMT, ...) - -- Function: int gmp_vsprintf (char *BUF, const char *FMT, va_list AP) - Form a null-terminated string in BUF. Return the number of - characters written, excluding the terminating null. - - No overlap is permitted between the space at BUF and the string - FMT. - - These functions are not recommended, since there's no protection - against exceeding the space available at BUF. - - -- Function: int gmp_snprintf (char *BUF, size_t SIZE, const char - *FMT, ...) - -- Function: int gmp_vsnprintf (char *BUF, size_t SIZE, const char - *FMT, va_list AP) - Form a null-terminated string in BUF. No more than SIZE bytes - will be written. To get the full output, SIZE must be enough for - the string and null-terminator. - - The return value is the total number of characters which ought to - have been produced, excluding the terminating null. If RETVAL >= - SIZE then the actual output has been truncated to the first SIZE-1 - characters, and a null appended. - - No overlap is permitted between the region {BUF,SIZE} and the FMT - string. - - Notice the return value is in ISO C99 `snprintf' style. This is - so even if the C library `vsnprintf' is the older GLIBC 2.0.x - style. - - -- Function: int gmp_asprintf (char **PP, const char *FMT, ...) - -- Function: int gmp_vasprintf (char **PP, const char *FMT, va_list AP) - Form a null-terminated string in a block of memory obtained from - the current memory allocation function (*note Custom - Allocation::). The block will be the size of the string and - null-terminator. The address of the block in stored to *PP. The - return value is the number of characters produced, excluding the - null-terminator. - - Unlike the C library `asprintf', `gmp_asprintf' doesn't return -1 - if there's no more memory available, it lets the current allocation - function handle that. - - -- Function: int gmp_obstack_printf (struct obstack *OB, const char - *FMT, ...) - -- Function: int gmp_obstack_vprintf (struct obstack *OB, const char - *FMT, va_list AP) - Append to the current object in OB. The return value is the - number of characters written. A null-terminator is not written. - - FMT cannot be within the current object in OB, since that object - might move as it grows. - - These functions are available only when the C library provides the - obstack feature, which probably means only on GNU systems, see - *Note Obstacks: (libc)Obstacks. - - -File: gmp.info, Node: C++ Formatted Output, Prev: Formatted Output Functions, Up: Formatted Output - -10.3 C++ Formatted Output -========================= - -The following functions are provided in `libgmpxx' (*note Headers and -Libraries::), which is built if C++ support is enabled (*note Build -Options::). Prototypes are available from `'. - - -- Function: ostream& operator<< (ostream& STREAM, mpz_t OP) - Print OP to STREAM, using its `ios' formatting settings. - `ios::width' is reset to 0 after output, the same as the standard - `ostream operator<<' routines do. - - In hex or octal, OP is printed as a signed number, the same as for - decimal. This is unlike the standard `operator<<' routines on - `int' etc, which instead give twos complement. - - -- Function: ostream& operator<< (ostream& STREAM, mpq_t OP) - Print OP to STREAM, using its `ios' formatting settings. - `ios::width' is reset to 0 after output, the same as the standard - `ostream operator<<' routines do. - - Output will be a fraction like `5/9', or if the denominator is 1 - then just a plain integer like `123'. - - In hex or octal, OP is printed as a signed value, the same as for - decimal. If `ios::showbase' is set then a base indicator is shown - on both the numerator and denominator (if the denominator is - required). - - -- Function: ostream& operator<< (ostream& STREAM, mpf_t OP) - Print OP to STREAM, using its `ios' formatting settings. - `ios::width' is reset to 0 after output, the same as the standard - `ostream operator<<' routines do. - - The decimal point follows the standard library float `operator<<', - which on recent systems means the `std::locale' imbued on STREAM. - - Hex and octal are supported, unlike the standard `operator<<' on - `double'. The mantissa will be in hex or octal, the exponent will - be in decimal. For hex the exponent delimiter is an `@'. This is - as per `mpf_out_str'. - - `ios::showbase' is supported, and will put a base on the mantissa, - for example hex `0x1.8' or `0x0.8', or octal `01.4' or `00.4'. - This last form is slightly strange, but at least differentiates - itself from decimal. - - These operators mean that GMP types can be printed in the usual C++ -way, for example, - - mpz_t z; - int n; - ... - cout << "iteration " << n << " value " << z << "\n"; - - But note that `ostream' output (and `istream' input, *note C++ -Formatted Input::) is the only overloading available for the GMP types -and that for instance using `+' with an `mpz_t' will have unpredictable -results. For classes with overloading, see *Note C++ Class Interface::. - - -File: gmp.info, Node: Formatted Input, Next: C++ Class Interface, Prev: Formatted Output, Up: Top - -11 Formatted Input -****************** - -* Menu: - -* Formatted Input Strings:: -* Formatted Input Functions:: -* C++ Formatted Input:: - - -File: gmp.info, Node: Formatted Input Strings, Next: Formatted Input Functions, Prev: Formatted Input, Up: Formatted Input - -11.1 Formatted Input Strings -============================ - -`gmp_scanf' and friends accept format strings similar to the standard C -`scanf' (*note Formatted Input: (libc)Formatted Input.). A format -specification is of the form - - % [flags] [width] [type] conv - - GMP adds types `Z', `Q' and `F' for `mpz_t', `mpq_t' and `mpf_t' -respectively. `Z' and `Q' behave like integers. `Q' will read a `/' -and a denominator, if present. `F' behaves like a float. - - GMP variables don't require an `&' when passed to `gmp_scanf', since -they're already "call-by-reference". For example, - - /* to read say "a(5) = 1234" */ - int n; - mpz_t z; - gmp_scanf ("a(%d) = %Zd\n", &n, z); - - mpq_t q1, q2; - gmp_sscanf ("0377 + 0x10/0x11", "%Qi + %Qi", q1, q2); - - /* to read say "topleft (1.55,-2.66)" */ - mpf_t x, y; - char buf[32]; - gmp_scanf ("%31s (%Ff,%Ff)", buf, x, y); - - All the standard C `scanf' types behave the same as in the C library -`scanf', and can be freely intermixed with the GMP extensions. In the -current implementation the standard parts of the format string are -simply handed to `scanf' and only the GMP extensions handled directly. - - The flags accepted are as follows. `a' and `'' will depend on -support from the C library, and `'' cannot be used with GMP types. - - * read but don't store - a allocate a buffer (string conversions) - ' grouped digits, GLIBC style (not GMP - types) - - The standard types accepted are as follows. `h' and `l' are -portable, the rest will depend on the compiler (or include files) for -the type and the C library for the input. - - h short - hh char - j intmax_t or uintmax_t - l long int, double or wchar_t - ll long long - L long double - q quad_t or u_quad_t - t ptrdiff_t - z size_t - -The GMP types are - - F mpf_t, float conversions - Q mpq_t, integer conversions - Z mpz_t, integer conversions - - The conversions accepted are as follows. `p' and `[' will depend on -support from the C library, the rest are standard. - - c character or characters - d decimal integer - e E f g G float - i integer with base indicator - n characters read so far - o octal integer - p pointer - s string of non-whitespace characters - u decimal integer - x X hex integer - [ string of characters in a set - - `e', `E', `f', `g' and `G' are identical, they all read either fixed -point or scientific format, and either upper or lower case `e' for the -exponent in scientific format. - - C99 style hex float format (`printf %a', *note Formatted Output -Strings::) is always accepted for `mpf_t', but for the standard float -types it will depend on the C library. - - `x' and `X' are identical, both accept both upper and lower case -hexadecimal. - - `o', `u', `x' and `X' all read positive or negative values. For the -standard C types these are described as "unsigned" conversions, but -that merely affects certain overflow handling, negatives are still -allowed (per `strtoul', *note Parsing of Integers: (libc)Parsing of -Integers.). For GMP types there are no overflows, so `d' and `u' are -identical. - - `Q' type reads the numerator and (optional) denominator as given. -If the value might not be in canonical form then `mpq_canonicalize' -must be called before using it in any calculations (*note Rational -Number Functions::). - - `Qi' will read a base specification separately for the numerator and -denominator. For example `0x10/11' would be 16/11, whereas `0x10/0x11' -would be 16/17. - - `n' can be used with any of the types above, even the GMP types. -`*' to suppress assignment is allowed, though in that case it would do -nothing at all. - - Other conversions or types that might be accepted by the C library -`scanf' cannot be used through `gmp_scanf'. - - Whitespace is read and discarded before a field, except for `c' and -`[' conversions. - - For float conversions, the decimal point character (or string) -expected is taken from the current locale settings on systems which -provide `localeconv' (*note Locales and Internationalization: -(libc)Locales.). The C library will normally do the same for standard -float input. - - The format string is only interpreted as plain `char's, multibyte -characters are not recognised. Perhaps this will change in the future. - - -File: gmp.info, Node: Formatted Input Functions, Next: C++ Formatted Input, Prev: Formatted Input Strings, Up: Formatted Input - -11.2 Formatted Input Functions -============================== - -Each of the following functions is similar to the corresponding C -library function. The plain `scanf' forms take a variable argument -list. The `vscanf' forms take an argument pointer, see *Note Variadic -Functions: (libc)Variadic Functions, or `man 3 va_start'. - - It should be emphasised that if a format string is invalid, or the -arguments don't match what the format specifies, then the behaviour of -any of these functions will be unpredictable. GCC format string -checking is not available, since it doesn't recognise the GMP -extensions. - - No overlap is permitted between the FMT string and any of the results -produced. - - -- Function: int gmp_scanf (const char *FMT, ...) - -- Function: int gmp_vscanf (const char *FMT, va_list AP) - Read from the standard input `stdin'. - - -- Function: int gmp_fscanf (FILE *FP, const char *FMT, ...) - -- Function: int gmp_vfscanf (FILE *FP, const char *FMT, va_list AP) - Read from the stream FP. - - -- Function: int gmp_sscanf (const char *S, const char *FMT, ...) - -- Function: int gmp_vsscanf (const char *S, const char *FMT, va_list - AP) - Read from a null-terminated string S. - - The return value from each of these functions is the same as the -standard C99 `scanf', namely the number of fields successfully parsed -and stored. `%n' fields and fields read but suppressed by `*' don't -count towards the return value. - - If end of input (or a file error) is reached before a character for -a field or a literal, and if no previous non-suppressed fields have -matched, then the return value is `EOF' instead of 0. A whitespace -character in the format string is only an optional match and doesn't -induce an `EOF' in this fashion. Leading whitespace read and discarded -for a field don't count as characters for that field. - - For the GMP types, input parsing follows C99 rules, namely one -character of lookahead is used and characters are read while they -continue to meet the format requirements. If this doesn't provide a -complete number then the function terminates, with that field not -stored nor counted towards the return value. For instance with `mpf_t' -an input `1.23e-XYZ' would be read up to the `X' and that character -pushed back since it's not a digit. The string `1.23e-' would then be -considered invalid since an `e' must be followed by at least one digit. - - For the standard C types, in the current implementation GMP calls -the C library `scanf' functions, which might have looser rules about -what constitutes a valid input. - - Note that `gmp_sscanf' is the same as `gmp_fscanf' and only does one -character of lookahead when parsing. Although clearly it could look at -its entire input, it is deliberately made identical to `gmp_fscanf', -the same way C99 `sscanf' is the same as `fscanf'. - - -File: gmp.info, Node: C++ Formatted Input, Prev: Formatted Input Functions, Up: Formatted Input - -11.3 C++ Formatted Input -======================== - -The following functions are provided in `libgmpxx' (*note Headers and -Libraries::), which is built only if C++ support is enabled (*note -Build Options::). Prototypes are available from `'. - - -- Function: istream& operator>> (istream& STREAM, mpz_t ROP) - Read ROP from STREAM, using its `ios' formatting settings. - - -- Function: istream& operator>> (istream& STREAM, mpq_t ROP) - An integer like `123' will be read, or a fraction like `5/9'. No - whitespace is allowed around the `/'. If the fraction is not in - canonical form then `mpq_canonicalize' must be called (*note - Rational Number Functions::) before operating on it. - - As per integer input, an `0' or `0x' base indicator is read when - none of `ios::dec', `ios::oct' or `ios::hex' are set. This is - done separately for numerator and denominator, so that for instance - `0x10/11' is 16/11 and `0x10/0x11' is 16/17. - - -- Function: istream& operator>> (istream& STREAM, mpf_t ROP) - Read ROP from STREAM, using its `ios' formatting settings. - - Hex or octal floats are not supported, but might be in the future, - or perhaps it's best to accept only what the standard float - `operator>>' does. - - Note that digit grouping specified by the `istream' locale is -currently not accepted. Perhaps this will change in the future. - - - These operators mean that GMP types can be read in the usual C++ -way, for example, - - mpz_t z; - ... - cin >> z; - - But note that `istream' input (and `ostream' output, *note C++ -Formatted Output::) is the only overloading available for the GMP types -and that for instance using `+' with an `mpz_t' will have unpredictable -results. For classes with overloading, see *Note C++ Class Interface::. - - -File: gmp.info, Node: C++ Class Interface, Next: BSD Compatible Functions, Prev: Formatted Input, Up: Top - -12 C++ Class Interface -********************** - -This chapter describes the C++ class based interface to GMP. - - All GMP C language types and functions can be used in C++ programs, -since `gmp.h' has `extern "C"' qualifiers, but the class interface -offers overloaded functions and operators which may be more convenient. - - Due to the implementation of this interface, a reasonably recent C++ -compiler is required, one supporting namespaces, partial specialization -of templates and member templates. For GCC this means version 2.91 or -later. - - *Everything described in this chapter is to be considered preliminary -and might be subject to incompatible changes if some unforeseen -difficulty reveals itself.* - -* Menu: - -* C++ Interface General:: -* C++ Interface Integers:: -* C++ Interface Rationals:: -* C++ Interface Floats:: -* C++ Interface Random Numbers:: -* C++ Interface Limitations:: - - -File: gmp.info, Node: C++ Interface General, Next: C++ Interface Integers, Prev: C++ Class Interface, Up: C++ Class Interface - -12.1 C++ Interface General -========================== - -All the C++ classes and functions are available with - - #include - - Programs should be linked with the `libgmpxx' and `libgmp' -libraries. For example, - - g++ mycxxprog.cc -lgmpxx -lgmp - -The classes defined are - - -- Class: mpz_class - -- Class: mpq_class - -- Class: mpf_class - - The standard operators and various standard functions are overloaded -to allow arithmetic with these classes. For example, - - int - main (void) - { - mpz_class a, b, c; - - a = 1234; - b = "-5678"; - c = a+b; - cout << "sum is " << c << "\n"; - cout << "absolute value is " << abs(c) << "\n"; - - return 0; - } - - An important feature of the implementation is that an expression like -`a=b+c' results in a single call to the corresponding `mpz_add', -without using a temporary for the `b+c' part. Expressions which by -their nature imply intermediate values, like `a=b*c+d*e', still use -temporaries though. - - The classes can be freely intermixed in expressions, as can the -classes and the standard types `long', `unsigned long' and `double'. -Smaller types like `int' or `float' can also be intermixed, since C++ -will promote them. - - Note that `bool' is not accepted directly, but must be explicitly -cast to an `int' first. This is because C++ will automatically convert -any pointer to a `bool', so if GMP accepted `bool' it would make all -sorts of invalid class and pointer combinations compile but almost -certainly not do anything sensible. - - Conversions back from the classes to standard C++ types aren't done -automatically, instead member functions like `get_si' are provided (see -the following sections for details). - - Also there are no automatic conversions from the classes to the -corresponding GMP C types, instead a reference to the underlying C -object can be obtained with the following functions, - - -- Function: mpz_t mpz_class::get_mpz_t () - -- Function: mpq_t mpq_class::get_mpq_t () - -- Function: mpf_t mpf_class::get_mpf_t () - - These can be used to call a C function which doesn't have a C++ class -interface. For example to set `a' to the GCD of `b' and `c', - - mpz_class a, b, c; - ... - mpz_gcd (a.get_mpz_t(), b.get_mpz_t(), c.get_mpz_t()); - - In the other direction, a class can be initialized from the -corresponding GMP C type, or assigned to if an explicit constructor is -used. In both cases this makes a copy of the value, it doesn't create -any sort of association. For example, - - mpz_t z; - // ... init and calculate z ... - mpz_class x(z); - mpz_class y; - y = mpz_class (z); - - There are no namespace setups in `gmpxx.h', all types and functions -are simply put into the global namespace. This is what `gmp.h' has -done in the past, and continues to do for compatibility. The extras -provided by `gmpxx.h' follow GMP naming conventions and are unlikely to -clash with anything. - - -File: gmp.info, Node: C++ Interface Integers, Next: C++ Interface Rationals, Prev: C++ Interface General, Up: C++ Class Interface - -12.2 C++ Interface Integers -=========================== - - -- Function: void mpz_class::mpz_class (type N) - Construct an `mpz_class'. All the standard C++ types may be used, - except `long long' and `long double', and all the GMP C++ classes - can be used. Any necessary conversion follows the corresponding C - function, for example `double' follows `mpz_set_d' (*note - Assigning Integers::). - - -- Function: void mpz_class::mpz_class (mpz_t Z) - Construct an `mpz_class' from an `mpz_t'. The value in Z is - copied into the new `mpz_class', there won't be any permanent - association between it and Z. - - -- Function: void mpz_class::mpz_class (const char *S) - -- Function: void mpz_class::mpz_class (const char *S, int BASE = 0) - -- Function: void mpz_class::mpz_class (const string& S) - -- Function: void mpz_class::mpz_class (const string& S, int BASE = 0) - Construct an `mpz_class' converted from a string using - `mpz_set_str' (*note Assigning Integers::). - - If the string is not a valid integer, an `std::invalid_argument' - exception is thrown. The same applies to `operator='. - - -- Function: mpz_class operator/ (mpz_class A, mpz_class D) - -- Function: mpz_class operator% (mpz_class A, mpz_class D) - Divisions involving `mpz_class' round towards zero, as per the - `mpz_tdiv_q' and `mpz_tdiv_r' functions (*note Integer Division::). - This is the same as the C99 `/' and `%' operators. - - The `mpz_fdiv...' or `mpz_cdiv...' functions can always be called - directly if desired. For example, - - mpz_class q, a, d; - ... - mpz_fdiv_q (q.get_mpz_t(), a.get_mpz_t(), d.get_mpz_t()); - - -- Function: mpz_class abs (mpz_class OP1) - -- Function: int cmp (mpz_class OP1, type OP2) - -- Function: int cmp (type OP1, mpz_class OP2) - -- Function: bool mpz_class::fits_sint_p (void) - -- Function: bool mpz_class::fits_slong_p (void) - -- Function: bool mpz_class::fits_sshort_p (void) - -- Function: bool mpz_class::fits_uint_p (void) - -- Function: bool mpz_class::fits_ulong_p (void) - -- Function: bool mpz_class::fits_ushort_p (void) - -- Function: double mpz_class::get_d (void) - -- Function: long mpz_class::get_si (void) - -- Function: string mpz_class::get_str (int BASE = 10) - -- Function: unsigned long mpz_class::get_ui (void) - -- Function: int mpz_class::set_str (const char *STR, int BASE) - -- Function: int mpz_class::set_str (const string& STR, int BASE) - -- Function: int sgn (mpz_class OP) - -- Function: mpz_class sqrt (mpz_class OP) - These functions provide a C++ class interface to the corresponding - GMP C routines. - - `cmp' can be used with any of the classes or the standard C++ - types, except `long long' and `long double'. - - - Overloaded operators for combinations of `mpz_class' and `double' -are provided for completeness, but it should be noted that if the given -`double' is not an integer then the way any rounding is done is -currently unspecified. The rounding might take place at the start, in -the middle, or at the end of the operation, and it might change in the -future. - - Conversions between `mpz_class' and `double', however, are defined -to follow the corresponding C functions `mpz_get_d' and `mpz_set_d'. -And comparisons are always made exactly, as per `mpz_cmp_d'. - - -File: gmp.info, Node: C++ Interface Rationals, Next: C++ Interface Floats, Prev: C++ Interface Integers, Up: C++ Class Interface - -12.3 C++ Interface Rationals -============================ - -In all the following constructors, if a fraction is given then it -should be in canonical form, or if not then `mpq_class::canonicalize' -called. - - -- Function: void mpq_class::mpq_class (type OP) - -- Function: void mpq_class::mpq_class (integer NUM, integer DEN) - Construct an `mpq_class'. The initial value can be a single value - of any type, or a pair of integers (`mpz_class' or standard C++ - integer types) representing a fraction, except that `long long' - and `long double' are not supported. For example, - - mpq_class q (99); - mpq_class q (1.75); - mpq_class q (1, 3); - - -- Function: void mpq_class::mpq_class (mpq_t Q) - Construct an `mpq_class' from an `mpq_t'. The value in Q is - copied into the new `mpq_class', there won't be any permanent - association between it and Q. - - -- Function: void mpq_class::mpq_class (const char *S) - -- Function: void mpq_class::mpq_class (const char *S, int BASE = 0) - -- Function: void mpq_class::mpq_class (const string& S) - -- Function: void mpq_class::mpq_class (const string& S, int BASE = 0) - Construct an `mpq_class' converted from a string using - `mpq_set_str' (*note Initializing Rationals::). - - If the string is not a valid rational, an `std::invalid_argument' - exception is thrown. The same applies to `operator='. - - -- Function: void mpq_class::canonicalize () - Put an `mpq_class' into canonical form, as per *Note Rational - Number Functions::. All arithmetic operators require their - operands in canonical form, and will return results in canonical - form. - - -- Function: mpq_class abs (mpq_class OP) - -- Function: int cmp (mpq_class OP1, type OP2) - -- Function: int cmp (type OP1, mpq_class OP2) - -- Function: double mpq_class::get_d (void) - -- Function: string mpq_class::get_str (int BASE = 10) - -- Function: int mpq_class::set_str (const char *STR, int BASE) - -- Function: int mpq_class::set_str (const string& STR, int BASE) - -- Function: int sgn (mpq_class OP) - These functions provide a C++ class interface to the corresponding - GMP C routines. - - `cmp' can be used with any of the classes or the standard C++ - types, except `long long' and `long double'. - - -- Function: mpz_class& mpq_class::get_num () - -- Function: mpz_class& mpq_class::get_den () - Get a reference to an `mpz_class' which is the numerator or - denominator of an `mpq_class'. This can be used both for read and - write access. If the object returned is modified, it modifies the - original `mpq_class'. - - If direct manipulation might produce a non-canonical value, then - `mpq_class::canonicalize' must be called before further operations. - - -- Function: mpz_t mpq_class::get_num_mpz_t () - -- Function: mpz_t mpq_class::get_den_mpz_t () - Get a reference to the underlying `mpz_t' numerator or denominator - of an `mpq_class'. This can be passed to C functions expecting an - `mpz_t'. Any modifications made to the `mpz_t' will modify the - original `mpq_class'. - - If direct manipulation might produce a non-canonical value, then - `mpq_class::canonicalize' must be called before further operations. - - -- Function: istream& operator>> (istream& STREAM, mpq_class& ROP); - Read ROP from STREAM, using its `ios' formatting settings, the - same as `mpq_t operator>>' (*note C++ Formatted Input::). - - If the ROP read might not be in canonical form then - `mpq_class::canonicalize' must be called. - - -File: gmp.info, Node: C++ Interface Floats, Next: C++ Interface Random Numbers, Prev: C++ Interface Rationals, Up: C++ Class Interface - -12.4 C++ Interface Floats -========================= - -When an expression requires the use of temporary intermediate -`mpf_class' values, like `f=g*h+x*y', those temporaries will have the -same precision as the destination `f'. Explicit constructors can be -used if this doesn't suit. - - -- Function: mpf_class::mpf_class (type OP) - -- Function: mpf_class::mpf_class (type OP, unsigned long PREC) - Construct an `mpf_class'. Any standard C++ type can be used, - except `long long' and `long double', and any of the GMP C++ - classes can be used. - - If PREC is given, the initial precision is that value, in bits. If - PREC is not given, then the initial precision is determined by the - type of OP given. An `mpz_class', `mpq_class', or C++ builtin - type will give the default `mpf' precision (*note Initializing - Floats::). An `mpf_class' or expression will give the precision - of that value. The precision of a binary expression is the higher - of the two operands. - - mpf_class f(1.5); // default precision - mpf_class f(1.5, 500); // 500 bits (at least) - mpf_class f(x); // precision of x - mpf_class f(abs(x)); // precision of x - mpf_class f(-g, 1000); // 1000 bits (at least) - mpf_class f(x+y); // greater of precisions of x and y - - -- Function: void mpf_class::mpf_class (const char *S) - -- Function: void mpf_class::mpf_class (const char *S, unsigned long - PREC, int BASE = 0) - -- Function: void mpf_class::mpf_class (const string& S) - -- Function: void mpf_class::mpf_class (const string& S, unsigned long - PREC, int BASE = 0) - Construct an `mpf_class' converted from a string using - `mpf_set_str' (*note Assigning Floats::). If PREC is given, the - initial precision is that value, in bits. If not, the default - `mpf' precision (*note Initializing Floats::) is used. - - If the string is not a valid float, an `std::invalid_argument' - exception is thrown. The same applies to `operator='. - - -- Function: mpf_class& mpf_class::operator= (type OP) - Convert and store the given OP value to an `mpf_class' object. The - same types are accepted as for the constructors above. - - Note that `operator=' only stores a new value, it doesn't copy or - change the precision of the destination, instead the value is - truncated if necessary. This is the same as `mpf_set' etc. Note - in particular this means for `mpf_class' a copy constructor is not - the same as a default constructor plus assignment. - - mpf_class x (y); // x created with precision of y - - mpf_class x; // x created with default precision - x = y; // value truncated to that precision - - Applications using templated code may need to be careful about the - assumptions the code makes in this area, when working with - `mpf_class' values of various different or non-default precisions. - For instance implementations of the standard `complex' template - have been seen in both styles above, though of course `complex' is - normally only actually specified for use with the builtin float - types. - - -- Function: mpf_class abs (mpf_class OP) - -- Function: mpf_class ceil (mpf_class OP) - -- Function: int cmp (mpf_class OP1, type OP2) - -- Function: int cmp (type OP1, mpf_class OP2) - -- Function: bool mpf_class::fits_sint_p (void) - -- Function: bool mpf_class::fits_slong_p (void) - -- Function: bool mpf_class::fits_sshort_p (void) - -- Function: bool mpf_class::fits_uint_p (void) - -- Function: bool mpf_class::fits_ulong_p (void) - -- Function: bool mpf_class::fits_ushort_p (void) - -- Function: mpf_class floor (mpf_class OP) - -- Function: mpf_class hypot (mpf_class OP1, mpf_class OP2) - -- Function: double mpf_class::get_d (void) - -- Function: long mpf_class::get_si (void) - -- Function: string mpf_class::get_str (mp_exp_t& EXP, int BASE = 10, - size_t DIGITS = 0) - -- Function: unsigned long mpf_class::get_ui (void) - -- Function: int mpf_class::set_str (const char *STR, int BASE) - -- Function: int mpf_class::set_str (const string& STR, int BASE) - -- Function: int sgn (mpf_class OP) - -- Function: mpf_class sqrt (mpf_class OP) - -- Function: mpf_class trunc (mpf_class OP) - These functions provide a C++ class interface to the corresponding - GMP C routines. - - `cmp' can be used with any of the classes or the standard C++ - types, except `long long' and `long double'. - - The accuracy provided by `hypot' is not currently guaranteed. - - -- Function: mp_bitcnt_t mpf_class::get_prec () - -- Function: void mpf_class::set_prec (mp_bitcnt_t PREC) - -- Function: void mpf_class::set_prec_raw (mp_bitcnt_t PREC) - Get or set the current precision of an `mpf_class'. - - The restrictions described for `mpf_set_prec_raw' (*note - Initializing Floats::) apply to `mpf_class::set_prec_raw'. Note - in particular that the `mpf_class' must be restored to it's - allocated precision before being destroyed. This must be done by - application code, there's no automatic mechanism for it. - - -File: gmp.info, Node: C++ Interface Random Numbers, Next: C++ Interface Limitations, Prev: C++ Interface Floats, Up: C++ Class Interface - -12.5 C++ Interface Random Numbers -================================= - - -- Class: gmp_randclass - The C++ class interface to the GMP random number functions uses - `gmp_randclass' to hold an algorithm selection and current state, - as per `gmp_randstate_t'. - - -- Function: gmp_randclass::gmp_randclass (void (*RANDINIT) - (gmp_randstate_t, ...), ...) - Construct a `gmp_randclass', using a call to the given RANDINIT - function (*note Random State Initialization::). The arguments - expected are the same as RANDINIT, but with `mpz_class' instead of - `mpz_t'. For example, - - gmp_randclass r1 (gmp_randinit_default); - gmp_randclass r2 (gmp_randinit_lc_2exp_size, 32); - gmp_randclass r3 (gmp_randinit_lc_2exp, a, c, m2exp); - gmp_randclass r4 (gmp_randinit_mt); - - `gmp_randinit_lc_2exp_size' will fail if the size requested is too - big, an `std::length_error' exception is thrown in that case. - - -- Function: gmp_randclass::gmp_randclass (gmp_randalg_t ALG, ...) - Construct a `gmp_randclass' using the same parameters as - `gmp_randinit' (*note Random State Initialization::). This - function is obsolete and the above RANDINIT style should be - preferred. - - -- Function: void gmp_randclass::seed (unsigned long int S) - -- Function: void gmp_randclass::seed (mpz_class S) - Seed a random number generator. See *note Random Number - Functions::, for how to choose a good seed. - - -- Function: mpz_class gmp_randclass::get_z_bits (unsigned long BITS) - -- Function: mpz_class gmp_randclass::get_z_bits (mpz_class BITS) - Generate a random integer with a specified number of bits. - - -- Function: mpz_class gmp_randclass::get_z_range (mpz_class N) - Generate a random integer in the range 0 to N-1 inclusive. - - -- Function: mpf_class gmp_randclass::get_f () - -- Function: mpf_class gmp_randclass::get_f (unsigned long PREC) - Generate a random float F in the range 0 <= F < 1. F will be to - PREC bits precision, or if PREC is not given then to the precision - of the destination. For example, - - gmp_randclass r; - ... - mpf_class f (0, 512); // 512 bits precision - f = r.get_f(); // random number, 512 bits - - -File: gmp.info, Node: C++ Interface Limitations, Prev: C++ Interface Random Numbers, Up: C++ Class Interface - -12.6 C++ Interface Limitations -============================== - -`mpq_class' and Templated Reading - A generic piece of template code probably won't know that - `mpq_class' requires a `canonicalize' call if inputs read with - `operator>>' might be non-canonical. This can lead to incorrect - results. - - `operator>>' behaves as it does for reasons of efficiency. A - canonicalize can be quite time consuming on large operands, and is - best avoided if it's not necessary. - - But this potential difficulty reduces the usefulness of - `mpq_class'. Perhaps a mechanism to tell `operator>>' what to do - will be adopted in the future, maybe a preprocessor define, a - global flag, or an `ios' flag pressed into service. Or maybe, at - the risk of inconsistency, the `mpq_class' `operator>>' could - canonicalize and leave `mpq_t' `operator>>' not doing so, for use - on those occasions when that's acceptable. Send feedback or - alternate ideas to . - -Subclassing - Subclassing the GMP C++ classes works, but is not currently - recommended. - - Expressions involving subclasses resolve correctly (or seem to), - but in normal C++ fashion the subclass doesn't inherit - constructors and assignments. There's many of those in the GMP - classes, and a good way to reestablish them in a subclass is not - yet provided. - -Templated Expressions - A subtle difficulty exists when using expressions together with - application-defined template functions. Consider the following, - with `T' intended to be some numeric type, - - template - T fun (const T &, const T &); - - When used with, say, plain `mpz_class' variables, it works fine: - `T' is resolved as `mpz_class'. - - mpz_class f(1), g(2); - fun (f, g); // Good - - But when one of the arguments is an expression, it doesn't work. - - mpz_class f(1), g(2), h(3); - fun (f, g+h); // Bad - - This is because `g+h' ends up being a certain expression template - type internal to `gmpxx.h', which the C++ template resolution - rules are unable to automatically convert to `mpz_class'. The - workaround is simply to add an explicit cast. - - mpz_class f(1), g(2), h(3); - fun (f, mpz_class(g+h)); // Good - - Similarly, within `fun' it may be necessary to cast an expression - to type `T' when calling a templated `fun2'. - - template - void fun (T f, T g) - { - fun2 (f, f+g); // Bad - } - - template - void fun (T f, T g) - { - fun2 (f, T(f+g)); // Good - } - - -File: gmp.info, Node: BSD Compatible Functions, Next: Custom Allocation, Prev: C++ Class Interface, Up: Top - -13 Berkeley MP Compatible Functions -*********************************** - -These functions are intended to be fully compatible with the Berkeley MP -library which is available on many BSD derived U*ix systems. The -`--enable-mpbsd' option must be used when building GNU MP to make these -available (*note Installing GMP::). - - The original Berkeley MP library has a usage restriction: you cannot -use the same variable as both source and destination in a single -function call. The compatible functions in GNU MP do not share this -restriction--inputs and outputs may overlap. - - It is not recommended that new programs are written using these -functions. Apart from the incomplete set of functions, the interface -for initializing `MINT' objects is more error prone, and the `pow' -function collides with `pow' in `libm.a'. - - Include the header `mp.h' to get the definition of the necessary -types and functions. If you are on a BSD derived system, make sure to -include GNU `mp.h' if you are going to link the GNU `libmp.a' to your -program. This means that you probably need to give the `-I

' -option to the compiler, where `' is the directory where you have -GNU `mp.h'. - - -- Function: MINT * itom (signed short int INITIAL_VALUE) - Allocate an integer consisting of a `MINT' object and dynamic limb - space. Initialize the integer to INITIAL_VALUE. Return a pointer - to the `MINT' object. - - -- Function: MINT * xtom (char *INITIAL_VALUE) - Allocate an integer consisting of a `MINT' object and dynamic limb - space. Initialize the integer from INITIAL_VALUE, a hexadecimal, - null-terminated C string. Return a pointer to the `MINT' object. - - -- Function: void move (MINT *SRC, MINT *DEST) - Set DEST to SRC by copying. Both variables must be previously - initialized. - - -- Function: void madd (MINT *SRC_1, MINT *SRC_2, MINT *DESTINATION) - Add SRC_1 and SRC_2 and put the sum in DESTINATION. - - -- Function: void msub (MINT *SRC_1, MINT *SRC_2, MINT *DESTINATION) - Subtract SRC_2 from SRC_1 and put the difference in DESTINATION. - - -- Function: void mult (MINT *SRC_1, MINT *SRC_2, MINT *DESTINATION) - Multiply SRC_1 and SRC_2 and put the product in DESTINATION. - - -- Function: void mdiv (MINT *DIVIDEND, MINT *DIVISOR, MINT *QUOTIENT, - MINT *REMAINDER) - -- Function: void sdiv (MINT *DIVIDEND, signed short int DIVISOR, MINT - *QUOTIENT, signed short int *REMAINDER) - Set QUOTIENT to DIVIDEND/DIVISOR, and REMAINDER to DIVIDEND mod - DIVISOR. The quotient is rounded towards zero; the remainder has - the same sign as the dividend unless it is zero. - - Some implementations of these functions work differently--or not - at all--for negative arguments. - - -- Function: void msqrt (MINT *OP, MINT *ROOT, MINT *REMAINDER) - Set ROOT to the truncated integer part of the square root of OP, - like `mpz_sqrt'. Set REMAINDER to OP-ROOT*ROOT, i.e. zero if OP - is a perfect square. - - If ROOT and REMAINDER are the same variable, the results are - undefined. - - -- Function: void pow (MINT *BASE, MINT *EXP, MINT *MOD, MINT *DEST) - Set DEST to (BASE raised to EXP) modulo MOD. - - Note that the name `pow' clashes with `pow' from the standard C - math library (*note Exponentiation and Logarithms: (libc)Exponents - and Logarithms.). An application will only be able to use one or - the other. - - -- Function: void rpow (MINT *BASE, signed short int EXP, MINT *DEST) - Set DEST to BASE raised to EXP. - - -- Function: void gcd (MINT *OP1, MINT *OP2, MINT *RES) - Set RES to the greatest common divisor of OP1 and OP2. - - -- Function: int mcmp (MINT *OP1, MINT *OP2) - Compare OP1 and OP2. Return a positive value if OP1 > OP2, zero - if OP1 = OP2, and a negative value if OP1 < OP2. - - -- Function: void min (MINT *DEST) - Input a decimal string from `stdin', and put the read integer in - DEST. SPC and TAB are allowed in the number string, and are - ignored. - - -- Function: void mout (MINT *SRC) - Output SRC to `stdout', as a decimal string. Also output a - newline. - - -- Function: char * mtox (MINT *OP) - Convert OP to a hexadecimal string, and return a pointer to the - string. The returned string is allocated using the default memory - allocation function, `malloc' by default. It will be - `strlen(str)+1' bytes, that being exactly enough for the string - and null-terminator. - - -- Function: void mfree (MINT *OP) - De-allocate, the space used by OP. *This function should only be - passed a value returned by `itom' or `xtom'.* - - -File: gmp.info, Node: Custom Allocation, Next: Language Bindings, Prev: BSD Compatible Functions, Up: Top - -14 Custom Allocation -******************** - -By default GMP uses `malloc', `realloc' and `free' for memory -allocation, and if they fail GMP prints a message to the standard error -output and terminates the program. - - Alternate functions can be specified, to allocate memory in a -different way or to have a different error action on running out of -memory. - - This feature is available in the Berkeley compatibility library -(*note BSD Compatible Functions::) as well as the main GMP library. - - -- Function: void mp_set_memory_functions ( - void *(*ALLOC_FUNC_PTR) (size_t), - void *(*REALLOC_FUNC_PTR) (void *, size_t, size_t), - void (*FREE_FUNC_PTR) (void *, size_t)) - Replace the current allocation functions from the arguments. If - an argument is `NULL', the corresponding default function is used. - - These functions will be used for all memory allocation done by - GMP, apart from temporary space from `alloca' if that function is - available and GMP is configured to use it (*note Build Options::). - - *Be sure to call `mp_set_memory_functions' only when there are no - active GMP objects allocated using the previous memory functions! - Usually that means calling it before any other GMP function.* - - The functions supplied should fit the following declarations: - - -- Function: void * allocate_function (size_t ALLOC_SIZE) - Return a pointer to newly allocated space with at least ALLOC_SIZE - bytes. - - -- Function: void * reallocate_function (void *PTR, size_t OLD_SIZE, - size_t NEW_SIZE) - Resize a previously allocated block PTR of OLD_SIZE bytes to be - NEW_SIZE bytes. - - The block may be moved if necessary or if desired, and in that - case the smaller of OLD_SIZE and NEW_SIZE bytes must be copied to - the new location. The return value is a pointer to the resized - block, that being the new location if moved or just PTR if not. - - PTR is never `NULL', it's always a previously allocated block. - NEW_SIZE may be bigger or smaller than OLD_SIZE. - - -- Function: void free_function (void *PTR, size_t SIZE) - De-allocate the space pointed to by PTR. - - PTR is never `NULL', it's always a previously allocated block of - SIZE bytes. - - A "byte" here means the unit used by the `sizeof' operator. - - The OLD_SIZE parameters to REALLOCATE_FUNCTION and FREE_FUNCTION are -passed for convenience, but of course can be ignored if not needed. -The default functions using `malloc' and friends for instance don't use -them. - - No error return is allowed from any of these functions, if they -return then they must have performed the specified operation. In -particular note that ALLOCATE_FUNCTION or REALLOCATE_FUNCTION mustn't -return `NULL'. - - Getting a different fatal error action is a good use for custom -allocation functions, for example giving a graphical dialog rather than -the default print to `stderr'. How much is possible when genuinely out -of memory is another question though. - - There's currently no defined way for the allocation functions to -recover from an error such as out of memory, they must terminate -program execution. A `longjmp' or throwing a C++ exception will have -undefined results. This may change in the future. - - GMP may use allocated blocks to hold pointers to other allocated -blocks. This will limit the assumptions a conservative garbage -collection scheme can make. - - Since the default GMP allocation uses `malloc' and friends, those -functions will be linked in even if the first thing a program does is an -`mp_set_memory_functions'. It's necessary to change the GMP sources if -this is a problem. - - - -- Function: void mp_get_memory_functions ( - void *(**ALLOC_FUNC_PTR) (size_t), - void *(**REALLOC_FUNC_PTR) (void *, size_t, size_t), - void (**FREE_FUNC_PTR) (void *, size_t)) - Get the current allocation functions, storing function pointers to - the locations given by the arguments. If an argument is `NULL', - that function pointer is not stored. - - For example, to get just the current free function, - - void (*freefunc) (void *, size_t); - - mp_get_memory_functions (NULL, NULL, &freefunc); - - -File: gmp.info, Node: Language Bindings, Next: Algorithms, Prev: Custom Allocation, Up: Top - -15 Language Bindings -******************** - -The following packages and projects offer access to GMP from languages -other than C, though perhaps with varying levels of functionality and -efficiency. - - -C++ - * GMP C++ class interface, *note C++ Class Interface:: - Straightforward interface, expression templates to eliminate - temporaries. - - * ALP `http://www-sop.inria.fr/saga/logiciels/ALP/' - Linear algebra and polynomials using templates. - - * Arithmos `http://www.win.ua.ac.be/~cant/arithmos/' - Rationals with infinities and square roots. - - * CLN `http://www.ginac.de/CLN/' - High level classes for arithmetic. - - * LiDIA `http://www.cdc.informatik.tu-darmstadt.de/TI/LiDIA/' - A C++ library for computational number theory. - - * Linbox `http://www.linalg.org/' - Sparse vectors and matrices. - - * NTL `http://www.shoup.net/ntl/' - A C++ number theory library. - -Fortran - * Omni F77 `http://phase.hpcc.jp/Omni/home.html' - Arbitrary precision floats. - -Haskell - * Glasgow Haskell Compiler `http://www.haskell.org/ghc/' - -Java - * Kaffe `http://www.kaffe.org/' - - * Kissme `http://kissme.sourceforge.net/' - -Lisp - * GNU Common Lisp `http://www.gnu.org/software/gcl/gcl.html' - - * Librep `http://librep.sourceforge.net/' - - * XEmacs (21.5.18 beta and up) `http://www.xemacs.org' - Optional big integers, rationals and floats using GMP. - -M4 - * GNU m4 betas `http://www.seindal.dk/rene/gnu/' - Optionally provides an arbitrary precision `mpeval'. - -ML - * MLton compiler `http://mlton.org/' - -Objective Caml - * MLGMP `http://www.di.ens.fr/~monniaux/programmes.html.en' - - * Numerix `http://pauillac.inria.fr/~quercia/' - Optionally using GMP. - -Oz - * Mozart `http://www.mozart-oz.org/' - -Pascal - * GNU Pascal Compiler `http://www.gnu-pascal.de/' - GMP unit. - - * Numerix `http://pauillac.inria.fr/~quercia/' - For Free Pascal, optionally using GMP. - -Perl - * GMP module, see `demos/perl' in the GMP sources (*note - Demonstration Programs::). - - * Math::GMP `http://www.cpan.org/' - Compatible with Math::BigInt, but not as many functions as - the GMP module above. - - * Math::BigInt::GMP `http://www.cpan.org/' - Plug Math::GMP into normal Math::BigInt operations. - -Pike - * mpz module in the standard distribution, - `http://pike.ida.liu.se/' - -Prolog - * SWI Prolog `http://www.swi-prolog.org/' - Arbitrary precision floats. - -Python - * mpz module in the standard distribution, - `http://www.python.org/' - - * GMPY `http://gmpy.sourceforge.net/' - -Scheme - * GNU Guile (upcoming 1.8) - `http://www.gnu.org/software/guile/guile.html' - - * RScheme `http://www.rscheme.org/' - - * STklos `http://www.stklos.org/' - -Smalltalk - * GNU Smalltalk - `http://www.smalltalk.org/versions/GNUSmalltalk.html' - -Other - * Axiom `http://savannah.nongnu.org/projects/axiom' - Computer algebra using GCL. - - * DrGenius `http://drgenius.seul.org/' - Geometry system and mathematical programming language. - - * GiNaC `http://www.ginac.de/' - C++ computer algebra using CLN. - - * GOO `http://www.googoogaga.org/' - Dynamic object oriented language. - - * Maxima `http://www.ma.utexas.edu/users/wfs/maxima.html' - Macsyma computer algebra using GCL. - - * Q `http://q-lang.sourceforge.net/' - Equational programming system. - - * Regina `http://regina.sourceforge.net/' - Topological calculator. - - * Yacas `http://www.xs4all.nl/~apinkus/yacas.html' - Yet another computer algebra system. - - - -File: gmp.info, Node: Algorithms, Next: Internals, Prev: Language Bindings, Up: Top - -16 Algorithms -************* - -This chapter is an introduction to some of the algorithms used for -various GMP operations. The code is likely to be hard to understand -without knowing something about the algorithms. - - Some GMP internals are mentioned, but applications that expect to be -compatible with future GMP releases should take care to use only the -documented functions. - -* Menu: - -* Multiplication Algorithms:: -* Division Algorithms:: -* Greatest Common Divisor Algorithms:: -* Powering Algorithms:: -* Root Extraction Algorithms:: -* Radix Conversion Algorithms:: -* Other Algorithms:: -* Assembly Coding:: - - -File: gmp.info, Node: Multiplication Algorithms, Next: Division Algorithms, Prev: Algorithms, Up: Algorithms - -16.1 Multiplication -=================== - -NxN limb multiplications and squares are done using one of five -algorithms, as the size N increases. - - Algorithm Threshold - Basecase (none) - Karatsuba `MUL_TOOM22_THRESHOLD' - Toom-3 `MUL_TOOM33_THRESHOLD' - Toom-4 `MUL_TOOM44_THRESHOLD' - FFT `MUL_FFT_THRESHOLD' - - Similarly for squaring, with the `SQR' thresholds. - - NxM multiplications of operands with different sizes above -`MUL_TOOM22_THRESHOLD' are currently done by special Toom-inspired -algorithms or directly with FFT, depending on operand size (*note -Unbalanced Multiplication::). - -* Menu: - -* Basecase Multiplication:: -* Karatsuba Multiplication:: -* Toom 3-Way Multiplication:: -* Toom 4-Way Multiplication:: -* FFT Multiplication:: -* Other Multiplication:: -* Unbalanced Multiplication:: - - -File: gmp.info, Node: Basecase Multiplication, Next: Karatsuba Multiplication, Prev: Multiplication Algorithms, Up: Multiplication Algorithms - -16.1.1 Basecase Multiplication ------------------------------- - -Basecase NxM multiplication is a straightforward rectangular set of -cross-products, the same as long multiplication done by hand and for -that reason sometimes known as the schoolbook or grammar school method. -This is an O(N*M) algorithm. See Knuth section 4.3.1 algorithm M -(*note References::), and the `mpn/generic/mul_basecase.c' code. - - Assembly implementations of `mpn_mul_basecase' are essentially the -same as the generic C code, but have all the usual assembly tricks and -obscurities introduced for speed. - - A square can be done in roughly half the time of a multiply, by -using the fact that the cross products above and below the diagonal are -the same. A triangle of products below the diagonal is formed, doubled -(left shift by one bit), and then the products on the diagonal added. -This can be seen in `mpn/generic/sqr_basecase.c'. Again the assembly -implementations take essentially the same approach. - - u0 u1 u2 u3 u4 - +---+---+---+---+---+ - u0 | d | | | | | - +---+---+---+---+---+ - u1 | | d | | | | - +---+---+---+---+---+ - u2 | | | d | | | - +---+---+---+---+---+ - u3 | | | | d | | - +---+---+---+---+---+ - u4 | | | | | d | - +---+---+---+---+---+ - - In practice squaring isn't a full 2x faster than multiplying, it's -usually around 1.5x. Less than 1.5x probably indicates -`mpn_sqr_basecase' wants improving on that CPU. - - On some CPUs `mpn_mul_basecase' can be faster than the generic C -`mpn_sqr_basecase' on some small sizes. `SQR_BASECASE_THRESHOLD' is -the size at which to use `mpn_sqr_basecase', this will be zero if that -routine should be used always. - - -File: gmp.info, Node: Karatsuba Multiplication, Next: Toom 3-Way Multiplication, Prev: Basecase Multiplication, Up: Multiplication Algorithms - -16.1.2 Karatsuba Multiplication -------------------------------- - -The Karatsuba multiplication algorithm is described in Knuth section -4.3.3 part A, and various other textbooks. A brief description is -given here. - - The inputs x and y are treated as each split into two parts of equal -length (or the most significant part one limb shorter if N is odd). - - high low - +----------+----------+ - | x1 | x0 | - +----------+----------+ - - +----------+----------+ - | y1 | y0 | - +----------+----------+ - - Let b be the power of 2 where the split occurs, ie. if x0 is k limbs -(y0 the same) then b=2^(k*mp_bits_per_limb). With that x=x1*b+x0 and -y=y1*b+y0, and the following holds, - - x*y = (b^2+b)*x1*y1 - b*(x1-x0)*(y1-y0) + (b+1)*x0*y0 - - This formula means doing only three multiplies of (N/2)x(N/2) limbs, -whereas a basecase multiply of NxN limbs is equivalent to four -multiplies of (N/2)x(N/2). The factors (b^2+b) etc represent the -positions where the three products must be added. - - high low - +--------+--------+ +--------+--------+ - | x1*y1 | | x0*y0 | - +--------+--------+ +--------+--------+ - +--------+--------+ - add | x1*y1 | - +--------+--------+ - +--------+--------+ - add | x0*y0 | - +--------+--------+ - +--------+--------+ - sub | (x1-x0)*(y1-y0) | - +--------+--------+ - - The term (x1-x0)*(y1-y0) is best calculated as an absolute value, -and the sign used to choose to add or subtract. Notice the sum -high(x0*y0)+low(x1*y1) occurs twice, so it's possible to do 5*k limb -additions, rather than 6*k, but in GMP extra function call overheads -outweigh the saving. - - Squaring is similar to multiplying, but with x=y the formula reduces -to an equivalent with three squares, - - x^2 = (b^2+b)*x1^2 - b*(x1-x0)^2 + (b+1)*x0^2 - - The final result is accumulated from those three squares the same -way as for the three multiplies above. The middle term (x1-x0)^2 is now -always positive. - - A similar formula for both multiplying and squaring can be -constructed with a middle term (x1+x0)*(y1+y0). But those sums can -exceed k limbs, leading to more carry handling and additions than the -form above. - - Karatsuba multiplication is asymptotically an O(N^1.585) algorithm, -the exponent being log(3)/log(2), representing 3 multiplies each 1/2 -the size of the inputs. This is a big improvement over the basecase -multiply at O(N^2) and the advantage soon overcomes the extra additions -Karatsuba performs. `MUL_TOOM22_THRESHOLD' can be as little as 10 -limbs. The `SQR' threshold is usually about twice the `MUL'. - - The basecase algorithm will take a time of the form M(N) = a*N^2 + -b*N + c and the Karatsuba algorithm K(N) = 3*M(N/2) + d*N + e, which -expands to K(N) = 3/4*a*N^2 + 3/2*b*N + 3*c + d*N + e. The factor 3/4 -for a means per-crossproduct speedups in the basecase code will -increase the threshold since they benefit M(N) more than K(N). And -conversely the 3/2 for b means linear style speedups of b will increase -the threshold since they benefit K(N) more than M(N). The latter can -be seen for instance when adding an optimized `mpn_sqr_diagonal' to -`mpn_sqr_basecase'. Of course all speedups reduce total time, and in -that sense the algorithm thresholds are merely of academic interest. - - -File: gmp.info, Node: Toom 3-Way Multiplication, Next: Toom 4-Way Multiplication, Prev: Karatsuba Multiplication, Up: Multiplication Algorithms - -16.1.3 Toom 3-Way Multiplication --------------------------------- - -The Karatsuba formula is the simplest case of a general approach to -splitting inputs that leads to both Toom and FFT algorithms. A -description of Toom can be found in Knuth section 4.3.3, with an -example 3-way calculation after Theorem A. The 3-way form used in GMP -is described here. - - The operands are each considered split into 3 pieces of equal length -(or the most significant part 1 or 2 limbs shorter than the other two). - - high low - +----------+----------+----------+ - | x2 | x1 | x0 | - +----------+----------+----------+ - - +----------+----------+----------+ - | y2 | y1 | y0 | - +----------+----------+----------+ - -These parts are treated as the coefficients of two polynomials - - X(t) = x2*t^2 + x1*t + x0 - Y(t) = y2*t^2 + y1*t + y0 - - Let b equal the power of 2 which is the size of the x0, x1, y0 and -y1 pieces, ie. if they're k limbs each then b=2^(k*mp_bits_per_limb). -With this x=X(b) and y=Y(b). - - Let a polynomial W(t)=X(t)*Y(t) and suppose its coefficients are - - W(t) = w4*t^4 + w3*t^3 + w2*t^2 + w1*t + w0 - - The w[i] are going to be determined, and when they are they'll give -the final result using w=W(b), since x*y=X(b)*Y(b)=W(b). The -coefficients will be roughly b^2 each, and the final W(b) will be an -addition like, - - high low - +-------+-------+ - | w4 | - +-------+-------+ - +--------+-------+ - | w3 | - +--------+-------+ - +--------+-------+ - | w2 | - +--------+-------+ - +--------+-------+ - | w1 | - +--------+-------+ - +-------+-------+ - | w0 | - +-------+-------+ - - The w[i] coefficients could be formed by a simple set of cross -products, like w4=x2*y2, w3=x2*y1+x1*y2, w2=x2*y0+x1*y1+x0*y2 etc, but -this would need all nine x[i]*y[j] for i,j=0,1,2, and would be -equivalent merely to a basecase multiply. Instead the following -approach is used. - - X(t) and Y(t) are evaluated and multiplied at 5 points, giving -values of W(t) at those points. In GMP the following points are used, - - Point Value - t=0 x0 * y0, which gives w0 immediately - t=1 (x2+x1+x0) * (y2+y1+y0) - t=-1 (x2-x1+x0) * (y2-y1+y0) - t=2 (4*x2+2*x1+x0) * (4*y2+2*y1+y0) - t=inf x2 * y2, which gives w4 immediately - - At t=-1 the values can be negative and that's handled using the -absolute values and tracking the sign separately. At t=inf the value -is actually X(t)*Y(t)/t^4 in the limit as t approaches infinity, but -it's much easier to think of as simply x2*y2 giving w4 immediately -(much like x0*y0 at t=0 gives w0 immediately). - - Each of the points substituted into W(t)=w4*t^4+...+w0 gives a -linear combination of the w[i] coefficients, and the value of those -combinations has just been calculated. - - W(0) = w0 - W(1) = w4 + w3 + w2 + w1 + w0 - W(-1) = w4 - w3 + w2 - w1 + w0 - W(2) = 16*w4 + 8*w3 + 4*w2 + 2*w1 + w0 - W(inf) = w4 - - This is a set of five equations in five unknowns, and some -elementary linear algebra quickly isolates each w[i]. This involves -adding or subtracting one W(t) value from another, and a couple of -divisions by powers of 2 and one division by 3, the latter using the -special `mpn_divexact_by3' (*note Exact Division::). - - The conversion of W(t) values to the coefficients is interpolation. -A polynomial of degree 4 like W(t) is uniquely determined by values -known at 5 different points. The points are arbitrary and can be -chosen to make the linear equations come out with a convenient set of -steps for quickly isolating the w[i]. - - Squaring follows the same procedure as multiplication, but there's -only one X(t) and it's evaluated at the 5 points, and those values -squared to give values of W(t). The interpolation is then identical, -and in fact the same `toom3_interpolate' subroutine is used for both -squaring and multiplying. - - Toom-3 is asymptotically O(N^1.465), the exponent being -log(5)/log(3), representing 5 recursive multiplies of 1/3 the original -size each. This is an improvement over Karatsuba at O(N^1.585), though -Toom does more work in the evaluation and interpolation and so it only -realizes its advantage above a certain size. - - Near the crossover between Toom-3 and Karatsuba there's generally a -range of sizes where the difference between the two is small. -`MUL_TOOM33_THRESHOLD' is a somewhat arbitrary point in that range and -successive runs of the tune program can give different values due to -small variations in measuring. A graph of time versus size for the two -shows the effect, see `tune/README'. - - At the fairly small sizes where the Toom-3 thresholds occur it's -worth remembering that the asymptotic behaviour for Karatsuba and -Toom-3 can't be expected to make accurate predictions, due of course to -the big influence of all sorts of overheads, and the fact that only a -few recursions of each are being performed. Even at large sizes -there's a good chance machine dependent effects like cache architecture -will mean actual performance deviates from what might be predicted. - - The formula given for the Karatsuba algorithm (*note Karatsuba -Multiplication::) has an equivalent for Toom-3 involving only five -multiplies, but this would be complicated and unenlightening. - - An alternate view of Toom-3 can be found in Zuras (*note -References::), using a vector to represent the x and y splits and a -matrix multiplication for the evaluation and interpolation stages. The -matrix inverses are not meant to be actually used, and they have -elements with values much greater than in fact arise in the -interpolation steps. The diagram shown for the 3-way is attractive, -but again doesn't have to be implemented that way and for example with -a bit of rearrangement just one division by 6 can be done. - - -File: gmp.info, Node: Toom 4-Way Multiplication, Next: FFT Multiplication, Prev: Toom 3-Way Multiplication, Up: Multiplication Algorithms - -16.1.4 Toom 4-Way Multiplication --------------------------------- - -Karatsuba and Toom-3 split the operands into 2 and 3 coefficients, -respectively. Toom-4 analogously splits the operands into 4 -coefficients. Using the notation from the section on Toom-3 -multiplication, we form two polynomials: - - X(t) = x3*t^3 + x2*t^2 + x1*t + x0 - Y(t) = y3*t^3 + y2*t^2 + y1*t + y0 - - X(t) and Y(t) are evaluated and multiplied at 7 points, giving -values of W(t) at those points. In GMP the following points are used, - - Point Value - t=0 x0 * y0, which gives w0 immediately - t=1/2 (x3+2*x2+4*x1+8*x0) * (y3+2*y2+4*y1+8*y0) - t=-1/2 (-x3+2*x2-4*x1+8*x0) * (-y3+2*y2-4*y1+8*y0) - t=1 (x3+x2+x1+x0) * (y3+y2+y1+y0) - t=-1 (-x3+x2-x1+x0) * (-y3+y2-y1+y0) - t=2 (8*x3+4*x2+2*x1+x0) * (8*y3+4*y2+2*y1+y0) - t=inf x3 * y3, which gives w6 immediately - - The number of additions and subtractions for Toom-4 is much larger -than for Toom-3. But several subexpressions occur multiple times, for -example x2+x0, occurs for both t=1 and t=-1. - - Toom-4 is asymptotically O(N^1.404), the exponent being -log(7)/log(4), representing 7 recursive multiplies of 1/4 the original -size each. - - -File: gmp.info, Node: FFT Multiplication, Next: Other Multiplication, Prev: Toom 4-Way Multiplication, Up: Multiplication Algorithms - -16.1.5 FFT Multiplication -------------------------- - -At large to very large sizes a Fermat style FFT multiplication is used, -following Scho"nhage and Strassen (*note References::). Descriptions -of FFTs in various forms can be found in many textbooks, for instance -Knuth section 4.3.3 part C or Lipson chapter IX. A brief description -of the form used in GMP is given here. - - The multiplication done is x*y mod 2^N+1, for a given N. A full -product x*y is obtained by choosing N>=bits(x)+bits(y) and padding x -and y with high zero limbs. The modular product is the native form for -the algorithm, so padding to get a full product is unavoidable. - - The algorithm follows a split, evaluate, pointwise multiply, -interpolate and combine similar to that described above for Karatsuba -and Toom-3. A k parameter controls the split, with an FFT-k splitting -into 2^k pieces of M=N/2^k bits each. N must be a multiple of -(2^k)*mp_bits_per_limb so the split falls on limb boundaries, avoiding -bit shifts in the split and combine stages. - - The evaluations, pointwise multiplications, and interpolation, are -all done modulo 2^N'+1 where N' is 2M+k+3 rounded up to a multiple of -2^k and of `mp_bits_per_limb'. The results of interpolation will be -the following negacyclic convolution of the input pieces, and the -choice of N' ensures these sums aren't truncated. - - --- - \ b - w[n] = / (-1) * x[i] * y[j] - --- - i+j==b*2^k+n - b=0,1 - - The points used for the evaluation are g^i for i=0 to 2^k-1 where -g=2^(2N'/2^k). g is a 2^k'th root of unity mod 2^N'+1, which produces -necessary cancellations at the interpolation stage, and it's also a -power of 2 so the fast Fourier transforms used for the evaluation and -interpolation do only shifts, adds and negations. - - The pointwise multiplications are done modulo 2^N'+1 and either -recurse into a further FFT or use a plain multiplication (Toom-3, -Karatsuba or basecase), whichever is optimal at the size N'. The -interpolation is an inverse fast Fourier transform. The resulting set -of sums of x[i]*y[j] are added at appropriate offsets to give the final -result. - - Squaring is the same, but x is the only input so it's one transform -at the evaluate stage and the pointwise multiplies are squares. The -interpolation is the same. - - For a mod 2^N+1 product, an FFT-k is an O(N^(k/(k-1))) algorithm, -the exponent representing 2^k recursed modular multiplies each -1/2^(k-1) the size of the original. Each successive k is an asymptotic -improvement, but overheads mean each is only faster at bigger and -bigger sizes. In the code, `MUL_FFT_TABLE' and `SQR_FFT_TABLE' are the -thresholds where each k is used. Each new k effectively swaps some -multiplying for some shifts, adds and overheads. - - A mod 2^N+1 product can be formed with a normal NxN->2N bit multiply -plus a subtraction, so an FFT and Toom-3 etc can be compared directly. -A k=4 FFT at O(N^1.333) can be expected to be the first faster than -Toom-3 at O(N^1.465). In practice this is what's found, with -`MUL_FFT_MODF_THRESHOLD' and `SQR_FFT_MODF_THRESHOLD' being between 300 -and 1000 limbs, depending on the CPU. So far it's been found that only -very large FFTs recurse into pointwise multiplies above these sizes. - - When an FFT is to give a full product, the change of N to 2N doesn't -alter the theoretical complexity for a given k, but for the purposes of -considering where an FFT might be first used it can be assumed that the -FFT is recursing into a normal multiply and that on that basis it's -doing 2^k recursed multiplies each 1/2^(k-2) the size of the inputs, -making it O(N^(k/(k-2))). This would mean k=7 at O(N^1.4) would be the -first FFT faster than Toom-3. In practice `MUL_FFT_THRESHOLD' and -`SQR_FFT_THRESHOLD' have been found to be in the k=8 range, somewhere -between 3000 and 10000 limbs. - - The way N is split into 2^k pieces and then 2M+k+3 is rounded up to -a multiple of 2^k and `mp_bits_per_limb' means that when -2^k>=mp_bits_per_limb the effective N is a multiple of 2^(2k-1) bits. -The +k+3 means some values of N just under such a multiple will be -rounded to the next. The complexity calculations above assume that a -favourable size is used, meaning one which isn't padded through -rounding, and it's also assumed that the extra +k+3 bits are negligible -at typical FFT sizes. - - The practical effect of the 2^(2k-1) constraint is to introduce a -step-effect into measured speeds. For example k=8 will round N up to a -multiple of 32768 bits, so for a 32-bit limb there'll be 512 limb -groups of sizes for which `mpn_mul_n' runs at the same speed. Or for -k=9 groups of 2048 limbs, k=10 groups of 8192 limbs, etc. In practice -it's been found each k is used at quite small multiples of its size -constraint and so the step effect is quite noticeable in a time versus -size graph. - - The threshold determinations currently measure at the mid-points of -size steps, but this is sub-optimal since at the start of a new step it -can happen that it's better to go back to the previous k for a while. -Something more sophisticated for `MUL_FFT_TABLE' and `SQR_FFT_TABLE' -will be needed. - - -File: gmp.info, Node: Other Multiplication, Next: Unbalanced Multiplication, Prev: FFT Multiplication, Up: Multiplication Algorithms - -16.1.6 Other Multiplication ---------------------------- - -The Toom algorithms described above (*note Toom 3-Way Multiplication::, -*note Toom 4-Way Multiplication::) generalizes to split into an -arbitrary number of pieces, as per Knuth section 4.3.3 algorithm C. -This is not currently used. The notes here are merely for interest. - - In general a split into r+1 pieces is made, and evaluations and -pointwise multiplications done at 2*r+1 points. A 4-way split does 7 -pointwise multiplies, 5-way does 9, etc. Asymptotically an (r+1)-way -algorithm is O(N^(log(2*r+1)/log(r+1))). Only the pointwise -multiplications count towards big-O complexity, but the time spent in -the evaluate and interpolate stages grows with r and has a significant -practical impact, with the asymptotic advantage of each r realized only -at bigger and bigger sizes. The overheads grow as O(N*r), whereas in -an r=2^k FFT they grow only as O(N*log(r)). - - Knuth algorithm C evaluates at points 0,1,2,...,2*r, but exercise 4 -uses -r,...,0,...,r and the latter saves some small multiplies in the -evaluate stage (or rather trades them for additions), and has a further -saving of nearly half the interpolate steps. The idea is to separate -odd and even final coefficients and then perform algorithm C steps C7 -and C8 on them separately. The divisors at step C7 become j^2 and the -multipliers at C8 become 2*t*j-j^2. - - Splitting odd and even parts through positive and negative points -can be thought of as using -1 as a square root of unity. If a 4th root -of unity was available then a further split and speedup would be -possible, but no such root exists for plain integers. Going to complex -integers with i=sqrt(-1) doesn't help, essentially because in Cartesian -form it takes three real multiplies to do a complex multiply. The -existence of 2^k'th roots of unity in a suitable ring or field lets the -fast Fourier transform keep splitting and get to O(N*log(r)). - - Floating point FFTs use complex numbers approximating Nth roots of -unity. Some processors have special support for such FFTs. But these -are not used in GMP since it's very difficult to guarantee an exact -result (to some number of bits). An occasional difference of 1 in the -last bit might not matter to a typical signal processing algorithm, but -is of course of vital importance to GMP. - - -File: gmp.info, Node: Unbalanced Multiplication, Prev: Other Multiplication, Up: Multiplication Algorithms - -16.1.7 Unbalanced Multiplication --------------------------------- - -Multiplication of operands with different sizes, both below -`MUL_TOOM22_THRESHOLD' are done with plain schoolbook multiplication -(*note Basecase Multiplication::). - - For really large operands, we invoke FFT directly. - - For operands between these sizes, we use Toom inspired algorithms -suggested by Alberto Zanoni and Marco Bodrato. The idea is to split -the operands into polynomials of different degree. GMP currently -splits the smaller operand onto 2 coefficients, i.e., a polynomial of -degree 1, but the larger operand can be split into 2, 3, or 4 -coefficients, i.e., a polynomial of degree 1 to 3. - - -File: gmp.info, Node: Division Algorithms, Next: Greatest Common Divisor Algorithms, Prev: Multiplication Algorithms, Up: Algorithms - -16.2 Division Algorithms -======================== - -* Menu: - -* Single Limb Division:: -* Basecase Division:: -* Divide and Conquer Division:: -* Block-Wise Barrett Division:: -* Exact Division:: -* Exact Remainder:: -* Small Quotient Division:: - - -File: gmp.info, Node: Single Limb Division, Next: Basecase Division, Prev: Division Algorithms, Up: Division Algorithms - -16.2.1 Single Limb Division ---------------------------- - -Nx1 division is implemented using repeated 2x1 divisions from high to -low, either with a hardware divide instruction or a multiplication by -inverse, whichever is best on a given CPU. - - The multiply by inverse follows "Improved division by invariant -integers" by Mo"ller and Granlund (*note References::) and is -implemented as `udiv_qrnnd_preinv' in `gmp-impl.h'. The idea is to -have a fixed-point approximation to 1/d (see `invert_limb') and then -multiply by the high limb (plus one bit) of the dividend to get a -quotient q. With d normalized (high bit set), q is no more than 1 too -small. Subtracting q*d from the dividend gives a remainder, and -reveals whether q or q-1 is correct. - - The result is a division done with two multiplications and four or -five arithmetic operations. On CPUs with low latency multipliers this -can be much faster than a hardware divide, though the cost of -calculating the inverse at the start may mean it's only better on -inputs bigger than say 4 or 5 limbs. - - When a divisor must be normalized, either for the generic C -`__udiv_qrnnd_c' or the multiply by inverse, the division performed is -actually a*2^k by d*2^k where a is the dividend and k is the power -necessary to have the high bit of d*2^k set. The bit shifts for the -dividend are usually accomplished "on the fly" meaning by extracting -the appropriate bits at each step. Done this way the quotient limbs -come out aligned ready to store. When only the remainder is wanted, an -alternative is to take the dividend limbs unshifted and calculate r = a -mod d*2^k followed by an extra final step r*2^k mod d*2^k. This can -help on CPUs with poor bit shifts or few registers. - - The multiply by inverse can be done two limbs at a time. The -calculation is basically the same, but the inverse is two limbs and the -divisor treated as if padded with a low zero limb. This means more -work, since the inverse will need a 2x2 multiply, but the four 1x1s to -do that are independent and can therefore be done partly or wholly in -parallel. Likewise for a 2x1 calculating q*d. The net effect is to -process two limbs with roughly the same two multiplies worth of latency -that one limb at a time gives. This extends to 3 or 4 limbs at a time, -though the extra work to apply the inverse will almost certainly soon -reach the limits of multiplier throughput. - - A similar approach in reverse can be taken to process just half a -limb at a time if the divisor is only a half limb. In this case the -1x1 multiply for the inverse effectively becomes two (1/2)x1 for each -limb, which can be a saving on CPUs with a fast half limb multiply, or -in fact if the only multiply is a half limb, and especially if it's not -pipelined. - - -File: gmp.info, Node: Basecase Division, Next: Divide and Conquer Division, Prev: Single Limb Division, Up: Division Algorithms - -16.2.2 Basecase Division ------------------------- - -Basecase NxM division is like long division done by hand, but in base -2^mp_bits_per_limb. See Knuth section 4.3.1 algorithm D, and -`mpn/generic/sb_divrem_mn.c'. - - Briefly stated, while the dividend remains larger than the divisor, -a high quotient limb is formed and the Nx1 product q*d subtracted at -the top end of the dividend. With a normalized divisor (most -significant bit set), each quotient limb can be formed with a 2x1 -division and a 1x1 multiplication plus some subtractions. The 2x1 -division is by the high limb of the divisor and is done either with a -hardware divide or a multiply by inverse (the same as in *Note Single -Limb Division::) whichever is faster. Such a quotient is sometimes one -too big, requiring an addback of the divisor, but that happens rarely. - - With Q=N-M being the number of quotient limbs, this is an O(Q*M) -algorithm and will run at a speed similar to a basecase QxM -multiplication, differing in fact only in the extra multiply and divide -for each of the Q quotient limbs. - - -File: gmp.info, Node: Divide and Conquer Division, Next: Block-Wise Barrett Division, Prev: Basecase Division, Up: Division Algorithms - -16.2.3 Divide and Conquer Division ----------------------------------- - -For divisors larger than `DC_DIV_QR_THRESHOLD', division is done by -dividing. Or to be precise by a recursive divide and conquer algorithm -based on work by Moenck and Borodin, Jebelean, and Burnikel and Ziegler -(*note References::). - - The algorithm consists essentially of recognising that a 2NxN -division can be done with the basecase division algorithm (*note -Basecase Division::), but using N/2 limbs as a base, not just a single -limb. This way the multiplications that arise are (N/2)x(N/2) and can -take advantage of Karatsuba and higher multiplication algorithms (*note -Multiplication Algorithms::). The two "digits" of the quotient are -formed by recursive Nx(N/2) divisions. - - If the (N/2)x(N/2) multiplies are done with a basecase multiplication -then the work is about the same as a basecase division, but with more -function call overheads and with some subtractions separated from the -multiplies. These overheads mean that it's only when N/2 is above -`MUL_TOOM22_THRESHOLD' that divide and conquer is of use. - - `DC_DIV_QR_THRESHOLD' is based on the divisor size N, so it will be -somewhere above twice `MUL_TOOM22_THRESHOLD', but how much above -depends on the CPU. An optimized `mpn_mul_basecase' can lower -`DC_DIV_QR_THRESHOLD' a little by offering a ready-made advantage over -repeated `mpn_submul_1' calls. - - Divide and conquer is asymptotically O(M(N)*log(N)) where M(N) is -the time for an NxN multiplication done with FFTs. The actual time is -a sum over multiplications of the recursed sizes, as can be seen near -the end of section 2.2 of Burnikel and Ziegler. For example, within -the Toom-3 range, divide and conquer is 2.63*M(N). With higher -algorithms the M(N) term improves and the multiplier tends to log(N). -In practice, at moderate to large sizes, a 2NxN division is about 2 to -4 times slower than an NxN multiplication. - - -File: gmp.info, Node: Block-Wise Barrett Division, Next: Exact Division, Prev: Divide and Conquer Division, Up: Division Algorithms - -16.2.4 Block-Wise Barrett Division ----------------------------------- - -For the largest divisions, a block-wise Barrett division algorithm is -used. Here, the divisor is inverted to a precision determined by the -relative size of the dividend and divisor. Blocks of quotient limbs -are then generated by multiplying blocks from the dividend by the -inverse. - - Our block-wise algorithm computes a smaller inverse than in the -plain Barrett algorithm. For a 2n/n division, the inverse will be just -ceil(n/2) limbs. - - -File: gmp.info, Node: Exact Division, Next: Exact Remainder, Prev: Block-Wise Barrett Division, Up: Division Algorithms - -16.2.5 Exact Division ---------------------- - -A so-called exact division is when the dividend is known to be an exact -multiple of the divisor. Jebelean's exact division algorithm uses this -knowledge to make some significant optimizations (*note References::). - - The idea can be illustrated in decimal for example with 368154 -divided by 543. Because the low digit of the dividend is 4, the low -digit of the quotient must be 8. This is arrived at from 4*7 mod 10, -using the fact 7 is the modular inverse of 3 (the low digit of the -divisor), since 3*7 == 1 mod 10. So 8*543=4344 can be subtracted from -the dividend leaving 363810. Notice the low digit has become zero. - - The procedure is repeated at the second digit, with the next -quotient digit 7 (7 == 1*7 mod 10), subtracting 7*543=3801, leaving -325800. And finally at the third digit with quotient digit 6 (8*7 mod -10), subtracting 6*543=3258 leaving 0. So the quotient is 678. - - Notice however that the multiplies and subtractions don't need to -extend past the low three digits of the dividend, since that's enough -to determine the three quotient digits. For the last quotient digit no -subtraction is needed at all. On a 2NxN division like this one, only -about half the work of a normal basecase division is necessary. - - For an NxM exact division producing Q=N-M quotient limbs, the saving -over a normal basecase division is in two parts. Firstly, each of the -Q quotient limbs needs only one multiply, not a 2x1 divide and -multiply. Secondly, the crossproducts are reduced when Q>M to -Q*M-M*(M+1)/2, or when Q<=M to Q*(Q-1)/2. Notice the savings are -complementary. If Q is big then many divisions are saved, or if Q is -small then the crossproducts reduce to a small number. - - The modular inverse used is calculated efficiently by `binvert_limb' -in `gmp-impl.h'. This does four multiplies for a 32-bit limb, or six -for a 64-bit limb. `tune/modlinv.c' has some alternate implementations -that might suit processors better at bit twiddling than multiplying. - - The sub-quadratic exact division described by Jebelean in "Exact -Division with Karatsuba Complexity" is not currently implemented. It -uses a rearrangement similar to the divide and conquer for normal -division (*note Divide and Conquer Division::), but operating from low -to high. A further possibility not currently implemented is -"Bidirectional Exact Integer Division" by Krandick and Jebelean which -forms quotient limbs from both the high and low ends of the dividend, -and can halve once more the number of crossproducts needed in a 2NxN -division. - - A special case exact division by 3 exists in `mpn_divexact_by3', -supporting Toom-3 multiplication and `mpq' canonicalizations. It forms -quotient digits with a multiply by the modular inverse of 3 (which is -`0xAA..AAB') and uses two comparisons to determine a borrow for the next -limb. The multiplications don't need to be on the dependent chain, as -long as the effect of the borrows is applied, which can help chips with -pipelined multipliers. - - -File: gmp.info, Node: Exact Remainder, Next: Small Quotient Division, Prev: Exact Division, Up: Division Algorithms - -16.2.6 Exact Remainder ----------------------- - -If the exact division algorithm is done with a full subtraction at each -stage and the dividend isn't a multiple of the divisor, then low zero -limbs are produced but with a remainder in the high limbs. For -dividend a, divisor d, quotient q, and b = 2^mp_bits_per_limb, this -remainder r is of the form - - a = q*d + r*b^n - - n represents the number of zero limbs produced by the subtractions, -that being the number of limbs produced for q. r will be in the range -0<=rb*r+u2 condition appropriately relaxed. - - -File: gmp.info, Node: Greatest Common Divisor Algorithms, Next: Powering Algorithms, Prev: Division Algorithms, Up: Algorithms - -16.3 Greatest Common Divisor -============================ - -* Menu: - -* Binary GCD:: -* Lehmer's Algorithm:: -* Subquadratic GCD:: -* Extended GCD:: -* Jacobi Symbol:: - - -File: gmp.info, Node: Binary GCD, Next: Lehmer's Algorithm, Prev: Greatest Common Divisor Algorithms, Up: Greatest Common Divisor Algorithms - -16.3.1 Binary GCD ------------------ - -At small sizes GMP uses an O(N^2) binary style GCD. This is described -in many textbooks, for example Knuth section 4.5.2 algorithm B. It -simply consists of successively reducing odd operands a and b using - - a,b = abs(a-b),min(a,b) - strip factors of 2 from a - - The Euclidean GCD algorithm, as per Knuth algorithms E and A, -repeatedly computes the quotient q = floor(a/b) and replaces a,b by v, -u - q v. The binary algorithm has so far been found to be faster than -the Euclidean algorithm everywhere. One reason the binary method does -well is that the implied quotient at each step is usually small, so -often only one or two subtractions are needed to get the same effect as -a division. Quotients 1, 2 and 3 for example occur 67.7% of the time, -see Knuth section 4.5.3 Theorem E. - - When the implied quotient is large, meaning b is much smaller than -a, then a division is worthwhile. This is the basis for the initial a -mod b reductions in `mpn_gcd' and `mpn_gcd_1' (the latter for both Nx1 -and 1x1 cases). But after that initial reduction, big quotients occur -too rarely to make it worth checking for them. - - - The final 1x1 GCD in `mpn_gcd_1' is done in the generic C code as -described above. For two N-bit operands, the algorithm takes about -0.68 iterations per bit. For optimum performance some attention needs -to be paid to the way the factors of 2 are stripped from a. - - Firstly it may be noted that in twos complement the number of low -zero bits on a-b is the same as b-a, so counting or testing can begin on -a-b without waiting for abs(a-b) to be determined. - - A loop stripping low zero bits tends not to branch predict well, -since the condition is data dependent. But on average there's only a -few low zeros, so an option is to strip one or two bits arithmetically -then loop for more (as done for AMD K6). Or use a lookup table to get -a count for several bits then loop for more (as done for AMD K7). An -alternative approach is to keep just one of a or b odd and iterate - - a,b = abs(a-b), min(a,b) - a = a/2 if even - b = b/2 if even - - This requires about 1.25 iterations per bit, but stripping of a -single bit at each step avoids any branching. Repeating the bit strip -reduces to about 0.9 iterations per bit, which may be a worthwhile -tradeoff. - - Generally with the above approaches a speed of perhaps 6 cycles per -bit can be achieved, which is still not terribly fast with for instance -a 64-bit GCD taking nearly 400 cycles. It's this sort of time which -means it's not usually advantageous to combine a set of divisibility -tests into a GCD. - - Currently, the binary algorithm is used for GCD only when N < 3. - - -File: gmp.info, Node: Lehmer's Algorithm, Next: Subquadratic GCD, Prev: Binary GCD, Up: Greatest Common Divisor Algorithms - -16.3.2 Lehmer's algorithm -------------------------- - -Lehmer's improvement of the Euclidean algorithms is based on the -observation that the initial part of the quotient sequence depends only -on the most significant parts of the inputs. The variant of Lehmer's -algorithm used in GMP splits off the most significant two limbs, as -suggested, e.g., in "A Double-Digit Lehmer-Euclid Algorithm" by -Jebelean (*note References::). The quotients of two double-limb inputs -are collected as a 2 by 2 matrix with single-limb elements. This is -done by the function `mpn_hgcd2'. The resulting matrix is applied to -the inputs using `mpn_mul_1' and `mpn_submul_1'. Each iteration usually -reduces the inputs by almost one limb. In the rare case of a large -quotient, no progress can be made by examining just the most -significant two limbs, and the quotient is computing using plain -division. - - The resulting algorithm is asymptotically O(N^2), just as the -Euclidean algorithm and the binary algorithm. The quadratic part of the -work are the calls to `mpn_mul_1' and `mpn_submul_1'. For small sizes, -the linear work is also significant. There are roughly N calls to the -`mpn_hgcd2' function. This function uses a couple of important -optimizations: - - * It uses the same relaxed notion of correctness as `mpn_hgcd' (see - next section). This means that when called with the most - significant two limbs of two large numbers, the returned matrix - does not always correspond exactly to the initial quotient - sequence for the two large numbers; the final quotient may - sometimes be one off. - - * It takes advantage of the fact the quotients are usually small. - The division operator is not used, since the corresponding - assembler instruction is very slow on most architectures. (This - code could probably be improved further, it uses many branches - that are unfriendly to prediction). - - * It switches from double-limb calculations to single-limb - calculations half-way through, when the input numbers have been - reduced in size from two limbs to one and a half. - - - -File: gmp.info, Node: Subquadratic GCD, Next: Extended GCD, Prev: Lehmer's Algorithm, Up: Greatest Common Divisor Algorithms - -16.3.3 Subquadratic GCD ------------------------ - -For inputs larger than `GCD_DC_THRESHOLD', GCD is computed via the HGCD -(Half GCD) function, as a generalization to Lehmer's algorithm. - - Let the inputs a,b be of size N limbs each. Put S = floor(N/2) + 1. -Then HGCD(a,b) returns a transformation matrix T with non-negative -elements, and reduced numbers (c;d) = T^-1 (a;b). The reduced numbers -c,d must be larger than S limbs, while their difference abs(c-d) must -fit in S limbs. The matrix elements will also be of size roughly N/2. - - The HGCD base case uses Lehmer's algorithm, but with the above stop -condition that returns reduced numbers and the corresponding -transformation matrix half-way through. For inputs larger than -`HGCD_THRESHOLD', HGCD is computed recursively, using the divide and -conquer algorithm in "On Scho"nhage's algorithm and subquadratic -integer GCD computation" by Mo"ller (*note References::). The recursive -algorithm consists of these main steps. - - * Call HGCD recursively, on the most significant N/2 limbs. Apply the - resulting matrix T_1 to the full numbers, reducing them to a size - just above 3N/2. - - * Perform a small number of division or subtraction steps to reduce - the numbers to size below 3N/2. This is essential mainly for the - unlikely case of large quotients. - - * Call HGCD recursively, on the most significant N/2 limbs of the - reduced numbers. Apply the resulting matrix T_2 to the full - numbers, reducing them to a size just above N/2. - - * Compute T = T_1 T_2. - - * Perform a small number of division and subtraction steps to - satisfy the requirements, and return. - - GCD is then implemented as a loop around HGCD, similarly to Lehmer's -algorithm. Where Lehmer repeatedly chops off the top two limbs, calls -`mpn_hgcd2', and applies the resulting matrix to the full numbers, the -subquadratic GCD chops off the most significant third of the limbs (the -proportion is a tuning parameter, and 1/3 seems to be more efficient -than, e.g, 1/2), calls `mpn_hgcd', and applies the resulting matrix. -Once the input numbers are reduced to size below `GCD_DC_THRESHOLD', -Lehmer's algorithm is used for the rest of the work. - - The asymptotic running time of both HGCD and GCD is O(M(N)*log(N)), -where M(N) is the time for multiplying two N-limb numbers. - - -File: gmp.info, Node: Extended GCD, Next: Jacobi Symbol, Prev: Subquadratic GCD, Up: Greatest Common Divisor Algorithms - -16.3.4 Extended GCD -------------------- - -The extended GCD function, or GCDEXT, calculates gcd(a,b) and also -cofactors x and y satisfying a*x+b*y=gcd(a,b). All the algorithms used -for plain GCD are extended to handle this case. The binary algorithm is -used only for single-limb GCDEXT. Lehmer's algorithm is used for sizes -up to `GCDEXT_DC_THRESHOLD'. Above this threshold, GCDEXT is -implemented as a loop around HGCD, but with more book-keeping to keep -track of the cofactors. This gives the same asymptotic running time as -for GCD and HGCD, O(M(N)*log(N)) - - One difference to plain GCD is that while the inputs a and b are -reduced as the algorithm proceeds, the cofactors x and y grow in size. -This makes the tuning of the chopping-point more difficult. The current -code chops off the most significant half of the inputs for the call to -HGCD in the first iteration, and the most significant two thirds for -the remaining calls. This strategy could surely be improved. Also the -stop condition for the loop, where Lehmer's algorithm is invoked once -the inputs are reduced below `GCDEXT_DC_THRESHOLD', could maybe be -improved by taking into account the current size of the cofactors. - - -File: gmp.info, Node: Jacobi Symbol, Prev: Extended GCD, Up: Greatest Common Divisor Algorithms - -16.3.5 Jacobi Symbol --------------------- - -`mpz_jacobi' and `mpz_kronecker' are currently implemented with a -simple binary algorithm similar to that described for the GCDs (*note -Binary GCD::). They're not very fast when both inputs are large. -Lehmer's multi-step improvement or a binary based multi-step algorithm -is likely to be better. - - When one operand fits a single limb, and that includes -`mpz_kronecker_ui' and friends, an initial reduction is done with -either `mpn_mod_1' or `mpn_modexact_1_odd', followed by the binary -algorithm on a single limb. The binary algorithm is well suited to a -single limb, and the whole calculation in this case is quite efficient. - - In all the routines sign changes for the result are accumulated -using some bit twiddling, avoiding table lookups or conditional jumps. - diff --git a/misc/builddeps/linux32/gmp/share/info/gmp.info-2 b/misc/builddeps/linux32/gmp/share/info/gmp.info-2 deleted file mode 100644 index 45846232..00000000 --- a/misc/builddeps/linux32/gmp/share/info/gmp.info-2 +++ /dev/null @@ -1,3489 +0,0 @@ -This is ../../gmp/doc/gmp.info, produced by makeinfo version 4.8 from -../../gmp/doc/gmp.texi. - - This manual describes how to install and use the GNU multiple -precision arithmetic library, version 5.0.1. - - Copyright 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free -Software Foundation, Inc. - - Permission is granted to copy, distribute and/or modify this -document under the terms of the GNU Free Documentation License, Version -1.3 or any later version published by the Free Software Foundation; -with no Invariant Sections, with the Front-Cover Texts being "A GNU -Manual", and with the Back-Cover Texts being "You have freedom to copy -and modify this GNU Manual, like GNU software". A copy of the license -is included in *Note GNU Free Documentation License::. - -INFO-DIR-SECTION GNU libraries -START-INFO-DIR-ENTRY -* gmp: (gmp). GNU Multiple Precision Arithmetic Library. -END-INFO-DIR-ENTRY - - -File: gmp.info, Node: Powering Algorithms, Next: Root Extraction Algorithms, Prev: Greatest Common Divisor Algorithms, Up: Algorithms - -16.4 Powering Algorithms -======================== - -* Menu: - -* Normal Powering Algorithm:: -* Modular Powering Algorithm:: - - -File: gmp.info, Node: Normal Powering Algorithm, Next: Modular Powering Algorithm, Prev: Powering Algorithms, Up: Powering Algorithms - -16.4.1 Normal Powering ----------------------- - -Normal `mpz' or `mpf' powering uses a simple binary algorithm, -successively squaring and then multiplying by the base when a 1 bit is -seen in the exponent, as per Knuth section 4.6.3. The "left to right" -variant described there is used rather than algorithm A, since it's -just as easy and can be done with somewhat less temporary memory. - - -File: gmp.info, Node: Modular Powering Algorithm, Prev: Normal Powering Algorithm, Up: Powering Algorithms - -16.4.2 Modular Powering ------------------------ - -Modular powering is implemented using a 2^k-ary sliding window -algorithm, as per "Handbook of Applied Cryptography" algorithm 14.85 -(*note References::). k is chosen according to the size of the -exponent. Larger exponents use larger values of k, the choice being -made to minimize the average number of multiplications that must -supplement the squaring. - - The modular multiplies and squares use either a simple division or -the REDC method by Montgomery (*note References::). REDC is a little -faster, essentially saving N single limb divisions in a fashion similar -to an exact remainder (*note Exact Remainder::). - - -File: gmp.info, Node: Root Extraction Algorithms, Next: Radix Conversion Algorithms, Prev: Powering Algorithms, Up: Algorithms - -16.5 Root Extraction Algorithms -=============================== - -* Menu: - -* Square Root Algorithm:: -* Nth Root Algorithm:: -* Perfect Square Algorithm:: -* Perfect Power Algorithm:: - - -File: gmp.info, Node: Square Root Algorithm, Next: Nth Root Algorithm, Prev: Root Extraction Algorithms, Up: Root Extraction Algorithms - -16.5.1 Square Root ------------------- - -Square roots are taken using the "Karatsuba Square Root" algorithm by -Paul Zimmermann (*note References::). - - An input n is split into four parts of k bits each, so with b=2^k we -have n = a3*b^3 + a2*b^2 + a1*b + a0. Part a3 must be "normalized" so -that either the high or second highest bit is set. In GMP, k is kept -on a limb boundary and the input is left shifted (by an even number of -bits) to normalize. - - The square root of the high two parts is taken, by recursive -application of the algorithm (bottoming out in a one-limb Newton's -method), - - s1,r1 = sqrtrem (a3*b + a2) - - This is an approximation to the desired root and is extended by a -division to give s,r, - - q,u = divrem (r1*b + a1, 2*s1) - s = s1*b + q - r = u*b + a0 - q^2 - - The normalization requirement on a3 means at this point s is either -correct or 1 too big. r is negative in the latter case, so - - if r < 0 then - r = r + 2*s - 1 - s = s - 1 - - The algorithm is expressed in a divide and conquer form, but as -noted in the paper it can also be viewed as a discrete variant of -Newton's method, or as a variation on the schoolboy method (no longer -taught) for square roots two digits at a time. - - If the remainder r is not required then usually only a few high limbs -of r and u need to be calculated to determine whether an adjustment to -s is required. This optimization is not currently implemented. - - In the Karatsuba multiplication range this algorithm is -O(1.5*M(N/2)), where M(n) is the time to multiply two numbers of n -limbs. In the FFT multiplication range this grows to a bound of -O(6*M(N/2)). In practice a factor of about 1.5 to 1.8 is found in the -Karatsuba and Toom-3 ranges, growing to 2 or 3 in the FFT range. - - The algorithm does all its calculations in integers and the resulting -`mpn_sqrtrem' is used for both `mpz_sqrt' and `mpf_sqrt'. The extended -precision given by `mpf_sqrt_ui' is obtained by padding with zero limbs. - - -File: gmp.info, Node: Nth Root Algorithm, Next: Perfect Square Algorithm, Prev: Square Root Algorithm, Up: Root Extraction Algorithms - -16.5.2 Nth Root ---------------- - -Integer Nth roots are taken using Newton's method with the following -iteration, where A is the input and n is the root to be taken. - - 1 A - a[i+1] = - * ( --------- + (n-1)*a[i] ) - n a[i]^(n-1) - - The initial approximation a[1] is generated bitwise by successively -powering a trial root with or without new 1 bits, aiming to be just -above the true root. The iteration converges quadratically when -started from a good approximation. When n is large more initial bits -are needed to get good convergence. The current implementation is not -particularly well optimized. - - -File: gmp.info, Node: Perfect Square Algorithm, Next: Perfect Power Algorithm, Prev: Nth Root Algorithm, Up: Root Extraction Algorithms - -16.5.3 Perfect Square ---------------------- - -A significant fraction of non-squares can be quickly identified by -checking whether the input is a quadratic residue modulo small integers. - - `mpz_perfect_square_p' first tests the input mod 256, which means -just examining the low byte. Only 44 different values occur for -squares mod 256, so 82.8% of inputs can be immediately identified as -non-squares. - - On a 32-bit system similar tests are done mod 9, 5, 7, 13 and 17, -for a total 99.25% of inputs identified as non-squares. On a 64-bit -system 97 is tested too, for a total 99.62%. - - These moduli are chosen because they're factors of 2^24-1 (or 2^48-1 -for 64-bits), and such a remainder can be quickly taken just using -additions (see `mpn_mod_34lsub1'). - - When nails are in use moduli are instead selected by the `gen-psqr.c' -program and applied with an `mpn_mod_1'. The same 2^24-1 or 2^48-1 -could be done with nails using some extra bit shifts, but this is not -currently implemented. - - In any case each modulus is applied to the `mpn_mod_34lsub1' or -`mpn_mod_1' remainder and a table lookup identifies non-squares. By -using a "modexact" style calculation, and suitably permuted tables, -just one multiply each is required, see the code for details. Moduli -are also combined to save operations, so long as the lookup tables -don't become too big. `gen-psqr.c' does all the pre-calculations. - - A square root must still be taken for any value that passes these -tests, to verify it's really a square and not one of the small fraction -of non-squares that get through (ie. a pseudo-square to all the tested -bases). - - Clearly more residue tests could be done, `mpz_perfect_square_p' only -uses a compact and efficient set. Big inputs would probably benefit -from more residue testing, small inputs might be better off with less. -The assumed distribution of squares versus non-squares in the input -would affect such considerations. - - -File: gmp.info, Node: Perfect Power Algorithm, Prev: Perfect Square Algorithm, Up: Root Extraction Algorithms - -16.5.4 Perfect Power --------------------- - -Detecting perfect powers is required by some factorization algorithms. -Currently `mpz_perfect_power_p' is implemented using repeated Nth root -extractions, though naturally only prime roots need to be considered. -(*Note Nth Root Algorithm::.) - - If a prime divisor p with multiplicity e can be found, then only -roots which are divisors of e need to be considered, much reducing the -work necessary. To this end divisibility by a set of small primes is -checked. - - -File: gmp.info, Node: Radix Conversion Algorithms, Next: Other Algorithms, Prev: Root Extraction Algorithms, Up: Algorithms - -16.6 Radix Conversion -===================== - -Radix conversions are less important than other algorithms. A program -dominated by conversions should probably use a different data -representation. - -* Menu: - -* Binary to Radix:: -* Radix to Binary:: - - -File: gmp.info, Node: Binary to Radix, Next: Radix to Binary, Prev: Radix Conversion Algorithms, Up: Radix Conversion Algorithms - -16.6.1 Binary to Radix ----------------------- - -Conversions from binary to a power-of-2 radix use a simple and fast -O(N) bit extraction algorithm. - - Conversions from binary to other radices use one of two algorithms. -Sizes below `GET_STR_PRECOMPUTE_THRESHOLD' use a basic O(N^2) method. -Repeated divisions by b^n are made, where b is the radix and n is the -biggest power that fits in a limb. But instead of simply using the -remainder r from such divisions, an extra divide step is done to give a -fractional limb representing r/b^n. The digits of r can then be -extracted using multiplications by b rather than divisions. Special -case code is provided for decimal, allowing multiplications by 10 to -optimize to shifts and adds. - - Above `GET_STR_PRECOMPUTE_THRESHOLD' a sub-quadratic algorithm is -used. For an input t, powers b^(n*2^i) of the radix are calculated, -until a power between t and sqrt(t) is reached. t is then divided by -that largest power, giving a quotient which is the digits above that -power, and a remainder which is those below. These two parts are in -turn divided by the second highest power, and so on recursively. When -a piece has been divided down to less than `GET_STR_DC_THRESHOLD' -limbs, the basecase algorithm described above is used. - - The advantage of this algorithm is that big divisions can make use -of the sub-quadratic divide and conquer division (*note Divide and -Conquer Division::), and big divisions tend to have less overheads than -lots of separate single limb divisions anyway. But in any case the -cost of calculating the powers b^(n*2^i) must first be overcome. - - `GET_STR_PRECOMPUTE_THRESHOLD' and `GET_STR_DC_THRESHOLD' represent -the same basic thing, the point where it becomes worth doing a big -division to cut the input in half. `GET_STR_PRECOMPUTE_THRESHOLD' -includes the cost of calculating the radix power required, whereas -`GET_STR_DC_THRESHOLD' assumes that's already available, which is the -case when recursing. - - Since the base case produces digits from least to most significant -but they want to be stored from most to least, it's necessary to -calculate in advance how many digits there will be, or at least be sure -not to underestimate that. For GMP the number of input bits is -multiplied by `chars_per_bit_exactly' from `mp_bases', rounding up. -The result is either correct or one too big. - - Examining some of the high bits of the input could increase the -chance of getting the exact number of digits, but an exact result every -time would not be practical, since in general the difference between -numbers 100... and 99... is only in the last few bits and the work to -identify 99... might well be almost as much as a full conversion. - - `mpf_get_str' doesn't currently use the algorithm described here, it -multiplies or divides by a power of b to move the radix point to the -just above the highest non-zero digit (or at worst one above that -location), then multiplies by b^n to bring out digits. This is O(N^2) -and is certainly not optimal. - - The r/b^n scheme described above for using multiplications to bring -out digits might be useful for more than a single limb. Some brief -experiments with it on the base case when recursing didn't give a -noticeable improvement, but perhaps that was only due to the -implementation. Something similar would work for the sub-quadratic -divisions too, though there would be the cost of calculating a bigger -radix power. - - Another possible improvement for the sub-quadratic part would be to -arrange for radix powers that balanced the sizes of quotient and -remainder produced, ie. the highest power would be an b^(n*k) -approximately equal to sqrt(t), not restricted to a 2^i factor. That -ought to smooth out a graph of times against sizes, but may or may not -be a net speedup. - - -File: gmp.info, Node: Radix to Binary, Prev: Binary to Radix, Up: Radix Conversion Algorithms - -16.6.2 Radix to Binary ----------------------- - -*This section needs to be rewritten, it currently describes the -algorithms used before GMP 4.3.* - - Conversions from a power-of-2 radix into binary use a simple and fast -O(N) bitwise concatenation algorithm. - - Conversions from other radices use one of two algorithms. Sizes -below `SET_STR_PRECOMPUTE_THRESHOLD' use a basic O(N^2) method. Groups -of n digits are converted to limbs, where n is the biggest power of the -base b which will fit in a limb, then those groups are accumulated into -the result by multiplying by b^n and adding. This saves -multi-precision operations, as per Knuth section 4.4 part E (*note -References::). Some special case code is provided for decimal, giving -the compiler a chance to optimize multiplications by 10. - - Above `SET_STR_PRECOMPUTE_THRESHOLD' a sub-quadratic algorithm is -used. First groups of n digits are converted into limbs. Then adjacent -limbs are combined into limb pairs with x*b^n+y, where x and y are the -limbs. Adjacent limb pairs are combined into quads similarly with -x*b^(2n)+y. This continues until a single block remains, that being -the result. - - The advantage of this method is that the multiplications for each x -are big blocks, allowing Karatsuba and higher algorithms to be used. -But the cost of calculating the powers b^(n*2^i) must be overcome. -`SET_STR_PRECOMPUTE_THRESHOLD' usually ends up quite big, around 5000 -digits, and on some processors much bigger still. - - `SET_STR_PRECOMPUTE_THRESHOLD' is based on the input digits (and -tuned for decimal), though it might be better based on a limb count, so -as to be independent of the base. But that sort of count isn't used by -the base case and so would need some sort of initial calculation or -estimate. - - The main reason `SET_STR_PRECOMPUTE_THRESHOLD' is so much bigger -than the corresponding `GET_STR_PRECOMPUTE_THRESHOLD' is that -`mpn_mul_1' is much faster than `mpn_divrem_1' (often by a factor of 5, -or more). - - -File: gmp.info, Node: Other Algorithms, Next: Assembly Coding, Prev: Radix Conversion Algorithms, Up: Algorithms - -16.7 Other Algorithms -===================== - -* Menu: - -* Prime Testing Algorithm:: -* Factorial Algorithm:: -* Binomial Coefficients Algorithm:: -* Fibonacci Numbers Algorithm:: -* Lucas Numbers Algorithm:: -* Random Number Algorithms:: - - -File: gmp.info, Node: Prime Testing Algorithm, Next: Factorial Algorithm, Prev: Other Algorithms, Up: Other Algorithms - -16.7.1 Prime Testing --------------------- - -The primality testing in `mpz_probab_prime_p' (*note Number Theoretic -Functions::) first does some trial division by small factors and then -uses the Miller-Rabin probabilistic primality testing algorithm, as -described in Knuth section 4.5.4 algorithm P (*note References::). - - For an odd input n, and with n = q*2^k+1 where q is odd, this -algorithm selects a random base x and tests whether x^q mod n is 1 or --1, or an x^(q*2^j) mod n is 1, for 1<=j<=k. If so then n is probably -prime, if not then n is definitely composite. - - Any prime n will pass the test, but some composites do too. Such -composites are known as strong pseudoprimes to base x. No n is a -strong pseudoprime to more than 1/4 of all bases (see Knuth exercise -22), hence with x chosen at random there's no more than a 1/4 chance a -"probable prime" will in fact be composite. - - In fact strong pseudoprimes are quite rare, making the test much more -powerful than this analysis would suggest, but 1/4 is all that's proven -for an arbitrary n. - - -File: gmp.info, Node: Factorial Algorithm, Next: Binomial Coefficients Algorithm, Prev: Prime Testing Algorithm, Up: Other Algorithms - -16.7.2 Factorial ----------------- - -Factorials are calculated by a combination of removal of twos, -powering, and binary splitting. The procedure can be best illustrated -with an example, - - 23! = 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23 - -has factors of two removed, - - 23! = 2^19.1.1.3.1.5.3.7.1.9.5.11.3.13.7.15.1.17.9.19.5.21.11.23 - -and the resulting terms collected up according to their multiplicity, - - 23! = 2^19.(3.5)^3.(7.9.11)^2.(13.15.17.19.21.23) - - Each sequence such as 13.15.17.19.21.23 is evaluated by splitting -into every second term, as for instance (13.17.21).(15.19.23), and the -same recursively on each half. This is implemented iteratively using -some bit twiddling. - - Such splitting is more efficient than repeated Nx1 multiplies since -it forms big multiplies, allowing Karatsuba and higher algorithms to be -used. And even below the Karatsuba threshold a big block of work can -be more efficient for the basecase algorithm. - - Splitting into subsequences of every second term keeps the resulting -products more nearly equal in size than would the simpler approach of -say taking the first half and second half of the sequence. Nearly -equal products are more efficient for the current multiply -implementation. - - -File: gmp.info, Node: Binomial Coefficients Algorithm, Next: Fibonacci Numbers Algorithm, Prev: Factorial Algorithm, Up: Other Algorithms - -16.7.3 Binomial Coefficients ----------------------------- - -Binomial coefficients C(n,k) are calculated by first arranging k <= n/2 -using C(n,k) = C(n,n-k) if necessary, and then evaluating the following -product simply from i=2 to i=k. - - k (n-k+i) - C(n,k) = (n-k+1) * prod ------- - i=2 i - - It's easy to show that each denominator i will divide the product so -far, so the exact division algorithm is used (*note Exact Division::). - - The numerators n-k+i and denominators i are first accumulated into -as many fit a limb, to save multi-precision operations, though for -`mpz_bin_ui' this applies only to the divisors, since n is an `mpz_t' -and n-k+i in general won't fit in a limb at all. - - -File: gmp.info, Node: Fibonacci Numbers Algorithm, Next: Lucas Numbers Algorithm, Prev: Binomial Coefficients Algorithm, Up: Other Algorithms - -16.7.4 Fibonacci Numbers ------------------------- - -The Fibonacci functions `mpz_fib_ui' and `mpz_fib2_ui' are designed for -calculating isolated F[n] or F[n],F[n-1] values efficiently. - - For small n, a table of single limb values in `__gmp_fib_table' is -used. On a 32-bit limb this goes up to F[47], or on a 64-bit limb up -to F[93]. For convenience the table starts at F[-1]. - - Beyond the table, values are generated with a binary powering -algorithm, calculating a pair F[n] and F[n-1] working from high to low -across the bits of n. The formulas used are - - F[2k+1] = 4*F[k]^2 - F[k-1]^2 + 2*(-1)^k - F[2k-1] = F[k]^2 + F[k-1]^2 - - F[2k] = F[2k+1] - F[2k-1] - - At each step, k is the high b bits of n. If the next bit of n is 0 -then F[2k],F[2k-1] is used, or if it's a 1 then F[2k+1],F[2k] is used, -and the process repeated until all bits of n are incorporated. Notice -these formulas require just two squares per bit of n. - - It'd be possible to handle the first few n above the single limb -table with simple additions, using the defining Fibonacci recurrence -F[k+1]=F[k]+F[k-1], but this is not done since it usually turns out to -be faster for only about 10 or 20 values of n, and including a block of -code for just those doesn't seem worthwhile. If they really mattered -it'd be better to extend the data table. - - Using a table avoids lots of calculations on small numbers, and -makes small n go fast. A bigger table would make more small n go fast, -it's just a question of balancing size against desired speed. For GMP -the code is kept compact, with the emphasis primarily on a good -powering algorithm. - - `mpz_fib2_ui' returns both F[n] and F[n-1], but `mpz_fib_ui' is only -interested in F[n]. In this case the last step of the algorithm can -become one multiply instead of two squares. One of the following two -formulas is used, according as n is odd or even. - - F[2k] = F[k]*(F[k]+2F[k-1]) - - F[2k+1] = (2F[k]+F[k-1])*(2F[k]-F[k-1]) + 2*(-1)^k - - F[2k+1] here is the same as above, just rearranged to be a multiply. -For interest, the 2*(-1)^k term both here and above can be applied -just to the low limb of the calculation, without a carry or borrow into -further limbs, which saves some code size. See comments with -`mpz_fib_ui' and the internal `mpn_fib2_ui' for how this is done. - - -File: gmp.info, Node: Lucas Numbers Algorithm, Next: Random Number Algorithms, Prev: Fibonacci Numbers Algorithm, Up: Other Algorithms - -16.7.5 Lucas Numbers --------------------- - -`mpz_lucnum2_ui' derives a pair of Lucas numbers from a pair of -Fibonacci numbers with the following simple formulas. - - L[k] = F[k] + 2*F[k-1] - L[k-1] = 2*F[k] - F[k-1] - - `mpz_lucnum_ui' is only interested in L[n], and some work can be -saved. Trailing zero bits on n can be handled with a single square -each. - - L[2k] = L[k]^2 - 2*(-1)^k - - And the lowest 1 bit can be handled with one multiply of a pair of -Fibonacci numbers, similar to what `mpz_fib_ui' does. - - L[2k+1] = 5*F[k-1]*(2*F[k]+F[k-1]) - 4*(-1)^k - - -File: gmp.info, Node: Random Number Algorithms, Prev: Lucas Numbers Algorithm, Up: Other Algorithms - -16.7.6 Random Numbers ---------------------- - -For the `urandomb' functions, random numbers are generated simply by -concatenating bits produced by the generator. As long as the generator -has good randomness properties this will produce well-distributed N bit -numbers. - - For the `urandomm' functions, random numbers in a range 0<=R48 bit pieces is convenient. With -some care though six 21x32->53 bit products can be used, if one of the -lower two 21-bit pieces also uses the sign bit. - - For the `mpn_mul_1' family of functions on a 64-bit machine, the -invariant single limb is split at the start, into 3 or 4 pieces. -Inside the loop, the bignum operand is split into 32-bit pieces. Fast -conversion of these unsigned 32-bit pieces to floating point is highly -machine-dependent. In some cases, reading the data into the integer -unit, zero-extending to 64-bits, then transferring to the floating -point unit back via memory is the only option. - - Converting partial products back to 64-bit limbs is usually best -done as a signed conversion. Since all values are smaller than 2^53, -signed and unsigned are the same, but most processors lack unsigned -conversions. - - - - Here is a diagram showing 16x32 bit products for an `mpn_mul_1' or -`mpn_addmul_1' with a 64-bit limb. The single limb operand V is split -into four 16-bit parts. The multi-limb operand U is split in the loop -into two 32-bit parts. - - +---+---+---+---+ - |v48|v32|v16|v00| V operand - +---+---+---+---+ - - +-------+---+---+ - x | u32 | u00 | U operand (one limb) - +---------------+ - - --------------------------------- - - +-----------+ - | u00 x v00 | p00 48-bit products - +-----------+ - +-----------+ - | u00 x v16 | p16 - +-----------+ - +-----------+ - | u00 x v32 | p32 - +-----------+ - +-----------+ - | u00 x v48 | p48 - +-----------+ - +-----------+ - | u32 x v00 | r32 - +-----------+ - +-----------+ - | u32 x v16 | r48 - +-----------+ - +-----------+ - | u32 x v32 | r64 - +-----------+ - +-----------+ - | u32 x v48 | r80 - +-----------+ - - p32 and r32 can be summed using floating-point addition, and -likewise p48 and r48. p00 and p16 can be summed with r64 and r80 from -the previous iteration. - - For each loop then, four 49-bit quantities are transferred to the -integer unit, aligned as follows, - - |-----64bits----|-----64bits----| - +------------+ - | p00 + r64' | i00 - +------------+ - +------------+ - | p16 + r80' | i16 - +------------+ - +------------+ - | p32 + r32 | i32 - +------------+ - +------------+ - | p48 + r48 | i48 - +------------+ - - The challenge then is to sum these efficiently and add in a carry -limb, generating a low 64-bit result limb and a high 33-bit carry limb -(i48 extends 33 bits into the high half). - - -File: gmp.info, Node: Assembly SIMD Instructions, Next: Assembly Software Pipelining, Prev: Assembly Floating Point, Up: Assembly Coding - -16.8.7 SIMD Instructions ------------------------- - -The single-instruction multiple-data support in current microprocessors -is aimed at signal processing algorithms where each data point can be -treated more or less independently. There's generally not much support -for propagating the sort of carries that arise in GMP. - - SIMD multiplications of say four 16x16 bit multiplies only do as much -work as one 32x32 from GMP's point of view, and need some shifts and -adds besides. But of course if say the SIMD form is fully pipelined -and uses less instruction decoding then it may still be worthwhile. - - On the x86 chips, MMX has so far found a use in `mpn_rshift' and -`mpn_lshift', and is used in a special case for 16-bit multipliers in -the P55 `mpn_mul_1'. SSE2 is used for Pentium 4 `mpn_mul_1', -`mpn_addmul_1', and `mpn_submul_1'. - - -File: gmp.info, Node: Assembly Software Pipelining, Next: Assembly Loop Unrolling, Prev: Assembly SIMD Instructions, Up: Assembly Coding - -16.8.8 Software Pipelining --------------------------- - -Software pipelining consists of scheduling instructions around the -branch point in a loop. For example a loop might issue a load not for -use in the present iteration but the next, thereby allowing extra -cycles for the data to arrive from memory. - - Naturally this is wanted only when doing things like loads or -multiplies that take several cycles to complete, and only where a CPU -has multiple functional units so that other work can be done in the -meantime. - - A pipeline with several stages will have a data value in progress at -each stage and each loop iteration moves them along one stage. This is -like juggling. - - If the latency of some instruction is greater than the loop time -then it will be necessary to unroll, so one register has a result ready -to use while another (or multiple others) are still in progress. -(*note Assembly Loop Unrolling::). - - -File: gmp.info, Node: Assembly Loop Unrolling, Next: Assembly Writing Guide, Prev: Assembly Software Pipelining, Up: Assembly Coding - -16.8.9 Loop Unrolling ---------------------- - -Loop unrolling consists of replicating code so that several limbs are -processed in each loop. At a minimum this reduces loop overheads by a -corresponding factor, but it can also allow better register usage, for -example alternately using one register combination and then another. -Judicious use of `m4' macros can help avoid lots of duplication in the -source code. - - Any amount of unrolling can be handled with a loop counter that's -decremented by N each time, stopping when the remaining count is less -than the further N the loop will process. Or by subtracting N at the -start, the termination condition becomes when the counter C is less -than 0 (and the count of remaining limbs is C+N). - - Alternately for a power of 2 unroll the loop count and remainder can -be established with a shift and mask. This is convenient if also -making a computed jump into the middle of a large loop. - - The limbs not a multiple of the unrolling can be handled in various -ways, for example - - * A simple loop at the end (or the start) to process the excess. - Care will be wanted that it isn't too much slower than the - unrolled part. - - * A set of binary tests, for example after an 8-limb unrolling, test - for 4 more limbs to process, then a further 2 more or not, and - finally 1 more or not. This will probably take more code space - than a simple loop. - - * A `switch' statement, providing separate code for each possible - excess, for example an 8-limb unrolling would have separate code - for 0 remaining, 1 remaining, etc, up to 7 remaining. This might - take a lot of code, but may be the best way to optimize all cases - in combination with a deep pipelined loop. - - * A computed jump into the middle of the loop, thus making the first - iteration handle the excess. This should make times smoothly - increase with size, which is attractive, but setups for the jump - and adjustments for pointers can be tricky and could become quite - difficult in combination with deep pipelining. - - -File: gmp.info, Node: Assembly Writing Guide, Prev: Assembly Loop Unrolling, Up: Assembly Coding - -16.8.10 Writing Guide ---------------------- - -This is a guide to writing software pipelined loops for processing limb -vectors in assembly. - - First determine the algorithm and which instructions are needed. -Code it without unrolling or scheduling, to make sure it works. On a -3-operand CPU try to write each new value to a new register, this will -greatly simplify later steps. - - Then note for each instruction the functional unit and/or issue port -requirements. If an instruction can use either of two units, like U0 -or U1 then make a category "U0/U1". Count the total using each unit -(or combined unit), and count all instructions. - - Figure out from those counts the best possible loop time. The goal -will be to find a perfect schedule where instruction latencies are -completely hidden. The total instruction count might be the limiting -factor, or perhaps a particular functional unit. It might be possible -to tweak the instructions to help the limiting factor. - - Suppose the loop time is N, then make N issue buckets, with the -final loop branch at the end of the last. Now fill the buckets with -dummy instructions using the functional units desired. Run this to -make sure the intended speed is reached. - - Now replace the dummy instructions with the real instructions from -the slow but correct loop you started with. The first will typically -be a load instruction. Then the instruction using that value is placed -in a bucket an appropriate distance down. Run the loop again, to check -it still runs at target speed. - - Keep placing instructions, frequently measuring the loop. After a -few you will need to wrap around from the last bucket back to the top -of the loop. If you used the new-register for new-value strategy above -then there will be no register conflicts. If not then take care not to -clobber something already in use. Changing registers at this time is -very error prone. - - The loop will overlap two or more of the original loop iterations, -and the computation of one vector element result will be started in one -iteration of the new loop, and completed one or several iterations -later. - - The final step is to create feed-in and wind-down code for the loop. -A good way to do this is to make a copy (or copies) of the loop at the -start and delete those instructions which don't have valid antecedents, -and at the end replicate and delete those whose results are unwanted -(including any further loads). - - The loop will have a minimum number of limbs loaded and processed, -so the feed-in code must test if the request size is smaller and skip -either to a suitable part of the wind-down or to special code for small -sizes. - - -File: gmp.info, Node: Internals, Next: Contributors, Prev: Algorithms, Up: Top - -17 Internals -************ - -*This chapter is provided only for informational purposes and the -various internals described here may change in future GMP releases. -Applications expecting to be compatible with future releases should use -only the documented interfaces described in previous chapters.* - -* Menu: - -* Integer Internals:: -* Rational Internals:: -* Float Internals:: -* Raw Output Internals:: -* C++ Interface Internals:: - - -File: gmp.info, Node: Integer Internals, Next: Rational Internals, Prev: Internals, Up: Internals - -17.1 Integer Internals -====================== - -`mpz_t' variables represent integers using sign and magnitude, in space -dynamically allocated and reallocated. The fields are as follows. - -`_mp_size' - The number of limbs, or the negative of that when representing a - negative integer. Zero is represented by `_mp_size' set to zero, - in which case the `_mp_d' data is unused. - -`_mp_d' - A pointer to an array of limbs which is the magnitude. These are - stored "little endian" as per the `mpn' functions, so `_mp_d[0]' - is the least significant limb and `_mp_d[ABS(_mp_size)-1]' is the - most significant. Whenever `_mp_size' is non-zero, the most - significant limb is non-zero. - - Currently there's always at least one limb allocated, so for - instance `mpz_set_ui' never needs to reallocate, and `mpz_get_ui' - can fetch `_mp_d[0]' unconditionally (though its value is then - only wanted if `_mp_size' is non-zero). - -`_mp_alloc' - `_mp_alloc' is the number of limbs currently allocated at `_mp_d', - and naturally `_mp_alloc >= ABS(_mp_size)'. When an `mpz' routine - is about to (or might be about to) increase `_mp_size', it checks - `_mp_alloc' to see whether there's enough space, and reallocates - if not. `MPZ_REALLOC' is generally used for this. - - The various bitwise logical functions like `mpz_and' behave as if -negative values were twos complement. But sign and magnitude is always -used internally, and necessary adjustments are made during the -calculations. Sometimes this isn't pretty, but sign and magnitude are -best for other routines. - - Some internal temporary variables are setup with `MPZ_TMP_INIT' and -these have `_mp_d' space obtained from `TMP_ALLOC' rather than the -memory allocation functions. Care is taken to ensure that these are -big enough that no reallocation is necessary (since it would have -unpredictable consequences). - - `_mp_size' and `_mp_alloc' are `int', although `mp_size_t' is -usually a `long'. This is done to make the fields just 32 bits on some -64 bits systems, thereby saving a few bytes of data space but still -providing plenty of range. - - -File: gmp.info, Node: Rational Internals, Next: Float Internals, Prev: Integer Internals, Up: Internals - -17.2 Rational Internals -======================= - -`mpq_t' variables represent rationals using an `mpz_t' numerator and -denominator (*note Integer Internals::). - - The canonical form adopted is denominator positive (and non-zero), -no common factors between numerator and denominator, and zero uniquely -represented as 0/1. - - It's believed that casting out common factors at each stage of a -calculation is best in general. A GCD is an O(N^2) operation so it's -better to do a few small ones immediately than to delay and have to do -a big one later. Knowing the numerator and denominator have no common -factors can be used for example in `mpq_mul' to make only two cross -GCDs necessary, not four. - - This general approach to common factors is badly sub-optimal in the -presence of simple factorizations or little prospect for cancellation, -but GMP has no way to know when this will occur. As per *Note -Efficiency::, that's left to applications. The `mpq_t' framework might -still suit, with `mpq_numref' and `mpq_denref' for direct access to the -numerator and denominator, or of course `mpz_t' variables can be used -directly. - - -File: gmp.info, Node: Float Internals, Next: Raw Output Internals, Prev: Rational Internals, Up: Internals - -17.3 Float Internals -==================== - -Efficient calculation is the primary aim of GMP floats and the use of -whole limbs and simple rounding facilitates this. - - `mpf_t' floats have a variable precision mantissa and a single -machine word signed exponent. The mantissa is represented using sign -and magnitude. - - most least - significant significant - limb limb - - _mp_d - |---- _mp_exp ---> | - _____ _____ _____ _____ _____ - |_____|_____|_____|_____|_____| - . <------------ radix point - - <-------- _mp_size ---------> - -The fields are as follows. - -`_mp_size' - The number of limbs currently in use, or the negative of that when - representing a negative value. Zero is represented by `_mp_size' - and `_mp_exp' both set to zero, and in that case the `_mp_d' data - is unused. (In the future `_mp_exp' might be undefined when - representing zero.) - -`_mp_prec' - The precision of the mantissa, in limbs. In any calculation the - aim is to produce `_mp_prec' limbs of result (the most significant - being non-zero). - -`_mp_d' - A pointer to the array of limbs which is the absolute value of the - mantissa. These are stored "little endian" as per the `mpn' - functions, so `_mp_d[0]' is the least significant limb and - `_mp_d[ABS(_mp_size)-1]' the most significant. - - The most significant limb is always non-zero, but there are no - other restrictions on its value, in particular the highest 1 bit - can be anywhere within the limb. - - `_mp_prec+1' limbs are allocated to `_mp_d', the extra limb being - for convenience (see below). There are no reallocations during a - calculation, only in a change of precision with `mpf_set_prec'. - -`_mp_exp' - The exponent, in limbs, determining the location of the implied - radix point. Zero means the radix point is just above the most - significant limb. Positive values mean a radix point offset - towards the lower limbs and hence a value >= 1, as for example in - the diagram above. Negative exponents mean a radix point further - above the highest limb. - - Naturally the exponent can be any value, it doesn't have to fall - within the limbs as the diagram shows, it can be a long way above - or a long way below. Limbs other than those included in the - `{_mp_d,_mp_size}' data are treated as zero. - - The `_mp_size' and `_mp_prec' fields are `int', although the -`mp_size_t' type is usually a `long'. The `_mp_exp' field is usually -`long'. This is done to make some fields just 32 bits on some 64 bits -systems, thereby saving a few bytes of data space but still providing -plenty of precision and a very large range. - - -The following various points should be noted. - -Low Zeros - The least significant limbs `_mp_d[0]' etc can be zero, though - such low zeros can always be ignored. Routines likely to produce - low zeros check and avoid them to save time in subsequent - calculations, but for most routines they're quite unlikely and - aren't checked. - -Mantissa Size Range - The `_mp_size' count of limbs in use can be less than `_mp_prec' if - the value can be represented in less. This means low precision - values or small integers stored in a high precision `mpf_t' can - still be operated on efficiently. - - `_mp_size' can also be greater than `_mp_prec'. Firstly a value is - allowed to use all of the `_mp_prec+1' limbs available at `_mp_d', - and secondly when `mpf_set_prec_raw' lowers `_mp_prec' it leaves - `_mp_size' unchanged and so the size can be arbitrarily bigger than - `_mp_prec'. - -Rounding - All rounding is done on limb boundaries. Calculating `_mp_prec' - limbs with the high non-zero will ensure the application requested - minimum precision is obtained. - - The use of simple "trunc" rounding towards zero is efficient, - since there's no need to examine extra limbs and increment or - decrement. - -Bit Shifts - Since the exponent is in limbs, there are no bit shifts in basic - operations like `mpf_add' and `mpf_mul'. When differing exponents - are encountered all that's needed is to adjust pointers to line up - the relevant limbs. - - Of course `mpf_mul_2exp' and `mpf_div_2exp' will require bit - shifts, but the choice is between an exponent in limbs which - requires shifts there, or one in bits which requires them almost - everywhere else. - -Use of `_mp_prec+1' Limbs - The extra limb on `_mp_d' (`_mp_prec+1' rather than just - `_mp_prec') helps when an `mpf' routine might get a carry from its - operation. `mpf_add' for instance will do an `mpn_add' of - `_mp_prec' limbs. If there's no carry then that's the result, but - if there is a carry then it's stored in the extra limb of space and - `_mp_size' becomes `_mp_prec+1'. - - Whenever `_mp_prec+1' limbs are held in a variable, the low limb - is not needed for the intended precision, only the `_mp_prec' high - limbs. But zeroing it out or moving the rest down is unnecessary. - Subsequent routines reading the value will simply take the high - limbs they need, and this will be `_mp_prec' if their target has - that same precision. This is no more than a pointer adjustment, - and must be checked anyway since the destination precision can be - different from the sources. - - Copy functions like `mpf_set' will retain a full `_mp_prec+1' limbs - if available. This ensures that a variable which has `_mp_size' - equal to `_mp_prec+1' will get its full exact value copied. - Strictly speaking this is unnecessary since only `_mp_prec' limbs - are needed for the application's requested precision, but it's - considered that an `mpf_set' from one variable into another of the - same precision ought to produce an exact copy. - -Application Precisions - `__GMPF_BITS_TO_PREC' converts an application requested precision - to an `_mp_prec'. The value in bits is rounded up to a whole limb - then an extra limb is added since the most significant limb of - `_mp_d' is only non-zero and therefore might contain only one bit. - - `__GMPF_PREC_TO_BITS' does the reverse conversion, and removes the - extra limb from `_mp_prec' before converting to bits. The net - effect of reading back with `mpf_get_prec' is simply the precision - rounded up to a multiple of `mp_bits_per_limb'. - - Note that the extra limb added here for the high only being - non-zero is in addition to the extra limb allocated to `_mp_d'. - For example with a 32-bit limb, an application request for 250 - bits will be rounded up to 8 limbs, then an extra added for the - high being only non-zero, giving an `_mp_prec' of 9. `_mp_d' then - gets 10 limbs allocated. Reading back with `mpf_get_prec' will - take `_mp_prec' subtract 1 limb and multiply by 32, giving 256 - bits. - - Strictly speaking, the fact the high limb has at least one bit - means that a float with, say, 3 limbs of 32-bits each will be - holding at least 65 bits, but for the purposes of `mpf_t' it's - considered simply to be 64 bits, a nice multiple of the limb size. - - -File: gmp.info, Node: Raw Output Internals, Next: C++ Interface Internals, Prev: Float Internals, Up: Internals - -17.4 Raw Output Internals -========================= - -`mpz_out_raw' uses the following format. - - +------+------------------------+ - | size | data bytes | - +------+------------------------+ - - The size is 4 bytes written most significant byte first, being the -number of subsequent data bytes, or the twos complement negative of -that when a negative integer is represented. The data bytes are the -absolute value of the integer, written most significant byte first. - - The most significant data byte is always non-zero, so the output is -the same on all systems, irrespective of limb size. - - In GMP 1, leading zero bytes were written to pad the data bytes to a -multiple of the limb size. `mpz_inp_raw' will still accept this, for -compatibility. - - The use of "big endian" for both the size and data fields is -deliberate, it makes the data easy to read in a hex dump of a file. -Unfortunately it also means that the limb data must be reversed when -reading or writing, so neither a big endian nor little endian system -can just read and write `_mp_d'. - - -File: gmp.info, Node: C++ Interface Internals, Prev: Raw Output Internals, Up: Internals - -17.5 C++ Interface Internals -============================ - -A system of expression templates is used to ensure something like -`a=b+c' turns into a simple call to `mpz_add' etc. For `mpf_class' the -scheme also ensures the precision of the final destination is used for -any temporaries within a statement like `f=w*x+y*z'. These are -important features which a naive implementation cannot provide. - - A simplified description of the scheme follows. The true scheme is -complicated by the fact that expressions have different return types. -For detailed information, refer to the source code. - - To perform an operation, say, addition, we first define a "function -object" evaluating it, - - struct __gmp_binary_plus - { - static void eval(mpf_t f, mpf_t g, mpf_t h) { mpf_add(f, g, h); } - }; - -And an "additive expression" object, - - __gmp_expr<__gmp_binary_expr > - operator+(const mpf_class &f, const mpf_class &g) - { - return __gmp_expr - <__gmp_binary_expr >(f, g); - } - - The seemingly redundant `__gmp_expr<__gmp_binary_expr<...>>' is used -to encapsulate any possible kind of expression into a single template -type. In fact even `mpf_class' etc are `typedef' specializations of -`__gmp_expr'. - - Next we define assignment of `__gmp_expr' to `mpf_class'. - - template - mpf_class & mpf_class::operator=(const __gmp_expr &expr) - { - expr.eval(this->get_mpf_t(), this->precision()); - return *this; - } - - template - void __gmp_expr<__gmp_binary_expr >::eval - (mpf_t f, mp_bitcnt_t precision) - { - Op::eval(f, expr.val1.get_mpf_t(), expr.val2.get_mpf_t()); - } - - where `expr.val1' and `expr.val2' are references to the expression's -operands (here `expr' is the `__gmp_binary_expr' stored within the -`__gmp_expr'). - - This way, the expression is actually evaluated only at the time of -assignment, when the required precision (that of `f') is known. -Furthermore the target `mpf_t' is now available, thus we can call -`mpf_add' directly with `f' as the output argument. - - Compound expressions are handled by defining operators taking -subexpressions as their arguments, like this: - - template - __gmp_expr - <__gmp_binary_expr<__gmp_expr, __gmp_expr, __gmp_binary_plus> > - operator+(const __gmp_expr &expr1, const __gmp_expr &expr2) - { - return __gmp_expr - <__gmp_binary_expr<__gmp_expr, __gmp_expr, __gmp_binary_plus> > - (expr1, expr2); - } - - And the corresponding specializations of `__gmp_expr::eval': - - template - void __gmp_expr - <__gmp_binary_expr<__gmp_expr, __gmp_expr, Op> >::eval - (mpf_t f, mp_bitcnt_t precision) - { - // declare two temporaries - mpf_class temp1(expr.val1, precision), temp2(expr.val2, precision); - Op::eval(f, temp1.get_mpf_t(), temp2.get_mpf_t()); - } - - The expression is thus recursively evaluated to any level of -complexity and all subexpressions are evaluated to the precision of `f'. - - -File: gmp.info, Node: Contributors, Next: References, Prev: Internals, Up: Top - -Appendix A Contributors -*********************** - -Torbjo"rn Granlund wrote the original GMP library and is still the main -developer. Code not explicitly attributed to others, was contributed by -Torbjo"rn. Several other individuals and organizations have contributed -GMP. Here is a list in chronological order on first contribution: - - Gunnar Sjo"din and Hans Riesel helped with mathematical problems in -early versions of the library. - - Richard Stallman helped with the interface design and revised the -first version of this manual. - - Brian Beuning and Doug Lea helped with testing of early versions of -the library and made creative suggestions. - - John Amanatides of York University in Canada contributed the function -`mpz_probab_prime_p'. - - Paul Zimmermann wrote the REDC-based mpz_powm code, the -Scho"nhage-Strassen FFT multiply code, and the Karatsuba square root -code. He also improved the Toom3 code for GMP 4.2. Paul sparked the -development of GMP 2, with his comparisons between bignum packages. -The ECMNET project Paul is organizing was a driving force behind many -of the optimizations in GMP 3. Paul also wrote the new GMP 4.3 nth -root code (with Torbjo"rn). - - Ken Weber (Kent State University, Universidade Federal do Rio Grande -do Sul) contributed now defunct versions of `mpz_gcd', `mpz_divexact', -`mpn_gcd', and `mpn_bdivmod', partially supported by CNPq (Brazil) -grant 301314194-2. - - Per Bothner of Cygnus Support helped to set up GMP to use Cygnus' -configure. He has also made valuable suggestions and tested numerous -intermediary releases. - - Joachim Hollman was involved in the design of the `mpf' interface, -and in the `mpz' design revisions for version 2. - - Bennet Yee contributed the initial versions of `mpz_jacobi' and -`mpz_legendre'. - - Andreas Schwab contributed the files `mpn/m68k/lshift.S' and -`mpn/m68k/rshift.S' (now in `.asm' form). - - Robert Harley of Inria, France and David Seal of ARM, England, -suggested clever improvements for population count. Robert also wrote -highly optimized Karatsuba and 3-way Toom multiplication functions for -GMP 3, and contributed the ARM assembly code. - - Torsten Ekedahl of the Mathematical department of Stockholm -University provided significant inspiration during several phases of -the GMP development. His mathematical expertise helped improve several -algorithms. - - Linus Nordberg wrote the new configure system based on autoconf and -implemented the new random functions. - - Kevin Ryde worked on a large number of things: optimized x86 code, -m4 asm macros, parameter tuning, speed measuring, the configure system, -function inlining, divisibility tests, bit scanning, Jacobi symbols, -Fibonacci and Lucas number functions, printf and scanf functions, perl -interface, demo expression parser, the algorithms chapter in the -manual, `gmpasm-mode.el', and various miscellaneous improvements -elsewhere. - - Kent Boortz made the Mac OS 9 port. - - Steve Root helped write the optimized alpha 21264 assembly code. - - Gerardo Ballabio wrote the `gmpxx.h' C++ class interface and the C++ -`istream' input routines. - - Jason Moxham rewrote `mpz_fac_ui'. - - Pedro Gimeno implemented the Mersenne Twister and made other random -number improvements. - - Niels Mo"ller wrote the sub-quadratic GCD and extended GCD code, the -quadratic Hensel division code, and (with Torbjo"rn) the new divide and -conquer division code for GMP 4.3. Niels also helped implement the new -Toom multiply code for GMP 4.3 and implemented helper functions to -simplify Toom evaluations for GMP 5.0. He wrote the original version -of mpn_mulmod_bnm1. - - Alberto Zanoni and Marco Bodrato suggested the unbalanced multiply -strategy, and found the optimal strategies for evaluation and -interpolation in Toom multiplication. - - Marco Bodrato helped implement the new Toom multiply code for GMP -4.3 and implemented most of the new Toom multiply and squaring code for -5.0. He is the main author of the current mpn_mulmod_bnm1 and -mpn_mullo_n. Marco also wrote the functions mpn_invert and -mpn_invertappr. - - David Harvey suggested the internal function `mpn_bdiv_dbm1', -implementing division relevant to Toom multiplication. He also worked -on fast assembly sequences, in particular on a fast AMD64 -`mpn_mul_basecase'. - - Martin Boij wrote `mpn_perfect_power_p'. - - (This list is chronological, not ordered after significance. If you -have contributed to GMP but are not listed above, please tell - about the omission!) - - The development of floating point functions of GNU MP 2, were -supported in part by the ESPRIT-BRA (Basic Research Activities) 6846 -project POSSO (POlynomial System SOlving). - - The development of GMP 2, 3, and 4 was supported in part by the IDA -Center for Computing Sciences. - - Thanks go to Hans Thorsen for donating an SGI system for the GMP -test system environment. - - -File: gmp.info, Node: References, Next: GNU Free Documentation License, Prev: Contributors, Up: Top - -Appendix B References -********************* - -B.1 Books -========= - - * Jonathan M. Borwein and Peter B. Borwein, "Pi and the AGM: A Study - in Analytic Number Theory and Computational Complexity", Wiley, - 1998. - - * Richard Crandall and Carl Pomerance, "Prime Numbers: A - Computational Perspective", 2nd edition, Springer-Verlag, 2005. - `http://math.dartmouth.edu/~carlp/' - - * Henri Cohen, "A Course in Computational Algebraic Number Theory", - Graduate Texts in Mathematics number 138, Springer-Verlag, 1993. - `http://www.math.u-bordeaux.fr/~cohen/' - - * Donald E. Knuth, "The Art of Computer Programming", volume 2, - "Seminumerical Algorithms", 3rd edition, Addison-Wesley, 1998. - `http://www-cs-faculty.stanford.edu/~knuth/taocp.html' - - * John D. Lipson, "Elements of Algebra and Algebraic Computing", The - Benjamin Cummings Publishing Company Inc, 1981. - - * Alfred J. Menezes, Paul C. van Oorschot and Scott A. Vanstone, - "Handbook of Applied Cryptography", - `http://www.cacr.math.uwaterloo.ca/hac/' - - * Richard M. Stallman and the GCC Developer Community, "Using the - GNU Compiler Collection", Free Software Foundation, 2008, - available online `http://gcc.gnu.org/onlinedocs/', and in the GCC - package `ftp://ftp.gnu.org/gnu/gcc/' - -B.2 Papers -========== - - * Yves Bertot, Nicolas Magaud and Paul Zimmermann, "A Proof of GMP - Square Root", Journal of Automated Reasoning, volume 29, 2002, pp. - 225-252. Also available online as INRIA Research Report 4475, - June 2001, `http://www.inria.fr/rrrt/rr-4475.html' - - * Christoph Burnikel and Joachim Ziegler, "Fast Recursive Division", - Max-Planck-Institut fuer Informatik Research Report MPI-I-98-1-022, - `http://data.mpi-sb.mpg.de/internet/reports.nsf/NumberView/1998-1-022' - - * Torbjo"rn Granlund and Peter L. Montgomery, "Division by Invariant - Integers using Multiplication", in Proceedings of the SIGPLAN - PLDI'94 Conference, June 1994. Also available - `ftp://ftp.cwi.nl/pub/pmontgom/divcnst.psa4.gz' (and .psl.gz). - - * Niels Mo"ller and Torbjo"rn Granlund, "Improved division by - invariant integers", to appear. - - * Torbjo"rn Granlund and Niels Mo"ller, "Division of integers large - and small", to appear. - - * Tudor Jebelean, "An algorithm for exact division", Journal of - Symbolic Computation, volume 15, 1993, pp. 169-180. Research - report version available - `ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1992/92-35.ps.gz' - - * Tudor Jebelean, "Exact Division with Karatsuba Complexity - - Extended Abstract", RISC-Linz technical report 96-31, - `ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1996/96-31.ps.gz' - - * Tudor Jebelean, "Practical Integer Division with Karatsuba - Complexity", ISSAC 97, pp. 339-341. Technical report available - `ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1996/96-29.ps.gz' - - * Tudor Jebelean, "A Generalization of the Binary GCD Algorithm", - ISSAC 93, pp. 111-116. Technical report version available - `ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1993/93-01.ps.gz' - - * Tudor Jebelean, "A Double-Digit Lehmer-Euclid Algorithm for - Finding the GCD of Long Integers", Journal of Symbolic - Computation, volume 19, 1995, pp. 145-157. Technical report - version also available - `ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1992/92-69.ps.gz' - - * Werner Krandick and Tudor Jebelean, "Bidirectional Exact Integer - Division", Journal of Symbolic Computation, volume 21, 1996, pp. - 441-455. Early technical report version also available - `ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1994/94-50.ps.gz' - - * Makoto Matsumoto and Takuji Nishimura, "Mersenne Twister: A - 623-dimensionally equidistributed uniform pseudorandom number - generator", ACM Transactions on Modelling and Computer Simulation, - volume 8, January 1998, pp. 3-30. Available online - `http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/ARTICLES/mt.ps.gz' - (or .pdf) - - * R. Moenck and A. Borodin, "Fast Modular Transforms via Division", - Proceedings of the 13th Annual IEEE Symposium on Switching and - Automata Theory, October 1972, pp. 90-96. Reprinted as "Fast - Modular Transforms", Journal of Computer and System Sciences, - volume 8, number 3, June 1974, pp. 366-386. - - * Niels Mo"ller, "On Scho"nhage's algorithm and subquadratic integer - GCD computation", in Mathematics of Computation, volume 77, - January 2008, pp. 589-607. - - * Peter L. Montgomery, "Modular Multiplication Without Trial - Division", in Mathematics of Computation, volume 44, number 170, - April 1985. - - * Arnold Scho"nhage and Volker Strassen, "Schnelle Multiplikation - grosser Zahlen", Computing 7, 1971, pp. 281-292. - - * Kenneth Weber, "The accelerated integer GCD algorithm", ACM - Transactions on Mathematical Software, volume 21, number 1, March - 1995, pp. 111-122. - - * Paul Zimmermann, "Karatsuba Square Root", INRIA Research Report - 3805, November 1999, `http://www.inria.fr/rrrt/rr-3805.html' - - * Paul Zimmermann, "A Proof of GMP Fast Division and Square Root - Implementations", - `http://www.loria.fr/~zimmerma/papers/proof-div-sqrt.ps.gz' - - * Dan Zuras, "On Squaring and Multiplying Large Integers", ARITH-11: - IEEE Symposium on Computer Arithmetic, 1993, pp. 260 to 271. - Reprinted as "More on Multiplying and Squaring Large Integers", - IEEE Transactions on Computers, volume 43, number 8, August 1994, - pp. 899-908. - - -File: gmp.info, Node: GNU Free Documentation License, Next: Concept Index, Prev: References, Up: Top - -Appendix C GNU Free Documentation License -***************************************** - - Version 1.3, 3 November 2008 - - Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. - `http://fsf.org/' - - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - 0. PREAMBLE - - The purpose of this License is to make a manual, textbook, or other - functional and useful document "free" in the sense of freedom: to - assure everyone the effective freedom to copy and redistribute it, - with or without modifying it, either commercially or - noncommercially. Secondarily, this License preserves for the - author and publisher a way to get credit for their work, while not - being considered responsible for modifications made by others. - - This License is a kind of "copyleft", which means that derivative - works of the document must themselves be free in the same sense. - It complements the GNU General Public License, which is a copyleft - license designed for free software. - - We have designed this License in order to use it for manuals for - free software, because free software needs free documentation: a - free program should come with manuals providing the same freedoms - that the software does. But this License is not limited to - software manuals; it can be used for any textual work, regardless - of subject matter or whether it is published as a printed book. - We recommend this License principally for works whose purpose is - instruction or reference. - - 1. APPLICABILITY AND DEFINITIONS - - This License applies to any manual or other work, in any medium, - that contains a notice placed by the copyright holder saying it - can be distributed under the terms of this License. Such a notice - grants a world-wide, royalty-free license, unlimited in duration, - to use that work under the conditions stated herein. The - "Document", below, refers to any such manual or work. Any member - of the public is a licensee, and is addressed as "you". You - accept the license if you copy, modify or distribute the work in a - way requiring permission under copyright law. - - A "Modified Version" of the Document means any work containing the - Document or a portion of it, either copied verbatim, or with - modifications and/or translated into another language. - - A "Secondary Section" is a named appendix or a front-matter section - of the Document that deals exclusively with the relationship of the - publishers or authors of the Document to the Document's overall - subject (or to related matters) and contains nothing that could - fall directly within that overall subject. (Thus, if the Document - is in part a textbook of mathematics, a Secondary Section may not - explain any mathematics.) The relationship could be a matter of - historical connection with the subject or with related matters, or - of legal, commercial, philosophical, ethical or political position - regarding them. - - The "Invariant Sections" are certain Secondary Sections whose - titles are designated, as being those of Invariant Sections, in - the notice that says that the Document is released under this - License. If a section does not fit the above definition of - Secondary then it is not allowed to be designated as Invariant. - The Document may contain zero Invariant Sections. If the Document - does not identify any Invariant Sections then there are none. - - The "Cover Texts" are certain short passages of text that are - listed, as Front-Cover Texts or Back-Cover Texts, in the notice - that says that the Document is released under this License. A - Front-Cover Text may be at most 5 words, and a Back-Cover Text may - be at most 25 words. - - A "Transparent" copy of the Document means a machine-readable copy, - represented in a format whose specification is available to the - general public, that is suitable for revising the document - straightforwardly with generic text editors or (for images - composed of pixels) generic paint programs or (for drawings) some - widely available drawing editor, and that is suitable for input to - text formatters or for automatic translation to a variety of - formats suitable for input to text formatters. A copy made in an - otherwise Transparent file format whose markup, or absence of - markup, has been arranged to thwart or discourage subsequent - modification by readers is not Transparent. An image format is - not Transparent if used for any substantial amount of text. A - copy that is not "Transparent" is called "Opaque". - - Examples of suitable formats for Transparent copies include plain - ASCII without markup, Texinfo input format, LaTeX input format, - SGML or XML using a publicly available DTD, and - standard-conforming simple HTML, PostScript or PDF designed for - human modification. Examples of transparent image formats include - PNG, XCF and JPG. Opaque formats include proprietary formats that - can be read and edited only by proprietary word processors, SGML or - XML for which the DTD and/or processing tools are not generally - available, and the machine-generated HTML, PostScript or PDF - produced by some word processors for output purposes only. - - The "Title Page" means, for a printed book, the title page itself, - plus such following pages as are needed to hold, legibly, the - material this License requires to appear in the title page. For - works in formats which do not have any title page as such, "Title - Page" means the text near the most prominent appearance of the - work's title, preceding the beginning of the body of the text. - - The "publisher" means any person or entity that distributes copies - of the Document to the public. - - A section "Entitled XYZ" means a named subunit of the Document - whose title either is precisely XYZ or contains XYZ in parentheses - following text that translates XYZ in another language. (Here XYZ - stands for a specific section name mentioned below, such as - "Acknowledgements", "Dedications", "Endorsements", or "History".) - To "Preserve the Title" of such a section when you modify the - Document means that it remains a section "Entitled XYZ" according - to this definition. - - The Document may include Warranty Disclaimers next to the notice - which states that this License applies to the Document. These - Warranty Disclaimers are considered to be included by reference in - this License, but only as regards disclaiming warranties: any other - implication that these Warranty Disclaimers may have is void and - has no effect on the meaning of this License. - - 2. VERBATIM COPYING - - You may copy and distribute the Document in any medium, either - commercially or noncommercially, provided that this License, the - copyright notices, and the license notice saying this License - applies to the Document are reproduced in all copies, and that you - add no other conditions whatsoever to those of this License. You - may not use technical measures to obstruct or control the reading - or further copying of the copies you make or distribute. However, - you may accept compensation in exchange for copies. If you - distribute a large enough number of copies you must also follow - the conditions in section 3. - - You may also lend copies, under the same conditions stated above, - and you may publicly display copies. - - 3. COPYING IN QUANTITY - - If you publish printed copies (or copies in media that commonly - have printed covers) of the Document, numbering more than 100, and - the Document's license notice requires Cover Texts, you must - enclose the copies in covers that carry, clearly and legibly, all - these Cover Texts: Front-Cover Texts on the front cover, and - Back-Cover Texts on the back cover. Both covers must also clearly - and legibly identify you as the publisher of these copies. The - front cover must present the full title with all words of the - title equally prominent and visible. You may add other material - on the covers in addition. Copying with changes limited to the - covers, as long as they preserve the title of the Document and - satisfy these conditions, can be treated as verbatim copying in - other respects. - - If the required texts for either cover are too voluminous to fit - legibly, you should put the first ones listed (as many as fit - reasonably) on the actual cover, and continue the rest onto - adjacent pages. - - If you publish or distribute Opaque copies of the Document - numbering more than 100, you must either include a - machine-readable Transparent copy along with each Opaque copy, or - state in or with each Opaque copy a computer-network location from - which the general network-using public has access to download - using public-standard network protocols a complete Transparent - copy of the Document, free of added material. If you use the - latter option, you must take reasonably prudent steps, when you - begin distribution of Opaque copies in quantity, to ensure that - this Transparent copy will remain thus accessible at the stated - location until at least one year after the last time you - distribute an Opaque copy (directly or through your agents or - retailers) of that edition to the public. - - It is requested, but not required, that you contact the authors of - the Document well before redistributing any large number of - copies, to give them a chance to provide you with an updated - version of the Document. - - 4. MODIFICATIONS - - You may copy and distribute a Modified Version of the Document - under the conditions of sections 2 and 3 above, provided that you - release the Modified Version under precisely this License, with - the Modified Version filling the role of the Document, thus - licensing distribution and modification of the Modified Version to - whoever possesses a copy of it. In addition, you must do these - things in the Modified Version: - - A. Use in the Title Page (and on the covers, if any) a title - distinct from that of the Document, and from those of - previous versions (which should, if there were any, be listed - in the History section of the Document). You may use the - same title as a previous version if the original publisher of - that version gives permission. - - B. List on the Title Page, as authors, one or more persons or - entities responsible for authorship of the modifications in - the Modified Version, together with at least five of the - principal authors of the Document (all of its principal - authors, if it has fewer than five), unless they release you - from this requirement. - - C. State on the Title page the name of the publisher of the - Modified Version, as the publisher. - - D. Preserve all the copyright notices of the Document. - - E. Add an appropriate copyright notice for your modifications - adjacent to the other copyright notices. - - F. Include, immediately after the copyright notices, a license - notice giving the public permission to use the Modified - Version under the terms of this License, in the form shown in - the Addendum below. - - G. Preserve in that license notice the full lists of Invariant - Sections and required Cover Texts given in the Document's - license notice. - - H. Include an unaltered copy of this License. - - I. Preserve the section Entitled "History", Preserve its Title, - and add to it an item stating at least the title, year, new - authors, and publisher of the Modified Version as given on - the Title Page. If there is no section Entitled "History" in - the Document, create one stating the title, year, authors, - and publisher of the Document as given on its Title Page, - then add an item describing the Modified Version as stated in - the previous sentence. - - J. Preserve the network location, if any, given in the Document - for public access to a Transparent copy of the Document, and - likewise the network locations given in the Document for - previous versions it was based on. These may be placed in - the "History" section. You may omit a network location for a - work that was published at least four years before the - Document itself, or if the original publisher of the version - it refers to gives permission. - - K. For any section Entitled "Acknowledgements" or "Dedications", - Preserve the Title of the section, and preserve in the - section all the substance and tone of each of the contributor - acknowledgements and/or dedications given therein. - - L. Preserve all the Invariant Sections of the Document, - unaltered in their text and in their titles. Section numbers - or the equivalent are not considered part of the section - titles. - - M. Delete any section Entitled "Endorsements". Such a section - may not be included in the Modified Version. - - N. Do not retitle any existing section to be Entitled - "Endorsements" or to conflict in title with any Invariant - Section. - - O. Preserve any Warranty Disclaimers. - - If the Modified Version includes new front-matter sections or - appendices that qualify as Secondary Sections and contain no - material copied from the Document, you may at your option - designate some or all of these sections as invariant. To do this, - add their titles to the list of Invariant Sections in the Modified - Version's license notice. These titles must be distinct from any - other section titles. - - You may add a section Entitled "Endorsements", provided it contains - nothing but endorsements of your Modified Version by various - parties--for example, statements of peer review or that the text - has been approved by an organization as the authoritative - definition of a standard. - - You may add a passage of up to five words as a Front-Cover Text, - and a passage of up to 25 words as a Back-Cover Text, to the end - of the list of Cover Texts in the Modified Version. Only one - passage of Front-Cover Text and one of Back-Cover Text may be - added by (or through arrangements made by) any one entity. If the - Document already includes a cover text for the same cover, - previously added by you or by arrangement made by the same entity - you are acting on behalf of, you may not add another; but you may - replace the old one, on explicit permission from the previous - publisher that added the old one. - - The author(s) and publisher(s) of the Document do not by this - License give permission to use their names for publicity for or to - assert or imply endorsement of any Modified Version. - - 5. COMBINING DOCUMENTS - - You may combine the Document with other documents released under - this License, under the terms defined in section 4 above for - modified versions, provided that you include in the combination - all of the Invariant Sections of all of the original documents, - unmodified, and list them all as Invariant Sections of your - combined work in its license notice, and that you preserve all - their Warranty Disclaimers. - - The combined work need only contain one copy of this License, and - multiple identical Invariant Sections may be replaced with a single - copy. If there are multiple Invariant Sections with the same name - but different contents, make the title of each such section unique - by adding at the end of it, in parentheses, the name of the - original author or publisher of that section if known, or else a - unique number. Make the same adjustment to the section titles in - the list of Invariant Sections in the license notice of the - combined work. - - In the combination, you must combine any sections Entitled - "History" in the various original documents, forming one section - Entitled "History"; likewise combine any sections Entitled - "Acknowledgements", and any sections Entitled "Dedications". You - must delete all sections Entitled "Endorsements." - - 6. COLLECTIONS OF DOCUMENTS - - You may make a collection consisting of the Document and other - documents released under this License, and replace the individual - copies of this License in the various documents with a single copy - that is included in the collection, provided that you follow the - rules of this License for verbatim copying of each of the - documents in all other respects. - - You may extract a single document from such a collection, and - distribute it individually under this License, provided you insert - a copy of this License into the extracted document, and follow - this License in all other respects regarding verbatim copying of - that document. - - 7. AGGREGATION WITH INDEPENDENT WORKS - - A compilation of the Document or its derivatives with other - separate and independent documents or works, in or on a volume of - a storage or distribution medium, is called an "aggregate" if the - copyright resulting from the compilation is not used to limit the - legal rights of the compilation's users beyond what the individual - works permit. When the Document is included in an aggregate, this - License does not apply to the other works in the aggregate which - are not themselves derivative works of the Document. - - If the Cover Text requirement of section 3 is applicable to these - copies of the Document, then if the Document is less than one half - of the entire aggregate, the Document's Cover Texts may be placed - on covers that bracket the Document within the aggregate, or the - electronic equivalent of covers if the Document is in electronic - form. Otherwise they must appear on printed covers that bracket - the whole aggregate. - - 8. TRANSLATION - - Translation is considered a kind of modification, so you may - distribute translations of the Document under the terms of section - 4. Replacing Invariant Sections with translations requires special - permission from their copyright holders, but you may include - translations of some or all Invariant Sections in addition to the - original versions of these Invariant Sections. You may include a - translation of this License, and all the license notices in the - Document, and any Warranty Disclaimers, provided that you also - include the original English version of this License and the - original versions of those notices and disclaimers. In case of a - disagreement between the translation and the original version of - this License or a notice or disclaimer, the original version will - prevail. - - If a section in the Document is Entitled "Acknowledgements", - "Dedications", or "History", the requirement (section 4) to - Preserve its Title (section 1) will typically require changing the - actual title. - - 9. TERMINATION - - You may not copy, modify, sublicense, or distribute the Document - except as expressly provided under this License. Any attempt - otherwise to copy, modify, sublicense, or distribute it is void, - and will automatically terminate your rights under this License. - - However, if you cease all violation of this License, then your - license from a particular copyright holder is reinstated (a) - provisionally, unless and until the copyright holder explicitly - and finally terminates your license, and (b) permanently, if the - copyright holder fails to notify you of the violation by some - reasonable means prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is - reinstated permanently if the copyright holder notifies you of the - violation by some reasonable means, this is the first time you have - received notice of violation of this License (for any work) from - that copyright holder, and you cure the violation prior to 30 days - after your receipt of the notice. - - Termination of your rights under this section does not terminate - the licenses of parties who have received copies or rights from - you under this License. If your rights have been terminated and - not permanently reinstated, receipt of a copy of some or all of - the same material does not give you any rights to use it. - - 10. FUTURE REVISIONS OF THIS LICENSE - - The Free Software Foundation may publish new, revised versions of - the GNU Free Documentation License from time to time. Such new - versions will be similar in spirit to the present version, but may - differ in detail to address new problems or concerns. See - `http://www.gnu.org/copyleft/'. - - Each version of the License is given a distinguishing version - number. If the Document specifies that a particular numbered - version of this License "or any later version" applies to it, you - have the option of following the terms and conditions either of - that specified version or of any later version that has been - published (not as a draft) by the Free Software Foundation. If - the Document does not specify a version number of this License, - you may choose any version ever published (not as a draft) by the - Free Software Foundation. If the Document specifies that a proxy - can decide which future versions of this License can be used, that - proxy's public statement of acceptance of a version permanently - authorizes you to choose that version for the Document. - - 11. RELICENSING - - "Massive Multiauthor Collaboration Site" (or "MMC Site") means any - World Wide Web server that publishes copyrightable works and also - provides prominent facilities for anybody to edit those works. A - public wiki that anybody can edit is an example of such a server. - A "Massive Multiauthor Collaboration" (or "MMC") contained in the - site means any set of copyrightable works thus published on the MMC - site. - - "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 - license published by Creative Commons Corporation, a not-for-profit - corporation with a principal place of business in San Francisco, - California, as well as future copyleft versions of that license - published by that same organization. - - "Incorporate" means to publish or republish a Document, in whole or - in part, as part of another Document. - - An MMC is "eligible for relicensing" if it is licensed under this - License, and if all works that were first published under this - License somewhere other than this MMC, and subsequently - incorporated in whole or in part into the MMC, (1) had no cover - texts or invariant sections, and (2) were thus incorporated prior - to November 1, 2008. - - The operator of an MMC Site may republish an MMC contained in the - site under CC-BY-SA on the same site at any time before August 1, - 2009, provided the MMC is eligible for relicensing. - - -ADDENDUM: How to use this License for your documents -==================================================== - -To use this License in a document you have written, include a copy of -the License in the document and put the following copyright and license -notices just after the title page: - - Copyright (C) YEAR YOUR NAME. - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.3 - or any later version published by the Free Software Foundation; - with no Invariant Sections, no Front-Cover Texts, and no Back-Cover - Texts. A copy of the license is included in the section entitled ``GNU - Free Documentation License''. - - If you have Invariant Sections, Front-Cover Texts and Back-Cover -Texts, replace the "with...Texts." line with this: - - with the Invariant Sections being LIST THEIR TITLES, with - the Front-Cover Texts being LIST, and with the Back-Cover Texts - being LIST. - - If you have Invariant Sections without Cover Texts, or some other -combination of the three, merge those two alternatives to suit the -situation. - - If your document contains nontrivial examples of program code, we -recommend releasing these examples in parallel under your choice of -free software license, such as the GNU General Public License, to -permit their use in free software. - - -File: gmp.info, Node: Concept Index, Next: Function Index, Prev: GNU Free Documentation License, Up: Top - -Concept Index -************* - -[index] -* Menu: - -* #include: Headers and Libraries. - (line 6) -* --build: Build Options. (line 52) -* --disable-fft: Build Options. (line 317) -* --disable-shared: Build Options. (line 45) -* --disable-static: Build Options. (line 45) -* --enable-alloca: Build Options. (line 278) -* --enable-assert: Build Options. (line 327) -* --enable-cxx: Build Options. (line 230) -* --enable-fat: Build Options. (line 164) -* --enable-mpbsd: Build Options. (line 322) -* --enable-profiling <1>: Profiling. (line 6) -* --enable-profiling: Build Options. (line 331) -* --exec-prefix: Build Options. (line 32) -* --host: Build Options. (line 66) -* --prefix: Build Options. (line 32) -* -finstrument-functions: Profiling. (line 66) -* 2exp functions: Efficiency. (line 43) -* 68000: Notes for Particular Systems. - (line 80) -* 80x86: Notes for Particular Systems. - (line 126) -* ABI <1>: Build Options. (line 171) -* ABI: ABI and ISA. (line 6) -* About this manual: Introduction to GMP. (line 58) -* AC_CHECK_LIB: Autoconf. (line 11) -* AIX <1>: ABI and ISA. (line 184) -* AIX <2>: Notes for Particular Systems. - (line 7) -* AIX: ABI and ISA. (line 169) -* Algorithms: Algorithms. (line 6) -* alloca: Build Options. (line 278) -* Allocation of memory: Custom Allocation. (line 6) -* AMD64: ABI and ISA. (line 44) -* Anonymous FTP of latest version: Introduction to GMP. (line 38) -* Application Binary Interface: ABI and ISA. (line 6) -* Arithmetic functions <1>: Float Arithmetic. (line 6) -* Arithmetic functions <2>: Integer Arithmetic. (line 6) -* Arithmetic functions: Rational Arithmetic. (line 6) -* ARM: Notes for Particular Systems. - (line 20) -* Assembly cache handling: Assembly Cache Handling. - (line 6) -* Assembly carry propagation: Assembly Carry Propagation. - (line 6) -* Assembly code organisation: Assembly Code Organisation. - (line 6) -* Assembly coding: Assembly Coding. (line 6) -* Assembly floating Point: Assembly Floating Point. - (line 6) -* Assembly loop unrolling: Assembly Loop Unrolling. - (line 6) -* Assembly SIMD: Assembly SIMD Instructions. - (line 6) -* Assembly software pipelining: Assembly Software Pipelining. - (line 6) -* Assembly writing guide: Assembly Writing Guide. - (line 6) -* Assertion checking <1>: Debugging. (line 79) -* Assertion checking: Build Options. (line 327) -* Assignment functions <1>: Assigning Floats. (line 6) -* Assignment functions <2>: Initializing Rationals. - (line 6) -* Assignment functions <3>: Simultaneous Integer Init & Assign. - (line 6) -* Assignment functions <4>: Simultaneous Float Init & Assign. - (line 6) -* Assignment functions: Assigning Integers. (line 6) -* Autoconf: Autoconf. (line 6) -* Basics: GMP Basics. (line 6) -* Berkeley MP compatible functions <1>: Build Options. (line 322) -* Berkeley MP compatible functions: BSD Compatible Functions. - (line 6) -* Binomial coefficient algorithm: Binomial Coefficients Algorithm. - (line 6) -* Binomial coefficient functions: Number Theoretic Functions. - (line 100) -* Binutils strip: Known Build Problems. - (line 28) -* Bit manipulation functions: Integer Logic and Bit Fiddling. - (line 6) -* Bit scanning functions: Integer Logic and Bit Fiddling. - (line 38) -* Bit shift left: Integer Arithmetic. (line 35) -* Bit shift right: Integer Division. (line 53) -* Bits per limb: Useful Macros and Constants. - (line 7) -* BSD MP compatible functions <1>: Build Options. (line 322) -* BSD MP compatible functions: BSD Compatible Functions. - (line 6) -* Bug reporting: Reporting Bugs. (line 6) -* Build directory: Build Options. (line 19) -* Build notes for binary packaging: Notes for Package Builds. - (line 6) -* Build notes for particular systems: Notes for Particular Systems. - (line 6) -* Build options: Build Options. (line 6) -* Build problems known: Known Build Problems. - (line 6) -* Build system: Build Options. (line 52) -* Building GMP: Installing GMP. (line 6) -* Bus error: Debugging. (line 7) -* C compiler: Build Options. (line 182) -* C++ compiler: Build Options. (line 254) -* C++ interface: C++ Class Interface. (line 6) -* C++ interface internals: C++ Interface Internals. - (line 6) -* C++ istream input: C++ Formatted Input. (line 6) -* C++ ostream output: C++ Formatted Output. - (line 6) -* C++ support: Build Options. (line 230) -* CC: Build Options. (line 182) -* CC_FOR_BUILD: Build Options. (line 217) -* CFLAGS: Build Options. (line 182) -* Checker: Debugging. (line 115) -* checkergcc: Debugging. (line 122) -* Code organisation: Assembly Code Organisation. - (line 6) -* Compaq C++: Notes for Particular Systems. - (line 25) -* Comparison functions <1>: Integer Comparisons. (line 6) -* Comparison functions <2>: Comparing Rationals. (line 6) -* Comparison functions: Float Comparison. (line 6) -* Compatibility with older versions: Compatibility with older versions. - (line 6) -* Conditions for copying GNU MP: Copying. (line 6) -* Configuring GMP: Installing GMP. (line 6) -* Congruence algorithm: Exact Remainder. (line 29) -* Congruence functions: Integer Division. (line 124) -* Constants: Useful Macros and Constants. - (line 6) -* Contributors: Contributors. (line 6) -* Conventions for parameters: Parameter Conventions. - (line 6) -* Conventions for variables: Variable Conventions. - (line 6) -* Conversion functions <1>: Converting Integers. (line 6) -* Conversion functions <2>: Converting Floats. (line 6) -* Conversion functions: Rational Conversions. - (line 6) -* Copying conditions: Copying. (line 6) -* CPPFLAGS: Build Options. (line 208) -* CPU types <1>: Introduction to GMP. (line 24) -* CPU types: Build Options. (line 108) -* Cross compiling: Build Options. (line 66) -* Custom allocation: Custom Allocation. (line 6) -* CXX: Build Options. (line 254) -* CXXFLAGS: Build Options. (line 254) -* Cygwin: Notes for Particular Systems. - (line 43) -* Darwin: Known Build Problems. - (line 51) -* Debugging: Debugging. (line 6) -* Demonstration programs: Demonstration Programs. - (line 6) -* Digits in an integer: Miscellaneous Integer Functions. - (line 23) -* Divisibility algorithm: Exact Remainder. (line 29) -* Divisibility functions: Integer Division. (line 124) -* Divisibility testing: Efficiency. (line 91) -* Division algorithms: Division Algorithms. (line 6) -* Division functions <1>: Rational Arithmetic. (line 22) -* Division functions <2>: Integer Division. (line 6) -* Division functions: Float Arithmetic. (line 33) -* DJGPP <1>: Notes for Particular Systems. - (line 43) -* DJGPP: Known Build Problems. - (line 18) -* DLLs: Notes for Particular Systems. - (line 56) -* DocBook: Build Options. (line 354) -* Documentation formats: Build Options. (line 347) -* Documentation license: GNU Free Documentation License. - (line 6) -* DVI: Build Options. (line 350) -* Efficiency: Efficiency. (line 6) -* Emacs: Emacs. (line 6) -* Exact division functions: Integer Division. (line 102) -* Exact remainder: Exact Remainder. (line 6) -* Example programs: Demonstration Programs. - (line 6) -* Exec prefix: Build Options. (line 32) -* Execution profiling <1>: Profiling. (line 6) -* Execution profiling: Build Options. (line 331) -* Exponentiation functions <1>: Integer Exponentiation. - (line 6) -* Exponentiation functions: Float Arithmetic. (line 41) -* Export: Integer Import and Export. - (line 45) -* Expression parsing demo: Demonstration Programs. - (line 18) -* Extended GCD: Number Theoretic Functions. - (line 45) -* Factor removal functions: Number Theoretic Functions. - (line 90) -* Factorial algorithm: Factorial Algorithm. (line 6) -* Factorial functions: Number Theoretic Functions. - (line 95) -* Factorization demo: Demonstration Programs. - (line 25) -* Fast Fourier Transform: FFT Multiplication. (line 6) -* Fat binary: Build Options. (line 164) -* FFT multiplication <1>: FFT Multiplication. (line 6) -* FFT multiplication: Build Options. (line 317) -* Fibonacci number algorithm: Fibonacci Numbers Algorithm. - (line 6) -* Fibonacci sequence functions: Number Theoretic Functions. - (line 108) -* Float arithmetic functions: Float Arithmetic. (line 6) -* Float assignment functions <1>: Simultaneous Float Init & Assign. - (line 6) -* Float assignment functions: Assigning Floats. (line 6) -* Float comparison functions: Float Comparison. (line 6) -* Float conversion functions: Converting Floats. (line 6) -* Float functions: Floating-point Functions. - (line 6) -* Float initialization functions <1>: Simultaneous Float Init & Assign. - (line 6) -* Float initialization functions: Initializing Floats. (line 6) -* Float input and output functions: I/O of Floats. (line 6) -* Float internals: Float Internals. (line 6) -* Float miscellaneous functions: Miscellaneous Float Functions. - (line 6) -* Float random number functions: Miscellaneous Float Functions. - (line 27) -* Float rounding functions: Miscellaneous Float Functions. - (line 9) -* Float sign tests: Float Comparison. (line 33) -* Floating point mode: Notes for Particular Systems. - (line 34) -* Floating-point functions: Floating-point Functions. - (line 6) -* Floating-point number: Nomenclature and Types. - (line 21) -* fnccheck: Profiling. (line 77) -* Formatted input: Formatted Input. (line 6) -* Formatted output: Formatted Output. (line 6) -* Free Documentation License: GNU Free Documentation License. - (line 6) -* frexp <1>: Converting Floats. (line 23) -* frexp: Converting Integers. (line 42) -* FTP of latest version: Introduction to GMP. (line 38) -* Function classes: Function Classes. (line 6) -* FunctionCheck: Profiling. (line 77) -* GCC Checker: Debugging. (line 115) -* GCD algorithms: Greatest Common Divisor Algorithms. - (line 6) -* GCD extended: Number Theoretic Functions. - (line 45) -* GCD functions: Number Theoretic Functions. - (line 30) -* GDB: Debugging. (line 58) -* Generic C: Build Options. (line 153) -* GMP Perl module: Demonstration Programs. - (line 35) -* GMP version number: Useful Macros and Constants. - (line 12) -* gmp.h: Headers and Libraries. - (line 6) -* gmpxx.h: C++ Interface General. - (line 8) -* GNU Debugger: Debugging. (line 58) -* GNU Free Documentation License: GNU Free Documentation License. - (line 6) -* GNU strip: Known Build Problems. - (line 28) -* gprof: Profiling. (line 41) -* Greatest common divisor algorithms: Greatest Common Divisor Algorithms. - (line 6) -* Greatest common divisor functions: Number Theoretic Functions. - (line 30) -* Hardware floating point mode: Notes for Particular Systems. - (line 34) -* Headers: Headers and Libraries. - (line 6) -* Heap problems: Debugging. (line 24) -* Home page: Introduction to GMP. (line 34) -* Host system: Build Options. (line 66) -* HP-UX: ABI and ISA. (line 107) -* HPPA: ABI and ISA. (line 68) -* I/O functions <1>: I/O of Integers. (line 6) -* I/O functions <2>: I/O of Rationals. (line 6) -* I/O functions: I/O of Floats. (line 6) -* i386: Notes for Particular Systems. - (line 126) -* IA-64: ABI and ISA. (line 107) -* Import: Integer Import and Export. - (line 11) -* In-place operations: Efficiency. (line 57) -* Include files: Headers and Libraries. - (line 6) -* info-lookup-symbol: Emacs. (line 6) -* Initialization functions <1>: Initializing Integers. - (line 6) -* Initialization functions <2>: Initializing Rationals. - (line 6) -* Initialization functions <3>: Random State Initialization. - (line 6) -* Initialization functions <4>: Simultaneous Float Init & Assign. - (line 6) -* Initialization functions <5>: Simultaneous Integer Init & Assign. - (line 6) -* Initialization functions: Initializing Floats. (line 6) -* Initializing and clearing: Efficiency. (line 21) -* Input functions <1>: I/O of Integers. (line 6) -* Input functions <2>: I/O of Rationals. (line 6) -* Input functions <3>: I/O of Floats. (line 6) -* Input functions: Formatted Input Functions. - (line 6) -* Install prefix: Build Options. (line 32) -* Installing GMP: Installing GMP. (line 6) -* Instruction Set Architecture: ABI and ISA. (line 6) -* instrument-functions: Profiling. (line 66) -* Integer: Nomenclature and Types. - (line 6) -* Integer arithmetic functions: Integer Arithmetic. (line 6) -* Integer assignment functions <1>: Simultaneous Integer Init & Assign. - (line 6) -* Integer assignment functions: Assigning Integers. (line 6) -* Integer bit manipulation functions: Integer Logic and Bit Fiddling. - (line 6) -* Integer comparison functions: Integer Comparisons. (line 6) -* Integer conversion functions: Converting Integers. (line 6) -* Integer division functions: Integer Division. (line 6) -* Integer exponentiation functions: Integer Exponentiation. - (line 6) -* Integer export: Integer Import and Export. - (line 45) -* Integer functions: Integer Functions. (line 6) -* Integer import: Integer Import and Export. - (line 11) -* Integer initialization functions <1>: Simultaneous Integer Init & Assign. - (line 6) -* Integer initialization functions: Initializing Integers. - (line 6) -* Integer input and output functions: I/O of Integers. (line 6) -* Integer internals: Integer Internals. (line 6) -* Integer logical functions: Integer Logic and Bit Fiddling. - (line 6) -* Integer miscellaneous functions: Miscellaneous Integer Functions. - (line 6) -* Integer random number functions: Integer Random Numbers. - (line 6) -* Integer root functions: Integer Roots. (line 6) -* Integer sign tests: Integer Comparisons. (line 28) -* Integer special functions: Integer Special Functions. - (line 6) -* Interix: Notes for Particular Systems. - (line 51) -* Internals: Internals. (line 6) -* Introduction: Introduction to GMP. (line 6) -* Inverse modulo functions: Number Theoretic Functions. - (line 60) -* IRIX <1>: Known Build Problems. - (line 38) -* IRIX: ABI and ISA. (line 132) -* ISA: ABI and ISA. (line 6) -* istream input: C++ Formatted Input. (line 6) -* Jacobi symbol algorithm: Jacobi Symbol. (line 6) -* Jacobi symbol functions: Number Theoretic Functions. - (line 66) -* Karatsuba multiplication: Karatsuba Multiplication. - (line 6) -* Karatsuba square root algorithm: Square Root Algorithm. - (line 6) -* Kronecker symbol functions: Number Theoretic Functions. - (line 78) -* Language bindings: Language Bindings. (line 6) -* Latest version of GMP: Introduction to GMP. (line 38) -* LCM functions: Number Theoretic Functions. - (line 55) -* Least common multiple functions: Number Theoretic Functions. - (line 55) -* Legendre symbol functions: Number Theoretic Functions. - (line 69) -* libgmp: Headers and Libraries. - (line 22) -* libgmpxx: Headers and Libraries. - (line 27) -* Libraries: Headers and Libraries. - (line 22) -* Libtool: Headers and Libraries. - (line 33) -* Libtool versioning: Notes for Package Builds. - (line 9) -* License conditions: Copying. (line 6) -* Limb: Nomenclature and Types. - (line 31) -* Limb size: Useful Macros and Constants. - (line 7) -* Linear congruential algorithm: Random Number Algorithms. - (line 25) -* Linear congruential random numbers: Random State Initialization. - (line 32) -* Linking: Headers and Libraries. - (line 22) -* Logical functions: Integer Logic and Bit Fiddling. - (line 6) -* Low-level functions: Low-level Functions. (line 6) -* Lucas number algorithm: Lucas Numbers Algorithm. - (line 6) -* Lucas number functions: Number Theoretic Functions. - (line 119) -* MacOS X: Known Build Problems. - (line 51) -* Mailing lists: Introduction to GMP. (line 45) -* Malloc debugger: Debugging. (line 30) -* Malloc problems: Debugging. (line 24) -* Memory allocation: Custom Allocation. (line 6) -* Memory management: Memory Management. (line 6) -* Mersenne twister algorithm: Random Number Algorithms. - (line 17) -* Mersenne twister random numbers: Random State Initialization. - (line 13) -* MINGW: Notes for Particular Systems. - (line 43) -* MIPS: ABI and ISA. (line 132) -* Miscellaneous float functions: Miscellaneous Float Functions. - (line 6) -* Miscellaneous integer functions: Miscellaneous Integer Functions. - (line 6) -* MMX: Notes for Particular Systems. - (line 132) -* Modular inverse functions: Number Theoretic Functions. - (line 60) -* Most significant bit: Miscellaneous Integer Functions. - (line 34) -* mp.h: BSD Compatible Functions. - (line 21) -* MPN_PATH: Build Options. (line 335) -* MS Windows: Notes for Particular Systems. - (line 56) -* MS-DOS: Notes for Particular Systems. - (line 43) -* Multi-threading: Reentrancy. (line 6) -* Multiplication algorithms: Multiplication Algorithms. - (line 6) -* Nails: Low-level Functions. (line 478) -* Native compilation: Build Options. (line 52) -* NeXT: Known Build Problems. - (line 57) -* Next prime function: Number Theoretic Functions. - (line 23) -* Nomenclature: Nomenclature and Types. - (line 6) -* Non-Unix systems: Build Options. (line 11) -* Nth root algorithm: Nth Root Algorithm. (line 6) -* Number sequences: Efficiency. (line 147) -* Number theoretic functions: Number Theoretic Functions. - (line 6) -* Numerator and denominator: Applying Integer Functions. - (line 6) -* obstack output: Formatted Output Functions. - (line 81) -* OpenBSD: Notes for Particular Systems. - (line 86) -* Optimizing performance: Performance optimization. - (line 6) -* ostream output: C++ Formatted Output. - (line 6) -* Other languages: Language Bindings. (line 6) -* Output functions <1>: I/O of Floats. (line 6) -* Output functions <2>: I/O of Rationals. (line 6) -* Output functions <3>: Formatted Output Functions. - (line 6) -* Output functions: I/O of Integers. (line 6) -* Packaged builds: Notes for Package Builds. - (line 6) -* Parameter conventions: Parameter Conventions. - (line 6) -* Parsing expressions demo: Demonstration Programs. - (line 21) -* Particular systems: Notes for Particular Systems. - (line 6) -* Past GMP versions: Compatibility with older versions. - (line 6) -* PDF: Build Options. (line 350) -* Perfect power algorithm: Perfect Power Algorithm. - (line 6) -* Perfect power functions: Integer Roots. (line 27) -* Perfect square algorithm: Perfect Square Algorithm. - (line 6) -* Perfect square functions: Integer Roots. (line 36) -* perl: Demonstration Programs. - (line 35) -* Perl module: Demonstration Programs. - (line 35) -* Postscript: Build Options. (line 350) -* Power/PowerPC <1>: Known Build Problems. - (line 63) -* Power/PowerPC: Notes for Particular Systems. - (line 92) -* Powering algorithms: Powering Algorithms. (line 6) -* Powering functions <1>: Float Arithmetic. (line 41) -* Powering functions: Integer Exponentiation. - (line 6) -* PowerPC: ABI and ISA. (line 167) -* Precision of floats: Floating-point Functions. - (line 6) -* Precision of hardware floating point: Notes for Particular Systems. - (line 34) -* Prefix: Build Options. (line 32) -* Prime testing algorithms: Prime Testing Algorithm. - (line 6) -* Prime testing functions: Number Theoretic Functions. - (line 7) -* printf formatted output: Formatted Output. (line 6) -* Probable prime testing functions: Number Theoretic Functions. - (line 7) -* prof: Profiling. (line 24) -* Profiling: Profiling. (line 6) -* Radix conversion algorithms: Radix Conversion Algorithms. - (line 6) -* Random number algorithms: Random Number Algorithms. - (line 6) -* Random number functions <1>: Integer Random Numbers. - (line 6) -* Random number functions <2>: Miscellaneous Float Functions. - (line 27) -* Random number functions: Random Number Functions. - (line 6) -* Random number seeding: Random State Seeding. - (line 6) -* Random number state: Random State Initialization. - (line 6) -* Random state: Nomenclature and Types. - (line 46) -* Rational arithmetic: Efficiency. (line 113) -* Rational arithmetic functions: Rational Arithmetic. (line 6) -* Rational assignment functions: Initializing Rationals. - (line 6) -* Rational comparison functions: Comparing Rationals. (line 6) -* Rational conversion functions: Rational Conversions. - (line 6) -* Rational initialization functions: Initializing Rationals. - (line 6) -* Rational input and output functions: I/O of Rationals. (line 6) -* Rational internals: Rational Internals. (line 6) -* Rational number: Nomenclature and Types. - (line 16) -* Rational number functions: Rational Number Functions. - (line 6) -* Rational numerator and denominator: Applying Integer Functions. - (line 6) -* Rational sign tests: Comparing Rationals. (line 27) -* Raw output internals: Raw Output Internals. - (line 6) -* Reallocations: Efficiency. (line 30) -* Reentrancy: Reentrancy. (line 6) -* References: References. (line 6) -* Remove factor functions: Number Theoretic Functions. - (line 90) -* Reporting bugs: Reporting Bugs. (line 6) -* Root extraction algorithm: Nth Root Algorithm. (line 6) -* Root extraction algorithms: Root Extraction Algorithms. - (line 6) -* Root extraction functions <1>: Float Arithmetic. (line 37) -* Root extraction functions: Integer Roots. (line 6) -* Root testing functions: Integer Roots. (line 36) -* Rounding functions: Miscellaneous Float Functions. - (line 9) -* Sample programs: Demonstration Programs. - (line 6) -* Scan bit functions: Integer Logic and Bit Fiddling. - (line 38) -* scanf formatted input: Formatted Input. (line 6) -* SCO: Known Build Problems. - (line 38) -* Seeding random numbers: Random State Seeding. - (line 6) -* Segmentation violation: Debugging. (line 7) -* Sequent Symmetry: Known Build Problems. - (line 68) -* Services for Unix: Notes for Particular Systems. - (line 51) -* Shared library versioning: Notes for Package Builds. - (line 9) -* Sign tests <1>: Float Comparison. (line 33) -* Sign tests <2>: Integer Comparisons. (line 28) -* Sign tests: Comparing Rationals. (line 27) -* Size in digits: Miscellaneous Integer Functions. - (line 23) -* Small operands: Efficiency. (line 7) -* Solaris <1>: ABI and ISA. (line 201) -* Solaris: Known Build Problems. - (line 78) -* Sparc: Notes for Particular Systems. - (line 108) -* Sparc V9: ABI and ISA. (line 201) -* Special integer functions: Integer Special Functions. - (line 6) -* Square root algorithm: Square Root Algorithm. - (line 6) -* SSE2: Notes for Particular Systems. - (line 132) -* Stack backtrace: Debugging. (line 50) -* Stack overflow <1>: Debugging. (line 7) -* Stack overflow: Build Options. (line 278) -* Static linking: Efficiency. (line 14) -* stdarg.h: Headers and Libraries. - (line 17) -* stdio.h: Headers and Libraries. - (line 11) -* Stripped libraries: Known Build Problems. - (line 28) -* Sun: ABI and ISA. (line 201) -* SunOS: Notes for Particular Systems. - (line 120) -* Systems: Notes for Particular Systems. - (line 6) -* Temporary memory: Build Options. (line 278) -* Texinfo: Build Options. (line 347) -* Text input/output: Efficiency. (line 153) -* Thread safety: Reentrancy. (line 6) -* Toom multiplication <1>: Other Multiplication. - (line 6) -* Toom multiplication <2>: Toom 4-Way Multiplication. - (line 6) -* Toom multiplication: Toom 3-Way Multiplication. - (line 6) -* Types: Nomenclature and Types. - (line 6) -* ui and si functions: Efficiency. (line 50) -* Unbalanced multiplication: Unbalanced Multiplication. - (line 6) -* Upward compatibility: Compatibility with older versions. - (line 6) -* Useful macros and constants: Useful Macros and Constants. - (line 6) -* User-defined precision: Floating-point Functions. - (line 6) -* Valgrind: Debugging. (line 130) -* Variable conventions: Variable Conventions. - (line 6) -* Version number: Useful Macros and Constants. - (line 12) -* Web page: Introduction to GMP. (line 34) -* Windows: Notes for Particular Systems. - (line 56) -* x86: Notes for Particular Systems. - (line 126) -* x87: Notes for Particular Systems. - (line 34) -* XML: Build Options. (line 354) - - -File: gmp.info, Node: Function Index, Prev: Concept Index, Up: Top - -Function and Type Index -*********************** - -[index] -* Menu: - -* __GMP_CC: Useful Macros and Constants. - (line 23) -* __GMP_CFLAGS: Useful Macros and Constants. - (line 24) -* __GNU_MP_VERSION: Useful Macros and Constants. - (line 10) -* __GNU_MP_VERSION_MINOR: Useful Macros and Constants. - (line 11) -* __GNU_MP_VERSION_PATCHLEVEL: Useful Macros and Constants. - (line 12) -* _mpz_realloc: Integer Special Functions. - (line 51) -* abs <1>: C++ Interface Rationals. - (line 43) -* abs <2>: C++ Interface Integers. - (line 42) -* abs: C++ Interface Floats. - (line 70) -* ceil: C++ Interface Floats. - (line 71) -* cmp <1>: C++ Interface Floats. - (line 72) -* cmp <2>: C++ Interface Rationals. - (line 44) -* cmp <3>: C++ Interface Integers. - (line 44) -* cmp: C++ Interface Rationals. - (line 45) -* floor: C++ Interface Floats. - (line 80) -* gcd: BSD Compatible Functions. - (line 82) -* gmp_asprintf: Formatted Output Functions. - (line 65) -* gmp_errno: Random State Initialization. - (line 55) -* GMP_ERROR_INVALID_ARGUMENT: Random State Initialization. - (line 55) -* GMP_ERROR_UNSUPPORTED_ARGUMENT: Random State Initialization. - (line 55) -* gmp_fprintf: Formatted Output Functions. - (line 29) -* gmp_fscanf: Formatted Input Functions. - (line 25) -* GMP_LIMB_BITS: Low-level Functions. (line 508) -* GMP_NAIL_BITS: Low-level Functions. (line 506) -* GMP_NAIL_MASK: Low-level Functions. (line 516) -* GMP_NUMB_BITS: Low-level Functions. (line 507) -* GMP_NUMB_MASK: Low-level Functions. (line 517) -* GMP_NUMB_MAX: Low-level Functions. (line 525) -* gmp_obstack_printf: Formatted Output Functions. - (line 79) -* gmp_obstack_vprintf: Formatted Output Functions. - (line 81) -* gmp_printf: Formatted Output Functions. - (line 24) -* GMP_RAND_ALG_DEFAULT: Random State Initialization. - (line 49) -* GMP_RAND_ALG_LC: Random State Initialization. - (line 49) -* gmp_randclass: C++ Interface Random Numbers. - (line 7) -* gmp_randclass::get_f: C++ Interface Random Numbers. - (line 45) -* gmp_randclass::get_z_bits: C++ Interface Random Numbers. - (line 39) -* gmp_randclass::get_z_range: C++ Interface Random Numbers. - (line 42) -* gmp_randclass::gmp_randclass: C++ Interface Random Numbers. - (line 13) -* gmp_randclass::seed: C++ Interface Random Numbers. - (line 33) -* gmp_randclear: Random State Initialization. - (line 62) -* gmp_randinit: Random State Initialization. - (line 47) -* gmp_randinit_default: Random State Initialization. - (line 7) -* gmp_randinit_lc_2exp: Random State Initialization. - (line 18) -* gmp_randinit_lc_2exp_size: Random State Initialization. - (line 32) -* gmp_randinit_mt: Random State Initialization. - (line 13) -* gmp_randinit_set: Random State Initialization. - (line 43) -* gmp_randseed: Random State Seeding. - (line 7) -* gmp_randseed_ui: Random State Seeding. - (line 9) -* gmp_randstate_t: Nomenclature and Types. - (line 46) -* gmp_scanf: Formatted Input Functions. - (line 21) -* gmp_snprintf: Formatted Output Functions. - (line 46) -* gmp_sprintf: Formatted Output Functions. - (line 34) -* gmp_sscanf: Formatted Input Functions. - (line 29) -* gmp_urandomb_ui: Random State Miscellaneous. - (line 8) -* gmp_urandomm_ui: Random State Miscellaneous. - (line 14) -* gmp_vasprintf: Formatted Output Functions. - (line 66) -* gmp_version: Useful Macros and Constants. - (line 18) -* gmp_vfprintf: Formatted Output Functions. - (line 30) -* gmp_vfscanf: Formatted Input Functions. - (line 26) -* gmp_vprintf: Formatted Output Functions. - (line 25) -* gmp_vscanf: Formatted Input Functions. - (line 22) -* gmp_vsnprintf: Formatted Output Functions. - (line 48) -* gmp_vsprintf: Formatted Output Functions. - (line 35) -* gmp_vsscanf: Formatted Input Functions. - (line 31) -* hypot: C++ Interface Floats. - (line 81) -* itom: BSD Compatible Functions. - (line 29) -* madd: BSD Compatible Functions. - (line 43) -* mcmp: BSD Compatible Functions. - (line 85) -* mdiv: BSD Compatible Functions. - (line 53) -* mfree: BSD Compatible Functions. - (line 105) -* min: BSD Compatible Functions. - (line 89) -* MINT: BSD Compatible Functions. - (line 21) -* mout: BSD Compatible Functions. - (line 94) -* move: BSD Compatible Functions. - (line 39) -* mp_bitcnt_t: Nomenclature and Types. - (line 42) -* mp_bits_per_limb: Useful Macros and Constants. - (line 7) -* mp_exp_t: Nomenclature and Types. - (line 27) -* mp_get_memory_functions: Custom Allocation. (line 93) -* mp_limb_t: Nomenclature and Types. - (line 31) -* mp_set_memory_functions: Custom Allocation. (line 21) -* mp_size_t: Nomenclature and Types. - (line 37) -* mpf_abs: Float Arithmetic. (line 47) -* mpf_add: Float Arithmetic. (line 7) -* mpf_add_ui: Float Arithmetic. (line 9) -* mpf_ceil: Miscellaneous Float Functions. - (line 7) -* mpf_class: C++ Interface General. - (line 20) -* mpf_class::fits_sint_p: C++ Interface Floats. - (line 74) -* mpf_class::fits_slong_p: C++ Interface Floats. - (line 75) -* mpf_class::fits_sshort_p: C++ Interface Floats. - (line 76) -* mpf_class::fits_uint_p: C++ Interface Floats. - (line 77) -* mpf_class::fits_ulong_p: C++ Interface Floats. - (line 78) -* mpf_class::fits_ushort_p: C++ Interface Floats. - (line 79) -* mpf_class::get_d: C++ Interface Floats. - (line 82) -* mpf_class::get_mpf_t: C++ Interface General. - (line 66) -* mpf_class::get_prec: C++ Interface Floats. - (line 100) -* mpf_class::get_si: C++ Interface Floats. - (line 83) -* mpf_class::get_str: C++ Interface Floats. - (line 85) -* mpf_class::get_ui: C++ Interface Floats. - (line 86) -* mpf_class::mpf_class: C++ Interface Floats. - (line 38) -* mpf_class::operator=: C++ Interface Floats. - (line 47) -* mpf_class::set_prec: C++ Interface Floats. - (line 101) -* mpf_class::set_prec_raw: C++ Interface Floats. - (line 102) -* mpf_class::set_str: C++ Interface Floats. - (line 88) -* mpf_clear: Initializing Floats. (line 37) -* mpf_clears: Initializing Floats. (line 41) -* mpf_cmp: Float Comparison. (line 7) -* mpf_cmp_d: Float Comparison. (line 8) -* mpf_cmp_si: Float Comparison. (line 10) -* mpf_cmp_ui: Float Comparison. (line 9) -* mpf_div: Float Arithmetic. (line 29) -* mpf_div_2exp: Float Arithmetic. (line 53) -* mpf_div_ui: Float Arithmetic. (line 33) -* mpf_eq: Float Comparison. (line 17) -* mpf_fits_sint_p: Miscellaneous Float Functions. - (line 20) -* mpf_fits_slong_p: Miscellaneous Float Functions. - (line 18) -* mpf_fits_sshort_p: Miscellaneous Float Functions. - (line 22) -* mpf_fits_uint_p: Miscellaneous Float Functions. - (line 19) -* mpf_fits_ulong_p: Miscellaneous Float Functions. - (line 17) -* mpf_fits_ushort_p: Miscellaneous Float Functions. - (line 21) -* mpf_floor: Miscellaneous Float Functions. - (line 8) -* mpf_get_d: Converting Floats. (line 7) -* mpf_get_d_2exp: Converting Floats. (line 16) -* mpf_get_default_prec: Initializing Floats. (line 12) -* mpf_get_prec: Initializing Floats. (line 62) -* mpf_get_si: Converting Floats. (line 27) -* mpf_get_str: Converting Floats. (line 37) -* mpf_get_ui: Converting Floats. (line 28) -* mpf_init: Initializing Floats. (line 19) -* mpf_init2: Initializing Floats. (line 26) -* mpf_init_set: Simultaneous Float Init & Assign. - (line 16) -* mpf_init_set_d: Simultaneous Float Init & Assign. - (line 19) -* mpf_init_set_si: Simultaneous Float Init & Assign. - (line 18) -* mpf_init_set_str: Simultaneous Float Init & Assign. - (line 25) -* mpf_init_set_ui: Simultaneous Float Init & Assign. - (line 17) -* mpf_inits: Initializing Floats. (line 31) -* mpf_inp_str: I/O of Floats. (line 37) -* mpf_integer_p: Miscellaneous Float Functions. - (line 14) -* mpf_mul: Float Arithmetic. (line 19) -* mpf_mul_2exp: Float Arithmetic. (line 50) -* mpf_mul_ui: Float Arithmetic. (line 21) -* mpf_neg: Float Arithmetic. (line 44) -* mpf_out_str: I/O of Floats. (line 17) -* mpf_pow_ui: Float Arithmetic. (line 41) -* mpf_random2: Miscellaneous Float Functions. - (line 36) -* mpf_reldiff: Float Comparison. (line 29) -* mpf_set: Assigning Floats. (line 10) -* mpf_set_d: Assigning Floats. (line 13) -* mpf_set_default_prec: Initializing Floats. (line 7) -* mpf_set_prec: Initializing Floats. (line 65) -* mpf_set_prec_raw: Initializing Floats. (line 72) -* mpf_set_q: Assigning Floats. (line 15) -* mpf_set_si: Assigning Floats. (line 12) -* mpf_set_str: Assigning Floats. (line 18) -* mpf_set_ui: Assigning Floats. (line 11) -* mpf_set_z: Assigning Floats. (line 14) -* mpf_sgn: Float Comparison. (line 33) -* mpf_sqrt: Float Arithmetic. (line 36) -* mpf_sqrt_ui: Float Arithmetic. (line 37) -* mpf_sub: Float Arithmetic. (line 12) -* mpf_sub_ui: Float Arithmetic. (line 16) -* mpf_swap: Assigning Floats. (line 52) -* mpf_t: Nomenclature and Types. - (line 21) -* mpf_trunc: Miscellaneous Float Functions. - (line 9) -* mpf_ui_div: Float Arithmetic. (line 31) -* mpf_ui_sub: Float Arithmetic. (line 14) -* mpf_urandomb: Miscellaneous Float Functions. - (line 27) -* mpn_add: Low-level Functions. (line 69) -* mpn_add_1: Low-level Functions. (line 64) -* mpn_add_n: Low-level Functions. (line 54) -* mpn_addmul_1: Low-level Functions. (line 148) -* mpn_and_n: Low-level Functions. (line 420) -* mpn_andn_n: Low-level Functions. (line 435) -* mpn_cmp: Low-level Functions. (line 284) -* mpn_com: Low-level Functions. (line 460) -* mpn_copyd: Low-level Functions. (line 469) -* mpn_copyi: Low-level Functions. (line 465) -* mpn_divexact_by3: Low-level Functions. (line 229) -* mpn_divexact_by3c: Low-level Functions. (line 231) -* mpn_divmod: Low-level Functions. (line 224) -* mpn_divmod_1: Low-level Functions. (line 208) -* mpn_divrem: Low-level Functions. (line 182) -* mpn_divrem_1: Low-level Functions. (line 206) -* mpn_gcd: Low-level Functions. (line 289) -* mpn_gcd_1: Low-level Functions. (line 299) -* mpn_gcdext: Low-level Functions. (line 305) -* mpn_get_str: Low-level Functions. (line 346) -* mpn_hamdist: Low-level Functions. (line 410) -* mpn_ior_n: Low-level Functions. (line 425) -* mpn_iorn_n: Low-level Functions. (line 440) -* mpn_lshift: Low-level Functions. (line 260) -* mpn_mod_1: Low-level Functions. (line 255) -* mpn_mul: Low-level Functions. (line 114) -* mpn_mul_1: Low-level Functions. (line 133) -* mpn_mul_n: Low-level Functions. (line 103) -* mpn_nand_n: Low-level Functions. (line 445) -* mpn_neg: Low-level Functions. (line 98) -* mpn_nior_n: Low-level Functions. (line 450) -* mpn_perfect_square_p: Low-level Functions. (line 416) -* mpn_popcount: Low-level Functions. (line 406) -* mpn_random: Low-level Functions. (line 395) -* mpn_random2: Low-level Functions. (line 396) -* mpn_rshift: Low-level Functions. (line 272) -* mpn_scan0: Low-level Functions. (line 380) -* mpn_scan1: Low-level Functions. (line 388) -* mpn_set_str: Low-level Functions. (line 361) -* mpn_sqr: Low-level Functions. (line 125) -* mpn_sqrtrem: Low-level Functions. (line 328) -* mpn_sub: Low-level Functions. (line 90) -* mpn_sub_1: Low-level Functions. (line 85) -* mpn_sub_n: Low-level Functions. (line 76) -* mpn_submul_1: Low-level Functions. (line 159) -* mpn_tdiv_qr: Low-level Functions. (line 171) -* mpn_xnor_n: Low-level Functions. (line 455) -* mpn_xor_n: Low-level Functions. (line 430) -* mpn_zero: Low-level Functions. (line 472) -* mpq_abs: Rational Arithmetic. (line 31) -* mpq_add: Rational Arithmetic. (line 7) -* mpq_canonicalize: Rational Number Functions. - (line 22) -* mpq_class: C++ Interface General. - (line 19) -* mpq_class::canonicalize: C++ Interface Rationals. - (line 37) -* mpq_class::get_d: C++ Interface Rationals. - (line 46) -* mpq_class::get_den: C++ Interface Rationals. - (line 58) -* mpq_class::get_den_mpz_t: C++ Interface Rationals. - (line 68) -* mpq_class::get_mpq_t: C++ Interface General. - (line 65) -* mpq_class::get_num: C++ Interface Rationals. - (line 57) -* mpq_class::get_num_mpz_t: C++ Interface Rationals. - (line 67) -* mpq_class::get_str: C++ Interface Rationals. - (line 47) -* mpq_class::mpq_class: C++ Interface Rationals. - (line 22) -* mpq_class::set_str: C++ Interface Rationals. - (line 49) -* mpq_clear: Initializing Rationals. - (line 16) -* mpq_clears: Initializing Rationals. - (line 20) -* mpq_cmp: Comparing Rationals. (line 7) -* mpq_cmp_si: Comparing Rationals. (line 17) -* mpq_cmp_ui: Comparing Rationals. (line 15) -* mpq_denref: Applying Integer Functions. - (line 18) -* mpq_div: Rational Arithmetic. (line 22) -* mpq_div_2exp: Rational Arithmetic. (line 25) -* mpq_equal: Comparing Rationals. (line 33) -* mpq_get_d: Rational Conversions. - (line 7) -* mpq_get_den: Applying Integer Functions. - (line 24) -* mpq_get_num: Applying Integer Functions. - (line 23) -* mpq_get_str: Rational Conversions. - (line 22) -* mpq_init: Initializing Rationals. - (line 7) -* mpq_inits: Initializing Rationals. - (line 12) -* mpq_inp_str: I/O of Rationals. (line 23) -* mpq_inv: Rational Arithmetic. (line 34) -* mpq_mul: Rational Arithmetic. (line 15) -* mpq_mul_2exp: Rational Arithmetic. (line 18) -* mpq_neg: Rational Arithmetic. (line 28) -* mpq_numref: Applying Integer Functions. - (line 17) -* mpq_out_str: I/O of Rationals. (line 15) -* mpq_set: Initializing Rationals. - (line 24) -* mpq_set_d: Rational Conversions. - (line 17) -* mpq_set_den: Applying Integer Functions. - (line 26) -* mpq_set_f: Rational Conversions. - (line 18) -* mpq_set_num: Applying Integer Functions. - (line 25) -* mpq_set_si: Initializing Rationals. - (line 31) -* mpq_set_str: Initializing Rationals. - (line 36) -* mpq_set_ui: Initializing Rationals. - (line 29) -* mpq_set_z: Initializing Rationals. - (line 25) -* mpq_sgn: Comparing Rationals. (line 27) -* mpq_sub: Rational Arithmetic. (line 11) -* mpq_swap: Initializing Rationals. - (line 56) -* mpq_t: Nomenclature and Types. - (line 16) -* mpz_abs: Integer Arithmetic. (line 42) -* mpz_add: Integer Arithmetic. (line 7) -* mpz_add_ui: Integer Arithmetic. (line 9) -* mpz_addmul: Integer Arithmetic. (line 25) -* mpz_addmul_ui: Integer Arithmetic. (line 27) -* mpz_and: Integer Logic and Bit Fiddling. - (line 11) -* mpz_array_init: Integer Special Functions. - (line 11) -* mpz_bin_ui: Number Theoretic Functions. - (line 98) -* mpz_bin_uiui: Number Theoretic Functions. - (line 100) -* mpz_cdiv_q: Integer Division. (line 13) -* mpz_cdiv_q_2exp: Integer Division. (line 24) -* mpz_cdiv_q_ui: Integer Division. (line 17) -* mpz_cdiv_qr: Integer Division. (line 15) -* mpz_cdiv_qr_ui: Integer Division. (line 21) -* mpz_cdiv_r: Integer Division. (line 14) -* mpz_cdiv_r_2exp: Integer Division. (line 25) -* mpz_cdiv_r_ui: Integer Division. (line 19) -* mpz_cdiv_ui: Integer Division. (line 23) -* mpz_class: C++ Interface General. - (line 18) -* mpz_class::fits_sint_p: C++ Interface Integers. - (line 45) -* mpz_class::fits_slong_p: C++ Interface Integers. - (line 46) -* mpz_class::fits_sshort_p: C++ Interface Integers. - (line 47) -* mpz_class::fits_uint_p: C++ Interface Integers. - (line 48) -* mpz_class::fits_ulong_p: C++ Interface Integers. - (line 49) -* mpz_class::fits_ushort_p: C++ Interface Integers. - (line 50) -* mpz_class::get_d: C++ Interface Integers. - (line 51) -* mpz_class::get_mpz_t: C++ Interface General. - (line 64) -* mpz_class::get_si: C++ Interface Integers. - (line 52) -* mpz_class::get_str: C++ Interface Integers. - (line 53) -* mpz_class::get_ui: C++ Interface Integers. - (line 54) -* mpz_class::mpz_class: C++ Interface Integers. - (line 7) -* mpz_class::set_str: C++ Interface Integers. - (line 56) -* mpz_clear: Initializing Integers. - (line 44) -* mpz_clears: Initializing Integers. - (line 48) -* mpz_clrbit: Integer Logic and Bit Fiddling. - (line 54) -* mpz_cmp: Integer Comparisons. (line 7) -* mpz_cmp_d: Integer Comparisons. (line 8) -* mpz_cmp_si: Integer Comparisons. (line 9) -* mpz_cmp_ui: Integer Comparisons. (line 10) -* mpz_cmpabs: Integer Comparisons. (line 18) -* mpz_cmpabs_d: Integer Comparisons. (line 19) -* mpz_cmpabs_ui: Integer Comparisons. (line 20) -* mpz_com: Integer Logic and Bit Fiddling. - (line 20) -* mpz_combit: Integer Logic and Bit Fiddling. - (line 57) -* mpz_congruent_2exp_p: Integer Division. (line 124) -* mpz_congruent_p: Integer Division. (line 121) -* mpz_congruent_ui_p: Integer Division. (line 123) -* mpz_divexact: Integer Division. (line 101) -* mpz_divexact_ui: Integer Division. (line 102) -* mpz_divisible_2exp_p: Integer Division. (line 112) -* mpz_divisible_p: Integer Division. (line 110) -* mpz_divisible_ui_p: Integer Division. (line 111) -* mpz_even_p: Miscellaneous Integer Functions. - (line 18) -* mpz_export: Integer Import and Export. - (line 45) -* mpz_fac_ui: Number Theoretic Functions. - (line 95) -* mpz_fdiv_q: Integer Division. (line 27) -* mpz_fdiv_q_2exp: Integer Division. (line 38) -* mpz_fdiv_q_ui: Integer Division. (line 31) -* mpz_fdiv_qr: Integer Division. (line 29) -* mpz_fdiv_qr_ui: Integer Division. (line 35) -* mpz_fdiv_r: Integer Division. (line 28) -* mpz_fdiv_r_2exp: Integer Division. (line 39) -* mpz_fdiv_r_ui: Integer Division. (line 33) -* mpz_fdiv_ui: Integer Division. (line 37) -* mpz_fib2_ui: Number Theoretic Functions. - (line 108) -* mpz_fib_ui: Number Theoretic Functions. - (line 106) -* mpz_fits_sint_p: Miscellaneous Integer Functions. - (line 10) -* mpz_fits_slong_p: Miscellaneous Integer Functions. - (line 8) -* mpz_fits_sshort_p: Miscellaneous Integer Functions. - (line 12) -* mpz_fits_uint_p: Miscellaneous Integer Functions. - (line 9) -* mpz_fits_ulong_p: Miscellaneous Integer Functions. - (line 7) -* mpz_fits_ushort_p: Miscellaneous Integer Functions. - (line 11) -* mpz_gcd: Number Theoretic Functions. - (line 30) -* mpz_gcd_ui: Number Theoretic Functions. - (line 35) -* mpz_gcdext: Number Theoretic Functions. - (line 45) -* mpz_get_d: Converting Integers. (line 27) -* mpz_get_d_2exp: Converting Integers. (line 35) -* mpz_get_si: Converting Integers. (line 18) -* mpz_get_str: Converting Integers. (line 46) -* mpz_get_ui: Converting Integers. (line 11) -* mpz_getlimbn: Integer Special Functions. - (line 60) -* mpz_hamdist: Integer Logic and Bit Fiddling. - (line 29) -* mpz_import: Integer Import and Export. - (line 11) -* mpz_init: Initializing Integers. - (line 26) -* mpz_init2: Initializing Integers. - (line 33) -* mpz_init_set: Simultaneous Integer Init & Assign. - (line 27) -* mpz_init_set_d: Simultaneous Integer Init & Assign. - (line 30) -* mpz_init_set_si: Simultaneous Integer Init & Assign. - (line 29) -* mpz_init_set_str: Simultaneous Integer Init & Assign. - (line 34) -* mpz_init_set_ui: Simultaneous Integer Init & Assign. - (line 28) -* mpz_inits: Initializing Integers. - (line 29) -* mpz_inp_raw: I/O of Integers. (line 59) -* mpz_inp_str: I/O of Integers. (line 28) -* mpz_invert: Number Theoretic Functions. - (line 60) -* mpz_ior: Integer Logic and Bit Fiddling. - (line 14) -* mpz_jacobi: Number Theoretic Functions. - (line 66) -* mpz_kronecker: Number Theoretic Functions. - (line 74) -* mpz_kronecker_si: Number Theoretic Functions. - (line 75) -* mpz_kronecker_ui: Number Theoretic Functions. - (line 76) -* mpz_lcm: Number Theoretic Functions. - (line 54) -* mpz_lcm_ui: Number Theoretic Functions. - (line 55) -* mpz_legendre: Number Theoretic Functions. - (line 69) -* mpz_lucnum2_ui: Number Theoretic Functions. - (line 119) -* mpz_lucnum_ui: Number Theoretic Functions. - (line 117) -* mpz_mod: Integer Division. (line 91) -* mpz_mod_ui: Integer Division. (line 93) -* mpz_mul: Integer Arithmetic. (line 19) -* mpz_mul_2exp: Integer Arithmetic. (line 35) -* mpz_mul_si: Integer Arithmetic. (line 20) -* mpz_mul_ui: Integer Arithmetic. (line 22) -* mpz_neg: Integer Arithmetic. (line 39) -* mpz_nextprime: Number Theoretic Functions. - (line 23) -* mpz_odd_p: Miscellaneous Integer Functions. - (line 17) -* mpz_out_raw: I/O of Integers. (line 43) -* mpz_out_str: I/O of Integers. (line 16) -* mpz_perfect_power_p: Integer Roots. (line 27) -* mpz_perfect_square_p: Integer Roots. (line 36) -* mpz_popcount: Integer Logic and Bit Fiddling. - (line 23) -* mpz_pow_ui: Integer Exponentiation. - (line 31) -* mpz_powm: Integer Exponentiation. - (line 8) -* mpz_powm_sec: Integer Exponentiation. - (line 18) -* mpz_powm_ui: Integer Exponentiation. - (line 10) -* mpz_probab_prime_p: Number Theoretic Functions. - (line 7) -* mpz_random: Integer Random Numbers. - (line 42) -* mpz_random2: Integer Random Numbers. - (line 51) -* mpz_realloc2: Initializing Integers. - (line 52) -* mpz_remove: Number Theoretic Functions. - (line 90) -* mpz_root: Integer Roots. (line 7) -* mpz_rootrem: Integer Roots. (line 13) -* mpz_rrandomb: Integer Random Numbers. - (line 31) -* mpz_scan0: Integer Logic and Bit Fiddling. - (line 37) -* mpz_scan1: Integer Logic and Bit Fiddling. - (line 38) -* mpz_set: Assigning Integers. (line 10) -* mpz_set_d: Assigning Integers. (line 13) -* mpz_set_f: Assigning Integers. (line 15) -* mpz_set_q: Assigning Integers. (line 14) -* mpz_set_si: Assigning Integers. (line 12) -* mpz_set_str: Assigning Integers. (line 21) -* mpz_set_ui: Assigning Integers. (line 11) -* mpz_setbit: Integer Logic and Bit Fiddling. - (line 51) -* mpz_sgn: Integer Comparisons. (line 28) -* mpz_si_kronecker: Number Theoretic Functions. - (line 77) -* mpz_size: Integer Special Functions. - (line 68) -* mpz_sizeinbase: Miscellaneous Integer Functions. - (line 23) -* mpz_sqrt: Integer Roots. (line 17) -* mpz_sqrtrem: Integer Roots. (line 20) -* mpz_sub: Integer Arithmetic. (line 12) -* mpz_sub_ui: Integer Arithmetic. (line 14) -* mpz_submul: Integer Arithmetic. (line 30) -* mpz_submul_ui: Integer Arithmetic. (line 32) -* mpz_swap: Assigning Integers. (line 37) -* mpz_t: Nomenclature and Types. - (line 6) -* mpz_tdiv_q: Integer Division. (line 41) -* mpz_tdiv_q_2exp: Integer Division. (line 52) -* mpz_tdiv_q_ui: Integer Division. (line 45) -* mpz_tdiv_qr: Integer Division. (line 43) -* mpz_tdiv_qr_ui: Integer Division. (line 49) -* mpz_tdiv_r: Integer Division. (line 42) -* mpz_tdiv_r_2exp: Integer Division. (line 53) -* mpz_tdiv_r_ui: Integer Division. (line 47) -* mpz_tdiv_ui: Integer Division. (line 51) -* mpz_tstbit: Integer Logic and Bit Fiddling. - (line 60) -* mpz_ui_kronecker: Number Theoretic Functions. - (line 78) -* mpz_ui_pow_ui: Integer Exponentiation. - (line 33) -* mpz_ui_sub: Integer Arithmetic. (line 16) -* mpz_urandomb: Integer Random Numbers. - (line 14) -* mpz_urandomm: Integer Random Numbers. - (line 23) -* mpz_xor: Integer Logic and Bit Fiddling. - (line 17) -* msqrt: BSD Compatible Functions. - (line 63) -* msub: BSD Compatible Functions. - (line 46) -* mtox: BSD Compatible Functions. - (line 98) -* mult: BSD Compatible Functions. - (line 49) -* operator%: C++ Interface Integers. - (line 30) -* operator/: C++ Interface Integers. - (line 29) -* operator<<: C++ Formatted Output. - (line 20) -* operator>> <1>: C++ Formatted Input. (line 11) -* operator>>: C++ Interface Rationals. - (line 77) -* pow: BSD Compatible Functions. - (line 71) -* rpow: BSD Compatible Functions. - (line 79) -* sdiv: BSD Compatible Functions. - (line 55) -* sgn <1>: C++ Interface Rationals. - (line 50) -* sgn <2>: C++ Interface Integers. - (line 57) -* sgn: C++ Interface Floats. - (line 89) -* sqrt <1>: C++ Interface Integers. - (line 58) -* sqrt: C++ Interface Floats. - (line 90) -* trunc: C++ Interface Floats. - (line 91) -* xtom: BSD Compatible Functions. - (line 34) - - diff --git a/misc/builddeps/linux64/d0_blind_id/bin/blind_id b/misc/builddeps/linux64/d0_blind_id/bin/blind_id deleted file mode 100755 index 775836cda4ca32deee385cf415fc6819d969f15c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 376573 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 // size_t - -#define D0_EXPORT __attribute__((__visibility__("default"))) -#define D0_USED __attribute__((used)) -#define D0_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) -#define D0_BOOL int - -typedef void *(d0_malloc_t)(size_t len); -typedef void (d0_free_t)(void *p); -typedef void *(d0_createmutex_t)(void); -typedef void (d0_destroymutex_t)(void *); -typedef int (d0_lockmutex_t)(void *); // zero on success -typedef int (d0_unlockmutex_t)(void *); // zero on success - -extern d0_malloc_t *d0_malloc; -extern d0_free_t *d0_free; -extern d0_createmutex_t *d0_createmutex; -extern d0_destroymutex_t *d0_destroymutex; -extern d0_lockmutex_t *d0_lockmutex; -extern d0_unlockmutex_t *d0_unlockmutex; - -void d0_setmallocfuncs(d0_malloc_t *m, d0_free_t *f); -void d0_setmutexfuncs(d0_createmutex_t *c, d0_destroymutex_t *d, d0_lockmutex_t *l, d0_unlockmutex_t *u); -void d0_initfuncs(void); // initializes them, this needs to be only called internally once - -extern const char *d0_bsd_license_notice; - -#endif diff --git a/misc/builddeps/linux64/d0_blind_id/include/d0_blind_id/d0_blind_id.h b/misc/builddeps/linux64/d0_blind_id/include/d0_blind_id/d0_blind_id.h deleted file mode 100644 index f546b679..00000000 --- a/misc/builddeps/linux64/d0_blind_id/include/d0_blind_id/d0_blind_id.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - * FILE: d0_blind_id.h - * AUTHOR: Rudolf Polzer - divVerent@xonotic.org - * - * Copyright (c) 2010, Rudolf Polzer - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the copyright holder nor the names of contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $Format:commit %H$ - * $Id: bf838f43093aceadcd2d20071684f1e7148a4332 $ - */ - -#ifndef __D0_BLIND_ID_H__ -#define __D0_BLIND_ID_H__ - -#include "d0.h" - -typedef struct d0_blind_id_s d0_blind_id_t; -typedef D0_BOOL (*d0_fastreject_function) (const d0_blind_id_t *ctx, void *pass); - -D0_EXPORT D0_WARN_UNUSED_RESULT d0_blind_id_t *d0_blind_id_new(void); -D0_EXPORT void d0_blind_id_free(d0_blind_id_t *a); -D0_EXPORT void d0_blind_id_clear(d0_blind_id_t *ctx); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_copy(d0_blind_id_t *ctx, const d0_blind_id_t *src); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_generate_private_key(d0_blind_id_t *ctx, int k); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_generate_private_key_fastreject(d0_blind_id_t *ctx, int k, d0_fastreject_function reject, void *pass); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_read_private_key(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_read_public_key(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_write_private_key(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_write_public_key(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_fingerprint64_public_key(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_generate_private_id_modulus(d0_blind_id_t *ctx); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_read_private_id_modulus(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_write_private_id_modulus(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_generate_private_id_start(d0_blind_id_t *ctx); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_generate_private_id_request(d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_answer_private_id_request(const d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen, char *outbuf, size_t *outbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_finish_private_id_request(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_read_private_id_request_camouflage(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_write_private_id_request_camouflage(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_read_private_id(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_read_public_id(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_write_private_id(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_write_public_id(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_authenticate_with_private_id_start(d0_blind_id_t *ctx, D0_BOOL is_first, D0_BOOL send_modulus, const char *message, size_t msglen, char *outbuf, size_t *outbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_authenticate_with_private_id_challenge(d0_blind_id_t *ctx, D0_BOOL is_first, D0_BOOL recv_modulus, const char *inbuf, size_t inbuflen, char *outbuf, size_t *outbuflen, D0_BOOL *status); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_authenticate_with_private_id_response(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen, char *outbuf, size_t *outbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_authenticate_with_private_id_verify(d0_blind_id_t *ctx, const char *inbuf, size_t inbuflen, char *msg, size_t *msglen, D0_BOOL *status); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_authenticate_with_private_id_generate_missing_signature(d0_blind_id_t *ctx); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_sign_with_private_id_sign(d0_blind_id_t *ctx, D0_BOOL is_first, D0_BOOL send_modulus, const char *message, size_t msglen, char *outbuf, size_t *outbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_sign_with_private_id_sign_detached(d0_blind_id_t *ctx, D0_BOOL is_first, D0_BOOL send_modulus, const char *message, size_t msglen, char *outbuf, size_t *outbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_sign_with_private_id_verify(d0_blind_id_t *ctx, D0_BOOL is_first, D0_BOOL recv_modulus, const char *inbuf, size_t inbuflen, char *msg, size_t *msglen, D0_BOOL *status); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_sign_with_private_id_verify_detached(d0_blind_id_t *ctx, D0_BOOL is_first, D0_BOOL recv_modulus, const char *inbuf, size_t inbuflen, const char *msg, size_t msglen, D0_BOOL *status); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_fingerprint64_public_id(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_verify_public_id(const d0_blind_id_t *ctx, D0_BOOL *status); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_verify_private_id(const d0_blind_id_t *ctx); -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_sessionkey_public_id(const d0_blind_id_t *ctx, char *outbuf, size_t *outbuflen); // can only be done after successful key exchange, this performs a modpow; key length is limited by SHA_DIGESTSIZE for now; also ONLY valid after successful d0_blind_id_authenticate_with_private_id_verify/d0_blind_id_fingerprint64_public_id - -D0_EXPORT D0_WARN_UNUSED_RESULT D0_BOOL d0_blind_id_INITIALIZE(void); -D0_EXPORT void d0_blind_id_SHUTDOWN(void); - -D0_EXPORT void d0_blind_id_util_sha256(char *out, const char *in, size_t n); - -// for exporting -D0_EXPORT void d0_blind_id_setmallocfuncs(d0_malloc_t *m, d0_free_t *f); -D0_EXPORT void d0_blind_id_setmutexfuncs(d0_createmutex_t *c, d0_destroymutex_t *d, d0_lockmutex_t *l, d0_unlockmutex_t *u); - -#endif diff --git a/misc/builddeps/linux64/d0_blind_id/include/d0_blind_id/d0_rijndael.h b/misc/builddeps/linux64/d0_blind_id/include/d0_blind_id/d0_rijndael.h deleted file mode 100644 index e1c8f71b..00000000 --- a/misc/builddeps/linux64/d0_blind_id/include/d0_blind_id/d0_rijndael.h +++ /dev/null @@ -1,21 +0,0 @@ -// from http://www.efgh.com/software/rijndael.htm (public domain) - -#ifndef H__RIJNDAEL -#define H__RIJNDAEL - -#include "d0.h" - -D0_EXPORT int d0_rijndael_setup_encrypt(unsigned long *rk, const unsigned char *key, - int keybits); -D0_EXPORT int d0_rijndael_setup_decrypt(unsigned long *rk, const unsigned char *key, - int keybits); -D0_EXPORT void d0_rijndael_encrypt(const unsigned long *rk, int nrounds, - const unsigned char plaintext[16], unsigned char ciphertext[16]); -D0_EXPORT void d0_rijndael_decrypt(const unsigned long *rk, int nrounds, - const unsigned char ciphertext[16], unsigned char plaintext[16]); - -#define D0_RIJNDAEL_KEYLENGTH(keybits) ((keybits)/8) -#define D0_RIJNDAEL_RKLENGTH(keybits) ((keybits)/8+28) -#define D0_RIJNDAEL_NROUNDS(keybits) ((keybits)/32+6) - -#endif diff --git a/misc/builddeps/linux64/d0_blind_id/lib/libd0_blind_id.a b/misc/builddeps/linux64/d0_blind_id/lib/libd0_blind_id.a deleted file mode 100644 index 4f0fedab87c3f6383c897382bbe493b47353fa9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 212534 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�k{5n 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' -option to the compiler, where `' is the directory where you have -GNU `mp.h'. - - -- Function: MINT * itom (signed short int INITIAL_VALUE) - Allocate an integer consisting of a `MINT' object and dynamic limb - space. Initialize the integer to INITIAL_VALUE. Return a pointer - to the `MINT' object. - - -- Function: MINT * xtom (char *INITIAL_VALUE) - Allocate an integer consisting of a `MINT' object and dynamic limb - space. Initialize the integer from INITIAL_VALUE, a hexadecimal, - null-terminated C string. Return a pointer to the `MINT' object. - - -- Function: void move (MINT *SRC, MINT *DEST) - Set DEST to SRC by copying. Both variables must be previously - initialized. - - -- Function: void madd (MINT *SRC_1, MINT *SRC_2, MINT *DESTINATION) - Add SRC_1 and SRC_2 and put the sum in DESTINATION. - - -- Function: void msub (MINT *SRC_1, MINT *SRC_2, MINT *DESTINATION) - Subtract SRC_2 from SRC_1 and put the difference in DESTINATION. - - -- Function: void mult (MINT *SRC_1, MINT *SRC_2, MINT *DESTINATION) - Multiply SRC_1 and SRC_2 and put the product in DESTINATION. - - -- Function: void mdiv (MINT *DIVIDEND, MINT *DIVISOR, MINT *QUOTIENT, - MINT *REMAINDER) - -- Function: void sdiv (MINT *DIVIDEND, signed short int DIVISOR, MINT - *QUOTIENT, signed short int *REMAINDER) - Set QUOTIENT to DIVIDEND/DIVISOR, and REMAINDER to DIVIDEND mod - DIVISOR. The quotient is rounded towards zero; the remainder has - the same sign as the dividend unless it is zero. - - Some implementations of these functions work differently--or not - at all--for negative arguments. - - -- Function: void msqrt (MINT *OP, MINT *ROOT, MINT *REMAINDER) - Set ROOT to the truncated integer part of the square root of OP, - like `mpz_sqrt'. Set REMAINDER to OP-ROOT*ROOT, i.e. zero if OP - is a perfect square. - - If ROOT and REMAINDER are the same variable, the results are - undefined. - - -- Function: void pow (MINT *BASE, MINT *EXP, MINT *MOD, MINT *DEST) - Set DEST to (BASE raised to EXP) modulo MOD. - - Note that the name `pow' clashes with `pow' from the standard C - math library (*note Exponentiation and Logarithms: (libc)Exponents - and Logarithms.). An application will only be able to use one or - the other. - - -- Function: void rpow (MINT *BASE, signed short int EXP, MINT *DEST) - Set DEST to BASE raised to EXP. - - -- Function: void gcd (MINT *OP1, MINT *OP2, MINT *RES) - Set RES to the greatest common divisor of OP1 and OP2. - - -- Function: int mcmp (MINT *OP1, MINT *OP2) - Compare OP1 and OP2. Return a positive value if OP1 > OP2, zero - if OP1 = OP2, and a negative value if OP1 < OP2. - - -- Function: void min (MINT *DEST) - Input a decimal string from `stdin', and put the read integer in - DEST. SPC and TAB are allowed in the number string, and are - ignored. - - -- Function: void mout (MINT *SRC) - Output SRC to `stdout', as a decimal string. Also output a - newline. - - -- Function: char * mtox (MINT *OP) - Convert OP to a hexadecimal string, and return a pointer to the - string. The returned string is allocated using the default memory - allocation function, `malloc' by default. It will be - `strlen(str)+1' bytes, that being exactly enough for the string - and null-terminator. - - -- Function: void mfree (MINT *OP) - De-allocate, the space used by OP. *This function should only be - passed a value returned by `itom' or `xtom'.* - - -File: gmp.info, Node: Custom Allocation, Next: Language Bindings, Prev: BSD Compatible Functions, Up: Top - -14 Custom Allocation -******************** - -By default GMP uses `malloc', `realloc' and `free' for memory -allocation, and if they fail GMP prints a message to the standard error -output and terminates the program. - - Alternate functions can be specified, to allocate memory in a -different way or to have a different error action on running out of -memory. - - This feature is available in the Berkeley compatibility library -(*note BSD Compatible Functions::) as well as the main GMP library. - - -- Function: void mp_set_memory_functions ( - void *(*ALLOC_FUNC_PTR) (size_t), - void *(*REALLOC_FUNC_PTR) (void *, size_t, size_t), - void (*FREE_FUNC_PTR) (void *, size_t)) - Replace the current allocation functions from the arguments. If - an argument is `NULL', the corresponding default function is used. - - These functions will be used for all memory allocation done by - GMP, apart from temporary space from `alloca' if that function is - available and GMP is configured to use it (*note Build Options::). - - *Be sure to call `mp_set_memory_functions' only when there are no - active GMP objects allocated using the previous memory functions! - Usually that means calling it before any other GMP function.* - - The functions supplied should fit the following declarations: - - -- Function: void * allocate_function (size_t ALLOC_SIZE) - Return a pointer to newly allocated space with at least ALLOC_SIZE - bytes. - - -- Function: void * reallocate_function (void *PTR, size_t OLD_SIZE, - size_t NEW_SIZE) - Resize a previously allocated block PTR of OLD_SIZE bytes to be - NEW_SIZE bytes. - - The block may be moved if necessary or if desired, and in that - case the smaller of OLD_SIZE and NEW_SIZE bytes must be copied to - the new location. The return value is a pointer to the resized - block, that being the new location if moved or just PTR if not. - - PTR is never `NULL', it's always a previously allocated block. - NEW_SIZE may be bigger or smaller than OLD_SIZE. - - -- Function: void free_function (void *PTR, size_t SIZE) - De-allocate the space pointed to by PTR. - - PTR is never `NULL', it's always a previously allocated block of - SIZE bytes. - - A "byte" here means the unit used by the `sizeof' operator. - - The OLD_SIZE parameters to REALLOCATE_FUNCTION and FREE_FUNCTION are -passed for convenience, but of course can be ignored if not needed. -The default functions using `malloc' and friends for instance don't use -them. - - No error return is allowed from any of these functions, if they -return then they must have performed the specified operation. In -particular note that ALLOCATE_FUNCTION or REALLOCATE_FUNCTION mustn't -return `NULL'. - - Getting a different fatal error action is a good use for custom -allocation functions, for example giving a graphical dialog rather than -the default print to `stderr'. How much is possible when genuinely out -of memory is another question though. - - There's currently no defined way for the allocation functions to -recover from an error such as out of memory, they must terminate -program execution. A `longjmp' or throwing a C++ exception will have -undefined results. This may change in the future. - - GMP may use allocated blocks to hold pointers to other allocated -blocks. This will limit the assumptions a conservative garbage -collection scheme can make. - - Since the default GMP allocation uses `malloc' and friends, those -functions will be linked in even if the first thing a program does is an -`mp_set_memory_functions'. It's necessary to change the GMP sources if -this is a problem. - - - -- Function: void mp_get_memory_functions ( - void *(**ALLOC_FUNC_PTR) (size_t), - void *(**REALLOC_FUNC_PTR) (void *, size_t, size_t), - void (**FREE_FUNC_PTR) (void *, size_t)) - Get the current allocation functions, storing function pointers to - the locations given by the arguments. If an argument is `NULL', - that function pointer is not stored. - - For example, to get just the current free function, - - void (*freefunc) (void *, size_t); - - mp_get_memory_functions (NULL, NULL, &freefunc); - - -File: gmp.info, Node: Language Bindings, Next: Algorithms, Prev: Custom Allocation, Up: Top - -15 Language Bindings -******************** - -The following packages and projects offer access to GMP from languages -other than C, though perhaps with varying levels of functionality and -efficiency. - - -C++ - * GMP C++ class interface, *note C++ Class Interface:: - Straightforward interface, expression templates to eliminate - temporaries. - - * ALP `http://www-sop.inria.fr/saga/logiciels/ALP/' - Linear algebra and polynomials using templates. - - * Arithmos `http://www.win.ua.ac.be/~cant/arithmos/' - Rationals with infinities and square roots. - - * CLN `http://www.ginac.de/CLN/' - High level classes for arithmetic. - - * LiDIA `http://www.cdc.informatik.tu-darmstadt.de/TI/LiDIA/' - A C++ library for computational number theory. - - * Linbox `http://www.linalg.org/' - Sparse vectors and matrices. - - * NTL `http://www.shoup.net/ntl/' - A C++ number theory library. - -Fortran - * Omni F77 `http://phase.hpcc.jp/Omni/home.html' - Arbitrary precision floats. - -Haskell - * Glasgow Haskell Compiler `http://www.haskell.org/ghc/' - -Java - * Kaffe `http://www.kaffe.org/' - - * Kissme `http://kissme.sourceforge.net/' - -Lisp - * GNU Common Lisp `http://www.gnu.org/software/gcl/gcl.html' - - * Librep `http://librep.sourceforge.net/' - - * XEmacs (21.5.18 beta and up) `http://www.xemacs.org' - Optional big integers, rationals and floats using GMP. - -M4 - * GNU m4 betas `http://www.seindal.dk/rene/gnu/' - Optionally provides an arbitrary precision `mpeval'. - -ML - * MLton compiler `http://mlton.org/' - -Objective Caml - * MLGMP `http://www.di.ens.fr/~monniaux/programmes.html.en' - - * Numerix `http://pauillac.inria.fr/~quercia/' - Optionally using GMP. - -Oz - * Mozart `http://www.mozart-oz.org/' - -Pascal - * GNU Pascal Compiler `http://www.gnu-pascal.de/' - GMP unit. - - * Numerix `http://pauillac.inria.fr/~quercia/' - For Free Pascal, optionally using GMP. - -Perl - * GMP module, see `demos/perl' in the GMP sources (*note - Demonstration Programs::). - - * Math::GMP `http://www.cpan.org/' - Compatible with Math::BigInt, but not as many functions as - the GMP module above. - - * Math::BigInt::GMP `http://www.cpan.org/' - Plug Math::GMP into normal Math::BigInt operations. - -Pike - * mpz module in the standard distribution, - `http://pike.ida.liu.se/' - -Prolog - * SWI Prolog `http://www.swi-prolog.org/' - Arbitrary precision floats. - -Python - * mpz module in the standard distribution, - `http://www.python.org/' - - * GMPY `http://gmpy.sourceforge.net/' - -Scheme - * GNU Guile (upcoming 1.8) - `http://www.gnu.org/software/guile/guile.html' - - * RScheme `http://www.rscheme.org/' - - * STklos `http://www.stklos.org/' - -Smalltalk - * GNU Smalltalk - `http://www.smalltalk.org/versions/GNUSmalltalk.html' - -Other - * Axiom `http://savannah.nongnu.org/projects/axiom' - Computer algebra using GCL. - - * DrGenius `http://drgenius.seul.org/' - Geometry system and mathematical programming language. - - * GiNaC `http://www.ginac.de/' - C++ computer algebra using CLN. - - * GOO `http://www.googoogaga.org/' - Dynamic object oriented language. - - * Maxima `http://www.ma.utexas.edu/users/wfs/maxima.html' - Macsyma computer algebra using GCL. - - * Q `http://q-lang.sourceforge.net/' - Equational programming system. - - * Regina `http://regina.sourceforge.net/' - Topological calculator. - - * Yacas `http://www.xs4all.nl/~apinkus/yacas.html' - Yet another computer algebra system. - - - -File: gmp.info, Node: Algorithms, Next: Internals, Prev: Language Bindings, Up: Top - -16 Algorithms -************* - -This chapter is an introduction to some of the algorithms used for -various GMP operations. The code is likely to be hard to understand -without knowing something about the algorithms. - - Some GMP internals are mentioned, but applications that expect to be -compatible with future GMP releases should take care to use only the -documented functions. - -* Menu: - -* Multiplication Algorithms:: -* Division Algorithms:: -* Greatest Common Divisor Algorithms:: -* Powering Algorithms:: -* Root Extraction Algorithms:: -* Radix Conversion Algorithms:: -* Other Algorithms:: -* Assembly Coding:: - - -File: gmp.info, Node: Multiplication Algorithms, Next: Division Algorithms, Prev: Algorithms, Up: Algorithms - -16.1 Multiplication -=================== - -NxN limb multiplications and squares are done using one of five -algorithms, as the size N increases. - - Algorithm Threshold - Basecase (none) - Karatsuba `MUL_TOOM22_THRESHOLD' - Toom-3 `MUL_TOOM33_THRESHOLD' - Toom-4 `MUL_TOOM44_THRESHOLD' - FFT `MUL_FFT_THRESHOLD' - - Similarly for squaring, with the `SQR' thresholds. - - NxM multiplications of operands with different sizes above -`MUL_TOOM22_THRESHOLD' are currently done by special Toom-inspired -algorithms or directly with FFT, depending on operand size (*note -Unbalanced Multiplication::). - -* Menu: - -* Basecase Multiplication:: -* Karatsuba Multiplication:: -* Toom 3-Way Multiplication:: -* Toom 4-Way Multiplication:: -* FFT Multiplication:: -* Other Multiplication:: -* Unbalanced Multiplication:: - - -File: gmp.info, Node: Basecase Multiplication, Next: Karatsuba Multiplication, Prev: Multiplication Algorithms, Up: Multiplication Algorithms - -16.1.1 Basecase Multiplication ------------------------------- - -Basecase NxM multiplication is a straightforward rectangular set of -cross-products, the same as long multiplication done by hand and for -that reason sometimes known as the schoolbook or grammar school method. -This is an O(N*M) algorithm. See Knuth section 4.3.1 algorithm M -(*note References::), and the `mpn/generic/mul_basecase.c' code. - - Assembly implementations of `mpn_mul_basecase' are essentially the -same as the generic C code, but have all the usual assembly tricks and -obscurities introduced for speed. - - A square can be done in roughly half the time of a multiply, by -using the fact that the cross products above and below the diagonal are -the same. A triangle of products below the diagonal is formed, doubled -(left shift by one bit), and then the products on the diagonal added. -This can be seen in `mpn/generic/sqr_basecase.c'. Again the assembly -implementations take essentially the same approach. - - u0 u1 u2 u3 u4 - +---+---+---+---+---+ - u0 | d | | | | | - +---+---+---+---+---+ - u1 | | d | | | | - +---+---+---+---+---+ - u2 | | | d | | | - +---+---+---+---+---+ - u3 | | | | d | | - +---+---+---+---+---+ - u4 | | | | | d | - +---+---+---+---+---+ - - In practice squaring isn't a full 2x faster than multiplying, it's -usually around 1.5x. Less than 1.5x probably indicates -`mpn_sqr_basecase' wants improving on that CPU. - - On some CPUs `mpn_mul_basecase' can be faster than the generic C -`mpn_sqr_basecase' on some small sizes. `SQR_BASECASE_THRESHOLD' is -the size at which to use `mpn_sqr_basecase', this will be zero if that -routine should be used always. - - -File: gmp.info, Node: Karatsuba Multiplication, Next: Toom 3-Way Multiplication, Prev: Basecase Multiplication, Up: Multiplication Algorithms - -16.1.2 Karatsuba Multiplication -------------------------------- - -The Karatsuba multiplication algorithm is described in Knuth section -4.3.3 part A, and various other textbooks. A brief description is -given here. - - The inputs x and y are treated as each split into two parts of equal -length (or the most significant part one limb shorter if N is odd). - - high low - +----------+----------+ - | x1 | x0 | - +----------+----------+ - - +----------+----------+ - | y1 | y0 | - +----------+----------+ - - Let b be the power of 2 where the split occurs, ie. if x0 is k limbs -(y0 the same) then b=2^(k*mp_bits_per_limb). With that x=x1*b+x0 and -y=y1*b+y0, and the following holds, - - x*y = (b^2+b)*x1*y1 - b*(x1-x0)*(y1-y0) + (b+1)*x0*y0 - - This formula means doing only three multiplies of (N/2)x(N/2) limbs, -whereas a basecase multiply of NxN limbs is equivalent to four -multiplies of (N/2)x(N/2). The factors (b^2+b) etc represent the -positions where the three products must be added. - - high low - +--------+--------+ +--------+--------+ - | x1*y1 | | x0*y0 | - +--------+--------+ +--------+--------+ - +--------+--------+ - add | x1*y1 | - +--------+--------+ - +--------+--------+ - add | x0*y0 | - +--------+--------+ - +--------+--------+ - sub | (x1-x0)*(y1-y0) | - +--------+--------+ - - The term (x1-x0)*(y1-y0) is best calculated as an absolute value, -and the sign used to choose to add or subtract. Notice the sum -high(x0*y0)+low(x1*y1) occurs twice, so it's possible to do 5*k limb -additions, rather than 6*k, but in GMP extra function call overheads -outweigh the saving. - - Squaring is similar to multiplying, but with x=y the formula reduces -to an equivalent with three squares, - - x^2 = (b^2+b)*x1^2 - b*(x1-x0)^2 + (b+1)*x0^2 - - The final result is accumulated from those three squares the same -way as for the three multiplies above. The middle term (x1-x0)^2 is now -always positive. - - A similar formula for both multiplying and squaring can be -constructed with a middle term (x1+x0)*(y1+y0). But those sums can -exceed k limbs, leading to more carry handling and additions than the -form above. - - Karatsuba multiplication is asymptotically an O(N^1.585) algorithm, -the exponent being log(3)/log(2), representing 3 multiplies each 1/2 -the size of the inputs. This is a big improvement over the basecase -multiply at O(N^2) and the advantage soon overcomes the extra additions -Karatsuba performs. `MUL_TOOM22_THRESHOLD' can be as little as 10 -limbs. The `SQR' threshold is usually about twice the `MUL'. - - The basecase algorithm will take a time of the form M(N) = a*N^2 + -b*N + c and the Karatsuba algorithm K(N) = 3*M(N/2) + d*N + e, which -expands to K(N) = 3/4*a*N^2 + 3/2*b*N + 3*c + d*N + e. The factor 3/4 -for a means per-crossproduct speedups in the basecase code will -increase the threshold since they benefit M(N) more than K(N). And -conversely the 3/2 for b means linear style speedups of b will increase -the threshold since they benefit K(N) more than M(N). The latter can -be seen for instance when adding an optimized `mpn_sqr_diagonal' to -`mpn_sqr_basecase'. Of course all speedups reduce total time, and in -that sense the algorithm thresholds are merely of academic interest. - - -File: gmp.info, Node: Toom 3-Way Multiplication, Next: Toom 4-Way Multiplication, Prev: Karatsuba Multiplication, Up: Multiplication Algorithms - -16.1.3 Toom 3-Way Multiplication --------------------------------- - -The Karatsuba formula is the simplest case of a general approach to -splitting inputs that leads to both Toom and FFT algorithms. A -description of Toom can be found in Knuth section 4.3.3, with an -example 3-way calculation after Theorem A. The 3-way form used in GMP -is described here. - - The operands are each considered split into 3 pieces of equal length -(or the most significant part 1 or 2 limbs shorter than the other two). - - high low - +----------+----------+----------+ - | x2 | x1 | x0 | - +----------+----------+----------+ - - +----------+----------+----------+ - | y2 | y1 | y0 | - +----------+----------+----------+ - -These parts are treated as the coefficients of two polynomials - - X(t) = x2*t^2 + x1*t + x0 - Y(t) = y2*t^2 + y1*t + y0 - - Let b equal the power of 2 which is the size of the x0, x1, y0 and -y1 pieces, ie. if they're k limbs each then b=2^(k*mp_bits_per_limb). -With this x=X(b) and y=Y(b). - - Let a polynomial W(t)=X(t)*Y(t) and suppose its coefficients are - - W(t) = w4*t^4 + w3*t^3 + w2*t^2 + w1*t + w0 - - The w[i] are going to be determined, and when they are they'll give -the final result using w=W(b), since x*y=X(b)*Y(b)=W(b). The -coefficients will be roughly b^2 each, and the final W(b) will be an -addition like, - - high low - +-------+-------+ - | w4 | - +-------+-------+ - +--------+-------+ - | w3 | - +--------+-------+ - +--------+-------+ - | w2 | - +--------+-------+ - +--------+-------+ - | w1 | - +--------+-------+ - +-------+-------+ - | w0 | - +-------+-------+ - - The w[i] coefficients could be formed by a simple set of cross -products, like w4=x2*y2, w3=x2*y1+x1*y2, w2=x2*y0+x1*y1+x0*y2 etc, but -this would need all nine x[i]*y[j] for i,j=0,1,2, and would be -equivalent merely to a basecase multiply. Instead the following -approach is used. - - X(t) and Y(t) are evaluated and multiplied at 5 points, giving -values of W(t) at those points. In GMP the following points are used, - - Point Value - t=0 x0 * y0, which gives w0 immediately - t=1 (x2+x1+x0) * (y2+y1+y0) - t=-1 (x2-x1+x0) * (y2-y1+y0) - t=2 (4*x2+2*x1+x0) * (4*y2+2*y1+y0) - t=inf x2 * y2, which gives w4 immediately - - At t=-1 the values can be negative and that's handled using the -absolute values and tracking the sign separately. At t=inf the value -is actually X(t)*Y(t)/t^4 in the limit as t approaches infinity, but -it's much easier to think of as simply x2*y2 giving w4 immediately -(much like x0*y0 at t=0 gives w0 immediately). - - Each of the points substituted into W(t)=w4*t^4+...+w0 gives a -linear combination of the w[i] coefficients, and the value of those -combinations has just been calculated. - - W(0) = w0 - W(1) = w4 + w3 + w2 + w1 + w0 - W(-1) = w4 - w3 + w2 - w1 + w0 - W(2) = 16*w4 + 8*w3 + 4*w2 + 2*w1 + w0 - W(inf) = w4 - - This is a set of five equations in five unknowns, and some -elementary linear algebra quickly isolates each w[i]. This involves -adding or subtracting one W(t) value from another, and a couple of -divisions by powers of 2 and one division by 3, the latter using the -special `mpn_divexact_by3' (*note Exact Division::). - - The conversion of W(t) values to the coefficients is interpolation. -A polynomial of degree 4 like W(t) is uniquely determined by values -known at 5 different points. The points are arbitrary and can be -chosen to make the linear equations come out with a convenient set of -steps for quickly isolating the w[i]. - - Squaring follows the same procedure as multiplication, but there's -only one X(t) and it's evaluated at the 5 points, and those values -squared to give values of W(t). The interpolation is then identical, -and in fact the same `toom3_interpolate' subroutine is used for both -squaring and multiplying. - - Toom-3 is asymptotically O(N^1.465), the exponent being -log(5)/log(3), representing 5 recursive multiplies of 1/3 the original -size each. This is an improvement over Karatsuba at O(N^1.585), though -Toom does more work in the evaluation and interpolation and so it only -realizes its advantage above a certain size. - - Near the crossover between Toom-3 and Karatsuba there's generally a -range of sizes where the difference between the two is small. -`MUL_TOOM33_THRESHOLD' is a somewhat arbitrary point in that range and -successive runs of the tune program can give different values due to -small variations in measuring. A graph of time versus size for the two -shows the effect, see `tune/README'. - - At the fairly small sizes where the Toom-3 thresholds occur it's -worth remembering that the asymptotic behaviour for Karatsuba and -Toom-3 can't be expected to make accurate predictions, due of course to -the big influence of all sorts of overheads, and the fact that only a -few recursions of each are being performed. Even at large sizes -there's a good chance machine dependent effects like cache architecture -will mean actual performance deviates from what might be predicted. - - The formula given for the Karatsuba algorithm (*note Karatsuba -Multiplication::) has an equivalent for Toom-3 involving only five -multiplies, but this would be complicated and unenlightening. - - An alternate view of Toom-3 can be found in Zuras (*note -References::), using a vector to represent the x and y splits and a -matrix multiplication for the evaluation and interpolation stages. The -matrix inverses are not meant to be actually used, and they have -elements with values much greater than in fact arise in the -interpolation steps. The diagram shown for the 3-way is attractive, -but again doesn't have to be implemented that way and for example with -a bit of rearrangement just one division by 6 can be done. - - -File: gmp.info, Node: Toom 4-Way Multiplication, Next: FFT Multiplication, Prev: Toom 3-Way Multiplication, Up: Multiplication Algorithms - -16.1.4 Toom 4-Way Multiplication --------------------------------- - -Karatsuba and Toom-3 split the operands into 2 and 3 coefficients, -respectively. Toom-4 analogously splits the operands into 4 -coefficients. Using the notation from the section on Toom-3 -multiplication, we form two polynomials: - - X(t) = x3*t^3 + x2*t^2 + x1*t + x0 - Y(t) = y3*t^3 + y2*t^2 + y1*t + y0 - - X(t) and Y(t) are evaluated and multiplied at 7 points, giving -values of W(t) at those points. In GMP the following points are used, - - Point Value - t=0 x0 * y0, which gives w0 immediately - t=1/2 (x3+2*x2+4*x1+8*x0) * (y3+2*y2+4*y1+8*y0) - t=-1/2 (-x3+2*x2-4*x1+8*x0) * (-y3+2*y2-4*y1+8*y0) - t=1 (x3+x2+x1+x0) * (y3+y2+y1+y0) - t=-1 (-x3+x2-x1+x0) * (-y3+y2-y1+y0) - t=2 (8*x3+4*x2+2*x1+x0) * (8*y3+4*y2+2*y1+y0) - t=inf x3 * y3, which gives w6 immediately - - The number of additions and subtractions for Toom-4 is much larger -than for Toom-3. But several subexpressions occur multiple times, for -example x2+x0, occurs for both t=1 and t=-1. - - Toom-4 is asymptotically O(N^1.404), the exponent being -log(7)/log(4), representing 7 recursive multiplies of 1/4 the original -size each. - - -File: gmp.info, Node: FFT Multiplication, Next: Other Multiplication, Prev: Toom 4-Way Multiplication, Up: Multiplication Algorithms - -16.1.5 FFT Multiplication -------------------------- - -At large to very large sizes a Fermat style FFT multiplication is used, -following Scho"nhage and Strassen (*note References::). Descriptions -of FFTs in various forms can be found in many textbooks, for instance -Knuth section 4.3.3 part C or Lipson chapter IX. A brief description -of the form used in GMP is given here. - - The multiplication done is x*y mod 2^N+1, for a given N. A full -product x*y is obtained by choosing N>=bits(x)+bits(y) and padding x -and y with high zero limbs. The modular product is the native form for -the algorithm, so padding to get a full product is unavoidable. - - The algorithm follows a split, evaluate, pointwise multiply, -interpolate and combine similar to that described above for Karatsuba -and Toom-3. A k parameter controls the split, with an FFT-k splitting -into 2^k pieces of M=N/2^k bits each. N must be a multiple of -(2^k)*mp_bits_per_limb so the split falls on limb boundaries, avoiding -bit shifts in the split and combine stages. - - The evaluations, pointwise multiplications, and interpolation, are -all done modulo 2^N'+1 where N' is 2M+k+3 rounded up to a multiple of -2^k and of `mp_bits_per_limb'. The results of interpolation will be -the following negacyclic convolution of the input pieces, and the -choice of N' ensures these sums aren't truncated. - - --- - \ b - w[n] = / (-1) * x[i] * y[j] - --- - i+j==b*2^k+n - b=0,1 - - The points used for the evaluation are g^i for i=0 to 2^k-1 where -g=2^(2N'/2^k). g is a 2^k'th root of unity mod 2^N'+1, which produces -necessary cancellations at the interpolation stage, and it's also a -power of 2 so the fast Fourier transforms used for the evaluation and -interpolation do only shifts, adds and negations. - - The pointwise multiplications are done modulo 2^N'+1 and either -recurse into a further FFT or use a plain multiplication (Toom-3, -Karatsuba or basecase), whichever is optimal at the size N'. The -interpolation is an inverse fast Fourier transform. The resulting set -of sums of x[i]*y[j] are added at appropriate offsets to give the final -result. - - Squaring is the same, but x is the only input so it's one transform -at the evaluate stage and the pointwise multiplies are squares. The -interpolation is the same. - - For a mod 2^N+1 product, an FFT-k is an O(N^(k/(k-1))) algorithm, -the exponent representing 2^k recursed modular multiplies each -1/2^(k-1) the size of the original. Each successive k is an asymptotic -improvement, but overheads mean each is only faster at bigger and -bigger sizes. In the code, `MUL_FFT_TABLE' and `SQR_FFT_TABLE' are the -thresholds where each k is used. Each new k effectively swaps some -multiplying for some shifts, adds and overheads. - - A mod 2^N+1 product can be formed with a normal NxN->2N bit multiply -plus a subtraction, so an FFT and Toom-3 etc can be compared directly. -A k=4 FFT at O(N^1.333) can be expected to be the first faster than -Toom-3 at O(N^1.465). In practice this is what's found, with -`MUL_FFT_MODF_THRESHOLD' and `SQR_FFT_MODF_THRESHOLD' being between 300 -and 1000 limbs, depending on the CPU. So far it's been found that only -very large FFTs recurse into pointwise multiplies above these sizes. - - When an FFT is to give a full product, the change of N to 2N doesn't -alter the theoretical complexity for a given k, but for the purposes of -considering where an FFT might be first used it can be assumed that the -FFT is recursing into a normal multiply and that on that basis it's -doing 2^k recursed multiplies each 1/2^(k-2) the size of the inputs, -making it O(N^(k/(k-2))). This would mean k=7 at O(N^1.4) would be the -first FFT faster than Toom-3. In practice `MUL_FFT_THRESHOLD' and -`SQR_FFT_THRESHOLD' have been found to be in the k=8 range, somewhere -between 3000 and 10000 limbs. - - The way N is split into 2^k pieces and then 2M+k+3 is rounded up to -a multiple of 2^k and `mp_bits_per_limb' means that when -2^k>=mp_bits_per_limb the effective N is a multiple of 2^(2k-1) bits. -The +k+3 means some values of N just under such a multiple will be -rounded to the next. The complexity calculations above assume that a -favourable size is used, meaning one which isn't padded through -rounding, and it's also assumed that the extra +k+3 bits are negligible -at typical FFT sizes. - - The practical effect of the 2^(2k-1) constraint is to introduce a -step-effect into measured speeds. For example k=8 will round N up to a -multiple of 32768 bits, so for a 32-bit limb there'll be 512 limb -groups of sizes for which `mpn_mul_n' runs at the same speed. Or for -k=9 groups of 2048 limbs, k=10 groups of 8192 limbs, etc. In practice -it's been found each k is used at quite small multiples of its size -constraint and so the step effect is quite noticeable in a time versus -size graph. - - The threshold determinations currently measure at the mid-points of -size steps, but this is sub-optimal since at the start of a new step it -can happen that it's better to go back to the previous k for a while. -Something more sophisticated for `MUL_FFT_TABLE' and `SQR_FFT_TABLE' -will be needed. - - -File: gmp.info, Node: Other Multiplication, Next: Unbalanced Multiplication, Prev: FFT Multiplication, Up: Multiplication Algorithms - -16.1.6 Other Multiplication ---------------------------- - -The Toom algorithms described above (*note Toom 3-Way Multiplication::, -*note Toom 4-Way Multiplication::) generalizes to split into an -arbitrary number of pieces, as per Knuth section 4.3.3 algorithm C. -This is not currently used. The notes here are merely for interest. - - In general a split into r+1 pieces is made, and evaluations and -pointwise multiplications done at 2*r+1 points. A 4-way split does 7 -pointwise multiplies, 5-way does 9, etc. Asymptotically an (r+1)-way -algorithm is O(N^(log(2*r+1)/log(r+1))). Only the pointwise -multiplications count towards big-O complexity, but the time spent in -the evaluate and interpolate stages grows with r and has a significant -practical impact, with the asymptotic advantage of each r realized only -at bigger and bigger sizes. The overheads grow as O(N*r), whereas in -an r=2^k FFT they grow only as O(N*log(r)). - - Knuth algorithm C evaluates at points 0,1,2,...,2*r, but exercise 4 -uses -r,...,0,...,r and the latter saves some small multiplies in the -evaluate stage (or rather trades them for additions), and has a further -saving of nearly half the interpolate steps. The idea is to separate -odd and even final coefficients and then perform algorithm C steps C7 -and C8 on them separately. The divisors at step C7 become j^2 and the -multipliers at C8 become 2*t*j-j^2. - - Splitting odd and even parts through positive and negative points -can be thought of as using -1 as a square root of unity. If a 4th root -of unity was available then a further split and speedup would be -possible, but no such root exists for plain integers. Going to complex -integers with i=sqrt(-1) doesn't help, essentially because in Cartesian -form it takes three real multiplies to do a complex multiply. The -existence of 2^k'th roots of unity in a suitable ring or field lets the -fast Fourier transform keep splitting and get to O(N*log(r)). - - Floating point FFTs use complex numbers approximating Nth roots of -unity. Some processors have special support for such FFTs. But these -are not used in GMP since it's very difficult to guarantee an exact -result (to some number of bits). An occasional difference of 1 in the -last bit might not matter to a typical signal processing algorithm, but -is of course of vital importance to GMP. - - -File: gmp.info, Node: Unbalanced Multiplication, Prev: Other Multiplication, Up: Multiplication Algorithms - -16.1.7 Unbalanced Multiplication --------------------------------- - -Multiplication of operands with different sizes, both below -`MUL_TOOM22_THRESHOLD' are done with plain schoolbook multiplication -(*note Basecase Multiplication::). - - For really large operands, we invoke FFT directly. - - For operands between these sizes, we use Toom inspired algorithms -suggested by Alberto Zanoni and Marco Bodrato. The idea is to split -the operands into polynomials of different degree. GMP currently -splits the smaller operand onto 2 coefficients, i.e., a polynomial of -degree 1, but the larger operand can be split into 2, 3, or 4 -coefficients, i.e., a polynomial of degree 1 to 3. - - -File: gmp.info, Node: Division Algorithms, Next: Greatest Common Divisor Algorithms, Prev: Multiplication Algorithms, Up: Algorithms - -16.2 Division Algorithms -======================== - -* Menu: - -* Single Limb Division:: -* Basecase Division:: -* Divide and Conquer Division:: -* Block-Wise Barrett Division:: -* Exact Division:: -* Exact Remainder:: -* Small Quotient Division:: - - -File: gmp.info, Node: Single Limb Division, Next: Basecase Division, Prev: Division Algorithms, Up: Division Algorithms - -16.2.1 Single Limb Division ---------------------------- - -Nx1 division is implemented using repeated 2x1 divisions from high to -low, either with a hardware divide instruction or a multiplication by -inverse, whichever is best on a given CPU. - - The multiply by inverse follows "Improved division by invariant -integers" by Mo"ller and Granlund (*note References::) and is -implemented as `udiv_qrnnd_preinv' in `gmp-impl.h'. The idea is to -have a fixed-point approximation to 1/d (see `invert_limb') and then -multiply by the high limb (plus one bit) of the dividend to get a -quotient q. With d normalized (high bit set), q is no more than 1 too -small. Subtracting q*d from the dividend gives a remainder, and -reveals whether q or q-1 is correct. - - The result is a division done with two multiplications and four or -five arithmetic operations. On CPUs with low latency multipliers this -can be much faster than a hardware divide, though the cost of -calculating the inverse at the start may mean it's only better on -inputs bigger than say 4 or 5 limbs. - - When a divisor must be normalized, either for the generic C -`__udiv_qrnnd_c' or the multiply by inverse, the division performed is -actually a*2^k by d*2^k where a is the dividend and k is the power -necessary to have the high bit of d*2^k set. The bit shifts for the -dividend are usually accomplished "on the fly" meaning by extracting -the appropriate bits at each step. Done this way the quotient limbs -come out aligned ready to store. When only the remainder is wanted, an -alternative is to take the dividend limbs unshifted and calculate r = a -mod d*2^k followed by an extra final step r*2^k mod d*2^k. This can -help on CPUs with poor bit shifts or few registers. - - The multiply by inverse can be done two limbs at a time. The -calculation is basically the same, but the inverse is two limbs and the -divisor treated as if padded with a low zero limb. This means more -work, since the inverse will need a 2x2 multiply, but the four 1x1s to -do that are independent and can therefore be done partly or wholly in -parallel. Likewise for a 2x1 calculating q*d. The net effect is to -process two limbs with roughly the same two multiplies worth of latency -that one limb at a time gives. This extends to 3 or 4 limbs at a time, -though the extra work to apply the inverse will almost certainly soon -reach the limits of multiplier throughput. - - A similar approach in reverse can be taken to process just half a -limb at a time if the divisor is only a half limb. In this case the -1x1 multiply for the inverse effectively becomes two (1/2)x1 for each -limb, which can be a saving on CPUs with a fast half limb multiply, or -in fact if the only multiply is a half limb, and especially if it's not -pipelined. - - -File: gmp.info, Node: Basecase Division, Next: Divide and Conquer Division, Prev: Single Limb Division, Up: Division Algorithms - -16.2.2 Basecase Division ------------------------- - -Basecase NxM division is like long division done by hand, but in base -2^mp_bits_per_limb. See Knuth section 4.3.1 algorithm D, and -`mpn/generic/sb_divrem_mn.c'. - - Briefly stated, while the dividend remains larger than the divisor, -a high quotient limb is formed and the Nx1 product q*d subtracted at -the top end of the dividend. With a normalized divisor (most -significant bit set), each quotient limb can be formed with a 2x1 -division and a 1x1 multiplication plus some subtractions. The 2x1 -division is by the high limb of the divisor and is done either with a -hardware divide or a multiply by inverse (the same as in *Note Single -Limb Division::) whichever is faster. Such a quotient is sometimes one -too big, requiring an addback of the divisor, but that happens rarely. - - With Q=N-M being the number of quotient limbs, this is an O(Q*M) -algorithm and will run at a speed similar to a basecase QxM -multiplication, differing in fact only in the extra multiply and divide -for each of the Q quotient limbs. - - -File: gmp.info, Node: Divide and Conquer Division, Next: Block-Wise Barrett Division, Prev: Basecase Division, Up: Division Algorithms - -16.2.3 Divide and Conquer Division ----------------------------------- - -For divisors larger than `DC_DIV_QR_THRESHOLD', division is done by -dividing. Or to be precise by a recursive divide and conquer algorithm -based on work by Moenck and Borodin, Jebelean, and Burnikel and Ziegler -(*note References::). - - The algorithm consists essentially of recognising that a 2NxN -division can be done with the basecase division algorithm (*note -Basecase Division::), but using N/2 limbs as a base, not just a single -limb. This way the multiplications that arise are (N/2)x(N/2) and can -take advantage of Karatsuba and higher multiplication algorithms (*note -Multiplication Algorithms::). The two "digits" of the quotient are -formed by recursive Nx(N/2) divisions. - - If the (N/2)x(N/2) multiplies are done with a basecase multiplication -then the work is about the same as a basecase division, but with more -function call overheads and with some subtractions separated from the -multiplies. These overheads mean that it's only when N/2 is above -`MUL_TOOM22_THRESHOLD' that divide and conquer is of use. - - `DC_DIV_QR_THRESHOLD' is based on the divisor size N, so it will be -somewhere above twice `MUL_TOOM22_THRESHOLD', but how much above -depends on the CPU. An optimized `mpn_mul_basecase' can lower -`DC_DIV_QR_THRESHOLD' a little by offering a ready-made advantage over -repeated `mpn_submul_1' calls. - - Divide and conquer is asymptotically O(M(N)*log(N)) where M(N) is -the time for an NxN multiplication done with FFTs. The actual time is -a sum over multiplications of the recursed sizes, as can be seen near -the end of section 2.2 of Burnikel and Ziegler. For example, within -the Toom-3 range, divide and conquer is 2.63*M(N). With higher -algorithms the M(N) term improves and the multiplier tends to log(N). -In practice, at moderate to large sizes, a 2NxN division is about 2 to -4 times slower than an NxN multiplication. - - -File: gmp.info, Node: Block-Wise Barrett Division, Next: Exact Division, Prev: Divide and Conquer Division, Up: Division Algorithms - -16.2.4 Block-Wise Barrett Division ----------------------------------- - -For the largest divisions, a block-wise Barrett division algorithm is -used. Here, the divisor is inverted to a precision determined by the -relative size of the dividend and divisor. Blocks of quotient limbs -are then generated by multiplying blocks from the dividend by the -inverse. - - Our block-wise algorithm computes a smaller inverse than in the -plain Barrett algorithm. For a 2n/n division, the inverse will be just -ceil(n/2) limbs. - - -File: gmp.info, Node: Exact Division, Next: Exact Remainder, Prev: Block-Wise Barrett Division, Up: Division Algorithms - -16.2.5 Exact Division ---------------------- - -A so-called exact division is when the dividend is known to be an exact -multiple of the divisor. Jebelean's exact division algorithm uses this -knowledge to make some significant optimizations (*note References::). - - The idea can be illustrated in decimal for example with 368154 -divided by 543. Because the low digit of the dividend is 4, the low -digit of the quotient must be 8. This is arrived at from 4*7 mod 10, -using the fact 7 is the modular inverse of 3 (the low digit of the -divisor), since 3*7 == 1 mod 10. So 8*543=4344 can be subtracted from -the dividend leaving 363810. Notice the low digit has become zero. - - The procedure is repeated at the second digit, with the next -quotient digit 7 (7 == 1*7 mod 10), subtracting 7*543=3801, leaving -325800. And finally at the third digit with quotient digit 6 (8*7 mod -10), subtracting 6*543=3258 leaving 0. So the quotient is 678. - - Notice however that the multiplies and subtractions don't need to -extend past the low three digits of the dividend, since that's enough -to determine the three quotient digits. For the last quotient digit no -subtraction is needed at all. On a 2NxN division like this one, only -about half the work of a normal basecase division is necessary. - - For an NxM exact division producing Q=N-M quotient limbs, the saving -over a normal basecase division is in two parts. Firstly, each of the -Q quotient limbs needs only one multiply, not a 2x1 divide and -multiply. Secondly, the crossproducts are reduced when Q>M to -Q*M-M*(M+1)/2, or when Q<=M to Q*(Q-1)/2. Notice the savings are -complementary. If Q is big then many divisions are saved, or if Q is -small then the crossproducts reduce to a small number. - - The modular inverse used is calculated efficiently by `binvert_limb' -in `gmp-impl.h'. This does four multiplies for a 32-bit limb, or six -for a 64-bit limb. `tune/modlinv.c' has some alternate implementations -that might suit processors better at bit twiddling than multiplying. - - The sub-quadratic exact division described by Jebelean in "Exact -Division with Karatsuba Complexity" is not currently implemented. It -uses a rearrangement similar to the divide and conquer for normal -division (*note Divide and Conquer Division::), but operating from low -to high. A further possibility not currently implemented is -"Bidirectional Exact Integer Division" by Krandick and Jebelean which -forms quotient limbs from both the high and low ends of the dividend, -and can halve once more the number of crossproducts needed in a 2NxN -division. - - A special case exact division by 3 exists in `mpn_divexact_by3', -supporting Toom-3 multiplication and `mpq' canonicalizations. It forms -quotient digits with a multiply by the modular inverse of 3 (which is -`0xAA..AAB') and uses two comparisons to determine a borrow for the next -limb. The multiplications don't need to be on the dependent chain, as -long as the effect of the borrows is applied, which can help chips with -pipelined multipliers. - - -File: gmp.info, Node: Exact Remainder, Next: Small Quotient Division, Prev: Exact Division, Up: Division Algorithms - -16.2.6 Exact Remainder ----------------------- - -If the exact division algorithm is done with a full subtraction at each -stage and the dividend isn't a multiple of the divisor, then low zero -limbs are produced but with a remainder in the high limbs. For -dividend a, divisor d, quotient q, and b = 2^mp_bits_per_limb, this -remainder r is of the form - - a = q*d + r*b^n - - n represents the number of zero limbs produced by the subtractions, -that being the number of limbs produced for q. r will be in the range -0<=rb*r+u2 condition appropriately relaxed. - - -File: gmp.info, Node: Greatest Common Divisor Algorithms, Next: Powering Algorithms, Prev: Division Algorithms, Up: Algorithms - -16.3 Greatest Common Divisor -============================ - -* Menu: - -* Binary GCD:: -* Lehmer's Algorithm:: -* Subquadratic GCD:: -* Extended GCD:: -* Jacobi Symbol:: - - -File: gmp.info, Node: Binary GCD, Next: Lehmer's Algorithm, Prev: Greatest Common Divisor Algorithms, Up: Greatest Common Divisor Algorithms - -16.3.1 Binary GCD ------------------ - -At small sizes GMP uses an O(N^2) binary style GCD. This is described -in many textbooks, for example Knuth section 4.5.2 algorithm B. It -simply consists of successively reducing odd operands a and b using - - a,b = abs(a-b),min(a,b) - strip factors of 2 from a - - The Euclidean GCD algorithm, as per Knuth algorithms E and A, -repeatedly computes the quotient q = floor(a/b) and replaces a,b by v, -u - q v. The binary algorithm has so far been found to be faster than -the Euclidean algorithm everywhere. One reason the binary method does -well is that the implied quotient at each step is usually small, so -often only one or two subtractions are needed to get the same effect as -a division. Quotients 1, 2 and 3 for example occur 67.7% of the time, -see Knuth section 4.5.3 Theorem E. - - When the implied quotient is large, meaning b is much smaller than -a, then a division is worthwhile. This is the basis for the initial a -mod b reductions in `mpn_gcd' and `mpn_gcd_1' (the latter for both Nx1 -and 1x1 cases). But after that initial reduction, big quotients occur -too rarely to make it worth checking for them. - - - The final 1x1 GCD in `mpn_gcd_1' is done in the generic C code as -described above. For two N-bit operands, the algorithm takes about -0.68 iterations per bit. For optimum performance some attention needs -to be paid to the way the factors of 2 are stripped from a. - - Firstly it may be noted that in twos complement the number of low -zero bits on a-b is the same as b-a, so counting or testing can begin on -a-b without waiting for abs(a-b) to be determined. - - A loop stripping low zero bits tends not to branch predict well, -since the condition is data dependent. But on average there's only a -few low zeros, so an option is to strip one or two bits arithmetically -then loop for more (as done for AMD K6). Or use a lookup table to get -a count for several bits then loop for more (as done for AMD K7). An -alternative approach is to keep just one of a or b odd and iterate - - a,b = abs(a-b), min(a,b) - a = a/2 if even - b = b/2 if even - - This requires about 1.25 iterations per bit, but stripping of a -single bit at each step avoids any branching. Repeating the bit strip -reduces to about 0.9 iterations per bit, which may be a worthwhile -tradeoff. - - Generally with the above approaches a speed of perhaps 6 cycles per -bit can be achieved, which is still not terribly fast with for instance -a 64-bit GCD taking nearly 400 cycles. It's this sort of time which -means it's not usually advantageous to combine a set of divisibility -tests into a GCD. - - Currently, the binary algorithm is used for GCD only when N < 3. - - -File: gmp.info, Node: Lehmer's Algorithm, Next: Subquadratic GCD, Prev: Binary GCD, Up: Greatest Common Divisor Algorithms - -16.3.2 Lehmer's algorithm -------------------------- - -Lehmer's improvement of the Euclidean algorithms is based on the -observation that the initial part of the quotient sequence depends only -on the most significant parts of the inputs. The variant of Lehmer's -algorithm used in GMP splits off the most significant two limbs, as -suggested, e.g., in "A Double-Digit Lehmer-Euclid Algorithm" by -Jebelean (*note References::). The quotients of two double-limb inputs -are collected as a 2 by 2 matrix with single-limb elements. This is -done by the function `mpn_hgcd2'. The resulting matrix is applied to -the inputs using `mpn_mul_1' and `mpn_submul_1'. Each iteration usually -reduces the inputs by almost one limb. In the rare case of a large -quotient, no progress can be made by examining just the most -significant two limbs, and the quotient is computing using plain -division. - - The resulting algorithm is asymptotically O(N^2), just as the -Euclidean algorithm and the binary algorithm. The quadratic part of the -work are the calls to `mpn_mul_1' and `mpn_submul_1'. For small sizes, -the linear work is also significant. There are roughly N calls to the -`mpn_hgcd2' function. This function uses a couple of important -optimizations: - - * It uses the same relaxed notion of correctness as `mpn_hgcd' (see - next section). This means that when called with the most - significant two limbs of two large numbers, the returned matrix - does not always correspond exactly to the initial quotient - sequence for the two large numbers; the final quotient may - sometimes be one off. - - * It takes advantage of the fact the quotients are usually small. - The division operator is not used, since the corresponding - assembler instruction is very slow on most architectures. (This - code could probably be improved further, it uses many branches - that are unfriendly to prediction). - - * It switches from double-limb calculations to single-limb - calculations half-way through, when the input numbers have been - reduced in size from two limbs to one and a half. - - - -File: gmp.info, Node: Subquadratic GCD, Next: Extended GCD, Prev: Lehmer's Algorithm, Up: Greatest Common Divisor Algorithms - -16.3.3 Subquadratic GCD ------------------------ - -For inputs larger than `GCD_DC_THRESHOLD', GCD is computed via the HGCD -(Half GCD) function, as a generalization to Lehmer's algorithm. - - Let the inputs a,b be of size N limbs each. Put S = floor(N/2) + 1. -Then HGCD(a,b) returns a transformation matrix T with non-negative -elements, and reduced numbers (c;d) = T^-1 (a;b). The reduced numbers -c,d must be larger than S limbs, while their difference abs(c-d) must -fit in S limbs. The matrix elements will also be of size roughly N/2. - - The HGCD base case uses Lehmer's algorithm, but with the above stop -condition that returns reduced numbers and the corresponding -transformation matrix half-way through. For inputs larger than -`HGCD_THRESHOLD', HGCD is computed recursively, using the divide and -conquer algorithm in "On Scho"nhage's algorithm and subquadratic -integer GCD computation" by Mo"ller (*note References::). The recursive -algorithm consists of these main steps. - - * Call HGCD recursively, on the most significant N/2 limbs. Apply the - resulting matrix T_1 to the full numbers, reducing them to a size - just above 3N/2. - - * Perform a small number of division or subtraction steps to reduce - the numbers to size below 3N/2. This is essential mainly for the - unlikely case of large quotients. - - * Call HGCD recursively, on the most significant N/2 limbs of the - reduced numbers. Apply the resulting matrix T_2 to the full - numbers, reducing them to a size just above N/2. - - * Compute T = T_1 T_2. - - * Perform a small number of division and subtraction steps to - satisfy the requirements, and return. - - GCD is then implemented as a loop around HGCD, similarly to Lehmer's -algorithm. Where Lehmer repeatedly chops off the top two limbs, calls -`mpn_hgcd2', and applies the resulting matrix to the full numbers, the -subquadratic GCD chops off the most significant third of the limbs (the -proportion is a tuning parameter, and 1/3 seems to be more efficient -than, e.g, 1/2), calls `mpn_hgcd', and applies the resulting matrix. -Once the input numbers are reduced to size below `GCD_DC_THRESHOLD', -Lehmer's algorithm is used for the rest of the work. - - The asymptotic running time of both HGCD and GCD is O(M(N)*log(N)), -where M(N) is the time for multiplying two N-limb numbers. - - -File: gmp.info, Node: Extended GCD, Next: Jacobi Symbol, Prev: Subquadratic GCD, Up: Greatest Common Divisor Algorithms - -16.3.4 Extended GCD -------------------- - -The extended GCD function, or GCDEXT, calculates gcd(a,b) and also -cofactors x and y satisfying a*x+b*y=gcd(a,b). All the algorithms used -for plain GCD are extended to handle this case. The binary algorithm is -used only for single-limb GCDEXT. Lehmer's algorithm is used for sizes -up to `GCDEXT_DC_THRESHOLD'. Above this threshold, GCDEXT is -implemented as a loop around HGCD, but with more book-keeping to keep -track of the cofactors. This gives the same asymptotic running time as -for GCD and HGCD, O(M(N)*log(N)) - - One difference to plain GCD is that while the inputs a and b are -reduced as the algorithm proceeds, the cofactors x and y grow in size. -This makes the tuning of the chopping-point more difficult. The current -code chops off the most significant half of the inputs for the call to -HGCD in the first iteration, and the most significant two thirds for -the remaining calls. This strategy could surely be improved. Also the -stop condition for the loop, where Lehmer's algorithm is invoked once -the inputs are reduced below `GCDEXT_DC_THRESHOLD', could maybe be -improved by taking into account the current size of the cofactors. - - -File: gmp.info, Node: Jacobi Symbol, Prev: Extended GCD, Up: Greatest Common Divisor Algorithms - -16.3.5 Jacobi Symbol --------------------- - -`mpz_jacobi' and `mpz_kronecker' are currently implemented with a -simple binary algorithm similar to that described for the GCDs (*note -Binary GCD::). They're not very fast when both inputs are large. -Lehmer's multi-step improvement or a binary based multi-step algorithm -is likely to be better. - - When one operand fits a single limb, and that includes -`mpz_kronecker_ui' and friends, an initial reduction is done with -either `mpn_mod_1' or `mpn_modexact_1_odd', followed by the binary -algorithm on a single limb. The binary algorithm is well suited to a -single limb, and the whole calculation in this case is quite efficient. - - In all the routines sign changes for the result are accumulated -using some bit twiddling, avoiding table lookups or conditional jumps. - diff --git a/misc/builddeps/linux64/gmp/share/info/gmp.info-2 b/misc/builddeps/linux64/gmp/share/info/gmp.info-2 deleted file mode 100644 index 45846232..00000000 --- a/misc/builddeps/linux64/gmp/share/info/gmp.info-2 +++ /dev/null @@ -1,3489 +0,0 @@ -This is ../../gmp/doc/gmp.info, produced by makeinfo version 4.8 from -../../gmp/doc/gmp.texi. - - This manual describes how to install and use the GNU multiple -precision arithmetic library, version 5.0.1. - - Copyright 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free -Software Foundation, Inc. - - Permission is granted to copy, distribute and/or modify this -document under the terms of the GNU Free Documentation License, Version -1.3 or any later version published by the Free Software Foundation; -with no Invariant Sections, with the Front-Cover Texts being "A GNU -Manual", and with the Back-Cover Texts being "You have freedom to copy -and modify this GNU Manual, like GNU software". A copy of the license -is included in *Note GNU Free Documentation License::. - -INFO-DIR-SECTION GNU libraries -START-INFO-DIR-ENTRY -* gmp: (gmp). GNU Multiple Precision Arithmetic Library. -END-INFO-DIR-ENTRY - - -File: gmp.info, Node: Powering Algorithms, Next: Root Extraction Algorithms, Prev: Greatest Common Divisor Algorithms, Up: Algorithms - -16.4 Powering Algorithms -======================== - -* Menu: - -* Normal Powering Algorithm:: -* Modular Powering Algorithm:: - - -File: gmp.info, Node: Normal Powering Algorithm, Next: Modular Powering Algorithm, Prev: Powering Algorithms, Up: Powering Algorithms - -16.4.1 Normal Powering ----------------------- - -Normal `mpz' or `mpf' powering uses a simple binary algorithm, -successively squaring and then multiplying by the base when a 1 bit is -seen in the exponent, as per Knuth section 4.6.3. The "left to right" -variant described there is used rather than algorithm A, since it's -just as easy and can be done with somewhat less temporary memory. - - -File: gmp.info, Node: Modular Powering Algorithm, Prev: Normal Powering Algorithm, Up: Powering Algorithms - -16.4.2 Modular Powering ------------------------ - -Modular powering is implemented using a 2^k-ary sliding window -algorithm, as per "Handbook of Applied Cryptography" algorithm 14.85 -(*note References::). k is chosen according to the size of the -exponent. Larger exponents use larger values of k, the choice being -made to minimize the average number of multiplications that must -supplement the squaring. - - The modular multiplies and squares use either a simple division or -the REDC method by Montgomery (*note References::). REDC is a little -faster, essentially saving N single limb divisions in a fashion similar -to an exact remainder (*note Exact Remainder::). - - -File: gmp.info, Node: Root Extraction Algorithms, Next: Radix Conversion Algorithms, Prev: Powering Algorithms, Up: Algorithms - -16.5 Root Extraction Algorithms -=============================== - -* Menu: - -* Square Root Algorithm:: -* Nth Root Algorithm:: -* Perfect Square Algorithm:: -* Perfect Power Algorithm:: - - -File: gmp.info, Node: Square Root Algorithm, Next: Nth Root Algorithm, Prev: Root Extraction Algorithms, Up: Root Extraction Algorithms - -16.5.1 Square Root ------------------- - -Square roots are taken using the "Karatsuba Square Root" algorithm by -Paul Zimmermann (*note References::). - - An input n is split into four parts of k bits each, so with b=2^k we -have n = a3*b^3 + a2*b^2 + a1*b + a0. Part a3 must be "normalized" so -that either the high or second highest bit is set. In GMP, k is kept -on a limb boundary and the input is left shifted (by an even number of -bits) to normalize. - - The square root of the high two parts is taken, by recursive -application of the algorithm (bottoming out in a one-limb Newton's -method), - - s1,r1 = sqrtrem (a3*b + a2) - - This is an approximation to the desired root and is extended by a -division to give s,r, - - q,u = divrem (r1*b + a1, 2*s1) - s = s1*b + q - r = u*b + a0 - q^2 - - The normalization requirement on a3 means at this point s is either -correct or 1 too big. r is negative in the latter case, so - - if r < 0 then - r = r + 2*s - 1 - s = s - 1 - - The algorithm is expressed in a divide and conquer form, but as -noted in the paper it can also be viewed as a discrete variant of -Newton's method, or as a variation on the schoolboy method (no longer -taught) for square roots two digits at a time. - - If the remainder r is not required then usually only a few high limbs -of r and u need to be calculated to determine whether an adjustment to -s is required. This optimization is not currently implemented. - - In the Karatsuba multiplication range this algorithm is -O(1.5*M(N/2)), where M(n) is the time to multiply two numbers of n -limbs. In the FFT multiplication range this grows to a bound of -O(6*M(N/2)). In practice a factor of about 1.5 to 1.8 is found in the -Karatsuba and Toom-3 ranges, growing to 2 or 3 in the FFT range. - - The algorithm does all its calculations in integers and the resulting -`mpn_sqrtrem' is used for both `mpz_sqrt' and `mpf_sqrt'. The extended -precision given by `mpf_sqrt_ui' is obtained by padding with zero limbs. - - -File: gmp.info, Node: Nth Root Algorithm, Next: Perfect Square Algorithm, Prev: Square Root Algorithm, Up: Root Extraction Algorithms - -16.5.2 Nth Root ---------------- - -Integer Nth roots are taken using Newton's method with the following -iteration, where A is the input and n is the root to be taken. - - 1 A - a[i+1] = - * ( --------- + (n-1)*a[i] ) - n a[i]^(n-1) - - The initial approximation a[1] is generated bitwise by successively -powering a trial root with or without new 1 bits, aiming to be just -above the true root. The iteration converges quadratically when -started from a good approximation. When n is large more initial bits -are needed to get good convergence. The current implementation is not -particularly well optimized. - - -File: gmp.info, Node: Perfect Square Algorithm, Next: Perfect Power Algorithm, Prev: Nth Root Algorithm, Up: Root Extraction Algorithms - -16.5.3 Perfect Square ---------------------- - -A significant fraction of non-squares can be quickly identified by -checking whether the input is a quadratic residue modulo small integers. - - `mpz_perfect_square_p' first tests the input mod 256, which means -just examining the low byte. Only 44 different values occur for -squares mod 256, so 82.8% of inputs can be immediately identified as -non-squares. - - On a 32-bit system similar tests are done mod 9, 5, 7, 13 and 17, -for a total 99.25% of inputs identified as non-squares. On a 64-bit -system 97 is tested too, for a total 99.62%. - - These moduli are chosen because they're factors of 2^24-1 (or 2^48-1 -for 64-bits), and such a remainder can be quickly taken just using -additions (see `mpn_mod_34lsub1'). - - When nails are in use moduli are instead selected by the `gen-psqr.c' -program and applied with an `mpn_mod_1'. The same 2^24-1 or 2^48-1 -could be done with nails using some extra bit shifts, but this is not -currently implemented. - - In any case each modulus is applied to the `mpn_mod_34lsub1' or -`mpn_mod_1' remainder and a table lookup identifies non-squares. By -using a "modexact" style calculation, and suitably permuted tables, -just one multiply each is required, see the code for details. Moduli -are also combined to save operations, so long as the lookup tables -don't become too big. `gen-psqr.c' does all the pre-calculations. - - A square root must still be taken for any value that passes these -tests, to verify it's really a square and not one of the small fraction -of non-squares that get through (ie. a pseudo-square to all the tested -bases). - - Clearly more residue tests could be done, `mpz_perfect_square_p' only -uses a compact and efficient set. Big inputs would probably benefit -from more residue testing, small inputs might be better off with less. -The assumed distribution of squares versus non-squares in the input -would affect such considerations. - - -File: gmp.info, Node: Perfect Power Algorithm, Prev: Perfect Square Algorithm, Up: Root Extraction Algorithms - -16.5.4 Perfect Power --------------------- - -Detecting perfect powers is required by some factorization algorithms. -Currently `mpz_perfect_power_p' is implemented using repeated Nth root -extractions, though naturally only prime roots need to be considered. -(*Note Nth Root Algorithm::.) - - If a prime divisor p with multiplicity e can be found, then only -roots which are divisors of e need to be considered, much reducing the -work necessary. To this end divisibility by a set of small primes is -checked. - - -File: gmp.info, Node: Radix Conversion Algorithms, Next: Other Algorithms, Prev: Root Extraction Algorithms, Up: Algorithms - -16.6 Radix Conversion -===================== - -Radix conversions are less important than other algorithms. A program -dominated by conversions should probably use a different data -representation. - -* Menu: - -* Binary to Radix:: -* Radix to Binary:: - - -File: gmp.info, Node: Binary to Radix, Next: Radix to Binary, Prev: Radix Conversion Algorithms, Up: Radix Conversion Algorithms - -16.6.1 Binary to Radix ----------------------- - -Conversions from binary to a power-of-2 radix use a simple and fast -O(N) bit extraction algorithm. - - Conversions from binary to other radices use one of two algorithms. -Sizes below `GET_STR_PRECOMPUTE_THRESHOLD' use a basic O(N^2) method. -Repeated divisions by b^n are made, where b is the radix and n is the -biggest power that fits in a limb. But instead of simply using the -remainder r from such divisions, an extra divide step is done to give a -fractional limb representing r/b^n. The digits of r can then be -extracted using multiplications by b rather than divisions. Special -case code is provided for decimal, allowing multiplications by 10 to -optimize to shifts and adds. - - Above `GET_STR_PRECOMPUTE_THRESHOLD' a sub-quadratic algorithm is -used. For an input t, powers b^(n*2^i) of the radix are calculated, -until a power between t and sqrt(t) is reached. t is then divided by -that largest power, giving a quotient which is the digits above that -power, and a remainder which is those below. These two parts are in -turn divided by the second highest power, and so on recursively. When -a piece has been divided down to less than `GET_STR_DC_THRESHOLD' -limbs, the basecase algorithm described above is used. - - The advantage of this algorithm is that big divisions can make use -of the sub-quadratic divide and conquer division (*note Divide and -Conquer Division::), and big divisions tend to have less overheads than -lots of separate single limb divisions anyway. But in any case the -cost of calculating the powers b^(n*2^i) must first be overcome. - - `GET_STR_PRECOMPUTE_THRESHOLD' and `GET_STR_DC_THRESHOLD' represent -the same basic thing, the point where it becomes worth doing a big -division to cut the input in half. `GET_STR_PRECOMPUTE_THRESHOLD' -includes the cost of calculating the radix power required, whereas -`GET_STR_DC_THRESHOLD' assumes that's already available, which is the -case when recursing. - - Since the base case produces digits from least to most significant -but they want to be stored from most to least, it's necessary to -calculate in advance how many digits there will be, or at least be sure -not to underestimate that. For GMP the number of input bits is -multiplied by `chars_per_bit_exactly' from `mp_bases', rounding up. -The result is either correct or one too big. - - Examining some of the high bits of the input could increase the -chance of getting the exact number of digits, but an exact result every -time would not be practical, since in general the difference between -numbers 100... and 99... is only in the last few bits and the work to -identify 99... might well be almost as much as a full conversion. - - `mpf_get_str' doesn't currently use the algorithm described here, it -multiplies or divides by a power of b to move the radix point to the -just above the highest non-zero digit (or at worst one above that -location), then multiplies by b^n to bring out digits. This is O(N^2) -and is certainly not optimal. - - The r/b^n scheme described above for using multiplications to bring -out digits might be useful for more than a single limb. Some brief -experiments with it on the base case when recursing didn't give a -noticeable improvement, but perhaps that was only due to the -implementation. Something similar would work for the sub-quadratic -divisions too, though there would be the cost of calculating a bigger -radix power. - - Another possible improvement for the sub-quadratic part would be to -arrange for radix powers that balanced the sizes of quotient and -remainder produced, ie. the highest power would be an b^(n*k) -approximately equal to sqrt(t), not restricted to a 2^i factor. That -ought to smooth out a graph of times against sizes, but may or may not -be a net speedup. - - -File: gmp.info, Node: Radix to Binary, Prev: Binary to Radix, Up: Radix Conversion Algorithms - -16.6.2 Radix to Binary ----------------------- - -*This section needs to be rewritten, it currently describes the -algorithms used before GMP 4.3.* - - Conversions from a power-of-2 radix into binary use a simple and fast -O(N) bitwise concatenation algorithm. - - Conversions from other radices use one of two algorithms. Sizes -below `SET_STR_PRECOMPUTE_THRESHOLD' use a basic O(N^2) method. Groups -of n digits are converted to limbs, where n is the biggest power of the -base b which will fit in a limb, then those groups are accumulated into -the result by multiplying by b^n and adding. This saves -multi-precision operations, as per Knuth section 4.4 part E (*note -References::). Some special case code is provided for decimal, giving -the compiler a chance to optimize multiplications by 10. - - Above `SET_STR_PRECOMPUTE_THRESHOLD' a sub-quadratic algorithm is -used. First groups of n digits are converted into limbs. Then adjacent -limbs are combined into limb pairs with x*b^n+y, where x and y are the -limbs. Adjacent limb pairs are combined into quads similarly with -x*b^(2n)+y. This continues until a single block remains, that being -the result. - - The advantage of this method is that the multiplications for each x -are big blocks, allowing Karatsuba and higher algorithms to be used. -But the cost of calculating the powers b^(n*2^i) must be overcome. -`SET_STR_PRECOMPUTE_THRESHOLD' usually ends up quite big, around 5000 -digits, and on some processors much bigger still. - - `SET_STR_PRECOMPUTE_THRESHOLD' is based on the input digits (and -tuned for decimal), though it might be better based on a limb count, so -as to be independent of the base. But that sort of count isn't used by -the base case and so would need some sort of initial calculation or -estimate. - - The main reason `SET_STR_PRECOMPUTE_THRESHOLD' is so much bigger -than the corresponding `GET_STR_PRECOMPUTE_THRESHOLD' is that -`mpn_mul_1' is much faster than `mpn_divrem_1' (often by a factor of 5, -or more). - - -File: gmp.info, Node: Other Algorithms, Next: Assembly Coding, Prev: Radix Conversion Algorithms, Up: Algorithms - -16.7 Other Algorithms -===================== - -* Menu: - -* Prime Testing Algorithm:: -* Factorial Algorithm:: -* Binomial Coefficients Algorithm:: -* Fibonacci Numbers Algorithm:: -* Lucas Numbers Algorithm:: -* Random Number Algorithms:: - - -File: gmp.info, Node: Prime Testing Algorithm, Next: Factorial Algorithm, Prev: Other Algorithms, Up: Other Algorithms - -16.7.1 Prime Testing --------------------- - -The primality testing in `mpz_probab_prime_p' (*note Number Theoretic -Functions::) first does some trial division by small factors and then -uses the Miller-Rabin probabilistic primality testing algorithm, as -described in Knuth section 4.5.4 algorithm P (*note References::). - - For an odd input n, and with n = q*2^k+1 where q is odd, this -algorithm selects a random base x and tests whether x^q mod n is 1 or --1, or an x^(q*2^j) mod n is 1, for 1<=j<=k. If so then n is probably -prime, if not then n is definitely composite. - - Any prime n will pass the test, but some composites do too. Such -composites are known as strong pseudoprimes to base x. No n is a -strong pseudoprime to more than 1/4 of all bases (see Knuth exercise -22), hence with x chosen at random there's no more than a 1/4 chance a -"probable prime" will in fact be composite. - - In fact strong pseudoprimes are quite rare, making the test much more -powerful than this analysis would suggest, but 1/4 is all that's proven -for an arbitrary n. - - -File: gmp.info, Node: Factorial Algorithm, Next: Binomial Coefficients Algorithm, Prev: Prime Testing Algorithm, Up: Other Algorithms - -16.7.2 Factorial ----------------- - -Factorials are calculated by a combination of removal of twos, -powering, and binary splitting. The procedure can be best illustrated -with an example, - - 23! = 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23 - -has factors of two removed, - - 23! = 2^19.1.1.3.1.5.3.7.1.9.5.11.3.13.7.15.1.17.9.19.5.21.11.23 - -and the resulting terms collected up according to their multiplicity, - - 23! = 2^19.(3.5)^3.(7.9.11)^2.(13.15.17.19.21.23) - - Each sequence such as 13.15.17.19.21.23 is evaluated by splitting -into every second term, as for instance (13.17.21).(15.19.23), and the -same recursively on each half. This is implemented iteratively using -some bit twiddling. - - Such splitting is more efficient than repeated Nx1 multiplies since -it forms big multiplies, allowing Karatsuba and higher algorithms to be -used. And even below the Karatsuba threshold a big block of work can -be more efficient for the basecase algorithm. - - Splitting into subsequences of every second term keeps the resulting -products more nearly equal in size than would the simpler approach of -say taking the first half and second half of the sequence. Nearly -equal products are more efficient for the current multiply -implementation. - - -File: gmp.info, Node: Binomial Coefficients Algorithm, Next: Fibonacci Numbers Algorithm, Prev: Factorial Algorithm, Up: Other Algorithms - -16.7.3 Binomial Coefficients ----------------------------- - -Binomial coefficients C(n,k) are calculated by first arranging k <= n/2 -using C(n,k) = C(n,n-k) if necessary, and then evaluating the following -product simply from i=2 to i=k. - - k (n-k+i) - C(n,k) = (n-k+1) * prod ------- - i=2 i - - It's easy to show that each denominator i will divide the product so -far, so the exact division algorithm is used (*note Exact Division::). - - The numerators n-k+i and denominators i are first accumulated into -as many fit a limb, to save multi-precision operations, though for -`mpz_bin_ui' this applies only to the divisors, since n is an `mpz_t' -and n-k+i in general won't fit in a limb at all. - - -File: gmp.info, Node: Fibonacci Numbers Algorithm, Next: Lucas Numbers Algorithm, Prev: Binomial Coefficients Algorithm, Up: Other Algorithms - -16.7.4 Fibonacci Numbers ------------------------- - -The Fibonacci functions `mpz_fib_ui' and `mpz_fib2_ui' are designed for -calculating isolated F[n] or F[n],F[n-1] values efficiently. - - For small n, a table of single limb values in `__gmp_fib_table' is -used. On a 32-bit limb this goes up to F[47], or on a 64-bit limb up -to F[93]. For convenience the table starts at F[-1]. - - Beyond the table, values are generated with a binary powering -algorithm, calculating a pair F[n] and F[n-1] working from high to low -across the bits of n. The formulas used are - - F[2k+1] = 4*F[k]^2 - F[k-1]^2 + 2*(-1)^k - F[2k-1] = F[k]^2 + F[k-1]^2 - - F[2k] = F[2k+1] - F[2k-1] - - At each step, k is the high b bits of n. If the next bit of n is 0 -then F[2k],F[2k-1] is used, or if it's a 1 then F[2k+1],F[2k] is used, -and the process repeated until all bits of n are incorporated. Notice -these formulas require just two squares per bit of n. - - It'd be possible to handle the first few n above the single limb -table with simple additions, using the defining Fibonacci recurrence -F[k+1]=F[k]+F[k-1], but this is not done since it usually turns out to -be faster for only about 10 or 20 values of n, and including a block of -code for just those doesn't seem worthwhile. If they really mattered -it'd be better to extend the data table. - - Using a table avoids lots of calculations on small numbers, and -makes small n go fast. A bigger table would make more small n go fast, -it's just a question of balancing size against desired speed. For GMP -the code is kept compact, with the emphasis primarily on a good -powering algorithm. - - `mpz_fib2_ui' returns both F[n] and F[n-1], but `mpz_fib_ui' is only -interested in F[n]. In this case the last step of the algorithm can -become one multiply instead of two squares. One of the following two -formulas is used, according as n is odd or even. - - F[2k] = F[k]*(F[k]+2F[k-1]) - - F[2k+1] = (2F[k]+F[k-1])*(2F[k]-F[k-1]) + 2*(-1)^k - - F[2k+1] here is the same as above, just rearranged to be a multiply. -For interest, the 2*(-1)^k term both here and above can be applied -just to the low limb of the calculation, without a carry or borrow into -further limbs, which saves some code size. See comments with -`mpz_fib_ui' and the internal `mpn_fib2_ui' for how this is done. - - -File: gmp.info, Node: Lucas Numbers Algorithm, Next: Random Number Algorithms, Prev: Fibonacci Numbers Algorithm, Up: Other Algorithms - -16.7.5 Lucas Numbers --------------------- - -`mpz_lucnum2_ui' derives a pair of Lucas numbers from a pair of -Fibonacci numbers with the following simple formulas. - - L[k] = F[k] + 2*F[k-1] - L[k-1] = 2*F[k] - F[k-1] - - `mpz_lucnum_ui' is only interested in L[n], and some work can be -saved. Trailing zero bits on n can be handled with a single square -each. - - L[2k] = L[k]^2 - 2*(-1)^k - - And the lowest 1 bit can be handled with one multiply of a pair of -Fibonacci numbers, similar to what `mpz_fib_ui' does. - - L[2k+1] = 5*F[k-1]*(2*F[k]+F[k-1]) - 4*(-1)^k - - -File: gmp.info, Node: Random Number Algorithms, Prev: Lucas Numbers Algorithm, Up: Other Algorithms - -16.7.6 Random Numbers ---------------------- - -For the `urandomb' functions, random numbers are generated simply by -concatenating bits produced by the generator. As long as the generator -has good randomness properties this will produce well-distributed N bit -numbers. - - For the `urandomm' functions, random numbers in a range 0<=R48 bit pieces is convenient. With -some care though six 21x32->53 bit products can be used, if one of the -lower two 21-bit pieces also uses the sign bit. - - For the `mpn_mul_1' family of functions on a 64-bit machine, the -invariant single limb is split at the start, into 3 or 4 pieces. -Inside the loop, the bignum operand is split into 32-bit pieces. Fast -conversion of these unsigned 32-bit pieces to floating point is highly -machine-dependent. In some cases, reading the data into the integer -unit, zero-extending to 64-bits, then transferring to the floating -point unit back via memory is the only option. - - Converting partial products back to 64-bit limbs is usually best -done as a signed conversion. Since all values are smaller than 2^53, -signed and unsigned are the same, but most processors lack unsigned -conversions. - - - - Here is a diagram showing 16x32 bit products for an `mpn_mul_1' or -`mpn_addmul_1' with a 64-bit limb. The single limb operand V is split -into four 16-bit parts. The multi-limb operand U is split in the loop -into two 32-bit parts. - - +---+---+---+---+ - |v48|v32|v16|v00| V operand - +---+---+---+---+ - - +-------+---+---+ - x | u32 | u00 | U operand (one limb) - +---------------+ - - --------------------------------- - - +-----------+ - | u00 x v00 | p00 48-bit products - +-----------+ - +-----------+ - | u00 x v16 | p16 - +-----------+ - +-----------+ - | u00 x v32 | p32 - +-----------+ - +-----------+ - | u00 x v48 | p48 - +-----------+ - +-----------+ - | u32 x v00 | r32 - +-----------+ - +-----------+ - | u32 x v16 | r48 - +-----------+ - +-----------+ - | u32 x v32 | r64 - +-----------+ - +-----------+ - | u32 x v48 | r80 - +-----------+ - - p32 and r32 can be summed using floating-point addition, and -likewise p48 and r48. p00 and p16 can be summed with r64 and r80 from -the previous iteration. - - For each loop then, four 49-bit quantities are transferred to the -integer unit, aligned as follows, - - |-----64bits----|-----64bits----| - +------------+ - | p00 + r64' | i00 - +------------+ - +------------+ - | p16 + r80' | i16 - +------------+ - +------------+ - | p32 + r32 | i32 - +------------+ - +------------+ - | p48 + r48 | i48 - +------------+ - - The challenge then is to sum these efficiently and add in a carry -limb, generating a low 64-bit result limb and a high 33-bit carry limb -(i48 extends 33 bits into the high half). - - -File: gmp.info, Node: Assembly SIMD Instructions, Next: Assembly Software Pipelining, Prev: Assembly Floating Point, Up: Assembly Coding - -16.8.7 SIMD Instructions ------------------------- - -The single-instruction multiple-data support in current microprocessors -is aimed at signal processing algorithms where each data point can be -treated more or less independently. There's generally not much support -for propagating the sort of carries that arise in GMP. - - SIMD multiplications of say four 16x16 bit multiplies only do as much -work as one 32x32 from GMP's point of view, and need some shifts and -adds besides. But of course if say the SIMD form is fully pipelined -and uses less instruction decoding then it may still be worthwhile. - - On the x86 chips, MMX has so far found a use in `mpn_rshift' and -`mpn_lshift', and is used in a special case for 16-bit multipliers in -the P55 `mpn_mul_1'. SSE2 is used for Pentium 4 `mpn_mul_1', -`mpn_addmul_1', and `mpn_submul_1'. - - -File: gmp.info, Node: Assembly Software Pipelining, Next: Assembly Loop Unrolling, Prev: Assembly SIMD Instructions, Up: Assembly Coding - -16.8.8 Software Pipelining --------------------------- - -Software pipelining consists of scheduling instructions around the -branch point in a loop. For example a loop might issue a load not for -use in the present iteration but the next, thereby allowing extra -cycles for the data to arrive from memory. - - Naturally this is wanted only when doing things like loads or -multiplies that take several cycles to complete, and only where a CPU -has multiple functional units so that other work can be done in the -meantime. - - A pipeline with several stages will have a data value in progress at -each stage and each loop iteration moves them along one stage. This is -like juggling. - - If the latency of some instruction is greater than the loop time -then it will be necessary to unroll, so one register has a result ready -to use while another (or multiple others) are still in progress. -(*note Assembly Loop Unrolling::). - - -File: gmp.info, Node: Assembly Loop Unrolling, Next: Assembly Writing Guide, Prev: Assembly Software Pipelining, Up: Assembly Coding - -16.8.9 Loop Unrolling ---------------------- - -Loop unrolling consists of replicating code so that several limbs are -processed in each loop. At a minimum this reduces loop overheads by a -corresponding factor, but it can also allow better register usage, for -example alternately using one register combination and then another. -Judicious use of `m4' macros can help avoid lots of duplication in the -source code. - - Any amount of unrolling can be handled with a loop counter that's -decremented by N each time, stopping when the remaining count is less -than the further N the loop will process. Or by subtracting N at the -start, the termination condition becomes when the counter C is less -than 0 (and the count of remaining limbs is C+N). - - Alternately for a power of 2 unroll the loop count and remainder can -be established with a shift and mask. This is convenient if also -making a computed jump into the middle of a large loop. - - The limbs not a multiple of the unrolling can be handled in various -ways, for example - - * A simple loop at the end (or the start) to process the excess. - Care will be wanted that it isn't too much slower than the - unrolled part. - - * A set of binary tests, for example after an 8-limb unrolling, test - for 4 more limbs to process, then a further 2 more or not, and - finally 1 more or not. This will probably take more code space - than a simple loop. - - * A `switch' statement, providing separate code for each possible - excess, for example an 8-limb unrolling would have separate code - for 0 remaining, 1 remaining, etc, up to 7 remaining. This might - take a lot of code, but may be the best way to optimize all cases - in combination with a deep pipelined loop. - - * A computed jump into the middle of the loop, thus making the first - iteration handle the excess. This should make times smoothly - increase with size, which is attractive, but setups for the jump - and adjustments for pointers can be tricky and could become quite - difficult in combination with deep pipelining. - - -File: gmp.info, Node: Assembly Writing Guide, Prev: Assembly Loop Unrolling, Up: Assembly Coding - -16.8.10 Writing Guide ---------------------- - -This is a guide to writing software pipelined loops for processing limb -vectors in assembly. - - First determine the algorithm and which instructions are needed. -Code it without unrolling or scheduling, to make sure it works. On a -3-operand CPU try to write each new value to a new register, this will -greatly simplify later steps. - - Then note for each instruction the functional unit and/or issue port -requirements. If an instruction can use either of two units, like U0 -or U1 then make a category "U0/U1". Count the total using each unit -(or combined unit), and count all instructions. - - Figure out from those counts the best possible loop time. The goal -will be to find a perfect schedule where instruction latencies are -completely hidden. The total instruction count might be the limiting -factor, or perhaps a particular functional unit. It might be possible -to tweak the instructions to help the limiting factor. - - Suppose the loop time is N, then make N issue buckets, with the -final loop branch at the end of the last. Now fill the buckets with -dummy instructions using the functional units desired. Run this to -make sure the intended speed is reached. - - Now replace the dummy instructions with the real instructions from -the slow but correct loop you started with. The first will typically -be a load instruction. Then the instruction using that value is placed -in a bucket an appropriate distance down. Run the loop again, to check -it still runs at target speed. - - Keep placing instructions, frequently measuring the loop. After a -few you will need to wrap around from the last bucket back to the top -of the loop. If you used the new-register for new-value strategy above -then there will be no register conflicts. If not then take care not to -clobber something already in use. Changing registers at this time is -very error prone. - - The loop will overlap two or more of the original loop iterations, -and the computation of one vector element result will be started in one -iteration of the new loop, and completed one or several iterations -later. - - The final step is to create feed-in and wind-down code for the loop. -A good way to do this is to make a copy (or copies) of the loop at the -start and delete those instructions which don't have valid antecedents, -and at the end replicate and delete those whose results are unwanted -(including any further loads). - - The loop will have a minimum number of limbs loaded and processed, -so the feed-in code must test if the request size is smaller and skip -either to a suitable part of the wind-down or to special code for small -sizes. - - -File: gmp.info, Node: Internals, Next: Contributors, Prev: Algorithms, Up: Top - -17 Internals -************ - -*This chapter is provided only for informational purposes and the -various internals described here may change in future GMP releases. -Applications expecting to be compatible with future releases should use -only the documented interfaces described in previous chapters.* - -* Menu: - -* Integer Internals:: -* Rational Internals:: -* Float Internals:: -* Raw Output Internals:: -* C++ Interface Internals:: - - -File: gmp.info, Node: Integer Internals, Next: Rational Internals, Prev: Internals, Up: Internals - -17.1 Integer Internals -====================== - -`mpz_t' variables represent integers using sign and magnitude, in space -dynamically allocated and reallocated. The fields are as follows. - -`_mp_size' - The number of limbs, or the negative of that when representing a - negative integer. Zero is represented by `_mp_size' set to zero, - in which case the `_mp_d' data is unused. - -`_mp_d' - A pointer to an array of limbs which is the magnitude. These are - stored "little endian" as per the `mpn' functions, so `_mp_d[0]' - is the least significant limb and `_mp_d[ABS(_mp_size)-1]' is the - most significant. Whenever `_mp_size' is non-zero, the most - significant limb is non-zero. - - Currently there's always at least one limb allocated, so for - instance `mpz_set_ui' never needs to reallocate, and `mpz_get_ui' - can fetch `_mp_d[0]' unconditionally (though its value is then - only wanted if `_mp_size' is non-zero). - -`_mp_alloc' - `_mp_alloc' is the number of limbs currently allocated at `_mp_d', - and naturally `_mp_alloc >= ABS(_mp_size)'. When an `mpz' routine - is about to (or might be about to) increase `_mp_size', it checks - `_mp_alloc' to see whether there's enough space, and reallocates - if not. `MPZ_REALLOC' is generally used for this. - - The various bitwise logical functions like `mpz_and' behave as if -negative values were twos complement. But sign and magnitude is always -used internally, and necessary adjustments are made during the -calculations. Sometimes this isn't pretty, but sign and magnitude are -best for other routines. - - Some internal temporary variables are setup with `MPZ_TMP_INIT' and -these have `_mp_d' space obtained from `TMP_ALLOC' rather than the -memory allocation functions. Care is taken to ensure that these are -big enough that no reallocation is necessary (since it would have -unpredictable consequences). - - `_mp_size' and `_mp_alloc' are `int', although `mp_size_t' is -usually a `long'. This is done to make the fields just 32 bits on some -64 bits systems, thereby saving a few bytes of data space but still -providing plenty of range. - - -File: gmp.info, Node: Rational Internals, Next: Float Internals, Prev: Integer Internals, Up: Internals - -17.2 Rational Internals -======================= - -`mpq_t' variables represent rationals using an `mpz_t' numerator and -denominator (*note Integer Internals::). - - The canonical form adopted is denominator positive (and non-zero), -no common factors between numerator and denominator, and zero uniquely -represented as 0/1. - - It's believed that casting out common factors at each stage of a -calculation is best in general. A GCD is an O(N^2) operation so it's -better to do a few small ones immediately than to delay and have to do -a big one later. Knowing the numerator and denominator have no common -factors can be used for example in `mpq_mul' to make only two cross -GCDs necessary, not four. - - This general approach to common factors is badly sub-optimal in the -presence of simple factorizations or little prospect for cancellation, -but GMP has no way to know when this will occur. As per *Note -Efficiency::, that's left to applications. The `mpq_t' framework might -still suit, with `mpq_numref' and `mpq_denref' for direct access to the -numerator and denominator, or of course `mpz_t' variables can be used -directly. - - -File: gmp.info, Node: Float Internals, Next: Raw Output Internals, Prev: Rational Internals, Up: Internals - -17.3 Float Internals -==================== - -Efficient calculation is the primary aim of GMP floats and the use of -whole limbs and simple rounding facilitates this. - - `mpf_t' floats have a variable precision mantissa and a single -machine word signed exponent. The mantissa is represented using sign -and magnitude. - - most least - significant significant - limb limb - - _mp_d - |---- _mp_exp ---> | - _____ _____ _____ _____ _____ - |_____|_____|_____|_____|_____| - . <------------ radix point - - <-------- _mp_size ---------> - -The fields are as follows. - -`_mp_size' - The number of limbs currently in use, or the negative of that when - representing a negative value. Zero is represented by `_mp_size' - and `_mp_exp' both set to zero, and in that case the `_mp_d' data - is unused. (In the future `_mp_exp' might be undefined when - representing zero.) - -`_mp_prec' - The precision of the mantissa, in limbs. In any calculation the - aim is to produce `_mp_prec' limbs of result (the most significant - being non-zero). - -`_mp_d' - A pointer to the array of limbs which is the absolute value of the - mantissa. These are stored "little endian" as per the `mpn' - functions, so `_mp_d[0]' is the least significant limb and - `_mp_d[ABS(_mp_size)-1]' the most significant. - - The most significant limb is always non-zero, but there are no - other restrictions on its value, in particular the highest 1 bit - can be anywhere within the limb. - - `_mp_prec+1' limbs are allocated to `_mp_d', the extra limb being - for convenience (see below). There are no reallocations during a - calculation, only in a change of precision with `mpf_set_prec'. - -`_mp_exp' - The exponent, in limbs, determining the location of the implied - radix point. Zero means the radix point is just above the most - significant limb. Positive values mean a radix point offset - towards the lower limbs and hence a value >= 1, as for example in - the diagram above. Negative exponents mean a radix point further - above the highest limb. - - Naturally the exponent can be any value, it doesn't have to fall - within the limbs as the diagram shows, it can be a long way above - or a long way below. Limbs other than those included in the - `{_mp_d,_mp_size}' data are treated as zero. - - The `_mp_size' and `_mp_prec' fields are `int', although the -`mp_size_t' type is usually a `long'. The `_mp_exp' field is usually -`long'. This is done to make some fields just 32 bits on some 64 bits -systems, thereby saving a few bytes of data space but still providing -plenty of precision and a very large range. - - -The following various points should be noted. - -Low Zeros - The least significant limbs `_mp_d[0]' etc can be zero, though - such low zeros can always be ignored. Routines likely to produce - low zeros check and avoid them to save time in subsequent - calculations, but for most routines they're quite unlikely and - aren't checked. - -Mantissa Size Range - The `_mp_size' count of limbs in use can be less than `_mp_prec' if - the value can be represented in less. This means low precision - values or small integers stored in a high precision `mpf_t' can - still be operated on efficiently. - - `_mp_size' can also be greater than `_mp_prec'. Firstly a value is - allowed to use all of the `_mp_prec+1' limbs available at `_mp_d', - and secondly when `mpf_set_prec_raw' lowers `_mp_prec' it leaves - `_mp_size' unchanged and so the size can be arbitrarily bigger than - `_mp_prec'. - -Rounding - All rounding is done on limb boundaries. Calculating `_mp_prec' - limbs with the high non-zero will ensure the application requested - minimum precision is obtained. - - The use of simple "trunc" rounding towards zero is efficient, - since there's no need to examine extra limbs and increment or - decrement. - -Bit Shifts - Since the exponent is in limbs, there are no bit shifts in basic - operations like `mpf_add' and `mpf_mul'. When differing exponents - are encountered all that's needed is to adjust pointers to line up - the relevant limbs. - - Of course `mpf_mul_2exp' and `mpf_div_2exp' will require bit - shifts, but the choice is between an exponent in limbs which - requires shifts there, or one in bits which requires them almost - everywhere else. - -Use of `_mp_prec+1' Limbs - The extra limb on `_mp_d' (`_mp_prec+1' rather than just - `_mp_prec') helps when an `mpf' routine might get a carry from its - operation. `mpf_add' for instance will do an `mpn_add' of - `_mp_prec' limbs. If there's no carry then that's the result, but - if there is a carry then it's stored in the extra limb of space and - `_mp_size' becomes `_mp_prec+1'. - - Whenever `_mp_prec+1' limbs are held in a variable, the low limb - is not needed for the intended precision, only the `_mp_prec' high - limbs. But zeroing it out or moving the rest down is unnecessary. - Subsequent routines reading the value will simply take the high - limbs they need, and this will be `_mp_prec' if their target has - that same precision. This is no more than a pointer adjustment, - and must be checked anyway since the destination precision can be - different from the sources. - - Copy functions like `mpf_set' will retain a full `_mp_prec+1' limbs - if available. This ensures that a variable which has `_mp_size' - equal to `_mp_prec+1' will get its full exact value copied. - Strictly speaking this is unnecessary since only `_mp_prec' limbs - are needed for the application's requested precision, but it's - considered that an `mpf_set' from one variable into another of the - same precision ought to produce an exact copy. - -Application Precisions - `__GMPF_BITS_TO_PREC' converts an application requested precision - to an `_mp_prec'. The value in bits is rounded up to a whole limb - then an extra limb is added since the most significant limb of - `_mp_d' is only non-zero and therefore might contain only one bit. - - `__GMPF_PREC_TO_BITS' does the reverse conversion, and removes the - extra limb from `_mp_prec' before converting to bits. The net - effect of reading back with `mpf_get_prec' is simply the precision - rounded up to a multiple of `mp_bits_per_limb'. - - Note that the extra limb added here for the high only being - non-zero is in addition to the extra limb allocated to `_mp_d'. - For example with a 32-bit limb, an application request for 250 - bits will be rounded up to 8 limbs, then an extra added for the - high being only non-zero, giving an `_mp_prec' of 9. `_mp_d' then - gets 10 limbs allocated. Reading back with `mpf_get_prec' will - take `_mp_prec' subtract 1 limb and multiply by 32, giving 256 - bits. - - Strictly speaking, the fact the high limb has at least one bit - means that a float with, say, 3 limbs of 32-bits each will be - holding at least 65 bits, but for the purposes of `mpf_t' it's - considered simply to be 64 bits, a nice multiple of the limb size. - - -File: gmp.info, Node: Raw Output Internals, Next: C++ Interface Internals, Prev: Float Internals, Up: Internals - -17.4 Raw Output Internals -========================= - -`mpz_out_raw' uses the following format. - - +------+------------------------+ - | size | data bytes | - +------+------------------------+ - - The size is 4 bytes written most significant byte first, being the -number of subsequent data bytes, or the twos complement negative of -that when a negative integer is represented. The data bytes are the -absolute value of the integer, written most significant byte first. - - The most significant data byte is always non-zero, so the output is -the same on all systems, irrespective of limb size. - - In GMP 1, leading zero bytes were written to pad the data bytes to a -multiple of the limb size. `mpz_inp_raw' will still accept this, for -compatibility. - - The use of "big endian" for both the size and data fields is -deliberate, it makes the data easy to read in a hex dump of a file. -Unfortunately it also means that the limb data must be reversed when -reading or writing, so neither a big endian nor little endian system -can just read and write `_mp_d'. - - -File: gmp.info, Node: C++ Interface Internals, Prev: Raw Output Internals, Up: Internals - -17.5 C++ Interface Internals -============================ - -A system of expression templates is used to ensure something like -`a=b+c' turns into a simple call to `mpz_add' etc. For `mpf_class' the -scheme also ensures the precision of the final destination is used for -any temporaries within a statement like `f=w*x+y*z'. These are -important features which a naive implementation cannot provide. - - A simplified description of the scheme follows. The true scheme is -complicated by the fact that expressions have different return types. -For detailed information, refer to the source code. - - To perform an operation, say, addition, we first define a "function -object" evaluating it, - - struct __gmp_binary_plus - { - static void eval(mpf_t f, mpf_t g, mpf_t h) { mpf_add(f, g, h); } - }; - -And an "additive expression" object, - - __gmp_expr<__gmp_binary_expr > - operator+(const mpf_class &f, const mpf_class &g) - { - return __gmp_expr - <__gmp_binary_expr >(f, g); - } - - The seemingly redundant `__gmp_expr<__gmp_binary_expr<...>>' is used -to encapsulate any possible kind of expression into a single template -type. In fact even `mpf_class' etc are `typedef' specializations of -`__gmp_expr'. - - Next we define assignment of `__gmp_expr' to `mpf_class'. - - template - mpf_class & mpf_class::operator=(const __gmp_expr &expr) - { - expr.eval(this->get_mpf_t(), this->precision()); - return *this; - } - - template - void __gmp_expr<__gmp_binary_expr >::eval - (mpf_t f, mp_bitcnt_t precision) - { - Op::eval(f, expr.val1.get_mpf_t(), expr.val2.get_mpf_t()); - } - - where `expr.val1' and `expr.val2' are references to the expression's -operands (here `expr' is the `__gmp_binary_expr' stored within the -`__gmp_expr'). - - This way, the expression is actually evaluated only at the time of -assignment, when the required precision (that of `f') is known. -Furthermore the target `mpf_t' is now available, thus we can call -`mpf_add' directly with `f' as the output argument. - - Compound expressions are handled by defining operators taking -subexpressions as their arguments, like this: - - template - __gmp_expr - <__gmp_binary_expr<__gmp_expr, __gmp_expr, __gmp_binary_plus> > - operator+(const __gmp_expr &expr1, const __gmp_expr &expr2) - { - return __gmp_expr - <__gmp_binary_expr<__gmp_expr, __gmp_expr, __gmp_binary_plus> > - (expr1, expr2); - } - - And the corresponding specializations of `__gmp_expr::eval': - - template - void __gmp_expr - <__gmp_binary_expr<__gmp_expr, __gmp_expr, Op> >::eval - (mpf_t f, mp_bitcnt_t precision) - { - // declare two temporaries - mpf_class temp1(expr.val1, precision), temp2(expr.val2, precision); - Op::eval(f, temp1.get_mpf_t(), temp2.get_mpf_t()); - } - - The expression is thus recursively evaluated to any level of -complexity and all subexpressions are evaluated to the precision of `f'. - - -File: gmp.info, Node: Contributors, Next: References, Prev: Internals, Up: Top - -Appendix A Contributors -*********************** - -Torbjo"rn Granlund wrote the original GMP library and is still the main -developer. Code not explicitly attributed to others, was contributed by -Torbjo"rn. Several other individuals and organizations have contributed -GMP. Here is a list in chronological order on first contribution: - - Gunnar Sjo"din and Hans Riesel helped with mathematical problems in -early versions of the library. - - Richard Stallman helped with the interface design and revised the -first version of this manual. - - Brian Beuning and Doug Lea helped with testing of early versions of -the library and made creative suggestions. - - John Amanatides of York University in Canada contributed the function -`mpz_probab_prime_p'. - - Paul Zimmermann wrote the REDC-based mpz_powm code, the -Scho"nhage-Strassen FFT multiply code, and the Karatsuba square root -code. He also improved the Toom3 code for GMP 4.2. Paul sparked the -development of GMP 2, with his comparisons between bignum packages. -The ECMNET project Paul is organizing was a driving force behind many -of the optimizations in GMP 3. Paul also wrote the new GMP 4.3 nth -root code (with Torbjo"rn). - - Ken Weber (Kent State University, Universidade Federal do Rio Grande -do Sul) contributed now defunct versions of `mpz_gcd', `mpz_divexact', -`mpn_gcd', and `mpn_bdivmod', partially supported by CNPq (Brazil) -grant 301314194-2. - - Per Bothner of Cygnus Support helped to set up GMP to use Cygnus' -configure. He has also made valuable suggestions and tested numerous -intermediary releases. - - Joachim Hollman was involved in the design of the `mpf' interface, -and in the `mpz' design revisions for version 2. - - Bennet Yee contributed the initial versions of `mpz_jacobi' and -`mpz_legendre'. - - Andreas Schwab contributed the files `mpn/m68k/lshift.S' and -`mpn/m68k/rshift.S' (now in `.asm' form). - - Robert Harley of Inria, France and David Seal of ARM, England, -suggested clever improvements for population count. Robert also wrote -highly optimized Karatsuba and 3-way Toom multiplication functions for -GMP 3, and contributed the ARM assembly code. - - Torsten Ekedahl of the Mathematical department of Stockholm -University provided significant inspiration during several phases of -the GMP development. His mathematical expertise helped improve several -algorithms. - - Linus Nordberg wrote the new configure system based on autoconf and -implemented the new random functions. - - Kevin Ryde worked on a large number of things: optimized x86 code, -m4 asm macros, parameter tuning, speed measuring, the configure system, -function inlining, divisibility tests, bit scanning, Jacobi symbols, -Fibonacci and Lucas number functions, printf and scanf functions, perl -interface, demo expression parser, the algorithms chapter in the -manual, `gmpasm-mode.el', and various miscellaneous improvements -elsewhere. - - Kent Boortz made the Mac OS 9 port. - - Steve Root helped write the optimized alpha 21264 assembly code. - - Gerardo Ballabio wrote the `gmpxx.h' C++ class interface and the C++ -`istream' input routines. - - Jason Moxham rewrote `mpz_fac_ui'. - - Pedro Gimeno implemented the Mersenne Twister and made other random -number improvements. - - Niels Mo"ller wrote the sub-quadratic GCD and extended GCD code, the -quadratic Hensel division code, and (with Torbjo"rn) the new divide and -conquer division code for GMP 4.3. Niels also helped implement the new -Toom multiply code for GMP 4.3 and implemented helper functions to -simplify Toom evaluations for GMP 5.0. He wrote the original version -of mpn_mulmod_bnm1. - - Alberto Zanoni and Marco Bodrato suggested the unbalanced multiply -strategy, and found the optimal strategies for evaluation and -interpolation in Toom multiplication. - - Marco Bodrato helped implement the new Toom multiply code for GMP -4.3 and implemented most of the new Toom multiply and squaring code for -5.0. He is the main author of the current mpn_mulmod_bnm1 and -mpn_mullo_n. Marco also wrote the functions mpn_invert and -mpn_invertappr. - - David Harvey suggested the internal function `mpn_bdiv_dbm1', -implementing division relevant to Toom multiplication. He also worked -on fast assembly sequences, in particular on a fast AMD64 -`mpn_mul_basecase'. - - Martin Boij wrote `mpn_perfect_power_p'. - - (This list is chronological, not ordered after significance. If you -have contributed to GMP but are not listed above, please tell - about the omission!) - - The development of floating point functions of GNU MP 2, were -supported in part by the ESPRIT-BRA (Basic Research Activities) 6846 -project POSSO (POlynomial System SOlving). - - The development of GMP 2, 3, and 4 was supported in part by the IDA -Center for Computing Sciences. - - Thanks go to Hans Thorsen for donating an SGI system for the GMP -test system environment. - - -File: gmp.info, Node: References, Next: GNU Free Documentation License, Prev: Contributors, Up: Top - -Appendix B References -********************* - -B.1 Books -========= - - * Jonathan M. Borwein and Peter B. Borwein, "Pi and the AGM: A Study - in Analytic Number Theory and Computational Complexity", Wiley, - 1998. - - * Richard Crandall and Carl Pomerance, "Prime Numbers: A - Computational Perspective", 2nd edition, Springer-Verlag, 2005. - `http://math.dartmouth.edu/~carlp/' - - * Henri Cohen, "A Course in Computational Algebraic Number Theory", - Graduate Texts in Mathematics number 138, Springer-Verlag, 1993. - `http://www.math.u-bordeaux.fr/~cohen/' - - * Donald E. Knuth, "The Art of Computer Programming", volume 2, - "Seminumerical Algorithms", 3rd edition, Addison-Wesley, 1998. - `http://www-cs-faculty.stanford.edu/~knuth/taocp.html' - - * John D. Lipson, "Elements of Algebra and Algebraic Computing", The - Benjamin Cummings Publishing Company Inc, 1981. - - * Alfred J. Menezes, Paul C. van Oorschot and Scott A. Vanstone, - "Handbook of Applied Cryptography", - `http://www.cacr.math.uwaterloo.ca/hac/' - - * Richard M. Stallman and the GCC Developer Community, "Using the - GNU Compiler Collection", Free Software Foundation, 2008, - available online `http://gcc.gnu.org/onlinedocs/', and in the GCC - package `ftp://ftp.gnu.org/gnu/gcc/' - -B.2 Papers -========== - - * Yves Bertot, Nicolas Magaud and Paul Zimmermann, "A Proof of GMP - Square Root", Journal of Automated Reasoning, volume 29, 2002, pp. - 225-252. Also available online as INRIA Research Report 4475, - June 2001, `http://www.inria.fr/rrrt/rr-4475.html' - - * Christoph Burnikel and Joachim Ziegler, "Fast Recursive Division", - Max-Planck-Institut fuer Informatik Research Report MPI-I-98-1-022, - `http://data.mpi-sb.mpg.de/internet/reports.nsf/NumberView/1998-1-022' - - * Torbjo"rn Granlund and Peter L. Montgomery, "Division by Invariant - Integers using Multiplication", in Proceedings of the SIGPLAN - PLDI'94 Conference, June 1994. Also available - `ftp://ftp.cwi.nl/pub/pmontgom/divcnst.psa4.gz' (and .psl.gz). - - * Niels Mo"ller and Torbjo"rn Granlund, "Improved division by - invariant integers", to appear. - - * Torbjo"rn Granlund and Niels Mo"ller, "Division of integers large - and small", to appear. - - * Tudor Jebelean, "An algorithm for exact division", Journal of - Symbolic Computation, volume 15, 1993, pp. 169-180. Research - report version available - `ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1992/92-35.ps.gz' - - * Tudor Jebelean, "Exact Division with Karatsuba Complexity - - Extended Abstract", RISC-Linz technical report 96-31, - `ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1996/96-31.ps.gz' - - * Tudor Jebelean, "Practical Integer Division with Karatsuba - Complexity", ISSAC 97, pp. 339-341. Technical report available - `ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1996/96-29.ps.gz' - - * Tudor Jebelean, "A Generalization of the Binary GCD Algorithm", - ISSAC 93, pp. 111-116. Technical report version available - `ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1993/93-01.ps.gz' - - * Tudor Jebelean, "A Double-Digit Lehmer-Euclid Algorithm for - Finding the GCD of Long Integers", Journal of Symbolic - Computation, volume 19, 1995, pp. 145-157. Technical report - version also available - `ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1992/92-69.ps.gz' - - * Werner Krandick and Tudor Jebelean, "Bidirectional Exact Integer - Division", Journal of Symbolic Computation, volume 21, 1996, pp. - 441-455. Early technical report version also available - `ftp://ftp.risc.uni-linz.ac.at/pub/techreports/1994/94-50.ps.gz' - - * Makoto Matsumoto and Takuji Nishimura, "Mersenne Twister: A - 623-dimensionally equidistributed uniform pseudorandom number - generator", ACM Transactions on Modelling and Computer Simulation, - volume 8, January 1998, pp. 3-30. Available online - `http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/ARTICLES/mt.ps.gz' - (or .pdf) - - * R. Moenck and A. Borodin, "Fast Modular Transforms via Division", - Proceedings of the 13th Annual IEEE Symposium on Switching and - Automata Theory, October 1972, pp. 90-96. Reprinted as "Fast - Modular Transforms", Journal of Computer and System Sciences, - volume 8, number 3, June 1974, pp. 366-386. - - * Niels Mo"ller, "On Scho"nhage's algorithm and subquadratic integer - GCD computation", in Mathematics of Computation, volume 77, - January 2008, pp. 589-607. - - * Peter L. Montgomery, "Modular Multiplication Without Trial - Division", in Mathematics of Computation, volume 44, number 170, - April 1985. - - * Arnold Scho"nhage and Volker Strassen, "Schnelle Multiplikation - grosser Zahlen", Computing 7, 1971, pp. 281-292. - - * Kenneth Weber, "The accelerated integer GCD algorithm", ACM - Transactions on Mathematical Software, volume 21, number 1, March - 1995, pp. 111-122. - - * Paul Zimmermann, "Karatsuba Square Root", INRIA Research Report - 3805, November 1999, `http://www.inria.fr/rrrt/rr-3805.html' - - * Paul Zimmermann, "A Proof of GMP Fast Division and Square Root - Implementations", - `http://www.loria.fr/~zimmerma/papers/proof-div-sqrt.ps.gz' - - * Dan Zuras, "On Squaring and Multiplying Large Integers", ARITH-11: - IEEE Symposium on Computer Arithmetic, 1993, pp. 260 to 271. - Reprinted as "More on Multiplying and Squaring Large Integers", - IEEE Transactions on Computers, volume 43, number 8, August 1994, - pp. 899-908. - - -File: gmp.info, Node: GNU Free Documentation License, Next: Concept Index, Prev: References, Up: Top - -Appendix C GNU Free Documentation License -***************************************** - - Version 1.3, 3 November 2008 - - Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. - `http://fsf.org/' - - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - 0. PREAMBLE - - The purpose of this License is to make a manual, textbook, or other - functional and useful document "free" in the sense of freedom: to - assure everyone the effective freedom to copy and redistribute it, - with or without modifying it, either commercially or - noncommercially. Secondarily, this License preserves for the - author and publisher a way to get credit for their work, while not - being considered responsible for modifications made by others. - - This License is a kind of "copyleft", which means that derivative - works of the document must themselves be free in the same sense. - It complements the GNU General Public License, which is a copyleft - license designed for free software. - - We have designed this License in order to use it for manuals for - free software, because free software needs free documentation: a - free program should come with manuals providing the same freedoms - that the software does. But this License is not limited to - software manuals; it can be used for any textual work, regardless - of subject matter or whether it is published as a printed book. - We recommend this License principally for works whose purpose is - instruction or reference. - - 1. APPLICABILITY AND DEFINITIONS - - This License applies to any manual or other work, in any medium, - that contains a notice placed by the copyright holder saying it - can be distributed under the terms of this License. Such a notice - grants a world-wide, royalty-free license, unlimited in duration, - to use that work under the conditions stated herein. The - "Document", below, refers to any such manual or work. Any member - of the public is a licensee, and is addressed as "you". You - accept the license if you copy, modify or distribute the work in a - way requiring permission under copyright law. - - A "Modified Version" of the Document means any work containing the - Document or a portion of it, either copied verbatim, or with - modifications and/or translated into another language. - - A "Secondary Section" is a named appendix or a front-matter section - of the Document that deals exclusively with the relationship of the - publishers or authors of the Document to the Document's overall - subject (or to related matters) and contains nothing that could - fall directly within that overall subject. (Thus, if the Document - is in part a textbook of mathematics, a Secondary Section may not - explain any mathematics.) The relationship could be a matter of - historical connection with the subject or with related matters, or - of legal, commercial, philosophical, ethical or political position - regarding them. - - The "Invariant Sections" are certain Secondary Sections whose - titles are designated, as being those of Invariant Sections, in - the notice that says that the Document is released under this - License. If a section does not fit the above definition of - Secondary then it is not allowed to be designated as Invariant. - The Document may contain zero Invariant Sections. If the Document - does not identify any Invariant Sections then there are none. - - The "Cover Texts" are certain short passages of text that are - listed, as Front-Cover Texts or Back-Cover Texts, in the notice - that says that the Document is released under this License. A - Front-Cover Text may be at most 5 words, and a Back-Cover Text may - be at most 25 words. - - A "Transparent" copy of the Document means a machine-readable copy, - represented in a format whose specification is available to the - general public, that is suitable for revising the document - straightforwardly with generic text editors or (for images - composed of pixels) generic paint programs or (for drawings) some - widely available drawing editor, and that is suitable for input to - text formatters or for automatic translation to a variety of - formats suitable for input to text formatters. A copy made in an - otherwise Transparent file format whose markup, or absence of - markup, has been arranged to thwart or discourage subsequent - modification by readers is not Transparent. An image format is - not Transparent if used for any substantial amount of text. A - copy that is not "Transparent" is called "Opaque". - - Examples of suitable formats for Transparent copies include plain - ASCII without markup, Texinfo input format, LaTeX input format, - SGML or XML using a publicly available DTD, and - standard-conforming simple HTML, PostScript or PDF designed for - human modification. Examples of transparent image formats include - PNG, XCF and JPG. Opaque formats include proprietary formats that - can be read and edited only by proprietary word processors, SGML or - XML for which the DTD and/or processing tools are not generally - available, and the machine-generated HTML, PostScript or PDF - produced by some word processors for output purposes only. - - The "Title Page" means, for a printed book, the title page itself, - plus such following pages as are needed to hold, legibly, the - material this License requires to appear in the title page. For - works in formats which do not have any title page as such, "Title - Page" means the text near the most prominent appearance of the - work's title, preceding the beginning of the body of the text. - - The "publisher" means any person or entity that distributes copies - of the Document to the public. - - A section "Entitled XYZ" means a named subunit of the Document - whose title either is precisely XYZ or contains XYZ in parentheses - following text that translates XYZ in another language. (Here XYZ - stands for a specific section name mentioned below, such as - "Acknowledgements", "Dedications", "Endorsements", or "History".) - To "Preserve the Title" of such a section when you modify the - Document means that it remains a section "Entitled XYZ" according - to this definition. - - The Document may include Warranty Disclaimers next to the notice - which states that this License applies to the Document. These - Warranty Disclaimers are considered to be included by reference in - this License, but only as regards disclaiming warranties: any other - implication that these Warranty Disclaimers may have is void and - has no effect on the meaning of this License. - - 2. VERBATIM COPYING - - You may copy and distribute the Document in any medium, either - commercially or noncommercially, provided that this License, the - copyright notices, and the license notice saying this License - applies to the Document are reproduced in all copies, and that you - add no other conditions whatsoever to those of this License. You - may not use technical measures to obstruct or control the reading - or further copying of the copies you make or distribute. However, - you may accept compensation in exchange for copies. If you - distribute a large enough number of copies you must also follow - the conditions in section 3. - - You may also lend copies, under the same conditions stated above, - and you may publicly display copies. - - 3. COPYING IN QUANTITY - - If you publish printed copies (or copies in media that commonly - have printed covers) of the Document, numbering more than 100, and - the Document's license notice requires Cover Texts, you must - enclose the copies in covers that carry, clearly and legibly, all - these Cover Texts: Front-Cover Texts on the front cover, and - Back-Cover Texts on the back cover. Both covers must also clearly - and legibly identify you as the publisher of these copies. The - front cover must present the full title with all words of the - title equally prominent and visible. You may add other material - on the covers in addition. Copying with changes limited to the - covers, as long as they preserve the title of the Document and - satisfy these conditions, can be treated as verbatim copying in - other respects. - - If the required texts for either cover are too voluminous to fit - legibly, you should put the first ones listed (as many as fit - reasonably) on the actual cover, and continue the rest onto - adjacent pages. - - If you publish or distribute Opaque copies of the Document - numbering more than 100, you must either include a - machine-readable Transparent copy along with each Opaque copy, or - state in or with each Opaque copy a computer-network location from - which the general network-using public has access to download - using public-standard network protocols a complete Transparent - copy of the Document, free of added material. If you use the - latter option, you must take reasonably prudent steps, when you - begin distribution of Opaque copies in quantity, to ensure that - this Transparent copy will remain thus accessible at the stated - location until at least one year after the last time you - distribute an Opaque copy (directly or through your agents or - retailers) of that edition to the public. - - It is requested, but not required, that you contact the authors of - the Document well before redistributing any large number of - copies, to give them a chance to provide you with an updated - version of the Document. - - 4. MODIFICATIONS - - You may copy and distribute a Modified Version of the Document - under the conditions of sections 2 and 3 above, provided that you - release the Modified Version under precisely this License, with - the Modified Version filling the role of the Document, thus - licensing distribution and modification of the Modified Version to - whoever possesses a copy of it. In addition, you must do these - things in the Modified Version: - - A. Use in the Title Page (and on the covers, if any) a title - distinct from that of the Document, and from those of - previous versions (which should, if there were any, be listed - in the History section of the Document). You may use the - same title as a previous version if the original publisher of - that version gives permission. - - B. List on the Title Page, as authors, one or more persons or - entities responsible for authorship of the modifications in - the Modified Version, together with at least five of the - principal authors of the Document (all of its principal - authors, if it has fewer than five), unless they release you - from this requirement. - - C. State on the Title page the name of the publisher of the - Modified Version, as the publisher. - - D. Preserve all the copyright notices of the Document. - - E. Add an appropriate copyright notice for your modifications - adjacent to the other copyright notices. - - F. Include, immediately after the copyright notices, a license - notice giving the public permission to use the Modified - Version under the terms of this License, in the form shown in - the Addendum below. - - G. Preserve in that license notice the full lists of Invariant - Sections and required Cover Texts given in the Document's - license notice. - - H. Include an unaltered copy of this License. - - I. Preserve the section Entitled "History", Preserve its Title, - and add to it an item stating at least the title, year, new - authors, and publisher of the Modified Version as given on - the Title Page. If there is no section Entitled "History" in - the Document, create one stating the title, year, authors, - and publisher of the Document as given on its Title Page, - then add an item describing the Modified Version as stated in - the previous sentence. - - J. Preserve the network location, if any, given in the Document - for public access to a Transparent copy of the Document, and - likewise the network locations given in the Document for - previous versions it was based on. These may be placed in - the "History" section. You may omit a network location for a - work that was published at least four years before the - Document itself, or if the original publisher of the version - it refers to gives permission. - - K. For any section Entitled "Acknowledgements" or "Dedications", - Preserve the Title of the section, and preserve in the - section all the substance and tone of each of the contributor - acknowledgements and/or dedications given therein. - - L. Preserve all the Invariant Sections of the Document, - unaltered in their text and in their titles. Section numbers - or the equivalent are not considered part of the section - titles. - - M. Delete any section Entitled "Endorsements". Such a section - may not be included in the Modified Version. - - N. Do not retitle any existing section to be Entitled - "Endorsements" or to conflict in title with any Invariant - Section. - - O. Preserve any Warranty Disclaimers. - - If the Modified Version includes new front-matter sections or - appendices that qualify as Secondary Sections and contain no - material copied from the Document, you may at your option - designate some or all of these sections as invariant. To do this, - add their titles to the list of Invariant Sections in the Modified - Version's license notice. These titles must be distinct from any - other section titles. - - You may add a section Entitled "Endorsements", provided it contains - nothing but endorsements of your Modified Version by various - parties--for example, statements of peer review or that the text - has been approved by an organization as the authoritative - definition of a standard. - - You may add a passage of up to five words as a Front-Cover Text, - and a passage of up to 25 words as a Back-Cover Text, to the end - of the list of Cover Texts in the Modified Version. Only one - passage of Front-Cover Text and one of Back-Cover Text may be - added by (or through arrangements made by) any one entity. If the - Document already includes a cover text for the same cover, - previously added by you or by arrangement made by the same entity - you are acting on behalf of, you may not add another; but you may - replace the old one, on explicit permission from the previous - publisher that added the old one. - - The author(s) and publisher(s) of the Document do not by this - License give permission to use their names for publicity for or to - assert or imply endorsement of any Modified Version. - - 5. COMBINING DOCUMENTS - - You may combine the Document with other documents released under - this License, under the terms defined in section 4 above for - modified versions, provided that you include in the combination - all of the Invariant Sections of all of the original documents, - unmodified, and list them all as Invariant Sections of your - combined work in its license notice, and that you preserve all - their Warranty Disclaimers. - - The combined work need only contain one copy of this License, and - multiple identical Invariant Sections may be replaced with a single - copy. If there are multiple Invariant Sections with the same name - but different contents, make the title of each such section unique - by adding at the end of it, in parentheses, the name of the - original author or publisher of that section if known, or else a - unique number. Make the same adjustment to the section titles in - the list of Invariant Sections in the license notice of the - combined work. - - In the combination, you must combine any sections Entitled - "History" in the various original documents, forming one section - Entitled "History"; likewise combine any sections Entitled - "Acknowledgements", and any sections Entitled "Dedications". You - must delete all sections Entitled "Endorsements." - - 6. COLLECTIONS OF DOCUMENTS - - You may make a collection consisting of the Document and other - documents released under this License, and replace the individual - copies of this License in the various documents with a single copy - that is included in the collection, provided that you follow the - rules of this License for verbatim copying of each of the - documents in all other respects. - - You may extract a single document from such a collection, and - distribute it individually under this License, provided you insert - a copy of this License into the extracted document, and follow - this License in all other respects regarding verbatim copying of - that document. - - 7. AGGREGATION WITH INDEPENDENT WORKS - - A compilation of the Document or its derivatives with other - separate and independent documents or works, in or on a volume of - a storage or distribution medium, is called an "aggregate" if the - copyright resulting from the compilation is not used to limit the - legal rights of the compilation's users beyond what the individual - works permit. When the Document is included in an aggregate, this - License does not apply to the other works in the aggregate which - are not themselves derivative works of the Document. - - If the Cover Text requirement of section 3 is applicable to these - copies of the Document, then if the Document is less than one half - of the entire aggregate, the Document's Cover Texts may be placed - on covers that bracket the Document within the aggregate, or the - electronic equivalent of covers if the Document is in electronic - form. Otherwise they must appear on printed covers that bracket - the whole aggregate. - - 8. TRANSLATION - - Translation is considered a kind of modification, so you may - distribute translations of the Document under the terms of section - 4. Replacing Invariant Sections with translations requires special - permission from their copyright holders, but you may include - translations of some or all Invariant Sections in addition to the - original versions of these Invariant Sections. You may include a - translation of this License, and all the license notices in the - Document, and any Warranty Disclaimers, provided that you also - include the original English version of this License and the - original versions of those notices and disclaimers. In case of a - disagreement between the translation and the original version of - this License or a notice or disclaimer, the original version will - prevail. - - If a section in the Document is Entitled "Acknowledgements", - "Dedications", or "History", the requirement (section 4) to - Preserve its Title (section 1) will typically require changing the - actual title. - - 9. TERMINATION - - You may not copy, modify, sublicense, or distribute the Document - except as expressly provided under this License. Any attempt - otherwise to copy, modify, sublicense, or distribute it is void, - and will automatically terminate your rights under this License. - - However, if you cease all violation of this License, then your - license from a particular copyright holder is reinstated (a) - provisionally, unless and until the copyright holder explicitly - and finally terminates your license, and (b) permanently, if the - copyright holder fails to notify you of the violation by some - reasonable means prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is - reinstated permanently if the copyright holder notifies you of the - violation by some reasonable means, this is the first time you have - received notice of violation of this License (for any work) from - that copyright holder, and you cure the violation prior to 30 days - after your receipt of the notice. - - Termination of your rights under this section does not terminate - the licenses of parties who have received copies or rights from - you under this License. If your rights have been terminated and - not permanently reinstated, receipt of a copy of some or all of - the same material does not give you any rights to use it. - - 10. FUTURE REVISIONS OF THIS LICENSE - - The Free Software Foundation may publish new, revised versions of - the GNU Free Documentation License from time to time. Such new - versions will be similar in spirit to the present version, but may - differ in detail to address new problems or concerns. See - `http://www.gnu.org/copyleft/'. - - Each version of the License is given a distinguishing version - number. If the Document specifies that a particular numbered - version of this License "or any later version" applies to it, you - have the option of following the terms and conditions either of - that specified version or of any later version that has been - published (not as a draft) by the Free Software Foundation. If - the Document does not specify a version number of this License, - you may choose any version ever published (not as a draft) by the - Free Software Foundation. If the Document specifies that a proxy - can decide which future versions of this License can be used, that - proxy's public statement of acceptance of a version permanently - authorizes you to choose that version for the Document. - - 11. RELICENSING - - "Massive Multiauthor Collaboration Site" (or "MMC Site") means any - World Wide Web server that publishes copyrightable works and also - provides prominent facilities for anybody to edit those works. A - public wiki that anybody can edit is an example of such a server. - A "Massive Multiauthor Collaboration" (or "MMC") contained in the - site means any set of copyrightable works thus published on the MMC - site. - - "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 - license published by Creative Commons Corporation, a not-for-profit - corporation with a principal place of business in San Francisco, - California, as well as future copyleft versions of that license - published by that same organization. - - "Incorporate" means to publish or republish a Document, in whole or - in part, as part of another Document. - - An MMC is "eligible for relicensing" if it is licensed under this - License, and if all works that were first published under this - License somewhere other than this MMC, and subsequently - incorporated in whole or in part into the MMC, (1) had no cover - texts or invariant sections, and (2) were thus incorporated prior - to November 1, 2008. - - The operator of an MMC Site may republish an MMC contained in the - site under CC-BY-SA on the same site at any time before August 1, - 2009, provided the MMC is eligible for relicensing. - - -ADDENDUM: How to use this License for your documents -==================================================== - -To use this License in a document you have written, include a copy of -the License in the document and put the following copyright and license -notices just after the title page: - - Copyright (C) YEAR YOUR NAME. - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.3 - or any later version published by the Free Software Foundation; - with no Invariant Sections, no Front-Cover Texts, and no Back-Cover - Texts. A copy of the license is included in the section entitled ``GNU - Free Documentation License''. - - If you have Invariant Sections, Front-Cover Texts and Back-Cover -Texts, replace the "with...Texts." line with this: - - with the Invariant Sections being LIST THEIR TITLES, with - the Front-Cover Texts being LIST, and with the Back-Cover Texts - being LIST. - - If you have Invariant Sections without Cover Texts, or some other -combination of the three, merge those two alternatives to suit the -situation. - - If your document contains nontrivial examples of program code, we -recommend releasing these examples in parallel under your choice of -free software license, such as the GNU General Public License, to -permit their use in free software. - - -File: gmp.info, Node: Concept Index, Next: Function Index, Prev: GNU Free Documentation License, Up: Top - -Concept Index -************* - -[index] -* Menu: - -* #include: Headers and Libraries. - (line 6) -* --build: Build Options. (line 52) -* --disable-fft: Build Options. (line 317) -* --disable-shared: Build Options. (line 45) -* --disable-static: Build Options. (line 45) -* --enable-alloca: Build Options. (line 278) -* --enable-assert: Build Options. (line 327) -* --enable-cxx: Build Options. (line 230) -* --enable-fat: Build Options. (line 164) -* --enable-mpbsd: Build Options. (line 322) -* --enable-profiling <1>: Profiling. (line 6) -* --enable-profiling: Build Options. (line 331) -* --exec-prefix: Build Options. (line 32) -* --host: Build Options. (line 66) -* --prefix: Build Options. (line 32) -* -finstrument-functions: Profiling. (line 66) -* 2exp functions: Efficiency. (line 43) -* 68000: Notes for Particular Systems. - (line 80) -* 80x86: Notes for Particular Systems. - (line 126) -* ABI <1>: Build Options. (line 171) -* ABI: ABI and ISA. (line 6) -* About this manual: Introduction to GMP. (line 58) -* AC_CHECK_LIB: Autoconf. (line 11) -* AIX <1>: ABI and ISA. (line 184) -* AIX <2>: Notes for Particular Systems. - (line 7) -* AIX: ABI and ISA. (line 169) -* Algorithms: Algorithms. (line 6) -* alloca: Build Options. (line 278) -* Allocation of memory: Custom Allocation. (line 6) -* AMD64: ABI and ISA. (line 44) -* Anonymous FTP of latest version: Introduction to GMP. (line 38) -* Application Binary Interface: ABI and ISA. (line 6) -* Arithmetic functions <1>: Float Arithmetic. (line 6) -* Arithmetic functions <2>: Integer Arithmetic. (line 6) -* Arithmetic functions: Rational Arithmetic. (line 6) -* ARM: Notes for Particular Systems. - (line 20) -* Assembly cache handling: Assembly Cache Handling. - (line 6) -* Assembly carry propagation: Assembly Carry Propagation. - (line 6) -* Assembly code organisation: Assembly Code Organisation. - (line 6) -* Assembly coding: Assembly Coding. (line 6) -* Assembly floating Point: Assembly Floating Point. - (line 6) -* Assembly loop unrolling: Assembly Loop Unrolling. - (line 6) -* Assembly SIMD: Assembly SIMD Instructions. - (line 6) -* Assembly software pipelining: Assembly Software Pipelining. - (line 6) -* Assembly writing guide: Assembly Writing Guide. - (line 6) -* Assertion checking <1>: Debugging. (line 79) -* Assertion checking: Build Options. (line 327) -* Assignment functions <1>: Assigning Floats. (line 6) -* Assignment functions <2>: Initializing Rationals. - (line 6) -* Assignment functions <3>: Simultaneous Integer Init & Assign. - (line 6) -* Assignment functions <4>: Simultaneous Float Init & Assign. - (line 6) -* Assignment functions: Assigning Integers. (line 6) -* Autoconf: Autoconf. (line 6) -* Basics: GMP Basics. (line 6) -* Berkeley MP compatible functions <1>: Build Options. (line 322) -* Berkeley MP compatible functions: BSD Compatible Functions. - (line 6) -* Binomial coefficient algorithm: Binomial Coefficients Algorithm. - (line 6) -* Binomial coefficient functions: Number Theoretic Functions. - (line 100) -* Binutils strip: Known Build Problems. - (line 28) -* Bit manipulation functions: Integer Logic and Bit Fiddling. - (line 6) -* Bit scanning functions: Integer Logic and Bit Fiddling. - (line 38) -* Bit shift left: Integer Arithmetic. (line 35) -* Bit shift right: Integer Division. (line 53) -* Bits per limb: Useful Macros and Constants. - (line 7) -* BSD MP compatible functions <1>: Build Options. (line 322) -* BSD MP compatible functions: BSD Compatible Functions. - (line 6) -* Bug reporting: Reporting Bugs. (line 6) -* Build directory: Build Options. (line 19) -* Build notes for binary packaging: Notes for Package Builds. - (line 6) -* Build notes for particular systems: Notes for Particular Systems. - (line 6) -* Build options: Build Options. (line 6) -* Build problems known: Known Build Problems. - (line 6) -* Build system: Build Options. (line 52) -* Building GMP: Installing GMP. (line 6) -* Bus error: Debugging. (line 7) -* C compiler: Build Options. (line 182) -* C++ compiler: Build Options. (line 254) -* C++ interface: C++ Class Interface. (line 6) -* C++ interface internals: C++ Interface Internals. - (line 6) -* C++ istream input: C++ Formatted Input. (line 6) -* C++ ostream output: C++ Formatted Output. - (line 6) -* C++ support: Build Options. (line 230) -* CC: Build Options. (line 182) -* CC_FOR_BUILD: Build Options. (line 217) -* CFLAGS: Build Options. (line 182) -* Checker: Debugging. (line 115) -* checkergcc: Debugging. (line 122) -* Code organisation: Assembly Code Organisation. - (line 6) -* Compaq C++: Notes for Particular Systems. - (line 25) -* Comparison functions <1>: Integer Comparisons. (line 6) -* Comparison functions <2>: Comparing Rationals. (line 6) -* Comparison functions: Float Comparison. (line 6) -* Compatibility with older versions: Compatibility with older versions. - (line 6) -* Conditions for copying GNU MP: Copying. (line 6) -* Configuring GMP: Installing GMP. (line 6) -* Congruence algorithm: Exact Remainder. (line 29) -* Congruence functions: Integer Division. (line 124) -* Constants: Useful Macros and Constants. - (line 6) -* Contributors: Contributors. (line 6) -* Conventions for parameters: Parameter Conventions. - (line 6) -* Conventions for variables: Variable Conventions. - (line 6) -* Conversion functions <1>: Converting Integers. (line 6) -* Conversion functions <2>: Converting Floats. (line 6) -* Conversion functions: Rational Conversions. - (line 6) -* Copying conditions: Copying. (line 6) -* CPPFLAGS: Build Options. (line 208) -* CPU types <1>: Introduction to GMP. (line 24) -* CPU types: Build Options. (line 108) -* Cross compiling: Build Options. (line 66) -* Custom allocation: Custom Allocation. (line 6) -* CXX: Build Options. (line 254) -* CXXFLAGS: Build Options. (line 254) -* Cygwin: Notes for Particular Systems. - (line 43) -* Darwin: Known Build Problems. - (line 51) -* Debugging: Debugging. (line 6) -* Demonstration programs: Demonstration Programs. - (line 6) -* Digits in an integer: Miscellaneous Integer Functions. - (line 23) -* Divisibility algorithm: Exact Remainder. (line 29) -* Divisibility functions: Integer Division. (line 124) -* Divisibility testing: Efficiency. (line 91) -* Division algorithms: Division Algorithms. (line 6) -* Division functions <1>: Rational Arithmetic. (line 22) -* Division functions <2>: Integer Division. (line 6) -* Division functions: Float Arithmetic. (line 33) -* DJGPP <1>: Notes for Particular Systems. - (line 43) -* DJGPP: Known Build Problems. - (line 18) -* DLLs: Notes for Particular Systems. - (line 56) -* DocBook: Build Options. (line 354) -* Documentation formats: Build Options. (line 347) -* Documentation license: GNU Free Documentation License. - (line 6) -* DVI: Build Options. (line 350) -* Efficiency: Efficiency. (line 6) -* Emacs: Emacs. (line 6) -* Exact division functions: Integer Division. (line 102) -* Exact remainder: Exact Remainder. (line 6) -* Example programs: Demonstration Programs. - (line 6) -* Exec prefix: Build Options. (line 32) -* Execution profiling <1>: Profiling. (line 6) -* Execution profiling: Build Options. (line 331) -* Exponentiation functions <1>: Integer Exponentiation. - (line 6) -* Exponentiation functions: Float Arithmetic. (line 41) -* Export: Integer Import and Export. - (line 45) -* Expression parsing demo: Demonstration Programs. - (line 18) -* Extended GCD: Number Theoretic Functions. - (line 45) -* Factor removal functions: Number Theoretic Functions. - (line 90) -* Factorial algorithm: Factorial Algorithm. (line 6) -* Factorial functions: Number Theoretic Functions. - (line 95) -* Factorization demo: Demonstration Programs. - (line 25) -* Fast Fourier Transform: FFT Multiplication. (line 6) -* Fat binary: Build Options. (line 164) -* FFT multiplication <1>: FFT Multiplication. (line 6) -* FFT multiplication: Build Options. (line 317) -* Fibonacci number algorithm: Fibonacci Numbers Algorithm. - (line 6) -* Fibonacci sequence functions: Number Theoretic Functions. - (line 108) -* Float arithmetic functions: Float Arithmetic. (line 6) -* Float assignment functions <1>: Simultaneous Float Init & Assign. - (line 6) -* Float assignment functions: Assigning Floats. (line 6) -* Float comparison functions: Float Comparison. (line 6) -* Float conversion functions: Converting Floats. (line 6) -* Float functions: Floating-point Functions. - (line 6) -* Float initialization functions <1>: Simultaneous Float Init & Assign. - (line 6) -* Float initialization functions: Initializing Floats. (line 6) -* Float input and output functions: I/O of Floats. (line 6) -* Float internals: Float Internals. (line 6) -* Float miscellaneous functions: Miscellaneous Float Functions. - (line 6) -* Float random number functions: Miscellaneous Float Functions. - (line 27) -* Float rounding functions: Miscellaneous Float Functions. - (line 9) -* Float sign tests: Float Comparison. (line 33) -* Floating point mode: Notes for Particular Systems. - (line 34) -* Floating-point functions: Floating-point Functions. - (line 6) -* Floating-point number: Nomenclature and Types. - (line 21) -* fnccheck: Profiling. (line 77) -* Formatted input: Formatted Input. (line 6) -* Formatted output: Formatted Output. (line 6) -* Free Documentation License: GNU Free Documentation License. - (line 6) -* frexp <1>: Converting Floats. (line 23) -* frexp: Converting Integers. (line 42) -* FTP of latest version: Introduction to GMP. (line 38) -* Function classes: Function Classes. (line 6) -* FunctionCheck: Profiling. (line 77) -* GCC Checker: Debugging. (line 115) -* GCD algorithms: Greatest Common Divisor Algorithms. - (line 6) -* GCD extended: Number Theoretic Functions. - (line 45) -* GCD functions: Number Theoretic Functions. - (line 30) -* GDB: Debugging. (line 58) -* Generic C: Build Options. (line 153) -* GMP Perl module: Demonstration Programs. - (line 35) -* GMP version number: Useful Macros and Constants. - (line 12) -* gmp.h: Headers and Libraries. - (line 6) -* gmpxx.h: C++ Interface General. - (line 8) -* GNU Debugger: Debugging. (line 58) -* GNU Free Documentation License: GNU Free Documentation License. - (line 6) -* GNU strip: Known Build Problems. - (line 28) -* gprof: Profiling. (line 41) -* Greatest common divisor algorithms: Greatest Common Divisor Algorithms. - (line 6) -* Greatest common divisor functions: Number Theoretic Functions. - (line 30) -* Hardware floating point mode: Notes for Particular Systems. - (line 34) -* Headers: Headers and Libraries. - (line 6) -* Heap problems: Debugging. (line 24) -* Home page: Introduction to GMP. (line 34) -* Host system: Build Options. (line 66) -* HP-UX: ABI and ISA. (line 107) -* HPPA: ABI and ISA. (line 68) -* I/O functions <1>: I/O of Integers. (line 6) -* I/O functions <2>: I/O of Rationals. (line 6) -* I/O functions: I/O of Floats. (line 6) -* i386: Notes for Particular Systems. - (line 126) -* IA-64: ABI and ISA. (line 107) -* Import: Integer Import and Export. - (line 11) -* In-place operations: Efficiency. (line 57) -* Include files: Headers and Libraries. - (line 6) -* info-lookup-symbol: Emacs. (line 6) -* Initialization functions <1>: Initializing Integers. - (line 6) -* Initialization functions <2>: Initializing Rationals. - (line 6) -* Initialization functions <3>: Random State Initialization. - (line 6) -* Initialization functions <4>: Simultaneous Float Init & Assign. - (line 6) -* Initialization functions <5>: Simultaneous Integer Init & Assign. - (line 6) -* Initialization functions: Initializing Floats. (line 6) -* Initializing and clearing: Efficiency. (line 21) -* Input functions <1>: I/O of Integers. (line 6) -* Input functions <2>: I/O of Rationals. (line 6) -* Input functions <3>: I/O of Floats. (line 6) -* Input functions: Formatted Input Functions. - (line 6) -* Install prefix: Build Options. (line 32) -* Installing GMP: Installing GMP. (line 6) -* Instruction Set Architecture: ABI and ISA. (line 6) -* instrument-functions: Profiling. (line 66) -* Integer: Nomenclature and Types. - (line 6) -* Integer arithmetic functions: Integer Arithmetic. (line 6) -* Integer assignment functions <1>: Simultaneous Integer Init & Assign. - (line 6) -* Integer assignment functions: Assigning Integers. (line 6) -* Integer bit manipulation functions: Integer Logic and Bit Fiddling. - (line 6) -* Integer comparison functions: Integer Comparisons. (line 6) -* Integer conversion functions: Converting Integers. (line 6) -* Integer division functions: Integer Division. (line 6) -* Integer exponentiation functions: Integer Exponentiation. - (line 6) -* Integer export: Integer Import and Export. - (line 45) -* Integer functions: Integer Functions. (line 6) -* Integer import: Integer Import and Export. - (line 11) -* Integer initialization functions <1>: Simultaneous Integer Init & Assign. - (line 6) -* Integer initialization functions: Initializing Integers. - (line 6) -* Integer input and output functions: I/O of Integers. (line 6) -* Integer internals: Integer Internals. (line 6) -* Integer logical functions: Integer Logic and Bit Fiddling. - (line 6) -* Integer miscellaneous functions: Miscellaneous Integer Functions. - (line 6) -* Integer random number functions: Integer Random Numbers. - (line 6) -* Integer root functions: Integer Roots. (line 6) -* Integer sign tests: Integer Comparisons. (line 28) -* Integer special functions: Integer Special Functions. - (line 6) -* Interix: Notes for Particular Systems. - (line 51) -* Internals: Internals. (line 6) -* Introduction: Introduction to GMP. (line 6) -* Inverse modulo functions: Number Theoretic Functions. - (line 60) -* IRIX <1>: Known Build Problems. - (line 38) -* IRIX: ABI and ISA. (line 132) -* ISA: ABI and ISA. (line 6) -* istream input: C++ Formatted Input. (line 6) -* Jacobi symbol algorithm: Jacobi Symbol. (line 6) -* Jacobi symbol functions: Number Theoretic Functions. - (line 66) -* Karatsuba multiplication: Karatsuba Multiplication. - (line 6) -* Karatsuba square root algorithm: Square Root Algorithm. - (line 6) -* Kronecker symbol functions: Number Theoretic Functions. - (line 78) -* Language bindings: Language Bindings. (line 6) -* Latest version of GMP: Introduction to GMP. (line 38) -* LCM functions: Number Theoretic Functions. - (line 55) -* Least common multiple functions: Number Theoretic Functions. - (line 55) -* Legendre symbol functions: Number Theoretic Functions. - (line 69) -* libgmp: Headers and Libraries. - (line 22) -* libgmpxx: Headers and Libraries. - (line 27) -* Libraries: Headers and Libraries. - (line 22) -* Libtool: Headers and Libraries. - (line 33) -* Libtool versioning: Notes for Package Builds. - (line 9) -* License conditions: Copying. (line 6) -* Limb: Nomenclature and Types. - (line 31) -* Limb size: Useful Macros and Constants. - (line 7) -* Linear congruential algorithm: Random Number Algorithms. - (line 25) -* Linear congruential random numbers: Random State Initialization. - (line 32) -* Linking: Headers and Libraries. - (line 22) -* Logical functions: Integer Logic and Bit Fiddling. - (line 6) -* Low-level functions: Low-level Functions. (line 6) -* Lucas number algorithm: Lucas Numbers Algorithm. - (line 6) -* Lucas number functions: Number Theoretic Functions. - (line 119) -* MacOS X: Known Build Problems. - (line 51) -* Mailing lists: Introduction to GMP. (line 45) -* Malloc debugger: Debugging. (line 30) -* Malloc problems: Debugging. (line 24) -* Memory allocation: Custom Allocation. (line 6) -* Memory management: Memory Management. (line 6) -* Mersenne twister algorithm: Random Number Algorithms. - (line 17) -* Mersenne twister random numbers: Random State Initialization. - (line 13) -* MINGW: Notes for Particular Systems. - (line 43) -* MIPS: ABI and ISA. (line 132) -* Miscellaneous float functions: Miscellaneous Float Functions. - (line 6) -* Miscellaneous integer functions: Miscellaneous Integer Functions. - (line 6) -* MMX: Notes for Particular Systems. - (line 132) -* Modular inverse functions: Number Theoretic Functions. - (line 60) -* Most significant bit: Miscellaneous Integer Functions. - (line 34) -* mp.h: BSD Compatible Functions. - (line 21) -* MPN_PATH: Build Options. (line 335) -* MS Windows: Notes for Particular Systems. - (line 56) -* MS-DOS: Notes for Particular Systems. - (line 43) -* Multi-threading: Reentrancy. (line 6) -* Multiplication algorithms: Multiplication Algorithms. - (line 6) -* Nails: Low-level Functions. (line 478) -* Native compilation: Build Options. (line 52) -* NeXT: Known Build Problems. - (line 57) -* Next prime function: Number Theoretic Functions. - (line 23) -* Nomenclature: Nomenclature and Types. - (line 6) -* Non-Unix systems: Build Options. (line 11) -* Nth root algorithm: Nth Root Algorithm. (line 6) -* Number sequences: Efficiency. (line 147) -* Number theoretic functions: Number Theoretic Functions. - (line 6) -* Numerator and denominator: Applying Integer Functions. - (line 6) -* obstack output: Formatted Output Functions. - (line 81) -* OpenBSD: Notes for Particular Systems. - (line 86) -* Optimizing performance: Performance optimization. - (line 6) -* ostream output: C++ Formatted Output. - (line 6) -* Other languages: Language Bindings. (line 6) -* Output functions <1>: I/O of Floats. (line 6) -* Output functions <2>: I/O of Rationals. (line 6) -* Output functions <3>: Formatted Output Functions. - (line 6) -* Output functions: I/O of Integers. (line 6) -* Packaged builds: Notes for Package Builds. - (line 6) -* Parameter conventions: Parameter Conventions. - (line 6) -* Parsing expressions demo: Demonstration Programs. - (line 21) -* Particular systems: Notes for Particular Systems. - (line 6) -* Past GMP versions: Compatibility with older versions. - (line 6) -* PDF: Build Options. (line 350) -* Perfect power algorithm: Perfect Power Algorithm. - (line 6) -* Perfect power functions: Integer Roots. (line 27) -* Perfect square algorithm: Perfect Square Algorithm. - (line 6) -* Perfect square functions: Integer Roots. (line 36) -* perl: Demonstration Programs. - (line 35) -* Perl module: Demonstration Programs. - (line 35) -* Postscript: Build Options. (line 350) -* Power/PowerPC <1>: Known Build Problems. - (line 63) -* Power/PowerPC: Notes for Particular Systems. - (line 92) -* Powering algorithms: Powering Algorithms. (line 6) -* Powering functions <1>: Float Arithmetic. (line 41) -* Powering functions: Integer Exponentiation. - (line 6) -* PowerPC: ABI and ISA. (line 167) -* Precision of floats: Floating-point Functions. - (line 6) -* Precision of hardware floating point: Notes for Particular Systems. - (line 34) -* Prefix: Build Options. (line 32) -* Prime testing algorithms: Prime Testing Algorithm. - (line 6) -* Prime testing functions: Number Theoretic Functions. - (line 7) -* printf formatted output: Formatted Output. (line 6) -* Probable prime testing functions: Number Theoretic Functions. - (line 7) -* prof: Profiling. (line 24) -* Profiling: Profiling. (line 6) -* Radix conversion algorithms: Radix Conversion Algorithms. - (line 6) -* Random number algorithms: Random Number Algorithms. - (line 6) -* Random number functions <1>: Integer Random Numbers. - (line 6) -* Random number functions <2>: Miscellaneous Float Functions. - (line 27) -* Random number functions: Random Number Functions. - (line 6) -* Random number seeding: Random State Seeding. - (line 6) -* Random number state: Random State Initialization. - (line 6) -* Random state: Nomenclature and Types. - (line 46) -* Rational arithmetic: Efficiency. (line 113) -* Rational arithmetic functions: Rational Arithmetic. (line 6) -* Rational assignment functions: Initializing Rationals. - (line 6) -* Rational comparison functions: Comparing Rationals. (line 6) -* Rational conversion functions: Rational Conversions. - (line 6) -* Rational initialization functions: Initializing Rationals. - (line 6) -* Rational input and output functions: I/O of Rationals. (line 6) -* Rational internals: Rational Internals. (line 6) -* Rational number: Nomenclature and Types. - (line 16) -* Rational number functions: Rational Number Functions. - (line 6) -* Rational numerator and denominator: Applying Integer Functions. - (line 6) -* Rational sign tests: Comparing Rationals. (line 27) -* Raw output internals: Raw Output Internals. - (line 6) -* Reallocations: Efficiency. (line 30) -* Reentrancy: Reentrancy. (line 6) -* References: References. (line 6) -* Remove factor functions: Number Theoretic Functions. - (line 90) -* Reporting bugs: Reporting Bugs. (line 6) -* Root extraction algorithm: Nth Root Algorithm. (line 6) -* Root extraction algorithms: Root Extraction Algorithms. - (line 6) -* Root extraction functions <1>: Float Arithmetic. (line 37) -* Root extraction functions: Integer Roots. (line 6) -* Root testing functions: Integer Roots. (line 36) -* Rounding functions: Miscellaneous Float Functions. - (line 9) -* Sample programs: Demonstration Programs. - (line 6) -* Scan bit functions: Integer Logic and Bit Fiddling. - (line 38) -* scanf formatted input: Formatted Input. (line 6) -* SCO: Known Build Problems. - (line 38) -* Seeding random numbers: Random State Seeding. - (line 6) -* Segmentation violation: Debugging. (line 7) -* Sequent Symmetry: Known Build Problems. - (line 68) -* Services for Unix: Notes for Particular Systems. - (line 51) -* Shared library versioning: Notes for Package Builds. - (line 9) -* Sign tests <1>: Float Comparison. (line 33) -* Sign tests <2>: Integer Comparisons. (line 28) -* Sign tests: Comparing Rationals. (line 27) -* Size in digits: Miscellaneous Integer Functions. - (line 23) -* Small operands: Efficiency. (line 7) -* Solaris <1>: ABI and ISA. (line 201) -* Solaris: Known Build Problems. - (line 78) -* Sparc: Notes for Particular Systems. - (line 108) -* Sparc V9: ABI and ISA. (line 201) -* Special integer functions: Integer Special Functions. - (line 6) -* Square root algorithm: Square Root Algorithm. - (line 6) -* SSE2: Notes for Particular Systems. - (line 132) -* Stack backtrace: Debugging. (line 50) -* Stack overflow <1>: Debugging. (line 7) -* Stack overflow: Build Options. (line 278) -* Static linking: Efficiency. (line 14) -* stdarg.h: Headers and Libraries. - (line 17) -* stdio.h: Headers and Libraries. - (line 11) -* Stripped libraries: Known Build Problems. - (line 28) -* Sun: ABI and ISA. (line 201) -* SunOS: Notes for Particular Systems. - (line 120) -* Systems: Notes for Particular Systems. - (line 6) -* Temporary memory: Build Options. (line 278) -* Texinfo: Build Options. (line 347) -* Text input/output: Efficiency. (line 153) -* Thread safety: Reentrancy. (line 6) -* Toom multiplication <1>: Other Multiplication. - (line 6) -* Toom multiplication <2>: Toom 4-Way Multiplication. - (line 6) -* Toom multiplication: Toom 3-Way Multiplication. - (line 6) -* Types: Nomenclature and Types. - (line 6) -* ui and si functions: Efficiency. (line 50) -* Unbalanced multiplication: Unbalanced Multiplication. - (line 6) -* Upward compatibility: Compatibility with older versions. - (line 6) -* Useful macros and constants: Useful Macros and Constants. - (line 6) -* User-defined precision: Floating-point Functions. - (line 6) -* Valgrind: Debugging. (line 130) -* Variable conventions: Variable Conventions. - (line 6) -* Version number: Useful Macros and Constants. - (line 12) -* Web page: Introduction to GMP. (line 34) -* Windows: Notes for Particular Systems. - (line 56) -* x86: Notes for Particular Systems. - (line 126) -* x87: Notes for Particular Systems. - (line 34) -* XML: Build Options. (line 354) - - -File: gmp.info, Node: Function Index, Prev: Concept Index, Up: Top - -Function and Type Index -*********************** - -[index] -* Menu: - -* __GMP_CC: Useful Macros and Constants. - (line 23) -* __GMP_CFLAGS: Useful Macros and Constants. - (line 24) -* __GNU_MP_VERSION: Useful Macros and Constants. - (line 10) -* __GNU_MP_VERSION_MINOR: Useful Macros and Constants. - (line 11) -* __GNU_MP_VERSION_PATCHLEVEL: Useful Macros and Constants. - (line 12) -* _mpz_realloc: Integer Special Functions. - (line 51) -* abs <1>: C++ Interface Rationals. - (line 43) -* abs <2>: C++ Interface Integers. - (line 42) -* abs: C++ Interface Floats. - (line 70) -* ceil: C++ Interface Floats. - (line 71) -* cmp <1>: C++ Interface Floats. - (line 72) -* cmp <2>: C++ Interface Rationals. - (line 44) -* cmp <3>: C++ Interface Integers. - (line 44) -* cmp: C++ Interface Rationals. - (line 45) -* floor: C++ Interface Floats. - (line 80) -* gcd: BSD Compatible Functions. - (line 82) -* gmp_asprintf: Formatted Output Functions. - (line 65) -* gmp_errno: Random State Initialization. - (line 55) -* GMP_ERROR_INVALID_ARGUMENT: Random State Initialization. - (line 55) -* GMP_ERROR_UNSUPPORTED_ARGUMENT: Random State Initialization. - (line 55) -* gmp_fprintf: Formatted Output Functions. - (line 29) -* gmp_fscanf: Formatted Input Functions. - (line 25) -* GMP_LIMB_BITS: Low-level Functions. (line 508) -* GMP_NAIL_BITS: Low-level Functions. (line 506) -* GMP_NAIL_MASK: Low-level Functions. (line 516) -* GMP_NUMB_BITS: Low-level Functions. (line 507) -* GMP_NUMB_MASK: Low-level Functions. (line 517) -* GMP_NUMB_MAX: Low-level Functions. (line 525) -* gmp_obstack_printf: Formatted Output Functions. - (line 79) -* gmp_obstack_vprintf: Formatted Output Functions. - (line 81) -* gmp_printf: Formatted Output Functions. - (line 24) -* GMP_RAND_ALG_DEFAULT: Random State Initialization. - (line 49) -* GMP_RAND_ALG_LC: Random State Initialization. - (line 49) -* gmp_randclass: C++ Interface Random Numbers. - (line 7) -* gmp_randclass::get_f: C++ Interface Random Numbers. - (line 45) -* gmp_randclass::get_z_bits: C++ Interface Random Numbers. - (line 39) -* gmp_randclass::get_z_range: C++ Interface Random Numbers. - (line 42) -* gmp_randclass::gmp_randclass: C++ Interface Random Numbers. - (line 13) -* gmp_randclass::seed: C++ Interface Random Numbers. - (line 33) -* gmp_randclear: Random State Initialization. - (line 62) -* gmp_randinit: Random State Initialization. - (line 47) -* gmp_randinit_default: Random State Initialization. - (line 7) -* gmp_randinit_lc_2exp: Random State Initialization. - (line 18) -* gmp_randinit_lc_2exp_size: Random State Initialization. - (line 32) -* gmp_randinit_mt: Random State Initialization. - (line 13) -* gmp_randinit_set: Random State Initialization. - (line 43) -* gmp_randseed: Random State Seeding. - (line 7) -* gmp_randseed_ui: Random State Seeding. - (line 9) -* gmp_randstate_t: Nomenclature and Types. - (line 46) -* gmp_scanf: Formatted Input Functions. - (line 21) -* gmp_snprintf: Formatted Output Functions. - (line 46) -* gmp_sprintf: Formatted Output Functions. - (line 34) -* gmp_sscanf: Formatted Input Functions. - (line 29) -* gmp_urandomb_ui: Random State Miscellaneous. - (line 8) -* gmp_urandomm_ui: Random State Miscellaneous. - (line 14) -* gmp_vasprintf: Formatted Output Functions. - (line 66) -* gmp_version: Useful Macros and Constants. - (line 18) -* gmp_vfprintf: Formatted Output Functions. - (line 30) -* gmp_vfscanf: Formatted Input Functions. - (line 26) -* gmp_vprintf: Formatted Output Functions. - (line 25) -* gmp_vscanf: Formatted Input Functions. - (line 22) -* gmp_vsnprintf: Formatted Output Functions. - (line 48) -* gmp_vsprintf: Formatted Output Functions. - (line 35) -* gmp_vsscanf: Formatted Input Functions. - (line 31) -* hypot: C++ Interface Floats. - (line 81) -* itom: BSD Compatible Functions. - (line 29) -* madd: BSD Compatible Functions. - (line 43) -* mcmp: BSD Compatible Functions. - (line 85) -* mdiv: BSD Compatible Functions. - (line 53) -* mfree: BSD Compatible Functions. - (line 105) -* min: BSD Compatible Functions. - (line 89) -* MINT: BSD Compatible Functions. - (line 21) -* mout: BSD Compatible Functions. - (line 94) -* move: BSD Compatible Functions. - (line 39) -* mp_bitcnt_t: Nomenclature and Types. - (line 42) -* mp_bits_per_limb: Useful Macros and Constants. - (line 7) -* mp_exp_t: Nomenclature and Types. - (line 27) -* mp_get_memory_functions: Custom Allocation. (line 93) -* mp_limb_t: Nomenclature and Types. - (line 31) -* mp_set_memory_functions: Custom Allocation. (line 21) -* mp_size_t: Nomenclature and Types. - (line 37) -* mpf_abs: Float Arithmetic. (line 47) -* mpf_add: Float Arithmetic. (line 7) -* mpf_add_ui: Float Arithmetic. (line 9) -* mpf_ceil: Miscellaneous Float Functions. - (line 7) -* mpf_class: C++ Interface General. - (line 20) -* mpf_class::fits_sint_p: C++ Interface Floats. - (line 74) -* mpf_class::fits_slong_p: C++ Interface Floats. - (line 75) -* mpf_class::fits_sshort_p: C++ Interface Floats. - (line 76) -* mpf_class::fits_uint_p: C++ Interface Floats. - (line 77) -* mpf_class::fits_ulong_p: C++ Interface Floats. - (line 78) -* mpf_class::fits_ushort_p: C++ Interface Floats. - (line 79) -* mpf_class::get_d: C++ Interface Floats. - (line 82) -* mpf_class::get_mpf_t: C++ Interface General. - (line 66) -* mpf_class::get_prec: C++ Interface Floats. - (line 100) -* mpf_class::get_si: C++ Interface Floats. - (line 83) -* mpf_class::get_str: C++ Interface Floats. - (line 85) -* mpf_class::get_ui: C++ Interface Floats. - (line 86) -* mpf_class::mpf_class: C++ Interface Floats. - (line 38) -* mpf_class::operator=: C++ Interface Floats. - (line 47) -* mpf_class::set_prec: C++ Interface Floats. - (line 101) -* mpf_class::set_prec_raw: C++ Interface Floats. - (line 102) -* mpf_class::set_str: C++ Interface Floats. - (line 88) -* mpf_clear: Initializing Floats. (line 37) -* mpf_clears: Initializing Floats. (line 41) -* mpf_cmp: Float Comparison. (line 7) -* mpf_cmp_d: Float Comparison. (line 8) -* mpf_cmp_si: Float Comparison. (line 10) -* mpf_cmp_ui: Float Comparison. (line 9) -* mpf_div: Float Arithmetic. (line 29) -* mpf_div_2exp: Float Arithmetic. (line 53) -* mpf_div_ui: Float Arithmetic. (line 33) -* mpf_eq: Float Comparison. (line 17) -* mpf_fits_sint_p: Miscellaneous Float Functions. - (line 20) -* mpf_fits_slong_p: Miscellaneous Float Functions. - (line 18) -* mpf_fits_sshort_p: Miscellaneous Float Functions. - (line 22) -* mpf_fits_uint_p: Miscellaneous Float Functions. - (line 19) -* mpf_fits_ulong_p: Miscellaneous Float Functions. - (line 17) -* mpf_fits_ushort_p: Miscellaneous Float Functions. - (line 21) -* mpf_floor: Miscellaneous Float Functions. - (line 8) -* mpf_get_d: Converting Floats. (line 7) -* mpf_get_d_2exp: Converting Floats. (line 16) -* mpf_get_default_prec: Initializing Floats. (line 12) -* mpf_get_prec: Initializing Floats. (line 62) -* mpf_get_si: Converting Floats. (line 27) -* mpf_get_str: Converting Floats. (line 37) -* mpf_get_ui: Converting Floats. (line 28) -* mpf_init: Initializing Floats. (line 19) -* mpf_init2: Initializing Floats. (line 26) -* mpf_init_set: Simultaneous Float Init & Assign. - (line 16) -* mpf_init_set_d: Simultaneous Float Init & Assign. - (line 19) -* mpf_init_set_si: Simultaneous Float Init & Assign. - (line 18) -* mpf_init_set_str: Simultaneous Float Init & Assign. - (line 25) -* mpf_init_set_ui: Simultaneous Float Init & Assign. - (line 17) -* mpf_inits: Initializing Floats. (line 31) -* mpf_inp_str: I/O of Floats. (line 37) -* mpf_integer_p: Miscellaneous Float Functions. - (line 14) -* mpf_mul: Float Arithmetic. (line 19) -* mpf_mul_2exp: Float Arithmetic. (line 50) -* mpf_mul_ui: Float Arithmetic. (line 21) -* mpf_neg: Float Arithmetic. (line 44) -* mpf_out_str: I/O of Floats. (line 17) -* mpf_pow_ui: Float Arithmetic. (line 41) -* mpf_random2: Miscellaneous Float Functions. - (line 36) -* mpf_reldiff: Float Comparison. (line 29) -* mpf_set: Assigning Floats. (line 10) -* mpf_set_d: Assigning Floats. (line 13) -* mpf_set_default_prec: Initializing Floats. (line 7) -* mpf_set_prec: Initializing Floats. (line 65) -* mpf_set_prec_raw: Initializing Floats. (line 72) -* mpf_set_q: Assigning Floats. (line 15) -* mpf_set_si: Assigning Floats. (line 12) -* mpf_set_str: Assigning Floats. (line 18) -* mpf_set_ui: Assigning Floats. (line 11) -* mpf_set_z: Assigning Floats. (line 14) -* mpf_sgn: Float Comparison. (line 33) -* mpf_sqrt: Float Arithmetic. (line 36) -* mpf_sqrt_ui: Float Arithmetic. (line 37) -* mpf_sub: Float Arithmetic. (line 12) -* mpf_sub_ui: Float Arithmetic. (line 16) -* mpf_swap: Assigning Floats. (line 52) -* mpf_t: Nomenclature and Types. - (line 21) -* mpf_trunc: Miscellaneous Float Functions. - (line 9) -* mpf_ui_div: Float Arithmetic. (line 31) -* mpf_ui_sub: Float Arithmetic. (line 14) -* mpf_urandomb: Miscellaneous Float Functions. - (line 27) -* mpn_add: Low-level Functions. (line 69) -* mpn_add_1: Low-level Functions. (line 64) -* mpn_add_n: Low-level Functions. (line 54) -* mpn_addmul_1: Low-level Functions. (line 148) -* mpn_and_n: Low-level Functions. (line 420) -* mpn_andn_n: Low-level Functions. (line 435) -* mpn_cmp: Low-level Functions. (line 284) -* mpn_com: Low-level Functions. (line 460) -* mpn_copyd: Low-level Functions. (line 469) -* mpn_copyi: Low-level Functions. (line 465) -* mpn_divexact_by3: Low-level Functions. (line 229) -* mpn_divexact_by3c: Low-level Functions. (line 231) -* mpn_divmod: Low-level Functions. (line 224) -* mpn_divmod_1: Low-level Functions. (line 208) -* mpn_divrem: Low-level Functions. (line 182) -* mpn_divrem_1: Low-level Functions. (line 206) -* mpn_gcd: Low-level Functions. (line 289) -* mpn_gcd_1: Low-level Functions. (line 299) -* mpn_gcdext: Low-level Functions. (line 305) -* mpn_get_str: Low-level Functions. (line 346) -* mpn_hamdist: Low-level Functions. (line 410) -* mpn_ior_n: Low-level Functions. (line 425) -* mpn_iorn_n: Low-level Functions. (line 440) -* mpn_lshift: Low-level Functions. (line 260) -* mpn_mod_1: Low-level Functions. (line 255) -* mpn_mul: Low-level Functions. (line 114) -* mpn_mul_1: Low-level Functions. (line 133) -* mpn_mul_n: Low-level Functions. (line 103) -* mpn_nand_n: Low-level Functions. (line 445) -* mpn_neg: Low-level Functions. (line 98) -* mpn_nior_n: Low-level Functions. (line 450) -* mpn_perfect_square_p: Low-level Functions. (line 416) -* mpn_popcount: Low-level Functions. (line 406) -* mpn_random: Low-level Functions. (line 395) -* mpn_random2: Low-level Functions. (line 396) -* mpn_rshift: Low-level Functions. (line 272) -* mpn_scan0: Low-level Functions. (line 380) -* mpn_scan1: Low-level Functions. (line 388) -* mpn_set_str: Low-level Functions. (line 361) -* mpn_sqr: Low-level Functions. (line 125) -* mpn_sqrtrem: Low-level Functions. (line 328) -* mpn_sub: Low-level Functions. (line 90) -* mpn_sub_1: Low-level Functions. (line 85) -* mpn_sub_n: Low-level Functions. (line 76) -* mpn_submul_1: Low-level Functions. (line 159) -* mpn_tdiv_qr: Low-level Functions. (line 171) -* mpn_xnor_n: Low-level Functions. (line 455) -* mpn_xor_n: Low-level Functions. (line 430) -* mpn_zero: Low-level Functions. (line 472) -* mpq_abs: Rational Arithmetic. (line 31) -* mpq_add: Rational Arithmetic. (line 7) -* mpq_canonicalize: Rational Number Functions. - (line 22) -* mpq_class: C++ Interface General. - (line 19) -* mpq_class::canonicalize: C++ Interface Rationals. - (line 37) -* mpq_class::get_d: C++ Interface Rationals. - (line 46) -* mpq_class::get_den: C++ Interface Rationals. - (line 58) -* mpq_class::get_den_mpz_t: C++ Interface Rationals. - (line 68) -* mpq_class::get_mpq_t: C++ Interface General. - (line 65) -* mpq_class::get_num: C++ Interface Rationals. - (line 57) -* mpq_class::get_num_mpz_t: C++ Interface Rationals. - (line 67) -* mpq_class::get_str: C++ Interface Rationals. - (line 47) -* mpq_class::mpq_class: C++ Interface Rationals. - (line 22) -* mpq_class::set_str: C++ Interface Rationals. - (line 49) -* mpq_clear: Initializing Rationals. - (line 16) -* mpq_clears: Initializing Rationals. - (line 20) -* mpq_cmp: Comparing Rationals. (line 7) -* mpq_cmp_si: Comparing Rationals. (line 17) -* mpq_cmp_ui: Comparing Rationals. (line 15) -* mpq_denref: Applying Integer Functions. - (line 18) -* mpq_div: Rational Arithmetic. (line 22) -* mpq_div_2exp: Rational Arithmetic. (line 25) -* mpq_equal: Comparing Rationals. (line 33) -* mpq_get_d: Rational Conversions. - (line 7) -* mpq_get_den: Applying Integer Functions. - (line 24) -* mpq_get_num: Applying Integer Functions. - (line 23) -* mpq_get_str: Rational Conversions. - (line 22) -* mpq_init: Initializing Rationals. - (line 7) -* mpq_inits: Initializing Rationals. - (line 12) -* mpq_inp_str: I/O of Rationals. (line 23) -* mpq_inv: Rational Arithmetic. (line 34) -* mpq_mul: Rational Arithmetic. (line 15) -* mpq_mul_2exp: Rational Arithmetic. (line 18) -* mpq_neg: Rational Arithmetic. (line 28) -* mpq_numref: Applying Integer Functions. - (line 17) -* mpq_out_str: I/O of Rationals. (line 15) -* mpq_set: Initializing Rationals. - (line 24) -* mpq_set_d: Rational Conversions. - (line 17) -* mpq_set_den: Applying Integer Functions. - (line 26) -* mpq_set_f: Rational Conversions. - (line 18) -* mpq_set_num: Applying Integer Functions. - (line 25) -* mpq_set_si: Initializing Rationals. - (line 31) -* mpq_set_str: Initializing Rationals. - (line 36) -* mpq_set_ui: Initializing Rationals. - (line 29) -* mpq_set_z: Initializing Rationals. - (line 25) -* mpq_sgn: Comparing Rationals. (line 27) -* mpq_sub: Rational Arithmetic. (line 11) -* mpq_swap: Initializing Rationals. - (line 56) -* mpq_t: Nomenclature and Types. - (line 16) -* mpz_abs: Integer Arithmetic. (line 42) -* mpz_add: Integer Arithmetic. (line 7) -* mpz_add_ui: Integer Arithmetic. (line 9) -* mpz_addmul: Integer Arithmetic. (line 25) -* mpz_addmul_ui: Integer Arithmetic. (line 27) -* mpz_and: Integer Logic and Bit Fiddling. - (line 11) -* mpz_array_init: Integer Special Functions. - (line 11) -* mpz_bin_ui: Number Theoretic Functions. - (line 98) -* mpz_bin_uiui: Number Theoretic Functions. - (line 100) -* mpz_cdiv_q: Integer Division. (line 13) -* mpz_cdiv_q_2exp: Integer Division. (line 24) -* mpz_cdiv_q_ui: Integer Division. (line 17) -* mpz_cdiv_qr: Integer Division. (line 15) -* mpz_cdiv_qr_ui: Integer Division. (line 21) -* mpz_cdiv_r: Integer Division. (line 14) -* mpz_cdiv_r_2exp: Integer Division. (line 25) -* mpz_cdiv_r_ui: Integer Division. (line 19) -* mpz_cdiv_ui: Integer Division. (line 23) -* mpz_class: C++ Interface General. - (line 18) -* mpz_class::fits_sint_p: C++ Interface Integers. - (line 45) -* mpz_class::fits_slong_p: C++ Interface Integers. - (line 46) -* mpz_class::fits_sshort_p: C++ Interface Integers. - (line 47) -* mpz_class::fits_uint_p: C++ Interface Integers. - (line 48) -* mpz_class::fits_ulong_p: C++ Interface Integers. - (line 49) -* mpz_class::fits_ushort_p: C++ Interface Integers. - (line 50) -* mpz_class::get_d: C++ Interface Integers. - (line 51) -* mpz_class::get_mpz_t: C++ Interface General. - (line 64) -* mpz_class::get_si: C++ Interface Integers. - (line 52) -* mpz_class::get_str: C++ Interface Integers. - (line 53) -* mpz_class::get_ui: C++ Interface Integers. - (line 54) -* mpz_class::mpz_class: C++ Interface Integers. - (line 7) -* mpz_class::set_str: C++ Interface Integers. - (line 56) -* mpz_clear: Initializing Integers. - (line 44) -* mpz_clears: Initializing Integers. - (line 48) -* mpz_clrbit: Integer Logic and Bit Fiddling. - (line 54) -* mpz_cmp: Integer Comparisons. (line 7) -* mpz_cmp_d: Integer Comparisons. (line 8) -* mpz_cmp_si: Integer Comparisons. (line 9) -* mpz_cmp_ui: Integer Comparisons. (line 10) -* mpz_cmpabs: Integer Comparisons. (line 18) -* mpz_cmpabs_d: Integer Comparisons. (line 19) -* mpz_cmpabs_ui: Integer Comparisons. (line 20) -* mpz_com: Integer Logic and Bit Fiddling. - (line 20) -* mpz_combit: Integer Logic and Bit Fiddling. - (line 57) -* mpz_congruent_2exp_p: Integer Division. (line 124) -* mpz_congruent_p: Integer Division. (line 121) -* mpz_congruent_ui_p: Integer Division. (line 123) -* mpz_divexact: Integer Division. (line 101) -* mpz_divexact_ui: Integer Division. (line 102) -* mpz_divisible_2exp_p: Integer Division. (line 112) -* mpz_divisible_p: Integer Division. (line 110) -* mpz_divisible_ui_p: Integer Division. (line 111) -* mpz_even_p: Miscellaneous Integer Functions. - (line 18) -* mpz_export: Integer Import and Export. - (line 45) -* mpz_fac_ui: Number Theoretic Functions. - (line 95) -* mpz_fdiv_q: Integer Division. (line 27) -* mpz_fdiv_q_2exp: Integer Division. (line 38) -* mpz_fdiv_q_ui: Integer Division. (line 31) -* mpz_fdiv_qr: Integer Division. (line 29) -* mpz_fdiv_qr_ui: Integer Division. (line 35) -* mpz_fdiv_r: Integer Division. (line 28) -* mpz_fdiv_r_2exp: Integer Division. (line 39) -* mpz_fdiv_r_ui: Integer Division. (line 33) -* mpz_fdiv_ui: Integer Division. (line 37) -* mpz_fib2_ui: Number Theoretic Functions. - (line 108) -* mpz_fib_ui: Number Theoretic Functions. - (line 106) -* mpz_fits_sint_p: Miscellaneous Integer Functions. - (line 10) -* mpz_fits_slong_p: Miscellaneous Integer Functions. - (line 8) -* mpz_fits_sshort_p: Miscellaneous Integer Functions. - (line 12) -* mpz_fits_uint_p: Miscellaneous Integer Functions. - (line 9) -* mpz_fits_ulong_p: Miscellaneous Integer Functions. - (line 7) -* mpz_fits_ushort_p: Miscellaneous Integer Functions. - (line 11) -* mpz_gcd: Number Theoretic Functions. - (line 30) -* mpz_gcd_ui: Number Theoretic Functions. - (line 35) -* mpz_gcdext: Number Theoretic Functions. - (line 45) -* mpz_get_d: Converting Integers. (line 27) -* mpz_get_d_2exp: Converting Integers. (line 35) -* mpz_get_si: Converting Integers. (line 18) -* mpz_get_str: Converting Integers. (line 46) -* mpz_get_ui: Converting Integers. (line 11) -* mpz_getlimbn: Integer Special Functions. - (line 60) -* mpz_hamdist: Integer Logic and Bit Fiddling. - (line 29) -* mpz_import: Integer Import and Export. - (line 11) -* mpz_init: Initializing Integers. - (line 26) -* mpz_init2: Initializing Integers. - (line 33) -* mpz_init_set: Simultaneous Integer Init & Assign. - (line 27) -* mpz_init_set_d: Simultaneous Integer Init & Assign. - (line 30) -* mpz_init_set_si: Simultaneous Integer Init & Assign. - (line 29) -* mpz_init_set_str: Simultaneous Integer Init & Assign. - (line 34) -* mpz_init_set_ui: Simultaneous Integer Init & Assign. - (line 28) -* mpz_inits: Initializing Integers. - (line 29) -* mpz_inp_raw: I/O of Integers. (line 59) -* mpz_inp_str: I/O of Integers. (line 28) -* mpz_invert: Number Theoretic Functions. - (line 60) -* mpz_ior: Integer Logic and Bit Fiddling. - (line 14) -* mpz_jacobi: Number Theoretic Functions. - (line 66) -* mpz_kronecker: Number Theoretic Functions. - (line 74) -* mpz_kronecker_si: Number Theoretic Functions. - (line 75) -* mpz_kronecker_ui: Number Theoretic Functions. - (line 76) -* mpz_lcm: Number Theoretic Functions. - (line 54) -* mpz_lcm_ui: Number Theoretic Functions. - (line 55) -* mpz_legendre: Number Theoretic Functions. - (line 69) -* mpz_lucnum2_ui: Number Theoretic Functions. - (line 119) -* mpz_lucnum_ui: Number Theoretic Functions. - (line 117) -* mpz_mod: Integer Division. (line 91) -* mpz_mod_ui: Integer Division. (line 93) -* mpz_mul: Integer Arithmetic. (line 19) -* mpz_mul_2exp: Integer Arithmetic. (line 35) -* mpz_mul_si: Integer Arithmetic. (line 20) -* mpz_mul_ui: Integer Arithmetic. (line 22) -* mpz_neg: Integer Arithmetic. (line 39) -* mpz_nextprime: Number Theoretic Functions. - (line 23) -* mpz_odd_p: Miscellaneous Integer Functions. - (line 17) -* mpz_out_raw: I/O of Integers. (line 43) -* mpz_out_str: I/O of Integers. (line 16) -* mpz_perfect_power_p: Integer Roots. (line 27) -* mpz_perfect_square_p: Integer Roots. (line 36) -* mpz_popcount: Integer Logic and Bit Fiddling. - (line 23) -* mpz_pow_ui: Integer Exponentiation. - (line 31) -* mpz_powm: Integer Exponentiation. - (line 8) -* mpz_powm_sec: Integer Exponentiation. - (line 18) -* mpz_powm_ui: Integer Exponentiation. - (line 10) -* mpz_probab_prime_p: Number Theoretic Functions. - (line 7) -* mpz_random: Integer Random Numbers. - (line 42) -* mpz_random2: Integer Random Numbers. - (line 51) -* mpz_realloc2: Initializing Integers. - (line 52) -* mpz_remove: Number Theoretic Functions. - (line 90) -* mpz_root: Integer Roots. (line 7) -* mpz_rootrem: Integer Roots. (line 13) -* mpz_rrandomb: Integer Random Numbers. - (line 31) -* mpz_scan0: Integer Logic and Bit Fiddling. - (line 37) -* mpz_scan1: Integer Logic and Bit Fiddling. - (line 38) -* mpz_set: Assigning Integers. (line 10) -* mpz_set_d: Assigning Integers. (line 13) -* mpz_set_f: Assigning Integers. (line 15) -* mpz_set_q: Assigning Integers. (line 14) -* mpz_set_si: Assigning Integers. (line 12) -* mpz_set_str: Assigning Integers. (line 21) -* mpz_set_ui: Assigning Integers. (line 11) -* mpz_setbit: Integer Logic and Bit Fiddling. - (line 51) -* mpz_sgn: Integer Comparisons. (line 28) -* mpz_si_kronecker: Number Theoretic Functions. - (line 77) -* mpz_size: Integer Special Functions. - (line 68) -* mpz_sizeinbase: Miscellaneous Integer Functions. - (line 23) -* mpz_sqrt: Integer Roots. (line 17) -* mpz_sqrtrem: Integer Roots. (line 20) -* mpz_sub: Integer Arithmetic. (line 12) -* mpz_sub_ui: Integer Arithmetic. (line 14) -* mpz_submul: Integer Arithmetic. (line 30) -* mpz_submul_ui: Integer Arithmetic. (line 32) -* mpz_swap: Assigning Integers. (line 37) -* mpz_t: Nomenclature and Types. - (line 6) -* mpz_tdiv_q: Integer Division. (line 41) -* mpz_tdiv_q_2exp: Integer Division. (line 52) -* mpz_tdiv_q_ui: Integer Division. (line 45) -* mpz_tdiv_qr: Integer Division. (line 43) -* mpz_tdiv_qr_ui: Integer Division. (line 49) -* mpz_tdiv_r: Integer Division. (line 42) -* mpz_tdiv_r_2exp: Integer Division. (line 53) -* mpz_tdiv_r_ui: Integer Division. (line 47) -* mpz_tdiv_ui: Integer Division. (line 51) -* mpz_tstbit: Integer Logic and Bit Fiddling. - (line 60) -* mpz_ui_kronecker: Number Theoretic Functions. - (line 78) -* mpz_ui_pow_ui: Integer Exponentiation. - (line 33) -* mpz_ui_sub: Integer Arithmetic. (line 16) -* mpz_urandomb: Integer Random Numbers. - (line 14) -* mpz_urandomm: Integer Random Numbers. - (line 23) -* mpz_xor: Integer Logic and Bit Fiddling. - (line 17) -* msqrt: BSD Compatible Functions. - (line 63) -* msub: BSD Compatible Functions. - (line 46) -* mtox: BSD Compatible Functions. - (line 98) -* mult: BSD Compatible Functions. - (line 49) -* operator%: C++ Interface Integers. - (line 30) -* operator/: C++ Interface Integers. - (line 29) -* operator<<: C++ Formatted Output. - (line 20) -* operator>> <1>: C++ Formatted Input. (line 11) -* operator>>: C++ Interface Rationals. - (line 77) -* pow: BSD Compatible Functions. - (line 71) -* rpow: BSD Compatible Functions. - (line 79) -* sdiv: BSD Compatible Functions. - (line 55) -* sgn <1>: C++ Interface Rationals. - (line 50) -* sgn <2>: C++ Interface Integers. - (line 57) -* sgn: C++ Interface Floats. - (line 89) -* sqrt <1>: C++ Interface Integers. - (line 58) -* sqrt: C++ Interface Floats. - (line 90) -* trunc: C++ Interface Floats. - (line 91) -* xtom: BSD Compatible Functions. - (line 34) - - diff --git a/misc/tools/all/xonotic.subr b/misc/tools/all/xonotic.subr index 570305f8..08c570c3 100644 --- a/misc/tools/all/xonotic.subr +++ b/misc/tools/all/xonotic.subr @@ -197,23 +197,17 @@ case "$cmd" in case `uname -m` in x86_64) # No cp commands, we want to use static linking instead. - export CC="$CC -I../../../../misc/builddeps/linux64/d0_blind_id/include" - export CC="$CC -L../../../../misc/builddeps/linux64/d0_blind_id/lib" - export CC="$CC -Wl,-rpath,../../../../misc/builddeps/linux64/d0_blind_id/lib" - export CC="$CC -I../../../../misc/builddeps/linux64/gmp/include" - export CC="$CC -L../../../../misc/builddeps/linux64/gmp/lib" - export CC="$CC -Wl,-rpath,../../../../misc/builddeps/linux64/gmp/lib" - MAKEFLAGS="$MAKEFLAGS DP_LINK_CRYPTO=shared DP_LINK_CRYPTO_RIJNDAEL=shared LIB_CRYPTO=../../../../misc/builddeps/linux64/d0_blind_id/lib/libd0_blind_id.a LIB_CRYPTO+=../../../../misc/builddeps/linux64/gmp/lib/libgmp.a LIB_CRYPTO_RIJNDAEL=../../../../misc/builddeps/linux64/d0_blind_id/lib/libd0_rijndael.a" + MAKEFLAGS="$MAKEFLAGS DP_LINK_CRYPTO=shared DP_LINK_CRYPTO_RIJNDAEL=shared" + export CC="$CC -I../../../../" + export CC="$CC -L../../../../d0_blind_id/.libs" + export CC="$CC -Wl,-rpath,./d0_blind_id/.libs" ;; *86) # No cp commands, we want to use static linking instead. - export CC="$CC -I../../../../misc/builddeps/linux32/d0_blind_id/include" - export CC="$CC -L../../../../misc/builddeps/linux32/d0_blind_id/lib" - export CC="$CC -Wl,-rpath,../../../../misc/builddeps/linux32/d0_blind_id/lib" - export CC="$CC -I../../../../misc/builddeps/linux32/gmp/include" - export CC="$CC -L../../../../misc/builddeps/linux32/gmp/lib" - export CC="$CC -Wl,-rpath,../../../../misc/builddeps/linux32/gmp/lib" - MAKEFLAGS="$MAKEFLAGS DP_LINK_CRYPTO=shared DP_LINK_CRYPTO_RIJNDAEL=shared LIB_CRYPTO=../../../../misc/builddeps/linux32/d0_blind_id/lib/libd0_blind_id.a LIB_CRYPTO+=../../../../misc/builddeps/linux32/gmp/lib/libgmp.a LIB_CRYPTO_RIJNDAEL=../../../../misc/builddeps/linux32/d0_blind_id/lib/libd0_rijndael.a" + export CC="$CC -I../../../../" + export CC="$CC -L../../../../d0_blind_id/.libs" + export CC="$CC -Wl,-rpath,./d0_blind_id/.libs" + MAKEFLAGS="$MAKEFLAGS DP_LINK_CRYPTO=shared DP_LINK_CRYPTO_RIJNDAEL=shared" ;; *) compiled0=true -- 2.39.2

t1la=QSrk2y2 zo_hEdSC;m*r(Q)?s;gYw%b~sG!UV7h=s$B~PVKC+seZa>rT3X>xWaUV|6< zZ{{RE$gx7>p0tue&F>6vqZ^p^W;ipm9Qf5tz;QV|rYexl6PU3tu)P^_&_<^(HVK|% zwI75RCUmHFq6rco?jy(L;w|djnny^~sVeXw61XKM^!|BxEdZ`Ok?`n3ybiJ4b7WEn zZ3pfinJzxV0p}i>l;wUK`x6!HCG-h)ep4*i5X;{l%ij~re@XOjR{l%T;ON|F{$3=yrvMQ1 z!A%h3W`1J%ud6H_&5)~T{@)F;^6x4}?n;rn0wH3pC7S}+F?d6A>dUa?32h z&+pQR(;!y)_QS|8nWNN{oy@LKQxdzOAT;JMe)BkI!c$OHZseq(CKtXHu@f0Pm6826 zoBhVE#b^ipSaA8v0w6SN^A#*M}e$SyknQ3RdzGd~u<~Qmeqn zE;SSNEzOY6a`~mQ&{4&bRu1xfgFAC)-VJViX907>`p@l2G?Uiz|yzj2bDrZ zv;w!kPr7fP^f63aoqq4Zj{8Qsj7JR?Waz@TD`+ z(=?57a-L}|;v4!8@fJ(kpR|r5r&WaDQ4}$HpBtP(&)neL_Dt?LchFPlFvq#5R_HZX zoXK%zJ$v}zOFHO;XYv@fV4OSQsXP_90D+MxMfxwLdZ1B99UNv|l^b&hg%S45qwTM- zCka-Fccd&%;%(if}zH>h}2i!+TpY``;(CQ1!GTA>g(Z&<&PlaBvQGjfKs zh%eK~X%bC~xYo#_i6|=nf0>a}#uPz^w{}S4{Z}5S;hhX7e#sBh zYM!qDYD8s@p%`Jfh$VT*)b)(80*kUG&I?q*Y5wt*|9Tciw<`^gDFm9&8vYXnFI0C8 z&ryXq!~>^Gc3#EumZs;AiiM>f_;(ZwFE6=5S!v}6@I+SKVJ9(j-C$I_azRJ8nQJV| zn}%^8X0B^6W4sVr>2XYAx4>EScnha-{TRm{!N#+&0S>%u=b4zZsg|?SyND=02j<_i zTlk3CS~y25Id1KK-*VdQ!$5R1e2(q@z$$B6G|x`Pa;zZM=rw0s zBBguoCHy;ZVw24I!l$JYb6$%%Fht9QVB*V>r^N_IbvVJ{?=U024>RIegg6W1DKN=h zC}zg(vS;B%#|quBp>+xSTD;q#aeG_qnQ$o+9)X16?GBEE1kJ50m~lcvUs_0OI8 z9-;`+GFPYPWs6^*e1|tf3V}DiU!SbwpKPDpAWULdEvgdi>&*8MRe!{&OJ^Q;Fa5@+ zZjTK2S(y3e47b^b>-IJTaBo{<1}lBwlYHPcKJcYJ@PGD!2f9x&cP;bl4%a&cp?Y9H zWYrzBXO(n$fXeVugD^4cAKv&V!)Khh7D|ujiAvHT-@b_zDAV&U6P|vs}^4xm^GU zqBI`pFXlu$ao|X@f`{MC?||dDNgXvf0Zs(`eK{h+-CjCa;_5*BAdId&_C^4=h;Z@% z&(_r<8Q)cFT-~o%_TFC&Q$~J1{JrjefHx< zn&x9~`|RGv_v^DY-Flp$Y3OaAt!Lo0Zo>StI_mfuUJjUQzIf`oI@III_Sy6_nd$O^ z{rYSj|782@6{?^LRf2u(v)78Y8wgDFWWr0o=X3g%;XVs}HtU7iXY2OH`r&PB%v`Y# z{2Cv4K*{;^!ZG=-`aZtQtC|6i2Q#M3gkQy}Cfs;th^kp|zz7!y2!!j){K3V(i+v#G zx5V{T0&x+}yy;cK)UA0D#(#ZXuO7VNZ&q+`_~}0I*#;hyp11)w``$tW57X8c`ol7t$pzuut|W1gF*|0Ymz%)&o+o)@ z;O#VFjNOiNn;J_Ra8lBb8!D3FVCyLsj?t`r0o3Y_o0J1Xy5lAqSmoRQl)Nrzm2D1v z|KAwcX|;+rhH6)f=Y7r#(hEKF(Ad%+HV8PHw@W5$CMFZHz*=%tlUK4woWKR-@J|Z| zwlCf@nEWc*>)^bs7KP1jI!rr7)Hwz_Nk1grb&hx_0po>os;&=0(I>3ImF}CVa|F9K z6&R`YZ>LmZ$hkq;s^YYV4bo`UmNwiL?%fGKWiMAu$Y7&cQFa4g+=~ssP zEa)WUi>Z_7_I4KF-nPcf4fBCt>jPIh$*``0zf?+w85+mQXeFnU7+kDorVbDm(4IPp zp2P6!82{iC{?`ib4S&!le49`BYgC0Hoy4X4h3ggEi+{Th{22p}ncuwzyf-?}oV)I+ zDiM|d&z#3qnOCx7%A?Qg<9ODIzRJaesq;kE6Be0ZJ0Ia_>4{NiGmn=o;IRU^n8LvE zXYz2%9ijVwg3LL)BArhsnu8@ZGFB1Rymj8YBkIaCXLEUotZ-y6Q_3D3hU0wzkwVlt zglvW$Yd|_krRHargRhK;^;6^mB93D5XK z9zO7aBEE8nkN6~LYyQ9A+IyeuOwP#T-rDc}yANb$*6ionYwy{6?e&ngR`t7^950Px zvCeZ-Bu8nM_?$z%Q3^v6qb7&+2#v;NvtL?lk z3Oz@yk*4T~N4iE@rQ3g`YosS5@TaHrTq~m1NGAP}u8}HwsUoP&!f?22q}iH&&Qr;A zf5Y|9y$Ibf-v5R*62G_h8p(_|u0g_MjZGXJ0ViK1U;N4lcuak)bL<>>RO=>D=QFoB z=df-kmz#&F*V6c7EJm$F29g`wV$K+TOCUlR{+t2}oa+-4f1>W#aQqu1;B;NW!1(ss zL;xCYpM?|y#=tU}#su(b&OH6PYp+dSH(d@fa%UJ3YnHRlKKrmO46LPkpbk}Xt%4@u z(LBSj{HlRZv*;Ciluhspzperzhwu+nCYQ_*T;STW7?+wLGl;+~%BPyUcnsSArthBG z_@?_6;dVlo&)mN0xkDShf)vxk0q!Q29?x9SU;8Ahc7L=9UW43*-ysjU+dIRO)({g< z@WWEYr0`nR@N?kKORKCXjggsMl(SXvQ>L$PJULJLg-jpZIu{oyY9gX`^@28@)&=N? zafOFSaQ`H=O|MXw3{gPO?>x)#-E}oZ?e%S=XmJ4U0m&#@L#&7^qfKtZvzT|`^-DnM zTbTo-SLjPJ9^l`bxbU=%wUwZ+kXg z`JCsT+f27hSXk|@f3M12_8x{RDn)d|xjbB0ZE4uVY)Br)e^|pek$te@cE;I~T8xX- zYD;RlzD=)_cT**bAMEaU*qgc~Sa%0r!wJ3Q7eDQuN2PkHr|Ld|))EVUVK&w4RAw?1 zuE;N`BKTis$%b!g;YKSa%zuL0(8(zer&v{QI>4B?qAd z-k?)i5Cne2t#}~7MCk`mmUxjZj0bC0Nwjt9lHvtKqY|x|f+s&SX%swtwe<3xcfF?8 zUJ0mMly2}VVIkuZXFhz{YMO|bV~L(wDY<2s4H^PRz*wb#G|C9hjDX`_p)OgYrq{6c zKaTE~iF4gV!D zP*qo^GsTjA#d3M0JXirK@|ey@cXM(n+>YfoW(iqw(;L@Xi7)Zo%u3YW&zvvKk7s5( ziOP4}W#h2#avMH{zi{(45z+DVfBBRa+O7XJn>8w(k=CVGkX+D3d*EeFnjLq3O%Q08 zy_Avr^qLBS0;oKIumb@~Sq+k}ngP>mst_q2>>HCA^m06XlH`V1$+0IgK-PFvZrrMxG5U8MkleI*c$F8g&O+G%C%hFZ9p`p?->2)L+)qQE108lN}WpIeADQ=yl4`fo% zXp+wN3N+QJ0_x{&Ymd=-;Vs+Na+cN;ch;X@~M9qZ{kGNZ5v`Abv>6@q&}<;zi#Kk7DHAwm<$WBB-j zCgwsJ!9heXa8#1U!xO5(3 z-_5$*dkLx}ClR`P!yilmXG`eHE-fESOxhSToU}1rcbNp#JgsN&>^F%oHS~aiGBmL3 z2vp>v`Ed@@FclVP@@R36e^4|o9W8R>_L=_d?toDFP<4%kS&&~ z>Pb|Fo!GC`vn9K>l|@uO?Pm5$))IA0rmuWF#-s5vV_H$GBG7j8dJ6oZqU%JQ3 zc<{r0z-{=Ar2R5Fa*M==Pjs(-Ge~Ji^4V-4FBN%j5ymg1QqhmHVi6b0SA)EO&>@Tn zPs)}XWiNdUDAsdpWKET;OM#oBi4t@;)4&TOjdN+ldg+Ub)FQ_a9T!fpN6MzzDm~U$P3N^k|nY>qgl?+T!9A#IbGpWG^I%#nQoEU zIDl7GG`;fSx_x8n=M`XprKOe_XYa!`JlsOk)1fukj`2FAUb;208=n{asE-ZsgY!jH z9^arRFxnLbJ}eVT{^jYPWl-f^p3Y^XgA|Ditwczw2EA0f`zPlHi=Fbi5_jSD@zZn1m@U@YKfkm$a-~!du-Hg8m_Q(HJ(&09s^D~YoW%A zqQ7hd(xE)=Phgc+Vxj1L7ZS3Ni^(ppYr?X?8B*O&k z%MeM&T2~zy*EjZ1Dc5#Mxg?x2$&@c4<;Z6-2j}e8rk=v$gv`lyg>MiU1NJo-#P`Fq zZaM+c^l|#-N0iTv-rNyTem&eRTb!zO2S;b%aV)3_T#ikaI z{36~kto?MV^`fibK+aMNjCE3es>R8H7c_hy=mm)c}pmVzO*pY z6T;|#f0VpY%jH$Mad~yd)HzA|zoI_a^cj<{yzcUArpL~JtBPx;&w_H;|Fq^;F`7(t zXcialRH)L|Pg8i(3SquX6wh=OnLY@siBkl24a+Iw1A^fto{W3Kbu_+`U_26-XLH3O zs7n}%C+2yi=}B!YpXYUUFy%9UJ1{PTxmM|W${E{XxyD-Wg%-v#=kt^q=6{1f(|+>#!n6ZWY_(Qady5ZN2$yfY z>T=6?|2Up)cr+`%B0W2qAakXD$Y))buL`3v{ z-z?sAem3b=Nk2hcQF}}}BYtjK41aRW?d#^uxC)+`w8~;ve@HafmW!yk;5uFx7P`eZ zXCxyK+0E(EtjYB7^et1C$G<{Pu8hwq&BTA%g4_9=*%Ofv7@zcE;{S&QxAXsv z9!iYQxzNPlZo&C&G4K;Oi6eybud(2EK1=j~WPDDECZAtuIC06UnKjh!LU8k4yWPr% zYcZ4077K2-_Z16nmwPHFT!e7_FSFpBdQJYzEjX7H2JW-75tz>j_;28EX}D?E=NJj$ zZy~s8R}VeDn2+7AatqFHg~@+(1pKQJ@M|OB-_~$bPu7v4J_I-QTx{iI*E3_mZ9Jq& zWC&qA?~Z`KZo%z*9K8-4$~_J3{QjGrA3*4H;K^qTg4#{KgWiQ%mU&0vOsqigpMaPzSh zyRiOpTMAv-cHUywie25FeqPgoW5F?rgG}+&|n8-or&+<>niDdzlNs4O{P%`>-t@^xl9yR`sQRupb64 zVdxUF(Dknj5dk0wCF&M&fIiBgL7 z7V`MW!6py_Kq5KgWrhxy?dIz(KVn5G$g;^zRUu11Gw3rOvrMCu@^=#u2&P;!G?FHj z3~XVZzO%`ryt3X&?oC5TX|oq>k(bau_P4*frKY5WQR|;~Q2Z#bPi;Gn;Zhp`%89<9 zAXr7*>jlqB!m$~Y$sH`%+=?wy z*P+I9L2V3?N=kS7m7BbvHg^3ezy1SolD+_{^wPCOcau83jz%;UuX)7vY2v%`F}L9a ziBj`u?lo?cd&^%%jTawBB*XBSH+6$8mjpz@h8g&K`#fx;*;2?Om1K*FOT6pf^<8!~ zcFyDx!Hn4TMQq-;Kx=;b1TY+6iv_m1h``EiH=s|p;B*j7zx~f5zVjX{oasBvt9)Y) zx&hkku&H@}b^UXWzkQ$I^xS7^VfPIDyQaOx@l4@apn~H1=fO$o+r#iDaE{OzFGa#; zKhqayYlXu=`#$2KTkwBxF(}aSoF`GF`-l6y%KP0PLMZG0nxLu1*;U%)E-oZV1Sfdu z@g+sU170vJ`zqN0Mt(`yJ*LCZA~rHMH~UA2-%Te=Sj@^Qv!^YQ#Z4jR!5P2M?u zOWcM{5@`Tz%g9ls4+}Erg&mo~Swgp&K?BJlg>t?=$?WB(u3%L};BD!pQY%m;<+SjJ zI&(T=wJJARlpV%MD6f*`eXcVFhediob1p^U*5s~iPrR3-zU*7*Eh_4L)^pwjqChi0 zZiL~nj;(lb-ZanIN0FeTsr6-Hr)6vKpqO9601NS?%AZoE4X$Ys(*|HkEqY}+5P)+| zaHSS|!Gwk2Ot}pY0*0=A2p7=d0mn}#`?pitPA0NZ4cpw*dcJbkZRW}HmRihXAjb8W z+A@QBc$teJHMnj2`wL8H}&sGk>I({APf&F)T%U6Z1K4CFx;{`pEy)kgXm+OV`Q9u87Fu^yp{#OE0j!n-M`il;b&E(#^ zN2aXm{^D6lv(-{S?)>Hc7Fi>y<1COU+mz}1$++_{TUM&3D^yOk?1PpJk8L;~)vjdh zrhTI@Tn0eI5_38lj{yT;@&!TdZSI|k+t#Akn7320%+s}ty^}DpViHV%BJPt3fgCq4 zQ`e{^6Uj~#IP45NIQ3cZRSpP0b0N}g1Mi(C7BC{NuktgsJU`WbvB3P!Q6=b@tJbJN;% zaiZU`iIkAKFF69dz*R`RoV-C~kBRfLRoN3{oXp4crDy{9)5y!-E3fjTd7krI{g$Ho zY!$nr^_P-e_5*?!wX^3i9&Wf4U&T-7#4f zoY$OJoPAE#dD(f~WrTb~{fwPddAt$DK!=N1PqbcIRPdtMj1qfODVI>}+;6 zIUAkzPLtE<-0Q4!?s4vR?sC>Te|FY5cR2s){K>i9`GfO+o!>jRIsf7OyR+K)t@9h_ z*Uqn;e{+86ta5(t{Ht@T^E2nC&QF|waaKA%c7EinaBgw_kMl$42hMV5nX}Z%I7{$L zJKuK#XR&j$bCZ*D8k~CkzUM4*7CJXN3-Fuo%yYi$e8>4Vesi50oa^zcbCS*+=Q{kp z<;-@j#c!5#4SqA7tDSG+ca<{(zi&8K;y2xyhTl}@3j8j2rrjNb%jJbstpcQJk!IpgrV5WfrXOW+rG#^N^yKOa92zw_}s55HRcYVbQ3 zztQ+r<5z{>DEz*J-xu*4iQhT+eF48p`BgX-&e`~#h2NR-8{v#_hT}I(e&tTNQ-L=M?#!?C|$F{7U3^lEdF;@f$3^Vu!!a$nVn* zf1i@yAZL*CN%@`V@b?M%4RqA+1c$%l<@a%izX9?)&f)J^{X53tufP0UNB#Oa{C!M* zeI4~X+Trgg{p;hXUy;LKZ~g1#s9#Tqze4>haMZ7dqkfJKU@bUNJaxj&e(?9WH(>;B z_@7}tXCBBKFY8g;Z{X;D#iNZrR!zSt^}TQEwFGnHQoX0<%5NqUA$*50!=o48`x9>ds$^;nxWE1Y63(gD#Q&xRxAXa)1-E&_?^|%Y zy=Pdwa2uYm;C6kkh=9+x;5P61VGC~aO5ccp7o&{~hWDwS)LEAezg@qWt*<7&8GqoF zo_+c^rY9%EXlxfd3=#7EXP#LxqFBPAdk~yqeT%B39#uH^=o_OQ2Ka3z?-6_mupbw_ zvJ2Bfb$$C$)JTNsc`(lY41)5f?uuvbDd~@w!in0`ll#8(a^{6?bTGbTq^F*|^g;r` zssPh$d`T6#rr?@+Erj~@e+9GdS0E8^7Dv{A+cYwsnN%{R{+&^Auseq&GQXo}0nD_I zr_A8`cHg9GoD})0K+@QbjJ-5QzBP%aIUA zN-*)jSq!vw#q!26_4mBMra%rKFOhy^oUBKP*-&e-^f5?(dg%t$TCnE!Kfm~RuVZt^ zeRXd$>xuD#nI#k1lz0I9@FP!fmnE?+_0mg91`=sF$}TM?VVd)wfZ zLSpUR#R;JCjk-PY;295Un3OKFiF&j?3=KWhn?()|{$uuZDY0LLDx`9Y&L?WTmJ+-h6 zWXW?> z2vI1?ehL8L)jyC39_FZdS2*@@qrh8#pg%eG_yZQILMXj2O$W;{0f#gRSZN>HH&MCU zUDk@GxT!bTAW&;jBG~7b@`#{$jIK^RQ&ZMHCNr<7-S4=6?kD|pe=ptJ7eghlLqu_X zvc$!N>;El3u|PpgA7qRV!X z>kl6YeZeDx#ntzasAVwl1{0%T@F$aS?Li0R!sXKY6?w zf1A+;3=oK(y%Tr95SN!>?cVxVhqT_I;!A_s)a+>FT9d9V7LGHeYFQ(uj0aD25^(lw z;6qyMRb@9u4oVii!oxFRq|PfT!(=s-m@oF=-C0(Kgo@KbCN&cyMhfzoiZhmbO6D?q=iU?B)sp&0GiogBLWEES77sWVRPn2Dg-Ok|!os;i}R% zl<=d5S8Neqt;UtXUHSv!le4OqsV?&}U%_~&DH-QwmTV`+yh_aK@scXHegbeEN1xB| zGBZnNS1U#JTZ8?1}{OV>5*%BYfI;B#&255uoCNLMQpTdpfEs6O&EQ>& zd)EYeATeI!G=3Y(0T0YAO$3j`)5ivH?0=$ua}{+F{GBgIGJo(ZOx9=5;@(Km`tM%w zzIWQBlCtcTSR2-$8fY%62(t&O)u>|2H}_+r2<;G;k%{O=M5elRHO` z&;!Qfv+)9uk&p!X3?2!dPXsMWSsy-avd3`x#{i#*g~t@>7Jk9u{$)1Qi{hExqLX%W9>w_tC> zEemlJ;-z&8jUf@;9f&zn(q{YNPL8GTeG)DGFAgP@X{JFn46U3IG3@o6fOgE5o(X=Y z=Yh(uWB+Gr>^I1?fXN~}1^i_QO3e;JN8t*ABkbQMUo-uh$+MH!K~}gE0BPYNL+WNx zYIs=jsl{iFD2G}N{Kheo5 zUB>wf;U6S_Op)XN2gH$M#XtekthaW!Q=v*&bG8 z2t*jDE|EOaRiScqbbhM3grRt1o+L3l9BTSL>CE*)o&H!{?XXKH4CC9BZ?2ak5%bd2oXes`r*F(b)Qw4Jz>{zj#wp(|*7CTX zj>!IFT9e-N-_?Mbw&h1nOJ|qamlv`_dTPV^bJ;8-iFij zIgC5T8=?_EQNJV~hdh{Y`=fZY3w4J+%gn40F5i09<(Bb2N*=Au(J1po{3q|WOe0n1 zU|q9lUmoGvLnVlob2eDi8Rzov-sz?CPBVI}=xSW{&h>}&3iJ>jb;?&rcq}nZ75?Xg zCnDg}BH-ldl6QN%9!&BL0_=Mc@qZQp|7`^PjtKZe5pe61Exg++ChKpwVcD9;ZUW3# zTs~*|oV=XY+1E`6>z6{u;O=$`GABg}ImgvC86Q;M*y02q63f<>e~wk7-3+7{j!P3b zpE4M@>DwkF%m|thf+LB9YeR5@hyP>c&pF-HXRRK>tf$TM{f!=ard*TH z1G)l?Z}V!4IUyp1;Y%&J-QN2xxXs&rM8i3f?a}{?1vfZgdCyz09Zsxn?A-EaO;00HlKIhPR!6Pav4%(R;6OCft>22wIv}>#anyyGX{W~!XONfqy5rt?eDV^- zs~vD{2vB)s_2X3Z{p^h!0MPQbJ z=LHjQWD6@k0yd3gA%jN;NHPt9x9xt%`quC1^1L96B4LXKtz%V6H~X0dkQ3}!aH49# zc_{W_+&%;rF-uQ%-1rh(@+qq&lr69{sN2W^s5KPD_@-R7I)mG`^@{BZv{ruV})B$loKVx{t;|E@bbXjxf-VXenGTR zLhX{GR(vn#l|h)j(BV0}6* zkW1V`TNmhd+o&MU3E)JSZOV)t0w+tI8Fj5-!(?G8T!OZbhpEBLuUP;y_tL}1W=6s= z;TtUgL2?o{h%Q82(Wz}A{f2CLWXtgutcQ5Pxl$;khEeE+nVQX-&Quc`zQ_WDELf?Q z5H!SgVMcMiS8xmjguUPx_om||+WmPgF~0|%h8P$)n*4$Os-EvkJ+qe}UD_}1ij6Fr z(8))Yvy+%-AKIT?jzdf^$TPb48BxL}`avBSke7j>KYw5%nBKoSNE9cp zz;PKkfIgVu!UZe<^UbS7o36jq1LLWfs4UK&$<9U|L!>=$1g4qvYycQSz3^>oXpdk^xPrUS`cjJm?OXKTwOC%bH~kB1 zJhh43wIW6Wf0|bYsr^*>`r@E0XU07<(Sc6IZhpEuZ5DvAHq&(a%QCJ^ZsvVFcwKzN z;V_KjSj7Q%PD%_mfMF-RIWjEeogX}rJ+bql3APiC#v|&~$rAf89vS&#W??W@+QRh> z!-v@qeVXG<gA_7R9`cw(>U z^5S9X!P(teVkJnoQI|(MAF4=Ns_;Kw`n|gTdP-na2_~JnaxCy(qe(@=-!`3I zhIJ0wi9ZA49x;p)zFVt#HdFY3K>RaHQ-6d1uLEZ4g4C(OFzy()KR1L3HqVxQ5pF-LnXmi`y%B$dnOGrQzV)ih zE#v(?d0s5+e~yP0rc%|EeDa6fJKJ_zW$p*;Q}`dA8<-2nPd<1B;LK-_MyPxX02>n# ze?kQO3Z0M9!Ip0WU<)JSrz7CpX5_2q9{`tnYF>kULjb!sBL1!jxb<1pYVub=)KKlg z4TGu+w@TPZIkU8sOY9mM?@hWc;)XifWLSNfU6-6bS$+6TREtjqPS^CgmrqR^=GSDK zC#CDyrOc23qNQ&ideiCIFBUrm_+TL2@V~*anQsl8aTwlK7a7x>vkdPerRjuY-G*1| z!Osh+*u?*r2>4zLZu5*z)RO>TlRs|qnPkE3_}{kRoGMIwBkvo|=V(1ioAw$!923 z=9lIWe2>N>cxsiW&zXAptTN^JA!k1soHOO@QT;71D?4k%h~nb%;br*CaOm=tQw$7Tv)XSIJkQw1Ypjad74P_c0T4sYf1V!Z+Y%Ljecpnw{lFTrm=AYvmGFLF0kpT_GO}I|-PSd(sJ96#BcqYApp92`% z9}bNgaIiIH4dUfX|6Vvl{Tz-PwWc)bx#qS*I6a@kxMO?~=EarYcm~cHY!D03)v(sJRSY!2MnnO+c zBb`IrbVbcvdAM`v?Yh}VI*0D-iniR7H4Fq6HHVt?M>>a^>E%f0P--7A{IkuWx$(kD zv%J&On>+#^#Y751o;kGq^x40zu(XIR8jCAFx+H?b%D zk5y0b@1CH8|Cix9cz3xvcy}9}axXJ-zqkJxnvS{qrP!Prc>da-fRUQ*Es4R~5~WQE z7@cX#_DBrgl^Fa)!qLx#{@`YR@O^lOZJPTLp(5@y!^E*Fs|&v@QPrl)vtDvL!E06H9gmx z`HG54AC4O}SDEx9?aJpVi}~eSCC$(XS+3J_1;i!rp|1DZb$Zs%4&nOS@51*5c`?Jj z%2(sVTi3B3_Bt&`Cz|_Xrj6K9Scwfgea7Y2OuK3hCz0ZV&myqaEaA|1x3mUsLY3Tf z&LYr+`p|jAzt@^a9*64BW8Qu-Lv{Dw*qjS64?G?pUijGI%qIz$V$01Z>z(8cJpGe@ zl3RM(<3-FeK786^|C7^8*J69j`C;|f%>?t0oMG4<2b*PjTK&iP#r$K1!MJCX@GRqn z(wQWOI?Eht`lwkZDt)+GQL~Imf26a_;{WC>Lv2uo@CrIye-$hL-;Z*Z$)8jUQWg<-n$+8Q)Lt? znF|Yhm0r5ctIvX01_$ny`;#qRqC zD@uC>R$&^#c`(N(!-Iww>ua7}-iXs@PrvR;obMgV`fS*+!(X2bv^uIv>Y*&*iuXns zc6b|tp6^4@6EcmEU2Eo91dk-(uP|M>iSePOx!S4g4+D&u>1|MzuAX!sWvW`_-Q7H@ zprn#_*Ur!XZO7;ThP(d~5Y6ZgUXQ$>=sTjv+OHw{-Brhaq6dUww|avQ;L_}^eXh7- zMXz6uTMR3@MzcL`<#KAZ&(Frqs1FEx9YZeAL*Y^BHuhC2>DQ~h< zaR+;cExMR3t(#H9<9ZbIIJQTR9>?K7ugB_Vb>E{$)HjePMf}gOn@u&A+eR-bsHw*Q z|GRt(#rH|K4YyKH{0NVb(A;ADXS1VDkpw4rZ$kLn$n|#kd&jt5kxDUFUF1}q}}=b!L1IbLj6xVlvukee%Y7N-6BF&1U9 ztx-ob-yoiJvyV)A1NQ)9`Qb2Emw&Kt^F>IQFa4jw4blaK<3@d(P5R426$_{5bH1V` zYJ!}h6ZAzq^L=KPru|W;SdIE1D8T=6?hyQI3Q=!T--)R;5)3(f3tfI=_ z! z;oIqu@|p9ky34PFIFNx~bM3Ur!$-`7jj@~;k1m$U^2zkbjxF>;i21A*TSU7?eUJ>tDlG9ou!7FM1gbO>4h%M`2Ya8D;580aE<+Ux1_9G?qJxr!Hn?L8FCwEX8rE znTTST+i)4^-sl%WqMth+rJDgX?oU!tWH#I#0BJ}wn-+L*t&o;O`2qJcn3#YgwN``l;eU4VUl7Hg z3QrG9bfr{-p?R^9sbQJPhk+j0Nq-eYav2Ixu7;^GH^s}`B8foon*6bpRlP~oE9ka7 zA;e;=jNhS=0Vs4POhjnCP~mDKl}of^2$cZKV(b)>uCfh;<9)cB9$feus$E_Gw+=T| z%LP4D%_?FGs);AT`)ufg^%Fbwo7>8*isiZW=gDQ&+otD4A#tK&GDPuUQB9{Cl^Qypz0EwbQfi{rX78C~$ z&p0+)w2?$-Y3M++g-R(T0)9LV4RkcZI|nx;Fg-`2!^u}~_*VBb37~y^$y`<(Wc6Hu zhm$nik0Y^pQg#<&qtX>k3^f!9A%nUx{_6L@22Zn_@-@=tLJ^7zn@m2J9k~z>>;ZTa zZtMYVob4@Q1qqHX>-Gf?kyL)p==n(Ho{dZlQt5aIo^|O~7p?=aE3#;%ipcZw5R9HF z$Fm`ZWb)ICg2LIl(1YwDNfKiR7rrFqaCwd#+@(|(W8aM%n@PR~-M@W`Dv|@TACot| zsF}tY30{-w?-qVq>aqs!LITxm`SoL+U_yy{XXyU`1_bYc6&`l~&3r4w=PuSyNn zD1TRmfuF9~DjUoFPkN;vnF0M!*}1tkc_)o- z7t$QvJ~lJ{wf5wh`Ra!1WWNRz`jSU>1@1uXK8)Lu)X}g9ptDGAuZp^tTmQ>TLzxcm zx$7q#R3m!!A?_+UI%M)?6&P(?R|NZmYmRTveizu~lxn`8;<3gL9;zOHL8b)z=~#@$ zBe??if^~~omyGgVAFQC`S{n7or6$NE`EE;XGn44fmscRW0uY_Q2&)ZdBA(>koBtF2 zMgOVhOBBx}OHP0n2(W@nPN0iaaV(&`dsDp>RUi#LRtY~@-+k%-0qnie^np!apUgGGAXBa2X9Q8~( z#b%ODwj)>cLvj`zJ~&>bc=1K%#EIvgziYWhlgh9Xu4p&AH!VUMn)Pe(_P-0_tb^Z} zH{k+7`~a&8dFge_k%Q>9irK%G0YaC_+vQW)TGJ)lbEMQcr+3W*iFG#O#%4XO2ev%a z&T1zcTmLNIXlOxp)J^KXDp7qamCk;e;|^YZMg9#X253VmfAbmMegE8emvpYq~WWWJ-zz($$n{; zR}EhRq#Q9H;iGYrl3S{X`y)7HSqYcHi``T?BR4{ua`Au#ebvo0_)EbTdL>umejdJj{?BOnb5cyT#!x7SY zG8830>206BN=3MAIR_`)iPtW6m;4nm;A3PpmeqK>9Bo+*HOY8j%u$Z5pZ6jiYb)Gh zR>ne=`mDhdf=x_Wzr>nuRXja^6^41A4!>i|@A zDhfjvEzCJzf$FvD6n;T#m!qCNI_s9<9wnZc(}Dc1za1@Xh6&C|k_9ph63qm`++s7E zfYhi5>yBoC4(e8_jQMcdgykR=kOtPk_^3RJ&V^k#sQm{M7OPmmo>SKkRaoiOS0KyF zr4%6=X*x*>=~ZM!K&i7hWTdRbN~l!VfO|-#YAo@gpzW77x{Cwk@}>_D-|+q|8vX9E z+=9hmK2q^;VLK8u24!XUj3&4KcW5rHNNz(znrqUDJ7_LeBOX<4Y#9MJI4~looc1J@ z$FJ67u3YZde+ldFwU~ruCh0!(#VX}5kiGCtvzQL6okXT&t5>-J3i5=P!a^#P*)Ibj zKVMK?|MDnr5!Or`1*Z`enRCrtp5uaIGREd>rQ5KS>467)<&C1PLgc)Gq6N**XKC$X z5Lt7!8g)c{!E#L}7FzTsh%Ika#0ClzgR_R@Fpuw(2$-82UcunREE`W>vpSynt^-q! z%TaBRL+xtqU>xf?A>>4(5JTN+)oX;Y=iosMy^l(P*!s8ri_S~Z4@cfeyNWZT7{*m8 zgWBfo5BO^TQ<%@t+E}(6$a&M91U@&r4`HF|xbpScQ6LLA|0(gr#}y1at^xp^nYzzS ztw2oaqU_lOPPhZQ)TCEz6X+0YTixFBr?P{DuF&|VmkM%IifFudeiC!NfW*KoRO&Tx zW{06>1S)cWNm`Iyh%DhE5B|ltX$g6rpNyu_vr#FZBDf^M^H~c6__#wLfn7 z&q#}dB}iy^=UMh&j(5JS;C%W#8AA`{%A-n+E+o!@sVoI{S|)^r!Rme$=l9#z$EZe2 zZ00{tr@IuxrCa{BOL~oi$~NQuO2;cF-_X>fW@+KF0#CU~=lhSGmrpUf@-w=5J{L2D zA03~+7)@vQXqGDORH)L|?OKaeKX&5-M)CM(^9915LUrXN%yNpsfC&Q9kNi$(GH4>f(cE`L}qM|ES;o3kPFnr&b(*D8G%z@2?KjtiPEQiH zLzPZA#0KI%oZnXgV_m}OXXuE{q4cI)1D=4JFi!byTrvN~VpHUAr}uD^-tgF`;l06y zjw+Wj%~w3w8N)RZ>A$Jd+j;UnTo$8+X@~Jl`uTjYLO6Xs+%dZGfNr$r$ggD|hua@@ z#<21e%q14v5h^hBs3PV0%Xoj!GX@r!?<|4*ZQEOn%-w)dTAlDV-2j=Z0Xs>Ea1A%~ZRktoqci7&74n^7@O6Q3>8*&kt&qoFx&AY6zo_Bn z*}mqpTsRsLOdajG7e>G*MZoJK;L9T5zlea7rJJulTO#0(MZlkrfbWlh7l97)mHX)k z_~{YwF9Oapr&aoxO1{x3b9_Yn%Ol|5ih$3HfG>-H|2zWDvz~nIr9aDj@J$hLYw3jr z*yQOr)0#OacGaB8S0`ss(|!7NCPr))-2Gg2`OMhNYrg^A(fGN;`Dd6p{X*QC*IExb zCHUkuvvGzteOB_i%V#Agiza*Ysh4`wO>chk6)-J1{kr7jnO9wN#bhW0%$#nDvW!E{ znv92;*LFGz>f%CZ_EqJRuMlIDrfRb$!}(CT6>0KSv#v@`o_*a_*G!*t)%5FgW$4mX zk&|aZjaK5ADwqR7L09K_pi(5!GMR!ply1^=H5+i%oU72J&ZNeYfQjA3rBPRpNtV@u zZ%mzrrm64^edTwU-wAUT7zZ6N5N>O!8!HTibB$r*Z?WQk+=4%*;XEUh{VT2vdqQx& zXL!-dhjX{d|K}_af%7~qJeqK>{)qB5=Ux+kss*>(b-e}Wr_RJ*V!=xtTpF7A z#xiEO+#l#h5^k6K8w+lidyfU@zQg3dRDU{{&!;T-`T9dn_@^!SN(=rO3;ucpJfY_; z=3~eIngzG}@wy23!U*^eEVxZ4`z`ojtDeI&0kD60CT)VR;jHIp@!#O*bt}G257#pT z1jauJ|4sZKTksMK{)`2;>HKV63Fh-TEB<8`oO=M1|MxApUC#$CxNWWCQ4KfkHFNQ9 zD?VW+|AE2{Qth(w`Fjg~iWUEP3qHhx7ji*}z;@YqsIuVpIQotSFGU(tpHuYyiuu@h z7#RWowgtE8>IV_t#QE(UMCsD(*jM6l?q)f2(i0$;DLC+s-3R>adnB(1KoPT`Ke-*ZQAQ!=F0 z-|yQ8qLm8|;2<1!BzGiRd>l-dZm-)FheYMhJsYt1c7Rg{>sECw3_bS@J%`_am|o3? zOB4PNtMLg=W3ggfiE6X9*Ik;lAve;;){J@oN zg!8x@%N+;ZH~{Bq)0oUiRhLWx>9mmh2VMb=-ynDf8@v>EFHDgn;pT2j?kFzRxZqkZ z4UsfCNLVO#o>6onfcEyD7PbnokIP92?&rKUN7IG4EoyFm3kSP`?g0@6(K#G%No6T-&H%>8H{|LOqY`owovI|Zg z^-DL!OL6Y_EUc8P^ud#3Gx0MZ548_s{%H4mbZO?|{4g{A2Zes+BXKvrH(M>oE{TOW zaA#w1mY+_sYasL#4@Q)D!B)wP=k5>%gm6dgLa%;gGrD|yTU&CFocri+F6Eb$JcpYa z!fYYKRDYnO?qxPi_YP!JROK{w8eT#~fxyb_lT4JE-zd+1piWWLOP(KR@5FobgW(5< zElZW)ojLDV1Hx114F1P@ozHWI^Oy9>^u%EU;2-5V!$)X`wHQqUtwnzG1t)lKLU?|R z`sUB&q=i6!69dM`m<05>lH4}q^}Cq!PMV?xn>C0 ziSHKb{h4VeA32Ac^afr9m_`xqIzxs2EFO#x?;}aR^w;J8taghVwdOGCztUMHxeJ$- z4|j~XO)nywbpn2K+4gYzqt+Z|KmQanvqHFh>s6Oq#`{O`;aQ1j{CNDp>YB^J z7o00>M;mV6n>d$G`)1voqf0j<2hEFaTN4;4L^`sJ#EW zArNMUi243E#2S7xM93g;)0DgrA|klo0IM0`31ATg;XlOlB_5J69-Nle4e)}`d%^H{ zaNpN1LkwlfA88@ez6oM!oBh%aiPH70KZysQi3i6a#@8;}5V=<2I>oG2ma+aK6LE3B zf%ST_|GTVFx~nvPRLc{tE!Z1T{0PAT@t{L^{u>N9(}zEW+f0JcHT)ev1@HO2I@0u9 z8?bzv&hZ#C%@2CxR5|FYY5IKjAzmt_&I>F{BSU9vV*NHYLGBr z`qBA-dE!Q`Elm3Hp^AmG<#QN!Ofpd;WtUFRxrA*Gw?AraQKs={#*)q^Z(Gef`^tJ9 z{@Nm6OGsN`>QW^|^FO+;A($c`pM&2Adu@>$FS*Iq{@}{=D}@)!-|llX_zq{2?|_)X zdN>&0;p`D*hixaNkwl|Im0UI7fs-bg4vAok^5#Q%d{Q#i*uY=t&&_qPu2?Q>2FfK< zB%9IgB~S-=6R)!HoJ`?*d^;_k z1k}GuMk%@G%n)RrsQkcP(jN&;E=y_6+Rwmi6?nzYeaRCbiqD8$oGRT%IeZ0%Jar;? z+u#0I#k^QZHU))lpAr7UiWy7_i9{u$-6B;>uVAyleeiI}F))<$EcD$@@Cw!yNwO#7 znUUDPC&+M6Ng*7%^kvi*iB%pe7*lgE5bc2BUMT6vx>XczPp=z-NV;qaP1dajY=(hB z$`r5+pCSLxsKB^FV!Gy-cJJt#hO34f=@(NPyD6)$(--Tuo)>5e{EQHx~ z+y^B-p;e5bUb)<%X88ge2L4j6PMXEk(w6*q_Jbh z=s~2VTPWEL=k8iw8$#YIA(+3I{h~&d@w${f6X_tQouDkZxKsmLP1jSKKqrz+?NOTj zH<8i4l_SH73Vj-<&5mD^v#wZ*Cj7gp9M?OGa;ahER zQ1%}Xlm>?FzWgy|r#t&nMmaJrmI@nIVM>~%wq4*QQq#w6*aMQ2%4R7~)n!hB7LA@# zw!g1u6;3CW&qD*nb1&H7m2UAemtsEeVgg0+gh8(!3YVOj!c9C6y|$B~HUh=g#5S*B z1z)c{fDbYTv+u?qg)^^qJR#$47i4B$*CYFV=r`rYRyVSgArq#~!jc?Wa(*UR5(OW^ zGFIP_Ox;@Y+%e)gRr7y8KNUWeMeyX;Px z<@97GxWtzm4Q19wJry+8>JXqHX4Gqdmp#!9wyADwhouWNi z5rF7qv4A<*S&^XusmRAATF3^{r$TQiS-xAknB#;2$5le-1fD{>W=d>pPmF~NZ6d}kxu$`3^PR+13hYogV0w{{O^<9KkA z+i(n^s@A&AUzg7r$BUlR<@`}qY@$?5wK7|)zMhKEB$681Y_#NyQ*+J!CD+U!R80tqppa_k_`UokIcIZBa5GF*R%ztQ@S8s}U<#$v~26Co;c?vmaq=!a z&P~-ZiB-oH6=)4zFwaIEx4I4IN-m>O$0jBVa7SHg=o0VAR^nYE^@5xFBZ%9qiz-v> zspKe7(fls}lR|Zxb~1%8A|@#92^dE!eGWT4%y}GPKmc;}1DIh!`zzn5+vf*QXH%k3 zx2yV2tUhYjW-pei$mFR9pHg)eQqeXEvL_)8zG2y~qF3<&S)P56-D}jC@xda!WNY34 zP%ZWJq(%kW;BiGl?C;arsb*UzAAQW!y7t(dia+W!_HP>vGJCkG10+l~0Bwm^zEt-N z8X;^|QM}LIE%jGRY=svpzS=}~3t|9o3nu8n2FoD31!3vJV@x@P$GEAPh{sOLj5w;i z!zY=3?q^p21NW)<;M^YPgYz7l{P7TH-JB`^_fE5|BWTg#F}Zee!>O73 zc}~5_;m>pM-Q}D+@@RY39$FxAW=62ZV5aE{TBOW5I1azhc2{I_bxU zJoyi`;7n@jd7}mYxCJjEu_CaZHr<{^6d8;KfMKz;0t+CSdl}0!KHT0E z_w{zZOfRw9{oqY#)3|p68cig=UyB$8F(L@aJKn7pR++te)`-NZ|6$_ zqiwn14e+|+!Ts^zF{v^4cEh+!MYAf<9tdB{CYI-O5<&L(8{CxI%8ISTjh=|w7^!Lz z%eiuSB0a8+b!+`8IIM01S(oqD#$e*;O=%ri+^KinhO+>!dUvyP>e@Z){#eznht#eyUfS#j?LI8=>)HVo=vjYftKX+FOZJ!# z<9kI_clPiCb(E^C2?o8hSEDBJ02bkP#Y>-zmu^EHJ@-5uk8L%5n2TD4s5BWQHix=p z^jXPheZ2JkRx~DRFFpc|GqNB3`2B?Knq@s|`wbl3uQ*efrZIY`vryiI>Im+P3ED~U-B&dD!D?ajyOwN0)dePd03 z0vW3F3`alI^ig|rlYU&N0;c{3T#lP?o%qh^1|R9(e3fp{k?zf(3?oEWSW~lpQeNKk zMK$S>Ly(O(CgeIaC=X78vzKs*lSOF?`6Z^ ziHKj!Oc26ry3d!N1u5jtaL_f~un~tX_qNR%098_pE^E3(u$AWAAA;(!TG_>eO_#(W zj8gx~zy!}Qu%ufs7Gi6gm==Z`N8lhUGk#cGvR~^l*4dptJFcI1CJ(wE@-yQf$`j=w zoG#J;>3<+EFZHV1@B%RJRknil?PmT9Kv`h5@Z>JojarFR%&TsSvpW(lC`JXI79-V9 z=gA$1*IwmrcNtkU%VAs;iI89U4lLZTe1ly?tVO+GsFrR}GCn8y^&=mIK;8IPnBnPG ziv}A>5U8U~s zF_}KykDOm{Z*thcV0X43l6S{J_Dtr=+PU$V^87CGmO zu*H8vxzxXvUTA}dvfq`Gfx;)H<`xQpzhGc?t$Lrm1XoG8TPG|8fNeRHwbrjV?#x)_OtDiKbk04X?;}K5DJi zqRThkZ^}1o1@j!W)>^G2nl%O6PnMHOZ{SscVGwr<|9{c9E7pxW+_hGlUaMUa!c0C~ zg`&tKY6xn%srOuNdmA zM(nThxBFV@Ox-~oKBRfGR+9ZOo(Z?tO16HN9lsdy7znec0<70~Y@kjPz|uO{+GqIL zXCAh#fg(+NEWe6>@b_b=3HVtszMNxdft&RZKAlxq_dEdE|J8`+rQp#aNly{;N+wc3 z(eu)Gl?UoW86fK;8ddkP$k+n6CBz@tTgOv!afY`=CI@%v4*&+VM;wm- zAcEaGQNE?HL@?WM%-{+n+k&)MD8MxbJ$y`|rQzB5equRfY$Juowk?2; z+D^?&8|kMn?&PsO4|zw$V;kvH;CmZcM-~V?w$b3R?G>2UXFb?_@EsCB9P=6QgQS(@ zvi+5d0Pt{TKrWoEy`yBgZa>hD4v+;Lfp3A2(>GwK>gpB2Z^ zXIDUzF=X7%NJo6GhcDhK^ndcGi?` zu7R~7#@qR_bO#@IK1X)xP6+R#lhKoe^??ndz1fR_mPC3Y*p?T!WordT=o(TZYBLF~ zmWDvP=HTbgS*v;IHD6xCVfZ?`J$<8a-ce}u1m(TuM*=5CFDlXFp;O2`lHFibr z&7tfOe#b={_6X5(5hrr#dc9O0wfBZz(PPTSufq3Bes7)@o1 z_0cEpRH)Kd!I{42CA^M_+A~lCfnlXaC)WwQEg}%XteKZjF#&&OoJ!lk6DKCcOhV=PPom5 zDZ2bGw642*$<- z$%%ZtaQmb9yZtr&J;zL}5H8<()#aA){&9Pb{Kzj540NfcJmizrV!zmX5i^d503II0 z%!G854?Zgb&M7)y{1p-KUq`_I6anWaAz%IvN5H#%8nmIbE_;klI~|9?b*4e%9CP}^ znbHwLP`VB|kEC7pVO?w|L)glCo^0D-M!Ok)sV*{R>^+uzLh+7c$=;JK)&x&DhlJU~ zWi2?xC=9$t4@O>WnTI}Kd};|X@U;y;Mo(&C_@W5-Mhnh(SQ>)sX(UEfF$UJ>So}BntPI6Jk&zI78G@U9ejAZbv83w0$NhYHMMWofzti@} znc(6pM!xzB-?nFs7*Sk2{OlvJJz^$B)S*i1Vfgzrp$F!^$ZWucC!Mu&d&C_D_F(hW zK58HrY5n6^IL?I-0%bFTw-$`WZkVj<7<6?US=bikXSd^hIr;tXfPwyQo+#w^V=J^6 zS%G~YPZzrlO_<(<^?xC6z^<1qG2G`Q=+>siM-8ykUdR-|?s#yIzTJQ=^$3zJx7Rp1 zNKt;z90}}}I_}O>0UinH?7&^d<~gSh0JoJ3ksTJtV}ioH${P{&ZdfDQf=6BIlPHpo zeM%ww0sgA1=XX6jYqoyEe( z6c_(Ign$oHG)`-+^AIA*H#~%(yhZ0B#Q2Y4V@{t+JK*u@V=*^Hzjbm95&syx&DrM= z!}uoZ9OC16={EdXI%OA9u?LoCZw3@-Sa8|}+TJ6S(}0e%1s!J-9cNgZ>d%R8qant4 zP|WsrJ-ne3JNN_aNJydtkAk?3KI0~zWbyBUeZ!nkd;oMce0F{cT@S}w%0m{_yD}=S zrZG?;xeju^VX45J$`%=pgrP@pMw~a|4%AUY$}eQp8RZwh^6k23Je`Efmrr9?_oPw2 z%zm85MY<`ZO%{$57^x_<`3*6M9@?dhOFgtVQ5&U)wxnbs5@0Yu7p*+o%&yT&lGKd1MuzL#&I)m{7sTG5?} z@`8KwF1#S+4_2d}Y?LdPgWkKG$A*W$zyE1HePHOzh|l&Btm?@Y#H7fitH#tmbPzSB z!0=II5v4NKgovD3f~`tp%6aTVm8O2kj<0;Yi_+Bhgc#JA!Qk85MN9TU!@Pl(tf{h^ z+oW095}|oPIF1?>!pZbdQ{}(~;MAxFAZMj!{9M$OnJ0VZ)E~1(d1H1b^s&sOn4PSY zv(O=j!h`rG`O#hcnPmzU4+0*|YWmGq4$TmU;iKe1e1uGgVl)kNMkLQcaD?|Jg!cha zJclVCQz?v1cdpr3PLa-NpuV20;o*JjZS0#oK`%jbZ-(NIc^+x{sB_BOb@}6RC8--z ze*-SZO}I{ccYBCuVAjSay=i|H;u0_2f{u7Fo`H{q`O<&E6coxh9GC0(Fz%Sdq(4%b zu$A2SAejE=BdcVpW!fLbGicE~gKsetD}?KBz3Otyc>g$_foWxzDgn>kiTZd%v3Ub# zyp;hS9&60)ixKd61f2bsFP|$T;AZb0b+j3=t?r_kbnv52V>!KUCaNLfle%NMCnQan zJ>e1y&M{=*k6Lhhk9{mNK;XrO)6FgeFC;CKkL@RiQS_4$mo2e#ucv-YBP zxdX7RVhGpgOBUSDztw`<`54j(=QBo=R2W_?rFP!~(;Dixj6r#9hRr!|)E@ZkvSHW> zGfX+^#@hIKJsgdAFkSacH;7=cpx50n~z zAU4n9K}MEuTWZ%bGq<4nBV=^%6+PT=U@xM?rkS6@-2 zow2(=Y7`v-aXjoc#4$>-Av(E>FKh8(t*x8Ueew#maum}lUZy67nkpB_mG?tQf3e%3 z45x@)Anbhp#v1zRNm!0!5x>}B5ov9cK;_}C!~XQL#nr(kZN~#z?b~U8t-Ai5Q8kc) zgR^0;R6C1JtFkEg2h-|7;fZQv>=o25hOLCzSYu%$QM<}*m-4J)M-P;PoA#fQD_s*{sv0!adfL`QJlcqD#T~%mMO=%V@E*wum z%)bvb9qQ*VhqlBmAbD@m{N;T?5$@6s3=BRUKG@7c3x$|g1?;k@Xl zFH`jTb#xvi4nUzovt*@c8ysRksQ#@{+Q)e(QFDCIELBjr9ouv$&d`ncHjN(;=W6%n zx6xfTj^de_B+eH>oPwX=382SNiC^E*!)^Eqddy$cK`l~u=|ax zHZ$pSz{u40oERr5bdN{XB~Ym*Q1|96G24w0uO(qALWJvWAw)G_NEe9pGbKFIdKLQP zP|G?Vt?pjdV1dpDci{l2aW!z4zbN)WisC|~Ss2!s0(?Lm1)eRGlXSdft>JLO@-{(Z z7l=H66->8j3mKS~gg$b%F(;5XI{kHEHY{;v?xcHgH3EHD!HgJ$4d2D5Rb*rr@rG$m zL;Zvyg-M$xKIBjvHI{+7rKYJJHHQH>81LLx*ODEB7=Go0GEF=enkM#On#kTq&Pd0@ ze&t5@=AF2|u1~yjvwO2JOgbJ$3$yFUSHPfw!cy>Nx#r(>MTFFF2XoQ{2Zq|x^?0s@ zkr-vC2}YgnXU+VMrg&v@T{in~cr9{6m|HO6^);l7Ms}U>1{~>x_cG{~bf)^=V7oi2 zvqy`GodjaYmqVEnB0hC%v-_|^#y0`vBVRVKpO6bl#6(yp9EJ};^SkUmnVx1Bzrz~w{kM3Np1=D4WA9zyt17Pj@pDMPpvX=YHCo!HZK|ZA5=5FK zSQAa^K5&jw1*JX;Dp+h05fVy!0b`RWyN4ZUueP*5?WOnH*4t~Z-d=4{YnuQHzCr4% zzEG=X1C?l73BL0Ge%H+GGiT>)Ubp?-e?R{A2Xf9?dmd}ntXVU&X3bg%RH7BE{g^mQ zM2j=A8B&UgNfT=T2R}jCBEN$!)`IZuF!&Mx?8br{*ggve$2+8Y@avt#NK5t`rm`W* zdlwK}0~T8f9zj%l2>WW~VH7U(Fb-uok?wjG6Ln7p_TijxGye2mr)@FEZaC>~q*Mwg z-BUzHsaXcM5uw_hm|OIjUdS<6lMktNQ;#he?xr5%GN}5Q{0M3q)aQN@id;;zz3xuj z1J`}91s6f@&Dib$d%45rqthGYHg4Ln>!)GIKe7{ z>E?;BR{opFS(;wr_YL%VOEgzzg`oQGe~66C0O+I@;wxq*j=%KEE3QD?=fv@Ub+D|TwgmQL>W{Y9;BP)pM<(Wn zTq}4MYW(X8p!xP2@aOR*+9tl6O2XnXbRzw*hVDndEMTlZ`mEOV?@0%IE;1I&|5gnB zqiN%Gz$X7?5yYbT`8!HGW?88_WR-qNy&Gv@=x*pj{a3W_0ZP;!#=nWg*^vq(KUJb4 zf0^!oPY2AN?*A0C8)N%vIb-Nza;ffKkM?#!iZLK^%@s)F2CXulVHZBb1$!%hCCO~ojY&ZRR$b2VKeYBc|Pg< zOLPf&&=t-35~tZ=vFsONk(V!+H}eWy?A8kWu)IQyfFhHHcf?gu)2=E~zCk3`A6eu@ z-oscTaUAH)hvLQ7>HljC{9Ox9)ezQM^32ili60zu2L4kEZrjrh(87wZ$sZ>DdJAsj z^GQ89Fue_*XTdr4O*!AP;FJvp{$mSnp zUt__Kvf!I7IHzh;&g(JoN+qa;-)w%EWx?(CK4-ygzUsB$cD+aQfC~@XWtV@I1t)3- z&uc6=i!|`>TW}knA)I{iuzZ_Osw}vj-kjkwz0D`Tw9?yr@~#E9`D6&09uLd0+xxK? z_-8G+jn7RM+~%L>Ex64;1DP2Q>$Tx0TW}knb1b;cSN~?gZNB=01-HvNP)*$Z+Iv(C zypl-bVYd-i^B@jW?Q!}rl}C1aJgXa<+GihQE365wPAaa03_OVOpI^;*2wdb{1Z&It zGv3TC2oM5WwZ*--lUWH#3Ohoa+EqY;LdjPyA9frjr+o&<1I<-Aj*8A?dVC##07>|O zPb{Z>5n$b{k(*yCsuL_jAM&}mZ@`;#pR@E{$N-#3tcT}yzQ?iI`gYnD5mz}etNsOl z^86}Sg1dCiuY55*!fmU~TM6B~#T^Wz(8g6T_qvbOL63Ti>sz|ZQv}aYcgdqO#G&TV znS?VyA!1|s`kDUtzp?;98roo-%BdIw&JA4|zi|~TPvOyFXwBObz0&b8@|1Kq25d%9 zhnq;J30}iE+~6y%LXqMl3veME?`$fxH@{4raY@W85ual?adW-X%e3mg=_Dz0+wr8A ziDXlTk{MD*;Q~kFIfWs%`KniNAM&E7GdXl%4jq_l#?jQ`-Uo2B(^!r)%s#;%u1I63 z@2OBg)JsC6U!uCkQxQ6H^}TKiL7tp{?sR_D>0Y|gYafp?SX|a0U+yBL19T?KUO@LU zme;XTi?GT1(lycnECFiur9Uf^zU}0#$ZPH$g+jRf_u4b~gx(&~1g#_(nq_maiSw{3 z@X$+OOm!-(!i3~}W`ZUXO%hF_5DHx`Jyy`&(^zhysu~5p)&t8yQ;PJvbh@^xRUs_I zY!-c1$Er$hB4&F$IpWb~yfVH2DG$%KIYd53b-&XwQ2)H#`OzAvLV4EZ{HU{RP4h`S z@OqI4UQ^2T375>$`s9nJT_T#rlVBLG>GuT~(+J2Q zXXO~%s{f%nLI!Wj3a@=Os&TI4EQyP-1${r6egAR~`e3RM|0g0dl(j(4XFeXZ=0rip zgYQtN$F}Q_3HA$O6}nYb6*+p zLUa-;)O=XYU)S`#gSwsND+L2lZ)&MC(I0jy8A=XJ6emH4+$!;Dl1qkz<%EE_FZL)Z z?A+vT+S>ZksgThSPM~>q8O65}lN8xJrH2&UIpd(-^tj0f_d3@;h?x;43Su#gGi?Ou zL0AT!X=`<+SbP`S!GE7wVDXUkzYaG5Azj_|5_ODhN^AKa;Pb9J{5e)LkZn&dn61Ab z9R%SbvJz4r{YSTtD#j6q@TVIN#QE_%>A{WcnHKlcqu{*~y4Md0vW21eE1{X<2k-bb} z?0thqz>S$fXfbgH>a?u^Xfc5i^9n|_k-O#y0IGBu;3kw0qB;G+9NU^`782GBGwY|2 zAF~xsqcB~1^<}|^-muRQHA)ZbO!XEu;Azj&>s_==Oj;Tf!S}FuMs&S$s@3)BO!VC2 zSxU4*wL0+Lg6TAi8#^i(6r;LnGHKC@;D9=S7wj%bonR$IUDo>`m_zNi5~^zAlIBbA zn4|i(dNd+90Do}uYYA^X>@2|@@KjY!SaJG&59qGXMsH`=@ND#F_yR1aN*Aiga1@oo zqoM7CmaDux!J#A~6!D}KPKbeWJ_BG%7$GHr5UVZ+Ul#VYlIF3X_C$Zt`-w)-62c#6 z4p`x3Qk#@N2RCdUgM@98xCD?YP$7FI;LGzeJcd0K zzAk;J=@s1J7`#3+SO!M$tgwa(Dg_&%@XY(CQo0J0SbRMJfu{J^Fg9uG$@)Q~ExFgr ziU$%XkzNnKyL^Hh7k{kvUJxUan`&=w+$0^FOO<;ytM1yCyn+rzsVec_L*tz z2AS62ceb62|J)5Mae_ZYW_`@4bAiWtndjKv^^ME;feCnpF|eb@25(AB@E*7yj5|pf zR|eHx)OX-|j}ZlED|a!02Nvi2Do106Nc}7TJ|&I$LViKnK=HE$;zMy?>LxCUowlO{ zZ8eHj^{5huq6nLcwM2eY)3OWhQ`AZ^7ziB1N+UWwT2o`N1x+$zbtS%IeCXl&ZS@9c zX)XLl<2^WysNN_`PZ%_&Hp5qN8s6blWxzA4K6hL^#~RfE5cs6X(6fKx(z*YQA_Yu@MgC91MC|99Q?sP z(xWBB{cjOz}j)u@t4I_TZ29Atf6$0D#0*3+GgxathpF znEm;si8-U^UU1bMILA1p^3rdNPRx@8Gv)}z)t`Ml)BFULK;}%-Z9Sl)^xWko{=j9J zK>zRFM~V2v_+L2UOjM%DWNB$TKFw37zX+`i5TBM>L!i{pXf>&o3TJfs5Nef@yP}_E zJrtgN^y|dY_)a)ve!(-HeN^O$)-@7oSmyrbH)ouqBXybjkBz{ID^(u)J(wV9}tcUy2|3bh_Tkth} zw&?m#4k7AGH0?})qcEmCD%xN<>3i2!}EUPgE+H@job}qn)eR z87$8)?0Yyyo>T!|j73s0@H1lI=f%M1#=u)*;Qt&0|5*(D&KUTb82IBc@E2p?)UOqz z&mb^XF*sLM#o)YSUkpAv2Hp?@x8`FUw2tO!>xt&Hvfy44PdzW6F>~4_-o{D(+R_a(cPWiPP;1fq&=_T$hY7U6)s>|?nfdHBh7*8yrL(n zVe#SdtW_lnHApMBlX8?>;NC<*ibr<(3i_K5Wf^4^7E|(=xN3ykXI<b8C4exz!NQhuoj9@_z4!AbDk;x4hwFdnNerLhvo1b#-#tV1-H+-j?$AE z)7xiVk63V<4wvcmMHJ7~7Tm`36fM%2-mdo^3r?A3@GQ|HGg`iVKg>Qed(KL4pN);s z6A#O=%dfNGcKT~#;5S-uyWc;s;Px5YS?mlvtk*tc`=$lA>%G;2+h@9OT5$VJZm4x8 zN}EALH{XKW<^SA*+vzV>6OQ0%r(b2k?Rrn)WR8dJveW;}g4^`D&w|_Z`HX1u`_tz{ z3vQP`)q>mfxmCm2Jk5GUFY&7gT$3?zk5vwrYKCq#)>-DqE%<3M@bhEf^J3uF#lTm_ zz<&_~zgxpidq2g-;#n7goAy3nm1DQ}aSLv@_r*v#9IJeS2;7wahEVr*|fF3h8K3+>UWxsLEZ;(4{)&SJqaCr!zVY?GoJSc$)<9Im|pMcsIgE^fLwar`Co=l@@`5>~bsoOYwDgz82iqQPKV?|7@0g`h(~t7W zexmi;@9ghPx9@w}j|y`sMwx911B)f?oDau>2f?C#9?r3cpE#e&@2q~44_6}QXoeGowa;lLg7 zFUn<)?H&@w1A5&&c86~-NA_O*W2LXJxMur!s!vYLvp$7hG_{q=op|4d|LQleGZlP=??opW=H|IR9+rPha zj`5RX=w?2nWR071O#c0yb4KVnV}IuyBc8ST)1Y5;ehpt*U)aunggJ+NVb3|?cv164 zIOE7qq^-n%KGC`6ii?}(UA}PiXnN2suqCZ2?)&tl+I_br-Kh7jtiO(b@OKEj`CwsR zj>+R{=SN*ws+V(C@Jr{GZE7Bj&(Fb+K;6JUBQz`TfXh8_Kp$al_(&~7tb{ZoqWY5u zVYbN(5LX!Kz6}cxOXm(r!zUw7iPPHuMfUo}i`VDcWFyb>00_u)J8X6O?%Q#A^Cnngc{wcI!UvwEH8G(4Sh>_S}E&Ez`ipRpJx*U0DF`vX>VFqLr8Iwu<$yqi} zDrD2O%T|SHc&3XICXuXc4-WL{YH%sOhRuK*#3m9C#=pO*YQY=arT&!oaqRxJSl4LE z%xS+7XdnO!Dx02~%-WYp>qxGthD=V| z3%VCU2-SMA;@S!OmF~@0f1rdJC}9!erL^ZHDVZZzLH|Q-UlPC_8t=(fqXchNKO0%* zR%4JH<&K+OHP=~Iiqs4#GMAXNBtQq6Ga=eCsTV77ET)4ud5V5u0WD0*DduI!5|?yL&B` zehia14h69{gjeXj24Y4LwXyw=PTO|y0jUe3Ah%9-%{mHh$Nw&} zQ^c}}QKrplG9_FwD`&YR)};6mmjPpN4WC;^GinqVPEo30|QP%8=7I=&o&YzNY3FnEKn37G{aRWZ;K^BpsAr(obtu9_R1CJg|7 zd)?P+elt8#z&b%Egb61=lqYqg2C?}vjkkC-I8O_na<*=SBvV7wbY$?FCN4_MSwbBEm1*od@x4qKI^Fd;4EcHqKyUxS zr5&g0;!NrlXBm%o*~Sqf)#x5b(g>{y2PGF(xe9K~cnPlvK_(VEp;%b30O>MwQ-WQK zE~!J!c2WVlC=#Z+r=XKn@;A_0g)HF-cLH=A;4HmD`mw2b})c{7`Vu4XXy8fK{s z*mq$@OCI-{btF2(9tMH5NTRl31!8yuGlsNCe8LsLD?(5nO-LYt!d)9&v?~;YYOD>F zTvc?F)e3qvSLR`lStw$kZ^j_Kcw$ zldVjYNL1nfjq)v#Xhu1S3D*v4J>cS@E0W6xbd>m|%k{;|kKyx8^j zWAb;}Kzuj&8!&Y$#oBNDjV#m&*?zK;$#2?U2N>&*KDB!PxhI`S8X1e_pQrOj%Z;Xu z(}|e;Uy2kE&ClOa+A+&UeWtfkXJB`d2GRCYClKvBfD*Ha7@mJqAK~9<{o#wq7pB{H zok%fEh+qF6<~SGt%8%0Zij2Z{o=+3LLc>Ky>F*^4r_>sVk7E8W__mlnpE^KWhhk)A z9pKTi2~Z*%13w>dmeYw(J|Z*m`E~p+R?fEom-M;=MOFg#y_ocg0wv9*iHk3p&q%U} zltjy*`ImoX&deG4ut|2}0y7}XtY^-&0-K_OEc2V@F{aTRV+~{(2HEM%YvpAEm?si* z4eAj~8 z_&;dD?Q*tRa6A14n#H5#H(PKU&!1axyZqNJxSjq4J&&?{8~$YrZsTLeL$b?XXQj8x zIaKSQqxg@Ffls#Jb~)d*;C8(a#lSzMmJuQYZT!!);C4B4W8nW{!EJmVwcvI+L-aU| z((`jM@Gr%{zhlAe^6#+VHa_2?z{bORDJKk{|C|=Q>(ui_$d8* zQUtz2|DF|rck17(qHx`>3{*Edw4kwkr^o2fPaHdTpM9sxtu0-DoqTE?I`*L0eq!&L z_8yk)r|dn`)R=Mm*}5GYptG>4c`D6q=^8jd#l{c&)ovDoAj)O3QG3no1|_UAw{C#E zZqi_@3J5Y9NW%-g>4O@c>*dx9JJcCfW!$$^Fg{tObG_XErvmY5m#T!;bt9lYhZ3Lv z@_T02`)hvBjOb_9o*6OFGP$!*@BvV-3+nGdktFIg+?Q4RuPk<5Wm)d2M0bj})Dc28 zCP+hx{wFpN)g6{_2SbTbdN`E-P?!;8`l7~03`ozYsz@jABl07NJoez-Y*QtWt`(g> zLu$kRNOt+o_tvB(A~m-CbT=IC_{%_6v*E`nfYbgqs?MZdbgo@P9I7A99Ep332u9qO ztd|(O&b7bCi*)MUda-L&x3U(D1;A-zxG6bnPs7{fwd3*2t$s6oL~oLu3=X}vmoE-coP5Q{00t5kmQOocq4)Kb8$tm5SVCwi>E@!3e{vxnO@rk&f?rISy<)k5$q zXs2qP&9*-aqqns8mb3Ib=%4<0Wm6Anyf#^Qb)Z<_RRpbU>KTpJg9T`9${zU;(Ng^R zpP-FGYpX_UeLDFhf|LbQfL1msJT;6eHhOV6kBz_udGF2tPU2YW5L62Xv!EPk2s0EA z;~U+iRxe5gR@>0K8$l~jjBbiSTu>~V+Wd8rE0cOa+F{7`K=#PZ#4EUzY>E01HgSWq z^d|Cnva@eJIDY=yK%(uZfYdy0&KQfbWH5^~MHw*X=y8^EqA=-IQC+I2>!m2e)*Hyy zINI#b)?Ht}QiVGJOT&i_T`}X^y5M*r4C1vti8-zA*GXWR?EJW;zK7b8 zF0O|%si$-gJzCI15Q|Sq4}BK+V~DHDImFes^})x{Xp|cKoDKAP`U#G%c{YWEA7HdH z`5%!@vDH14O#y?RsYa;Z=YS&s=QB)w^t1h>-KVkr{29|sST?YAP?l<}%+OKG2UGzx zo^U+3@{j1cvQ%d> z{lw|QO#c1Vg&E&-|I_$khJOssQTz=&`pI;EPhA-6`&;O?xW%(|TOz{%8-@Sn_#b^v z0iYP1Ixm)UyUrl84&P_Tq;J*fr)z?W%wt})Neb68csZL=uMou>dKEE0!UycnGI#!Av5L(Md+r&t+mf(e!^+V1W<8cT>)xnl4Ol z!z*=qvq#lG6Lk@|>4#YnxS=;&XKh9Ez5!$QqP3$(?el$(9y4hI2Zf*Bi}u~0hGVYv zXOyv#G?v9m&Q12Xh%w{4*h3*SmIFhj0ZoU&M;P{k>!lI2SaSOwgik?#*dv4>5>;u& zJEJ`9mtyC6Mg=~xOFaWS7~JoG&kMg4)`SJ&{#kwQ-9Px+ z0k8exn!6TY+2`(rmD2`gpUfaqUGKnxdCls>S($V1Od+ZYYoi~94hH?2RHvAZ9!Ou!hy8_sNK-UalrONFu4fJ|x) z@b2RI>j-CA1-jqOeSL&Dr+Ta#HDD_avl|4z;!$Ha&nEd&-oV;M-0mp%LkJ?KPEu() zr}wzr1Sh-Q>aAiC!UJR+Est{A>7S($kp>VId3g!?gvH|sl1H&z(shg5nQf~25)|vS zGZmcN2rk%>rJit>Un|JTfhjVoTnaBBiGqlnZUHgFqOpA!O2LNE^|qx|v6o1(wBo47 zR=Ec*yqeCIvr~l(j(f|opfAaKV_?NS48EEOD2#LsdZ&Roj%}NW#YVwh8K(sEFhucQ zWkWfL+kF6{(yo@Y2)R56f#g~*tSV1z`w7bc38ajt1$lVhu}RSOKDT_dz(B*G^3YD7 zXxa1%-=t8E(=nDE=nr{b_1rKA>vHT45J0=saoX=;IyNEgk8xC(T{=5j;ih&uZSR2; zZth%gJc39ellKLf?A@?3GkWGpy{c}pJiE2VxW)abjpVM8_gu2=ek(|(RY-%aWu!Q!fk_&?^fov=InE0C2N z{)$Y=Y@!M?Cs+ju_bRQ8gi(5lt9j6I)RM_?r}sPvIZO!2kWTHLaA|WGtZsh8MAb-y z@au;q7-WgYNqvuQ`>2~c4b6 z6!XGsRn{Gc@)u7s^`~>ChZ`J94{tu6eTeGE9IpFt5izIj%qaee#sHBh5fuRA&6r6KNY# zk@1Hd%8@++8|>b6ZeedW_r>0l6+D;>f!uW6L>HLDr80p;H z9`BL6>rgr(3RZ80$q%k%cs&Suh46jepYa>_FLHI=>D*O4>CLYQ91cl0znmVtmXWa- z<`2K2pvcvCyPIE=1iU5T!x96I?J^#Gq`d$EAp~ZZJON(GrnWmBhhx>tz8K}^2B%X) zop!2rg^eK_UuA={-fM_fegNix%mF>yD#*|n&yi4e&F~QRXg2lNMX%zI)8+~*LZHHZ zl+3p@#yju=1vH&xB!CiMX>I5nP_*mzV{##>NOuN7e;%V2(pp&} zx?XqQ7;&xJ`c8>+Z7mXHb5r4?_Nt!XU=a@&(n<+|z3D~`LGjAfpvp~z4w!!Sb`VBH zD)bA?Ybrf$7a{#}3o7*+v3Ej3$>c%}TZgxE&0B~MM8i>8oh+=ZAQew5%Nz2D$&$(q zqa(alr6Q^nwUI&!SQuK8ya7td2I?q*&qUO84w^8(d_r!~E2a%Z6<9)#yP5g`>Ra}@9=`)z#+kHzay9@# zCcyYuBbd`ya5bSY^{Pcs$7U_Ik?cZ>ypa#Neei+$N1#XIiGdVO2hJ?ZCLs#mbo`mv zx{HJ*v1mOnYe=u_*i2PJCO7%9a)i}91XZ<yghHvoc+#7(Sj~mdT~0bKXJG z+0>4vF`3k#7oT9d28_*_=^03ff#_>=4MYkiCN3vThd`gMRPwN9ZK#@rRTYfLfmhq` z7NXm_7A<@izb~wEo%Zu&$SkXpSFk%=$|T-n?%Lv-V61GufK?jk&Cv*&iwp;G zUqn%v@?L(!tEK_H!B3!KblTRT-CX!pcaz@@j|WFcXVa`5q^zaYAi5X_IuIXaGLVDq zlr}mLC`=Zu)fnH999Zq^<%2&liS-1|d-OV@^hKxre2hEL2SD$kOcHm<-`s|-6OIbjimb!Zi}*pFHEg0#+f+Fr*U-~D;h=`Mdev!Hy88aixU0&X z4o14lcvqDL|0zb#kmMPEKE^keli^x2y}tBCkRuUX1=3*N3r>JdDkh~BfiK3XkPxQD zR&%Fg#ejwU5|D}stTwy$vgHV;T~>I|x%^1)s{w@L#pHyJ<|tkITc*z)AyeB9a2BRE1fa#_^b>gj#Fgyh z(I09PZEXE-%J7o&&|uJ`0joz0+Y{xL4ESR&1ORSxDUZ)BgDl>GK4^NuNNaQsyaT$q zFG5r|J%gTE6kx&mrf^Rv<{_SWc2Gq*y{$4m80jJVMNV^Vz|gd(mj&;@NEve2!YWvR zZiG+>4o2IBCGbOumf#&=3;K%RKz{xXNtIyCpLK53*1|%471)k@DAl`nO&NXX7kW$eFTe{7YCR5 zqf9x%MB=RX5-&&O&re_MZe=kLXfNT2cH3Q))$)&f*uUTg)Vn-2#z^7;>3JyeOq|5R zBWvy~%tv3ZaC28k+!2CdkBt0=8C`q0<)*95Et!b&CZhBH38r|Dt*u$yv7_KcY(!4lDoMvN8o*V`k*l%L7GFb;@r11*eZDF zZ5%@*u&up?rx$VQ4w`VYfAZ(&ScijO&~4IB+K3z7hdyyPz3X~UxZaQ|*FQapgKMz3 zwBG6XCAs{Xcc_GLI{uSC{PAjMlSAriY`M4d6gHC#$2H~+Ib~Q<<>tntz%keZ2gcS| zU1MPqjze;}-*5%WoK%9&a~*e$=qe~rQ?D#KWLpy!N><{+|yTKxvbx=&kdj-=m*=Z||z2K5r#zXbCe8kCflAx#(P(GzHP6PchpND}yR60~O zp+Em1+NRQW%}qugV~}27;cbQq&rZ#;xVXWDYEL2v!_u zl0Z$nf=?qqN{>A|qI%4n9W7x({SZDzf4{^4HO%N8PbJ=`4J}_jpmAu$X+tah(vFfw zT3j1@>xQ9owYjyF)uzjNoC@EVeDyre!uWhh&$za0 zyKO~;{`&Q}Gp-eUf#+#`_(YvBd#;Q?Jm!q&XnZGJC*v!5MjB^B2B1I5TJ|#%KUn7e z=8rq$8l~$Wq1Y{~(%^3Zac5k!KA}?Fq7$rt0xSb2koeLqF61ghl%fpoDuA|0WWrM-Yzu zREdiGWxBuT85i3j_TKDNJR-Z)*T2cx7l)mF_GM)7XEnS<*JWhzI1TU7aFN0IJ_Y~F zHO&5)9s|E32L8<$_;oSx>to>m9RvSE3_OT|(`gIoQ?Bn7$Q%F|ZOaJn)NqmcfPWhB zVs!YNPJg?8DRThQ%UR#?m&(Vq`AswD8e4I7U?(02rd>Yg@-U{M!0i}=cEXEie6@Lg znAEaHFNkj#Z`{tZ!ia;a;O5!Wlqq}7w8A69ey_z}=lq$GWCadG#g@L{oKi}eJ#*F- zGeeJ?s$kV}s|m#n>Y0>8Oe9hqhYefq%z>+vR*hPiQQMENj|(OALH4^t^nS zo-Aw9|3LP)3T~Hg?r|`^O^3s^ASRr1fGKB`1-H|mX~FIEb1b->{#px8S!T-ru?4sB z?6TlC9bS%se}xkV9^%ib+LT{s*;U*8a29{yVR{=r(}LUeewvNJ!}K~EJmD2<_iCyc9x@=SmW!wq!MjeCdMBWQX#9cP@i&S>wXaeUSxa>?VPA%=F>!7x9 zIgdkCyKBDF@e_W#X4en!;dFcg_~8d#F0F8uAJ1R@kVho(-5k!f-!JtA6WDUl2zK@I zS86->j|lC2Dee7U(D*7csr2j`gNvNx>{6Gl_nN>%PLOQ*3)-T~^@lv*u72cU^;i|Z zNzHTr7bU^dcma%5oJ$qlQf^itJR)LTQvZX zzP@n-Ti<;WtBD4Tx|K=ofKeA#ISh1#P*_c=MB?hNi2?{jB|lQ<-3Q5m&`%p+Gu?Es zFx84}12uCM3*iX-U0>o5ir#P&&lxl~%GVc+B7NKMgve;qi$Xj#8X{@h5%Xk&stvJJ zct!yH%@%2QK2xZPgO(5Y;?PO?yWv%Mb)io8F|I?x zI42BnGI4oHN9mcOp!ksL6mE)a`1Dk$DHeZ+d?kfDo|U929{%LlGXB70_LOltg)NbK zRj$3ao88;|aXJN)zr|FnKMno{T!Syxlw!b%QF^W7Y6#m;{xtbb`|AMHB*M4+GhG+D zzdD5<7DEcfN9*E}q!_79{{7V{^y)S423;Z7DWpNP{ao)9tG`pP8Gn!W_7lb5erJDY zy1%DRf$gDA!8}IxP!CJE87CrpbfUk7o$awG%am>E<|o&3#o&!G@C#z#vtr$H4E7fhWx3@6yB-bLY@IAeVybJ~;t1E;TT-xkr-xCG>*5xynqZ zx0llKt%Q+?-atp@XaZfQO23;J8*`fH&%fm2X6&|!QqklW1N%$S(nR8`@>i|9$^T|e zP8|&&l9Rk-;GC=Z5Ka+d;P(@Vhj4Cd44k?cKGF35N3&)${lNt2^!8rq7z=Kf|9J~; zr~jxPw0zC}H~4(og4_5{w%~R-msoI{4htd%C>Mr*F}jP8eM?O6@_^-#zVFYEBxf)9?MBr6n(B5_N)y+OyCbp|KFPYyT z#g}5!^hQm$Q92=clq?XPJLA?)H|l)Rk7!-&N0zCFRG55k^T(~7R_T)5utfF6;BUZj zYbSGw%dC;uev-uGH}E>Ztf7Hl>gm>>`@44fRIx%)W)vK^b~5?*ckR@oJId%uDCgMr zX#3;VPD?faG-^7Sk0|~I9{psxzvtSC_5Cf@LX`9Nxr-TZBLI(%HP(4j3|y~0%z6MP z33|y;d?5kov@pPyx$(pDIiC4&YGB`(IVepa9>VQ4KqY~AqH|Ewl~-Po_mFJ)cYwA_ zO&;oR&8Sgh$H240n3|e>)`PX^^)>6S;~)H`9*lQP`s&YxB1gv zE1FJrQ!g%tO*3opRb1Mdx3wKA8sj38H2fSEwM2!%MuW65^=GGTV!rVe6Z|nWXGG&+ zZ_dU;+m=rLrD)^71GMbMzYFPXHJ)ZpC8RdYS%mIWLyK>qJeB69q(B)c@TS<9$F~35 zKrq|>w$uJ!sDZjkF`-JK=bGwBgK?w*tgmQM8WIA=xNZ{WN16_xZ&6CX#`B}j@*kqf zEM$_XJE3G!Zavc8a|rWXDpHzu^&S6;bO@CF(TV=ZV_ajff4ku%D3sTwtDke)Z$lOu*uqycbgSj)vj$$cIRrAB^?}qh9QB8M z)ZE8`3yxBDt?QOF!s`aVc#Vk#c)wNnLoT;;(yUhBY-!q#fi}RoZa7Ds8S!1O3=|j5 z8!!?+;g$?=Q!sKHu;4KCKQa~=wKD&@S!N|!KW!}x>n?x-S~=oG{-;#?i1ujEmHt3G z7K5yoS+B9FMf-U-=O82_&m|FRTgg24R|9JT~ci9Wd)MTkpvSMa(d zpaCJr6C?qNUFNjCNjpnW5e8Y1E8+(xG@olwZbe+8b88fN%&Cdq^iEkWV9PGfb0%MgJ zPIcPOLe<1j20#UERmnqns-A%NuvCU^yM^PVw7&!<)Q~*+%U3l{`yeR`M$kr#kYPE< z_kic4A)e(dp@cTVKneDlya^_UArM2O;SdORxir;%Sa`jNsV=Pym=$D!O5UP3#VMB} z!L8c18Ilh*7(~?=^P4E|79}B-K@ie{m0eT3vaiF@H^n9@no2}NvWb;&@CCNXNEjS6 zKm-&W~W6n<5V;iGn9?Pr0}G&wEN;|95rSg(lsf-@?GC)K zCyIamP2o4D`$yPQa+uhAN;BRn0gsL~fW#)c82k${>CcIQC#+3hxc|(E!}60muzQy0#a z8bL=Z!v1#@1E<0R8x;W~s5HPzyG!7cg^PY0^OI;D%u4g3Shz&%q%DnWKXT)R%BAJcWD~urrupLmaDr_ z`OPi#4+G(=4Lh6NZu7&taI~Dk(k|;S;&nfSsc_*C&%c`c@6RGY)NXVSj8=_nF!Ysy zC0d;h*ThcFJK&GoLtmbGth#}dJT9vStn&U1#Q}s+~SVAv1+NbR<;La7=J7l z+lD6K)T-iT07IL(U#8VBik+}y+WN&^Vvq_v5g@pRMEssmhUK5 zE%|f0|9Ky9xAab9)P&szY`V5!JG(I?O_uj^oc8hp(tvRUOAqM@HwXv8-7Q)n4S183Npq;nTuQTfKLZ5--f&+dy1;7jxPAnqu>g7 z4?&0#*Q*92bd$(PGr6X-{Q;-_`w)4c4^#k1*^V1>gAl9(a*M^(5{MzTm5wZoOA72Q z$_0+HggVo> z>kFi@wYy#od{j6q^u58{2#plph;sFF59+0c;(Qmh z!blA+Mf&9C+|*=nwBEl$P{8d+9vw2&CKd$WEwxSur*7$~;+|yS<>O{1uBJ}{A3AaD zT8RJ@$Mhrf42c`(2j^>cQ#!+@z-P<$U;$0)$U!(U4V@Ib$@_wfs0E<%1zZ|(CvpA` zcgK*)?1d$lRG?;a z+D9`jJRm$5N;XbN$~~^~22(II1%ehvlj`;SU?9pTE4#r9TwHKJgF|jEuD~9_8i`sd zZh2QQMfD31elNl~&TjnT>>ycE^ot|DhJ%-dOwkdzGWa5O4U}sp+8hL~u@gkCPTRSf zjAUM?<4X{TW||ShRglN9woEk1b-2+CtgApSs`w18TC%$0HkE|xjf?oiK{FJHWl|3{u3Z`>> z{+B4OwEA=|(h)^;>R}a(M-BM7S310hxe0>~?+f8=V%{vKJqUDoDt6Pg zgG^wi52+4MXheeQr`&wepK&_8N&0?AHB#M-B+64YP4RSrQT@vRL1^_Dw? z?`{4#9bUPve^OYY`og;GCr*b~%S$tO_E(2DUDvhNwMVt9V6KEl6I{KFTKFHHB3sKYbktrGZ0#~Pb>TnwCiQY`%$G4QD|@XKQ0 zSH-}uj)AX;fs5`?D|rfZhlN_f_$#ZlXbIyl&6_`~rhn3~+|cB8j*1BtzF@ur#Up;q z1`H+Zr%p2(#h0xkyx4-;e0I=_o!;Qz;hbEq1f-<=lRE`N{~e8k6w^W>Wk;Z%E@ za=vK6ZCzuV1-ETmZ?NEYd+)R0_Ps=IQTVW48-6`DK70tb%fHov+vTsZ;C4B7oF($L zY1cUDJ@~MEyPT&ixJ{oOG4OwdE`txtvC|)+1$-1fHU|Ep1-J3}Eq~yN;#tbdiooYt za2uZ=$G{I~rxqz^tOchCHFUetg4=jjvJgD1hPaxCiuy64sNXwX?3l6pu8X}zw~cky zNySPRI|Zs(>?mJl40#5S4Onlc}L?o{?l&j%W$=Jzgzu#>R~)M!u1=fj=)cNrc3kGo7SW%$zp5(^G`C(@Nn z#wXtr4X=GFi}Y@oBqdK#UWQt?!1kee1u}Y#;%|u81gVcN@4=uUpuxDEiFCB&0Vwt8V5LI6ojFkz-|jVoI&EL z39(Z?j{%u(?M*rz3o%6K4(@L9h1#OJUOgNk-;5XV*^FJUq$qt-cKfB9+`cu~V>bN} zJL;y^{J0VUR;=228fTE6(;)C=l@)H}^v=@mJ51DmItpGm^0qqe}w zzku5=(p0~I&iB}C>My8hlFp29_9r`S>(LB1H)SdO+KDmB6h!CwEo7E#i!WO0rfy>A zIBm2nOQ+sjQV%*UMG1tWFmW^sjklPP(dUzx(wV(gQ9H6s?uw;nYLBKho!R7lx-{a0 z62zWvDiq3yOa9ElDmbBp_bcd5?(1n9x(&D+6T;>OOPxGrW8Q)U=!q{m8jvX4kr-pa zucDb^EO$6MF5h0VTGQv*))X)k#?$QtLj9Ur+*S_7X8qY!NvHixQ+B&hEY(gHZaOWK z+OhZ)Hz%BrT7<84Eg5ec{batYXeyU``?<)3dfwos#ua-yx41=E8!XGAR`d9T*75L$ z+0H;rZmzKfBjFYplDN4$g?But1yseY@SV;$&yBaMp^<7{?R1QhToDGO%(} zR)ghM!934R!nvurn+zFKvKU1J1vpk#tdYA@hQD`_zV(^&`FldHH05&8w9zjSzCl|) z0NsFZB~VzA?{dE&p%8m0`F^@}aUwxq$&D)~`r~JyXqLfx{PDdekTx;NO;Kn<>~Z|( z7UL&4e>hq=WvQmgML<2fp&^%D2Ve`DaXZt25l?izAyr7P()lx=hKINMi|W5zKkWgQ zyb(zuKcN!5m%Nbi+Fg98#8ec?Pp6HprZK*jT$s*H0kwUm73(ZzK?ddqGyIVHHWX)= z74k-Uc@K73mm-_kj|opHobDu*6k22+gOAg;To8e`*k`3O&0#k&5oCavtP(Hu1k9?a z3Us~FL!I^um^z7DzHhk6KWwX_vVO&GG;1T7Jhij=xuA*l`O}lQ8Xx>zG*`kinH=P( zbVha+n!J&x9eJJ!)=Pev`<(!#6~!n;hSTv${1Ux~t{)=P6M30VZEWsge6RtcZWl9 z6Qmgn80Rt;gdK&r6r*j20kPoApuQf%*0@z2@e;-~hi*D|5tc35%W`sUFbs>YFwYbj z>p)K>en$(G!aUD{mxAX}U;Vx4$V9Nc*D4{arG*|MFROxf-NhXPi&5<055ItgtVAI) zaR+ly28g9Q$+S@t3*AS6#5T)F*MeDs@!)zC9j{BP!aHLRm*b*R?xUY^@SsVp2P_-p z59}yiu68pYQr(%*gap)2bblVFJL}Q*Un9r^c(_dFwzG^s@ED!a(fCfd-ZJu)JP+%= zhxu(jF%1e7x!0D+A+P!zrVV(TeSV!O5Hea-Pljj{wJA>)nBLi=jV8D zKgDQezc=5R?jKQiX2x43@Q;o)wk=LaHZdlBoQ~|$nDldF;C>AJhcR%`k?GBMsItm$ z$c^P3A=73qxOn!o8DE)q;EVzy5P)j#ur>~BI zueacKy~k;R5pCDC7TiwXX~FG!|6;-Ieyr7Up5@y*x|tT-F254#_^=G-F%KEx0*9zXk8*-kW9jH;Q(DBaGeOW9VsR_m_8{ z^s?Kvb%5)C6_;yDf594H9)g?hF#f~N4SCbm+o^Xl7Xe{|SHVgaBETy=Ec1}JlA4%f z`RQlMaLJ`%6jI>aTe363R2l){C(N<1r@5Q#tW2z0yO0;w1V}xJscU(vt8Uq}Zh`yh zS7AidhSW}54t>cKqj)W`5)R&tVWQJMojNq{^~^Zfh~VN56QM;Od~waawwx~R+wTN7qU92I zsi}djK2=o#gv+DaAQzpbwL!9%%quZYE0=3&Fw6+f^2dMP^`{^nEjBC4+KP_ZWtW6M&d*) z5ftTVEs^$zAD(VqFG%?G^S`WWl_2saxQV@=`i%e>>EwNCifCq$*N6GTD!8)`Nx;2y zc^K$K-^;@Wv0L5yt8BeP_-+8`eQ2537O+J0MK^C1EhL-PP4F)q4fY)(*VAe>R~sEn z-bAjBqXbRBAly~&-PaAQ(JnCyT&BnYda*6S`w}>h%Aba+xssF~<6PQ+2;~fEQU6qu zBQ)j-6QHxWx7QJZ7@}mM({UhaNi=vh4Hm1)WC3}WO1+cOB7b~0)F0Txe_mrqQ(s9> zNAo-DTVGAei-ww8g*0r!!mPK8ra5zkIJkTW^f+9RJ_D0kjBHibHS2Bx)V{8WgiCdk zA)%lfdNG3*N9}zoxp_^!s+2egOHpNA0EC%ssc06&ei6NG1{uknydS+?%)SRPYV;+* z_1xt05};!FELa``Op#f$d}p}}`9pp;Mo=^@<8PpB+zLWt0nmeS3ZI$HDIGePk$R$=(!DEtN8~M#j1}BTw zfp*@hSK)VWXnK9a!DT=f@^cEtE20P)B57#`nop+)I$1HKT!(F4w4t1aHcvNwH24d0 zQT1cn4Lj{Gu&n%DamX4|EculEN~Xo|TU3tAmvT?~B{FNgu;a~xwBJ}JBBo7`?9l*P zBim_fl7_$UbbO6p!odw&u3BYQ9u9BfYsoit?H0p32u3k0M*=4sOeHcB$io=ZcPO63 zNPx*@I1++4nI*!o;P7q|R(k(xC>%g>r(-QKrh%ZDK@`t=Z@@fmkk(^S<12bT7^w|v zIwojDW}$Cve}9@$NV7&^71frjh_JPRTP**s_6mcwttTdMgu;jN82R)wx|B5+J6uIe*rm4w<+Cv zAH+Lk4y-44WV~C28-&=we9hmS6DgEOabh(6CITcwCEH_SWJj?ArjwjvKgb;AHJ#8E zlHThZ)^P17dd1Y!%{#QjPX@b0cf~0Oxr56vmQ8Qgbe`pp929JYF_+ZN>kyT!24WIY z493h#swvI@&GE+z>mcT+sVMDIC4U8;&daSTerfRyDN>;2(2n^g`KteO5Ax`010Rt>E5C=}Z zPTLz&i3)a^zg-O;5y9H@Y%meI)BcpQe8)h(n<>uls|m^hBoLd_hZ|w`NLkn;Yr`HH z5G;}!4K36tEk+J7MA+kDcYaoSOJ_2yMK7-ftYzl=pj>+28p5Gk@y`gb6R%UW@7ONj zrc2r9b(GLFuky6Kb>5aF<8~|?h@)b8KBPKEp^>71{FSk2{f^Tyc2aqTryLT45BFpk zDhc5nd{*E;pEw=kYW7W$NB2hfCQiq=xB26Aj3)o2uqO4z;BUZjI>wE3?v2N^lkLZ* zu3!7>03%(ZPnq6N?yrvVG;2RT@Ch;SDKYR%V&HN1cFSVYi!MIx6>cX&cG9euZe*V zXJd+_pBMwLl+?v_gky{82v02TXKd`)ntj$0uC@kro#2tTN2`n2qdkrHxCRIVvKCl| zEdwy8|) zXLNp;q2=T>8J1|uRL3Ot5Y}85>$TVMYYygSt(~xLL#Arjv*|LVcoeO0sSS&lWWSel zXRm#flm%=hwdaqJ0<$g3Om0}!-5eCap%UYCrBWAV zjbRWvp@bH5FhQUV%)Lb3YrIjHb%V4e$DV@eSPzqRZ7HR41B-vp7|!w5B{Z@3QDK|* zFXU1FlkTy!IJ}{P_?94lP8AgzrG+4tS#l@S(fO4>{6b@&mKoRF31hseP6s2Vz>Hyq zPG^^gmYVcvIlj|8k4W<>s9%MfQV-t63A5nVjc!$T1sG=*^dQ)GKAkRs5;(OM+az30 zy&R$-oBF_M>y(`7X%BZa#y+nYDH|p?g=>y9iJO6;nNEGMPxFlpPHNXWr0u|2~yKLOE{>eg=ccwp58PmZeZaZ3s)T%gO%+7!+6-GtcERMeQ zo`VKMeCusHKeV?Cb;4&DeF>Dw(ik*eibu&Cp(v4iP~0f*ir*66hGv5XPCNbZO8b?u zXR4j-+jIuoep^{CRK33OVX`u6LLhV)Nzt-fYE#Wm-M~@NG@kD3 zK4+Eh4=G2}WW-p`>ufblp2TlAJ`6*%w^6XPXB;|Q)gU;hZs0hh$=?T1rZ zX6A;$!u1{K;WK684X^bbbeV_m;8-AzIYSf7m@hUQ1Qq*ZC|eh$>~wP&zB#Z)>n;@a z6bCdN-?bgeLZ5YcrG6`fD27iJ;+?b~jqi}yOS9fzQ2at^adQhi84eT~H@wv7Gcu{g z2>Q7hJvq@IgS0?L&%q{T4&w}?QTzQ%8ihpgJ=mic*;tYuL$%u z?5rW+2UMoLO*Pqv(L4}Q)bov5)qQ>@9Kz6RN3;nI_&zoH>ef_mb#}6x6+B zu&{$rTQW`ESoQf9ek_ba8@6B7PWxw(2z|sdjC>H=&ON(|qYE(6W^>Hy5ll-nlt!*r z7>z2xXap)tr(SgYIZ~?#QE072DiJeSB%&EUGZ}Rub=H4DO=k4qcCbHW0K_vB?bZPA zx6DNyX22CL2%+o?e~9H6`r63aZ1sCor$Hfo9I7CRGRbbYb^HeSEu6fC2FK@H=WJ)% zGL?x9&1{)UC!M>DJdQnV+XTK7QM3XarKT1Zh^a+H(fCYiCxqP|9l=A2&tJ|_YzGJDPr<`bB?5v&f!ufoq7SnD(Uz?ARLD2xl-uad=X3D zi*`TFMw2j=vG;Kplulwzql88YMczxh?X4bB^Rl-_OZDO8&*g$%OK`Y_>xqIn9lc9g z>$KPPqHeCgN@Svv%);DgrNWEe7dC2nk)L5<4k_ybZ3~Gb1hE|7&E4QHiAWcAUx)@v zP5A++$3svJwWs!pkn!gxgVE6Fh0YbQdeO&#;*sE=L~TgnC48t^O8mZl1T1CzzB)_K z#R8|l?^}dNKSf?B*&EuKlAWZzG9%^M`5WUD>gZBg#0TdC$BF(BEz+_rkXD__O!XZj z(t;7vDcPkk!d`&xn8h;u@w?b+%Zl?3QI^~E#z@FB);+jz%vDwgBlkttJSdd?Ln(m8 zkGk*A0|Q8@&pPdG$Vu&TlJ4zy%SY!UrFC-gEB-|EdKh&Q^|W)_aEMi5ec%tB>{|*w zn1OBs8N`V7X>oEPJE z{_V>OH)t-Erm)}AIr>=&jomT1D6SEHG=fr3F8-MEVrQj!hpB%8D=CMmG!Hk@8b%_t zkk}r)@E0Pf_%WShp9=dF;mKjWNa-&ssX!9do{(jOn}z6&iZ$}3u*Z45Ac^}Yc@yP_ zBrzo!-Yz=SlxLCz=gE6(@Duqr|_0gl>{@p>q&8}Pu9?tLvs&DXz&n3 z1kx=;y1cPCF_%s>y|hsX5DIBZ=-^h#DLZUKFm;sR&p0>{{0AbY$KLg?0vg6X`Cq8q z_<#1v?3qNJ{7oc;Ci*)+EcJ&#vdKZ2EHH$eoYMgM=|jKh=H$;fy)_$R^AqzK`2C&=P)On7Yx}H%cV+oR;k_~N<1D*n zyPSnFaQkk)ojzfmdDv$R=UZ_5Ou{}3;rKE1w9i5)^9=kRb`l=8%ZAU8onwDGoBQa| z^rh@1JcQfzu8e_iw%~TV-nQU2KEv2ac%t?Gw*|N3guP(FZG7Ih;CA^dNpxMlo&Nb4 z__v9)PH&gI@UYvM$2=U*C!WZ_b`c*1F=s+! z#@5#EtG`&o6RfjNDmHfGd7rQJQjql?DX<=6hwGm7u(=ZkJWsfr5WS%r zmRA{n%%4~yuak-yj-NS>3YxM?>di*rd?=N!-oWoL$Ds`+{KN9sTo-0`BV73EOybCb zKKJpamg{ZaF~|3XGSM&o8zRnQ6Tj>Y1Hwj!@UR@Q=+J#d`nhTa_!S*L>6aADFoE0cUPiDe zX(tL#HE*qXoTiE{(XD_>R8rF)eh6E=(5RU*B{V92?%!0kuo#w$xYlo|LaT9drZ}EWVzVn*(Ii+wG6%U_B}5A`ZqUiMu@KN; z5=jQ#b$4icdn|!5J$yFgkm}(t0-d5gd>US$1925xQWWoDddb+Y9|aoV4R%}KKT0}yc?}jG8GmMyO>B{N!|5_i_+YS}?-pAB;XQK#&T1CQULJyDrQ|WD z+om5$rj#}|UVah?Ltn+KkQ5<^mZ3(*Z-;;93u)sCGj}td)X<|-kkH}6p+q&4`zLTT zd9h^U7sXnK;G6Lp01aD#&w!f8gTK;jpE=4f;i?=TK&>P>RuoD93Kd-B zZ_^!|c%uEmCZU_MFjF02^-VC1=qY>eN;Yj4Gjn9uv0Eh5%XHW{B5Mw=5Q2(5; zt12^~%*LD?K$%&Po`O2o6EZ7f7B*vy4`90qN(8%%z86JrRqep0@C?J2iKd_%T9pDDNR-el*!NavV8K8_m@KmUe zSo`5ly*Jaz!jHYx0q$-7I31wLKPjwPeKGhOa1FjhapJq$|L3DXNVLE9!y`2ReAw)V z&3LN>^`c{q1U)VWzOTLurp1)ACNT9%1z`XgF^!G(z z!q=MY{WNp7>jA!0A!bc->h$y@F2C`eV#wCXt)ei(L%6Mz+ibz@^uN|}j32fR;}osH zj+Xyj3vQQxj|I2OzflX3X!*al;8foj-N`^~8u&214Yz#{*zl`k(%%#V|GfpL8pzaJ zVd?NVGaGm&2EHu@{xNK8`4E4*95)8uY{4lSOufr3xJ}PWEvTdYQWpb%B?dl-h2mj3 zc0Z1dfmbpy9;Rg;^N>l$?1L`q#M*tgPhO>I!8+@tVxx<~L3BF-%3o&IdszG!YygA` zs8Liv`NPhpzGVb8QMJa8!3J=j>wlro?dpZfWfnH$laIqCyGO8~|7^PY2?n^J`+|tu zf;5cb5VU9&i?7D^jUEfIgNDa~%%`Anl3R7!Z9y&WFY~5%9aFi`H&wcxggu(%`k4c< z!sTugXieq9a;n*c!Dj&%o)S-H1e8;^N<+G_<$&QDuG-3_=(Vz?WM*u$V7!R!mKe#( z4OyhZvKFi3bIOU(T(i}1z0OOPM2UAuM1jjRV{#a<3DyDxF@HbqQNtO zw^pE;)So~|xb*vpB!TCAP+pXH*v@3DyCr}v?TR;A9yNark)XC`|4nii^{9y#q7C|v zq$r{*c(m!nebp7fr6#pO3^66`^qaBl=A~xuHP>kTpjSkIlp!z&gav@O_E)Y2G!3A) zLwi*N{qe)7JiMJP=XMEd!(~;g@r$+tt@rQdR`RQ$HR%aFM#xUq*}7g| zSO<2{Ye09Ig;`9vb!X5im~?`3pcynu2+>kl`)6n@$R+TdTC)N1anZhY_zBm9sGFA* z89l1$RBE(vN1MX{)u3%gt)j zxTsxPLbVp?j)WC3Y;Hc4JAR=XHgu$zWMQ*ml67D&+ZC(rnyzWLP}K*XR#j2a#Tq<} zArMHm!JzBw8j%apIN$~H%9eAI+qza=-qyQl?F~Wcf_0*ZBLw!BR+dNtOM8|{DJ`kf zaWh*(wE(3I93qq}wZO8f7HOv5#p5Qp3#DT%;?!#VFt}76wFRx!V5P0W=AWGhrwBr6 zgd3qXBlqV}8RUH-Y(N^z7ed;f6uD@@IBZ`{2FJ+O8#rpOCxT<1z3!-LK|!#MQ8+>z z2r|KWINOuR&A-N6q{iPpJ6+u5CE3!f@JU`yjQ#NUz*)`FbCi8aNEb`)h}DnzbIwm)gHBo}or*$Mh!u{@UTJVuSIl)Q#i5g>8?vpG(Y2?Z%{^5(B>^1|GKu_hQmt9|Ko@ z0*ma;)kehZmSuBo`w0x~XbR0{;`i|VN(jw!Xc!Y-0p_+`+ssG~+n1o+21YyhJfc2i z|3u!zj3m!7n(?sYDcFnIdwjCINq?D@-rloMW&wEkVZ+y1aI(HB#|#d>KG=e{=|K}M zXNLv1%Q;vJPNui_yeGuKC&j?8h=KpYg4=uKbr#&Nx5t8$&rN%IWXXqk+U5Ma1-IMv zs0Fv_d6t&nEXPh?iQjzKSA1t4GQ~;zuty$~8a3u`Wv{`Q5-r8<@X7^Vy*&=^@#Zh_ zN|@i9An08Q^BZyZ$9ufk0p7_LBJ9Lp`N<2t-e0k2MvY_P+z*#|Z*i-;5E|lW@mp;! z&`#zhTyv3jor(vc?jZ0kt*>8u`X-r#eZZa>nIwS4I$TSg$`z_f$V}!kFIK{QQ;^st zsIX+YJ0huo2TPSpyvo?y6zi#rOSnsxFV7QuZ{?^>vf$FGr|!<=!YjE5y?~oua)B2Y zebpsi+1HDUZLjeT*TcnMa%eZH2CHzSqW^PjSmgdLwsM0T??4O){a)_I@HKD8A~B<4 zc)09>jb!psz$F>31>#gvlHwvR4z}=u*Ksq|AIQZvebWZFa&LiM#8lV22-n|y@VCyS z(BKU<#5WE@PYCT;ZR0KK9QtRT4*iQKs>?>R*blQ2L3ODCAqTq!DrsPII!JSUki-j9mURUh5kuA7NC8g!$ zG9*ZZ$j3);r?Q@1f%E$vWfT3TV|HV6^B3U7-LSfJqAuylhR57mR9sZO7B)B7aH|%X zJ9IC*xg!y?*7O;=eYM;RqRE23o@uVz$gMfALi!e+wvi?q9k&a=z`?t^;wL;NY>FT! z8?gZ`YLhbztfqExmkUjc#5Fk|FT`Tw3`tQ`3p1KFIYr`{z#a#BpZ+E}qJ$B@WO^Vi zUJ9Pc`g4*KykRMQt6SgK5hv{`nfE08ra9yx3;?L1c4H5d!)(N>K%fSxMZah{>*|hz zG6CNhcWdSdv#e>Z=+t7j@%SW5)Y4Z?3vsub3OZyjE*2@bc=37B7%c$uh`H%m2hiV)owu}sGx$!HJN^thgSrb%NJ{;irR9*N%K`E4g z;3F#vOELFnl$2b&R2L4WPc`1+bo^Kfqa0nlRE#JP8Ynjfvg|cC`Jzs%FYBVIxP6RU zyi5zV3~r#w-Cfrkf)Lu9@OEWx3PiNJzk3TptYGNH-q_V#(!3g+lxLD`wDW@_#Lk1$ z0Y(9YDX`l}#>ymLG8hJ5lK#{eA)BS8-cu0AhLD{glE`DtQNb@^7*I_2!?`(_*2@v` zGVkc)Rw7L?@S#*82$y^vl^-cY>-Z9uMoKuGg>P{xo?5(PVd~C*k@AkAWr)7KFVR&B zhGJ{;9m!xe%24A;i8x+8l}nteeboC5K`E4VORiM(QL7S80>%y`r{)gC=(R4}J%g)$ z;8O~A=}oy%%*kQfr$qk5+Ow=;Mu{e@9YN&8;f1nh@v9tM=;A^<7^+&wB7t+Q)DsF0 zG!E=5x94C3QcJ!LN|8b7jy~WwE(Il^2VV~3A3Vu#o}EZ8EKipFf9!n=eALyIeQ@Vw0e=VUV_T*LK~lYu(mv z+tuCL|AMPE0hDNqBG!s;e3B7Rv_8;^{J-CG@BPi0U*?7+YPT-EAIQv{-+i2W?&Eh} z_uMg~%NC)TD!|;CtpyYg{(5GMWGZTszePnt6Z@SXQTf%UD{8VCS927Q$eVLi%lHGy z=}JC_?}SJ71t0Z0CCcAtyf+sQX{5R$cP9jCtrKajlTTOV%8yi66xuo>#uRI zMi$?r_(vXxKbh~Ns4H^oEdl(aYmJ>d)B~U7fqzhEwmLlZ`*cPB>dF5L58T9!E1+94 z0(_pHM|4Z-`iY#nNClJI&Y7(|pOHLGlqonqPtBC~BM%p?bCTm-=pWOCcA|3o(>f>L z*{wTNey#I(&I8}s?yLOJ`6qbbUsiCfJNc^8EooiUKPtG^@!X~0T9@-9rTfwKzpmiA z{+%K6FcB?X|7R3j_bc$gTNPZltIwEm9f1v!^oGi>;h$8xB@O?&2Y#0a{s#}d*y`@t zU+%dMAMKx_&s<%k@@qQqE=;CqJ3=3CD^fInLZF3pY!il| zV>`62Vc0shCU(fCCi%2}D5oXU591V6kbdJ7#;54m2$uWa_AkNBeigHw*j+JdQg=mh zvT@DqnXr>TNnk1yK-<+eYBSC&?X-ErKB?~AgKn7IUk0DvUp6`OcUzdfadNtEvRoSh z?ovpL_($7jubEi)JR&uT4?h$()(^a6MOjOFoiPnB54QE9g3FDc|I5fPjP{0m;SmD$ zQ1cy}g#tQ%(T3ZMaz+BRgJ*6&9V$HQQZ8haRevt(v+rS-SDj?X(*;-|YYVB1peP=ao%@r`79Vr9JZRE#*Z z0KvB9@vb{SVtR7~^yYYSE+pfuDZ@B=@MS_DQ<;kp?h4ns;FLuAy=11eR5U1^RX4LGce!Y%cy{y`i5=a# z#{i}2$O|G{zabL7iBzm5x|sWjP$rcvw*DZ-F9ZhoaGa*rT`xn^Y(~O*j=;?bC}GBs zNSNBBTMxc=FEHZ>hYkKTu^xzr#deg&m%dl@Cl91PThV~NUvV*xD zw#8Eww*py9=>=vuspFxiRQgP)kT5NngJWgK(Prk@fq+dixMr+CWFeTP{KUF@B}X_= zq{}de1Kt>-RFf@gJx1YqSBF`MXo~AbCI%^&F2F8w0DI}rCOaB|9h!{Y^a4A?K8p;|XVy?4~9Hkz7HcR(GSp%Gd0Q+v< zbEmXjsw`l;T(4Ted|x^X&EigjT6eE*7C;2A^td5yC0R5^+@b{|xTDb> zsn20#hF3O9i&6Fhyrqb$V2!?D1Ba$>EUHOUd~SZKD^JJ3kazyP_%@Yyng8)?AtW8d~N^ z;8lTlcIa#*;iY&DDL3>PBsF&w;SLan4{9ZZP(-ihkv_a)d=1`EG2B~YCK_{>*y~c# zFG(NZi-^;$y;k8@9r`}45KY&U-?Ge-X1 zqa^Ho{<9JnltzJRkBF`{KCbb=IgfV*KC77tN%l5;2KZm7p6MR=#UA)KJ@9|@z<=R^ z_j=&J^T16UC#MrU`<%ad^WIk`6Q#+39^1?SRs z@Y_A`f3^#S^=O^g!wRl-K`CZL;)jOsZWkxvT1Pa|1E*&I6Z31`;I9;%^U>jdlHEL+ zU-$PG1=sz3LcujYyh@TOisxS3bS+%t!$=tpu61!=R&Y&+xgPkZl&(+XGr@ zX(n^?A%X8qteb7P#C?p(!QDQ`#a3TmARZGmjJ4v(Xa3gJ)=sDg?9jRo&cCnube?@n zrngf6nE7f+(7Uzx6lmNoD#C@nBE;1!OV&UPp%QHrFY~SC(KuW_+EP|c^%wYGcN)gt zRhiBvagGbhAW9>f*kPVz17nR_K^gOe!IY?%6HSol=%)8G7sPfl-;%fY*-|LYB+7<} zZcwcu_z|8jsG28Pp;$}BvXD@qZh@8q7lKg62cHiKfG64D1;@00fJ+Fmfrd2KNgS25M{?W~(@6@ix|1@xwv${B_O4i9fa;90#7Mjx&6`OPbVUk5 z=fU4Hpp?#q8Xa!g8M)A9I`Hs95PZ5$ zR~kPUC)&4dG?V9MEO9e=5|})!2D8IVQ#U~{9WaON#gNqu%7Pgxh|Bz;62pv+nIAHh z+$3p+J0|K3n2G&v?sy)OJ*Ilg-`pfKnz`F$0@))->!4`HEg~q>TnBeoEL<)ox-5m$ zvy&usV)WH!l9m6G%tBEzVd`$kxtgI> zHel4;q9UvgGN{7-YTPDN3_vQ()hI}kdO$5M50WIFQiS*{k$T6Ew7rA zb{*X?w);R9zpd&9JZ&__Y9d8I2P)rgdJmSi9D~%-HU_c4!dPnLM>tarQ{r{ z4aY>?gjqq@H;qEw_HVJB&{m0sZA}(127!}$m-6_vQ$^GMA^^8x?Iva>wI|oJ%tj#GWe>$`uQum+V-aN%&KSu{C}sJ<__Z(I@Y?89^p8-S4xy8~Z}G$oo>VfHPV@aHeu?m}Wz zN9@jOAz|V0eJl79F&?WA7t&lfGMdKh{*X-faU+m5j@Q7=Agt^k(vj>#q7DRZL*HAn zKN>-q3sD9w`*nfT@i~9KZ<7Cnj_;TO@tEf0BG=^DhSbteLB7#+y0ci)^hke zuusRg_OJeZLZXqL1#O}LjC7az2>)6YMfltIh50^A9Ut5MAar?@=c$`>$*s2p0MWI^ zJifD_DNp{hJn#!W@GcMhMi2Zp58RvuHNtmZoF*fX4^)!P_{yb+OjG`O6y68Kbb>0b zE~n4SSIp&9YqqLps5hfwwET z_Q(332mY)FUd9HI_@Q-qXDPU@zug00=7GPe;JW^ADxIC~?>{TJ){))sfq%?y=xj#U zBMv3DUmE@ePyS~;@H(ZN)4H>B6rArQH@@HXz?UhwrstkY2d8y*M<}?a!z>T{rwXp? zS>}Pi=z*t{?o8u(i-PO^KB(Xt&tm(c=D28hvx4h-&h)@LJn)|@xbE-c9{A4oeN23~ zFS_wMTESV=!7o*CU4H_3m^i2G)Ry1eJtoW?x~{Ns{P5#tHSH!%$)6_scMNuy=F?N@ zo+R`)5>M(86EsV_`>2?pS`fO8R8=LeM1=Di93&vxCVAX6Q#xvLrec?5N0<=J zOF1i=Z|7e`Ky7Cm@3;-uGzAmy~m-6>-_$P?p@(Awk>X9SH4X7h|?t?+* zc&L>gLfode{unSISGvCia$Y-XpTivqWqMKBJbY!s*G_zpu=HhtJQBYJ5;a`BpzEC2 zwT9v0TiYfCxb1Y|o={CQgZTji~@7;i?t@x8=_14}TE309lC()UtCJzSk&FNkEi7Fvh^rbL3HT-ILOfds?6(1u3VbE2^AR zAG%1FK?-P&S>)9 zBN?a$UbqIYkdPq%D3#@U)nt1G-4WDdxVU&Dk69YhIzJ`SFOL#J1{6%ztiV+TpDsHo zgA?f(x2eQtsv`|^O%VwE;nI)FG_x1X4Q zEp;1AH>pPM5BsO|i$P#ii!ucfw+i~jmf~`B&rap(ro8Ls^z@^~Pc!T(UymW`gAMxt z#MOfM;CdSNk+WHxe=(cUEjM7$7S034EtvFN`n+iuBZ!QqLoVvp5a+OW%7(*bC#^;+ zG95AhF`+F9bAy?;6l)#&;e4w#u7ki@Jj^iV!a0N$aYekV7B5$#7lfM*I$A9n9P0*t z{vxjD_K98hwqa7!@wpK;lK8?c*j0jat^MKL+hhxDUNRNbg5x=ZswcRuRbxlrLc0-4 z&ctrK3jg1LXW{3A%$VN>nflFk;y{m!9I*HFv#3lEY%HSUnJx-iR@Rz^(iYjKrZQtn zOu?&G@ExTzw$SY*&s`(eajN%5b~#+#;Fk_Rzq^sYsQG`+Afmm`j0S!W(K#P_FvL}Z zMXYhzoY{D@-4)cpqi~rh+2LQ_*cV@L6BruQk<3(loklEV8q0T8W+HZ#=A~tL2 z&l3J#O77-2ocnwoa>uqWLBj1zkWaHkK(ASHo42QVYciL-Qsw;^sX|_|x%X)HPH4oa zT83^DB>K>H`Rs0VOvJeJl^0;#`69=Nn~_J$)n@E5>?sUcbjg%NHI*yQC^&9m}$rx(5CR5KUd?l(34D7N`<>jQoMlD0nD z&HlQ{b5M4GO@7d=J^LB4Uo7G}1vi0Mq!MD%u~M)-%Dfg%D*K zchC3)*cGcDgDX%U32WYGYU%oT!lGIci z!rSeytHr(2|JQ|>zpj>n`h?*MF;n7QN8r}$>@MK*4FBsGX^8zrh8NE<(vBDB``_~7 zijfvxyloS_S}lJYn^iT_X|l3^!UMhn2Va%!#a=Sb0*H1&Wv8+Ii#!G?Wp@kuVCakGtNygJ56#^&4#tJz^~ z*g_*i0r^Y)u}(f4b}b(ui71Ir>WnEvav+&1&4<^9J=G1M&F4Ni%XK;cKUgORUZuiIxr?BtQ{&R0A)P7=&{wp(ur;2&LU>}I0} zeu4-76%Txl2fo+?|CtB=KOXo!9{BSf_?sTMIj3TbOL?|%V{jU13x^r}Qgr|&=f|Fx zb;RdRB2`awXI^ye`KI^5PN>w4SGSfE)qHDu0kix!>;m9>mutt_?3R1rpJGNNesB+R z`H%I$FI8}D1O0)5Yg_h%9{4BiqUK}W?w39AZz;HL_dgU|+ftwQz<07Qh-kYLJ@5+@ zT(^6jf@?b8>w&+b;JUwYZu&@3d?qNkZucw&*EaY09{4X5T(_&^JZt!CD!*>mXN%Y8 zXSg4^`Sai8JdxNhzC#>*wB6td*S6yt5Bv%R&#Pa-^*NkJJ@B14NJwl~=Rej1pP}HI z4&PI7J>OP%;4dk-Zg)Qt9Vv>>i3+aUy;8whrK9J6c;LTRaNX|f9{ApD42k&Yc8^hT zJ>M?$z`vv5y4_!S;EyOczq)?CuHd?!y}7v{5l?-7=_?A(Dd6f!d*HwJz~At|cjsUu zMd>q9!S#H&!UMlv!8M*wc;IsQuRyy8b1*Di&xf-;@c9a^+x>|LzDmLK#zn#T)zNt$ zE@mXsN5hX*aNX{C9(Y>8b-TY(a9z)H3eK+%pU+t4i1=uDi-PO=FH>+mj{oL?->2ZZ z{++qmAw}CgNWpcxXDPTI$7?@6kNCaJrDf9 z6B8<;m65pX|mwoNhgDyFk#|rDlH`E_8VM4>9o^yuv<7*p+ zdyl{t`>tY}P13N9advvJGzsX!->OF5bF%*!g$~zGYJkn;`4&jYsz!w zt!HR)u1%(YpX}XOoXpIsG6BJ0o}v-B_t{a=YxY>pR0#yelK?a+)5g3%f5aXVJx?lg zWCL`1`<5eSN1l%jY~7c|ul)&#M&)O9vSS581R<=)TdB;fPr%NMGeA6}fw)#KNVauu zf#Va-gxH(i>Dxm0it5m)UU#p!K*(Xorl>y$tmV?dewJx42(r<74 z3;+frQMIU!LE&;x7&H^(=M;lH@{0$~l+f|Rp+v6Ev;%thh_YRjEI!ii)43+|Tf?R3 zL#2Ut6mku@vrVK$Q~sFaQJyaaazJkhA19oAF{4Q(p>&q+O{5#fPh3b4=YN*apJP5b zcCYD6$BLQCiQxm8rFHj)IOk^R^!H7l;m*?OGH)?Utx5c~p<=MzDKWBHD)>wxakz(y zm7XYln6q?xerq4zER}{R#hPwKXKBaQws_|hIWIV1zGhDVd}!yEL@t8P7x&2X=DLXz zpU7x^TgKiHYJEAscUYaTlN}8a2I`@FI^UU=x87`JbH3|2pk=lqr}O-rh1+cQDcVu* z=@5u7R0$E`{*B@vK8So_zK?>= zm-2@`x8&B_CjqxpD6eOSdEkKuKEnh5x(EIp5Bw({_zDl)=xT+T&sWtFq!py0)-BTxg^vd(%B{1bK}vmPxoO;B)dp-yHx zUcq(!Z65gd6p51zwM^Wu;9Re6yfPm6QU%xTKB3@x+&3w>u75B4 z(jopDeuRSS`p;KzJ?>X1xUT2lJ@ES#T-X1$g6nbD@#l5@`zYPBhJRkcb^ZFBnI8Ac zRDNBL){$%Y%__gH|851>`4gZo6X$}RO7fe!iiTmFbE=zg$f4s!SuuU*Z%s@cR~)ko z4z?cjhpCI^;%gbcl9Kp324DGL=~VoIGwG18rR6@ZRR)h2noPQB-`c^d}Yl=j8!2aoTg$?o3lGlW2LyWI}87FANlbF zs1RSc*B}XPcNE|d6~ysJgY@-PG>S`8M4j!j`#0m0 z&k<*qm6=i|SLW0MW8K%w2)V}-84;_$g?F(puIjN>@Dt*8dYskrxZ%L(b$EmVb~HkA zqcOIdf_lrvzLzFLGNUNxr70@Z0;=pFhXtjHeZkV~BfH1E=!uF81%3uVBLq$ z^rLAW2s7u$!kLTw+as0J-XJTR3a6h?*GnQ*%Jpx1qyf$hx?~ALWf(P+_$`D%?-N1| zGj&8MX(l;oWsXQWvaAN4mfSfa5D2>PaL#K+Tcg!V!=XrST}vY@Iyhx`_9%bua8n2i z4@w|)7>Rm8iQJNq8D@GP63h|Gt}Q4ui*Yi=MRmSIqC2|-fqHVR&7+HKhNV>$%|iUv z;RnZIdo#t*1=BBAbhvcME4)3rG}k>LIEud1(LqR)zs;c6(Cm(aE=aOxAK>=(zp#m6 z`!f4j;Y}=+soDhE<%qWqKZZ_szOcd}8=UTLHev^90L4eLp;^LrR?QP6!9Wl%%Mtaz-4b-t)+6X8!>`hHgqH$^x z4Si>`w=$$kW>9-?cnYlE=nUf9&Q78eGcyt}A+1lPZ<6gyC=IHx{Tx+@0g1m40~^M4M~4C%8g{eYNfx`I!A~0Rf3n70FXULsDB1Tv zS%LJ^@9*7@gW=@C&B5^BLv|u=gRdVqJ3!t(7V98yk5uneD@6TSg@q67&D!d=%k95evp2~}f1X3i$?1Q6 z6GhY;Y9(qqas7?tO(c^m-%Y?R=D}V!nB`=Fx_a7X1<)RG>IRMGBD?rP#uj8G1+p=W zq(JSW#Llpxim|tH-^Zm`qm${iE_en4XY@Hu4dN(3_E>CQ6E!OlSL0~AI^0Ei=03wD zTvJLqrFmdMjOhDhmmpu5eQXEX3{e7dk+D{C@Q5x1@u*aaf)QFlovC(I0on%r1q0E) zK182Qt+TZX4G;uG`hx%bo#*71$bx#6n_f#99GY2x5JP(btUg<$8qLoTbZl(=^_5B%6$-C?yz5?cd>GfWK zvO|AO4 zZ6Zfvo&34Y8&d{(6A_=kus2b)kZ7n{mm$B25XKUw>){w{p~xpLZh`#eyonNO66L+i z2Hkhnn+WF-hN6P;y@}X;Q4k~qGG196~eK&&Ap~yOGruG zFGV*#vUHPv?acEp8QcNic(M1(@*kcb*R3CrhX*G%ZgX#_%pBRrDFzf2-4oy_IUV7f8=gm6r z?90xpNmRF-cg_W8Uo3g*4jf;HCJwsn>ld}1eGWd`E;XMs-8U3F`=GY-+S`f_nsIj9 z*+mDPbJ=A@2MP4NnbXd{^z4hyD>~@hOD?+Tyo-_L;!E1jI|vvYcv;)o=U!;gdcS`Y zsDLBO<*8GX{UJ0`56abde)XLRnpbNw26UiC;v8f<+|`*X&4)J*R6EC}K;mT5=>Ys- zog8_chFactCdieaqASIBhra{Y;Y$=JKI{9u$>I9R{&S(a@($hv80ivCeYXE2Jrh*C zU$jQ^JK7d3(gSG6oUZ&x&jd|B(6q;h+e}=f?0dBT9|J5pb^sMkJ(z!sias4dIP%kE zD)5*2J_=`o=-;l-1iAH=06e+s~-5bJ@CaI_|H6WUmPgD;tS!w)&uv& zfudwks2(|UWS#Q!4jmcTkWL*<8^R%@@WSz2OeRE{ibR9T5B#Ka=G~_>FmzRZ*r!1w zMooxBj524b3SHY|Z;JwY z>vppqc!k{r_*l0)%LD%>1=sEBJCnHQIDAU&Ce8Xa{9pyw?RI$Jzf^GDZoh()pK3o!Zp-18RzI5I0bt=DxKce8|=3KwFdf-P< z1VUoF8qanG*LaG^Wb_qrrZ6B2Y#J`>vkVfa5m+}YZrDNDLNkxS8(0#1s?c6D!6X< zJ_Xljw#Ksawp|T(XU2(-K4W*2%CF(~D7bDnMx>EgkEZj{9{5)kT-X1754=agb-Ox# zldk7Db`pvB@V({eKg$FExq|EZUsP~Cj-O#;NYQaTNx^lyKlQ->py0aQkJ**tU< z{Ezm)zpCK6-Cuj)Pb;`?cP}!cNYQaT-2?AXaNTa72mYFZ>vj)R@r*Q`FZ93{E4XfV zxd;B52Y!%>m!#{NqTm|OZUxu#yw3xFUBPwz`&z*`IzN*NuG_st!F4?^DmY2&=E+gJ z$uP<|vg;21?+UK-Kc?VB+2!9E-my%?lS|OSkMqE1D!9h~#|p0Lw$1||gL8RI(RL5> zz|U52-R^f3T;sn?!TG9j{d&&>Pgp^b_~`n-q~N+=Kk&epDY$NTlLvmlo}_}I1Gfr? z=NCNi?<%;)bCrVY^|iB&^UHo|_+bjJ+r8QYzf-|=yPFkU?_>K>VS&VUHT(+-uG{^I z2mXkH>vne?C)G>+dR$KRz~?BqZubrke3OFfcB^r?lqpKj^F8ou6V= zJ0YardN#yUNSDPI?hlIL;L&?Ao^Pp#M2tf$EYq*|RZy-XTAY=5sZH%eUjv_ulMO@SvQc^Cb!_}5K)D{&&jXGj7004Hz~8Kde2& z(1c-v`Ce4J*Ug16A@I+(XRJeGgYOwvZQVu=pz~fB;tOmW*%g5EIO|~C!SoMqrOyMx zALvS-?p^6qJu96k(3$cYeCE?`$cPP>JD4)WmF`gcbFB0!LtN<&rw@6hPc5+0doV)b zN_Th=_+hPdLlayxA6@CI3t>VaRyugv;V~)Odx7OBp}2#2(rvO7uDvLCFpww6u78Um zc_mT4WE#u|=LZxXjStQ-V-uNDI^s+kTWuoq8V{V4#@;|2kakcX9HEh+fc!02-}#lQ zC~|DkG~Mce%gf9Y%F*PP?a%G{;5@;xDUhOV9e_Nnlk$O1LoGi6g@~6O<*Dm|;rQV2o_VIj%}4l`xayR|k0^}Kovlgd<@ab_>cgY7 zV?I~@@AyNdXnFpQ(vI2t>_oZM7NCBJv~%=xbfF%lQ2XuHcJU&f>lAHYKhxit@1x*@ z!(rAwIBvaB^%z}i?B8J?c;JE0@W8+Bfq%yX|A_~_!UKQU16N9`eAk%)QFz@gXVG}Q zCPePEX)0!S%TK z;^;0>`E|R`D!8tH6cu<#q??|%dnmZB=M)e8N(I;T|4hO4xQJi9ZCBU7Ugg*DU6hZJ zu3!5wY5JU~^6Ppo@xXte;JW@h6PO#{WSN{7(w5>;GH+uz0d7ZXak+a9#i3dEgxi&abYXpDMVX zpK>I`wyW!ZPUY9|oh|7DNcRTa#lg0F zf{tZ~(p_4W>{wA2G~Pcu8{mtw8<==3tn)>K($lw-PeMhw#I5CFw7M*4tf-p(a-`fq zx^~@+V`>BFn*DD;rH9#L;X+Mpk%pq<5R04KH$RcL58>{iOzFgY9mnxwo20rOR>vVU zvLxUK-zz%#bR0|UyYXh5nOi1@-M)&ptK)dr^3u93ezz=G2tEMcSf^zbL-$ay-#F3a)vL%RTTL6rAjct7n0oSZr7GK0i@# zjZebXLtOMyqtZq69MStzJv_@HBk((N_o5MnCjP-+<9C!yZzIq0CcTdyPCmF5Y)g=S zI90QWm#8)*8#e{%F;(%-Utz_;|7TKW%qEsj!M`Xo6(@yLRb>dLH8$vaJV-yXc%>}pco_`DvbO&C`~^U8a@VGK z*SFCM+!ZD_z6Ca-Z9>ra%9VBCNwyO0x;K-VF{5y}c{F{QaJCtKB;7ILNP5eHG*DfJ z`re!U5}YMI6~Fd1jAYP#WEHPx6^08ORcSvfO3L%^;W>gQ?@P-l%)DU9*2_~<`iCrS zc{ju98Q%hOZ|f&#>i589qG0Sy2?D|Ty$IG1EKXIqfx-<3u0Xi{^aOZKp|a&c&4zf_ zzpy7gtgJl9qz*)H$sGonapggGh4DPXVDO3;xI9%ROG>MPMt%XubvYXix{oOn1`Z$W zFc`Rv7?k4p)pA9x8<5@?aQypja~S;Kprklxgu7Vr^}FdQc^eInkqCo`q{QL=*Uo?!{P$5cgzC5V~0_%bpJ&$pSv(Q%KnXM|5S$iQQ~?a12-vc=3{ z=Wc+|ux8F;x?=LljE#5Bl`AfBH-|8u7#lnK?D;u(hD8<6{E%NTTqG4P*~PUnnPavE zU2D+yc)aUqJasDr7Q1Ao9oUZ}h1c)Ei;9j3TuGU>@-49AV|^W1V0~RtY3Dem>1(b- z**{<_WMz?#W`84aSrf>NBDv|0u9ohxp(NP$+h8RJ9WqA`uz!5^rtCE+wFE<3l>HRY zcaDvg#zdPK1KsRytUiC1Vv-yzvIT?;vx>L%w7r}?4;4u(L*eb8BU2XP?E~TM=Z{*j z)A3^)TE@0^SRP|XwO&<7s9FP3b zHOQ`i-UAn2-7uSZ40_(Jow(|A+Bpb;axVTCY#2YTQ$6Qq3%mKpY2ffeiG%0gxU4lFkT*AH~I3@B~Q%sXb z%wmU^#XD~n1b9gl9yWm=OzqDfz3WPX*gfP68GWl{6eJ;F7@z+|%$#J$mRNk@=|ZRD z%5LXeGQ4#FjxpX9-~sNQjCUR?IiOdiLbvomYE~f*JRdZ^+I9#sTzL=(O6P;3WX0|DJ0X4MQ8-xg z8qq>`G8f_2#5NEFA*V!?DeZ?ig<~nBz_dPN2cU%6k2^3M+Tz!~ z&KkSV#1tzzv#K2VNnD}Z6n8aH(ET?=A=Uj&nPd&|YoC)sb2#%bhouncjFzP8R2muC zAr7NFbq^q3p=vn}fVtDgE1M+8Yw+uv93w%kG}f_Vrk0L|+GAX9C_P4ZA*NwEN(1n9 zG>8SJ&kM&;P#V0?+0l~6*G15yjoplQenRpU=xlZ@pESN2@2rFbWTw|xd{dfvnLf$J z)w4I(t;xPl9-iUyWhNMV2DJd4E#%%gwdbB;#|8or35N;&Y)Q~vx(nx(SRNn??H=!{ zWP#X&VDWbk(l2k=H|U1U!>NZk$5|UnvGJ}=bW?78YxWbeq@v6EfB4eyu5DHo%bv`} zfDE=9BkI^wOBm%~(#q0m)KHW?0hy%V*|F%QEUxT*fbrqb>SjkW7{98tnrSAe$lpkvW6=^ zQdwiFl{K8K$?3qpNBhrgc>4`VH+H7k zrX9*aTtzWEu;h`nta7q~b4p-?m(-@Gq@tE}NF6o2GvPFebt*N#r+&R~$%( zDkF^_{`u{hYHw?jR-KI0{6#sxP4h|St0h72*5Xqj09^$A=0>@84q^xdm?m(zqlA;= zNz19JOj}tsB@_ra4P<_WTRyd+oEHs2*9k5J@=lP(ElZ(P;0|Sf3FHql6Tvvo;ki_t z<9?Z59n_Ha6En-0z9dD#T9qOXtDDXc&tQrZR{dKWbgV41C5Rw}kyPeLBejtUdLih`k=3JU~IO`TcQ8ejNhtP%DLLJiqf!`Hu(g2e?UjV3wk z-BLBv6y+r;pat~oV#x&8e|Hg1JQ?$WMNG~`mrgk$-EtJ_U2AL_%fTO3#jm~*lOQ~* zP6dPMIT{MsWp-6)Bg$@wlq-#KMFv26E4Mm=1XXXpcxDJfjO~oPw8UfPiAFB`~BxGYIj8{~)Fk3O@rVE!|8S@vNG?au$FQ(_HA3 zuv2-ROywGxHVvRtWo2l1bLSO11UXDsj*ZMzLo!F*_`;t`j)H{E-YCzotb)vGF&R57 zt=yP$#5i&?1q?DEFxC}T9}f?wACValuB+^ivBi4qZrNkRL@^Zm#L?U*Bj>A(@6mkN zCz4|ul4Ea$z3BwHL$r1w&80E#@&5IBm z6+7~U3;a^PNg`Ru39CX;eDlsc9VRlz`9vOx+l}UhuNA0)Yo52)1Aj)rIcFU&|E>pq zn4OSpSLZ)N!L^KXi-K!>ey8ACws=v&b^cG-eU%>?exL{Li$#2s%CG&|*DAQ~*JnI3 zN|S}(&1@It_rc>29dGPA=I?g> z+-qwahHDSntQu^RR-LQ^E^rkA*4ce>dR6nO$@K3|OQr8V1vj|xf*G>L9UCiy7{aAc zo1A`%OsI8h0z+9IbZt5zUHT#PG5w7+VWsMwjO}xp@&RYc`|cmRSd07N|){j=a(0VCVb%GJ(CK{Z@b@GYhbsa z4_Vgvko6%m#VMd`z3%Ha^|OZXxAV-0<9TJeUvbjTy7L}-z7vB=faiS$o=u-H<*E4I z8`^_p6U1onfJ*|)DELH2% z7Lkvk@|;60@8dbkZ2NBb9S#nE_uHqZ?y>!M{bc{i2D9ZOO||Whl;`}e zhkntvd_1QsKT@7^v*meti4)UsdCo1POu0$sBm5i1KYS4R!h9bEo^yBLseNMHdaDII zy4Kjmqdaiqr=G{9MZDDWo;j^?0gW?TG41e^(@67huMmhtIOnwE$=oE4=0DgDSQIW6 z#sc*u0Apg^EaTF_;}5ewA4B8`>UaW75Rr5~x@&r!+Rb_nP4QOvtrscB;VUs-} zlX{_Oa?LZyv^+>ds|fF8==b3K@HTQKJKl!#!@i&^eU0`Qg5{dSsY;FgOwM8&B4}T?aqj2hbcs-}RCQap&03sPTS)*EqP9 z%vrG$(nlUFnoPWR*{k$prk~DZHT_h`kOW{wb`y8od{*T0Zy2}p?QWi}5XNIiGLXa1}BPiD!78Es7tl za1Didh9=gAw1e^tLL)-~`5WEGd_03YBe%$w}#Xs^m{KYKo0K%q1~ zXS>c}-LW@dVB#0?lhac3AX5oMio*F$ba2g^oUPzme{!jUYrW7@3a;}fO!WhJ zlbnLA^`bi1XSb`bICQ)@s6Pzed5zxE+04@bVmG_^}U3#== zFHjV`2uh=cEAA4PP_Q6!I*Q>asak+~V)_Z0Hkd(SB8|OmRR!WxYmYcV4N?g#VM{K) zeCnOt9XFI&oRYw4QQK=k3dXDHz>H`GQMA?=w0>*aXLTqJMMXS^+kZE|xdKrOy4ZCD z4Je9teH=4_#>fOc5vQ|g0!GD>NtrpdTX49jau6rkA4*XcKwGf7z9~AGy2lOMBsJLw zO8ruuUaQnE28qsZf`4gAuM4`zAO-?yzShwE$&lvp&eMg*0o{YfaaD1gDI?2+VeYP| zLLcu3k#RbSaSx35VKtw_;tcOY6U4xsLW@hm!l%&w2nCGbK`OIyU}DIuFyM7>kMGQ$C(>wdIL6+p@#u32#s`ooar_JmFBw`*=cE zeu{1!-)*--sE;S?;foJxq&(qf+y9aBg!`%Yj={wIwXet!5c^v*^KR*gQA?dI6NN&ARR*J4QcJ2@lT=95hX7cQd17aQ)&>l@>T8~d}^nfS-C{}JmGlF6Hf5N zYC5#e+PsFYuL{)KY!W;iPngEd?%O*0i<`eVIem|uW`gw!@9BQB4=}A_fR_(v5{H* z)FV8d(}I&uW12fQmbM?8Ja+|go}7LI-Mc5*`$B2*ttW%b0j7Lr-1kW?@hC%F0=Tbj zOT~;a48@B(0UaJ!PiPgBE)Ges{{9hhJ}4??sy*NzzUpf z`2o8_HYS<*a!mAddKFlr*nF`k?Q&8*@-eO#MFF=;vab&{$#$7 zB2VYmn~$gS#rq~t7G0YphA&1|9uHVh#fPiql?8FQ+P!1gI1)I3JiVTq4^jBlc3`7$ z?Wd)AHOAdx;)mwd&Q@@(*K1R7tq1(Eg6n#=D!8sE!A6mo*JhF52aj(A*OyD7e$dAY z);A2>pQ+r-3xbcin`k7{4_J0EnZ7$2V=OF*f(7QK0`KxxGK26ne~(Aq6DjCT;9!GO z$+0!aP!COF3)l`s-Gu8CwTXtk!5Q6((j-D|#^;Yij}Zj4wfPQW()&WO;VoJik*TdJ zk?cOJhzwFQ@56hwxno7KsElmfq>@>vI<~x}aYj`|GJRIj6@65+Ri{uP4hg@O!t-{h z%3ArhZ-*1nzQPx=VIb9dCpW2t@ml~T^6g}{%7ndBwNRf|Ml{=TVjOzLWjqhgfTO#_ucnpU z@>a;z?pR5ppCC7c5-_#Gru!6)q~>&ezL7LOzXY?MZJ>3~kLpa6t_-;^!sIC)I6kjq zMMIv&6wjl5L7~C=k{HmJ`G=EBOW)^WlobfCmE9wkg*IuiIEM$9+csw35^fCx$}zNx zwsteP9NBO{bJMBot0$UOfeauu(olH1XSpbar<)wcH#ISknr-|e za(7bQ4y&gV8d(zXBl_O(@pQM^ck*UimU|$#?V<8?a=WK3t3TAXCg1~Xol(AIsO5b; zUA3)nq&(dX?~|u%x9yKqPxoI@f>^|M!tfdkRezJ=yPkgdlu4O!!UjV7*AT>@Ndm7% z>lnB^C;|C`#Wye*Wcm^<>1_NKaCyu6**)?Z!Z!#j0-gs<80@c^iHKYR=7XV(Vo%|< zp6*52`sVm8tHNT{O>f=}6;&}Dw=fXN%!#qdUC#$;SOmL@K~Yp(PjyyeqB%~By1|47 z-PEf=<%6)F)JNJAp$M+StU!&=A`vSi5muobX|6Jzh9t!O(y3LUbIv50UVU|d^bThVyXy;n0%PNGyZ zEytqt%fqq-e5LdXmiEdkzAbDUn^tTf90bArQJX0~|6U%@9QdXE7JMK>EeUm?in9ck zpZ0Mc7pTq0$;=lG)hiI{wig@|$zi*dPiPa2i1}e54${p39pq0nJ{w~ML_>kBa;sB5Ua=1|M~c+K}~6Ru>3k#=;O@JM;ho-#wf^UX*2*Rl%XZ{HW@`zY|5 zy8%zlYr6Gz5a7|Z#=iP^&6FoUWrafZg)RQodS)|V2<}J=p;zInE0mG zyk>_$2g27VxaRE+S3IJIw|n5u-;(WWUho~2U-OzrFe4H_G<>B8ezM)4qV*?O2@-L% zMdkOwha7TPPP>>$Y*)W{Si`W-M)+;bCN|8&JS6$LXcPmogy1L{-aUpZfFBUPG6mkS zEQv!1cvws4Ibk$Y;Ar6OwZ*cSv&h~d>P9klPb&6W5PNuH*S!oo(G>5TfF9%aUy01J z-mpJQPqWEImtQ}zu16lZj5yZdLY|xjHWn?510I-^(AlnLxn#z9014<01pzSG2$*7;f_63N?yQ=J zLFBbXrd{ymWw2M5;4-5Fg6^@bt_BwZ^#$qOSvj24$i3jFRj?rx_(t{&ErQ;+kL3%Q3%tvNVAj7jF zh0p=11SdH-YU)d>;z{&nF9-}^e|_bfqUD1U5HM3(5;WpW%*3M0_X4_M`JRv*Cfxsu zK)Fx4$zW!Uo-08(gQ8<@W=&QYO&QREN=-SQ3cfr+OhG(N>g>-Qvp5vJG9m4t{)0jzLjn04eed{q#lZ54^X%Tty^~+dY+a6r`oC&x z?qi3MTtE4fD(-0in*g&U!na)dzhY}1Y3viH*B1Aj99as|N<9w0lBOR8UU5(0sd+`W z-YCOF*BU!_tOtIY2ToqQP(27ySPh zk7MrMC3|CZ9@kmuIwvr#jLC@P;%SmE)4Ztmd*s@4=VgD)LP${_?+ybVz$^YJE zTXlbTRlKpTKS5-WSck1rejj|ugu<~zJht~k4jX=K`66rkV1rH4s`JC7683)jU*a&1 z2_Vw3aq64PV2u`cI?=iE0;<1*>LEyPhQc+42=uX@RC*q9^veG?GCC3t1A3z z1x`a5UNyD<3_e|pGe3^* zk`+dOlQH<;g1&M`7J}P^gNKWb(9^Z>#TYB++VP{9y!?a0%QN;lczJxtwNE12STf*} zud;ZCVXxT;98~1^c{h9~&}3MBSx{n#3dzHIo5pMqPt2hv#O6$95Q!$$9c)QunzjTh zo3?O+OXA|TMsy-Rzd{-~75%Asj4sY{zt}Ry;&eklKoT&W<`l&!Cxa4;aAwT1$Y{l{ z{-I0>(kN4!4q|;Qic%H5Ac>Fz2dRoL+j|gSi^(z2X2n!3-VCxfv(xaN;Jn93-j7Ws zh~WyZhdJr7%9g3EC40l4kkLsxeW5r-=`uSB?j3TQ7aTD5Pk}U?fqg;agA$^2{=1NM z!T^wwqU-Q1=ypTGAscL{T)b5?RJ~@XFp!ba;>-#-GBRxZj^VlDMCm6jQkl{(gri`F zr5;0p`1%&@AU!HR|5wDUusEIlN5Oi4m0;tB>t%NzicI$qnQSA|F$R7_|Bu*0En^q$ z=(NUopk|8QiwnYR6r`kLJ6p&!RUC!ep0D?d_S6Jheu&^+7VaD7eY zu>jHy@;CP-@WO6GmcwjZeLT>--63M&g*;uE_6$ z4`~>dJ*R#IvHoxM%B)E^wm7jBaWCNzJb`hp5Tx-GM8Aamn(F?Am0K29-2j9ssa(fT zI*wD~1e=Wr`aGmYkx4l9`y^JBi#74)a>$juNkKAN(~DsY;o8%LfD7S6ULx#F5+XoF ztrQ~q!hXcSmWVXJlw%`t1<*Ep$KS#CQM8~yiUV?tU@j~nM84XP6@^3tMB&DAAB`yJ z0d8U2ii$d(gX7YEm>qQUhR6YFi5@rffv3PrDIvxP6YfMCt3jvn2uCNMmg<)_3uPdK z!9&V2zvyE*`uIr_!1niXHj;j7>47G<%W6;ZK`76$&OFx#@`hB&6MG}n5j+f$O=npW zBt>n;8WMUGl`Z8WaAKaN2Qr84;?}R^lE#J4HSph3PH$-|d~RxD{h_=mnC)Vdr?41)-Valds5~|M2rK@wtkWbvll|!GF<2Paroek`6N#&45R*JW*X2qv#LD4kZzd> zvl8!;1)nd75<$=x6e96tDOhb3mdS5D;t(JBk!r!Kb*E1XwPWjABcsCuVmA)J1aHHuf`U zM`(r5j9K3HH`ztVxG2~Logzz4i7)(?l*9sI{!r<%rtR_Ud3X{f`77_3CQl|r$pN#F=AE}Hz&l1Y@ zll>o#j9qE@tC7msUr_v+rk9<~A;>3VyYeHIv2SIEk@{?d^rEpl+H#zm_YN zv-6^>LVtcnWx8(?h(tJ-ij!f<7cmj8WxbyZ)WEeYxk0utl>VL!*A`T8O?vLeL)hwtLpES9{9f~ zxW@A#1=sj|#iNV(7Y}?F`yMAgy8bVy{JQ=G@-cBuu#8Iw*Sq*e##1%)QH7?%1j96c z>uPH!FmiYO2=4T_!M&W&Xp=N-?C`Wtu1lq7RP`ffcPc%rYBTSU+d@kiLLnhyCM;w9 z%r9na*p{`@0rpCosLN^Ag#@|Qc&tLop&hPzIc1pU(_wOYgB8dP@)B<;NWa0;^)sm@ zsHU9>`jB#H4iMv#JUxUxn6Y7l-b}3t{b5H1`!ff!mjy8dCBk_n9>NzL3XH2T`{K4i zddlL-l%RVwOr}9^KW^58!b0qbQyHuqZ~{eUgrqao%47w6H0Az!bgY)D6XeW5&TTvo+%61U7P<+79ZiAi-oj|4r*26JJ9X#uQ=^ z2)G_HKp)_>u}cr9EaeId`yce5D0Q~se#e2`_WRt58-;Z}5Ro53Xz#6C><$E>=}3g7@T6Ez@C zCYOAL3Paa~^2sItcG5dH@t;+TshX%-f+8&R-*t6bIvNBxp8~<6|7{U<&%}&?1_!GQ zYAWCnYU!j4$@B`Np>Vo8s+ek)#jp7{Y-HjKFtG?LOTt}TeHme>AIpa`2FDk9%_ZxF z7Y7|RVrEO>=rBpLDa65Yy+ZY3Dg!N!nvTM6bH&X1u>YxOE7me7Hn#UxD{G z{CPNApg-bGl2&hp4m0f5wqDsWq1BVyB4rPQT9o@3icIB|p*Z2#jp>hisl*D>qvP|r zNd_HTaeu)jte^FoSz@(XJau?{S-fjDpEjjGILhafZ4=TzGi#W%sx;PKDkV zaGkB2b=1OS#*}ck#U98z8L$%-U%oqaUISeP@N$@`oHPus3)%O%*GObCL#A#-HA|O1 z5^RHu|HHF4WG|q~sqhJc>_yxd;q+dxz3e5}Hu#h}HQwKVZkzj~u-m?zJ=tzl)uy}H z2fJfJP7^;5oMKXJ1Zj8e-{%1Oqe1-2I@#$=$)E}ye zXW>yfesQE-WRqlBOZT(r0DNPeBQ5XK;aq3iZw*^AUmX4pT!$}FocOGr0uK_VoFw*t zI69m%+t5gLILAa0wRqU!u)q9q)?E3K>Tqr#!;Uo1Hprjk)g4-H{0WPW9Y941JAZEE z50#?$t4DcXneW5Y;m~KjSZS1Gudx`E$Vlg*BR@*Q-se9n(N4VfQ4Kz$YmJY5an@S! zj6U?!nF&euHhi9q|Ap%D>2Nwc`M>Xh57fOh7~M&Rq zDg*64&zhV*CEtspknUulhDBfK@LAx`1fC;LMs5_SfoomL$LyqJehvSu2d-spoqwLn zuVwu2DY(vmvj={kf@|G{zV}k=UTENDBK}(UQm^2;-F6RrrGo2v-tfTVN;cQ^pYDM- zDH&hapCIx`tb=`UsmXqE@agvV!S$YVs2&-A0z`eI4H$aN<1HkxO-=Io=aTVx&J{89 zr z88ifIivS-L_zzy20!$gX*#;3PaQi&i?@EdkK|qn6-=^RjuFwScjBlmAODhBkoUHAv znuo9bn<=cjYdGohFFZVJfH*vr93TYaN^*es-EL%K$Sz7YZnv^A+NNwQ3I&mkk-Ly= z44f#kH;4v-Vo|&4$F{y?$4ao$%jCQOu95FQRTK%7x-+L(76my()j)X|q(^nA zn<8`nzYELE5p*O>_ft|98HchB1m8WhRv~T)9cmN&eE@4Mtt~aWg!lT7Vq=+8HvuOO zmRylKeA?JCm!U8sDWtJBiu;t$YF2|9$=FKxv4jLl2!X-~&PLM11QB7VDZuo@H~7PF zrnIsy{Gk@eOv#x!=_pk-(+mgCW2M=jo(6zb^_s7xU+`)Q+k3o>!Mf!s}WxAmb+a1gX=mh`|(6UJm zK~fuJfL?&bxDUc1qhFi_IDZJ7Awc8jk(XU&n0UPO|AVLz+N#RL8|Khd-H%#6e%pGM z-sdOW2%M~l90WdN+rdYX>%ViM;d3%x>L`rG4>R^1SCtG89HcNprfwD^U!^Fg@|cTD z%s^nAfCM~aa!6r0n9>@E0UnsMj6klQWO@^$r{@ZAL14*DrF_ghp=%5V3fl%8?YVcA z?2?MTEN9|(kI(;C;A^D*Z-Jv{srCU<|8bD|=kY0}{;4h-wni)U-=CBE+p5~z8Y%T7 z$P)K2EA<~|ue|G`PjoMqBSeJ-=tisclIeF{7%r?P%ni+sH9)1>Hpr zT(=D_S%~3av@NSa52J$^CBz5S-5rvQ(GQZHS~XMXz8Ak%llDh}9;W&z`2`V&1r;PD zKQ zh3t$>c+u#M+j;3!ObwDQeha+ZviTFLx2g(83U2Z^sZ|2D#LX%wlrBd++yc6;t5#ft z3YEI6@chnp;^iOO1U!UWD6JTIa5)}iBxGw$OXA5N5^EkIN7lbn+4`;_ERV<6;`sA4x(k&Z+zh> zKx8Yn#AyW?n#}J#r4uW{krC?}x(fm;# zr(goxfjpx*1{N3Sz$LVBA-+;ho$~FAn8~oW8C1zJL35wn_5k^qoron6OfXzbK}Hg1 z3t@)>y$kWJAcCn?SZH!dG$vT>u+u)~ z(BMP$sIUP~^?zEh;c#&=f`k|h57!)@FQ}u#1^b)*E~;8W?jgHni~DvV-0hkT@Lq5? z@?r+PvWt;J?r+H!BZv8RAu`A}JpVo{@t8<YgK4%c!af(8C7&k@hjd|n_y5r-=_U!1o<6n?Q zDn<2BKHc$kc7Xb=;7@spGpEefRcSvzXW>>gVxdJv8zb$y2YA!vC7BAg=yuU=}-3a!_*z`h5A2C-SK{?Kf2b~zXlI{ zBH&tgEPESZ=X&yUUKgr=o(I0z1HZ`w|9>9%3J-js4!Umq2d0FUs+<-&&si|)@>fVH zjRM3&FIUeb1=sbv7}U(K>;Gp@{vHL_`L(~Aro;0p zzlOi1;M}Slo@Lymk)rh3N5M5c$1Aw5=XeFz?Vjs_U#Z}_{xoE3hmZE>dtJeG{!+Wa z5`Ue4nu6>66S)B+Mf0yG(iX1qzuCSQqxln(dpNrO35OWn{m}gR8tNK{eZOJfZWbwg zG|AULm##mVeuS=kxJp|z{;N(2uG+X381Segk3d1kUx^QM*b&N}g#4hp4m2vz%|J(V z0%CzcX?lQI2dqHR$(j{l_4k-u zgIprP)2|5OMI?V_%qHfexR8Lp_&{m|gY<%`c>r3yekBoUrKAgYq`swOs{=R+p~Y+P zwg1-?OKX--%CvkI9fNi#nK=?loV}9W&>BYt7br=L8NesEuo;Bg{-TI!31bLIFE$55 zyKgg}bV`9b#so;|XZUaEQ+^3tfY(cMtg_}l^!TfY4)ce?(j2<X)XFLsUpjdD>BXr=rBQ0WrjY(IlFo%$$!GE#+Rtsz4(+ zBLa=isv7|6Zxt)S;;MQ0A%+42PsO0ZMXtqFx8i|NH0pu4Kpu%WOyY_(4FA6S3d?Rm z7*NR2QY;5S_Z?CRCqYyH3)llO6JS;0E#GMRW;TrpRG5^|MN%*xL^g)b2&ZvDCFq|+ z(ov_Z71Y$DrAls+Nx5`CQUOTK<0r+y$!W-hq-Od}F{(5ZN7_?5Z5}B7jq0+qY6%N< zmy=i!n0xziY}fdsPGMOXbKAo zQ^!Ber3iG~LWi8f9rZx+*HbD}Dl3#HBB4Zqc3gZ8vHs}iTk}c~`%{paa}-8s+*6!Y zsqW9@l)6-oiQ=PX#nMu|>Y%t!r9Tr6LSktJ-ZuiwVNkZTyu4fk#Ypj`znwAj@E<%r zDp>l^t)H)>3y2g`3RA3;r6nuwvT)UgvCzPB!*^BAa+9+K(1o|e>|3FU<~`25)g(Hd z%yy*_Cuh@nH)p>oTe=Oqpur{ACOciWbhE)S1k;$}>?hmaGifP(&~m7lWjDZn1i~+n zg&N}5V^P38WLPx~GQ~wvyg!Bo?JT9!k=Zn`8N#sHpLv@O$&weofylx#GnalG`TDOa~RnaOJK!gy)vVvJ?j*QO9$1npu74rDMt``Z6y)PEG;8hC;Mf+u9?q>^=uz&J+mFnH=y-%>+eCwSQ=&uR5Y5y1T#@?=tJ|(PI!Ic zZJ_Np+#7=48C8{H13@8-95mVM5MuAh{>hoD-LaRVr`(#-@5ws{1wc;A8R6gsY*jgP z8C;XCxhzNj?|`Qcx|<7F%KjBk&|lihW=W=~nG80Y-?dGk&87}iw)Qb7&&$L{Hi*&2 z8pjrxt&`}Bk!(-e$IdKdbP;!5^ZsU=pC;+;_|4tTjzB3Rw21|eCI${aH)gS%iS-Ry zb8KdGcrHYI@H$cAmtx&nmv5ACrZd{jjLEDC13(t(XcAse`D-`^1%o%_} zgCz`U#$ef+GgvlpK&BTQkmtb9azJ3qv~7P@24&IQ+=>u7U`42L!HN(r-IW`PH(+Zim8#Fey`yZ4pjQ z^lq?*<Kp~ z-kB@zDG%&tznJ|#^5G`4Rp=I8$bDq1d3X-XVJ&(yI)%$7VAKp?%7n;Qv%$>oPI1T! zw<8!e5dozBsi-}3oE*myTW}${0tj#y=|jsR4U)eD%doBgqE|>#LFAbdRE!|2JOLB2 zmJW#Ff@z3mI+ih>D6eo30d#>ul`&tfVjva6#tknMaSMdU9wnn zx>>_>E%qUZJK~XL2}<3>|7Y)Az@)0KwBahc#ZE*{8&Pq*wMlCzLG4D=uEc1gw4MW} z6cdQdh-naUFad0#+K>bg)7{9KvVd_k!^~s8A(Jl|W^$34NiyVOz6JzZ@d7G}8Wp@i zmx!W?(rUE-_g#DMQ@c*rk%q}6lgEEQ&{eh0zN~#cd%b(@wbTTyWS?~(&+_s^egtyD zOFb?{d#P7p6BrE)Y@q)q(TzNXwi-wp(7HC+*rx&Ic=i+)Nr%ERp39GiDco!~DkU_j zP4Hazl)b8<0Mt;|vh0!chsl=3F-BQhHxlH8?!zTx>`IlkNxxe_NgQrJ^vPkFSF>ceHmL% zz6s4jqSkOXwc%xK-h1kA`na>}PF;RWSd#i;_&4Nwe2MbJXIoBDG3wNZoGW3+(5L>5pt1hZP^WSC zLp{6xvW45*c}L6Qc}ukI8Q-Ko)U)d@-NEMG+ri#@n#aRogiiTe{1fHB_@wk3<9(FR zu4QdQ8%)Fh>e8l>UmVxv=!;_LcgE2FZw&oEV(4YgsI@`aKfpz)`dH($hjK<;_C)$L z)Qe#N{sVmo&phMqPkn|F5%|G1(43K8VbSfg#8y2S`Pil}vFLU_dA;~V^Z#dyZs+r? zMYr>L*P;_uHGJClm~1-59|o3d(>;rBpDlmMqTBJ?EV>>4QHyTJFIaRSq#>V!A!;&^ zA3Gmo=Q_&gHY>iJ|En?dqxCi*n*SLV-OlFx z^qn#Ew=KFoPL9woI@Xu#gc%Pt7TqrQ+!*>;i*Dy*pQYRR%(3Fz{B&4!JD-2D=ypD9 zEV`Y~Z#ZcYST9@G;A|#FAl;7tmwa&{MC1R!qTBIbGeKZnJ~N?Fe=+na`u7d9Z=OCUJGG@{&RI8}4fTNo*#bJZF0Fm3 z_y3;YD&3|mvQf%ax&x!H@`7IFvhppQ?Yr=d4l_MN-L`jOlK48jxkKwVy*P@lJi^bn zRL?sJ7w(2u)jvvE2-hJtB>;i|_vnU___o%)u()~-Zxk4}E^Y6_YVboS6I#nBK{A@w z6WTTnaQSM7o142267VJ7)bhNM&uJNx9Y=U2dxoo{ve zshvPmE^^oQT!gd9!+ZTxcK~WAG^4s1mWrE5y>gONukT!;kor!$gx*KI^nK24mmtNQ zkNN41&TS2BtKLU67Ews?XYRso)DD#azmXhNJj&f7d!vV5rhTQ3ML>Sk70fTVutR<8 zt3A>%`JqISg1Z{!qoaq%@j-`+Un;$u%gdvj(A+lp0JMRBUGCN%+Q9hSd(!?LjCac; ze!liu@`i+xbxvi?3x@eoqaYVv;08aPC#Bun!jIHO0EgY;aXkNxq`Rr9i^-*av^)ar z5W4v&Y3sXgeqIuQa{94_AII$iGT>ak&duKhSaTnmy~6z*4Qn{JChRo=oqm#xrN>2DWkT+pKPAcRBYxHk6-}_LB24 z9B$>ugXX3-qZl>{fK~ul&tW)8{4>L{({qCxaXJ17o++E+?LP`bT9*AT|vhr zW|dPPZ4F6h@jqcvadUT(UF+H#TGr!*8yw#Zy!k{tABN||Dr(rN0X~SW0a^yOW-^1- z?Z3ok#?Spo)!}=J*_SIasaMT-`L-%w*rf%a+`VjCKeY!H(##6QjI7{kKZ(Qq`~4K| z(ilC7dzrtR`>7OT)qcoXoZ_%)<*wazn49{*t@tT(M}cX0+d?G>zLAY2sQ0i{^ud58vU$M18Hq6#(miN2K5gN?qPEx}!6 z0Cx`Qi5B=9LF6V1%*x`JaT< zBT_LsBB_@2gN`cvmUcsr@;h==Ew-Le zesKJr#hN2B;pb%ZW8^E}PFws`Coq1V@Z5Y7`qIpYa@glj!;#$AJ*<;CQ zLGe-w=MAn7;Y1l6D2qhspw~(pEUbhV{6;EJ$RamR?_6FwCqKRyPJ@YF0-MI$v2C7I zPv(5NDPR9gL27PR{{=WIxN9iWKrPQt^|&2qoXP8YT3sy2ZSVCse~%aM^zBz0yzl-7 zgLmh2tZk3^!K@zaH|oS#_WSUdjrYY4j`*zS-ufP2M7NxY_7WRjuXkUuA7uy7mRf+z z(7mmbu;lqUxBu~CY&_Priin=}W1 z2%Atf$SXS6nEmh=I!{*1#h(~MpBY2vTFCoB2Gf?c6STjLiT~pm`p;wN8)N8?#n5-g z(0><0Pom??wZjQ9^iiO*zAbuU$~ypgCoJ$_T7uTCuASCgq?t=X({7w)zN&}KGjEu6 zts%|5miL6<|Cty>^G$|)-L&%L8*ZL6eOB{G6K(blWeUU%qggjz*L>~lS#StFeO|VC z?hRj`Zc^Z(`C4*&iPw^5mplo5QCs<$2*8m|?B?vOmgYIrr_avLnL0b$Jay*G8+FRa zlj{-5q_Yi_URn__@QPa}720jTYUm??o2&Y~Qz;YSHa{erVD8Dlz$w zv9Mw8nGF4Ai*D!hZ!z>2EDV^(XeOVD7FKH0zZ*mM^t@ra9c$(DR~DUDTuuH@TXY-i zJyyT(nU5X+REuusUxRoI96P#8<@Y4{Tcn$HY*B=6=KIVnEP0TZ!di0 zd3DNwcuoH?!WDWB1WLU5L=T#Fgz@O)+J^C< zGY2Rt3NfC@j3JEY7IZ?@tu_;&%9JLhY*4pA>To(TtY7XLiXJ;4c0lxK-RI{PK>T1r z*cMhyt3;6PHoCc1mtGq3pkdTnQeElnM`}z*!g}DHe3%5{N*UKr=Op zSvbnVB;DLZ3aW*VlSVXigLB(&Lj_+AYCOEL7X#L(x((3ix}zY{~(vPRK~k=l-!{d7NNjG}xICpeg0{p{uv z=>YPHC3nPb>?049EPxs%5{u=p+J|xMn!Vmii_ShZ^Z~kSxt!R0{PQiky~qE&MYs3( zG_l6OeC)ksHirJHMYs3(?^tx3L7;|Ir);r}L!Ztt~g5Ql+z=qU30+T!*Sr_k0p zbnG6p{-DpH>#PO0QA$;NOdMjq*UjIeWxbZCgE$vF-pyZm2(boMZEX`aCq3d+WQC_yMD{HM|8r)LBZ&3Q1wj3RiW9Qk{F4oNM6I z4{E&L``ot9DsSuWjoP$+=F6=`Z{s+V1)8>;^ihL{M2t*0PhWGZ<$Rv9ef2`cx^q&g{_EFrEau@ z&v65Z;;!KOUb-uLrI(xV5Zaa=EXUvr{Zc%dec4a%&7Oznas^C|v%FMSJq~K%1SESH z;!ijX_Umw-L*tYiaS*LeMQEH72Xk5sc#GEzQ!iuNf1D@QV0jrx?VE9+R{u7SLUMoYM z8(wbAHjEwq>0QVB9&YIV;`jN=D^CgUlp@sqkOe>~c6DP$p)Go+FTM z_Oxk6z@D}Z<82ha@;}4Ba{QG&Ul>grU#lzH4yW3*#Qmu5eG4*2RTJ=U^!*yQ_no5m zzN>Unu8|ldefBErgk#y{x{DW&+Qs`ypD#qE8oSYd=Z z^&#(wgW3BU4B=4szK_PVAN#-#aeH5r{!sV6bs9ffqzgRQz3*z>(8QbV5ar)~W`AeA zKZm_9+r{4d%31~5Dfl0qYaoe#8^&+s4+L4m@Hr0u%f-Jgh90+<&Bet3#~6CTY<5C~ zSreLX$WEJKwzL-N+!w{x2~^x>lbpDEb9U;rGeewNq3g=6W|@pF(##u+TVDmf>r_hq zL{((JX762}CJ}-C!T%zI?4}w?|Pp_xA&+unt|xv zvLQlm)W5A37UjnS;hN{3WBexeAJ;U#cUhz=SM537w%+P5EKK2}ap5rc*4{;UzHqop z@9taQgZe=lb-ZO5Gzfv3?e4jL`PFXFv;Jz?rtF4Z55KonRKb=+Uvh_YRFqbU{0wCK?ZXc^N07`MQ4=r)u3~a-S8>WKP z5sn~h+^z3x1IycyRPC%o>$;O+-9Pyrt}D91WcXR{_!wR&Pyx-PKcH!V*B4NmPxOQ8 z--cFQgSy8Jgckc%+`xs3%SN@e)BC~?(_Z@31*2fj>SZY% z1-}h-K-Bec43Y}jLyJ}r>IyZz;4*lC-vrgBhg)IM0XI(FO=E`2I?38KvTvr)RJ)sm zI?-fYg2X-PNz(4sw69a;v@bz1WY_q;piOVK$pxqc??6Hrg5l>8$7S-zdlrl;+e+AYW4m73Ocz594E$oVE|w=6#%>z(8R8!pKDsM9{nKH?Dz8*>}68bjzRYo`4JcLwmw)_sQB32i4bgFQS$}@ z7lXQwUetU%8GRAzwh<4z)wOI>Z%@EaA?~K z7GYZ*-GQ-Kw7T)tSu(=uIirfLR^u$Y78^Wz8Dq+J%&FRaa(vdJN+0g znNnNt5jCm1!bvTcpE1#jvkV#Ztw-VOkS@67s5K*4yM_z+V>_T2=1zl!`tIzJ%eTJU zd%yb8`n$GwDx9U%dNPd+^~G=~;l}4v5dKtqL$*|HLdTAU2Pr6V5#aq*^ygEoAl8rF zs&+Jta3A&k($6lO&N@~@DNN6=A(+=9O2YENxkD+*I~~LeS!oKN1vj}L65zRsJ*S)X z?JD%wdKvg4L|zJ=RS1MM5!Wn*Jk<(S!^t!&^@_J?%qe=HVGK$ytD(qVE-YkpusvQ* zS+H1dD)KuM_=ul=dEwQ#z(A1a~4ZQaoS#7t+>R*)?=|y$LPUM(OC;UT2OLre-;{a z8 z>uCsw#qx%A9t!(tz7HL$tMp3r8&y6pnxJ#7gVhVA zkHHqe!qC-{%xby%ft7MRuDZzV!J;!bTqG+8I~~UoGlE~G{HVd)m;j7(d-p(@|BEuO z)pCQEnO<(XrJ|3tK5rVQ{N%3EgX}eqeRhLP7w+cFO9oRY6LgJkmJMCMu&EjBizbCl z5w9}Xl*rw{rf!G5`Js#9-?XN!lFueEKEh=b3@q$QS*ZtZHD)mVnyTymOEn1a5!Gcq z&KBg*Tv7Qr4!dfg!VW?s-ck$)i(O5Ml&f;-KX%pM^l{jgNx#GttUs$FzvHm0c|%l0 zSI1}lvCB-D^s-&R??(LRZYdge==vWjcJ&t&w9ABOS#j8vNq?x=mGSSoLl?;Eu2tHqUomhNDSZ?_p_^)DW1@mo#Jx(6e9J_(v_5Ay!z@6(Hc#K&{MXceWnL)S z%G!LDgws&v@Lj}Zl5+vCMF~7tXCR$xhoRp}A_D0)miBi-RdgFOyOI$R_+eva|DY#b zG@qYabQ?=M95N*X<8vGsex_J-JHG7~)vnhGTm%uA52v`v=R%8a=kr<&{SF{349v%_ z?`f9KrA>d#qT9Npb3z5XJWywH{)Ke^>$% zdkulN4}mY0_(A{*H$;iIWb&1jx(f8tSBYzoKfX0%{<}U_iMVf^zaA(FGHf8xVqW4d}c~`W2`BGpu}mBG9-eLV$;WC-~f@ zK)BsN;A+5uG!4*0*qo&zg@)v4&{Rulav8Z2*L200EIR`ihx?*fArL3&(Lyd5H5IDGm*bN2Aj1OIiO4hf_OH4^7Tnys?oxIul;xFwX{^e_ts z0Zax4w}sG4@EV#{ydtA%cl*JklCi*Xo0%qnY>820Ls}w}KD+Sqp_t37_e6_;$6!<* z0|f?+7Y)IT83MfM0zt@P@uHI?N5PBGb5TI%fCJc!Ud~(q7P#E6cs8vBaadZ&Y5$~V z9X1U#a0sw1H{o2cJ)eI@onI7?pC*V1><~!Y^PKNM;!5$tA`-V5i@2NKOeBs9Fq_64 zCli2{`g3KFxEC26(tq+90hs=oa~uhQEfpIYuo95+t7Nw9a@zls$Ob?qxKv!luOX-e zSV-_B;x{n8Sq@ObsX}3{AR~fb;fTR3Y*>0S!7GJk;b(oJ5}%@jjtTO%fqWDMo5G;h zc+XHlp4aZ8t;kXCaF`H9yPf9_&l0g!&W+0r^EU`Wwe=A_r z@d#5)pq@u?$|5m`JRC-^;k`vj{l1;H0wp- zO=%4*>oQWz%C6Q#Vmg7wbcQbcVsVU*qwB;W;n2ou&rS{th2p>}=O_;LV?Pwlsh4~O zc*N_X50>+=Kqm^z0aLq+3|&m5CW7S*Dz?fXr=x~31j`xJ4=m?RVWb4hDKqg353r>H z7=De@2Cp&)<3KFwz?Ji$Z2sH&2nyd5vsAmFdQsKQ&XkVMgQW}T@onE zGO89W!e{+WABWMH^fSU7)t4w+aTv`?S%wc?zi5dr=uk15bx}rjJ-C6jLmWn9(i>Ud zq=}~IZ{5WvihR~+jOb8x>$gy#LHLFG2>(XQ4nKWG_tlKpX>2o z4@G<{hMVxU9DQL7Jr_g&b`1T8G4zBj42GDCMeGZv^b>Qj@(7`jo939WC2-5ZVJk&I z1$DX#{~0*uDRN@pB4H|t2&CJX%Fl(W=$sNJ{uYaF%kF=t2RQSgSZ?BfN>4I=*!hgN z=r+di_ZHp801mS-7(4z%i*DEJ#}=LA#qhJiqTBpW&2jli)!o**_sr74&?d%{nx!{vbh>R+$+APV=bGk8B0 zI7K5gz=={|&m}@HPZip&lk#c9T!KN46jZ)j7%99B`?R@i6 zChygbEZTl3l@K+67Ip}$KVOw>L)vxt=fp zXYgZ^RczCh%u9PiU{>sjgme3kG0mK%S4u6Y5r&qQm}VG&3&!+w$~PS}Q)=gNiAJAR zGrQ$@$bMfWpLf=7mrvugNSql?#!!K_*--z~eQvs&iB=(!v-nLEP5#kGKB8E?B&M_u zp_|Y{`7r~Nb~ibTUqCU$bcXuFe^t8(CF2SSTWmGHvZoZs&vJTJnF}(wCIp^_hCQa# zMx@*P;8f?EKO*bs7}g#g(=M5y-|iNQQe?#AMe-Qk%d-5S!s#ebUK0^F+GlOu(w<$2 z84mZbAFCk}kEue0Xg~h2wo}UZ>Qq?6!h}FGyUDfgQQI)Ju0BqMKR;@K&U3!GG|7rn|LNBIdXTCpoUZ4f zn*vgz@KwnBA@^n|lI=a;=X}|RIP6l+7k05UChij%6`x+t&peDwc=-_n3+;IO`kx){ zbUY>~0`*oHGTVy+2${79W|*5Hw|}k?6H;8bG+oCOKdbts`{;AL% zRsI(Xb0F21aC0OGuvMpd=>@ZF9Vrd1!U4~FQ2{k^y75D6MVW^2db?#?lcNk;uQL)(`%=(3vFrTdc;))Q zm++o)mVA}bG5Z_&YHEP$?FQtU&^%@b?DO+8VU-c-X81s*@|A1d{3H;k^myL~*&GKwCu%aAc$%Pa8#m1)#hcQFs7sJRdf_EV!sykmp{fpfxXJy6oM~BUV zH_j@i7Ji(icMITZ-tZsNG-noWDv26$))i)5x!LLPZO*n9KF6P*!aE?7_zA(KxOM_~JWSR?7O$!YIVXs2BJ+F}vmJ`fF-F_qm$c^$A;^n3kCKHInOC z2ZT6ml=!E)d%20imBK(_!4X<&bVEZl)D;Yr0O;7kt2t>9{+N1dH(ob2JN2x&**W!R z)hEuHGkxaNv!>5zzJAWsS<@3|;R^mN7{N-MHT%Zw^s_FzeBzmNvs0&iMREDx{#%0_ zFqINoL=5w5)Ze7dLTXAZ&O&(rZqIyN08p^AcMnSi%!Nf?1& z%=1vw6Vqh*Bk|u3ruCE3Q_baR<0_k=;)R2h4WPE0VH6p}A#)0mLj;v3QJXmaSm9;Q5O2JA` zYV=h`ZpZ|i^xaA~KjH~DpH21vD0~cBOfz`9vWCta0iX>9bjRzJP#t*37w9e)t;=KK zpqv2&tY|79lIbumDDnWl2|jT18JL%w4uOm!HGu@=?iOJ;h#=4z!Nz-vDE;8!c(<(p ztL@l;V_)tpb#yT`e(F8=@^jnvqCohzbc31LyXQ{?VmF!46F{TumuJ$u6z-OiR5-#1 z?&j^seZ~^p%|B{aKXErVc&HS2bCVm2xLbp>_$^)8DHJ0bVDOyk4MRn+=w?R%!GT0_ z2Ov>MijMrnqsDoDk;13_glHa^QNEX2N&*?}nlztR`nxLfc8uBlcI1cq3cgJJ}Hcv#Xv!$noV zpaBq&q#l0mQ_P=tKza+G!yggU_G;MST_y(X(BP-`5_Wh6zsX5|_NwzaS>#SdX7Et8 zTMa!YF0B|lxS{Rv%W%7b+5K_%s(-}IX$`8z8b;rSji50|8>z4IH~LO z(<2PuilJIp=sz>393( zns4(F<=@bwpN#jX+gqAimU2~*(3P^toKN;1(#*G7(4%vW$vEE1(MQM7?Y-ihq6Ip8 zYhX5n{n#xg5;MsJ0;dQ2&g|(H>W(3uW8Kh?(({NP_8#q0i*CoSK|BW1bQJl0_Na!m z+MB4q;a&z*Ww2NMg|*-FMvbbeIp@5C_x06ibz7s9YR);m;DO>%CoNHM2ji#Ki(cie zudYGl;^C&3?p!#;O~E@j-+y?g5@5|wfH5|KT6t#4S1orW>a?;!_B%c<&IdS=qxK(9 zCS$ihCt3ZhzDC> zp#X=M;3&gW$qY{=aT+;~7qPL&X*8#ji;&7$LSqCT&hVsifEkxdag%|{%c10TJOON1 zCwIuC=KAH~nIsSYW&iL$dL}u^S-eOJGACTv-9R;)JEImh7S1QT!LmA!WTSCIQF12v zI7S}NBo`qT&u~`YQ|*?-7qzY&_E0U@NvR_>oJm6E{1e!ou!7k6+^O0nJix+1Bu*<- zTd`^LV@M%Xh#c4*IEv&27-#8AEM4u(R05u+&GXI47kYRK_d@U+SIsP!kV#}TgIKHd zD}Ib;22kY| z?ceUTy@FH42?L}VOL_(r^bD`9V^9}xBS0T6E3oE|wsoTs0=I4$J*6FDt(K}r69}#_){&5pLuRZsve4i#fX&l- zxpW1fdbSbuP=alRT2z^%Jv@05e_P?n)4OC32M1Glpzt}a?o&`|LRlI=Rp>Kor`-H~ zlQVK-&R(vu$Ez6N9sPM6L&JJNW6z#DiWMw(sKBFzvgZKGwFPz#{gbJ>x$lEa)np_p zga0?tCp~;PwHrR>1cwmpJvLjmN~lF#J5I(L z)^|H9DWmdCoQ&1q^xU(OuPFX+(x0sPH6MC(NE*_b@SilSy(Pib{Esi87VB@wjrbC+ z6Q50@LLP#V(YQb5@Qt=#9R9yTmwzA`Z4&Y{b;8#$JQ~yf(YSFknn^z+%u#)brZ3la zjJZhTiHC~+Zy^YYaJ~8n|3=FXA4I+|-k(lJV^8-D2ZR6f_{f&s%sf5=^ynOBN$1DV zFN>j1h@lr{x^Quho&l6PBCP)qWsqg zwXdui`hSY*{9My2N)t&pmsyP) zm$*Jcfm2hbCSYsTd)P1N{j?ADqU`_X$|b19RtlDzq-fkeb8BQq&&hES6E<#s4QFb zb=jAk#lHh1ypV@Xp_!x&azizyngz<0y(UTeh0++>Jd@KwgWz5o_w`QZm)wMh5wBI{ z6jVOU{W2_bKj)^e>C9e$cnfjKQhS;e7dG!U;r?yv0ogpih`;+Op>=HUjFn3Z<-up>eS9BecJVec8DD{P)ok8N`~n+SU&0pu?F0 zy~-#LI#8O^EtqTC67@q02EF{v5M$NF#yz;Pc?}ed2*a~wwCz7<=~NKJinr+0;3n)7 zsttn5C&ZffldXFMhF^mgN)*mTY`OiY(-(Gt8$5`^-)r&A=!$f3LW%F0aYqhxjn~f0 zl#907K^MsP7waCae;nSvUGGKzJasutElYc~9Nr$)*)a3%lSmq! zYs@W9XXDbC_*cfz6ZWPcyr*Un4GKT)#+I+$V19(pOZRio<1jIl7DpmM8HIt<*v93T z3bpSZuG6C1dz}q>{4gJz{<1~4_g(|^x)Ck+v>1AgE|>FDM-fU`)8?B>broXvOy|}e zybqP}tdI_k@@aGxXk+DJZ|eu6Cwjp{nbceGgd!k6wo6{y`{(nf%P``oHKM6N(6U-g zK|9M%MkU~;orm#&j^57Xs^HbTQtU^%!B)8A`}DZ{gfkOzu6bDH8F+PXfP}VcBOd0u5|2vOnuc6bCd_!5$%&A=@c;@+j4KYO4Sj?j+lfjEpfuZO7`W_ z649&L0%~e~>pv27t&3Q@QG1=2WTS;qV5)4}HGM1FnPUBWfCZ>q*SEXuVbONV4U2}B>q16r9M@Ft!P>ai>!zH>Gy8=Ew;?ha=>`O z`?v&vTMTa7d$3M2vCC=y8s4J#1z(jnL6E~Y478I-%b~DbD|D}ioB&&>+$Q6mS_+28 zJII=^#~2D+;-#N=+L^|O-yRqOO_Pl^PJRG(4U)}psgzg%xtH9F6=7pW1k%RvyHurt zlFGh(m7BXu#nXeNZNU;X15ZYl7^F`7tN21+KzeY};!Nvk)(WPh!AaBw5T0{@o~aEl*32P$#23#57;E*UJ8mp z*Pt5TmabGEnbhy;-Y1y20v*5H&*fPmUo~DP`4(o-ax6d8ywY~D{fg-;-HK~gjLTPk z8a8Kcc@S(YiAoeuAHpS$)Os!m$h*^7HbfQ_=_`5yRZGG1v3-?E@6UdpvR~>=FZ~3v zSmZ3F^Td*VLdQ!#@%C1@M9%8;hyTd*ljRR1?=gPb@F1a9?sIg z<+v}mP7c~rqh%VskbK#VSn1u(rE=ny;)qc!K(bpBu9msNI$1Rk4T21`=DW1v zMzy+Q{1$d2zN|NU{uxP-`%hU<@g*>Ek!}lUu1SJ|SU({ToE#9#OEQ;ff(}xdV`6ZA z;KjkSm?Gb3_T`0N$r=J+Kn*hvI6FquYU;7&npRWT=iFr?Wp6w?pvOyg;uy3oU`8o4HP73|tf+(IMJYDK`HT!a;_#|YqDdcPyhHgS20B4X1L4BIMzs=>-YPP+_68 znd%BJe-&Oq0El2wpE-ZKQ9kZ+@gccjjPgnSqkc}FdFW9dfIaTqf%@TMstg9GEVk{0 zMYSrY{VK#pN3RBF%f0*+XeYH0`#H(fWRtHPfG(-;%yc}15yDC6^=>Zw1rp2gUzfS3 zi0S3^uFs^_q74gs@GBOp7=;!ySjBVPtQKwixU}u#4j!iU1#zx5W-zS#APzz;{u8@p zIE6HWaa_EtqG@U67uyae)&crQ6yxZnfMSKH+!cp$nEMI_d^lK)qmc>91iZaVLLA1? z-}G@9heDHkTXc>l!{@RX`hQt;oBu~+=(Y_XoBzY~0?TAJ|7TcqJO5u;bh~{V zeYnSbZ2l=LGLUYU`y-2Pm-~=Kx67TNF;wPbm)l{{?Q(x+(e33`T0+aZnr}X(lU@o=4HYp{l(CC z=!a*+*wDe~?2bBrq*CHN2-`$;EL4X^`81dwOfOhXZX=*}Tt;$R8wZzp-2mDdNc)%qrvSV*{w%o0cV0v^g^FvgytgLD< zy$7B4B@(ARrYFa&FwFY8r)5Ii4Qjp1y%m@uPgI>{cObEGj6=++nqU(gJ_}rl_VV(B z&L_fE1H{EmD*L+h&?25@lv&MvmLj4OW7~|avc|L8b+nzjMhS77=Fq*DDYsMs1AXhtIi^drm!=Z%~<D}{x zt7Rg%*?O6^^n*Qa>RmVWo&a?KUi8sBbXf_{y|9n&h#*B1H*ney$7}=vnA#&)SMd#) z8jIGlA7s-mj$=qzofymP*wj023a-DNmnH>fuo6r-?TXzVKefY8W5_oxck<&Tn+#Bc zJOxUHsj*Zs7i~s9V2|NHRRSka1&yvjxD4U6m4MSQ{BJ{UnU1|q`xW4`6srNI&GE0; zj>WY7^iHS!1mUU7_!nqTv!NUeK}K8&AY--E6F6k+->6R5;pb;0GcZv;-G?!9vJr>h~^O68M#0Ieyx8X)5Hp0>{oObxv}5z6+XjwP<P0UJKVMiYo`?BfsIfP#QazNPi`6DH6@%!jynr2w z+U2Kjzk2lK(btUr(&*;EX8KfF3m-3Gm#H zMWQUgvzjZ{rlyq~oyZ5%2>?oNEC3#8SktrnMBtd{09suOnii?Yp9i#a@jf>p1;92Gd@>}s6~}vqcUH^eR#1djxD_mGDclM+wR{+>`w-k} z8?Eav7F3bA)fHf8iGWs3i~L}iKKBqbu~Q>fm>N;UYGvUPv_LMv?Os$R%9n09H+6zB$Pr zcVGclZLq+ql?1Cki5Nx?huZT7vw9z0Vlb<1h1c<`UzpW6?!)AM>$p;F?92Mvqpn3% zgIO)({#7um%#j0uS&dbI)l%7(e?&2>=c~{rR*1^WahR3C99s0AnA=rOGn1XcEKb*S zyuC_7joyow5b;C$!Xl2qcjkGh>EkdfQ~sf1R*j!fOx9^$S$~RO(fT)n#&(H@6}tY1 zidj7x(|*yi;xH?d{!lTix+7JMx^#g@;3w-Itv}g}_8n99Xw2&g{;)!nf9p}nSH}Bu zz^n*u+L)EBU7&GXN9P(yiN+ZExEMNR)N=VukDd^3KpvTw2~n)d z%;Qa9~@)M)_3t%R3%z9RVNHw_FCzm|Ng@#!YWraITxb z3Onm9?%M8)=u#cG$MfSM)Nff2JBjK2?zBf;=W^(QY<2UO_PYPz?tiEF+|OTzt!F2x zu!7^_6ji>5F?gqYhaX&5yARNo2hEZELgYNNw%f-a2>34oBO5k4*w#%R$567w?tNDg z5O~Gi`Yz6E7oG)|VXkw%tC~^h)AB)qsYEt*?J{&o+@IM_=Wq z?uV%P5c4NG2f1PN1Tdm+)^8R(B|qe7@PSLX%IGsux&}Xhah?gdV4j~3wF8K6J%Za2 zvYWyOkS?L54lCbo?l?O3YI_}*18_kgy)N4gNdj|{Ko3Mxx&I1nsohdX-m7fnfI9jV1YCe$&HR8< zO@fy(r89w=bb{!mpz1=1Dz%k&G9?~ztRYu5kjNBEz^{h7744FOVjB3yL-e?q2pFa! zbpVXQ&2OjUTvQE*`(JdHHGyg7gi5O7_24flK0;3bNDbv9>59@EnK72qm=)PWd zj>x;bv)^{#JPW+U{g>pp{D`x4WpyK<@J&EB9w#Bx>rGi~`Z(^i!{+0&1Mn zL>J82C(zQ5I7^mGE`9IXe5=#>nc$=|zWO!lqYbASdt5N@WPB`K6-i7x8kAam7qJag zri>#y<&UX!gcYY{u)eSkX-l{*Tm}jNTL82(ZocgoC@k^oQ_&j5o7l@aoo9fQC@2H* zGTAvCRabJdGg)CUUM?yFB1OdvMqed5l0ye@=u%CK_kbq?Vu$&>N z?12Spi^*R4Rl1?~^Iw4$3$2Nb%Z~!+G%+cfip1VIvo#!DYxxibnhvM zOec)Wub6g0*Mul%-~rbEtxo&z896uRVaWmJkYV%ymy$qvuC>L2Nn(kAF{*( zv;hh}YAA9+bir62MP0N6 z78SllFxF>sVvf=S9*(u_83azg%L*<0Hm*hGaDNJXR+EGDL#?mxfj;3kFymi<&Z;gM z_sbM7?xstq2bi#Ul8B0@!e3+S$a&RHutoF&yWLHk3244`Xo#-XeT7T#NSaS{d^D=U z*AL#G;Cu_6DuDUzerhvcduW6#-iP^1uH%bw2MxXTXhg|7?4;u-iVNq^$ zD<;%7@~C5&m+F$Y9`3!JkQ9#r&!@|luGTz93SiPK#4CUMVl zfJ_Qc0#!8npslk2Cc?Th#vNZTku%Hvd3f0g28Fp z>T+>U3QNrMYA*a-&9txKaV+*X1ka4VS_>oUK-wt%{TuuodwWIOVOI~X%MVygF@nz~ zkdCmD1Ym~BBAzncY<$>h`wdqNCftv}bhpd5L_+Qa3)UF1{7}aCT`khwr_+6#)3&MY z@GlQuo?JHI_QRG|{YeqJ8hu5)unEselQ)1Bw?*?W>ykw`^*5wOeBrQ< zh8@Q!iorhFeiVOAdeeTqdu4c1Db(LdOn`78?2h&5x{Sy;b81Wa6PuMPP10iJ_PCJx2)BmW$-^b=Rrz*8UGo7AAcao+Kta|;(xjL z%VOwv$I#<2&7Z`?Ul&7vB!>P%4E=X8^nn-<(monHl6MEKQnkEwez_vl)^tG|Ee-o;rb3Pl4ZGoPcjBjIp z)g&PBgG+*mf38L6cr)}F7Tw0`{==f%`J21nd~9QWMsJmLo)4J(hgjIEozJWo`afB8 zyB!|4=tHdhZGA;M{~;E(YSS;!bhahGGB1WpBXqNFj`Y24DiC?ry4G+7-4Wz1)efxw%iUxJIWv$HqY9DaDopgHMK;G{_C}w@a|; zEW~;OPJq$%Sb~+wMmM!5TSpbqTscs>h8kW)MIPLDMPl3{gwWr@N>l@s9*lE{ow2y| z@P6kF>=0c&51P0xKmjjzI5a#f+_oNgp*!4Jya~+)+$PygoNt)MZ`zLz2gSl6^_||P z%1uBKj1H^YiWVa_qM#2OoXgLzHEM3K%ZagrqZ%29Spp!^FTmR?H_G_|&OAa;n*a&! z*e(6MhBeRuXje?RXEFRSJD=i>Rt?N}`5`BI`3qotw-nCKu=ysrsizd2{UQ_Q%D~x2 z?D>?&?1*VU?6m(}VwSWR?0MgCb5R_-8`lB_$KK%F_Lk%= z^9Q$PaqMM-*w=jsi0$%O=};_A;$TDJTLM|{`Nw>keOW-8E)Pr5BG7%VkG7Qr~&(&!s zhIjxReG4k0aP-q{RKLHx^an*O9UQoQ;Pj62a5~xP z1E;rE$ug+bS+C=OB%FRVzKAAqH_lM7tgsmko_-OYDLnlJjLrx~srM)rOlkJO$*+Gt zk(^hZtQd57)pE2o=?B6nuVcy3KXeBVZL3&3;IhFrr5NR@+{cC(rR8G|Sfj=$FCW~A z!VpH`zriRSR>{IBiEbKfb2M-8PN91`rb75*>N)-|#vV_pQq5uhR+}&SGY)$+cXiju zFj6`^>=Bcl!Ol(xjdU%F>0A?uDJEh_QD34s-3X8w^-$B-BQ491VvnZ$8a%Uu8dXIM ztqBiF)71>4F4FvWh7|QBTCGNqqjh4;8VW=RQ{=B|KMqZk-n8Eppc$TYRQYJs`}#x0 z9=~qM1$MsCvM8TL+n(`F`Wbd&e2=Ct*LF-|e9jNk4NJM5EJf>2TDkJa6R1G=bHg6V z^B)3Z-?G+%b{YOh=Qfk@IrG`U9|*Gc;`0{#FBhL{Z8`Y{58fHzUVamW{c=?(4tDyd}!#R zN^HQrKR&={SI}@_fsTnB+KhqIlylKwL4Qvo0_i-)F!V)wNRn=2Mgxxk{^ z*kh|jXMdUeWiyT6d~D~x#fr~0%fx@tqTATfF?vyn=5tdFeYZuo>wAn|+?kJ!ab053 zZ9bd0w?T-Odyhr8`P`!E#FX?`N&j?&Zr07`t$er_GwtwNB>r)d3-r$;bd%5fG5O5b z^NIZ1<6*Rg_1PHUc#Ce=>t>72wcqghYm08jH})%8uATqxnD{k_$6&BH^(&F+FQ&Ic zCs?jOO+IElF)%!FJB9;ecSQ9VrhNRCCjZg_$>Q3bOk8NK`03js6$3VawLY2=UHuI_1hxXqQBxrYtFGE4Yp9~;2W?<$L+On6Gm~OG6J3Ox z>(C?p0XM4LQ7r<)W4R;jnZL?aQq)!lS4aES*!Z@^ZZ9OC{5yRZJ*!F)L&{35tYo z<2%flqstggsS}2AfrAW017Q52i=6fcm`=b#u;7BwrjI zDhU=|#Cd`GaTXhhgq5TXbW96)K}tQKv65ID=xF-Fmjy?hNeCG;9haX~VZH?z2@Z1INe`9jBizTsFoN&}B*!x3w11blq9~~T1HRSYuj}sui-MXSY~@q6v(Wl_;p>cO zO}~f3=~tMKH+k`q>4(Df2>ESk`oiTxX3ruwtS`{Az5sJkn{wc+??H^hI*EqfdquJ_4ljQ(Az}q0rh6nm${1?!I;o9IICL<&%F!o2!(CK7aXl%;l%p9iL)D>)rlHD z0Nv6xe8{Qbw4YBbR`=p?La8i;bKZ2&n5|fSD<9Kv?xfZi3zdlGr=^eHA>TUnUVN9- z%RfB%2Byi+KMAGiCb6624rE^VBK`=vtKP?jJCQ`@zW%-H9c_zG|9%Jcv7aBK*{b2& z>H6i)((fUHm!CL5GUdn{4|sWf4PjOlbu*WH6(D%@ux8iM}RqD@F0fp3g@sOir`TJojY z#5WbXboniYpg*H*)q@`8iBan`##X1(85zo?H}!ACbCw?s4SN55AdJmJ!gA^7So?Q7 z?`T}gtI@V&e3Sk!?Zo&VP0!!awqp|GzsX>1lv`Q%X#L4%x$@23mdXztHEKSxd&`!nw=v-rN91rE_<3VRWi}1-HYa2eN;D5RJUyq^R z6+{2e7&>>-g;Uu)R{AH4E66!X>$$$<@M1av=A{343?W2PfxLAG2+~?Ycx4MLh7M*k3&>y$xHsxVG4s zU86;}^ZA%wg!o}&dBD^r4Uu>>^q_Jbze{61wo&zkhQOa!u&jS;{z`E-1_h9wt7dsMj z8-WIF?QYv~i~9?SgFnvCU>YcRCO;(M+|%jYvp%&hU-=2=o=2T~9!qWU^OXtM0q?~B z^SAUoBC8#GwXdjeMDp7db+-}%v&`e*i> zW@Og=FOJPsK5==@f1=8Fe$=%b*T$SX*1M@KZrfuC4`qxEDxdUv*R^i*_T$p%K$Jpv z3aKr823KZRuLmXko=BWE_iMAVQ?JEm77EGyoMFDr;a)jAeO@+k)^$^}Qxj)hJ9lp4 ztl2kar=NA%6)&mc$oE2YdnNRe2MN$M}WpW4>djay5)+BD?b`HZm((5k4FA>h^FUndk&ho zD|LlBHGy^HvKDQ>xV`2S-B1_m^yVX4zM+@JddJZ9f@~E+KI}c> zB>jx-869JMbO!!2zKO^4R0(?jVAd$TX}MPIFq&uHFzec8Os|>K&0$>24fV}oHq9StLJJ5MVeM7@RpGO!uk}Ndx5B?6qs;AEb-otr-7rZHVtL0Qcjs&Pg zMqN=}#02z@YmqSA=`3A^)bNe7Q7+&94u~AR-vFPhhAt&mok6v@&g~-+(4G@v3bD)G zj}wO`=$CFV2JhCn6-U$CJD_RAfTfDy=$p@V;Tvh;*>3I0Dm5GIHDQ|{ya)VUv5Nbk zSg11zdIsvnEn~wicr+YW)-v;MwiW%wg#5Pt66XzqgI=DWPz{Z_$rU{r=bn))c_`c~ z2m%j)J%44DxBrPu04GSJ!Jp!JbXDtTi7E{h=SUZa^ov!c;dlegZiHq0%Yw zHTx0{bZiB*cpQf~jlpq#%>gGk&6OIbfnJtEX|!Gy9f7l+2!Bl7s{chejkJ+!0r?wU z7vkPM)q0;)r_*vj!{&~zopJA;vI{cOo9@urimff?*=IE@x1g6vABWSJ^2eKk^rzw9 zkooS4^2BG2y8hTAfBTvJo$>x0a2n1h`yFiNTP^5()+dy_6hjoirkb}bc4C>iw5P_F0p;Q3^KiWYOn_JFpCW zz~MDZV<*}^y0~}C^4*H_Tj-J3F(JRmF3`zegArlw&iKJPzVG%w?en~sCd2WbtC341 z^?T{U52poH&eBhzvD_T8gN0To6gc-B0ka?GEjR`ze7)v!5AHjxuY&0mUa{a=Gi+ku zjSOxeE3p6^lEJ*X8@$OgW^+9VCqeB$09Q@=(f6icdcrCHfVxj^)#$I<8s_^3wM?w{OI08!W;v z{G7C0{a$rOb5L#fnr=IE45Ysua$!mznV}82g^=2PR@ZLs1wHvtS1lSZ> z=cnJyejWaxORKhv$50q4J5dt4q-bXyXJBs_y~z~)5}&8j9_-%4_+7S&maox$K%89M-}G^N z6O(>?gn|CP42MPce@H)%#z=PeJRO|MO zwttj=yDs*3#`|;Fo3Q=uy@{D`+_OjL8tcdLT8@563_Y@$D7%>nZ3Kk784WgArwOy0 zm5%Y9WC9_&$9X`Jh0eKdFySq_!=mwjYtila*DxXiKR9MgJ~jBxz_>b!{8r{?`;T9o zGpg>O@rybOFlm%hwLWFgqZJ&@-C_ERep{SHhZx4K?@;BL_u+tJ;GP#vgvkc#meUIB z@x<3o9Wu#Xe)2lJfp6_)f=uwfv-G=sj?EDjk&tFDU#ZyhFsrTat81(os=is*$bgM# zH7Q&tb8{D9V};wVge8(scO$z5Ze5=2=Aa)&x_bHh>Gz$y!7r)}LwuovqqH+q1U3Dw=02M&pM!nUcXhSy>1(vQ+X0>-I z^*>CNQ1LqK1&{L%;SBgDSS_AR;8@rV7OZlE)|GTN9AsAb0bLGguO=C~9htbq$$tl9 z3YV%gurIm)sSGb2X137VZ$%S)Yn(XHOFsvfDQ)ka<1E|8m~>k}X9@5f43qyW;V%^a zF}ABlNuzqr5)U^*f$0QIxP-e_GN305x+QRv zxboVx#z(tU4Diy>5gg#$b|QwTrOY-oB_tqx=&6sNr#+gS{T1>ZqotI_92Xl+3p#2nvxCPoJC`TrJPSur@^ zZU;tyvzYi-0=wHN5d#2#kY(JCN3$;)1~JSE-_zPy@i-p$&<4k|_g&mW^FPCpAvl|)B6MfIe z?X_3)MTsCbA@Ip}B)g>w{~634G!6%>?0ak>=_2gJ;(+~4AG_DqFNhC-Aj z%9A|fVLyVaKBWE!g9EP6(RAUmHW$J|pzzINbW%Tju83B`Q&+j||9ZQ!URA06u5lSTto;at9GV z6fUYI2^-QZm#v}M@j|hLI!_Ea`K$K-w#@MF7M)|?$PD*c^g$N=O^a^p2|c0PoAL$w z*W`1YC6jOt8@jCzWb-qT?=}P`v-N%!S#%o*{((ie^QqDUl=;}@o^8?Xe6F(Sc74yb z>Sgm&gM1lSrmmv=Zjir4x*6*&5xNh zyIBz7WyoLExXrVdzhPGzj{t1a!cjhZn7KPJ7?PfGWaufpr%c^Mde=Du*ZW&wT#AzneadyDA|3$Tda z>n5L)IIyU5iYsD$xHtqspox{I9jmfaVhDuQ1nxE7%n zc1zHxrojpi$Zl9aMV(+8pQiyORT3wftQUF!@Gx$1X#ta<{dU=;qxJmceitqksup}v zqPlB$;)+?g2X=$XBb*L819gWZ5;o~a)V~drJ~R(Rp&WbqaywzCV;+;FKWKekI)f9W zFdL-h6KR`<*VuxWM_=Uyy~+d_MAA&^J|mT`DN3c8m5@qTi&P4!4L&|`Lkn*AD4xR2 zo=Bz{NT!tde0YJy#gYAx;yRH?+>yG(n>9$t`=L} zS`I^0c$Ib98BYWqEul8Z@61X+Kf;n$AO+)08&Mp8RAF#5iZ^5Y;YgAiP2! za4%!4M%{<6_0P}~Ct_L7I8Bv#jFp?XlHLdnCxx42(y1mWOaA&u-gwaejhD6N41Emc3rR+%YB8&>SM+4qen@7Y2~<&vaDXPFk!S#A9)~7 zR*(AqUBE(@<;}T ze?zXvmuQ}RX6^>LIwI>&@!6y|^=|}??Gg>0y8J_x)!&V&f3z&_x1()GUQGH!mDP>y z_wl;GgO$}+abu6LSbctB3~Hq&p}pa`7oL zx)}ORptD?~8zyTXb1M~c$_mqvjbo*0OKy&pagD6pdTmjvE-4mle2Kgua4F~9!J9!s zJBbLS+cNM@q4tf>J6jCV_`XHAWyoa~-Ih6j5<`E)qTBhr$pUq`Hve^&3~ckC)Qbp{ z+2u~Q=ypEevgmd`yDYk$&&M=&7tMdVMYr?$UJQMsMYrpFwSG@9f16%|-wfnkH;Mf2 zuk3BcCoX{%4?iJMhq_`hviGR^^UtH?eK4|jxHyBuM&Z)vifLI}jy$&+MX_67U4lqH zoqUOJET}U%OEajXo1cTb^DrE|&;18)e~$|ngyJKd&ZCs4!Wkf}hrA<#wg)4>I5C~) zCm*0cLws$)ab!0c;2~p+T;PATF#`f<3m??U$>_VjHoPne{PbQYPiNrRkB#tB z&q4wp!;CWdR$O4O6l2Ci;ldA6w0y6ousM_mr{h_$ODT7}vL!tnEFlR_7imlx5;vYx z>6>Pj4<~U7iTkmuhk1g+kA++9MQNCaC*W{=c+dq&e4gl*L9xx9HlcP*_6!y^gVOXA zkpNIpcz2UZKr|l%o4@X~ElxZ8pT~~cIy4i3NtjGQ<#iKT&B4bg=g!(iUgCqI9SsoCwQE_(tzQTNj`{X)GcC-4P{4yb-iU8`x^B^ zPUs&TTZga<=nZg$h~F>;?XG60wzEa1x130U<3u7Q81$zFd=3U6%+#sBI*c( zm~&2;F&%RN6)~ZLIY$Ih!H5a@tM+sc+d0fR9`C#N{cqh~3-+Gc-CyVK>gwuh>?#h> zA<^20s@X$l0<$l?`i07f;(S2!hZ@Nr0c}N9p;XJUtn|xi$nMaP*}ZjY4Y?*)#$^qe z+E>P$X>Q1GxW@X9lSSd$S*C4qR;1!VwF~ z#}LJrWrLJSeqX>+%Dt4bFECy52<_m&81;?2*Oj}-m9x(bSH;RdP6+^uU(l0aJeC%h zu<=+q6bC^nzJX14+^qLk46KH#2~0u|(M#hD*JinQHEOGC(mxEY9zYHRW|iCh2gx;5-E8UY4p9u*xVfhUp4_=uDCCX*)w4r_~AXQA_05n*Y-M?A^b)MqXmX6(yMkvk^Mv zk+4{G@dr4zMzn`_q^qyfKB&cuVbD<)Q27J?*MmRA{N3=H*2te}{NbvYlrJp(jI3#m zY(p0;F4QCDADbf!&+_jLG|FbfTbUd3FRqc-{fld47XEkF$lL-3vXeHFQnIjj2G}ufads2T|YTR*~4wGCe8Fe*R>KLv1G; z_nXUGi*q~Ns+B+ZV)t>H%|HB)`i%{*&2T~kB(yk zqi^QX`D@kYw87&r%3phq;L))SF`T75I)9(|1dqid`1l`rvIV}~k$QBV!F2NJ{dshLywf$%YxBy1U(Pmwiw@fwEn4n( z5cj`~&ibjUh2x<$kTCqMEW*S6AD>%`!UjT}H}_<+2)bDtAiw0(6)qMDaKIb7V_zKv zPXS)Al{Ve32wrjTU%8}5MQm?eqKr_#S^$3lq!Cb zQAhu6=~h+oOeh!cijzM-~{Dl zlfMf*G2R;@g*Dw#F2CHe88-Np+4L73<$}w+UPr*Pn%=$x@!?V(%D1Dkcm&E^OXH4m zxfe>NFM)o6D?7|D-tCTsf@LeGMzLUC=i%hpOsOZoRVVz)zN3yN0W>qzNmOZAM{M9MK-G3$Mimg$7ym zIV70`I6Ma-3P@u(Ar(k==rwDsvbcP(8p9R@dM##YU=A5NkkkRL^kMbJ$*yR{0GLUB z7ihGg{}2EY68P;2YdW|=9QpxMXu*ydgeUx<`+=ee-W-K_qQyruFGbaKT8W@M1DUUY zeE|TKzCmqi&I5ud{Bi)8vFE)q(Y;)P`j_b*(BhBKAWm>*;7i#?4aT-o`_eE3x+ZsJ-E zSQf?`;INcXG9rHf=5wJQ@F zg(Tk_tlO3iDA>T{r$A`uLZ!ZNbKZzrpjigp7b^j->Z8T)aNl3vlnyFjV>anXS%$b0 zFB`Y8eQ3^09EOvlq>1TiKy84?DJ~rid4Sw>0Ovu2tm&t$xNyY+BbB;DN-2;U1VB7N z6Uwg8wme#tFEcRDY|Foo?!pr@efwF=1hXkhidwtH4WYKfAg@&eTg>4MdizY zwqOKcyB00i#!+7HzxDjEgDw_EnKLPS<=!;uNthtx3NDW_p2&k@Cu4Ay_z|2v{2`sP zut?(E2=c0UYJUA``Sa_Cy zZ=hlR)!ifN@pttkD)abkKDK&Xm`wGuL;o!N@5+FpaNz~+cV$4{xDW$(QTb5)S5Lp{ zgW3!F`@bLq!ff(oK-`!GG#mI+?`uFJ&Kl@VHPG8=plgx=4bb3!v<7;T2Kri{W4>aj zERq{jfriXZdHE`n0gd^|N~}^Yq&iCQH&P%bt5HA8&^L@P_Tis;;0b#EnG|TuUyFgT zT+re0hh34$P}aaZI;8VuKr?B>Mmm2Dzk^5T%QA9#biS;?0Rh0_1KSphw+WAqLo=g? z@#t7DjJ}LV=g0e&N9W^LqJs#2=BJ-8qv7M+=K1HB&l?_{k8i@0x$yD*cyvB~D38v^ znaQK`arW`(e4GkA*$uzke0X$zxsBk_`8Wr7bUw~I9-WV4&Xe`=}s8U5gqk+)LLY^>yuWX_jl*LhexRRFU}Af^IA3Np`N$rV<^l3idl z))0-xf|(}n(r-(dLmF66eA`YT*7KL_$^u;mCHoC=!>9irqQ^Xe)5N- zkmgQ*_s4Os?F_9r?HHcgiodamm{Apg*#G7BCeg7m4_)mHB(`xau z_~{VJernvG{nhZAcyq>6c2vcrd||vbBWvQ#lc`4+>Jjsg!y60#cf7eJ9bbNzH}A|F zpIBP)sa~v_cykv1cX{(vI+n-K2yq_7ysPJ54`}7B4VVu38u-q4>gnfyu_K*u>&-8BFL`nRDUxUmY}ec-P=|D83^`)Z&^X`m-+pcC~?RpsxW7+2Mv z&rejPN5)O7{4fG<^R+MA0R6KCW4`J$3(41=CNm-3=&(ERd6OL+Rmn#pufZI5(-Ztq z_m8Ie&|y2~`^Wx+4*g?WX1p!4$&7S95BLLqqeD8MXN;!!NayoJHt-vrI`8ADB&+B) z^tZB9>E@cv-|w%vHE8gUb$yF4k<@u}PZjUe{AWpm_KSSS00PNjM@22WlNMxQ}SFryK<}a(*2Ftm(n<0b4f{`dr|)zu;YH28{wnYEtKl{APTb%I zF$Sq6fX)4ktciCjq8@*jcM788)9><5cp$kvr(Ud@cqbPAcX_9xf01_zr@Z%OwM?j| zU+uH%C;I!pz&qi*S|0CY4RrOshMB|m%IBT9F$-vZ@K>IHO}x`^4gO;^(C2BOQ{IUu zjHI*oPkfS!Gg6ZVau?C4gqFX?F7a6-RnW2s7zf4Ys>b}RYsTkg=0m>FAq{ye=C0Bg z>_&V!&Kn+`kJFttO!UvEM^L&tJ{r73hyMAzk|th^e_oBxbJ-vWxL@V1oEy3|0+veU z{!Vwvt)bgLmMab6Erz_g)G2wZK+f2N($YkL9L!9}FMzBFv_15|>|rX{ib#RI_{h4h zpHzF%{_kN&_dHs7i$50uX5Yk|7KK#cmm+ic0H!23;|tTrLs{Z6nX`UZFgAaOM{q4r z#rSN0MU+4ucvLdI5_kykdLc=~r6U-%5TbSlSTSU386faN_CYdp8h%%_t}aDWj1H&$ z6(j5HB(>b|b3|N*3SxiC0whV{eg@)Dszl_sKnz9n6=mk-8TnTrQ7QuP zt@)TR6+sF<#xPb-qkIf`Iwl`$iye$R)8EQSTdF+JKS$)t9qIpXm4|U92Bmxy&yj{8-f?pMQW;^~rU{N8G5pxIJUUExhVP5AL7E{?%jDj!__ zkLyC|95#hecrgr2Ud>@=aBNevhcsl(+zxst;-}=m3|Geqj3i@OZ^?q*)A27W7JaCT%PuG>d{3Sk_edm}{v1*c zD&msqK2R!>IWwSyrHXMy0dlywbwsWSY~km%OYpsqw&jYS%i>N6B2C*0d>??;Y&HnI zZ{*L0@USl8{J`&msy~e*?FD8JWTy11=?y>EY(Qx*@PD8yGtH2i=3p>gjui30L~43U zW}1y86CnAyo&#fLZ3Vp_SjtS(kqXbNEE(dc4gP{k04?KC{RQoHWpOu1dwE2z31^?J z^qeHV5x49aXOeFNc`G+p$^@aYKY0$A5KR8xO>ZzuZ#dLKfMO)*)Q`)fHDSqW0*ebY z!QmF(0{4G&db>d_l@+iFD_~1i0r!IhLps4w<~YmzBhV7y2gnb`!MO~s`Pi^TD=YMq zOin9OezhPF8_K`8yt|q3({IVr5Be_|AnyS|M}19ZPw8sWknQROilaWV;(S)#eE6&3aZQQoQg@odtNYb7AF}X1 zYQXB@@ppN%3%m2>Bn^*w{3r7vyZ^|6hG!4;_!+&tr{?*v{K_eB-a}jwm-3%uz;y8E zL)OlazgFj&Fl1E?bhgw{&YA32ITr^Z2sj^_bS!gh^K8w*?z=)dwpB*waNU&rH_owt zCzo~g^!mqp-u-wDz#HNwL@Af`>CW9r%-NEL`+UG)3R(d6{FDY(s_;~n+{{iAp9S6n zvulOia|1&hKJ}( zKn*V%u3O&)e*Hm{4{QkA01O@j16@Nnf7TVYoaOIipz4>0$paa!t}FqpE91?^a!?tJ zI|F0=Y503BoUjbGyrp%~Bn@m*>vC3?so)caMKe6a1?SAn;GSeSWk(Izz(#i20Wz@l zWUNeKAxs7U0OqbgvS>lddIsig$gA88hGLdiE_VepFm2#8?KR_mGPWahuGj$C*%~}n zW23wmc!oCK2kdL?>1!OW6h?x-|5E)tu8gp-s8jEkn#O)M_VlCSa9xYVjbj)(CXdrJ z_OrbirSG!;zdH8+YIsfZ$S68Ub}WmUdt>QmWSl$H(}dqT(z%c26Z2o**zFB;8Wp^i zIi?@@yYfgOZ#*eO{c~KJ<}Mcgcjb}&Ftgy8JQ`&+Saz)ZSh;9g%Pqly8657B@?Cjl z#sALU(ck|Cc_g+A{v62q8TsFsgk~Kyx(Q^ zKz}-!qPnjSA_BKi`QZ2&zWnb3kB)g}bL%r6oiEQbq!o?Lm@m(>q5ctr-^97(hm|u& z!>U-hNvizs>f++z4mUrzHT>uIKk%3O-dsAoVgFg5u)S06?l`bd=hKy&qhaIppcG9_ z2BvTZ`so&E9)^_4(_PPTX2re+C?@0loGJ6V4kq>N#AqfAO~#`oN4x}p?l`(ZfuI*j zhl?=dd2yfBcO84%SxDoa!meXvDomN&5#NVgbP(b-Mhi1PY!iYp0XX~%dS*u+$hni=rlH>f5>nym;d@d8-T#>N{4I} zpf`PEwtLtI^>IxT50Rp)453TM0vsRkm6HFKhxloLV3EU9eZJPTe*D$&Z2joQi-UWm z0~BjV>@&@dYToyQ4@l#WXXuyd=zHT2o@4oEByV_8&l7%2#Q_)`n`^QBu#Q-GM(+SL zmL_;rxnI?D3xW{kg=czdDnR<8?pG5J!om+x15gi-ztzhQgLu;hnMwoTJc31{o_|d| zND<}X{y;FEQ;(nb>8Drp_rJ%3sP{%?(nMSd{FF@Yhe%Z_W#80!6V{Kh-Kh6r45f(& z@zvnJy9W9|4fN3(=(9D@QNCVYI?G0RDtK2i4~*COyW_MPj^481>f90In>25w_8&Vo zbWB9wLH&nPn{R4f+2*P<#tL0_e~`pNA^us7gA2Pn7YV=$}uY zNE&G({rMc&%%M7Bz|ZD)2Z;;^Sdguv!^T5$ z{&4u9+~wi+iW$$0H>Bb9X!6stv}f9AEG-3dB;Sv_1XB6JAe8V(j`^m2jw@;*l`A^J zZ-2Q0O@m9}qTon4pc)OQMo&X2W@0|h#!rS%*l$_O<2iAo&Z<4 zK@F=8yT)*6l3ke~FvBCQU_tz?)FB<-%8tLn$q>md*y`Xss0>d*yI8^<8iA{(74RpI z4~HyZYWyLFoJUM6Pt`zdpyBfx2;Az1+J?aQ%U2G;a!F7YPXbqXc#B(tvNRKp;peR4R~uWnbQdJ>Yuv&`AOg4?B(Du!@_R1BFC1;v3t z1vSd^%dFu@O9Nse0yr&AFr5XbYLrn*MR0={7HpC|M268$IrMihk%yGJ2GWp)SkZ75 z7I*JD8A33OlSR zSSY=din#LNS}r7{iX=#sSg<)xlWaeGqePB@v z_)OszY{oOC*8R%n0H)>MN#$p0gXPLD-wztsU&ebHTc08r1{)6LFeC%Y=8LMS6bGlm zUYasN#euMZUWvT{DtSqMK1=}8a+)NB^-rKmt8+2_CZV$=aoeB-SX01ukn_kN`h|Z@ zWBC=Can zxT>`ON}{FEyw?64g1h>CiE>!@tNhY|fK5a&AhcCXt^=Zq2q9hq5M?e+P&fXcHx7tp z!v_=%9X=A^D!=$rN&FD#Q);V!W&L%8U7EkFzZ913J4aUm(kjT%qc7H zs#LV_pH!Z1zBjbfe{=oi-vc{uXk)Ri-z+-(fL4@0Y~|3w2PH=dX4=QSp?f)G!I0Nv zKaQ8tu=&Exp|Is6(1jTarWZlFjBfGXAo=pHub6 z_t4Y-vOYI(^|_&L@CJ?b`Bzbub;i@s88`ewW&RZ!c0=R*aZm)x`Q~4!&%cTWJL86Y z2}Gl+Ol}V2>g`W83Kf}PCMv5;BdA4DxwVLTdt61zY||1rh9+N!-(r3}5=r7}V1@WC zq#W$w(BiSzjv4TCHV$L+`*SwV!`>cb<4qH84v(hU;8HBe_&F-Bg_dTjvQc31mu+Yb z*M`>A4PNs<(1zChi)|?XO0jyq{?8Xk{s}1ipV~ow2j#JhOyz7KkH^s~KldY@fAW*K zehoaQB3kJMS&Dr7&p7%2t)n6lVnuy+qR+SVxfbVha02R4P=Wq-qR%kp6OzO^CL0q> z>`VkvCIXS6j&3qEI6LshWURH27gxzx=ZHGS=_H92TJ2EAivE0+kYph)D4D<3cs=AC zkzb;AhyVB;k(?~{KP!Z_fvjUOsY`vlfrjo33IKRcT`r^U0o|g7X=CBI0~owQV-q`^LN9$LRgHSHa~b%IvW~)5F;?U+VAG@yS(sG zH2e@X|1AHE>;*6CdBSfdm6bkRln<`_u#Q-GR(?{TVf^au5sm-v_JOet zR`+WPAJxkq{j>1>`GMhGJv{zaFMAAf5`n>m(~sB;u??x`Uy}^hg$@v=Y7wga#3;&j z=Mag}nCx62F0$|?({l|uez#j{aSn4#Tz#GaB-BIO( z8w;?X19QT;TRb|B0gTSN4h|1E)G<2$ybumyjBZKWox1;hl#X#C>%r=b>9HW4(cqOF zqvH`iaEM~~uX%K2T^QYp4vzSlPv_qmisufP|9(9GID|3!SstBVK6UBjp`M;LJUSnz zCy&m@+0LW${qyhjz$u-j$BqiHalCT%kGwqo@x3#jY2U^qcys9}+j~Mi;mbbV zKu=hfmaFX(2pday1 zD{UzNkn$Ja83W={RCtp6rQ~r5Nr(ph9`LFZvdV9BD}HV-Cgc_fOe9I(5E1O8z2y#f$O3t&S}dC3OKh_nmZCzr{FB4=sd1X#jF8JWywjfsMz zl|Pj^MPblhsuCrMp8_+Qx?mJkwCaL2js%Pc3hawUX`ff*hN%`P2IDeVCeyRQ#*h#I zGDDvDuiysAZlF+-AceF*9z$uMz&soT<{q5D{DD09G$&j+T{jqvZ(xc1RbHUPA3*%4 zL4K8rBazM12FT45%B;q%uqQE7rw)tfMWh#ls`)2ar!#}7%Wrl-iaT2jV<+@BF z7P(<^HC2XT*HxKknQcab--i6AT()_#vVv=%)JEG+@WK2?+@^%e)P>)Ye1D*D=|kB_ zBx;Fic9iwt_zv{-pOlS+B0s@o9xXxMkp#+kS|Ig6GaCPK{j>kSWFB1E@T!f^{~=kE z%)^DwT^)HmCBEuXEaX?v*~1^wDNBbW&arc->^FPzhHs8k5B?+O?}m4UuoyqifqZw8 z0tWGk@NT2_Ta(Pgk|xw!%|FXOBWsd*#LzjLl@tC%c8rB*bScm<{pv1=#{auAk9q0^ zO(Rf`3;7}SvPZ8he195_J=DYFZ}qZAzn(OsF*E?O7}%uL^N%c5dGQ~lyw-U5&UfnZ z^S|-m(ciyQ=7Guk-;ix!|K;n-v;JKT=<0nNNE&T-G}PeVR|CC|20F?BfawcSTl{lW zwqX8A62M!c!$P`DkL;fb1xR;D4?6XJwM$9n+9ZBsYnTf>I<`edzr&;R{a2$64cj)K zCuV1Akk0qNpXZ;C&unC?`;Voa1|NL?%m$FU|3f_g{Pbk<==}7wqn!#r^LhOqJUU-r z%?A9TQ|I-a8@dDcUglKi{xtCP?hQSZtiH{!pTWPv1_g-U8xsNl@l1hFH!!QlS*X3K zV&>s8$tgYH#!xt8fQ**Hf1&_RBtWPqBB{eWyphr?Q!4RKqt~bd zUitSD$mG}9y#$^C@h7=E3BX$KrHD%YXq@)spVZbAlkdZZ;*&f~N`OLKl{?A+my>-$ z#kHz-ppS4ysR@EMa82;G0l2+jpq&lgV*n;|BdE#TWS{O}0T|8Q!IknV^)v3W&Lx;h zxcTuGKH-d|Hy(ZT#6yuT{_qb#_Ss$GzQJ{rXMOF0u#{9PYH*KcBK*dthYPCHpoJzL z=cTrw0)4a6bm|jB%dh5a;DSL+K@c?}#N`S7L-K%6$77f8QHv|>Dcqmu^0U@iGWbLt zrZOEf)H*{ovobw2IFepRsfqRu>Ig4lxB)*=w=C_E7T(usgE@rj7pc|_{E$kOSKOUZ z`VwiR|?ED zC?rm4CY2W;6hsL3|AD?5R2)4G0;p1d$ZSVE6AA!z@Q^6@d&t$atn^Z3hBUENM*_$SJ*VaR`TkkltMUELu=}iKvFr+2Cc2 zQp~NIo+OthEEj_>(ju`068Ba1yRZ#5M(fSQqo@>l60~ z4)7M|1D*KS9f)^}!VRa~8V4?@gliT3c-3AZt=CWvaCvR$(|4fl|FKf?Y)j7iV&fMl$_1R#?aauC<{tX&Y5#!_i-v;A}gE zuLo2gcZ#)u$=;T8RF4pC`zaiXpHW5 z0g6#3GDX;r4hlQCr9>#jIlnTw*bWXmgX-O-$lKC5IO7b~w`t_=cATC(6qlv66z+`F<_t$*#HLcY z4*;i`_$!r1e;trjsZZs@g+}zdYxQC338m=jacNqsv+(_YO4Xm!ig?JBsXMlhz|OiEf(L9v zELkl7xaL)_d&C-o3k+}uY6({Rsq|FNfAsh7T&rV#%3G`BUJB|hT%l>=#xnZ;@6=Dg ze#~FPb7L{kuzw*v2A=4!y`l4gKlQNy>FqVpgMp4X{b&VnV=&N0YVbcp1AUnW`gRTU zLmKEfJ(ZXK`x@vkHPF9mpmTZ%ePNScDTZj|)<~t2Ko7S?^dB%bbVO)~$|5Lg6JUs+ ztib;yr}#-@A*?S8@V6=mHK|A)NV(IbbfjUXrQm*(fK$Bcy#{$XjeLcspD%?{s!s%ef=6dIv+obN9XTD zFXPeq`|+Q6bR0WbIaty89plBaV{}&@onLMNJUTx;FL?Ro@B7*SCOUN)PDdqKMUSDs zhp5r7(BHGv=xiKe?UZft{+%qywSn6|-rr?$VG_K#ba+Eq=@Jm>aI%qXAIU;6;RhBD zPs)n#N)tdva!XcIi0cbZzymtp4j`3*TZ}+NlP;A@B=gci4kMX&QW|$wS0+Cx)4PHT zPcWhynFhj@Q(PRH?HpkFGM>2y^~*i}E&ED;vfBC|vtfX95_Wgm6Zzd`Euccf-3vSd1V07T>L*KV0}kc*nT-4(DF=G~stk z+L!q}5c*@`8NCV6Fn)E%`qba?hQ1K6yzu(v5zFzbi8o~7yQ(Ej9TtD9mmLPNp@njb zhG%;?>iO5i8!~+j)`uuexp`&Z_)kpNKj#h0%L%qE_12|~Nwd8^y0G9U2;R%nQAHk; z&(o>;i)zs1&;82j9${_pA2{_fyNqQ}JIAd-?(XX0`H$u9CwYy)n@a_=w}+;9SKXDrK|TgHippPs)u@9I2I%3?}qn)u$V6OQGmtY5x(&qOFyIGT%w*P{1!zg zM@#Av^N-U53(x4@K;v~S_@#7pDDm&+0vUKOFZ_V=h~@azG#9Y&sfBnhPG$xio;r%O2|SGrIZ{{r&T~K)n?yQ8kbGG?8kNmv_zpy@*sA zPh|mc4aJ`eme5Z&@Ko<>_{l{BUDN#XDTW9nINCby;{yN46iQv@dvWPK5`;UMF0Kd9!XyDeMq0*51ukRsS zPEf{;|Gl|aHkZkiI-xhfntNB++>Co=DGjm0O-&Oi+y)P~V|~j2|B{(c;6G?C!iFFU z`fvFwQV_;pu?8Pf`58EqiEpxmK-kgYjJG004peOKKx_kq>4n27$Aog zN`|cXYJsIRVS)(;k)OxC6V7XsmX_lh!v2)50Pi33%80xh;P3!8^QKgV4Q((FD}~J& z_&Xzo9G-b|b6{ zlV^t?b`aMmB)7#_^F?#&5xMl5-)5^W0^J|3Z%&wrM0Kz1?$c{}MQkG29mu2)C8M@j z>$%H@eHn0K%)Q3=0i9WWUGJW;cb$(vMcW74tMb=xNyJsxEc zezWI5R{+6gMUG6_T<7MkHcii8d2jV**#(ITM{7Xv`W26i7oUk<9g_C6)|?_g)9A&c zEDq00AGF_fgSgR9C+Y2ceG?d?v5Au{tHM{_IWSSD*4Dj_f)`g!S+7ret#47hV6Whc zj_aIVg{`%2dEMPom|b7oXWFRmx>YZee)Z;`YH`1_(3TGSi!<9Dd-2}Lbw-e0*2Kae z0W3X6=J5d&njY5oS^j-u>DsF1Y@6|>m<;j=K)Xf5NJ}jlr z!)u)gG#HLqoiH-%$HBIpgxU7jUE&YlVn+ao@RNVsv}dM*@h_LQTE1LQm~bY$OV`}Z zM7X8O=Ecps3VOc`{Tei{slb!sd~tnNa=b8ETdx1qcK(mtMy!1F7us~(G<34|$~`Sg z-0xfyg}*Zhaxs^RzX><{?6-8+TG*|>_u3|#v|3P{(eK}FT>4lhx%_OQ;N#?c12(S~ zWnNhmn%m!?ewTUkUBz~SttQFR+Fwl#tF_Q>e0PLY&tcT)$8+{e^jcG#hkf+lOv!p? z^D6)1OryD#-m!9iG5A3A%$~=sQUj89+-+}RwpagX`;Be3R$K!rwzov>MO$Xp?KL>j zy(-K(T=_g7^f+#rLzAYD{B(PH-V&QIoDl;j7A@>iQSwKnILq@Z!(gqD|w+3QMGyV_Z|JusO`_s&R_={zuD_i1&#f zwzsYLShPvJcXpq?2F?qo2aL4RjUD=^|C6Irg}o?F#jBltZdV&lf&vF!nDHRbm1~^P zJ~x+kvzU?8e zWC+C>?pn_ywbL!IW7c(_;^4>n3@2mneG8j)m&x32GfD=y*b<}4($;mR#gZ904}F7L zv?JY1m%q>*9znt=PX7M*F2Y;~L4)9_cGqi`9N-EK^0lM?%0yw)I)WiBE!Qown@uL? zpTDuiF`V3;z4yfxxJi7hr_(-Hn{Fh6;@p1xCD?oEUV*M%c9PbrTy{i-+}XOYQ0jh~ zxQ+Gt_^F{I+5bhmuKwW!K_~tD%f}T}A>H3zTRH6W9Ws&P#0l=~j$1KIc+|blgWVNQ zZKkXo@$0|P==&u(K#Bh#9JI7k@?k{K*x7xI;&0Il)wzY~54@nT#&Ip_Cc=U&0d-qED zGoEM*W>B01-<=n3$yzF&alv$H%_TLDvHrDdU+TN$r5}XLX6F1c?o^>@=j8T77JeKq z==pf=yd|Ubgbw;oTZE4PEJ~y}!=FZJS>F?B=Z-wm&pKdYSB5ht)vHToO-oxA7gfZKuHyjMF6(pAW2jzo$kGk6LF34Mi|DIK;gJ?h%L(2)VgM^D4RCGS>v&X1? zgluAG)5-e1UalVW$TC`c1I2k^IH!BtmNL`3Z>!$c-tyu$;|BY*bMh$c`@?AR+41dC zx)m7?zggF4+rxN0omVx6TF>t;xe>ALgjG8+*-CN7FYaD)y;iDuc858yPgOiPf#E!j zZdxs?ZmJajbcwMfmEu%up?LZ!wr^$m zPP?0Px2^JEIN#3dlFnfpD#Z4=<~??cr?#)trumtv`zl;%6WHhay)h=VpLkU_d~tJUTL2mSeFv*ehcO|^Gq}LoOR^e zwNY6%6SmCv@*5qbb(G>*RC(ezXlwO)4VOF`;L)b%ScapBTDXpEA5=5ruzh0dsF{)w z|1sH}&b~5v+^X5iW6rb0KIT&=_8a#=m`-u3Xq%Wic5UrZud#(?s@+3&^%q(2;>3~e zyK?QVTg_>llNVvtVbZ9(L1XT?e~$QUn{V>oaq;)ID_{R;N-`;q!Pf&Ho%+@C$$Ibg zw7AWWPi$O$XnL#qxQBC^`W#+1E>qgg%wpLw?G-lRZtL$I@=N+6s@FW<*!{;np9WbJ zNAY3c*0>|u?Q2v(_!Db7F?h%>AO(SKMxyM{Z2-8j!zU ze@4aZmTNj%wz)=e5)=+8UU$0;wQ&xyJ8n>=5yN@;Z2PW6S&)P{ZEr(jJw3}{UVa2?OFLbmrE8d|v<1MNl|N7OOWEpNd9BH>F0{Lci0jHj{^c-hM zCixkRZV|0R7Io_Uu~koV^7O&RM=nWbq+{&xxW!v5l1J2xU=x?m`y2x;$$+qV0k79? z?Z|L?tgk0KZmvsqc#M3~7nD(3M-}*QtSBH;pFK22tbQ>t@o(Uff!NRzB;^1C?#(p&H8lWLu;NU1^3!0KQREOy>n*XXKR zu1eskS`;$%?C)1KH``?D4#LTr^ammW=$MAX;pdO#*8fM z5P7VQQw0(~ve)hSK_;a1*xdIe=PbzwinF;?799Dc7WqRv^zr#MQK<~as)uJ`*LYi! zu>()$x5m|M6%9FRSs(N^n!Y z_)O~$3&N}j*bnBWhTUeVH77M}LdHiQZr;uGfEmMSzr6L;(zkA8yg*Qcei;3Qi0;=8J%lTY~@dGNgvi(-eKWR zhI6FODM)Su9Bk(k+oHsiOm1@9YOdIZXt$iccx9XRB=W%fK`w0_ z$oF^tDaUN95?hMnY?Ev4c6kVyn^d@Sa`pyKhT}7`uJs!G>ZER+W=r$(^~kqtD`K-J z`jE;7+v0Xl9Y9_TTqs zp-+}H+g3QAe9z1n*KaI2!f?Ergb&%?l8~EKf`bJC0mSq}>MlWMJQ=F*B)m1jkJM~t z+`0ZsHv)HKa_RYUP`)nz>S{QCV5J*=K(dVCc%+Tob@j3ynVi}ARKmKNB)v~)s`cCR<#nQ85m-S<VzLnHzxx9m<1$%RkYx}dK9^^Vg^rjQ3G^#3qVYeY`2 z+iPLIUQF!!r0=nRmP9^J(^~Q9qdp0yIN!{oE+>7p7Ho5?V>QE|)>(!#Dl}fVPtFGN zO3>+ezS&69)^6Ask0yF#MyKb;JV)&(lK#gMm$WhyfGm`2KMi(!eYk(nOE7fHz3sQRO>hysUfyKw&rPHvU>E1`u&ru2nJJ}P9kyP z*5qD--K&d7Zy8x_0>hb}Y&0P%J&lB)A7eWH=q6I7((oMLWLrVs7AuX`gv=-NUp8`l zHNjgjg5u;PWX|X?C|Y2t_u=VCi!I$5j%1ns=SL|`1x?PK9CWezcT)L6CmXBWUV@8~ zjR!*Bc?dSwoN?C%7Vo1e&i+dNg=hRX2qLVb^@TBa8Zn%q-fybbnI13LGQ3BPW}Bh} zP93(NIqNl;IQ9=nTHoDYu(M{joT>Gj3C2;J2@l3D-V<|Pa4)b!<1worRAV?#mK-iA zT(MoS<&LE9?EW9fk>=MQ>{~QRuzSV*!t?p2tVeTZEAn!R~c&|G5Gx8k|ep7x~e!Ae2h%ufjCDwv zi2De~dh<&J9TWzJm7g_YCbmdS*7I{Ohk6M1j}z_(ltkl1=$+9oMb$;+ehP-Xq^EB3HFqRiA7bxqb8Z zBk{!b!8YB6h8;<&)X`z<&2xg;6sNY|53M~7yoJkNEUffq#rq6~b8f<^p2O>J5tu8c z8jm>mR=g{fI{XSc3zx{cus z=$KWsW9tpUv_{0|`2Ixls-2oRAeqH`SV&AzYPrv8YnS$8eUO5f>YoMYZ2b6z98L`{G%Z-2JNGcxU|~!t)DNJCDgecIuD(XTXxn-7)e>Qw!}YVaxwh}da4y%e-7z}kkicl$!Xe9C z8j`mow^Zx$JV21Vz2!y!d5y`!jZ2pg@97Hsh!Uqu!R*Jm;f+LOt-H9ytY>qE6Vl&y z(8)T_1Ydug=<0c8K3RM1^T@inweq%E?(?)J2OMV6iwlUw(6oKjKLPnIxY*0l-b$WRkScaMGK%Cx|s_P6u} zC%WuDSE-w=Xb;8t(qV_i{ST$0T`oq~)8H@{!#OF~Zgv=c*M8cmZoKv}VOn@R_xIWE)l#2SzjdAI_DTRdBH2d)5)(LWDLweNIvq7ST!zbh#uTBxAQJmsF=PXK( zd=@XP7}@=eThVfcbHVIM%le69gw@B%!-njcDsou!V3ly-I&sIX=Xd6auM4_ah#F4n z*-M;3apn%PeOmQp7p=mOtxZes%vWccM)HpI2QX0J1m>LTI+SkLfe5QjYcq>kB;}>J+v$qj=6Zo+bLzI zc&X`(P3c+1VuxBAhOUPrGsSysat!+$i?2`|+rTd~zUJg<{qRnoJm}<{o(v~)Z}qMP z1D^@5PumU<4Fy~)k~z!&&;hZxI=N` zd|I5o_9jcaa=&MHc4ueRV>qU>?yhSw$wIs_Q!#LFv$~}A+O`w=6?G)b5+9QEOU2^% z!2<$QgFA~KQXH$HU!K31Qb%Xg)A`r6YE-Gta2Br3O=`DkoL24drk!49Pa<1`uV-}j znJnn;oIGm##MPqn`@b~t32h^IMsY$reKoo|V~NiB3GZvBcVBJ9aK6PJaWh)oO>0y5 zi_EFBi?mm_$?W46kS08vBdedi)R&}ZUV8KPZ5NVHaZcEqZ*SA!u};JR$>qrPdCYVV zv8mH5T7U6vQKiEMgID?w67{}x;pwV*hqXJ~-Oe45eVu42?mL?KeH6Z-I6b;v9WNTy zP4~mmkcw4(d<&QyXI>deoL!f47kg%&(0zBvqJh`TI@cJE)80Gh7j6^b=iDvg<#+m zix%nmYqUeVj(F-Q8Knif`CL&H#CNevzS&mKeqqS6oq6XEGMq+_Ta@80?`li^ua~A6h!6p=!o<_;Mv=Zph%JUtZ3GeyZ%G9J4bw3p1Ekg-ZlxTGNOWq zScl?V6--}o{LmNull29<#=8SWUY1{F-KUrLL}r z#c21*yN$Gh51a|KuHdE9ZRGN6&z$EHQMoPU$+P=bt=swW)T;+m4UZCtWqDKI-P9rHlIrs!*Jd zTf@d&8$8Nrk>k1EGYlWPFr2F$&c!xqcZ4j>s?&e7;W}ac{&Viv6>bnG^gVvPvuy^4OGXP>bTM+;hVGx#I`pp)c&}@2Zh+%5dh_^h-Kte@+nE z=G3{M4faN}x6F3j-}R1Gv7$kp&)4efSMF@DXSIE(u_MJfa&2!>54#*mew*A`x!bR^ zqe`UXzVr|M4qp=9y`JP4F{!)IqjqgQpF&^3mdEBDM!4l0boe&jE&jnG180hJw$iY3 zpTgFfm=+l&b`dUm#pI&hw`RJ{o;q9mz3m~3=svyzgHaZl1&XS=p>4xrdsS_0+-`N# zL%nu%)_12k6(4ozSv{~+49%h1^`Eyp=Y zYWIG%b$G1`;+rR*ZyNFVv%rhuwDYjuX_C0Cg0IKE{ato-Kge)gn-8l~`>DP0iIG>f z1gm?2~uWs1S`qq?%Qy5Nux5oQdd>d!B?RY2Oj^?GtOKY8)@ICOQ(b{ge zyE-iyrgL*!WVZpXSH-Zw$&DKy=Z%!)Ri9nyYL8YnEB(d}XE+mfwe6;}-9)!?H}kNi z*CTXg?S?k;JR51Se7r++f4|m7-uYGL7n<*?(3#?#7}eVC!KOPFx(;W%%t{;Ho#D)0 z*FvxJq)1cWrGXXRo%|r#xJGO<^NYT?uKyXk(+Bnl&z|DHLx7%e+Bc~SeZ<~fpkb7L2M*PUZM#^yYIkixAYDBQ=ArCYOWd7WN;P9_JwmxJHB;fIOhyc^ck4nM=wgh`O&&I78aj& z*t`$+7+Jx1TmLSVLZT~9_DS=q-}T&43LE(@wKoT%cQRmI8A zE$u4lzdE$@g25kIi&~zn{L%99dhKep&8t+Jao=LE^QI!L;S^_Z>kbXu54Nfv)au6e z)TNFl3@7tqd|=WUcgeBdjSCOl{%Zau;>lC@ml2k+TIa^gd-&)oW+j*>w>~Kdr#Jz7 zM1Sn?Ze-m@5aTTG9Hz~1mW+JTVcu6i?G8Ps26uK88uq&Jy!DXWo0YcoTyb(lH!c^IPmo3-WN8z&UKDUJo@r2+jq#HR&wT$`BtkM+1IPgoLpk^s7Hmc z&GI*5_q6xJ``nDF(5z|vThZfqGLho+J$23d`@a1(I!?K0U&BM^7Q-2wQonI!BVD7% zC8u@_iPN^;((v-B-QLqI5=+SIJ>ySSYmoUxr)_Soa4N+qDLy#L`2FRYRbFiAXJ9_{ z9K$j9eEW7;&yHGcnwgK^*REBKpxN4uuZNG*^*iuF|7+I+wgw;br|U&dvz<yr75y7MsFe8CQR`58x6pPT(F|v8 zTtSMWRTYQPH;OO3cdlWUb8Wli%h_QSvQxZ2cD~k{97wfyPnQ@NETK3r9;7z*+3Q=c zlWS0;_l>HIVK~tn6Yd-b^tH_;%W4TG)-n-Py!a;X z(z|*U%no#`*ZESn%s@e$!N1 zqvtBGI-@UNt=95*yk->Nc;HHLaB(-=Q!tx^sg~jdX&>&8nMT)6IB0#ks%Jxc1)2fQEto zHb>vh@7I9gB>J8SY2a|)arOGP1)T+zEZ%I7`5JDpzmkV}`}ehu&9|G}f6;==CdHP! zDNgNvEy7z2+taAYmW|u}uRGx7GMpPYRoFt<-NV+fpUrr3drGY(S*?mr-g~byo!>I6o#&|K{?o@To?Yn- z#aZ6*^x1U}PWg1MGjWH#Y0GyE$Juyqip9WvjjdKB%wIUbrr{6$C0q35(XP&scgM}2 z)ypbrOz=rQy|W`!Vfnc|H98mv>AJf-!{Jta3!T)YO$O{H6IlAA9K zm|m}`{?VR>qk4LsvJAGJJkKu zYqv>3X+1J&Sn|LjMHP%|em3pf#!lDq3B|dtn_Kw4!N^X5r<|tNj32?SQ6sU>16=F| z9yCbW@FHtVa$0kt{q=r75~7W|jX!y=e`KkV$#}QA2c4=leL->JK7AYF%v-FIwYItUR$aCSiTDRLdzlsp=Hfk8M=*~uAw!$pr(s)v%>J3N3T^Ee%ykg~i z%s$G`KfilH%(UKjTO5mEIF9jqB$0!iI@XL?_j1BQGrtM@0}TBe?{Bil_FatYuq~qS z%PIEpyS~(h36JBWCNw$GC)96wuXjeBh{SPUD8n(9$F^)3c~08Y@8;#14;>s{zv#Kh zK6QAN^hFO3#4ii&>~33p()>U*;U|hy%YW_5>?_0ioU*@jab`{9UJU1t!N(kX_Hk?# zeL$;nweAPZ@(dg9J=rE+R(nM6M~P3a>1Dn?v$0o`xuCzLOi#7!M4KLM!u$1_Q0ZYp z;aL#>D_usf+~WbGty>Ie*rsx|jK0E>>!Sr(>w*OS?`-1R-D~13(s>j*#52|#6k@r2 zHJP5566paM1Q>L6V_uw`rF&j zEc>>8ax*-xjYNy$L~c{88a7o-jLoXeaE$JL)`+IZcvq>}y@q1aE8=PQ@IWEiG=84h z{*Gc&AOv8LvxnT$#(CyIoxmoI!Y-sOe|PtMdk2=Db#Fc12FmBw zY~vAD_3ih|4v+Q@va-5b+%_X-R95Wu0?!^J^=-}_DKImp={a<3?(L-WViIunbL{?3 zW45vMOq)Nh)BF$t>5-&grLUQY%(n;#w*iBR?dt?QzYT{IR@^oZLOu;$TYb@aMyi znm22EP2Ym1r_goE(w%2gqhhR&Z1`L?R>E*PU|nu^)6_C zW3_RsUd=vUcTSF|t<`KngK(qX9a7#~bk^zdyooKvX}58$|C5ed#Q)~>gYyUZ#Io{{ zRy}#Z?+qcDJ8!j?PZyEx>jz}+^wA-kTt2U(6=;t(nsjx=_)|hMXz2GDpAQI$ zQ}WlT``|*h5!E&h$%cdRZWO1*fz;_QLEG!X(QYo<=XVTbIDykQh3WCm;pfJSc%Wq4qo@cIUkyEM52e;2^)R*B11CQ)X zOw}T9J1yJu@`{K=TlRF`eojOt^ejFm24=2k?G)=F0RjRG8xE)T{+4TIywf691sM&= z#-2e8r_0uTdF_e?WP*L&qU14R5>@fd)pq`3^4RF~g&7sJNWT>M;|Zq-X-;v>XJqWK zt))#0H`sQ5ahxa}scYBu@VK?|D234;rr?u2Jx z`(Xw@mVY@^uEVF|)C5o+p(OEU@Rao*$M^6BEjuOwnzhX}0-&&699oRtq58++S{KwA+Qx@B*!mPr zws_#yK>zGz79Oz9;u=R}VS|0*4i$nL2X6l5)QYrHJc}iOAX5EIL&Hgue;n?73V#z! z@cGA7qt{8{1i;wRF}SdZ0~9q;_=7FDnEQJ&Exagvxc!&25wwCWSVI6at}nW>8Ezu~ zaTGUl+*0tdL1gP^r9v|wAF4%9Ux1YjP$ zvhlK?2>%~vG5T1_`xzeK3L4SB$Mi>%zVeLW9()kqp(#`UgAHG}NqT?`AKd?P^a_FJ z(h&g&Vtd~j^^(RYh5opF$m!FC!V02^Igaz+0jwU0lSB3cVxZpyKCH+5 z(b+?*H*FFN){{&k$1nldr1<< zpZ;+imKdmPwlVM9(lg(*f(`Dn!g-RIi>b6Onp8uWu++;jD-(|_2_gC~XI(ahlkXQH zy!5FWdmNzA`;YTQU@NFE92*v%k+5sH5W;ls*u}TmxL^}15gDJ34}6S>pyQ8N5dW7` zti17z38M;6vieXSmy_T2j}x=~2T)1`kcaM29@NF`pW#=>zGJRZCSECJ>Bp!Tlz4R1 z>@cF-14+MBA%}XO55WoD#x$!dVd36pUNQl318=1rg-uu`bOX^sVtizqF zfKjic{rOtk7>5t(e>te|^0z_-2(avsP-mJ%mH*?g=E-rIVAKI2ar755h4JCbfro2f zIwABB6J2;`fColzm?cQ%aRJkX{`;IQj@jrFI}w0bRy7tao-FytdE?$^dh`?*dKhwB znfMW~`m$=lBZ>gZu|-B$jq#!F%hA^ejMpdkF9&ZZk|-Ao2`)=riav$*F zVveITXT1|j)r8>vXDFM&6tg|yk=+FtUD^&~Cuu!K$B5|y|NTFxLtRoCStKy-^Ax*= zeMtSsx#yYuee4ebNJ^D`$@`84!+Dc|W0>>m&uiZw?<5d_UZqW-pERY-RAlMHX!lD2aqmSI!dE8v)*wcf5YwN&rv) za%@-RuXc&wRuubtDp|8cP9`x!HTVdOs#ZjM<_62htYV!*)(F3gEo z&U0f#5)uVW_je_6;l*E0b(&mazcdOS<&odN+otCBk3(rPv?VQz1r@TL4DU^mkh6B{ z$G9Bk`{XadKR)L8&~asY%E${BUjF6G-#`as-bTT;NN(V0m6pRl&cQAzwP_coe^gle zTI^s!i@uJcS_=*|S2*@>VeTF$TrR!ZhdIB$`pXGU>d`ET!*K8mL|xCZ?f!96oB!b7 z;==}n+}c6*1TIFOw{;(%8VLd+H#mP9BjKda+$D1i!~M$jdvwp`nsrPvm3rxZXbwS*}RWa~({bV{>`Bny_I}g666H6PRsqpiF_E z+}aEedig?l3j|RxbyBrgc0vFj|8i)2CoG@;Lc_BkaxU+69w_|d*jAaF3uBIhS8JNp z@RBh5RfMS18WthUw^>!c!+f4oo`ksuL1>ux%kc>(M#@?e0pUc+rph3*#6QmI{rK}} zOEjn$>Asa>#s`u)<@YvkaG?}YgdOq*8^U|-B)`xS!1Q0vRii2UgnT0C2^jSf#@`hD z$9dPD)Lkx*1lQ7{-HJp4K-InbKvIpV2g`;A&Jr5Pu39Z?Va5-0e>npiLKl&JL=Ym} z;Zg9KmG2)%UR5EFqzGea=aL8#r^Adh&wnm{_eDb5lYwGm4tzMF+gR(ujElei!iUt=)U`oOV9%Vm?1{rF5}t($&3&&$ z!^&UI-(dk%l>dLT_}d0Q{C|`9+Zx?wUj1)M=hXRcDoGG-UVEG%JgP}!a|bhfYq;6- zzp0i&;lF8b_x~Ho-^S4I!dqS38ZDJMX?#sRfT&ESZQZ~laE$t8YLwtDHk4GCw-JZn zu_WPuQc}&AF~a$vownn-pdHc+glv(RSrvnR+Hi9x<+nO_QBCCye7gLU&J)`F6i;RR zRXfZqqWzJ`8tPX#Ua;Er5t;+MVXa_?lJ+{2KB}H?$eZ4HOr{ixjW37U3`FPpm192P z?thMdwD@FuK&@M6Hv7FLE>$+VQ+~SDs3uu@$IMzB*G2yc0l!1z?(!z}eJSpbIDXH0 zmKybx=&soMu#O`0a8CA?-lwpr+$Uy~^<3x(!>Oj0vAu7VkjD{(|M+8?63&deumHZU ze~F~;{Vld^Dx7s~m0zPN_Yd%dJ;PAe3)saa*w?L3AC>%FV7t|d-{U~)%iE}2twhhq zVp}n&k1=gFP8+d4$j{cihpk@8o0Ove$ZwP8rl!-qTiEsp*J-1yj;BW%Ts2NAm$B12 zW=IgNr>WQ;DxAAV>X<$}zjOTi^gec&Dk~`=F1CQ-#lE`4H5@9QC*Lk>9bh&21`sgv z(SLp77^~uLGl#|DaLMzz>yEr!cetK?&?Ht{|JTI3BvKW{s3x!#kgzsur|Rj~Dw^vM@rA2*a-p{W~c` zEYZDpp7pF)TdfJ&9X+H>8Zp1?_Jx_TE>C`8*~tBE*TL6MD62__MIs!eZd6`8`o^Wu;kj+_XP-7LdlUEu zbO>HQt$jQ8`74XP+&WNrHTC&~-qjX8V(Pd3w6;IB;&(v%{piV3)mh=izg6}la zV4KCzSxocYOMeNo_}5y@UNno&d*~Fi)m1}X!#cSutLL_fJ#!q%MkR!_7i`|loEs#` z{yNsiSOEsZYMXd^uc`&OlL=`8o`EJ`$BRRwOl%Wmjms%TDR|9?N03X@2#VnhJoa)g zf#+Sdk?0TojG_WQvDAu>042ZS+o1HE&P_u!kJ>38gwCRWW$v^Oxr^u~&z0wa(P5Ix zZ@+R6EDBajHR6Y0Qs#@;jW2b)6n{kGdnFqPDtEd^q}|8)2n(~nU3>sOd3?{b_3J;o zcoV-J#pvDDh|BV-KTKgyVYj?)JxqguwJDB{#VCYr*XdHRLki%HW%f`@Nb1wic0Mn?=Fx2}9KSUi_Jh)bt@p*OO4`h$ZNrt%eBpQR zYrm7(?^#qj+yR6>$+b^WWR{||Gb24$%b4nQNKDCtm?8x&1NUX_crb0zrr@>%M!3%JcoQ8-VVBz9%#?GUUx!&KF{uLj4y zR@Dm*`WzW&P|vkh?8mcA#i;#1waq($w%=Xc{rR;aWt?73{Vxs>rgR%Zx^m9{_Zy0N zE%1fOAw;#m@?ws~63wPP$Z#xnHa{d^wQe4k>eaOe&D4>6(M;xF-UN%fQP#I0&qXIK zd7!nOCG|RSj<+4Oy`FrJE)fyiX(v!j-I+UP!)U#&rdJms^;7S)4qs z4r&~`I$nkW)1dmfZq~1=!kQGBDZcWiK&Rt{e4k-o z7Uvp9B77Db$`;=yj-U1 zS!@LRvrgB7)8-RxPD`1u@hY~b_4UmwQqtT7U`ZlGQdM{UvR=|d5%4{mj` zS{p4n6MM$49@yU(knyNq(onJc!lu})3u!imMnlsfy)dWIeZx){TBcky^0hNI<0tME zDa-1D_B+4T^zoi))tr{*l&?C#fo3`CeWv_$GV#4tklID?Xc;IK#=rYbKwia5eODWJ zDyN+o?>f#8hhZ20FwzFwM}c-SlN7JhQnGVB60{)4xR#|du&m_kk7`DhJx$=cBBo7PV5O zNYwRK9hTx$48%mVvmR!1=;_>72QewGkN2%T$_BKP$%H7?VYTQe=-vzWuuGD~KGqc% zfW^Od_(}WYS2O!HL=V_5z*bnYm>D{?#7q$R#Nk>bs}wY#69iCYkS%UBgGyf&9(ki?D(MwASkqN>oyw^sCoMzU33+}#S!a%(lM&q$J$hHoJLUu(}mu_{{bBIJYwJAV#`p$b(+NG^z*vFnik4cD3ZHJWLH7a*j)e_|5oBJWxiL;KR%%xk!W0hbO;YcEk54^(u{j|N9O?!*`=kLwPB)m@hcC-QUenH$pJ+3^x{c~TCKpNB%zAp#)vC)-KaHB?ZU# zPBUf}cXZ!}eYi}OB?Wk~DyScZIgipc1LGLYq(CH`{CQidEa{Vn%5B?k}oT9*9 zt^V4zOJQTbB!NvuAFUzD#w;pEIvVLO3EdHnf!;jw+?H?TD#wT1ODw5i1BDh?SY+p`jBvDF$99`2rLDp@=B~G=UFD5a5 z$ihb#Nc%;S_BsNHqq@amFCoD#D&H^s@x|2f+cDyx#2(+wC>M39AzIJ+)(#-=M;x*da<{!{h93vW|B!b4`wKib1Via-P&aPLSfCu|5_aQE+(0jLU6iU5fIJdx5(r z0*7~<<0@i9Zb^(vKfc)_0&Y(%bk)74QtCZfgLCePfc7oiOF3C@ikAModZznX7{cV+ zotn?0bK2aV91BGVgGYeb$V#2#(~5ghT7<;HkhgFUXK(0~y>hK#{`aO3v@v-%0y<76 z_CUoW=8F(KzrQc_IJ4tQPk7I#&K4oKJ~95o_jp*$5^ru{H(m&6OpT>olB;Hsb(FzD zxALAf@UUI>E3!tXzLVp^AQ+EmZHAqXnp zyKV@oRD9MC2#_~U5`+Lw&0Xx{49Bg=7*7LLL0CGj4DURR&NAJkvcne>1d+urK3+KH zj<>i;K4+5)f|yTN6!jKSh|Bf28lE_U5RB3}TlAjZjusu&S6vnWGxy}&2Y-SJhtSnk zny&?5Qpxwz1ZAC$+n(IJo7V+EfuX$TN@9v|tbmcv3V{GfC{c$=dhfh$ybw`fIm8c* zF&8d7_X#@>8?@Ol1@Ob$*X0y$j8A6nVNryg8}h?md3VyS_Np%NdCNsQ34SO`yKXtx z{5a-2w>@t(f*geW2uqaArb;Ag7mqU(CiGsQA06Js7Q zzz&|R#G5Z~>STJVrojUZ)$Vt)!YBrI70GUQHgJQjjjyzfX^3QUEkTuiAvd6Ak4+w3 z)E&Ly8*{xYog26e(uQii47AAxIedRz;)Xbu#IJ{TH)IP*hDl>6xxvS9MEsg~Ba@LS zyMi==8;D{R;>Io>pRtoMUcn#b0zAtMcViO?5tV2G+4v`1a8>Ot$1fS_z}CUdRIdmw zaH4zM{E_ReF51LqJ^dyZut*JFaOotIPsC4pzNN+mWc>NK3vGd}ho8@4j2AiKeJ;MT z=*YCWO<^``LMJCkP_EAxRqk!PU2u~Ks^kQVcSADa)2F{$ZX{~|Ddq&Z#&a+C^QA9{ z4l(jjJ5FGjiM|=^Gu|$-g+ERr$_exJm;|M70pG%=GoMiIb3pdb3x2aTQw8!>BC~V- z91wHuilFKwA_YhH_Q(4{9FXL5X{u+OI-RL{#(__U1MK=GnTqo$>R4H1;zj8>pt@RP z;=a+iHmoe#{le#f+G4WdD5huWk(O3s4yWvJ+GZwh#;xa@e+SRs_&Yl|e0mewx3kc~ zI$5{&VSycrzi{qmj(_g39kue0tz`#$`pSNVPqN`1`8|L90@$I&*Y*WVz8{a#^=maA}Oy^m5YI)nHcWUgOcPZapigV;Sz9GiQZmw^_QP^A|b|<#nR3^jYEkde&nr z=j`Z>pzbPOPF5I<6o@&fXev3Flk`V#vcS&D1KEpD|45D$KYZcQ!vab%DGwz|8YJnC zNYtk*Szs|}uYt~Jc50a_d6wor3nZ+fPYD{Nnzo--Vrf>wLe> z0(6vrSR%sD?K)0=f$Vh__$|)gMSGkcce2;9av;kBZ&qc9s?5Z%`*ZnfMWI-rlc0m- zjN~5dV(mtpq5uodwbjYl`tlFAl_b{FA=sR zO8hBgUXKY>9Nv#SPOTkHdcYVcsL2Eyt2NxiORe3Pxl{9oWtd=z@tvi|YRvVZ^)xGa zCMGbe<1DsvbnT$NQ@>KQ#t6P7cFliOJ7m3#IrizkV*LCHW^G2T{v&d1Cts+?8R4># z)a+ZTuktm1RXi|-!+0| z8l7rgC&w|2FnINVvP|w_%yTJMPwbnF&`4=EXO!~{Tl}v2^Ve4yG5+|bALw+iCT6mF zb#)p>NN~@cZyZU9zu@w1Yy_7Ps=mMLjLc=JBUFDwQgg-t5pIg%*b02tQj`*A8NFv5%dgaJ-u{WMGN z6#Sx#8?NO_XMiXx`bMSx?j4oGeG%Pg2B>x;O7ikzP0ssftac-m0ZuE1U!Bd6wC-1a zFRyiHfb|#4%M`D^Gk@qUNjkX607dDA#OtvfLg_cwD_l$%Kz%0ZQgii8SPYtZCtsKW z(y{}3Oj@^1^CG{rTQV_#_9IONrydu^ju%?K+-L?ch6ghr1;>u zpU>6L=GPhQXr}1Fs48wI=)zL@-v)z%$Ha`Tm{xjKB8`QVRFE)Vk0866Bnbc=myP`19V5HncwjSjje;+aOpX+xaPwz^7M5L9au12ou1?z zX%NhO_(!Lh4j7D=0^JLmUq@Z-x^Ln{2lIQW49E6_htE*b5u$o@uy_(28BU$=)7jR3 zAf`nJqr^=YK0op7Id$|Vk7T9;L{Fj!jp;RbU)Eu>@$NB>My7i&t5ZdHk+h1tWf!C@NI7e?I0 zI)NZssMAR8RsQZG@_Kl%kH?J`LK^m*EKL{pis{C-NEGAa3rNZ8Spc!k=!%GqP|EAc_r~T=_y{WTH<>MH%ie057k2O z){I!H+(v{@x*#n)e~xru)Qh}(MY=;Bo0k@@rx9Xwt~ky<$#LV>^t6y8hnxv0ZDlI= zp~>pNp#_{r=cv##5x^Qb$5TD0fdUHY^^)3n?HOft&xth}c+g?3-^#vv+ot8f6@QWj z)S`H3-rJ=Fvbcm^}f!Oxp7@#B)03DF0O!&Ee%x2#MQacnuN7J2D3mF8rajk5=Ytu{w(bm1<2Sj zIUk$Cw45~yFVtVV7dO(;0ELwT&9t(3mZ|ZF97Q4;NVvBuKQc2y{7PXfu<8#r&~+w- zH-hZ(DGSGIlU-^ky(iFh&C8ZS9slchhBazg^h0 zm-R?Mzm6JenQ928*0}5jXVbqb7Eyx(DL<8GQ7SJHlKrJd1~nW$%0^WCd48|$%;35l zLk(`i-K164H}3Z(tL?@3QA0|d6uy-NgZ7W>a;b}U)KJIpH2ZmxMMYhMyI!C^H8f4P z-CUm5t2zxQ!*>>=22GI(VG)LFc;6y5)0+9HA+KMEK0$mC=Ox>ml@c>GJf{`+Av8?+ zxa-%1^?{rkGH%j_5THU|opZevJtL+Dg03l*M2a?#xwnO!n$uJe7r(|o`hli4{k*b1 zeu4@%TD4Sh>FGtNHb&!4x-q#+YIyjl=6Lhn*JM>v4OAe)K=wT`)Nr`d@Pf)r6&3hC zv3O?0usP$>o;IMFNd;{FL^n1vkC*J2{c^C9sNnKFmg1>}Uy`_mucl(|Q-KX(Wy^;e z{M~N)j)X%;Dv;17>vkj1RLPrG$x*yU1&zhUmwx3PY`ZgG`|$lD6_l_zeNSNPAuoH% zaPnD=3ifVYYg@wgZB^|?<7>-ML6u0803YL5!=B@eB1=jt7;b*Tc=E^sO*HS`pc7keHhe_gCN#+Ru3ret`EuGJK<}036R7xzKO9?Ih48pJU9SVOx zUS!fpr3CGy9R8NWkP`4-#t2j>LEy1iZ9xuyK+gFD|4&~^XyPO4W{AAVV8m*6Cg@5D zUXn~$AK4ssi$A445xhjsMMw9t&!IhfVKb3C6=5-(Yyxb*jP;g6>t9#x%=x8XE8>0*Hlu#j+&54UnIA~ zoRRwV{9FoPcq=v2Y(=n8KqSAPpGg7p!rHgbbU#njh@l_Vhf~1ft2YB%#I3(uzHE22 zgit_)&NIStbrLS88tvUpPYNjQrw>XeR>idtBMvxmqW~)L0=*>xE6b~=bDx7PDd5db zM*m~OtQg7GQ`>Yi3aDPkXT*!#;*0;7e!)_a0#0L8w#WvNHL-R{G%qA5V9HeOPME(a z{v-?02$F^Z`aX0XUcTiYsEwGxx(*Z&CT@AhhMbUslwDGl>5v=@mg+*EkebOEPZ?ed z+aU)TUe<*2s}H4kK7XjF-y{bPaREGcUC}Jo&tsiTtK^`0`ZM>BeR$i0Tg7o^-^c-# z{8m{O<;L*g?k)DIx8#5m_0mz{9(~uTC7IlpW^y37ar!&7*n@-pko=o}IXOIdu%-Ix z1AotG$ibn>V{$kyapAxia{?u$-bM{%l0!g#(8EA!#L2Z+?RIqOHip{rgvph#qEo@4A*pl0$HJ4bM)`=3-1p<t}`sk8_+=4+#WmwO58Q2XB zd)r^YLgwoypv2b6z@besCClnrJ6X;Qp5!zctY2Q)QD&R*x53*ucr{4|hf)S*YEjBr znw=L{+dq{AGM>L8@X~e%p(o6=kqeJ~)95rNgCz8#0 z8^~b%3Ysj~nlh>K!Ua{^3Nnzf8n{waVj?cWw3aASLXbCb?oX!!h6-aJkU^XN zY+99*5xJkIti66R8D#L#KmGBObCYY;lZiTp3`_!D?2{?I>*Y*)M<-m#fIx(D(euGP zvNn2XwZ)zc;aNn;SYm zXHbUs6|->3;H{Mp?Z_vw=^EBsCT7@VP)2Jm^nuNADVwIJk?5Eds_ra5moe#g94vhE z_1Y>a(4Fdqk`R?E-^F)lT>nZ6qwB06%o>d>k}eeF;ZBo+i!V_0{|O9uT)ULQ`HmF) zzHghN9wa4fq)sSzbdo|;XGP`hQPk27w3I3_L zL~qn9%GKuAXif@2G7*Z&Or&0guR@*&7?MK4Q`Fn#3eFDA&(+Mg^-00U=Ba(1;T)Aj zpWJg{Em9DB{=ub;cMBoSt5KdHLJC(|LHEtMOBk-|`f-R5DL92%D4Ba%vtTRkom}T3 zh0CwaHb-t*{}`(uP+_AX1(NfHJz>F)tkD2X4stS5kSOtV48wg!$H)_$iiJlC7H_=} zv$@~gNbwj_0f!VS=-)@K#DtoX;4P=XDGBV%wK{c~sy&Z1p2a5KBY}Ar0Y#){08Yre z(0qkO5?J&xJ8PC5{8%N^9;rT00#yl2W$ix-y4>%s4Vcf6K!mX9b-$aJI>pbQT6>R^ z0AlXivPd;G>F;-uTD|W{fQle(bZUlM=~=T4_i{H0yqVwsB~-z5ll%qR@Su|fYGr+R zD<}6}RhJnvrq__bR7jx;x~MS8r4>C{ltTh7l3km4)4t5el zQM@DVGso$4=IJW^`c`7l`>A#u<0>%B?_#<15??K3)i*tmT_H(LJn!Y`JGPg|Ubfk?9! zd8Nahlwk7Mni2D0NwL)&{-&h5TFE6*9mi|Lu1? z;Y24+&g8Zxna*BJ#6VYW6)QQxY;17aoBW=Z7$O+A4aIdO=K@%%b>(S@VHCgTCE96< zDYKp-Hj|tfV$`oC(Y&1?wAK1CzDGn1ou_Lh#;V`-nNf%DmGLq4K92a{{D`ts>8+C3 z6D(qw!TR2@aifOSxLcdV|0fX?_4yB6!8Ja+owc!MwL=7H?sQi@9qIYBl#ce>7Kxzc ztIq{*LEKKnLqvn(0ul5z+Sj5Sw*~w3dN-SAh+zCKf$-jm$muJkGV7MlMBwq^hx}6; zXKDiXTvLMqBH&3<6}{{{x^?5bQkl(LA~1^NweJ$0=V!r+;;O16f}qW70#*|ja|4|1 zhTCh1pkM&UH|9rz`|q=-j2EkkAkGZ8EUlR5`wJV(va6LupknjMU_Y(KovuL5@OK#z zs0C-dtZBbNwR_z174 z(@X~GhK@6hr4oS!{hze_dGQNkDN<&)f{38;d$<`Bv;C8AFy&-;hX~&8>(3#~f8QhK zrYRxwBm%yi1pMF96N7a3+{qs~5J9$}mg?$*l;=f{)F zL=Z!+p=c>ad8>f?mHtapB5+C5+#H)$Z^Sj4_OjQ-06{MQ-lTwwTcnJR3%dfjY3<>xJswj4N)Sn-`)!RBA2L7pQkPL zT!;wj#$2DxzLU4lmclI;9FceX^0!LF@b7#EMs1*udh;dv$CGpfskapQ2@ zGtD>4eHPLCQ|r1r9T9jDt&3)K^zyD{q@$fNE}J}TmY|RRWZT#y$N_aj+lauM_0$W85Ar zj=sT6$mc5Bv6K&qzoMc09^1~&oBf%|52E>c(`Z;$3nCl~DZc%HbLk4!6dDxTerJ7p zz?LQ5ugl3fjs_iN4GY_6c<+z$5vn?)XgJ^SXkSR?Qz6JDtn?g21I1I3mB^Z$axZmj zv-}n`EPB+BG-BTNeBu9J48QD?iH@2qJdpCTIeUSI-}s$8)$}n2gS&7&s1gnPPkg`J z({dL6KC@-*UxtRHIX9=@vQz6bi_!e@#b}7qu&Ax^+EgVF^+l-WqhWo2+4d*-3;BvS zw}eMB(V+hGvRsV4@ADns-oDpyXh`Y*jX-BzLEYz(@zcP#1JVSs96v6pXf084l_R6k zFw3xgIPQ|W+_Xp0n;n4$%^_bugS89xmToqozwV&n`FY{#r5*Q#v%$mS*BBN4b%KXQ zElN3;9&!}U(mSKUb{H9UneNpM zj`F{GeH9H4qLbPX?n7oAXX758NOtXZd6>Z{@yRF0Jj8U{W1>%G_&M}8WU*L@K}LkaOW zyTVbAL2*j^Iy-(e>;;{Edlu+;EZoTSVv`#UW!{g;i%$z~G2&e6x4 ze4Bp?=a|t@b+$1*yw~FWh$4y0odFGWR+uQFCr1`7Ic6%HbZCgcdNh2F!Vks6Q7t;h z=)7ZU=yF7jNaHgVJnebO&_LxZV&542>miqT$%{8cXpB#S*-j25Xpc~!?qOzRm8B6^d`I5=%RUOm2kKL5w73$ey!b_@ z)-k?;@=*rM76n`^W<2+{H53RGml=L|PtN&t95*(41qB{XUbFb0P#(lZQavm4DDcu7 zk9D%vu9CM#&3u?c0Z(&F(x+we&$$=2FNMyaAmierAoc!ob`}{1Yr`oN6zq;~vYbDi z*{4_FV;Vq#j{|R(gc}w`X=hE+%zG55{c07{($RW2fKsfp1?h}b`-2ut(=t^JX(IqQ-SP!je_?ImmSTAC_4l0$D3A_p`g+4 za5DJLE7Y~bdNS!E6v$oTC3(DTE!VTUjL%z$f*smu_mzZg_cIC|^m#4{7&!N`FC0~x zGG3Z}@$DfBln}Q{E`DH=?h4lHo6JT5--@@5wug{pVS!L;`vVkEd?LN|DIxn>sz8k5 z%S;qhQ9ZgkDIxixn99J*F9n6kPrej+voV6P_-F?u6pI4HPucr+n*Ap@JW(ekQ7E9Q zJ^CdQur+`mI}?2xj)J5_;zXvbwp`a^@!9G7D5zG=u>a-#U?oUlzP>I11*g)teH{rzH&asL*4n&TEl_Yh z%1Oe7uE?Y3#MGDB1O+);viL3RrRl`hy8A5pC@_M_Q)UvLtjD@ZhwM6-`j$K^Ke~bWx;behtAYX%Q3dX`dAoNEJ?v&VcFTve`c|Wjc{gy%^t%T$%Yt1>t$Kvlju& zNG42wIWFbMTA_+76#4#;n;r!TBSLpV^?xw?-=OVDB1J*=TCGQU;OBaB>>9f##F+ZG z2sN$wMETzg0GUlf6m$YO<@!@ic3&M#z9(GQsID~1wTbB3&F1o-K!VWE z$V)Uo=PsUk6VbmOLqd>8?mZ#m)E9-5L+z%6NQi5von=rbWHcAYx5(~Cg34zjN4KY* zb^Nu}`m^tm5b!c1Wl^HNUZbDrr+GILmd1nmV~o*aAL9kA-MWwv>~xo$w>D5isckxY zy$uO$uKX@+?0a30fUG>?H4-k1GQMc&&8a|L39;L%M}orTVD`r}$&IFO&erc>((!Hb zxsP#zPb%bC6a7-Fk#N5H=Cp4oFj{gq@-AZq5*o*~g=wpfkCj_CSX0W7z~HU@@XE=& z@rO^NEi-c3o#3KWR^)TrdRnZPnNU(|+tR^QU+O`!7e*YvG_PV8pm~GXE|C8J%xEXfSRBG^g5us`7<61s;UggJTL3>z1wSRvEG^oOz9u2H$Z zT&)#3k^?m)So9DFVKo-bu4^b;S12Pv$(_fFxkA5h!4_|PRuTymIqzv|@naLB)z)vg zi6ddOh`S_ReC0Xi3gfdVJ|z5(Ti+wKn!YRilUulv7YRve@}FaGZ_Q?8X_o}DVd~9m zF6!)}VW>BM(|Umg3AMvn(t-Wc1}7WwW>t(x7<2y-v(Zy^KLT{F*U%!N5A=6QW|?0FJ8Vku%CDTexb&ieHH=8s;l=a(%0ARs4~&PqwwFJl=;G5`Do0XTGl zT7zm*zngTU^JFpWCMjq2ulji%pMB9Y`*wtYf)AV%OE{I}T~gkTR)+{Uo@~rxZnLwi zNW)RI+eUzh!9{0>Q+)}!mIYp;4Fs6UQ+j-^BpYw}mR?xDf`DZK{DoA`KR%k!_Tke! z0xS|5rKgGfNjs&Z!aJrAP_b}Jl?Usn!tYq;Q{W^51|NUp>HoH`d~ussplJdDd(=oL z_s7)fCR=x(hn`kguyy^Bw`it|pY97W>}SA|IaazC!@h+IrRrfmx^ux@5nu z2LW%!oezdT&ML>;R_FWOfq0ew%AwPw26nSGSRisUPXNZt9vTP35oWi-9=^;JR$MEn|J>1~>^k?s|x+=eCtS z%k)>iXFqZ7nr0&)Za}A!GjTH1*x;I@PbLBaSdy%D6kOj@@SAuyCu8ba8EafLe|30q zeeQEsA_9U9Ul65@jP{P1393COdTGq?C!cO<1 z5TKA;;C|9?xl?G}p*kLd0EvYyXEj^ZLyak6QCy6l^86b&eV2dhf>aLg#rz;ly#tEH zcuqL+XjV5R!U8b$+pM0O)K#!4bc}dMfbnxz#ZGG+^Try#Rgs&paL3dS#7F>oM`)k8#i`M9tU2|Ij)jU>{Fj@#2z>VEh4(YU6E; zpYslR-^13;4_mK|9ZNA!zwl#jWXL3x=aJq>4amHSfNBOw73M2da|=Hm=kQ%i@lxn_n=FZvN9d^tnR@BP;lASyM zIcMH;<~=iJ<}W+`6?k*nZClq}Hdu))>OAv_4?mf5)dk53g3rs zxJ&a3A^&rZ**bFO(IcLFpy5r=MT3>c7C%4l^5xf_eL`9G1pUIn%Jui0y7K+XF-vZ} zy4`*Cw86@$=iRfR&3WaYJAQlU!^cjA^Xt}UHZ4DA{lhOj{rLN{y@Qp9Cf;lP$IJ(A z+BCCy{meYb|JTPq^lT(+`;n=0e%9j|teo>=%MBxk4d4Cim5ysa&l#*7cHc8&Z@RkT zfhUHCPwY8ku;M!I)`~Gxy6*X1xW;B33;CD2Xx!Yvw@3C|G%t7X=)ua|e-ziAx@z*S z6Q6i!Ofj6pS8MOT=9LTA&+*^#r$vx?! z;e#=mL*Kjmgu%*)v{Y-fNv4fRg-7;qB z+Y6s9-j!M3{@zi8mB5hH2b`)mp=MI_Yv@3$k{6o zKX2x!8_&FKX7=FWgOwvLwL~U#4tYE+Z^-y9>2OcL?Hxzu4B0y5iJg|KJZbPQ!}Cw? zxaX6phiC5myluvzkbl?i_X@kxi?o4o9np|y9`{nEA1rkr%;&NH4Hy0rXlSHWS2cH5M^l$JYf z|MzKN&WCfxU%A(&{Q2sSu6^g{ua~vnS72T7u}wMT>c;htRGd_`R!LiTW0y@i?aE6Y zz5k56&R(YKYxfBg54zGG8P_~Av`!w-J8`sIiJ&~y>JK62Kqd((FouD^HMtHH_~WB_n@XJLjVh?`aRiy%9AhjmfNdH8bVYXRkU3 z%%u%em)`!%sw-3PdiB1EPuP@gqi%2LD#^IGXU{9=cRXrSKKX$+U}v;<;qG|L2AOfcp!QZ`6PPtL9C~FaB)E zzQ5a)H-?0-{Ak*z=^H+2U-#TfoAO}JU3WhA`;vPno&VSFRJixxrR056$DDM@Lht7{ zkG|@Dn{q}*>E&mYoId|VZT6D-`)tZ16epA6>-Rr&=FY#^lqd3bC+(^`^_O4R ztB)`L6XfT+$F=_Yu4}5_Sn>1KXWna5ik`gUuIKMteAmbJwsF_OD}$%q@aG4gd2HV4 zPrdMmibwCZDMvke_B&nYtXTIeN2Bj#F#q(`KfN(*$@4?d_1HE?xA?^6c^v!Pv{`Qw3` z`O!T?20yao=Qbtjtw8YJpWg6L?nl3QYy_0&|u)qH6hwtSDm)Mj)d_K1D z{}wLXHTkfQ@2_aIDI;dRRyz4+{cmqP-c{iU*pxqgy6oH&=Qr7eGuKU;czo^imoI|z_?^kOuN?i_9Ze6Owe#$s+LR+A z?VpTlIDTv0b?fgv|7v(&YRr(@+y@*bQ?`Ek)}C6p_hibutJbW&>4v2Lyq^7PjZJwV z`}SXN_s;+EqsJXlKLyNXzgdwsWRhp$G0*L}de2Lhb7tF=`EJiojt>`2UD9;u2fr?c{CxbLpRct3{NWqF$Ug0p%WX$D6P0eC|Js-n^xv(5BQbY=7?5OU~Hw#qWOL{SDmj z;<@UN_Tex6aPK`&&dlBi_h%foa@XUVD$W|&ZTpYw-SchA-iZr#eEilgUiyZnv45ueB3h@Z$_i1(yr=cW||Qt_qu z5W5uw+?{;xxo6rlCr_P`Wgk1rHEOhdw9`4><#LU)XI9sg)s$71mDHAH*)wy?X3s6D zVl=MPM!T{UWmN4o^ZX^VLHE}fdIfy}TgfPYS)E@QHK)X1qKukdTdRy>Xjw&3c}>Z@ zGG$ch{CV@rs(_?wzQ1e~gy6JVe@W?;y>b02Uv^-|JKpHM33AKLKcW}pakKbtwd{@f zrt1ubFz3Vf#n2zhsSJ*v!trEoCJo+sVQS? z;x8aVu2c94#s`{3H_=XmyV_7uJTd-O_$PkC-GI>@d+-@m^*sD%MiJvfr1b(UVo3R@ zB>p1pP@oml&dfg(4JIY>qnYk-HIXS9iwu*UGvIrGm1<@(pLAzoP$9 z3*iIlzRow|@ji_tQ^>o|FaiKqJQ{emVP1K*q2n*V8nGAPU;TMg9?QG=O?j%H695YBOp%4&c3wi?|-e^6n5n)B^k zhW6r=&y;^ePhl+Q^jLP#j^32765JtouNH7OH~&Gv6`t;^CAgjASQgFYw$kr%jy@wa|3OQCi@wE=|9! z4hW})9J`UwyBG{ekB=pIL%EJ#1|KkFt@VW#A>$5U3^f6*H}GE9l#qonYoV3RQ0I6M z)ElqIz*_G|$nez{n&UXi8+fP7r|Ge_$Ck-Rw2u} zA0P>ZJQo81vCtdqF^a(_FdRO8k5Av3um6kj_|E#95&gzxEItsUrEnprlCOWJ1@A;F zU+@V`E}#C#X3+9n+qB?qhI0>LdieAYefle2{ndQE+o#{AG3ZV=XqrCU0kr6+5j_1> zU(g^38U#HX>qcwAMs!9COxU2PjX%O92u*MA+Lf*a2Wf$wHmxzNHV#9$XQLMQv}eJ4 zKE2DeWvc%88&1eTEvwxdn6O5fqW|`d<=~Eb+Zu0At1mP*Jy(BqHI`XzYe$~`hSsw| z%gIYuZ+H%zg47++lb`dhy7WnOIQRs{Ow(WU>0iV~!3cNoHnewzV?#eBFySply)Enw z4Yzo6URIaZpv&B?;6oT~P2URc;g>gbD5TLxP!!Oq$Ril?AS;cULF&^#;+|c%0TQhO zxf>yIN2`ra7DkpoTBxl3QqL^UWuD7DMH^coUaP@U$<-r1eH%m+W7+d8wIVN*` z`pdqo4xj!628LxXxM?IPOIOHb%;Crhz=^ammXQb~E(=R!JtnhmsvnTHToxFKZB&fN zTi}frx^4plz53e75(Zqh!Kc5g>Dzh4@Dq|2!@&ukj+|=d1WQb!$gBIXdJcz-L6vmv z1xiv~dQ$SCsWz|}wWcw+qf(}&LF?d?GO(6deLH46y;;n@*|WPNDjA7~#s%oD1Ddx-rcged(e zU1WV|SY}~riJ?V*#qdWhgb$?qI{VP*-G8G`jL|griK)I}`iON6{lxMf56_X{ngqX4 zf>%m#g?BGYsb_7N$uxV;+=WF~)fCP3msSu~I=}jwxn$r3WURfa#`rAqL&v_R4CV-G zN~-)YZBSMg*P^7da(*d+8e`=t6P|Xqk!+a-MUhwIbP0&r*b-EU4`C`|oUZ}RTe6ru=aVC>PAl+RWv<$N*6eXEE&~#uEr83)qsq;`qBYyQw=HhvJ_{@N ziLsU2!z%Z=&1Pk;>E~fh2M1YY_wL;st?#kbol|5m3Q47ZsP)@i<9{1XP2%|FQ}XO|az!tf9O?H|o5*x5~%ZxA<9|kGAf} zhz&eeZAlZ)Nm%WVZRiiy`FO27)j29kq>D1+V4bIw*%39dl_7KI*O;66K34?} zXb=97{d@3HD5eLG=pnKm{2|zwgYCf{yif!W_TcyL3tM!wR9dW| z(jL6oKBfoHEwF)?^x(0!qubcZGm@C8x`TE8V4eTptMf)(SBBJmn|ttM_V2+*p_m># zqGMz|_%Yan2it=^c%c{{?7{zU_TX8aR_dx^tM&nI&7nd4vMIU4e9@XL>A^?s?vPyrjH9y#z3u5qppa*Z%b!7@X3>uw#U1(Dk!wo}k~A74v90;p=C{7AE|i^NrP9|I6L52j&%4eNW>x z7m({apyqZ#&FzF53A=MALl=5lIA4?%tXUm3uP$PwQ$uSaYFv547eV zths_{G#L-%Dp}Iid!;V55oNwuZJ#2fm zz3u*^;bVNT6UuEx2NrZ9pvn5 zw_8lyArTU7yDOpz7We+%aqHIY`<_aOf1f&(Hyn#Ht3mQF5`+c`h(P{p{5 z@t5t^3-k1&lONofxN#*rvyS2F{|@qaF~QbFY+nqY;_c!?n`9-`AP|0&_uCU{q=$Le zU$nk3;TPSnjV9)rox3US_?=s|u&l;kR5^FvY$h`Mnv-yi&(7}e_{45X1~&_b8+IP2 zf~@R@6N6`XSM#tb9`)fv-J1S|zCnFpqt^1T46SFqrath3))L8V={TfkL)HfE5l);A z7H~H3L(n$BdA!4b=5#Ho1-P}%|I&^QYgx$pp?1OsZF8rV)urv-p|$KdUfaA=OWKS+ zgE^^NgBg*bpJ`cbt>EnEsh_0oPW@-<8>ug)zL2^;^{Lc{Q&*<0NWCldj?`bK22&eS zuS;E+IzP1{wIub@)aj}DsgqOPsX3`*Qb(qql4?&qI(1m;VX3L9O6q4R|4#W=N@vPj zDX*uzoU%FP*_3rDPo+GX@{g4JQ~sRthm_x?EK9j1C6v;X5=gl&r7op5r7C4^%AAzT zQ)Z@2Pnni7B_%J#oiZWijFizSr=?`3I8u&JIVR=El%Xkyrr1)FQ+lkQS@&2!wC=V> ztnXMmtgl;Nv2L|)vOa5FZ(U=3()y@%mG%Fu_gnvBz1MoT^>@}gthZZ#X}!t%bL$do zz63ta(W}EjummS>Cbiu)Jy6W@)#) zWZ7cbWO>f=jOA&|T1$)NNy}rFM=Yx>4_a1Q{${z)vcmF5%O5PuEq7XeV_9ao&2o#S z*%Gn@ElrjsmVjlkfmTN3mTl|(9%Y4f`%TFv7mNHAJrNnZ%WtL^8$&1*-j*?EaSAdobU)1mVBD6`U7wJLo8nWIMt`oQ^cH zjl?#Vi$fw|dOdfL+7gtl=#MC4PvN+!`ZE4D_PhU&=ohwe=;lEAWo>NKe?jaDMg>pD zV7x@tCK7T2kyh5m5x-Y(SmZ}@Jg=7XQ(9rpk8K%Belh)JZCo+WzvDSSX`=sx$J6D# zbTPLK?s#pM;a~hCXYx~0Vre!`+?d<4Xt^$_uCAG1S7bWrZ)&cLlRy|c3MT_eyE44S^qt8XFhFCsS~U(yZ-p~`*J4lED}i`sMnB|+SzqH6I_ZkEsO;>w_vZxo#G)eBs%BI9>80LZUSq#5o(xTt zUp7-A;}?S^lYzuP&^g97o*>OU@+klMb1J8pH#XmuImQA?SU$(dWRy}eXHJZ;>RVEc z8`Iz3cL(_lDePvcEl8?fG1Z}k7QNDeV(JtWQxp8tu{L9s1wq9=L0W;>f(kq+@>g)H z*SeKkZ+7hl+vHv4WaZV@aI3AZjggHpOzR9HeG7@UNF&&n8>GjUl50v5h%N6>L!NTU1;Pwd z1cVs~EtGCdl${Tvj0YEGEK104UV8N z^2;Qbj9(0vOmY$bKqXhlSCm}UJfSdrW+jH-Y$txpdvEdjo0x}UE*dV%dUfXB*c=KN zoi5@sOBn*vtFpGj6+Lgzr}T1;Gdf=VI4xX9zC(cBEYODZf^HT&E)2(n*>PbwHoW&$ z*KRm4tTrqGIy_f6+nmo0EDsD-4?sJCgM2 zo6?Wo4W|#2cbOUEF)*@0yAB8UxixHq1hA*&nwcoRn$cg&Gx?yqx)YTn)W4CK4W>* z`y-A?PXH^-Qn5TvFy(VEcjEn_MEPY>MaC}%OD0u_f1pyO?kh?a8<#4Fn-hA>LK{Hnpz zwd-uWS`uBJ1PoJwVInY0feok^WdLIaFv36T*Jl`v-p%a>Zzt?m>w^7iuxD*6tnd!< zUv5ke!LQ80;N^C7)Hm!BJ2(vg7udam zzea%k8qpv5H3H<<2rj=y{5Ry6*+Ge!~hDq>Y80bn2v>ztHAmq^9!f;n&xcx962Ju*AT)|m)XKq&e-gZwBT&#YXXBJL7 zeVa#z9#g(!P^o>zZ&WA1Ka%in2SQ9W2z-PmD#sG#m-WMB{9>?V{V?JmXg@5>6Qr3( zyubah0-jLcm6`5nIf3o)2UF=N1${X(YJI0+CHQcbM5PwP9reTD4ihW z=@{}al}<_RT4~rUp1#F%R}+Qmd{8=(oHcYzoubGR zJMss2?}2A;-t%t#V9%>C#WW0#ET_U+7Mxe6$t$FRkyLE?m>s#PnzP{bN_3b^cdbhss-MZVm^TR2p@Qzr#jspol)*e_(@tzw3B0YJ~E2imtO{)&B@F3ykPGb=ItW;^lwK+Z8m%SlY%2Jap= z=D@#e(qqJdkRIU42#_8lKzfWwSbA(fC_SPDUAAsUwKq!0KSb$sP_#eupUfD_{I6RQ_%unq@pfSJ&!Rv~GQx00 zGzfY7hhUNsfQzI4=f&|JdNSQUy#wcAqHY5p#P14&526Bmv9V(j!wY2Ed-;ID;A{I9 z%;{hv_qD!unWA4x*6^%YpOLhOiP&p^Y2U z@3sGBrp$G-#4+Ayg|}DR!Kmre9Zq#so2L65*;>egI~Wyqx(gmZa=78~BZsDCtdUCoX^DhlQVDm>+n=_sBk{iaX!%HCaU!$5UG51LKd7 z7=JflrYZv_t~humnPcH7>V>a({NkPrVi0L%vX}U05+m0|el*9MwOYm#rHk|R_ua)N zo_?qH;lE%VHDb8>e`^MBFruy)AMwtlppE=QG39csL-B6YI21_CXIrSgVZBO^Wj9Pw zAUiwNM)6)udL8U1nG4Z3BckehGdI_4d&&(b@8c8(K0H?p<^nvU`XRkbm&|_ z(ay2`zLlfSRFK@vW25bWIk$aU5U%_So}0ej0=IMoFNAlXYvC@AHCoQg{=q#*AhD)D ztp$@cJ=+z&w6%AU5cg&2m5xrWbSLa2cXU8^*a7>uDjjgsMyD2dKT}JdobJ&-(SlcJ zfIlAnMJ;Fj)knfjN#Nqe8R##$e=daJr|DYqPvI=x&RqUfww81yJSyD*yVjw#3068_ z57`_?h7Z2%T3~G^garJb1^$DV@aA?K`VV&?zMp~qdi8&Ef8iKoV*bM8!$wmE{z3$T z$HHscl@8d&Hpc-=u4^+AY}>|QlEE9p0Z8*>;d3mSL0yMGc}pxa)109}OOpdw4bh%% zNDi_+{%2Q5hskl_2CwvD3%VJOyDS=;Ew1x8SHhSu-4v0Ct#JF{Oqg#B`qM50tn zlwa015`Q&$%ym)f$=b%%JpLNz>u=j=bjTECpl#zZCOKn{f|#tbwvqS;+BVklwvA3; z_qT1_z%Q(*F$W&L#qbN(Q6tiQ7urUA?atgbGMNRK1OCOj1`sO`Nbg1iC??B5p9=r+ z=w|?q^kL9ZG1&(CmGB>rKBf^Ao8O}Hxm6{Vyb-P`WA6l)_{)l*#oUjyrmVVFnO8Qi zw#?5NsL?J0bbie>Xjxi)4F(F-iH64dS?0F-1_}Oa6OLtz+V;;(xY?bdyx?H9FuxIO z=k#JN!}FbHL-gih2WH&~*x`Os4UsEI@9I+~k7hmHdL z;V{_tF*itHiF0Nd_lm~hTlPxi*ALHAmoP;bEqr{Jac23gPseT0!xz`d~5g( zdI9R*zd)EFza(2)9pY|h#3$1ER-vt7o!=8S8!qsCg5{GL!G^)4$PHks74Tp zR~nXVvc{vXvN*gwYa7C9!;j!90`Z^pqo=87b6!~vpjUvVEcg>T45m3)u@FUl!LPhIo&L=Ad6)q{D0rb;9rb|w^z~YB zkt3sLXrQ}CZNN-Og3@D7nwudc`Wh|yR#qH)6G;mm^Aw7Gqnre>NP|n@@^ptA?#J-z z?aYR`YvJxv>ER_2LqO#LbFqn=+fWB{Gw6{kKJV!v+Ob9wrx$XSN3?k;obfm}0+Aq0>WBhXnJ4tlXUs~a~) zi)myTxCF(aQf(~9uZMk+?I4e#D5#AZ6jgJwrhyyrvKiQ~)q-cLH@cw+=IY(N@_?^y z8^-$$a1eupL5Q4yzC2Y4pB|{9J(ZDa!-G(E_GUqs|RGmI{;FuMXXrZ zN-?|j)JPTN1IWX|<9U`~t~D@etu`zNP9ti8&!CHusy5t&NN8dY zT#fd0?j{?!1RaSMEvIF{2ay`|2d2Txbv07XIQ@=nmQ0b0(F&3XQpgu;^J6kTinZOK z&I0Vqn-%|HY*HdOLu!Md$cE(UiChasXzy!aG^FrrV2qoXM*wjjuHVO8-wQ7EL3jfr zoC+25%L&zn8Q?1;E@9!4x0fS{Fa(iPl(LgcPj-&3oTF632WSO`mPat=z(I8|1rDab z!4x={0tZvzUefp{rExAiAodx4Tvm!6b-XsWFlx?H$Ug6kou{)Llh6VuWsre#b_ zvrkOR^rSgGY1x6)B`Hg-AB3A+P)RIR_pHOi%oVi$$i@O!}z z)N>kkh%)w2*~lDpQf~gi(vCpTaX@NTvbB@yV+<-bX9b@)Uy1&(t~KZx@Q>;g_(vQE z5@zMZiLy8f#;Y+(wsw*zKdybC|D$7Eh5ZEFf4hJqEh^GsmWX}x(!=cVr-1WkQiQpU zU{u_Ii*Z8I4ZQHy@r1(k!#pB>O1}#L!?1|{*YQJc1z=}Z#7|g0e8ltLJ8f7C+wK)P>k?MIXbM&Od8v5yUGGQ3|DPbISyi?zWt zG_Mtre8J=vWealtK!Rg^jYpp&!QB$vC&4e5;5cCy&)-E7JSf5Mkl+tUaJ-6ulBz4_R+Z1^)P@U1^Qy~7 z15)b0rn;#JgoMcg&m=2&(`8K=3n2o~CkYUdgp zn}a%02Vi*+mRB@I&DnW+j*^H{mGD2!GOqV;v{_KO9H5t^6CcJ9q^~ z++0iE6YzE}kcV)c+~HzHxm1F`%W>3jU6sN^LI!ax2ZSHPg*W0T3kkt--I7w!dIJc^qc6{nQ*he zKj(WAM1TLz1vBDDn%sHTgk##1``b-8wq=CFCsUZ6=+-Z|a3{G>_)3E;S|>%E+DF3I zad+&Tk8pA)Q-V7sc(#BqL7*3fZW$4c!7X>c{mFNoYJ9Kz{&jz0l$O0Q!U_s z;&`2alRNbSzJ=2_2{@g1YnI^4B=~X(zCwaixG2BK-_;WOums;A!P^9!{A-us9TL1# zf_F*qZV67EIf^fZ$HvPS;b(C8H@Tpi?LAeE- z!lOxWwk`;KXpK$~J)3NggBJ_#PqvDER*2N zCHM*nzEXm(mf&FlPvPyy1_7sVwh1`Jt6ji}zC(g{O7JcT-YvmdAu#15`D^3l3)%2< z7>`%FfD?U&fd7vBXBY5w9M2T+G;VeZcqcDc*#cg~&29nT#ogBgoct{ia7up~_fUK( zUc~}^BM(o7fD?VSfd7iq*9rJGj@Jt~rCXDLQ#hLiocvuT;N;G70Vj7>2sowBN&zSL zS4;4)fIq?0e}jONJ8c3^;b|9e3V(+L?-cNDy#LfC;N(uX1gCx`<@;sa9UE_l2`6{b zC3uDew@dI$3GS5O*%I6>!8HLN!Q)jR;1sVy30^G0DWfFY3 z1YaS+S4!~J5Wdct0%O&^<3BFRmZ|C!ms|B3g4-5Di zJUkl&oaoymc)NhV$ld7>aB`ib1rv&d3aB`LZ; zj-)XR_L=H!VK|=zUj@NDOQ0Kk-2&+budJyJkAU}D@VCqlEwJzNMI*p_77Q(PVGj$( zGA(C~y7X}1Xx!s@3Ntk~I3qn*o%#hF#?gW^Y~IqR;YnLZu}9zI%?jr=Zh3MF5KReL z8ZneUH81Q6`(Xcl%ctiAb_@!%oSN6zquv_M%lZONwm_&x`t&evIrqX_Dp^3wA_ur5 zH<+IZo4Ij+l9JcB(SI_Wz8L8VS&njT30!AMR`b?)Lb+B2kQ7hWT94{|5za)6g;W^} z_+bo(E&W4tgLw{c#%VYc_NU<)4IBC54CdKcnp^`>3v|Oh;l=Rb+J;9-+{gm%6~M;z zk;&jhZm`T58h(f;H2f&^6(ENvH2nxA8T?IJ6U@u-WW5Lp2!Xe&H))U+a1g*g2wcLo zb46`<12P#rFMtGS3_{X3Zc`iY!x8{w;PWI%WX#o!{8HGs4qNAa`ezu}^q%u=?8H+e z5WuN?AJ~mdYHi%3Hr@){z~O}RIgMN4JFjuK+W1HI0k$go2VsLVBaNrxHw3sbtTy6M z3jKtlP>rx33K95I*t1?M-NVlUE?$d;SZ_Cm*esTwQsSUR>q`Wzpr#yy5E1K$o zZa5ma7;FRG=?@Ny!fL}jhIOfpGvOnOM=k=BQM+zqiD(q*JpG@Zq&L*2e86&Z{-xe@ z9;|RfwPH(B9yn+QS+K>Ydb{lJC9Fl+uWVgqAtA?q5=1aIkF)qw2;pUri}g@DOKqlYl*7}+; zGnA|~a0#qdx<%Uyr$64ZYAv1TB;SC^qdw3wF_dc`1f^zLmsa{hGP~Q9)?i7fu zg;NiPf3A&zYoSIqdcih$c*|$U>uqE5l&m&wnby*g0@uR2)g~W=_9IRGQP^9ml&gp1 z)&d1=tski~>+!o>9o3=+&M>G(w&jLq4}!<6_rgh#@@9xEt3sgLkv6glqH5&#W-wBD zjLgK)L6ATIIFdkwMph#`oGHRoJR?#Mi4OVVcjG~>?D|Ecd*Fc1FCqCop**N@aB>B5 z3&I?lp477|Ov?7ZkPL^2_Ph}ILb-mI+L#Ik?db+4Gchc#Jy6P_^urld2p+2d zppV47iR3_dJo+1+y>IM#1L}x&s=@Xs@@cBJ#-p!|Oau2IyB9cEiP{+XGnk=j--PQ= z6tUb;c~4{!#D&rPInsz>*xbpI^CPt|99aP|`$(PDqOqb4uGfRz$TrQjCh{PbG>qGm z7^L+{F0IE11vwrW2Z_l_3_F1Xg^V3z1F3^$Mr}~R0akAEAvTN-P8gzmf@Cxar%nhH zBO66zD6gMHxoawdYC{<5S|gK)Dp%jRKhbXtqVYtemBKAs=qKDrV)D~(kfoT(92%S= zE{-9~H^>GvGLWk*65i668IdpP3zDxV8+02Xp&1Fv&i%vI1IYyucz{uHLF0NS@Dqg3C}4BX@!hsRzpG8a-z0xbbIX=XfTbo0~Uj zvgVy~o-cpuw1V?5xN!Q6i!Lslc}Xl?$?VcOW#v~?%>BugmGi3RS6@|A>tC?&>bh&L zg$tmZb&9i)Im~`K&P`-*@Fg}N7WM}BZVS#$%buK8KPbREi{H@R;B43%ENm4vjHR`H zv@5GD8C6zMR9;guuS^+LI)C20vMRqa>c9Mcv!d7`sj#;3p(A`5%FT6_mi!yFbkjF} z%JvG|I3bh#K!-vU{lTn3m0@Voy~4jGLQY2-^ao3F3KWg!TKBz&z9gG34Xo=FOuMV zZ*KXhQe~9yTqoZ@8@s>u3fN~G-7?E}?bcQq_kzaRaJ%1j+^VA4CADR>5CTOhWxqz* z#i9!BF;mqh+`RWSpBFqV>*hVE51Mc@{R_NOpoZy5?&tHuj`?VAGv)|5XIB;pI1J*L zqBUsDal|qWSXssC3Fok~iR0)l)_DrgOI&zic+4_%EcXcM(Ji8PbDZd@KHGr?71C1J z(QM@4+~@^5(R*8S;@_V$dfWi+o;C?!H+rhLp}iae_Z(C@+VRf14o!a^FS3IR?BF&% zul^!DmW3DTEn>IX)#2O?Oxr-06K7UdO&qBQo6*7c&w|Mddr~WMBrSj` z2Oxu+O#BWQrm~3+pku?-u}Q7F#(}5M<42dcBUzofaCd|khEb4!Fsru4a8++r8{dSW zK87_Fr=%(!1$cL%hSwGq;s;3e=*WPV#ByaZM+?hH*pm*^rK>uiDTCZZfh_@WGvi(GVLNMYBt7_%o5E z6Pf;6bUYMwEI?Er!SG3%scOTeMEBB{(_w@mhwW^Xi}%$U!xh;W#Q|x2EG9Il`%#`v zS!!L9a(P;P(#?ZzN)B0QNb*geS3D5o4om|({9}1QaGM*JH!v0ayqJ*s)% zv5xbitVe%H)@N}16pr(zg``-`Fg|1gPZhRDVqiSlD#1;Ztd9f+U8%e`l`_>DZM z^57r8L7v4Z+6U#1L3`s*Fxrc8Lc30$ew0qs)>C*0r?Ct2m{m4+w6DH@Auv%~%=|U+ z0u_fA`vGF!p*zH1fd-Qj{fd`%NN(p5wQ~mS_hXWX@t5`e-8}t9p<^Z``fsv|`9!*J zU*DfcDkh|u{*)@c7DnHyH?~xd?LZ>dVdVOu1dn#U=s22iz>K=k#_2ZbtD$3{us)dk ze02;pa10yu1@GWEV!T_(koyIk>Q_DgAbR4lb9%AwSRQ-jf1m4ouJNvZ-}%3yH<=YT z3rGL&{MUC3@Y?^6H2n*SaTnt+ zYr|G@;f80g%}Vs&Y-j#Px^J!xqga|lgl*OS^G=v9=J_S6Z$|?z)-`ku%X>UrAz@E# z6*tqoj?on0jl{Jvb3^DRs^bhTI{$DfH~++hn_J)z$1(4*Y*U+N=Qv{Kaxs5)Y-7~d zJceuh=zi}xIoKB2GplRLVC|+1=IOHRnYm@N=ay92$Bu%#U``wD%KFk5%-NEUzpM^c zdFGV(OO#QwYikeSLJ*V}EIU|lW#cib8$iO8SPx`v5$(&>I3Jcx^oMFG$>RUjw#a?3 zEn+$URofyeKfD;lZFkAetbbS9A{=MNYl}_*T&!ytzq2H`5*7B;7|owu>n|z2vM6S) zAr_3&G=2ST(!!WVsn0fP>=~o`yARTina`D*>3n>oZ`Sna_$5LlN+RQum}`s<tziq*EgKfWGaSR|Emn6zB8_M{j>r(ZXJCR${w`SS1gz&9uaR-P35bKb z0)K?J$`0td6}E*3_+m{vL>c9WtWA6c?9586r?NJY&fOGqX6y%|Kh&mBTOk`CWk`fy zqHSWL{IWLD&i%LZ@RKH*Wo;sztI;?k#y?)0crM`Rm8n`Y4mbCo+GYmA52YWO&xQ{% zP0+5G6H=Rw{^Lv$@l*Qe0~Rl-mvOMKHu)k6|CV@;#-Ww9$;4j{JZ2?2i)JzHkbX69 zQ|mbcwmmdoi1rkJl=t!0+p_tz+I2{5QlkGRtC&xu`#RfXY?}s|a*oM1!0a5a1|1cX zX~rkSlP3x{lNN6d5$)pLi)rBIR?=`~3}~WkK$|=X?vvmb0zT9fPCJ-UVf^B`&&Gw+ z=$0z59j%C3efBDv8Q^cBMG30Pt}d-uP<16eoyH$YW3OFDiOiFn#z0@f>3h-2L&{2l~BiS!Q|FvGE|5$7yE+j z@?cH>j28SbRbl6l#R)p@bCSRJjlq@mIS{8l$K6QyJzwu*X@Kd#6_rsk%lZ)Myi-!l z39*b~k)g6rGF;Y&c!%?en%G{B&)lPQ)gDAAvIZ8eq)^SGMoTYvAW#&RguP3AFg3}~=z7~uxyIrA6L zgQI+DFwTtY{_B9n%u(ZARQ$wt2lJ5Hyjlc7VZ894)b0EO>CJ7eo#RN0cBG7OMxPj` zHY~^Klq06K7EI=Rhjd^*}w&x;DI}I(KsaB%1wGF zHw$l;!<&2W!_#`7a%Y}q(g}9t+FB{S`lHL*K9r@@_65*EIJ1_Qma#NBG$=RCzQm%X zWln}SEZ95XXpQb*Ul0}Jo1A78!2>-9{Vf}J|J6v6=&x8WWo>2!AGc_n^H9*Ch$P%* zz9025_9M|YGf{q7o5=zTUfW~6-_I;-GwB`>bNu7AndgH0m@cO3%Y3vW2&$O<_Wp>{ zST^pa`#Px2$Mo;dxVxVF-&dP08+Wrq#J$0eesO1`W?7p}`~w|#FXwG;1@{ogGSqIP z=Y6%=HeP;bMMG+Qh~XEkqei6rI@@eKPh=idk9Tmwy{Fb-zJhDh+QvDfs z<34LqHlR~E65I`Vyzw=TyW_c|m>N-Icug&Rba+ib?^EOW4te?2HFN!C@wN&rq-{jt zW%P`c*rrqdBaU^5`UZbMCQu@7phlg>JR(K)7Rv?lQ2tO{2`73x{}B5U1p-d)&{;P+ zOvT5^(muw2c|U9?1Pe#Qn!0KO4u}h2oE*ZSK7v0uIxfU_S3?bs?O^WNp=Q;6sAg4z zUa?utDsEA;3jeNV72Ks}X}?gj+>4R23n=mA6^yyrc`3N6MALV$A#!v~?1bI1Se4C# z<#Y^;0=*E_Tj5{UM=+0%??j%-XqF}~m9-KJ#jIcRS7$=9C) z*V`0-iWW>=4+qx6t+*5or+MeVXViG;`nkOY1rf|M+&l+_L zj!Lwzktn~cuVLr@+l4TQW?5f@?w%~>{22fK%qzIL|0_5@X_S6smdz_vqp$~6%zlkA zQGezY=-rKh&MTZKW+)GbP@LF37V$`lf1vXUG%v7$dx-N2_)qCaAudsj<}vr_3}jU7v~$u%w#2CDE|22=T4IZUj}%*`3%-qqt1{qanaj5n_E><$+ikaq3C2r6ydWO zxPKsumCvu4SK=483oImS-U%#;d9BjeOdz~DX>t+IPNAC2evLT_EZ5Z6`=bfRc@4sk z;{_MR3YHzh7nyKON5cPN!p-!nO*qa85HpcVFWJA)3Bl0dLR`1H3YK}`Qjh)i zFKBGK#+acA;XNyG3n-taVN)$VZ}mM_b1R>#>B5;B8_dO|V{(B$+{yjVfZH_TA{Ph= z%;BuTP?;uZhNBUb_$E2x*#AOxFaCVb=Vw?NU^;MxiELJ~KGRn{BgV4J>=FM?w9k|% zzpT$h{8*UG%4Rmex2(_fRnLh1uk2qK====rVayTI8)a!C3hBPiJ`0B7zcD|9>qF-G z8LDqb11{Dz^mC*HS4ikbr)T(11)~w>wvx#iaPv5H92B)lR~Sac!*#^X^D}pF9NR~< zqqft|adL+nDR|Kh34OImqetiT`|gYk3=CIprt|q3nwa79Cl_i#Ro{x2PKPW*H9b|+ zH?istSB|qO7PQxZAf7Ewk?^UVSq|J*0P{M>!%hd7j9_j=_0l#iX{%SqIhbR^#C;q;26YoYhvPp+eJV^vBrhHGec%5d;%P#fSRZ9= zUppUC6mv!#FQYu7wuAbGr*K>xGq!O)QA@P#OO#*M_H}TN?Lq)Vv#jmQ<`FIC{22fK z%oni40v_t$a%ZCHM`qc4!Lm61W0r{NpAT5P_N0!31D!AUzj%(u@e9WsV%`I!5Pvxu zOiFYX%_fl-rCi4MAy6M3$5i+)#$PsHpz-pnM_n{NME?crs1fPD&bC*aFCf`>0{Cm5 zFQ9%r?h`=V$wSCwAAIL=yny3O_VI6d+s+e*(~;JneG53AOD9H?UL?V>9K@raFTocA z9)Dh7zYPu1enIcFfI(B#J1f8e^P~WWBy$3WE$or3sVu9aK_PA)_g65~z|G_MY7>s>MDB2y)p2yIfCE$ysQx%Pj=ZP{Co{=w!VM}#vGWhH zuahm{D#86){V`%D9PSEvaShATJI`5w-TR%1Hg>dz;*mGi|J zu$FZp^mpvW8j+R^YbwDRaGvpHc&2Azp*M&NK-a-K%T`zp^65K`6&PF%%Gw8~EMX-E z7Hq)i4Z={pcQr;|6FRpi@L7+V+or*nR{D&V(^50ae^O}TAZ^($coAbbJmP@tGcx%5 zFwECH+peY1K^qaNg~b{zDIXWe?0Or$83Su@&^_ZFwXG2BY_AUMR1+L{hiwMN>?!== zF6!@U`l~+uEz>>^oKV2z=)@oF!e!zzoD+P>ZbhgsCF`?c|DEJg7#)GNo5^Vzq2!xj z0mr`7lAD&f#G0Gt%uOo@q;Oj5v&}+!SPKdyPfl~=H>&UXn$EG1i)O_#%>>B$Xw*lb zJ_hzt&?%A)ROe-Vv{{0`7e`< z%b%=|MsM=1W3Kf6h~e+GiTy&lud|Pa?K$?jNQLPG^slpTbpp6A$^i8GR0-|@9Oqxc zprc|k7WDJsKb|{ffXC}wT_d4iBEf$v!BF4P!fi~P)W+!rkX~mqS$*$6gPwU8PkJzCG{p!oG&|Im~>o3 zM=9L=YgiO9KB%k^EbDVrU;_)vX=tqMqCZpyscfAB7~i)ESg*vohOUf~ z;7U};(xM0fy!E5g8XTR@i zmCO1Mwb-Nn5f(<-_!My(pW+$Xs5;Q&%x}s0gqSpd#1PA$OxD+PS+DT~#4>^Pk7@zQ zK$)y3S)^FhPr+8xgzmKw>>Lr~66!Tv;zH{^Rb4PRD`1oIw_2T+B z)i>Gtw;hr}tb>>`VAqUK$Pd0S0w9c%z@<^|4C6>h4kiejGYr8 zZA{xhJLvd8pszVz*8t{tGfjoY&BDRQ0l0dNbE5dv7@zxmw-X82X@i8$upN)&aJn6} z13nk|EomcI8n6T~e#G)AYa^<89d~kGEF1l4BZ@hns3qD)B+4&qBZ!~EPvIaLM`qc0 zVEI>UBbvDf104@MLje?YQ*~iBvhe`%4|F_``4z_lPM&@^$7)t$_|10aZ>0M!j0bSu z$Gk_1>KpD^66+eq56fFTT#3$+!Kmu=2HriGGs%{7RHW z#s?>%v$@~Uoh9EA+0W7d(}63o+{t8r-B*1sL4}joW>rj zU;+6`KbYrOZfQ(Lj=AYW&_!8z0@x$JIIr#&_{b>o{}3!tz73RrB=DmDqH=SfFIk2+ zcE;nsR&RH* zeEPfkCa}nW*#H~t&Ei+B3MH{fc&)#zR@srTJ-O@Bqx8yxiv_dtiU z!O>)V!`80`M>BjIfe3^xxECx_)1Nl>V!^&E)}=ty4u-Kns(92@mnjX~{BsSapv|kV z*VHFl^Fw7xdvZNVcD3ivhJQc+uPQJfZdbu2pZe!~QjORcnu99R?Px@)Tg0 zaJky>7Sy2$m#GaqL2n2zfQ@(X$ai^jq!>6DT|*clcyt{AOs(2MD5ly(Qyht)~^Vs`a_aNlGs4XsdX-!SPq{7@X+IYkWs-ycf!I(8#(#w^I$Q z084$1mV7JAwLsVw&DU9ubXQmlEoJ;#@Ni5syOFxX;LY}i)$p2j59m`N{K0=PDtNG4 zZCDOC%ZVhvV=T`N8(efz(YRY}9Ewbk*by6i)Gu<>R;UecLXetfIcg)VfHk8xaK*$T zM>=F!=MUgTZ+K69Y^0q%?R~3J&O&$-g;C}r7lMQN`umX{Aiy$#(jsyVxC912d@Jb7 zB=xpj#|Zp7U%f5d0N?&Y&~%B~h)*YdcO;8~zC}e4VN`WPqs4g>qX71U@9l zYuvKnaIkX%P>G{fwc$>P3A`X*neH$422;GHFQRa;`HK;=sSQP7?K^7`ob?QR2<~bS zsO(8ij%>)n>E52F!SU%iP%+e{HQ-lltkF@3H~Ni1U$DH_{qzO*a9~bPI0s6C zAIdtDyijvEN@1&Z46`0ZE657(ZxdOp6Gj-RpcosoKRTd&lAdZ zK#53FZ@dLk3fjLNpgn;FEK&+z5bP02M{f(fJt)v>V{wF?-<4`$AqxZ4N667^=YI0& zEhg1XLLksxXOc#EAy9WAFY5n+lE-V>v*4{S2j$(8lUPD>c}FECD(^nyg(E8E4aY07 zenE|4;x_UJa5&oHU#2!5iJ8iK0Fl9%-H__(`UjXeww?+R5`yr)V+ahxzRFE%Y%k`rof7-)XHI|a+06$pxS;j&(VAdKL zF}`1={BFp$#OuT?$b<%{`OQW?Lfgwk%;_lP+n^|dV-Ry+;~ur)FF*pq0b4wlcG$4- z61@SER4(mz$IplYU;;r0X^c7RR~zmII{ds=Z47+^iTO)zhT3rtkfPNkSRk9##(7|` zl|tvmNTJKY7(eYkgZxcAH6G|!+6{pmGX>(+e{&31M4idU2vJN~jb@w7i zLBQ2jAW)i8Bfmy|tb^L#*G$zg8)ASdbx<8lfrBaVKbZoul^zGgmUeq1zs# zMuG|594NnR<*14K-!3>z;io|0Dy|qNW`_v_stL;)D0B`+4*SLbT);5?JelCjP{ll< z*^rn(&_(}cCzqNqVL>?!jrk8V98rEs|9rsEe^Iq_|NENly$BfN@gHuQ=QF!4(#mFg ziND;;9LKMCX@@M`Twu`2QCywJE~2);I~NdKT7b2B=}khjw`Y8(rt$X|3HF&F2QN?zEr8ba&C3e)fL9o{-yqFs>_OI z7gf%u1w~_$Kla#ryfaw67vjPBsnY6el&Z?2%95%p=2n%@=i5-?9^NW1g0}^V;8Z;j z!LNUQWzpO!e_0J)=*QMD%ZuhMs4N;?R#$D9uQD;fU4GXZ#<_+iH!;`1k~_{VIVU%j z7tNWw&~O*h$h^Z5>k5pMm|6zks8HUbOeXv<2!cY~e1hwFh8nop9S;`-NRK;i$ellP z9K}9Na77i)U7$kEeBx^pukxb5+j*mcIF=i7e>OHEpb$sdN%&pdGsMl|8NsW(NM9$x zuiyd_>2alt+`rv~W7-n_cN2~xm+&(&u|T0aC^HDZ+=QFMzf^+H;_WB8gFBeWorNYG zMK$4fm~gZE8zlG+6OL^Hx$}t$$6daJXY+mmhUXX)4xdb6_M_c6UJj_eA-vTfi^>8K zr*=ui?VL}O@bFl@Inb* zEZ`KL3IQj7Y2JXsPk5b#zFvYi2{`%NEa2q+G6}w1g0GO^D<$}92_6>kAMyU&1_7sV zwh1`Jt6jkV#>;DmfRj6&61+=-cS~@ZfD!Y{mK<9SN#5duDJqd3SNqNQZXSNSfFH-x zCsV+wJUb70k7fx_zD3h`f35ck<-@+IK9AJ zFW{7JO#)8gY!>iV9?oR~PVOuhaB^pbfK$G#6!2E={%Q#x7Vv2K7jSZ?O~5HUcJ2=j zCwLYzL=*4=ZZ5|yZ{>;ad2@|-_WMO1Y9rB0H}jXDa#;L6cGqyPjg#F%?t|rO^DF9j z0r^*aKwbYx)4yOxC*VD}bnp$9CKG%-J)x6zzsC4{&tFexX@Kd#6(+M;$>zvAd7U&Bi1!^ zC`*DXT-ei8s9`iF8jB1=?1?&T8^A3*!H0_46r77j^%Fy5IOY+l5dXmT2YG1j$j)(c zhZ}jYqL+^MzJvk0tKlJZP{yyz=^Q^64qCXz_x~020#l)IGmqUc&pAZ-xRpXNFkQAT zi#V;zn%m(6bh?8rupZ#0RF;4!>oKXhXk!@uxcOI1S^y@N-xB~seo@}!a(+=0+qgl*5WNGG! zLUI77u~80*@t3tV9lWoC>1$S^|7JV$H`4XLt%(;CEZbt~Hr71M>!D`Oc#>cwy^WT>gc*}2uppo?`It+0N?!$(VSbK?MOd;T)MY8KO8@rJDY ziZXwxvY?7-=$T1j`tv0XhEhz#@wj11wC{#0OZ3w4HZjc)#c4E0zYB4qQ78xr0RHjeixF}WL;e4Vdwl7$x(anMK%f?ro++(K@017|B*k+4i zLc40A&BOTjXMB~x>sMcGo)_FTRYmlgsSDzPU?ak^HjnrRI=))T6UELw?C)p8umJN}cpoqu580Luc=+c}Q3 zXh*76XvCtY;HBd-SHEw+{gO5etN+0l3P-s{xlSAH%KHEIuAa4uAc|@e?X*;@Ma4$Y zrvwcsxMH({f`v%HCQ;GX2!bKRPB4uGF{Nl@769mCF-ZOK~GEQdP z+2GTtZ^+A?xjQpEGkZVw-klHIG~wZ+`*X9m4BE6J2ZxINWIpW<*@5Mah>9@gpPUZ+ zLiTQ04m1k6A|24B!$3r-5bKMa4l6A`Djha8)?x1PZP!P*O8WWVe1zh+-abMK{Z?6d zZN=SJT%yQFc#lkXkq~?f9i{M+5$GFSE7L{gKEl(3{`S;?K>5|KeSU9-=JvN{_gOo1 z5DOjcuUXpj4wEVOt?Xa?Xp1gw`TWWUTkiRE!{u4teBUfh%uO_#8_m;+uj|XU_rfQu zu6ee2^fMs7cR3TxEGEdWX6XXfB-;tRw)`J4J0@q%mL%Gr#Vu2XOi$KqJ?`F9Yfd8B zE(fS`-G1Gn#LnV$NLLy1PqJFbWd-1`FrnR*kp%t@@izhgl)d(w9iEkS6}pHb+G0M` zgs%t%N_Ae%hauetKSUp$w^P20Rq8lloX**8)9n8Y%c1`eeiR;tp$1tPobrW={^Z&Q^f^5*PDmB0H#tG2ckx7jjw zhSLcEL$(9{F8t#DL!KwCHICmoyB>y2x56wgj(nrE8!1vDEWdFstBuhX6Kqz~0x zq~1~LY*S|7mq4G}Yk61wbNAoV3g|$(nrO!Zpre`y(Me2SYP0Z4i=TwoI9IGMwo9iX zyz03Y;Z@Ht!q-gCd%L@x{L*RPPEPio`%#5`_&BboYFbny3GEI=g|L@ZmkU; zkglp7pYFo(lMK?pq{d3uLWq2$)NQy|UiZXQ;#-!|N$?MbK2h=8LBq$qhFXqi@OHY3 z_ae%mWV&nC3Fs05Fti(GcR=6ZnsiZRaRlISO<}&T4|9B~%j}6A;xoj1R~TZt%gOl1 zpY!dL z_mO{1#)B_H883dz`3zz2#5{;vK9g=lQ=j?&k?7ws(`VW-K3tt;9 zAZ1JW@Pe?**LB(QrOIPph*XI4=6qc$zuh?!ziNm7si+fi`=iTk68Zi{dqDiw-yVoQ mFi{96d{6$H6Zh-DTnq%zXJ`)`a#;V)k89Eq74g7@_P}@lD$42r diff --git a/misc/builddeps/linux64/gmp/lib/libgmp.la b/misc/builddeps/linux64/gmp/lib/libgmp.la deleted file mode 100755 index 34fab8f3..00000000 --- a/misc/builddeps/linux64/gmp/lib/libgmp.la +++ /dev/null @@ -1,41 +0,0 @@ -# libgmp.la - a libtool library file -# Generated by ltmain.sh (GNU libtool) 2.2.6b -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# The name that we can dlopen(3). -dlname='' - -# Names of this library. -library_names='' - -# The name of the static archive. -old_library='libgmp.a' - -# Linker flags that can not go in dependency_libs. -inherited_linker_flags='' - -# Libraries that this one depends upon. -dependency_libs='' - -# Names of additional weak libraries provided by this library -weak_library_names='' - -# Version information for libgmp. -current=10 -age=0 -revision=1 - -# Is this an already installed library? -installed=yes - -# Should we warn about portability when linking against -modules? -shouldnotlink=no - -# Files to dlopen/dlpreopen -dlopen='' -dlpreopen='' - -# Directory that this library needs to be installed in: -libdir='/tmp/g/lib' diff --git a/misc/builddeps/linux64/gmp/share/info/gmp.info b/misc/builddeps/linux64/gmp/share/info/gmp.info deleted file mode 100644 index d65ab795..00000000 --- a/misc/builddeps/linux64/gmp/share/info/gmp.info +++ /dev/null @@ -1,178 +0,0 @@ -This is ../../gmp/doc/gmp.info, produced by makeinfo version 4.8 from -../../gmp/doc/gmp.texi. - - This manual describes how to install and use the GNU multiple -precision arithmetic library, version 5.0.1. - - Copyright 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free -Software Foundation, Inc. - - Permission is granted to copy, distribute and/or modify this -document under the terms of the GNU Free Documentation License, Version -1.3 or any later version published by the Free Software Foundation; -with no Invariant Sections, with the Front-Cover Texts being "A GNU -Manual", and with the Back-Cover Texts being "You have freedom to copy -and modify this GNU Manual, like GNU software". A copy of the license -is included in *Note GNU Free Documentation License::. - -INFO-DIR-SECTION GNU libraries -START-INFO-DIR-ENTRY -* gmp: (gmp). GNU Multiple Precision Arithmetic Library. -END-INFO-DIR-ENTRY - - -Indirect: -gmp.info-1: 981 -gmp.info-2: 300864 - -Tag Table: -(Indirect) -Node: Top981 -Node: Copying3211 -Node: Introduction to GMP5062 -Node: Installing GMP7773 -Node: Build Options8505 -Node: ABI and ISA24573 -Node: Notes for Package Builds34251 -Node: Notes for Particular Systems37338 -Node: Known Build Problems43895 -Node: Performance optimization47429 -Node: GMP Basics48563 -Node: Headers and Libraries49211 -Node: Nomenclature and Types50635 -Node: Function Classes52632 -Node: Variable Conventions54325 -Node: Parameter Conventions55934 -Node: Memory Management57990 -Node: Reentrancy59118 -Node: Useful Macros and Constants60991 -Node: Compatibility with older versions61989 -Node: Demonstration Programs62950 -Node: Efficiency64815 -Node: Debugging72439 -Node: Profiling78997 -Node: Autoconf82988 -Node: Emacs84767 -Node: Reporting Bugs85373 -Node: Integer Functions87916 -Node: Initializing Integers88692 -Node: Assigning Integers90839 -Node: Simultaneous Integer Init & Assign92426 -Node: Converting Integers94051 -Node: Integer Arithmetic96973 -Node: Integer Division98559 -Node: Integer Exponentiation104869 -Node: Integer Roots106309 -Node: Number Theoretic Functions107983 -Node: Integer Comparisons114126 -Node: Integer Logic and Bit Fiddling115504 -Node: I/O of Integers118051 -Node: Integer Random Numbers120935 -Node: Integer Import and Export123546 -Node: Miscellaneous Integer Functions127556 -Node: Integer Special Functions129416 -Node: Rational Number Functions132503 -Node: Initializing Rationals133696 -Node: Rational Conversions136157 -Node: Rational Arithmetic137888 -Node: Comparing Rationals139192 -Node: Applying Integer Functions140559 -Node: I/O of Rationals142042 -Node: Floating-point Functions143902 -Node: Initializing Floats146787 -Node: Assigning Floats150874 -Node: Simultaneous Float Init & Assign153441 -Node: Converting Floats154969 -Node: Float Arithmetic158217 -Node: Float Comparison160230 -Node: I/O of Floats161811 -Node: Miscellaneous Float Functions164409 -Node: Low-level Functions166303 -Node: Random Number Functions190437 -Node: Random State Initialization191505 -Node: Random State Seeding194363 -Node: Random State Miscellaneous195752 -Node: Formatted Output196393 -Node: Formatted Output Strings196638 -Node: Formatted Output Functions201852 -Node: C++ Formatted Output205927 -Node: Formatted Input208609 -Node: Formatted Input Strings208845 -Node: Formatted Input Functions213497 -Node: C++ Formatted Input216466 -Node: C++ Class Interface218369 -Node: C++ Interface General219370 -Node: C++ Interface Integers222440 -Node: C++ Interface Rationals225871 -Node: C++ Interface Floats229548 -Node: C++ Interface Random Numbers234830 -Node: C++ Interface Limitations237236 -Node: BSD Compatible Functions240056 -Node: Custom Allocation244767 -Node: Language Bindings249085 -Node: Algorithms253038 -Node: Multiplication Algorithms253738 -Node: Basecase Multiplication254710 -Node: Karatsuba Multiplication256618 -Node: Toom 3-Way Multiplication260243 -Node: Toom 4-Way Multiplication266657 -Node: FFT Multiplication268029 -Node: Other Multiplication273365 -Node: Unbalanced Multiplication275839 -Node: Division Algorithms276627 -Node: Single Limb Division277006 -Node: Basecase Division279897 -Node: Divide and Conquer Division281100 -Node: Block-Wise Barrett Division283169 -Node: Exact Division283821 -Node: Exact Remainder286986 -Node: Small Quotient Division289213 -Node: Greatest Common Divisor Algorithms290811 -Node: Binary GCD291108 -Node: Lehmer's Algorithm293957 -Node: Subquadratic GCD296177 -Node: Extended GCD298636 -Node: Jacobi Symbol299948 -Node: Powering Algorithms300864 -Node: Normal Powering Algorithm301127 -Node: Modular Powering Algorithm301655 -Node: Root Extraction Algorithms302435 -Node: Square Root Algorithm302750 -Node: Nth Root Algorithm304891 -Node: Perfect Square Algorithm305676 -Node: Perfect Power Algorithm307762 -Node: Radix Conversion Algorithms308383 -Node: Binary to Radix308759 -Node: Radix to Binary312688 -Node: Other Algorithms314776 -Node: Prime Testing Algorithm315128 -Node: Factorial Algorithm316312 -Node: Binomial Coefficients Algorithm317715 -Node: Fibonacci Numbers Algorithm318609 -Node: Lucas Numbers Algorithm321083 -Node: Random Number Algorithms321804 -Node: Assembly Coding323925 -Node: Assembly Code Organisation324885 -Node: Assembly Basics325852 -Node: Assembly Carry Propagation327002 -Node: Assembly Cache Handling328833 -Node: Assembly Functional Units330994 -Node: Assembly Floating Point332607 -Node: Assembly SIMD Instructions336385 -Node: Assembly Software Pipelining337367 -Node: Assembly Loop Unrolling338429 -Node: Assembly Writing Guide340644 -Node: Internals343409 -Node: Integer Internals343921 -Node: Rational Internals346177 -Node: Float Internals347415 -Node: Raw Output Internals354829 -Node: C++ Interface Internals356023 -Node: Contributors359309 -Node: References364267 -Node: GNU Free Documentation License369925 -Node: Concept Index395094 -Node: Function Index441276 - -End Tag Table diff --git a/misc/builddeps/linux64/gmp/share/info/gmp.info-1 b/misc/builddeps/linux64/gmp/share/info/gmp.info-1 deleted file mode 100644 index d1360599..00000000 --- a/misc/builddeps/linux64/gmp/share/info/gmp.info-1 +++ /dev/null @@ -1,7084 +0,0 @@ -This is ../../gmp/doc/gmp.info, produced by makeinfo version 4.8 from -../../gmp/doc/gmp.texi. - - This manual describes how to install and use the GNU multiple -precision arithmetic library, version 5.0.1. - - Copyright 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free -Software Foundation, Inc. - - Permission is granted to copy, distribute and/or modify this -document under the terms of the GNU Free Documentation License, Version -1.3 or any later version published by the Free Software Foundation; -with no Invariant Sections, with the Front-Cover Texts being "A GNU -Manual", and with the Back-Cover Texts being "You have freedom to copy -and modify this GNU Manual, like GNU software". A copy of the license -is included in *Note GNU Free Documentation License::. - -INFO-DIR-SECTION GNU libraries -START-INFO-DIR-ENTRY -* gmp: (gmp). GNU Multiple Precision Arithmetic Library. -END-INFO-DIR-ENTRY - - -File: gmp.info, Node: Top, Next: Copying, Prev: (dir), Up: (dir) - -GNU MP -****** - - This manual describes how to install and use the GNU multiple -precision arithmetic library, version 5.0.1. - - Copyright 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free -Software Foundation, Inc. - - Permission is granted to copy, distribute and/or modify this -document under the terms of the GNU Free Documentation License, Version -1.3 or any later version published by the Free Software Foundation; -with no Invariant Sections, with the Front-Cover Texts being "A GNU -Manual", and with the Back-Cover Texts being "You have freedom to copy -and modify this GNU Manual, like GNU software". A copy of the license -is included in *Note GNU Free Documentation License::. - - -* Menu: - -* Copying:: GMP Copying Conditions (LGPL). -* Introduction to GMP:: Brief introduction to GNU MP. -* Installing GMP:: How to configure and compile the GMP library. -* GMP Basics:: What every GMP user should know. -* Reporting Bugs:: How to usefully report bugs. -* Integer Functions:: Functions for arithmetic on signed integers. -* Rational Number Functions:: Functions for arithmetic on rational numbers. -* Floating-point Functions:: Functions for arithmetic on floats. -* Low-level Functions:: Fast functions for natural numbers. -* Random Number Functions:: Functions for generating random numbers. -* Formatted Output:: `printf' style output. -* Formatted Input:: `scanf' style input. -* C++ Class Interface:: Class wrappers around GMP types. -* BSD Compatible Functions:: All functions found in BSD MP. -* Custom Allocation:: How to customize the internal allocation. -* Language Bindings:: Using GMP from other languages. -* Algorithms:: What happens behind the scenes. -* Internals:: How values are represented behind the scenes. - -* Contributors:: Who brings you this library? -* References:: Some useful papers and books to read. -* GNU Free Documentation License:: -* Concept Index:: -* Function Index:: - - -File: gmp.info, Node: Copying, Next: Introduction to GMP, Prev: Top, Up: Top - -GNU MP Copying Conditions -************************* - -This library is "free"; this means that everyone is free to use it and -free to redistribute it on a free basis. The library is not in the -public domain; it is copyrighted and there are restrictions on its -distribution, but these restrictions are designed to permit everything -that a good cooperating citizen would want to do. What is not allowed -is to try to prevent others from further sharing any version of this -library that they might get from you. - - Specifically, we want to make sure that you have the right to give -away copies of the library, that you receive source code or else can -get it if you want it, that you can change this library or use pieces -of it in new free programs, and that you know you can do these things. - - To make sure that everyone has such rights, we have to forbid you to -deprive anyone else of these rights. For example, if you distribute -copies of the GNU MP library, you must give the recipients all the -rights that you have. You must make sure that they, too, receive or -can get the source code. And you must tell them their rights. - - Also, for our own protection, we must make certain that everyone -finds out that there is no warranty for the GNU MP library. If it is -modified by someone else and passed on, we want their recipients to -know that what they have is not what we distributed, so that any -problems introduced by others will not reflect on our reputation. - - The precise conditions of the license for the GNU MP library are -found in the Lesser General Public License version 3 that accompanies -the source code, see `COPYING.LIB'. Certain demonstration programs are -provided under the terms of the plain General Public License version 3, -see `COPYING'. - - -File: gmp.info, Node: Introduction to GMP, Next: Installing GMP, Prev: Copying, Up: Top - -1 Introduction to GNU MP -************************ - -GNU MP is a portable library written in C for arbitrary precision -arithmetic on integers, rational numbers, and floating-point numbers. -It aims to provide the fastest possible arithmetic for all applications -that need higher precision than is directly supported by the basic C -types. - - Many applications use just a few hundred bits of precision; but some -applications may need thousands or even millions of bits. GMP is -designed to give good performance for both, by choosing algorithms -based on the sizes of the operands, and by carefully keeping the -overhead at a minimum. - - The speed of GMP is achieved by using fullwords as the basic -arithmetic type, by using sophisticated algorithms, by including -carefully optimized assembly code for the most common inner loops for -many different CPUs, and by a general emphasis on speed (as opposed to -simplicity or elegance). - - There is assembly code for these CPUs: ARM, DEC Alpha 21064, 21164, -and 21264, AMD 29000, AMD K6, K6-2, Athlon, and Athlon64, Hitachi -SuperH and SH-2, HPPA 1.0, 1.1 and 2.0, Intel Pentium, Pentium -Pro/II/III, Pentium 4, generic x86, Intel IA-64, i960, Motorola -MC68000, MC68020, MC88100, and MC88110, Motorola/IBM PowerPC 32 and 64, -National NS32000, IBM POWER, MIPS R3000, R4000, SPARCv7, SuperSPARC, -generic SPARCv8, UltraSPARC, DEC VAX, and Zilog Z8000. Some -optimizations also for Cray vector systems, Clipper, IBM ROMP (RT), and -Pyramid AP/XP. - -For up-to-date information on GMP, please see the GMP web pages at - - `http://gmplib.org/' - -The latest version of the library is available at - - `ftp://ftp.gnu.org/gnu/gmp/' - - Many sites around the world mirror `ftp.gnu.org', please use a mirror -near you, see `http://www.gnu.org/order/ftp.html' for a full list. - - There are three public mailing lists of interest. One for release -announcements, one for general questions and discussions about usage of -the GMP library and one for bug reports. For more information, see - - `http://gmplib.org/mailman/listinfo/'. - - The proper place for bug reports is . See -*Note Reporting Bugs:: for information about reporting bugs. - - -1.1 How to use this Manual -========================== - -Everyone should read *Note GMP Basics::. If you need to install the -library yourself, then read *Note Installing GMP::. If you have a -system with multiple ABIs, then read *Note ABI and ISA::, for the -compiler options that must be used on applications. - - The rest of the manual can be used for later reference, although it -is probably a good idea to glance through it. - - -File: gmp.info, Node: Installing GMP, Next: GMP Basics, Prev: Introduction to GMP, Up: Top - -2 Installing GMP -**************** - -GMP has an autoconf/automake/libtool based configuration system. On a -Unix-like system a basic build can be done with - - ./configure - make - -Some self-tests can be run with - - make check - -And you can install (under `/usr/local' by default) with - - make install - - If you experience problems, please report them to -. See *Note Reporting Bugs::, for information on -what to include in useful bug reports. - -* Menu: - -* Build Options:: -* ABI and ISA:: -* Notes for Package Builds:: -* Notes for Particular Systems:: -* Known Build Problems:: -* Performance optimization:: - - -File: gmp.info, Node: Build Options, Next: ABI and ISA, Prev: Installing GMP, Up: Installing GMP - -2.1 Build Options -================= - -All the usual autoconf configure options are available, run `./configure ---help' for a summary. The file `INSTALL.autoconf' has some generic -installation information too. - -Tools - `configure' requires various Unix-like tools. See *Note Notes for - Particular Systems::, for some options on non-Unix systems. - - It might be possible to build without the help of `configure', - certainly all the code is there, but unfortunately you'll be on - your own. - -Build Directory - To compile in a separate build directory, `cd' to that directory, - and prefix the configure command with the path to the GMP source - directory. For example - - cd /my/build/dir - /my/sources/gmp-5.0.1/configure - - Not all `make' programs have the necessary features (`VPATH') to - support this. In particular, SunOS and Slowaris `make' have bugs - that make them unable to build in a separate directory. Use GNU - `make' instead. - -`--prefix' and `--exec-prefix' - The `--prefix' option can be used in the normal way to direct GMP - to install under a particular tree. The default is `/usr/local'. - - `--exec-prefix' can be used to direct architecture-dependent files - like `libgmp.a' to a different location. This can be used to share - architecture-independent parts like the documentation, but - separate the dependent parts. Note however that `gmp.h' and - `mp.h' are architecture-dependent since they encode certain - aspects of `libgmp', so it will be necessary to ensure both - `$prefix/include' and `$exec_prefix/include' are available to the - compiler. - -`--disable-shared', `--disable-static' - By default both shared and static libraries are built (where - possible), but one or other can be disabled. Shared libraries - result in smaller executables and permit code sharing between - separate running processes, but on some CPUs are slightly slower, - having a small cost on each function call. - -Native Compilation, `--build=CPU-VENDOR-OS' - For normal native compilation, the system can be specified with - `--build'. By default `./configure' uses the output from running - `./config.guess'. On some systems `./config.guess' can determine - the exact CPU type, on others it will be necessary to give it - explicitly. For example, - - ./configure --build=ultrasparc-sun-solaris2.7 - - In all cases the `OS' part is important, since it controls how - libtool generates shared libraries. Running `./config.guess' is - the simplest way to see what it should be, if you don't know - already. - -Cross Compilation, `--host=CPU-VENDOR-OS' - When cross-compiling, the system used for compiling is given by - `--build' and the system where the library will run is given by - `--host'. For example when using a FreeBSD Athlon system to build - GNU/Linux m68k binaries, - - ./configure --build=athlon-pc-freebsd3.5 --host=m68k-mac-linux-gnu - - Compiler tools are sought first with the host system type as a - prefix. For example `m68k-mac-linux-gnu-ranlib' is tried, then - plain `ranlib'. This makes it possible for a set of - cross-compiling tools to co-exist with native tools. The prefix - is the argument to `--host', and this can be an alias, such as - `m68k-linux'. But note that tools don't have to be setup this - way, it's enough to just have a `PATH' with a suitable - cross-compiling `cc' etc. - - Compiling for a different CPU in the same family as the build - system is a form of cross-compilation, though very possibly this - would merely be special options on a native compiler. In any case - `./configure' avoids depending on being able to run code on the - build system, which is important when creating binaries for a - newer CPU since they very possibly won't run on the build system. - - In all cases the compiler must be able to produce an executable - (of whatever format) from a standard C `main'. Although only - object files will go to make up `libgmp', `./configure' uses - linking tests for various purposes, such as determining what - functions are available on the host system. - - Currently a warning is given unless an explicit `--build' is used - when cross-compiling, because it may not be possible to correctly - guess the build system type if the `PATH' has only a - cross-compiling `cc'. - - Note that the `--target' option is not appropriate for GMP. It's - for use when building compiler tools, with `--host' being where - they will run, and `--target' what they'll produce code for. - Ordinary programs or libraries like GMP are only interested in the - `--host' part, being where they'll run. (Some past versions of - GMP used `--target' incorrectly.) - -CPU types - In general, if you want a library that runs as fast as possible, - you should configure GMP for the exact CPU type your system uses. - However, this may mean the binaries won't run on older members of - the family, and might run slower on other members, older or newer. - The best idea is always to build GMP for the exact machine type - you intend to run it on. - - The following CPUs have specific support. See `configure.in' for - details of what code and compiler options they select. - - * Alpha: alpha, alphaev5, alphaev56, alphapca56, alphapca57, - alphaev6, alphaev67, alphaev68 alphaev7 - - * Cray: c90, j90, t90, sv1 - - * HPPA: hppa1.0, hppa1.1, hppa2.0, hppa2.0n, hppa2.0w, hppa64 - - * IA-64: ia64, itanium, itanium2 - - * MIPS: mips, mips3, mips64 - - * Motorola: m68k, m68000, m68010, m68020, m68030, m68040, - m68060, m68302, m68360, m88k, m88110 - - * POWER: power, power1, power2, power2sc - - * PowerPC: powerpc, powerpc64, powerpc401, powerpc403, - powerpc405, powerpc505, powerpc601, powerpc602, powerpc603, - powerpc603e, powerpc604, powerpc604e, powerpc620, powerpc630, - powerpc740, powerpc7400, powerpc7450, powerpc750, powerpc801, - powerpc821, powerpc823, powerpc860, powerpc970 - - * SPARC: sparc, sparcv8, microsparc, supersparc, sparcv9, - ultrasparc, ultrasparc2, ultrasparc2i, ultrasparc3, sparc64 - - * x86 family: i386, i486, i586, pentium, pentiummmx, pentiumpro, - pentium2, pentium3, pentium4, k6, k62, k63, athlon, amd64, - viac3, viac32 - - * Other: a29k, arm, clipper, i960, ns32k, pyramid, sh, sh2, vax, - z8k - - CPUs not listed will use generic C code. - -Generic C Build - If some of the assembly code causes problems, or if otherwise - desired, the generic C code can be selected with CPU `none'. For - example, - - ./configure --host=none-unknown-freebsd3.5 - - Note that this will run quite slowly, but it should be portable - and should at least make it possible to get something running if - all else fails. - -Fat binary, `--enable-fat' - Using `--enable-fat' selects a "fat binary" build on x86, where - optimized low level subroutines are chosen at runtime according to - the CPU detected. This means more code, but gives good - performance on all x86 chips. (This option might become available - for more architectures in the future.) - -`ABI' - On some systems GMP supports multiple ABIs (application binary - interfaces), meaning data type sizes and calling conventions. By - default GMP chooses the best ABI available, but a particular ABI - can be selected. For example - - ./configure --host=mips64-sgi-irix6 ABI=n32 - - See *Note ABI and ISA::, for the available choices on relevant - CPUs, and what applications need to do. - -`CC', `CFLAGS' - By default the C compiler used is chosen from among some likely - candidates, with `gcc' normally preferred if it's present. The - usual `CC=whatever' can be passed to `./configure' to choose - something different. - - For various systems, default compiler flags are set based on the - CPU and compiler. The usual `CFLAGS="-whatever"' can be passed to - `./configure' to use something different or to set good flags for - systems GMP doesn't otherwise know. - - The `CC' and `CFLAGS' used are printed during `./configure', and - can be found in each generated `Makefile'. This is the easiest way - to check the defaults when considering changing or adding - something. - - Note that when `CC' and `CFLAGS' are specified on a system - supporting multiple ABIs it's important to give an explicit - `ABI=whatever', since GMP can't determine the ABI just from the - flags and won't be able to select the correct assembly code. - - If just `CC' is selected then normal default `CFLAGS' for that - compiler will be used (if GMP recognises it). For example - `CC=gcc' can be used to force the use of GCC, with default flags - (and default ABI). - -`CPPFLAGS' - Any flags like `-D' defines or `-I' includes required by the - preprocessor should be set in `CPPFLAGS' rather than `CFLAGS'. - Compiling is done with both `CPPFLAGS' and `CFLAGS', but - preprocessing uses just `CPPFLAGS'. This distinction is because - most preprocessors won't accept all the flags the compiler does. - Preprocessing is done separately in some configure tests, and in - the `ansi2knr' support for K&R compilers. - -`CC_FOR_BUILD' - Some build-time programs are compiled and run to generate - host-specific data tables. `CC_FOR_BUILD' is the compiler used - for this. It doesn't need to be in any particular ABI or mode, it - merely needs to generate executables that can run. The default is - to try the selected `CC' and some likely candidates such as `cc' - and `gcc', looking for something that works. - - No flags are used with `CC_FOR_BUILD' because a simple invocation - like `cc foo.c' should be enough. If some particular options are - required they can be included as for instance `CC_FOR_BUILD="cc - -whatever"'. - -C++ Support, `--enable-cxx' - C++ support in GMP can be enabled with `--enable-cxx', in which - case a C++ compiler will be required. As a convenience - `--enable-cxx=detect' can be used to enable C++ support only if a - compiler can be found. The C++ support consists of a library - `libgmpxx.la' and header file `gmpxx.h' (*note Headers and - Libraries::). - - A separate `libgmpxx.la' has been adopted rather than having C++ - objects within `libgmp.la' in order to ensure dynamic linked C - programs aren't bloated by a dependency on the C++ standard - library, and to avoid any chance that the C++ compiler could be - required when linking plain C programs. - - `libgmpxx.la' will use certain internals from `libgmp.la' and can - only be expected to work with `libgmp.la' from the same GMP - version. Future changes to the relevant internals will be - accompanied by renaming, so a mismatch will cause unresolved - symbols rather than perhaps mysterious misbehaviour. - - In general `libgmpxx.la' will be usable only with the C++ compiler - that built it, since name mangling and runtime support are usually - incompatible between different compilers. - -`CXX', `CXXFLAGS' - When C++ support is enabled, the C++ compiler and its flags can be - set with variables `CXX' and `CXXFLAGS' in the usual way. The - default for `CXX' is the first compiler that works from a list of - likely candidates, with `g++' normally preferred when available. - The default for `CXXFLAGS' is to try `CFLAGS', `CFLAGS' without - `-g', then for `g++' either `-g -O2' or `-O2', or for other - compilers `-g' or nothing. Trying `CFLAGS' this way is convenient - when using `gcc' and `g++' together, since the flags for `gcc' will - usually suit `g++'. - - It's important that the C and C++ compilers match, meaning their - startup and runtime support routines are compatible and that they - generate code in the same ABI (if there's a choice of ABIs on the - system). `./configure' isn't currently able to check these things - very well itself, so for that reason `--disable-cxx' is the - default, to avoid a build failure due to a compiler mismatch. - Perhaps this will change in the future. - - Incidentally, it's normally not good enough to set `CXX' to the - same as `CC'. Although `gcc' for instance recognises `foo.cc' as - C++ code, only `g++' will invoke the linker the right way when - building an executable or shared library from C++ object files. - -Temporary Memory, `--enable-alloca=' - GMP allocates temporary workspace using one of the following three - methods, which can be selected with for instance - `--enable-alloca=malloc-reentrant'. - - * `alloca' - C library or compiler builtin. - - * `malloc-reentrant' - the heap, in a re-entrant fashion. - - * `malloc-notreentrant' - the heap, with global variables. - - For convenience, the following choices are also available. - `--disable-alloca' is the same as `no'. - - * `yes' - a synonym for `alloca'. - - * `no' - a synonym for `malloc-reentrant'. - - * `reentrant' - `alloca' if available, otherwise - `malloc-reentrant'. This is the default. - - * `notreentrant' - `alloca' if available, otherwise - `malloc-notreentrant'. - - `alloca' is reentrant and fast, and is recommended. It actually - allocates just small blocks on the stack; larger ones use - malloc-reentrant. - - `malloc-reentrant' is, as the name suggests, reentrant and thread - safe, but `malloc-notreentrant' is faster and should be used if - reentrancy is not required. - - The two malloc methods in fact use the memory allocation functions - selected by `mp_set_memory_functions', these being `malloc' and - friends by default. *Note Custom Allocation::. - - An additional choice `--enable-alloca=debug' is available, to help - when debugging memory related problems (*note Debugging::). - -FFT Multiplication, `--disable-fft' - By default multiplications are done using Karatsuba, 3-way Toom, - and Fermat FFT. The FFT is only used on large to very large - operands and can be disabled to save code size if desired. - -Berkeley MP, `--enable-mpbsd' - The Berkeley MP compatibility library (`libmp') and header file - (`mp.h') are built and installed only if `--enable-mpbsd' is used. - *Note BSD Compatible Functions::. - -Assertion Checking, `--enable-assert' - This option enables some consistency checking within the library. - This can be of use while debugging, *note Debugging::. - -Execution Profiling, `--enable-profiling=prof/gprof/instrument' - Enable profiling support, in one of various styles, *note - Profiling::. - -`MPN_PATH' - Various assembly versions of each mpn subroutines are provided. - For a given CPU, a search is made though a path to choose a - version of each. For example `sparcv8' has - - MPN_PATH="sparc32/v8 sparc32 generic" - - which means look first for v8 code, then plain sparc32 (which is - v7), and finally fall back on generic C. Knowledgeable users with - special requirements can specify a different path. Normally this - is completely unnecessary. - -Documentation - The source for the document you're now reading is `doc/gmp.texi', - in Texinfo format, see *Note Texinfo: (texinfo)Top. - - Info format `doc/gmp.info' is included in the distribution. The - usual automake targets are available to make PostScript, DVI, PDF - and HTML (these will require various TeX and Texinfo tools). - - DocBook and XML can be generated by the Texinfo `makeinfo' program - too, see *Note Options for `makeinfo': (texinfo)makeinfo options. - - Some supplementary notes can also be found in the `doc' - subdirectory. - - - -File: gmp.info, Node: ABI and ISA, Next: Notes for Package Builds, Prev: Build Options, Up: Installing GMP - -2.2 ABI and ISA -=============== - -ABI (Application Binary Interface) refers to the calling conventions -between functions, meaning what registers are used and what sizes the -various C data types are. ISA (Instruction Set Architecture) refers to -the instructions and registers a CPU has available. - - Some 64-bit ISA CPUs have both a 64-bit ABI and a 32-bit ABI -defined, the latter for compatibility with older CPUs in the family. -GMP supports some CPUs like this in both ABIs. In fact within GMP -`ABI' means a combination of chip ABI, plus how GMP chooses to use it. -For example in some 32-bit ABIs, GMP may support a limb as either a -32-bit `long' or a 64-bit `long long'. - - By default GMP chooses the best ABI available for a given system, -and this generally gives significantly greater speed. But an ABI can -be chosen explicitly to make GMP compatible with other libraries, or -particular application requirements. For example, - - ./configure ABI=32 - - In all cases it's vital that all object code used in a given program -is compiled for the same ABI. - - Usually a limb is implemented as a `long'. When a `long long' limb -is used this is encoded in the generated `gmp.h'. This is convenient -for applications, but it does mean that `gmp.h' will vary, and can't be -just copied around. `gmp.h' remains compiler independent though, since -all compilers for a particular ABI will be expected to use the same -limb type. - - Currently no attempt is made to follow whatever conventions a system -has for installing library or header files built for a particular ABI. -This will probably only matter when installing multiple builds of GMP, -and it might be as simple as configuring with a special `libdir', or it -might require more than that. Note that builds for different ABIs need -to done separately, with a fresh `./configure' and `make' each. - - -AMD64 (`x86_64') - On AMD64 systems supporting both 32-bit and 64-bit modes for - applications, the following ABI choices are available. - - `ABI=64' - The 64-bit ABI uses 64-bit limbs and pointers and makes full - use of the chip architecture. This is the default. - Applications will usually not need special compiler flags, - but for reference the option is - - gcc -m64 - - `ABI=32' - The 32-bit ABI is the usual i386 conventions. This will be - slower, and is not recommended except for inter-operating - with other code not yet 64-bit capable. Applications must be - compiled with - - gcc -m32 - - (In GCC 2.95 and earlier there's no `-m32' option, it's the - only mode.) - - -HPPA 2.0 (`hppa2.0*', `hppa64') - - `ABI=2.0w' - The 2.0w ABI uses 64-bit limbs and pointers and is available - on HP-UX 11 or up. Applications must be compiled with - - gcc [built for 2.0w] - cc +DD64 - - `ABI=2.0n' - The 2.0n ABI means the 32-bit HPPA 1.0 ABI and all its normal - calling conventions, but with 64-bit instructions permitted - within functions. GMP uses a 64-bit `long long' for a limb. - This ABI is available on hppa64 GNU/Linux and on HP-UX 10 or - higher. Applications must be compiled with - - gcc [built for 2.0n] - cc +DA2.0 +e - - Note that current versions of GCC (eg. 3.2) don't generate - 64-bit instructions for `long long' operations and so may be - slower than for 2.0w. (The GMP assembly code is the same - though.) - - `ABI=1.0' - HPPA 2.0 CPUs can run all HPPA 1.0 and 1.1 code in the 32-bit - HPPA 1.0 ABI. No special compiler options are needed for - applications. - - All three ABIs are available for CPU types `hppa2.0w', `hppa2.0' - and `hppa64', but for CPU type `hppa2.0n' only 2.0n or 1.0 are - considered. - - Note that GCC on HP-UX has no options to choose between 2.0n and - 2.0w modes, unlike HP `cc'. Instead it must be built for one or - the other ABI. GMP will detect how it was built, and skip to the - corresponding `ABI'. - - -IA-64 under HP-UX (`ia64*-*-hpux*', `itanium*-*-hpux*') - HP-UX supports two ABIs for IA-64. GMP performance is the same in - both. - - `ABI=32' - In the 32-bit ABI, pointers, `int's and `long's are 32 bits - and GMP uses a 64 bit `long long' for a limb. Applications - can be compiled without any special flags since this ABI is - the default in both HP C and GCC, but for reference the flags - are - - gcc -milp32 - cc +DD32 - - `ABI=64' - In the 64-bit ABI, `long's and pointers are 64 bits and GMP - uses a `long' for a limb. Applications must be compiled with - - gcc -mlp64 - cc +DD64 - - On other IA-64 systems, GNU/Linux for instance, `ABI=64' is the - only choice. - - -MIPS under IRIX 6 (`mips*-*-irix[6789]') - IRIX 6 always has a 64-bit MIPS 3 or better CPU, and supports ABIs - o32, n32, and 64. n32 or 64 are recommended, and GMP performance - will be the same in each. The default is n32. - - `ABI=o32' - The o32 ABI is 32-bit pointers and integers, and no 64-bit - operations. GMP will be slower than in n32 or 64, this - option only exists to support old compilers, eg. GCC 2.7.2. - Applications can be compiled with no special flags on an old - compiler, or on a newer compiler with - - gcc -mabi=32 - cc -32 - - `ABI=n32' - The n32 ABI is 32-bit pointers and integers, but with a - 64-bit limb using a `long long'. Applications must be - compiled with - - gcc -mabi=n32 - cc -n32 - - `ABI=64' - The 64-bit ABI is 64-bit pointers and integers. Applications - must be compiled with - - gcc -mabi=64 - cc -64 - - Note that MIPS GNU/Linux, as of kernel version 2.2, doesn't have - the necessary support for n32 or 64 and so only gets a 32-bit limb - and the MIPS 2 code. - - -PowerPC 64 (`powerpc64', `powerpc620', `powerpc630', `powerpc970', `power4', `power5') - - `ABI=aix64' - The AIX 64 ABI uses 64-bit limbs and pointers and is the - default on PowerPC 64 `*-*-aix*' systems. Applications must - be compiled with - - gcc -maix64 - xlc -q64 - - `ABI=mode64' - The `mode64' ABI uses 64-bit limbs and pointers, and is the - default on 64-bit GNU/Linux, BSD, and Mac OS X/Darwin - systems. Applications must be compiled with - - gcc -m64 - - `ABI=mode32' - The `mode32' ABI uses a 64-bit `long long' limb but with the - chip still in 32-bit mode and using 32-bit calling - conventions. This is the default on for systems where the - true 64-bit ABIs are unavailable. No special compiler - options are needed for applications. - - `ABI=32' - This is the basic 32-bit PowerPC ABI, with a 32-bit limb. No - special compiler options are needed for applications. - - GMP speed is greatest in `aix64' and `mode32'. In `ABI=32' only - the 32-bit ISA is used and this doesn't make full use of a 64-bit - chip. On a suitable system we could perhaps use more of the ISA, - but there are no plans to do so. - - -Sparc V9 (`sparc64', `sparcv9', `ultrasparc*') - - `ABI=64' - The 64-bit V9 ABI is available on the various BSD sparc64 - ports, recent versions of Sparc64 GNU/Linux, and Solaris 2.7 - and up (when the kernel is in 64-bit mode). GCC 3.2 or - higher, or Sun `cc' is required. On GNU/Linux, depending on - the default `gcc' mode, applications must be compiled with - - gcc -m64 - - On Solaris applications must be compiled with - - gcc -m64 -mptr64 -Wa,-xarch=v9 -mcpu=v9 - cc -xarch=v9 - - On the BSD sparc64 systems no special options are required, - since 64-bits is the only ABI available. - - `ABI=32' - For the basic 32-bit ABI, GMP still uses as much of the V9 - ISA as it can. In the Sun documentation this combination is - known as "v8plus". On GNU/Linux, depending on the default - `gcc' mode, applications may need to be compiled with - - gcc -m32 - - On Solaris, no special compiler options are required for - applications, though using something like the following is - recommended. (`gcc' 2.8 and earlier only support `-mv8' - though.) - - gcc -mv8plus - cc -xarch=v8plus - - GMP speed is greatest in `ABI=64', so it's the default where - available. The speed is partly because there are extra registers - available and partly because 64-bits is considered the more - important case and has therefore had better code written for it. - - Don't be confused by the names of the `-m' and `-x' compiler - options, they're called `arch' but effectively control both ABI - and ISA. - - On Solaris 2.6 and earlier, only `ABI=32' is available since the - kernel doesn't save all registers. - - On Solaris 2.7 with the kernel in 32-bit mode, a normal native - build will reject `ABI=64' because the resulting executables won't - run. `ABI=64' can still be built if desired by making it look - like a cross-compile, for example - - ./configure --build=none --host=sparcv9-sun-solaris2.7 ABI=64 - - -File: gmp.info, Node: Notes for Package Builds, Next: Notes for Particular Systems, Prev: ABI and ISA, Up: Installing GMP - -2.3 Notes for Package Builds -============================ - -GMP should present no great difficulties for packaging in a binary -distribution. - - Libtool is used to build the library and `-version-info' is set -appropriately, having started from `3:0:0' in GMP 3.0 (*note Library -interface versions: (libtool)Versioning.). - - The GMP 4 series will be upwardly binary compatible in each release -and will be upwardly binary compatible with all of the GMP 3 series. -Additional function interfaces may be added in each release, so on -systems where libtool versioning is not fully checked by the loader an -auxiliary mechanism may be needed to express that a dynamic linked -application depends on a new enough GMP. - - An auxiliary mechanism may also be needed to express that -`libgmpxx.la' (from `--enable-cxx', *note Build Options::) requires -`libgmp.la' from the same GMP version, since this is not done by the -libtool versioning, nor otherwise. A mismatch will result in -unresolved symbols from the linker, or perhaps the loader. - - When building a package for a CPU family, care should be taken to use -`--host' (or `--build') to choose the least common denominator among -the CPUs which might use the package. For example this might mean plain -`sparc' (meaning V7) for SPARCs. - - For x86s, `--enable-fat' sets things up for a fat binary build, -making a runtime selection of optimized low level routines. This is a -good choice for packaging to run on a range of x86 chips. - - Users who care about speed will want GMP built for their exact CPU -type, to make best use of the available optimizations. Providing a way -to suitably rebuild a package may be useful. This could be as simple -as making it possible for a user to omit `--build' (and `--host') so -`./config.guess' will detect the CPU. But a way to manually specify a -`--build' will be wanted for systems where `./config.guess' is inexact. - - On systems with multiple ABIs, a packaged build will need to decide -which among the choices is to be provided, see *Note ABI and ISA::. A -given run of `./configure' etc will only build one ABI. If a second -ABI is also required then a second run of `./configure' etc must be -made, starting from a clean directory tree (`make distclean'). - - As noted under "ABI and ISA", currently no attempt is made to follow -system conventions for install locations that vary with ABI, such as -`/usr/lib/sparcv9' for `ABI=64' as opposed to `/usr/lib' for `ABI=32'. -A package build can override `libdir' and other standard variables as -necessary. - - Note that `gmp.h' is a generated file, and will be architecture and -ABI dependent. When attempting to install two ABIs simultaneously it -will be important that an application compile gets the correct `gmp.h' -for its desired ABI. If compiler include paths don't vary with ABI -options then it might be necessary to create a `/usr/include/gmp.h' -which tests preprocessor symbols and chooses the correct actual `gmp.h'. - - -File: gmp.info, Node: Notes for Particular Systems, Next: Known Build Problems, Prev: Notes for Package Builds, Up: Installing GMP - -2.4 Notes for Particular Systems -================================ - -AIX 3 and 4 - On systems `*-*-aix[34]*' shared libraries are disabled by - default, since some versions of the native `ar' fail on the - convenience libraries used. A shared build can be attempted with - - ./configure --enable-shared --disable-static - - Note that the `--disable-static' is necessary because in a shared - build libtool makes `libgmp.a' a symlink to `libgmp.so', - apparently for the benefit of old versions of `ld' which only - recognise `.a', but unfortunately this is done even if a fully - functional `ld' is available. - -ARM - On systems `arm*-*-*', versions of GCC up to and including 2.95.3 - have a bug in unsigned division, giving wrong results for some - operands. GMP `./configure' will demand GCC 2.95.4 or later. - -Compaq C++ - Compaq C++ on OSF 5.1 has two flavours of `iostream', a standard - one and an old pre-standard one (see `man iostream_intro'). GMP - can only use the standard one, which unfortunately is not the - default but must be selected by defining `__USE_STD_IOSTREAM'. - Configure with for instance - - ./configure --enable-cxx CPPFLAGS=-D__USE_STD_IOSTREAM - -Floating Point Mode - On some systems, the hardware floating point has a control mode - which can set all operations to be done in a particular precision, - for instance single, double or extended on x86 systems (x87 - floating point). The GMP functions involving a `double' cannot be - expected to operate to their full precision when the hardware is - in single precision mode. Of course this affects all code, - including application code, not just GMP. - -MS-DOS and MS Windows - On an MS-DOS system DJGPP can be used to build GMP, and on an MS - Windows system Cygwin, DJGPP and MINGW can be used. All three are - excellent ports of GCC and the various GNU tools. - - `http://www.cygwin.com/' - `http://www.delorie.com/djgpp/' - `http://www.mingw.org/' - - Microsoft also publishes an Interix "Services for Unix" which can - be used to build GMP on Windows (with a normal `./configure'), but - it's not free software. - -MS Windows DLLs - On systems `*-*-cygwin*', `*-*-mingw*' and `*-*-pw32*' by default - GMP builds only a static library, but a DLL can be built instead - using - - ./configure --disable-static --enable-shared - - Static and DLL libraries can't both be built, since certain export - directives in `gmp.h' must be different. - - A MINGW DLL build of GMP can be used with Microsoft C. Libtool - doesn't install a `.lib' format import library, but it can be - created with MS `lib' as follows, and copied to the install - directory. Similarly for `libmp' and `libgmpxx'. - - cd .libs - lib /def:libgmp-3.dll.def /out:libgmp-3.lib - - MINGW uses the C runtime library `msvcrt.dll' for I/O, so - applications wanting to use the GMP I/O routines must be compiled - with `cl /MD' to do the same. If one of the other C runtime - library choices provided by MS C is desired then the suggestion is - to use the GMP string functions and confine I/O to the application. - -Motorola 68k CPU Types - `m68k' is taken to mean 68000. `m68020' or higher will give a - performance boost on applicable CPUs. `m68360' can be used for - CPU32 series chips. `m68302' can be used for "Dragonball" series - chips, though this is merely a synonym for `m68000'. - -OpenBSD 2.6 - `m4' in this release of OpenBSD has a bug in `eval' that makes it - unsuitable for `.asm' file processing. `./configure' will detect - the problem and either abort or choose another m4 in the `PATH'. - The bug is fixed in OpenBSD 2.7, so either upgrade or use GNU m4. - -Power CPU Types - In GMP, CPU types `power*' and `powerpc*' will each use - instructions not available on the other, so it's important to - choose the right one for the CPU that will be used. Currently GMP - has no assembly code support for using just the common instruction - subset. To get executables that run on both, the current - suggestion is to use the generic C code (CPU `none'), possibly - with appropriate compiler options (like `-mcpu=common' for `gcc'). - CPU `rs6000' (which is not a CPU but a family of workstations) is - accepted by `config.sub', but is currently equivalent to `none'. - -Sparc CPU Types - `sparcv8' or `supersparc' on relevant systems will give a - significant performance increase over the V7 code selected by plain - `sparc'. - -Sparc App Regs - The GMP assembly code for both 32-bit and 64-bit Sparc clobbers the - "application registers" `g2', `g3' and `g4', the same way that the - GCC default `-mapp-regs' does (*note SPARC Options: (gcc)SPARC - Options.). - - This makes that code unsuitable for use with the special V9 - `-mcmodel=embmedany' (which uses `g4' as a data segment pointer), - and for applications wanting to use those registers for special - purposes. In these cases the only suggestion currently is to - build GMP with CPU `none' to avoid the assembly code. - -SunOS 4 - `/usr/bin/m4' lacks various features needed to process `.asm' - files, and instead `./configure' will automatically use - `/usr/5bin/m4', which we believe is always available (if not then - use GNU m4). - -x86 CPU Types - `i586', `pentium' or `pentiummmx' code is good for its intended P5 - Pentium chips, but quite slow when run on Intel P6 class chips - (PPro, P-II, P-III). `i386' is a better choice when making - binaries that must run on both. - -x86 MMX and SSE2 Code - If the CPU selected has MMX code but the assembler doesn't support - it, a warning is given and non-MMX code is used instead. This - will be an inferior build, since the MMX code that's present is - there because it's faster than the corresponding plain integer - code. The same applies to SSE2. - - Old versions of `gas' don't support MMX instructions, in particular - version 1.92.3 that comes with FreeBSD 2.2.8 or the more recent - OpenBSD 3.1 doesn't. - - Solaris 2.6 and 2.7 `as' generate incorrect object code for - register to register `movq' instructions, and so can't be used for - MMX code. Install a recent `gas' if MMX code is wanted on these - systems. - - -File: gmp.info, Node: Known Build Problems, Next: Performance optimization, Prev: Notes for Particular Systems, Up: Installing GMP - -2.5 Known Build Problems -======================== - -You might find more up-to-date information at `http://gmplib.org/'. - -Compiler link options - The version of libtool currently in use rather aggressively strips - compiler options when linking a shared library. This will - hopefully be relaxed in the future, but for now if this is a - problem the suggestion is to create a little script to hide them, - and for instance configure with - - ./configure CC=gcc-with-my-options - -DJGPP (`*-*-msdosdjgpp*') - The DJGPP port of `bash' 2.03 is unable to run the `configure' - script, it exits silently, having died writing a preamble to - `config.log'. Use `bash' 2.04 or higher. - - `make all' was found to run out of memory during the final - `libgmp.la' link on one system tested, despite having 64Mb - available. Running `make libgmp.la' directly helped, perhaps - recursing into the various subdirectories uses up memory. - -GNU binutils `strip' prior to 2.12 - `strip' from GNU binutils 2.11 and earlier should not be used on - the static libraries `libgmp.a' and `libmp.a' since it will - discard all but the last of multiple archive members with the same - name, like the three versions of `init.o' in `libgmp.a'. Binutils - 2.12 or higher can be used successfully. - - The shared libraries `libgmp.so' and `libmp.so' are not affected by - this and any version of `strip' can be used on them. - -`make' syntax error - On certain versions of SCO OpenServer 5 and IRIX 6.5 the native - `make' is unable to handle the long dependencies list for - `libgmp.la'. The symptom is a "syntax error" on the following - line of the top-level `Makefile'. - - libgmp.la: $(libgmp_la_OBJECTS) $(libgmp_la_DEPENDENCIES) - - Either use GNU Make, or as a workaround remove - `$(libgmp_la_DEPENDENCIES)' from that line (which will make the - initial build work, but if any recompiling is done `libgmp.la' - might not be rebuilt). - -MacOS X (`*-*-darwin*') - Libtool currently only knows how to create shared libraries on - MacOS X using the native `cc' (which is a modified GCC), not a - plain GCC. A static-only build should work though - (`--disable-shared'). - -NeXT prior to 3.3 - The system compiler on old versions of NeXT was a massacred and - old GCC, even if it called itself `cc'. This compiler cannot be - used to build GMP, you need to get a real GCC, and install that. - (NeXT may have fixed this in release 3.3 of their system.) - -POWER and PowerPC - Bugs in GCC 2.7.2 (and 2.6.3) mean it can't be used to compile GMP - on POWER or PowerPC. If you want to use GCC for these machines, - get GCC 2.7.2.1 (or later). - -Sequent Symmetry - Use the GNU assembler instead of the system assembler, since the - latter has serious bugs. - -Solaris 2.6 - The system `sed' prints an error "Output line too long" when - libtool builds `libgmp.la'. This doesn't seem to cause any - obvious ill effects, but GNU `sed' is recommended, to avoid any - doubt. - -Sparc Solaris 2.7 with gcc 2.95.2 in `ABI=32' - A shared library build of GMP seems to fail in this combination, - it builds but then fails the tests, apparently due to some - incorrect data relocations within `gmp_randinit_lc_2exp_size'. - The exact cause is unknown, `--disable-shared' is recommended. - - -File: gmp.info, Node: Performance optimization, Prev: Known Build Problems, Up: Installing GMP - -2.6 Performance optimization -============================ - -For optimal performance, build GMP for the exact CPU type of the target -computer, see *Note Build Options::. - - Unlike what is the case for most other programs, the compiler -typically doesn't matter much, since GMP uses assembly language for the -most critical operation. - - In particular for long-running GMP applications, and applications -demanding extremely large numbers, building and running the `tuneup' -program in the `tune' subdirectory, can be important. For example, - - cd tune - make tuneup - ./tuneup - - will generate better contents for the `gmp-mparam.h' parameter file. - - To use the results, put the output in the file file indicated in the -`Parameters for ...' header. Then recompile from scratch. - - The `tuneup' program takes one useful parameter, `-f NNN', which -instructs the program how long to check FFT multiply parameters. If -you're going to use GMP for extremely large numbers, you may want to -run `tuneup' with a large NNN value. - - -File: gmp.info, Node: GMP Basics, Next: Reporting Bugs, Prev: Installing GMP, Up: Top - -3 GMP Basics -************ - -*Using functions, macros, data types, etc. not documented in this -manual is strongly discouraged. If you do so your application is -guaranteed to be incompatible with future versions of GMP.* - -* Menu: - -* Headers and Libraries:: -* Nomenclature and Types:: -* Function Classes:: -* Variable Conventions:: -* Parameter Conventions:: -* Memory Management:: -* Reentrancy:: -* Useful Macros and Constants:: -* Compatibility with older versions:: -* Demonstration Programs:: -* Efficiency:: -* Debugging:: -* Profiling:: -* Autoconf:: -* Emacs:: - - -File: gmp.info, Node: Headers and Libraries, Next: Nomenclature and Types, Prev: GMP Basics, Up: GMP Basics - -3.1 Headers and Libraries -========================= - -All declarations needed to use GMP are collected in the include file -`gmp.h'. It is designed to work with both C and C++ compilers. - - #include - - Note however that prototypes for GMP functions with `FILE *' -parameters are only provided if `' is included too. - - #include - #include - - Likewise `' (or `') is required for prototypes -with `va_list' parameters, such as `gmp_vprintf'. And `' -for prototypes with `struct obstack' parameters, such as -`gmp_obstack_printf', when available. - - All programs using GMP must link against the `libgmp' library. On a -typical Unix-like system this can be done with `-lgmp', for example - - gcc myprogram.c -lgmp - - GMP C++ functions are in a separate `libgmpxx' library. This is -built and installed if C++ support has been enabled (*note Build -Options::). For example, - - g++ mycxxprog.cc -lgmpxx -lgmp - - GMP is built using Libtool and an application can use that to link -if desired, *note GNU Libtool: (libtool)Top. - - If GMP has been installed to a non-standard location then it may be -necessary to use `-I' and `-L' compiler options to point to the right -directories, and some sort of run-time path for a shared library. - - -File: gmp.info, Node: Nomenclature and Types, Next: Function Classes, Prev: Headers and Libraries, Up: GMP Basics - -3.2 Nomenclature and Types -========================== - -In this manual, "integer" usually means a multiple precision integer, as -defined by the GMP library. The C data type for such integers is -`mpz_t'. Here are some examples of how to declare such integers: - - mpz_t sum; - - struct foo { mpz_t x, y; }; - - mpz_t vec[20]; - - "Rational number" means a multiple precision fraction. The C data -type for these fractions is `mpq_t'. For example: - - mpq_t quotient; - - "Floating point number" or "Float" for short, is an arbitrary -precision mantissa with a limited precision exponent. The C data type -for such objects is `mpf_t'. For example: - - mpf_t fp; - - The floating point functions accept and return exponents in the C -type `mp_exp_t'. Currently this is usually a `long', but on some -systems it's an `int' for efficiency. - - A "limb" means the part of a multi-precision number that fits in a -single machine word. (We chose this word because a limb of the human -body is analogous to a digit, only larger, and containing several -digits.) Normally a limb is 32 or 64 bits. The C data type for a limb -is `mp_limb_t'. - - Counts of limbs of a multi-precision number represented in the C type -`mp_size_t'. Currently this is normally a `long', but on some systems -it's an `int' for efficiency, and on some systems it will be `long -long' in the future. - - Counts of bits of a multi-precision number are represented in the C -type `mp_bitcnt_t'. Currently this is always an `unsigned long', but on -some systems it will be an `unsigned long long' in the future . - - "Random state" means an algorithm selection and current state data. -The C data type for such objects is `gmp_randstate_t'. For example: - - gmp_randstate_t rstate; - - Also, in general `mp_bitcnt_t' is used for bit counts and ranges, and -`size_t' is used for byte or character counts. - - -File: gmp.info, Node: Function Classes, Next: Variable Conventions, Prev: Nomenclature and Types, Up: GMP Basics - -3.3 Function Classes -==================== - -There are six classes of functions in the GMP library: - - 1. Functions for signed integer arithmetic, with names beginning with - `mpz_'. The associated type is `mpz_t'. There are about 150 - functions in this class. (*note Integer Functions::) - - 2. Functions for rational number arithmetic, with names beginning with - `mpq_'. The associated type is `mpq_t'. There are about 40 - functions in this class, but the integer functions can be used for - arithmetic on the numerator and denominator separately. (*note - Rational Number Functions::) - - 3. Functions for floating-point arithmetic, with names beginning with - `mpf_'. The associated type is `mpf_t'. There are about 60 - functions is this class. (*note Floating-point Functions::) - - 4. Functions compatible with Berkeley MP, such as `itom', `madd', and - `mult'. The associated type is `MINT'. (*note BSD Compatible - Functions::) - - 5. Fast low-level functions that operate on natural numbers. These - are used by the functions in the preceding groups, and you can - also call them directly from very time-critical user programs. - These functions' names begin with `mpn_'. The associated type is - array of `mp_limb_t'. There are about 30 (hard-to-use) functions - in this class. (*note Low-level Functions::) - - 6. Miscellaneous functions. Functions for setting up custom - allocation and functions for generating random numbers. (*note - Custom Allocation::, and *note Random Number Functions::) - - -File: gmp.info, Node: Variable Conventions, Next: Parameter Conventions, Prev: Function Classes, Up: GMP Basics - -3.4 Variable Conventions -======================== - -GMP functions generally have output arguments before input arguments. -This notation is by analogy with the assignment operator. The BSD MP -compatibility functions are exceptions, having the output arguments -last. - - GMP lets you use the same variable for both input and output in one -call. For example, the main function for integer multiplication, -`mpz_mul', can be used to square `x' and put the result back in `x' with - - mpz_mul (x, x, x); - - Before you can assign to a GMP variable, you need to initialize it -by calling one of the special initialization functions. When you're -done with a variable, you need to clear it out, using one of the -functions for that purpose. Which function to use depends on the type -of variable. See the chapters on integer functions, rational number -functions, and floating-point functions for details. - - A variable should only be initialized once, or at least cleared -between each initialization. After a variable has been initialized, it -may be assigned to any number of times. - - For efficiency reasons, avoid excessive initializing and clearing. -In general, initialize near the start of a function and clear near the -end. For example, - - void - foo (void) - { - mpz_t n; - int i; - mpz_init (n); - for (i = 1; i < 100; i++) - { - mpz_mul (n, ...); - mpz_fdiv_q (n, ...); - ... - } - mpz_clear (n); - } - - -File: gmp.info, Node: Parameter Conventions, Next: Memory Management, Prev: Variable Conventions, Up: GMP Basics - -3.5 Parameter Conventions -========================= - -When a GMP variable is used as a function parameter, it's effectively a -call-by-reference, meaning if the function stores a value there it will -change the original in the caller. Parameters which are input-only can -be designated `const' to provoke a compiler error or warning on -attempting to modify them. - - When a function is going to return a GMP result, it should designate -a parameter that it sets, like the library functions do. More than one -value can be returned by having more than one output parameter, again -like the library functions. A `return' of an `mpz_t' etc doesn't -return the object, only a pointer, and this is almost certainly not -what's wanted. - - Here's an example accepting an `mpz_t' parameter, doing a -calculation, and storing the result to the indicated parameter. - - void - foo (mpz_t result, const mpz_t param, unsigned long n) - { - unsigned long i; - mpz_mul_ui (result, param, n); - for (i = 1; i < n; i++) - mpz_add_ui (result, result, i*7); - } - - int - main (void) - { - mpz_t r, n; - mpz_init (r); - mpz_init_set_str (n, "123456", 0); - foo (r, n, 20L); - gmp_printf ("%Zd\n", r); - return 0; - } - - `foo' works even if the mainline passes the same variable for -`param' and `result', just like the library functions. But sometimes -it's tricky to make that work, and an application might not want to -bother supporting that sort of thing. - - For interest, the GMP types `mpz_t' etc are implemented as -one-element arrays of certain structures. This is why declaring a -variable creates an object with the fields GMP needs, but then using it -as a parameter passes a pointer to the object. Note that the actual -fields in each `mpz_t' etc are for internal use only and should not be -accessed directly by code that expects to be compatible with future GMP -releases. - - -File: gmp.info, Node: Memory Management, Next: Reentrancy, Prev: Parameter Conventions, Up: GMP Basics - -3.6 Memory Management -===================== - -The GMP types like `mpz_t' are small, containing only a couple of sizes, -and pointers to allocated data. Once a variable is initialized, GMP -takes care of all space allocation. Additional space is allocated -whenever a variable doesn't have enough. - - `mpz_t' and `mpq_t' variables never reduce their allocated space. -Normally this is the best policy, since it avoids frequent reallocation. -Applications that need to return memory to the heap at some particular -point can use `mpz_realloc2', or clear variables no longer needed. - - `mpf_t' variables, in the current implementation, use a fixed amount -of space, determined by the chosen precision and allocated at -initialization, so their size doesn't change. - - All memory is allocated using `malloc' and friends by default, but -this can be changed, see *Note Custom Allocation::. Temporary memory -on the stack is also used (via `alloca'), but this can be changed at -build-time if desired, see *Note Build Options::. - - -File: gmp.info, Node: Reentrancy, Next: Useful Macros and Constants, Prev: Memory Management, Up: GMP Basics - -3.7 Reentrancy -============== - -GMP is reentrant and thread-safe, with some exceptions: - - * If configured with `--enable-alloca=malloc-notreentrant' (or with - `--enable-alloca=notreentrant' when `alloca' is not available), - then naturally GMP is not reentrant. - - * `mpf_set_default_prec' and `mpf_init' use a global variable for the - selected precision. `mpf_init2' can be used instead, and in the - C++ interface an explicit precision to the `mpf_class' constructor. - - * `mpz_random' and the other old random number functions use a global - random state and are hence not reentrant. The newer random number - functions that accept a `gmp_randstate_t' parameter can be used - instead. - - * `gmp_randinit' (obsolete) returns an error indication through a - global variable, which is not thread safe. Applications are - advised to use `gmp_randinit_default' or `gmp_randinit_lc_2exp' - instead. - - * `mp_set_memory_functions' uses global variables to store the - selected memory allocation functions. - - * If the memory allocation functions set by a call to - `mp_set_memory_functions' (or `malloc' and friends by default) are - not reentrant, then GMP will not be reentrant either. - - * If the standard I/O functions such as `fwrite' are not reentrant - then the GMP I/O functions using them will not be reentrant either. - - * It's safe for two threads to read from the same GMP variable - simultaneously, but it's not safe for one to read while the - another might be writing, nor for two threads to write - simultaneously. It's not safe for two threads to generate a - random number from the same `gmp_randstate_t' simultaneously, - since this involves an update of that variable. - - -File: gmp.info, Node: Useful Macros and Constants, Next: Compatibility with older versions, Prev: Reentrancy, Up: GMP Basics - -3.8 Useful Macros and Constants -=============================== - - -- Global Constant: const int mp_bits_per_limb - The number of bits per limb. - - -- Macro: __GNU_MP_VERSION - -- Macro: __GNU_MP_VERSION_MINOR - -- Macro: __GNU_MP_VERSION_PATCHLEVEL - The major and minor GMP version, and patch level, respectively, as - integers. For GMP i.j, these numbers will be i, j, and 0, - respectively. For GMP i.j.k, these numbers will be i, j, and k, - respectively. - - -- Global Constant: const char * const gmp_version - The GMP version number, as a null-terminated string, in the form - "i.j.k". This release is "5.0.1". Note that the format "i.j" was - used when k was zero was used before version 4.3.0. - - -- Macro: __GMP_CC - -- Macro: __GMP_CFLAGS - The compiler and compiler flags, respectively, used when compiling - GMP, as strings. - - -File: gmp.info, Node: Compatibility with older versions, Next: Demonstration Programs, Prev: Useful Macros and Constants, Up: GMP Basics - -3.9 Compatibility with older versions -===================================== - -This version of GMP is upwardly binary compatible with all 4.x and 3.x -versions, and upwardly compatible at the source level with all 2.x -versions, with the following exceptions. - - * `mpn_gcd' had its source arguments swapped as of GMP 3.0, for - consistency with other `mpn' functions. - - * `mpf_get_prec' counted precision slightly differently in GMP 3.0 - and 3.0.1, but in 3.1 reverted to the 2.x style. - - There are a number of compatibility issues between GMP 1 and GMP 2 -that of course also apply when porting applications from GMP 1 to GMP -4. Please see the GMP 2 manual for details. - - The Berkeley MP compatibility library (*note BSD Compatible -Functions::) is source and binary compatible with the standard `libmp'. - - -File: gmp.info, Node: Demonstration Programs, Next: Efficiency, Prev: Compatibility with older versions, Up: GMP Basics - -3.10 Demonstration programs -=========================== - -The `demos' subdirectory has some sample programs using GMP. These -aren't built or installed, but there's a `Makefile' with rules for them. -For instance, - - make pexpr - ./pexpr 68^975+10 - -The following programs are provided - - * `pexpr' is an expression evaluator, the program used on the GMP - web page. - - * The `calc' subdirectory has a similar but simpler evaluator using - `lex' and `yacc'. - - * The `expr' subdirectory is yet another expression evaluator, a - library designed for ease of use within a C program. See - `demos/expr/README' for more information. - - * `factorize' is a Pollard-Rho factorization program. - - * `isprime' is a command-line interface to the `mpz_probab_prime_p' - function. - - * `primes' counts or lists primes in an interval, using a sieve. - - * `qcn' is an example use of `mpz_kronecker_ui' to estimate quadratic - class numbers. - - * The `perl' subdirectory is a comprehensive perl interface to GMP. - See `demos/perl/INSTALL' for more information. Documentation is - in POD format in `demos/perl/GMP.pm'. - - As an aside, consideration has been given at various times to some -sort of expression evaluation within the main GMP library. Going -beyond something minimal quickly leads to matters like user-defined -functions, looping, fixnums for control variables, etc, which are -considered outside the scope of GMP (much closer to language -interpreters or compilers, *Note Language Bindings::.) Something -simple for program input convenience may yet be a possibility, a -combination of the `expr' demo and the `pexpr' tree back-end perhaps. -But for now the above evaluators are offered as illustrations. - - -File: gmp.info, Node: Efficiency, Next: Debugging, Prev: Demonstration Programs, Up: GMP Basics - -3.11 Efficiency -=============== - -Small Operands - On small operands, the time for function call overheads and memory - allocation can be significant in comparison to actual calculation. - This is unavoidable in a general purpose variable precision - library, although GMP attempts to be as efficient as it can on - both large and small operands. - -Static Linking - On some CPUs, in particular the x86s, the static `libgmp.a' should - be used for maximum speed, since the PIC code in the shared - `libgmp.so' will have a small overhead on each function call and - global data address. For many programs this will be - insignificant, but for long calculations there's a gain to be had. - -Initializing and Clearing - Avoid excessive initializing and clearing of variables, since this - can be quite time consuming, especially in comparison to otherwise - fast operations like addition. - - A language interpreter might want to keep a free list or stack of - initialized variables ready for use. It should be possible to - integrate something like that with a garbage collector too. - -Reallocations - An `mpz_t' or `mpq_t' variable used to hold successively increasing - values will have its memory repeatedly `realloc'ed, which could be - quite slow or could fragment memory, depending on the C library. - If an application can estimate the final size then `mpz_init2' or - `mpz_realloc2' can be called to allocate the necessary space from - the beginning (*note Initializing Integers::). - - It doesn't matter if a size set with `mpz_init2' or `mpz_realloc2' - is too small, since all functions will do a further reallocation - if necessary. Badly overestimating memory required will waste - space though. - -`2exp' Functions - It's up to an application to call functions like `mpz_mul_2exp' - when appropriate. General purpose functions like `mpz_mul' make - no attempt to identify powers of two or other special forms, - because such inputs will usually be very rare and testing every - time would be wasteful. - -`ui' and `si' Functions - The `ui' functions and the small number of `si' functions exist for - convenience and should be used where applicable. But if for - example an `mpz_t' contains a value that fits in an `unsigned - long' there's no need extract it and call a `ui' function, just - use the regular `mpz' function. - -In-Place Operations - `mpz_abs', `mpq_abs', `mpf_abs', `mpz_neg', `mpq_neg' and - `mpf_neg' are fast when used for in-place operations like - `mpz_abs(x,x)', since in the current implementation only a single - field of `x' needs changing. On suitable compilers (GCC for - instance) this is inlined too. - - `mpz_add_ui', `mpz_sub_ui', `mpf_add_ui' and `mpf_sub_ui' benefit - from an in-place operation like `mpz_add_ui(x,x,y)', since usually - only one or two limbs of `x' will need to be changed. The same - applies to the full precision `mpz_add' etc if `y' is small. If - `y' is big then cache locality may be helped, but that's all. - - `mpz_mul' is currently the opposite, a separate destination is - slightly better. A call like `mpz_mul(x,x,y)' will, unless `y' is - only one limb, make a temporary copy of `x' before forming the - result. Normally that copying will only be a tiny fraction of the - time for the multiply, so this is not a particularly important - consideration. - - `mpz_set', `mpq_set', `mpq_set_num', `mpf_set', etc, make no - attempt to recognise a copy of something to itself, so a call like - `mpz_set(x,x)' will be wasteful. Naturally that would never be - written deliberately, but if it might arise from two pointers to - the same object then a test to avoid it might be desirable. - - if (x != y) - mpz_set (x, y); - - Note that it's never worth introducing extra `mpz_set' calls just - to get in-place operations. If a result should go to a particular - variable then just direct it there and let GMP take care of data - movement. - -Divisibility Testing (Small Integers) - `mpz_divisible_ui_p' and `mpz_congruent_ui_p' are the best - functions for testing whether an `mpz_t' is divisible by an - individual small integer. They use an algorithm which is faster - than `mpz_tdiv_ui', but which gives no useful information about - the actual remainder, only whether it's zero (or a particular - value). - - However when testing divisibility by several small integers, it's - best to take a remainder modulo their product, to save - multi-precision operations. For instance to test whether a number - is divisible by any of 23, 29 or 31 take a remainder modulo - 23*29*31 = 20677 and then test that. - - The division functions like `mpz_tdiv_q_ui' which give a quotient - as well as a remainder are generally a little slower than the - remainder-only functions like `mpz_tdiv_ui'. If the quotient is - only rarely wanted then it's probably best to just take a - remainder and then go back and calculate the quotient if and when - it's wanted (`mpz_divexact_ui' can be used if the remainder is - zero). - -Rational Arithmetic - The `mpq' functions operate on `mpq_t' values with no common - factors in the numerator and denominator. Common factors are - checked-for and cast out as necessary. In general, cancelling - factors every time is the best approach since it minimizes the - sizes for subsequent operations. - - However, applications that know something about the factorization - of the values they're working with might be able to avoid some of - the GCDs used for canonicalization, or swap them for divisions. - For example when multiplying by a prime it's enough to check for - factors of it in the denominator instead of doing a full GCD. Or - when forming a big product it might be known that very little - cancellation will be possible, and so canonicalization can be left - to the end. - - The `mpq_numref' and `mpq_denref' macros give access to the - numerator and denominator to do things outside the scope of the - supplied `mpq' functions. *Note Applying Integer Functions::. - - The canonical form for rationals allows mixed-type `mpq_t' and - integer additions or subtractions to be done directly with - multiples of the denominator. This will be somewhat faster than - `mpq_add'. For example, - - /* mpq increment */ - mpz_add (mpq_numref(q), mpq_numref(q), mpq_denref(q)); - - /* mpq += unsigned long */ - mpz_addmul_ui (mpq_numref(q), mpq_denref(q), 123UL); - - /* mpq -= mpz */ - mpz_submul (mpq_numref(q), mpq_denref(q), z); - -Number Sequences - Functions like `mpz_fac_ui', `mpz_fib_ui' and `mpz_bin_uiui' are - designed for calculating isolated values. If a range of values is - wanted it's probably best to call to get a starting point and - iterate from there. - -Text Input/Output - Hexadecimal or octal are suggested for input or output in text - form. Power-of-2 bases like these can be converted much more - efficiently than other bases, like decimal. For big numbers - there's usually nothing of particular interest to be seen in the - digits, so the base doesn't matter much. - - Maybe we can hope octal will one day become the normal base for - everyday use, as proposed by King Charles XII of Sweden and later - reformers. - - -File: gmp.info, Node: Debugging, Next: Profiling, Prev: Efficiency, Up: GMP Basics - -3.12 Debugging -============== - -Stack Overflow - Depending on the system, a segmentation violation or bus error - might be the only indication of stack overflow. See - `--enable-alloca' choices in *Note Build Options::, for how to - address this. - - In new enough versions of GCC, `-fstack-check' may be able to - ensure an overflow is recognised by the system before too much - damage is done, or `-fstack-limit-symbol' or - `-fstack-limit-register' may be able to add checking if the system - itself doesn't do any (*note Options for Code Generation: - (gcc)Code Gen Options.). These options must be added to the - `CFLAGS' used in the GMP build (*note Build Options::), adding - them just to an application will have no effect. Note also - they're a slowdown, adding overhead to each function call and each - stack allocation. - -Heap Problems - The most likely cause of application problems with GMP is heap - corruption. Failing to `init' GMP variables will have - unpredictable effects, and corruption arising elsewhere in a - program may well affect GMP. Initializing GMP variables more than - once or failing to clear them will cause memory leaks. - - In all such cases a `malloc' debugger is recommended. On a GNU or - BSD system the standard C library `malloc' has some diagnostic - facilities, see *Note Allocation Debugging: (libc)Allocation - Debugging, or `man 3 malloc'. Other possibilities, in no - particular order, include - - `http://www.inf.ethz.ch/personal/biere/projects/ccmalloc/' - `http://dmalloc.com/' - `http://www.perens.com/FreeSoftware/' (electric fence) - `http://packages.debian.org/stable/devel/fda' - `http://www.gnupdate.org/components/leakbug/' - `http://people.redhat.com/~otaylor/memprof/' - `http://www.cbmamiga.demon.co.uk/mpatrol/' - - The GMP default allocation routines in `memory.c' also have a - simple sentinel scheme which can be enabled with `#define DEBUG' - in that file. This is mainly designed for detecting buffer - overruns during GMP development, but might find other uses. - -Stack Backtraces - On some systems the compiler options GMP uses by default can - interfere with debugging. In particular on x86 and 68k systems - `-fomit-frame-pointer' is used and this generally inhibits stack - backtracing. Recompiling without such options may help while - debugging, though the usual caveats about it potentially moving a - memory problem or hiding a compiler bug will apply. - -GDB, the GNU Debugger - A sample `.gdbinit' is included in the distribution, showing how - to call some undocumented dump functions to print GMP variables - from within GDB. Note that these functions shouldn't be used in - final application code since they're undocumented and may be - subject to incompatible changes in future versions of GMP. - -Source File Paths - GMP has multiple source files with the same name, in different - directories. For example `mpz', `mpq' and `mpf' each have an - `init.c'. If the debugger can't already determine the right one - it may help to build with absolute paths on each C file. One way - to do that is to use a separate object directory with an absolute - path to the source directory. - - cd /my/build/dir - /my/source/dir/gmp-5.0.1/configure - - This works via `VPATH', and might require GNU `make'. Alternately - it might be possible to change the `.c.lo' rules appropriately. - -Assertion Checking - The build option `--enable-assert' is available to add some - consistency checks to the library (see *Note Build Options::). - These are likely to be of limited value to most applications. - Assertion failures are just as likely to indicate memory - corruption as a library or compiler bug. - - Applications using the low-level `mpn' functions, however, will - benefit from `--enable-assert' since it adds checks on the - parameters of most such functions, many of which have subtle - restrictions on their usage. Note however that only the generic C - code has checks, not the assembly code, so CPU `none' should be - used for maximum checking. - -Temporary Memory Checking - The build option `--enable-alloca=debug' arranges that each block - of temporary memory in GMP is allocated with a separate call to - `malloc' (or the allocation function set with - `mp_set_memory_functions'). - - This can help a malloc debugger detect accesses outside the - intended bounds, or detect memory not released. In a normal - build, on the other hand, temporary memory is allocated in blocks - which GMP divides up for its own use, or may be allocated with a - compiler builtin `alloca' which will go nowhere near any malloc - debugger hooks. - -Maximum Debuggability - To summarize the above, a GMP build for maximum debuggability - would be - - ./configure --disable-shared --enable-assert \ - --enable-alloca=debug --host=none CFLAGS=-g - - For C++, add `--enable-cxx CXXFLAGS=-g'. - -Checker - The GCC checker (`http://savannah.nongnu.org/projects/checker/') - can be used with GMP. It contains a stub library which means GMP - applications compiled with checker can use a normal GMP build. - - A build of GMP with checking within GMP itself can be made. This - will run very very slowly. On GNU/Linux for example, - - ./configure --host=none-pc-linux-gnu CC=checkergcc - - `--host=none' must be used, since the GMP assembly code doesn't - support the checking scheme. The GMP C++ features cannot be used, - since current versions of checker (0.9.9.1) don't yet support the - standard C++ library. - -Valgrind - The valgrind program (`http://valgrind.org/') is a memory checker - for x86s. It translates and emulates machine instructions to do - strong checks for uninitialized data (at the level of individual - bits), memory accesses through bad pointers, and memory leaks. - - Recent versions of Valgrind are getting support for MMX and - SSE/SSE2 instructions, for past versions GMP will need to be - configured not to use those, ie. for an x86 without them (for - instance plain `i486'). - -Other Problems - Any suspected bug in GMP itself should be isolated to make sure - it's not an application problem, see *Note Reporting Bugs::. - - -File: gmp.info, Node: Profiling, Next: Autoconf, Prev: Debugging, Up: GMP Basics - -3.13 Profiling -============== - -Running a program under a profiler is a good way to find where it's -spending most time and where improvements can be best sought. The -profiling choices for a GMP build are as follows. - -`--disable-profiling' - The default is to add nothing special for profiling. - - It should be possible to just compile the mainline of a program - with `-p' and use `prof' to get a profile consisting of - timer-based sampling of the program counter. Most of the GMP - assembly code has the necessary symbol information. - - This approach has the advantage of minimizing interference with - normal program operation, but on most systems the resolution of - the sampling is quite low (10 milliseconds for instance), - requiring long runs to get accurate information. - -`--enable-profiling=prof' - Build with support for the system `prof', which means `-p' added - to the `CFLAGS'. - - This provides call counting in addition to program counter - sampling, which allows the most frequently called routines to be - identified, and an average time spent in each routine to be - determined. - - The x86 assembly code has support for this option, but on other - processors the assembly routines will be as if compiled without - `-p' and therefore won't appear in the call counts. - - On some systems, such as GNU/Linux, `-p' in fact means `-pg' and in - this case `--enable-profiling=gprof' described below should be used - instead. - -`--enable-profiling=gprof' - Build with support for `gprof', which means `-pg' added to the - `CFLAGS'. - - This provides call graph construction in addition to call counting - and program counter sampling, which makes it possible to count - calls coming from different locations. For example the number of - calls to `mpn_mul' from `mpz_mul' versus the number from - `mpf_mul'. The program counter sampling is still flat though, so - only a total time in `mpn_mul' would be accumulated, not a - separate amount for each call site. - - The x86 assembly code has support for this option, but on other - processors the assembly routines will be as if compiled without - `-pg' and therefore not be included in the call counts. - - On x86 and m68k systems `-pg' and `-fomit-frame-pointer' are - incompatible, so the latter is omitted from the default flags in - that case, which might result in poorer code generation. - - Incidentally, it should be possible to use the `gprof' program - with a plain `--enable-profiling=prof' build. But in that case - only the `gprof -p' flat profile and call counts can be expected - to be valid, not the `gprof -q' call graph. - -`--enable-profiling=instrument' - Build with the GCC option `-finstrument-functions' added to the - `CFLAGS' (*note Options for Code Generation: (gcc)Code Gen - Options.). - - This inserts special instrumenting calls at the start and end of - each function, allowing exact timing and full call graph - construction. - - This instrumenting is not normally a standard system feature and - will require support from an external library, such as - - `http://sourceforge.net/projects/fnccheck/' - - This should be included in `LIBS' during the GMP configure so that - test programs will link. For example, - - ./configure --enable-profiling=instrument LIBS=-lfc - - On a GNU system the C library provides dummy instrumenting - functions, so programs compiled with this option will link. In - this case it's only necessary to ensure the correct library is - added when linking an application. - - The x86 assembly code supports this option, but on other - processors the assembly routines will be as if compiled without - `-finstrument-functions' meaning time spent in them will - effectively be attributed to their caller. - - -File: gmp.info, Node: Autoconf, Next: Emacs, Prev: Profiling, Up: GMP Basics - -3.14 Autoconf -============= - -Autoconf based applications can easily check whether GMP is installed. -The only thing to be noted is that GMP library symbols from version 3 -onwards have prefixes like `__gmpz'. The following therefore would be -a simple test, - - AC_CHECK_LIB(gmp, __gmpz_init) - - This just uses the default `AC_CHECK_LIB' actions for found or not -found, but an application that must have GMP would want to generate an -error if not found. For example, - - AC_CHECK_LIB(gmp, __gmpz_init, , - [AC_MSG_ERROR([GNU MP not found, see http://gmplib.org/])]) - - If functions added in some particular version of GMP are required, -then one of those can be used when checking. For example `mpz_mul_si' -was added in GMP 3.1, - - AC_CHECK_LIB(gmp, __gmpz_mul_si, , - [AC_MSG_ERROR( - [GNU MP not found, or not 3.1 or up, see http://gmplib.org/])]) - - An alternative would be to test the version number in `gmp.h' using -say `AC_EGREP_CPP'. That would make it possible to test the exact -version, if some particular sub-minor release is known to be necessary. - - In general it's recommended that applications should simply demand a -new enough GMP rather than trying to provide supplements for features -not available in past versions. - - Occasionally an application will need or want to know the size of a -type at configuration or preprocessing time, not just with `sizeof' in -the code. This can be done in the normal way with `mp_limb_t' etc, but -GMP 4.0 or up is best for this, since prior versions needed certain -`-D' defines on systems using a `long long' limb. The following would -suit Autoconf 2.50 or up, - - AC_CHECK_SIZEOF(mp_limb_t, , [#include ]) - - -File: gmp.info, Node: Emacs, Prev: Autoconf, Up: GMP Basics - -3.15 Emacs -========== - - (`info-lookup-symbol') is a good way to find documentation on -C functions while editing (*note Info Documentation Lookup: (emacs)Info -Lookup.). - - The GMP manual can be included in such lookups by putting the -following in your `.emacs', - - (eval-after-load "info-look" - '(let ((mode-value (assoc 'c-mode (assoc 'symbol info-lookup-alist)))) - (setcar (nthcdr 3 mode-value) - (cons '("(gmp)Function Index" nil "^ -.* " "\\>") - (nth 3 mode-value))))) - - -File: gmp.info, Node: Reporting Bugs, Next: Integer Functions, Prev: GMP Basics, Up: Top - -4 Reporting Bugs -**************** - -If you think you have found a bug in the GMP library, please -investigate it and report it. We have made this library available to -you, and it is not too much to ask you to report the bugs you find. - - Before you report a bug, check it's not already addressed in *Note -Known Build Problems::, or perhaps *Note Notes for Particular -Systems::. You may also want to check `http://gmplib.org/' for patches -for this release. - - Please include the following in any report, - - * The GMP version number, and if pre-packaged or patched then say so. - - * A test program that makes it possible for us to reproduce the bug. - Include instructions on how to run the program. - - * A description of what is wrong. If the results are incorrect, in - what way. If you get a crash, say so. - - * If you get a crash, include a stack backtrace from the debugger if - it's informative (`where' in `gdb', or `$C' in `adb'). - - * Please do not send core dumps, executables or `strace's. - - * The configuration options you used when building GMP, if any. - - * The name of the compiler and its version. For `gcc', get the - version with `gcc -v', otherwise perhaps `what `which cc`', or - similar. - - * The output from running `uname -a'. - - * The output from running `./config.guess', and from running - `./configfsf.guess' (might be the same). - - * If the bug is related to `configure', then the compressed contents - of `config.log'. - - * If the bug is related to an `asm' file not assembling, then the - contents of `config.m4' and the offending line or lines from the - temporary `mpn/tmp-.s'. - - Please make an effort to produce a self-contained report, with -something definite that can be tested or debugged. Vague queries or -piecemeal messages are difficult to act on and don't help the -development effort. - - It is not uncommon that an observed problem is actually due to a bug -in the compiler; the GMP code tends to explore interesting corners in -compilers. - - If your bug report is good, we will do our best to help you get a -corrected version of the library; if the bug report is poor, we won't -do anything about it (except maybe ask you to send a better report). - - Send your report to: . - - If you think something in this manual is unclear, or downright -incorrect, or if the language needs to be improved, please send a note -to the same address. - - -File: gmp.info, Node: Integer Functions, Next: Rational Number Functions, Prev: Reporting Bugs, Up: Top - -5 Integer Functions -******************* - -This chapter describes the GMP functions for performing integer -arithmetic. These functions start with the prefix `mpz_'. - - GMP integers are stored in objects of type `mpz_t'. - -* Menu: - -* Initializing Integers:: -* Assigning Integers:: -* Simultaneous Integer Init & Assign:: -* Converting Integers:: -* Integer Arithmetic:: -* Integer Division:: -* Integer Exponentiation:: -* Integer Roots:: -* Number Theoretic Functions:: -* Integer Comparisons:: -* Integer Logic and Bit Fiddling:: -* I/O of Integers:: -* Integer Random Numbers:: -* Integer Import and Export:: -* Miscellaneous Integer Functions:: -* Integer Special Functions:: - - -File: gmp.info, Node: Initializing Integers, Next: Assigning Integers, Prev: Integer Functions, Up: Integer Functions - -5.1 Initialization Functions -============================ - -The functions for integer arithmetic assume that all integer objects are -initialized. You do that by calling the function `mpz_init'. For -example, - - { - mpz_t integ; - mpz_init (integ); - ... - mpz_add (integ, ...); - ... - mpz_sub (integ, ...); - - /* Unless the program is about to exit, do ... */ - mpz_clear (integ); - } - - As you can see, you can store new values any number of times, once an -object is initialized. - - -- Function: void mpz_init (mpz_t X) - Initialize X, and set its value to 0. - - -- Function: void mpz_inits (mpz_t X, ...) - Initialize a NULL-terminated list of `mpz_t' variables, and set - their values to 0. - - -- Function: void mpz_init2 (mpz_t X, mp_bitcnt_t N) - Initialize X, with space for N-bit numbers, and set its value to 0. - Calling this function instead of `mpz_init' or `mpz_inits' is never - necessary; reallocation is handled automatically by GMP when - needed. - - N is only the initial space, X will grow automatically in the - normal way, if necessary, for subsequent values stored. - `mpz_init2' makes it possible to avoid such reallocations if a - maximum size is known in advance. - - -- Function: void mpz_clear (mpz_t X) - Free the space occupied by X. Call this function for all `mpz_t' - variables when you are done with them. - - -- Function: void mpz_clears (mpz_t X, ...) - Free the space occupied by a NULL-terminated list of `mpz_t' - variables. - - -- Function: void mpz_realloc2 (mpz_t X, mp_bitcnt_t N) - Change the space allocated for X to N bits. The value in X is - preserved if it fits, or is set to 0 if not. - - Calling this function is never necessary; reallocation is handled - automatically by GMP when needed. But this function can be used - to increase the space for a variable in order to avoid repeated - automatic reallocations, or to decrease it to give memory back to - the heap. - - -File: gmp.info, Node: Assigning Integers, Next: Simultaneous Integer Init & Assign, Prev: Initializing Integers, Up: Integer Functions - -5.2 Assignment Functions -======================== - -These functions assign new values to already initialized integers -(*note Initializing Integers::). - - -- Function: void mpz_set (mpz_t ROP, mpz_t OP) - -- Function: void mpz_set_ui (mpz_t ROP, unsigned long int OP) - -- Function: void mpz_set_si (mpz_t ROP, signed long int OP) - -- Function: void mpz_set_d (mpz_t ROP, double OP) - -- Function: void mpz_set_q (mpz_t ROP, mpq_t OP) - -- Function: void mpz_set_f (mpz_t ROP, mpf_t OP) - Set the value of ROP from OP. - - `mpz_set_d', `mpz_set_q' and `mpz_set_f' truncate OP to make it an - integer. - - -- Function: int mpz_set_str (mpz_t ROP, char *STR, int BASE) - Set the value of ROP from STR, a null-terminated C string in base - BASE. White space is allowed in the string, and is simply ignored. - - The BASE may vary from 2 to 62, or if BASE is 0, then the leading - characters are used: `0x' and `0X' for hexadecimal, `0b' and `0B' - for binary, `0' for octal, or decimal otherwise. - - For bases up to 36, case is ignored; upper-case and lower-case - letters have the same value. For bases 37 to 62, upper-case - letter represent the usual 10..35 while lower-case letter - represent 36..61. - - This function returns 0 if the entire string is a valid number in - base BASE. Otherwise it returns -1. - - -- Function: void mpz_swap (mpz_t ROP1, mpz_t ROP2) - Swap the values ROP1 and ROP2 efficiently. - - -File: gmp.info, Node: Simultaneous Integer Init & Assign, Next: Converting Integers, Prev: Assigning Integers, Up: Integer Functions - -5.3 Combined Initialization and Assignment Functions -==================================================== - -For convenience, GMP provides a parallel series of initialize-and-set -functions which initialize the output and then store the value there. -These functions' names have the form `mpz_init_set...' - - Here is an example of using one: - - { - mpz_t pie; - mpz_init_set_str (pie, "3141592653589793238462643383279502884", 10); - ... - mpz_sub (pie, ...); - ... - mpz_clear (pie); - } - -Once the integer has been initialized by any of the `mpz_init_set...' -functions, it can be used as the source or destination operand for the -ordinary integer functions. Don't use an initialize-and-set function -on a variable already initialized! - - -- Function: void mpz_init_set (mpz_t ROP, mpz_t OP) - -- Function: void mpz_init_set_ui (mpz_t ROP, unsigned long int OP) - -- Function: void mpz_init_set_si (mpz_t ROP, signed long int OP) - -- Function: void mpz_init_set_d (mpz_t ROP, double OP) - Initialize ROP with limb space and set the initial numeric value - from OP. - - -- Function: int mpz_init_set_str (mpz_t ROP, char *STR, int BASE) - Initialize ROP and set its value like `mpz_set_str' (see its - documentation above for details). - - If the string is a correct base BASE number, the function returns - 0; if an error occurs it returns -1. ROP is initialized even if - an error occurs. (I.e., you have to call `mpz_clear' for it.) - - -File: gmp.info, Node: Converting Integers, Next: Integer Arithmetic, Prev: Simultaneous Integer Init & Assign, Up: Integer Functions - -5.4 Conversion Functions -======================== - -This section describes functions for converting GMP integers to -standard C types. Functions for converting _to_ GMP integers are -described in *Note Assigning Integers:: and *Note I/O of Integers::. - - -- Function: unsigned long int mpz_get_ui (mpz_t OP) - Return the value of OP as an `unsigned long'. - - If OP is too big to fit an `unsigned long' then just the least - significant bits that do fit are returned. The sign of OP is - ignored, only the absolute value is used. - - -- Function: signed long int mpz_get_si (mpz_t OP) - If OP fits into a `signed long int' return the value of OP. - Otherwise return the least significant part of OP, with the same - sign as OP. - - If OP is too big to fit in a `signed long int', the returned - result is probably not very useful. To find out if the value will - fit, use the function `mpz_fits_slong_p'. - - -- Function: double mpz_get_d (mpz_t OP) - Convert OP to a `double', truncating if necessary (ie. rounding - towards zero). - - If the exponent from the conversion is too big, the result is - system dependent. An infinity is returned where available. A - hardware overflow trap may or may not occur. - - -- Function: double mpz_get_d_2exp (signed long int *EXP, mpz_t OP) - Convert OP to a `double', truncating if necessary (ie. rounding - towards zero), and returning the exponent separately. - - The return value is in the range 0.5<=abs(D)<1 and the exponent is - stored to `*EXP'. D * 2^EXP is the (truncated) OP value. If OP - is zero, the return is 0.0 and 0 is stored to `*EXP'. - - This is similar to the standard C `frexp' function (*note - Normalization Functions: (libc)Normalization Functions.). - - -- Function: char * mpz_get_str (char *STR, int BASE, mpz_t OP) - Convert OP to a string of digits in base BASE. The base argument - may vary from 2 to 62 or from -2 to -36. - - For BASE in the range 2..36, digits and lower-case letters are - used; for -2..-36, digits and upper-case letters are used; for - 37..62, digits, upper-case letters, and lower-case letters (in - that significance order) are used. - - If STR is `NULL', the result string is allocated using the current - allocation function (*note Custom Allocation::). The block will be - `strlen(str)+1' bytes, that being exactly enough for the string and - null-terminator. - - If STR is not `NULL', it should point to a block of storage large - enough for the result, that being `mpz_sizeinbase (OP, BASE) + 2'. - The two extra bytes are for a possible minus sign, and the - null-terminator. - - A pointer to the result string is returned, being either the - allocated block, or the given STR. - - -File: gmp.info, Node: Integer Arithmetic, Next: Integer Division, Prev: Converting Integers, Up: Integer Functions - -5.5 Arithmetic Functions -======================== - - -- Function: void mpz_add (mpz_t ROP, mpz_t OP1, mpz_t OP2) - -- Function: void mpz_add_ui (mpz_t ROP, mpz_t OP1, unsigned long int - OP2) - Set ROP to OP1 + OP2. - - -- Function: void mpz_sub (mpz_t ROP, mpz_t OP1, mpz_t OP2) - -- Function: void mpz_sub_ui (mpz_t ROP, mpz_t OP1, unsigned long int - OP2) - -- Function: void mpz_ui_sub (mpz_t ROP, unsigned long int OP1, mpz_t - OP2) - Set ROP to OP1 - OP2. - - -- Function: void mpz_mul (mpz_t ROP, mpz_t OP1, mpz_t OP2) - -- Function: void mpz_mul_si (mpz_t ROP, mpz_t OP1, long int OP2) - -- Function: void mpz_mul_ui (mpz_t ROP, mpz_t OP1, unsigned long int - OP2) - Set ROP to OP1 times OP2. - - -- Function: void mpz_addmul (mpz_t ROP, mpz_t OP1, mpz_t OP2) - -- Function: void mpz_addmul_ui (mpz_t ROP, mpz_t OP1, unsigned long - int OP2) - Set ROP to ROP + OP1 times OP2. - - -- Function: void mpz_submul (mpz_t ROP, mpz_t OP1, mpz_t OP2) - -- Function: void mpz_submul_ui (mpz_t ROP, mpz_t OP1, unsigned long - int OP2) - Set ROP to ROP - OP1 times OP2. - - -- Function: void mpz_mul_2exp (mpz_t ROP, mpz_t OP1, mp_bitcnt_t OP2) - Set ROP to OP1 times 2 raised to OP2. This operation can also be - defined as a left shift by OP2 bits. - - -- Function: void mpz_neg (mpz_t ROP, mpz_t OP) - Set ROP to -OP. - - -- Function: void mpz_abs (mpz_t ROP, mpz_t OP) - Set ROP to the absolute value of OP. - - -File: gmp.info, Node: Integer Division, Next: Integer Exponentiation, Prev: Integer Arithmetic, Up: Integer Functions - -5.6 Division Functions -====================== - -Division is undefined if the divisor is zero. Passing a zero divisor -to the division or modulo functions (including the modular powering -functions `mpz_powm' and `mpz_powm_ui'), will cause an intentional -division by zero. This lets a program handle arithmetic exceptions in -these functions the same way as for normal C `int' arithmetic. - - -- Function: void mpz_cdiv_q (mpz_t Q, mpz_t N, mpz_t D) - -- Function: void mpz_cdiv_r (mpz_t R, mpz_t N, mpz_t D) - -- Function: void mpz_cdiv_qr (mpz_t Q, mpz_t R, mpz_t N, mpz_t D) - -- Function: unsigned long int mpz_cdiv_q_ui (mpz_t Q, mpz_t N, - unsigned long int D) - -- Function: unsigned long int mpz_cdiv_r_ui (mpz_t R, mpz_t N, - unsigned long int D) - -- Function: unsigned long int mpz_cdiv_qr_ui (mpz_t Q, mpz_t R, - mpz_t N, unsigned long int D) - -- Function: unsigned long int mpz_cdiv_ui (mpz_t N, - unsigned long int D) - -- Function: void mpz_cdiv_q_2exp (mpz_t Q, mpz_t N, mp_bitcnt_t B) - -- Function: void mpz_cdiv_r_2exp (mpz_t R, mpz_t N, mp_bitcnt_t B) - - -- Function: void mpz_fdiv_q (mpz_t Q, mpz_t N, mpz_t D) - -- Function: void mpz_fdiv_r (mpz_t R, mpz_t N, mpz_t D) - -- Function: void mpz_fdiv_qr (mpz_t Q, mpz_t R, mpz_t N, mpz_t D) - -- Function: unsigned long int mpz_fdiv_q_ui (mpz_t Q, mpz_t N, - unsigned long int D) - -- Function: unsigned long int mpz_fdiv_r_ui (mpz_t R, mpz_t N, - unsigned long int D) - -- Function: unsigned long int mpz_fdiv_qr_ui (mpz_t Q, mpz_t R, - mpz_t N, unsigned long int D) - -- Function: unsigned long int mpz_fdiv_ui (mpz_t N, - unsigned long int D) - -- Function: void mpz_fdiv_q_2exp (mpz_t Q, mpz_t N, mp_bitcnt_t B) - -- Function: void mpz_fdiv_r_2exp (mpz_t R, mpz_t N, mp_bitcnt_t B) - - -- Function: void mpz_tdiv_q (mpz_t Q, mpz_t N, mpz_t D) - -- Function: void mpz_tdiv_r (mpz_t R, mpz_t N, mpz_t D) - -- Function: void mpz_tdiv_qr (mpz_t Q, mpz_t R, mpz_t N, mpz_t D) - -- Function: unsigned long int mpz_tdiv_q_ui (mpz_t Q, mpz_t N, - unsigned long int D) - -- Function: unsigned long int mpz_tdiv_r_ui (mpz_t R, mpz_t N, - unsigned long int D) - -- Function: unsigned long int mpz_tdiv_qr_ui (mpz_t Q, mpz_t R, - mpz_t N, unsigned long int D) - -- Function: unsigned long int mpz_tdiv_ui (mpz_t N, - unsigned long int D) - -- Function: void mpz_tdiv_q_2exp (mpz_t Q, mpz_t N, mp_bitcnt_t B) - -- Function: void mpz_tdiv_r_2exp (mpz_t R, mpz_t N, mp_bitcnt_t B) - - Divide N by D, forming a quotient Q and/or remainder R. For the - `2exp' functions, D=2^B. The rounding is in three styles, each - suiting different applications. - - * `cdiv' rounds Q up towards +infinity, and R will have the - opposite sign to D. The `c' stands for "ceil". - - * `fdiv' rounds Q down towards -infinity, and R will have the - same sign as D. The `f' stands for "floor". - - * `tdiv' rounds Q towards zero, and R will have the same sign - as N. The `t' stands for "truncate". - - In all cases Q and R will satisfy N=Q*D+R, and R will satisfy - 0<=abs(R) 0 and that MOD is odd. - - This function is designed to take the same time and have the same - cache access patterns for any two same-size arguments, assuming - that function arguments are placed at the same position and that - the machine state is identical upon function entry. This function - is intended for cryptographic purposes, where resilience to - side-channel attacks is desired. - - -- Function: void mpz_pow_ui (mpz_t ROP, mpz_t BASE, unsigned long int - EXP) - -- Function: void mpz_ui_pow_ui (mpz_t ROP, unsigned long int BASE, - unsigned long int EXP) - Set ROP to BASE raised to EXP. The case 0^0 yields 1. - - -File: gmp.info, Node: Integer Roots, Next: Number Theoretic Functions, Prev: Integer Exponentiation, Up: Integer Functions - -5.8 Root Extraction Functions -============================= - - -- Function: int mpz_root (mpz_t ROP, mpz_t OP, unsigned long int N) - Set ROP to the truncated integer part of the Nth root of OP. - Return non-zero if the computation was exact, i.e., if OP is ROP - to the Nth power. - - -- Function: void mpz_rootrem (mpz_t ROOT, mpz_t REM, mpz_t U, - unsigned long int N) - Set ROOT to the truncated integer part of the Nth root of U. Set - REM to the remainder, U-ROOT**N. - - -- Function: void mpz_sqrt (mpz_t ROP, mpz_t OP) - Set ROP to the truncated integer part of the square root of OP. - - -- Function: void mpz_sqrtrem (mpz_t ROP1, mpz_t ROP2, mpz_t OP) - Set ROP1 to the truncated integer part of the square root of OP, - like `mpz_sqrt'. Set ROP2 to the remainder OP-ROP1*ROP1, which - will be zero if OP is a perfect square. - - If ROP1 and ROP2 are the same variable, the results are undefined. - - -- Function: int mpz_perfect_power_p (mpz_t OP) - Return non-zero if OP is a perfect power, i.e., if there exist - integers A and B, with B>1, such that OP equals A raised to the - power B. - - Under this definition both 0 and 1 are considered to be perfect - powers. Negative values of OP are accepted, but of course can - only be odd perfect powers. - - -- Function: int mpz_perfect_square_p (mpz_t OP) - Return non-zero if OP is a perfect square, i.e., if the square - root of OP is an integer. Under this definition both 0 and 1 are - considered to be perfect squares. - - -File: gmp.info, Node: Number Theoretic Functions, Next: Integer Comparisons, Prev: Integer Roots, Up: Integer Functions - -5.9 Number Theoretic Functions -============================== - - -- Function: int mpz_probab_prime_p (mpz_t N, int REPS) - Determine whether N is prime. Return 2 if N is definitely prime, - return 1 if N is probably prime (without being certain), or return - 0 if N is definitely composite. - - This function does some trial divisions, then some Miller-Rabin - probabilistic primality tests. REPS controls how many such tests - are done, 5 to 10 is a reasonable number, more will reduce the - chances of a composite being returned as "probably prime". - - Miller-Rabin and similar tests can be more properly called - compositeness tests. Numbers which fail are known to be composite - but those which pass might be prime or might be composite. Only a - few composites pass, hence those which pass are considered - probably prime. - - -- Function: void mpz_nextprime (mpz_t ROP, mpz_t OP) - Set ROP to the next prime greater than OP. - - This function uses a probabilistic algorithm to identify primes. - For practical purposes it's adequate, the chance of a composite - passing will be extremely small. - - -- Function: void mpz_gcd (mpz_t ROP, mpz_t OP1, mpz_t OP2) - Set ROP to the greatest common divisor of OP1 and OP2. The result - is always positive even if one or both input operands are negative. - - -- Function: unsigned long int mpz_gcd_ui (mpz_t ROP, mpz_t OP1, - unsigned long int OP2) - Compute the greatest common divisor of OP1 and OP2. If ROP is not - `NULL', store the result there. - - If the result is small enough to fit in an `unsigned long int', it - is returned. If the result does not fit, 0 is returned, and the - result is equal to the argument OP1. Note that the result will - always fit if OP2 is non-zero. - - -- Function: void mpz_gcdext (mpz_t G, mpz_t S, mpz_t T, mpz_t A, - mpz_t B) - Set G to the greatest common divisor of A and B, and in addition - set S and T to coefficients satisfying A*S + B*T = G. The value - in G is always positive, even if one or both of A and B are - negative. The values in S and T are chosen such that abs(S) <= - abs(B) and abs(T) <= abs(A). - - If T is `NULL' then that value is not computed. - - -- Function: void mpz_lcm (mpz_t ROP, mpz_t OP1, mpz_t OP2) - -- Function: void mpz_lcm_ui (mpz_t ROP, mpz_t OP1, unsigned long OP2) - Set ROP to the least common multiple of OP1 and OP2. ROP is - always positive, irrespective of the signs of OP1 and OP2. ROP - will be zero if either OP1 or OP2 is zero. - - -- Function: int mpz_invert (mpz_t ROP, mpz_t OP1, mpz_t OP2) - Compute the inverse of OP1 modulo OP2 and put the result in ROP. - If the inverse exists, the return value is non-zero and ROP will - satisfy 0 <= ROP < OP2. If an inverse doesn't exist the return - value is zero and ROP is undefined. - - -- Function: int mpz_jacobi (mpz_t A, mpz_t B) - Calculate the Jacobi symbol (A/B). This is defined only for B odd. - - -- Function: int mpz_legendre (mpz_t A, mpz_t P) - Calculate the Legendre symbol (A/P). This is defined only for P - an odd positive prime, and for such P it's identical to the Jacobi - symbol. - - -- Function: int mpz_kronecker (mpz_t A, mpz_t B) - -- Function: int mpz_kronecker_si (mpz_t A, long B) - -- Function: int mpz_kronecker_ui (mpz_t A, unsigned long B) - -- Function: int mpz_si_kronecker (long A, mpz_t B) - -- Function: int mpz_ui_kronecker (unsigned long A, mpz_t B) - Calculate the Jacobi symbol (A/B) with the Kronecker extension - (a/2)=(2/a) when a odd, or (a/2)=0 when a even. - - When B is odd the Jacobi symbol and Kronecker symbol are - identical, so `mpz_kronecker_ui' etc can be used for mixed - precision Jacobi symbols too. - - For more information see Henri Cohen section 1.4.2 (*note - References::), or any number theory textbook. See also the - example program `demos/qcn.c' which uses `mpz_kronecker_ui'. - - -- Function: mp_bitcnt_t mpz_remove (mpz_t ROP, mpz_t OP, mpz_t F) - Remove all occurrences of the factor F from OP and store the - result in ROP. The return value is how many such occurrences were - removed. - - -- Function: void mpz_fac_ui (mpz_t ROP, unsigned long int OP) - Set ROP to OP!, the factorial of OP. - - -- Function: void mpz_bin_ui (mpz_t ROP, mpz_t N, unsigned long int K) - -- Function: void mpz_bin_uiui (mpz_t ROP, unsigned long int N, - unsigned long int K) - Compute the binomial coefficient N over K and store the result in - ROP. Negative values of N are supported by `mpz_bin_ui', using - the identity bin(-n,k) = (-1)^k * bin(n+k-1,k), see Knuth volume 1 - section 1.2.6 part G. - - -- Function: void mpz_fib_ui (mpz_t FN, unsigned long int N) - -- Function: void mpz_fib2_ui (mpz_t FN, mpz_t FNSUB1, unsigned long - int N) - `mpz_fib_ui' sets FN to to F[n], the N'th Fibonacci number. - `mpz_fib2_ui' sets FN to F[n], and FNSUB1 to F[n-1]. - - These functions are designed for calculating isolated Fibonacci - numbers. When a sequence of values is wanted it's best to start - with `mpz_fib2_ui' and iterate the defining F[n+1]=F[n]+F[n-1] or - similar. - - -- Function: void mpz_lucnum_ui (mpz_t LN, unsigned long int N) - -- Function: void mpz_lucnum2_ui (mpz_t LN, mpz_t LNSUB1, unsigned - long int N) - `mpz_lucnum_ui' sets LN to to L[n], the N'th Lucas number. - `mpz_lucnum2_ui' sets LN to L[n], and LNSUB1 to L[n-1]. - - These functions are designed for calculating isolated Lucas - numbers. When a sequence of values is wanted it's best to start - with `mpz_lucnum2_ui' and iterate the defining L[n+1]=L[n]+L[n-1] - or similar. - - The Fibonacci numbers and Lucas numbers are related sequences, so - it's never necessary to call both `mpz_fib2_ui' and - `mpz_lucnum2_ui'. The formulas for going from Fibonacci to Lucas - can be found in *Note Lucas Numbers Algorithm::, the reverse is - straightforward too. - - -File: gmp.info, Node: Integer Comparisons, Next: Integer Logic and Bit Fiddling, Prev: Number Theoretic Functions, Up: Integer Functions - -5.10 Comparison Functions -========================= - - -- Function: int mpz_cmp (mpz_t OP1, mpz_t OP2) - -- Function: int mpz_cmp_d (mpz_t OP1, double OP2) - -- Macro: int mpz_cmp_si (mpz_t OP1, signed long int OP2) - -- Macro: int mpz_cmp_ui (mpz_t OP1, unsigned long int OP2) - Compare OP1 and OP2. Return a positive value if OP1 > OP2, zero - if OP1 = OP2, or a negative value if OP1 < OP2. - - `mpz_cmp_ui' and `mpz_cmp_si' are macros and will evaluate their - arguments more than once. `mpz_cmp_d' can be called with an - infinity, but results are undefined for a NaN. - - -- Function: int mpz_cmpabs (mpz_t OP1, mpz_t OP2) - -- Function: int mpz_cmpabs_d (mpz_t OP1, double OP2) - -- Function: int mpz_cmpabs_ui (mpz_t OP1, unsigned long int OP2) - Compare the absolute values of OP1 and OP2. Return a positive - value if abs(OP1) > abs(OP2), zero if abs(OP1) = abs(OP2), or a - negative value if abs(OP1) < abs(OP2). - - `mpz_cmpabs_d' can be called with an infinity, but results are - undefined for a NaN. - - -- Macro: int mpz_sgn (mpz_t OP) - Return +1 if OP > 0, 0 if OP = 0, and -1 if OP < 0. - - This function is actually implemented as a macro. It evaluates - its argument multiple times. - - -File: gmp.info, Node: Integer Logic and Bit Fiddling, Next: I/O of Integers, Prev: Integer Comparisons, Up: Integer Functions - -5.11 Logical and Bit Manipulation Functions -=========================================== - -These functions behave as if twos complement arithmetic were used -(although sign-magnitude is the actual implementation). The least -significant bit is number 0. - - -- Function: void mpz_and (mpz_t ROP, mpz_t OP1, mpz_t OP2) - Set ROP to OP1 bitwise-and OP2. - - -- Function: void mpz_ior (mpz_t ROP, mpz_t OP1, mpz_t OP2) - Set ROP to OP1 bitwise inclusive-or OP2. - - -- Function: void mpz_xor (mpz_t ROP, mpz_t OP1, mpz_t OP2) - Set ROP to OP1 bitwise exclusive-or OP2. - - -- Function: void mpz_com (mpz_t ROP, mpz_t OP) - Set ROP to the one's complement of OP. - - -- Function: mp_bitcnt_t mpz_popcount (mpz_t OP) - If OP>=0, return the population count of OP, which is the number - of 1 bits in the binary representation. If OP<0, the number of 1s - is infinite, and the return value is the largest possible - `mp_bitcnt_t'. - - -- Function: mp_bitcnt_t mpz_hamdist (mpz_t OP1, mpz_t OP2) - If OP1 and OP2 are both >=0 or both <0, return the hamming - distance between the two operands, which is the number of bit - positions where OP1 and OP2 have different bit values. If one - operand is >=0 and the other <0 then the number of bits different - is infinite, and the return value is the largest possible - `mp_bitcnt_t'. - - -- Function: mp_bitcnt_t mpz_scan0 (mpz_t OP, mp_bitcnt_t STARTING_BIT) - -- Function: mp_bitcnt_t mpz_scan1 (mpz_t OP, mp_bitcnt_t STARTING_BIT) - Scan OP, starting from bit STARTING_BIT, towards more significant - bits, until the first 0 or 1 bit (respectively) is found. Return - the index of the found bit. - - If the bit at STARTING_BIT is already what's sought, then - STARTING_BIT is returned. - - If there's no bit found, then the largest possible `mp_bitcnt_t' is - returned. This will happen in `mpz_scan0' past the end of a - negative number, or `mpz_scan1' past the end of a nonnegative - number. - - -- Function: void mpz_setbit (mpz_t ROP, mp_bitcnt_t BIT_INDEX) - Set bit BIT_INDEX in ROP. - - -- Function: void mpz_clrbit (mpz_t ROP, mp_bitcnt_t BIT_INDEX) - Clear bit BIT_INDEX in ROP. - - -- Function: void mpz_combit (mpz_t ROP, mp_bitcnt_t BIT_INDEX) - Complement bit BIT_INDEX in ROP. - - -- Function: int mpz_tstbit (mpz_t OP, mp_bitcnt_t BIT_INDEX) - Test bit BIT_INDEX in OP and return 0 or 1 accordingly. - - -File: gmp.info, Node: I/O of Integers, Next: Integer Random Numbers, Prev: Integer Logic and Bit Fiddling, Up: Integer Functions - -5.12 Input and Output Functions -=============================== - -Functions that perform input from a stdio stream, and functions that -output to a stdio stream. Passing a `NULL' pointer for a STREAM -argument to any of these functions will make them read from `stdin' and -write to `stdout', respectively. - - When using any of these functions, it is a good idea to include -`stdio.h' before `gmp.h', since that will allow `gmp.h' to define -prototypes for these functions. - - -- Function: size_t mpz_out_str (FILE *STREAM, int BASE, mpz_t OP) - Output OP on stdio stream STREAM, as a string of digits in base - BASE. The base argument may vary from 2 to 62 or from -2 to -36. - - For BASE in the range 2..36, digits and lower-case letters are - used; for -2..-36, digits and upper-case letters are used; for - 37..62, digits, upper-case letters, and lower-case letters (in - that significance order) are used. - - Return the number of bytes written, or if an error occurred, - return 0. - - -- Function: size_t mpz_inp_str (mpz_t ROP, FILE *STREAM, int BASE) - Input a possibly white-space preceded string in base BASE from - stdio stream STREAM, and put the read integer in ROP. - - The BASE may vary from 2 to 62, or if BASE is 0, then the leading - characters are used: `0x' and `0X' for hexadecimal, `0b' and `0B' - for binary, `0' for octal, or decimal otherwise. - - For bases up to 36, case is ignored; upper-case and lower-case - letters have the same value. For bases 37 to 62, upper-case - letter represent the usual 10..35 while lower-case letter - represent 36..61. - - Return the number of bytes read, or if an error occurred, return 0. - - -- Function: size_t mpz_out_raw (FILE *STREAM, mpz_t OP) - Output OP on stdio stream STREAM, in raw binary format. The - integer is written in a portable format, with 4 bytes of size - information, and that many bytes of limbs. Both the size and the - limbs are written in decreasing significance order (i.e., in - big-endian). - - The output can be read with `mpz_inp_raw'. - - Return the number of bytes written, or if an error occurred, - return 0. - - The output of this can not be read by `mpz_inp_raw' from GMP 1, - because of changes necessary for compatibility between 32-bit and - 64-bit machines. - - -- Function: size_t mpz_inp_raw (mpz_t ROP, FILE *STREAM) - Input from stdio stream STREAM in the format written by - `mpz_out_raw', and put the result in ROP. Return the number of - bytes read, or if an error occurred, return 0. - - This routine can read the output from `mpz_out_raw' also from GMP - 1, in spite of changes necessary for compatibility between 32-bit - and 64-bit machines. - - -File: gmp.info, Node: Integer Random Numbers, Next: Integer Import and Export, Prev: I/O of Integers, Up: Integer Functions - -5.13 Random Number Functions -============================ - -The random number functions of GMP come in two groups; older function -that rely on a global state, and newer functions that accept a state -parameter that is read and modified. Please see the *Note Random -Number Functions:: for more information on how to use and not to use -random number functions. - - -- Function: void mpz_urandomb (mpz_t ROP, gmp_randstate_t STATE, - mp_bitcnt_t N) - Generate a uniformly distributed random integer in the range 0 to - 2^N-1, inclusive. - - The variable STATE must be initialized by calling one of the - `gmp_randinit' functions (*Note Random State Initialization::) - before invoking this function. - - -- Function: void mpz_urandomm (mpz_t ROP, gmp_randstate_t STATE, - mpz_t N) - Generate a uniform random integer in the range 0 to N-1, inclusive. - - The variable STATE must be initialized by calling one of the - `gmp_randinit' functions (*Note Random State Initialization::) - before invoking this function. - - -- Function: void mpz_rrandomb (mpz_t ROP, gmp_randstate_t STATE, - mp_bitcnt_t N) - Generate a random integer with long strings of zeros and ones in - the binary representation. Useful for testing functions and - algorithms, since this kind of random numbers have proven to be - more likely to trigger corner-case bugs. The random number will - be in the range 0 to 2^N-1, inclusive. - - The variable STATE must be initialized by calling one of the - `gmp_randinit' functions (*Note Random State Initialization::) - before invoking this function. - - -- Function: void mpz_random (mpz_t ROP, mp_size_t MAX_SIZE) - Generate a random integer of at most MAX_SIZE limbs. The generated - random number doesn't satisfy any particular requirements of - randomness. Negative random numbers are generated when MAX_SIZE - is negative. - - This function is obsolete. Use `mpz_urandomb' or `mpz_urandomm' - instead. - - -- Function: void mpz_random2 (mpz_t ROP, mp_size_t MAX_SIZE) - Generate a random integer of at most MAX_SIZE limbs, with long - strings of zeros and ones in the binary representation. Useful - for testing functions and algorithms, since this kind of random - numbers have proven to be more likely to trigger corner-case bugs. - Negative random numbers are generated when MAX_SIZE is negative. - - This function is obsolete. Use `mpz_rrandomb' instead. - - -File: gmp.info, Node: Integer Import and Export, Next: Miscellaneous Integer Functions, Prev: Integer Random Numbers, Up: Integer Functions - -5.14 Integer Import and Export -============================== - -`mpz_t' variables can be converted to and from arbitrary words of binary -data with the following functions. - - -- Function: void mpz_import (mpz_t ROP, size_t COUNT, int ORDER, - size_t SIZE, int ENDIAN, size_t NAILS, const void *OP) - Set ROP from an array of word data at OP. - - The parameters specify the format of the data. COUNT many words - are read, each SIZE bytes. ORDER can be 1 for most significant - word first or -1 for least significant first. Within each word - ENDIAN can be 1 for most significant byte first, -1 for least - significant first, or 0 for the native endianness of the host CPU. - The most significant NAILS bits of each word are skipped, this - can be 0 to use the full words. - - There is no sign taken from the data, ROP will simply be a positive - integer. An application can handle any sign itself, and apply it - for instance with `mpz_neg'. - - There are no data alignment restrictions on OP, any address is - allowed. - - Here's an example converting an array of `unsigned long' data, most - significant element first, and host byte order within each value. - - unsigned long a[20]; - /* Initialize Z and A */ - mpz_import (z, 20, 1, sizeof(a[0]), 0, 0, a); - - This example assumes the full `sizeof' bytes are used for data in - the given type, which is usually true, and certainly true for - `unsigned long' everywhere we know of. However on Cray vector - systems it may be noted that `short' and `int' are always stored - in 8 bytes (and with `sizeof' indicating that) but use only 32 or - 46 bits. The NAILS feature can account for this, by passing for - instance `8*sizeof(int)-INT_BIT'. - - -- Function: void * mpz_export (void *ROP, size_t *COUNTP, int ORDER, - size_t SIZE, int ENDIAN, size_t NAILS, mpz_t OP) - Fill ROP with word data from OP. - - The parameters specify the format of the data produced. Each word - will be SIZE bytes and ORDER can be 1 for most significant word - first or -1 for least significant first. Within each word ENDIAN - can be 1 for most significant byte first, -1 for least significant - first, or 0 for the native endianness of the host CPU. The most - significant NAILS bits of each word are unused and set to zero, - this can be 0 to produce full words. - - The number of words produced is written to `*COUNTP', or COUNTP - can be `NULL' to discard the count. ROP must have enough space - for the data, or if ROP is `NULL' then a result array of the - necessary size is allocated using the current GMP allocation - function (*note Custom Allocation::). In either case the return - value is the destination used, either ROP or the allocated block. - - If OP is non-zero then the most significant word produced will be - non-zero. If OP is zero then the count returned will be zero and - nothing written to ROP. If ROP is `NULL' in this case, no block - is allocated, just `NULL' is returned. - - The sign of OP is ignored, just the absolute value is exported. An - application can use `mpz_sgn' to get the sign and handle it as - desired. (*note Integer Comparisons::) - - There are no data alignment restrictions on ROP, any address is - allowed. - - When an application is allocating space itself the required size - can be determined with a calculation like the following. Since - `mpz_sizeinbase' always returns at least 1, `count' here will be - at least one, which avoids any portability problems with - `malloc(0)', though if `z' is zero no space at all is actually - needed (or written). - - numb = 8*size - nail; - count = (mpz_sizeinbase (z, 2) + numb-1) / numb; - p = malloc (count * size); - - -File: gmp.info, Node: Miscellaneous Integer Functions, Next: Integer Special Functions, Prev: Integer Import and Export, Up: Integer Functions - -5.15 Miscellaneous Functions -============================ - - -- Function: int mpz_fits_ulong_p (mpz_t OP) - -- Function: int mpz_fits_slong_p (mpz_t OP) - -- Function: int mpz_fits_uint_p (mpz_t OP) - -- Function: int mpz_fits_sint_p (mpz_t OP) - -- Function: int mpz_fits_ushort_p (mpz_t OP) - -- Function: int mpz_fits_sshort_p (mpz_t OP) - Return non-zero iff the value of OP fits in an `unsigned long int', - `signed long int', `unsigned int', `signed int', `unsigned short - int', or `signed short int', respectively. Otherwise, return zero. - - -- Macro: int mpz_odd_p (mpz_t OP) - -- Macro: int mpz_even_p (mpz_t OP) - Determine whether OP is odd or even, respectively. Return - non-zero if yes, zero if no. These macros evaluate their argument - more than once. - - -- Function: size_t mpz_sizeinbase (mpz_t OP, int BASE) - Return the size of OP measured in number of digits in the given - BASE. BASE can vary from 2 to 62. The sign of OP is ignored, - just the absolute value is used. The result will be either exact - or 1 too big. If BASE is a power of 2, the result is always - exact. If OP is zero the return value is always 1. - - This function can be used to determine the space required when - converting OP to a string. The right amount of allocation is - normally two more than the value returned by `mpz_sizeinbase', one - extra for a minus sign and one for the null-terminator. - - It will be noted that `mpz_sizeinbase(OP,2)' can be used to locate - the most significant 1 bit in OP, counting from 1. (Unlike the - bitwise functions which start from 0, *Note Logical and Bit - Manipulation Functions: Integer Logic and Bit Fiddling.) - - -File: gmp.info, Node: Integer Special Functions, Prev: Miscellaneous Integer Functions, Up: Integer Functions - -5.16 Special Functions -====================== - -The functions in this section are for various special purposes. Most -applications will not need them. - - -- Function: void mpz_array_init (mpz_t INTEGER_ARRAY, mp_size_t - ARRAY_SIZE, mp_size_t FIXED_NUM_BITS) - This is a special type of initialization. *Fixed* space of - FIXED_NUM_BITS is allocated to each of the ARRAY_SIZE integers in - INTEGER_ARRAY. There is no way to free the storage allocated by - this function. Don't call `mpz_clear'! - - The INTEGER_ARRAY parameter is the first `mpz_t' in the array. For - example, - - mpz_t arr[20000]; - mpz_array_init (arr[0], 20000, 512); - - This function is only intended for programs that create a large - number of integers and need to reduce memory usage by avoiding the - overheads of allocating and reallocating lots of small blocks. In - normal programs this function is not recommended. - - The space allocated to each integer by this function will not be - automatically increased, unlike the normal `mpz_init', so an - application must ensure it is sufficient for any value stored. - The following space requirements apply to various routines, - - * `mpz_abs', `mpz_neg', `mpz_set', `mpz_set_si' and - `mpz_set_ui' need room for the value they store. - - * `mpz_add', `mpz_add_ui', `mpz_sub' and `mpz_sub_ui' need room - for the larger of the two operands, plus an extra - `mp_bits_per_limb'. - - * `mpz_mul', `mpz_mul_ui' and `mpz_mul_ui' need room for the sum - of the number of bits in their operands, but each rounded up - to a multiple of `mp_bits_per_limb'. - - * `mpz_swap' can be used between two array variables, but not - between an array and a normal variable. - - For other functions, or if in doubt, the suggestion is to - calculate in a regular `mpz_init' variable and copy the result to - an array variable with `mpz_set'. - - -- Function: void * _mpz_realloc (mpz_t INTEGER, mp_size_t NEW_ALLOC) - Change the space for INTEGER to NEW_ALLOC limbs. The value in - INTEGER is preserved if it fits, or is set to 0 if not. The return - value is not useful to applications and should be ignored. - - `mpz_realloc2' is the preferred way to accomplish allocation - changes like this. `mpz_realloc2' and `_mpz_realloc' are the same - except that `_mpz_realloc' takes its size in limbs. - - -- Function: mp_limb_t mpz_getlimbn (mpz_t OP, mp_size_t N) - Return limb number N from OP. The sign of OP is ignored, just the - absolute value is used. The least significant limb is number 0. - - `mpz_size' can be used to find how many limbs make up OP. - `mpz_getlimbn' returns zero if N is outside the range 0 to - `mpz_size(OP)-1'. - - -- Function: size_t mpz_size (mpz_t OP) - Return the size of OP measured in number of limbs. If OP is zero, - the returned value will be zero. - - -File: gmp.info, Node: Rational Number Functions, Next: Floating-point Functions, Prev: Integer Functions, Up: Top - -6 Rational Number Functions -*************************** - -This chapter describes the GMP functions for performing arithmetic on -rational numbers. These functions start with the prefix `mpq_'. - - Rational numbers are stored in objects of type `mpq_t'. - - All rational arithmetic functions assume operands have a canonical -form, and canonicalize their result. The canonical from means that the -denominator and the numerator have no common factors, and that the -denominator is positive. Zero has the unique representation 0/1. - - Pure assignment functions do not canonicalize the assigned variable. -It is the responsibility of the user to canonicalize the assigned -variable before any arithmetic operations are performed on that -variable. - - -- Function: void mpq_canonicalize (mpq_t OP) - Remove any factors that are common to the numerator and - denominator of OP, and make the denominator positive. - -* Menu: - -* Initializing Rationals:: -* Rational Conversions:: -* Rational Arithmetic:: -* Comparing Rationals:: -* Applying Integer Functions:: -* I/O of Rationals:: - - -File: gmp.info, Node: Initializing Rationals, Next: Rational Conversions, Prev: Rational Number Functions, Up: Rational Number Functions - -6.1 Initialization and Assignment Functions -=========================================== - - -- Function: void mpq_init (mpq_t X) - Initialize X and set it to 0/1. Each variable should normally - only be initialized once, or at least cleared out (using the - function `mpq_clear') between each initialization. - - -- Function: void mpq_inits (mpq_t X, ...) - Initialize a NULL-terminated list of `mpq_t' variables, and set - their values to 0/1. - - -- Function: void mpq_clear (mpq_t X) - Free the space occupied by X. Make sure to call this function for - all `mpq_t' variables when you are done with them. - - -- Function: void mpq_clears (mpq_t X, ...) - Free the space occupied by a NULL-terminated list of `mpq_t' - variables. - - -- Function: void mpq_set (mpq_t ROP, mpq_t OP) - -- Function: void mpq_set_z (mpq_t ROP, mpz_t OP) - Assign ROP from OP. - - -- Function: void mpq_set_ui (mpq_t ROP, unsigned long int OP1, - unsigned long int OP2) - -- Function: void mpq_set_si (mpq_t ROP, signed long int OP1, unsigned - long int OP2) - Set the value of ROP to OP1/OP2. Note that if OP1 and OP2 have - common factors, ROP has to be passed to `mpq_canonicalize' before - any operations are performed on ROP. - - -- Function: int mpq_set_str (mpq_t ROP, char *STR, int BASE) - Set ROP from a null-terminated string STR in the given BASE. - - The string can be an integer like "41" or a fraction like - "41/152". The fraction must be in canonical form (*note Rational - Number Functions::), or if not then `mpq_canonicalize' must be - called. - - The numerator and optional denominator are parsed the same as in - `mpz_set_str' (*note Assigning Integers::). White space is - allowed in the string, and is simply ignored. The BASE can vary - from 2 to 62, or if BASE is 0 then the leading characters are - used: `0x' or `0X' for hex, `0b' or `0B' for binary, `0' for - octal, or decimal otherwise. Note that this is done separately - for the numerator and denominator, so for instance `0xEF/100' is - 239/100, whereas `0xEF/0x100' is 239/256. - - The return value is 0 if the entire string is a valid number, or - -1 if not. - - -- Function: void mpq_swap (mpq_t ROP1, mpq_t ROP2) - Swap the values ROP1 and ROP2 efficiently. - - -File: gmp.info, Node: Rational Conversions, Next: Rational Arithmetic, Prev: Initializing Rationals, Up: Rational Number Functions - -6.2 Conversion Functions -======================== - - -- Function: double mpq_get_d (mpq_t OP) - Convert OP to a `double', truncating if necessary (ie. rounding - towards zero). - - If the exponent from the conversion is too big or too small to fit - a `double' then the result is system dependent. For too big an - infinity is returned when available. For too small 0.0 is - normally returned. Hardware overflow, underflow and denorm traps - may or may not occur. - - -- Function: void mpq_set_d (mpq_t ROP, double OP) - -- Function: void mpq_set_f (mpq_t ROP, mpf_t OP) - Set ROP to the value of OP. There is no rounding, this conversion - is exact. - - -- Function: char * mpq_get_str (char *STR, int BASE, mpq_t OP) - Convert OP to a string of digits in base BASE. The base may vary - from 2 to 36. The string will be of the form `num/den', or if the - denominator is 1 then just `num'. - - If STR is `NULL', the result string is allocated using the current - allocation function (*note Custom Allocation::). The block will be - `strlen(str)+1' bytes, that being exactly enough for the string and - null-terminator. - - If STR is not `NULL', it should point to a block of storage large - enough for the result, that being - - mpz_sizeinbase (mpq_numref(OP), BASE) - + mpz_sizeinbase (mpq_denref(OP), BASE) + 3 - - The three extra bytes are for a possible minus sign, possible - slash, and the null-terminator. - - A pointer to the result string is returned, being either the - allocated block, or the given STR. - - -File: gmp.info, Node: Rational Arithmetic, Next: Comparing Rationals, Prev: Rational Conversions, Up: Rational Number Functions - -6.3 Arithmetic Functions -======================== - - -- Function: void mpq_add (mpq_t SUM, mpq_t ADDEND1, mpq_t ADDEND2) - Set SUM to ADDEND1 + ADDEND2. - - -- Function: void mpq_sub (mpq_t DIFFERENCE, mpq_t MINUEND, mpq_t - SUBTRAHEND) - Set DIFFERENCE to MINUEND - SUBTRAHEND. - - -- Function: void mpq_mul (mpq_t PRODUCT, mpq_t MULTIPLIER, mpq_t - MULTIPLICAND) - Set PRODUCT to MULTIPLIER times MULTIPLICAND. - - -- Function: void mpq_mul_2exp (mpq_t ROP, mpq_t OP1, mp_bitcnt_t OP2) - Set ROP to OP1 times 2 raised to OP2. - - -- Function: void mpq_div (mpq_t QUOTIENT, mpq_t DIVIDEND, mpq_t - DIVISOR) - Set QUOTIENT to DIVIDEND/DIVISOR. - - -- Function: void mpq_div_2exp (mpq_t ROP, mpq_t OP1, mp_bitcnt_t OP2) - Set ROP to OP1 divided by 2 raised to OP2. - - -- Function: void mpq_neg (mpq_t NEGATED_OPERAND, mpq_t OPERAND) - Set NEGATED_OPERAND to -OPERAND. - - -- Function: void mpq_abs (mpq_t ROP, mpq_t OP) - Set ROP to the absolute value of OP. - - -- Function: void mpq_inv (mpq_t INVERTED_NUMBER, mpq_t NUMBER) - Set INVERTED_NUMBER to 1/NUMBER. If the new denominator is zero, - this routine will divide by zero. - - -File: gmp.info, Node: Comparing Rationals, Next: Applying Integer Functions, Prev: Rational Arithmetic, Up: Rational Number Functions - -6.4 Comparison Functions -======================== - - -- Function: int mpq_cmp (mpq_t OP1, mpq_t OP2) - Compare OP1 and OP2. Return a positive value if OP1 > OP2, zero - if OP1 = OP2, and a negative value if OP1 < OP2. - - To determine if two rationals are equal, `mpq_equal' is faster than - `mpq_cmp'. - - -- Macro: int mpq_cmp_ui (mpq_t OP1, unsigned long int NUM2, unsigned - long int DEN2) - -- Macro: int mpq_cmp_si (mpq_t OP1, long int NUM2, unsigned long int - DEN2) - Compare OP1 and NUM2/DEN2. Return a positive value if OP1 > - NUM2/DEN2, zero if OP1 = NUM2/DEN2, and a negative value if OP1 < - NUM2/DEN2. - - NUM2 and DEN2 are allowed to have common factors. - - These functions are implemented as a macros and evaluate their - arguments multiple times. - - -- Macro: int mpq_sgn (mpq_t OP) - Return +1 if OP > 0, 0 if OP = 0, and -1 if OP < 0. - - This function is actually implemented as a macro. It evaluates its - arguments multiple times. - - -- Function: int mpq_equal (mpq_t OP1, mpq_t OP2) - Return non-zero if OP1 and OP2 are equal, zero if they are - non-equal. Although `mpq_cmp' can be used for the same purpose, - this function is much faster. - - -File: gmp.info, Node: Applying Integer Functions, Next: I/O of Rationals, Prev: Comparing Rationals, Up: Rational Number Functions - -6.5 Applying Integer Functions to Rationals -=========================================== - -The set of `mpq' functions is quite small. In particular, there are few -functions for either input or output. The following functions give -direct access to the numerator and denominator of an `mpq_t'. - - Note that if an assignment to the numerator and/or denominator could -take an `mpq_t' out of the canonical form described at the start of -this chapter (*note Rational Number Functions::) then -`mpq_canonicalize' must be called before any other `mpq' functions are -applied to that `mpq_t'. - - -- Macro: mpz_t mpq_numref (mpq_t OP) - -- Macro: mpz_t mpq_denref (mpq_t OP) - Return a reference to the numerator and denominator of OP, - respectively. The `mpz' functions can be used on the result of - these macros. - - -- Function: void mpq_get_num (mpz_t NUMERATOR, mpq_t RATIONAL) - -- Function: void mpq_get_den (mpz_t DENOMINATOR, mpq_t RATIONAL) - -- Function: void mpq_set_num (mpq_t RATIONAL, mpz_t NUMERATOR) - -- Function: void mpq_set_den (mpq_t RATIONAL, mpz_t DENOMINATOR) - Get or set the numerator or denominator of a rational. These - functions are equivalent to calling `mpz_set' with an appropriate - `mpq_numref' or `mpq_denref'. Direct use of `mpq_numref' or - `mpq_denref' is recommended instead of these functions. - - -File: gmp.info, Node: I/O of Rationals, Prev: Applying Integer Functions, Up: Rational Number Functions - -6.6 Input and Output Functions -============================== - -When using any of these functions, it's a good idea to include `stdio.h' -before `gmp.h', since that will allow `gmp.h' to define prototypes for -these functions. - - Passing a `NULL' pointer for a STREAM argument to any of these -functions will make them read from `stdin' and write to `stdout', -respectively. - - -- Function: size_t mpq_out_str (FILE *STREAM, int BASE, mpq_t OP) - Output OP on stdio stream STREAM, as a string of digits in base - BASE. The base may vary from 2 to 36. Output is in the form - `num/den' or if the denominator is 1 then just `num'. - - Return the number of bytes written, or if an error occurred, - return 0. - - -- Function: size_t mpq_inp_str (mpq_t ROP, FILE *STREAM, int BASE) - Read a string of digits from STREAM and convert them to a rational - in ROP. Any initial white-space characters are read and - discarded. Return the number of characters read (including white - space), or 0 if a rational could not be read. - - The input can be a fraction like `17/63' or just an integer like - `123'. Reading stops at the first character not in this form, and - white space is not permitted within the string. If the input - might not be in canonical form, then `mpq_canonicalize' must be - called (*note Rational Number Functions::). - - The BASE can be between 2 and 36, or can be 0 in which case the - leading characters of the string determine the base, `0x' or `0X' - for hexadecimal, `0' for octal, or decimal otherwise. The leading - characters are examined separately for the numerator and - denominator of a fraction, so for instance `0x10/11' is 16/11, - whereas `0x10/0x11' is 16/17. - - -File: gmp.info, Node: Floating-point Functions, Next: Low-level Functions, Prev: Rational Number Functions, Up: Top - -7 Floating-point Functions -************************** - -GMP floating point numbers are stored in objects of type `mpf_t' and -functions operating on them have an `mpf_' prefix. - - The mantissa of each float has a user-selectable precision, limited -only by available memory. Each variable has its own precision, and -that can be increased or decreased at any time. - - The exponent of each float is a fixed precision, one machine word on -most systems. In the current implementation the exponent is a count of -limbs, so for example on a 32-bit system this means a range of roughly -2^-68719476768 to 2^68719476736, or on a 64-bit system this will be -greater. Note however `mpf_get_str' can only return an exponent which -fits an `mp_exp_t' and currently `mpf_set_str' doesn't accept exponents -bigger than a `long'. - - Each variable keeps a size for the mantissa data actually in use. -This means that if a float is exactly represented in only a few bits -then only those bits will be used in a calculation, even if the -selected precision is high. - - All calculations are performed to the precision of the destination -variable. Each function is defined to calculate with "infinite -precision" followed by a truncation to the destination precision, but -of course the work done is only what's needed to determine a result -under that definition. - - The precision selected for a variable is a minimum value, GMP may -increase it a little to facilitate efficient calculation. Currently -this means rounding up to a whole limb, and then sometimes having a -further partial limb, depending on the high limb of the mantissa. But -applications shouldn't be concerned by such details. - - The mantissa in stored in binary, as might be imagined from the fact -precisions are expressed in bits. One consequence of this is that -decimal fractions like 0.1 cannot be represented exactly. The same is -true of plain IEEE `double' floats. This makes both highly unsuitable -for calculations involving money or other values that should be exact -decimal fractions. (Suitably scaled integers, or perhaps rationals, -are better choices.) - - `mpf' functions and variables have no special notion of infinity or -not-a-number, and applications must take care not to overflow the -exponent or results will be unpredictable. This might change in a -future release. - - Note that the `mpf' functions are _not_ intended as a smooth -extension to IEEE P754 arithmetic. In particular results obtained on -one computer often differ from the results on a computer with a -different word size. - -* Menu: - -* Initializing Floats:: -* Assigning Floats:: -* Simultaneous Float Init & Assign:: -* Converting Floats:: -* Float Arithmetic:: -* Float Comparison:: -* I/O of Floats:: -* Miscellaneous Float Functions:: - - -File: gmp.info, Node: Initializing Floats, Next: Assigning Floats, Prev: Floating-point Functions, Up: Floating-point Functions - -7.1 Initialization Functions -============================ - - -- Function: void mpf_set_default_prec (mp_bitcnt_t PREC) - Set the default precision to be *at least* PREC bits. All - subsequent calls to `mpf_init' will use this precision, but - previously initialized variables are unaffected. - - -- Function: mp_bitcnt_t mpf_get_default_prec (void) - Return the default precision actually used. - - An `mpf_t' object must be initialized before storing the first value -in it. The functions `mpf_init' and `mpf_init2' are used for that -purpose. - - -- Function: void mpf_init (mpf_t X) - Initialize X to 0. Normally, a variable should be initialized - once only or at least be cleared, using `mpf_clear', between - initializations. The precision of X is undefined unless a default - precision has already been established by a call to - `mpf_set_default_prec'. - - -- Function: void mpf_init2 (mpf_t X, mp_bitcnt_t PREC) - Initialize X to 0 and set its precision to be *at least* PREC - bits. Normally, a variable should be initialized once only or at - least be cleared, using `mpf_clear', between initializations. - - -- Function: void mpf_inits (mpf_t X, ...) - Initialize a NULL-terminated list of `mpf_t' variables, and set - their values to 0. The precision of the initialized variables is - undefined unless a default precision has already been established - by a call to `mpf_set_default_prec'. - - -- Function: void mpf_clear (mpf_t X) - Free the space occupied by X. Make sure to call this function for - all `mpf_t' variables when you are done with them. - - -- Function: void mpf_clears (mpf_t X, ...) - Free the space occupied by a NULL-terminated list of `mpf_t' - variables. - - Here is an example on how to initialize floating-point variables: - { - mpf_t x, y; - mpf_init (x); /* use default precision */ - mpf_init2 (y, 256); /* precision _at least_ 256 bits */ - ... - /* Unless the program is about to exit, do ... */ - mpf_clear (x); - mpf_clear (y); - } - - The following three functions are useful for changing the precision -during a calculation. A typical use would be for adjusting the -precision gradually in iterative algorithms like Newton-Raphson, making -the computation precision closely match the actual accurate part of the -numbers. - - -- Function: mp_bitcnt_t mpf_get_prec (mpf_t OP) - Return the current precision of OP, in bits. - - -- Function: void mpf_set_prec (mpf_t ROP, mp_bitcnt_t PREC) - Set the precision of ROP to be *at least* PREC bits. The value in - ROP will be truncated to the new precision. - - This function requires a call to `realloc', and so should not be - used in a tight loop. - - -- Function: void mpf_set_prec_raw (mpf_t ROP, mp_bitcnt_t PREC) - Set the precision of ROP to be *at least* PREC bits, without - changing the memory allocated. - - PREC must be no more than the allocated precision for ROP, that - being the precision when ROP was initialized, or in the most recent - `mpf_set_prec'. - - The value in ROP is unchanged, and in particular if it had a higher - precision than PREC it will retain that higher precision. New - values written to ROP will use the new PREC. - - Before calling `mpf_clear' or the full `mpf_set_prec', another - `mpf_set_prec_raw' call must be made to restore ROP to its original - allocated precision. Failing to do so will have unpredictable - results. - - `mpf_get_prec' can be used before `mpf_set_prec_raw' to get the - original allocated precision. After `mpf_set_prec_raw' it - reflects the PREC value set. - - `mpf_set_prec_raw' is an efficient way to use an `mpf_t' variable - at different precisions during a calculation, perhaps to gradually - increase precision in an iteration, or just to use various - different precisions for different purposes during a calculation. - - -File: gmp.info, Node: Assigning Floats, Next: Simultaneous Float Init & Assign, Prev: Initializing Floats, Up: Floating-point Functions - -7.2 Assignment Functions -======================== - -These functions assign new values to already initialized floats (*note -Initializing Floats::). - - -- Function: void mpf_set (mpf_t ROP, mpf_t OP) - -- Function: void mpf_set_ui (mpf_t ROP, unsigned long int OP) - -- Function: void mpf_set_si (mpf_t ROP, signed long int OP) - -- Function: void mpf_set_d (mpf_t ROP, double OP) - -- Function: void mpf_set_z (mpf_t ROP, mpz_t OP) - -- Function: void mpf_set_q (mpf_t ROP, mpq_t OP) - Set the value of ROP from OP. - - -- Function: int mpf_set_str (mpf_t ROP, char *STR, int BASE) - Set the value of ROP from the string in STR. The string is of the - form `M@N' or, if the base is 10 or less, alternatively `MeN'. - `M' is the mantissa and `N' is the exponent. The mantissa is - always in the specified base. The exponent is either in the - specified base or, if BASE is negative, in decimal. The decimal - point expected is taken from the current locale, on systems - providing `localeconv'. - - The argument BASE may be in the ranges 2 to 62, or -62 to -2. - Negative values are used to specify that the exponent is in - decimal. - - For bases up to 36, case is ignored; upper-case and lower-case - letters have the same value; for bases 37 to 62, upper-case letter - represent the usual 10..35 while lower-case letter represent - 36..61. - - Unlike the corresponding `mpz' function, the base will not be - determined from the leading characters of the string if BASE is 0. - This is so that numbers like `0.23' are not interpreted as octal. - - White space is allowed in the string, and is simply ignored. - [This is not really true; white-space is ignored in the beginning - of the string and within the mantissa, but not in other places, - such as after a minus sign or in the exponent. We are considering - changing the definition of this function, making it fail when - there is any white-space in the input, since that makes a lot of - sense. Please tell us your opinion about this change. Do you - really want it to accept "3 14" as meaning 314 as it does now?] - - This function returns 0 if the entire string is a valid number in - base BASE. Otherwise it returns -1. - - -- Function: void mpf_swap (mpf_t ROP1, mpf_t ROP2) - Swap ROP1 and ROP2 efficiently. Both the values and the - precisions of the two variables are swapped. - - -File: gmp.info, Node: Simultaneous Float Init & Assign, Next: Converting Floats, Prev: Assigning Floats, Up: Floating-point Functions - -7.3 Combined Initialization and Assignment Functions -==================================================== - -For convenience, GMP provides a parallel series of initialize-and-set -functions which initialize the output and then store the value there. -These functions' names have the form `mpf_init_set...' - - Once the float has been initialized by any of the `mpf_init_set...' -functions, it can be used as the source or destination operand for the -ordinary float functions. Don't use an initialize-and-set function on -a variable already initialized! - - -- Function: void mpf_init_set (mpf_t ROP, mpf_t OP) - -- Function: void mpf_init_set_ui (mpf_t ROP, unsigned long int OP) - -- Function: void mpf_init_set_si (mpf_t ROP, signed long int OP) - -- Function: void mpf_init_set_d (mpf_t ROP, double OP) - Initialize ROP and set its value from OP. - - The precision of ROP will be taken from the active default - precision, as set by `mpf_set_default_prec'. - - -- Function: int mpf_init_set_str (mpf_t ROP, char *STR, int BASE) - Initialize ROP and set its value from the string in STR. See - `mpf_set_str' above for details on the assignment operation. - - Note that ROP is initialized even if an error occurs. (I.e., you - have to call `mpf_clear' for it.) - - The precision of ROP will be taken from the active default - precision, as set by `mpf_set_default_prec'. - - -File: gmp.info, Node: Converting Floats, Next: Float Arithmetic, Prev: Simultaneous Float Init & Assign, Up: Floating-point Functions - -7.4 Conversion Functions -======================== - - -- Function: double mpf_get_d (mpf_t OP) - Convert OP to a `double', truncating if necessary (ie. rounding - towards zero). - - If the exponent in OP is too big or too small to fit a `double' - then the result is system dependent. For too big an infinity is - returned when available. For too small 0.0 is normally returned. - Hardware overflow, underflow and denorm traps may or may not occur. - - -- Function: double mpf_get_d_2exp (signed long int *EXP, mpf_t OP) - Convert OP to a `double', truncating if necessary (ie. rounding - towards zero), and with an exponent returned separately. - - The return value is in the range 0.5<=abs(D)<1 and the exponent is - stored to `*EXP'. D * 2^EXP is the (truncated) OP value. If OP - is zero, the return is 0.0 and 0 is stored to `*EXP'. - - This is similar to the standard C `frexp' function (*note - Normalization Functions: (libc)Normalization Functions.). - - -- Function: long mpf_get_si (mpf_t OP) - -- Function: unsigned long mpf_get_ui (mpf_t OP) - Convert OP to a `long' or `unsigned long', truncating any fraction - part. If OP is too big for the return type, the result is - undefined. - - See also `mpf_fits_slong_p' and `mpf_fits_ulong_p' (*note - Miscellaneous Float Functions::). - - -- Function: char * mpf_get_str (char *STR, mp_exp_t *EXPPTR, int - BASE, size_t N_DIGITS, mpf_t OP) - Convert OP to a string of digits in base BASE. The base argument - may vary from 2 to 62 or from -2 to -36. Up to N_DIGITS digits - will be generated. Trailing zeros are not returned. No more - digits than can be accurately represented by OP are ever - generated. If N_DIGITS is 0 then that accurate maximum number of - digits are generated. - - For BASE in the range 2..36, digits and lower-case letters are - used; for -2..-36, digits and upper-case letters are used; for - 37..62, digits, upper-case letters, and lower-case letters (in - that significance order) are used. - - If STR is `NULL', the result string is allocated using the current - allocation function (*note Custom Allocation::). The block will be - `strlen(str)+1' bytes, that being exactly enough for the string and - null-terminator. - - If STR is not `NULL', it should point to a block of N_DIGITS + 2 - bytes, that being enough for the mantissa, a possible minus sign, - and a null-terminator. When N_DIGITS is 0 to get all significant - digits, an application won't be able to know the space required, - and STR should be `NULL' in that case. - - The generated string is a fraction, with an implicit radix point - immediately to the left of the first digit. The applicable - exponent is written through the EXPPTR pointer. For example, the - number 3.1416 would be returned as string "31416" and exponent 1. - - When OP is zero, an empty string is produced and the exponent - returned is 0. - - A pointer to the result string is returned, being either the - allocated block or the given STR. - - -File: gmp.info, Node: Float Arithmetic, Next: Float Comparison, Prev: Converting Floats, Up: Floating-point Functions - -7.5 Arithmetic Functions -======================== - - -- Function: void mpf_add (mpf_t ROP, mpf_t OP1, mpf_t OP2) - -- Function: void mpf_add_ui (mpf_t ROP, mpf_t OP1, unsigned long int - OP2) - Set ROP to OP1 + OP2. - - -- Function: void mpf_sub (mpf_t ROP, mpf_t OP1, mpf_t OP2) - -- Function: void mpf_ui_sub (mpf_t ROP, unsigned long int OP1, mpf_t - OP2) - -- Function: void mpf_sub_ui (mpf_t ROP, mpf_t OP1, unsigned long int - OP2) - Set ROP to OP1 - OP2. - - -- Function: void mpf_mul (mpf_t ROP, mpf_t OP1, mpf_t OP2) - -- Function: void mpf_mul_ui (mpf_t ROP, mpf_t OP1, unsigned long int - OP2) - Set ROP to OP1 times OP2. - - Division is undefined if the divisor is zero, and passing a zero -divisor to the divide functions will make these functions intentionally -divide by zero. This lets the user handle arithmetic exceptions in -these functions in the same manner as other arithmetic exceptions. - - -- Function: void mpf_div (mpf_t ROP, mpf_t OP1, mpf_t OP2) - -- Function: void mpf_ui_div (mpf_t ROP, unsigned long int OP1, mpf_t - OP2) - -- Function: void mpf_div_ui (mpf_t ROP, mpf_t OP1, unsigned long int - OP2) - Set ROP to OP1/OP2. - - -- Function: void mpf_sqrt (mpf_t ROP, mpf_t OP) - -- Function: void mpf_sqrt_ui (mpf_t ROP, unsigned long int OP) - Set ROP to the square root of OP. - - -- Function: void mpf_pow_ui (mpf_t ROP, mpf_t OP1, unsigned long int - OP2) - Set ROP to OP1 raised to the power OP2. - - -- Function: void mpf_neg (mpf_t ROP, mpf_t OP) - Set ROP to -OP. - - -- Function: void mpf_abs (mpf_t ROP, mpf_t OP) - Set ROP to the absolute value of OP. - - -- Function: void mpf_mul_2exp (mpf_t ROP, mpf_t OP1, mp_bitcnt_t OP2) - Set ROP to OP1 times 2 raised to OP2. - - -- Function: void mpf_div_2exp (mpf_t ROP, mpf_t OP1, mp_bitcnt_t OP2) - Set ROP to OP1 divided by 2 raised to OP2. - - -File: gmp.info, Node: Float Comparison, Next: I/O of Floats, Prev: Float Arithmetic, Up: Floating-point Functions - -7.6 Comparison Functions -======================== - - -- Function: int mpf_cmp (mpf_t OP1, mpf_t OP2) - -- Function: int mpf_cmp_d (mpf_t OP1, double OP2) - -- Function: int mpf_cmp_ui (mpf_t OP1, unsigned long int OP2) - -- Function: int mpf_cmp_si (mpf_t OP1, signed long int OP2) - Compare OP1 and OP2. Return a positive value if OP1 > OP2, zero - if OP1 = OP2, and a negative value if OP1 < OP2. - - `mpf_cmp_d' can be called with an infinity, but results are - undefined for a NaN. - - -- Function: int mpf_eq (mpf_t OP1, mpf_t OP2, mp_bitcnt_t op3) - Return non-zero if the first OP3 bits of OP1 and OP2 are equal, - zero otherwise. I.e., test if OP1 and OP2 are approximately equal. - - Caution 1: All version of GMP up to version 4.2.4 compared just - whole limbs, meaning sometimes more than OP3 bits, sometimes fewer. - - Caution 2: This function will consider XXX11...111 and XX100...000 - different, even if ... is replaced by a semi-infinite number of - bits. Such numbers are really just one ulp off, and should be - considered equal. - - -- Function: void mpf_reldiff (mpf_t ROP, mpf_t OP1, mpf_t OP2) - Compute the relative difference between OP1 and OP2 and store the - result in ROP. This is abs(OP1-OP2)/OP1. - - -- Macro: int mpf_sgn (mpf_t OP) - Return +1 if OP > 0, 0 if OP = 0, and -1 if OP < 0. - - This function is actually implemented as a macro. It evaluates - its arguments multiple times. - - -File: gmp.info, Node: I/O of Floats, Next: Miscellaneous Float Functions, Prev: Float Comparison, Up: Floating-point Functions - -7.7 Input and Output Functions -============================== - -Functions that perform input from a stdio stream, and functions that -output to a stdio stream. Passing a `NULL' pointer for a STREAM -argument to any of these functions will make them read from `stdin' and -write to `stdout', respectively. - - When using any of these functions, it is a good idea to include -`stdio.h' before `gmp.h', since that will allow `gmp.h' to define -prototypes for these functions. - - -- Function: size_t mpf_out_str (FILE *STREAM, int BASE, size_t - N_DIGITS, mpf_t OP) - Print OP to STREAM, as a string of digits. Return the number of - bytes written, or if an error occurred, return 0. - - The mantissa is prefixed with an `0.' and is in the given BASE, - which may vary from 2 to 62 or from -2 to -36. An exponent is - then printed, separated by an `e', or if the base is greater than - 10 then by an `@'. The exponent is always in decimal. The - decimal point follows the current locale, on systems providing - `localeconv'. - - For BASE in the range 2..36, digits and lower-case letters are - used; for -2..-36, digits and upper-case letters are used; for - 37..62, digits, upper-case letters, and lower-case letters (in - that significance order) are used. - - Up to N_DIGITS will be printed from the mantissa, except that no - more digits than are accurately representable by OP will be - printed. N_DIGITS can be 0 to select that accurate maximum. - - -- Function: size_t mpf_inp_str (mpf_t ROP, FILE *STREAM, int BASE) - Read a string in base BASE from STREAM, and put the read float in - ROP. The string is of the form `M@N' or, if the base is 10 or - less, alternatively `MeN'. `M' is the mantissa and `N' is the - exponent. The mantissa is always in the specified base. The - exponent is either in the specified base or, if BASE is negative, - in decimal. The decimal point expected is taken from the current - locale, on systems providing `localeconv'. - - The argument BASE may be in the ranges 2 to 36, or -36 to -2. - Negative values are used to specify that the exponent is in - decimal. - - Unlike the corresponding `mpz' function, the base will not be - determined from the leading characters of the string if BASE is 0. - This is so that numbers like `0.23' are not interpreted as octal. - - Return the number of bytes read, or if an error occurred, return 0. - - -File: gmp.info, Node: Miscellaneous Float Functions, Prev: I/O of Floats, Up: Floating-point Functions - -7.8 Miscellaneous Functions -=========================== - - -- Function: void mpf_ceil (mpf_t ROP, mpf_t OP) - -- Function: void mpf_floor (mpf_t ROP, mpf_t OP) - -- Function: void mpf_trunc (mpf_t ROP, mpf_t OP) - Set ROP to OP rounded to an integer. `mpf_ceil' rounds to the - next higher integer, `mpf_floor' to the next lower, and `mpf_trunc' - to the integer towards zero. - - -- Function: int mpf_integer_p (mpf_t OP) - Return non-zero if OP is an integer. - - -- Function: int mpf_fits_ulong_p (mpf_t OP) - -- Function: int mpf_fits_slong_p (mpf_t OP) - -- Function: int mpf_fits_uint_p (mpf_t OP) - -- Function: int mpf_fits_sint_p (mpf_t OP) - -- Function: int mpf_fits_ushort_p (mpf_t OP) - -- Function: int mpf_fits_sshort_p (mpf_t OP) - Return non-zero if OP would fit in the respective C data type, when - truncated to an integer. - - -- Function: void mpf_urandomb (mpf_t ROP, gmp_randstate_t STATE, - mp_bitcnt_t NBITS) - Generate a uniformly distributed random float in ROP, such that 0 - <= ROP < 1, with NBITS significant bits in the mantissa. - - The variable STATE must be initialized by calling one of the - `gmp_randinit' functions (*Note Random State Initialization::) - before invoking this function. - - -- Function: void mpf_random2 (mpf_t ROP, mp_size_t MAX_SIZE, mp_exp_t - EXP) - Generate a random float of at most MAX_SIZE limbs, with long - strings of zeros and ones in the binary representation. The - exponent of the number is in the interval -EXP to EXP (in limbs). - This function is useful for testing functions and algorithms, - since these kind of random numbers have proven to be more likely - to trigger corner-case bugs. Negative random numbers are - generated when MAX_SIZE is negative. - - -File: gmp.info, Node: Low-level Functions, Next: Random Number Functions, Prev: Floating-point Functions, Up: Top - -8 Low-level Functions -********************* - -This chapter describes low-level GMP functions, used to implement the -high-level GMP functions, but also intended for time-critical user code. - - These functions start with the prefix `mpn_'. - - The `mpn' functions are designed to be as fast as possible, *not* to -provide a coherent calling interface. The different functions have -somewhat similar interfaces, but there are variations that make them -hard to use. These functions do as little as possible apart from the -real multiple precision computation, so that no time is spent on things -that not all callers need. - - A source operand is specified by a pointer to the least significant -limb and a limb count. A destination operand is specified by just a -pointer. It is the responsibility of the caller to ensure that the -destination has enough space for storing the result. - - With this way of specifying operands, it is possible to perform -computations on subranges of an argument, and store the result into a -subrange of a destination. - - A common requirement for all functions is that each source area -needs at least one limb. No size argument may be zero. Unless -otherwise stated, in-place operations are allowed where source and -destination are the same, but not where they only partly overlap. - - The `mpn' functions are the base for the implementation of the -`mpz_', `mpf_', and `mpq_' functions. - - This example adds the number beginning at S1P and the number -beginning at S2P and writes the sum at DESTP. All areas have N limbs. - - cy = mpn_add_n (destp, s1p, s2p, n) - - It should be noted that the `mpn' functions make no attempt to -identify high or low zero limbs on their operands, or other special -forms. On random data such cases will be unlikely and it'd be wasteful -for every function to check every time. An application knowing -something about its data can take steps to trim or perhaps split its -calculations. - - -In the notation used below, a source operand is identified by the -pointer to the least significant limb, and the limb count in braces. -For example, {S1P, S1N}. - - -- Function: mp_limb_t mpn_add_n (mp_limb_t *RP, const mp_limb_t *S1P, - const mp_limb_t *S2P, mp_size_t N) - Add {S1P, N} and {S2P, N}, and write the N least significant limbs - of the result to RP. Return carry, either 0 or 1. - - This is the lowest-level function for addition. It is the - preferred function for addition, since it is written in assembly - for most CPUs. For addition of a variable to itself (i.e., S1P - equals S2P) use `mpn_lshift' with a count of 1 for optimal speed. - - -- Function: mp_limb_t mpn_add_1 (mp_limb_t *RP, const mp_limb_t *S1P, - mp_size_t N, mp_limb_t S2LIMB) - Add {S1P, N} and S2LIMB, and write the N least significant limbs - of the result to RP. Return carry, either 0 or 1. - - -- Function: mp_limb_t mpn_add (mp_limb_t *RP, const mp_limb_t *S1P, - mp_size_t S1N, const mp_limb_t *S2P, mp_size_t S2N) - Add {S1P, S1N} and {S2P, S2N}, and write the S1N least significant - limbs of the result to RP. Return carry, either 0 or 1. - - This function requires that S1N is greater than or equal to S2N. - - -- Function: mp_limb_t mpn_sub_n (mp_limb_t *RP, const mp_limb_t *S1P, - const mp_limb_t *S2P, mp_size_t N) - Subtract {S2P, N} from {S1P, N}, and write the N least significant - limbs of the result to RP. Return borrow, either 0 or 1. - - This is the lowest-level function for subtraction. It is the - preferred function for subtraction, since it is written in - assembly for most CPUs. - - -- Function: mp_limb_t mpn_sub_1 (mp_limb_t *RP, const mp_limb_t *S1P, - mp_size_t N, mp_limb_t S2LIMB) - Subtract S2LIMB from {S1P, N}, and write the N least significant - limbs of the result to RP. Return borrow, either 0 or 1. - - -- Function: mp_limb_t mpn_sub (mp_limb_t *RP, const mp_limb_t *S1P, - mp_size_t S1N, const mp_limb_t *S2P, mp_size_t S2N) - Subtract {S2P, S2N} from {S1P, S1N}, and write the S1N least - significant limbs of the result to RP. Return borrow, either 0 or - 1. - - This function requires that S1N is greater than or equal to S2N. - - -- Function: void mpn_neg (mp_limb_t *RP, const mp_limb_t *SP, - mp_size_t N) - Perform the negation of {SP, N}, and write the result to {RP, N}. - Return carry-out. - - -- Function: void mpn_mul_n (mp_limb_t *RP, const mp_limb_t *S1P, - const mp_limb_t *S2P, mp_size_t N) - Multiply {S1P, N} and {S2P, N}, and write the 2*N-limb result to - RP. - - The destination has to have space for 2*N limbs, even if the - product's most significant limb is zero. No overlap is permitted - between the destination and either source. - - If the two input operands are the same, use `mpn_sqr'. - - -- Function: mp_limb_t mpn_mul (mp_limb_t *RP, const mp_limb_t *S1P, - mp_size_t S1N, const mp_limb_t *S2P, mp_size_t S2N) - Multiply {S1P, S1N} and {S2P, S2N}, and write the (S1N+S2N)-limb - result to RP. Return the most significant limb of the result. - - The destination has to have space for S1N + S2N limbs, even if the - product's most significant limb is zero. No overlap is permitted - between the destination and either source. - - This function requires that S1N is greater than or equal to S2N. - - -- Function: void mpn_sqr (mp_limb_t *RP, const mp_limb_t *S1P, - mp_size_t N) - Compute the square of {S1P, N} and write the 2*N-limb result to RP. - - The destination has to have space for 2*N limbs, even if the - result's most significant limb is zero. No overlap is permitted - between the destination and the source. - - -- Function: mp_limb_t mpn_mul_1 (mp_limb_t *RP, const mp_limb_t *S1P, - mp_size_t N, mp_limb_t S2LIMB) - Multiply {S1P, N} by S2LIMB, and write the N least significant - limbs of the product to RP. Return the most significant limb of - the product. {S1P, N} and {RP, N} are allowed to overlap provided - RP <= S1P. - - This is a low-level function that is a building block for general - multiplication as well as other operations in GMP. It is written - in assembly for most CPUs. - - Don't call this function if S2LIMB is a power of 2; use - `mpn_lshift' with a count equal to the logarithm of S2LIMB - instead, for optimal speed. - - -- Function: mp_limb_t mpn_addmul_1 (mp_limb_t *RP, const mp_limb_t - *S1P, mp_size_t N, mp_limb_t S2LIMB) - Multiply {S1P, N} and S2LIMB, and add the N least significant - limbs of the product to {RP, N} and write the result to RP. - Return the most significant limb of the product, plus carry-out - from the addition. - - This is a low-level function that is a building block for general - multiplication as well as other operations in GMP. It is written - in assembly for most CPUs. - - -- Function: mp_limb_t mpn_submul_1 (mp_limb_t *RP, const mp_limb_t - *S1P, mp_size_t N, mp_limb_t S2LIMB) - Multiply {S1P, N} and S2LIMB, and subtract the N least significant - limbs of the product from {RP, N} and write the result to RP. - Return the most significant limb of the product, plus borrow-out - from the subtraction. - - This is a low-level function that is a building block for general - multiplication and division as well as other operations in GMP. - It is written in assembly for most CPUs. - - -- Function: void mpn_tdiv_qr (mp_limb_t *QP, mp_limb_t *RP, mp_size_t - QXN, const mp_limb_t *NP, mp_size_t NN, const mp_limb_t *DP, - mp_size_t DN) - Divide {NP, NN} by {DP, DN} and put the quotient at {QP, NN-DN+1} - and the remainder at {RP, DN}. The quotient is rounded towards 0. - - No overlap is permitted between arguments, except that NP might - equal RP. The dividend size NN must be greater than or equal to - divisor size DN. The most significant limb of the divisor must be - non-zero. The QXN operand must be zero. - - -- Function: mp_limb_t mpn_divrem (mp_limb_t *R1P, mp_size_t QXN, - mp_limb_t *RS2P, mp_size_t RS2N, const mp_limb_t *S3P, - mp_size_t S3N) - [This function is obsolete. Please call `mpn_tdiv_qr' instead for - best performance.] - - Divide {RS2P, RS2N} by {S3P, S3N}, and write the quotient at R1P, - with the exception of the most significant limb, which is - returned. The remainder replaces the dividend at RS2P; it will be - S3N limbs long (i.e., as many limbs as the divisor). - - In addition to an integer quotient, QXN fraction limbs are - developed, and stored after the integral limbs. For most usages, - QXN will be zero. - - It is required that RS2N is greater than or equal to S3N. It is - required that the most significant bit of the divisor is set. - - If the quotient is not needed, pass RS2P + S3N as R1P. Aside from - that special case, no overlap between arguments is permitted. - - Return the most significant limb of the quotient, either 0 or 1. - - The area at R1P needs to be RS2N - S3N + QXN limbs large. - - -- Function: mp_limb_t mpn_divrem_1 (mp_limb_t *R1P, mp_size_t QXN, - mp_limb_t *S2P, mp_size_t S2N, mp_limb_t S3LIMB) - -- Macro: mp_limb_t mpn_divmod_1 (mp_limb_t *R1P, mp_limb_t *S2P, - mp_size_t S2N, mp_limb_t S3LIMB) - Divide {S2P, S2N} by S3LIMB, and write the quotient at R1P. - Return the remainder. - - The integer quotient is written to {R1P+QXN, S2N} and in addition - QXN fraction limbs are developed and written to {R1P, QXN}. - Either or both S2N and QXN can be zero. For most usages, QXN will - be zero. - - `mpn_divmod_1' exists for upward source compatibility and is - simply a macro calling `mpn_divrem_1' with a QXN of 0. - - The areas at R1P and S2P have to be identical or completely - separate, not partially overlapping. - - -- Function: mp_limb_t mpn_divmod (mp_limb_t *R1P, mp_limb_t *RS2P, - mp_size_t RS2N, const mp_limb_t *S3P, mp_size_t S3N) - [This function is obsolete. Please call `mpn_tdiv_qr' instead for - best performance.] - - -- Macro: mp_limb_t mpn_divexact_by3 (mp_limb_t *RP, mp_limb_t *SP, - mp_size_t N) - -- Function: mp_limb_t mpn_divexact_by3c (mp_limb_t *RP, mp_limb_t - *SP, mp_size_t N, mp_limb_t CARRY) - Divide {SP, N} by 3, expecting it to divide exactly, and writing - the result to {RP, N}. If 3 divides exactly, the return value is - zero and the result is the quotient. If not, the return value is - non-zero and the result won't be anything useful. - - `mpn_divexact_by3c' takes an initial carry parameter, which can be - the return value from a previous call, so a large calculation can - be done piece by piece from low to high. `mpn_divexact_by3' is - simply a macro calling `mpn_divexact_by3c' with a 0 carry - parameter. - - These routines use a multiply-by-inverse and will be faster than - `mpn_divrem_1' on CPUs with fast multiplication but slow division. - - The source a, result q, size n, initial carry i, and return value - c satisfy c*b^n + a-i = 3*q, where b=2^GMP_NUMB_BITS. The return - c is always 0, 1 or 2, and the initial carry i must also be 0, 1 - or 2 (these are both borrows really). When c=0 clearly q=(a-i)/3. - When c!=0, the remainder (a-i) mod 3 is given by 3-c, because b - == 1 mod 3 (when `mp_bits_per_limb' is even, which is always so - currently). - - -- Function: mp_limb_t mpn_mod_1 (mp_limb_t *S1P, mp_size_t S1N, - mp_limb_t S2LIMB) - Divide {S1P, S1N} by S2LIMB, and return the remainder. S1N can be - zero. - - -- Function: mp_limb_t mpn_lshift (mp_limb_t *RP, const mp_limb_t *SP, - mp_size_t N, unsigned int COUNT) - Shift {SP, N} left by COUNT bits, and write the result to {RP, N}. - The bits shifted out at the left are returned in the least - significant COUNT bits of the return value (the rest of the return - value is zero). - - COUNT must be in the range 1 to mp_bits_per_limb-1. The regions - {SP, N} and {RP, N} may overlap, provided RP >= SP. - - This function is written in assembly for most CPUs. - - -- Function: mp_limb_t mpn_rshift (mp_limb_t *RP, const mp_limb_t *SP, - mp_size_t N, unsigned int COUNT) - Shift {SP, N} right by COUNT bits, and write the result to {RP, - N}. The bits shifted out at the right are returned in the most - significant COUNT bits of the return value (the rest of the return - value is zero). - - COUNT must be in the range 1 to mp_bits_per_limb-1. The regions - {SP, N} and {RP, N} may overlap, provided RP <= SP. - - This function is written in assembly for most CPUs. - - -- Function: int mpn_cmp (const mp_limb_t *S1P, const mp_limb_t *S2P, - mp_size_t N) - Compare {S1P, N} and {S2P, N} and return a positive value if S1 > - S2, 0 if they are equal, or a negative value if S1 < S2. - - -- Function: mp_size_t mpn_gcd (mp_limb_t *RP, mp_limb_t *XP, - mp_size_t XN, mp_limb_t *YP, mp_size_t YN) - Set {RP, RETVAL} to the greatest common divisor of {XP, XN} and - {YP, YN}. The result can be up to YN limbs, the return value is - the actual number produced. Both source operands are destroyed. - - {XP, XN} must have at least as many bits as {YP, YN}. {YP, YN} - must be odd. Both operands must have non-zero most significant - limbs. No overlap is permitted between {XP, XN} and {YP, YN}. - - -- Function: mp_limb_t mpn_gcd_1 (const mp_limb_t *XP, mp_size_t XN, - mp_limb_t YLIMB) - Return the greatest common divisor of {XP, XN} and YLIMB. Both - operands must be non-zero. - - -- Function: mp_size_t mpn_gcdext (mp_limb_t *GP, mp_limb_t *SP, - mp_size_t *SN, mp_limb_t *XP, mp_size_t XN, mp_limb_t *YP, - mp_size_t YN) - Let U be defined by {XP, XN} and let V be defined by {YP, YN}. - - Compute the greatest common divisor G of U and V. Compute a - cofactor S such that G = US + VT. The second cofactor T is not - computed but can easily be obtained from (G - U*S) / V (the - division will be exact). It is required that U >= V > 0. - - S satisfies S = 1 or abs(S) < V / (2 G). S = 0 if and only if V - divides U (i.e., G = V). - - Store G at GP and let the return value define its limb count. - Store S at SP and let |*SN| define its limb count. S can be - negative; when this happens *SN will be negative. The areas at GP - and SP should each have room for XN+1 limbs. - - The areas {XP, XN+1} and {YP, YN+1} are destroyed (i.e. the input - operands plus an extra limb past the end of each). - - Compatibility note: GMP 4.3.0 and 4.3.1 defined S less strictly. - Earlier as well as later GMP releases define S as described here. - - -- Function: mp_size_t mpn_sqrtrem (mp_limb_t *R1P, mp_limb_t *R2P, - const mp_limb_t *SP, mp_size_t N) - Compute the square root of {SP, N} and put the result at {R1P, - ceil(N/2)} and the remainder at {R2P, RETVAL}. R2P needs space - for N limbs, but the return value indicates how many are produced. - - The most significant limb of {SP, N} must be non-zero. The areas - {R1P, ceil(N/2)} and {SP, N} must be completely separate. The - areas {R2P, N} and {SP, N} must be either identical or completely - separate. - - If the remainder is not wanted then R2P can be `NULL', and in this - case the return value is zero or non-zero according to whether the - remainder would have been zero or non-zero. - - A return value of zero indicates a perfect square. See also - `mpz_perfect_square_p'. - - -- Function: mp_size_t mpn_get_str (unsigned char *STR, int BASE, - mp_limb_t *S1P, mp_size_t S1N) - Convert {S1P, S1N} to a raw unsigned char array at STR in base - BASE, and return the number of characters produced. There may be - leading zeros in the string. The string is not in ASCII; to - convert it to printable format, add the ASCII codes for `0' or - `A', depending on the base and range. BASE can vary from 2 to 256. - - The most significant limb of the input {S1P, S1N} must be - non-zero. The input {S1P, S1N} is clobbered, except when BASE is - a power of 2, in which case it's unchanged. - - The area at STR has to have space for the largest possible number - represented by a S1N long limb array, plus one extra character. - - -- Function: mp_size_t mpn_set_str (mp_limb_t *RP, const unsigned char - *STR, size_t STRSIZE, int BASE) - Convert bytes {STR,STRSIZE} in the given BASE to limbs at RP. - - STR[0] is the most significant byte and STR[STRSIZE-1] is the - least significant. Each byte should be a value in the range 0 to - BASE-1, not an ASCII character. BASE can vary from 2 to 256. - - The return value is the number of limbs written to RP. If the most - significant input byte is non-zero then the high limb at RP will be - non-zero, and only that exact number of limbs will be required - there. - - If the most significant input byte is zero then there may be high - zero limbs written to RP and included in the return value. - - STRSIZE must be at least 1, and no overlap is permitted between - {STR,STRSIZE} and the result at RP. - - -- Function: mp_bitcnt_t mpn_scan0 (const mp_limb_t *S1P, mp_bitcnt_t - BIT) - Scan S1P from bit position BIT for the next clear bit. - - It is required that there be a clear bit within the area at S1P at - or beyond bit position BIT, so that the function has something to - return. - - -- Function: mp_bitcnt_t mpn_scan1 (const mp_limb_t *S1P, mp_bitcnt_t - BIT) - Scan S1P from bit position BIT for the next set bit. - - It is required that there be a set bit within the area at S1P at or - beyond bit position BIT, so that the function has something to - return. - - -- Function: void mpn_random (mp_limb_t *R1P, mp_size_t R1N) - -- Function: void mpn_random2 (mp_limb_t *R1P, mp_size_t R1N) - Generate a random number of length R1N and store it at R1P. The - most significant limb is always non-zero. `mpn_random' generates - uniformly distributed limb data, `mpn_random2' generates long - strings of zeros and ones in the binary representation. - - `mpn_random2' is intended for testing the correctness of the `mpn' - routines. - - -- Function: mp_bitcnt_t mpn_popcount (const mp_limb_t *S1P, mp_size_t - N) - Count the number of set bits in {S1P, N}. - - -- Function: mp_bitcnt_t mpn_hamdist (const mp_limb_t *S1P, const - mp_limb_t *S2P, mp_size_t N) - Compute the hamming distance between {S1P, N} and {S2P, N}, which - is the number of bit positions where the two operands have - different bit values. - - -- Function: int mpn_perfect_square_p (const mp_limb_t *S1P, mp_size_t - N) - Return non-zero iff {S1P, N} is a perfect square. - - -- Function: void mpn_and_n (mp_limb_t *RP, const mp_limb_t *S1P, - const mp_limb_t *S2P, mp_size_t N) - Perform the bitwise logical and of {S1P, N} and {S2P, N}, and - write the result to {RP, N}. - - -- Function: void mpn_ior_n (mp_limb_t *RP, const mp_limb_t *S1P, - const mp_limb_t *S2P, mp_size_t N) - Perform the bitwise logical inclusive or of {S1P, N} and {S2P, N}, - and write the result to {RP, N}. - - -- Function: void mpn_xor_n (mp_limb_t *RP, const mp_limb_t *S1P, - const mp_limb_t *S2P, mp_size_t N) - Perform the bitwise logical exclusive or of {S1P, N} and {S2P, N}, - and write the result to {RP, N}. - - -- Function: void mpn_andn_n (mp_limb_t *RP, const mp_limb_t *S1P, - const mp_limb_t *S2P, mp_size_t N) - Perform the bitwise logical and of {S1P, N} and the bitwise - complement of {S2P, N}, and write the result to {RP, N}. - - -- Function: void mpn_iorn_n (mp_limb_t *RP, const mp_limb_t *S1P, - const mp_limb_t *S2P, mp_size_t N) - Perform the bitwise logical inclusive or of {S1P, N} and the - bitwise complement of {S2P, N}, and write the result to {RP, N}. - - -- Function: void mpn_nand_n (mp_limb_t *RP, const mp_limb_t *S1P, - const mp_limb_t *S2P, mp_size_t N) - Perform the bitwise logical and of {S1P, N} and {S2P, N}, and - write the bitwise complement of the result to {RP, N}. - - -- Function: void mpn_nior_n (mp_limb_t *RP, const mp_limb_t *S1P, - const mp_limb_t *S2P, mp_size_t N) - Perform the bitwise logical inclusive or of {S1P, N} and {S2P, N}, - and write the bitwise complement of the result to {RP, N}. - - -- Function: void mpn_xnor_n (mp_limb_t *RP, const mp_limb_t *S1P, - const mp_limb_t *S2P, mp_size_t N) - Perform the bitwise logical exclusive or of {S1P, N} and {S2P, N}, - and write the bitwise complement of the result to {RP, N}. - - -- Function: void mpn_com (mp_limb_t *RP, const mp_limb_t *SP, - mp_size_t N) - Perform the bitwise complement of {SP, N}, and write the result to - {RP, N}. - - -- Function: void mpn_copyi (mp_limb_t *RP, const mp_limb_t *S1P, - mp_size_t N) - Copy from {S1P, N} to {RP, N}, increasingly. - - -- Function: void mpn_copyd (mp_limb_t *RP, const mp_limb_t *S1P, - mp_size_t N) - Copy from {S1P, N} to {RP, N}, decreasingly. - - -- Function: void mpn_zero (mp_limb_t *RP, mp_size_t N) - Zero {RP, N}. - - -8.1 Nails -========= - -*Everything in this section is highly experimental and may disappear or -be subject to incompatible changes in a future version of GMP.* - - Nails are an experimental feature whereby a few bits are left unused -at the top of each `mp_limb_t'. This can significantly improve carry -handling on some processors. - - All the `mpn' functions accepting limb data will expect the nail -bits to be zero on entry, and will return data with the nails similarly -all zero. This applies both to limb vectors and to single limb -arguments. - - Nails can be enabled by configuring with `--enable-nails'. By -default the number of bits will be chosen according to what suits the -host processor, but a particular number can be selected with -`--enable-nails=N'. - - At the mpn level, a nail build is neither source nor binary -compatible with a non-nail build, strictly speaking. But programs -acting on limbs only through the mpn functions are likely to work -equally well with either build, and judicious use of the definitions -below should make any program compatible with either build, at the -source level. - - For the higher level routines, meaning `mpz' etc, a nail build -should be fully source and binary compatible with a non-nail build. - - -- Macro: GMP_NAIL_BITS - -- Macro: GMP_NUMB_BITS - -- Macro: GMP_LIMB_BITS - `GMP_NAIL_BITS' is the number of nail bits, or 0 when nails are - not in use. `GMP_NUMB_BITS' is the number of data bits in a limb. - `GMP_LIMB_BITS' is the total number of bits in an `mp_limb_t'. In - all cases - - GMP_LIMB_BITS == GMP_NAIL_BITS + GMP_NUMB_BITS - - -- Macro: GMP_NAIL_MASK - -- Macro: GMP_NUMB_MASK - Bit masks for the nail and number parts of a limb. - `GMP_NAIL_MASK' is 0 when nails are not in use. - - `GMP_NAIL_MASK' is not often needed, since the nail part can be - obtained with `x >> GMP_NUMB_BITS', and that means one less large - constant, which can help various RISC chips. - - -- Macro: GMP_NUMB_MAX - The maximum value that can be stored in the number part of a limb. - This is the same as `GMP_NUMB_MASK', but can be used for clarity - when doing comparisons rather than bit-wise operations. - - The term "nails" comes from finger or toe nails, which are at the -ends of a limb (arm or leg). "numb" is short for number, but is also -how the developers felt after trying for a long time to come up with -sensible names for these things. - - In the future (the distant future most likely) a non-zero nail might -be permitted, giving non-unique representations for numbers in a limb -vector. This would help vector processors since carries would only -ever need to propagate one or two limbs. - - -File: gmp.info, Node: Random Number Functions, Next: Formatted Output, Prev: Low-level Functions, Up: Top - -9 Random Number Functions -************************* - -Sequences of pseudo-random numbers in GMP are generated using a -variable of type `gmp_randstate_t', which holds an algorithm selection -and a current state. Such a variable must be initialized by a call to -one of the `gmp_randinit' functions, and can be seeded with one of the -`gmp_randseed' functions. - - The functions actually generating random numbers are described in -*Note Integer Random Numbers::, and *Note Miscellaneous Float -Functions::. - - The older style random number functions don't accept a -`gmp_randstate_t' parameter but instead share a global variable of that -type. They use a default algorithm and are currently not seeded -(though perhaps that will change in the future). The new functions -accepting a `gmp_randstate_t' are recommended for applications that -care about randomness. - -* Menu: - -* Random State Initialization:: -* Random State Seeding:: -* Random State Miscellaneous:: - - -File: gmp.info, Node: Random State Initialization, Next: Random State Seeding, Prev: Random Number Functions, Up: Random Number Functions - -9.1 Random State Initialization -=============================== - - -- Function: void gmp_randinit_default (gmp_randstate_t STATE) - Initialize STATE with a default algorithm. This will be a - compromise between speed and randomness, and is recommended for - applications with no special requirements. Currently this is - `gmp_randinit_mt'. - - -- Function: void gmp_randinit_mt (gmp_randstate_t STATE) - Initialize STATE for a Mersenne Twister algorithm. This algorithm - is fast and has good randomness properties. - - -- Function: void gmp_randinit_lc_2exp (gmp_randstate_t STATE, mpz_t - A, unsigned long C, mp_bitcnt_t M2EXP) - Initialize STATE with a linear congruential algorithm X = (A*X + - C) mod 2^M2EXP. - - The low bits of X in this algorithm are not very random. The least - significant bit will have a period no more than 2, and the second - bit no more than 4, etc. For this reason only the high half of - each X is actually used. - - When a random number of more than M2EXP/2 bits is to be generated, - multiple iterations of the recurrence are used and the results - concatenated. - - -- Function: int gmp_randinit_lc_2exp_size (gmp_randstate_t STATE, - mp_bitcnt_t SIZE) - Initialize STATE for a linear congruential algorithm as per - `gmp_randinit_lc_2exp'. A, C and M2EXP are selected from a table, - chosen so that SIZE bits (or more) of each X will be used, ie. - M2EXP/2 >= SIZE. - - If successful the return value is non-zero. If SIZE is bigger - than the table data provides then the return value is zero. The - maximum SIZE currently supported is 128. - - -- Function: void gmp_randinit_set (gmp_randstate_t ROP, - gmp_randstate_t OP) - Initialize ROP with a copy of the algorithm and state from OP. - - -- Function: void gmp_randinit (gmp_randstate_t STATE, - gmp_randalg_t ALG, ...) - *This function is obsolete.* - - Initialize STATE with an algorithm selected by ALG. The only - choice is `GMP_RAND_ALG_LC', which is `gmp_randinit_lc_2exp_size' - described above. A third parameter of type `unsigned long' is - required, this is the SIZE for that function. - `GMP_RAND_ALG_DEFAULT' or 0 are the same as `GMP_RAND_ALG_LC'. - - `gmp_randinit' sets bits in the global variable `gmp_errno' to - indicate an error. `GMP_ERROR_UNSUPPORTED_ARGUMENT' if ALG is - unsupported, or `GMP_ERROR_INVALID_ARGUMENT' if the SIZE parameter - is too big. It may be noted this error reporting is not thread - safe (a good reason to use `gmp_randinit_lc_2exp_size' instead). - - -- Function: void gmp_randclear (gmp_randstate_t STATE) - Free all memory occupied by STATE. - - -File: gmp.info, Node: Random State Seeding, Next: Random State Miscellaneous, Prev: Random State Initialization, Up: Random Number Functions - -9.2 Random State Seeding -======================== - - -- Function: void gmp_randseed (gmp_randstate_t STATE, mpz_t SEED) - -- Function: void gmp_randseed_ui (gmp_randstate_t STATE, - unsigned long int SEED) - Set an initial seed value into STATE. - - The size of a seed determines how many different sequences of - random numbers that it's possible to generate. The "quality" of - the seed is the randomness of a given seed compared to the - previous seed used, and this affects the randomness of separate - number sequences. The method for choosing a seed is critical if - the generated numbers are to be used for important applications, - such as generating cryptographic keys. - - Traditionally the system time has been used to seed, but care - needs to be taken with this. If an application seeds often and - the resolution of the system clock is low, then the same sequence - of numbers might be repeated. Also, the system time is quite easy - to guess, so if unpredictability is required then it should - definitely not be the only source for the seed value. On some - systems there's a special device `/dev/random' which provides - random data better suited for use as a seed. - - -File: gmp.info, Node: Random State Miscellaneous, Prev: Random State Seeding, Up: Random Number Functions - -9.3 Random State Miscellaneous -============================== - - -- Function: unsigned long gmp_urandomb_ui (gmp_randstate_t STATE, - unsigned long N) - Return a uniformly distributed random number of N bits, ie. in the - range 0 to 2^N-1 inclusive. N must be less than or equal to the - number of bits in an `unsigned long'. - - -- Function: unsigned long gmp_urandomm_ui (gmp_randstate_t STATE, - unsigned long N) - Return a uniformly distributed random number in the range 0 to - N-1, inclusive. - - -File: gmp.info, Node: Formatted Output, Next: Formatted Input, Prev: Random Number Functions, Up: Top - -10 Formatted Output -******************* - -* Menu: - -* Formatted Output Strings:: -* Formatted Output Functions:: -* C++ Formatted Output:: - - -File: gmp.info, Node: Formatted Output Strings, Next: Formatted Output Functions, Prev: Formatted Output, Up: Formatted Output - -10.1 Format Strings -=================== - -`gmp_printf' and friends accept format strings similar to the standard C -`printf' (*note Formatted Output: (libc)Formatted Output.). A format -specification is of the form - - % [flags] [width] [.[precision]] [type] conv - - GMP adds types `Z', `Q' and `F' for `mpz_t', `mpq_t' and `mpf_t' -respectively, `M' for `mp_limb_t', and `N' for an `mp_limb_t' array. -`Z', `Q', `M' and `N' behave like integers. `Q' will print a `/' and a -denominator, if needed. `F' behaves like a float. For example, - - mpz_t z; - gmp_printf ("%s is an mpz %Zd\n", "here", z); - - mpq_t q; - gmp_printf ("a hex rational: %#40Qx\n", q); - - mpf_t f; - int n; - gmp_printf ("fixed point mpf %.*Ff with %d digits\n", n, f, n); - - mp_limb_t l; - gmp_printf ("limb %Mu\n", l); - - const mp_limb_t *ptr; - mp_size_t size; - gmp_printf ("limb array %Nx\n", ptr, size); - - For `N' the limbs are expected least significant first, as per the -`mpn' functions (*note Low-level Functions::). A negative size can be -given to print the value as a negative. - - All the standard C `printf' types behave the same as the C library -`printf', and can be freely intermixed with the GMP extensions. In the -current implementation the standard parts of the format string are -simply handed to `printf' and only the GMP extensions handled directly. - - The flags accepted are as follows. GLIBC style ' is only for the -standard C types (not the GMP types), and only if the C library -supports it. - - 0 pad with zeros (rather than spaces) - # show the base with `0x', `0X' or `0' - + always show a sign - (space) show a space or a `-' sign - ' group digits, GLIBC style (not GMP types) - - The optional width and precision can be given as a number within the -format string, or as a `*' to take an extra parameter of type `int', the -same as the standard `printf'. - - The standard types accepted are as follows. `h' and `l' are -portable, the rest will depend on the compiler (or include files) for -the type and the C library for the output. - - h short - hh char - j intmax_t or uintmax_t - l long or wchar_t - ll long long - L long double - q quad_t or u_quad_t - t ptrdiff_t - z size_t - -The GMP types are - - F mpf_t, float conversions - Q mpq_t, integer conversions - M mp_limb_t, integer conversions - N mp_limb_t array, integer conversions - Z mpz_t, integer conversions - - The conversions accepted are as follows. `a' and `A' are always -supported for `mpf_t' but depend on the C library for standard C float -types. `m' and `p' depend on the C library. - - a A hex floats, C99 style - c character - d decimal integer - e E scientific format float - f fixed point float - i same as d - g G fixed or scientific float - m `strerror' string, GLIBC style - n store characters written so far - o octal integer - p pointer - s string - u unsigned integer - x X hex integer - - `o', `x' and `X' are unsigned for the standard C types, but for -types `Z', `Q' and `N' they are signed. `u' is not meaningful for `Z', -`Q' and `N'. - - `M' is a proxy for the C library `l' or `L', according to the size -of `mp_limb_t'. Unsigned conversions will be usual, but a signed -conversion can be used and will interpret the value as a twos complement -negative. - - `n' can be used with any type, even the GMP types. - - Other types or conversions that might be accepted by the C library -`printf' cannot be used through `gmp_printf', this includes for -instance extensions registered with GLIBC `register_printf_function'. -Also currently there's no support for POSIX `$' style numbered arguments -(perhaps this will be added in the future). - - The precision field has it's usual meaning for integer `Z' and float -`F' types, but is currently undefined for `Q' and should not be used -with that. - - `mpf_t' conversions only ever generate as many digits as can be -accurately represented by the operand, the same as `mpf_get_str' does. -Zeros will be used if necessary to pad to the requested precision. This -happens even for an `f' conversion of an `mpf_t' which is an integer, -for instance 2^1024 in an `mpf_t' of 128 bits precision will only -produce about 40 digits, then pad with zeros to the decimal point. An -empty precision field like `%.Fe' or `%.Ff' can be used to specifically -request just the significant digits. - - The decimal point character (or string) is taken from the current -locale settings on systems which provide `localeconv' (*note Locales -and Internationalization: (libc)Locales.). The C library will normally -do the same for standard float output. - - The format string is only interpreted as plain `char's, multibyte -characters are not recognised. Perhaps this will change in the future. - - -File: gmp.info, Node: Formatted Output Functions, Next: C++ Formatted Output, Prev: Formatted Output Strings, Up: Formatted Output - -10.2 Functions -============== - -Each of the following functions is similar to the corresponding C -library function. The basic `printf' forms take a variable argument -list. The `vprintf' forms take an argument pointer, see *Note Variadic -Functions: (libc)Variadic Functions, or `man 3 va_start'. - - It should be emphasised that if a format string is invalid, or the -arguments don't match what the format specifies, then the behaviour of -any of these functions will be unpredictable. GCC format string -checking is not available, since it doesn't recognise the GMP -extensions. - - The file based functions `gmp_printf' and `gmp_fprintf' will return --1 to indicate a write error. Output is not "atomic", so partial -output may be produced if a write error occurs. All the functions can -return -1 if the C library `printf' variant in use returns -1, but this -shouldn't normally occur. - - -- Function: int gmp_printf (const char *FMT, ...) - -- Function: int gmp_vprintf (const char *FMT, va_list AP) - Print to the standard output `stdout'. Return the number of - characters written, or -1 if an error occurred. - - -- Function: int gmp_fprintf (FILE *FP, const char *FMT, ...) - -- Function: int gmp_vfprintf (FILE *FP, const char *FMT, va_list AP) - Print to the stream FP. Return the number of characters written, - or -1 if an error occurred. - - -- Function: int gmp_sprintf (char *BUF, const char *FMT, ...) - -- Function: int gmp_vsprintf (char *BUF, const char *FMT, va_list AP) - Form a null-terminated string in BUF. Return the number of - characters written, excluding the terminating null. - - No overlap is permitted between the space at BUF and the string - FMT. - - These functions are not recommended, since there's no protection - against exceeding the space available at BUF. - - -- Function: int gmp_snprintf (char *BUF, size_t SIZE, const char - *FMT, ...) - -- Function: int gmp_vsnprintf (char *BUF, size_t SIZE, const char - *FMT, va_list AP) - Form a null-terminated string in BUF. No more than SIZE bytes - will be written. To get the full output, SIZE must be enough for - the string and null-terminator. - - The return value is the total number of characters which ought to - have been produced, excluding the terminating null. If RETVAL >= - SIZE then the actual output has been truncated to the first SIZE-1 - characters, and a null appended. - - No overlap is permitted between the region {BUF,SIZE} and the FMT - string. - - Notice the return value is in ISO C99 `snprintf' style. This is - so even if the C library `vsnprintf' is the older GLIBC 2.0.x - style. - - -- Function: int gmp_asprintf (char **PP, const char *FMT, ...) - -- Function: int gmp_vasprintf (char **PP, const char *FMT, va_list AP) - Form a null-terminated string in a block of memory obtained from - the current memory allocation function (*note Custom - Allocation::). The block will be the size of the string and - null-terminator. The address of the block in stored to *PP. The - return value is the number of characters produced, excluding the - null-terminator. - - Unlike the C library `asprintf', `gmp_asprintf' doesn't return -1 - if there's no more memory available, it lets the current allocation - function handle that. - - -- Function: int gmp_obstack_printf (struct obstack *OB, const char - *FMT, ...) - -- Function: int gmp_obstack_vprintf (struct obstack *OB, const char - *FMT, va_list AP) - Append to the current object in OB. The return value is the - number of characters written. A null-terminator is not written. - - FMT cannot be within the current object in OB, since that object - might move as it grows. - - These functions are available only when the C library provides the - obstack feature, which probably means only on GNU systems, see - *Note Obstacks: (libc)Obstacks. - - -File: gmp.info, Node: C++ Formatted Output, Prev: Formatted Output Functions, Up: Formatted Output - -10.3 C++ Formatted Output -========================= - -The following functions are provided in `libgmpxx' (*note Headers and -Libraries::), which is built if C++ support is enabled (*note Build -Options::). Prototypes are available from `'. - - -- Function: ostream& operator<< (ostream& STREAM, mpz_t OP) - Print OP to STREAM, using its `ios' formatting settings. - `ios::width' is reset to 0 after output, the same as the standard - `ostream operator<<' routines do. - - In hex or octal, OP is printed as a signed number, the same as for - decimal. This is unlike the standard `operator<<' routines on - `int' etc, which instead give twos complement. - - -- Function: ostream& operator<< (ostream& STREAM, mpq_t OP) - Print OP to STREAM, using its `ios' formatting settings. - `ios::width' is reset to 0 after output, the same as the standard - `ostream operator<<' routines do. - - Output will be a fraction like `5/9', or if the denominator is 1 - then just a plain integer like `123'. - - In hex or octal, OP is printed as a signed value, the same as for - decimal. If `ios::showbase' is set then a base indicator is shown - on both the numerator and denominator (if the denominator is - required). - - -- Function: ostream& operator<< (ostream& STREAM, mpf_t OP) - Print OP to STREAM, using its `ios' formatting settings. - `ios::width' is reset to 0 after output, the same as the standard - `ostream operator<<' routines do. - - The decimal point follows the standard library float `operator<<', - which on recent systems means the `std::locale' imbued on STREAM. - - Hex and octal are supported, unlike the standard `operator<<' on - `double'. The mantissa will be in hex or octal, the exponent will - be in decimal. For hex the exponent delimiter is an `@'. This is - as per `mpf_out_str'. - - `ios::showbase' is supported, and will put a base on the mantissa, - for example hex `0x1.8' or `0x0.8', or octal `01.4' or `00.4'. - This last form is slightly strange, but at least differentiates - itself from decimal. - - These operators mean that GMP types can be printed in the usual C++ -way, for example, - - mpz_t z; - int n; - ... - cout << "iteration " << n << " value " << z << "\n"; - - But note that `ostream' output (and `istream' input, *note C++ -Formatted Input::) is the only overloading available for the GMP types -and that for instance using `+' with an `mpz_t' will have unpredictable -results. For classes with overloading, see *Note C++ Class Interface::. - - -File: gmp.info, Node: Formatted Input, Next: C++ Class Interface, Prev: Formatted Output, Up: Top - -11 Formatted Input -****************** - -* Menu: - -* Formatted Input Strings:: -* Formatted Input Functions:: -* C++ Formatted Input:: - - -File: gmp.info, Node: Formatted Input Strings, Next: Formatted Input Functions, Prev: Formatted Input, Up: Formatted Input - -11.1 Formatted Input Strings -============================ - -`gmp_scanf' and friends accept format strings similar to the standard C -`scanf' (*note Formatted Input: (libc)Formatted Input.). A format -specification is of the form - - % [flags] [width] [type] conv - - GMP adds types `Z', `Q' and `F' for `mpz_t', `mpq_t' and `mpf_t' -respectively. `Z' and `Q' behave like integers. `Q' will read a `/' -and a denominator, if present. `F' behaves like a float. - - GMP variables don't require an `&' when passed to `gmp_scanf', since -they're already "call-by-reference". For example, - - /* to read say "a(5) = 1234" */ - int n; - mpz_t z; - gmp_scanf ("a(%d) = %Zd\n", &n, z); - - mpq_t q1, q2; - gmp_sscanf ("0377 + 0x10/0x11", "%Qi + %Qi", q1, q2); - - /* to read say "topleft (1.55,-2.66)" */ - mpf_t x, y; - char buf[32]; - gmp_scanf ("%31s (%Ff,%Ff)", buf, x, y); - - All the standard C `scanf' types behave the same as in the C library -`scanf', and can be freely intermixed with the GMP extensions. In the -current implementation the standard parts of the format string are -simply handed to `scanf' and only the GMP extensions handled directly. - - The flags accepted are as follows. `a' and `'' will depend on -support from the C library, and `'' cannot be used with GMP types. - - * read but don't store - a allocate a buffer (string conversions) - ' grouped digits, GLIBC style (not GMP - types) - - The standard types accepted are as follows. `h' and `l' are -portable, the rest will depend on the compiler (or include files) for -the type and the C library for the input. - - h short - hh char - j intmax_t or uintmax_t - l long int, double or wchar_t - ll long long - L long double - q quad_t or u_quad_t - t ptrdiff_t - z size_t - -The GMP types are - - F mpf_t, float conversions - Q mpq_t, integer conversions - Z mpz_t, integer conversions - - The conversions accepted are as follows. `p' and `[' will depend on -support from the C library, the rest are standard. - - c character or characters - d decimal integer - e E f g G float - i integer with base indicator - n characters read so far - o octal integer - p pointer - s string of non-whitespace characters - u decimal integer - x X hex integer - [ string of characters in a set - - `e', `E', `f', `g' and `G' are identical, they all read either fixed -point or scientific format, and either upper or lower case `e' for the -exponent in scientific format. - - C99 style hex float format (`printf %a', *note Formatted Output -Strings::) is always accepted for `mpf_t', but for the standard float -types it will depend on the C library. - - `x' and `X' are identical, both accept both upper and lower case -hexadecimal. - - `o', `u', `x' and `X' all read positive or negative values. For the -standard C types these are described as "unsigned" conversions, but -that merely affects certain overflow handling, negatives are still -allowed (per `strtoul', *note Parsing of Integers: (libc)Parsing of -Integers.). For GMP types there are no overflows, so `d' and `u' are -identical. - - `Q' type reads the numerator and (optional) denominator as given. -If the value might not be in canonical form then `mpq_canonicalize' -must be called before using it in any calculations (*note Rational -Number Functions::). - - `Qi' will read a base specification separately for the numerator and -denominator. For example `0x10/11' would be 16/11, whereas `0x10/0x11' -would be 16/17. - - `n' can be used with any of the types above, even the GMP types. -`*' to suppress assignment is allowed, though in that case it would do -nothing at all. - - Other conversions or types that might be accepted by the C library -`scanf' cannot be used through `gmp_scanf'. - - Whitespace is read and discarded before a field, except for `c' and -`[' conversions. - - For float conversions, the decimal point character (or string) -expected is taken from the current locale settings on systems which -provide `localeconv' (*note Locales and Internationalization: -(libc)Locales.). The C library will normally do the same for standard -float input. - - The format string is only interpreted as plain `char's, multibyte -characters are not recognised. Perhaps this will change in the future. - - -File: gmp.info, Node: Formatted Input Functions, Next: C++ Formatted Input, Prev: Formatted Input Strings, Up: Formatted Input - -11.2 Formatted Input Functions -============================== - -Each of the following functions is similar to the corresponding C -library function. The plain `scanf' forms take a variable argument -list. The `vscanf' forms take an argument pointer, see *Note Variadic -Functions: (libc)Variadic Functions, or `man 3 va_start'. - - It should be emphasised that if a format string is invalid, or the -arguments don't match what the format specifies, then the behaviour of -any of these functions will be unpredictable. GCC format string -checking is not available, since it doesn't recognise the GMP -extensions. - - No overlap is permitted between the FMT string and any of the results -produced. - - -- Function: int gmp_scanf (const char *FMT, ...) - -- Function: int gmp_vscanf (const char *FMT, va_list AP) - Read from the standard input `stdin'. - - -- Function: int gmp_fscanf (FILE *FP, const char *FMT, ...) - -- Function: int gmp_vfscanf (FILE *FP, const char *FMT, va_list AP) - Read from the stream FP. - - -- Function: int gmp_sscanf (const char *S, const char *FMT, ...) - -- Function: int gmp_vsscanf (const char *S, const char *FMT, va_list - AP) - Read from a null-terminated string S. - - The return value from each of these functions is the same as the -standard C99 `scanf', namely the number of fields successfully parsed -and stored. `%n' fields and fields read but suppressed by `*' don't -count towards the return value. - - If end of input (or a file error) is reached before a character for -a field or a literal, and if no previous non-suppressed fields have -matched, then the return value is `EOF' instead of 0. A whitespace -character in the format string is only an optional match and doesn't -induce an `EOF' in this fashion. Leading whitespace read and discarded -for a field don't count as characters for that field. - - For the GMP types, input parsing follows C99 rules, namely one -character of lookahead is used and characters are read while they -continue to meet the format requirements. If this doesn't provide a -complete number then the function terminates, with that field not -stored nor counted towards the return value. For instance with `mpf_t' -an input `1.23e-XYZ' would be read up to the `X' and that character -pushed back since it's not a digit. The string `1.23e-' would then be -considered invalid since an `e' must be followed by at least one digit. - - For the standard C types, in the current implementation GMP calls -the C library `scanf' functions, which might have looser rules about -what constitutes a valid input. - - Note that `gmp_sscanf' is the same as `gmp_fscanf' and only does one -character of lookahead when parsing. Although clearly it could look at -its entire input, it is deliberately made identical to `gmp_fscanf', -the same way C99 `sscanf' is the same as `fscanf'. - - -File: gmp.info, Node: C++ Formatted Input, Prev: Formatted Input Functions, Up: Formatted Input - -11.3 C++ Formatted Input -======================== - -The following functions are provided in `libgmpxx' (*note Headers and -Libraries::), which is built only if C++ support is enabled (*note -Build Options::). Prototypes are available from `'. - - -- Function: istream& operator>> (istream& STREAM, mpz_t ROP) - Read ROP from STREAM, using its `ios' formatting settings. - - -- Function: istream& operator>> (istream& STREAM, mpq_t ROP) - An integer like `123' will be read, or a fraction like `5/9'. No - whitespace is allowed around the `/'. If the fraction is not in - canonical form then `mpq_canonicalize' must be called (*note - Rational Number Functions::) before operating on it. - - As per integer input, an `0' or `0x' base indicator is read when - none of `ios::dec', `ios::oct' or `ios::hex' are set. This is - done separately for numerator and denominator, so that for instance - `0x10/11' is 16/11 and `0x10/0x11' is 16/17. - - -- Function: istream& operator>> (istream& STREAM, mpf_t ROP) - Read ROP from STREAM, using its `ios' formatting settings. - - Hex or octal floats are not supported, but might be in the future, - or perhaps it's best to accept only what the standard float - `operator>>' does. - - Note that digit grouping specified by the `istream' locale is -currently not accepted. Perhaps this will change in the future. - - - These operators mean that GMP types can be read in the usual C++ -way, for example, - - mpz_t z; - ... - cin >> z; - - But note that `istream' input (and `ostream' output, *note C++ -Formatted Output::) is the only overloading available for the GMP types -and that for instance using `+' with an `mpz_t' will have unpredictable -results. For classes with overloading, see *Note C++ Class Interface::. - - -File: gmp.info, Node: C++ Class Interface, Next: BSD Compatible Functions, Prev: Formatted Input, Up: Top - -12 C++ Class Interface -********************** - -This chapter describes the C++ class based interface to GMP. - - All GMP C language types and functions can be used in C++ programs, -since `gmp.h' has `extern "C"' qualifiers, but the class interface -offers overloaded functions and operators which may be more convenient. - - Due to the implementation of this interface, a reasonably recent C++ -compiler is required, one supporting namespaces, partial specialization -of templates and member templates. For GCC this means version 2.91 or -later. - - *Everything described in this chapter is to be considered preliminary -and might be subject to incompatible changes if some unforeseen -difficulty reveals itself.* - -* Menu: - -* C++ Interface General:: -* C++ Interface Integers:: -* C++ Interface Rationals:: -* C++ Interface Floats:: -* C++ Interface Random Numbers:: -* C++ Interface Limitations:: - - -File: gmp.info, Node: C++ Interface General, Next: C++ Interface Integers, Prev: C++ Class Interface, Up: C++ Class Interface - -12.1 C++ Interface General -========================== - -All the C++ classes and functions are available with - - #include - - Programs should be linked with the `libgmpxx' and `libgmp' -libraries. For example, - - g++ mycxxprog.cc -lgmpxx -lgmp - -The classes defined are - - -- Class: mpz_class - -- Class: mpq_class - -- Class: mpf_class - - The standard operators and various standard functions are overloaded -to allow arithmetic with these classes. For example, - - int - main (void) - { - mpz_class a, b, c; - - a = 1234; - b = "-5678"; - c = a+b; - cout << "sum is " << c << "\n"; - cout << "absolute value is " << abs(c) << "\n"; - - return 0; - } - - An important feature of the implementation is that an expression like -`a=b+c' results in a single call to the corresponding `mpz_add', -without using a temporary for the `b+c' part. Expressions which by -their nature imply intermediate values, like `a=b*c+d*e', still use -temporaries though. - - The classes can be freely intermixed in expressions, as can the -classes and the standard types `long', `unsigned long' and `double'. -Smaller types like `int' or `float' can also be intermixed, since C++ -will promote them. - - Note that `bool' is not accepted directly, but must be explicitly -cast to an `int' first. This is because C++ will automatically convert -any pointer to a `bool', so if GMP accepted `bool' it would make all -sorts of invalid class and pointer combinations compile but almost -certainly not do anything sensible. - - Conversions back from the classes to standard C++ types aren't done -automatically, instead member functions like `get_si' are provided (see -the following sections for details). - - Also there are no automatic conversions from the classes to the -corresponding GMP C types, instead a reference to the underlying C -object can be obtained with the following functions, - - -- Function: mpz_t mpz_class::get_mpz_t () - -- Function: mpq_t mpq_class::get_mpq_t () - -- Function: mpf_t mpf_class::get_mpf_t () - - These can be used to call a C function which doesn't have a C++ class -interface. For example to set `a' to the GCD of `b' and `c', - - mpz_class a, b, c; - ... - mpz_gcd (a.get_mpz_t(), b.get_mpz_t(), c.get_mpz_t()); - - In the other direction, a class can be initialized from the -corresponding GMP C type, or assigned to if an explicit constructor is -used. In both cases this makes a copy of the value, it doesn't create -any sort of association. For example, - - mpz_t z; - // ... init and calculate z ... - mpz_class x(z); - mpz_class y; - y = mpz_class (z); - - There are no namespace setups in `gmpxx.h', all types and functions -are simply put into the global namespace. This is what `gmp.h' has -done in the past, and continues to do for compatibility. The extras -provided by `gmpxx.h' follow GMP naming conventions and are unlikely to -clash with anything. - - -File: gmp.info, Node: C++ Interface Integers, Next: C++ Interface Rationals, Prev: C++ Interface General, Up: C++ Class Interface - -12.2 C++ Interface Integers -=========================== - - -- Function: void mpz_class::mpz_class (type N) - Construct an `mpz_class'. All the standard C++ types may be used, - except `long long' and `long double', and all the GMP C++ classes - can be used. Any necessary conversion follows the corresponding C - function, for example `double' follows `mpz_set_d' (*note - Assigning Integers::). - - -- Function: void mpz_class::mpz_class (mpz_t Z) - Construct an `mpz_class' from an `mpz_t'. The value in Z is - copied into the new `mpz_class', there won't be any permanent - association between it and Z. - - -- Function: void mpz_class::mpz_class (const char *S) - -- Function: void mpz_class::mpz_class (const char *S, int BASE = 0) - -- Function: void mpz_class::mpz_class (const string& S) - -- Function: void mpz_class::mpz_class (const string& S, int BASE = 0) - Construct an `mpz_class' converted from a string using - `mpz_set_str' (*note Assigning Integers::). - - If the string is not a valid integer, an `std::invalid_argument' - exception is thrown. The same applies to `operator='. - - -- Function: mpz_class operator/ (mpz_class A, mpz_class D) - -- Function: mpz_class operator% (mpz_class A, mpz_class D) - Divisions involving `mpz_class' round towards zero, as per the - `mpz_tdiv_q' and `mpz_tdiv_r' functions (*note Integer Division::). - This is the same as the C99 `/' and `%' operators. - - The `mpz_fdiv...' or `mpz_cdiv...' functions can always be called - directly if desired. For example, - - mpz_class q, a, d; - ... - mpz_fdiv_q (q.get_mpz_t(), a.get_mpz_t(), d.get_mpz_t()); - - -- Function: mpz_class abs (mpz_class OP1) - -- Function: int cmp (mpz_class OP1, type OP2) - -- Function: int cmp (type OP1, mpz_class OP2) - -- Function: bool mpz_class::fits_sint_p (void) - -- Function: bool mpz_class::fits_slong_p (void) - -- Function: bool mpz_class::fits_sshort_p (void) - -- Function: bool mpz_class::fits_uint_p (void) - -- Function: bool mpz_class::fits_ulong_p (void) - -- Function: bool mpz_class::fits_ushort_p (void) - -- Function: double mpz_class::get_d (void) - -- Function: long mpz_class::get_si (void) - -- Function: string mpz_class::get_str (int BASE = 10) - -- Function: unsigned long mpz_class::get_ui (void) - -- Function: int mpz_class::set_str (const char *STR, int BASE) - -- Function: int mpz_class::set_str (const string& STR, int BASE) - -- Function: int sgn (mpz_class OP) - -- Function: mpz_class sqrt (mpz_class OP) - These functions provide a C++ class interface to the corresponding - GMP C routines. - - `cmp' can be used with any of the classes or the standard C++ - types, except `long long' and `long double'. - - - Overloaded operators for combinations of `mpz_class' and `double' -are provided for completeness, but it should be noted that if the given -`double' is not an integer then the way any rounding is done is -currently unspecified. The rounding might take place at the start, in -the middle, or at the end of the operation, and it might change in the -future. - - Conversions between `mpz_class' and `double', however, are defined -to follow the corresponding C functions `mpz_get_d' and `mpz_set_d'. -And comparisons are always made exactly, as per `mpz_cmp_d'. - - -File: gmp.info, Node: C++ Interface Rationals, Next: C++ Interface Floats, Prev: C++ Interface Integers, Up: C++ Class Interface - -12.3 C++ Interface Rationals -============================ - -In all the following constructors, if a fraction is given then it -should be in canonical form, or if not then `mpq_class::canonicalize' -called. - - -- Function: void mpq_class::mpq_class (type OP) - -- Function: void mpq_class::mpq_class (integer NUM, integer DEN) - Construct an `mpq_class'. The initial value can be a single value - of any type, or a pair of integers (`mpz_class' or standard C++ - integer types) representing a fraction, except that `long long' - and `long double' are not supported. For example, - - mpq_class q (99); - mpq_class q (1.75); - mpq_class q (1, 3); - - -- Function: void mpq_class::mpq_class (mpq_t Q) - Construct an `mpq_class' from an `mpq_t'. The value in Q is - copied into the new `mpq_class', there won't be any permanent - association between it and Q. - - -- Function: void mpq_class::mpq_class (const char *S) - -- Function: void mpq_class::mpq_class (const char *S, int BASE = 0) - -- Function: void mpq_class::mpq_class (const string& S) - -- Function: void mpq_class::mpq_class (const string& S, int BASE = 0) - Construct an `mpq_class' converted from a string using - `mpq_set_str' (*note Initializing Rationals::). - - If the string is not a valid rational, an `std::invalid_argument' - exception is thrown. The same applies to `operator='. - - -- Function: void mpq_class::canonicalize () - Put an `mpq_class' into canonical form, as per *Note Rational - Number Functions::. All arithmetic operators require their - operands in canonical form, and will return results in canonical - form. - - -- Function: mpq_class abs (mpq_class OP) - -- Function: int cmp (mpq_class OP1, type OP2) - -- Function: int cmp (type OP1, mpq_class OP2) - -- Function: double mpq_class::get_d (void) - -- Function: string mpq_class::get_str (int BASE = 10) - -- Function: int mpq_class::set_str (const char *STR, int BASE) - -- Function: int mpq_class::set_str (const string& STR, int BASE) - -- Function: int sgn (mpq_class OP) - These functions provide a C++ class interface to the corresponding - GMP C routines. - - `cmp' can be used with any of the classes or the standard C++ - types, except `long long' and `long double'. - - -- Function: mpz_class& mpq_class::get_num () - -- Function: mpz_class& mpq_class::get_den () - Get a reference to an `mpz_class' which is the numerator or - denominator of an `mpq_class'. This can be used both for read and - write access. If the object returned is modified, it modifies the - original `mpq_class'. - - If direct manipulation might produce a non-canonical value, then - `mpq_class::canonicalize' must be called before further operations. - - -- Function: mpz_t mpq_class::get_num_mpz_t () - -- Function: mpz_t mpq_class::get_den_mpz_t () - Get a reference to the underlying `mpz_t' numerator or denominator - of an `mpq_class'. This can be passed to C functions expecting an - `mpz_t'. Any modifications made to the `mpz_t' will modify the - original `mpq_class'. - - If direct manipulation might produce a non-canonical value, then - `mpq_class::canonicalize' must be called before further operations. - - -- Function: istream& operator>> (istream& STREAM, mpq_class& ROP); - Read ROP from STREAM, using its `ios' formatting settings, the - same as `mpq_t operator>>' (*note C++ Formatted Input::). - - If the ROP read might not be in canonical form then - `mpq_class::canonicalize' must be called. - - -File: gmp.info, Node: C++ Interface Floats, Next: C++ Interface Random Numbers, Prev: C++ Interface Rationals, Up: C++ Class Interface - -12.4 C++ Interface Floats -========================= - -When an expression requires the use of temporary intermediate -`mpf_class' values, like `f=g*h+x*y', those temporaries will have the -same precision as the destination `f'. Explicit constructors can be -used if this doesn't suit. - - -- Function: mpf_class::mpf_class (type OP) - -- Function: mpf_class::mpf_class (type OP, unsigned long PREC) - Construct an `mpf_class'. Any standard C++ type can be used, - except `long long' and `long double', and any of the GMP C++ - classes can be used. - - If PREC is given, the initial precision is that value, in bits. If - PREC is not given, then the initial precision is determined by the - type of OP given. An `mpz_class', `mpq_class', or C++ builtin - type will give the default `mpf' precision (*note Initializing - Floats::). An `mpf_class' or expression will give the precision - of that value. The precision of a binary expression is the higher - of the two operands. - - mpf_class f(1.5); // default precision - mpf_class f(1.5, 500); // 500 bits (at least) - mpf_class f(x); // precision of x - mpf_class f(abs(x)); // precision of x - mpf_class f(-g, 1000); // 1000 bits (at least) - mpf_class f(x+y); // greater of precisions of x and y - - -- Function: void mpf_class::mpf_class (const char *S) - -- Function: void mpf_class::mpf_class (const char *S, unsigned long - PREC, int BASE = 0) - -- Function: void mpf_class::mpf_class (const string& S) - -- Function: void mpf_class::mpf_class (const string& S, unsigned long - PREC, int BASE = 0) - Construct an `mpf_class' converted from a string using - `mpf_set_str' (*note Assigning Floats::). If PREC is given, the - initial precision is that value, in bits. If not, the default - `mpf' precision (*note Initializing Floats::) is used. - - If the string is not a valid float, an `std::invalid_argument' - exception is thrown. The same applies to `operator='. - - -- Function: mpf_class& mpf_class::operator= (type OP) - Convert and store the given OP value to an `mpf_class' object. The - same types are accepted as for the constructors above. - - Note that `operator=' only stores a new value, it doesn't copy or - change the precision of the destination, instead the value is - truncated if necessary. This is the same as `mpf_set' etc. Note - in particular this means for `mpf_class' a copy constructor is not - the same as a default constructor plus assignment. - - mpf_class x (y); // x created with precision of y - - mpf_class x; // x created with default precision - x = y; // value truncated to that precision - - Applications using templated code may need to be careful about the - assumptions the code makes in this area, when working with - `mpf_class' values of various different or non-default precisions. - For instance implementations of the standard `complex' template - have been seen in both styles above, though of course `complex' is - normally only actually specified for use with the builtin float - types. - - -- Function: mpf_class abs (mpf_class OP) - -- Function: mpf_class ceil (mpf_class OP) - -- Function: int cmp (mpf_class OP1, type OP2) - -- Function: int cmp (type OP1, mpf_class OP2) - -- Function: bool mpf_class::fits_sint_p (void) - -- Function: bool mpf_class::fits_slong_p (void) - -- Function: bool mpf_class::fits_sshort_p (void) - -- Function: bool mpf_class::fits_uint_p (void) - -- Function: bool mpf_class::fits_ulong_p (void) - -- Function: bool mpf_class::fits_ushort_p (void) - -- Function: mpf_class floor (mpf_class OP) - -- Function: mpf_class hypot (mpf_class OP1, mpf_class OP2) - -- Function: double mpf_class::get_d (void) - -- Function: long mpf_class::get_si (void) - -- Function: string mpf_class::get_str (mp_exp_t& EXP, int BASE = 10, - size_t DIGITS = 0) - -- Function: unsigned long mpf_class::get_ui (void) - -- Function: int mpf_class::set_str (const char *STR, int BASE) - -- Function: int mpf_class::set_str (const string& STR, int BASE) - -- Function: int sgn (mpf_class OP) - -- Function: mpf_class sqrt (mpf_class OP) - -- Function: mpf_class trunc (mpf_class OP) - These functions provide a C++ class interface to the corresponding - GMP C routines. - - `cmp' can be used with any of the classes or the standard C++ - types, except `long long' and `long double'. - - The accuracy provided by `hypot' is not currently guaranteed. - - -- Function: mp_bitcnt_t mpf_class::get_prec () - -- Function: void mpf_class::set_prec (mp_bitcnt_t PREC) - -- Function: void mpf_class::set_prec_raw (mp_bitcnt_t PREC) - Get or set the current precision of an `mpf_class'. - - The restrictions described for `mpf_set_prec_raw' (*note - Initializing Floats::) apply to `mpf_class::set_prec_raw'. Note - in particular that the `mpf_class' must be restored to it's - allocated precision before being destroyed. This must be done by - application code, there's no automatic mechanism for it. - - -File: gmp.info, Node: C++ Interface Random Numbers, Next: C++ Interface Limitations, Prev: C++ Interface Floats, Up: C++ Class Interface - -12.5 C++ Interface Random Numbers -================================= - - -- Class: gmp_randclass - The C++ class interface to the GMP random number functions uses - `gmp_randclass' to hold an algorithm selection and current state, - as per `gmp_randstate_t'. - - -- Function: gmp_randclass::gmp_randclass (void (*RANDINIT) - (gmp_randstate_t, ...), ...) - Construct a `gmp_randclass', using a call to the given RANDINIT - function (*note Random State Initialization::). The arguments - expected are the same as RANDINIT, but with `mpz_class' instead of - `mpz_t'. For example, - - gmp_randclass r1 (gmp_randinit_default); - gmp_randclass r2 (gmp_randinit_lc_2exp_size, 32); - gmp_randclass r3 (gmp_randinit_lc_2exp, a, c, m2exp); - gmp_randclass r4 (gmp_randinit_mt); - - `gmp_randinit_lc_2exp_size' will fail if the size requested is too - big, an `std::length_error' exception is thrown in that case. - - -- Function: gmp_randclass::gmp_randclass (gmp_randalg_t ALG, ...) - Construct a `gmp_randclass' using the same parameters as - `gmp_randinit' (*note Random State Initialization::). This - function is obsolete and the above RANDINIT style should be - preferred. - - -- Function: void gmp_randclass::seed (unsigned long int S) - -- Function: void gmp_randclass::seed (mpz_class S) - Seed a random number generator. See *note Random Number - Functions::, for how to choose a good seed. - - -- Function: mpz_class gmp_randclass::get_z_bits (unsigned long BITS) - -- Function: mpz_class gmp_randclass::get_z_bits (mpz_class BITS) - Generate a random integer with a specified number of bits. - - -- Function: mpz_class gmp_randclass::get_z_range (mpz_class N) - Generate a random integer in the range 0 to N-1 inclusive. - - -- Function: mpf_class gmp_randclass::get_f () - -- Function: mpf_class gmp_randclass::get_f (unsigned long PREC) - Generate a random float F in the range 0 <= F < 1. F will be to - PREC bits precision, or if PREC is not given then to the precision - of the destination. For example, - - gmp_randclass r; - ... - mpf_class f (0, 512); // 512 bits precision - f = r.get_f(); // random number, 512 bits - - -File: gmp.info, Node: C++ Interface Limitations, Prev: C++ Interface Random Numbers, Up: C++ Class Interface - -12.6 C++ Interface Limitations -============================== - -`mpq_class' and Templated Reading - A generic piece of template code probably won't know that - `mpq_class' requires a `canonicalize' call if inputs read with - `operator>>' might be non-canonical. This can lead to incorrect - results. - - `operator>>' behaves as it does for reasons of efficiency. A - canonicalize can be quite time consuming on large operands, and is - best avoided if it's not necessary. - - But this potential difficulty reduces the usefulness of - `mpq_class'. Perhaps a mechanism to tell `operator>>' what to do - will be adopted in the future, maybe a preprocessor define, a - global flag, or an `ios' flag pressed into service. Or maybe, at - the risk of inconsistency, the `mpq_class' `operator>>' could - canonicalize and leave `mpq_t' `operator>>' not doing so, for use - on those occasions when that's acceptable. Send feedback or - alternate ideas to . - -Subclassing - Subclassing the GMP C++ classes works, but is not currently - recommended. - - Expressions involving subclasses resolve correctly (or seem to), - but in normal C++ fashion the subclass doesn't inherit - constructors and assignments. There's many of those in the GMP - classes, and a good way to reestablish them in a subclass is not - yet provided. - -Templated Expressions - A subtle difficulty exists when using expressions together with - application-defined template functions. Consider the following, - with `T' intended to be some numeric type, - - template - T fun (const T &, const T &); - - When used with, say, plain `mpz_class' variables, it works fine: - `T' is resolved as `mpz_class'. - - mpz_class f(1), g(2); - fun (f, g); // Good - - But when one of the arguments is an expression, it doesn't work. - - mpz_class f(1), g(2), h(3); - fun (f, g+h); // Bad - - This is because `g+h' ends up being a certain expression template - type internal to `gmpxx.h', which the C++ template resolution - rules are unable to automatically convert to `mpz_class'. The - workaround is simply to add an explicit cast. - - mpz_class f(1), g(2), h(3); - fun (f, mpz_class(g+h)); // Good - - Similarly, within `fun' it may be necessary to cast an expression - to type `T' when calling a templated `fun2'. - - template - void fun (T f, T g) - { - fun2 (f, f+g); // Bad - } - - template - void fun (T f, T g) - { - fun2 (f, T(f+g)); // Good - } - - -File: gmp.info, Node: BSD Compatible Functions, Next: Custom Allocation, Prev: C++ Class Interface, Up: Top - -13 Berkeley MP Compatible Functions -*********************************** - -These functions are intended to be fully compatible with the Berkeley MP -library which is available on many BSD derived U*ix systems. The -`--enable-mpbsd' option must be used when building GNU MP to make these -available (*note Installing GMP::). - - The original Berkeley MP library has a usage restriction: you cannot -use the same variable as both source and destination in a single -function call. The compatible functions in GNU MP do not share this -restriction--inputs and outputs may overlap. - - It is not recommended that new programs are written using these -functions. Apart from the incomplete set of functions, the interface -for initializing `MINT' objects is more error prone, and the `pow' -function collides with `pow' in `libm.a'. - - Include the header `mp.h' to get the definition of the necessary -types and functions. If you are on a BSD derived system, make sure to -include GNU `mp.h' if you are going to link the GNU `libmp.a' to your -program. This means that you probably need to give the `-I

7Pc=DD&M8H^IaM|SKCQQfy0h% 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 diff --git a/misc/builddeps/linux64/d0_blind_id/lib/libd0_blind_id.la b/misc/builddeps/linux64/d0_blind_id/lib/libd0_blind_id.la deleted file mode 100755 index 34767d3b..00000000 --- a/misc/builddeps/linux64/d0_blind_id/lib/libd0_blind_id.la +++ /dev/null @@ -1,41 +0,0 @@ -# libd0_blind_id.la - a libtool library file -# Generated by ltmain.sh (GNU libtool) 2.2.6b Debian-2.2.6b-2ubuntu1 -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# The name that we can dlopen(3). -dlname='' - -# Names of this library. -library_names='' - -# The name of the static archive. -old_library='libd0_blind_id.a' - -# Linker flags that can not go in dependency_libs. -inherited_linker_flags='' - -# Libraries that this one depends upon. -dependency_libs=' -L/tmp/d0_blind_id.deps/lib/ /tmp/g/lib/libgmp.la' - -# Names of additional weak libraries provided by this library -weak_library_names='' - -# Version information for libd0_blind_id. -current=0 -age=0 -revision=0 - -# Is this an already installed library? -installed=yes - -# Should we warn about portability when linking against -modules? -shouldnotlink=no - -# Files to dlopen/dlpreopen -dlopen='' -dlpreopen='' - -# Directory that this library needs to be installed in: -libdir='/usr/local/lib' diff --git a/misc/builddeps/linux64/d0_blind_id/lib/libd0_blind_id.so b/misc/builddeps/linux64/d0_blind_id/lib/libd0_blind_id.so deleted file mode 120000 index 6adf4aa9..00000000 --- a/misc/builddeps/linux64/d0_blind_id/lib/libd0_blind_id.so +++ /dev/null @@ -1 +0,0 @@ -libd0_blind_id.so.0.0.0 \ No newline at end of file diff --git a/misc/builddeps/linux64/d0_blind_id/lib/libd0_blind_id.so.0 b/misc/builddeps/linux64/d0_blind_id/lib/libd0_blind_id.so.0 deleted file mode 120000 index 6adf4aa9..00000000 --- a/misc/builddeps/linux64/d0_blind_id/lib/libd0_blind_id.so.0 +++ /dev/null @@ -1 +0,0 @@ -libd0_blind_id.so.0.0.0 \ No newline at end of file diff --git a/misc/builddeps/linux64/d0_blind_id/lib/libd0_blind_id.so.0.0.0 b/misc/builddeps/linux64/d0_blind_id/lib/libd0_blind_id.so.0.0.0 deleted file mode 100755 index 11fb746a37c80710f1c835389f2267ae1ca717f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133584 zcmeFa30#!b`Un2b06K0AmL{dukZ4#gjESj5G6MRJjf#S)X#v8Z6k9MTWu*mrokq&G zdu_MdW?5b9wptmuqAil8(Q?!Fm(bKUt*rTfzvrA6h7qgZ|My=$pa1{9I-K`e&U2pg zoaa1edCxnuINdYeYO!eM6`@_E5z0AJVp0_0=1U7H8a5Dp+fhGd!1?t|7l=}3SA^EJH9m!sBD8LrQ5=eq_YqomO)KdL-=j4i zgi<54Xl>QfP>d*I`f0EYFA^sH2@%N78_tA2~@OL06nf;bp zbd{=TkA>k)|34Vjo}X>O>-jMLha_4%$4dUL+B!N2E;Ht=RCv>Awo9_+>D*qvsn644 zetH;VOn)UOmF(bdzZ9av`Uy)~Eug+00Ihlv5Tj8Ak%ReqE{vD*kK4JRo3ai)Eia!`8e}U5TT4iT5uh+zHzgh8@aRA0O zOD5X8Vf+oMzRxKA8eJ~7(iU`AN{JUz^A=DdOa#dc{_cKB4uxizd@v)!5REXBj*Ep?xZ z)NCW7Ogm3kdahFqI|wkZ!(sL9gMQ14Zg)}#++UMVV` zo9$H+W(PBFU!nMO&J}8Ct7M`*t>Q^zszmHi@&_usIpI@op-okKI#hhCS8}dVcGx#i zBJvgf!4tICa|$1`H`Jlef z(e7Qfn28dxNZ~!IzKLpr%l^Y_{0Z#2In00VQRO}mh99HsN%wG2VAwSkFzdV8AqmQS z+DN5mnHnEC_u@4oOdk~vw7f9;JfX^^S`KCmzp}IE6_=J|SNL+vec9Psc0plDp_ZMU zSCz}#+@iv3yju3e1=-WQ^9n0`-tyF<+=>csg_fU~J-4W^BtN?_KfBUbSd?8cKX-W2 z$aeS=??SEETU_DwwL>o~FZ6k{%PNsS57|4Sl@~6^1<#)lv&+3#ReCFY*?GCerIiIm zx%0e#C@j0UG{3T_vc2-{w7JrI^&dzGr@}zPlm2u4s?W!Cuv?H5^>f3Q$R2d|~1MW+)f~&Lhy}sPM z`QG+j=?^mexnPm`uZtynJE4DQW~udG=P&nGl$DlLv~PqzEFo`xZc&jJz4NaZA|hZr z_T!oaq3*A7b<}4v_32q@Q)WzVSA=`AJIn3zxGzoDilK379zrkUD`Ig$ZebCidBtVd zWY6>ZP;$8mmX(*z&7I5cQ;axjVhc-PSDy*x6}J*95W@>g=H|kHN}lXl3P4|M%{4DC z-&++5nK{Zz7Z#iM1^I;wvaf2@MuP2#t+e9G);d&F&NX>*^YhJHFk}z+R<-Ghu|nx3 z<%UzyB~6CP^4yaA(&ARJ7-#0TRYg%-wJt0!D{V6miX?>CR9w2itL4sZrDaoUh=Bx5 z8)X;!G#@N3ix=n$uNR|Vp;k~@<}J}!er17%AeEc1RrvC~<>gv|7+$o3yrNRm{H;07 zdLSQ#6cx@zV-Kw;9eN(`^LRH>%l78y`f|ZKx1vIMU$(a-pBy1WFnJTT2_E;j)a>Cy zhYvNkcfv>ecCbaWXq?_~ZXoaZmzRmrK$jG&x|39sk5qohC)2i^U4Z|+CwVfZGcPnjy0)7Av3qWHT!1h0qSSBBtoL-4CY@C6}w zvmUguxfevTS#RRaIVABfDLFJ_44Q&ZcFh_sRiq0?o*QA7J}z~rg_DL;LkFVNMl3r{X_7M z5WG28CpjSme|89eVhCO>y##es2;Q8-laLaES4$efuZQ5B0we!qgy4sV;Ae*5xo2x$ zIU#tpgcGFsA$UGFFt4%@eCTtFst|nW{_~O$y!lLlvX+P7)e=h-u`&doA~5pLst~*@ z1iv~2KQ08nCIp`zf?pScpAdq7DFh$d@9IME?hyWl5WHHF32I{qesTzZQwTmI1ivo? zpA~{PLhyXnVqS+r@a7&4X-7lw<}(ist32;#Ic7b{F78S7WQdb4d)FzKAC7%ezpF#fK@6&yf#K65tj3*s7Z7GZ{==0*XZ zMwkJ=xlX_*5$3A3d7Xf}62_`rYhEp2D`BjPwdR!q{$(LxhSTOH0{)ILtKD2C;BN@q z2xc%>W{6+DH zJbqvNQT>Mf-0^e!e|P(T)cs!@cOa;G{GWOJ-x9hcg#~=&@gFhPBAV-gIq_AVz{BxN zkjE2vGJd&8pNn6KRKH;}MJfGs|986ocjywa0eUew%taOT+NkeeBaFyUASxm%gFDpV zgNhg}^Ys{X^v3m951Y|pe zI{Fd;Bx=4vdSEzZtVNUQfr;5gqegyHQb(Ic}|0~^p&^REd{o?gNQM}Dr=LzJ; z$3V;2O~{f+hF1l@uTk>r0ma(N*i88$RXU-54pYDLg|gvlMoKjuO3iesW}H%U{E5_r z{aCewMlY%7PE+ql3BP_qy}yTR3wsKe5cWJIlvnl~1?M=X`*-`!QHGq04DNt0ew0vg zlkrboT2iOW>@^+&xz#-FEGg*1z@)cX?keO!d!C^D*zoc{L*Hciv8w#D+Lzz|e_Z}y z2t1)bjWwHV7@Etb`4W^B<{*8K!fpeD-;R0vHsi!8pk0LM`C=Op~v3H|9I z2vz!ucmrn={S%$F2%WWh|0un>Rq3mx(&b1JG~boVwi@-SP2PT047TSn(!1GT5wY9s zJycfYB7NxrUk|<3ht3M!5|9sid2o9=Zk=_ESF!Xs2fZ!9gF8fp&7(FItaR43d}`Kl zUpmd=dls#v8x&x7j5G<`W`CMrCii2^l-mvPmkturhQHO3H-(*;R zWwiQG_iv>psr1LuP4=a8G58VjtPp0enI>SNZ7ERAQvkO$IlJJW+Rt8dgbL6x?KS&( zD`Va381A6r@+WCPn>65B;#wW{K$`G`(d`ZRHF%T(KgR7J7_ikp9u|UpFSgq1A!LND z9u2isaP5g~wfpB#TlHbTp{*7wTP+j9>^1Y+Y?TUBb3R~aUGrsaCd0t`o9;iN`}bsu z(Pqv-R<{!EiEzKk=mCe}=!nsvGEw)Z1HaceigqTl7Z5=1<*+pSGUrdtdzsn4*ZGsN zn|DAv>ts&KZ7HYHN& zoHlR@B`y_89E1`X$1Aat{&9#wlU)j-P*vW@7kX5h!MV4Rj`Gui+sn=n!){^2$cpi; z`3LaR>tuDm61hPYd}x0TfuPFqb|1?#P;b$dIrttz;Rzz*V9?e5Z%y)V@m|; zFzmjEnVLILsi9VG|7K%=C?ILz3o&rCuQ?D`z=7BZ!}UNWG)w9R5@to+MbgcPzd({t z2I=VYAi<7_Sl}VrCOUtD3}ZM%is{Nhm8^_!X|LTn$}i+VFyvu_KeMY zp>*3=-Wq>9viA>|nZl>g0>aN8NtNo--oPDi?;0gq+Is<@HZ4N!9q!L7WI3q6C?{E! zLw| z?&<>$J&b7Y~;oKFhtEpQa z;X9?Jp9-<|7a~s+$jH-Rz~DxG^zO?>?DR--AZhSs~Wa1HFHEmRw0+ieyou9_VIVHChUK8#ZqjL1K~DbYr1gV6470 z=!-ITq6j^($R?qB31OK*+P@_fE1^du1WS_k4+$km$S0+y0u-6kP3M6`h<-eVGQ^j!;)86cpsBtch%JP>B;wXZE_=GuQVS--@JU7@j}9ja{+#AnXeYbVXu{YwQH zNX2dXd_6D@A;Sfuk3&px!M@`VMqOCgwRSyoJUVC`Iw1Sxaf373Un~vX{vY((q#H2% z;BaY(HHI86cdzHfl0Ni3Z13C!cc>Z!A2RMZkGhq0#`MXJd{_$W{${=Y+X&-QOzWJx z;5K(|MVEIN*5>3Nel2dt;*Q52A#dx` zDC2SL-wL^1d9B=tswo=gTzX<@i;jI~(4L&0qD zRY|@<&fU>dqy_jjtGLqP>!rKE=9iMGX*CM;Z6iNT|hRxO)P~3qUqzF**S`y4995C{fxnivnts zqV7U+oGr7lpMelRP|dZ=gidX25u+lX{ubp6V`;WLT(ci(I(c7-+ zF8^-mP&wK^mf$HwJRUhsAlDM}|`OsDUTjw>1U+S$($ZE!O4=u~?8U#&O$qxhs2a$34h>w#+?B zB*`u$#xW_tUc+S}syJBEh9GIH;zAbAfht)rCGCAeRMSQQAK}C$6zGX++G|b+omD+o z@b#8_NsW^IWhBOaX)Sxrcie^x^nMsf?xNV-fotPqjO&Cn^hEm$b+(Us-$A9D@be8ToW#`fPQ+n)-s{gpQ^WcvfB+J8t}`;#${WEV+tEE3}*)x4=} ze~FJl;@su@X_DVC=0IUK09(J|abcFjNQ})=Xj|)7!X#p1jip^k>+g4d1Z5s&PXD*Y zWThZm|0XFdKxqpg4Qz{XFLh3r;y1&B(*$2qo@6f~``Jq8TcGo7iJybS)Oii1u{n!m zbH+%P(ahRi3hr6`E1J{8=GE+ zy~Zk8UJzNoT*^8dJj58|;A==Q&9JgwY6 z7x7cf{Y`)NO+hf^+}~(XEZn2Pioti0tM)pJ$N#C=8TnSv3mSJ}Ks7ZvQ8e0weHzT@ zu>KUQ!wMUv=>B@J4lGJA&KC%~pAX)EOl0P2nb}@5TOgAnq<};U=q&k{^T8YHlgRpfkDWYt ziGQ%bad5`eIFS6sBXs(1MkKe_*r&S7GB`Rnfo8m7c7g9jz`MX$&s{}1IKK#n^Dau2JVY(s%{SKgxYhWEU&THkpy zpAS(Pp;@_LNE#y;lFvnAoFOU&JEM|Dy{V~NFrv8w$pgrx!@-3FK6rzz4?Qdg@)R|1 zs)?2OeF~po;`!h$9dp8^%eZ6+Tnvf5UjY+jJS>vr=aCo3PBf>96xy; zHhG?GoJ|d>Dus>=l83v!seITrLeeoG+YA%4UhHtX; zX+m<+ITQy6nFhlWeSwhV!;&7zNyrYfL{rpZ>;S4=SRM29-VbK8Rg&-KDzLse!gvO& z3<~(=7;BaM;X}ytn#hy<0`B$N4CG3>lDX=?i7;+7&A&tNC*4M#Kyo#+Es*<lE2>VZ*Xqcv5|qj<}~bI;m&3(kC(o4NES#52DqzL$pzO!Dt!*qEr#v#%y_a$#FI&Al%z5e{aE!SFA#U>DMl@~Wa(sC zWUEa+-F#MIq{c|^w4t$uqi-@+!gWeu3_B6SD@UJ5cdk#BK5tBt|#7I%^@G;|6-<30m)bkyNIj%v`e7m~0ow zLOejSkZV;T@j$~nd%^rLE#{x9PZXiUP9*MI{|Ny>I5F4PW`A*n z_ZOQH$G{;suG?I`1OC?jVl%!K{afvIx2`uEMaNM4-G&m>i1_L_&;2dfv;`|skd+y#HT2U|r%_VXTqc@h1tJR+TNJnY;@;0_w|;1P68><=Wh z+|Oo6K8D0NcovOQ)fea=B>GFDnw zAEeCZxH}6K{-wr)YejiU#j@B1WVuzbtWYe4lI2p#l1G+L=!I-fuW)&65%~||V8aB` zZiFWYnp<`UEA#nN!LrThBx+>8d8o{WN-Uab9F7yN;XhUMljLWw=Fo!O8>6W^Bn6TV z-$w!4+{k~5oIuokE1a)lCa23*h5L}W+Un(OmB8)XbOKe(_afts1MoHK`@G1QbU#Eg z?^ZER+iUI*k@u{^-6Z5;d?MphLKO~HwaGo9pmFRImbPd<3V7LpB9DFlsD0@SWSN9; z*AH5Eqt+b$PmAuOezVzLQ$q_?FLr3Y>yV^qz6D4!G+(K5 zW=l5)a%zP~I$Mls08yVS?-d=LuDx1L2DrPG6c03fYZ4M80fvAZW7dpXC5z&|S-UF#;{UAHiD_C^B4FrNZ@o;Jf3ffGTDR3(~^(wHe zl`Kz6mK3l&PL?+%i@oM5>6Leo4n;O2p3yPnQj8vj`L8)AN|(GTf>(NQ8csTa|K@W- zJ$RTz`g==c1_fWK1Y3ZEP;6)vb~USiqSa9Ic(BM27&3nUsK#&e*_>F9aB;$C?TEEv zQL@`30+gKa!^`Y7>(R_ymDC|+JQeGb>jCK17icSe3w8fahrO~;l?HzPswqK z0w0O6a*1-lUh{WmKxE_6a!rCXGnXiX@236a5+xC*!9tfP4gptP&Z*K7qa0E_{@+oC zF%P$Gb(e=n^)sRU!GMEY|j5>tpH#yjSa#$`E#OqD_s8L*}+Ax=S(D;AfM zak{{@u2_aM8&)jSPW!r^Vd7z0<_aCwjTQm$9TO~gjii}|LfaCOyffUa^6Bm0^_e7sRN60 zHef=m8G}s8Ul8q2%|Yy>SGX{kkozscEjs>J|A1P94uOq?=LDhmJ3yjN&x&M`-X`x3 zLFXzc=@AmeRPG^hm#P~Zx%)~n#eyyACJCSDQ+_uBo-jACXfH}NBi}{AR!Qe;dZnwX{`M4X?aCBjhoQ-F2 zHjY`NoQ-1@Z?EYMJByXPy{462|;nG~AHC)1ST-4JYQ`{eXa3f5Wk5 zctVQdbEwvk^Y7lr1R?1^lCHxoQj83fXNKruY}m{c2;o_5#PjV;{AgL@G$m_T8=nq7 zo)t%78OAn~A({-e$uq7~QwwCzFs{ZN1KigLabm^#q8zGg_KH4&Ct`@>4=LOm0@n+z z@;lM@c9z~Fw-1t%gph+qrQ*IXL_)5@iTSsAmT8VCTuvzJu7%Oo?g<7(R};PBpwR-? z;gKWz(y47Fb96dOl{^M$)rxiqYd#+^X3^YBKnrK$Srl6RS3bMD0!F(7?@bu*V?lwg z;G2apv>FK1K3^n@9L7g7K=25F=t;9lU{6|vy`NNvvFKD`Y~Sg?AT*{X7|o1akj6(S ziDHg2d(&)ZoqT?mx!wYgHIiiK<8EA!*4;QUzYp|2d^<}J`*9`gY)k97ANPUWkDIR7 zPC$_OG4mD7++YZv6$sjO`-CRdp90DCBL64GRZ0(3Ir%Bz&`GcF!`AVAhzi~#xG)~m z1%MkOHhS5Fvn12=$hH7XasxO`B3Fz0v{=oZ<&`0i|611%hdAGo=X1m(s$YF6*h`Hy z8qG>?@ePyPrLjgo$kl7BP^E7To+~%QN?Q;SOBzhu4~YILY8*)3avPdWV_wvk_dj4$ z1^2J<-jMe%^ZsLb|2*#-<^40f-z@K+;{8kV{&C(v$$LD3Y|g{n1tqdPW1*PGRCboN z=7Xtp@WP(=%l7eo1=JXzuvd)i{-}Wzb%P>q2XO$2@J14Ql9;cEPl6Z&1Shsp!COI@ zs3^CA@;eZMa)6XXNwL@XM88fpOzQijo@7!lkQcok* zA9X*Fa(3Mf2z8WOB%FU8;>1g~Zy>7g1bXYQc;x&#p0nWyv+j@8x20fD5tZGR601@X zs6GB12XL5}Xxg@vL}4tR$>KN>Biec8aq?do-+_GpOj}2?AwQvGxw3PxJ(vEJ8OTob z;koYw#DPwFAZjW~2*$``)>t1Zk7j4Ye>@L*Y3&p8a$SP+;&>jIg+p+G8F)6o(W)Q$ zOn>Ja9D}@5)DxRUM>%YGV4e%6B-sBp40XgKaC=QGZtw)bQ#)tcZ=TxZ0oX@zSMQH( z8M%C_WqmR-SO0GDH>NBf?Xpj)tNz`Jk{cU*+<^$k%2gb)b zgXzv){;jyRr49OI=}!}DyE`V=M#f&>%VmEd#^0D`e_>ahVRhAi7HNOsXu9)2x^p{9 zx&Bm;Q!M_C_802vzKKk$?Y@+{gZmrjN6rH%`}&i>kzq}FeyqPSZg-v0$^JrVhd$}BxkxFgKw_K%O1!Lsdf728XM5+3st=l+hMKVsOcjL`$>4jwZYbVwh)aY5H@ z>4~fa;;A0NLw6qh=O=Yh;uglD28Pi;|r zpO#3y{`1ZvZsWY2n6FdmU_)hJ`wLm|eej&5df#H*{;y4Xmn}8Bs@`#5Fmyprx-$=G zv_5;obW~0E#eUf6EtMa;{X@xie6{I%^3%TlqVkJjfOHH#sQl66Du11gm4Ew9QF%Cc zc;)HCKgp`{#2L;CRqw|!pItsT>uQJ8mMDGcN4_!sCRVDxrStN%c)PE2b;A~irBQkHT}5bdk9;!`&(kt{SE$2 zF8{k}{`Xz}H}R|%2QU3U`+rG``?P*Xx3oZ3{C;=!mdG^t(Ej?j;Sz^#_$sIc@nwPd zTmO{}s|s5e9D0C2mw!Yj|Is6jafY+rf3&`#le5wPOZ|>hosHOWKZt!QS8Zfxm;azE zBJz|p|3-K9*2wxDR!e=FzplQahvjYm2hNSSPmBAYzTp&?&pJGd<^u0aT)eSU?7VH?zIhkdDBD`v&-vslwC6C=|sSJ*6y>6Hk4>}8?Pq!x&NtAX5KDsY>TMbA{fQyl6F}V0Mi+rcc>>vpBKjyyO>j&;2RniD z6Zr_t(BV{vT4H5|ExL45;8zaT#zIGh28 z!yYeBU)47_^tg?B90dKW*YAV3ePi>)eX4iasJ|pLAaKR)ArJb&kw(4#vlyJbiqYc? zy~`eU4`)3o^*c_2tmupVBQDb6j=4j4x72(5 zb;x#>ZoxUp4|FGX)apEO9{_c>+wz@&n{;QBC$3I+Ho%=>oS${H!wtVLfd`Tqt}1q? z;H%tUWTlScz%$1};j3JSH3@g^Rj|^{M>xB6{~MFgIrw(f5Aaowe~-t%3(n(-`-#<< z6o}kLPvtWagc-X#&>fGB8{xR9zPt9qpeJsh?!+P(wrGe(6_LBGvW482pzC`4Urvlj z`|zml-vR2$I=mOHRo~nRxsp*cI0n5=<&dxyvb;~*0bp>A`@kc7SP#Mm9yGC#N&8j* zIu+9bSnelCu`iW-8y@UMS}Y!m+vc$p#^{z=u^x-d;jv6j@K~-&^jLC7g}5>u5a&5x zHXY3UQmfNpJZ$wgaqb_pnH2qX)0@x;&=KR~Ml`D%k4*G9R783n-41q*`$dmCBt6ZD z(YrLFx8WQj=IQCW$QoBqkEm~kw<2GcdOhxKJr3>*x2*pZ8Q!k`Y_aaI)O{uX#;s`y z8B1!%S*nkgEl8_Ax_H4gdhKNy7$SHE=1M$bSbsfSiSyXKM&ve(Of1CziC{=A1C)Z5 zQWb^>993z)0Q~-K>&uWsNU6PcSjM1@m}~FYioM;<#0jDl_dJkW(=(Q|tW~2rveIus zl^KoO!O>iV7%Tg;9P{M)SaEzXz=Ckfw+e4j7&mjRxZT~6$zL~nx4ywNGmF#%k#Drw z+H<^}ztiK;b=jkZopnF>{b_G$daxd+ygOBH(6?br9y*BXZ_;afh@4X2LEj>|isj1tYrGF>oQY~;Y1cR!Q|8*NcnfS0??kV+zc4OX zZ$#>=Fh@&VZXt-H-{=&8J1uuv^y+%6KKhr+_x0*cIa?#NW9Sq9gD+#Ht$nYrrJv*F zA-o8JGW2a&W@BXf7>cG~rwDs(cXQ!^=g>&jpMo`xp+Qk|{_@B6J_CD9|Bu?+)`7jh zz*Y^a@h;auwaEvNtbdC39=$ol-Z;p5LVM?o3bD8Ae`fENC2jWRnyJ;^`tkNol!~4s z6-}d}Z&1;do7(K{%7RaD8cRR1*XUyX5wzEQ4%vEOyraXB3!4pXgVf8Wd$&dmoB|eu zRcjB3L;OHMX?1G_O^Kdu0OR0GIog zpMt?-FVmfbyRqg0zA(fW9w02o*oUJi&h3H7Kz&0DV%Y$OzZ*VdI8?E$OQSzBfM-W5 zWM{HfzN2sbs`Zenxv1KWRIQ@E%{dsamIir( z8jm>wQLC}7VMa?oCPq>J07Caqu;KO&d5alR)UEOstB$Cf<*fs^0eOpQQ`B;Kn~2+` z@^+M7yEwy$MbY}UR2}BTRzNDvs+sRHi^Vnd!I;~~SxZyf{x2TrhXU=$jBwnPg(9zBy=4g&y-RdtS@@QCB}cDalp&UZUm1f% z*~nYl>j2BvEsa>qF}EzaZOwY3P4rDrxAxl387)tt^@p4R5w%Hn?q1aySbw^@I$wb^ zN8;HfdH~kE;+#dOzvG=Sd(CwkOcLhruM-!T;E?`4);H4idJ0gkLEF;(zfT(dLq&;n zjf9qSSIRd8;fE>4t$c2DL%KslSitHe#a(@D?83c#F5g$Ly)Hqvu5tUT!QjN&$S)xf zPKiwxZqV@=NX!WxQLoKTV6Xaa(x4wES$@Ro@dCpGG3Zyn2{B@>$KI9hFuFmDmKwP1 zHPU70@Pu1!@()PX_hG==h@5RMi@IZ_;~R&zy$Z4AWsZ@E=8RT_GS)C!706q93-@i| zL$QcJ3C=nWD%-|6sKxhUV~_EsG?*~Wo6YmSa~O(?cxVD=d=VGuq=&e5DZV#Dj%?UN z!Ya>$M`?wVFvN{<`@#09cxzD1@~?-!V($s>3h4p$r3XB|h7~x^b@8oKS)WOGRk8OZ zKT2zM?h?+r*GNI`mO2?IQ6FO+s@Jm4aG^=W!;nptH?=&dTtu`d^)-~f7&7F;2adq# zR_H}|LDx3~1(@+`uW>UC#=SA~t>8A_7P=X`(cr4Atu4Dl?9GKZT}Tv3`-GI&<&bzE z`FofK_VP_+%%955v?0O&(k{=3 zC8HSCzu6hH9WEO2@S+mJYGf^&EfeOx1<`mvjgJ$&}d=T4g{ceZ@g zR)Um|Dy#i}RMWUg_7ves;-S^8Qm)+87tw<gR8>Q=1b>{YL(8^gH~bsQ3R` zzwJ^EohV$tzaRTw*l+6pM!zgfH?-^VN}t)v5g4mGZe@1Bm6b8d8-9IWgqW6h^&|h0 zD9A9FEY?XXGa8=#MF;S*3!=8Xp+<;ZMo3rMxMS*MTrco3K4X*zxi>n*0j&PS^8(q-K@Rbtq}i zFRk?zk{EjBM?B$ceiS}05G(Pm33s&u9hZkG)b}{r7<>a0v`Gt2(!{>UhsJ55Xzqdt z`(Q@jHq=VvWSClPsjUB_`q19-5PqnV!oOj?Ui){4_4@ti)_U!v#6OQ09*oT|K`x>W z*K9x1^0mDmWl6P3i$#HZjenskf&sPJYdq6t)9`+AeOvjD$+*&Cykh9)PAk66Xe1t5 zr911ynN{`hfx%1n4~{pQ+6uztaE_dz$icw^KKk8-Bg(JmSAN*S)e?=$N16Wkcw?9lfP>@u=uPEU zF2wm&D91Q~;V-{+_!HwfAH8F)a_#A8IZXe*)dy`eRz8dJ&gHbr{~@=z4jON>Ik81) zYk7_Z4FcL&Z{qYpO}b@Evlm(#Q9!m;7WEC;e~GQWJ`(G&GCb|gEz!d&*Bv(6tDaH#T(tAX^Vd)+-p_^oQaRw9Y-LmHhGYM@d$p@Gk6~_ z3z+kP!G^{S`(v=3VGNRNRvt`T`2ns2Qc=gj}d@eHYHCmX~CSMC}LM#v}6OM8Um8eacL6vKh6OkAv6LrI8)|6{} zv5%4TcN`Q0!vjc+;cbd9oj}hFME&h-p^pLb`YEP9d=t@TWI>H)AJ~*vi0#ALq%Bt= zNA-ROw+ZpMJ}o|$Upi}i`x#GQRCdElf@0IpF&i&PT??Y`0Ov82e~JnqV+3FQ0iK0=@h8l2jcc<(03C1Z*_|e-!T`6z!{)m4tBH?AS4$RIRsOM17FtdEnncx z9|}B4)4cik;ehhOx%icU(h>*0T-i}s;dK<2I4Vjj%k#VfGZ#NKP=2+eptQWWVz7f> z%kC&G7inpwk5cfB+Jy!D(ssxg?8q(mI?BA|#f3hfH{XG;!(LFBj~n0oTp#{;AqU^3 zy%1mE?#L@G$uDH43QA$VVy|xu@0~-#RI6~57MMEamF9!9vciYz_;R5urQ%DX7kD92 z*@HrG34?hDgQKv*QG}{eOk1&{dhKcBT)g9ef1 zRHnGp2fq+j@>Mt>vJiggC;$NkqID`t3w#UV1FDYH8t&z&DD&pgxsbJxUWcEj@Oew5 zgNa`g5H(?@EZv>y$ec1hYldrDx&!wa)23YFPD@X7jGF~wy6RyL*W@%u>XgY@)7;~x zXHA)wkU7YaljF)nj<8^c0i6}@{}xx$34lN1-7gygIOR29iP)NWxQij`m|IXf?VU=9(UF(q0)GF z)?^kp9_6_l8Lnwr?$qfX*EC1Q^l2GWGKDl&EX|#n>T$UzrKb&bKnWD=NWUa~a+V`g zcX>Ra6@{R%dX7tnj;?VYAxsp6dZxLjrKe`GLTz`cup89#40dE@q^IIb@CU;j>9B%p z+N{B}2n1)QPn`}X5LwYQ*Cf}3^h`&>pV$SBk~)1_`Xp)$OJq(Tmzm|xnx2*Jm@s8Z zS|&w7d}jKzOWdjHnHM-bQ`iLK9n&+@2cwWImna@mU@wrtJ8pWWTUgFLIV*kIwCNdH z?kST8QII}m222BGUC5m#tUP71Xj`<-lxedlm-Y~iFxW9ePX`{YJz3h#MXO}OPg1ie zErb)L!gI1hD(je>jxTthkUlvzojOgSpc(GW^g#~SG&l5{K&kYq8LnBPj&K>24mQ?I z-iEj@%#Aj6xW_wOX_r7un#l}L$aE{OnKGV|GN-5N%KBzhj~|avo$DKuS6YlH>=>ZO zlQG_%KgKb9^xVW;Z@$xe{>Xf9(ukx{qenQClAQVHjYv%NdWR^u5qbp>EkEp?ui$BCQY7_F?CvI*7Qqe%$#*;?p*vvLBYKFg;!izR9sS8c2#+W zuX4e{s;jR_bPhjnMAFFfM~yyrn8u%@8Jedtgy0tq9C68x1bFXxqef(>X3acjP+~YG z$vON46#S}O4sqik2J3to($J@rj8;h9@RE z2Rp*$iL(AX*8g{`|L<7;-?85D-?9GxA7lL#EbaJPa6>q}%Ry)G0xY1MSPmvShdG_Y z5=S`_6UQVv$0Ru&x%u-P=~ZPSJ>d|q#^QARl8w3@&k|av0!{Zv)n9hsD{pk(eeK9| z2Hick&wt7iFSX3Nb@Z(0BTf5<^>%iv3(gyO-n^c@XU_lI#OH2)?3SPNdkpRV(Zf@I z*>Jl4`~(Q)SghppR?1iS>17z3y{)Ake{z*m6{_Eiz$KDouL-B{ZFYmW@oHgR1 zRZnzo+E7}SZkb(u(u!xln7m=BGyb#Zg1a|e*L`}af6;fo%Qloh^Y>FO`2CqrmL#3D zZNOulKECIUfrUGLhwrK1HSzHM^@aC*@%ex$qn1tBaPaxvD*{{ZtG9daeRAQO4|b2Q zw4OVwba3;K>MtHGd7{QQ@x5PNuYLUZx;f8h_N@MJ`Ogd1?k)Is+SH3y#SDLLNby$Z znz3=eu4*_tV%-M0cGx zXi%?X!*-2d+V#b=2W}rYXH;C@p$E>{eCe^`!ISp>`_B7L?lCI!le~WgvMRcI*F3xM z!dJRpvEZwx4@?-ked7%mB;D9+>EQC)@*@s=9yDJ6rzLURs}~oXw&vD<9BnKMT)Z)H zLsqAUrWS3Bopx}~sm5*Z#60eu9^dJ%J?A*Cnz1w~`iGa^d1ZLn>MLRz8h5>PO8vv9 zX0CNjwH2Lz#$7Ep@AWLy&t9Y7^Xc=it{ahe>Gm!E?%r?o8#lQ=pZG-6;_MdazejL(Trt`KQ^e+g2o;k=Os1 z;D(jWuif}bOHszdy|3Q-?2(6l-f(Va`RCtNUA6Vz+=1V`ebL!FI&Z9t+xF73cg|?p z_tu{4KK!QYosw@CPr2^L^`(8vpO|;3)1#{z{<-D4ysl68_<2L*s5zA)~hH#WSt#dFT}-edO; zT0Cq2FMGzUEqx=q&&&xESDczwWZVAg_w&B$a>WIY?WkG$^t@NjJ$lFQ<=>ZFczERL z*<*g3^2j?ke)ZJiY0*>9EV}6274xI+x$-sFuWLW3KJ)6h>rX!Qt$nlM=bTe2|L1M1 z{}cFA|EKTM@9FdOcltX0oIXzfrf<`)>C^OQ`ZE2PK1~0m@6vDSv-DT`D*co`O8=y9 z(l6ciNoxrmbmb+L-n&pQ{ba_bwQweq~Go^7qI@ zFu^i@GL~dxu**?dl+R5f?5|)WO8lUvLozx_DvRf0-$VV*9JU@3_|su>!$Ps3j6!Vr z@WeJh7|cPs2I&%{tDX)9S0lAyFSw2=c94%EJ&GOjM4Z2Cz~hPxqexwFc{*q1APS_u5!#gOS^!HFM>AO*GH&nnQ* zB7JJKkVt$MKI?!VNW2~$Q;oATlvjjL1MqheKXHY%I?@yESO#IZNMC`Eeorv?6cHWJ zp9H!I^u?rK678stTwzt&MgBK|9(C`D>H9%n1^VsG-+}z@sCO)4&WXw&4Eh?-M5zmCy2B(J{-c6Qg6(P!E_u)F1SO)xqG^ zitdVzt&Uh`ofPem_I?ud<)B|l`ec~SS{=cBn}Od4{9)oJE<-y_jZRzzKM zuR|;h&vy*?Sj5H?>C+Da=7YYFa-naiKJh?Z2zmqP&yhYZI;Pf|9v!F9)%gC%Y&oP1b9IS+5$<_kq4$(djSL`(C805UX*(TI4hR=sDn51AiF$ zOFIgQLLSR|5A-FE27~3ym%hR}lU`QMR+4u90rY*K&muy!L;L)_&>jxN{7)5K)w@+b zf9w1Z=;AlMRXZmtKNx{LS)ivpjy{ZXXqQ{8?&#Q?BlKuTZKNKZu!44RMUSfPysVQu zI)#Pc_p|X?fqb^L!QeNnS6jY|nJ@hW`9%98UmeDrdI~bzzt&1|vi)&WhA{{sy7i)c zj{!d)__4&Qe#&<31yijA{xX^@eOafeH%F|9s_r~BI-@r77S;(D^Ir&h10MAaB?7I^ zg!nAr_W|!DLgC|aTLe7Eyca2B;<8TFoiB^dp-9RnFD~Z41AMD71~QMCpZF(%e+l@r zL-6F;416Q-;vVHOElA>`o%RE$!l9lWv~QT5D5pD=;8`y5Tk}f4 zl$#@NvDQYm>PNm2;A?y}7%UE{hcHc8J?4Nf7Gv=u?coxo=_JI&L&;;f7)d;@MXXk6Q9-=hd&0s0r*JPHw6C!@O79QWRo9q z5Q!rwr#t5)8-qbUN)N@y1D^r>>BK{hS&s{Wp9wtu%)AEUCQI@2OX}&z9(w;R2o8>M z(Fv|r-(L}h)?vMCz`uG^Fqlap>C3EBWJn|=`o+Vb?*sh~B1FGHoVhtd%A=ID=)`56 zQrV;2(HUft{rqF((>G(RBLZ?U+A!3Li+Uady$bZd5d*n5Gk%SOJtAun#1fW8L2g=f zN;TLt@(;$GtBLYdziz9S=%1lA6Z~_)e{^dw_=e)Y1sX`bkLMTd5B^o#aqO3N6LD#7 zyYb;k&>Ju}dmZGC;?|p>&&M2XjiR^4Ef_%fKlK6qMESd8F1U(wyYT!uGXG%E6EMfS zMz!k->xAf77sugcVjS{-z8rHtF}|B|l?H^->0d>l+b|crk@A%vu|L%SzXbR^$`$=? z5_=p5SB3^M%luD*uc0v*g!{H$tk-7X>wp*jujVOBtZnm@FF=pM+%vRX<~s)ba^O44 zN4@$XU^aoyUq!%pAGNI0r0UMKk;mzk2EKi}aP$gn=0*8)fRBCm#Pg?XL7xvgroyck z?Q{q5Ilzb3llUirpVN5;6Dal??C>pDC3$ie-oS+ zmT}?|FTUXpDu^qG3gPM@6U`98N7Et|JW~lW`+kBF#4(8162)k?^#`gvG^x07eoS2E zIJX*Klf+B*4)kx8pMJp0^o>3e)Dn~c6MqP=F!4gD6xS%FA3}(@%<_H@21|+Hcl+>y z{RC{<<&c7{ivF{L&2nU}|LgynzcX(B4*7{nXvBB_badUU+UtImKCRLXDt%j}pQ!X( zmHw{MXfbKhv@=vXRHYZGbh1h>S80h#uUF~KD!pH&Ppfo;O5axLCo26`rN65*8gKXT zIzy#HReF(1C#&>wm6oXVdX?U+()(5Vv`ROq^lg=XqS9|w`nyV_#o&PQRXS9q7pZiz zO3mN3H-E?8{M~w~ecNC2ck8tYsi|We2@@tyALJM@)H!rGAN`DUI-N<5gtBrR9xU?a zR(JkYz{FO0IMyed;S7ux@{~S_0bs z#FEJIKo~~>&iH!Eac;B3H*!QsMfu&Np^`e}qrj6fu!l180ZfRTmpdf4+3RY!!|~Z$ z=^dFXs(bq^xg`|~z2(`cgK7jbleRXDQ|i{nXWI4r9_=ND)`4~WPlt3RhYa^&(t}zQ z;c(de+=}_x`Do$t$~+&A&uVAd+Y5&!3&GNXx-W)t=3z)E*S-nE7L!@2_LG(+`@TyK&E{q(XD--InQ8R zk4a`|X@8U{AIIbK=6mzC{-^%sOj^TV;T5H}>hv8J$$zSo$kM9Oa(pq%U&^ALfnXiV z`G?*kt)&gYgzqos!8;LUcm=_$@jFuga<07jxkW`@1URi6qw8PJR^iJn_h~OW+Gjb= z#W1W$&XhR8sr-hg<(2cS2_ckt%h{C}Ee=a`YlrMevKgAjpVeNAOnrJ*+LRfSwY)Hb zd$OCyyxo_ki;;00{#vze1F%rTisoiOtbRp)HU=^;44Ez8y3k&ilwugFG*A0lLL$WA zR%^z`s&SH#kAbl(Btc4H>DdaEzJ!kI08|^Y52Pxj2a!v=Ny0oSEsuhtC;_DZBEhyJC;YM&(1{>@I)-p1&W#fh+Hwg~o;sCs8U}C0p)f^l zm^7TJ*4~vc^9UK8Fia~I1ie_oAtzmaXv2sc12J$br9_TKIo5KHm7Uj-r_sdk!+vs7 z$Wd{MYz{e0W&29`l2ge%?f!P?!U}}+Vy|Yj!=ih@XBKFqU`sl-80oU}ip#Wx?JyOE z*I-O)hmxb}`|WVT;XA3Ro0Nr7+NX_ZhvEcrUOUXZynOAwb{HyFR=Q9-PfgXNFuWfI zf_7UwWN~GY_IY~@G7~#aP10oMipsg#?d>ougxK%eVRQ5IwN$ign?1-!>_6LKE9Mtz zebux~mQdoIr}^7qic1%0Z??l=Akpkm z);XdM-e$2y{0+`z?Hq9ikdd7uHWJw>Vk~24R3x1wGAe@4*=$kP3S{nfOCkPRE%2po zD|xG=McF#p_}C?4yAWXIqm8IRj{(#9cF6h`U`#~RAlo_=V{yNT&Ts9n+4!K-glx9k zLZBGiQD|-PNX}T>1IS^SA|Z$EeA1>#D8aUlv`h&l+HORdmKhQn)umjs%#!yhU3{A5 zQhBf2rXpTgW=kl;b}^wj5}Ii{nb2ht%CXs4q3qX$#`C)rSIpBaId1`q=)c@z`i9rxYu#chuqWSE8$nz{^) zb}&PC!42a?4~80Dds=P*o3+0!`VQ2&>q!cXiSCb*yPmAT*yz*A+)IIu==UMAYi|W6 zM6ZX8uBRw4G5S1G`zUZ!G}Y@GtH6|KA6mQXX$sV%S3|?DeHEAyy#`*@wVwiKMz@f9 zhGiELYyX_+$ElUW!ozXa{_~?Zl6sb^QCalatl&Te`l82EjRZ@Xs9;s}CzL$cG9F+= z|0R~_kC}OhB}>3JTB4^=&7qc0fR5;2ZHZ1{_TiRq1-#r6J(2JQ7C!8b=)cku9Yuq= zEHrsU|5cXg?u5rFc(o*AAS>l66s`ZtPS`RIbsrTxjPU!iov1B3S@c(yz?UpZIghGxPlmV zR(^$f#FY~TwrvuZ;)*F9&vJ16V zw6cX$Z*Vs#f=wcgy;vE0i)-J>j;16W*FI7A};oWhBurCSs`2%ngpf=MU9g{W^S zK>@MF9>J&2FoujCQPeBq)_vD&vD_}QaNo${v@lPZ18lf%bBILy2+64wnaDnRGAe&6 z)*b*Ul23e2o3B}hGcI(ASn`S5HS4>bQXd3|1*aYetabpvwbdaKZ8388o2yy0C{kYp z1dA{f^c@cqS?-3(EpJ?%+bg91F=dzpv-?Y3U3ola)r=KMY=lNGz_-e z5yd_YSQc9&itP%$WwAA)*aE<^*kz*F-GF7WE3I>tOsy|B-Yi3`_|sVyyIPUX>@RDZ z1_oJdCsFLRfMv0rM6tBGEVh#EOxCZb}S}rve@S>J(NtXFN2C@ z4~uP#6tyi=q(=wHVxLAfS?tb8)|SgOS?tb8`g3Xzv)G-HtnIUaWwGx>vbNFKr8~0( zjFxu=oCdgG#WkAcy-4=a)dbODCDa5+>ev#wM=8>06{K2rMP|Vs=*0LX9&z>M9;jt5 z)qhhOY@O2hgMpGG+HPw8hA`L!z*6%!guz}QEDZLBFxUV{mYTmM40Z!xsrgO;zeqYY zZ?sVJlY2_dC3G<$sreU{K1uSzj=<)KO?zt3LM$eRhITbIb*0T`T2&L5b=OMBJfP>;nRO z0kK+N?pRy4(#k%mf1@hof&|jh55Xt(uMqk_4p{16A@u)_u&{E4&_4mYl0yGVq5s7I zrT&Yp4ka>;aDqO@D9(i~)yS{@O@<|@Ea%OhfR{*B{D9f)ndO}=#!6w2^Qn-zvUOkrMp${RvCJoLps(=;FG%CC3G2!eN(B+T|yV` zqe@-w61r>vEOfa?=<+E*smsF_ixTPBib9vP>a$wtlfg$~adoZO2L*N+v07g~f&c}7 zmP;)iO4L78`YQOOmVXmk_QOu9)bejaOD|zzvA+o|?*S~d^b0Nd{9bB#ho#2UvIvD9 zYSrf!p%1@NR&y)^B@rW+^uU#Zl1EBhSu6HdfxSySc<;*%A z3BJ=s06yDtB_hv^Gf^MLz_W$AwE(3XO7bScBBVDrUBCW^6`tM zq%;0x%bt;=N0%<#n-732+(WeBCji8ARcO0?F#h0L1Rkl=1ktMhW}e=BJY?zC z6@NNKSsE4VH!3~GESSbdi5cYxj0jp^K02~|&AMMIt$#={e>#+Kt za(xc2R7IW9j_Y#4wUPr@|1KDwaun6qjw@Sm)iCh(9|o@L6!q42TseZv%Q)1ZKc#)Q zqCVY@D_3xx$1u=;5x8Dd)Hm93%@thV3a$si^`4>{?YQy;*Wc;v{kMVZu%bpOBT9Sa z3$AnNB>fM7D_T*{YRBajTu%wElhLB*D(cvFTm^!w9~-#;XmII@IiXc$b z3JNHW6{EGkIwESFC#=>1`mzDm1F8K@>R;~`oBnXy73R3ZYj@3`ekJiHSDm^ z-cz93>GYz!rvKXGBc_d%SI26uI?DVtWi?xF+6j-+I_8Gb zg(Auiyf%x<|3p3De8t&9R{s-U@#{5`PMFon>Yq4j%P2eW0S?cfc970JlpUnTz+X7# zgVWQgUt`v()NAI zYyW=C{>?arvg*>_k9ok>QnpJK?V|X|;9<_t&O~KGWUqaD(E9ce!y+nCzCFyjA90R- zdxUduQf`Q9(fdv}{(0Kn%&yhT&YMbk`<G)nN%ayP`x@Gnt&SHe)#>SA>QQ~t zw@BqHD6b}Mwc>u1vU<|~B<*8qSNQKIQ0JP?IzNqrahyj+_ypq5rkw8FO{!$@SS}e( zCF4!W7FANAN{XnY)|Bj1C40C;FT;zmaNVqz0KG6&K}sLAR$IEyq3p)@H@Ghmau4aw zXp&BNQPM-itUKeN>I`oj1ygm#LDd-pIIlWG=cjUB1^=K5{tC{k;2%^0x|#BwRq%EB z>y*z|(bwhF89Mj}CHTJ6jc=@Q&*I~t=VWyk=UnP4-o9i~wM;#$oE$kGPCl!gjB{Q& zsq^P@UOD-!a`O9}S57{wocsmlwUf`P5#pZ#C!bYA#5nn^b&_x8a3}F<(M3C%EzUj1 zeM8$2BGFFfDJQEauOpeKoctT-_c4LaFPlJlHLP|18P4C&!#+Z`naRlOhD$K}5=UNlNN<;s*NxA-+{H8>+bzg8txT%wn zZ!~fja3@`^!{N{*;O!udX5OwNYu!oPRXBb@c^!`JDjfMm2*-Bi@b@^cI$^sC#{tf( zp|M?sqx*De{!Z20OF63!*>pm*8^;Tw}{HW7?j{U21)kDVd>4Hmj0uRC3sqL{!N`T+;UpD!GpK5#{xqdP^P2dr``(j(AI*2#n^u>WH`0iNMvA z*O7ilod|qNc|FPgpz=dvvNXS^=xAv!;0I{j_mww#{Pp$_>4 zpzA+Wve1-ds*=Z5NfVVcnUZW(a-2)_Onf&aGx1pjk#Db~^_%{5)Wz^7?SMcPQMRtPh*&x~tQe$4S8n52g}+oJjX(4^?uUOL~tt(w<5>cn(RO0em~3 zn?+piRq9Z6r_}#*Nh?T=k52dSvU4?O=(u$cAF3Xqj6PJouFo#f{(+?Wu=Q%T@k&)a zA9Fn)hUm|YY9T%>nw7L-@HU;)^oh#ep_ILovRv(6ruaE!bWQu|7s5WoG0&$zf6~Y2 zwZd>n(pI!n(ZlbL>Hxiv@;Y+I-QJr_6ppIqUdwwRXSmD1Wx5;P!@^NW3lnc|Q}F=q zJL)F-vs$@6UJ7xqN!Ph>Z+-Yy@@_xXp#!jvy`N3RPWUM*IBE*c;ev}*!LO(wOwG|2 zbzJa-DmYFB3r#^i7kr`$+LAv_rl5ffPMpVe^rwO&rl64v7OH}=R1nTU9c#GYDlX{F zFP702uVvxSSm<=%89$DI`Wc!YEbp+UnV_{ZVm_bou3(c4uStIQ?aKE~L3pbON4Pw+ zL~}oc+2kaI4?%d?v%&)qen}2O^LYqM5`>2#d^N%RbrH77??>i4s41B|sGO1iMcwQV z9nDfV-S0{1NZyC~`J36=9m&7VXI#cNCQ#-j>aL8-b%q3VDx+R%;k&0%0XiS4y3we6 zoB!C2M&_0xxtXZ>Eez?ssU|o57V_QA@CxKdyVm~g+?aFePsWp6w3hy~Q7upBmb>|{ zur$NNb9k-&yGfAw9!uM>vXjo?aEJY!|7Li2Zm+ffYc5ChG`r%QKqOEKLlF`tT0=d8VRqL#Al=%UF8HYLhU>MuWepOwjX z7`uGqqFbn#_X}fdIy~X+zYOyj?y=t*<}uvJ-1(Y$tYXd#g^1@FCY!33u52M0D(N&* z*KST>gUy^(Zcbs#A5ykG-8?pp}h?6;V*vQ*$3(->x*xBE4 zww{I{kAV{^DMK+`z<$r5Os995Nd0C|OIatgfYvp4Dhn@Ap$H4>k0pJW8B~vLVD_^Y zY4#1wejjI6)jIA59ur?tt~>ogvT+<0g?3GDPxWr%dM7QW!Lo{S7jo`A$~l>QZ@T+e zu6DL=lvI~33&%aArK>IGYCqsCHL94WOs^`gmNHB?fik*LC7h-EV~PDUX79|yW`$}L zSg|baV+Pfz<;-4Gt=X3|`<0v__T^0XCS|xyD|MS@sb;L=lIct6PY=Fr=Uf6kYw6E; zr`HYKqHDU7G{Za4Kr-6eus7l1BvY$yZ?<;&@T!|ORNckpX866Sv~Pq}daK2@PY=>b z%b(8@DxOHG^ZT|GRwtdH@A3_d>nYy6;n763#x|0YxuG@fKeNVeph{BiYeIaxoM&&B z^X%<%p1NHw{X;TUx66fUTJ!C4p|e@SYcbz07g~O+%7t5>$LWeMRBn*tGq{2NWpG$q zJ3c>(u^V~0T`sipK9Z#KOTC_^o<1B}rE6Ht5>rEMxyp^#HJr0TB;3-R4LZaq64;&R&3A(3^jy0E3{*UdHGQT71e9E__UoM|?Z=lNVJ+!gi*>vSX&As-U+K^!bJ*(iptStQ% z-1t_iQ(O7JB7T zsVa(?=iN$N^EgKl)47A3qloET-73ma#B{FpYRXZ>bZ$K7C}KKyH|Ho~IyZ+#Bu7l= zzUCZ9OlQAy4reJuIy;xM9I-Uz&IZb=i0Nzxe!U14bs)d*<06V!D{m3Cvi$)Qu};eJ zRVwBH@tAAnwkzR`Dq<@r-=UIgzR;UN zq|Z~nV?8lMNTz#fo2qkuz4F9JFH+JgSV{+uye^%@ET4F8wp7LEV!U;tbuaT{UC4@b z8>)2LC*DZPe@6Ls6#7q9({uREo(skFW=S~~p)`&~E{d*{BJE>Z8aKV9QPs!q5BW9M zm*L%UK1*n8qWEXd^^jS|uY`hS>FXkr(L zoO`L{C-b-p$N7t-9NU%Z>QF9<-j*UwusX!cSa;R=s&V&9Y&R($itQwy+A*3NvmvBn z%g6k@wVJQf*<`F^yFoSJKF+g8WWcfgit;+P7lfFME?aT?E>NxK&~8)?s@k8E&~DPy zj?a(Nnb7uf+VJCa?sM$Tdo-2BgWZzeLOr5Ac~4E<-%#FZ)1HrZuVj;m=QfF|M@O=} z^}hfn5j8Lta9%CZ5swYiH_}n5I+2K|tDP59zQYadWwBb2-r>Ajpme_LCK;nY(=Ewk z7kF#scOtrMZc83N@8|xA6^>FP#FI{v(kX{-!%@|SHJjkjQRUFJl-CX&RSrEyd8ac! zG3Z{%jDz%&5f-)`lD=hV2BmSk@-76;AoU}}Ov>v~IY=!bTPdHVcJ_nQcv13pZMwi| z!w(|5%ek7pA$O-xcU(vw(Dn#ZD3iS*-rF6cJpIJLCVe>iZ|bQTUdYOhvtyx3oY9-n zz&BL`8z`?E_@-*$?Od)Fvp3aLJwkcy*>64G!)VX=0Z8|L_AHA$6Y2*lbrqerz_Tnh zLT7Pab#hjSgYg;Vb(LA_!s?A%(aG)A#QT!-s*`no_;;m~)j-Jb@;2#uoIHN+(tVj* z8+Y9UQa$a|)n<5(B&R(gU?X?Z@ zxl&EH80B?*_JsIAR6QTzv!^^1)uP_c$>wT(p6f=~*2%t^g**j~u#J=bAmx?1D%M$6 zRLK975U(JLcbwCOU$E@{u?@9{F1l<|&33ZiC86JoWJa^K)8%t+^VcV9%?m}dJ!So= z^oN%<#W~B#;%64!Ot(U-vTw9ypT?>UiK?xgtYXT$-*LaER1eU?qg1OXoAo)foaz2h z7i~-|>d02J-2Zg=#Y*uP7-;_ z=y8Ir`NETa%E&wMMH2Y$(I0-&DBC+RgMQ)}#V;qOvlA!uI=A!bQB>TfKgqH~Kg-Nv z(SP%BC5_C#P#Z%(*SWOJ4>uhrawdIUppGO zv}G+NoJL2}?bXZ5+Akm@sxQK}=`JgGxP<=rp>}S^x0xkNT^Dt74v;iVLq7L&mS(!* zdTu%OXQ-{qv~=Yx_Z=o`Pq*@LHqXg^n_H3XGG}%V#vR<(3AcTp{xGGum3<1Ab#gx; zQM%7J9Cu=;vxl;{vzr-WF-wxJZ~FbIq;n`v`z=3zIAQ<4J-X0B+1LI2+%Oqrn1=*& z`60oK4(@f-U&eW_nEawMCV%MS@=oOxGrCK*G?yO|%;@R%Aa6o_ z7v}Oqf*E0#ouh{YbNL~`j6UjAD%7_&cOW;=JS3RQ4+&Biz$e{$e+m9}>*44+-Y-LxLIhA;DaJNHD`bB$&$&31&=G z&Ut-rb#w1w{J4<^Zm@(+@i-gy!sKqKM+;A&;8z(y>6lc8BpmySJQS@qI8JU^$Ns=LcEF|A!Qrc)Q(v2P(yUu0JOKHw@KZ#AQb7xTDQ#^;#{cB0m>1l#p-{!J0Gy~l4 z=^vSP3eBDbI=V7?iOZVrFx`tZeJIc6tuIn^ifI%LH}?nZ*jCNdBn&@n&a_1_ok*75 z=+t(La&rdfRw7r+tUdTu0PX><>vL7texbSF()A>Q&$yXakVQ{AHCCAil=*FJemR>T z*H`4k>|la9wd)w0zrhy0_@x4F16zFL9u}=v611tZKXVYiV(qZHhjBbjZuj@@5z+cW z(q0#nJEZB}!NaLd`B%UxwtAi8fz+Vc{MF}3(IRT}3UU4hiOpK^{KuhhA$ z?@^B2zfASb9L`Z)I@d%wr!T)B!Cl1uZP1k+kxC|2Q88^Fun|>uzN)PErJC@3MYw@; zM5uGma*n!Q=h|;4SC0gtHXkl*=@s&h4U{(|3YT zTpgKkjrc1>mq_|6HX_1CMcDCjP1vXjIY%Dq+;YxQTXgO+$~k@c^$~7Yj`mbdzf)-6 zk@OihBKj$c{wvOrzf%-_=}t|rb2m}W>3fU`-S+fnwFE$j1}~vv+CF3>B3z{i`|Q$$ zt280!$X}g1k8|X&&h4d~)0bak;T~lA37Wn@XtzrGOEx0-J1RkMZb)5M6YxA zP|oSgZ@_R@aeS9)!kt3&f}~%t5fLs`gd?udgiAFc=ZH|}F6A8gt8@D(=kz_!^uOfz zo~r2&3vF~M71Q<(8xj2}ioW}mn*J0;e<|na`uZvEk4W>Elymy=`#IdLL>Rg`-Szs< zqELixO8=U6b^U)%tsu+?4^Ch8*tE{c1h`nx`A2bLA$Hy;sHN1T0nqm<2Qo1|KKPN(6#LsgD)g4Aw6zpe^uM1oTJ+M ztJ>aUj=t(w#hJXf=%p!~WlT*!5=(mK)taKGqBxIp6q}xE0e^;aPFH^Ch_+o$~nFH)hF&I zrue(k35(_TC2dECay`k3uXr7s#F>@+o8ecySGq}MD`{V@vL8~`>CJCTajUooeyIqX zgorPM^EUE&x}Cifm%q%E%PHGa{WA1&uMk~Z;?jQX&dWndIs5yLGk63IMfVlXI=%UA zD=vTA#l2Gv=WJm;E@>GVX!bkU!(Eis?04)S^IvhPV!wmw`rbgdTqyRtIQw(TI=vgY zh5_u~MQTtu%SlSxjgq$73(9S*T1{D9;Wn;tA7zIq%1f9sv}@szr`g+!x6|Or@Q(bp zgCe6NoO=nJl=9oZAedx0JnXLFAXXsn# zjyqB9+T|;-X(>v1N{#iMhURF19n%*+)Wu2ZmI&*3c z4TgS{$;=#^NoT19eGOZ+cQQ$m&IxO^&Y{}_NUs%}QRCYghEddi8I<)kA!q5`E^f}i zwrrQ#%HgE#0F|^8mQ2k;(^vV?YHALfwby1e&*2}P8@ois3>|wD!!W8kCx?v2(6W-N zB(3PoAfI%`wbfJu+jej}y5rO7B(;@xir7PxJ>g_i84tNUF;Z@`uQ2N(X4Gsp>q=(Q zG&bwjye@0jUG$_jI+;b&n5AbM$#$S&*ek&kDhp?l`!NE&GhI&lWKw5!B)z^|pkY7D zPCI3g(GE4ioy^2m43zq%6@#Qo)t7^9hJ8CxxJ7k{uv4f{N?>ng*eMEhonHlo8%x>z zgvL^Kn01y*=_x6Mf_`MpcciDtU4(o@fbTv~q^4Q9-{f z5}@KPdR)^?()n%-=)^q1O{%^JW_nM|bj%ZOC@F+(H_`nXye9OqZs>v1_dn5Z%$)ws zJqK4a;3~cODb*50s~?6w2coUCSk?&i9A&BJq%AU~+UuBQ>#@)wp^$hwV#Ua@D?~0< z4b?YOb53r{G3(siFS}e(FPRxkj93kMuRt?hO-wTHVgt-U?id}}P} ze)F&=?^d`pQ}!L1%_mb^bV)mONmd%PX&2Fc5P9Cco!zyln0GiKL50qT(O0~aNhry+ zCA^#Jr2C}v0GetiV8GE}=U(h$_gr05hMw%ZH4i=At%Q1cjPyt_v(ui;dWxA$`(DlU z&|~2gVq)#xTx`byPa*8yNUv{#o?Y>&pkMO>ULN{e$7x5zO8`4TivY!&c0YQq4-zHu zI$_tNcRVtjxaC9a=;Fb4QmQ@0&;)l$C!ZFL98)j(G>q$|T@DTnhTAnGVJBnuD$S3S zZlVqiIrDgb<9*ac-Xp8r&g$UJg#b7 zH= z(MD2w3nO7VmEbpl!bBCCSA%L@%Bt65B4-)s1HVi_uGa``IJdUCo}_ea&JlCMoKj#e zZR7gSFWd6kUEa-WLPOkVr_c2cW%xVmdpFK0Z1N7B_l`d=RFFmfLPj1}I;(~pf#_rkYPh!QtU9d!n?z*t>N)g?)kwlYgcHdQ9 zxaV$WJifwP?}xpmewgK-kX+T&aQrwk+>pN6zr|ZWZN;$0HFrH+IJau7*M4W&3kUrh zyw%f=ANM=Wc+j8W-}Q<2`*Z!BTGP)J#Vl6zR{J}x+UMR=?yDcnts8se)FMCkjLNl5 z-U5G`2wosrmq}*~CgIFuukInO*Uz|i)4R5g`cO%>H!$kpWOYIbe(!y`udotu_T z2@TAdURF5Ne{O@9vBcl%-5T=meB#hPu5Cq=cka$mUv|y=&4zcvg)h98u-(|p+u!<; zaA6sNU#xrN(K7!o|IrlxZSlAGjg1#J`X5Z1ziI1~0&kih-d6kS_~`gYxA>oV`&x(k zx{vxd`8hX7$9FIHwq9^-PpD5PzsT?O@*6CF)PJ(_jFOSw&hx3KRG0X7?>l|0U-os; zOS`L>=*jeDTc@W zWplk=n@4zM?|2!dBs|r>>ySS^)Hf&8KgVCTdmAC|%8ld~b4(zHb1RcMUSp2##8ECB zCo?q}vc3NXGwg6f{ayd2$>U-*)EzgDrvD3v`3L+9LZiBR-@D*geeeJ7KH>s;-Qs_@ zUJ@GE#XC3O?^5Hn+3c^Gd(zltyZxN{qDQ@-I>#RK?qpwH^M2vbcztZ+G*v=PFRCv( z?vL}|^S3-+AD>bG?hF2>^k0qNk0b6kUL6{ELa1MEXke!Y*OuK;_=3OmVCdwWP(dfZ zX^a25w}@Uld7}SL5w+P{-%u19l;a(~z#k)?oUyyWpL^G#gC~t0Ugq`pJ0A4rk`Ko} zqiWyvrxv~8=Oi%Z_%)${okIh2{hBTQ8h`xXiu@aCe0D7IU+~_!;MLF|YFz2ney4r6 z)2J%+mwLney^n?Zb@0lj`Hykf2X;DV?Q7hc8GgJ|SNTnt5lg*1KTLC?hPuBf)K@#9BQxC}E7RnQ3+@aJ>{!7O9!L@1>-XJK zU6>H$F~^AE-i@Jw6y$7w49E9)v-t8@Jnp|C(cS&ZU7!0+{&0Vr{|A4{bQ%hc{z0xP z)W`MS;<~ze>+=16S5gS?-l`&aqCf4R7t;}(>Hmoqukh?&`O%rL`G0+2W|?X-wO6%x z2o0gXddD~H?K5TUJU@qKRj(qR&Lc;S@Q$Cqq_^L{`-toOD{J~pnI511D+*^H`j_h$ zUFAIz@|V0ewQ#tfGrGv%cEr1E!_J~d_4e3QZ|UYDFJtF$ud&o0_Hg5k^#A4j|7-X^ z)Qk2*WwbPhoD%x`Z|#$44-(whIEA#s38{Bx{=4L|`%$~I<~yUrof|nJmrXN5kr}+# zq5V#Q`&#|d#=eiIsT1>g{PO@wd|y_Ei}CRj$Zw= z!lEM5UjDjw+s0S@v3^10*hi;(o%~n53|bT>(^}EDXu;HBxB3NRr_A*x_)Dk^@@J}8-@F#6XNM|u>elWm? z2sm7z{W|Z#ar3oDk9(hb+G?+TzIVt`lUQaIFf`qtC^f~u{jkNwAV@@%tLU#dK7@Y;>>>iO?S zC+3E%FEyL+PpJ!QPH+)uZDb})oi#||Gf7$ zeM9|;E6PHrcBQ3zlb5-q(W`0jy7=$xnOnv?8Gp*2@vlGQHSF}R;N|O|Q$2n@sgC?k z=@~VI?F){D26Z}Z+zNl}mfgD_^LzU*jIE~mQ@ZRf ze^=3@m2=;vcXKbNmC&o*>0RT7PIA5P9P^(aciOlzIu`u+d^#3PqR<(RdCy zum49UQ{u6B!r`}iQT))QD{J*UW1x<{lMbsBXIdkD?5Ckht0f#l2NpYZm`$@3N8AJx zmp$B~;a%^!-s)q2_Ksh0?9YGp8jh*swkN%MItsaQt9Q4%ggSNfu3=^VgwTL?W&U(; z{V^KvrT&d1q_ycbZ?3;{wBI=T(SouvFN2o2bNxI0!B2U${_}p>=%vG6_hWRJu=mx% zveAY6yjeaijQ^x`n&>Y5jeqU%qyCAsZ`}LZ=%sX@)$um@Wp|~y-erwr{2p|G7bbB* z**=A*y*9dR7(xHqKYMGBQNb|3XrJGmjH!e&eUw(d@`A=-+3S9Z7x(l1xu-81=D+SQ zrp#u4ZhULm96E}cdx~FQw(GyV?0m1$-@CvcMrQ?^U+~%-^QQRW$EWTp8@luqe~Y*F zowa_>(4wvW#(7@dBlSgPjZ?iRH8U-f#FQVh;6n^WfR4)yIs zgOm?uhI?nf>JJ-T=(Szq^$z8`GtQYYXP4KG_Q!QQx0dY=4auPfZ*9AintNeGskio# zP<+Z99F)Hk#Gs>dzB9azbogf89s)inH`jL?~|(o&i!WpW8L{9F}tW4O(r} z=%e2JS=?>v1k?Ic+gq34^(}f~ab%)|1a{ z&&Uds4E=Rj^p=aBd`{Q!;5D%yOF2GAzuntG3$W$Ei&|Ua**{nle4F3l6SW@S-_KjJ z-zRCY(35Ut3+&+|sS6Zxa{+d`9@ z#lyU4Q>(Gw7H+7CmpIThsT}p-1)3jAKa%~nkg7@7WAyShL7nhS+8!$9S+FHd3!qm! zOy~K?p0}3x@H)cZX|;s7HLn-16kOGOoYA+d^>`d3_IQgQtzT+WpR=FJpM{^272c6H zC2P=jj_(=#G5c-lQ?tg4ov}Yz3qF*3tbGyNPin~??GB%+?Vl1}j63=Kw!`ZgZ%0Ls zeg{??`pLXcPUKjJFn;h#xcL(AN!!wkFY~sy+S0l>E3zYvpF(cNhqsnVx6xK$m7ca|P!Bh0 zL007Q(6;o;ydCtzvTPG{dJyA)KU`j{zhTZL(8DW)4$As0eviM*yF9cbZF?)|;SDz{ zQSY|&Ev@J4P$sqyFL60f+(@2Zc)5x+!^}U_gO{T0vi93T^g-<{-qdFE7_U6xi^#lT zT{Cem(sJ2PQXHG_$M6Ode(;_*l()1WW!@>R?OP5il$ENN_HdqBKe&AV3|%m%g>t-p zfNzQ5jp|kF57*1~c#nW|hr`p1<#=*`gPm{FdA43oi(+^})}S-YT;1MkN19&G*bWcT z^ECtBCT$DNqFtyrhA@}oG59N0DLrPMmCcmIta+JjVphSn^fP%Sn3@$4J;dXH2p}hZ z+S_mO;5VK~zsT}m#{3hq!rRk!&|*GlTPxz9m^FS2U2msfKj~kp;~3_9-lyAOi&=~M zLB=8ZYvZ8Soy17c$45w)?eK){A!~Ozd8*r)!j8uy+u=FWX%cs}J}+v%KW05V9Qq_X zM_a0Oob~WT=B-+-**eZKM7?-i^4s|EykaW8g$aCkm~g!vKig^7$RDcbkJOub@r)jh z-_Q>3ARd$4@2b7?3DCA#CuSV;`pe~bT#n!9!JArFX7Gwa2S>alYO(5X#U~Sre$rAK z;(*7|FpuT9byFzexRvekOj)u&hG(JXZHWhd?-acO@Oyi!ZRs<%wBC`H+HX9nHC@x2 zIO1WfmX5bu8s{wEpJ|^0Y9qXm<1T!}3G${zS}|FUo8yz^2Sh)aANRLIpZlBrIU@SW z$3>{$+`2CQ!VWj6_Yyhw)7&r2i<{AJlk#cXT5U<6vBTR=Ck+Lcg;YFM{fo6iwb2Xi z&sZ-~r4@FI-aNg_bY!5!D%#&h&r zcyK55xAEWx=a&4z9m-q3rCqq8Saw&<_MaR_+yXq!wtE})b6jrj?@cPlc)-oO$>VF` zGHpP+9!2} z{#*3SZK|S&^>T~HXD52SWdCueX;}1%?uOh-MmI#15pPiN5EJaG{5 z!rh|R3m?_HB{VaufUjBM>*)G>*9qUVrb6{eOiI7$>&z8XXVEvW7cZ}9aOmUe^i4*- zp|z&IVo6OMea(?eNl;O}s>)eR-+FZ_DpoI9Lb@beLZ4Pi?nE6wKf#)$^azvIpy>8;>zv)4;9 z!lB>b7q4!l&l@hOtXWZAMOWLYxncg^VIqzBhGe4f8$X6@K5R@D`V*D)%&4IvmrwI1 zGNx=E3!6EU@{{c~^u69d&)W~kCzd6A`7%-5JXG`%Wctde`Z_&*_q1Mpa`Mcuy0alX zqM+c^;lqcY5*}1rS54o+tfp`M4h|2RSiPvGa+T5(sz9 zbN(AgrT(rpyP!XFN*&j%HO&@`gdsqey6NGA#C8V)W4@YAS{&+SmG#Ty`@O2o+E=H3 z@v>E`>*^|K2GUo&i4=k<6-((;!4>rh-<;?A)TMdSwz$EecMo%~Cc5*Dt+t;F=a%bn z&flk2e(5GR)HS2i-x6Nku&laHyVZO-_{Q2yWLDPH*VA{8lNyAzxv`;U1ud?X^eJYp z+JvmCnm(7@NF#AgwORv5(Gp1A*3g*L&8zCyl5_M8nvH_Sm)3O zjCnz0=HTbcNtnF)Crpv#wXelRi9XcaP+hmGa)pYcn#(GxiTz@N0Y_>6RM<)9)YDRL zCTxX#clyj|X<~2Ck1~mr-xz%P27N_EZDrMP+A&cwqM3El264n(8R*!A)q*>e zCRaVXk=WXA2&5fLW`(9%Tj!{KJ-=(*&fHp>tE!2~Ye4e}(tO71Zr6LCq+MmImS8UN z#M4XgNHrPhi}uZVQ|^m-AEA#UOkMGYJNor}AMY|lMwz{@@ zmD-6|5g!YxF+`Q?y@h5}s;a>bkFZluPHn=2d=U>m)sNbA@ru>7Olzx(kqxU)rk>}c zkyYfSTHKVHZj`prfo1;}o!d}d&(nqtjNcM?-5OeNMvgkU;;b58#7Kpg>hhS<_udR<}j-&s27BJdZqSfM8#Sf&D7r_Z{Ao{zw(W>MykMZ z5R5NetBS4orSKdMV?{+|_M~XEtm3TL%rm1?XU(jrP%e;l3OA`^uB%o(9Hl9{IUDW6|`$`CeMge%syl0#ELVfPp+7L zW`Y58S5_rbuoauiajmY1tGBhVQ4O6zS&1^Dlah+chLz+3HI*G`q;zHN`U-t$KnH%c z732>Moyr7Le)qH`TDdxrmQS>7S$*T8<}H~x>8vwi)1y{JZie7G^@69pUte9f+A8rn zPbUY7%=*AdIlZ11rKJhVNfB>$N~PJk?-C3audJox;=0O}39|ZSbhJUOU$IyvRqC%| zW@&vjox#~=vU}WA9WGj0OlPWfom$52ZQWvq)?A$_>-eu#YimLo9bYBn63(b9 zD(IkZeKm2@e!IFZk*|7PEuCA^=`QaFn>lJay?R~c;s$3`<4Wv0bzpd0aieQiE+S&> z65Hrz$e^%}OWgH>sMd2ms2v`;CDAjYli2sf^-{_$MNK^&#;i;nPrL_{ahK5Ynw8Dl zBo`x`o&rJ+y}?58*^+wB+9tWk0d<=W6zDoJK)LWp_d+bNdd(4EMB&YKqJX%L@Uv2u%E!l~>?ujfM?oezEa(rCGBt3ubSKHe#y|k`bfkBfx5AF!3Niu4tjZ$*HpgA5I+fFO4AY)n$lwTVoXg%r&AI;7LXlM|J#qXWm>V4rr?j^k%JSZ|6#=4-6yXhW7lV6^A&LW9 zqGCXOYm=HRfQVCy>Pmz&Znz_W3ydfR$gjQUjYc@C+hs+7wz@!XHi`BFl5%eX_mZDY zQ_W4-J#A`>0sh^H$^q%U(&APQjZAa^mi|7wWh zfR?Bju$}Qc4v09VsP1LqeARGA0QseIywN@i@M9w?L3JHWbtQndxV%7aF2+Kuc5%c)QgCM4VDoH%GMR8mkE4A|r|ct~a7Ms{5f80ov*Uy?H>i`Aa*z zac=^zOf#~uM)oi4{%UHA0d^NN>LpA9MBRK16Elrz?DW6IOzHZ{52{OS73$_#Q=L7Q5@A(SP`JDF3_9& z4OHGPm6UrE_`me+0uG(698gM$e_(irsV)Zig%Oni(hD8bMw1h8t`P;g6WmuDqA1{g zBZ_<~Fv}1{0XrH|1Q6Ax=;2^>#i%aL5S0U>4mxE5M4(cfGCe6yW*DOR@WfgLPS2hb ztAn<+fWI)J7~t1N6c2L86FZIZ`=Sl!L(ZEUoiZW30w?twAfK~fU}G!2Dr_LN`4^_71Ah7ZXK%owW%%&_^}a1P8A~5 zL4yh0{EA85Xi)*Q)dgmGu)1PY$6vqIMCE|Cx?(`f9XL>NgkYK>nhz^Do8pRqFWQ;L zDgu~eL@~heMidWn2Zr2W(S|AyuSSucIaj5aP%t7QVh8x!u&f)dB_3((aN%c z|6*l%z!T-(9I_4T?y!Hs|DM>0wRD5*Ul3hvR3flCU`1A6BWT}XRsIPp zXhW5T1mHK+by({7t)x68fJf79vAm_4$FO_H_!t9hD`qs0y9+$oiZrGD3!?W7Q55h` zMil63SXq@oS05GYL@l~)RRUvVp;#|AED^xvMic|Q(1=O^;XF+e zz#FYrayvi-RhsUA*BPt8bl)#U_ejd&2Y%GbvVotpvOM5ixg(lv!^vKO|3R^%wg7%% zL~&ObawMhE)DqDn#wrTPtSk@sYAXwLF8BwD4s|Zz`9@T- zRp1^gO72_`(fdQyM#~i7$wn0DTv%C^Kyh2sp|QRnSIt1P&MA$75ng@dcbIW+{%sgH};k%`#Sjr6Xun469;e71+bU>gUG8 z*+WG8RAUv`dH+zfON>h3Y7pwS#Km8Wl_d_0qec{1^T1tiRHA@ejVSV%z@JzVAnHhQ_yTTAR16|( z6^Q1gQpaVsF2JjdC>u!#r|(WS`gGW(Z5F2)-?qq+K)h^$p$(RbQv zD_2sUtH3W?n_$y_tVeiBMpE05mKrp3n`><%gBq=)p{GpWv9Dv;$rnVU1J4RFj z2&NPc92M=4ZDl_2r&g8?{FRmE0soF(TFx6eA66jY5BS}7T1YMc9uza`^FsoUSWyCp zf-m8&Ti{0ajm|-G3BtzOf3Np~0$?Q7HzD z8&TkFuvUuBk(65o+-POlz~@_89`FlR7FNwn_yhjEqC*ilAP{CLj&x!5U1JpmeAI~I zfFPvvA;9OY7ND&z@Pjp~+hnYY0UtD?5^z6fMF|a6@URrUB&j+@5c~@(%LabK%JP8k zkrRkiN9f=Wi4KJh@CQaza;w0*tq2h0DPo={+P#fc9B`5mMZmq^hyp|EfE4{&QVs%e zen%ZLk`*Ke4|c6P=o0b~@P|fJ0{EyA#Q-}Cd5TLV;Qpg=I||s=5Jj2<-f2aEs3XNW zcaXan-1iuwazIN|3>Y?kmjfbBDXQxzoDUf8`5@|Vh~@)YqQGf*l@P2nL~+1fMic>e zH^Uw1@V=rw!CLJRh=|fDesXsg2;m4xd6)o?wz6#CGp#HSxX8-Fz_YDv5O9f=6#$o8 z*(l(GTMb1ki z03x_SKg|KQGeir5M1e>Lld>B`~9trl#ASvIL^G6n8)&I1>#~F<_=4S`Z`(i~|tC4IWU!+0GDE1c?Ge z99Dlf9>oFE3{eS)Iv7zrN1$zON%8<1E1Xq^I|6v25e0_bOetz@>MBR|wywYo3riP| zmXwDb@b9cFu)BlZIMJcr2fW3IN*)pjrWE@&5KT5#QNa6*Xnv3=Fo8fc+gKF?-eyGc zAW=Ly{6V7GAlhe$%7a9K*utvHSVds0=70paS-j6x8%`IaD%vKx#P)Rf_szUE(W~Vh{^$fXhg+;ZH))zfbfJm4)8Rq z1vt@&iUF;kf!P-Hb2j|!Y={;BqFUMk09x+AZX?KD3U0KLM(W?C?Qk~59x+H%79@%W zi2{Q+nTYPu^}*E5G`9i}ZDciI+up$5?RIHN2g5WUjj~pO75HPZN*Hq6WvE?lhFk>j zY9opPZjjMP12cIPf*a0LL&g_$(OPhcWyy9w6`$Ueln&)V^`#XhTcuEmNGO(>kOa;N zQdsQ}?c4q(tHlzUttLc)x|$?Zw@Aus4)BXs7EW#%>|QXT4lM6MmB8o=sst8bsN8QV znhj{{E^W!Z`;1j7ptZuw$c-`T+Hb4^Du<=$my&Y4fZgtziDY5JDFAj~8R|g1f+~S{ z1yus^g39}*qS=79?m)a?^?PGg3TUlb48{>-6;R2Rn0&{^#s_|`rw$J7(~cy^%Yk93 z7}6pLxY&r|fUArs2Kby2#Q~2PQ4H`g@qv~KK)97+*@aV=7@{cPPmHJp5OvV$3gCG? zbVF(18>}wS-KY)?r`;Uj&rEgYfT)AC0BuvslLH*&o(*nTdCsmMZ~S(<(iC>L{u6d( zu=}-XO9dbr;5uc1@G8Z1g5REtnL!W%++;*CK+7FCu><#`#-qqdLQrCe0!#g28S1~3R4rYCKe4iKa*xCA zFQSuTUIbMFV>zf2T)L!!cTGjJ0d3vErAxGbZ>&lItyN%Mf;&fyRY1k*r6Z9hDaQ+V zpp^yU1-m|?lOkS0l|a0LDuH-GCC^ke8_?Drh!?DKj8!S1wQ4aK*~TiMQXoa8l5)I& zKk2Pwney}nh8qlb4De$kDgn%ufKylj!Jgub2HYzQQ50~q5k>wau)X1q0(LZ_2q3CW zaakJGS?*$RTdP1v!U~?z$poNds-F)C&qxc<24KFEv<10K!QIMmF8~Cg>y!do?gdHI zPLR6{++UjDmIH#2)^tG2U7pOnQwaWQh~kK#wF(^G|3{CGc${iU59SL@_|i zUEw5c;D+;jny^^LHOx|-I>7Ej(~?M?RD79nAh24eu!8pOEn7K#wA0-r zbpv%BDSs<~Vds8YiH0fQJ|ijte9?$vfUg-*3E&4t6a!o*KBO4T@Bm*RqAmfv&k)5? z-9!E1XFNVY!wrTzuy}zRO`-#Nz@CPCKH%v_R1El}5zPmLC&UGKk?|lfF5m$OX=2^SSCc9Ogkdr-fKn4txuuy57F-2a$PB` z#)Y&vO z&~gXncaVEFxaS$}3P2Fjng?jP0|$da?ox2WiY}k*-gfSh3lN(6AK z5yb#4cVK@B?$O4h$ejWYTTyZkq_Bea=l_yb7jgDG#_7Ox&Xx(#K~kR1z?WKCcCwGK z>mfSS|A5#T=>waL;)*=ImIt&wNi9}t=tDbWMu(| zV0V$BjsZSyL?wXF8Bq)nkd;7^Pw9wZ7ZEr&(>my&X?02iKQq8%85 zMv_JZntf1ZYUy32L(E}+WkCVxbgmHY!oTdyOdI;{hppMpE_> z_)RMd%rn@%Av!5mwV+C15r0mse`8nz%{nSY$0TJ3f&XD;*}$Hwg`}4UjJI@?EDW4( z^#%dAwz2|XygHa{M@e-ifp5iPM?nBw6w+FB90v%d6rt)U1hA%E;zc65&2Se#Ebx#O zy(#dIR`j{R4#tDxs6gvMV2}F)vFd580>4|plYhB-6E6WTNL@#b(-AoRr4=Pxp@|9Y zN>*7R)@xg4feIQ!k^Y|!>uKK})>={7Dk+a%V7z^pM`dzLV7JM1M-1=@BMR&^VRf-l zi2~kbL|Eobm9W}vR05;paw)pnsFVQSWJJY)4;xWnHXoLvUr5UF0DjHNvVnhNWqH8A zwX!hq+g3IR_+2Y20RG6zMgdoOIut2S>*4UHVn~x0aHQDLC7ja*&bJ~HUI9U(D2Pro zRuv#xY(?KrR1Bi;7^?*!s__-041Ev|GV!)n8RF3M#Sy6Izc+vC+ zhP&h=f!&N%35dp6Q8E$oGC}y=7CtZzO-YswoFfJ#%LC4{GTb2Pbg{BQz;Zt!*HHi* zk;+IGI8uRc(4}7PD>Av{!ViT4f{8Am1@9vQ)g%Elxd5}wemC&LMp(3=N%n|Lq;$vtr;rjop!GA- zL;M^hX^IOSax&$>IoFv7h!C=swEYAVgJL*?lso`LO4m{0)T!1mOPo2&I2HIg=}ZYr zrdX-l(2zmU>7wOC(KE?NL1+REDM0JgTtGNSLjkbJ_!-03N>CqZnR)~i1ga}Xb@QZ% zV(^i`4u*R+AUvUibU>u!I-EjE`*}bc&)J^{?FW6a^e(+8pmH{!KN02KI@ki=RD=RRyY>Y^(x1+gYNG4olHd_%P8vLmU`$ zhox>rftvbT(T3+F5+#!$d<`NY6-@69R%Fx#U`WlDM$v-l123?$Y~aOKmIu7d%EG`k zRyGLuY%41O?$$~>l4_xbZ_uT2*eDe1B_$Ccm{Km(pt{c3MFAg?9bAgv3(gU3s8V+V zzG$q<0FlxXjQ!}lMyvFQ>@4ACiiH}DLmjk^0X|^-j@&Gq*6#?Q^?|FVVxhhu5SDrH^Pusw_)hWjX%mBDID?cL2#AyxDfstCYxs&d^|7R+l{}EI zkeVM9EA@jHG6*^?)Z>#4w*^`gLu;&4a{-akP=KF*Gk(Ul2Rb>hP=7B_T{)^dV1hS$ zk8nP2xMu@e4;BC-rP%b)pU5Q}|peK6f?Y$7NbGI5FYvgo*&RHt`9ZriF#Dx1_w91D|PS*}#*n zED!kXbnOJ$hK)M{z#kJk8gPKwVn(3`>|{hSK#-^CkV}R0XNJ2N@LeN{fCwoqVu0OE zb;Sh&PqU(_0+Es-;2f)!+~9Jlxx#t?xYmdQ-Ef5zU1wAxfX^7wZ1|mTs-F$Nk&=^u zXId@zU2R3le%DITIg;`~0B*FhY~b^)EDv~CYt5Q!Ab|h7Vn+i3@OwrS2i##qF~Igh zP6Gij+lXR-a3RHTfd{({cN8$o5S0M-G@>Y=Hd(DZ1U_s;Q9wk2jt`RkJR;h^lazxD{H~Q{1LJE4q?ZSL zqu=tt2LGqVs~F%HMidA9yAj0zHwrloS-?$36a$0{DF!w?2pOv=-~~oh0(hAbMFA~$ zAbR+y1U^$i>kHs4LlhX;O;U7|q#SeLo2@Jx_%k0qL{Y$3jHm<u@MDkZhs-fOYdpE z4-rv8%XJ-=qL(D)p$Pnnm1P6JVP$#1)tR~lDX+7mf)B)y#v6!Rn{t>mbH z=(pAi@b^X(2mFH(MFB&GI}V6yX>tROv08wIMif0uAex+FO|KP|21z-hz{jjCJGp(Z zJ6Cil1b`nKQ3)WJQUnTb>K@cqSHTVdFK+h@T?NCF#gMoGrx;NQV1p6G0DA~KEqQ;(TGX_%Zw-n2v1WipFuyPK|jmk=O*K46mX!at{iZ-5k4Z1Fi=s__&=wpcD zfTNA57|?PDt}9lEzr&5y0$3qjDQ=Q25i2y2X8-*nI$#12d0QY}M^0LKQjO(~1V*N) zG#ZZrle0FU61Zj=R0%9$n}lVrq&#wg|12_EWN=4-^%I7-h!Txlz&DKuKP(tCSlww< zqJXa$QK0XGR>iP-*H|qul?XU0MW0B@O#`lzU&crlSQTLRH$xo*#GA`$h5&*o#j3DL zD%oo*^MU^?vedDa!doQe*b02ph=Q?|qC1UB6z~-z3dS~IRSc_lja4wVQj}+3=jj7? zmWZa@H{qSF{lt)(1~|%y;(+$$uQ9+otQO!wBZ>ijW<+tow&E7m2nbJ8>{5b$MuUFN zho2Rux+viNMl>JrH%1f%gmZLt9I%z~GYV+^40L+X&tmww-&9u)_>2)116uCD&?pk^ zCyiAFtl(^l7c`tH+N+IK#Ypo6N%$26jUQAQ3Ey@Q3)WJQaG?lw7+Yt;H?N8XQ!ZR zBxN6g@3yjlk3W>M+a*m=`+g~U+0yvHWirL6x&kRS3G99+5~2pg9kR5K?J5k@Bqb3b zehMZ-K-8Dw@HJRn6xDSy+zU{hB??TzAW<=hvJKJvAW>l52olW(5pI8=^YS23U?~X_ zm4YZ_Jc9}0loC8o9*;E#-`sPcf8(+);4vH$>&&wnQy94%U2u zO9*~sh~hz_;0P3L+}O-f0?v>hK~qKPu-N^<)E4`bz%=vQX>gPTtO9%FAaP*VA5@tQ zH@-IR1VWZAZVj-l@_}(ncB+=b&fc~h11z#FjR~Ay^R)O&lR0)iSpvr8x zaigg_5VHMJ^sJ=ZQefQKo2sR-d&yA80PWp0C7(*^7gh@p|sVjE8Kw(*pN6bCiImN?EEX!ES)LuOoJnz==i_7!N_Kz<3C%1ja*9 zWj5UShWoN3;uh{i;g$mbQp!@b6n5vBX2k$^8Bxjg0)J{nfCr5z28jAn43S`UQB-%8 zAu308mMAbpf<(n2+F^*|L88DA!CiMBi4_M9c&MD4rV1SF{$^^60d^5HYCm94BZ>in zJVlg(+);4b`<&u{Af#XR0WEi+y{>qYVLS>9(zJj|;C!q=RK`lmQ3GCYWr4#J*i983 zI`;uwVnii?wMG;J1bK?61-YZ(t~5k(z~x311+?6OsBIGM%OvIY0^^3ARHFoT*O=O3 zfcuT8+_4{tpsGLA1pX#e+nF{%;cP2PEZ|0C%^y#{^meyQfTTF+k7U z<5JR2U`Hd00fIb51YYRt<1f0voVxU<42;vn8M6KP6FXW7tbjAcqo zDHZ%(E6WDnZe@AEz2rWURDBBm>&1@t?0_#AQT(7lFr`@8L3FFJiUK}wL?s~ljS)ow zEq7oU4@(1v*oOGPJ=`M;o*gaNL!NAhwK=&y-1d50`2H$s znoO=_{c;&SxS?)|xuQPS5XO}2+T+3w>O^iP%{ak`{MlFpR0 zP}0egCf5f!>?%ZWv83R^?R?4hkSE(Uv``!>7pR zb=DdclFpEHj-(SL#TUnt`Je}$6{24&DR^rnpKK2~>^6wrrX-&AE!aCJXvWr(;uBi< zCRTEN4~yPGNneum6-krz@ll^xo-QeubfKil`WK4)DoJmU^rjZ{C&`23D)oGce3ni_R zG+DpApO&nYv_aB!k|yipovvPgUD8I5~M~Zxkq_ZR~X+i(U0AU!Y(@v6hku;fq z&mb+iU()9!JtS$eezM+QMDKW#-5V{~yMr}jA4&5i9U*CQefcM9$uvpJC0!_KvVOAO zD$%P;vOBv4d&psTvFLp-i3jgZOs@Z;AzE^cq}NM&qom3D$*+9tKU8brm2{mX-&4|L z`{+qpvQ*M~N!Lr7te>p6Q}nJ*vfJ8%J>;;vUG(lr;<>2>d&pt;jOZOo;(4?Md&pt; zw&;D3#PdcA_K?HQk+`;&6g;1`U~l9}{epf25Be=R{>Ab`Fn+5)Lw*OFDJfpJRVevu zMgMw9FO_tsq#Gr@P}2Y1_2I}C58$684qYkfGD%k?J1Y5mrQLX}c7&%3PL;H$q`f80 zk+hqnUx$^S+2pGk^$K;bvgH$?uXq{(jKfzeZ1>5@w&y;xyNycU1A0+n_BYi_oq)0_=$?MT@l79X5*Q;S4 zk^^F-FN&QhPs)#_{67-x4~sq0u;{aoTsQm|u``1JHyQl+3NF%7;xNi#kM_?=vL7S` zNJmLL*`7n0Y+p$-u0qbgorT>gLmN`mqovwcU{3jpWTO2#u}69Yj*Aic{eP5pHn5RZ zRUE(FqTqs1z7`SG;d}Y&wzKWDMU5@{!FIQF>u!+`!PnQB*Y?4D?R<2*i%KCP5EHXv zKtzE-(I5n@N+J@$VhAoE+7Jn7BA~>GM9nV7NQ{E#-19#(@7>O9Ht{7pZ{F{nbMCq4 zp8GLx?@aXp&$OdI@evW!^Ub4B#7Xs(=IBkd{5KfTp=YFnKzh~k6_n`>>(|}P;||WN zk5frGC*qgpTDp$vuf9P9^sGNVplWXUw>bKD+$fTIK7^A#a%lT0`YOHQ^3lyq?N*6U z?N*U+F6&&f8ikY?{)MSp}z=yw>=|=F*DhjZ&}Fq7FRHKSCmsD7^lQ+cNBL?&_4NF#qo254JWJdz8m-D# zdrS0&ZE5`{pg#uvg-!L$wkiqx+IV@9-a0PYo2tJuuD(q6l@|IFcSspyj&Z4-+~e23 z(LYDT-dy;)JsJI8lw2*B{cj8XE>0{uPTC}AeRa!v9|4!K?3TZa#s!#vTIusooHf(G z@n52`9bZvsrGHur{g<(W`7kG7nm1~%3;J%JytYcb`n;pBzUuj-&{unU{>)h-(RQyA zIjf%1jV<)Oy&^eygi1Eo=jUmfyHUw|ek1zhPJzy)jlGki)=dAaBAGZ*te#G%AJRXK zpU!LCyv@qL48QO@=RELp%NOg-U)#w$T?a)a+G)1Y^-Y|&8(p`=`5{KvBXRy7qw9<~ zf3MN?L!2LKbX^eVht=o%IDenfc|6Wn8l9ix{P6m`8|Rb+IrBD!&DCyB2x%k$Q6ASw(}_L==lE?@I{AzP3`E{{9yk+@V$=w11kT+c)9%L4eP&t?GFY29Q=OA z&ePy8JN%d6OAdblyyoziz~}Fb`|~>Zf+PQi%6}^^|4-!)gCh8+_aiemLx_ogaf6aFyrpD6pT0 z&s%l-?1SI^MdiU&eg!RJSbh=Z4ze&ECxd?g_Ky^7dR6{90fXRMReoN8%FlogUN1Z$ zCvyYwX6%2-k970q;l)*J1Rp;IDxPa@)K^yp0xJT^MJyeUGDlz~xTxg9|z?mXqP13}@ao zDuC4OaRGR7My{^_->y6%;8gHS!C#vcpff%1Bxn0IaDDDNN4#yt{&(GV%k_|7{FKC&5w64i-QfEW$mb}}`1roc!~d0n&Ew#ECIp;`e)JspJf5`w4Dv67FI^_! zesKN;M)oH$CIBCs&D-Gn&>#blUr80`c5&BNClI&spAx}w$e#he4}sqeKa=2t;OfuE z!8_om`o9@`9`V;WTm^2BKXhr2EO=r>N8}%YKMUZ4=oK?dm47$R{MP-cop>r zKF&TAd5(Pho?z1lzKDK=li3Wu1b;>#&l{vT{vGiDL*QlQR||L@oHsPFd{>WvH{s{K z;A0pF(G2Dh@I{Qn!x|s8|1q({^B*5?t329krC@XDVN&iMBRcR37`e z0Dt)TI3N7edCU#`xks=Gz!!Z18lN4+d0cfr-`xcH4)oufVCOFI;*|n;-OmSaoV0O9 zy%1LO2)IG}YQ3HUPoN)RIyb)spO_K56fS$b0lsHSuC+h@8+-xfYJWM59(c&iEAkp= z{z1GbKUZ!W{#CpvKM_3T@Na`}w4CC9wg7Z9GYM|a6aEb3dBa-NzWQ^s!@r08zZ-UH z7l{G=6H(7Q@`uCz?;*dm1@ho;ffr8~kV1a0A_t=Wya;}d<+R>7P2?YfolW40Qw3ZH zKIhocKaX{@!(W2@?Xa`-Q32iHPdM`50e=Sa`%(g^I`()Iyyp0G6a^$&uU(M;pu=ZT z-!+z#u?t1;S#TeGAKGz0c*(Id3I0WgpRz*i-AVjt_`oMhS9?4R`w7JPtKiRp52Aw} z0{ee->`x%k|K@Q0gGz5(zWjODJFs6oMGDmRJ?RLJ8_iP*;o7hJEQfP+Iu>s?I9z{h z=93Qp82rz`e&QT4uoHH!cjVE%&25k$J4*z$9e?1+p8-3MJ6v<%*AD*`+J%2<%+~ij zF`(n1Q!G7EOMZUO3z~$il8){k>BRmc^Nysn3|7#%cgV&J%m?q7wj-5N(Md2=o z^YaBh_$R%h<*q}$9&`9!5jVfIe5Dy&Enq+RTf{r)`O+BH1Hk4T$IdF;;J=b%@4wrT+@N! z&m4MGJZ?RR^YNBbe9jhmZLa}Go<<6LY=Zp6xpI96cpiLdoq%UypMS!M<7O}cA}!1> zz!MnXo`ju$fa`|B4ET}s@vvEY9S`1t&zlf8A0%$eO$fOfHImkYDVQ z>pbE=0xlF3(d@GeMSJ$LVm9TTWN&DHXH=Qfw zy>i7bRSe;Br8+f5_C0Ui_||RS$nf@Y&!emLv8&DN>bGd$O)(o(f=p-cK<|Jl@~Mv$ zG6iosTbT5-p54^r`PDfiTYoauTyB>Zuwit4!@gc@+%|Oa22ZcJFn!;!YIh7-tN(W> z@)U|pmp4gUe==T}q1w-MuI=mYGU-BocCtFv+0&QmZd`PC4VX%hD|Xq}#*MWDYkMq8 zn(~Zq^?Fl{_uT_YQ=q*?tSWMA&F+9UH>q$c)o-Q>)l#FRRI0CW(c3>z7wsL0IM>_V zQ@_#Eoor~VC9gAGR2`~ZSYU_JX3{SQDJ!3(t1Zdil-bftN}e~iZNvEZ<=)0iM%RrG zZyoi#&SZb8i!CR;nPAS#gwtWA+(NLwxA~2}f$ruv`nyxjZ}fJz(C8Is*7o;!+z&#^ zEZ(i=&HCAD(A-v^M26~j&?-HB{kF=zsb(siB_ZvG%bh=+D^mQn4UMkfK0ZW$1dUtO z&<&1qZ<37E-w*WHv8!@?iuS8zs16k`nDf&Wu4?4w6b%)TOD;Lg&l+$2<)cFv z53e)ZHw|$tNBnXnB9;kfNm6f)Qwim%LMa!K;It=QN;dD3BJJ6;S8QoxnD?`Mi(7R= zKEpaTQzcSGKYdLQEs8xVS0|~pGvxv`e?F6qI_zhx8(dD^G8e;^QHbz*J9?D@?duEk zHgwXow%xTh>v`8ATyNA2wuX6|W87mg5vh8vFw0lA7p1+)rVW^(K{&_qEn1jzO-Pjg%4QiiJ|etLDp;Qh^O3s=~2qXr{A)Uy59pXX>$!H;YzG15z%Q z!dx`aC_hK@2W^F<60(K-wC#Jj2YE*eT9m%PkrI6&~-LKvs{7Q~efmPvi zwor~%Ihb1(;djG}T-p$yS0$#+Osxx7M7`hy1Fj>oh&m*u`mmSwbA{?u)~Dt{eW}yOf-Uin z)%yUwQ>{=yV=DEL@1Q-Tq^M@Ayb`g^z!{MXax~Bet%GpD1}O#QVu9w=m|y8aahI90 z!Hb)nO7qANXXOg@!BU(xX@lm878w{&B_6dJK{qlZHL+J80b`z{!KE-t5Ln{AQLXn4 zT2bU^Jx=S9)?Q2RKp~ts6y|hs*Fh>YO6KL7sZcM8Yx5zB>e93> z2W9>~0=X6G3lK+NmnDcQ#A?$#(WAv5AeFsLQ1R0Ctx^@Zrqbumc9i)62!X(E$^@-p6tw1uZ{qXHmaGA0DX$ zzg!Mz^)Tg!*?41kUV6^=XxQ)~ zRZmRWZQ|HSVMA9Aus+hPU^9CS-ak(k9LSQjVJtFoM;0rD>zbf?s=`7wwb0(X;J$J zjF_y~=)*28li~%zVfxfTIazm~XLb7ajkkH$+ZIfRWm@K~%W~e9V|CKcP1*#_JZ+v5 Qk%3V@UNjzx(9?s+&OAs_aP$($JpNfq({`-pQKb;mn&yBHhI(E$^})>p)MKw_vz-|fc{;}xMj-@ zDwi>1IqO9AF8=O4Q9d95pIScy0|F{lK+P2^1Xix3N_WXPwq8ViPY(}th?P8SHEl^b z9ktmO&Q976QJWz)KU)r)cVZUr#QJvUwo87_z`fpyjXkjGV{Lk3(}7KAe0r2ggAda> zw_Ws0Dv;hPm(EqLfdd8cr*Vel1v6O%GbR=EK_M>`&WsRhyof_?L)P0u7DRC5ZLu%M zp{>sNCVt)%M&Yzjf;(nSUc0YVd$y$7{ZS}83g<{(doHW?oUYopTD6yq>5amE*eQ4N zn)6yU=SiwL0EP0QaQ@^q7qn_FATfR8Q4DHu#2L5U5qsVC2GKz5 z_N#N-eY93SR}t^TLkRjf6TA*_r`YQ#>#8F5k`4Q!0)Q2$ONthp#-SbHMbHPl>5O|B zf^9$Vi5=d&d9%R_J0!I`y=phw9Jj|m<#t~DAGPzQv=gVU+W8#qY-+W$KikRqK)3Vh zoiSEBx1)`Fo!f4sqpUu0CS*T>g0|Sp_c zM(1QfJJ>lB*dAM}7S8xrH@P*f^h9Ffy$_$E-X|>Xrhi02K}38I!Jk~t zxCe+dN1+0U_(jC$42{1XT53NAhrcuKzJJ}SN5?FUd+y;qeHCtuX(L`c<97Hvx7|qV zoK~ayos8CfqGAb|IM&&lYP?(h;TrdHIh{e-t@|YYSGfuF1-EVjS9x77$m&LCLb!v~ z$NRE&9z~b*PLzxC_7QlG;V8OhYhda9TrEjDf{!{v3&;QP5PsGneEw&LsQSto-vU!Y zAB?8RjyrlXmDS@Zv{hLA-q4n;_G=PZJT;%i*2aHjTQf@=rtf=ZeFMq5~}zp%Q1{c~k(yTtPW* zLMvBb3vPOa#os{=2RVaWX79x2PzlOyyNrs?IOBJO1!6GW@e5P8Xuk8j1Drwm)VvT8 ze;KzV=E2VX)*Tq(op>Y+g>?aE{O!gG);`{ezgorlp}H$0;`iwZreTmZe!}8!hp7tN zl*E_`wJOygHu6sVt+5=rQT+a}ZMXbbI3lPs<`Qd!${yZ{2c6q)`sl)F)rp1)rPV0^<$SUrPKhr4wEap4ho7T{ch(Cjozbhih%bNA# zkMK~qOd(RG6-N=wd#+Nb0DJAwbEH%Dj)*_ay)hL!aVmbQhQ_XYNFU)Q=32c6YT53c zcrqd=yBz+ebK5;U4zLMrno1L_&%6`&;KCtpWpM#_L?q<9#|wxPSG&hvvAUsiTSU~Q z1?AH2kBC3c30Geu?vH+!!@?76cbhKikUGvoCKbURXHbl1ehZf~BB7|-IU=a2btu-) z_Vwzm+o3=B9Tnm5aydEtu#>fO{9dPwD2yZPWa7_r%warW)ZX*a15RK4P)k!7CL?06 zDNO`*9*hswaL{#lC*DmO3|6(y_!I0}Tz7R8oXi1St}x8{L3$)yq6i~`W{g9Z>Z4en zc_$uDUW}c^ltFMB8Mj)>onovjP*HV|-OaQwH&!rX0b;74h8JU+virQV`0fsR6<|K$o!v1geq5;Q`Y*=DRvtn6l{e=LKkOBu>q?q0(4ezw&N!CxoN)^UTysVQW^v_@x&Ell z7#q8^Lab6Lj0-%l&>KriVrT0_QTZ)%P_UGnH}Gx1Izc_>N9dV%K|r#O;6p{j1TX!h zqdE<}tz{(E!4dDVfijJ&n{Y-IRMarYOBqyu68Acz_w=fG`4WcjL2RaX;xRtE;Bf|z zb-Nnt=L)GPBA(-hRte$RDP!TfN-G}dO{*AeVqGNtSOYz=`Ocu#PVDV^fU=%>@S*e; zXLEVp!8OypH>ZHTs5AcZxLjyuZWl6J>`Z(08LrP^&RM_Mq#}Brlo57?Ed-C47~D>twYV4^n(g z&?5y$bUhtt(YQZ!=n>OU9*)p4s#Ag%4CXnbkEAbj7wK!ScR;s{U`cJ!_?sx9?nbvs zJMOiY_jEtc|N8+l4psl>17tGx{{Lry%v4=4V;=C|A0P`+>;KaLS&9n&`vYVR&-vdP zARAcnUk;FM*F8CLIJ-afPPA@!eD8nej6bQqz{*Q6{jTahXNI84oI}K5GDXB*vtEMS z_fCAErwzpLMC=T_?~H#EI(aZ&YTok;om>(*?jJh2w+A*O;;$p;;K2}KQ*P@wZMr?K zgY#)NXgJFLi=*F5<>>fI%cJ*BlXUpB+>F2AcKCF-`S1RV!ym%o)z<)azD!hV4)soy z*)@D8P62G<;c*2|t>9<7+4;w>Eq|Y`vV;uL=-xdq<#N3}7d`3~Ped0Q};Q zw+nnZz)ieQ;L8DS;zH^-1M2O8^^!onJ+L;ttO78<`Rd@TdUbG&4#tQ%if^9sRH46L z;v;-{k3WDfX8P@cJWY5fp5hdb=Lk!r){8&=Jrpy)rRMk@>bWqeO-buI>ksh#1VbD( zt8awzEs5U0Rz=XKgqcs08#pmE{gXEd|u#y)(;En z#PvXSJvhi0$tF(sajzdk(0IOWkixu+^rHm6=;Dn6djZ3zsVNlfbcTDuLGF@={1yvTS+kqara9KKhgzq`oG51G8J8hL}b=EA*bCEh)$Z;d#n>+OL& zT37>!Zx7TRifbVs;1TE!-eL3mtNzM^53Lr*9}(y2*8^-I2a4-Kpz{c~k!GD<{2|x# zKYB@xfi{D2^6Elc9fqdjrIG%IjW6ofruFR}k0*LC$koS7B=sCJcN}IPbc8hk@Pw!@ zI$xLRp`yMk$O{CF1LL}zFA%Kf3z_@Xv!H%>ylZuo+ZedRp3+wr;?Uh?4Tc$fnP85G z2iD-i*~|TG)gGZ=BWx=wGlkL#W((I$p1k`IOYo1JA`{a?!uG5zoC-NaiIh3Kx@8`$;_ND=K7#@dR*wK z@U8hm&x8y7P#T>gleT&`O8&wT2TWnUz&S4P=dRYfb927HPADOMvYxHXabf*UB2LtL zfuQWclS|1U_^OUu1y@}gM85`by`|Tkp|5p-YTI6`AM{1V%L2WL>v1dT^@8gj#KojQb0fUw)ph``^%xV<|_eQ0z+JNY23TJ*L~{*B?mL#d9CcL%4fevq&FdXV7nl&mw> zPaVgS&iJ+;E~7dpHF{DVDudZp>lK03H+pbMH}WA3ry@B$G&n!VJ*r+EO`9!kPMh6PEmQSOVZJt7y0RX%yzE(!OC;-J(uVnZVp);HEsH~BKvwO9Pm#@7!ByC1%Y=-4X0v&Dqb)p8=HfOYOA5zJ z$K!b??Zp~>l4@i&tNU)Mk!q)G9v)%7+}pPhYA=_`X3H-7;h1c84!3HM&FOX!u9cbt z17n&+a^QBvB1-;9EqQvN7g63by+Rrb4htS=BtJ__*wdu#Gcd;HiB3aG<4EsmeVle^ zPpgd3v;AX(M?KcTm0QhxD^~?DOQNM=M9asFBP)ma-X0 zuw5VAoBMebb>)4~7`I$s_ncL>m|ZoG`(?FS)X1*LhU*2G%22FGrOFqJ&pT`+SBMxwocTZCi#h`Nt5hE)1}e{O}1XZag!^PjHOc z%ToLVhda6R?N4&FjH+Ps$m8)xN+0z=6FPakOz|VMVUb4;Oan&qaZ&bM5wp ztnL}<7gjmcvn_r$v3}YIdbahjXRBc!*wCK4rz595#BT^U}@vz%{mG|IM%4R?I8Aa-T!L`S(`Mp15GZ0{b9a@WFE#`cO``6ljk zwF%rO%(1_kBiOamo_*ZuT3EQ+3tb!5E6&`jsxOX+PkL87W$qUpz8nX0%nEbF1xI-n z#@>%`sMQT>s)KpH>l=0|I?nMptk=esIJZ*1bB2aRgjM&f?CV*S_w*oMOKU_;MFevXyZ zF;qNT_&GMIjgqdRhozMKcgB~ERBT;x?~cUahjXvaRBl4n`pIm2+)$n**yw=y;^0>||%>YJ?9 z#j-mc!D?7l?>%IdGcGtbe4}GubgyW1nWNnQXg7}n&Ze>Pq6S2J$6hzk9H-0@AWJme>xN>n2c^jlt?d{pm?g5>hH zFISLr>{r6cRxbnm$)^K`tt4j+J2;sv7UB7X{QK0kCgiCD@2I~L7+1Gqapq@y-R%c5 zto`>F$XT3GeJ+NPb@%R@PWFx8K9n3Wa{6CnznX17CC|UN zu>_geqXiOjb!_BHv@yXt|@*0#5EF!QXaR$RD4NZcY|C9=)8r>={0UY%`^Z$KR+xPK(77vmm=g(eeFt19meNWkB;x= zJ3NK)+3QCxAs_ykUOl~hb-7Pt<`4aKHi|s4C9QgtF4(QYQRb(-Uc8h1qD9#XOX0HMen z$$z?x{hC}*+~XO!`N@zDyi~dcoj(wD^(|fJh!{Z0kZes_Y%qOkFIVY_n!+q zMfyzaUYiUlJlB`>&$@d8`F_!c6Upbnn~srL%fDDf4*06n9x}Y#m-)%Z0c+2ZcbiYj zOdh$iZ8+IK=el>vPd5(!j(q9-C@WdG$E^nB&Z&PdCG*sJxR5+u`u*1AgPB2v$vut3 zJ|wptt#XEZy=ebbvQnns=8=bEpDZRzUKsT)S$z7BXUT7VSy_v``bD+UWail;nv$O% z?A({^R{w*ROzbkWM5VIbzD|B{{mnAc zad>kf^7_pj56Cm0-}s6AwbG!5RONZ$r02ar>{p8AX&<@Hr%a(edX?a25VzIVv`CBFNWthlf1 zkL0~;`7V()zHcy!Z1=~p`DCr=KUSx&7aVJ1LmQB zH7`K_`sC}hyK-l2>lmg9{N8@ zLjToB=>K~X`u8TG|6?TdujW1IzX|iu{~{9l??XcWIZ5b0BMJRqBccB~B=n!3g#I&; z(Emyj`rk-G|9eU3eGu;{qG^6|7|4n|C)sUE0NIuVG{Z;Nkad{ zN$CF@68gVNLjRdb=>KyP`tL?U|JzCE|0W6jcOs$xCnWU0g@pdckkJ2kB=oH@M{jVmW|3DJ@4HiB{bwPe|8gYsKaGU` z8(%Y_c`?cAwP%yza^pnz9jTN zo`nAMkg#Is+(Enc~^uL9K{=1RT|7#NZZ$U!;tw`wq5()j^A))`fB=rA) zg#H(h(7z7}{ZApG|8ykupO%FFe-X(aTo?r-S-H|C*#YktXH^cC~a|1A>wuR}ur zUy{&&Z4&xVAfbPCA431?zJ~rYG7kNFlhA(wQYYwN-KWsMy6>TXbss_h>b`{j->@w7 zUxkGJPms`mRTBC?Lqh**euVy8G7tTiC87UbB=moSg#JGvq5oMV^uLRQ{{2blKb(aA z^N`U0PbBpJ4hj8VB%%LYB=nz|g#P!C(Em~r`u~oE{&SPie|i%7KTkscT}bG^I0^kf zA)){3B=r9Q3H_HMq5s_^^#3;r{XZh1|8petKaqs~3zN`)RucLzN<#m^B=ldNg#N!G zq5pCu^dCS%|IJD0{|X8H=Om&3jU@E%B%%KvB=kR(g#K%h(0^$X`kzTc|BXrL|0oIl zFCwA;OeFLlOG5t_Na%k$3H|>IGU{Wm3{|EDDMf0Bg$*O1VEBNF;gLqh*QkkJ2R68bMlLjTQ3=>Ike{Z}NR{}>Yb z4<(`h{3P^$jD-GMlhA(y68i5-LjPVQ^q-xC{%erXe+d%$-$z3K*GTC9dlLHpgM|L0 zN$CGq68f)9LjQ+I=zkdr{SP9c|KCaI|1k;u??LjS72p#NOVL;vc$q5tK~L;q@= zL;o+ChyK<52mJ>y5B(1#p?@|0p?^>2p?}q1(7&3Wpnr9pp#N_C9Qs%N2>t)WJoK-w zC-ncCdFWr=|ImK~^U%M#ub}_q%tQY(Na$bPf6)H`=Ar-QB=o<9g#OjIfc`Hs5B;m_ z3H@(p9{N}JHT2(>dFWrwC(!>T=AnNz{-A$<=AnOeouPkq{h|Lnj6?rwTtfdXn1}v* zkkEfW68euNp??Pn{X0qMza9zwt9b_cAI&`UA5B94YTk$b)%b`0TQLs(-yxy@A4uqb z7YY5V@dy2vWFGqeg@pd?B=nz?g#Oih0R4|-9{N`vfd2b15B;nA7Wz-iJoK-|C-lFV zdFa0^3H?7Nq5ml)^#7EE{^LmKzY7Wdzehs<14-z=5DERCC!znEB=oQ5E9k!^^U%M# zKcN3~%tQZb9)bSV`~v;|%sBKPLPGy%Na+723H`^D(0^_c`rk`J|7xCt{%bQ2{j2+h z+f2~^I1>7QmxTValF)y968g_VLjMy<=zkRn{g)x3e{T}{SN9$CAIUuQUx|eNGm_B1 zx*wtc`^-cCYF>u^w=xg?pCh6F;Ux5*jfDQ^kkJ1^68bMpLjQS5=syDq{U?yne!$|1A3JLx1C!zn}Na+6w3H^^Eq5mIA=zk>%{Z}KQ{}Ckg z-G%>{TCyl{}m+k??*!a^GWExItl$3 zC!zm#B=r9o3H>)Aq5qFb=>H7~{ck3r{~RRre}jbn2a(YK0uuUPLqh-GkkEfE68is^ zg#H(i(0^kR`X5h1|1(MGe+dcwry-&LyCn2~h=l%UkHQE`aeoS z|9wg5zcdN`N0HEfCldOfN<#l1lF)x968i5&LjS*$(7z7}{huVE|5GIN{}l=SKPRDo zUlRKNj)eZZlF)xX68djILjT7|=>Ja=`p-^6|9eR2{}~DW|3gCm!6fuwmxTUTlhA)} z68bMnLjPZr(0_gs`oBy<|20VHKQjsaFD0RWFB1A+PeT8#N$CFo3H_HRq5u9Q^uK{@ zjznfaBKsndCy+?|ddC2=5)%0>5?KX_`~`^&K_b6KBELi;W0A#2$0L!SBa!8hNc=iIHI6?-V!i?rIUR|tgGAOvB6lK@7m&zXNaO(|vLzBZ8j1V} zi7byqE=D4^Bauar$Y3P$J`x#$M1G7!W@;XGa`}CkjSe@WLqRM zEfTo_iCl+7)nNib&){B=Ry6`2vZoj6~iV1D-!t{i5!7M9zr79Bawe0kp+>+^GM`UBoe>uIEb8# zM5ad~_aKphNaXiOWHuzy2Z?NlM3z7z$03n-k;u+SWEUi|84@`biTnoHly&Q!?|Pf4(7q?$=Kp_xnME zE->G6*REM)(|~|3q}{_q%}3w$>h&x0@4x%58qc|3zrMkIw^OIo^}D`&x$4)?h7D8W zpx*xdGx+%zvX4GyS2>kYtUdind#xfSLEH5D?`a% zzx}q3{Abak&gAXYtLu@!%%5L`eD=*Zs{cP3GDOYOkz2QZ&iM8pe;i8Y`{y6kkE`a) z31+@;@!}C=`%0DilcBY0sq5kS?3ud$O%5JZ*R?~13cdOHU*CSK#&3md*N!spc=YH6 zIp@9i)ch2E`t)+g0K^z|)Hmb-g* z2YIP;=Pl%-xpOO$2kX{VKB$^2S6SxU?A$qr{By~YR^<2(K2Sbu5FD)L;T1i4sQK|m z$Bt?qdpCFP@+|jpbo6y{VV5pj$$7D{xyhqVntVx)J$LSFvS;DKb;%Fjd8Z}0eCEvR zWZdM*naKV1>rW+1-M_zwJicK=Ke9&l>?O&O7cMLzFL&y+narOlQ%-W&@4v4kt6#kM zJK4H?`5t8BYSm)M0vR)ACw~tMn@wg+m(GjqU$m%`yxO6|2D0P!?F-0($B+L^K3K7$ z4!O8nx1HqDS+lB=-+cUWAX)k9)#GHs$dP}N#+|NIEB_|~$WF{w0nc_{(96b0US-WP+sV!qEA}N{v}v=7JhE}4^5LvW zlX5ZNcH6d3$rAbVS0gum`DF>R%B4$ZNZ;qr?~v=}&3l&&%9^z>xv5W|W8~m7XTBrj zr%z8$F8S!AATsgu&&!a73lyk9&i?Sj9HjrPTl>hcUw{3OeABAcGIB)8l1<4`fBf++ zIb-TnJNf*puiBC0;^Q-rxiV+YL!SNRmnbsu`t?)f?%K5{kQ;jUK0@vY4INLe`SjCL z(tA2(4GqD`>f0u;*dy&xpKP2>jn}q(=JO}-&aRdFU@d*7# z@^k24jUVV=jVI_|jUVV=jVI_|^(XWn%JR^^Ckg#GA))^cB=oQDFX+Dl^U%M8g#PD{ z(7(EGp#K)kL;q@ChyJ~ohyI(B(7(Fg(0?c9q5qO3^snwO=wID8(EksNL;q^LK>wAP zhyFh&q5ohK`Y%pG|9wd4{}2iNt9c9h&&xdYujXCoKZbeeU(N5(e;MYX|FtCaf1iZ@ zUy;!NQxf`bL_+`SK8OB)Wghw;O+x=_K7jt!{SE!kWgPl{LPGz&Nu8j7H9n#LE{s9{ z1xe_CFA4qMBccB-B=ldOg#Ok24E={Q5B*;tq5t1V=>H}O{Wm0`|9&L&{|*WLUn8Oa zoFw$Wi-i8w{RjQGVjlYch=l$RlhD5p3H_^i3i^*_9{PVsLjQG1=>I1Y`oBU#|Bp%N z|1}ByZzZAsDJ1m2l7#*@lhD7Dg#Ocz(ElGK^uLXS{)dv#e|Hl44Q0}}dQPD1~2B=oIYa{pTm4|6wHbU!8>hTa(a#V-or=Ktlh&lhA)g68i5?LjPAu=)WTg{SPFe z{|6-WznFynmy*!`Hzf35nS}lmNa(*j3H{e0q5pOy^#3CX{ZA#K{~jdte~g6wFOtyz zdJ_77NkaeWN$9^A3H`4oq5tV5^nZ(l{{2Yk{{#vBPbQ)NK_v7)goOT!lF3H@&*q5mo*^zTbT|LaKT zKZu0>H<8f)U=sR|C!zl(B=nz1LjQ$H=zlf|{ri*9e;5hIGU{RfiJ|85fc-#|kDJ4on%4GH}ZC!znWB=moPg#P~~q5qR4^k0pH z{=1XVzq)?VzuF)ASMxUX|0h3({`-;8zZxIV|1RdC{{RyDSJwsl@5May|1Jsrt9cFj zKgB%sznp~r)%^$ktNR!FSMvt+zmK0o|L>E~zZ%!jzq&7={|1ah{|`y%U(Juuznb5n z|3!>L|7zSr|7tu!|LXpO{?)jK{l~S0bVRS|s%UjD-Hx zJP7?)U>^GamW2MVkl*q5m`_^uLFM{?+{i{j2K={rfQv z{eMD2|LQ(~{y$?L`cF?n|LT5#{>L#7{a+@b|2rh~UxI}G*OJixP!jsjKtlgF8{kJ8d z|HCBoe}shoACS<$ns=c8SIk5Ibx7#H5efaPc>(&L$UO94kA(i!yaWAvG7tTaC87VO zB=lc{g#H(h(7*Bm^xuqm=>KaH`VS$Y{~09oKbwU9zaXLiDkSv(goOS#lhA)63H_fX zp?@|1LjOL@L;r6`=>IVZ{U0Nt|3f77??poYz9jU2mxTU1lhFTM68f)8LjSo)=zk{( z{VyS*{|`v$KbVC6dyvq7M-uwaO+x?CB=p~fg#Kem=)VaG{huSD|H35n{|*WL&m^IL zZLKtliOc?SBwz&!NdiG=<$kG-@{qH5A|H>rv zKY)b(r;*VA2@?8mOhW(PkLK(Ek(? z`X5X}|20YI{|6HK?@2=cP7?aJlhFTD68g_VLjPS!=)WQf{kI{Z|BWQ{KZ%6?w~^3) zeiHisl7#**k`LjV0p=zkCi{qG{7{{RyD z_aLGFUL^GYE(!g=CZYdRB=oi3q5st+^go}3{=Xri{~;vwzmsU`rko9 z|9&L&{|O2GrzN5P&q(M$Jqi71BccCsB=moog#Pc4(0>UM`d>>z|3gXWKLZK<$C1!~ zX%hO+Lqh*~N$7td3H`Sxq5p*>^xvF>{;QMF|49=1Uq?d!rAX-i3JLv}BccBZB=p~c zg#M3`Izj*UxDEaLlhFU)B=rA13H?Ws(0^YN`aeKI|654tzbXm+Hzc9|2om~lOG5vL zN$CFw3H?7Hq5owh^#6*4{_Bv?e)|11gp7b2m5 z9}@b1Lqh+LN$CF=3H=`;p?@zD`u8QF|GOmg->DC!zn3Na+7_68bMdLjNC<(ElwG`u~-L{#%jIe@PPh z|AU17r;^bBS0wZwPeT8hN$CF<68gVRLjSc%=)X4!{fCm!|EDDMUxtMKy-DbQ4GI0X zB%%LJB=nz?#4>^Iq+W-o*BR*baC%*jUN5BAyXbW=dVQc?XQbB&>GceH9g1G}r`K2M zb!&QklV0zq*J*#ewdR>rSho;xR>Ge>0y@y_(rq{dabuxP0j$UV` z*Nf=&6?)yHUVo+6d+GIUdi~+INbEpk?k8oj3RYPtoh$^tvg%zEiK`oPfmr^|~0nE|D=Nz246siFv(FO0PH4>mBua zRlS~5udmYUNcDOly*^W~&(rJF^!hu!9!Rg(((6<8dQ!a}NUw|1>(BIhKE3`-uglZx znDjbEy&g!fOVaDC^tva#ZZ-so=d0KM>2;EN-J)K1tJfjvb%}airCt|_tppgQoRmTujkV1|GFTt zoqC(^8R~U_di|ANuc_Ci>Ghs^9j;z)snUF_-U8r8isMi7Nb(MNuuwEys*YVvz;`!@!WP1IgUbm~)t?KpI zdfl*IAE(#P>h*(qU7uc`sn^}=b#Zz-E5TJ*!@ytk+lSb#!`Ns9yK0 z*9q(O%X*!xUeBr5r|b1|di}Fr->lcc>UDK`{k2|auGfj{_33)uu3nd}*O}{euzDSy zUeB%9q3ZR;dfm5PSE|=H>h<+{-7J=qEC1{D*m|9=URS8sL+W+HdYz(P=dRZ$>h;?g zdLA5qNS+pKX@m};`u>1zf60dk#|iTaD+v{1q*f1G%LLh+lN2f}$0{vEsUX>`o)p?I zo5zwu?uT&S9^$IInXdaC*IvzZMZYD5nyRNseBTv%*woiB_c|ZSM~{S_w&4!F{by3l zM{k!;XYGx0e(v>fTi3wNuhGmQhlN*Wmcq*73exC^{vFcSaGSax2xjz?jLhIME0&N zWY6pE21zj=z3ohj`RVPjq?o_n9<3gEInsx#hj91f>SGSgZbdO9-9P5GE^=9_PGQXG zB2lg)&Gn`}xQDH+S#d`xy)3=;iHEJ}8`+$nL5JEslg(A?3oOS_J8v)R)7|R3f(n&T zUyJY{sviFtYTrig;2r84jVd)Fo3-Or^<`g$=E{lxm3jv>mUh;aslmh6L2p)dwX?bP z3l;FH#MRE`ktjl)iZiC+7)VP zeU|jIy)=D`tBYIrma`b*YI^%9^_?HzvRqAXA16(p?`nGc4bt?puBLa?n>Sot-2Rm` z-Qj9_d)@Q|S35iE&7{%sR@3`R)2F(c-fpKfeV(i7k;|m%%Un&5+%8Su?rM7EMQQr) zuF(SbF&@&sKcsO8 z<(Bq6lg1%bQQG&&)y2)4N!Mm`4cTTxWYhYmj2y*pO@1wunX@ z^SFja3$syr=zionmDWq;ROY%G75S4iYPG9Tk;kM_$6SqyyeEya7A>*onp^8B@P^sd zzs-Z?`Y(4i>aB}DPCC*0*W_wyb?EI$Nz<*5-u^Ht=BKxREN-1Dre%Ngq;>r(i&~$g zFfHpM)-OCsaTMqx)8*(mUA?Ifp2D;|MM{?wonuVG@_(0n3fOA<~(T}Lic3zp{t$k>P!1pr{2!F z(#}=t%`s1<-2`dpDOZ2CTP*FoSZ{$?=NZeO_kHzVBT>D3 zT$krTOXH7qbdeB)NcwKFa!EhC_Zi$fYDi4fh?rzmCU2(u!E_^r4vg;8YhY9lfBqMH z+zVK{>NXAT-xUQ|{gCd12HISEb?@DEh;87IK|=@jh_>|~G_aSy>mybe6E$G4ExPxh zAu-A0_%HZ$>k|{5?11`E)&T!kIsF1*wiuHnuh=GM}x+#{OkBvC|jXy zMX8=gQ^)6qoRZqn)}T(EYW^kbMs@4cb)dCNnJT4ZU;O=(^r6S7<~ENJJ|20!(mQy; z_z)oj&340X72-V;AmwZG>V#(T3C-eHC(b^}lLIP3KC8~1YiIGPm&GqMi+^aAlJ(-! zPD(S?J`MY@T#S^fEamE|a^Z1lCfTQ27aax4Mvoj2)3qBIGsI$Vy)`7Nf7i0=VwCOC zHKwbrY&ZNJU)df}-G=t++_hV`AyLC@WmOp~)MsGNLCFH>*eC=BSvy;W`VZ=!tjyq{ z-3E3Y5QTc(YU(%d-&S^J^p_nsxrC`v+oQ9^Xv*_`$}9M%GprJDM@pRk5U1BPTicWR|Uk4~-&L z@dFkv%9A|%kJrfTzgCEub#l*x>=>k&+dO_(#8{{6 z{=zoXLUt^YwR*tX=1>2mO|{hrKg~ArgNL!|V_R2w_P26xmmP@@Qrf@S3~P@M^o~Na zEa!}r&i{D|=kJBG=J`)Y%&e1#IxNQzV8$((W#jQ#O2_v(ZtbM^XaDo-k9qtr5M!OX z95z*YBgfBU98hO9m!fn^`{$lz)gw;=Rz}J)qxb*bZJTkOD#`vjuc`Ob`Q6xH%p5;e zWdC`(pirN`4sXLoO8pli{ntebvj6zSQ17qjpR9pHkade4#Y_ zrkofb#W+`*$LAN|l#W07b9{hgp1*l~tJK>+SuTz3(VMqF;qg+g#hzkISU#m5W;|_5 z)g#WC>g{BAoqf`0-q`f8;p=}>D<)9S4=V1IveI$9ZYr)Xpv3u1q2f|pAIe|Hb;k>f z>bQ^WAn}qq&J8Asb2?S^hcJjF@c?Y9I5(IiUICjbUPVP+ab{KAKY5%vJNqGpWVgvX z5#uwvjWg2Q$*yLKl;ZkilYeHnWlJ8AoL${9Z+~RB@vcdpY9N~pXQq>WwreeM{Z|3% z`3|wc64x)B)w3O96C|$Rc&KMN#M~cg@t~@nmiZs&YuO_Re**9)5P!ULp13sVN(abzo-PX~nms5C(zB-loQ;G95I8Xo01qVp0Wa=~9pO{K~iy4=BYPT7;hJ)?28JF|Ao=W__8FyF} zJvHNUtNX|lZMNSpmAJndm-d%5`< zf*F_ge{II4{^hB}*O_r?|0Xjo?LTS8rTz=4#IKuiY5#pQF73Bgbz(g!@@oE(`m>0F z&3H~TF6}R1#-;sl%y>!bz}Bj5x8sIb@sjd=#dX{OD;{LVrJj0byoy!6sTr5@ZOynG zcc>YcDQ%W+qkajEAgGcN7fZpNkl!)9FS|J{sB{kP1xlz(N$<+vFgRzJD= zS&m!Sj7$9iW?bqIG2hEF3rF?%gF2@~Z#^t#2W?bsGe(S&6xRQF-o8_gR zt!BKW)&9L^TbJ??T$%mvXU3)eB4%9b4>sdce?2oU?eAp9 zbw8VNsehswm-?rfajE|sGcM&$ga`jT324 zA$f#$T^DIjX)`Xztz*We{%|uc^>;PnQhulzm*b8z<8s`oW?brDY{sSj^=4ekZ#Ls{ z+|y=Uj(gFJOZi7;T+07r#-%-8>|i8UKZmHSt%Mnu`pcVfsXxq&Oa0BvxYR$`j7$Af z&A8M**NjX33(UCGpJ>LV{1!7V8(Q`(G6`&*cCX-}jXm->gB@c^rR zUohiR{}VGV<^M6`Qr`NnFu7f?0INME zd5JeNNhFxZ^os3Ni#0(scgojJ+;laly79lrF@JTm-dV?&_jdhNQz;*6#-%-BW?b6S){IMgx|?w+KhTUz`Eh34X;W!VD)IHH#P_BW zcgWIMSN}-;KB>gZrxLH9O5FNwqHg^x_0LG9{H9dmJ5q@sNF{zZmH5k4;&u2J#7Jg8 zRFgGyuDDgqR@;pGSs!#V;|?o6z>ND?@iAsx>Yrf7rT#C>xYWPaj7$C7&A8OR-;7KB zH_W({e`?0%xM^fRSO3Uyt>4b))}K+Kfy6Q_Q&3KiiB;{j1El)W5@wOFak7xE%Mq8JGHBnQ^Jd zE{k@}ezty#xm!O=d#vBO<`$RZRx<06@}Xv2$~QIR(w??vT-yJE8JGIw&A8M*&x}j` z3(dIHztxOO`GaO$j(gsW%W?0SajE~g8JGIA%0fI>|4aRa&A8O_jv1HZRyE^NPeU^< z<*onvtlM>z_H;AL%W=n6I7|7kNW^;|LIa@;3oTEC4KpssZDhu!o(^VQ%J(+o(w@O)T#h@CCe_G<|XQ|)Ej7$Bc%(&EF&5TPuwavI3x0xB2db*i$ zDL=%FOM6C{aXIchGcNTnG2>Eyq8XR^x0rFM|AHBp`d^uGsXwE?RiUe&rT%PYTQqTKlT=%~j zm-c*Y#^ty_nsKRrw;7lEPndD3|GXKO`t5~N?&oY~T{uo;)~ zz0A0r?@%)??RnpfOZmxWT*@yu`PH#08vN1Jh}XS5lY<4!T-QqSjRT=%~jm-ehP z<8s^+W?bsOYR0Ah$7WpWe`Us{{z65K{+Id#%(&EF-Hc294a~UI-@=Sb`A9P^t2DGvenYKgo!5oHEU};OYm-+CDSl`rlh@mpJ=JUiquY z9=ACAXSL*yxy4yt_uD16ILptKy#6O1te^4v68DnxBX}M4zxT*)#P#o9$|rH%PCXvV z8Sz|_uVus=NxrUI-2J?oxW##1gC*b6Eza`q;}273w>Zn|U-mV?h$l*Zv=M(J`EhP> z)<2h(Bk5lvrq8#q4EEVZdAa>MfLom9 zH%j>X~Zkqtvxcx=emE+OWe|NT;e z5!dtB9Hah+QvY{uan`TL=X$p|`?INdQ(rgT9(<(IPNRIZl;7tTXZ>BQ;3Ya@)BT)}8%RDze5b?<8u9)z@s%~=9wMAzBVJkJ5k_3E7aS;Y zUKjOO#3fa8Y?IBn2xO5NuVR(oY{o;Z_$f2)wBq`g>bZ_9K-{JP@OpC!$>Jpa@& zmpfymD?yH@jk`U2vRkP6sE9pXWQ#X4|mBRi&2N&T)$@9Vf~Z=omUg2XB3c zIc~XSoe;NPv`1S{S=Afk)f?m0vs~$&ieKehN%oj=w1QleVku6-Iij;jy;I{{^aeJ8`eF<3#)iJM}x^ zPOCC5g5Rka94AG0=XWYO`!6b5;x7Aj)MjOsR}S_|(Y1c3iZjpauj1vAj2n9W+l;6N%s&T$+>$%4};ayPGu2#nN8SZU=sG__5F>hSH zOg73nT~KoW^(k-UZfbtM>n&^iR4e0pW|{Je&Tg+G4|?r+mh!Upzu7AvR^q(W9nt(L znJ%F~=Nnz#UGs|HrA{N-T`c}HHFd(&>C;lPvePoNQ&XMPNz*1}JE`M=lbSkiR+<*m zrcAmz!%6KsGj&kLgh^T18JRt%q-AAgWI5@rQZpxAF)ckUV@hgPMt07O)QoB4GH1`o zE@Mr4M(H(WZEd%kGHL9DsWW1;rpLxPERWMtdnYv`JuN$pwvEloa$8N&v~+Dzq%qpI zmD49Vv3rlyHnDAD+Z8|QqB)=A{x8I%u9W_`N$VbC(T=v9x|1q6PKfiFx89CJJAc@G z!0RttKERG+uUxmK-KTaHUZlL}d=piqyy(2r$}3kl7u`>XBIO!`HU$=Z6Mno8x#Q32 z$EX;`2`tzgzNw(y-m9XVg2o^4b2+J?vGNmD?Zlx1QsbS<>w=uvO;#(Ew7)=J*dkU2 z7Ol??DcEgxr(KvdFaB{>IYR=uM{_y{7Q`nhmt8NA7k@oV$8Tp>Co2aQtPc<5hRvd+ zU@v={&O#tBDzIp8&X-%mCX(~**ff6pa{fPreWd2F4|bScmu>ypmLpdQzQ}d8BG+9S64-DkDzM>joxp}K!UL^0vc?Yrt@i|SBO})h z4W%HA?aH~^Xj{8odAnWza5m&m?+R>KvGj(Of*VG$VFVjiX2U9_H;i;QOqhRmo-Sl= z|2mP2?$A_x11(SmHEWXPT3~=nBVa{qsp0(TB$LiH2ukQ?5W$u0X5*#TD4i z73domTKp31_b$PqK<;i1dOWb;uWsgQ)~SL{;I z)S>m+umKyMTl!Ko11w=k8GN&qeJ|k8?re`g4){ zw}M>c{vEi;9k|Hd{udXSQ!9Ouw|f_PcOduuKwRp6E^-I=BByeZ>zIoy6>__q`#m9L z$lyTk@5kr-UQm#bySaOQmq%FZEGoEeRAAh;KY0(riK1?xi>d>hG8pumvY8uMS(wjd6Sx$%|A4Q%&16fX}L%t4q{tV>y+8P~La3VUP6U{G&f6x?LHP~xTdG?cEN&>&oO^*8v9m6AoHsNx(&RwiW!wQZ zX@r*NA66Hcdoyxfjot3eNw=(5eBxm;349?T6tU zJgXn*4(At{fQe6 zG1Y&i>E0`n0hs5Q&9y<8woh!mp2hMmnEAE7Pq>?{V0PGgD;qGc3(WXtgD5v!+1+3R zYnac4DuLVsfel}COtT%w-H@ESUfphbykB0#wm^PZ&t43jxQN|>$aNd~#U*dy?&pL) z2;}vNW*B^woV!u`NNmkaf2v5`8mb#^>ef(QPU6FUaVb>KV}{&tB1)A5xj)SR${lOk z#YP>2b>WG5T~vKXPex%}m)(p}PJCZt+?*{)qGwF2z=o5i{`@1VjAjlp;_o$E*LXWQ zcSoT0HqIn5F6AdDa@}V3SSOJzH9I85g>GeXNj3xCo@eN`WCk@iFUQBUyZXiTbPv>x zM!uJvyT|N-+c)=Yku$8XCN|-q$#M0!(?l-md;Q`@x-|n_6gBa^K<=;ekGZEvD_U>T zAy~&Ln)+Y$&?%bw+*wpk&fT8K)rnm9j@mmQ!S$r}l#~~-i^0G_pEZ>tc5@b7e$Fs4 zF8NRHSFU01MpYZeX?|q7bAPbG-ZjlJb-S4EEP74Hs6Ub!5UrW3sHI_1d?0kDrUruB z8+0aPK?j>y*qaC34lylZKm>cUtuEE?-F2#MRew`rT((YieImzTFlje466PN=y-7Qg z@)$m?w^C`VsZ?Woa_-04XjbI9cj?y8G{Zf~D(?!be@w6HS);I5b*Q+wI>(-yVZrz|J+(kut_C3?Hnz7we^?LSR zQ@v!*E{s{}Hk{7gYr56z;NW#Kcll^4m+st!F{`QkZ}x9Jb9~dk4CNC2yD(-gdn&Vw zk95;%tBd#OB=z1}q?fm__W!Dv*Rvn5m(^Fcr-P?mb}w)DYW*9%+>Dlax9)~AdU-c{ zDyx@&yyRc>@_s7*eJ{Ugs+aENL)7AQ|GAfEQMs&MK2GI-vzObMkn?5V6?u41bF!@XRG zie>b2KUWL8;*D19EbVD!VNA5!aNEoBiFwMl6G3xLw6{<>5ZByJ)QNFZ+!?GXmCNkq zKssp>)Gc$B86)nX0`^ME+PZ1M=9&vJy8-Fj18Rk~tDZmIruQjEgAr5yo zoxPo-xlbS7(Z&QT|LV?QWp(x=RHn04nTNjjf}O1oAR6B8UG=dQvplKJHoEdUd#pKr zgm$sbKH&v6d}nnvgFShslY8x%Es)B6suk;%Dl2h5kBBQTIRGUk-FY^*Oq`ud}rX7`f8e(igS-+fn&TGGSk zE`=}Y5n@KyCau?ji_Qdvhb(e9J%s<=;dlf0j#u6suLtkw=22@&kFekY%b7>CPwWA` zbJ8Hxi-|XvxaSc3u%Wx|Zx6~G?R@D5smrM|kF%uY*sRMdbEg=4-|)zFmz!7IMBZna7$~Ou zc(vVd#LI@bZ=K~M*IgazZon(TrJ74J3mwel!vU=MeK4_*vm-guMWboc=quU2Ni`88iN+eREG+xQsIrEtHyx(7?nla%sX%w`W7oyl=2A3FWwYVh6klzWVBI!5qSp4a33!ImcH z@y!akB*!It*C#@U3%F)Q$L7q!TB2kEnq=!x(7O|9{v#H7nPi=!S4`o(5NbgH`OzJ@@YwCcniTc2T+?7kRI>4E6t_D;MdN_8)umFMcgu zvNsp$eU^s*Cmp(IrCW!qYHn)VuikA{cAqZNTkQX&TNmjq_8)t;CMR07XBX*x_MbcV zFu$KG-MQ;^r2Gb3_`SW?x$aa{;^uTacLlpBqjSBt+5fV0^(Om|oqHZ_EY-Psjr~tM z_mErXA3E3Etehz>@aEk`dU^fdbgo`r|FLsBM3v}Vy~h4?=Z1xs)wzxy-0~Y7N2C9` zb2paPE|`7Q!^TjWfft3l&tU&$=SHa||1=Nxq>ZIIw~l-4T|E57(7IC7ag4sdGaaXE zI*tiW$BUx9HV5zC%|*Y&2J)I474xXO$9$V?uJddfJkJtyGB^8Qyv-DylRcSl;*%_| zCiRO=$%|UCBi>o`W}p!koRmN6&#M9x3CHT-9m{)p;YBqhR9()*e^|3K`qo|ODZI;8 z_ci2WI!5n_dLcn_?5A6>&E5+P-=hx&m1@k9ANF;ahMW6AR4*|ogsK6xGWQF&kp~K2 zU$}_odD=U6eSHXCZT3*V@J(NjE{g`};QDoro?!B8F3@v>`z{mEujTT?uB2MuxCp(l zZss>eW637QMVJHRw@6`gEPYwZlu%m7LD;LCDK|cMc?%| z7k%jsBp zF#~{+-bvLN2PFmpPd8oOPtN_s9R&QA!i<1<_OSL9w&V!V=aS=m1!2&X9t2CM%@Mcb z?0-2Bw4)VfM_=fhg&y$CXfk7AxtdWp7Ov7mK(VoqLCqp#VJO+cu@GQ$_bT2MJe~hw zEUfe@{mZd%h-+MWEUXS5^WPc^_i88qJQmj4J?7V(O0a-87RFMstg-O2yS2swebJ?n z`sz^OOYSG`yXJb0hrfBr&HhQD4E9&s|MUju+a;J@1e!t=J|#8|KLq`bFm`?KNawjOZS{A@}}F{ zyy*^g-*kHi-*kHyd((B}Zxr}5n3-YeK*Ds~SfTl5@oYhMHT}MP!O3u9hVuM@1!oI# zPAhn5gkpD0oYGsL6cm_nBAy5SCJlJ($AMZkI3wXYanr-K>xy@bzJO0lj`Q~9C;6`C zIH!Bv&r7%CJUQ$)g_}6H`i~@uLw;)&E&e=p=F{TMGv8SvHck%tN&I8q(f;DTw=dcv z&g_CJC!_NeCW>J`Qp}J z-=8cVOI^m?;5fJ6cZ&)4I(hZfx0F9He9-M;iv@3fAijTI_Av3nNrw`}p4)faBwmrb zF-M#=`=%eo$z6xtEq-?8D|}mUoOS)bcvGzX^b$RXIpd#--XXrw>Ah>kI(-k06R&Sw z_oz4~Zs46_uepQAiifUBe^y-h%;eX^`YY%ECEnI7{8w?<#J~*koIiUl6K|OE`EBA$ zXRjF~p8tNk8T$49~|3OTsh>-DzVKMH-?EhCx3oe?D)+BW^2cJ;`=e(#BwXH z94!uvn)ZhH>y77i730f&rr0g#nXs;(iM`+Ws-O5`e#*^a*r?4{iqk(Rhagli+w82c~CqN z*?o?<+RndRyKP z;w!7ywGg*Ier^qM(K)9t6O+s5tPx-P?C$TxKgY~{NLmr{Xt*7FQN`AK7q~IHlI}&BVK3nen*zTi~{; zVx#mEeZ7z2wwNaewn`hl<}Xk831uyEO3zal@VtAB%sj+PPG0U+IIp#9i}$ zdQ@!s`PGkzO>TPWfcWrRPhTQ_d4H$oV&z+A4G`~rCzbd+#~IuEx)gC^_57d3<1g=D zE{^`CW32eonoZY>Z_XRFLY#B!?n&a~Ek2wsK3}czF0u37Pi+?;yS7f0IBnd0$Hi-2 z>->pWVOEoO#UJYopCtAZ!Q@LjK;Cw_Ij=J(>q_a1vy ze6RiVzTyWJR(vgfG-vIF;+p3kZY{Px|B{QuR<}K}Ra`%QRXg$G*DuW$AKiKVAL82G z%MXb)_dgaV_Ps0gwD`+`ZxX~R1Kyo0w*2|#+G74k{bq{&)_&hZOzHQ;JL196JH8Z; zytwB9vEGs^lEs%BHs2u59hlKu4E=ia{o<&0OMPNi_6@&@u?dxa7cXxx;dyb;-cN23 z~Jx+OZAiDcNaYVp4e_j+DqcMN9%tfc6qkX z)#C7jd+!r3$@*c4IQzXCb;P$W-j*eP{q8S=#Su^ZnJU(p9)D0={7KJQ;`}pfc8Xm$ zPkcpe-ZrL#nA+{3jbi4e2DQY9#)n@Q^Afu>6%%f+Tp(WQTisFo{P~D*@xCu#*e@>M zFf?6ETln@h;*51|J`}S@P6>$JFMD~ni2lvEMgOLq=zo*S(f=JH`ZxDA`ZxWE{-0Di z`oC2~|K_~WzZvJ~|7Mk=|HdNvH{$~R?^7QA&lA!AG7K*R{hNM6{|A&u|7N~J|L-f0{>`{X|7IRT|5vCS{hR(k z|C5zR|DTEIf1QZ_&3Hxsb(BZ{=6**1W0Xh#y+rhXNJRf;zC-`@l}G=# ziRgcri2lzJ(Z89G(7zdP=>L3`qyNJq`oBy>|K@%~|K*iO|9%nuoAHeP&3uLa&AgBP zpVNBu|Eh@oM~djbnTY<){ek{ZDUbdi6w$w#U(ml9Kj^=q%F+LgBKkM?ANpUZJo;}V zqW>Hb{hRTL{-01D{g)Hb|3DG_|0<&YcoF@Z`5*n8`y2hgsB-ilCZc~cKcas#{?UJo z%F+LwBKkM;2l~HCdG!B=i2j#|=)Z%A{>}V}{`)A8{>{9A{&y&E6Z&7EW%O_E8}$E_ z^639k5&fHa2K^6J9{ro=1N47^^61~(hv@%2<jy z^639h5&f?a(Z890(Ek?Y(SKVJ{m&H9|ED7QpD3dLaU%NPDWZSlFZAC{dGsGGqW^0} z^nX@F|5ZiwZ{}z8pQJqcKO>_5Z$$KO<}dU=MS1jpw}}3K6VZPo5&dr#(SKbL{qGmi z|Mw#L-zK8}4I=vgOGN+eMfAT*ME^}i^xs58{|}4k|4R}5R~FI#y(0P_E2966BKkir zqW{q%`u|Bp|8I)ue~yU$9~aU8^CJ51ETaF%MD%YwkN&Sw9{pDk(f^Mk`uBuV7SaEsBKlt| zqW_vA`tK{E|6fG(UqwX!Ek*R7FQWf`BKl7e(f>ga{T~t0e?1ZXzbvBvxgz=x7194F z5&dV0=s#9O|CfvCe~^g&<3#jdT}1y&Mf88Qi2iR9(SNRp{=XB^e>)NVe=DN@E+YCL zE~5WSMD#yfME`Gz=>KaG{f`jQe+?1+FBZ}Nd=dS3714il5&fr%=s#0L{}Cek&lAyq zf{6aF6w&|ZBKp5iME}c0^q(f8{~03s&lb^tcM<)YafSZPI6?nrT%-TdT95uGi|D_X zi2jF(=-)4*e{;W~|EbEOe={GT|77LS|2`4@zb&Hwo+A2xNJRgpf6%|_U-WOr2l`*H z_2@rGME|Em^na&_{(lwGzqwB6-<&u4H~onIO~0W31=E0?aHHn)6eMN z^c(s&{eb?>bw&UEwH^9@T15X(iRizRi2lv^M*rsiK>ucZq5rvBkN&R`(f>0d`d=xc z|7IfkpD3b#GvA{BDaxaNGasV=_mxNgAtL%;CZhi*MfBfPME_=y}GNB=iy zJ^Ft{ME_Ta=>K{V{nr=K{|h4e|3O6mheh=Nqlo_B6w&`!5&i!qqW{4n`X3^q|1U)J ze^NyM--zh{dlCJw5Yc~>i2iRB(SJD+{fCL@{|yoS=Zomy+~4T`1Le`bJHMP0^Skos z|AdJCdx+@&0TKOo7tw#7i2luei2luejs7dD9Q{X%=>J^NCiHLaQ}l1{d-QMaBlK_X zOY~o$ZP9-R5&eHCqW_K}`u|u&|7Lzf|0&9&|5y?IPY}`nF%kXWA)^1AMfAT#ME}tu z`cD$ke_av%zbc~ti$wH)NJRg&Mf6`;ME~1F^uJm}|Bs94{~Qthmlx6hXCnF^BclH% zBKrSHME{*d^naa*{x1~K|5g$G{~@CP(<1u+R7C%aMD*WCME_Mq^dBRl|9BDow-M3* zgChEGDWd;YBKjXBqW>cz`mZIT|5rrx9}v-hx`_Ulis=6m5&bt8(f@K0{a-4g|2-o5 zUnQddN+SB7FQWg?Mf87@i2mOa(f|D-`oBd)|L=(Czqg3~jc3rm@fQ03Mdj#!jfno| ziRk}U5&gFi(SJ1&{ogI3|7%6`KTbsduZie?mWclAi0J<%5&hpIqW@_k`u|Eq|GPx= ze_TZW_loGhy@>uRi0FTgi2k1w(f|1(`oB#?|KmmU|GJ3&cZ%qLw}}4ti|GF@5&a(! z(fU zBKqGeqW_^H`tKv6|1=T(M~LXZhKT;Vi0J&l1u9dm{S3 zSVaHtis=6d5&cgW(f=nR`adJ0|IH%$Z!4nzZX){MB%=SuBKl7h(f{ot`uB4I=tqD5C#$BKjXGqW{Z8^#7xX{>}A5|FxAz|K_~W|C7q2e>2X}|8L5pe{=t# z|5nPQ|Cu8CH{&1uhbWK!&Gkb6W`08drk~LNSgl9@<~pMPSCvQqra#gDU&^C@bN{3N zWaZJnxv$Xw`^uyLWg_}F_aFM7syzB1B%=Q}Mf7jR1^PdvJo-2NiT*b#kN(YljsAxz zkN(Ykg8siy9{ro~hyJ6LNB^du(ZA_`^j}xy=--S>^gmd6^q(%G|H&fypD&{Sa1s3n zMD*WFME_=U^l!#L`X8cl^nX%B|1XN@e~XCz&Gw4JNB`!&MgL*Sqkl6#(f^~$qyJbD{htxh|BWL0|5-%; z3qvsRznMqSznNdq{~Ibt z|J_9N|FMYvkBjI(S498ki0FU2i2ltyhyJ@OkN(a5qGcuYKTkye%|!HHRYd=ni|D_K zi2fIe=>HiJ{kIU&f24^1&3%XdM<|c}+l%PGqKN*@{fPd*Qy%@Bc^Un$S04R;Dx&|Z zMD$-xME|#n=zpb%{u_ztzn+NxD~RYnPelLgMD%~Ii2hHD=s!n9|96Y%f3ArBeIokL z6w&{95&i!zqW>Nu`afSp|KEz}|4R}5w-(X=I1&BdDWdHKB{jU{Vx^K{|zGguOy=X2_pLc zL`45lBKrSGMF0Cl^#7oU{?Cf&zq*M29~aSonuz}Ei|D_Pi2nDA=>G>1{nrrD|27f* z|01IQKSlH(FQWgRBKlt=qW_5^`i~LO|3f1BZy=)o!y@|cBBKAwBKlt~qW=gH{l6fh z|DhuKe_KTVZAA1xMMVEEi-SmF1(J9LN&Ju`wjzn`N#Y|Uu>(nbizId5=W54RU|QyBu*uXc_eWUNo-6KGfCoElK3-8 zOecwpN#aD3co#{mMG`+Ci4T*+ktFdQk~oSaW{|{nB=HuKIE5t6Ac+BzIDjPnNfN&$ ziLa2v10-=YNvuf{dy~Y=NaAB8F`p#fPZAfBL`B(%`$^)HB+;g&BrU&A65l6@6-nYR zB=Jje%N&J)~eoYeZB#A$e#9buuJ(75eB)&ir zzaoiQB=HWC_!LRZCW(zm;xUr=G)Zhn5*Lxg!zA%nl6WymJWdkplf)d7c#tGcBZ+-T z;%Smtmn2?E5*v`j3rXS@l9)>pr<25&Na9$MScN1$K@#hb#5YM|J(BnbNgPTNyOP8t zlDL&5?j?z{Nn$ifyoV%yLK4@L#J@=5ERy&xNxYmS{zwuVlElwQ;%br@M-rEi#PTF@ z8%b_-xxA&D1}#GgpwT9UY(B%UORuaU$q zByj;r9841LCW&bzu{KF;MiN6w;&mkPRg!oWN&JW;HX(^$kiBt9~3oEcvW=gc{){M}bw^_`f1%{4!Zm4Eo5Kzw8JWOLkSr%(S}`IIeNZWaf$ zYBfgm`+R0TdVIo!_msc3Su-=9&-v@GW6F=+x6kz7S5H1^uIoKBXPR-)Yv;~oT7Uob z*EbZq?bu=Ns~fJp_BZ8g{`Q;cr<22nKd1bTK7DQyE1f#^yZFu1PbY{IKKS5y@y}JO zQpK;=tm!4bb>DsGi@!Ylu(|$sWM-Oqdc^wm_o{s3OE2Y!_5b|ST*qf_y)|C>E1EP( z7B6q#eu|iI$t9*gLVo$h^nd?%-ZA|;vTfUmTL0rCkC^e>_UO?)%7>pm{i}HEl~G2{I6dyAttZMt7GjlP=I-3dB6{+;elq6*)Oy zi}fm0F!${P3l=m`KD&AIVPb6Ex^2Z4_3E`3pPM%AQ}MgYFMmP&edWp#;?IKyJuLR? z+f%p>2R|xK+_UEu(Wd6# ze!D@-W1^$Gi4FhwP7sqicFYt%@7wn_ z@q^^#yTs$ehMD`e@2*{ol%KqN_iN%s-+#YFJo>~F{l!|p|NgDGrALp&;=X?U?h%K? z#f=wlTePUExT{yM8^x$!e?1|V3kfmz@BF!Q|5EX6aFz0ZJ@n8haecRL^TZpMEejK$zU7un#Mke?-`u}}4jpDFANtczr^SP>zi#gH z4eQpK`61`Pfi)^0ciws3#a2;K(PG_#f}>)UGiUx3r|#YRmYDqRyYs~w5fOF7cGasl z5nF!q%_i}S)YLb{Rd?RmPJE|lPve7*wQI*Jf7#~Ew~9YJ_Sg{d`s=PUKI;=7Z|32r z($mfScx==tGmkYp=bSd$?)I##uf&yO#;h0bnm_*>aZmsL4~TO={q!Mme4|D^#p^D* zC`Ej7`SQ-_g{W_ve>0Yji%!4&p&@mJUn{z>tcgSm1>DI zKl$WovGburpNK=-v`H5)?bIn-Jhx)S8saC3iMNOq%aw}|r^Lhr#4ksVd|4c|apMYc z+WYUnA%6eVQ$55-$Bx}BuDeK_`()@g%nEv61&x(65z4Siu(BqFMiZ4u=vS0jd=+LLc@<0A~Mr{1`*So|u z85ujpo36h4NAbin&-4-Ngoj6oAHMqPbaBb7S*OJ5jT`qBGh<^%iZS);cMwlM`siii zwijN=5(jSGdZ&2)@#Alcb3Xg*LGixq?Bn8j4I6e9KTArwL;UoOH`2t#d3lw^MK|6U zDK4KeFEUVZT3BjU29Oa0>62Ok_R&dbfMAl9y2xvqHNt+z77)?a_l4qBEm~YIR*j52SA2Wz+H1r=Qc_lnAHDY4RIyX7TFpiD zZ`y(W&3@6pxlZUmU+dAo=`Zwe#y9#m;}HFu`w{({^FjaSJkY*zME_z0cM*nxJ9R2?!qW_7a zP3Yf@PxL=VW$3@5i2k>W=>J<0{l6)q|K1|{H}^C8Pf{NJe=ef`4@C5TTtxqUMf5*e zME@6w=>MpQ{%eWoe~XCz&Hab|hbWK!Zxhk~E)o4liRjJs_ z{T~t0{}~be|0SaT^&-yov@91;DG6VZPw5&hQ{ z(SH>Y{ZAFqf3k@FYl!H-orwNhis=6f5&f?c(f>Ol`tK;B|I0-5Z+wRSuU8)Z_Yu+m zQzH65CZhjlBKp5wME@&A^naI#{`ZLJf3ArB$BXFyIuZRpDWd-cBKqGcqW=p;^#8ty z{>^-h{%0$X{tt`jzk!JUXNu^*vxxqOis=7R5&fSlqW@1s^j}d#|5HTt|D}ljM~Ucv znuz|t7t#NtBKlt~qW_0Q^nbC4{_{li-$q3LJw)_BTtxpbiRgc+i2l<>^uJd`|A$2M z|AL7Ae-qJvc@h0L7SaD25&hpJqW=>j`mZCR{|`m9P z{SOq;|M?>NpCh9G`$Y7Ao{0WG6Vd;tBKlt}qW?uA`d==h|L!9C-z=j4Cq(pbo^Q~9 znDXe~C!+sqBKm(wME|KG`u|l#|GP!>f3t}Ghl%L_0ulYcBBK8eBKof`qW|Yb^dBdp z|JOwHKSMMAPl@Q?%#Y~b%HNC{r@7Oe=`rF|F+7b|3^gh ze^f;Or$zLCrHKCbi|F69P{hRv<{hNM8|8-Q3{_haczqt?4|2@j1 z|MDXGH}?bjpQk+fKP;mElOp=RKt%t~iReE^ME?~;^uItv|IJ18Uspu`^+fb<<~Q_z zx$@|LrHK9qiRizxi2lv^LjUGILjM=49Q_{=(SJ)3{Vx>J|6mdQ?-6Z6|KDmE{YQ)F z-;7`M|E%)pe}stsuMpAy+amgZQ$+tAMfBfSME}Vm`X45u|6L;b-z}p5??v=)<{k9^ zyYlG2hlu|BiRjyB%=T2BKkMJLjS#$NB`f6=>KIA{hQ|*^#8f? z=zp|`{ws;-{}U1Y9}>}j8xj3?648G}5&fI_8~vA49{tCN=zpY${x^!~|9uhtKP967 zu_F4vSw#Q0i|GGL5&h2=(f=_K{cji1|HUHupDLpNd=dSBD5C#MMfCr;i2kRD=zpk) z{(ltF|JNe=&k)i7)gttiM@97if{6aNis=8i zi2gql(SNpx{u_$uKS@OYZ;0qWPelJWis*lai2l2Z=>J6#{f`&Xe?Ub4ei8luETaD^ zBKl7g(SJJ;{a+@c|5rrxzgR^78$|TqKt%r!i0JI(t{SOh*e^U|t9~9C5QW5<>D5C#d5&c&d(f?Z_ z`u|Eq|J_COKT$;g2_pKxTSWgYMD!miqW`rb`cDzj|7#-puO*`YaU%MkBclJSMD%}+ zi2i>N(f?!-{ZALs{}vJbw-V96PelI{MD*WGME`$@=zpJx{+|@l|4b46?-bGh^&qW@kZ`u|l#{~;p! zpDUvO0V4YEBBK8lBKlt~qW^&+`hQ47|J_9Nzf45`w}|Nfei8k55YhinBKm(_ME~nV z^nXA^|L2M5KT1UZ1tR)CBclJkBKm(Iwq{l|;wKV3xsqeS$7j)?xVMD#yKME~( z{y!Aa|D_`Oe_TZWQ$+MXR7C$jis=7q5&dU~=>KXF{XZk3|8Nogzbc~tSt9yxETaEd z5&hQ}(f^|&`hP)0|64`$e_TZWpNZ%{TSWg2Mf9H}qW?EU^q(i9{~Ja0KSMY}})b zzq0XOHoncqA3j3Tb+mCPHlE1F5!v`M8#iO))oi?njjOTog*Hym#tqpxDH~U2<9=*h zj*Y*WM^Za%T$GJVv2i#yZqUX<*|<*|r()yKY#fx0Q?l_=Hhze(nUy+@jUTmfGd4cO z#=F_LDI4Eu<2VEg!`PQ{n&Uc8#im?aBV!9jSI7JK{igXWSo|b z^RscaHg3tr*V;Hs8@FWRV{II%jRUpuTsHo13`y;@al$s<(8d|sI6xbJW#ct%T$+vd zv~jpL-qOZF*|=XDCu-wzZM>X~`?B%AHXhQ(ciK2w8?R~OZ*82bjSIGMp*D`u#sS*6 zN*fn!<3w#7-!YQT-^P*I_(dDHYvWdJJhqJ+w()T`e%8hh+PFR&pK0T6ZCspu(2DxgI>{v5!~u zul31nA zP5#6x(fOf?Rhljh>sh5$LX{2+$}cYGXnToh^@@Um6MCX7v3;*9O%tlLT3l{vSU@${ zz)hM@mHsYo%k9NA4~Z1o{A1n*<{_5l9bP`dqy6`$%|jq%_TQ7XoiohaQJA-Vz*|wy z%ZGctX5R;b%#0}+X;~Q;MmO!5F?Leg zG_y_X7HwKz$gA1^Pihvsq{-ymzI8{=Jny>Nac1uWJB~`;2gP2hS-QzvX9k_&Ck$*kA#6RU-o{{*&GdxjaQ{+3nR5y~27|&)h&QCr+Q5(K0QEVHVe>mhNn15M2-1i8rz1zESmHY`q`MCZRcTZ5&^Dy#|NobYMsFMVP)C_;%^X z&JdqI5!e=dY^O-d%4JS=d^HlUGT z4LD5RZ9pTx8W2XeSJWqWUyR8&C105axw$0euCTe=w5@4kW53#Uio8=Li=RGe$k*TR z+wHYtjVJSDykJ_>&#&$DH-d+oqxCaKYfZ0)SJ2V>nbu8I{yy#NQvY>qpGUrORx8Ih zz#MRs$+ouH$@F*SEc(b@E0t8vinH0(%4P@a4&Vl^oE@zDmdOU|#&XwI&JNbSUpH~3 z@YysW!tDWF{3@eqzV9_PFD%rz);mQz5+j&e%&GcAb*ih$x~J+7)rCH-yg4<0s5+u4 z{pOx}XsAv#iM%=0a-lln0+Xe=Znhb|HK*!k*PATOb+Z$>>gH74YXRh_7E{_uL?jl-*Jvh-E;MU|_@&&E}% zSMpb>$5;r7ar{*(RqDzJ^RpQ4E{4`(u~Vhal@hrCVX;16^-CiBRVWC%AR@7PRbMq< zH*U9bVeVF8iPb|GzvYW$SsPB)RADXI3T=ZMGp&#*vaV7j0d_i6L=#7-T)3^ORw>>9 zd-zB`9#+@pQRh*sC1+68tH-|7plU^SL$-R6gOcTH6u&wTQWoN9jQf1QSE0*EQr#w{*0$+tR*Q(})t5zf~$Vy6#-`{B=D_d3X9M6wnJ#S_B%FN`H|Elj0L~&HiN_|7Pb)|66k(@NaPX!tiJoy09?J zqgfF?#eem%ufvaqbgsj~S-R&M|Lnd4`4j%IDY!W?C#1R7tq(u*ravmyKO@`zyq@J~ zf7EjS)!7S^`h1ntXJ2AGr{{HXQ(f_<)mI#j58s!VllAoePBZ(&FS^n@$EMZe6O+>8 z>G&MFzENiKmGO%^bY)1;zs4bXkz4dcU~UK7$;?Qg~XtG+b@{9o0gcf+6hSKT|TboV}@u2ug&7wq14 z>fY|*XF@75SKYuY_5W-_l`Opp)xLby4bG(Y^~)d0Osd&c-y`(hh2>dM-nSx(%y%Kt z&XVSv5qa;kk(p?<-adAlZ%5=yd_FSYmb9IHAU5BS-0lA9Gg7dgeY!N?l1kSr^*JeX z-1KQB=KCqrr%i~~`%TfezO0PwoEfS1-H$huv6Hg1oa~ILGaR#h&a|va6Q*UPn~Hh` z>+v6ce#n|QJu^GH*lxy6nlUjWGdp8e@ut`p)1u9@4J%saHrZ|+-1E4JX_=0DG@azM z%;`DP(zBcyQ_{%lSS_=s&S=R)q)ldUkO^_F3b)I)dnvP@C++4zn%`@a^EoMfyn6b# zbCf7b;n`hji${vwg3>>EATi13477{egGIyazSjizJ%CPQJ?g^Qz&eb9yKKF@@s`M^%leVuAt;|h7I->PwHjHE$Zk^G<&@7GHlh*`&Gb8-meTOs%}C&2$u5ZKu-84 zZ*fWR%BAe_7W?vsf+gv;Qj@=YSf^{Ui;1qUc5nnc#EOI zi#O=7xA=9iorAV}?c5z~=b)Foc77Rb=fL~CcG{k0#M<`R;aJ8XzTLZy4T2YMc)GXv zW3Zh=x_Z~~K(L)dV!ZaP_Zr6yTG4A?;o-bbN^ZaC=N|8Hf#BgTf52O880@Rz*LaIz z!D}!)&09PfJlya;-r*Jpdtqqdf!rlKWgH3);US-UhkGS>b}4Uqhg%UmyOf8$!z~IP zF6G8jXE(g$;ktT<=@>k_fl=OJqJn2P@QkcKM0IvZi+Vxx%tmcG>>=q^$Ydw(WPX9>c>f?mN%D zZa!y}UF>_lElMeQP3?|026vQV7YmPHdj7W6M%A=?E_I9AP29hm&)lMR(eAm-`FpF^ zlIpeWu7{8D7LU}nMVHsD<1W5&PO#_~Z}Fab!J-em#aSl)P;I#UMQ?FXL%Y?GSG~p2 z!7DdpowwMkk=?4)`Pu8;CfLp)_j!w>yvF&Q;hpNbJFujvc73aG-jI1-I|l_X-jGpVJKF>=-jLSk zx=nZEOpOaVMY~1Kg6$k^+gBkt>`Gm{y^%zj%wE2HQD!i`UL|!FCQ_<+bzH zU^@rT_1gJxu$_Y^dhL8Pcs&PYd+l`pN*6O6?V=@Svx^T0&t{N43p;4bnC0hqSG!`c z=_9&%i~EB^VMJB$EMD|Z!RL(l&Re|2I|Yh%d5f9Bi#O7}z=c1b@eY?0JlwEEZ{Ls_h4yvxHQ`LEvMj9?3f79QJO`oU|#mSFd#yy!J%dGLf& zmU@kv8a&~YNnWG+22VI8(Q8cM^&L_2a0k7^`GY4sXqC6PCwRC)v%SMT6Fl6Yq2A&0 zf`=Pq&;2^@#JMb!y-{+bcj6RX<@JAIqlT4iloOjZdun#tSeTvZa-vAA7 zIk6cNQ^#kfP0dK1m`+`rb7IG3PtVNafG(~W$4d5@Hg(cC4mh2i@gvsk+uhGt{)2$n zanq+x&ETs*Y zezwt*gRSokHRnRgw9eMIaX^+QSXVUpie^}D%^$_!*!pd}Hv!95-u8BVNp@wuVtQ=3 zjq9g$)uCV4E{em$R+te-}i z+GVTRU)@;R!o0IC%SOaEM3D-oxiO=Km{br=599l)1JRA z$Yr5u{drz}%NOj19&P{G;#pxhc z{xGlpFt2{eIS}@Mf%@vM+ zyB}TOqV;VYU>&c1Q(Muat!Md0iTXAkuA5iiw$tv$*0cFdEU3(${{XN31HAerw=X$< zwo});M0S^kwtk}$D@$aZJ%3Yw-duNg>suXb~HdEW^dk?qAFd;Zoda#C5xcmI}3{`;;HJ1=>B_b6rm z^wT=~98z=(KeM%cz9?SqckFXR@$yi|J`WTx4-3Ze7B4U7SbrBU=VEwXEM6Y&Sl<>e zui#jp7B8>pSU(mouM~`vE?&-)Q?sHa?y}#h9Q0JtwSK3HWBpUSJTmB);^k3}^+xgX zs*d$R@$zbpo#%^}^D)%U-$hpViH5iHa*<-jO-;wnx5dkAId&c`Uhci96fI=gU&<2h z27bqTiz&6e_f}J?Tu;NLlRx;|+2ZT`j`zA%yqNZ!TcX6x`W^4(sKi>o6J4UjZhzk2 zlQTu=>R`{#P%CDf@r#C43eCi!$x-Hj( zu#z`HXW8=3Zm})D%9h*t#M}NFTOL<@`?q`wtRB&@@2Ms zaPjh6ZFy4h@;g-?a=M`8{Ik-Om!40a_O>rM|7@bX8sn;Dyu&_IUV1+N%-g@u$>~@@l*>+xHu{l)qQOlvgYjx6zUEvi9H2D<4+ke(6PdwB2bD z4)^w7GQLD1!)0yn=!1zqln}u8Uj-f7sQhthQ>LU&m^yu0YF2hyX0}2Rv$Au>k7xg> zsXbEq4@yl=9Gt>m){vUovskWgkKii4uFRN{k)4qq+pc4~j?N6>Vk)FhPn|Gj`q;E7 zspe}X>l+dqNs?F(OcDZn`=2MW_>wkSI6fIOF z$b_>u5j2WNPDyXWpH}>7&7U|&5zi?Zlx1jH /* for std::istream, std::ostream, std::string */ -#include -#endif - - -/* Instantiated by configure. */ -#if ! defined (__GMP_WITHIN_CONFIGURE) -#define __GMP_HAVE_HOST_CPU_FAMILY_power 0 -#define __GMP_HAVE_HOST_CPU_FAMILY_powerpc 0 -#define GMP_LIMB_BITS 64 -#define GMP_NAIL_BITS 0 -#endif -#define GMP_NUMB_BITS (GMP_LIMB_BITS - GMP_NAIL_BITS) -#define GMP_NUMB_MASK ((~ __GMP_CAST (mp_limb_t, 0)) >> GMP_NAIL_BITS) -#define GMP_NUMB_MAX GMP_NUMB_MASK -#define GMP_NAIL_MASK (~ GMP_NUMB_MASK) - - -/* The following (everything under ifndef __GNU_MP__) must be identical in - gmp.h and mp.h to allow both to be included in an application or during - the library build. */ -#ifndef __GNU_MP__ -#define __GNU_MP__ 5 - -#define __need_size_t /* tell gcc stddef.h we only want size_t */ -#if defined (__cplusplus) -#include /* for size_t */ -#else -#include /* for size_t */ -#endif -#undef __need_size_t - -/* Instantiated by configure. */ -#if ! defined (__GMP_WITHIN_CONFIGURE) -/* #undef _LONG_LONG_LIMB */ -#define __GMP_LIBGMP_DLL 0 -#endif - - -/* __STDC__ - some ANSI compilers define this only to 0, hence the use of - "defined" and not "__STDC__-0". In particular Sun workshop C 5.0 - sets __STDC__ to 0, but requires "##" for token pasting. - - _AIX - gnu ansidecl.h asserts that all known AIX compilers are ANSI but - don't always define __STDC__. - - __DECC - current versions of DEC C (5.9 for instance) for alpha are ANSI, - but don't define __STDC__ in their default mode. Don't know if old - versions might have been K&R, but let's not worry about that unless - someone is still using one. - - _mips - gnu ansidecl.h says the RISC/OS MIPS compiler is ANSI in SVR4 - mode, but doesn't define __STDC__. - - _MSC_VER - Microsoft C is ANSI, but __STDC__ is undefined unless the /Za - option is given (in which case it's 1). - - _WIN32 - tested for by gnu ansidecl.h, no doubt on the assumption that - all w32 compilers are ansi. - - Note: This same set of tests is used by gen-psqr.c and - demos/expr/expr-impl.h, so if anything needs adding, then be sure to - update those too. */ - -#if defined (__STDC__) \ - || defined (__cplusplus) \ - || defined (_AIX) \ - || defined (__DECC) \ - || (defined (__mips) && defined (_SYSTYPE_SVR4)) \ - || defined (_MSC_VER) \ - || defined (_WIN32) -#define __GMP_HAVE_CONST 1 -#define __GMP_HAVE_PROTOTYPES 1 -#define __GMP_HAVE_TOKEN_PASTE 1 -#else -#define __GMP_HAVE_CONST 0 -#define __GMP_HAVE_PROTOTYPES 0 -#define __GMP_HAVE_TOKEN_PASTE 0 -#endif - - -#if __GMP_HAVE_CONST -#define __gmp_const const -#define __gmp_signed signed -#else -#define __gmp_const -#define __gmp_signed -#endif - - -/* __GMP_DECLSPEC supports Windows DLL versions of libgmp, and is empty in - all other circumstances. - - When compiling objects for libgmp, __GMP_DECLSPEC is an export directive, - or when compiling for an application it's an import directive. The two - cases are differentiated by __GMP_WITHIN_GMP defined by the GMP Makefiles - (and not defined from an application). - - __GMP_DECLSPEC_XX is similarly used for libgmpxx. __GMP_WITHIN_GMPXX - indicates when building libgmpxx, and in that case libgmpxx functions are - exports, but libgmp functions which might get called are imports. - - libmp.la uses __GMP_DECLSPEC, just as if it were libgmp.la. libgmp and - libmp don't call each other, so there's no conflict or confusion. - - Libtool DLL_EXPORT define is not used. - - There's no attempt to support GMP built both static and DLL. Doing so - would mean applications would have to tell us which of the two is going - to be used when linking, and that seems very tedious and error prone if - using GMP by hand, and equally tedious from a package since autoconf and - automake don't give much help. - - __GMP_DECLSPEC is required on all documented global functions and - variables, the various internals in gmp-impl.h etc can be left unadorned. - But internals used by the test programs or speed measuring programs - should have __GMP_DECLSPEC, and certainly constants or variables must - have it or the wrong address will be resolved. - - In gcc __declspec can go at either the start or end of a prototype. - - In Microsoft C __declspec must go at the start, or after the type like - void __declspec(...) *foo()". There's no __dllexport or anything to - guard against someone foolish #defining dllexport. _export used to be - available, but no longer. - - In Borland C _export still exists, but needs to go after the type, like - "void _export foo();". Would have to change the __GMP_DECLSPEC syntax to - make use of that. Probably more trouble than it's worth. */ - -#if defined (__GNUC__) -#define __GMP_DECLSPEC_EXPORT __declspec(__dllexport__) -#define __GMP_DECLSPEC_IMPORT __declspec(__dllimport__) -#endif -#if defined (_MSC_VER) || defined (__BORLANDC__) -#define __GMP_DECLSPEC_EXPORT __declspec(dllexport) -#define __GMP_DECLSPEC_IMPORT __declspec(dllimport) -#endif -#ifdef __WATCOMC__ -#define __GMP_DECLSPEC_EXPORT __export -#define __GMP_DECLSPEC_IMPORT __import -#endif -#ifdef __IBMC__ -#define __GMP_DECLSPEC_EXPORT _Export -#define __GMP_DECLSPEC_IMPORT _Import -#endif - -#if __GMP_LIBGMP_DLL -#if __GMP_WITHIN_GMP -/* compiling to go into a DLL libgmp */ -#define __GMP_DECLSPEC __GMP_DECLSPEC_EXPORT -#else -/* compiling to go into an application which will link to a DLL libgmp */ -#define __GMP_DECLSPEC __GMP_DECLSPEC_IMPORT -#endif -#else -/* all other cases */ -#define __GMP_DECLSPEC -#endif - - -#ifdef __GMP_SHORT_LIMB -typedef unsigned int mp_limb_t; -typedef int mp_limb_signed_t; -#else -#ifdef _LONG_LONG_LIMB -typedef unsigned long long int mp_limb_t; -typedef long long int mp_limb_signed_t; -#else -typedef unsigned long int mp_limb_t; -typedef long int mp_limb_signed_t; -#endif -#endif -typedef unsigned long int mp_bitcnt_t; - -/* For reference, note that the name __mpz_struct gets into C++ mangled - function names, which means although the "__" suggests an internal, we - must leave this name for binary compatibility. */ -typedef struct -{ - int _mp_alloc; /* Number of *limbs* allocated and pointed - to by the _mp_d field. */ - int _mp_size; /* abs(_mp_size) is the number of limbs the - last field points to. If _mp_size is - negative this is a negative number. */ - mp_limb_t *_mp_d; /* Pointer to the limbs. */ -} __mpz_struct; - -#endif /* __GNU_MP__ */ - - -typedef __mpz_struct MP_INT; /* gmp 1 source compatibility */ -typedef __mpz_struct mpz_t[1]; - -typedef mp_limb_t * mp_ptr; -typedef __gmp_const mp_limb_t * mp_srcptr; -#if defined (_CRAY) && ! defined (_CRAYMPP) -/* plain `int' is much faster (48 bits) */ -#define __GMP_MP_SIZE_T_INT 1 -typedef int mp_size_t; -typedef int mp_exp_t; -#else -#define __GMP_MP_SIZE_T_INT 0 -typedef long int mp_size_t; -typedef long int mp_exp_t; -#endif - -typedef struct -{ - __mpz_struct _mp_num; - __mpz_struct _mp_den; -} __mpq_struct; - -typedef __mpq_struct MP_RAT; /* gmp 1 source compatibility */ -typedef __mpq_struct mpq_t[1]; - -typedef struct -{ - int _mp_prec; /* Max precision, in number of `mp_limb_t's. - Set by mpf_init and modified by - mpf_set_prec. The area pointed to by the - _mp_d field contains `prec' + 1 limbs. */ - int _mp_size; /* abs(_mp_size) is the number of limbs the - last field points to. If _mp_size is - negative this is a negative number. */ - mp_exp_t _mp_exp; /* Exponent, in the base of `mp_limb_t'. */ - mp_limb_t *_mp_d; /* Pointer to the limbs. */ -} __mpf_struct; - -/* typedef __mpf_struct MP_FLOAT; */ -typedef __mpf_struct mpf_t[1]; - -/* Available random number generation algorithms. */ -typedef enum -{ - GMP_RAND_ALG_DEFAULT = 0, - GMP_RAND_ALG_LC = GMP_RAND_ALG_DEFAULT /* Linear congruential. */ -} gmp_randalg_t; - -/* Random state struct. */ -typedef struct -{ - mpz_t _mp_seed; /* _mp_d member points to state of the generator. */ - gmp_randalg_t _mp_alg; /* Currently unused. */ - union { - void *_mp_lc; /* Pointer to function pointers structure. */ - } _mp_algdata; -} __gmp_randstate_struct; -typedef __gmp_randstate_struct gmp_randstate_t[1]; - -/* Types for function declarations in gmp files. */ -/* ??? Should not pollute user name space with these ??? */ -typedef __gmp_const __mpz_struct *mpz_srcptr; -typedef __mpz_struct *mpz_ptr; -typedef __gmp_const __mpf_struct *mpf_srcptr; -typedef __mpf_struct *mpf_ptr; -typedef __gmp_const __mpq_struct *mpq_srcptr; -typedef __mpq_struct *mpq_ptr; - - -/* This is not wanted in mp.h, so put it outside the __GNU_MP__ common - section. */ -#if __GMP_LIBGMP_DLL -#if __GMP_WITHIN_GMPXX -/* compiling to go into a DLL libgmpxx */ -#define __GMP_DECLSPEC_XX __GMP_DECLSPEC_EXPORT -#else -/* compiling to go into a application which will link to a DLL libgmpxx */ -#define __GMP_DECLSPEC_XX __GMP_DECLSPEC_IMPORT -#endif -#else -/* all other cases */ -#define __GMP_DECLSPEC_XX -#endif - - -#if __GMP_HAVE_PROTOTYPES -#define __GMP_PROTO(x) x -#else -#define __GMP_PROTO(x) () -#endif - -#ifndef __MPN -#if __GMP_HAVE_TOKEN_PASTE -#define __MPN(x) __gmpn_##x -#else -#define __MPN(x) __gmpn_/**/x -#endif -#endif - -/* For reference, "defined(EOF)" cannot be used here. In g++ 2.95.4, - defines EOF but not FILE. */ -#if defined (FILE) \ - || defined (H_STDIO) \ - || defined (_H_STDIO) /* AIX */ \ - || defined (_STDIO_H) /* glibc, Sun, SCO */ \ - || defined (_STDIO_H_) /* BSD, OSF */ \ - || defined (__STDIO_H) /* Borland */ \ - || defined (__STDIO_H__) /* IRIX */ \ - || defined (_STDIO_INCLUDED) /* HPUX */ \ - || defined (__dj_include_stdio_h_) /* DJGPP */ \ - || defined (_FILE_DEFINED) /* Microsoft */ \ - || defined (__STDIO__) /* Apple MPW MrC */ \ - || defined (_MSL_STDIO_H) /* Metrowerks */ \ - || defined (_STDIO_H_INCLUDED) /* QNX4 */ \ - || defined (_ISO_STDIO_ISO_H) /* Sun C++ */ -#define _GMP_H_HAVE_FILE 1 -#endif - -/* In ISO C, if a prototype involving "struct obstack *" is given without - that structure defined, then the struct is scoped down to just the - prototype, causing a conflict if it's subsequently defined for real. So - only give prototypes if we've got obstack.h. */ -#if defined (_OBSTACK_H) /* glibc */ -#define _GMP_H_HAVE_OBSTACK 1 -#endif - -/* The prototypes for gmp_vprintf etc are provided only if va_list is - available, via an application having included or . - Usually va_list is a typedef so can't be tested directly, but C99 - specifies that va_start is a macro (and it was normally a macro on past - systems too), so look for that. - - will define some sort of va_list for vprintf and vfprintf, but - let's not bother trying to use that since it's not standard and since - application uses for gmp_vprintf etc will almost certainly require the - whole or anyway. */ - -#ifdef va_start -#define _GMP_H_HAVE_VA_LIST 1 -#endif - -/* Test for gcc >= maj.min, as per __GNUC_PREREQ in glibc */ -#if defined (__GNUC__) && defined (__GNUC_MINOR__) -#define __GMP_GNUC_PREREQ(maj, min) \ - ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) -#else -#define __GMP_GNUC_PREREQ(maj, min) 0 -#endif - -/* "pure" is in gcc 2.96 and up, see "(gcc)Function Attributes". Basically - it means a function does nothing but examine its arguments and memory - (global or via arguments) to generate a return value, but changes nothing - and has no side-effects. __GMP_NO_ATTRIBUTE_CONST_PURE lets - tune/common.c etc turn this off when trying to write timing loops. */ -#if __GMP_GNUC_PREREQ (2,96) && ! defined (__GMP_NO_ATTRIBUTE_CONST_PURE) -#define __GMP_ATTRIBUTE_PURE __attribute__ ((__pure__)) -#else -#define __GMP_ATTRIBUTE_PURE -#endif - - -/* __GMP_CAST allows us to use static_cast in C++, so our macros are clean - to "g++ -Wold-style-cast". - - Casts in "extern inline" code within an extern "C" block don't induce - these warnings, so __GMP_CAST only needs to be used on documented - macros. */ - -#ifdef __cplusplus -#define __GMP_CAST(type, expr) (static_cast (expr)) -#else -#define __GMP_CAST(type, expr) ((type) (expr)) -#endif - - -/* An empty "throw ()" means the function doesn't throw any C++ exceptions, - this can save some stack frame info in applications. - - Currently it's given only on functions which never divide-by-zero etc, - don't allocate memory, and are expected to never need to allocate memory. - This leaves open the possibility of a C++ throw from a future GMP - exceptions scheme. - - mpz_set_ui etc are omitted to leave open the lazy allocation scheme - described in doc/tasks.html. mpz_get_d etc are omitted to leave open - exceptions for float overflows. - - Note that __GMP_NOTHROW must be given on any inlines the same as on their - prototypes (for g++ at least, where they're used together). Note also - that g++ 3.0 demands that __GMP_NOTHROW is before other attributes like - __GMP_ATTRIBUTE_PURE. */ - -#if defined (__cplusplus) -#define __GMP_NOTHROW throw () -#else -#define __GMP_NOTHROW -#endif - - -/* PORTME: What other compilers have a useful "extern inline"? "static - inline" would be an acceptable substitute if the compiler (or linker) - discards unused statics. */ - - /* gcc has __inline__ in all modes, including strict ansi. Give a prototype - for an inline too, so as to correctly specify "dllimport" on windows, in - case the function is called rather than inlined. - GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 - inline semantics, unless -fgnu89-inline is used. */ -#ifdef __GNUC__ -#if (defined __GNUC_STDC_INLINE__) || (__GNUC__ == 4 && __GNUC_MINOR__ == 2) -#define __GMP_EXTERN_INLINE extern __inline__ __attribute__ ((__gnu_inline__)) -#else -#define __GMP_EXTERN_INLINE extern __inline__ -#endif -#define __GMP_INLINE_PROTOTYPES 1 -#endif - -/* DEC C (eg. version 5.9) supports "static __inline foo()", even in -std1 - strict ANSI mode. Inlining is done even when not optimizing (ie. -O0 - mode, which is the default), but an unnecessary local copy of foo is - emitted unless -O is used. "extern __inline" is accepted, but the - "extern" appears to be ignored, ie. it becomes a plain global function - but which is inlined within its file. Don't know if all old versions of - DEC C supported __inline, but as a start let's do the right thing for - current versions. */ -#ifdef __DECC -#define __GMP_EXTERN_INLINE static __inline -#endif - -/* SCO OpenUNIX 8 cc supports "static inline foo()" but not in -Xc strict - ANSI mode (__STDC__ is 1 in that mode). Inlining only actually takes - place under -O. Without -O "foo" seems to be emitted whether it's used - or not, which is wasteful. "extern inline foo()" isn't useful, the - "extern" is apparently ignored, so foo is inlined if possible but also - emitted as a global, which causes multiple definition errors when - building a shared libgmp. */ -#ifdef __SCO_VERSION__ -#if __SCO_VERSION__ > 400000000 && __STDC__ != 1 \ - && ! defined (__GMP_EXTERN_INLINE) -#define __GMP_EXTERN_INLINE static inline -#endif -#endif - -/* Microsoft's C compiler accepts __inline */ -#ifdef _MSC_VER -#define __GMP_EXTERN_INLINE __inline -#endif - -/* Recent enough Sun C compilers want "inline" */ -#if defined (__SUNPRO_C) && __SUNPRO_C >= 0x560 \ - && ! defined (__GMP_EXTERN_INLINE) -#define __GMP_EXTERN_INLINE inline -#endif - -/* Somewhat older Sun C compilers want "static inline" */ -#if defined (__SUNPRO_C) && __SUNPRO_C >= 0x540 \ - && ! defined (__GMP_EXTERN_INLINE) -#define __GMP_EXTERN_INLINE static inline -#endif - - -/* C++ always has "inline" and since it's a normal feature the linker should - discard duplicate non-inlined copies, or if it doesn't then that's a - problem for everyone, not just GMP. */ -#if defined (__cplusplus) && ! defined (__GMP_EXTERN_INLINE) -#define __GMP_EXTERN_INLINE inline -#endif - -/* Don't do any inlining within a configure run, since if the compiler ends - up emitting copies of the code into the object file it can end up - demanding the various support routines (like mpn_popcount) for linking, - making the "alloca" test and perhaps others fail. And on hppa ia64 a - pre-release gcc 3.2 was seen not respecting the "extern" in "extern - __inline__", triggering this problem too. */ -#if defined (__GMP_WITHIN_CONFIGURE) && ! __GMP_WITHIN_CONFIGURE_INLINE -#undef __GMP_EXTERN_INLINE -#endif - -/* By default, don't give a prototype when there's going to be an inline - version. Note in particular that Cray C++ objects to the combination of - prototype and inline. */ -#ifdef __GMP_EXTERN_INLINE -#ifndef __GMP_INLINE_PROTOTYPES -#define __GMP_INLINE_PROTOTYPES 0 -#endif -#else -#define __GMP_INLINE_PROTOTYPES 1 -#endif - - -#define __GMP_ABS(x) ((x) >= 0 ? (x) : -(x)) -#define __GMP_MAX(h,i) ((h) > (i) ? (h) : (i)) - -/* __GMP_USHRT_MAX is not "~ (unsigned short) 0" because short is promoted - to int by "~". */ -#define __GMP_UINT_MAX (~ (unsigned) 0) -#define __GMP_ULONG_MAX (~ (unsigned long) 0) -#define __GMP_USHRT_MAX ((unsigned short) ~0) - - -/* __builtin_expect is in gcc 3.0, and not in 2.95. */ -#if __GMP_GNUC_PREREQ (3,0) -#define __GMP_LIKELY(cond) __builtin_expect ((cond) != 0, 1) -#define __GMP_UNLIKELY(cond) __builtin_expect ((cond) != 0, 0) -#else -#define __GMP_LIKELY(cond) (cond) -#define __GMP_UNLIKELY(cond) (cond) -#endif - -#ifdef _CRAY -#define __GMP_CRAY_Pragma(str) _Pragma (str) -#else -#define __GMP_CRAY_Pragma(str) -#endif - - -/* Allow direct user access to numerator and denominator of a mpq_t object. */ -#define mpq_numref(Q) (&((Q)->_mp_num)) -#define mpq_denref(Q) (&((Q)->_mp_den)) - - -#if defined (__cplusplus) -extern "C" { -using std::FILE; -#endif - -#define mp_set_memory_functions __gmp_set_memory_functions -__GMP_DECLSPEC void mp_set_memory_functions __GMP_PROTO ((void *(*) (size_t), - void *(*) (void *, size_t, size_t), - void (*) (void *, size_t))) __GMP_NOTHROW; - -#define mp_get_memory_functions __gmp_get_memory_functions -__GMP_DECLSPEC void mp_get_memory_functions __GMP_PROTO ((void *(**) (size_t), - void *(**) (void *, size_t, size_t), - void (**) (void *, size_t))) __GMP_NOTHROW; - -#define mp_bits_per_limb __gmp_bits_per_limb -__GMP_DECLSPEC extern __gmp_const int mp_bits_per_limb; - -#define gmp_errno __gmp_errno -__GMP_DECLSPEC extern int gmp_errno; - -#define gmp_version __gmp_version -__GMP_DECLSPEC extern __gmp_const char * __gmp_const gmp_version; - - -/**************** Random number routines. ****************/ - -/* obsolete */ -#define gmp_randinit __gmp_randinit -__GMP_DECLSPEC void gmp_randinit __GMP_PROTO ((gmp_randstate_t, gmp_randalg_t, ...)); - -#define gmp_randinit_default __gmp_randinit_default -__GMP_DECLSPEC void gmp_randinit_default __GMP_PROTO ((gmp_randstate_t)); - -#define gmp_randinit_lc_2exp __gmp_randinit_lc_2exp -__GMP_DECLSPEC void gmp_randinit_lc_2exp __GMP_PROTO ((gmp_randstate_t, - mpz_srcptr, unsigned long int, - mp_bitcnt_t)); - -#define gmp_randinit_lc_2exp_size __gmp_randinit_lc_2exp_size -__GMP_DECLSPEC int gmp_randinit_lc_2exp_size __GMP_PROTO ((gmp_randstate_t, mp_bitcnt_t)); - -#define gmp_randinit_mt __gmp_randinit_mt -__GMP_DECLSPEC void gmp_randinit_mt __GMP_PROTO ((gmp_randstate_t)); - -#define gmp_randinit_set __gmp_randinit_set -__GMP_DECLSPEC void gmp_randinit_set __GMP_PROTO ((gmp_randstate_t, __gmp_const __gmp_randstate_struct *)); - -#define gmp_randseed __gmp_randseed -__GMP_DECLSPEC void gmp_randseed __GMP_PROTO ((gmp_randstate_t, mpz_srcptr)); - -#define gmp_randseed_ui __gmp_randseed_ui -__GMP_DECLSPEC void gmp_randseed_ui __GMP_PROTO ((gmp_randstate_t, unsigned long int)); - -#define gmp_randclear __gmp_randclear -__GMP_DECLSPEC void gmp_randclear __GMP_PROTO ((gmp_randstate_t)); - -#define gmp_urandomb_ui __gmp_urandomb_ui -__GMP_DECLSPEC unsigned long gmp_urandomb_ui __GMP_PROTO ((gmp_randstate_t, unsigned long)); - -#define gmp_urandomm_ui __gmp_urandomm_ui -__GMP_DECLSPEC unsigned long gmp_urandomm_ui __GMP_PROTO ((gmp_randstate_t, unsigned long)); - - -/**************** Formatted output routines. ****************/ - -#define gmp_asprintf __gmp_asprintf -__GMP_DECLSPEC int gmp_asprintf __GMP_PROTO ((char **, __gmp_const char *, ...)); - -#define gmp_fprintf __gmp_fprintf -#ifdef _GMP_H_HAVE_FILE -__GMP_DECLSPEC int gmp_fprintf __GMP_PROTO ((FILE *, __gmp_const char *, ...)); -#endif - -#define gmp_obstack_printf __gmp_obstack_printf -#if defined (_GMP_H_HAVE_OBSTACK) -__GMP_DECLSPEC int gmp_obstack_printf __GMP_PROTO ((struct obstack *, __gmp_const char *, ...)); -#endif - -#define gmp_obstack_vprintf __gmp_obstack_vprintf -#if defined (_GMP_H_HAVE_OBSTACK) && defined (_GMP_H_HAVE_VA_LIST) -__GMP_DECLSPEC int gmp_obstack_vprintf __GMP_PROTO ((struct obstack *, __gmp_const char *, va_list)); -#endif - -#define gmp_printf __gmp_printf -__GMP_DECLSPEC int gmp_printf __GMP_PROTO ((__gmp_const char *, ...)); - -#define gmp_snprintf __gmp_snprintf -__GMP_DECLSPEC int gmp_snprintf __GMP_PROTO ((char *, size_t, __gmp_const char *, ...)); - -#define gmp_sprintf __gmp_sprintf -__GMP_DECLSPEC int gmp_sprintf __GMP_PROTO ((char *, __gmp_const char *, ...)); - -#define gmp_vasprintf __gmp_vasprintf -#if defined (_GMP_H_HAVE_VA_LIST) -__GMP_DECLSPEC int gmp_vasprintf __GMP_PROTO ((char **, __gmp_const char *, va_list)); -#endif - -#define gmp_vfprintf __gmp_vfprintf -#if defined (_GMP_H_HAVE_FILE) && defined (_GMP_H_HAVE_VA_LIST) -__GMP_DECLSPEC int gmp_vfprintf __GMP_PROTO ((FILE *, __gmp_const char *, va_list)); -#endif - -#define gmp_vprintf __gmp_vprintf -#if defined (_GMP_H_HAVE_VA_LIST) -__GMP_DECLSPEC int gmp_vprintf __GMP_PROTO ((__gmp_const char *, va_list)); -#endif - -#define gmp_vsnprintf __gmp_vsnprintf -#if defined (_GMP_H_HAVE_VA_LIST) -__GMP_DECLSPEC int gmp_vsnprintf __GMP_PROTO ((char *, size_t, __gmp_const char *, va_list)); -#endif - -#define gmp_vsprintf __gmp_vsprintf -#if defined (_GMP_H_HAVE_VA_LIST) -__GMP_DECLSPEC int gmp_vsprintf __GMP_PROTO ((char *, __gmp_const char *, va_list)); -#endif - - -/**************** Formatted input routines. ****************/ - -#define gmp_fscanf __gmp_fscanf -#ifdef _GMP_H_HAVE_FILE -__GMP_DECLSPEC int gmp_fscanf __GMP_PROTO ((FILE *, __gmp_const char *, ...)); -#endif - -#define gmp_scanf __gmp_scanf -__GMP_DECLSPEC int gmp_scanf __GMP_PROTO ((__gmp_const char *, ...)); - -#define gmp_sscanf __gmp_sscanf -__GMP_DECLSPEC int gmp_sscanf __GMP_PROTO ((__gmp_const char *, __gmp_const char *, ...)); - -#define gmp_vfscanf __gmp_vfscanf -#if defined (_GMP_H_HAVE_FILE) && defined (_GMP_H_HAVE_VA_LIST) -__GMP_DECLSPEC int gmp_vfscanf __GMP_PROTO ((FILE *, __gmp_const char *, va_list)); -#endif - -#define gmp_vscanf __gmp_vscanf -#if defined (_GMP_H_HAVE_VA_LIST) -__GMP_DECLSPEC int gmp_vscanf __GMP_PROTO ((__gmp_const char *, va_list)); -#endif - -#define gmp_vsscanf __gmp_vsscanf -#if defined (_GMP_H_HAVE_VA_LIST) -__GMP_DECLSPEC int gmp_vsscanf __GMP_PROTO ((__gmp_const char *, __gmp_const char *, va_list)); -#endif - - -/**************** Integer (i.e. Z) routines. ****************/ - -#define _mpz_realloc __gmpz_realloc -#define mpz_realloc __gmpz_realloc -__GMP_DECLSPEC void *_mpz_realloc __GMP_PROTO ((mpz_ptr, mp_size_t)); - -#define mpz_abs __gmpz_abs -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_abs) -__GMP_DECLSPEC void mpz_abs __GMP_PROTO ((mpz_ptr, mpz_srcptr)); -#endif - -#define mpz_add __gmpz_add -__GMP_DECLSPEC void mpz_add __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_add_ui __gmpz_add_ui -__GMP_DECLSPEC void mpz_add_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_addmul __gmpz_addmul -__GMP_DECLSPEC void mpz_addmul __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_addmul_ui __gmpz_addmul_ui -__GMP_DECLSPEC void mpz_addmul_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_and __gmpz_and -__GMP_DECLSPEC void mpz_and __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_array_init __gmpz_array_init -__GMP_DECLSPEC void mpz_array_init __GMP_PROTO ((mpz_ptr, mp_size_t, mp_size_t)); - -#define mpz_bin_ui __gmpz_bin_ui -__GMP_DECLSPEC void mpz_bin_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_bin_uiui __gmpz_bin_uiui -__GMP_DECLSPEC void mpz_bin_uiui __GMP_PROTO ((mpz_ptr, unsigned long int, unsigned long int)); - -#define mpz_cdiv_q __gmpz_cdiv_q -__GMP_DECLSPEC void mpz_cdiv_q __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_cdiv_q_2exp __gmpz_cdiv_q_2exp -__GMP_DECLSPEC void mpz_cdiv_q_2exp __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long)); - -#define mpz_cdiv_q_ui __gmpz_cdiv_q_ui -__GMP_DECLSPEC unsigned long int mpz_cdiv_q_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_cdiv_qr __gmpz_cdiv_qr -__GMP_DECLSPEC void mpz_cdiv_qr __GMP_PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_cdiv_qr_ui __gmpz_cdiv_qr_ui -__GMP_DECLSPEC unsigned long int mpz_cdiv_qr_ui __GMP_PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_cdiv_r __gmpz_cdiv_r -__GMP_DECLSPEC void mpz_cdiv_r __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_cdiv_r_2exp __gmpz_cdiv_r_2exp -__GMP_DECLSPEC void mpz_cdiv_r_2exp __GMP_PROTO ((mpz_ptr, mpz_srcptr, mp_bitcnt_t)); - -#define mpz_cdiv_r_ui __gmpz_cdiv_r_ui -__GMP_DECLSPEC unsigned long int mpz_cdiv_r_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_cdiv_ui __gmpz_cdiv_ui -__GMP_DECLSPEC unsigned long int mpz_cdiv_ui __GMP_PROTO ((mpz_srcptr, unsigned long int)) __GMP_ATTRIBUTE_PURE; - -#define mpz_clear __gmpz_clear -__GMP_DECLSPEC void mpz_clear __GMP_PROTO ((mpz_ptr)); - -#define mpz_clears __gmpz_clears -__GMP_DECLSPEC void mpz_clears __GMP_PROTO ((mpz_ptr, ...)); - -#define mpz_clrbit __gmpz_clrbit -__GMP_DECLSPEC void mpz_clrbit __GMP_PROTO ((mpz_ptr, mp_bitcnt_t)); - -#define mpz_cmp __gmpz_cmp -__GMP_DECLSPEC int mpz_cmp __GMP_PROTO ((mpz_srcptr, mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_cmp_d __gmpz_cmp_d -__GMP_DECLSPEC int mpz_cmp_d __GMP_PROTO ((mpz_srcptr, double)) __GMP_ATTRIBUTE_PURE; - -#define _mpz_cmp_si __gmpz_cmp_si -__GMP_DECLSPEC int _mpz_cmp_si __GMP_PROTO ((mpz_srcptr, signed long int)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define _mpz_cmp_ui __gmpz_cmp_ui -__GMP_DECLSPEC int _mpz_cmp_ui __GMP_PROTO ((mpz_srcptr, unsigned long int)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_cmpabs __gmpz_cmpabs -__GMP_DECLSPEC int mpz_cmpabs __GMP_PROTO ((mpz_srcptr, mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_cmpabs_d __gmpz_cmpabs_d -__GMP_DECLSPEC int mpz_cmpabs_d __GMP_PROTO ((mpz_srcptr, double)) __GMP_ATTRIBUTE_PURE; - -#define mpz_cmpabs_ui __gmpz_cmpabs_ui -__GMP_DECLSPEC int mpz_cmpabs_ui __GMP_PROTO ((mpz_srcptr, unsigned long int)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_com __gmpz_com -__GMP_DECLSPEC void mpz_com __GMP_PROTO ((mpz_ptr, mpz_srcptr)); - -#define mpz_combit __gmpz_combit -__GMP_DECLSPEC void mpz_combit __GMP_PROTO ((mpz_ptr, mp_bitcnt_t)); - -#define mpz_congruent_p __gmpz_congruent_p -__GMP_DECLSPEC int mpz_congruent_p __GMP_PROTO ((mpz_srcptr, mpz_srcptr, mpz_srcptr)) __GMP_ATTRIBUTE_PURE; - -#define mpz_congruent_2exp_p __gmpz_congruent_2exp_p -__GMP_DECLSPEC int mpz_congruent_2exp_p __GMP_PROTO ((mpz_srcptr, mpz_srcptr, mp_bitcnt_t)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_congruent_ui_p __gmpz_congruent_ui_p -__GMP_DECLSPEC int mpz_congruent_ui_p __GMP_PROTO ((mpz_srcptr, unsigned long, unsigned long)) __GMP_ATTRIBUTE_PURE; - -#define mpz_divexact __gmpz_divexact -__GMP_DECLSPEC void mpz_divexact __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_divexact_ui __gmpz_divexact_ui -__GMP_DECLSPEC void mpz_divexact_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long)); - -#define mpz_divisible_p __gmpz_divisible_p -__GMP_DECLSPEC int mpz_divisible_p __GMP_PROTO ((mpz_srcptr, mpz_srcptr)) __GMP_ATTRIBUTE_PURE; - -#define mpz_divisible_ui_p __gmpz_divisible_ui_p -__GMP_DECLSPEC int mpz_divisible_ui_p __GMP_PROTO ((mpz_srcptr, unsigned long)) __GMP_ATTRIBUTE_PURE; - -#define mpz_divisible_2exp_p __gmpz_divisible_2exp_p -__GMP_DECLSPEC int mpz_divisible_2exp_p __GMP_PROTO ((mpz_srcptr, mp_bitcnt_t)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_dump __gmpz_dump -__GMP_DECLSPEC void mpz_dump __GMP_PROTO ((mpz_srcptr)); - -#define mpz_export __gmpz_export -__GMP_DECLSPEC void *mpz_export __GMP_PROTO ((void *, size_t *, int, size_t, int, size_t, mpz_srcptr)); - -#define mpz_fac_ui __gmpz_fac_ui -__GMP_DECLSPEC void mpz_fac_ui __GMP_PROTO ((mpz_ptr, unsigned long int)); - -#define mpz_fdiv_q __gmpz_fdiv_q -__GMP_DECLSPEC void mpz_fdiv_q __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_fdiv_q_2exp __gmpz_fdiv_q_2exp -__GMP_DECLSPEC void mpz_fdiv_q_2exp __GMP_PROTO ((mpz_ptr, mpz_srcptr, mp_bitcnt_t)); - -#define mpz_fdiv_q_ui __gmpz_fdiv_q_ui -__GMP_DECLSPEC unsigned long int mpz_fdiv_q_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_fdiv_qr __gmpz_fdiv_qr -__GMP_DECLSPEC void mpz_fdiv_qr __GMP_PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_fdiv_qr_ui __gmpz_fdiv_qr_ui -__GMP_DECLSPEC unsigned long int mpz_fdiv_qr_ui __GMP_PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_fdiv_r __gmpz_fdiv_r -__GMP_DECLSPEC void mpz_fdiv_r __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_fdiv_r_2exp __gmpz_fdiv_r_2exp -__GMP_DECLSPEC void mpz_fdiv_r_2exp __GMP_PROTO ((mpz_ptr, mpz_srcptr, mp_bitcnt_t)); - -#define mpz_fdiv_r_ui __gmpz_fdiv_r_ui -__GMP_DECLSPEC unsigned long int mpz_fdiv_r_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_fdiv_ui __gmpz_fdiv_ui -__GMP_DECLSPEC unsigned long int mpz_fdiv_ui __GMP_PROTO ((mpz_srcptr, unsigned long int)) __GMP_ATTRIBUTE_PURE; - -#define mpz_fib_ui __gmpz_fib_ui -__GMP_DECLSPEC void mpz_fib_ui __GMP_PROTO ((mpz_ptr, unsigned long int)); - -#define mpz_fib2_ui __gmpz_fib2_ui -__GMP_DECLSPEC void mpz_fib2_ui __GMP_PROTO ((mpz_ptr, mpz_ptr, unsigned long int)); - -#define mpz_fits_sint_p __gmpz_fits_sint_p -__GMP_DECLSPEC int mpz_fits_sint_p __GMP_PROTO ((mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_fits_slong_p __gmpz_fits_slong_p -__GMP_DECLSPEC int mpz_fits_slong_p __GMP_PROTO ((mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_fits_sshort_p __gmpz_fits_sshort_p -__GMP_DECLSPEC int mpz_fits_sshort_p __GMP_PROTO ((mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_fits_uint_p __gmpz_fits_uint_p -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_fits_uint_p) -__GMP_DECLSPEC int mpz_fits_uint_p __GMP_PROTO ((mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; -#endif - -#define mpz_fits_ulong_p __gmpz_fits_ulong_p -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_fits_ulong_p) -__GMP_DECLSPEC int mpz_fits_ulong_p __GMP_PROTO ((mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; -#endif - -#define mpz_fits_ushort_p __gmpz_fits_ushort_p -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_fits_ushort_p) -__GMP_DECLSPEC int mpz_fits_ushort_p __GMP_PROTO ((mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; -#endif - -#define mpz_gcd __gmpz_gcd -__GMP_DECLSPEC void mpz_gcd __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_gcd_ui __gmpz_gcd_ui -__GMP_DECLSPEC unsigned long int mpz_gcd_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_gcdext __gmpz_gcdext -__GMP_DECLSPEC void mpz_gcdext __GMP_PROTO ((mpz_ptr, mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_get_d __gmpz_get_d -__GMP_DECLSPEC double mpz_get_d __GMP_PROTO ((mpz_srcptr)) __GMP_ATTRIBUTE_PURE; - -#define mpz_get_d_2exp __gmpz_get_d_2exp -__GMP_DECLSPEC double mpz_get_d_2exp __GMP_PROTO ((signed long int *, mpz_srcptr)); - -#define mpz_get_si __gmpz_get_si -__GMP_DECLSPEC /* signed */ long int mpz_get_si __GMP_PROTO ((mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_get_str __gmpz_get_str -__GMP_DECLSPEC char *mpz_get_str __GMP_PROTO ((char *, int, mpz_srcptr)); - -#define mpz_get_ui __gmpz_get_ui -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_get_ui) -__GMP_DECLSPEC unsigned long int mpz_get_ui __GMP_PROTO ((mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; -#endif - -#define mpz_getlimbn __gmpz_getlimbn -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_getlimbn) -__GMP_DECLSPEC mp_limb_t mpz_getlimbn __GMP_PROTO ((mpz_srcptr, mp_size_t)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; -#endif - -#define mpz_hamdist __gmpz_hamdist -__GMP_DECLSPEC mp_bitcnt_t mpz_hamdist __GMP_PROTO ((mpz_srcptr, mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_import __gmpz_import -__GMP_DECLSPEC void mpz_import __GMP_PROTO ((mpz_ptr, size_t, int, size_t, int, size_t, __gmp_const void *)); - -#define mpz_init __gmpz_init -__GMP_DECLSPEC void mpz_init __GMP_PROTO ((mpz_ptr)); - -#define mpz_init2 __gmpz_init2 -__GMP_DECLSPEC void mpz_init2 __GMP_PROTO ((mpz_ptr, mp_bitcnt_t)); - -#define mpz_inits __gmpz_inits -__GMP_DECLSPEC void mpz_inits __GMP_PROTO ((mpz_ptr, ...)); - -#define mpz_init_set __gmpz_init_set -__GMP_DECLSPEC void mpz_init_set __GMP_PROTO ((mpz_ptr, mpz_srcptr)); - -#define mpz_init_set_d __gmpz_init_set_d -__GMP_DECLSPEC void mpz_init_set_d __GMP_PROTO ((mpz_ptr, double)); - -#define mpz_init_set_si __gmpz_init_set_si -__GMP_DECLSPEC void mpz_init_set_si __GMP_PROTO ((mpz_ptr, signed long int)); - -#define mpz_init_set_str __gmpz_init_set_str -__GMP_DECLSPEC int mpz_init_set_str __GMP_PROTO ((mpz_ptr, __gmp_const char *, int)); - -#define mpz_init_set_ui __gmpz_init_set_ui -__GMP_DECLSPEC void mpz_init_set_ui __GMP_PROTO ((mpz_ptr, unsigned long int)); - -#define mpz_inp_raw __gmpz_inp_raw -#ifdef _GMP_H_HAVE_FILE -__GMP_DECLSPEC size_t mpz_inp_raw __GMP_PROTO ((mpz_ptr, FILE *)); -#endif - -#define mpz_inp_str __gmpz_inp_str -#ifdef _GMP_H_HAVE_FILE -__GMP_DECLSPEC size_t mpz_inp_str __GMP_PROTO ((mpz_ptr, FILE *, int)); -#endif - -#define mpz_invert __gmpz_invert -__GMP_DECLSPEC int mpz_invert __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_ior __gmpz_ior -__GMP_DECLSPEC void mpz_ior __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_jacobi __gmpz_jacobi -__GMP_DECLSPEC int mpz_jacobi __GMP_PROTO ((mpz_srcptr, mpz_srcptr)) __GMP_ATTRIBUTE_PURE; - -#define mpz_kronecker mpz_jacobi /* alias */ - -#define mpz_kronecker_si __gmpz_kronecker_si -__GMP_DECLSPEC int mpz_kronecker_si __GMP_PROTO ((mpz_srcptr, long)) __GMP_ATTRIBUTE_PURE; - -#define mpz_kronecker_ui __gmpz_kronecker_ui -__GMP_DECLSPEC int mpz_kronecker_ui __GMP_PROTO ((mpz_srcptr, unsigned long)) __GMP_ATTRIBUTE_PURE; - -#define mpz_si_kronecker __gmpz_si_kronecker -__GMP_DECLSPEC int mpz_si_kronecker __GMP_PROTO ((long, mpz_srcptr)) __GMP_ATTRIBUTE_PURE; - -#define mpz_ui_kronecker __gmpz_ui_kronecker -__GMP_DECLSPEC int mpz_ui_kronecker __GMP_PROTO ((unsigned long, mpz_srcptr)) __GMP_ATTRIBUTE_PURE; - -#define mpz_lcm __gmpz_lcm -__GMP_DECLSPEC void mpz_lcm __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_lcm_ui __gmpz_lcm_ui -__GMP_DECLSPEC void mpz_lcm_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long)); - -#define mpz_legendre mpz_jacobi /* alias */ - -#define mpz_lucnum_ui __gmpz_lucnum_ui -__GMP_DECLSPEC void mpz_lucnum_ui __GMP_PROTO ((mpz_ptr, unsigned long int)); - -#define mpz_lucnum2_ui __gmpz_lucnum2_ui -__GMP_DECLSPEC void mpz_lucnum2_ui __GMP_PROTO ((mpz_ptr, mpz_ptr, unsigned long int)); - -#define mpz_millerrabin __gmpz_millerrabin -__GMP_DECLSPEC int mpz_millerrabin __GMP_PROTO ((mpz_srcptr, int)) __GMP_ATTRIBUTE_PURE; - -#define mpz_mod __gmpz_mod -__GMP_DECLSPEC void mpz_mod __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_mod_ui mpz_fdiv_r_ui /* same as fdiv_r because divisor unsigned */ - -#define mpz_mul __gmpz_mul -__GMP_DECLSPEC void mpz_mul __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_mul_2exp __gmpz_mul_2exp -__GMP_DECLSPEC void mpz_mul_2exp __GMP_PROTO ((mpz_ptr, mpz_srcptr, mp_bitcnt_t)); - -#define mpz_mul_si __gmpz_mul_si -__GMP_DECLSPEC void mpz_mul_si __GMP_PROTO ((mpz_ptr, mpz_srcptr, long int)); - -#define mpz_mul_ui __gmpz_mul_ui -__GMP_DECLSPEC void mpz_mul_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_neg __gmpz_neg -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_neg) -__GMP_DECLSPEC void mpz_neg __GMP_PROTO ((mpz_ptr, mpz_srcptr)); -#endif - -#define mpz_nextprime __gmpz_nextprime -__GMP_DECLSPEC void mpz_nextprime __GMP_PROTO ((mpz_ptr, mpz_srcptr)); - -#define mpz_out_raw __gmpz_out_raw -#ifdef _GMP_H_HAVE_FILE -__GMP_DECLSPEC size_t mpz_out_raw __GMP_PROTO ((FILE *, mpz_srcptr)); -#endif - -#define mpz_out_str __gmpz_out_str -#ifdef _GMP_H_HAVE_FILE -__GMP_DECLSPEC size_t mpz_out_str __GMP_PROTO ((FILE *, int, mpz_srcptr)); -#endif - -#define mpz_perfect_power_p __gmpz_perfect_power_p -__GMP_DECLSPEC int mpz_perfect_power_p __GMP_PROTO ((mpz_srcptr)) __GMP_ATTRIBUTE_PURE; - -#define mpz_perfect_square_p __gmpz_perfect_square_p -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_perfect_square_p) -__GMP_DECLSPEC int mpz_perfect_square_p __GMP_PROTO ((mpz_srcptr)) __GMP_ATTRIBUTE_PURE; -#endif - -#define mpz_popcount __gmpz_popcount -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_popcount) -__GMP_DECLSPEC mp_bitcnt_t mpz_popcount __GMP_PROTO ((mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; -#endif - -#define mpz_pow_ui __gmpz_pow_ui -__GMP_DECLSPEC void mpz_pow_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_powm __gmpz_powm -__GMP_DECLSPEC void mpz_powm __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_powm_sec __gmpz_powm_sec -__GMP_DECLSPEC void mpz_powm_sec __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_powm_ui __gmpz_powm_ui -__GMP_DECLSPEC void mpz_powm_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int, mpz_srcptr)); - -#define mpz_probab_prime_p __gmpz_probab_prime_p -__GMP_DECLSPEC int mpz_probab_prime_p __GMP_PROTO ((mpz_srcptr, int)) __GMP_ATTRIBUTE_PURE; - -#define mpz_random __gmpz_random -__GMP_DECLSPEC void mpz_random __GMP_PROTO ((mpz_ptr, mp_size_t)); - -#define mpz_random2 __gmpz_random2 -__GMP_DECLSPEC void mpz_random2 __GMP_PROTO ((mpz_ptr, mp_size_t)); - -#define mpz_realloc2 __gmpz_realloc2 -__GMP_DECLSPEC void mpz_realloc2 __GMP_PROTO ((mpz_ptr, mp_bitcnt_t)); - -#define mpz_remove __gmpz_remove -__GMP_DECLSPEC unsigned long int mpz_remove __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_root __gmpz_root -__GMP_DECLSPEC int mpz_root __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_rootrem __gmpz_rootrem -__GMP_DECLSPEC void mpz_rootrem __GMP_PROTO ((mpz_ptr,mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_rrandomb __gmpz_rrandomb -__GMP_DECLSPEC void mpz_rrandomb __GMP_PROTO ((mpz_ptr, gmp_randstate_t, mp_bitcnt_t)); - -#define mpz_scan0 __gmpz_scan0 -__GMP_DECLSPEC mp_bitcnt_t mpz_scan0 __GMP_PROTO ((mpz_srcptr, mp_bitcnt_t)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_scan1 __gmpz_scan1 -__GMP_DECLSPEC mp_bitcnt_t mpz_scan1 __GMP_PROTO ((mpz_srcptr, mp_bitcnt_t)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_set __gmpz_set -__GMP_DECLSPEC void mpz_set __GMP_PROTO ((mpz_ptr, mpz_srcptr)); - -#define mpz_set_d __gmpz_set_d -__GMP_DECLSPEC void mpz_set_d __GMP_PROTO ((mpz_ptr, double)); - -#define mpz_set_f __gmpz_set_f -__GMP_DECLSPEC void mpz_set_f __GMP_PROTO ((mpz_ptr, mpf_srcptr)); - -#define mpz_set_q __gmpz_set_q -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_set_q) -__GMP_DECLSPEC void mpz_set_q __GMP_PROTO ((mpz_ptr, mpq_srcptr)); -#endif - -#define mpz_set_si __gmpz_set_si -__GMP_DECLSPEC void mpz_set_si __GMP_PROTO ((mpz_ptr, signed long int)); - -#define mpz_set_str __gmpz_set_str -__GMP_DECLSPEC int mpz_set_str __GMP_PROTO ((mpz_ptr, __gmp_const char *, int)); - -#define mpz_set_ui __gmpz_set_ui -__GMP_DECLSPEC void mpz_set_ui __GMP_PROTO ((mpz_ptr, unsigned long int)); - -#define mpz_setbit __gmpz_setbit -__GMP_DECLSPEC void mpz_setbit __GMP_PROTO ((mpz_ptr, mp_bitcnt_t)); - -#define mpz_size __gmpz_size -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpz_size) -__GMP_DECLSPEC size_t mpz_size __GMP_PROTO ((mpz_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; -#endif - -#define mpz_sizeinbase __gmpz_sizeinbase -__GMP_DECLSPEC size_t mpz_sizeinbase __GMP_PROTO ((mpz_srcptr, int)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_sqrt __gmpz_sqrt -__GMP_DECLSPEC void mpz_sqrt __GMP_PROTO ((mpz_ptr, mpz_srcptr)); - -#define mpz_sqrtrem __gmpz_sqrtrem -__GMP_DECLSPEC void mpz_sqrtrem __GMP_PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr)); - -#define mpz_sub __gmpz_sub -__GMP_DECLSPEC void mpz_sub __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_sub_ui __gmpz_sub_ui -__GMP_DECLSPEC void mpz_sub_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_ui_sub __gmpz_ui_sub -__GMP_DECLSPEC void mpz_ui_sub __GMP_PROTO ((mpz_ptr, unsigned long int, mpz_srcptr)); - -#define mpz_submul __gmpz_submul -__GMP_DECLSPEC void mpz_submul __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_submul_ui __gmpz_submul_ui -__GMP_DECLSPEC void mpz_submul_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_swap __gmpz_swap -__GMP_DECLSPEC void mpz_swap __GMP_PROTO ((mpz_ptr, mpz_ptr)) __GMP_NOTHROW; - -#define mpz_tdiv_ui __gmpz_tdiv_ui -__GMP_DECLSPEC unsigned long int mpz_tdiv_ui __GMP_PROTO ((mpz_srcptr, unsigned long int)) __GMP_ATTRIBUTE_PURE; - -#define mpz_tdiv_q __gmpz_tdiv_q -__GMP_DECLSPEC void mpz_tdiv_q __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_tdiv_q_2exp __gmpz_tdiv_q_2exp -__GMP_DECLSPEC void mpz_tdiv_q_2exp __GMP_PROTO ((mpz_ptr, mpz_srcptr, mp_bitcnt_t)); - -#define mpz_tdiv_q_ui __gmpz_tdiv_q_ui -__GMP_DECLSPEC unsigned long int mpz_tdiv_q_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_tdiv_qr __gmpz_tdiv_qr -__GMP_DECLSPEC void mpz_tdiv_qr __GMP_PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_tdiv_qr_ui __gmpz_tdiv_qr_ui -__GMP_DECLSPEC unsigned long int mpz_tdiv_qr_ui __GMP_PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_tdiv_r __gmpz_tdiv_r -__GMP_DECLSPEC void mpz_tdiv_r __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - -#define mpz_tdiv_r_2exp __gmpz_tdiv_r_2exp -__GMP_DECLSPEC void mpz_tdiv_r_2exp __GMP_PROTO ((mpz_ptr, mpz_srcptr, mp_bitcnt_t)); - -#define mpz_tdiv_r_ui __gmpz_tdiv_r_ui -__GMP_DECLSPEC unsigned long int mpz_tdiv_r_ui __GMP_PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_tstbit __gmpz_tstbit -__GMP_DECLSPEC int mpz_tstbit __GMP_PROTO ((mpz_srcptr, mp_bitcnt_t)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpz_ui_pow_ui __gmpz_ui_pow_ui -__GMP_DECLSPEC void mpz_ui_pow_ui __GMP_PROTO ((mpz_ptr, unsigned long int, unsigned long int)); - -#define mpz_urandomb __gmpz_urandomb -__GMP_DECLSPEC void mpz_urandomb __GMP_PROTO ((mpz_ptr, gmp_randstate_t, mp_bitcnt_t)); - -#define mpz_urandomm __gmpz_urandomm -__GMP_DECLSPEC void mpz_urandomm __GMP_PROTO ((mpz_ptr, gmp_randstate_t, mpz_srcptr)); - -#define mpz_xor __gmpz_xor -#define mpz_eor __gmpz_xor -__GMP_DECLSPEC void mpz_xor __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); - - -/**************** Rational (i.e. Q) routines. ****************/ - -#define mpq_abs __gmpq_abs -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpq_abs) -__GMP_DECLSPEC void mpq_abs __GMP_PROTO ((mpq_ptr, mpq_srcptr)); -#endif - -#define mpq_add __gmpq_add -__GMP_DECLSPEC void mpq_add __GMP_PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr)); - -#define mpq_canonicalize __gmpq_canonicalize -__GMP_DECLSPEC void mpq_canonicalize __GMP_PROTO ((mpq_ptr)); - -#define mpq_clear __gmpq_clear -__GMP_DECLSPEC void mpq_clear __GMP_PROTO ((mpq_ptr)); - -#define mpq_clears __gmpq_clears -__GMP_DECLSPEC void mpq_clears __GMP_PROTO ((mpq_ptr, ...)); - -#define mpq_cmp __gmpq_cmp -__GMP_DECLSPEC int mpq_cmp __GMP_PROTO ((mpq_srcptr, mpq_srcptr)) __GMP_ATTRIBUTE_PURE; - -#define _mpq_cmp_si __gmpq_cmp_si -__GMP_DECLSPEC int _mpq_cmp_si __GMP_PROTO ((mpq_srcptr, long, unsigned long)) __GMP_ATTRIBUTE_PURE; - -#define _mpq_cmp_ui __gmpq_cmp_ui -__GMP_DECLSPEC int _mpq_cmp_ui __GMP_PROTO ((mpq_srcptr, unsigned long int, unsigned long int)) __GMP_ATTRIBUTE_PURE; - -#define mpq_div __gmpq_div -__GMP_DECLSPEC void mpq_div __GMP_PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr)); - -#define mpq_div_2exp __gmpq_div_2exp -__GMP_DECLSPEC void mpq_div_2exp __GMP_PROTO ((mpq_ptr, mpq_srcptr, mp_bitcnt_t)); - -#define mpq_equal __gmpq_equal -__GMP_DECLSPEC int mpq_equal __GMP_PROTO ((mpq_srcptr, mpq_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpq_get_num __gmpq_get_num -__GMP_DECLSPEC void mpq_get_num __GMP_PROTO ((mpz_ptr, mpq_srcptr)); - -#define mpq_get_den __gmpq_get_den -__GMP_DECLSPEC void mpq_get_den __GMP_PROTO ((mpz_ptr, mpq_srcptr)); - -#define mpq_get_d __gmpq_get_d -__GMP_DECLSPEC double mpq_get_d __GMP_PROTO ((mpq_srcptr)) __GMP_ATTRIBUTE_PURE; - -#define mpq_get_str __gmpq_get_str -__GMP_DECLSPEC char *mpq_get_str __GMP_PROTO ((char *, int, mpq_srcptr)); - -#define mpq_init __gmpq_init -__GMP_DECLSPEC void mpq_init __GMP_PROTO ((mpq_ptr)); - -#define mpq_inits __gmpq_inits -__GMP_DECLSPEC void mpq_inits __GMP_PROTO ((mpq_ptr, ...)); - -#define mpq_inp_str __gmpq_inp_str -#ifdef _GMP_H_HAVE_FILE -__GMP_DECLSPEC size_t mpq_inp_str __GMP_PROTO ((mpq_ptr, FILE *, int)); -#endif - -#define mpq_inv __gmpq_inv -__GMP_DECLSPEC void mpq_inv __GMP_PROTO ((mpq_ptr, mpq_srcptr)); - -#define mpq_mul __gmpq_mul -__GMP_DECLSPEC void mpq_mul __GMP_PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr)); - -#define mpq_mul_2exp __gmpq_mul_2exp -__GMP_DECLSPEC void mpq_mul_2exp __GMP_PROTO ((mpq_ptr, mpq_srcptr, mp_bitcnt_t)); - -#define mpq_neg __gmpq_neg -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpq_neg) -__GMP_DECLSPEC void mpq_neg __GMP_PROTO ((mpq_ptr, mpq_srcptr)); -#endif - -#define mpq_out_str __gmpq_out_str -#ifdef _GMP_H_HAVE_FILE -__GMP_DECLSPEC size_t mpq_out_str __GMP_PROTO ((FILE *, int, mpq_srcptr)); -#endif - -#define mpq_set __gmpq_set -__GMP_DECLSPEC void mpq_set __GMP_PROTO ((mpq_ptr, mpq_srcptr)); - -#define mpq_set_d __gmpq_set_d -__GMP_DECLSPEC void mpq_set_d __GMP_PROTO ((mpq_ptr, double)); - -#define mpq_set_den __gmpq_set_den -__GMP_DECLSPEC void mpq_set_den __GMP_PROTO ((mpq_ptr, mpz_srcptr)); - -#define mpq_set_f __gmpq_set_f -__GMP_DECLSPEC void mpq_set_f __GMP_PROTO ((mpq_ptr, mpf_srcptr)); - -#define mpq_set_num __gmpq_set_num -__GMP_DECLSPEC void mpq_set_num __GMP_PROTO ((mpq_ptr, mpz_srcptr)); - -#define mpq_set_si __gmpq_set_si -__GMP_DECLSPEC void mpq_set_si __GMP_PROTO ((mpq_ptr, signed long int, unsigned long int)); - -#define mpq_set_str __gmpq_set_str -__GMP_DECLSPEC int mpq_set_str __GMP_PROTO ((mpq_ptr, __gmp_const char *, int)); - -#define mpq_set_ui __gmpq_set_ui -__GMP_DECLSPEC void mpq_set_ui __GMP_PROTO ((mpq_ptr, unsigned long int, unsigned long int)); - -#define mpq_set_z __gmpq_set_z -__GMP_DECLSPEC void mpq_set_z __GMP_PROTO ((mpq_ptr, mpz_srcptr)); - -#define mpq_sub __gmpq_sub -__GMP_DECLSPEC void mpq_sub __GMP_PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr)); - -#define mpq_swap __gmpq_swap -__GMP_DECLSPEC void mpq_swap __GMP_PROTO ((mpq_ptr, mpq_ptr)) __GMP_NOTHROW; - - -/**************** Float (i.e. F) routines. ****************/ - -#define mpf_abs __gmpf_abs -__GMP_DECLSPEC void mpf_abs __GMP_PROTO ((mpf_ptr, mpf_srcptr)); - -#define mpf_add __gmpf_add -__GMP_DECLSPEC void mpf_add __GMP_PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr)); - -#define mpf_add_ui __gmpf_add_ui -__GMP_DECLSPEC void mpf_add_ui __GMP_PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); -#define mpf_ceil __gmpf_ceil -__GMP_DECLSPEC void mpf_ceil __GMP_PROTO ((mpf_ptr, mpf_srcptr)); - -#define mpf_clear __gmpf_clear -__GMP_DECLSPEC void mpf_clear __GMP_PROTO ((mpf_ptr)); - -#define mpf_clears __gmpf_clears -__GMP_DECLSPEC void mpf_clears __GMP_PROTO ((mpf_ptr, ...)); - -#define mpf_cmp __gmpf_cmp -__GMP_DECLSPEC int mpf_cmp __GMP_PROTO ((mpf_srcptr, mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_cmp_d __gmpf_cmp_d -__GMP_DECLSPEC int mpf_cmp_d __GMP_PROTO ((mpf_srcptr, double)) __GMP_ATTRIBUTE_PURE; - -#define mpf_cmp_si __gmpf_cmp_si -__GMP_DECLSPEC int mpf_cmp_si __GMP_PROTO ((mpf_srcptr, signed long int)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_cmp_ui __gmpf_cmp_ui -__GMP_DECLSPEC int mpf_cmp_ui __GMP_PROTO ((mpf_srcptr, unsigned long int)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_div __gmpf_div -__GMP_DECLSPEC void mpf_div __GMP_PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr)); - -#define mpf_div_2exp __gmpf_div_2exp -__GMP_DECLSPEC void mpf_div_2exp __GMP_PROTO ((mpf_ptr, mpf_srcptr, mp_bitcnt_t)); - -#define mpf_div_ui __gmpf_div_ui -__GMP_DECLSPEC void mpf_div_ui __GMP_PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); - -#define mpf_dump __gmpf_dump -__GMP_DECLSPEC void mpf_dump __GMP_PROTO ((mpf_srcptr)); - -#define mpf_eq __gmpf_eq -__GMP_DECLSPEC int mpf_eq __GMP_PROTO ((mpf_srcptr, mpf_srcptr, unsigned long int)) __GMP_ATTRIBUTE_PURE; - -#define mpf_fits_sint_p __gmpf_fits_sint_p -__GMP_DECLSPEC int mpf_fits_sint_p __GMP_PROTO ((mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_fits_slong_p __gmpf_fits_slong_p -__GMP_DECLSPEC int mpf_fits_slong_p __GMP_PROTO ((mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_fits_sshort_p __gmpf_fits_sshort_p -__GMP_DECLSPEC int mpf_fits_sshort_p __GMP_PROTO ((mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_fits_uint_p __gmpf_fits_uint_p -__GMP_DECLSPEC int mpf_fits_uint_p __GMP_PROTO ((mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_fits_ulong_p __gmpf_fits_ulong_p -__GMP_DECLSPEC int mpf_fits_ulong_p __GMP_PROTO ((mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_fits_ushort_p __gmpf_fits_ushort_p -__GMP_DECLSPEC int mpf_fits_ushort_p __GMP_PROTO ((mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_floor __gmpf_floor -__GMP_DECLSPEC void mpf_floor __GMP_PROTO ((mpf_ptr, mpf_srcptr)); - -#define mpf_get_d __gmpf_get_d -__GMP_DECLSPEC double mpf_get_d __GMP_PROTO ((mpf_srcptr)) __GMP_ATTRIBUTE_PURE; - -#define mpf_get_d_2exp __gmpf_get_d_2exp -__GMP_DECLSPEC double mpf_get_d_2exp __GMP_PROTO ((signed long int *, mpf_srcptr)); - -#define mpf_get_default_prec __gmpf_get_default_prec -__GMP_DECLSPEC mp_bitcnt_t mpf_get_default_prec __GMP_PROTO ((void)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_get_prec __gmpf_get_prec -__GMP_DECLSPEC mp_bitcnt_t mpf_get_prec __GMP_PROTO ((mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_get_si __gmpf_get_si -__GMP_DECLSPEC long mpf_get_si __GMP_PROTO ((mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_get_str __gmpf_get_str -__GMP_DECLSPEC char *mpf_get_str __GMP_PROTO ((char *, mp_exp_t *, int, size_t, mpf_srcptr)); - -#define mpf_get_ui __gmpf_get_ui -__GMP_DECLSPEC unsigned long mpf_get_ui __GMP_PROTO ((mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_init __gmpf_init -__GMP_DECLSPEC void mpf_init __GMP_PROTO ((mpf_ptr)); - -#define mpf_init2 __gmpf_init2 -__GMP_DECLSPEC void mpf_init2 __GMP_PROTO ((mpf_ptr, mp_bitcnt_t)); - -#define mpf_inits __gmpf_inits -__GMP_DECLSPEC void mpf_inits __GMP_PROTO ((mpf_ptr, ...)); - -#define mpf_init_set __gmpf_init_set -__GMP_DECLSPEC void mpf_init_set __GMP_PROTO ((mpf_ptr, mpf_srcptr)); - -#define mpf_init_set_d __gmpf_init_set_d -__GMP_DECLSPEC void mpf_init_set_d __GMP_PROTO ((mpf_ptr, double)); - -#define mpf_init_set_si __gmpf_init_set_si -__GMP_DECLSPEC void mpf_init_set_si __GMP_PROTO ((mpf_ptr, signed long int)); - -#define mpf_init_set_str __gmpf_init_set_str -__GMP_DECLSPEC int mpf_init_set_str __GMP_PROTO ((mpf_ptr, __gmp_const char *, int)); - -#define mpf_init_set_ui __gmpf_init_set_ui -__GMP_DECLSPEC void mpf_init_set_ui __GMP_PROTO ((mpf_ptr, unsigned long int)); - -#define mpf_inp_str __gmpf_inp_str -#ifdef _GMP_H_HAVE_FILE -__GMP_DECLSPEC size_t mpf_inp_str __GMP_PROTO ((mpf_ptr, FILE *, int)); -#endif - -#define mpf_integer_p __gmpf_integer_p -__GMP_DECLSPEC int mpf_integer_p __GMP_PROTO ((mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_mul __gmpf_mul -__GMP_DECLSPEC void mpf_mul __GMP_PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr)); - -#define mpf_mul_2exp __gmpf_mul_2exp -__GMP_DECLSPEC void mpf_mul_2exp __GMP_PROTO ((mpf_ptr, mpf_srcptr, mp_bitcnt_t)); - -#define mpf_mul_ui __gmpf_mul_ui -__GMP_DECLSPEC void mpf_mul_ui __GMP_PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); - -#define mpf_neg __gmpf_neg -__GMP_DECLSPEC void mpf_neg __GMP_PROTO ((mpf_ptr, mpf_srcptr)); - -#define mpf_out_str __gmpf_out_str -#ifdef _GMP_H_HAVE_FILE -__GMP_DECLSPEC size_t mpf_out_str __GMP_PROTO ((FILE *, int, size_t, mpf_srcptr)); -#endif - -#define mpf_pow_ui __gmpf_pow_ui -__GMP_DECLSPEC void mpf_pow_ui __GMP_PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); - -#define mpf_random2 __gmpf_random2 -__GMP_DECLSPEC void mpf_random2 __GMP_PROTO ((mpf_ptr, mp_size_t, mp_exp_t)); - -#define mpf_reldiff __gmpf_reldiff -__GMP_DECLSPEC void mpf_reldiff __GMP_PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr)); - -#define mpf_set __gmpf_set -__GMP_DECLSPEC void mpf_set __GMP_PROTO ((mpf_ptr, mpf_srcptr)); - -#define mpf_set_d __gmpf_set_d -__GMP_DECLSPEC void mpf_set_d __GMP_PROTO ((mpf_ptr, double)); - -#define mpf_set_default_prec __gmpf_set_default_prec -__GMP_DECLSPEC void mpf_set_default_prec __GMP_PROTO ((mp_bitcnt_t)) __GMP_NOTHROW; - -#define mpf_set_prec __gmpf_set_prec -__GMP_DECLSPEC void mpf_set_prec __GMP_PROTO ((mpf_ptr, mp_bitcnt_t)); - -#define mpf_set_prec_raw __gmpf_set_prec_raw -__GMP_DECLSPEC void mpf_set_prec_raw __GMP_PROTO ((mpf_ptr, mp_bitcnt_t)) __GMP_NOTHROW; - -#define mpf_set_q __gmpf_set_q -__GMP_DECLSPEC void mpf_set_q __GMP_PROTO ((mpf_ptr, mpq_srcptr)); - -#define mpf_set_si __gmpf_set_si -__GMP_DECLSPEC void mpf_set_si __GMP_PROTO ((mpf_ptr, signed long int)); - -#define mpf_set_str __gmpf_set_str -__GMP_DECLSPEC int mpf_set_str __GMP_PROTO ((mpf_ptr, __gmp_const char *, int)); - -#define mpf_set_ui __gmpf_set_ui -__GMP_DECLSPEC void mpf_set_ui __GMP_PROTO ((mpf_ptr, unsigned long int)); - -#define mpf_set_z __gmpf_set_z -__GMP_DECLSPEC void mpf_set_z __GMP_PROTO ((mpf_ptr, mpz_srcptr)); - -#define mpf_size __gmpf_size -__GMP_DECLSPEC size_t mpf_size __GMP_PROTO ((mpf_srcptr)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpf_sqrt __gmpf_sqrt -__GMP_DECLSPEC void mpf_sqrt __GMP_PROTO ((mpf_ptr, mpf_srcptr)); - -#define mpf_sqrt_ui __gmpf_sqrt_ui -__GMP_DECLSPEC void mpf_sqrt_ui __GMP_PROTO ((mpf_ptr, unsigned long int)); - -#define mpf_sub __gmpf_sub -__GMP_DECLSPEC void mpf_sub __GMP_PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr)); - -#define mpf_sub_ui __gmpf_sub_ui -__GMP_DECLSPEC void mpf_sub_ui __GMP_PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); - -#define mpf_swap __gmpf_swap -__GMP_DECLSPEC void mpf_swap __GMP_PROTO ((mpf_ptr, mpf_ptr)) __GMP_NOTHROW; - -#define mpf_trunc __gmpf_trunc -__GMP_DECLSPEC void mpf_trunc __GMP_PROTO ((mpf_ptr, mpf_srcptr)); - -#define mpf_ui_div __gmpf_ui_div -__GMP_DECLSPEC void mpf_ui_div __GMP_PROTO ((mpf_ptr, unsigned long int, mpf_srcptr)); - -#define mpf_ui_sub __gmpf_ui_sub -__GMP_DECLSPEC void mpf_ui_sub __GMP_PROTO ((mpf_ptr, unsigned long int, mpf_srcptr)); - -#define mpf_urandomb __gmpf_urandomb -__GMP_DECLSPEC void mpf_urandomb __GMP_PROTO ((mpf_t, gmp_randstate_t, mp_bitcnt_t)); - - -/************ Low level positive-integer (i.e. N) routines. ************/ - -/* This is ugly, but we need to make user calls reach the prefixed function. */ - -#define mpn_add __MPN(add) -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_add) -__GMP_DECLSPEC mp_limb_t mpn_add __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr,mp_size_t)); -#endif - -#define mpn_add_1 __MPN(add_1) -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_add_1) -__GMP_DECLSPEC mp_limb_t mpn_add_1 __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)) __GMP_NOTHROW; -#endif - -#define mpn_add_n __MPN(add_n) -__GMP_DECLSPEC mp_limb_t mpn_add_n __GMP_PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); - -#define mpn_addmul_1 __MPN(addmul_1) -__GMP_DECLSPEC mp_limb_t mpn_addmul_1 __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); - -#define mpn_cmp __MPN(cmp) -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_cmp) -__GMP_DECLSPEC int mpn_cmp __GMP_PROTO ((mp_srcptr, mp_srcptr, mp_size_t)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; -#endif - -#define mpn_divexact_by3(dst,src,size) \ - mpn_divexact_by3c (dst, src, size, __GMP_CAST (mp_limb_t, 0)) - -#define mpn_divexact_by3c __MPN(divexact_by3c) -__GMP_DECLSPEC mp_limb_t mpn_divexact_by3c __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); - -#define mpn_divmod_1(qp,np,nsize,dlimb) \ - mpn_divrem_1 (qp, __GMP_CAST (mp_size_t, 0), np, nsize, dlimb) - -#define mpn_divrem __MPN(divrem) -__GMP_DECLSPEC mp_limb_t mpn_divrem __GMP_PROTO ((mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr, mp_size_t)); - -#define mpn_divrem_1 __MPN(divrem_1) -__GMP_DECLSPEC mp_limb_t mpn_divrem_1 __GMP_PROTO ((mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t)); - -#define mpn_divrem_2 __MPN(divrem_2) -__GMP_DECLSPEC mp_limb_t mpn_divrem_2 __GMP_PROTO ((mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr)); - -#define mpn_gcd __MPN(gcd) -__GMP_DECLSPEC mp_size_t mpn_gcd __GMP_PROTO ((mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t)); - -#define mpn_gcd_1 __MPN(gcd_1) -__GMP_DECLSPEC mp_limb_t mpn_gcd_1 __GMP_PROTO ((mp_srcptr, mp_size_t, mp_limb_t)) __GMP_ATTRIBUTE_PURE; - -#define mpn_gcdext_1 __MPN(gcdext_1) -__GMP_DECLSPEC mp_limb_t mpn_gcdext_1 __GMP_PROTO ((mp_limb_signed_t *, mp_limb_signed_t *, mp_limb_t, mp_limb_t)); - -#define mpn_gcdext __MPN(gcdext) -__GMP_DECLSPEC mp_size_t mpn_gcdext __GMP_PROTO ((mp_ptr, mp_ptr, mp_size_t *, mp_ptr, mp_size_t, mp_ptr, mp_size_t)); - -#define mpn_get_str __MPN(get_str) -__GMP_DECLSPEC size_t mpn_get_str __GMP_PROTO ((unsigned char *, int, mp_ptr, mp_size_t)); - -#define mpn_hamdist __MPN(hamdist) -__GMP_DECLSPEC mp_bitcnt_t mpn_hamdist __GMP_PROTO ((mp_srcptr, mp_srcptr, mp_size_t)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpn_lshift __MPN(lshift) -__GMP_DECLSPEC mp_limb_t mpn_lshift __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, unsigned int)); - -#define mpn_mod_1 __MPN(mod_1) -__GMP_DECLSPEC mp_limb_t mpn_mod_1 __GMP_PROTO ((mp_srcptr, mp_size_t, mp_limb_t)) __GMP_ATTRIBUTE_PURE; - -#define mpn_mul __MPN(mul) -__GMP_DECLSPEC mp_limb_t mpn_mul __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t)); - -#define mpn_mul_1 __MPN(mul_1) -__GMP_DECLSPEC mp_limb_t mpn_mul_1 __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); - -#define mpn_mul_n __MPN(mul_n) -__GMP_DECLSPEC void mpn_mul_n __GMP_PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); - -#define mpn_sqr __MPN(sqr) -__GMP_DECLSPEC void mpn_sqr __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t)); - -#define mpn_neg __MPN(neg) -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_neg) -__GMP_DECLSPEC mp_limb_t mpn_neg __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t)); -#endif - -#define mpn_com __MPN(com) -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_com) -__GMP_DECLSPEC void mpn_com __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t)); -#endif - -#define mpn_perfect_square_p __MPN(perfect_square_p) -__GMP_DECLSPEC int mpn_perfect_square_p __GMP_PROTO ((mp_srcptr, mp_size_t)) __GMP_ATTRIBUTE_PURE; - -#define mpn_perfect_power_p __MPN(perfect_power_p) -__GMP_DECLSPEC int mpn_perfect_power_p __GMP_PROTO ((mp_srcptr, mp_size_t)) __GMP_ATTRIBUTE_PURE; - -#define mpn_popcount __MPN(popcount) -__GMP_DECLSPEC mp_bitcnt_t mpn_popcount __GMP_PROTO ((mp_srcptr, mp_size_t)) __GMP_NOTHROW __GMP_ATTRIBUTE_PURE; - -#define mpn_pow_1 __MPN(pow_1) -__GMP_DECLSPEC mp_size_t mpn_pow_1 __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_ptr)); - -/* undocumented now, but retained here for upward compatibility */ -#define mpn_preinv_mod_1 __MPN(preinv_mod_1) -__GMP_DECLSPEC mp_limb_t mpn_preinv_mod_1 __GMP_PROTO ((mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t)) __GMP_ATTRIBUTE_PURE; - -#define mpn_random __MPN(random) -__GMP_DECLSPEC void mpn_random __GMP_PROTO ((mp_ptr, mp_size_t)); - -#define mpn_random2 __MPN(random2) -__GMP_DECLSPEC void mpn_random2 __GMP_PROTO ((mp_ptr, mp_size_t)); - -#define mpn_rshift __MPN(rshift) -__GMP_DECLSPEC mp_limb_t mpn_rshift __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, unsigned int)); - -#define mpn_scan0 __MPN(scan0) -__GMP_DECLSPEC mp_bitcnt_t mpn_scan0 __GMP_PROTO ((mp_srcptr, mp_bitcnt_t)) __GMP_ATTRIBUTE_PURE; - -#define mpn_scan1 __MPN(scan1) -__GMP_DECLSPEC mp_bitcnt_t mpn_scan1 __GMP_PROTO ((mp_srcptr, mp_bitcnt_t)) __GMP_ATTRIBUTE_PURE; - -#define mpn_set_str __MPN(set_str) -__GMP_DECLSPEC mp_size_t mpn_set_str __GMP_PROTO ((mp_ptr, __gmp_const unsigned char *, size_t, int)); - -#define mpn_sqrtrem __MPN(sqrtrem) -__GMP_DECLSPEC mp_size_t mpn_sqrtrem __GMP_PROTO ((mp_ptr, mp_ptr, mp_srcptr, mp_size_t)); - -#define mpn_sub __MPN(sub) -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_sub) -__GMP_DECLSPEC mp_limb_t mpn_sub __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr,mp_size_t)); -#endif - -#define mpn_sub_1 __MPN(sub_1) -#if __GMP_INLINE_PROTOTYPES || defined (__GMP_FORCE_mpn_sub_1) -__GMP_DECLSPEC mp_limb_t mpn_sub_1 __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)) __GMP_NOTHROW; -#endif - -#define mpn_sub_n __MPN(sub_n) -__GMP_DECLSPEC mp_limb_t mpn_sub_n __GMP_PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); - -#define mpn_submul_1 __MPN(submul_1) -__GMP_DECLSPEC mp_limb_t mpn_submul_1 __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); - -#define mpn_tdiv_qr __MPN(tdiv_qr) -__GMP_DECLSPEC void mpn_tdiv_qr __GMP_PROTO ((mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t)); - -#define mpn_and_n __MPN(and_n) -__GMP_DECLSPEC void mpn_and_n __GMP_PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); -#define mpn_andn_n __MPN(andn_n) -__GMP_DECLSPEC void mpn_andn_n __GMP_PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); -#define mpn_nand_n __MPN(nand_n) -__GMP_DECLSPEC void mpn_nand_n __GMP_PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); -#define mpn_ior_n __MPN(ior_n) -__GMP_DECLSPEC void mpn_ior_n __GMP_PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); -#define mpn_iorn_n __MPN(iorn_n) -__GMP_DECLSPEC void mpn_iorn_n __GMP_PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); -#define mpn_nior_n __MPN(nior_n) -__GMP_DECLSPEC void mpn_nior_n __GMP_PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); -#define mpn_xor_n __MPN(xor_n) -__GMP_DECLSPEC void mpn_xor_n __GMP_PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); -#define mpn_xnor_n __MPN(xnor_n) -__GMP_DECLSPEC void mpn_xnor_n __GMP_PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); - -#define mpn_copyi __MPN(copyi) -__GMP_DECLSPEC void mpn_copyi __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t)); -#define mpn_copyd __MPN(copyd) -__GMP_DECLSPEC void mpn_copyd __GMP_PROTO ((mp_ptr, mp_srcptr, mp_size_t)); -#define mpn_zero __MPN(zero) -__GMP_DECLSPEC void mpn_zero __GMP_PROTO ((mp_ptr, mp_size_t)); - -/**************** mpz inlines ****************/ - -/* The following are provided as inlines where possible, but always exist as - library functions too, for binary compatibility. - - Within gmp itself this inlining generally isn't relied on, since it - doesn't get done for all compilers, whereas if something is worth - inlining then it's worth arranging always. - - There are two styles of inlining here. When the same bit of code is - wanted for the inline as for the library version, then __GMP_FORCE_foo - arranges for that code to be emitted and the __GMP_EXTERN_INLINE - directive suppressed, eg. mpz_fits_uint_p. When a different bit of code - is wanted for the inline than for the library version, then - __GMP_FORCE_foo arranges the inline to be suppressed, eg. mpz_abs. */ - -#if defined (__GMP_EXTERN_INLINE) && ! defined (__GMP_FORCE_mpz_abs) -__GMP_EXTERN_INLINE void -mpz_abs (mpz_ptr __gmp_w, mpz_srcptr __gmp_u) -{ - if (__gmp_w != __gmp_u) - mpz_set (__gmp_w, __gmp_u); - __gmp_w->_mp_size = __GMP_ABS (__gmp_w->_mp_size); -} -#endif - -#if GMP_NAIL_BITS == 0 -#define __GMPZ_FITS_UTYPE_P(z,maxval) \ - mp_size_t __gmp_n = z->_mp_size; \ - mp_ptr __gmp_p = z->_mp_d; \ - return (__gmp_n == 0 || (__gmp_n == 1 && __gmp_p[0] <= maxval)); -#else -#define __GMPZ_FITS_UTYPE_P(z,maxval) \ - mp_size_t __gmp_n = z->_mp_size; \ - mp_ptr __gmp_p = z->_mp_d; \ - return (__gmp_n == 0 || (__gmp_n == 1 && __gmp_p[0] <= maxval) \ - || (__gmp_n == 2 && __gmp_p[1] <= ((mp_limb_t) maxval >> GMP_NUMB_BITS))); -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_fits_uint_p) -#if ! defined (__GMP_FORCE_mpz_fits_uint_p) -__GMP_EXTERN_INLINE -#endif -int -mpz_fits_uint_p (mpz_srcptr __gmp_z) __GMP_NOTHROW -{ - __GMPZ_FITS_UTYPE_P (__gmp_z, __GMP_UINT_MAX); -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_fits_ulong_p) -#if ! defined (__GMP_FORCE_mpz_fits_ulong_p) -__GMP_EXTERN_INLINE -#endif -int -mpz_fits_ulong_p (mpz_srcptr __gmp_z) __GMP_NOTHROW -{ - __GMPZ_FITS_UTYPE_P (__gmp_z, __GMP_ULONG_MAX); -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_fits_ushort_p) -#if ! defined (__GMP_FORCE_mpz_fits_ushort_p) -__GMP_EXTERN_INLINE -#endif -int -mpz_fits_ushort_p (mpz_srcptr __gmp_z) __GMP_NOTHROW -{ - __GMPZ_FITS_UTYPE_P (__gmp_z, __GMP_USHRT_MAX); -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_get_ui) -#if ! defined (__GMP_FORCE_mpz_get_ui) -__GMP_EXTERN_INLINE -#endif -unsigned long -mpz_get_ui (mpz_srcptr __gmp_z) __GMP_NOTHROW -{ - mp_ptr __gmp_p = __gmp_z->_mp_d; - mp_size_t __gmp_n = __gmp_z->_mp_size; - mp_limb_t __gmp_l = __gmp_p[0]; - /* This is a "#if" rather than a plain "if" so as to avoid gcc warnings - about "<< GMP_NUMB_BITS" exceeding the type size, and to avoid Borland - C++ 6.0 warnings about condition always true for something like - "__GMP_ULONG_MAX < GMP_NUMB_MASK". */ -#if GMP_NAIL_BITS == 0 || defined (_LONG_LONG_LIMB) - /* limb==long and no nails, or limb==longlong, one limb is enough */ - return (__gmp_n != 0 ? __gmp_l : 0); -#else - /* limb==long and nails, need two limbs when available */ - __gmp_n = __GMP_ABS (__gmp_n); - if (__gmp_n <= 1) - return (__gmp_n != 0 ? __gmp_l : 0); - else - return __gmp_l + (__gmp_p[1] << GMP_NUMB_BITS); -#endif -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_getlimbn) -#if ! defined (__GMP_FORCE_mpz_getlimbn) -__GMP_EXTERN_INLINE -#endif -mp_limb_t -mpz_getlimbn (mpz_srcptr __gmp_z, mp_size_t __gmp_n) __GMP_NOTHROW -{ - mp_limb_t __gmp_result = 0; - if (__GMP_LIKELY (__gmp_n >= 0 && __gmp_n < __GMP_ABS (__gmp_z->_mp_size))) - __gmp_result = __gmp_z->_mp_d[__gmp_n]; - return __gmp_result; -} -#endif - -#if defined (__GMP_EXTERN_INLINE) && ! defined (__GMP_FORCE_mpz_neg) -__GMP_EXTERN_INLINE void -mpz_neg (mpz_ptr __gmp_w, mpz_srcptr __gmp_u) -{ - if (__gmp_w != __gmp_u) - mpz_set (__gmp_w, __gmp_u); - __gmp_w->_mp_size = - __gmp_w->_mp_size; -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_perfect_square_p) -#if ! defined (__GMP_FORCE_mpz_perfect_square_p) -__GMP_EXTERN_INLINE -#endif -int -mpz_perfect_square_p (mpz_srcptr __gmp_a) -{ - mp_size_t __gmp_asize; - int __gmp_result; - - __gmp_asize = __gmp_a->_mp_size; - __gmp_result = (__gmp_asize >= 0); /* zero is a square, negatives are not */ - if (__GMP_LIKELY (__gmp_asize > 0)) - __gmp_result = mpn_perfect_square_p (__gmp_a->_mp_d, __gmp_asize); - return __gmp_result; -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_popcount) -#if ! defined (__GMP_FORCE_mpz_popcount) -__GMP_EXTERN_INLINE -#endif -mp_bitcnt_t -mpz_popcount (mpz_srcptr __gmp_u) __GMP_NOTHROW -{ - mp_size_t __gmp_usize; - mp_bitcnt_t __gmp_result; - - __gmp_usize = __gmp_u->_mp_size; - __gmp_result = (__gmp_usize < 0 ? __GMP_ULONG_MAX : 0); - if (__GMP_LIKELY (__gmp_usize > 0)) - __gmp_result = mpn_popcount (__gmp_u->_mp_d, __gmp_usize); - return __gmp_result; -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_set_q) -#if ! defined (__GMP_FORCE_mpz_set_q) -__GMP_EXTERN_INLINE -#endif -void -mpz_set_q (mpz_ptr __gmp_w, mpq_srcptr __gmp_u) -{ - mpz_tdiv_q (__gmp_w, mpq_numref (__gmp_u), mpq_denref (__gmp_u)); -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpz_size) -#if ! defined (__GMP_FORCE_mpz_size) -__GMP_EXTERN_INLINE -#endif -size_t -mpz_size (mpz_srcptr __gmp_z) __GMP_NOTHROW -{ - return __GMP_ABS (__gmp_z->_mp_size); -} -#endif - - -/**************** mpq inlines ****************/ - -#if defined (__GMP_EXTERN_INLINE) && ! defined (__GMP_FORCE_mpq_abs) -__GMP_EXTERN_INLINE void -mpq_abs (mpq_ptr __gmp_w, mpq_srcptr __gmp_u) -{ - if (__gmp_w != __gmp_u) - mpq_set (__gmp_w, __gmp_u); - __gmp_w->_mp_num._mp_size = __GMP_ABS (__gmp_w->_mp_num._mp_size); -} -#endif - -#if defined (__GMP_EXTERN_INLINE) && ! defined (__GMP_FORCE_mpq_neg) -__GMP_EXTERN_INLINE void -mpq_neg (mpq_ptr __gmp_w, mpq_srcptr __gmp_u) -{ - if (__gmp_w != __gmp_u) - mpq_set (__gmp_w, __gmp_u); - __gmp_w->_mp_num._mp_size = - __gmp_w->_mp_num._mp_size; -} -#endif - - -/**************** mpn inlines ****************/ - -/* The comments with __GMPN_ADD_1 below apply here too. - - The test for FUNCTION returning 0 should predict well. If it's assumed - {yp,ysize} will usually have a random number of bits then the high limb - won't be full and a carry out will occur a good deal less than 50% of the - time. - - ysize==0 isn't a documented feature, but is used internally in a few - places. - - Producing cout last stops it using up a register during the main part of - the calculation, though gcc (as of 3.0) on an "if (mpn_add (...))" - doesn't seem able to move the true and false legs of the conditional up - to the two places cout is generated. */ - -#define __GMPN_AORS(cout, wp, xp, xsize, yp, ysize, FUNCTION, TEST) \ - do { \ - mp_size_t __gmp_i; \ - mp_limb_t __gmp_x; \ - \ - /* ASSERT ((ysize) >= 0); */ \ - /* ASSERT ((xsize) >= (ysize)); */ \ - /* ASSERT (MPN_SAME_OR_SEPARATE2_P (wp, xsize, xp, xsize)); */ \ - /* ASSERT (MPN_SAME_OR_SEPARATE2_P (wp, xsize, yp, ysize)); */ \ - \ - __gmp_i = (ysize); \ - if (__gmp_i != 0) \ - { \ - if (FUNCTION (wp, xp, yp, __gmp_i)) \ - { \ - do \ - { \ - if (__gmp_i >= (xsize)) \ - { \ - (cout) = 1; \ - goto __gmp_done; \ - } \ - __gmp_x = (xp)[__gmp_i]; \ - } \ - while (TEST); \ - } \ - } \ - if ((wp) != (xp)) \ - __GMPN_COPY_REST (wp, xp, xsize, __gmp_i); \ - (cout) = 0; \ - __gmp_done: \ - ; \ - } while (0) - -#define __GMPN_ADD(cout, wp, xp, xsize, yp, ysize) \ - __GMPN_AORS (cout, wp, xp, xsize, yp, ysize, mpn_add_n, \ - (((wp)[__gmp_i++] = (__gmp_x + 1) & GMP_NUMB_MASK) == 0)) -#define __GMPN_SUB(cout, wp, xp, xsize, yp, ysize) \ - __GMPN_AORS (cout, wp, xp, xsize, yp, ysize, mpn_sub_n, \ - (((wp)[__gmp_i++] = (__gmp_x - 1) & GMP_NUMB_MASK), __gmp_x == 0)) - - -/* The use of __gmp_i indexing is designed to ensure a compile time src==dst - remains nice and clear to the compiler, so that __GMPN_COPY_REST can - disappear, and the load/add/store gets a chance to become a - read-modify-write on CISC CPUs. - - Alternatives: - - Using a pair of pointers instead of indexing would be possible, but gcc - isn't able to recognise compile-time src==dst in that case, even when the - pointers are incremented more or less together. Other compilers would - very likely have similar difficulty. - - gcc could use "if (__builtin_constant_p(src==dst) && src==dst)" or - similar to detect a compile-time src==dst. This works nicely on gcc - 2.95.x, it's not good on gcc 3.0 where __builtin_constant_p(p==p) seems - to be always false, for a pointer p. But the current code form seems - good enough for src==dst anyway. - - gcc on x86 as usual doesn't give particularly good flags handling for the - carry/borrow detection. It's tempting to want some multi instruction asm - blocks to help it, and this was tried, but in truth there's only a few - instructions to save and any gain is all too easily lost by register - juggling setting up for the asm. */ - -#if GMP_NAIL_BITS == 0 -#define __GMPN_AORS_1(cout, dst, src, n, v, OP, CB) \ - do { \ - mp_size_t __gmp_i; \ - mp_limb_t __gmp_x, __gmp_r; \ - \ - /* ASSERT ((n) >= 1); */ \ - /* ASSERT (MPN_SAME_OR_SEPARATE_P (dst, src, n)); */ \ - \ - __gmp_x = (src)[0]; \ - __gmp_r = __gmp_x OP (v); \ - (dst)[0] = __gmp_r; \ - if (CB (__gmp_r, __gmp_x, (v))) \ - { \ - (cout) = 1; \ - for (__gmp_i = 1; __gmp_i < (n);) \ - { \ - __gmp_x = (src)[__gmp_i]; \ - __gmp_r = __gmp_x OP 1; \ - (dst)[__gmp_i] = __gmp_r; \ - ++__gmp_i; \ - if (!CB (__gmp_r, __gmp_x, 1)) \ - { \ - if ((src) != (dst)) \ - __GMPN_COPY_REST (dst, src, n, __gmp_i); \ - (cout) = 0; \ - break; \ - } \ - } \ - } \ - else \ - { \ - if ((src) != (dst)) \ - __GMPN_COPY_REST (dst, src, n, 1); \ - (cout) = 0; \ - } \ - } while (0) -#endif - -#if GMP_NAIL_BITS >= 1 -#define __GMPN_AORS_1(cout, dst, src, n, v, OP, CB) \ - do { \ - mp_size_t __gmp_i; \ - mp_limb_t __gmp_x, __gmp_r; \ - \ - /* ASSERT ((n) >= 1); */ \ - /* ASSERT (MPN_SAME_OR_SEPARATE_P (dst, src, n)); */ \ - \ - __gmp_x = (src)[0]; \ - __gmp_r = __gmp_x OP (v); \ - (dst)[0] = __gmp_r & GMP_NUMB_MASK; \ - if (__gmp_r >> GMP_NUMB_BITS != 0) \ - { \ - (cout) = 1; \ - for (__gmp_i = 1; __gmp_i < (n);) \ - { \ - __gmp_x = (src)[__gmp_i]; \ - __gmp_r = __gmp_x OP 1; \ - (dst)[__gmp_i] = __gmp_r & GMP_NUMB_MASK; \ - ++__gmp_i; \ - if (__gmp_r >> GMP_NUMB_BITS == 0) \ - { \ - if ((src) != (dst)) \ - __GMPN_COPY_REST (dst, src, n, __gmp_i); \ - (cout) = 0; \ - break; \ - } \ - } \ - } \ - else \ - { \ - if ((src) != (dst)) \ - __GMPN_COPY_REST (dst, src, n, 1); \ - (cout) = 0; \ - } \ - } while (0) -#endif - -#define __GMPN_ADDCB(r,x,y) ((r) < (y)) -#define __GMPN_SUBCB(r,x,y) ((x) < (y)) - -#define __GMPN_ADD_1(cout, dst, src, n, v) \ - __GMPN_AORS_1(cout, dst, src, n, v, +, __GMPN_ADDCB) -#define __GMPN_SUB_1(cout, dst, src, n, v) \ - __GMPN_AORS_1(cout, dst, src, n, v, -, __GMPN_SUBCB) - - -/* Compare {xp,size} and {yp,size}, setting "result" to positive, zero or - negative. size==0 is allowed. On random data usually only one limb will - need to be examined to get a result, so it's worth having it inline. */ -#define __GMPN_CMP(result, xp, yp, size) \ - do { \ - mp_size_t __gmp_i; \ - mp_limb_t __gmp_x, __gmp_y; \ - \ - /* ASSERT ((size) >= 0); */ \ - \ - (result) = 0; \ - __gmp_i = (size); \ - while (--__gmp_i >= 0) \ - { \ - __gmp_x = (xp)[__gmp_i]; \ - __gmp_y = (yp)[__gmp_i]; \ - if (__gmp_x != __gmp_y) \ - { \ - /* Cannot use __gmp_x - __gmp_y, may overflow an "int" */ \ - (result) = (__gmp_x > __gmp_y ? 1 : -1); \ - break; \ - } \ - } \ - } while (0) - - -#if defined (__GMPN_COPY) && ! defined (__GMPN_COPY_REST) -#define __GMPN_COPY_REST(dst, src, size, start) \ - do { \ - /* ASSERT ((start) >= 0); */ \ - /* ASSERT ((start) <= (size)); */ \ - __GMPN_COPY ((dst)+(start), (src)+(start), (size)-(start)); \ - } while (0) -#endif - -/* Copy {src,size} to {dst,size}, starting at "start". This is designed to - keep the indexing dst[j] and src[j] nice and simple for __GMPN_ADD_1, - __GMPN_ADD, etc. */ -#if ! defined (__GMPN_COPY_REST) -#define __GMPN_COPY_REST(dst, src, size, start) \ - do { \ - mp_size_t __gmp_j; \ - /* ASSERT ((size) >= 0); */ \ - /* ASSERT ((start) >= 0); */ \ - /* ASSERT ((start) <= (size)); */ \ - /* ASSERT (MPN_SAME_OR_SEPARATE_P (dst, src, size)); */ \ - __GMP_CRAY_Pragma ("_CRI ivdep"); \ - for (__gmp_j = (start); __gmp_j < (size); __gmp_j++) \ - (dst)[__gmp_j] = (src)[__gmp_j]; \ - } while (0) -#endif - -/* Enhancement: Use some of the smarter code from gmp-impl.h. Maybe use - mpn_copyi if there's a native version, and if we don't mind demanding - binary compatibility for it (on targets which use it). */ - -#if ! defined (__GMPN_COPY) -#define __GMPN_COPY(dst, src, size) __GMPN_COPY_REST (dst, src, size, 0) -#endif - - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_add) -#if ! defined (__GMP_FORCE_mpn_add) -__GMP_EXTERN_INLINE -#endif -mp_limb_t -mpn_add (mp_ptr __gmp_wp, mp_srcptr __gmp_xp, mp_size_t __gmp_xsize, mp_srcptr __gmp_yp, mp_size_t __gmp_ysize) -{ - mp_limb_t __gmp_c; - __GMPN_ADD (__gmp_c, __gmp_wp, __gmp_xp, __gmp_xsize, __gmp_yp, __gmp_ysize); - return __gmp_c; -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_add_1) -#if ! defined (__GMP_FORCE_mpn_add_1) -__GMP_EXTERN_INLINE -#endif -mp_limb_t -mpn_add_1 (mp_ptr __gmp_dst, mp_srcptr __gmp_src, mp_size_t __gmp_size, mp_limb_t __gmp_n) __GMP_NOTHROW -{ - mp_limb_t __gmp_c; - __GMPN_ADD_1 (__gmp_c, __gmp_dst, __gmp_src, __gmp_size, __gmp_n); - return __gmp_c; -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_cmp) -#if ! defined (__GMP_FORCE_mpn_cmp) -__GMP_EXTERN_INLINE -#endif -int -mpn_cmp (mp_srcptr __gmp_xp, mp_srcptr __gmp_yp, mp_size_t __gmp_size) __GMP_NOTHROW -{ - int __gmp_result; - __GMPN_CMP (__gmp_result, __gmp_xp, __gmp_yp, __gmp_size); - return __gmp_result; -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_sub) -#if ! defined (__GMP_FORCE_mpn_sub) -__GMP_EXTERN_INLINE -#endif -mp_limb_t -mpn_sub (mp_ptr __gmp_wp, mp_srcptr __gmp_xp, mp_size_t __gmp_xsize, mp_srcptr __gmp_yp, mp_size_t __gmp_ysize) -{ - mp_limb_t __gmp_c; - __GMPN_SUB (__gmp_c, __gmp_wp, __gmp_xp, __gmp_xsize, __gmp_yp, __gmp_ysize); - return __gmp_c; -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_sub_1) -#if ! defined (__GMP_FORCE_mpn_sub_1) -__GMP_EXTERN_INLINE -#endif -mp_limb_t -mpn_sub_1 (mp_ptr __gmp_dst, mp_srcptr __gmp_src, mp_size_t __gmp_size, mp_limb_t __gmp_n) __GMP_NOTHROW -{ - mp_limb_t __gmp_c; - __GMPN_SUB_1 (__gmp_c, __gmp_dst, __gmp_src, __gmp_size, __gmp_n); - return __gmp_c; -} -#endif - -#if defined (__GMP_EXTERN_INLINE) || defined (__GMP_FORCE_mpn_neg) -#if ! defined (__GMP_FORCE_mpn_neg) -__GMP_EXTERN_INLINE -#endif -mp_limb_t -mpn_neg (mp_ptr __gmp_rp, mp_srcptr __gmp_up, mp_size_t __gmp_n) -{ - mp_limb_t __gmp_ul, __gmp_cy; - __gmp_cy = 0; - do { - __gmp_ul = *__gmp_up++; - *__gmp_rp++ = -__gmp_ul - __gmp_cy; - __gmp_cy |= __gmp_ul != 0; - } while (--__gmp_n != 0); - return __gmp_cy; -} -#endif - -#if defined (__cplusplus) -} -#endif - - -/* Allow faster testing for negative, zero, and positive. */ -#define mpz_sgn(Z) ((Z)->_mp_size < 0 ? -1 : (Z)->_mp_size > 0) -#define mpf_sgn(F) ((F)->_mp_size < 0 ? -1 : (F)->_mp_size > 0) -#define mpq_sgn(Q) ((Q)->_mp_num._mp_size < 0 ? -1 : (Q)->_mp_num._mp_size > 0) - -/* When using GCC, optimize certain common comparisons. */ -#if defined (__GNUC__) && __GNUC__ >= 2 -#define mpz_cmp_ui(Z,UI) \ - (__builtin_constant_p (UI) && (UI) == 0 \ - ? mpz_sgn (Z) : _mpz_cmp_ui (Z,UI)) -#define mpz_cmp_si(Z,SI) \ - (__builtin_constant_p (SI) && (SI) == 0 ? mpz_sgn (Z) \ - : __builtin_constant_p (SI) && (SI) > 0 \ - ? _mpz_cmp_ui (Z, __GMP_CAST (unsigned long int, SI)) \ - : _mpz_cmp_si (Z,SI)) -#define mpq_cmp_ui(Q,NUI,DUI) \ - (__builtin_constant_p (NUI) && (NUI) == 0 \ - ? mpq_sgn (Q) : _mpq_cmp_ui (Q,NUI,DUI)) -#define mpq_cmp_si(q,n,d) \ - (__builtin_constant_p ((n) >= 0) && (n) >= 0 \ - ? mpq_cmp_ui (q, __GMP_CAST (unsigned long, n), d) \ - : _mpq_cmp_si (q, n, d)) -#else -#define mpz_cmp_ui(Z,UI) _mpz_cmp_ui (Z,UI) -#define mpz_cmp_si(Z,UI) _mpz_cmp_si (Z,UI) -#define mpq_cmp_ui(Q,NUI,DUI) _mpq_cmp_ui (Q,NUI,DUI) -#define mpq_cmp_si(q,n,d) _mpq_cmp_si(q,n,d) -#endif - - -/* Using "&" rather than "&&" means these can come out branch-free. Every - mpz_t has at least one limb allocated, so fetching the low limb is always - allowed. */ -#define mpz_odd_p(z) (((z)->_mp_size != 0) & __GMP_CAST (int, (z)->_mp_d[0])) -#define mpz_even_p(z) (! mpz_odd_p (z)) - - -/**************** C++ routines ****************/ - -#ifdef __cplusplus -__GMP_DECLSPEC_XX std::ostream& operator<< (std::ostream &, mpz_srcptr); -__GMP_DECLSPEC_XX std::ostream& operator<< (std::ostream &, mpq_srcptr); -__GMP_DECLSPEC_XX std::ostream& operator<< (std::ostream &, mpf_srcptr); -__GMP_DECLSPEC_XX std::istream& operator>> (std::istream &, mpz_ptr); -__GMP_DECLSPEC_XX std::istream& operator>> (std::istream &, mpq_ptr); -__GMP_DECLSPEC_XX std::istream& operator>> (std::istream &, mpf_ptr); -#endif - - -/* Source-level compatibility with GMP 2 and earlier. */ -#define mpn_divmod(qp,np,nsize,dp,dsize) \ - mpn_divrem (qp, __GMP_CAST (mp_size_t, 0), np, nsize, dp, dsize) - -/* Source-level compatibility with GMP 1. */ -#define mpz_mdiv mpz_fdiv_q -#define mpz_mdivmod mpz_fdiv_qr -#define mpz_mmod mpz_fdiv_r -#define mpz_mdiv_ui mpz_fdiv_q_ui -#define mpz_mdivmod_ui(q,r,n,d) \ - (((r) == 0) ? mpz_fdiv_q_ui (q,n,d) : mpz_fdiv_qr_ui (q,r,n,d)) -#define mpz_mmod_ui(r,n,d) \ - (((r) == 0) ? mpz_fdiv_ui (n,d) : mpz_fdiv_r_ui (r,n,d)) - -/* Useful synonyms, but not quite compatible with GMP 1. */ -#define mpz_div mpz_fdiv_q -#define mpz_divmod mpz_fdiv_qr -#define mpz_div_ui mpz_fdiv_q_ui -#define mpz_divmod_ui mpz_fdiv_qr_ui -#define mpz_div_2exp mpz_fdiv_q_2exp -#define mpz_mod_2exp mpz_fdiv_r_2exp - -enum -{ - GMP_ERROR_NONE = 0, - GMP_ERROR_UNSUPPORTED_ARGUMENT = 1, - GMP_ERROR_DIVISION_BY_ZERO = 2, - GMP_ERROR_SQRT_OF_NEGATIVE = 4, - GMP_ERROR_INVALID_ARGUMENT = 8 -}; - -/* Define CC and CFLAGS which were used to build this version of GMP */ -#define __GMP_CC "gcc -std=gnu99" -#define __GMP_CFLAGS "-O2 -pedantic -m64 -mtune=k8 -march=k8" - -/* Major version number is the value of __GNU_MP__ too, above and in mp.h. */ -#define __GNU_MP_VERSION 5 -#define __GNU_MP_VERSION_MINOR 0 -#define __GNU_MP_VERSION_PATCHLEVEL 1 -#define __GMP_MP_RELEASE (__GNU_MP_VERSION * 10000 + __GNU_MP_VERSION_MINOR * 100 + __GNU_MP_VERSION_PATCHLEVEL) - -#define __GMP_H__ -#endif /* __GMP_H__ */ diff --git a/misc/builddeps/linux64/gmp/lib/libgmp.a b/misc/builddeps/linux64/gmp/lib/libgmp.a deleted file mode 100644 index abac8d227fc7d2a1a4a8557327e09eb9fc29fe20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1175464 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

G6ZHc9Z9%<5+U-F1CZ>KgW&Zq?{OI zxp*d5XFF`K&uK49*3VzEWch;m;pB5io_w$tT$d^F^I~1TdHw=TE~f2#UDn~sVD9Vi zM7bqU>+l(3)~S|wJhfji+dqGUxi@-biFHre27KV+W;K*G;HS{hnwH-_O}w6DzkD0r zu|%xHQj;ONT_nP-%&%jJqW!p(xf81&lmd)~2E3rS zEgod4i1~(_(|nPCLzbhFWo5J{&v^LBSk0Lpv3OOY+c%(|(e7cQBQIo6u_Kq^2YG`H zSiw>iY(p$6g`T4k`hqyQjxA8skX>j(&%z!m)%ixl1b~R123wGVL?;^$@AV#w6`*f- zn}re{1sf=E+mC+u!ykJ8-1mT}8#)$r9j%|c`!IT~{3`rgXf&9pHiyr9$b251JH@*n z-98cPLaMrNuxwhAuPK|7?8_&U{djUGq65)k;0TJ*X-HY@4VO*C-xTkY=*)$Y2M||| z2St~Z%@rNl<~=OBajxvf$64{d7iDPo;aJi2{!Y=cK2(MMS-}N1IpBA(g6Pkhvbktf zLHrf8iT7PfVAC@>EziKTH1kqD`YKntN9?ZI>3tflu0fOL?LLZLD4T_Ui^8|F$Gy*^ z-zJ#Pr;2L=cAy0lPU?%3W>c~wYV3}v@gkY`&*+3jk%vw4nY`0e!v$V+M6>s~m@ki9 z!ZCY70XsviXR@ihVTE?iW7$gK$ez$?)7UN;g{qm9p*OnB^Wr`4AaiZvp++UK(Kf$~ zYE&gAvmolj^Q=5WLEze|l7*pSRY98;84WRJO}u?l)qdU2kY!R`J@I{j^RZh}kVdvB~@m6+r4N@g4`n=6uHI(vILvQx_D#(8NNU+hdlK+xz)6jCZ6 zyieKqUKwA767-tHKMiC_i})3aNQ?N3BMI;$9&x7fJAmSgP@m+TYwnxOr(@H-P-%!Z zW|NE1apnG&-G?VdkC$Q+l^J(l z4gli`%*H1ux%f3g9t=8l%L<~sBmLk6xdkYNDHpzNNrj05Z_`!Cz7Xk4a19@n{8yz& zg&r?8U%+H3{uMLvgJV^eEt$}KN4)pz?*&iV(tOz0-0i#LMFZ}lUbqo3%-h_Phj%kC z8Vh&Fi@V@Pbed0kn|8l?5lF%h@AxA%?M6Jw7VLeMbJ{%Iw`bH-_*E1ux)wN0quOP$ zDQ98}gQ~zH*xnw*6q-;p?vJ(?^tAO44D_|JZjnGVQ9$)&X*(u1xgh#l0np!`<@kv9 zU#t>NQ~98=I} z8PEA}$B|8_3TV;;@Ct4n3yOC?eqljm1Z{)c7P!nj`2`A!_~5x?2h)jZvF+-M=57ax zX9DAiJ=;d&bM%do{!SSuI`o1OowAV981@Z!ehPC$MocvBRYTVEsK!1hM;ugCcra=~O-^@N@dQ{{g_l~m3T3@O}Se4lF3{Bd7)NYZiT~Gg?vC6aM_8hdw zgJ~ZJhvAvNy9ceubleRv)qOkyb0m_Sopma^uRpHCkWU^_@P5l8GEkzKUA=OR*anqt4>MG||EDM9qX2XbNX zc3#9~fxlsuon9fL1~3$UnNJ#}bT&AC;5aXfoYHZ$`N!FcwNmUGSHtf_#MX~^JR81) zKl3z?r+yq%+2`kZPHZaq0OcJkm)j4j{nc-&aY0}^*+#mF_#1U5f7wp#iSg5UW>J1N zV382pT#=q+CX?J_p_UhOBpjVn?%@Vk0a!H-Ot%5~*?V4wJf2eV-#*PIoN|uMA!I1^h+@;Hz@A zDDhK|e?RgOCI9#@OjT+(a~!wgcOfdxFwYR^*r(o;?g0Z(bHl`0X)1zeC1X-SAqV@M zBRtCyrglIRWJB|jHRUm1c6<*z!VQk_W=ELvXyw??52*lrhJWn{E1}E+&wSii1{y{1 z#L}vzkmYz_{6fXxelTogTvj<|TvF$HX=F*gRBCiwce%YD-_!w)E%Q;K#mg3l$EbkR z(N2b`Z7mhA#RI-7z>>rZ_VOb$sRuA`D9Wf6%Wq`}?kY?WYGrTcc*4IIlZ^gZKs5Td zOMg3ksDw=AJb?cN=`WK0ZPJfP|KFwmWsDWIy?fyEE$>_LN820!NFN>iLm56uA9H#b zCOY9~NWX?YXvJz7zDtI`OCNM}JALH$EPdoR2@{s-ucD81^XZe`(#Q9s^a1~Iv@Nd) z^qBrfJ)YO-Bi$#_Hu|5H{%ZQj=RO(!kqj3DhWXwM^_2R5Q1?2s%jg1uK+dltY>>!n z)2njO1azY2aI-Udq{>`-!dhEs*1ctg3d~5qx{X;+;}uD(Y-Z@?=I*@Dh&zs}v^$O? z#T~~ZOiC*u;1pt^m$}~I<`GyP!8QaAt^TMmDHi#(g;FB@*4h*1k-F9`R&5VWdfEIo zk}{3P{3V`JIV9Q{uV0t6KESnZP}aEZ+BlF-&^gz*D&R~h;xV;BsoZ7zC-6;oNG9AR z_|LS8?z_QN07gy~k&bYg)-LC{{1tj4Ef43~MYtIvXZxQ@MqgjM3Q^G}!~qq>Ol3RR zHw>#b;HRe(fkpfwoyt#zm9NLYpS4TnLqF5GJV=3X9Lr3y{ZGp8^w^He9bxC%q=-RM z_HPphMRe^8Gb>e)c9j%GcD)(t_#lo9JPS|{o)i2VeRS^k>7y~^r%AKzVpB&4NxhxQ z%z8VZNm6kq`}zG=IVf&4i8mmz^@7l?3Zf2in}&C3aC+GA2&#u2K&3U?hqpX0wy;A9 z?8L?h(c(^|*#YSqZyA;$bvXnXt&oG+7L3Hjbfm2qU$H*Igw2VO*6oyhP{hqE=Hf>A zgfdbvnwwSk%A3sQa7n{~a53aF9&c=-Z)Ly#H)b3eOSufM;yjji6{q2V5uzx+0vF2T z3$Za2M39?5Mb6^4BbK!u;<`m~wm~{K8a4&P!!xgJG;Fkvtbli;VQz3v8b-KWXxPn; za#het!w5G+H5R^tqp#DjiJ(ne5l5QE)z*!M^#bmCd{<88r^3qD;|GI=fejIkV@Vq3 zyp?mA{7#Q!JlPS}h=qe}C5h8A-XUCh(^AF0GI)wRIk2;aGDx5H(MLyi(+7RB>C(z1 zvy_!CjmiC8hwZYX-RP3!mB7E$6$y?hU*nZl`GW6+CyuWx2#>cyh1PT*$q0EOS{Iv8 z7I-E_P>!vxmF89NK&#UDAxK{2BXAnCwZzG6LH--7d)W*ffe=$rmc%9@Zwc|e7O+#_ zO|nyKK}!oEwdL2uMo$k&Q-G>BtCp zHyY&z$1?OR2$u_uTB#?}@^I29!sSAvW`g!~BcE(EYBUZ&Qow(_rhM)%dL@aAk=zL@g!?{3QeT z9h-q`HJ^iBpy#M=nPlL;M6%eEAxf%&-Bre zUeqng&!yP8)Gce*edgsk%f2?s0dS*Rf}bm=)T^#AGe0+7@l0Y@=o3hfsIe=2tBY)L z){SZGn>Eb`HRV5oB#|^FIWN4Dm5HwlXnfuI6r!EP*TvW9{8<9eP^F8&elz5GvsTVG z>BQW_ZzsK(4ZJExd^X-p9FMBZ;JeWqH#p*joH8O8!sSA5KC36v@^I1{!sSA5c;l-R z`DCLvJ%C#-YHI&;R3rICj~@(r1GYpsj%6kp*v0ZYJ&tj}5uV@(*E+&BJzAN%7A}~b zbWSW8O7dH`^St8yuwLRkiL~k_)PuC@-|3@~KcWxb>k0bcz3gfvS+1yv?+~|-STm=&AI7_%(=#b94v3!+>lMWFs7dphZ*6v3>+2~LM`eh>E zlvCxZu=4fz!JtD*j>WOeB*!A(sazp{q!2ir%~`2&Ihu`Dr_gE+vLKz{ri64tWS7bE zv#sPZq&#yumIzMppVxGDsMbN2rA1`}kv^F%Q2tOc%SA0_ z(eYkm^OG1-WT$ihXpwne%=bJiCC>hhyB+~Va_dq98^tC!zgn%f|WaRsrNENy#{$$HFlj(%W|!LwHN8Q?Vp?0SZNUI~$u~ zML%b4Oy5~(VDwLU(C#-wySy;8d=RfVnRr)DWrFRJ5|NAK-FSQskDV2r5vv@7!mL_W zSxAsjU%>`JXfMbdo`fR+ULHIKvGG;T^7 zkM8kz;?XQyvfsdGHB`;xw^POT5y1xA&1bt&lISR9dBCnS>ua{N*{UX}Bx(}#ovtnb z$;%8iWd*Sb!$tj7R#K(cY>C%MNxm9}_@`K(^xdNw>WoiA^pNM>ZUF64&W)Zg9PaVV z15h@4evg(H^K_%N_>tpfz)AvL+{T4XP+IE zqPo`e2%=kHI&sen%g0N9hBu6l1~fW9dWRZ5n-a zhHPAN0Zg7XxU7Hg#o8L{MCZ2t*?cZdG;`le)6S)!q6N_4D2B#InfV5uu1Z_keB(#1 zpEIPSVbaFa~90->S zEj>?9q~+nHrG(3cmcE5~e?RicMoaHOzf=KEIY%{AbXuDRgO)1Zm}8lVH})rMV$;GT zLhHm$CtqpQEJcB;k&nLry_aEh(x=t7w$ygn=)<^il0DAB<`eZ2=@fl%T3fTg<3I_* znwSqpEnnzCgwKy2_l7?fXqpr`E6{Yu+ep2^_~$13>PV~E(FYcIWGgcr6dBeBV>yj_ znaU}=9fb(aK}<{G)<|D@3Lm*wB43mZZZu%@InDes;p62FxJMDzoyxwGHShVrXYz$mBkQ(@)n@!9cFuL=81^_rbqCd+9`F2yk-J_6sutLj%R zUZy?qos7bxL7xstQ%E`E4+KoYW!Js@U;MGxGmbg71j0?k|Nq4wdwtVqGx6s_yNkqs z9Z$6AG@39N_@mCV9r&{(?bTTuffz>&8aqy6gzY6)Am}J(lF*EM4<|FKxqrV5}~RJL4Fo@FH?Dcg85<#5jmKG?#U4c@MUvJ7wel7bonFaGUGS z9g7>>P{fG~UT%r6i3O;9v;@g)f0O`A} zB5rUjL!Who%Vib$fumfNhjSGnTrR6fO^&O`KEVAgaaZg=Z57GHT}2dkrN1yqtVymU zE;uu0Z0>iNc&DCD;fzyX1n0=&Mc=u2{+5s6UYXx~e56^s)!b{<7UIMguleF~WS|vK z{eBzwnapRQ^Xh;0lDe&t%lTq&r@7J>zF_4%6n*;IG`K&@kWZL&h!X`F8hYGT!H z$B8eVGw!Ap8Xg=|bXeP@6#DVO3N=|%Hl9F=d&q<0jiu`DM80TGwB2XnL^j;V?t0tU z-emnf4$61<_nU8`X8x!37lF;{ZN^<6)9Vw)q4_JlR%iz+GoF+r!oSOl33$*rSi8-Ly#ds+s&`nSZD#c@oZ*hI>ozuDhR8?}t6YmJf8)gXDR-YR zzFv%2WNY7T#j$t|+F9LXq5v3x5(StzVqe>3)!~SFm-hu4t>$ynR;cS2r5uUcUFcRb z)L~5-e!{;ShRUk*QR8p1GraBNgU04_MBQ;FA3jg2AcQ(a|Fq)+2B5_^J@OVNj9miW zR&IVNkEi~yOC9RMv=PVM>ZBW4H`btd`z~9r6+vObL3zO|mo3H8Zx0@=uA9d`suFFTi!fKGzwv2xm$Mu#PpnV)2)=Pc; zCdyrZDW*s;v>mg+m>Sv+eG8~O#67HHYTk$;jqhbOYqwj~2hG}DW_4%$IT6ue`aTl> zJ`$kotkc`43N2{NG@*sSj+4b%pU*e*;-8~Ev)X;c=)CqTZCLh&eLY$f#BbLT_9K85 z>h8*<*o&+d_1|R#Z4o|;N)W>|3l3(eDgITabwsztUqmdX&!Fu1KDc)mzNZ#nG)1k~ z&a<>F5FhZ|gi-{|DWPw`-xtX+sD^MaYk4t31uwyG!e@i401We2j`?L;*C}Ju;VzKt zh)SovIoEZ<<#LwRPoXO^$#$0355fMoRH2SKY0+tQ&CUs{Ub1r-mh43pRuW+qK24l2 zFvPLsx_-9(N&M%Sj&y`Cb%gcvK*CRTe6M$empQ^;bA&x)8j{kQGuT0Z7 z(4cfh1c&Z`tB%34dSsBixE)@)0xxafv@E=GKDNWQ!U5{YcJM6l0*o!s0KX^wVOR&K zQ@|CMIt4$cU*Pfli9X=pp^q*2`4}3)eVRVPCVhPWFX=xk{c|u5)K&PL^m#Xg@QbCt zfj+h^{~~=>J)^Fk3y&43$eqVpEs?>E$4b47ZR_UK`lhY3Uy6%D)-~cKsMf&K{?>2} zSe^hBc1H#K!slT%TP#*HXep2U_1rMqVS6hYQD*}5GW4NGmRnycN%$Ag03gl-n zaUr$Vs0%oi3JuPC094jftD-sNY3|RQ_=2#L=AOV@Dn>l%CWjDHMf`Ts+_w;~JHpX9 zX|5ZbljagG7n)0EPIoHkq`8F4h33*G{8nU`jpl9x+?86vs$4Bf{M6$IgXV$^2*m28+C?i&YD5zqmbg1iwAlq**I{*v8>0 zShGFQ=Wplst-6RW!?sv6@~QP&9Q?gmyUDD+2dWWf=w4&P@IA+GbX7v8u5T zeTWw@u`8{9#0+h->Ts38X!rvvj(uEmb5~P#iGK%lkYStk60`Qf=%0GA*=&4`{Zflu z?z2J4>NYEj(>%(Xq@y-u?&@GNdWg&s7kp>_NaG>gsN zzOJ#@C}S@-qYb9e!1@H;hSAt2x^bJbL=<`iJEBin)sKu17@PlDe0wChNlxud ztkBDV5lX}PR_z1h3ysaQ30(aEO2)1UJ!Y=}dXfjgcZ(!PxL=}rwc6lV)%RN=SX8?Y zMHM40X2^qBKnlrnW2cLs_6Ad_35Ont59h|C`d&GpR_#5px!x1z+p%!o3G>(tW8)vV zbvP$_)Q8u6624$dIAPrR8^nn{UaZKT29tcB;jA%3+wHR&%pFdge`M9tCyo``gt>yf zPjc!QcSQkq(!9BcQ-+hno;GsIY_e+aMI%K+YEs(^D^z6F7E_QB!BoSP!EIg)shlIa^VpU z=D06Ah<(|&RiW@zxmuL?smBi{kHE3ag+~~xRghyo$q}x0gl9X#H#@@X9bv^7=sX7) z1*H$}uqZ@QrkRz3zpiqIW~03y;%q9N?zuW^l!l6 zF#H?oQ@M`etLcN+5qmO(i?E_IemZ^dK3|mnkLjNQJB{?QmlJz4?7?1Q7<;qh^sxuy zdq?yylzve9*Gqqq^w&rqZ-tJ#l&=piv{lQK@^Ba4s_H%5pLFWIIpyKlt68`+x&J7* zD2SQMp6?PS01Iqx0E|PR#l9%53AlNea;Vcnr+k9b+DQv1VmvVoveLrUOsqK!t8h+Q z=mzJcg@nt67XDP0qdY}>oV1W|xzNH*z=JJ-1uC3UzqADX@(EQad{wR%C4TDhgFy>f zPdbhzY2i5{Wd9?r^Vm3*B27dwMVZ7m+x8i8{nLR!+CgqM91K<{UDfR8xRtUa-1axb zK^Xi8-&ZW}b@1e(NZ5`FhpgH8W-m85&4Jhb&3FsOI$=JACpq~-LyP&bzUKsw8wSrv z-d?d=w27cuJ=lM=of^ZQ#4G$i#O2FN*#_yvIODeycX>BI7u?;dGLpUZ8ST2R*SQ2+j?V$Ky$o~RA zg)MeXoMdfUGJnlWLr7yEya0-u4x`TnO1GMxDWxPQ*iWwLP<9hfei?ehLCcy9c(k#9Mx9* z^y~s$F@H#>@>5~u>+#v~Nv{dZ(@SJHeG|m<9I&avmEk|}N#GA~AZ_tmwHWv@rozUL zu&_Rs4L<_GV9s~=X$Ou@;m1kuVoKeMnKTr;w!oU`iw;0~(qwG<2`X%hu71siw1;*u zpY~7(yI)+&-^B|h!mDjY!wdKkTj#ynT)VyTKzLMOXJC(z^H^)QUm4tQ{L1$+YwZr>QQzqs zedm}@MS9wN7obofhWe=}WfzVa8onzkmhW$iO&RMAhISbZn-N24hZWjI*#!k#MP&mY zMQl=Z6&)xuHqR1`$d7$tVAOH5wnMhQv8g>IT5U8IP+ApXm=l9iKAM$-mO?T=6Lt`w zv_Z`Q!{l>8ZNo1`sIRVRYWyIAW@LN3l(~fRlTx!#Q@TLvP2{NwdBpPuP*-S@d<9z~ zx=$RY_q`CCHZZCm(jruM5mLr$Q4H%)SNQEfr@zy>A>VAa>N=YLa2j})ub&{h(hQ3% zc(C)=R!JkaPo7xKxdX8J%lE^ZF;uZDA$-~uyD|^GIRjmWbN+Kt<-nfnuX|y18InbJ z*5U-{~irOTGD z_=lCN!jW5UU47f_$kLO7yK>UxDWR#;rq8(Q>Y3HEuDSNQ>u;#3{rneZfAQ~6l|wG+ zKS-v{e&Fb`RpFI^%PKvW4ayr3TQw4=))FTVw+MuH9{QIw7bqfVFbTp%GOVa#ua*}+ z2{`)B{g)eD1z?%KI!_^7j2TErvc~V9lfI1htVIPftxeM%aF3~q%7n~|&bc-bZnphN z{8w=F^(JP!rC=l zyv@W2&H=7f=Ow?|?eIIo?04nZ&Kpz!KEv}IVe*v9@%x=B0H0xdZN&PQzBq=ZEj^p7 z#O#-1C;4_z^0jH(R*sM|rN=px5pJBn>ZVoiM|354Aar8`s!F*O4{^L0>`&20{1@m$ z4%G^ua;W_>z5xB{1+O_n`Wxs2J_euisqfN>cVnagp6z@n6g>{2GNn3<>7C?P{d2JmM>zlP7kA6Z64NBK{LD z6Www0#CL0H_>*;_bJ88cg~S*8pMs;0DU)=3>3Rb~q&cVJiMIppZ;2=77$te)wDWQ7 z9$^U!o5&@Lm)^Kc8TLrxLooB%_PF<;!~Yh_rmGbH%dwV$C~NKpNM8#qFsY3@SAW8~ z!AEW6&asny{?1^taUT^<)0lm$249{ON`-Zg5U~ zAzUu_@)Jk73J;w4LbzP;Wp0l6au9GOTG^^xElT{<>;s~2*)u}_+lf5 zzEFx7&!YKD7cO3vQV7Y0Gl9x+IqQQ|NW#f_&;s(wXBHD6FP(_3-DnFB-$Pbf0of^E zGornH>+gNAkPjt(?2|S|kpXlkHuBgicxcU~Gzy80OnKxwv)A7hx!m68Ap$5k8UoV_ z2w*Gu08@0wgjTcPe9e5)>@wekT7*m(Zcm)U&0K8CcVLLkR;uN}9qSF=K%SyxA&^jRN+c0Kp5V=>ZL9RH*$5ZK8o zn0Rfq@43KJX6O5VqqT7-YhW~f2mOHxm)h+=9p&QX`%)+{Kn@*#4ZT|mx>W9OjZGdf zTg+C7o4rp3+l*O<(0zDB8j2st0G(fU6_o8pumPxl0B^>kAB*3A^}Jn3U&<;551Cys z!6|A~61fbIC=^f!<~r_W|6(4(nEOoG(d_9TX5zVcLj%sli9>!O^>Plc7Q$7iR@syFS_C-0xq`2))O!0HRfvCOnz z`jq@mPmHl5&PlQ@Bh=Z~isdU7ERQTpp35mzDlsp*9iO_Yf~bW4<3xUlw!0u~fC4WJsJ^nY1hg+jf zBVpfjd>%+isj+!KDh;T4paa)7HVHxu?LZ@hsK#RuZ~!+ISQ%gzxR1j>xju z+Wk@o)#I-aN?DV3X~DF{6{Q6m@dHhcAl) z$6~&7y)EKkzF54LUWLTv<}vvWA8I`sYIzIL2~~ju<}u^ZzcXKtw&k|_fIC`}77esIW>w910nWGuRcmVZA26=;8z`8s5no!&#KGDiWn0%ZcC7)2g7>sTCDkuCC` z>Hr#pjLY$0drf#X3a<2`@Ho#;8X#C*4~mY&H2_&es!oZnQUyca*J3C+hDcZ1xM$r( z04)V5UU9#--CyM0b?-&KCX$~(_#;0!va)}KfOld3y>(Xp1+50Ey2*eYTUgXpHW6h zU?-}x$ih8Cqr=R@wXopKvYJRDevM2%U^G6AWXQSkznFXtk`EYnSJ=rH1rDGkHL;mr zKf%l_@8oFQXJ>={h`bih2ORstRQh!1Ad?}#W{uQHq}!S`9b}TL{0Wq;sxWgv({k3S%w0AL+BLSw-jGA-M+ePB5{ZEXsTu_ormK|0rmZnFR(i}Tou0`jd46aR(YmK>-FLuji zDchP+xrhLdh^PMjoM zE;#wPDp2|gH=H<0xLk0OZv$)rY__$s3=O|fD_fPTMTwt!{9xiF$I=xiSEb{mJovr6 zp7@G%W%v_vlV!L@KL6IF;6(DMuInVeOGV@Ca+4M4S2}lGoN3D`=9W#sx>o~K%iqRH z#4RK+vc6^?(xeY0~gOB-s&e}e~ zNq}$6qJ$EG-+J*%iFky?1C#a;W{Y+#f$TuLGdA659E~k>?DJmScjy@z8(p~jFO9FR zyA&Ch$Ldc62GVHNG;5f3meFB6WqPB{KJz0{+zfmz5=Va&qu1^ZanlX~0;*abtJ&C( z-?&?me*&VJv*YFbXv-js#`6)FWgd$hjh}^I?0plj!5p)-t3HV+v}K6Xy&q~w=|=Z@ zF!xH))NFL`h?WIlTKB`N%shs3*BSIw<4cxbZ;x*c$Tl6 zDp!S-ug4Dt-BWUBjwR{dd8%Oe9Me)q_+m%cvse;4Z5tt|pJx^BbuIJY2G@LfA0xG? zM;_$E$hUkJejYmO!ziCVC8xZPg}uh*;Ad9ULq~^%G)Y4PnfDrF0$1crLwn_7t7zy+ zI;`8+NFjh84FWhFgm5MhxEP9@>pl#n!}VX<)(rqg1zwH5dnqVrk_c>a}JYG786KCU$z1%q)xs4kTz~vGHihnBWV>-T#X46D%xnEOCjQ zKPp(bu_Q1RL@b$aw0|HRWX+Mz8+>8irNKYn`g`P47@M-xv%3dP^dWy9+ocp-u`n>A zF!2)rUW>%c&HDz3ZwZL8eFGPSv*c==>|Kn)CaM?Fkw#>wHfw0GY%UZ*Kc7+rg*?pT zk-DJ!*OYw<#Y{Z(w(;1MvQOD+p`gP1@f!Pqxn*VWKZP=|faG!M;C(>0lS#136>!VQ zN@=#U@VSVB`^KI4HPHyQ;O2RJ9%(rG<(KHT*Cas+Lv!s^LONtD}*3-ySrFy*|9?kL54Y(-UYz4U`yx1^ftf>q)F3rebFL^!O& z*$TLc_@iwe<=D}5&i!-;4iL8@o;025LAo>Y?sK)g0OGoaxxrN+4f8*niQx#xvXtX* z{*gx|oN{jR>Zt(G;ogh9`tvGtEf40UFP9GjKd(h3DIKRf>&8B0Kj~dTyI7rwQ%8L)2Mse-CF!foqqskGU=?K?4!e4cSS31I9cZ7L& zKsolCe!qp`ALFkHb(;g9_1g|#Ieu?Z0r(7ywV3N=+FFc=`en;+U9>oSlawJWT>Rz5 z;rd(VFNxg5m%TDd7V2kQ!;4okCs@Tw7YRm|X&-q@yZ+|LG6}q_Uek(Q#+RzOh})&4 zcmR1NTrTmFTd1#J5Wa22P4zd{FIm1o%r!42(O+1z<@_VtmUa>MtC^T3G(F69D?p@JiLw--!2;5K(C?cG5J*)yQO~e<{e1eni z^Y=wEtZ09SmKQ!H*Ro6SoABA-DgdKr!TfUB)8$EAL2}_#9?m@-;btfx_zI4`p2a~_ zv>S0;*G{ENv>hFBJ7APk`Khq-_4vPjom1S5ojY}jxE|ASEV*tt&t)&RKa2ky#P z0Xhq9=Kir%`cvqGrhkz>)`qXp2W?*?{l&}0_R=Q9_@8y3Syd$uwX)OfDo%2^Q_yT_ zr#e(Xx>pM$Px-hpX@zmfMlX~|Hgd@e_8YM~ zQ49#;_$p)b2FzBgZdb5wU-)9aTYMZB=KN1V6%uTHzWJQDh5HPczfGCwwIZFfR*$3Y z-r5e>O12{VcxiBM-icU^_e5;w@DqV!whn3DR4CY-L2Fr%j>UcBBb|{1o(aaC$4S2A zmBZS6?!Ra{8#e=4i;M8euQbBtKkixy^W9mi$DjhrT$iXvdL=AJ`N2NyTkz2D*RW8q zGya=phEV?wlS@$tsB|D_mu??Ye!2>zZ-b29U6%k+pEy`NCrLE~_v$X`peB zIoxQx3muDhlGlBe9de!T7o-RF$EiM}u?m=O9t-|9JQF=_6m1cj&8VxR?+iqGCYxB0Ux1ZrYM|{z7H0o+On_wP+uc6=1ZILg z{8DZ(Y$}Gnuk#a>af%s$5jads%6StZ-OY=Pi>~eR8h86R10(xHpIK9V{5I7W9+oJ+ zGFaVZG>~nw>h?ilieGRt+k=|)b=lL%eqy@u5x}S!g&s8;y0N@sJdC@4j~|bt6VU(c zd*3%r-#<<@$Ato5;zwdqcLNR3FaD=E`C>)GPey>cZqAgtu6Pgf z5Sqnus}7z9Xl2a-TIS<|DQvUHR}w_qd(%`jzC#>c2aDAE;={Q&Uz6f?h}HlBLIZ>t zyf0oyD`s__W`AE--+^GOaSaUe#0tb643)QUcgO=UeCg5I!$wAc&7fu0Akw4ra2+9tvmKHI~t|d@)$H~Z5n5?Dv?x-aU zh40E-OF+BV611_{*u0$Bb7+>a@eblm^){<^hvoY}jlQ2oR!Ic{8+i)*6NN&OZ=DMa z8U;LwTt5pUHq7?wePU|0dpQTmJWd9i-AhC|4ttS`)r`N2fEB?T@B7+)TM3H8j?Q>7 z=7vCv`0w5U@atE?%zyYH=%@CrzQn5ACeJx&0Uz|a)!XcCvAoxy2A>c#muMFq7>Fc@ zJ;R7R!y;Ei*B%5`w6QWk#7P3%Cix;41op&c4S=g}_z^!v_E}T@Ie(&wf0Ljr`6s+B z(AO0QF$Bi2M~#N(Fs=E3!QH#@Lm-$OIp04D4BHD;#7FVTo+n0wPr<)~Hc5Cft2Fp- zqJqZw1I2*{X6?TCtw>EI(k-U9#cyM$;o*b2eSEnTuMn`~gf&CE)80*X-z@w}+5zlU zy$(B?@mGjjGz7?4V!AEq3hjumM4BPbpRXbVDxDjDegyo_Y`~EHU=O;2ePPkn7^A7NRO-K*#l>GTd^vis}D5uI*Vdd-bgTbGx z=5s8`pDTGE%jcLEoQ|ic1$`Qy@>vll(U< zl4Q~;3n~-lImk?Mu*rpE2>Wey9)PPi*ZC-V#Ah4iY7M;UZ?y#r2aIc4&C|(9t8)tz zM$94JAm^gfnp>%)cGBDG9JtAo|E{!r+N@fCY2{^s%f^(Bsi?Rj5C~jeTE1fCO?bTF zCR``?mzGbt>BhzLmkF4_rDFnqOo3ImEv2ZA1{-XDk^1$)z4@@rIqwj5$_DPo_;ZeC zqdi--y!g|N_PD`SAdQZvgv*8Y9A;sfQ+YUP58-BHfFnHklcb|fuKN+nMtc^bU;Y;E z8F5_bIF^}Y1Jox|u8=B80z>t z2~AK=j4c9A{9TMT=4ha9PyXB?wrrcsd80V z`Fi|d@D5l~h2vNffAu@%98>nIa$<~$zreSXFj!g1w4XUiH*x~=yvpVtc@bSt12|k| zO++m_tpM817E)1+O+F!wjVJ<@zC@ErF0h0y+1 z4}|cf|9~;Q#eOLyr4WwvLwsF!%4a$LPP|@$`AgcLZC&Qsn(o~2+6~T$*M!RjulMMM z;VBj@aW8pZK#On)Wm|hBxbz^^2 zI<*g1<%1s%Ot$rErEYjo;;c}n%7(MS_wdqncAPE2N?ORJ7r0vl+${&6O&hpnr@Tf5 z;Bo*L0k{mn#axb&Ng-6m?bUdQ<1F{*%8Btsz=^Y4a$JkuaM8JscZ2&|!rA-L57}^b zCi-Qv>OA;5ZfenK@q>Z0I8G9dV@aGXwS(e6$JFLU?MMxW(-kxn5-SY}2Np{;39iRf zqDbmZ)*xG(ryg5jUFpxbI=T$hV7;52#Z3M|6M_(~Uq zrA&cUTwKONBZfF0Uuh4o`0s|tb1`3YS$o}hWhWlH!8!5x|0Peo1wE1tkIT_7e@kmG z$I^Z6)s2cJ*Irl_v*l^&JK@yY`<3|%mfvWbsTOC<+3<5ra9qx|c$Hk%ZO;pxpgWE{ zh(_@U3feMB%^+A$!flI*`7rc@Cx!k$_TB|P%HrG~-wi7U8-1guHhQoG8!c%Ovxv$T zRBp>fiS?3Lt;UF46y+xD3Z(?Fn<#Hz7ip_K+AF8Er?khO(w16OvnfICd%=0|+%rnmnkDenQET##;@m9k< z@C>CKrGs-d>@DF)$T`Jo7zHT1yIxwz4P8L~_*Gyv?8YyiMA6a>j$Nz`T{x@Rwl9b? z*M@k>g#$OjsuHYWh%=6XU~8Q)4qikxV2$YvG>1=Qbt6Hy|Cxc!!9T_h;SuHrJVt9Z zJb;Pn)U0a_zk_pe$K*SlhHkEv{9bGq~c3piry2GhiGq5{|BmVF@yLO$8obk>s9zk1= zZ+87oyA^=e{Xa!P{Bd6tKdgpV&~Elu!y0w~h7=|&`ieN8wem#KhwGgs4?$1hq3*^W z+<-a2imDqhuOe`H6fZ%)!Z!R2r!VT9CfJnt9)id^a{O4UaV36Z)S-&@KvN=yfcLgN zPka$K7jf2Om?X0|x$jChp33v1ZuAMptJMiN_zw>JFt|BZztbPNC3dKvwX&HtVY444 zi4vV9Rj4t=(0^$X+r&vI0H8P#6hoqQYvL;?Nla4MHR@9frTb$A3@v+yed%rE> zQRnqXAF9M{$XK0Ms(0$Fd)txRv+W$gRKzRX^syn)gGucQSCSSs}Hy%~! z5*M*FQ;uom&gGmIi)AOg0W{J=Svq+SG1M47y5CswJ0 z>B%wVgK>fK;D@fh-32HY>v?t)tV#pbG~S4z;B;x&k0pv3f%El&^*iy%dl-MvCd`RT z*d{KMwb)e@in674yBPH)C_{!5ABdAk10Mi`34GAliNo9EH!-wW6C8MI1GueW4MqJp z<^O^zaW$>n%4tH-_02CAI3*{!C-#Aptj1rv6Uc7&za2bS(H39S6Y2sAW9(Id@jRX% z9l$*_8j4Hs?K7+47yMSc&bb5{0ErdogxK`90xIFa9(Q6qt1Z@BV+Xnc{SoO9t6(Qu z91yb#x{*+d;DT`b@l?^$4N8{;BRTHm!=Z7f;feKmTy_m#z+a$@!~rxKNHBPaIxOrz zeU&`PSx~dy`GVE>F5q2#k%S+0jfK|+deC;f4Og7lhbI_g;YS0P6aR%0RVbUCM>SD3 z65%z8rx6_suP4-cK>e5*0)pi!sLhFitd<(CQ~yuMXWztGnR3~9$sz~}$Xn%-<5c2& zO?N=n!kN5eHaL@)BwRjnoZF3ZvE+m^Q zdVFu}36*@7V@Y1JRI32T^c*96sS%!RgzJp(EF=6?Bm4~`Y~CsGNru#u2fJaHi%oxA z+c*kNy~Q@CZuVU7(d;>OZVp1}UuB~mJkOEuyLpGwNIQMel&O)rVBK7$=ZRYa(Oc@~ zNM1VqY+7*EzF%PAc;1|l{)3=2-2a{ec7*55XVb^p7)2i&^RG&OC?-DjJ%3Ig>D%e! zPQW?f+nDY``bf8kKJEsT@w^)08T0|SmOcjVIqCm5eUy90{JC=$EcUK=r}Re8&wOqj zJYN|i%B?rL0&Szq#@EO8PsW|HY7i}6@xBs-j91*mMQ-uJTl8!)Z4We!g(>LTRoq*Htb5kF!-F^;tqMP3wFmSW~;0m66wIRE~PLNl){}B93#UHwOuaRc&21OSK zw;ycrM}CE^d;{-m%1;PAMUc*5PpqS0`I7QtuhgbT2lod~g8< zZE(dO6LawGn3sFdF1>QZYjmdkvOm@o@n0@l6_E2?WP(50XjL{ilU5NfA6ms%qIIX5 zWYQ|aP0|1r9DO~DQdE2`;&Ra{zJp5nopLHa6;{3;-lihC>K)T_p!*Co!=))ZkvH-5KKkg$(Wo2oH1myq6nr~WDGKGrx0P}b zv*TOZpdJPc(jUl?7i%klrplo^MC9OHCY~m52|ioV5-kS?BIel$l-pmR+%g_@;HLB- zTyk!adepZUI`wj&6!{EnQZ98dY4if1A6Epi<4ylFz`3OZamPG~OkIG;&$!8Y0$n3F zSq;naJGdRJF-(8@BU7>UT{;nUbZRMRtv2t1!4ub%lz9L6V18ZK)=!i&_mRIuEz+|Nb_B%kSr4<_!p9I|9z-GXm#n|cXcnc;qQSHPWB1CNO z&ve3p_(;f;z~+}Gu4C*Uz}MIN5<~IZ?zCS39^K5%^gD@X{x9IgJG4bB)(HB>#EYA- z{`0|$k7{`#o2+;-8(byQ=vfdhAG}DxjqX&?#EXQ>2QM~(7h8)AbK%8#|I6?q$1)RM z1vk3Yb0l zayC8`Du;y2=gz63x7qRHNMMyp@|D1igTda61737(^j`~^MRW)-%X<>Dyw?MMtRL~> zV1XCYtnj;d5%F^h!Hx<(bc^*E&Xo`v*bW5Z+7uEvmMmzEU?+cpzOdVa2UA>Ur?~4H z{E!bC$KLO^bhhC7C^(R~(8G->_VRWhBDeg;-A>dOJspC`$iy+YV;UI~+@83cpVys( zq9nf?d0p{;n+5;(cJR-M*+gasSy=EzA*YbVCGS`CAkhaPisS4OnC_V80WVgF0evIp zJ$w__J(MS|Tdw8BzD6?PxYo!&0)+^d4XzSj^(+XN53Un87i8Y_R30X-BV0bXjzL(u*nFOrGy)uoTbqiGX6ExMuT@rK6Cxhi-FNLircGWh=xXunJpshjC5@M~IF_Ei- zP2z50A_{!d^#`^}gmJ#G;n^KY8yEFOv7Pq5ZTsRQ`vw0n@U381Vj-ZJm)w+VqSoZs z(J*eRn-XV96xLqRoj47@kM*Cb#@AQfdlh+HK@5~y6X}grXC^7y@$Or#~xPL2N`a|&PJ3bLTLN~CPJ0-s=D?I^$^LCq6)oO=dQODu( zs=9UWaTpEnRD4{ycxE(xpCq|ijTA68Z^-y4^-7fTwEO- z!;N-uOrQdrZeF>Jl-Np`cLMI-I1+yZdD9=5q;!~~$r#`p0pgHiZS-iHR~g}(jPM;sc(D-{$kAgWfhk?yad922hp3;^X5J;X z#40>HI?Mfel#?nXPi?c2Km`m#R7MW&nbWsXN8<5+r;mZ9{Vn407wCTia}<5Yv!==P zamI8feViG6jXutj&~nL_zF@qOh5dFy^HM;UZS;a7poTwaxO%30uDCC`c%D4|a< z2khQ(;LsTwx+j7R`JTd{wR%C4TDhy@4OG%!T7v5&Rv{Q7b6z}3wi zeJWs%`?&aZeQCD{wmIrRX^}?iwc!B5vp*+nMzmY^UI7Sjm1lSM^en5`M8k75G1A%^ z-pLv#`-%KvnXT15Ey1%}h~D-ltjqL3VGotvE9+;!FU-3-MWWvEz-aq;2kB~Pt^=k% zN|M*djxPuv?4kNuJ8ZpS!wx0GcEPERB(IW_a64yEjT`@*ddQ`VCg3| zs9-_A*lhuSd{kh5mzPoWcVJx6Nbrqc4ptt?eJDG=nm{T(Iyi0)WGaQXi&Qqn|g4r zNK*kdxvfku6K)lFU*rWtN>CczqH} zF!7R2$5&yTNj-)S@AprxGnF47|VW1TL&$3Buy z;3)hy<+a6N3>P6j7vDZo;t7>sHoBAzt`Z4#98S1==+a$AxhfBnE)gytx^yM>Df#G^ z-3+~-wW_g3-L>enHuVNw0-Gru$1;<=V~AE6jMj!D@ z=_CFR^syJ%MIRmXhV)$;&K9}*gPb({0(Fr(Hw|BnGU$#%!(;o0Q~pz5>|P3q^$b~f zJ?L;_kJJAtLCcG%(nXRU4_q#2IZVq!z=GB?GBN0U=fy#SQqZEC2tKSV9W;klTs`vV z(ms+q>{VJxza$}X1w52E;lmPq2h9QXlBBQ0-xe6+M;O97!pb)v%GINm94OZy87@OLn+D(XGgr z)RjvdP!THO8;C#$9piha7dU046ZizbO&YZaIQu%p=b};l2OPVB*twEGhB&F^Ms+2#)$*#PdqF@GTb0tjj zcJF-Gx;m>p0RKpbsBl1kFMQG;4jSptr|5(JTqDD?=!4!oL?86#QTiBwCiqJJlZ75L?LgaaKi-}f=g6!T=P@=E>&CaW)q}r zpTfQ`xEp(&#@}H;upyT3ow(J9NmzA+V%^IJT(mu&TagVygHFFF!+t=Cc6b%55y!PY zZ-2xdL3gwt(YrqpS)Y~O#*X!5shNrB-FCfqNH^Ku9Hw_^7D1-g)0rZIw60(4Wg= z^{f1MT`RWntCD@khH6(uCZhgNuqGmFN#BvZ$oGgWtcDPdurrKR^w+`Ndb?fYo|8y! z6{#JGfG9fo9O|ETz;hMhj5ywe;~@}-OBR{ zF9gn8kN8})eT9}6^T|frv%!%DVJdr$aQV=7+Bwvn%EP4Xgv*Dv^S1KM$RrnSKaBn7 z392wuK>MjzCoR4=Xgf%Xa2!k0_OrCoIi~Da-$eb1o@I_*NBw&+zj`xYG#xbi(N|4_c%;j3N)9;+=bqG z*3{YabhxQg=148j#qy$5-O%Za=E8AK{{$mUS zzL`FFl5YB#K%W4T=3ZF5yMpv$?~L?(sG$#8}AFP1*kGg60ey52<=-X|Cg<*hgN5ZXj{6y7Jce-Je;YKw*TMWNVt z7b!kyY#?+Xa=F-ox+(}RiM%3!7bTB(zJ!yyMI}PnAv!y4gYAqBG&U`oAQHNyP9#k3 zcsPiQz?x3R!b>$~LfGVn5R_^d;r-YxyNQ+`kFyb-?82#+?x=AP3>B$C4ab3LU5ymEP0 zokXbVFPA7Qsh|c?^~hHG)z%!l!=b1X@#h`%F)*v?17H4{KJeiN`oOo`#&GX9D{_AD zTu46^vdgu{3l7i!j?{gaA9P2-bMjoUzQ~CdJ6{YyxlGgAceM=gLPAS$M@37hc5D4f zxc&1X1as{;h{E0t*EdfA123P5R7ZxvZBUQJlL=M>XB3{)pxPFo+=r>0WrhA1>?ls| z+MIcXjxQ8$TRNTw6ovpe6vbN;XX6L9R>Wc0Y`9NlwubkxCE{s_Lc4&UJ%i4W+ZEdL z3X`SGOeVCfUQG8#e6m>ye*&~pCjz{A~ z@jP>bQEG@m(PFnIHCrjj{1)Vnu&a;C;N2Ht3KMS^&>H60K;nLu1J$!IWZ9@x;OwnGfZpH?l1nK!Wdu7$l5G zde@^RM?`N)K76dpPq%;c?p+Y05HSNUb5ZQ0;V+D5p1XxkX0TugQ0 zOxi}cd}tf*A?I_(HyHi0Ml}|`Dp!jVKlS+Dq-`9_OtkGRtwJ2*k4no-`RRNkzhy>v zr4ja##-wPWI&P~YIn&;O%w)+>JDoE&87W#QV3eMob~vakiyJ~y5i~M$rK>+hy(vT8 zNFVg`6Bszs&q?qZeu{c7h-@^w1JKRMFC$I4(Zy6Y=r>5e3lCCGraiac2b%JtI5gl^1H3h!>&ah zEaDhH|N5jHcQ%Dyz&%gSkf#U(AoKX!Goz|w_z~4Y6!f`B#zx#V7yJK2mgfB9}#IG(+ z(UGhs7jiM7+=9%h({&+IIuAbIcabmm4{y;&=M|wo#DC1*wchSxqnvoFQa!|w8*eR= zo&JyDt$6|1LYUt8Mr4ZJ33MP(Q){rRqLq5d1_;>Q&$Q8_Y@)P`VG~}pZmgI_K9jB}_=NG~zPT7MsMtqYCr@X7> z#h=-5N;WtXrw}e5oWdQQ?o`mkDTK=hr;rz2jSO?)lr?}GrWLHp)uO~tJ-#<^3YM*K z>+qL2h4^1Nj@#KP0H0yC$kQ;0b|W{_O^B&TMtt#~^wBZkZ_XF|jZ{*~g(pHvY?=pu zGf#Gy+qZ-8X04Lwu=3y(()b&3@7BA&An?RZzy`y?5?t$=g!S+Q?l0Vg)jga~^8qhl z$5})?krO|_s1$E%1HXz@Iy8@ z6F(3xAN+8Rz5tO%1x@@wxP0(~FHiii`hOXI;8^C3A9Rz}WD3*~QrZqI#ZlaVyon!v zOdt4RP92Vykmv|`<3*YGKSM9f-?sGz?8WJ_;RkgO;YKG~f(xCE2cu^ST?*a;<=DHg zz$!7KeK7XE&uW-}FV=ljooNkkVea1DCn)AsK*e7?^9n1=1=Q4d8FSaEDuQ{Xs*Y8$ za7V!Z&KDiL6x#<_2U4y*)`oWb9d+gPmpfMM+OZFhS3+IhZj0?5fV&O;Ex0QS6U(?* zU^NWI1}N48JJo!3oY^*os@BmYO1sraK?ZWRyPG?X!)*rE-?{P0!`4$f?Ao^2I|C}( ztY2;xmnDv)(b<|pe>-J>KVb!7bQSkdw>zT?p=46C-fount(b`qreiO|eye7EF@owuDf4h(rK7#^aiyOCFRd>QR z3gTKvi^Z)X?E|sD`SC`skmm7{@JhZFD6e8Pe1HOV5g)WYk=hgU$-5ja)>E5X!&^Vi zs&@{k2yYdajpw1qfaUiU2Rkb}tnY5Lo`w*0YY?`_t;Qdq4B~kQcX%hm!c`cIpSxY; zjfVP7jZI%UBT*v6mQ8kTliku&wKZ116=t-0gs4-9B%P`zGLJ|vMW&mAxEO(34!GU% zE%_GndUn~4jz-EiBfmzG#k>tnc`I&T@LmB#o6JYvSGM05@?Q#nH~MQfC0D=_;=Td# z{-xUvCEgV!ci;-fm_X#D$IFnhy|H4~j=lYA+Bl2AyoT3Wjctg(yS~j8w0;A9Ag4z1 zQ|$jR=0uZ_!eYi*_r3yPx3433OC0xB@VVWt-MQ_}=*}l0|3ZRx)Tn`H2Q-rno8FA9 zZx_Ym-b=-MEZA!N2BOjS_TRI;t>Je3_3fCxQ`qHps@l;>$e%67>}e7^aMjv49s8lSO?zj9_`IVvJ;17TXhwgx6v+z;hu4~Kl*>BNnY3yAM<}DCb`fl!sO@o-_XbRH|S#k z2BYuk&!!KV{cq_*X1|d>WcAO{N9VjQee7k2ojYgxt@-k*A!V*PkG>(~*s|+II~s6^otct3 z;`L%Yh}J?>?cJbnIp%TXTys7nZ0<)N!2ICc$J96~j$Etd#h=8bbkql7T7^rq!BqlA z$1{Y>2S>gRINhl{OdLtLd~oC@tc%rv#S%EG44m%_4*`sFs$3OTz8>EjI8sS-IF`hb zr>KJA7vtXmBkbeaOrfjkw<oNH4+hp_K4s9BG}@yUzv{heAqsY2dOY$m`{ub{9CySAs<>0GP9-B|mD zwmiCG45d{v!Q<>Y?nP7ta#%TrIb0KP@Rr&(>#1?84mZDi9Ct{~cfVJKPu4vZ_=~;h zza#B>zGD)=G5$)VFwmlkHz?L zto@RIbEvj6x-0n1lWxl3LCN&W^r5QGg~5Bhx~vGlW&JL2S#Z0*v+Dp1?OlarvDN}N(Ou6HKay!> zmn*LFWU=2X6q)0r_d#t{w4&csf#v5$q{8trdM43kHQELe911p)rox1cZo z3a@XVZ=r}h3DGAM^hKC{prEKoK%UUog*)LS1W)RVFMSIMR2V2cf$(nfA_N0{iwaKZ z3-|)}56UPac;A8|0G)vUkggE_2TnSnNEG4biF`|t8PfMf9gus`$H*GbpF3?zWQuRd zROld2pA+#7nKL&seFz@5KX*Z7%2evB8tLTyN|fwwHa#-+EC+=)b!Wr<}@9g_WEj z(1(7?W%R-83i&JIpJf;wy9>S_<2V3)L%2%%;DNscpYiv}cwYM=Pdqmo!4-goiUm&D zAIwH0gBK2SscCK+*@iOc6pb{`b85bH?bDo#*MJ#zpt!<^_n;R7?GrGv#lcqC8l?0y ze&tEArsM5DSQB4w{-94h9I%rBqtSX-chhd>Yglg}t|amW<`W-QVZTQe$Wtf9-VDTA z0%{$%ige_+Gr<1BpaLJR~~OoYHNPKPsNUS(P{Ao0Vrd($53vMbwxX$C@Ebr z`Y`?C6{A0(U%2A>o)x1%q66rG8mX*abD@wxc($#UK>54vplIU8Ih(&$+b zE)(7j8F2ULiL`Gf-X+{5d{<5-qp#!Ln}J-L5Jx;qES3%Lmf^!>d{<88r^3qD7zqmgim~Um|;{Ld-)5`W%hUxnaIpLm(GUALiyvdCX6GU!edA9 z`kwtOTAwJ!!3+FR0c#xY9Z|AgGfn9^O_LW)qI0mhkI+ zYsJ?sjK+~mYj{6@0S#WcJ5V0m6u_y}uKE|_fp6|9YUG5neiwdm#)-b78L*19YxbU( z>f3hBei8EG_?3O`#+!KnxOX{nj5Q5(ulO#3<<-~l0OuzA5ZGPqS~NE#-Zkq8pzu^A zpm+xu)>olQBQEC3(-3^%Zbck*6v0>&h2~;wv;0z@-5f1-51b_LKX&;DU*!FGkyWt^ zH<<8pN%F*1y0ab&oZ&>b!t1*taK@O>w&)w11E*7!9XkUG%vp{?uWm7XtaLw*Cfe9d z*sI8W6SferKDGr+y}w;xR`h||@@gJA3taS0*@vFlbgAOf(#CIJiEhOL2eVh(S2%9*K&ZJv|fxMR^o_L%C%4G*sbi}@5wU!q?3po0p$3MbL zG~&w!$C=0chvFX{;o|O3@t5WD`=!zsk@#~iGR{QbCK_g}pH*m&`jICf{pB5QKf3rU^f3Y6gwOqku#JU%$y^L3 z_apbx$NuBT@Cm<8`p+{S`;V98_xEJ{$rua9pGO~^6qbH9eN5DO)925ChDqN0mEp={ zNggu$SI`DJMd!`^N^C#X#y|_XO$m@BN;W^Xsi=hsk8vK}wC~I&nYeHi7B<&9|6$0o z;=-HpO?Si%bS5smS;VIPD7Z>QF@NQ5#*a)m&g9|0qY_A8QBLKj!phg<|9KpjormXG5~rP|3WiUd<1HW$r*K70$J47=RnzC! zNx25j290PWB|A&`IzPcY-;rxDlv%DmTwQU=V+{&!7vK2T1K8v^E9oS5fYyiH{!eYM8SwU`agT#JOuXD$B7C|AvWb1f1spS8Fo&$U>D ze$i>OD%Yq^8h+``waBsLTKtSw0dFmGAsw+67u*@0GJpD!i_wdB<$;A*i*x5qog1AK zQH#;r_hws*AK?r;pS8%_UROcD2BBT!_NA6ko*Hcu#$%i=o@0(1!sc2W{{OGVjJ!YB z;$W@+{=Zs_U`d7JSaL0z_pee5DYY2o(o&qYT53M3qLL0m=5*1yn!0nYwHK@$nz#MD zQL>}5(?N>N2jT8x8FIG}i^uqS=AK2lY_yekpUMD)Va9C9&gX8xH{E5Ut=ZsA+Df>5XzM|} zQ2bWw%A~D?%ZIkMfwndQHW#0}3jHz}aLTE2Rap6Yd~eWJ${gr8mR!%JBIN$zn3Coy z$8fIu@L2!i+Jd(F8CHjS>AG^JEiWAFDL^XA1yLUH!&UUrp;PFi!cqFzBcrIaN5696 zjbTIcfAeb<@~6v&H`E;o*xf9F`6=KD_pRz+b49aV)nqlihdl-FPkc3?4658!80+!j z#REIK(^~mSY=Rt^bE$z%k$^K_JaaAXSy>I=XUZE2WA*J&`ERotKERZMZZvB{?Q>j_ zup0g-a&Lm-GK8c2Qt=!#_8S%h6vAdgT;u*65#3}}ZB`p>rv`>fn*7`2MQ4QYzF1p4 za599~Lem{jKp;;|wdFiM01;jbl^dq2S_?gP)T()Jfq$D_vyMigaV-GmWhUb#oT@fg z(Pk}BWC?`6rNDN@_~P1emU=3(VnIylQ2i$B{x`4$Xk+DsgUz^Xa5+M3vbB<=j!%Gv zH)(n=`W<(+>AtHK)H+;GK)>+a0_cYC5&C+tCR(zMTH?60flF$XeG6eSwCkDpiWjM? z{uFZ%&nn<*iBr3t_#V)_hwtguKn9K*DW^hde~ZBMPW`4G9TNwRd-5>ziBm4keyPEg zj`h^*hVo#hYZ7AW@s)<)GWjuU~9#NY<6_5Q(rh@fOS9Lh2{albpdpoP*vh2zcHd9lCY90Xmp)7rpu0p1>DH}l;L zbi5cID#8B-FMhz5&I3(7;Y}5r6GM=1Yy{@V`_#e@H>IX)5mu0qzg_z%td@uBo1EyQ zIJdS|-p|%yiH$*@SSz|AH*=~U6*J_JP;8QS6B2Ln?4f>>xB#@1*IjUaEyhvRQv#y@ z8io_L7X8Q3b`6|U4JxIQ)^HjiFv3=RJbuJWek)dP;8UY`$KcfXP5$UP7(<+_N1OcH z{2N0rS`BA1&(Q%6`6%3>#-L-?y=uRhcoxkMa+$~Kw*X&k!7#>NJ|5Rzo>_k?)c$sK zW9h{@`ZVu7&i}r1y7kMJ&_?SX%K9+VQA1v=z~zY>%ZuZIAEH4pcjrDD!YPi^Ce`s` zGXJOO;Z3O?9)X!+^srOEQ;Z$P4UKl!6xM0UZz?*|_15(Dit$WbWoAwTEN14oRYY|& zWUfwshy+TWtmsa&aRIE8Xu(AW8hEN-i`KbHflMkVE)n2Blo+brWUVY^(e)kiqVJ1= zC<(>K^fYd_1D4guTN)_B|6Z`CqCI|HPv|A9A;Gw-0uum*Ygtr@*dBQ;u>-LU$aSM= zM~PFjmg|H?6Jx+AFK%ZIa1qHY+*I-N9!(+b|zk7+iRPkzLRwW_8eRgd>iWcX1`dj;!5-0WpMaVqe(@f@Qh9Ntdmxxt2Jl#TX8_ARaV9>> zX%rn2t8elPoNG1Q&uY7-y~Y%}w+|C{uzo;ewM~g2e}APsrQqPZYC)!p5?}5{ZH-2>BrZUCKvkFcu^JQ8$nPHk z62!VaGWKas9^7N=uAqvfR?8U~YDuEIlQYbzeN^D1YCIvl9hEH+Q;vP8&~$wh%}1Zk zWe?mp`N_i={l*gzj8{L|Z6CVaYB-6*=F)~pCorN*5U!@?jr|UKom2aD_&|?b;+)s) z6(Tl;`sAcuENApsr^IsVA6089TH%D5)c>McM=|NdwEiJy1KNr5s@IEY&BMKT^?J9d zpJ6jpQxl)$l!E#!toF=D<3d$CBSS~jH?5K-KZTS&lHZ*b@1r$#&G+Pb@~H2K+V7!c z+&Qax6m!j){55v2c-yI>CGk7V57Wl<_c8RGmEYyu0Zm2T?g+9=)9A!3OdXKKxO@+! zq)>L|>G3*$bOJh)O$41qm)bRtBukF$%;>;S?IY3GgpnU}x`iK2yu~WKlnAgK)F?o5 zlx{0K@gQn@tnWj&s!a^WGTT0M9nQi!@jcf*v`F&(oELOpAcXro{xU5{qHx*ZD)Cj{ zvk@+zedu_jT$P8p4<%ea`_M9+87@aAx%Q!}ai(~xD$J<6+fw(h27*3$8~QLQ*C(yT z>?74nE=(V<7gZQL4b4$!ihWDRvE)9q#0`qS9MeHY*xi@8k^DZ^_m>}s?&enCMN5O!IHsOC=dS7VBXu() zQ*TSj)RYx$@4Nbho%F1^8D4NQE~?GX{^%3-*|X-V?DBe#0}8n_r%kWBqMV1xNO{1o>0`e9jXu`J=RonO%lk5Y%>Tpm z0e=;yBhSvCp^x}?=mV|;4B7Mp?>K06&YMx01 zA^psF?`HS~u#QKUTc`L@^Z}i_j*heuqvRVmQof;t8}{blpDH$64I|L8PPhaduv2V@ zcOKjb(Zgp&Tru?ZV%^ZwYqwTbF{Z||#*IuC2e^6gtm1JqqVf9iK;P8f<7JE~WenVa z0S0?T!BGMx9%!WCSZU#%C$#X2S3@vS!|h5b$uO?FyPF^I?rorz z#rO`%2KI*HVMmX5KWMG2VcFp=&gA0-BQ;)BWfN>Lyk3|rmi%ejM!Tl%V1Yk+5m;0{ zrPUykds}MoP)Ba5X(vN%sngi8uRPJv6u~`pcCKKc)oP7c4+>#EI1m zkVTgIjH?p2yX9X854`*P&!~^XJN==@Izt5Io zi3)s!)DOhdW#fIa!Brv+=C$Vtmk;lAi&3u111K?#lOS9^yw6DBZB`@~?=uqp@@ucQ z>2=ql)7sPH$3LJ$?HBEdtfjQscY{kz5#l2Xai~ex1|3reN2FA%meZW|4JV` z!W8r|X+QOm2yfE|&FAAr6=%Ve;#JS-FurPd&MAsl#Z2%H?E*n-$7ZG zLbgJ_8!bzF{KD8E+8dLfG(FR%)6 zG6LK4=ecMbHk9fMZJc&YkTM*P09L_pODrT%@*djXso5k&$+Ceo+4EF&!C{y`v1_(k zjeL|ukZyVCVz&nW>|9n@(Hi>DuG(VVcO?cJ5|M@$_>wUQHc2i1Z{y9$cAOK$1Apfj zXhIm8vi3T1GCK0*PP=NIFeYy`oXghW0pup{6|>Ka^O5!OA|c0N*bO`+fSq-cbetwDo@V_3)WdqJsyO!c0KEGN>q3p6L&edSLsml>aGq1Ym7@O9 zXm#W6rDsw~J^7)-@#=@VaSh-T$s(N>IT$Xc$UjZOv*Ju<;=Tla4k`x9iJIV*Y{3^n zD50rfx+4FEDH<_dmAD2WUARy7?%On#1BrHckJS)lrdsFRh|YtwALlQ^t~|tSZ0~#f zJ_BI``G$WLjauuB8zA@wn(vBN|EAmSN}f#GF56=@{tG^QkeRyqncHypgwD$yRpl9lXJ!gq<}}ekn5s%(%hcjX!Icg&2PMj_ z!?5J+CnnJPJ24ZZftljevzOSJ=vmz1=lC5E9ZP|yY>DdJ#6t9f-9>|F7qCqfmGbZ= ze&fl9?YHAN8cVx3Gs#*(d4=<-*joXoPb?V-ZHy$Xdy|L*NBRTgK=J2p(K{tER*1~k+tEkk{ZIBchw2{{qWuYmX#X|) z5KfswRqG??f%E=+e58U!O`Cj>QvMCeCkD{1<`85?je$8ocBauf%k4pQ4~4iY*@11nvNVw;w_{r5G$|JUdLOp~F=)+ObN<+7Wf_>Z6e{O73j-fgePORf%Wi>!I#zqW4O%9!TY z3*sf;MAU=!mM6}h^v&|Fz4n%hwr%_T8~G{l7xqd;Td3J;m`5gL%M(9#hCIP^eQ=jJ z9vH(fd@loEzPNwW6>g4!tK)&M@ykf}%iEouo%}+D?~Z_9WH-?L^z0pjeyNv$**-Jov|o$F@xay19ev!&{LTH=@7asv@|&!wEVu>V`Nm_K^`lt#0Ptd^cU|-p zw;;lVQn1I~x9@lWgVp(z-P!fuR2vY2y)XIg&GxJf<@WQjKNN&u9c|%XoQCoSW(fhU z*SQ-LUqwRlZe2vu*1D1Gl4Vmdg+!6eQSl_3zqn|IGkF89OruF} z!_d)N4i(khE78L8lZ52?|3fSS&GN0MF+i{{B0JnmW}GXxWa3Q4B>&ZZGuT7(s6HX- z^eNeL{>I-A!$5}IH-@=b#{V%v- zj_cP}lwEvrS!D_>O#L{en8sydJs9kzyTz9P4=YC+OZPAMM;<}BD}irsMgZtsP;H_$ zL>(dHT(0GX&sq7VY;cuG!{Hsu#BhYW!Tl-zvRr<@RQd{TH{cX+K|sRrA7yv+m3tL% znfS0T0YHZT;%EmLlR2SZ8f>eAvm-5e6MsOL||A!(gJ zD=Hlk$ILmmOj#g#xD1w%z-l}G6x&QKu#W;aQDFLHV z4kTX+R--I3%x>qyIPDdn*T;d*6pHhH{NU4czQnZ7ia(d2L3;nGa*-s>>GA&v{?s!& z5L95`{3Z0BRjGBQvMW0-92&MZ_y? zBp+T^&-wD3c%OZCq;AgK1=EoTj%$hbi_WEw&gQss4|k0WUoXGcF&=mdcgu#K>(*r` zu}Us{5>i{IJaj0^{-e*gT#?jM+{gth>|v1Bv#z&LSm6( zB%@hlfk|9(CgGH@HTg$0@EFGgx?Cz z#3O{u2amj9sT=vW1C9sEjQfM@^7rd6YNiJK_xGNybKFo zf~^3LKYQL6%H~2ZaK@~;3(IECDVsfSaarUm^QHqgetc-+e|k6Q+Opu;&m$b`q8!WSKeZoJ z@o(YB7gPW~Vdy5}pZd)(ZBOe?1x@@yIIa!l6dZk>PZ^1Zw;>MGLi7jQ%RXd3sXoC^ zUlBfx;}7Xnek!bdJ^r7^FQo1%$92n(AUFcxLv{s-PAP98T_YWxXw)mNdb@#ID%y1F*tToJH8 zO^k);wjjizp%$R4@nWq2T>)8roJi)MHjGVSC+Dq>Q^+qW$9Y0$;*>>LAjBd3$MkG} zCY-Vw@wyZJga{L-tk!|>TfuP->+6benQ(=I?WxPow#G(ZJMU&j^XMOGn> zxZ!AfnsMkCh5wkX%8$Qwr^o;ExI&GdTLSM8V2KIGu_SKjFT?c2n0gD)T%a_eHZ%T8DPhAEe*5oal1y7rp8_isQS;_Rdyo?t5; zEf*&w>&p2&l%2YRx{_gMd;nL02L^YC-i+`?6z?6AyEic(+qLXzA57WuPi4?>5g_6X z<&VI_nSk7y#P2I#%arm?SRCw+_h~YIR}s!~gfL!JzgR%>}NPlZQKe47o<#J7aY2j8wV%Ee3+&cwHb%Lm`yhKd&>lU(?g_Ch(Q zl~d)au=4fz-oUryA?Y}lnPf=kxSz#ej&aZkyRud{lHVs9-@jypry1cpjc|hzR!CdJ z_C(@pYpF}rg(VX8fl?>++k3QYab2251O)Q4rcar#z!prMGRG6Ei}wib)ZUag6`oPg z!T87hY!!VB_-q-zhdw&?LFxaS^nXPkaLv-+D&zOi2an191izn#K_{;nq7S+Jb<$rZ z<9|*ca6F@=ynZWv$ldqR2Yi?GPsEr~em{TiT+b$28qW$1gN*y^VTx(ZP4}pWL6?>8 z+5ZhaXjpU*s?fz$fR1)M*9E}5t{94XQpI-x{oRp>-5%WTDj&aCu{l1zr>hHEu2Ow? z6wa_83_riT{&`$X>WIvSK4~ai6qycPy%ELM{qLg+h{AKI)G3BC^VPU4)Q(4JqY>U1 z!a1+|xDb^fC0b4_Lz-2%1TVfo3-<(;Hbx*GyE9Fn8mfY+TTOpNGEZewzRMbhj%*PN zN3k_~BKOhU!yZB0Md8$4;9Vt8JP26>uOD}^Ig!(lJ&NvXN1sdzcZ6z+U_K%;Uh2u- zNtFUsWnNV8YDIVXtj3KHRj51qTC>pX#9V->J5J1-C-KmD-9t4#l~?kIE*%G<)HMGR zK_vYcg$=#351?IL<%pB$%zeN^z`vsqpNlTNtL4Rf#Pon~(xq&0m4MZ=AY49lX^31` zER#;#lf;0Uj0QHY9nA`WQdsQZ9!!2LkvR{P2 zQa5)-9bR#p5}BEzUvje|ljnV>26}0zFKN#y=pWL8N%TQ;rqBm1nN1%wP!62;zFyT5dgejBaB+PI&3tX zEl{#|VZm+@ga9UmBq2EH5`tn70@xB`7BGnvMtP6AzhUZ0l7}u*0Yx5OM*w@HgW(bw zTlx(Hj{!b)PZN7KsO2xwh`_z+Z;n$UcSK|NBtB0X#2uBq7(p8IKC@pZ*h5k6cARRF z%#g+i%95x?Dw09&6!FcAr~aHvd$@n}vfPu{#I_jpXjO)|ng0i9)Hn?}6Ccr;G-@#R zPLv1dqEQW6Ud%_V4)`XG$_7^nSj=C~5iTDZ^|Vp0%EP2lgwye{f}^iz@enHBiMU)e zY6WQbBVKLO>#jwowW&8~6ws`29Lr2{>u1L#xI zt77{2PSXUWTQplB=$CuOc#9%nIq6q$I4myE<=)d!|A{Uu{el=Twtq0>Iuqk}3}}Ai zINXo4oN?u&?ArpdO@rO{a}XRc$hu!VOj?akyVe71^>pouy*yyYK9C0c_1Nn;R{Z7R zMFZmFe%UQAJN=&JUe@X(Y;0d3_I?lS23D7kd%6tq&Y0qObvdoj1{lX(4bW%Ll>wAJ zD7YOqes^D&+%^HNM!sGqL3;M-I1^n?*f%#n|wBt|` zb9+2f2~@7tO6WQmAL9?TSYNY{sG`McI3B*e%Wg-bL=ijoHt#zwSaL5jL~Wm7o~UkN zTD6bJu-&@%dXb^XL*|E!kXuJVVgk#Um7-Y*-u*k~WoI$WbLF_!=}i3p0PrDke=hvL zNz04*WW)d2;3|*FXj*rK^ z$>@op*2qwxN{9P|1I(6XuGqDs<1;8I`iz@TVS;iL{C4`{Qbbqs*FCtqklcoL_ljag z1dpWphPZD4-?CuA|A0 zOx5YCxev$ZBY5+Cb(+^OvF6ljG-Wf{;7s0}aG6%4sYkR|E0aI7twzG-!<+MN#A?9i z;>~ZwY8(PMvG3P)d?BkkDQRmbn z7K%d`at|dFao>9;zkWILp~W#?Mg!C?Mptcnp*l-$%UitQhXwLA=q za3a=nB^Km3tn=YmkfX422jk)ReZ^;YE<KaWjj#* zS1frUm>m)J*)7)n_n~dU?J!qV9XsTQAl_=AeAuS(ANa9D1y;kqi64C;{o~hsU~iG~ z;8sLZjvTlw`fhyk!|#I4D7Rm*M;GEp8SJsc>u>v6gF5R}X)mEyHSc@y%`Bsa0m;s%&s3 zt|DAMxau*ZTop7q2g2optN1R@S~MgVt{Q~~Uad7)m8(UGpL%?6;40RWj$=t&rSD%j zrn;(Xm&Zx}AlM=zLxV#e4F%%<|M`(vTWW_2Nd?w7R)?%o3-QbLSw- zD*PjU>!gngUVyq$Zp)%(DCR|%Ph{a=@Xpt8fWhUKyRMQQogL2&2GS@4S{MeTQ4Z8l z3H;U{xNeYhQz3+zD~YlAB1#;-Grq`vq3Z=_F8P*Hp+{*=+F^ew@UXoNFZ^r^J-h4@ zV209)UGcyQ2ptK;{SalIgHy&3fQb5|#4?mt4n#Bv0$%lQSjDrEQu}qgeU-v{#4$cR z{4o)DZ`SvH$zQfk5Njy;gw9Qg9m=teceb*r(up~U-zMI97weGUa^amKeSrZ!8{WwV zSBW%w7KGE+i27#oNHhwpI~6qX4&m~_JKV9XMuxfYP7~mUY6YuuwJ7mZkMB*q!?DbS zcRr(4NQ|+&_|x#rj0{>4sly_i_aG1Akrw*s81P9!!6)6BAD=W_JrkG*{@5q$n;m}? zVTG5(uN1b^@H0&(E9O32eT?%1XPIM$u(>V=WBzeX=31B2w7mE;+q%pKXRb@a<+Cnz z{UesE)`7V$375~hq>kb$z~)+))LSWMfzqjRRap6Yd~dExj%B8GDTwf$>Gb|ib)w*E zxQaWRTz6P+L&bVqFjFkJT>FxXlnLBC)?26S5VhXS^Mq?4R}@DA_7)mmz?~!KnnD<- zEP&l^7#_7ZcD;a8%8488v4I5GQv&D#!_ zlR&K%^FFe&$2{4ohcFHgF0`@Av7Yj!#j&1CtowhD5F$I^iLI*xb+w(`+{QO>`uMEJ z`i{3AYd<*ddVg8;oss9Zh6RUaHBjP>*Ag0g*0UR|aI5uL$*G~XrFY^rrAuOmDu2)D z=rHTCPmhlsT4XiwFf(@OI=n+Ee%ul{A$DlY?>W>_3qazY(fDM*g|Ccsxg~Z&1!5#b z1VQznm}eI{+(|26Baj)Q#A$%gk6?P#5z#)^3h?+IWhh!|v*A&}Q5W;1-@3OHU``m; znFqKpMvN=x4_d3{(~edH73c9x1hlSCfnjKvuVwvqjd!YKf1H9B_N>SHe&?VfXbXiR zngTaECGjd#P*x(d6z`iMFSs$igJUzwX5~flsS6^*{`mvYOmbSNQxix^xgu}-JK!@9F z)K7ggaX8_wRhesf5MIxs6P4jTC9Zz<2kXW@WIri-g`Yw&{$ugO{iDj&qQp-&!?UXcr4?`d}0AYD@3nxsQjJ)OjY(J-UJThvD$nCUKhX)Cw|r$!u^YFG;ve zc*x`>zo{3B->egziH8WMuQ3HjAJfKjqYzk*P%d7w32=J9sQkQ)iX)#+4B|I=Utw(FD46YmJ%6&M)MXtX`unm3s}`^I zk2u}B|G!ukE;DrPX0uxZyxQ)=V;hORC^__&6@LLf0ZU~#y~FIg{%YSINUUH2SwGoI78)->D|d8M6hLkF zcBt)M4Yges%!JOkHHYO*!lsISxGRzvi%c-g9_I%xurP5IBYB!HucwR1PovengCjHY zg1vIjZ;-Zp6`nNtzhPLy{6_r3{v@8v#Q)u<hZbpsfj-oRdVyo zbWTtHla6Cae5&JkF{Toc>i89iRY|+lL6)yC(o^2W=Vqkb>wO;w&%c|1uL{Cm+y zkTdUetDIG{4(l^O6}nLY*xL!VRkXDrL9fV_KOTOBe4}z=Ob{4|f1Dd?#H$s6^wr3l z{75!9lOG{mruAd;BP)$^)qFMA58?9RM@C})EC*~ZeuVlkC0g04TrEoc)Z=rnA7rYz zeE1R8la6EL@*|w{snvpzFJ)BNICIIe7D5;0uTwrxHgK4z#gT82#`aUQl=d^rK!b|G zS&$zo{XLVxBvs=x(NpYh#HN|bOv#I{Ewr1V)M-66?rVo*odYVGakaCtJ$iaP@Li{W zBlakGbn5gT2$#2a9k5%I>sCRMbCoN{*|ntnB!EdNj`h27?pIr2iIwQIa->3$1aGf5Xdp)b(bkiOw z=YViZbCi2vn=Ks2lIyw54T`^FOtribTz~J7;6{JJ2^}2x2NO!MPH@?lBYTtEWr=cQ3&E9mA2c}80GYW5%_>|w6MP4FAI zhe@@YRZy)=Tq?f(76to+)O_Kk+C^?xT#nwv-E{VYYk*6Mhq*OUZAcU#AUcMP)C9{( zoIvyn5A*TiM?rMhL2zO%!8h^aBjAfE3(18a)0l3+XTy)#;7t5TxP0*A7t&b-567DL zk#PCoN4}rliTdZlj{)?HelD-$K_vH_9^V`Ik>f(gu_S)fc`%M?x%le-VR*O^o?wKl zjqq$EOuVTa^YaPZnZmrlq*64?H*M=?MCZtFt_;?*IV#nMnOeJ`t-Ys}U9_9oc8CG* zN_8}fVRY)Z7={dZHT@!=PuQ4(?DuhoL6l_0 zCDqX6S&&*~JR7}G33+qVji$WlhHgMg5)G#=5IY3ALFU4#Dx&13jX#$a#uo?@@*!_6 z)OR>v09Ch2vO~=A5AlhR-qmoDnw98mo-&HyYuYM)+$+_+caLA>%YM{mez@;$3=0m^?XOHoA0C{`;9SxxljSXQUmFSul1{ zT@E9M0SE7KUmL~G7w&g>9jwDuzsT5YX1di z52NA}{3HC!>YZ`OYBmM@qs|8;O-jvz3i|Ej*~_dI`_OSPjCCts@9Q5K9Qv?+5YqOS z*gm*BUVWU;-;7h4PJ6TC9~)~9*agr?4;_fU4f`KO!|icT`S3YN}kpU9u*4DR*dBC5r6yMrx?z}6%XQNV<{td%?~78NNGRFhk{z{#U<7BcRW zzG$U?oBd(D`jb9M(4@{%=z!Jm?@Tv3z>1E-2?nZ)`}wchFAC~{j2rF|?G<#wYV1Kk zH2i!}^Mm#0qIO!-i(nq*IG@{gaqlO+{V+ATlGDr?_Y{v!8hNE5Uj0d#1o_m6M{Ks}i?z zK-6G>SKxr?gYhzI$-y{C%`jVx1&tiP~ z`_@+Dw*WT+&tOIOCYtecJ-W-6cpMKaqQ#Hlw=eNLbHWg?l|uK)oFF|oh>M`N4@N(a z`V2zC>f^LCFwxPNzWy6Ab%kzfG@y|y8DBD-}$$1GJ zq=LEzAboretH`MhXtXar-cL2jZnTH!qVXVU+$6CZiJk*=R0idp9w>(6+1L;i!Vz?s2*i;o?B@&0+G2NBY_XfAJg;B^ z=#||Eh%@x(=-aD+;&8=vZR$*ZGwcYnQ*bgr7${i~S0!|#;YL=mqTBXMvM36E0bl zj(DY45&DzW@Cf0?xosXLTHF+QO%z;-7SpB~M5vis9Kk)>^!7p&DzURG~q~n1s50VXy1FBHHGcLUt`PpQF98e5^?%`T#j(2HD>A*kSo-k%EMe^gv*C!J%DMx8nC%&7WwCq zTEVJZElT{<<8!Yub4{t4nJ0!Zvwsuo@>R_3@rWpEo&eZ{2n}f}n9gxWdTVU9( zrrm0AFaSL7gkEq8H&noFbD9fQiqrfN&>Kt{3+-0E{?0 zyfyI!fHEUZjRCg`lgrWE-r;9HKD>OoMry^HMUzatya(j=O2p^F%QtFyv1=4YG4XOX zxJsnKjP@Mi^1;jBHp*3bn0T3R`QYVwsCWlzkqa;LT*>xon_hPwU$?Lp;u9=X@*n4U#ljD#m{q#tw zDfs?~>X1%cfk7vopdKm1e4&qF?*A#@qAhBk4{f7goSlMCr1H^kG|>IpAUryy3Bq0g=mrw~BCqMW9L^%8V=*c#$OFhb{?d zfvNZQ#y6~q?aYEtf@CsP1i4LyY?3X=IE6nK0Z}p&`Laq9XE?pG-~0IR;|?)m?jJGt z@zcbQ<-ix*zvse_C35^#mf7%QHn>V8)UzO5KKPMqLw71@;zz2XZiugWoeu?oOvI1MQnNKbp& z5AS3wxNYW)Oz%6Tu-t9Pj`-=9^wEJl1|)uxc*onF=GvPEEAxLxX}Rp+qv4%u;2PqY zS<)67@DC*3z&^0#fGP^CvM2ys4`;Q8#k>tZLo^{wH>cY)y9=Ua_oVv6ip?XUzGas~ zG&J0)EtG1ml-gnywm~{E*YMlKFVwBf2fy%)M|auqOEx&J1AQ$LE+71Ip`J*~!^AIy z%Ll&{=ZRmM0C%<4V51t|7d^f=@C(=m;W(DWFQ1lSdK^>pJa4S=U0eJncEJr`sYwIo z37R=|@?lYPyDWfGSjN@UC!XONA)cZBQwq-rvowNh$%$t!yeRK;zTp@Tx@>qRwU7RP z?0pG*Q^neT3IPfP5+p#;3PsBjS!~#2!IY)!RjyJ+rB+tq%1$DPY}!^hHwLPr;)b|h z7rdg^1(mDapr9yaQOlwhS7Omy6j`*&|9R$|Nl#7_67P5MyL|sUzh66<_q=Cj&dj{a zyz|Zs&Zfa#W<%9^^!AW>beT1`0v(2FacY8f)jsiayU)AbIHleS7fkUGljyCyy0d^O zPOvTT+musk`254~W$_;P{i8%~1h^vJg>zvsTQ5RQg*!gG4X3`iIN`36z;Eyas!alK zSi_p6n5kmM4`oU)EaAXOW1VoF7pw`@U}~ptQGPYJ7VqW6^ctt$Cet_5v!>cVX3dGb zW1e#=o6G&V(obZh_b3=?=Jw;|Ju=G>TZbX5cx4#YJ)xQHf_EmBGt5=5HPhiFfV$O8 z!XH6Ob=9{n{|rBa)8s|TopZjaqTW`{H4~tt!@im%CDC@0qbG`1^f|GOIWL!BG z=&GBq!yh#ut_eaZ`gwS1;M_2?^HOo$4_oFe*FWdz6t76~p)dR#M&nbX>7TFY@?z6O zk`IyaQt%FlEEtFvi+uRrP_E3wC?ALyi+tFMidUc(U~8woHyT!L z#%UVBFFe&&`2{zR{=&OJm#g`u2=!TbZ`x2K&m2tvk9F=6%u=|D;Iv`QunJ>yp*NKp zwpJ+0$8p4KYJ5qGae{g|^y*_Y_M%8SmGB}=DU(p&oE>q>0y70?eC0bej9Pk}@Hq6d zp07605q%`SdP9tQ_b^>v=(C7?H4>hYuM#g7zIwZ%T$wcTRpJe2#k3&t7=xsOf&OV5 zkOFC*makgSE@Ogkg~|jSI7C*Q3BC&VZ4ua)!{X=k$6^(-W^=OT8Q+)NH9@IJqL+j+3 zirY0^e4$w6O5@TNR<*FSMK${;WFywKp2H8JW{c%28@APA{Yu@!D%Om^<1D&$BWTlY ze4`$PD*fmQT+?Q)v`G~m&6=GnTufF6;zN5V_NJ0Oo>AYLrI{W(LqG7lqfCtfVP zJvT<3c@o;i7p!e)-F4uQZ#oma9V}A>_9c0{(Lb)Et}^UnmG`MYruA*Y^jP(g_|NoQ zLt2#uMwR)@Xw14(6%Cu5#HJ|I7SxS0#EDL)4B`DJjOp&mSnOp&1AW9a^yP0ELr?yh zG4x~`+KlOBEf)In+~2XL_TNV11(TF^$RE5rS%#>Nc$GWBM%*tswR z#jAqoN96-YF&4U9KQ0+pb5ozcpD<7iyU=_Im0xQf2PhQSl{9MkMqN^k)4%inir@Y* zmz+?3tT`L4E(|NKER*u-;ufetjp4XKYL;nfmhvgK0QK~oE9yrR25iz41F*bEHwD%l z(gf}v*uyidT*(T*HgBCiC+-na6pkn-*gNtG)<2B!R9(4o)M`W`K>>Qjh~ ze3pAOlK_v#XUFOC0(wL~8woE3@9482UMzg}KK)C&JdAvnczT{9UtAx`uSx{{c7g^cTs1+o z;=Cz%X)c6MGdA?KDIJ1tL!<1%+Lv7^!wS8)s!*FdE5(Jsv~`v{%AvKYtOV}QH52n9 zPaEHm_?-9RlZ&7^zz z4ftv5hlGBfBlF`kebB?B)49GTEKgq|)0pt-0{2qLxflD0bS??6hKL0rn!MApXV01+ zG{XmNS`q0{9!(vCtUjUDNz$WnKLz%Tf*w0TVaI|j499ES73PO12>usO~8li{V?=((pO0jk4{^%HPswqIhRq&Q1)dw z8LA_yAh`wUOzPG%HM&C{4*XF@PWSXm=?X-7go*U)h(wFdp0UsI2Wy`hi54@(`6Y?a zXZwQcQXtcM`ffF2{m6Gye9oyjP^I0vaxW?h?K&m(66>m_=rncDHI!&amFpw!x#nHK zKC#`}ZrE=90XoGX3*~-mqRRc&n9bX<-+G7GZ*5n8b{^AqAUobwcKYp|;^cjszB)sK z`>j7v_gmY2qc+lvpn7ebU`1i~1>X>RA4JZ3#cpF^Z&vqH+r@tBkFlTnZCt&B+UK28 zYw2ZE*s;Cq81o@t>Y>Ywu;ZWMkQTH{0{4PkfY0NG>?#;Y>~UqTEo_Y!kRRI4x^h38 z1t-E_tAx52Tiifw&HEg1*T>e}xA2mVQx_`Tk9V9jL(oQ zj)sX-w`J2dEsA^%RbKK^u%Wc`S+xDx$Q=8#*|ENs6>0FkiIXRL zU>}a~5FZ=ps@boN7+a75zw9jM>x8uuSdc&@^#|H z!qnDk*^ak7QVg*6_16l(_XE&1%Y^UQH!O<4k9=Z&&lr$WTjyLG?;?GEQ90@N4@94)o z@nWIlZ&{cw$UKa6OuSg=xCG-kAGp!xez2<%JJaiW%H zWaGaeE!I%7MxC{2c{0#R!`dq|jAzS5)XjRuuA7yieHkLsu=17A&PMsXHr!qAyGkti zmpVUolv;Dk(3&tw`t96>V8ZdyncK0gHLlD*y4sgkjVl0$<)xQcR~KTb-QmjIGY_7u zdwdDFPN#X`QoJg3AtbGNJOwtV!0al@pZ~q}AL%8^&xN1Y<2n09(7iItz30IFzjTlo z!*VS>)hnHJt+{kG$4Wa@LkFvr74N$)UdbxM(zh>TdujTC(LjjXifX}opfru>@(4Iz z7WTK6`v%#3S!Fc4(%+OzJ%S%$;axj%G_F`VseGzrZN<@Q{&97xm1CN2GJJt8^t`p3 zuRoP>!21k~&e{XDMBMR=ENd*er@-VgD|~fe5QeM5)|_wSbt_JnF!Tdo%uYhs5p7M(-dfviPM9ULar&Je! ztUZD4(0%k;6E+zOn2KO<2`CokqO+a9Hq^#CyI;^EVxyi^27Mp}@M!#XlrAsk7m2?{ z!ebd2s=+|KSorH5hH_;dM*d2?SorG=sCWfx5skm5p@dH`SlEyU(e)}Sst4fZaF?=0n4z@BC^k{A*bMe)yvS~ zlnE;sqtnEGR49*PKWbz6jS&tZ6o>ZVTK7wti3A~<>=?&A z6{WctH6X49@W`oXW(i*$;6=h~alt9#SUkMHAmXwhn78AC8|-9(oJ-#W1A=;ggXW9o2YCnO zh9~*FoUb7_%6vA}l2YHAHy<6r$@xvJ)1TDy-PDIeaJt)Ea1rGg))+=XjQZ?8VO3el zQ|u~T-ZD>b7*)FC@@ILX+kPee8GQW-$5vm)GfMiVxFcHo*H{&@HhC$zT#M0Z@zznL zX>8Bs91V;2SXZ{d4?OiJ3dI9Q*U^m`w>Xz8=^H8K*!}yI%va=uUpYB^K`&qCM*p}r z=xkrcD`+?LU1gJeeel&Cg0AmDZ$P#G)%NsdmHX<_c2d{dE9YmJRHm@>jB>2$5~`i* z=c!xSYJlrqYc9QSF~of4m3(Sm=?UcRT9U*}2H%4LbPs1XO)ITDA3bFJV6!5~1Fu|# z2DM|5OHBtYh>b-M*TSCj4Som%iE@l>ZN5h_-$$#+4?+{5&T#@`pzw=2j^TBj;!*aUttXjAM%_<48M%>z}MBG+DDiy5`Y4-D>d_kMbp5*YbX_8cKoyB`*7w_ zMIAA6=?%J^WELE}qcC`RY{*uOd7pQyuX%6?^Eil{#T8-d$?{-f&AS`hR8Wr-;x!>olh%0h@pcLX3@LHy^P%^twU(;}8 zwi4e;GMf~Z%znjF5ZTbMMCJsMb&X79C2>deR=cbc(pQBGml6p2B6-bZ_KPd5D_6{O^g8v;^O zxhhG^C8(+bM9~gJL4xp&y9eu)nC{yoMKl;eHpd!P;glQD#GlM?Fvh7hvaG<}NT^o8 zhkn7h$g1G5uLv3T>%$EDieU>na-&_wdjGg{t5GliRb&XpDtar(_yc3XNCoxnlGL|N zQlEkLUgF>s1H_u!kjNNk`PP-c(FDoi3sU2NGT$X^zL^!??*pIXStu0=`T%h(Kn8rG z-=?-DFg^IiP4Qg)_NiJPdd&2#fw(Z>ErGiMJ?m{G_izDJ3z2kq3-qAbz=@{A@6qMO zEF@D;hSoDllB=wo!O|v6E7AW{t)!Q0%V5hwClsqKu;Vm3q{O<87}DI zXF`XU&Cb504u6iW6718qhO~a&jn9V~o(m;6sGdXPm72Nk@R*vt&8p5FdK`@IGJ((s zLA^T{Wm50%hQ?vc`4!{)AgCFC$rv5b0E38eM=h>|V#ViIV~-{GarhY{eG$H$ctaUu zyw1_$6ThfJVI?V3+x4;A zQSAE3lbYJbx7fCHWa<*j(lNAiP!pyKHY8~Ap!vao`*fEHoy4K@yuYfLzG}VB>|41BIuO7iND)xX*?F8LW^ZY zJciErBYreIBM+;o9`w(7#wc ze^97n<&t;#aUggJsY6Xu-l&!bbpH-k%$t;RWOg@!~o~cz8Q8ik(HRj4M z^<ilXdoZe&EJUcGzE@feyaLwsA*1V0YA%q3C@)Q1D_H}HuZ&$ zvJTHFU&v=8$tLax)`v*4DH5JhHW4ot*+iX8AEYcW$|mB)BAaGIhf6{xlui6*eh1rz zX?;=o(CwZ9Oa@u5Ov_jg|5s!a>%eddoUTq#@~W_K=kD6oN8&&0ZPc%O7@q6*l@MRw zModpI;4fkt4FUC5$in4@=kx>RnN0Gz*utveFh7$JW;MbQqD`)a-Z*iR{E3q#CNCI2 z(UYx%&G1f_kLOL67hr~J@KIEIF&mge8-6e&`4eJ#Qm}OX+>feKCjZ75o!<%_NuB;8 z#z@m>&Gf5UdNX6-^G+&0KdQy@yox^TKj{8b8RNYrTKqI)*zn(E3>!Y}xQsv7;$vDI zhc=DF2ApP$F}Np=pE+yhw29-V^Xm0k7uVX1C`7#eOKF@WsY*(h&ied z;#?>6=)i9fdj4z+|- zczVm{dY{4L+2-Tfw#pCGudJ6pijic`N<|Q!4$yBi-;ac z28`0>1vG)j*f>9lgvT=USr9K48E}XGC0!my89+Qef0M5<2AKuJ4WO|yq(H`}ou8zj zA$-BNLhG&rhkVn&A_Me!h2#0M-`JO&pCs#E;IoSj=|P6{SVMY_AsxzWg1lSLf+R!L z@$1?=JnTVqhQ-e)EZmfbx{=SqG9dWu^I9BW48D4VG5Bm9v<3MpY%4vwPMkh@ytXtN zoI6F}lfP#lknk-*d6D=e?s15R&BNxa3l=9d=|QxUX!phsvIL>Dlc>;~5?*|Amg|*$ z(Izs;v1#NfgF$0_7LBJYkQr$)c@Kk;r$oX_0j{KTzDK-Rc*@H})&-e|k*5$Z7M^k^ z7)(BJqw$nPv`dFDqYXXM(4&o($|u@|2b$rT!Crs?t;qGa!knTtIghEY9h| zE4)*cJcu#qv8PIps!8MDNsrO)RpCCMG4M@Qcl{(_#kzwg_BVCpmjxFvu`%C|!v@X) z%>v8&&Hs@-LH+rWS`dAR-$uF|h4Dw4j7FEsw0vX~i7q4I8R?REvC!q4vOq1CbYP@Q z;>ALjt7D|gWVB0rUD>i+9Z3At!_Nd=Ld1!{z9d~HXlX_@bg45x3Od#1SaY&Pin!Df zC`Un$y}C}EA+G|9K9A_tJLWU&r=!gnBFRVC7IO|yrF~~{wQsRS$vUcdPvAs6-)I}P z@?#1XZ?DGTQ`@~Ql-R#$X}^)mRVPD7no9|oehFp zR?28K#9c{PsfXu)a0jZ0+ZVSL7RNMK5e`{ex>PAkbETIrsjvKae1GLSERJKzo9Bxh ztY`hl;0NJAx(Tn*HMP(;)NcL9n0)xT7GNp7u%ceh4{c%obnL`grdW#>&+s9>G&>$R zGB;q|SxJ9IeI;|F220F## zKcveG=n?05k?@RspLntG{R=c+!ZH~opEdG*;>E)Et0Ay9AfIUZ*m|_fXi=j2PnN3# ziJyA-nc({{!-~MZ47Ub#zV@6E`?!xGZ6c4a(bi_nR&}+R*+H|KVImgg;3@hDQhvOl z#mi8yI%v#C8AC`xuJoo{$(|Q_M{xHD^Db9+ZOJNzH7j{GW+b_ibC~C?_QcdH4Yr}a z*nc<}Yudwbjb7fa1?}^;iG73%Y{G7YtIV;YAmAGN=_`c(N z!IhH0Ig)*Y$i2Gw2HAseV;3tl%0$UAj+a-y#B z_%o8O7zr;0@961^c(L#d+HUnh=3(R+#EXSzlw)k?12-Dan2L7!Png3=U6FkmURPA< zQ_mJauPSGNu85~Nd&OkpngMD37A*#C_Yt(MoxBun4(IF<`~7+zv@t^@+7>!vU)+T! zbVj(CQfI`m_t|FOe490QIQlr}7n3J(QF|==<`v|7&c`L-uHvOF{e$9MTb8teqSx5D zKWDK8XFwF!(kZn|7&C$%(;>3Gsa40*dIUS(pq`Ci|%BX;sWT*mV6AD!2OZ3YWoKdJzm5)(}s(i>` z28TKwI0}ua7WhD*-v0sJX@g`M=veYP1|uKr2_1nvDjFZG(&fc`BJsgUct$=*yjb`k z&q&t?Sq&o}Bwj3h(2R-~Aj4>UkoRoQ&=oAp)q%uMJ^W1QPLdC@FT?Rc{k)!iY+Mt) zQdeOy22{=%qE6|~fQCjDym}?#`eeAX^TTRjDEkBak^hRdNW@+69n`hvFviFE8N=rN zq!xoe_w9-TYWWjJ(7l{}V!xM;vW?+1{8{WF75jiPY`)Pr^vZ_a6TUfS-*8*a>^x(G zHMbGQo0z66Tbv&`ws@0i3Mi6C->2D22iovOrcxpN<+`2gQ>EN`ncmGP$fVx^wr-BB zc^koND0T4$>t&@Ou10^YjfbJD_il&YX@(4l*ZgC!_riu{PPpUb z6vMTNeoVsUMtz)N@n?R?`7_*Wa5<{#;RL~BhRcxVD90UMP$EIfs93%XTbOt0 zkOL1M)hS0q6h1!UMZHr{M!X+8a9CN3rcBdfg#l7P z3+NGLQY1X1Od?(^GO3NmM_48U=s^UdOd?(^GU)_lO%-y8CX)_9RMF=S?`KF4HKcDaq`ii;iSi++_#+Y13hu%hbHT#w7`$*|mvUp# z;FNLFt{`L@I&&T2i2u$QvTmD}KA^>74=mtjv?FC;JH}Y|O=S!}nh}hfnoQSg@mwty zKK+0{sHGt@U0rXS?8%;_O3mnVn%M6;y8&e|M3b4*xwCE%w#8xdwC+ zH`Zm?U88Epwc3z?hj{g3G`PtiuZZJ@fd6qe$^?^v#R+ zWtGHvH!7K!WGH2E<$2hhxz&1EVcdxt(ex$IaZbbK84y}7zd5fB(wOczO8g$&Tkv(2 z;$4rkTU?M0{+=6^a^;8oQt^E_Bx)G<#uiX0`P99ce)C#65n=h>t%?`+^G*J&13oWB zQi3X4u+?BAM3K$sr9{(iO$*8zp=(T`eM4bL{p3gX2gE2=sL{i#^ zb^EGnT?VE@G|XM1x$&3|q7LNuJWHJXoxWb=@3R?$j|=_}J}!!wJX20(qOMQ6oS5W@ z5Pk1M0?J~D#Fx1@3OowuS@9rWalSW{W}7eDmfB{CdUTBDh$yT(SU>_B(eH&4Tb{U| z%8oq5+1+P7KdChrM*A6c&t;%5j>BmDWHlRK7b5YKNO(qmLcCb`3Fp)LpbZ0)k)IGR z7JkAtnRUR8#!rT!U3%*ZmgVX|;-?;dCin@+O9b{M`N_Fjni2cWVMqswFqA_~o+))k zc_N)~u$FfOsy1-aICWLhIB9vNH+ZyF4K4Qw@3ZXc5j!o@CcscgNNuZ;w)7^Z;TDr#k~R#tQbU*@b~hs`aF*)}Q$#DO|2P&HjP$)aM*4n6 zeLeU;5`9O)GtxKlVxjNPgC(jzBt04Fn|QI%H_zl=2i$1%%{?psN%YOWjG4Ykm?88H zKot7sS?Hwik&Mwe(>=XY#2jj#M|j%?=TH&o+u0-bd+Y4z1BS@--48U~6LL1qH#m7P zXuJ!SE2d-hcY5-$yi=g_6p%2NVeHo2SCA2~)DtOnd-Y&i6BCG>#kM%5$eOzZcw5Y^ zF7{(RhLak+;-4GmPwb<&h~c+tRkPOzf*mKm^z;vmbK$3_Gu|3TAgY$;!)z4AqGC`8 zSee17Y)@2=3(ltw;!F$ekq(R%9XqzxS@Y-{L=PpiFT-5;b6cg%xzz!07#m%L>W$uS zPR=PYvwC|MC3koLJ1cPf&awlRJW`zX^})#w7EX&n_#7{l^OzJ7@%UJjr+gS$o`4E{v z%ycc?l?n-YRS4e$K=M89xe1`@QrpSal%4UO$=Or9GqqP|W=|MDZ?fiQnJs*0f(WJo zD4TqeeMCNavz8`%VfsnLahUt?E|@qdXM-7wy$ijaU8l{Q=Fw(9(fDcKKCzz*VMiGZ zk@%_HyHHw}h^6La4tjNuf_6A(=^zUqDTCq-Pi-pLuCCkUh#d`QyvFvH!yqkT`KfX^o z;%}pzUj~>yNP6oGAn}on2+OosMiS3Rm&A*OF5i?HX|bdOBV7_N7P|aBdm1j#l`YHF zfy7Te{7ld#`3HmC(_pl33cA#7X&_++cQgnp)$eEM-2=1;ztb4!AkNs&K)q9Ih)6OM z_m@J^Plo=Uf_Vln_UMUuM-pZsov7x+!yIc4gN3JV=};jhRS_u;#^=Eq+VlgfKU=&l zamNQUK?cY$85wlSDd|$IXtRx+6Bm1|C?$AYMdgls`OJS6&qq~fH^jgaiGOJD01uJ- zXYoAR--%QqATEVS%-i80JUzPbbh-q^HieEWI8K3C2=&9Ykj=6|1$H36-V>b(J>KX>b}BM21UV4B4MaCI*Kk znL*`U$3H#3FIcI(n_wde!S@Zd_*(fck5?LSbI;Wl<#M|+G`{io@*A|k zG0tG*bHhOBodA!<=hE~94Sezk1|y$~gqH$beHO%vh0iV2zog5<$mfU`3!fVU{=iwMxg`9J^B!tgDhR8hps{7;cS>^ZhyAn&-zWIA%RJ53$I{ zn)@wtIpI7-o<|i+u%<35Z{szSk5rqm!4ikuy#_>Pm(1(o#oh2M2{!4mX73`v?XEG& ziPqdZh{cUWV_+H9nSzmbnr0;q;Mg&Z#o;v0^`c}lM6J}y2SwF9=i$8ZoGs>@e#5=ki(D{R8T8sNzshvxvnA-08dhE zd|*-7w}6Z_#AhJr#ohymCKVKZ?*TWxc{)hpRhbyeE)w;G0r71$)v$3#1H}pIfJ}7z z8!Af)(;XWSm>FhsL2ek>xnW={06W`d(*hk|Cm&-l$|eg8wF>}`Huu=5%ZvF$l1-8D zQt%E&b}$ex7TNTJp@}RL%!)>kxlx% z!krr@=N|0KaB~k~snjxIA3Jp!GHu+0kZE{sB2N#_O^^t#t4<6`7l@C@Cw=}-r_zq- zK+2mzT6_&-$`>tO${2F!UM>BM7Qd~*-)9W@R3Gg@ybH9r2V=;qp;~;M7SGaR$gf^q zXHLE`X8H9y&gY(uIx$3&U#gEP)p**Slc)((b*5d%#j|ugSHO;pxkqs4o$t>!m}@dq zXTe;<2js@Sfhy0dG1-VGxUW?n!2-u(@E1&!F1kI-B*9RTgc%Dc{X zp0{4@3h|%gpTWrU%Aju~0UnL#9p=lr5Q*nS!b`!s+RzZW5HA*<*Fpc1E)OHmBVH^# zk4pDC4A)IjBJoKa)Ibm4}45#B2;0>5l3qFC_b0@w17b@&v zE@_*{61cyV#48=#p~97lb5nu}8V=L#CLeQ-k8EwQQzYaSY-A?Z^b>GtgISq}=czUj zDt+)3p{ZWzb1X++h<{PvxJq`+Sw3%PU&|1QPb7liNyE|j#37lH7DwU}k?@Rsf_Sm; zi3{|Eh<9Yt$R~&w3!kWltSm!5(fGu6@QKT`Z)GIQ)q%uMJ^W1Y2|2H4Uy@IptE&L} zw4EW%c9wz9FO>53hkwR9Go?icR-aF;7~-!g7)XE+@n zlIu>?SLE6g8HhL37k}wQp`X<9zsElK)NBjXkR?{C8M<|F6<=F|s?l1qZ9yKz;!wPf zFX`15ZVo=n`OjL>`szQ9JqDwm!tJC#QyB}|^XZ!?Hx4Dz2ck@hM z;4yWZG~P4b)NR7Nd8Td?XU&)~c_v^pXL%-f8+uu0*Lj}t6K~RWUX-7ldvdJR*YMI1 zPtkreibUW4-H)fX4e4F#Eo?9P8Us3hU+Va^ z&R~r|-+i62>-a_)-Y__7Q8+@*VT&Tx{&`TU8Mc80uI9iVV9VR@?WDP$((r0}lmCQ+ zmQ6|VsV)G(i_a;s6m!Sz-ole@m3N){6q_U7SpW~(M+=<0@{aijn@(BpEmDS>D~nj* z8Ij}vej2A9ZlrPAie!*9-VOlb$??2FB51Lc&Ga{OKOzUny-D3>~Vq9)u?+qbgd%b@)gI$qS5g_d7xSDR@pAVuO$u@V9a9K1v%mcqD@48J&^R^NdJ%EJL3K@xt*8 z>Xmvt-m|3-GHK))#2c~W!S9y?r->MMu*td#JFB7NAYj{F; zq0X2*W8&;vqy`~h5N1XFg+1gk)FG}w9ES#<#B?K-XVZ>I^BDK0RuGQ#bWfiY!S{@3 zK}X&%38Fh>+!7MEB0~DTyP%GN{2H3?>#X_Yh9Uyv2xyGj0t}EtQ z#=ZgZ0J8U$1fV+i!#VQaVhsV%Gs8Rn7#$*m_1A(JBlyj6#;=tlIA41%BRP_dIz%Kq zqYgp5aQwiiL%b^s)MD0&!N?DY7mE%-e}!ehB@a6tKR5xr|0ErPeH7FoKrbOW1WsC? zJjXje=mdvFzn~u+rrqIe@_l=0OM@}c(ipALBhgaMVd1I;No|Kfwa`GWV9k%Z`_<;u zOtYtjvp}buhtTY!@b)yu8(wk>JptMA;ETG!L4a=XubU#j^YZ^=N{ zPVbMt%WbI{Ht*|s+kErwzAXEa1P!rq^y3R0%Igjv`6P<`j}`p}IyEq{ax6&D9eRM2N1@_tQSHr>I9K%reNwY687_ zVq77M<+Li!uIHOWHhK!t$ptsvY8c8tBeUo~PJ6z&rU@fz&+9M>Ns%0_>;_UDe;c)D z;l%*B43auK13-K!RU_f007pNPi5HGKjoR}Mz|#krhmkso7mN119R#utxY4v{-qzM# zSFkKs2NFN^@aWVjTS?7@GirSZr#(yRWM7gx^&Er!#(t7Pa8~NF3qytJLaFCQu!PsP zl=bN@Xx(`FZv#ejv;-p#5Qxu%j_) zAB>~v4%ymQErlt#f7McJ?i_R{@N9d(cNXA1yYj;)Jojna{=nXC*82-?Tg$ z>!AJCfj?kYoQUg*y5JQv(1Y{!oD*?MsdeQ&z|J{QM?LB)b+HMvbL*<+C?e-n9bZPg zHTMZ3oT}?-?Z5h0Wh=GlQc?As0`my(QU9nnj$#hpQyIX+u~HPc$Fr;c6DKe04j zsPNh@_Y-3G6WoFp^X$BS_~0~fpTYRhVL2tExc#aNZ!h6dSNuSJocOfw_ip3&crRMm z3Hg?$iy;(}b>)j{C0Kfj5?8q_XR)b{b>&J7RrTn;WKpf6#xN6D^KQon5Fa&6R_aKn zrlgJdYTRM&_ys1$mA&w4YL>;iif4r8{1WF|Z1o!>!g$Re8s}vrtMB<|m0tmJQ#&%{mxqCEXnO6%OF=S??UI#Xz+iDg#fGt)$7LCJ7bMOr8!DqdV%9!4o z%=&Y*;W0eEDBMIA^22KK8Ao4u)1;Y6mnNl%dF>=n@*gOM=FZ{@PB%=Po!y-OhBch< zru&$nJZGaI%a89-h+mP*~FKQXu zZ!Tam$oynl#(MbwTz;W)x=`1k$5FmXdB!miPM)#fWZ-vEACQ6RKgk4Qrf)E$gH$7I zIdga{f41gcpN%ETx#K4yJ{H=Z^PGn-zW$IeYxP zd6VaQvZsunHXY@&ow>p!PSr=p@OEojiJoE%tI$h~VI|tE#XAtkp{c&mV&3}5)A>(o z&!KDg5b}3QY`V6yXY8l%+q6L<u^~Ub*_y`?0>ZjZd+0*?-w7M=5pI zWxEfdBApcTUk0Fp$#|TgK$Np`+{}CeIVCH%n3VxGaSs^bsSfL^SG5mw{puSQ?`f%g zt88`rTuXnj{{v_yzxi1l-_L5BxgSB>?S;lu4xzX-$j(#NVTZUE;m_ufOMwF7ju*a2 zIi$%Zt~#K3FVsFWsj^AFKIp#}m8E1%EH$rSqXybS)}ix*x7Y+OAz)FBjDvm@7!Q%9 zY~^|dWvvu`g#M9&>x_6Cj08Q(KwiUOlvDYj;}pQ7&7a5<^g(L=MmZG;k7ck^WFTHR z`D2_vZ84N9^DxRE;tiLXBbIoK^;xV##Ww&(K2Aj@lKdHsc1go?8DxGkEn_|We=dI@ z^mKtMm{Q)bFT=^3WF0>H*l9=$c`_w*J~btr=#Y*@hBGEUM}AyESd9;*j1ar35GSBM zlo1Xs9;n6O{XM(Rn?GJ&K_1P{(nnq<8H3d``U--&dSLOz`Oa19V0*99+IOv4fg(O2 zUb)8XyEa~dZa%=GTodoR)}jowU@Ne4jm3AZ4R=;y4FQV>zH99YIMX%u>x$11{r@p5 z2=oe*f#ZUq9sW38H4!RKdn8;2Nz)wx(Az}vC4v@9Jfp>uc;RUJKWPQQuKN}}?drfm z-a%M&n#RD_g;=~0*tQJpBVn-=^b#~!GG&@FZ9+Dj)22_>T>3RS>eby9e)YiB8xLZ% zSKg_8cqAQ4whLqa@e4U-s2#KJQ1whL@OJ_JxI^I@{ITx?_`3x!Ou!5K@j`#Fvjp&n zOboyo=bB7K7vW^Dbd%}GER!h-8b!1AaVF=!IMcvWbxia2noX~kH!yX2*<$+SFLqPC z{_RYkm-aG!W4_w7ZTp?34LiRu-LiIeoMZNwI*&KqT=%^tt?SS5f7-CG<%IRA2R>^3 z$x|OVZg)R5DEq5b2&clrPw}mn)FtZa#Ro+w|^(skgsfaSmZuPWq&<;j&%s&NF;>nm--2i=%1c4Fhs| z?Ar-r$z!cweeel4VQnVuJ+XS^PIo)oqbb?zPmCt)g^zaq=H5}}HWePbx=m`Xhp-lx z&M0|ge3|>Uhly)9r1}Zr{2FuuyU(9_?M*HE_j3}~ztwuB-YeVP%MPwzUGePpjf6Qqe&)KpBe%P6%sKLIV8(X? z$!W??teN`px9{P5CpB)|bj^)~%@zIep8HQD{7uhUb4zQ&=4|NZ9+di?JMC}N&bjZ( zLz@Wub;!fsS(Wd)hu_tz)w6XAClGcjwP|JFb?>6z-bftOzt{PM{l)+H2`SgS>waLE z=fZCfpZ@`2Pu$zN_-KoF-D%Iv>)dR!^%lYoF5Z41<)dxx0jXd2TsL`RFTx&tfMJ`P zl81q?dv5s4vcuWi+=cyq9`*N~e|wg&3ombc>-U|uxzoy1#Hj%I|>fgEJ&queq zTfchOjFj)Koe5LN)z;v+BJA+FmwC>;d#ig}#dm9-EmqbOc4f+lbAO$<)tz?f{J;O! zy~_;3vRV&(`t?3r-8)O(+PSU4Eqw|5_P1Z(xu^;9GbJBwyl|F<^?Yg9Z--o8mb!=U z{-*wz+wSf}*vxrXINsY->Ry-fZi7cA9I8)P{R>|%-Ev>4`>oE!@#_xE+fCTBLpwHZ zHMi7ln!cyuy$fEVvCP!0PLcVU%Szq9u0Pf2sb*6>gr)WBdc%!fO5GK253yKBKb=9? z@asL{Zgze8ok_vFqMwBxQ|@&k?qTI{;vsp zc-k&UUp$v@@8KG|lCV>I7q=SYL4KZRTYg)- zXc}QhZtDNjJ7c%F+jsgdVfwpI4I}K6vKz-9>A%H&L&o*zwcLM&sLPx8?fLH03%9uM zzx~wtPv6m^8S#|#%-@zaLVnA3C-v@p{*Q!xzj^2Q?MF7dA87T-g{^0Nyp^!!7p$MR zY42wDx?XKNzS8Es#|iu4hxGX2MVsA?4?cWR@uiEF5%$D$cTBwL`OR)qziYa^vvtXM z!e+UKq?~{6W_L#J)!pBo?nx)?()u|I#xC9Lu4w*H?|F|m>OxrO$r)=~{du$7J-%aV zz4()M!c_jU+0DLY5O|L@e8e(fvwOf}ozflgJN6Rhyw&wq->#e8N%p5k3>a4Z8ev~e z@7(9Z)|=fuhTJmxy)h~G6ZZ8#&;Rg~`l#RFXRjLh_W275yZ+jacVBk2#O-ytvX;KT zG@Gzzzq@JOg`bzWZxhXd4GC+KeZ+hIBPH&2*AB|YEZ`-|yu*cp?U)15U68EZ(Q(qr{vZ?8t1odQKhx;qm1BLE z6Xq6jp(Mzk3A=aGqmwSapv0Xt?dJoMW}Yp%t*WuT#GUi&)^9hw)2RUpyL((r6-ErFXblIT~wGjoUku8ECB^Q8*Z-sLCrx)YBkZRO zM?Jmrb>!DBP9z}lb(#ph=ocr_@?-91OX~mb9E=PW2{%XGe(w1UjXhqJW->9XWQCjw9CX->u+d3%t_eETLv7QelFYZWc_a0ueK-b zk>Q8eU2j7>zkX?h_tw8~E@Aa=LMpj-xzk)&UJ4gzYfhBUG&Lk_Yp7c(-r5v|8kN0uFcaMHT>!u9#v=B(SA{< z7SAESo$of<-F(HZgh6v3zu>VVxAV%*jqiPR<4nS`-ngmzu{Fr=>XnW6D|06hwtn%P zrYrM{+>d?pW8(&!{&p2%KOOw>&+Zk-&o<7|{Pg7gHz(se7Cn8=Puu&yPP}tp-`Q>4`N;3p zKFv3;8S)%qLw}0fHl`)orO)=}j^kS&A*{oVZ#TKY%J!RNPkHd2y9nF6chA#{MbQ^HA z5dHgA%a=YV7Bth{eE!!@epl$etM#f@by~b}9q~TBapHv5-xRuS_4_4Uc(}n8guRxT zd(GO4LU-X4hZ9;qyq-t(YWgJd)AUKg`rmop1LeC5-2*yZbM84xK=kDk6VtEqzmNPb zYH?ng^VV*}8-Mq`^Z!&@=x)~h!}A*FW_BQ~OPz&pB^M&UBWn`Bz0WK7)wH>l2kXC8 z=zeME4d*v`yu2mx4&{wsfBY5XSKOt|^51T?5|%lj^pj(MD|ENpUESvHvvqu_ z+sr2jyQyGAhmX9#yVlZab=r9k5cW)A>su$!Mt+_qjyB1yR}of{^y((lO(^%e<`=#G z^`tz)zUy=IKmIxy`L%1)`IT3H5%fEw;DyoG-hl7e)wRpk1N-I@Z=wB>5ee5JzuN|O zT~l&u8eum+H*49!Oti}-Vj{V3_*S)w>qVaDxCbZXWjtxTiLPh_CKZJRTc;sg#3L_wBKCY6dzoopg_?lPGw^LVy2#%Pq+7pOXhj+4x?M;&oLG z3f+%=Uq0}Of2MrP{I30?a=?VTY`-f8OL;kEcG;r`ek*W~pR_Z5TS2Da?K3`2cqIGh z0=MngtAO6cRvGS(^_ngYlhqYaCPa*Sr`He1hmmVo_n+AACNVz&>`Aw$K zCu`GD$*-4-an;J-a`iihkl)l7GNi2iDzGzt`j-XnxU4HLf23{;!C!8D=BxQh703?@ zw^IIE_pc~Dupf96|9-{!87^+$Fs*%W>Zj{IMt*B%jFB?AJniWxrte0%FLk@>L~fr& z#8c;u$WNO$5_WXj_aC489=>Dm=4-On)R{rpZTC%T_3IYo*W}^rr0ni6w9(UF7olBd z-jX$G+{){T_x4ri&G`6j8brJX2Y1#z_&4Nt*CjVfxj%T-4-X%GuE2fQ%E8mV zA2_TJ@uok$@4KddMShoFb(7QuM%;AG=NCUw;4XZ5)(r2b(}jLjHGK7ys~=_i-8D<< z2LpdG-@^emEAoYlej^(9`?ksS>^y!NW1J;&eoX*I1p7-twu?vim!|Cuse@VXWa4(+}9HnyK?XJ8rg_y75Vj}{lW56-?Qw{*jSe-bwK$#&_f z3z6TPwRcDzq`b4&`Si^N?jyPEnHZFLf2)4++cuGPS^c+v+Lzob*1tiFgYS-!r}0WVWB} zKB>Pn7j_2VX?6zUJ=|=|f{U+5ev6hoBz2k#R-Ih9*VznJ~{zB4M{VuF8Wc(9NuBg7h8S;B-&mr1m`0jb5XLNeB zDfmXy)rWf|ngxA4)?1nTTw~-Hmt7_Gx{|Ku(ZN?02V_{Vf z8qPJNy1db`5!R=BbsaxR^9&B|%86)Ecm0lA7=_mfYSB~FrS?96%&V`$MU1>jidO)n zz@Mlm_PGsIK6U-->7MFI?z^~)-%L*%lXJh{(!f8a9$kd`I;xZ{`C`Xg+@PF7vr;Fg z$n5&jdjxKsC5hKvpPfZ#+kWtw5pJOHn}LUudX6)^QXfwphkV_B`yp-_puIriH08K{7=2>4VmX1F8HsM$K;#F}@Z{P$P(@&V z;pn>;o@&EI;Qb!@PFJ%Q|79MG_4IuhiDiJX&Znbq?iteW&yo4zwUD5PN2hOnP1t6# z)zmD*ozg+R!@xcg{xK?{>M1(gX%fU7hI)Ho8*SMAwepCL7^pWz`@~4p>)b{9#ql?w zT|1;`0%$qW-*cru(dX~C>iAwblpZ{hQ_-NXqK-c|Z6Lm5=eMUSS{EEIhrBLUj(vfB zHY-id2m4IQ;8pMrUTJPV#)qqMR$)8H%6PzW;@v82gkNa^9G<`N;68_WDE*9I{7|jKsbq8B{R}uDJzT;Hxgb7-qVj>Bc6O_ z)T4=)rj^M^;xX2b?=?uw28?y*dKK$u!=F)-#^ZYv0hdAMC)45Ly1`P_r?n|bwuXFO zFZjk^0U{+eMa)yOGG0niH0N)K(+7pt zoZ+{qTC)er`j{pr|G-muyA*R%sL<9tZfxUQ{&7uA-~@f+3M*UZ`>uorU2Fy-HqSxS z!lgbhgF5tY-YNq{1J&jyl_(1s6}64C|4$pv`@U@GIPWdkFlQiyWo5C0V8dlPRecq-hYx7 z&Atq)MU&=(G8YM{MdK&6=sEm;bS{(OwCG6u;oq%AkAnn;^bKm!&6P68R@b{q{dqbq z`bzT~>?@UmsYfqBN;&4*0WI3@BfXke4#?Z(`QG)T=OWjRB^~@`KQK&=9e#WLxMJrq z<)q*zsunF~;2+dz(LYAkqVEZ#MT@GaS~LgDf3;|~v?-Fd{a-DbTC<+h{EJ$&N~n5@ zh88V|S&DYu95^EN{>N$2=jpWQ^K@D?;6W`K@SqkAcu1^+-I%j!zuO_^xPvk#Lar9eNRIW608oRChG&#g%rBf4YP9u;6BcBlh$T%JX@_{R z*m|ZzP%Hy3>wG#blr|x~-Bgx~*Fu6GekN=^tRn;aNX$reH#E)6<_%4lfA;N)S&S4? z(dM6hdc=Nm)0d*`niU%(y-A><7G-+5X=bg5$+K@t0|+M_Wg_^ zQN|=44u6`pw2?9*;Tb7|c(G8%TCE%z$&qNJ4C2K?8KYvPjP3tnl)*j{ltCH@YHvvJ zLdNhjFK2iQXrGkWPy9FTwT&0{EO^9Ub!8^Z9d?KlVf1wF&pBAvljy5|d{T0f|7LSs z`CII;X8V)|%5MKsGeihyXN7?}o~y+SN+8A+|3hGX=o@0@i%Q$L&FXu*eM8~}WR_Wn zWD%h3_#l=t%i_P;=3i=}(}Qc#JX7gJCohHy}lRd^*eJ2H??(D1*#T zro+XxEtmR|!_8*QK{?2_)mtjXn5XSOWbg-NLWGg;Op(j@(f7rrXqD?JKBW`vIkKQ?JDY3S92*KGv{PIEbAxDYv-$qmlYGrrMZqsnk zhWG2N?CX{C>xz|khv$4-=lI^jZ_POetvvQadAIO$^YOj@)s3D&DZcuE+5MiCG8d3i zzg4v6A1`EsD}~nd_pIsVr#{yog`xe) zcp4vkYT;8$@TrYYZNaB@KD7s*Ch%!O@M$8SCI+7-@o7@QC2cLH0(@w#sUHG(1 z@M#L4rUak%Nq{P-?| z5l?1sq--=m0KWS zZvbvIt$aH0jHf>0wbO>$GF30lPp_4;ZS^u#9j~TFbN@5Ot$)$|)&8FM9p9&p-WSRT zdOC^G+e9hP=eT`=<8~m&?F$^Y12Jw7$#Glx-*Fq9ef?h_x9WH`HJUW-=E-_fO0@Z; zD7mw3TNUVq6yOJcQ|Ba!$ok>ub-D zr2T`tnyfE=$0HWOu@n3~*IHkko}BDBRO75kqld^hmrk z`I0UV;_JEjmq^S8EZW>`48E5#O$J%6OoxkW%aPdUX6ysXk>h?#h67Cv2UXn;AB54@WsV~>9vQ<3Os5uWKoBsz+OXQU(Ig%Ll#X12>v4 zSQ6T$yRK|mt_~!A>fzB>;iA!Bs6CS&*p0OU*_WipBrVNI(4!=-;G`u;nIO3!Z~~y& zlP1h?PQ-ic3;Ks){m#`D52npiNi!&0BhY2{o}^fY=yMry;0?-&M3uc+4iSw1eRLYN+ zw<{l(S7goG4V0Y4_Bi$42K=hyZHx<*TxHgr=h5T7bW3S^6{=&R-}h+qZ9mi3)4F^C zIwYsyf}DyfM~Qz_a_5|bRZ2#gFVo`7u=~=>9PcXW2b40rqhwa-Ub`sVYkRDl8el6( zdbu@s7ixp=!h8MIayp6^+NkA>Lpfhm`7+C)JFp;e?(t^|Zh^ufsp=up>E+-_7Ssc} z2b|9#`7_ECOS1ZqwJR(9ypC^hvueDaI(SvJ_4fXv$g)zi7!;?_qL~&{KeGaD;k2&g zqE61@3jF#ze%-d%z5{~Oy6Qc?)mAB2_U=3+w3vLhk@dxQ{pNG5FYa`dSzj#o+W{!X zxzV^8Qmw586}6#B1^>(}L;cLYj6K2nrC0be%lzis(RR*)d^so0IN-D2#@>7sC8VXM z+ZP@7WmXB-TR?LyJnY%7exU#ce&)>wlaD$J#5nj}wM=K5vU)Z)q1Jq(P|Nf^lE?cp zE6|F5`&~-rfj}lbhBNH042v~yJ1XK!uY#-b?Go2n5SW3=@Qc|Ulp6SIt+IjXcmad9 z;nMcjP4DflgqDcjvM4>-oo3Nv^8SZFN8}=&qgHs1b_;#p0MD(PidPiwu6!d2&EzQD z{dvRP%-p)_KBUFFs0H4I$O?V;y=v4j6FyVy42$fHnj!cm-p82ai)<9F_I`6-8$3`4 z=3orWiYj0vFe5CSATxA1yW0Y4;D@WP?~$(u&SSUniz9qdFVxDPUd39;)>P8>1a^i4 zmj!YFW(j;llf_DLU>Cm(WFk7yA|H?_Ls0_*>A`(QykY)0nLSntR`iM>WyD6AT@K#; z4B*jZ_8MJYKo8nbjJj_mycE0x1`!Ozi$!LO1BHTb)#PE6*~E)QX7k{`6jUUd%sv2~ zb}~%4I*|CO|E4n`vsq6D_9bO@qM8){*{3*cHyD^66ilgoKGu+)V@Tg&Nb_XRw2S?Z4PM{79(R84`NmYpi%4sy3zbzHJDo1R z%uIL=Lp(t;@`eg1R;sQ9Y^H_Cwn?caq&Uqf>AVO-MeO-Dgue14x7Kr?KNJtR15g2_ zZ<#0z8V{u>6f2w1*r-<2WWX1SwO4?sHGn^{f!{24D)mrl?J>bg=HQyr;f&P1>hd zwktG-3cvYHnLql-fs4no>~Wvf?$ck>rPcsvp z+t6nTzI6C`L*>XkfE1de0y00?r)YY$t1{I-742`6bqe-rX1wfXU(dG#9ig8X^^Yxq z`>BV8Di6>z9t#8A63C*4W57+X2$Y5a7YDkd;cFLH4cxO`FX^fA1oU1+y`&0qdIg?G z(@Q+MyqF(Yng~X{BobZ8;)5dv!wNW4R3HU0 zAncI*4zOsE))zGu?Xnzj8DzOKEn_|WOz0&%gPVbUNxdXNO^W}lcSl27<^L*>&j%Zx zk1?cY7}C@uD5Ug?1kzF@d+<10ss#o?ufCbxUE*qKX>1G?-ZeTzcIX35sy~f-QKoNV zjLzDj#WplJW%^9UkllAM#&a@h%Jgb2y^yjU@6&d~=TB%c&s^Z`T4h@NwH8-vadWgY zpF6ZzeuOlHMzgp49)D>I>dGKxwp=?_p%B8DvI}Q8y2T~ZQ_hwN<9|X!-b2;NGuS`w z`RdBKa~f67wIxYW#iA*3-Wum17*|22=$G&IIa*&v8HrWxAdkIg4(wv0esko<}CLEaV( z&$#w%%unm8S{|Xq>!&MM;xWdM3I_U1&qk^N{!Zu5#rvW!2)v;0Ms%CAr5+87^lJVTX*x5?P@&V_wzHVy9h@@wSk`|v@d(kKWS7-pmE8U9q*fEb`{S($9jKJ>hxs0^`3(GGHYHn z-a$6~{EM3YirdsyaCZnOEa7cv2B(xN<;d|}$Kjy;|G0Y}_^66=Z+s^?K-AR}YKpN& zS?#J>MNJ@TRLi;4&K!AkzsT9W_>9|K#0uDIj{Az{Joct2@ajv$G8w%M$Sh*Ps1MB(ArZQ2r&xx z$L9oNn>xhiGwZ&Kh3(ax2K+mNqgjrQ4qV;aumr0dwbGyjp%&bsAj_l)krK4@|)%)0=0r3{`> zaSuoIvFKd>B?Y$nren`dTWoaXjArk8pR=woC^jqeB4bvD{^&c%BIazhk?pLJ`rY-D zw#N=%^uR&G(#P}%xk=%k%zUcdC*Q~VN@$&##fh#@B4Jk^U9w}ybd6Hv>i89`b0kdhw^a~38B}W=b2SM3 z)AjhbfZ$^5(`33kI^@8bv^ho2e=~UkF(FF?nK4U*Okyslz?j2VtqYOYu|f3sSpZhz z_=Q8^rXu?^6_Fz!i~1P)V~8q(;dZZ zWV{7#VAH>LPBs;c(*hNf_2^U!~| zV}VKgH6HtTkNtj+owr;mJe^|7YzGUiyRN))pPqJb{`Ai2TNgz|_O3%qJlu6oc8tl| z1<0R32W7cvE`iB8SCeg~p+Puj`?hV4qKQhphbHE1PtgQCb>`9h0w&|(T#jZY>X~!0 zGigE|t7OLx+Xf5>2agW0iZ73YO~dZbl1-jII~dPfIgB36vaQAvDn z#R;)BgKR9ffc)bv$TwKiB3#{TOl>#Ewuf8wM^A@iY4kmP)jQzgip;VX+GR^@|3FB~ z0u4L$S72Zo7BIfm@R?dhgnLeC95%2u0N2tR8We(=4b8{ZD5NXb$);EnC6HPA+y>+q zykC(y`8RFY<(Av5;Xe~O$i-^=r^KU3GSdjDRIJ35Kvp)X>x;GHz@eHWMEaOucK_9q zJIk=ytu|B>e#_J@*GDx<9Ayt5(ML4mWKdQN31~5#S?s8IRz;}N;9B8sxvpUs;*t9i zgC^>6x~P%ytcLoSIy2`oeN>H1$aSGZ;WmB5eiarKcWc8w*+QYMzUo7ek}n2=X%8fu zf$9;O)q)a`IY#LjfAg3k|1m%eKg!IOAk#DnJEUMTPE=SLsg8wbFZ~<#02bR7xc}r^GEbhCWnSlxZT11+;XScK9W%fE8vUc`#+8`>>Hk*jeILAK zg2{ZuWaQz*=heH zP;4Hn)+y`4X86`^q1vu{+-qC6K>U?GqJsO;HB;+v3=Lu^U<GNKC#&s0ZGWID}C+QUJXWMpot7naEItJnRc;{94CjdZtXMeVN_Xw0e8CQWd!)f{Ww zU2;k9$K7%}<6XwxH^TcJC0G52_n5Q)vu)Tee5^89-~4x4@=Saa&S~kM;LZgM``oeM zytIMwb;r+nH8@QHocnS5m3N#FF5&`o;ApzXNe(Pi;pU8ambbfcG7oU7U)pgx@!8gt z;dVbZKj+Q~>&&S&E4uEqb$9K^cPcCCi=z|tSpB+?SK6!R*mGTOE#cFpUt3P&G&ISs*Avj@aLy z3WRg?rFEhAP3?^E+wy=ustzhe8^c@m5p|`p&$ZZJJ7hz}8habgH#DdE=EqeLYK*wf zd7QpF84))uVtJD*BKa3gthjfo&CDHZ_Se5ocelq1E~WJ1)Q#MbMM=x%d*hoQY%s|AUJC<9V*BZR)h9QW%sug=2s z*V&L)Q_>P^))0#H0-@}iZw^*`u!1{L;NngNr&7+Ie3S3&yz}t?Pn3pCyKmy{(c3SC z&i(ug^L-co!$eYPkYbkn*b zjQVQ0vCm}S$MUicz1%51a^dbgPJE8tG2QOR#tsgywL*8ttvd12OjmP(P8Z&h!#wk0 zAK*+cOWCYHmg7{9J>aqX6y8W77TSDME27hZb?%uGy^G&>-hKNt>$D}<_b~`BV3xzA zr2G-vZrJuKXrl7|7fndc6^csn1ig@e5AHo~DzO{V!A(c4)~YjLelP_AFa?yR4l)Z~ zGRFFitJ{qk8AKs+ed}kkUan1_(#DMuZvi$)sSI|8&Irf$`7L(A-U|WgYKCk=fcInq zk!k5C#oqI^evGXTvO%ox-wdH^Mu%Kmu^F)pG9J{7d~SY~hakQF__Y8kBy^~u>9`tf zRl=qyc?hgYF7|cclv!N}+6aP5Jl$Yq1t~IzK8^juMWTNLVfCdAz_7WYy6}4FBhSj# zN3E8tLtDd*`iRw-%ih}1M6vV&-Z2J=F+@t4kREd*NtV8TYh8*rk?s$lu*BNDDxgi^8Tx(==>$c|C|B1NvA4aYN(L@}-Zrobw z8qhuAR$kf3amXLRi9`79#jR^xalu=`(e&chp5PqZ$}oHg*B#Cb!_S@6S8j{T&xdDxy9Gg(4obAP1+!Y{%ry3WnGU zppVU)1#I&1_4qFUoKSQS_X!GOzLHGiZeqSnpt!7P5l~hk)}%tnEx-yfv1XBL#54J%CBENwN3u8$Q ziDl0in*xqL@};d4^b;UoUSpV<{)2WP;MUJ#`!YmL|9XVwcC;+{AyQ?2Gem9w4OrUB z=0OFnFlIbhjmV1t1g(aWXtK!oi6&~Hb5VZqMgZ+8+vNVx7Y(1x-2z;-AM(WGux{3R z7ShAMxXnPYTF{J$^qgS-TEsHc@CUJ|hIodC65%Zn7V4wc%k{vy_4@EcY)#-+;7^5T zRZ_*l0%MwH!p_aJ`xm)2+(v&(vsDwZykkThIStOdRRFFjTFYQySSepf|CT%JJ zuIAa29N_I-ebra7)`9X+!>1C5G`>*Wu)@^prnb-_DEV01uowQjj(bmE3e_9jpl6l= zPjA(izAx*=ejH35v4IT?^2SD6%c?ZTWC~;~uXT&Q^lkZ5O}ric6IM4-iJ8bnwmcp& zqJB|V!~G4-2$8LDJ9&FvvJn7o4+6L6VkNW&W&TE_O5Ms`zY)BCiwmLkgx42>&*=?b z=M2;R5FhgK;`N^3ym*~(y}|46d(w6As28sjt~Ypn88W^E`92n2AB%b^W&!QTN!PJE zrrZ6S#Ou!@A>#EMB)kOQufwE0-^mC}7hWISd1OFg=jjs$cSY=U=n1peBK}Ui-i_9g zo_2N=gnNzG$Mp)Ylh+$c+(DFuQ9RTrqFSJ##&v#Uv^uYL&${3K<~P4F9_F!ab*etm zbVjUAD88`rEEGh4WG|{F)`pXHm%{3trkDFI7C3vx50OTm8C_D>uuv;!h`Ii3b=b{lWjE zvQJF@nOKX+jGHx3pWQ&*pIUtLmWJH~IqrSgGP3o|xm$qqH1f!B)W9SkKs6Ks_t7Ae zJa>zkm1i-@2f{6iNzSpEWK|&lve>?K5;+#*y%d=PGtc~Q7LENsmur)M;cg6;f9Nt8 z8L@q7#x?D&AF1iWeQLV!PO{$Gv5}YGVN8Ch{pw@_cJSeycpV5+;dLNSebv6$Uk1vg z!s}kFo$5Xb@kJ4s1mXnX(c7R05S@j_WUE5?v;vb(_9)N4QayuwaNjdNM z$&z<#vc!+POy-6jIhO0(newJAIktPM@Gnjic>jp=^h6WtdPx%+U2!qao@hc(a9)}~ zxZco&Z`ruRDF=qNdb~7&aJ``kdwNL|=KcSSCj1%&chiJ6)WX-$gds=Kgdtvvp%_C71Mix1VNrps(lkEt=ra0~{3b(gY2|y}-CX%XpY4oHL+^ ziUffJooD3c-#M_`S$rR$YA=9!R3VVeD^Jk@7}HGWN^QVTV%} z189o7w@3t-d!Qfk_RvEf+ec*NS2jf=>@SBje9-?LQU>k86-Z|&qSty&8Nl0R?1W!}1aY5F8N0zx016`2xd}pwC2j z|Em^(A|>pchcQq(BT<1q=--;0jzDOZ*q)*Ks^VZVusw-S9@?@1lZnDu%Ro?;0Pp52A*d%)1PD0|C<;r)9?9m0>eVCz3jJytnypQfXdjCfH7iPvpys%53sMi#j$BNY zveNO9sSn?Z1+{f_Gsj>uf@#Kjxj`Hbzl}2GT7)V~5vnW{Ad`d&jhkytTHeQO1jOoq znu)Z)J)1C+6SG`13P{eVcEBB)1Y77Rj~6Z2Q#qWL094w5ZedO|T(ffx*DU#?40($m zn>L4M!kgPDv*omGIh+^w4pJ@6wq+fy8CvtNKA)i++j)ATT{9pW>CJp*wks~i*%R&R z3C>Hq2-h3h^|~irARP60X&2#oL%TSCTY?ylHJ>R!y%bwXsedP3m(x-1-{gGeugHKy zyC`@ovh6+0X9|v@T?Jm+RnQ~t8jSc!yR1F+clMfg6<%tSu3oGm-fdT?L%Y1Y!OB+! zP`|dY9%CD0liRcc8193ph-tMrptdmPn$y~i>)JzqB4Qe(80O6lpIrq)rbQ!C3p(=` z3gnZ0)Vz6=CA3Uy2ZpQUZLIp&SitWG#xj-rzh(Cm#9HvIcL3u&PJE8tG2QOR9{28?^lm2& zmdVt^HsZKX4aSuG*&dzHsaQDp0^CU94AYb}xd#sO;!6s8&0)T)Te)yX=~1g`N~hwS zJ?#L4DwS{q#|JqpiOtF$pjZ7Fu5)H(8!+^$eSH*&F+Nk^WJP`36&+Y9)aUO8G+@q0 z3H7QI2~!R=EZL_2I`djT24Z-%ZXQIZ1I&29IBI^XJ_UY;TY}-{Z$fR!#@GL}apT6; zU5VZ4X4!S=X4ayI;AvWCF70!ZBTqu!9A!Ag!E-I;b5Q?6&NtIi`R0dONN`H(G$Xk? zmwFc}>C-DeLA1auidjlF!ZK%8=9f(BeiY#s_(17}wMeK}J`TH4n!SPmU?4N0mq;Ng zoW(F_Ewoe`c1Z(jDND2E(BPbPb?B!EqBQVWoY^c?jepMPjH?fQ=XCH>ugbw{I&}0P zAWk?YJ|gxqZvvxgK9`{)Su~E8=sC=Z%7mp?$jVePiW(e?|!;xD>+VtaM!!==Er%h``oK{|~jG2*zb81woQJ`Azl_-JAy`9bYMpW=Py)XKya38g0xx9x1@dG`W$DvyVOUFT8Pt+9xql-rHrb-GEthUhiKzX`qSG1}rP zcB<&aG|H+M^nETFcGLHhiS|_HOS7HKi;mD5amXwK-rdy_M%YC~%&|FC<(PWui2MP+ zE6vm-^F}>JtOLf8j+@-!w2U3vQ~|M=g)F0f)j(k1QA1KGL#67@SsB2i76QRo3`Ou$zVVlJk!s>pc~WF81Y8%bF*?+~-~H?`?rs4!+@RIpE?J!Cu=4Hs&uZxhI*ORKBZ zz;aQLt;%ObtU~(lBAtgk6_TK0T5T2RbxO&@f`KFt5lwxVW9dfN~Rpu$hDL>IR1-S zY2pacl`0j>vZxqtL|Y&)YA|(0TOhPnGu0$Fwjpm3bPX+5oeA~UHiH!}WCT>~+c{($ z>Hv)qBn>Ve3pfjX4639Lp^J&tsD-dX5Ymh?n#f#PK3kvPL1cj@J7g?k?5$hS0i<~w zK1nj;WAPzY8*v6P7SkpdmEj+RFS0=F=xl!r11Y7$Db6U>M`yFhhN-ge;Qn%`44f+> z^g=x!S%oeh)h_T9gCoxtCQPm|%<|VzxDpsK}o(z>0(>m3s$-y@%Mj5=4Xp^f-;2{Ta*b0k9EUE|}je7ef$16D^TyG@C z6A_TC_pv0#+R4}f?IecuT%Rg^=g;kaY{`*Rn^x$fcY^~3x*qOq1ZSuowk0J;)Q#sn zY}24)fk``eXFCt=*E$xMwEw_k|FOqD!()HaV}HS8f8Ar>=&^71*pnVR7ayI6`8&~7 zp|lV5*z-O15gt3QPIpPmD<(UeH>3C6ckd;4L%p}{;!*Y4saA$6z$Z_*BtAH2u0bkS8q=qZ+uCr(R!sC~F}O2zc)cidia@1$v+d6+VRxw?3W*QH>v+r_0M zhu}lHc+#byzzwckj*9YCIncyAmMbslP2J1(S-YZwmlm|fqHbN(1aZC8Jg(hmjJQQyqhNAXVXMH`)Oh@ z^v6_z?w8SodlrTa^_o9V6Jz@wnn-UiO$?SZ5Qg#HKoev7WtzZwO*Fsl^NmEA(x9lK z#Wv4E*;M>A5&v�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