From a3320c1bbe98df2c9cdb1632c4f4a3637798f110 Mon Sep 17 00:00:00 2001 From: burakerturk Date: Thu, 16 Jul 2015 02:22:02 +0300 Subject: [PATCH 1/4] add component scm --- programming/scm/component.xml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 programming/scm/component.xml diff --git a/programming/scm/component.xml b/programming/scm/component.xml new file mode 100644 index 0000000000..c9a6b1f503 --- /dev/null +++ b/programming/scm/component.xml @@ -0,0 +1,3 @@ + + programming.scm + From 72afa0ce952319dbeeacd5f7bb74ba174eebff40 Mon Sep 17 00:00:00 2001 From: burakerturk Date: Thu, 16 Jul 2015 02:38:36 +0300 Subject: [PATCH 2/4] add some perl package --- pisi-index.xml | 2071 ++++++++++++++++- pisi-index.xml.sha1sum | 2 +- pisi-index.xml.xz | Bin 139296 -> 146984 bytes pisi-index.xml.xz.sha1sum | 2 +- programming/language/perl/component.xml | 3 + .../language/perl/perl-Authen-SASL/actions.py | 25 + .../language/perl/perl-Authen-SASL/pspec.xml | 67 + .../perl/perl-Authen-SASL/translations.xml | 9 + .../language/perl/perl-Digest-HMAC/actions.py | 23 + .../language/perl/perl-Digest-HMAC/pspec.xml | 64 + .../perl/perl-Digest-HMAC/translations.xml | 8 + .../language/perl/perl-Digest-SHA1/actions.py | 25 + .../language/perl/perl-Digest-SHA1/pspec.xml | 63 + .../perl/perl-Digest-SHA1/translations.xml | 8 + .../perl/perl-Encode-Locale/actions.py | 21 + .../perl/perl-Encode-Locale/pspec.xml | 62 + .../perl/perl-Encode-Locale/translations.xml | 9 + .../perl/perl-File-Listing/actions.py | 23 + .../language/perl/perl-File-Listing/pspec.xml | 67 + .../perl/perl-File-Listing/translations.xml | 9 + .../language/perl/perl-GSSAPI/actions.py | 24 + .../files/disable_failing_test.patch | 11 + .../language/perl/perl-GSSAPI/pspec.xml | 69 + .../perl/perl-GSSAPI/translations.xml | 8 + .../language/perl/perl-HTML-Form/actions.py | 23 + .../language/perl/perl-HTML-Form/pspec.xml | 66 + .../perl/perl-HTML-Form/translations.xml | 8 + .../language/perl/perl-HTML-Format/actions.py | 26 + .../language/perl/perl-HTML-Format/pspec.xml | 67 + .../perl/perl-HTML-Format/translations.xml | 8 + .../actions.py | 23 + .../pspec.xml | 58 + .../translations.xml | 8 + .../perl-HTML-FormatText-WithLinks/actions.py | 23 + .../perl-HTML-FormatText-WithLinks/pspec.xml | 60 + .../translations.xml | 8 + .../language/perl/perl-HTML-Parser/actions.py | 25 + .../language/perl/perl-HTML-Parser/pspec.xml | 66 + .../perl/perl-HTML-Parser/translations.xml | 9 + .../perl/perl-HTML-Scrubber/actions.py | 24 + .../perl/perl-HTML-Scrubber/pspec.xml | 64 + .../perl/perl-HTML-Scrubber/translations.xml | 7 + .../language/perl/perl-HTML-Tagset/actions.py | 25 + .../language/perl/perl-HTML-Tagset/pspec.xml | 63 + .../perl/perl-HTML-Tagset/translations.xml | 9 + .../perl/perl-HTML-Template-Pro/actions.py | 25 + .../perl/perl-HTML-Template-Pro/pspec.xml | 68 + .../perl-HTML-Template-Pro/translations.xml | 7 + .../perl/perl-HTML-Template/actions.py | 23 + .../perl/perl-HTML-Template/pspec.xml | 65 + .../perl/perl-HTML-Template/translations.xml | 8 + .../language/perl/perl-HTML-Tree/actions.py | 26 + .../language/perl/perl-HTML-Tree/pspec.xml | 73 + .../perl/perl-HTML-Tree/translations.xml | 8 + .../language/perl/perl-HTTP-Body/actions.py | 23 + .../language/perl/perl-HTTP-Body/pspec.xml | 67 + .../perl/perl-HTTP-Body/translations.xml | 8 + .../perl/perl-HTTP-Cookies/actions.py | 24 + .../language/perl/perl-HTTP-Cookies/pspec.xml | 68 + .../perl/perl-HTTP-Cookies/translations.xml | 8 + .../language/perl/perl-HTTP-Daemon/actions.py | 24 + .../language/perl/perl-HTTP-Daemon/pspec.xml | 66 + .../perl/perl-HTTP-Daemon/translations.xml | 8 + .../language/perl/perl-HTTP-Date/actions.py | 25 + .../language/perl/perl-HTTP-Date/pspec.xml | 66 + .../perl/perl-HTTP-Date/translations.xml | 9 + .../perl/perl-HTTP-Message/actions.py | 30 + .../language/perl/perl-HTTP-Message/pspec.xml | 73 + .../perl/perl-HTTP-Message/translations.xml | 8 + .../perl/perl-HTTP-Negotiate/actions.py | 26 + .../perl/perl-HTTP-Negotiate/pspec.xml | 69 + .../perl/perl-HTTP-Negotiate/translations.xml | 8 + .../perl/perl-HTTP-Server-Simple/actions.py | 25 + .../perl/perl-HTTP-Server-Simple/pspec.xml | 65 + .../perl-HTTP-Server-Simple/translations.xml | 8 + .../perl/perl-IO-Socket-SSL/actions.py | 25 + .../perl/perl-IO-Socket-SSL/pspec.xml | 65 + .../perl/perl-IO-Socket-SSL/translations.xml | 8 + .../perl/perl-LWP-Mediatypes/actions.py | 24 + .../perl/perl-LWP-Mediatypes/pspec.xml | 66 + .../perl/perl-LWP-Mediatypes/translations.xml | 8 + .../perl/perl-LWP-Protocol-https/actions.py | 23 + .../perl/perl-LWP-Protocol-https/pspec.xml | 44 + .../perl-LWP-Protocol-https/translations.xml | 8 + .../language/perl/perl-NET-HTTP/actions.py | 25 + .../language/perl/perl-NET-HTTP/pspec.xml | 66 + .../perl/perl-NET-HTTP/translations.xml | 8 + .../perl/perl-Net-SMTP-SSL/actions.py | 25 + .../language/perl/perl-Net-SMTP-SSL/pspec.xml | 65 + .../perl/perl-Net-SMTP-SSL/translations.xml | 8 + .../perl/perl-String-ShellQuote/actions.py | 25 + .../perl/perl-String-ShellQuote/pspec.xml | 65 + .../perl-String-ShellQuote/translations.xml | 8 + programming/language/perl/perl-URI/actions.py | 25 + programming/language/perl/perl-URI/pspec.xml | 64 + .../language/perl/perl-URI/translations.xml | 8 + .../perl/perl-WWW-Robotrules/actions.py | 26 + .../perl/perl-WWW-Robotrules/pspec.xml | 64 + .../perl/perl-WWW-Robotrules/translations.xml | 8 + .../language/perl/perl-libwww/actions.py | 27 + .../language/perl/perl-libwww/pspec.xml | 89 + .../perl/perl-libwww/translations.xml | 7 + 102 files changed, 5234 insertions(+), 4 deletions(-) create mode 100644 programming/language/perl/component.xml create mode 100644 programming/language/perl/perl-Authen-SASL/actions.py create mode 100644 programming/language/perl/perl-Authen-SASL/pspec.xml create mode 100644 programming/language/perl/perl-Authen-SASL/translations.xml create mode 100644 programming/language/perl/perl-Digest-HMAC/actions.py create mode 100644 programming/language/perl/perl-Digest-HMAC/pspec.xml create mode 100644 programming/language/perl/perl-Digest-HMAC/translations.xml create mode 100644 programming/language/perl/perl-Digest-SHA1/actions.py create mode 100644 programming/language/perl/perl-Digest-SHA1/pspec.xml create mode 100644 programming/language/perl/perl-Digest-SHA1/translations.xml create mode 100644 programming/language/perl/perl-Encode-Locale/actions.py create mode 100644 programming/language/perl/perl-Encode-Locale/pspec.xml create mode 100644 programming/language/perl/perl-Encode-Locale/translations.xml create mode 100644 programming/language/perl/perl-File-Listing/actions.py create mode 100644 programming/language/perl/perl-File-Listing/pspec.xml create mode 100644 programming/language/perl/perl-File-Listing/translations.xml create mode 100644 programming/language/perl/perl-GSSAPI/actions.py create mode 100644 programming/language/perl/perl-GSSAPI/files/disable_failing_test.patch create mode 100644 programming/language/perl/perl-GSSAPI/pspec.xml create mode 100644 programming/language/perl/perl-GSSAPI/translations.xml create mode 100644 programming/language/perl/perl-HTML-Form/actions.py create mode 100644 programming/language/perl/perl-HTML-Form/pspec.xml create mode 100644 programming/language/perl/perl-HTML-Form/translations.xml create mode 100644 programming/language/perl/perl-HTML-Format/actions.py create mode 100644 programming/language/perl/perl-HTML-Format/pspec.xml create mode 100644 programming/language/perl/perl-HTML-Format/translations.xml create mode 100644 programming/language/perl/perl-HTML-FormatText-WithLinks-AndTables/actions.py create mode 100644 programming/language/perl/perl-HTML-FormatText-WithLinks-AndTables/pspec.xml create mode 100644 programming/language/perl/perl-HTML-FormatText-WithLinks-AndTables/translations.xml create mode 100644 programming/language/perl/perl-HTML-FormatText-WithLinks/actions.py create mode 100644 programming/language/perl/perl-HTML-FormatText-WithLinks/pspec.xml create mode 100644 programming/language/perl/perl-HTML-FormatText-WithLinks/translations.xml create mode 100644 programming/language/perl/perl-HTML-Parser/actions.py create mode 100644 programming/language/perl/perl-HTML-Parser/pspec.xml create mode 100644 programming/language/perl/perl-HTML-Parser/translations.xml create mode 100644 programming/language/perl/perl-HTML-Scrubber/actions.py create mode 100644 programming/language/perl/perl-HTML-Scrubber/pspec.xml create mode 100644 programming/language/perl/perl-HTML-Scrubber/translations.xml create mode 100644 programming/language/perl/perl-HTML-Tagset/actions.py create mode 100644 programming/language/perl/perl-HTML-Tagset/pspec.xml create mode 100644 programming/language/perl/perl-HTML-Tagset/translations.xml create mode 100644 programming/language/perl/perl-HTML-Template-Pro/actions.py create mode 100644 programming/language/perl/perl-HTML-Template-Pro/pspec.xml create mode 100644 programming/language/perl/perl-HTML-Template-Pro/translations.xml create mode 100644 programming/language/perl/perl-HTML-Template/actions.py create mode 100644 programming/language/perl/perl-HTML-Template/pspec.xml create mode 100644 programming/language/perl/perl-HTML-Template/translations.xml create mode 100644 programming/language/perl/perl-HTML-Tree/actions.py create mode 100644 programming/language/perl/perl-HTML-Tree/pspec.xml create mode 100644 programming/language/perl/perl-HTML-Tree/translations.xml create mode 100644 programming/language/perl/perl-HTTP-Body/actions.py create mode 100644 programming/language/perl/perl-HTTP-Body/pspec.xml create mode 100644 programming/language/perl/perl-HTTP-Body/translations.xml create mode 100644 programming/language/perl/perl-HTTP-Cookies/actions.py create mode 100644 programming/language/perl/perl-HTTP-Cookies/pspec.xml create mode 100644 programming/language/perl/perl-HTTP-Cookies/translations.xml create mode 100644 programming/language/perl/perl-HTTP-Daemon/actions.py create mode 100644 programming/language/perl/perl-HTTP-Daemon/pspec.xml create mode 100644 programming/language/perl/perl-HTTP-Daemon/translations.xml create mode 100644 programming/language/perl/perl-HTTP-Date/actions.py create mode 100644 programming/language/perl/perl-HTTP-Date/pspec.xml create mode 100644 programming/language/perl/perl-HTTP-Date/translations.xml create mode 100644 programming/language/perl/perl-HTTP-Message/actions.py create mode 100644 programming/language/perl/perl-HTTP-Message/pspec.xml create mode 100644 programming/language/perl/perl-HTTP-Message/translations.xml create mode 100644 programming/language/perl/perl-HTTP-Negotiate/actions.py create mode 100644 programming/language/perl/perl-HTTP-Negotiate/pspec.xml create mode 100644 programming/language/perl/perl-HTTP-Negotiate/translations.xml create mode 100644 programming/language/perl/perl-HTTP-Server-Simple/actions.py create mode 100644 programming/language/perl/perl-HTTP-Server-Simple/pspec.xml create mode 100644 programming/language/perl/perl-HTTP-Server-Simple/translations.xml create mode 100644 programming/language/perl/perl-IO-Socket-SSL/actions.py create mode 100644 programming/language/perl/perl-IO-Socket-SSL/pspec.xml create mode 100644 programming/language/perl/perl-IO-Socket-SSL/translations.xml create mode 100644 programming/language/perl/perl-LWP-Mediatypes/actions.py create mode 100644 programming/language/perl/perl-LWP-Mediatypes/pspec.xml create mode 100644 programming/language/perl/perl-LWP-Mediatypes/translations.xml create mode 100644 programming/language/perl/perl-LWP-Protocol-https/actions.py create mode 100644 programming/language/perl/perl-LWP-Protocol-https/pspec.xml create mode 100644 programming/language/perl/perl-LWP-Protocol-https/translations.xml create mode 100644 programming/language/perl/perl-NET-HTTP/actions.py create mode 100644 programming/language/perl/perl-NET-HTTP/pspec.xml create mode 100644 programming/language/perl/perl-NET-HTTP/translations.xml create mode 100644 programming/language/perl/perl-Net-SMTP-SSL/actions.py create mode 100644 programming/language/perl/perl-Net-SMTP-SSL/pspec.xml create mode 100644 programming/language/perl/perl-Net-SMTP-SSL/translations.xml create mode 100644 programming/language/perl/perl-String-ShellQuote/actions.py create mode 100644 programming/language/perl/perl-String-ShellQuote/pspec.xml create mode 100644 programming/language/perl/perl-String-ShellQuote/translations.xml create mode 100644 programming/language/perl/perl-URI/actions.py create mode 100644 programming/language/perl/perl-URI/pspec.xml create mode 100644 programming/language/perl/perl-URI/translations.xml create mode 100644 programming/language/perl/perl-WWW-Robotrules/actions.py create mode 100644 programming/language/perl/perl-WWW-Robotrules/pspec.xml create mode 100644 programming/language/perl/perl-WWW-Robotrules/translations.xml create mode 100644 programming/language/perl/perl-libwww/actions.py create mode 100644 programming/language/perl/perl-libwww/pspec.xml create mode 100644 programming/language/perl/perl-libwww/translations.xml diff --git a/pisi-index.xml b/pisi-index.xml index c355907f3a..14b9be66b4 100644 --- a/pisi-index.xml +++ b/pisi-index.xml @@ -30272,6 +30272,335 @@ uses SIMD instructions (MMX, SSE2, etc.) to accelerate baseline JPEG compression + + + perl-HTML-Tree + http://search.cpan.org/dist/HTML-Tree/ + + Pisi Linux Admins + admins@pisilinux.org + + GPLv2 + library + app:console + programming.language.perl + A Perl module that build and scan parse-trees of HTML + HTML etiketlerin ayrıştırıcı ağaçlarını inşa etmeye yarayan bir Perl modülü + Build and scan parse-trees of HTML. It allows to represent,create and extract information from HTML syntax trees. + HTML etiketlerin ayrıştırıcı ağaçlarını inşa etmeye yarayan bir Perl modülüdür. HTML ağaçlarındaki bilgileri oluşturmaya, çıkartmaya ve sunmaya yarar. + http://search.cpan.org/CPAN/authors/id/C/CJ/CJM/HTML-Tree-5.03.tar.gz + + perl + perl-HTML-Tagset + perl-HTML-Parser + perl-Test-Exception + perl-Test-Pod-Coverage + + programming/language/perl/perl-HTML-Tree/pspec.xml + + + perl-HTML-Tree + + perl + perl-HTML-Tagset + perl-HTML-Parser + perl-Test-Exception + perl-Test-Pod-Coverage + + + /usr/bin + /usr/lib + /usr/share/man + /usr/share/doc + + + + + 2014-09-10 + 5.03 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-24 + 5.03 + Version bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-07 + 5.02 + Rebuild for perl + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-09-07 + 5.02 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + + + + perl-Authen-SASL + http://search.cpan.org/dist/Authen-SASL + + Pisi Linux Admins + admins@pisilinux.org + + Artistic + library + programming.language.perl + A Perl SASL interface + Perl için SASL modülü + SASL is a generic mechanism for authentication used by several network protocols. Authen::SASL provides an implementation framework that all protocols should be able to share. The framework allows different implementations of the connection class to be plugged in. + SASL, ağ protokolleri tarafından kullanılan genel bir kimlik doğrulama tekniğidir. Authen::SASL, bütün protokollerin paylaşabileceği bir yapı sağlar. Bu yapı, kullanılacak bağlantı sınıfının farklı şekillerde uygulamalarına izin verir. + SASL es un mecanismo genérico de autenticación usado en varios protocolos de red. Authen::SASL facilita un capa de implementación, que todos los protocolos deberían poder compartir. El framework permite adjuntar implementaciones diferentes de la clase de conexión. + http://search.cpan.org/CPAN/authors/id/G/GB/GBARR/Authen-SASL-2.16.tar.gz + + perl + perl-GSSAPI + perl-Digest-HMAC + + programming/language/perl/perl-Authen-SASL/pspec.xml + + + perl-Authen-SASL + + perl + perl-GSSAPI + perl-Digest-HMAC + + + /usr/lib + /usr/share/doc/perl-Authen-SASL + /usr/share/man + + + + + 2014-09-10 + 2.16 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 2.16 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-11-04 + 2.16 + Version bump. + Yusuf Aydemir + yusuf.aydemir@pisilinux.org + + + 2012-09-06 + 2.15 + First release + PisiLinux Community + admins@pisilinux.org + + + + + + perl-Digest-HMAC + http://search.cpan.org/dist/Digest-HMAC + + Pisi Linux Admins + admins@pisilinux.org + + Artistic + library + programming.language.perl + Keyed-Hashing for Message Authentication + This Perl module provides HMAC-MD5 hashing. + Bu Perl modülü HMAC-MD5 şifrelemesi sağlar. + Este módulo Perl facilita hashing HMAC-MD5 + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/Digest-HMAC-1.03.tar.gz + + perl + perl-Digest-SHA1 + + programming/language/perl/perl-Digest-HMAC/pspec.xml + + + perl-Digest-HMAC + + perl + perl-Digest-SHA1 + + + /usr/lib + /usr/share/man + + + + + 2014-09-10 + 1.03 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 1.03 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-11-09 + 1.03 + Rebuild + Richard de Bruin + richdb@pisilinux.org + + + 2012-09-07 + 1.03 + First release + PisiLinux Community + admins@pisilinux.org + + + + + + perl-Digest-SHA1 + http://search.cpan.org/dist/Digest-SHA1/ + + Pisi Linux Admins + admins@pisilinux.org + + Artistic + library + programming.language.perl + SHA1 message digest algorithm + The Digest::SHA1 module allows you to use the NIST SHA-1 message digest algorithm from within Perl programs. The algorithm takes as input a message of arbitrary length and produces as output a 160-bit "fingerprint" or "message digest" of the input. + Bu modül NIST SHA-1 mesaj özetleme algoritmasını Perl programlarında kullanabilmenizi sağlar. Farklı uzunluklardaki mesajları alan algoritma, çıktı olarak 160 bitlik parmakizi veya mesaj özeti üretir. + El módulo Digest::SHA1 permite usar el algoritmo NIST SHA-1 desde programas Perl. El algoritmo acepta como entrada un mensaje de longitud arbitraria y produce un "fingerprint" (huella digital) o "message digest" de 160-bit. + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/Digest-SHA1-2.13.tar.gz + + perl + + programming/language/perl/perl-Digest-SHA1/pspec.xml + + + perl-Digest-SHA1 + + perl + + + /usr/lib + /usr/share/doc/perl-Digest-SHA1 + /usr/share/man + + + + + 2014-09-10 + 2.13 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 2.13 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-11-09 + 2.13 + Rebuild + Richard de Bruin + richdb@pisilinux.org + + + 2012-09-06 + 2.13 + First release + PisiLinux Community + admins@pisilinux.org + + + + + + perl-Encode-Locale + http://search.cpan.org/~gaas/Encode-Locale-1.03/ + + Osman Erkan + osman.erkan@pisilinux.org + + Artistic + GPLv2+ + app:console + programming.language.perl + NAME::Encode::Locale - Determine the locale encoding + In many applications it's wise to let Perl use Unicode for the strings it processes. Most of the interfaces Perl has to the outside world are still byte based. Programs therefore need to decode byte strings that enter the program from the outside and encode them again on the way out. + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/Encode-Locale-1.03.tar.gz + + perl + + programming/language/perl/perl-Encode-Locale/pspec.xml + + + perl-Encode-Locale + + perl + + + /usr/lib + /usr/share + + + + + 2014-09-10 + 1.03 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 1.03 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-10-31 + 1.03 + rebuild + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-09-07 + 1.03 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + perl-Error @@ -30282,7 +30611,7 @@ uses SIMD instructions (MMX, SSE2, etc.) to accelerate baseline JPEG compression Artistic library - unknown + programming.language.perl Error/exception handling in an OO-ish way Hata/istisna yakalama ve işlemeye yarayan Nesne yönelimli mantıkla yazılmış bir perl modülü The Error package provides two interfaces. Firstly Error provides a procedural interface to exception handling. Secondly Error is a base class for errors/exceptions that can either be thrown, for subsequent catch, or can simply be recorded. @@ -30342,6 +30671,1744 @@ uses SIMD instructions (MMX, SSE2, etc.) to accelerate baseline JPEG compression + + + perl-File-Listing + http://search.cpan.org/~gaas/File-Listing-6.04/ + + Osman Erkan + osman.erkan@pisilinux.org + + Artistic + GPLv2 + app:console + programming.language.perl + File::Listing - parse directory listing + This module exports a single function called parse_dir(), which can be used to parse directory listings. + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/File-Listing-6.04.tar.gz + + perl + perl-HTTP-Date + + programming/language/perl/perl-File-Listing/pspec.xml + + + perl-File-Listing + + perl + perl-HTTP-Date + + + /usr/lib + /usr/share/doc + /usr/share/man + /usr/share + + + + + 2014-09-10 + 6.04 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-25 + 6.04 + Fix version number. + Marcin Bojara + marcin@pisilinux.org + + + 2013-11-09 + 6.0.4 + Rebuild + Richard de Bruin + richdb@pisilinux.org + + + 2012-09-07 + 6.0.4 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + + + + perl-GSSAPI + http://search.cpan.org/dist/GSSAPI/ + + Pisi Linux Admins + admins@pisilinux.org + + Artistic + library + programming.language.perl + Perl extension providing access to the GSSAPIv2 library + GSSAPI kitaplığına erişim sağlayan perl modülü + perl-GSSAPI module gives access to the routines of the GSSAPI library, as described in rfc2743 and rfc2744 and implemented by the Kerberos-1.2 distribution from MIT. + perl-GSSAPI, RFC 2744'de açıklandığı gibi GSSAPI C bağlayıcılarını kullanan bir perl eklentisidir. + http://search.cpan.org/CPAN/authors/id/A/AG/AGROLMS/GSSAPI-0.28.tar.gz + + perl + mit-kerberos + e2fsprogs-devel + + + disable_failing_test.patch + + programming/language/perl/perl-GSSAPI/pspec.xml + + + perl-GSSAPI + + perl + mit-kerberos + e2fsprogs + + + /usr/lib + /usr/share/man + + + + + 2015-04-23 + 0.28 + Release bump, fix deps + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 0.28 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-11-21 + 0.28 + Rebuild + Richard de Bruin + richdb@pisilinux.org + + + 2012-09-06 + 0.28 + First release + PisiLinux Community + admins@pisilinux.org + + + + + + perl-HTML-Form + http://search.cpan.org/~gaas/HTML-Form-6.03/ + + Osman Erkan + osman.erkan@pisilinux.org + + Artistic + GPLv2 + app:console + programming.language.perl + HTML::Form - Class that represents an HTML form element + Objects of the HTML::Form class represents a single HTML <form> ... </form> instance. A form consists of a sequence of inputs that usually have names, and which can take on various values. The state of a form can be tweaked and it can then be asked to provide HTTP::Request objects that can be passed to the request() method of LWP::UserAgent. + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/HTML-Form-6.03.tar.gz + + perl + + programming/language/perl/perl-HTML-Form/pspec.xml + + + perl-HTML-Form + + perl + + + /usr/lib + /usr/share/doc + /usr/share/man + /usr/share + + + + + 2014-09-10 + 6.03 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 6.03 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-07 + 6.03 + Rebuild for perl + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-09-07 + 6.03 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + + + + perl-HTML-Format + http://search.cpan.org/dist/HTML-Format/ + + Pisi Linux Admins + admins@pisilinux.org + + GPLv2 + library + programming.language.perl + A Perl module that format HTML as plaintext, RTF and PostScript + HTML dosyalarını basit metin, RTF ve PostScript formatlarına biçimlendiren bir Perl modülüdür + perl-HTML-Format is a Perl module that formats HTML as plaintext, RTF and PostScript. + perl-HTML-Format HTML dosyalarını basit metin, RTF ve PostScript formatlarına biçimlendiren bir Perl modülüdür + http://search.cpan.org/CPAN/authors/id/N/NI/NIGELM/HTML-Format-2.11.tar.gz + + perl + perl-HTML-Tree + perl-Font-AFM + + programming/language/perl/perl-HTML-Format/pspec.xml + + + perl-HTML-Format + + perl + perl-HTML-Tree + perl-Font-AFM + + + /usr/lib + /usr/share/man + /usr/share/doc + + + + + 2014-09-10 + 2.11 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-24 + 2.11 + Version bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-07 + 2.10 + Rebuild for perl + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-09-06 + 2.10 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + + + + perl-HTML-FormatText-WithLinks + http://search.cpan.org/dist/HTML-FormatText-WithLinks + + Osman Erkan + osman.erkan@pisilinux.org + + PerlArtistic GPL + library + programming.language.perl + HTML to text conversion with links as footnotes. + HTML::FormatText::WithLinks takes HTML and turns it into plain text but prints all the links in the HTML as footnotes. + http://search.cpan.org/CPAN/authors/id/S/ST/STRUAN/HTML-FormatText-WithLinks-0.14.tar.gz + + perl + perl-HTML-Tree + perl-HTML-Format + + programming/language/perl/perl-HTML-FormatText-WithLinks/pspec.xml + + + perl-HTML-FormatText-WithLinks + + perl + perl-HTML-Tree + perl-HTML-Format + + + /usr/lib + /usr/share/man + /usr/share/doc + + + + + 2014-09-10 + 0.14 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 0.14 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-23 + 0.14 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + + + + perl-HTML-FormatText-WithLinks-AndTables + http://search.cpan.org/dist/HTML-FormatText-WithLinks-AndTables + + Osman Erkan + osman.erkan@pisilinux.org + + PerlArtistic GPL + library + programming.language.perl + Converts HTML to Text with tables in tact. + This module was inspired by HTML::FormatText::WithLinks which has proven to be a useful `lynx -dump` work-alike. + http://search.cpan.org/CPAN/authors/id/S/SF/SFRYER/HTML-FormatText-WithLinks-AndTables-0.02.tar.gz + + perl + perl-HTML-FormatText-WithLinks + + programming/language/perl/perl-HTML-FormatText-WithLinks-AndTables/pspec.xml + + + perl-HTML-FormatText-WithLinks-AndTables + + perl + perl-HTML-FormatText-WithLinks + + + /usr/lib + /usr/share/man + /usr/share/doc + + + + + 2014-09-10 + 0.02 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 0.02 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-23 + 0.02 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + + + + perl-HTML-Parser + http://search.cpan.org/dist/HTML-Parser/ + + Pisi Linux Admins + admins@pisilinux.org + + Artistic + library + programming.language.perl + HTML Parser + HTML ayrıştırmak için kütüphane + The HTML-Parser distribution is a collection of modules that parse and extract information from HTML documents. + HTML-Parser yazılımı, HTML dökümanlarından bilgi ayrıştıran ve seçip çıkaran bir modüller kolleksiyonudur. + La distribución HTML-Parser es una colección de módulos que analizan la sintaxis y extraen información de documentos HTML. + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/HTML-Parser-3.71.tar.gz + + perl + perl-Test-Pod + perl-HTML-Tagset + + programming/language/perl/perl-HTML-Parser/pspec.xml + + + perl-HTML-Parser + + perl + perl-HTML-Tagset + + + /usr/lib + /usr/share/doc/perl-HTML-Parser + /usr/share/man + + + + + 2014-09-10 + 3.71 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 3.71 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-11-06 + 3.71 + Version bump + Richard de Bruin + richdb@pisilinux.org + + + 2012-06-29 + 3.69 + First release + PisiLinux Community + admins@pisilinux.org + + + + + + perl-HTML-Scrubber + http://search.cpan.org/dist/HTML-Scrubber + + Pisi Linux Admins + admins@pisilinux.org + + Artistic + library + programming.language.perl + Perl extension for scrubbing/sanitizing html + HTML dosyalarını düzenlemek için bir perl modülü + If you wanna scrub or sanitize html input in a reliable an flexible fashion, then this module is for you. I wasn't satisfied with HTML::Sanitizer because it is based on HTML::TreeBuilder, so I thought I'd write something similar that works directly with HTML::Parser. + http://search.cpan.org/CPAN/authors/id/N/NI/NIGELM/HTML-Scrubber-0.11.tar.gz + + perl-HTML-Parser + perl + + programming/language/perl/perl-HTML-Scrubber/pspec.xml + + + perl-HTML-Scrubber + + perl-HTML-Parser + perl + + + /usr/lib + /usr/share/man + + + + + 2014-09-10 + 0.11 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-24 + 0.11 + Version bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-07 + 0.09 + Rebuild for perl + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-09-07 + 0.09 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + + + + perl-HTML-Tagset + http://search.cpan.org/dist/HTML-Tagset/ + + Pisi Linux Admins + admins@pisilinux.org + + Artistic + library + programming.language.perl + Data tables useful in parsing HTML + HTML ayrıştırmak için yararlı bilgi tabloları + HTML-Tagset contains several data tables useful in various kinds of HTML parsing operations. + HTML-Tagset HTML ayrıştırmak için yararlı birçok bilgi tablosunu barındırır. + HTML-Tagset contiene varios tablas de datos útiles para varias operaciones de parsear HTML. + http://search.cpan.org/CPAN/authors/id/P/PE/PETDANCE/HTML-Tagset-3.20.tar.gz + + perl + + programming/language/perl/perl-HTML-Tagset/pspec.xml + + + perl-HTML-Tagset + + perl + + + /usr/lib + /usr/share/man + /usr/share/doc/perl-HTML-Tagset + + + + + 2014-09-10 + 3.20 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 3.20 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-01 + 3.20 + Rebuild for new perl. + PisiLinux Community + admins@pisilinux.org + + + 2012-09-07 + 3.20 + First release + PisiLinux Community + admins@pisilinux.org + + + + + + perl-HTML-Template + http://search.cpan.org/~wonko/HTML-Template-2.91/ + + Osman Erkan + osman.erkan@pisilinux.org + + Artistic + GPLv2 + app:console + programming.language.perl + Perl module to use HTML-like templating language + First you make a template - this is just a normal HTML file with a few extra tags, the simplest being <TMPL_VAR> + http://search.cpan.org/CPAN/authors/id/W/WO/WONKO/HTML-Template-2.95.tar.gz + + perl + + programming/language/perl/perl-HTML-Template/pspec.xml + + + perl-HTML-Template + + perl + + + /usr/lib + /usr/share/doc + /usr/share/man + /usr/share + + + + + 2014-09-10 + 2.95 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-24 + 2.95 + Version bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-07 + 2.91 + Rebuild for perl + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-09-06 + 2.91 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + + + + perl-HTML-Template-Pro + http://search.cpan.org/dist/HTML-Template-Pro + + Pisi Linux Admins + admins@pisilinux.org + + Artistic + GPLv2 + LGPLv2 + library + programming.language.perl + Perl/XS module to use HTML Templates from CGI scripts + CGI betiklerindeki HTML şablonlarını kullanabilen Perl/XS modülü + A fast and lightweight C/Perl+XS HTML Template engine implementation. + http://search.cpan.org/CPAN/authors/id/V/VI/VIY/HTML-Template-Pro-0.9510.tar.gz + + perl + perl-JSON + + programming/language/perl/perl-HTML-Template-Pro/pspec.xml + + + perl-HTML-Template-Pro + + perl + perl-JSON + + + /usr/lib + /usr/share/perl + /usr/share/doc + /usr/share/man + + + + + 2014-09-10 + 0.9510 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-24 + 0.9510 + Version bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-07 + 0.9509 + Rebuild for perl + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-09-07 + 0.9509 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + + + + perl-HTTP-Body + http://search.cpan.org/~getty/HTTP-Body-1.15/ + + Osman Erkan + osman.erkan@pisilinux.org + + Artistic + GPLv2 + app:console + programming.language.perl + HTTP Body Parser + HTTP::Body parses chunks of HTTP POST data and supports application/octet-stream, application/x-www-form-urlencoded, and multipart/form-data. + http://search.cpan.org/CPAN/authors/id/G/GE/GETTY/HTTP-Body-1.19.tar.gz + + perl + perl-Test-Deep + + programming/language/perl/perl-HTTP-Body/pspec.xml + + + perl-HTTP-Body + + perl + + + /usr/lib + /usr/share/doc + /usr/share/man + /usr/share + + + + + 2014-09-10 + 1.19 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-24 + 1.19 + Version bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-07 + 0.25 + Rebuild for perl + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-09-07 + 1.15 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + + + + perl-HTTP-Cookies + http://search.cpan.org/~gaas/HTTP-Cookies-6.01/ + + Osman Erkan + osman.erkan@pisilinux.org + + Artistic + GPLv2 + app:console + programming.language.perl + HTTP cookie jars + This class is for objects that represent a "cookie jar" -- that is, a database of all the HTTP cookies that a given LWP::UserAgent object knows about. + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/HTTP-Cookies-6.01.tar.gz + + perl + perl-HTTP-Message + + programming/language/perl/perl-HTTP-Cookies/pspec.xml + + + perl-HTTP-Cookies + + perl + perl-HTTP-Message + + + /usr/lib + /usr/share/doc + /usr/share/man + /usr/share + + + + + 2014-09-10 + 6.01 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 6.01 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-07 + 6.01 + Rebuild for perl + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-09-07 + 6.01 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + + + + perl-HTTP-Daemon + http://search.cpan.org/~gaas/HTTP-Daemon-6.01/ + + Osman Erkan + osman.erkan@pisilinux.org + + Artistic + GPLv2 + app:console + programming.language.perl + a simple http server class + Instances of the HTTP::Daemon class are HTTP/1.1 servers that listen on a socket for incoming requests. + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/HTTP-Daemon-6.01.tar.gz + + perl + + programming/language/perl/perl-HTTP-Daemon/pspec.xml + + + perl-HTTP-Daemon + + perl + + + /usr/lib + /usr/share/doc + /usr/share/man + /usr/share + + + + + 2014-09-10 + 6.01 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 6.01 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-01 + 6.01 + Rebuild for new perl. + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-09-06 + 6.01 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + + + + perl-HTTP-Date + http://search.cpan.org/~gaas/HTTP-Date-6.02/ + + Osman Erkan + osman.erkan@pisilinux.org + + Artistic + GPLv2 + app:console + programming.language.perl + date conversion routines + This module provides functions that deal the date formats used by the HTTP protocol (and then some more). Only the first two functions, time2str() and str2time(), are exported by default. + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/HTTP-Date-6.02.tar.gz + + perl + + programming/language/perl/perl-HTTP-Date/pspec.xml + + + perl-HTTP-Date + + perl + + + /usr/lib + /usr/share/doc + /usr/share/man + /usr/share + + + + + 2014-09-10 + 6.02 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 6.02 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-01 + 6.02 + Rebuild for new perl. + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-09-07 + 6.02 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + + + + perl-HTTP-Message + http://search.cpan.org/~gaas/HTTP-Message-6.03/ + + Osman Erkan + osman.erkan@pisilinux.org + + Artistic + GPLv2 + app:console + programming.language.perl + Class encapsulating HTTP Message headers + The HTTP::Headers class encapsulates HTTP-style message headers. + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/HTTP-Message-6.06.tar.gz + + perl + perl-LWP-Mediatypes + perl-HTTP-Date + perl-HTML-Parser + perl-URI + + programming/language/perl/perl-HTTP-Message/pspec.xml + + + perl-HTTP-Message + + perl + perl-LWP-Mediatypes + perl-HTTP-Date + perl-HTML-Parser + perl-URI + + + /usr/lib + /usr/share/doc + /usr/share/man + /usr/share + + + + + 2014-09-10 + 6.06 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-24 + 6.06 + Version bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-01 + 6.03 + Rebuild for new perl. + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-11-16 + 6.03 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + + + + perl-HTTP-Negotiate + http://search.cpan.org/~gaas/HTTP-Negotiate-6.01/ + + Osman Erkan + osman.erkan@pisilinux.org + + Artistic + GPLv2 + app:console + programming.language.perl + choose a variant to serve + This module provides a complete implementation of the HTTP content negotiation algorithm specified in draft-ietf-http-v11-spec-00.ps chapter 12. Content negotiation allows for the selection of a preferred content representation based upon attributes of the negotiable variants and the value of the various Accept* header fields in the request. + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/HTTP-Negotiate-6.01.tar.gz + + perl + perl-HTTP-Date + perl-HTTP-Message + + programming/language/perl/perl-HTTP-Negotiate/pspec.xml + + + perl-HTTP-Negotiate + + perl + perl-HTTP-Date + perl-HTTP-Message + + + /usr/lib + /usr/share/doc + /usr/share/man + /usr/share + + + + + 2014-09-10 + 6.01 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 6.01 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-01 + 6.01 + Rebuild for new perl. + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-11-16 + 6.01 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + + + + perl-HTTP-Server-Simple + http://search.cpan.org/dist/HTTP-Server-Simple/ + + Pisi Linux Admins + admins@pisilinux.org + + Artistic + library + programming.language.perl + Lightweight HTTP Server + Basit bir HTTP Sunucusu + HTTP::Server::Simple is a very simple standalone HTTP daemon with no non-core module dependencies. It's ideal for building a standalone http-based UI to your existing tools. + HTTP::Server::Simple basit, perl çekirdek modülleri dışında bağımlılığı olmadan tek başına çalışabilen bir HTTP hizmetidir. Tek başına çalışan, HTTP temelli bir uygulama yazmak istiyorsanız idealdir. + http://search.cpan.org/CPAN/authors/id/J/JE/JESSE/HTTP-Server-Simple-0.45_02.tar.gz + + perl + perl-URI + + programming/language/perl/perl-HTTP-Server-Simple/pspec.xml + + + perl-HTTP-Server-Simple + + perl + perl-URI + + + /usr/lib + /usr/share/doc + /usr/share/man + + + + + 2014-09-10 + 0.45_02 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-25 + 0.45_02 + Version bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-07 + 0.44 + Rebuild for perl + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-09-07 + 0.44 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + + + + perl-IO-Socket-SSL + http://search.cpan.org/dist/IO-Socket-SSL/ + + Pisi Linux Admins + admins@pisilinux.org + + Artistic + library + programming.language.perl + Nearly transparent SSL encapsulation for IO::Socket::INET + IO::Socket::SSL is a class implementing an object oriented interface to SSL sockets. The class is a descendent of IO::Socket::INET. + IO::Socket::SSL, SSL soketlerine nesne yönelimli arayüz sağlayan bir sınıftır. IO::Socket::INET'in gelişmişidir. + IO::Socket::SSL es una clase que implementa una inerfaz a sockets SSL, orientado a objetos. La clase es descendiente de IO::Socket::INET. + http://search.cpan.org/CPAN/authors/id/S/SU/SULLR/IO-Socket-SSL-1.998.tar.gz + + perl-Net-SSLeay + perl + + programming/language/perl/perl-IO-Socket-SSL/pspec.xml + + + perl-IO-Socket-SSL + + perl-Net-SSLeay + perl + + + /usr/lib + /usr/share/man + /usr/share/doc/perl-IO-Socket-SSL + + + + + 2014-09-10 + 1.998 + Version bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-24 + 1.989 + Version bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-01 + 1.76 + Rebuild for new perl. + PisiLinux Community + admins@pisilinux.org + + + 2012-09-07 + 1.76 + First release + PisiLinux Community + admins@pisilinux.org + + + + + + perl-libwww + http://search.cpan.org/dist/libwww-perl + + Pisi Linux Admins + admins@pisilinux.org + + Artistic + library + programming.language.perl + Application programming interface to the World-Wide Web + libwww-perl collection is a set of Perl modules which provides a simple and consistent application programming interface to the World-Wide Web. + La colección libwww-perl es un conjunto de módulos Perl que facilitan una interfaz de programación de aplicación, simple y consistente para la Web. + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/libwww-perl-6.05.tar.gz + + perl + perl-URI + perl-NET-HTTP + perl-HTTP-Date + perl-HTML-Parser + perl-HTML-Tagset + perl-HTTP-Daemon + perl-File-Listing + perl-HTTP-Message + perl-Encode-Locale + perl-HTTP-Negotiate + perl-LWP-Mediatypes + perl-WWW-Robotrules + + programming/language/perl/perl-libwww/pspec.xml + + + perl-libwww + + perl + perl-URI + perl-NET-HTTP + perl-HTTP-Date + perl-HTML-Parser + perl-HTML-Tagset + perl-HTTP-Daemon + perl-File-Listing + perl-HTTP-Message + perl-Encode-Locale + perl-HTTP-Negotiate + perl-LWP-Mediatypes + perl-WWW-Robotrules + + + /usr/bin + /usr/lib + /usr/share/doc + /usr/share/man + /usr/share/perl + + + + + 2014-09-10 + 6.05 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 6.05 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-11-21 + 6.05 + Version bump + Richard de Bruin + richdb@pisilinux.org + + + 2012-09-07 + 6.04 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + + + + perl-LWP-Mediatypes + http://search.cpan.org/~gaas/LWP-MediaTypes-6.02/ + + Osman Erkan + osman.erkan@pisilinux.org + + Artistic + GPLv2 + app:console + programming.language.perl + guess media type for a file or a URL + This module provides functions for handling media (also known as MIME) types and encodings. + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/LWP-MediaTypes-6.02.tar.gz + + perl + + programming/language/perl/perl-LWP-Mediatypes/pspec.xml + + + perl-LWP-Mediatypes + + perl + + + /usr/lib + /usr/share/doc + /usr/share/man + /usr/share + + + + + 2014-09-10 + 6.02 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 12.2 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-01 + 12.2 + Rebuild for new perl. + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-09-07 + 6.02 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + + + + perl-LWP-Protocol-https + http://search.cpan.org/~gaas/LWP-Protocol-https-6.04/lib/LWP/Protocol/https.pm + + Osman Erkan + osman.erkan@pisilinux.org + + Artistic + GPLv2 + app:console + programming.language.perl + LWP::Protocol::https - Provide https support for LWP::UserAgent + The LWP::Protocol::https module provides support for using https schemed URLs with LWP. This module is a plug-in to the LWP protocol handling, so you don't use it directly. Once the module is installed LWP is able to access sites using HTTP over SSL/TLS. + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/LWP-Protocol-https-6.04.tar.gz + + perl + perl-Mozilla-CA + + programming/language/perl/perl-LWP-Protocol-https/pspec.xml + + + perl-LWP-Protocol-https + + perl + + + /usr/lib + /usr/share/doc + /usr/share/man + + + + + 2014-10-16 + 6.04 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + + + + perl-NET-HTTP + http://search.cpan.org/~gaas/Net-HTTP-6.03/ + + Osman Erkan + osman.erkan@pisilinux.org + + Artistic + GPLv2 + app:console + programming.language.perl + Low-level HTTP connection (client) + The Net::HTTP class is a low-level HTTP client. An instance of the Net::HTTP class represents a connection to an HTTP server. The HTTP protocol is described in RFC 2616. The Net::HTTP class supports HTTP/1.0 and HTTP/1.1. + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/Net-HTTP-6.06.tar.gz + + perl + + programming/language/perl/perl-NET-HTTP/pspec.xml + + + perl-NET-HTTP + + perl + + + /usr/lib + /usr/share/doc + /usr/share/man + /usr/share + + + + + 2014-09-10 + 6.06 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-24 + 6.06 + Version bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-01 + 6.03 + Rebuild for new perl. + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-09-07 + 6.03 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + + + + perl-Net-SMTP-SSL + http://search.cpan.org/dist/Net-SMTP-SSL/ + + Pisi Linux Admins + admins@pisilinux.org + + Artistic + library + programming.language.perl + SSL Support for Net::SMTP + Net::SMTP için SSL desteği + perl-NET-SMTP-SSL implements the same API as Net::SMTP but uses IO::Socket::SSL for its network operations. + perl-Net-SMTP-SSL, SMTP protokolüne SSL desteği katarak güvenli e-posta gönderimi sağlar. + http://search.cpan.org/CPAN/authors/id/C/CW/CWEST/Net-SMTP-SSL-1.01.tar.gz + + perl + + programming/language/perl/perl-Net-SMTP-SSL/pspec.xml + + + perl-Net-SMTP-SSL + + perl + perl-IO-Socket-SSL + + + /usr/lib + /usr/share/perl + /usr/share/doc + /usr/share/man + + + + + 2014-09-10 + 1.01 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 1.01 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-01 + 1.01 + Rebuild for new perl. + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-09-11 + 1.01 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + + + + perl-String-ShellQuote + http://search.cpan.org/~rosch/String-ShellQuote + + Pisi Linux Admins + admins@pisilinux.org + + Artistic + library + app:console + programming.language.perl + Quote strings for passing through the shell + This module contains some functions which are useful for quoting strings which are going to pass through the shell or a shell-like object. + Bu modül kabuk veya kabuk benzeri bir neseden geçecek dizgeleri tırnak içine almak için fonksiyonlar içerir. + El módulo contiene algunas funciones útiles para encerrar cadenas de texto entre comillas, para pasarlo a una shell o a un objeto similar. + http://search.cpan.org/CPAN/authors/id/R/RO/ROSCH/String-ShellQuote-1.04.tar.gz + + perl + + programming/language/perl/perl-String-ShellQuote/pspec.xml + + + perl-String-ShellQuote + + perl + + + /usr/bin + /usr/lib + /usr/share/man + /usr/share/doc/perl-String-ShellQuote + + + + + 2014-09-10 + 1.04 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 1.04 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-11-08 + 1.04 + Rebuild + Richard de Bruin + richdb@pisilinux.org + + + 2012-07-10 + 1.04 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + + + + perl-URI + http://search.cpan.org/~gaas/URI + + Pisi Linux Admins + admins@pisilinux.org + + Artistic + library + programming.language.perl + Perl module for Uniform Resource Identifiers (absolute and relative) + A Uniform Resource Identifier is a compact string of characters that identifies an abstract or physical resource. A Uniform Resource Identifier can be further classified as either a Uniform Resource Locator (URL) or a Uniform Resource Name (URN). + Bir URI (Uniform Resource Identifiers- Tektip Kaynak Belirleyicileri), soyut veya fiziki bir kaynağı belirleyen bir tekparça karakter dizgesidir. Bir URI, bir URL (Uniform Resource Locator – Tektip Kaynak Bulucu) veya bir URN (Uniform Resource Name – Tektip Kaynak Adı)’den daha ötede sınıflandırılabilir. + Un identificador de recurso uniformado (URI) es una cadena de caracteres compacta que identifica un recurso físico o abstracto. Se puede clasificar los URI en Uniform Resource Locator (URL) o Uniform Resource Name (URN). + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/URI-1.60.tar.gz + + perl + + programming/language/perl/perl-URI/pspec.xml + + + perl-URI + + perl + + + /usr/lib + /usr/share/perl + /usr/share/doc + /usr/share/man + + + + + 2014-09-10 + 1.60 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 1.60 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-11-07 + 1.60 + Rebuild + Richard de Bruin + richdb@pisilinux.org + + + 2012-09-11 + 1.60 + First release + PisiLinux Community + admins@pisilinux.org + + + + + + perl-WWW-Robotrules + http://search.cpan.org/~gaas/WWW-RobotRules-6.02/ + + Osman Erkan + osman.erkan@pisilinux.org + + Artistic + GPLv2 + app:console + programming.language.perl + database of robots.txt-derived permissions + This module parses /robots.txt files as specified in "A Standard for Robot Exclusion", at <http://www.robotstxt.org/wc/norobots.html> Webmasters can use the /robots.txt file to forbid conforming robots from accessing parts of their web site. + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/WWW-RobotRules-6.02.tar.gz + + perl + + programming/language/perl/perl-WWW-Robotrules/pspec.xml + + + perl-WWW-Robotrules + + perl + + + /usr/lib + /usr/share/doc + /usr/share/man + /usr/share + + + + + 2014-09-10 + 6.02 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 6.02 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-11-06 + 6.02 + Rebuild + Richard de Bruin + richdb@pisilinux.org + + + 2012-09-07 + 6.02 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + python-beaker @@ -32424,7 +34491,7 @@ uses SIMD instructions (MMX, SSE2, etc.) to accelerate baseline JPEG compression admins@pisilinux.org GPLv2 - unknown + programming.scm Fast Version Control System Hızlı Sürüm Denetim Sistemi Git is a fast, scalable, distributed revision control system with an unusually rich command set that provides both high-level operations and full access to internals. diff --git a/pisi-index.xml.sha1sum b/pisi-index.xml.sha1sum index d0542bf368..ff69a0cf78 100644 --- a/pisi-index.xml.sha1sum +++ b/pisi-index.xml.sha1sum @@ -1 +1 @@ -b7d135d54083c27e21d04647c893881e5532c789 \ No newline at end of file +1c0684ec1c4864118d5c3f330e65e2927d033b5e \ No newline at end of file diff --git a/pisi-index.xml.xz b/pisi-index.xml.xz index 847b4793ee99f21b6140a1d7d544bc56975c4dc6..314d38aa9b5b6b700741adbc29f487c78b352c52 100644 GIT binary patch delta 56074 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 delta 48326 zcmV(rK<>Y&{0N}H2(TUS1&cx8@BgzR@Wyn1e>3MD!;u114-w}n3$Sc5RSe{*sv-)j z$^#Yb_WfD=Qa_y%WqSBaaR{E#Oo8zMYew+(oajy3;qW)IF#hwG8X~OwP}dHFjsouP z%gFHh!As^~hSOhhU3E_D>S%w)iN+MgA6X>hA*49T^^tBLjgvT+PqP)z@`Ins7{n8Q zT48KlO6?=R2x(JGSXfc;n?u0b3G1ZxV4w}v0Y04^B&G~reF5@vN@`}_K3s^uL=ks? zZNSJ4yVp4d-bWMiS-B4+t`*3MeXYKyg3EjxB?-#BHF-%k_jcWv2%@(wrzJ9WgHhQb zYDn5D-QP{Q>A)FFh2HJzn*tQ?`QgQXPeJqdS}jO3-39=DAdMHf^Si|Stdvc0<3|9Z=# zi3XlYyZXT_$5%Zw2S0aDDnr&Fn8HIJB%#EBArleYbaJybIM-4Ft?`667}M8zBwDhq?-C2AyWCvp9o~$;u>Y$YC5E zrZzz4&*QRkkOw$qz;9_-g3*#&HZcBVwadmi)xNR%gRn#43>}PMv`FZP(8T^{aqLrq``Hd1(E{8_khHuqx7bsVIxdU`I=nru?$RsiQAN&Qx7`(%bYz%{_T z;K;WhPK>f<+^y>T93D`|Ro6`KeB{I(J6X7bu)!A0`4G92jV`fgiNVZ_NJkR_1|W;z zICwo5vfZ!%FA;OPz;ahSNxNDUx{qx(2%ueadx5E<(&`U#6x=xF+$t}t#>zD zKb6TL`70QL4xbD~*|6mg+F(}mbi;w|02vc(PB6vE&1GbNsZzBlbgo()zX(yaEryI{ zshi#$^&8qX73;|Dt2x8gOx-YRqqmH|WPWkS7uB5Px5yk-UT7SCtE_p@k(FU_%TXp9 z+Piud%<;H9UU1$G#M7Y0|LnngGFR^UU*&m62_!sXmG2PlZ^VLG%uD8ssXGpQ#W zXmjd2-DVtr*2u=?=OJ8lqmhpipv?gZ(tbOr0Gq(>-Fk|~loCBOWZH?Mhu$%o$5j`# zf^bAQ!*f)HqH1JSqmGn*M`(`CgrB|)8CF8@$EYDQYuDy_XFs|!ipU~J4w7SJnuhW` zHTNl%i5nUZtQ>ugOFa7s^^lL@z(5Xh68x-`oMOX&92iU!XG&hE+qJlNBFIU@I?*CT z`%TV$Mna3}M(Bc<{*S{5s&>9>`PMp$ts+qLevw=yKozs5PW?XW;Q%6B9pw>VP3GSB-#}ki2#ytJIvmlK&!XfrgC#MDx0Esd_7m+wZ_E^AECW_(4 zDj!sTP9VHV7`?Fi#5!2r|>+{w^;PQ*55vn)^p{#Iph+ zozpaUV%`mU?xpSlne3B*7zik4ZE&7S5a3s{xBto%(b)T{yg9g90Np#sV1OU26x4as zCu?gRRbLDLf=c>S(kWnWOzE3_ILSE|eS&jL zU~X47Hs5m^&kQx4F1NmTd?NCMk6ABfm)f0tkd6~*I=L2|jdSFnrF0qwoy|+iqtVb5 zhG!;)FWwm=puSVLEW#in1?zrqdjxkhm^6{H6?m7YWy+DoFHG7KY21q2zuXgd-6jCZ zaPaA9)AVJy;7wmu3lY!;$_e*}K%wF?L8Yl`(;02pnM*)?kJfL;h0Ga@A{ z+eMkJ^_EM*>8#Lu$9)aZY}e}rLvCzQ_9fI8gcijX;D!-pwMWPYCI84TWv#?2iD{ky z<`x^Nw&0($;{W2w)&xI)!TcQlzzBq{%m3Go5CdSb`Fc?5jFWyvSX+O3IE}M^txRZh zg{CmrX?RFK^KthVHgLqTeU?`3-ZJRfaVrnW1*~I!j1ukrwPynd z6h}Tt9xg&cc=CnzR`QEp;#aI;%~*X5n-o^^k7C=fK_GElWc%Hd5u(D<9^WtCqx1(Wm8keGOD)Y;A3d&h3tlHe!%394 zNuyfCrBj1d5+zn;&NM8APGiyw4NT>(JR8RpJ+{V#s%=1 zUsDna!S0>t{PX>`)bgdoZ;)ozR>aDocnayqnNvgi4~mE=#@h%gjtar17Sm_XE6lu>2#e2AJZj&(5sc6A!&I+58!aA zAr(8?KTTi+GUV+~p~MD*=ET9^9Iy)7`P%vO%N9wz7^!Wy>d zIG0Jh_~|v#vrJXr9U9cjW5?wrWsFh)eQs4Os$k>kzf zVa@etf@+x$N_$t7bP+lSWir#j7NgP3d6(RfKhPrbkUqr<(Kvv@GEz#1-WvfNWfia) zy$UE`2M^|1?2wUVg5jO;CLW~%IoVM3s$zg&N>|F^ybW5rCvF~#tw{{4YS|ZyHvO5J z;3hlqurKd_vmgO9_m|gnMYxkWZE?}_E_5Yg3~{y%KpE_370b_fHpO-#0`9fBqv7?S zn`zUEDbR<4_sT6b_@V_hU5)DiGpAhx5BKizN5IpFHOL`)aT#7V3-TQ4v!%Y)d7D&~ zlX%UITIdia&FLZGHh926OS_xO|DS2U{uOa212=wu4Te%%kSzsa*Qp5+Q~k-I^Z*H6 zw|A^dHM5ELm2oC}Zzl?iNInTgZ38&y7nQ;!Z6dtcq>kD9{GKH|1iWCMPGuE!1OUC3 zwAfB7)6v55Z1{@tL)r2xbJ32|h%It|q*7%`dl)K_p5i>D7Ru##uJ3wJE%ne#%7`fh zG`sy*XQ7k7B4Gu#rY z^A~m|@FwJEcJqQ6+}8zUb?I){lG*spvYT^7Nj;$cnXr|Af#fcBzW> zbl&Bnpw5Mg&m@!yjXx3dfXVWK@M;vvjwmeKeqqEpVBdC4^bjNFt|r!-((zP2pvmoj zjn>x)A9a$0Y=cjJquiWl9dQ|X8#WK`;uTHYe5&eWJ(P{0CI`lSa{YQgZgEz!b=dqa z7V^{oXF>a%o6<6Sp2v!Ta$&$N8><5>)VTgk|qny?+al z;_f#=L(V-zKjaWziUiPuNQViV5A5>b~`?}b| zBid|dHBIPwP1cgGez*fXgd5_Ae+e>|dVXruJzhMJV`Fzn9>vMMa6-qHZe}d4^-xzx zNz*22T8Hu1xCaIg55UBKO4q7rJUS-0yD#t@nkdAqJ9nHrkZ)udZ08;>#%6SJ{VTK& zy&YaIotOP92jiAUe8Gwf$TX94{8ZMZx+Q~MuqqNBSeUe$Z<_PPdR4eLP>>@?Unx6& zH6>Hl@Y?&XLT%cIptIL0c{U&?A8pKo_vxAZ6B~AwB{F2aZ=5ACK|N2?7Z2~C69vh| zp}v!*uhK-;S zgGIp|5$q;JmG>IaMQvf_=zvkr-dQ9>d23W2($^8N*um<5&>}ONSlxPo=n9;#lt!Da zxaX=>OAWZe9}G;j{;Rb*$e8)-(Nj0DdJmEc8{B-x(bWv9Uwc<&^EL+~9p~bu$de#~ zB+r2!=4ZPN*Q>^6EYGe>*9SaDe6<<_8s5v*KYmE;gS%m`h^pUywc1?n5P=XsC|xvO z7J);+-aV3kp^~j%Dppi-ybYDi9$o^70iVh4m#UAubaT}OVAUT{t#Y91_~>1(QZT~s z0rE{K!UiBNrDu}a;~d8ZM+?+5dX_snTu^c8ruK#YSw?Pfc@wr&eK1BT}tEy#Uc`2qtB{l&(Du z>)7u7EshN(_Wv#1f+S4oMAfU;tbSY>i{*)XY;y#MD~Ko-p$`9Q{ z{tE>d$Le~zTwr<)V3O{3{e#!(R4gdcg?>X8D|@?$;Lz*UZtA(jss~!lZw={_T$A$U zM`Ln-gGXVC`r{_B@yNe8z-?PXONvEbRx+gm2DSl+YmnQa{{BB^<6gv$EoV5hu)zD)WCzYnCq7?CqIp zydBGki3JI5Y{%vZeq#PyDo}Eo`dI)}2H~obGL8DpMa=Sy^2@DpfVgfy$WGaSbeU32 zO%s>LqyjbLbJUv=Yuf7aQs zEbJ?%$UbjUT5pSyJ=h<=&Mwk z3QHyTIb~R2+WomIPX02lNo*-?M;L~JmevrV*y=_k^J=T{IjSm2*0LQvk_L2q02lAceAD|HlO$TutM z4WcIzf<5k#3WrNZm}OLx9JsS6K09rkq-cffgJ)*e$4g+{x3TvZBxx*$hBr?v{MfcK zc(c4pz$-=~@ddC#Gx}r1t{f9&&dK+^9RdyG+C!f3m|s5J;-QPZoNx4huJ4M^*;tj8 zljr{0t?;r~>t_J={Ge1OUbTPO>rboupO`i+3=u1UZr zQOY#(Ua`~kdFR$70_T5!aa3G|=J@>BP?BQ|i-zQhg~z8g>YQT1%u_)39Nt8=+G*9^ zH_IP%9AdqxU%&Uc7=t$+r=`Y)Ve`F;OPcA0ozix=J%w}=F#3AJAgP9`hpel-4Q$UW zwGOv00q>(~G&}29qXr0N$8V}O4!Xh(sHptna!o$v8bOVoFKUq!By)GC zP{vd>6gC-W3{5wPg5zeh>3HSOJ7)zYUp)Ra2+Tyhth=NI;RQT6A)T>Ser!XrpLWJ} zp-8N~x}KKrdiigE9s0zAr)dkwm4Rduq-;izj-Mn8RSD|l5fkvh!8mx_ zMFCS_73dXnerkFOS!i`%>>Rap-L4u^h5Tj3lV$*s40U_N^_A?}`a-%#=14qWmA?h!4w%%0pCP6ROD z`gO7IWSZyk`bq610yf@H9xTvjT$wAco0TWmcdjdc-K+KP8Uo7?_$)bJw&O$Xb^>y? z`akC1@(P->*;xI)X0XTzprmy)m&W(2s^8OobGqI4S7NErXy#133^d)AUtn6f!#k++ zc9pTXH$Ze3N@f+S;5F?VZ0E#|gYI-~=Y%yNL@n&f4qT?G-3B{8iP&{YY@R?C^ngNM zN);76lS83GE`c)C(}Y4jJ`H+cJgeR3q{5#&KGmW3IjUD&%VVfSKvIC0VeeN z%vBF%sOD*RgMszpaaJ$NsdaNJs$4k6cG*dGv0{gaSy>F z)@kFwXOx+de0=1awyCW_CD)J;T;-A2x07FgwJFIr@mC1S>a;nzOJTy_7m8AhmGMl< zJlz7egZ3&TXL0&v$KB@fI{`IYtld?hs~R^$fnQE;xX5MNz}{LeAR@)B{mViCKz4e z)29psB=mPXXA`AMpsg16SV=*NMY{3pO|F2VhZ9;EBEmcD$|vO08o6)pCUg{*d~F$! z5Il2^@X_=35Fc5S=}|)TLXRM7tYhGR#PPmlm}FjEFzyfPM{32HwX2lw5q7B1HC8qC zd!-UPZODljQQP2BDHM~24gvQ;0(#eIzVY1{5Pa0-#~zW7nH}rcgk&P)hAwzbIjoqg zc&J$60)Q%)N%I{Q9Hqw@yQXwf5Mj`DUNgid#Ju&KG|1$0N7261CJduXrrMl;Yf2%0 z+rUits{JWyjNllepzOozNV@_8n_LCp})m`n@vc=a#3|laN%^YJx_$Im?CAU`YB^Ki=eaw#qSRtEWq_M28V`Bv5 zUemuas7Yo%7f8fJs0AX<*$!!axO3}AmXwi4%Y6W{!RaQ!-h;6Gn92{OYuw}`?4WnZ zTbT@Tp4O%97!4_dT$V80KI8-k^v!Ujprb7NA(72*g-<;2xU41p`!<$;(^7lWZYF=Z z{&{db?EN%*25GE{G@Z07e0S+(q-&4X1(O=UJVQ>We+g*05SYu->%_k3-K?A!`Qmxg zA;;g+TEpxL%?ze>Y^9>LGYPa=pY3-TDqdssUQ#$a{JH*`B}UuX!JmDhTUJx1qHvyjyMa2Fy^)eiTZ=)F8C`q2#qR|fkAaR; zA9ytz$q=WyX_n`Ill+>`teY2Vw=oE&u7F5RM)nCd#H$K%SU2{v7-bmuE12JMl!RKl zt8=gHQ2lR}+|KJk!q8hM|Kc3uC%kivC;`Syk-rRDVzi9bDOFFf>?o>Ne)%v9aFD6g z>>3vq5MFeGO&P#j3#Af+V8uqZtMp-sl+`tLz66cb!jkBJsEOK|s-o_JwnetP2m9?a z!-o!V97F!(vC(8z@*6Ge-BE4XfcBKrn?a{bKi&lPA`q1-e6a)IvhYUih=Ky+c5Z)5 z0s{g{Qv4F+Y7D)A&ajVlC-iwBBAvH_Io*4o(lVWA3I%bfx$9=mgh8kHU2n|uRhk$h z7PLcFZb^=RX`%E{rt)Rgz3UZ^*%?P;S4@-B0;8 zHh2H(*+d-+@^|Mvz(@|Q&}L6(OV2nbeF>xtPKLA3qple=BnFZ&10tSD{xQp*6XtSy zXdHf8uxJzVn|MlipC#KPd~Bap*B8r6(RpS0VP=IT#<+Wd` zcO~e5K}i*K-kKRnkk8-{=c+6g`OI&7x#gQIU(0%RVF%rcbdM#KA?qB`<;{4+V)b_t zVX$QZnjaIFNjeac9`@U=f3q0N5$fs05#txcrS7GO zvOCzpqaU0pYYG%FibF(oATcADwJ;~pn2vCNRu1|2-RB$-?gqFeZ87!{YRrl7U}tN4 zMORh}eyuAZRh_n3PE*vjq;a^uhYJIxEInuWsm`9u=$*7aP+vtPDVRSY#XHfJQQ{RT z1r7tWZqLnJ{$uJnK`AhbI$+RuSCI|arlbCO^YQ9WjW{P0fOHV7#Ka@P)>iZbX4V9>j^;n<8} zzUxQBh6^{`yh^1yH#2jg2OzuvZu^9PGt39>J5|B>Mr z?0>HmlYD)>7yNw!g1P%8yCb)marvxsJ`rLe(}#8Xh#T-N6bA~Mg@?U70Q$VjJlHCs zh~0&3T*Z+>gm|cKFUg_s=(+_9$c>#nKLD7tC%W1grn69WSp<*A$u_4hHS`95Dm?cY zvxqmNXPvS3zTv$<*kUpUP}JeYUcp0l+(uck1rapJXujOQGC0z3Xu#?Nl!oIn;%QeN z!Mw$!=(O47pYCx|5win`TC99ST&+3q6c?>UZz*Gkj*bL6+iLt`EF61!iS@{Bo0@+@XQEB=Z;_6 z(~pHnG}mAmCXY=Z1vPIa=w4+RoK)!3U$*lr+~(Zr>dFLlM6z$}z$Fc$&OBnm76~<@ z7(dsnA?n|Kj2$2}=+XK4P{2DP zFR6fpC@b_ryw@fHiJ{m;n&`L?W4={zP!d9;Q8)b!5;F%p<1{ln9h7q1ki|pQ94~Fm_iW%gpOln4Ob!(O4jH z%z4E+-eVrTDUBLJ(B}SszaV2k#LN~d!Pn-)j9*&k#Dn4|o`P!CC0`J+?JEY}v-aF4 z{iU&gR@Wp5_mH%T7HcL!=|nDQ!DL>#m){?@Qw92L9FIgfT3<}3d3xQNi@>#p_Rpa z{Z^!wb&`)?iMTu4EEiN!#LfWC9@{zHu=AVM7{9o}&cR*inK9^0wCi%igig6$daIG` z;f?@h>buNUNsBX{*mNL_PLDut)b=3`D*2is_sZ7uvg-PO)LNqoql<1Op2Yx4GtA-c zOX%u7@jG_EP6^Gb35-2ak#~Js(}vT2ah#4HVKbyw6BTqPoK2?n7PTu2flVHNbwMrX zMc$R2!ujN}D@Q_xApy#Hol3tiH3{7-Qkw;&)Y3m8XJjpa)y`P(r*)tY|gsl_=l_ZX}N8!kzFgO@QP8#z*!+4Fc_QH_5~t0xtk3~5f`*# zUYsBDaSVJY2$#lW+o^0byhaHcVWKqtyny<8XP?2k{D{o*erP{$F3sacN%GJ zEzE_6ei1}x8iID#$lX?C;j zic!Jm87mY@_%dBMhjXX%^SwXqEly#NCKM@x>~n;Gr%yQD&6C9U?Uj;9HnC>H5s0_J z0#mr}@GO!or(N7r$bNx7>hZup<0{y%6Ow)pFXHp!BoKh?b;r$U(!P?De!5(k3-jEUd262xwTOCui5Ry* z-VN{R0fo!4D2INtck`Pcy5}A-xECh16t$XQ>DDr5LJo_2xDw*8lQ0FL!hZ9W9bmf+ zoxQ0b9Mg1=LJ}!}!-L;c(%#8avu<%1986@QO1JONUtJTYCLstsK>m+%YW~r0$z*~S zS_yQ^8c&P>NFMu*&ujj=AlL|hAh0tdI`Oo6*w4jvuWSv;YZbU#GM@38bU0rh8irlO z2x<&Hhk3P0jT6`+Vl(D+X zM=m9&Y{0A~cDIrdy``B_)1I=2l)bTO##4}eyZ<1cTo(`po7MEgEZY>K6xXw2?{@LB62u1Mp6cBxJq?gnwDl z@W;(eKjuO=o5>1Bv{wm#x~Y-<#%m7r{{wsM4jh(e1~@_VkpnGw$Jep4ietziGsMZ4 zVTg!^g8SvwkApn-ax5jX>+p(d7(0X%57hVvu{OaH3YIYQmv{SlgGvb(*@Kdb@{xE2 z@hVz(?ZtAi6;?*u2y)gbE9)*h3)>O=P;Xb%HcLcSr{{Se+`!a-;QX%H$F<^UaY1{P zj3-3Vq_n0p#!Vl7nzKpUw7=ou?eWbbe`>yK9N95_} z;8UB4;}GUnr+5dp8s_S}ihNW8dO!7K9AA%cb%~dr8LEz8g+}~vn7L_8iCp2eOx6u` z$&v*}Dox$2CftgD^c%S4#aN`btVANat+fKlyNuCr?T_u^(yb#)Lk(o3y1Xq>i<1IQ z&Wkzl)sr>c!@Kuh&p8O zEh(KQ*una)vEuvzzMkOzaPB-1o<(L_ELirDDy9TGwBysGQ2!hhn3_&ogOv z=$%++$|wKsoCF%V<@^}cLsi|uovg&N_0d@5YKKgNe%V04ud~&07~n!_F=dZ0fDi<~ z^#0XIfYBv?WEz*eq*XKP$7a_^< zXnMK4FaTdj_2_v-=>|dv#GaK;p3`{AC5AMj-}b_PFk#b;P@P?j6-Qs6Vl8V;yun45 z;hNT&TdzKjU6o1KHUM`E-`2&Wx0b!eS>x;Qrm{kumVpwPNTJsK1Gvy)6wKz%Fu6Fid1d1(#%GR(`5Qk{&FU!Y2O7E=rIsX}?a zQMW=dv^PX1k;~Q~BsCRv0$9Gr=H9}E%i)`W|K;%EOnR^P`A3l#O$1F_|RDS1|J_4cMP4dGqVD>Y`nYy+xNDnUM_p-n)2IE!OYO(?twOcONOr|xS>W8$~=-0-#-QhA6>i&CU}B{-e_H< zYwI9JCGb0w8SBFiumF=j^=8-)5Ol-So9f$Ns#t%a{0w}OdK8t76N8ht;JC;w$1+*C zrt&uPO~DdrQb*eEK4C)tlRTdVZe?dK-})yL79Fy58q90g1g;W0fKderY>`TTGVolW zsY+xq9Xz!YsP~<#7`~I#p9)pUZM$_0WoOv8sxj1>C%A}O$od;lCx(V-sY=;mv^KTU zUA&Pv53%9n#9l6L`!eQ;>iJ|DhdWAEzrqb#%0z(Ze4s1S)BSVkv-t0}IhOqCN6y-q z)kv$nsB}l#mmL=Xop^8ET%J*Xx!@mDW+-)}`vv?^S;hJC_5(^Ga5eb|l=YOw>(IkJGOby-q{p|)OTM_S+VE+|0i0pN;#fG*}y zIJ=`-b@So(u@d`mP&jE#1~eeh;)7pXdEt1NSZ> zG!{k67}|V=Lq>$U;X?aL&Y56^n|eTZh)uPQOPY)JY2+d9mdSD>da|Ew?u!|3=Y?a8 zz5_gh1s{Tdbtl}^n+UMbM{SpdHzmi@z(w{BRV$NNWZyY}$YOa%(l7<~r5pRQw zRX_$tqJ=A}Rrfez_1TLhb}q|>^zsoaTTCcG%x9FuDkf~!I^ceP(3m@k%>s*BToUYi zqd#TR459^ksstYQMrXBXvB33$wvOFuR|Wr``C;z5OGXtQfknm%O<2zOmJ4&YwV9Ai z@6*2}9`(nstSt3K|I|1=bEH)76pV2I+V*pFD?gKq|6E&)VSP_;foBnnEE=Z0eqjS8 z$wmx#n~$v7@=|GkuwYDj6g0rFddJtUxQEB3vH^CMAZOSgra@=V=j_$dDZee)-?I;auFY& zesf9=&2_r~xPx@(C+k5?0abgZyKo8iyFCE4{dK_!ukGD`mZpxuUVeLOWg;8?FuL zvqq(MX6X;!ne$X{>Kcy2o#^Y5;+CWbOVk;nwVt}u3qLR(LEv6-8XAXtEHZe^y14^R ziEK%m>P2@xq|w41Bd>jG$?epy;q9>!vSBed|#gQ(yVo_8d3nAB7(P#v+O z{iaPgZ;J1OkX||!L&h+gP2X?&zhdJrpUPXN1?d!>hwfzwBKq;^FOBQ_*F$}4N=F}jGkO^kVx11&P1QDw?tDv#I_BYtM z@K8B$Jc-ng*4-PZJy9q`)+#a)VV&zDU+fWoB&0a-=X#J|w<)zmp%?k8zqkUL>YZcg zHBOvfe>aPSv}z3a1d21dL-VHR<)*I1ni|6>De3q<27IwhU4sc|g)-1p2pIMS-@P+; z?M0pXY5lYWsPM;fJmUPd$;d7cNC!m7!u4Bs#hX@Xts+JxL0Ib9RUoH9?1w&k|qRcBSwjI zq5X{HW%pmLCo>S0?jB9j{9gj@ZT07WZB1QC^;a?wRL;NY7GhNYWV5!Qy9lx$Id`L+TX zRQ;wlvSgZRc79i_8?C=Mx1*w-kVmSIC1A1O5XsHWJHmw}(iG7{V91dtyls9GDi9}X z)GLFN%NBJO(bGycxuY~J+Mlf9X@IgOx2_&r3?tCo1Y}AwOq< zju^G;?6&keK({es1A`f@Y%741_1xIB56g~*FH%|w;kh@T^*0d&Ge zv`lp56Byh4+FBih%sffy?Jm?^qQbykm58aqgrMqbSg7T^okJDDi+=4Pmps#+|A*F`&hSM?dae&e2=& z-4hYr=pp6kR#`$l>Zn0<*QaVR;(`hE%y$~N35F9Oyrmc~cn1A{gi@8B`v}egI!(jl z&AgF|6F^lqoOEws#)^&UQYpj9*}+toCxUk=`ill3m5ql0x6eEJ?$rEk+CzFf_<6SV zpG2gvwCf(0A9A=1n?ZXtDuI#0sL6@Bs^P7WbkPRU7-++K-NLJ?!5<@dv!xOK`-Bo{ zOOm2CZ-a$e^x(YaHLw@_Q1=3t;tT&VqwW12*_?y@y(-P zUK%d3P8XW$Fj`10X8fFsOFE67g=4yan1VggZ;&Yv+^Mvt2&p^ax8t;chyMu~lHKV< z;abHWKQF5A7r1gP$_-w`B?p@{-eBv0JA%?WqiQv2hb(b8Bv)I0EO}lKXEf`4qs4-% zJ>%i_9Y1lR|D>j)5I@Adk)j)icb-yTfexs=gDk=shqkZp)YY<{Dr^0fO&uYhp=YD9qM!Pr0Vj2TRcP% zo(=D}q&{@*?KS=xS3A$8vY6aA?X}Kz!>9p0~IO`PLeu*?faMLfc_)) zR@vX`Ce;-wm?<+;u9VZaJwBx!-jKX<_RPqppAGIh91r1W*Ila&={tFUm|^XR z5@8kB^(H?3(WTw~@y;sNOHP%-9fQ-3u&IpO%@2M%#V7P?^2`u_#(G7G)a?&9&lK6M z@3?Z9xjl*D_H}~FdUR#NJ+8dB>T1Qbe?x=j(9$&N+16w{8KdazMzCvrcTBh1lNStB zMAeeFlX(rKVcP~4VF&Wy?E+Im*_}9S&?-^-tXeu1=pM&oj*eW^qKUh2qFUA@--B=6 z!+iCK8et*dmA@N*0d7a%v2oZSEcxUrIcGdcvU@6*dG{`qZv2T|f(w@z!i%Z2u!C`S z&WO@p%aTM! z=T4(NBhpO)x~~CLc7I^LI_5=A=C-H*#rNjUX&Y?7UFTATb;d+u#APwm?8evB2yE*% zZUajDp4!KMg2)-u&ZfKXG%5_QvLV#+BjE&X3OFa;OB2lcBjDB{L3AA;fS4IQ#e!?x za;fJqsFT_>-p=vfG#o_NBB*}_za$$05w3$zv6Dae~V+KXYz|XkaxQ0zdvo$ zO$n~!0*Y8ME(Dh7u@GSLENmZf5i%{;8@o0;R743NszggyJj{zPu~yT?<_huJ?={p0F(V9Nr42 z&VmVGX-l$yf5%M8M%C0Q2w6&K*nbv?3WFh`tHSZ>%Mob91m60X2Ikj3_M_0Glfl8T z)e9$oZNL6;Xo9b`f{b|-p7y+TJWTDtE!1OZ-U0t6t)iPx95fQs1Om{d@mbKKFARiT zj-8=BX7zA%&JgUl&)#!+C^Tk^)%cG_sYVmxMMH8ie_Jdp7jxL;v0F^rmMH)vyDhM0 zuRe$ah@ms`??Fh$DT_f6^o$yjp{+*fpKUtyHI)f~@~LMj^;4GPpMWc)?dplxMbc>) zXtuiqSBkW|Ax2IFi6GK$zT%td14NUhcan-*G2Plt5qBzr9-_Aa)=Ltk_ zjVvxze@uE3^Ke@f3A#%yhV*Zbe(J3bCKJhf>&zdjlpkPfEGf_Um_7@D96*{Q2$TlC z9eYsd#x+`E`i@25sc%rQd!(xN?ePvX{np6JW&h$L^Nr}*n@m1MuLnerBU3pJDy~8V zVFV-?!2WLlv8MK~pDSF}k4nq8>=}=Z&a6%Bf17H^doGQQAoZMUI4f(H*94-sM%=;` zL&uB@cWzyCEPiyiKd1biFD>t*nRrNcY$DQHkX3FV4Gh1X=W z*E4m^icYpMVQd1E6 ze=beo^z}ae0GP}$RS2}RFe0ez<(*Ja#*RoUrs8^x{22Jk*1E)%faR#y_4mU*_w@%h z=g8((Dk71<;I`YTx=XmPRuk!1|8I6PK6O&^e8J`g(?Y%|Q4!2%99Q6G_v;ZbfkY3C z52DH<^tC|sHpP5L2UX6T*1ajgEAocze;TGpS3VU#Lq2@I|1uOsi%nL8?|s4v4MnGi z1kTa6E%8e=3x_a&2Bh9&*LvO36US*@=UNWvND*6l>Mu?z|M2W{ulrI8=ue7&2&fe( zWKi+%`3mb#EPs%i(&^FHEHlkIBU0^xE}F3FE+CIAaUKFre_o$F;?q)Yz9grl)w2Dz*M4kfxERFHS9K9J{4-_kQN3 zJR0~T-LTo4goXZb& z7yOW!(JcE-2Q9MBg*jVKn%W=hmTw=1Fow%QrFoTk4H7W40b8g%+n$;g;8n|cKM`2wVSq~ z`~;Upy!CDDtqad%T&p+!MqCWunfx8S64_Q@-TZosrT>!+yUI!$~9vmxA8TbE`QB%hPR>SyhYEJ!f&| zB%kpuJIZ;I=P!McnyqDu+Vm_6YE~HCa*x#3Mt*|FXG6nk=^lwub&4j|?%)w30*Sxr zrlF?g;@SOQ&D=Q}aH!s8u36;f2*0yqLd)1qQM?*s6+)vJ}dC{5ubiYQC z>k!A{#_I9eubCuvVfRr<<`Wz76O`VZSmT`(qRYIOt8X8a5QuQ%x$$B5>>5O7tF{N8v{?3TBW^UQdeHs1cJ`Mmv*E-KaXNV9i4Po;YtN4 zm!bh$XKIWiBjuQevvv$j5t(J6dVnvv(M``qi?@(9;f3OMe@C~Yw*9(SpXS+XG|eR5 z%fAo@PEws6iro1M3gH>Y!p}F3bq1#g%g-bOI5!lI!QdaT-nJ&uOOJENd>T@mR)s%b zk{vgD&NQIHbQTG7+Ri}ozVnI}DKZ|oin6(RI^uO6$pFaFtD|UTk0Q`X)l6Q zK9Lg3v5H?1SqO#Huw;om+La$0Z7WEIQ1+B9dQNSuW}CE+$~e?Ev~0ug)Ge04sSwYm zm4R1xe|(mP9Mm6a={$2?B;Cbi4XqrN;iSj$JiF))AE>UPn@s<KY*;_}e`k)?9_wY}Zzuxe9ErJFIjt%PO`oRG!zegu%Jq&4*`Fv^8*|8epXf;Y8CfA3*k4=yI0gtY5+S1ru9f|3EWG}Ch+ zAma^hF5_e7+Kwys;1XtX^PvJiz*9SX7}#8i0R-g5DGP} z*i*%$#LhOiJ#1&;>GPPq0o1kFWC73C=!>GK*gY)z025pXQ~EXUN<~P0?h}c$y&Nul zf7+s=VW4`pMpFXCFFRzp=+*f5a4#4Y) zsU>e%m`qXJ5YcX}QuD5}Y`Wczv!$SLoe*hw@^JL>kqwGsoPWpqF)Hw2Fvx!zY`6~+` z$d8T>+2(wmdEefl9D(nfp^QDOpPbJjvh$Pko)xPoDH*I-`%kCiCJx zY$6u+O{ueJhpYX}=o+{S$!npo{nv=`p*D8=af9`Ma=}n-Uy=^%#qf(_#RS4Be;%&| zyrB$Pd{8xRK=f_tyr0Cc&D8r!c)Wf@CjLEhCKEA45rF(LCp4vYK+BBw?uj3=LQnBP z>c3?&&I@@HL{vaQn#x~O09)V3^F&y&v|;*5@)cGnOTkW&D6)=3O+*VXY%!Jc_3;iU~+M{!m}~$ z&I~*p(N^4(8JS6KjqLy#n|Q%`egaeMSA_b(tHq)-)JoP8{3o@z@h~gef0J(OQYSMt zdu&}nDZHQ@8p}5M6F>pY7X8;|2}NQ*H45nI-lV>!S->*9g>xcj(SrtU%oi#)c1*V{ zZ8jn%X%>hA^ho2}dPU+>cS)hL7L=cm&9TGzYi>;FbT&%`693;cTYk6^%OcYAaMmiK zy%;*=TS1-itR!=Fu_kP^f4VJ|4@X`Z|C)PU@@TV*BI2+>3z?&dY+aQsUw@y4(mWRx z!?1Mt>03e6l#OKSGubQ$l|NjsW&7P{O+iBPW3yp3-Yb(z9g)?>#oUU15nDXy0jI}~ zAxxMleC^tKMBF~Wo4Y9_yZehv5gFYX%-qHCpgSjd^3w@;VeHUEe+ETbPs>$VW22L= ze5*V$#%euc(olAIwh6aI;M8&J`0Y}kkH4gfWD^Q5m&o8R;4E)~sU7c%uiuCz)FVI) z>%CeogD0Vna8!SO9OhESgIaLJ&Ah6Rq#g0SBGV$tTHmefh)v*u@ejUoMFB?2oy1Nv z2#jxbnrL4NBx0K;e{QufkNn)f6F(}k>#LQoJ4>5y)PmCY`KU5iCu%oY*|!~L!!)__ zOu{Ed4{*vPwJWvFvm>E(J zMnbB7-Z_6;>}BuG)~B3rSBD{Yv!*yZ4APzf3e%1RpgR8HSbK{v3w2G z&xW)3dGHrJiQNg>4@W>IEANJWOxh^!Zm%9i@CI5? zaOBBG`nIX6U{qrgcUd^j{{d;$!+^_3RRk+|boI4ZRKjFv+}uFHctu%B37HCc$B>1I z1@1YTbft7ie?C+|Mmc3y2WJ~E+KerX&E_4n4SX1y&KlqE4^m9uZih}|LT%Rs#vA#S zJ*L>x2c2ysMQ8WLvZUqngs11yxD5^=G~+ddj^#yY{Fq@zD)Xm?qgs}6Pl>CNs!V@y zoTs7Ouo4x%HDkC|c~-=+kfmLz9)eKnVCi&tFIVRYf31bz{#_W&*_X#9oXqq#*SkGQ zz!ks)pNz2VX>gYglA1zA5kya~f|x*97)qZ2_A8b$(kGEk?nR!yEM zsQC%hI}RK6=EZimA`U%l^Sn_dYl9Jsh1|%-GVsnStrnVz2zJEPaE(Yz2<0O#c}>Mh zRnpmCe_G{K&ZGuEKAR~xVIi!GMG9b@JM*0MIX`mr0i27)*UO;h=37#8$DBUK@{sHqsW!B}}FMk9m>df!i>zbb~mO)*&J_ zI4jS{dqS10L=J_)mt-utkquJQUn{=exAR(4e}A#&8+6SpqFU}eED-{hcTvej%~iM% zc`W`_+_eBi8BujTlQ6DCx@C8HH55D*x31uru~qVFq4sZJZ-ckCMuC5P2$e=AAENc`~Y(q2Us zf4D;T*8!2g0zCEYu$sOY6TWJEq))k@%Dm9EF=S4_1mVV}ao{!=YI{?m=ipF55VNUE z%I8*%B_jTDuMLLZqup4P99X7{*lo^K&)y^a6L)0Jlc0>AZ|N&#SxkWEy7Z6z>^TS zp$mu><%33|a+C@ezB8(yL$v`;?l(u5UJZ>b4YBpMq#9#NBU31eTyyGlx$80fzY+}}ZMn=?2=JThs2yS5XtQ{y%?60~h9}+44QHt1$l;$T zcPYuw7fZ})b{^^z9vXGL`7YND#;pArIqY*71+VTfc&;=mab+<6Bzjc{b6|6wp%dMA zA1}un?-*EtCAYPc_pR5T?m%bGf7(h7rh94olp9~L5g$Jtum^CEK?4UCrnU3oaS(0f4p;&YcYOS zT$wkK3Hh0ak((RwDkb4tN)T*T_Fk9tZsgDp&A);DyHn?Lxa$^2w24)^3`lucOvpr7ogq$cgsV}V>1hcpk(o*e0rw%WDJ6IiQ!;ZGFTd)lLMzA}Rai6<3hl+9MNA`W# zQa?71z0EO2jbDonaZ<6aUyf}_9c*5rm6C`b#%ebWOXz{Hf6TZzf7BA9Lm1(-<+p?1 z=)_X!J+o}q8(k|4T}54YQ|@BV58=*?ZQ?4?rhR`anPDB)#sZJoGLUM_v74Cwrv3%a zTUSFY9K!<0J99v?wChf^&5u%EY$sawA`thK8?q@sundIJ$x9Hq$tht=2jb6Wq+nOL zIies=FZC%_?Uc0Mf9ij}$(#~EFS6p0mwxLD zK^Pk)Zs5Z$12R@Kkw%FVc1Dx|QWd=2p5@))LKzlo**z|*p#+>wl>-UoOM4MPJM;mgkC zlr*R4&!m=yC%udf5)*c-EY(73iq{Ey>02rK{HjYYusbF?XBJvJ<7O>FMH3W6^p&4$ z+crETw%xXiJnoiKI9%%npCb5bteTc;{^9&Mld4D^e_8DLX87nr*~9jL+PYeyQb<{n zN<`z}kYP8t>J{b`M(PsW1<7QTMp@wZH^&K(^ojH9A(?@I0JE>0(XOGE)i|~4!B^`d zGPGe<1;{roK%*k&Sn-OJ&>SDJsgB?kWxPyf-^)?G=hb6Ve=ok z0RP2-Iv+(YW})o!AtDLg<+}?gPKo+51%)<*pmbY6Cyz2r*22aavVIlRNGHSKg5iGz z3xpo0m66K{c>3$;xp4|uw|t4Nt738jHpOdof2S&tINFH>%`g2EXEu;~P1%vR_$l@T zk&$+#tw)qtyhOMw%*Y{T&xR@9>3PtMl-SLSpatNm*yGse9xdzOnUz|ybTClh1mR_7 zU-%rVgOs>u5DmqJ-zmeQ%B>;k`_U@@-Hf#n#}9c}z z7}8!+m8pYB@(@vJbh!%ScnSj=STW69fAM>{UioL_(#Rjry*5y$$c;pu_KoF#Lk?R$ zl?(+MJF1_GenVx-g@P?E%Pc~HVZThUl^}YP3JZ)3ZXZNvC|eW6RO0gNh3KsX zx)*aXXS7QmC1;}FjsJ9{Ui=c@V#JRmbW{T^VW8)&mTPWu207)eN2~ye*+y=iMwKNI8{Lpf!#Xd~@u_L(0X?GM}mAR&Oci zg|tgR&T$Q>=}86NY4SmlVW#KD(LmeqCo1uhQJaecoqV})U+FzR3fsi1Uwvo2kH?4Z|W>R)YLVl z1tSb~u(5#GZc*XBxdWG=L&nE2O5X~booJGn^fKad`bY#ND{Cv8t~mx(HRIAGjs-y0 zd79K)s-vst+44A!Ez(9XglsW0@~={PVRI~mNZb{MBeCsmc62_CYzwD=fAz@^q+Z;z zNy*t&N~`kl=x3DP``$Qsvfru^IA6^w59~Icjl%Eik3T4^*7{@S+*k0Q-;QGA(%EFp zc3SV{{ztuHEH360Q8I_qM7g7QU;MR;7QcbJN!Fgaa?V==b{j90f~w$~q(^Xb9}O48(f354WNhyL~k}^A$8=(=W=%}#f6xMe8#W|-ctLja$0R!b7 z2zMPML{Z;VD)NdCUbZz3>0RoDIziA~>n6lLR3b*dBao59I~$G6W|l{c`y8$BtZfc! zwT>wcz4ImT&&9Yi8Bs4BeE~Twz=1KteK_mtPAwnJP4f$4Tzq^t-4O zrSZf&Dvc&EW}2jz&u@haQF>#Bqed$5arzJ+?u%u$Tub`HvD7v<2wCTNQNn}z{0a|( zzBJ1rSW^X!2m<4Se^OUZB~&_+rE?5=9FjcD>d0MpyzH`DW|O(>*yi)c@?DHvqk!+he%3bc&d}VI z^JJyYW|2GP^H4Ph-Z;kKvr_(po)GUyWk7`8NV>U0XK037`ry8W50C`P)8ALUD$8s1{ zt545bBOs&Qb+DpCyM;EF$k%GLqe&nrt(KI|oa_Wec$N-7aC z-arqHE;lw_88!QmY|>BUC+wM~Jjjtfy5z^zkgg}_JhY^_*W$$3Sz0Qd^|VXM+?UI$ zpB|rCi+=wfA6uqWI5`GMLyV0s1M*=aUUzE=e9ht)4;lS&0%4<}pgO|0afBps611XU z7nk8sf5cKkALOJYV~$YX&&?C1Ke03CTd!30i%jE% zZnM|CT-j~3jOGqg%Z+9^r2DV4F~%+t<7gmfxln(>o8pQ-Kr`u<7GVN!x@Dn9znsRk zEwB>4F^@tvP?0WXaa#%ySo&?-9Ep7jjL=$;f3(_58-xNGQpS)>b%+tGvB(PS_Z&Cpx+>z=*|F%k~T}n~v_lGm?1HytQ4Uer9 znk=qX8N3o$7R>Ke$o_5DpSGEKlL*}0mbqK^p)79BhYtMmEP|@qedP}csmzO#5rLwk zfBi_Y=IKqtzQ<2LyMzLCVCQDaRE7p8O7~F0R=scV*5umeuazR(z}*y!X4ac=deZd$ z^Otjs@eRMvj(V=9N(nCC3-aPu)hbr^=oudEkFPO-g3}P;syr=cRO=~3^1fn?`E{@A z4fvYX_D%?9QhkfTn7>k|_>urJ}LN!n{8u^yCmqJPKR*u2F(zAJ;{}H(%7kX;! zrhg8#F7ig|@&PCSO_4Ufzb12nw@&aUOyii# z4zZ9paPvSH#FIJs4|3R78tfI4U2IAC_2lf*=g{`T2|C&@4tTldg-{lk7Z(^KntepD2mE!^#0fA}65Bu;E>zaUGpFIc0ziZt8kL z+)5B=+0iBu{Po`uHbvwEx>dNWT)x8w{@MAQK?cdQ=?gi1tmFKobOAVue^GOM(XOwB za29klKR=o^>!qYq-IFVlCcBzZfVdYpHgF;*L6Bh;=BuIoCTERW31IJs?-B{IR)vyD z(sp#ytDXvsI+<2VzwJ# zX%l6Yz*#^jHDMCtvS+sN=#bb3sBijUBPlliBpU4nB%Aq`9M!uR8(%bd5olubV@UQ9 zAR9@=076YH!sT5I8IV}zsyoU)7t6TA@5I!$5eAxNOkUj!+itg46}23VsVVWT(IL*l zA8KQMd_ftB*g)>If6~x(j_%33O+L>xe-_~kooA2&NV#aD=_0Lr+lFSqWx0TtNE43k zQ0n9ri93Q#DTC}x>}+Kv8WwE$t^b%M0dGb?JJwY92 z)WHqCt|nmn{fDp%!hLYsv{1np)NI5(M!;pnc}QhS8&Csre{}<^E)$GdgI*oae)#A9 zlBxwXhK1i>R!&K_kG9d#VrD0TY2ND`&J|kcwgo_~e&z>qR&EGgx#F|dk`7z1aUL_Y z5LJ~up|-|7FDc^sSs6$}{001hWMM~z6SJVq@Q>B*I>go)`WAkbzL%T^6`pClUve$5 zw7)A?m|=@if3+~JFrp#W=ot{aOjAeyy&PGS!hBMBx2 zBiWG;e|LzC9?@K_4xvzg+WT|h9(dQ%hN*F=7~RE3x)6}`7i07#N<@~?ylk&xQ7P}d z$+Qp6)a^3&9X8Z-{MMa`K?J@g;~L4V(!O+Lg2=L%>JelnhDNG%c16w1$|4n8T3@kH za7=Vpr;hZg@CPk}*+OQ-@LEk!3i7Cpt=dr9e>;4h{(w1kUdm8E7=Qd7Y#$z+P!HKh z7fF^;Y3RgZ_poT)h${(a1SrU>;O{`@$5&fbxBJ}83PcMr5z^oaMS&Z)xAu8>F>fcu z)Pe9yu0eR(R7^zTZB#z|x(e3$9{^Nwmb@J|E$BOrdkd*T!olo?*A?aKDX!ZR^{HgcD3ag|MAgC& zOH3)ZgfH6W*pipUxUa7#oyyTf8!M>D^C0L%bss6Ff&LjcHbMFTi6|@$MgJIOSF+M4 zHPP^UA~#cCr_#5GV5`0iIwd@?E}0K{=I0sG$-08qM^4w~~40UG*WibzWeC z&dXNK3q<0!nN8rkUlhE%Q+E_4EWok@kFTR4btI5%+?-qo?oS>cVSaI0HhtzSJpTx- zDfdp!6qUu+kKeAYe?7iV2c9%$^E7BRj$$cbhwyrPE)U3)nf>Flu@aV|f2lKXkZ?tJ zIChb*59Rte)N@dcdi3iI zEFyR+zEUj{>dfy*;SOqXe;i20y{4ytO|u$hMFG2Z6nw?vHkO`TH;O-99Hp^BM&;u3 z)M>90R@mS?+*m^)P*sICSl_bFaTZhuc*cr{-Zjr@W+yO2%%J#ca(+KLiEC1R?YX@- zZ!PEcQaXdP7?2<4X15)ZOa+-N+ka|k`*U(|`vowwoLc?$1ew~ne+tfDmFGxH{4KJA zgYCW4onvx+T@M&!-%$GTf}Ky8OoS6ZcKng;#>i3EpN}~830rav%zD)hoyPbb2Acr0D1Vgn7 z>t~Ic4}eN|OYGqAf8$e!kaU@cfsHuaE&j!wW<2}CSVfX2JAArp34d~l0(2Yqn|mb} zE98aENiLv~)>$oBBT;*>#0>9Lt}%9Um{sfXkN>2?33UfPlb@*M0qRpC0MD=WPr!hi zTCm()_!I%ZS>zuALS;YA4bC%`9ud;riLlwB91ZJPhanI}e+*CI+G4G__kUgv#LX`ja8%<0Ta;>ae#rEUR!SOrjZSk!K`-dU;B^W(S-E{8X@`0bw+31 zc-pnsBrJ_UpY%rMkcRgC+3>8}T1Y+eBr&RQkRQIZ2z{DHzgCL|I0NPxGP8J8;ogNB z=q6oiEtSxcV$)z(d#alG?*^-^0Hu#TTAH?WLzpc}e`T28#j$cnm|lDe*rvsic38l` zn!2aP+5bhwHVgP+>?zJY>GX>KY=4{0MoTs#9`D~98orUz5N#62IICc(R$Oz#UyDuJ z+Iz1E<4ElvPqm~{0se1(h2|u1X*)Sc*LjU~`PB#n{1T@(yQ9obqd?)OOE=*>3TFqi zqL?Gee+Byk=4TAAyT}0gNfpXxBdf+YzSt(wXkH^oar5d=W(4bhs@EII2l+D~ZypBV z-X$E$A~cCZyu?a%#A55=3S3(;H~PKm1MaltX_1dUE35m}{KkmWd~kqh(g-$4?lq~S z>!+g_6!?xOE!>SjZ z-50*u$WUlKI-y@nIS3}w@BSSu)`p?^?*+&}2MMKY{o11EH?^Jl0GGy%h~FZMcqjd= z!p2P!E@eF0iRv-)s|ux}+nJBXjMtiTV(HBihA#a`eVuvFxE_KN1*P zV^EphAlRB9+WS|^RBQ?#ydjrQRuza68o$UF6woak;ZPxtWi7jQ2~|Zu>OBFOBK&i| zr0A){1tXAa7|=9oS1qz8UjR+dZaOeC z7#;nGEA&(o#S5A$LW!Q*BwcqY!=Z#77ES@^p31LHf(OWQGzl3(!C?GRtiM4?>;60T zy=DxM@1S{ z80+>Kij2Jj&3c^S>`P)I>3+gchJz7jvRjkgi_Dg>w-7e}E0ZqP>m<}I*7S2~&^zU^ zANXBA0+#nA=^R5?|9#si1VT%!e}8O^hC>Q#Juzss)T9pGfLUe*rCfH+7pveIEV@F8 zD5IcgMJ3iAj`v3K#AbozaL%yzY7Q^r@Kwt`X%rMh2&Fe6g-n3?3=saK zz>>|c(Kj;I>3;$QjwU{@rJk7i7t2CK|6D_);!{uhZShF(SmLhcPZETu9a*5EPpD*h zE6T6!R1b#Gj3ev12X8*6f1j~CI(T3YX`iw|Y0h}MxzjyEc@^Gy?iaa8N)M z0(cd2#o)drf_$k~yTyLs6qdm21_a`O=W4s(QL%7jTDT*2V7X(Bzjk7}Dlu#(SAZe! z5CF_c%vcr>D6I(*O-*>;0KyI)DPd*kg%wEz3pra6;TpYw2ARPHf2_choP6y}ctd}r ztY#ez(-ZXHefZ#)erdi_xva|dmcPjaIsgnxXf)6qk$bS1N1UyivAR!>)+jH@6f^e( zuOLP@>m$!Q;88ueS8kYht$d+_N5Z*cs|`}LUE0bP>3u>GRdpvZq^4)-0@L+0FAei9 zGF8cC_mxpZv0_qHe-t}axOF}vzao)ydS%zB*F_rdM}%_>4k3p5m@)Ik3+^KMD#U=se)*v!afSKih~`7tpW-ulWNB zLwoK_MWbS9nc#W2)073)7S?FEcH+n0;8+0f1=L0sy};6+f2~=FBmF9sy&bY&P}t=@ zq4Up@*X&nXb1dBZFs5J2Tx04bq?9xYCeO$brG zBUs39gdi!}wQmLUcTSz7Shs&|8^1(f;G7ye2fiY`XgWsJy#Cm}4~g;>Yx;+_EUb(= zn4o=J(7}v5f3_h>;r8blCXIp=Ba``%J}H=eYwc%IDqA1iQ_qk8uxZR76#EAsa!8gJ zv-@>Mk(M1VL2<>%+5m}Lqji1FS0w%~d2%tV>*3HUAmg!i;c7=NsBJD;qhAH?^ zA`5CXZ_!z(2KVlWumX9t3A);Rq=!Szd`ilOFVxvne_Om(vRQgl?{7iXhk!nY8RhS* zZba@5^@FMw8}%G{ML2Y!YNLj*gug$!UE`&)_q5327BFjy*@(>|n{(BJ%Uh5lk|zB7 z?GlCpek{bf7XRI{I$Y2+Wwv#h%Eh#4$70XUfcPFp`dnq%WHwFm=@YQ zqOlL-f8wus0fIxpcV-)@(|bOlbgxNANXkO!ohNL8?7-C%l^74=pCDQJJ|lmeO%(87 z|9nu`n)YfsXkIXBlms+8Gktl2@)6awiQ2||P$U19etoawfu(udP19fV;m!b#;BjeD zp1b)R;!c%bRJ+ZY7$erGEVn5a&F_*Q-&2vMfUuat^=Fn`RUDzZLzb@ z@>)ArKfa`Yi2+6g2QtC$#hhZ0UM`|Qo^cv)mEW&-|IukvbB5vR;VPfQW`732sDbC_ z;^8a#WRPMUbBA@F2TPnLhu^JjRF}}#fA+dHnvK;Z*%;fKewIjW>OBIi5qc+LJLas# ztV}=)ydiCJ$OPBfJA`N-t7u2DA}zWr;76U`_O#Fkx>)e~z~zVbvgZvGQUKgIdYW{J zb%}b@-@}HC3`l${>?*-Rts)TYSL}CzA9j${UHtvuS5wo6BZ2-gkK?DuM6xD^fANK~ z2L>~oJTrwyH&}snItUu1^HBHT*-cbBe)1d1ybe8AT%yoS++tA_q&DD@FWUiZMyQxC zyM@1~tx*p7PznZsin!up5c4y&|K3NL6OUS(*}DnD+vn{iuKs~3K*<7L!n`~wO|OJf zuVmZ4$VhD?PmC3iV4eDgt||#Df0Fb_gO2C<_bkuRtsGe1p-iS0Lj-^-@tz7Rj)+eE zoL_Sv^22%q#r^_e5y}!D9<=58_>R3LNf=FU1Cn0_%?ExDr}q~kWl#d66krF4LDsAX z8l#P|zKZwAygCb1MX9wO%%*+DHo*(sUaA5vW8P`X5T3_E1Fx;k*oqgFe>}5jv`fAG z2d*Q_)A(Mu1yg|{&7Z7n(jGkgB5qJZF!5}UP9wns#qsp?^-Ny_YB*-`lo7iyqcj&R zrKkCFuvBOOf%X1OYq%ldN=ulfea|L-%l_8shLk`t}{(<+9JbE zFFxa!oeOn=Tl)Nqf@aB{e}u=w-;LTN?cxWy=5f0myBJ4~e^14MRyH`H=1yaJ?`Jk# zIZ%!M)BLKU3Bk_AP^`+@7%EUcyEDa*M3-qCxuu7mNIBTQGj*rU*n`TM{dBL#i1}|l z%CCVBjJ6nzc2N~RwE@96s)`mRY&rOlzK(qmz28U`IH21W`6$93f8wCyNEnp<#|1*Q zAl1JjrFFv(CO&kt8{(i@W`#W9#iNws0ri3#hM2JRy~e9trwe?pE16?vH9mIGGI@kd zLOSQ8NR@faG@gAXaiY;m`IUt+giep`0mGtwRKNbp12{rY`hT)p*>b7?S z8Pib%9KGe&W;4<Ah&1c(M49_)3R1F3yl;*Jy3%SyDKa&A?w#^&zh%CV=o2PpNl%@rHIn`>5%Jked^6nBG%*SqOamH8!=)K|-=DC<6_RJ1PproU)rGku-DLq^9 z;z?^-WgZjXjA4_yYa)LO*-QyNrc(P6?_`<>aQxghY9$^whDgeK1ztA|5-Uw)+DS4Vb9A*EbZT0P@g<(ma-wri zKe@jsa*L3U{(+RDB0<4Nq4?Y&^t-Vw0Q8WN~^BBg~ z_Pu6Pmk2hom4tv-u2Q!hK*C9lQ>Ed^p67k;wcPPa;6Kt=5fDlSio@>m``)ifhNHF>8+qhlTW9WB1m0mIe*&aTMzq;w z(b`*Dy*?p(90=2A=Z`BSK-1>6#4RoWP;llKi7E zgISDljg$shxyJ*{vcaMrf0g>@->xoZKPBxo2(D7CUqTRIWfwI~-=-_AUuMU@wSwCn zVf)RmkM>cRXIE?G*AbP9SMK1y#yeVPe7K4AeWPQy27B9;|2@4dy2)|)XHkipNj7LS zIIsJDoHIH=zcqC2@Ap4o`&l-$4sSPQemZnMz9MQ3(v8MOMhno$e+sq#$C}eJp7>fJ z#CzP~LbvVZkNPc&?wJ?y^Y>t-`o{t&&|A4xve)F~>v$9zrr(bI_8Qe04@!(V>OP-H zxhFTFPp&Uioo^ho_j1GtfdZu>c-s0Q&WRMw7}~^=V%h$Qj6LV<_;;5Vnm5U+&-$Br zHo|4=Uz<}#$Sklue@Ea2psl`Dk3T=$ly``KgAa*hJ8?Z5Xqm#6ucJH^O9ilbw;D2O zwlOSO#jt2R_END_vM*IL)jCY%#{*AX)qFf+<=Ik{D7zKDP&t^_*0yhMuv*OuTt|ws zZkUg|p@pJkQphzqPRR)9PTJ;TpN5cL5D=!Uw_chP4h=rlf5jmKKzglQ8a|`R*bXh0 zU6Du?MVo7o9pJoLPX5@Q>I3HGN;zX+Yb^cswHL!XhRX56qqgRIsjE*#5R=~GGcRea z+^7Rbmf0A4T-Y>C*naPQ1u*PzGpVJe`^!8zyOR68>If?)Iw@|sz+k&7!CD=fM)<7M z*!C0QY&%9Aa@$U=nLJP+tth!rKE3M!FH)?fcvJI4f2mAMff({V3zt_Z_Mbkepmi9( zp+sD0q!=MI-~rUaAFPMHm6ZQm8>&$ez13s%v%Ww~gHMmaV7}T&(pK+60V%LP zTw3^He?IiWr~y(nu+_FdNNi$W4E9Qp8Ibes83xUfe=FExnoO?RYumevK!IhXZZ$`g zpUR1Zx|l!J0L+?ia!SGEq&X17LEQtbn&SDF&843tRC$oFeQvPoYNzL=)kyc#Mt)2$ z%)S1`&5;CXiBK&M#+2Krf@(`Q)|%>T?gY%Ht9-^& z6m;%CJl_W6a@fl2Qia1+L$+{)6ZueqwR=Qf68(KqvCsp2bVIhHTef6r~#ewb#UF|sKb>fmR*_jNy^ z)o}$U2XF;ggcS`zd2w-GB;Wo<>3x&=&2dsO%Z5G9qj~ptkSl-TeA?)mRwBdNXemjA zBzv<%;PJr^Kpd`L_|1GMl%Mh&B~h(}=f}JKKhXMgk8AQ~cQQKA9vPAVOjtxGe}Q$S z4H6~MKd&h?5uOA+l2KI%mOp7|aDn5E=2e+DZ*9@oy5ufnbVsQ*1TghxBEu&cJmg~(@zn%-3_jfaIri|HwlJ=M?*}XYdj!jFVFl-DkEq&M&5M) zY0Ke+ws8@s+6-T%jl>SSz5M)te@Aa9vaeKiNX*4NMd4)}ti8hRe!IoIrRoEt%;j7) z2U*6R=bgg|mZlV~FucEKrk%3=h1?~WZ?#vUP(Ym(kmtx=dYR|yHm_Wq`@3JEN(^!z9~-!wqd+&qqwS?F{!kSande_#b5RA82{ zl--iIM31j!Io~FltI!RQTEltq7%`fsVgq(z!`Y|57jyqcgfNZ|1HZ;F&8MfTUP%rn@wJOk(3pT|0*iXb{>Sl zY$M0dRasN86X}x^*qh;u^nb;xSuT;*#{0~f!%CC{>J7>~HZsbUHq>g#Dvy2x0Dwn; zl-5EV)2e0E(>*3NiQ#OdRmh&qAKZ;AdwpT4(JV^@t-=8f+$D%bq5PF zP0xvEG0!W0XZm)h?|&24A`WqdbNvASH*waaqe~l(0a@MQ&aPs>oktW$15Eter6e$} zs=X7Ty%!a_2nDSeSexQi_;uEMpyaLqvYvU zAPO$|Li7)6H38^z`O5=S8k?LCfKc+OOl{UH0}{ezfAZ=Dp`dk!H#;($$F~w+%8!>( z^Vwu#?cbd2iM1&ej_pdc02A@5vuIMs zH6sK1i?TnJa)?#tcG$Cc-4jTi#A}r)(`%gflqk8M0{i@OCtFVF@a4nn;%o1j#&?0i zF3Ke4*Ov!#aO=lTHM--m#5^?|onKG){{#P>_Ti&@xqptP9m6B^zmPiBNPTM0-oxT0 zRkf{Y$C&np5gNd_)sYFF=d3jPWx?Si94EVCaq1=MuM%)BXhsIfHZcbs*B*(xiR0YRp7Vt;%bR21G6L&x?9Ue9Zna1c=vKVsdSJ&`;&pL3l9u^gaO2 zRbw8FV1F#T6%%^c@;UTz+_}fW#R-Jb5o?Y!F}M+XYym&9NQoQx33sQjtutYc^rgDq z05Sq8rx!QQNL|(rT?S>KY}*Zix;QnCXUa=nsa-{nnh*{AzwbPc0hk*y7ovuAODoO- zTz4dZTm)Lp4Q6`qIei21MZ?B{g+T+GUG;=De}A6;US$iSs^j!CEXPP!8w|t(x62WY z);g*?+>)ai{X_Mvhu%d_9%E7p9>z42>V@4Gu!fAkt5g-0mPiUKEt(;~7 zRS|d6dj11e&?__({lmDS2)F=yO+**~mD{xs+I@_qbtDVIOuiNhf;wDImA-~z&bbw_ zLn?dAY>~518GVGSkyJJQyuE^brs&7^hNN1HSp-2db8caaRKKeyN9g{(;23(ejenVD zWi&-LXe|9s9#V2R7{va{O0}xD37_xMk{kak7I92U5jfuaz59smWI8$g| z3My3cQQ+~m7$UiFqk}=ZicHCTyTt=_aS^(2(8zq5BHA-x$m?7Df9!V$!%kMM7$ZCT zwzJ3$e_;wm{jnQb=9JE!0<*A7dM887K09*q$(bmoGro2{9;St+S4PDytbaNYy2T;L zND?21$kk75jp`o&XK-)JW%}!If1%<|Hfb3ODFi03KUTD9i1Dc-nH)_>E64qSnebm+PeH@SbD zFv3SRk(**t3ZtCi+lB<122u#yE!-{UdwUD5*7C?afk9${0$0G&i@1@ZnJqo3%8s)G zv52z^l$#RcMGYAm1_Sigz8Y>oZ_`3ciMJQ-if>_;?&RDAb4pyrEeKK?z^Y;i#hAN6RX%=ZfVrWP51h39LXC;>%JGedpf}q-<_`c z)%`P5GIXp4W{gm!cPK@r$TO+x{Ap8mQSmfIM}L;KY1Ho+Tp4k}BTaWW(l)v@a`1P) z_-jF-qgx8VYUg4|!H2Xzna&g9hGU*d^5!M$5YDd_FR-=1d!8WdE zGO+bFi1*A!nuQ&elb^$bPZ-O=91(r(pkBI$Q0?){fr{^kN5)`R4&daDD!ZB1oE%yJ zjDQJR;VsOIj;@iFCGjBl6vHWSn5E1rb7{_1Ymd!1VT^mqn9$8${wB`OK(h`w$A7g` zl$EJnF4CGGoCY9v(VJcw6`a%G(rtFMxfN^;4?a@~Tm+(zh}IQyo^}1S7AGJmxbWPK zOY9ykgtZTtyAem0L=G+*>yug%q_#1i8Uw5~i8VnLTzfZ}@ z!#J&!a*ChKR3;P=?oo8$|62KYkEqvq-hB|5AHalMaufX zjJ}wbqOT<>Q?|vrXPNbi^w^WF;cbfejBnlk(QystwU6n0eBJNCLu>znOO_AVAn@}< zzh#(j7vvY;`3P|EC@E7l>Gy?0Hb^jA7WRTonusmTWeK)jZ)F?OKLRnkBYzt58SNXO z>8{(wL^JDDvKZLF`P_764PtubC>H0?hH+=NQ)^BK6FzSkT>H+;VO|FE9H*t~Y`?k! zcAV?>k?g2B*@QMSnBTl35`Qay+4c-CMqD_GUR0=LDF5CsO_q*`6}@#P5d-=NO&|A?Bo9+lK|@0mEg)khG;#nh%YKnVo-N% z;&P|onLH2@0l9kt7E9y+`Rp^gwDIvA70#?eJNYb?JX8d%dK2vpJAZN1%ywdid^;Fi zKx`q`QZ(G@F4GHk(c-DuhdSBxyH6yrQ_@i#!xrD@$`}1kk{_B4b5%^)mT2ATpI2aK zU}V5tDc;cJV%0asFHXV}?|a)$;OE~+-4W#s*#fT=kj6`nx}0r4H8wDclw)HybjZ0= z%C&gxfU@QqQfMuczJI9O=FPrrgIqaDKA0RZF^;x!`^=v-zD?s4m==R(l^OMnOxfUN zn?jsl4Idd7e8@3C`pi^HGR__H#CqES!XbAMz#$h^rARm1&>DwaADNNNga(T_9dj_Y zj&n9Jw`zqN#@5E5p*7_@{$6XX^deqpMa8uqI9Y8#FnC+#SAR>BeKy=$KYFDgU1o#c zHKWk$%`Q(o?H+!Ae{s`y6L5lt@ED;h+Y-96$b0^M%kGep#jbt6uL6PGbbVYWTjt}IqeT7SBj_^=)Az3G`~1N( zh$?wYa&nUsp?^zEy>dB`E2DC4y=07+3%MVu#qB#SdX8vFYZRTR&oVLZ9aleHmqj8I zq3mcC1o@Lmqo>V!2SG&uvx>7(a)96x=+u^KuUP~!&mQTvT75Hd9T`bP)w=4 zgH6@Tqa*^!42|)p=#I?OT331(KIy*Ycl`*>uF?;EfPV|84nR_vNjqFHo#);*Jmvo7 zq?ApL(Z_lTQIhFiBXzHvdKMD$a<>#eL+fOzf&)ao$|h~|A6@^-0pq3@4oMi9#F_g8 zNJUmW@$lBC9@rTyt=-c9E`Rr&m~p#Cv3y1{qNpk54x5#_)_BFLU>HzZ;oD9Qg**EB z7?vPz$A2z39&_)likIjikE4PeE+^M6dzD6=4{bXM0r2xH+8nu%KLsKxx83Hu>+J+A0+Aq+TJwq#tLi1*G$4>>3`DyQ8JmRhY!Y#xS$!zBQ7bSG|VY| zRO|`WL%!cmyaFV6JcV_nFrpW8$+TFyR_J}$ow=G%AGTBCO>vH`{GnjD1nV4; z6UHc25YWklsC18ZSa0iqLb`XyNQXi4R*I!bQSo-)%>10dXUmzv-ol1pa6pHZt}krm}FD) zNO?#Ey*~_csR7-=pZYU23aKJC;tK!$1b+x?j9jSBT+qZk$zVEukpo031r7yRO(V{` zBFPV(-)27BA~uD6H^;Pv>zs{yOCYcv0iQowf;hxckq=YIv0)hltD!(RV}QsiJ3L5& zw4{+jwN*=qb=`D}OZ3 zcgu)h>w*|My-8q&!v4v+IfK$%>uGME^9tXy3t+B0EUhL%U*Z)NVuyPoS~P$ZWVZ`C ztz=?^01T`WW7e_@sq-WVHk~HUG!cLj`g;EXX9tObk|{p$g-MGM7yK;cAclk-2j_R& zPV?$K^m&|=CfzqAkiMm>=q0jAw11%#h(C~VNih8Xz=v@dfS;r~{-Ersz6h`i1%L!K zFwjnHTFSWMiP8ayr{SDUA3R*q>v6var6Q<-(q2?WIzD}V7=&n966EMxjMn`xrLf$m zDPAQFBusAo;(x$C2h06cOE5xF9gBNZbUc2WHFTQj%R4Mg;s0?Nn)v;ocz^A7c(&qx zDiL)Rm+Z2ha)1k0DD2;TKi*>`368K`qv4K?*g?%`x?&q=6Uik+(o4C*x2e@lz=o2E zlVH~8fZg^qV9%3L19Q2p9967@W`C{#PG3rQ&6)P7TorHIK^O?J(VC_ZY~e2Q%PX3! zv6_KoGT*6f3s`@bS&f?^!hcRLASlnj-M+KJ(v&F3R+&5>r)NqYHMEaq&_>&D~n_J0(bT0q3Ox&$A1 zh<`+FX{O{l`k(d@2pg+;vv&WxCf8AWy*#6O6)=JY5YPs5JiG?tRC@jIQAY^qU(z;i z|HSPg2HR6vh1wmEpdTdI%4~fdM}oNSUrz=lKi20P6<(b4yIS8y-881Bee%vW*76(T z@V5SN_;Fd2_=2jGG=J;%6=PnX@P<&*OPBfvCvUr^+bnc2sovY+_-xpXsW5re!ZJBgO9ETloO5jFTi06f22SE7_@h}D}VA8ox76m zQ?-P~J-hp*T0{QA2A(=(ko-z5ZA<>=)_OKL-H`Bm&jtGY41Y9s>y?_q?J9Z+#({1) z(}{F=p$$V#987ODN;+3Pj}pSyjthoE5Q}4MkRmK_Itzk@2hh%o+p)b23;s`aJecB8 zqf2FtRAU1XDXoSde~CCbn|SChE$EJ3^PXv(A_)g&MOm;`X59!YGe{v7ELn~>Iw{nc zBnd{hOf2aS*?*HcxG^=cYV74_LP|qVYcwkCVlsjk9t%l$`@Ffc#`<6c9fBr|LY9Qxc+-Dm;SCG|gAf3exN0+#hw8Gmz<4`oX;!J3 zwnD{PtuI?O&whCSIn}NAFL91BZoT64c3zbp@9zyMEPqp@VR}bh$tLK$2CI0|XFw9- zWZdX3{AJ{?p14q@g^5gc_(H7CE9fCc(Z{ltW`A@va-sP&d)nEou{Tp(Or5n8_@&XS zYp|w*|1vJkc`43RE9Kj~;CC_A&P>8;0>r|Qn%s;(E6DlcB`bSB5JJ8ojB)O}%rpTx zW4}I^`hRg?UQ&STkm;7~@f5@&g@7g!1O;O?Vls#lO232`jM+{dbW2_j2pX9lx-#|X zyDXbai7LCx8hFG&oTw$>UWDz@80$AnikJq1U7`#w8sLK5g;{qS+rnaUj3JGi6cTDl z$S-w~6^eRDJl2^)Nz$Z41r~rqyC}To)YhKYCV!*~Omugd)m5UPu1-IPFc+B*nkmz^ zdfKa)@mwX$Ugz_Fpd`nH3h{g7rR&j8k)n~E?zosW2e6x0EYFud725WeK(wCRyM@Ye z@i`Z&u8aXRY0Nzq=M8|tPrjP5pEkSG3rbkAF0*&2fZO|}=mr<4%++rNBoNt33o7q9 zw0|)3zzD#%#GhXo$%RL(L|F zUg=hEqScuV5!BV2oQ&WDKrM4oA!c( z4M8_lCHIZgtF2`18!oRZXzlC&P(Nu)zJHvbm)laR!MC>aXvaAc_lvGWYq|c(o(z35 z$4C+xKk|95<33Bek|Byod`W{X2cI7(uRr>T$xGs`9pGI%L%I-brumtfpW3Lx*dYcT zASz#js`&H7S+niQ8YfvhMm{!O(wH7(t$2B{GeEecUj1a<&2W26qOlFamPxnof`4f3 zIxkJ&6k;ef4N0+ts}SDxcH8?^K7D5m1!DR+zgEdith6iPCxcDQ89Tr9Tor<(sy=SP}K`wks(;*c(rWyZ2ddpoy+%h7l5cdRcJce&vMi0HQ z*8NL|C*MvzHpyyCoIiz?Kz`26J*XwlT?c4RE9Z4?;*~^VvEIP9vXql?^78gySF5?aj=0cg-1)+Xb4*;iI6Pr*$PVO%KCa$R;B7EBf(p<VFSM`JOVWUdL(t zmow_PPd*jT5eXvZZkudLmCaW)Dzuc1SbD-fFPe}KmdeS#gpt`XxXjCws6s>^?JB>R zTzWbOQGxYQ!h#`)8KSVJA35_#xQRr?Tc0oZfgMo1>Fjj4#+g1hg{s`sO1gB2&+(Ye z7HkC{VFbc9p@MW8^M6kE%@re>uRBYCovIQNfkR4?^_X8o8G4u@w4uL|7duQv3k&g~ z8)NYPK-^=gqjg24D#`vBenWUPS}r4|ku)`$ZPJK{z$#GPWMTJYIaWv!ORbBufhTE# z@j_ue-vY+w8p|Mp!@f1%9{{tt{dhKGl>hMC#w20DuwX{i34cawCUUFegswCymqfjo zT1ZV#H&^6%w7>1C3S2NaSq=+5>Q-~mYLa*n_=NCM0cHymOtef*MrcuUF#p%!dsRG) zQkG&0mE5Qs#**J4YgjUc*tYmdngv>C=-n9UWSF)xElOvLq2wcE;w(70oy)-ZS|l#1 zxh=@cT8o^^GJgRKZfly}(9dq={_&G#jQFd_2>Ss8h><@8=y4H5 zKsCV70~Zj&E3;8$RQeXEv!E$L^a$l*-67>7X(c~TM9!TI|KP@(0l>V)X^M6H{wY=i z2eSBjt$G6saLxZUoWra}?jzVKuz-oVl*Sr{qZfa>E`Q9PPRm%q#Ds}1aQvu?MER4V z?|~Lr?L^)Skp8#EzbWhPaAmXP+)dAZe-a}GK@+B%Wfoy>gj;LY=;YOVnK)j7@uwx| z{srS~HYtef@*C>qAI(=|0tU?yrN0s$tu!_YO>oP%zt5#5>0K)s(g$xGPz$`s79W4Rb!&zQYn8lb>7AQ1wx8n7?Swx@|85))NwZ% zci^ODzEcvCf6YvsLO+C6dgU-7mcs(oSfy#5e?4_ZTu)f10WS;HXwK@W{%8#=u5tap z+bJ6aOt}#r^qT+bAQ*NTP(C+bOOA)SJP$=SGoqbk37;a zp-WcVcBXnARdQKW^@F&2ZhHjQDgYq|;0QmYa=1XGMpIGgU>#%Zn_rv6E9-}Z*?`%f zU9x)keEn?XlBxF{UdqccMGUGZhpzdAM3+wS=#pwLuf}B1ttx?a3+Q6I_St z(tlkGm?I~75#2Gz3Srt%TBYJD?o8Cc;wbZdj>E#+8?#o-X45pLeB;0WwMdpe^i=O3 z#J>Rd!>)!c6GxQVUcB5n+Hq%`h>RhhoE+wQ9w$J!+oXWoN}CKQkX>EJv&Hi&Rs2Bi zA%if77@Vp!CmwRoltx7M^(^rBl>DAncP$Q-F@;V{@#FU-&U-Y zgVJ8% zSuWOZt0m5Z8gYk6zP~9b>H*!hncE~%WF4|#1DWwnZU(@tBm^Z_8QnvEIl7(2+sXHp zko2^8^H=btC;ECJtZoVoTK+GecLL&XX8J-9{3@fo-e=wVy8x}m`$S_h#7#DpQp$;y z(28b1u{Iuf{AsO+V zorFs@4_OswUh3HvaE;hw=^LmV?_CvYFepfF9}o6?E04hn5X+cG2A`r9Qa32 zfov!1g20`sN(x2aEqkslXT9Bde1Av;u$KZv3Wicq$!NhzfZ0+gSG##5xHOl9e4Ni8C!!!a9Q7TM? z?39iFT^?WB%W9$R#s>~vfq%HVMSF+Zy9;AZ<(8Q_tOD)B`$t+3P9hS9I`(i^M6ny_ zRB_NTYSJ7qt&95^S&h$t^8i1R)wHY(@*QoV*?|1ycBb-$?_AAzEY(?FN9m>WD8$)nB8LhwB9Xq25jgc|5 z7*HjOP@a9g@J~WqMOd`+{FFSd@QmAlx1KS(HQS`%M`mjIDLw=Mhla#MS51P{jB#y= z%>v-Z$&zgeLfaj5eSh&TyWdZgV&MbS~GlaM7At+Ax$;aZ)LkUut^F`0n!3G&4``DjPwpRD9-ob1v4Neiw zTET`>%Z7uh2QiWrzgB@E8<+5k_o8~t=2E$ocRumkEnG`(*tn4rOH%76ZGa_`IVXQ1Bgum62M>tD*@560oM%`i~$4R zZ6Wb&dKjl>o5P4S=WJAuU#Nb6A<{{&i5tW+RtAfT(WCJ|J;SNTh)Xj7klJSSnZx~$UVrLR-Vj^ z%83cv86(0XtTdGCVWnV?r|G(;m7a_;;bZ~|V|gq_FcOEloNowlvuc!0FLWUU1})D2 zr63}@r9*T;EqpifNtm@~RBa<*O?+UpRFl0h>w$=P;eVT@?A>#@yN7f&9@ruOMN=g3 ziHH{WU!9zQ&6dg3y0zMC31>XbdXNnG(KdN%$$xn?(Cf2`6yr*xyf7mk_X{ zXc&;P{*FRDE|#p_$Kx?k7xVipF#A@3?K?kbU8pc+EliE|mf;UL)F3=8nXEqj*JT+uxS?E2$*>pjQqns0!eY9EgH?;$B=UjD|>R>n^T-#jt zXnn=?;y;3!P9A6d{qH#ir`=5Yj^iVDC&Y-DJYINmOos^_R`xm66`S31R=UoW4^Z!# zw=fEZM#`ck?1{%PcY z3}t#TRvx;sO~Tg}`XZ6FA_|#+f+^tTZco*j`}*1&}aOql&PgsFaa}hnL*TviLL-#vFL#vqB*w!4$SpY zA6FI3As@@$&9Y6x|Gt@)qoCcFIIguKj(@&<;Vy7iz2OVvq|>>35Er~Bgw^BufTkU; z{Y|D1x5`JX+d{XqpEX_&R^iVa|9MI6?Am&bZ=pHfGK&+I3u!$iH2Kk-PO4}!cyHw&t2(y)Qfxh~-QT#zWC>f=!zy1gq5rEQmo~w1%TE@P~U+F5o^v#f{xd?HSXr za(bj?do55>xW<=IQ+zXvh=r23w|}4cXxOtIW@#~#R9(%2(^Jc|#^=9fA3M1o@`K4+ zdikuY##FRZ5$q2ra;feeYX``t(Wy1tb-VU>t7|PO0CLp5%cab{IG9muA%H9G>AX8f z#4#l;ZcPz%$z^K3%4?D|pK^)7*b+;(bc8Amj<9i_Odoye15+=m6Nlkc%Gr~wK&<=K_ZvouXVcYS_=C)_% zKV%}QsbP6HSw_QYEN<~oc4g-;LXaT9Du!tEzr-SR9r`*N6NX~Xza1<}UO+JBwwM;Y ze;^jomVdsJR|mkavhqGlm3XWH^L;gnyZiU;r~!NaD)#_D+`?{& z*kzEl78VOYw*jXH1Zp@;<+C9u&9S;B7KaPpaX&yQbt zY{n^`H~OFhX(bi~h>uIG7Di@Z)TM8zEl^2RN6Qen2;Jg83;MkOmw(4l~ROlMX!Qk*&0P zo|JK9cW+65Z5M&b-^{Ch>mI-Duz+1v zS`G&Y9=nINwpx4e0o%_o3^(m1z{f9;-RktS#wD=nE7Lg|y1XF)t~=<%fIXfWw z8B<*Rc3EaqLZfc+Fd>h@)Fyj9+<8eb9CBkC`w=khsoNkGLkC)8^utbO10kQeU!zkl z+r|=mMSroM^dnDfTAv#~To&Vlu|oq9DOjB89%<&rrk{M@7J)KrjWtQ|#nQJs8qL`) z`Kpe25wGWmSynx|EO%EY4_&h``qc|ZKj+cI%TwODDR{;AQ=Y-6u`V+jCE0nt$wBmj z0cURwhtBaW$yUzChl~cy%!U;c`OjlYbC%t5l7E2>wkj+WJ&GIf^3_iEbwYY1LGir) zLn~)F$NZOKNCC^08!RCcwZwk=qn{ypy>Y8X0|&F5)4jA#imOYUL6$(cF>PU)lfopn z4f|_|#}cSAVci@ZQB=-5nMaC{_vjUwUh_g==NS`cGVG4M>#3(==jrZ5AI(NO$2(eZ z6Ms*4SQb@H^2TKOo9KVQcrzdRP0gVeS1k^OhOZ|6$gu$rYKM?AP2Sz*O=Vzr4RZ59LlH z`?yyyRX*H>#0sM@dE}}ZeMG;984L~JT_n(~xRf}wie)y~y4&3E@c`bNKRQaP2qxR5 zL4j9+#;!kl2jZ3BRx|kg<7SvR8rR}_;=A$xW*&WRZEgW&MvDgRk9B#pEY@L&4S(uJ z>7F8cI#-m;9iS~kId2GaUPEvqr$))Vyp{PwN$3oT&W;oGb68Q69&~p7V(BL_LGEHp z_};Zx%hKwn18jpfswrq&$}IL+3S|FfR5iN7l{0|Ux9L5VHjh_ z?T<59CA-&L>Ckb3O=+_5?Sn!&qnQKj!NT}7BJt$PvcZ;Zqct+&MWkws43@jrxKb&~! zsIG>W!6ztltI};ASrkTq5hOCktkaF!Z4ooH0A`GWFvBQ+$sXg8sDG{rUZjIArYZfj z`q{PMs)eD$8~(BfHIP*;;dIgf0SiN-jGi4l3p--=l=NGDE?*qxQ{2Hx^Rza}xMd{~ za=!dFT>My^gP;KuHx3_Xbt=6Fd)0GSujV~dr=C0mT{QPno@pwK8`;xl;E%-DJ%W(# zc`S9mrQNbCrbgpEYJU|)VidTwATnSw3kul^C+wQVAh@V#-%Tgs!whv9x?v5WE6WBu z6+BhEOh?g^JDL#_z{{x!EQ||F%*JA*s*%BPfxDarXt}Rw)zt{c$l-NB*+6K0ChN~Z z*Pl~p8L#F(Y`ZIJyqMFT(02!GLFGmV##nBHdRKQR8HUP0=cj~|o3bc3Q}t=ne$Z5meL0GW!MA@Ze>si6i^Ubf zN_Qc}Ok38bKIuXESeLIMj4{{FtYsG;B`VuNGWQ!+K+y~OA+7VnLb>>>&3#}vhq>Ut zec;!OoPJVcYJZ?d9)u)_@N+)u5#|J)C)D;NpCMqBm%ChsLA={;x2uqL~hkqbit4Nh$ud4zcHInX*mjhCe zC;STG&;I*BSt097C}DD=&Xi^iH^YREu^Tq|!SSM&S~^ z5@f1D=Y(oSrO1M9PpysKWMlUE*E8D(dL8EEU<@&f4Ucz>tFoRP;}6=s&&}>|N^yGH zFFVKicYj|Sycu2{b)lvs0hOAX($(h&758(dz?(5qQK18(tv{gP-Q>+J6d&wUYzfP# zg&azp(U|rT!VC!no42QP8Lb%n&AYX!ONRGwwH<4NGQ$^b9@^L2yK+bae$CcTfX>snNVt<*}fyBRH@xGgq2MXd;_9*170V|E*Cr!)i?!59fws_8ny)%M&_V+VtnMT>^MKo-l~CCqovx^h&+=nM*?~ ze)hJOI^ z9w~nNjM#M-Ji2cHXhYNOloF-Bslni&#dR22tvY&R-$k<@o}&Y^03@ z$-Y{+HFk(glTf9=?d7C?9U(cPmWpBh1s^}9Z22(tggE2>Xr^!&V3t+m9ZCINeY$V* z+9_vX5vR~hHS2WWO+~a4>(a!J8-K|42b#XB+n=LdH3aCOZkJX&%Wu+l1&Om@b)l6@ zw-D5N&;T~>38aMj8!kpL-Yrr(9Nf#aL4lUsLIr=dyk?*_i}g{-`j<=uUg#NEGO57N zdYU)t<01p%2u{0etd{}0RkLlUAD0edlx|q<0l$HB%9wBaEn5aq4se7EB7dsQATz!^ zz3ah4VnW5F-NC1TuZ>{Cx#4q+Mr_ve_=T2MEqUKs5=OS$B8+b~>&xdlx2}YT&O~~O ze^uwBDMLB@o+d*#IGJOplom+)JN4l?I+wK9M~qb2)4g*Zp8IO!Z-<2M{6W#y{{Mc; z$)XD>maM`gYejUbm=0@vB!9}8>PfU__i71v<8d%}bRW^uYB}qQcXzgwZc3qz-B8|l zMM0A>`p(siA%%pPHaTKQ*433i@hGb1dmD*)80mJflz+ zA(wcbD=Z<9JCd0IP&l3AhAfJYKZYBD!)>hW$kLa+Y`mF`I%V}7Wq&p>Bvv$!RsWsR z8h!~pJq-^3gX|~uHNZcctDi4#x53#FY4g!`>{o}K)J@?#Iyqd53_Y7JmzDdggBE8eeHoj>tfJ z9XF%_nJDJt(1%>J4bLBxn%WO`u(!fVq2yQ?yM!aq_l7N`3^gW$ZzFzZ{X%Smox{Hj zxm-EIW}qDGU_Y?$wRnO+Ne@ul$6BNAM|=o`-wcSW1W*R|tTuO@JiLISv5VRKgUS$0 zRMpCH^(g}RD}N=C3x8HB2OyXPf~=qg4{|YmgB)UYp0SM%>@ZX_7fhe1Rpi9fIfH_| z%~Mbx0Oo14Cc^~z5mQxBAtZ==Fz-t3?hzuVOHGlHUbaZINaT4B17vT44Z^*b-@ z$(EO-r}~jQG?Z!^1sA`4vxnEb3cFJllb?K?b1FlkvVVn)rOecrP}AfSA!+)uH1LMh zAkGv&_-b#&L!|Cz6;7_a$hM%}6JA6FX}8yftz&%=KH4=5W8%(1zP02tk+F9m z$x>|(6Ms@uL)pE3?k|ZzL~l&ILdZk$_CAreUGB&jeRlLA4P^DaTH^^mRGh2Da>bXM z(=`#g1EX#H01D0R>rmb5&Hmc#{EOfrYlY8U`ksx@YnZ@w;d6N{{k~&=o0jWc))Gt+ z0z>MB5rN_|N4-RTxwrogVSR~nqiF9P;r#Ew|9{YuX#99C{fWP-fx$FI?!WfcQT%i= zW4^nLy<`u#5 zA^cH9c{KErNCm>_lY;^FfSc+?y)XI)fsd&4@llyLUv@`23(b~u{i}EKA{dfkxl(Y@0i8}3 zCn`|^jsY`cSQwap_9G2vY|su@v45EYtVzP|ATk{aq@%&zP6k`4wkrQFeB{h9y|Cw< z$9VxVF8$^PDDj#jM24*IIFMt3Tdyu`OIFk6Z& zqxcL_i9uWhP?A^npFwK_DqFpD>SMLqt=5o8gD#NcPwr{A;PmQ1?&QQFY-EC5x6=`{ z9Y(U1!W`ME;BI<3L#`J;4u4%hdXQ4(@Eyu5Uf!V|IsTtq75+=^n*q;qLMr!EGOWWQ z4g?4%vbxDvCM6L?+nS|*R`;4mJ;gM?1o`|2mu`I@g8Q(S;9QLt^zFmq5^9?zg5!-d zGC;?|&-tY?>S}6@1P>-i7JwY`ezKb|aUOK6CmoLIBZu%*^=k;@X@6b2U7v29w3G)@ zV*G2Uj^)!f%ofvXCy$|4j^yRE;m^{*#vm8T`k^R$l9E?(nojay~=gS;4ba|@Ail?rx4=@ zTU^5D^}wu#Y@yohyacUzy2t zlJh5J&QAf0CYyaPuP@{b#?=VV@{pwzG%56_&u27;RN;M&JBzMxsIzZ@vPTK+!$R(h zd6urWy$|Kn2G}Ec3zej=@ + programming.language.perl + diff --git a/programming/language/perl/perl-Authen-SASL/actions.py b/programming/language/perl/perl-Authen-SASL/actions.py new file mode 100644 index 0000000000..357317f12c --- /dev/null +++ b/programming/language/perl/perl-Authen-SASL/actions.py @@ -0,0 +1,25 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import perlmodules +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +WorkDir = "%s-%s" % (get.srcNAME()[5:], get.srcVERSION()) + +def setup(): + perlmodules.configure() + +def build(): + perlmodules.make() + +def check(): + perlmodules.make("test") + +def install(): + perlmodules.install() + + pisitools.dodoc("MANIFEST", "Changes") diff --git a/programming/language/perl/perl-Authen-SASL/pspec.xml b/programming/language/perl/perl-Authen-SASL/pspec.xml new file mode 100644 index 0000000000..c02eb0182b --- /dev/null +++ b/programming/language/perl/perl-Authen-SASL/pspec.xml @@ -0,0 +1,67 @@ + + + + + perl-Authen-SASL + http://search.cpan.org/dist/Authen-SASL + + Pisi Linux Admins + admins@pisilinux.org + + Artistic + library + A Perl SASL interface + SASL is a generic mechanism for authentication used by several network protocols. Authen::SASL provides an implementation framework that all protocols should be able to share. The framework allows different implementations of the connection class to be plugged in. + http://search.cpan.org/CPAN/authors/id/G/GB/GBARR/Authen-SASL-2.16.tar.gz + + perl + perl-GSSAPI + perl-Digest-HMAC + + + + + perl-Authen-SASL + + perl + perl-GSSAPI + perl-Digest-HMAC + + + /usr/lib + /usr/share/doc/perl-Authen-SASL + /usr/share/man + + + + + + 2014-09-10 + 2.16 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 2.16 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-11-04 + 2.16 + Version bump. + Yusuf Aydemir + yusuf.aydemir@pisilinux.org + + + 2012-09-06 + 2.15 + First release + PisiLinux Community + admins@pisilinux.org + + + diff --git a/programming/language/perl/perl-Authen-SASL/translations.xml b/programming/language/perl/perl-Authen-SASL/translations.xml new file mode 100644 index 0000000000..de62c67202 --- /dev/null +++ b/programming/language/perl/perl-Authen-SASL/translations.xml @@ -0,0 +1,9 @@ + + + + perl-Authen-SASL + Perl için SASL modülü + SASL, ağ protokolleri tarafından kullanılan genel bir kimlik doğrulama tekniğidir. Authen::SASL, bütün protokollerin paylaşabileceği bir yapı sağlar. Bu yapı, kullanılacak bağlantı sınıfının farklı şekillerde uygulamalarına izin verir. + SASL es un mecanismo genérico de autenticación usado en varios protocolos de red. Authen::SASL facilita un capa de implementación, que todos los protocolos deberían poder compartir. El framework permite adjuntar implementaciones diferentes de la clase de conexión. + + diff --git a/programming/language/perl/perl-Digest-HMAC/actions.py b/programming/language/perl/perl-Digest-HMAC/actions.py new file mode 100644 index 0000000000..336152d265 --- /dev/null +++ b/programming/language/perl/perl-Digest-HMAC/actions.py @@ -0,0 +1,23 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import perlmodules +from pisi.actionsapi import get +from pisi.actionsapi import pisitools + +WorkDir = "%s-%s" % (get.srcNAME()[5:], get.srcVERSION()) + +def setup(): + perlmodules.configure() + +def build(): + perlmodules.make() + +def check(): + perlmodules.make("test") + +def install(): + perlmodules.install() diff --git a/programming/language/perl/perl-Digest-HMAC/pspec.xml b/programming/language/perl/perl-Digest-HMAC/pspec.xml new file mode 100644 index 0000000000..cb5f5ab4af --- /dev/null +++ b/programming/language/perl/perl-Digest-HMAC/pspec.xml @@ -0,0 +1,64 @@ + + + + + perl-Digest-HMAC + http://search.cpan.org/dist/Digest-HMAC + + Pisi Linux Admins + admins@pisilinux.org + + Artistic + library + Keyed-Hashing for Message Authentication + This Perl module provides HMAC-MD5 hashing. + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/Digest-HMAC-1.03.tar.gz + + perl + perl-Digest-SHA1 + + + + + perl-Digest-HMAC + + perl + perl-Digest-SHA1 + + + /usr/lib + /usr/share/man + + + + + + 2014-09-10 + 1.03 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 1.03 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-11-09 + 1.03 + Rebuild + Richard de Bruin + richdb@pisilinux.org + + + 2012-09-07 + 1.03 + First release + PisiLinux Community + admins@pisilinux.org + + + diff --git a/programming/language/perl/perl-Digest-HMAC/translations.xml b/programming/language/perl/perl-Digest-HMAC/translations.xml new file mode 100644 index 0000000000..820a9db15f --- /dev/null +++ b/programming/language/perl/perl-Digest-HMAC/translations.xml @@ -0,0 +1,8 @@ + + + + perl-Digest-HMAC + Bu Perl modülü HMAC-MD5 şifrelemesi sağlar. + Este módulo Perl facilita hashing HMAC-MD5 + + diff --git a/programming/language/perl/perl-Digest-SHA1/actions.py b/programming/language/perl/perl-Digest-SHA1/actions.py new file mode 100644 index 0000000000..731ff053b8 --- /dev/null +++ b/programming/language/perl/perl-Digest-SHA1/actions.py @@ -0,0 +1,25 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import perlmodules +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +WorkDir = "%s-%s" % (get.srcNAME()[5:], get.srcVERSION()) + +def setup(): + perlmodules.configure() + +def build(): + perlmodules.make() + +def check(): + perlmodules.make("test") + +def install(): + perlmodules.install() + + pisitools.dodoc("Changes","README") diff --git a/programming/language/perl/perl-Digest-SHA1/pspec.xml b/programming/language/perl/perl-Digest-SHA1/pspec.xml new file mode 100644 index 0000000000..2d2dbeae61 --- /dev/null +++ b/programming/language/perl/perl-Digest-SHA1/pspec.xml @@ -0,0 +1,63 @@ + + + + + perl-Digest-SHA1 + http://search.cpan.org/dist/Digest-SHA1/ + + Pisi Linux Admins + admins@pisilinux.org + + Artistic + library + SHA1 message digest algorithm + The Digest::SHA1 module allows you to use the NIST SHA-1 message digest algorithm from within Perl programs. The algorithm takes as input a message of arbitrary length and produces as output a 160-bit "fingerprint" or "message digest" of the input. + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/Digest-SHA1-2.13.tar.gz + + perl + + + + + perl-Digest-SHA1 + + perl + + + /usr/lib + /usr/share/doc/perl-Digest-SHA1 + /usr/share/man + + + + + + 2014-09-10 + 2.13 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 2.13 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-11-09 + 2.13 + Rebuild + Richard de Bruin + richdb@pisilinux.org + + + 2012-09-06 + 2.13 + First release + PisiLinux Community + admins@pisilinux.org + + + diff --git a/programming/language/perl/perl-Digest-SHA1/translations.xml b/programming/language/perl/perl-Digest-SHA1/translations.xml new file mode 100644 index 0000000000..8c966f7724 --- /dev/null +++ b/programming/language/perl/perl-Digest-SHA1/translations.xml @@ -0,0 +1,8 @@ + + + + perl-Digest-SHA1 + Bu modül NIST SHA-1 mesaj özetleme algoritmasını Perl programlarında kullanabilmenizi sağlar. Farklı uzunluklardaki mesajları alan algoritma, çıktı olarak 160 bitlik parmakizi veya mesaj özeti üretir. + El módulo Digest::SHA1 permite usar el algoritmo NIST SHA-1 desde programas Perl. El algoritmo acepta como entrada un mensaje de longitud arbitraria y produce un "fingerprint" (huella digital) o "message digest" de 160-bit. + + diff --git a/programming/language/perl/perl-Encode-Locale/actions.py b/programming/language/perl/perl-Encode-Locale/actions.py new file mode 100644 index 0000000000..a9f950273d --- /dev/null +++ b/programming/language/perl/perl-Encode-Locale/actions.py @@ -0,0 +1,21 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import perlmodules +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +def setup(): + perlmodules.configure() + +def build(): + perlmodules.make() + +def check(): + perlmodules.make("test") + +def install(): + perlmodules.install() \ No newline at end of file diff --git a/programming/language/perl/perl-Encode-Locale/pspec.xml b/programming/language/perl/perl-Encode-Locale/pspec.xml new file mode 100644 index 0000000000..018ac69f20 --- /dev/null +++ b/programming/language/perl/perl-Encode-Locale/pspec.xml @@ -0,0 +1,62 @@ + + + + + perl-Encode-Locale + http://search.cpan.org/~gaas/Encode-Locale-1.03/ + + Osman Erkan + osman.erkan@pisilinux.org + + Artistic + GPLv2+ + programming.language.perl + app:console + NAME::Encode::Locale - Determine the locale encoding + In many applications it's wise to let Perl use Unicode for the strings it processes. Most of the interfaces Perl has to the outside world are still byte based. Programs therefore need to decode byte strings that enter the program from the outside and encode them again on the way out. + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/Encode-Locale-1.03.tar.gz + + perl + + + + perl-Encode-Locale + + perl + + + /usr/lib + /usr/share + + + + + 2014-09-10 + 1.03 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 1.03 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-10-31 + 1.03 + rebuild + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-09-07 + 1.03 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + diff --git a/programming/language/perl/perl-Encode-Locale/translations.xml b/programming/language/perl/perl-Encode-Locale/translations.xml new file mode 100644 index 0000000000..2f9797ebb5 --- /dev/null +++ b/programming/language/perl/perl-Encode-Locale/translations.xml @@ -0,0 +1,9 @@ + + + + perl-Encode-Locale + NAME::Encode::Locale - Determine the locale encoding + In many applications it's wise to let Perl use Unicode for the strings it processes. Most of the interfaces Perl has to the outside world are still byte based. Programs therefore need to decode byte strings that enter the program from the outside and encode them again on the way out. + + + diff --git a/programming/language/perl/perl-File-Listing/actions.py b/programming/language/perl/perl-File-Listing/actions.py new file mode 100644 index 0000000000..9e195ad9ab --- /dev/null +++ b/programming/language/perl/perl-File-Listing/actions.py @@ -0,0 +1,23 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import perlmodules +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +def setup(): + perlmodules.configure() + +def build(): + perlmodules.make() + +def check(): + perlmodules.make("test") + +def install(): + perlmodules.install() + + pisitools.remove("/usr/share/man/man3/File::Listing.3pm") diff --git a/programming/language/perl/perl-File-Listing/pspec.xml b/programming/language/perl/perl-File-Listing/pspec.xml new file mode 100644 index 0000000000..412867cbf8 --- /dev/null +++ b/programming/language/perl/perl-File-Listing/pspec.xml @@ -0,0 +1,67 @@ + + + + + perl-File-Listing + http://search.cpan.org/~gaas/File-Listing-6.04/ + + Osman Erkan + osman.erkan@pisilinux.org + + Artistic + GPLv2 + programming.language.perl + app:console + File::Listing - parse directory listing + This module exports a single function called parse_dir(), which can be used to parse directory listings. + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/File-Listing-6.04.tar.gz + + perl + perl-HTTP-Date + + + + + perl-File-Listing + + perl + perl-HTTP-Date + + + /usr/lib + /usr/share/doc + /usr/share/man + /usr/share + + + + + 2014-09-10 + 6.04 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-25 + 6.04 + Fix version number. + Marcin Bojara + marcin@pisilinux.org + + + 2013-11-09 + 6.0.4 + Rebuild + Richard de Bruin + richdb@pisilinux.org + + + 2012-09-07 + 6.0.4 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + diff --git a/programming/language/perl/perl-File-Listing/translations.xml b/programming/language/perl/perl-File-Listing/translations.xml new file mode 100644 index 0000000000..e08c248690 --- /dev/null +++ b/programming/language/perl/perl-File-Listing/translations.xml @@ -0,0 +1,9 @@ + + + + perl-File-Listing + File::Listing - parse directory listing + This module exports a single function called parse_dir(), which can be used to parse directory listings. + + + diff --git a/programming/language/perl/perl-GSSAPI/actions.py b/programming/language/perl/perl-GSSAPI/actions.py new file mode 100644 index 0000000000..76e7f56060 --- /dev/null +++ b/programming/language/perl/perl-GSSAPI/actions.py @@ -0,0 +1,24 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import perlmodules +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +WorkDir = "%s-%s" % (get.srcNAME()[5:], get.srcVERSION()) + +def setup(): + perlmodules.configure() + +def build(): + perlmodules.make() + +def check(): + perlmodules.make("test") + +def install(): + perlmodules.install() + diff --git a/programming/language/perl/perl-GSSAPI/files/disable_failing_test.patch b/programming/language/perl/perl-GSSAPI/files/disable_failing_test.patch new file mode 100644 index 0000000000..4fe4c7030d --- /dev/null +++ b/programming/language/perl/perl-GSSAPI/files/disable_failing_test.patch @@ -0,0 +1,11 @@ +--- t/inquire_cred.t ++++ t/inquire_cred.t +@@ -29,6 +29,8 @@ + }; + + SKIP: { ++ skip('This test requires a working kerberos setup', 6); ++ + if ( $status->major != GSS_S_COMPLETE ) { + diag( "\n\nNo error: acquire_cred() failed, maybe because you have to run kinit first.\n", + "Errormessage from your GSSAPI-implementation is: \n\n" . qq{"$status"}, diff --git a/programming/language/perl/perl-GSSAPI/pspec.xml b/programming/language/perl/perl-GSSAPI/pspec.xml new file mode 100644 index 0000000000..2590291b6e --- /dev/null +++ b/programming/language/perl/perl-GSSAPI/pspec.xml @@ -0,0 +1,69 @@ + + + + + perl-GSSAPI + http://search.cpan.org/dist/GSSAPI/ + + Pisi Linux Admins + admins@pisilinux.org + + Artistic + library + Perl extension providing access to the GSSAPIv2 library + perl-GSSAPI module gives access to the routines of the GSSAPI library, as described in rfc2743 and rfc2744 and implemented by the Kerberos-1.2 distribution from MIT. + http://search.cpan.org/CPAN/authors/id/A/AG/AGROLMS/GSSAPI-0.28.tar.gz + + perl + mit-kerberos + e2fsprogs-devel + + + disable_failing_test.patch + + + + + perl-GSSAPI + + perl + mit-kerberos + e2fsprogs + + + /usr/lib + /usr/share/man + + + + + + 2015-04-23 + 0.28 + Release bump, fix deps + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 0.28 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-11-21 + 0.28 + Rebuild + Richard de Bruin + richdb@pisilinux.org + + + 2012-09-06 + 0.28 + First release + PisiLinux Community + admins@pisilinux.org + + + diff --git a/programming/language/perl/perl-GSSAPI/translations.xml b/programming/language/perl/perl-GSSAPI/translations.xml new file mode 100644 index 0000000000..034f680616 --- /dev/null +++ b/programming/language/perl/perl-GSSAPI/translations.xml @@ -0,0 +1,8 @@ + + + + perl-GSSAPI + GSSAPI kitaplığına erişim sağlayan perl modülü + perl-GSSAPI, RFC 2744'de açıklandığı gibi GSSAPI C bağlayıcılarını kullanan bir perl eklentisidir. + + diff --git a/programming/language/perl/perl-HTML-Form/actions.py b/programming/language/perl/perl-HTML-Form/actions.py new file mode 100644 index 0000000000..f1fc56b430 --- /dev/null +++ b/programming/language/perl/perl-HTML-Form/actions.py @@ -0,0 +1,23 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import perlmodules +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +def setup(): + perlmodules.configure() + +def build(): + perlmodules.make() + +def check(): + perlmodules.make("test") + +def install(): + perlmodules.install() + + pisitools.dodoc("Changes", "MANIFEST", "README") diff --git a/programming/language/perl/perl-HTML-Form/pspec.xml b/programming/language/perl/perl-HTML-Form/pspec.xml new file mode 100644 index 0000000000..6a7ba338a9 --- /dev/null +++ b/programming/language/perl/perl-HTML-Form/pspec.xml @@ -0,0 +1,66 @@ + + + + + perl-HTML-Form + http://search.cpan.org/~gaas/HTML-Form-6.03/ + + Osman Erkan + osman.erkan@pisilinux.org + + Artistic + GPLv2 + programming.language.perl + app:console + HTML::Form - Class that represents an HTML form element + Objects of the HTML::Form class represents a single HTML <form> ... </form> instance. A form consists of a sequence of inputs that usually have names, and which can take on various values. The state of a form can be tweaked and it can then be asked to provide HTTP::Request objects that can be passed to the request() method of LWP::UserAgent. + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/HTML-Form-6.03.tar.gz + + perl + + + + + perl-HTML-Form + + perl + + + /usr/lib + /usr/share/doc + /usr/share/man + /usr/share + + + + + + 2014-09-10 + 6.03 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 6.03 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-07 + 6.03 + Rebuild for perl + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-09-07 + 6.03 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + diff --git a/programming/language/perl/perl-HTML-Form/translations.xml b/programming/language/perl/perl-HTML-Form/translations.xml new file mode 100644 index 0000000000..f2175aafc0 --- /dev/null +++ b/programming/language/perl/perl-HTML-Form/translations.xml @@ -0,0 +1,8 @@ + + + + perl-HTML-Form + HTML::Form - Class that represents an HTML form element + Objects of the HTML::Form class represents a single HTML <form> ... </form> instance. A form consists of a sequence of inputs that usually have names, and which can take on various values. The state of a form can be tweaked and it can then be asked to provide HTTP::Request objects that can be passed to the request() method of LWP::UserAgent. + + diff --git a/programming/language/perl/perl-HTML-Format/actions.py b/programming/language/perl/perl-HTML-Format/actions.py new file mode 100644 index 0000000000..85341013af --- /dev/null +++ b/programming/language/perl/perl-HTML-Format/actions.py @@ -0,0 +1,26 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/copyleft/gpl.txt. + +from pisi.actionsapi import perlmodules +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +WorkDir = "%s-%s" % (get.srcNAME()[5:], get.srcVERSION()) + +def setup(): + perlmodules.configure() + +def build(): + perlmodules.make() + +def check(): + perlmodules.make("test") + +def install(): + perlmodules.install() + + pisitools.dodoc("Changes", "README") + diff --git a/programming/language/perl/perl-HTML-Format/pspec.xml b/programming/language/perl/perl-HTML-Format/pspec.xml new file mode 100644 index 0000000000..6ec9cdfd7e --- /dev/null +++ b/programming/language/perl/perl-HTML-Format/pspec.xml @@ -0,0 +1,67 @@ + + + + + perl-HTML-Format + http://search.cpan.org/dist/HTML-Format/ + + Pisi Linux Admins + admins@pisilinux.org + + GPLv2 + library + A Perl module that format HTML as plaintext, RTF and PostScript + perl-HTML-Format is a Perl module that formats HTML as plaintext, RTF and PostScript. + http://search.cpan.org/CPAN/authors/id/N/NI/NIGELM/HTML-Format-2.11.tar.gz + + perl + perl-HTML-Tree + perl-Font-AFM + + + + + perl-HTML-Format + + perl + perl-HTML-Tree + perl-Font-AFM + + + /usr/lib + /usr/share/man + /usr/share/doc + + + + + + 2014-09-10 + 2.11 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-24 + 2.11 + Version bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-07 + 2.10 + Rebuild for perl + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-09-06 + 2.10 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + diff --git a/programming/language/perl/perl-HTML-Format/translations.xml b/programming/language/perl/perl-HTML-Format/translations.xml new file mode 100644 index 0000000000..a23c25baf8 --- /dev/null +++ b/programming/language/perl/perl-HTML-Format/translations.xml @@ -0,0 +1,8 @@ + + + + perl-HTML-Format + HTML dosyalarını basit metin, RTF ve PostScript formatlarına biçimlendiren bir Perl modülüdür + perl-HTML-Format HTML dosyalarını basit metin, RTF ve PostScript formatlarına biçimlendiren bir Perl modülüdür + + diff --git a/programming/language/perl/perl-HTML-FormatText-WithLinks-AndTables/actions.py b/programming/language/perl/perl-HTML-FormatText-WithLinks-AndTables/actions.py new file mode 100644 index 0000000000..910b931546 --- /dev/null +++ b/programming/language/perl/perl-HTML-FormatText-WithLinks-AndTables/actions.py @@ -0,0 +1,23 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/copyleft/gpl.txt. + +from pisi.actionsapi import perlmodules +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +def setup(): + perlmodules.configure() + +def build(): + perlmodules.make() + +def check(): + perlmodules.make("test") + +def install(): + perlmodules.install() + + pisitools.dodoc("Changes", "README") \ No newline at end of file diff --git a/programming/language/perl/perl-HTML-FormatText-WithLinks-AndTables/pspec.xml b/programming/language/perl/perl-HTML-FormatText-WithLinks-AndTables/pspec.xml new file mode 100644 index 0000000000..f929453dc0 --- /dev/null +++ b/programming/language/perl/perl-HTML-FormatText-WithLinks-AndTables/pspec.xml @@ -0,0 +1,58 @@ + + + + + perl-HTML-FormatText-WithLinks-AndTables + http://search.cpan.org/dist/HTML-FormatText-WithLinks-AndTables + + Osman Erkan + osman.erkan@pisilinux.org + + PerlArtistic GPL + library + Converts HTML to Text with tables in tact. + This module was inspired by HTML::FormatText::WithLinks which has proven to be a useful `lynx -dump` work-alike. + http://search.cpan.org/CPAN/authors/id/S/SF/SFRYER/HTML-FormatText-WithLinks-AndTables-0.02.tar.gz + + perl + perl-HTML-FormatText-WithLinks + + + + + perl-HTML-FormatText-WithLinks-AndTables + + perl + perl-HTML-FormatText-WithLinks + + + /usr/lib + /usr/share/man + /usr/share/doc + + + + + + 2014-09-10 + 0.02 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 0.02 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-23 + 0.02 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + diff --git a/programming/language/perl/perl-HTML-FormatText-WithLinks-AndTables/translations.xml b/programming/language/perl/perl-HTML-FormatText-WithLinks-AndTables/translations.xml new file mode 100644 index 0000000000..c1303f1131 --- /dev/null +++ b/programming/language/perl/perl-HTML-FormatText-WithLinks-AndTables/translations.xml @@ -0,0 +1,8 @@ + + + + perl-HTML-FormatText-WithLinks-AndTables + Converts HTML to Text with tables in tact. + This module was inspired by HTML::FormatText::WithLinks which has proven to be a useful `lynx -dump` work-alike. + + \ No newline at end of file diff --git a/programming/language/perl/perl-HTML-FormatText-WithLinks/actions.py b/programming/language/perl/perl-HTML-FormatText-WithLinks/actions.py new file mode 100644 index 0000000000..910b931546 --- /dev/null +++ b/programming/language/perl/perl-HTML-FormatText-WithLinks/actions.py @@ -0,0 +1,23 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/copyleft/gpl.txt. + +from pisi.actionsapi import perlmodules +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +def setup(): + perlmodules.configure() + +def build(): + perlmodules.make() + +def check(): + perlmodules.make("test") + +def install(): + perlmodules.install() + + pisitools.dodoc("Changes", "README") \ No newline at end of file diff --git a/programming/language/perl/perl-HTML-FormatText-WithLinks/pspec.xml b/programming/language/perl/perl-HTML-FormatText-WithLinks/pspec.xml new file mode 100644 index 0000000000..0e345ffc1e --- /dev/null +++ b/programming/language/perl/perl-HTML-FormatText-WithLinks/pspec.xml @@ -0,0 +1,60 @@ + + + + + perl-HTML-FormatText-WithLinks + http://search.cpan.org/dist/HTML-FormatText-WithLinks + + Osman Erkan + osman.erkan@pisilinux.org + + PerlArtistic GPL + library + HTML to text conversion with links as footnotes. + HTML::FormatText::WithLinks takes HTML and turns it into plain text but prints all the links in the HTML as footnotes. + http://search.cpan.org/CPAN/authors/id/S/ST/STRUAN/HTML-FormatText-WithLinks-0.14.tar.gz + + perl + perl-HTML-Tree + perl-HTML-Format + + + + + perl-HTML-FormatText-WithLinks + + perl + perl-HTML-Tree + perl-HTML-Format + + + /usr/lib + /usr/share/man + /usr/share/doc + + + + + + 2014-09-10 + 0.14 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 0.14 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-23 + 0.14 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + diff --git a/programming/language/perl/perl-HTML-FormatText-WithLinks/translations.xml b/programming/language/perl/perl-HTML-FormatText-WithLinks/translations.xml new file mode 100644 index 0000000000..fc7853227d --- /dev/null +++ b/programming/language/perl/perl-HTML-FormatText-WithLinks/translations.xml @@ -0,0 +1,8 @@ + + + + perl-HTML-FormatText-WithLinks + HTML to text conversion with links as footnotes. + HTML::FormatText::WithLinks takes HTML and turns it into plain text but prints all the links in the HTML as footnotes. + + \ No newline at end of file diff --git a/programming/language/perl/perl-HTML-Parser/actions.py b/programming/language/perl/perl-HTML-Parser/actions.py new file mode 100644 index 0000000000..731ff053b8 --- /dev/null +++ b/programming/language/perl/perl-HTML-Parser/actions.py @@ -0,0 +1,25 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import perlmodules +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +WorkDir = "%s-%s" % (get.srcNAME()[5:], get.srcVERSION()) + +def setup(): + perlmodules.configure() + +def build(): + perlmodules.make() + +def check(): + perlmodules.make("test") + +def install(): + perlmodules.install() + + pisitools.dodoc("Changes","README") diff --git a/programming/language/perl/perl-HTML-Parser/pspec.xml b/programming/language/perl/perl-HTML-Parser/pspec.xml new file mode 100644 index 0000000000..c458a4b25f --- /dev/null +++ b/programming/language/perl/perl-HTML-Parser/pspec.xml @@ -0,0 +1,66 @@ + + + + + perl-HTML-Parser + http://search.cpan.org/dist/HTML-Parser/ + + Pisi Linux Admins + admins@pisilinux.org + + Artistic + library + HTML Parser + The HTML-Parser distribution is a collection of modules that parse and extract information from HTML documents. + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/HTML-Parser-3.71.tar.gz + + perl + perl-Test-Pod + perl-HTML-Tagset + + + + + perl-HTML-Parser + + perl + perl-HTML-Tagset + + + /usr/lib + /usr/share/doc/perl-HTML-Parser + /usr/share/man + + + + + + 2014-09-10 + 3.71 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 3.71 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-11-06 + 3.71 + Version bump + Richard de Bruin + richdb@pisilinux.org + + + 2012-06-29 + 3.69 + First release + PisiLinux Community + admins@pisilinux.org + + + diff --git a/programming/language/perl/perl-HTML-Parser/translations.xml b/programming/language/perl/perl-HTML-Parser/translations.xml new file mode 100644 index 0000000000..aac28f43fa --- /dev/null +++ b/programming/language/perl/perl-HTML-Parser/translations.xml @@ -0,0 +1,9 @@ + + + + perl-HTML-Parser + HTML ayrıştırmak için kütüphane + HTML-Parser yazılımı, HTML dökümanlarından bilgi ayrıştıran ve seçip çıkaran bir modüller kolleksiyonudur. + La distribución HTML-Parser es una colección de módulos que analizan la sintaxis y extraen información de documentos HTML. + + diff --git a/programming/language/perl/perl-HTML-Scrubber/actions.py b/programming/language/perl/perl-HTML-Scrubber/actions.py new file mode 100644 index 0000000000..76e7f56060 --- /dev/null +++ b/programming/language/perl/perl-HTML-Scrubber/actions.py @@ -0,0 +1,24 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import perlmodules +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +WorkDir = "%s-%s" % (get.srcNAME()[5:], get.srcVERSION()) + +def setup(): + perlmodules.configure() + +def build(): + perlmodules.make() + +def check(): + perlmodules.make("test") + +def install(): + perlmodules.install() + diff --git a/programming/language/perl/perl-HTML-Scrubber/pspec.xml b/programming/language/perl/perl-HTML-Scrubber/pspec.xml new file mode 100644 index 0000000000..55485f4332 --- /dev/null +++ b/programming/language/perl/perl-HTML-Scrubber/pspec.xml @@ -0,0 +1,64 @@ + + + + + perl-HTML-Scrubber + http://search.cpan.org/dist/HTML-Scrubber + + Pisi Linux Admins + admins@pisilinux.org + + Artistic + library + Perl extension for scrubbing/sanitizing html + If you wanna scrub or sanitize html input in a reliable an flexible fashion, then this module is for you. I wasn't satisfied with HTML::Sanitizer because it is based on HTML::TreeBuilder, so I thought I'd write something similar that works directly with HTML::Parser. + http://search.cpan.org/CPAN/authors/id/N/NI/NIGELM/HTML-Scrubber-0.11.tar.gz + + perl-HTML-Parser + perl + + + + + perl-HTML-Scrubber + + perl-HTML-Parser + perl + + + /usr/lib + /usr/share/man + + + + + + 2014-09-10 + 0.11 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-24 + 0.11 + Version bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-07 + 0.09 + Rebuild for perl + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-09-07 + 0.09 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + diff --git a/programming/language/perl/perl-HTML-Scrubber/translations.xml b/programming/language/perl/perl-HTML-Scrubber/translations.xml new file mode 100644 index 0000000000..62112d019c --- /dev/null +++ b/programming/language/perl/perl-HTML-Scrubber/translations.xml @@ -0,0 +1,7 @@ + + + + perl-HTML-Scrubber + HTML dosyalarını düzenlemek için bir perl modülü + + diff --git a/programming/language/perl/perl-HTML-Tagset/actions.py b/programming/language/perl/perl-HTML-Tagset/actions.py new file mode 100644 index 0000000000..731ff053b8 --- /dev/null +++ b/programming/language/perl/perl-HTML-Tagset/actions.py @@ -0,0 +1,25 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import perlmodules +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +WorkDir = "%s-%s" % (get.srcNAME()[5:], get.srcVERSION()) + +def setup(): + perlmodules.configure() + +def build(): + perlmodules.make() + +def check(): + perlmodules.make("test") + +def install(): + perlmodules.install() + + pisitools.dodoc("Changes","README") diff --git a/programming/language/perl/perl-HTML-Tagset/pspec.xml b/programming/language/perl/perl-HTML-Tagset/pspec.xml new file mode 100644 index 0000000000..18669aeee8 --- /dev/null +++ b/programming/language/perl/perl-HTML-Tagset/pspec.xml @@ -0,0 +1,63 @@ + + + + + perl-HTML-Tagset + http://search.cpan.org/dist/HTML-Tagset/ + + Pisi Linux Admins + admins@pisilinux.org + + Artistic + library + Data tables useful in parsing HTML + HTML-Tagset contains several data tables useful in various kinds of HTML parsing operations. + http://search.cpan.org/CPAN/authors/id/P/PE/PETDANCE/HTML-Tagset-3.20.tar.gz + + perl + + + + + perl-HTML-Tagset + + perl + + + /usr/lib + /usr/share/man + /usr/share/doc/perl-HTML-Tagset + + + + + + 2014-09-10 + 3.20 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 3.20 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-01 + 3.20 + Rebuild for new perl. + PisiLinux Community + admins@pisilinux.org + + + 2012-09-07 + 3.20 + First release + PisiLinux Community + admins@pisilinux.org + + + diff --git a/programming/language/perl/perl-HTML-Tagset/translations.xml b/programming/language/perl/perl-HTML-Tagset/translations.xml new file mode 100644 index 0000000000..cdca9e3adf --- /dev/null +++ b/programming/language/perl/perl-HTML-Tagset/translations.xml @@ -0,0 +1,9 @@ + + + + perl-HTML-Tagset + HTML ayrıştırmak için yararlı bilgi tabloları + HTML-Tagset HTML ayrıştırmak için yararlı birçok bilgi tablosunu barındırır. + HTML-Tagset contiene varios tablas de datos útiles para varias operaciones de parsear HTML. + + diff --git a/programming/language/perl/perl-HTML-Template-Pro/actions.py b/programming/language/perl/perl-HTML-Template-Pro/actions.py new file mode 100644 index 0000000000..9a1653ef65 --- /dev/null +++ b/programming/language/perl/perl-HTML-Template-Pro/actions.py @@ -0,0 +1,25 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import perlmodules +from pisi.actionsapi import pisitools +from pisi.actionsapi import shelltools +from pisi.actionsapi import get + +def setup(): + perlmodules.configure() + +def build(): + perlmodules.make() + +def check(): + shelltools.export("LC_ALL", "C") + perlmodules.make("test") + +def install(): + perlmodules.install() + + pisitools.dodoc("Changes", "README") diff --git a/programming/language/perl/perl-HTML-Template-Pro/pspec.xml b/programming/language/perl/perl-HTML-Template-Pro/pspec.xml new file mode 100644 index 0000000000..3d571859f8 --- /dev/null +++ b/programming/language/perl/perl-HTML-Template-Pro/pspec.xml @@ -0,0 +1,68 @@ + + + + + perl-HTML-Template-Pro + http://search.cpan.org/dist/HTML-Template-Pro + + Pisi Linux Admins + admins@pisilinux.org + + Artistic + GPLv2 + LGPLv2 + library + Perl/XS module to use HTML Templates from CGI scripts + A fast and lightweight C/Perl+XS HTML Template engine implementation. + http://search.cpan.org/CPAN/authors/id/V/VI/VIY/HTML-Template-Pro-0.9510.tar.gz + + perl + perl-JSON + + + + + perl-HTML-Template-Pro + + perl + perl-JSON + + + /usr/lib + /usr/share/perl + /usr/share/doc + /usr/share/man + + + + + + 2014-09-10 + 0.9510 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-24 + 0.9510 + Version bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-07 + 0.9509 + Rebuild for perl + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-09-07 + 0.9509 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + diff --git a/programming/language/perl/perl-HTML-Template-Pro/translations.xml b/programming/language/perl/perl-HTML-Template-Pro/translations.xml new file mode 100644 index 0000000000..c1e5688c2a --- /dev/null +++ b/programming/language/perl/perl-HTML-Template-Pro/translations.xml @@ -0,0 +1,7 @@ + + + + perl-HTML-Template-Pro + CGI betiklerindeki HTML şablonlarını kullanabilen Perl/XS modülü + + diff --git a/programming/language/perl/perl-HTML-Template/actions.py b/programming/language/perl/perl-HTML-Template/actions.py new file mode 100644 index 0000000000..d836d318cc --- /dev/null +++ b/programming/language/perl/perl-HTML-Template/actions.py @@ -0,0 +1,23 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import perlmodules +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +def setup(): + perlmodules.configure() + +def build(): + perlmodules.make() + +def check(): + perlmodules.make("test") + +def install(): + perlmodules.install() + + pisitools.dodoc("README","Change*") \ No newline at end of file diff --git a/programming/language/perl/perl-HTML-Template/pspec.xml b/programming/language/perl/perl-HTML-Template/pspec.xml new file mode 100644 index 0000000000..949e208a37 --- /dev/null +++ b/programming/language/perl/perl-HTML-Template/pspec.xml @@ -0,0 +1,65 @@ + + + + + perl-HTML-Template + http://search.cpan.org/~wonko/HTML-Template-2.91/ + + Osman Erkan + osman.erkan@pisilinux.org + + Artistic + GPLv2 + programming.language.perl + app:console + Perl module to use HTML-like templating language + First you make a template - this is just a normal HTML file with a few extra tags, the simplest being <TMPL_VAR> + http://search.cpan.org/CPAN/authors/id/W/WO/WONKO/HTML-Template-2.95.tar.gz + + perl + + + + + perl-HTML-Template + + perl + + + /usr/lib + /usr/share/doc + /usr/share/man + /usr/share + + + + + 2014-09-10 + 2.95 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-24 + 2.95 + Version bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-07 + 2.91 + Rebuild for perl + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-09-06 + 2.91 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + diff --git a/programming/language/perl/perl-HTML-Template/translations.xml b/programming/language/perl/perl-HTML-Template/translations.xml new file mode 100644 index 0000000000..8a275d94ba --- /dev/null +++ b/programming/language/perl/perl-HTML-Template/translations.xml @@ -0,0 +1,8 @@ + + + + perl-HTML-Template + Perl module to use HTML-like templating language + First you make a template - this is just a normal HTML file with a few extra tags, the simplest being <TMPL_VAR> + + diff --git a/programming/language/perl/perl-HTML-Tree/actions.py b/programming/language/perl/perl-HTML-Tree/actions.py new file mode 100644 index 0000000000..85341013af --- /dev/null +++ b/programming/language/perl/perl-HTML-Tree/actions.py @@ -0,0 +1,26 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/copyleft/gpl.txt. + +from pisi.actionsapi import perlmodules +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +WorkDir = "%s-%s" % (get.srcNAME()[5:], get.srcVERSION()) + +def setup(): + perlmodules.configure() + +def build(): + perlmodules.make() + +def check(): + perlmodules.make("test") + +def install(): + perlmodules.install() + + pisitools.dodoc("Changes", "README") + diff --git a/programming/language/perl/perl-HTML-Tree/pspec.xml b/programming/language/perl/perl-HTML-Tree/pspec.xml new file mode 100644 index 0000000000..dc5cdcb496 --- /dev/null +++ b/programming/language/perl/perl-HTML-Tree/pspec.xml @@ -0,0 +1,73 @@ + + + + + perl-HTML-Tree + http://search.cpan.org/dist/HTML-Tree/ + + Pisi Linux Admins + admins@pisilinux.org + + GPLv2 + library + app:console + A Perl module that build and scan parse-trees of HTML + Build and scan parse-trees of HTML. It allows to represent,create and extract information from HTML syntax trees. + http://search.cpan.org/CPAN/authors/id/C/CJ/CJM/HTML-Tree-5.03.tar.gz + + perl + perl-HTML-Tagset + perl-HTML-Parser + perl-Test-Exception + perl-Test-Pod-Coverage + + + + + perl-HTML-Tree + + perl + perl-HTML-Tagset + perl-HTML-Parser + perl-Test-Exception + perl-Test-Pod-Coverage + + + /usr/bin + /usr/lib + /usr/share/man + /usr/share/doc + + + + + + 2014-09-10 + 5.03 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-24 + 5.03 + Version bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-07 + 5.02 + Rebuild for perl + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-09-07 + 5.02 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + diff --git a/programming/language/perl/perl-HTML-Tree/translations.xml b/programming/language/perl/perl-HTML-Tree/translations.xml new file mode 100644 index 0000000000..d018412d83 --- /dev/null +++ b/programming/language/perl/perl-HTML-Tree/translations.xml @@ -0,0 +1,8 @@ + + + + perl-HTML-Tree + HTML etiketlerin ayrıştırıcı ağaçlarını inşa etmeye yarayan bir Perl modülü + HTML etiketlerin ayrıştırıcı ağaçlarını inşa etmeye yarayan bir Perl modülüdür. HTML ağaçlarındaki bilgileri oluşturmaya, çıkartmaya ve sunmaya yarar. + + diff --git a/programming/language/perl/perl-HTTP-Body/actions.py b/programming/language/perl/perl-HTTP-Body/actions.py new file mode 100644 index 0000000000..c806de93ef --- /dev/null +++ b/programming/language/perl/perl-HTTP-Body/actions.py @@ -0,0 +1,23 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import perlmodules +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +def setup(): + perlmodules.configure() + +def build(): + perlmodules.make() + +def check(): + perlmodules.make("test") + +def install(): + perlmodules.install() + + pisitools.dodoc("Changes", "MANIFEST", "README") \ No newline at end of file diff --git a/programming/language/perl/perl-HTTP-Body/pspec.xml b/programming/language/perl/perl-HTTP-Body/pspec.xml new file mode 100644 index 0000000000..5d93ab4f64 --- /dev/null +++ b/programming/language/perl/perl-HTTP-Body/pspec.xml @@ -0,0 +1,67 @@ + + + + + perl-HTTP-Body + http://search.cpan.org/~getty/HTTP-Body-1.15/ + + Osman Erkan + osman.erkan@pisilinux.org + + Artistic + GPLv2 + programming.language.perl + app:console + HTTP Body Parser + HTTP::Body parses chunks of HTTP POST data and supports application/octet-stream, application/x-www-form-urlencoded, and multipart/form-data. + http://search.cpan.org/CPAN/authors/id/G/GE/GETTY/HTTP-Body-1.19.tar.gz + + perl + perl-Test-Deep + + + + + perl-HTTP-Body + + perl + + + /usr/lib + /usr/share/doc + /usr/share/man + /usr/share + + + + + + 2014-09-10 + 1.19 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-24 + 1.19 + Version bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-07 + 0.25 + Rebuild for perl + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-09-07 + 1.15 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + diff --git a/programming/language/perl/perl-HTTP-Body/translations.xml b/programming/language/perl/perl-HTTP-Body/translations.xml new file mode 100644 index 0000000000..15daad9553 --- /dev/null +++ b/programming/language/perl/perl-HTTP-Body/translations.xml @@ -0,0 +1,8 @@ + + + + perl-HTTP-Body + HTTP Body Parser + HTTP::Body parses chunks of HTTP POST data and supports application/octet-stream, application/x-www-form-urlencoded, and multipart/form-data. + + diff --git a/programming/language/perl/perl-HTTP-Cookies/actions.py b/programming/language/perl/perl-HTTP-Cookies/actions.py new file mode 100644 index 0000000000..161fc86b09 --- /dev/null +++ b/programming/language/perl/perl-HTTP-Cookies/actions.py @@ -0,0 +1,24 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import perlmodules +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +def setup(): + perlmodules.configure() + +def build(): + perlmodules.make() + +def check(): + perlmodules.make("test") + +def install(): + perlmodules.install() + pisitools.remove("/usr/share/man/man3/HTTP::Cookies.3pm") + pisitools.remove("/usr/share/man/man3/HTTP::Cookies::Netscape.3pm") + pisitools.remove("/usr/share/man/man3/HTTP::Cookies::Microsoft.3pm") diff --git a/programming/language/perl/perl-HTTP-Cookies/pspec.xml b/programming/language/perl/perl-HTTP-Cookies/pspec.xml new file mode 100644 index 0000000000..4f1baa804c --- /dev/null +++ b/programming/language/perl/perl-HTTP-Cookies/pspec.xml @@ -0,0 +1,68 @@ + + + + + perl-HTTP-Cookies + http://search.cpan.org/~gaas/HTTP-Cookies-6.01/ + + Osman Erkan + osman.erkan@pisilinux.org + + Artistic + GPLv2 + programming.language.perl + app:console + HTTP cookie jars + This class is for objects that represent a "cookie jar" -- that is, a database of all the HTTP cookies that a given LWP::UserAgent object knows about. + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/HTTP-Cookies-6.01.tar.gz + + perl + perl-HTTP-Message + + + + + perl-HTTP-Cookies + + perl + perl-HTTP-Message + + + /usr/lib + /usr/share/doc + /usr/share/man + /usr/share + + + + + + 2014-09-10 + 6.01 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 6.01 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-07 + 6.01 + Rebuild for perl + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-09-07 + 6.01 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + diff --git a/programming/language/perl/perl-HTTP-Cookies/translations.xml b/programming/language/perl/perl-HTTP-Cookies/translations.xml new file mode 100644 index 0000000000..4ab17feeb2 --- /dev/null +++ b/programming/language/perl/perl-HTTP-Cookies/translations.xml @@ -0,0 +1,8 @@ + + + + perl-HTTP-Cookies + HTTP cookie jars + This class is for objects that represent a "cookie jar" -- that is, a database of all the HTTP cookies that a given LWP::UserAgent object knows about. + + diff --git a/programming/language/perl/perl-HTTP-Daemon/actions.py b/programming/language/perl/perl-HTTP-Daemon/actions.py new file mode 100644 index 0000000000..7239c2e833 --- /dev/null +++ b/programming/language/perl/perl-HTTP-Daemon/actions.py @@ -0,0 +1,24 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import perlmodules +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +def setup(): + perlmodules.configure() + +def build(): + perlmodules.make() + +def check(): + perlmodules.make("test") + +def install(): + perlmodules.install() + pisitools.remove("/usr/share/man/man3/HTTP::Daemon.3pm") + + pisitools.dodoc("Changes", "MANIFEST", "README") diff --git a/programming/language/perl/perl-HTTP-Daemon/pspec.xml b/programming/language/perl/perl-HTTP-Daemon/pspec.xml new file mode 100644 index 0000000000..1ec98754d6 --- /dev/null +++ b/programming/language/perl/perl-HTTP-Daemon/pspec.xml @@ -0,0 +1,66 @@ + + + + + perl-HTTP-Daemon + http://search.cpan.org/~gaas/HTTP-Daemon-6.01/ + + Osman Erkan + osman.erkan@pisilinux.org + + Artistic + GPLv2 + programming.language.perl + app:console + a simple http server class + Instances of the HTTP::Daemon class are HTTP/1.1 servers that listen on a socket for incoming requests. + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/HTTP-Daemon-6.01.tar.gz + + perl + + + + + perl-HTTP-Daemon + + perl + + + /usr/lib + /usr/share/doc + /usr/share/man + /usr/share + + + + + + 2014-09-10 + 6.01 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 6.01 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-01 + 6.01 + Rebuild for new perl. + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-09-06 + 6.01 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + diff --git a/programming/language/perl/perl-HTTP-Daemon/translations.xml b/programming/language/perl/perl-HTTP-Daemon/translations.xml new file mode 100644 index 0000000000..02bf3049ff --- /dev/null +++ b/programming/language/perl/perl-HTTP-Daemon/translations.xml @@ -0,0 +1,8 @@ + + + + perl-HTTP-Daemon + a simple http server class + Instances of the HTTP::Daemon class are HTTP/1.1 servers that listen on a socket for incoming requests. + + diff --git a/programming/language/perl/perl-HTTP-Date/actions.py b/programming/language/perl/perl-HTTP-Date/actions.py new file mode 100644 index 0000000000..4186018514 --- /dev/null +++ b/programming/language/perl/perl-HTTP-Date/actions.py @@ -0,0 +1,25 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import perlmodules +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +WorkDir = "%s-%s" % (get.srcNAME()[5:], get.srcVERSION()) + +def setup(): + perlmodules.configure() + +def build(): + perlmodules.make() + +def check(): + perlmodules.make("test") + +def install(): + perlmodules.install() + + pisitools.remove("/usr/share/man/man3/HTTP::Date.3pm") diff --git a/programming/language/perl/perl-HTTP-Date/pspec.xml b/programming/language/perl/perl-HTTP-Date/pspec.xml new file mode 100644 index 0000000000..73ac3f75b7 --- /dev/null +++ b/programming/language/perl/perl-HTTP-Date/pspec.xml @@ -0,0 +1,66 @@ + + + + + perl-HTTP-Date + http://search.cpan.org/~gaas/HTTP-Date-6.02/ + + Osman Erkan + osman.erkan@pisilinux.org + + Artistic + GPLv2 + programming.language.perl + app:console + date conversion routines + This module provides functions that deal the date formats used by the HTTP protocol (and then some more). Only the first two functions, time2str() and str2time(), are exported by default. + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/HTTP-Date-6.02.tar.gz + + perl + + + + + perl-HTTP-Date + + perl + + + /usr/lib + /usr/share/doc + /usr/share/man + /usr/share + + + + + + 2014-09-10 + 6.02 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 6.02 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-01 + 6.02 + Rebuild for new perl. + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-09-07 + 6.02 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + diff --git a/programming/language/perl/perl-HTTP-Date/translations.xml b/programming/language/perl/perl-HTTP-Date/translations.xml new file mode 100644 index 0000000000..71679051c6 --- /dev/null +++ b/programming/language/perl/perl-HTTP-Date/translations.xml @@ -0,0 +1,9 @@ + + + + perl-HTTP-Date + date conversion routines + This module provides functions that deal the date formats used by the HTTP protocol (and then some more). Only the first two functions, time2str() and str2time(), are exported by default. + + + diff --git a/programming/language/perl/perl-HTTP-Message/actions.py b/programming/language/perl/perl-HTTP-Message/actions.py new file mode 100644 index 0000000000..213e54c931 --- /dev/null +++ b/programming/language/perl/perl-HTTP-Message/actions.py @@ -0,0 +1,30 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import perlmodules +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +def setup(): + perlmodules.configure() + +def build(): + perlmodules.make() + +def check(): + perlmodules.make("test") + +def install(): + perlmodules.install() + + pisitools.remove("/usr/share/man/man3/HTTP::Request::Common.3pm") + pisitools.remove("/usr/share/man/man3/HTTP::Request.3pm") + pisitools.remove("/usr/share/man/man3/HTTP::Status.3pm") + pisitools.remove("/usr/share/man/man3/HTTP::Config.3pm") + pisitools.remove("/usr/share/man/man3/HTTP::Headers::Util.3pm") + pisitools.remove("/usr/share/man/man3/HTTP::Response.3pm") + pisitools.remove("/usr/share/man/man3/HTTP::Headers.3pm") + pisitools.remove("/usr/share/man/man3/HTTP::Message.3pm") diff --git a/programming/language/perl/perl-HTTP-Message/pspec.xml b/programming/language/perl/perl-HTTP-Message/pspec.xml new file mode 100644 index 0000000000..39a4c37b2b --- /dev/null +++ b/programming/language/perl/perl-HTTP-Message/pspec.xml @@ -0,0 +1,73 @@ + + + + + perl-HTTP-Message + http://search.cpan.org/~gaas/HTTP-Message-6.03/ + + Osman Erkan + osman.erkan@pisilinux.org + + Artistic + GPLv2 + programming.language.perl + app:console + Class encapsulating HTTP Message headers + The HTTP::Headers class encapsulates HTTP-style message headers. + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/HTTP-Message-6.06.tar.gz + + perl + perl-LWP-Mediatypes + perl-HTTP-Date + perl-HTML-Parser + perl-URI + + + + perl-HTTP-Message + + perl + perl-LWP-Mediatypes + perl-HTTP-Date + perl-HTML-Parser + perl-URI + + + /usr/lib + /usr/share/doc + /usr/share/man + /usr/share + + + + + + 2014-09-10 + 6.06 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-24 + 6.06 + Version bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-01 + 6.03 + Rebuild for new perl. + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-11-16 + 6.03 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + diff --git a/programming/language/perl/perl-HTTP-Message/translations.xml b/programming/language/perl/perl-HTTP-Message/translations.xml new file mode 100644 index 0000000000..e062204358 --- /dev/null +++ b/programming/language/perl/perl-HTTP-Message/translations.xml @@ -0,0 +1,8 @@ + + + + perl-HTTP-Message + Class encapsulating HTTP Message headers + The HTTP::Headers class encapsulates HTTP-style message headers. + + diff --git a/programming/language/perl/perl-HTTP-Negotiate/actions.py b/programming/language/perl/perl-HTTP-Negotiate/actions.py new file mode 100644 index 0000000000..24956f3867 --- /dev/null +++ b/programming/language/perl/perl-HTTP-Negotiate/actions.py @@ -0,0 +1,26 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import perlmodules +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +WorkDir = "%s-%s" % (get.srcNAME()[5:], get.srcVERSION()) + +def setup(): + perlmodules.configure() + +def build(): + perlmodules.make() + +def check(): + perlmodules.make("test") + +def install(): + perlmodules.install() + pisitools.remove("/usr/share/man/man3/HTTP::Negotiate.3pm") + + pisitools.dodoc("Changes", "MANIFEST", "README") diff --git a/programming/language/perl/perl-HTTP-Negotiate/pspec.xml b/programming/language/perl/perl-HTTP-Negotiate/pspec.xml new file mode 100644 index 0000000000..a1bc6be3a0 --- /dev/null +++ b/programming/language/perl/perl-HTTP-Negotiate/pspec.xml @@ -0,0 +1,69 @@ + + + + + perl-HTTP-Negotiate + http://search.cpan.org/~gaas/HTTP-Negotiate-6.01/ + + Osman Erkan + osman.erkan@pisilinux.org + + Artistic + GPLv2 + programming.language.perl + app:console + choose a variant to serve + This module provides a complete implementation of the HTTP content negotiation algorithm specified in draft-ietf-http-v11-spec-00.ps chapter 12. Content negotiation allows for the selection of a preferred content representation based upon attributes of the negotiable variants and the value of the various Accept* header fields in the request. + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/HTTP-Negotiate-6.01.tar.gz + + perl + perl-HTTP-Date + perl-HTTP-Message + + + + perl-HTTP-Negotiate + + perl + perl-HTTP-Date + perl-HTTP-Message + + + /usr/lib + /usr/share/doc + /usr/share/man + /usr/share + + + + + + 2014-09-10 + 6.01 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 6.01 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-01 + 6.01 + Rebuild for new perl. + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-11-16 + 6.01 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + diff --git a/programming/language/perl/perl-HTTP-Negotiate/translations.xml b/programming/language/perl/perl-HTTP-Negotiate/translations.xml new file mode 100644 index 0000000000..0d7ce0d441 --- /dev/null +++ b/programming/language/perl/perl-HTTP-Negotiate/translations.xml @@ -0,0 +1,8 @@ + + + + perl-HTTP-Negotiate + choose a variant to serve + This module provides a complete implementation of the HTTP content negotiation algorithm specified in draft-ietf-http-v11-spec-00.ps chapter 12. Content negotiation allows for the selection of a preferred content representation based upon attributes of the negotiable variants and the value of the various Accept* header fields in the request. + + diff --git a/programming/language/perl/perl-HTTP-Server-Simple/actions.py b/programming/language/perl/perl-HTTP-Server-Simple/actions.py new file mode 100644 index 0000000000..7745843799 --- /dev/null +++ b/programming/language/perl/perl-HTTP-Server-Simple/actions.py @@ -0,0 +1,25 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/copyleft/gpl.txt. + +from pisi.actionsapi import pisitools +from pisi.actionsapi import get +from pisi.actionsapi import perlmodules + +WorkDir = "%s-%s" % (get.srcNAME()[5:], get.srcVERSION()) + +def setup(): + perlmodules.configure() + +def build(): + perlmodules.make() + +def check(): + perlmodules.make("test") + +def install(): + perlmodules.install() + + pisitools.dodoc("README", "Changes") diff --git a/programming/language/perl/perl-HTTP-Server-Simple/pspec.xml b/programming/language/perl/perl-HTTP-Server-Simple/pspec.xml new file mode 100644 index 0000000000..061fb73d92 --- /dev/null +++ b/programming/language/perl/perl-HTTP-Server-Simple/pspec.xml @@ -0,0 +1,65 @@ + + + + + perl-HTTP-Server-Simple + http://search.cpan.org/dist/HTTP-Server-Simple/ + + Pisi Linux Admins + admins@pisilinux.org + + Artistic + library + Lightweight HTTP Server + HTTP::Server::Simple is a very simple standalone HTTP daemon with no non-core module dependencies. It's ideal for building a standalone http-based UI to your existing tools. + http://search.cpan.org/CPAN/authors/id/J/JE/JESSE/HTTP-Server-Simple-0.45_02.tar.gz + + perl + perl-URI + + + + + perl-HTTP-Server-Simple + + perl + perl-URI + + + /usr/lib + /usr/share/doc + /usr/share/man + + + + + + 2014-09-10 + 0.45_02 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-25 + 0.45_02 + Version bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-07 + 0.44 + Rebuild for perl + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-09-07 + 0.44 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + diff --git a/programming/language/perl/perl-HTTP-Server-Simple/translations.xml b/programming/language/perl/perl-HTTP-Server-Simple/translations.xml new file mode 100644 index 0000000000..de5643d090 --- /dev/null +++ b/programming/language/perl/perl-HTTP-Server-Simple/translations.xml @@ -0,0 +1,8 @@ + + + + perl-HTTP-Server-Simple + Basit bir HTTP Sunucusu + HTTP::Server::Simple basit, perl çekirdek modülleri dışında bağımlılığı olmadan tek başına çalışabilen bir HTTP hizmetidir. Tek başına çalışan, HTTP temelli bir uygulama yazmak istiyorsanız idealdir. + + diff --git a/programming/language/perl/perl-IO-Socket-SSL/actions.py b/programming/language/perl/perl-IO-Socket-SSL/actions.py new file mode 100644 index 0000000000..e3246c12c6 --- /dev/null +++ b/programming/language/perl/perl-IO-Socket-SSL/actions.py @@ -0,0 +1,25 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import perlmodules +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +WorkDir = "%s-%s" % (get.srcNAME()[5:], get.srcVERSION()) + +def setup(): + perlmodules.configure() + +def build(): + perlmodules.make() + +#def check(): +# perlmodules.make("test") + +def install(): + perlmodules.install() + + pisitools.dodoc("Changes", "README") diff --git a/programming/language/perl/perl-IO-Socket-SSL/pspec.xml b/programming/language/perl/perl-IO-Socket-SSL/pspec.xml new file mode 100644 index 0000000000..6994d220a8 --- /dev/null +++ b/programming/language/perl/perl-IO-Socket-SSL/pspec.xml @@ -0,0 +1,65 @@ + + + + + perl-IO-Socket-SSL + http://search.cpan.org/dist/IO-Socket-SSL/ + + Pisi Linux Admins + admins@pisilinux.org + + Artistic + library + Nearly transparent SSL encapsulation for IO::Socket::INET + IO::Socket::SSL is a class implementing an object oriented interface to SSL sockets. The class is a descendent of IO::Socket::INET. + http://search.cpan.org/CPAN/authors/id/S/SU/SULLR/IO-Socket-SSL-1.998.tar.gz + + perl-Net-SSLeay + perl + + + + + perl-IO-Socket-SSL + + perl-Net-SSLeay + perl + + + /usr/lib + /usr/share/man + /usr/share/doc/perl-IO-Socket-SSL + + + + + + 2014-09-10 + 1.998 + Version bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-24 + 1.989 + Version bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-01 + 1.76 + Rebuild for new perl. + PisiLinux Community + admins@pisilinux.org + + + 2012-09-07 + 1.76 + First release + PisiLinux Community + admins@pisilinux.org + + + diff --git a/programming/language/perl/perl-IO-Socket-SSL/translations.xml b/programming/language/perl/perl-IO-Socket-SSL/translations.xml new file mode 100644 index 0000000000..b032dcb4a3 --- /dev/null +++ b/programming/language/perl/perl-IO-Socket-SSL/translations.xml @@ -0,0 +1,8 @@ + + + + perl-IO-Socket-SSL + IO::Socket::SSL, SSL soketlerine nesne yönelimli arayüz sağlayan bir sınıftır. IO::Socket::INET'in gelişmişidir. + IO::Socket::SSL es una clase que implementa una inerfaz a sockets SSL, orientado a objetos. La clase es descendiente de IO::Socket::INET. + + diff --git a/programming/language/perl/perl-LWP-Mediatypes/actions.py b/programming/language/perl/perl-LWP-Mediatypes/actions.py new file mode 100644 index 0000000000..91018c3314 --- /dev/null +++ b/programming/language/perl/perl-LWP-Mediatypes/actions.py @@ -0,0 +1,24 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import perlmodules +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +def setup(): + perlmodules.configure() + +def build(): + perlmodules.make() + +def check(): + perlmodules.make("test") + +def install(): + perlmodules.install() + pisitools.remove("/usr/share/man/man3/LWP::MediaTypes.3pm") + + pisitools.dodoc("Changes", "MANIFEST", "README") diff --git a/programming/language/perl/perl-LWP-Mediatypes/pspec.xml b/programming/language/perl/perl-LWP-Mediatypes/pspec.xml new file mode 100644 index 0000000000..05a502a67c --- /dev/null +++ b/programming/language/perl/perl-LWP-Mediatypes/pspec.xml @@ -0,0 +1,66 @@ + + + + + perl-LWP-Mediatypes + http://search.cpan.org/~gaas/LWP-MediaTypes-6.02/ + + Osman Erkan + osman.erkan@pisilinux.org + + Artistic + GPLv2 + programming.language.perl + app:console + guess media type for a file or a URL + This module provides functions for handling media (also known as MIME) types and encodings. + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/LWP-MediaTypes-6.02.tar.gz + + perl + + + + + perl-LWP-Mediatypes + + perl + + + /usr/lib + /usr/share/doc + /usr/share/man + /usr/share + + + + + + 2014-09-10 + 6.02 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 12.2 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-01 + 12.2 + Rebuild for new perl. + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-09-07 + 6.02 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + diff --git a/programming/language/perl/perl-LWP-Mediatypes/translations.xml b/programming/language/perl/perl-LWP-Mediatypes/translations.xml new file mode 100644 index 0000000000..ece3eb34d8 --- /dev/null +++ b/programming/language/perl/perl-LWP-Mediatypes/translations.xml @@ -0,0 +1,8 @@ + + + + perl-LWP-Mediatypes + guess media type for a file or a URL + This module provides functions for handling media (also known as MIME) types and encodings. + + diff --git a/programming/language/perl/perl-LWP-Protocol-https/actions.py b/programming/language/perl/perl-LWP-Protocol-https/actions.py new file mode 100644 index 0000000000..76bb21d50b --- /dev/null +++ b/programming/language/perl/perl-LWP-Protocol-https/actions.py @@ -0,0 +1,23 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import perlmodules +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +def setup(): + perlmodules.configure() + +def build(): + perlmodules.make() + +def check(): + perlmodules.make("test") + +def install(): + perlmodules.install() + + pisitools.dodoc("Changes", "MANIFEST", "README") \ No newline at end of file diff --git a/programming/language/perl/perl-LWP-Protocol-https/pspec.xml b/programming/language/perl/perl-LWP-Protocol-https/pspec.xml new file mode 100644 index 0000000000..aa3e5d9bc8 --- /dev/null +++ b/programming/language/perl/perl-LWP-Protocol-https/pspec.xml @@ -0,0 +1,44 @@ + + + + + perl-LWP-Protocol-https + http://search.cpan.org/~gaas/LWP-Protocol-https-6.04/lib/LWP/Protocol/https.pm + + Osman Erkan + osman.erkan@pisilinux.org + + Artistic + GPLv2 + app:console + LWP::Protocol::https - Provide https support for LWP::UserAgent + The LWP::Protocol::https module provides support for using https schemed URLs with LWP. This module is a plug-in to the LWP protocol handling, so you don't use it directly. Once the module is installed LWP is able to access sites using HTTP over SSL/TLS. + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/LWP-Protocol-https-6.04.tar.gz + + perl + perl-Mozilla-CA + + + + + perl-LWP-Protocol-https + + perl + + + /usr/lib + /usr/share/doc + /usr/share/man + + + + + + 2014-10-16 + 6.04 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + \ No newline at end of file diff --git a/programming/language/perl/perl-LWP-Protocol-https/translations.xml b/programming/language/perl/perl-LWP-Protocol-https/translations.xml new file mode 100644 index 0000000000..fa1b1497c9 --- /dev/null +++ b/programming/language/perl/perl-LWP-Protocol-https/translations.xml @@ -0,0 +1,8 @@ + + + + perl-LWP-Protocol-https + LWP::Protocol::https - Provide https support for LWP::UserAgent + The LWP::Protocol::https module provides support for using https schemed URLs with LWP. This module is a plug-in to the LWP protocol handling, so you don't use it directly. Once the module is installed LWP is able to access sites using HTTP over SSL/TLS. + + diff --git a/programming/language/perl/perl-NET-HTTP/actions.py b/programming/language/perl/perl-NET-HTTP/actions.py new file mode 100644 index 0000000000..80fc13ced9 --- /dev/null +++ b/programming/language/perl/perl-NET-HTTP/actions.py @@ -0,0 +1,25 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import perlmodules +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +def setup(): + perlmodules.configure() + +def build(): + perlmodules.make() + +def check(): + perlmodules.make("test") + +def install(): + perlmodules.install() + pisitools.remove("/usr/share/man/man3/Net::HTTP::NB.3pm") + pisitools.remove("/usr/share/man/man3/Net::HTTP.3pm") + + pisitools.dodoc("Changes", "MANIFEST", "README") diff --git a/programming/language/perl/perl-NET-HTTP/pspec.xml b/programming/language/perl/perl-NET-HTTP/pspec.xml new file mode 100644 index 0000000000..a1844565ca --- /dev/null +++ b/programming/language/perl/perl-NET-HTTP/pspec.xml @@ -0,0 +1,66 @@ + + + + + perl-NET-HTTP + http://search.cpan.org/~gaas/Net-HTTP-6.03/ + + Osman Erkan + osman.erkan@pisilinux.org + + Artistic + GPLv2 + programming.language.perl + app:console + Low-level HTTP connection (client) + The Net::HTTP class is a low-level HTTP client. An instance of the Net::HTTP class represents a connection to an HTTP server. The HTTP protocol is described in RFC 2616. The Net::HTTP class supports HTTP/1.0 and HTTP/1.1. + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/Net-HTTP-6.06.tar.gz + + perl + + + + + perl-NET-HTTP + + perl + + + /usr/lib + /usr/share/doc + /usr/share/man + /usr/share + + + + + + 2014-09-10 + 6.06 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-24 + 6.06 + Version bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-01 + 6.03 + Rebuild for new perl. + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-09-07 + 6.03 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + diff --git a/programming/language/perl/perl-NET-HTTP/translations.xml b/programming/language/perl/perl-NET-HTTP/translations.xml new file mode 100644 index 0000000000..58aabd164f --- /dev/null +++ b/programming/language/perl/perl-NET-HTTP/translations.xml @@ -0,0 +1,8 @@ + + + + perl-NET-HTTP + Low-level HTTP connection (client) + The Net::HTTP class is a low-level HTTP client. An instance of the Net::HTTP class represents a connection to an HTTP server. The HTTP protocol is described in RFC 2616. The Net::HTTP class supports HTTP/1.0 and HTTP/1.1. + + diff --git a/programming/language/perl/perl-Net-SMTP-SSL/actions.py b/programming/language/perl/perl-Net-SMTP-SSL/actions.py new file mode 100644 index 0000000000..f4199f6201 --- /dev/null +++ b/programming/language/perl/perl-Net-SMTP-SSL/actions.py @@ -0,0 +1,25 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import perlmodules +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +WorkDir = "Net-SMTP-SSL-%s" % get.srcVERSION() + +def setup(): + perlmodules.configure() + +def build(): + perlmodules.make() + +def check(): + perlmodules.make("test") + +def install(): + perlmodules.install() + + pisitools.dodoc("README", "MANIFEST", "Changes") diff --git a/programming/language/perl/perl-Net-SMTP-SSL/pspec.xml b/programming/language/perl/perl-Net-SMTP-SSL/pspec.xml new file mode 100644 index 0000000000..1f37350bc7 --- /dev/null +++ b/programming/language/perl/perl-Net-SMTP-SSL/pspec.xml @@ -0,0 +1,65 @@ + + + + + perl-Net-SMTP-SSL + http://search.cpan.org/dist/Net-SMTP-SSL/ + + Pisi Linux Admins + admins@pisilinux.org + + Artistic + library + SSL Support for Net::SMTP + perl-NET-SMTP-SSL implements the same API as Net::SMTP but uses IO::Socket::SSL for its network operations. + http://search.cpan.org/CPAN/authors/id/C/CW/CWEST/Net-SMTP-SSL-1.01.tar.gz + + perl + + + + + perl-Net-SMTP-SSL + + perl + perl-IO-Socket-SSL + + + /usr/lib + /usr/share/perl + /usr/share/doc + /usr/share/man + + + + + + 2014-09-10 + 1.01 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 1.01 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-12-01 + 1.01 + Rebuild for new perl. + Osman Erkan + osman.erkan@pisilinux.org + + + 2012-09-11 + 1.01 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + diff --git a/programming/language/perl/perl-Net-SMTP-SSL/translations.xml b/programming/language/perl/perl-Net-SMTP-SSL/translations.xml new file mode 100644 index 0000000000..925e5705b4 --- /dev/null +++ b/programming/language/perl/perl-Net-SMTP-SSL/translations.xml @@ -0,0 +1,8 @@ + + + + perl-Net-SMTP-SSL + Net::SMTP için SSL desteği + perl-Net-SMTP-SSL, SMTP protokolüne SSL desteği katarak güvenli e-posta gönderimi sağlar. + + diff --git a/programming/language/perl/perl-String-ShellQuote/actions.py b/programming/language/perl/perl-String-ShellQuote/actions.py new file mode 100644 index 0000000000..731ff053b8 --- /dev/null +++ b/programming/language/perl/perl-String-ShellQuote/actions.py @@ -0,0 +1,25 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import perlmodules +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +WorkDir = "%s-%s" % (get.srcNAME()[5:], get.srcVERSION()) + +def setup(): + perlmodules.configure() + +def build(): + perlmodules.make() + +def check(): + perlmodules.make("test") + +def install(): + perlmodules.install() + + pisitools.dodoc("Changes","README") diff --git a/programming/language/perl/perl-String-ShellQuote/pspec.xml b/programming/language/perl/perl-String-ShellQuote/pspec.xml new file mode 100644 index 0000000000..71d619d7ce --- /dev/null +++ b/programming/language/perl/perl-String-ShellQuote/pspec.xml @@ -0,0 +1,65 @@ + + + + + perl-String-ShellQuote + http://search.cpan.org/~rosch/String-ShellQuote + + Pisi Linux Admins + admins@pisilinux.org + + Artistic + library + app:console + Quote strings for passing through the shell + This module contains some functions which are useful for quoting strings which are going to pass through the shell or a shell-like object. + http://search.cpan.org/CPAN/authors/id/R/RO/ROSCH/String-ShellQuote-1.04.tar.gz + + perl + + + + + perl-String-ShellQuote + + perl + + + /usr/bin + /usr/lib + /usr/share/man + /usr/share/doc/perl-String-ShellQuote + + + + + + 2014-09-10 + 1.04 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 1.04 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-11-08 + 1.04 + Rebuild + Richard de Bruin + richdb@pisilinux.org + + + 2012-07-10 + 1.04 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + diff --git a/programming/language/perl/perl-String-ShellQuote/translations.xml b/programming/language/perl/perl-String-ShellQuote/translations.xml new file mode 100644 index 0000000000..bb2d3919db --- /dev/null +++ b/programming/language/perl/perl-String-ShellQuote/translations.xml @@ -0,0 +1,8 @@ + + + + perl-String-ShellQuote + Bu modül kabuk veya kabuk benzeri bir neseden geçecek dizgeleri tırnak içine almak için fonksiyonlar içerir. + El módulo contiene algunas funciones útiles para encerrar cadenas de texto entre comillas, para pasarlo a una shell o a un objeto similar. + + diff --git a/programming/language/perl/perl-URI/actions.py b/programming/language/perl/perl-URI/actions.py new file mode 100644 index 0000000000..be43815efc --- /dev/null +++ b/programming/language/perl/perl-URI/actions.py @@ -0,0 +1,25 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import perlmodules +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +WorkDir = "%s-%s" % (get.srcNAME()[5:], get.srcVERSION()) + +def setup(): + perlmodules.configure() + +def build(): + perlmodules.make() + +def check(): + perlmodules.make("test") + +def install(): + perlmodules.install() + + pisitools.dodoc("README", "Changes") diff --git a/programming/language/perl/perl-URI/pspec.xml b/programming/language/perl/perl-URI/pspec.xml new file mode 100644 index 0000000000..fb5a637076 --- /dev/null +++ b/programming/language/perl/perl-URI/pspec.xml @@ -0,0 +1,64 @@ + + + + + perl-URI + http://search.cpan.org/~gaas/URI + + Pisi Linux Admins + admins@pisilinux.org + + Artistic + library + Perl module for Uniform Resource Identifiers (absolute and relative) + A Uniform Resource Identifier is a compact string of characters that identifies an abstract or physical resource. A Uniform Resource Identifier can be further classified as either a Uniform Resource Locator (URL) or a Uniform Resource Name (URN). + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/URI-1.60.tar.gz + + perl + + + + + perl-URI + + perl + + + /usr/lib + /usr/share/perl + /usr/share/doc + /usr/share/man + + + + + + 2014-09-10 + 1.60 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 1.60 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-11-07 + 1.60 + Rebuild + Richard de Bruin + richdb@pisilinux.org + + + 2012-09-11 + 1.60 + First release + PisiLinux Community + admins@pisilinux.org + + + diff --git a/programming/language/perl/perl-URI/translations.xml b/programming/language/perl/perl-URI/translations.xml new file mode 100644 index 0000000000..e7f666119e --- /dev/null +++ b/programming/language/perl/perl-URI/translations.xml @@ -0,0 +1,8 @@ + + + + perl-URI + Bir URI (Uniform Resource Identifiers- Tektip Kaynak Belirleyicileri), soyut veya fiziki bir kaynağı belirleyen bir tekparça karakter dizgesidir. Bir URI, bir URL (Uniform Resource Locator – Tektip Kaynak Bulucu) veya bir URN (Uniform Resource Name – Tektip Kaynak Adı)’den daha ötede sınıflandırılabilir. + Un identificador de recurso uniformado (URI) es una cadena de caracteres compacta que identifica un recurso físico o abstracto. Se puede clasificar los URI en Uniform Resource Locator (URL) o Uniform Resource Name (URN). + + diff --git a/programming/language/perl/perl-WWW-Robotrules/actions.py b/programming/language/perl/perl-WWW-Robotrules/actions.py new file mode 100644 index 0000000000..e09fd4a09a --- /dev/null +++ b/programming/language/perl/perl-WWW-Robotrules/actions.py @@ -0,0 +1,26 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import perlmodules +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +def setup(): + perlmodules.configure() + +def build(): + perlmodules.make() + +def check(): + perlmodules.make("test") + +def install(): + perlmodules.install() + + pisitools.remove("/usr/share/man/man3/WWW::RobotRules::AnyDBM_File.3pm") + pisitools.remove("/usr/share/man/man3/WWW::RobotRules.3pm") + + pisitools.dodoc("Changes", "MANIFEST", "README") diff --git a/programming/language/perl/perl-WWW-Robotrules/pspec.xml b/programming/language/perl/perl-WWW-Robotrules/pspec.xml new file mode 100644 index 0000000000..fef805f1b5 --- /dev/null +++ b/programming/language/perl/perl-WWW-Robotrules/pspec.xml @@ -0,0 +1,64 @@ + + + + + perl-WWW-Robotrules + http://search.cpan.org/~gaas/WWW-RobotRules-6.02/ + + Osman Erkan + osman.erkan@pisilinux.org + + Artistic + GPLv2 + programming.language.perl + app:console + database of robots.txt-derived permissions + This module parses /robots.txt files as specified in "A Standard for Robot Exclusion", at <http://www.robotstxt.org/wc/norobots.html> Webmasters can use the /robots.txt file to forbid conforming robots from accessing parts of their web site. + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/WWW-RobotRules-6.02.tar.gz + + perl + + + + perl-WWW-Robotrules + + perl + + + /usr/lib + /usr/share/doc + /usr/share/man + /usr/share + + + + + 2014-09-10 + 6.02 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 6.02 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-11-06 + 6.02 + Rebuild + Richard de Bruin + richdb@pisilinux.org + + + 2012-09-07 + 6.02 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + diff --git a/programming/language/perl/perl-WWW-Robotrules/translations.xml b/programming/language/perl/perl-WWW-Robotrules/translations.xml new file mode 100644 index 0000000000..10e5198000 --- /dev/null +++ b/programming/language/perl/perl-WWW-Robotrules/translations.xml @@ -0,0 +1,8 @@ + + + + perl-WWW-Robotrules + database of robots.txt-derived permissions + This module parses /robots.txt files as specified in "A Standard for Robot Exclusion", at <http://www.robotstxt.org/wc/norobots.html> Webmasters can use the /robots.txt file to forbid conforming robots from accessing parts of their web site. + + diff --git a/programming/language/perl/perl-libwww/actions.py b/programming/language/perl/perl-libwww/actions.py new file mode 100644 index 0000000000..9a240a5e63 --- /dev/null +++ b/programming/language/perl/perl-libwww/actions.py @@ -0,0 +1,27 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import perlmodules +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +WorkDir = "libwww-perl-%s" % get.srcVERSION() + +def setup(): + perlmodules.configure() + +def build(): + perlmodules.make() + +def check(): + perlmodules.make("test") + +def install(): + perlmodules.install() + for method in ["GET", "POST", "HEAD"]: + pisitools.dosym("/usr/bin/lwp-request", "/usr/bin/%s" % method) + + pisitools.dodoc("Changes","README") diff --git a/programming/language/perl/perl-libwww/pspec.xml b/programming/language/perl/perl-libwww/pspec.xml new file mode 100644 index 0000000000..fcba14ac31 --- /dev/null +++ b/programming/language/perl/perl-libwww/pspec.xml @@ -0,0 +1,89 @@ + + + + + perl-libwww + http://search.cpan.org/dist/libwww-perl + + Pisi Linux Admins + admins@pisilinux.org + + Artistic + library + Application programming interface to the World-Wide Web + libwww-perl collection is a set of Perl modules which provides a simple and consistent application programming interface to the World-Wide Web. + http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/libwww-perl-6.05.tar.gz + + perl + perl-URI + perl-NET-HTTP + perl-HTTP-Date + perl-HTML-Parser + perl-HTML-Tagset + perl-HTTP-Daemon + perl-File-Listing + perl-HTTP-Message + perl-Encode-Locale + perl-HTTP-Negotiate + perl-LWP-Mediatypes + perl-WWW-Robotrules + + + + + perl-libwww + + perl + perl-URI + perl-NET-HTTP + perl-HTTP-Date + perl-HTML-Parser + perl-HTML-Tagset + perl-HTTP-Daemon + perl-File-Listing + perl-HTTP-Message + perl-Encode-Locale + perl-HTTP-Negotiate + perl-LWP-Mediatypes + perl-WWW-Robotrules + + + /usr/bin + /usr/lib + /usr/share/doc + /usr/share/man + /usr/share/perl + + + + + + 2014-09-10 + 6.05 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2014-05-28 + 6.05 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-11-21 + 6.05 + Version bump + Richard de Bruin + richdb@pisilinux.org + + + 2012-09-07 + 6.04 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + diff --git a/programming/language/perl/perl-libwww/translations.xml b/programming/language/perl/perl-libwww/translations.xml new file mode 100644 index 0000000000..e00ecd1a0d --- /dev/null +++ b/programming/language/perl/perl-libwww/translations.xml @@ -0,0 +1,7 @@ + + + + perl-libwww + La colección libwww-perl es un conjunto de módulos Perl que facilitan una interfaz de programación de aplicación, simple y consistente para la Web. + + From 513951010615ee4c91ee505f21805d790b862473 Mon Sep 17 00:00:00 2001 From: burakerturk Date: Thu, 16 Jul 2015 02:47:42 +0300 Subject: [PATCH 3/4] add skey openssh --- pisi-index.xml | 191 + pisi-index.xml.sha1sum | 2 +- pisi-index.xml.xz | Bin 146984 -> 148236 bytes pisi-index.xml.xz.sha1sum | 2 +- server/openssh/actions.py | 61 + server/openssh/comar/service.py | 46 + server/openssh/files/curve25519pad.patch | 171 + server/openssh/files/sshd.pam | 8 + server/openssh/pspec.xml | 104 + server/openssh/translations.xml | 9 + util/crypt/skey/actions.py | 72 + util/crypt/skey/files/confdir.patch | 12 + util/crypt/skey/files/default_hash.patch | 12 + util/crypt/skey/files/fix_library_info.patch | 15 + .../skey/files/skey-1.1.5-binary-search.patch | 34 + .../skey/files/skey-1.1.5-bind-now.patch | 15 + util/crypt/skey/files/skey-1.1.5-fPIC.patch | 12 + util/crypt/skey/files/skey-1.1.5-gentoo.diff | 5380 +++++++++++++++++ util/crypt/skey/files/skey-1.1.5-otp.diff | 59 + .../crypt/skey/files/skey-login_name_max.diff | 15 + util/crypt/skey/files/zeroed_entries.patch | 12 + util/crypt/skey/pspec.xml | 107 + util/crypt/skey/translations.xml | 13 + 23 files changed, 6350 insertions(+), 2 deletions(-) create mode 100644 server/openssh/actions.py create mode 100644 server/openssh/comar/service.py create mode 100644 server/openssh/files/curve25519pad.patch create mode 100644 server/openssh/files/sshd.pam create mode 100644 server/openssh/pspec.xml create mode 100644 server/openssh/translations.xml create mode 100644 util/crypt/skey/actions.py create mode 100644 util/crypt/skey/files/confdir.patch create mode 100644 util/crypt/skey/files/default_hash.patch create mode 100644 util/crypt/skey/files/fix_library_info.patch create mode 100644 util/crypt/skey/files/skey-1.1.5-binary-search.patch create mode 100644 util/crypt/skey/files/skey-1.1.5-bind-now.patch create mode 100644 util/crypt/skey/files/skey-1.1.5-fPIC.patch create mode 100644 util/crypt/skey/files/skey-1.1.5-gentoo.diff create mode 100644 util/crypt/skey/files/skey-1.1.5-otp.diff create mode 100644 util/crypt/skey/files/skey-login_name_max.diff create mode 100644 util/crypt/skey/files/zeroed_entries.patch create mode 100644 util/crypt/skey/pspec.xml create mode 100644 util/crypt/skey/translations.xml diff --git a/pisi-index.xml b/pisi-index.xml index 14b9be66b4..6f06b393c7 100644 --- a/pisi-index.xml +++ b/pisi-index.xml @@ -36515,6 +36515,108 @@ uses SIMD instructions (MMX, SSE2, etc.) to accelerate baseline JPEG compression + + + openssh + http://www.openssh.com/ + + PisiLinux Community + admins@pisilinux.org + + BSD + app:console + service + server + Port of OpenBSD's free SSH release + OpenBSD'den aktarılmış SSH sürümü + OpenSSH est une version libre des outils de connexion SSH sur lesquels les utilisateurs techniquement chevronnés s'appuient. Les utilisateurs de telnet, rlogin et ftp ne se rendent peut être pas compte que les mots de passe sont transmis sur internet en clair. OpenSSH crypte tout le trafic (y compris les mots de passe) pour éliminer les écoutes passives, les détournements de connexion et autres attaques. + OpenSSH is a FREE version of the SSH connectivity tools that technical users of the Internet rely on. Users of telnet, rlogin, and ftp may not realize that their password is transmitted across the Internet unencrypted, but it is. OpenSSH encrypts all traffic (including passwords) to effectively eliminate eavesdropping, connection hijacking, and other attacks. + OpenSSH teknik internet kullanıcıların güvendikleri SSH bağlanırlık araçlarının Özgür (free) sürümüdür.telnet, rlogin ve ftp kullanıcıları parolalarının internetten şifresiz olarak aktarıldığını anlayamayabilirler ancak aktarılmaktadır.OpenSSH eavesdropping (iletişim kanalını dinleme), connection hijacking (bağlantı çalma) ve diğer atakları önlemek için tüm bağlantı trafiğini (parolalar dahil) şifrelemektedir. + http://ftp.icm.edu.pl/pub/OpenBSD/OpenSSH/portable/openssh-6.8p1.tar.gz + + libedit-devel + zlib-devel + openssl-devel + mit-kerberos + skey-devel + pam-devel + e2fsprogs-devel + + server/openssh/pspec.xml + + + openssh + + libedit + zlib + openssl + mit-kerberos + skey + pam + + + /etc + /usr/bin + /usr/sbin + /usr/libexec + /usr/lib + /usr/share/openssh + /var/empty + /usr/share/man + /usr/share/doc + + + System.Service + + + sshd.pam + + + + + 2015-04-23 + 6.8_p1 + Version bump. + Ertuğrul Erata + ertugrulerata@gmail.com + + + 2014-12-13 + 6.7_p1 + Version bump. + Yusuf Aydemir + yusuf.aydemir@pisilinux.org + + + 2014-05-21 + 6.6_p1 + Rebuild + Ertuğrul Erata + ertugrulerata@gmail.com + + + 2014-05-10 + 6.6_p1 + Version bump. + Ertuğrul Erata + ertugrulerata@gmail.com + + + 2013-11-22 + 6.4_p1 + Version bump + Aydın Demirel + aydin.demirel@pisilinux.org + + + 2012-10-30 + 6.1_p1 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + ConsoleKit2 @@ -37427,6 +37529,95 @@ uses SIMD instructions (MMX, SSE2, etc.) to accelerate baseline JPEG compression + + + skey + http://www.openbsd.org/faq/faq8.html#SKey + + PisiLinux Community + admins@pisilinux.org + + BSD + app:console + library + util.crypt + Linux Port of OpenBSD Single-key Password System + Linux için OpenBSD tek anahtarlı parola sistemi + skey is an S/Key implementation ported from OpenBSD. S/Key provides One Time Password functionality, and can be used to increase system security. + skey, OpenBSD'den Linux'a aktarılan S/Key sistemidir. S/Key sistemi Tek Seferlik Parola özelilği ile sistem güvenliğini arttırmak için kullanılabilir. + http://source.pisilinux.org/1.0/skey-1.1.5.tar.bz2 + + cracklib-devel + zlib-devel + perl + + + skey-1.1.5-gentoo.diff + skey-login_name_max.diff + skey-1.1.5-fPIC.patch + skey-1.1.5-bind-now.patch + skey-1.1.5-otp.diff + skey-1.1.5-binary-search.patch + confdir.patch + zeroed_entries.patch + default_hash.patch + fix_library_info.patch + + util/crypt/skey/pspec.xml + + + skey + + cracklib + zlib + + + /etc/skey + /lib + /usr/bin + /usr/lib + /usr/sbin + /usr/share/doc/skey + /usr/share/man + + + + skey-devel + Development files for skey + skey için geliştirme dosyaları + system.devel + + skey + + + /usr/include + /usr/share/man/man3 + + + + + 2014-05-21 + 1.1.5 + Rebuild. + Ertuğrul Erata + ertugrulerata@gmail.com + + + 2014-05-11 + 1.1.5 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2010-10-11 + 1.1.5 + First release + Pisi Linux Admins + admins@pisilinux.org + + + ibus diff --git a/pisi-index.xml.sha1sum b/pisi-index.xml.sha1sum index ff69a0cf78..a75622a04c 100644 --- a/pisi-index.xml.sha1sum +++ b/pisi-index.xml.sha1sum @@ -1 +1 @@ -1c0684ec1c4864118d5c3f330e65e2927d033b5e \ No newline at end of file +e71d198707ff47d47ce52f748d0f840759c93459 \ No newline at end of file diff --git a/pisi-index.xml.xz b/pisi-index.xml.xz index 314d38aa9b5b6b700741adbc29f487c78b352c52..08a297de1fab5fece61419f0198fabfa79ea410d 100644 GIT binary patch delta 30349 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ⅅ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 diff --git a/pisi-index.xml.xz.sha1sum b/pisi-index.xml.xz.sha1sum index ba1df10fc3..c7859afdc9 100644 --- a/pisi-index.xml.xz.sha1sum +++ b/pisi-index.xml.xz.sha1sum @@ -1 +1 @@ -e2f4786f8ff3cde55c63b109fb9b52c49b45da3b \ No newline at end of file +e1eb011d34cd99766706520be34a79527c587363 \ No newline at end of file diff --git a/server/openssh/actions.py b/server/openssh/actions.py new file mode 100644 index 0000000000..2c2cffee79 --- /dev/null +++ b/server/openssh/actions.py @@ -0,0 +1,61 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import autotools +from pisi.actionsapi import pisitools +from pisi.actionsapi import shelltools +from pisi.actionsapi import get + +WorkDir = "openssh-%s" % get.srcVERSION().replace("_","") + +def setup(): + shelltools.export("CFLAGS","%s -fpie" % get.CFLAGS()) + shelltools.export("LDFLAGS","%s -pie" % get.LDFLAGS()) + + #pisitools.dosed("pathnames.h", "/usr/X11R6/bin/xauth", r"/usr/bin/xauth") + #pisitools.dosed("sshd_config", "(?m)^(^#UsePAM ).*", r"UsePAM yes") + #pisitools.dosed("sshd_config", "(?m)^(^#PasswordAuthentication ).*", r"PasswordAuthentication no") + #pisitools.dosed("sshd_config", "(?m)^(^#X11Forwarding ).*", r"X11Forwarding yes") + #pisitools.dosed("sshd_config", "(?m)^(^#UseDNS ).*", r"UseDNS no") + #pisitools.dosed("sshd_config", "(?m)^(^#PermitRootLogin ).*", r"PermitRootLogin no") + + autotools.autoreconf("-fi") + + # Kerberos support is a must, libedit is optional + # Update configure parameters when both are ready + autotools.configure("--sysconfdir=/etc/ssh \ + --libexecdir=/usr/libexec/openssh \ + --datadir=/usr/share/openssh \ + --disable-strip \ + --with-pam \ + --with-skey \ + --with-libedit \ + --with-kerberos5 \ + --with-tcp-wrappers \ + --with-md5-passwords \ + --with-ipaddr-display \ + --with-privsep-user=sshd \ + --with-privsep-path=/var/empty \ + --without-zlib-version-check \ + --without-ssl-engine") + +def build(): + autotools.make() + +def install(): + autotools.rawInstall("DESTDIR=%s" % get.installDIR()) + + # fixes #10992 + pisitools.dobin("contrib/ssh-copy-id") + pisitools.doman("contrib/ssh-copy-id.1") + + shelltools.chmod("%s/etc/ssh/sshd_config" % get.installDIR(), 0600) + # special request by merensan + shelltools.echo("%s/etc/ssh/ssh_config" % get.installDIR(), "ServerAliveInterval 5") + + pisitools.dodir("/var/empty/sshd") + + pisitools.dodoc("ChangeLog", "CREDITS", "OVERVIEW", "README*", "TODO", "sshd_config") diff --git a/server/openssh/comar/service.py b/server/openssh/comar/service.py new file mode 100644 index 0000000000..c3a07424e3 --- /dev/null +++ b/server/openssh/comar/service.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- +from comar.service import * + +serviceType = "server" +serviceDesc = _({"en": "Secure Shell Server", + "tr": "Güvenli Kabuk Sunucusu" + }) + +MSG_ERR_NEEDCONF = _({"en": "You need /etc/ssh/sshd_config to run sshd.", + "tr": "Sshd'yi çalıştırabilmek için /etc/ssh/sshd_config'e ihtiyaç var.", + }) + +PID_FILE = "/run/sshd.pid" +RSA1_KEY = "/etc/ssh/ssh_host_key" +RSA_KEY = "/etc/ssh/ssh_host_rsa_key" +DSA_KEY = "/etc/ssh/ssh_host_dsa_key" + +def check_config(): + import os + if not os.path.exists("/etc/ssh/sshd_config"): + fail(MSG_ERR_NEEDCONF) + if not os.path.exists(RSA1_KEY): + # Default is 2048 bits, and is considered sufficient. + run("/usr/bin/ssh-keygen", "-t", "rsa1", + "-f", "/etc/ssh/ssh_host_key", "-N", "") + if not os.path.exists(DSA_KEY): + run("/usr/bin/ssh-keygen", "-t", "dsa", + "-f", "/etc/ssh/ssh_host_dsa_key", "-N", "") + if not os.path.exists(RSA_KEY): + run("/usr/bin/ssh-keygen", "-t", "rsa", + "-f", "/etc/ssh/ssh_host_rsa_key", "-N", "") + +@synchronized +def start(): + check_config() + startService(command="/usr/sbin/sshd", + pidfile=PID_FILE, + donotify=True) + +@synchronized +def stop(): + stopService(pidfile=PID_FILE, + donotify=True) + +def status(): + return isServiceRunning(PID_FILE) diff --git a/server/openssh/files/curve25519pad.patch b/server/openssh/files/curve25519pad.patch new file mode 100644 index 0000000000..9774a93999 --- /dev/null +++ b/server/openssh/files/curve25519pad.patch @@ -0,0 +1,171 @@ +Hi, + +So I screwed up when writing the support for the curve25519 KEX method +that doesn't depend on OpenSSL's BIGNUM type - a bug in my code left +leading zero bytes where they should have been skipped. The impact of +this is that OpenSSH 6.5 and 6.6 will fail during key exchange with a +peer that implements curve25519-sha256@libssh.org properly about 0.2% +of the time (one in every 512ish connections). + +We've fixed this for OpenSSH 6.7 by avoiding the curve25519-sha256 +key exchange for previous versions, but I'd recommend distributors +of OpenSSH apply this patch so the affected code doesn't become +too entrenched in LTS releases. + +The patch fixes the bug and makes OpenSSH identify itself as 6.6.1 so as +to distinguish itself from the incorrect versions so the compatibility +code to disable the affected KEX isn't activated. + +I've committed this on the 6.6 branch too. + +Apologies for the hassle. + +-d + +Index: version.h +=================================================================== +RCS file: /var/cvs/openssh/version.h,v +retrieving revision 1.82 +diff -u -p -r1.82 version.h +--- version.h 27 Feb 2014 23:01:54 -0000 1.82 ++++ version.h 20 Apr 2014 03:35:15 -0000 +@@ -1,6 +1,6 @@ + /* $OpenBSD: version.h,v 1.70 2014/02/27 22:57:40 djm Exp $ */ + +-#define SSH_VERSION "OpenSSH_6.6" ++#define SSH_VERSION "OpenSSH_6.6.1" + + #define SSH_PORTABLE "p1" + #define SSH_RELEASE SSH_VERSION SSH_PORTABLE +Index: compat.c +=================================================================== +RCS file: /var/cvs/openssh/compat.c,v +retrieving revision 1.82 +retrieving revision 1.85 +diff -u -p -r1.82 -r1.85 +--- compat.c 31 Dec 2013 01:25:41 -0000 1.82 ++++ compat.c 20 Apr 2014 03:33:59 -0000 1.85 +@@ -95,6 +95,9 @@ compat_datafellows(const char *version) + { "Sun_SSH_1.0*", SSH_BUG_NOREKEY|SSH_BUG_EXTEOF}, + { "OpenSSH_4*", 0 }, + { "OpenSSH_5*", SSH_NEW_OPENSSH|SSH_BUG_DYNAMIC_RPORT}, ++ { "OpenSSH_6.6.1*", SSH_NEW_OPENSSH}, ++ { "OpenSSH_6.5*," ++ "OpenSSH_6.6*", SSH_NEW_OPENSSH|SSH_BUG_CURVE25519PAD}, + { "OpenSSH*", SSH_NEW_OPENSSH }, + { "*MindTerm*", 0 }, + { "2.1.0*", SSH_BUG_SIGBLOB|SSH_BUG_HMAC| +@@ -251,7 +254,6 @@ compat_cipher_proposal(char *cipher_prop + return cipher_prop; + } + +- + char * + compat_pkalg_proposal(char *pkalg_prop) + { +@@ -263,5 +265,18 @@ compat_pkalg_proposal(char *pkalg_prop) + if (*pkalg_prop == '\0') + fatal("No supported PK algorithms found"); + return pkalg_prop; ++} ++ ++char * ++compat_kex_proposal(char *kex_prop) ++{ ++ if (!(datafellows & SSH_BUG_CURVE25519PAD)) ++ return kex_prop; ++ debug2("%s: original KEX proposal: %s", __func__, kex_prop); ++ kex_prop = filter_proposal(kex_prop, "curve25519-sha256@libssh.org"); ++ debug2("%s: compat KEX proposal: %s", __func__, kex_prop); ++ if (*kex_prop == '\0') ++ fatal("No supported key exchange algorithms found"); ++ return kex_prop; + } + +Index: compat.h +=================================================================== +RCS file: /var/cvs/openssh/compat.h,v +retrieving revision 1.42 +retrieving revision 1.43 +diff -u -p -r1.42 -r1.43 +--- compat.h 31 Dec 2013 01:25:41 -0000 1.42 ++++ compat.h 20 Apr 2014 03:25:31 -0000 1.43 +@@ -59,6 +59,7 @@ + #define SSH_BUG_RFWD_ADDR 0x02000000 + #define SSH_NEW_OPENSSH 0x04000000 + #define SSH_BUG_DYNAMIC_RPORT 0x08000000 ++#define SSH_BUG_CURVE25519PAD 0x10000000 + + void enable_compat13(void); + void enable_compat20(void); +@@ -66,6 +67,7 @@ void compat_datafellows(const char * + int proto_spec(const char *); + char *compat_cipher_proposal(char *); + char *compat_pkalg_proposal(char *); ++char *compat_kex_proposal(char *); + + extern int compat13; + extern int compat20; +Index: sshd.c +=================================================================== +RCS file: /var/cvs/openssh/sshd.c,v +retrieving revision 1.448 +retrieving revision 1.453 +diff -u -p -r1.448 -r1.453 +--- sshd.c 26 Feb 2014 23:20:08 -0000 1.448 ++++ sshd.c 20 Apr 2014 03:28:41 -0000 1.453 +@@ -2462,6 +2438,9 @@ do_ssh2_kex(void) + if (options.kex_algorithms != NULL) + myproposal[PROPOSAL_KEX_ALGS] = options.kex_algorithms; + ++ myproposal[PROPOSAL_KEX_ALGS] = compat_kex_proposal( ++ myproposal[PROPOSAL_KEX_ALGS]); ++ + if (options.rekey_limit || options.rekey_interval) + packet_set_rekey_limits((u_int32_t)options.rekey_limit, + (time_t)options.rekey_interval); +Index: sshconnect2.c +=================================================================== +RCS file: /var/cvs/openssh/sshconnect2.c,v +retrieving revision 1.197 +retrieving revision 1.199 +diff -u -p -r1.197 -r1.199 +--- sshconnect2.c 4 Feb 2014 00:20:16 -0000 1.197 ++++ sshconnect2.c 20 Apr 2014 03:25:31 -0000 1.199 +@@ -195,6 +196,8 @@ ssh_kex2(char *host, struct sockaddr *ho + } + if (options.kex_algorithms != NULL) + myproposal[PROPOSAL_KEX_ALGS] = options.kex_algorithms; ++ myproposal[PROPOSAL_KEX_ALGS] = compat_kex_proposal( ++ myproposal[PROPOSAL_KEX_ALGS]); + + if (options.rekey_limit || options.rekey_interval) + packet_set_rekey_limits((u_int32_t)options.rekey_limit, +Index: bufaux.c +=================================================================== +RCS file: /var/cvs/openssh/bufaux.c,v +retrieving revision 1.62 +retrieving revision 1.63 +diff -u -p -r1.62 -r1.63 +--- bufaux.c 4 Feb 2014 00:20:15 -0000 1.62 ++++ bufaux.c 20 Apr 2014 03:24:50 -0000 1.63 +@@ -1,4 +1,4 @@ +-/* $OpenBSD: bufaux.c,v 1.56 2014/02/02 03:44:31 djm Exp $ */ ++/* $OpenBSD: bufaux.c,v 1.57 2014/04/16 23:22:45 djm Exp $ */ + /* + * Author: Tatu Ylonen + * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland +@@ -372,6 +372,9 @@ buffer_put_bignum2_from_string(Buffer *b + + if (l > 8 * 1024) + fatal("%s: length %u too long", __func__, l); ++ /* Skip leading zero bytes */ ++ for (; l > 0 && *s == 0; l--, s++) ++ ; + p = buf = xmalloc(l + 1); + /* + * If most significant bit is set then prepend a zero byte to +_______________________________________________ +openssh-unix-dev mailing list +openssh-unix-dev@mindrot.org +https://lists.mindrot.org/mailman/listinfo/openssh-unix-dev \ No newline at end of file diff --git a/server/openssh/files/sshd.pam b/server/openssh/files/sshd.pam new file mode 100644 index 0000000000..14d9016a69 --- /dev/null +++ b/server/openssh/files/sshd.pam @@ -0,0 +1,8 @@ +#%PAM-1.0 + +auth include system-auth +auth required pam_shells.so +auth required pam_nologin.so +account include system-auth +password include system-auth +session include system-auth diff --git a/server/openssh/pspec.xml b/server/openssh/pspec.xml new file mode 100644 index 0000000000..7d5197ba14 --- /dev/null +++ b/server/openssh/pspec.xml @@ -0,0 +1,104 @@ + + + + + openssh + http://www.openssh.com/ + + PisiLinux Community + admins@pisilinux.org + + BSD + app:console + service + Port of OpenBSD's free SSH release + OpenSSH is a FREE version of the SSH connectivity tools that technical users of the Internet rely on. Users of telnet, rlogin, and ftp may not realize that their password is transmitted across the Internet unencrypted, but it is. OpenSSH encrypts all traffic (including passwords) to effectively eliminate eavesdropping, connection hijacking, and other attacks. + http://ftp.icm.edu.pl/pub/OpenBSD/OpenSSH/portable/openssh-6.8p1.tar.gz + + libedit-devel + zlib-devel + openssl-devel + mit-kerberos + skey-devel + pam-devel + e2fsprogs-devel + + + + + + + + openssh + + libedit + zlib + openssl + mit-kerberos + skey + pam + + + /etc + /usr/bin + /usr/sbin + /usr/libexec + /usr/lib + /usr/share/openssh + /var/empty + /usr/share/man + /usr/share/doc + + + sshd.pam + + + System.Service + + + + + + 2015-04-23 + 6.8_p1 + Version bump. + Ertuğrul Erata + ertugrulerata@gmail.com + + + 2014-12-13 + 6.7_p1 + Version bump. + Yusuf Aydemir + yusuf.aydemir@pisilinux.org + + + 2014-05-21 + 6.6_p1 + Rebuild + Ertuğrul Erata + ertugrulerata@gmail.com + + + 2014-05-10 + 6.6_p1 + Version bump. + Ertuğrul Erata + ertugrulerata@gmail.com + + + 2013-11-22 + 6.4_p1 + Version bump + Aydın Demirel + aydin.demirel@pisilinux.org + + + 2012-10-30 + 6.1_p1 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + diff --git a/server/openssh/translations.xml b/server/openssh/translations.xml new file mode 100644 index 0000000000..abfb9dc636 --- /dev/null +++ b/server/openssh/translations.xml @@ -0,0 +1,9 @@ + + + + openssh + OpenBSD'den aktarılmış SSH sürümü + OpenSSH teknik internet kullanıcıların güvendikleri SSH bağlanırlık araçlarının Özgür (free) sürümüdür.telnet, rlogin ve ftp kullanıcıları parolalarının internetten şifresiz olarak aktarıldığını anlayamayabilirler ancak aktarılmaktadır.OpenSSH eavesdropping (iletişim kanalını dinleme), connection hijacking (bağlantı çalma) ve diğer atakları önlemek için tüm bağlantı trafiğini (parolalar dahil) şifrelemektedir. + OpenSSH est une version libre des outils de connexion SSH sur lesquels les utilisateurs techniquement chevronnés s'appuient. Les utilisateurs de telnet, rlogin et ftp ne se rendent peut être pas compte que les mots de passe sont transmis sur internet en clair. OpenSSH crypte tout le trafic (y compris les mots de passe) pour éliminer les écoutes passives, les détournements de connexion et autres attaques. + + diff --git a/util/crypt/skey/actions.py b/util/crypt/skey/actions.py new file mode 100644 index 0000000000..6ab9d3eed3 --- /dev/null +++ b/util/crypt/skey/actions.py @@ -0,0 +1,72 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/copyleft/gpl.txt. +# +# Note that we fiddle with permissions of everything to make sure not to make a security hole +# + +from pisi.actionsapi import autotools +from pisi.actionsapi import pisitools +from pisi.actionsapi import shelltools +from pisi.actionsapi import libtools +from pisi.actionsapi import get + + +def setup(): + shelltools.export("SENDMAIL", "/usr/sbin/sendmail") + shelltools.export("CFLAGS", "%s -DSKEY_HASH_DEFAULT=1" % get.CFLAGS()) + autotools.configure("--sysconfdir=/etc/skey") + +def build(): + autotools.make() + +def install(): + ### Runtime + for i in ["skey", "skeyinit", "skeyinfo"]: + pisitools.dobin(i) + + for i in ["otp-md4", "otp-sha1", "otp-md5"]: + pisitools.dosym("skey", "/usr/bin/%s" % i) + + pisitools.insinto("/usr/sbin", "skeyprune.pl", "skeyprune") + pisitools.insinto("/usr/bin", "skeyaudit.sh", "skeyaudit") + + # these must be suid root so users can generate their passwords, fperms u+s,og-r + for i in ["skeyinit", "skeyinfo", "skeyaudit"]: + shelltools.chmod("%s/usr/bin/%s" % (get.installDIR(), i), 4755) + + shelltools.chmod("%s/usr/bin/skey" % get.installDIR(), 0755) + shelltools.chmod("%s/usr/sbin/skeyprune" % get.installDIR(), 0755) + + + ### Developement + pisitools.insinto("/usr/include", "skey.h") + + for i in ["libskey.so.1.1.5", "libskey.so.1", "libskey.so"]: + # dolib borks with symlinks + # pisitools.dolib(i, destinationDirectory="/lib") + pisitools.insinto("/lib", i) + shelltools.chmod("%s/lib/%s" % (get.installDIR(), i), 0755) + + #libtools.gen_usr_ldscript("libskey.so") + pisitools.dosym("../../lib/libskey.so", "/usr/lib/libskey.so") + + + ### Config + # only root needs to have access to these files. fperms g-rx,o-rx /etc/skey + pisitools.dodir("/etc/skey") + shelltools.chmod("%s/etc/skey" % get.installDIR(), 0700) + + # skeyinit will not function if this file is not present. these permissions are applied by the skey system if missing. + shelltools.touch("%s/etc/skey/skeykeys" % get.installDIR()) + shelltools.chmod("%s/etc/skey/skeykeys" % get.installDIR(), 0600) + + + ### Docs + for i in ["skey.1", "skeyaudit.1", "skeyinfo.1", "skeyinit.1", "skey.3", "skeyprune.8"]: + pisitools.doman(i) + + pisitools.dodoc("CHANGES", "README") + diff --git a/util/crypt/skey/files/confdir.patch b/util/crypt/skey/files/confdir.patch new file mode 100644 index 0000000000..3054a29660 --- /dev/null +++ b/util/crypt/skey/files/confdir.patch @@ -0,0 +1,12 @@ +diff -Nur skey-1.1.5-old//skeyprune.pl skey-1.1.5/skeyprune.pl +--- skey-1.1.5-old//skeyprune.pl 2010-09-12 15:03:35.695999732 +0300 ++++ skey-1.1.5/skeyprune.pl 2010-09-12 15:06:03.817000568 +0300 +@@ -14,7 +14,7 @@ + die "Usage: $0 [days]\n" if $#ARGC > 0; + + # Pathnames +-$keyfile = '/etc/skeykeys'; ++$keyfile = '/etc/skey/skeykeys'; + $temp = "$keyfile.tmp$$"; + + # Quick mapping of month name -> number diff --git a/util/crypt/skey/files/default_hash.patch b/util/crypt/skey/files/default_hash.patch new file mode 100644 index 0000000000..5b0fc79191 --- /dev/null +++ b/util/crypt/skey/files/default_hash.patch @@ -0,0 +1,12 @@ +diff -Nur skey-1.1.5-old//skeyinit.1 skey-1.1.5/skeyinit.1 +--- skey-1.1.5-old//skeyinit.1 2010-09-12 15:03:35.695999732 +0300 ++++ skey-1.1.5/skeyinit.1 2010-09-12 15:10:43.478000350 +0300 +@@ -47,7 +47,7 @@ + (default is 100). + .It Fl t Ar hash + Selects the hash algorithm to use. +-Available choices are md4 (the default), md5 or sha1. ++Available choices are md4, md5 (the default) or sha1. + .It Ar user + The username to be changed/added. + By default the current user is operated on, only root may diff --git a/util/crypt/skey/files/fix_library_info.patch b/util/crypt/skey/files/fix_library_info.patch new file mode 100644 index 0000000000..08fa934df7 --- /dev/null +++ b/util/crypt/skey/files/fix_library_info.patch @@ -0,0 +1,15 @@ +diff -Nur skey-1.1.5-old//skey.3 skey-1.1.5/skey.3 +--- skey-1.1.5-old//skey.3 2010-09-12 15:03:35.696999758 +0300 ++++ skey-1.1.5/skey.3 2010-09-12 15:12:24.658996394 +0300 +@@ -245,10 +245,8 @@ + .Bl -tag -width /usr/lib/libskey_p.a -compact + .It Pa /usr/lib/libskey.a + static skey library +-.It Pa /usr/lib/libskey.so ++.It Pa /lib/libskey.so + dynamic skey library +-.It Pa /usr/lib/libskey_p.a +-static skey library compiled for profiling + .El + .Sh SEE ALSO + .Xr skey 1 , diff --git a/util/crypt/skey/files/skey-1.1.5-binary-search.patch b/util/crypt/skey/files/skey-1.1.5-binary-search.patch new file mode 100644 index 0000000000..47b18ba714 --- /dev/null +++ b/util/crypt/skey/files/skey-1.1.5-binary-search.patch @@ -0,0 +1,34 @@ +--- skey-1.1.5-orig/put.c 2008-09-21 10:12:06.000000000 +0200 ++++ skey-1.1.5/put.c 2008-09-21 10:19:54.000000000 +0200 +@@ -2206,27 +2206,17 @@ + { + int i, j; + +- for (;;) { ++ while (low <= high) { + i = (low + high) / 2; + + if ((j = strncmp(w, Wp[i], 4)) == 0) + return i; /* Found it */ +- if (high == low + 1) +- { +- /* Avoid effects of integer truncation in /2 */ +- if (strncmp(w, Wp[high], 4) == 0) +- return high; +- else +- return -1; +- } +- +- if (low >= high) +- return -1; /* I don't *think* this can happen... */ + if (j < 0) +- high = i; /* Search lower half */ ++ high = i - 1; /* Search lower half */ + else +- low = i; /* Search upper half */ ++ low = i + 1; /* Search upper half */ + } ++ return -1; + } + + static void insert(char *s, int x, int start, int length) diff --git a/util/crypt/skey/files/skey-1.1.5-bind-now.patch b/util/crypt/skey/files/skey-1.1.5-bind-now.patch new file mode 100644 index 0000000000..a56f81e9fc --- /dev/null +++ b/util/crypt/skey/files/skey-1.1.5-bind-now.patch @@ -0,0 +1,15 @@ +--- Makefile.in.orig 2005-08-19 18:14:48.000000000 -0400 ++++ Makefile.in 2005-08-19 18:15:45.000000000 -0400 +@@ -67,10 +67,10 @@ + ${CC} -o $@ ${SKEYOBJS} ${LDFLAGS} -lskey ${LIBS} + + skeyinit: libskey.so ${SKEYINITOBJS} +- ${CC} -o $@ ${SKEYINITOBJS} ${LDFLAGS} -lskey ${LIBS} ++ ${CC} -o $@ ${SKEYINITOBJS} ${LDFLAGS} -lskey ${LIBS} -Wl,-z,now + + skeyinfo: libskey.so ${SKEYINFOOBJS} +- ${CC} -o $@ ${SKEYINFOOBJS} ${LDFLAGS} -lskey ${LIBS} ++ ${CC} -o $@ ${SKEYINFOOBJS} ${LDFLAGS} -lskey ${LIBS} -Wl,-z,now + + ${MANPAGES} ${SCRIPTS}:: + ${FIXPATHSCMD} ${srcdir}/$@ diff --git a/util/crypt/skey/files/skey-1.1.5-fPIC.patch b/util/crypt/skey/files/skey-1.1.5-fPIC.patch new file mode 100644 index 0000000000..924cfb4582 --- /dev/null +++ b/util/crypt/skey/files/skey-1.1.5-fPIC.patch @@ -0,0 +1,12 @@ +--- Makefile.in 2004-02-25 10:16:15.219448392 +0000 ++++ Makefile.in 2004-02-25 10:16:39.087583762 +0000 +@@ -50,6 +50,9 @@ + + ${LIBOBJS}: config.h + ++${LIBOBJS}: %.o: %.c ++ ${CC} ${CFLAGS} -fPIC -c $< -o $@ ++ + libskey.a: ${LIBOBJS} + ${AR} rv $@ ${LIBOBJS} + ${RANLIB} $@ diff --git a/util/crypt/skey/files/skey-1.1.5-gentoo.diff b/util/crypt/skey/files/skey-1.1.5-gentoo.diff new file mode 100644 index 0000000000..56e7e25889 --- /dev/null +++ b/util/crypt/skey/files/skey-1.1.5-gentoo.diff @@ -0,0 +1,5380 @@ +diff -ruN skey-1.1.5.orig/CHANGES skey-1.1.5/CHANGES +--- skey-1.1.5.orig/CHANGES 2001-05-10 17:10:49.000000000 +0100 ++++ skey-1.1.5/CHANGES 2003-11-06 17:46:45.000000000 +0000 +@@ -1,6 +1,19 @@ + *** Changes in version 1.1.5 + + - Bug fixes for errx/warnx ++(05/11/2003) taviso@gentoo.org ++ - ported some updates from the NetBSD project to Linux. ++ - removed a load of cast to voids. ++ - syntax changes. ++ - killing skeyaudit, using a shell script modified from NetBSD. ++ - cleanups to stop warnings with gcc. ++ - building a library for dynamic linking. ++ - swapping some str{cat,cpy} for strn{cat,cpy} ++ - killing rmd160 support. ++ - removing strlcpy function, not useful. ++ - quick hack for shadow support. ++ - quick hack for cracklib support. ++ - various other stuff. + + *** Changes in version 1.1.4 + +diff -ruN skey-1.1.5.orig/config.h.in skey-1.1.5/config.h.in +--- skey-1.1.5.orig/config.h.in 2001-05-10 17:10:49.000000000 +0100 ++++ skey-1.1.5/config.h.in 2003-11-06 17:46:45.000000000 +0000 +@@ -109,6 +109,9 @@ + /* Define if you have the strtol function. */ + #undef HAVE_STRTOL + ++/* Define if you have the header file. */ ++#undef HAVE_CRACK_H ++ + /* Define if you have the header file. */ + #undef HAVE_CRYPT_H + +@@ -130,12 +133,12 @@ + /* Define if you have the header file. */ + #undef HAVE_MD5GLOBAL_H + +-/* Define if you have the header file. */ +-#undef HAVE_RMD160_H +- + /* Define if you have the header file. */ + #undef HAVE_SHA1_H + ++/* Define if you have the header file. */ ++#undef HAVE_SHADOW_H ++ + /* Define if you have the header file. */ + #undef HAVE_SYS_CDEFS_H + +diff -ruN skey-1.1.5.orig/configure skey-1.1.5/configure +--- skey-1.1.5.orig/configure 2001-05-10 17:10:49.000000000 +0100 ++++ skey-1.1.5/configure 2003-11-06 17:47:49.000000000 +0000 +@@ -960,47 +960,11 @@ + echo "$ac_t""no" 1>&6 + fi + +-# Extract the first word of "sendmail", so it can be a program name with args. +-set dummy sendmail; ac_word=$2 +-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +-echo "configure:967: checking for $ac_word" >&5 +-if eval "test \"`echo '$''{'ac_cv_path_SENDMAIL'+set}'`\" = set"; then +- echo $ac_n "(cached) $ac_c" 1>&6 +-else +- case "$SENDMAIL" in +- /*) +- ac_cv_path_SENDMAIL="$SENDMAIL" # Let the user override the test with a path. +- ;; +- ?:/*) +- ac_cv_path_SENDMAIL="$SENDMAIL" # Let the user override the test with a dos path. +- ;; +- *) +- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" +- ac_dummy="$PATH:/usr/sbin:/usr/lib:/usr/bin" +- for ac_dir in $ac_dummy; do +- test -z "$ac_dir" && ac_dir=. +- if test -f $ac_dir/$ac_word; then +- ac_cv_path_SENDMAIL="$ac_dir/$ac_word" +- break +- fi +- done +- IFS="$ac_save_ifs" +- test -z "$ac_cv_path_SENDMAIL" && ac_cv_path_SENDMAIL="/usr/lib/sendmail" +- ;; +-esac +-fi +-SENDMAIL="$ac_cv_path_SENDMAIL" +-if test -n "$SENDMAIL"; then +- echo "$ac_t""$SENDMAIL" 1>&6 +-else +- echo "$ac_t""no" 1>&6 +-fi +- + + + + echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 +-echo "configure:1004: checking for crypt in -lcrypt" >&5 ++echo "configure:968: checking for crypt in -lcrypt" >&5 + ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` + if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +@@ -1008,7 +972,7 @@ + ac_save_LIBS="$LIBS" + LIBS="-lcrypt $LIBS" + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ++if { (eval echo configure:987: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" + else +@@ -1040,7 +1004,7 @@ + fi + + echo $ac_n "checking for flock in -lucb""... $ac_c" 1>&6 +-echo "configure:1044: checking for flock in -lucb" >&5 ++echo "configure:1008: checking for flock in -lucb" >&5 + ac_lib_var=`echo ucb'_'flock | sed 'y%./+-%__p_%'` + if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +@@ -1048,7 +1012,7 @@ + ac_save_LIBS="$LIBS" + LIBS="-lucb $LIBS" + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ++if { (eval echo configure:1027: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" + else +@@ -1079,10 +1043,50 @@ + echo "$ac_t""no" 1>&6 + fi + ++echo $ac_n "checking for FascistCheck in -lcrack""... $ac_c" 1>&6 ++echo "configure:1048: checking for FascistCheck in -lcrack" >&5 ++ac_lib_var=`echo crack'_'FascistCheck | sed 'y%./+-%__p_%'` ++if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then ++ echo $ac_n "(cached) $ac_c" 1>&6 ++else ++ ac_save_LIBS="$LIBS" ++LIBS="-lcrack $LIBS" ++cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ++ rm -rf conftest* ++ eval "ac_cv_lib_$ac_lib_var=yes" ++else ++ echo "configure: failed program was:" >&5 ++ cat conftest.$ac_ext >&5 ++ rm -rf conftest* ++ eval "ac_cv_lib_$ac_lib_var=no" ++fi ++rm -f conftest* ++LIBS="$ac_save_LIBS" ++ ++fi ++if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then ++ echo "$ac_t""yes" 1>&6 ++ LIBS="$LIBS -lcrack" ++else ++ echo "$ac_t""no" 1>&6 ++fi ++ + + + echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 +-echo "configure:1086: checking how to run the C preprocessor" >&5 ++echo "configure:1090: checking how to run the C preprocessor" >&5 + # On Suns, sometimes $CPP names a directory. + if test -n "$CPP" && test -d "$CPP"; then + CPP= +@@ -1097,13 +1101,13 @@ + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. + cat > conftest.$ac_ext < + Syntax Error + EOF + ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +-{ (eval echo configure:1107: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ++{ (eval echo configure:1111: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } + ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` + if test -z "$ac_err"; then + : +@@ -1114,13 +1118,13 @@ + rm -rf conftest* + CPP="${CC-cc} -E -traditional-cpp" + cat > conftest.$ac_ext < + Syntax Error + EOF + ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +-{ (eval echo configure:1124: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ++{ (eval echo configure:1128: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } + ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` + if test -z "$ac_err"; then + : +@@ -1131,13 +1135,13 @@ + rm -rf conftest* + CPP="${CC-cc} -nologo -E" + cat > conftest.$ac_ext < + Syntax Error + EOF + ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +-{ (eval echo configure:1141: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ++{ (eval echo configure:1145: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } + ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` + if test -z "$ac_err"; then + : +@@ -1162,12 +1166,12 @@ + echo "$ac_t""$CPP" 1>&6 + + echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 +-echo "configure:1166: checking for ANSI C header files" >&5 ++echo "configure:1170: checking for ANSI C header files" >&5 + if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext < + #include +@@ -1175,7 +1179,7 @@ + #include + EOF + ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +-{ (eval echo configure:1179: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ++{ (eval echo configure:1183: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } + ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` + if test -z "$ac_err"; then + rm -rf conftest* +@@ -1192,7 +1196,7 @@ + if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat > conftest.$ac_ext < + EOF +@@ -1210,7 +1214,7 @@ + if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat > conftest.$ac_ext < + EOF +@@ -1231,7 +1235,7 @@ + : + else + cat > conftest.$ac_ext < + #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +@@ -1242,7 +1246,7 @@ + exit (0); } + + EOF +-if { (eval echo configure:1246: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null ++if { (eval echo configure:1250: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null + then + : + else +@@ -1266,12 +1270,12 @@ + fi + + echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 +-echo "configure:1270: checking for sys/wait.h that is POSIX.1 compatible" >&5 ++echo "configure:1274: checking for sys/wait.h that is POSIX.1 compatible" >&5 + if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext < + #include +@@ -1287,7 +1291,7 @@ + s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; + ; return 0; } + EOF +-if { (eval echo configure:1291: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ++if { (eval echo configure:1295: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_header_sys_wait_h=yes + else +@@ -1307,21 +1311,21 @@ + + fi + +-for ac_hdr in fcntl.h limits.h sys/file.h sys/time.h sys/cdefs.h syslog.h unistd.h sha1.h rmd160.h md4.h md5.h md5global.h err.h crypt.h ++for ac_hdr in fcntl.h limits.h sys/file.h sys/time.h sys/cdefs.h syslog.h unistd.h sha1.h md4.h md5.h md5global.h err.h crypt.h shadow.h crack.h + do + ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` + echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +-echo "configure:1315: checking for $ac_hdr" >&5 ++echo "configure:1319: checking for $ac_hdr" >&5 + if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext < + EOF + ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +-{ (eval echo configure:1325: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ++{ (eval echo configure:1329: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } + ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` + if test -z "$ac_err"; then + rm -rf conftest* +@@ -1349,12 +1353,12 @@ + + + echo $ac_n "checking for working const""... $ac_c" 1>&6 +-echo "configure:1353: checking for working const" >&5 ++echo "configure:1357: checking for working const" >&5 + if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then ++if { (eval echo configure:1411: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_c_const=yes + else +@@ -1424,14 +1428,14 @@ + fi + + echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 +-echo "configure:1428: checking whether byte ordering is bigendian" >&5 ++echo "configure:1432: checking whether byte ordering is bigendian" >&5 + if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + ac_cv_c_bigendian=unknown + # See if sys/param.h defines the BYTE_ORDER macro. + cat > conftest.$ac_ext < + #include +@@ -1442,11 +1446,11 @@ + #endif + ; return 0; } + EOF +-if { (eval echo configure:1446: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ++if { (eval echo configure:1450: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + # It does; now see whether it defined to BIG_ENDIAN or not. + cat > conftest.$ac_ext < + #include +@@ -1457,7 +1461,7 @@ + #endif + ; return 0; } + EOF +-if { (eval echo configure:1461: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ++if { (eval echo configure:1465: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_c_bigendian=yes + else +@@ -1477,7 +1481,7 @@ + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } + else + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null ++if { (eval echo configure:1498: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null + then + ac_cv_c_bigendian=no + else +@@ -1514,12 +1518,12 @@ + fi + + echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 +-echo "configure:1518: checking for uid_t in sys/types.h" >&5 ++echo "configure:1522: checking for uid_t in sys/types.h" >&5 + if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext < + EOF +@@ -1548,12 +1552,12 @@ + fi + + echo $ac_n "checking for off_t""... $ac_c" 1>&6 +-echo "configure:1552: checking for off_t" >&5 ++echo "configure:1556: checking for off_t" >&5 + if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext < + #if STDC_HEADERS +@@ -1581,12 +1585,12 @@ + fi + + echo $ac_n "checking for size_t""... $ac_c" 1>&6 +-echo "configure:1585: checking for size_t" >&5 ++echo "configure:1589: checking for size_t" >&5 + if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext < + #if STDC_HEADERS +@@ -1614,12 +1618,12 @@ + fi + + echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6 +-echo "configure:1618: checking whether struct tm is in sys/time.h or time.h" >&5 ++echo "configure:1622: checking whether struct tm is in sys/time.h or time.h" >&5 + if eval "test \"`echo '$''{'ac_cv_struct_tm'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext < + #include +@@ -1627,7 +1631,7 @@ + struct tm *tp; tp->tm_sec; + ; return 0; } + EOF +-if { (eval echo configure:1631: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ++if { (eval echo configure:1635: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_struct_tm=time.h + else +@@ -1649,7 +1653,7 @@ + + + echo $ac_n "checking size of char""... $ac_c" 1>&6 +-echo "configure:1653: checking size of char" >&5 ++echo "configure:1657: checking size of char" >&5 + if eval "test \"`echo '$''{'ac_cv_sizeof_char'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -1657,7 +1661,7 @@ + ac_cv_sizeof_char=1 + else + cat > conftest.$ac_ext < + main() +@@ -1668,7 +1672,7 @@ + exit(0); + } + EOF +-if { (eval echo configure:1672: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null ++if { (eval echo configure:1676: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null + then + ac_cv_sizeof_char=`cat conftestval` + else +@@ -1688,7 +1692,7 @@ + + + echo $ac_n "checking size of short int""... $ac_c" 1>&6 +-echo "configure:1692: checking size of short int" >&5 ++echo "configure:1696: checking size of short int" >&5 + if eval "test \"`echo '$''{'ac_cv_sizeof_short_int'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -1696,7 +1700,7 @@ + ac_cv_sizeof_short_int=2 + else + cat > conftest.$ac_ext < + main() +@@ -1707,7 +1711,7 @@ + exit(0); + } + EOF +-if { (eval echo configure:1711: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null ++if { (eval echo configure:1715: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null + then + ac_cv_sizeof_short_int=`cat conftestval` + else +@@ -1727,7 +1731,7 @@ + + + echo $ac_n "checking size of int""... $ac_c" 1>&6 +-echo "configure:1731: checking size of int" >&5 ++echo "configure:1735: checking size of int" >&5 + if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -1735,7 +1739,7 @@ + ac_cv_sizeof_int=4 + else + cat > conftest.$ac_ext < + main() +@@ -1746,7 +1750,7 @@ + exit(0); + } + EOF +-if { (eval echo configure:1750: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null ++if { (eval echo configure:1754: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null + then + ac_cv_sizeof_int=`cat conftestval` + else +@@ -1766,7 +1770,7 @@ + + + echo $ac_n "checking size of long int""... $ac_c" 1>&6 +-echo "configure:1770: checking size of long int" >&5 ++echo "configure:1774: checking size of long int" >&5 + if eval "test \"`echo '$''{'ac_cv_sizeof_long_int'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -1774,7 +1778,7 @@ + ac_cv_sizeof_long_int=4 + else + cat > conftest.$ac_ext < + main() +@@ -1785,7 +1789,7 @@ + exit(0); + } + EOF +-if { (eval echo configure:1789: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null ++if { (eval echo configure:1793: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null + then + ac_cv_sizeof_long_int=`cat conftestval` + else +@@ -1805,7 +1809,7 @@ + + + echo $ac_n "checking size of long long int""... $ac_c" 1>&6 +-echo "configure:1809: checking size of long long int" >&5 ++echo "configure:1813: checking size of long long int" >&5 + if eval "test \"`echo '$''{'ac_cv_sizeof_long_long_int'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -1813,7 +1817,7 @@ + ac_cv_sizeof_long_long_int=8 + else + cat > conftest.$ac_ext < + main() +@@ -1824,7 +1828,7 @@ + exit(0); + } + EOF +-if { (eval echo configure:1828: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null ++if { (eval echo configure:1832: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null + then + ac_cv_sizeof_long_long_int=`cat conftestval` + else +@@ -1854,7 +1858,7 @@ + fi + CFLAGS="$CFLAGS -D_HPUX_SOURCE" + echo $ac_n "checking for HPUX trusted system password database""... $ac_c" 1>&6 +-echo "configure:1858: checking for HPUX trusted system password database" >&5 ++echo "configure:1862: checking for HPUX trusted system password database" >&5 + if test -f /tcb/files/auth/system/default; then + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <<\EOF +@@ -1903,16 +1907,16 @@ + + + echo $ac_n "checking for intXX_t types""... $ac_c" 1>&6 +-echo "configure:1907: checking for intXX_t types" >&5 ++echo "configure:1911: checking for intXX_t types" >&5 + cat > conftest.$ac_ext < + int main() { + int16_t a; int32_t b; a = 1235; b = 1235; + ; return 0; } + EOF +-if { (eval echo configure:1916: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ++if { (eval echo configure:1920: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + + cat >> confdefs.h <<\EOF +@@ -1932,16 +1936,16 @@ + rm -f conftest* + + echo $ac_n "checking for u_intXX_t types""... $ac_c" 1>&6 +-echo "configure:1936: checking for u_intXX_t types" >&5 ++echo "configure:1940: checking for u_intXX_t types" >&5 + cat > conftest.$ac_ext < + int main() { + u_int16_t c; u_int32_t d; c = 1235; d = 1235; + ; return 0; } + EOF +-if { (eval echo configure:1945: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ++if { (eval echo configure:1949: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + + cat >> confdefs.h <<\EOF +@@ -1964,9 +1968,9 @@ + "x$ac_cv_header_sys_bitypes_h" = "xyes" + then + echo $ac_n "checking for intXX_t and u_intXX_t types in sys/bitypes.h""... $ac_c" 1>&6 +-echo "configure:1968: checking for intXX_t and u_intXX_t types in sys/bitypes.h" >&5 ++echo "configure:1972: checking for intXX_t and u_intXX_t types in sys/bitypes.h" >&5 + cat > conftest.$ac_ext < + int main() { +@@ -1978,7 +1982,7 @@ + + ; return 0; } + EOF +-if { (eval echo configure:1982: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ++if { (eval echo configure:1986: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + + cat >> confdefs.h <<\EOF +@@ -2002,16 +2006,16 @@ + fi + + echo $ac_n "checking for uintXX_t types""... $ac_c" 1>&6 +-echo "configure:2006: checking for uintXX_t types" >&5 ++echo "configure:2010: checking for uintXX_t types" >&5 + cat > conftest.$ac_ext < + int main() { + uint16_t c; uint32_t d; c = 1235; d = 1235; + ; return 0; } + EOF +-if { (eval echo configure:2015: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ++if { (eval echo configure:2019: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + + cat >> confdefs.h <<\EOF +@@ -2054,7 +2058,7 @@ + + + echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 +-echo "configure:2058: checking for 8-bit clean memcmp" >&5 ++echo "configure:2062: checking for 8-bit clean memcmp" >&5 + if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else +@@ -2062,7 +2066,7 @@ + ac_cv_func_memcmp_clean=no + else + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null ++if { (eval echo configure:2080: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null + then + ac_cv_func_memcmp_clean=yes + else +@@ -2090,12 +2094,12 @@ + test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}" + + echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 +-echo "configure:2094: checking return type of signal handlers" >&5 ++echo "configure:2098: checking return type of signal handlers" >&5 + if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext < + #include +@@ -2112,7 +2116,7 @@ + int i; + ; return 0; } + EOF +-if { (eval echo configure:2116: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ++if { (eval echo configure:2120: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_type_signal=void + else +@@ -2131,12 +2135,12 @@ + + + echo $ac_n "checking for strftime""... $ac_c" 1>&6 +-echo "configure:2135: checking for strftime" >&5 ++echo "configure:2139: checking for strftime" >&5 + if eval "test \"`echo '$''{'ac_cv_func_strftime'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ++if { (eval echo configure:2167: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_strftime=yes" + else +@@ -2181,7 +2185,7 @@ + echo "$ac_t""no" 1>&6 + # strftime is in -lintl on SCO UNIX. + echo $ac_n "checking for strftime in -lintl""... $ac_c" 1>&6 +-echo "configure:2185: checking for strftime in -lintl" >&5 ++echo "configure:2189: checking for strftime in -lintl" >&5 + ac_lib_var=`echo intl'_'strftime | sed 'y%./+-%__p_%'` + if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +@@ -2189,7 +2193,7 @@ + ac_save_LIBS="$LIBS" + LIBS="-lintl $LIBS" + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ++if { (eval echo configure:2208: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" + else +@@ -2227,12 +2231,12 @@ + fi + + echo $ac_n "checking for vprintf""... $ac_c" 1>&6 +-echo "configure:2231: checking for vprintf" >&5 ++echo "configure:2235: checking for vprintf" >&5 + if eval "test \"`echo '$''{'ac_cv_func_vprintf'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ++if { (eval echo configure:2263: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_vprintf=yes" + else +@@ -2279,12 +2283,12 @@ + + if test "$ac_cv_func_vprintf" != yes; then + echo $ac_n "checking for _doprnt""... $ac_c" 1>&6 +-echo "configure:2283: checking for _doprnt" >&5 ++echo "configure:2287: checking for _doprnt" >&5 + if eval "test \"`echo '$''{'ac_cv_func__doprnt'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ++if { (eval echo configure:2315: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func__doprnt=yes" + else +@@ -2334,12 +2338,12 @@ + for ac_func in gethostname strcspn strdup strerror strspn strtol flock fcntl lockf strlcpy setusercontext + do + echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +-echo "configure:2338: checking for $ac_func" >&5 ++echo "configure:2342: checking for $ac_func" >&5 + if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ++if { (eval echo configure:2370: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" + else +diff -ruN skey-1.1.5.orig/configure.in skey-1.1.5/configure.in +--- skey-1.1.5.orig/configure.in 2001-05-10 17:10:49.000000000 +0100 ++++ skey-1.1.5/configure.in 2003-11-06 17:47:14.000000000 +0000 +@@ -9,19 +9,19 @@ + AC_CHECK_PROG(AR, ar, ar) + AC_PATH_PROG(PERL, perl) + AC_PATH_PROG(TOUCH, touch) +-AC_PATH_PROG(SENDMAIL, sendmail, /usr/lib/sendmail, $PATH:/usr/sbin:/usr/lib:/usr/bin) + AC_SUBST(PERL) + AC_SUBST(SENDMAIL) + + dnl Checks for libraries. + AC_CHECK_LIB(crypt, crypt, LIBS="$LIBS -lcrypt") + AC_CHECK_LIB(ucb, flock, LIBS="$LIBS -lucb" LDFLAGS="$LDFLAGS -L/usr/ucblib") ++AC_CHECK_LIB(crack, FascistCheck, LIBS="$LIBS -lcrack") + + + dnl Checks for header files. + AC_HEADER_STDC + AC_HEADER_SYS_WAIT +-AC_CHECK_HEADERS(fcntl.h limits.h sys/file.h sys/time.h sys/cdefs.h syslog.h unistd.h sha1.h rmd160.h md4.h md5.h md5global.h err.h crypt.h) ++AC_CHECK_HEADERS(fcntl.h limits.h sys/file.h sys/time.h sys/cdefs.h syslog.h unistd.h sha1.h md4.h md5.h md5global.h err.h crypt.h shadow.h crack.h) + + dnl Checks for typedefs, structures, and compiler characteristics. + AC_C_CONST +diff -ruN skey-1.1.5.orig/login_cap.c skey-1.1.5/login_cap.c +--- skey-1.1.5.orig/login_cap.c 2001-05-10 17:10:49.000000000 +0100 ++++ skey-1.1.5/login_cap.c 2003-11-06 17:46:45.000000000 +0000 +@@ -37,6 +37,7 @@ + #include + #include + #include ++#include + #include + + /* +diff -ruN skey-1.1.5.orig/Makefile.in skey-1.1.5/Makefile.in +--- skey-1.1.5.orig/Makefile.in 2001-05-10 17:10:49.000000000 +0100 ++++ skey-1.1.5/Makefile.in 2003-11-06 17:47:42.000000000 +0000 +@@ -27,12 +27,11 @@ + TOUCH=@TOUCH@ + LDFLAGS=-L. @LDFLAGS@ + +-TARGETS=skey skeyinit skeyinfo skeyaudit +-LIBOBJS=skeylogin.o skeysubr.o put.o errx.o md4c.o md5c.o rmd160.o rmd160hl.o sha1.o sha1hl.o flock.o strlcpy.o login_cap.o ++TARGETS=skey skeyinit skeyinfo libskey.a ++LIBOBJS=skeylogin.o skeysubr.o put.o errx.o md4c.o md5c.o sha1.o sha1hl.o flock.o login_cap.o + SKEYOBJS=skey.o + SKEYINITOBJS=skeyinit.o + SKEYINFOOBJS=skeyinfo.o +-SKEYAUDITOBJS=skeyaudit.o + + + SCRIPTS=skeyprune.pl +@@ -41,11 +40,11 @@ + CATMAN = skey.0 skeyinit.0 skeyinfo.0 skeyaudit.0 skeyprune.0 + MANPAGES = @MANTYPE@ + +-PATHSUBS = -D/etc/skeykeys=${sysconfdir}/skeykeys -D/usr/bin/perl=${PERL} -D/usr/lib/sendmail=${SENDMAIL} ++PATHSUBS = -D/etc/skeykeys=${sysconfdir}/skeykeys -D/usr/bin/perl=${PERL} + + FIXPATHSCMD = $(PERL) $(srcdir)/fixpaths $(PATHSUBS) + +-HDRS= skey.h sha1.h rmd160.h ++HDRS= skey.h sha1.h + + all: ${TARGETS} ${MANPAGES} + +@@ -55,24 +54,27 @@ + ${AR} rv $@ ${LIBOBJS} + ${RANLIB} $@ + +-skey: libskey.a ${SKEYOBJS} ++libskey.so: ${LIBOBJS} ++ ${CC} ${LDFLAGS} -shared -Wl,-soname,libskey.so.1 -o libskey.so.1.1.5 ${LIBOBJS} ++ ln -fs libskey.so.1.1.5 libskey.so ++ ln -fs libskey.so.1.1.5 libskey.so.1 ++ ln -fs libskey.so.1.1.5 libskey.so.1.1 ++ ++skey: libskey.so ${SKEYOBJS} + ${CC} -o $@ ${SKEYOBJS} ${LDFLAGS} -lskey ${LIBS} + +-skeyinit: libskey.a ${SKEYINITOBJS} ++skeyinit: libskey.so ${SKEYINITOBJS} + ${CC} -o $@ ${SKEYINITOBJS} ${LDFLAGS} -lskey ${LIBS} + +-skeyinfo: libskey.a ${SKEYINFOOBJS} ++skeyinfo: libskey.so ${SKEYINFOOBJS} + ${CC} -o $@ ${SKEYINFOOBJS} ${LDFLAGS} -lskey ${LIBS} + +-skeyaudit: libskey.a ${SKEYAUDITOBJS} +- ${CC} -o $@ ${SKEYAUDITOBJS} ${LDFLAGS} -lskey ${LIBS} +- + ${MANPAGES} ${SCRIPTS}:: + ${FIXPATHSCMD} ${srcdir}/$@ + + clean: + rm -f *.o *.a ${TARGETS} config.status config.cache config.log +- rm -f *.out core ++ rm -f *.out core *.so *.so.* + + distclean: clean + rm -f Makefile config.h core *~ +@@ -97,6 +99,10 @@ + $(INSTALL) -d $(DESTDIR)$(includedir) + $(INSTALL) -d $(DESTDIR)$(sysconfdir) + ${INSTALL_DATA} libskey.a $(DESTDIR)$(libdir) ++ ${INSTALL_DATA} libskey.so.1.1.5 $(DESTDIR)$(libdir) ++ ${INSTALL_DATA} libskey.so.1.1 $(DESTDIR)$(libdir) ++ ${INSTALL_DATA} libskey.so.1 $(DESTDIR)$(libdir) ++ ${INSTALL_DATA} libskey.so $(DESTDIR)$(libdir) + ${INSTALL_DATA} ${HDRS} $(DESTDIR)$(includedir) + @for target in ${TARGETS}; do \ + ${INSTALL_PROGRAM} $$target $(DESTDIR)$(bindir); \ +@@ -119,9 +125,9 @@ + -rm -f $(DESTDIR)$(bindir)/skeyaudit + -rm -f $(DESTDIR)$(bindir)/skeyprune + -rm -f $(DESTDIR)$(libdir)/libskey.a ++ -rm -f $(DESTDIR)$(libdir)/libskey.so* + -rm -f $(DESTDIR)$(includedir)/skey.h + -rm -f $(DESTDIR)$(includedir)/sha1.h +- -rm -f $(DESTDIR)$(includedir)/rmd160.h + -rm -f $(DESTDIR)$(mandir)/$(mansubdir)1/skey.1 + -rm -f $(DESTDIR)$(mandir)/$(mansubdir)1/skeyinfo.1 + -rm -f $(DESTDIR)$(mandir)/$(mansubdir)1/skeyinit.1 +diff -ruN skey-1.1.5.orig/put.c skey-1.1.5/put.c +--- skey-1.1.5.orig/put.c 2001-05-10 17:10:49.000000000 +0100 ++++ skey-1.1.5/put.c 2003-11-06 17:46:45.000000000 +0000 +@@ -14,7 +14,7 @@ + #include + #include + #include +-/*#include */ ++#include + #include "config.h" + + #include "skey.h" +@@ -22,10 +22,10 @@ + static unsigned int extract __P ((char *s, int start, int length)); + static void standard __P ((char *word)); + static void insert __P ((char *s, int x, int start, int length)); +-static int wsrch __P ((char *w, int low, int high)); ++static int wsrch __P ((const char *w, int low, int high)); + + /* Dictionary for integer-word translations */ +-static char Wp[2048][4] = { ++char Wp[2048][4] = { + "A", + "ABE", + "ACE", +@@ -2079,19 +2079,13 @@ + /* Encode 8 bytes in 'c' as a string of English words. + * Returns a pointer to a static buffer + */ +-char * +-btoe(engout, c) +- char *c; +- char *engout; ++char *btoe(char *engout, const char *c) + { +- char cp[10]; /* add in room for the parity 2 bits + extract() slop */ ++ char cp[9]; /* add in room for the parity 2 bits */ + int p, i; + + engout[0] = '\0'; +- +- /* workaround for extract() reads beyond end of data */ +- (void)memset(cp, 0, sizeof(cp)); +- (void)memcpy(cp, c, 8); ++ memcpy(cp, c, 8); + + /* compute parity */ + for (p = 0, i = 0; i < 64; i += 2) +@@ -2099,20 +2093,20 @@ + + cp[8] = (char)p << 6; + +- (void)strncat(engout, &Wp[extract (cp, 0, 11)][0], 4); +- (void)strcat(engout, " "); +- (void)strncat(engout, &Wp[extract (cp, 11, 11)][0], 4); +- (void)strcat(engout, " "); +- (void)strncat(engout, &Wp[extract (cp, 22, 11)][0], 4); +- (void)strcat(engout, " "); +- (void)strncat(engout, &Wp[extract (cp, 33, 11)][0], 4); +- (void)strcat(engout, " "); +- (void)strncat(engout, &Wp[extract (cp, 44, 11)][0], 4); +- (void)strcat(engout, " "); +- (void)strncat(engout, &Wp[extract (cp, 55, 11)][0], 4); ++ strncat(engout, &Wp[extract (cp, 0, 11)][0], 4); ++ strcat(engout, " "); ++ strncat(engout, &Wp[extract (cp, 11, 11)][0], 4); ++ strcat(engout, " "); ++ strncat(engout, &Wp[extract (cp, 22, 11)][0], 4); ++ strcat(engout, " "); ++ strncat(engout, &Wp[extract (cp, 33, 11)][0], 4); ++ strcat(engout, " "); ++ strncat(engout, &Wp[extract (cp, 44, 11)][0], 4); ++ strcat(engout, " "); ++ strncat(engout, &Wp[extract (cp, 55, 11)][0], 4); + + #ifdef notdef +- (void)fprintf(stderr, "engout is %s\n\r", engout); ++ printf ("engout is %s\n\r", engout); + #endif + return(engout); + } +@@ -2123,41 +2117,42 @@ + * -1 badly formed in put ie > 4 char word + * -2 words OK but parity is wrong + */ +-int +-etob(out, e) +- char *out; +- char *e; ++int etob(char *out, const char *e) + { + char *word; + int i, p, v, l, low, high; +- char b[SKEY_BINKEY_SIZE+1]; ++ char b[9]; + char input[36]; ++ char *last; + + if (e == NULL) +- return(-1); ++ return -1; + +- (void)strncpy(input, e, sizeof(input) - 1); +- input[sizeof(input) - 1] = '\0'; +- (void)memset(b, 0, sizeof(b)); +- (void)memset(out, 0, SKEY_BINKEY_SIZE); +- for (i = 0, p = 0; i < 6; i++, p += 11) { +- if ((word = strtok(i == 0 ? input : NULL, " ")) == NULL) +- return(-1); +- +- l = strlen(word); +- if (l > 4 || l < 1) { +- return(-1); +- } else if (l < 4) { ++ strncpy (input, e, sizeof(input)); ++ memset(b, 0, sizeof(b)); ++ memset(out, 0, 8); ++ for (i = 0, p = 0; i < 6; i++, p += 11) ++ { ++ if ((word = strtok_r(i == 0 ? input : NULL, " ", &last)) == NULL) ++ return -1; ++ ++ l = strlen (word); ++ if (l > 4 || l < 1) ++ return -1; ++ else if (l < 4) ++ { + low = 0; + high = 570; +- } else { ++ } ++ else ++ { + low = 571; + high = 2047; + } + standard(word); + + if ((v = wsrch(word, low, high)) < 0) +- return(0); ++ return 0; + + insert(b, v, p, 11); + } +@@ -2167,55 +2162,47 @@ + p += extract (b, i, 2); + + if ((p & 3) != extract (b, 64, 2)) +- return(-2); ++ return -2; + +- (void)memcpy(out, b, SKEY_BINKEY_SIZE); ++ memcpy(out, b, 8); + +- return(1); ++ return 1; + } + + /* Display 8 bytes as a series of 16-bit hex digits */ +-char * +-put8(out, s) +- char *out; +- char *s; ++char *put8(char *out, const char *s) + { +- (void)sprintf(out, "%02X%02X %02X%02X %02X%02X %02X%02X", ++ sprintf(out, "%02X%02X %02X%02X %02X%02X %02X%02X", + s[0] & 0xff, s[1] & 0xff, s[2] & 0xff, + s[3] & 0xff, s[4] & 0xff, s[5] & 0xff, + s[6] & 0xff, s[7] & 0xff); +- return(out); ++ return out; + } + + #ifdef notdef + /* Encode 8 bytes in 'cp' as stream of ascii letters. + * Provided as a possible alternative to btoe() + */ +-char * +-btoc(cp) +- char *cp; ++char *btoc(char *cp) + { + int i; + static char out[31]; + + /* code out put by characters 6 bits each added to 0x21 (!) */ +- for (i = 0; i <= 10; i++) { ++ for (i = 0; i <= 10; i++) ++ { + /* last one is only 4 bits not 6 */ + out[i] = '!' + extract (cp, 6 * i, i >= 10 ? 4 : 6); + } + out[i] = '\0'; +- return(out); ++ return out; + } + #endif + + /* Internal subroutines for word encoding/decoding */ + + /* Dictionary binary search */ +-static int +-wsrch(w, low, high) +- char *w; +- int low; +- int high; ++static int wsrch(const char *w, int low, int high) + { + int i, j; + +@@ -2223,18 +2210,18 @@ + i = (low + high) / 2; + + if ((j = strncmp(w, Wp[i], 4)) == 0) +- return(i); /* Found it */ +- +- if (high == low + 1) { ++ return i; /* Found it */ ++ if (high == low + 1) ++ { + /* Avoid effects of integer truncation in /2 */ + if (strncmp(w, Wp[high], 4) == 0) +- return(high); ++ return high; + else +- return(-1); ++ return -1; + } + + if (low >= high) +- return(-1); /* I don't *think* this can happen... */ ++ return -1; /* I don't *think* this can happen... */ + if (j < 0) + high = i; /* Search lower half */ + else +@@ -2242,12 +2229,7 @@ + } + } + +-static void +-insert(s, x, start, length) +- char *s; +- int x; +- int start; +- int length; ++static void insert(char *s, int x, int start, int length) + { + unsigned char cl; + unsigned char cc; +@@ -2261,25 +2243,28 @@ + assert(start + length <= 66); + + shift = ((8 - ((start + length) % 8)) % 8); +- y = x << shift; ++ y = (int) x << shift; + cl = (y >> 16) & 0xff; + cc = (y >> 8) & 0xff; + cr = y & 0xff; +- if (shift + length > 16) { ++ if (shift + length > 16) ++ { + s[start / 8] |= cl; + s[start / 8 + 1] |= cc; + s[start / 8 + 2] |= cr; +- } else if (shift + length > 8) { ++ } ++ else if (shift + length > 8) ++ { + s[start / 8] |= cc; + s[start / 8 + 1] |= cr; +- } else { ++ } ++ else ++ { + s[start / 8] |= cr; + } + } + +-static void +-standard(word) +- register char *word; ++static void standard(char *word) + { + while (*word) { + if (!isascii(*word)) +@@ -2297,11 +2282,7 @@ + } + + /* Extract 'length' bits from the char array 's' starting with bit 'start' */ +-static unsigned int +-extract(s, start, length) +- char *s; +- int start; +- int length; ++static unsigned int extract(char *s, int start, int length) + { + unsigned char cl; + unsigned char cc; +@@ -2320,5 +2301,5 @@ + x = x >> (24 - (length + (start % 8))); + x = (x & (0xffff >> (16 - length))); + +- return(x); ++ return x; + } +diff -ruN skey-1.1.5.orig/rmd160.c skey-1.1.5/rmd160.c +--- skey-1.1.5.orig/rmd160.c 2001-05-10 17:10:49.000000000 +0100 ++++ skey-1.1.5/rmd160.c 1970-01-01 01:00:00.000000000 +0100 +@@ -1,428 +0,0 @@ +-/********************************************************************\ +- * +- * FILE: rmd160.c +- * +- * CONTENTS: A sample C-implementation of the RIPEMD-160 +- * hash-function. +- * TARGET: any computer with an ANSI C compiler +- * +- * AUTHOR: Antoon Bosselaers, ESAT-COSIC +- * (Arranged for libc by Todd C. Miller) +- * DATE: 1 March 1996 +- * VERSION: 1.0 +- * +- * Copyright (c) Katholieke Universiteit Leuven +- * 1996, All Rights Reserved +- * +-\********************************************************************/ +-#ifndef HAVE_RMD160_H +- +-/* header files */ +-#include +-#include +-#include +-#include +-#include "config.h" +-#include "rmd160.h" +- +-/********************************************************************/ +- +-/* macro definitions */ +- +-/* collect four bytes into one word: */ +-#define BYTES_TO_DWORD(strptr) \ +- (((u_int32_t) *((strptr)+3) << 24) | \ +- ((u_int32_t) *((strptr)+2) << 16) | \ +- ((u_int32_t) *((strptr)+1) << 8) | \ +- ((u_int32_t) *(strptr))) +- +-/* ROL(x, n) cyclically rotates x over n bits to the left */ +-/* x must be of an unsigned 32 bits type and 0 <= n < 32. */ +-#define ROL(x, n) (((x) << (n)) | ((x) >> (32-(n)))) +- +-/* the three basic functions F(), G() and H() */ +-#define F(x, y, z) ((x) ^ (y) ^ (z)) +-#define G(x, y, z) (((x) & (y)) | (~(x) & (z))) +-#define H(x, y, z) (((x) | ~(y)) ^ (z)) +-#define I(x, y, z) (((x) & (z)) | ((y) & ~(z))) +-#define J(x, y, z) ((x) ^ ((y) | ~(z))) +- +-/* the eight basic operations FF() through III() */ +-#define FF(a, b, c, d, e, x, s) { \ +- (a) += F((b), (c), (d)) + (x); \ +- (a) = ROL((a), (s)) + (e); \ +- (c) = ROL((c), 10); \ +-} +-#define GG(a, b, c, d, e, x, s) { \ +- (a) += G((b), (c), (d)) + (x) + 0x5a827999U; \ +- (a) = ROL((a), (s)) + (e); \ +- (c) = ROL((c), 10); \ +-} +-#define HH(a, b, c, d, e, x, s) { \ +- (a) += H((b), (c), (d)) + (x) + 0x6ed9eba1U; \ +- (a) = ROL((a), (s)) + (e); \ +- (c) = ROL((c), 10); \ +-} +-#define II(a, b, c, d, e, x, s) { \ +- (a) += I((b), (c), (d)) + (x) + 0x8f1bbcdcU; \ +- (a) = ROL((a), (s)) + (e); \ +- (c) = ROL((c), 10); \ +-} +-#define JJ(a, b, c, d, e, x, s) { \ +- (a) += J((b), (c), (d)) + (x) + 0xa953fd4eU; \ +- (a) = ROL((a), (s)) + (e); \ +- (c) = ROL((c), 10); \ +-} +-#define FFF(a, b, c, d, e, x, s) { \ +- (a) += F((b), (c), (d)) + (x); \ +- (a) = ROL((a), (s)) + (e); \ +- (c) = ROL((c), 10); \ +-} +-#define GGG(a, b, c, d, e, x, s) { \ +- (a) += G((b), (c), (d)) + (x) + 0x7a6d76e9U; \ +- (a) = ROL((a), (s)) + (e); \ +- (c) = ROL((c), 10); \ +-} +-#define HHH(a, b, c, d, e, x, s) { \ +- (a) += H((b), (c), (d)) + (x) + 0x6d703ef3U; \ +- (a) = ROL((a), (s)) + (e); \ +- (c) = ROL((c), 10); \ +-} +-#define III(a, b, c, d, e, x, s) { \ +- (a) += I((b), (c), (d)) + (x) + 0x5c4dd124U; \ +- (a) = ROL((a), (s)) + (e); \ +- (c) = ROL((c), 10); \ +-} +-#define JJJ(a, b, c, d, e, x, s) { \ +- (a) += J((b), (c), (d)) + (x) + 0x50a28be6U; \ +- (a) = ROL((a), (s)) + (e); \ +- (c) = ROL((c), 10); \ +-} +- +-/********************************************************************/ +- +-void +-RMD160Init(context) +- RMD160_CTX *context; +-{ +- +- /* ripemd-160 initialization constants */ +- context->state[0] = 0x67452301U; +- context->state[1] = 0xefcdab89U; +- context->state[2] = 0x98badcfeU; +- context->state[3] = 0x10325476U; +- context->state[4] = 0xc3d2e1f0U; +- context->length[0] = context->length[1] = 0; +- context->buflen = 0; +-} +- +-/********************************************************************/ +- +-void +-RMD160Transform(state, block) +- u_int32_t state[5]; +- const u_int32_t block[16]; +-{ +- u_int32_t aa = state[0], bb = state[1], cc = state[2], +- dd = state[3], ee = state[4]; +- u_int32_t aaa = state[0], bbb = state[1], ccc = state[2], +- ddd = state[3], eee = state[4]; +- +- /* round 1 */ +- FF(aa, bb, cc, dd, ee, block[ 0], 11); +- FF(ee, aa, bb, cc, dd, block[ 1], 14); +- FF(dd, ee, aa, bb, cc, block[ 2], 15); +- FF(cc, dd, ee, aa, bb, block[ 3], 12); +- FF(bb, cc, dd, ee, aa, block[ 4], 5); +- FF(aa, bb, cc, dd, ee, block[ 5], 8); +- FF(ee, aa, bb, cc, dd, block[ 6], 7); +- FF(dd, ee, aa, bb, cc, block[ 7], 9); +- FF(cc, dd, ee, aa, bb, block[ 8], 11); +- FF(bb, cc, dd, ee, aa, block[ 9], 13); +- FF(aa, bb, cc, dd, ee, block[10], 14); +- FF(ee, aa, bb, cc, dd, block[11], 15); +- FF(dd, ee, aa, bb, cc, block[12], 6); +- FF(cc, dd, ee, aa, bb, block[13], 7); +- FF(bb, cc, dd, ee, aa, block[14], 9); +- FF(aa, bb, cc, dd, ee, block[15], 8); +- +- /* round 2 */ +- GG(ee, aa, bb, cc, dd, block[ 7], 7); +- GG(dd, ee, aa, bb, cc, block[ 4], 6); +- GG(cc, dd, ee, aa, bb, block[13], 8); +- GG(bb, cc, dd, ee, aa, block[ 1], 13); +- GG(aa, bb, cc, dd, ee, block[10], 11); +- GG(ee, aa, bb, cc, dd, block[ 6], 9); +- GG(dd, ee, aa, bb, cc, block[15], 7); +- GG(cc, dd, ee, aa, bb, block[ 3], 15); +- GG(bb, cc, dd, ee, aa, block[12], 7); +- GG(aa, bb, cc, dd, ee, block[ 0], 12); +- GG(ee, aa, bb, cc, dd, block[ 9], 15); +- GG(dd, ee, aa, bb, cc, block[ 5], 9); +- GG(cc, dd, ee, aa, bb, block[ 2], 11); +- GG(bb, cc, dd, ee, aa, block[14], 7); +- GG(aa, bb, cc, dd, ee, block[11], 13); +- GG(ee, aa, bb, cc, dd, block[ 8], 12); +- +- /* round 3 */ +- HH(dd, ee, aa, bb, cc, block[ 3], 11); +- HH(cc, dd, ee, aa, bb, block[10], 13); +- HH(bb, cc, dd, ee, aa, block[14], 6); +- HH(aa, bb, cc, dd, ee, block[ 4], 7); +- HH(ee, aa, bb, cc, dd, block[ 9], 14); +- HH(dd, ee, aa, bb, cc, block[15], 9); +- HH(cc, dd, ee, aa, bb, block[ 8], 13); +- HH(bb, cc, dd, ee, aa, block[ 1], 15); +- HH(aa, bb, cc, dd, ee, block[ 2], 14); +- HH(ee, aa, bb, cc, dd, block[ 7], 8); +- HH(dd, ee, aa, bb, cc, block[ 0], 13); +- HH(cc, dd, ee, aa, bb, block[ 6], 6); +- HH(bb, cc, dd, ee, aa, block[13], 5); +- HH(aa, bb, cc, dd, ee, block[11], 12); +- HH(ee, aa, bb, cc, dd, block[ 5], 7); +- HH(dd, ee, aa, bb, cc, block[12], 5); +- +- /* round 4 */ +- II(cc, dd, ee, aa, bb, block[ 1], 11); +- II(bb, cc, dd, ee, aa, block[ 9], 12); +- II(aa, bb, cc, dd, ee, block[11], 14); +- II(ee, aa, bb, cc, dd, block[10], 15); +- II(dd, ee, aa, bb, cc, block[ 0], 14); +- II(cc, dd, ee, aa, bb, block[ 8], 15); +- II(bb, cc, dd, ee, aa, block[12], 9); +- II(aa, bb, cc, dd, ee, block[ 4], 8); +- II(ee, aa, bb, cc, dd, block[13], 9); +- II(dd, ee, aa, bb, cc, block[ 3], 14); +- II(cc, dd, ee, aa, bb, block[ 7], 5); +- II(bb, cc, dd, ee, aa, block[15], 6); +- II(aa, bb, cc, dd, ee, block[14], 8); +- II(ee, aa, bb, cc, dd, block[ 5], 6); +- II(dd, ee, aa, bb, cc, block[ 6], 5); +- II(cc, dd, ee, aa, bb, block[ 2], 12); +- +- /* round 5 */ +- JJ(bb, cc, dd, ee, aa, block[ 4], 9); +- JJ(aa, bb, cc, dd, ee, block[ 0], 15); +- JJ(ee, aa, bb, cc, dd, block[ 5], 5); +- JJ(dd, ee, aa, bb, cc, block[ 9], 11); +- JJ(cc, dd, ee, aa, bb, block[ 7], 6); +- JJ(bb, cc, dd, ee, aa, block[12], 8); +- JJ(aa, bb, cc, dd, ee, block[ 2], 13); +- JJ(ee, aa, bb, cc, dd, block[10], 12); +- JJ(dd, ee, aa, bb, cc, block[14], 5); +- JJ(cc, dd, ee, aa, bb, block[ 1], 12); +- JJ(bb, cc, dd, ee, aa, block[ 3], 13); +- JJ(aa, bb, cc, dd, ee, block[ 8], 14); +- JJ(ee, aa, bb, cc, dd, block[11], 11); +- JJ(dd, ee, aa, bb, cc, block[ 6], 8); +- JJ(cc, dd, ee, aa, bb, block[15], 5); +- JJ(bb, cc, dd, ee, aa, block[13], 6); +- +- /* parallel round 1 */ +- JJJ(aaa, bbb, ccc, ddd, eee, block[ 5], 8); +- JJJ(eee, aaa, bbb, ccc, ddd, block[14], 9); +- JJJ(ddd, eee, aaa, bbb, ccc, block[ 7], 9); +- JJJ(ccc, ddd, eee, aaa, bbb, block[ 0], 11); +- JJJ(bbb, ccc, ddd, eee, aaa, block[ 9], 13); +- JJJ(aaa, bbb, ccc, ddd, eee, block[ 2], 15); +- JJJ(eee, aaa, bbb, ccc, ddd, block[11], 15); +- JJJ(ddd, eee, aaa, bbb, ccc, block[ 4], 5); +- JJJ(ccc, ddd, eee, aaa, bbb, block[13], 7); +- JJJ(bbb, ccc, ddd, eee, aaa, block[ 6], 7); +- JJJ(aaa, bbb, ccc, ddd, eee, block[15], 8); +- JJJ(eee, aaa, bbb, ccc, ddd, block[ 8], 11); +- JJJ(ddd, eee, aaa, bbb, ccc, block[ 1], 14); +- JJJ(ccc, ddd, eee, aaa, bbb, block[10], 14); +- JJJ(bbb, ccc, ddd, eee, aaa, block[ 3], 12); +- JJJ(aaa, bbb, ccc, ddd, eee, block[12], 6); +- +- /* parallel round 2 */ +- III(eee, aaa, bbb, ccc, ddd, block[ 6], 9); +- III(ddd, eee, aaa, bbb, ccc, block[11], 13); +- III(ccc, ddd, eee, aaa, bbb, block[ 3], 15); +- III(bbb, ccc, ddd, eee, aaa, block[ 7], 7); +- III(aaa, bbb, ccc, ddd, eee, block[ 0], 12); +- III(eee, aaa, bbb, ccc, ddd, block[13], 8); +- III(ddd, eee, aaa, bbb, ccc, block[ 5], 9); +- III(ccc, ddd, eee, aaa, bbb, block[10], 11); +- III(bbb, ccc, ddd, eee, aaa, block[14], 7); +- III(aaa, bbb, ccc, ddd, eee, block[15], 7); +- III(eee, aaa, bbb, ccc, ddd, block[ 8], 12); +- III(ddd, eee, aaa, bbb, ccc, block[12], 7); +- III(ccc, ddd, eee, aaa, bbb, block[ 4], 6); +- III(bbb, ccc, ddd, eee, aaa, block[ 9], 15); +- III(aaa, bbb, ccc, ddd, eee, block[ 1], 13); +- III(eee, aaa, bbb, ccc, ddd, block[ 2], 11); +- +- /* parallel round 3 */ +- HHH(ddd, eee, aaa, bbb, ccc, block[15], 9); +- HHH(ccc, ddd, eee, aaa, bbb, block[ 5], 7); +- HHH(bbb, ccc, ddd, eee, aaa, block[ 1], 15); +- HHH(aaa, bbb, ccc, ddd, eee, block[ 3], 11); +- HHH(eee, aaa, bbb, ccc, ddd, block[ 7], 8); +- HHH(ddd, eee, aaa, bbb, ccc, block[14], 6); +- HHH(ccc, ddd, eee, aaa, bbb, block[ 6], 6); +- HHH(bbb, ccc, ddd, eee, aaa, block[ 9], 14); +- HHH(aaa, bbb, ccc, ddd, eee, block[11], 12); +- HHH(eee, aaa, bbb, ccc, ddd, block[ 8], 13); +- HHH(ddd, eee, aaa, bbb, ccc, block[12], 5); +- HHH(ccc, ddd, eee, aaa, bbb, block[ 2], 14); +- HHH(bbb, ccc, ddd, eee, aaa, block[10], 13); +- HHH(aaa, bbb, ccc, ddd, eee, block[ 0], 13); +- HHH(eee, aaa, bbb, ccc, ddd, block[ 4], 7); +- HHH(ddd, eee, aaa, bbb, ccc, block[13], 5); +- +- /* parallel round 4 */ +- GGG(ccc, ddd, eee, aaa, bbb, block[ 8], 15); +- GGG(bbb, ccc, ddd, eee, aaa, block[ 6], 5); +- GGG(aaa, bbb, ccc, ddd, eee, block[ 4], 8); +- GGG(eee, aaa, bbb, ccc, ddd, block[ 1], 11); +- GGG(ddd, eee, aaa, bbb, ccc, block[ 3], 14); +- GGG(ccc, ddd, eee, aaa, bbb, block[11], 14); +- GGG(bbb, ccc, ddd, eee, aaa, block[15], 6); +- GGG(aaa, bbb, ccc, ddd, eee, block[ 0], 14); +- GGG(eee, aaa, bbb, ccc, ddd, block[ 5], 6); +- GGG(ddd, eee, aaa, bbb, ccc, block[12], 9); +- GGG(ccc, ddd, eee, aaa, bbb, block[ 2], 12); +- GGG(bbb, ccc, ddd, eee, aaa, block[13], 9); +- GGG(aaa, bbb, ccc, ddd, eee, block[ 9], 12); +- GGG(eee, aaa, bbb, ccc, ddd, block[ 7], 5); +- GGG(ddd, eee, aaa, bbb, ccc, block[10], 15); +- GGG(ccc, ddd, eee, aaa, bbb, block[14], 8); +- +- /* parallel round 5 */ +- FFF(bbb, ccc, ddd, eee, aaa, block[12] , 8); +- FFF(aaa, bbb, ccc, ddd, eee, block[15] , 5); +- FFF(eee, aaa, bbb, ccc, ddd, block[10] , 12); +- FFF(ddd, eee, aaa, bbb, ccc, block[ 4] , 9); +- FFF(ccc, ddd, eee, aaa, bbb, block[ 1] , 12); +- FFF(bbb, ccc, ddd, eee, aaa, block[ 5] , 5); +- FFF(aaa, bbb, ccc, ddd, eee, block[ 8] , 14); +- FFF(eee, aaa, bbb, ccc, ddd, block[ 7] , 6); +- FFF(ddd, eee, aaa, bbb, ccc, block[ 6] , 8); +- FFF(ccc, ddd, eee, aaa, bbb, block[ 2] , 13); +- FFF(bbb, ccc, ddd, eee, aaa, block[13] , 6); +- FFF(aaa, bbb, ccc, ddd, eee, block[14] , 5); +- FFF(eee, aaa, bbb, ccc, ddd, block[ 0] , 15); +- FFF(ddd, eee, aaa, bbb, ccc, block[ 3] , 13); +- FFF(ccc, ddd, eee, aaa, bbb, block[ 9] , 11); +- FFF(bbb, ccc, ddd, eee, aaa, block[11] , 11); +- +- /* combine results */ +- ddd += cc + state[1]; /* final result for state[0] */ +- state[1] = state[2] + dd + eee; +- state[2] = state[3] + ee + aaa; +- state[3] = state[4] + aa + bbb; +- state[4] = state[0] + bb + ccc; +- state[0] = ddd; +-} +- +-/********************************************************************/ +- +-void +-RMD160Update(context, data, nbytes) +- RMD160_CTX *context; +- const u_char *data; +- u_int32_t nbytes; +-{ +- u_int32_t X[16]; +- u_int32_t ofs = 0; +- u_int32_t i; +-#ifdef WORDS_BIGENDIAN +- u_int32_t j; +-#endif +- +- /* update length[] */ +- if (context->length[0] + nbytes < context->length[0]) +- context->length[1]++; /* overflow to msb of length */ +- context->length[0] += nbytes; +- +- (void)memset(X, 0, sizeof(X)); +- +- if ( context->buflen + nbytes < 64 ) +- { +- (void)memcpy(context->bbuffer + context->buflen, data, nbytes); +- context->buflen += nbytes; +- } +- else +- { +- /* process first block */ +- ofs = 64 - context->buflen; +- (void)memcpy(context->bbuffer + context->buflen, data, ofs); +-#ifndef WORDS_BIGENDIAN +- (void)memcpy(X, context->bbuffer, sizeof(X)); +-#else +- for (j=0; j < 16; j++) +- X[j] = BYTES_TO_DWORD(context->bbuffer + (4 * j)); +-#endif +- RMD160Transform(context->state, X); +- nbytes -= ofs; +- +- /* process remaining complete blocks */ +- for (i = 0; i < (nbytes >> 6); i++) { +-#ifndef WORDS_BIGENDIAN +- (void)memcpy(X, data + (64 * i) + ofs, sizeof(X)); +-#else +- for (j=0; j < 16; j++) +- X[j] = BYTES_TO_DWORD(data + (64 * i) + (4 * j) + ofs); +-#endif +- RMD160Transform(context->state, X); +- } +- +- /* +- * Put last bytes from data into context's buffer +- */ +- context->buflen = nbytes & 63; +- memcpy(context->bbuffer, data + (64 * i) + ofs, context->buflen); +- } +-} +- +-/********************************************************************/ +- +-void +-RMD160Final(digest, context) +- u_char digest[20]; +- RMD160_CTX *context; +-{ +- u_int32_t i; +- u_int32_t X[16]; +-#ifdef WORDS_BIGENDIAN +- u_int32_t j; +-#endif +- +- /* append the bit m_n == 1 */ +- context->bbuffer[context->buflen] = '\200'; +- +- (void)memset(context->bbuffer + context->buflen + 1, 0, +- 63 - context->buflen); +-#ifndef WORDS_BIGENDIAN +- (void)memcpy(X, context->bbuffer, sizeof(X)); +-#else +- for (j=0; j < 16; j++) +- X[j] = BYTES_TO_DWORD(context->bbuffer + (4 * j)); +-#endif +- if ((context->buflen) > 55) { +- /* length goes to next block */ +- RMD160Transform(context->state, X); +- (void)memset(X, 0, sizeof(X)); +- } +- +- /* append length in bits */ +- X[14] = context->length[0] << 3; +- X[15] = (context->length[0] >> 29) | +- (context->length[1] << 3); +- RMD160Transform(context->state, X); +- +- if (digest != NULL) { +- for (i = 0; i < 20; i += 4) { +- /* extracts the 8 least significant bits. */ +- digest[i] = context->state[i>>2]; +- digest[i + 1] = (context->state[i>>2] >> 8); +- digest[i + 2] = (context->state[i>>2] >> 16); +- digest[i + 3] = (context->state[i>>2] >> 24); +- } +- } +-} +- +-/************************ end of file rmd160.c **********************/ +-#endif +diff -ruN skey-1.1.5.orig/rmd160.h skey-1.1.5/rmd160.h +--- skey-1.1.5.orig/rmd160.h 2001-05-10 17:10:49.000000000 +0100 ++++ skey-1.1.5/rmd160.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,48 +0,0 @@ +-/* $OpenBSD: rmd160.h,v 1.4 1999/08/16 09:59:04 millert Exp $ */ +- +-/********************************************************************\ +- * +- * FILE: rmd160.h +- * +- * CONTENTS: Header file for a sample C-implementation of the +- * RIPEMD-160 hash-function. +- * TARGET: any computer with an ANSI C compiler +- * +- * AUTHOR: Antoon Bosselaers, ESAT-COSIC +- * DATE: 1 March 1996 +- * VERSION: 1.0 +- * +- * Copyright (c) Katholieke Universiteit Leuven +- * 1996, All Rights Reserved +- * +-\********************************************************************/ +- +-#ifndef _RMD160_H /* make sure this file is read only once */ +-#define _RMD160_H +- +-/********************************************************************/ +- +-/* structure definitions */ +- +-typedef struct { +- u_int32_t state[5]; /* state (ABCDE) */ +- u_int32_t length[2]; /* number of bits */ +- u_char bbuffer[64]; /* overflow buffer */ +- u_int32_t buflen; /* number of chars in bbuffer */ +-} RMD160_CTX; +- +-/********************************************************************/ +- +-/* function prototypes */ +- +-void RMD160Init __P((RMD160_CTX *context)); +-void RMD160Transform __P((u_int32_t state[5], const u_int32_t block[16])); +-void RMD160Update __P((RMD160_CTX *context, const u_char *data, u_int32_t nbytes)); +-void RMD160Final __P((u_char digest[20], RMD160_CTX *context)); +-char *RMD160End __P((RMD160_CTX *, char *)); +-char *RMD160File __P((char *, char *)); +-char *RMD160Data __P((const u_char *, size_t, char *)); +- +-#endif /* _RMD160_H */ +- +-/*********************** end of file rmd160.h ***********************/ +diff -ruN skey-1.1.5.orig/rmd160hl.c skey-1.1.5/rmd160hl.c +--- skey-1.1.5.orig/rmd160hl.c 2001-05-10 17:10:49.000000000 +0100 ++++ skey-1.1.5/rmd160hl.c 1970-01-01 01:00:00.000000000 +0100 +@@ -1,85 +0,0 @@ +-/* rmd160hl.c +- * ---------------------------------------------------------------------------- +- * "THE BEER-WARE LICENSE" (Revision 42): +- * wrote this file. As long as you retain this notice you +- * can do whatever you want with this stuff. If we meet some day, and you think +- * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp +- * ---------------------------------------------------------------------------- +- */ +- +-#if defined(LIBC_SCCS) && !defined(lint) +-static char rcsid[] = "$OpenBSD: rmd160hl.c,v 1.2 1999/08/17 09:13:12 millert Exp $"; +-#endif /* LIBC_SCCS and not lint */ +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include "config.h" +-#ifdef HAVE_RMD160_H +-#include +-#else +-#include "rmd160.h" +-#endif +- +-/* ARGSUSED */ +-char * +-RMD160End(ctx, buf) +- RMD160_CTX *ctx; +- char *buf; +-{ +- int i; +- char *p = buf; +- u_char digest[20]; +- static const char hex[]="0123456789abcdef"; +- +- if (p == NULL && (p = malloc(41)) == NULL) +- return 0; +- +- RMD160Final(digest,ctx); +- for (i = 0; i < 20; i++) { +- p[i + i] = hex[digest[i] >> 4]; +- p[i + i + 1] = hex[digest[i] & 0x0f]; +- } +- p[i + i] = '\0'; +- return(p); +-} +- +-char * +-RMD160File (filename, buf) +- char *filename; +- char *buf; +-{ +- u_char buffer[BUFSIZ]; +- RMD160_CTX ctx; +- int fd, num, oerrno; +- +- RMD160Init(&ctx); +- +- if ((fd = open(filename, O_RDONLY)) < 0) +- return(0); +- +- while ((num = read(fd, buffer, sizeof(buffer))) > 0) +- RMD160Update(&ctx, buffer, num); +- +- oerrno = errno; +- close(fd); +- errno = oerrno; +- return(num < 0 ? 0 : RMD160End(&ctx, buf)); +-} +- +-char * +-RMD160Data (data, len, buf) +- const u_char *data; +- size_t len; +- char *buf; +-{ +- RMD160_CTX ctx; +- +- RMD160Init(&ctx); +- RMD160Update(&ctx, data, len); +- return(RMD160End(&ctx, buf)); +-} +diff -ruN skey-1.1.5.orig/skey.1 skey-1.1.5/skey.1 +--- skey-1.1.5.orig/skey.1 2001-05-10 17:10:49.000000000 +0100 ++++ skey-1.1.5/skey.1 2003-11-06 17:46:45.000000000 +0000 +@@ -1,95 +1,165 @@ +-.\" $OpenBSD: skey.1,v 1.21 2000/11/09 17:52:38 aaron Exp $ +-.\" @(#)skey.1 1.1 10/28/93 ++.\" $NetBSD: skey.1,v 1.21 2003/09/07 16:22:24 wiz Exp $ + .\" +-.Dd October 28, 1993 ++.\" from: @(#)skey.1 1.1 10/28/93 ++.\" ++.Dd July 25, 2001 + .Dt SKEY 1 + .Os + .Sh NAME +-.Nm skey, otp-md4, otp-md5, otp-sha1, otp-rmd160 ++.Nm skey + .Nd respond to an OTP challenge + .Sh SYNOPSIS +-.Nm skey +-.Op Fl x +-.Oo +-.Fl md4 | Fl md5 | Fl sha1 | +-.Fl rmd160 +-.Oc ++.Nm + .Op Fl n Ar count +-.Op Fl p Ar passwd +-[/] key ++.Op Fl p Ar password ++.Op Fl t Ar hash ++.Op Fl x ++.Ar sequence# ++.Op / ++.Ar key + .Sh DESCRIPTION +-.Nm S/key +-is a procedure for using one-time passwords to authenticate access to +-computer systems. +-It uses 64 bits of information transformed by the +-MD4, MD5, SHA1, or RIPEMD-160 algorithms. +-The user supplies the 64 bits +-in the form of 6 English words that are generated by a secure computer. +-This implementation of +-.Nm s/key +-is RFC 1938 compliant. ++.Em S/Key ++is a One Time Password (OTP) authentication system. ++It is intended to be used when the communication channel between ++a user and host is not secure (e.g. not encrypted or hardwired). ++Since each password is used only once, even if it is "seen" by a ++hostile third party, it cannot be used again to gain access to the host. + .Pp +-When +-.Nm skey +-is invoked as +-.Nm otp-method , +-.Nm skey +-will use +-.Ar method +-as the hash function where +-.Ar method +-is currently one of md4, md5, sha1, or rmd160. ++.Em S/Key ++uses 64 bits of information, transformed by the ++.Tn MD4 ++algorithm into 6 English words. ++The user supplies the words to authenticate himself to programs like ++.Xr login 1 ++or ++.Xr ftpd 8 . ++.Pp ++Example use of the ++.Em S/Key ++program ++.Nm : ++.Bd -literal -offset indent ++% skey 99 th91334 ++Enter password: \*[Lt]your secret password is entered here\*[Gt] ++OMEN US HORN OMIT BACK AHOY ++% ++.Ed ++.Pp ++The string that is given back by ++.Nm ++can then be used to log into a system. ++.Pp ++The programs that are part of the ++.Em S/Key ++system are: ++.Bl -tag -width skeyauditxxx ++.It Xr skeyinit 1 ++used to set up your ++.Em S/Key . ++.It Nm ++used to get the one time password(s). ++.It Xr skeyinfo 1 ++used to initialize the ++.Em S/Key ++database for the specified user. ++It also tells the user what the next challenge will be. ++.It Xr skeyaudit 1 ++used to inform users that they will soon have to rerun ++.Xr skeyinit 1 . ++.El + .Pp +-If you misspell your password while running +-.Nm skey , ++When you run ++.Xr skeyinit 1 ++you inform the system of your ++secret password. ++Running ++.Nm ++then generates the ++one-time password(s), after requiring your secret password. ++If however, you misspell your secret password that you have given to ++.Xr skeyinit 1 ++while running ++.Xr skey 1 + you will get a list of passwords +-that will not work, and no indication of the problem. ++that will not work, and no indication about the problem. + .Pp +-Password sequence numbers count backwards. ++Password sequence numbers count backward from 99. + You can enter the passwords using small letters, even though +-.Nm skey ++.Xr skey 1 + prints them capitalized. + .Pp +-The options are as follows: +-.Bl -tag -width Ds +-.It Fl n Ar count +-Prints out ++The ++.Fl n Ar count ++argument asks for + .Ar count +-one-time passwords. +-The default is to print one. +-.It Fl p Ar password +-Uses +-.Ar password +-as the secret password. +-Use of this option is discouraged as +-your secret password could be visible in a process listing. +-.It Fl x +-Causes output to be in hexadecimal instead of ASCII. +-.It Fl md4 +-Selects MD4 as the hash algorithm. +-.It Fl md5 +-Selects MD5 as the hash algorithm. +-.It Fl sha1 +-Selects SHA-1 (NIST Secure Hash Algorithm Revision 1) as the hash algorithm. +-.It Fl rmd160 +-Selects RMD-160 (160 bit Ripe Message Digest) as the hash algorithm. +-.El ++password sequences to be printed out ending with the requested ++sequence number. ++.Pp ++The hash algorithm is selected using the ++.Fl t Ar hash ++option, possible choices here are md4, md5 or sha1. ++.Pp ++The ++.Fl p Ar password ++allows the user to specify the ++.Em S/Key ++password on the command line. ++.Pp ++To output the S/Key list in hexadecimal instead of words, ++use the ++.Fl x ++option. + .Sh EXAMPLES +-.sp 0 +- % skey 99 th91334 +-.sp 0 +- Enter secret password: +-.sp 0 +- OMEN US HORN OMIT BACK AHOY +-.sp 0 +- % ++Initialize generation of one time passwords: ++.Bd -literal -offset indent ++host% skeyinit ++Password: \*[Lt]normal login password\*[Gt] ++[Adding username] ++Enter secret password: \*[Lt]new secret password\*[Gt] ++Again secret password: \*[Lt]new secret password again\*[Gt] ++ID username s/key is 99 host12345 ++Next login password: SOME SIX WORDS THAT WERE COMPUTED ++.Ed ++.Pp ++Produce a list of one time passwords to take with to a conference: ++.Bd -literal -offset indent ++host% skey -n 3 99 host12345 ++Enter secret password: \*[Lt]secret password as used with skeyinit\*[Gt] ++97: NOSE FOOT RUSH FEAR GREY JUST ++98: YAWN LEO DEED BIND WACK BRAE ++99: SOME SIX WORDS THAT WERE COMPUTED ++.Ed ++.Pp ++Logging in to a host where ++.Nm ++is installed: ++.Bd -literal -offset indent ++host% telnet host ++ ++login: \*[Lt]username\*[Gt] ++Password [s/key 97 host12345]: ++.Ed ++.Pp ++Note that the user can use either his/her ++.Em S/Key ++password at the prompt but also the normal one unless the ++.Fl s ++flag is given to ++.Xr login 1 . + .Sh SEE ALSO + .Xr login 1 , ++.Xr skeyaudit 1 , + .Xr skeyinfo 1 , +-.Xr skeyinit 1 ++.Xr skeyinit 1 , ++.Xr ftpd 8 + .Pp +-.Em RFC1938 ++.Em RFC 2289 + .Sh TRADEMARKS AND PATENTS +-S/Key is a Trademark of Bellcore. ++.Em S/Key ++is a trademark of ++.Tn Bellcore . + .Sh AUTHORS +-Phil Karn, Neil M. Haller, John S. Walden, Scott Chasin ++Phil Karn, ++Neil M. Haller, ++John S. Walden, ++Scott Chasin +diff -ruN skey-1.1.5.orig/skey.3 skey-1.1.5/skey.3 +--- skey-1.1.5.orig/skey.3 1970-01-01 01:00:00.000000000 +0100 ++++ skey-1.1.5/skey.3 2003-11-06 17:46:45.000000000 +0000 +@@ -0,0 +1,264 @@ ++.\" $NetBSD: skey.3,v 1.8 2003/06/06 13:42:50 wiz Exp $ ++.\" ++.\" Copyright (c) 2001 The NetBSD Foundation, Inc. ++.\" All rights reserved. ++.\" ++.\" This code is derived from software contributed to The NetBSD Foundation ++.\" by Gregory McGarry. ++.\" ++.\" 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. All advertising materials mentioning features or use of this software ++.\" must display the following acknowledgement: ++.\" This product includes software developed by the NetBSD ++.\" Foundation, Inc. and its contributors. ++.\" 4. Neither the name of The NetBSD Foundation nor the names of its ++.\" contributors may be used to endorse or promote products derived ++.\" from this software without specific prior written permission. ++.\" ++.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS ++.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ++.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ++.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS ++.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ++.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF ++.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS ++.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN ++.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ++.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ++.\" POSSIBILITY OF SUCH DAMAGE. ++.\" ++.Dd November 10, 2001 ++.Dt SKEY 3 ++.Os ++.Sh NAME ++.Nm skey , ++.Nm skeychallenge , ++.Nm skeylookup , ++.Nm skeygetnext , ++.Nm skeyverify , ++.Nm skeyzero , ++.Nm getskeyprompt , ++.Nm skey_set_algorithm , ++.Nm skey_get_algorithm , ++.Nm skey_haskey , ++.Nm skey_keyinfo , ++.Nm skey_passcheck , ++.Nm skey_authenticate ++.Nd one-time password (OTP) library ++.Sh LIBRARY ++S/key One-Time Password Library (libskey, -lskey) ++.Sh SYNOPSIS ++.In skey.h ++.Ft int ++.Fn skeychallenge "struct skey *mp" "const char *name" "char *ss" \ ++"size_t sslen" ++.Ft int ++.Fn skeylookup "struct skey *mp" "const char *name" ++.Ft int ++.Fn skeygetnext "struct skey *mp" ++.Ft int ++.Fn skeyverify "struct skey *mp" "char *response" ++.Ft int ++.Fn skeyzero "struct skey *mp" "char *response" ++.Ft int ++.Fn getskeyprompt "struct skey *mp" "char *name" "char *prompt" ++.Ft const char * ++.Fn skey_set_algorithm "const char *new" ++.Ft const char * ++.Fn skey_get_algorithm "void" ++.Ft int ++.Fn skey_haskey "const char *username" ++.Ft const char * ++.Fn skey_keyinfo "const char *username" ++.Ft int ++.Fn skey_passcheck "const char *username" "char *passwd" ++.Ft int ++.Fn skey_authenticate "const char *username" ++.Ft void ++.Fn f "char *x" ++.Ft int ++.Fn keycrunch "char *result" "const char *seed" "const char *passwd" ++.Ft void ++.Fn rip "char *buf" ++.Ft char * ++.Fn readpass "char *buf " "int n" ++.Ft char * ++.Fn readskey "char *buf" "int n" ++.Ft int ++.Fn atob8 "char *out" "const char *in" ++.Ft int ++.Fn btoa8 "char *out" "const char *in" ++.Ft int ++.Fn htoi "int c" ++.Ft const char * ++.Fn skipspace "const char *cp" ++.Ft void ++.Fn backspace "char *buf" ++.Ft void ++.Fn sevenbit "char *buf" ++.Ft char * ++.Fn btoe "char *engout" "const char *c" ++.Ft int ++.Fn etob "char *out" "const char *e" ++.Ft char * ++.Fn put8 "char *out" "const char *s" ++.Sh DESCRIPTION ++The ++.Nm ++library provides routines for accessing ++.Nx Ns 's ++one-time password (OTP) authentication system. ++.Pp ++Most S/Key operations take a pointer to a ++.Em struct skey , ++which should be considered as an opaque identifier. ++.Sh FUNCTIONS ++The following high-level functions are available: ++.Bl -tag -width compact ++.It Fn skeychallenge "mp" "name" "ss" "sslen" ++Return a S/Key challenge for user ++.Fa name . ++If successful, the caller's skey structure ++.Fa mp ++is filled and 0 is returned. ++If unsuccessful (e.g. if name is unknown), ++\-1 is returned. ++.It Fn skeylookup "mp" "name" ++Find an entry for user ++.Fa name ++in the one-time password database. ++Returns 0 if the entry is found and 1 if the entry is not found. ++If an error occurs accessing the database, \-1 is returned. ++.It Fn skeygetnext "mp" ++Get the next entry in the one-time password database. ++Returns 0 on success and the entry is stored in ++.Ar mp ++and 1 if no more entries are available. ++If an error occurs accessing the database, \-1 is returned. ++.It Fn skeyverify "mp" "response" ++Verify response ++.Fa response ++to a S/Key challenge. ++Returns 0 if the verification is successful and 1 if the verification failed. ++If an error occurs accessing the database, \-1 is returned. ++.It Fn skeyzero "mp" "response" ++Comment out user's entry in the S/Key database. ++Returns 0 on success and the database is updated, ++otherwise \-1 is returned and the database remains unchanged. ++.It Fn getskeyprompt "mp" "name" "prompt" ++Issue a S/Key challenge for user ++.Ar name . ++If successful, fill in the caller's skey structure ++.Fa mp ++and return 0. ++If unsuccessful (e.g. if name is unknown) \-1 is returned. ++.El ++.Pp ++The following lower-level functions are available: ++.Bl -tag -width compact ++.It Fn skey_set_algorithm "new" ++Set hash algorithm type. ++Valid values for ++.Fa new ++are "md4", "md5" and "sha1". ++.It Fn skey_get_algorithm "void" ++Get current hash type. ++.It Fn skey_haskey "username" ++Returns 0 if the user ++.Fa username ++exists and 1 if the user doesn't exist. ++Returns \-1 on file error. ++.It Fn skey_keyinfo "username" ++Returns the current sequence number and seed for user ++.Ar username . ++.It Fn skey_passcheck "username" "passwd" ++Checks to see if answer is the correct one to the current challenge. ++.It Fn skey_authenticate "username" ++Used when calling program will allow input of the user's response to ++the challenge. ++Returns zero on success or \-1 on failure. ++.El ++.Pp ++The following miscellaneous functions are available: ++.Bl -tag -width compact ++.It Fn f "x" ++One-way function to take 8 bytes pointed to by ++.Fa x ++and return 8 bytes in place. ++.It Fn keycrunch "char *result" "const char *seed" "const char *passwd" ++Crunch a key. ++.It Fn rip "buf" ++Strip trailing CR/LF characters from a line of text ++.Fa buf . ++.It Fn readpass "buf" "n" ++Read in secret passwd (turns off echo). ++.It Fn readskey "buf" "n" ++Read in an s/key OTP (does not turn off echo). ++.It Fn atob8 "out" "in" ++Convert 8-byte hex-ascii string ++.Fa in ++to binary array ++.Fa out . ++Returns 0 on success, \-1 on error. ++.It Fn btoa8 "out" "in" ++Convert 8-byte binary array ++.Fa in ++to hex-ascii string ++.Fa out . ++Returns 0 on success, \-1 on error. ++.It Fn htoi "int c" ++Convert hex digit to binary integer. ++.It Fn skipspace "cp" ++Skip leading spaces from the string ++.Fa cp . ++.It Fn backspace "buf" ++Remove backspaced over characters from the string ++.Fa buf . ++.It Fn sevenbit "buf" ++Ensure line ++.Fa buf ++is all seven bits. ++.It Fn btoe "engout" "c" ++Encode 8 bytes in ++.Ar c ++as a string of English words. ++Returns a pointer to a static buffer in ++.Fa engout . ++.It Fn etob "out" "e" ++Convert English to binary. ++Returns 0 if the word is not in the database, 1 if all good words and ++parity is valid, \-1 if badly formed input (i.e. \*[Gt] 4 char word) ++and -2 if words are valid but parity is wrong. ++.It Fn put8 "out" "s" ++Display 8 bytes ++.Fa s ++as a series of 16-bit hex digits. ++.El ++.Sh FILES ++.Bl -tag -width /usr/lib/libskey_p.a -compact ++.It Pa /usr/lib/libskey.a ++static skey library ++.It Pa /usr/lib/libskey.so ++dynamic skey library ++.It Pa /usr/lib/libskey_p.a ++static skey library compiled for profiling ++.El ++.Sh SEE ALSO ++.Xr skey 1 , ++.Xr skeyaudit 1 , ++.Xr skeyinfo 1 ++.Sh BUGS ++The ++.Nm ++library functions are not re-entrant or thread-safe. ++.Pp ++The ++.Nm ++library defines many poorly named functions which pollute the name space. +diff -ruN skey-1.1.5.orig/skeyaudit.1 skey-1.1.5/skeyaudit.1 +--- skey-1.1.5.orig/skeyaudit.1 2001-05-10 17:10:49.000000000 +0100 ++++ skey-1.1.5/skeyaudit.1 2003-11-06 17:46:45.000000000 +0000 +@@ -1,46 +1,29 @@ +-.\" $OpenBSD: skeyaudit.1,v 1.8 2000/11/09 17:52:38 aaron Exp $ ++.\" $NetBSD: skeyaudit.1,v 1.6 2001/04/09 12:34:14 wiz Exp $ + .\" +-.Dd 22 July 1997 ++.Dd June 9, 1994 + .Dt SKEYAUDIT 1 + .Os + .Sh NAME + .Nm skeyaudit + .Nd warn users if their S/Key will soon expire + .Sh SYNOPSIS +-.Nm skeyaudit +-.Op Fl a +-.Op Fl i +-.Op Fl l Ar limit ++.Nm ++.Op Ar limit + .Sh DESCRIPTION + .Nm + searches through the file +-.Pa /etc/skeykeys ++.Dq Pa /etc/skey/skeykeys + for users whose S/Key sequence number is less than + .Ar limit , +-and mails them a reminder to run ++and sends them a reminder to run + .Xr skeyinit 1 +-soon. +-.Pp +-The options are as follows: +-.Bl -tag -width Ds +-.It Fl a +-Check all keys in +-.Pa /etc/skeykeys . +-This option is only available to the superuser and +-is useful to run regularly via +-.Xr cron 8 . +-.It Fl i +-Interactive mode. +-Don't send mail, just print to the standard output. +-.It Fl l Ar limit +-The limit used to determine whether or not a user should be notified. +-The default is to notify if there are fewer than 12 keys left. +-.El ++soon. If no limit is specified a default of 12 is used. + .Sh FILES +-.Bl -tag -width /etc/skeykeys -compact +-.It Pa /etc/skeykeys +-S/Key key information database ++.Bl -tag -width /etc/skey/skeykeys -compact ++.It Pa /etc/skey/skeykeys ++The S/Key key information database + .El + .Sh SEE ALSO + .Xr skey 1 , ++.Xr skeyinfo 1 , + .Xr skeyinit 1 +diff -ruN skey-1.1.5.orig/skeyaudit.c skey-1.1.5/skeyaudit.c +--- skey-1.1.5.orig/skeyaudit.c 2001-05-10 17:10:49.000000000 +0100 ++++ skey-1.1.5/skeyaudit.c 1970-01-01 01:00:00.000000000 +0100 +@@ -1,236 +0,0 @@ +-/* $OpenBSD: skeyaudit.c,v 1.10 2000/09/20 21:53:49 pjanzen Exp $ */ +- +-/* +- * Copyright (c) 1997, 2000 Todd C. Miller +- * 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. The name of the author may not be used to endorse or promote products +- * derived from this software without specific prior written permission. +- * +- * THIS SOFTWARE IS PROVIDED ``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 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. +- */ +- +-#include +-/*#include */ +-#include +-#include +-#include +-#include +-#include +-#include +-#include "config.h" +-#ifdef HAVE_ERR_H +-#include +-#else +-#include "err.h" +-#endif +-#include "skey.h" +- +-#include +-#include +-#include +- +-#ifdef HAVE_LOGIN_CAP_H +-# include +-#else +-# include "login_cap.h" +-#endif +- +-char *__progname; +- +-void notify __P((struct passwd *, int, int)); +-FILE *runsendmail __P((struct passwd *, int *)); +-void usage __P((void)); +- +-int +-main(argc, argv) +- int argc; +- char **argv; +-{ +- struct passwd *pw; +- struct skey key; +- int ch, errs = 0, left = 0, aflag = 0, iflag = 0, limit = 12; +- char *name; +- +- __progname = argv[0]; +- +- if (geteuid() != 0) +- errx(1, "must be setuid root"); +- +- while ((ch = getopt(argc, argv, "ail:")) != -1) +- switch(ch) { +- case 'a': +- aflag = 1; +- if (getuid() != 0) +- errx(1, "only root may use the -a flag"); +- break; +- case 'i': +- iflag = 1; +- break; +- case 'l': +- errno = 0; +- if ((limit = (int)strtol(optarg, NULL, 10)) == 0) +- errno = ERANGE; +- if (errno) { +- warn("key limit"); +- usage(); +- } +- break; +- default: +- usage(); +- } +- +- if (argc - optind > 0) +- usage(); +- +- /* Need key.keyfile zero'd at the very least */ +- (void)memset(&key, 0, sizeof(key)); +- +- if (aflag) { +- while ((ch = skeygetnext(&key)) == 0) { +- left = key.n - 1; +- if ((pw = getpwnam(key.logname)) == NULL) +- continue; +- if (left >= limit) +- continue; +- notify(pw, left, iflag); +- } +- if (ch == -1) +- errx(-1, "cannot open %s", SKEYKEYS); +- else +- (void)fclose(key.keyfile); +- } else { +- if ((pw = getpwuid(getuid())) == NULL) +- errx(1, "no passwd entry for uid %u", getuid()); +- if ((name = strdup(pw->pw_name)) == NULL) +- err(1, "cannot allocate memory"); +- sevenbit(name); +- +- errs = skeylookup(&key, name); +- switch (errs) { +- case 0: /* Success! */ +- left = key.n - 1; +- break; +- case -1: /* File error */ +- errx(errs, "cannot open %s", SKEYKEYS); +- break; +- case 1: /* Unknown user */ +- warnx("%s is not listed in %s", name, +- SKEYKEYS); +- } +- (void)fclose(key.keyfile); +- +- if (!errs && left < limit) +- notify(pw, left, iflag); +- } +- +- exit(errs); +-} +- +-void +-notify(pw, seq, interactive) +- struct passwd *pw; +- int seq; +- int interactive; +-{ +- static char hostname[MAXHOSTNAMELEN]; +- int pid; +- FILE *out; +- +- /* Only set this once */ +- if (hostname[0] == '\0' && gethostname(hostname, sizeof(hostname)) == -1) +- strcpy(hostname, "unknown"); +- +- if (interactive) +- out = stdout; +- else +- out = runsendmail(pw, &pid); +- +- if (!interactive) +- (void)fprintf(out, +- "To: %s\nSubject: IMPORTANT action required\n", pw->pw_name); +- +- if (seq) +- (void)fprintf(out, +-"\nYou are nearing the end of your current S/Key sequence for account\n\ +-%s on system %s.\n\n\ +-Your S/Key sequence number is now %d. When it reaches zero\n\ +-you will no longer be able to use S/Key to log into the system.\n\n", +-pw->pw_name, hostname, seq); +- else +- (void)fprintf(out, +-"\nYou are at the end of your current S/Key sequence for account\n\ +-%s on system %s.\n\n\ +-At this point you can no longer use S/Key to log into the system.\n\n", +-pw->pw_name, hostname); +- (void)fprintf(out, +-"Type \"skeyinit -s\" to reinitialize your sequence number.\n\n"); +- +- (void)fclose(out); +- if (!interactive) +- (void)waitpid(pid, NULL, 0); +-} +- +-FILE * +-runsendmail(pw, pidp) +- struct passwd *pw; +- int *pidp; +-{ +- FILE *fp; +- int pfd[2], pid; +- +- if (pipe(pfd) < 0) +- return(NULL); +- +- switch (pid = fork()) { +- case -1: /* fork(2) failed */ +- (void)close(pfd[0]); +- (void)close(pfd[1]); +- return(NULL); +- case 0: /* In child */ +- (void)close(pfd[1]); +- (void)dup2(pfd[0], STDIN_FILENO); +- (void)close(pfd[0]); +- +- /* Run sendmail as target user not root */ +- if (setusercontext(NULL, pw, pw->pw_uid, LOGIN_SETALL) != 0) { +- warn("cannot set user context"); +- _exit(127); +- } +- +- execl(SENDMAIL, "sendmail", "-t", NULL); +- warn("cannot run \"%s -t\"", SENDMAIL); +- _exit(127); +- } +- +- /* In parent */ +- *pidp = pid; +- fp = fdopen(pfd[1], "w"); +- (void)close(pfd[0]); +- +- return(fp); +-} +-void +-usage() +-{ +- (void)fprintf(stderr, "Usage: %s [-i] [-l limit]\n", +- __progname); +- exit(1); +-} +diff -ruN skey-1.1.5.orig/skeyaudit.sh skey-1.1.5/skeyaudit.sh +--- skey-1.1.5.orig/skeyaudit.sh 1970-01-01 01:00:00.000000000 +0100 ++++ skey-1.1.5/skeyaudit.sh 2003-11-06 17:46:45.000000000 +0000 +@@ -0,0 +1,58 @@ ++#!/bin/sh ++# ++# $NetBSD: skeyaudit.sh,v 1.2.12.2 2000/07/28 12:42:59 mjl Exp $ ++# ++# This script will look thru the skeykeys file for ++# people with sequence numbers less than LOWLIMIT=12 ++# and send them an e-mail reminder to use skeyinit soon ++# ++ ++KEYDB=/etc/skey/skeykeys ++LOWLIMIT=12 ++ADMIN=root ++SUBJECT="Reminder: Run skeyinit" ++HOST=`/bin/hostname` ++ ++ ++if [ "$1" != "" ] ++then ++ LOWLIMIT=$1 ++fi ++ ++if [ ! -s "${KEYDB}" ]; then ++ exit 0 ++fi ++ ++# an skeykeys entry looks like ++# jsw 0076 la13079 ba20a75528de9d3a ++# #oot md5 0005 aspa26398 9432d570ff4421f0 Jul 07,2000 01:36:43 ++# mjl sha1 0099 alpha2 459a5dac23d20a90 Jul 07,2000 02:14:17 ++# the sequence number is the second (or third) entry ++# ++ ++SKEYS=`awk '/^#/ {next} {if($2 ~ /^[0-9]+$/) print $1,$2,$3; else print $1,$3,$4; }' $KEYDB` ++ ++set -- ${SKEYS} ++ ++while [ "X$1" != "X" ]; do ++ USER=$1 ++ SEQ=$2 ++ KEY=$3 ++ shift 3 ++ # echo "$USER -- $SEQ -- $KEY" ++ if [ $SEQ -lt $LOWLIMIT ]; then ++ if [ $SEQ -lt 3 ]; then ++ SUBJECT="IMPORTANT action required" ++ fi ++ ( ++ echo "You are nearing the end of your current S/Key sequence for account $i" ++ echo "on system $HOST." ++ echo "" ++ echo "Your S/key sequence number is now $SEQ. When it reaches zero you" ++ echo "will no longer be able to use S/Key to login into the system. " ++ echo " " ++ echo "Use \"skeyinit -s\" to reinitialize your sequence number." ++ echo "" ++ ) | mail -s "$SUBJECT" $USER $ADMIN ++ fi ++done +diff -ruN skey-1.1.5.orig/skey.c skey-1.1.5/skey.c +--- skey-1.1.5.orig/skey.c 2001-05-10 17:10:49.000000000 +0100 ++++ skey-1.1.5/skey.c 2003-11-06 17:46:45.000000000 +0000 +@@ -25,6 +25,7 @@ + #include + #include + #include ++#include + #include "config.h" + + #ifdef HAVE_ERR_H +@@ -35,102 +36,93 @@ + + #include "skey.h" + +-void usage __P((char *)); ++int main(int, char **); ++void usage(char *); + + int +-main(argc, argv) +- int argc; +- char *argv[]; ++main(int argc, char **argv) + { +- int n, i, cnt = 1, pass = 0, hexmode = 0; +- char passwd[SKEY_MAX_PW_LEN+1], key[SKEY_BINKEY_SIZE]; +- char buf[33], *seed, *slash; +- +- /* If we were called as otp-METHOD, set algorithm based on that */ +- if ((slash = strrchr(argv[0], '/'))) +- slash++; +- else +- slash = argv[0]; +- if (strncmp(slash, "otp-", 4) == 0) { +- slash += 4; +- if (skey_set_algorithm(slash) == NULL) +- errx(1, "Unknown hash algorithm %s", slash); +- } +- +- for (i = 1; i < argc && argv[i][0] == '-' && strcmp(argv[i], "--");) { +- if (argv[i][2] == '\0') { +- /* Single character switch */ +- switch (argv[i][1]) { ++ int n, cnt = 1, i, pass = 0, hexmode = 0; ++ char passwd[SKEY_MAX_PW_LEN+1], key[SKEY_BINKEY_SIZE]; ++ char buf[33], *seed, *slash, *t; ++ ++ while ((i = getopt(argc, argv, "fn:p:t:x")) != -1) { ++ switch(i) { ++ case 'f': ++ break; /* unused */ + case 'n': +- if (i + 1 == argc) +- usage(argv[0]); +- cnt = atoi(argv[++i]); ++ cnt = atoi(optarg); + break; + case 'p': +- if (i + 1 == argc) +- usage(argv[0]); +- if (strlcpy(passwd, argv[++i], sizeof(passwd)) >= +- sizeof(passwd)) +- errx(1, "Password too long"); ++ if (strncpy(passwd, optarg, sizeof(passwd)) == NULL) ++ errx(1, "Password too long"); + pass = 1; + break; ++ case 't': ++ if (skey_set_algorithm(optarg) == NULL) ++ errx(1, "Unknown hash algorithm %s", optarg); ++ break; + case 'x': + hexmode = 1; + break; + default: + usage(argv[0]); +- } +- } else { +- /* Multi character switches are hash types */ +- if (skey_set_algorithm(&argv[i][1]) == NULL) { +- warnx("Unknown hash algorithm %s", &argv[i][1]); +- usage(argv[0]); +- } ++ break; + } +- i++; + } + +- if (argc > i + 2) +- usage(argv[0]); +- +- /* Could be in the form / */ +- if (argc <= i + 1) { ++ /* could be in the form / */ ++ if (argc <= optind + 1) { + /* look for / in it */ +- if (argc <= i) ++ if (argc <= optind) + usage(argv[0]); +- slash = strchr(argv[i], '/'); ++ slash = strchr(argv[optind], '/'); + if (slash == NULL) + usage(argv[0]); + *slash++ = '\0'; + seed = slash; + +- if ((n = atoi(argv[i])) < 0) { +- warnx("%d not positive", n); ++ if ((n = atoi(argv[optind])) < 0) { ++ fprintf(stderr, "%s is not positive\n", argv[optind]); + usage(argv[0]); + } else if (n > SKEY_MAX_SEQ) { + warnx("%d is larger than max (%d)", n, SKEY_MAX_SEQ); + usage(argv[0]); + } + } else { +- if ((n = atoi(argv[i])) < 0) { +- warnx("%d not positive", n); ++ if ((n = atoi(argv[optind])) < 0) { ++ fprintf(stderr, "%s not positive\n", argv[optind]); + usage(argv[0]); + } else if (n > SKEY_MAX_SEQ) { + warnx("%d is larger than max (%d)", n, SKEY_MAX_SEQ); + usage(argv[0]); + } +- seed = argv[++i]; ++ seed = argv[++optind]; ++ } ++ ++ for (t = seed; *t; t++) { ++ if (!isalnum(*t)) ++ errx(1, "seed must be alphanumeric"); + } + ++ if (!*seed || strlen(seed) > SKEY_MAX_SEED_LEN) ++ errx(1, "seed must be between 1 and %d long", SKEY_MAX_SEED_LEN); ++ + /* Get user's secret password */ + if (!pass) { +- (void)fputs("Reminder - Do not use this program while logged in via telnet or rlogin.\n", stderr); +- (void)fputs("Enter secret password: ", stderr); ++ fputs("Reminder - Do not use this program while " ++ "logged in via telnet or rlogin.\n", stderr); ++ fprintf(stderr, "Enter secret password: "); + readpass(passwd, sizeof(passwd)); + if (passwd[0] == '\0') + exit(1); + } + ++ if (strlen(passwd) < SKEY_MIN_PW_LEN) ++ warnx( ++ "RFC2289 states that password should be at least %d characters long", ++ SKEY_MIN_PW_LEN); ++ + /* Crunch seed and password into starting key */ + if (keycrunch(key, seed, passwd) != 0) + errx(1, "key crunch failed"); +@@ -138,16 +130,15 @@ + if (cnt == 1) { + while (n-- != 0) + f(key); +- (void)puts(hexmode ? put8(buf, key) : btoe(buf, key)); ++ puts(hexmode ? put8(buf, key) : btoe(buf, key)); + } else { + for (i = 0; i <= n - cnt; i++) + f(key); + for (; i <= n; i++) { ++ printf("%3d: %-29s", i, btoe(buf, key)); + if (hexmode) +- (void)printf("%d: %-29s %s\n", i, +- btoe(buf, key), put8(buf, key)); +- else +- (void)printf("%d: %-29s\n", i, btoe(buf, key)); ++ printf("\t%s", put8(buf, key)); ++ puts(""); + f(key); + } + } +@@ -155,9 +146,10 @@ + } + + void +-usage(s) +- char *s; ++usage(char *s) + { +- (void)fprintf(stderr, "Usage: %s [-x] [-md4|-md5|-sha1|-rmd160] [-n count] [-p password] [/] key\n", s); ++ fprintf(stderr, ++"Usage: %s [-n count] [-p password] [-t hash] [-x] sequence# [/] key\n", ++ s); + exit(1); + } +diff -ruN skey-1.1.5.orig/skey.h skey-1.1.5/skey.h +--- skey-1.1.5.orig/skey.h 2001-05-10 17:10:49.000000000 +0100 ++++ skey-1.1.5/skey.h 2003-11-06 17:46:45.000000000 +0000 +@@ -1,3 +1,5 @@ ++/* $NetBSD: skey.h,v 1.8 2000/07/28 16:35:11 thorpej Exp $ */ ++ + /* + * S/KEY v1.1b (skey.h) + * +@@ -11,86 +13,86 @@ + * Todd C. Miller + * + * Main client header +- * +- * $OpenBSD: skey.h,v 1.13 1999/07/15 14:33:48 provos Exp $ + */ + + /* Server-side data structure for reading keys file during login */ +-struct skey { +- FILE *keyfile; +- char buf[256]; +- char *logname; +- int n; +- char *seed; +- char *val; +- long recstart; /* needed so reread of buffer is efficient */ ++struct skey ++{ ++ FILE *keyfile; ++ char buf[256]; ++ char *logname; ++ int n; ++ char *seed; ++ char *val; ++ long recstart; /* needed so reread of buffer is efficient */ + }; + + /* Client-side structure for scanning data stream for challenge */ +-struct mc { +- char buf[256]; +- int skip; +- int cnt; ++struct mc ++{ ++ char buf[256]; ++ int skip; ++ int cnt; + }; + + /* Maximum sequence number we allow */ + #ifndef SKEY_MAX_SEQ +-#define SKEY_MAX_SEQ 10000 ++#define SKEY_MAX_SEQ 10000 + #endif + +-/* Minimum secret password length (rfc1938) */ ++/* Minimum secret password length (rfc2289) */ + #ifndef SKEY_MIN_PW_LEN +-#define SKEY_MIN_PW_LEN 10 ++#define SKEY_MIN_PW_LEN 10 + #endif + +-/* Max secret password length (rfc1938 says 63 but allows more) */ ++/* Max secret password length (rfc2289 says 63 but allows more) */ + #ifndef SKEY_MAX_PW_LEN +-#define SKEY_MAX_PW_LEN 255 ++#define SKEY_MAX_PW_LEN 255 + #endif + +-/* Max length of an S/Key seed (rfc1938) */ ++/* Max length of an S/Key seed (rfc2289) */ + #ifndef SKEY_MAX_SEED_LEN +-#define SKEY_MAX_SEED_LEN 16 ++#define SKEY_MAX_SEED_LEN 16 + #endif + + /* Max length of S/Key challenge (otp-???? 9999 seed) */ + #ifndef SKEY_MAX_CHALLENGE +-#define SKEY_MAX_CHALLENGE (11 + SKEY_MAX_HASHNAME_LEN + SKEY_MAX_SEED_LEN) ++#define SKEY_MAX_CHALLENGE (11 + SKEY_MAX_HASHNAME_LEN + SKEY_MAX_SEED_LEN) + #endif + + /* Max length of hash algorithm name (md4/md5/sha1/rmd160) */ +-#define SKEY_MAX_HASHNAME_LEN 6 ++#define SKEY_MAX_HASHNAME_LEN 6 + + /* Size of a binary key (not NULL-terminated) */ +-#define SKEY_BINKEY_SIZE 8 ++#define SKEY_BINKEY_SIZE 8 + + /* Location of random file for bogus challenges */ +-#define _SKEY_RAND_FILE_PATH_ "/var/db/host.random" ++#define _SKEY_RAND_FILE_PATH_ "/var/db/host.random" + + /* Prototypes */ +-void f(char *x); +-int keycrunch(char *result, char *seed, char *passwd); +-char *btoe(char *engout, char *c); +-char *put8(char *out, char *s); +-int etob(char *out, char *e); +-void rip(char *buf); +-int skeychallenge(struct skey * mp, char *name, char *ss); +-int skeylookup (struct skey * mp, char *name); +-int skeyverify (struct skey * mp, char *response); +-int skeyzero (struct skey * mp, char *response); +-void sevenbit (char *s); +-void backspace (char *s); +-char *skipspace (char *s); +-char *readpass (char *buf, int n); +-char *readskey (char *buf, int n); +-int skey_authenticate (char *username); +-int skey_passcheck (char *username, char *passwd); +-char *skey_keyinfo (char *username); +-int skey_haskey (char *username); +-int getskeyprompt (struct skey *mp, char *name, char *prompt); +-int atob8 (char *out, char *in); +-int btoa8 (char *out, char *in); +-int htoi (int c); +-const char *skey_get_algorithm (void); +-char *skey_set_algorithm (char *new); +-int skeygetnext (struct skey *mp); ++void f __P ((char *)); ++int keycrunch __P ((char *, const char *, const char *)); ++char *btoe __P ((char *, const char *)); ++char *put8 __P ((char *, const char *)); ++int etob __P ((char *, const char *)); ++void rip __P ((char *)); ++int skeychallenge __P ((struct skey *, const char *, char *, size_t)); ++int skeylookup __P ((struct skey *, const char *)); ++int skeyverify __P ((struct skey *, char *)); ++void sevenbit __P ((char *)); ++void backspace __P ((char *)); ++const char *skipspace __P ((const char *)); ++char *readpass __P ((char *, int)); ++char *readskey __P ((char *, int)); ++int skey_authenticate __P ((const char *)); ++int skey_passcheck __P ((const char *, char *)); ++const char *skey_keyinfo __P ((const char *)); ++int skey_haskey __P ((const char *)); ++int getskeyprompt __P ((struct skey *, char *, char *)); ++int atob8 __P((char *, const char *)); ++int btoa8 __P((char *, const char *)); ++int htoi __P((int)); ++const char *skey_get_algorithm __P((void)); ++const char *skey_set_algorithm __P((const char *)); ++int skeygetnext __P((struct skey *)); ++int skeyzero __P((struct skey *, char *)); +diff -ruN skey-1.1.5.orig/skeyinfo.1 skey-1.1.5/skeyinfo.1 +--- skey-1.1.5.orig/skeyinfo.1 2001-05-10 17:10:49.000000000 +0100 ++++ skey-1.1.5/skeyinfo.1 2003-11-06 17:46:45.000000000 +0000 +@@ -1,30 +1,19 @@ +-.\" $OpenBSD: skeyinfo.1,v 1.3 2000/03/11 21:40:02 aaron Exp $ ++.\" $NetBSD: skeyinfo.1,v 1.5 2001/04/09 12:34:44 wiz Exp $ + .\" +-.Dd 22 July 1997 ++.Dd June 9, 1994 + .Dt SKEYINFO 1 + .Os + .Sh NAME + .Nm skeyinfo + .Nd obtain the next S/Key challenge for a user + .Sh SYNOPSIS +-.Nm skeyinfo +-.Op Fl v ++.Nm + .Op Ar user + .Sh DESCRIPTION + .Nm + prints out the next S/Key challenge for the specified user or for the + current user if no user is specified. +-.Pp +-The options are as follows: +-.Bl -tag -width Ds +-.It Fl v +-Print the hash algorithm as well. +-.El +-.Sh EXAMPLES +-% skey -n `skeyinfo` | lpr +-.Pp +-This would print out a list of S/Key passwords for use over +-an untrusted network (perhaps for use at a conference). + .Sh SEE ALSO + .Xr skey 1 , ++.Xr skeyaudit 1 , + .Xr skeyinit 1 +diff -ruN skey-1.1.5.orig/skeyinfo.c skey-1.1.5/skeyinfo.c +--- skey-1.1.5.orig/skeyinfo.c 2001-05-10 17:10:49.000000000 +0100 ++++ skey-1.1.5/skeyinfo.c 2003-11-06 17:46:45.000000000 +0000 +@@ -1,9 +1,12 @@ +-/* $OpenBSD: skeyinfo.c,v 1.6 2001/02/05 16:58:11 millert Exp $ */ ++/* $NetBSD: skeyinfo.c,v 1.4 2003/07/23 04:11:50 itojun Exp $ */ + +-/* +- * Copyright (c) 1997 Todd C. Miller ++/*- ++ * Copyright (c) 1997 The NetBSD Foundation, Inc. + * All rights reserved. + * ++ * This code is derived from software contributed to The NetBSD Foundation ++ * by Andrew Brown. ++ * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: +@@ -12,104 +15,79 @@ + * 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. The name of the author may not be used to endorse or promote products +- * derived from this software without specific prior written permission. ++ * 3. All advertising materials mentioning features or use of this software ++ * must display the following acknowledgement: ++ * This product includes software developed by the NetBSD ++ * Foundation, Inc. and its contributors. ++ * 4. Neither the name of The NetBSD Foundation nor the names of its ++ * contributors may be used to endorse or promote products derived ++ * from this software without specific prior written permission. + * +- * THIS SOFTWARE IS PROVIDED ``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 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. ++ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS ++ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ++ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ++ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS ++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ++ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF ++ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS ++ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN ++ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ++ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ++ * POSSIBILITY OF SUCH DAMAGE. + */ + +-/*#include */ +-#include + #include +-#include ++#include ++#include + #include + #include +-#include "config.h" +-#include "skey.h" +-/*#include "defines.h"*/ + +-char *__progname; ++#include "skey.h" + +-void usage(void); ++int main __P((int, char *[])); + +-int +-main(argc, argv) +- int argc; +- char **argv; ++int main(int argc, char **argv) + { +- struct passwd *pw; +- struct skey key; +- char *name = NULL; +- int error, ch, verbose = 0; +- +- __progname=argv[0]; +- +- if (geteuid() != 0) +- errx(1, "must be setuid root"); +- +- while ((ch = getopt(argc, argv, "v")) != -1) +- switch(ch) { +- case 'v': +- verbose = 1; +- break; +- default: +- usage(); ++ struct skey skey; ++ char name[100], prompt[1024]; ++ int uid; ++ struct passwd *pw = NULL; ++ ++ argc--; ++ argv++; ++ ++ if (geteuid()) ++ errx(1, "must be root to read %s", SKEYKEYS); ++ ++ uid = getuid(); ++ ++ if (!argc) ++ pw = getpwuid(uid); ++ else if (!uid) ++ pw = getpwnam(argv[0]); ++ else ++ errx(1, "permission denied to look other users skeys"); ++ ++ if (!pw) { ++ if (argc) ++ errx(1, "%s: no such user", argv[0]); ++ else ++ errx(1, "who are you?"); + } +- argc -= optind; +- argv += optind; + +- if (argc == 1) +- name = argv[0]; +- else if (argc > 1) +- usage(); +- +- if (name && getuid() != 0) +- errx(1, "only root may specify an alternate user"); +- +- if (name) { +- if (strlen(name) > PASS_MAX) +- errx(1, "username too long (%d chars max)", PASS_MAX); +- if ((pw = getpwnam(name)) == NULL) +- errx(1, "no passwd entry for %s", name); +- } else { +- if ((pw = getpwuid(getuid())) == NULL) +- errx(1, "no passwd entry for uid %u", getuid()); +- } ++ strncpy(name, pw->pw_name, sizeof(name)); + +- if ((name = strdup(pw->pw_name)) == NULL) +- err(1, "cannot allocate memory"); +- sevenbit(name); +- +- error = skeylookup(&key, name); +- switch (error) { +- case 0: /* Success! */ +- if (verbose) +- (void)printf("otp-%s ", skey_get_algorithm()); +- (void)printf("%d %s\n", key.n - 1, key.seed); +- break; +- case -1: /* File error */ +- warnx("cannot open %s", SKEYKEYS); +- break; +- case 1: /* Unknown user */ +- warnx("%s is not listed in %s", name, SKEYKEYS); ++ if (getskeyprompt(&skey, name, prompt) == -1) { ++ printf("%s %s no s/key\n", ++ argc ? name : "You", ++ argc ? "has" : "have"); + } +- (void)fclose(key.keyfile); +- +- exit(error); +-} +- +-void +-usage() +-{ +- (void)fprintf(stderr, "Usage: %s [-v] [user]\n", __progname); +- exit(1); ++ else { ++ if (argc) ++ printf("%s's ", pw->pw_name); ++ else ++ printf("Your "); ++ printf("next %s", prompt); ++ } ++ return 0; + } +diff -ruN skey-1.1.5.orig/skeyinit.1 skey-1.1.5/skeyinit.1 +--- skey-1.1.5.orig/skeyinit.1 2001-05-10 17:10:49.000000000 +0100 ++++ skey-1.1.5/skeyinit.1 2003-11-06 17:46:45.000000000 +0000 +@@ -1,22 +1,18 @@ +-.\" $OpenBSD: skeyinit.1,v 1.19 2000/11/09 17:52:39 aaron Exp $ +-.\" $NetBSD: skeyinit.1,v 1.4 1995/07/07 22:24:09 jtc Exp $ ++.\" $NetBSD: skeyinit.1,v 1.11 2001/04/09 12:35:00 wiz Exp $ + .\" @(#)skeyinit.1 1.1 10/28/93 + .\" +-.Dd February 24, 1998 ++.Dd June 7, 2000 + .Dt SKEYINIT 1 + .Os + .Sh NAME + .Nm skeyinit + .Nd change password or add user to S/Key authentication system + .Sh SYNOPSIS +-.Nm skeyinit ++.Nm ++.Op Fl n Ar count + .Op Fl s ++.Op Fl t Ar hash + .Op Fl z +-.Op Fl n Ar count +-.Oo +-.Fl md4 | Fl md5 | Fl sha1 | +-.Fl rmd160 +-.Oc + .Op Ar user + .Sh DESCRIPTION + .Nm +@@ -30,52 +26,17 @@ + .Nm + requires you to type a secret password, so it should be used + only on a secure terminal. +-For example, on the console of a +-workstation or over an encrypted network session. +-If you are using +-.Nm +-while logged in over an untrusted network, follow the instructions +-given below with the +-.Fl s +-option. +-.Pp +-Before initializing an S/Key entry, the user must authenticate +-using either a standard password or an S/Key challenge. +-When used over an untrusted network, a password of +-.Sq s/key +-should be used. +-The user will then be presented with the standard +-S/Key challenge and allowed to proceed if it is correct. +-.Pp +-The options are as follows: ++.Sh OPTIONS + .Bl -tag -width Ds +-.It Fl x +-Displays pass phrase in hexadecimal instead of ASCII. + .It Fl s +-Set secure mode where the user is expected to have used a secure +-machine to generate the first one-time password. +-Without the +-.Fl s +-option the system will assume you are directly connected over secure +-communications and prompt you for your secret password. +-The +-.Fl s +-option also allows one to set the seed and count for complete +-control of the parameters. +-You can use +-.Ic skeyinit -s +-in combination with the +-.Nm skey +-command to set the seed and count if you do not like the defaults. +-To do this run +-.Nm +-in one window and put in your count and seed, then run +-.Nm skey +-in another window to generate the correct 6 English words for that +-count and seed. +-You can then "cut-and-paste" or type the words into the +-.Nm +-window. ++allows the user to set the seed and count for complete control ++of the parameters. ++To do this run skeyinit in one window and put in your count and seed; ++then run ++.Xr skey 1 ++in another window to generate the correct 6 english words ++for that count and seed. ++You can then "cut-and-paste" or type the words into the skeyinit window. + .It Fl z + Allows the user to zero their S/Key entry. + .It Fl n Ar count +@@ -84,30 +45,22 @@ + sequence at + .Ar count + (default is 100). +-.It Fl md4 +-Selects MD4 as the hash algorithm. +-.It Fl md5 +-Selects MD5 as the hash algorithm. +-.It Fl sha1 +-Selects SHA (NIST Secure Hash Algorithm Revision 1) as the hash algorithm. +-.It Fl rmd160 +-Selects RMD-160 (160 bit Ripe Message Digest) as the hash algorithm. ++.It Fl t Ar hash ++Selects the hash algorithm to use. ++Available choices are md4 (the default), md5 or sha1. + .It Ar user + The username to be changed/added. +-By default the current user is operated on. ++By default the current user is operated on, only root may ++change other user's entries. + .El +-.Sh ERRORS +-.Bl -tag -width "skey disabled" +-.It skey disabled +-.Pa /etc/skeykeys +-does not exist. +-It must be created by the superuser in order to use +-.Nm skeyinit . + .Sh FILES +-.Bl -tag -width /etc/skeykeys +-.It Pa /etc/skeykeys +-database of information for S/Key system ++.Bl -tag -width /etc/skey/skeykeys ++.It Pa /etc/skey/skeykeys ++data base of information for S/Key system. ++.El + .Sh SEE ALSO +-.Xr skey 1 ++.Xr skey 1 , ++.Xr skeyaudit 1 , ++.Xr skeyinfo 1 + .Sh AUTHORS + Phil Karn, Neil M. Haller, John S. Walden, Scott Chasin +diff -ruN skey-1.1.5.orig/skeyinit.c skey-1.1.5/skeyinit.c +--- skey-1.1.5.orig/skeyinit.c 2001-05-10 17:10:49.000000000 +0100 ++++ skey-1.1.5/skeyinit.c 2003-11-06 17:46:45.000000000 +0000 +@@ -43,6 +43,18 @@ + + #include + ++#ifdef HAVE_SHADOW_H ++#include ++#endif ++ ++#ifdef HAVE_CRACK_H ++#include ++#ifndef CRACKLIB_DICTPATH ++#define CRACKLIB_DICTPATH "/usr/lib/cracklib_dict" ++#endif ++#endif ++ ++#include "err.h" + #include "skey.h" + + +@@ -50,62 +62,80 @@ + #define SKEY_NAMELEN 4 + #endif + +-void usage __P((char *)); ++int main __P((int, char **)); + +-int +-main(argc, argv) +- int argc; +- char *argv[]; ++int main(int argc, char **argv) + { +- int rval, nn, i, l, n=0, defaultsetup=1, zerokey=0, hexmode=0; ++ int rval, nn, i, l, n=0, defaultsetup=1, c, zerokey=0, hexmode=0; + time_t now; +- struct utmp old_ut; +- +-#ifndef UT_LINESIZE +-# define UT_LINESIZE (sizeof(old_ut.ut_line)) +-# define UT_NAMESIZE (sizeof(old_ut.ut_name)) +-# define UT_HOSTSIZE (sizeof(old_ut.ut_host)) +-# endif +- +- char hostname[MAXHOSTNAMELEN]; ++ char hostname[MAXHOSTNAMELEN+1]; ++ char seed[SKEY_MAX_PW_LEN+2], key[SKEY_BINKEY_SIZE]; ++ char defaultseed[SKEY_MAX_SEED_LEN+1]; + char passwd[SKEY_MAX_PW_LEN+2], passwd2[SKEY_MAX_PW_LEN+2]; +- char seed[SKEY_MAX_SEED_LEN+2], defaultseed[SKEY_MAX_SEED_LEN+1]; +- char tbuf[27], buf[80], key[SKEY_BINKEY_SIZE]; +- char lastc, me[UT_NAMESIZE+1], *salt, *p, *pw, *ht=NULL; +- struct skey skey; +- struct passwd *pp; +- struct tm *tm; ++ char tbuf[27], buf[80]; ++ char lastc, me[LOGIN_NAME_MAX+1], *p, *pw, *ht=NULL, *msg; ++ const char *salt; ++ struct skey skey; ++ struct passwd *pp; ++ struct tm *tm; ++#ifdef HAVE_SHADOW_H ++ struct spwd *sp; ++#endif ++ ++ i = open(_PATH_DEVNULL, O_RDWR); ++ while (i >= 0 && i < 2) ++ i = dup(i); ++ if (i > 2) ++ close(i); + + if (geteuid() != 0) + errx(1, "must be setuid root."); + + if (gethostname(hostname, sizeof(hostname)) < 0) +- err(1, "gethostname"); +- for (i = 0, p = defaultseed; hostname[i] && i < SKEY_NAMELEN; i++) { +- if (isalpha(hostname[i])) { +- if (isupper(hostname[i])) +- hostname[i] = tolower(hostname[i]); +- *p++ = hostname[i]; +- } else if (isdigit(hostname[i])) +- *p++ = hostname[i]; ++ err(1, "gethostname() error"); ++ ++ for (i = 0, l = 0; l < sizeof(defaultseed); i++) { ++ if (hostname[i] == '\0') { ++ defaultseed[l] = hostname[i]; ++ break; ++ } ++ if (isalnum(hostname[i])) ++ defaultseed[l++] = hostname[i]; + } +- *p = '\0'; +- (void)time(&now); +- (void)sprintf(tbuf, "%05ld", (long) (now % 100000)); +- (void)strncat(defaultseed, tbuf, sizeof(defaultseed) - 5); ++ ++ defaultseed[SKEY_NAMELEN] = '\0'; ++ time(&now); ++ snprintf(tbuf, sizeof(tbuf), "%05ld", (long) (now % 100000)); ++ strncat(defaultseed, tbuf, sizeof(defaultseed)); + + if ((pp = getpwuid(getuid())) == NULL) +- err(1, "no user with uid %d", getuid()); +- (void)strcpy(me, pp->pw_name); ++ err(1, "no user with uid %ld", (u_long)getuid()); ++ strncpy(me, pp->pw_name, sizeof(me)); + + if ((pp = getpwnam(me)) == NULL) +- err(1, "Who are you?"); ++ err(1, "getpwnam() returned NULL, Who are you?"); ++#ifdef HAVE_SHADOW_H ++ /* hacking in shadow support... */ ++ else if (strcmp(pp->pw_passwd, "x") == 0) { ++ if ((sp = getspnam(me)) == NULL) ++ err(1, "Unable to verify Password"); ++ pp->pw_passwd = sp->sp_pwdp; ++ } ++#endif + salt = pp->pw_passwd; + +- for (i = 1; i < argc && argv[i][0] == '-' && strcmp(argv[i], "--");) { +- if (argv[i][2] == '\0') { +- /* Single character switch */ +- switch (argv[i][1]) { ++ while((c = getopt(argc, argv, "n:t:sxz")) != -1) { ++ switch(c) { ++ case 'n': ++ n = atoi(optarg); ++ if (n < 1 || n > SKEY_MAX_SEQ) ++ errx(1, "count must be between 1 and %d", SKEY_MAX_SEQ); ++ break; ++ case 't': ++ if(skey_set_algorithm(optarg) == NULL) ++ errx(1, "Unknown hash algorithm %s", optarg); ++ ht = optarg; ++ break; + case 's': + defaultsetup = 0; + break; +@@ -115,105 +145,51 @@ + case 'z': + zerokey = 1; + break; +- case 'n': +- if (argv[++i] == NULL || argv[i][0] == '\0') +- usage(argv[0]); +- if ((n = atoi(argv[i])) < 1 || n >= SKEY_MAX_SEQ) +- errx(1, "count must be > 0 and < %d", +- SKEY_MAX_SEQ); +- break; + default: +- usage(argv[0]); +- } +- } else { +- /* Multi character switches are hash types */ +- if ((ht = skey_set_algorithm(&argv[i][1])) == NULL) { +- warnx("Unknown hash algorithm %s", &argv[i][1]); +- usage(argv[0]); ++ errx(1, "Usage: %s [-n count] [-t md4|md5|sha1] [-s] [-x] [-z] [user]", argv[0]); + } + } +- i++; +- } ++ ++ if (argc > optind) { ++ pp = getpwnam(argv[optind]); ++ if (pp == NULL) ++ errx(1, "User %s unknown", argv[optind]); ++ } + +- /* check for optional user string */ +- if (argc - i > 1) { +- usage(argv[0]); +- } else if (argv[i]) { +- if ((pp = getpwnam(argv[i])) == NULL) { +- if (getuid() == 0) { +- static struct passwd _pp; +- +- _pp.pw_name = argv[i]; +- pp = &_pp; +- warnx("Warning, user unknown: %s", argv[i]); +- } else { +- errx(1, "User unknown: %s", argv[i]); +- } +- } else if (strcmp(pp->pw_name, me) != 0) { ++ if (strcmp(pp->pw_name, me) != 0) { + if (getuid() != 0) { + /* Only root can change other's passwds */ + errx(1, "Permission denied."); + } + } +- } + + if (getuid() != 0) { +- pw = getpass("Password (or `s/key'):"); +- if (strcasecmp(pw, "s/key") == 0) { +- if (skey_haskey(me)) +- exit(1); +- if (skey_authenticate(me)) +- errx(1, "Password incorrect."); +- } else { +- p = crypt(pw, salt); +- if (strcmp(p, pp->pw_passwd)) +- errx(1, "Password incorrect."); +- } ++ pw = getpass("Password: "); ++ p = crypt(pw, salt); ++ if (strcmp(p, pp->pw_passwd)) ++ errx(1, "Password incorrect."); + } + + rval = skeylookup(&skey, pp->pw_name); + switch (rval) { + case -1: +- if (errno == ENOENT) +- errx(1, "S/Key disabled"); +- else +- err(1, "cannot open database"); +- break; ++ err(1, "cannot open database"); + case 0: +- /* comment out user if asked to */ + if (zerokey) +- exit(skeyzero(&skey, pp->pw_name)); ++ exit (skeyzero(&skey, pp->pw_name)); ++ printf("[Updating %s]\n", pp->pw_name); ++ printf("Old key: [%s] %s\n", skey_get_algorithm(), skey.seed); + +- (void)printf("[Updating %s]\n", pp->pw_name); +- (void)printf("Old key: [%s] %s\n", skey_get_algorithm(), +- skey.seed); +- +- /* +- * Sanity check old seed. +- */ + l = strlen(skey.seed); +- for (p = skey.seed; *p; p++) { +- if (isalpha(*p)) { +- if (isupper(*p)) +- *p = tolower(*p); +- } else if (!isdigit(*p)) { +- memmove(p, p + 1, l - (p - skey.seed)); +- l--; +- } +- } +- +- /* +- * Let's be nice if they have an skey.seed that +- * ends in 0-8 just add one +- */ + if (l > 0) { + lastc = skey.seed[l - 1]; +- if (isdigit(lastc) && lastc != '9') { +- (void)strcpy(defaultseed, skey.seed); ++ if (isdigit((unsigned char)lastc) && lastc != '9') { ++ strncpy(defaultseed, skey.seed, sizeof(defaultseed)); + defaultseed[l - 1] = lastc + 1; + } +- if (isdigit(lastc) && lastc == '9' && l < 16) { +- (void)strcpy(defaultseed, skey.seed); ++ if (isdigit((unsigned char)lastc) && lastc == '9' && ++ l < 16) { ++ strncpy(defaultseed, skey.seed, sizeof(defaultseed)); + defaultseed[l - 1] = '0'; + defaultseed[l] = '0'; + defaultseed[l + 1] = '\0'; +@@ -223,7 +199,7 @@ + case 1: + if (zerokey) + errx(1, "You have no entry to zero."); +- (void)printf("[Adding %s]\n", pp->pw_name); ++ printf("[Adding %s]\n", pp->pw_name); + break; + } + if (n == 0) +@@ -237,37 +213,33 @@ + } + + if (!defaultsetup) { +- (void)printf("You need the 6 english words generated from the \"skey\" command.\n"); ++ printf("You need the 6 english words generated from the \"skey\" command.\n"); + for (i = 0; ; i++) { + if (i >= 2) + exit(1); + +- (void)printf("Enter sequence count from 1 to %d: ", +- SKEY_MAX_SEQ); +- (void)fgets(buf, sizeof(buf), stdin); ++ printf("Enter sequence count from 1 to %d: ", SKEY_MAX_SEQ); ++ fgets(buf, sizeof(buf), stdin); + n = atoi(buf); + if (n > 0 && n < SKEY_MAX_SEQ) + break; /* Valid range */ +- (void)printf("Error: Count must be > 0 and < %d\n", +- SKEY_MAX_SEQ); ++ printf("\nError: Count must be between 0 and %d\n", SKEY_MAX_SEQ); + } + + for (i = 0;; i++) { + if (i >= 2) + exit(1); + +- (void)printf("Enter new key [default %s]: ", +- defaultseed); +- (void)fgets(seed, sizeof(seed), stdin); ++ printf("Enter new seed [default %s]: ", defaultseed); ++ fflush(stdout); ++ fgets(seed, sizeof(seed), stdin); + rip(seed); +- if (seed[0] == '\0') +- (void)strcpy(seed, defaultseed); + for (p = seed; *p; p++) { + if (isalpha(*p)) { + if (isupper(*p)) + *p = tolower(*p); + } else if (!isdigit(*p)) { +- (void)puts("Error: seed may only contain alpha numeric characters"); ++ puts("Error: seed may only contain alpha numeric characters"); + break; + } + } +@@ -275,66 +247,75 @@ + break; /* Valid seed */ + } + if (strlen(seed) > SKEY_MAX_SEED_LEN) { +- (void)printf("Notice: Seed truncated to %d characters.\n", +- SKEY_MAX_SEED_LEN); ++ printf("Notice: Seed truncated to %d characters.\n", SKEY_MAX_SEED_LEN); + seed[SKEY_MAX_SEED_LEN] = '\0'; + } ++ if (seed[0] == '\0') ++ strncpy(seed, defaultseed, sizeof(seed)); + + for (i = 0;; i++) { + if (i >= 2) + exit(1); + +- (void)printf("otp-%s %d %s\nS/Key access password: ", ++ printf("otp-%s %d %s\ns/key access password: ", + skey_get_algorithm(), n, seed); +- (void)fgets(buf, sizeof(buf), stdin); ++ fgets(buf, sizeof(buf), stdin); + rip(buf); + backspace(buf); + + if (buf[0] == '?') { +- (void)puts("Enter 6 English words from secure S/Key calculation."); ++ puts("Enter 6 English words from secure s/key calculation."); + continue; + } else if (buf[0] == '\0') + exit(1); + if (etob(key, buf) == 1 || atob8(key, buf) == 0) + break; /* Valid format */ +- (void)puts("Invalid format - try again with 6 English words."); ++ puts("Invalid format - try again with 6 English words."); + } + } else { + /* Get user's secret password */ +- fputs("Reminder - Only use this method if you are directly connected\n or have an encrypted channel. If you are using telnet\n or rlogin, exit with no password and use skeyinit -s.\n", stderr); ++ puts("Reminder - Only use this method if you are directly connected\n" ++ "or have an encrypted channel. If you are using telnet\n" ++ "or rlogin, exit with no password and use skeyinit -s.\n"); + + for (i = 0;; i++) { +- if (i > 2) ++ if (i >= 3) + exit(1); + +- (void)fputs("Enter secret password: ", stderr); ++ printf("Enter secret password: "); + readpass(passwd, sizeof(passwd)); + if (passwd[0] == '\0') + exit(1); + + if (strlen(passwd) < SKEY_MIN_PW_LEN) { +- (void)fprintf(stderr, +- "Your password must be at least %d characters long.\n", SKEY_MIN_PW_LEN); ++ fprintf(stderr, ++ "Your password must be at least %d characters long.\n", SKEY_MIN_PW_LEN); + continue; + } else if (strcmp(passwd, pp->pw_name) == 0) { +- (void)fputs("Your password may not be the same as your user name.\n", stderr); +- continue; +- } else if (strspn(passwd, "abcdefghijklmnopqrstuvwxyz") == strlen(passwd)) { +- (void)fputs("Your password must contain more than just lower case letters.\nWhitespace, numbers, and puctuation are suggested.\n", stderr); ++ fputs("Your password may not be the same as your user name.\n", stderr); + continue; ++ } ++#ifdef HAVE_CRACK_H ++ if (msg = (char *) FascistCheck(passwd, CRACKLIB_DICTPATH)) { ++ warnx("Warning: %s", msg); ++ /* if (!i) */ /* reject passwords cracklib doesnt like the first time its entered... */ ++ /* continue; */ + } ++#endif + +- (void)fputs("Again secret password: ", stderr); ++ printf("Again secret password: "); + readpass(passwd2, sizeof(passwd)); ++ if (passwd2[0] == '\0') ++ exit(1); + + if (strcmp(passwd, passwd2) == 0) + break; + +- (void)fputs("Passwords do not match.\n", stderr); ++ puts("Passwords do not match."); + } + + /* Crunch seed and password into starting key */ +- (void)strcpy(seed, defaultseed); ++ strncpy(seed, defaultseed, sizeof(seed)); + if (keycrunch(key, seed, passwd) != 0) + err(2, "key crunch failed"); + +@@ -342,16 +323,16 @@ + while (nn-- != 0) + f(key); + } +- (void)time(&now); ++ time(&now); + tm = localtime(&now); +- (void)strftime(tbuf, sizeof(tbuf), " %b %d,%Y %T", tm); ++ strftime(tbuf, sizeof(tbuf), " %b %d,%Y %T", tm); + + if ((skey.val = (char *)malloc(16 + 1)) == NULL) + err(1, "Can't allocate memory"); + +- /* Zero out old key if necesary (entry would change size) */ ++ /* Zero out old key if necessary (entry would change size) */ + if (zerokey) { +- (void)skeyzero(&skey, pp->pw_name); ++ skeyzero(&skey, pp->pw_name); + /* Re-open keys file and seek to the end */ + if (skeylookup(&skey, pp->pw_name) == -1) + err(1, "cannot open database"); +@@ -376,26 +357,17 @@ + + /* Don't save algorithm type for md4 (keep record length same) */ + if (strcmp(skey_get_algorithm(), "md4") == 0) +- (void)fprintf(skey.keyfile, "%s %04d %-16s %s %-21s\n", ++ fprintf(skey.keyfile, "%s %04d %-16s %s %-21s\n", + pp->pw_name, n, seed, skey.val, tbuf); + else +- (void)fprintf(skey.keyfile, "%s %s %04d %-16s %s %-21s\n", ++ fprintf(skey.keyfile, "%s %s %04d %-16s %s %-21s\n", + pp->pw_name, skey_get_algorithm(), n, seed, skey.val, tbuf); + +- (void)fclose(skey.keyfile); ++ fclose(skey.keyfile); + +- (void)printf("\nID %s skey is otp-%s %d %s\n", pp->pw_name, ++ printf("\nID %s skey is otp-%s %d %s\n", pp->pw_name, + skey_get_algorithm(), n, seed); +- (void)printf("Next login password: %s\n\n", ++ printf("Next login password: %s\n\n", + hexmode ? put8(buf, key) : btoe(buf, key)); +- exit(0); +-} +- +-void +-usage(s) +- char *s; +-{ +- (void)fprintf(stderr, +- "Usage: %s [-s] [-x] [-z] [-n count] [-md4|-md5|-sha1|-rmd160] [user]\n", s); +- exit(1); ++ return 0; + } +diff -ruN skey-1.1.5.orig/skeylogin.c skey-1.1.5/skeylogin.c +--- skey-1.1.5.orig/skeylogin.c 2001-05-10 17:10:49.000000000 +0100 ++++ skey-1.1.5/skeylogin.c 2003-11-06 17:46:45.000000000 +0000 +@@ -20,6 +20,7 @@ + #include + #endif + #include ++#include + #include + #include + #include +@@ -32,6 +33,7 @@ + #include + #include + #include ++#include + + #include "config.h" + +@@ -45,73 +47,85 @@ + #include "sha1.h" + #endif + ++#include "err.h" + #include "skey.h" + +-char *skipspace __P((char *)); +-int skeylookup __P((struct skey *, char *)); ++#define OTP_FMT "otp-%.*s %d %.*s" + + /* Issue a skey challenge for user 'name'. If successful, +- * fill in the caller's skey structure and return(0). If unsuccessful +- * (e.g., if name is unknown) return(-1). ++ * fill in the caller's skey structure and return 0. If unsuccessful ++ * (e.g., if name is unknown) return -1. + * + * The file read/write pointer is left at the start of the + * record. + */ +-int +-getskeyprompt(mp, name, prompt) +- struct skey *mp; +- char *name; +- char *prompt; ++int getskeyprompt(struct skey *mp, char *name, char *prompt) + { + int rval; + + sevenbit(name); + rval = skeylookup(mp, name); +- (void)strcpy(prompt, "otp-md0 55 latour1\n"); ++ ++ *prompt = '\0'; + switch (rval) { +- case -1: /* File error */ +- return(-1); +- case 0: /* Lookup succeeded, return challenge */ +- (void)sprintf(prompt, "otp-%.*s %d %.*s\n", +- SKEY_MAX_HASHNAME_LEN, skey_get_algorithm(), ++ case -1: /* File error */ ++ return -1; ++ case 0: /* Lookup succeeded, return challenge */ ++ sprintf(prompt, OTP_FMT "\n", ++ SKEY_MAX_HASHNAME_LEN, skey_get_algorithm(), + mp->n - 1, SKEY_MAX_SEED_LEN, mp->seed); +- return(0); +- case 1: /* User not found */ +- (void)fclose(mp->keyfile); +- return(-1); ++ return 0; ++ case 1: /* User not found */ ++ fclose(mp->keyfile); ++ mp->keyfile = NULL; ++ return -1; + } +- return(-1); /* Can't happen */ ++ return -1; /* Can't happen, never ever ever. ever. I'm serious. */ + } + + /* Return a skey challenge string for user 'name'. If successful, +- * fill in the caller's skey structure and return(0). If unsuccessful +- * (e.g., if name is unknown) return(-1). ++ * fill in the caller's skey structure and return 0. If unsuccessful ++ * (e.g., if name is unknown) return -1. + * + * The file read/write pointer is left at the start of the + * record. + */ +-int +-skeychallenge(mp, name, ss) +- struct skey *mp; +- char *name; +- char *ss; ++int skeychallenge(struct skey *mp, const char *name, char *ss, size_t sslen) + { + int rval; + + rval = skeylookup(mp,name); ++ *ss = '\0'; + switch(rval){ +- case -1: /* File error */ +- return(-1); +- case 0: /* Lookup succeeded, issue challenge */ +- (void)sprintf(ss, "otp-%.*s %d %.*s", SKEY_MAX_HASHNAME_LEN, ++ case -1: /* File error */ ++ return -1; ++ case 0: /* Lookup succeeded, issue challenge */ ++ snprintf(ss, sslen, OTP_FMT, SKEY_MAX_HASHNAME_LEN, + skey_get_algorithm(), mp->n - 1, + SKEY_MAX_SEED_LEN, mp->seed); +- return(0); +- case 1: /* User not found */ +- (void)fclose(mp->keyfile); +- return(-1); ++ return 0; ++ case 1: /* User not found */ ++ fclose(mp->keyfile); ++ mp->keyfile = NULL; ++ return -1; ++ } ++ return -1; /* Can't happen - or your money back */ ++} ++ ++static FILE *openskey(void) ++{ ++ struct stat statbuf; ++ FILE *keyfile = NULL; ++ ++ if (stat(SKEYKEYS, &statbuf) == 0 && ++ (keyfile = fopen(SKEYKEYS, "r+"))) { ++ if ((statbuf.st_mode & 0007777) != 0600) ++ fchmod(fileno(keyfile), 0600); ++ } else { ++ keyfile = NULL; + } +- return(-1); /* Can't happen */ ++ ++ return keyfile; + } + + /* Find an entry in the One-time Password database. +@@ -120,27 +134,19 @@ + * 0: entry found, file R/W pointer positioned at beginning of record + * 1: entry not found, file R/W pointer positioned at EOF + */ +-int +-skeylookup(mp, name) +- struct skey *mp; +- char *name; ++int skeylookup(struct skey *mp, const char *name) + { + int found = 0; + long recstart = 0; +- char *cp, *ht = NULL; +- struct stat statbuf; +- +- /* Open SKEYKEYS if it exists, else return an error */ +- if (stat(SKEYKEYS, &statbuf) == 0 && +- (mp->keyfile = fopen(SKEYKEYS, "r+")) != NULL) { +- if ((statbuf.st_mode & 0007777) != 0600) +- fchmod(fileno(mp->keyfile), 0600); +- } else { +- return(-1); +- } ++ const char *ht = NULL; ++ char *last; + ++ if(!(mp->keyfile = openskey())) ++ return -1; ++ + /* Look up user name in database */ + while (!feof(mp->keyfile)) { ++ char *cp; + recstart = ftell(mp->keyfile); + mp->recstart = recstart; + if (fgets(mp->buf, sizeof(mp->buf), mp->keyfile) != mp->buf) +@@ -148,22 +154,22 @@ + rip(mp->buf); + if (mp->buf[0] == '#') + continue; /* Comment */ +- if ((mp->logname = strtok(mp->buf, " \t")) == NULL) ++ if ((mp->logname = strtok_r(mp->buf, " \t", &last)) == NULL) + continue; +- if ((cp = strtok(NULL, " \t")) == NULL) ++ if ((cp = strtok_r(NULL, " \t", &last)) == NULL) + continue; + /* Save hash type if specified, else use md4 */ +- if (isalpha(*cp)) { ++ if (isalpha((u_char) *cp)) { + ht = cp; +- if ((cp = strtok(NULL, " \t")) == NULL) ++ if ((cp = strtok_r(NULL, " \t", &last)) == NULL) + continue; + } else { + ht = "md4"; + } + mp->n = atoi(cp); +- if ((mp->seed = strtok(NULL, " \t")) == NULL) ++ if ((mp->seed = strtok_r(NULL, " \t", &last)) == NULL) + continue; +- if ((mp->val = strtok(NULL, " \t")) == NULL) ++ if ((mp->val = strtok_r(NULL, " \t", &last)) == NULL) + continue; + if (strcmp(mp->logname, name) == 0) { + found = 1; +@@ -171,7 +177,7 @@ + } + } + if (found) { +- (void)fseek(mp->keyfile, recstart, SEEK_SET); ++ fseek(mp->keyfile, recstart, SEEK_SET); + /* Set hash type */ + if (ht && skey_set_algorithm(ht) == NULL) { + warnx("Unknown hash algorithm %s, using %s", ht, +@@ -189,27 +195,21 @@ + * 0: next entry found and stored in mp + * 1: no more entries, file R/W pointer positioned at EOF + */ +-int +-skeygetnext(mp) +- struct skey *mp; ++int skeygetnext(struct skey *mp) + { + long recstart = 0; +- char *cp; +- struct stat statbuf; ++ char *last; + + /* Open SKEYKEYS if it exists, else return an error */ + if (mp->keyfile == NULL) { +- if (stat(SKEYKEYS, &statbuf) == 0 && +- (mp->keyfile = fopen(SKEYKEYS, "r+")) != NULL) { +- if ((statbuf.st_mode & 0007777) != 0600) +- fchmod(fileno(mp->keyfile), 0600); +- } else { +- return(-1); +- } ++ if(!(mp->keyfile = openskey())) ++ return -1; + } + + /* Look up next user in database */ + while (!feof(mp->keyfile)) { ++ char *cp; ++ + recstart = ftell(mp->keyfile); + mp->recstart = recstart; + if (fgets(mp->buf, sizeof(mp->buf), mp->keyfile) != mp->buf) +@@ -217,19 +217,19 @@ + rip(mp->buf); + if (mp->buf[0] == '#') + continue; /* Comment */ +- if ((mp->logname = strtok(mp->buf, " \t")) == NULL) ++ if ((mp->logname = strtok_r(mp->buf, " \t", &last)) == NULL) + continue; +- if ((cp = strtok(NULL, " \t")) == NULL) ++ if ((cp = strtok_r(NULL, " \t", &last)) == NULL) + continue; + /* Save hash type if specified, else use md4 */ +- if (isalpha(*cp)) { +- if ((cp = strtok(NULL, " \t")) == NULL) ++ if (isalpha((u_char) *cp)) { ++ if ((cp = strtok_r(NULL, " \t", &last)) == NULL) + continue; + } + mp->n = atoi(cp); +- if ((mp->seed = strtok(NULL, " \t")) == NULL) ++ if ((mp->seed = strtok_r(NULL, " \t", &last)) == NULL) + continue; +- if ((mp->val = strtok(NULL, " \t")) == NULL) ++ if ((mp->val = strtok_r(NULL, " \t", &last)) == NULL) + continue; + /* Got a real entry */ + break; +@@ -246,10 +246,7 @@ + * + * The database file is always closed by this call. + */ +-int +-skeyverify(mp, response) +- struct skey *mp; +- char *response; ++int skeyverify(struct skey *mp, char *response) + { + char key[SKEY_BINKEY_SIZE]; + char fkey[SKEY_BINKEY_SIZE]; +@@ -257,29 +254,31 @@ + time_t now; + struct tm *tm; + char tbuf[27]; +- char *cp; ++ char *cp, *last; + int i, rval; + + time(&now); + tm = localtime(&now); +- (void)strftime(tbuf, sizeof(tbuf), " %b %d,%Y %T", tm); ++ strftime(tbuf, sizeof(tbuf), " %b %d,%Y %T", tm); + + if (response == NULL) { +- (void)fclose(mp->keyfile); +- return(-1); ++ fclose(mp->keyfile); ++ mp->keyfile = NULL; ++ return -1; + } + rip(response); + + /* Convert response to binary */ + if (etob(key, response) != 1 && atob8(key, response) != 0) { + /* Neither english words or ascii hex */ +- (void)fclose(mp->keyfile); +- return(-1); ++ fclose(mp->keyfile); ++ mp->keyfile = NULL; ++ return -1; + } + + /* Compute fkey = f(key) */ +- (void)memcpy(fkey, key, sizeof(key)); +- (void)fflush(stdout); ++ memcpy(fkey, key, sizeof(key)); ++ fflush(stdout); + f(fkey); + + /* +@@ -298,26 +297,33 @@ + } + + /* Reread the file record NOW */ +- (void)fseek(mp->keyfile, mp->recstart, SEEK_SET); ++ fseek(mp->keyfile, mp->recstart, SEEK_SET); + if (fgets(mp->buf, sizeof(mp->buf), mp->keyfile) != mp->buf) { +- (void)fclose(mp->keyfile); +- return(-1); ++ fclose(mp->keyfile); ++ mp->keyfile = NULL; ++ return -1; + } + rip(mp->buf); +- mp->logname = strtok(mp->buf, " \t"); +- cp = strtok(NULL, " \t") ; +- if (isalpha(*cp)) +- cp = strtok(NULL, " \t") ; +- mp->seed = strtok(NULL, " \t"); +- mp->val = strtok(NULL, " \t"); ++ if ((mp->logname = strtok_r(mp->buf, " \t", &last)) == NULL) ++ goto verify_failure; ++ if ((cp = strtok_r(NULL, " \t", &last)) == NULL) ++ goto verify_failure; ++ if (isalpha((u_char) *cp)) ++ if ((cp = strtok_r(NULL, " \t", &last)) == NULL) ++ goto verify_failure; ++ if ((mp->seed = strtok_r(NULL, " \t", &last)) == NULL) ++ goto verify_failure; ++ if ((mp->val = strtok_r(NULL, " \t", &last)) == NULL) ++ goto verify_failure; + /* And convert file value to hex for comparison */ + atob8(filekey, mp->val); + + /* Do actual comparison */ + if (memcmp(filekey, fkey, SKEY_BINKEY_SIZE) != 0){ + /* Wrong response */ +- (void)fclose(mp->keyfile); +- return(1); ++ fclose(mp->keyfile); ++ mp->keyfile = NULL; ++ return 1; + } + + /* +@@ -327,19 +333,24 @@ + */ + btoa8(mp->val,key); + mp->n--; +- (void)fseek(mp->keyfile, mp->recstart, SEEK_SET); ++ fseek(mp->keyfile, mp->recstart, SEEK_SET); + /* Don't save algorithm type for md4 (keep record length same) */ + if (strcmp(skey_get_algorithm(), "md4") == 0) +- (void)fprintf(mp->keyfile, "%s %04d %-16s %s %-21s\n", ++ fprintf(mp->keyfile, "%s %04d %-16s %s %-21s\n", + mp->logname, mp->n, mp->seed, mp->val, tbuf); + else +- (void)fprintf(mp->keyfile, "%s %s %04d %-16s %s %-21s\n", ++ fprintf(mp->keyfile, "%s %s %04d %-16s %s %-21s\n", + mp->logname, skey_get_algorithm(), mp->n, + mp->seed, mp->val, tbuf); + +- (void)fclose(mp->keyfile); +- +- return(0); ++ fclose(mp->keyfile); ++ mp->keyfile = NULL; ++ return 0; ++ ++ verify_failure: ++ fclose(mp->keyfile); ++ mp->keyfile = NULL; ++ return -1; + } + + /* +@@ -348,13 +359,18 @@ + * Returns: 1 user doesnt exist, -1 fle error, 0 user exists. + * + */ +-int +-skey_haskey(username) +- char *username; ++int skey_haskey(const char *username) + { + struct skey skey; ++ int i; ++ ++ i = skeylookup(&skey, username); + +- return(skeylookup(&skey, username)); ++ if (skey.keyfile != NULL) { ++ fclose(skey.keyfile); ++ skey.keyfile = NULL; ++ } ++ return i; + } + + /* +@@ -364,19 +380,21 @@ + * seed for the passed user. + * + */ +-char * +-skey_keyinfo(username) +- char *username; ++const char *skey_keyinfo(const char *username) + { + int i; + static char str[SKEY_MAX_CHALLENGE]; + struct skey skey; + +- i = skeychallenge(&skey, username, str); ++ i = skeychallenge(&skey, username, str, sizeof str); + if (i == -1) +- return(0); ++ return 0; + +- return(str); ++ if (skey.keyfile != NULL) { ++ fclose(skey.keyfile); ++ skey.keyfile = NULL; ++ } ++ return str; + } + + /* +@@ -388,40 +406,38 @@ + * Returns: 0 success, -1 failure + * + */ +-int +-skey_passcheck(username, passwd) +- char *username, *passwd; ++int skey_passcheck(const char *username, char *passwd) + { + int i; + struct skey skey; + + i = skeylookup(&skey, username); + if (i == -1 || i == 1) +- return(-1); ++ return -1; + + if (skeyverify(&skey, passwd) == 0) +- return(skey.n); ++ return skey.n; + +- return(-1); ++ return -1; + } + ++#if DO_FAKE_CHALLENGE + #define ROUND(x) (((x)[0] << 24) + (((x)[1]) << 16) + (((x)[2]) << 8) + \ + ((x)[3])) + + /* + * hash_collapse() + */ +-static u_int32_t +-hash_collapse(s) +- u_char *s; ++static u_int32_t hash_collapse(u_char *s) + { +- int len, target; ++ int len, target, slen; + u_int32_t i; +- +- if ((strlen(s) % sizeof(u_int32_t)) == 0) +- target = strlen(s); /* Multiple of 4 */ ++ ++ slen = strlen((char *)s); ++ if ((slen % sizeof(u_int32_t)) == 0) ++ target = slen; /* Multiple of 4 */ + else +- target = strlen(s) - (strlen(s) % sizeof(u_int32_t)); ++ target = slen - slen % sizeof(u_int32_t); + + for (i = 0, len = 0; len < target; len += 4) + i ^= ROUND(s + len); +@@ -429,6 +445,8 @@ + return i; + } + ++#endif ++ + /* + * skey_authenticate() + * +@@ -438,22 +456,22 @@ + * Returns: 0 success, -1 failure + * + */ +-int +-skey_authenticate(username) +- char *username; ++int skey_authenticate(const char *username) + { + int i; ++ char pbuf[SKEY_MAX_PW_LEN+1], skeyprompt[SKEY_MAX_CHALLENGE+1]; ++ struct skey skey; ++#if DO_FAKE_CHALLENGE + u_int ptr; + u_char hseed[SKEY_MAX_SEED_LEN], flg = 1, *up; +- char pbuf[SKEY_MAX_PW_LEN+1], skeyprompt[SKEY_MAX_CHALLENGE+1]; +- char *secret; + size_t secretlen; +- struct skey skey; + SHA1_CTX ctx; +- ++#endif ++ + /* Attempt an S/Key challenge */ +- i = skeychallenge(&skey, username, skeyprompt); ++ i = skeychallenge(&skey, username, skeyprompt, sizeof skeyprompt); + ++#if DO_FAKE_CHALLENGE + /* Cons up a fake prompt if no entry in keys file */ + if (i != 0) { + char *p, *u; +@@ -465,11 +483,11 @@ + if (gethostname(pbuf, sizeof(pbuf)) == -1) + *(p = pbuf) = '.'; + else +- for (p = pbuf; *p && isalnum(*p); p++) +- if (isalpha(*p) && isupper(*p)) +- *p = tolower(*p); ++ for (p = pbuf; *p && isalnum((u_char)*p); p++) ++ if (isalpha((u_char)*p) && isupper((u_char)*p)) ++ *p = tolower((u_char)*p); + if (*p && pbuf - p < 4) +- (void)strncpy(p, "asjd", 4 - (pbuf - p)); ++ strncpy(p, "asjd", 4 - (pbuf - p)); + pbuf[4] = '\0'; + + /* Hash the username if possible */ +@@ -490,6 +508,7 @@ + SEEK_SET) != -1 && read(fd, hseed, + SKEY_MAX_SEED_LEN) == SKEY_MAX_SEED_LEN) { + close(fd); ++ fd = -1; + secret = hseed; + secretlen = SKEY_MAX_SEED_LEN; + flg = 0; +@@ -499,6 +518,8 @@ + secretlen = strlen(secret); + flg = 0; + } ++ if (fd != -1) ++ close(fd); + } + + /* Put that in your pipe and smoke it */ +@@ -531,7 +552,7 @@ + memset(up, 0, 20); /* SHA1 specific */ + free(up); + +- (void)sprintf(skeyprompt, ++ sprintf(skeyprompt, + "otp-%.*s %d %.*s", + SKEY_MAX_HASHNAME_LEN, + skey_get_algorithm(), +@@ -554,29 +575,30 @@ + } while (--i != 0); + pbuf[12] = '\0'; + +- (void)sprintf(skeyprompt, "otp-%.*s %d %.*s", ++ sprintf(skeyprompt, "otp-%.*s %d %.*s", + SKEY_MAX_HASHNAME_LEN, + skey_get_algorithm(), + 99, SKEY_MAX_SEED_LEN, pbuf); + } + } ++#endif + +- (void)fprintf(stderr, "%s\n", skeyprompt); +- (void)fflush(stderr); ++ fprintf(stderr, "[%s]\n", skeyprompt); ++ fflush(stderr); + +- (void)fputs("Response: ", stderr); ++ fputs("Response: ", stderr); + readskey(pbuf, sizeof(pbuf)); + + /* Is it a valid response? */ + if (i == 0 && skeyverify(&skey, pbuf) == 0) { + if (skey.n < 5) { +- (void)fprintf(stderr, ++ fprintf(stderr, + "\nWarning! Key initialization needed soon. (%d logins left)\n", + skey.n); + } +- return(0); ++ return 0; + } +- return(-1); ++ return -1; + } + + /* Comment out user's entry in the s/key database +@@ -587,22 +609,21 @@ + * + * The database file is always closed by this call. + */ +-int +-skeyzero(mp, response) +- struct skey *mp; +- char *response; ++int skeyzero(struct skey *mp, char *response) + { + /* + * Seek to the right place and write comment character + * which effectively zero's out the entry. + */ +- (void)fseek(mp->keyfile, mp->recstart, SEEK_SET); ++ fseek(mp->keyfile, mp->recstart, SEEK_SET); + if (fputc('#', mp->keyfile) == EOF) { + fclose(mp->keyfile); +- return(-1); ++ mp->keyfile = NULL; ++ return -1; + } + +- (void)fclose(mp->keyfile); ++ fclose(mp->keyfile); ++ mp->keyfile = NULL; + +- return(0); ++ return 0; + } +diff -ruN skey-1.1.5.orig/skeyprune.8 skey-1.1.5/skeyprune.8 +--- skey-1.1.5.orig/skeyprune.8 2001-05-10 17:10:49.000000000 +0100 ++++ skey-1.1.5/skeyprune.8 2003-11-06 17:46:45.000000000 +0000 +@@ -13,7 +13,7 @@ + .Sh DESCRIPTION + .Nm skeyprune + searches through the file +-.Dq Pa /etc/skeykeys ++.Dq Pa /etc/skey/skeykeys + and prunes out users who have zeroed their entries via + .Xr skeyinit 1 + as well as entries that have not been modified in +@@ -22,8 +22,8 @@ + .Ar days + is not specified only commented out entries are pruned. + .Sh FILES +-.Bl -tag -width /etc/skeykeys -compact +-.It Pa /etc/skeykeys ++.Bl -tag -width /etc/skey/skeykeys -compact ++.It Pa /etc/skey/skeykeys + S/Key key information database + .El + .Sh SEE ALSO +@@ -33,7 +33,7 @@ + Since + .Nm skeyprune + rewrites +-.Dq Pa /etc/skeykeys , ++.Dq Pa /etc/skey/skeykeys , + there is a window where S/Key changes could get lost. + It is therefore suggested that + .Nm skeyprune +diff -ruN skey-1.1.5.orig/skeysubr.c skey-1.1.5/skeysubr.c +--- skey-1.1.5.orig/skeysubr.c 2001-05-10 17:10:49.000000000 +0100 ++++ skey-1.1.5/skeysubr.c 2003-11-06 17:46:45.000000000 +0000 +@@ -40,30 +40,26 @@ + #else + #include "sha1.h" + #endif +-#ifdef HAVE_RMD160_H +-#include +-#else +-#include "rmd160.h" +-#endif + + #include "skey.h" + + /* Default hash function to use (index into skey_hash_types array) */ + #ifndef SKEY_HASH_DEFAULT +-#define SKEY_HASH_DEFAULT 1 ++#define SKEY_HASH_DEFAULT 0 /*MD4*/ + #endif + +-static void f_md4 __P((char *x)); +-static void f_md5 __P((char *x)); +-static void f_sha1 __P((char *x)); +-static void f_rmd160 __P((char *x)); +-static int keycrunch_md4 __P((char *result, char *seed, char *passwd)); +-static int keycrunch_md5 __P((char *result, char *seed, char *passwd)); +-static int keycrunch_sha1 __P((char *result, char *seed, char *passwd)); +-static int keycrunch_rmd160 __P((char *result, char *seed, char *passwd)); +-static void lowcase __P((char *s)); +-static void skey_echo __P((int action)); +-static void trapped __P((int sig)); ++static void f_md4 __P((char *)); ++static void f_md5 __P((char *)); ++static void f_sha1 __P((char *)); ++/* static void f_rmd160 __P((char *x)); */ ++static int keycrunch_md4 __P((char *, const char *, const char *)); ++static int keycrunch_md5 __P((char *, const char *, const char *)); ++static int keycrunch_sha1 __P((char *, const char *, const char *)); ++/* static int keycrunch_rmd160 __P((char *result, char *seed, char *passwd)); */ ++static void lowcase __P((char *)); ++static void skey_echo __P((int)); ++static void trapped __P((int)); ++static char *mkseedpassword(const char *, const char *, size_t *); + + /* Current hash type (index into skey_hash_types array) */ + static int skey_hash_type = SKEY_HASH_DEFAULT; +@@ -72,17 +68,16 @@ + * Hash types we support. + * Each has an associated keycrunch() and f() function. + */ +-#define SKEY_ALGORITH_LAST 4 + struct skey_algorithm_table { + const char *name; +- int (*keycrunch) (char *, char *, char *); +- void (*f) (char *); ++ int (*keycrunch) __P((char *, const char *, const char *)); ++ void (*f) __P((char *)); + }; + static struct skey_algorithm_table skey_algorithm_table[] = { + { "md4", keycrunch_md4, f_md4 }, + { "md5", keycrunch_md5, f_md5 }, + { "sha1", keycrunch_sha1, f_sha1 }, +- { "rmd160", keycrunch_rmd160, f_rmd160 } ++ { NULL } + }; + + +@@ -91,242 +86,172 @@ + * concatenate the seed and the password, run through MD4/5 and + * collapse to 64 bits. This is defined as the user's starting key. + */ +-int +-keycrunch(result, seed, passwd) +- char *result; /* SKEY_BINKEY_SIZE result */ +- char *seed; /* Seed, any length */ +- char *passwd; /* Password, any length */ ++int keycrunch(char *result, const char *seed, const char *passwd) + { + return(skey_algorithm_table[skey_hash_type].keycrunch(result, seed, passwd)); + } + +-static int +-keycrunch_md4(result, seed, passwd) +- char *result; /* SKEY_BINKEY_SIZE result */ +- char *seed; /* Seed, any length */ +- char *passwd; /* Password, any length */ ++static char *mkseedpassword(const char *seed, const char *passwd, size_t *buflen) + { + char *buf; +- MD4_CTX md; +- u_int32_t results[4]; +- unsigned int buflen; + +- buflen = strlen(seed) + strlen(passwd); +- if ((buf = (char *)malloc(buflen+1)) == NULL) +- return(-1); +- (void)strcpy(buf, seed); ++ *buflen = strlen(seed) + strlen(passwd); ++ if ((buf = (char *) malloc(*buflen + 1)) == NULL) ++ return NULL; ++ strcpy(buf, seed); + lowcase(buf); +- (void)strcat(buf, passwd); ++ strcat(buf, passwd); ++ sevenbit(buf); ++ ++ return buf; ++} + ++static int keycrunch_md4(char *result, const char *seed, const char *passwd) ++{ ++ char *buf; ++ MD4_CTX md; ++ size_t buflen; ++ u_int32_t results[4]; ++ ++ if ((buf = mkseedpassword(seed, passwd, &buflen)) == NULL) ++ return -1; ++ + /* Crunch the key through MD4 */ +- sevenbit(buf); + MD4Init(&md); + MD4Update(&md, (unsigned char *)buf, buflen); +- MD4Final((unsigned char *)results, &md); +- (void)free(buf); ++ MD4Final((unsigned char *) (void *) results, &md); ++ free(buf); + + /* Fold result from 128 to 64 bits */ + results[0] ^= results[2]; + results[1] ^= results[3]; + +- (void)memcpy((void *)result, (void *)results, SKEY_BINKEY_SIZE); ++ memcpy(result, results, SKEY_BINKEY_SIZE); + +- return(0); ++ return 0; + } + +-static int +-keycrunch_md5(result, seed, passwd) +- char *result; /* SKEY_BINKEY_SIZE result */ +- char *seed; /* Seed, any length */ +- char *passwd; /* Password, any length */ ++static int keycrunch_md5(char *result, const char *seed, const char *passwd) + { + char *buf; + MD5_CTX md; + u_int32_t results[4]; +- unsigned int buflen; ++ size_t buflen; + +- buflen = strlen(seed) + strlen(passwd); +- if ((buf = (char *)malloc(buflen+1)) == NULL) +- return(-1); +- (void)strcpy(buf, seed); +- lowcase(buf); +- (void)strcat(buf, passwd); ++ if ((buf = mkseedpassword(seed, passwd, &buflen)) == NULL) ++ return -1; + + /* Crunch the key through MD5 */ +- sevenbit(buf); + MD5Init(&md); + MD5Update(&md, (unsigned char *)buf, buflen); +- MD5Final((unsigned char *)results, &md); +- (void)free(buf); ++ MD5Final((unsigned char *) (void *)results, &md); ++ free(buf); + + /* Fold result from 128 to 64 bits */ + results[0] ^= results[2]; + results[1] ^= results[3]; + +- (void)memcpy((void *)result, (void *)results, SKEY_BINKEY_SIZE); ++ memcpy((void *)result, (void *)results, SKEY_BINKEY_SIZE); + + return(0); + } + +-static int +-keycrunch_sha1(result, seed, passwd) +- char *result; /* SKEY_BINKEY_SIZE result */ +- char *seed; /* Seed, any length */ +- char *passwd; /* Password, any length */ ++static int keycrunch_sha1(char *result, const char *seed, const char *passwd) + { + char *buf; + SHA1_CTX sha; +- u_int32_t results[5]; +- unsigned int buflen; +- +- buflen = strlen(seed) + strlen(passwd); +- if ((buf = (char *)malloc(buflen+1)) == NULL) +- return(-1); +- (void)strcpy(buf, seed); +- lowcase(buf); +- (void)strcat(buf, passwd); ++ size_t buflen; ++ int i, j; + ++ if ((buf = mkseedpassword(seed, passwd, &buflen)) == NULL) ++ return -1; ++ + /* Crunch the key through SHA1 */ +- sevenbit(buf); + SHA1Init(&sha); + SHA1Update(&sha, (unsigned char *)buf, buflen); +- SHA1Final((unsigned char *)results, &sha); +- (void)free(buf); ++ SHA1Final(NULL, &sha); ++ free(buf); + + /* Fold 160 to 64 bits */ +- results[0] ^= results[2]; +- results[1] ^= results[3]; +- results[0] ^= results[4]; +- +- (void)memcpy((void *)result, (void *)results, SKEY_BINKEY_SIZE); +- +- return(0); +-} +- +-static int +-keycrunch_rmd160(result, seed, passwd) +- char *result; /* SKEY_BINKEY_SIZE result */ +- char *seed; /* Seed, any length */ +- char *passwd; /* Password, any length */ +-{ +- char *buf; +- RMD160_CTX rmd; +- u_int32_t results[5]; +- unsigned int buflen; +- +- buflen = strlen(seed) + strlen(passwd); +- if ((buf = (char *)malloc(buflen+1)) == NULL) +- return(-1); +- (void)strcpy(buf, seed); +- lowcase(buf); +- (void)strcat(buf, passwd); +- +- /* Crunch the key through RMD-160 */ +- sevenbit(buf); +- RMD160Init(&rmd); +- RMD160Update(&rmd, (unsigned char *)buf, buflen); +- RMD160Final((unsigned char *)results, &rmd); +- (void)free(buf); +- +- /* Fold 160 to 64 bits */ +- results[0] ^= results[2]; +- results[1] ^= results[3]; +- results[0] ^= results[4]; +- +- (void)memcpy((void *)result, (void *)results, SKEY_BINKEY_SIZE); ++ sha.state[0] ^= sha.state[2]; ++ sha.state[1] ^= sha.state[3]; ++ sha.state[0] ^= sha.state[4]; ++ ++ for (i=j=0; j<8; i++, j+=4) { ++ result[j] = (unsigned char)(sha.state[i] & 0xff); ++ result[j+1] = (unsigned char)((sha.state[i] >> 8) & 0xff); ++ result[j+2] = (unsigned char)((sha.state[i] >> 16) & 0xff); ++ result[j+3] = (unsigned char)((sha.state[i] >> 24) & 0xff); ++ } + +- return(0); ++ return 0; + } + + /* + * The one-way function f(). + * Takes SKEY_BINKEY_SIZE bytes and returns SKEY_BINKEY_SIZE bytes in place. + */ +-void +-f(x) +- char *x; ++void f(char *x) + { + skey_algorithm_table[skey_hash_type].f(x); + } + +-static void +-f_md4(x) +- char *x; ++static void f_md4(char *x) + { + MD4_CTX md; + u_int32_t results[4]; + + MD4Init(&md); + MD4Update(&md, (unsigned char *)x, SKEY_BINKEY_SIZE); +- MD4Final((unsigned char *)results, &md); ++ MD4Final((unsigned char *) (void *) results, &md); + + /* Fold 128 to 64 bits */ + results[0] ^= results[2]; + results[1] ^= results[3]; + +- (void)memcpy((void *)x, (void *)results, SKEY_BINKEY_SIZE); ++ memcpy(x, results, SKEY_BINKEY_SIZE); + } + +-static void +-f_md5(x) +- char *x; ++static void f_md5(char *x) + { + MD5_CTX md; + u_int32_t results[4]; + + MD5Init(&md); + MD5Update(&md, (unsigned char *)x, SKEY_BINKEY_SIZE); +- MD5Final((unsigned char *)results, &md); ++ MD5Final((unsigned char *) (void *) results, &md); + + /* Fold 128 to 64 bits */ + results[0] ^= results[2]; + results[1] ^= results[3]; + +- (void)memcpy((void *)x, (void *)results, SKEY_BINKEY_SIZE); ++ memcpy((void *)x, (void *)results, SKEY_BINKEY_SIZE); + } + +-static void +-f_sha1(x) +- char *x; ++static void f_sha1(char *x) + { + SHA1_CTX sha; +- u_int32_t results[5]; ++ int i, j; + + SHA1Init(&sha); + SHA1Update(&sha, (unsigned char *)x, SKEY_BINKEY_SIZE); +- SHA1Final((unsigned char *)results, &sha); ++ SHA1Final(NULL, &sha); + + /* Fold 160 to 64 bits */ +- results[0] ^= results[2]; +- results[1] ^= results[3]; +- results[0] ^= results[4]; +- +- (void)memcpy((void *)x, (void *)results, SKEY_BINKEY_SIZE); +-} +- +-static void +-f_rmd160(x) +- char *x; +-{ +- RMD160_CTX rmd; +- u_int32_t results[5]; +- +- RMD160Init(&rmd); +- RMD160Update(&rmd, (unsigned char *)x, SKEY_BINKEY_SIZE); +- RMD160Final((unsigned char *)results, &rmd); +- +- /* Fold 160 to 64 bits */ +- results[0] ^= results[2]; +- results[1] ^= results[3]; +- results[0] ^= results[4]; +- +- (void)memcpy((void *)x, (void *)results, SKEY_BINKEY_SIZE); ++ sha.state[0] ^= sha.state[2]; ++ sha.state[1] ^= sha.state[3]; ++ sha.state[0] ^= sha.state[4]; ++ ++ for (i=j=0; j<8; i++, j+=4) { ++ x[j] = (unsigned char)(sha.state[i] & 0xff); ++ x[j+1] = (unsigned char)((sha.state[i] >> 8) & 0xff); ++ x[j+2] = (unsigned char)((sha.state[i] >> 16) & 0xff); ++ x[j+3] = (unsigned char)((sha.state[i] >> 24) & 0xff); ++ } + } + + /* Strip trailing cr/lf from a line of text */ +-void +-rip(buf) +- char *buf; ++void rip(char *buf) + { + buf += strcspn(buf, "\r\n"); + +@@ -335,12 +260,9 @@ + } + + /* Read in secret password (turns off echo) */ +-char * +-readpass(buf, n) +- char *buf; +- int n; ++char *readpass(char *buf, int n) + { +- void (*old_handler) (); ++ void *old_handler; + + /* Turn off echoing */ + skey_echo(0); +@@ -348,131 +270,114 @@ + /* Catch SIGINT and save old signal handler */ + old_handler = signal(SIGINT, trapped); + +- (void)fgets(buf, n, stdin); ++ fgets(buf, n, stdin); + rip(buf); + +- (void)putc('\n', stderr); +- (void)fflush(stderr); ++ putc('\n', stderr); ++ fflush(stderr); + + /* Restore signal handler and turn echo back on */ + if (old_handler != SIG_ERR) +- (void)signal(SIGINT, old_handler); ++ signal(SIGINT, old_handler); + skey_echo(1); + + sevenbit(buf); + +- return(buf); ++ return buf; + } + + /* Read in an s/key OTP (does not turn off echo) */ +-char * +-readskey(buf, n) +- char *buf; +- int n; ++char *readskey(char *buf, int n) + { +- (void)fgets(buf, n, stdin); ++ fgets(buf, n, stdin); + rip(buf); + + sevenbit(buf); + +- return(buf); ++ return buf; + } + + /* Signal handler for trapping ^C */ +-static void +-trapped(sig) +- int sig; ++static void trapped(int sig) + { +- (void)fputs("^C\n", stderr); +- (void)fflush(stderr); ++ fputs("^C\n", stderr); ++ fflush(stderr); + +- /* Turn on echo if necesary */ ++ /* Turn on echo if necemassary */ + skey_echo(1); + +- exit(-1); ++ exit(1); + } + + /* + * Convert 8-byte hex-ascii string to binary array + * Returns 0 on success, -1 on error + */ +-int +-atob8(out, in) +- register char *out; +- register char *in; ++int atob8(char *out, const char *in) + { +- register int i; +- register int val; ++ int i; ++ int val; + + if (in == NULL || out == NULL) +- return(-1); ++ return -1; + + for (i=0; i < 8; i++) { + if ((in = skipspace(in)) == NULL) +- return(-1); ++ return -1; + if ((val = htoi(*in++)) == -1) +- return(-1); ++ return -1; + *out = val << 4; + + if ((in = skipspace(in)) == NULL) +- return(-1); ++ return -1; + if ((val = htoi(*in++)) == -1) +- return(-1); ++ return -1; + *out++ |= val; + } +- return(0); ++ return 0; + } + + /* Convert 8-byte binary array to hex-ascii string */ +-int +-btoa8(out, in) +- register char *out; +- register char *in; ++int btoa8(char *out, const char *in) + { +- register int i; ++ int i; + + if (in == NULL || out == NULL) +- return(-1); ++ return -1; + + for (i=0; i < 8; i++) { +- (void)sprintf(out, "%02x", *in++ & 0xff); ++ sprintf(out, "%02x", *in++ & 0xff); + out += 2; + } +- return(0); ++ return 0; + } + + /* Convert hex digit to binary integer */ +-int +-htoi(c) +- register int c; ++int htoi(int c) + { + if ('0' <= c && c <= '9') +- return(c - '0'); ++ return c - '0'; + if ('a' <= c && c <= 'f') +- return(10 + c - 'a'); ++ return 10 + c - 'a'; + if ('A' <= c && c <= 'F') +- return(10 + c - 'A'); +- return(-1); ++ return 10 + c - 'A'; ++ return -1; + } + + /* Skip leading spaces from the string */ +-char * +-skipspace(cp) +- register char *cp; ++const char *skipspace(const char *cp) + { + while (*cp == ' ' || *cp == '\t') + cp++; + + if (*cp == '\0') +- return(NULL); ++ return NULL; + else +- return(cp); ++ return cp; + } + + /* Remove backspaced over characters from the string */ +-void +-backspace(buf) +- char *buf; ++void backspace(char *buf) + { + char bs = 0x8; + char *cp = buf; +@@ -496,77 +401,68 @@ + } + + /* Make sure line is all seven bits */ +-void +-sevenbit(s) +- char *s; ++void sevenbit(char *s) + { + while (*s) + *s++ &= 0x7f; + } + + /* Set hash algorithm type */ +-char * +-skey_set_algorithm(new) +- char *new; ++const char *skey_set_algorithm(const char *new) + { + int i; + +- for (i = 0; i < SKEY_ALGORITH_LAST; i++) { ++ for (i = 0; skey_algorithm_table[i].name; i++) { + if (strcmp(new, skey_algorithm_table[i].name) == 0) { + skey_hash_type = i; +- return(new); ++ return new; + } + } + +- return(NULL); ++ return NULL; + } + + /* Get current hash type */ +-const char * +-skey_get_algorithm() ++const char *skey_get_algorithm() + { + return(skey_algorithm_table[skey_hash_type].name); + } + + /* Turn echo on/off */ +-static void +-skey_echo(action) +- int action; ++static void skey_echo(int action) + { + static struct termios term; + static int echo = 0; + + if (action == 0) { + /* Turn echo off */ +- (void) tcgetattr(fileno(stdin), &term); ++ tcgetattr(fileno(stdin), &term); + if ((echo = (term.c_lflag & ECHO))) { + term.c_lflag &= ~ECHO; + #ifdef TCSASOFT +- (void) tcsetattr(fileno(stdin), TCSAFLUSH|TCSASOFT, &term); ++ tcsetattr(fileno(stdin), TCSAFLUSH|TCSASOFT, &term); + #else +- (void) tcsetattr(fileno(stdin), TCSAFLUSH, &term); ++ tcsetattr(fileno(stdin), TCSAFLUSH, &term); + #endif + } + } else if (action && echo) { + /* Turn echo on */ + term.c_lflag |= ECHO; + #ifdef TCSASOFT +- (void) tcsetattr(fileno(stdin), TCSAFLUSH|TCSASOFT, &term); ++ tcsetattr(fileno(stdin), TCSAFLUSH|TCSASOFT, &term); + #else +- (void) tcsetattr(fileno(stdin), TCSAFLUSH, &term); ++ tcsetattr(fileno(stdin), TCSAFLUSH, &term); + #endif + echo = 0; + } + } + + /* Convert string to lower case */ +-static void +-lowcase(s) +- char *s; ++static void lowcase(char *s) + { +- char *p; ++ u_char *p; + +- for (p = s; *p; p++) ++ for (p = (u_char *) s; *p; p++) + if (isupper(*p)) + *p = tolower(*p); + } +diff -ruN skey-1.1.5.orig/strlcpy.c skey-1.1.5/strlcpy.c +--- skey-1.1.5.orig/strlcpy.c 2001-05-10 17:10:49.000000000 +0100 ++++ skey-1.1.5/strlcpy.c 1970-01-01 01:00:00.000000000 +0100 +@@ -1,72 +0,0 @@ +-/* $OpenBSD: strlcpy.c,v 1.4 1999/05/01 18:56:41 millert Exp $ */ +- +-/* +- * Copyright (c) 1998 Todd C. Miller +- * 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. The name of the author may not be used to endorse or promote products +- * derived from this software without specific prior written permission. +- * +- * THIS SOFTWARE IS PROVIDED ``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 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. +- */ +-#include "config.h" +-#ifndef HAVE_STRLCPY +- +-#if defined(LIBC_SCCS) && !defined(lint) +-static char *rcsid = "$OpenBSD: strlcpy.c,v 1.4 1999/05/01 18:56:41 millert Exp $"; +-#endif /* LIBC_SCCS and not lint */ +- +-#include +-#include +- +-/* +- * Copy src to string dst of size siz. At most siz-1 characters +- * will be copied. Always NUL terminates (unless siz == 0). +- * Returns strlen(src); if retval >= siz, truncation occurred. +- */ +-size_t strlcpy(dst, src, siz) +- char *dst; +- const char *src; +- size_t siz; +-{ +- register char *d = dst; +- register const char *s = src; +- register size_t n = siz; +- +- /* Copy as many bytes as will fit */ +- if (n != 0 && --n != 0) { +- do { +- if ((*d++ = *s++) == 0) +- break; +- } while (--n != 0); +- } +- +- /* Not enough room in dst, add NUL and traverse rest of src */ +- if (n == 0) { +- if (siz != 0) +- *d = '\0'; /* NUL-terminate dst */ +- while (*s++) +- ; +- } +- +- return(s - src - 1); /* count does not include NUL */ +-} +- +-#endif diff --git a/util/crypt/skey/files/skey-1.1.5-otp.diff b/util/crypt/skey/files/skey-1.1.5-otp.diff new file mode 100644 index 0000000000..33c9b3dbac --- /dev/null +++ b/util/crypt/skey/files/skey-1.1.5-otp.diff @@ -0,0 +1,59 @@ +diff -Nur skey-1.1.5.orig/skey.c skey-1.1.5/skey.c +--- skey-1.1.5.orig/skey.c 2004-11-12 23:09:02.382529123 +0100 ++++ skey-1.1.5/skey.c 2004-11-12 23:23:09.864378849 +0100 +@@ -46,6 +46,17 @@ + char passwd[SKEY_MAX_PW_LEN+1], key[SKEY_BINKEY_SIZE]; + char buf[33], *seed, *slash, *t; + ++ /* If we were called as otp-METHOD, set algorithm based on that */ ++ if ((slash = strrchr(argv[0], '/'))) ++ slash++; ++ else ++ slash = argv[0]; ++ if (strncmp(slash, "otp-", 4) == 0) { ++ slash += 4; ++ if (skey_set_algorithm(slash) == NULL) ++ errx(1, "Unknown hash algorithm %s", slash); ++ } ++ + while ((i = getopt(argc, argv, "fn:p:t:x")) != -1) { + switch(i) { + case 'f': +diff -Nur skey-1.1.5.orig/skey.1 skey-1.1.5/skey.1 +--- skey-1.1.5.orig/skey.1 2004-11-12 23:09:02.375530148 +0100 ++++ skey-1.1.5/skey.1 2004-11-12 23:41:43.298268426 +0100 +@@ -6,7 +6,7 @@ + .Dt SKEY 1 + .Os + .Sh NAME +-.Nm skey ++.Nm skey, otp-md4, otp-md5, otp-sha1 + .Nd respond to an OTP challenge + .Sh SYNOPSIS + .Nm +@@ -27,13 +27,24 @@ + .Pp + .Em S/Key + uses 64 bits of information, transformed by the +-.Tn MD4 ++.Tn MD5 + algorithm into 6 English words. + The user supplies the words to authenticate himself to programs like + .Xr login 1 + or + .Xr ftpd 8 . + .Pp ++When ++.Nm skey ++is invoked as ++.Nm otp-method , ++.Nm skey ++will use ++.Ar method ++as the hash function where ++.Ar method ++is currently one of md4, md5, or sha1. ++.Pp + Example use of the + .Em S/Key + program diff --git a/util/crypt/skey/files/skey-login_name_max.diff b/util/crypt/skey/files/skey-login_name_max.diff new file mode 100644 index 0000000000..b9725aa0cc --- /dev/null +++ b/util/crypt/skey/files/skey-login_name_max.diff @@ -0,0 +1,15 @@ +diff -ruN skey-1.1.5.orig/skeyinit.c skey-1.1.5/skeyinit.c +--- skey-1.1.5.orig/skeyinit.c 2003-11-12 21:26:49.000000000 +0000 ++++ skey-1.1.5/skeyinit.c 2003-11-12 21:28:24.000000000 +0000 +@@ -62,6 +62,11 @@ + #define SKEY_NAMELEN 4 + #endif + ++/* #33315 */ ++#ifndef LOGIN_NAME_MAX ++#define LOGIN_NAME_MAX 256 ++#endif ++ + int main __P((int, char **)); + + int main(int argc, char **argv) diff --git a/util/crypt/skey/files/zeroed_entries.patch b/util/crypt/skey/files/zeroed_entries.patch new file mode 100644 index 0000000000..d26e5e978d --- /dev/null +++ b/util/crypt/skey/files/zeroed_entries.patch @@ -0,0 +1,12 @@ +diff -Nur skey-1.1.5-old//skeyprune.pl skey-1.1.5/skeyprune.pl +--- skey-1.1.5-old//skeyprune.pl 2010-09-12 15:07:36.778000090 +0300 ++++ skey-1.1.5/skeyprune.pl 2010-09-12 15:08:05.152998914 +0300 +@@ -37,7 +37,7 @@ + + while () { + # Ignore commented out entries +- if ( ! /^#[^\s#]+\s+(MD[0-9]+\s+)?[0-9]+\s+[A-z0-9_-]+\s+[a-f0-9]+\s+(Jan|Feb|Mar|Apr|May|Ju[nl]|Aug|Sep|Oct|Nov|Dec)\s+[0-9]+,\s*[0-9]+\s+[0-9]+:[0-9]+:[0-9]+$/ ) { ++ if ( ! /^#[^\s#]+\s+(MD[0-9]+\s+)?[0-9]+\s+[A-z0-9_-]+\s+[a-f0-9]+\s+(Jan|Feb|Mar|Apr|May|Ju[nl]|Aug|Sep|Oct|Nov|Dec)\s+[0-9]+,\s*[0-9]+\s+[0-9]+:[0-9]+:[0-9]+$/i ) { + /((Jan|Feb|Mar|Apr|May|Ju[nl]|Aug|Sep|Oct|Nov|Dec)\s+[0-9]+,\s*[0-9]+\s+[0-9]+:[0-9]+:[0-9]+)$/; + + # Prune out old entries if asked to diff --git a/util/crypt/skey/pspec.xml b/util/crypt/skey/pspec.xml new file mode 100644 index 0000000000..4a8862ad44 --- /dev/null +++ b/util/crypt/skey/pspec.xml @@ -0,0 +1,107 @@ + + + + + skey + http://www.openbsd.org/faq/faq8.html#SKey + + PisiLinux Community + admins@pisilinux.org + + BSD + app:console + library + Linux Port of OpenBSD Single-key Password System + skey is an S/Key implementation ported from OpenBSD. S/Key provides One Time Password functionality, and can be used to increase system security. + http://source.pisilinux.org/1.0/skey-1.1.5.tar.bz2 + + cracklib-devel + zlib-devel + perl + + + + skey-1.1.5-gentoo.diff + + + skey-login_name_max.diff + + + skey-1.1.5-fPIC.patch + skey-1.1.5-bind-now.patch + + + skey-1.1.5-otp.diff + + + skey-1.1.5-binary-search.patch + + + confdir.patch + + + zeroed_entries.patch + + + default_hash.patch + + + fix_library_info.patch + + + + + skey + + cracklib + zlib + + + /etc/skey + /lib + /usr/bin + /usr/lib + /usr/sbin + /usr/share/doc/skey + /usr/share/man + + + + + skey-devel + system.devel + Development files for skey + + skey + + + /usr/include + /usr/share/man/man3 + + + + + + 2014-05-21 + 1.1.5 + Rebuild. + Ertuğrul Erata + ertugrulerata@gmail.com + + + 2014-05-11 + 1.1.5 + Release bump. + Marcin Bojara + marcin@pisilinux.org + + + 2010-10-11 + 1.1.5 + First release + Pisi Linux Admins + admins@pisilinux.org + + + diff --git a/util/crypt/skey/translations.xml b/util/crypt/skey/translations.xml new file mode 100644 index 0000000000..ee7b155f9c --- /dev/null +++ b/util/crypt/skey/translations.xml @@ -0,0 +1,13 @@ + + + + skey + Linux için OpenBSD tek anahtarlı parola sistemi + skey, OpenBSD'den Linux'a aktarılan S/Key sistemidir. S/Key sistemi Tek Seferlik Parola özelilği ile sistem güvenliğini arttırmak için kullanılabilir. + + + + skey-devel + skey için geliştirme dosyaları + + From 5d22bb0a7a7f0010a86b8c7dceabe81a5cf64788 Mon Sep 17 00:00:00 2001 From: burakerturk Date: Thu, 16 Jul 2015 02:50:18 +0300 Subject: [PATCH 4/4] rsync add rep --- network/share/component.xml | 3 ++ network/share/rsync/actions.py | 25 +++++++++ network/share/rsync/comar/service.py | 22 ++++++++ network/share/rsync/files/rsyncd.conf | 23 +++++++++ network/share/rsync/files/rsyncd.conf.d | 3 ++ network/share/rsync/pspec.xml | 66 ++++++++++++++++++++++++ network/share/rsync/translations.xml | 8 +++ pisi-index.xml | 66 ++++++++++++++++++++++++ pisi-index.xml.sha1sum | 2 +- pisi-index.xml.xz | Bin 148236 -> 148520 bytes pisi-index.xml.xz.sha1sum | 2 +- 11 files changed, 218 insertions(+), 2 deletions(-) create mode 100644 network/share/component.xml create mode 100644 network/share/rsync/actions.py create mode 100644 network/share/rsync/comar/service.py create mode 100644 network/share/rsync/files/rsyncd.conf create mode 100644 network/share/rsync/files/rsyncd.conf.d create mode 100644 network/share/rsync/pspec.xml create mode 100644 network/share/rsync/translations.xml diff --git a/network/share/component.xml b/network/share/component.xml new file mode 100644 index 0000000000..e20544ff2e --- /dev/null +++ b/network/share/component.xml @@ -0,0 +1,3 @@ + + network.share + diff --git a/network/share/rsync/actions.py b/network/share/rsync/actions.py new file mode 100644 index 0000000000..4720897073 --- /dev/null +++ b/network/share/rsync/actions.py @@ -0,0 +1,25 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import autotools +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +WorkDir="rsync-%s" % get.srcVERSION().replace('_','') + +def setup(): + autotools.configure("--without-included-zlib") + +def build(): + autotools.make() + +def check(): + autotools.make("check") + +def install(): + autotools.rawInstall("DESTDIR=%s" % get.installDIR()) + + pisitools.dodoc("NEWS","README","TODO") diff --git a/network/share/rsync/comar/service.py b/network/share/rsync/comar/service.py new file mode 100644 index 0000000000..17e112df25 --- /dev/null +++ b/network/share/rsync/comar/service.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +serviceType = "server" +serviceDesc = _({"en": "RSync Daemon", + "tr": "RSync Servisi"}) +serviceConf = "rsyncd" + +from comar.service import * + +@synchronized +def start(): + startService(command="/usr/bin/rsync", + args="--daemon %s" % config.get("RSYNC_OPTS", ""), + pidfile="/run/rsyncd.pid", + donotify=True) + +@synchronized +def stop(): + stopService(pidfile="/run/rsyncd.pid", + donotify=True) + +def status(): + return isServiceRunning("/run/rsyncd.pid") diff --git a/network/share/rsync/files/rsyncd.conf b/network/share/rsync/files/rsyncd.conf new file mode 100644 index 0000000000..bfd0107e54 --- /dev/null +++ b/network/share/rsync/files/rsyncd.conf @@ -0,0 +1,23 @@ +# Minimal configuration file for rsync daemon +# See rsync(1) and rsyncd.conf(5) man pages for help + +pid file = /run/rsyncd.pid +use chroot = yes +read only = yes +uid = nobody +guid = nobody +#max connections = 5 +#syslog facility = local5 + +# Simple example for enabling your own local rsync server +#[ftp] +# path = /home/ftp +# comment = FTP +# exclude = /pub +# hosts deny = 192.168.3.0/255.255.255.0 + +#[restricted] +# path = /home/user/docs +# comment = My Documents +# hosts allow = 192.168.1.0/24, 10.10.1.1, alt.alanadi.net +# list = false diff --git a/network/share/rsync/files/rsyncd.conf.d b/network/share/rsync/files/rsyncd.conf.d new file mode 100644 index 0000000000..5e070a408b --- /dev/null +++ b/network/share/rsync/files/rsyncd.conf.d @@ -0,0 +1,3 @@ +# see man pages for rsync or run `rsync --help` +# for valid cmdline options +#RSYNC_OPTS="" diff --git a/network/share/rsync/pspec.xml b/network/share/rsync/pspec.xml new file mode 100644 index 0000000000..4fd244ce7b --- /dev/null +++ b/network/share/rsync/pspec.xml @@ -0,0 +1,66 @@ + + + + + rsync + http://rsync.samba.org/ + + PisiLinux Community + admins@pisilinux.org + + GPLv2 + service + app:console + File transfer program to keep local copies in sync with remote files + rsync is a tool to keep local copies of remote files in sync (i.e. make sure local files are exact copies of remote files). + http://rsync.samba.org/ftp/rsync/rsync-3.1.1.tar.gz + + + + rsync + + /usr/bin + /usr/share/doc + /usr/share/man + /etc + + + rsyncd.conf + rsyncd.conf.d + + + System.Service + + + + + + 2015-03-24 + 3.1.1 + Version bump. + Stefan Gronewold(groni) + groni@pisilinux.org + + + 2015-02-11 + 3.1.1 + Version bump. + Stefan Gronewold(groni) + groni@pisilinux.org + + + 2014-02-10 + 3.1.0 + Version bump. + Alihan Öztürk + alihan@pisilinux.org + + + 2012-09-05 + 3.0.9 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + diff --git a/network/share/rsync/translations.xml b/network/share/rsync/translations.xml new file mode 100644 index 0000000000..5db03f9158 --- /dev/null +++ b/network/share/rsync/translations.xml @@ -0,0 +1,8 @@ + + + + rsync + Dosya yedekleme ve eşleme uygulaması + rsync, uzaktaki dosyaları senkronize tutan bir dosya transfer uygulamasıdır. + + diff --git a/pisi-index.xml b/pisi-index.xml index 6f06b393c7..86fc83c50c 100644 --- a/pisi-index.xml +++ b/pisi-index.xml @@ -29010,6 +29010,72 @@ uses SIMD instructions (MMX, SSE2, etc.) to accelerate baseline JPEG compression + + + rsync + http://rsync.samba.org/ + + PisiLinux Community + admins@pisilinux.org + + GPLv2 + service + app:console + network.share + File transfer program to keep local copies in sync with remote files + Dosya yedekleme ve eşleme uygulaması + rsync is a tool to keep local copies of remote files in sync (i.e. make sure local files are exact copies of remote files). + rsync, uzaktaki dosyaları senkronize tutan bir dosya transfer uygulamasıdır. + http://rsync.samba.org/ftp/rsync/rsync-3.1.1.tar.gz + network/share/rsync/pspec.xml + + + rsync + + /usr/bin + /usr/share/doc + /usr/share/man + /etc + + + System.Service + + + rsyncd.conf + rsyncd.conf.d + + + + + 2015-03-24 + 3.1.1 + Version bump. + Stefan Gronewold(groni) + groni@pisilinux.org + + + 2015-02-11 + 3.1.1 + Version bump. + Stefan Gronewold(groni) + groni@pisilinux.org + + + 2014-02-10 + 3.1.0 + Version bump. + Alihan Öztürk + alihan@pisilinux.org + + + 2012-09-05 + 3.0.9 + First release + Osman Erkan + osman.erkan@pisilinux.org + + + asciidoc diff --git a/pisi-index.xml.sha1sum b/pisi-index.xml.sha1sum index a75622a04c..4e4abd5902 100644 --- a/pisi-index.xml.sha1sum +++ b/pisi-index.xml.sha1sum @@ -1 +1 @@ -e71d198707ff47d47ce52f748d0f840759c93459 \ No newline at end of file +018a52edec239077a8cd70e4be739d6d7d21b0ce \ No newline at end of file diff --git a/pisi-index.xml.xz b/pisi-index.xml.xz index 08a297de1fab5fece61419f0198fabfa79ea410d..b5e2bff5a332e55eec9e2439d4b29b419ea3cf88 100644 GIT binary patch delta 63153 zcmV(uK!G|oI z4o=K96bGvTU|OQTvssF~vXb!sQ%(tHa}9imCJUz$eEm)3*IH}0&c0>3x4! za4S;?8D2ny?CHF@Dks&us5z&C&=gU-%962_`VEGE*_^8fg0l#Ss>}O{_@f{cWf0NQ zJAHnG>~LVDg11ZwHDizsabO#D_0nlnb?YhcitmronwxQEa`x4rIFPbKTY%_tl&8fZ zs9|Y>ka(KNeO>ac4UrF;!_ECox($DG@fh^T^lkx5c=&j+5d`46R^JkQ;6k)rVAe2A zLc5;QiNC$H66)J+zW%66agf057X@F9H1TEH9l77dKtC7FnS_7U8VzX@E#bMRf;x^c zM&AEd@6dkBW@;MH)b;E5=k*R@Ga{_!hJogtn^~xjta3rV{k?^y{Q!EM=w^SAvc}cL z_!Gw8t_^!(3ra+o8AgzX&$$~Pjqjs$PT~-bjH#sU{wbT5q(|DuW`$eHocR%bBtOx* zuh6Ig0+!soM1Pv25)8c744asMt4d2arF*T}!{H`m1ZoDM+#0!DSv( zqX%GKv zd7{>|n`b01Quy+Fy)oWLJ*DlfuZLxU6`DW(- zx8+L)kQt3tNEHRTCM*iBU-n~2Z9xgYx;k)G0^c&A$HMT=QK=? zlJ_mfZ2=LoM+YVk2CTxw39S)UZTb@xfgK_?w83Pd1&yTnVOrFk^df!=?l3T<0Z0$% z$`hdO^8<@N52KEvIFjwdT8f9v#R1F*l2c)qvnT4JBxVu))4Zj(tHbnzODKQqGaZqO zTSeqf)0FQLlu3V)EMvCAX9l-?O~eV=%s`J^i!3}^(L-$Efmxl+`fil9%>vUq2VhLc z0s86Cgy%1?eM?M7R<#i<+rcgp0O}*%NQO>4lWC4|>k3D$QeU%#--iYJfJJMx*o58Q zw4x{&vd+Ois(v52QJ-0I6WyoZR-b>JQ(^aO|3g1xoKt_`52N6*9EQ!($H!f9p^nB( z+#;j$8ppWH3+d5e4X5O6U3mK)hu)^ZIGIYl#ryPWfd8@<{gchWB~!s#i+!2XS?G%K zXv1)lB>9JdsjV%K*j{ZwKBX2Bp?UOcxq$p#w`XIXk=%oUG596@yxH=N`X%IGjRJf+-J98guIo;Ykp&*2< zNYN>0J?@IleI(1Xn~Uivq6qDxDJC^^=Dhv8<)SncqecUJP4$+eo15a$c->06#Ms9> zzFST)eotm5+0GY$n@MDG`a1^|hr>rP929CBNmZC%#~+QD@N+O4gndShT%%!IPELy; zWhZ~{Aw>@3u{qI5+zdt;Rkuyg_bPIUMO1w%8pQ3G8^E);UMQ~ZTkY6Ww+mP{jAh3` z;v<)~G2MMRjsqIc%X7&=6c5;Hk&u!XAJkc%fPY_zFh}W$I+5^kWU@+8M=|q1evzX@ zMVGDY-p))D-fY^t4#PN-mU-m?QU7*g|@~@7}JvX^fK_u zQi}J=DT36Gy4*&^=Il*1c)n_Me$JY&pVJgkakdT^G(qyT|MezJlJ*FP2d+qrKAZJ0 zE#l3JecIL)4T8F2o{A(8eSuy(@^u5Li%|?L0UFPR9J$w{D}|@MeO71}+yRCvK+t zqyW!IfqCTL3u76jJs)e96vQoWKBs@}e;yt+Rq2GfzkZ8_IZ?7Lz+kYPd4=7MNB=s= zMF8W_-ye=Y5Wadc*aT@kf@Ngy+-MhNIkE9I&n-0`Hi$8|ZGtJrLhVS%|yfh+PPbegjKU!CA zN~eHDJwS)7OK1FDA9J=g88ejxJQ%g$)2+JiFevM0KJJ_7fwa!%=)P5M{6ury^<>^o zhvtQMwP8SC&#|P3S}@b`fW7xQx9X*N9zV(3n)57My3P}mmfy5 zE7ksH_T~)yAR_>U;oaU0Hlfl5ZcOV95MErT#Ui#{vNhKgOMrjrkU+*eDc&&l zO?+^coKUre;t&%tG^zdYDMQEiqhT8N(+aF@nLLfSrPL-=01M##yeEG+ECmqCg|aXjX4YF%#=5pJVK02+`pVGxEE|ug;Am*D%h5o{)uT3Pm|>yq>{ac=-q+s!9tz@FVhYd$;7;TbTzIAv(7EI;&`e^vCZJuY&Q-28FmN$Vg4 zeUnKlQUz!w?|Xls0Trif)@kS{$#{8j2tS&$4$`FgQQapY@;jt)Jb6(7+e*K7^_C_d zgvXJMLv-T*&FlaIYUpFpOnSQuMv0TR-`~3Y+d6H;N(w&Uhnd) z88!zQ*SahG%7dHT(1VP=Z95I5vPhizE&6`o!}QR828VyY&g5^y>jSE*NC>!BpJNL1 z{<#n>Cuerxo9(8+Gk_4Z`iMf#;hZs?7qu_v#&QvZjEwwgop7VD;X7#G5(oN&g36^9 zo?iHYm6BAq_3|ndEjk(L08jz(>;c;SWC==^<0E@c;uM$T`h*IXa`Z#mS(;|9T!wSC zz3{@sMxK9kNc&1hm$|dNsjEtM199MS%b(I6h=qlF-1)VfZk_fbOQXG>>OMH|&l%jR z`_>SsyNU>07jYMV92et}Rcl zJpG+4YOD^!6qZjU4Be26SKbOYK(_*xjPfXd z)rUQk+H@--Cgd36O#w?}_|8dwr13%-xc1cG>(q`|tFGd?-Uhlg4r)yq_u4EP-ecSL z+&?zEn#jW3+_oEiwBQJvdYDt z%(3yb5YbCjgOF|rXVy=}7;1}h-9F|8(x5O!Nsm1x<-n5=G@cX>{V1qy1efP1z!{4L z36v-2*)-I8&|Khf3rbj4!T!-WKbRLoySPFaaeiq}KuCw2AO*cyN9 zOQ*oIL9Elg$ASY+Uc9j|1okeW-ur40(AE+v4%--bL;$9~fDu3a~ z=8A{;PemKt0nk5CS;0TU;ML7Soyvb36CO+xPGbBhsRTC0FWC)9*7ny+k`>fzwahQ5 z4)w3pm{3>D#T6~IZ`F$vhZlY~jqG4#vMXiNLv7kQKqdqF{#Ish+BLHmTHkRHD?8E% z{W}oPqe>r75q5f;`W?-_trlZW?@4PmluplPbVzY&5XswM;|}7qArsgq1S7x_$Sx@{iMLO{g6LwMh+1v-oPyZjDOaKe1yCs_H(ZLpX?>=e?{hiBp%Eak}6X zc^#+E`;nt%c5v>7*WJ4GfU7)yb31V5YxmFNCetWwMOw7l)sjA#a+z4Y?`Bee5vc+j zF-=0Hvbzk?1^`HwwC!S*$Wedu+z+h4*teww(aIKOb@(7H?@KSLaFzQ7MBAWI`#YD4 zL0%yY=3^OI=^w7+sxx`D7+b-_5kaLc4Y=F_E58+s|C za^sxWNO98%8Py*muL6lKh2}weU1oI6K-^go+ux)pf z7&Uxs?7ohDytritwXpQ>eUB99KS|@#juLyxQ{V&b$nwOwXDLC(1H70_EwN2jIht;G z`PWZGS47erEO(awf`e+e@^+JBQnAvI-3s-&NO|JuZpm#isIGq^G#Mt1tZBUHCAs?h zl1&<%6$So7NOyg_-V1iP{Kjx_Tg%=0X3d*dC;W z=--GAt;kSd#wdTiFeXLhb^v=?K7H8rfd-vd=`#|@T@IQ$Y!{aswlMu&iT{tFvmalZ zUkoF~KfWr?xV9%;Lm#;@sV1DjWj?7|eg9?AJ{~LoV$8qlKD(vX)|0J~* zDuFif3-{{{C-$)L3kRWPUV#dh{)#Xpw&Ut~qH7hG>na?_WQOfH9Fmmi*)n7hjhaw~ zY1w?O(66?ee0HSe{%`*%BzL3CUjuj<4&9;MQkj zGvg3`OJ09EC^Yby+obJhZI`c6N3Qe|(e%;}&tI{Y736+C8{+6$4NKzaU*Ap09t2SY zmlG@cvPvBOmnw=c*+fIuRf%`zZSIfmwA@n=`%#_Lq1YJD6b)4~<5nl&tK`f8gS#Cm)M`sHM~r`=KyM^^bWYdo2(g@Ts=ErT5Gz!O zcu~YpjEI6eMUUj^gk4bC8A|UecgJ&cpw9o7av_}-Q6|x_f^DjvyKW52!H<$4!lWic zGad#y%1@nj3S9h+y89W{*slt#n|+ocl9)q3(D&TvXeCOo_7Fv!+Rw-pTO5{Nh2G0G zzr%m9R94u&y1vMM?Y9T2zpKo}3gF|Wgw)QX(Mo9?=13x2;)^64Ymkq`y?>;9k{E5Z z#KkReLRhb;32e%`$wZptjoXTj6i)dJb84+qc6oGcGrUk&{~rR~xjm)7L+v=v?7v}b z!>j`u*uscdW;K7}D`oV+Rpz#UI;^&2t2Tc(=*L(KWphe+>Y9Y;P>|i`$%Muxs;uMy zCq${={UbGsJo<@v8I}N^?mwjpfSlRcUc6;8-o5T&kKE^(D%5y5h%D3F7)=4JvQ_=U zR7uI4EP^Ao9AfG4b_=JZ)I6i548{6o=`de&4Z)0WQT}JxmSeYNmf{)4ycmN4J<)$$ zdAdhTGVKbcztELLAb9^u)$TSPeO4oD)e6Q_UGC3^^pYhb>14+!f-dLF92-Tn78(ny zM!bWm*5X7yJ_NVKHogmR6S1GF6A6SSWM(FdTd!X(YDfdNHyF04&x5r}|D{L+)n*vx zDn3}#c;O(4@O@ru8;duQ4x1!J?g zu`75q!2n0_Z_P`OQn}FY(Y8;Lyxb6TCgu!dH2YH8?B(bs;a|lK!b-{e&!B(Aw)Txo z>lb73}ZMTn_6gxf{5(0Fv9HYMj(#TEbpJ z&@xO@0@b=-m+2a{d~)}79uaXTZpqF+auzH9L{z4)AeqMC_FEQ;kXqA2!eq-os42YC z$fZ=R6WU5_yfFeU7bp5CUr>MNVWy! zV1gnavlM_iecc)*2;oR5xZzM;Tas$sU9XYtv;#v0i4T8Ewtn~UAj;a| zmbtce5dYSkI&H8Hnh{WEv){?wJ)B6Y1Rn9=+E-b+YJAoCOe{2Wsnb%g(R8QvT6yd} z-t`_fzr6O;oi@TPRz(=At&q4|+TL}1l4NG=n^!x~vhyOeDSoZe)wMnRueq+1uSBNi zG%>uLSfE(miv(J^qRxL|SQj2Bf#RxN0Zmt$WeJFReatjng$Y)|%ONh4k*%uCv*JnR z#Nhg%D%HWQ^UKREo)deVpTA1(0kR1!u2lt>H7L!&M!K?m$I!*7hfWzXAmU3kD@Z&i z+xuOS)9&lP_llMwl2xqH3%Fk^I@>TheJWv$`vJK7c%ItEw}yWMFrp2Hh&PIKrg3Rg zxlqT2IbDLiNMyU*8s9f2=uI#gNQu^T2(g3X(pLmcFzFom@dT;grl-X7ic>N>gv7Ov zA)>nZX{CC5*1tf>)DvQ4i(DpKP6Gtp8xYKbI%fJm#A>64UmZegD%oeXme=z(pa%94 zQQW*kKRfus$1H!Com$8y0-dYqoQ~3mxgOLULw(A&C4p##WEmW?{gZg?3~T>1(lO_$m6__|s2iup(rB)qQA&B>jJvGJ>&t41Y_!E?YdKUGStH7vYU z&Ld*4$1Awa;cPN)uU`YB%6KN(){L6gx#GQ}E-zX*=(D27&0t($Y1(IGj#yX;y=Ovx zwyXzfcbb3s*I-EdRF{~>(7MQQaoZj0`S? zk!O|*8>vIN5J;bDA}y@R?_q|^F+w~XhUfo4^Vq~z=XnosG}Ay8hTHyGxEOSY1TR|3 zJ~t?3fu?gm|5vEsN}jfdW=(<)3nHdGVmqtbgPMQEcS%fza_crCY+4TXULPXOZB(n$ zHPUl@KO7bPPUd2jnIYED*V_^uWl|?4g}Uv2_tX(Y2gA5R1IxZ^Fqdp1g(!y&8$2Yr zhd-i{8hNfZ1jk+p$ zkD-6x&L+W!waO3Bh!Juel)QhW;vGu#CeN0YU}92wv{qAdM$dvqW}pR%*Ji@@0qX8S z;$}(>xs?t}WT;2>%Rhl>dUf9U=0`W|f*xt1kKVB*jeY5DA&^Ch+K6k?Uc31GbVOmG zAJCI}Qj+QT=W0XAP*TNdY9kPzbvcSvG6jE~Gc$?nF%O^Aro3a6I`wP5ATl7o+EktM zFih-SK_z=H&Y`%r`sa7x9!fjh#96uj9ObDhGK^ZmTT7I{Twcix2I|Kd0@aj;TZcEk;hA$pc^0|MR zzB8iuv8YH%C9%XXz5O&DrWZt?301tKPHI>qIYUN`PCx}3!KCiR-cN+r$HWm1fow$y zwaEPMR=4Aobm6U7R31Y| zN8}(E327}hC-TjK=H)Y6h~T+_N;ZEPBmG27(Qrl@9fQu}^APzlit(@n<6=q66))E; zk_~V;ekyG5GPxu)Zf0xYGX01X-ygS?DCjcW3pJ5JRS!q$Ioahz&9^DsU0HiT4@dn} zdAVR>P?EkXTO6P_P*1B|;!9zTfPchIX>q||=t`De zP=}VLir_G;lvEl9=7sI-(x-pB@t(Fz#2WFjWLmvaECT{boH+LL6S|=%Mk&j<1X$xn z@v(*cBxqrxX|0-LU*o9%0=_$>7s=b@&43tOYSw5V&Qk&v2=SX9%KB7HKb6hCiDWDB z`eX89d5Up07Wq!OTk~0X?5#_hxLGEAxY5DT0|=b+>*8?V?Nb)DYEgf9IxvxK$@C7M zX4&14Ti+@S^GGl?mcxC;?L0%8^9(;4?bbSSdXds`Mq4s;svwVV2G0VzX_*1Wxl%iA=qkuIi8?KH#+0gs9okw~MxYeOa)0}LO2iOjj zGpdO_XX(uBSQZ6b7|0;s?*1U~unM&gx|lf5BIWaQm$1HR9NT~3#{8amHsG9oXqNCz z`R)NVYQq}(g$~~h;w$fc+&bR~ux65fl{x&n$14}OHLIYmZhI&^=ci8K`MO(#zQrlG z=IDuB8q?g(8)PqO3*Uv^bUXDmg~?TDvm(AlH=ZCm-f-dtO}9HBGi*HFTLi*zAwvL=#Ip1Jrt*i zmr2!=KUGySq#SkoN->Gg#OyG!Y(yz;w=SqL8Lqelb<=(5rRj#BLt$DL3{1Y?nJG%S z_3nAWA#`+1PQNCq0Q+DA@!il2`QjZS$^Kx)(~!th!}NcbO_m#0BxC+S3r}_lTW;IN z+D$tw0OAD=bcY6Ma8T&_pH_+y`umqME3?TL%#Ca?=|HljsnrBwRyvD!KDa=J+Ho2A zAbZ=EZI@#0{-;dMgWd~9w)v(cXA3Pwp4ZN`O{JmHw)PScF=4z522|87RO{}&*M17u zWsDY8D;$5uHSt-=G1PPAJ^dbdO*5%?!FaCzEyR^AlsYivedw655$0Q0VsHm!^6I$f zv28WAyih*%m&0&;(L5nU2~kXF07amhHrv4S9c0@s+wn5cp+FgWq-vSs9^HOU^NwytB&~>pq<4YQGV3-Is#gT%~Jx#?+Q2~>9bDkxNk;7Jmobp z%`3K?FQ>x_;9@?{yCG~g+j890&r9Yf(rMOjdWE_ssm8cFy?^@vk_C6*{CN&s4M_Fxj=k<`Jhxb^T`*2B{$x`6^ryneaS3MBee#6n2SQ-=mHNMr1}N-H^l1x zr{EEMz{ca%orSSpy^j(f9(KCq7$ZJXKbe1nzL1=L6lS#wjGRY`^nnjY-dQJwoG@D0 z6|r2?^uE*G%t71RQL*zc$zjSte;+Q36ar*%@xmcvDl>|L`LR=ckE3i1M@<8`#u2`Y zYUvQV)4C!XoywwN*C^@yv*f>_0>0|q%k<@7b?K*te+QkZ63PW)V-1) zQ|grEyy<7Q|0DCT;n$o4EyX+rFn)gzm=HK519Vjb#ieIJ=Jl0qni+NbC))YzHu6IZ zb4#)`p(~oO-2zCv@!x|R@Pc!jA*;j>+tYpP8a%&aJCM%qY?#=7>FZL1MTxsm_v;*@ zCp6%vHV*~^E9v-Yix^0)Z!`*q^f9pPN8%|Q*bQC7HzpvlI{wb9n&@~DyU%~s3NH6_ zyfdj`hP-&jmdRgh!Qd6gqZPgGUfD z1DlccPKlZ=PZHA>+)dxhEQ z!?@(VXQHl)5dD3D#BzP;Y9G%~@GH>411=|)S7e&5<6HWg`;b2x75wP^4*?RA9Bo#& z%z+Ghu#AM6UE`oKm4rGnBk9sY7HB9-8Ti zVY;$ls=OJ!#ER1+k3LmcSD-B8fPQD~S_loUMC{dNXi%o*R6<_ux&t^=CvpR4<0dl}P<$&Nr|&%C@4*M)?w@Ue2*Oo&FVCqFJcNYhzm z@^jzXcshtm8~)^Ks^lj7JdN?vdTp4u)mMZCuP4r$dAGek zQ`0z<$!}m@0qbK-T_^`fr<*)3QHaCv7kGArsbGyfo_9)y|h82_rt|8 z7mH7}>||h~bdM%uo$>ycG;omsFJ&V9WM*W*g*fHR(dohh>W$MoVbGt*Z~T0?k0Pwc z%IJT@35Hd@!3aS?M>N*nzg~T>mR(HySSY&?Pq8>D+!xU-vXkM{ot$-)l5&5J?D(?+ zOdbw|poQ@P;sVb!h$kBj24^LG>-lf2SO45i|NOXsbu48{=)qh~)B#|FIBJn(nnqiqlsy+uLbmv>* zhhGX8bJ&(r`WG|;R^68*FyFWW+5Sp5Hpq2%1#YGzmc-&hrdDf+>gs5J0KERfR_$pE zTJ@o}d>#yrB;Jz>mYR4rVos6i|ipxVv{UvsoW>!z)hL{G=|ce z1sl~ScyuMF$&avzB68VTpIJMdxpHjMO+9qkEs-2H&emWV9hRomJjT>?$kBKc^EkD+sKvr=VTfl~$^L{}m41pg2JeIotHD zFF%@FHd5W*Be1C+b$qQqZLfd!o&%tX^CW+ty*SYF=TZ=vPoAKxgBE{SCZlo^hjXS$ zA!q#z())Le@^PJ@e639~q$5>>4NYeo^U}J`87u?a)kj0ZU|*M3qVG`N&uJrf;WeSO2EL|_YBBI#~GI-s2!cmDRub}!u@q*-E^;ettugNPT zzs4p4l`Q$hO(cfY-s$E6HHNtkNjq zNqMSl)_^;^r8W?Oqj0HeNrJ}J+vZ5dD`f;RQzryg{jVV}M-EIeK|j5DQMTCB!#Wj* zQ*DPf_yA7yieZ1H)(*e71=jC@2GSjUsA2u_N#|`-broXlrPQo+c)OARa`!EL%QS&? z=KBTe*r5@f=#sL@>t4N!n;&y$kApF3t;8wH3%~Ar1NDSs1^aBu&Y)hm)!&$ilt3)l zOf`p$8vVkiB&Z8^LI)4zwsn}2K`>vMLC<&{!%DoNjr4z#H6tbG*^Ga+lVrx7XSYVQ zq&u;*%9ijCoH0ePggnW4OST)ZMpR?e<0V~lU8L!ZE=hmMwl`;v{ow!n-3p!0u)HGG z%KOR#1IysQX{q;RGglJL=hG3|a-ZVZBfDEKlDOPQHbz+|Of3mGd1YL)bANfVza@n! zV3k=Pedm8?4cm1J?Nk=mEox&}cTs#~1N%$_7$Wt;yJ#~2Vgy;uHu<~}K)b4UMnwQ$ zfqGa#oLvJ7JfL`*cMY=^l(42-#C)Ngo!J9YV{(3R{2GJhQLK{$FG!w}R)t<_b_c0L z!Ity%;Np3>-|69bFDO_Z=kj>TzR(d@;K3|_MlFB)c>dAk@+QN>qW6$x#&wu7EIAy zHEMWJ7j+6i?B+&ENi;bMorFI*OfP97$QS%m;+tNVWG51?5b`;}*dBp)Q1nk|*~F!E z)@^^T%IaODCs~o&z?c)HaM1dJ+`^S^Y&pwpD`Kb+Is-jo&Nxnv1l>q$LK_vXzw?cI z7YMY`3U`7-yr8|6Ksq7>p?>&yu#e)w#G2k0kAzpbkQwPn`-mzBjmC&ufe09$YWq!` zc4+Yu-O5eOUI7o<8M1ySJG^ffS*nQ#`y+qhjsOUQcheHkx1%<%VEvg&+LZ#j4B3;dcK zJJQ}-v_4_E*z{Ma0?4_3@}$DF`o9vQ(zU6OhCb_7<(BEx^3 zazqaah$qwxEGcYF1d|zvCNX1^zWNu4%m)%JdVZ6AIimUpJe=DkoSrra_%&pcDwG2D5Fi3%^{`_44{c9&^%UXB1VUA;?OkxztDFBj*!52U}0WwoRu~4cX}CBSqP_<4mfHt2907)Ek~1>x5Nj)^4OOW(!1nCHPdMT$XA zvmvT+eqcSSDu~h3*|a{NI`>)xtd>@30!?AfBO`->t$YZO9DC4HXY$uh%sbSSRA;!J z^Jlr%7C^bU;cePxsXzr9WO{!zf*S{I9`pv73CohR|7Mj=5vSPR3TS;`E8*-q*JzFwk^a1sd@rs#TMkiF%@B}P@6}jRLeQnvhGU0(hlPlFU$xUB20+ajo26|l= z;Egk~`(E7lg_Y;#CSf27%>$FA9#B%|8{sNPwL$m5olYxF>pg#{U5RIZ94#XJxzdPQ z4fu^&uTqD7pJKt3Pp21`fD*=5b^ATwjyWF=SVC2Ch-c%lOA@%Nm%XY6wPL@w-C=PV z9%@z+B$aNQQX&fm>k6%Ozsbe&5t4tx$V2@lN)QVX)9(YQcvj{9{;7A>#4UajK%?lh*P z-3aAJFlN)5c}Fpx0PsMzZL*p!88-e>)|or@!W^Sgf>hkzQ9a5yCfsiVZ)bBzM&0g`#{cJ8 zg3^kkO&MX_DvOjZB539bF_7_*KCDkYuM&4S{-^1K%TF{eTzfB-z!WykNFW+J923}wENN1YVtGpmRIU5_ z!#-#$Nc*B9avFoDp7Ca&t}EXj59_TwY$0J&5L|l|PffHpmxWG3L0m45JzH&eR4ii= z%ExYSYvwI+3zq#_S?PfD90Gzz(7OJJm?*4?W43?vqma*w@kaAS|7mR;{}Ie6^q;>6 zAyIYfEuxQ7j&lh?TO6rTFnm!k{PfN?NG9*%(eP3AiWPkFBu4H_1N~c6NFO8W4o@K` zHvC&~`BVcAbxGXHw4b!injA%L_<^S<6ga=w5JsLktoh^alkc}H2-U+RNG$H(NdUZZ zFvEX3c_F9bD;e4HLfKe7ts-|=9y=^MQ&kk93^5!fWjb&Okt=l#Uy>zge>M)ywXne| z6%tZ`JKXQup3EKKopOa{j9GyN^E6!;`sf9hBAvT)oVEaMu+Ow~+u}1f4y`{gH+W6a zaouXYZS(Mdr|}1f;XHq)^J-$jYhAzY1XRp7P!iJd9Emv9ZCUh{F82N zD3EAgc-YN^#f(hF412L{T&Fj27O5wEjO%B|mrEg>7<~@#JJeFcYU|%7f6fPW2{*d% zI=*omB+u#K@FmnXae@W%Z!lF@U;2LS<_0h_81Om2gAVcxV1JtDp&TaF)(S+QYCV6- z4?ek*($INjS|LUJ2w~~;vNipgZv^y-Ej3(*^v+T@v3^5xYt3EqHV7klcO|M{B5rk4 zZM1gDpcVrt11GqGKS0aR2Py0x14D$>%@-Dqj-HO^kF>%;c~O>y2c#?Y@|BN5K=phM92=S66SwDzoDSB z8VlSfpR*XJ15DRV4Jdzua@hSe&ls6SE!K8Ki~jja6fcPOk4R*CElio#6$l~GWub5I zA2CnL+=X#4GR7aM1f$7bgATJ*if|#S*T7ft1HZuSCp!(hZ%(|4#9P1|2JSN@Zp4fG z|9zUml)2VQZJ!10q?&`(94~)U-Erk)zfFWelmthHjEX@6M4M4cB-n!Eq|Wv<3kD*? zlJ>N`kesJgHQCjyD1J7>1_~n%1IVr-Td(JeQAj`K7bI;=UDWhY(*`%#-!>M@rqY*$ zhQ&L=5>BQ6t+*zF9R_iK>Sxc8itd~n>58p15gY2A=sx*E)8T9+0bzf(r{%G#Ac7of z3oc<0)HCkO!NVt~@n#HerCD{e)A?TPlxls4b)Z?FNN$QBgyxN>AMNNV2XLrW8QsJQ zuk7uI<0XtfZ^kg3d1~JJrVBwtd;WEy6h={QtMInqhxS1HAJ>1p|TSgK`B|yWMZ6wk7$Tw zWVe>k{K){Woos)dE25s2Yc1t<2hJMI$ndLJn5#A%YuvD}7F!%Os!1NYG9`rN+2~L? zc|Y#a8q1g=-s2#C08wDY^%CWhU33DKyytLJOqY;f`}V*#dhL)a{BlDOff?MMJ}6Dw ztKNwDdM%P5(-;@LQB!Zd$kn8Ehgs;~Wk=C0mFOR$G?mT=Z?&-4BE!?_n%7AL3$qEm189-wO0VSJFUL8-Gi9vB}enK+o{TC9LNJUOm8ppUdA3l5V`iiIzqH2;t(!1KAA8!Ll)8G z^{D{v+>q4pn*&Rn&_>RUo$vP;@5Rv zd}ZV7N$!gx4U-n=Mt5QUGpw+}s;(aFd~5~mQAmGmT4}K^q(3#CWac-G*%v=(ZDHhe z*M`5u^Gf|vmHuY&MRg8{?z_%Lw++{Cpc_!R{M25r5`=)vqj^JkRL@I!#x-BsDfT3u; zu5lHxeCK+?-0~qy-oNjyI|MrUBetaUD&)_3nqYsYug}`TfDdFP;CEv1ItPH21*DslzlK9aT86B^ z7WBXiI?gEEZd!hUc^dsM)H7Aw1B|lf9vi_1h`SvET=n^x;u6x-^+20MmFp0rr32C0_68 zt|3sO2OVo8WOXWQR@HzuoivBk#fo`GC%F30kf)NYW6QR1Nx5441G`y$KcH|_AX?jR zE3^O)W!a)idIlxfiG)oKamm8z&+EdoBM?T1&RpFzoa2O1qRiYj(r!$ER6@6jDf;8S zP}gDcExFpbbI;z-7VscDN9=#lv~KYKdQ$Pn67wqOp&uJw`qaz*PDih2qxFsl1QFC6 zE}n~@gV;es^W+g$0OAuLTl8N4wO&DT6p)TNbbi%0W@cfdp)-6e_ZpM*(j_NlZFZU- zC?t(cg7{bIK&%A?ZBv~iYwayPEybZ<4`EY=Dg`es0v$$_MddZXNokjE)B(`%?4lY; z!=#bZ2_x$eu_u4V-)-hPB9_*7q7|E6KBfrK$eMzN#n1?vPlhzwL^=?!;B>LD4OrId z!0Oq#}Rtlz%O^HW}5dE&nw}(z^z%H-(?cK*6z0$q90| z#1MjvROjXO{C}5smGu|HlLmPn;*rOVC4^y6k|5$|DhYp|geaIi|&3fD{-1_eQq47~pDFn5h*y%49iG!3Y?Je>ARsDd?%uD3G!A@2w{ z?x`z`KF*Y$&C9&5HV4RB0Pa71O*e)*76JYi9(r|S0iv#<4Ea$h!6k9eg1^UycyXmR z@Nn8#%X@!SWoN+Z#5U$ET;mK#Pz6h3kDIP5>U+g%OpddgyXi~+Ji0uzrf>DNJq+2- zqP0RKNarOh;lm>TFzL1yL%yrz!ok<_yg6YPjkl+)ky~-40h9~pLSniw(SG_n>3jul zM!`9n2FE6fg8)lfx4*IdA4=F&_QGpUi-gF*W{!UVGeFG06GI?`91hit8+4nx#K{=Ukg zj1yMx^00Jo6&2=G0sOY)iJp#U@00wZ|75!tw>rLm>eq)kX=<2LTmY04zbh<_%g>bm z5iaRDo~+6tshE-~Zi#CX4WY-rwG7n8z2CGJQrmJ|cQ(s0r`v!8W|0KwErp`aFkX)rFp<6u| zipGJ*Oq9V(_P7ADN<@GsqIyuk*X_J^3bi0pIjJo0$}7djY3%~Fx%^%GgLrRSNxHWC5qdt(hNWIs2{Xrz^+lg0A*{EI!VM}s|Dy#$G_Fto*(c7B2tEelLvni%kYM z@Eo>VXXMK7a(Y7x;5Ip}s$M3&UuM=w%HugT*n~KgDy?$vl zpS<#6(2-w1awCC`OZVm~?(E4YD}1(zorUDeZV0!S-yeGOAS)%8joIu=f{o~ZWhA#f zW%?EoPkyE7eZdp!E%FoQo}sCvA<2|u%uXro`n5&HEkezg21afb>C%iC;HFMx3}nU| zLi1Sm^J;}ndv2Ov1f?p*qX=!lEp(0$#%2%7V{7syQzm)51+UWVq{}DE5b+4vuTyiW zm_F@>w*@J;dFyFdLC3J5%Kd9Ydn5nc8t(XcGFkF0;4 zr56Qrr9myS7i=H?PM3~<0u;RH6PdkA)j?qs<)+Xtxw}<$%y5z`_VvX3;J!L8pxul{ zQx|@j82Y;yuj^>f`=KH z>fO;?m1by8)$S)eCz;h53xYOOMWl3D#{6E)h#```3C(WkY1|`!nhFD-6+crKt>hS8 zLtT@;HN0#s?&h~OY`;_P;N|F3=&3#r^~#K-pVkb5o|5#QL;Zcl%`-QISgVWjvh*>& zLhfP&_MOIuK#^YMfiH2_Wk_+eh>11&E(g3B<32?4w=uI1HT*qomudF!+}y^!IK`}3 z>&$i5AX3up($4RHZ1r>!xkUooqkKj9?98<}4*LaR!*e5D-di^2L8Ap5D5&EH2c6LB z>wa8=RUB$M6~Cb{XHHZ)rz7$H7lGEd-0Imh87C2r9+G=m?jE4{=Y`b8F7i@4&=G0d zGu(Dx+-2As>$|{#*Tmjjh(3Y#E#MYhG}FOgdZ>pB3;Z&FAVxcc|5U!>X>efl{l=@& zoFw9axgxy?L3;2eaekY+Mg&nq`0o~&swkpF5;`HtE~eUeR9O|svrn3^w11s>*tgHG^k!c~EU*yj_M zJWnWomA%J*0KtU#Gj7R|_%?$-32wOdYRFZ}1LNrHV}C@|_x&~soY|1CgpoTxY)n0f z97dIk{r}c;!Y{%M+n%%r+Ss{2eYL~Hp_`RJEBI&v^3mU7R$8gr)uw7`VAs~GvjS)%G)TlDGbx%QhUI3;Um|j zVs(;HXzQWrM%X+lw`sN(GDk25Jwo^4OI?5&9mWr0Co(neMqXP*b#v8j;aVI3DxZc2 z;6;F-;TH)+?T~(T5nilT7bWYH*UXD$cW#`Yjh*J28Mu9Z7J$zir&E^LoH@7jx%b6808j&;tHjwu+W{3^`E|*ayhV@*3Lc$zoO4H9#s*%mS+B2C~cNGku4zwX| zQt=;*d7ox8v7X1&779gJ+6{~*Ca{w0HS7;sQ>UorZb4~t@g$2`)%8*Z9VVuw5`se4-gXfGI zYHsVHLCql;#x}Is7w1#WqcNLa+A+XmIUu!Wi>dAf+Mha@oaNFrKn}ynQbm#GbX%0j zR1JwpG&+>m!$YV>(Xj4W;Mk;Uay^X{IH#W zsfk)3aw7Z+BOVsPXgy_KnTAjBvI>bBn8Xq5!`duSr?k4r?3HK;JjFRxshn!KQJ!Cd z=gkqD5UdUml!+-iTT8B7TE$6PuXu;BD1J=@>%9tW$G zwe00}0TM=Ghu`~UaQ2!sZEjIHRorqRIDl<>l*s}IE0iNehs!a$&CdRlacb|&oVGP@XP&3ldW^bEwgzEW!ObO3* z9iCN`2xv9>F21zas? zQXN;VXYH}VdM?}jM>p&lvuNkRikDmKVHljA8^&ZYk5NcN}a9(0Y1Vg(R_IrO82f-L=!Y*$r@izHGDxS%^G^ z3e?rTGYdH{Wj8Dh*cHCK!7siJaRYRuP=2p+d!hwhp zVpIlqUsXJ6GtWvK{=kYT8T>#IOd+gtjEL@`t?Voj%mFu|o6pl<5!%G@N@_K}RIKTz zOV9$KE|J|g9ZCkdY3fFQ#g#wkBL?qiD9IPh^F5Lh6g4D8wYTiwDGs`Ucf>XRhEO-1 zG4Ig73Ps^So*I|Q#zAM8bP4upqA*G*!{ZT;3wgxRKL&Xll6RUJuCvg$FRU<9*AMwX zwaFWLMYBh`8tXfQZ+WAury1ZE(B)|_bJ_|1P&oQ<63}#ZH_TsSiipL2 zQv+a*E2*UDF@JV+s@bnDkZ9oMT)3zF*DnRt@$|@(WhDrA=$;U}*+0<2m*m zL4Yv)#_y;<-U6T4yZ+~x9i!8FgnAW7|Co;+#TS? zVi-Oc7%PUXxK?<|8wEpzWj2_P4@t$Og8<)ByM#{Y0|H%tn1Vl$_|r!!Yd4QiaPQ#i zTS6MNFXz6{N^V%jGQ?}bOM=&>M*Hn4F?wEVue(iJ1`X9}sX5#zqdb({yQoM{loBh1)G&FPzWf1~(CzYjlPi#=#&Dw9Ur5mvsD5r?X3xl2Lt>t-DxoLzj z$?WGR?*mY5Y#RZAVGFn%oUyrxJEI7~rk5Q9>0A7TA5S+*IQ9zm&0;mlM9KxYx+KmD zeYL<|3BQB%mV^oDLBz%se`hh<%_HmzKsfj3t(Y!<9eqL-V7P{K6zR};OKcd1oB<$P z&0^>hI{_Wy9xT(P$H|!_$-Nabs@xWN+7~qnTK|uz;Fcj)`$-c~oiyk!9(p{$RD}LN z%qb4QlW_D_1@n(kLVV71^)U8Nu2I=1R~zpTi-E4SJ=AdgL-nOs0i;}WqO|pFafoVZ zJ~254SgP-3v?+J)zCaKeRwP~c_#8(wRrf@H-8m+oHXeGmjOMdzN>r8SA#4(q$S8Ng zdiZOb(qGyn3SsadkYo>JbxV2Sw^hzfSog+-mhhCMU)*Li&DyBrdQUXv2AdRsycqb< z%584p9A~ckfV3{jLfof)?><|R(eJY6MBKl8>hP!NMTmD##pLDem;j8(SnsJ-ZSH}8 zXBnj()Y2RLa+Z#FB?~M&T?TFrUzTL6I1y}ele9n)J{Xc;Nui~abq&#!EhC=RRHm?v zUCGprq!;)Tf^++!)1L=jd5xV1h7u&5hak50vuqQ<$X&p|8}rQ5!=i9E;Lq;JA=fk= z3MVzgb+9m_++%qS6{mAnZSTd;2df=_4$tsMwN&^WK(k3KXIzL2DFsr0f1}dj*+bUc zQfWs0K@bgVypUsz_l2EhI)C( zLRQVo>TMvRh}LX`$8dsBZ~x_Tu~-RYc%Z)2J?suVMJ8{>-nc`2NEX>8jO~_I^U;Z2 z;@Xcn+G_vszLsQ}%c*g0XjIWL7ob9JF*f}0V#m?yeUCfiZF&5|Rx_la@K};g z9~BV1_SeYwSLwPr|5RHXufNNGaGq6M>I)TJ)s_TlEAYcD&rmxQ;%bg%^*~-;6!r>J zjFH6T9aCN7SR||Dt*%S3Q-jfKcXG;g1kc4mG=- zeEgM9&r;bQrsuK=!XZ0(x zD^L@kB_L^K7`&Lk0LVN?;stvoQEtSz=5xBcQ1=Jwm5LsoP?)fem!(Gk;#!%T8jFmO zyY!3qyK0=9Hq0t=T&sLbjN4!>OoE0*nX_IIM|aA)G{8Y-K-!}2Gd((vv78nRmV1` z95R;$5;s&>0K@HnK;TEPUbunk*lkUjxB>&gO!iZbY3GeGN1~KN9J@C<4mU7%gEt2& zxLKIgxQ4?z%y3e;>k*NtJM}ZxaEN?eNZ0YjD;?Lvklf?)lXMe)h#37K}a)l zkGWpMD)!9xekv8yAw3xrgR58*X}b*6f1$byd6WKQsG--rHND z9M~dJjX2tW+#VQgr+FSBt%ZT+HA18(2_!V8JN)p6R%V35y_BK7G96qx6owLh&E?T3 z3?AwEjbHWV?3GBU4q&Z+Bc=uFJ}Cc&Z-@TZ5tGt5kQgX(wmIO*!Epfv z9+4s*vC2?t=%ZTLJY)=4P_HfTcT=3kYou)wNP7gZwyo?B;sYeia?f}o9O?1$n#35Q z+HWX$Td;jW7 z>4j*WuAdJl*Y#tYR##rt28B=EPT3yL3&`kyw=HIV7n(=?SxW{-x96Q9&Q#=O#V>=y zj+GC-r?0;U)4@6L7u8W+Nw8+bx=g!F~A=4{vc#NM3Eqzb_; z_xo4SGzzrnu#+(U3OhYV)qm{C4lcf>*N23B!5Js|k{`shex^gTgZvv7*L|q@;6xF# zO@$^hYrfurQt}*d)(59r(jM%(xctU{D>ES4I6KlOI}faL>?p$!o(=EWQ~~bkoDI8v z3hGM+)zl#5>;|j1rZYQ4{W|4xQ%g7S%@|uEFr7w?r_wWh=a&OM_+@|TRsM)j7Sd0D$6aAG zjCO#ImO4gXB{ebF4`#OgJ-f>Wba6HSDv>+fsTGqY)|7U{D}`+r3LTFhtY1q2bBL;5IqnUSn3m_bt*A2*C6*>_&Yo$ra7E zh0XNh5nocuMNQMRg15?IN##(QV2`U(b?5D#4MbE?r~(sb1&RT00BDpi)?`Y$b`C|P zQZ`YvW9zHgYg_PO*9;SXYZdegLfE@tO8;04?eyIag;}bh*SwgS!8ue)i($HRt;*bV zJZ4s$`3}bNEC)Ib-m!(qXK++7b4W~D6OAt#vxl?#26w!k2>q1&k?M!K9z(a*^(qHp z->^{hkBIIk22S5hH?5D}6`-7<;iS0#6o8-?7#Rf&CFQQ!1xl8GVBM?)@jplVdCN2= zis-_#=BnnlSZOYrhsQp@ky~)w-Ga}Bn5>O15gXY!woVskivFoM+C%Qk?>Ddmf9wcv zB&^u^lK@>Q19&8J!E<`m(SG0It=Wvg9g*5xveG@o#J!-70>?lCQVC%akqb~tU2};O zq3B&7>=EW?glNKlnyY~qL7`RJUYtRS5_@Stnw}l;y4Pjvs=pH_NXxlq0X+(E+hoGwM?H zu3VIp2uxpBL-zk~J$m>F-48m1I)J0086in@*_qyfwbhSboxdEI z->7UPu?&yScF;u}NsX7kN++eU)BXO;G@Xrme(^csjh6;aI!%*2mXyc4 zc9tE$D=KX$;%;qSTW#$Cj_oZnkc{x=V{~h=CV#8D{9U5z3SudG{4D4+KV6gCASHyg zbY9zZ4&WT9q8OHj10(0k)?M)=7sU@IOh-LngSgjg=$i2-8T4t1D;q0z;O16OtI z7?IjYE|t@;{}L1Lf@{55%+d~g?Q0U>RD8hNAL}<_{&l3%?JE`m&UQ+j#EiprF7rMT zd`-Qw7{XUgU=UGP_c^%H_tl{{gp=!F@qES*FyrbYL#J|n9JT=Anie@(apBRDIx6bp zh*Xn*)U4{%<~@L>GHS#nCV5(#t!XQZ64=8XJk!4$1a2?Xou!F@YlozgkinhkU|g~7 zVsDvX-@$mw>3G1n`|paN*W1M(4Xo*?8>;4IE?S}w`G&X{;cj}%ATBnVq!6v2bNPE~ zq`Z5VR=cRRu35k8cQaXJ!fCe2qsGm#$!F+)XNgqYv>icr;kO2lNcvtN$6|2oJ}X!X zy=Q~$r~<2L4&u~FN>kXoU_a_q0=LQs z@2S91P9~dhNf@Vl?wkLqV7jdq*K2j1EPkDRlp!R%03ygKk6vrXSSeriMZbb+|3KA$ z2YNhj`e|~|)lFZs`?~oSatVB7SYc7x5@pZPVpo}>3vNn2CD9GNA;U>A7+n4uj*WM* z$7(W)8)xNUNh^qbHdFn8((j6Uq*=sX9_O5!oGj#ibZV#7Sf(szsD!jwR3>75Vp`F5{_x(_R?rls@Zw`Z9UaR6@1yZ@uvV>Nl}r_u|B> z*ep4G!5^FAmeuf-0RgDR7}Rj2(nALMSXWI5PS3v-MwH#7dOTCipCwJxfmh%1Rz5>Z zRRZ=Y28lYCmoxNV!n`X9$84UgZw{F7VWYUS+ai|r0;~XjC8JyYSC7d9>5*7}(=0lL zZWFP;^`Ng{z0Hgo;M$t%L%&S>Uv&C?=hiZ3Eyip0=WJ9jtT z_#=kUqDuRwNVy>Q*L;0{oBm^eZ_D$eWl}X|aiN|n6Ss_cg|~H^$rYT0Lb-rC3N$p3 zyvjLd7ES%97V*%kd`GzPq9Ql$xpLTll@VwX@2tWo7Sr9Eqp14XQ6|gTvN&bpo!P>n z2eJBH4y=-aCD4f3zAM7e|CG|~I9q1&fjzBjl(gNS_}uZ126X8{K5>VC|5MxO3qjqf z&8#He(;$XreUR}PKPg%Eszh0X-1G_e^@?s3(Js07m!4!--z0Q&A#Y`2#c$hH_8RIr zpvqPjR8+_ys9+2h5>C0_Ml=EkoEKG-5;i_tMxikFGtrcUEQ&ryv;Ji^B>}muLV7=n z6rmo@ckC`U?m@i7S%bZQX-+&#MMW^d=DN>XCvrBJze#!_ZR_&;n{(LO+bzN(d^5wBL4oz7rx^AjJUV0ya9a zuQi4%YL>eZ^-dOl4>0l?8r7bBF?maVABf&QvOO99?lk36%+V7Aygc+A(}a9;YS1cd6r!O+ce@I>IT?G~w2DjVfOg|^;Ww*Ev z_M5&$?66~Sntf9KddNT;@e8_p=fE&FKP_)f*Agy+F zsuP*_MIU5lH`k;YVQyhP7*IWfkP|7twfShyj^ZGQBr^;POohXUUGAvx?{bW(=q`N~ zc%cLuO>HURdo>vt*%WWg@9^>--?EieJoW5g zTUly=1_vZ&OXt+9)z6fOJX;Gu8)~U2e_cBP|8t#|w1-gjB}Wy9jU-0xumAyA4Bm); zA(uvZc(ojVwLvpYlrin8Qn{v6z|O-R>zcx@^M{Cs2%q2u`fP zxrquK(hwh1Yu{CQSj!fNA@$eApwPk8U0>in{co+5`gO&uzj$0McOimyS?GLJ8tQ<- zlZC?2f<7AYMSK8D-C-YDZaerx4@*>k>7EC=_G1h_unC=E2lbWSAi59jOq+L-r_y?= z0!^YxxBJg>wBLE_W*XcM#Y-~5DmTbEPO1UZAd=b2Gjv5oJK4O_OpEZdK5W7GJXReM zwW-XZp*8hC;XwkPpEVJxtM&8YxHiNpw&f(wc|T;_njThkwJhIG@CyN|SEHkUm~)F% zz&#J6n_5E!#tVS!KEG;^jc}t#Se3gNR*xOl zyS=H6!#4Aa*0J>yj_J8;Nhfl=w?M4wmzBm2e6sTqJM3!As9z45`?}0#CA6_nsas&l zEJQvEtW9Ay^du7;{JN0k2(v_gPSLULb!%X$;TsiWyHE?nVxMP@$a9v$Ty7-`&KA_pvndKsFf^&1(<(~ zv~hLt=o1*V!>(1)-Ivq)z|L9UG1RH~9!}srJm^}a9XJzPRB@4Z({#ESek~1X9A}@6 zB-s}!$I-#saA~x0^7 zd`#ke;q-)rY-V+T!9s;Ur(_Gm)qZv39Gsgh>+^D&nPR!@}{4Nc!lIBGuo3c>Rx{2BSyhOjeQf0 z?5!6}zgG75R4mWmz~kpnA6wsUM9m5_hiFgEn)nDvSnYd%k<7kLbWnTs6FQ+OcLo8X z>>tOzW(ES#2irQ`Qgvgc)-Q6GChzmX;_`POr}D*_tDi5ME0~ zHAxsp^nPNt=BDzF&SetSG|%z>{*jYK0x8j?R%tjR#D*$h54I4O5#_62VAlgxAsn(dOJ08#_il6hL#}DN zNEHtk-(bILe1jftoP5k1xv|A_OAkGryI4diYrYKzG6nsK;9qaN@y5^`CB zvR*0l8s7~}an-yHWTKD(qpv_fUet&Lo;Q`U042lv9kIu zZgOb;cwCn;-@Cfr)Sq3D(U;!~4E0YqTsZ34@agHT5genHwpSlJE?r>i{0P%76|ACv^Qxo}m#kO;|7((oEiela3y_Y9*Fr9-RAU-beAvhZ zVQQ`r*ZJ-e<~NovmhzXYx*=aeUif}_y%@hUxZ+fg6DiU}jC!Ve8Togi!yK7HI%SNc z1LKz3Mc_ku_v&d6SVBDJXN_=iS;ZlNvZrj`MVkDU*T^^~_^agHj|E3~e#!4Ot;jg{Cw}Wo>f!=* z4ilX1pJvHSy7geN0g<6~WtxV{An_TTC?OvB^tkr2e?JzCPLWDdA3HR3T<23Q4|*hH zu1}Bynaf$uWF`(pHymPrOeSu2QEG;Gct_U9@iPBVfzBy7cb^;eBK7H}PSR{13aBj# zhYS_g(703imGntWmab`;a^Ks^X3tc{*uYrVq+aYi8^ureT@Ugd&0VksHwmPly%c6w zOb>VGMQGNeeSIkG&JYjI&&`6cQfP^^Yi58Oq2Q`--so^vu6?e5erjSUDrV8OTB3)n zzl#f*Mz<2-Pd2DZxGxT21HY&yt>KiLh}yWpAOKeNVI%c)Y)JO}MPJriMvFj(HzX!k zfl%UpbJ7U$R)#pLfj5svOZIUEboEvv|116q@rrA}gcIht2G#>hE5p7UNX{6l?GdAT zi4Aw9sP+1mR*aK>);YQi%|*IS=7_jMO4ey)82s9k#FZ(|4W3WgfSvT29)RPOnMsw8 zX%f6+uMw`!%uF?tjMNY9M8ti8TR76xXVkP8EIqWBE$nj=ykPefG0wP90UyPnP{*!RS`oB3_GLw3Vf$O5A*%|7F!Gds+ z5E1Z7_Nw_w5!4qvlk?mMj!i(`hjnAf>+xJnBQd?J5aU{F0UjtE0EOOB#LM5>5nKHl z`-UYbH*17{93cNao`|L%hoy6-vCt9J-!=##x0|#psVv+N#QFk8OHN(qqWL>>`uNby z+^V1mLu3~?nUomx#x9TI1Qn`OnXA91uZtm9%eXB;wdu$_k8`>;<62FrTM>puLpcZ~ zxp0Jkx-?Ad=I<%L#57v7c=)j^#*8f{#pXR~(^$L(bkNYKanG3miPeyKmDWuJs=W@l z#NhwVf#c0!l2nAl@aWOvVaI?$1O?a9NKC`z8x5sqQ&!GnDQCivQ!;_pqNWHhTS>IU< z;c;;VtP1S5v_!$IBL`4)Z7T!L_r8}bdwO8OVV_g_V+Yv_oT$kd62?hELfrfPbAomh zI;@KN;)dOB=cv@;yHwY!zM_es#G_W5yT$d}!PJ@0(ySI8fdCx=R5I57j%c&pMWTv- zCrb^?+T$qw-Ebn~Hqg1!i(Vh+pZ=M`(*J}Om-y>!@&k9_Jl2hQnwb9`!l2-7ry8w7 z0$bU0;JX_h-+A-B$6odH7Z=S4FOS##`?Ldt#|QfSsbDg)Eqs4glNZBnx3K z2J`Wz`At8x8Y=#R62ZY&4UO zq>-Hj%eH<Q4=#3XR$2aR6u|BIq?L2Qmsayr0S_DEWbP(vl@yJ}4 zVHl2?nW7^Tv~wt`Y)N*;<02NSugp-%$Y7XB)jrSwgk)YhWEs8$R2QFCumb={64F^~ z)~czh5nSrLjY8PYPh4m+LD?&&RWy=tMXq*6BGel353duKxhKfYGBKLFLeZ@<0;;!0RCnj9x|q z#KWiRuPWsHlBE;`RO5o0oO>o(3+0#C@V>`m5m9>G8#YMJf$5f;nPcqel!#7hic87z zr0qers>AYQp}N?A>x>x7RUuVZn?AKie9Tv*{!-;qtOhYiCjhsI-1)-P)~UzQARI{$ zE%N(#w}Q$4*grBal=s+ zw~$p-(|;f4pO*xZ5r2uRuALAGv%&Y-RUTYLZqrn1Pj=Z8<3H;8@waxwkyj$u=;~q+ zU20ZGXc=p8=Dp`E(!~{wXI<&L)2W!^F*DTkE1{E9{g+sC+6+o>&?s{iMZs@&kDIP# z=xv8)R*3F@SzDIOFrKToc&G!OVbC(U01RXk=|n~Stwqnel`=+ShLCy3;`|ahD?qWk z1O)b(J!fd`3U;K6q-Ho9f{FKfj{ZmD0sYj&M8c*_@Jg^Nw~VZhwKd_x2c8@f#KE*} zF8m(QUfz76DP16y)(rBxrOLWZ3y{TRHZ1@F-RjGKelp7FPxv+3qpSmGR@ovMk6l%3!~CA7&V#QC9lQ8K*3*o2L>o7GKqNDvVgvchAVEnWl@Hu zRl?y^aPtlgU>Gw-UNS6EZ#BQFJ~GJw<%Z?$G=uIrwHA-U-*dw27i0gRJ{!c-iE547 zS1`1HEcxb!QRgf(Rk{X1-X2yIDBBkaVdj8NMU({Z-(Bhd5PxgWMra9e#_9^d9zZfv z^Q--tEk}DRT0w^0nkCDFk#!LnlEr|^b&Ot=;?o52Y^7KcsVBp+a4n?vpf-UJ>)wkx zJDdV@cHy$nVPaP~ZnmoN%sfNeXT>^Gq#j>?A5?D!X*EO~Ng6diEs!%U^N_mxUGM%? z)Gl)FKlhe#c}*arq%ND+}EPDsnmv3@{t+LP;L~;cR$PEo=DBp@o|p)kM)e8z??LALtK% z7ZR4K+D^1O?aHZ;4ipLNnTX!&r_Ch;Y+uSTDPaxoApdvQ_NuJ5)bfD}8DHY0}8s4=G-)M zhEA@r?$?NDUo>zcr!tZvv_TEE(OpAZmd8oICYlNTI2ETq;`G>rbE|tEwJRgsJH_x( z6K_fD|CUT{?k5Lnaw3O4@w^zau%Sr+!S%n9Usp8qR~U5xP| z*W+Ld5j!(p^qa+XH3H=LmdPQ1k19r!pTM8Ne8gZ25hum6}tcT#|sA-7633(qr81c_@B=XWSg*)U*`a z%Nv}HVMeT})$pWQqk`yaaRsFIbvqVQ1W_xe$$`R)W`{~d4Bql8X`8KIcBTRVFqhWb zCQwhyRnh16Hzp2uSxid+v~%{zPo#et-@Hq>CoDc!jX=W(?H=Fg3A3yr1GbNgcZybJ zgN8&hy(I{@`iv&IQi8{SE_<*0Uu>|q=%e~_xB~uEA_|*+Bg;|FFHLKeb;xf?K-17w zDsl8Ua0lpNPc{+aUjvvVom44m9S=+;F5w5TPe6XOf$VTWrqBx2u-(jiNeEuKm z$_k1DNC})u*p3c1pxQWiXg7d5y00VgJMjSkqf2}8JV&;?%O5>13PxvW^JkO-IrZh{ zEFf7*U~dq*xSU*nCEnVbhOvykSk*ylG1{F;!ibuf-mFDJcdhY&R89I-zSk?pgEc*9 zEY5Grkd~KwViMF9zb*WHX4x+%09uo;)EX_<2#tMZw8eQX`)`YQ<>1oR3~z>#g6 zBLB&P7K$%BmTc>pw>cybX4*?p!OZ!$e`BcU{+HK*udEh-^nC91D*dpX8w|VA@2N!+ zCL&q#5uJ3<9i?dBrG&bjj>hefW7yN5`jnaT6GJvOjrwy}Px= zM)p6lb%o%XY&Fk4brCIvmysZ}C5H#ef>d(BVZ|j@r?V|t9b-s#O zDdIQ!$*JG)jY)UJ5dKPVR}svAhs#ouiPUwcb;f7P;~%BIGhN4b z{CGe2P=5Yo@R-KeD&}C)LK{%@><~2t!i*s1RmDK@gT`9_a6v?0zGGH`JD+9F*!EQq=p?HiPsQLC6 z>bUrSo>2&5boM40%T+1)bXw=VX91q44dC4kQ%8-cm~?p6puw}>SJu3*)D10U{r$U7 zk1z7T9eOFy#Vq#v8kNA*I<5uT3Ko_p|NmsBdT{Q&F z^QAwh#?dPRX_oe8NlIp`$^9gT>vB+xSf>zwBW6giE{VBk?|lx?i{>TU?M969*w_ec z1R+hDH2|cFhj`Aq0Ak&xm|~J*eS8Gy|zyzehb-}9KYk#O8W$R{}AXl z&+PZRJ7R%1zHAG5Iw47STm*u`k2=H9gmFwi@Fb?B8n->G?dmj{N9RtY#~+aI8@*$H z*l!f!{~rPPxGD}$%CQu1W35jjU%3Sr>Fp?Z0lb~&2XJvR2{n6;TPRpuSAmv4E0Mzf zJHEUejW?W-SJu6R8`{FBZp~`0EMXiq9cg}lOP$e4Rq08Q0kR^+W|(c1F`uJWK>+K0 zpXdU(lIV=fYx&%O%pex-85y-X4}yw+ySzT#P9zE1*j5u8VeJz-=~3&2_C4gj)DT@l zDLbsot>Pj&*wC%wd6QHo$Eb7Ub1B|NlF4>tZ&$!XZd+pnS!fTEN$ijk%T;W6>C^YY z7`UN6!7y6nh@CW;Z8t-=`_sAj3E)%*E}ottcO!;Tli-fm{%#b(;o7mErAI-3TWw?# zu^3?Kwv@TqjI}ZgJcsGHsp)w2(yFN`6pj;{zRu^G!tG8LQ(!Ncj?%N3pA`aHK~r?Z zPRfQv*(!KuCzFt>Ht=PuDJNrw|FviR;Jkl9ZGO&(Mg_?WY-{tvpF+=} zH!lt&7n^b%I$-SBs-#R)_3e*;)KX=fHr)z^6u?&11`kNW@J6wgW@6CptkHj(B$+pr zj1NV6C5=Dn!%gInI0a#f@g`KjS+89=URKy;LuidyEfg*Xg*9GkodB*Rk>nAQHBfKR zCv`0|cDW<*=;T5Iacty!OffI>w|c_QfK|fh80{w0G^3~f?!qy)b*J@zf?W{|xv_yo zuBzfA8lp9Q`IcFA!iaaaX9nLnj~FR`BJri?5)kw@>?><~!x#jHYZjF;eLrUeG}xpw z`U&Z_DtviSkA*r+E@06~j&eMRyDs+vKLO8bIBy))EtTwRlV|aCzyHSFX9~7ch``{g zC3htK|BVqg&}#?yCz~&S5D!yjm70`U?{o?@YO)=Y>+3~O=Ir$CLv^Lf?GkOnKNhT=t98h`(-sNOKBHbCztGP*TqR+MIqy^8Q?Xp&As$915vrM@5V#O{Z-E3R#c=b~NEkM%0W7gPuVZI17 z^xbV%iz~i83+C}Z$0V#sOuHt=un%sB$3U(ukS_$jLFxK&Fc%m$M%(e3mM9QbY3RCX zcn<$%%UEI7@E8?jtenCB2Ke@SFzS(OcIIG1&D z!@{nC+gSxmPu>$=9dDvHyXH3h#O?g1oNj=LuF5?JX_@i_ zmMK+0;-0#^UJhKae_@Y_&4 z{eXijZus@s9*`qb&kab7ET@J?k62CBNpvB&JED}tY1isg*SXR}?Zy5kZjppao&b<; z-0^rF?S{=`f6e?iVo@U1@A_+wju`G8Z3E6N5{l9t8!g_|8%OU?-W5jf?RIS&(X!0J zMW_yu=+_;MWV~#~dhv4DtS%DUf*?>#+fvo|Q7ybi)YKB+z7yU$&Q1<~w7TT}n7MBb ziRf~C3VOv4&;LsJDVp?u4uiPHOlpk}>e~SuuP_y`f1O;?m{>F`lI7KYi6QMjiMsLD zmYQF?SN!ir{gAPVP7AhTrMrt66u5lJFA%PW?NULAut&)_^`lGf-%M@f2tV_{(_)n? zpf!Gj{cc+xuFykV_#*$|JjP;{;Zv-$-%CdU9#>||s#a&r?%hGHdhCSjUxtf~aE_qD zjzfu9e{FvpuA#XfB(GrFogf`_Ff^n%m9L>AdGrWsE5Qjwpabj6k3T~uh;9Mt2AI`W zw>MjoV0Vu#7*nyRw5N{*Xm2d$aiiT07V_DF>5~GE=y(b+D;!!qE<2%3}UjIgUi4acV);GgwcX#)QkVGdX^o*2f_0Pt=4ibU8Uo{x8R78QBs4DQNr@~M=| ze;=PvVwlRmsFnVpPpPhN1plt@3yE-%dYP?v{D;CE%>IMDu$eiFZ^~V<8{n! zjepl-`JZ(hori0y?Qo?gXy*z-8ctp55$ShhSXoqC+cxHyTxmlym$fsJ43E&l7# zc!D02_}^1)k&JC`X_)Q9G}pHrBYIkAe}B|`KPrE;!L5Cw#J$!KZ(pqsd}zi&jpvBH?EAiKnB&8Xymee|!F> z@nfSq3{k^sCP(D!nk|`06{1T(<`r?+ZyW_Sw)WqO3wZ0QpDm$j;bV_C>;9CcZ;@YC z)3G8s4W`Pe zA?6>O-)ty{iZ;H6S$}!i{&fx~P5s4IfJa$N*dFT^hs3tZVtJOP7{i!W$~fevv}NB%m$UBCona0u;^azOOZ# zQe05b&BHI$a0Lk0nGtbF)3V@96?7kmfKrVeggsUiF?pHMcqF7Kf0-{aW~os-o5DcV z`N!=bNs=Z8qXZhc#6cXYx2rKQS_8ncEb2Tf3Rij`aoeV8vqKqTmM8-+=;l-N@p0gl zV#%{p-~88xIEqL#he?Snb6>9jROHc$+|9)Hgb_{?0oBPxv&sB12uLR3Q2;b;$V(H6 zHkITmfP8BB-kPk5e;>1F!_cjrZn`f+D~uG6gnX6u7^3D#u-s)mWZz|5iyKJ7TQ%s9 zm29O?QC!}IqHqyb10DXGB1z0sk=!6uTN72hFvS+JnNiL8NbixWSukd_^rt=Ul9DHu z*c>yDf11I~kDepSKQ9m6cM7ejF)hj(FpVnOIaP>T2yo;ee_&um7Vs=QmQ|wk+M`W3 zpYju0&u0_YB!f*As#P`a=kC@N0|`X(4%VMMof?XKL7y(x0a}~S%%}9j`g36SdY9Zc z@0HSsKEQ`HB68E=!|i2N7g;o1mTNKCsa8dg5n52E(OgOOcfV9Mo1}>}bk`B@rQmh^ zoqXEkNWc^6f8)`&c-slFjmKy?R?;y+i;tlhQnQR6PT)b}e8@Kmv~LX?!VfS9E7ssA~I zGO~a>Fx_A~=P~rVpOCyRVy^LnnA4?)$>cM^$rc1ze@Q9CtOZGCifemmI1v=)k8mdw zDf$VzQN1oV^e=+(5i;^o>BySmyRCP}0zK-tC>49%*~J0WB9|e9w;%2;U?=uk7jHnI z(q~fr>-}B;D2+nc__b~aU~t{LkON$TpWDV0cEh#H?r$u!cE%5lhV@^-Sj0dH5;0eh zu>uTFe+XuhA&&(yq+0pF)Ht*R6HN%JTod<+`9Xn8X9;7U6KOh}m<|ysy{|xS&wJh~ z86FIpbF#Xu{6)v&qX#-pxthW9)o__V0r}xZR13}u%m2k@P7zS)#4RYL&OdAv#eW<= z!5YFwd)9^_!XpyB{%V8nxREaRuZ&We!AFwje~_SUA^urpLkB-%3P^L&S=h#nF9j20 zxvTyjs*)fJ1|GS403po;qaT0Sm4!M8W$jrp-|tL@V|KuLb=LKjYJxQ{l%iL*c-qP% zs`>JZ7A}RK>BgW>LsK1M*5j~~_I{CS1AREYxt4aU+zQqBxjXMB%HkpT3O%BBeCgQq ze}<8dR?+Fergvz(;bU}hw9#92yR0iC_vCrcZN2dsK~PRbq*9ZBcH zdm^T-{fr8zqeS6Gb}V(!VdJ>u7zvjs99AND4D2)9TfzO_M#IX)kW#V>5;83Ke`-nq zb|~JfaDCEfOrq#Ucb*BsF!Y9|OxT?1<+AbtJ2D zXz-J()in>uo_}4br}ae{!7Ufs<1lizGBrrHhCX=LeYO z=-9yKHFSaRG~1_K(^v1CqqY@ge{ylLeI}M%a8{RFRzpiu!2i%Wjb(d->*HodzOjY2 zZUY+4!D8x6Y*>bZqg|}?Ir`aGc0MjaYybG%e-X;uduR*JfmXKr*Kzq;4Ixz3JtXSW z#_YD<+4beZitx-FK?2HpciwCJRLjN>cd9#AHOqV1Oy_vys)qqCP;Y5Gf9cJ~%uJ6| zp-Q@4<8Bs4n>-%{BFZ$?nme#YiEkElTIuo^zprdtp@9aZsLpA`2eE>b?ErS;4#^u z;1Y2)ILFtcLFmJ;2yjEKfBtK{LBq;G?C-FsHhzn$P9qUpzc?myHw>qpAW8E9rTMrq z@X@Diq3MRX-;hFmB(_QL0lxv!QE%OmarpfP<*=yYTV{$Fg>XqyyBa)%-q>eA`J!0E z$#w~ozfO3U^(m@zZU!X;DFs>Q>B5XD(T79yScOpDlMmKyQ2?rRe=`X+H!Saz+XvV8 zM@jf`V?g>B^yDWxU&EPrCj(AZ}5MJKq?=cL{uGJ$(qz~{Yh z)hPP*deQ;fAHBF!4NRT|h^A(M3X8_#UNY)Fn>X;Dk{ zWan~$MMex~9nK9oe~s5fGq0a%M76|1=@c)QoF_jfHF-U-Slex78%CI&8JjB&_+XCj zbU?06rhz=*ZXUxNgf$p)L_r_2qTW!=N-vJwT-xX}FrtWKiWlVFTBJ}SOWNw+8k8Ko#&Q3cr+csZHf5ni9l1nCt3V@_zjL`sYwDt&2;72nj?ySpO*WD$q5iAp%K#yV*ahe`=jjl8*Vv7anVQ z0~{ghflT4}TTfE+$;DYKyz4Sw2qp+GDb5W!KADVUGs@~|czx};V#CK)?Xq`^zsZJb zu75)mSkzG0f7;~q<)3{_xfdvbKNc+1MRjW>@~?arefdIkdw=PlFxcj3=~4t0W2}r%Tk$?sGH&TGU=Me;J6q&@?fAup)p^*P;qqgkWS< zh@okS^J&22^jd!_zYCdH!oPhOQEj*j^3H z?a@=KyPS6u{tg*+B4Q6#8t-Z?y<(2*4+m+}AaywhU%kNy>Gaxi_8LTMOBY7KWUL&xFGy;i{`B%$=WtfmQ)|1`#hrae(LBEzE11w32Fe(?nr+>D1rdPm^NqG zeK@YOnrFvBR?MK;r!#rsGUehv)L=(f;GQ;`j zpp53*e!nE`)m%MOm&V!>vNNcn5zRsvi21UGjQDxHm$yWF?x}4Ryf)2(LhnaU5niC> z!7V}1wC7b|U9Y9RX5Y~~GO<2v?K14tKGF;*T8T15PR7DMX5d8{P~&zHnR$xIe;{|U zE8CTAx~LP#-j3wEo;+C8f^MnHXr%l}kIF_{yc+7S!@PxfqKKk^ssXGQd$u{ZO z#9&ecXR`uGt#!Pge>;Tl2nly7#%IRq=_pKae2KdUG7e2td)v3CP>@gYj?Cma z0+w_GHgJ5sPz&cym#`d9RZjgmN1E_^6MywDH@;4?w(qI)E?@$aa`BR&e5C_sQ*(RU zv`BEs#OZ7h^?aFgdVbeOhg}4a;5M-5Gm$Q|pPsdfOV!6}`OPA@e?k?}zZc%Bdc`_t zt(Q2#T0NYWb|h8A-$*&8k>E37`5hB6EZd{!aFW^)7v+ ztEVej?n>^KyPG1!Z;d?p>c44uIe7-!KO^FJ=-$M72zGZ3qioAF_Wi zy9i&~3kDv`@YZ`v7$r6WCdj-UeAm>>=#a(N_cn%qLyb^XToS5^)`AHsmKJj4`Sz07 z8T)&DBFV7CdF8! zn7~_JP8lks!ILIYU_YFP8SxcA;mnyphIROQp}f6Y$z_9;VNoq*T+*FTu(r?u9t z*q2nZ+AXbHVt!0p)y)LRTs>R9hYV=2&NE#paTvTQauO@|f5*MF9=3UK!_HVCg}Lqd zM~TAUG)IppNLy3CU40@k{}m8+xl#FBpgKfw-C`zFp%A~Fl^N|v#LnCHxx=~P`u&2W z0tNzLf4XV@#7Db>>*7q>qy~q=31>H*E&ffv{QUrg|3^R3Zg=C1qkePioO%5cX>L58 zk|4^C*y}r?jeRNwp<+chJF|Wxw)8oUjHzodG5Roy06aS_+$MTIbJ`XI=c(sh0=LO= zrXu)V2$-qGB=FW)%R-%Kc@z$@LGHs(W2Zzcf5bQPSNMm&bfAM3t;)R&d~LmvNWTf2 z_g<(FH@&xsU@l4N-&?3Y1(uJEomg6Hm3}yvZz1O2GKG6_D<{$=7ZB+%UWs`geQ61lq(&9Ce~$n ze{0Jri|PRyKJ|n3Hrrfyv*xa}pv-3b2k(@j-jRBn=D)ga%?6OTZ%Dcg3U`~( zVB#&K>KpOME5L+Mz^jPA3ArGtVs*6dDo$f7t2G74IUH9sqJ2U6DxabqGAvj4QlFZD}Ny zbPvEcky--h>EfA3_dgJrdt9ax6~LdzKw% zNBvrJD4nOZH`|9NH)t~!)nu6&JL3C`fWS~eDV8ZV-`+MAlx#D^K0VulKn{Mnf1(w+ z^38O?n87A!tOFtdvm!GPKBcI%ByFr@Zs1j32G*o>mCbnkg-MALe;J~-QalTmb|_+j zCxjlh7sWGz2&cO#0lHx?Kc*d$Te6So74Y-<_r9TuCqw#mJ+wJ#&tHy}E>e*E)Tvfd zUCwD{E|aPfK0b6H6LK=m7!t>Cf8Sn^EdMm;U_boBfS$GNsl)GMQj%$V57ZTHG${e^ z7iVui{EE0laVWJRF+)1 z7en5KPhg3`sH6&sBOAp*?7py#0xbh3Q) zp^DJqZO)JjD*=5=@y!kD(I)`|p3+J24^EkNmR`=_IKIgc3Uom2Y(y;XA5tjx&Fr&A zz*W_Nl_o>(o|Ie>uF(GW^tgzF4B~6m~stpTJ0yRxuo$|B6#iD1Zwk(9G}J zma~m35V$odG?p&}dCakX=QlsL*NJ>sm>iY(77@~Ris9-7JHOoT68rJA;fuk+If3rP=Xh#b^$r(A$CAJrkUEU?i>?n26=P~$NtebJlx~odY z3~J>gP~F7=Qx>meQbWBNQk~an8-jADAl$9vDJnUqB=_Ofq#LxU!YTC06|Bv6(p`T4 z1fLvg7C*Xo2$Mz+&hVNdRl9wIP5Dq<+yq$L=QXiq*IRc`e|#A(7pfy6T}B5q;^)Ex z$l~Ui$=Z0ugnkBJRAFEY5F&gZU$a!C$-^6mL36#S+BSG}dFxf(pQBYbNc{zWqjh?p zPhBOSoPAwAPT1X8HkK-h<}iTLyVE(#oysK_7RP64%tg zVAO##v-npH0w9U-YR6{7@WaF-ZkUICBML!s^GDebrN0}3j=OOgog4L$c+ zV(Yul;D8f>Ft2|WC4IeK^tl7@NHd7e=J>b@0MbPEf3@0%GCceO=dEqke{9~*#!P8) z64HsgmbnP_il6LnlkNL*GY^c99yc)d5Ab$Rv&^AMg;Y5%ln}Ra#NQ$(jcuNS*S2aX zJ|^kganAcz9KGtkiv}~K`tbvn(n!Sp7KEg=}BYwG` z#pM5=?@b_n)zi*5{o(aG4i#HtJZ#tZ@%hHqF|J$ROuxz;_2OMFkD%dmR(hk1;H2kZ z#YZQeUv@(2Ffda3*QuI*B}8_%5X$~KeAE)3oeqoX?Ry6m^_%6c7~2*+lwYV}O&qT) ze`Y72I4{^px;tye0$`s@C5cm3v$@14#zJ9MFZRy<8XqNo;YF%1#M^sR0h<8c&>gZW zXtS+bdnkL}Z(^zRdVqaabQ1=LW|`sK*ov0r+@s4DnXcoEEb1=vTk?~K&g%L`7597ZJ4L+f_m(o#!ckKbM zrqIL~y){%>b#R=QU(TWf#V+XMbMnF>G_8++T)Zj~8~7Quv>nXAJP@Brp`8?Af03(K zxX_?hCn>M5H$Ka$x1syyIdwh2??>2!hYNWYt?O2MpKU>`2gmRKHgpNVq}X#V?urZ9 zCp_TBuao3n;w{XQpVn7aS(%n$(LzQ<1}HOTmO6#_aRkoX@aOH!reSLw5ET$7+h`|1&U% zjuOm0Yv|9U14?dv?xFXz_%+K73|Qv1F;)>;6z&}WR>y_3Sd|0Ip<>^nT0f7mt587^dBqT}k`Rq<1}M_eLfM2QE`TiPgUmalJ~7V0-qxB3^|EOe;cI7|J8fJe`KakguftR)fPEoKV-$o7vx#VDV=Gt@9l#${nYlO z#4Z~00vny>^Ue)Ky4T)loHE}K9{%j4)~2C@%NZr7ee_sHcNoj`4awl4>}O;bl12QJ zY?XdZG1HmNs}@hmZ1$|jGc$}pXbu- ztOsIys`zXYCBw-?+!Po3QuEfkBiW@KoV6MSvsmckAC^WE=%2dBT zK2!BOy%;_Y1OJqS4x@Q&L$m+xS7p4)et4Y{1m_S(Ct*r2PWzpNS;&8XH)R)b)`WWI z11efQ0~DMIL}AQtC}ubA(w=PH>Q2Cex`V=$DEJf%e}c4p;J|Y_eD|?Itmb)pCuuj* z%R`zB@@dgtiI?MIu&rnYB@u06e>fa%Dv_RvywohEmR0p@Q$G<@8%KR!BR*j|G?m=L zoU+sf+xNU5NE4K;oT9N!QPqfcf?63cn#n-Sm`GUWZiEO*M`fv_Y5JplrWcve0dlp; z$ifs8e?A)P&b{u2U{ANnK{zlzahu&9XFbDNgdHq#ABrmmk*KX+4jgurP*#(5kP3;r zLdc(iDxwEcVTl!|TgoTcmHz3j21pGskUPxeRfr|Mbk_-}8&Ov%p4V0aX6?1Z9JjQ? zwAw$!sROVoG&aKZ8n7zsl6%g-z^(~+75?Z_JXG2d zRlo>uZe;;)w=_AQoJ^g&&c0|jW7j@&0gwLV-cBm5-(b*U)JT({aMOdbwG|t4>=JwZ ze?E{LGuK^VhWW=aGrvCTex-MRx_J`;%itrh|J%~cTgF`TgUGA&t(;m;4A=Nmb3Lhe z%u_}a5xro^h<*(8wggjVrZ;iX1Bhm8^YL2M*Ff%&NCv|Qg21YNIaf=qe2m%-niHWX zgOfy__W?OCtIESmsgA>{!M_=@ywTWTNI6yIx zoCqSr60e!CIywS+b*bFoq}x~?#A7>mE5ty>TjuM+JoM$<7W`4lU)oEQefA3uVNqdH z2ZhsW=mlXNn?mzk=p$-YOL_6F&06;ZM%<8+Te@X++ z4*;~Vwf1A$au5(aH&PT8Q_eENK+H!cq*n{u>DUXr{U4R_QY=1WEKe?MeOkqxIbVta z@t zS5Y%s5dEq`YoH+#4gHo2L5H2ee{2DQK%>9fr8D~@`ds_`W+sfckV35ksmXw2`zv}Q z)|3{%xh&F%1rhnSbKLYJGFevqCFF-XC&epjxikbjURRM@s*z|@<8MKR*a>=GjX%gK z%SB~~e67!AEQ5&kJW$}nQracDu-fU&JB}5F`Ugw9l<2$LFj~$eWTfbRe~0{&n?saT z!Oz`kkApBKeknfsL5RHqRI#jv|E$`B1#%4rTiU&g&v{~{GKUy&-=h>lrtkJw$)PT8 z0dfhVOp`aEH{FUA!ao|w_&Yt!jdws1p=bL}21Utyjw$F2kGF)2MG@D$Gk4@PhGf_H%7{v!(LC;cYexDSVSO zKNDZRQKH|19Iz?@;nw0PU`VlY@7CkoO~Po^JCXhEp$svXAL51g3oGFi;`i538@cY_z!No+9GZW6YeDOXK#`rZ}=Ue z;PQ?}fO{B0uw^YTfB#H7%5P*;Bp58y8>yu+(c11G!iMg{NjjWxJiTTm2A)+VqQ}rw z+XHu-7c&(19N?@S50(=62m;1V%;7qA;u`?9C{lsxMYqDXUJlk;BcRDPIb#EQCjwEh zcm`g*Ebg#!$=(l6OW+59mn|v*e?;{Y(%S~+hn_kPCTmzge=I8oAr`}1!~>1JSRMj% ziZ$aCQXrfY%ao)piph}IZhz`zo4JdcPY8L)ad+oD??ttB4?WFEfxupkUn5iWM}xK; zD|WoGQkE+e7FdWyB8-cJoGaF?Y?bkC#PT~0c`CbR4&1nS3G>Jb4cl0oTiQ!nGCCpV>eY_wFQ7W{PP*e==MS*#?OyZ1aS61^X~r=ER6< ztu~!XV=~efKO$aYz+$zu;vLSWaf={=>EIT_f0k6~Jo{C}{iozYq>O5$mx#Fa{IVvH zEdvw}Sx>+}dXLtkt^)A!$i8&3a7Le2CT26~bVY#i;eWj?+8d%4TAUy)d|g=Cy2UnX z0YjTSf6k4Rii;kywGH`=3RInT_Z4`AOnm@xrM8t6eak|MM3@E;9&lp(f3MA;|+PvRBQGivXXXccWrdSo7gx6O~0QznKcn7YGD{(SE!G_{{|K4 ze{Zbs7<37Uso#C#kS0efD?h)~sN~+kpl$F;=}Mz1O6eDJR%4`Rzx2`fO;6@nRu-%Q z2y68?0k(Rx4qhbgIFgyVi{HYdi;`%YT2HB1GMn|m#GPjCf^|XV6oD|sCohu;XYp)p zdCZ=Ha_K3PIgL_Nl*~IwCPr$baAMhCe_@z}D76-<*dVbSytFk!CweymA({H$BmFSR z2~x59;5!wUjPl~8*i6SOJKVa&Y>+i9Vv2Ewl{}{28enxEhoF@3L%Hrn9K68P!u@uN zShbL)DOgAy=&D1%!WbrPP8bE3m!31w8hR}P6pz<8WG8oMw=MkAzTH38WWIp-e|bxV z!+)@%(_wWyi+tGAn#78@-Rglf3xBFCEc}&Y$v{wH2e%0Y8F*4&6#xUq!tAY`=dZW z7y)9Uzo3nYLg0}@;fmY#$qHpPk{5MBb7TJH($aUI?U@^>>mpAh!x?bXA{vG z4$ydm>p7$jFoJ*+ELoqQZZR;#wOyJT+8z)bxK?>&33!(e2@$Rxm_nP~e?&gkP`rZ9 z4R|529@QFlb3GYx9^I9GmhiP9?4dV%u+S%sqo^t4D;=|AhwQDQ`51Qcs`zg!8z_s&6zzN~bGmoTL)@ z#eHpVrVKkE3!*Ql=H_IOT~dFPAI!{p8j$$n`tjhokWH*)rE?;dq^9Xj`jj%5KnAPG ztbIdb$6U#s^J>x?B(%=NM=Rv*2bV;#f?vMdGB#MSM*JZP=t;nIe_8-2=#74b7)1WqM zvUYWd+Yb8Q^F=;Me?fj?5VAF(io`J?3z@Ajw~vgEcs?9fvH<70+itY}nNndclK}#d zu@@{6mG8IJ8~a6T(8*(-gM$-ko-#SNz80Pqw508fA^wnPOlKHG>gZ*lh?77&&e-jKt{D2X-c9UzN-^$O*SQw(3e ze-!^41J|?3F&5+ixOWwTj(4=OI)!&cJ=TR)NE-D(m=J2wBxG!qb+&b1E_wFfDfls-0~r;rZb$XRV6_;sa=cT>mg*Q|K1XTmp zBOf^9UQpsu1?T4(0+@i`)wl%_p)ZM!XAP%9LSARh2i4dWGl3iRZ94A#V&oQYUhXq@ zZ7R9vzP6XZem-Ani9%NBOi}?4F0|GeMhT=`Q?@cRe=*7Bsa!6XmiBOJc^O&>_TY#I zUc^s6e+QIZX5wl`yN*f>zouF_dP4cwN9A;#75bt4`N1}KjJ(c^ZLs>n9L38iLhUh^ zxg5hFe>8WC2KH@P$}fgwrORJq1cGeUybWoS(nJxodR{Q-%ta@yZ~wm=vk7Ldzf}~J zI0T7^Vix-jugFg_T3LP7`c})%tWgU8uS+!5e;)ee3i-R|&$zF?O^zb|2{O6iTHU@s zsKqUB(c?k?kwyFPi}}9awT-s|3W0lu)g#)yNnzPjqr90x7VJ=3%V8UoYEyQ@R5ufX zSrnGe#&0r)IC3bj?ORF7;9#k4D~hiJ1&FX|I?`Bmzu2CzwnDS#v{LPx0LBvbrT-$U=tYxmjtp{g653<<^ zPQAG!DPB6;9>o}&X&y+hZHctIzPv4<&fUUPRC*AZ%s>cePtE1BK~~+^j2rm~y<%_? zVrgAfU9@hUt4+>t4szt*VkPdB;pYa{f5}6@x;}b|{f|lKo;Msdo+SFsz5W3MGpe`> zLrJulb?-*~k@XLqa;PVgOXWKUC1bS>SK1(dGuvq&z;NB<$!l)M9;(`^ueu#?|hwg{cT>46kJ)thrX|_K|}VRi6L4zM(QHy zJc8{2au*>Afe4aja)WNJ^)p&Vf4gb?wY@V343>qtC8@O25COTY0*L|&H}CzyoM>dL zxfKv>ADsVzM3n0CV#LVuXx-LrKMLtbAy1>^rSqy)m+gsR5a$;W4diT|)?P@-zym); zikS8$_g*lJ32!mZnb3tR(S^+af3ey;`gYS%qMzs-e+{M+uj(!zL}<6)e^}HssNH07 zoj6X`%X-%AFaHRsW(K%n>*h;8HJd&+8mEEvoHHUgw-)QKwC45KkZKMHApsc@Yfj8}UKrsCv!wdBB|gocfAolhXo45gobWg; zW#ET2)YZ=Tqr}8EER?8d7dL{-p3^R$Moj+HyWTY3st@%%@CLBnVTH0ygs za$Y!TzlV0MJ!37p|NE_-a{Ysd(JUXzU>hADfdo2Q`Fu?R80^WviGKfWN$!tQ(yB0o zNfd1(9uqkm<2JEhf2A0}%kyLv6YonyVX=sst%D*I%ll14=N>$}(M1^{B8Q09^GTLLcJP0#p1ayfHDQ%P8mG8{aPZ@WNagqC}*|g<}IS{g2XDHzyjjXPY-;L8;+qa5ETc1sm_z!f02ecDETOAr;wfrw?Uji zKc)8TWoa^0tDuesO1!#rjZjiFBn(AjnQdOfMq}&LLl}2c;qkkbA=$GSK(2o=bXCpj z)=k>2I4EVu7t&(XHaW7&wdv35z#(v^zH2!MXV!LJ#Rfoxv8~85 z)D$_50>uhiT&*pP2d#*UgbYNH7lz48pxOuOR=U}vqE{vakP3hV|Od& z{A~S{x`Rxee=)m?lvs8uu_Z^-p4S1{_yUb&FKMmDf9V}k2>rBd1fxfy_woFaB+XPt z<{6~(iF%F>ZeYkGJYk`%4MuFv=!@<4X2u%kXO;8G8eM7VK1~{?+op>>9|!q7>Mu-#1}F*9lLNE<<|qfI*)O`6*4Wy=+hHzlahT zz3Qsye^cD63LA|}xzA_Fy_AO-N0!1Iq#D}~HR!FpSF6_bk=kVwiAJt-MXxDmeT|Wz zBR(!x@Q)teGa5Lc#C1V>6T(}EV9+|=fi;e2j(W`w)XYZAGVfC6q}{M*YFRalT} z_*|5IuD-8%?Fq`uVWA>^tK}{l#k2PWW=}zaf5K%T4rQz5J&4ydB}!7b#(W?3HTGv>09r6Lu;2^Q*Vc3@K3T%0ZI z?q}P1Fht4Zpd&LCCBOfXfA5aKD0_#!ctH)BI-PV-&K)Jb#+3Q=mnInIGOMbplN&c0 z=+?sAPmOJ=YC*2h7+qQE691hojsbcqZGH;G~XNQcMO|CkX` zgfQE)Rf9aT;bVO!C;_XZMmR2qgPk|c@H16}upsc0pl(u)<6#qbAaGBT(fZHITE1ie znqOg7md2Q0j0exsz%M9qLE2bF(gtg6cOSAi)yXGRjUiIUM*s$IB4`+D&Q&0&e*`Ow z_juP5L&(9-oSz-CYAME@O)eX?B^WnzC|_hr9Y{H)o1ih_S+f&^*)R?H%J;rA=WD{< z0-zX7f*@*8%BtluhA-&!?}4V*%MLqH=AQDacy%VlVGt}xD8ZbmhOM3Rb9BRCCV1S9P?At*x*=sX>M$t=wdIHY2-#U9ki`&pi@*;(m3`qI|DJ3@wjd1_l)%pO6DWOT z23K6T%X5z9{M`%671ZEYy$u~f9S(0CQ<>s`L}gYl0(dYBYr2xfN;RE$f3+}dQQ0cj z?cKgJfqX^AM#p1-67sE1=jzdS?#P9mWLZFEn~ES26V8p2Hxo;N#)5i*p1IclF45m9 z)}#=0x^JsKlN!@%AjUZC1weLDw^nHq9N&VVVZlYI16`*X5z|?YX~VWsyxHMsT0$Et z8X1zumZye*lx(xy5T*P3e>TFV({^u4zgvd|LCk<-G=)0xi*DEX0SXKyt~Sq4_!@ zuIUABLS(pE7Thlez8BWT!lZT0LmMr~WDL;la3~3$KZy;F40hT$T=+Gd2yH=!W{T-X z3H#!b9vx<;B~%JHEOR_0~S4oH4<|GnJ{=-do}3&Jx7bOd^zfAKXeJRXI3f$wS~kL(?m z%$l-{xFrE9kmwLlm&9wtTCrjq+Cg68N2F)huuGgGoaC_`7Td--cvP+>ITa0TZS**ddO%~;R?CBo(A-pv4!&KN+;wt}*fZnjxYes0De<1&G5L7ZQHfO(}jYR)CJhq3bTwILZ9e}?d6u`mU?v!>+ID0Co`FnG%QBlf?E z4UZO)jO(=?Yh;UwLqfV^-XW7`O{v%m@0ZYME#kCDt?QKw{Ti6EhM>?Q2H1|(3v!QV zfm8%^VKTILM@}FD`Z{nvpEFQ%bZ+#Oq{%FGVh&$Vq+)nyrX1>P1W;`ew)F)AmrKUR zfA6I!2J%iyZHq~I!}sq<_4Vw5TO`UKLPChOGe0~TwR&&{F2iUQ=Ec6|ube$jBHDo}kx+WE=9n#Ps z<3_Gn1T<)RR~V2PWGQ}A3I_Py7k6bBe=^*L>hb0@J`{vrfRaM)#`pnMj1pKTjNZxLsl_{Tlfj_OQ#Rf_F<3U32|Aqk)!=aLayta5YUj=^Lm8!s3%27k$c9#f zz27Z1;2T-v*&W*i<>-ASQ{~mlr|sozs1PMi%Hbd6R{(Bog*>yC%a$nwC27F0e|9!M z#6ju2NN0_av1s8-9O+!Hv&78Bqmx4ygvMymrS!2rBbP|e?l3B>(l)i zMHcox(+nD&K-Lawm{eEdF8SpC`^FPLm!(dEU(ONsol>JvvVHenZ`V%4!jMZTLM(XJaBgw$8kPa(toyWh5Rc5+K{ zx&`z$Xe~kbYi?@fxIg+3ouz-G)}9l4PiU(xLUhdrB5UdOXuG~u4lo(fpMMQL^&?3# z2E^THg-S6Jq4zD!+=p$`Y1m?Cn5|3fn6zwi2^{2bJaiTJ0&fgK1tbcb#+Azsky>6e z;S_ffB&tpDQ|sZV2Jp3xG!0V==|3hDiU3$_GBwB?>akXzi`;X)C)RI9zt_-53d&2n zdR$Yv^3j0U2S-wD^ioc4Zhw*P-W1cuciW$a$3^ZkOX@Vj+* z>{c-X$LJy>Xi#_2nvKPipju=4-9uVOMd11|mxdkqk9a z=FSGf5X&W1kV)A$!{Z_o2ZIG3gaoy0(nCeT&-3CxT}{!g&|@sFHh(~D$l}>W3i?fR#@Ins|6wrOfJuvYzPVe|vk>?`uqA%y*`H=o1V=)?g(r^%cQZoW6 zAs7m8_`WK=wPmNkF~s7HEDnVX?8W9N##vOOo8CMz*65!8i7Z^}3)-Yh`aXkjUM(8P z#)AXWYa%8OUSMA38Glr*ad<@^IBxf2L<>26K>(=%6DK|=1(suD+q(3q(HUhC4YQqo z&GmZ(Pl9kiA|IM~T5WMnF$NLES#Sh6gMsbmDY=TA`7V;@L+XsPw*zqA3P_Ia158$a z<&Qh9jonS@gwINa%yyUZWdN5nRpS%KVVkZ0OoV#`icQu)>VHWref`tqQsg?}m3P>; zs40pEt8*q^(O=6g(7LKh>b4+dC%RZ2yFwG5dC^+7r_=7&ia1$uzgkC1ifByV(_&H@ z*w*d?l#?rzmTAL{`8<$w3q$i_Uk#O#h({e|Z~cZ09F4+AK2G|G`R=2j!>UAQlfCG=-e>=FHavEfdK4^qJQ7D_QAhRH8@JG_}Q`1YS zuvJt6Mj8lC3#VamY)@DTr|tEU`!-fKfdW1&8h?cQy|Eo3&2Qk*lm^u9&oUx<*PBBP zEiEh!)RxN3*Y6Nt5l>2FP5|Qx5p<*(?GGSC53zKB&FYnHfs>(88VNNiA z&HqIWqYi~?YBp!AqBvXtkw^ALT)d~hS%1DwnB4}4d19(v+9fDlPQwgHDvY*z=p3X< z(A^n;=(Mg{22gN&AO|AP_W4oTDBBEXTEZIL#R~p*?GWCxR{;l&Pv4>98Pv@Dk?~ye zd89fjU|-2kp2)iIxwEz4-&@B-Jk_>Q6t0q8e{7$!ayCW<`1Rj!dd(?*^iz8nAAjU+ z1{!g|$eIE!my&EwY@ybZOMP!~1tf{FAI-lS z_3xFTQ|S_6mcMJd)k%r)VO`Pfh7Qs0b|Z@>USlYq-VoLSYc4~Yn>Y5X9N+E~`!s$1 zR++WD1m}!%Eu4kKVmgGIBtPcg^?z?&B@df=*XeUP9@>fE1kUA$XhGg1I|$A{Lji;u z*D9Bfy0yGLzkOH-b946QmbErDIK#9d5lxgv1vC|L3)!~P@?Z|ovw8sDOC-yeI&5N~ zx$iu13|QYPBr1$-W%@EJKFfslpetU^XBxZ9rVyXd(d15UN`<*bbePUDF@J01%dkr; z$%2LIBjlHuj{oD58&((6uph8TOy@k=ur(69$NE&afJcXGgd>clzy-KtS8q!s&uGM; z>RekRIk$=a*CJ$yXvWyBB=<3*cw{VUDBCQi-KmA6e%m+3ut5k;Q zyDyDWE5pP;3&d6cDFWWM$LSVkYD*R)k9mp=S{-D`Y!6oQ)>J_> zpo;uI4V;rJZ}Rnv?0>)6*>%oufac!C!QyJfSD%Xukr{d zu6+NOFXGcfb~H2J3nidTscx8Ec1KQ=mn(g6HiDhfsZgDjd%Pl=OA*UE zLi4ni1$0e^Z^|GzO%O-nRevH-g=is&Z66)JZCYo7?4F602<_GAEI!3)thK z^3>w@F1+&N0aU~cG`@*uch~nu1q*(Xj9L&gZGUYld@zdG*QsCDEgVxD-7rtUSv|V$ z2gLv&@3B4IC_xv*p$a_d%W3vt2a3>uVK0^wr33hldA}COwq(R1eWT=GOtP?t2*u^! z!pziG4fLxhzCYVx@*>rndCgFvirB4p480XE$(b++>~ggQ(oZ_YDmRyX>Op+xb4Y+E z{C{FQPp6ijS$+tkUA3VgO!$;Vu`>n!w$=P$CU%Z8QA@<*92-&V`XUah+zU(nP1y*_ z|CFG1aUew>YxnH3=M4DhAVSu)73r=5vbcA|x%+-${oM_Yx%jFqMB9n4#b5we%x)2( z9*CxWce}X~`>PBsjwQe_PdMjs`YVdMH-D8_fd6q#yd?yBLN;y1TPBBZ_(WvsC8u)0 z(r*~Zq!gpZ(49Yv>dk?s%eq(-9=MCiq2CA1%}e|fo8iXKbK>@5uLSVxNRRwk;>gzz z{TN(EethpFCw1Q|o^@11ZC{Ymc`{9pz`rIbFU8jMD}NFA{!DmwEcja!cSld(gn#)D zECO7H4r^Po9y&vB1*$d~{tqD)F|ZXys9$WFhr`rE5~qB|Q=3$j2TjD((Y>oMYp<8D z*VTK^dS`hG?jQDHjmn^fC))WZR(ib+O}>J9MA9H&M)0zTyBZedc6VSH=GJ&@`ve60 z8<>w`94P5nsT!)4SV)Fkvs3su6@R-`yuK{v>kXWM%he$eW1J%RWl-4iaseqQJ;dvXk+!W^n8ijr1Z1b=>E2?{_g zb4RZ(-d6v9dBheZ0GnO_rHr@Bryq`PDODSfDoZV-9PfFgR_%9azzi^^m}AFe$c9*A zAc#7p=v`=?lv!Xnfz`(@GigU?KmBcWH(Iri($8mlHA7W{ z`&6q%onU~??68>-PF)RX4u2O!Nv=_AZ?xpYt+h!_ZPCD|+0zDQa3(nnLROf+k*4#C zUC%7&ip&L$J^9~8BO;S4`XbU1DERb4KIDb6u8!zfm+&sCP3ExfB|osxFqDzJ`A@?M zhzPUcR5CyzVJMLEM-aD#VhMWuFP$r&4&cQl!ChyfPitswvCQf~zJHF?G%#1&c2?So zy{4SuK!DIqZcK7L9PE{X@!V`d2Qfn&Y_eE^Qvr3e+hn7-`HBA-*kZKYPDR%!`)$`i zrBg$Etx#w>tww~~%6?9<4iwk^{CLe@g8q7c#Y-ULoM|?;;?ffAoXjh$9&VaF%HFdZ zCxb?-?y_!WMGJ?#mVcS9o}m{le(*&jg+BmQB5q3#iVhTZXo!_?BXpRa8m(TkT#06| z+z(NZbXJ8nIW8RPWRt~qz#Uz<_H$S0V$`8ZJB~0@%Xhq(OFLIPn^bF(d%EycsQi6+ zq2lJsIwt4-dZ)lh&+!pz7QReWBwmvYRJZ00=2iP+atN~(M1MId?)~aN@`PXCyS+BC z=^oBBNyI!xndRqwE-p%30`5T>D$Lh-sTeiRAk9Q6&UF`DztxJ zaBM-SIt7ISzTj93Kp+u)jE!ZPBfhz>J$to9#H(ajaf7euB~s7dp0GaAH)0{lDp;D& zZx@ud3NO4VLw_zUE%k02tUmPAoq}W9*kkdbAQGhd5qu460g#Bu0;}uy!}}g3g{N=O z*38hyq3u0L?jL{$G%7&(*6vdEUvhyom|{AqZJ25xbXa+V{(QAicTLK^@Hz%MLwZ`1 z5Q+;V`?UPzV66(0gFq(o;RWMS4oq5&g5Insm^5a$z<(bByaC)O-LogO>Iityi)&pa zgl1E&dvO!&Z#acRntXg@c)Q-_Ou>>hk#WEs$-rQ>5WSMRG}oPtbl~O>S1sy>GFuYrU%3 z01J1KDy?LkyiUAkGwvoIyw;X!UFSJGvN`9Qdf!bec?2L}6x`Hwh( zQNXYA$>UzqE7)N2lSg9lecK!Ygurr+bk9t~=Zyr6A> zf`95biIM8f5xq$Vv$iea1ps(C!Xr{L`t#Wxd{+AlD6E8U~!8FXT#pDNER6cN(V zrWMGnx#y$f_w3Z9|2g`kSNmgyg zKC0rH`9s~cAK9B#XQ0xeT5_lf;tFh0FEDrGeUV!*zB>d@^=fQYO56?ZopOOxK#Z&E z@<|`GgyfEe7n|X6CrNoSymTB;J%3KSaDNYbm0Uk(Y&k@FC~5!VDE@%b>}fBJAJgo6 zCvEH3A=4V2G3nf2VtVJ7xGddPMHpcS6KxNh#m@+r-viQ(aMe;WpSnWo2j7RBuOwe6 z8bT_N&22k(w55JXouVU4Q2Wk22XZ$UsCGiAbX}f;>X7*jR;Pd5U6IMO>VKE}q)JCY z(C;3DA$ufxoDMv2@%a#uHGc1}MQ@pjne^(RB*WB}diP3*gmhjkgr}8{f`;i057lq( z+_X{LcjD`WRq*w-s$}g$lKa-6{}1Uu51G~0yvkhg;4c|1sX+zU-O~MWKjZqS?0?AqQ4}jbt!%ee!N=k)nzV_^PqiTEF-K zRgsnMocXkoH~_Y&h9>_z5lSd4V@r@~@6T)mQ0I@29U{AI_fV^7$bayw>Gj3yJ;oAt z;9x9Sx;B;38owzw(|Dk0?!>c@qrS1_ZY-Nyy6ZfVE_4_$P;hT1wi-VpNoHg?g5HAy z5h^FKlA%#O)!y3O-To2@gXZLRRQr61Zsl1rwNgIF=B&oM&Rj8Eo@t5T18(eFI9|(c zxBIpf<&OUQt>216bbm(RMHoCMMc$d_)mk?qb^9uSb7u@yN9Finh;sAQQ+><#P{O4r zxfo;$$vD`m+W{Le#+KbxV%Q(dv#*{ln6M5wq^?^>+mC{I`3w#_RRxm0!;F50qRZKr zv)O>^&Tp8IqvGK&1>PP5Lx#GH+iO^xQ^fK+%HepN;#lIaPJh2n>wJQ%EFL>FbuWJU z7H)lbfPNo@Ya3{_*L%zU9vi_GT%`MP>`HxSUt*}&ZH~EVI()&P+c=h>(aSezH_uX* zF!z2}zte>(JDelXxQvfO{-E4fXqxpyNM8n-eY;IqTlGw$ouUQQ@Va;`t4a5Po{y->L)7n zRMkpQuk>q&a{PH#h$ z5P;Kzm^2@y&5LA$jFZM=1V8oi~+E<7gJCf74 zp68!^ASReJoP^X+@b9{}})J?;v)g z2?>MCr{%uYQ{7M)i);{;L(#7f?gz!_6$QdzYk$NZjz0N0R7c(H!Kg)rBCtA^z%x8X zJQBgYrwzG5$vwl0?iqW6^t51}1C^;orI5)}tdHJfGmhPz2rf(7qTc)F-%;*Oi~->K zfTKMH{VlRsz0Jg%217VL7^!3R$>7y-JKPdWFA4CRU~#YSpt7G4Ie6N)g@g|(#2H%J zg?~5+go0^ROO_I9h30$+N>S=ul#~o^*3Zo|U~#hHAHg!;cQ%2>QX#|qS|iWt3pOsN zDkcYu_gfZMhB&YTVfS{Hv`k2580)SdhK8_y#zKvt94IkwrlvZ;WF6vWuFhyyDFILs zq*92qQ5Q|)&Htm$?nGc{Y1(Q*UJzx&^?!F4=XraHt~yFJ>7u?VQZLtKrrW&Hr!5)Y z-^01%wux#%wS8g^OTUSyjCX5c8y;$-2P8;)k3i(8xVhMKi-YA0g=O2j4gy|x`AOv7 zk==jJGMP(T-vk~SWpptc1qaw|U~h zGU4HF(2imE+~q4`ND-V3vwO9_?P6G|kVKI4jyK~Ti>FLg)^=7c&O78;EmGan)eLDV z(xWkqrDD_^N~b1sQ;5OEFc(|wq<=yBqlxfUuMATdutKTP!!XD664Zmm+GfsRM2%c} zgt4Of`WN%)67W4I)Bs1f8CK*g8OI5>9!sN&e_h+Jlnx}5y3X@SiMis3X%L8g+NI6- zqFG6;jc1c60!F5hNJBd7j4a+lGyH`Vx?x6Km@beBLL)0?5JLeU%F|u-0CM#B5 zIr0@hI?-jQRK0;^6Ms<>t4Gq{#-$5y{EfXFl<_>Yh+gaFHyCmPXjYu4KQvCIwAT73 z`YB>8C!dA@UY$%(OP~if;KxlPJt9yb`n0dnQVa7KXu6AgaBL6o^dkau(-Mdxpip-pM8SM7X){I0SW`F2{+I3+HAWYgxLCl-O zxya&1kIB9yJ0nNQ>P0~owQC~d+c1L;nib2sBhV`iutvQP(PPD(Dp}%xd(&!Uv52t>MNY3Ep=yuzX_H-pz`8QO z)%;N=gr1Fo>wo6!=r7HU4OLQo(jF_`>{INyonl9P9Imgw`v#sIbzw@bWFcv@Sf0s; zsUt; zRHHaucE+I$HeSFBNB|&mWEh*&kQ-tCglw2H24fCt^3M6tyuUpR+_`s6d!JTfpo+9a zt~D(YUNJg$&&d+$`!{tx?5Gdn+KK~dqp+i#3q3akqfZ(A2&JG#G)M?Y9!_4>MB55IF0jfl zI8(NiYVk^qsjMTeNhm=E0t>SFKjdqH?Ky8Xqt2+Y8HAg~PtaqJ#q%HgF;g^LIjl26 zreyq&jiexO@M<&}itY@FqK;~NU^|~|sp?kr)GH-;5?K37k@h4`xxCaxQ@kZi6Z()5 zw`9hP>v)kTF-nUhR;areEA(`cv%Lk4<$sACwl%bN#(IU9(b4*8#do{IJ-MHko0jNc z%mC-WIb)U7YxrCfyF}U-rof`$QT%9>#VKi|xb+82tT-DlX<5_`un)?Qg~U2$ll>0p z`jYuiTP@F#v07#yZay<68WQzJVHOoy7)c}8h{j@|j7<4l&R=|J-`kAe2VbXdB!9-B z=rIZ8{SL2%VNMQ!k2X)=uxq5LG=(&P3Nn>+a#9%LzU^NO-+eGX)dqm*7-R1)0br|O z*$4=D2|&e?VY*)~t2dCQ;t*6bc`nD}vT{(BK?En>8gO`D>;!3PxeAxQ{@8#>(vWOwK9XoY8fI#*H9d=;*DgchAbnIV@1%;;=dAmp~>(Yf~tA2xjXscttNel_h z@c4TM+uD@;x`Qn2OMJWC#eeKrU2B5OYgviEteC*8eKTPNKvE0}+#tfLu9BGo4^yC3 z_zncP@&R5{S-cYhC-*X|T>11|+>qcy+dO_rMRs61b#%cxQH4lRVBoc#FxMjYhJ(-- zK+ocm&Du#g^9hU;YnrCwNtBkuO@_FojMe=PAinKf+K#D8Y8r|;Cx0GL{Dhn+oJkUs zfO!oVT~4J1ZzN!_q54F?f+>OGt%!zCk2*sM+$@(IBWUY` z+FZS7h@70xz|mmu#mETQc1N$|9wQ3$mUn=};Su1Q`4KnLO>5de-JD9|2#6rRtfdk( z6%nQW&KJgJn>fei<$rK%=f0k+)a-UB&ZL*`+-nlR+Q?M3^&JfM^9+(iEqR)u%hvDU zaNNjds!>PyFQk(NT-X<_`v^m$6hVnC<|0R^i7&tTr6C3-XUDhH9~;30il7+=C0r4V zXR0tR!O0NDT(4{<+CIUd!FLo%Q`N`kgCJlIHXTW{vY4(+4S&_B2LIlNSat@Pfegq) zxbRtWP&`4qeSMM=q8M>d+f^xk4dxYX0Ahpi>`o$S9YRoponWRNK5rGJuf^>axx?aH zK_N~m;INSj&D4)5*FdR`iu$m~Q5zMzzM$G7+06C1^!|7F5Q)H=6xRZsmREs(8bIds zsEsPfx$tjqO@I1$cJGXV5u%RhaF`nP#ermQ#J%NmQE!)0Mb6-C9%cdB#Vyv4fw(96 zcQuPJT~ZGmP#q*R)NJ+ndD;JAGXhMPQ}+GZyk~#AoI1&=7)Mjt6@gA#3o#7odvJRC zdm+0qigD(kr#f4?ek*?_`JTSl^(ku zo+B`wJIrf6WlKCkv<1Eo?n?^T)2J2o`lq2AmASCgk^c8=7I{N?lbv{hi$y#{6Rj)T zQ=yVWHl|?bA+v6^Br1Ur@{T#mxWYH>&W>WIcx0@0>qZJqcv8vk=oQR{R{u+u)xFGG z;y!K(!G91{98+%cK{jBG;0`f?L;zlsas%pK6}=Pgoa=6<&**`r*6TW{Ieb)xcX|dZ z(@vq?EHN_orAeSHNk&!7Yv>fyVtm{*9G=|>k&qMc6~E&K#4Be78Cm#8@X4A!62#3Y zwt}5GX_+3&UQMiNE-fM#X}Kdt2=cI#lgGC}W`9#U(-sAwwW%cGesUl*p8ItjKt1HI zzBW~Yg3710WXYMvaMeB(s7{6{p!2NLDW{%VSln55jww?5eGqs4yPkJNU$u4dmBSfU zeIz4^@1*VyXy$3V%TC^_A@oJ1HsHz5+}DVD_%$ObL}5bb=5-Iu^Z;EFe?H+OPM5C>_?=NweX zu=WeVgX3r4(_`g^DE=K}eBBo%KF!f~(e1dK1Q$+rmg~-*unGh_Nbf+oMZ{L$piQ&r zN}}vMF~q6Bq8irn#I)c-t1}@<7Pz`_)cOuj}5E3?RT|w=N_gAn_q}SE#Dxzhhymf zsp;rrmJ36I_HxCl%DeNGthI$R$D*rbWRV@S3!n}8Yyf7;pe6d6L+-O)O0GH*@qY%C zVU^E-;#`E|3hjEE3Uz|%5$ZF5{D~!t?k%x~#YtlWr|<^r=xn^+Lf?=0L6WALr960l z?P=xjJzK9OO;NE24d95}!k)i8tA8~fd#hTPzfvvuF-WcY^n){mP_;T=BZC3=}y_WH(M_kWcgCFg}oO$2UKJ0btA0$QuE%t$`~%+72W&EE;z z9@j`1&KHsh%9GewFgrHQ&0*m$jnAL*a=qyc=Noz*hVe^s*s|0Qm3xhJ(%<3NmHI4< z!}WvyI3n)e>KQSipn*RN-V6_Lxw_6!k^}``*&YHxEiQePh+EZtZUR9lf`6tZI>|9t zKj=fZzIOFB3Cj|6^~;q?2I_ceHw=teoZK_C#q9T~fIvD)z~8&Z-2(|^D1UQMCZlkm z1~^79+C!YhXt!nA`v_!G2be=TXBds7T*O)4d-$npkSI@T=*yx?e=9gt%Ud+b$ipe9 zzRj9fw^}KC{o>uE7xc!cvwzO(hS^C1qzosC)Zf3P=D}ZBV{!C^oVcf=FlXm>Og|3p zj?Tk3)&#>wQ6-fGfFFza{w^P7s)~}e5~W1@2rqoVdVAEJNJhsS9kGXd%~;5_{YqEs zLZJo^Wd(Z6?4jNbevsjzgKz@ywrTs(2Ceox>Kpr_#^ggQP>LO@8-EmGaeY8wLzzhI zc9ib?y_Jh_K|`b%aHMC%MH?JxYEUB2ZP{S8=C*kXvg|x4Ti-bfq7FteDFYmX2ebZ; zK^eMD6&{mfFS^Gx0XWyEbU{lHn(juMek@wZpr^~&WX%$t23Kl1N4nU{CWRo`#Jfs1 z8j~#?FNv{x$LDZkLVws-lYvz5`tttWG15@*HG{89k8?VL;NRV6WBtuXqc~yhEk+xT za|MWX^e9pSv*857IxKg%xMpmK>?@+oQg1MZ8#mv3{UJHNtL@a8gCqWFmk;x4qtlP% zD}pa|Dh-vIss02tGJfzfFFBmQ`H_8U{$BUw^$0oyH`enTaerqe!M2giL3NZv4`n@+ z^P5@I3z(BKhLt0-h8=r;3bI%Hncc{HEd;U#b}U3!=`?*-qBccca&Y6|3JYNC0I#dp zAB}3Cu|j2tDXF6u(zqB<_$Fhce`MkflVBLe zDd+K7-hw;oB7d1z^!4&V`Dm`k7R3F##*=wp37LHW3FxeEc2x9ZEubK+?lwYndrGxm zdh1DdXH!EsbZ|0T{aBAgn<711&H)74eE%kg98$g`lGr57Ym%;((b#@nN9Pci+Q4P5 zLH7KK51(;6l`k1+Opp91>?^Zp{S}VbS_!ukuV}PtUVqiPWhu0?ort0~YNLtko0rRd z@7Omv_qgHMb~v?G4E!h~qJLaj?AW%$h3S|$`-R6!o1n@(6p#*E-NFy3Dub^Q2nB?H zgKdnJD67KpZ?;^hV?v04+j;J*|J% z&>qr#)qfAh{Z)Mb2{osER#E-9*d)-8G(YcCJrDS`Y}x;m=fcSC(moejrhS(XUYcZ( z90Le+zxT5EonER`eHXy|pO2Y;ah#{kq;I^UmO9~h9TPk{vAyHI-~GnZ%rA2@4Yvec)D(PrfJxcdnb{(xJX7@M|em{ktF&CunvM(*$~Fx%wjB4q^H>*b^)%|sOl^snHfT{Y>gDgd*nvc2hV%JF#q3{eYES!O+SAYYI zCv6_=E9X)wA?Qf^HiXcWr8fxxUgBy*9Ee!V3)%*FZWL__ZVg_u7H!uSGZ^dHWLq3x zRg)>8(WbXPW6o=E|7q>d*<1*;ph`XQM1KUWCzAgJZ-h2IEi0}o`G9}x=x0|;2As9Z zZQaDtX}=e*(rz>{Ey7AIMl;c&F3U=4oSQqpq}$F2z-tR-<$&S}nG9VNZAi((UkrJ# zoL$XUPQlhSEnXD6;IN^v8$18KTU0ve4{l||(F>lhcITaDyTe7PUu7CVIAd$Q(|^X{ z-(Mafpk~W*sjd8lvS2Up{0NXRVBt*G47Io0&cKXjnkcUnXQlO{H6h7uPgWA#mS9eF zSN{w|DnfT@FaN;D;Vb(H=;cnU`diGPDYG_RQHoaeJkQfdL-`HN-Srd5T^7mY*sohyHMWK4w6i%PB#Y{dz;09&)#(y z7CdXWpw3|p)Vwiq|2yfx(Q)wcFn1sMLXq_bGy+Ved<~y1$&q{^IQOO0(|_>O(da^& z*qR~OVc_O3fbZ7Ifs9+LJBq&}DVogm@vO9NTDoaf zx}=w2`4wZ$N9@uOf2ikuUV~W+vSuQrR$IK1sSuDp|ta?$b>E5_r>5Ga)wHCWUMNVmJyIB)?pEMv;DN~>woE=NZJcQ?}1aP zuj^-gUzisqK9Ss~l2RAQEJrC;?K)Jc)OJ)gDs(DYnbHS^x7#^cy9(%KowjiVWTP@1 zjxqg*a%3ea+!)qSB=o*EMPb3uSy}7we_rT9gJ&kWpdxvwVKWsgv~t9s zK%)Nkwmcv(iqAt0B_l3>eB7XpODqH7P<-j`N#Y*DIGU$wSfYZAG78WPo+D^O z>NiB7t%c;#5<>r*?0r}lm+aCl;uRT*w+f^?F%iX5HqoX<))`qtb09~9R>)(tTQd*o z7;gpEBG<`2vUK@f|7|D?cPj&Fc+0Y?FVdVfjfb>t_!*b1qF`fhM#uE%i0Dkepua48?l}a)J9-~UnY(NH%u`we3i68cpS=LiO-V?;0 z?d4n5a&@7NPAR@{m-*O_Q*I(gw*O*5rEnv?tbgcFEMM#SIBqj$4O+kREyuwVXBB&; zEM%job_(gFreeAG!Ga|HjLvp!OA)2|1_GMItN10~hoeUAXm-|Ym-N71bW+%S2>+-) zBY?kneivyIgevaC`y#e8SRBQPSrMWMS2MT$5v=xov!YlmCvqJmFu>a@kKybJNp;c) zuz$^7-jkZ#>Z~8#xg6-;UKO}al@<09c0MEndd{^{$)L~5l^KCYsZAytETZDXn0~E= zicw87bFGKa&(Nrem8}s}5D?8CQqGITm!532SnD88ZFxm0*Q`WkK4gH8NEtOX;evHn z>4}+GctMVmr=7ar(3LjUel)uXi)6fl6MqHC`L!fVW3OM}C#fEB5WBNBjpriGS7Ezz z4%ZNhsB>El?jb5V%%wa34>sM2pJ;d1((21Mc|ha@yRL&;WCfb>&WKRKm=k$DEqX3z zDo~0{Oz$eeeo07Dhs5Fi^YmMEN;M}p1p`NZt+;;EcS8~ZRG&C{oF->*y&xGu)qigY zct>~@b2k=TOveWSy6E)h2UpR%GbCd}w^wl4OmMeuDW>h$6nUe#F(-~(;7^K=kc$no zc~}nAfQ-iq2dm#c2rd^dUN*~JsYG6be)?tU|I?Sd4?0QURQozCC5?8fbVLFTeYf@0 zu%K%FF?w&~?n=kLR^JA9X>+1((SH?UYFLp2AB`pc=T5*a&Rz9yAG_W!N22QRw6}I8 zD+WNHSpOYe&=gG$uX>4pzjr`>$PB4^HkRGw-3e6jV>^Rd;{G)w0sxR!%574DfC6go z|BIlXz-D^|E7o%LLEmtp&=p9qqQ6EK`Qsl|GN9s>Pa6@n~Yi2>3}&??V0lgL^w66CxjQnXgzd6O<Z@a$W7d3RVBX}Y?I71pYCU10K6n5|C{_i=HqqfxPE z4_69mwa&PWKgMA`*#8}iaSnJgwtn!TP++5h{+4Uza0Za96H{5dz}^2S8wK`qbrOHy zD%M#T&_O&!D6OhiT|ErwOC0*4UDhXvq}#g7ANqIFk2;%k*F&{8cH&J+AC>mTHm&JD z^o;_WshBVf{f@hKGU#SAe|axUTZL~*$oT5Ms-{N|i>JRwjI)j{VdEY%Fnt+L5pAeZ zqj!1Yj;>}?QKAPKjlO`$&J|NrMT>tA<2Gj*mADT658{D=`1O9v_ zvC%y6Fy@9NjE;%=m^bst6i1iP=|UyQ?vOM;qPB{L5p`I>pm;W!D+$a^0PlYvgxbI_ z_kBQ;!h2xRi21NH#YmftQ5tcTpObfcB`KH8<{fZT%i$u6GB2qyC;Hn{*4 z)}Fs{JP(P8e4=GGwYM4Tk{ExOv^U*v#eNRE5cTn8TH2rhM?`4jtuF0^?DLtjt&6=q z5>O>Ko!YBx>DgqY1hEE#ZBb(C_=ncUJnX;^9RVPoMWs_VRGQp8<$JWng? zTx8Z2Fm4SiOsS3Gg4qRqK{cOH!^pqlQnnW9<1Wb@E7NNX9|$O)gAjjE48p7m^rYvL z|Gd+?!E8a;!7xtJyIE_KmW12=tlvSU2Ol!xHo7$qA~Enlt{+3mF>~qGvL{=#*1R@u zWB9)9qb0oDj7jL^SRQS1>-R)yyh`Hso94D$6q04ltOzbHo77UqBqK+W8@<0t>f!Ei zF2V=(q1@uHCH513O;LXjoyK)FTrE#j2dZ88_0S3A9&S&_Vr}4uq%mBvPKbRkDM3y2 z6*z20I-7eGx9212i9;^Q8&eb(UmY5z@MH^9Pj_V?j$~m!0hm4E%?CbhtEa`Ed9x}A z%F!p<>aaipbG+QVsmpnc-o!5VZ=>Rr1K)B%bg73sy5{4zVLpGnE2j_7!tltHU!~*R zO{VjNvsBp8;d~Htu8u8(HEv~NHY~d@?QpxVmHU^LXiMWk*v0*YzhR$v$qw&_atRdK zQ=VEYmV#;Zka~FarLxj4&mK!LB7V$A+|%+1Ox5kqWl*5A)iC1g`?JZmRVfD8d}cf1 zDrss9q`AKKq2r0lWcc;Na4zKBAuYlWkJIIsqHQ z;MJY`Kfiu+3`kKIc0kXnur>{$Tz?{%^30D;`v^x&r-(Wo7wo^iv5PTjALQiM{2?}7 zTB0GH8gVM*1Xvu1-uZ!8a?S)a76O4#rcv$%Ysz?8P*BQuUZcX^RS(#3YyctuNA|!NAX9UDd>2 z*_u#?N5U2$ZA7sq zIeNPoXlJiTcVdn~{a7Q)hh{<-Zdk&zacT z_KsR8E->L$tQ;aHHVaQ3mHJ@|!_%}(BSflRES!1@xk zERS;@5G0dxd{RcwlEIx`pR<>~n+l&M-!Z5m-&BQvVLJS8NZrT)8BhL3#H(n!tiQg& z%}t8EhN-8U(eeICMFD^c`bQdHCJ-C&g@!sf0lZE@82fb$La)z{FwY72oEfDR^2YJN zVO)Q01}Z7Jao#)J1+hJ6w((aJJ+359SAcIY&vRk* z8|tN}y#D&ibEaQBH7PJBlGZG6seHFA(V;dtE&gbhvz|_Mcypw2%*wiy&SNl{B6X77I5)22OLO{Yb;m$xtGSo!kdSLU5mWiJ5-^ zBKHU5Uadc~#xQn8PsbV47AO`R7`&ZPu(zszVNG265~Chu^%js9ZD6jLrwJ@w+Ehwd zhOkVyz zhW1V=wo@&M1|o>kcM2MMz}A?5=4iW%=<&I0HvxQ}<;~iZ54ru6>ZQ*iUKW@DMD*$m zVU{1X)v`E(kdy+k3AR$W1#{znNWvx1rgeX9g$$X8{~O%)6nh|XoPEm6dtBnl;}o01 zxk*~3ta0}K0(nL}>wy@bc5#0|0^w(&WXki0Ee9()V^M&Se21ZX2V|9CkSarF7zjahhg#H0dNV;=m<#D1*JNs|Z zSgu586%XJG&i%+dJ?2(##vK1EQqEDp!#0!B(-f`8;2kmAc-l`BuH{V;Pp3S;5U9v{#8xEl)4N1K!xMIk8o>>LMeBo>K!G| zEmX1fc&zv449uSp=&Htp7RdL_f#SxGs>$zX zlFbmhpRWRzquZEyR8xOzXF0h0I?A`o0%+n8y(^^z7dL2 z`mtu}S+K)@|MKlb7eXq|- zrszDEk)P0S&D@)m&T`vgi76GhixaSCP|B)OJ4^M^b-3u|LK=HDHMp<+z$5v>Ye1xY zUEz_R2;*{8)+RKDCWA36TtisG(4gOb{Mc&|T7i_8xK)GAx-Q3Dm~~)cXms=1bNxX|~QPnK^tzmjN0ho*8-(VL2Zy8}Z!m&Wwo|C-F(AS(Brd8M>8>5{y z5UB%Vjd=Y-@pQgWBnwMU_!#|BD|r{nNMLZ4G+P&*Z^Km6JX~1!D|hA; zDRgF=pE{WmpA{Kc6NB8!0=@$bdlr?1jZQGOrrCdfRKzD2g3s9{RvaQXk)HubEMQ-B zHikLgA0|br_@mx1ct%|&|4GzoXu)fE0{Oh(*HMYS`!_yw;f#fy@d`-FA6FF$Alol( zS{T-{1F;IwV(qwxi-gSaK&(A3aKS)esQpwT2asrbrU&oG+Gg(H^l$m%naq`s+B@o+ zBLjat-leomTjh!@+wuq9ld{ZGvK@F#9fKwRAsfmQObRS7u?eK|v;yWA$d$`D6Xk`r zJIAKMMHY7UQqtZal2)p=9?L-XsP!mEj})#(cK(yr5L*J5p{#U`+noOAkFYXD_JCJ( zmII^FYK2w!3PJNvMbFCUS7D@0GKKWpawaV|)MLd*%vlFE_Li4}9>)4Z=L zf92~va4k1=p-uxYp#A5>{fju_)RzgPm|L5S($k>nGFPJ~CB3O+frw7$3W#53*5Q9M zLYLnmjVYYD0#xC_-eC+&H`4rO4XA6m_b#ZXcf9yZ!b_QM4aX(SIYQ~>qPcC*qn>9m z7z6+Y0e?lrgX)^VvCu`pfCPyAj#C)xyHgRf0i}gPJQ@GQeX=)fYRwae49$p47FMOe z@gE-AM#;c2)ABdcoF2-#$^4@`*tCCO;mGlP&gPiz|69J5U3?gnxV$$`dBR~V)9rW^ z_MUB3lqE-}DJ0Rw{wD$QqLi>6i1U=-Fh9p^ut;V5LYA|8Eajq+4xc_na1-s*(KjL= zq#pte%P>ka0*ycBj(4%g_XZEQD<<+!kJ>uSQuB+Tp#Edh;c ze^BrG-Tw@m=hLo8sfpY8i45fA2jF`ddxP_$(7%oN%?$Hqvjw&ZV%?k{k@(ZoNm$Hi zK4W23?8a6LB+uDgIWWdn_(y+p2j3CX&+-|!5mJn8jlZ06Y1OR>g&1vCFou|^F*Xrf zN^2uLYr)V4-4fc^Lszwe>to-q_KUGbt;;=bQO;Dd(#i^dGz1(n&03pG3g0okBjx&T*SHbKa*6wzj=X_zi#EW5h4Qidy)} zSrxBw;CfqX61iguz!ffVL-~e2D9yC{IF9#6)z}(lq4>MJH|60+YSp6ejraKBu0V-J zcdP+3XHd06|GX7ga}r55%;=|-16x-H(cuK%uY$Tux*`<`ulzYJPInY$6`=i*0`#UZ zRygY7k_UzQoSn0lDnEa4#JqqRIkLBgVpD-{+)uM~_-%VkxDIc&_y}r7TS`zbB5kx4 z+G)TX-|W$3eBa*l&k1v%^UrKpio+Yy)38MlD5+3>Q?vWWD&1cCjp-}Zee8j-sjn2E zLAGccNgkWkgM!0W2Etb=Z^l!amr?oZ0=P%VUwg8)|v zNUIW0C1mYdV+DV3&D1M+YlzP$6yq$G)`zTPu;#3np^JBy9*D``={9UI}LafaZh?a?41lFEayU?C-2-y*)dwE4D4Y0!<4$NrOP8hTLswvG@ z1Ol6{?OFdZwdqdl0JSR9nIaVv00q|-^N0k6RqI6yrdxlZlZKyPEuRfE@kB;C29mMkVfa@tVR65m<*>`SiKy?HrMTB-QZ$X4U+)sDCqybCPirlr}c z$69H>=u?K=M8$iT>g1GfIOm%{q!{ixC&jw38pG>a3Lnb0j9o~i+w=w&;6)%%1RPJ^ zq@X5swwHgg?RQaOJ5R5_i5b;`s;!^*4mZoj#p(*V&w&KpQ z<7W0 zW7N$BmQ;BvH&vxLOlyhu66Hfwb}r=PUF*WgoONL<2?CpF&Lmh4{n4f*$;I`!rU5KX z+@1SWr}qk_OeSlZiXH1#7l)rZbM%aqJ2nZQxLx`6iUfgN#k%j)_PU7~VLO@8?E4-x)NO zHW+r0b)ZVcF?JeOm09llrU+(;ZB7DF z({W&&dK=a)vw=LWM8V%L}H`_-21e{bSl6qh3>zxp#QmlqPTgr9B-~esNQEZN8RW z3pfo>NZ9LSG4w8&J>RoN_oPWCGXVvt0%B*o4b>_?+~TiVo@jxG0Pvo_$;vV-j?f3& zDrR5$tf@yUglbB{9!hIx9-DP%;2 zD;$47M*VX{ZDF&a0`<{InYC_S!jCQF(P`gw@l0BEw~kPu?Tm*a9ZBxngy5w5f2{5J zfIS)@pv-R!@>qXg9I>I;A(OXH0l$eTOl+h45#*xygdW|fuh#I#gC~DfZNuC3goJAo ztzNaFm)z=NaPEK*zyO*!zT3>Vg47Knpw3jCT0Gg;?gk1WseJ{<#rZYN<*!ik0EW)@H;eR{a4uf$i9u_Jj_ zCKDYXi##wTM(Bk!@mGJ;)0Dw}2B3POT|97H5$rh^gF?igc76>MxrLWfK zqlL;99dc%Xj;!DY=F&}oI^q`bTUkLr3k;Po?PKP+RUup^!MwlF`zLNL)Uyt|jA~|9d&<2DqC14Tv3QYL)=fb3 z^y~re5>UAr5FXk}a)s~8!QMcbF>bixjr z6=)aJV@97ta?_>>Y|VY-0y_=Wb=?!nPOR*Q0+mN4I5BbuisOB85^+2w^Z- z2xooq(!IpI&rgAYLa6eHd_n0TzehQ_i;-=XfNM%x{xq?Hve#qE20j3(VF}?gW2T4o z+8>RU0l$bNz}XN|)XGWD(@KzA&00;Jf`UlDJHfMvLaVU1Hw^QGK1P%(^|r2-vW6Ks z33%ZKjVOPzKD=D1EfD*-Ph@rb1g0auZR5L@w|+3giw&IZ=9iRuiZ>FyVn5VkbIbb1S(D6jF*<5s zoD^E77fWo~ZQ%!o5jVaLHEdDe!hCg3A;O}Nn_hp$&}V4)Vi2NpfP6UHbsp58bLqu8 z28;vj6ye0H?_w>YYDh_72zxrE>_3G;IYmq_^hyxH#hUK5kX68>6ZE*`AYtpT*z^Qy z%kV$8?Kv=_S7BGFUa-EtBNRT z08qt-ErcPwfBUs1nDM}*oC7D8-s32H!toE?Lm!pf^|4@`uVRrQRpqXN9$7G1Xkn^CNbFtBs zTpQxIuFd+@#qUzk5-Y>pEA^82YTMN~;XLlW*I>clp++6TRDT_TT9Q8^iBqYSkEXM*@s<(?5SsCI^0zhXgbrLX7B7sjM#d8-+4JUVTw4yp)7l zZYQ4(tqzFwbB0L|mIcVbMO!Mit8*JQF>bYK7P=u(S<9!n zwlaXBTs$|4o2fjeD8d#w^EiJVCmn*}&bLTu`X{hi^z_j#xnAT6u6bO17-S&{sx;ux&>t!Vrl?}hS&#$-oa=juo)Y(f ziA$369wVN+<%RTd?pNXFazpj7fj_X??iR6Eh3D zy%L@Tr7SI)$%A9_5)@q8t8?4GH z+UOLnuYD%)I4X&^n=N!Fn*NLVZMS2xa%kxID*D)NKA_qSjf_b8`%^;~Nz# zh_1O$o4Oj7^ZYd@uz{an#T&4Q%h23bOtmE+m6|EDlZ%bdV;j(bL|pVPb);`yd9m|Y zkAHG@yS@^I+A~yoF#+=)2~1D5Y-IPVJ_$*5$lJ!h_xHVe)Utm!*8@|#a3N6d%*rSU z{*=O&-*$mWce1iG%?0m?qL*c%PI~|dWlff~UYB@3CL{P)!e)Sg)v44=c~>%_!hw{0z_Tqo+C0~6vdMb6>oUx(o0{~6oPaw@ zY7mUFK#tBar@;acAV^KfwMs8x73dihi_q@=*J0IUqp+QnbJ{t#&zN(wNa)45Jf}d~Y+%F6GHzluHzTa%44$ncrvJwPypzw# z_5;y1#?cY(P3m6u94UqgqbXQMgH`;;+};vKE_%NKOys~_;d4QQ@O-j1WP~$gIqx&f zpw_1|EiQp+@vxBK;cT*R@nwk2z2)F3=fUMIS{HwJnh}qNDj3^-a2vKrrz6W3sC7$g z@iJfG*|~6eaHq(nQeM(8Hflu8!Z3f##u*XuFn{G-W+Fba^dVJPy_;d&i5h_50Rk0y z98k_iRCGDEcudD&P2d}QDRo-Zy-U7jIHU>7KE(2!FjA08c#@ZC1|C=1s~I?3a;dBHmm>*W6FF^jBp z>vM%QBY)rGevGT`lB4v*x9?+2xcGCBNv(g#wM^NMazO{=Vo<7Zi{k@e+7Z=U&m+v$ zR8!o z;ZND&j;@c(=)ZOnzBx{2+~y?pC$rveLc^9SWpkEmrk2Ukl)f;S6~ahrbYm6Q(<{`7&%-}k&rms<0( z%*~EeHxOBjbGVTnxyr4QGD_3ClRsh{&#=gLLmj%K@y*X%;w#ee6I)4d(Cf_2T4ad- zfTQ1+pRjCm{nK2qbax#mk-3#rj-G$qR;!O%C~ccQ(p3!?8M8UdMDz)Q5O03F)%84W z>`!GR!2B}#{*a=dA|9_wKADkeiADnl4rnVPp4VY&KrVr3IT70!Y2;%&bv9IP^TFbEHD(A;AUM<$4r-yb*}2hhxQqDUyHs1c9Jcn{ErZGxOvR=q#;2IWFUDciK#^rS-t|4!B?LzVXgl|hsdN#vjult znyhd0;IU)$-K1!PwEM{8Nb~$7?YKyua_ySI{;;Z9p8g@{a2HVL`^CpH7Gkr5`O&ne zGA3!sO>}Tf6q0WK9sph=c(;EQFm|Nmk>8pmd&GZnlv9Vc3*q}5XRZysR5}3J<0Z92 zUMRkYwn4pFPwGyFw{fbC=TElP53F)5$_0IABKG8_DGlf`5AB`r<)3P`F{FfvZFE{2 zh3%s{+R9pcSF=1|v@i*lv)~9OBfLp$@D|iyME605t^3Ac@s| z86|rr=;Udfag_KyWit}Rl}ahm(~>&3g^PnJD3KLbq;LN^jv2i*&~5kTeCUCHucC4Z z(X=*u!rRb2O$XjHcrf1h>uk_o5cG1=wnt?nCs89oIpgYpH;>#(*~xUfxX+#df5!0< z2a?V!*mDU?b8jf3)UbbBfQK}6xizrpv^Hs-QD0E^C@@hsL_>TB(0!G)N=^cGP^{EQ zAhPCSRt$m<>_W#jq7t1~FDU9F0$~fzt=h36c&tI$%uiosUDqP#)%a`E6?mG1EKq{n zNroL{V&SwG^Xj{JGs>%mN^B`Z*-m!iRsGH9i7RY@7iS0c6{S`l(7-jzO((Ty6diIumr4 zRw_&RB-r>*+U@t5p|rdfHtxpxO%WSveo@;il={O}<3+-e?Tuk7mO(f{ddq27^7hz| zZ6j7W8i2<9oyE))Y3 z4*R~WJ^p`?r6O2t0$yNRK9|8tR-IecJ6Twa!W&3&!h!41UUd4#oy)*;Lr(T+va!w& z7evOi*Xxfw!9V_V*gM9xrI}h#m5mJ7-ATzz9UX z10Vx(kii|+(WU+GDroGZ<^CK3*$7cNsmS2%1(|;*ovPhX0E{1q`)S^L3$K!K#pz6h ztot+!*H zftSyA(nxHXT$jIjuT57NRl?oIzt!r9NVNyjc1^8o;{l0gi*g3^TkypHE|NNnScd!3VkC^>snC_^z?4cF70C|iOsbEn5fB2& z2E|;NP^~G26j(`vJV`f=(f2cZ;U&5I9#Z*Td}_i&Nnd!preSh@(^i*Si~yVqYJ0f3 zhe>x2EExOk`36y5YYI4alsD-Jz%fWP(&B%wc&C&Ox~)6PAN4j)zAS&Ugx;jAkLm}K>I55t z+CT>i^8?@9#Pjkty@y*kCDb;bL=Tg2f}&dCaTovM2VrLr2bljzWQMn>_`oVee>Fl^ z1nVR(u?HI}kFpo;Wd3gdJV7YYj9KEU`XwC1?uAslEIIVgh`lfiXFQQeV28}Uq_N3E zOhtg})v$`dYu?D95trKG-46f6q3M4{RN!mRh2q5Z&y``LPh${yev8YgtVr#M?`z-N zO&2lJ>2@4Nh)vm-kN)LkMPf@xrs`N~Mu0<+Ga=g_2BWO&tWIh#4(0+ME2IdyKVIth zii{@CW?N?$-kov|Z#gX0h_ib^+Mm7I6d$|kk+f47UDe2tMWiC6bz|I)y54{4Img}< z8Xhc+>$2#=0bTR4xNB`Vr*Wo9@n>=auqSYY;J&N9Hw;JG{&W~E$Dw8^Bw53WJ>6hE&Hrh1j-u8k(2?5 zx-9*lFXAfetojDnlu*D94G`PJ*O@kJvRr-ueb~J0P={HLFi?82Y)^m6TR#lJkuT4& z59aId;a-fUKUCf{bmIqvTy)(kIaqTKM!kEya-|gzqduYgO2ZI_dTWqH1nl!hz!gL_woYW0wqSt%1JWc?hVgz)Xj^` zrS$7uxFghjW|{pcBKdU+XRJjc9HC3Sl7;K#_gpg=U~X{>ej834CES@N|IW&LAWMbCGg- z#k|sVUlm=U;pn$`*hvnaLFM2dAeEsh7Li9TY@+mIJxqV)_%C7#zF70WBq@@*$MQR) z?b(LGe{69GlS`}RY3F4?0$5xI$VR^=fG~;+6b0amC~@Kd!CYsknh}=4nD-u4Rt#SR zPj8Tp;_9Mcdrp6xH0~aVI}r@Flp)Alv0+5O&1t?3_4BTT(|ohz1IzErf91AKuYEqV z@08S$5@R>t6+O>UEAnUH1VHz)4H$=4M%{o%eNa!YN?B;iEKUG2D8o3~8MQYxZ-mw> z?cD;30AK-lLn0DYo$SR9BE-C79y6Y1;;So%F#^%(DwcmS#St12kcU>{hZZVC-6QPh z;rU5PmkhOef-1AATZ|#5#U_lZNpdL|jrph}ugWmMgT2D?l}pEznSwY}I**0Msz#{K zB3q_KOQ8-e#TEbLDW@SBKI+bF00qwx3SkcqvyLNP(nvV!55vWwS1n=crA6~qum|!K zRdx*7;q-qF&}P=qX3k!o4yHjF@>;f0e-vNi!dcA1-_^NJk0&^|eXTiPFnqwS-R!SC z7=0I7Y8s4N71MIW4-eey2%K$Di{w~u-aPJq%3Yd=ivPz*{%t zRlN7ec**o({kUSWisJAr6Cf-#&m{oa3Jbh1PDP+`@$GJ=j-E5-Sv|jR)@Mg-csAF*MWjVHZ&Y7&|o%vHZ zS@jpF!pzL6?+Wg{@F7t?$Q)3Sr-T~xk>>GfVSMb#)Uym&l*l4}EuV6gCzV32EXaa@ z-jbR1iyL@8^jmWm+%Ey&c$0cFn3?V)`pSQB(q_Bvd^I+fffNF56x818H0?CR*gH+P z9k|1=#}HlR%EkkK7n0IS@|bxQ8ZZ-aB;J-z&cT1h zzu`=7J?LsK!dHgv2HpRCV7@Av@fSL)%VMV}U&OO)yJw&*dUX9%@O8OiKEG#&IKs~V z+z|;B1SB;oeje!n-+6_*5sSGe@*9O!?Hzq?Em?CAWKY<6ToZ1$5q1_D-t`rVuF>wK zTo{h+ukAB8`Q{7oD=5+gog`Sa5bb}+&2en7%-2GMWiz*QSj~Hp;kTORE%hE z>_l#cvy)aP%b7B^)DLVae-TdA$pg;f--pIFR(d?VR=hi}8+$6537H)YIe5?&93l$x z&Paw`?jWZECQC%Xd5@K;-iEIIHu>otQxDBr*k2ryhYH7cFJ2t~!*7HVT4jF^2g=Q} zlQq4xBZonmKi%UdDorAW;>W7$cNEQp6t)u~v0WO-uba%_s2$8#X5xa z*c&OZ!lVU~N0&LRGJ_diss$ofduuifJDSVPHd?U}lwmM+z+~47AXcSyak3ASkdx3-zti^wkWfWimfWz`R z3SxW__qSy*1JsF|#1hHCbHJ?85G$rR8n%CUE;YePKE`pOT&pROufqW}Y{FJ8zc~3+ zs85V7BDs5D;w8u$*mem$n0$p~!1YiYpw`~Owhrc|Edi}Vug9$;!A}WczZQR-D^#e0a`cQu|iOmLTIa+m)iW1O3|BjO~jn}0TIJ|Yw^f!*7Q6&4GV2pmJ zW%C^zQQMNt5g;k;bn_gTy4JxXMPXZ3mhE=Ue3qOzx3;KVS6#$DW%Y8DlicVr>|_4h87!!@h0yup+i$Vu>Ari|On<%u`W67R-wg@>r0ni%P6AS zmXk)x_?3T+Cgx#g1OseOosO3KNhgPb9P#XuIJo7u1UT=ENNI5%pXNuDALd35j`A~G z@`MIb7s_aIUE|A0tZXLb))5}W*guJ`b(craxxgo7Uo)`B6RQyQ8wx+_mRGV014Ug2Sxwrp$l)G&$4Zg--bH6NsIYKd9{IX>VeV z^(k}RDm6RG2^Uo3KDwZs(xV#KFPbk8Cfb*3tF2`wgI zO5uN&5h-2OsC>FDqbi)_Z6kB$Cx{;YQX}TcCijNmf7tVs>3EplN)XMrk+AB4#Qq(y zI3)tvnr&8Y08FE_$?;Osu7?%?{+hyuCf1#DPWqiqn2(ll&JQznDXl6$K~_>kTrkYc z8b{4XIe*(A_d*cny*9)rIp7Pvs=Pc!AWnY}Y~3MnxriAaQ0LA5yIeU3(Q zL^NYIG5a@gdm?Ujp{R${`?L3R^UP`NH1;ivE(caY^Bi|G*L7fJ)_XzbL^8oYlJ z2ds7BrN%_H!C&F42oip=AeWd+d5G-`)C_8{WGf%Ln?-I189b8)ByWMmP#mpB(Scp( z2F?rU-XCeChObPb0^Q?K21#N`Nz0Api9lqTep;n-$Mz3=dnWl;2M>}{j>GuJnwWzW;MbEWsrP5?I|2F1xOi23F7)5za>0A~GwsDSN z^HvefsWz6Xtu_C;*>u@Cn?`?oeEWhlo29*XeCWa}IOk$)wCFE*N+YXc3AuoWtX#mL zo+K!f=1H0h98R0mT)O+t)}{NsYXT|3dz(m~7nZu!q}D$mKjRCUhagFdV)k3k^ueK< z2&O-yC`~-eflKcd>0{;mU(7QX-_lPRQJ-uue`g zfjo9;*hQqn&}9C(i`+yMoVHKhKI71un!N64v|5Z%D!~O?-U(AMjQb?i#{{pK0vLE zC(B0OKSEK(fK4@<#s9G^JV9Y}0O?TFJb61<7h8gtQ z9<$>(je1K~&|!af!f_tfNZJQ~(+o8p7q=0g)(YfBvGk0#OCLfdGKJf99=x#GVV^XjHgUS+i^oEXf# zS$OpE#-1z~3@RONY}rbBdmP#Onag>N7$4IMH`Ec*YtMf@8B0UVQuyxM&3z`#Esmou zq+yqhquHa~x=4P#5Go+A89Np_^d2$W+yuEZL{k3KdBjm3C>1RFQeWH|fVb(l;P>o? z?4&yqZa{Tn4y(8~C61dYq2lyifa%xI?}w>-vugLG|2hrg8Hp*X!JJdR!cEMGG9K2rLAt zIASG<6Kj>wn9tD@rxM9!NH%N4nwu(a1i^p3>KyU&9QBIw55D%fL2!Yl$b3O3g~FF{ zOlOnu26$=b<@$TLp)+pmOr8?&GX@Q0AWF3USeDU46q$b?Adp-MY@Huhl34MUf4uGY z#(GbhLNYx^bCAgRMR{+uq=qBGH8^daY!e}MnBGwq(M&7PlrbtxcPE1NH4Czex{QBE zl(*HCww(jIocqDRZ@sxWDS)go6r8(~@R&I-#)k_OvMuMjcZ^2DY0QJvB;MxayQOKm zT)(WzJ#uS}WP}Sx4J>xm>>Og^a!74aNctW$HL4}cJWaYK;`lDecXzET)B{tCWE6+a z&Yb%s%l)vGI_L4E*LP{c-L;GW{E~l;WD+Z+jr^O?R=3H;VWS{S%#ZpAeJ?T&ac)!H zL^XVkF^8CFP_bJAf~w`qN*pD4NPbyXnCZ>@S9?v$=R}i}Za)!Q!P=mAP(2|wkbzYe z^1($VTc!6(*1j5SzG`;dg1QQa02~Ne-BTvy!Jh?X|eJouv1dF6#estWpUP zc)wS7hwGa_C4dTkU6U0S-kr`Hv~>Sar~Pv8KQ_GZ6U2wCP}*9RKA-!^c- z0eyQKz4;URa$ZR`pUMfe4_~f^f1MrG1BSoF*KjH1be9?zr?A^KAav|_O>AQll70o* zgtZ`oL&7df3&sK@?oDMbaeS^xvdCa5?!W>@yRUHef?vSeurYfujpct1CaA}@|0)GF zfV9zguDFgep}kZErVF4^SCKlVlWjxFXfD+(T9||ZgT!g=vAJHNuA6Qa(D3uL4+3I= zBBIBUi$41F^>?kJk*q6g(Bs1IJq!|zvZ9+%-U+Q|Dur!xmA%A!u-{Q~t^L(pQ7x}) zMFf1Tz4Whj#jBR+V0wRYn4$$vti8E1cuvHOUh5kp9_talX!h&Eg@@)h=&5s!c`x7y z@NO7|3<$YhVV$t2K?bW)YA^Z1+ZI;4H2!sRpVA>yP4a0b~)ebduF_6b=Kbn`fvY*5iSpT8TrJe+& zLL#kf%;jo0I!my||8bGAzD>F%sTJ0D|L04nt-$XUlG}gGiX*igfW9c&)lqGPJHNB2 z;@oG)KkYHZ>wr`)6%+EP{gA;nF{^KD2ua`AhT>$P>^p#NR74Z!Bq#QbU8t|ql{en;!S2bR5e*;9;xt{`%r@-eAy3l=57_(J$!EQ*4Rafv<2*a*_^>6GHLs z3MY*m2y;Pp`&NOb!7P9}88tAc)Hnb&K+3=4app@lDr&laj}*BwJeOu z3zLAri^?D%gUwhK$7Ng2L#gX?wUbhSs7yf|z5)BkM#W|jwlpvlXPF{j!)j;28L1T@ zm(`RDyKLEiXy=B+qCX}z#q1`6ZdXG+2nr~n;{=n0+@vhmo>&xKAP`Y1Q5M-_XbI_XrWZOZTehNYQ-yok|Ap0qMHVLiYM=0X7~ zT2YDjCZ^;#Hf=Hc|72O}1`?>9<8Y|EEwnmv`#a@-YMzM{U`)(OYYku-NZ|Wo$_FdV z7dANG;+l~xv+MXm$IgWEq%6NzD~g`3Xv{`V#}L&@Pzt%B1z?GbefTQ?@m zzK5;F!!7^FL~rxTv{mlQ971`*dB-}(`p_MJco$)kSyU#?9n?35+9})8J~+s2C^t-o z9^iU%Z7I&Tw9;TUxYnY6i)h0H#LrM*KZ@Jr^gj(vfsm~!c{v<_E) z7L-#4Q~dp+*Lzb7lK6`*mD$itM6O8eq9XRJy~fW)@6_nyJ%s5Xa`5K(xV_>@s~)Gm zP+owvUW)Af_<{GGpn4Jv9ijmsnI6i3B;BVB4cXW>7Z;HPEH}?Z&RCg`*;I2p_Yvkk zdiaY4EQU1%6iqI!&4&>#)oR`>(2o{>7cA`A90FRFy5SO#yJ7p{Ks0#*=E6%08Sn)@xzTlen+Re4o)u zTq8P+ATB@knaNDjx9E-h2R|j9JuB$tX5IlYocl-WTPQAZ^T$TlnT3RD{nvtN?clc%(5l3JgT$!4>EB4uZ8-NmyWu1#BxF_F>w&$?$p6sZq+j$U}6n;$+1 zo{q#6G!|1cgm{hT^f@+vW;ex(6-`<Y707Hs9|`Z(h|ro;)sjun%CS~t$@ zqrKVP64FgKH44)NF)IP~8^UmF4cU0NOyO^+@3*(u>)2|Y>j+GL%aP?>73&25@o!`M zCmUsFQ;qj~gUr4J$6(gS>dkNPniC}_3aZ1L5M@nM9~wFa$p`g) zKL|&IzhX5ifRFKigQ#Reg0}6=y&X+kmH)ElFy1TJPq(GP`Z$0XRG0Y>c5vjU$YdoS z`>F#pSVQ6&EdZxRm#+x~Ero;Qb{3iCu}0u58o`|X>naD=izg}2JoTx9l@Yj6OjKhL zdm!G|{WWV%D>1JTPZ&mLri%g9GO)nGFyXYHhmGlPXDhUS4P3cwe|Eg;1BaNuo78Y_ zz+M$REYTG7rmZ2W27E~j`6;ScPAsZ_)Bk1DMXb>b3H6~`*1>4wzuHx?Ii;L7w{;%> zSXN>ZZ+#A)O<1z)osx|KN>cJ2UnHa0v`?^P;)5HD0(Eot{0oi3kwgO}Jkmj8T5RgS zh`PNU^sLl>ckHiWVSGLg>*NTa)BNhSaI7O(f5^PP@ZD}I&Fb6`Bkdsj`9;d*6%*my zF_@#N)4!t{x37EC9OM4gNam;Z+upGEssV~2N}4cb6yzxbmL$XRJ3EpuBmkl77`>f@ zLosux%QHlRvCT|K(Q?ks@h#zjt?>9#$h?1sb7Q zUg2(^7h!=&lu~rht+>W)=%eO=i?R3{H?yMUBE;i&yi1I^iP(>~WA%%V8KcRb!!6Wh z3q+4C5G?eEw^Z%quhK=Wsvn)WrtxR=z-8Uwd>6R53VM`OvLRe%phhpz@}|Cd*%EY) zJpsLcSYo2c2avR9=MOW&|3wkUyo(V>YwE%cJ$N=9=Yif=Zy*6$a=s>!-o@jt5nsvr z031?XRCN#r5w~nn-rUhT^qS<_Po*R0gA9xD2q_7SO`$KlR&{)o8H0B$5OGqtY0OCN zrY=qMY|U8e+jsPrIZDn<8Enh7TnJlwRH#IM!N#G^Rgd%vtX?*5JaOa{ySYIgcW^p_ zQLJ&A#t>&D#dq2dMzj9jDMxj5*I~IF6j+RR(-;l7($ zVM_F9{|>?;&|jj<$R&0oIPxy@o;$g?IAzHAPo=Whqb=cA#a6eIV0dh5InA8~#}9XZ z?Wt^p_Gr*mG@@9SdDup%M!}(3(i%VZ&M@~{{g#lPyQub?1N{a;E*%|+P~^fOx9p+x zzdgDFqVhsLTFaN6z{9}-R(9K?$HTj$wN_dLB~L3UEXHianGu-p5o$(f%+7uaR&1@- zxOBs(#U>8`mEL_&K}(s*x2z^on-)8NsW5xYm=Ojdu$inAMOpvM&n@2QB%V9|scGF> zMnJk0n7+QD!Ws?)ZL(+8lR`6@l22qNC=KC89=E&i^b_d{q;MO7U)lo+L4A!xEzcGKANtO)fq280(FJsdBys&?T*HN0Tbt1yhpD7b! zMAuI9GM=8F-O2TH!iA21Z0K?RsgT|L33Js zT^0u(!Mqi#oped$=B*|OAFX&w%`=d`ria3EANf&xl6`K2?DQ`F$y(ru4?O}H^93*R z{~tKVhXLV@sRB^$`d@wcubtyaWtq?HgQ20de(Y-*$hJ$<)Qr1-HGP~A5`E|fXaZk! zC8+M9lV51C>&Yc>YA-0E)~sj-ajsII=I+<+;$s1t!FNnF93)LNmc_N{v8jd*2h8`( z#@zSTm-Wv?0(bZ81!Rac$f2FOCXviiE#a_TyAY?d^pIeuB~L>fe-b)Ge%6Z&gB<=I z5p%mg~~ga=$>~S)rvQN1~U?#yqt;A*@>Lnq8}EX zb6&o&nrSrAPW$FDxSkrJHYVp%ruQrIF&-L zdolS0f_h%Sz?b-?b~Bi1%010W45PiBSTs~M$isatCvv2LP*4=cXkk=%5+|RvqBhTy zBm4G~gg}gc%+*KN5fT=JVUC@1zm%Al0+M(B_3 z%C%3R=QzR6uYCp!ZBqrio@1-A~+H%A6;5sLG%5y!;dc9P=MF3JJS7{ zL+8H1+(kj{-GfE*Q1JKL*_*rhJCVLg^sAJU`2x&;n4-b(dXdPx$yZF69%itVKn;zI z5WMO~SxTOuIn&nGAvU9eUD+)8CWsn{KNGnD3Bt8tc})!DdLX~~N~=t7 z>8D0u>%e9~>FlC0ZTOgj(W+>?me`({*qe!nurKL!^8X*8d4&;Q!X!^1khM-9*5h8f z#lmKPLUVy=2;Pbq)3G>a5g^Y+vg!KzxpB=?vccXqXaSZ_VkY|IY4*V63XSR7YGee-k;?RVjSp+f)sXJp9`d}jPiH4g zTj|#c)rC8H*^*fe>AGBEN)(!qM`a{uUP7~feDwf9VDt2;4LT$}HNzku9nsrM6b`$+ zyF^fsa9&%tITm>Ek#(ppLJ$;w6U3F`Bg{mqt=&LGxJU_Pp;^aL3j^~-13W;q4__B2 zlwO=eBwT}JZ{hRI7ZuU_K%;x@kpi=!a3E;mayz$SAA9Gs)bGq=`StrlWZznz19OFc zpHKZE#NgF!mu03-d;^8lLM+p*&!k++{dp>-c3e4@Ss4QFb-Cg=>yI5iNy(I6x)1**0SmRm8V0KdJc-$nUbJXL9<}e4nDL ztqiEsuVu!z+nXS!Axu=A8mq8>v;i@Ptrbo{5r^zOgqEnJEH1Q}0I32nl!}k3UzPT# z#!FGp*5A#WDc2a|`C53Gv9L z?m5;p9mr=eh&8f)gJ=4LB%LJ$o}Kf-N~46%+tj+J8R!O6z64Qmm#BZS8>ceGS_$`w|b586O6X&p~ZqkNUU^ zghl59HTdRof5H1d>z1m2+r+eu=Mhu9>y~!qef~E~y>Bu{V}q8-MJ<6f9c(2<=q2;j zro_qtna2H_{CE)8*1*<dh4{$-y&%J|Fyfv-Nn18g{y zjtlGw3x$K%$8*8N&f0(^8g*}s6u1}aFW#dyA2|>&cHRlp27s}D`(UkA!x!6GnjEZs zw^4yWm(d)|Oa92$YV}6C`J|-ayt-yjH1)j`+c!8VM*(w=C7?K>R7-M=tUrU7O`yZ$K|VlR<^ zR&Oih$TBgWD=}&>$w&;jksS;Grc5-+9Ngl03xDbuaBu7>27%bfIOmcSBnIKn)Sl{z zBL}UyQq=B>W(9I4=9N{Vf6&U>7TTpx9xnKtm-tD8iQK?{gd+JmsmhB;TzQo0Isbp- zViETfolt?#GAAfbTN#PgR$ly@MUc9Bs+5!7wSu=wnFNnuF3>jBd2i$2Agzou5`z z^^G0v&Wx>pjKl`N(NU4HIVlCvt-&u=zT2a0y>d%keH5E)kigCZ=)XE*E9%H0hXI?f zd{q|RZCPConAxExlJfWAa`JgK5`Shw+3HrYPI8%*3_wGFb(#;?=l~k4UWuiWkv5a| z-Y%&_3#}V5?8y<4v2>xJrNsH9w#!#W1_e_19CF`(5%`77@CEVr-`O7K59Uy>gdxRI zzDBu+Od4MRKJ4b!9B}ii7D~LvoXP)Gp?cuHt=T||<{!0HcFWhBAjq_V6Uqn#R4_7E z(zW}_AAKt=&a9aOw`XUf`#<9Z>Y>o7e4(dbIar#aC-{U`Ue-{FrKv~0XDG#280$^{ z9g1atmRu-#e=uHdj%=03!Pp`3<;E3{bK^qqSR$o>S>5ssoD}GEiK)BCx6$)$8?mvi zqZ{Dr*~Pz)05EH}4TE-r_kZ1`(V6h41cvm!zGpBD!w(d)<*t=0--n~oYfb53_hP+t z(??t7-<3@sETY;CAUyruVYmw3|3#m?R9TOIpLcYKN-_S72NfY^yy%gKoRD1;Y|ac0 z9&l3@ZT|N;CKTr{i0l7q*fzV|P4b@Zeu71EnJ@)pm|#4LQ%47Ve$#d#xY|Q$+57BCi#t{5*+EtH~BYnrfo%_N09t0UsCDuvJWL9+%RD#>l?#Yg0!2fS-6qL+Z>03Fqnr~S}&Y6ga6eq$UuTsTE9}QBMH`j(4yzO zqm<#6a^0}|_KSq@X-^M)TOHO>XbFh-eodf&i#d_j)!Uabrz3n2LV->bqtlj$=-K@J6EBzNZ$|kO zPhJFbGUNBBI0dxbBPixovSYM=>|{b;d&7XVN)<@=m#c(n;)tk$9gsa3S9(O^yUo<) zntM|c=1_;ZJlyh%C>KDm>P#%0ZOU)VAzxs+(~0|r@pnqsaG+&tYk`$Qyh^2R6rMdp zi~yXtv~M_RAJd#e-A53-ulrpR+gBD|LZ7zhNyE{bcuB*+@ClVrPTD4a#4)3+BgKwd zblNLQ@%jByEXnK8%65qxNp&LXG^;;(uK~5n{yKG_Kh}R{!}Lp3^hIK{raNrLuu^%w z-3a{m5<%!JLR{g?I*4gpu14H1wa8#B?3N7^L8V91&WgKARqq`u9sG+cg?H_d(fLx! zjR)8?Y#XudY2iksm5@1qvDAAfo=x^Bb@zx|cxj~K<3Kfq{FYri0YqnE{dBmT)Ss#Z zB$yEqrJ=$F5G#2v!@s4M5z)(;8wCa0{GI45fWMPKf+0q~+OE{b#!jduiF@xP-#Pt^ zY1)Z+d@Z7}Svr>FT3*?2Yz!`?oVMOJgU6%(-WajQeBN#>&(*qr`PIgohRXA`hm_#g zf@F6U*(w)&899VAd{KuDzw^U2Hh}tJIZU5$oap z0P;RpmJa$AJ^LLe{qTlWQw&+Exy|kySz=tOW!sUX3X>ac30Fq9K?Cvnqnv~0bRI7B zoumi2rG5aaI1s3R@F$awb=AR%J3}XBxox;aNT#fxG?0Lux1FeHQ9N;pY=JEl64(CM{oc1%5p^H&>8>vU*-c1sdv4y z5T$g<5cRJP@YBF+!9e=EuGuqkL@sdJyue!3-$5#l{6qwQ?kwT4epq^B;7b3%D^n8j>awy|J&w8cknpdJ3FaxEESHKA#QS9AiUD;mYM4 z1XKjKOM;}th42GvZB#Wm1rv*$7gkL?Z_CXPX4gBHgc&)SeI*E_6#RNnfER_M7|@bz z0;jxn07%_`0@R;n>#jjpUUupI?>ffU7l)3GEqa*PH7C_*r4QYiQBo@u&V%t^RQT27 zGTC8}EHOL$5Yr{?ZtUN9g|iC&Q`du?XxCb3@9JTp-uP$dbf|(-7f8I1v*)~BGq)ZT z-5UA3CByLVzAZj+y^=*byR7-pVP?^=9=zzi+;4h+lGD2`O0$Y@t7z~*UAkadpsntv z6hm)AwGdZfMm^wGRh$S^+Z_6Ihjt#VuAS% zE4!M3-My$t-$`Z(1~ zmf{nC^Zsit3f8yGv^V1W-XHmWLYU+nE=bGlZGy3!t^G_Zakwj zrn)*Lyk;m=A+RdCY+y^0>;zUUkq0kQ0Fm)J>4^B-Z&4Db=nF^8@QvLshzD^zC0wde zk>nyGg`YjC;g%rk_R9mLFqzP_!nt-r!RfPaZOM-=%y|mnoH;Ujm!9a8W{z2H+lyv@ zUe6k1>F{mns|qGkA03@SARKGETXT)oSJAlTMQgIacB1WA1dc*aXuyoDMCqr;UuXO- zauE%#YE!MU+kRmtjtK0p`Fbb0RK(-m^ulSR=`&8d4eCtb=Y!qkh{*d6I09ah`|zWZ zFyeh4G^vV&^jmktTV9CmSxFeM_bJAI>{BRo>FB)Gqce2k$s>Px4FyYwqzK}wFBLVH zJbBxlMUv+_ed7$=O;%b}g7SZ;2`n`x@z3*4H9tR3_6^9y+uzjMfEA@74t){WaP)Ch zWaD_-Y9V%TP{>^~)iP`;Gss7C!DBI%gQl(S@0{nMx{wu+gXWA zSD<*VjNK7&cM?QZO4e}qC)Zkd@=;4rnt>alzf;HU+TG8iEaOl;&t-!)ja#$hKu6*0mRdP(b(O-|3*5* z-Nfya9+NwwXikhlq(-IG5q4Rj)X6?4BU&xI&KA8>$4LpZrNcuLPz2s081>{`IKMoZ zvY{sbOwWXG0aw-v>sYe%AL#mD<=!6BTRD=IUPhB1lv0qf?UfyVohbRQ-oLDxZ1tsW z2-e-E!!sQYb!j)%S=Y>e*bFip`M+vNB3(&Vxr3;+AdS7R<6^Y>+ywYA!L<427GOEA z2ynC_@MKxaq@5eb%dqCX@{io^aCLcmAh;)E&XGT6HN~T0N-w^KJH)uq-x$nxE?(xr z&={k(R#M){SsJj!xIvb@r;vx=T2$W|GQ()r(!@CJ3?5eth7FE?OR!LbE!F+M(*SuF z)z0s?yQP@gpV7S4fION8eKeeZj>$Zg@>v|-Ipm!v0f|s4KU-giSdFRwi=4(P-CiZm z7G2ULC0fU{ilUQHgIBK8*llu^4U<~E4{tN@qA(GKO3f{AMLGifbwr|e%%}&bTDfJB zgdxa6op!xx)}dFB$H$K^<;;Kas-X>s2WEHqVWJ(|6k-dPYS^nr$tPLNpf@ zZ7DETR7d+0wu&Q5dx?k?gAF+@F&**|%qBM2yINlN$J7`BYj!&l*XX_dNc(UnQ$H$8 zFty5UkSCcaAMAyf-|fh3!LMSm;5Rf+Po`R%dRq3lh3_?#Nl#(O2c{QWxeZYg+TvYd z-=uX#FyiEYw|--5eLQsQAwK2J-yvc-5KtPb4bT&t#rSjmhN=TbKn|>8t8htB2B}>W zGb5Inv{#W4plqEq9+)?ol=DkkyV2`o>6C%;hRzM9I=-1*W7nSXj*Jb1Tv2o;*F@3t!vo2?zJi@hCy>DF zGG(RQo5aF52e0GCC>YNp`4FriHcvB?H>7{_4HlG zkIjteS9Odg#`1{l&VT~Efb+70%99-UJ1>4rvmJd*RrCXVCPR?Q;?PfqqTT-I_~dNi zT5>&q$uL{}q(xDt7Ap19y!j7S)VOQRc5zRlV?Jr|s|i~0@OcKe3b zoiB2})XeN)ZF(FfhmKj^1MwjdnlYlP0oXBrmvxKm499xD!sUq`ZDHwG<_TX(WYS>M zP{!D8#rQ`J-Vzx{!tA@ae>6ATx8_1ZN2x6^qbX;sCGmLJtqB+w9=GSWT-1$rZtZ1n zD)o{^4a`!vX9ua?gC7yS;@zu;o264E1iXs^QP(MMgydAoni_Vc_F8Hnd#lbi?p`T> zmQts@eRtIJq{Q^XR|TR62A~T-%23hF>yj8L7-N-Tg^Zf^an6&`@HUVS|Bt~Ckt)Q_V9tNi~fggryKfz4OaddUM^pN<)%1Vt`n)ei6oh>2IJmkCUNXMZks zq(a#RZ}y1Sq36B%9`*tI&;ec$8q!q7npC8gWWoEA7(QFAA9lMJR;J%NXr#CMYx@%; zH2vihGy8N)u;qXYmeBJ_l`N|p93rVxLd3}@4;n|g4+FgA*Svd!%VE5e<5<3nP!*D6 zK)(9EW{pr1cS)i^aBvdiiO_I=xAeZHsz{T(|lXj=H+>MP}E9qrl|^;`F)V9h}F0cRFxq6qVn83Mx*$&|u@YvIPQ2 z?ap8f${K_E>#yNyRnXXfx~s{R$`Zy=T@)k$`rU4@mlZR#>5t> z?aqn3BA+;Zkov5L6cZVFKWBx`gV3RZ9#v?4sTabq( z6NRc&t@{ryV8k=(!+nn8Z3UDux&~yc}`K zt7^2v91FMi$4IE0>{j8TT|0p(V~3ApcSC4V{rTyltLIUFr$MSk=yI;6MgK@EpY!-* zKjP54@6VV1Qi8`s&K~664Rf!r?gN}Ku-Pm?m?uTekY1yoxEcP}51;A{r2Le`EIPUf z_XF+-91860OlNo+ckL1b4aQUsdr;HNjCq-*eew43Clj{I%jae2J`Z}H|2oaUaseALr|HZUfGWw%~> zW}Qs+d4_+E+qM{5qW#v$hqpFO( zkxkZrz}JggC-?H@{y7%dz?wkV#Rq?97!lz7EnQqs&I#aF0ZICP4 z7oV7cgv|eGv@8bHxP&!nn8WGWp13A^)z9;4Mi^)=ztk$eZ)tkLr(Ya%XG#ZTCv+v< zOnJJV_Xne|IG`PR8qckeNc9-2s%O9D8;?nUZX6^)A~l3dmw zzRJ;19GkK~$-Kfv?`6+>7KK#vE$qgjP$SY52(X%>!57i_fye- zfed2n3|}n}vZ2^nD>;_jZ+p~}=|dF4m_gaG-pzuqu7DHvxPW zT)nYT`HMERMTzcB4u#*TyA%oQ)4tBi!_O@FN8p@V8KO}{g$VOJV7^>SswQNE5X@Di zSlv#m-p=MM(pd{h$Hqz^U+S9C&5WaeifhpQcIB8w)&}~*u3J_WK}~L0ST*xnLv^ITyvkD4B0OVbYuMj z{tRKCyG;>8id}eHgpvK{5vWJ|!?ggHtN8Jcr{T7AV0;adYoG?~Er0%w5Fg=x``i}R z=P4%~*kOH7A41Qp{9&GtQ=FeVqIMO&;!(rZgBz!rZV7a% zOb&jqBacE)Hke2M$TMpTwK$HfbrDzDCkX$HBOTkfdMvZMRPPK?jP+QUHoLnmntNGV zR@2eEU_8OP?L5~Z)lTy+S4U=FiajZkw166jB=6dfv?UV9Xa~6KGB22&IWfLRP9et#s>+k z66~-nd4fC?+J9o>rh(;~x84^6LH;{=d%5B&2~fJU860n9VZ4rB?$;Y5yzbSk^C|=1 z`9ouoRK6Ok#^pAVngY~+=AAvGGOWfSJ_`O^EQHjH(RSvxf=00>sS_$fqVaSEnhkMh znZv!ex^Bz|0HxorJglX+Kt zSLcOGQ1lK`ipm_E)cwxOt^9U_-kai2ee%F~T645{1P5@4^u1D1x+brr zse``GaY0RYh@RNs;zi71c2-#?(Ld3T%~t#&`848xvgezBepwY<2qu@-3(LbFJj~A- z2St@PhgUi~E3NaRqqj+`DF0A7Pf?G;5%rHZv%Xq983&q6#|X(2epm-C3(1CmjOPNh_-_bl4bZ0Epj&Vj7T6wv8cm7 z;#k>tfwlAm@^cMA{VFZ%wW?Q>qQ_TIDvm`V#VaAtPzecG*EUQR7gy{Ar7Zk-`(P09 zrz>`yw2fg`C`DC3iaxftP-3vj+T%2Ud8^+1;QUc`Z$t=zu+fi%n?V_@XBD~PThr6z zwULE?TBSH}q2rq(&y_G_C)&G!nZoJ-hEqv;rOZ=mi;^{3s~>BY2FU3AJm?B`=sl}_ zPalUYvE<_`<%mwv?&`A6az|xHb7YF|1{Rtyvaa`#!a^-de&r$=lWq~`v7M}cuysc7w;U8bBiJHTPrF{cb z7liE(2xX*%D_+4|G+S2BPYxNbt2SWuCU0q_Y1Vk;JArb7imIGw!B`=~hN&7^dRnG` zq6Q*^He<=P_IWT0g4FXxb(^o{_f`0D8=u((kRKjiA0XzhJw}iEqOXD|*na8*85k$& zlL;5}fXV^2Z^+=uuwAL>%i#uB(vT7|OH1~6s8a1t?QiLcgd!$&%j(~1F;Qj8MKR@w z0n=+do5(L9*q$v#DQ$4>t}c?yrd;oT#F)nKG9tXg$S({!@I{Yq$lClq#bqnz|Hx6* z1l$l-_F_mR>i0h{mFrH5Esmgn96;wveRvh5w&_HZA=z`t8Jzx72GLRzoZZB?ZPch0 z8c2>F9xpD%VdaU#Xhr#7Q4WBm@TMhg=wQ!=R+ZzmaS811O5$dt(G?l>&$6$7Co*9q z7kQd}pNiLpE_WV2CATIm-)iYmj!E$~##JMQyOve95}E2e(AA;LO7X z)AVJ&qQEGc2jKB6_Jq|HAHEPkPfIvq!u-<`ioecMkpONn;@ksEoj!vkW8;A(+n*y( zhl9c)j{iMJr7*Qi!;Qy~{4P{~PBin}xBSHL7mqt`abLg^e>F}Qt`x^;=zj7d_HX@G zm(T3+%}^ALWLi~zHwc9+m_5B)m3fNLerjV@=U=N5bMeET-Re$#zLh&Aiv@MN8M9%a z7W|PV@LM^O9KBl>JMGr)homr*mY`sovbBSz>iXkis|NE{M*o$27Tc64rP_SyC*d_t z73M}pm~5EH#}ZNLpRYuzQ(15hLFVthin_*JSms2ZTL^`ARIcukD{~~S$^=>%yjLig zt#;?jbiE22Nf(O#>hTDFLSFJ2cQ>>(*L2sMh-G4s%S~1HJR*1^j-oeglS3=EY{XmT zhJH!2fF+4>thB9z`B9joeVw3%u-~36pe-iTFaPFd>q`HXxn`?O?-&ntXzL6bY+{Rrw*DVz#AYgl&@4oz3Pk$#CrrnGDJew%>m`R_0L5<5$_ayggr6TRGY82sX71h z4@+*q7gW;Z<^XV3hLUNRhlv-T5`&%eee;y61YAWxPkwIpzw&!*C3^Xk`cA z&F`Fl_T$K5lts|kusro;f_5VjDS=p9R^fX6V{8g7+k>MR^n5X1yqd$yV*9bQjSjmm z(rS_bcF)vDjfj+|p4B`Rr23n^ywOU+BybGXI}3gmZ?2}sG_@4mBsaI%!AzHKw{q-e zrTdh-fMb}%bCI8^h9yyhi+wC!W}U!Mr^ugw-8ebH&T#s3So(oXEk8)7g*5bs1nvEU zl7#NxQpx$4Qp zxRA-6&@X{TxfdH#(7N*ILPEgr8lrhKg?Nf3KgDz z0!7-t@^ozuM+wqo8R?SL?pJi#)fbJ^BT`CcG96MS(nx}_a*I6~B=s)xWKN-LquQ*3 zUOD1ZXR2S9Y&R0^DS2{>6E=D}F)*3qAvd=*$aHsc$rpXiONad#CQ}LHaxqwNjF2*N z#GS$xJ~t{!ZI7^n@JRveN|8oklTg8b--Nwq|J?~NKGjx*{_)E(p_MHbkOf=>@9p5> zTBr)MHEO9_5LkV`z3Q4Q(`{7ri4yN&$Y_%OIpF`I_4=W9Bsobt4$y8mHX~P1tVQ@<7Z{3f|I7H5_+nD-Np`-`V7X*|A+`X2^ri9@ zO^74y{4QxVY?(ezuTLw4XT37k5-?2#woO?;AGiHZwUOks6EH1!t{=W#1*_US$;~zV zG2{t=K}Upg4+cZIuqCOF1hcm*2_EuzNy~e<%e*64d*82_v@+_-l8%=js1`5(j+l>} zibQ-ZhL?zPLUc>ddk%p0`<>B$U zMVW`?a5ii=>helTHU7<`syh<@=3<7}ot#~XU*uec;^57Zw+qsIug8QjF7C;zLiacd zB`+V|iFoD;gzEZMu0>JF*CbEKLc{~vdVi+>URUj^8adoQARIuZ)mKxjC4 zqf!-gqAf6A4RM#0;|3XLoJFWg8F%FYF?3jApEV5v}dDSK%a) z@t4@@4(|M*BYVmz_ohC79av#I;5NrQN-1su;e9ROvu4cG9F-^LyC*Ofn2F@Bg-OU>TGgS0wJ8Rlx`^Fh!mw^W`F{Kszug+d8r3_$)Qww!urwsqdnGeetEJ!HYpLEA-H!K$Mh|c34@_rY#&t_2{nvg^)Ys&T4n+Td<}%QK@H3E+_#7Er{K-lF zXkXBg+IS<+QeVJRv3Roj=t#&_QDnz9?Yg@}pnHXuh%Q$mPRvT(o+bz61i-;D!)O#w zYX>E2Q5JdgYI!K_nn*)V1lZn=Ypk}p4WDslKP(=rF~JnaZ$25?ObY(;*2$1&B`TIe z(q8JdafCnN()88pj<3ytfn| zNyGgk%aZ*FT)Bxac5Q>kj0-`2rwVY00A~B<<}dx5CZ;h*b^Pqw}!-m14w3yYLRK@4q zP9(&fqZsVwv0)kEZ4;Su@%aLXHiqyel=#Kz9EMg>Q@nHR2W02EdkkE8rEwg2b3jA5 zG$a*&MQJigQUQ8O4oqDeUqtu&bPv1n|K=T(a10t2B!Js`9L25rLrx?#&)lo-hfaF3 zg-VNb@1F=&T(CR`l7Rff(vT@qoT!7e0&h=h>{ZYEzGLr{A&;q#HW6DFjGaz_uGYD5(MZR%= zgW_`CV!?st&W*T4N%mIe0Ai}UHwjO~)OZL)uA_t7;KGI0D)~qFl-rkp_WF~5*w@YY z7hb-&;kyn!P)g)XWvI}Jc@nwZ=Gx2M;go~EJ207nsGT~hT$T{xyFMEKgl$CeR#nfm zIlKm-m}VDzTAYV}SyGf*vc9q8*{Cajt8+T)>HQhFrkcduEkNK$$js__oS_RXZ!%kd z8;69;>V3D!4~E^{3r_UttKqx3Z9Kw262xM+a`&9U_)s zYN^K>yfwd?$5u+*bt>r!`-a8)^dEA;Pnp1nyMaa+E-dXpxc#44q!8{q@SJhA?4!F` zc;90g{;KUluI)aZ#9Y6H<~Kurrkq^N8~CMS``F#fFj~uS#uZfEph7LnC7pT*Rwf!* zrJREw>@g=s2?f(8!7B}_z$p%YM6SY4TBA~5=mQvP)7g7D4D(Z*OS>0AbpaujH>^|U zId^?=8xgpO!Iiw&EfvEAX?0*E!-n{s1(NxbM1DGuAN;giG>p$$p%P9h)vs4W=G>Rs z76yy}YuEHOGa{t@TDX(`@TS9WxXv}(7%bj;-bY+`kCq2$_J2(qJ@AEp%eU~>xx>M2 znVCMblWq@gb;jW))VN8%)_^d?y#`e?R*}nPAAY)jxaa%I|eEq#Fvf)Q5qss~|n z5skRKS_6qm_1Ltl$v@jEZaICYzv!^PQe5jW1V^^FSSC^fC4inkI-fJ2S>_lU04`P< zY*J2N(sSxG2svfdpcH3+8N-Y_tmQ85`_CmyVtlXEj?2{5i{YcUHf{U#CN*Y zW?I#TmK=8fauyiI#A&Zuncny$dO?%NQ{Z*)$%43^&o31BFNB{(7U!L}Fnft2^I~5~ zPvM=KrB_UIww9wDskRSWMbJrWQ9bT!Rzn`c#3$vGwc%BuxhU9wOld!->@tLN+sGQZ zG%{P;x(vI$cDY6|2{}-fOP-gB0fbqT&vA$qjvfvF07*c$zrp0afM^;cqq~(h!4z?! zO*|higfjJ5;|D{BtJW|Q_lH_@rp|A7Ch+GQoR(X#SVYGDX1Rv#q|CU7E%+I zh-mKl{cq4|GI>p8UPWcIuj7+mqZfbwdpH%?|Jif2QKdms+RdtkIpkoJC2>w7l{=%! zX~s|c!&M8%=TM%N^0Qjj>@s_0e!#-4d7X~Mxl=*WoK06_wwWh-e|=8H?Ij{+mR&#~ z0Y+LMLq1ZvtF*zS=C}s?lf`Kw>B>T369&j`1i9vt%NOlRufeGNf5ZqI>F&ml+kNx7 z48{o@&I!`+`wQCa+5uoN^KMkeV;%jYat&&KP3+9kEI;r4cS`I=3~IFYKbPMu*iiav zL5HzYg@GS~ISd?CfA-j|LyZtb&A`vFk|(F|p^Z`PU7}}hNABj;gVaOJ&?vY_`3to# zg<0PZvpiskN&%-=Oq>rTrD0-G!aS~;GUUTmpwwZm`mjo6sQu~;BGel;rkwD)BwN&i zjF`(O74U8%fu0+wq@cdvpP-IrF?jG=#K9B{2(-7w#we;Vpkgl=`!TTLMYUlw27 zo`su|7X^PdW<~1!Y#!u3++Ff9li(@j1zBYf)mYDwe-agg%Dav#L|inCo(~_x4g?A|GkG%0V*87yzd7c z1<8#KHrvz{ZmOfj2r`ljQ(oEXj1I75(lagq+?7kXe;3*~ZlbTUw&-;GUKQe9|C{3} zQF*io>15v<+bKp&7t#5(@ZL3q!0V|qRzeH8naLV);ls?Y}>HPK2 zkjJE2Ocu5^wfXEc&Wb9fa%Zf*32*{@#)a#c_6@r&KP};yjWt5*Dun43qjU$qxEzW5Vn=-mz?1!+VZgz_Y) zfd~5)^evynv=OX(2*@G5SUKPbP5lN#h_5-tO;%M2sW|jUh^CJ|K4UNe_-kG(Molg1 ze^CUsxv~8q<{{sx(aDYiv!{s>dzfBMumeaF(4JnT=Q>&VRsGIHgn1>)&-HV4z?fY# zP{LJu55npP&&@#@g?u|1Ol4Y`Pm9Rl{3aJ7DLMBYT4U!QNi)%=N`NilQ)u7Nf#S4) zMW#-G)oVH?VFX)zZ~Tf3^3IohMFh*ny&%>*Mcui&PWx;~Pe0>pT0F zStZ`<7}&=It6OEO0~(K;p3uyH8k)nGHxCqa5Q;gs2&PzshTN{4;+H`snf4zbw*3G!&K7yvZoNhDmV3uvKOYb(TaLCYZD7?+br^36S2g+x7q7GpcQPv9<0 z$$NSL8ZZj*;zNo`E%s8ms+WJmq~9-Zv1_FJrIq30VXS04$Mp=%&J?8K@nzg0I=Fu%mUeNN5x)rdK*9%&{^HHdk+dr-f3}3$C>dTS zdm7nMkDg9+CnCUGwY`78C-jaS$L>`)BO+QX>|z3m6FHG+1*K(w%s=;jF1;t5q@1qX z=s;@Yx;2|sbez*%Jn>B!R8*&dAD=kkR&&-=nyEP^clyTBLbxs~Q-Pb0Kyfc?vZapX zx~=2CeW*!@08$(qs+82ff4?Q31Q()tMCDifo0x&8V;{b!OTk~te~c$`4!QZe%!|`V zqt;W~4z|n!m+^^D?bY57c_i|TPPayjI;-s)E=#w3Gx2rM1YB)-N)%>KC>3gx=CoW6 z3{Z~?n@i6u3IsGWjY2O;Np&?(SU=D)(_y&c;Yj2;W)``0%4YtwA zbDx#_5{dBW*0l)0f7e=^?>cgoZ{#J39F7e_WT|iK4<)nUV8Q@izj+}f6?rMph=`x@i3;{bB8p= zCr0?rQ$aG8={!az9YPs#iXzw&a9-9)ev?!Lfp6!Cy{xD0BY8~I2V1=N10B}S~NLp8BCDF|V0 z9)9Is_l(G?e`L<$%ul|0+}G1sbW=D`l11OUZw%uYudSQOt^c6#EFexUFMsz7b?a_W zA+S(ZuJ|QjP>tc~4+jFgrm9#3c19=se~kcZ~FB_Wbu`N==+2%Z|%P1QzO%y*|+H8Me=hvE?mc*US29 zrfag4_P1Z8xIpM8Fmdwga1CR=MGJY~T>nPYfnv@nsDt{r1ds4AA2`v~JM4248vvIt)!cA+MBT==V~%kxb8QzG!LiBSr> zq%$Jh9;|O&V*zNtz~E ze^d?SdfE&M{!NXWRY!k4NS9KY09kX2c>2N~pnojr-Bh{**t;znnaK|kG*N+`aPH`G zc}goOqZD@Zwm7yN%2$M(-B)?=Kr82na?N1vE>xz0b|dWtnVd|)Nl3aQ6)hD~Yj-Pq zq(4t>l-G-*-U_|)-de{WK0Zk$?hJT^deBkiE`idz6zK`Q^HjOLAk zv-)$%c6KG0I>*$3_VfdV-s1EHS1z0mUl zzv?fz*c+qyWkD6uca=zHH~a@6ZUT(JhY>9rW`j2OS_oH})>&aWYKmPhXx8qDe|2jb z`1sH_t$y#%h73~*2N=eCfz3^o@J2;FR%ysx&x0HS+2u_aSyCd z=FzURyvb>cs~2dfB@M@DZvYk|#VbM=HU=&F-(HJ{QF!J_P?-yIu1ooRU%HDbouz=4 zc-zh0TU*DY%h5Bs?v2-mGi&u?&twl^m76zuA)9QRvr2f2&@KDz=N| zIcI)rIl9B0_3$K#WuC{x0ZXGF?h(~UzdVq`vAS5>8G=zcfEzuZ`Tx&=$ot>hO#u2q zb8$dD`5DFFTKtVl3pV-P+p_{r`>6M@j!s8HuM8BvA;w75h$d0#a7qu!DARe<5S_c% z66mtI>&w9^UVh^(5oyxRe^eF-HQzbihCv~Y8H5|FBs~D@#NLL~#K_Us84yQpp;`gj zLZ=ZOBsR6Ug;Rj_Jq+LTGQeW!itw0%wRORLSgfd+XlbIW8<*sO&?Vul6{3#CD=uUt~tJ_T) z^#%K4CcwSG$!l$WWGWQV^MR&>M6Xp~oHl|2RN^UY7JFD)i{fqBb!UHM=$7aQT{cX@o3P><737JFC z%C4p;hVn*2mmqA@n@Ev@-ogi3D^hciX5feOe;mZoeU)hn8f0h~TF$m; z;$&e+>c>YqxIFsXoF3-fTYw?o>V_2lF;jY*yQpJmkMOox8cL54yd3geCGeT_+^n`c zZbf3O9h4-ZMxrJOW|=XfBh)c)I>6gO=njsDZH1LY$6MTglqK57a+dxkelUT-B*1Hr zaK!%TUj4*knx)4L~<^Yd@Zn+$wc;ClbEY8K|K?k{QsnpY93CMVS06i#e- zyoIu-@-6vfqll}(_s8ggt%~`pUZWFgZiwbr1pmPGe|+K%*Jkzku4xZ+S?-5*@y2T2 zKK|FW_h_3G`2V}H39$6}s#W9Q-^*G_T zPJ5N$tBpdNv7oDd$xAwHjh!#MPNHJp86{UKFkzCS7040IaPX5p%AoBr$w&B9Soy`Oa0JoQ&}qfl&_6|A{7HS6A8i z-_E2qcvVWzn30w|xMrWLM6JTHc5j$;e|xlNWp$QWB@#MKQ{>?=A=X|!W|0+JXy;tZ z5i_l`%?+x7!eqV?Ym&mpnU9tkz?=uH?12d{I$&JI((*h0Unmr!bP2be8N+Dbfr>be=T27>S37^F>wn%6|7v6|D7VPH8Mc-yF+_K=zfqkuR>HH|J>5%D-wur`B|{VHCiy^p+kCWgW6(`Vky%#(AO>?%z%Sf8pTN>Yd1R zR;rF0g&2*TRN-TtBlIQQ9PpYJ08svB2JyEFEN;#7tK6az>Hb|-$kQYX<6qj_Oeu7h znuAA>;t4o7ZbyTPdT$ZpARt%}&)@UQ?`q?vsoWZ>BV-5V`yXI~1IIo2P_N~X<7`^~ z`lz&+BGuvW}W1zll{|lY_RD{A<^87=k35P;cVS{z55-;lO;Sq#WyVzwjG2gZ zRxK0~SVOEUrvVeqcmkc#ji*vgfAYbwY42q#5I)|AP5{Uj~e8Nz!}wx_b1rij&38HEd1aUk%a&B4=?$q30mH z=<0on)`>yjym=!F9Bxz26Z&#O{g;z~m#z(|{e>E)KPuJi8nh19R|uFKqjutQNTMX~^m|iiU4W4}fYJ@u>Uu?`nQIQIxbxA1uE-4cXM&h&_NR_q$ z^akg+HB;5Vnxj&i`sAdQ1%*4xsll9bay5>#K8dl^e*-hs-~+ET)%k9x<(QrvS=Wn=qTtUjBcj&zB!5K_!WNd@w|Z5dmctE$^<-6 zRw>UYf1rmLUd7Rf55Ag6xeR6As!`UvLUS1;)as+FZ~$}rdph-6A$Qld0p+Ct5Yi4xeboe<-t?yAq7HK2LWuQBDCsLA_A@swv=x z;~*b`olv$=_n{z@aj+||q<1sPi3eSA%o4fZ<#c}fZOy(LW=x9|II_7ch1co|$gD4{ z&@htBD?wGCJ`MY!9p`rZUfmaD9QF_P*p3CAhG!VP(FR)FWaFIyv40a5a(o3&#++3V zf0X@WJ|Z0M!N_qv$F?c*?g~uHzCm2E6K-fV?NBnH}nM7R9FZTbQUViqg z3+J-X@l;UwCn&tw-qksvUI`svpA_wce^3?zFC zdOzs@{!yVkZuujoRE~+#`b=(_v{=GO5ton`T6UPo$_$k|6}JcV(VMp%7YE`=f1avf zDw!13OSp^o`ehHdZ+quja}97TFnrA#*=pkqL0?p%eSSyQ)Ns2Xqm?~pKl10!d5;{> z`4bqW;KmR^$>LdI(gXCMVTZ?E*6L)dDY}%&awYn&D?teDssjJq0MBtH9jrA;-7|TI zCPn(!hq6$+kLlc6dkeo22pflFf16MIY($;Q;7A6t1^9&t$2Tc$E<92ivicP`n-RQ( znT8-7(G6WR#xn|(jgeaMm4Yer!r5ofyo_LP;L>J1^8iJlaU0rr;=*=8o3TKUY|1Sl zZSFgN+D!o>GJbF|?|uvDz=rQS{{9T8*_>fb41s^eNQr}S8vLV}@QI;|fA6M19S`IS zuVq4YdxxP1tb4-Jd*%4T8l^gymR10@2IIgH)U)V|Is+hQExW#7EG3}7gkHB~)GE(R zwcktm=jgQVbhHvIt7ds7dNl>g<)z zE>QvGcE{M=I|!SUk$X&Ge~Z=6chDe_c@0?<=gWY7r8QxzU35~51ZV1UeZU-Bv-pIa zd-~6@@>W6ZI3*gpArPg_WgAj{Kc}1=pD|S86BH%bkwqh(DGq0TzRkF z3*y|D2ocqSzF(zWcwk7ZC=E-xv@Em+X19bc7vh=@E8VT8V?_l(fAFQOowGsM0fY<4 zt7_?6R)I(_TPClkz+BhIKJgT2QdpV?{pG=(L+H?T(NMJz0mYxlWQn^Sca7;?k8K*6 z%=+dB-|$3(kfk}NDj?8`g)s1DB|1}PkMg>O(4pw4H-e7NsF9>Klgi@dN;2rhRFrEr zUU08e_n;UF>ZcBVe|YuFgZ#&wr@`?a8*B=XeI)}uX581M+jcI?dgk)zaF;`7b%%q0 z({WJ;I6tEvZZGHd{o9Au?k)4~Nj+}ouaBp5%e}n|+!6i>Oe_Z76j40+HFx2^QT8yO zr*jN8@X_28?YCkPxcq>MFxo4TlhG#FG$?a{*$JFzoRe8wfA=QmnD=@gPnJ;x^L15a zm1b-gRHU*ddg&4KI_ad1M-h0!?K*9cb?0%{22>(-T5XOg@1 z$FY=Sy=hDu?W9w2bA1|qKqoJFjYysd(UO*nQW3oRr@5fVTH?^sFEf;?i0e?_ zo(&U6ieS**_Od%>v2Cog^k87H%7I<7i;>nYKm~G5U;ovGoDQj1O~;anC1uIY z&lj~1tIrPG;$Js{(*&VVMBOb>+6}>gt7vSs`-|7LH5vS2p=()_bSL^t65lon{Kifa zJH}v-e>9)BE4`gPlVT_j*ZiWtNQKWr}UIJ!E{3PaqmQCU=3%oPX)$M>c*F=Tcar#eQ~J+?`3x ze?U0ZEi%ARR7mD3>qbZqbtaKsQ7hT-y_vT{cMPiLI_#Y84^-gJPU6a^+zvEthIQ|2 ze?ttbbr@Bp{bOdyA|~6Y6_V6>wbKS#Qxf-zCxR>v%z%~ ziIjWm@N^>D;LTbJ*4)&>nUb@yT7m?FcF_+`&*=+yml#%zS%`j5^S*5=?p9>){Al9u zo&MY02d!=^WDQv?t&rym_#45L3P{I#e=(+cm_I7Z(@;?<1iJs}Y;RBGz6tT@-IYw7 zutCWznXNsYE_U^V(Ms0ajs#R+0|Y>J6G^-X{Q>6@!z}o6dK$?4+wyXYd|4h|j5sf* zcM)z>x^dtA`=eER_W-i5B2sYtVt4@fg_MxG&@qQ#_$`MEU@0P1Ho%u+ehN<{fB0)? zmLAvGEGs4~G>B^LNJNEH;J$$7!+9&?W#{;k`J|_OsGJG#(9k%CRHhIL7j%0JghQ2L z@4Lv0H51fP#dUh1!fVu5)-s#5vi;~oaekjkr1b5+p7g zqg*>*-JKFvJ1zOuJR?h5{k*)2e;792lY_M$pFz(poz};L5)jVk$@pjZJy^^TFrZ2Es4&gz zvof+4-T-0#`2-Ztf4E+Y0L`HVenJVnRRf9Lw;q4YO{Q}VVCtZ-8rHv&#^#5k-9RnO zl1}r@v~h9;XPyGQfW75um!7Qnffq?*$Z4uFt@Nsli#XJogRA_q#A0nK-Daao#sslE zMozI#BgL3jOvknW2ft#=e z0}NY(p3R+yfAFe?P#VGI71D|-56Q!d}WCVkU(vYe0DpLHv4hG3{y{0LhfE3?h~Lw zSsr7qtK{TS8K|uQkWf3?HsxvMp&Y0wT^vgK3lkzRT%K~wsGiuRV6U(rxb=!-Fvduy z1eB&7VAp9M=1K*de{GkLsY)~YFVmGw4!{@QZQR}4ma zWh^&2Svgj-R{U`A4vVI}pu~UHudG9+DW9}ieX>^8&@qJebj`x-7>@K%i)UwGR~--e~p+ZL}C=wQq2se|r)a_-*;KN5Zxe8e7+7O+yG4N$*j?^RS^l2YDE6^w1sY{}Ps_#WCCD zvgy%pRl+DvTsNzX+N$=mDR32j!!a1ZgQTV6qUR`34mcH6(& z!A3^rUULmG1Vajx4x~lGAb|Ec`2tG;LTEfm`+qWif4TndrV^9>mzU|*YxRwheCnST zqI|`s=t;OLk*rMkREfg}!eqou{wm)HoS>&9&^Ch*f2>%<;QMO2Mz1ttUhoRuh85TI z`7MJ$-375iIHHfpRJ#p$^%%TOUUm-t%Iy>x6ww`CQW(49BE5r)m32iOo3x<<|0UdT zkl8IOfAl=^RCWC2V)OVoc%>Mz=4t+dim@;J*Xrp%*TV8S%!OmN$Y)FSlYti}SueRW zZ*VYNGtNAO2PS^32ZOWb6J*jm)t2Hlf6pJYis*>BQzNLK4Xj@Y1a1Y=;>8P=gCgg;f!C$JXWyq{vJ`l)u+V`&|^ ze=TiK*p-5 z@1b*qArg+Q0WGAjHb0Cm4TFiRkV*&3JTk4J4l4D)V^yAv!N%k3PBj!p9jz zaH~MK++L3&vA)g`^Q%WyfKS~ul>+wue+q(_;WKqMdde#*X>2YQS=mp{-AbU!_4|)X zh?Cu%;ejp6Fz7evzHv)zF=6N=NR?twlA6DFnOtf~F|KwYAH88jKOnn@-Gw_{s_44k zCj!bHgF2?N_lo}JrS+gb8fz-k%;%>pdBaqIsa@Y(!$72fj;eAe_}|+ zKu42idumwNR-So}ZVC6_Wn4RDw&=HJXXNhc3eNTUtQ*@P0ip~aJLV{v5(%=}sGbTk4 z4o|1%`{K=j!-qlAD6xbemf~{z_WMN^tcLj4pN5<@$B5PH`_?N5cvQjUgETM>dkoky zFW@tgY>6COAKX{WM%bn!4oawZz@Z4*@7oq!t%H2gv(e@ix_yw>U@`GHbhr zOd}z%NGYTlqTk>N z`OhyFRLq7W-83o8TZfFOSG(<~x0VY1Qs=&bpD%H%mNJSdfn?6Be*v00Z8ZQEGR4T# z6^*v*j?vWkVyzGLElE?SV%TcUuoo&hsmW+|G`$ z1OD<1)JRPU4h~6;IW0@W)YL~`M$h6m4YF$Y<`hSmy zX;X~E4a^yoKS23fq*2O2lL#_Hs<}KPbAceAZnuUgL+#_~2LndrH;vJ~8TmA5hI0WN z7NYNB@d7&D!u{q~jjH!= zm)nZdOF=S0KjJv&$8N;BDccMU9`iq!@(Veu(!%%f*vJe76o=4<#)K_<0{^3w8jx%% zwwJxr19B3L%wWPV6wm5e|6|k!O;Js0$D5>!tPi^TFN6BJb@meTjNEtzXjlTLWA7dW z@VyyJe??VsV*@e50iznfN-pY_f7Xw4!#3l26z7J}>IKdh7UdSNTCPz5sCpGs z#CBQ$39I|mCDef+aTb|uE!FcTWwV=0uBzh+H@UR_06KZ%L0MpB{b$9=0a5cdA8ltK zIp!eXl4td%)#@5dZ3k9n zD>0L94Q+i$d<|YcmEJ-_|MZYz2Lg^&yiQ5J)LLMe0Z;mr7LK{$2tuL zA1cR#cG)Pn?tI$m;SgPWImv@-;WCRpgm(|wsk|n{%bCh?J8hTNO;mxjmQP(qP)b=} ze+j)>SX>Y@0N+gJy`T9GeVivjaM)cKb_bx}%F76Ee*_LS*J(HZZf5k6NpD{m${V{ypmKbx53)25 z3nGBT4@CsiAIb1WJI2+oan*X|n97byV8q<$;@@8sG{kt4Qm4T|`n}mZ(kg z2J{z^BOF_Yn0WPtB5A9I5uF1FW^{|jNMr1un{Pd70jU3*96{Uhz>Tc3$?Jwk0FopjZG&P%ck&$3^W@qRYuo5sA=}|)yFNXte@tIqbsQ%Y2qZva=J|Dwp%qKAk^v^(L_ZlStS%4B z=bgl*mV9R`LM`)}9e9*-gqg2pl34=Fjh*~c{Xj1CK9m9CNpAxKdxG*#2WSDKw@9LW za^h5hla@341bO| z13DB0fCPrMnyx!a;Kh{14uto_ijZ|=O2D4B(yZ~_kz-&p2E^@0!M6GANP1^NZGsR# zOBKrFxeKbCu(%Qm015V1e@9zLcq`{n*Q&)=K#a>ikZ_rJkzDR8iNmswZR%k(6OM*r zUdAAL`UJgm-#04BDGIN?f_~=hz8GA<*7riO0efD-`lLeP)ID&sL|dmkg-H8ZL11u9X@YSKK6Ew-QLd@#vb)bh0bMwDg_^DJs4N;F#zTdH)eM= zYP&a*ty}$Sds=Zhf7Ix!Ooz3R^F$4pbt>hZc^@AG&Z<2P-cF8N3JSE0^&`U$40p^D zQ1QihkI$#rq_@`_u8AeD%>8N&n2Vtqgl7x|_wOlK_i$??0x~zkIwYiU+^MsNf18Pq z;Jti9BHOP0JA09q z>5W}=It`SN_u@~n5Y7Ma?5k4W9MC^t+Cy*h|1HmrlhjEBg^Q^e<{A{r<53quSZ1vZ=6*(l0}SKX`5hQt9Yc02$jGK_LS&xwdqp`&@3J~ zu^Xwj4}d9B?Qj>M4QdfM^jNV!V&q_M`_b0DBEhq}-Ueb7(Qnt)*k2JQabSNWHBMuh zu?<>6Krih&kkZGw;VNwnKf4gEgUwGQ za#xG-+#X^2r@5pP-SXjT|G4rEWk|OZ0|zr& zt^aiHf9+fcFcAV{B+RE8U426<1f+60Cd&x)c{dnO?wA0ma$SyrqW6MZkR^I0=m(?{ z71f5p67r#D*w;XHSMb4p@Z{YvspdQm^R~cD)6%DQmBAaZf!mkRALU0JTVFYDx*Ugm zqk#mYTrqy>yq4Jd;MnPUOomTpCV>l;@8@eYf2~dTHJXaNDX3%JZ;=eI7@0|LTaaSC zeZHE@zd8D>9uQ8`LghNTR*TNOo7X)<`IY!!8}{15t+_R#t4Babp* zHY)))*vcSQPLlf0f=6=p*~FLLFaKDxaiS%r{~!&dM7OhX#2HWXjifLwAsy3}VB;Jq ze_4m8=!C>i1N$Qi&Z39MKZAR%q9A$(s^mDu>lPUfrvIvHFNY8{O5&W~qrwOyDBH!b&CeP)@8lfM z!Z6jDXH1qwm&dS!BU&j($-O4cZ%S%Mf0w5M4DY>mpoPd$Gk{x1C0Q8a8*FtI2pSTG zmA-vmFYtT3Q5XID<1_uB9__L>-64&q`*Mx2{u<3sU84k7u@u~h6!4K>8H;P;ce@>{elbV8Nkf0H&U z!GmkupzF_-9BST=h+DR1|6Tafb5yPnfSS~l7EO9x%#>TX`*|`hlKujzWeBN#=@Ndn@^L<}am-eLi z)w(&y#^<8Jd5wj4NH44o76+RGe<`L9UqG78HY)fGdWoJWtCs2@CMpq$=idvtnLg)c z(IEuT&*7!uLO@vC-lWCc??iqnt@7u=Qr#9lqKXx$jqrEf&Z!wORAFwcQhOkpXuSXm zib>dhJ@_Y$%yh<8%l{KJP4dKRmjB=IIAynN~*CQY7TxhBVRyKDKf3`lZw$pFC+SVAA$4n&jKoCdU#MJPu|&G_`mA2X69dL^L_CnnYM=&f(fM$Gk9Y zN*p2GSSe>eRl}1J3e4XVDaE8vtiZOII73FN~8l1&sC7Y`+f2*!Ax9#2(qE_WR zM;i%q*^;eO@qrdvMqas$hy|A$q{UQRA`-{zG1UT07_SshF}-)@?m?H{yHc9ha92D# zb3dI`AwC67SFVu><>a^uD2~-LpnirX-I}8=e0`pH2(8jYsmv1#1^SL=bsnMeJ3FpS zLl&Y?c<myNF-L6zQDmOOoFpxw=C^JoWu3B-yGpj(H+G* zM$8h_*bmwT3FZD`pj<@}7d#Xq9luFw8n~#hm;3=KIo}KW0kpvVv9Ll}YPA^3w*+_r zeQJUV`?rtqpW9AE%DU^!21vph->*Nn70Of-lx?_Jax_H%f8~&vf|i+&C6a0P)|d!- z3ljJ0%q=H->P|HUwCB|S{~+Xo#2Zawxv=yYD$g5~`#^g6j70?{*QlP{!N+4J7V(9@ z-)5GIBfl|b7W{x;J;Kl%g=!PYSdb+!+Y8p^fWJV=O-S>y^}_~XmYf|dLY$=c(ZYQF zx0|#->!ZdTf7Mbl3W!_J+mHob4E?g!>+Z|e<<6#+k&-auaS&jOOyov)fS`%Rf8t7W z_u2`QSgRz2Rf4=gDDx;?BM_amn^|5oV&ab|`!5{{^4%S<5-}0q=ewuK1*pU)2{y_W z3qv9(J)G%M)nXQ#Y3fkn5_;jwR!dXdUXW!$gkTqwf3JRPT=8v*2)bm%JA5v1w5EYO zzgxU76;YG)yL9_@@C|h2F?;ted4?yKS@*vHYnh$)t}~^L=2yHppnkwzSJ6(fx?u+@ zUfL#ZtDrBq(slzf_D3tzTf%LGiwIH9d}!VO^Lcg>s6Z?kCcAacI}r!ohg7o1#jB1!6^b8p>rrdg}KB$T!`*R9EF; zSl!aWFOu*vBnic5KWlp@d8M+nM))ku(zrjJeij`LDGF)xLY1bFEuUh9{@<1tSmwAc zfAH3otTu_euv>sMYv(_%OG<3mH2>!s_NPs-^9b9 z(l1QGrz(dZT;3z@_d1%%0+v8r_B05078cj@lC<{$W_^{iEO?G}eTBMLzD5h)Dv0A6 z?qdi_Mk-x`r*bXnk)FH-&t-jaCI zDLpH^Im>rH@2HyOhR|VO*?`+u68qimowC$e{;F_ zWP&gS*k{%=8fpSI9AyWSNU0KhtO8gab@)T?6$iy6K#`nRO;;Rg3iED&q{Q`AvVt*R z(jNd03eXXS9eEhZAnREisE3pE;X1>u(%i?#cwjb_v}iFuF*v3F_gqwlGL4KAa66qq z3n^osUgSw=oRHihA*QvN;+l?^eFA}mOnE8l+!(>b*=g)|%3gBnbBLv$i! z+|j086+whUW`xePN?SV;B6d=|EDnAvX_|9#=b@XZ2_v)27}jgqO5`i|f61X!Kiv-| z`his=i`4@sU^R|(ldnVX{^@#DtW63^h*aLL{sxR!lEIQ(zb^LbXSU*BRsixj*6Lj^ zuY=sc%{DZ6xSIa@d&UECW(R(>m2FCghIKASbkSbvibw~~=yEOUH-g&;j8%8vY`DED zb^0P!9Ke8Gs-mwjFfwu&e)43;lPKSRiziYS&U!91lY}Lb5ag zApeCv5)t7n7HO$=Lg>OOBj+*@#S%y3bO)(1qi2;_wKm&!Jm#|kp;%C^U)JurYLXUc zm}sqM!o!T6VHCgUr}JjNjGFC;3>$WU5Kl9k%gC1=Fj`Nj;f!F3f1m7_NwqA6&8F_S z2aC}XzzT|*ge15Qw9Df97qhDt0+2MWYVNOFwu+t&f`R$gOjPzc^Ezx1!|h= zw{a4i6^cCFb3!{xh1zyybV~G#|MpbSCPm;;Rk4t+rcE&M-xECp$X!^W6?D`GU-oh# z)Qqd0FlvWzBggD&f0Q2w6YH`>IvHb5pHr4ubl-8-Sz26=1-n3e7gH(kSApoP2J15A zvn4)u_;&Q+y@&UZ#bixL&wXH^7ipiruhDoOgK@;jE@npxzdNn@?el?5D^ZGkSW%E2EHr$$e`p`+nGIW4m+~>|$Yyi# z#%-;EZ9^C#ZBZjG{ME{)2dSnGLhdOJ4t84pz zg1_I>#+@U3|B=>>i3saB(wvc!&4L@Iw%4IZfdGQ!7#-Laq#Z1Cos8G&O?Yx)F)MzN z#Gtlv;ojcmfBP-vF|FeiW*Cpl0j_?ISxXzvWjr0;;Ql(WyAH9(BJdiLCoie<+D|Wh9ic>g_XOl=T4c40n1&Hmql>#bi#JWhrYD)rvYz=8ftA310=729&6l z(@$#u-tyOjqsk4E!7mY5tnD5z?0!Ru)PTdp8b81AZA!c%3QT_}H+^9ME#~RY z)_o`$A>xST&78PBRt`UC%1~v}Xa~+|O4xp4f8o@Pa=jC&n4b}y6H2y0OT7?rPNSJg zU}XRl-GX9pa)$Zmn-CMw4UN1s;JnqKQAmcUFJ83b8n5JCq2BD$)w5v8=NjsJKrpz` z3WQ^$28G>Me;AiR;S0F0;4RVGjSmp7kg-`MqG`hoe5oZ7h~{}L3=P50ygk{!(1%QM ze_gX)TDlM|VbX*=&?O5+iD#K8eedC35|1HPR>fl;lV_$QKf62QWwsrfbwPp>EjEl= zG5->PC~8?Sg(Hy)K=w|ve5?%ufNhUkYbezofhdd2BW2udcxX50Az5+Gs4wSTf;6I) zQ&@~ad0#i36XbqeNlrvLaCigWKHii&e@-z!WO~mkIMUhE)zF(_8lHNnxUro)O}B`j zug0d0!^f;0(jC|%qa#$rsl>rv4^R40n(qPmbv2$pRVG-yC(hLW;V<)zU)+W3B611W zv$Ibep&Lq^w$^nAB9;|EECpEei%iS3#xO1SD_q!TTbf{{!l#zU`pn1HJm7r;e}CxZ z!^-BVKr>7*akIDxX$K)`rX0ZBICU5b z=kzHCWfyRzfw^&;QAb9iY7XCTce6uc{L1ACRy7ty>?$ov*X(w7I(p7cZWpH2*>qdv zf=!Jc*BV7eXd3|uHTKFr*GsOpfcywZLw_m4ZJX&?s1B!Oo6^SAJb4>eFa_#q3f<1M z?`6ZF+PdOe-oNX4kjq^bPS<6) zH;t)rgc59QtwBNkh(YUoTP~qQb8#!3khzg$>34c5>c4&HHrSMVxe0Y70rlXKwtqyB zb*MvD&K3Y7CxQ_ImjaW!6Uq*=Els}|TIBn^D}iBH&O_{1PGZSTtiiH>2jYG!ND*za zK#KzU4e?$m9g*R_;mqEj8s0SD@v%Uw=TE<6x$Y$v2s}j$;HbY4#|3oWC1*#T^g`oN zK{#@rgE|s_1>~EcVzY7FA^VoUUw@!6U%C9dht~!M3ee4+NCe`ydcB3e$qQ-{AGrKa`e4DL z_3TkYkEkP>*hLvFbh zr5-v5v2}cn80GNN0z^8YU4PYeViI#kSzEk{g*vFklMIf}?_y&y-Ma$!KAklu@9qOs ztyxf0T`nBOdwA+k9Iki`X7f?xS%GIu#Cf1{rhqug@y_!7oraLv?0aK zunw8Jwgum7Dp;ALoWFL9bxla z=9vyeNA88Rf5Lfp3ens1UgRnTc$LQBglMSy4U{UNiFJ=^WeJU>I+ry} zq{AJIV=26ouH;_OBY&*EbjiLV)T=s6=RB(a&KL0m=9e7Q$*^f{!+97UwH_Z?%?XcM z`!FI4MmjU1AUMAjN?fna7PIgZg(ZbSgQ&)R0+QXLPxxc?zPowXmG(2f{m`afxI&WF z7p1TzTtj}2Y7!hz0D!|aFy0;$&7RkTSrF8`eAr7&3dEN;gnuVMo|E33u;aax^mG^b ze0DAZ9_@nfm$;;q803yHejrb3_`IZ96;c%`Q~NyJq8HUkOrL_LIat|UpTuxr7kP*9 zft30D1@qr+Sa24m3Qg(!mH*?ZBbaCI-IFy?k6so~IQ<*b3yZ4YqTx;allLN(!;)p2 zQ3uWHdD1vPLVqt!E?3Q0Fn;y;g`sl`JgK8~9>E2l2Gaky&;kh%e<9u=*#0?DRXPA6 z6|)w|R&}ic#Y+s}fsMcqeNho;S=`k>{Hewx&=OP=PyV8m9a=G;+F*B#4F*%NG@#9+ z)8gO`xeYg?DPtKitI6ZiR%qaoISPL;0ZH){LZd3;y?-ZFM2l3F>XGXCSg^yA#PMww zAjLRg3VBm|*PT%hnV*=7*XxJAE&t1Nmf5;L35D>?()DaP2@KD-UUABW8}$M1H5sHW zlwb2-Zb6*#i-+|5#cU+>R|2!R3;(EV9RMS-EXtnI#Eh`%Phlw2k8vXU1ExVlA6mQ@Tz4o_o5(v>s?9TI zotkq$Mmwg=Hq+`$()85d%~b*-GB2j7?Lc}|!GAxUfkeb~*OLii9)cOZHxIj?YYP(K z+0D%KbyOMOR)SZ`#NRRi1U$SE5_N#gXaw)o zeSap=T>~A!6kF%}jo3wK7FVD!xWVXL1o|;dQ$nt4{X1ERhNf|%@Hu$P4#Dk9 z`mDfN;5gp^u?{!e^!ve1ETvZ`3`Q5 z%5Rh*Ux@=JCGmF=T#M;kVw5$Z=@h8Yf9Qs7H6C#UzFP&zX!4E=S<0qxjj20@#D6x9 zp>8?Ea8=_U!Xdl3Nr|ZRvKWAAVt|})x-CPbvLtHNXsg6oifA7BVW~RPswe{d(Kzb%`YHJh9m)GW9GXC-c|K7RYJcH#{2m~d zWi(ezLu*hVp248c0pr-dF7qPzcdF{@v-ZMj;YKpU_8@E1V-c0KiS}y^8HMZ*6JfPy zxzLiLJq1>2ztfT?r>`!Y8n8JBpJ$O&9TJUNN?`C8?edEI)t5MU#AxTG-doD=fXMP7 zGafJ8b62k;3hy(4HZS}&fPZG~#ecJQI{Hhc>0bXBZFa2-lW>nUarr9$90+!5wItZs z3EH0j+$B3J2`tF-z?CFaoxdarnbyQYq4~+l$dl=Q)zC-YZRsa`v@q;jywvN$Oj1B% z-FsM8;Rk2JH50dRmnN6jwjTSu-4QnicC73?+69rK!P}TL;Qc)hDStfX>Cr5yNN7vn zK%SJ<7IP3^>!3gmyKQC^Hj3s`4p|AorU-A?bO`ET;0`80R}N6wbX3obtWoX$&+C74 zN;AU!K9y!4w%J;=ZI~N38N1F(3Iy>6zNJ<8_}+pJ=~Met8?#Y2-2x@xT!fd1hDR81 z^RClc#aWY`-!Nft!+-n8JlEc+#x*RrrXstYzok5;*N~y{abhP=phqtRlH`p%sC&s_ zK!S?8e$CNtKvmYZ+IvyeS-DcOLP2XBmqLISGt{$abwb*Q@?wTHQLUs|LK&L&11aPc z(L+$(KDnm=0Y8@Rj2d`=j7goN_;W}o_HA`LJiY%hd7Svhrhks>l&tkOW0H&`igP51 zMRr-nc821wXRU2od8bUYyQTpu_8Z_lCY&{5-cc1t6B|XKT?=sP;H38ivbj_IZC|pm zGgI|&t9;?(133Iv`ZcOg{()j$wH!(|Yz)!m zme@!ow*)icRQeMUB>D(DH_Ih7DaOb~SC%%J@-hD)mg>sX@=E9CRmRDXyuR)$A+BAQ z(LhkmY>Wd_zrMER;BT3Fv;G9P@q1x|W;jLIW_*vh-1H5_!IDe{Wll>3kz?fuCI^0`YsO zqf9D_ma2w@>LM2IK8hf@#};K{V9?mAs|l>xC(vhz+Y^|9U^pZ%f5cf+iPr{RJmP@rmC;QjD3WmS=@ zi}JwbKaBw$Z>gwX;$;Cegd%l}snw+McA)WV-4M$a+pE75EiA4LzaX~8`itBE3x702 za7n^<)d&%to$T}O)3$7%$`vvY{m4hYZIl{t`TPFHVfmDLQ0mrwYAR|5s~GDh007)^ zK}U3yGKzRjotJ}A*e7-nmNB+B@TIK+~8PRL3$Xs-ItoxNVk z4w9(?sC8afi+?Yi1EEXP{zr`^yMLCEe3De_WTj$4AO3g6##duhB0yX)^+m`zl%4O$ z?coMw{ASl*>Kc^^_H>$J7LsU;%81mQ`|&gZ85t>46W`>HrG!1)tq={wiKOzAD(I&S z^cyleg}%fq*}yWd$g9ihcHaf9ACGy@u-(GB>DC-EYLy+SgNC!yg?lF*1Akm$XA}0@ zdDLr(eJ}Lk<5we-t5ZMXtSmLXlMCf|9BNp&fgtL`#+4U6IDF4wG0+-x^mO+m^`OBa zAxenW2oPA(B4kV%HS?SO!V4dD7Iw_3V(^1ZhLzTHa+YSZyDb$NL1YMD<0kfl1QYx@L)xP|2d5P z1~(1Vdef0(AnV8g*(&zc&I+u@%wLMEo+2ND?^Q=qXd3v+o*U4Ok=2}v-5N)Bv` zb^(&;^w4-`DkXz|(e80^P6O4?iSUv0{_^r>S_uo=oWB<*>NJtu=y$FDKGabIp^+%yPF69>c0cQ-YO7 zu;Pbloq(seLcq!@M}M~hfU2w9Igj>)C+P;HO4@5ucI~t3`1;Yspq_-oA#}ug*jKZ5 zU*g%p#gSy0MJaTgsEVL|CA>G1Vtx0M4Uz7M8IrskjsXT>C-Q`W z`^r}73+)6tqW*M8`oQU4>l)y%M-A(CtMC;lxoOtSkG%YtR)1)5`)T~*_}>CN0T$rD zjh1hVbj9eIZFk`!Qq-bP+WpX@{Sik)Ez)M#=)+?riVRl^dca2ED5<@7nFlo=)Q5tG zp>{Gb?f0Vqx6xCW5)W67R5RR3xE5VU1Y$~!%v zYX08#5)c^ZGH`4s+ZMZ3Rz(Jp>#{ts1y=V7s1F)IZaF^i;kjdM9Ct9H+lYEks4E;R zkyUh7SQSVqNC-?fBk73-m%1m|P?GI#UQ6^l9bvVYlYi0FAxur9!?QEZ$sFf?GJBYT z(s^vEOBuO-PK1*0c&ga{ThiE9FSNdtr?GY|V7^*y)bYRg6$z==C1;5Hwq;YFxD033 zC6z%YOo4%&R_?Hn+57bN;0QX-KHD~^1H_d;qW5P;3Dp+KF1FR-LTty#@}ZlsRt%7# zfScaUjekEO9OF|Wbr>PNPFrY`g85KcSL9{Qc^WGeXIxT?Kt|>wSGoxcDMaZoFRuqsm&Z# z8e3eGGDzJn0*K<#U~l)a^rNYS!yLWb|1>tjs(*h9`0Re4Zzhc#+VhGYC=9FP5&Lol z1^(XQdAF0RG+HPegJ)|ZBsoo2Q^+=mGb8O&w&kQ3s01g`h_h@@ZA zQh(5UM1I7r{IAk`Dq@OQwH#wXQIK!asJg%~hc=tKugWs}YF z=Le`tfwPYJ3W>OQ?I&<2o`O?-u7uSw#($3tCI_3;9dc`>9~glC1>VJitZORwaa}s-&tW^C8OpWpOMHQ7rd%q9FfMOhR7m=o z)^5A4=a*fG&TvxwNaoINCwokwL5;o9&3%-kJ76{1Mn3#Q^~bu)Q@{%d#|7l3e}C_t zc6aWP5Kum85-RIKutcniWN9drdNcdbl=fYlmEKwZK{fw148=cF5erILkFENdZ(z%BhYNJAtdvgYlG~X=nV+Hlpkk9v z9^ji`W-6Ke_t!VeuB4l}RqpF++ke>qAs+3L8|{SfDo|J|uwv3|8S?1jgrolJ%q_m3 z5}`9h11OAB-I7~Mf)gb4^s(&Zn&x$=(!b)bEdj3Khe*Q8rn0@~Z?CC3$tHKW^D3}$ zv2M%b9Es@4V=^LA>0s6S3Ie5Ry_3~=%nVoas9Qf+iE*2lS-7E17>1p#wtr(QOkgRg zAp10w4?@C}R^21M{%4+~@hKKEOkJmFtNVZFml^f;_GG!OA zpR>0+D-%k(qtQq9JR5?yLcSjh7uthb<*UwZDV4|;T@7H`_Ls=T&p?{j>BR$^Rz9)_ z=beG}Z&+y1)ueLx1Sk0ZUVn)pF@8#rd7c)cm+`Tlndcv|H+6>#wp;!53Uy?d5TTp0 z#cw@#1VjP!4*F(Z0Su}#u0`NoD#i%25qlR5*?>RFscqY`zat)jZuK=k=8OAui-1B+ zi}Mc};@es)XNq#T%NP((c+i|KPzhl9Yjb7$8bM!ziFof=6k`T6$Czr@ns8N6E&~8JfKV8)ME5fwvY(HQ`X*B?eD$LRS&%bLYaC8) zVo%9v#+HDhrB+2-e1Ub z>VO4d^FNgDe7^2Is>16D#wJcW@H2-{u4_?R{PBd(7roB~a`P#kQg=yJ zffhQRd##|l`;12<5b1}AVr>Q0OQ3sL)=G4Ua{qOz8-~tf8-Hf4^+Qt1R{gOFo{E-E@?cWFlLSl+&Aa$bcjlq2B`EEdLOD9&{`E|y5ZZ_TPUxA5o-Q&Fi-~E!HHIcV zXigp(fJ}u{suU5I7}^^Q@Ysf4h>R>Glf7>;l77S8K44oE02$kJJ+t7(#ER5-gfh!4_5J4&;&QK98aOF|^v+%evbm9Y~ic~H?;I+xp*&gaxr_RJ0=_8u6-M`346tgMa>r z%xurEOH#ywu$pql3HVg0sSvXs-z&Af+xwy2K7Vk0VJ>V%oSZ;Lck=ArqxGimu8MiH zos9xLCU5o$yl=iHcnH;~NJ;=CABs>0tE;S`i&NI^W$vD+ANctnk|SCTyANoe0IBIL zMLWok=~&2FiH^w03ub@|b#UD(OP_&rR#I+-1!x=k2~QM;S16WMS`5788LfRoK&_u7 zlYh5B@3IUE%}RN9?u|UnW9^$H-ffpjq0YT`3l44f?{yb90S^vSy_{^Oodo?_SLZX- zjYd;s3iQ5{s(aV7;%5-_+p}D3FXxI@KAi~sS+0J7y*P}-_+1(jyX@(At6*~rd-^x; zx&6(dB58rj^TFz)DN20&sdi|D+{b;7D8`M$dHYa&xdObLao zq=HXq9|1zN!nJA?jkq?3u-h$x#P-P%_^Ftpae7ie;Ql{xw__P6qu_t!wkt>}pjP{xzQ_xS3;y#raLv$^EkVSIuj@gZ?=MulG)u}1-hY-x z{Qs}p$xybatG?1B2x@XcPTY%4$rTcY`ot*(-GL8=Jb6F2-GF|l!}J~22rv!*-%iLE zq6}Bok?yd$+{dZ^89wIF1oHVDL1a$F=6QR|QjdQ0FfI6i=%kXS0o;^%(&}<*w0#?Z z9UQj2%O;IsRkxVAaO39zSV#;wV}B>o1aC&kZtAh~?Vz=^*FwflQe>irJV)cj3_)J6 zYnq;5S2G{(Aif;4Nt3A$%+G4eB^8I(L%!nVlkLT4jf=z&mJx)E=)mKxei>tEu^|DG|18|%}zT4t)9)k1w=LKv}28$4|Mojix&JWPmnxqk%`MZ$wm zEJ;BfJj3IYl(0<>c@XM{O_V05t8?7B6z|FD9;dJRHl6A~^M?}AyV>@~7SZL-=A zC{Z*+P6RQbJ;_ukH`di{@V@56JskA+@}J%edmn9{rlsu6RPw6ZoDga^T8Vc^(n2e+ z5S2Lvy;1v9Oh|fgf69Z!+<%tbH}A>hVJNbK8mASKrPR+^h%9z$zy7Kj1wFVv{heTE zL4BtrQSVBq-+MPZE+joI{|EQ~cA)3ae|%EUX(F}KK975}nyt)?TzxbdSGb&9vWQ$T zRUZN&{tvxI@J%H}HX>1-42;a=5|P?LF|K!3e>VSh%iPXrz>7s(*g z!C`$>3ADsbgG=dk;{06P*@`H7_2|edW?wBm$>^Of|GcNY{qN@hU^BJM8%@}hN(#|n zgEt=`!loQm%*U3?>EX(OB7H0}jz z@0Q^k+cQQ~1&0E}%C&b74iRCaDXF8{9&|jo7Le8JfGuSG2&Op7X4Gv#CjdVMZMT9c z_;zItWB7piOkwD*-77wH1LVUbX>Mfay$t)Fhw%8Mg@1h0#=)doDE-7?02y9Aea5B! zzVgQiz#XqomKT(aj^x*WtYP{pc)I0bPNz)|LxBk}UpLb4 z(126mJAVRt?QI8q=Wrz?Bege#L&W174dO;Qu%{y}^;7dKP_lxzhbONnqi6k})qgz#xy?oC_Blt;FyFvhZ>h2}ubFrP zv{r?MXZ_5uco+Aw1y84ZIkN}CRv_*amR<=-i&URBZEn#Q_%)2aS~iF%8Mw$V(=}Ulggkh(=}QUpS_+&s|4?)#%V+)&-x4q%ZPfXcxuM9bjS3 zgnt|WdE+!h*W94h4}6FRHEwh~GB=fRjS&6rA4tMwr2WyYjM4B9@%;jEWr6C}k%Id; z4VF0_H1eAmOR4#+i!F3Q?CBxGq-ii_j?=1c%(i@hC0rL6n%>dYfN@HmY&h>elSY zgrfq2J0@tY!WVSj!%f(02QY31|;&n@(PwbGi^{r}7M^+^z*QA(^T02Ca^_o~SoWW1RZ|MjtyWz-t>e4Sw zB09q(o5~_OvlKH16ID4tJkn!Zyl1BR&rEa?$?I+dZQyNxmr=9d*Bgu~W`8m6g9SF# zD?xe_LJWyBJ5bmUe)G;e!9PjKCNuK!P!J&o#tTR z=wpnTWwf^c4d_HgswTi^@P9#I*yjL$b46fmj#$H2N0B&`L8_doP>rq96&A(_S$OUE zb1cJmg#aucQ8~{9j+{xYw2HdUd;Q4y^yhjUNfT>avP8!shIpm0ouQ|Ink24=7zA_Jb_`jd<1Dod4%eI5;L#gMWfE82mRzUVhBp zQ8nqwuX}sJB`U=*2C#;{-tTT{`pV1Nb&4t(3&MP^T}jY%pz)lUH+5`SypcJ=<5_KL zp!$a=7@&BAsR2Vf9ZGVA2%V56gdM9M{7Y$-;_Mx0oOnfOYu@#Oaim^Lm}y_~3)d$p zUzN*J1Ql9yIT~{X>VJP|MiaK1U7!sVQcuZgW%h9}V3;OK{f5o6l<;Gwq{(U7(SH-Bn4eN`^{m0$BzzPg z+>VH?Q3T8|KiuSN8N5x}4I2#HF8H(0lbb}YN!64=s6b-h2+p?ppl|ksum_Q zz(xDfjGqX`6538ckkVomo1EtIU4=BMQBfY2u{ES`s(<)|V#2@9wobLQsAyHtH=g{pRx|~0$270{TvIOUoY2UUv6B2WG1Jx2 zKD9}D_cfY(5u7@*Wac)Jfs4_Yo&&qInT3rUi3d>`^6xiFsA(zu&z6Pb{~G*|3h^wW zd!}hVwVJZ@<=K7FeC&=+Tb~vE%8A~_Ob6Zp32J7xU4QiS6-?{4d@#kh=oxJjbYFzK zWW)Ps|F?Vhl9=?9F);sY7n3Zc7IcI!VYayRn5y)<6=f#78AN?u$t{#M(12ZEeskGh z^*xQD9K9~6wcy)LHlr_jSNJ>&!(&Ev+K$NjE_r4YEm>+DMG;#OgjSv#p z%R$~yD8rkuq6O?~5K)pN?cZgq{U(@{DUo;9q)6a~5#JMjGf5Da{y@upx|Ad)DPC|D z-*PV+Y2$aT!mwduFK%G{rqbSd!@jzg0Pc2)jDN;7TSB-dNo{?&^B<-}72H!mV+Sr` z1qLy>%EvziDIHoZ8+oc5D4s>E`w-fLSHdB{CcyvF^y2?T)q(`6Q!mO_h)2YbEWm%y5~UE_l8b6}{W=|Cb8xW+}P8 z_!xUJ9vs<%@lGwekl1lsvq@$BXB_kc#((-@*NRkJ$D`2xPeNBT_Eo@1%hefhC$)fX zEuWfSd`yd9t}G(7;4c8%40e=28D%6oO6|ORe8C!{c*FK^e)6OjQt2hQ<@kb{J1&w8 z0V=iDO(!}ZlOgTJ-Sy&^+vPEi8h0dw7K%9KI6=f5?_jyuD%eiGz53pzjJi-ymQiAn|G%yT6 zenQwDyoHXV9YyApuT;5n;t%>AOvBrV{tvvWspUj;Q%EuL$^D}Ew`S!P*~sVEeWbOH zXZE$z{w#`<@p|@GOaF>_C>rB7#o7mjpBMZ21h)Fah}<40VsnBJgcN|wz<=mlCQIa` zY{OU_?ge=W*5qB7doIUAIik7q?OLlxj>7ssH95#udaSOSsv(^ZD7h!!;^Mw@gywKE{ zq&;aK0ZF`7sk$#(Da%t^mJr>!>yWbBdn1LFEK{{H+qxUTtTiIGnXIidR`=qiCJ;{Q79ne5OESj_0n7V`Z+vMCw1v@mk4L z3~Gu0L_>NYZpugO)kQ_P*-(PNNN@-G8RPJLTFu9})7WUrI)7+6RAoJwi{sTu8+qvO zVj4dFm?*gl3t9Q*71T?c`kt76UdT5P$Cw)=x_M9v_0P1%acj;ob_cw_z0%Z*^ZqQ| zzX_bw+>?9Viv(DlFBIO8xeL6r_L^AZmD{=7H&Rc+Ac6_>)UiR}?px~w)+;4-V#z8s ze7Ft+fO_9It$&sW{XWeIHWmqX=_B+Hu$n5i}V&_-|PJ$K+<=42Y@WwRa(R!}7*@7U7rBI2S&cwh| zPpxX;o1$%jAn`y(1e|C421^?ueP_*r%ViQBJ#--jiMsVWa;x4P)s{2D#6iT+^C%dP zCeGhJW`7j_Rwy3fA8I^Qx(c9v`s-40S_yu~s0DZ(}$sP2&I zN<5STs*`s7KWxsbd}~ZQmWpFqJ-2^$`qmSB3>DUT`4?6b-T z#@T_QWbuNUNAU9D`(^wKNv_q{7gJhH=esteUgAZG2GIihf%CP~E*j0bg8ff56Q6>y zD6++i$CPJk|BwtbdLcJ`{Tr4i&f-Dm75fkN9O*uj- zqX%7!09aWlWPdwza7*lIXR4HU=%m!1r+??UUB3clQ%1HYH->&Ow%I2H#XCv}#qEOY z*I$T9zZGfI0g^BSsSi-*=1o)$i1Mk7qt!ZYv)byRb@Ru5MxsbMI0Rfg<`7 zo~JAU6AY1j-hZAtpE1z3@r}9ls!?L&;(4}tZ+e1X@Z+X&IJ+LnmE;W1Fub0?rlTla zTq97Btp}XRf-yjJ3zDv(^JwBGfPb6l1NCeZ`cL;>)tadvWOH5K^Xeql1Otn$^5n6J zaQE%RZTki~?44(RxE*${Di{pXoG1+J9w+r!{MZ*%$v!NA3^GE8Y7b3zJWW|z!9zW` zq%z^%J&Y19vi!~C4POS6HUL9Z35hcJhCLdW5B^3S1GFLxOyyW7DRHBUWPh5_;Zf#e zCi<8Mi(>2uA?N42+o5BObUSYG;jcw?PZWQv+>a1l6s_GeC~#!MHYou1Z>@Xb?(ChE zKdm?#{+Fd&#FhK|e6aOBfh3PsCX0r%)*FQG_@6W{zWHPOnvVAzIm-KR=V9;BjMpOL zeno=3FTjwZxw;rBSjxDz&woz~kgUAgP?-S!vUt=KKoqnH!L1PWLps@^O?Lnh^k|;i zExXZuZ(0Etco*4q;5^~E;ApIQ(psGF~pj$Vq&|it)v$jmx$&G%|!a3?0$a>c~v?x$W^bR=SMBHvL0` zunI4l;5~lYR_s@=rv-BUO&_OHgmsdA*#!d+9fzjj;~)NJB%$&RFS?#%9B*J6J((eV zwZRpBswYBjD@%q`A%CwG{_A|r|E19%w*-dv)%G4qcN$YTlkGEb)R^?=9S>^RA>3Wj zV|Z@VIXyE>S^zCbNHG` z0D$kh>2E-wftTVNVr}ws=M^~PT)tu<^U%?m=w%TKZ%z!%19*$^}KeL4Y!50Jh&&CyZ%OVW5O{D1KqD z4T|T*Rwvm$iZY8ZjdyN-tGe3QS1AF4+Oj^C5eL~Z%zxDk<+T)w<(256{{FG1o6}Dw zH9iogt5>M>MTqPd6crH{=f6-#F|`SeP+q-|n1ED08YHO$B$!`0&x!$R4{^Fz(+}sb zE z+Az_NXMbY&nG@x(q5$|;O&xGASzT@F0IDZlKYFfS0QX*_Zxg!L7wgE*^8C%|a zg6G}}1E@Hn0erEC`4ut^vYJ|xE6I|-&L|@48gL5|B*A%rRxZLGJGV&EbA8t2A&r4~ z_28%PoQ>dBst4o4F$I_>oG7+K+pjruHHbU!2ogWy&2fA`Qbq*Tf9w_ZF}Re%`FqzK zGk-4hiP{p*nuVm{N!$wfs~Oxs2vhjR+$b_w#=`<3Vs98;L%&>989bMvv3Ho}PxRCq zd?c!?YKu6>oPgm%d*&6^AulS3In9lK6W4E3hEm;KZ`S{buUtvsA5TtcJs~eFV~2Gnd7DBD%npKEe`bLynlonBko@oQ?OLYsK>o`P&%khi;W~YRtdHR ztH^m*J19sImh-s=Y23)eI2HY;mew^QZ>a-X9|v(NVZ2oOQE1_rRRr2D-T^yysH|^d zcb}qqUtrd__{h!J!)?)lqoIR=VvT)^Pe$N7aL=sdiN*(s&x-s4jLa*o)dkX*c7EAS z_&K0astkLIq