+ + + + +
+ + + + + diff --git a/src-backup/includes/phpqrcode/CHANGELOG b/src-backup/includes/phpqrcode/CHANGELOG new file mode 100644 index 0000000..1088530 --- /dev/null +++ b/src-backup/includes/phpqrcode/CHANGELOG @@ -0,0 +1,38 @@ +* 1.0.0 build 2010031920 + + - first public release + - help in readme, install + - cleanup ans separation of QRtools and QRspec + - now TCPDF binding requires minimal changes in TCPDF, having most of job + done in QRtools tcpdfBarcodeArray + - nicer QRtools::timeBenchmark output + - license and copyright notices in files + - indent cleanup - from tab to 4spc, keep it that way please :) + - sf project, repository, wiki + - simple code generator in index.php + +* 1.1.0 build 2010032113 + + - added merge tool wich generate merged version of code + located in phpqrcode.php + - splited qrconst.php from qrlib.php + +* 1.1.1 build 2010032405 + + - patch by Rick Seymour allowing saving PNG and displaying it at the same time + - added version info in VERSION file + - modified merge tool to include version info into generated file + - fixed e-mail in almost all head comments + +* 1.1.2 build 2010032722 + + - full integration with TCPDF thanks to Nicola Asuni, it's author + - fixed bug with alphanumeric encoding detection + +* 1.1.3 build 2010081807 + + - short opening tags replaced with standard ones + +* 1.1.4 build 2010100721 + + - added missing static keyword QRinput::check (found by Luke Brookhart, Onjax LLC) diff --git a/src-backup/includes/phpqrcode/INSTALL b/src-backup/includes/phpqrcode/INSTALL new file mode 100644 index 0000000..eac6b07 --- /dev/null +++ b/src-backup/includes/phpqrcode/INSTALL @@ -0,0 +1,67 @@ +== REQUIREMENTS == + + * PHP5 + * PHP GD2 extension with JPEG and PNG support + +== INSTALLATION == + +If you want to recreate cache by yourself make sure cache directory is +writable and you have permisions to write into it. Also make sure you are +able to read files in it if you have cache option enabled + +== CONFIGURATION == + +Feel free to modify config constants in qrconfig.php file. Read about it in +provided comments and project wiki page (links in README file) + +== QUICK START == + +Notice: probably you should'nt use all of this in same script :) + +encode('PHP QR Code :)'); +QRspec::debug($tab, true); + +== TCPDF INTEGRATION == + +Inside bindings/tcpdf you will find slightly modified 2dbarcodes.php. +Instal phpqrcode liblaty inside tcpdf folder, then overwrite (or merge) +2dbarcodes.php + +Then use similar as example #50 from TCPDF examples: + + true, + 'padding' => 4, + 'fgcolor' => array(0,0,0), + 'bgcolor' => false, //array(255,255,255) +); + +//code name: QR, specify error correction level after semicolon (L,M,Q,H) +$pdf->write2DBarcode('PHP QR Code :)', 'QR,L', '', '', 30, 30, $style, 'N'); diff --git a/src-backup/includes/phpqrcode/LICENSE b/src-backup/includes/phpqrcode/LICENSE new file mode 100644 index 0000000..1883303 --- /dev/null +++ b/src-backup/includes/phpqrcode/LICENSE @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/src-backup/includes/phpqrcode/README b/src-backup/includes/phpqrcode/README new file mode 100644 index 0000000..a022fb5 --- /dev/null +++ b/src-backup/includes/phpqrcode/README @@ -0,0 +1,45 @@ +This is PHP implementation of QR Code 2-D barcode generator. It is pure-php +LGPL-licensed implementation based on C libqrencode by Kentaro Fukuchi. + +== LICENSING == + +Copyright (C) 2010 by Dominik Dzienia + +This library is free software; you can redistribute it and/or modify it under +the terms of the GNU Lesser General Public License as published by the Free +Software Foundation; either version 3 of the License, or any later version. + +This library is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU Lesser General Public License (LICENSE file) +for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this library; if not, write to the Free Software Foundation, Inc., 51 +Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +== INSTALATION AND USAGE == + + * INSTALL file + * http://sourceforge.net/apps/mediawiki/phpqrcode/index.php?title=Main_Page + +== CONTACT == + +Fell free to contact me via e-mail (deltalab at poczta dot fm) or using +folowing project pages: + + * http://sourceforge.net/projects/phpqrcode/ + * http://phpqrcode.sourceforge.net/ + +== ACKNOWLEDGMENTS == + +Based on C libqrencode library (ver. 3.1.1) +Copyright (C) 2006-2010 by Kentaro Fukuchi +http://megaui.net/fukuchi/works/qrencode/index.en.html + +QR Code is registered trademarks of DENSO WAVE INCORPORATED in JAPAN and other +countries. + +Reed-Solomon code encoder is written by Phil Karn, KA9Q. +Copyright (C) 2002, 2003, 2004, 2006 Phil Karn, KA9Q + \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/VERSION b/src-backup/includes/phpqrcode/VERSION new file mode 100644 index 0000000..9f99279 --- /dev/null +++ b/src-backup/includes/phpqrcode/VERSION @@ -0,0 +1,2 @@ +1.1.4 +2010100721 \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/bindings/tcpdf/qrcode.php b/src-backup/includes/phpqrcode/bindings/tcpdf/qrcode.php new file mode 100644 index 0000000..7995460 --- /dev/null +++ b/src-backup/includes/phpqrcode/bindings/tcpdf/qrcode.php @@ -0,0 +1,2875 @@ + +// http://phpqrcode.sourceforge.net/ +// https://sourceforge.net/projects/phpqrcode/ +// +// The "PHP QR Code encoder" is based on +// "C libqrencode library" (ver. 3.1.1) +// License: GNU-LGPL 2.1 +// Copyright (C) 2006-2010 by Kentaro Fukuchi +// http://megaui.net/fukuchi/works/qrencode/index.en.html +// +// Reed-Solomon code encoder is written by Phil Karn, KA9Q. +// Copyright (C) 2002-2006 Phil Karn, KA9Q +// +// QR Code is registered trademark of DENSO WAVE INCORPORATED +// http://www.denso-wave.com/qrcode/index-e.html +// --------------------------------------------------------- +// +// Author: Nicola Asuni +// +// (c) Copyright 2010: +// Nicola Asuni +// Tecnick.com S.r.l. +// Via della Pace, 11 +// 09044 Quartucciu (CA) +// ITALY +// www.tecnick.com +// info@tecnick.com +//============================================================+ + +/** + * Class to create QR-code arrays for TCPDF class. + * QR Code symbol is a 2D barcode that can be scanned by handy terminals such as a mobile phone with CCD. + * The capacity of QR Code is up to 7000 digits or 4000 characters, and has high robustness. + * This class supports QR Code model 2, described in JIS (Japanese Industrial Standards) X0510:2004 or ISO/IEC 18004. + * Currently the following features are not supported: ECI and FNC1 mode, Micro QR Code, QR Code model 1, Structured mode. + * + * This class is derived from "PHP QR Code encoder" by Dominik Dzienia (http://phpqrcode.sourceforge.net/) based on "libqrencode C library 3.1.1." by Kentaro Fukuchi (http://megaui.net/fukuchi/works/qrencode/index.en.html), contains Reed-Solomon code written by Phil Karn, KA9Q. QR Code is registered trademark of DENSO WAVE INCORPORATED (http://www.denso-wave.com/qrcode/index-e.html). + * Please read comments on this class source file for full copyright and license information. + * + * @package com.tecnick.tcpdf + * @abstract Class for generating QR-code array for TCPDF. + * @author Nicola Asuni + * @copyright 2010 Nicola Asuni - Tecnick.com S.r.l (www.tecnick.com) Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com + * @link http://www.tcpdf.org + * @license http://www.gnu.org/copyleft/lesser.html LGPL + * @version 1.0.002 + */ + +// definitions +if (!defined('QRCODEDEFS')) { + + /** + * Indicate that definitions for this class are set + */ + define('QRCODEDEFS', true); + + // ----------------------------------------------------- + + // Encoding modes (characters which can be encoded in QRcode) + + /** + * Encoding mode + */ + define('QR_MODE_NL', -1); + + /** + * Encoding mode numeric (0-9). 3 characters are encoded to 10bit length. In theory, 7089 characters or less can be stored in a QRcode. + */ + define('QR_MODE_NM', 0); + + /** + * Encoding mode alphanumeric (0-9A-Z $%*+-./:) 45characters. 2 characters are encoded to 11bit length. In theory, 4296 characters or less can be stored in a QRcode. + */ + define('QR_MODE_AN', 1); + + /** + * Encoding mode 8bit byte data. In theory, 2953 characters or less can be stored in a QRcode. + */ + define('QR_MODE_8B', 2); + + /** + * Encoding mode KANJI. A KANJI character (multibyte character) is encoded to 13bit length. In theory, 1817 characters or less can be stored in a QRcode. + */ + define('QR_MODE_KJ', 3); + + /** + * Encoding mode STRUCTURED (currently unsupported) + */ + define('QR_MODE_ST', 4); + + // ----------------------------------------------------- + + // Levels of error correction. + // QRcode has a function of an error correcting for miss reading that white is black. + // Error correcting is defined in 4 level as below. + + /** + * Error correction level L : About 7% or less errors can be corrected. + */ + define('QR_ECLEVEL_L', 0); + + /** + * Error correction level M : About 15% or less errors can be corrected. + */ + define('QR_ECLEVEL_M', 1); + + /** + * Error correction level Q : About 25% or less errors can be corrected. + */ + define('QR_ECLEVEL_Q', 2); + + /** + * Error correction level H : About 30% or less errors can be corrected. + */ + define('QR_ECLEVEL_H', 3); + + // ----------------------------------------------------- + + // Version. Size of QRcode is defined as version. + // Version is from 1 to 40. + // Version 1 is 21*21 matrix. And 4 modules increases whenever 1 version increases. + // So version 40 is 177*177 matrix. + + /** + * Maximum QR Code version. + */ + define('QRSPEC_VERSION_MAX', 40); + + /** + * Maximum matrix size for maximum version (version 40 is 177*177 matrix). + */ + define('QRSPEC_WIDTH_MAX', 177); + + // ----------------------------------------------------- + + /** + * Matrix index to get width from $capacity array. + */ + define('QRCAP_WIDTH', 0); + + /** + * Matrix index to get number of words from $capacity array. + */ + define('QRCAP_WORDS', 1); + + /** + * Matrix index to get remainder from $capacity array. + */ + define('QRCAP_REMINDER', 2); + + /** + * Matrix index to get error correction level from $capacity array. + */ + define('QRCAP_EC', 3); + + // ----------------------------------------------------- + + // Structure (currently usupported) + + /** + * Number of header bits for structured mode + */ + define('STRUCTURE_HEADER_BITS', 20); + + /** + * Max number of symbols for structured mode + */ + define('MAX_STRUCTURED_SYMBOLS', 16); + + // ----------------------------------------------------- + + // Masks + + /** + * Down point base value for case 1 mask pattern (concatenation of same color in a line or a column) + */ + define('N1', 3); + + /** + * Down point base value for case 2 mask pattern (module block of same color) + */ + define('N2', 3); + + /** + * Down point base value for case 3 mask pattern (1:1:3:1:1(dark:bright:dark:bright:dark)pattern in a line or a column) + */ + define('N3', 40); + + /** + * Down point base value for case 4 mask pattern (ration of dark modules in whole) + */ + define('N4', 10); + + // ----------------------------------------------------- + + // Optimization settings + + /** + * if true, estimates best mask (spec. default, but extremally slow; set to false to significant performance boost but (propably) worst quality code + */ + define('QR_FIND_BEST_MASK', true); + + /** + * if false, checks all masks available, otherwise value tells count of masks need to be checked, mask id are got randomly + */ + define('QR_FIND_FROM_RANDOM', 2); + + /** + * when QR_FIND_BEST_MASK === false + */ + define('QR_DEFAULT_MASK', 2); + + // ----------------------------------------------------- + +} // end of definitions + +// #*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*# + +if (!class_exists('QRcode', false)) { + + // for compaibility with PHP4 + if (!function_exists('str_split')) { + /** + * Convert a string to an array (needed for PHP4 compatibility) + * @param string $string The input string. + * @param int $split_length Maximum length of the chunk. + * @return If the optional split_length parameter is specified, the returned array will be broken down into chunks with each being split_length in length, otherwise each chunk will be one character in length. FALSE is returned if split_length is less than 1. If the split_length length exceeds the length of string , the entire string is returned as the first (and only) array element. + */ + function str_split($string, $split_length=1) { + if ((strlen($string) > $split_length) OR (!$split_length)) { + do { + $c = strlen($string); + $parts[] = substr($string, 0, $split_length); + $string = substr($string, $split_length); + } while ($string !== false); + } else { + $parts = array($string); + } + return $parts; + } + } + + // ##################################################### + + /** + * Class to create QR-code arrays for TCPDF class. + * QR Code symbol is a 2D barcode that can be scanned by handy terminals such as a mobile phone with CCD. + * The capacity of QR Code is up to 7000 digits or 4000 characters, and has high robustness. + * This class supports QR Code model 2, described in JIS (Japanese Industrial Standards) X0510:2004 or ISO/IEC 18004. + * Currently the following features are not supported: ECI and FNC1 mode, Micro QR Code, QR Code model 1, Structured mode. + * + * This class is derived from "PHP QR Code encoder" by Dominik Dzienia (http://phpqrcode.sourceforge.net/) based on "libqrencode C library 3.1.1." by Kentaro Fukuchi (http://megaui.net/fukuchi/works/qrencode/index.en.html), contains Reed-Solomon code written by Phil Karn, KA9Q. QR Code is registered trademark of DENSO WAVE INCORPORATED (http://www.denso-wave.com/qrcode/index-e.html). + * Please read comments on this class source file for full copyright and license information. + * + * @name QRcode + * @package com.tecnick.tcpdf + * @abstract Class for generating QR-code array for TCPDF. + * @author Nicola Asuni + * @copyright 2010 Nicola Asuni - Tecnick.com S.r.l (www.tecnick.com) Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com + * @link http://www.tcpdf.org + * @license http://www.gnu.org/copyleft/lesser.html LGPL + * @version 1.0.002 + */ + class QRcode { + + /** + * @var barcode array to be returned which is readable by TCPDF + * @access protected + */ + protected $barcode_array = array(); + + /** + * @var QR code version. Size of QRcode is defined as version. Version is from 1 to 40. Version 1 is 21*21 matrix. And 4 modules increases whenever 1 version increases. So version 40 is 177*177 matrix. + * @access protected + */ + protected $version = 0; + + /** + * @var Levels of error correction. See definitions for possible values. + * @access protected + */ + protected $level = QR_ECLEVEL_L; + + /** + * @var Encoding mode + * @access protected + */ + protected $hint = QR_MODE_8B; + + /** + * @var if true the input string will be converted to uppercase + * @access protected + */ + protected $casesensitive = true; + + /** + * @var structured QR code (not supported yet) + * @access protected + */ + protected $structured = 0; + + /** + * @var mask data + * @access protected + */ + protected $data; + + // FrameFiller + + /** + * @var width + * @access protected + */ + protected $width; + + /** + * @var frame + * @access protected + */ + protected $frame; + + /** + * @var X position of bit + * @access protected + */ + protected $x; + + /** + * @var Y position of bit + * @access protected + */ + protected $y; + + /** + * @var direction + * @access protected + */ + protected $dir; + + /** + * @var single bit + * @access protected + */ + protected $bit; + + // ---- QRrawcode ---- + + /** + * @var data code + * @access protected + */ + protected $datacode = array(); + + /** + * @var error correction code + * @access protected + */ + protected $ecccode = array(); + + /** + * @var blocks + * @access protected + */ + protected $blocks; + + /** + * @var Reed-Solomon blocks + * @access protected + */ + protected $rsblocks = array(); //of RSblock + + /** + * @var counter + * @access protected + */ + protected $count; + + /** + * @var data length + * @access protected + */ + protected $dataLength; + + /** + * @var error correction length + * @access protected + */ + protected $eccLength; + + /** + * @var b1 + * @access protected + */ + protected $b1; + + // ---- QRmask ---- + + /** + * @var run length + * @access protected + */ + protected $runLength = array(); + + // ---- QRsplit ---- + + /** + * @var input data string + * @access protected + */ + protected $dataStr = ''; + + /** + * @var input items + * @access protected + */ + protected $items; + + // Reed-Solomon items + + /** + * @var Reed-Solomon items + * @access protected + */ + protected $rsitems = array(); + + /** + * @var array of frames + * @access protected + */ + protected $frames = array(); + + /** + * @var alphabet-numeric convesion table + * @access protected + */ + protected $anTable = array( + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // + 36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43, // + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1, // + -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, // + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, // + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 // + ); + + /** + * @var array Table of the capacity of symbols + * See Table 1 (pp.13) and Table 12-16 (pp.30-36), JIS X0510:2004. + * @access protected + */ + protected $capacity = array( + array( 0, 0, 0, array( 0, 0, 0, 0)), // + array( 21, 26, 0, array( 7, 10, 13, 17)), // 1 + array( 25, 44, 7, array( 10, 16, 22, 28)), // + array( 29, 70, 7, array( 15, 26, 36, 44)), // + array( 33, 100, 7, array( 20, 36, 52, 64)), // + array( 37, 134, 7, array( 26, 48, 72, 88)), // 5 + array( 41, 172, 7, array( 36, 64, 96, 112)), // + array( 45, 196, 0, array( 40, 72, 108, 130)), // + array( 49, 242, 0, array( 48, 88, 132, 156)), // + array( 53, 292, 0, array( 60, 110, 160, 192)), // + array( 57, 346, 0, array( 72, 130, 192, 224)), // 10 + array( 61, 404, 0, array( 80, 150, 224, 264)), // + array( 65, 466, 0, array( 96, 176, 260, 308)), // + array( 69, 532, 0, array( 104, 198, 288, 352)), // + array( 73, 581, 3, array( 120, 216, 320, 384)), // + array( 77, 655, 3, array( 132, 240, 360, 432)), // 15 + array( 81, 733, 3, array( 144, 280, 408, 480)), // + array( 85, 815, 3, array( 168, 308, 448, 532)), // + array( 89, 901, 3, array( 180, 338, 504, 588)), // + array( 93, 991, 3, array( 196, 364, 546, 650)), // + array( 97, 1085, 3, array( 224, 416, 600, 700)), // 20 + array(101, 1156, 4, array( 224, 442, 644, 750)), // + array(105, 1258, 4, array( 252, 476, 690, 816)), // + array(109, 1364, 4, array( 270, 504, 750, 900)), // + array(113, 1474, 4, array( 300, 560, 810, 960)), // + array(117, 1588, 4, array( 312, 588, 870, 1050)), // 25 + array(121, 1706, 4, array( 336, 644, 952, 1110)), // + array(125, 1828, 4, array( 360, 700, 1020, 1200)), // + array(129, 1921, 3, array( 390, 728, 1050, 1260)), // + array(133, 2051, 3, array( 420, 784, 1140, 1350)), // + array(137, 2185, 3, array( 450, 812, 1200, 1440)), // 30 + array(141, 2323, 3, array( 480, 868, 1290, 1530)), // + array(145, 2465, 3, array( 510, 924, 1350, 1620)), // + array(149, 2611, 3, array( 540, 980, 1440, 1710)), // + array(153, 2761, 3, array( 570, 1036, 1530, 1800)), // + array(157, 2876, 0, array( 570, 1064, 1590, 1890)), // 35 + array(161, 3034, 0, array( 600, 1120, 1680, 1980)), // + array(165, 3196, 0, array( 630, 1204, 1770, 2100)), // + array(169, 3362, 0, array( 660, 1260, 1860, 2220)), // + array(173, 3532, 0, array( 720, 1316, 1950, 2310)), // + array(177, 3706, 0, array( 750, 1372, 2040, 2430)) // 40 + ); + + /** + * @var array Length indicator + * @access protected + */ + protected $lengthTableBits = array( + array(10, 12, 14), + array( 9, 11, 13), + array( 8, 16, 16), + array( 8, 10, 12) + ); + + /** + * @var array Table of the error correction code (Reed-Solomon block) + * See Table 12-16 (pp.30-36), JIS X0510:2004. + * @access protected + */ + protected $eccTable = array( + array(array( 0, 0), array( 0, 0), array( 0, 0), array( 0, 0)), // + array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), // 1 + array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), // + array(array( 1, 0), array( 1, 0), array( 2, 0), array( 2, 0)), // + array(array( 1, 0), array( 2, 0), array( 2, 0), array( 4, 0)), // + array(array( 1, 0), array( 2, 0), array( 2, 2), array( 2, 2)), // 5 + array(array( 2, 0), array( 4, 0), array( 4, 0), array( 4, 0)), // + array(array( 2, 0), array( 4, 0), array( 2, 4), array( 4, 1)), // + array(array( 2, 0), array( 2, 2), array( 4, 2), array( 4, 2)), // + array(array( 2, 0), array( 3, 2), array( 4, 4), array( 4, 4)), // + array(array( 2, 2), array( 4, 1), array( 6, 2), array( 6, 2)), // 10 + array(array( 4, 0), array( 1, 4), array( 4, 4), array( 3, 8)), // + array(array( 2, 2), array( 6, 2), array( 4, 6), array( 7, 4)), // + array(array( 4, 0), array( 8, 1), array( 8, 4), array(12, 4)), // + array(array( 3, 1), array( 4, 5), array(11, 5), array(11, 5)), // + array(array( 5, 1), array( 5, 5), array( 5, 7), array(11, 7)), // 15 + array(array( 5, 1), array( 7, 3), array(15, 2), array( 3, 13)), // + array(array( 1, 5), array(10, 1), array( 1, 15), array( 2, 17)), // + array(array( 5, 1), array( 9, 4), array(17, 1), array( 2, 19)), // + array(array( 3, 4), array( 3, 11), array(17, 4), array( 9, 16)), // + array(array( 3, 5), array( 3, 13), array(15, 5), array(15, 10)), // 20 + array(array( 4, 4), array(17, 0), array(17, 6), array(19, 6)), // + array(array( 2, 7), array(17, 0), array( 7, 16), array(34, 0)), // + array(array( 4, 5), array( 4, 14), array(11, 14), array(16, 14)), // + array(array( 6, 4), array( 6, 14), array(11, 16), array(30, 2)), // + array(array( 8, 4), array( 8, 13), array( 7, 22), array(22, 13)), // 25 + array(array(10, 2), array(19, 4), array(28, 6), array(33, 4)), // + array(array( 8, 4), array(22, 3), array( 8, 26), array(12, 28)), // + array(array( 3, 10), array( 3, 23), array( 4, 31), array(11, 31)), // + array(array( 7, 7), array(21, 7), array( 1, 37), array(19, 26)), // + array(array( 5, 10), array(19, 10), array(15, 25), array(23, 25)), // 30 + array(array(13, 3), array( 2, 29), array(42, 1), array(23, 28)), // + array(array(17, 0), array(10, 23), array(10, 35), array(19, 35)), // + array(array(17, 1), array(14, 21), array(29, 19), array(11, 46)), // + array(array(13, 6), array(14, 23), array(44, 7), array(59, 1)), // + array(array(12, 7), array(12, 26), array(39, 14), array(22, 41)), // 35 + array(array( 6, 14), array( 6, 34), array(46, 10), array( 2, 64)), // + array(array(17, 4), array(29, 14), array(49, 10), array(24, 46)), // + array(array( 4, 18), array(13, 32), array(48, 14), array(42, 32)), // + array(array(20, 4), array(40, 7), array(43, 22), array(10, 67)), // + array(array(19, 6), array(18, 31), array(34, 34), array(20, 61)) // 40 + ); + + /** + * @var array Positions of alignment patterns. + * This array includes only the second and the third position of the alignment patterns. Rest of them can be calculated from the distance between them. + * See Table 1 in Appendix E (pp.71) of JIS X0510:2004. + * @access protected + */ + protected $alignmentPattern = array( + array( 0, 0), + array( 0, 0), array(18, 0), array(22, 0), array(26, 0), array(30, 0), // 1- 5 + array(34, 0), array(22, 38), array(24, 42), array(26, 46), array(28, 50), // 6-10 + array(30, 54), array(32, 58), array(34, 62), array(26, 46), array(26, 48), // 11-15 + array(26, 50), array(30, 54), array(30, 56), array(30, 58), array(34, 62), // 16-20 + array(28, 50), array(26, 50), array(30, 54), array(28, 54), array(32, 58), // 21-25 + array(30, 58), array(34, 62), array(26, 50), array(30, 54), array(26, 52), // 26-30 + array(30, 56), array(34, 60), array(30, 58), array(34, 62), array(30, 54), // 31-35 + array(24, 50), array(28, 54), array(32, 58), array(26, 54), array(30, 58) // 35-40 + ); + + /** + * @var array Version information pattern (BCH coded). + * See Table 1 in Appendix D (pp.68) of JIS X0510:2004. + * size: [QRSPEC_VERSION_MAX - 6] + * @access protected + */ + protected $versionPattern = array( + 0x07c94, 0x085bc, 0x09a99, 0x0a4d3, 0x0bbf6, 0x0c762, 0x0d847, 0x0e60d, // + 0x0f928, 0x10b78, 0x1145d, 0x12a17, 0x13532, 0x149a6, 0x15683, 0x168c9, // + 0x177ec, 0x18ec4, 0x191e1, 0x1afab, 0x1b08e, 0x1cc1a, 0x1d33f, 0x1ed75, // + 0x1f250, 0x209d5, 0x216f0, 0x228ba, 0x2379f, 0x24b0b, 0x2542e, 0x26a64, // + 0x27541, 0x28c69 + ); + + /** + * @var array Format information + * @access protected + */ + protected $formatInfo = array( + array(0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976), // + array(0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0), // + array(0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed), // + array(0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b) // + ); + + + // ------------------------------------------------- + // ------------------------------------------------- + + + /** + * This is the class constructor. + * Creates a QRcode object + * @param string $code code to represent using QRcode + * @param string $eclevel error level:
  • L : About 7% or less errors can be corrected.
  • M : About 15% or less errors can be corrected.
  • Q : About 25% or less errors can be corrected.
  • H : About 30% or less errors can be corrected.
+ * @access public + * @since 1.0.000 + */ + public function __construct($code, $eclevel = 'L') { + $barcode_array = array(); + if ((is_null($code)) OR ($code == '\0') OR ($code == '')) { + return false; + } + // set error correction level + $this->level = array_search($eclevel, array('L', 'M', 'Q', 'H')); + if ($this->level === false) { + $this->level = QR_ECLEVEL_L; + } + if (($this->hint != QR_MODE_8B) AND ($this->hint != QR_MODE_KJ)) { + return false; + } + if (($this->version < 0) OR ($this->version > QRSPEC_VERSION_MAX)) { + return false; + } + $this->items = array(); + $this->encodeString($code); + $qrTab = $this->binarize($this->data); + $size = count($qrTab); + $barcode_array['num_rows'] = $size; + $barcode_array['num_cols'] = $size; + $barcode_array['bcode'] = array(); + foreach ($qrTab as $line) { + $arrAdd = array(); + foreach (str_split($line) as $char) { + $arrAdd[] = ($char=='1')?1:0; + } + $barcode_array['bcode'][] = $arrAdd; + } + $this->barcode_array = $barcode_array; + } + + /** + * Returns a barcode array which is readable by TCPDF + * @return array barcode array readable by TCPDF; + * @access public + */ + public function getBarcodeArray() { + return $this->barcode_array; + } + + /** + * Convert the frame in binary form + * @param array $frame array to binarize + * @return array frame in binary form + */ + protected function binarize($frame) { + $len = count($frame); + // the frame is square (width = height) + foreach ($frame as &$frameLine) { + for ($i=0; $i<$len; $i++) { + $frameLine[$i] = (ord($frameLine[$i])&1)?'1':'0'; + } + } + return $frame; + } + + /** + * Encode the input string to QR code + * @param string $string input string to encode + */ + protected function encodeString($string) { + $this->dataStr = $string; + if (!$this->casesensitive) { + $this->toUpper(); + } + $ret = $this->splitString(); + if ($ret < 0) { + return NULL; + } + $this->encodeMask(-1); + } + + /** + * Encode mask + * @param int $mask masking mode + */ + protected function encodeMask($mask) { + $spec = array(0, 0, 0, 0, 0); + $this->datacode = $this->getByteStream($this->items); + if (is_null($this->datacode)) { + return NULL; + } + $spec = $this->getEccSpec($this->version, $this->level, $spec); + $this->b1 = $this->rsBlockNum1($spec); + $this->dataLength = $this->rsDataLength($spec); + $this->eccLength = $this->rsEccLength($spec); + $this->ecccode = array_fill(0, $this->eccLength, 0); + $this->blocks = $this->rsBlockNum($spec); + $ret = $this->init($spec); + if ($ret < 0) { + return NULL; + } + $this->count = 0; + $this->width = $this->getWidth($this->version); + $this->frame = $this->newFrame($this->version); + $this->x = $this->width - 1; + $this->y = $this->width - 1; + $this->dir = -1; + $this->bit = -1; + // inteleaved data and ecc codes + for ($i=0; $i < ($this->dataLength + $this->eccLength); $i++) { + $code = $this->getCode(); + $bit = 0x80; + for ($j=0; $j<8; $j++) { + $addr = $this->getNextPosition(); + $this->setFrameAt($addr, 0x02 | (($bit & $code) != 0)); + $bit = $bit >> 1; + } + } + // remainder bits + $j = $this->getRemainder($this->version); + for ($i=0; $i<$j; $i++) { + $addr = $this->getNextPosition(); + $this->setFrameAt($addr, 0x02); + } + // masking + $this->runLength = array_fill(0, QRSPEC_WIDTH_MAX + 1, 0); + if ($mask < 0) { + if (QR_FIND_BEST_MASK) { + $masked = $this->mask($this->width, $this->frame, $this->level); + } else { + $masked = $this->makeMask($this->width, $this->frame, (intval(QR_DEFAULT_MASK) % 8), $this->level); + } + } else { + $masked = $this->makeMask($this->width, $this->frame, $mask, $this->level); + } + if ($masked == NULL) { + return NULL; + } + $this->data = $masked; + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // FrameFiller + + /** + * Set frame value at specified position + * @param array $at x,y position + * @param int $val value of the character to set + */ + protected function setFrameAt($at, $val) { + $this->frame[$at['y']][$at['x']] = chr($val); + } + + /** + * Get frame value at specified position + * @param array $at x,y position + * @return value at specified position + */ + protected function getFrameAt($at) { + return ord($this->frame[$at['y']][$at['x']]); + } + + /** + * Return the next frame position + * @return array of x,y coordinates + */ + protected function getNextPosition() { + do { + if ($this->bit == -1) { + $this->bit = 0; + return array('x'=>$this->x, 'y'=>$this->y); + } + $x = $this->x; + $y = $this->y; + $w = $this->width; + if ($this->bit == 0) { + $x--; + $this->bit++; + } else { + $x++; + $y += $this->dir; + $this->bit--; + } + if ($this->dir < 0) { + if ($y < 0) { + $y = 0; + $x -= 2; + $this->dir = 1; + if ($x == 6) { + $x--; + $y = 9; + } + } + } else { + if ($y == $w) { + $y = $w - 1; + $x -= 2; + $this->dir = -1; + if ($x == 6) { + $x--; + $y -= 8; + } + } + } + if (($x < 0) OR ($y < 0)) { + return NULL; + } + $this->x = $x; + $this->y = $y; + } while(ord($this->frame[$y][$x]) & 0x80); + return array('x'=>$x, 'y'=>$y); + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRrawcode + + /** + * Initialize code. + * @param array $spec array of ECC specification + * @return 0 in case of success, -1 in case of error + */ + protected function init($spec) { + $dl = $this->rsDataCodes1($spec); + $el = $this->rsEccCodes1($spec); + $rs = $this->init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); + $blockNo = 0; + $dataPos = 0; + $eccPos = 0; + $endfor = $this->rsBlockNum1($spec); + for ($i=0; $i < $endfor; ++$i) { + $ecc = array_slice($this->ecccode, $eccPos); + $this->rsblocks[$blockNo] = array(); + $this->rsblocks[$blockNo]['dataLength'] = $dl; + $this->rsblocks[$blockNo]['data'] = array_slice($this->datacode, $dataPos); + $this->rsblocks[$blockNo]['eccLength'] = $el; + $ecc = $this->encode_rs_char($rs, $this->rsblocks[$blockNo]['data'], $ecc); + $this->rsblocks[$blockNo]['ecc'] = $ecc; + $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); + $dataPos += $dl; + $eccPos += $el; + $blockNo++; + } + if ($this->rsBlockNum2($spec) == 0) { + return 0; + } + $dl = $this->rsDataCodes2($spec); + $el = $this->rsEccCodes2($spec); + $rs = $this->init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); + if ($rs == NULL) { + return -1; + } + $endfor = $this->rsBlockNum2($spec); + for ($i=0; $i < $endfor; ++$i) { + $ecc = array_slice($this->ecccode, $eccPos); + $this->rsblocks[$blockNo] = array(); + $this->rsblocks[$blockNo]['dataLength'] = $dl; + $this->rsblocks[$blockNo]['data'] = array_slice($this->datacode, $dataPos); + $this->rsblocks[$blockNo]['eccLength'] = $el; + $ecc = $this->encode_rs_char($rs, $this->rsblocks[$blockNo]['data'], $ecc); + $this->rsblocks[$blockNo]['ecc'] = $ecc; + $this->ecccode = array_merge(array_slice($this->ecccode, 0, $eccPos), $ecc); + $dataPos += $dl; + $eccPos += $el; + $blockNo++; + } + return 0; + } + + /** + * Return Reed-Solomon block code. + * @return array rsblocks + */ + protected function getCode() { + if ($this->count < $this->dataLength) { + $row = $this->count % $this->blocks; + $col = $this->count / $this->blocks; + if ($col >= $this->rsblocks[0]['dataLength']) { + $row += $this->b1; + } + $ret = $this->rsblocks[$row]['data'][$col]; + } elseif ($this->count < $this->dataLength + $this->eccLength) { + $row = ($this->count - $this->dataLength) % $this->blocks; + $col = ($this->count - $this->dataLength) / $this->blocks; + $ret = $this->rsblocks[$row]['ecc'][$col]; + } else { + return 0; + } + $this->count++; + return $ret; + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRmask + + /** + * Write Format Information on frame and returns the number of black bits + * @param int $width frame width + * @param array $frame frame + * @param array $mask masking mode + * @param int $level error correction level + * @return int blacks + */ + protected function writeFormatInformation($width, &$frame, $mask, $level) { + $blacks = 0; + $format = $this->getFormatInfo($mask, $level); + for ($i=0; $i<8; ++$i) { + if ($format & 1) { + $blacks += 2; + $v = 0x85; + } else { + $v = 0x84; + } + $frame[8][$width - 1 - $i] = chr($v); + if ($i < 6) { + $frame[$i][8] = chr($v); + } else { + $frame[$i + 1][8] = chr($v); + } + $format = $format >> 1; + } + for ($i=0; $i<7; ++$i) { + if ($format & 1) { + $blacks += 2; + $v = 0x85; + } else { + $v = 0x84; + } + $frame[$width - 7 + $i][8] = chr($v); + if ($i == 0) { + $frame[8][7] = chr($v); + } else { + $frame[8][6 - $i] = chr($v); + } + $format = $format >> 1; + } + return $blacks; + } + + /** + * mask0 + * @param int $x X position + * @param int $y Y position + * @return int mask + */ + protected function mask0($x, $y) { + return ($x + $y) & 1; + } + + /** + * mask1 + * @param int $x X position + * @param int $y Y position + * @return int mask + */ + protected function mask1($x, $y) { + return ($y & 1); + } + + /** + * mask2 + * @param int $x X position + * @param int $y Y position + * @return int mask + */ + protected function mask2($x, $y) { + return ($x % 3); + } + + /** + * mask3 + * @param int $x X position + * @param int $y Y position + * @return int mask + */ + protected function mask3($x, $y) { + return ($x + $y) % 3; + } + + /** + * mask4 + * @param int $x X position + * @param int $y Y position + * @return int mask + */ + protected function mask4($x, $y) { + return (((int)($y / 2)) + ((int)($x / 3))) & 1; + } + + /** + * mask5 + * @param int $x X position + * @param int $y Y position + * @return int mask + */ + protected function mask5($x, $y) { + return (($x * $y) & 1) + ($x * $y) % 3; + } + + /** + * mask6 + * @param int $x X position + * @param int $y Y position + * @return int mask + */ + protected function mask6($x, $y) { + return ((($x * $y) & 1) + ($x * $y) % 3) & 1; + } + + /** + * mask7 + * @param int $x X position + * @param int $y Y position + * @return int mask + */ + protected function mask7($x, $y) { + return ((($x * $y) % 3) + (($x + $y) & 1)) & 1; + } + + /** + * Return bitmask + * @param int $maskNo mask number + * @param int $width width + * @param array $frame frame + * @return array bitmask + */ + protected function generateMaskNo($maskNo, $width, $frame) { + $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); + for ($y=0; $y<$width; ++$y) { + for ($x=0; $x<$width; ++$x) { + if (ord($frame[$y][$x]) & 0x80) { + $bitMask[$y][$x] = 0; + } else { + $maskFunc = call_user_func(array($this, 'mask'.$maskNo), $x, $y); + $bitMask[$y][$x] = ($maskFunc == 0)?1:0; + } + } + } + return $bitMask; + } + + /** + * makeMaskNo + * @param int $maskNo + * @param int $width + * @param int $s + * @param int $d + * @param boolean $maskGenOnly + * @return int b + */ + protected function makeMaskNo($maskNo, $width, $s, &$d, $maskGenOnly=false) { + $b = 0; + $bitMask = array(); + $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); + if ($maskGenOnly) { + return; + } + $d = $s; + for ($y=0; $y<$width; ++$y) { + for ($x=0; $x<$width; ++$x) { + if ($bitMask[$y][$x] == 1) { + $d[$y][$x] = chr(ord($s[$y][$x]) ^ (int)$bitMask[$y][$x]); + } + $b += (int)(ord($d[$y][$x]) & 1); + } + } + return $b; + } + + /** + * makeMask + * @param int $width + * @param array $frame + * @param int $maskNo + * @param int $level + * @return array mask + */ + protected function makeMask($width, $frame, $maskNo, $level) { + $masked = array_fill(0, $width, str_repeat("\0", $width)); + $this->makeMaskNo($maskNo, $width, $frame, $masked); + $this->writeFormatInformation($width, $masked, $maskNo, $level); + return $masked; + } + + /** + * calcN1N3 + * @param int $length + * @return int demerit + */ + protected function calcN1N3($length) { + $demerit = 0; + for ($i=0; $i<$length; ++$i) { + if ($this->runLength[$i] >= 5) { + $demerit += (N1 + ($this->runLength[$i] - 5)); + } + if ($i & 1) { + if (($i >= 3) AND ($i < ($length-2)) AND ($this->runLength[$i] % 3 == 0)) { + $fact = (int)($this->runLength[$i] / 3); + if (($this->runLength[$i-2] == $fact) + AND ($this->runLength[$i-1] == $fact) + AND ($this->runLength[$i+1] == $fact) + AND ($this->runLength[$i+2] == $fact)) { + if (($this->runLength[$i-3] < 0) OR ($this->runLength[$i-3] >= (4 * $fact))) { + $demerit += N3; + } elseif ((($i+3) >= $length) OR ($this->runLength[$i+3] >= (4 * $fact))) { + $demerit += N3; + } + } + } + } + } + return $demerit; + } + + /** + * evaluateSymbol + * @param int $width + * @param array $frame + * @return int demerit + */ + protected function evaluateSymbol($width, $frame) { + $head = 0; + $demerit = 0; + for ($y=0; $y<$width; ++$y) { + $head = 0; + $this->runLength[0] = 1; + $frameY = $frame[$y]; + if ($y > 0) { + $frameYM = $frame[$y-1]; + } + for ($x=0; $x<$width; ++$x) { + if (($x > 0) AND ($y > 0)) { + $b22 = ord($frameY[$x]) & ord($frameY[$x-1]) & ord($frameYM[$x]) & ord($frameYM[$x-1]); + $w22 = ord($frameY[$x]) | ord($frameY[$x-1]) | ord($frameYM[$x]) | ord($frameYM[$x-1]); + if (($b22 | ($w22 ^ 1)) & 1) { + $demerit += N2; + } + } + if (($x == 0) AND (ord($frameY[$x]) & 1)) { + $this->runLength[0] = -1; + $head = 1; + $this->runLength[$head] = 1; + } elseif ($x > 0) { + if ((ord($frameY[$x]) ^ ord($frameY[$x-1])) & 1) { + $head++; + $this->runLength[$head] = 1; + } else { + $this->runLength[$head]++; + } + } + } + $demerit += $this->calcN1N3($head+1); + } + for ($x=0; $x<$width; ++$x) { + $head = 0; + $this->runLength[0] = 1; + for ($y=0; $y<$width; ++$y) { + if (($y == 0) AND (ord($frame[$y][$x]) & 1)) { + $this->runLength[0] = -1; + $head = 1; + $this->runLength[$head] = 1; + } elseif ($y > 0) { + if ((ord($frame[$y][$x]) ^ ord($frame[$y-1][$x])) & 1) { + $head++; + $this->runLength[$head] = 1; + } else { + $this->runLength[$head]++; + } + } + } + $demerit += $this->calcN1N3($head+1); + } + return $demerit; + } + + /** + * mask + * @param int $width + * @param array $frame + * @param int $level + * @return array best mask + */ + protected function mask($width, $frame, $level) { + $minDemerit = PHP_INT_MAX; + $bestMaskNum = 0; + $bestMask = array(); + $checked_masks = array(0, 1, 2, 3, 4, 5, 6, 7); + if (QR_FIND_FROM_RANDOM !== false) { + $howManuOut = 8 - (QR_FIND_FROM_RANDOM % 9); + for ($i = 0; $i < $howManuOut; ++$i) { + $remPos = rand (0, count($checked_masks)-1); + unset($checked_masks[$remPos]); + $checked_masks = array_values($checked_masks); + } + } + $bestMask = $frame; + foreach ($checked_masks as $i) { + $mask = array_fill(0, $width, str_repeat("\0", $width)); + $demerit = 0; + $blacks = 0; + $blacks = $this->makeMaskNo($i, $width, $frame, $mask); + $blacks += $this->writeFormatInformation($width, $mask, $i, $level); + $blacks = (int)(100 * $blacks / ($width * $width)); + $demerit = (int)((int)(abs($blacks - 50) / 5) * N4); + $demerit += $this->evaluateSymbol($width, $mask); + if ($demerit < $minDemerit) { + $minDemerit = $demerit; + $bestMask = $mask; + $bestMaskNum = $i; + } + } + return $bestMask; + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRsplit + + /** + * Return true if the character at specified position is a number + * @param string $str string + * @param int $pos characted position + * @return boolean true of false + */ + protected function isdigitat($str, $pos) { + if ($pos >= strlen($str)) { + return false; + } + return ((ord($str[$pos]) >= ord('0'))&&(ord($str[$pos]) <= ord('9'))); + } + + /** + * Return true if the character at specified position is an alphanumeric character + * @param string $str string + * @param int $pos characted position + * @return boolean true of false + */ + protected function isalnumat($str, $pos) { + if ($pos >= strlen($str)) { + return false; + } + return ($this->lookAnTable(ord($str[$pos])) >= 0); + } + + /** + * identifyMode + * @param int $pos + * @return int mode + */ + protected function identifyMode($pos) { + if ($pos >= strlen($this->dataStr)) { + return QR_MODE_NL; + } + $c = $this->dataStr[$pos]; + if ($this->isdigitat($this->dataStr, $pos)) { + return QR_MODE_NM; + } elseif ($this->isalnumat($this->dataStr, $pos)) { + return QR_MODE_AN; + } elseif ($this->hint == QR_MODE_KJ) { + if ($pos+1 < strlen($this->dataStr)) { + $d = $this->dataStr[$pos+1]; + $word = (ord($c) << 8) | ord($d); + if (($word >= 0x8140 && $word <= 0x9ffc) OR ($word >= 0xe040 && $word <= 0xebbf)) { + return QR_MODE_KJ; + } + } + } + return QR_MODE_8B; + } + + /** + * eatNum + * @return int run + */ + protected function eatNum() { + $ln = $this->lengthIndicator(QR_MODE_NM, $this->version); + $p = 0; + while($this->isdigitat($this->dataStr, $p)) { + $p++; + } + $run = $p; + $mode = $this->identifyMode($p); + if ($mode == QR_MODE_8B) { + $dif = $this->estimateBitsModeNum($run) + 4 + $ln + + $this->estimateBitsMode8(1) // + 4 + l8 + - $this->estimateBitsMode8($run + 1); // - 4 - l8 + if ($dif > 0) { + return $this->eat8(); + } + } + if ($mode == QR_MODE_AN) { + $dif = $this->estimateBitsModeNum($run) + 4 + $ln + + $this->estimateBitsModeAn(1) // + 4 + la + - $this->estimateBitsModeAn($run + 1);// - 4 - la + if ($dif > 0) { + return $this->eatAn(); + } + } + $this->items = $this->appendNewInputItem($this->items, QR_MODE_NM, $run, str_split($this->dataStr)); + return $run; + } + + /** + * eatAn + * @return int run + */ + protected function eatAn() { + $la = $this->lengthIndicator(QR_MODE_AN, $this->version); + $ln = $this->lengthIndicator(QR_MODE_NM, $this->version); + $p = 0; + while($this->isalnumat($this->dataStr, $p)) { + if ($this->isdigitat($this->dataStr, $p)) { + $q = $p; + while($this->isdigitat($this->dataStr, $q)) { + $q++; + } + $dif = $this->estimateBitsModeAn($p) // + 4 + la + + $this->estimateBitsModeNum($q - $p) + 4 + $ln + - $this->estimateBitsModeAn($q); // - 4 - la + if ($dif < 0) { + break; + } else { + $p = $q; + } + } else { + $p++; + } + } + $run = $p; + if (!$this->isalnumat($this->dataStr, $p)) { + $dif = $this->estimateBitsModeAn($run) + 4 + $la + + $this->estimateBitsMode8(1) // + 4 + l8 + - $this->estimateBitsMode8($run + 1); // - 4 - l8 + if ($dif > 0) { + return $this->eat8(); + } + } + $this->items = $this->appendNewInputItem($this->items, QR_MODE_AN, $run, str_split($this->dataStr)); + return $run; + } + + /** + * eatKanji + * @return int run + */ + protected function eatKanji() { + $p = 0; + while($this->identifyMode($p) == QR_MODE_KJ) { + $p += 2; + } + $this->items = $this->appendNewInputItem($this->items, QR_MODE_KJ, $p, str_split($this->dataStr)); + return $run; + } + + /** + * eat8 + * @return int run + */ + protected function eat8() { + $la = $this->lengthIndicator(QR_MODE_AN, $this->version); + $ln = $this->lengthIndicator(QR_MODE_NM, $this->version); + $p = 1; + $dataStrLen = strlen($this->dataStr); + while($p < $dataStrLen) { + $mode = $this->identifyMode($p); + if ($mode == QR_MODE_KJ) { + break; + } + if ($mode == QR_MODE_NM) { + $q = $p; + while($this->isdigitat($this->dataStr, $q)) { + $q++; + } + $dif = $this->estimateBitsMode8($p) // + 4 + l8 + + $this->estimateBitsModeNum($q - $p) + 4 + $ln + - $this->estimateBitsMode8($q); // - 4 - l8 + if ($dif < 0) { + break; + } else { + $p = $q; + } + } elseif ($mode == QR_MODE_AN) { + $q = $p; + while($this->isalnumat($this->dataStr, $q)) { + $q++; + } + $dif = $this->estimateBitsMode8($p) // + 4 + l8 + + $this->estimateBitsModeAn($q - $p) + 4 + $la + - $this->estimateBitsMode8($q); // - 4 - l8 + if ($dif < 0) { + break; + } else { + $p = $q; + } + } else { + $p++; + } + } + $run = $p; + $this->items = $this->appendNewInputItem($this->items, QR_MODE_8B, $run, str_split($this->dataStr)); + return $run; + } + + /** + * splitString + */ + protected function splitString() { + while (strlen($this->dataStr) > 0) { + if ($this->dataStr == '') { + return 0; + } + $mode = $this->identifyMode(0); + switch ($mode) { + case QR_MODE_NM: { + $length = $this->eatNum(); + break; + } + case QR_MODE_AN: { + $length = $this->eatAn(); + break; + } + case QR_MODE_KJ: { + if ($hint == QR_MODE_KJ) { + $length = $this->eatKanji(); + } else { + $length = $this->eat8(); + } + break; + } + default: { + $length = $this->eat8(); + break; + } + } + if ($length == 0) { + return 0; + } + if ($length < 0) { + return -1; + } + $this->dataStr = substr($this->dataStr, $length); + } + } + + /** + * toUpper + */ + protected function toUpper() { + $stringLen = strlen($this->dataStr); + $p = 0; + while ($p < $stringLen) { + $mode = $this->identifyMode(substr($this->dataStr, $p), $this->hint); + if ($mode == QR_MODE_KJ) { + $p += 2; + } else { + if ((ord($this->dataStr[$p]) >= ord('a')) AND (ord($this->dataStr[$p]) <= ord('z'))) { + $this->dataStr[$p] = chr(ord($this->dataStr[$p]) - 32); + } + $p++; + } + } + return $this->dataStr; + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRinputItem + + /** + * newInputItem + * @param int $mode + * @param int $size + * @param array $data + * @param array $bstream + * @return array input item + */ + protected function newInputItem($mode, $size, $data, $bstream=null) { + $setData = array_slice($data, 0, $size); + if (count($setData) < $size) { + $setData = array_merge($setData, array_fill(0, ($size - count($setData)), 0)); + } + if (!$this->check($mode, $size, $setData)) { + return NULL; + } + $inputitem = array(); + $inputitem['mode'] = $mode; + $inputitem['size'] = $size; + $inputitem['data'] = $setData; + $inputitem['bstream'] = $bstream; + return $inputitem; + } + + /** + * encodeModeNum + * @param array $inputitem + * @param int $version + * @return array input item + */ + protected function encodeModeNum($inputitem, $version) { + $words = (int)($inputitem['size'] / 3); + $inputitem['bstream'] = array(); + $val = 0x1; + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, $val); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], $this->lengthIndicator(QR_MODE_NM, $version), $inputitem['size']); + for ($i=0; $i < $words; ++$i) { + $val = (ord($inputitem['data'][$i*3 ]) - ord('0')) * 100; + $val += (ord($inputitem['data'][$i*3+1]) - ord('0')) * 10; + $val += (ord($inputitem['data'][$i*3+2]) - ord('0')); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 10, $val); + } + if ($inputitem['size'] - $words * 3 == 1) { + $val = ord($inputitem['data'][$words*3]) - ord('0'); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, $val); + } elseif (($inputitem['size'] - ($words * 3)) == 2) { + $val = (ord($inputitem['data'][$words*3 ]) - ord('0')) * 10; + $val += (ord($inputitem['data'][$words*3+1]) - ord('0')); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 7, $val); + } + return $inputitem; + } + + /** + * encodeModeAn + * @param array $inputitem + * @param int $version + * @return array input item + */ + protected function encodeModeAn($inputitem, $version) { + $words = (int)($inputitem['size'] / 2); + $inputitem['bstream'] = array(); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, 0x02); + $inputitem['bstream'] = $this->appendNum(v, $this->lengthIndicator(QR_MODE_AN, $version), $inputitem['size']); + for ($i=0; $i < $words; ++$i) { + $val = (int)$this->lookAnTable(ord($inputitem['data'][$i*2 ])) * 45; + $val += (int)$this->lookAnTable(ord($inputitem['data'][$i*2+1])); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 11, $val); + } + if ($inputitem['size'] & 1) { + $val = $this->lookAnTable(ord($inputitem['data'][($words * 2)])); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 6, $val); + } + return $inputitem; + } + + /** + * encodeMode8 + * @param array $inputitem + * @param int $version + * @return array input item + */ + protected function encodeMode8($inputitem, $version) { + $inputitem['bstream'] = array(); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, 0x4); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], $this->lengthIndicator(QR_MODE_8B, $version), $inputitem['size']); + for ($i=0; $i < $inputitem['size']; ++$i) { + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 8, ord($inputitem['data'][$i])); + } + return $inputitem; + } + + /** + * encodeModeKanji + * @param array $inputitem + * @param int $version + * @return array input item + */ + protected function encodeModeKanji($inputitem, $version) { + $inputitem['bstream'] = array(); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, 0x8); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], $this->lengthIndicator(QR_MODE_KJ, $version), (int)($inputitem['size'] / 2)); + for ($i=0; $i<$inputitem['size']; $i+=2) { + $val = (ord($inputitem['data'][$i]) << 8) | ord($inputitem['data'][$i+1]); + if ($val <= 0x9ffc) { + $val -= 0x8140; + } else { + $val -= 0xc140; + } + $h = ($val >> 8) * 0xc0; + $val = ($val & 0xff) + $h; + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 13, $val); + } + return $inputitem; + } + + /** + * encodeModeStructure + * @param array $inputitem + * @return array input item + */ + protected function encodeModeStructure($inputitem) { + $inputitem['bstream'] = array(); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, 0x03); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, ord($inputitem['data'][1]) - 1); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 4, ord($inputitem['data'][0]) - 1); + $inputitem['bstream'] = $this->appendNum($inputitem['bstream'], 8, ord($inputitem['data'][2])); + return $inputitem; + } + + /** + * encodeBitStream + * @param array $inputitem + * @param int $version + * @return array input item + */ + protected function encodeBitStream($inputitem, $version) { + $inputitem['bstream'] = array(); + $words = $this->maximumWords($inputitem['mode'], $version); + if ($inputitem['size'] > $words) { + $st1 = $this->newInputItem($inputitem['mode'], $words, $inputitem['data']); + $st2 = $this->newInputItem($inputitem['mode'], $inputitem['size'] - $words, array_slice($inputitem['data'], $words)); + $st1 = $this->encodeBitStream($st1, $version); + $st2 = $this->encodeBitStream($st2, $version); + $inputitem['bstream'] = array(); + $inputitem['bstream'] = $this->appendBitstream($inputitem['bstream'], $st1['bstream']); + $inputitem['bstream'] = $this->appendBitstream($inputitem['bstream'], $st2['bstream']); + } else { + switch($inputitem['mode']) { + case QR_MODE_NM: { + $inputitem = $this->encodeModeNum($inputitem, $version); + break; + } + case QR_MODE_AN: { + $inputitem = $this->encodeModeAn($inputitem, $version); + break; + } + case QR_MODE_8B: { + $inputitem = $this->encodeMode8($inputitem, $version); + break; + } + case QR_MODE_KJ: { + $inputitem = $this->encodeModeKanji($inputitem, $version); + break; + } + case QR_MODE_ST: { + $inputitem = $this->encodeModeStructure($inputitem); + break; + } + default: { + break; + } + } + } + return $inputitem; + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRinput + + /** + * Append data to an input object. + * The data is copied and appended to the input object. + * @param array items input items + * @param int $mode encoding mode. + * @param int $size size of data (byte). + * @param array $data array of input data. + * @return items + * + */ + protected function appendNewInputItem($items, $mode, $size, $data) { + $items[] = $this->newInputItem($mode, $size, $data); + return $items; + } + + /** + * insertStructuredAppendHeader + * @param array $items + * @param int $size + * @param int $index + * @param int $parity + * @return array items + */ + protected function insertStructuredAppendHeader($items, $size, $index, $parity) { + if ($size > MAX_STRUCTURED_SYMBOLS) { + return -1; + } + if (($index <= 0) OR ($index > MAX_STRUCTURED_SYMBOLS)) { + return -1; + } + $buf = array($size, $index, $parity); + $entry = $this->newInputItem(QR_MODE_ST, 3, buf); + array_unshift($items, $entry); + return $items; + } + + /** + * calcParity + * @param array $items + * @return int parity + */ + protected function calcParity($items) { + $parity = 0; + foreach ($items as $item) { + if ($item['mode'] != QR_MODE_ST) { + for ($i=$item['size']-1; $i>=0; --$i) { + $parity ^= $item['data'][$i]; + } + } + } + return $parity; + } + + /** + * checkModeNum + * @param int $size + * @param array $data + * @return boolean true or false + */ + protected function checkModeNum($size, $data) { + for ($i=0; $i<$size; ++$i) { + if ((ord($data[$i]) < ord('0')) OR (ord($data[$i]) > ord('9'))){ + return false; + } + } + return true; + } + + /** + * estimateBitsModeNum + * @param int $size + * @return int number of bits + */ + protected function estimateBitsModeNum($size) { + $w = (int)$size / 3; + $bits = $w * 10; + switch($size - $w * 3) { + case 1: { + $bits += 4; + break; + } + case 2: { + $bits += 7; + break; + } + default: { + break; + } + } + return $bits; + } + + /** + * Look up the alphabet-numeric convesion table (see JIS X0510:2004, pp.19). + * @param int $c character value + * @return value + */ + protected function lookAnTable($c) { + return (($c > 127)?-1:$this->anTable[$c]); + } + + /** + * checkModeAn + * @param int $size + * @param array $data + * @return boolean true or false + */ + protected function checkModeAn($size, $data) { + for ($i=0; $i<$size; ++$i) { + if ($this->lookAnTable(ord($data[$i])) == -1) { + return false; + } + } + return true; + } + + /** + * estimateBitsModeAn + * @param int $size + * @return int number of bits + */ + protected function estimateBitsModeAn($size) { + $w = (int)($size / 2); + $bits = $w * 11; + if ($size & 1) { + $bits += 6; + } + return $bits; + } + + /** + * estimateBitsMode8 + * @param int $size + * @return int number of bits + */ + protected function estimateBitsMode8($size) { + return $size * 8; + } + + /** + * estimateBitsModeKanji + * @param int $size + * @return int number of bits + */ + protected function estimateBitsModeKanji($size) { + return (int)(($size / 2) * 13); + } + + /** + * checkModeKanji + * @param int $size + * @param array $data + * @return boolean true or false + */ + protected function checkModeKanji($size, $data) { + if ($size & 1) { + return false; + } + for ($i=0; $i<$size; $i+=2) { + $val = (ord($data[$i]) << 8) | ord($data[$i+1]); + if (($val < 0x8140) OR (($val > 0x9ffc) AND ($val < 0xe040)) OR ($val > 0xebbf)) { + return false; + } + } + return true; + } + + /** + * Validate the input data. + * @param int $mode encoding mode. + * @param int $size size of data (byte). + * @param array data data to validate + * @return boolean true in case of valid data, false otherwise + */ + protected function check($mode, $size, $data) { + if ($size <= 0) { + return false; + } + switch($mode) { + case QR_MODE_NM: { + return $this->checkModeNum($size, $data); + } + case QR_MODE_AN: { + return $this->checkModeAn($size, $data); + } + case QR_MODE_KJ: { + return $this->checkModeKanji($size, $data); + } + case QR_MODE_8B: { + return true; + } + case QR_MODE_ST: { + return true; + } + default: { + break; + } + } + return false; + } + + /** + * estimateBitStreamSize + * @param array $items + * @param int $version + * @return int bits + */ + protected function estimateBitStreamSize($items, $version) { + $bits = 0; + if ($version == 0) { + $version = 1; + } + foreach ($items as $item) { + switch($item['mode']) { + case QR_MODE_NM: { + $bits = $this->estimateBitsModeNum($item['size']); + break; + } + case QR_MODE_AN: { + $bits = $this->estimateBitsModeAn($item['size']); + break; + } + case QR_MODE_8B: { + $bits = $this->estimateBitsMode8($item['size']); + break; + } + case QR_MODE_KJ: { + $bits = $this->estimateBitsModeKanji($item['size']); + break; + } + case QR_MODE_ST: { + return STRUCTURE_HEADER_BITS; + } + default: { + return 0; + } + } + $l = $this->lengthIndicator($item['mode'], $version); + $m = 1 << $l; + $num = (int)(($item['size'] + $m - 1) / $m); + $bits += $num * (4 + $l); + } + return $bits; + } + + /** + * estimateVersion + * @param array $items + * @return int version + */ + protected function estimateVersion($items) { + $version = 0; + $prev = 0; + do { + $prev = $version; + $bits = $this->estimateBitStreamSize($items, $prev); + $version = $this->getMinimumVersion((int)(($bits + 7) / 8), $this->level); + if ($version < 0) { + return -1; + } + } while ($version > $prev); + return $version; + } + + /** + * lengthOfCode + * @param int $mode + * @param int $version + * @param int $bits + * @return int size + */ + protected function lengthOfCode($mode, $version, $bits) { + $payload = $bits - 4 - $this->lengthIndicator($mode, $version); + switch($mode) { + case QR_MODE_NM: { + $chunks = (int)($payload / 10); + $remain = $payload - $chunks * 10; + $size = $chunks * 3; + if ($remain >= 7) { + $size += 2; + } elseif ($remain >= 4) { + $size += 1; + } + break; + } + case QR_MODE_AN: { + $chunks = (int)($payload / 11); + $remain = $payload - $chunks * 11; + $size = $chunks * 2; + if ($remain >= 6) { + ++$size; + } + break; + } + case QR_MODE_8B: { + $size = (int)($payload / 8); + break; + } + case QR_MODE_KJ: { + $size = (int)(($payload / 13) * 2); + break; + } + case QR_MODE_ST: { + $size = (int)($payload / 8); + break; + } + default: { + $size = 0; + break; + } + } + $maxsize = $this->maximumWords($mode, $version); + if ($size < 0) { + $size = 0; + } + if ($size > $maxsize) { + $size = $maxsize; + } + return $size; + } + + /** + * createBitStream + * @param array $items + * @return array of items and total bits + */ + protected function createBitStream($items) { + $total = 0; + foreach ($items as $key => $item) { + $items[$key] = $this->encodeBitStream($item, $this->version); + $bits = count($items[$key]['bstream']); + $total += $bits; + } + return array($items, $total); + } + + /** + * convertData + * @param array $items + * @return array items + */ + protected function convertData($items) { + $ver = $this->estimateVersion($items); + if ($ver > $this->version) { + $this->version = $ver; + } + for (;;) { + $cbs = $this->createBitStream($items); + $items = $cbs[0]; + $bits = $cbs[1]; + if ($bits < 0) { + return -1; + } + $ver = $this->getMinimumVersion((int)(($bits + 7) / 8), $this->level); + if ($ver < 0) { + return -1; + } elseif ($ver > $this->version) { + $this->version = $ver; + } else { + break; + } + } + return $items; + } + + /** + * Append Padding Bit to bitstream + * @param array $bstream + * @return array bitstream + */ + protected function appendPaddingBit($bstream) { + $bits = count($bstream); + $maxwords = $this->getDataLength($this->version, $this->level); + $maxbits = $maxwords * 8; + if ($maxbits == $bits) { + return 0; + } + if ($maxbits - $bits < 5) { + return $this->appendNum($bstream, $maxbits - $bits, 0); + } + $bits += 4; + $words = (int)(($bits + 7) / 8); + $padding = array(); + $padding = $this->appendNum($padding, $words * 8 - $bits + 4, 0); + $padlen = $maxwords - $words; + if ($padlen > 0) { + $padbuf = array(); + for ($i=0; $i<$padlen; ++$i) { + $padbuf[$i] = ($i&1)?0x11:0xec; + } + $padding = $this->appendBytes($padding, $padlen, $padbuf); + } + return $this->appendBitstream($bstream, $padding); + } + + /** + * mergeBitStream + * @param array $bstream + * @return array bitstream + */ + protected function mergeBitStream($items) { + $items = $this->convertData($items); + $bstream = array(); + foreach ($items as $item) { + $bstream = $this->appendBitstream($bstream, $item['bstream']); + } + return $bstream; + } + + /** + * Returns a stream of bits. + * @param int $items + * @return array padded merged byte stream + */ + protected function getBitStream($items) { + $bstream = $this->mergeBitStream($items); + return $this->appendPaddingBit($bstream); + } + + /** + * Pack all bit streams padding bits into a byte array. + * @param int $items + * @return array padded merged byte stream + */ + protected function getByteStream($items) { + $bstream = $this->getBitStream($items); + return $this->bitstreamToByte($bstream); + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRbitstream + + /** + * Return an array with zeros + * @param int $setLength array size + * @return array + */ + protected function allocate($setLength) { + return array_fill(0, $setLength, 0); + } + + /** + * Return new bitstream from number + * @param int $bits number of bits + * @param int $num number + * @return array bitstream + */ + protected function newFromNum($bits, $num) { + $bstream = $this->allocate($bits); + $mask = 1 << ($bits - 1); + for ($i=0; $i<$bits; ++$i) { + if ($num & $mask) { + $bstream[$i] = 1; + } else { + $bstream[$i] = 0; + } + $mask = $mask >> 1; + } + return $bstream; + } + + /** + * Return new bitstream from bytes + * @param int $size size + * @param array $data bytes + * @return array bitstream + */ + protected function newFromBytes($size, $data) { + $bstream = $this->allocate($size * 8); + $p=0; + for ($i=0; $i<$size; ++$i) { + $mask = 0x80; + for ($j=0; $j<8; ++$j) { + if ($data[$i] & $mask) { + $bstream[$p] = 1; + } else { + $bstream[$p] = 0; + } + $p++; + $mask = $mask >> 1; + } + } + return $bstream; + } + + /** + * Append one bitstream to another + * @param array $bitstream original bitstream + * @param array $append bitstream to append + * @return array bitstream + */ + protected function appendBitstream($bitstream, $append) { + if ((!is_array($append)) OR (count($append) == 0)) { + return $bitstream; + } + if (count($bitstream) == 0) { + return $append; + } + return array_values(array_merge($bitstream, $append)); + } + + /** + * Append one bitstream created from number to another + * @param array $bitstream original bitstream + * @param int $bits number of bits + * @param int $num number + * @return array bitstream + */ + protected function appendNum($bitstream, $bits, $num) { + if ($bits == 0) { + return 0; + } + $b = $this->newFromNum($bits, $num); + return $this->appendBitstream($bitstream, $b); + } + + /** + * Append one bitstream created from bytes to another + * @param array $bitstream original bitstream + * @param int $size size + * @param array $data bytes + * @return array bitstream + */ + protected function appendBytes($bitstream, $size, $data) { + if ($size == 0) { + return 0; + } + $b = $this->newFromBytes($size, $data); + return $this->appendBitstream($bitstream, $b); + } + + /** + * Convert bitstream to bytes + * @param array $bitstream original bitstream + * @return array of bytes + */ + protected function bitstreamToByte($bstream) { + $size = count($bstream); + if ($size == 0) { + return array(); + } + $data = array_fill(0, (int)(($size + 7) / 8), 0); + $bytes = (int)($size / 8); + $p = 0; + for ($i=0; $i<$bytes; $i++) { + $v = 0; + for ($j=0; $j<8; $j++) { + $v = $v << 1; + $v |= $bstream[$p]; + $p++; + } + $data[$i] = $v; + } + if ($size & 7) { + $v = 0; + for ($j=0; $j<($size & 7); $j++) { + $v = $v << 1; + $v |= $bstream[$p]; + $p++; + } + $data[$bytes] = $v; + } + return $data; + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRspec + + /** + * Replace a value on the array at the specified position + * @param array $srctab + * @param int $x X position + * @param int $y Y position + * @param string $repl value to replace + * @param int $replLen length of the repl string + * @return array srctab + */ + protected function qrstrset($srctab, $x, $y, $repl, $replLen=false) { + $srctab[$y] = substr_replace($srctab[$y], ($replLen !== false)?substr($repl,0,$replLen):$repl, $x, ($replLen !== false)?$replLen:strlen($repl)); + return $srctab; + } + + /** + * Return maximum data code length (bytes) for the version. + * @param int $version version + * @param int $level error correction level + * @return int maximum size (bytes) + */ + protected function getDataLength($version, $level) { + return $this->capacity[$version][QRCAP_WORDS] - $this->capacity[$version][QRCAP_EC][$level]; + } + + /** + * Return maximum error correction code length (bytes) for the version. + * @param int $version version + * @param int $level error correction level + * @return int ECC size (bytes) + */ + protected function getECCLength($version, $level){ + return $this->capacity[$version][QRCAP_EC][$level]; + } + + /** + * Return the width of the symbol for the version. + * @param int $version version + * @return int width + */ + protected function getWidth($version) { + return $this->capacity[$version][QRCAP_WIDTH]; + } + + /** + * Return the numer of remainder bits. + * @param int $version version + * @return int number of remainder bits + */ + protected function getRemainder($version) { + return $this->capacity[$version][QRCAP_REMINDER]; + } + + /** + * Return a version number that satisfies the input code length. + * @param int $size input code length (byte) + * @param int $level error correction level + * @return int version number + */ + protected function getMinimumVersion($size, $level) { + for ($i=1; $i <= QRSPEC_VERSION_MAX; ++$i) { + $words = $this->capacity[$i][QRCAP_WORDS] - $this->capacity[$i][QRCAP_EC][$level]; + if ($words >= $size) { + return $i; + } + } + return -1; + } + + /** + * Return the size of length indicator for the mode and version. + * @param int $mode encoding mode + * @param int $version version + * @return int the size of the appropriate length indicator (bits). + */ + protected function lengthIndicator($mode, $version) { + if ($mode == QR_MODE_ST) { + return 0; + } + if ($version <= 9) { + $l = 0; + } elseif ($version <= 26) { + $l = 1; + } else { + $l = 2; + } + return $this->lengthTableBits[$mode][$l]; + } + + /** + * Return the maximum length for the mode and version. + * @param int $mode encoding mode + * @param int $version version + * @return int the maximum length (bytes) + */ + protected function maximumWords($mode, $version) { + if ($mode == QR_MODE_ST) { + return 3; + } + if ($version <= 9) { + $l = 0; + } else if ($version <= 26) { + $l = 1; + } else { + $l = 2; + } + $bits = $this->lengthTableBits[$mode][$l]; + $words = (1 << $bits) - 1; + if ($mode == QR_MODE_KJ) { + $words *= 2; // the number of bytes is required + } + return $words; + } + + /** + * Return an array of ECC specification. + * @param int $version version + * @param int $level error correction level + * @param array $spec an array of ECC specification contains as following: {# of type1 blocks, # of data code, # of ecc code, # of type2 blocks, # of data code} + * @return array spec + */ + protected function getEccSpec($version, $level, $spec) { + if (count($spec) < 5) { + $spec = array(0, 0, 0, 0, 0); + } + $b1 = $this->eccTable[$version][$level][0]; + $b2 = $this->eccTable[$version][$level][1]; + $data = $this->getDataLength($version, $level); + $ecc = $this->getECCLength($version, $level); + if ($b2 == 0) { + $spec[0] = $b1; + $spec[1] = (int)($data / $b1); + $spec[2] = (int)($ecc / $b1); + $spec[3] = 0; + $spec[4] = 0; + } else { + $spec[0] = $b1; + $spec[1] = (int)($data / ($b1 + $b2)); + $spec[2] = (int)($ecc / ($b1 + $b2)); + $spec[3] = $b2; + $spec[4] = $spec[1] + 1; + } + return $spec; + } + + /** + * Put an alignment marker. + * @param array $frame frame + * @param int $width width + * @param int $ox X center coordinate of the pattern + * @param int $oy Y center coordinate of the pattern + * @return array frame + */ + protected function putAlignmentMarker($frame, $ox, $oy) { + $finder = array( + "\xa1\xa1\xa1\xa1\xa1", + "\xa1\xa0\xa0\xa0\xa1", + "\xa1\xa0\xa1\xa0\xa1", + "\xa1\xa0\xa0\xa0\xa1", + "\xa1\xa1\xa1\xa1\xa1" + ); + $yStart = $oy - 2; + $xStart = $ox - 2; + for ($y=0; $y < 5; $y++) { + $frame = $this->qrstrset($frame, $xStart, $yStart+$y, $finder[$y]); + } + return $frame; + } + + /** + * Put an alignment pattern. + * @param int $version version + * @param array $fram frame + * @param int $width width + * @return array frame + */ + protected function putAlignmentPattern($version, $frame, $width) { + if ($version < 2) { + return $frame; + } + $d = $this->alignmentPattern[$version][1] - $this->alignmentPattern[$version][0]; + if ($d < 0) { + $w = 2; + } else { + $w = (int)(($width - $this->alignmentPattern[$version][0]) / $d + 2); + } + if ($w * $w - 3 == 1) { + $x = $this->alignmentPattern[$version][0]; + $y = $this->alignmentPattern[$version][0]; + $frame = $this->putAlignmentMarker($frame, $x, $y); + return $frame; + } + $cx = $this->alignmentPattern[$version][0]; + $wo = $w - 1; + for ($x=1; $x < $wo; ++$x) { + $frame = $this->putAlignmentMarker($frame, 6, $cx); + $frame = $this->putAlignmentMarker($frame, $cx, 6); + $cx += $d; + } + $cy = $this->alignmentPattern[$version][0]; + for ($y=0; $y < $wo; ++$y) { + $cx = $this->alignmentPattern[$version][0]; + for ($x=0; $x < $wo; ++$x) { + $frame = $this->putAlignmentMarker($frame, $cx, $cy); + $cx += $d; + } + $cy += $d; + } + return $frame; + } + + /** + * Return BCH encoded version information pattern that is used for the symbol of version 7 or greater. Use lower 18 bits. + * @param int $version version + * @return BCH encoded version information pattern + */ + protected function getVersionPattern($version) { + if (($version < 7) OR ($version > QRSPEC_VERSION_MAX)) { + return 0; + } + return $this->versionPattern[($version - 7)]; + } + + /** + * Return BCH encoded format information pattern. + * @param array $mask + * @param int $level error correction level + * @return BCH encoded format information pattern + */ + protected function getFormatInfo($mask, $level) { + if (($mask < 0) OR ($mask > 7)) { + return 0; + } + if (($level < 0) OR ($level > 3)) { + return 0; + } + return $this->formatInfo[$level][$mask]; + } + + /** + * Put a finder pattern. + * @param array $frame frame + * @param int $width width + * @param int $ox X center coordinate of the pattern + * @param int $oy Y center coordinate of the pattern + * @return array frame + */ + protected function putFinderPattern($frame, $ox, $oy) { + $finder = array( + "\xc1\xc1\xc1\xc1\xc1\xc1\xc1", + "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", + "\xc1\xc1\xc1\xc1\xc1\xc1\xc1" + ); + for ($y=0; $y < 7; $y++) { + $frame = $this->qrstrset($frame, $ox, ($oy + $y), $finder[$y]); + } + return $frame; + } + + /** + * Return a copy of initialized frame. + * @param int $version version + * @return Array of unsigned char. + */ + protected function createFrame($version) { + $width = $this->capacity[$version][QRCAP_WIDTH]; + $frameLine = str_repeat ("\0", $width); + $frame = array_fill(0, $width, $frameLine); + // Finder pattern + $frame = $this->putFinderPattern($frame, 0, 0); + $frame = $this->putFinderPattern($frame, $width - 7, 0); + $frame = $this->putFinderPattern($frame, 0, $width - 7); + // Separator + $yOffset = $width - 7; + for ($y=0; $y < 7; ++$y) { + $frame[$y][7] = "\xc0"; + $frame[$y][$width - 8] = "\xc0"; + $frame[$yOffset][7] = "\xc0"; + ++$yOffset; + } + $setPattern = str_repeat("\xc0", 8); + $frame = $this->qrstrset($frame, 0, 7, $setPattern); + $frame = $this->qrstrset($frame, $width-8, 7, $setPattern); + $frame = $this->qrstrset($frame, 0, $width - 8, $setPattern); + // Format info + $setPattern = str_repeat("\x84", 9); + $frame = $this->qrstrset($frame, 0, 8, $setPattern); + $frame = $this->qrstrset($frame, $width - 8, 8, $setPattern, 8); + $yOffset = $width - 8; + for ($y=0; $y < 8; ++$y,++$yOffset) { + $frame[$y][8] = "\x84"; + $frame[$yOffset][8] = "\x84"; + } + // Timing pattern + $wo = $width - 15; + for ($i=1; $i < $wo; ++$i) { + $frame[6][7+$i] = chr(0x90 | ($i & 1)); + $frame[7+$i][6] = chr(0x90 | ($i & 1)); + } + // Alignment pattern + $frame = $this->putAlignmentPattern($version, $frame, $width); + // Version information + if ($version >= 7) { + $vinf = $this->getVersionPattern($version); + $v = $vinf; + for ($x=0; $x<6; ++$x) { + for ($y=0; $y<3; ++$y) { + $frame[($width - 11)+$y][$x] = chr(0x88 | ($v & 1)); + $v = $v >> 1; + } + } + $v = $vinf; + for ($y=0; $y<6; ++$y) { + for ($x=0; $x<3; ++$x) { + $frame[$y][$x+($width - 11)] = chr(0x88 | ($v & 1)); + $v = $v >> 1; + } + } + } + // and a little bit... + $frame[$width - 8][8] = "\x81"; + return $frame; + } + + /** + * Set new frame for the specified version. + * @param int $version version + * @return Array of unsigned char. + */ + protected function newFrame($version) { + if (($version < 1) OR ($version > QRSPEC_VERSION_MAX)) { + return NULL; + } + if (!isset($this->frames[$version])) { + $this->frames[$version] = $this->createFrame($version); + } + if (is_null($this->frames[$version])) { + return NULL; + } + return $this->frames[$version]; + } + + /** + * Return block number 0 + * @param array $spec + * @return int value + */ + protected function rsBlockNum($spec) { + return ($spec[0] + $spec[3]); + } + + /** + * Return block number 1 + * @param array $spec + * @return int value + */ + protected function rsBlockNum1($spec) { + return $spec[0]; + } + + /** + * Return data codes 1 + * @param array $spec + * @return int value + */ + protected function rsDataCodes1($spec) { + return $spec[1]; + } + + /** + * Return ecc codes 1 + * @param array $spec + * @return int value + */ + protected function rsEccCodes1($spec) { + return $spec[2]; + } + + /** + * Return block number 2 + * @param array $spec + * @return int value + */ + protected function rsBlockNum2($spec) { + return $spec[3]; + } + + /** + * Return data codes 2 + * @param array $spec + * @return int value + */ + protected function rsDataCodes2($spec) { + return $spec[4]; + } + + /** + * Return ecc codes 2 + * @param array $spec + * @return int value + */ + protected function rsEccCodes2($spec) { + return $spec[2]; + } + + /** + * Return data length + * @param array $spec + * @return int value + */ + protected function rsDataLength($spec) { + return ($spec[0] * $spec[1]) + ($spec[3] * $spec[4]); + } + + /** + * Return ecc length + * @param array $spec + * @return int value + */ + protected function rsEccLength($spec) { + return ($spec[0] + $spec[3]) * $spec[2]; + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRrs + + /** + * Initialize a Reed-Solomon codec and add it to existing rsitems + * @param int $symsize symbol size, bits + * @param int $gfpoly Field generator polynomial coefficients + * @param int $fcr first root of RS code generator polynomial, index form + * @param int $prim primitive element to generate polynomial roots + * @param int $nroots RS code generator polynomial degree (number of roots) + * @param int $pad padding bytes at front of shortened block + * @return array Array of RS values:
  • mm = Bits per symbol;
  • nn = Symbols per block;
  • alpha_to = log lookup table array;
  • index_of = Antilog lookup table array;
  • genpoly = Generator polynomial array;
  • nroots = Number of generator;
  • roots = number of parity symbols;
  • fcr = First consecutive root, index form;
  • prim = Primitive element, index form;
  • iprim = prim-th root of 1, index form;
  • pad = Padding bytes in shortened block;
  • gfpoly
. + */ + protected function init_rs($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) { + foreach ($this->rsitems as $rs) { + if (($rs['pad'] != $pad) OR ($rs['nroots'] != $nroots) OR ($rs['mm'] != $symsize) + OR ($rs['gfpoly'] != $gfpoly) OR ($rs['fcr'] != $fcr) OR ($rs['prim'] != $prim)) { + continue; + } + return $rs; + } + $rs = $this->init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad); + array_unshift($this->rsitems, $rs); + return $rs; + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - + + // QRrsItem + + /** + * modnn + * @param array RS values + * @param int $x X position + * @return int X osition + */ + protected function modnn($rs, $x) { + while ($x >= $rs['nn']) { + $x -= $rs['nn']; + $x = ($x >> $rs['mm']) + ($x & $rs['nn']); + } + return $x; + } + + /** + * Initialize a Reed-Solomon codec and returns an array of values. + * @param int $symsize symbol size, bits + * @param int $gfpoly Field generator polynomial coefficients + * @param int $fcr first root of RS code generator polynomial, index form + * @param int $prim primitive element to generate polynomial roots + * @param int $nroots RS code generator polynomial degree (number of roots) + * @param int $pad padding bytes at front of shortened block + * @return array Array of RS values:
  • mm = Bits per symbol;
  • nn = Symbols per block;
  • alpha_to = log lookup table array;
  • index_of = Antilog lookup table array;
  • genpoly = Generator polynomial array;
  • nroots = Number of generator;
  • roots = number of parity symbols;
  • fcr = First consecutive root, index form;
  • prim = Primitive element, index form;
  • iprim = prim-th root of 1, index form;
  • pad = Padding bytes in shortened block;
  • gfpoly
. + */ + protected function init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) { + // Based on Reed solomon encoder by Phil Karn, KA9Q (GNU-LGPLv2) + $rs = null; + // Check parameter ranges + if (($symsize < 0) OR ($symsize > 8)) { + return $rs; + } + if (($fcr < 0) OR ($fcr >= (1<<$symsize))) { + return $rs; + } + if (($prim <= 0) OR ($prim >= (1<<$symsize))) { + return $rs; + } + if (($nroots < 0) OR ($nroots >= (1<<$symsize))) { + return $rs; + } + if (($pad < 0) OR ($pad >= ((1<<$symsize) -1 - $nroots))) { + return $rs; + } + $rs = array(); + $rs['mm'] = $symsize; + $rs['nn'] = (1 << $symsize) - 1; + $rs['pad'] = $pad; + $rs['alpha_to'] = array_fill(0, ($rs['nn'] + 1), 0); + $rs['index_of'] = array_fill(0, ($rs['nn'] + 1), 0); + // PHP style macro replacement ;) + $NN =& $rs['nn']; + $A0 =& $NN; + // Generate Galois field lookup tables + $rs['index_of'][0] = $A0; // log(zero) = -inf + $rs['alpha_to'][$A0] = 0; // alpha**-inf = 0 + $sr = 1; + for ($i=0; $i<$rs['nn']; ++$i) { + $rs['index_of'][$sr] = $i; + $rs['alpha_to'][$i] = $sr; + $sr <<= 1; + if ($sr & (1 << $symsize)) { + $sr ^= $gfpoly; + } + $sr &= $rs['nn']; + } + if ($sr != 1) { + // field generator polynomial is not primitive! + return NULL; + } + // Form RS code generator polynomial from its roots + $rs['genpoly'] = array_fill(0, ($nroots + 1), 0); + $rs['fcr'] = $fcr; + $rs['prim'] = $prim; + $rs['nroots'] = $nroots; + $rs['gfpoly'] = $gfpoly; + // Find prim-th root of 1, used in decoding + for ($iprim=1; ($iprim % $prim) != 0; $iprim += $rs['nn']) { + ; // intentional empty-body loop! + } + $rs['iprim'] = (int)($iprim / $prim); + $rs['genpoly'][0] = 1; + + + for ($i = 0,$root=$fcr*$prim; $i < $nroots; $i++, $root += $prim) { + $rs['genpoly'][$i+1] = 1; + // Multiply rs->genpoly[] by @**(root + x) + for ($j = $i; $j > 0; --$j) { + if ($rs['genpoly'][$j] != 0) { + $rs['genpoly'][$j] = $rs['genpoly'][$j-1] ^ $rs['alpha_to'][$this->modnn($rs, $rs['index_of'][$rs['genpoly'][$j]] + $root)]; + } else { + $rs['genpoly'][$j] = $rs['genpoly'][$j-1]; + } + } + // rs->genpoly[0] can never be zero + $rs['genpoly'][0] = $rs['alpha_to'][$this->modnn($rs, $rs['index_of'][$rs['genpoly'][0]] + $root)]; + } + // convert rs->genpoly[] to index form for quicker encoding + for ($i = 0; $i <= $nroots; ++$i) { + $rs['genpoly'][$i] = $rs['index_of'][$rs['genpoly'][$i]]; + } + return $rs; + } + + /** + * Encode a Reed-Solomon codec and returns the parity array + * @param array $rs RS values + * @param array $data data + * @param array $parity parity + * @return parity array + */ + protected function encode_rs_char($rs, $data, $parity) { + $MM =& $rs['mm']; // bits per symbol + $NN =& $rs['nn']; // the total number of symbols in a RS block + $ALPHA_TO =& $rs['alpha_to']; // the address of an array of NN elements to convert Galois field elements in index (log) form to polynomial form + $INDEX_OF =& $rs['index_of']; // the address of an array of NN elements to convert Galois field elements in polynomial form to index (log) form + $GENPOLY =& $rs['genpoly']; // an array of NROOTS+1 elements containing the generator polynomial in index form + $NROOTS =& $rs['nroots']; // the number of roots in the RS code generator polynomial, which is the same as the number of parity symbols in a block + $FCR =& $rs['fcr']; // first consecutive root, index form + $PRIM =& $rs['prim']; // primitive element, index form + $IPRIM =& $rs['iprim']; // prim-th root of 1, index form + $PAD =& $rs['pad']; // the number of pad symbols in a block + $A0 =& $NN; + $parity = array_fill(0, $NROOTS, 0); + for ($i=0; $i < ($NN - $NROOTS - $PAD); $i++) { + $feedback = $INDEX_OF[$data[$i] ^ $parity[0]]; + if ($feedback != $A0) { + // feedback term is non-zero + // This line is unnecessary when GENPOLY[NROOTS] is unity, as it must + // always be for the polynomials constructed by init_rs() + $feedback = $this->modnn($rs, $NN - $GENPOLY[$NROOTS] + $feedback); + for ($j=1; $j < $NROOTS; ++$j) { + $parity[$j] ^= $ALPHA_TO[$this->modnn($rs, $feedback + $GENPOLY[($NROOTS - $j)])]; + } + } + // Shift + array_shift($parity); + if ($feedback != $A0) { + array_push($parity, $ALPHA_TO[$this->modnn($rs, $feedback + $GENPOLY[0])]); + } else { + array_push($parity, 0); + } + } + return $parity; + } + + } // end QRcode class + +} // END OF "class_exists QRcode" +?> diff --git a/src-backup/includes/phpqrcode/cache/frame_1.dat b/src-backup/includes/phpqrcode/cache/frame_1.dat new file mode 100644 index 0000000..be28fea --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/frame_1.dat @@ -0,0 +1,2 @@ +xÚÁ À E9³u`³"PÅ„CÛ牗T!0$ +E•ɲQ™Ém½úhÛ¾9{kI"› 9Ln)Ap¤åÖ¾Ë>ß^‡Õz³mënÅ–;ü´mßn†ú¦Ë \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/frame_1.png b/src-backup/includes/phpqrcode/cache/frame_1.png new file mode 100644 index 0000000000000000000000000000000000000000..86ce6e98d8cf7071291d5e5bb39bc3080511c8b8 GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^q9Dx33?wJtG`|X@*aCb)T!Hle|NocXoPQU{GWK+F z45^rtobc!Hfq>uNnVVn7Gg`2HlysJm`1k++!4KjchA)1}^Yl3E66=VaXwbng!p`vB WU-#~W{*xdZ7(8A5T-G@yGywobm@6p& literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_10.dat b/src-backup/includes/phpqrcode/cache/frame_10.dat new file mode 100644 index 0000000000000000000000000000000000000000..aff163f6882e1c842881c539160539ee97221e5b GIT binary patch literal 204 zcmV;-05ku1+U=K34ul{KMqP93Nm#TyxdGe+ZZ`bX2|6GY6RiCuCX1^|Hy)_wA3>UwXVkes{2iDcbZs(b-_ G?>v^)7G+HU literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_10.png b/src-backup/includes/phpqrcode/cache/frame_10.png new file mode 100644 index 0000000000000000000000000000000000000000..dbfcd70b588c9cc508d210d761ca285c962e70c7 GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^mLSZ?3?#Q*6Fdf_*aCb)T!Hle|NocXoPQU{s`qqp z45^rNcH&0P1_Kcn{i)eEQ&eWabo5TEo z<(=q;l{2~SNFHOk7+K+Z++>o}0+W;js(lQ_L5J;4XHRbpJ@7EKSbjtGxs>0TanIFf yTerS?Jf(G)Wt_o(rC4{V)qPjP^(|O~A28=0dj4ToPRUb}EH+ z?=;|LU8z+!qM$&p(|BcWyT^0wyzYLMW@>oYiN^Dsz8hTJ4a-aiVeGGljlcQ?PgyF*WC@)ePT+&@l!`0?ief1~n6 zE|yl^gW5e`nKwIinOvP@sie!fPIxQBN@sPwvjzdvtR(AR7bMPLqt$5hLLY|jw(O$c@esqcjU~XWxX2%DQ}j2 Ypk>~2FWzvVWdEB3>HkBaKPQDn?w1{Br2qf` literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_12.png b/src-backup/includes/phpqrcode/cache/frame_12.png new file mode 100644 index 0000000000000000000000000000000000000000..8ba67822cdbeb547858ff6fc50cacee24a1b7d39 GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^jv&m)3?#Q$MzaAawg8_HS0MfW|No^o=iddgdOckn zLn`JZC;Z`O`p;)zaHT2o|6@ssn1en08x5|_?@qWT|MUNU=7X>P-D6i`V>=dLP>_)D zgJ10T|NV^*^<88qe3j=qkQ8w3g4pi>{%_LN%!j{MZKyvjEwPU&^5g&i?aJMXS9tf# z))chnOn-VfGWh@Dzii+24R{?7GfXmbNLp7=x~^a^N0{!Mqa4YM488*Y@7T!EMuc4o**_dv29=tg%zuR9}#CwLe ZF7lm6+oM%3(p}KSMZA}4^aZ5yN}69FYBT@< literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_13.png b/src-backup/includes/phpqrcode/cache/frame_13.png new file mode 100644 index 0000000000000000000000000000000000000000..6e49d35a02fdca84cbce7cbdcc4455a8f6c7a3bc GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^t{}|F3?$W@cV+=8wg8_Hkl_FS|CipJe;3GV_jGX# zshD$j(m~D!10L6U|G3>D>;fX{1#EjgrWdpJzq`==!Zpb!r-Z@r!+bgW{TFJO+!qN- zO!?Nbz~r}2caWn=<;hYT--4|xm^^H6ZOHEH)LZFp|21ezZE(M-7khSp>&l1M=G~k7 z```Ke>ZO4uStq~s?ri>iZOio6Z8x~5aew=^?BI!1D~3ap?Te2HrSt=x#Ng@b=d#Wz Gp$P!f)Kr=P literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_14.dat b/src-backup/includes/phpqrcode/cache/frame_14.dat new file mode 100644 index 0000000000000000000000000000000000000000..e9ae093296aa29fab5e9902b6f08c589fb0ada98 GIT binary patch literal 227 zcmV<90382#+U=M@3dA4`MZ5Oa11^$Xy@B3DZ#HVvL77flO`r_qyJ{$pN0cm*QcbkW zOb{?`fMilEnI}OcLM9cXSrSxIB``^d*Q8K#Sp&p|blj)ly$_eQu1|D#ZtYL-`P`_v z&)r4JoKwyYFt*0oxjyAsirGHbg&iU}F_Jo|lREvc)7@EgS~DZ_@w7&yaPY@qP1;GU zPx{8yNuAV5=eW*sedFq+PER-?LOv2s0FYrKP6Y+uPUG`wUqQUsGc*0ziH*;3-ma%} dV(p*WKJj*9?cGU|IJ?7+#M);zc>`M4w|A(xa#R2S literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_14.png b/src-backup/includes/phpqrcode/cache/frame_14.png new file mode 100644 index 0000000000000000000000000000000000000000..efc36c034f1a851498e5afad249adcce3d9fb04a GIT binary patch literal 213 zcmeAS@N?(olHy`uVBq!ia0vp^o*>M~3?#kx&YTaV*aCb)T!Hle|NocXoPQU{>hg4P z45^rNchW}Q1_K_Jxm}Srn$(yB6x19;G$JQ*YGh^#@P1G+>r7-mB7W`V*G+#Woopx# zaXH*8JW=$>j6!jp4LdeJ%jrLRbWNrUPz|e%?4;ffl``SFGrY?`?QLBi&=CD)URb+W z;hsD0-;#Cz-B}wlN7VYo-djpFrLW5Bvr5*ct<9@=upq-IF3r5?k;t7x_kgZq@O1Ta JS?83{1OWKuRWASl literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_15.dat b/src-backup/includes/phpqrcode/cache/frame_15.dat new file mode 100644 index 0000000000000000000000000000000000000000..18727818d76dba4873f5993f6c9ba948ca4646af GIT binary patch literal 242 zcmV zjE0Ef4oN1(k{KEk$4bexVm9YiXdC56v{3T$rBr2ZX>#9!_g z`B^`!y7Nq9&A4060Wo%qv*Ufsu{CCYT^E&9np3604Q_DzFE?pw^~|@kYVIa#&+I*` zl@Y;Kkq??`U*qt@M8@#wp?=9QD&F@s(Gu5We?xHWW={>BMTjUwEzGB literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_15.png b/src-backup/includes/phpqrcode/cache/frame_15.png new file mode 100644 index 0000000000000000000000000000000000000000..a9f416c7cf6d12d66b42288ca30634bd231620ed GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^z97uV3?y$Jul@|A*aCb)T!Hle|NocXoPQU{n&9c; z7*a7OIpGgKW4(k#*1|KZ|Y7;q&c({geOlq6{l_|NsB~@BeOj2?=LKg_g#L z_90*X^SA8}*y`}CUV@?f(2QoEFV40{_R4EX?7Qw<^Koy}!|cERKm4zM{J-8+&^5^V zM2+FAWR7Cxrk}D0bN=>!U_F$7K!)M7p-w2XYph^ate~2LVYZ-;n}smLZ{Gt?94;j$ Q0^P>o>FVdQ&MBb@0G@4Fe*gdg literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_16.dat b/src-backup/includes/phpqrcode/cache/frame_16.dat new file mode 100644 index 0000000..60af678 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/frame_16.dat @@ -0,0 +1 @@ +xÚí™A„ E]sëIX´;¸Ün6€È`‚q”êêW6ñ奚`Œ%A/3!¢°‚¢Š!g–ÈÌ¡’1N) éE¢Ï|;®—>6â¸Þ97$ëÄôëc]kköwé1Öü[·m­CÍœcÊRºÄê¹>¦èµ¾šE,•hʼnp„#áxFyWÏÇVWGçòÕ3¼Õ+шþàË“úSŽâ}Äž#áG8b^c^cÏÀŽp„c&3YQ"ñŽ÷çÌvµù›…ñàÎþþ¼–¹kÞ9ŠÜ‡÷}”¹³ï×ú ¢Ä¿QäÿL—/ÝÔÀÏ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/frame_16.png b/src-backup/includes/phpqrcode/cache/frame_16.png new file mode 100644 index 0000000000000000000000000000000000000000..6ac8fe890573bd9ec52af39a315ac3ab4ea2821f GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^fgsGt3?wHw-Y5l9YymzYu0Z<#|Nl#G&c6#}b$Gfs zhE&W+PWZ#m$}S<1weXDnM;@Ma0pIRB@R(Uk#Imf`XJ1(VT~b2AdEtS^#)tMHfByex zYuj(|)!|#c1w;4Yo6V7boNcfCeZ$Lh|MkLuTKNe-qW;_ev6oobrMz06=bb#S{I8Dh zN*l`;cPanr7UAppFZhu8w7WuKxXRac9?ujuXHUG*!(qm7^gY)#$(yb3fo@{(boFyt I=akR{0Keo@^#A|> literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_17.dat b/src-backup/includes/phpqrcode/cache/frame_17.dat new file mode 100644 index 0000000000000000000000000000000000000000..87f0cf593bab1049b794e2cd5af31a03aed5ae4e GIT binary patch literal 237 zcmV??y z+zk`^4Hi`JDI!!RUucn1n-C-N9Fb z^_i|y`igmlD_r3USGeLnfcpUE6|QiFD_o!A%FM(h?MeyC;;xkP+jach+JBqBM9KYfaSc^$Z&>9G^P0tbL9Kb? literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_17.png b/src-backup/includes/phpqrcode/cache/frame_17.png new file mode 100644 index 0000000000000000000000000000000000000000..5b929ac736efe8f6d1985337c1177744c1269ea7 GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^p&-o23?!MXtt5dITYyi9E0F&G|NqjP^X~##9iA?Z zAr*6y6aMhChD%6fCBE4#FAy~=;3R%V0whYqvPd*ASAoyV)#iDwF3O@+^;xolwc$WL45Dpax@=q3hFS3j3^ HP6ó<Ó™Ît¦3éÌ;ïH¼#Ñ™Ît¦3ÍYœ+og©hù¶óµÙ½¬lnðûF>Øi^»#awm;gè~pÛgìNs{6z’‘»ãºïÞäp¾Ê' \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/frame_18.png b/src-backup/includes/phpqrcode/cache/frame_18.png new file mode 100644 index 0000000000000000000000000000000000000000..ee0d6a35e2e6a84e715d5eb5b4fdc9b5d2749abb GIT binary patch literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^ks!>-3?%c9O1%M6YymzYu0Z<#|Nl#G&c6#}&Gd9} z45^rtobZRAwO&R-A}euD{dY-;n8Z2%#V16aW903$A%y{rCU=?+2?S zoD&%`Zq?5?^Z!3DPkmyQ!<_#d4AUG7+P3l-Ff2$saPI&Ek5tBsDdq+>Yyb1R)Ia|J zpWl75<3-~We~dpEEmriJ=c8wIT*8-4vt+_y-iROtCy{xt9gWtVsEV2B>-_MFQnAED a3kLr4d-pH(c*O{GB!j1`pUXO@geCyv16v^g literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_19.dat b/src-backup/includes/phpqrcode/cache/frame_19.dat new file mode 100644 index 0000000..95e26ad --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/frame_19.dat @@ -0,0 +1,3 @@ +xÚíšA +Ä E»öÖ.ÌNo 7Ñ›¶iiRÚN2‹áW%ðxÁ@ÚÚœê'­ +u6×êˆ.*S;}˜«ÒàÏT úèÌzrt¹ï%ç,ÒÅÚâÎ}ç;“âç)¹Ÿ˜âÝZÚîLåè¹÷¬Pçç$¯×÷ÏqËgœLÂôdJ‡;Üáw¸Ãý.]z#Ÿ¾«[ͽïOg‚­Æô"ÐË áBíî¦}Ç}‡;Üáw¸Ãî˜#1GbŽ„;Üáw¸Ãý_ÝC+w¢@Dfî÷ïç™uø2™ÅÚÉNþû9R7|pWßkïû®¿“ßßkºö¿ºú»¼ÎÓ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/frame_19.png b/src-backup/includes/phpqrcode/cache/frame_19.png new file mode 100644 index 0000000000000000000000000000000000000000..20fddd84c87b089846e770d1f605bb2ad7f57c71 GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^u^`OI3?%>V|Iq-X*aCb)T!Hle|NocXoPQU{n&#=^ z7*a9k?UaqYhYUnq&Wq-jC5YuSB#B&dnb|T?LRr=$Z_R}Tk2{2ZJNXJK?z>}STkBod zD!Ahe?+Y#-&W#RvJnw{;%)2x3`m?>pT<459AMQBAm|$4*AhL{Qjqyw_`&^NPya`bn zXJgWHCRV@tu;iM2+Sbh*zvtZi6J38hrG4+=)_Z5WUzM+1``TYoxK{mFuJ#L=ri0wm XqQq6W4|?kYUC7|+>gTe~DWM4f0svZN literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_2.dat b/src-backup/includes/phpqrcode/cache/frame_2.dat new file mode 100644 index 0000000..7e42f31 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/frame_2.dat @@ -0,0 +1 @@ +xÚÍ’Í À F{vë&  à&°Y+?Z1öÐSŸ'y!¢ŸÌÁa815&£•Û´ŽÙHå£Ùžc³•l«ÏFÆè1º#é6 fÊÖü©§6Äø•O7ˆ¨†C¦«›ðÖžÏ8gI®ÏöfB¦ÃÄÿæ\DÔ»( \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/frame_2.png b/src-backup/includes/phpqrcode/cache/frame_2.png new file mode 100644 index 0000000000000000000000000000000000000000..9c150ebe3c6343f6eb7549ec855a85c65de7604d GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^k|4~;3?%=liz@&rwg8_HS0MfW|No^o=iddgTs>VJ zLn`JZC;X{zXk7U1e=Qr^_5b1%IX6fouV7|A3{)sB@vn(vQN$aEu-Zyy=Ewg(ur1JZ on5OM)8&Req;!^#!TfKm!>(UHx3vIVCg!03uy4-2eap literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_20.dat b/src-backup/includes/phpqrcode/cache/frame_20.dat new file mode 100644 index 0000000000000000000000000000000000000000..d5ecc1d8a0be752c422607ca863710fb41e89f29 GIT binary patch literal 250 zcmb=p^>&so*I@;L*3I9pv5Fh-u3+BVd2h|XrM?Rygy#mlsE%yq{QN_rm3^kbraf_K zT{CJkWkNo9UY6CcnsV--^u zOJldbdLR|gckNx0zDb^tqE2c~fteS{QV^$$s-(VRP{&d+%}!k2n8hWL&;YFRNm@X@0pL0J~;%WB>pF literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_20.png b/src-backup/includes/phpqrcode/cache/frame_20.png new file mode 100644 index 0000000000000000000000000000000000000000..23a061d5442e5950dc57ae4e3f754a72b18ff53a GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^i6G3#3?%=YhPDX_8iU0msvcT2m((dUcsbb;eOISnHE*Dg<1ej05g z6TelqVW*J3LxB0VBTn;T9{U-YPuzYYm+{WVu)4`tCvuk0J$+=^JinE@{pYYme)_^G zRCKb+Ysa%PrSIR~y}9%L-~0HO`-ivRxp~21a(d3@Y0=B8FU(feo3S(D-WC(-B3)aC Yhx#Rc#-1{#fi7h5boFyt=akR{0I{51asU7T literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_21.dat b/src-backup/includes/phpqrcode/cache/frame_21.dat new file mode 100644 index 0000000..1974dd9 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/frame_21.dat @@ -0,0 +1 @@ +xÚíšA„ E]sëIX´;¹Ün6Up‚“в™ÿ]Ù˜þ< i-eWö‹¶˜)×äÅ•¼ÉÂ…H\jvqÙHL\6–šÝÐ…rI›¢LܹÜÕ%ÅÓ@´þ±V—vÆÂúý¤(ÏP4|ÎXnÒgÉß¼~]D¾ÉÕ×u1Us S\À°€,ÿÅ2Þ¢N§Ã?D›KºüF-:“eJ]p_À°€,˜a0Ã`†ÁÝ XÀ°`†Á ƒw,` X´]˜ˆ™‚¹‹˜°5 ‰®Y4{屿ñ2íûåvçJs†±Ûí9±˜í)õu±Û¹êÏØ,«]¸“‹Ù^_§7$ƒ_Í \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/frame_21.png b/src-backup/includes/phpqrcode/cache/frame_21.png new file mode 100644 index 0000000000000000000000000000000000000000..291598c72d21bac6548d649a4c0ae361a3f3c281 GIT binary patch literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^sUXbA3?%b5?e76nYymzYu0Z<#|Nl#G&c6#}E%0=4 z45^s&c8Ve2Ap-%H>!P`J6Rz)A#2UEl5$}@DKW0@L!ESpLCP{0HM08I+w9mQHp{3|< z#uoLvV(f=)_!nr4*yb$UIO$8w3qQFZD{qDu=PBg(==aGzoAaDygT+2UZ#}`II(`@a zTfYDFcHhw_Mf$&32ite~e#^+LRiYnGe^u zy!rp1m#1E^%JI(s6AU`tXJpwn$-ff(mztmOBd(vL_Y+&&`mg^F|356yrZelFIŸ¤Oò-Á 7Üpà 7ú$}’>É·7Üpà ·tss‰Órs §åVÍÎÜÆ÷’mýï¡Ò¹ò‡Þñ}R~7ôà&¾÷º?7ùÞýÔ¦Iïbhâ{æ»<ÀMi- \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/frame_23.png b/src-backup/includes/phpqrcode/cache/frame_23.png new file mode 100644 index 0000000000000000000000000000000000000000..b8f16ae239dd9f4c18c18191589b0f98e896c750 GIT binary patch literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^xggBQ3?wI-)rtZswg8_HS0MfW|No^o=idcMc)B=- zRLn_E_|wl2FCmdNaYwkl!49Ruey#-t=bLuQzgozl!F}cTUb(J&bqNVPt_=cgZT~$s z{jWFp<9dnv$v=0tgvgY49MfCbML0qY4m1n4Xi4n5_TOEBC(>kZ^AY#v;4+grFO{vO z&Rv<5>-tpA?P=FPcV6u)6IiDGIq|S3riwW=Ht_4NMYDR2t#y5Bw5WhlxO>L&-&1e; Q10BcU>FVdQ&MBb@0PfXRdH?_b literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_24.dat b/src-backup/includes/phpqrcode/cache/frame_24.dat new file mode 100644 index 0000000..7b92e29 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/frame_24.dat @@ -0,0 +1 @@ +xÚí›Aƒ E»öÖMX0;¸ÜnVP4ÚHSS»xßU3±/O´ý LiJ4ž±Vâ JCŠ%ý‰6VR&ÃÞD‘BœHjDù‚JÏ??™¯êBl­cDZñ½§'óU­ëXïUïÞ0æÃywÍį÷j¬é똳€3Å›¾ë˜cj†ù£{¨¥½:GqÄGÿÝñøŸûÚ°N†v;¹¶ç¬“J ‡ÄÐ<û‡É]ŽêëÈóˆ#Ž8âˆ#Ž8âH'§“ÓÉùÍÁGqÄGéätr:9Ï#Ž8âˆ#Ž8âØ“h­ˆ¯NÔt”Œ´Ö_ÝØ>t¹eëìS­¯¦æžù^\g¯õÎQe?ùvuöÌoïÕ;ˆï>ìˆ*ïwlò×mÑ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/frame_24.png b/src-backup/includes/phpqrcode/cache/frame_24.png new file mode 100644 index 0000000000000000000000000000000000000000..397c64f8533159fe3c792420d93cab3ec64c673c GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^g&@qx3?y%CxHlO{u?6^qxB}__|Nk$&IsYz@wcOLi zF{EP7+o>CQ4;cu!o)=Bt;3dWH(5PX|Xd0Tbewt9=(giM&ioPz%uZwq_{AtYK_=L;b z-~axk|Ds~-#=Rctl_DS6E<4m{++hxOxW(*z(!L?xL2jbS`@Xaf{qGdGWmpvR5thb97@%;4$j=d#Wzp$Pzhc4tul literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_25.dat b/src-backup/includes/phpqrcode/cache/frame_25.dat new file mode 100644 index 0000000..ba12518 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/frame_25.dat @@ -0,0 +1,3 @@ +xÚíÛA +à …á¬së‚‹™]rƒx½Y51mMÈBG +ÿ¸*Sx|Ua5Ƶ‚Z—Š„-,Ž1ä²HÑPÒRj–šX5§®i†©’áG©>W¥ŽžRïöÕ/Ëâ+uT廯å Ïӯ嗴ªuæÏ¥Ú[Sía£[kví÷5•+5n§Á´JêÜ%+V¬X±bÅŠõ߬u'Á±þÔû SRýå÷štzZ»ì+÷+V¬X±bÅŠ•ٟٟٟûŠ+V¬X±bÅÊìÏìÏìÏ}ÅŠ+V¬X±ö±ª¤¥ÖVI©¢ÖÖ‘+k«qÿ[úËtŽ·oVZÍþvoNV³wÇ}µ{³r<ýR­Þ"RÍÞ]ê W«r} \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/frame_25.png b/src-backup/includes/phpqrcode/cache/frame_25.png new file mode 100644 index 0000000000000000000000000000000000000000..25bc4454afbe21949bfd01d1a8bbab713486ae65 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^r6A163?#iy+587mYymzYu0Z<#|Nl#G&c6#}E%$VB z45^s&cB&%ZAqN51|5`cu2Qt4gsF-;4Ir?6nTp+=+Nr<&Ydrf9n!e{G{vpig`o@IAV zpT3{+yxVcXEa?kbazcxq6{lLB{}VM?`;*JP)#Y~fCz=^ŸÎí>ûmÛš·?ª•vô¹¾mg?ßÒ±Îþ³æÎ·ªd˜“Cµ¹U¦ÏIk•ÚÚE\ÕÙMs†f˜a†f˜a>œ[sÓˆ9쬩ެ8böËî”]ßöLgÉÝÁ›³è¾äEo‚ w1 \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/frame_26.png b/src-backup/includes/phpqrcode/cache/frame_26.png new file mode 100644 index 0000000000000000000000000000000000000000..f4a6b393861525908d76f29c6d8a3bfc2ba4f747 GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^l_1Q>3?$V}WIz&Z0X`wFK>Gjx|4VPqzYAoo^mK6y zshE?T@TZ^UpG-o+3Rkfo(&rC6=+gP1FW~!t-{pbx-~a#LB)q!sxL;FM;QZsxnjpG@X|Wc^3Whe7pc$LY4HynfX%(+id5E{n0v40R%_lqrDMPR_=K#Nbs1J=Z*FW%KHev5UH0bx zvhP3A?5`T{eKs|C?=(67e>XRlv;V$O{Jat(4^}wWvJV8GgET;O7Rx~3dn=g8x81kq zTBsYH(o>B~k(w6wdiUP<-~a4d_f^K|^b>jOg|*Ku{@y(>H?~&4sQTS6>xH+g>q>Tg S)BB(oTgzV+tiQ0S`YHfvkCqVt literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_27.png b/src-backup/includes/phpqrcode/cache/frame_27.png new file mode 100644 index 0000000000000000000000000000000000000000..8419ec2301e8c0278f9f86d97417d51d3df000bb GIT binary patch literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^wIIyM3?#Su{YwKY3Z=Ttv zWf2y7&zVY?&I!gH*lL(C<3L-FqWk?PvhJVcioOWu?Vls-VEE&Jg0;|sb157vj!F0I zoFJt8?3CA*9ZT0UM?PxZcc8vtF);OXk;vd$@?2>|KWW^(`l literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_28.dat b/src-backup/includes/phpqrcode/cache/frame_28.dat new file mode 100644 index 0000000000000000000000000000000000000000..8cbaa1961bed61c3d774192448857480eb49762f GIT binary patch literal 318 zcmb=p^>&UUU$cUMYi#vvHNCX5BIcc(ch)S(P&rt#xF_>o`BhIHdwqxJ`pXR0ab3O; zyhvzU>thM$uzdDevN_u7>@yw8*(S-Z(T=tZ`1|rey6L^W%k_%NF5F|Ui=6h%{9e%d zZ;qDSdF$l&FG(-^99&vHr#0ZpbjM5kK3J?R3cg=E!9=w8_VG%C;KB!IWDhW~88k5R zBz#a~TYLY*^54yi?c%-~`hWLu-)r%Km;K+Pv$J34CnoIU-@%{2z$^h(euDc6>nEnl zMr%QcZlKHrafo2K5)VwFf<8p>oeNCgzsZd&I##GMUwz`}E2+Yy_3mfghfV%>+;#2K w_7?4#@$=nu@tm|;Z8o*f=bqOl7=Ny{aÌÏ…ãþñŽÄRõ-r­“÷n.ïꯋ\®T¿ü:Ó*)|)°À ,°À ,þÑâêóåéx_ã¬}:^R„ƒUoÉ¢‰uÁ~ÁÞ‰X`XÐÐÐа_`X`XÐÐа_`X`XÐÐÐаwbX`¿¥PUõö)DÔÞ"cÈ{‹zçÎõ3ê›é<}¸ó¡^?b÷mÿÎÂìžƒíº°»óaûŽ´’Âê.] +³{Q6uáT,9 \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/frame_29.png b/src-backup/includes/phpqrcode/cache/frame_29.png new file mode 100644 index 0000000000000000000000000000000000000000..ffe072c868268ea77f05f71c17088021d549090d GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^tsuP;BJn$?U}wS}0TXykDcgTe~DWM4fn*mjQ literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_3.dat b/src-backup/includes/phpqrcode/cache/frame_3.dat new file mode 100644 index 0000000..188d531 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/frame_3.dat @@ -0,0 +1 @@ +xÚí“Á À E{vë&  à&°Y+¢b¤öÐkŸ'yù‘¤¿ÌÁa :äÀTXlÞ¶$W+Óvû®îœ¢9}gRæ¬@H0YPB½ÆÃEmÚÚ?ûœÍ±ísœÖ"bµìt2cnÖé†É:½ﺭë;¿Y§“ÃzÿQã«7¿Ô \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/frame_3.png b/src-backup/includes/phpqrcode/cache/frame_3.png new file mode 100644 index 0000000000000000000000000000000000000000..945ee7cb993022c3ba0081cdd6b833b92395b30c GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^vLMXJ3?y@6zxn_vwg8_HS0MfW|No^o=iddgJUm?- zLn`JZC;a)}-nj7F|NHzr>;C`eQV>iqJa$2VtqrL1f5H!Lr4wnjD-wRh|KHox`0@XB rt_3F@rfGYe5mn(<%W`B5%F}Pb9F^HI>YU!D_xBYq^}BRWJ#p5u$@O~+U60g$ z^ZZ%%C&E6_>--Dp^Lw@H{+B%qvQk^Qjp5k3r)$sId8T^L{8KD*Wwpx3yDA4+gnbMS zvP`Zw$-FB!Z`b@c+Rxs&eZ4X_H(t}zN!in)_Pe(B-kBwv{Vn`0k`1A%fm#-_F9E_Q zHV6?QtI7cc&w)*Z5ts^pmI@a>n)4-LQd5VAxSF@+|0}%z9_8)t4X9Z8-TGsS+L_O` o3*N2iKjl*T?_}Zp7w1|m>#S{6FV2w-Q4O5Cykv#>|8j$;0GhIr$^ZZW literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_30.png b/src-backup/includes/phpqrcode/cache/frame_30.png new file mode 100644 index 0000000000000000000000000000000000000000..75dbddd2416814ef91b71363c859c3dbe86f0802 GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^ogmD}3?!9ab#?(Mwg8_HS0MfW|No^o=iddgws^WY zhE&XXJ8dKHAp-$deb!SFYn&!CY6Q4UH4Jk7sONJ?V2XzJ1%+7_{OTQ#YUCIa<5O*I z@1FcVdoow(KLw+VEhS36DYCp#b}QPnZQP#yZF5>L_wIw#N8!&ZL32x5J2SZFRNT#W zJ+d{@@YEHq?4aMP=C-7+TKmm!p0e&81)Cc7+)G|xes$W5z3%q9Wf`gZcFvkf-|8dM zyYVæ«·ù§:ñÒÒÄAš8üý-+mTíÎÎbl°Ál°ÁlèštMº&]“³l°Ál°Áº&]“®I×ä¼Ál°Ál°Áº&]“®Éyƒ 6Ø`ƒ 6Ø`ƒÍÝi¬uy´ØXWòè±Éi¬²\t†ýz•—Š>•.î”z¾kÊß t²¿7©ß7òwJõÏ”¶4Òw‘ÒˆßÓÖÍ85‰ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/frame_31.png b/src-backup/includes/phpqrcode/cache/frame_31.png new file mode 100644 index 0000000000000000000000000000000000000000..b14d1fa267f229a5b21beb06401aaea3c7ee4673 GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^y&%lU3?w&9$bJT-*aCb)T!Hle|NocXoPQU{+Ue=y z7*a9k?X-=&hYSQ<^+j{d5~R!+0*%=60@{+AM5auc(!n|5PK2l6>q3RVA30i5E;U78 zzm!b-J6oUkrH>MO^Sih(w%FVJC(3=iBOLgbf7_Y;qQm^gYNmAkvubmKsBNb!r<>aC-Pn**9g*ßš?aÊOƒ¿k±L_£<[c—ñ¶ï>Êc˘õuÔLIäÕ%Â#Œ0Â#Œ0Â#ŒÞotÑ¢šõµ}ÅÜ4Ífv_)‰ÂE¢pú¬h5R·88³1Â#Œ0Â#Œ0¢ÓÒié´tZÎ#Œ0Â#Œ0Â#Œ0¢ÓÒié´tZÎ#Œ0Â#Œ0Â#Œ0¢ÓÒié´tZÎlŒ0Â#Œ0£÷9q"¢ÉHÜœH™Qþµï"ÛÕL5}-ÝÜY×¾Óê¸kì`¤â>¶z鸳®þÖ4&Òp÷á!‘Šû!«ù`¿:5 \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/frame_32.png b/src-backup/includes/phpqrcode/cache/frame_32.png new file mode 100644 index 0000000000000000000000000000000000000000..58d42db3c5b755228c7565cdf8128438559cfe1b GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^6G51f8A$#VJCOjS*aCb)T!Hle|NocXoPQU{+U@D$ z7*a9k?X-=&hYSQ<^`{N~#na9iwuURu!V?k}}KG;`at7keZ6HBO!j zPFw%CYT8codjH_FpLqjK{?_pC(kM^0-qBFEG_3wrT<*O&_g>F?-&noh_CE9X8vcLx zZ-?L5c<5S4(d*MS%jL4aFL*KcmFQoSBb$x~rEe4WKl3d;RlhCaH-pl}T98i}JYD@< J);T3K0RZV1Z(9HW literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_33.dat b/src-backup/includes/phpqrcode/cache/frame_33.dat new file mode 100644 index 0000000..a261375 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/frame_33.dat @@ -0,0 +1,14 @@ +xÚíÜAƒ …a×Þº‰‹™Ü@n7+*L++ÓæŸ®óò‰ÌbbÜ*LCï‘°‡‰c k™H¥rš”j•²J5Yíi~0•_«òŒû×TÊTõ}å—e©>ýö5‘b_åwÐÍŸ?¿¤ßìæ§ÖÜù†\ý­RaÆi+7õßW©¦\ãþwLUNåL¦Â ++¬°Â ++¬°Âêÿ­jßÒO·ŸkcëÞñôç\Ë©|%•o<á‹k–­Lî+Î+Îv¬°Â ++¬°Â ++¬°ÂŠ>}ú ô8¯°Â ++¬°Â ++¬°Â ++ú ôè3Ðgà¼Â ++¬°Â ++¬°Â ++¬è3Ðg Ï@Ÿó ++¬°Â ++¬°Â ++¬°:R‰¨ªX³ÚB‰9«”IÔ=çkÞ±o/SwçØ˜™Ù¯Ï`g¶áÅÊÌÈr_Ù™™Y¾ƒVSY™ÅzIefnmQoz >á \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/frame_33.png b/src-backup/includes/phpqrcode/cache/frame_33.png new file mode 100644 index 0000000000000000000000000000000000000000..924c728e0aa0b3c22b7537d833d53f072a923640 GIT binary patch literal 253 zcmV7LUZoG!D=_b+G>~XohCiGYUA3?`$qlQw=oFH)|?GM%W=ZP z?o-WP`{JCI-1j+kVd;lds9Q_l#)_e*e%!H*n2YxP(|eQ4yd?KKF7uLH<|VmLxpSZ$ z1MOt{Gd*JG7)eOIdQ#d>d~xt^_>>*JiBA`^i7E%w2i00000NkvXXu0mjf DAwYG& literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_34.dat b/src-backup/includes/phpqrcode/cache/frame_34.dat new file mode 100644 index 0000000000000000000000000000000000000000..7ceb0259d4a6f14ad6d9e5d76eb87c07b034c711 GIT binary patch literal 331 zcmb=p_4bZoU$cP#>xCNzb)OE=JWTSu!=w6LqU*^gyy-W?Z;@;Fg>L`1=l-EkZ?iVvV?C0_X=i2_ zCW9G)ljhbgx7l(nwvgX`%e6^Q_5bh5(A^bzqxMK4)(Kt#i%i{@a^9b964fc@euQ;PW=~uiO$9&bgnPb zQZeW4^o^WMjsmX#U8f~jtBEBjv`tG?seT)Aq*3=qXXlI+_hnO3Z`!AqXdKG<^zh@1 z$2a89EJ`kxb5FQ`=(boyS7nhxxW0w*`IRj*&5GUQE?a*(lXrI>tApXq$M?>eXvpg? zJ7Dnt${M{rF8!;dRI6f&a!y#e`IJAq{!imf{LG6>4VD`%_D=Lmb(?#S3j3^P65% literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_35.dat b/src-backup/includes/phpqrcode/cache/frame_35.dat new file mode 100644 index 0000000000000000000000000000000000000000..56bc3e28ee83b24767b00391773560ca842f0b44 GIT binary patch literal 342 zcmb=p_4e+@yk-Lt)(dC;l&Z2-bJsJ}Gu4L)&k?(_Yz24S#B<8tYk0!l*-FIIBjt?0 zZ`YVyJa2n|_x3Zdk9bXgHfz^qygTh2XweY|A-_q!&2k4t`5 zdHt-uf3>=7$NxRcHpcK?YhPbowodr?x--Th*X`3@Jbts=sCI7N@2dT+b7tjn%l`^M?L^?B>}TrgGEWxv+gtv>&1 z^SpAXK9B(~H-km1?tx8$7`Ys%2q^kG_8{C6zxh|wzed(x`wSQ9yIX(x>6}yP9JAN? zaAi*~^7>i6``g|}l``+#Pxx*7Q>a$?+fMp@&Wq;Q9mQL}|JJ)V^U3dOv#MPg=?~>E Qwf>fGyj#QM-^sTe06Gf6oB#j- literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_35.png b/src-backup/includes/phpqrcode/cache/frame_35.png new file mode 100644 index 0000000000000000000000000000000000000000..d29806c6037dea38b05d8211a0a45c2e0c1ff1d0 GIT binary patch literal 243 zcmV69g+8T9FaOlD5lXr@5A{4g21 z`3F-KR1%=7ED2boeU%@kIrD;Vui5n8>omRhI!*7rPSbn8llib6 tcmDZ{$vZ*}#x^0hn~*mYfxOG)^abWznpY06{Y3x(002ovPDHLkV1fp`ZrcC= literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_36.dat b/src-backup/includes/phpqrcode/cache/frame_36.dat new file mode 100644 index 0000000000000000000000000000000000000000..282c60d23bca6a7c3ac2c3da0744992f3415d8d0 GIT binary patch literal 370 zcmb=p_4ck~UbBG!>xDHtOI5|b@#Qg?H_pDw$;Z^XB}m*L@cxD_oki=_lM}=$=E<9G z-R?29c-FLpVq^dBT+!v^g&NTH_@wd)yXEcGyBzK-j`OqvsA7=ytvYW@9>9b z_WqKQLf0xI)<4~MTkdf{-#UAXb5bv_XIHKgJ-y+Ial~c2Rr$$h4+rJ0P5XKC?x8T> z8}0rlCMY_$@kss?KYU%i=k@&DYZIUS(0u#r`Qg$fYBKRcefj5YDxU=N96s;-dSNve zNU2c@M9){5FJQQ)9U&%Zbfx$L7;cb*sRL;UIPVCC2diGpI|Q*2B5lhKfv>@?fNH7t zol$&B)74DpqnE3hkLL7O>+2T(ei-}yr{??h8{VJ({BR!k#40|+{iXYjd3MGhD3d#O cr#P`%x8CVcM|J%hp|(5rsloS;^$2?d0KeI-=l}o! literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_36.png b/src-backup/includes/phpqrcode/cache/frame_36.png new file mode 100644 index 0000000000000000000000000000000000000000..96ecb421354bec386b535fe1e2cf4fd753142013 GIT binary patch literal 272 zcmV+r0q_2aP)#C@Z9i(!~1M zrir*qV+k70-90^>68kqFj-O|}12;kA2%H6FtI=5KdLSEeASYjjHt&ri*^^Il@nz@$ zcM<0VP`V6=a&MyY!``k&|IeMgxU(i;@#22_fZ4~6ypj)cPBagDuD;9QQOl0fagwX_p(bdJihERcvP@-vOY{Y; W&Oa>B-?9<_0000W;+CoZ{7==byZrmTWaR#jx=*j}d9!=n z?jLue-7XczO-tXCTNhVr9_xF%CU42z`5zaC*qmOutsr!7Nc8d9(}S-rUG+8hGgqu? z>hF#zI+2@FPEJzwo~AQDvGQO3&(Hs_exLZN>iNf?wdd`Eg1#-+{C#?NzFg&`r^?Tk ze!Y~>4^#=)^407M7_OO)5CclC+`bSD6Zb-m25VS)uMGyjf-Qs@QzZ?7*Sz=JBAN4V zs?k%Ey^Est6oX4n+Z;cW+cNi&e)WmBGn&?4`2F$Yr!zA>_V(^buig{cW~=_xLjUnR b%i@}2^Cua-iuB0WJUmakbVYvd1M%+wXsyHf literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_37.png b/src-backup/includes/phpqrcode/cache/frame_37.png new file mode 100644 index 0000000000000000000000000000000000000000..fcc51627d75b1195d79e915e5ba5a26accff30b6 GIT binary patch literal 279 zcmV+y0qFjTP)Q+l9uWqZrGW15EmmL1Za)FnMD)vS~08#pCh dPbukz=wHCg@a-IQ|2+Tz002ovPDHLkV1gG4c{u<8 literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_38.dat b/src-backup/includes/phpqrcode/cache/frame_38.dat new file mode 100644 index 0000000..71cf53e --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/frame_38.dat @@ -0,0 +1 @@ +xÚíÝAªƒ0ÐŽÝuÁA2«;ÐèÎkü(üg¾Ày•tp9Äï$Ëò™¹Dœ”ò¼\ºe^'tÒ-aIºŠFMšSškÂðIóŤÓ:7®¤|LúkŸNã8N7®œöi}ö‡×Ÿi,Ÿ[W†¿g®Ó´Ì°ë?3ô1÷i™¾N·}}=ÂOM:4“”)S¦L™2eÊ”)S¦L#$½ÿ ôÂJã­þÂJM:}ý]˜•ÖL›Ù§ÎSÿQL™2eÊ”)S¦L™2Õ¡èPt(:Šó”)S¦L™2eÊ”)S¦:ŠE‡¢Cqž2eÊ”)S¦L™2eÊ”©E‡¢CÑ¡8O™2eÊ”)S¦L™2eÊT‡¢CÑ¡èPœ§L™2eÊ”)S¦L™2Ý“¦”sJCIKÖÔ‚iÍ93ônº_Ñò ÿ¾¿ü¼“+R‡û®£“ièû£Žû4ö\Çg¿¥¤‘ïŽ;% }ßaÞnŽ£ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/frame_38.png b/src-backup/includes/phpqrcode/cache/frame_38.png new file mode 100644 index 0000000000000000000000000000000000000000..89238f3c5bd6d3fa6aea44d2037dfd3bc0a34723 GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^D?yl%8AxVH_vZj9wg8_HS0MfW|No^o=iddg&Um^w zhE&XXJKd1$kb{7$dT5{Gy(7n%mk6AeQJ$Kzej0N`L_}BkhKVNY?%zz+J@k*Y+f^`a z^_k}%XBzDPc}byOdLr}0>WR7QehE+CtzjSL!0mG&m*?>2?tA~Zcn+}6IBv0`eDmq~ zc}z}+JJ0WJ_POR~GP(Dkvz2Uh;m>QHUB{HvnxDHtOI5|b@#Qg?H_jFnQdbgP@~WvsW^bbC&dz=Fbh`ibKL2SI zT-|A9x%8!2QQou6xhFC&&-ym4$aD9pW82OKdqz6mnsRx4=J8U#egE%mowI%0@84xI zZ4W<8zrSnRI_rgRZWpP2x%=6e@AT!byU*{w{_FTmgQ=a_yU*CBT#j3w|M=bQ)LTYp z-zJx@O!B(5Z`GEZo10QkPt%RwHa}ta_dLm$f4^*>CH-=s6v(7v&e*fR{ ztx~zGZ*4yp{T!$et^>&Eoe;)fc50TK5C1au;(Jh&pbBm$WPVLpzUJk@F9}r!=o)#a zk*D#WWv<`r;O<;6&F5D_CzowJTRZ36gVgy2`}e(i{XD+qP1dt!Yu@B<2_N6LRd3?0 je}Av+{;~a+3#!$wOf&lxJI6os@crUlGxJ^MEBXTf`CjAm literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_39.png b/src-backup/includes/phpqrcode/cache/frame_39.png new file mode 100644 index 0000000000000000000000000000000000000000..1dc9cd1bc53a2e27ad5b61791c7a76cdab408123 GIT binary patch literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^YeATi8A$#}%mtDRYymzYu0Z<#|Nl#G&c6#}?e%nV z45^s&cKSvxCPM)i^QmwDPN{$JaQO_kPo;GYt#kKIo$zc&c3+{t4%5trR)KEM%_$W+ zC*PSQGk)DUdv52RwA;cz%>sV@oL27Om%5WD`n|Bh@=ZQB4@JyxmgML?8g}V+>Zb|( zXHzc5U$%Rcbzopr09yKW761SM literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_4.dat b/src-backup/includes/phpqrcode/cache/frame_4.dat new file mode 100644 index 0000000..67b30e8 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/frame_4.dat @@ -0,0 +1 @@ +xÚí”Á À E=»uÐ pجQ•ØCOMŸ'ÃË$ ³@à¨Ø3e–F©\FNXRyÉØ¾C{‰a8­Ræ Ńa2@ñ圉qküßÉH1ê(£ˆÅ`cç¦j³~Ë0ö¥¿ÃܨÖËÃØ¹nXÿGåÿÄ€ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/frame_4.png b/src-backup/includes/phpqrcode/cache/frame_4.png new file mode 100644 index 0000000000000000000000000000000000000000..b72f9e70d374741d1d4ec4537b7a379088325669 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^iXhC$3?y^40(5{BTYyi9E0F&G|NqjP^X~##UY;(F zAr*6y6aM`F&%o^b_W%Fyk`gih|L^bcaylaE>?|uG@sHV&`Ea~}XRw*|gxLT4_cSuT v*!F>Kf^¦ÀÚôã°<]ßÕÐëß³bZ«nã¥^A›öQ}[÷9^ª]«yþìnajM܇K̘1cÆŒ3f̘1ã¸Æ{ßW5}ç½{ÍÑ7lMßÒïÞšxÜI<¼áK½¨Æáαyl3f̘1cÆŒ3f̘1ã«Û»Ù»={·“αyl3f̘1cÆŒ3f̘1ã«Û»Ù»={·“αyl3f̘1cÆŒ3f̘1ã«Û»Ù»={·“αyl3f̘1cÆŒ3f̘1ã«Û»Ù»={·“αyl3f̘1cÆŒ3f̘ñ÷çœSÊ‘ŒÓ’7¥HÆKÞ¼g\ç¾âuõßÏ_ÿªr'4Ü[çÞ-Æ]›…qˆûL·ç8ƱÛY1q„»‹Ä!î—ÞÔ/(%û \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/frame_40.png b/src-backup/includes/phpqrcode/cache/frame_40.png new file mode 100644 index 0000000000000000000000000000000000000000..8034d862d60aed55180914d323aa4557f39c036f GIT binary patch literal 267 zcmV+m0rdWfP)xUy&%?@Zqe$Lt^IHF*f5Ycy_0y589U#OP zDOgy2<>WYTpYrhA^tGLJe{+Ghzs|!@a34iK>1DI|zE}TO_YMEQ{K#kcE&Gwr@LTpH zpW(OcM?S;hKGje=R>w-jeWqvU%KmI=|;a=Y2bm$Ju*=arXY8`~`*2(t2@u R+XVms002ovPDHLkV1jNhe*XXf literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_5.dat b/src-backup/includes/phpqrcode/cache/frame_5.dat new file mode 100644 index 0000000..d5dafe1 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/frame_5.dat @@ -0,0 +1 @@ +xÚí”1À E½u 7ЛÀÍZµ‡|N†—üD B0@R$l,-™>VKZ[<ýØÚz—qÆŽ¨ØYJ&ƒiåš‚‹ZyË:Y'ë¯YµÁVÿ&—e•RÄ"§sj©Ýrþö+Ëé‰ù.·MÆŽ»–Ó9ÓòzµsŽ”É, \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/frame_5.png b/src-backup/includes/phpqrcode/cache/frame_5.png new file mode 100644 index 0000000000000000000000000000000000000000..96b6494f35ba71741f72bc32599a359f5ff9798e GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^svykB3?%;tY;pinYymzYt|0FJ|4VPqzYAn}d%8G= zRLn_E`1AiiKeO}O|Nral4R$bjGKvT(os*D~I&|QJJV%|uAJ)mthyDc|{ILJu|LIo+o1yT37=P9COrj~W-G?9JF6VLpcd literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_6.png b/src-backup/includes/phpqrcode/cache/frame_6.png new file mode 100644 index 0000000000000000000000000000000000000000..05ca358b0ebc0c3a0b76df7bc0411af2d596f586 GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^njp-`3?wJ5o3s^3u?6^qxB}__|Nk$&IsYz@<>Tq% z7*a7OIpGgbjFGJ^N}+Uq<3Ul6SeNAsih33jb6-tP*oFY|>b2SQ8z)uR?vtd#dj@Cr|apornv1)El=m yfE)D&wC=s-ob2oKGnB!6a?|8|>$jotR__k)Tfb?1CbP75iyKQ(;+|ur1|Lo4=9^M0XYLiuS90INiM|3P! zl1w_Dw_=lP*>oFG#pgDRUYDi$t)1S^DCLO~UG_j|*#gebx3BZ+nH+yL4#Xe`MZ5Oaleo}by@B3DZ#Iau!Ks7Twck}KFFz0sl!D6kkmQ`t zEwPxAt7e4vK(tICs>9R+3CvUzZbGE0t`1I&>PRt0PIx4!4(e4n`AHE@7YTQ-GD-FT zU5Un`f|ct4S(0g==b;u6VVT$-+hayNZ>kV6cem$hSdySrt`hAq)&LF)(-K_0ARP&tIq1zdFuig-v-KQf|`xVm{I3hDX Dr=(<@ literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_8.png b/src-backup/includes/phpqrcode/cache/frame_8.png new file mode 100644 index 0000000000000000000000000000000000000000..db1f1877ab3aa0f221156a6c8ab461cf548b7c22 GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^h9Jzy3?w~+F2@5Ywg8_HS0MfW|No^o=iddg8a-Vc zLn`KMov@L&*+9hQeCRTV$kt=bOB^&Mo4IaE8~7hfU-_hp z>GjwD9k;ZU{x$DC`?c>k>SwyYUwnVQ%-n^a7#d|n|4z96z#8Zn22WQ%mvv4FO#qqh BQ^o)Q literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_9.dat b/src-backup/includes/phpqrcode/cache/frame_9.dat new file mode 100644 index 0000000000000000000000000000000000000000..d79295ee0f93bf3b101c220b436cc0d302b3dd72 GIT binary patch literal 206 zcmV;<05Sh~+U=G>4ul{KMO}02Nm#TyxdGe+ZZ;LFff1oFD-%8|o4)*%Sp6YHdA;?7 z06sMb75pI)g+!%pq7Eks1(Ax~0~7*wDR<~T*G1Lma@N`!#dGl;n!P;E()p>G>kd7u z??pPBm5wsHKNm@}RC?UEAu(m9sO7c1-s)A`rDjb%?QOHhl&f?!YX5jm&9&Z*<@HW4 z${vU~>O~9yjCv75*xjqWU*~WAGqlU$A+xo=8}e*Zc!_gVK9@YR<##wsNwa7{iF0qJ IFSFt|>Yb-#$p8QV literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/frame_9.png b/src-backup/includes/phpqrcode/cache/frame_9.png new file mode 100644 index 0000000000000000000000000000000000000000..74ddf08da2f671de67f1fed645afe705662e8424 GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^rXbA73?y%B7#ag9wg8_HS0MfW|No^o=iddgYCK&W zLn`L%ov@L!AwagA1{7>@m-%iy`qAdx51;UBica)=ne)?S3j3^P6=xt5c>OY+~gW)7igeMcUJuTaR$o&p-O;5+hmJG|D H^z#4!b%aZc literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_0/mask_105_0.dat b/src-backup/includes/phpqrcode/cache/mask_0/mask_105_0.dat new file mode 100644 index 0000000000000000000000000000000000000000..97e9e5dfff667572d9451add45a3a5e05c157625 GIT binary patch literal 162 zcmb=p_4bw{SAzlr%YohNFaEDz7aTYx-~rdw7iUi!E!oMQ9qZ10=B~!Y1!Xh8FbC`Z zyZK8u`25eDzn4VhGJ|J-om&>Dy5;$~&1-gk)KCM0Wh*o*?Q>r*t&Z>8Q#|w7j5+Ec zQ8l$%fAdS<5uE#%zyDF50RnO9r|hm-%}`_g>f0!1_?Y+V!H}75vy!UUpR@9hH`4Vh H(~brJDN;^O literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_0/mask_109_0.dat b/src-backup/includes/phpqrcode/cache/mask_0/mask_109_0.dat new file mode 100644 index 0000000..eadf83a --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_0/mask_109_0.dat @@ -0,0 +1,2 @@ +xÚíÚ= +€0 н§iï9'Åb‡$ ¾tËýáÚû^#iª¥Ëi?³ÅôÛbúK[AUØF徯µÄ³x]mŸ]2Ž-Ä–KŽ~ ÏVw}¶X›ûÆÆÆÆÆÆÆ&O²É“Þ666666yRž”'½%lllll/´åhœl…Ãîm ¹¤êádël™¶´3Ù+ïÛmÍ« \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_0/mask_113_0.dat b/src-backup/includes/phpqrcode/cache/mask_0/mask_113_0.dat new file mode 100644 index 0000000..5eb7f5d --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_0/mask_113_0.dat @@ -0,0 +1,2 @@ +xÚíÚ; +…0Ð>«Iö¿9+Eñƒ‚sá=ϤL1Ì„[¤÷¹FáZU‹4‡?i<ÿç;7çòç;‡ÆP¥Œ#ýW-[ñݯ6÷µddddddüc",;í"¼Ÿskæ‘‘‘‘‘‘‘‘Q&—Éerw######£L.¯Êäæ‘‘‘‘‘‘‘±Ð˜y¼1†^˲\òîÆØ3Æâ³ÚÓóøÏÆ ‘Ñv \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_0/mask_117_0.dat b/src-backup/includes/phpqrcode/cache/mask_0/mask_117_0.dat new file mode 100644 index 0000000..781c7f8 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_0/mask_117_0.dat @@ -0,0 +1,2 @@ +xÚíÚA +„0 Ð}OÓÞÿr³R,#3öñ¥Ë,âÃþ¢½o5ŸCµØÐq:õõÖ;;¬wvN­ÁJZGÅ=Œm»û}Úö ѱ¬¬¬¬¬¬¬¬µ¦2âÞi‹RïïkÆj_YYYYYYYYeÙ_ö·¯¬¬¬¬¬¬¬¬²¿ì/ûÛWVVVVVVÖkîáýd-úϺ,#¦ßÀOÖÎZc]|‡{ž¾Áúˆ­$™ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_0/mask_121_0.dat b/src-backup/includes/phpqrcode/cache/mask_0/mask_121_0.dat new file mode 100644 index 0000000..68810c3 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_0/mask_121_0.dat @@ -0,0 +1 @@ +xÚíÛ1„ ОÓÀý/·•w YMüSø Ä8>2SÐûÖF O­EÓÈÌÓc«W\ûÛ¼š‹{c§æpK›GÕžB·ÐšþímûŽxhfffffffæ/s2ÛÇÚ2W|*÷d®1ÛÏÌÌÌÌÌÌÌÌÌê*5³ºÊÆÌÌÌÌÌÌÌ̬®RW©«œaÌÌÌÌÌÌÌÌsöòËÁ\xm~8ß®¸ƒr0wæjsdm÷ªýü&óâyÙ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_0/mask_125_0.dat b/src-backup/includes/phpqrcode/cache/mask_0/mask_125_0.dat new file mode 100644 index 0000000..2c73ef1 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_0/mask_125_0.dat @@ -0,0 +1,2 @@ +xÚíÛA +€ н§Ñû_®•‘TH`3AO—L4ü kí£ÍÃ(áÍÛewö›GWÖÙ××.í #ÃÞ2¿û¡} \ëçYú»¤´gggggggggg_d>Ïïµòj^™ÕØsíö;;;;;;;;;;»'ÇÉqö;;;;;;;;;»'˰ËqþuììììììììµÇ_Pì‰Íçö—ÏóYwÄ{eÿš=dÍ×ÌýþGû/ý“¸ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_0/mask_129_0.dat b/src-backup/includes/phpqrcode/cache/mask_0/mask_129_0.dat new file mode 100644 index 0000000..812ee8a --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_0/mask_129_0.dat @@ -0,0 +1,2 @@ +xÚíÛ1 +Å ÀÞÓèý/—*Ÿ„DøEØ'ÉhgõtÙ-ì}_£pV‹· \"Ìb=sþ—ÁÌå™ó[ƒÐJŒô=8DhÅoàºÛž' 0XÐ ÑüÎÛ´©è‘¬e 0`À€ ˜ôÊ Ì j" 0`ÀÀ¼ Wf`^P0`À€æ½2ó‚šÈ€ ¼Ò óÉôd07(ì“Y‹/XLÿGb…yÁ"êpT \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_0/mask_137_0.dat b/src-backup/includes/phpqrcode/cache/mask_0/mask_137_0.dat new file mode 100644 index 0000000..f6d993b --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_0/mask_137_0.dat @@ -0,0 +1 @@ +xÚíÜ1„ ОÓÀý/·•+FÉZ?®JšÉ Læ7Ôº¬ØÝ*ÑBÚa%L~šŒË»òä”ÉØéÊ“C“ðJ›´YîIWJ ½™ý.K]ñR˜0a„ “›$ç“ïINTwÎlLža¢Ÿè±L˜0a„ &Ld@PÔO˜0a„ &L˜0‘e@P?a„ &L˜0aÂD”e@ý„ &L˜0aÂäÏM²ŸIlL&)dl˜ígøÃacR™<É$övê,ý„ɺ?U2ç] \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_0/mask_141_0.dat b/src-backup/includes/phpqrcode/cache/mask_0/mask_141_0.dat new file mode 100644 index 0000000..8c685c8 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_0/mask_141_0.dat @@ -0,0 +1,2 @@ +xÚíÜ= +€0 н§iï9'EÑúÖDx͘%«Iö¿9+EñÇ{ˆõ$åm†ƒ^˜&µŽ§u¼³S"µÍDŒþ6ÚŸ]9ùÉè8ìU“M£“bÔÒ¾£Y¤Òù[ß2拉Ĉ#FŒ1bĈ£Ï%ôµiRNšæ½–Ñ³ì#;›#FŒ1bĈ‘N«¯1Òií#FŒ1bĈ#FŒtZ}‘Nk1bĈ#FŒ1b¤ÓêkŒtZ;›#FŒ1bÄèõFV-ŒÂuè"IoD-Œ*£7uû×jÚ>b´MV“+ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_0/mask_149_0.dat b/src-backup/includes/phpqrcode/cache/mask_0/mask_149_0.dat new file mode 100644 index 0000000..d258350 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_0/mask_149_0.dat @@ -0,0 +1,3 @@ +xÚíÜA +€ н§Ñû_®MEQXPà§ž.Ý|94³°ÖeµÁ{³JL¨všŠÕ#«^Ü÷Ïn[õ ß?;µ +ZIV-ñ»ÚÄ*wï¸Ë’1*+V¬X±bÅŠ«ßX¥ü·¯g¥ÛwŒèqX}ÇJ½RÛY±bÅŠ+V¬X±beΠwfeΠ^±bÅŠ+V¬X±bÅÊœAïÌÊœA½bÅŠ+V¬X±bÅŠ•9ƒÞÙœÁœA½bÅŠ+V¬X±bÅŠÕl•ó0ÞÎ*0Tßj`?˜öÝΪ²ú¢Õð;Xë«ë=zZr* \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_0/mask_153_0.dat b/src-backup/includes/phpqrcode/cache/mask_0/mask_153_0.dat new file mode 100644 index 0000000..fc79e9e --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_0/mask_153_0.dat @@ -0,0 +1 @@ +xÚíÜ1€ ÐÓÀý/礑h¢&F¾ú`ìÒ¼@I;Pë¼ZÀ^­•XÛÍŒÙmfÏÆ.™=Û5 [if-õœ­R+!wr»Ëœg\j̘1cÆŒ3f̘1cf–Ôo.±2¬?Š1ûž™zæ `ÆŒ3f̘1cÆŒ™¹†™¹†zÆŒ3f̘1cÆŒ3fæztfæê3f̘1cÆŒ3f̘™k˜k03×ð0cÆŒ3f̘1cö³¬Ï9;³ÐÄŽÍö›‰`vf•Ù̆ßÍšZϘß¶W9 \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_0/mask_157_0.dat b/src-backup/includes/phpqrcode/cache/mask_0/mask_157_0.dat new file mode 100644 index 0000000..ad749f3 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_0/mask_157_0.dat @@ -0,0 +1,2 @@ +xÚíÜA +€ н§Ñû_®•QRù©§»Y ùkí«…ìÍ*q͵ÓîØ=j7§~ÙnNýÔ.p%Úµäs·i¯ÝÕã.½×ÈöرcÇŽ;vìØ±{Ù.-W¬õ2={êì¾mgÞy+رcÇŽ;vìØÉ³2;yÖ¼cÇŽ;vìØ±cÇNž•ɨɳæ;vìØ±cÇŽ;v2™<ËNžõV°cÇŽ;vìØ±“ge2vò¬yÇŽ;vìØ±cÇî¦]ÞÂ;»àæÆv¹"õÞ]e÷'»˜;[“ç»û{¾|Aµ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_0/mask_161_0.dat b/src-backup/includes/phpqrcode/cache/mask_0/mask_161_0.dat new file mode 100644 index 0000000000000000000000000000000000000000..4bdc5fdd3fd5b8d7ec11a534cb9a2cb1f58b87f9 GIT binary patch literal 241 zcmb=p_4bYxI3`FaC~S7rJnYfY8T-%e~DHFIIc5zv^p@ZbtcP7qJ_1+9^La zKHT%7-Y-t#T{NC)k=gd2o zjNY~Ld^ftnUmGj|mU3?60jkj`HqbYoV)>#S!~tpmi%zkeFHURTr~Ks{-QatqS5&9ib(yR@{gMnQ+Lcye6Ty_ Q@^8h%UuzjeUK>3D05K(RC;$Ke literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_0/mask_165_0.dat b/src-backup/includes/phpqrcode/cache/mask_0/mask_165_0.dat new file mode 100644 index 0000000..3a17a05 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_0/mask_165_0.dat @@ -0,0 +1,2 @@ +xÚíÝ; +€0À>§Iî9+ÅàDyÁIÊ4Ë ÷5Ö:¯¶W«ÄÙv«dù¢åqñߜܴ<þæd×2x%[¶žËU™%ðÝÞî2×]&K–,Y²dÉ’%Ë¡,S¿Õ—“r2ydÌ=,ÿk©_º{X²dÉ’%K–,Y²d)Û0³”mè—,Y²dÉ’%K–,Y²d)Û0³”mè—,Y²dÉ’%K–,Y²”m˜Çe,eú%K–,Y²dÉ’%K–,eæq–² ýÒÝÃ’%K–,Y²dÉ’å…eî:ËŠ<³Œš!Óÿ¡ÐYV–,ßñ:B¿dù|O¨$*# \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_0/mask_169_0.dat b/src-backup/includes/phpqrcode/cache/mask_0/mask_169_0.dat new file mode 100644 index 0000000..c4787d9 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_0/mask_169_0.dat @@ -0,0 +1,2 @@ +xÚíÝ1 +€0À>¯Iþÿ9EQÑ=˜¤Ls æä¶IïË{³Zt¡ã´R¦™þ}òÀôï“SÓð•n:ª|§›R[è?î¶Ô_*S¦L™2eÊ”)S¦L™™&ϦëI šê¯O˜2ÕOý£˜2eÊ”)S¦L™2e*C1ïËP˜ÊPôS¦L™2eÊ”)S¦L™ÊPÌû2¦2ý”)S¦L™2eÊ”)S¦Le(æ}¦2ý”)S¦L™2eÊ”)S¦Le(æ}¦2ý”)S¦L™2eÊ”)S¦³iöc7;Ó"…Þ™FͦÞÙ™v¦L Üý^¥Ÿ2}oOäß'r \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_0/mask_173_0.dat b/src-backup/includes/phpqrcode/cache/mask_0/mask_173_0.dat new file mode 100644 index 0000000..5ef85e7 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_0/mask_173_0.dat @@ -0,0 +1 @@ +xÚíÝ1ƒ0ÀÞ¯±ÿÿ¹T ¥ˆ¬[4véæ2ŠØÆ½ok݇ÕÊ;¦Ó²]fûôÖžýdûä½ölj°lGÒÿö0n+œß»m³GŒË–-[¶lÙ²eû"Ûêï·ûY»}o¯öíÀ–íÕVÞÊ[¶lÙ²eË–-[¶lÙ²e«ÓÕ°ÕƒÉ[Ï2¶lÙ²eË–-[¶lÙ²e«ÓÕ°ÕƒÉ[Ï2¶lÙ²eË–-[¶lÙ²e«ÓÕ°ÕƒÉ[¶lÙ²eË–-[¶lÙ²eËV¦«a«“·lÙ²eË–-[¶lÙ²ef[ÿB°“mа÷¶Eû„”;¶N¶-ÛœT¸/r’·lÿ¿?ØÔ*Ñ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_0/mask_177_0.dat b/src-backup/includes/phpqrcode/cache/mask_0/mask_177_0.dat new file mode 100644 index 0000000..78a26a7 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_0/mask_177_0.dat @@ -0,0 +1,2 @@ +xÚíÝ1 +…0Ð>§Iî9+?вØèß—”iÖ‡ dšÌ¹¯ÕxÖˆxÝNÌø/ÆÕ§|{öظ²ÿöìÖ8d¥¯´ÿø0òhž×=öùcFf̘1cÆŒ3f̘q¼qÂ=ïw6Ê;l·»4cÆ•±<–ÇŒ3f̘1cÆŒ3fÌXï¦Ò»1Ö»ÉcÆŒ3f̘1cÆŒ3fÌXï¦b¬w“ÇŒ3f̘1cÆŒ3f̘±ÞM'ÄXï&å1cÆŒ3f̘1cÆŒ3Ö»é„ônŒõnò˜1cÆŒ3f̘1cÆŒÃ3U<‡ \7í+’Þ(<OÆŒŸ·ÎŠ™–ÇŒßÛÕä4@ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_0/mask_21_0.dat b/src-backup/includes/phpqrcode/cache/mask_0/mask_21_0.dat new file mode 100644 index 0000000000000000000000000000000000000000..368c9941fd09f695d58934eb0de062a54fd74c02 GIT binary patch literal 48 zcmb=pWo*#E=&aDfq?gm=vB)I2o5jQUx&ZeRqn1^Uf@;3Hn^Ft5vfXH5Z;oPEP!;?T E0GJaIuK)l5 literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_0/mask_25_0.dat b/src-backup/includes/phpqrcode/cache/mask_0/mask_25_0.dat new file mode 100644 index 0000000000000000000000000000000000000000..e4a5b6d8afc4516779d7d246ebfcf7ced36029d4 GIT binary patch literal 57 zcmV-90LK4#+A}bK0YfN+0xnzV>=60G~7^dI6e8pX8D%7wG^1 literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_0/mask_33_0.dat b/src-backup/includes/phpqrcode/cache/mask_0/mask_33_0.dat new file mode 100644 index 0000000000000000000000000000000000000000..2ec712a7adcd6edf1ce2c785adf00e3ca7c5b729 GIT binary patch literal 62 zcmV-E0Kxxw+A}bK0Yfwh1zdy_AgLHMX5awSafcxR$OTi6Q^}|q!_EwNn!%sOz-Hh| UV{|eD?iT|>N~mE50E^|%1m89on*aa+ literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_0/mask_37_0.dat b/src-backup/includes/phpqrcode/cache/mask_0/mask_37_0.dat new file mode 100644 index 0000000000000000000000000000000000000000..1588cfce1318608538dbde89fa7f04d05ff574e4 GIT binary patch literal 65 zcmV-H0KWft+A}bK0YfYh3b=?-grsWFnuP~Y*IkB0KrWabyvjz+8Z~Q>n+4Agg!2&C XEPQ!r0L+5>(SR6b)HDkKY5W93c-0$f literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_0/mask_41_0.dat b/src-backup/includes/phpqrcode/cache/mask_0/mask_41_0.dat new file mode 100644 index 0000000000000000000000000000000000000000..e369027e3831ce2d9ac858eaa2cdfa5e5498df07 GIT binary patch literal 68 zcmV-K0K5Nq+A}bK0Ye-R3b=?>h@^7Jm`MQ8#+`;lLN1s-f=Wlt95r*)%t2))yeuHD a3;~--s0Çæ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_0/mask_53_0.dat b/src-backup/includes/phpqrcode/cache/mask_0/mask_53_0.dat new file mode 100644 index 0000000..572d279 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_0/mask_53_0.dat @@ -0,0 +1,2 @@ +xÚíÖK +@!й«Ñýo®QÑϺ:(m&ܯžs-¹¬®É6õÑZ{¥m4Y†²Xâù®.FÀÙ­‹ê¦XZi·Ðùj=:έ֋bå¿‘VH 8 –#¤[—ù²¾‹ãYвç¾^XÔ÷e \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_0/mask_57_0.dat b/src-backup/includes/phpqrcode/cache/mask_0/mask_57_0.dat new file mode 100644 index 0000000..ea81e6d --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_0/mask_57_0.dat @@ -0,0 +1,4 @@ +xÚíÖA +À À{^“üÿs=YLÕš ( +ou¨– j) ¬ª +Z7y„ÙëÍñv,Ô´ìwVQ ži»¤ìGiÒ¤¹ÅDfÂÛ•ÉÄwo4ùѤ¹ÐÄoÎLÿÌéLȼÁœ©·›Á³Õì}î4 hå \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_0/mask_61_0.dat b/src-backup/includes/phpqrcode/cache/mask_0/mask_61_0.dat new file mode 100644 index 0000000000000000000000000000000000000000..93d2444d8249bf3c534223bc1bb339d54f7af957 GIT binary patch literal 119 zcmV--0Eqv1+U?dk3IHJt1<*dHN$!6+E5(hNrI=BE>;m7%=n!PCCC1eixx=ze|IFU^ z&9=7bWCto@OXj<~I62OGT~zl9#bLvS4O_9jbFKC1I6Jle?Kb{3*sx(Qw*P@W*om-i Z8|GT{jXc==mTf+B&fNDGb^()u!gb2GK0EGW|+U?gt4!|G?1i(A5f&YK5CmXS?mE~YV7mp;Hi4u*ftt_y*5-7lK6FzHr z>I4k)=)nLMYOw4+bP*CfgX@x(2S?CA0}V9%z<}JÖž!ÅŠ+V¬å¬ª½õöí÷.Ýõ±2¯X±bÅŠ•ÿ¬Ì+V¬X±–²ê.ökBèÞz±·ÔwðƒÕ±¦Ì€gÌkë¡YZý \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_0/mask_89_0.dat b/src-backup/includes/phpqrcode/cache/mask_0/mask_89_0.dat new file mode 100644 index 0000000..aaa4c52 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_0/mask_89_0.dat @@ -0,0 +1 @@ +xÚíÙ1€ …á½§iï9'Œˆ€Ñ×ýËHl?Lšà^"ë&M—™?bî—qÃÜ?˸äÉ,µ9²þó!µ‰z¢]VêÈScÆŒ3æ_š•÷à¾cÓé!î`nÍô3f̘1cÆÌŒ„™ 3f̘1/fÖ>.Uæ¤ÄcóË»;ã ¨2;æ™YÒžÕÏ+™7Þý \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_0/mask_93_0.dat b/src-backup/includes/phpqrcode/cache/mask_0/mask_93_0.dat new file mode 100644 index 0000000..e218fa0 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_0/mask_93_0.dat @@ -0,0 +1,3 @@ +xÚíÙK +À EÑyV÷¿¹Ž,ÚO¬mÞ rãPHŽ0 {’´š°ôäå2ûbö¨ìýÞc{t¦Qáƒ] +{QÞ{“Þ{弬֒¤ÇŽ;vìØ_Ú³ßÕ}ÏÂ÷ýËL€}l§ß±cÇŽ;vì̑̑̑رcÇŽû¢öüÐÎ.LÛæÕegwì3ö´žqe¿ÿѾ@i \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_0/mask_97_0.dat b/src-backup/includes/phpqrcode/cache/mask_0/mask_97_0.dat new file mode 100644 index 0000000000000000000000000000000000000000..74ac719d06e7ba35f7b749e668c884f291daefb7 GIT binary patch literal 150 zcmb=p_4cMC*8v3{my5N2lkfa5ijADYwQUyT?SDJYDA|}8ET~@TVG}wt#i2yK=7z!b z>XaF;OL-RsNjlZ?U*+(wbH1LOIxmNXjYq;D;XuQ~?`*DdR@K|)ymqtY`Of=>87kg* z$16{D`=-laMU02Hv7J?~OBUdlkQVwh=~Mq+LyI<1=UdT5U+wnXEMO=-^wS0a*1Ó˜ý—Kƒ€°•À}“ˆÆ:!£èiY‰™'*3§]fÛsþÛÉÓÒîm¹ºb[ÞJÂÆÆÆÆÆÆ¶Å–ÝKÆ9›}ccccccÓ'u.6ûÆÆÆÆÆÆÆ¦s±é“Þ6666¶R[ÿ^gû{/lÇØÙ·Û Þ7Í‚ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_1/mask_113_1.dat b/src-backup/includes/phpqrcode/cache/mask_1/mask_113_1.dat new file mode 100644 index 0000000..1dd666d --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_1/mask_113_1.dat @@ -0,0 +1 @@ +xÚíÖ1€ ÀÞ×ÿÿœ -8fL(pBŽlDM™è9";ýÄ-÷ò÷;?1îpâÐ{¼\åÆú%-ŒŒŒŒŒŒ“3:@Ûad4ŒŒŒŒŒŒŒŒú*£NîÍaddddddÔÉÍ#######ã#c]75®ÓåÚã¢Æåæ1ÏxYuñ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_1/mask_117_1.dat b/src-backup/includes/phpqrcode/cache/mask_1/mask_117_1.dat new file mode 100644 index 0000000..8921f64 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_1/mask_117_1.dat @@ -0,0 +1,2 @@ +xÚíÖ» À À>Ó˜ý—Kƒ€ø$ø^’ 8Y–QSV'zž8‘þjzëÌʇ¬™^]Þסµ‡¬õekXYYYYYYYjݵ#¶ ++«yeeeeeeeeµ#²²šWVVVVVVVV;"+«yeeeeeeel­'ëe;b»±&²^9¯{­/ÊJ$p \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_1/mask_121_1.dat b/src-backup/includes/phpqrcode/cache/mask_1/mask_121_1.dat new file mode 100644 index 0000000..64bd8ba --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_1/mask_121_1.dat @@ -0,0 +1,2 @@ +xÚí×1 +À н§‰÷¿\— ¥C¡PbÑ—EÁÁ$’DdÆ©ÄÊ•Y»³ÿŸtëÚ…öλ»÷ÏÕÛó0£$ìììììììììì›ì§ûù¹ÆÎ®ÞÙÙÙÙÙÙÙÙÙÙõóììêÝg–a7ÇyëØÙÙÙÙÙÙÙ¯³ç—½Y??ÿØÙ{Õ{ý¾D“ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_1/mask_129_1.dat b/src-backup/includes/phpqrcode/cache/mask_1/mask_129_1.dat new file mode 100644 index 0000000000000000000000000000000000000000..62cd1c9a18c2367d1c2c4a125b0c7bfb7647cd07 GIT binary patch literal 164 zcmb=p_4c+Q*8v3{)(d-=d%mmRskg|fP}}X+^rc5NZJtc#aociguIS=*E7o0PY;Hez z>gn9i&b%cXe#-fTKV)dW7BEeenT¯9ÿÿ¹4¢6)ƒ3×$`s ²¸uÊ®‰>Wdš¾ ›)›g³•'°±MÂ{3\d6u¹’bذaÆ 6lؼn³û]ÜNذ9ÄFÞ°aÆ 6lذa£3°a#oذaÆ 6lذÑذÑ5e16lذaÆ ]SŸb£kÊ6lذaÆ ›mê—ͤÍß;CûcÃf‘¼IdsG¹ÿ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_1/mask_145_1.dat b/src-backup/includes/phpqrcode/cache/mask_1/mask_145_1.dat new file mode 100644 index 0000000..6a9950f --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_1/mask_145_1.dat @@ -0,0 +1 @@ +xÚíÜ!€0@Ïk®ÿÿ¦¡ 4a)³qæ2i.YCUO{35²UZÆFŒn]ÏfN>bd£ðwtzJF}ÁFŒ1bĈ#FŒýÆ(¡¯FŒ6r1bĈ#FŒ1ÒE1ÒiÝlFŒ1bĈ#FŒtFŒÜ#FŒ1bĈ#FŒtZ}#÷ˆ#FŒ1bĈÑl£þeôÀHÉùG£µÜ£@£Ù’î \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_1/mask_149_1.dat b/src-backup/includes/phpqrcode/cache/mask_1/mask_149_1.dat new file mode 100644 index 0000000..02a3cdc --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_1/mask_149_1.dat @@ -0,0 +1 @@ +xÚíØ1€ ÐÝÓ”û_Î…ˆƒqÁHÞ_Xšòc‰èi«#Gd̘ŠÕ”Õ›á÷g…¬LUè^Ý®VR«>dKV¬X±bÅŠ+VÛXeùo¿ÎX±ÚÌJ_±bÅŠ+V¬X±bÅÊ;ƒÝ™+}ÅŠ+V¬X±bÅŠ+VöAV¬ô•ngÅŠ+V¬X±bÅŠ•}+ï úŠ+V¬X±bÅŠ«VýËjÒÊ>øhewfõ›•¾*`uTqí \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_1/mask_153_1.dat b/src-backup/includes/phpqrcode/cache/mask_1/mask_153_1.dat new file mode 100644 index 0000000..2abfca2 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_1/mask_153_1.dat @@ -0,0 +1,2 @@ +xÚíØ1 +€0ÀÞ×\þÿ9›Ãbt³Ešc'›ªÎHHÍ•š9³efßžmff²MïÙíª›õ #.̘1cÆŒ3f̘1cf–Ô7¯3f̘Ùg̘1cÆŒ3f̘1c¦o2cæ]Ã?€3f̘1cÆŒ3fÞ5ôMfÌì3f̘1cÆŒ3f̘1Ó7utfÌì3f̘1cÆŒ3f̘=ÌúËl¡™¾ùj¦£3ûÕÌ>ÛÈì¤ÐVü \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_1/mask_157_1.dat b/src-backup/includes/phpqrcode/cache/mask_1/mask_157_1.dat new file mode 100644 index 0000000..17344b8 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_1/mask_157_1.dat @@ -0,0 +1,2 @@ +xÚí×1 +À À>¯9ÿÿ¹4S¦d/Ì5‚Õ1ÈÊVÍ)SkŽJžµ»­vßÜ7´³ÝÞÝíé…ÛÍeGä°cÇŽ;vìØ±c÷²]Z¯¸îÙ±c'ïØ±cÇŽ;vìØ±Ó+رÓgå;vìØ±cÇŽ;}V¯`ÇNÞù+رcÇŽ;vìØé:;vòŽ;vìØ±cÇŽ;½‚;}VÞ±cÇŽ;vìØµ±›'»ÍvzÅ#;Œ]Œ¼klw¯oA` \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_1/mask_161_1.dat b/src-backup/includes/phpqrcode/cache/mask_1/mask_161_1.dat new file mode 100644 index 0000000..669ade1 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_1/mask_161_1.dat @@ -0,0 +1 @@ +xÚíØ1€0ÐÝÓÐû_Î…XӨš yi~…ˆ¬Q©bÖÕkvÈp±á³ê7'M u¸Ù=¼]ņÙð([ 2dÈáÏ +þÛ\' 2”‡ 2dÈ!C† 2´s0/3d(½) 2dÈ!C† 24ë1dhç 2dÈ!C† 2dhÖcÈ¡ÊS¦L™2eÊ”)S¦L™2­œMç S¦LÍS¦L™2eÊ”)S¦L™2•Må}¦LÍSS¦L™2eÊ”)S¦LeSyŸ)SóÔÅ”)S¦L™2eÊ”)S;Ù”)S;ó”)S¦L™2eÊ”)S¦v(²)S¦v(æ)S¦L™2eÊ”)S¦íLódºÍT6}a*ï3mljžmzC' \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_1/mask_173_1.dat b/src-backup/includes/phpqrcode/cache/mask_1/mask_173_1.dat new file mode 100644 index 0000000..436918c --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_1/mask_173_1.dat @@ -0,0 +1 @@ +xÚíØ1€ ÐÝÓ”û_Î¥''Ó@y]Xšò1?"g¬:1çŠfn˶ÌöË»ö¬­m¼·¯«»™m.?¶¶lÙ²eË–-ÛF¶«ÿß>glÙ²•·Þ2¶lÙ²eË–-[¶lÙ²e«O`Ë–­¼eË–-[¶lÙ²eË–-[¶lõ lÙ²•·lÙ²eË–-[¶lÙ²eËV¦O`Ë–­¼eË–-[¶lÙ²eË–-[¶z0}[¶z0yË–-[¶lÙ²eË–-[¶E¶ùe[h«OøÍVWö…­¼=Ìötÿ*| \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_1/mask_177_1.dat b/src-backup/includes/phpqrcode/cache/mask_1/mask_177_1.dat new file mode 100644 index 0000000..12e2e52 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_1/mask_177_1.dat @@ -0,0 +1 @@ +xÚíØ1€ ÀÞ×ÿÿœÍE¨¬Œp0×XÐà„,a#rÚÊ}®¨6}ÇŒ§¿Ùÿ»¶‰±~އ£\Ð8 •ÆŒ3f̘1cÆŒ—7®ðÎ{Ö3f,ÝyŒ3f̘1cÆŒ3fÌX_¡¯`ÌXï&3f̘1cÆŒ3f̘±ÞM_Á˜1cy̘1cÆŒ3f̘1cÆŒë+3f,ÝyŒ3f̘1cÆŒ3fÌX_¡bÌXï&3f̘1cÆŒ3fÌxãü2žd¬¯øÔX'Äx[cy|¨ñ ¸•3ë \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_1/mask_21_1.dat b/src-backup/includes/phpqrcode/cache/mask_1/mask_21_1.dat new file mode 100644 index 0000000000000000000000000000000000000000..f87e0a11227bb4e1e6f46a1dbb133ca9b1cc8109 GIT binary patch literal 42 ycmb=pWo*#E^%B$z4|g)+XrS~G>tDQj I0gJJp;@7?u-2eap literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_1/mask_33_1.dat b/src-backup/includes/phpqrcode/cache/mask_1/mask_33_1.dat new file mode 100644 index 0000000000000000000000000000000000000000..318949df07745528a680a428ac74ea85f016c2aa GIT binary patch literal 53 zcmb=pWo*#E(KTk=YPW25x~DW1ZnK;yQ#k{?W*9i^mo(k2MWv7BXK JDEWV$2>`Yr5WxTd literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_1/mask_37_1.dat b/src-backup/includes/phpqrcode/cache/mask_1/mask_37_1.dat new file mode 100644 index 0000000000000000000000000000000000000000..5bd9e3aa0d08230508938e61404749c9ae72e32d GIT binary patch literal 56 zcmb=pWo*#Ec0ARA$6JzFue`IJvZq{C68loc~P O{VIfV)fhyX>>B}kGZlIO literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_1/mask_45_1.dat b/src-backup/includes/phpqrcode/cache/mask_1/mask_45_1.dat new file mode 100644 index 0000000000000000000000000000000000000000..b35c567dca6aa84fbd8758e1fba4ba2feb397de2 GIT binary patch literal 82 zcmV-Y0ImOc+A}bK0z+KD00FoRNC61dbTS*2PX)7SsT!xdk(^GV*-*`fM1fJW2ff*Z o(g~bDg3KOGC-gI$Q0Yx=v#FI%h$&--irG{SZ{o}b0N2uhd5F*?p8x;= literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_1/mask_49_1.dat b/src-backup/includes/phpqrcode/cache/mask_1/mask_49_1.dat new file mode 100644 index 0000000000000000000000000000000000000000..d20d71710eecee1842e3fc1535a09df5a9bc8761 GIT binary patch literal 84 zcmV-a0IUCa+A}bK0z-Vj00FoRNCgNTbhiUtgi3bMLkC`eAbEuhJD>&_5)DS}7`1~) qJBUfUaFG#i$7s45S#}Up3)038>ZV;{>!_h=2TkIGcsl^2!^he0dm&5! literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_1/mask_53_1.dat b/src-backup/includes/phpqrcode/cache/mask_1/mask_53_1.dat new file mode 100644 index 0000000000000000000000000000000000000000..a676d7dfa2092a94b7a81322980eb4def98fba74 GIT binary patch literal 87 zcmV-d0I2_X+A}bK0z*Q;00FoR$N>ml185hf7!~cJr!Ip2Lh>4!c0mm>Bngb#HEP!o tw~N^P1s5B&Ycw5>+BN9xBDS?bOS@>1zes5V31pqmJ6B4Gdk literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_1/mask_57_1.dat b/src-backup/includes/phpqrcode/cache/mask_1/mask_57_1.dat new file mode 100644 index 0000000000000000000000000000000000000000..896ed43575bbcdf0ad49fbfabe490f0645a69df4 GIT binary patch literal 92 zcmV-i0HgnS+A}bK0z+be0RnItkP8qx2Zf#3M5%1&K=cx?F0b9ifGvGnJH}m literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_1/mask_61_1.dat b/src-backup/includes/phpqrcode/cache/mask_1/mask_61_1.dat new file mode 100644 index 0000000..4165a4b --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_1/mask_61_1.dat @@ -0,0 +1 @@ +xÚ30€CbpPº™ÝØÅi`÷@ê&ÚßH^§Ðn¨a†dQ»Gíµ{ÔnF3s~{gDf@VF{6Pqb^n%N<(VOM!% z$k4$xhh-EO4838Mg8>5u3?CSjTRkcmt{T`$3>YwEH7H+JtRd!Bt3S?PhR}V`4GpQu FA{XR~DnI}L literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_1/mask_69_1.dat b/src-backup/includes/phpqrcode/cache/mask_1/mask_69_1.dat new file mode 100644 index 0000000000000000000000000000000000000000..03bba657f6d0df2a65ab63bc13715660ffc4ba1b GIT binary patch literal 102 zcmV-s0Ga=I+U?gd3IHGoh2g!^*!?fpBGuB6Ru=tl734z%QACqxBP~f*q;+|~GOlg3 z+|*@yF5PGrS+r?(1q&7|Sg<^6vEHLv!?NAN?qb1$1ZaPm@r{VZ}QxyUc>an#ExUago&HU9mj+T)Arjuh3Vye^8R7`ZVIqZ Kep3TS=JO^`WH?p; literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_1/mask_77_1.dat b/src-backup/includes/phpqrcode/cache/mask_1/mask_77_1.dat new file mode 100644 index 0000000000000000000000000000000000000000..0fe0b03e868a00c5cc8f97a40528a7873b189a78 GIT binary patch literal 110 zcmV-!0FnQA+U?je4ge4gh2h<4>i(Cr2nH6ODE>E!G+%@^VU`nTV>Q8)snssB^}WNL zdu^VpO`ltHbYfdB9wots4cnKt)&5pivAMDF7O-K%#>`?aFte~>!}hvu_4ni(Cr2nG^~hc@}&Xs9m@nlP)$C$XMn>hy{MjVt$j z{gE+3#iKqBt-N5Y8)R89V#J7X)2MhK+d4+qM(zwoj2JO8ubJ1(Ym68%VvJ~1{NnyH UdYUt;KT?e16B)r+06TKr<%ttFF8}}l literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_1/mask_85_1.dat b/src-backup/includes/phpqrcode/cache/mask_1/mask_85_1.dat new file mode 100644 index 0000000..b8a20c7 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_1/mask_85_1.dat @@ -0,0 +1,2 @@ +xÚíÙ1 +À н§‰÷¿\©]‹‰4ðþ˜AA hÄÌØM¬\Q‘µjsë·úAk§U·ûújm‘un2RÃÊÊÊÊÚΚ5·ž:k;«»ÅÊÊÊÊjƲº[¬¬¬¬eoÅí­›[™oð¬ÿ[ÇÎk®õ¨ðZä \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_1/mask_89_1.dat b/src-backup/includes/phpqrcode/cache/mask_1/mask_89_1.dat new file mode 100644 index 0000000..e9d226f --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_1/mask_89_1.dat @@ -0,0 +1 @@ +xÚíÙ1€ ÐÝÓ”û_Î…‹N…h}%Àƒ@ iDOËHŒ±*cä"æûµ<öØgþâÈ)û§Ñû_.Ä4I‘ìâ‡y킎¢¸`)-5*¥ç(™é£of[Ósm€}åÑÃöý¶õÉö6YM ;;;;;ûG{ô»zÕØ·µ»«ìììììììz1vw•}œ=úwuûìýLÆ%û?û"ç=Ç~e—i \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_1/mask_97_1.dat b/src-backup/includes/phpqrcode/cache/mask_1/mask_97_1.dat new file mode 100644 index 0000000..24fa60f --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_1/mask_97_1.dat @@ -0,0 +1,2 @@ +xÚíÙ1 +À0н§1÷¿\—ÐtncKÌû«ƒ‰D"‘H$ÊäD™œH$‰D"Q&—WerûH$‰D"ñ±ç*x[±(Ë?/ÚÇ÷ˆ'ŸŠnd \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_2/mask_117_2.dat b/src-backup/includes/phpqrcode/cache/mask_2/mask_117_2.dat new file mode 100644 index 0000000..b4dcce4 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_2/mask_117_2.dat @@ -0,0 +1,2 @@ +xÚíÚ1 +À À>¯9ÿÿ¹4!m dOƒs\§0X,laÕ5#¿÷Eª¾>Z[íœÖ·ŽÉêã½ÄR©T*•J¥R?Q-œº«*¯T*•J¥R©º?U÷—W*•J¥R©TÝŸªûË+•J¥R©Ô¤Úùó~m5Õ©;ªòúSõ&+ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_2/mask_121_2.dat b/src-backup/includes/phpqrcode/cache/mask_2/mask_121_2.dat new file mode 100644 index 0000000000000000000000000000000000000000..a2a0097b1fd803424ccf0a741277066f44b04dae GIT binary patch literal 127 zcmb=p_4c+Q7lR@X%YlD!!vFtUN&Z3X+ Wr*l6!Q#;$o?ELu?!b)#0qyqpqZ94e? literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_2/mask_125_2.dat b/src-backup/includes/phpqrcode/cache/mask_2/mask_125_2.dat new file mode 100644 index 0000000..0ea40fd --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_2/mask_125_2.dat @@ -0,0 +1 @@ +xÚíÛ!À P¿Ó”û_ƒ@ U(Ûkp@^Mú£Ú®5ÕôªúËîòâ-ú‰:ðöVF_žÌ\t:N§Óétú÷õ¼yžN×qt:N§ÓétºG—ãô;N§Óét:.ËÐå8:N§ÓétzA}ÿµ‹ôÔyžN×q¿Ñ;+nŠ& \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_2/mask_129_2.dat b/src-backup/includes/phpqrcode/cache/mask_2/mask_129_2.dat new file mode 100644 index 0000000..bf04839 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_2/mask_129_2.dat @@ -0,0 +1,2 @@ +xÚíÛ1 +À0н§Ñû_®KÈVÚ¡¨'.Éôþ!«²¶w]A0XðÄú÷~˜ «ÚÞ  ö!›š€€€€€€à£ fK# x˜Fy€À4È vey€€€€€€€@^°+È ç º~™ž ¨Û L#ÁêveI \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_2/mask_133_2.dat b/src-backup/includes/phpqrcode/cache/mask_2/mask_133_2.dat new file mode 100644 index 0000000..9e78b6d --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_2/mask_133_2.dat @@ -0,0 +1,10 @@ +xÚíÛ1 +À н§‰÷¿œ‹à&´`¢ô…Lâð”üÁˆQ-½g=Aq•bëú¹ŠÊª<‹všb½+©)((((((((ÊIën*…÷­l𠆆fŽÆ„ÓÐÐÐÐÐÐÐÐÐÈš44²& ¬)OÑÈšÞY“FÖ4á444444444c4~œ9S³:3ÐЌטpšÇ®>® \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_2/mask_145_2.dat b/src-backup/includes/phpqrcode/cache/mask_2/mask_145_2.dat new file mode 100644 index 0000000..9ff2bbf --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_2/mask_145_2.dat @@ -0,0 +1,4 @@ +xÚíÜ1 +À н§ùÞÿr] +Ý,tˆQ^È&ÊCˆð“§ÆÒ~ë +щ¢Éj~mɾ¢.ÕåŽFgÑüìMDDDDDDDDDDDÔST™×ˆˆêD¦ŸˆˆˆˆˆˆˆˆˆH¦•ŽˆdZï‘L+¯É´DDDDDDDDDDD2-‘é'"""""""":BÔäת½EåY„ˆ¨Ddú‰¾û† †Š \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_2/mask_149_2.dat b/src-backup/includes/phpqrcode/cache/mask_2/mask_149_2.dat new file mode 100644 index 0000000..d52e048 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_2/mask_149_2.dat @@ -0,0 +1 @@ +xÚíÜ;€@ÀÞÓÀý/gcaGÖBXBç'“-ˆ¼Âˆ«²»ouÕ§UQ½dõRVOm¡šTƒÎ*Ç«Ê;;šŠŠŠŠŠŠŠŠŠj¨ªå»ŠªEe2PQQQQQQQQQQQɨ¨ä TTTTTTTTTTTTr»3•œÁ¼¢¢¢¢¢¢¢¢¢¢¢’3ØR©ä &ÕßTsþŒ·»ªk¤¢z_e2P=ê ïd™ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_2/mask_153_2.dat b/src-backup/includes/phpqrcode/cache/mask_2/mask_153_2.dat new file mode 100644 index 0000000..3b06041 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_2/mask_153_2.dat @@ -0,0 +1,2 @@ +xÚíÜ1 +€0 ÐÝÓ¤÷¿œ‹8ZP!¿úB¶ÒòèèZuÔÈè³¶"û“ìbuºñö™‹ÈÒ*îÎÆ²é)]MFFFFFFFFFFFFö†¬%= #‹‘™ddddddddddddr ot2¹†yFFFFFFFFFFFF&× #“k‘‘‘‘‘‘‘‘‘‘‘‘É5ÈÈL 2222222222²(YÚµ½7ÉÈ"d¦ÙóÞ@H— \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_2/mask_157_2.dat b/src-backup/includes/phpqrcode/cache/mask_2/mask_157_2.dat new file mode 100644 index 0000000..2baf535 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_2/mask_157_2.dat @@ -0,0 +1,3 @@ +xÚíÜ1 +€0À>¯¹üÿs6‚M¹ÎqUH1¤XØ&Uç̘½fÝ/u-çûé'ñíæ.ºû[ÍKGGGGGGGGGG÷H×|NG¨“(ttttttttttú¬NF§ÏÊ;::::::::::}–ŽNŸ¥££££££££££Ózèè$ +>«“Ñé³…ŽŽŽŽŽŽŽŽn­ üAø#ºî^AG—§“(t¯ì =3{ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_2/mask_161_2.dat b/src-backup/includes/phpqrcode/cache/mask_2/mask_161_2.dat new file mode 100644 index 0000000000000000000000000000000000000000..d2df7594eafccef2dacee35dfd7b2fa20d22e1dc GIT binary patch literal 190 zcmb=p_4bY;UxNV;Yry%;UBBb`j2ojEHvT!3{p!RC?nRON7i3-Yc;zkY`Xf0}_x!$! zFE2cT6SG?D4qx=zQRnO+ECdE-0&RD4IXDluF5^{1fQ4roCj>lm@IU~K;tl%3r)17J zJ0ZZ#=G-X(&k}A4K#T&Dr(`%dQ~6pDpuA;fz2pBjgY@glDn4Sf%vz*>v-~PkmIDA9 Cq)A-> literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_2/mask_165_2.dat b/src-backup/includes/phpqrcode/cache/mask_2/mask_165_2.dat new file mode 100644 index 0000000..2e6cd7c --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_2/mask_165_2.dat @@ -0,0 +1,2 @@ +xÚíÝ1 +€0 ÐÝÓ¤÷¿œ‹Šè ?òBÆVü¥UG¼žµ%åùÐêþ¸åÙ×*“+ú_ŽfÊËs MIIIIIIIIIù–2d;£¤l¨4‰()))))))))))eöqJÙ†IDIIIIIIIIIII)Û ¤”mPRRRRRRRRRRRÊ6lº””² JJJJJJJJJJJJÙ†}œR¶aQRRRRRRRRRRNeòK?R픔͔&åW½3U \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_2/mask_169_2.dat b/src-backup/includes/phpqrcode/cache/mask_2/mask_169_2.dat new file mode 100644 index 0000000000000000000000000000000000000000..4052062b8db42699eecf910b9792afd64d0db84b GIT binary patch literal 196 zcmb=p_4ckI*8v3{)(d-=cYfa=BffC9bK#GR;+rC$JQO$)A7z^D@-5td;v_x$KZRRf zZ@YKti&y>Si-EiLS+DR!2HU-y%YuV0IWJizqKN=2d5((tdS!V{oP+?U0&*@cSz;s- xgbbohG*|MpPC)`8ZBAZV&W8R7OY$eT{eSz+A@fq6m)EU$prLMGxEX}SGyvz^RrCM= literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_2/mask_173_2.dat b/src-backup/includes/phpqrcode/cache/mask_2/mask_173_2.dat new file mode 100644 index 0000000..0a30ba5 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_2/mask_173_2.dat @@ -0,0 +1 @@ +xÚíÝ+€@ PÏiº÷¿ÚfÝtóš:>y &d U߬ÔýÍS´´[íþª»ùé¡Õ]5Z;a¼Û5VÛž™´´´´´´´´´´AÚÀï[ZÚË´Œ–––––––––––––V¦«¡ÕƒI0ZZZZZZZZZZZZZZ=-­L‚ÑÒÒÒÒÒÒÒÒÒÒÒÒÒêÁhiõ`Œ–––––––––––––VFK«“·´´´´´´´´´´´´ÉÚü?‚ݧÍìhioÒJ0Úà}³¢o \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_2/mask_177_2.dat b/src-backup/includes/phpqrcode/cache/mask_2/mask_177_2.dat new file mode 100644 index 0000000..d2c52f9 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_2/mask_177_2.dat @@ -0,0 +1,2 @@ +xÚíÝ1 +À EÁ>§Yï¹4’V$Í~± ,CŠ…¼&UóŒÞ÷;OoŠk5b÷ÑÏ™áâ”óŽG°x9¥Û%&&&&&&&&&&&n$îöõOL|‡Øv#&&&&&&&&&&&&&ÖÝbbݘ˜˜˜˜˜˜˜˜˜˜˜˜˜Xw#&ÖÝl7bbbbbbbbbbbbbbÝM"ÖÝl7bbbbbbbbbbbbbbÝMa!&Ö݈‰‰‰‰‰‰‰‰‰‰‰‰3Ä)U0}qMK$nTp4?}1s?+4l5MclS literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_2/mask_29_2.dat b/src-backup/includes/phpqrcode/cache/mask_2/mask_29_2.dat new file mode 100644 index 0000000000000000000000000000000000000000..5112d11eff0ce0631ba1000e8823e0592ee3230e GIT binary patch literal 45 zcmb=pWo*#EnW&mR* B5Pkpv literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_2/mask_33_2.dat b/src-backup/includes/phpqrcode/cache/mask_2/mask_33_2.dat new file mode 100644 index 0000000000000000000000000000000000000000..5bac0c80d2fd997d753427178c6294dd3dd9184a GIT binary patch literal 47 zcmb=pWo*#E *F™>– \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_2/mask_45_2.dat b/src-backup/includes/phpqrcode/cache/mask_2/mask_45_2.dat new file mode 100644 index 0000000000000000000000000000000000000000..ad44ff1885f2c4e0d2158824e4d2b5537e0e8eb5 GIT binary patch literal 68 zcmV-K0K5Nq+A}bK0z=#g4!8^kw`w#Iid7Q>h%(!dOx19XArWX)^>9~>HN_4))uS;# aNK_M3B2!g0&U7-YR1co;#)SYYI)8L$SQ+gA literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_2/mask_49_2.dat b/src-backup/includes/phpqrcode/cache/mask_2/mask_49_2.dat new file mode 100644 index 0000000000000000000000000000000000000000..6e8edff24b9344b19623318f9e10802439cf2b40 GIT binary patch literal 70 zcmV-M0J;Bo+A}bK0zFeF c>OklqvR0#s4%}&Xxa%04@qrTo0MEO|#KK}86#xJL literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_2/mask_53_2.dat b/src-backup/includes/phpqrcode/cache/mask_2/mask_53_2.dat new file mode 100644 index 0000000000000000000000000000000000000000..682cae2aa6532baf02d2aa3e0c1dd2ab5227a34e GIT binary patch literal 73 zcmV-P0Ji^l+A}bK0z*Ow32+$&77oAwesj8DyK(d{NRL}|M7?Oxab&l#B)j2eE;wiyK ib&jT?QJteYsi%|F)*Fp=5-1Z!bq=xk#E$^gB4-2t4I$0| literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_2/mask_61_2.dat b/src-backup/includes/phpqrcode/cache/mask_2/mask_61_2.dat new file mode 100644 index 0000000000000000000000000000000000000000..77d3815eb51a7feb77ebf8fa7001e8428c252db7 GIT binary patch literal 78 zcmb=pWo*#E&42|mGA0{eU)ahq{&Zsci5AoT|sbCRL;^iky?c_QPW#8n#wmU scCwG!AOHf}SdL4%7jXKBFflomDSq>=(yS;mZJM;_nealU{J-+60Ag+8uB49o zCeM)i$;BWcAt6nrP(L9Zkl0KlBqVyA9!Ek#%9h06kgHO>pO7@^?R^TT0-T8OPY@d{ Aga7~l literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_2/mask_77_2.dat b/src-backup/includes/phpqrcode/cache/mask_2/mask_77_2.dat new file mode 100644 index 0000000..903cba4 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_2/mask_77_2.dat @@ -0,0 +1 @@ +xÚíØ1À н§Áû_®‹CMŠØ>òGót Ñ«eó¨+Ž×FWÄZE¼­mÓ&gÞ‡F£Ñ¶h‰ùF+×t/F£ÙYvF£´õ³ïµÜì¥Õjçô[*7òÕa¶ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_2/mask_81_2.dat b/src-backup/includes/phpqrcode/cache/mask_2/mask_81_2.dat new file mode 100644 index 0000000..17a9ac2 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_2/mask_81_2.dat @@ -0,0 +1,2 @@ +xÚíØ1 +À0н§Ñû_®KÉÒ©Vi!O\"á‘Aøˆ«ò]¯:‚x»‘çÃbWµ½1ÅuȦ&‰Ä_‰µT ΋6œH$‰ÒU^‰Dâ~bׯëb=gˆ³âžûXî­ÛÙ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_2/mask_85_2.dat b/src-backup/includes/phpqrcode/cache/mask_2/mask_85_2.dat new file mode 100644 index 0000000..72c74ff --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_2/mask_85_2.dat @@ -0,0 +1,2 @@ +xÚíØ1 +À0Ð=§1÷¿\—B7¡ÖÖOþ$á‘A0$â¬ý8W­ ¦ê­þwjguÞu¿­æ§Š¡R©T*u•÷S֧ލæ•J¥R©ÞTóJ¥R©ÿRö‡ÕêÞ¢N¨æµ˜çVû \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_2/mask_89_2.dat b/src-backup/includes/phpqrcode/cache/mask_2/mask_89_2.dat new file mode 100644 index 0000000..06c9a4f --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_2/mask_89_2.dat @@ -0,0 +1 @@ +xÚíÙ± À0 À>ÓÈû/—&E*câÇQqâëÃŃ ªzf$òš«ÈËrM…ßåô„ß<ŽÈsa#d2™L&’?ïArYŸÉd2™LöG"ë3™L&“{ÊÙëRygw“;ÈúÊ ƒñÚI \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_2/mask_93_2.dat b/src-backup/includes/phpqrcode/cache/mask_2/mask_93_2.dat new file mode 100644 index 0000000000000000000000000000000000000000..f5202963d69964d6d402d87515855f97fb868039 GIT binary patch literal 103 zcmV-t0GR)H+U?mf3IH((1i=1YWB&iSYr?gGcm@NrSPvE!3r5V0|K`gR^esJBL=U|p zCA*J9`claZold9I>6hu5#zF6@yLURBPN&o9dL&(sq|@niI{j|F;se@4&-NL5N8P;_ J=`Rs#W7tsZG`0W$ literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_2/mask_97_2.dat b/src-backup/includes/phpqrcode/cache/mask_2/mask_97_2.dat new file mode 100644 index 0000000..38842b9 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_2/mask_97_2.dat @@ -0,0 +1,2 @@ +xÚíÙ1 +À0н§Ñû_®Ki·vH4 ’)ë_%s×_½Õƒd3KŽO1^ša†§LŸá,†$’H"‰$’KzRP—t[I&¯ÿX’ÝÍ9‰$’H"‰$’äIò$y’sI$‘DI$É“äIò$»I$‘DÉ%eëÌsò!¹¼=—™‚äLAZ5—œ'åÌ“IVý“rîn¸»/2oÆ… \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_3/mask_113_3.dat b/src-backup/includes/phpqrcode/cache/mask_3/mask_113_3.dat new file mode 100644 index 0000000..023b273 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_3/mask_113_3.dat @@ -0,0 +1,2 @@ +xÚíÚA +€0 DÑ}N“ÞÿrnDëÂFj2úK‚ÂÈCÂt?W«ÜݲîZ“iêÀ.qÕÁ‹ŒoýP ô¯ªª%SmjÕÖÂ7ËÞ¦‹:·©ª¨¢Š*ª¨N©Ê:@¤:݇·ìýÁоº•*€¹Š*ª¨¢Š*ª¨f©ÒW9dª2˜«¨¢Š*ª¨¢Šj–*}•S@ Ê`®¢Š*ª¨¢Šj½ªæ¯à§ª6ðJlº¾êÑ¿Ã}ÕÕ}ÕÕ§€•T‹¿UßaÈ24hnt \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_3/mask_117_3.dat b/src-backup/includes/phpqrcode/cache/mask_3/mask_117_3.dat new file mode 100644 index 0000000..79cc04d --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_3/mask_117_3.dat @@ -0,0 +1,4 @@ +xÚíÛ1 +Ã0 Ð]§Qî¹.¡xIÚB$úŒ‡€Á?~!É<ÇQ?ß#–ç¶Ð5µ/tIÝJ8owøié{áßçâ¬}£Sø˜^ã~‡¢½q猉P„ &L˜0áJá¢î1ÊúϻݢðD×K'¬J¨Ã„ &L˜0á…õÃn +«ê0a„ &Lxgaý°Gƒ°*¡&L˜0aÂ{ +g{衟þ2¨ë‡s¢Ή~˜ðì7\]%r¢Jôö9nZ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_3/mask_121_3.dat b/src-backup/includes/phpqrcode/cache/mask_3/mask_121_3.dat new file mode 100644 index 0000000000000000000000000000000000000000..aff5a7be5dbb2ea59135b972a31de3dec3877f89 GIT binary patch literal 212 zcmb=p_4c+Q-(dwFh68i2Tm1hYBYs6qc7az@=PAWDkCizVq0?+t7Om4wtq;3tyIk#F zy5GK%&h#wvb64#0Vy@VU|D7&ef7h~HH9KE;>-~Ih^HVEgKLuZlO;cUwJKHSx)|O2B zFzfxyYi|AgTNeL2=}VZ;Ev?R7P^rty{%*guOnUQ^gxskvcVQYX$3@&ONuIXHIa)Pv zd*)?`uy^M1DbmmD%Zo4AT@Sf`A^-TAmugk}r7i9rS@ZJQ!dsI6-_8j2Oj_vmiRt9J G3$_65-fl?% literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_3/mask_125_3.dat b/src-backup/includes/phpqrcode/cache/mask_3/mask_125_3.dat new file mode 100644 index 0000000..e2febdb --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_3/mask_125_3.dat @@ -0,0 +1,2 @@ +xÚíÛ1 +Ä Ð~N3ÞÿrÛ„]·‰BБÝ'?<Âà/̼VÛµ»Ýóþü¨ ïÒ”¿ÿ´…<–’0-_±Jä[¥ü?† +wÔÄ^;*ÃyòäÉ“'Ož<ù’/9ÏÏɯì9±<áîyÓÆœ'OžxFrjdA{$T!&?~Jee~GOn@¥ùz†Öô#EŠ)R¤H‘Z@ªbÂl-)ÌÝ¿ñ<ß§*©OURŸ"5&•ö›š5ý*iúeÎ J]®+ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_3/mask_145_3.dat b/src-backup/includes/phpqrcode/cache/mask_3/mask_145_3.dat new file mode 100644 index 0000000..338b7e7 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_3/mask_145_3.dat @@ -0,0 +1,3 @@ +xÚíÜÁ +‚@Ðý|Íóÿ®”•:Œ^ñ ³JyÌ¡¤ªyM§î×j‹×-' +9¤V—SÛýÖ¦K¶©9ëÇe¬µ)PíyUûû¹£wËeÞ-m jÔ¨Q£F5jÔ¨RËiÙ«ÔF4×_wk}·0+µµjRBR£F5jÔ¨Q»ƒš¾¦eßOMBJHjÔ¨Q£F5jwPÓ×´ì˪IH I5jÔ¨Q£FͳÇúš–íÙc éw5jÔ¨Q£FíµŠ:¡œÿÑzS«Ž*2¤¯UZ_«¾CÒ×*­e_Oí´ïZ¥%dIȯûâ†b \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_3/mask_149_3.dat b/src-backup/includes/phpqrcode/cache/mask_3/mask_149_3.dat new file mode 100644 index 0000000..30bc5fa --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_3/mask_149_3.dat @@ -0,0 +1 @@ +xÚíÜA‚0Ð}Oó¹ÿåÜ â¦Hé ¯éÂô“'¬Z×2{oVÛ|Ι«%µ™ê>‚yû·R{‡!8îäÂI+JpI|#¶Ýfì–5κ[âP A‚ $H Á‚Q}ð)Õ&<¹÷E‚§ JQ)J A‚ $H Ás5zþ¥¨%H A‚ $Hà4A^£ÿ5A)*E $H A‚ $è½ Þ3ïMHQ‚ $H A‚ç æü3Þ§`ÞP¯©®o¢Ý>X{טÔè+±ÑWb£¿¡àìß`IÑã)5׈%dš \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_3/mask_153_3.dat b/src-backup/includes/phpqrcode/cache/mask_3/mask_153_3.dat new file mode 100644 index 0000000..89cdec0 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_3/mask_153_3.dat @@ -0,0 +1,2 @@ +xÚíÜA +Â0Ð}Nósÿ˹)7mJ¦õ…,Å}8µêX=c¿W^G“e’ÝNóE;R(13DFEx15%o)(+gL2|3uiEv#I;;|4`apdpkS*^~xvLf_IwePW`Q`R8jLgJQhVasX}og%bb( literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_3/mask_161_3.dat b/src-backup/includes/phpqrcode/cache/mask_3/mask_161_3.dat new file mode 100644 index 0000000..72a26a4 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_3/mask_161_3.dat @@ -0,0 +1,3 @@ +xÚíÜA +Â0Ð}N“ÜÿrnªF±ÑTká…,„€NûðÛ ÄZ—Ñ’f7J÷:³Æ’^`WáÙ”U×á»nXÚ¤¼Ç§M-½¾‡™#V¹¥+ß¡ËÛ+9z–ÜÒ–YÒ l”)S¦L™òo•cŸ±¯Ê±O_Cå?ß©õ%Ê;*Kl‰M™2eÊ”)S¦L™2åYeý²]ÊÏÊ[bS¦L™2eÊ”)S¦LyVY¿lW„òGÊ[bS¦L™2eÊ”)S¦LÙÙ +ý²]g+$¶ßeÊ”)S¦L™2eÊ”­Ð/Ûq¶BbKlÊ”)S¦L™2eÊqÊ™ÿ‚þ¨œ]à­Â£{ÎA¿¼¦œÔ/×ô~¹¦ïŠœV9ï»\%ö÷‰[ãP¯#' \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_3/mask_165_3.dat b/src-backup/includes/phpqrcode/cache/mask_3/mask_165_3.dat new file mode 100644 index 0000000..870af8f --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_3/mask_165_3.dat @@ -0,0 +1,2 @@ +xÚíÝA +Â0Ð}N3¹ÿåÜT‰ #ØZþÀ Y¥uÈí:ÆÌ›¯1–ϱE®Uæ¹TÙT|SüþÒ·Ô ñ ¿qž)òm-sG²øì ¾ ýBæÈ.C‘ĉ'Nœ8qâÄŸâáÿÕ÷âwv7û[Æç'„tgÄÿ!.Õ¥:qâĉ'Nœ8qâÄÄõãv`ˆ_+.Õ¥:qâĉ'Nœ8qâÄÄõãv`ˆ—êR8qâĉ'Nœ8qâΤèÇíÀ8“"Õ¥:qâĉ'Nœ8qâÄIÑÛq&EªKuâĉ'Nœ8qâ½Ä+¾È9:¹}kFT?^úñêпG¼Åo<0Õ«Cªg/æ_ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_3/mask_169_3.dat b/src-backup/includes/phpqrcode/cache/mask_3/mask_169_3.dat new file mode 100644 index 0000000..9431095 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_3/mask_169_3.dat @@ -0,0 +1 @@ +xÚíÝA‚0Ð}O3Üÿrnˆ¢‰ñ·¾¦ ¨)}á'3ªæ1EÎÇh‹ßÑ]î4üP[ £_«ñÁ¥]Kvè‡<ÃË™fpý©#ýûª¶y_Êlù[œgëe£ôéÓ§OŸ>}úôéÓÿoý ªµ%uJV/µ°“{¿„þ—ô%¿ä§OŸ>}úôéÓ§OŸþ¨úê}Ýú§êK~ÉOŸ>}úôéÓ§OŸ>ýQõÕûº=ô/Ñ—ü’Ÿ>}úôéÓ§OŸ>}ú£ê«÷u{èï×—ü’Ÿ>}úôéÓ§OŸ>}ú£ê«÷u{蟪/ù%?}úôéÓ§OŸ>}ú¿×¯.N4ÿ»áƒVMm–¢R³•𥑸™Òá¸t(1ï…¢| \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_3/mask_177_3.dat b/src-backup/includes/phpqrcode/cache/mask_3/mask_177_3.dat new file mode 100644 index 0000000000000000000000000000000000000000..9586979a1f9d74c4e115757feeeabb74819df45b GIT binary patch literal 312 zcmb=p_4ckK*C7KDmJ79hlkfa5%Jb^v=;WB?Q=`hguxbC(hf6kRuDyQoTio}+UFQXv zzYC}H-0`hx>pHl#M}PCVx?h`vgGKGt$xx|wRV!3 zfoMp8BP)#fxJc>g$uD7oUs9|>H)gE5sHrt=^#lc>7A~z73z`r_mvKnO#w`)M&Z=su zbg*n(k1PjN^&?s|N=H{r^nS3Sqe@3D+;oUNM?Y$9iHOp<`z#Ekc_EUqAPXMxfb>qw zEAHgtRC0WyjcRYJR@RjRYnSlaR2M&;SL^DVy)i4Q+x2LaXy<=XYjqD_?+J5e|6#~G HtjGiaa;}E0 literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_3/mask_21_3.dat b/src-backup/includes/phpqrcode/cache/mask_3/mask_21_3.dat new file mode 100644 index 0000000000000000000000000000000000000000..bcb4eec4919b60e2c25c4e18ebb9c34423536b63 GIT binary patch literal 60 zcmb=pWo*#EQOIfiJ63sVS+xNu1fplLAA habXVvLtL={H4TR*l1wwiWg5b#xHRE54FHDyc9;xW9FqV5 literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_3/mask_29_3.dat b/src-backup/includes/phpqrcode/cache/mask_3/mask_29_3.dat new file mode 100644 index 0000000000000000000000000000000000000000..6150ac1289809bad7646c662dd9cf836311f47f8 GIT binary patch literal 75 zcmV-R0JQ&j+A}bK0z)JO16&9u7I`jwl1Q?&GZ`D8$YeOr5DVhME(}Fn_#_QSO-42g hU)nIl9)oZ$?ieJ~WF$A^k;Gv#QfT0j2LK0SpN7|C8+8Bx literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_3/mask_33_3.dat b/src-backup/includes/phpqrcode/cache/mask_3/mask_33_3.dat new file mode 100644 index 0000000000000000000000000000000000000000..6053b5e396ca957ae26193aceb85d08a43dacd9c GIT binary patch literal 79 zcmV-V0I>gf+A}bK0z(W00bB+MfK>sq3hWAyRM5v3T!1RJz`2Gv5EpJKDB>cdVAPhO lW(z#c;7?-^TkxkbL)`g=Dz?D=LP!BVTMUV{1pswi&V8ytAOipZ literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_3/mask_37_3.dat b/src-backup/includes/phpqrcode/cache/mask_3/mask_37_3.dat new file mode 100644 index 0000000000000000000000000000000000000000..5dea5b9cbe14fcff482e0fe9a647359aca07547b GIT binary patch literal 83 zcmV-Z0IdIb+A}bK0z+&F3b+gq0H-2kRd@{JG8i};@d2vZ2XK(!(BO=uY7eM-(E6p3Zv0bsQxl5nw^V$$JC%}Bqlsj9DvDo{aE;P>E# hYO*WtyB%t`BNs_$5b6wWqgwwJ)C%Io3LZM{#-RD-KY#!L literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_3/mask_53_3.dat b/src-backup/includes/phpqrcode/cache/mask_3/mask_53_3.dat new file mode 100644 index 0000000..8800bea --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_3/mask_53_3.dat @@ -0,0 +1,2 @@ +xÚí–K +À0D÷s½ÿåº ­¥‰Ñ! -(.Bp&|ˆ"-t–&`Æq‘Q-"†ð9Ù_+)Be/H8¾ãD®¼%‘a~šÐ}spKFN˜úöœ¶Ö=,ÂÆ;‡;a^tª4÷–‰Ï\™ÞF™ÎáÂÀÊÎSNé§éâ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_3/mask_57_3.dat b/src-backup/includes/phpqrcode/cache/mask_3/mask_57_3.dat new file mode 100644 index 0000000000000000000000000000000000000000..4e1e5da386a57dacaf76f93d05473ff922574488 GIT binary patch literal 126 zcmV-^0D=E_+U=Gx3cxT719!hh{{QE?gyNwnmS{-_8xJAm$PtVPuqu0fSCq8`R#F2C z`Jye^+}fgNtCnh;u5A$xa)x*4$m(#xu^rp7Rcwt+;I=%SqH*TgTz7#%(6RO)$6#_BUJmZJUz-cM|kVFF3Ae8Lopr+yDRo literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_3/mask_61_3.dat b/src-backup/includes/phpqrcode/cache/mask_3/mask_61_3.dat new file mode 100644 index 0000000..bf1a3cc --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_3/mask_61_3.dat @@ -0,0 +1,2 @@ +xÚí–A +À0ï¾fýÿçz‘4-%š•Ò*Ãâd°Ðpž!ÝyZÜ«‰æ‚uäõ(ù¸~ë=¹&ÉÛ“´‹)œÌR2â"/ò"ÿ<9çŠFΊ=r§þbòšó"/ò“ƒîÌíçrw¹"2®¯¹ãçÈøùBòèŸ#3-Ø0-KÀW \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_3/mask_65_3.dat b/src-backup/includes/phpqrcode/cache/mask_3/mask_65_3.dat new file mode 100644 index 0000000..8589208 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_3/mask_65_3.dat @@ -0,0 +1,2 @@ +xÚí—Q +€ Dÿç4»÷¿\?R•Û …Å,û!¨Oв-òNv®Í1 :Âc¡Zœuï Ú"U‹MÕF ~jK¨€´…-la‹[^q^³Q\éœ=…o”-la‹ÿZpUÒÞB¬„äÿ ±@IµÖKµJzÉ¢|1â ÷¹ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_3/mask_69_3.dat b/src-backup/includes/phpqrcode/cache/mask_3/mask_69_3.dat new file mode 100644 index 0000000..55318a8 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_3/mask_69_3.dat @@ -0,0 +1,2 @@ +xÚí×Á +€0 Ð{¿&ûÿŸó2¤'—®dô l†=,¹F½îéy;$§ì‡¤”WEË-R„Ѝ³:¢¡%T,O2½×g…"Ä"‹,²È¢/DÍyĈ˜¹ôɧ{þO䮳È"‹,:N„vÈEñWNÎ#(&,ö,‘ä•ºŠ®ë]æxØ… \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_3/mask_73_3.dat b/src-backup/includes/phpqrcode/cache/mask_3/mask_73_3.dat new file mode 100644 index 0000000..15be77f --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_3/mask_73_3.dat @@ -0,0 +1,2 @@ +xÚí˜Q +€0 Cÿ{šìþ—ógè;è¥JJ?dÔ¬K„=ÚRaÃsJhTJ6exÎkaºú¥§\$é‘n¯´IE,-/ÑÓXB¢è*Ñ…=ËâžíÚÒýweeé4™¢è¸tÿöÌ’tšLщî«t t”ß«œèà¯bž –gF…fž ÖáqºõoÖd¢Ðdn-ð? \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_3/mask_77_3.dat b/src-backup/includes/phpqrcode/cache/mask_3/mask_77_3.dat new file mode 100644 index 0000000..ec78280 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_3/mask_77_3.dat @@ -0,0 +1,2 @@ +xÚíØA +€0 Àû¾&ùÿç¼­BŠiÖRaK"té`I@³¶|¶º…fX—ö±Ôâ­yiöåólõE‘:Sza18G¾À‰if˜K*©¤?–:YÜC1쌞졘(ቷ—êöJ*©¤’¾’jÊl*Õí•TRI×KëÌîR^Ø™æœÞksûÂ)cÌ)cÌ)³JZø¦¶óí¥äãa· \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_3/mask_81_3.dat b/src-backup/includes/phpqrcode/cache/mask_3/mask_81_3.dat new file mode 100644 index 0000000..47bc0f7 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_3/mask_81_3.dat @@ -0,0 +1,2 @@ +xÚíØ1 +À Fá=§‰÷¿\‘,JÑGAúÄ¡‹ýhjÀÌ>ÚÙ#Ê3X™À’ø:çk÷Ô¹\ûFM JÝhuÇú½3¸¨>ƒT­ZõŸÔ{ÇãPSgøP'¹ÉkÔV¸jÕªU«¶_Û¯ý¯U«V­º•»=P Îo†O:WÒ‹ÞäÝjü[ŸWxÒÎmò Ù5 \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_3/mask_85_3.dat b/src-backup/includes/phpqrcode/cache/mask_3/mask_85_3.dat new file mode 100644 index 0000000000000000000000000000000000000000..02c4f8cdbbe43a99de71a77162d811d36ad4f51b GIT binary patch literal 160 zcmV;R0AK%j+U?m(3V<*SMbUXy^Sb}dIVrU|sn!>N+|q$Y2;pF8P^qqRd9N$FYg^Jj ztFhS7{Q{@rM+N5MyIOtAC{U6F+M{SU#kj+puI|W4iU0x#Ab>!sfcG@40`85I_KdmkG#TsrP@uMqv1rdge4##%ZWgv6J(FGUkB?1g^dV O%IE@ppbHjj!&bK*zf9i% literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_3/mask_89_3.dat b/src-backup/includes/phpqrcode/cache/mask_3/mask_89_3.dat new file mode 100644 index 0000000..2b4cb59 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_3/mask_89_3.dat @@ -0,0 +1,2 @@ +xÚíÙ1€ …á½§)÷¿œ *.@àUÁü ƒÓÓ|±¶‰î¹’âeŵ6Û¢‚‹äw5*÷ô) oôi¨K®‘¢4nk>Áè1}d>œÐ@ 4ÐXYC¾oœò Û¡1<º©A§ h F„ûÆt +ß 4Ð@µ5´—ž1ÁWrÒï>7û«û†Gíµ}}¤¡x7|ÇN‘gÆîÚN \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_3/mask_93_3.dat b/src-backup/includes/phpqrcode/cache/mask_3/mask_93_3.dat new file mode 100644 index 0000000..b4cc8a9 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_3/mask_93_3.dat @@ -0,0 +1,2 @@ +xÚíÙA +€0 DÑ}N“ÞÿrnJɪQš~éB¨Œú06 û£n®aá¸<<¦×‡‡ôÿe6×M—R™ýCùÅPÈ ¥LÀ±ôÌ“išØ9MŽ 2È ƒLkÅ®½dD»v*ó"a·ÔX†jBdAdªdèôZöÀTßdAd®qYø0exö÷ö¼Ÿqe§çÊN¯«Œú©ª&WV“ææQvcô \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_3/mask_97_3.dat b/src-backup/includes/phpqrcode/cache/mask_3/mask_97_3.dat new file mode 100644 index 0000000000000000000000000000000000000000..7adc9ebaa77cfc3c6f7a54307a831fbeee0c87db GIT binary patch literal 175 zcmV;g08syU+U?rG3V&G`N=*G0-MD(Ga{FCK!(&5t$)O3EWmo!5xs*ixXZ zVA@1zxl+BnrYNa(r@cz9VNyyDD4l1cxytAa-_m)8y8uckp@b4jD53OrC10xSQX0*J zF=dt7h5IPcalDsMLJ1|5P(o>6B~s-^N^~6WC6rJ?2_=+%t0e0VeE$jDlr;7Ux}BHg dPL&$iL~p8;J5{b%n)WQo-EsPG#~oB@^PHSYS7`tM literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_4/mask_101_4.dat b/src-backup/includes/phpqrcode/cache/mask_4/mask_101_4.dat new file mode 100644 index 0000000..1c97dc0 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_4/mask_101_4.dat @@ -0,0 +1,2 @@ +xÚíšA€ Füÿs^1 b¤‹ÆáИª]ÃØÖ4šm+Æ8Ð+˜Ve¬Ä^H­R]–\Íc‡®ŠÛ +·oõWN#¸îXáéØá+lð ž­HE³cp \à—^.Î9qñW9ø¼ïç"ò…:¸À.ŸæBßÿó÷ùBƒ \àæ0Ìa˜ÃPǨcp \ÞÍÅïO•’‹N¥qjpGÖô}“ô}¥Ê$.äË…Š§ÐŠ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_4/mask_105_4.dat b/src-backup/includes/phpqrcode/cache/mask_4/mask_105_4.dat new file mode 100644 index 0000000..0211cdb --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_4/mask_105_4.dat @@ -0,0 +1,2 @@ +xÚíšK +€0 D÷=Mrÿ˹‘øA …ÎTáe‘EFóL2 #ŽÈÌé¹¢…_I!“‹•ßú­£ç딤Ѻ““Î-Õ«km¿Oñá]sS T6*ùª'8Á NŸâ$Þî'N¥Z‹Êí^œXXh%Zrr$W¹}rûäÖUë*GŽ9r|ºcÌ[Á£cNâ¬Þ[_=Æ×«5¼^ÍJ¼£ù¸ 1*ôq›v \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_4/mask_117_4.dat b/src-backup/includes/phpqrcode/cache/mask_4/mask_117_4.dat new file mode 100644 index 0000000..3867259 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_4/mask_117_4.dat @@ -0,0 +1,2 @@ +xÚíÚË +à н_£ÿÿs]4Ø¥©Dg¤nò¸à‰2Jj}´ÖÚÒ¾·RsSWG¶R¿ŒÉ§†žÚ)5¬»ÞE†áämá#ܯ•ã¾Õðk_"ÃzŸ”š3Â\¹råÊ•+×r ­L»k|ê/{„¹;Ž'×àÔjk^zGw=K_GJACF5KEX*@<$z}?p^YqOrD6l{pq{+`&l7JcHsOy z_GM@Ox_x?b=y>Jqe}Ao?uX%DM`IXJr{-ZaqKAvlH`*6wj&*7((AW$y+_m1`VYgIgEyrCkW+Vc literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_4/mask_125_4.dat b/src-backup/includes/phpqrcode/cache/mask_4/mask_125_4.dat new file mode 100644 index 0000000000000000000000000000000000000000..b98dc813afe773cdcd71a8779391ca295c0d3a51 GIT binary patch literal 213 zcmb=p_4c+S-ysD7)(f`F8-K^2;|+^RST%8G)>;-rsHGtPebu=wvE(Rqud?@Jdiv-z32@0r%Fa7(4|DUhVIr-8&`h2IF>D|wlymv&u|5gc>1uLtXBe(o`B(jjL zU;pLDUo3v_shtNkChn^3Ki;iZZS8BT4}Mgedi!xzR{!b=ahL8^+0UC-$jr|$aq=Dj DA0&Li literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_4/mask_129_4.dat b/src-backup/includes/phpqrcode/cache/mask_4/mask_129_4.dat new file mode 100644 index 0000000000000000000000000000000000000000..8ecfa250845e8ef1add89a66c88fc9f31250a436 GIT binary patch literal 220 zcmb=p_4c+kU$cP#%Y}Q(H@>gmX_E0-a3R;c&@UP>6Fhnzw0;$t`MGk<)@^G`dv2;9 zJa>BiGETqum$vWzzWVcDA(y^F$>O^;cE3bkZ7!_If6o7~R(2)#^;-&#|1=8@FtW=O zT)5zvG5y;kg&7OBX?Mm(S)NeKczodZftUvk%zPFg;tOl7WBdj2GpxmpM2j^4FA?}L o{bhTz9Ot|H{BduueXdPB_S¢Ø/œ#\pÁ\pÁ…>¢è#ö ç\pÁ\p¡è#úˆ>âqŽpÁ\pÁÅ.º¾$¿ºÈIqü𽤠dô‘ÑG’R»°_4¦è ò€˜ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_4/mask_137_4.dat b/src-backup/includes/phpqrcode/cache/mask_4/mask_137_4.dat new file mode 100644 index 0000000000000000000000000000000000000000..0c09c487c2e85488f8caf2dcc863e260cfd077d4 GIT binary patch literal 248 zcmb=p_4bYxEjs$#?!2-R}~*>9$YZ>m}P8_SPSlc>J(ZYVC8? zO1oo*K1q`<^UtZRwccRy_UiY^lc)4;t3SOfES@w`rW=l2^YbTRO$JKN#b*jQw`{%rV(;`b$vL{4 zXRQkQ#dOtY-ox+n-*;b@wS2d1)2vU1rN&=NV*fwfSo>q^jJZKc}*2a`@ScXA0|@PM!+Z)$&&j+uR`i+&96LlQothXU{Gd06E`pF literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_4/mask_145_4.dat b/src-backup/includes/phpqrcode/cache/mask_4/mask_145_4.dat new file mode 100644 index 0000000000000000000000000000000000000000..33fb211249fd13955f9481a5af91416b0850c79f GIT binary patch literal 255 zcmb=p_4bYjXH=f@| K¯jò´oé ¾ªý|¯SªŠSWKùZmË׌ºƒÃjé¾€Ã\’йçЪ2ï W\qÅW\qÅÕñ®"~·ß× ­jvÚtòê®òªŠv¥_Ùíƒ\qÅW\qÅW\q%g3Èä ú•}+®¸âŠ+®¸âŠ+®ä r9ƒœA¿²rÅW\qÅW\qÅ•œAÎ g3èWöAû W\qÅW\qÅW—«œÆ]åVµ~v{êDŸ™3ÔÈœ!¹ªƒ\éWÇô«¬Â^<ír/ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_4/mask_153_4.dat b/src-backup/includes/phpqrcode/cache/mask_4/mask_153_4.dat new file mode 100644 index 0000000..e827dd1 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_4/mask_153_4.dat @@ -0,0 +1,2 @@ +xÚíØ1ƒ0ÀÞ¯ñýÿsi,')p!äµ4.ÜГ;±½¿WUmßçj=¿²„²ê°Ê.NO¾þ>úûšçTµÚ[÷¾S7vÜÛœg¶q•„?æ÷ÞÒ +š{pe¹o“3Î8ãŒ3Î8ãŒ3Î8{ØYXzðá,°²Û_úO¤ÓYfeñÎô3sÓÜäŒ3Î8ãŒ3Î8ãŒ3¹†\C®!×ÐÏÌMs“3Î8ãŒ3Î8ãŒ3Îär ¹†\C?379ãŒ3Î8ãŒ3Î8ãŒ3¹†\C®!×07ÍMÎ8ãŒ3Î8ãŒ3ÎÎq¶þÚé,»²ËmMrs›k¤Wvœ3ýìÀ~–WÜ €WB \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_4/mask_157_4.dat b/src-backup/includes/phpqrcode/cache/mask_4/mask_157_4.dat new file mode 100644 index 0000000..ad5fcf6 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_4/mask_157_4.dat @@ -0,0 +1 @@ +xÚíÜ1Â0ÀÞ¯ñýÿs4˜"FPà=iRX¢XÉÛ0ç멪€u 4ftÑÖl}Òm¾øßýžéâž­»Sû|²ËÑŽëSÌ û¶ŽÄPÏ5<]öÉrÇwÜqÇwÜq÷£»È^QáéN6ÃûáéZ¸sß™³æ,wÜqÇwÜqÇ>«Ïê³ú¬ûΜ5g¹ãŽ;î¸ãŽ;îôY}VŸÕgÝwæ,wÜqÇwÜqÇwú¬>«Ïê³æ¬9ËwÜqÇwÜq§Ïê³ú¬>ë¾3gÍYî¸ãŽ;î¸ãî[ww?P3Üå§ÛþòÑÆ˜ÝggtŸí®¡;÷]ûû.3àw4A¯ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_4/mask_161_4.dat b/src-backup/includes/phpqrcode/cache/mask_4/mask_161_4.dat new file mode 100644 index 0000000..7604c45 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_4/mask_161_4.dat @@ -0,0 +1 @@ +xÚíÚA‚@ Ðýœfæþ—s!AL€Ä_|,ˆ™4òl)iï¯mŒ²ßl­×‰0'¼÷ +E¸û…£ ÷–]N\ºêüxÅ#·‡§2Ÿç/ü¼_¬{—7gÛò9ì¼Ù·ÔÀÖ}óï2‡rÈ!‡•?}-³#T—Õe9äC9äC9üÀ¡~ùöý²÷6Sʇ겺Ì!‡rÈ!‡rÈ!‡æôËÞÛ˜sÕe9äC9äC94ç _öÞÆœƒ|¨.«ËrÈ!‡rÈ!‡šsÐ/›s0ç ªËê2‡rÈ!‡rÈá8ì§}D‚ÃÎìçw£ùýrï—«DXΡ|xÃ|˜ä!à2ð \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_4/mask_165_4.dat b/src-backup/includes/phpqrcode/cache/mask_4/mask_165_4.dat new file mode 100644 index 0000000..d83d631 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_4/mask_165_4.dat @@ -0,0 +1,3 @@ +xÚíÚA +1 Ð}OÓÞÿr.ª"Ñ*?úfÑÅÌP‚óLHIï—kŒµÎ«õZQ¦…8 +Gy÷êqkñ-ž¿ÿÎn5£Œ½Ú+?ÌÒñùù¾Ýâ¿ø|ÖŽ÷Òþà·kKn®E¢¬ñŹä’K.¹ä’K.?ï2º£˜.ó£|¼EJ§{å2<Ê:.åKu\ç’K.¹ä’K.¹ä’Ë—úñ¿êÇmu)_ªãê8—\rÉ%—\rÉ%—\šÛÐ;'2·!_ªãê8—\rÉ%—\rÉ%—\šÛÐ;'2·!_ªã\rÉ%—\rÉ%—\rinC?nnÃ9‘¹ ùRç’K.¹ä’K.¹äò;.û²óHqY'ÊݽéþN·F?ÞKôã•¢,êR¾üé|™è My*3 \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_4/mask_169_4.dat b/src-backup/includes/phpqrcode/cache/mask_4/mask_169_4.dat new file mode 100644 index 0000000000000000000000000000000000000000..4aac95c1e3fc9ba5257f331564b211fab568c376 GIT binary patch literal 297 zcmb=p_4bw{7n30m>xEkX%lG~l?V3;+6CwFBVc+Mpz`!LezkNJB-=9zK3Cy|6dc7)c z$=5@7j?a{Q`J_AleCn>hU3Whz>;A1NtE#vC#=Q1!Zp)m1?|$5V9DCCK-|1Vc*mtaT zocL^x-SRm_r!-;2ueFy?#eVr#8L;Ge>5J}i?kE{?B4PtL69K8~&|}TJq5E>1FRHmwz3+$1r7q GdJ_PDBBetB literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_4/mask_173_4.dat b/src-backup/includes/phpqrcode/cache/mask_4/mask_173_4.dat new file mode 100644 index 0000000..9df4d86 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_4/mask_173_4.dat @@ -0,0 +1,2 @@ +xÚíØK +1À}N“ÜÿrnÂa øÃ~ZY!ÎÐJÑt^ï×5Æ(¸/«õÌjk–z[pjµ§_Ø?~v:|jwúÕ–_mû£îXzòoõ–Ó6?nËÞŠ<ö°j³$pË-·ÜrË-·_p[z¾=ÞVíæ–Qí¦3ÝæTéV¿ÕoÍ ÜrË-·ÜrË-·ÜrË-·r09˜L¦ßšÌ ÜrË-·ÜrË-·ÜrË-·r09˜L¦ßšÌ ÜrË-·ÜrË-·ÜrË-·r09˜L¦ßšÌ ÜrË-·ÜrË-·ÜrË-·r09˜L¦ßšÌ ÜrË-·ÜrË-·Ür›æv­æ6¯Ú÷ßý?•,eå`=*K¬6Ú­~û§ý6£à ´*× \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_4/mask_177_4.dat b/src-backup/includes/phpqrcode/cache/mask_4/mask_177_4.dat new file mode 100644 index 0000000..6437d25 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_4/mask_177_4.dat @@ -0,0 +1,2 @@ +xÚíØA +!À»¯Ñÿ.1B„éMyð”![ c÷þ\cŒ²ûZ­çV\¹Üq“Š7ßâÝEó‡Oýzg~ÅkëøË¿jž;pg”Šu²Í[*7Š×½¥ºöÀŠóTpÌ1ÇsÌ1ÇsÌñqÇ!¯ÿ‹ã Šw/òr¯ÿå8«âXÇú±~l®à˜cŽ9æ˜cŽ9æ˜cŽ9–»ÉÝänr7¹›~l®0WpÌ1ÇsÌ1ÇsÌ1ÇËÝänr7¹›~l®0WpÌ1ÇsÌ1ÇsÌ1ÇËÝänr7¹›~¬›+8æ˜cŽ9æ˜cŽ9æ˜cŽånr7¹›ÜM+8æ˜cŽ9æ˜cŽ9æ˜ãtÇû§oEÇ™ŸÉN¥Xy¹[ËÝR+¾‰cýø¯ûqNÑ\,4J \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_4/mask_21_4.dat b/src-backup/includes/phpqrcode/cache/mask_4/mask_21_4.dat new file mode 100644 index 0000000000000000000000000000000000000000..e006b67e4419e056f5a3fb4b7232769ee9976232 GIT binary patch literal 57 zcmV-90LK4#+A}af07Dpq%K*Qqp&?w5peQNkA_J1lg(?A)hA@%~nFA+rh~hK>%^4`7 P=;q=RrH8oyopw{-jJFsR literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_4/mask_25_4.dat b/src-backup/includes/phpqrcode/cache/mask_4/mask_25_4.dat new file mode 100644 index 0000000000000000000000000000000000000000..0c7c44bbb5bb50a1f060373ea3ca14d083fe686e GIT binary patch literal 76 zcmV-S0JHyi+A}af07FAV1c%Fjuna^PAxDf1Irg9fvh0EKpc;@!E_4AniAM&vX|%Qn i>NlJ|HN*%VIGY$5BJ4r(4;Eo;_F$1gmjnRDU3Su2%N^nX literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_4/mask_29_4.dat b/src-backup/includes/phpqrcode/cache/mask_4/mask_29_4.dat new file mode 100644 index 0000000000000000000000000000000000000000..c28dc20e8248d196503c88e3e58b9048de750a16 GIT binary patch literal 78 zcmV-U0I~mg+A}af07FAVI0*(^2E@r?NRc2*iM`kWMfO73Na9E&7dAmSNkA6A$s@yF k1DFWbSimBS8G{geiIFARUKIc0kiuy%rYtrE0Gke<<${17%K!iX literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_4/mask_33_4.dat b/src-backup/includes/phpqrcode/cache/mask_4/mask_33_4.dat new file mode 100644 index 0000000000000000000000000000000000000000..5834b6fb5672ddd54227a5229ad248efb56f9931 GIT binary patch literal 89 zcmV-f0H*(V+A}af07FAV1PK%5G9X?BinJkI0ZA&T;SOAYD(-+P$1ng+a^aGIlSHT> vY|E%S29rDBDF$Z>!lD9ODl{aRP7U#;Q^M{*2@gEd1l)nH0+%8HgW}HuoFyU1 literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_4/mask_37_4.dat b/src-backup/includes/phpqrcode/cache/mask_4/mask_37_4.dat new file mode 100644 index 0000000000000000000000000000000000000000..4bf2e26ed0238cb7f0fa88b4a2e8d9f607c6c465 GIT binary patch literal 86 zcmV-c0IC0Y+A}af07FAVG!hE93`kRjsRW^pR8`b;7d}8$cR_hr3_>Eg@JYf+B2^J* sQ04GUMNxbc& v?i_XJs5{AZrvXfsV99_*CH~R|;!aXkQtVEY@FYSRQSQW4Nk}mOMgc#BT0kV* literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_4/mask_45_4.dat b/src-backup/includes/phpqrcode/cache/mask_4/mask_45_4.dat new file mode 100644 index 0000000000000000000000000000000000000000..1b921f3009656cf429e67486e59237b8dd15ff5f GIT binary patch literal 120 zcmV-;0Ehp0+U=A<3IHJpMfaXY?|-@3gj12@{}N1#TnN<@9`Z@`Ei+qoFVPwup|*kU zpmqSgF*>cacXR`pI4*58TFBT1fxMG6XL7wac>{^GqK!9Q$bqGK7QU=)P)>BL}k8 eRu0aQtjeU@>+_-I`CuK_9H00P-1Gn#s>kM_-9E?w literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_4/mask_53_4.dat b/src-backup/includes/phpqrcode/cache/mask_4/mask_53_4.dat new file mode 100644 index 0000000000000000000000000000000000000000..7e88826dd67c8eed58a77ecc7bd6326cd996537c GIT binary patch literal 128 zcmV-`0Du2@+U=H03cxT31^1pt?|->=VN(l5e9snI(1i&h1DSjzs%My4l0%60s2sV1 zUFvoM>Q$%8k$LTH-z$uZ_X`^svLKUJCMj-(<27Edc$MCl9xf#1?;NQB?uAn=uepcg i^-r(*&mns8lo?t9xVoWK-RMw{czy1?FmMC1XBA^pK|VMD literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_4/mask_57_4.dat b/src-backup/includes/phpqrcode/cache/mask_4/mask_57_4.dat new file mode 100644 index 0000000000000000000000000000000000000000..84669c7d65c97c0b040497b32d3d3037c70d826e GIT binary patch literal 130 zcmV-|0Db>>+U=H04uCKSME9Hq?teKq4gQfCYGNWRShRhHSItD#wao0Xdx_S`3}%zb z)6ua+cp@ZJk!QRPPwS|R$7C*c-vtG{7f62E_H57pdBSPpo*a39C`!$ZCqdRc`@3z= k_I%kB_3cxT31n<5^|NpsON^2;!>e@qKa}XLb#Yw^v)q9v(qB=lyhR&g$ zouh+=UGEBA9-;T^egK`j*5&+4Z}?KB16>uQvCipDZ+dUw-O4os=_q+W=RtbJoA;dF m^rrXIyZXXjy>U8x$cKrH<+(z6K0*KBy}^0+esBPHn8I@q@JM_B literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_4/mask_65_4.dat b/src-backup/includes/phpqrcode/cache/mask_4/mask_65_4.dat new file mode 100644 index 0000000..c24343d --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_4/mask_65_4.dat @@ -0,0 +1,2 @@ +xÚí—K€ D÷œ¦½ÿåtX£Ð™.4ÓE1^ÂãÓhv†»OæÍx„ùéW“ð0 ñ°JHÅ»‡½­ðz[ÿ^܈[vâȾ +yy‡ZÀkß=`„™êv·cíǃî…<ȃ<üÚCî/)zàÜ‘×¯× ¡ÈÃÇÎC²Œš"" \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_4/mask_69_4.dat b/src-backup/includes/phpqrcode/cache/mask_4/mask_69_4.dat new file mode 100644 index 0000000..a73b114 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_4/mask_69_4.dat @@ -0,0 +1 @@ +xÚí—;À0CwN÷¿\—ˆ~¤¨;C$3°$<)/m­ºß¥žeÎ¥T±‘2  —:¥]ÿ^VV¡%ƲzAïnÈpv…s"y‘y‘y)zöá¤dÄu6½àª½Gú¾È‹¼ÈËi^šÂ/<ÊtÓrÂrrÚ)9ͤlõrìó‚.¶‡Ö \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_4/mask_73_4.dat b/src-backup/includes/phpqrcode/cache/mask_4/mask_73_4.dat new file mode 100644 index 0000000..72f8922 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_4/mask_73_4.dat @@ -0,0 +1,3 @@ +xÚí˜A +€0 ïyMòÿÏé¡´)1Ý-‚lE3š=Ô}¬ˆ(Öô°9ŸTÇdÎÒò–E/eO ZOžîãÛÅ»KíY;ÛúpS5Ð+‘ÄëNžäIžŠžà| +"©eìvúö+DÝ“æNs'Oò¤WŽkîäIž¾ð„ì†Ìž¸¤FúòrÜi9Î&óô«ÿ ‡]?ÃóA \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_4/mask_77_4.dat b/src-backup/includes/phpqrcode/cache/mask_4/mask_77_4.dat new file mode 100644 index 0000000..993c486 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_4/mask_77_4.dat @@ -0,0 +1,2 @@ +xÚí˜Ñ +€0Eßý÷ÿ?×ËjFe8¯0êú uØN©0Õ­µ‰lB´†6‡:«h·<½õ–§¥CÜe\,¹ †ìÔÜ—~ø & rd0 »Sz£7z+ô–êoº»ÓÜþëäÝŽVâuÊ:¥7z£·Wo¿š ËÎSÖ)ë”Þèmoù3ë O‹y;:*h¥Þ>û¿a€ïCe \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_4/mask_81_4.dat b/src-backup/includes/phpqrcode/cache/mask_4/mask_81_4.dat new file mode 100644 index 0000000..dd65216 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_4/mask_81_4.dat @@ -0,0 +1,3 @@ +xÚí˜A +€0 ïyMòÿÏy‘XE m7"89ä 2’Ѹ ûQ1ݳÌëˆ+¸x‰x;ÅÓt35DIY÷¶1x\:už³ýº•}î¦e/ ê§Æ#ñø¢Th< +‰ùùU¤BzÔË<²×ì5ñˆG<’×ä5{G<⢿®5Äñ<饫>¯]ž×UÄr¿xuÐ ” Üû \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_4/mask_85_4.dat b/src-backup/includes/phpqrcode/cache/mask_4/mask_85_4.dat new file mode 100644 index 0000000000000000000000000000000000000000..c8d5123e26909726dbd71694e1f6697cad51529e GIT binary patch literal 154 zcmV;L0A>Gp+U=P!3cw%?MR!k=-2ZZ2N*jmT*5nJN&mmxtH#~v~YIZJnPs9LfrlsbP zk*TK+4nE7TrIxLs*SC2W7zhg5zDpNC7h5Ilh$5=S0ABHmSG?ji)1NN$BI-ÜõéŸ+ÑpÓÓöH“öÈéÜ9ï¢DÞi \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_4/mask_97_4.dat b/src-backup/includes/phpqrcode/cache/mask_4/mask_97_4.dat new file mode 100644 index 0000000000000000000000000000000000000000..5d848caade31141b6a6d238828e0513940b9aec8 GIT binary patch literal 176 zcmb=p^>&scSAzi$%llg2U;ocnYTk;AQoMQf@D~ArLUH5VhzlL*U+;ClQn_{Ld4Rh8 z>uTAu_q(T_ELu@IVU2P7<-3>5gi15Bf~CWkN@uS0RjmncZrXE$dhO>e3gqq;cwFbMH2i4?0P>DhOaK4? literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_5/mask_101_5.dat b/src-backup/includes/phpqrcode/cache/mask_5/mask_101_5.dat new file mode 100644 index 0000000..c21869e --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_5/mask_101_5.dat @@ -0,0 +1,2 @@ +xÚíšÑ +€ Eßýšíÿ®+£%=ÜM¢3Cbvó¸ Ѭ›«ÍNkû¹´gqõkqq{©%ôO¿ÒòüoçžùÈû,i–¨ÅKÖeœeçÁ3[›|‰îiž¶÷‡¾õ˜ã©V¥¥h]` Æ` Æ0¦Ê•±¸zË´TÔ0Gu×ì/qŒ8F®„1ƒ±3¶:WÊò>õ˜´#ŽÇÈ•0c0öQÆ8»øE=F#Ž‘+a ÆþÄXÖÍž+cV©%9W>ßíQž]Tk©¹“Y-gL¸÷óîq¬DËè‰‹Ï \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_5/mask_105_5.dat b/src-backup/includes/phpqrcode/cache/mask_5/mask_105_5.dat new file mode 100644 index 0000000000000000000000000000000000000000..bc8798c64015b6595105a07645625a572c839c0c GIT binary patch literal 224 zcmV<603ZK&+U=S_3dA4~1n<6P`v0HHC0WDb$gbEE0yT;RFVdN!?Sm0#$x+d(-M&MH zb#RhAbEHXz@r$NR=-U3QPci-P|L%XEWG%ZUmG!BgbTK0LXu8R?&L*=*eAagQlk8Qg zsjyG52YayhPWDE5FUx?-`>CeAIbz1%-fVQSH_Cfi23+1R)r9Zid)&FO2Yavwd*nUx z9(fPn!}qvzVGs6T5BA7=v+3UUic`wTHUd>xK aP2TVA&wEd3Dq=6}&i9BW^E?1$d?(3j3x3!D literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_5/mask_109_5.dat b/src-backup/includes/phpqrcode/cache/mask_5/mask_109_5.dat new file mode 100644 index 0000000000000000000000000000000000000000..25a394402fb8b1d0ebf02b85473522a21235736d GIT binary patch literal 211 zcmb=p^>&scSAzi$%lk^-Pyf$XZV2j*s`A*zF?pKO&MOlNBNgB2F4Ef5es`YjsdLA3 z1GmLzcQ4u+7wuKIGk@pLkJ~=o2#t=t|EsmEP`E4gbGg?&F(KW|<)*sao-4A2zw@dk z3W3o7Ln%e~oL=noQ``Tq@Y3g3w~o|0t6%gi0ZRhqKTiJP`A5a7)9;Xq4;a-6*>}!& z0V-}7~CRaH?+kXgI=m1Q4e>}I|^`+f56tjphW?I(xcpB?4RQpn(Z Hç=>ŒãÃ0 Ã0 Ã0 ÃOf˜z˜3Ž»=>ŒãÃ0 Ã0 Ã0ü.†3ÿ÷ïZ£$¯×·8\õp”ÔÃùw4½Çá:ã¨ÖZÀp¤:q¹ÖÄù§X 7 \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_5/mask_121_5.dat b/src-backup/includes/phpqrcode/cache/mask_5/mask_121_5.dat new file mode 100644 index 0000000000000000000000000000000000000000..9bb5c4158981760f99c1831c03ccf11a664e6053 GIT binary patch literal 256 zcmb=p^>%h3*AWFCm;c4Hp8T7ByMNb~P0`w->X-Iu1WibCj$>!PxYtGF(Dx08H@Bz! ziL_Mtn}1F*CX2(7=TOEDEbWKm# z7n3IwXBH>TO_bgSLC0^-+rs}kq59sv;^g0Fytmmr`w)|MuCvr_`^DT6m?EIk`)9ws z`TOnWP2bl(=@oqXJ10zcK~pjRkXgEU#Yr9g&b-C9Uzp__hM;esZ;0LBZFwcK^7XPb o>!)^ZQ#aoWuYBxxGe&=>)49shxbEDe|L3eseDs4sW73s<0HpnlZvX%Q literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_5/mask_125_5.dat b/src-backup/includes/phpqrcode/cache/mask_5/mask_125_5.dat new file mode 100644 index 0000000..2161c50 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_5/mask_125_5.dat @@ -0,0 +1,2 @@ +xÚí›A +Ä E÷ž&¹ÿåfc;S´¶$?‹‹”ŠØQ4ëáYaßhûyJ}9ºg=×Ú=©liŸ´.;nh_ÍÔýïwzýží.÷qôƒCW”¶üÏȧyº× uëÞë’PkÏ;ÌÃ<ÌÃ<ÌÃ<ÌÃ|*óqëùÎü,‡ m“kWæqçNÊl—%ª ŸÇçñy˜‡y˜‡y˜‡y˜‡ù×Ì×^Ïæ2ä°…sX|ŸÇçaæaæaæaæ3Ï™9lH‹Ïãóø<ÌÃ<ÌÃ<ÌÃ<Ì¿›÷웿Ì[í¢õüên`ì™TíÚûqж8ó¡^—vôy©öŽ« \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_5/mask_129_5.dat b/src-backup/includes/phpqrcode/cache/mask_5/mask_129_5.dat new file mode 100644 index 0000000000000000000000000000000000000000..f0c1d65020884c517fcba84b94191eaac350aaa5 GIT binary patch literal 259 zcmb=p^>(%)-(dqD=JNe+fBrw;rBWIY;l}PP(iGgY;6uuWT>&yOg;TY((|V7;4|rHz z$aHnxR5q=ee-{;mpS}6Fjz8)5|GBsR+cqxEkvegY{WD8>{;97#wkaFeC|)-I_*?FJ zdDOO73mlv68dxKM=*5vkTKXxHkABpxay&a{NAkk7uziscPg`}IW$x!MWZc)F|A2b~ z0~9@B{lrw+xCbP5#sezq5T~F&LHq>w52k$wdRTBP%uhX7dcHJE;G5lvJnQRETQ@vs deIFa2`wqnRlbR99G23{{r2|{+4tV*M007v5c@F>p literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_5/mask_133_5.dat b/src-backup/includes/phpqrcode/cache/mask_5/mask_133_5.dat new file mode 100644 index 0000000..46be8b0 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_5/mask_133_5.dat @@ -0,0 +1,2 @@ +xÚíÜA +Ã0 DѽOcÝÿr]4%1mCTåÉÆ¯„Ð÷xΜ[DvÌ=Æá{Fúú–E¤Ïµˆäq½?Ý¿Ü9ûkeÑ­ù}±'2^ý•cœçš4G”žÛ:¶3=J£K-šôF0‚Œ`#ÿÍHÒþˆwð'#ß<{Ú~—Z4é :BG舻F0‚Œ`„áGø~„ŽÐ:‚Œ`#Á?Âð#t„ŽÐw-Œ`#Á?Âð#ü¡#t#ÁF0r·…ïÙ}Qõš}e¤üÝòR‹Ú;ø<ùçCžéV‹}Ñ—‘ìó¢ËÙY-Hž \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_5/mask_137_5.dat b/src-backup/includes/phpqrcode/cache/mask_5/mask_137_5.dat new file mode 100644 index 0000000..064e7f2 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_5/mask_137_5.dat @@ -0,0 +1,3 @@ +xÚíÜÑ +ƒ0 …áû>Móþ/·ÇkÅ1mÂøªÈXº³ü=‰–ö¾µÈhýÕÚîså×áH"ãk ÇM„:îúê–3qÒOü¿W}ÿ9’Ô–¬I”‰“ýHž1ÙG;þ- Ï©sìîÚ¶ù?Ò[%M +Å v°ƒìü#;£zg^ÝÔ3Õd}Î6‹“Å9ÛÆÎ¨Þ™×@7õ”Ò„ïð¾#gÃv°ƒì`;׳£Þ©\ï$ÔÅåŸð¾ÃwälØÁv°ƒì`çvÔ;ÞÖ}7Êwøß‘³a;ØÁv°ƒkA­µ”ïð¾#gÃv°ƒì`ç=N2wúxg§WÓ¤@n?Ûëc}½SQ“:ûZd?+¨ÏÎú9vÆÎzß)£ÉæÝáP \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_5/mask_141_5.dat b/src-backup/includes/phpqrcode/cache/mask_5/mask_141_5.dat new file mode 100644 index 0000000000000000000000000000000000000000..60c1a8e81acb9a104b1003fe8c362588b053abac GIT binary patch literal 297 zcmb=p_4dw1u0sYqtq*_O`hNbW|NLx;(ly@Fw~{rHnwy%g%&1?U=@uQmHZAgYPUWvV zSwa8P%uLts{p{|I6Ff?XUZ>?fOlh?Hu<*Lhj^j-g&%KHRklY zHSXJ%GR-^MUl+M`k&@0?^TfhtO`k-r;2DQRmi;?;$r6o)IJ{82> zzVP^R$E^#0m%8OX_%_jPZqDCVlYVV;i{Ag?{rvsKSBqQ(C$718!)g|LXx`R)LEA3< z-^TpyQqr?GFC*0AGYu!M2uzSo(E^bzLvI+;8@4U$WERT)%VrUu|y7`j4jj zp4qEF>;UTg{AOd_*}XaECï£*¥ú¬v¹ïsýØ]Åœ_{W!Çzﶬ/ÏÝÞõ÷ÝÅÕ)½Ë™»¹Áöä¤vÿ ›ÏV‘®×6ÜV‘•Þ»ð¹Ã,f1‹YÌb³˜Ê Ìn^o¯¿>¿þí\Oï]øÜñ,Ïò,Ïb³˜Å,f1‹YyVž•gåYžåYžåYÌb³˜Å,f1+Ïʳò¬<˳<˳¾1‹YÌb³˜Å¬<+Ïʳò,Ïò,Ïb³˜Å,f1‹YyVž•gåYžåYžåYÌb³˜Å,fÿïÝukys77—Èì}ïvçŠÉæmbž=¥wÙsw³)ï»tWÖ†Ó:® \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_5/mask_161_5.dat b/src-backup/includes/phpqrcode/cache/mask_5/mask_161_5.dat new file mode 100644 index 0000000..70d5fb0 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_5/mask_161_5.dat @@ -0,0 +1,2 @@ +xÚíÜI +ƒ@н§éºÿå²ÑDp@ èo|m ˜¢ßrHk㨤Ñ~c˜½o³^ÝÃJz­×°‚–#5l»¿î¦S_92Ûî ©“[¯}¾ÜÃÈZÊŸ‡ó=œìTê2ìÿÆ€×P‘™2[cVì衆ÌC–Yf™å'-‡ÛìXÎ9>üv§Ë~u»“½sK5ì`Êe¹,—å2Ë,³Ì2Ë,³Ì2Ëç-ë—ßÐ//¯/o_q¾}KÇç¾ä²\–Ër™e–Yf™e–Yf™å³–õËoè—Ý+òÿ¹/¹,—å²\f™e–Yf™e–YfÙ³úe÷Šx¶B.Ëe¹Ì2Ë,³Ì2Ë,³Ì²g+ôËîñl…\–ËrÙ16Ë,³Ì2Ë,³üì<œv.×r륆Á½Þ¼‚™ýrO5ÌÿŸöÔs_ýZÎÉ”uËI¹_ÃìÞ*Ÿ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_5/mask_165_5.dat b/src-backup/includes/phpqrcode/cache/mask_5/mask_165_5.dat new file mode 100644 index 0000000000000000000000000000000000000000..94af813d90326e83dcb4898dffd47eebd3120cc8 GIT binary patch literal 332 zcmb=p_4alkS5trh>xKGoxt!_!?`Z2*Db#6mYclucZ_V= zotdf6-&SvZv*GR8D7h;;_}1^MuiAF~^{4Rr^~KwcM;_~Y5%sO3bm!TkuUAgq{`4tJ z=-blf&CknX*3G+da{|L^pSsAbX|zx+~B?%Xj;& z;1;Iu;j^AJCF&Z`Lw*|;|Nba-v0r}8=>>Iv>dx&vf52z;Q-;T)bDuoUlH3!|5cNl~ F6aZ#Wx#j=> literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_5/mask_169_5.dat b/src-backup/includes/phpqrcode/cache/mask_5/mask_169_5.dat new file mode 100644 index 0000000..921a770 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_5/mask_169_5.dat @@ -0,0 +1 @@ +xÚíÛÑj„0Ð÷|Íäÿ®/¶niµ¢K¹£'ŠÈÊ.rö:ÁT-m&¶ZÛx9¯yüq§3rÿµOgàv¼OO_zׯ§u`]ÿüÈ·¾ßitëØ§™ãt½Ùñil¦oc¿‚ö1ã3j9Ž%_g|ëÔ§Æ)ûì³Ï>ûì³Ï>ûϰ¿=×teÌ&õþ_ã4¤Þÿ²¿=×t¥UŸÊ}¹/÷å>ûì³Ï>ûì³Ï>ûO´¯Þr½5/u“¹>¹/÷å¾ÜgŸ}öÙgŸ}öÙgÿ®öÕûO®÷½Ûsv®OîË}¹/÷ÙgŸ}öÙgŸ}öÙ·–G½o-w{¬å‘ûr_î{ægŸ}öÙgŸ}öÙg_½¯Þ÷nµûì³Ïþ=ì×n]˜4Nk§Öβ_Êðÿ­÷«M½¿ž¦×ûû´Ï8ím?ñÿ´SF…·<· \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_5/mask_173_5.dat b/src-backup/includes/phpqrcode/cache/mask_5/mask_173_5.dat new file mode 100644 index 0000000..f9a6741 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_5/mask_173_5.dat @@ -0,0 +1,4 @@ +xÚíÛ[ +ƒ0Ðÿ¬&³ÿÍõG1Ðø¢gäD)[°Cz¼±÷eDÖѷц÷=R¾NÏ6²îóÚFÒíJm ÞÏJq÷Pœ}ëxÞö séîÑ_¾õ}¶éGÚF©y;žíú¿‹ +[;ý]™öé¯eÃk[®ÅQbT«m±yË&0 L`ÂÌ„Y?á¨ÇðرÝÚæ¼wØ›· ïfý„£ÃcÇÊÕVNä9Á½˜À&0 L`˜×„Zý„¤}0=F=F9ANä÷L`˜À&0 L`Bz¬Y²fIñß=F9ANä&0 L`˜À&0 ž‹´fIÑs‘r‚œ 'È L`˜À&0 L`<iÍ’£ç"å9AN˜À&0 L`˜ðVÖ­aB¯XÛ"ý„±²ù×,U­m…>Øö± +=Æw˜óZ¶gBΜPª¶” !8 \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_5/mask_177_5.dat b/src-backup/includes/phpqrcode/cache/mask_5/mask_177_5.dat new file mode 100644 index 0000000..b07c636 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_5/mask_177_5.dat @@ -0,0 +1,11 @@ +xÚíÝÑŠÂ0Ð÷~ÍÌÿÿܾحˆšŠ ÎuO,"% ñô:$Xui=¹ÕѶ«×ÕƒŸïô¸g÷Ƹ?Îq­.úÕSo~æz׉¹õWï:ó™·=Žh1cÜqóøèñþ]ì”Ƕ¼îiÇÖ!÷¼ßçírß8Æó˜¬`+XÁ +V°‚ õеÓê»j›Ïjž;—8ÆóX®+ä +¹ÂoV°‚¬`+XÁ +V°â?[1µ^ñh-Ö³5Z;§¶©¶ùrmS®+ä +¹ÂoV°‚¬`+XÁ +V°â;¬°ËZ,µÍYµM¹B®+ä +V°‚¬`+XÁ +V°‚ö™Z‹eŸ©Ú¦}¦r…\!WȬ`+XÁ +V°‚¬`+ì3µKmÓ>S¹B®+ä +V°‚¬`+XÁ +V°¢cþò㊛Ç{g;¦^Qq5¡ZU»ÆÕÝ®ûŸQÛLã0+*&YDqÈñéô*6 \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_5/mask_21_5.dat b/src-backup/includes/phpqrcode/cache/mask_5/mask_21_5.dat new file mode 100644 index 0000000000000000000000000000000000000000..04f97ea6983c85e1cf6e68150ea02bffa30a4f4b GIT binary patch literal 74 zcmV-Q0JZ;k+MSL;3IHGo1n<6P=l`E8qQc53Ts_3F*hoFpjJL@ppoFxt|L%<{=GéÙêŽZùyÎ:—ÜDRŸ« \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_5/mask_33_5.dat b/src-backup/includes/phpqrcode/cache/mask_5/mask_33_5.dat new file mode 100644 index 0000000000000000000000000000000000000000..726d7fd75da51d6bd7737a41e0120162ad66f42d GIT binary patch literal 106 zcmV-w0G0oE+U-+G4gettyYm|Q|Ibavg*ZYTH6AU510hWtK(zoJYG1SgT>VVIrQ<*s zI~>0{7>;PQoL380wan9y;(obh5mL~qPG^u~gT@LOIlD;&&=vfsD8 MtZP z6Mwy=xtNYJP8P5*q$8GTpmRmFxG+$uUgBJr@iKnar8ktiR$tD;xa+0O#TdC4Bt{5~ JuLf_z1Mr1%Fq8lQ literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_5/mask_41_5.dat b/src-backup/includes/phpqrcode/cache/mask_5/mask_41_5.dat new file mode 100644 index 0000000..e07c617 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_5/mask_41_5.dat @@ -0,0 +1,2 @@ +xÚíTA +À »÷5Íÿ?7˜«ÈXMtxÒ´x©¤ …¸?@‚˜›7@ò¾~"éN$õ‡SÖɰÄ{ø+C³¨ÛA'Êör\PŒpè<Þ÷-¼ ͺ:S3s¹Ô‰ùÛ»ËÞ©Îz#žóqw™ó› >þ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_5/mask_45_5.dat b/src-backup/includes/phpqrcode/cache/mask_5/mask_45_5.dat new file mode 100644 index 0000000..5168a17 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_5/mask_45_5.dat @@ -0,0 +1 @@ +xÚíUA€ »ï5íÿ?ç„U:N&Z"†”:;4P1=ƒbNvSGÆM1¶ÜË›½n<ëv`q³¤{ìîßMg§ã¶4þå=Gó-T¹‹º?›“Ôß='kíÈu™Û­ž“õ>‘ëß'¯®çþÜ(éκŽö Jô{EßѵsÊ]È ,§sqð \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_5/mask_49_5.dat b/src-backup/includes/phpqrcode/cache/mask_5/mask_49_5.dat new file mode 100644 index 0000000000000000000000000000000000000000..9f3f3cd7d60bcba44d9223f52747c1cc9a9feb52 GIT binary patch literal 146 zcmV;D0B!$x+U-_B3cw%?yZ1HC|3A0G94cx|E9_(x5y8cz*3P{E3|?W)+(E}-2WX#i zfHZ}}1&-ONsSXt<99&1;WS;^gJWwdf{AS1((&~d%`->c<{A($VpSL1s{ zRx%t39rs?{9Nck;b+FN)RKeb>Q2ppQ^!)JYKLg9b6OOo!Q?K^%$i!U415hQ$TboHr A)c^nh literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_5/mask_53_5.dat b/src-backup/includes/phpqrcode/cache/mask_5/mask_53_5.dat new file mode 100644 index 0000000..449807b --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_5/mask_53_5.dat @@ -0,0 +1 @@ +xÚíVAÀ »óúÿÏíâ"Ë zYf5ƘJC ª ˜A;ÄÜáé¾Âlû\˜,†ëdòR.¯ \(åe_Ýú ³æôеaNi5†ª\żކÿÐÐë‡aLPòò(¯ÐàÒ;×ý±2שÃãå¯jÈN6O u…+é¯Ñl{y•«6odúá^ ãÚàçC[‡%® „ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_5/mask_57_5.dat b/src-backup/includes/phpqrcode/cache/mask_5/mask_57_5.dat new file mode 100644 index 0000000..c7dd81f --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_5/mask_57_5.dat @@ -0,0 +1,2 @@ +xÚíVA +À »÷5Éÿ?·‹NÝlªƒZ‹HAbB‰Z0aÓ ìÎMÆÒÃd`1Ýz”'"<Õ1™æ9nvͨ.ãô )bÝ»µ~¤;˜Ÿ9ú¾ÕZ#tõBÁ~ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_5/mask_65_5.dat b/src-backup/includes/phpqrcode/cache/mask_5/mask_65_5.dat new file mode 100644 index 0000000000000000000000000000000000000000..ecd9380682523494a1f5577c6e22eff92571b446 GIT binary patch literal 163 zcmV;U09^lg+U-|C3IHJpy!#sG|DW4SODL(th;FD_Ol!+`ptx^N zLEU#+P+TP~hiEM?kDlMYCn2{Nokr`dh z=(A4`MyHt}6_aUUXNJM(G}onKt|Qlx8JUq8UCD^KPfsl&$;;O(L#`i%q&M<+dnDc& Vax;Tki-1v3l_b|f_yg_whE8s3Pu>6k literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_5/mask_73_5.dat b/src-backup/includes/phpqrcode/cache/mask_5/mask_73_5.dat new file mode 100644 index 0000000000000000000000000000000000000000..00001176d018bd72f9f2128f2f0bf775aab99aa8 GIT binary patch literal 184 zcmV;p07w6L+U;0d4uBvG``>BS`(MrYR@be?`f zXg4__uzEOkK6dEjx2oLg#9{`gm`?j=wt4_|87ivOHqbF%PAmBX8kw9Db&_}T?ycUn z`rYuGA*p6w>oim|H}6{gZul*glk!e^C-3Cl6W;y1W(Io8^nRzjQ{KtDFL+1JRVtmB msmjs2lzG8{6JIm^VkS0TGiPwh(`lA>@p#INaS{u_o$71Ó/3ò4ÎØÎªz÷^'ÑÔÝ[˜Fyglg•®M>•OÅTLÅ4Ï”{÷&3ëWy*ŸÊ§b*¦ï`ºÚ<3õ;´‘îÞVo0÷/s—6nÿ‘§Ï0Íya½ß[û”ªmácE \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_5/mask_81_5.dat b/src-backup/includes/phpqrcode/cache/mask_5/mask_81_5.dat new file mode 100644 index 0000000..71215e9 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_5/mask_81_5.dat @@ -0,0 +1,3 @@ +xÚí˜Á +À Cï~Móÿ?·Ãtz°U4½ŒÔ"£ }tšÕÀMX2|.îÉ‹¸Ë™F\œžð¸õÑÂ~mõ‘4 ÷±¿ØXu +Ù”, ÍÌw—:— E†Æ„>еXÿõ̯=_Ö]g>±>óÂÆzæ×ž‡/ë)5ךk±k±kùµüZs­¸X‹µX¿¬Y{Ü®Ñè}ô¶áç~mt¿æîšìÃÏý:S#™µÑ&;U#)ñÚä \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_5/mask_85_5.dat b/src-backup/includes/phpqrcode/cache/mask_5/mask_85_5.dat new file mode 100644 index 0000000000000000000000000000000000000000..09cf0e28127934862f45b0f155ede22e48833cd2 GIT binary patch literal 186 zcmV;r07d_J+U=P^3V<*S1n+rG^8e3yuu_X!YO*T`o0cLu)Fn>SVBDKU)x4XXo;}Lz zW!EUrTdh$X>snv=m*blAkGsN*t+gK4zOfzOFOb9L?@mq&=-FzkwKE)0V`(MDRSbv$ zF(3xMXCUdfAl$J#15Y(!+RxHTimUQ~@_-l+17bi7s2)%~pgf>FAO^&M82AqZz<$9g ouBdLo$N>Dm_MjDe$NHpal&=TaS~+q3j)5w#tg{8Q4HYg~22k``-v9sr literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_5/mask_89_5.dat b/src-backup/includes/phpqrcode/cache/mask_5/mask_89_5.dat new file mode 100644 index 0000000..5fff530 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_5/mask_89_5.dat @@ -0,0 +1,2 @@ +xÚí™á +à „ÿû4Éû¿Üþ¸5eÆÙå®npQ¤´ Gú™cÖÍf‡µðl^^‡;;bŽ5;`¬k¶©¶U͹߮¾ßj`ÍNósÜùùO=Ú\[a6‡žÁ°¶~ÞnLÍD?‹ ±!6ÄÆ°ñuüÈF%w¿*Ȭ²ÌkÎù¦f¢Ÿ77”SĆØbƒÃ†êXodw_ùØÂ—mµ¨â†â†ØbClüÈNÛ™ ck&äîY¯­VoÜ¡™×·B×¢»Ø¨œAl6Æ šæJjÜx \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_5/mask_93_5.dat b/src-backup/includes/phpqrcode/cache/mask_5/mask_93_5.dat new file mode 100644 index 0000000..ec4240b --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_5/mask_93_5.dat @@ -0,0 +1,2 @@ +xÚí™K +Ã0 D÷>æþ—ë&©»ð¯µ& áÉÆ fP^”ÁŠ8BY5ÊÇs(imœ®¼ÙÒ®¤±®=f—µ÷3¨/wÛ§§‡E»¬y¯§ŸïYŽQ¦wf‘á[}¯å¨ ²„[»9ï0303ÏefÇÏÌ™Ùñ3'3=<òÆK{níæ¼Sg¨3ü›`f`f`æ¿Ìdø™ÞÞè®oiü£¦ÎPgø7Á ÌÀ Ì܇GµjkÞG]í}?V/æë kÒ×Þ÷ÀWi72–Js™vÃ|*"f^ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_5/mask_97_5.dat b/src-backup/includes/phpqrcode/cache/mask_5/mask_97_5.dat new file mode 100644 index 0000000..509d117 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_5/mask_97_5.dat @@ -0,0 +1 @@ +xÚíšA„ E÷œ¦½ÿåf!3bf5í¯Æ¼Bˆ‘ùé£|#f=<3l6<›§Ž_+xjÿ©ÁÛ) “ÙÝ©Ãy°“ïÿ¯ ‰J ¹yXiïÜ»ª5¤IzsÙžîcëuÄeQ¡¡ °K°K°K·d)â—>,ͼwx®DƒÖ·.,;ãÂsÔ%êg,Á,Á,=€¥ëýRÐóὓ¼7u‰ºÄK°K°ôT–D÷†<(n lY’þŸÞhÐùVÛ¹s÷Þ•ôy¸Œ¥´ýP±§Eñ<¸öq \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_6/mask_101_6.dat b/src-backup/includes/phpqrcode/cache/mask_6/mask_101_6.dat new file mode 100644 index 0000000..13f97a0 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_6/mask_101_6.dat @@ -0,0 +1,2 @@ +xÚíšk +„0 „ÿç4Éý/·Ën_.‰Ê2#ˆS‹H”6±_“PâÞZ ›Ïf˳_¡îé,ï7ØžÛà+·%×åWÇÂîd„–âÏnå}–“_&«Ok;Œ×úP¾Çfµ>³t‚yY×¾]Öns °;s·æs‚Ú,º!Lk¬ÁÔ…cbLŒ‰12cÔX9Ëó1 ÔÀZç#XÐò±En#;ÏsvŒT~L~L±RŒ‰11vsÆ.‹•”³‹1‚ò±¿ò1ù1ù1ÅJ1&ÆÄØÓÙŃó1ù1ù1ÅJ1&ƞī²gËØ KLƪjl¬¬k{g¼Úž5óKò1/ëÇù¯~,aŒ»ù‰õc««ö$“Þ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_6/mask_105_6.dat b/src-backup/includes/phpqrcode/cache/mask_6/mask_105_6.dat new file mode 100644 index 0000000..a58fec7 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_6/mask_105_6.dat @@ -0,0 +1,3 @@ +xÚíšQ +ƒ@ Dÿsšäþ—k¡®ÙBÒZ»#o)Sd}ÌGÜ·Šå¹lú쯯Ö^‹žúú³®)G]Sñ4ÝS×ëšÞÞñ¸ó?½#BºZö:Õã+{þñÅ×s§ÁH¨KþNóiIŽÂ!¦«mþòe1 +RWe9!ÿ¡`ö`ï¶ìUy¯Ë€§uë:檞»ëÖåšU=w×-ûo•ÔºwB·}cMÞKßÃ÷è¹°{°{ä=òyßÃ÷è¹°{°{ä=òyßÃ÷è¹°{°wSö¤caoìi'Ýföºé½õyO=C•yO=C•y¯›ß[Ÿ÷Äó{SÞ»œ=—;Ÿ|v4}ϯ2‰¨¸0§ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_6/mask_109_6.dat b/src-backup/includes/phpqrcode/cache/mask_6/mask_109_6.dat new file mode 100644 index 0000000..be7b474 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_6/mask_109_6.dat @@ -0,0 +1 @@ +xÚíšAÂ0 ï~ýÿÏDBHÓC½HãV2‡Æ0Ùn¥uoªò£løì¯¯²¯Ë»=Û¢s9[ˆŽõl'«ºÝ?™íë7ÏíR"¯ &“§Û2™ÕßÏ:7QqX_•n» §û]£$ÓÕš–EIYôÁ*¦³ÆL”üq0 “0 “0ù{LJýäз(s\ɳwœô¾‰¦X÷-Ó7^öÑIt„I˜„I˜„Iü$~?‰N¢“0 “0 “0‰ŸÄOâ'ÑIt’g7LÂ$Lþ-“›„¡€Iuzrfr M÷“^ê'}“éÍ÷“•ùÉ(ÉO~RŸé]1Y²ãLÄžuÒå9ó¡QÍÓ• \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_6/mask_113_6.dat b/src-backup/includes/phpqrcode/cache/mask_6/mask_113_6.dat new file mode 100644 index 0000000..397f527 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_6/mask_113_6.dat @@ -0,0 +1,3 @@ +xÚí›Ñ Eßû5ôÿN£°¤Õ‰ëõÁÃÈbF6¨on´¶¯,m›>·gSÅ9ìñÞRWã½ðˆcŒÇ•9Œ&»%‰1ùöÏ_÷Þcx= GR^°šw-z?Ãêdzõvî=î,¹ê°}Ô¥?ǹژ³:Å9œmÓ=—ó=@U”¶ä²‰„UX…UXýVe ³ûÕÜÅ~Õby4WúÕéiæ¿:Ýe=ó‰ó¡+3}u4V%s*ZZGM&;I{^hb=04yIS((dxvZSQzT-ftM{l(nX+lN_8ODT@5*n+ z7_UD(asGDJ=LTuwGLL68OD>x%-!8VhX~z9)s_}nsM7#IRuTu5NlE1M}DE!~LqHV#? z>Qf#_+}0{yXSc>}`Oi7KFW*{qHhjb7t7W#OJ7->RxEgr--0aihQri-x!RWX2w$z_x z-{(K`{`B@#S%`O<>9f@NPe0F}o}Zti{rT€ù’õüɼ—Æú$<>¯OÑôvòÊù'ÅûËåCçÑytæaæaæaæa~›ùòõ|êžÔÙ'9li‹Î£óè<ÌÃ<ÌÃ<ÌÃ<ÌÃüóìI‘æç°è<:ÎÃ<ÌÃ<ÌÃ<ÌÃüóÙ•WæÇ²¸‚y¿:.z=¿ª ŒÝ“ʯ œsØVšÃ¶E=ll›_k0_#võ°³Î¯˜mÝ÷›j \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_6/mask_129_6.dat b/src-backup/includes/phpqrcode/cache/mask_6/mask_129_6.dat new file mode 100644 index 0000000000000000000000000000000000000000..b4695c3ff0d8ebd6925d8af5e0b403d5974ed46b GIT binary patch literal 310 zcmV-60m=S&+U=Xs3d1l6Mc@4z{r{iaU`b3tw}-Y`#z{*Vj)K^nc<+O%V_D@=U$Xty z&tEmqAcJ?j?v86TK^YOR_hi^6CyeFRR#Fmw^kkN5f+OzB@3mz7YhU+_46fxbXrKqJ8dEWiRRzyf{&zkpxBFVGk0 z3uq)*fCX591z5l@;1}=<_yzg`eF2RG3$OqSumB7A1^fbj0lz?Bpf8}2U;!3j0T%w4 zg_beb0}DNqzB>!qv~!(b=$i3#ztA<~>3$)bcdqjbP4mv1Uw8})+SVD`X8*k}X!oJ` I0%mGk`PF`vEdT%j literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_6/mask_133_6.dat b/src-backup/includes/phpqrcode/cache/mask_6/mask_133_6.dat new file mode 100644 index 0000000000000000000000000000000000000000..40911dc575dbbb17a4a057a46521c47b159138ca GIT binary patch literal 296 zcmb=p^>&UUU$X%Z%lo?CzyHr~4f5p772*@!y+W#4z-aoFvniX|)r-4>+}{b_t=?z1 za^B%Uo6C=?Bf5p+A4mDPRY%qZb+7;LH~IgZx!WufT|#LdH+*}lvf|jbWz$U;MJdj?+L60%T4~Y&jvfg5!>uf4f9dJsH`X7Hoj9}k^e4rC zS0C4C)Ev*0lXY~zAowlHfJqsIn&c1mKXCt`{DQ-(sSmClB=SSBgaxSfM)pCdp>-_w zAk_;%Y9X4Ll¾sÖª‡ìür6öö¸“6‡«ú°6ÉrÒŸ¶=ûüv¸Ú²þWy±Ú ¢¶Š-¸Ê' +ìÀìÀΟ²ãÅ;q tQE>U–϶öf‘¯•ê³­ìxñN]TcÑ(sâ®7tÝAwðÙ`v`v`v`çkvˆwfŽwtû;]«ùÞ ;躃Ï;°;°;°;çÙ!Þ™;Þaoôå]ºƒî ;øl°;°;°;°Ã· | Ê· èºƒîà³ÁìÀìÀìŒì(3}Œìl.­š?«…"Þ‰r}äÇ;Ú\}¼S¦Ù-AžœüwÚ<9;úEVœ'§×ˆôó¡ð \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_6/mask_141_6.dat b/src-backup/includes/phpqrcode/cache/mask_6/mask_141_6.dat new file mode 100644 index 0000000..0340409 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_6/mask_141_6.dat @@ -0,0 +1,10 @@ +xÚíœa Fÿ÷4íý/§‰c Òêâ¤]òزÈ…¥ª[²¬¤=Éð[E럓ÖÜósî¹m,éšÛfÒn/ß|kj\ä¿òj§?g½ÝþòÈ[qþû(NO˜Zc5ûŠ©SGGP[oM×Vá’Ö¸´éf¼¥÷vÖL<)r%zGej;*ZC7u5PHroFXT;2T zErAz-@(#{w+P}?wqtMJ3uDW8^Zp>M}^Fr0Lpp6sHMCtS0T=zSWcURlGh1q8m6XBZP z)<+zU-@Sal+U99%rKBCNUob7{wNzPiPzs9vGH3tDF8^{p;9$q2z5quaE#u5AU!HIYpjb0cSa)^E8M?_KmSO6tj)==bYa lKD}5p(yFJjBc0i__3AFOq}<9%1{c=3R{)onxM=_Y literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_6/mask_149_6.dat b/src-backup/includes/phpqrcode/cache/mask_6/mask_149_6.dat new file mode 100644 index 0000000..69e9883 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_6/mask_149_6.dat @@ -0,0 +1,2 @@ +xÚíœÑ +ƒ0 Eßó5ÍÿÿÜÆfµƒ47ÍÝ8UD“6Ëñ’ÓÚ2¼z´mØpßž¦ªk8«»¥öŒ}åÅGì«ÉôÓ•ÅëN}?}æÄW“:ƒÈÚguàWA´ËŒ7 ~Û;­)ƒÇâãØ{̪ǿ+ÖWPþºOÛ¢¤öÍþrµEƒ\j˜wG)yË–àw©À‚A„A„A„AM%òÁá™æ2ùà`µµ2«’d”³l–¯àÚ|p}¦eqP’¢ƒè :ˆ    Âàe j想=úlïþT5™©É ƒè :ˆ    Âà© ²Gÿë{ôÔdö×dÐAtDaaaaaï&Ø£§&Ãwè :ˆ    Ö1¨ÒÙð•Á-MRb0éÖW˜f½ ëöèuzŽ5™&Y“iIѺšŒNÑ€A­—»PÑQS«ÎþL}4 \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_6/mask_153_6.dat b/src-backup/includes/phpqrcode/cache/mask_6/mask_153_6.dat new file mode 100644 index 0000000000000000000000000000000000000000..3ab6130edd889298419b702ce1dcfddfda30cf2f GIT binary patch literal 367 zcmb=p_4ZC+-eCoSmWSnj%-{FNXq%daEZUK`+NjemCo*t?dCFURVYiCx+AY&AWaXz; z#Mw80;rtkb0d8YE*wD7uX)inq9ZVuZUFDP(T@8+N1 zd)6dxd%yYT`R@txHxIga-#%q{p=18$LjAv|)HMzi=qI9z_Q`c5T9@Wu3#VwUI?XqmF<#Ov^FVyZX znO%a=0o3e&KJ815aoXF1m16oYp6*fD?Jm?ru;I^wH)p;*n7!8a0qfl_O<0VW z=e+S-gZL9m5s=·ÇW³Ã³»—CöaïzÈ6îÝÉUü¼~Ò»·{`ný•ЏõÙÉÝ»dvVýy~µrÒ·Z¯"çq·Ûk{>g$ÅáXK¶õÈU}m\b÷ja¤GÞx˜Å,f1‹YÌbö¿™òÙ]½z¬‘­Ìž½ƒš^¯.ë5Ó[?Ö嬜•³r³˜Å,f1‹YÌòY>Ëgù¬œ•³rVÎb³˜Å,f1‹Y>Ëgù,Ÿ•³rVÎúmŒYÌb³˜Å,fù,Ÿå³|VÎÊY9‹YÌb³˜Å,fù,Ÿå³|VÎÊY9+g1‹YÌb³˜ýŠÙ‹ ½̦M7>2{9zºÏ¶hŸm3Éçûlò|ã9ßxóÙ¼™ä#f#Ÿx•6 ÿ˜³-îvë%…N' \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_6/mask_161_6.dat b/src-backup/includes/phpqrcode/cache/mask_6/mask_161_6.dat new file mode 100644 index 0000000000000000000000000000000000000000..ecec68b1ac0f7ae45685bed5d752ef54a48f0f3e GIT binary patch literal 399 zcmb=p_4aOH-eCm+*NgRG%)jr)tiI;gamK_~Was)*2d9a$rlzvVFd(`Vxt}K4Lw&$1iobzS93uRn)?%d|f?w*sGT%NE> z{5IRU4qg|XWXaPJc9Wm(u=|#>w)ceHw=b*9PWtu#%$j?0UgYIfVgE|yed#NsPfj0ye)_BM^UK-)PTmj)Dk+(%2Qn6>@Mqw( zr>Eaf(4VdSY0^ghT|OXlU~(X3o3@I6N-cI>vvvVU=j&u7z0uK%@n+#iZgHXOO4Lz* zS5klalWD4FYUNJv>X3bV?!C6tj6Zkhb=|q?)qi3p?yJdny>uh|S+%y9&hsv>7uDKn Qv3e2bEbSR&we7b907^~O^#A|> literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_6/mask_165_6.dat b/src-backup/includes/phpqrcode/cache/mask_6/mask_165_6.dat new file mode 100644 index 0000000000000000000000000000000000000000..d641dfa3dde2565c932c7234b4521d35c4a1af0d GIT binary patch literal 400 zcmb=p_4e+=tY!lV)(ihDXFd5FpVz$dq?^)Rf%2utrx}%SOWEwLn>i_J`_iSlTlG_a z?5xW@^>fafr_X<_`MyU#`bPG>>Gu53mUJ)QUoZ3jlYiaKTYL1ypC5hw`u4`@;aj#{ z65c&WV*jT2f7ha_kN&Vtzwen{t6%P~`!n?0+`iwtWbQAWZ<=}1xMrHJarBp;Hbut9$M7_G_mM zcbUq6j_Pl_yVJGrbfKl*aj-TBao%v9T>btkn@|5AAOFSPyYnPS{;9>|9^-RRg7etb z$M3`Xce6j+WoQnP+#v(96>7#EW6f8E-w#x%VH*A2r>p9Yt-(CciI0n7`gVuGb;wx~J!=SaTlS=q~KGûì³Ï>ûì³ûãµ¾ +õþõ'{«„Õ§_õVËŠÚx­-âJýËø<ӛܗûr_î³Ï>ûì³Ï>ûì³iûêý;×ûù÷öœr­OîË}¹/÷ÙgŸ}öÙgŸ}öÙ¿¦}õþ½ë}÷ö¼x­OîË}¹/÷ÙgŸ}öÙgŸ}öÙ·—G½o/{{ìå‘ûr_îûÎÏ>ûì³Ï>ûì³o/zß^÷öØË#÷å¾Ü÷Ÿ}öÙgŸ}öÙ¿†ý£d²ì'ŸÊ³µ|ÔQR½ßNSï·Ã3¹’êý³œËÓãÏåYÖú²ÏäÚ³ÿ‰ZÉ'Çms¿EŸÇ·j›5ø \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_6/mask_173_6.dat b/src-backup/includes/phpqrcode/cache/mask_6/mask_173_6.dat new file mode 100644 index 0000000..95fa97c --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_6/mask_173_6.dat @@ -0,0 +1 @@ +xÚíÝaŠÂ0Ðÿ9MrÿËí¢­M SÜ*:a_-²5hh_¿)©uÛZÖ­[éþ®÷¦lïÓoûÛ’sŸmKúšíø›NÇ{òÿãHÌ?x­Ï`l‡#fï9>’ÚŸ[¯õeé·Ð„ÏŽß“­¡ ï?þ^ìóöm÷ó®­ð*û/KËm¿—ãhËy%ÞËv-nKl¥í»Âè–í¤kK¸L`˜À&&Ìê g5†¯µ•(·gºwxôY¢ÜžîÞáa¬žpVcøZ[‰Æ#O=¡ëSNä9Á½˜À&0 L`˜Ç„¥ê ¹ç't­jŒjŒ]QNä9Á½˜À&0 L`˜Ás–ÌYRcü@QNä9 L`˜À&0 L`‚ç"ÍYRcô\¤œ 'È r˜À&0 L`˜ÀÏE𳤯è¹H9ANä&0 L`˜À&ü²¯ 7špÜ6¯`Â|õ²¬õ„hm¸œs–ò¯ ××ëR5Ƭ™³Æ˜½È‰ k\ÌX/²Ï ‘ )÷g9È \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_6/mask_177_6.dat b/src-backup/includes/phpqrcode/cache/mask_6/mask_177_6.dat new file mode 100644 index 0000000..e9f0476 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_6/mask_177_6.dat @@ -0,0 +1,14 @@ +xÚíÝÑn„ …á{žÞÿåÚ¤*4vÛ´u¦û¡1‰£²ø{f{Š¿Ð¿³_ñù,¶,K9o 4ŽÇµôù7lËñÞniJiggiår<¤-MGÆ +¬À +¬À +¬À +¬xuVÄ÷+zÌÒRøCÌr9‡+Gqç6ÞQWžñb"ø×Qe×ï"ùWLº‚® +è +ß XXXXX/ÁŠ|~Åj,ÖnŒÖmu¼MÞæÚÛ¤+è +º‚®ð ‚XXXXXñ¯Ya,–±X¼Í;¼Mº‚® +è +ß XXXXX晋ež)oÓÓ˜Þf’|¦ƒ·™–5²H“û¸ëŠší¥÷7/D \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_6/mask_21_6.dat b/src-backup/includes/phpqrcode/cache/mask_6/mask_21_6.dat new file mode 100644 index 0000000..6bd505b --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_6/mask_21_6.dat @@ -0,0 +1 @@ +xÚQÀ Cÿ9M{ÿËi]èÒýX‰1¤À Å-½ C!»É³Dìû7 W ìÙœ§Ø&rDñ)~Î]<MÎ ·3(>{ƒïA ¡«ÿíŽa²¼Sý \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_6/mask_25_6.dat b/src-backup/includes/phpqrcode/cache/mask_6/mask_25_6.dat new file mode 100644 index 0000000..d45083a --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_6/mask_25_6.dat @@ -0,0 +1 @@ +xÚQAÀ »÷5öÿŸÛ2)êe+Ä(XmÊZtÆ*(õÚ¹«;ÃçtJã<峂†_Ú¤‡3°oŠÜ½Ú´"Ì¢a²zh}Ñ&qv€µSGÊÖ™,ó-÷‡™J›Í4}³™¦oS[âü}w \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_6/mask_29_6.dat b/src-backup/includes/phpqrcode/cache/mask_6/mask_29_6.dat new file mode 100644 index 0000000..0408e22 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_6/mask_29_6.dat @@ -0,0 +1,3 @@ +xÚÕRA +À0 ºûšäÿŸÛXcÔõ²ÓL(4E”ÔˆB +8CÖܾ޳nÃM©+lǪÃÕ†Ožé1]&•Ú¥4UëD-6-$:6ÊdZá?yæÛlôÝf£?í˜ åŽ8?žß²±<Ûlôž}ž¹g›göí * \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_6/mask_33_6.dat b/src-backup/includes/phpqrcode/cache/mask_6/mask_33_6.dat new file mode 100644 index 0000000000000000000000000000000000000000..8de4ba5c9ba9a264cf4ecdce048414a103ca9a4c GIT binary patch literal 124 zcmV-?0E7Q{+U-*@62Kq`+j$N7|L58(kh4fSIW}?*IZa71?g=y$Z@wV--1ieV|EfU) zZS5LeWzbl=5S@-V;-&hAT2>bTQ5IjGy*#_+5FlYF0i|O3{~#Ory&Utx49Pb}M!qqU eGB4z0Ua0$-m+;~$`<#o+3+E#9Qgs1fkI!%T**fq5 literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_6/mask_37_6.dat b/src-backup/includes/phpqrcode/cache/mask_6/mask_37_6.dat new file mode 100644 index 0000000..b37ff0a --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_6/mask_37_6.dat @@ -0,0 +1 @@ +xÚí”AÀ &ýÿçÚT `½ôèjB{{Ok%tdtlP>c!Jq2?sR|6OyXBED_#CJGJ|{4?o|# zWi31{IkRWty7H{19EeICVF#bFBLK`Sqohq!P3c{Hxke=hL*^psZ< literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_6/mask_45_6.dat b/src-backup/includes/phpqrcode/cache/mask_6/mask_45_6.dat new file mode 100644 index 0000000000000000000000000000000000000000..a7da7ee0297b6371bd3ebf57467f009712e40cd6 GIT binary patch literal 189 zcmV;u07CzG+U-?A4#Xe`yz?6P|L3|%6(}8a+S4YxXiTkkisJyP!>lt6lk}|T(tQNG zKksqJ*w!?R9dPAm82jdF@w%LHYmk%ah`(8LQqB>(=edn(GCywV&RxRO?k3YHLkmWk z*aT+KWsqQ$<3Gg7PA4uT3C+}K0drYmWeGYb>)1(p7ta_qgP{3eCtn>q+w^_mWM3IF rC#dT5I$?6GuTnWSVh7coK6Z$@lVax;CrT-Ws>PubeR7!xL?VGyGa6i_ literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_6/mask_49_6.dat b/src-backup/includes/phpqrcode/cache/mask_6/mask_49_6.dat new file mode 100644 index 0000000..64ded70 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_6/mask_49_6.dat @@ -0,0 +1,2 @@ +xÚíVQÅ ûïiàþ—{K&·ÂêÇûYX¤³ØÙ0ï̦!=ÛýŠ­tÇån&ÅðfpŒWL +±`¤/¯<Ï“KVrU¢\1öbGpáê@ÄìÓ‘&fNëŒ/+ƽqÙà ¢`ðàòAWÿçêSƒÉßRGpõþ_5|Æ|zÀ×xν:¸¢ªåJ©‚+WE©m4hÛ4Ú3tÜ­ƒ.×Á©A­g`\ÉÒù¬÷ʤþ*ÙÅFÈô \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_6/mask_53_6.dat b/src-backup/includes/phpqrcode/cache/mask_6/mask_53_6.dat new file mode 100644 index 0000000000000000000000000000000000000000..9139e325901037a409a2a2d317141cbd9bb27807 GIT binary patch literal 195 zcmV;!06hPA+U=In4uBvCMc?@v`Tw7*ElsG)6&_ona}B4=6R_J_H(gnqCg!_cThR(n zojZKuSh^TEmcRQQKZxaCGEO}_fJWLvh7ncHkT}m%gO65*3_i=>Wv5I&JTu%XJ;$_U zq9afxnshi?de~<88-}PKQlCVXOM8jnene{dW{CPB^@+QK_CphY=i#p94>Qav8_#g2 xe}y4d8>?E5v<_Ý`åÃî8¦޹€GÁ1“œ`–B”Ý`;»ù+ØÂì}åÄÌØ&s£ÒçŒ]<§J…QF=mb3 UŒF'ÚØ6¶Æ–á„E âü€¹5õJa÷wZØÖù60¢¬ +ß[¹·ë¶9¡±ý9¶”ì{Á–SšÛ\Ýž8Õ`k&­Áœos}{â[Rß¾ý[¥+—þwðºÕO‹èd^jW \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_6/mask_61_6.dat b/src-backup/includes/phpqrcode/cache/mask_6/mask_61_6.dat new file mode 100644 index 0000000..f2d3f10 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_6/mask_61_6.dat @@ -0,0 +1,2 @@ +xÚí—KÀ D÷s¸ÿåÚ¤µE~Ý‚ihÌÄ'™ +ÑŽÍÀòNÏ'oVWßéà£jspèÚCzÓþìÑο©¥ÃaÌÏg!«…#WD%~Ü˃Y?±JÛfŒÚåR€E¸¢ŽÁKoæÍ¼™Ç˜§ü|Ƀˎ*ÌOÿP7 Šž‡åÛn¾ë¼½¥™7ósã†`ž½ïÌÍÖÀõsúåçdôD¾Ÿÿ¹Ÿsé~>ý<ßiÌK'Žl'¸×9¥ûÐ%.ÆîÄ7 \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_6/mask_65_6.dat b/src-backup/includes/phpqrcode/cache/mask_6/mask_65_6.dat new file mode 100644 index 0000000..550fc8f --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_6/mask_65_6.dat @@ -0,0 +1 @@ +xÚíWQÅ ûïiäþ—{KžNLk?˜e$ŒQ´ikÝìÆÚ4¸çö1{˜á‰ð×`+®!úÚ®ºM Á? áû “’°È1b°8†ž £·¦.ŒÞ^ƒwÌÞò¹ìèsn²ÁFjè5¹…EaQX|‹=wä¼@°2v<òŋŞ»‰–|4w»êê\ÔUXÇBQz+óÊT±ÈTǹÖcøBÓzž/4­ç8Õë,‘»5Ý`¡¥¨»ý¹È± üOV$ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_6/mask_69_6.dat b/src-backup/includes/phpqrcode/cache/mask_6/mask_69_6.dat new file mode 100644 index 0000000..a3e4fa0 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_6/mask_69_6.dat @@ -0,0 +1 @@ +xÚí˜KÄ @÷œî¹™dThÃðí¦ hLSSEžq eY@<ã¯+Þ*£|ß窮 %‹®‹>¥¡¨®‹¹zÃ*7ë–Åe´¤öÆ6ãQ¶½©S`šÞ.²¯>»sE Ë'¨%@[‘Ž6°@PË0Ãh £aôFÕxtpl²2§Âóý ‡Q-g1N†feo^ßøÑüë†Ñ0F¯dT>N_ÕOö’‘wË‹G3ìùªu†åœÁ»gˆå {‘3<Ê[žÔº b?Â'6ï^ºŠ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_6/mask_73_6.dat b/src-backup/includes/phpqrcode/cache/mask_6/mask_73_6.dat new file mode 100644 index 0000000000000000000000000000000000000000..ab71b70ae59ccfb23e9c4185b1e919d531fb040f GIT binary patch literal 230 zcmV6w!~0Dh_U!#`ksFaQ7m literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_6/mask_77_6.dat b/src-backup/includes/phpqrcode/cache/mask_6/mask_77_6.dat new file mode 100644 index 0000000..ad5a660 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_6/mask_77_6.dat @@ -0,0 +1 @@ +xÚí˜Ñà EßùøÿŸÛ²i‹ÙÅVäaË.š¦±F©§pST›YÖô4q÷ú~´z…«=Ÿä:öÍ’ û6îøÍüôm8‘¾:#0PضiDy:2Å '§ùZ­s±Š&}Ïôçæ»œ\r‘0\¥Åš•˜Xw¬Â;iP¬äàÈ”Lœ)ÒS¬±£eÔ•Ü{hˆDu9÷L‘žb½•©JÞÒS÷ŒSÆ)™’)™ÞgZš{÷þeÜøŸé)ã”qJ¦dúLw+ƒ#Ó3-V0ÅÕ·lîjƒ¹™ýÚ ×S-ÕS ê½9=ݯ÷¦5ÁPPïõq1Mõ?ågÓ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_6/mask_81_6.dat b/src-backup/includes/phpqrcode/cache/mask_6/mask_81_6.dat new file mode 100644 index 0000000..28a6d07 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_6/mask_81_6.dat @@ -0,0 +1,3 @@ +xÚí™Q„0Dÿ9 Üÿr»ÉÚR³LÕvök‡šÆ`´¤¯0 º;æi6ÜûçÑÚ\|ñí_¿êccÔ1«¢h¾ýuŒ§½ioÞó#2ƒ¬}x*.YûtÃ&¸­± +Ö°¶ÀÖq/K‚;3ÌväeÐ̢Ȋ҂AÛH±ë?`]é5ÒðK¿¡Êü´†w¿!}{Zû߲žW +Œ”yâ·¾Àž^§_y­¼k±k±–^K¯•תáb-ÖbÝYSÚ¸'ÖœNóÈuÃ×õšÕ#M½fõHS¯Q?|]¯IýðA¯ÆÚi™Mû÷‘yíì¤yuWà \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_6/mask_85_6.dat b/src-backup/includes/phpqrcode/cache/mask_6/mask_85_6.dat new file mode 100644 index 0000000000000000000000000000000000000000..d5403e49a80cd825886b9cf067587297c22542b2 GIT binary patch literal 229 zcmVz+U=Q93IibwME~bB$^9?aLbYnE?lu`e3KJJuW7jbno{1 z6z!*@KIP;y_0^MY?(1Uq+xo)SueFNlpSwk~3kHJTZW;Jhe~*j0f6i>Ev*&T`9<+0j zJ6S`Ia)zC1@aibjTa>+X>cWZvF(3xSz)1!u`9P<`={Ia;V3iYwbtJu->xkU@m%8GB z;(!ntduS+U=Q93dA4`ME`S|1p|)V-|IyeM8#yz&a$P<5H8u1j zJvs=^zR6hA`VPFkrR{fvn^+GR9ksLtHTXo64YENt$i~~)fawi)LW)84hWko>3Nllc zx#paEz7d+7rFOyurM|GlguB4YENtj{*X=Ev^DF}ptAKX6@RpX4vjZjklMsHWS3nR)a*F|K!unUJMmO!Vn} zoTXx;{$pvl+nqFvSzoF-QmYM8VkABAis-2UASHPxZ{Wiz40ft)3ZUf;xjbgSiRJfEh3YX28r%%+%_c*_vLo*0<$@ z23~1k)EU$n%uQeh%zzm%^YhH4w^!eo$?ptXW}>e4xt^)$QRDw9atl$NB&!*=®½1='#–`+bƒ¥l]Z±”¶­¬ýð \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_7/mask_101_7.dat b/src-backup/includes/phpqrcode/cache/mask_7/mask_101_7.dat new file mode 100644 index 0000000..1f6bc51 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_7/mask_101_7.dat @@ -0,0 +1 @@ +xÚíšQà Cÿ}rÿËm“Ê`éÚÊfªjòTé#±¥ÔäÞ54'tûí…îf¼aÈЇo°–$±c<ÙËêãÝÓÕñHÝ Ìh8„lÕÛûþÁëo=½Ä„ŽÅ§àHvº©;‹z€¤!ƒ|/‹FŽÐ3cfÌŒ‰S×Ê…±±ゼêñ 8©KŽ)4©9 ”Qç1ç1×J3fÆÌØÅ›S+ÅwÖcçõ˜ó˜ó˜k¥3cf캌ùîâ¾zÌyÌy̵Ҍ™±1¦{¨²bL÷¶çÍX™S+óï.to{>ô˜îmO§ÇJ2²û3cÄ<6ãXn0F´ ) \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_7/mask_105_7.dat b/src-backup/includes/phpqrcode/cache/mask_7/mask_105_7.dat new file mode 100644 index 0000000..6b0cacf --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_7/mask_105_7.dat @@ -0,0 +1,2 @@ +xÚíšA +Ä0E÷žFï¹a MÒ™˜N¾Px)¸pQ£¼è_è~ž|ñ(b¿F’„šç$.Ÿa¿o“ÝòWÿGNÚPæUÇ–·‰Mþ%{‡ëoôHQôÙUñl¯Ö´¿¬L^>+Éçm­“#{°{eo&Y2sÛoM•)gncO9s›ßZг´3wÇo™„Ú+Âè{ô=f.ìÁìÁz½‡Þ£ïÑ÷˜¹°{°{è=ôz¾GßcæÂìÁÞsÙkCQÏžpÓíÊ^¶€&Ñ{^£÷¼Nï­Ê·UïÕìï ìe5°ç}¯æE‰wGûßn+o \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_7/mask_109_7.dat b/src-backup/includes/phpqrcode/cache/mask_7/mask_109_7.dat new file mode 100644 index 0000000..9875cbe --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_7/mask_109_7.dat @@ -0,0 +1,2 @@ +xÚíšA +…0 D÷9MrÿË}µÚ*˜ _x-d˜ú:Î"îÇŠ¢Ý-kÅ"Šâ¨š¢œ•dŒ{›¿Õ»ü¤·ñã¯ó³ÞÊגɬ|'ƒÒÚràQ5+ sûŒ¡)Ûc•Õê7úÕ-ÑÕó»1nní–ºqÿÉ”–ÔÍJtgô¬^îʉwÿ̘Ň-ùƒ?ÿ*š&Mmý@ee5éø^Ñ +c¢”° +«° +«ÀªÒ,¬¶ýªïbï\1¿×3ýjõ4óØT¿ZžfÅ¢·»o鯠«è*º +«° +«° +«°:›Uüêt¿*ü¿ú½¹ºŠ®¢«° +«° +«° +«“Xů²0<·BWÑUtVaVaVƒYÕl +Þ°ªÙkýf5éýª_Ö ¿ªÙkýáW5{­«µ€ä–5pnõC¬éªZ:¬Å bv \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_7/mask_117_7.dat b/src-backup/includes/phpqrcode/cache/mask_7/mask_117_7.dat new file mode 100644 index 0000000..cde78c1 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_7/mask_117_7.dat @@ -0,0 +1,2 @@ +xÚí›Yà Dÿç4pÿËU•²ÈêIª>"ù%6æed ‘Ò8rðS ÍNs޵U¯ánëk5¦Xe­øjѻު®u—Ûî¦ô¿ö±VÛXgøê,l`øøîuÝÊÀî÷£!‚h‰XZù\VãlM±ìë|[ͬÝÂ0 Ã0 Ã0 ÿÃí–#hF'ëøc]²±ž¾¦iéí>ìúŽûHÐat†a†a†a~<ÃÔÆzØyÆqkO‡£Ãè0 Ã0 Ã0 ÃðææŒãªžF‡Ña†a†aþ)†§2Ç˰éfÃ’áþ%ƒÀz8ùëátO=¼žâ€3ÿ=Ž‚áÖî3œÜ:ìÿcw‘ +ûV$¢ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_7/mask_121_7.dat b/src-backup/includes/phpqrcode/cache/mask_7/mask_121_7.dat new file mode 100644 index 0000000..d5d577f --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_7/mask_121_7.dat @@ -0,0 +1,2 @@ +xÚí›[ +Ä Eÿ³šdÿ›ú°ŒÆi;^az,ø#6Æž^rÝׂ§h¶ŽôµÈêÐ&Ýì¨çÜ^amýËÀ•YŸ9×_ÒØºô5C·r–6ë®ðt^ù^ÅWlûÅÐEä˜ôز~É¿|èM®èmýÁåÛmSò}÷¶Ó( Û° Û° Û°}ŽmQ½]ŒZ§Vüq½]¼ÓvËѲ"™M¹1fÙúGÔÛÛ, q½½ÍB·Ñmt¶a¶a¶a¶ÂöÄz»eF²3»cxI¹—D·Ñmt¶a¶a¶a¶ÿŸmÎnð’ý$ºn£Û° Û° Û° Ûa[}ï¦`[yëæÀö–°¾Þ–Þ»)Ïn<¹æ4ÜKú/éó¼¤O¢»s§l¨nçlÔmŸµÝ/GëÙ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_7/mask_125_7.dat b/src-backup/includes/phpqrcode/cache/mask_7/mask_125_7.dat new file mode 100644 index 0000000000000000000000000000000000000000..f9ec0887b05d63190cd6ebe1bb181252db240a5b GIT binary patch literal 288 zcmb=p^>(%+-(dwFmiND<{`^0`b*j_CTqezxZ{^rj;wKcm=?PmSu=Glz<7VlslV=Y- zO8>Uu%kQn~TjKuaTl~3{$o%&7)#h8}=22b&;klFIREslqHa`A!?#mmI&via`Hb+0Y z@=dof=(6k43w+wj81s{h(%)-(dv-mfy8!@BX(Jcim*@*T8k(?P5abBdPTV55E<2nWM}-KktRmgh+FK z(J5XM>l-trubloFW*NMH^}mg5a-3Y>F9fC9#l&wam?F3O`BH_m{d}fVk6)~v_I&Hz zHJ=+cdHrqItm^WLCC8c$D{tL(Yf{g&%x7Q9 zubFPXVwyI0pF{it{Ra~h7{x%SagRfsg8l^Y7u;W1ZG?0VFoDnn@e|xnSU)k2i@PJtN|E!a-ww)M{dF^|hGkUkCJ!|~{M9*8VnoW7a`o8vg bU+c{{(Mi0VI}n?>ZnFz5Vih(RRyE z|8~uM{F%Y??j(=+_U|&*MxD6{EXooGIou3B+4rdIt<3u>@m`ky)yCCP{twlzB)65{ zxt83x+o|t_pyi`jZivc5?msx>A1W8Q07ZMC+7Tk}qrk>B3EF|xO$4cfDymCT`D{~t z*yCE}H)iGgttY-t-17O&+Wsls{yaWkCr)~=oXRV&$sJJi`D}ZpWzpFaOJp>)b53$^ I_LZ6o0K%<<ŸÚÎo[l +ìÀìÀΟ²Ó +©ý0û¡7Ö‰µVÆl;b¶–ëüè™7æõfM¾S´†î ;è1ìÀìÀìÀìL³C¾<ßQí[+@wÐt‡˜ v`v`v`v&Ù!ß ›ï°7ÚX+@wÐt‡˜ v`v`v`v8 ÊYP΂¢;èºCÌ;°;°;°saG{™Ä;Ú»>vRœ|ÇžåùŽö®K¾£½ë£ØMÎðHÖ +‚³#Ð(S›ËÎòúqÌçd \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_7/mask_141_7.dat b/src-backup/includes/phpqrcode/cache/mask_7/mask_141_7.dat new file mode 100644 index 0000000..98dffab --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_7/mask_141_7.dat @@ -0,0 +1 @@ +xÚíœA„ E÷= Üÿr“IëŒTY@¿ÉÄÅ0!µøø|1”²—št¹bG0µæÔ—Ѥ…s¡2Z/îç¿oa‚ìøÜ\ÿq¬ãzÜÛOnÒ‹MºÏñÞn™šñt„áX"Kÿ—m‘eM}çÚòCpµíÄP™L^¾µŒ„S0S0S0S£L ø)Ç”‚ŸÚ˜êYß¾%žÔbÑý,õS©l?ÕzC§Ð)tеLÁLÁLÁLI2…ŸzŸŠRX¶h¾£@§Ð)tеLÁLÁLÁLI1…Ÿz‘ŸbÏ·óŽB§Ð)Ö~0S0S0S0Å7´ø)ö|ù†B§Ð)˜‚)˜‚)˜‚©÷3Õ–«L%Ÿ tfª¬wM±Ÿ*:~ªhù©»¡Zºç«sn’cª÷$1UTtJgÆ8‹ÌÕOYºE \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_7/mask_145_7.dat b/src-backup/includes/phpqrcode/cache/mask_7/mask_145_7.dat new file mode 100644 index 0000000..4aa2bac --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_7/mask_145_7.dat @@ -0,0 +1,2 @@ +xÚíœÑ +à Eßó5úÿ?W6Zµ ¦-›^é±àƒ2‰q§×ÄbG‰Ÿ¢X6(ƉuÍ"“LbÑbÝGuû÷ŽÎ¼®··Gkø¨:HwA[¿jšÔm¯øH¢ø¬Ýžï3ïŬýîßâOðkQ{l·|ê»èT›†EmÇ JfÙLÊ?ŸÚ2"&Á¬Á¬Á¬Á¬ÁÚ¬)Äk©ÝRf¢—µÙcï“Ñ̉ÓåFŠÑ,§“z©¦=躆®±‡„5Xƒ5Xƒ5Xƒµ7±F¼¶\¼¦p–ÚUs#躆®±‡„5Xƒ5Xƒ5Xƒµ°F¼¶d¼ÆYö•ܺ†®¡kì!a Ö` Ö` Ö`o‰×8ËæÛct ]CרC¬Á¬Á¬ gMå­‚5…[´N¬%éÄk÷h•ñZp®?›¯IÜ£•ϲƒ^n$ˆÑæÞY7A×ÖÆëZP[¶ fÈ“0 \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_7/mask_149_7.dat b/src-backup/includes/phpqrcode/cache/mask_7/mask_149_7.dat new file mode 100644 index 0000000..809f005 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_7/mask_149_7.dat @@ -0,0 +1 @@ +xÚíÜÑnà …á{? ¼ÿËu“Ú†­…´2»ÕG$nˆˆcççÈF¡µKëÉ×Ðb3ª÷ôþÖªt³îûªPc çÌ¥Ó7[¢?9:ñÕý['éÁë9'¾*Ó– àGæÜa°½hÖ_¿¹/«zÁ+Î6XB‡>ê˜2ôqYÀJ…0Êù黚BfaƒÄ 1ˆÁª ȇ9c7Gë ùOl©ô,Å^¥ßÅ꽓òÁ3ƒÕòA:Hé Ä 1ˆA bƒÄàÿ0X4œ%Ù«½û#ÇÔd>¢&Cé ¤ƒÄ 1ˆA bƒ<šA{ôo¿G¯&óLM†ÒA:H1ˆA bƒÄ 1è¿ {ôj2þ› ƒtbƒÄ 1ˆA &1Xç`¼_ Ö9ÛðÊ`«™®B˜¶G_çlÃ5™:g5™¶ajMæÍLÔÁŠËèƒIý <|r. \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_7/mask_153_7.dat b/src-backup/includes/phpqrcode/cache/mask_7/mask_153_7.dat new file mode 100644 index 0000000..c1ab276 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_7/mask_153_7.dat @@ -0,0 +1,2 @@ +xÚíÜQ‚0„á÷= ½ÿ匉B5ˆ +ю惤/ͲåïØIÙiº^-àî®Zkm|»YDhë9 ›ÎêÃ\{’KÇÆ¶·{Ÿy—³Ç3ßv†¶Ì»œE]u`RÚÇrý"›ß}ÛY ½ëeÂ2{ÛVV8][×.n:+2_ç¶ÊÂBÃ&6±‰Mlb›ØÄ&6ß`3i¿9Y³³åΌ諡yÙúU}ÔŸ82f-vÚ–Õ6 nÒMºI7±‰Mlb›ØÄ&6±ùólæî7ãÎð‚þÕ ¢›t“nÒMlb›ØÄ&6±‰Mlþ2›ÎüÍÙ^Ð/ˆnÒMºI7±‰Mlb›ØÄ&6±é;gxA¾C¡›t“núO‹Mlb›ØÄ&6±y€Íy•ÇfP¥Õ[6Ÿ4ºßÌ«Ùk`v^Ð+Ó9Ä Ê¬OÛ±ùð}Ïæ”¨›™+ZXíè®=:iWE \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_7/mask_157_7.dat b/src-backup/includes/phpqrcode/cache/mask_7/mask_157_7.dat new file mode 100644 index 0000000..2db27f6 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_7/mask_157_7.dat @@ -0,0 +1,2 @@ +xÚíÜM +ƒ0Eáù[M²ÿÍ•‚­ü£s¡_„ ž‰ÇÛã ­}F¹†Qks½‡Ì{Ý%¶WqÛ÷×îø.ž­¬Ýþϯ­]Ü8evV½ßbvV}è®_µÜEÌ»n3W^KÃ\Ÿ`äÖV캽çZl³˜Å,f1‹YÌþ;³af±Ôkž·Þ¨×úiàè“ÁÄzÍôÖËz?urVÎÊY9‹YÌb³˜Å,fù,Ÿå³|VÎÊY9+g1‹YÌb³˜Å,Ÿå³|–ÏÊY9+gý7Æ,f1‹YÌb³|–ÏòY>+g嬜Å,f1‹YÌb³|–ÏòY>+g嬜•³˜Å,f1‹YÌþÈlâùƳi§o˜ý.\¦ÏÆo<úl;9º:Âg[®Ï¶lŸmÁÔ^œI>=gÏ™œ³-yk_TAµ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_7/mask_161_7.dat b/src-backup/includes/phpqrcode/cache/mask_7/mask_161_7.dat new file mode 100644 index 0000000..35ba8ff --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_7/mask_161_7.dat @@ -0,0 +1 @@ +xÚíÜÑŽÂ …áûyšòþ/皨E)Æ®›î1~4áœý93,˵´ «+µØZT=Zeâ¶C»¹ú.~ißµ§¯ÊÞÖ&>Œ,–ÿÔï´6eù˜·í•Ö~,láW]ì ®»º2Íê꺱Ý\Ñþ;×µ2j"–±Œe,ËrXŒÝµVÓ(ícìµµZÓ–1‘™§8Þ©í§‰±/,'ÇØt™.ÓeºŒe,cËXÆ2–±Œåß±,_þŠ|ytõüç£ï|ÎÜ]¦Ët™.cËXÆ2–±Œe,cyËòå/É—­ysî‹.ÓeºL—±Œe,cËXÆ2–±lo…|ÙZ{+è2]¦Ëbl,cËXÆ2–±Œe{+äËÖŠØ[A—é2]¦ËXÆ2–±Œe,c9åÌCÐXÎ<ëþÆò’Ÿ/owsP¾œyÖý]¾œyÖ}·VdÙìæ°¹¯d9J—Ó‡ì)Ë1õ jI2ë \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_7/mask_165_7.dat b/src-backup/includes/phpqrcode/cache/mask_7/mask_165_7.dat new file mode 100644 index 0000000..e27fb8e --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_7/mask_165_7.dat @@ -0,0 +1 @@ +xÚíÝQŽ‚0Ðÿ·š²ÿÍM&A,NĘ̈!—x0é‡&XZׇZ»-KØ«[êÞÉeÉj‡½Œëæx,ƒ§¼ú.ï·g}ë`;ÿþþ+k{ËÑ~1ŸŽÿ}á+k{ËØ¥ž™¾SGùWãgî}‡Ý¬@Û?_µö8í¾o+·k][·hô”Wü8~·u·ÜMÆgœqÆg|j<õ·ú¶¶Ú*ßq=<¯”Ïü¤æÛ“RwÆ“ëñÕøøÌüÄÌéŸÈq9.Çå8ãŒ3Î8ãŒ3Î8ãIÆÕãUGÿ?~µsnr\ŽËq9Î8ãŒ3Î8ãŒ3Îx€qõøÇÕã®yç979.Çå¸gœqÆgœqÆgÜ=)êq×À¸'EŽËq9.ÇgœqÆgœqÆwOŠzÜ50îI‘ãr\Žû­Î8ãŒ3Î8ãŒ_ÆøVvd}²ÇÞøü¡aõx˯ÇÛ5êñã)¹&ÿ9)ñÙÞf¼¥çxþ3øYH]ûS^*/ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_7/mask_169_7.dat b/src-backup/includes/phpqrcode/cache/mask_7/mask_169_7.dat new file mode 100644 index 0000000000000000000000000000000000000000..ef1a181f2cfd4fb995864843d58efd1a33443bcf GIT binary patch literal 383 zcmb=p_4aOTUz33Z>xJ+6rf>h5o6qcIQd2nm=Y_6}PsM~AQyzW1wahnqx4i9#trl79 zGTt{n-#Tkq_|`@8b@BO^-&#lQzJI&bdA?QLEw|ZnT7O=OKRfSrJL~d`Aw9u`O=epcc%X?f~g1U{2P4x`u+VC z_4Xxs=ND}`cY4xm literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_7/mask_173_7.dat b/src-backup/includes/phpqrcode/cache/mask_7/mask_173_7.dat new file mode 100644 index 0000000..3b51371 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_7/mask_173_7.dat @@ -0,0 +1 @@ +xÚíÝÝjÃ0 Ð{=Mòþ/· RbÖH¬û«´rj\Ç=ý,ºm·coúZŽ8;»ïmÏ÷½mÛÝë±0b÷ƒ_ßšt$~Wu5ÛÇšNnÜ'?dÕf2¶í(oÁïßGÚ,Løþù÷õ6_{»zÅÑ÷Æ? Ë9úwq9Ç àS!ÆŒëÛ9Îoë€î2 L`˜˜pµŒ¬––O»Enï¶v8L˜²v8L¸º UáY×"ûd}ê K›r‚œ 'È ÖL`˜À&0 L`B'fÕ:ïO8ÛTcTc\kŒr‚œ 'È ÖL`˜À&0 L`BìY²gIñ§kŒr‚œ 'È ÖL`˜À&0 L`‚ç"íYRcô\¤œ 'È r˜À&0 L`˜ÀÏEÚ³¤Æè¹H9ANä&0 L`˜À&ü'úÿ!Ø;êÅq+¶Yõ„l*´Ü³´þ=Ø€ã9¶jŒ[2ÚÖÿ€ Ms¤Ÿ‡Ô„–ç­ë*Ø \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_7/mask_177_7.dat b/src-backup/includes/phpqrcode/cache/mask_7/mask_177_7.dat new file mode 100644 index 0000000000000000000000000000000000000000..068477c92af080afb53465a651dd7d1815d562c2 GIT binary patch literal 407 zcmb=p_4e+?tY!lS)(hWjd_VoS4`&P8oD}qI!Lz*MP5ODNZExOG1+MwJb8D;p-LO8! z?c3h{D>>rL|Ffpgd7A6Xc6+Psn~m@D{rRxH?)O~%;+lWWo2OpY#{~EVH=u6 z*CeoNM;zn|YxyENS5&k1Xxh;g$7WrP-Y%=Xxj1^=`WtIKUTA-NKSlcq*G{K(1-ys2 zkTw0`)@J(M6-dz@>7=A*us5M&v*{}_V zikH1R`f1L}yvxPQidw;HV6KBY)F%BE(1c~reV&3`GXd;yxF5O}ivA8Q?Gyc+m*}Yd zYKdyZw)H0}-4ng5+!L?o?u!;XT{?T~wJmv{XFN90&I($0Ldf#T-Q#!vG0tQ&@c{s0 CYRvKg literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_7/mask_21_7.dat b/src-backup/includes/phpqrcode/cache/mask_7/mask_21_7.dat new file mode 100644 index 0000000..4f9f138 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_7/mask_21_7.dat @@ -0,0 +1,4 @@ +xÚQ +À0 Bÿ=Þÿr]š˜-?]Rl‡ä݃2•¦¹nc +ð[޹öÝnùAÃ".–j+êi +~‹x3<úaXÚ{H†ÖC1xÉÀ)â„á¤üSå \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_7/mask_25_7.dat b/src-backup/includes/phpqrcode/cache/mask_7/mask_25_7.dat new file mode 100644 index 0000000..cefe1b9 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_7/mask_25_7.dat @@ -0,0 +1 @@ +xÚQAÀ »÷5ôÿŸ[F@©àaƒ„ÄÔÖZ̲… >;’ÐÀQ±ÊIÖÀQH8Rÿ¼ñÒˆGÉ"èz,ù½&‡ñþ;±­Ð'oñ»97”%P8%÷6oǽ;]ÞúNWnÝ[äf7¹ÌÕvÔ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_7/mask_29_7.dat b/src-backup/includes/phpqrcode/cache/mask_7/mask_29_7.dat new file mode 100644 index 0000000..e3d7391 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_7/mask_29_7.dat @@ -0,0 +1,2 @@ +xÚÕR9À ÛýšøÿŸ«ŠÈQpX˜$læÅ²f!I2pgSãªêªMZj·ºóÌÃÂ"útŠðï¡e0¾¿#Ô›`_Ë1-±ÞóŽé´câÝÍ÷òha÷~/¡Eh™4¦Åæ"ä˜~Ï \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_7/mask_37_7.dat b/src-backup/includes/phpqrcode/cache/mask_7/mask_37_7.dat new file mode 100644 index 0000000000000000000000000000000000000000..87d9a1a9d2c57b346aa4a8a2e03754a7f7668ab3 GIT binary patch literal 122 zcmV-=0EPc}+U-<34nQFY+c^!r|K-dh{-xmXMloTrDOS>|wt{nN$p8UIKT#gc;o<{l zE|1OO;;@B_*1sBYail&HAVaMSznZ$V?+Zst%JX#@k^|V&_%v=tL+(dx9wGsNg^L)? cH0CK`8l%kV8sp6AdyF;KJ?hQK0&cYgLugGq!2kdN literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_7/mask_41_7.dat b/src-backup/includes/phpqrcode/cache/mask_7/mask_41_7.dat new file mode 100644 index 0000000..8acec04 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_7/mask_41_7.dat @@ -0,0 +1 @@ +xÚíTAÀ »÷5ôÿŸ[fDYæ(O’^¬ÅbR3/~t/L"¹Ä7SQQ5…jÔ\S—šiíñÎb£ß#Õ†ÈÂ×+Ç£¤w#æzõx?Þã½§A-ëšw•u曑Y7$b.%AËÇ;•w«Rµ÷ñoxG}?ƒ \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/cache/mask_7/mask_45_7.dat b/src-backup/includes/phpqrcode/cache/mask_7/mask_45_7.dat new file mode 100644 index 0000000000000000000000000000000000000000..dbba31d0bfddcbed98ea5d7a9f6ee59f976e0421 GIT binary patch literal 173 zcmV;e08;;W+U-@*3cw%;e7~=;|Npr$DAUrsy$v=4K{1olOOYWhIYuypTZ?rVorcG` ziBe#%j*Q*dv)kOh(x@276Nxd&JP9U=2L~+ngMKq>jn}9{jK*jHRSM|5x5n%q5&j`e zsyWelhq7a3OJw7iYkdjosJYWIS!tZw|D3#JI49hv+1NkUa3?Dz bQL;xvA(=V?*)bSkL5FpXakG_S`^qkH-^P*%H1XEuNsLnfvAu` z`*BEI8A_NDBQX*qG5P?bYCW1Y9JBiGIs;FK@Oe8gF(1@>hQVmp28DF`j`Xh+BQX-A zPcoX-fMZmg?C*@cp*&oVxZ$(2Gpy+uA|bgw1Aot87`^rkIYy2Bj`)lr?t+Z`0Y=4# E+IH1p%m4rY literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_7/mask_73_7.dat b/src-backup/includes/phpqrcode/cache/mask_7/mask_73_7.dat new file mode 100644 index 0000000000000000000000000000000000000000..f414e4a5877861bd45e439125a47c52b70a0ca12 GIT binary patch literal 221 zcmV<303!c*+U;1;4#OY_e7~=O|NpsVOKWw-svJ$a1xQMLKjmF z$Fo{kZk}5~sTj*XCvO!sEAx=sT{$)7Ae9TQEOc4^f@wQ)ea)wu7H%}{#MK=l@)ASD zb^%LDMOj|2h)%FTj!en)$C=J-W^O$fr&vx@-|THnt7dOwYNfBvQ>ukv oÌ40Ý÷ãT±%9¯‘Ô6²ü÷ªU5‹*sI{`¹ªÿ™_²>S?ç}(:yâTïlï{G&E\”Ö6¨õ}"A’¤X‹õ XϬ«²³Ç<Âmwx°fÜá‘G”QSkr0$!s zmX(et@ z$j}>#8;TpsDPluxhz+rk$AtTL3lG`X3UJ4`446UdL}WW&@+vhnbfN!;F1qj9*+b^XNIk3 z`ZsZ(ai8(tWM<5anK3hF=1a_o^~_APRcC!GK5O7o1G~?-&v25BNzV0+I1 literal 0 HcmV?d00001 diff --git a/src-backup/includes/phpqrcode/cache/mask_7/mask_97_7.dat b/src-backup/includes/phpqrcode/cache/mask_7/mask_97_7.dat new file mode 100644 index 0000000..b277368 --- /dev/null +++ b/src-backup/includes/phpqrcode/cache/mask_7/mask_97_7.dat @@ -0,0 +1,2 @@ +xÚíšáƒ0„ÿßÓÀû¿Ü²D[ÌÚâV.K¶«Iÿ`…â'ž³sxáº÷Âyäå”$ùxãxÃ"Îéª×= O^&pêb¶ÊÈYʬž$êKŸÝ£àÁÉŽ8KŸ…Ë ÎeÃŒó¡¥ ÔøŸ3:$bI,‰%±$–ÄÒYb襶 +M)¯TôŽ %q®¬Èô綦EÿœX}jlØT—T—ôŽKbI,‰%±ô,ñõã_e[%íýŽöV]R]Ò;N,‰%±$–þ’%VŸ@`‰Ñ%pa©m€§—(}ñ_¥%í%ÚÛ¸ÚÛøÚÛÈ4¥='u)ai¿.;M¾ù> \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/index.php b/src-backup/includes/phpqrcode/index.php new file mode 100644 index 0000000..9e14b7e --- /dev/null +++ b/src-backup/includes/phpqrcode/index.php @@ -0,0 +1,94 @@ + + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + echo "

PHP QR Code


"; + + //set it to writable location, a place for temp generated PNG files + $PNG_TEMP_DIR = dirname(__FILE__).DIRECTORY_SEPARATOR.'temp'.DIRECTORY_SEPARATOR; + + //html PNG location prefix + $PNG_WEB_DIR = 'temp/'; + + include "qrlib.php"; + + //ofcourse we need rights to create temp dir + if (!file_exists($PNG_TEMP_DIR)) + mkdir($PNG_TEMP_DIR); + + + $filename = $PNG_TEMP_DIR.'test.png'; + + //processing form input + //remember to sanitize user input in real-life solution !!! + $errorCorrectionLevel = 'L'; + if (isset($_REQUEST['level']) && in_array($_REQUEST['level'], array('L','M','Q','H'))) + $errorCorrectionLevel = $_REQUEST['level']; + + $matrixPointSize = 4; + if (isset($_REQUEST['size'])) + $matrixPointSize = min(max((int)$_REQUEST['size'], 1), 10); + + + if (isset($_REQUEST['data'])) { + + //it's very important! + if (trim($_REQUEST['data']) == '') + die('data cannot be empty! back'); + + // user data + $filename = $PNG_TEMP_DIR.'test'.md5($_REQUEST['data'].'|'.$errorCorrectionLevel.'|'.$matrixPointSize).'.png'; + QRcode::png($_REQUEST['data'], $filename, $errorCorrectionLevel, $matrixPointSize, 2); + + } else { + + //default data + echo 'You can provide data in GET parameter: like that
'; + QRcode::png('PHP QR Code :)', $filename, $errorCorrectionLevel, $matrixPointSize, 2); + + } + + //display generated file + echo '
'; + + //config form + echo '
+ Data:   + ECC:   + Size:   +

'; + + // benchmark + QRtools::timeBenchmark(); + + \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/phpqrcode.php b/src-backup/includes/phpqrcode/phpqrcode.php new file mode 100644 index 0000000..80adb9d --- /dev/null +++ b/src-backup/includes/phpqrcode/phpqrcode.php @@ -0,0 +1,3312 @@ + + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + + +/* + * Version: 1.1.4 + * Build: 2010100721 + */ + + + +//---- qrconst.php ----------------------------- + + + + + +/* + * PHP QR Code encoder + * + * Common constants + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + // Encoding modes + + define('QR_MODE_NUL', -1); + define('QR_MODE_NUM', 0); + define('QR_MODE_AN', 1); + define('QR_MODE_8', 2); + define('QR_MODE_KANJI', 3); + define('QR_MODE_STRUCTURE', 4); + + // Levels of error correction. + + define('QR_ECLEVEL_L', 0); + define('QR_ECLEVEL_M', 1); + define('QR_ECLEVEL_Q', 2); + define('QR_ECLEVEL_H', 3); + + // Supported output formats + + define('QR_FORMAT_TEXT', 0); + define('QR_FORMAT_PNG', 1); + + class qrstr { + public static function set(&$srctab, $x, $y, $repl, $replLen = false) { + $srctab[$y] = substr_replace($srctab[$y], ($replLen !== false)?substr($repl,0,$replLen):$repl, $x, ($replLen !== false)?$replLen:strlen($repl)); + } + } + + + +//---- merged_config.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Config file, tuned-up for merged verion + */ + + define('QR_CACHEABLE', false); // use cache - more disk reads but less CPU power, masks and format templates are stored there + define('QR_CACHE_DIR', false); // used when QR_CACHEABLE === true + define('QR_LOG_DIR', false); // default error logs dir + + define('QR_FIND_BEST_MASK', true); // if true, estimates best mask (spec. default, but extremally slow; set to false to significant performance boost but (propably) worst quality code + define('QR_FIND_FROM_RANDOM', 2); // if false, checks all masks available, otherwise value tells count of masks need to be checked, mask id are got randomly + define('QR_DEFAULT_MASK', 2); // when QR_FIND_BEST_MASK === false + + define('QR_PNG_MAXIMUM_SIZE', 1024); // maximum allowed png image width (in pixels), tune to make sure GD and PHP can handle such big images + + + + +//---- qrtools.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Toolset, handy and debug utilites. + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRtools { + + //---------------------------------------------------------------------- + public static function binarize($frame) + { + $len = count($frame); + foreach ($frame as &$frameLine) { + + for($i=0; $i<$len; $i++) { + $frameLine[$i] = (ord($frameLine[$i])&1)?'1':'0'; + } + } + + return $frame; + } + + //---------------------------------------------------------------------- + public static function tcpdfBarcodeArray($code, $mode = 'QR,L', $tcPdfVersion = '4.5.037') + { + $barcode_array = array(); + + if (!is_array($mode)) + $mode = explode(',', $mode); + + $eccLevel = 'L'; + + if (count($mode) > 1) { + $eccLevel = $mode[1]; + } + + $qrTab = QRcode::text($code, false, $eccLevel); + $size = count($qrTab); + + $barcode_array['num_rows'] = $size; + $barcode_array['num_cols'] = $size; + $barcode_array['bcode'] = array(); + + foreach ($qrTab as $line) { + $arrAdd = array(); + foreach(str_split($line) as $char) + $arrAdd[] = ($char=='1')?1:0; + $barcode_array['bcode'][] = $arrAdd; + } + + return $barcode_array; + } + + //---------------------------------------------------------------------- + public static function clearCache() + { + self::$frames = array(); + } + + //---------------------------------------------------------------------- + public static function buildCache() + { + QRtools::markTime('before_build_cache'); + + $mask = new QRmask(); + for ($a=1; $a <= QRSPEC_VERSION_MAX; $a++) { + $frame = QRspec::newFrame($a); + if (QR_IMAGE) { + $fileName = QR_CACHE_DIR.'frame_'.$a.'.png'; + QRimage::png(self::binarize($frame), $fileName, 1, 0); + } + + $width = count($frame); + $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); + for ($maskNo=0; $maskNo<8; $maskNo++) + $mask->makeMaskNo($maskNo, $width, $frame, $bitMask, true); + } + + QRtools::markTime('after_build_cache'); + } + + //---------------------------------------------------------------------- + public static function log($outfile, $err) + { + if (QR_LOG_DIR !== false) { + if ($err != '') { + if ($outfile !== false) { + file_put_contents(QR_LOG_DIR.basename($outfile).'-errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND); + } else { + file_put_contents(QR_LOG_DIR.'errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND); + } + } + } + } + + //---------------------------------------------------------------------- + public static function dumpMask($frame) + { + $width = count($frame); + for($y=0;$y<$width;$y++) { + for($x=0;$x<$width;$x++) { + echo ord($frame[$y][$x]).','; + } + } + } + + //---------------------------------------------------------------------- + public static function markTime($markerId) + { + list($usec, $sec) = explode(" ", microtime()); + $time = ((float)$usec + (float)$sec); + + if (!isset($GLOBALS['qr_time_bench'])) + $GLOBALS['qr_time_bench'] = array(); + + $GLOBALS['qr_time_bench'][$markerId] = $time; + } + + //---------------------------------------------------------------------- + public static function timeBenchmark() + { + self::markTime('finish'); + + $lastTime = 0; + $startTime = 0; + $p = 0; + + echo ' + + '; + + foreach($GLOBALS['qr_time_bench'] as $markerId=>$thisTime) { + if ($p > 0) { + echo ''; + } else { + $startTime = $thisTime; + } + + $p++; + $lastTime = $thisTime; + } + + echo ' + + +
BENCHMARK
till '.$markerId.': '.number_format($thisTime-$lastTime, 6).'s
TOTAL: '.number_format($lastTime-$startTime, 6).'s
'; + } + + } + + //########################################################################## + + QRtools::markTime('start'); + + + + +//---- qrspec.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * QR Code specifications + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * The following data / specifications are taken from + * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004) + * or + * "Automatic identification and data capture techniques -- + * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('QRSPEC_VERSION_MAX', 40); + define('QRSPEC_WIDTH_MAX', 177); + + define('QRCAP_WIDTH', 0); + define('QRCAP_WORDS', 1); + define('QRCAP_REMINDER', 2); + define('QRCAP_EC', 3); + + class QRspec { + + public static $capacity = array( + array( 0, 0, 0, array( 0, 0, 0, 0)), + array( 21, 26, 0, array( 7, 10, 13, 17)), // 1 + array( 25, 44, 7, array( 10, 16, 22, 28)), + array( 29, 70, 7, array( 15, 26, 36, 44)), + array( 33, 100, 7, array( 20, 36, 52, 64)), + array( 37, 134, 7, array( 26, 48, 72, 88)), // 5 + array( 41, 172, 7, array( 36, 64, 96, 112)), + array( 45, 196, 0, array( 40, 72, 108, 130)), + array( 49, 242, 0, array( 48, 88, 132, 156)), + array( 53, 292, 0, array( 60, 110, 160, 192)), + array( 57, 346, 0, array( 72, 130, 192, 224)), //10 + array( 61, 404, 0, array( 80, 150, 224, 264)), + array( 65, 466, 0, array( 96, 176, 260, 308)), + array( 69, 532, 0, array( 104, 198, 288, 352)), + array( 73, 581, 3, array( 120, 216, 320, 384)), + array( 77, 655, 3, array( 132, 240, 360, 432)), //15 + array( 81, 733, 3, array( 144, 280, 408, 480)), + array( 85, 815, 3, array( 168, 308, 448, 532)), + array( 89, 901, 3, array( 180, 338, 504, 588)), + array( 93, 991, 3, array( 196, 364, 546, 650)), + array( 97, 1085, 3, array( 224, 416, 600, 700)), //20 + array(101, 1156, 4, array( 224, 442, 644, 750)), + array(105, 1258, 4, array( 252, 476, 690, 816)), + array(109, 1364, 4, array( 270, 504, 750, 900)), + array(113, 1474, 4, array( 300, 560, 810, 960)), + array(117, 1588, 4, array( 312, 588, 870, 1050)), //25 + array(121, 1706, 4, array( 336, 644, 952, 1110)), + array(125, 1828, 4, array( 360, 700, 1020, 1200)), + array(129, 1921, 3, array( 390, 728, 1050, 1260)), + array(133, 2051, 3, array( 420, 784, 1140, 1350)), + array(137, 2185, 3, array( 450, 812, 1200, 1440)), //30 + array(141, 2323, 3, array( 480, 868, 1290, 1530)), + array(145, 2465, 3, array( 510, 924, 1350, 1620)), + array(149, 2611, 3, array( 540, 980, 1440, 1710)), + array(153, 2761, 3, array( 570, 1036, 1530, 1800)), + array(157, 2876, 0, array( 570, 1064, 1590, 1890)), //35 + array(161, 3034, 0, array( 600, 1120, 1680, 1980)), + array(165, 3196, 0, array( 630, 1204, 1770, 2100)), + array(169, 3362, 0, array( 660, 1260, 1860, 2220)), + array(173, 3532, 0, array( 720, 1316, 1950, 2310)), + array(177, 3706, 0, array( 750, 1372, 2040, 2430)) //40 + ); + + //---------------------------------------------------------------------- + public static function getDataLength($version, $level) + { + return self::$capacity[$version][QRCAP_WORDS] - self::$capacity[$version][QRCAP_EC][$level]; + } + + //---------------------------------------------------------------------- + public static function getECCLength($version, $level) + { + return self::$capacity[$version][QRCAP_EC][$level]; + } + + //---------------------------------------------------------------------- + public static function getWidth($version) + { + return self::$capacity[$version][QRCAP_WIDTH]; + } + + //---------------------------------------------------------------------- + public static function getRemainder($version) + { + return self::$capacity[$version][QRCAP_REMINDER]; + } + + //---------------------------------------------------------------------- + public static function getMinimumVersion($size, $level) + { + + for($i=1; $i<= QRSPEC_VERSION_MAX; $i++) { + $words = self::$capacity[$i][QRCAP_WORDS] - self::$capacity[$i][QRCAP_EC][$level]; + if($words >= $size) + return $i; + } + + return -1; + } + + //###################################################################### + + public static $lengthTableBits = array( + array(10, 12, 14), + array( 9, 11, 13), + array( 8, 16, 16), + array( 8, 10, 12) + ); + + //---------------------------------------------------------------------- + public static function lengthIndicator($mode, $version) + { + if ($mode == QR_MODE_STRUCTURE) + return 0; + + if ($version <= 9) { + $l = 0; + } else if ($version <= 26) { + $l = 1; + } else { + $l = 2; + } + + return self::$lengthTableBits[$mode][$l]; + } + + //---------------------------------------------------------------------- + public static function maximumWords($mode, $version) + { + if($mode == QR_MODE_STRUCTURE) + return 3; + + if($version <= 9) { + $l = 0; + } else if($version <= 26) { + $l = 1; + } else { + $l = 2; + } + + $bits = self::$lengthTableBits[$mode][$l]; + $words = (1 << $bits) - 1; + + if($mode == QR_MODE_KANJI) { + $words *= 2; // the number of bytes is required + } + + return $words; + } + + // Error correction code ----------------------------------------------- + // Table of the error correction code (Reed-Solomon block) + // See Table 12-16 (pp.30-36), JIS X0510:2004. + + public static $eccTable = array( + array(array( 0, 0), array( 0, 0), array( 0, 0), array( 0, 0)), + array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), // 1 + array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), + array(array( 1, 0), array( 1, 0), array( 2, 0), array( 2, 0)), + array(array( 1, 0), array( 2, 0), array( 2, 0), array( 4, 0)), + array(array( 1, 0), array( 2, 0), array( 2, 2), array( 2, 2)), // 5 + array(array( 2, 0), array( 4, 0), array( 4, 0), array( 4, 0)), + array(array( 2, 0), array( 4, 0), array( 2, 4), array( 4, 1)), + array(array( 2, 0), array( 2, 2), array( 4, 2), array( 4, 2)), + array(array( 2, 0), array( 3, 2), array( 4, 4), array( 4, 4)), + array(array( 2, 2), array( 4, 1), array( 6, 2), array( 6, 2)), //10 + array(array( 4, 0), array( 1, 4), array( 4, 4), array( 3, 8)), + array(array( 2, 2), array( 6, 2), array( 4, 6), array( 7, 4)), + array(array( 4, 0), array( 8, 1), array( 8, 4), array(12, 4)), + array(array( 3, 1), array( 4, 5), array(11, 5), array(11, 5)), + array(array( 5, 1), array( 5, 5), array( 5, 7), array(11, 7)), //15 + array(array( 5, 1), array( 7, 3), array(15, 2), array( 3, 13)), + array(array( 1, 5), array(10, 1), array( 1, 15), array( 2, 17)), + array(array( 5, 1), array( 9, 4), array(17, 1), array( 2, 19)), + array(array( 3, 4), array( 3, 11), array(17, 4), array( 9, 16)), + array(array( 3, 5), array( 3, 13), array(15, 5), array(15, 10)), //20 + array(array( 4, 4), array(17, 0), array(17, 6), array(19, 6)), + array(array( 2, 7), array(17, 0), array( 7, 16), array(34, 0)), + array(array( 4, 5), array( 4, 14), array(11, 14), array(16, 14)), + array(array( 6, 4), array( 6, 14), array(11, 16), array(30, 2)), + array(array( 8, 4), array( 8, 13), array( 7, 22), array(22, 13)), //25 + array(array(10, 2), array(19, 4), array(28, 6), array(33, 4)), + array(array( 8, 4), array(22, 3), array( 8, 26), array(12, 28)), + array(array( 3, 10), array( 3, 23), array( 4, 31), array(11, 31)), + array(array( 7, 7), array(21, 7), array( 1, 37), array(19, 26)), + array(array( 5, 10), array(19, 10), array(15, 25), array(23, 25)), //30 + array(array(13, 3), array( 2, 29), array(42, 1), array(23, 28)), + array(array(17, 0), array(10, 23), array(10, 35), array(19, 35)), + array(array(17, 1), array(14, 21), array(29, 19), array(11, 46)), + array(array(13, 6), array(14, 23), array(44, 7), array(59, 1)), + array(array(12, 7), array(12, 26), array(39, 14), array(22, 41)), //35 + array(array( 6, 14), array( 6, 34), array(46, 10), array( 2, 64)), + array(array(17, 4), array(29, 14), array(49, 10), array(24, 46)), + array(array( 4, 18), array(13, 32), array(48, 14), array(42, 32)), + array(array(20, 4), array(40, 7), array(43, 22), array(10, 67)), + array(array(19, 6), array(18, 31), array(34, 34), array(20, 61)),//40 + ); + + //---------------------------------------------------------------------- + // CACHEABLE!!! + + public static function getEccSpec($version, $level, array &$spec) + { + if (count($spec) < 5) { + $spec = array(0,0,0,0,0); + } + + $b1 = self::$eccTable[$version][$level][0]; + $b2 = self::$eccTable[$version][$level][1]; + $data = self::getDataLength($version, $level); + $ecc = self::getECCLength($version, $level); + + if($b2 == 0) { + $spec[0] = $b1; + $spec[1] = (int)($data / $b1); + $spec[2] = (int)($ecc / $b1); + $spec[3] = 0; + $spec[4] = 0; + } else { + $spec[0] = $b1; + $spec[1] = (int)($data / ($b1 + $b2)); + $spec[2] = (int)($ecc / ($b1 + $b2)); + $spec[3] = $b2; + $spec[4] = $spec[1] + 1; + } + } + + // Alignment pattern --------------------------------------------------- + + // Positions of alignment patterns. + // This array includes only the second and the third position of the + // alignment patterns. Rest of them can be calculated from the distance + // between them. + + // See Table 1 in Appendix E (pp.71) of JIS X0510:2004. + + public static $alignmentPattern = array( + array( 0, 0), + array( 0, 0), array(18, 0), array(22, 0), array(26, 0), array(30, 0), // 1- 5 + array(34, 0), array(22, 38), array(24, 42), array(26, 46), array(28, 50), // 6-10 + array(30, 54), array(32, 58), array(34, 62), array(26, 46), array(26, 48), //11-15 + array(26, 50), array(30, 54), array(30, 56), array(30, 58), array(34, 62), //16-20 + array(28, 50), array(26, 50), array(30, 54), array(28, 54), array(32, 58), //21-25 + array(30, 58), array(34, 62), array(26, 50), array(30, 54), array(26, 52), //26-30 + array(30, 56), array(34, 60), array(30, 58), array(34, 62), array(30, 54), //31-35 + array(24, 50), array(28, 54), array(32, 58), array(26, 54), array(30, 58), //35-40 + ); + + + /** -------------------------------------------------------------------- + * Put an alignment marker. + * @param frame + * @param width + * @param ox,oy center coordinate of the pattern + */ + public static function putAlignmentMarker(array &$frame, $ox, $oy) + { + $finder = array( + "\xa1\xa1\xa1\xa1\xa1", + "\xa1\xa0\xa0\xa0\xa1", + "\xa1\xa0\xa1\xa0\xa1", + "\xa1\xa0\xa0\xa0\xa1", + "\xa1\xa1\xa1\xa1\xa1" + ); + + $yStart = $oy-2; + $xStart = $ox-2; + + for($y=0; $y<5; $y++) { + QRstr::set($frame, $xStart, $yStart+$y, $finder[$y]); + } + } + + //---------------------------------------------------------------------- + public static function putAlignmentPattern($version, &$frame, $width) + { + if($version < 2) + return; + + $d = self::$alignmentPattern[$version][1] - self::$alignmentPattern[$version][0]; + if($d < 0) { + $w = 2; + } else { + $w = (int)(($width - self::$alignmentPattern[$version][0]) / $d + 2); + } + + if($w * $w - 3 == 1) { + $x = self::$alignmentPattern[$version][0]; + $y = self::$alignmentPattern[$version][0]; + self::putAlignmentMarker($frame, $x, $y); + return; + } + + $cx = self::$alignmentPattern[$version][0]; + for($x=1; $x<$w - 1; $x++) { + self::putAlignmentMarker($frame, 6, $cx); + self::putAlignmentMarker($frame, $cx, 6); + $cx += $d; + } + + $cy = self::$alignmentPattern[$version][0]; + for($y=0; $y<$w-1; $y++) { + $cx = self::$alignmentPattern[$version][0]; + for($x=0; $x<$w-1; $x++) { + self::putAlignmentMarker($frame, $cx, $cy); + $cx += $d; + } + $cy += $d; + } + } + + // Version information pattern ----------------------------------------- + + // Version information pattern (BCH coded). + // See Table 1 in Appendix D (pp.68) of JIS X0510:2004. + + // size: [QRSPEC_VERSION_MAX - 6] + + public static $versionPattern = array( + 0x07c94, 0x085bc, 0x09a99, 0x0a4d3, 0x0bbf6, 0x0c762, 0x0d847, 0x0e60d, + 0x0f928, 0x10b78, 0x1145d, 0x12a17, 0x13532, 0x149a6, 0x15683, 0x168c9, + 0x177ec, 0x18ec4, 0x191e1, 0x1afab, 0x1b08e, 0x1cc1a, 0x1d33f, 0x1ed75, + 0x1f250, 0x209d5, 0x216f0, 0x228ba, 0x2379f, 0x24b0b, 0x2542e, 0x26a64, + 0x27541, 0x28c69 + ); + + //---------------------------------------------------------------------- + public static function getVersionPattern($version) + { + if($version < 7 || $version > QRSPEC_VERSION_MAX) + return 0; + + return self::$versionPattern[$version -7]; + } + + // Format information -------------------------------------------------- + // See calcFormatInfo in tests/test_qrspec.c (orginal qrencode c lib) + + public static $formatInfo = array( + array(0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976), + array(0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0), + array(0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed), + array(0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b) + ); + + public static function getFormatInfo($mask, $level) + { + if($mask < 0 || $mask > 7) + return 0; + + if($level < 0 || $level > 3) + return 0; + + return self::$formatInfo[$level][$mask]; + } + + // Frame --------------------------------------------------------------- + // Cache of initial frames. + + public static $frames = array(); + + /** -------------------------------------------------------------------- + * Put a finder pattern. + * @param frame + * @param width + * @param ox,oy upper-left coordinate of the pattern + */ + public static function putFinderPattern(&$frame, $ox, $oy) + { + $finder = array( + "\xc1\xc1\xc1\xc1\xc1\xc1\xc1", + "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", + "\xc1\xc1\xc1\xc1\xc1\xc1\xc1" + ); + + for($y=0; $y<7; $y++) { + QRstr::set($frame, $ox, $oy+$y, $finder[$y]); + } + } + + //---------------------------------------------------------------------- + public static function createFrame($version) + { + $width = self::$capacity[$version][QRCAP_WIDTH]; + $frameLine = str_repeat ("\0", $width); + $frame = array_fill(0, $width, $frameLine); + + // Finder pattern + self::putFinderPattern($frame, 0, 0); + self::putFinderPattern($frame, $width - 7, 0); + self::putFinderPattern($frame, 0, $width - 7); + + // Separator + $yOffset = $width - 7; + + for($y=0; $y<7; $y++) { + $frame[$y][7] = "\xc0"; + $frame[$y][$width - 8] = "\xc0"; + $frame[$yOffset][7] = "\xc0"; + $yOffset++; + } + + $setPattern = str_repeat("\xc0", 8); + + QRstr::set($frame, 0, 7, $setPattern); + QRstr::set($frame, $width-8, 7, $setPattern); + QRstr::set($frame, 0, $width - 8, $setPattern); + + // Format info + $setPattern = str_repeat("\x84", 9); + QRstr::set($frame, 0, 8, $setPattern); + QRstr::set($frame, $width - 8, 8, $setPattern, 8); + + $yOffset = $width - 8; + + for($y=0; $y<8; $y++,$yOffset++) { + $frame[$y][8] = "\x84"; + $frame[$yOffset][8] = "\x84"; + } + + // Timing pattern + + for($i=1; $i<$width-15; $i++) { + $frame[6][7+$i] = chr(0x90 | ($i & 1)); + $frame[7+$i][6] = chr(0x90 | ($i & 1)); + } + + // Alignment pattern + self::putAlignmentPattern($version, $frame, $width); + + // Version information + if($version >= 7) { + $vinf = self::getVersionPattern($version); + + $v = $vinf; + + for($x=0; $x<6; $x++) { + for($y=0; $y<3; $y++) { + $frame[($width - 11)+$y][$x] = chr(0x88 | ($v & 1)); + $v = $v >> 1; + } + } + + $v = $vinf; + for($y=0; $y<6; $y++) { + for($x=0; $x<3; $x++) { + $frame[$y][$x+($width - 11)] = chr(0x88 | ($v & 1)); + $v = $v >> 1; + } + } + } + + // and a little bit... + $frame[$width - 8][8] = "\x81"; + + return $frame; + } + + //---------------------------------------------------------------------- + public static function debug($frame, $binary_mode = false) + { + if ($binary_mode) { + + foreach ($frame as &$frameLine) { + $frameLine = join('  ', explode('0', $frameLine)); + $frameLine = join('██', explode('1', $frameLine)); + } + + ?> + +


        '; + echo join("
        ", $frame); + echo '






'; + + } else { + + foreach ($frame as &$frameLine) { + $frameLine = join(' ', explode("\xc0", $frameLine)); + $frameLine = join('', explode("\xc1", $frameLine)); + $frameLine = join(' ', explode("\xa0", $frameLine)); + $frameLine = join('', explode("\xa1", $frameLine)); + $frameLine = join('', explode("\x84", $frameLine)); //format 0 + $frameLine = join('', explode("\x85", $frameLine)); //format 1 + $frameLine = join('', explode("\x81", $frameLine)); //special bit + $frameLine = join(' ', explode("\x90", $frameLine)); //clock 0 + $frameLine = join('', explode("\x91", $frameLine)); //clock 1 + $frameLine = join(' ', explode("\x88", $frameLine)); //version + $frameLine = join('', explode("\x89", $frameLine)); //version + $frameLine = join('♦', explode("\x01", $frameLine)); + $frameLine = join('⋅', explode("\0", $frameLine)); + } + + ?> + + "; + echo join("
", $frame); + echo "
"; + + } + } + + //---------------------------------------------------------------------- + public static function serial($frame) + { + return gzcompress(join("\n", $frame), 9); + } + + //---------------------------------------------------------------------- + public static function unserial($code) + { + return explode("\n", gzuncompress($code)); + } + + //---------------------------------------------------------------------- + public static function newFrame($version) + { + if($version < 1 || $version > QRSPEC_VERSION_MAX) + return null; + + if(!isset(self::$frames[$version])) { + + $fileName = QR_CACHE_DIR.'frame_'.$version.'.dat'; + + if (QR_CACHEABLE) { + if (file_exists($fileName)) { + self::$frames[$version] = self::unserial(file_get_contents($fileName)); + } else { + self::$frames[$version] = self::createFrame($version); + file_put_contents($fileName, self::serial(self::$frames[$version])); + } + } else { + self::$frames[$version] = self::createFrame($version); + } + } + + if(is_null(self::$frames[$version])) + return null; + + return self::$frames[$version]; + } + + //---------------------------------------------------------------------- + public static function rsBlockNum($spec) { return $spec[0] + $spec[3]; } + public static function rsBlockNum1($spec) { return $spec[0]; } + public static function rsDataCodes1($spec) { return $spec[1]; } + public static function rsEccCodes1($spec) { return $spec[2]; } + public static function rsBlockNum2($spec) { return $spec[3]; } + public static function rsDataCodes2($spec) { return $spec[4]; } + public static function rsEccCodes2($spec) { return $spec[2]; } + public static function rsDataLength($spec) { return ($spec[0] * $spec[1]) + ($spec[3] * $spec[4]); } + public static function rsEccLength($spec) { return ($spec[0] + $spec[3]) * $spec[2]; } + + } + + + +//---- qrimage.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Image output of code using GD2 + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('QR_IMAGE', true); + + class QRimage { + + //---------------------------------------------------------------------- + public static function png($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE) + { + $image = self::image($frame, $pixelPerPoint, $outerFrame); + + if ($filename === false) { + Header("Content-type: image/png"); + ImagePng($image); + } else { + if($saveandprint===TRUE){ + ImagePng($image, $filename); + header("Content-type: image/png"); + ImagePng($image); + }else{ + ImagePng($image, $filename); + } + } + + ImageDestroy($image); + } + + //---------------------------------------------------------------------- + public static function jpg($frame, $filename = false, $pixelPerPoint = 8, $outerFrame = 4, $q = 85) + { + $image = self::image($frame, $pixelPerPoint, $outerFrame); + + if ($filename === false) { + Header("Content-type: image/jpeg"); + ImageJpeg($image, null, $q); + } else { + ImageJpeg($image, $filename, $q); + } + + ImageDestroy($image); + } + + //---------------------------------------------------------------------- + private static function image($frame, $pixelPerPoint = 4, $outerFrame = 4) + { + $h = count($frame); + $w = strlen($frame[0]); + + $imgW = $w + 2*$outerFrame; + $imgH = $h + 2*$outerFrame; + + $base_image =ImageCreate($imgW, $imgH); + + $col[0] = ImageColorAllocate($base_image,255,255,255); + $col[1] = ImageColorAllocate($base_image,0,0,0); + + imagefill($base_image, 0, 0, $col[0]); + + for($y=0; $y<$h; $y++) { + for($x=0; $x<$w; $x++) { + if ($frame[$y][$x] == '1') { + ImageSetPixel($base_image,$x+$outerFrame,$y+$outerFrame,$col[1]); + } + } + } + + $target_image =ImageCreate($imgW * $pixelPerPoint, $imgH * $pixelPerPoint); + ImageCopyResized($target_image, $base_image, 0, 0, 0, 0, $imgW * $pixelPerPoint, $imgH * $pixelPerPoint, $imgW, $imgH); + ImageDestroy($base_image); + + return $target_image; + } + } + + + +//---- qrinput.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Input encoding class + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('STRUCTURE_HEADER_BITS', 20); + define('MAX_STRUCTURED_SYMBOLS', 16); + + class QRinputItem { + + public $mode; + public $size; + public $data; + public $bstream; + + public function __construct($mode, $size, $data, $bstream = null) + { + $setData = array_slice($data, 0, $size); + + if (count($setData) < $size) { + $setData = array_merge($setData, array_fill(0,$size-count($setData),0)); + } + + if(!QRinput::check($mode, $size, $setData)) { + throw new Exception('Error m:'.$mode.',s:'.$size.',d:'.join(',',$setData)); + return null; + } + + $this->mode = $mode; + $this->size = $size; + $this->data = $setData; + $this->bstream = $bstream; + } + + //---------------------------------------------------------------------- + public function encodeModeNum($version) + { + try { + + $words = (int)($this->size / 3); + $bs = new QRbitstream(); + + $val = 0x1; + $bs->appendNum(4, $val); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_NUM, $version), $this->size); + + for($i=0; $i<$words; $i++) { + $val = (ord($this->data[$i*3 ]) - ord('0')) * 100; + $val += (ord($this->data[$i*3+1]) - ord('0')) * 10; + $val += (ord($this->data[$i*3+2]) - ord('0')); + $bs->appendNum(10, $val); + } + + if($this->size - $words * 3 == 1) { + $val = ord($this->data[$words*3]) - ord('0'); + $bs->appendNum(4, $val); + } else if($this->size - $words * 3 == 2) { + $val = (ord($this->data[$words*3 ]) - ord('0')) * 10; + $val += (ord($this->data[$words*3+1]) - ord('0')); + $bs->appendNum(7, $val); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeModeAn($version) + { + try { + $words = (int)($this->size / 2); + $bs = new QRbitstream(); + + $bs->appendNum(4, 0x02); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_AN, $version), $this->size); + + for($i=0; $i<$words; $i++) { + $val = (int)QRinput::lookAnTable(ord($this->data[$i*2 ])) * 45; + $val += (int)QRinput::lookAnTable(ord($this->data[$i*2+1])); + + $bs->appendNum(11, $val); + } + + if($this->size & 1) { + $val = QRinput::lookAnTable(ord($this->data[$words * 2])); + $bs->appendNum(6, $val); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeMode8($version) + { + try { + $bs = new QRbitstream(); + + $bs->appendNum(4, 0x4); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_8, $version), $this->size); + + for($i=0; $i<$this->size; $i++) { + $bs->appendNum(8, ord($this->data[$i])); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeModeKanji($version) + { + try { + + $bs = new QRbitrtream(); + + $bs->appendNum(4, 0x8); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_KANJI, $version), (int)($this->size / 2)); + + for($i=0; $i<$this->size; $i+=2) { + $val = (ord($this->data[$i]) << 8) | ord($this->data[$i+1]); + if($val <= 0x9ffc) { + $val -= 0x8140; + } else { + $val -= 0xc140; + } + + $h = ($val >> 8) * 0xc0; + $val = ($val & 0xff) + $h; + + $bs->appendNum(13, $val); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeModeStructure() + { + try { + $bs = new QRbitstream(); + + $bs->appendNum(4, 0x03); + $bs->appendNum(4, ord($this->data[1]) - 1); + $bs->appendNum(4, ord($this->data[0]) - 1); + $bs->appendNum(8, ord($this->data[2])); + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function estimateBitStreamSizeOfEntry($version) + { + $bits = 0; + + if($version == 0) + $version = 1; + + switch($this->mode) { + case QR_MODE_NUM: $bits = QRinput::estimateBitsModeNum($this->size); break; + case QR_MODE_AN: $bits = QRinput::estimateBitsModeAn($this->size); break; + case QR_MODE_8: $bits = QRinput::estimateBitsMode8($this->size); break; + case QR_MODE_KANJI: $bits = QRinput::estimateBitsModeKanji($this->size);break; + case QR_MODE_STRUCTURE: return STRUCTURE_HEADER_BITS; + default: + return 0; + } + + $l = QRspec::lengthIndicator($this->mode, $version); + $m = 1 << $l; + $num = (int)(($this->size + $m - 1) / $m); + + $bits += $num * (4 + $l); + + return $bits; + } + + //---------------------------------------------------------------------- + public function encodeBitStream($version) + { + try { + + unset($this->bstream); + $words = QRspec::maximumWords($this->mode, $version); + + if($this->size > $words) { + + $st1 = new QRinputItem($this->mode, $words, $this->data); + $st2 = new QRinputItem($this->mode, $this->size - $words, array_slice($this->data, $words)); + + $st1->encodeBitStream($version); + $st2->encodeBitStream($version); + + $this->bstream = new QRbitstream(); + $this->bstream->append($st1->bstream); + $this->bstream->append($st2->bstream); + + unset($st1); + unset($st2); + + } else { + + $ret = 0; + + switch($this->mode) { + case QR_MODE_NUM: $ret = $this->encodeModeNum($version); break; + case QR_MODE_AN: $ret = $this->encodeModeAn($version); break; + case QR_MODE_8: $ret = $this->encodeMode8($version); break; + case QR_MODE_KANJI: $ret = $this->encodeModeKanji($version);break; + case QR_MODE_STRUCTURE: $ret = $this->encodeModeStructure(); break; + + default: + break; + } + + if($ret < 0) + return -1; + } + + return $this->bstream->size(); + + } catch (Exception $e) { + return -1; + } + } + }; + + //########################################################################## + + class QRinput { + + public $items; + + private $version; + private $level; + + //---------------------------------------------------------------------- + public function __construct($version = 0, $level = QR_ECLEVEL_L) + { + if ($version < 0 || $version > QRSPEC_VERSION_MAX || $level > QR_ECLEVEL_H) { + throw new Exception('Invalid version no'); + return NULL; + } + + $this->version = $version; + $this->level = $level; + } + + //---------------------------------------------------------------------- + public function getVersion() + { + return $this->version; + } + + //---------------------------------------------------------------------- + public function setVersion($version) + { + if($version < 0 || $version > QRSPEC_VERSION_MAX) { + throw new Exception('Invalid version no'); + return -1; + } + + $this->version = $version; + + return 0; + } + + //---------------------------------------------------------------------- + public function getErrorCorrectionLevel() + { + return $this->level; + } + + //---------------------------------------------------------------------- + public function setErrorCorrectionLevel($level) + { + if($level > QR_ECLEVEL_H) { + throw new Exception('Invalid ECLEVEL'); + return -1; + } + + $this->level = $level; + + return 0; + } + + //---------------------------------------------------------------------- + public function appendEntry(QRinputItem $entry) + { + $this->items[] = $entry; + } + + //---------------------------------------------------------------------- + public function append($mode, $size, $data) + { + try { + $entry = new QRinputItem($mode, $size, $data); + $this->items[] = $entry; + return 0; + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + + public function insertStructuredAppendHeader($size, $index, $parity) + { + if( $size > MAX_STRUCTURED_SYMBOLS ) { + throw new Exception('insertStructuredAppendHeader wrong size'); + } + + if( $index <= 0 || $index > MAX_STRUCTURED_SYMBOLS ) { + throw new Exception('insertStructuredAppendHeader wrong index'); + } + + $buf = array($size, $index, $parity); + + try { + $entry = new QRinputItem(QR_MODE_STRUCTURE, 3, buf); + array_unshift($this->items, $entry); + return 0; + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function calcParity() + { + $parity = 0; + + foreach($this->items as $item) { + if($item->mode != QR_MODE_STRUCTURE) { + for($i=$item->size-1; $i>=0; $i--) { + $parity ^= $item->data[$i]; + } + } + } + + return $parity; + } + + //---------------------------------------------------------------------- + public static function checkModeNum($size, $data) + { + for($i=0; $i<$size; $i++) { + if((ord($data[$i]) < ord('0')) || (ord($data[$i]) > ord('9'))){ + return false; + } + } + + return true; + } + + //---------------------------------------------------------------------- + public static function estimateBitsModeNum($size) + { + $w = (int)$size / 3; + $bits = $w * 10; + + switch($size - $w * 3) { + case 1: + $bits += 4; + break; + case 2: + $bits += 7; + break; + default: + break; + } + + return $bits; + } + + //---------------------------------------------------------------------- + public static $anTable = array( + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1, + -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 + ); + + //---------------------------------------------------------------------- + public static function lookAnTable($c) + { + return (($c > 127)?-1:self::$anTable[$c]); + } + + //---------------------------------------------------------------------- + public static function checkModeAn($size, $data) + { + for($i=0; $i<$size; $i++) { + if (self::lookAnTable(ord($data[$i])) == -1) { + return false; + } + } + + return true; + } + + //---------------------------------------------------------------------- + public static function estimateBitsModeAn($size) + { + $w = (int)($size / 2); + $bits = $w * 11; + + if($size & 1) { + $bits += 6; + } + + return $bits; + } + + //---------------------------------------------------------------------- + public static function estimateBitsMode8($size) + { + return $size * 8; + } + + //---------------------------------------------------------------------- + public function estimateBitsModeKanji($size) + { + return (int)(($size / 2) * 13); + } + + //---------------------------------------------------------------------- + public static function checkModeKanji($size, $data) + { + if($size & 1) + return false; + + for($i=0; $i<$size; $i+=2) { + $val = (ord($data[$i]) << 8) | ord($data[$i+1]); + if( $val < 0x8140 + || ($val > 0x9ffc && $val < 0xe040) + || $val > 0xebbf) { + return false; + } + } + + return true; + } + + /*********************************************************************** + * Validation + **********************************************************************/ + + public static function check($mode, $size, $data) + { + if($size <= 0) + return false; + + switch($mode) { + case QR_MODE_NUM: return self::checkModeNum($size, $data); break; + case QR_MODE_AN: return self::checkModeAn($size, $data); break; + case QR_MODE_KANJI: return self::checkModeKanji($size, $data); break; + case QR_MODE_8: return true; break; + case QR_MODE_STRUCTURE: return true; break; + + default: + break; + } + + return false; + } + + + //---------------------------------------------------------------------- + public function estimateBitStreamSize($version) + { + $bits = 0; + + foreach($this->items as $item) { + $bits += $item->estimateBitStreamSizeOfEntry($version); + } + + return $bits; + } + + //---------------------------------------------------------------------- + public function estimateVersion() + { + $version = 0; + $prev = 0; + do { + $prev = $version; + $bits = $this->estimateBitStreamSize($prev); + $version = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level); + if ($version < 0) { + return -1; + } + } while ($version > $prev); + + return $version; + } + + //---------------------------------------------------------------------- + public static function lengthOfCode($mode, $version, $bits) + { + $payload = $bits - 4 - QRspec::lengthIndicator($mode, $version); + switch($mode) { + case QR_MODE_NUM: + $chunks = (int)($payload / 10); + $remain = $payload - $chunks * 10; + $size = $chunks * 3; + if($remain >= 7) { + $size += 2; + } else if($remain >= 4) { + $size += 1; + } + break; + case QR_MODE_AN: + $chunks = (int)($payload / 11); + $remain = $payload - $chunks * 11; + $size = $chunks * 2; + if($remain >= 6) + $size++; + break; + case QR_MODE_8: + $size = (int)($payload / 8); + break; + case QR_MODE_KANJI: + $size = (int)(($payload / 13) * 2); + break; + case QR_MODE_STRUCTURE: + $size = (int)($payload / 8); + break; + default: + $size = 0; + break; + } + + $maxsize = QRspec::maximumWords($mode, $version); + if($size < 0) $size = 0; + if($size > $maxsize) $size = $maxsize; + + return $size; + } + + //---------------------------------------------------------------------- + public function createBitStream() + { + $total = 0; + + foreach($this->items as $item) { + $bits = $item->encodeBitStream($this->version); + + if($bits < 0) + return -1; + + $total += $bits; + } + + return $total; + } + + //---------------------------------------------------------------------- + public function convertData() + { + $ver = $this->estimateVersion(); + if($ver > $this->getVersion()) { + $this->setVersion($ver); + } + + for(;;) { + $bits = $this->createBitStream(); + + if($bits < 0) + return -1; + + $ver = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level); + if($ver < 0) { + throw new Exception('WRONG VERSION'); + return -1; + } else if($ver > $this->getVersion()) { + $this->setVersion($ver); + } else { + break; + } + } + + return 0; + } + + //---------------------------------------------------------------------- + public function appendPaddingBit(&$bstream) + { + $bits = $bstream->size(); + $maxwords = QRspec::getDataLength($this->version, $this->level); + $maxbits = $maxwords * 8; + + if ($maxbits == $bits) { + return 0; + } + + if ($maxbits - $bits < 5) { + return $bstream->appendNum($maxbits - $bits, 0); + } + + $bits += 4; + $words = (int)(($bits + 7) / 8); + + $padding = new QRbitstream(); + $ret = $padding->appendNum($words * 8 - $bits + 4, 0); + + if($ret < 0) + return $ret; + + $padlen = $maxwords - $words; + + if($padlen > 0) { + + $padbuf = array(); + for($i=0; $i<$padlen; $i++) { + $padbuf[$i] = ($i&1)?0x11:0xec; + } + + $ret = $padding->appendBytes($padlen, $padbuf); + + if($ret < 0) + return $ret; + + } + + $ret = $bstream->append($padding); + + return $ret; + } + + //---------------------------------------------------------------------- + public function mergeBitStream() + { + if($this->convertData() < 0) { + return null; + } + + $bstream = new QRbitstream(); + + foreach($this->items as $item) { + $ret = $bstream->append($item->bstream); + if($ret < 0) { + return null; + } + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public function getBitStream() + { + + $bstream = $this->mergeBitStream(); + + if($bstream == null) { + return null; + } + + $ret = $this->appendPaddingBit($bstream); + if($ret < 0) { + return null; + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public function getByteStream() + { + $bstream = $this->getBitStream(); + if($bstream == null) { + return null; + } + + return $bstream->toByte(); + } + } + + + + + + +//---- qrbitstream.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Bitstream class + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRbitstream { + + public $data = array(); + + //---------------------------------------------------------------------- + public function size() + { + return count($this->data); + } + + //---------------------------------------------------------------------- + public function allocate($setLength) + { + $this->data = array_fill(0, $setLength, 0); + return 0; + } + + //---------------------------------------------------------------------- + public static function newFromNum($bits, $num) + { + $bstream = new QRbitstream(); + $bstream->allocate($bits); + + $mask = 1 << ($bits - 1); + for($i=0; $i<$bits; $i++) { + if($num & $mask) { + $bstream->data[$i] = 1; + } else { + $bstream->data[$i] = 0; + } + $mask = $mask >> 1; + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public static function newFromBytes($size, $data) + { + $bstream = new QRbitstream(); + $bstream->allocate($size * 8); + $p=0; + + for($i=0; $i<$size; $i++) { + $mask = 0x80; + for($j=0; $j<8; $j++) { + if($data[$i] & $mask) { + $bstream->data[$p] = 1; + } else { + $bstream->data[$p] = 0; + } + $p++; + $mask = $mask >> 1; + } + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public function append(QRbitstream $arg) + { + if (is_null($arg)) { + return -1; + } + + if($arg->size() == 0) { + return 0; + } + + if($this->size() == 0) { + $this->data = $arg->data; + return 0; + } + + $this->data = array_values(array_merge($this->data, $arg->data)); + + return 0; + } + + //---------------------------------------------------------------------- + public function appendNum($bits, $num) + { + if ($bits == 0) + return 0; + + $b = QRbitstream::newFromNum($bits, $num); + + if(is_null($b)) + return -1; + + $ret = $this->append($b); + unset($b); + + return $ret; + } + + //---------------------------------------------------------------------- + public function appendBytes($size, $data) + { + if ($size == 0) + return 0; + + $b = QRbitstream::newFromBytes($size, $data); + + if(is_null($b)) + return -1; + + $ret = $this->append($b); + unset($b); + + return $ret; + } + + //---------------------------------------------------------------------- + public function toByte() + { + + $size = $this->size(); + + if($size == 0) { + return array(); + } + + $data = array_fill(0, (int)(($size + 7) / 8), 0); + $bytes = (int)($size / 8); + + $p = 0; + + for($i=0; $i<$bytes; $i++) { + $v = 0; + for($j=0; $j<8; $j++) { + $v = $v << 1; + $v |= $this->data[$p]; + $p++; + } + $data[$i] = $v; + } + + if($size & 7) { + $v = 0; + for($j=0; $j<($size & 7); $j++) { + $v = $v << 1; + $v |= $this->data[$p]; + $p++; + } + $data[$bytes] = $v; + } + + return $data; + } + + } + + + + +//---- qrsplit.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Input splitting classes + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * The following data / specifications are taken from + * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004) + * or + * "Automatic identification and data capture techniques -- + * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + class QRsplit { + + public $dataStr = ''; + public $input; + public $modeHint; + + //---------------------------------------------------------------------- + public function __construct($dataStr, $input, $modeHint) + { + $this->dataStr = $dataStr; + $this->input = $input; + $this->modeHint = $modeHint; + } + + //---------------------------------------------------------------------- + public static function isdigitat($str, $pos) + { + if ($pos >= strlen($str)) + return false; + + return ((ord($str[$pos]) >= ord('0'))&&(ord($str[$pos]) <= ord('9'))); + } + + //---------------------------------------------------------------------- + public static function isalnumat($str, $pos) + { + if ($pos >= strlen($str)) + return false; + + return (QRinput::lookAnTable(ord($str[$pos])) >= 0); + } + + //---------------------------------------------------------------------- + public function identifyMode($pos) + { + if ($pos >= strlen($this->dataStr)) + return QR_MODE_NUL; + + $c = $this->dataStr[$pos]; + + if(self::isdigitat($this->dataStr, $pos)) { + return QR_MODE_NUM; + } else if(self::isalnumat($this->dataStr, $pos)) { + return QR_MODE_AN; + } else if($this->modeHint == QR_MODE_KANJI) { + + if ($pos+1 < strlen($this->dataStr)) + { + $d = $this->dataStr[$pos+1]; + $word = (ord($c) << 8) | ord($d); + if(($word >= 0x8140 && $word <= 0x9ffc) || ($word >= 0xe040 && $word <= 0xebbf)) { + return QR_MODE_KANJI; + } + } + } + + return QR_MODE_8; + } + + //---------------------------------------------------------------------- + public function eatNum() + { + $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); + + $p = 0; + while(self::isdigitat($this->dataStr, $p)) { + $p++; + } + + $run = $p; + $mode = $this->identifyMode($p); + + if($mode == QR_MODE_8) { + $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln + + QRinput::estimateBitsMode8(1) // + 4 + l8 + - QRinput::estimateBitsMode8($run + 1); // - 4 - l8 + if($dif > 0) { + return $this->eat8(); + } + } + if($mode == QR_MODE_AN) { + $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln + + QRinput::estimateBitsModeAn(1) // + 4 + la + - QRinput::estimateBitsModeAn($run + 1);// - 4 - la + if($dif > 0) { + return $this->eatAn(); + } + } + + $ret = $this->input->append(QR_MODE_NUM, $run, str_split($this->dataStr)); + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function eatAn() + { + $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion()); + $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); + + $p = 0; + + while(self::isalnumat($this->dataStr, $p)) { + if(self::isdigitat($this->dataStr, $p)) { + $q = $p; + while(self::isdigitat($this->dataStr, $q)) { + $q++; + } + + $dif = QRinput::estimateBitsModeAn($p) // + 4 + la + + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln + - QRinput::estimateBitsModeAn($q); // - 4 - la + + if($dif < 0) { + break; + } else { + $p = $q; + } + } else { + $p++; + } + } + + $run = $p; + + if(!self::isalnumat($this->dataStr, $p)) { + $dif = QRinput::estimateBitsModeAn($run) + 4 + $la + + QRinput::estimateBitsMode8(1) // + 4 + l8 + - QRinput::estimateBitsMode8($run + 1); // - 4 - l8 + if($dif > 0) { + return $this->eat8(); + } + } + + $ret = $this->input->append(QR_MODE_AN, $run, str_split($this->dataStr)); + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function eatKanji() + { + $p = 0; + + while($this->identifyMode($p) == QR_MODE_KANJI) { + $p += 2; + } + + $ret = $this->input->append(QR_MODE_KANJI, $p, str_split($this->dataStr)); + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function eat8() + { + $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion()); + $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); + + $p = 1; + $dataStrLen = strlen($this->dataStr); + + while($p < $dataStrLen) { + + $mode = $this->identifyMode($p); + if($mode == QR_MODE_KANJI) { + break; + } + if($mode == QR_MODE_NUM) { + $q = $p; + while(self::isdigitat($this->dataStr, $q)) { + $q++; + } + $dif = QRinput::estimateBitsMode8($p) // + 4 + l8 + + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln + - QRinput::estimateBitsMode8($q); // - 4 - l8 + if($dif < 0) { + break; + } else { + $p = $q; + } + } else if($mode == QR_MODE_AN) { + $q = $p; + while(self::isalnumat($this->dataStr, $q)) { + $q++; + } + $dif = QRinput::estimateBitsMode8($p) // + 4 + l8 + + QRinput::estimateBitsModeAn($q - $p) + 4 + $la + - QRinput::estimateBitsMode8($q); // - 4 - l8 + if($dif < 0) { + break; + } else { + $p = $q; + } + } else { + $p++; + } + } + + $run = $p; + $ret = $this->input->append(QR_MODE_8, $run, str_split($this->dataStr)); + + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function splitString() + { + while (strlen($this->dataStr) > 0) + { + if($this->dataStr == '') + return 0; + + $mode = $this->identifyMode(0); + + switch ($mode) { + case QR_MODE_NUM: $length = $this->eatNum(); break; + case QR_MODE_AN: $length = $this->eatAn(); break; + case QR_MODE_KANJI: + if ($hint == QR_MODE_KANJI) + $length = $this->eatKanji(); + else $length = $this->eat8(); + break; + default: $length = $this->eat8(); break; + + } + + if($length == 0) return 0; + if($length < 0) return -1; + + $this->dataStr = substr($this->dataStr, $length); + } + } + + //---------------------------------------------------------------------- + public function toUpper() + { + $stringLen = strlen($this->dataStr); + $p = 0; + + while ($p<$stringLen) { + $mode = self::identifyMode(substr($this->dataStr, $p), $this->modeHint); + if($mode == QR_MODE_KANJI) { + $p += 2; + } else { + if (ord($this->dataStr[$p]) >= ord('a') && ord($this->dataStr[$p]) <= ord('z')) { + $this->dataStr[$p] = chr(ord($this->dataStr[$p]) - 32); + } + $p++; + } + } + + return $this->dataStr; + } + + //---------------------------------------------------------------------- + public static function splitStringToQRinput($string, QRinput $input, $modeHint, $casesensitive = true) + { + if(is_null($string) || $string == '\0' || $string == '') { + throw new Exception('empty string!!!'); + } + + $split = new QRsplit($string, $input, $modeHint); + + if(!$casesensitive) + $split->toUpper(); + + return $split->splitString(); + } + } + + + +//---- qrrscode.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Reed-Solomon error correction support + * + * Copyright (C) 2002, 2003, 2004, 2006 Phil Karn, KA9Q + * (libfec is released under the GNU Lesser General Public License.) + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRrsItem { + + public $mm; // Bits per symbol + public $nn; // Symbols per block (= (1<= $this->nn) { + $x -= $this->nn; + $x = ($x >> $this->mm) + ($x & $this->nn); + } + + return $x; + } + + //---------------------------------------------------------------------- + public static function init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) + { + // Common code for intializing a Reed-Solomon control block (char or int symbols) + // Copyright 2004 Phil Karn, KA9Q + // May be used under the terms of the GNU Lesser General Public License (LGPL) + + $rs = null; + + // Check parameter ranges + if($symsize < 0 || $symsize > 8) return $rs; + if($fcr < 0 || $fcr >= (1<<$symsize)) return $rs; + if($prim <= 0 || $prim >= (1<<$symsize)) return $rs; + if($nroots < 0 || $nroots >= (1<<$symsize)) return $rs; // Can't have more roots than symbol values! + if($pad < 0 || $pad >= ((1<<$symsize) -1 - $nroots)) return $rs; // Too much padding + + $rs = new QRrsItem(); + $rs->mm = $symsize; + $rs->nn = (1<<$symsize)-1; + $rs->pad = $pad; + + $rs->alpha_to = array_fill(0, $rs->nn+1, 0); + $rs->index_of = array_fill(0, $rs->nn+1, 0); + + // PHP style macro replacement ;) + $NN =& $rs->nn; + $A0 =& $NN; + + // Generate Galois field lookup tables + $rs->index_of[0] = $A0; // log(zero) = -inf + $rs->alpha_to[$A0] = 0; // alpha**-inf = 0 + $sr = 1; + + for($i=0; $i<$rs->nn; $i++) { + $rs->index_of[$sr] = $i; + $rs->alpha_to[$i] = $sr; + $sr <<= 1; + if($sr & (1<<$symsize)) { + $sr ^= $gfpoly; + } + $sr &= $rs->nn; + } + + if($sr != 1){ + // field generator polynomial is not primitive! + $rs = NULL; + return $rs; + } + + /* Form RS code generator polynomial from its roots */ + $rs->genpoly = array_fill(0, $nroots+1, 0); + + $rs->fcr = $fcr; + $rs->prim = $prim; + $rs->nroots = $nroots; + $rs->gfpoly = $gfpoly; + + /* Find prim-th root of 1, used in decoding */ + for($iprim=1;($iprim % $prim) != 0;$iprim += $rs->nn) + ; // intentional empty-body loop! + + $rs->iprim = (int)($iprim / $prim); + $rs->genpoly[0] = 1; + + for ($i = 0,$root=$fcr*$prim; $i < $nroots; $i++, $root += $prim) { + $rs->genpoly[$i+1] = 1; + + // Multiply rs->genpoly[] by @**(root + x) + for ($j = $i; $j > 0; $j--) { + if ($rs->genpoly[$j] != 0) { + $rs->genpoly[$j] = $rs->genpoly[$j-1] ^ $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[$j]] + $root)]; + } else { + $rs->genpoly[$j] = $rs->genpoly[$j-1]; + } + } + // rs->genpoly[0] can never be zero + $rs->genpoly[0] = $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[0]] + $root)]; + } + + // convert rs->genpoly[] to index form for quicker encoding + for ($i = 0; $i <= $nroots; $i++) + $rs->genpoly[$i] = $rs->index_of[$rs->genpoly[$i]]; + + return $rs; + } + + //---------------------------------------------------------------------- + public function encode_rs_char($data, &$parity) + { + $MM =& $this->mm; + $NN =& $this->nn; + $ALPHA_TO =& $this->alpha_to; + $INDEX_OF =& $this->index_of; + $GENPOLY =& $this->genpoly; + $NROOTS =& $this->nroots; + $FCR =& $this->fcr; + $PRIM =& $this->prim; + $IPRIM =& $this->iprim; + $PAD =& $this->pad; + $A0 =& $NN; + + $parity = array_fill(0, $NROOTS, 0); + + for($i=0; $i< ($NN-$NROOTS-$PAD); $i++) { + + $feedback = $INDEX_OF[$data[$i] ^ $parity[0]]; + if($feedback != $A0) { + // feedback term is non-zero + + // This line is unnecessary when GENPOLY[NROOTS] is unity, as it must + // always be for the polynomials constructed by init_rs() + $feedback = $this->modnn($NN - $GENPOLY[$NROOTS] + $feedback); + + for($j=1;$j<$NROOTS;$j++) { + $parity[$j] ^= $ALPHA_TO[$this->modnn($feedback + $GENPOLY[$NROOTS-$j])]; + } + } + + // Shift + array_shift($parity); + if($feedback != $A0) { + array_push($parity, $ALPHA_TO[$this->modnn($feedback + $GENPOLY[0])]); + } else { + array_push($parity, 0); + } + } + } + } + + //########################################################################## + + class QRrs { + + public static $items = array(); + + //---------------------------------------------------------------------- + public static function init_rs($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) + { + foreach(self::$items as $rs) { + if($rs->pad != $pad) continue; + if($rs->nroots != $nroots) continue; + if($rs->mm != $symsize) continue; + if($rs->gfpoly != $gfpoly) continue; + if($rs->fcr != $fcr) continue; + if($rs->prim != $prim) continue; + + return $rs; + } + + $rs = QRrsItem::init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad); + array_unshift(self::$items, $rs); + + return $rs; + } + } + + + +//---- qrmask.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Masking + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('N1', 3); + define('N2', 3); + define('N3', 40); + define('N4', 10); + + class QRmask { + + public $runLength = array(); + + //---------------------------------------------------------------------- + public function __construct() + { + $this->runLength = array_fill(0, QRSPEC_WIDTH_MAX + 1, 0); + } + + //---------------------------------------------------------------------- + public function writeFormatInformation($width, &$frame, $mask, $level) + { + $blacks = 0; + $format = QRspec::getFormatInfo($mask, $level); + + for($i=0; $i<8; $i++) { + if($format & 1) { + $blacks += 2; + $v = 0x85; + } else { + $v = 0x84; + } + + $frame[8][$width - 1 - $i] = chr($v); + if($i < 6) { + $frame[$i][8] = chr($v); + } else { + $frame[$i + 1][8] = chr($v); + } + $format = $format >> 1; + } + + for($i=0; $i<7; $i++) { + if($format & 1) { + $blacks += 2; + $v = 0x85; + } else { + $v = 0x84; + } + + $frame[$width - 7 + $i][8] = chr($v); + if($i == 0) { + $frame[8][7] = chr($v); + } else { + $frame[8][6 - $i] = chr($v); + } + + $format = $format >> 1; + } + + return $blacks; + } + + //---------------------------------------------------------------------- + public function mask0($x, $y) { return ($x+$y)&1; } + public function mask1($x, $y) { return ($y&1); } + public function mask2($x, $y) { return ($x%3); } + public function mask3($x, $y) { return ($x+$y)%3; } + public function mask4($x, $y) { return (((int)($y/2))+((int)($x/3)))&1; } + public function mask5($x, $y) { return (($x*$y)&1)+($x*$y)%3; } + public function mask6($x, $y) { return ((($x*$y)&1)+($x*$y)%3)&1; } + public function mask7($x, $y) { return ((($x*$y)%3)+(($x+$y)&1))&1; } + + //---------------------------------------------------------------------- + private function generateMaskNo($maskNo, $width, $frame) + { + $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); + + for($y=0; $y<$width; $y++) { + for($x=0; $x<$width; $x++) { + if(ord($frame[$y][$x]) & 0x80) { + $bitMask[$y][$x] = 0; + } else { + $maskFunc = call_user_func(array($this, 'mask'.$maskNo), $x, $y); + $bitMask[$y][$x] = ($maskFunc == 0)?1:0; + } + + } + } + + return $bitMask; + } + + //---------------------------------------------------------------------- + public static function serial($bitFrame) + { + $codeArr = array(); + + foreach ($bitFrame as $line) + $codeArr[] = join('', $line); + + return gzcompress(join("\n", $codeArr), 9); + } + + //---------------------------------------------------------------------- + public static function unserial($code) + { + $codeArr = array(); + + $codeLines = explode("\n", gzuncompress($code)); + foreach ($codeLines as $line) + $codeArr[] = str_split($line); + + return $codeArr; + } + + //---------------------------------------------------------------------- + public function makeMaskNo($maskNo, $width, $s, &$d, $maskGenOnly = false) + { + $b = 0; + $bitMask = array(); + + $fileName = QR_CACHE_DIR.'mask_'.$maskNo.DIRECTORY_SEPARATOR.'mask_'.$width.'_'.$maskNo.'.dat'; + + if (QR_CACHEABLE) { + if (file_exists($fileName)) { + $bitMask = self::unserial(file_get_contents($fileName)); + } else { + $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); + if (!file_exists(QR_CACHE_DIR.'mask_'.$maskNo)) + mkdir(QR_CACHE_DIR.'mask_'.$maskNo); + file_put_contents($fileName, self::serial($bitMask)); + } + } else { + $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); + } + + if ($maskGenOnly) + return; + + $d = $s; + + for($y=0; $y<$width; $y++) { + for($x=0; $x<$width; $x++) { + if($bitMask[$y][$x] == 1) { + $d[$y][$x] = chr(ord($s[$y][$x]) ^ (int)$bitMask[$y][$x]); + } + $b += (int)(ord($d[$y][$x]) & 1); + } + } + + return $b; + } + + //---------------------------------------------------------------------- + public function makeMask($width, $frame, $maskNo, $level) + { + $masked = array_fill(0, $width, str_repeat("\0", $width)); + $this->makeMaskNo($maskNo, $width, $frame, $masked); + $this->writeFormatInformation($width, $masked, $maskNo, $level); + + return $masked; + } + + //---------------------------------------------------------------------- + public function calcN1N3($length) + { + $demerit = 0; + + for($i=0; $i<$length; $i++) { + + if($this->runLength[$i] >= 5) { + $demerit += (N1 + ($this->runLength[$i] - 5)); + } + if($i & 1) { + if(($i >= 3) && ($i < ($length-2)) && ($this->runLength[$i] % 3 == 0)) { + $fact = (int)($this->runLength[$i] / 3); + if(($this->runLength[$i-2] == $fact) && + ($this->runLength[$i-1] == $fact) && + ($this->runLength[$i+1] == $fact) && + ($this->runLength[$i+2] == $fact)) { + if(($this->runLength[$i-3] < 0) || ($this->runLength[$i-3] >= (4 * $fact))) { + $demerit += N3; + } else if((($i+3) >= $length) || ($this->runLength[$i+3] >= (4 * $fact))) { + $demerit += N3; + } + } + } + } + } + return $demerit; + } + + //---------------------------------------------------------------------- + public function evaluateSymbol($width, $frame) + { + $head = 0; + $demerit = 0; + + for($y=0; $y<$width; $y++) { + $head = 0; + $this->runLength[0] = 1; + + $frameY = $frame[$y]; + + if ($y>0) + $frameYM = $frame[$y-1]; + + for($x=0; $x<$width; $x++) { + if(($x > 0) && ($y > 0)) { + $b22 = ord($frameY[$x]) & ord($frameY[$x-1]) & ord($frameYM[$x]) & ord($frameYM[$x-1]); + $w22 = ord($frameY[$x]) | ord($frameY[$x-1]) | ord($frameYM[$x]) | ord($frameYM[$x-1]); + + if(($b22 | ($w22 ^ 1))&1) { + $demerit += N2; + } + } + if(($x == 0) && (ord($frameY[$x]) & 1)) { + $this->runLength[0] = -1; + $head = 1; + $this->runLength[$head] = 1; + } else if($x > 0) { + if((ord($frameY[$x]) ^ ord($frameY[$x-1])) & 1) { + $head++; + $this->runLength[$head] = 1; + } else { + $this->runLength[$head]++; + } + } + } + + $demerit += $this->calcN1N3($head+1); + } + + for($x=0; $x<$width; $x++) { + $head = 0; + $this->runLength[0] = 1; + + for($y=0; $y<$width; $y++) { + if($y == 0 && (ord($frame[$y][$x]) & 1)) { + $this->runLength[0] = -1; + $head = 1; + $this->runLength[$head] = 1; + } else if($y > 0) { + if((ord($frame[$y][$x]) ^ ord($frame[$y-1][$x])) & 1) { + $head++; + $this->runLength[$head] = 1; + } else { + $this->runLength[$head]++; + } + } + } + + $demerit += $this->calcN1N3($head+1); + } + + return $demerit; + } + + + //---------------------------------------------------------------------- + public function mask($width, $frame, $level) + { + $minDemerit = PHP_INT_MAX; + $bestMaskNum = 0; + $bestMask = array(); + + $checked_masks = array(0,1,2,3,4,5,6,7); + + if (QR_FIND_FROM_RANDOM !== false) { + + $howManuOut = 8-(QR_FIND_FROM_RANDOM % 9); + for ($i = 0; $i < $howManuOut; $i++) { + $remPos = rand (0, count($checked_masks)-1); + unset($checked_masks[$remPos]); + $checked_masks = array_values($checked_masks); + } + + } + + $bestMask = $frame; + + foreach($checked_masks as $i) { + $mask = array_fill(0, $width, str_repeat("\0", $width)); + + $demerit = 0; + $blacks = 0; + $blacks = $this->makeMaskNo($i, $width, $frame, $mask); + $blacks += $this->writeFormatInformation($width, $mask, $i, $level); + $blacks = (int)(100 * $blacks / ($width * $width)); + $demerit = (int)((int)(abs($blacks - 50) / 5) * N4); + $demerit += $this->evaluateSymbol($width, $mask); + + if($demerit < $minDemerit) { + $minDemerit = $demerit; + $bestMask = $mask; + $bestMaskNum = $i; + } + } + + return $bestMask; + } + + //---------------------------------------------------------------------- + } + + + + +//---- qrencode.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Main encoder classes. + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRrsblock { + public $dataLength; + public $data = array(); + public $eccLength; + public $ecc = array(); + + public function __construct($dl, $data, $el, &$ecc, QRrsItem $rs) + { + $rs->encode_rs_char($data, $ecc); + + $this->dataLength = $dl; + $this->data = $data; + $this->eccLength = $el; + $this->ecc = $ecc; + } + }; + + //########################################################################## + + class QRrawcode { + public $version; + public $datacode = array(); + public $ecccode = array(); + public $blocks; + public $rsblocks = array(); //of RSblock + public $count; + public $dataLength; + public $eccLength; + public $b1; + + //---------------------------------------------------------------------- + public function __construct(QRinput $input) + { + $spec = array(0,0,0,0,0); + + $this->datacode = $input->getByteStream(); + if(is_null($this->datacode)) { + throw new Exception('null imput string'); + } + + QRspec::getEccSpec($input->getVersion(), $input->getErrorCorrectionLevel(), $spec); + + $this->version = $input->getVersion(); + $this->b1 = QRspec::rsBlockNum1($spec); + $this->dataLength = QRspec::rsDataLength($spec); + $this->eccLength = QRspec::rsEccLength($spec); + $this->ecccode = array_fill(0, $this->eccLength, 0); + $this->blocks = QRspec::rsBlockNum($spec); + + $ret = $this->init($spec); + if($ret < 0) { + throw new Exception('block alloc error'); + return null; + } + + $this->count = 0; + } + + //---------------------------------------------------------------------- + public function init(array $spec) + { + $dl = QRspec::rsDataCodes1($spec); + $el = QRspec::rsEccCodes1($spec); + $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); + + + $blockNo = 0; + $dataPos = 0; + $eccPos = 0; + for($i=0; $iecccode,$eccPos); + $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); + $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); + + $dataPos += $dl; + $eccPos += $el; + $blockNo++; + } + + if(QRspec::rsBlockNum2($spec) == 0) + return 0; + + $dl = QRspec::rsDataCodes2($spec); + $el = QRspec::rsEccCodes2($spec); + $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); + + if($rs == NULL) return -1; + + for($i=0; $iecccode,$eccPos); + $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); + $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); + + $dataPos += $dl; + $eccPos += $el; + $blockNo++; + } + + return 0; + } + + //---------------------------------------------------------------------- + public function getCode() + { + $ret; + + if($this->count < $this->dataLength) { + $row = $this->count % $this->blocks; + $col = $this->count / $this->blocks; + if($col >= $this->rsblocks[0]->dataLength) { + $row += $this->b1; + } + $ret = $this->rsblocks[$row]->data[$col]; + } else if($this->count < $this->dataLength + $this->eccLength) { + $row = ($this->count - $this->dataLength) % $this->blocks; + $col = ($this->count - $this->dataLength) / $this->blocks; + $ret = $this->rsblocks[$row]->ecc[$col]; + } else { + return 0; + } + $this->count++; + + return $ret; + } + } + + //########################################################################## + + class QRcode { + + public $version; + public $width; + public $data; + + //---------------------------------------------------------------------- + public function encodeMask(QRinput $input, $mask) + { + if($input->getVersion() < 0 || $input->getVersion() > QRSPEC_VERSION_MAX) { + throw new Exception('wrong version'); + } + if($input->getErrorCorrectionLevel() > QR_ECLEVEL_H) { + throw new Exception('wrong level'); + } + + $raw = new QRrawcode($input); + + QRtools::markTime('after_raw'); + + $version = $raw->version; + $width = QRspec::getWidth($version); + $frame = QRspec::newFrame($version); + + $filler = new FrameFiller($width, $frame); + if(is_null($filler)) { + return NULL; + } + + // inteleaved data and ecc codes + for($i=0; $i<$raw->dataLength + $raw->eccLength; $i++) { + $code = $raw->getCode(); + $bit = 0x80; + for($j=0; $j<8; $j++) { + $addr = $filler->next(); + $filler->setFrameAt($addr, 0x02 | (($bit & $code) != 0)); + $bit = $bit >> 1; + } + } + + QRtools::markTime('after_filler'); + + unset($raw); + + // remainder bits + $j = QRspec::getRemainder($version); + for($i=0; $i<$j; $i++) { + $addr = $filler->next(); + $filler->setFrameAt($addr, 0x02); + } + + $frame = $filler->frame; + unset($filler); + + + // masking + $maskObj = new QRmask(); + if($mask < 0) { + + if (QR_FIND_BEST_MASK) { + $masked = $maskObj->mask($width, $frame, $input->getErrorCorrectionLevel()); + } else { + $masked = $maskObj->makeMask($width, $frame, (intval(QR_DEFAULT_MASK) % 8), $input->getErrorCorrectionLevel()); + } + } else { + $masked = $maskObj->makeMask($width, $frame, $mask, $input->getErrorCorrectionLevel()); + } + + if($masked == NULL) { + return NULL; + } + + QRtools::markTime('after_mask'); + + $this->version = $version; + $this->width = $width; + $this->data = $masked; + + return $this; + } + + //---------------------------------------------------------------------- + public function encodeInput(QRinput $input) + { + return $this->encodeMask($input, -1); + } + + //---------------------------------------------------------------------- + public function encodeString8bit($string, $version, $level) + { + if(string == NULL) { + throw new Exception('empty string!'); + return NULL; + } + + $input = new QRinput($version, $level); + if($input == NULL) return NULL; + + $ret = $input->append($input, QR_MODE_8, strlen($string), str_split($string)); + if($ret < 0) { + unset($input); + return NULL; + } + return $this->encodeInput($input); + } + + //---------------------------------------------------------------------- + public function encodeString($string, $version, $level, $hint, $casesensitive) + { + + if($hint != QR_MODE_8 && $hint != QR_MODE_KANJI) { + throw new Exception('bad hint'); + return NULL; + } + + $input = new QRinput($version, $level); + if($input == NULL) return NULL; + + $ret = QRsplit::splitStringToQRinput($string, $input, $hint, $casesensitive); + if($ret < 0) { + return NULL; + } + + return $this->encodeInput($input); + } + + //---------------------------------------------------------------------- + public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encodePNG($text, $outfile, $saveandprint=false); + } + + //---------------------------------------------------------------------- + public static function text($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encode($text, $outfile); + } + + //---------------------------------------------------------------------- + public static function raw($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encodeRAW($text, $outfile); + } + } + + //########################################################################## + + class FrameFiller { + + public $width; + public $frame; + public $x; + public $y; + public $dir; + public $bit; + + //---------------------------------------------------------------------- + public function __construct($width, &$frame) + { + $this->width = $width; + $this->frame = $frame; + $this->x = $width - 1; + $this->y = $width - 1; + $this->dir = -1; + $this->bit = -1; + } + + //---------------------------------------------------------------------- + public function setFrameAt($at, $val) + { + $this->frame[$at['y']][$at['x']] = chr($val); + } + + //---------------------------------------------------------------------- + public function getFrameAt($at) + { + return ord($this->frame[$at['y']][$at['x']]); + } + + //---------------------------------------------------------------------- + public function next() + { + do { + + if($this->bit == -1) { + $this->bit = 0; + return array('x'=>$this->x, 'y'=>$this->y); + } + + $x = $this->x; + $y = $this->y; + $w = $this->width; + + if($this->bit == 0) { + $x--; + $this->bit++; + } else { + $x++; + $y += $this->dir; + $this->bit--; + } + + if($this->dir < 0) { + if($y < 0) { + $y = 0; + $x -= 2; + $this->dir = 1; + if($x == 6) { + $x--; + $y = 9; + } + } + } else { + if($y == $w) { + $y = $w - 1; + $x -= 2; + $this->dir = -1; + if($x == 6) { + $x--; + $y -= 8; + } + } + } + if($x < 0 || $y < 0) return null; + + $this->x = $x; + $this->y = $y; + + } while(ord($this->frame[$y][$x]) & 0x80); + + return array('x'=>$x, 'y'=>$y); + } + + } ; + + //########################################################################## + + class QRencode { + + public $casesensitive = true; + public $eightbit = false; + + public $version = 0; + public $size = 3; + public $margin = 4; + + public $structured = 0; // not supported yet + + public $level = QR_ECLEVEL_L; + public $hint = QR_MODE_8; + + //---------------------------------------------------------------------- + public static function factory($level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = new QRencode(); + $enc->size = $size; + $enc->margin = $margin; + + switch ($level.'') { + case '0': + case '1': + case '2': + case '3': + $enc->level = $level; + break; + case 'l': + case 'L': + $enc->level = QR_ECLEVEL_L; + break; + case 'm': + case 'M': + $enc->level = QR_ECLEVEL_M; + break; + case 'q': + case 'Q': + $enc->level = QR_ECLEVEL_Q; + break; + case 'h': + case 'H': + $enc->level = QR_ECLEVEL_H; + break; + } + + return $enc; + } + + //---------------------------------------------------------------------- + public function encodeRAW($intext, $outfile = false) + { + $code = new QRcode(); + + if($this->eightbit) { + $code->encodeString8bit($intext, $this->version, $this->level); + } else { + $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); + } + + return $code->data; + } + + //---------------------------------------------------------------------- + public function encode($intext, $outfile = false) + { + $code = new QRcode(); + + if($this->eightbit) { + $code->encodeString8bit($intext, $this->version, $this->level); + } else { + $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); + } + + QRtools::markTime('after_encode'); + + if ($outfile!== false) { + file_put_contents($outfile, join("\n", QRtools::binarize($code->data))); + } else { + return QRtools::binarize($code->data); + } + } + + //---------------------------------------------------------------------- + public function encodePNG($intext, $outfile = false,$saveandprint=false) + { + try { + + ob_start(); + $tab = $this->encode($intext); + $err = ob_get_contents(); + ob_end_clean(); + + if ($err != '') + QRtools::log($outfile, $err); + + $maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin)); + + QRimage::png($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint); + + } catch (Exception $e) { + + QRtools::log($outfile, $e->getMessage()); + + } + } + } + + diff --git a/src-backup/includes/phpqrcode/qr_18-10147_1765114124.png-errors.txt b/src-backup/includes/phpqrcode/qr_18-10147_1765114124.png-errors.txt new file mode 100644 index 0000000..5026e30 --- /dev/null +++ b/src-backup/includes/phpqrcode/qr_18-10147_1765114124.png-errors.txt @@ -0,0 +1,242 @@ +2025-12-07 21:28:44:
+Deprecated: Implicit conversion from float 0.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 1.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 2.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 3.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 4.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 5.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 6.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 7.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 8.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 9.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 10.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 11.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 12.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 13.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 14.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 15.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 16.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 17.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 18.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 19.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 20.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 21.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 22.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 23.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 24.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 25.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 26.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 27.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 28.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 29.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 30.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 31.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 32.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 33.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 34.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 35.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 36.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 37.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 38.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 39.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 40.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 41.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 42.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 43.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 44.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 45.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 46.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 47.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 48.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 49.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 50.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 51.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 52.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 53.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 54.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 55.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 56.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 57.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 58.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 59.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 60.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 61.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 62.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 63.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 64.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 65.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 66.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 67.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 68.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 69.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 70.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 71.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 72.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 73.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 74.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 75.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 76.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 77.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 78.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 79.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 80.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 81.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 82.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 83.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 84.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 85.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 86.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 87.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 88.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 89.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 90.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 91.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 92.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 93.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 94.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 95.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 96.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 0.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 1.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 2.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 3.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 4.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 5.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 6.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 7.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 8.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 9.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 10.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 11.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 12.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 13.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 14.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 15.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 16.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 17.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 18.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 19.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 20.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 21.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 22.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 23.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
diff --git a/src-backup/includes/phpqrcode/qr_18-10147_1765114125.png-errors.txt b/src-backup/includes/phpqrcode/qr_18-10147_1765114125.png-errors.txt new file mode 100644 index 0000000..fa6939f --- /dev/null +++ b/src-backup/includes/phpqrcode/qr_18-10147_1765114125.png-errors.txt @@ -0,0 +1,242 @@ +2025-12-07 21:28:45:
+Deprecated: Implicit conversion from float 0.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 1.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 2.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 3.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 4.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 5.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 6.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 7.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 8.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 9.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 10.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 11.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 12.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 13.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 14.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 15.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 16.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 17.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 18.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 19.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 20.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 21.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 22.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 23.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 24.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 25.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 26.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 27.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 28.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 29.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 30.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 31.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 32.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 33.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 34.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 35.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 36.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 37.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 38.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 39.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 40.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 41.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 42.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 43.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 44.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 45.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 46.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 47.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 48.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 49.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 50.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 51.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 52.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 53.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 54.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 55.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 56.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 57.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 58.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 59.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 60.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 61.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 62.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 63.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 64.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 65.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 66.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 67.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 68.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 69.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 70.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 71.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 72.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 73.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 74.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 75.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 76.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 77.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 78.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 79.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 80.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 81.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 82.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 83.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 84.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 85.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 86.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 87.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 88.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 89.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 90.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 91.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 92.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 93.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 94.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 95.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 96.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 0.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 1.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 2.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 3.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 4.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 5.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 6.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 7.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 8.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 9.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 10.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 11.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 12.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 13.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 14.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 15.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 16.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 17.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 18.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 19.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 20.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 21.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 22.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 23.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
diff --git a/src-backup/includes/phpqrcode/qr_18-10147_1765114249.png-errors.txt b/src-backup/includes/phpqrcode/qr_18-10147_1765114249.png-errors.txt new file mode 100644 index 0000000..c6d092b --- /dev/null +++ b/src-backup/includes/phpqrcode/qr_18-10147_1765114249.png-errors.txt @@ -0,0 +1,242 @@ +2025-12-07 21:30:49:
+Deprecated: Implicit conversion from float 0.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 1.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 2.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 3.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 4.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 5.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 6.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 7.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 8.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 9.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 10.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 11.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 12.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 13.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 14.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 15.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 16.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 17.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 18.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 19.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 20.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 21.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 22.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 23.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 24.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 25.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 26.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 27.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 28.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 29.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 30.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 31.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 32.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 33.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 34.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 35.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 36.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 37.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 38.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 39.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 40.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 41.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 42.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 43.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 44.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 45.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 46.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 47.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 48.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 49.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 50.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 51.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 52.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 53.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 54.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 55.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 56.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 57.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 58.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 59.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 60.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 61.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 62.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 63.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 64.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 65.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 66.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 67.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 68.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 69.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 70.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 71.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 72.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 73.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 74.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 75.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 76.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 77.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 78.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 79.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 80.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 81.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 82.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 83.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 84.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 85.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 86.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 87.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 88.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 89.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 90.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 91.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 92.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 93.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 94.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 95.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 96.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 140
+
+Deprecated: Implicit conversion from float 0.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 1.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 2.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 3.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 4.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 5.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 6.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 7.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 8.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 9.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 10.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 11.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 12.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 13.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 14.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 15.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 16.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 17.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 18.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 19.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 20.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 21.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 22.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
+
+Deprecated: Implicit conversion from float 23.5 to int loses precision in C:\xampp\htdocs\attendance_system\includes\phpqrcode\qrencode.php on line 144
diff --git a/src-backup/includes/phpqrcode/qrbitstream.php b/src-backup/includes/phpqrcode/qrbitstream.php new file mode 100644 index 0000000..7d4ec4a --- /dev/null +++ b/src-backup/includes/phpqrcode/qrbitstream.php @@ -0,0 +1,180 @@ + + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRbitstream { + + public $data = array(); + + //---------------------------------------------------------------------- + public function size() + { + return count($this->data); + } + + //---------------------------------------------------------------------- + public function allocate($setLength) + { + $this->data = array_fill(0, $setLength, 0); + return 0; + } + + //---------------------------------------------------------------------- + public static function newFromNum($bits, $num) + { + $bstream = new QRbitstream(); + $bstream->allocate($bits); + + $mask = 1 << ($bits - 1); + for($i=0; $i<$bits; $i++) { + if($num & $mask) { + $bstream->data[$i] = 1; + } else { + $bstream->data[$i] = 0; + } + $mask = $mask >> 1; + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public static function newFromBytes($size, $data) + { + $bstream = new QRbitstream(); + $bstream->allocate($size * 8); + $p=0; + + for($i=0; $i<$size; $i++) { + $mask = 0x80; + for($j=0; $j<8; $j++) { + if($data[$i] & $mask) { + $bstream->data[$p] = 1; + } else { + $bstream->data[$p] = 0; + } + $p++; + $mask = $mask >> 1; + } + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public function append(QRbitstream $arg) + { + if (is_null($arg)) { + return -1; + } + + if($arg->size() == 0) { + return 0; + } + + if($this->size() == 0) { + $this->data = $arg->data; + return 0; + } + + $this->data = array_values(array_merge($this->data, $arg->data)); + + return 0; + } + + //---------------------------------------------------------------------- + public function appendNum($bits, $num) + { + if ($bits == 0) + return 0; + + $b = QRbitstream::newFromNum($bits, $num); + + if(is_null($b)) + return -1; + + $ret = $this->append($b); + unset($b); + + return $ret; + } + + //---------------------------------------------------------------------- + public function appendBytes($size, $data) + { + if ($size == 0) + return 0; + + $b = QRbitstream::newFromBytes($size, $data); + + if(is_null($b)) + return -1; + + $ret = $this->append($b); + unset($b); + + return $ret; + } + + //---------------------------------------------------------------------- + public function toByte() + { + + $size = $this->size(); + + if($size == 0) { + return array(); + } + + $data = array_fill(0, (int)(($size + 7) / 8), 0); + $bytes = (int)($size / 8); + + $p = 0; + + for($i=0; $i<$bytes; $i++) { + $v = 0; + for($j=0; $j<8; $j++) { + $v = $v << 1; + $v |= $this->data[$p]; + $p++; + } + $data[$i] = $v; + } + + if($size & 7) { + $v = 0; + for($j=0; $j<($size & 7); $j++) { + $v = $v << 1; + $v |= $this->data[$p]; + $p++; + } + $data[$bytes] = $v; + } + + return $data; + } + + } diff --git a/src-backup/includes/phpqrcode/qrconfig.php b/src-backup/includes/phpqrcode/qrconfig.php new file mode 100644 index 0000000..e53dff8 --- /dev/null +++ b/src-backup/includes/phpqrcode/qrconfig.php @@ -0,0 +1,17 @@ + + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + // Encoding modes + + define('QR_MODE_NUL', -1); + define('QR_MODE_NUM', 0); + define('QR_MODE_AN', 1); + define('QR_MODE_8', 2); + define('QR_MODE_KANJI', 3); + define('QR_MODE_STRUCTURE', 4); + + // Levels of error correction. + + define('QR_ECLEVEL_L', 0); + define('QR_ECLEVEL_M', 1); + define('QR_ECLEVEL_Q', 2); + define('QR_ECLEVEL_H', 3); + + // Supported output formats + + define('QR_FORMAT_TEXT', 0); + define('QR_FORMAT_PNG', 1); + + class qrstr { + public static function set(&$srctab, $x, $y, $repl, $replLen = false) { + $srctab[$y] = substr_replace($srctab[$y], ($replLen !== false)?substr($repl,0,$replLen):$repl, $x, ($replLen !== false)?$replLen:strlen($repl)); + } + } \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/qrencode.php b/src-backup/includes/phpqrcode/qrencode.php new file mode 100644 index 0000000..4b77a5b --- /dev/null +++ b/src-backup/includes/phpqrcode/qrencode.php @@ -0,0 +1,502 @@ + + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRrsblock { + public $dataLength; + public $data = array(); + public $eccLength; + public $ecc = array(); + + public function __construct($dl, $data, $el, &$ecc, QRrsItem $rs) + { + $rs->encode_rs_char($data, $ecc); + + $this->dataLength = $dl; + $this->data = $data; + $this->eccLength = $el; + $this->ecc = $ecc; + } + }; + + //########################################################################## + + class QRrawcode { + public $version; + public $datacode = array(); + public $ecccode = array(); + public $blocks; + public $rsblocks = array(); //of RSblock + public $count; + public $dataLength; + public $eccLength; + public $b1; + + //---------------------------------------------------------------------- + public function __construct(QRinput $input) + { + $spec = array(0,0,0,0,0); + + $this->datacode = $input->getByteStream(); + if(is_null($this->datacode)) { + throw new Exception('null imput string'); + } + + QRspec::getEccSpec($input->getVersion(), $input->getErrorCorrectionLevel(), $spec); + + $this->version = $input->getVersion(); + $this->b1 = QRspec::rsBlockNum1($spec); + $this->dataLength = QRspec::rsDataLength($spec); + $this->eccLength = QRspec::rsEccLength($spec); + $this->ecccode = array_fill(0, $this->eccLength, 0); + $this->blocks = QRspec::rsBlockNum($spec); + + $ret = $this->init($spec); + if($ret < 0) { + throw new Exception('block alloc error'); + return null; + } + + $this->count = 0; + } + + //---------------------------------------------------------------------- + public function init(array $spec) + { + $dl = QRspec::rsDataCodes1($spec); + $el = QRspec::rsEccCodes1($spec); + $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); + + + $blockNo = 0; + $dataPos = 0; + $eccPos = 0; + for($i=0; $iecccode,$eccPos); + $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); + $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); + + $dataPos += $dl; + $eccPos += $el; + $blockNo++; + } + + if(QRspec::rsBlockNum2($spec) == 0) + return 0; + + $dl = QRspec::rsDataCodes2($spec); + $el = QRspec::rsEccCodes2($spec); + $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); + + if($rs == NULL) return -1; + + for($i=0; $iecccode,$eccPos); + $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); + $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); + + $dataPos += $dl; + $eccPos += $el; + $blockNo++; + } + + return 0; + } + + //---------------------------------------------------------------------- + public function getCode() + { + $ret; + + if($this->count < $this->dataLength) { + $row = $this->count % $this->blocks; + $col = $this->count / $this->blocks; + if($col >= $this->rsblocks[0]->dataLength) { + $row += $this->b1; + } + $ret = $this->rsblocks[$row]->data[$col]; + } else if($this->count < $this->dataLength + $this->eccLength) { + $row = ($this->count - $this->dataLength) % $this->blocks; + $col = ($this->count - $this->dataLength) / $this->blocks; + $ret = $this->rsblocks[$row]->ecc[$col]; + } else { + return 0; + } + $this->count++; + + return $ret; + } + } + + //########################################################################## + + class QRcode { + + public $version; + public $width; + public $data; + + //---------------------------------------------------------------------- + public function encodeMask(QRinput $input, $mask) + { + if($input->getVersion() < 0 || $input->getVersion() > QRSPEC_VERSION_MAX) { + throw new Exception('wrong version'); + } + if($input->getErrorCorrectionLevel() > QR_ECLEVEL_H) { + throw new Exception('wrong level'); + } + + $raw = new QRrawcode($input); + + QRtools::markTime('after_raw'); + + $version = $raw->version; + $width = QRspec::getWidth($version); + $frame = QRspec::newFrame($version); + + $filler = new FrameFiller($width, $frame); + if(is_null($filler)) { + return NULL; + } + + // inteleaved data and ecc codes + for($i=0; $i<$raw->dataLength + $raw->eccLength; $i++) { + $code = $raw->getCode(); + $bit = 0x80; + for($j=0; $j<8; $j++) { + $addr = $filler->next(); + $filler->setFrameAt($addr, 0x02 | (($bit & $code) != 0)); + $bit = $bit >> 1; + } + } + + QRtools::markTime('after_filler'); + + unset($raw); + + // remainder bits + $j = QRspec::getRemainder($version); + for($i=0; $i<$j; $i++) { + $addr = $filler->next(); + $filler->setFrameAt($addr, 0x02); + } + + $frame = $filler->frame; + unset($filler); + + + // masking + $maskObj = new QRmask(); + if($mask < 0) { + + if (QR_FIND_BEST_MASK) { + $masked = $maskObj->mask($width, $frame, $input->getErrorCorrectionLevel()); + } else { + $masked = $maskObj->makeMask($width, $frame, (intval(QR_DEFAULT_MASK) % 8), $input->getErrorCorrectionLevel()); + } + } else { + $masked = $maskObj->makeMask($width, $frame, $mask, $input->getErrorCorrectionLevel()); + } + + if($masked == NULL) { + return NULL; + } + + QRtools::markTime('after_mask'); + + $this->version = $version; + $this->width = $width; + $this->data = $masked; + + return $this; + } + + //---------------------------------------------------------------------- + public function encodeInput(QRinput $input) + { + return $this->encodeMask($input, -1); + } + + //---------------------------------------------------------------------- + public function encodeString8bit($string, $version, $level) + { + if(string == NULL) { + throw new Exception('empty string!'); + return NULL; + } + + $input = new QRinput($version, $level); + if($input == NULL) return NULL; + + $ret = $input->append($input, QR_MODE_8, strlen($string), str_split($string)); + if($ret < 0) { + unset($input); + return NULL; + } + return $this->encodeInput($input); + } + + //---------------------------------------------------------------------- + public function encodeString($string, $version, $level, $hint, $casesensitive) + { + + if($hint != QR_MODE_8 && $hint != QR_MODE_KANJI) { + throw new Exception('bad hint'); + return NULL; + } + + $input = new QRinput($version, $level); + if($input == NULL) return NULL; + + $ret = QRsplit::splitStringToQRinput($string, $input, $hint, $casesensitive); + if($ret < 0) { + return NULL; + } + + return $this->encodeInput($input); + } + + //---------------------------------------------------------------------- + public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encodePNG($text, $outfile, $saveandprint=false); + } + + //---------------------------------------------------------------------- + public static function text($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encode($text, $outfile); + } + + //---------------------------------------------------------------------- + public static function raw($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encodeRAW($text, $outfile); + } + } + + //########################################################################## + + class FrameFiller { + + public $width; + public $frame; + public $x; + public $y; + public $dir; + public $bit; + + //---------------------------------------------------------------------- + public function __construct($width, &$frame) + { + $this->width = $width; + $this->frame = $frame; + $this->x = $width - 1; + $this->y = $width - 1; + $this->dir = -1; + $this->bit = -1; + } + + //---------------------------------------------------------------------- + public function setFrameAt($at, $val) + { + $this->frame[$at['y']][$at['x']] = chr($val); + } + + //---------------------------------------------------------------------- + public function getFrameAt($at) + { + return ord($this->frame[$at['y']][$at['x']]); + } + + //---------------------------------------------------------------------- + public function next() + { + do { + + if($this->bit == -1) { + $this->bit = 0; + return array('x'=>$this->x, 'y'=>$this->y); + } + + $x = $this->x; + $y = $this->y; + $w = $this->width; + + if($this->bit == 0) { + $x--; + $this->bit++; + } else { + $x++; + $y += $this->dir; + $this->bit--; + } + + if($this->dir < 0) { + if($y < 0) { + $y = 0; + $x -= 2; + $this->dir = 1; + if($x == 6) { + $x--; + $y = 9; + } + } + } else { + if($y == $w) { + $y = $w - 1; + $x -= 2; + $this->dir = -1; + if($x == 6) { + $x--; + $y -= 8; + } + } + } + if($x < 0 || $y < 0) return null; + + $this->x = $x; + $this->y = $y; + + } while(ord($this->frame[$y][$x]) & 0x80); + + return array('x'=>$x, 'y'=>$y); + } + + } ; + + //########################################################################## + + class QRencode { + + public $casesensitive = true; + public $eightbit = false; + + public $version = 0; + public $size = 3; + public $margin = 4; + + public $structured = 0; // not supported yet + + public $level = QR_ECLEVEL_L; + public $hint = QR_MODE_8; + + //---------------------------------------------------------------------- + public static function factory($level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = new QRencode(); + $enc->size = $size; + $enc->margin = $margin; + + switch ($level.'') { + case '0': + case '1': + case '2': + case '3': + $enc->level = $level; + break; + case 'l': + case 'L': + $enc->level = QR_ECLEVEL_L; + break; + case 'm': + case 'M': + $enc->level = QR_ECLEVEL_M; + break; + case 'q': + case 'Q': + $enc->level = QR_ECLEVEL_Q; + break; + case 'h': + case 'H': + $enc->level = QR_ECLEVEL_H; + break; + } + + return $enc; + } + + //---------------------------------------------------------------------- + public function encodeRAW($intext, $outfile = false) + { + $code = new QRcode(); + + if($this->eightbit) { + $code->encodeString8bit($intext, $this->version, $this->level); + } else { + $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); + } + + return $code->data; + } + + //---------------------------------------------------------------------- + public function encode($intext, $outfile = false) + { + $code = new QRcode(); + + if($this->eightbit) { + $code->encodeString8bit($intext, $this->version, $this->level); + } else { + $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); + } + + QRtools::markTime('after_encode'); + + if ($outfile!== false) { + file_put_contents($outfile, join("\n", QRtools::binarize($code->data))); + } else { + return QRtools::binarize($code->data); + } + } + + //---------------------------------------------------------------------- + public function encodePNG($intext, $outfile = false,$saveandprint=false) + { + try { + + ob_start(); + $tab = $this->encode($intext); + $err = ob_get_contents(); + ob_end_clean(); + + if ($err != '') + QRtools::log($outfile, $err); + + $maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin)); + + QRimage::png($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint); + + } catch (Exception $e) { + + QRtools::log($outfile, $e->getMessage()); + + } + } + } diff --git a/src-backup/includes/phpqrcode/qrimage.php b/src-backup/includes/phpqrcode/qrimage.php new file mode 100644 index 0000000..10b0a6e --- /dev/null +++ b/src-backup/includes/phpqrcode/qrimage.php @@ -0,0 +1,95 @@ + + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('QR_IMAGE', true); + + class QRimage { + + //---------------------------------------------------------------------- + public static function png($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE) + { + $image = self::image($frame, $pixelPerPoint, $outerFrame); + + if ($filename === false) { + Header("Content-type: image/png"); + ImagePng($image); + } else { + if($saveandprint===TRUE){ + ImagePng($image, $filename); + header("Content-type: image/png"); + ImagePng($image); + }else{ + ImagePng($image, $filename); + } + } + + ImageDestroy($image); + } + + //---------------------------------------------------------------------- + public static function jpg($frame, $filename = false, $pixelPerPoint = 8, $outerFrame = 4, $q = 85) + { + $image = self::image($frame, $pixelPerPoint, $outerFrame); + + if ($filename === false) { + Header("Content-type: image/jpeg"); + ImageJpeg($image, null, $q); + } else { + ImageJpeg($image, $filename, $q); + } + + ImageDestroy($image); + } + + //---------------------------------------------------------------------- + private static function image($frame, $pixelPerPoint = 4, $outerFrame = 4) + { + $h = count($frame); + $w = strlen($frame[0]); + + $imgW = $w + 2*$outerFrame; + $imgH = $h + 2*$outerFrame; + + $base_image =ImageCreate($imgW, $imgH); + + $col[0] = ImageColorAllocate($base_image,255,255,255); + $col[1] = ImageColorAllocate($base_image,0,0,0); + + imagefill($base_image, 0, 0, $col[0]); + + for($y=0; $y<$h; $y++) { + for($x=0; $x<$w; $x++) { + if ($frame[$y][$x] == '1') { + ImageSetPixel($base_image,$x+$outerFrame,$y+$outerFrame,$col[1]); + } + } + } + + $target_image =ImageCreate($imgW * $pixelPerPoint, $imgH * $pixelPerPoint); + ImageCopyResized($target_image, $base_image, 0, 0, 0, 0, $imgW * $pixelPerPoint, $imgH * $pixelPerPoint, $imgW, $imgH); + ImageDestroy($base_image); + + return $target_image; + } + } \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/qrinput.php b/src-backup/includes/phpqrcode/qrinput.php new file mode 100644 index 0000000..0f6d7f9 --- /dev/null +++ b/src-backup/includes/phpqrcode/qrinput.php @@ -0,0 +1,729 @@ + + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('STRUCTURE_HEADER_BITS', 20); + define('MAX_STRUCTURED_SYMBOLS', 16); + + class QRinputItem { + + public $mode; + public $size; + public $data; + public $bstream; + + public function __construct($mode, $size, $data, $bstream = null) + { + $setData = array_slice($data, 0, $size); + + if (count($setData) < $size) { + $setData = array_merge($setData, array_fill(0,$size-count($setData),0)); + } + + if(!QRinput::check($mode, $size, $setData)) { + throw new Exception('Error m:'.$mode.',s:'.$size.',d:'.join(',',$setData)); + return null; + } + + $this->mode = $mode; + $this->size = $size; + $this->data = $setData; + $this->bstream = $bstream; + } + + //---------------------------------------------------------------------- + public function encodeModeNum($version) + { + try { + + $words = (int)($this->size / 3); + $bs = new QRbitstream(); + + $val = 0x1; + $bs->appendNum(4, $val); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_NUM, $version), $this->size); + + for($i=0; $i<$words; $i++) { + $val = (ord($this->data[$i*3 ]) - ord('0')) * 100; + $val += (ord($this->data[$i*3+1]) - ord('0')) * 10; + $val += (ord($this->data[$i*3+2]) - ord('0')); + $bs->appendNum(10, $val); + } + + if($this->size - $words * 3 == 1) { + $val = ord($this->data[$words*3]) - ord('0'); + $bs->appendNum(4, $val); + } else if($this->size - $words * 3 == 2) { + $val = (ord($this->data[$words*3 ]) - ord('0')) * 10; + $val += (ord($this->data[$words*3+1]) - ord('0')); + $bs->appendNum(7, $val); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeModeAn($version) + { + try { + $words = (int)($this->size / 2); + $bs = new QRbitstream(); + + $bs->appendNum(4, 0x02); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_AN, $version), $this->size); + + for($i=0; $i<$words; $i++) { + $val = (int)QRinput::lookAnTable(ord($this->data[$i*2 ])) * 45; + $val += (int)QRinput::lookAnTable(ord($this->data[$i*2+1])); + + $bs->appendNum(11, $val); + } + + if($this->size & 1) { + $val = QRinput::lookAnTable(ord($this->data[$words * 2])); + $bs->appendNum(6, $val); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeMode8($version) + { + try { + $bs = new QRbitstream(); + + $bs->appendNum(4, 0x4); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_8, $version), $this->size); + + for($i=0; $i<$this->size; $i++) { + $bs->appendNum(8, ord($this->data[$i])); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeModeKanji($version) + { + try { + + $bs = new QRbitrtream(); + + $bs->appendNum(4, 0x8); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_KANJI, $version), (int)($this->size / 2)); + + for($i=0; $i<$this->size; $i+=2) { + $val = (ord($this->data[$i]) << 8) | ord($this->data[$i+1]); + if($val <= 0x9ffc) { + $val -= 0x8140; + } else { + $val -= 0xc140; + } + + $h = ($val >> 8) * 0xc0; + $val = ($val & 0xff) + $h; + + $bs->appendNum(13, $val); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeModeStructure() + { + try { + $bs = new QRbitstream(); + + $bs->appendNum(4, 0x03); + $bs->appendNum(4, ord($this->data[1]) - 1); + $bs->appendNum(4, ord($this->data[0]) - 1); + $bs->appendNum(8, ord($this->data[2])); + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function estimateBitStreamSizeOfEntry($version) + { + $bits = 0; + + if($version == 0) + $version = 1; + + switch($this->mode) { + case QR_MODE_NUM: $bits = QRinput::estimateBitsModeNum($this->size); break; + case QR_MODE_AN: $bits = QRinput::estimateBitsModeAn($this->size); break; + case QR_MODE_8: $bits = QRinput::estimateBitsMode8($this->size); break; + case QR_MODE_KANJI: $bits = QRinput::estimateBitsModeKanji($this->size);break; + case QR_MODE_STRUCTURE: return STRUCTURE_HEADER_BITS; + default: + return 0; + } + + $l = QRspec::lengthIndicator($this->mode, $version); + $m = 1 << $l; + $num = (int)(($this->size + $m - 1) / $m); + + $bits += $num * (4 + $l); + + return $bits; + } + + //---------------------------------------------------------------------- + public function encodeBitStream($version) + { + try { + + unset($this->bstream); + $words = QRspec::maximumWords($this->mode, $version); + + if($this->size > $words) { + + $st1 = new QRinputItem($this->mode, $words, $this->data); + $st2 = new QRinputItem($this->mode, $this->size - $words, array_slice($this->data, $words)); + + $st1->encodeBitStream($version); + $st2->encodeBitStream($version); + + $this->bstream = new QRbitstream(); + $this->bstream->append($st1->bstream); + $this->bstream->append($st2->bstream); + + unset($st1); + unset($st2); + + } else { + + $ret = 0; + + switch($this->mode) { + case QR_MODE_NUM: $ret = $this->encodeModeNum($version); break; + case QR_MODE_AN: $ret = $this->encodeModeAn($version); break; + case QR_MODE_8: $ret = $this->encodeMode8($version); break; + case QR_MODE_KANJI: $ret = $this->encodeModeKanji($version);break; + case QR_MODE_STRUCTURE: $ret = $this->encodeModeStructure(); break; + + default: + break; + } + + if($ret < 0) + return -1; + } + + return $this->bstream->size(); + + } catch (Exception $e) { + return -1; + } + } + }; + + //########################################################################## + + class QRinput { + + public $items; + + private $version; + private $level; + + //---------------------------------------------------------------------- + public function __construct($version = 0, $level = QR_ECLEVEL_L) + { + if ($version < 0 || $version > QRSPEC_VERSION_MAX || $level > QR_ECLEVEL_H) { + throw new Exception('Invalid version no'); + return NULL; + } + + $this->version = $version; + $this->level = $level; + } + + //---------------------------------------------------------------------- + public function getVersion() + { + return $this->version; + } + + //---------------------------------------------------------------------- + public function setVersion($version) + { + if($version < 0 || $version > QRSPEC_VERSION_MAX) { + throw new Exception('Invalid version no'); + return -1; + } + + $this->version = $version; + + return 0; + } + + //---------------------------------------------------------------------- + public function getErrorCorrectionLevel() + { + return $this->level; + } + + //---------------------------------------------------------------------- + public function setErrorCorrectionLevel($level) + { + if($level > QR_ECLEVEL_H) { + throw new Exception('Invalid ECLEVEL'); + return -1; + } + + $this->level = $level; + + return 0; + } + + //---------------------------------------------------------------------- + public function appendEntry(QRinputItem $entry) + { + $this->items[] = $entry; + } + + //---------------------------------------------------------------------- + public function append($mode, $size, $data) + { + try { + $entry = new QRinputItem($mode, $size, $data); + $this->items[] = $entry; + return 0; + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + + public function insertStructuredAppendHeader($size, $index, $parity) + { + if( $size > MAX_STRUCTURED_SYMBOLS ) { + throw new Exception('insertStructuredAppendHeader wrong size'); + } + + if( $index <= 0 || $index > MAX_STRUCTURED_SYMBOLS ) { + throw new Exception('insertStructuredAppendHeader wrong index'); + } + + $buf = array($size, $index, $parity); + + try { + $entry = new QRinputItem(QR_MODE_STRUCTURE, 3, buf); + array_unshift($this->items, $entry); + return 0; + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function calcParity() + { + $parity = 0; + + foreach($this->items as $item) { + if($item->mode != QR_MODE_STRUCTURE) { + for($i=$item->size-1; $i>=0; $i--) { + $parity ^= $item->data[$i]; + } + } + } + + return $parity; + } + + //---------------------------------------------------------------------- + public static function checkModeNum($size, $data) + { + for($i=0; $i<$size; $i++) { + if((ord($data[$i]) < ord('0')) || (ord($data[$i]) > ord('9'))){ + return false; + } + } + + return true; + } + + //---------------------------------------------------------------------- + public static function estimateBitsModeNum($size) + { + $w = (int)$size / 3; + $bits = $w * 10; + + switch($size - $w * 3) { + case 1: + $bits += 4; + break; + case 2: + $bits += 7; + break; + default: + break; + } + + return $bits; + } + + //---------------------------------------------------------------------- + public static $anTable = array( + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1, + -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 + ); + + //---------------------------------------------------------------------- + public static function lookAnTable($c) + { + return (($c > 127)?-1:self::$anTable[$c]); + } + + //---------------------------------------------------------------------- + public static function checkModeAn($size, $data) + { + for($i=0; $i<$size; $i++) { + if (self::lookAnTable(ord($data[$i])) == -1) { + return false; + } + } + + return true; + } + + //---------------------------------------------------------------------- + public static function estimateBitsModeAn($size) + { + $w = (int)($size / 2); + $bits = $w * 11; + + if($size & 1) { + $bits += 6; + } + + return $bits; + } + + //---------------------------------------------------------------------- + public static function estimateBitsMode8($size) + { + return $size * 8; + } + + //---------------------------------------------------------------------- + public function estimateBitsModeKanji($size) + { + return (int)(($size / 2) * 13); + } + + //---------------------------------------------------------------------- + public static function checkModeKanji($size, $data) + { + if($size & 1) + return false; + + for($i=0; $i<$size; $i+=2) { + $val = (ord($data[$i]) << 8) | ord($data[$i+1]); + if( $val < 0x8140 + || ($val > 0x9ffc && $val < 0xe040) + || $val > 0xebbf) { + return false; + } + } + + return true; + } + + /*********************************************************************** + * Validation + **********************************************************************/ + + public static function check($mode, $size, $data) + { + if($size <= 0) + return false; + + switch($mode) { + case QR_MODE_NUM: return self::checkModeNum($size, $data); break; + case QR_MODE_AN: return self::checkModeAn($size, $data); break; + case QR_MODE_KANJI: return self::checkModeKanji($size, $data); break; + case QR_MODE_8: return true; break; + case QR_MODE_STRUCTURE: return true; break; + + default: + break; + } + + return false; + } + + + //---------------------------------------------------------------------- + public function estimateBitStreamSize($version) + { + $bits = 0; + + foreach($this->items as $item) { + $bits += $item->estimateBitStreamSizeOfEntry($version); + } + + return $bits; + } + + //---------------------------------------------------------------------- + public function estimateVersion() + { + $version = 0; + $prev = 0; + do { + $prev = $version; + $bits = $this->estimateBitStreamSize($prev); + $version = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level); + if ($version < 0) { + return -1; + } + } while ($version > $prev); + + return $version; + } + + //---------------------------------------------------------------------- + public static function lengthOfCode($mode, $version, $bits) + { + $payload = $bits - 4 - QRspec::lengthIndicator($mode, $version); + switch($mode) { + case QR_MODE_NUM: + $chunks = (int)($payload / 10); + $remain = $payload - $chunks * 10; + $size = $chunks * 3; + if($remain >= 7) { + $size += 2; + } else if($remain >= 4) { + $size += 1; + } + break; + case QR_MODE_AN: + $chunks = (int)($payload / 11); + $remain = $payload - $chunks * 11; + $size = $chunks * 2; + if($remain >= 6) + $size++; + break; + case QR_MODE_8: + $size = (int)($payload / 8); + break; + case QR_MODE_KANJI: + $size = (int)(($payload / 13) * 2); + break; + case QR_MODE_STRUCTURE: + $size = (int)($payload / 8); + break; + default: + $size = 0; + break; + } + + $maxsize = QRspec::maximumWords($mode, $version); + if($size < 0) $size = 0; + if($size > $maxsize) $size = $maxsize; + + return $size; + } + + //---------------------------------------------------------------------- + public function createBitStream() + { + $total = 0; + + foreach($this->items as $item) { + $bits = $item->encodeBitStream($this->version); + + if($bits < 0) + return -1; + + $total += $bits; + } + + return $total; + } + + //---------------------------------------------------------------------- + public function convertData() + { + $ver = $this->estimateVersion(); + if($ver > $this->getVersion()) { + $this->setVersion($ver); + } + + for(;;) { + $bits = $this->createBitStream(); + + if($bits < 0) + return -1; + + $ver = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level); + if($ver < 0) { + throw new Exception('WRONG VERSION'); + return -1; + } else if($ver > $this->getVersion()) { + $this->setVersion($ver); + } else { + break; + } + } + + return 0; + } + + //---------------------------------------------------------------------- + public function appendPaddingBit(&$bstream) + { + $bits = $bstream->size(); + $maxwords = QRspec::getDataLength($this->version, $this->level); + $maxbits = $maxwords * 8; + + if ($maxbits == $bits) { + return 0; + } + + if ($maxbits - $bits < 5) { + return $bstream->appendNum($maxbits - $bits, 0); + } + + $bits += 4; + $words = (int)(($bits + 7) / 8); + + $padding = new QRbitstream(); + $ret = $padding->appendNum($words * 8 - $bits + 4, 0); + + if($ret < 0) + return $ret; + + $padlen = $maxwords - $words; + + if($padlen > 0) { + + $padbuf = array(); + for($i=0; $i<$padlen; $i++) { + $padbuf[$i] = ($i&1)?0x11:0xec; + } + + $ret = $padding->appendBytes($padlen, $padbuf); + + if($ret < 0) + return $ret; + + } + + $ret = $bstream->append($padding); + + return $ret; + } + + //---------------------------------------------------------------------- + public function mergeBitStream() + { + if($this->convertData() < 0) { + return null; + } + + $bstream = new QRbitstream(); + + foreach($this->items as $item) { + $ret = $bstream->append($item->bstream); + if($ret < 0) { + return null; + } + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public function getBitStream() + { + + $bstream = $this->mergeBitStream(); + + if($bstream == null) { + return null; + } + + $ret = $this->appendPaddingBit($bstream); + if($ret < 0) { + return null; + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public function getByteStream() + { + $bstream = $this->getBitStream(); + if($bstream == null) { + return null; + } + + return $bstream->toByte(); + } + } + + + \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/qrlib.php b/src-backup/includes/phpqrcode/qrlib.php new file mode 100644 index 0000000..d55c4af --- /dev/null +++ b/src-backup/includes/phpqrcode/qrlib.php @@ -0,0 +1,43 @@ + + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + $QR_BASEDIR = dirname(__FILE__).DIRECTORY_SEPARATOR; + + // Required libs + + include $QR_BASEDIR."qrconst.php"; + include $QR_BASEDIR."qrconfig.php"; + include $QR_BASEDIR."qrtools.php"; + include $QR_BASEDIR."qrspec.php"; + include $QR_BASEDIR."qrimage.php"; + include $QR_BASEDIR."qrinput.php"; + include $QR_BASEDIR."qrbitstream.php"; + include $QR_BASEDIR."qrsplit.php"; + include $QR_BASEDIR."qrrscode.php"; + include $QR_BASEDIR."qrmask.php"; + include $QR_BASEDIR."qrencode.php"; + diff --git a/src-backup/includes/phpqrcode/qrmask.php b/src-backup/includes/phpqrcode/qrmask.php new file mode 100644 index 0000000..b14d7ae --- /dev/null +++ b/src-backup/includes/phpqrcode/qrmask.php @@ -0,0 +1,328 @@ + + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('N1', 3); + define('N2', 3); + define('N3', 40); + define('N4', 10); + + class QRmask { + + public $runLength = array(); + + //---------------------------------------------------------------------- + public function __construct() + { + $this->runLength = array_fill(0, QRSPEC_WIDTH_MAX + 1, 0); + } + + //---------------------------------------------------------------------- + public function writeFormatInformation($width, &$frame, $mask, $level) + { + $blacks = 0; + $format = QRspec::getFormatInfo($mask, $level); + + for($i=0; $i<8; $i++) { + if($format & 1) { + $blacks += 2; + $v = 0x85; + } else { + $v = 0x84; + } + + $frame[8][$width - 1 - $i] = chr($v); + if($i < 6) { + $frame[$i][8] = chr($v); + } else { + $frame[$i + 1][8] = chr($v); + } + $format = $format >> 1; + } + + for($i=0; $i<7; $i++) { + if($format & 1) { + $blacks += 2; + $v = 0x85; + } else { + $v = 0x84; + } + + $frame[$width - 7 + $i][8] = chr($v); + if($i == 0) { + $frame[8][7] = chr($v); + } else { + $frame[8][6 - $i] = chr($v); + } + + $format = $format >> 1; + } + + return $blacks; + } + + //---------------------------------------------------------------------- + public function mask0($x, $y) { return ($x+$y)&1; } + public function mask1($x, $y) { return ($y&1); } + public function mask2($x, $y) { return ($x%3); } + public function mask3($x, $y) { return ($x+$y)%3; } + public function mask4($x, $y) { return (((int)($y/2))+((int)($x/3)))&1; } + public function mask5($x, $y) { return (($x*$y)&1)+($x*$y)%3; } + public function mask6($x, $y) { return ((($x*$y)&1)+($x*$y)%3)&1; } + public function mask7($x, $y) { return ((($x*$y)%3)+(($x+$y)&1))&1; } + + //---------------------------------------------------------------------- + private function generateMaskNo($maskNo, $width, $frame) + { + $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); + + for($y=0; $y<$width; $y++) { + for($x=0; $x<$width; $x++) { + if(ord($frame[$y][$x]) & 0x80) { + $bitMask[$y][$x] = 0; + } else { + $maskFunc = call_user_func(array($this, 'mask'.$maskNo), $x, $y); + $bitMask[$y][$x] = ($maskFunc == 0)?1:0; + } + + } + } + + return $bitMask; + } + + //---------------------------------------------------------------------- + public static function serial($bitFrame) + { + $codeArr = array(); + + foreach ($bitFrame as $line) + $codeArr[] = join('', $line); + + return gzcompress(join("\n", $codeArr), 9); + } + + //---------------------------------------------------------------------- + public static function unserial($code) + { + $codeArr = array(); + + $codeLines = explode("\n", gzuncompress($code)); + foreach ($codeLines as $line) + $codeArr[] = str_split($line); + + return $codeArr; + } + + //---------------------------------------------------------------------- + public function makeMaskNo($maskNo, $width, $s, &$d, $maskGenOnly = false) + { + $b = 0; + $bitMask = array(); + + $fileName = QR_CACHE_DIR.'mask_'.$maskNo.DIRECTORY_SEPARATOR.'mask_'.$width.'_'.$maskNo.'.dat'; + + if (QR_CACHEABLE) { + if (file_exists($fileName)) { + $bitMask = self::unserial(file_get_contents($fileName)); + } else { + $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); + if (!file_exists(QR_CACHE_DIR.'mask_'.$maskNo)) + mkdir(QR_CACHE_DIR.'mask_'.$maskNo); + file_put_contents($fileName, self::serial($bitMask)); + } + } else { + $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); + } + + if ($maskGenOnly) + return; + + $d = $s; + + for($y=0; $y<$width; $y++) { + for($x=0; $x<$width; $x++) { + if($bitMask[$y][$x] == 1) { + $d[$y][$x] = chr(ord($s[$y][$x]) ^ (int)$bitMask[$y][$x]); + } + $b += (int)(ord($d[$y][$x]) & 1); + } + } + + return $b; + } + + //---------------------------------------------------------------------- + public function makeMask($width, $frame, $maskNo, $level) + { + $masked = array_fill(0, $width, str_repeat("\0", $width)); + $this->makeMaskNo($maskNo, $width, $frame, $masked); + $this->writeFormatInformation($width, $masked, $maskNo, $level); + + return $masked; + } + + //---------------------------------------------------------------------- + public function calcN1N3($length) + { + $demerit = 0; + + for($i=0; $i<$length; $i++) { + + if($this->runLength[$i] >= 5) { + $demerit += (N1 + ($this->runLength[$i] - 5)); + } + if($i & 1) { + if(($i >= 3) && ($i < ($length-2)) && ($this->runLength[$i] % 3 == 0)) { + $fact = (int)($this->runLength[$i] / 3); + if(($this->runLength[$i-2] == $fact) && + ($this->runLength[$i-1] == $fact) && + ($this->runLength[$i+1] == $fact) && + ($this->runLength[$i+2] == $fact)) { + if(($this->runLength[$i-3] < 0) || ($this->runLength[$i-3] >= (4 * $fact))) { + $demerit += N3; + } else if((($i+3) >= $length) || ($this->runLength[$i+3] >= (4 * $fact))) { + $demerit += N3; + } + } + } + } + } + return $demerit; + } + + //---------------------------------------------------------------------- + public function evaluateSymbol($width, $frame) + { + $head = 0; + $demerit = 0; + + for($y=0; $y<$width; $y++) { + $head = 0; + $this->runLength[0] = 1; + + $frameY = $frame[$y]; + + if ($y>0) + $frameYM = $frame[$y-1]; + + for($x=0; $x<$width; $x++) { + if(($x > 0) && ($y > 0)) { + $b22 = ord($frameY[$x]) & ord($frameY[$x-1]) & ord($frameYM[$x]) & ord($frameYM[$x-1]); + $w22 = ord($frameY[$x]) | ord($frameY[$x-1]) | ord($frameYM[$x]) | ord($frameYM[$x-1]); + + if(($b22 | ($w22 ^ 1))&1) { + $demerit += N2; + } + } + if(($x == 0) && (ord($frameY[$x]) & 1)) { + $this->runLength[0] = -1; + $head = 1; + $this->runLength[$head] = 1; + } else if($x > 0) { + if((ord($frameY[$x]) ^ ord($frameY[$x-1])) & 1) { + $head++; + $this->runLength[$head] = 1; + } else { + $this->runLength[$head]++; + } + } + } + + $demerit += $this->calcN1N3($head+1); + } + + for($x=0; $x<$width; $x++) { + $head = 0; + $this->runLength[0] = 1; + + for($y=0; $y<$width; $y++) { + if($y == 0 && (ord($frame[$y][$x]) & 1)) { + $this->runLength[0] = -1; + $head = 1; + $this->runLength[$head] = 1; + } else if($y > 0) { + if((ord($frame[$y][$x]) ^ ord($frame[$y-1][$x])) & 1) { + $head++; + $this->runLength[$head] = 1; + } else { + $this->runLength[$head]++; + } + } + } + + $demerit += $this->calcN1N3($head+1); + } + + return $demerit; + } + + + //---------------------------------------------------------------------- + public function mask($width, $frame, $level) + { + $minDemerit = PHP_INT_MAX; + $bestMaskNum = 0; + $bestMask = array(); + + $checked_masks = array(0,1,2,3,4,5,6,7); + + if (QR_FIND_FROM_RANDOM !== false) { + + $howManuOut = 8-(QR_FIND_FROM_RANDOM % 9); + for ($i = 0; $i < $howManuOut; $i++) { + $remPos = rand (0, count($checked_masks)-1); + unset($checked_masks[$remPos]); + $checked_masks = array_values($checked_masks); + } + + } + + $bestMask = $frame; + + foreach($checked_masks as $i) { + $mask = array_fill(0, $width, str_repeat("\0", $width)); + + $demerit = 0; + $blacks = 0; + $blacks = $this->makeMaskNo($i, $width, $frame, $mask); + $blacks += $this->writeFormatInformation($width, $mask, $i, $level); + $blacks = (int)(100 * $blacks / ($width * $width)); + $demerit = (int)((int)(abs($blacks - 50) / 5) * N4); + $demerit += $this->evaluateSymbol($width, $mask); + + if($demerit < $minDemerit) { + $minDemerit = $demerit; + $bestMask = $mask; + $bestMaskNum = $i; + } + } + + return $bestMask; + } + + //---------------------------------------------------------------------- + } diff --git a/src-backup/includes/phpqrcode/qrrscode.php b/src-backup/includes/phpqrcode/qrrscode.php new file mode 100644 index 0000000..591129a --- /dev/null +++ b/src-backup/includes/phpqrcode/qrrscode.php @@ -0,0 +1,210 @@ + + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRrsItem { + + public $mm; // Bits per symbol + public $nn; // Symbols per block (= (1<= $this->nn) { + $x -= $this->nn; + $x = ($x >> $this->mm) + ($x & $this->nn); + } + + return $x; + } + + //---------------------------------------------------------------------- + public static function init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) + { + // Common code for intializing a Reed-Solomon control block (char or int symbols) + // Copyright 2004 Phil Karn, KA9Q + // May be used under the terms of the GNU Lesser General Public License (LGPL) + + $rs = null; + + // Check parameter ranges + if($symsize < 0 || $symsize > 8) return $rs; + if($fcr < 0 || $fcr >= (1<<$symsize)) return $rs; + if($prim <= 0 || $prim >= (1<<$symsize)) return $rs; + if($nroots < 0 || $nroots >= (1<<$symsize)) return $rs; // Can't have more roots than symbol values! + if($pad < 0 || $pad >= ((1<<$symsize) -1 - $nroots)) return $rs; // Too much padding + + $rs = new QRrsItem(); + $rs->mm = $symsize; + $rs->nn = (1<<$symsize)-1; + $rs->pad = $pad; + + $rs->alpha_to = array_fill(0, $rs->nn+1, 0); + $rs->index_of = array_fill(0, $rs->nn+1, 0); + + // PHP style macro replacement ;) + $NN =& $rs->nn; + $A0 =& $NN; + + // Generate Galois field lookup tables + $rs->index_of[0] = $A0; // log(zero) = -inf + $rs->alpha_to[$A0] = 0; // alpha**-inf = 0 + $sr = 1; + + for($i=0; $i<$rs->nn; $i++) { + $rs->index_of[$sr] = $i; + $rs->alpha_to[$i] = $sr; + $sr <<= 1; + if($sr & (1<<$symsize)) { + $sr ^= $gfpoly; + } + $sr &= $rs->nn; + } + + if($sr != 1){ + // field generator polynomial is not primitive! + $rs = NULL; + return $rs; + } + + /* Form RS code generator polynomial from its roots */ + $rs->genpoly = array_fill(0, $nroots+1, 0); + + $rs->fcr = $fcr; + $rs->prim = $prim; + $rs->nroots = $nroots; + $rs->gfpoly = $gfpoly; + + /* Find prim-th root of 1, used in decoding */ + for($iprim=1;($iprim % $prim) != 0;$iprim += $rs->nn) + ; // intentional empty-body loop! + + $rs->iprim = (int)($iprim / $prim); + $rs->genpoly[0] = 1; + + for ($i = 0,$root=$fcr*$prim; $i < $nroots; $i++, $root += $prim) { + $rs->genpoly[$i+1] = 1; + + // Multiply rs->genpoly[] by @**(root + x) + for ($j = $i; $j > 0; $j--) { + if ($rs->genpoly[$j] != 0) { + $rs->genpoly[$j] = $rs->genpoly[$j-1] ^ $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[$j]] + $root)]; + } else { + $rs->genpoly[$j] = $rs->genpoly[$j-1]; + } + } + // rs->genpoly[0] can never be zero + $rs->genpoly[0] = $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[0]] + $root)]; + } + + // convert rs->genpoly[] to index form for quicker encoding + for ($i = 0; $i <= $nroots; $i++) + $rs->genpoly[$i] = $rs->index_of[$rs->genpoly[$i]]; + + return $rs; + } + + //---------------------------------------------------------------------- + public function encode_rs_char($data, &$parity) + { + $MM =& $this->mm; + $NN =& $this->nn; + $ALPHA_TO =& $this->alpha_to; + $INDEX_OF =& $this->index_of; + $GENPOLY =& $this->genpoly; + $NROOTS =& $this->nroots; + $FCR =& $this->fcr; + $PRIM =& $this->prim; + $IPRIM =& $this->iprim; + $PAD =& $this->pad; + $A0 =& $NN; + + $parity = array_fill(0, $NROOTS, 0); + + for($i=0; $i< ($NN-$NROOTS-$PAD); $i++) { + + $feedback = $INDEX_OF[$data[$i] ^ $parity[0]]; + if($feedback != $A0) { + // feedback term is non-zero + + // This line is unnecessary when GENPOLY[NROOTS] is unity, as it must + // always be for the polynomials constructed by init_rs() + $feedback = $this->modnn($NN - $GENPOLY[$NROOTS] + $feedback); + + for($j=1;$j<$NROOTS;$j++) { + $parity[$j] ^= $ALPHA_TO[$this->modnn($feedback + $GENPOLY[$NROOTS-$j])]; + } + } + + // Shift + array_shift($parity); + if($feedback != $A0) { + array_push($parity, $ALPHA_TO[$this->modnn($feedback + $GENPOLY[0])]); + } else { + array_push($parity, 0); + } + } + } + } + + //########################################################################## + + class QRrs { + + public static $items = array(); + + //---------------------------------------------------------------------- + public static function init_rs($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) + { + foreach(self::$items as $rs) { + if($rs->pad != $pad) continue; + if($rs->nroots != $nroots) continue; + if($rs->mm != $symsize) continue; + if($rs->gfpoly != $gfpoly) continue; + if($rs->fcr != $fcr) continue; + if($rs->prim != $prim) continue; + + return $rs; + } + + $rs = QRrsItem::init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad); + array_unshift(self::$items, $rs); + + return $rs; + } + } \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/qrspec.php b/src-backup/includes/phpqrcode/qrspec.php new file mode 100644 index 0000000..92aea0c --- /dev/null +++ b/src-backup/includes/phpqrcode/qrspec.php @@ -0,0 +1,592 @@ + + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * The following data / specifications are taken from + * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004) + * or + * "Automatic identification and data capture techniques -- + * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('QRSPEC_VERSION_MAX', 40); + define('QRSPEC_WIDTH_MAX', 177); + + define('QRCAP_WIDTH', 0); + define('QRCAP_WORDS', 1); + define('QRCAP_REMINDER', 2); + define('QRCAP_EC', 3); + + class QRspec { + + public static $capacity = array( + array( 0, 0, 0, array( 0, 0, 0, 0)), + array( 21, 26, 0, array( 7, 10, 13, 17)), // 1 + array( 25, 44, 7, array( 10, 16, 22, 28)), + array( 29, 70, 7, array( 15, 26, 36, 44)), + array( 33, 100, 7, array( 20, 36, 52, 64)), + array( 37, 134, 7, array( 26, 48, 72, 88)), // 5 + array( 41, 172, 7, array( 36, 64, 96, 112)), + array( 45, 196, 0, array( 40, 72, 108, 130)), + array( 49, 242, 0, array( 48, 88, 132, 156)), + array( 53, 292, 0, array( 60, 110, 160, 192)), + array( 57, 346, 0, array( 72, 130, 192, 224)), //10 + array( 61, 404, 0, array( 80, 150, 224, 264)), + array( 65, 466, 0, array( 96, 176, 260, 308)), + array( 69, 532, 0, array( 104, 198, 288, 352)), + array( 73, 581, 3, array( 120, 216, 320, 384)), + array( 77, 655, 3, array( 132, 240, 360, 432)), //15 + array( 81, 733, 3, array( 144, 280, 408, 480)), + array( 85, 815, 3, array( 168, 308, 448, 532)), + array( 89, 901, 3, array( 180, 338, 504, 588)), + array( 93, 991, 3, array( 196, 364, 546, 650)), + array( 97, 1085, 3, array( 224, 416, 600, 700)), //20 + array(101, 1156, 4, array( 224, 442, 644, 750)), + array(105, 1258, 4, array( 252, 476, 690, 816)), + array(109, 1364, 4, array( 270, 504, 750, 900)), + array(113, 1474, 4, array( 300, 560, 810, 960)), + array(117, 1588, 4, array( 312, 588, 870, 1050)), //25 + array(121, 1706, 4, array( 336, 644, 952, 1110)), + array(125, 1828, 4, array( 360, 700, 1020, 1200)), + array(129, 1921, 3, array( 390, 728, 1050, 1260)), + array(133, 2051, 3, array( 420, 784, 1140, 1350)), + array(137, 2185, 3, array( 450, 812, 1200, 1440)), //30 + array(141, 2323, 3, array( 480, 868, 1290, 1530)), + array(145, 2465, 3, array( 510, 924, 1350, 1620)), + array(149, 2611, 3, array( 540, 980, 1440, 1710)), + array(153, 2761, 3, array( 570, 1036, 1530, 1800)), + array(157, 2876, 0, array( 570, 1064, 1590, 1890)), //35 + array(161, 3034, 0, array( 600, 1120, 1680, 1980)), + array(165, 3196, 0, array( 630, 1204, 1770, 2100)), + array(169, 3362, 0, array( 660, 1260, 1860, 2220)), + array(173, 3532, 0, array( 720, 1316, 1950, 2310)), + array(177, 3706, 0, array( 750, 1372, 2040, 2430)) //40 + ); + + //---------------------------------------------------------------------- + public static function getDataLength($version, $level) + { + return self::$capacity[$version][QRCAP_WORDS] - self::$capacity[$version][QRCAP_EC][$level]; + } + + //---------------------------------------------------------------------- + public static function getECCLength($version, $level) + { + return self::$capacity[$version][QRCAP_EC][$level]; + } + + //---------------------------------------------------------------------- + public static function getWidth($version) + { + return self::$capacity[$version][QRCAP_WIDTH]; + } + + //---------------------------------------------------------------------- + public static function getRemainder($version) + { + return self::$capacity[$version][QRCAP_REMINDER]; + } + + //---------------------------------------------------------------------- + public static function getMinimumVersion($size, $level) + { + + for($i=1; $i<= QRSPEC_VERSION_MAX; $i++) { + $words = self::$capacity[$i][QRCAP_WORDS] - self::$capacity[$i][QRCAP_EC][$level]; + if($words >= $size) + return $i; + } + + return -1; + } + + //###################################################################### + + public static $lengthTableBits = array( + array(10, 12, 14), + array( 9, 11, 13), + array( 8, 16, 16), + array( 8, 10, 12) + ); + + //---------------------------------------------------------------------- + public static function lengthIndicator($mode, $version) + { + if ($mode == QR_MODE_STRUCTURE) + return 0; + + if ($version <= 9) { + $l = 0; + } else if ($version <= 26) { + $l = 1; + } else { + $l = 2; + } + + return self::$lengthTableBits[$mode][$l]; + } + + //---------------------------------------------------------------------- + public static function maximumWords($mode, $version) + { + if($mode == QR_MODE_STRUCTURE) + return 3; + + if($version <= 9) { + $l = 0; + } else if($version <= 26) { + $l = 1; + } else { + $l = 2; + } + + $bits = self::$lengthTableBits[$mode][$l]; + $words = (1 << $bits) - 1; + + if($mode == QR_MODE_KANJI) { + $words *= 2; // the number of bytes is required + } + + return $words; + } + + // Error correction code ----------------------------------------------- + // Table of the error correction code (Reed-Solomon block) + // See Table 12-16 (pp.30-36), JIS X0510:2004. + + public static $eccTable = array( + array(array( 0, 0), array( 0, 0), array( 0, 0), array( 0, 0)), + array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), // 1 + array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), + array(array( 1, 0), array( 1, 0), array( 2, 0), array( 2, 0)), + array(array( 1, 0), array( 2, 0), array( 2, 0), array( 4, 0)), + array(array( 1, 0), array( 2, 0), array( 2, 2), array( 2, 2)), // 5 + array(array( 2, 0), array( 4, 0), array( 4, 0), array( 4, 0)), + array(array( 2, 0), array( 4, 0), array( 2, 4), array( 4, 1)), + array(array( 2, 0), array( 2, 2), array( 4, 2), array( 4, 2)), + array(array( 2, 0), array( 3, 2), array( 4, 4), array( 4, 4)), + array(array( 2, 2), array( 4, 1), array( 6, 2), array( 6, 2)), //10 + array(array( 4, 0), array( 1, 4), array( 4, 4), array( 3, 8)), + array(array( 2, 2), array( 6, 2), array( 4, 6), array( 7, 4)), + array(array( 4, 0), array( 8, 1), array( 8, 4), array(12, 4)), + array(array( 3, 1), array( 4, 5), array(11, 5), array(11, 5)), + array(array( 5, 1), array( 5, 5), array( 5, 7), array(11, 7)), //15 + array(array( 5, 1), array( 7, 3), array(15, 2), array( 3, 13)), + array(array( 1, 5), array(10, 1), array( 1, 15), array( 2, 17)), + array(array( 5, 1), array( 9, 4), array(17, 1), array( 2, 19)), + array(array( 3, 4), array( 3, 11), array(17, 4), array( 9, 16)), + array(array( 3, 5), array( 3, 13), array(15, 5), array(15, 10)), //20 + array(array( 4, 4), array(17, 0), array(17, 6), array(19, 6)), + array(array( 2, 7), array(17, 0), array( 7, 16), array(34, 0)), + array(array( 4, 5), array( 4, 14), array(11, 14), array(16, 14)), + array(array( 6, 4), array( 6, 14), array(11, 16), array(30, 2)), + array(array( 8, 4), array( 8, 13), array( 7, 22), array(22, 13)), //25 + array(array(10, 2), array(19, 4), array(28, 6), array(33, 4)), + array(array( 8, 4), array(22, 3), array( 8, 26), array(12, 28)), + array(array( 3, 10), array( 3, 23), array( 4, 31), array(11, 31)), + array(array( 7, 7), array(21, 7), array( 1, 37), array(19, 26)), + array(array( 5, 10), array(19, 10), array(15, 25), array(23, 25)), //30 + array(array(13, 3), array( 2, 29), array(42, 1), array(23, 28)), + array(array(17, 0), array(10, 23), array(10, 35), array(19, 35)), + array(array(17, 1), array(14, 21), array(29, 19), array(11, 46)), + array(array(13, 6), array(14, 23), array(44, 7), array(59, 1)), + array(array(12, 7), array(12, 26), array(39, 14), array(22, 41)), //35 + array(array( 6, 14), array( 6, 34), array(46, 10), array( 2, 64)), + array(array(17, 4), array(29, 14), array(49, 10), array(24, 46)), + array(array( 4, 18), array(13, 32), array(48, 14), array(42, 32)), + array(array(20, 4), array(40, 7), array(43, 22), array(10, 67)), + array(array(19, 6), array(18, 31), array(34, 34), array(20, 61)),//40 + ); + + //---------------------------------------------------------------------- + // CACHEABLE!!! + + public static function getEccSpec($version, $level, array &$spec) + { + if (count($spec) < 5) { + $spec = array(0,0,0,0,0); + } + + $b1 = self::$eccTable[$version][$level][0]; + $b2 = self::$eccTable[$version][$level][1]; + $data = self::getDataLength($version, $level); + $ecc = self::getECCLength($version, $level); + + if($b2 == 0) { + $spec[0] = $b1; + $spec[1] = (int)($data / $b1); + $spec[2] = (int)($ecc / $b1); + $spec[3] = 0; + $spec[4] = 0; + } else { + $spec[0] = $b1; + $spec[1] = (int)($data / ($b1 + $b2)); + $spec[2] = (int)($ecc / ($b1 + $b2)); + $spec[3] = $b2; + $spec[4] = $spec[1] + 1; + } + } + + // Alignment pattern --------------------------------------------------- + + // Positions of alignment patterns. + // This array includes only the second and the third position of the + // alignment patterns. Rest of them can be calculated from the distance + // between them. + + // See Table 1 in Appendix E (pp.71) of JIS X0510:2004. + + public static $alignmentPattern = array( + array( 0, 0), + array( 0, 0), array(18, 0), array(22, 0), array(26, 0), array(30, 0), // 1- 5 + array(34, 0), array(22, 38), array(24, 42), array(26, 46), array(28, 50), // 6-10 + array(30, 54), array(32, 58), array(34, 62), array(26, 46), array(26, 48), //11-15 + array(26, 50), array(30, 54), array(30, 56), array(30, 58), array(34, 62), //16-20 + array(28, 50), array(26, 50), array(30, 54), array(28, 54), array(32, 58), //21-25 + array(30, 58), array(34, 62), array(26, 50), array(30, 54), array(26, 52), //26-30 + array(30, 56), array(34, 60), array(30, 58), array(34, 62), array(30, 54), //31-35 + array(24, 50), array(28, 54), array(32, 58), array(26, 54), array(30, 58), //35-40 + ); + + + /** -------------------------------------------------------------------- + * Put an alignment marker. + * @param frame + * @param width + * @param ox,oy center coordinate of the pattern + */ + public static function putAlignmentMarker(array &$frame, $ox, $oy) + { + $finder = array( + "\xa1\xa1\xa1\xa1\xa1", + "\xa1\xa0\xa0\xa0\xa1", + "\xa1\xa0\xa1\xa0\xa1", + "\xa1\xa0\xa0\xa0\xa1", + "\xa1\xa1\xa1\xa1\xa1" + ); + + $yStart = $oy-2; + $xStart = $ox-2; + + for($y=0; $y<5; $y++) { + QRstr::set($frame, $xStart, $yStart+$y, $finder[$y]); + } + } + + //---------------------------------------------------------------------- + public static function putAlignmentPattern($version, &$frame, $width) + { + if($version < 2) + return; + + $d = self::$alignmentPattern[$version][1] - self::$alignmentPattern[$version][0]; + if($d < 0) { + $w = 2; + } else { + $w = (int)(($width - self::$alignmentPattern[$version][0]) / $d + 2); + } + + if($w * $w - 3 == 1) { + $x = self::$alignmentPattern[$version][0]; + $y = self::$alignmentPattern[$version][0]; + self::putAlignmentMarker($frame, $x, $y); + return; + } + + $cx = self::$alignmentPattern[$version][0]; + for($x=1; $x<$w - 1; $x++) { + self::putAlignmentMarker($frame, 6, $cx); + self::putAlignmentMarker($frame, $cx, 6); + $cx += $d; + } + + $cy = self::$alignmentPattern[$version][0]; + for($y=0; $y<$w-1; $y++) { + $cx = self::$alignmentPattern[$version][0]; + for($x=0; $x<$w-1; $x++) { + self::putAlignmentMarker($frame, $cx, $cy); + $cx += $d; + } + $cy += $d; + } + } + + // Version information pattern ----------------------------------------- + + // Version information pattern (BCH coded). + // See Table 1 in Appendix D (pp.68) of JIS X0510:2004. + + // size: [QRSPEC_VERSION_MAX - 6] + + public static $versionPattern = array( + 0x07c94, 0x085bc, 0x09a99, 0x0a4d3, 0x0bbf6, 0x0c762, 0x0d847, 0x0e60d, + 0x0f928, 0x10b78, 0x1145d, 0x12a17, 0x13532, 0x149a6, 0x15683, 0x168c9, + 0x177ec, 0x18ec4, 0x191e1, 0x1afab, 0x1b08e, 0x1cc1a, 0x1d33f, 0x1ed75, + 0x1f250, 0x209d5, 0x216f0, 0x228ba, 0x2379f, 0x24b0b, 0x2542e, 0x26a64, + 0x27541, 0x28c69 + ); + + //---------------------------------------------------------------------- + public static function getVersionPattern($version) + { + if($version < 7 || $version > QRSPEC_VERSION_MAX) + return 0; + + return self::$versionPattern[$version -7]; + } + + // Format information -------------------------------------------------- + // See calcFormatInfo in tests/test_qrspec.c (orginal qrencode c lib) + + public static $formatInfo = array( + array(0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976), + array(0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0), + array(0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed), + array(0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b) + ); + + public static function getFormatInfo($mask, $level) + { + if($mask < 0 || $mask > 7) + return 0; + + if($level < 0 || $level > 3) + return 0; + + return self::$formatInfo[$level][$mask]; + } + + // Frame --------------------------------------------------------------- + // Cache of initial frames. + + public static $frames = array(); + + /** -------------------------------------------------------------------- + * Put a finder pattern. + * @param frame + * @param width + * @param ox,oy upper-left coordinate of the pattern + */ + public static function putFinderPattern(&$frame, $ox, $oy) + { + $finder = array( + "\xc1\xc1\xc1\xc1\xc1\xc1\xc1", + "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", + "\xc1\xc1\xc1\xc1\xc1\xc1\xc1" + ); + + for($y=0; $y<7; $y++) { + QRstr::set($frame, $ox, $oy+$y, $finder[$y]); + } + } + + //---------------------------------------------------------------------- + public static function createFrame($version) + { + $width = self::$capacity[$version][QRCAP_WIDTH]; + $frameLine = str_repeat ("\0", $width); + $frame = array_fill(0, $width, $frameLine); + + // Finder pattern + self::putFinderPattern($frame, 0, 0); + self::putFinderPattern($frame, $width - 7, 0); + self::putFinderPattern($frame, 0, $width - 7); + + // Separator + $yOffset = $width - 7; + + for($y=0; $y<7; $y++) { + $frame[$y][7] = "\xc0"; + $frame[$y][$width - 8] = "\xc0"; + $frame[$yOffset][7] = "\xc0"; + $yOffset++; + } + + $setPattern = str_repeat("\xc0", 8); + + QRstr::set($frame, 0, 7, $setPattern); + QRstr::set($frame, $width-8, 7, $setPattern); + QRstr::set($frame, 0, $width - 8, $setPattern); + + // Format info + $setPattern = str_repeat("\x84", 9); + QRstr::set($frame, 0, 8, $setPattern); + QRstr::set($frame, $width - 8, 8, $setPattern, 8); + + $yOffset = $width - 8; + + for($y=0; $y<8; $y++,$yOffset++) { + $frame[$y][8] = "\x84"; + $frame[$yOffset][8] = "\x84"; + } + + // Timing pattern + + for($i=1; $i<$width-15; $i++) { + $frame[6][7+$i] = chr(0x90 | ($i & 1)); + $frame[7+$i][6] = chr(0x90 | ($i & 1)); + } + + // Alignment pattern + self::putAlignmentPattern($version, $frame, $width); + + // Version information + if($version >= 7) { + $vinf = self::getVersionPattern($version); + + $v = $vinf; + + for($x=0; $x<6; $x++) { + for($y=0; $y<3; $y++) { + $frame[($width - 11)+$y][$x] = chr(0x88 | ($v & 1)); + $v = $v >> 1; + } + } + + $v = $vinf; + for($y=0; $y<6; $y++) { + for($x=0; $x<3; $x++) { + $frame[$y][$x+($width - 11)] = chr(0x88 | ($v & 1)); + $v = $v >> 1; + } + } + } + + // and a little bit... + $frame[$width - 8][8] = "\x81"; + + return $frame; + } + + //---------------------------------------------------------------------- + public static function debug($frame, $binary_mode = false) + { + if ($binary_mode) { + + foreach ($frame as &$frameLine) { + $frameLine = join('  ', explode('0', $frameLine)); + $frameLine = join('██', explode('1', $frameLine)); + } + + ?> + +


        '; + echo join("
        ", $frame); + echo '






'; + + } else { + + foreach ($frame as &$frameLine) { + $frameLine = join(' ', explode("\xc0", $frameLine)); + $frameLine = join('', explode("\xc1", $frameLine)); + $frameLine = join(' ', explode("\xa0", $frameLine)); + $frameLine = join('', explode("\xa1", $frameLine)); + $frameLine = join('', explode("\x84", $frameLine)); //format 0 + $frameLine = join('', explode("\x85", $frameLine)); //format 1 + $frameLine = join('', explode("\x81", $frameLine)); //special bit + $frameLine = join(' ', explode("\x90", $frameLine)); //clock 0 + $frameLine = join('', explode("\x91", $frameLine)); //clock 1 + $frameLine = join(' ', explode("\x88", $frameLine)); //version + $frameLine = join('', explode("\x89", $frameLine)); //version + $frameLine = join('♦', explode("\x01", $frameLine)); + $frameLine = join('⋅', explode("\0", $frameLine)); + } + + ?> + + "; + echo join("
", $frame); + echo "
"; + + } + } + + //---------------------------------------------------------------------- + public static function serial($frame) + { + return gzcompress(join("\n", $frame), 9); + } + + //---------------------------------------------------------------------- + public static function unserial($code) + { + return explode("\n", gzuncompress($code)); + } + + //---------------------------------------------------------------------- + public static function newFrame($version) + { + if($version < 1 || $version > QRSPEC_VERSION_MAX) + return null; + + if(!isset(self::$frames[$version])) { + + $fileName = QR_CACHE_DIR.'frame_'.$version.'.dat'; + + if (QR_CACHEABLE) { + if (file_exists($fileName)) { + self::$frames[$version] = self::unserial(file_get_contents($fileName)); + } else { + self::$frames[$version] = self::createFrame($version); + file_put_contents($fileName, self::serial(self::$frames[$version])); + } + } else { + self::$frames[$version] = self::createFrame($version); + } + } + + if(is_null(self::$frames[$version])) + return null; + + return self::$frames[$version]; + } + + //---------------------------------------------------------------------- + public static function rsBlockNum($spec) { return $spec[0] + $spec[3]; } + public static function rsBlockNum1($spec) { return $spec[0]; } + public static function rsDataCodes1($spec) { return $spec[1]; } + public static function rsEccCodes1($spec) { return $spec[2]; } + public static function rsBlockNum2($spec) { return $spec[3]; } + public static function rsDataCodes2($spec) { return $spec[4]; } + public static function rsEccCodes2($spec) { return $spec[2]; } + public static function rsDataLength($spec) { return ($spec[0] * $spec[1]) + ($spec[3] * $spec[4]); } + public static function rsEccLength($spec) { return ($spec[0] + $spec[3]) * $spec[2]; } + + } \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/qrsplit.php b/src-backup/includes/phpqrcode/qrsplit.php new file mode 100644 index 0000000..d75b827 --- /dev/null +++ b/src-backup/includes/phpqrcode/qrsplit.php @@ -0,0 +1,311 @@ + + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * The following data / specifications are taken from + * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004) + * or + * "Automatic identification and data capture techniques -- + * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + class QRsplit { + + public $dataStr = ''; + public $input; + public $modeHint; + + //---------------------------------------------------------------------- + public function __construct($dataStr, $input, $modeHint) + { + $this->dataStr = $dataStr; + $this->input = $input; + $this->modeHint = $modeHint; + } + + //---------------------------------------------------------------------- + public static function isdigitat($str, $pos) + { + if ($pos >= strlen($str)) + return false; + + return ((ord($str[$pos]) >= ord('0'))&&(ord($str[$pos]) <= ord('9'))); + } + + //---------------------------------------------------------------------- + public static function isalnumat($str, $pos) + { + if ($pos >= strlen($str)) + return false; + + return (QRinput::lookAnTable(ord($str[$pos])) >= 0); + } + + //---------------------------------------------------------------------- + public function identifyMode($pos) + { + if ($pos >= strlen($this->dataStr)) + return QR_MODE_NUL; + + $c = $this->dataStr[$pos]; + + if(self::isdigitat($this->dataStr, $pos)) { + return QR_MODE_NUM; + } else if(self::isalnumat($this->dataStr, $pos)) { + return QR_MODE_AN; + } else if($this->modeHint == QR_MODE_KANJI) { + + if ($pos+1 < strlen($this->dataStr)) + { + $d = $this->dataStr[$pos+1]; + $word = (ord($c) << 8) | ord($d); + if(($word >= 0x8140 && $word <= 0x9ffc) || ($word >= 0xe040 && $word <= 0xebbf)) { + return QR_MODE_KANJI; + } + } + } + + return QR_MODE_8; + } + + //---------------------------------------------------------------------- + public function eatNum() + { + $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); + + $p = 0; + while(self::isdigitat($this->dataStr, $p)) { + $p++; + } + + $run = $p; + $mode = $this->identifyMode($p); + + if($mode == QR_MODE_8) { + $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln + + QRinput::estimateBitsMode8(1) // + 4 + l8 + - QRinput::estimateBitsMode8($run + 1); // - 4 - l8 + if($dif > 0) { + return $this->eat8(); + } + } + if($mode == QR_MODE_AN) { + $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln + + QRinput::estimateBitsModeAn(1) // + 4 + la + - QRinput::estimateBitsModeAn($run + 1);// - 4 - la + if($dif > 0) { + return $this->eatAn(); + } + } + + $ret = $this->input->append(QR_MODE_NUM, $run, str_split($this->dataStr)); + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function eatAn() + { + $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion()); + $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); + + $p = 0; + + while(self::isalnumat($this->dataStr, $p)) { + if(self::isdigitat($this->dataStr, $p)) { + $q = $p; + while(self::isdigitat($this->dataStr, $q)) { + $q++; + } + + $dif = QRinput::estimateBitsModeAn($p) // + 4 + la + + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln + - QRinput::estimateBitsModeAn($q); // - 4 - la + + if($dif < 0) { + break; + } else { + $p = $q; + } + } else { + $p++; + } + } + + $run = $p; + + if(!self::isalnumat($this->dataStr, $p)) { + $dif = QRinput::estimateBitsModeAn($run) + 4 + $la + + QRinput::estimateBitsMode8(1) // + 4 + l8 + - QRinput::estimateBitsMode8($run + 1); // - 4 - l8 + if($dif > 0) { + return $this->eat8(); + } + } + + $ret = $this->input->append(QR_MODE_AN, $run, str_split($this->dataStr)); + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function eatKanji() + { + $p = 0; + + while($this->identifyMode($p) == QR_MODE_KANJI) { + $p += 2; + } + + $ret = $this->input->append(QR_MODE_KANJI, $p, str_split($this->dataStr)); + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function eat8() + { + $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion()); + $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); + + $p = 1; + $dataStrLen = strlen($this->dataStr); + + while($p < $dataStrLen) { + + $mode = $this->identifyMode($p); + if($mode == QR_MODE_KANJI) { + break; + } + if($mode == QR_MODE_NUM) { + $q = $p; + while(self::isdigitat($this->dataStr, $q)) { + $q++; + } + $dif = QRinput::estimateBitsMode8($p) // + 4 + l8 + + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln + - QRinput::estimateBitsMode8($q); // - 4 - l8 + if($dif < 0) { + break; + } else { + $p = $q; + } + } else if($mode == QR_MODE_AN) { + $q = $p; + while(self::isalnumat($this->dataStr, $q)) { + $q++; + } + $dif = QRinput::estimateBitsMode8($p) // + 4 + l8 + + QRinput::estimateBitsModeAn($q - $p) + 4 + $la + - QRinput::estimateBitsMode8($q); // - 4 - l8 + if($dif < 0) { + break; + } else { + $p = $q; + } + } else { + $p++; + } + } + + $run = $p; + $ret = $this->input->append(QR_MODE_8, $run, str_split($this->dataStr)); + + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function splitString() + { + while (strlen($this->dataStr) > 0) + { + if($this->dataStr == '') + return 0; + + $mode = $this->identifyMode(0); + + switch ($mode) { + case QR_MODE_NUM: $length = $this->eatNum(); break; + case QR_MODE_AN: $length = $this->eatAn(); break; + case QR_MODE_KANJI: + if ($hint == QR_MODE_KANJI) + $length = $this->eatKanji(); + else $length = $this->eat8(); + break; + default: $length = $this->eat8(); break; + + } + + if($length == 0) return 0; + if($length < 0) return -1; + + $this->dataStr = substr($this->dataStr, $length); + } + } + + //---------------------------------------------------------------------- + public function toUpper() + { + $stringLen = strlen($this->dataStr); + $p = 0; + + while ($p<$stringLen) { + $mode = self::identifyMode(substr($this->dataStr, $p), $this->modeHint); + if($mode == QR_MODE_KANJI) { + $p += 2; + } else { + if (ord($this->dataStr[$p]) >= ord('a') && ord($this->dataStr[$p]) <= ord('z')) { + $this->dataStr[$p] = chr(ord($this->dataStr[$p]) - 32); + } + $p++; + } + } + + return $this->dataStr; + } + + //---------------------------------------------------------------------- + public static function splitStringToQRinput($string, QRinput $input, $modeHint, $casesensitive = true) + { + if(is_null($string) || $string == '\0' || $string == '') { + throw new Exception('empty string!!!'); + } + + $split = new QRsplit($string, $input, $modeHint); + + if(!$casesensitive) + $split->toUpper(); + + return $split->splitString(); + } + } \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/qrtools.php b/src-backup/includes/phpqrcode/qrtools.php new file mode 100644 index 0000000..3012db4 --- /dev/null +++ b/src-backup/includes/phpqrcode/qrtools.php @@ -0,0 +1,172 @@ + + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRtools { + + //---------------------------------------------------------------------- + public static function binarize($frame) + { + $len = count($frame); + foreach ($frame as &$frameLine) { + + for($i=0; $i<$len; $i++) { + $frameLine[$i] = (ord($frameLine[$i])&1)?'1':'0'; + } + } + + return $frame; + } + + //---------------------------------------------------------------------- + public static function tcpdfBarcodeArray($code, $mode = 'QR,L', $tcPdfVersion = '4.5.037') + { + $barcode_array = array(); + + if (!is_array($mode)) + $mode = explode(',', $mode); + + $eccLevel = 'L'; + + if (count($mode) > 1) { + $eccLevel = $mode[1]; + } + + $qrTab = QRcode::text($code, false, $eccLevel); + $size = count($qrTab); + + $barcode_array['num_rows'] = $size; + $barcode_array['num_cols'] = $size; + $barcode_array['bcode'] = array(); + + foreach ($qrTab as $line) { + $arrAdd = array(); + foreach(str_split($line) as $char) + $arrAdd[] = ($char=='1')?1:0; + $barcode_array['bcode'][] = $arrAdd; + } + + return $barcode_array; + } + + //---------------------------------------------------------------------- + public static function clearCache() + { + self::$frames = array(); + } + + //---------------------------------------------------------------------- + public static function buildCache() + { + QRtools::markTime('before_build_cache'); + + $mask = new QRmask(); + for ($a=1; $a <= QRSPEC_VERSION_MAX; $a++) { + $frame = QRspec::newFrame($a); + if (QR_IMAGE) { + $fileName = QR_CACHE_DIR.'frame_'.$a.'.png'; + QRimage::png(self::binarize($frame), $fileName, 1, 0); + } + + $width = count($frame); + $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); + for ($maskNo=0; $maskNo<8; $maskNo++) + $mask->makeMaskNo($maskNo, $width, $frame, $bitMask, true); + } + + QRtools::markTime('after_build_cache'); + } + + //---------------------------------------------------------------------- + public static function log($outfile, $err) + { + if (QR_LOG_DIR !== false) { + if ($err != '') { + if ($outfile !== false) { + file_put_contents(QR_LOG_DIR.basename($outfile).'-errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND); + } else { + file_put_contents(QR_LOG_DIR.'errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND); + } + } + } + } + + //---------------------------------------------------------------------- + public static function dumpMask($frame) + { + $width = count($frame); + for($y=0;$y<$width;$y++) { + for($x=0;$x<$width;$x++) { + echo ord($frame[$y][$x]).','; + } + } + } + + //---------------------------------------------------------------------- + public static function markTime($markerId) + { + list($usec, $sec) = explode(" ", microtime()); + $time = ((float)$usec + (float)$sec); + + if (!isset($GLOBALS['qr_time_bench'])) + $GLOBALS['qr_time_bench'] = array(); + + $GLOBALS['qr_time_bench'][$markerId] = $time; + } + + //---------------------------------------------------------------------- + public static function timeBenchmark() + { + self::markTime('finish'); + + $lastTime = 0; + $startTime = 0; + $p = 0; + + echo ' + + '; + + foreach($GLOBALS['qr_time_bench'] as $markerId=>$thisTime) { + if ($p > 0) { + echo ''; + } else { + $startTime = $thisTime; + } + + $p++; + $lastTime = $thisTime; + } + + echo ' + + +
BENCHMARK
till '.$markerId.': '.number_format($thisTime-$lastTime, 6).'s
TOTAL: '.number_format($lastTime-$startTime, 6).'s
'; + } + + } + + //########################################################################## + + QRtools::markTime('start'); + \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/tools/merge.bat b/src-backup/includes/phpqrcode/tools/merge.bat new file mode 100755 index 0000000..b60a485 --- /dev/null +++ b/src-backup/includes/phpqrcode/tools/merge.bat @@ -0,0 +1,2 @@ +php ./merge.php +pause \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/tools/merge.php b/src-backup/includes/phpqrcode/tools/merge.php new file mode 100644 index 0000000..19d338b --- /dev/null +++ b/src-backup/includes/phpqrcode/tools/merge.php @@ -0,0 +1,70 @@ + + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + $QR_BASEDIR = dirname(__FILE__).DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR; + $QR_TOOLSDIR = dirname(__FILE__).DIRECTORY_SEPARATOR; + + $outputFile = $QR_BASEDIR.'phpqrcode.php'; + + // Required libs + + $fileList = array( + $QR_BASEDIR.'qrconst.php', + $QR_TOOLSDIR.'merged_config.php', + $QR_BASEDIR.'qrtools.php', + $QR_BASEDIR.'qrspec.php', + $QR_BASEDIR.'qrimage.php', + $QR_BASEDIR.'qrinput.php', + $QR_BASEDIR.'qrbitstream.php', + $QR_BASEDIR.'qrsplit.php', + $QR_BASEDIR.'qrrscode.php', + $QR_BASEDIR.'qrmask.php', + $QR_BASEDIR.'qrencode.php' + ); + + $headerFile = $QR_TOOLSDIR.'merged_header.php'; + $versionFile = $QR_BASEDIR.'VERSION'; + + $outputCode = ''; + + foreach($fileList as $fileName) { + $outputCode .= "\n\n".'//---- '.basename($fileName).' -----------------------------'."\n\n"; + $anotherCode = file_get_contents($fileName); + $anotherCode = preg_replace ('/^<\?php/', '', $anotherCode); + $anotherCode = preg_replace ('/\?>\*$/', '', $anotherCode); + $outputCode .= "\n\n".$anotherCode."\n\n"; + } + + $versionDataEx = explode("\n", file_get_contents($versionFile)); + + $outputContents = file_get_contents($headerFile); + $outputContents .= "\n\n/*\n * Version: ".trim($versionDataEx[0])."\n * Build: ".trim($versionDataEx[1])."\n */\n\n"; + $outputContents .= $outputCode; + + file_put_contents($outputFile, $outputContents); + + \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/tools/merge.sh b/src-backup/includes/phpqrcode/tools/merge.sh new file mode 100644 index 0000000..e4c2fbc --- /dev/null +++ b/src-backup/includes/phpqrcode/tools/merge.sh @@ -0,0 +1,2 @@ +#!/bin/sh +php ./merge.php \ No newline at end of file diff --git a/src-backup/includes/phpqrcode/tools/merged_config.php b/src-backup/includes/phpqrcode/tools/merged_config.php new file mode 100644 index 0000000..55ddb45 --- /dev/null +++ b/src-backup/includes/phpqrcode/tools/merged_config.php @@ -0,0 +1,17 @@ + + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + \ No newline at end of file diff --git a/src-backup/index.php b/src-backup/index.php new file mode 100644 index 0000000..05777e7 --- /dev/null +++ b/src-backup/index.php @@ -0,0 +1,690 @@ + 0) { + $row = mysqli_fetch_assoc($result); + return number_format($row['total']); + } + return $default; + } catch (Exception $e) { + return $default; + } +} + +// Get statistics +$active_students = getDatabaseStats("SELECT COUNT(*) as total FROM students WHERE status = 1", '0'); +$course_count = getDatabaseStats("SELECT COUNT(DISTINCT id) as total FROM courses WHERE status = 1", '12'); +$today_checkins = getDatabaseStats("SELECT COUNT(*) as total FROM attendance WHERE DATE(created_at) = CURDATE()", '0'); +?> + + + + + + + Attendance Management System - Aldersgate College + + + + + + + + + + + + + + + +
+
+
+
+

Attendance Management System

+

+ A modern, efficient, and contactless attendance system using QR code technology. + Perfect for Aldersgate College's digital transformation needs. +

+ +
+
+
+ Aldersgate College Logo +
+
+
+
+
+ + +
+
+
+
+
+
+
Active Students
+
+
+
+
+
+
Courses
+
+
+
+
+
+
Today's Check-ins
+
+
+
+
+
99.9%
+
Accuracy Rate
+
+
+
+
+
+ + +
+
+

Key Features

+
+
+
+
+ +
+

QR Code Attendance

+

+ Quick and contactless attendance marking with unique student QR codes. +

+
+
+
+
+
+ +
+

Real-time Analytics

+

+ Comprehensive dashboards and detailed attendance reports. +

+
+
+
+
+
+ +
+

Student Management

+

+ Manage profiles, courses, and departments with bulk import. +

+
+
+
+
+
+ +
+

Activity Scheduling

+

+ Schedule classes, seminars, and events with specific time slots. +

+
+
+
+
+
+ +
+

Smart Notifications

+

+ Automated alerts for attendance, events, and announcements. +

+
+
+
+
+
+ +
+

Secure & Reliable

+

+ Role-based access control with enterprise-grade security. +

+
+
+
+
+
+ + +
+
+
+
+ +

Aldersgate College

+

+ Solano, Nueva Vizcaya
+ Excellence in Education Since 1947 +

+
+
+

About This System

+

+ Developed specifically for Aldersgate College, this system modernizes and + streamlines attendance tracking across all departments and courses with + cutting-edge QR code technology. +

+
+
+
+ +
+
Contactless Operation
+ No physical contact required +
+
+
+
+
+ +
+
Real-time Tracking
+ Live attendance monitoring +
+
+
+
+
+ +
+
Easy Integration
+ Works with existing systems +
+
+
+
+
+ +
+
Mobile Ready
+ Accessible on all devices +
+
+
+
+ +
+
+
+
+ + +
+
+
+
+
Attendance Management System
+

+ A comprehensive solution for modernizing attendance tracking + at Aldersgate College with QR code technology. +

+
+ + +
+
+
+
Quick Links
+ +
+
+
Contact Info
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/src-backup/qr/cleanup_qrcodes.php b/src-backup/qr/cleanup_qrcodes.php new file mode 100644 index 0000000..9dcc3d3 --- /dev/null +++ b/src-backup/qr/cleanup_qrcodes.php @@ -0,0 +1,18 @@ += 3600) { + @unlink($file); + } + } + } +} +?> \ No newline at end of file diff --git a/src-backup/qr/generate.php b/src-backup/qr/generate.php new file mode 100644 index 0000000..bd7f3d2 --- /dev/null +++ b/src-backup/qr/generate.php @@ -0,0 +1,593 @@ +Error: Student ID required.
'); +} + +$student_id = intval($_GET['id']); + +// Get student data +$sql = "SELECT s.*, c.code as course_code, c.name as course_name, + d.name as department_name, sc.name as school_name + FROM students s + LEFT JOIN courses c ON s.course_id = c.id + LEFT JOIN departments d ON s.department_id = d.id + LEFT JOIN schools sc ON s.school_id = sc.id + WHERE s.id = ?"; + +$stmt = mysqli_prepare($conn, $sql); +mysqli_stmt_bind_param($stmt, 'i', $student_id); +mysqli_stmt_execute($stmt); +$result = mysqli_stmt_get_result($stmt); + +if (!$result || mysqli_num_rows($result) == 0) { + die('
Error: Student not found.
'); +} + +$student = mysqli_fetch_assoc($result); +mysqli_stmt_close($stmt); + +// Check if download or print is requested +$download = isset($_GET['download']) && $_GET['download'] == '1'; +$print = isset($_GET['print']) && $_GET['print'] == '1'; +$auto_print = isset($_GET['autoPrint']) && $_GET['autoPrint'] == '1'; + +// QR code content +$qr_data = [ + 'ID' => $student['student_id'], + 'Name' => $student['full_name'], + 'Course' => $student['course_code'], + 'Dept' => $student['department_name'], + 'Year' => 'Year ' . $student['year_level'], + 'Code' => $student['qr_code'] +]; + +$qr_text = ""; +foreach ($qr_data as $key => $value) { + $qr_text .= "$key: $value\n"; +} + +// Create temp directory +$temp_dir = '../temp_qrcodes/'; +if (!file_exists($temp_dir)) { + mkdir($temp_dir, 0777, true); +} + +// Generate QR code +$filename = 'qr_' . $student['student_id'] . '_' . time() . '.png'; +$filepath = $temp_dir . $filename; +$qr_size = isset($_GET['size']) ? intval($_GET['size']) : 250; + +// Generate QR code from Google Charts +$encoded_text = urlencode(trim($qr_text)); +$qr_url = "https://chart.googleapis.com/chart?chs={$qr_size}x{$qr_size}&cht=qr&chl={$encoded_text}&choe=UTF-8"; +$image_data = @file_get_contents($qr_url); + +if ($image_data === false) { + // Fallback + $qr_url = "https://api.qrserver.com/v1/create-qr-code/?size={$qr_size}x{$qr_size}&data=" . urlencode($qr_text); + $image_data = @file_get_contents($qr_url); +} + +if ($image_data !== false) { + file_put_contents($filepath, $image_data); +} + +// If download requested +if ($download) { + if (file_exists($filepath)) { + header('Content-Type: application/octet-stream'); + header('Content-Disposition: attachment; filename="QR_' . $student['student_id'] . '.png"'); + header('Content-Length: ' . filesize($filepath)); + readfile($filepath); + cleanupOldQRCodes($temp_dir); + exit(); + } +} + +// If print requested +if ($print || $auto_print) { + ?> + + + + QR - <?php echo $student['full_name']; ?> + + + + +
+
+

+

+
+ + QR Code + +
+
+
+ +
+

+

Year |

+
+
+ + + + + + + + + + QR - <?php echo htmlspecialchars($student['full_name']); ?> + + + + + +
+
+

Student QR Code

+
+ +
+ +
+ + QR Code + +
+ + QR code generation failed +
+
+
+
+ + +
+ +
+ +
+ + + +
+
+ + +
+
+ + Photo + +
+ +
+ + +
+
+
+
+
+ +
+
+
Course
+
+
+ +
+
Department
+
+
+ +
+
Year
+
Year
+
+ +
+
School
+
+
+ +
+
Email
+
+ +
+
+ +
+
Contact
+
+ +
+
+ +
+
Status
+
+ + + Active + + + + Inactive + + +
+
+ +
+
Generated
+
+
+
+ +
+ + Last updated: +
+
+
+ +
+ + + + + + Quick Print + + + + Direct Download + + + +
+
+ + + + + + + += 3600)) { + @unlink($file); + } + } + } +} + +// Run cleanup +cleanupOldQRCodes($temp_dir); +?> \ No newline at end of file diff --git a/src-backup/qr/print.php b/src-backup/qr/print.php new file mode 100644 index 0000000..ff110e1 --- /dev/null +++ b/src-backup/qr/print.php @@ -0,0 +1,194 @@ + + + + + + + Print QR Code - <?php echo $student['full_name']; ?> + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src-backup/qr/simple_cleanup.php b/src-backup/qr/simple_cleanup.php new file mode 100644 index 0000000..097a830 --- /dev/null +++ b/src-backup/qr/simple_cleanup.php @@ -0,0 +1,22 @@ + 3600) { + if (unlink($file)) { + $deleted++; + } + } + } + + echo "Deleted $deleted old QR code files."; +} else { + echo "QR directory not found."; +} +?> \ No newline at end of file diff --git a/src-backup/qr/test_gd.php b/src-backup/qr/test_gd.php new file mode 100644 index 0000000..d2b25e4 --- /dev/null +++ b/src-backup/qr/test_gd.php @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/src-backup/reports/print_report.php b/src-backup/reports/print_report.php new file mode 100644 index 0000000..6942289 --- /dev/null +++ b/src-backup/reports/print_report.php @@ -0,0 +1,356 @@ +AddPage(); + // $pdf->writeHTML($html); + // $pdf->Output(); + exit(); +} +?> + + + + + + + Student Report + + + +
+ + + + +
+
Student Report
+
Generated on
+
+ + +
+
+
Total Students:
+
Page: 1 of 1
+
+
+
+ Filters Applied: + +
+
Generated By:
+
+
+ + + + + + + + + + + + + + + + + + + + 0, 2 => 0, 3 => 0, 4 => 0]; + + foreach ($students as $student): + if ($student['status'] == 1) $active_count++; + else $inactive_count++; + + $year_counts[$student['year_level']]++; + ?> + + + + + + + + + + + + + + +
#Student IDFull NameGenderYear LevelCourseEmailContactStatusDate Registered
Year + + Active + + Inactive + +
+ + +
+

Summary

+
+
+ Total Students: +
+
+ Active: +
+
+ Inactive: +
+ $count): ?> +
+ Year : +
+ +
+
+ +
+

No students found matching the selected criteria

+

Try adjusting your filters.

+
+ + + + +
+ + + + \ No newline at end of file diff --git a/src-backup/reports/students_report.php b/src-backup/reports/students_report.php new file mode 100644 index 0000000..886306e --- /dev/null +++ b/src-backup/reports/students_report.php @@ -0,0 +1,375 @@ += '" . escape($conn, $date_from) . "'"; + } + + if (!empty($date_to)) { + $sql .= " AND DATE(s.created_at) <= '" . escape($conn, $date_to) . "'"; + } + + $sql .= " ORDER BY s.created_at DESC"; + + $result = query($conn, $sql); + $students = []; + while ($row = mysqli_fetch_assoc($result)) { + $students[] = $row; + } + + // Generate PDF + if ($report_type === 'pdf') { + require_once '../vendor/autoload.php'; // If using TCPDF or Dompdf + + // For now, we'll create a simple HTML report that can be printed + // In production, you'd use a PDF library like TCPDF or Dompdf + $_SESSION['report_data'] = [ + 'students' => $students, + 'filters' => [ + 'status' => $status_filter, + 'year_level' => $year_level_filter, + 'course' => $course_filter, + 'date_from' => $date_from, + 'date_to' => $date_to + ] + ]; + + header('Location: print_report.php?type=pdf'); + exit(); + } + // Generate Excel + elseif ($report_type === 'excel') { + require_once '../includes/PHPExcel.php'; // Or use PhpSpreadsheet + + // Create Excel file + $filename = "students_report_" . date('Y-m-d_H-i-s') . ".xlsx"; + header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); + header('Content-Disposition: attachment; filename="' . $filename . '"'); + + // For now, create CSV as fallback + outputCSV($students); + exit(); + } + // Print view + elseif ($report_type === 'print') { + $_SESSION['report_data'] = [ + 'students' => $students, + 'filters' => [ + 'status' => $status_filter, + 'year_level' => $year_level_filter, + 'course' => $course_filter, + 'date_from' => $date_from, + 'date_to' => $date_to + ] + ]; + + header('Location: print_report.php'); + exit(); + } +} + +// Get courses for filter dropdown +$courses = []; +$result = query($conn, "SELECT id, code, name FROM courses WHERE status = 1 ORDER BY code"); +while ($row = mysqli_fetch_assoc($result)) { + $courses[] = $row; +} + +// Get departments +$departments = []; +$result = query($conn, "SELECT id, code, name FROM departments WHERE status = 1 ORDER BY code"); +while ($row = mysqli_fetch_assoc($result)) { + $departments[] = $row; +} + +function outputCSV($data) { + $output = fopen('php://output', 'w'); + + // Header row + fputcsv($output, [ + 'Student ID', 'Full Name', 'Gender', 'Year Level', 'Course', + 'Department', 'Email', 'Contact Number', 'Status', 'Date Created' + ]); + + // Data rows + foreach ($data as $student) { + fputcsv($output, [ + $student['student_id'], + $student['full_name'], + $student['gender'], + 'Year ' . $student['year_level'], + $student['course_code'] . ' - ' . $student['course_name'], + $student['department_name'], + $student['email'], + $student['contact_number'], + $student['status'] == 1 ? 'Active' : 'Inactive', + date('Y-m-d', strtotime($student['created_at'])) + ]); + } + + fclose($output); +} + +include '../includes/header.php'; +?> + + +
+
+

Student Reports

+

Generate and export student reports in various formats.

+
+ +
+ + + +
+ + +
+ + + +
+
+
+ Report Filters +
+
+
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+ +
Quick Print
+

Generate a printable student list

+
+ + + +
+
+
+
+ +
+
+
+ +
Export Excel
+

Download as Excel spreadsheet

+
+ + + +
+
+
+
+ +
+
+
+ +
PDF Report
+

Generate detailed PDF report

+
+ + + +
+
+
+
+
+ + +$(document).ready(function() { + // Set today as default date for "Date To" + const today = new Date().toISOString().split("T")[0]; + $("input[name=\'date_to\']").val(today); + + // Set 30 days ago as default for "Date From" + const thirtyDaysAgo = new Date(); + thirtyDaysAgo.setDate(thirtyDaysAgo.getDate() - 30); + $("input[name=\'date_from\']").val(thirtyDaysAgo.toISOString().split("T")[0]); + + // Form validation + $("form").submit(function() { + const dateFrom = $("input[name=\'date_from\']").val(); + const dateTo = $("input[name=\'date_to\']").val(); + + if (dateFrom && dateTo && new Date(dateFrom) > new Date(dateTo)) { + showNotification("Date From cannot be after Date To", "danger"); + return false; + } + + showLoader("Generating report..."); + return true; + }); +}); + +// Quick export functions +function exportActiveStudents() { + showConfirm("Export all active students to Excel?", function(confirmed) { + if (confirmed) { + const form = document.createElement("form"); + form.method = "POST"; + form.action = ""; + + const typeInput = document.createElement("input"); + typeInput.type = "hidden"; + typeInput.name = "report_type"; + typeInput.value = "excel"; + form.appendChild(typeInput); + + const statusInput = document.createElement("input"); + statusInput.type = "hidden"; + statusInput.name = "status_filter"; + statusInput.value = "1"; + form.appendChild(statusInput); + + document.body.appendChild(form); + form.submit(); + } + }); +} + +function printStudentCards() { + showConfirm("Generate printable student ID cards?", function(confirmed) { + if (confirmed) { + window.open("student_cards.php", "_blank"); + } + }); +} + +'; + +include '../includes/footer.php'; +?> \ No newline at end of file diff --git a/src-backup/save_draft.php b/src-backup/save_draft.php new file mode 100644 index 0000000..a08eeff --- /dev/null +++ b/src-backup/save_draft.php @@ -0,0 +1,18 @@ + true, + 'message' => 'Draft saved successfully', + 'timestamp' => date('h:i:s A') + ]); +} +?> \ No newline at end of file diff --git a/src-backup/setup.php b/src-backup/setup.php new file mode 100644 index 0000000..98aefb7 --- /dev/null +++ b/src-backup/setup.php @@ -0,0 +1,258 @@ + + + + + + Attendance System Setup Check + + + + +
+

🫠QR Attendance System Setup

+
+ Checking system requirements... +
"; + +echo "

📋 System Requirements Check

"; +echo "
"; + +// 1. Check PHP version +if (version_compare(PHP_VERSION, '7.4.0') >= 0) { + echo "
✓ PHP 7.4+ is installed (Current: " . PHP_VERSION . ")
"; +} else { + echo "
✗ PHP 7.4+ is required (Current: " . PHP_VERSION . ")
"; +} + +// 2. Check MySQLi extension +if (extension_loaded('mysqli')) { + echo "
✓ MySQLi extension is enabled
"; +} else { + echo "
✗ MySQLi extension is required
"; +} + +// 3. Check session support +if (function_exists('session_start')) { + echo "
✓ Session support is enabled
"; +} else { + echo "
✗ Session support is required
"; +} + +echo "
"; + +echo "

ðŸ—„ï¸ Database Connection Check

"; +echo "
"; + +// Database connection test +$host = 'localhost'; +$user = 'root'; +$pass = ''; +$dbname = 'attendance_system'; + +$conn = @mysqli_connect($host, $user, $pass); +if ($conn) { + echo "
✓ Connected to MySQL server
"; + + // Check if database exists + $db_selected = @mysqli_select_db($conn, $dbname); + if ($db_selected) { + echo "
✓ Database '$dbname' exists
"; + + // Check required tables + $required_tables = [ + 'users' => 'Users table', + 'students' => 'Students table', + 'activities' => 'Activities table', + 'attendance' => 'Attendance table', + 'courses' => 'Courses table', + 'departments' => 'Departments table', + 'genders' => 'Genders table', + 'schools' => 'Schools table' + ]; + + foreach ($required_tables as $table => $description) { + $result = @mysqli_query($conn, "SHOW TABLES LIKE '$table'"); + if ($result && mysqli_num_rows($result) > 0) { + echo "
✓ $description exists
"; + } else { + echo "
✗ $description is missing
"; + } + } + + // Check if there are users in the database + $result = @mysqli_query($conn, "SELECT COUNT(*) as count FROM users"); + if ($result) { + $row = mysqli_fetch_assoc($result); + if ($row['count'] > 0) { + echo "
✓ Users found in database
"; + + // Show sample users + $result = @mysqli_query($conn, "SELECT username, role, full_name FROM users LIMIT 3"); + if ($result && mysqli_num_rows($result) > 0) { + echo "
Sample users:
"; + while ($user = mysqli_fetch_assoc($result)) { + echo "• {$user['username']} ({$user['role']}) - {$user['full_name']}
"; + } + echo "
"; + } + } else { + echo "
âš  No users found in database
"; + } + } + + } else { + echo "
✗ Database '$dbname' does not exist
"; + echo "
"; + echo "Please import the SQL file first:
"; + echo "mysql -u root -p attendance_system < attendance_system.sql"; + echo "
"; + } + + mysqli_close($conn); +} else { + echo "
✗ Cannot connect to MySQL server
"; + echo "
"; + echo "MySQL Error: " . mysqli_connect_error() . "
"; + echo "Please check your database credentials in includes/config.php"; + echo "
"; +} + +echo "
"; + +echo "

📠Directory Structure Check

"; +echo "
"; + +// Check directory structure +$required_dirs = [ + 'includes' => 'Configuration files', + 'assets/css' => 'CSS stylesheets', + 'assets/js' => 'JavaScript files', + 'admin' => 'Admin pages', + 'teacher' => 'Teacher pages', + 'student' => 'Student pages', + 'auth' => 'Authentication pages', + 'api' => 'API endpoints', + 'qr/generated' => 'QR code storage' +]; + +foreach ($required_dirs as $dir => $description) { + if (is_dir($dir)) { + echo "
✓ Directory '$dir' exists
"; + + // Check if directory is writable (for qr/generated) + if (in_array($dir, ['qr/generated'])) { + if (is_writable($dir)) { + echo "
✓ Directory '$dir' is writable
"; + } else { + echo "
âš  Directory '$dir' is not writable
"; + } + } + } else { + echo "
✗ Directory '$dir' is missing
"; + } +} + +echo "
"; + +echo "

📄 Required Files Check

"; +echo "
"; + +// Check required files +$required_files = [ + 'includes/config.php' => 'Configuration file', + 'auth/login.php' => 'Login page', + 'admin/dashboard.php' => 'Admin dashboard', + 'admin/attendance.php' => 'QR scanner page', + 'api/scan_qr.php' => 'QR scanning API', + 'index.php' => 'Main entry point' +]; + +foreach ($required_files as $file => $description) { + if (file_exists($file)) { + $size = filesize($file); + echo "
✓ $description exists (" . round($size/1024, 2) . " KB)
"; + } else { + echo "
✗ $description is missing
"; + } +} + +echo "
"; + +echo "

🚀 Quick Actions

"; +echo "
"; +echo ""; + +echo ""; + +echo ""; +echo "
"; + +echo "
"; +echo "
Setup Instructions:
"; +echo "
    "; +echo "
  1. Import the SQL file to your database
  2. "; +echo "
  3. Update database credentials in includes/config.php
  4. "; +echo "
  5. Make sure qr/generated/ directory is writable
  6. "; +echo "
  7. Access the system via: http://localhost/attendance_system/
  8. "; +echo "
  9. Login with default credentials: johnlloyd12 / password
  10. "; +echo "
"; +echo "
"; + +echo "
"; +echo "
Security Notes:
"; +echo "
    "; +echo "
  • Change default passwords after first login
  • "; +echo "
  • Disable error display in production (set display_errors = Off in php.ini)
  • "; +echo "
  • Use HTTPS in production environment
  • "; +echo "
  • Regularly backup your database
  • "; +echo "
"; +echo "
"; + +echo "
"; +echo "QR Attendance System v1.0 | " . date('Y-m-d H:i:s') . ""; +echo "
"; + +echo "
+ + +"; +?> \ No newline at end of file diff --git a/src-backup/temp_qrcodes/qr_016-0128_1766215818.png b/src-backup/temp_qrcodes/qr_016-0128_1766215818.png new file mode 100644 index 0000000000000000000000000000000000000000..9a3ab762ab2dfca8b800effa36369980dffbafb9 GIT binary patch literal 969 zcmV;)12+7LP)F5Wu-;T-M_s8b?@}sv&=RS8uUnzjm ztl4>SpZ3v?VIR9=DC<6Xd6{)dfX-LkK0e^q&IVXi+y-B~tbS$!rVY2>zyRyp6X4PK zvSkAvn^`-zbH@+>?C`Q>0wNyD8_3xm;NWjqaoW#-xfM`mjUB@D*)H4B^MgS<{z$!> z0UdDlz;jx$xEzfD{_nUMfE9f1ID5(>#Dmcaz_cg_@Ni@k4Cq_OMSn9ujEd!ObsAt} z`nxjAH(qqa1FeA-GlDh)fb@UUrM)%sIL?t$4Ln{H7AXK!qZPmWMU6s9Qb@q#Q;p*k z0Lmoq6&f{BLlvk)c}cHo-Mk+#-8rpzBY;tvaKTVMr)WcR0IHP>fNBLTdL2ywXA(df zdh*VxQB;BLFh&PmJ^mG-9*C4LN`nc&BY99Vpt>mlb;+lqhHW!N;$T!S@mz8M)~OZ2 zU*0^2puvt5X0d2Wsk@_?nP^fDtEbQL_LC@3u&3Ws%8>ZxKrXsLDGcR5eSn zf$F~^fY|~tXcGYV^@_-q>PBHz=~8vg0bp|DlmzP8sx48LtsIJ1S&;%@m#muLp;5CH z*9iKtA_1U5d^6hNl!T-o91}vRTcoc)NoN#)1SS4QL{%Y z7AeY7Yn^zP6o`dbry3LyN7O3rGeGDIt=0yJe#0&uTjk^b!S5d)Z#_85?5 zMGAm2UoHSbHNeaGzy4a1$Um##Jxw2RIq2CP-&>* zSb=glb*sA8_*`eb+W|jndNCd%rG_KM&ZxWzfQkLc$?96SiyV;E)_XK582}vGaL)+Y4WiR68*B)%(@@YyMu>>>eDt`T)JA61V9YM_gR<)hhSstwvQXnaos=zSJ"; +echo "Current directory: " . __DIR__ . "

"; + +// Test direct connection +try { + $pdo_test = new PDO( + "mysql:host=localhost;dbname=attendance_system;charset=utf8mb4", + "root", + "", + [ + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC + ] + ); + + echo "✅ Direct database connection successful!
"; + + // Test query + $stmt = $pdo_test->query("SELECT COUNT(*) as count FROM users"); + $result = $stmt->fetch(); + echo "✅ Database query successful!
"; + echo "Total users: " . $result['count'] . "
"; + +} catch (PDOException $e) { + echo "⌠Database connection failed: " . $e->getMessage() . "
"; +} + +echo "
Now testing includes/database.php...
"; + +$path = __DIR__ . '/includes/database.php'; +echo "Looking for file at: " . $path . "
"; + +if (file_exists($path)) { + echo "✅ File exists!
"; + + // Include the file + require_once $path; + + if (isset($pdo)) { + echo "✅ \$pdo variable is set!
"; + + try { + $stmt = $pdo->query("SELECT 1"); + echo "✅ Database query through includes/database.php works!
"; + } catch (Exception $e) { + echo "⌠Query failed: " . $e->getMessage() . "
"; + } + } else { + echo "⌠\$pdo variable is NOT set!
"; + } +} else { + echo "⌠File does NOT exist!
"; +} +?> \ No newline at end of file diff --git a/src-backup/test_db.php b/src-backup/test_db.php new file mode 100644 index 0000000..6b1a837 --- /dev/null +++ b/src-backup/test_db.php @@ -0,0 +1,13 @@ +"; + +try { + // Test query + $stmt = $pdo->query("SELECT COUNT(*) as count FROM users"); + $result = $stmt->fetch(); + echo "Total users in database: " . $result['count']; +} catch (Exception $e) { + echo "Error: " . $e->getMessage(); +} +?> \ No newline at end of file diff --git a/src.zip b/src.zip new file mode 100644 index 0000000000000000000000000000000000000000..3d628678c2dfcf8b8b935a0b69f4c35674459b35 GIT binary patch literal 904543 zcmagFQLHj>G{?`QpKmg$EWK8es0Sy2Mas~_l@E@0|3M>G4_>hq0|2_);fdByj z0nqp-{2vI2{|kZ6!o|?o*wopX&c(y!zk|z{W3>dl|DTYqiiYxo3<%%7`i^ok%k_l! zMG{6POQiiSLm?pq8JDrFsc2hpIx)XHcES0IpB1mWUA^u-5N(N8Pj87%A@SO)j3N@{ z!z#h4kfzD>f(;_a<<;eif1%{|j)))d^13}5?}7{1doexp9FF39$fz&|A1l25RxJg~ zRzf%Gadq|eTuxI)f>Ao16vk0kT!QB{pd{hhW{{K1stL-u_WGyo;ZOO`RqkTwehF8w zxfxn$?c%K^7Ew}wX!~bel{I+tm{h>??E^UrNGJ#mWo))UJT-%Xodac}R7Ev<Qh%a3MQ4Jb% z-ePK>5@B!op$B`R*0V8Q$`;a47fzUd4i_AbLw5%YX-Dd#L5UQ;`%si=)ZY__DWQQ; zx;TV|L&f3J5UWJr#lP%MjB{Y9Ki({`jp-l-;EFsi^E4ENt%w!w_m&=xrg|{H?^6yg zo{xqe?>}D{&p7e9_;ccE9hnkW$WR9i6NL9!z{mr-=V!5aqMWrdd7j%>0g@I^ z`cQF61xsTDsZUpAtwpCXG9-*BKA0J6kf^$@Mg#-$Lx z623Px$3U?HR(h7{mu`?!_tUbrJ}#Wm^XY@Gf&2O+F!nJ$X4})WaF1m?EL8>-TF572 z-AtTfBfTi2H_wN@ir&XEqQxXXXwrq}U^R2&xTcGnoDA#WcpEme+S=)^e&9$+XXlr0 zWkDr6k{XoRSnahzCAoA$rN%S;DA24HSk-~Xq4mOy>WED`KSV0Ju{1}i$m0SR>(2zV zQo9I)sz7cC;fPp6l!PZmYYqV^vW4o}ut~P-p!{w-orWhg$#{*`N_2B93UvT9hX%$x zQp+~o665BiiIa^&GmN#Wm{R_z)DZ8j*?$sXOa+E&oVL*p^I^XMc>v0xzA9PR=n-LN zjUn}LBr%*F6bliKV&3yl zOy1ePxp+j~CX$Uz|E+>sLOt2FG0*~EH8qpnqd~y~t~0XHwTv1umCf$Xt&W^m5XWMK zJrknEo@_B$xuQ!q@5|0T=<04L25y?RQQU-xvSq~(pyv%%EDv8mOU8Wy_82{S}Uv>VJT4Ydi(70vU4W=U<|2PwE- z8}^Jmu3|`I#o=Fl2BK;?AQY9U`rVvuL>}UYk|J^W8|_6|>+7f$&7>LL!&O zV;37*+Fu~`f#=uF_76zDI(;3AHdJ~*Fa@8b{}YaWccUKS&@Py{I|D-3;s}YgO(;HncvRV|6&eln*yo>i&@Itf;GqUGx?iy0!PlmA8X6TfB5CXCW8BmB9p{ndwvZz| zlMRkQlJ16QbYp#K$>f*EyYo3WrOu`{khkCl{T=&f@1`80NuH7TudL>7jH>ts{zmid z$ORJ^pJCbHKHx93&@+IO(7}rr??;tnJvwPs8nC8#c`z~KO{@w4<8$C2O+;~O4jLVd z&tsAEXc(1#4Goy3+gYb~kTv#fm+RMIzHZ}o_f)~k`n}Lsx4to|gVJAQeP4;i-}&PL znQl>RkDhyphmIa-a8!0C(7ImQ*#2uxg<1gbh?D>hBBjqIMq3R=27*jb_YCFBH}9x| zOq?+#Fg^sq=HL&-=6usG!C_ccs%pn%Cn*vVWXtTJ3rPOIh{!YK4WOcOY6t#>wyv~Z zwrEB>d5mQQzNVXto`%VTPh%)R#x9?P>{}FEBf+fhj04cQvmx9kiI8naryFt72aP0K z91c>7tLi(zaZ{RmFfg067*ub-{stHX4lw%Ql-f*^vM)g44D6Fk2;2^|a}92O`6j+w zATm#zPs;y&?48ptpew~q3bk`@~+AcyR{zzh{xYxUcafKJ>+0@ z5w;1}x4p{Wz z?ZESL2oT*nXr+Cg6fTmr>MG-Lo5iwE4|I$&F%jNgVoU@)gU*+aK|RHzm@?Z}^h(>1 zsOD>>8-d&{w8nu*3G}{m!F2LaoEg`lcI|7FTrD>BEI(6Y?~JX zYy9N6pr#;LBowRHGDlM+Ys{aSe9pcBVi~nA3e6id3wue(@JHy0C3ZMz88l)6yvW;L z>n&GZ0bg^5p{F8$FgFs-->Xbz8n}4qt) zbX*%2=n$Fx!JhTuSt0ukKD{fq5jbc96=|{X(U=x=c z&T15dw8kVX?regUI+a=zg=!|#%2DhcNKY%^u`BCk{IVOYtm=%bIz#d8t1m=b$hE2r z9zXUUFD-t75*~ym(}YO*UvM2IWzF|Ta;;#NK6$OB&Jt2#aF)TwRz^x*PQ=K7oU;jW z#d4!0obtkH58u9q68QLdVbh0ji-0XPt5)e`-SXksD`@{(xtlsLap6xWyeWT$s-ZNR z>R?@0T|dd0jcVb_Sc?K5Rbg4FTQxjoUAX?5=@kJgusZQLQl%t4sICe13M6wW1J_cG zs76(SdRNtDn}VcvR(VCN*wvdo(9y2Pt1GEtBE9D(UtCfhlK5KN<{ePy%fxF<#1&u+ zH)fdph?Gz!Ja^qPk%f-^5G<6q0f)Jt7I3}rogkxiJ#Ud*n4lV)#&)@hp|T$_!F_8L zmb?lqe_MVGj;MZAuA=8+*Ad7B382*xe1ZR4iw|AaX10Qk`TZ!P|B54B>G_zw?- z`Tx_<&MvMdrgkp>HwkT=By8#auk-KsHIAk87Tb%r*#ka8ZCRq0Vq+4SE%KBexf+%` z4tYzC3zwW2a6)_pY~9^mL)O0(G(3Rh-Ms0P-0Pl+QNplye;0lLxZQ1-oX4-;Fkcyu zQBi*zhUK%D?~S&dRa3h?=ue2e_k88^)lbjo>xb{dpy4X{AUR2_rih2kwgHzZ+df}G zZ!CQIwd3y(uf?KY|6w}mb?m~#-Or-{ zdMW}pln{6OU8F2BRBYLF`2Fbo%@r|_wjkC>b$gqpMA2}tAhSY6s;2 zPb3k%$fX8wI;ibXERgoh!`Gq1rq%nqSNEZ$rG?A=^D6ewJ!h~p=iOdTPFkHmU-}zu z{p7aVa3UY^h;5LaOgDf|ApF*-_5jy6bZ?Q<^tLieYq;;r#;WOGqOc;F8CPMS6P&Kj z`Clm@o70B17_nk>+~#(;ZW6{nbVtvSisEZZy~hR@8bZljMVSUYS*CF%y|`u;Zm3#Z@t0 zYL9wl2Oc7J>?FbvBo{kLq2{cj4njN!m@*cg6%`FYtVKJJ+U=Lr?{zJtf4)G( zE6TIoB&uy+T;!^aX@;7mO-mt{eq<~$$N`OqnmSn8>Glo{T;A=$iXnI$#1!U4WwKKa zNz!2{JVP*TP){o!lH4GckjL8wr>^@j86vjQ5J*`y7I&Jgt!>!UZxh(RqCveh6E13H8qe%*N42+&ygvf&)%KeSiDprST z<6T6WQ_Ax{ar5qdVoUDC#}Pc@Cj}QTvxm~PU&GXXS|YW=(M{}{qnpq*PeY+=lD>#= zO4}eMRo@`(h`vfBVqqqPt(Ykgq$v?NSDIee7DbtPPuo5;Gi4#knnDk zM*HFRdKB+U`rWv|aQ4(We$xS0bcFSoaf9~=?1eFo4$4H|P%q)1QLoSoWWI@jWKejG z_*^mqVBU%BFDPsdjYIzmC0L9Rau8yFi`_n8XG!`y zZ=*MrbV9fi<6mU-jh*@aIX~gUVhSE#LX;tqDVPQF+>#3W)poC>oXc%=&UB(6i#Mq` zDRaDgw=q&aQ8&>K9arqi7F*>>;1Otx$BgY{Lro|tFw5CR5IF?la-wIb0mxhv`m|Ud zmC_k0ZERi~#3Pp%O(ISxMGL)KcvXkTQo;}m!I+b_=xdFQiraykq&5(OT{ z-~;Db#_6c65Q@8zv^yN8ewFw|9E;4?!Gs6|!8S(IVE{v3;d7CNvyPCJn!V;}{5S@q z9A;Z4v)$U1vhR*Z*e`5cHd|qv%ZlY3kz@uD$b2_5FKc|j7_xEmh^wU8U;DJ|-ddUS z`INmE)q1|j=nTj$$5#!Jt$#=X#Ew6@9ah*dbr}olZBU=gftUp#Jy1Rd7;A%)*3gu< zWA{p_aP*M1_fj6$nPU3b7`}F3IGX>q`HcX9^p%atJ?<203s!jTx2N{L3qE@3wLniT zmXte9OpR{>q^WX{C79WsKV>#8AZd%GOIxIj67xLhvO%(-dcoPkXUHl%TtaG=)_I4&%D~}RB)x+Iw}YTe;EZG5Y)+DD^A&0VMI3KI^{^Or zxaC6>u9yZ|F16Btn!C)pQ}OPsdKv@_=q|916#BFo4z|d@W-o%cWy!FLf$E zs>~eI4xTBGR(hK;&X(u*cOz=%cv@4-+gPXCm;Y zP%J7aQ~KK`RAU(@Ww>dEoMJ;f8UVC@eisHOGXBHn$|Bl)%TeOHIu@aOnj$9Ww(au` zE{9i$c8TzHh(!@Cygf$g6ytj!8Uuu!4p>;4C_3e0B&VF(rD6nUo)rxiW;N@j^Jt&g z`Eh?$9_;?CWa`WE048QEYjlxft|Du&on;0;FodJ);$8{E=x3Im>LSceBqe zR?$)tdE{+%=&TgQ^n*rp0hG#h) zr5xsD)5@C%E~ikqRPvN7m=`U_-J0u(KND7ha6^l4+lywkeeH|@v{tQku|Yo0luIt+ zTNf_@|3MtSpGIEfL(67~Uab<-v=T0~7MXq=CluV;SqE}amvitZ+j+M}Q=hT&G&|I) zS!7}icGzTf7@Tm)R}UX|@|zu@iq(iFY4mb*>pa0T;I?4-bmymkxemvlj8@I%_T2{G zRJNB@vm#JV_GaatAavW7cKy5_G!FX#GwRTE(ykgb%ff3laA)wBD))DO!=b;!gQl`S zxZ3W$p?z#qsV3X=l}$-t77GurAJv)%U7*sdQVr5-)oB(*pqIeyz?UCTMss9Kog0_=arPfmVD1Nf2e^ib{@4&k0blUwgy)1Y?8yh=G%Jcg%^+l?|>&u|t^g3j{ zGU-9tYL}Oc6hIO=0Ng&j?sRKZQ*NvYw^nFa$pLQ+6#~d9Q?86hvSy&mpD03Yj#5Fn z6b>0ZkR1*b5lhuq%;z{bd88S_l%53?zX4t zu1Zp_?6$OH(&lXav`~{?4PU03qIz|f_OPlXmh$kE?U)e>ow`Q9ckoBrwgrWMS3aaM$wQ*v}K4p*hl_2M6I8>BTS7%yO-jk_bMV8I!@0pURf) z`VK}SI1f_R%fjfSMG1GHvHS`w2=_W-87P@qyr3UQb&|)-4zaPQGC`?KhU-bBo&#$) zwE}YC_5&0mxH>CDewS88lSNY=Y}SBWOy}1qsx~(jQ{y)KkTw6p$uzPtYf7n1E;5kO zPA3&xDj86clD~L^nmdXDE?IZV-uh{&yxJv`K2k;K@{{XyiM)Y)oJuV=hYEZO8tcQ8 zR-j|`bPgv}7OhaIPV0~=@dMV-luRv8%y3Q#n+30V#IQ!$GM6}o`pj!0s4>g3d)QFL zJAZN#^~n@|ay-I`xeXmmq4_WzKx3t!62syGY;|dZ6Cr0WGAskC!8kYLhc1qE)U4pQ zeX{qwHAMIxo4bTeePBrRfMfvvhMKLbHz|-`*}^VVfKW)7`^OfL&J)~&ebddL#AvOK z9PYl2yn-I3FDLJ42#@oi#yLfdXxvA$l=#p+BYSW;sVw(o< zb8VW8;839zu-&Bg@Lm48DpkCX4M`=>I-Z1?1Z^2D1#xiBg(in2A&6lEBA-A(P9)`V zc&eaZJWOEUX!z>bW~2}#b!sbs(*D_gn=Kdb{dL+1ewGJ8L7&gWJPg<{1J!Gm*x~+y zOfT}qX!X8`9vi{@0J_Cr+u$(@!QJaM67I`jTyhT#s2n#xuO^S41vvqQoZXO5 zH|-oYE@WwHe62-H$Q7{3pnBVNo>BUPf|-J?vnK~mSk(d~;{FOTWgmmlf~lm*O-Puc zwaXM&frMhtqPk;yf=J{k3g-7?#0~uDdt)G@3~u+zgIeh$H{CQ7X%7M5H|2MdC z*spBy73)hGO|j#~R_Q9OoLXK9lNrciWR`RYpD=|WCc%s~N}r14Xn-Vqj^SSeqMT5Q zcgev~{r@+dtmY$a0#q;=2I%ir4yd+Xn#9g|F5sMMsK43v$G<^BxV?H^i z>nM$u9+1){WSlWsO-l6A(9%-cnE36c*D@&l<}LTpp}5j-6wk&6A(IqFA`Ly_TZRnL zenWD3O>yf4``>u5Ae92QGGRUoHDfVdG|g-E!Ggr-eEEL2%yCC}mAycwuBH;p4cIia z-R(krHIg(uV(#MSmyj#yv;^gFFu-W7j4VIHL(XC`2~C+WA|j=B7bu#TG47)s zZ;W;%eb4d7r@NK?AI$gEZVpaATe#oPx^VJvl2jEk4vU;CTwH`Ssb!Pjwxr;mCgCdK zKk{&J^5b*A1c{$8+Y&EwuZndk5hIc0fiF~s3(H!8XJAzzC547bjNnPtDH1XP!+C?o zevBrInELY^Xn#`v(0`ey-`()W3>0L9FQQPDCAoQ|%FVeaIBXrS4c`k4%T2X}<8=}G zlQbL+Rlt5oqDgr7AB8jo>`8kgEhy-}*WyCBO7rqT+0bR+Z^6X`48xRs$AkcT2fqQg zV?{uaYylIN+-Y}d{a)XDk$HA6Y}SN0b+PNsLBQgIGu4+M>;{O9Yu$s(t}>OnJ{3uj z5Z-6>7%EXt3Ibt)f-w#NHq`w@hl@I7ma)X1gO z9n3hlX2Y~!Q)qo=cF8omwR!ubWmA!fI9FJ#E>-eo4kDGdj47S&${s4n7)V*F&Mn{3 za6r56+z7%n-j%Fv{B>FsTx_*ExPq8_5qpV~b#%2jO7xJ?O{a?o`a37mDr9|mM83c5 zr)K^679O+RwwA9Xa3GI?A4~WfdWtk*SBxvREnatn#`z(vT5IT0LlNGNYi0 zo!1)EO|}iOz-TGE%r-XBe;T@?87fmom$A-(isq=I zQ+13Tn09?Pey^d{n^F!sxw3ZO^ zXf%iMFel4HAFwVxJc5@rQlOuXR8tW$2%^Rl?{)dPB zn!^zXZOnEt{L;pMUd(=5)VbsveZg7&b~A2Rq{1t6rRU|KzhnRypFZXe2&M6?=S5_% z)U{5t1$2bN;oZUQuG3iur~ z3wWm^0SQN@p{kUdy;AT{U^stXM`43;i>;;xi}8`0jrqt*wU=Rd_WDrZq^S1#m9?60 zZcjVj}Nwga_%n!_*M_A`wE2^hhDLL=28{ ze`oK_ydD}j=cfHYzF`7pk5~gm%m@T9?%9pgnlnbVq(4{KqiMxL5f`B`u&BfqZQy8DumZe}qSa$9<(i6rwXc)i#4CpmT zMJvu|lS)%P;-*5AoY=;!4EI5^>B3+^_a$5GP(Gu%yBTQ_u`41cBD^xOc|WC>*zrgJ zN)mJQTaO-ca7u9v(a)a7*M6xt3TM9(HnDVfW^5p3j6~7Ip4f)O{+yggO_pW-Phd7- z=(YTZ(5tb2=N*Rx4?Q=h2WJ0GsMo);=wZz!=X4ObLh-?U(_NvNIYy|A@o3rcx(~<; zD@@*wuP>nCekaJS5gnk|vOr-cPR8CG#E{RW!ECt5beTefsqJN9#Yj@e4OaK%0k9ke zI$7UNVlvl0&ele%IG-lMfVIV`+OePn9Amd*EEJ-!Wk6g#>nvw=K5~4BEFs=Hl-lJiC}{RLxp z52xqSYgDdc+`4}lf1j_OsrQ_A?JgJ$x&TTC2FZk01=PTp+N5_O@Ju@3ne)1N38`qG zaCq&prTzk8;>l~sWN1GVjY3Jes`s>LkxGj2UbU$`i>|1~T|kxV5WC7KI)ZftYU^Kr z*kC&5Pxd?nIb9V?Bv@7LEPxXpan~?@fkv|OEu^(o#u<4XDauZMia*ZA+c4sw)fBQ6 z3MYWrv8K0~Z6F%T>PGK7+IDz0=I92_q}Hvt=!@@Kmgrfc3>XFD^@1 zA+2!P%eePF^HQc^x`d`3)Gr{D*##g_sjbCC^~e-KG+CJH2OaK7qPG;rYroK>!Y8h* z>%m=WGhSiZ9WB7Jyo3jlct?wC zd9LWmO|>TqG%HBmXk4k8T_2?CZ>}6{I^*K5SL0T_#Nm(1C%i3yL|4BEj(B{j%<$t& zGTuK3x;uG$g3&{(bGZajkTm7wvA-?D?rgFgpWWg}4=WgRJ#2UtrwKwT(murc#P@wz zTRJ2zFGR$Ez!td#4#c4$t|5M^sQ?hGXlzx+M-pAfCCmHP-Zw}9SHBK-VwNqu~HUjVqs3tc3 zcM*Ezt0+2D93|_RIO_N7Q(w$EC|kgV@b3=!R?qzjk)GjkGx1J;nQow8ZxQ(^HNJ|9 ztHn~09uHW@&P`|@1u1V}7F*;*XD57$^QiAC3GnC0t7(rJ7nHXV*yBg3Pi_h-`@!B; z^COdf{&4*Ux|*zmXGB z;S>stG03v&$g^tOuO4_R>dnF*OA%fxb-j)1!FgaEchX42V}oB=M1wUQUm@*&jgW`- z`^LK>CDL05uwnCy;=cqHb6$6MTl#udG4ogC0y%W9J44nU4^dW4xgrNeb{qw_nmZ57DO^n)6^nP4B))%DJ&ei`fTQ&Q#=qF{ z3+zTO4BO?Lx)yT&T6Y@5o%SSS>Q8U}fq2sRf_@`$s`0M^UvDG%TfJizBFp4i?l~;X zs5&WgN=Zom`hxgBc;HXIqK@#QjyYE@vbU-%3bXs#`}$uYZHwB)kyD{sxb`Mq-Da`? zjuDdXb3V`a#FF^(>wAgPkEZ0{9GPVixaHds8ug}@2yV}7gk$fYll_Rt0||VOm6$Kk z-8BYHLQ3d;wFZBhneZ?T-SUu=Il5?4c@*}koJU>JcS<@_PjJ|gXA$^^>zXw8WV#rW z{D%e`$Qxv|vashmv9qdBgI)ZQA*WUPp!@LI{4=NGe8g8fFJF&8((v`U;zL;IRC3ZV^8?!_$~TB{F#ZNvxSkpp_9q~ z&7N5+vHl->cC6!Vzr}&{+b7TmTs4(*P1KmvdlNql*J$~|7S47)dQOWbXfTgt>qsnJ ziRb9k^|@momPo2q`s{FZgJzu{O9~r4-N}MjY$bHH16# zM+VIWW)1UE61yBrd@hgIfAu_`IU4gdBu)~AA@43={l;WaW)N2h7ujCHc{1m8E}-~5 z2pkYP%X?_x-N3=o)pIMNB7EC&yJg(I5Am7!p>U130KWkz@^+KPa}!~QMeAtobPmFY zMojjE9UEUKIBeS$4iY9rtY8JOcN@{z0(YeODj{69`wbVo1^r>(tXRBR*+g=8sUNFj znZ0Es{dYzPDWsnbq61L?x*H;Y1v9a|G_mOndhC%&m_E{%OA zjaCR432O1Su8t3ADLwb=Y3TjAonI!KMGk6JCGAr*fb-h zi1Bek32kBm4?XnfUKD8 z7X7Q_Jf3(fugh8TzUaZ7u-#3t;g$z>N@BS`-I>HRX&q7K_V3)vh$&hSU`J<2E>kao z*nAj2Qp1tpa>V%(oG5TSiLImS_s>_R&nq*6X)3|(9Jo2;KzMWdO0eF-4wERIT)IO}3r5}Cr-Zw=(Ap${17py+c6|DtDO%LL^I zRUIvG=-yRp5}%UiCCFGEUWVVmrVYn2u6S(EXf{G`m}g6n-pXfxBet`^1Vq-G*9pd2 zR0w7o_1yTS_>g#V@^5qoi9A85EKQaWeza$vlYH|?nMJ-E59kK&jO|7yv4SFbANB_p z&0a;6uv+2;gyKgZzLFmu;(CXM4#&SsX4{NAn%H<83#D34%d@Txzs#e{Z)(dJ;*R`G4WSqJEqmHpd9I)q~RLJ6y*?TOdG z!Pjir;FPzH#&WD{;&hxtDdZ!7>cj#oQ>-|CwZzlO(R%R%hd#hyF%Z)x7!;tvwfsF3 z$h#ac?JrR=g>^2ON6FEKTdjoyCJ0;17{dis%kVko2%*+t82F*Erdm~wa z<@C$feX1GPnlkuKT6>B$VZY4nnsUjOk?(#RgdaA|mxvF%mIFMW<6X9Xd7_32a_=fX z-@Tf4Y|FB=Eg(NHHC63a2Bfe{Gk2;I<;C0p)_0}zgP_{U+3!c>W_)*>MI z9dLa`W+HLWq0!%^M?l?2Z`$xsIKoJXP*^YMfP^)j`A7x85YWs(oIwrYO_{fEfQR$h zYO8&8A&5gG?o#_ye5T9es?O|rMG_5*t15W58?rWt;SG66g=#bQ4+^y$zJrH`++w|V zf?9f^p;a{d{?#>%qf+8i$_$%37D(3)5UPqwY2_J2Ut)+%`jFZcDwXkSzAUa_G?iym z1+Fe!I7-S}t({F$H1E=S$UoN(`mU`P&fh6Dv=XMayp}) zBtbZ(!{BUw#D`=VrJ2?h-PqDtgtC+smQF~giwX3a6=f8+JAi6Y4cDmmV|Qjurtn> zQGvb9PT=YFQDvfO7`UDFMEs$Y+T+^8d92oGx22W!AuG~E@T6#{j36)aSu?v+=HjpQ_vnJywCbhZbO*TO%VvbNjpJo}($X{7-16e4%mds- zNoqh}^oB>48iYY);2o?ARGxu}LYf_sn(HDJGM}FtHtfp8>tfHXPSj{uEVq-B5SCtb zI~Ud#G8hJwHNdTyRhX6x2g~5<;OS*^wH)TOhlR$B2y6>-fItcs-f}2I0V|xfOZQu~ z1(nz?ws_W^6l&PmVIr!^4oF}g;?c)v=CzUPdc0<9VK|7WS0SEB{J|wv(4W>5B!nd7 z6Mk9bIR6OtdU0Z?^bS;7g54hxdkukiBA(t|WixE^C0rT*H%0mN z2O|wEzFKzcwaSi?q-m^_K%SBm71qw-v=gXi%zFn$nC9^;epZbLrN>UdMDl%TJ}z^Az!P^%=#OW%&wWLXoDL zzx>E%_CwwH_=m(B>h-cH8rCamWA3P3Tc!}VleN0A@oqKmtzolN2$~}UTSgqM4%!Vw z<(c5hs;54n*_i8nFB@8cgZyGxapqzjLddntAw6w&v8j&40=K(#6xJac1K+ zo?8Rsm<1}xI!Pr-^C?iPTdx09Evl7HeL{HL$nX>FnWq@KdNyJRYO^+{!|9G9r@ZTK zjA2nAmUbc5Qsg!Mnhe7XcdMYkQ3EzF3Q9YmStfxk?CWAu?fs|A&3s%L9zdC9IYYXQU zc5%U25v@z_JbQNt+M`a&!NZV;chK)_r~|vd%5cGlDcHvdmKkrkew#6y>-%cH(k>Ft zxa&S7M*QmaRK)5-e@lJ8NVK)`-76O_Ju&Ra`b1QJUDL8k&0(eT*2SPE8-ci5`+P~r*N^@(9*p*Q zOi5H;k0`r->ovIiH6-LiYA0TXb%LdXEmFGH?ch;^6X{_Nv0qZ&ia_W{gFoHN(3Gf9 z*sW{bn8G`lUFdZ0|16f4Tb;HpRI+4)-o3xBHr)C(G``U4v(bI2%B)! zXLJmpMot3Hl|7AOgi^xL>lSH#op?P$-zHR_A(LWn+pRPJ(8%x8(@T&3leqGx4O(QB zOnlNd3aNg%?pm(mgVjm!Bl?pp*Q*z-^{?J}MKO8W-C^2aJ}$317^(`_@WsddV5+WK zgGj7^jJC>ERfj<*(g%>WZ;n?Zo_?noPGt`$fl_kuEeR3xUxU+|MjZz9^Lc865g*wX z@XLSF4`;nLz2r)WOtVY3&nR(6@dUq}Z%<0hzNkw;BciG>REtuI2&$(5fSVI8a4~Qwa z6&}!bqa-e_c;N-V`vYRg{R~P0;|{0^wyZO25oHC9YuKtmW;~s7IKhIzXRgMeGdKUL z&9=2|-dal7I~MaZhdcvNBMbllvE+ZX zMX|;a|ER49{%MO$|6?c3(8W~$|1ns5q5Plq)r_X?zXofOer_;-!&%3e6S+!J^lQKO z&P<&eYVT#N%2F5o#UX^NiIn5OL%3CvWATsKChahL6`AO z9o@VVm*hdGED09lg{ro$8(5A+MNH{Y&a-JdDOS8(y_~!jF9)*H!}@@;gb6L-WPs44 zL1P0-1QsRw2owhwmyl5`^B5^Btn$ELI)KUg&nH_gW6hminFW4#|C0;<5 zXmx<2xqQ%yp(JEP^8jj2BgK$WQSu5=-}qzx^|#rH^Z#MUl?l!pU21b*+l0Z*eRWT= zM8$o|D;FvZJq^TrUvH$3VHs5#lGA1gl5P(|pIyjCqEyOu5lfPx-Lk9ot;1vqGNI&m zMBAgrQ@~7=;ZAFES>O|YDMhd6J%`e21Clz{q{Gt?AqLO*j-2%$Cz1t02e7VtJV9Rb zdB6Mlcy_rGA(0tfa_ar8-p13dhDQ&5*WHxO@qRFe^=K<1@% z?vc6_bL4VN+v{>qL)z@aU~Gw!PawG|HUQd;VXfQVpU#gX%x!&nZm`C>K#qkLrNx?~ z8X~>C8wpyT&NViq@rbxdwDd%b<5Oc#2^BE`ywV~ZM8qs-eUo>%l`rykf~Lt9nzePF z6UPflAgkNjDG=-633k(mtz@6jddIXHffR za(P9??z}t7;#p^`reo66G)1=}O%&tct$WYM^W<7pp~~~P`XfjjwO5e{J(vkm+qF+U zRDs_IY?8EQ$wz$#@3dpw*39^OqZ|hU&IR{QMOtgp<I5#HE^=59a4SlAq_ zHbJMv6PZPm3zHwaA9LvK-rrYue$``#rZ8Of4mj1CRkfN;-JGXF&J@r(TI*pn6;QYQ zL>g^0c0lepCowG&K{`CsE}RRC2mIYZ+z#ae2WZ;Gv%1{@T$z+x=gL720;MR2<7uz} z>;Z8F8|L<146P;|V-75%bv6Yd9VW{HITle$>TAk0o)A z>K3{DMHdN5SNNRT#eB*v34Rg4ua#I^9*Rz zf2!TFN=;O4b1O9Kc7~`iV091IZb#CdN0{1D3*{%}e2VVb1h?E2C; zr@T|nv-A)moVoBlU=5$QGnrF>eqKpM$B7c@d-gxbR?Vpu!I)2wtLfwT%A7$VS^J;X z5q?DLoz(|BD6G|<#=|OZUcCSmt$DF-Tq)Y;(0}0LdEVEZqB}jUok+(1u#qX2n5CuL zW42P70srAXyHQ6m{IZT6wU{Q7?1^VPzPlIAkouBmT(|q1!_3deTEJCMocu z4pU6(>3RE{Ye(P zhDj99+MNsx#CNV|kG!(2YLR%FCJ)Du&AxG9>0V?lcd2Z_k#U--Is@n?qb~b~qk2*Pl2>A?Z zaK~@`Fg0d)v?ZzdeofZ&>7LbASY7CI1>j;<@>fp&MeD@ghbToUVitSa{^a^eHb2XY ztn)S-65EI&RWI4pOi#9LFdV_iVzt6nlJDa#@J`f$nmiF1&ph{5f7AKxb-%&kqku=C zGmR(D)$fi^R?)7a6x;wWoN+mcS418x~=!aU<`ZX{clJF%}!}ymF+Jvlb)Y3Q|+|x%gY{% zuP|RNR2!eQ%JrK5z(`+}-`}k+6CY4hO8sb|@9Fhk>N+8AQ;0uz8gt~Fq_Va-Q!w7* zXMw%t7#{R-(g`t1@uNY9lGb~%Gm+eNI+|TW*KS>%^bVz0%>d>7rpF@ z&n=$A;lki-Eow2F%6Y;C|IWEp-N|cHM}R%@GY)zb55x&*@JB^wk(=T`krf8 z)eqQVlGj?{Q4I1=8G-!|8DVN->GJ>FZfC9e&xCbH z%l6+1>kl5mZy;h&OHcWMnYTAS7PnyAy&Z6|EWMn&<2V=??E+(6G^)Q2F_+}ksr zf-78WTWj0D)^ogOgW^KwByt;)?_xwIo>`$G;~-;&ZSwbn#XJj0CkHw;qPk&ufE9Q?|< zL)dU5?~kFQvK(xR(JNLpSeEn=CMIYL+rGeQxtAH) zQDP2b=`*V&v^8ohU}UoB%rT|DtH{Pt5*$3gQVzk06)!JdM?dy{czoZ~R)Qkw@5RiG zj}RJR!ZG|KtC=Pan<`q$LPLxfL}bApNlrX7E5kgz{s>aODARw`-(T6{nJb*=)u#rBUk)73SNrb+dZZYulS6Ls?Sf zhiQ#b&Vj4CXyr6S@hBFhYwZjG*xz|xs5XJvikaL^S%Fu4pf06`sNO5MY-KT2t!)*Uy8 z=P7x}6O}bUV@ZX^V4~~PI!@Rtw!kJtRxy#xjOOHgpQPR zXr*FCgbK;#UVUTTEex-pX$@hD)ku}ajV>TI=Ol>cNj8y^2*Dy1nX#NP(Ucf%|^&eP11&`0a!fPghm)Hn<>s@4sTJ%;>r2xptfw(B+}x!{y1MBG(2q z<|daB>!!x3Y9~8A;6iN!UZ)%sDMRj!*(SFu=D-!oA+$kR3n7)G+a!*)s{wnV+Dk8a zwiCXr>~V5~I1ibPT4+1WdgOyU+GVI}Fzf*vBQvqb-SI%$rOQ!xPIx=#clnaVLj5pA z#YhJ;`_+KB^QM{oX*o)O4FyDyF^J{99^u?hLQT5zhpsRDH2kG}0`*$#HHt{JC9PR8 zi>$IKZhT!d4z3ycv5HwXj0H+~{T%z0`nAqxqz-MLY%J( zjGO*pUsY}Uu)esCRan?uw^fbW^PsFeh>uHjU@-nV>HSo}-jx2v*8(r(CmaMJhUZnt zAH8AzfbU`cu$c=#28FSd&*V6bf%1XaALmQALG%cG4uBY4`3rxmU>TVNC;f^!^BVi- z9h&58kh?}@EBMD}uS_4yX^;=vKT(*#I~?CcL|c^-IYoSPx1gV8_+{Ghl1hO|e$(ch zGkAshNLEy4e|{cA183=Jj=KhIGyuIMN2XJraK-LBVwRxaz+$~%9)41uLtm5z)yvEwTkPbQ%gvj9Qqgv*q9lE<&&Xhqr&8<_(7`e(!MsT( z$7lyaPN2!tNn6Gs`Bwmrg1fvE;Z8{`Fd+ELkoX*2F^N&04*G|Mnb;B*k!aL7vu-?E zm{0l0f`&>@$ZzbS?Vt)!)-W@Fc|oav?Yf%aj*9QSxDX)Rr_U}god(XsWZqG9`0vO%o3UIQ=${@X+X<;TW$3TEfoubcE-yN4S3cr$%@)1*W!G@E)Xn9paUKBZScX~WXJi7LLjlmD2R$nfmuOtX)tB3lrL~2j|fH4Z!e7JEzd-VuzmgLTjM8i6Id*Wf>}&mPPsItfN_(w34wChMk+g^q8VVm z%;$Sx^{)yacLBk#g1*nAcv+1RphZk^R!jkGY~eJoBRj3N|9Ui%W!hU8M?1fhZ~(l4=OBCT*nbEDU>u<`*ZT(ao4D~G;bHte)(OP?=@R^L3TqrKn5kiZ|h&C0=WxUfBTQXfGs`m}-lyT1u5lzH!&E78%=7`)KQa8wz3sH@1|z zk+&ocsUva+*+uh*3i1No3-*XECr0-sf$G}+c|31dqL3XA zzMD4}hhl89$@3Y`#x>TR)zBDU6%&f!AXFwRj~dVmb?yDT?SJY_=dKsZUlzkl%CNf< zjIR~is!>4*Yc9IS(vQ(_soiAMV|u(Ot+w?YTDrHk+9}bCcm^sKRNA^vuBjF|7&OX! z4mjv2Ojg>GnV}SDGWzS;lb<)mxH;DHJc}8q1e~d)OIb zllF^!HD?PYlcATRpq9x90QW^rbvoPIm4t|eDW9$|EivNk_776bgGOnty~fS$ z^{a(%mP5j5p7IczOC`*a zzn3(LOj5&0m4b{+xST4L5%*`~{_Jt9x2m>K-O21iZtEB&LAOslKo)CXe(bo96098= zRM=YTKpJ^Zrx3D@+lW0@cy@~6@w)fQ(gAz9?xsZY#A5eZ(Tz@U@4bOS)_HDMMsLo2 zVl9`L>(+KhXJ__dn#@ z(jIg2Z@~F|&edAdVadgxx921cOP?c-%Il}Rxa4I85|TryL@3DjlbeS>E zPcv?V4VI@nFkohD`{Z0&-Jz+(_Z|dxqNbSg5EByV5hE-_bR;_X+aNR<4VV#e(|d%e zguSuDVt)sRr?=Z`+5#|IJHK6`|8I6j^h9wm@X#_QZD5I{h^nQw%JMGJuh(0^0J0K& z!G+l;%RTR0l1F+#O%Eo#w?O)+kjw@|NNIbF{o%B^%?g+~PKcX;)^~uT)1Y7%qx}U~ z{zwcnz0q&U@s>0u6bEpLOc1OFKt@+4|1*947R^8#ZlK6pEBdCs`=oI}H)EmZX>8-1 z+qMV(UAN_rqRJ2QiO8x5P`tP3C;-}gk%c_emdRNH&s=F!qHk1#Df;*F&$M)sYyURc zk=>On#XS>K8RLXaK>hZ}?S~`*-{&OF>^Xq`eRG&vK4}YyzE@C=h(NjC6!}CV3G%T? z43XfJBqepn8j_SYuDc%c!Q#^ ziqaLmYLNVb7nvIY_6>t9B5W6D;6IW*v?yZPkwF4)g9)R9006y{WdsefTQ#x!ox7b4 z=d{n}IZ`OF4T(!OXqYq*3ydegng+tt{-JTyJ^bI2#AD5q1hRHax-F&`eO5JXXratS zf8fFO(n$T{%BntOEK(GqdmVVEL(D^!lk#y8YZ^R|dAa?B3b+hG+?$inxw2a8dJ&V&U7Mx-maT_1p1+!#= zkIB~H`;p^D)_q^UJO1YM zyrni2gyQUlz<|Lj6ds%PIidDxBz6fk66P)5q&LY*Ka`Oc&g6RggvstwW{B2zQgugl zMeiI59ZNUaxUGFR*skmweG6HQCD~Z}cHyU?x}ta26IK8@Aq>h&uwly)ECEz21@mQ` zywiU_R=;@up1poYPY-7QoLsh#Tcl$U_Ii6eZi=~A4kLd#tmerMHaG=`RFIg9Jkf+i zb{`Xg+#u>;7BZ;qC$+rbyK)_O{2qSGH+{XmpExgF;P^#6GZ+u(9`}XBESV57xJgF4 zNY2SJ1^{e}iv>Z0%eJ?{&e2+uJjP!M+mK_Ft&5MjkfA;sR%dBO^9X5}OS z5APCJ{woTc^}dTDnrVbns{*b^Hg{@ki#ZrKc<`VSyS6FvNFjzWORNy7isILja8r>E zN8}|-jGm@wReVwy4_!^sl2}tP9%=!+G2yv#Bt!#cTS6%98Sza8`YmB06laJ!H}g%CD=^4TF$u(IfK*k}P-g;Xyx0}XU1xe0a5VisB8lF*b+ zvsVliQsM5vMv{1pQLD2+j}aE26Pfh^W-?-dV&eHk(GPd5&Z4$F)h0W=#YStiz4TqZ5wU{YZG%Q@w&_i)r<`mBmRj>$Yudldq+v|&guLT zN`KW-ZPUt?+Pj3if&6`-xi?UaFq(1aVFV99x7dXE*p-4p4nOi)c)W{O!rn$VgB^7%zHW;Bq~{Uaq}BSWCT`W<=2kqFkR@7++bz%uR0)HyCLd&xVfZucj7lwz0fVur|Tc>I%t?i;-YGZ2i z``?(@a$)x?UgN?6h|xlI|1rIt)NfPJK~oK48}M?{j$PL4mMGgx#125BKL95j?tO+l zBY_5SaI3KqZaJ!r)1q_a#&0H=KNj3v-g(Aa5Vj%*(Sfo1-i!^H&h%kyM%SYQrEgvT z`YAak0As8dWI0-lH%BqNT=XF_#0zA-)WPx}38twl%UV^}!SCPmq5O4Pdy-iO+i*T0YgTbL%_%&G;_2t(o)bH{F@@JG~uFn-BeRvPYD>o$ZjQ zua`R|X*GW|Srzd$F1=+WMoQvt2v(?878Cjjw zl#XD5(t_xTc?j2Ib_HCx-75OGzO7KZ^&x7~w;V4oBS68!IJD{DYOZ;|JA&Z}QH|}q z(*9XOF-bsn7+y(`_rX0+4I2*ut|gWVn2=c|Pns3c;**#P7&kgHw-O-9l5KQcQr<{h z8~-pR|MpGjAmZVt3!_YTm&kU3ZLXd!ykOgb9*~I(aK@Z5^h}gwDpkd-(!Q8THFR0C zwJ}j@89C`8mYm*d(bWVpNy6nKx9LL_BwEbc5voR4&s&*Gk|J(GiYj@#3N0=Y0zp08 zCd^qYMjh{457b5C2kzjuh=7b5Wx0th!mxZOteFIXD2Uik@|$6r7k9%M3DmoVrR*tS zAshJNxMP$j*Bnisv`;oX2A7po;%@CU;@?<&94L!;EOFIXJ@G9I2!lEQ&ZUg;MRRSI zXNI2&B3k#4!$oF(DpysY-=ti|^;!o_3gk{;FF`~caV6vnAzYXcMLN-)0zvIZs0N0* z1SrRcQ2xUWy)-yvco~dOYL|B!{Wq^X7IGtfA#KLPeXeg}J}W>|YIWfP4YPHYmkTNG zu%+L6NU5NEz?0cti_NIRrR0xWsm_zeK)s zy?0-G3(r=Gso00BEW*EP_7?v3DU|&27E`65QA{%kDT!@NFSWW(#|`}Q`;q?KNRn@G z)Al!jWk8S`WG|VFsSY8)5@2x^q73hHi%l}kB(Ysk6M=}K$;3-&)swjSrG6sYAU-^F z!QRLRV_Y~f)Of;y`_%~5iuSE}y*lh`nuxLKtL$%cu|ri8+jg zJTgJSXgAJnA?ebG!D`V0J?laHiPUP1qIBTlcI7^4V_qrc8`%&|oviv|_by|p zM&UF7L$pE2P5-h>T11POK1{Hs6k?>g>fvnq;A`t7x#Lr*PL8uIm6Gj# z$fO7!h1aVAF=HK82Wn*fmU{E(oiTgkgl7BM+2s`tnNZcrp8)@qmS>+mJ z!aOCqMST1H0elDa_xb()ut|mt)(Pg#@{SrJ*wm^~h-etPQ*Ugow=>@(TSMbU*WUzs zyiQ62Jl$J2_HVM)=V1C#rZrINj!3NO(yC&tmlM?F&Y8QM>LDyTW1EVTSu^-_pe|pj^0xYxid;AyyXttrF6m9}wBykP7Pq?x(}?3_(1E$0T=jv?jQ0<~#PZ2n zF)Xv^!&N2=vZ&&8m!>-UnRR3Qt9RD(@83Eqd*qLgH{y_7_Lxt@BMzl4y-+oAAA8DT zl>D&C+BpS9SDN;~f>&ooc>UXi!&_)k8O-xJC&WVUdr{I)W0sC&@}U|804^J$C~++? zsh*V>QlQQ=BKhfDMD=L}XKbBezq_IbGfWt0CuH(Jxn#zP%a~?$CVQNl=qJa`os#CM zQqrDG?NrHAGVz`lqkOSwlAeXkjSm$jhf<;Lsn{hu<-X$)Oca6dLF3gd^pAD5WxeRA zEXwmrYiZaedg(9T7Fw{);Z%^3rS8QgSqG|%ESD^&qc%iK^*6lp(8+!Ml1b|e&|@p9 zd!<==>-?`7+ok}}kt@gK>UR$<{Y$vu>erNy?=+>smE*!ZOI;rKM)|U1B+}o(YVF(B zXzVFemN+Ngi2N3omHp7jdBcN(=6(_B%ZLZL8BVi(>sf#a~S@ zaM-jf2THEUkSxq+A8CJ2?pLwAE-j8FuXco)(Y5EkG)nqx?jg_`W8BB~Kg&wqBFEjD zI+cOhAw6@9FN%4guLUEN&Z=1xtN*}Snw*RU{`oV5uF|+b=;wQIZktjzG-)2ePQ_r| zHIss`{DTWUJyWlxX3*(87@Q`+a$C#CMl2_WkB?&}btg+QirscIIIWIZ!X^6Ggx~EzuZnt@2d!54@I5W;q z|A7C;Rk-85_zZI{@~qk-q(II-JbK@Up>QO{7J;lo)pH4}+F3Vu)nB_U$Hm zG%%4KzONF$iD znLSrEX?pKGqc~1Xd71Ni?<9dl=8J>(mnu6=YSI-+?^i`6yqiFQsZ1QYE>VQWe6;FQ znbCPLW~a+k=G`6V=h^#Kkr~~Eb9vLxa=TC$J;y3EI44u)J6XhV<#uf~(^S#T4r{(h z(-v0{2F#aBkgiONJq~xxn?QrbYiFS}r{pzRjvB3jsF*8gOyPqwJVeVey;ZWc6MA+Y z(eKnin`S&*Gp?d!t+Mo|iecigsSSsqY9{k8sL`4MO!L?Y2Apv?*fn=14aAAPH9 z>7tFZ`ucpFp@av*-8em<3W>+w3X^4t$EZJ56^KO$@SjFmVy$2_!u*{kJg-|&|Mn;m z#`Hm$LHR5k1`+< zo2%sj25Sa&ddBYEPBXj`Pl|Cm)J2e+qR5Cc%_h?wAlXYs`#}x8B?Ud&-Jf6W{~`T| zp7NVKei}V*wu;B;_kC2F85?B%2>*xk!2+5qgM)SO9n(FNAi{Qr(drjk-)Ppc3 zu$u1%^c~iqPH`@GmQ>Zp=8~(+6#x0F>y2*Y);vJ2vZ|*~6xc4LE^>jU9>+A4(0p>2 zv+9|u7R*};{@LrpM)oU{`AAo(nB?&9`}?mZ9~^=UapKPI-%7%q-T%&NIyL>bBLMBc z90BI0F8Z#{rcVE-xRvMb|JVsjm36JR8Bl!TkNN+g1z$Ce++JTPAhpBROh+hxAOtC% zT#AvV>G;}gu6?~u;!DCBGpO-mxVX69be>J*ldZO4!LeA)mQJ)3PQ4ADI27ECI)!GU zzz|NGJ({KsVn}e{h3hor&MJm;vOXnR;cz1z(!qlF0Q|;S$Bw-=u}ChzA5Ld!#8Mq` zZi3u>K=lHXx=XM*pot1t=s5`jy|Lm1Xiu~u<+UP*22J98vo5AFlBWou2n)Jn@dHuf z3gkBoPV^S6*_0mgH`=*vGG2RfFCV~%vQJvcVj13EUY-WO!*DJCY;9l01VH%E$t)l* zbeONi7sK3+7Hx|<H`f zpFn=F7Gu0l)HoL7g62N43CJ#?p;>IK{c>sR=;)AFU)Z{(mPKDQc6_gev8~IYtx>}m zMwWhsDJa(VOQ#AKnq1HX88`g5^(@@O?+(q za2pZAqAW$_@uXh@Vz{yiUMn}5Yhb=o2ZrBzD&fT)lC!we9)oA!z{(!({pWIgsIVS( z0s;Uu{aeWRpDhF~fSCVso#Ox3<*+rhGc-5-e+(m*rq2JTTXOf8>;DbqUGrKyZ;K`E z>7M*Dh_w)Q5(;eUdDmB{QzrSmsM)-enBFSIMS}tg1F=CccxWtG|${13$tV?VKzmy4H|*~f4B zo;aRHp1twGkK_3zp2;6f%)>_vg`f!x_Z9D3$Ez-2CvM~M5j}9MwpgxS{h(-=-GKdN z3JA@RxQPcYKWbouY2l>lcRJ$v>lziY8?n7pt`M$kFS41XUTQbK569?YTUu7@3vB_K zf9t=0iP@eh)&{a8R&u{S&yR&~kI()6__%npdw99LeSIKIZU{1OPDejuX?);f6adPr{h#c=SKTNPf zaX|P0jo0_G|0`lM_?cwMJ7_M}0V}D1Vbh1TOq=eY}h$v5KA?>LQz8q;Et%i?> zdb0qca2K{P8cviZ`GdY*UM9+>EXf=&hhN|VYN|ykjUG-LY@LtcGEu?rWcIPq{PINl zJuCLh#rbh@a}d|@koIzb3EMD-`y08-7j8%J1(A}~$;a)LLl)pCe*5^iIEi9Ry|>b$ zxbnvDy!=32JCa2u(9I-1u?@HY4E21a`T~ZPlAYJv$pP%^jfuaOqzolj6rFn8vSKBI7b^vl{ zhFt4IW zBFy1L+<-){7Glm&homzVNxRJ2^CYh}ogyV$TT<7XOCO~6+7s5A#Vk<~c2v}WWT_!> zK^{A`4Qoj2G+;zpmq>Z|L7B-8d}t}1*fPPUSa8=y#(|&+7zkK!lHgZX zZ4ylNuL}ZtY+|?5(wEM9qbs<$m;pvef!PRv@`H|}v;E82UtuxjvZ|3iTEquS=v)J* zcMMKM9eMza_{j$Zk_sN}BvY9Fb7B0-fRD33%5ug3$0k6+daOu6YN#=F6^1e4Y!d8# zC>D3YcwXdQSil-c>f#aZJpj*5I5t4$=vFuhqk;_i%8UjHit-TPFPTqCDH9Ujv;byA z1!ar^xJ^KF3=F9MY*f0`wx%VvtTWFzN2YNDGt3gXPbx9x2O#tB)AC|9^F#d+`>jS0 zIT0kMA2{vIHZZI_%z7QwASKw8DCRD}sa{PM5oe?T9X*-iY}A(2;!*N&G4jI^Jw$|- zvxkcpLkPYRjNpqr{KC(%@W37tmY(UDxJMN+&jnY@C^k`cs` zF@|e5TFdTJ%?NYnW*x4TEeZ4;2!f?~;x1VqYB0p}$xw{Z$?TE%f^bFTseqb1f~O}7 z)w|$vI#bl4a2p(OKaS>z80qS82NFX@CzJx4kM%@7gO~fLg%YDH=;`;Ju$3_cXtipf zC}zqUyr^ik6vM*?GIlXi@q`U0?KUN)|JP#V91tWGY-iLl2*fqYrVeZKG;*w^nY%qY zV0->KmuI}(FYBk23+}G{_6@p`=K`%8i*~-(Q<9IAz;d~I7im+<8B1S*LALCC?t2&Z zvS*3*9iYO@{IkDBcMicwOZIZlHIM8)*F54~W}EiZfL(k}xl^X77D-upBVV}0!kU{r zZTMECxF(p_oZ|70k;FNA3%&45CTe+NBd=D8Nvu;>6iLfQkD}iM3R!t2w__z%)S2+gUVd zEG-O)lYUWV1n7BI-R6QeUQwB9u;$2aXP6_e`>b>o+|C1@AbGWniQ^GZ0KOO#OzT#s ztH&JSmh$OXruvQWfc_*gwL2jt_u7HYzxzBuvUVnpxy%O5h#xDUOD1~eQF9xpoxg>~ z4?HE0v`92E&|kwDHdw!Z4)IE~iK}+e_b7L`F11u=^`-d{+g`PA$t%;3zmLrk%j>rI zkAD;({M0XC>XSGiPc$y_Tp-XIByovWWBXOY9lkB^YG1)@g3qDGeNtN1@(N;l)Gi?E zWec{!RS=|g{y37~0XcxdiO>OdY{x|V)9&;$2&as-*ZmY>7J>JKGk#zhla-PmAN{I! z4GJ>oH92;x5}^`4reaqQowFBGHH5&C-MX zEF0Gd1DVr%aO9p+&uw7yd4<&DX{0IjKj=U*UXoizib@clGtlH}ZZ3~#C{f*X{+Qz_ zE67P=H4r$yS1`euF$*TE$;F$?gV}{KW8GTpm2R{Qy|G#w+OFHdurpvks+brrHPnL1 zw=gt=qqtA4o%mIdjW0!9a8>N zLeg#QS*pyvXv*k4(!c_a@v0_s4zxy0Jkrv)>q;pN?rT84s6Z`1qmDX6`O)J|jk)}| zMvNiQ(xkKSbGa`;QfMGY5-;5q5kCGZI=NzMqlUEbLUC`!^b$*0h;*58c2Od_DIUeT zPP!Mt$Lk7#l)cdFd|M}gZWW9sE%`^Po?;TAu-EjS=EI>Xn2!#KU&zKa$UH!ba%h@s z5S@>;xl+j~OdlJ#6{8p?6#<@jsZ6NHpaVpxU{AKV{2KAgLj4%Qe6Ek&{3geZBGnG% zT;aGEbFA(pDCMw1m{CTATo>x98I;*p3P1wc7!eqvMzLr^KW%lW%Z+&^%vda0C2;~y zpTB8U$LyWt#Y3|8O@&@~w>HPLRX#^vbCW;Exe0F_oXXCPEu8l$nj=ab^}FGj&-sbMS>!Z5CzG$2YH_NVvttdg=QS4*!PlF^U8U2(U~m`K)p>| zwG&lXIc;^jrAa8AHgRY-heS#aFk&l$a1$p9JsbGQ0Hss0_*ls+T>9?`gQapp16vGk z>!A(!kMya(mm=PeGpL{R72$g+dkCTv26#oM=_r0n7LO%)oZAUz98u-m2I;43ij*&0 zB&pYQocnOr8(q-g+LB(zs$+PR0%j;9`b;wk0+s&_Nv4nsM{%H?*OWnrY5ije|E!t2 zwyHilavI?J>?9f=t#1)DdmBz?qtSE;Z{*>~*eGeJFU2%o8qrlC((_nObMMDn*1Tq3 zR20a#m-aDE&e<7hT&WH@^4>}-nUAYpeXY85KABZ>4J{p{?GmcxDDj^8Iyb6GBCs4< z^O&c0_hJW;`2%Q#^@&^?f&r#G)HGW(4%f`&rJbf;&*tBO{@ zGL)fmlEe`)%GQ?C3CW??fUCj~I<#fCz0c!V$+5Lv8d}G!0T?>=>=1!w!WBJlmb;U| z1yV0PU9ZC0`L*Ck4~Ya_-Qf|ktquQM+>5=yMktb)>|pK^^%e`VVkD9F-}TD(6}KbR z?0nfq2sj+TIaSVvg1!^4_L&gU%T0}=5hU(DYhn4$!r}5V6rG)6C1(y2?Xg4bBC+9m z0(;KgF3C`#EuZxHs)smXW~Z*`ZYE$2_+7iVr6Ctu$pQw1O{1Y-ku{^vXPe+Od(~uS zFxp(zETp?&7Isgh7B+Q*8pkNSow2wVC1o&oql1@2soW0zs3yK|`dG|MGJ9@nnKn2d zydx|tjCylSbjoxR+9&OnwOY5Ey5e1yNE8QFl7oHfQ%!pg{aATXK5dz#9iH6U8JJyP zFl~f~Sh5CterMl|5Pizc@7dG3P$=Kk71wN9by@jxWR5N5rN1t5FXvYBH|Hse^C!zh zg?W6}1rA4T8!h6Sm>eKJNf#fj(-2Z1L8!!7 zlZf}??h<%3Gd<5h3^{y|eYYm}XM5b&gFG@UEx@`{Gs9wCw4ae??X270$1YtvNwh^0 z1DHmR{`Kb@fOZjh6XZ-K@YqH>z5fBf#LygFV1~G4)m-}AB`?D-%fS0zZyNurSJZ{! zR1xCnY#Gg6fF93?dkTJtif5Zp+oycX!_1e=q@SAED%daDUklQw38wG*m4^hnAcnY% ziBjX@t|`84a+=8e9ELyDOs0RmRLadD-uN#uZg=p^e^NGm5^K+MX3!%yz0;=0d(reM zWAn>Ak6W~6=7zGt&lB*N-Z??|>%})!Jc?QP_HG^5IekhFv1RvdR! z_kufSMe0PwTC?JW1VJjB_2%mq6#XSDpPAwB~h~Fx}M`=`+`Y_gqzNc zSwBGz^K2!ybiK83_=98zXCQMTzvD3Xs@n&e)bpTA=KR8yPkZ>1258NZe)PfC`)85C zT49Y`F zzd|CF_R5#2;?Wzw38!-ssS$kiGW=u?1V8#^&!Q9F2!E;arrki~#U;L?YgO_+==7Vi z#cB+^+ykh6=$^9ir=lLKuiW}=*h$H7g%`&91OYJumPL zp!z{!*9Zv@_QsAS$J|duqof^`Z>@{TBt9A^HEd{SF>;>P*fY1MedJ$I18iUJ1|%6k z7??Z57ghhPH=DG&{L=COBBD7*$<-6sy7m|3d1bq6yx0kBe44t8e>n6QVPnF~dQ=o? zVS|Ef3KiI+NRq#QB7FWDE~dsrUn;?n+OOz`#%=8Q;*{ZczcJmuGCyWA9R4nn$2;)i zn{YAT4+rTaw(Zt)Ydl`b(rq1s8bW_|LaF~WdEK}zNACkfj6d@;+yzU}QdO?sxn?7X zaW95}&Ik z%X7%SVq3(QT@9iVGS71*NSsef(}#YA5mY`ugM!s#KQMeYvO1B9zzb0vkl#~oPIR^f-m@LbMn(u-%RwrLIU)S}$hXH8wSeXaVyjmW08Yh#iU^9(|82v9`V?;1$zCE!x&kJCp0-$w? zafbgWyU$R_0+OdOk?d?fuPdLgA+}+7)dkMj+ySuj*YR@m(fA6SqpD5P8kZqcmA`tJ zGJOkfI%-={Kx!y*z0MGEytH##OgLan{wiwLen!3h>HJu!=ximwgv}<<5EDfEFDc1j`H=%oUw! zM&(plrlv($9)vYjfPukH#wGvw$C=-&yml~|+35?3DIUE$J?j^U^3yxiOpPD1)L4S? zK?3t2II!0vID?RM55WHf@~P+p%x-GKr9exi01fBKp{^)8>pmZ3&BCrQx=Y3yX(&Xt zcm6K?qdzLWb+`@^?l4mbe?6peMeP#ZLQowa>94o?nI^pBo2(s%sg34j*4bN5*NO(= zc&r$vK8eUFu_{YpsZx?TTy&3$m0nVwWKUx^_Nly()b%7?JLw~XH=YWXMLls!>F7h+ z;=T!P{M9wS*a4J>jLVb!r5=j2i>m|?52`VpN0v0_VJ(8M5F#s#z7&MA@;Mg+oCnu) z#YZK&Lu6?b>P1Q$de&4V)aaz2BHu`ng%~{y@wWo2)|;R#G?7;8xXUwUk3?4`?(@Wr za@qxHCrgV`NQR9HpNi&%B2|P$9UMPR0K1ZSrK}g5;uhW!+i=)e>y(BUcPgoRnuXaM zy}8$_^JMa@fWs*>%dl3%jjqhxu#KDlBF}5zI%tebZDi+g&ynG8tPIsp751&G`iQ4d z?WmtrxbVn8hoyP@vhtq@o7>IJ*@ch%xjRpvo0+*zo0@dNmxX3Sv(aURZ}#P^zBC^9 zWzlsTcQMO9epdOZyxi7yXzao1Pl^w9eXLa<*;Bgh8~poB%F|Z|BY#{#6%EH&SaXW> zR)C&01_vqH2DR_&QwpMnBL(sVzERURrf0gY`>1bJmGg@L4KhOC=2XO@YnIVgyFaW5 zLEH+W$y$}CY(m@gxsHc|@-(au;J)mMCKk>z4-`Yc$mA-x%!1xZSBigWh?NccV-jys z!LtGEIt@z;UxnT5{)7Z^uxxmd9vHZ#T?ZAqS^r%9DT#AFQ=g^0vWFfbFC-DiTEu9F z31t8Sp7?jpu9Dwzv+RgRbeaJ$9sjDG;}CcK1`DHu1$3Cgh>)fglnR^{H#)To5r2)n1IsLH~^DaF932_G!)E(j>;wtzk} z-6fTgq8mNKt-op=c5+%ak{(mIBomqysTQN4sd4m$B3pED*&Lt$KPrPj7Vj`dWPdSY ze%cTW9MJXk5C4C36yVhnTtZZS9+nF!B9OenM!G@tFAy1zB>P;@=6Kh2il#cK^Wh|H4GI z;QuS)Uw#?8Gjecr{P?)il}^F?FueRG`#j^%{6_U&xou|Adk{+Gfa>tsF0#_fzG|Q6 zH+GoqxV-P!@xqMVS&1LQ3l8g;c4>q4_)ger=%k-|z~;9-n#En!9x zxgrW33%5M1V9O8l``aD(3qM!)XTx0_P#$0o*H{#wgYnDH;k}OZCa}+ZUIQAlEfGRS zcrREf3SDLGH34uw!1f{)`#Aq)0}g23Gl_uHH&SL7etA38kD}}N@C#JBIG)EOnZnFo zPhW>g5L$^-?r>6}=eju&pD*t|+YQDSbvC?sJB9qZcRYInCU_nbrUh&(eW#l1GcEd? z!QW)!x^YlTyy}mviU7N<`^-1)cJMB(m7oJ~p#NiVY)}I*8J1jBRit5db zH$eCuPFR3V{mBJG-P2A=`*y#Z8E!n7W;*AtqvNSWVG929xMBv-jyX~n+4#~gvYoId zuO8Is+_y<0DIZ3e9TwN|W=@_x^Qg4G>>GB24lQo)qRDFyOk4s1xV$BvHJ;V$FG3LWMYAIZNNgb; zpkdD+zRb<;gFZ-q`ThKP`!;G0c?Bm*8(nk_L-0s1^dZkXT1`rtl#@@GLZ2ouFdxA0 zdCvR z>FF@}=V^PAX~W){*UJZ#AE{M{U9P)T4TPivUaCxb7r5vB#e|IEq=2(OFS{~vaLiH1z$S>F1|YTfgAN|S|LHouuT_xL zX0dw^h9OskEM`U1TW3~)eWU7{bCC7m%7fh@i5$bC01s8q^{Iqj?6WpaR=?~uU5F4u zP7uUGVl@?!*M^2LBsCQmwLfsfNVrlvVjcl4BVUNEF)m;zDFYK1q_C308tyAYA>UCH zXRb^!?8u3y@+j<(g90zx;oAlUE_4NP-axevR9)bL)pbk;U$cU&=e~cO!x2q(L?G31 z?c9N?%2|$|lhcFSh+aRd-x%FKtCyP;smR*0>+1c~M$brY83^k8igcO+ggYY04Qygo}xW1Z!OFm6> zj4;Du4?#eu!Sx0}M%3SG+Ex#hw0C!pbcF`Q44ujXkDCABLZO#J*rYE6U0Z9#(z(<_ zWf}AB^ZteFvcZ`zuFml)z{*FZ%9Mb_c4!dlAZ83;Qz29v)aFA@_r<7@jN_3t*S1m5 zNEu(q5AN;ty}QcGQ+Z<~J7NadP?t^q{H?RSo@^v}l{Oi5LkFlRPnE*3-V-5Nh zF^_&xJ9b}Z>ZBJ%*@q3aXuI z4lV=Cj^pgIG&tg%%;*7pHRZk;{R=ovFSE4qJj_A~m5*?PjBqnO*rn91PTOidb-8Qh zNgJ(R3Ua#%J{`uLdB>=gQoxrSByhG%$&vbuO9g-M(f%xO?{u!fR^fJ;KO`bBEThSQ(T8ejXI*ZS7vBM z0O@u*p8Z{{cnG$ISXg%Z!*F4?e7+}gryy6buY&CBwZIJCl&lIGqA;BWTfvXr~o7yk#MpBShd4?glo*%KZK$7d9+gC=wTK*&%zXl5o3w%52JdY5Sl@e zuXA|uiejlDdW>yI$*7V{%pOn=N~{ZG76~4Y46aqx-v$aZow7X?|FX5oPA+aRd#>oh z*k(e62W0Qwy5_WBKBtwN-TkBO&D{7RH=Cz-)H>a@76&$jU;|Jk@sd_m21~4u*fyZn zzKB({B^JvsK<)0gs%A#wr^Ic!rLh?X){7tXhY=((Xx;2?(P&>wtap6CYw$NQeW}l) zyD|~oI8-ne=ve+jr~LaWg|CK1t_iYXcmxpK+o3&9F*Y2Z+%kl)SB)GI8={nSNfnv0 z9lbYt;=*`0BadoRXOs-3WMX8$nCM6hf&_hJjId(3=wf9)fHe?ndJywOH3pUi(kd;L zR6t=d>%=gI6$qyiYl&cLzD^XimL~Q#0uZVTM%h!~hhyWHVfI;KTjLvlFqWQvPi0ak zgk0a@pfalvsM=&tDt?ttHy`Q^o<*y;)f--YS0(pXh#&8HJBa)K^1T8?=|LTx2MpOd zM%W_Bbq=a_S!B7-xtMLEOPzm8U2DG+iJGdk(FX9GF7+V@`gbW;MhS{p31_;0Ngk;I zNVd1a3dD54u&$=#&9A5GKz0}+u{d=f3hQDLQipnVxCgxQ`rzSueDCTZFhI~vm^yxs^sQK|SOIMIs~E0o$>z=wA-iL;WDM7Js5U>#I4+>mX1ye*60(o?6O zYbSOQ>E78UGYgm~T5UPtvRCz`k=QTW2WI^6FWI0|%>6y}LA>)0g)CQFBxGZ9?&$i1 z`ifNG@6~|kUdk2qb4m8)!D6o%6dr*n1Tq8L9z2&(1=wQaj-ncpYf;8u?V~Sv)&h6D z+{WxPtak3DUtTS#qwSm9#7WNVIUj^eStav0m0nfYMgaV@tS8~PUh=}7d*vOBeY&4| zT)-It6fa}B#wK&aAtc*r2aypuNf6&i_AZe0F=%=&xNZW%G}Iapjo#u)O`q8(iP(1- z#1)J$8K>ltecjiB>VNhpN$vQwgjX%d@I%y#3FNU4ufo2KlWb> z<^Fc}L#mj~xpLio^*z@1*@G0%xp&Qw?6F_nPLe#6w`SMN@ZsD)WjNPi0{dgReI?B% z&S2;PM7)i|MYW)43tl~_@JM5HS9PHMkv$dZ!*S>8nH&8Dw^l6)BGAtS z_zCCzYOu*aR3)G2vMM&leBk!a;VjrB<9HW|NIz!4u$D()s`HwS3}RB6Vn>w#ehea- zycD-L?a39{)e}@NC!W#oJ33Ax6lPrBGLMubKQ{Mt$vy7G@~ZqdTtvq?x}YIsp>~}0 zq0U4uSu2Fk?Jq+n4|*g8C{!zGc>9ZSA~dkrck;)6a#MY*1Un?G;9<4FYA>&UdG$vZ zp*#{eUaDmW`6{0VIL+@03(p8$8X7G|-j?;V8oirhzfYU(af4t8IVaHP<)L3Z5~iZ9 zP$bQVw-WJTq-@9ww`#f*jrY78M(H z392&}qB8gQE+dP7jZg-Q2x8jTDFHv9Mzl>}{cqsCMnOl!SF6?pQiD9d4LFW4S|aT*b}Yn7+$q|iwU zSKvCP+?9hLvHcpMHtH{A448Ecbjx+&EXD1n>J`W52KE@hvbW5N7dv(KHX94kJYmb& zxC>G4_yO{81Dp4A+IquY3!vp?{RU>)L?vy=idH-$87ks4ek+-Xt1obzq~}TkaHCN( z-FVn~af7l1BsVphDg&x!>65IOwf68BTvn}}arJjsePQ!WOg`K038KPwE_GTw-pb3Y zzX{e(c@`6>3$(}kyCNOq;h(Wcw#}O-@}ygS8VI)sI-qEhax7{Rp|TARu3w%emtte6 zA+A5X!BQK8znV_Tw!N}HDh0{9!*ccIvNN_G=IN)Wx}8pnNa)8QrqT;aoaaM z3U2c&v3z_0LmbXNA^^@+70pMu5Vxr~hM7eHZJ=@v$a<&Y{qRAivy1i@yRfh^1d%jsu`@Eq4&^5%n zItu<(bR-{gR!zjS7pQTC=e4$Bi7?% z@-x3s7|V+H(NXg7_6&J#Y9Ao>DgdSB84F+JWEp+vZ}HfKQ6ue{jD!8sg6EUY7KdKx zCWq7E74-Ph28RBY&T8pypz7Ud)^CDzTRQ;rp6b{j5Y~(obXfQ1q)U{ZbH}=?b;y?7C#fe|vSfpO z{a7h6@Mg0TyTVI+7kJ+H3f$Xl9$Imzwt2#K%I85jwx~Ggl>!8T@38!Ri@^$nJHaXv z>^;G8W-Yer)(nT#TOWZF>ceP)lVjnos5>_mYCcq;FMGPkp4mX8k@85R3uz=^7+=v* z;qa~;Vb8D7%tM5fM$;`;i=(RU(Se1&W+~3z&VUHldSP`}TF`QTHSnGAGV)g%ziXcq_ z$GD0fsaI8>oJnYcP*%aTEAFnl-C1pG8=gd(o}1+JFv9?4x#8zj$h_dzVH!;_PK&G$ z+xhyiu8-OTF-7)EeZ)@Ikge&LhI&v*nyF`59cu_$IZ|?FM1A;~vRp{`^fIZ88+X~{ zf}f5Mn#GQNKo))!F$CO*r^hZ^nR8=SgA~=W0!D#P*pB=^qBp= zTnwjXIChXHgWHBy-hrOt4mhC0`o`5A4~Lf@vB0TS0Xtb%$<;QT4jWa0w(VK2QbLg0 zSEj`8h0a{r54X#84NZxE#bha7fwnPQIJ&6R1g}eJHRa(qAzkXPT)e<4RGLS~U&dau ze??wze%DAh*sbz&r8&h?j;ZM&ESH^N%{sIWz4Bt-%1Cs+she;9I9L8GbrCu59b(JF zC|V$IqlE+>AS%?iQv%9mGgG6Uj!+9zuMY!81m^CNKL@4h8HzzSJPBEClN)GD3L$dV)8Kle(j< zVF3co9Vi5aAN9NAt{-P3S|w7u$NVbRKeT0F_P8qf%IAz$m(`fudx<^0!YHwCb3dd6 zPqpHJ+PXXJXmPDa_KW7WK&`T7V!wr?+BTUd-L)%ut&70$z3)k+0n%aC+HF+uW&p|Q zDMYZg=GZ)o>MUG+(Q{IsO3tO}pKHG!^T`;Lp3gwmv@|xYtzR`q)eubC@SC)S(d#tq z?~p?kY%iXeM;sn|sd4tl{7hhCaOgcL9S8Rl^ln5d!fI>3w0~{XVA% zOtopUqdfCB>xH7SfVk6c`#t)EO=rzd;#0%`HImj}21ot23O$|dm7Q^MP1fvEGcCGw z6&wP3x$1e|`gm`=xZR50zL*+_WCcqDKA{#mDf{;@SS;#x8k(td_rzNDh3NisrY;4)97Wn&3 zoY@pdga}%({;--uh`?PU>@8)h>a?+N#cY|wdLW>~#m$#U#BE}5Brs+cd-Nwzj=*{! zQpyE6EG-`e~2FUa7 zcTrL)6;YJfe`?gId)jRL=)Z}vcCH!k=aOKFq^{3rlZjwl7^ah+9s}f(wQtQ;yCS-4 z19+Kjf&;BZj(<$!2WVfez1><>L6F~1n;qsxN>S(bu-{ShZl}AG$dvn((&+*oyANXI z1f^m*2NxUJ?dku{q+EYz()8m-m|@<8449#Fm0_&?o1k6ULQ+;BX#%N^{!@ydeL01Z zkHUkSlMAECuH8L6AJ0ou9|5F>0B%Vn)uVdvgXdW)qGZ2_{Gk0sgVV?Tre8_v=r2hG ztZ0On-hJoRBcsfA4Vy-jw`{}igkb9=V4o59>(t?Rlg%$6*%vJ!lE1LBZ(2;xwQ;-u z%+1WyrFW}sM81|rQ8=+KcpzZ)i<^96Bc_;~*t{CJ19}`IT5ND&&qZ!n*ZtGKg;q|S zhh?Y&=&9>zeItWpUWD?%bRC>Y1-4FX0kk!|QOO~u3BV~NB|e9qp=$#gE-_3Fw_+jr zLW%uBVMil3UuHpCQmaG^%~n1ymGip+7&l#;2VsGU&Od8{M6*;iJ=voC zCLvz)mi{#%4+n5Pi6ij>J<64Bm}X7(XaE#eGR$RyC@0Pkv3m_K&S>5`pD^DVb~oCL zy+BTQ6#jg%MsI$|9yG#zx=!C4oXY&=SI1*B0()PTifBGL7b&#!t?=#0Br9R*VshON zJSy73a@=ql8U8YtQ_H8EO)2k;1A=qAkp!pDC4-9ZHq6Jk#Vf%*Y$N(KN|<$EjZGS; zUZi0Kfz*i+fr445>xmMxk*KDuNG4U%Dw=g0;zc&n2RezX{?_mpE_2Ugu z@Z96xnFe9@_^p&qC8(Z0Z52e=>VB;tF7WOOe1OJL&_IwbY^i1-EHcuOjxZjsuYsZX%`%j zncM7Tm9l;X)md5;(kLI?YT9zl9Rc=b z1A-H~oq+AVm9+0WAuw7Ize5Yl_0DRSA#?3)X*h!>>rH_*?Oe^D&2cCUX(d1N5sdXH z_Zh?jYaqq^c|POdi7jKl(x_&#IY(Ol3o^_lLqSZc*n#|@Wot_|BEDSRl4#XW4i#5d zJYFT5$gZC>7i27B7R^!ps9P>dOZQF1U~6QUdFP*$gTy3{En}j@G8d_r!)&5|tq7x& z5mwsu$^}q9yMjEGyFTs$9Vk`lo zit{Dp)N|ziGqky!PnM(?tJUGCl9=Rv5OY< z3w29%7xe(3*=4Y-&=37(X_v7b!^~4zAS)XohnEs!EWno4xFs_&Wk7L9Wk@GyEHsIA zqlW`zJiO4s3j! zU&9?LpOz<7Kg0jauaO%N#(?2SZZoNb#P?b$sge_a98X5Lt{bLXijv-FM>|@xDAl@X zw@aNvO~}ZpIn;XrM=n>LlpvQapvsS!HynPM^iHdLR59rRj@_@2&s@K8yAv$D6*KMT z*E>KF!iiR3-tn^EAhlW=&rJZO|kc`l5En(|2#r6;|l)Lg!EL+_bj+cACec3U69N_$e1w#Vu(DE zoi!u@t4Xmad=FR1vEYIBOT5WxeD5x@5o7?am>`#21|J`JZ-qZ9Px)<8X*Hpug zf_3#|31sgX!QghmUBI(8pV2=P$iw@8t+89u+v#-h006w>{^uII^Z#N+|I>iy;AC%X z>g@dg402)@$c2W-OxjZkQ-<&-O=P(yG-AHzxQPh+HFdCJl+=!Ry+dj!DU2ZYJB;)BN)nD zgPw=;0q<|&-j?1BMP|SvCx@MNx41G|a)2aWB^f~O3GYvagYTkDL#2<1OIP)_fc?Ae zcRLYA3}ZXXO2+#30^5XcC@`NUaC`*=b3n(lTh_li2)vg{*1We8pN?>3WSl!>gBQG` ze+J};^HW1Kvr}cZd<^Tx=z+u$~KoK zZnIy=-mt`DOwXaObPR>fCP8+URZ#~awq}wvGGi`5WZo8`0}E!6)HneO(#sMk!S-A_ z9OAk;Py*;M6;vG?_Kl(;aY&gCvf$8YT+IycZ}7GiG!HvZTjtUC8DzQ7G*ggii$Hwu2TN*lOrYACS{;M|+bWwV>A2 z@7D*1x2KtoCIMpcON!CcKu8y-9bEQQLORK?k``xKbRN3{TrNi8N2(w_u@oMDDYu9& zj$CjSy|=7WSr0`j(ZgxF->0lD;&~jUq4Kn;cdU*UHPQub?XC$#t-pfa9A8VlS8KSJ zw%$IB71heUm(H0QM(G>hWYadS>`ipybJx)yRQYCVuos$ImvJh!Tt|PQHdY1IvapU~ zCN7OXjcj21ZI<)zDsfS5jJF{EJ%WhNg+Zpo1}uq{?bE8JPhK>a4K*u^P+aq`bbpEF zO*{}I4@`UzM{6evB`kUI#k%UrnJ4lVTW@f5$gXQ6irWlA4CC7N-y4tWlo{SUG=>jP zVAj1UwJ@Ol5SSyTd2-|3+?-hpt-cvDwHAdQ{RjO`27g^Myu(*U2c5}(&>_V*95D*$ ztI0!H48AwTEzB*5fK6e9O z80bw+U)@bK#gpc=fARA>@_|0P^)!ZjFiGreyu3;)OTe=GOVre#mPfU@b90oY(YpRD zeg-94F@cJcrtsTTLvw5N3>(|7R{Ncn*xSCIO##0#L-}C)k~_4kjo@)uKX4&DX2b(( z(_kWzVpCFyuMl-T(T9A3tPl**6CscP1R7Qnz!4WI+s2Hya0gB67qQ~qh7Bd%N%i7I z@CT-)LhQmPVWwdK_E*#Q$br|-QjHXC1vlt9GJCmj@N($6-4)QVOWhN|Fa860fhetl#Tiy$3*|S zu$iTe>HiDGhJ5|+2E5H{>Au<4yz4CY16kSwOA`q8=Yg$no)9=F6?M+_nKNXk+m#|h?w0->& zxCU*`H|?c|6dUM>uGO5o-R=A;S1X<)U-lXfLd-O2Ar%-EJnkXmi!|hZ+qXT_O)yDu zSp_>2J3A}C)Acil1`8&*^<(>wh~6Fg3ESG-B&NxpcYW}8zeRYHDZ5;3TKvagrh-a# z2?MaWkC5@6p$*|wJewELcEf3a)BlJttZMWLNxev1E@ySgCMqHT-w5i3#v2XSsGk*zT-kVuU8IzSAbxwus ztm6|7xcK>aeSHP;5YW%;bREDlJzP#6HX09z^9e|-GNCcHg`Lb%V#p|SxhijH0*4M^ zgNO^694p&!V}RB3{}HoW+RtW};I_Z$Za>i%6yY#YVA#l#72z%|$V zIk^*j*|>n6py2T}?8Cv))4`j~-Ot_A(b?UBhr`#!-H}Qu`(F*kqr^9)QdDOoNYmEu zshvUv*WKt*0m$O@+~815)>5VF{463F!Ld_{Va&-WOCB5Uxo7|Y^?D%AMfkD(OJW;G zc`VRPi)gcgG{@~TU2~2J!G0f;EkB8iO1C1rqJfg6K^E3o4Inx4R=Q{3Cu$T7*QA9r z3gS55;hQDN(fSZm)O`&lfr}6ks0nU63MXunbYU$dO1#^hf+*>F4*nj3WxNmZW)^U4 z=uC8`mNv`b6q@T^Zrn1XS8*4dlgM#}n)QiUU%6VJ0YI~L}-^Qf3V{K%{wjWd5|?d1sP zttBtUR!Y!E?LN9senOx}V;%+;3U@~C>s2l@N+hW`kcJMo?li9}H(Udvj~Q63OQHZ& zOnmpgi!S-IA2*6Uaid9ux`Z^g1{O!g-A&uw*wDCTT z4Bw^y#Q)h@8Y9XDTb}3xHKV5Z6YH|QNnj5@JL~W3?8d^u<>&Zz^JLV1Co743k*^s? zPJtkFW(!%39x|i!d=*1MWb(c^4cB!N9T{cVfKEMd;aUT`sxLjvq@vCp^> zCFp^{(bt>f>0cGReF1KxYmOE)WBR0dYeS@5M+K=i$BaV4>?~h@7fs7V%?G} z-;u3}lHE;RjTf8;#>^QhENTXBE@5X{@HU6RTCZf;f^JVy?g35#)PqUK4Op6AG)N-E zCdh?zYV|~>lGo~YVdDHA9=x%hcuFsUJST*CL?Xa%vACXQ8$G~c+h-Q`vO98+|9-!q z16;CxJx-286a9UgBB(2R?;&K4zUvYII^AEPgIchPjHeW}f(i)&U=~})~e4&6jctbqeMQ(4b}U$YbR!xK43 z@KeO1d-VtH{@*oix-`=>EO2}freLPvPN@7ArObKg2ov{}X;%noR(|ICMFSXcJ+P|t&4SJjLRuz{KcmTKS9x2mP)5D*$53{?$WB%VUjlXppV~-L#6CoYO8ge#(a*`tOI_|JPx#X^ zi9wT@2_KLNJBzE5!9C3;p?vA;*RStFt;}_MT#6={T4@=aI!~KhL--}Rde{w`Og*Fv z!MVqo+Xwbnuifu`hZu%=8bgW*R@a`xf?`;q4A5?=BdAolxm*Y&DR4wT84HGdnjifs zBsl!~K<_b%OoIST)|jo*_SdrJuTu6Cy;}t@9UjTxF5w>+F~Fu*1lQ_8I8O)$Gsqr; z)%3iDkNo77%**B^WUO3bg@P+M!-{mKNCUa?OcjC>h}Gz!#uTW8Q25FyWxIDlHdx)c zV?~Ka@3`$KV{o%D1D@ECDuTV+I3SQh&Qzo}d!A=A%g{O5M1l6oiqDjS3`}Ru7tamD zRT*XDoE;TI5T7(cCn6M@Y4gL3nnATF1&Nh!Mf~4Jg#CO@$ul_1wAle|JxMX!*H5m) zTYGPLJpOxYNo&ChrtM z6Z0~lPF&(>ve?h!Xk1dup%6rXZGr=)ARf>!ZCXDpgH0}jkifD)29tYPvCV}}E=|=x zFiuOB5QC(Ckr<>{g2DEdt)}xyJ;PHfy4`Fo_KN_zN;Zx5YUchFOZ8`$p)96q-xcwY zsE-u)+YIcYkz*uSmxcn8C^s7T>KT;*@w`0<*J6?bHiIwGhW;^S_-%2_NdeP|wtX!U zh!uk}saZPi1rt-+vDM7jt*STH zO@Y7HFAo$LJ)ixg_d@KGFIu2I)xPsSuQ`WDk@n-#f{LT#_*A^G72?9DhJ2yxOYU>M z89$4dN^YW-RbD#cZ7QyLJ`9Iwy}avFrD;4u5FgdwPUm-a_6?SoNuqWbC*MdC;6QBd zIXs~?2=zfsojKrU0f;W>mP62p0=!oyLd%tb&6%>>9Qa)>#AHHUmI_VKV+;Vj(e_=q zKSHr0OY1h*w=aRd4Uv=Gkk4e0>2(xSB}>p-2)oZ_+3D<13sJ|-WLXjPrzGI08i)+Z z{7`rA?xH|?aq1X+lVgtc%bFp9~Tsm_EMO_6d7WufM61+sf{>} zJV7>rnoik-%e_SlgfX$O1p@uJJH_&v<(@fA8yvVNfMHhiG`H~xe)J#M!02P zRZfja#zDn+wT8K;H-}q^C4ii*90#|jl~GVtQDu#%GL)yHP2z%hdlHyymB!rXg)<*|=M4gdq7$#Ik+6;gAA^0`?R%cg_Up zcIP*Mg~S}3YYQ-~l+J4=mHV{mJ5v;tQE*mGJrbb^+zLHB>ALI}>WAKI*!zQ&-s=hV zsE5{&H?{toGiyP1&D!^U$tnF-ay~=1Ukhob@pv(ldJlGh>3UCQ^4}uiEn8pxEr|X z74NvKztIgM#;kqTKMh((Z)urz5ai8ez~n7*wKnD&Fcyd`4)*lyuCcOffA*jAyH{v! zEGsoCJHql9lS)u&tPbp*{3fw8WgTAz5NN|8bTz^-o6 zOMy>`2dgid-7O~@*lLLzmlJ@qMJv%UQ_n@X1ZiG=pssFWvSq^-15}=D0+DX^G?eK& zn<@nOb_g$K>Gwh2(^FzSs@Q#BIViW)|Aj}NwpW!On7-mK zy34@6FOII>`d$&z;gs0t*N9V3bS;Y%c>CmrnPphoL?W`+Zm%x zie$3MJ)Ti~6Z6E3Mn92}CZ$lf!#bpc;T2?@VQiNT1hCdEuq|r8+=9F*0@>Xn6?o}up*DfR0P`5+qIZFPB3$`Hy$NrWhrO#Hn zAdkzQbGc-@WP4*~hMp{cJxM4@1?=uHj98W#Hp2X50-;VVjD%w4ZX9-f>XxF9NZ z)Lhu6SKZSIpFItDiTD@c@Cm~ZsFU8h8rG_$ek)vo^=5JzH(WQ$$3M944;J;i?badbMc0KH)PN38eW>1TGk~UPrLx5LzK*r`1hLV) z2+l>_>cC)mgl*JGQVjgL6%*NkkUPclNCU!Zlb-ITvi9qaCaYan_ggr!-I>f2sFdq~ z$+kj42b<(eYho}d+s?-InXP-_csJwnw#7+Fqu9Qc&!()g{2$b5AvBror2C27pgJ0- zlnJ<#5mG?th~>;@*NbUT*NfR|#mm!OSH1RCkGrjp>FGJ8mFD%!$W=LkFQa*}9%woL z`b2c?AxseRcy2wT?5vjoiL0c>E*hc>Pp<9SCW*g@MLR)Sj&C$f za>^0U(x%Yu9lwaXUMPVoS=>lL=9&az^J#?>g8tMc6cixvgj89A8^nceMqpbe`Z!pR zZM!H}TXijps?44M0)+*%b<9K)v-;zxmNL=n>;5+*c(CZlIIS83&Gc0kgJW*wmR$)N zd!(lArnV8Cam@6vB`~qvwuhRkUsk!l01Kf0fSNh5KA0x`3=o7YJ>KRlk?r{;Bid4a zRv(g{X`Biy#s@U6Y5nqDnjjBrxXNxgN?#wX?~?16=^K)GQ^UE2e}zXD48q8}n(q{? zvwv3-9%5eqj18x9Pi%i-K=Vnd;hF}`D&x=u_dbOr$Q7||cPoQCi%za~*4*Oj4?Hds z7<-(Vi1%CsN;-MDmI-2U$^$#PEH7G;c=OY%=wY73V#=NlppgMcwHo0^)DQJ)NSY-Q zToS2a;uUM_`JVljWEYW}$&23AkH!v+C`-)_*}ImDw}!KAlbp===R_mCivz7qE5ZA7 zR8X^Zxeb?}%vRY#4|Q(cxD*=>3M2hB1d_~OxSoYlcspg_1|s!$ciWh+pO&vJ%i?PF zFk`8pJ${NjKp%FP#%V_xU41BYLLW!dH!)A7wv@#>qWUezi%BMg+B)>z>$xagTYIYi z#-194Zl0C0Y+L<2{p;`dmG=F$>HnSO|Nd5=>92d~iaD(z{soXaA~#VCE5KJkj6PeW zE*dz>k)85w-lElU_s47)p&A(e30dX{8KylKm86Eew8P@w?Fj^tUT>XVP}Oxw`%Vme~6*X(V8PVcdQLj2d#YL z8kJ7*E3No>OB^vU>6GvPu%_aNdrV!Z|B~XJ|L1r(A^ksNs{V64>}2X-@8t6TWK2m6 z|7SwgKT~H*!+#}IJ-n%?SWC7%RvB|1a>!+H$0Ux}d3*C>CKC~c!-_VLm}=X8@816V z50eN)A)WMWdX~XP1VQVJ+#WWn2YAg1O}x9w4*TJACgy_h$xQg?;&%4k%;aRbSr6cM z8r3aZ_Hufi+2-!XspYJ8ofBqy1H)~QLh2o*wY0+S>W_y3U!3FY1w&G-A z(jE=4CAHhTMIso=AWg*UbM+My{)DWRuH70M`fE*MMeK+io505imk|6B6Jp~bK1d*C zB%JV_KxT5}1v!VK70+6HM;+SYXe2t`SC0fz$LQhd;}iv9V`RPpAI0?mk*$rg0fEvv{kPPJKcc%Iv{%jygCj*6@p_1 z4el`rXQn9Q%(_U_oFg0nIgZjXzC4Xu`5ZtzPBY^Ok&}!SH9Bina~ijZA2WW-j5R%8 zoGAmc7{8o~3?&3bbl%3%2XV9I;pgCHqNU4S(1&7fKx+GNb#`@HSctr!1Xd~vCzm5E zIU#Y#d+@Bi_YpLN<%N=u>C>d>pjuN*q&Bek#oN-*;faP_1icZbqoIcvmBbFlZ)y#u zD_Rn15EHAH760q`c=2ysS5}xiL_%gS7q*N#+tu54$u*Lwg>qQK)j$=9iO2cmM4Vm_ zR(n7K6||;OzfDpNBRDt4S9Ut~V3fh8gYCNtJw^jnB4w3Rg3~U<*ZYG-1z$zcaMECt znAJKEHZoTM>f%MgeOJqxMEW!VCJnK$qenwtj@1P6ltMUCPTNdq?1;_EPm3*KkjEr*2O63K+9pgW5dd%25$2wG zl}P)Lgu(Cc|8x_^?2P3VAS@e1nN+Vy)*|axOlCXO>n-tqK7T*Ik2!7v_*-?up81}j zf$L74qQrP-zDO7?l`PIYi~VL0;q1EKuHr0LZLv2GeSxaCo`()+P5%UdFYRiAUl3CQ zO&(GRkq(xUIG}W4xu>aFS`Ip|Zu}Um1q(f~jN}d_b#rPJ(GW4wPeZvHI^g6gKh@TL z(ZEpoeXyOmT9Kx;UP%fQP=kn%j)8BJ$nNSUni%!XfYPNo@4|s93mQ%*YQ>r2`DuU5 zt$LlKRAFVH_I0xTSm=JVPA`(ZF!oruD4efo5MibV)Llo3blrLzgcMkiFWQ;awl|)J zt>^%$TH;LM22Px@mKcEguQDQDBC4sdAyU@;q z`Vo*4GNyG1ne*C_45ge+7s?t2I^B1eH^c!QhI00fbl7YNys^LB#jpnNb@E<*HtmOT zkb?9LR1ICd+#6$ng{Usk3iyEo|^{y(XJDbG{3(O!(;ML4@ zL8D^pn2F7IFwCZa$lhBJS6`U$5lJ;;4pyOhud<4wFjj!)kyi|tf=qVqV;_Js!7U-0 zmBEboATu1f1qk+2&6n%H48~MMJ7OJHcM6gZKIiGlHjG{IQ*{A-qS8TKVINkcF zgNK)kjUy(<6lM~34L#mGI>WfIi7!k%g-P<*M!;Zq@RHEOJf&h-pt=COZ-o^s9#Mgp z?yAWtYh>3+kSd(F=uZ~(e7~8FwO9O#_`|YD&cC_p|f+eC2+FIl=D3Hs;J`LruC!Jp0tf~$Ejor}Q zyu3}sn@oQ#+c2Fhcn=03q8O*@E_*pkNk{2?I_E3QF6Vj~!9~D(t18;NM{H)7`)9IL zkdmgg48Rkyrs=4>e$^u2fP;NC$h9`@M>WlrQpV1*$s_v2Wq5<8)z7NHqJF8-CcZS= zN-gZhl7+4}>+@%?RGpk&+DK^4sjw>9Gj#jHtEx$75! z(7u|Hbhoj!Xffb{ceIreJfb* zFb0+$V8~^y-Tum11#!V|q`G^&C78SYFRFXgx08TxE&I9}c1VM)P;J7D3)rB|)$h@Q zbW5hedkXt+P(?uyH5wkKn*~rKyQ{>Ip!=&=zDRZIzM6NXs5Zl8ZPgHx#* z3%djWjq5eMFR;{Cu(54R^mkXmO*a zOG$|(E?l~DF*ygk39Q8#G)z#ANd=L7N|kv;-48B?YevyVIP)ZDAktT0^J3iQ6)Pm&d{Fz=N5B zKfF64WHULSqRj*HgUc>~k@fuieSWI?l=j{%Vp^Q5v-k|-i!zY>p zSqWZqA`XBaNqc_Vn5qPWfZ!O>P$2bO?`izM9OK=~`&U;44B}*jyn~g|bnML?QhDn< z3kOAU2_a7V{TEXFQZEBcD^Ca-q%C?O5_!qUNBGpk&bDVrUz)zwipWPaI6!e{z+u^S zXe25Q9axvzQOY+KC+{&LQ}*Nym%j#<>Brx-M0HGoVG9%fyE1B=QOl&N>!jzW`PHIQ zqyjn%--9MkN!2TMRE0j%txbO>X3(9PceQA!VU^OR*SXYm(Jw;|Y5lu>dhs%)sJV_S z&3$7>ZS?e8xbZluuN1^|pLOwI)C(0wG^o90ftx<;V&5)7zv(C+HyUCuy7=VLJJ?l| zb&d=zqsQ+whN~*)kyx(RAE&3h!OUHe_1FHz59ZelFI5Wk8l)a^6AchrtpU52MeHL| zR3^FAC!Jb{d$477gexLiAyBVifuW#x_-H~;w+sut62Nq~Yut>ec2WM@Z`IN=g`Yt@ z=?*FUIVBA?j#%f#z|{oWtcX{>0yT!%3?$bam9#wL>P02IifVqofE5A?9Mfph$}l)%AsoJiDLnt0$2-%1}}B) z>KbRYi;Cfy+gLQhR;LC^TF=Xl1IDpLQ&sM?46vT=jY7_|CwuiH=sw;ZCYKvW&}5_W zd!0~yQ%J7Um@?R#&PEB?pc3wqR4YnsQuheG3LzLe7q&#H*GpGqDZxG;%I*i=_>pw> zLB0aUqeV~xn|0lVqx`E08@n43#TdfzxrlReVrs=-T6a*{HT^4f4oEUKmwuxU08z3nnl7IS%l_lS;S{2_Vke05LS%D~-i#htJvMU$XSUDe< zM5VS_I0luo*ya34q))eN7;tG@xFIcDIx;CfeDCG=P;HJ{D$u*u zqOTmu9Sm4mHFyl7*+k>6E(NP|tr$QX)Tg{s5U9?j-49?BpRvfCnC(Bwc=xCHe>2=; z!HrBG%sqUL2n(AZ4tnxss6kdp-PVQ~eN_%n%IYw$NN4oIJI}(!5=wTCw={_fikO4~ zLRuby$)%L&LpGb4ofh0dob!UpnSL}c_zR!bKb3Tfi*#*8{R;FIgZz=-kgsk z{V%%Csadd~P1f7CZQHhOqql7vy=~jJZQHhOo2O^uM9h2_^AA>Ctg5#vGoPf^KR9f* z8yYl;1GbPc8Fw5>f*Bq7q$k$lQA|955#Xa8u}~?DawZ(OJ9m&Z0yfcEHu(@2RY^x+ z4QG13FXPfTK#3yWVi8Ttc0kc_ZE4pgicWNHz+Y`!llAI10awK5%9FJXE2-nue+hMq zH?ap?SU>>rNUcefag`qboA>o@Waho}+lc~>MH8f6F-cNOIT8)hObK;~Z0`HMU0`V` z^$S221<28ie`juXIest_IZIvU7PItyOh=mN;Yw2~&#lN3qAhNC&m-a#Hf$w*@l%7Y zZlzG{ZlNtD9>^l|UMd~pRnd2)p7kX0DP-}l90UFp8mb^G>O+gp!O7);JP4~%yZ6Tu zDR)v)&mQAkXGj1NZ`9gS*m>QnSc|D~5tnrwMRyr}%B7hj+!;}6F45Eipty}so31IY z80U9709v@KKmOQ@g0MSkt(9c}M>Y%Jma;6)AdHhr0fOsWOT}iIWEQ+ zO=YWK9STrnWeIY1Edv2cQUkL~ViK+*VuG|MMq;GWFTVZ|ND$aXqB}gw2Ubp} zQrQ4-jp(iiFFRA&xwuqUnktIgUQLa7CtQ>(O2U zTJNYnM^2g~z^>T=%!5nzTqB;sAEcjHl*P8{<4hL=QnXI1d^XAsxF9BZQI58ycy^+o zY+Q#LJ0N#D;M`|L9xdPp#3aL2==`k}tO^fRHC^PSiGSHjp9PcRG?f*}#5I+2?U&_r zlK^E4KiKzY2lS8#^B6i-a!Atejika5km@+2EGs>PYerbElvIe)dNj@V?sT%$*}57& z$2JGRR}Z=;tAixReA41|+_AUv^5-Zi$iL$?(r_8CzvCJd*1VC`f7ux_KcYoxT$Ge1 zhTP)(t4_*+V3wHJ2yIlhm?3Mp)PnW}S8qkmUQg(GH5RJONZ7EKqh2ypylluPHHS=G zzaFC}gi)sw#$f|^O;%<#o02OG<1Z0J0p;nID$03GE|-3DINSbi&qj&^oybtIJO7$oG1c!5Z~H4E zps;&BtVS>8AfmT&TL^zhhXBfv_mh@Hv+j%`Dk?MEUal2kF9(MX9-FA*XqR3L6qrbQ zN%}-+_srNXkDCo_|3FbML}h?sM}Aqc)B=w_OkjsAtMN48Ot{&tty*j70>8TH?B=Wc z0K=MUCTVQO9BTbxAp7daR)<9Oqj$x>9Ew!0>I~cy?6Eu`YwH~v_r{)wPW^N9Oa||4 z8V!NvR(%n5-;5a zYb62cyBx{|(o2w~3to?dXL4*eku#9omu$@?LbsyBzg3p&n8U6CMc#JBbd$W;sl2zm zYnG6T$h>mFQZs)>r@$E>ym%R}e&D2g)e?GR$9TVGFjUjA0YPhTXUOd+{4(E#)^sRO z5_8qVD4D>pbNy^R8tMx7ycPM+Fj;gOx|l=TN66SU@4JEHYm+9YKfA_yq?_iR)y|pm ze$~{JPKSl*XbY5a`6GDG&AF2P5Pt!?_!fK8=GmF4#*#ctp5Q3+&1kE@ufS({THmm` zlzW}<_z0e9>}8dB)z_PS{hBF4%K*nS>;C)4V)6!P$nm{TGj1X1P$v-tff!WF$} zHnPpKU{g2%jlJFigfFN;nKw;8=^j z-Y+@oFH+k-OgrekZ;%W|83X{b&XKR~J4D+L-}VY2xx*@d?wbxA+q>c_zsS19q4ZD{ z2Yd5P{4g3}w+H*66;Pj;N$vO|43w(Y)z1M+AAcnFG+gOWOgyrVb=c}v3> zV%^PJQKvhn%cYs-%h8wW9zgjm(cZ^zunE1}c_D@%%9_T{GM1NX35J!lDHQSiQJ)4n zu3VckTCHUm<8}dScL&!f7ChOrZy&=E+1s>p*n=;Ny~kRNAhP1y`^+u*pmfU0nBQsH z96QIMF`#jf(m^Wt5=sK2$XG`u@I>WcqSOS$vq}XoOJ8+$e#F9~vf-((zdw_!o-^LP zxVdeFV-So(ZR(V?$I)NHh?GOtFpH86{K&?aH`w_^MjPkDG9bjGQGhJYfEDy8UsB%{D+CTad93Im|cV z^9NiT`MtLGYn5#2*u16!aDQ)f4T<*?P?;k8TYd9w`r-%JsuWrrBN+k3YNXsvtk7Tb zx#w%g@7*Mc=j*C-(4&JJStMvalItm67QoL9Z$JOM-7WiY=K7vU|B=}t6}(mac%qhcsT>{YH zj2#H2;wCQys?nDNF7!T3QzR_6Z2>W)GY6rne$Mf_?7FVYXIdtJnky_1^e*~@BDb%7 ziG(z@o;r%*6D^ZP;}5jerk^Z=%u^rlh8uinBD#Xo&GCfl>+Lp0Okk&3j@3GT6AtJR z*V9NLI4Z{K^w5K$smzCdN$IvcR&fy;0o}YvKRD5`UTO%<>V%Jx)cmN2OVhNcT>@p2 zRu<^eB=;I-*f3eUZ95CKjdyx0(4A#=C_l4ush6CcXUmk|LrFvLG<$SQ=b2#IsgkNo z4DbvU!2_s>5~#}q8g9jCy^Q+KutA!R&`E%z>wKSp7_|*=8V~++p?{|N11{_~fOLFC zBC!=exu_*899Dsww|6)XF#l+N;_+C^kVm8p7I{}O`(fc3PQ*4mP!VOo1M0t$)&L4B z?Mw}*9u+g84geu6j=1HRRbAvgBp2ndg`vZ%#F_azIMvJ_CX5m^`m8!Qs+R@2_t%Vy zZk0fRqAA(q$~@O@yt01Ce^Td&Zift%!BezxNXG7m08A)G`8-A|Q76N|c z&OqCY4AbjQr$L|{aMeRtC;64s5LT<2!|;lb-SDo_wd>EJqn!;f7>qX{RxBr)sTcEM z#Tls1K?rd(00PV$+uO2VC!vz-q!x|BZNzsw+7#1)+ty)cAp{mR@Aj|Xf5jCZf7{$? zu>b%lbN{y4&ojevisC|m$ICmC} z5H4XI&5p)G@ED2Fo~$;r=ST_*l*_^tN}BDrLAq?#0G?Tf;h&hKwg|jv9encX2mM2l zrUysKSa6V`vwaPE?>>fy53Svt-50W2&7GF(F5KedbYH%P3tGySjk(I2nbzl7%*Vl* z_to`m#E{sVb63G9gBd8q>a!S5(Pl0;18c^l<#0ENGv^`;){!`L$H8=CGQ@<~AOX%9 z0(t*i<%{O7lPntfsYpFrGtUvv9oMwm+n<1_NtwTppei(hU+AGuaz2@GB(?y<5_Ou; z*9b@*B3`ir{3Ud_^^i`&v_j>ldV;)zgpd2wW^Mpa?@B>n>Q$`wh4f0DM}-2lDM#hi ziSO`Bj$-66759LCv%N^es^!Uo0S8``E&{`-|A4^21G&(UeO<*_V;JyCr3Pa0541V26$i-1X7a&W!J5lsm@H4MCmc2HW! zLRmhR^P{nR4#8n0v@BiF5hoxpN&>_ftfNIaYM@yDWJaIiENH5n%Y6&gk!FZrNT6;B zx9b(cej`aofCP7%KRqcM)7WwqIy%TurWDB>7LAufAPjlpb9vVP-ZHp-g@MY(V9fZC zLG`X9db7#FOFz5e?cm2bvN-0&y~*KR#C4#FUyn%CNGn6iI0z)RNiWpQ~K$_G1Wjfg>G*&nvy zUVwtqjbg)0dx3|XGl&?+tCPG6E|1J+q5pz9OSOd6R4U+Ze#?yTVY@avV8{i!Hd<)a z+UX^k|NfF{^w2*#0M`=HcH}5)2NvTc$pihi$ZW0!~yS7G)JjTt{w0+ z7|w}BjjK)78rI);B$4d!@LWcGNiN`f0I~ANdaL+uKjF;UC6*3W??>+Iml7~Lir_DV zU+XkWUPndqi0$D2O~070XV1Sp%AGPfy?a$Z2^9RB>fiAfPB)U5CV)Mk&-vA+p*~SQ zQ)x0Fri&w<7-{X-FwXkxs8Nz^*5#vgf8i1ES(Q1l6raNH#n8%VQ3qhMs7DoI{INgn zjIa4hbB?S!`rHKY1o&17eq`x^4#1^>wVQW+{Y;U*UY-h8YKy3Y61KYhG!xh zy&435y?LOllP0K;vjq^kJs3*5q8>h>gMQFOwV5^=c6DNDCbqWqA?ErU;Eo@bMxfd3 z-@9o1h`ZDa7si%B8dIk=@}G5zC4VHY`|#${=6@kif6T6TRfNk)p&GB#DSR%9#d;gf zDP0Qpp$ika8*S91o;uF1Ev+p)kY)xoDgq8z8hGg3v~CIDhPJRhpvecvx5c;_bYBr- zM{qIc7SSB7D4T|B%Oe!FNsQ&|_p*Q|A?yyhY_1oGt9g*1Ga5_21|?ff;a*-bTnan! zWACv6aCX`(P_AIYZ;yJ@6F}|RbQ4rYj)}RA4bS@bE}4Q^f7wma5>i{pS!ib3g&a7uMIEDxel)c+J1CG{SxNeI~Ynv~H zq@%$-FdlpcjW1N)CU_U0%BD}R4x64ePXk)PRPO9x(uGCPkJ*S&U}!He?~y6IXv7i2 zX(2}!XHoB2%~XEi6MyB7HfqhH&CQ0t4}Hbo#uNutt`uB!aoIwKm#61^=EmxONb&5F%LVW`wCb@*Pc4-o^u|I% z;7l0nZ+QHr4Z}0RPUC?mSy*o)FSpybs525|9BP3A$w&odih6$_SIIX3;ZVdok~vub zPrBN2=g2!et+A6CLiP>NPq2sGb9K}7(ij% z{-ks^7k3KbXh?Xon8i^5v1??H=ZK{^zvdA+9G>w;c*?9)iDH^$jCyuxk2sDJa4wEF zz0ljUiZi$j=pWKF6z0q0hN*#j?q{D{p;yGVJrs{Yhjek(d?gk^>ISOZ_Z5o(I&|*W zM{Mx)pgc^)PE$=Ivh zoTodx8VtKjq?5n6GPs_g9mpVa9L8V5=8$5$j*Xy9M%T)P^Kyn3Jii$-m!ay)Fp{Uz z_bBB`{ZlOaRD^@$s-2oRN!~&iK5%#ePgZh28^MRw7t{_70;5`j|%(>zWyP9=SolUh)UZhT>G8QWDh6sKqv*byLM#|9Fvx;b8corfO zaoy8gP~`Tb_NBcjW0(<=jS_i~0#Dsj-_)1P&?uObd8G`0o*@Y>$`a*fu}?TP|MmJ> z>;fx+x_3arAAZzaT5SpZh{GaJRwZfnPK=sBr3lSCJwuk>{i8yrP3OQ-k#tndT!4sx z21~Gj&}KypgC7%M*jVa`iB(?>(MwE|hj`{F!}fw>o~SF!gjt#oJjg(W_=o7a_~8gs zuL8w^^PI7KDMCI#0-)1ed7iXBiIdq?2JWp!P5Utgg{`BpFI%e z;EMoh37KA6AaI`0Y=$=_EzEE`U}}aVFS8!2>HrVEWE*BGq{WM*(9w;)io)k_uxKGZ z0-qq5?Z(gf{bu(!-uv?%E}VLWwl?0xvJaXJFFSxIx|R;&r>ZnEps>i_VeSsRGMp_I z2OR2ht+aGHy4frBDM~?PMz1Q~Pr*%}4U3S&@+DVW z03&4mJfb#sVNgk-L=RyEMd%(x&QEX502g2iZGH%90H|&dlrb&Qd;~*Q((9mf03{34 z{U)_>tbwy8f-}}z%}=9|Jdsp$vrs#@evvPUKfT<%XoX;oA2$HrySe;h%lK-!AxC?6 z)_T-oA~V&55afiO)yk8LZXPZ!idKpY?sO=B71aF~-9l+tM(604cJZ=WHf!O%K6{^D zXJ+JHQ-Lf!nb94ru9GmAt^$9!={3ag|aO6VIOg^`+ zh++}uMl;?b3;>m+r_+}uxPOqQ>6cUXv|Ik*6ribhrY^ZT2S%s~z=lTnFt#p{Hmg#> z(pk^dcN9s{Y*^DQwk(Yf1&28{n{h{Gi*6%6T5*>*YgH~2h$p^tCDhHyQq`};&15ma zXa7|;{A<<)RajeznvPC9%{S@#t;VC%@Ba9YM=2*=4S8tuee0K6IZzQJKypXw_=u!R zbf^lx@CfioX=EyTf88$;5?tyjE%v6q7;}&p6n6Ls8QtJ6?()i^Y67}jQnzI}Tu?xI zFUQ#HOn7?S!p7#Rw2_pHi|`_vj%f}d+X)!rkfsSVs(MzG8G%Dyxwx6Et!AKmff7{* zo+ppKiT<-UEp^IX5nnE%mI_t}6q`!>cuXtCkiTbJ#zymGRuf+7LVLFJ z-Za~HKUMTDdseK09~pUU|3{P9yWUE@GOr9K8;Nt(eqjr_QT^ZXf_kZ?_9u&9Pt6cF zi;$MpHqs(nQk>TI7vd3)D{J7T($!B=-VZtLHp6Yk0|DD!e z0oQp~z6Ub0=%NdBr0h>7OZ7?U2A3@kME6`yodh(}EmA3e@QXBt8~=`$B+qc8Xg>+- zE1oQ#Z0!?l7OSNNH3!@LVS9;DW^N}|;}t?6kBh2!f-Qdg`kY#=xGPMk0yI3;&d%B# z>-7U>ovL_HF|t;%D0MjFtl9EmGBN(XA+_>-_|iCt=)Z47SB@sCQX~3yVZuMuUWjo_ z!C|<07e+qSS&#IsvV^%GuTbU$OI=vre}2r4n+J~>{8kzm=>JUA#_dv9c1BE5m|CVi zs~W~ZYXE(*%wAHvOS5dv8w1Db)@F6imk+%6QK?78Eu}vLP=#rDteSAlu7F3NDXbCI zt~p6@1VUI*hgbA~gWLL7VoZB{Q7%pDab~$ckuiV;r9M{%Eh)#tN!r&Mhy^eErL zGJz>iKVmikTYgow;IC8q&|A3hyIP0)A@vq0N6mg=Mrg}7K@4zAvJYFFAKob78o+n3 zDIjuUJ2ZQ-&>`?lADhL#cyERhLX6F+`k-J1-S*p*{oMhkF<1cjUA8e%bJ7(;t&*2! zT&VD~zxi-msXFr>!`sll8 zXGgc{g_rji?j93WYgP%nPU!PKS6bKgW$oCZZyZ_ zixgR0JCUK-@vZ9&B3-QFhP@~Z$R zuNaex7Uk3-J4a*^_M~C@3bgW{ z*G@h90Qzrn@0?O1GmZKER+OC8V4-^INJFE$dF|u~oZ2FiPk7Pr|E-HlcdsQVZL7Ij zxo1|4U+dBGseP%oe(BAQ{y}|--VGl{xc@0urQCS_1Z5!|kT{F@YVOie<3!yXAqU!0 zsF-X!`SO|x#`N4NaB@d$cQKsSZ+fKXQ?ZUwZ|#f)Kj)5|$&_5ioB~7Uo?1@l3l`su z4ge&ri!?$jQ=J5*J#d**1%{u0xU!57Rk^VveNqrm5xfFS4Wu>*O`G2}pCUAzScTxy z-O3&wml>5mHbui{fZ4gDn_{x@oSUEKaZ*DB%(WVGnbO;#4hQiXD z{su;FX%dQUbXVV~>xRJ_x-*@Bb2_s9wv2hj{5RUmz|xksEdSvHu3ekc`Ce9>hJzYU zXHBU8!|RGD#8KW5U5De9-alUG(hJ4t{?(2v;@&r6^XQf;j?j&30#9B?O@Xn9@WoyY z+ML3}4r2y_tQC6(BdQ=;X`C0ha+Jf-`Gg1uxgaI=f;?oGCc6{4En_E_jTE$INreA@36LG7EYr8aIAJHCfI&j}=Gfyg} zhf0Nm-CxE|D`B;AzVZ1oCKDjJF@^*a(Pk}^^)4Xot~Yi04O5{(#uNTgk%EA zBowQLJ5X!ytJbChqkV3}*JEF2yM+9&n5`iPinj-44_^*LvG~=?w6j_J^e;^SjXaw-P~7Kg7xH zc3(d>JQY7SkBZ#KsA3{Ug%6n1Rb$M}++W3i-|mila{bG^GeOt?wP>iGh?Kv+%ToCu zc^3J(JI;~s#65YHc6YP;wC6J@;~g1vGC)lz2E+4nLgn?2^sXlakn?=Q(#pB!L;D~7 ze%}7lN@agsZN1$6;U2r^PcI}%BBrWMZXn27AL7*)rg&!5J&+%upA?R^j@-;!4Q~Sh zdhB@Fqg+dujPJNR%e%Bv-vT~5O3qPJoYGk-x}CZeG1x1-U*^*r{5O0`v?kza)x z6gPF=owA3|A3;TQe=k*5D?ZM5iR zj19;u?>}_(P_RDiov!9zI-s9G*cye3Cr%ARS^(&pa60lD(0m;~&FUW}9J(9v@VFeW zT3fEnO8__{xl<*goyedcsap>%G0bp1%5YzmN`2Di>;4yF#@FDS< z>F#cG!T*R;3{&C23b4-O!@n-bZxvM7T`)lr;#Z4alqjdWnl<7@d#Db!3$G$)+HrbT zfl^7;S6R6`gen_4Kup9Cg{&dM&(VZXOg zHK|ZTxe>aNC|W8Oe$)Im2Bac>Xvq306T$6mEjVe9aaBE?uA@M?iidda-9Iokr#*21wxX@}NMlr3B z-OaKTclHR6G|FAER?V92wKjf=AqKTI0f@IP=5xQOodVpBvYWyCP{A`t20S^4&xl;I zpTR$20=9W!F6nTjz!WVx!X%+w;Am5Ffk{;)*Epu#l^M4J;4>OA%m=Y(A`nqlKAecw zswBA}JYJ2Dtc26hgX`ewZC+=NG87LYKgGozuH3FK--NENWdz=h8Yjm!lo zMC?McHM5$a_;yM_9*>Fx!A-R&jXD?`6$XIu#!g!?IZsg2{nz!K_x zb9c;VIm4MnJqy(T5X2V;6v3fCFVGb21KTj?Jay+D8)-pN;3DqIQ$(&>SHVM$B+Z=U zXFNmVEHW0c+FROJHt3aG))zsqG`zI?X2tagcKR3oztoE;-gRQ#f6Z6Q55n^ZAOlk zKstw29%D(pY+HehlkA(DtD7b*`y0hmxHSwzK~4rhUygJI zbPWI!`(@|@InBDxK$2-*GLYoy@BKV}44oYvzb2UHIM9_+;I~V94IU7$Z8{0OMNA~T z4;IYkC#Ds^ul7#hH}|BrB=+jcIl_csL2Ly?BZNn0Hz98lI+|9qY_)03iBO94vjlx14=JwL;Uo}Cp@CFI#lX?3 z3A%WYoAf7tRx1%%*O)iQ$`cq%-6Mz?twVn(T)DMl#sNC&EtBcg&fQ!PPD z-ep?Z?`xZ1AN=wtT(l`!%v-)vq8HK_?-)uy^P56;@X)*$>Fef~*(9)S>kofmYmA{q zLik%zW=t;s8>*B{Pgs!rAO{Tan@4P0FaRdGCQRjXcVQxtGh?XaFD)soJQ(*oNXa4v znFjU229w$JY~L9>KAl}QJsb+;#C(#UE{_YdyZzLY_e(*&>-FY8G-y!%5XA%A&3kIy z{C|H?7jT4sKZF`(LRO6{wwfXev9uF$F_**5#n2sCa*~C+!pIo+7s5CE3%4?+$33-n z(xDdVZnHPeeY&er!5By9)<$|@bPJ*&Os!ut(jxFswq%QlP8&}u>fNi9a`(>ma)qb zh%o_v>OnxGeoU@7wyLn;EHOq=UTtRzl{`67C83lAY$A0eJs!`&25a78jVd${Uj*k7ynTK z6L|7s&;!Uzd&0^F!*1P!B2D|pRb+;;u25zWC~iYF0kw{0wJDY;oKIa%Qtabh+s|q} z(N#FIL?;RqqSRHB6cwxcetm~BT_)N&)su^w`#a$B?~r2G@1UJ1J3Imenj~UD3Cc?U z90o`(#Zw}ucf3$H|I$~I6;VuYbO?L9#N8JZ>+S8U0Ppieov=K@@56pMK=f*dVgPc4 zu<%?;X;iE|l*5&BRkc*M;1{r?JNJlcre5msmO+{#-fzJCQP0o!&9oE)267e6r~`E4 zQB!_lwdA!V&vEx7V`&Q4{h3Kld{kOp^NOW}@s!7b+hR)~&Ms~Xy74-%ZUW38niDpVZ5&}I! zc@ek{Z2ZCAHif?rbLEjDOFc?kk?X*^qOn@D*zDq5bC}+dF-Pj%?s;&Nm+qId-!Jd7 z;W~@7m~B~nGReDw>2_dTuoG<{YF?-jvHnoMK34^kW&JzZu#o zhpi^I@nZceZbqAx3Xu-hMGtLeYy?qc-g;T0h(|(wrND1nBzLm~RNK(Dss8trjf;yJ zGb;&y1k>fci1yZ)4s;~cCP|l;y$bbzQ)n*QzhwNPR);;_66$Tli|KxLUx#tYd=#-LY9U)$1IMMAn1#xI(E&0H+I&|0D(f_t^CR>u&$AsVP7Cf2O8u+37jH3EmTP}yuU93%#W)?tU9vKMoR~5@uX^Ev_~|doY}kBNzu)u3Qh70A=L4iqc#%?y z7>O|RARe|%#DAW6gIz@UI_A=!Me;f0yC^Zl{lMtT$HvFU)!QB4tI8GirQ6?*@SkUT zm2W6sZVmySD9L=uF`k0mmt%%+*{An&WDxvR{m`JmA8b=2x%A#pe*_#SHxT=BdW*F! zb(?Y8W8nMaNCL}1yhP=4*?w z+6%a_Vi0z6!)~M22beFbBh!D19y|QrAFhWoo0IM0KQ~E`F7%xW*`GioKzpJF0l_k@ z0hrv{NoqIe$+;7b5#m&tz?cu+a2c8}548_B7p7WIos6s$2T#L1ck z>6N3uuUzO+?sV+7?vmktyZfRxWKwuErz3mGS~n;-=TZVry9XDBty{Djj}spBKd^VI zSGngp%#GFG9;J9#gmbUu#?M(Ru_-!TMbd>=K@q!vbbJ7W#1R*vNqZ|*k}A?ZZoFt1 z+jGfBNsd|JUm;0|4P>mAQj*fDIG6fYFj~sgxH3GE!1pa@AovPHw9(>a zzoQ)+<7u*W`753vUy1@z{&h|JclB}O{(E~92DkeRH<@8AlPHE9LAC@Xu+M-G({9d( zH$OPEEl>(Fb_X?K$>Z1>dHC^$1<613a2MnbfMFeC6ngKi6b|sH1cQY=F@i_So{|M< z%;+f01ZsOQmd${}Wmw`FS~|XZ4*@KS*A0CIWpRP~LxN8h6`_U)ZjiZXwZP4?-GwD_ zi1-*0g%5Ztn~rfDTp%TuaVAxN#24^OgXRQ(v=#vYQ5HBDoRZ+0KR|dUFiEUz3$^l! z!6QDS)Pq{y?=prI`T(NZo>T6`fEEu#r0*;f-5VPNC+)noH&^;owP|^0bCE8Q+rI`m zA`6i@CI7Rs8#MAJN!@7_8>Dj%^Dd`EC>y@wl<9R=CS;_)F8^bdUX;0^h)|o!!IBZk zE=R~Bp#0AU;J7XeA8sx>I6;{Rgnj`g03K2ZaWArq*6(k!I2S?zAr#Kn4l3YO9!?8K z)t}oB9j-p2WVH3b@k#mI&`)xL)0BvT6PKtrb>3VQd@hN;lpzAS4jIl_?M##j1O_Ez zPyyrY9V&;4Rm`~%pvEjt@F`h87=*>#E!U z;c{IK>4X-Rs9j?tSzRN0?k#o#s8@94dj-C9!Z>sYcv1s#@#5I10wi+Ej1v4J2p?6> zI7*l6r6^z>rfY*9s`w3HiMbj}z`u3~-aVwz?S^UAZB5pvN*I$O(_fLTW{;>BHtZmb zdvlY2y?xq$&DVzReDd%_o%tnaZ7WO3)3DA8`I?zd`IU|K2eXkiT~kovRA?RzV(v#M zSWm&35Xo(SWq`44!$t9rxT%y_vHHBUfIJ{Kb-^!)X&1z}H-6e_y*>PPo4}N>B5jg? z>_kXa->LPq8f(S*MGwanSvFBniefgJtbM?rrF~?Qs5oj{yhsTgQ-jV`hpMTR;y}>J zcoT`FtRJ$O6qQT?fJcstU#g^U*GZ{Vh5~@k^D86pC>)4}79<--Vn7t*Q5LEJYilcM zZ<_34G-ENKOtpy3RTEwlsvnKux=pBpKcDW=#;o*#B`!;J(lM;igd&;yc^lv|pIg1F zDcCic;H5U!i3yY)xz|^e4H9|0z{|KzMA>%`Fh`~KEW`-3hH@SD<*HXu)=Ox`p&W2# zAT%e-LxVr~m1DQ1a|xIXfvrsT@9)ByPi*ySE#~)+GE#BK4FEU<_6+ORWKl*xov5IA z$G8}z{Nbl%9|1{L`q^(r7ok>I!)uRdDbl!UbvygP12-zb*17``%ABW7Et**&bCmZ^ z2cy|>HPOn_vzJ-Q3@dxSAtS;o>D%jMZT&{!^xxSb#X> z;9p;W*$~{FDtvj$R05<;!RXT8l**ETn1Rb7^*56&DRnu-n4{ZcV{;h{vldUlo86&7 zbF2O`Wes93GOl{AM-HUhM4(F22Tb=$L&7JsOsVb%jMyjvWFXdE-n$@z4}CC*$8c7w zXLrgJZn%qc3f`Lin|k2W{N^SX&iP!#a#u<4AGLG0+GnY>M>mSjTf0I4f0^Y@hw_%e zMgZQZr$i?#n(IbLnuMWbT-(WayU5ye+?x+HS@c#`P|z_oj|wJV3ES21I+A8p3vxTp zS`S`Fw$5^?oeCv=XB7}%lgX!(jF`ybEAUk(rjUdXlfMFAA4p&DVk=-OW#ve9()QYo zx~)-9y3{JNnw4^;u7jk;TUBD@xXUV0+B!3p@g!-wJ*j55ZJtLnaOv*fJ$1ZM1OEZe zAL&x)f?-)|vrNBdO;_O?{LL``fPzuYc21;MAY00!mj?1!=J?19-xMg>Oqo&zOCmF(FIa-a#s)+$I%M z6U=8h&$_fdZgdIr{EWdogqI~WIK^x;LHGF9W=t_YZ?KnNo>lEyR#%o)1ZzD_e_I{Y z3yAiOq4b8I8duCsBOzpV6=gHwYeZ zw4x5AEFOLB$qWhv!(;+Gr{n!~6Yl8k6c+kg8-Yt#_Ijq7OMoQM?S80(%;SXSgflsI zw6!V=c>68&Rd9oSffgY?g9SXb!X#DG{3Ldjt%%rY5mnSymnFY1mmv1LiflWdKu&w{ zyY5KhRz>A81$LsFh254G8s~_8-c3;Al9e~#h8~3?-|ujeomWUr(eS+6B2!Nt>ibpN zqltOlp1i^yrNnnVi9XD>%67SbkEm&cb$&m13M(tqrR=Qt)U*w;R`$5jwMoY@h<@&* zoGQlIquJYAY0>|A)G5on`d;gUh@DP|1Uv{MxIsdpC4y+(%r@j)f`aoi!o2s9>AP?l zp&aru?Byt{F!OIzP4CSq^Grq%^S&7Hw{L%ezmQ{JaVzra@FYk>b}q1FzTu}rKGuKcIF9V_E0+)uADlK~pr+h&MD6g@6j}xxV5DM86f?XHd-RfLb_|sw z4L}2)C91{+tYljn+uL01p>jwwTNq_u$}($<7t)n)mVPC-Jg&h!U5Huvu9LY}{y5T^ zog{j$m$CIQuBqy&%|n(sTELrIl(v+n00kE-9Dqh6rdajc*1t#QZyf6I^yGtU^LLU@0)EVSTNn3W*$ zQA1d-c_wluwiIqaZ&;Aq^Jb<&&eOcKn#Fu;5A<&v58N$p{qw{0z4Sf1xq>l?tF~Q`NP8cs&SSE1qRL2wH9bEtfI;`qGEIb&baz? zMyw-I$H}NWj=<|2-Hn0Aj@N7fAfAmPB24Rme1&sc=+1;bx?Lf!*7S}I?-i{hvQ}TI&6Ea_*UO(1hU4h zDUhuM=G!k6a3%J`XbgA{-o1k+1&5gC=8DN10(ml+iICObZwLCr%kAUl zct82cY>^}-r1=bUR-2)CPNTl=ZtT+NlNxf}BlFD#+G5DlzV@$nU1v0RS?n5RwjBIr zALGjb{($F7T)#<(5R#yP`QkSJ_Q(W7ufm{x6F{ zgT;m9@-e|D+!0TD8|z-Kqnv_le}_fxnyJ7$4APP?GS(Hk!?oOnbFmC4A03AUoa2}A&sONnw-I@_tc zYNiFv(> zkm&Mciv@QB)HpO5=wi1sg8NC(YMHY9T14^g`?-|m zg!cg!_1vS}jh5dudgY~q8~t>Jlx(ofZsFvc9|0h=hnDVqERBm%Vz$L<tnIa! z>0dJ9Kk70=^j!7>ia~?8**cOaj0jP?Vb)b@}77_#L)V-cZNYf56LHGm6hKQQqG& zW*E%&8APS8)pYy?;Flyag>R60!AS2BQ+I{ygiBSvCC2hnqn9tS=g zO+s2)Wc%n`Cn@KY+$4dY5<_Zi3jQiN|D}lgRs9mnd}kuR|9^zNb8xMVvOXBwwrwXn zwryv}wr$(Co$T1!v2EM7Cg055d(ZjJxixE5t$P3JT2)>BJpDGFjzEC=t|afH(XY+V ztH`O0NpNtMC;cUQD-FtXw7!S*#eZ~>QO2WHpGj>VJNL*%^GP8rXQdj!8#oDdG;+k( z9{>u6nHg}%nIAo!&hMphT1rl`(I0a?WXi~;X8|3?#%rlTYo)*OT`Mx80F!yAWlt1? z3x0}3MR&g5*Gj~e>>HtTU?sWW{;fYL2LL<%3;=U@n>0z7)1NB9DMIQ@SA*2Fa6q(* zc1ffXUI-(ks9Wuw!U~o1JMD436 z@hZ70NA-#QPb2f?7}tXe835qc{=X`606(9!_PBq$8UyiPjZ8apdS^Fi06>rvU;u#s z`$t6?765$4O~8ETO3*xXK+s%X3K#?h0OIG%n)L5=J=}k>V(j*hwBUcWL(Pr<*R?J% z_5UgDMXOrJ?y(_!#r*Y6<0AYe-l@%Jy-4c{#P-m-?;p} zWsh{%Kd$>K$aFuk!t8To@AHLVU1&m#HXR-%l81`S@6pw*Oe5XO;9at)Y2y(_)G{gB zP>-4vxk7AMT_xY#!6Cdyo~M8!DO$Zy@tryw(WqqC1OIdGU5~$pkdX+?oM0g{dWQg2 zelXkrE?apLOt6!E4nx07mErmL{(aR+g2{;hRikNloxSxUfISd!g#(d1PCb<9Il&2Y zF2pwjwm0{;7OYLBzr3{LE^W932J#RBMrSB1Z1f4hYQDdXum!P_wLh6lrQvJKPHW*h z_i|)oj^`^o{TsS}F9XO})dy8I3fR+}jX$)Mu~|lRiaVS>fbH>DAfGOO%F#<9kBDo5 zqs75O4tDhhq*b4BhwMc<@xm%&b}4$uAXEFv_-P-oVLZxM1~SNb8yXO6uM-kBV(T(< zRAog#n>-2qogL!r%9UNURGV9TWk5$9{b_X~158A)p+C<--~28JJKmHx&Ahq=GO(}D zL+K4L%?3VZJMrK9XM6;~D^#9txohn)nu99+;pCH7KoZ1honq6U3PrUfnr1uR$0(3b z_NLrCAX8kgm8QndsUM4^M}l6&2v)T7F{8#d=`ex|Y0(Aw6B~48BM0nZ)6D9A_BTY~ z^e=(ksoYpDQbv6a{2rO6JXGk!AT(rdaw1+gT4l6FKz2wQC(YzL@H*{c#`kI%P`7IJ z>)BQ=0#z_e{Z+QSA+w`HiSwlB_#J;N<#{~HVkW$tHPb>wQHDL@Bum`FovdWGgVD@w&!LYob~t1v&R%ws z6!NR`f-o!{P@Vb&Om3;tB{Yt%piRnNId86xj!F_Meyc>7#LJsk*DWz#7}CgD-%aih zEn|J^DnL!m@&t8syhlVeJHnz1b@1YpZJ?zr=w;vPM& zusv;cy&y0Dxo~Hx;FepvTw_{o+Dl^ebs!nBm=r}&3!r36Isg{As>>Z52U-PtuK41W zveI`OF|LK7Kdh_YQRm%D3i_b!2`5~hwy*mzRVT39qH%Jg_!@t01ep0aFO3`>o-%4>N*aRCyPb|V4T zvL~v=SRe@;^9gG*kLZpBMW*0?b2#+aJ zBMhn<+={#WwYAUz=CJ(roatTP<$}afG@knRzL~j!c{=KTebk}bs)gx|#}pIR9ZTWn z?bAC&R02<_9{<*9=<1!~5VuL|a_Q$tpGi0SPI*!Jg^Ze%2ZT|Zw7M|K{^=KcpHgjQ z@bj}iL+PwuuSpzq1|V|W&ATTSu#|sMJyD!n-<%7y$OpSL1l4D@9g;K|`u=RRX^~Kh zM~lwOEihZd&g3oQ2u&$$d=&YD1CMvqaq(%=bz@Bw1>q3IqU~9D*Yj(a720uQ8X0aa2HE4 z@q|$ZvV?xdw^zory>e1m9-d!-kK@lZo{?L9T-igo8AGty0dos+qW;1OJPd768rr8E z!i7iW(3|0IIgpx(G!ix1(u_!Lz0|d%OCvShA*7B9(8#&CklAGoS)`28U#&scza~|0 zMh-SiWDn2nW$P*GK@3YIrP4c2VdP5v<=zxT8Lv1<{y>}dJy;?{^*S;jmdFVc-YKz#;y7&Yg6kOof8>EV$yQh z?btFfRfaQA!Zi#%O`$~nZh7(PMlfk$*pxqKT`X+Cd^~>rcdT+~3c?=^nq8B* zC1Gd-rOsN#C?N;t>|=*${f<1@sq=Dn(jZrl7R`CNwxR-}9KC41jzux5CF+^qi3x4k zoy5gT!yRUklFp!RxT4kJ__t^(ndYJ@bJ3}fg#6986>Ru`ZL^dayEeg8?lJ?xQlV%4 z!XkKjuz}PZ9bhdzzcHl2N-kXy`tF4H2tEE#t;i_}Ls_|Z5vwD}BR{HAb5CgqB4RLq zh5a3b0@dIsWXcE?hQNDWDggFa3K`-oKDOcqzC?y0^R2Lt@wqOe*WtB5ryeJqI7!(5 z`-HGm!9xbe_oyzXFO1(ZE6#nAEU2N5q>T{s7$KRPRI;L0QT$l=_NoeIplw4uYCph# zGYq6cof+3}lP&p+1!cSbLM5N>OAwlM3lFE$_uEI#Hv8&~U3X476oxsc&oBfvaZBrX z_7+pDTQ4NQ??wG`tkfPxujIH(Zx_Z>^b}kUQKoJNonqojJz#LjW-{d$XNC1n@YXHp z+GC;n5k5EQF_rPr^J@D2d*^yJuHlj!EAR!q3Iv&|Z5ervcN&p&52Q0-{$8s3IrS7V)eBsd+`^u9JH;3=aHx2{G} zV1tSTHf7NL8to#-8B-nq_<7xF73t5}Gk_=X5^Vb91hbmA2{wX)@=qOAt%0LxU@%dn zXPd6iYwH~f?d^$j{zvy8G3`mDMfuGMSF*DPpmjO3i8=J(W~~a?S#;ru-8P=WH&#b# z_E#7lg)XguHriPeG*WGOB~l&NWu;QWw0dzf1jJVZ z0fe`|S&HU*lfo|>SEamxx2dxW--A`=+6hN^#k`61xu1QfBmf&SV)B>mgKscOBEH~# zq+>Yz3|JP9DW6b*9+2Axv>Mxdxy;7TFSJ82&!|Tcss6N2G#%!(Z78g-Cdu~ZY{4FS(Om{lWC4ZN`+3WL8zB~&;3;L*on;JXm8QMBKIR5Xsb$8_dFqw0_o?Jfz%HX!d z3mm)AsAzy+Z5~2!IXu-U31diHi3_@FLzCg9u))h!^LwG+S}5t}XSU;XR~JU9!kU#) z>!^E(FjUBnO9u~~dRAzehjaw0o-6DjTxPV%03>5^x~#lezfdbk4T{AyVau1-E*|Qp zG4@bzuuti2PcOh*F@2(Yi9F`;;M~V9^^L4Ybl!HzvFbi~v55O|LNbFJ_&60pqK{Ux~ zx^Pxey0hqX6tQq=*lNv7L>;&LArT2!QMek0Q}1C-U#!C?>0fxGwjo6oVA&9=Sa?O0 z6D(Fr=wYYVO;K*qhCOK;UnlAX8X{%N(ay2P&#t=yrKW|!xv;9{yNz$zF@thAhpS6s zF>#>@ZdamUHs+j3S4ud)67vbnMeT^K%!K|X?myxIU5F?y=enC~Xv2l{|F|@IoGr)( z5CEVR=wDsh{(rdizh_8)@{@mDYGiDu@8D!@Z1cbCvgiGaTdm_2{&8#Yw!{;@%}9bZ zBv5z69|~!2d5O5c7=jsVI_i^4F-^$fyFKeReoChU30FSH8;SGd3~~;oDm(25ph%P$ z0n3+9t-sAN3(puSQ@j>gli2MvWye)$;+aUfL#THo^PhAa&?k?!?00B^ApD^}1?Ce6 zpih={8IKxgFrliW*1hzBiPNcCVnpwj+Mxi@U zy_cOxIaMZpPhUfhC$iHS81QGjCJTUbUuk^AohCu>#V2D~4g%UiD;uwg%jZ)s6ybf8 zoL`geQf62{x4q8NDl`Pi7n9sSm-N+NStu3Gy!Jy>`&@Ut=cW`Zvi`ZcASM?#r17#P z31(w6ZLp3(=fCGZjIy8;xz>@`)xeWM{%s2qY`tk))56d30rrnqC-eXKTK{;p?%%wc z67%nYit#UjYOQbMtZ$|F<57qIbu8FQ_J1OEQ(en;oejkYKJL30Y={CqW|N1m9N8$m z!$bU%&_xv`gs=?B+A)z-q-YJ(`s*EzzJMb0Pjn5u(BljVw_47)E8P1VrWnWe zefMl{Z>Vh&Cn7zuZn|-7Zw?*-JH)$GBK@s$2@KI;>;qL0Lj4$`pVW;I2BMr0wYvoB zNbVtGlwtyXYIexGyy3k^#j4NnhdD3%8XHB)$SK8;#AUH25q!YYFk85&kn$P^If`g^ zc~SKhGm<33LI?$3YHIsfPlHB)G)%qrFCkiF>?S`=k6aw(qsb+KV6TO3oH0dS{t%Li zMstmE;;q3x*crDq8Z3b?SEquB)*$|&G~ggp za!_f5ZPZ7>LBO$^oxi|GvFelibAnsOqL8<7xw3FRmmi;YjwpP_bWAO-8ak+N9Cx{= zo=%eIw<1?30k`%mprN^$SF;us&7C%c9n~1XN5Br6UN3A{t5=m4r{1m0m^vyt3p)|2h?Hq9%CcNVf~p za_122#NJRG$io^MLZ~OGB7a<^A!+BP;car+PNoTPumDcSLYVD`A9pFtxVShv%YzDY z1zH{U{X|6@CL2nb%1PQ&i)Q7Uy2i%UdHW(()9j!96Q36w4i#%FH8~-%^+n^Br{=86 z;TE^%Ok7E?R=*TB8Ra|RjWKgN3m$Q{uu_G(zKI!D)sN7A^lijJJ+!P2z>GUDb~pYW zABJc<_OuPQlV(MQp4s?Ox38L4GoWpSGk!wj zmSQSfG$+IPa;&HGlkk{VHymUG$2mz%$QDJJE5KS0sEVvKbYgusHl@MA$1RxBh@^Pf zn#Vx5ZZYHfF}3Ak!c24zl@GuL-_1U@9H)s@HdS>rU+0rGrtP{&Dl1zoe}#l?l}fec zhXoafC;PamB-dlbkOhWPV#SmgQvc?)W65tat)DF`Y;u*y68kD8p!(b=3EkXrF#XcEBZ_^gRTE z0JR2+y*4ngRG=5obR~IXn|=7vUO3tI2xwnvtCnzeZEyLGA*mnm zW-s(wKBvqA^cG3SUb^EpCqK) z^mMx_V)M@a?9r{TqG+O6P#nMKk8P^zHqkm=>~2%0_Qixa@KdDo0M6q=|H1x!Mj+XS zp2#zKy&?i9zVj#JNgr_uaBG;@bdIn+(E_2&oJu9VQm$Cl+Kpc|H3**cnnAJO=H%_R zM8k6YCLghxZ*y3-4p_7M8~|AByWA#h>e)0@QLwy@Pdx!sR+EVi0$mrX4o&)9Ed+rOI zS%pJDr^TP+?-<)>Rdq)#jPz4oK_y1j`Xl@4Y{ArZ}otnQp$Lwg50-KA&R28igN(pgKm z@41J5k&>4horPpILF)ASaTz*9!5Ii_NKfdKw|X4~PTSaANfFR^wGC%CDh?%b>_uh8 z)gzVF=g28*&loJY22+O)C2nR*Am;L=`Kgnn6L7%CER2V*g-;*ImI#bwVIs$r7EIAX zLH^?9i0falsTB8{T+%tqgTjzc8DhcrkIT;Pb0{*5;?^QDFh_-Ijw#$aQ@1q&Iy%{A z7uF2HIkLMoZy|hG6ZK}%-|nI(a^?|e1xOPKc%UC;iAFEFF_77J+Kn(|!rA1M%e}^ZQda%~{&b}W(UhTA5dI$+R{#EhBFcFPst5jVgqWD2bvfTI}s_xN%0 zalIdsd?W4kzMXI6(qG4c2SBgQ9by8KBbbkRuNeQPTp4Crak93e%X7Zt)L%W^qFszL z$bMRephg}pKHe&AweY~p4iZbdl}Jb%=h9i_)r2r*QD;a&|~kMW?_6V2NZ2ggxj-2;#O;p6>tuv>5L?Hu3<fuDppW7Ci@58CTmHx< z4==V?dsI)bdDLLGpY>eEDvxHIn3w4y>zH8Ho-HokM@(4g1OI(jqR`Xf3g(_E=bj~4 z+BB08zUYt|d-R%u<^%BZ!UOmMvU>!bNje_if_?q$q6-?|x+&;uj*mEt!ApyJ&&`M> zE5QBBN)zNo-6no?8gk551rCR__S0|O~2n#^zY}uf+ zQ^>(yrSeGyX#A_14Hp_^NcfdPIpy8Bbc=!7Js?OTV;%_bdjl3hNR!PL6B@{ zD$$Yy<7YY+=#~^ z%hcMrkokH1an{Uk#p$=BgpF$y?h+{BHHNf8!rI!^zGhbZ_@jCjeCUnegUJD}X=L9V z5-A}3P%7;xF9J#X~IQLeI$JroX$_yfAi-KlCEMtOF5h@D|Wg~wjb5UZ60zw~qA;d1fjwDJsc~j-44L3Am!|=R8<12F#Qi-Q;+4C!klvCTCG+lAwlO({ zFZZQ|OqLsUFjzyub1ZpkfX)&F zX4<9HIu$&lwWGEooh+qw_jLfaB#PdY8MZYcU{V|7zi-U*U4H-KAXJh~LTUWaT&AmGRwcqOSe^B~=zhwSD|LPxO zj!y1Y#&kbV|EY^h@h`kyt-5Zr&xYU)ALsj9ALJY)g?QBUa=aN-^C7<%Xq9$mIG!V6 zMZ8FAE+(4bdn;aeG+}wFnV+~<)#Rit>lgFDF!&P}#Awb%J%1vx=F^RvC$f1ljb~Sv z{=>1m7Omur7`;O9&ql!HQ6_6FU$aGEctWQyfwW2MjU2d(M8Hti0(I}9#H4^p85eEM z(J0MnBYj?RoJOgvX(kB-S5sX1nNuHBzne^Z%X;Q|ruwa6rf@~kqauZfebh=Q`2@A;%u}CS$D0GI@p&3T7%#?h_!JRJO8Rtjqj_i*D(d7wrcIy_l?n3hIJr_pvK<7L;*skQ^?5TaCJdEd9F!4E<+Jb z)RdsPr$*-u6nCHuS4Qf|c!D^|z2WYWN}}!f+u!v(P8orw4m)S02E4@X)kd6=`WJF% zrf0R+TwzpVx-tAmAzxranee$e_`+=}YXObb;ltn+F4}p9o|6yd)g-z#Pew~iQT3b_ zU!NsN)|=-T=(|B#vtk%lWD~hy&pdp5msKhbI~2`#k{jo6i7_}N2Kn2gmQUTS7IYse zQmV*e!Ke`sU?Ktn6VjpRua?-)eD)S?+Ju4w<%&i9Hp%7%scZ$GpYOp2}# zXvTT0+HZ@(`|OPz``1P7j)S91{C}{mUpDi2=Vy+i_`e&Z{|S;1{~eOdt@TZf|0BZv zXHdd!@c*|_68!&UPT$JtN7>g@-^rNH&c^gVVG~<1?SCVlum`BJmQ15FQb32LJ+1CW zeyh?(Q!5%Z93&mB{6-{t=pHQ+#nqK=k-B~9P3h;B=eMRSsRp&H$y8Ry^wv8Ga&&jSpJ0A`NvJQqD;-tG;*x)nP!e(uY#a#1D z^TC3v?*#&|_X4D9>j_*U`Os{(=7kNq;*l1eMUIa$+jcvfw9pABLM6B4j3a9_d>SOv zieGuA=u88c-gl4Id%W-+#;s_(T8={ZRuzY$_d9*gJ!VbJ5? zrcNLby;R%lWSV*(NNeZ@v_g7|dSmaUCDrGX1{j$NQYE$d&Bd~67l(d>iC2}hhg5M5 z0(Ctg>_lW-#`ve+af7oC9Krm{`Ey$^ zw$0m*aCgN3bXt?(;5K|T<7c4knku8}mpH)7@NCq*7lQ;Yw$9nqT*srOZR912BsqwW zA92Nz_sZ50_ggtNO$5@TuNYi7CQAeNV$Yf8U?q-dNFC3+pStC~V-pQt8MLF;|2>%1m&e(*Ot z(TASf&x#OHnF+Dlo^^@+5QMC_WABephopHCoM#V)VEyuUDvQicPwU54FESn~ZZ^Ev zcp}{nvwR;<@F;Ya5r?-5Jhd@;Rf^hc43&dQV4+96v;4j!)Dj##bh{xi+@X#0b@id*m?cw+L9-a91)*68BNXoW;uugs; z2>LuLE^}XP0ac&W@1+cTqFVv(;v!LxjegoK7Yjs$hTsfZgHwL6MrnAN>&ctrJ^4wPMnIj;9qI_)!>?!)&c=(1!)~1HavA;7OT?>SQzXee>6024p}F$<#*lID5*UdX-17stycrO zd7$nC`z^3lmfk?-m$7w^z}ekn*EW?t*D3KU#}#ph=-Bpf@h8~Vk`b0(&tVg=`0@JB z!7%zT%Xk>6q`A8rT-p4$aj7E#ESzOXs#`OgSRr3x^iL?bqnl>mKdb{20eFB;DGjiEbSmiIY3(y%zFd}-M z;V@u4;iWh_Y*qnG3cW%0kWx*-*AnWH9*&uz52c4b=zvaL;1qAR{Q0u^xyIx>AQwO2 z0<$KHqZ8}*AV$XFWdKFYp;5EGOH>>Pv!BP4(-mxDoW-udPM-E~^8i+S|@`0U8_pOsw1rJEgF;6F(id5>x z*mt!fOvkyMI@vRae`jN1^c*=AU;MnpTkA*L;;A>cEqcU0xR9TF(yLzO3r6>iNOS-M zjA&na;$k4=YVif{7-}HO$lQv)7B9-a+ehp%jBsy)lrq~Hv;pgAV_l20Esq?QFC5i?Y(qQ(tdRyr&!!9en9D}+ z7pd0;;cNR&KcY|tp@g`75@zyiyrfMgINLw=#DBx2o&6b3;GlKV#VPlVD!jll5Ga(QdB%1UyA(~!%jJ^3L2PMx_P68|498Z=tct#d~i>?hhBk}=&oldVTSwM5V!){0^lrSYfec6UWLwKWF|pU#F0?bfc;G zHi%zTMadV)Ex~p3+W^23>SoagaGMBhHEpzsd>Qyg7EhMjD&xJ1p#4 z@`bN+eHLCNC_AZ-JE&2bD}%a+1?T{MPuWUHNQ)`gs$vhBL+?IX>-js}AH&zH!K=sw z@nIP;!k%g(gk=Oa4Y)0H?3+LP)uvxKyG=Qmm zRJWKJD^Uz*Em&qVaLDeoOYer^J3W)Ix_UCpucX|Cyoz=0f*EK1>bhTIR0j-y7sC7cs+ef@Jh7bku(~n zXT&YoujK$$lp;3}Zg33&)ncXZJ#=5m-D!?4&JXBET}n|{aIU4nTpF=1u53sdWlu3y zWOT69_!v2mr)3CQl#X~@P4z<884Ee;-{UyL5omoLj(9wdf+?87i`*a=LrzpP>^EN7 zJkG6aetcT=u;8Cq1&C6Ha+ThEvWMeb%%fP2_7U4O>#$4Z>UOEZ6G*Rwv-Pe!!dgEk zqkajc<3E(OY<)~Tt5iAtVmi#_dudn58i)Z0^H9r8$r5ynqr)h>(!_8{td7k3F!;G? zb{gpN2Ff3f`_3Q?^nyJ~4`&)P+iNG1kD7V~l1qot0gI03dPvtFyfQ7)5Z<@*jg(M* zEoyHG@+fU=Z8&?3vqREWO#-P2Gbn9NVH6P(h#0Vycj|Y>$n)eNL|}wxq#r{$9Ld2* zN|QSOY~E$MgSnvWi-*j_Nlrp~<-nA8_QJRLXWmf)0mF_1CedLC1f_QYi6ky3DEMq8ImytRegC1n;ZR;->1&r@&x{R3|y?i`{4S3q!yN zC3vDzTMfbMGP#Z?Zu4S+7}#B5515SEl=UBC?8H81X@E`Ik;ikZbrRX1( ze-|Ju!-bacsB)ku8M}N%Tp<(5?xhf?2B5!3q8dpn1Z$dq@)T}h(d4ouh|Cz;E5y77 z9=8Q_5QM{@c1dS?-EW_?24gUt__OU{4?8oe!Jm>vQ zjf9K(M~Xk>ocZtH`Gv9dlom&9kmEsRswd=?UdLYvxV5o219vZ+tJeJ$OMi#qWWZB1 zL^O#g6P0tRjjMvHuUh=M_ZL+(`x134^NQ~te=8;EVMlIHL;pqu$1@>bl(V*!E?-dw z_FL-mbCGvhRBEWkB6kXLU~CpbX9NyP@31Q|r-dD)m&JW6E><+-QFpY@d4O>nHa`J~ zGTT^P?3h1sQR@==vsO}Qv-Nx@KMuCF$_syL+)1-E*e5breGoRRW^TFUsoF`YcD+Z<>pz*wG8^XJlxh#Gu!|Ec8yyjnUk5~n0NF%@S8wG(N=_MATIpXTx zc1CWEmYcx=5()wxr4+dejmaIs3oySv!f|xgfnP+9GVYM2lRQytfHQ;mj+G$Q1Bm9M zBnlF5H|{&FO_DQ11vIAQN*Y4z(dj6zt_dBfCHDREhWH`~1mqoQ^7Hoz?11I(eUXS>4{hm3h zk-9!v0=V(q*S*X+{Iobn?a7woVy8E;fWptMhQzx~dK?Bf7)*VL58QZqg<-;x?~k)Yhl-?oD4Ev`Bw6H z&U0U!Kt5qe&e?h0!u4qw1aOm#c=mwuN7|TYs4vJYM@pMIgI_ z3DXQmKDxh_$T5|#@%uLGzLJ|j!w2{D2z%lmXuo^c7`-Jm<7}$iBjmfmEB9V{SFMhB zk@XM}INbXDfSak&SBH4rOf`_;R z3V3gY6u^D(KPaUNRMl1X5;PY+?sH0^FJB8Lj`M)}z-=(x!oD}m$p$%7z&k(|2O}lS zdoj?YgN)mzND%fAyzGNHsV4@?_#6?dCla9^%5jb?aW?vJlY@J2iNDMz7zXth5Az9M z%Q2s4-JeiUA=>%~P$TCNU|mJ0{LMVOkG){h*c0D|`h2jiP7RG~UL_tvQuwkYFj|D9 z`E*zIC*_sPc$^Kk3Qi7rPnvRVT+jWl6?e%HKbi3L${P6Px#UCkx9}~lwlt1Ht;?2m z6M69DR1l3!9Db$y==(R&plKEbsw4{e6DNv#OJ%z93I*cA$VtuNkdg*> zQCVIZ{z`KPrz_&o#G^AZWCx!3xkWmUwe&f?9$4BDUU7um0l8A#yY#vu?M>p7O z3}&;!ot5c^)Y<&WdsBSeW&_5>HvVP6sCL1|(KZDtjg7bOTJ)p#*Qr-l|I2C5_1dKe zP0&sd1}im78C659hls)6ghIAB=$SQ|f`0w{p!Mfg?)G{3O=)$BKkWKMhjnrkcdZ)M z4d%mj4!#d8Ps<%~7W)7VjIV_l?i7h56jDw1!O$NK*YQMYZU24Z z9pv3=be4^mozB|L_@5gIM}A)@Au$|mTED%DDsuBU=}1aLXUdmzJeX=LPwV&~hmqb! zcEMM3l&XTB_w^9H{;KRw2FPdtG>AO-S!`c29|e)epi83s44TWJ4URI~#h8_hmsZ#~x30EjF~NcZts(pM%pOqRSc z8B(1U;C}&Z@T2M{0Cx|Y30d~k#ONkOr9ouQ-~gxTpw1DSU$_Y7O)!q z#XzVD>CmFBwU8NGuZ{gt5O_75saCx*n5un;p404dIO!(?zD(yDS>(#5am#Pfw3{W_ z93QT_nOGfQZ;8)_@baBVtG|xFDj%fUlOB^?q(PYKLI%FJMe#q!QC^uIdmXd3#wOq#vjJ-?arRu$0m^0ngz?VQhhHcKYi)YX;u#v1#$l%89z)2yE$}7?!P? z8{W25Q1e{?y02TvT$|4VwW;P$ZTKZDA)K0NI2rfh zx1aDB78rfD>@!#%^}@$i8IV{jI5kLz7`o17mC-b(cUJJk30+_pv0p6k2N7_e0`KV< z6o{*?FXbKx8UU-_?v`c%V_9Pn8zlnZU-W))*LQRky7Y*wfMp~*j<~cqAX*-IQy%KV zRH982Z_W3kbi`ZrtCe4HtjtN4z-9IND=9&+GN)=@r#NVj?4y6?^{p)A(OC3B zxot~U>2f32$@=~*ZEI)Ipb9S}%v&&+?Tigxc8;}^^Cb;B)5+1w$31w(%T0V*U0I)N zWEsA&_?pPRY>e++gNS$=fwyceFeL1-?4e#JGoIQW%~DmN-BFaj`nIBZa>to-x$^@$ z-;?Ns=f;8@!^X&o%X8dzODjxG5uJ80!S#ACTIeCIHxX%6o4*E2wZG&LX(J=`dNU)T zZD=L;c0<$hUU{fh^c5UVa>}~!l~gBLS=>{t5Jb+6G#+&YmYUP`6!%HH`F~wm?$wYr z%UQ&No&Uwt3drnn%jtq{y*&$JoRIMCG)nLYe=ZZ0lke@OVD>W>pt42{i#;9eH(~w7 znqNdS8R58~q~*`Im}&zpB2yg*M$Doj(Ndz3G;MpHF+KiM_=FJP8@S@b9DQ3n6HD#a)y9fW_WOc zcD?&qloGZ@Gj`{r_^tRh-W^bU+pPaJK4FO}l}-rV&eo4VB7awH#nn%wRG3M4N!ipN zZ7SNrqV&+EYv{;M!f|Q62{c=w%Z(JJmiHEQXgEHRo)%|8fzb2ouRMw7CBVhviv`^3U?vRy2-Q*SO_YAmhNdNS zmplr|seeglRJh60bviCEhhFi(SmISJTe?~yWL(kut<-phzbZzdT4CqIL6dzKX^)t( z?!HTDh?dCG;B4Gr8uqQNh43n^llP$8a8l1V;WI}sJzvTwH^SL#`%9j@h>$I?kR;_d z_ysN}6&xs|O6ayL_5pwN6M&%(ysK5{j)e*oU3pmu%W$0|A8F=J+Cm&4AWpqM&n~E7W!V^!fP|yXocQEuKpNG~A@E&I zZd8XD--Whd{k4EyD7CtaY>94W?$t}E$K-@ScjUpE zPJk5&o{lgT=4&#vm@iqet6khtPB`Ge3)EPA1+aPlbTX40SF}89sx1;--=%T~RvX=q zi`Y6wJ&5SIokO-^I8Ww-+8^-rO1?L-uApKd2?|P1<>8TJ85Q6K?0Q6TK079Tf^}8Q z36Ayj0C;YN?{Nw(Ax-7C&B_S|E=;iyQ7q>T9csE=)}8$c{sr}1Ab6?bS<$&88`NvH zmd`PfxxbrvT!^AHYZ*Uu_(3>FW>V8HajW`Vq!tVkNXQoc+#83>~jF90Ab6p`* z;T?cTrP1cS!+67qKMbMd@zbnje_O>f4ew(T>V91v2y|>bd$bZaH|}u`+EoN4=La>V zy`;rPtvT2es<;47_WPMB1sb(caz?3&V!6f$C^6(#3N}Qfe*NB_l4qMCDXBMrL)YOQ zi!0&69~KPC3xky5m0Ysu?35=?a#`|ys42uKh46*wfp{i0!=eG2Di#ySCy*|RGYDN% zS|5^`TB;AZY&hxflEyQ^E|$}u=WhnO2@u!}E%J})RR5=LO zTP zR@xl}sFK4@T-yi^hZ1R;#3`w3Sw*uMgivYjuFC}C9Hw*-n}Yi104=Q4hi(e~+EdDO zuTxX`CZ=j#M6P7GF8x#D_D66convh5n94?t^+BvVXcQ?Lnlc?Y zsr-+jMR4xCcrpt#BQ+R3iRE0wET^m+lZ3Sw(A<3?&z_aLC~VgCPAix=P!r{_EoV*ukc{KhD0onv&Qy2Jb&(C3;K$w zlS(j5*rpYCDdy+Pr$`Q`Qs$AYUoj(^Sl8Gh9nHDr9lCTLGwsB*6qZ4+C&YeOr>cz} zaC|t(Un_~4ksqx+l|g%faXXAWE=arRN^51UmC-Ttkdu+Y+yTT(Q}>>nhnY`UX_l;p zn_K48(My!Hlpz~DQtd|9>8DZX*VWjIO%gqcv7T(32*3@J(^W=*xl3L(>-TyPDwIcR z)NZ3-rb_qarkSPEXMWG0UAM|M$1-#Zja4_fE=f!VQIZe8wz4pLF66Hmnw_A+CoiwKiK4Ilh*VVjv&bY zF941}alcVRP=TBP4gZ6T{X0BQ1~U5^*Mi25jIlYjxrUnJ){ev|LR!nnP*3T6>QN2M z?U{IltO{%tZ`5pcs$|3x*=-alNov(vnnLa4&>hHEZaL1U;VA33OT-tb+)fBC(&(V^ z6p~X8>dlfIGt4W3hX%#nh}K5}N#a9r&@z8e=X>TS1b=^1giIxN>c1@0|I)r6xW+oL zjLKNLJM9N;D?E^GX@932w*o$A{dK)`w*_3szm@rdH)ikgMVW#24RrPaE@3xDsEqgT z@hVSUzj3X7sgiovTg4^L*Qf0rQ`U{Ks0kU=%zdhpl4FV#;#ukU@s6omA^3B*e-PFI zuDGdqF0B_;Dl^nLZ>PS}*jYq>9WUmwDX{m9Op;lMbzJASq&3<=pJngpV5K#0qd6(~ zVUncG=hMB9*j2RO!J+1G>r;rTMm^)Z$@yx;pf*1yWZRyNc9 zmpVKYuK7vSmFBIsB{(&Z$MCpSXU97I@=YULXJe25(AG*BS*>Bv?biHQMx!%~H*DYL z)1+77TI|d+w+?2K!g~HN+sRZ`7afFa@iHqvxFvqFjC)Ki+p03%ic4g0poa^8I_a&u zmI|>)9Fd2%46!sz@eI%W#Kkiw@sqgW2#?{2huir|eMhr6Me$-;VHt<4v`I|FTe{;i zqHlOCOG%>*C7Hh*jti>n3Dw>%x}fk8|H+_6NxjkT+{G)x5=Og3kfwE~@cDM%Xpf1) zCU)Hff*Tw@1Xsj0$Zt@(GR;OQ#9rVyKqVC5QINu_4D_rs>KTX}ip1-Dv6!1R$*AM7 z$q}VgCbT81yh?JH6Dz!RG1{$wT&r&Me7CaZqkp=Fd~WFc!B-3PgvO2SsKpHU`)ebH z5>C;+0p<#LMJ3^|1wt*ENxRV1;Dr1QUN@S>VTU@*{*m00-F{wWQE+Gw2FFJ^M-6|A3Obb_1A@0dQ~f2gaj zP8@rSpY!3k(*DFo>xSqcN0_!rRgi$uDe@id8#YG+>m>}Glh(b%_*U>f06mshKiP-53$l49XQrazVu-L{2%*KcWiY(mu?E#ISzZ^!H_ z3?P?V>rdHZ(dHaQ=wPvYA{?Hdkzl>5CsMf;&|{*|1)9LTp^DG!U@w8!vxfzZD(iHM z-5B`O_}ekQjPBDT+Dh3Z!m{hFJlR^r2Ene0 zA4mlala#!5{b821N?N7ojmSplH7ovXY=?9wTi5=>WvP{EMr+2ZU>sNutN`k^&0Mmeb|5`hgcYUJA;CEfU$ui3DEG-l^mi9>6NqI>F!=nc#Y;RDN} z3*Z%<8O*&}R78?TCZUk%hnutZyO*yTG=#6fF! z4UU9rX|dV4l%ZWerI^U=Vgz~n5ADkxKew0V%th$V6)*i#;h&nE89SJpZ4hX(S{}C4 zcP{_=j3ebHu9!f3Q6))ALZd+F`C4X7`?-Tk&^eA}-+-s{_3}9)yh12_2;BsRJtuqc zbdk>;gBm<3Zd3XD2}ecgGrj`=vvogeNCahY0^l;U7buq{S+>YRr9`rPD+YahN!+x; zL9h(ItDlv9Y0m^Y*WFNE^34_Cq1`>uQDspgyGiPcTvKqNF9J+pIba|J)f^+8AaNQN3ey53MqGgRLx&9Y%(0NY-MWb{ zh%L8YLVF1vT&f7^sJy4u#-e-&)^sPvR(BNLEaWGReHqft%8PQ=F>eU?CceywPJwuo zMn5f+t6OXbL)-GgvCDm7d#}ZMsix`PNiiHd37i@bRTKSCy3`3cM94qBqj8QQ%lL(& zdo6&!o$Cyo0}9{}9IZ;$z7Ts|J8W+No`ZKlj1sDhBC<{CRt4#W!A>Db2u#1og@!jS zN#tJ@wsgcEw)%9$ANt=Gc#tZw6mtYhIvWu+)uAlXy!MVFVj9bQ%j0OITmSA#ZqBRH zO2-5tS|RS<=aaTcj6QEi_F9R&#?5|!xw*tCvs?P-(^G&{?dLB*hylN+D_h*AI`~eO z$lLZV#@=!R85Rk~iuC9G^T;snUzD>PqRxGTjx&z-$as3^re0UcUN!T0rI)O!_vMp! z9E1w#3DP^v^Q`ct^cGEw47j+AbDll*47x*v4l428sKun;#OPzoHtl)tjJQ9wMa|%E z@2|_%PC231hN71Rr0PiIYjaFVtc;&-bJ;SL(x@{{7of zGL^ehk#{0nVREu9raE=D()IUexC*$-#IIlb(!$j_$L+Gn-0P0u3fj!ELTUVzJjJLF9OmkdSBQ z(+G+@4_%x(^1lD8aMG_Sc-Cg>T7M6V1w7+zdU}7FUQ{Fz|3IU_piT85DTYaLmTw}% z$x>RHm3-;j;zTRtZ|@N=7*>hX4Eo99Z=%{p|oGI7o-z}nU!lp zKV#e~i!w}Yy>bWLO2D3_58FreuHq&)K z$1&I7RTuaNE7Q`ehYkzVi{;aqADiQ#^>!?N5sopj=cw-s4f^y)2_#WeQ4mJd07;jO zndvl=m{CjVuW$By@cu}39a*MPXV;kSbQrd%v~>3o323Sd)|ZGMceU7#gdK5GDLt+a zTxZWAXgGYd2S}E&?l+XaSPm5kePn_vHuMrCnOhH>r39$JeMQqoCusWv+nM61^$}no z&q%EIopTI>j|rY4Zqey}8CKhS9H$p2rdT)rxHLxT`6tFybQy2PteJ##N9QH7Nq4ku z!s;y5up2a$$}+cOH7<=~a?y)H_$nU!JRqh#Bx;A{$|}bqzQvx1F-#}J#?;wC8)0%o zgY~-H5^bKQ#-eX9qAqACN!MFP0V#+@-e*%u&RSwY4%+?@I+%e~oXaW#oR#W^@^8(^ zhdc9^@}}AGJ%$0x7>`JnABWZ=e!?Mdw9`wb9QPry#P^BM3pQ?;`b=;t=Im9xd)rZ< z`gvvtZZv%q1WrA`y|0Lk!1Rq%@v+vAeqmJoY|&Plv9F@;JbEZ*OZ1ItEpfrE-SE!B zg6TCwekjVRCIoP1yt?i)`uF{sQdV$E!+{##B2&sPm$J zYPfZ(N;3?!R35JfLWBx~Y$4*fzA@%$FkI*=0>?&GPqI|LJN>axZ#+KRsltA#xoI2d zHiVcxFr7L)#g9g=8!QsL=U-Hhbz7|DT8T|3->6Wp>EWY3$*6Jg>Lf5C-8=|udye7! z)0W)GOEC`jM(}dn?8-1gFpFge*-QC=V{%SWTt%Fsb9?&qU!908IniYB6p1EzRdzzAyRiN1p$$ZJU3 zA@88cQrJLbnYW;H0OJR4)`B1A-nMN@u1B#*F5Ls;pTB4CNrUMmqSGU-U4NvF{*L=C z>1#nlWOG)C*)~QZ1kvxre%r90lKCCGPV?Z^ZMQRtFSfGnSN5>PTP1PEPu>*RYw8+3 z+N12mx0$f@h~_<8IR6319TSN*$`1;WTT;=59@CCqwPZYE*vj9Nj>Wx7&e^_Iph8xs z+`3!DMsr~pnwqAm#)N4HLt-Uyf3R9 ztaFTPT55aWX4ij8Zdw%3;%8b$oauq$P01OCatcfkgLT?Xv+@b>#%F7$!F!+$;a(yH zD#W$HDb&w8A@N~;F`dnp@yZRJvE1jJVAjZ)l>^xk|JTcC>h@YAKkiuFpG*Uu>WEre zg<;FuVxd!q#xrk-OP*PJ@BRD)YV^o%A?)Wy_EcWL`pfz z8AElFMD>i|#c0LC#MjJG)ry6Mj?^6T_mjr!BX`Ln%3N0;kud;FA=5DN4GU=WGDzx! zby;z;R7wLraLsWe9>t-vtW^(i@unxBheNickrGzlYF~=(lO3)MVS`!0{G9}CcnK3U z>q|rc$=_yjZCbWSZWTAKl#lB1k;v$e^-D@ywwl=PH zWZ`3KUo@YRP)Zmp1uno}_vGNx#R5%n-7LP$^ysCyv&?m38PAvmV&#fT`fY&a8Iec_ zRkhfNS+s|`hNSNh#OH<52e6$J?lj?!Ea9Luru%q`{!xKKqg9{~$Yv~;sIJ8AwFn{cObM5z*hwEP|D zgWZK@&(~~8eS%DRL$||;56+yaUyAGjJ&7Y2qwmfKZoh}%ih-3zpWw0hk-}XGvD5cQ zVyHHS@+cGL+w>R@!^8ry^HAwaN8&tpb=Rl@Xc`VOB=j~h+!vmCTR zyctL3UVx+b;ax|1sp~BUoz~Cn46>bx3|=NAHFwX3yspH^D(u>7h)Za6*(pVLp@nM-hWWQPJ%8tP}kKPSmAN3sR5 z5l-N3y1Ijw=;4ZgJ7m1BRx0GeYD$93@@Wa~I-LPZqtM>~jRQQN4Zw+wz1kB(&m&QT&m^%9NzD@i|NxhS${3>fqZDBH$6So zTcYE**kQpm=;J;Z_W^}*(3M&t%`bu)Fu_Et4!R++8e{JqD;9!m7E%XG)mmwfwyz>x zsBNe>uyAm7rS}_|tK(k^@1mCvM10YWs>c8Q?J#mYKKxJj1b&L4RC zTmfs{cq8#0aj5D23l8V$dZHd4SzPkUN_dh|g_PlU~{JCaNF zIkx>Hw6Y2?a%#LyI z(j1l}n+c7Z1)jX(R=|%GnP_(6g3!mJd2)Z)OIa%J?>tK{uo~(GfdI)SvLCJ%k9k0w zOATf(YhJ+Tnc-7ED|YB3T36AUCLuB1n34#8UoGYKtY7L_nHCDwb#IaM(q`a(wH?>~ zy7mhV7oazu%DpSoz?o~EjP9NKn93_b{()a3^!@S=3&C5|{gLV(K3f#N%}`G9j$fO) zf7Qb}E=eZ+B{BRW$e@QFr~TPb1=uzoiEGk z@fN@Gt;_CfOh#-$^c7@LxL1HA!APw}J}p1}ip}7S=;ZCHp88&KqBy#VgZ~Tnhku(L zi>ikFYbo+rA^;5J%YIr9f2y5vPU9(;Zp>bHe|M_<_sE(2zA9`q*5}7}0!*X>-3{Dt z_)&)$!nS=O&#ZEkF;2t#PN%UsUbLgLj@_&%?)Q1>$Mr?J7C9t>V~HJw*}0C8>#B>}F%0 z`^DY073KJ=sJ{^zn;6>Sa4Hu#b+Pir2FCAiY8;&ZwSL5hu#y*|EY5uc>Ogko#~nrk z3;azuErUD+qN@Ee$fuDm-UVFLI)aj4lC}CLlMS&PKS!ulJw=Oo$M(Zq|LdJo`fWWYX>F!I zhoNc`j*u*rse3271#5hZ#P^;PFZ_oAAmF`q>+1iYtUlf&2>n1;%MF0bJ){UNG$ZE5PngqDMa{ zqNJJGASR7Jxl_F5Pdt+Mk&yRMiO7Ms{?JPkr84E?XGeVIE83iwbXgc}X*-E}bs3*; zf5li}z^#CpUj6${>Sww(F@ZKqktSMhsBvvG=sV;ExI!gW#-S>JyMOY@DqHY<=H-IH z)E{{vz7_fP5wPs|ERTK}!{@PxIh3#wo*R~f!q;0uNf)E2@%p!m7cysV;UzLy%YN7T zbNmszT=Yl885;sP^)x%irT}UubX9KbWjwjBZ=QbT>xlB+pZ~mXcFoulTP`uZ?9>ze zVfT9{k{BDi_m)b1Hd$SKjNd4g5;UP`pb2xCOKIx<<6Mo!UDD5s$vt`H>OF5y1@S6mT&i8 zaAweaFa#NC<3au(xY55FiZ-yvA32kp7w$aM$$gV@ks+2Fy{j_elHl+s@38VVQ%Y}> zlPH|jM6cC8!0dzM5p&<*fPW@yrunT;z+Lyx8MqpOH>Fq%D5^ zJp_OxFMU{Ey&WIXHL8T|YYC@^o^I)z<4<227j<=%5oz79{Zo~yJ3-giY) zuz;RZ0e+&})8jt`tVGr)-4D2*kIpJWY_kb8zy)yA9mv&`_@{Y1YuydT7u^mdk=HhX~-z+_;tJ z<;Z4S-UP%C?ko1$_6dpb^(95-(Fb0WJjmUrzuaZ{ZatJ+@i+VQCSKjh)l}wM!x&9o zn@M)0T}`|s%|%H3sq!y%sR_S-&3pg-YZOeMrl%jvg++_0)Bkk7-0&+bzi{g*VmRN=^Ve8$!8M&Gs(lf#rbZ?|;+2 zGjN?<0@6ItydPWwD~Z{j60q?>^6&r>;(NU0#c5R-~40T*v%nlJWe`WyT zqJP4rp@irUlyXxBFqRBQxZbb_tU3>e;Ge(i&UC5RMV6Z-P@y>-`mS|l;iEhbFfugr zc~h{rtg`)y;3ZMDE6H%UTcC6km}izi_Kz&{T>`t13ZZ4Pm~;tF!8VzVQbabo5V0I< z7Y9PIE}nWA)Tm@5bwR%{P z@PuC4Nzi4yk@J{N_M9?f_lPhrSOKveK6WzPX6{&psJ?S^vU3m9)>aS_A4N@z(2q|2 z#!}Ff(9qQcs|!~^p>0Ztx}|no-}mlVO`Gb|9nN(2ZD8aXfAs&MT%_`{)dFpYtJ-xy zkIi^o!!v)IbSNmHo7wE+t5-?%W=*7{5d%7Gedk22N*X`S+whKrPkX7|pH9HR^3!-_ zOWc|x-0s)R@!4WZfj#+E)rr4%v6`B_JiKmns}}<>k1?IYj&L?L((e=oFYuZN7@^Rw zHHZ-qEtn$iov@Tc21XZ$%Z-w0+G0+A05kX7t~_7`pbD9**$?c(LKSlo?=+sKx0EFy zl{s@eD93*_qJz9dNm;hMw6mX4vX(9%|Q~D(lbQa3FbzxMKu{I&-XvRHX+ev3d~NJFx~qU z(^}~=fPKc^G2PpcZY$tIit{18LIP!;2%o4Jmi9ohxg$$y}aJqMW(y z)jJO_oW?}iO7u6(J3>63nLmF7USj3#!uCzC^ThfjU6jT}8=V?ts0pD+@=+0CB`xx= z3=6n(ONB60amy=i;L@hdOW!cBj*ouW&00)UZ1y&+_E>xxH-M%hiNP-TEIpVpZ)4j> zjLP>*4zirrWNmp_-3x~C;_X%y!i(%oid`e7>%^Al`bzc2sp-ayLxB?;4=rSJ5rK)x zDTp;uC96FG=4`(qbQQR#g(yZ%`v55ov9RJ`2T>lde1pxmc^R!Qdo2qRV5U}2lpBE^9^Yvs~3JW7| z_tz;Y5|ca$`^ZN0u8xMXmLqtsCtL?L52?Sj5#F)BDXI#JiNK+MtwBuG%|9bTS?3mB zq%{+vRW8TZ<577XkgY+U$tP0<7HaP9I+Mcsh<%w$CBWy9FlERClHM9HC=R7&hEpZ45e@pPAspv312E3i=%Klytd*_n=Fl6$-T znLFHfa4Mxqq{US>H$c}kn=ilioyRF^3LxfE(g?d&rkzr*#S0uFxoC_3h>cHlUJ3?= z3lv_6dra+g|33i7Ksdk1U4FRINU&35MG&Z~j=h$$HNblf><7;2sjAcq(;I89Fv%3k>{4B~b zFS}(1M$U3-q@Sk;jKQ0C z?|o1%qzlRvbM#FN^NnMBh=1=>Y;Epj_xc^|T6+~++SanAYZDF0#s%vF5Y(q@CD;l3 zlR!W4UEpyMIRG3o#>|}mfynlp07u-k^G84@a6P&cU@mls?cD@?YsCyCA#Rp_0Kf*` z27Jfsjs2Uwtx(ZZRjKFG0DxNY+}?N;(mEJ7{<&-XYx($Aiwd)Yg1j01xw=^Gp1?93#d7VcFG zpgRhy;zCPYSe>e{Dw(G}IYU!82mmxVK>#2XD-(}gNX_H=Hh=l(8fGe*!b2&weEd+) zD0g&anJGC;=A%p(EoRDwnF@@RY|c%m7@UeSnztFwTJ#lQLZ^4s0?B(Wdq?`%JJLsT z&-ds~wX${fCU&&1<@)tI*tu~h^@#;tLuL`w40u05FyIJqNJJh2zGjShCe>%Cr}&iH z8~am?{8hEDt!AeY%(bkb0DuX~%Pfal5-~78gIM1NhV)cb>iIMPpp@}90KWhvmiarW z`69s8H@8Ml+DqbrNgFZ0Y~0ZOW_M=EG2_E@-t-11uDKy`m6cV5`ousmD$x^VohV7RjFy}LM{;-A{InL zK9P`jN$Gh`jVHP9Y#l|-)H?<0ox*ea42H5dNy)XSc!shEMISPS7=05B z3}-_OOxq0P45#xjT@F$5Y)WpB3a#jYt2+qP9GR(<=^Yy&JvP9%>@fAQ1ReEF>}*@Z zt9IVTuJt>pcM>EMNg|;IS(oJiR}<`P?VJYB{{x>%{o)mbCL{rbm0jN$}gj**}C;d=!2@03y((Exy2(cHAN9(WVA zkrUBKP#pI_4IeTCtkN_0Wt*wDI{CloX@9CY{WlO4FuN7l4Qyr+f>q^8ne>@n_Mh(M zvHrsxIeUV>$#YDWiugKZsup8JWx+MASvpg>SwB~%80P*n4NU8LC#BR1wz?t1>V^#0 zc3=2ft{i0|7h@uCGgUNr#&R}&Q#R*{FjCg`Q&-LxVK6_<;EBC_=j1-t zB%4{^-p#Jno4KxgE7xqgnvRwQ&16~!yau?_I6F_9wcqOVGoLCj^R;>@?J-c)gLY-Q zjA5)W-N43Lc~7!3 zb^tW#+54g@zyn73uvLmYycnHQ5wQr0X|DpV1KvSUu&k~6b+bUPgF-3KOfkpFbA3E? z@L`_nKf=-RK{B~%W-3K|E#j+QLfAmmhKL=UCz+C&^VOoQF`qlv<_X*GEYEkt!Qn=J zFr?i&rIdQEM5II_Qlk5!DJ<8wDU?Sjxfc0~q3FRxF~&fqp2H(ihI1CDbB3X!MZvXk zJwwTZk`JDCAJoh6L^w4)#;NHs9z3z11}8yVeKR}Sx_QNxYq_cCMj8|KBx7}i=YMyA z4QwRTzR_y_phx|W7^$2_vJXK1TZnrG{ArL^?4?wdjuh2Ob}d1*_?R|@ssTmdYrr2M=AhY~S+E|w1QY3Xz$Svp z{x=e=IBKZgXBKRS%~W=Zfw2Kjjt}zGv3)#r^eGOF590Ygp6??%uu(5GlCz*842_OZ z7x8IM6zPgr*q9VL>U@g6;rAbIVyHBCztaF4Q)RAMJvj#x4e+gFDRP>@N-3o-Z4hjE zBpr|B#r+xb$m$9FZ3YqW1*QsdPK>1(%h{Zovgpej26Is+3sEvfL#AYyay2NRUR>Gt z7|BmFlAoq`_%xqC^e`>otYdfQ25#McGdovrrn{w+&X!JWYo5zsnTSoK8x!fm#BTxr z7m@takpDhXd;%#S25%V94#mries+nGI#xgcz+mEnB$wICUMtA^jF_i^Q9WOks`h=f z3DipD_QoCX?*_Kl(*4=!>iCt)13oQcJ`&zmIJ#h6-ypqD7jRqkaeehOwV**Y&+|BT z_9#!C*w2&wN9gT8%8}8tWL@3MuU??zV_;PTI_reaI*-nVJZn=~+M+^xLTGS2R@LW8 zL@#WOAI-+N@l+jOK0SA<^lS_6T3sO;n*DitW+KJI=OTJ=l~QUp9chA^1D3fko8Okq z(w2Po9N%O<&d5xRk(|wFKG-F2V!Vm*oK4@f&0qmCI)AEOfG>jYxeVnp3?19Uw~z0o zGm+w|&Q0uI+rxETTexQP)ikGC=KpLrA+YN)$=e}$8>T#j6!svcJ&=1CDLnz?^`O15 zt4&aE;asi1Q9%*}X@Hj7<@|MG!X&6pUVU61gJ zlL!6-_=E7a!kKyP0E!qOK@e!V33xMb4MFXRW)@(jzlczF%jAm%1}BDi@W8`7eEJZ_ z#|Idm8e_VwseM#%F{}#WAQ6_}5v>plS6=e@n&Ty2 zy=Id82ilpe%*|_Ti3qRWI6McF35M^TXy9z#)&svnxt@(L<}%J1aQzG4pD%~-#Arh* zb%`3|c^cz+wqA4{o-Sr6Rt(v)A?q3jr|UR5UeD>tF!v5d=r3rysps=V=+9>8Kl&v1 z9p6h!B1LPeg&R6Ia!1dNT)lA@^|3nQ(HOQppHnvmBAu8>C&s@U8itWl8p%D3o1l2_Yk=2P{~cYZ`$(x$;@tQU{S)Wd zbMhb$r61?OXdlz10%gzDNq_Y$P6&Q!M~T;M8KEsXL&Ww7Szs9mSw6;G-uYr#J~wye z>1nF)$Z&X05=p(Xv%;$6>~jj8ovi1({dMGZwdvBkCyOCla&Y|%x8{)L6OWX!t=Uy; zc72;;6EXT{Y=)*9$(6#F{Ii9M&AFKne)U8yxQ3I{8URr0N?Ar|h!vi-|8ZA)4sYWq z6S)|rht|@6Tz6@ymsa*Y24^N1oSERz;0gYH-w)_aG;rhE9&X)!6WcpCvAU&$RH6Z6 z=JA?sIS^TkiF9M?UJc#{k^CMc_bn(sg;Y*}pV2u5!$yPu-P(SW5&>2(*Gn_VjbeLm zm9+CI(^K^HDx+394FIT>*GY#uAASs-ELY3hFql90ee16x+jBGX@e4#GMUdL(Rltn| zbu;P~>J5qrBa_4IJ+YrXXOFVy!~xRhPBUDX(W9?kk}pu9%+|K?IeX4EjWgWXUSQ8? znAw&Si&=2n+DYmn?kwM@;mM%{>G7~ux0pv|56(>|alHr=g$rGWe8n(Tx-bb-aABkj z6}fPH#ddZj5iSyz3>l z0`K*bS=36W0RXkKZqsSUc<=^zX4kHMrqy!e14oURKQ-{V&>T(vSJV51fjB`i z-**vA_-_F^fqBm_;`=_ON{LKvntjLj@%Zt5JTY*bzOeyD^V3v(Uyr`JBxMi2(--G0 zBaLino1By9v@MU}7w{R_FdMR?N|Tl4iPrJf}jf*;*7!42Kh%#roi?>;&jTG`sx&8_Qqa>uUQ zS=HEv6OIxI&*x4P3!w1JI!lxtcUcv!^zF=Fnw%8@e6E~%`D zSOhu!H*g`Z|J6VPL5+-g@7ZPxS%${Xabl#8`wl$BBc~3~H#148Qljj+y0Tea{&@`? z&4l>oiF(#GO%n;t&FZwCRTJFU(!!Vfu6)&X$iQ_SIo387XZhJR9Gi%9@7XA|78(;V z6x}do*QVkb3Y8$>GB^`nl-HAWA)V1pgKA;9zRg4~O3}5jjSve9Axm(=E|HMVVbr2% z*rhF*qb+&fesI z=aA`dK>i-YJp+|fK+WeSTw@`T>iDcC88H!ztX}4CBLTeEhkJlydKFPCnFavV3hOkP zn?bIJnhn>lgwOQY3O#+ZV7>tIzr))K2ZAr+8AAi!_KKfoS9;jY}sbIXi@ec zQ#4e3!$?^ucoviS1ldxAT-j!#y5r*1v`)gS6?D@tI{ee#H9S5PC1MLraW5!r9xsw~ za@5;~ric)=p*|Y?nTiG9)11f?iVjF_YElQK}t`8KUu4XAnw5`ps!}Nq|T;>fgNv>aTsJwK=|pohD*_y|LV8HP?i z%|mAnvAVvQjqPi=c})+u_1r|y+N%iJA;O_~>^s;AOyWjNd^eN_kn&+9{}9Z49q~?s zl&PVb0k$k)Z8V)6zpI$B0N~Hk+wIY-cB@FnRK;A;_7XLK_DUNF0 z$VxhO!8~Pz|080)X_q6p(C*A-J%NaX309}92VM>Q2tg1mwGj7!nfweRQ)8SO>F2w9 zf50QB4>6R@kSi4^`zy6*SdDcg45Y%4hzNC2moLL}s2 z8K0SAgnv8K%8@B+UMC>(9(?X_J+IjqWpye)C(qfLEOGbxEJvPBUiL(F*n-@(lTk#XzQ!zYocNBd8bPo(0J+ z_hxnoc2D=#?1>~MgppK@yqhfse!P-){yf}M)aqGkWscjm3Dinpj2{BI8|bR#w+S?_ zfWx^`b^we4UqH-9Ju$tJ?K!!els_U;59|bP1MVVN^`Bgb7hZ8IoEkjI;lUF;dh!4d zr61=+W`v?n_}2v61QSMWabZ=m!lveFdg^_;>OIyqxP2=bRtW z*Ao=-eG{;QAjMB)UJr{1zW8KjGCY3x2_8DWkEi;Na(eVE89n%*`%X&(#-I5%xCcNgXypnuk9GpDtE8QDxTjdu=1?o{-mgudRs_p`4X{ZY zVtF&3jo4lqBR;j4%E<=?zJM$w->R@><5+&u>yB>=lK3vhfMj>b^(M9+_hnbL}Yfqe=;BA z+ozj2S2TKJs%0x`L!0yLnZ=U#;**UcQ1rpo$;g^CG##Zs;}WqUVhhobPc-CVTiTac zD6vSH&8=lNwis?(o8j141OIWbiEs1;_c@)Ctvw~*<3whJlbI3jJ^B>QkA98atJZVt zRX6a8o*QXPHIquD2-)+|XEP9P#e`oC@mF9s{xnkDk4$|T%1<2_gP4!mM(#J4up&W3>VWHkTY$TPTL~%y&Z~-BVQ6fS-hpF0cJcs^9)6Mo zqx}>;O&(jzw$!`))HS0tCuX;TzV}=s|CUZtSl~IGv6A6SCmOi9dzy~a>-QQc1!i}91glAEVSj2E_JkEV*9nGb$mbI%}O8nnDMxXVy(Y!_BMQ$aY zz_}7kzrcSlx?wW;H~>4_bi#N!`h)ws>4-sdOlXOFv?nXHC$p@I7iowzSJ}Jkg zH94aVHjgYLG{nl>&^^MARTJFUyPE$vT+fqZA<7yBs7cSH37Q(Ce`<`c9C?C{?|hP* z*6-xzt=DnG`t595y@`aAn1|nPz;eJ^jR~*DBwrU456*rE$$t+i9t8IkHB>lwSuvQ9 zAT2fawywd*T|S&dYoV(ZMgst<_B*nczZ2L-?H2#NSkxH5o#2L6o1IjlU<@ayjR1fT z90&dxF`o`?E1Y=g_b#UTzF$YM(*G5}#)Y_+m)$b^k3G%(N1o)7QwKRRbdsUmG@|{c z72$_B=UCG?yOmfoMTgHGZsb&UaW2JAk3={)5@%I?cGfxg0UF~uUfEf>0HC8jOGgx19ig+%r=`xNyJ3c8tboxz$()LXUEZ-{fSs$R`140Q`Fej;gU>6( zP$A2gdLQB2M;>Qu+ZwK3a}_tO?ctW58|iB8#+doqg=j&f8`JbNnEJOOg@Z`(L1g-i zQ0dhJv(V#iBm^|p;9L7i1D^(Tn~7RcGytG#ns+b}5&XMYIq824Mr!(VZH(lAUV@^w z%T<}6nDOTj>u<&Qr^DL{FSzPoL?S>_^&EaX!D|0*<~hZW>$%M2XBeIu<2z5?!@bA% za(rx%$^0}0SF6J+oge`G4NE*f;#(REjU3NKjg& z6@<~ygg=&n*1 zi-sz+*Xw<$7EQUqgMtBUz{Vm<)Pjf&QCoCJ{(Fv(Y85;sHYKOv>V$kgYM(nH{mgXGW!-0BML@Wi}X_BMRV?9S*(q*l&7 zU7JAFG~4e2c^yH%H&qLV6lOelnqc+(a@*D61AV}^jF`VOM)sRhq+)hwp7)I+5(j#K z+km$c1U#IeM?8OK@-rMCIKk8XM|j}SBRqWi5aXr17V=%!KHlPa(|S!Qzs z{GdO{Cy#}%_<1|y!cXlQV|8kF6W9HjB!9VQ)uQID_kr)7jqt9)M(*5nZcd(aePfo} zIx2jnFZ@zNSk~58xUMrds~`%%caL^(cv`z|N~x902MT`hpkk_5*$4nn0q?xV<|=Kb zIk!5M=Qmz)hV`iqKDsx>P(gzLD~TsUrkE#F%yV?~EPwmNx4Eim6?bjFh1;&WfsJk5 zbhod;w(Pn8<(31H^_a*yOxY4!{WTP2h6^4}`WAs#^}9z3^W|62NN-()`>2 zY-gTx`-=#JV*@;KbPo@mJirqt_H$xlh=S(zU(%Yxu(@8?(o$ka+Z5e(71pF&x*GC0 z;Sz;PnEewQfh!9DL@jvZ+8np8nVfau+^-#JVc*2!$Lq2#eEnF%oCN?TEH_y#rB-HJ%1HVMAv$Sl#Oj9M3~V^G>T3$O*Z;dQF~G zL>SG6DS417T4XCwbYZB>qV1?!vVDJTf_as6iu~x#LCQY-k0(dti`^U z{O3#rLFgSH8J|_Y~!#PP7dqfpx%}fxCdKfHvlF zheNSkB$Jz_x9>1N*#968p6O*MGeV}A#}(~7FBJxeSP%;dPROS_?yi<<7XJNc-IDoGK6Ea^-m@+2?i!o*^Vycq z4IMdlwzxbp9D2dYr({^TdwmYu@@DnAAMa1GZ**xF|FsN6Oz>ye4$j}OE!ai~*&b0# z*bsxL4V`s9@i4R`TTBYRRz=_N_6K=DY4w_bIYH*U5m zx(3fTls$0$peS;|hmsrO+;juEa)^msh>3#DRM9Y5GE9`AuL!}dA6sy)k^#z|}oLYB-roy<##7Y9T-`Z3tKX3; zMY*>>$#7w5jloh8;l_5CsO^(<3M4~9XB3hV=&17vThN)RkchanC1-HLC9LXOuuO2F zGu1yWBhM?&yg%k)j9w4aO6|uAPPl>-u8@4Gdwa(WB0)M9k?MnB9jq^qFU1&|PLeCz zjAldRDu&UVAycyW(y2NI3YIqZ3mD3U`Qqs~R`q&iSxMq{3mfCmkq|oTUDh>a>28>& zAq-89Pa@*eoG8?MP@pkZzKjwq2Pu%I^4|h z@hAr;Y|@z+qqz{nc@xxzP)kbQt#D>?nEuQN_nz2K#}7Ws4c%LK;|;Ins#WXgZtEfz zo$Go52COcec@0V_rCwwP!w9^@XD<=X z(OUQXqPV%T&GE?|4FJ3ZU#ba31n><-*Dz56CLt(F93^2j)9yfL(x<`kSkpL7SIng| zA#^4^lF{01o6hk*6T&LZYfW8?>5_9OIL zrD)dd&Ikl~G6{mfqvheSe!@nMAWTd$CmT;e(G2C;ei5;t^iAQGN z-`~|a&hDlr26N7{K3|FE9b+> zJe;qCjcW|K z@+6sp%~-+a=vX5M&L!ACW^*EIF;%uG>&Dh4W5zA>=-Hz@HF%sa?)?Fq+Pb-Y-A?Y> z{VLYBb`f{tgzPzfeMfjWX^V{^{+T*jxyIX--bdk;R$ zed)(Jo*5=zDQSuybxFb&+_k2_E7nY7TUUP0l-&^jaiEi@ChR5oKFb1MJ(l3DTjFeM zpPKdaMM5rb-jw5e1J1KjA>7bWVr@eaGmEg>WFgA8PbM_?u~JGchkh%N^@0aQtEPt{ zmhrh`{V+d16z4Av)-70#8e@dIXpy=obTz=v_AGC?%24(!j*hhOXOFk?gCSc_#wDiW z`wUD^FgQKQW2bxh_@iIrm20>0>YcZ7_1YfRv~>}8=6da(Rjn1!iiuwjjqgFGzlG$# zgOm<{dzx9Sa6d}zZ$5FT{Q$rkG4clBAM{hIYMllERPA-V(@xk!ZUwrvHI_d=S`HZ_ z?-%6V%+reb=Wq$ObB+{XBMJKf{Hro;-_eLjtxoxirOH?&*(kZW*iq+>rG6shy)VCuWy+=-^NT zUpNt8(gkZz~?WH(cjGejHc*N zN-4GU#3C+l-!{Vc&&D}0xj6SK+wzH75DR;3Y0c1?Yy=GeEZwm>LeZ^I%x3u9p@;eU z;m6tB)WPlBZsHXic5>aOYiLfjVCJ+4kO32g@M=u+`!J0^j^rLg^4~ymk3jhVK}Mg; zGJt5Iq8gCI$eSx^=kwv7;*>Urs%07gP&LOF(~gnbSb6DxYL3?%3yJaH0sI12mM7l@ z9uPRii>%NvkR_PtF9GMkOoGfHCMQOw2>$y-xaY-7oK;u*#|S3+-$pR$zY}O?9wz<; z!F4NSa??C{ATm}J;Z}vI-RJM-RDw@vUTPqZ*z);3X>r{KBl zAML02{sF$U=N_(FwT@S9yoOg_a|hk6-8hjbwl&8A9V?DWz8aIb8A+Xn;*-eK7m?CK zAO(<1Ne^jySHR)1R>*tYVc;RlD;R+61bWNZK(zYzA)D)>z&uX(uGe zoxpE%WyPG!z}Eym4D|6L0RX}HfD0laa7|C)l4t8gBm}Gmwg5j0ypAB(e~fvU`1i$U zVtRrzV*@;T_({IG|9;YAgXGIaD!!*D%>qi;(Ci3}@d`Ur6|QM>+1)ikXMGOG7NQ~l znG`yG6Om={o~~>5_|csMvzo9jdluh5-pGCZ4(>A86n$no#8(bC^WN+7*w*YmL$OGO zSFRoBE5{QI6yUn{EZbMjE;Z~^{VnVnjVyvEhY|+ycVgtf16Nnv zP95al^y55q{Aq^rxg za&}AiPE92F`~9s9mzKv^VaA28oT}qh>yvD3$;|p3>1i!+&8h;KvkrHxt`M@XJeX1_ zNBHjPBtv;k|D%*r>e9HL%@czSoX&(;lMp)UT{`Ns#3J*%G`}-7!w+wo;qj3OQ)S(? zre-sq7xI-7XELLl$&B*#BTurseH}M%y^cG!T*q~ruOShuo8yjt2tqBGy4x{{TanUH z$bJjSKY$b-26j(<^-b|3@Cq5r-;Q1b|=ki4Q z3BKR^C=Z`L$jOnjOqTL`b}z&^Xo5$5SlHd@v%9mvu2mCs*SV}pR!GGP%YM@Tys&}0 zyGq=?W|Gh>R>2otn=hwZNKY-Vf&YQ=Fb|wfu&!x#g^vLm<3(=m%rZ6;=EgN+vwE&G zlQA9{tfQp$yOmN(U80I_bI-{({;AiY%@La79*yxL+fy!^Q$FjP%B*jhAQ7ox8L*Aa zS%2pC_2aDHpJLxcxF*}ys`d>%L3cSUppxhE=-_dl96G^Q_T9@hYqoOR`d!?4%^kEi zwiB{Lb6YRKSQzIjaJFE|??4JqAT!@W3f~2P48#REB#0JVt1a7s>ndsISh%O?YICSs zqyYd`V`QViHQEl#c;J$Dk|O@EfV`C;8h^Pa!Tg>G-!i*1v(AenB2j{Z($^8B`MC*b z0p=yIORkV*aN-<~9C?aw?z@lu!>7phjIFFq1W$$cBJA?zbQsf~f722sg7U z<+G{5=en*8S9fG+Nfc-OI~(Ig-oB~8fhWQ>nY!+V7N6I47fDYT4oroZDu$RU844Px zUl6VcCntwFof+Y~=_mO6hri67o3G>U-LGO}`x;tOErjg3oZhk^(v1nP#?;+~RL&q% zUxwV55I?&IDlpBO(s43%C<_2XHO(SO{roe2D$0dwKZSUhX;gFh?fO=}P|vP#=O# zDW7evd9G?GaCMtYPumR1SZ+nU|A-Cm*p%g#btAKSp3!WKPaa4yQdpi7){l&Yc%;9H zw8z$J!fh#GfG>X%a86Fq@^y)x#=Xm!*v`S3$b@J$(c-; z<5{Ek?FHbAFjFpYXr!M*BmMl#HW6Y!;m74JiU=#3^HifE18URo=L-wU29;I8Er2O|dCeVO>*!M6|f#+N7u6<83`-vpkP2zJIcr zhlXRzZuS3pB_FFQ}b}&TcnFdZdy4lbS%6jm{Qx37vYJUBe z{#ow^Y)h26y4B@OU+qpa7$bC~rs+sc^Xg3&BiRH4Q(=xxhj^mDmHoqEj%E!dUz5@< zgiNKxJtz0`aNl9BYVG3sb=!F3uG_h>=SCu-$lRs}!a#Txzz-2*9e7Mcz6*Q_7z3o% z3j^1<28_H$(#}(+r>L!=YK{f~RL$@r$mJ} z`TooPVUY;X1>6SwB(MW$osVmz>$!|iPjGnP7+-zt+dOopmvb`{WXmN)hY54eu^<@{ zQjW_FO)fXDF0-R!oVG-fWYotAxiyo^|8g~j;r&-<=$b{^8xceANIn0szln*`@@|iP z<6#~;)y~~p1{e2U=G%PvaEcjM2au|E4NfO`;_S0y{SC1aZOIJQi`3$X8VJ2W56?Ei zZYF@R?NjfRwSkqo3`GyVcp}b@wkF=SqeR%g@<4b~qR1WV#`ylgDzaYfx1DAAtg4@3 zRXtoQhBs}@kS$yEP1W<*nFbymu{ky!X1ZjPt*~qtN-PHjx6Iz5lN=mA&6f{6$hNjM zyng#FymHrVbTqb;a1wJI3}6jGn%LI@9|S%Nd|gCN0n=us4ltIt81Pyj{s9=#=1{dp z0|2U)+zfPRGb}%q-q;$9{1HK#oh#{?9ThRZgkJ(qjy17&FwRq>QI1T+Igtr5q>GE^ zZ(Qm7jAS#6WHa1%azAT+@EKma>o#uRdOcUK-Nx$H)pL5-ffR6c_3^8~=YemD$OFch zv1Q(z4f8cNUaB8s;3|PTfY0ftN!8pOfHr}u1#WM=0V7ufb=n%s?AWE9CXinMUd5Fa z{T%^5W{f-;-j=(h%$wEx{x<;cs{Y=q=IeS`cFR0`;9>4N_W!f@-*Jvz=Y2o^KDPiD z9hhFX?{W)w$z?ARNj0ik)&9E3l49AGEx9Fe96QN3`F&ru6UQx1Vn?wpH#wFgOR~B| zQ4}SLy>H*yUZxk!paU1U<^2A@aJfrvnS$LNV9xu+;Z6ZAfOGFX=Q&ULJTLRiiM<@2 zJWJVAj{k-)W&+lQ;igW9+Xgb+*k-dfRiiUjL{m=x*U=x5d|>PHoBq8p+Qzp}2U}uH zJP9vOg?N4>&VyU7&(7TQb-sT#%1l{T7pX#V9=?Q$YW?e?`}KLrtctEGXB3L1a=aio zJe6El003YhQKKj3a44%(Sphb5%(00mei{Xj?!%r!s)XNws=^Yl0P z#@-)t>$>f{YsWp@v+WN0y9Uri!-WIdfu9H72mDY<`4I5UCJqGjvAO~PP*(xCt#&B# z&A^V53e_oE3KalQw94|n7UWHCLBC=vqyCqVujOAFrQfj^g0eAe7v zxoo?!d6}P1>e>Du1$F{GS7RP5*(Ij4Gdy?nMZUiGha8wV#cU~0&G*!;+8`nZ!~#A8 zVUK%y9PU}0V|^+|A}EPlHFQmNVY?JT9p1OTz&&ec(8SWmX{He4vj;kvuC|Wq+Jr55 z5LZHkt*}VSU@$! zJ&%Clu(mD7hPD)Sr4hxoWU`#+p`qt^>ePPvAO8~ft>49u-0^lc^{yuoO`vNHOTG}) z%h`SmcpLCZDdkszZvtn85CwHMRx}3iMj`xlz!5bZidMV06^iCIR);L%!v+ak)M(&J zA)Cjj5dND${s#4IiN)dpUly+M$HvZL@sig^-SNK@xSx8)|4r1J`ZhFJB&8%%$Z%}@ zB;VclIFB5Bn&a7NJl|K^{tcu(D7m@2%>6x8?(DC!u_H@3P(>3cd7lNcE$Q;no6`gh zcge@7xdvZ7(#De$0lXF(c3;Bx&W3pZmMC|xtzOgW5zp6ndNj&Q(`HM}80D%(*)gd& zg0iDgb)n=4YCg<4P_BiTE<`EUbkZe*vLnb;1cjO)TN9LAb>h6de#y!8&4_~bPIz)I#FvgG z$hDv^Y21cy9q-_l{tO}W+S&Yh+vJI}ZB5rSF(((Tqsl` z6sjhrTK(@87jjjB?ZI>n6&_V6E`v8;83Qou!R)#I#;@cs=zvK*n>bETgLbnXBuH8k zLxc9POVIF1gepV=HM#>3Hz8sQ=4>T5rnr!~26d@jlXM6g5*#JVwG`gm=kU(WGn~o? zd1*Y(ff@c#pF z4~uuoOW>fC;&+9RL+19hk$^90fm|xGsT5Cu0f_0B^4o{vu6)e+(igGtBg+$QfjT>foKnOm# zb%vRe!I9Yn&yU1-c1mZWVw|g{Q&#cvDY*{M3=gq)`~+Wk@e%G?vyJ!M`W9~5a3iTm zve8um{lHIAmk0V;DdpFw%L7daA*$+ZtQg)j?^jS8d_~KkR%AufBOoQ~4qrtRAbl+% zH2Fzc&wf~nH8lhLSKuLIo9)3l$NvW4F5tuS|3+C_Q{hX$cPSZ9k8^nJIFIgslJ5>Z z$7Cso<9SNvN3r5r6Y=@j&T0DM%S$19VWg9>&81K@iwy>pJtzYxc`e07Fm;z?c=@U3?a>^j-lyCR%S6{a+9MU( zBe12j#5*?&N;QLhV;wv_7G&R?#hGk?$%;@x_XbdL9Zt zo-Mms*S(go6>gvlgD&7Lz#D*10)H!|d;&NG6opXLGuN3u;6C6V)KDl|1+^k8T46J@ z6=+i<(H!`id@snKXUW~K#NX+5@QY%1){|0d)O$a?2Y5I2ih@AH-?Q&CGCjT3 z;nC4BADm9Gqj&bIzussz#$)3Fb)hO03WegjVrilwJ(Yxj4iiqOA#E6%@Ch0aG(6t4 zd5i}(!(1`Ofypq3GA4T_lDsr!GH$D}S}vaSDc5YC89mC&6DQf$-p@T-Z{uy-?&Ov& zyNOtlM!l2(EMPnJ1h><`H-N86DW4NUsIz$;w@)D7hzbBGS_l;YP_zPfs%v@WQ#%yV zG|jsO^>i|PDfq$36q9AOj42cfh2r|!Ya1esTi|ar3Xa&@6Q_^uoiR5t_vKVT=X zcCT9~KJYB?`^J_@NnPLnXMh`7awWkfUdZ>D%uI1;_!!@O@ev+BeSqm=j+*Bv$NwS; zYS3j#2I3Akw^e!LnhLuIrm=L1W%_8sCuYT3_VfEvkST{4&RSI5>z6TaY4B4w6j;}m zU-~^P1^XwHeEw*Hyt6v4->MIf4M%z3mJnOJu3i9OA{XP~;TQ!+%^3=XLZP^R1T=WV zVB->wHRZ3oW@wsESFB7|3~uZ$@t!S{q{|jBkGAvlSb%+V7L!GTxf(4k;dnK1rO(;y zG^4pRj~soGolkw058U=3cW$|rHJ$y$!VTNg7{EqgE${&F1>or*TT;{}!tT|8%H>0~u{qUC#&S zG#)$C#`?A*LBnhK@ud{JJP~I9Oh5$~6$*tyvHZ=w=5bqJj`tTd#`7j;i-M^I7XNKc zNZzn6tp>5_uK}NE&?g!!vMyEReLFPH&LucFWwAFMX3s>FgBgvy>I1SgTVMJVYZaau zJnr$3sV+=fvbNxtgt-`YsR+Fm;HVKDV{`+}>Z|=H6M>B^x;iJ)ZS0>2v3FMIM9yNWXfRQ^{w3G_A<5S5vvftP%R0`pBb|Kf zjJ4{n@0x_K9FOsy8$t{u8Xv^U*#RCqn@V>eD3+qUiGr2jc{ zZuZP~`7S(IYt8H{3Qsgw&}`6=ArFOFbQ?WVrv;T~ZF*4s+vTZvV{vGKBM6)^?X2NY zPbY=}c2iI!Yz_jYt*5f}NiwJ6Ju8cZM5Tc2OG57yU8v@(n6HoqWnNO7gt6X*x2$q( zVHpwrl9PQN>X9MsZ(K6-s(i!1??EyI8W?HmUjsE-@-TrV5_9`z3Dy)ERL;XQg8hCZ z0fdoEy=K+M=e|0ZpQT?BeFR4=uf7wAm1phi-7fUqeU9*YyYnvrYLCX;{9#NgL((_S zMZCs)yq|CJ(2oiF786Gci(@aBvL_AUK2BkSUo=J)QL@S-U|vUE?NU)>%8%F7>?~V} zsNj6L!tjMy;Z1jEpRQjVaG?}mUOf^0cHJ?EtmJmJy&jDWf^f*t#cjJ?PS`A#uS|m% zTJGa2Dd#GAs!(tL2tUVFTHb2(8hmXVY|5^pXpS&}0eM=Gz+FRM-!9x)W!<~TrUN)M zDK<{$XEvukxK>a&%|a9CC)g6?TUXKz|6-oZ741oH#5}=xyUIcc^FJBu{jafq z50j4Fq2P;#&s$}gN+g#&M`rh2f}E!Q^1J?a#K^95No?1n$G#N#EK7!)NwjUehWW$Qqkq4e6_Hvt=xJAB%QjJfX?XqezvYeZ62$WN^=wt6xjh z(jpl%>Zf_103Shd3vgVYn1=&#DTB_{H@8#W5$ z4__7X;^zkTEi0$A7LlECY)AtiGBWg+Jj(uce3cU|Ax0K{ZjE6REH9z_VANm3P4{U2 zZjlg}RErlf{IXW8tjAme&q|=A2|oR;UmWvdRegH{k#Dz^W#}-NAWPgXhx7irSo z0^qm7Wzz5@s5U1S&_WUt1ViBmhJS6KC?{Gi66`OsjukO!_$Qj-T%)>iZwVAsZ+@N0 z08|JrNiCDXAZ9lQW1iO5^ z>AZFZ+Vo`LdD@c^L}_9c?e83yehi~yBP*0CiZ&=waT6;c&^}6IX(+~D2qPl$1+Yg- zJfZTr4_5IpR;Y--e!rX%Pn`sTidT;5_{o(jiWs$o=uvYCgp0u{@lj)9URVTHxs%B$}30*1=>CzG{aV2cr>Z*>^J%HF7D z5X^b-Jlbi_*k1LZAoX~kMT_SvrtCW3$Wld*o4wH9Y1=?v-NLhSqaLxcXCkSY!mKp> z!*=mW7n@HiA;+QBR=Zt=yWeiirAi{m_p+}{TS|evoGY5+ zUpnx6*%&CqCJKtom9e!=-R+4WGMkl~BORLuf4arsELkZWdh4@n#d;62KO5T7ynrPy z&~1_E+zrn0+eFeX;U;hMK#HriZ-Ll@yB*XTk`5vyXV9ho&Ha`>5SgSlq z0d>;vBAO^@qB5fi-{f;A(&U!zj(+Z^2$ueKHgyWy0ZW95DsN9qjY7AVR@8gIiLqo! zj#aC`Es}%6l!{}rNy=&y@|m6<2K-Ui&t9%qTt-Dmg@DwI?l$ov7&}VR#{{u@;H9x@ zfj~@sa7@-0)b^j4T^8Qxl}iN8$^Gd}Lugh+;W#IG3T)|`G-K^+j_K-Yj_n-Qf7kW= zBt&)|ddarccL6UkW*Wf&_lLhKO6vAW-VfAZKQ-$t9*x9XgnKpp%D-napol&v|zsZjlcU{of=&t`Z!}WxPyRjnoPLeB_`h$dACvv-hCm+ zfzW36!|i)Q{=SVUz<2pBnUeeW>f3f^codW%8E8ZrK!y9KSY7a!Z3|Ktq`eFOv25EV zxq+nS#>r-$J>nZG?A;oTZJFfy!{j)r0!zwS)E2YWu9tUUccGWoo-p(gvw%P@!qZ-$ zmz`WCCl_-r>0#*)*SYG=-y@X=g&Y%`M;#%@+4qji36H78x*|9!@F&Wxq%ZXZK-sFu zBi~!^d7M}N(o0_khJ$h<4l`qOEX|r@f}M)QrPH9@ora8KoEYNSp`4pqM-QsI6?OXE z$H)%-2jIP2ee6uoEpSrkfzsd6T6kF&R*4S&t`UaBM1<_9fpPmLg_FypI=zrvgUX&4 zam3ml%R&~^AO~*yDGTvVioWRGQaP}a3-D}?okzUM+Iy{?Sep%7y`t){8j@9wH}%i9ia9y0>X~l-9Ei%2t=A&-QHnBe(<+hk z_hsZr_QT|ZlR#~GrSzAEz5CbC z=mtVSgv!I<3gMG6*^mX7mdH!$C?mb61n~+r362K%v5JavKC03DmoR&BG9E7c{U}xd zZL^-9;g&ZaXs6dBPsYJ)BF$BeXFT+RWqRdN2T%OoqW_e{yc*YD@m29&{~ATW-S8m~ zKj)v?&PVjSk~UP6UegDXD~F<_PYIa1s`bdw4nDO*X}CS6Em%$rpoPTOQ^$djw#t21 z8Js%6J5Fv@6v3WuC@<(A^Y7dXWUAdUEZ9V2bv9hNpWCU=xtpKeKlcvf=xDbIRuhGC z+sb<~xnt3gT8=Ve*;ZOguoE6n`d;K>;5X%RVZ3HpoS(4Bxk7dqGEm7!lEK4QK_IfcT61*nMuu?3P zgOQ=oqC|r*^gPm`E(7Vo9MK$m>l@oNCCfb!_Pt77Uh9TcV6dtrgc5@4U?_gG4k-%6 zK!LWeA_PK!@yl{@5&$i}{d=k`@((wzW+7D=UOz^|DPDql3SXSP*HpIL$fJm&$hD@j zlI~5<2hxvK^3RBCRmJS<#VKNsR!jYimSWq4N>S+$JJ^vDt_WRkc3YVi1S*?5>RW6M zWiF28nV{6r{i}HW??@B(&NP)J#$o@|F2>d0ba#K2n)*-tUU(P0*Bon0mbHlku838i zhP9=Gx&~$?-IkwLJ4S&f+v5AZ;!8NXcEt-Rc(F z>~#f<5B|%Ja@C4oItD?e%uPDDo&4%3l@$gjEVZ0th1pGCo#G0Ej0eYnJ|WU0!iw!_ z4!Q9>Oy&k;6iu~=R;pG>(T>&9#tBw_?F$hyu@CHSW$uB8|IX&j>_X>MsSu2>i0m`A zSS025Ubr-gdk~&n(37aL{{Zrzm8r4?E4IJEvk0`&aHU6GMR|*O4s(oO_%??=5umM!%F7KeyC@6? z(Li!0A>3;iB6o#eZK+({?z+capqBm8`Fw@@C7&H_fgZ>_zIP?OIYhA6eNiZ-^`I7& zTU9fsl?Oh)hetnLeRtX479#x3^P_{nd#D3z!A#{kJ5@jfZ*ft?9?FcBIq3g;GsN#o zm6jtgKLs$5iMaV=@&L@1{kXx=8XlDweH~X|$3{ z+^D98d_8J~QKv5k1$?$YW$e$ImZw#Wd`69JJfhTFiWKKCVW6$w{wlDaWj8JHmsWzR z{6iU&WR(i2C*jw&r%@SrT}p60bOK@mL&s6nEIO#?opK^5aYq-W=j^eAM!W&`rYkj2fdrBa}l7bCJ zPLYlp6#fS^K^v=BH;(NVw;r+nIjNGdvE=(!I2`1uJ2e)lnD1Czb~Omp`@jBcKad-jvMhW3P(mWyNd(a zWIMXo#U_dw1Gd?wdaz~q?wjL`QB8%)eXk)U?@79Be7DaH{h6K%xQA`48|ga;S&vUq zk|CNH0<$@N>BTSjsUS{+b!b(U{||y|9z~$RSX$f;UdvYhI!OS!G~<9IX0Kf=upjyo z#A)DpC{<{4^Hu!A>vPvr6+p}d--Ur;`=h*IB0n8t5^2bbw3=0ChPK^AVtByzG~LAI z5CODLw^8QWY17<89+PM#{rLFW(%E(uYl1A`mjtm~~e zhhLqK)Mc7BYTT~feh%(alM!lYj)<6mqUDKRPEgoWPjYjj}c-sW($$l?if#G=hz!9LN9p>IOL1y+= zfZ$tz)*`30#|iKq1mYg}?jcPpOpaA?!-B3C zvuh}0XPdZTl8~2P)tzJm>`~v?_j~!I2a1N0Tram9QYG)#rgH0%oc|V zM~(nGki8rV`yLtTZ9h0qaJi{>Xrz$mAu`v=(z4V^eXK69Tpon%qH&I&*WlKE`hY!g@a;!L<>WT+4<$i1<;^`S zqU)(JSa1E3Ja(E%T-IC|RQVr0Ru-`GeYed9A(o;DHm0d>J9aQr!2`3|i@D z=FjB<%KadM#r@k!;lH}>T|q%Ly};`T^t#gq7i~#XizPW0{#)pDfGP z+S%*LW{%!`F8d&Alp)ws?Vc8MCIOPvcBkqB>JN`_rOKSVtcg2=8yqDYEq3ixz8Cu3 z<4Q{5Pj^8$0DxY;vYv09yU}Hpb%tN#FaUB=5%18>g-L#f{oDH~Ci%C>w%J@4VY#2r zxwnnQ`xzJnJZVTOS&w`YcP}>9U|@Vl1s5WSc=tWxQ&%i*n4Fq=gcU+R)s2b@di5e@ zIfn@aCAi!e1VKSLMYMa%Mu)uOIm`s@rVW%DCbp9wJ6o34usadEa2H z;C&!mWjL(R8*JUsFvm;>xTd<_{z2#~fcL_#sOe2#b}#t>g$|j`E`d|IK&i9m z#uV~!xY^emrI>>Udp#o`N#20fM_EUQXWNLU3Wuab`Shk746dEsy|OwUpa_r&#nUyO zC9J%u%XZ14b9HVjEBWrWK3^N8dBDc|DGck`HTaDw?EFN2Pk}CmL=)4@PINhBHu>fD z);%(#Qq7%XlrvghA-b}l6^D1z(h%h^{a39Sl$Hp7TcCS`0V&E9DP9~5iLqB&8wEib zDy&8whn5Yjy#5SsLa4lq<{Ty7os1SHpJ~_&eI$JJzGfv+QiL0)TJqI7y3>YRh@vxY za-dV?Xyzi;(?mKA`Tk(l<8gh{*M0^r0zV&e$rHho3~2 zm%}Ox_ch|^nh35{#W~Wgj{Hajpy<{`hRyevntfm0|Bsk|vfB@tVAleAaPH{>!*>w0 zNs)y>Z`K)vj>v)HVkFK#!2x&t!Smngo0N=Y$X;8^cc+tJ&lcXii3qSszwH3d}vNkl?ox8 z#8#TGFTrZ6l={E~m*|vl27-fFu2Pc{!ZnJC#7erNCdj&d?xiD+%kx2=`*Mk|t!j6T zHEs9d0t4MrthTmF8*CTTF@^UL+BLQaAdW4YQXk*JgSof)=@`eqqJLqiYvJ+9pudgh zG$y(@7wp$LyhtbDzeT&@z1!JOu6fp&2tfoP)Et@WST2W1&%_cuK*b63fBuepQ!G;% zG;ooP-cN9G7<>Uq!u4tc@eM9c>kp|j$%mG>P?1A}Anh`ot?n>-z^_kO=j0tAffeEr zZ0|)5+og`$K~5v@3z}TR4-S>dBmUgpZ^^4Kmb^UiW|wO^lJtvBw)6K80e5>OhJ-5V zYSqDqr@s4+#G6F0S*v-I^AG`D-60C+fD4^ONgE?7&8e%Wa((s=9^8Fha_b6vi_v+K zFzYxIK{=-3=Eoj3l< zh3Vz`mrT+mbvEJOe9i2vg-b2pa4OEA~He+1yQ*K{WlNcXArA^1CdZG00V)OxK%@s zobHKH?fWh8B{7H^8+&TOY*OllA-f_lK53dXD-PYWru>VkQ_j&|OD9xaG!4W%%8(pz z%dUH?8`c(5O9fS1=_r5Y)H-=`{h6*Rsj(lZ_wwQx`4mL+($`oY3EsMe=3iP)B*n5l zdryH$eqO5i{!sdgTVCe!D}in(S<%(!c)4|Te0eSMf+)y zU~6xfQ}JC_8jX|kI3t0qLq~q;D!Bn_6ZhQ2MZUhZ@b4R(5* zJ)YC{MT6sfKKP>nk02!w0Z<9f(b_^y#GnFP6;P0{f@fOU5ovL5s9qhMJ?bEz6wgR< z>1*i0hZ};xq!|crEs_1fk-9{LNyV+&I0Q7%e)$pobtK|d-m&pc?Ulay$_l^qW<(;P zY01_w0$Wi;6HuA)kd8twvqj*xe3tO$YTtFR|1|#zKe?#A;L@a&du$%(uTWi>5q%qr z=l*f5fIAa@UP{Q{1)fJ*)TLjb!x(gaGAEFoQ8~Xq{MH5`zO1%e^yP>cZHO^AyWGio zn=S;Vw`MZssKvQ1H&yqFm-p(;0|g8notb(vQ=XS!cA3iKCesrtELvC81(tF#35F$~ zdL2VA{Alg%T|ABK(pRBNBcUkj@@A)G)ds?(X}zAG3^u%0b+PNK6=Y~v!%!OFd7BRK zILm!@%WfZa{(QvE*Vr{!{+n*VVuF1A=5}CY*`}e^QJ4Fu3kSvt_W+haX}?txo?!J+ zsJ_K8H+CMrGlAJ^PlcO#CoPLv3?N)A6ip5_TRz3xHBj^w+sydA*fRZbQ5zQ)god~a zH}b0(y@-KpcJmS7BiMC_fzY{;{0m@^tS2?dh>WW-_;=Gzob+=-9xq1@NHiP<8K zrD*Bw?s>>*4e#>*YT~U0?eH1nE>E)1!UrV!@DSXP5L|K06M77|0lI&g5GoCCXLw7HY`rW?#yPNC>zbG`nX}Z@LW4v@ZQ)@JFP5MKL$Jib{ z!~<(6DK;oWK0*`ymT2AfFFa=%sF|PxAF0PHt7Lspb++2>y!8&m4&>w7%-Oam zlLMvIpS&#rudT8DH?J%a`$9h8L1`#PVKiTw5e^QKD`hv*7tw{%rN2pn)s-Fd0{`A|EzeSX!?2?Z`W@+dn>Q zE@>^6PGsb?{k_UDTEtahllLb3xo~Cy2B?vP3Cvq(A|J@@f z*cmJ^D#`rP}*M$fv$8VmvLB^GG?%8Lm>q)ud&mN7pq3cp-*f zoHakU7dqLtvrbs3iTF$n%;~#rGbD7tD=Fd%aA%WPi&aNCjGHOnz;jQc!S8!Ib!68P zN4t>N#5FaZTJLIP(i$cNgw0v&AQex2sO}LkJP^$a%=+h3`p;SXl((H|ZJ~OfB9rIq!5){{1v*jW&PbQH!mnvZ3NKp4ZLx9Us`GGzMt3#;qX|@KY!N+ z@bz3583<(9zC=|wH$y$$40@bkHxosDzdEoEGJ9Uj0M;J{xGs4Y|^fK{|n4Oj=- zN|dUjV-Se8S+k@lI6E^HX|RNep1_+L{WTiuc68)z3KSL}aU%ghBf zq5_1Q2?$`*bzB0Vf+#Q?wG-)PbIY!_s1ns0V2SupcdxHuO6#Gtp=<6LOc!mbEU1^7 z>|c|K@bV1OyNxLJAd2QOeL?w90RLaB_IgHTsL%<2HW|0jdsI7Axm0~6Wv{E2vO8Nk ze+T-5ahA&Ft9ICjEMup2!$4Osx`=yq4O&t4j%fer#EtHom5C_^&tl|m`srIt8dL}w-MzUv=Fq$v3Kq@i zq!e!bc2|RoWd5?my_lgY(kh!&?i+brFrhAEIum~F9M|fc7S$nIQxV@ps^9*AFaB@9 z%IN#79>|;vX9T3s2eoRZI5*BU8!i-1FQh)2B@B-FHJM=+-6UOJe3mA$nnNVOMz9mY zPgeA&n39;rVrFG%UzB`4JKM z>J8xSgG2@eUR7PCLpY&e!`qQwF!o@d0Bge5NF7PyqNC1rvC_Eq6#U6t2nf8S2vM4v z<=Y=xC6QV@D2axDt8MXp8lWa8HazeP~GApoXB=v675Nh7_;F zBH&f@gu^w2wSrSi5RlA6{-z*WR8*z8I5A#P_W@qc;q@*uGlNSYetdi&hlg^I`U6 z_r38bmfgcVWMJ7_*s{dS+Tl%z$a%vL71Lz75qFrZDAvEc5A@!MkH@IAD!w zfw_=GdVjLEz?o&9E>(f7yF1IDwK({i2q4n1ss=u>+8)w3na$?UJrAtGgZHS8cfQe` zYQ`~UHJ9OPFp-(R8pciK>PIu7?Jo2Z^BMI9+1^rUvvcWnJ6MQJH$Cx{Vj+1{r^>wX zIBUC}^{VBUgD1}%EX6DSD7@o-17970a!o~E;~C7y{n5>bW+(ehF%%N;sE#Jy@8pNL zi0z4{XDCtfMQvSb~HL}DI} zW-39xLjSlCx7%KrJ(p59NSraxD}-&PAj?2cQpcpdEyb1m^aFg_9N=^U=1xJ-X7U{V z(_>jhFi;0m;mP$I{ckB-_s9LG<4iFD@A{BSqzIlASTYdjTo${d9MrdvY0`olo06ZZndeUxF!(!!RAKEC1Cpx8QT!5%NR zp4^PpvqS6_Wdp3q$FkN%uGcO`kldB@-S@@mXXLnM1%J<`>^HXy#uC`4>+IP#G3k1$ zWNITGMz7rtmYMO%fLaA}E5m+XXCuYKAL4|zXEZ4ATn}&1uDQ8gwBu@t#z+>wO9*ns z6qeuq9VyDT)PDe)VKp`hF6BJ^*GxWLL!rs!YQd&L_fj@^?X7JN!T(0jCmpnO%00#peB| zx$#+7=y@&re`}~ZG@Rz`X*Ihf>#+t29}~bvrx%t@x4=l_kmS& z$^}6u>4D2o#^Alky*l$YKx(bxDjZSm?O>h!ZFyD6Nz>5OXQQ=Cs!K!rs83CG^vWdW zl6(>j(v51;7{rMa;eV%1;}IC9fe9eNbXPa3Lw^JbkmR;M;f7aJuUv^e@o0q@w`B|7 zgCU`Ce2;fu7Mb8bqx}FvZbJ~|j^{51GiXG@>%HFq`g6c!(S@MTPU-57T{?N^)|mHgXC?#dCfJ^BVx+ZMpH+B203Ijwp4q{dn>~DZZ`MN z+iCop{uCn@Ej-_=aI*F3L0dsTSX0P+rWSxK&(^O(Y9*_mCX6KOr8m}2H%(H#y8>|s+$_MV&MqQQEp0S&xREemnfhjx zZ@2NO$(AN=#vsK@#+Wx){|q(n%PN@jiTUNR6aSqTS(uynSL==wB(tWkP zUtqT4R&loZyQC@HN@D(p+I_sf!O~tLYdF6ggBqR=vkem^kd!1(G?voKqkG68(`K~Z?`h>2CN@`Q`#G8$d!Y!<*H<%TA`s5+-+JD}EzxO<8Hwt-SPJSn`m*|v zIahzE8M$`*TN~o)e3=(sP3`tr<)Od>rLPCYu&t99+h*IrbzaIStq|LYWOsKjVFtO_2`K>&z|6Q<)DUQByl#RJ5z zvNIx=OhI`0!Z&6(3AI82MMfaMnKsBES398Cc~JA2wkCK9+}V115~E1u4Q-fTTUE9G zNvP`q`yfWutG5;=6WgpsIv42S*7$@7>VWs#Yw-X9bob>k!QC(WGN);HiH>Ns%Bp}! z9jHrWLx$A8DrkRJQ{PFgkhzb-M#&uOcAMUpU-D|ZYu;OGcw%NF6|X=Tt@PIFagHF| z#{0*RFs3XA;lI6cBM(~4A!p2C$Prm&v8YI@mPJC05pyP4!uUB6x9iFsb$t;-gq8>z zo1d6PH7TMssNx<15pVp?=Q2QYHl>T@@+f=1>%v_q!1@>vs)iX|n;q#S?vY~U_{^7n z9#2Qyf(E_Z~yQ&<1YZ=MzIt2j-E?@El`)w`t5}9yFIaVp-uEEb5^#3s+*fz zFFoFbt$oV!8iU|@r>3`6u!JngxJ!mNvdF&pSDRqC-8PYIY{yYnX_LGU)HFz&+uqh-G?zYLu@pSqsEA|G~ zoa~=;hn9)Pa5yl%8KGk-69UbRt+uBXb@`@9Y60(dv>6=6l3>i^$G+Rj%-#OA3cp07 z^Ytft=;rKOoV-&t*wL+czFKck*{Emg z^*go1L)(MFBjUcdcp|?1%bpN*yQ7sBf}0qninECB8d`aF@yl!Wg+c#XweP$+u|c$= zM)pNTFU+g&@d|4}ju{Lh?@t))p{EG6?@rl>er*$Tn z_#P8BZ(c{7x4Jh-LLXlos|!Py;s#qwXYqyL>Ja8x)yU_2-NF@S1A@S&xqzTM09pb4 zN+cjU^Q9rW`;qCkc}%}3Vup&k-kQ!H3JlK{p|6H1V*OpaiGuEKNFPcS5}~@0oX3zK zcSpfyrN!rcF5v=kah5mR-joM_PhDeIWP(HuiB+F1jluda-^q*Wf4hCsBwwDih!8JA z7-Jv`IH`1)?@Aw&Y4N^!8gUlvFH1IgrH;TRgwofT3kDBYx7($?8Nv;6%HGA8CMOre zlu&@p63$7+P}>8-=?Z(t<|3`SSW6cPUKJ{wUgyuy_zp=0%6FO?X5$nT5R^z$wBw3x zHJS|UeK%{?H6uov(9f|R#2%l(?s%Vs(t!)xO20YM6H2Q}*04XAk)2}0@dE-Q5nQxS z7>=uGgX5srfS@;g(@cGXKR#V1j0Kl+!2Qb16^ipOG3aq;*NWvTUKq(~;Hcj!mKQLA(?3A=) zrgDGxABa+Qp>Gfn%JrbQ0e6S610f8gP{Dzwjkzhz_9c>GvMH z;!9bQWsRS7WMP_BQZp{TUy^(Gb>iN6(RG(afR#OZ z{xPj@1n=44n%+kVU?8{Afi5EI(M@90S!Ez1W2BofzLDND*W*2k!pi*Or<}GUYN}HUZZ#cuTzlKYMZwXKnK1&>$OH-b5s!s*2!UG>2=o;$$y!Z}k zYF)g!MtA#Uy4(at*c;Zp?Xw1(JUy6VJs&s--5LZ!4WYJSBuaqOQ~Em%r`YR6a@6Wb+b^L zJgX8uD1&s>es!|6X|#hp9Ju@CQ6R!NoSJJsYp4;K?KW$3iRNkrqk|80+0)MAnO%)w zn8Y8?W=R{;#GvcD>MDn>Tz@<_%sMEBTkdW2{<~q6a7nz~ibp40W94aPz|H$Gi{ie+ z_A=&cwQ7I%HOOIqKI{{GTdO9A7(Zah7EGQ`XP|u#7;qahf~A8)Glt(I-4f*tRS%;5 zr{g-FF&P8-&5pOa@jZuZCQdUsk3a`?j&I@0lTmM2hMQ~t%)WP^uysyB^NVX}_0+1R zhUwfDL+%jA?Z|m^k{HWuSc`TpPnlo)ovQJVaBkS`CY!dai?yr%p7NI`2x_*+kg z{d`B2vL3Qf09n7*HB=LYUz3OC(u$yXf1Fkcg_$=FymS(aTWYfd&DFpzYs`L%0i=%m zHgW8?<++r->P(BN#sfAH*?AIX`N4EReJ-%_TQ8H!FKl&EbR$?ykc>*rqKk70>D+nR zzBipYCh2L{uim8pE8vshS>J|5`UyF8ogw`Aa!+%<*)(IhU~MsiJoiBESe9B>jU|AB zOga$k`eYM926`m~b|WaKbwnA79skBm()m{iE$Ecj>Kt?=6B?dEOzyTtj`nH0T=B!! zke{3~pDO#uPo)hcCo1$UN4`P!KG>XWHk{_(M6dwJ3@Pq=rTPX3G=;=6_BNjS3gcR_ zIx|<&$V{vf4Z{RT6xeVWoZ1XFP!%MMcgBzgwS$ZE3ktd&grrPD=+>#}q?CGdy~xVd%Lqz{yKS|(EG6vh81w`1Ij3Gk z>;njZ!}+1tr=oMThI#nKi`F-WnpbPi++AJ_dI{fdBATyM)#>!!ceq?~7=ED-V7^$H zA>0*k)!0DV&tgR;_Sec%SFgTx++0d2hx3{&n^eZ(FDYt;UOo3rN{#l$%H~9rujdF? zK7=9`$H!infww6Wzt3UDsDCC+ngBbRN^%0QQgYsnNlTnLByeC;=)b{uPI1ojM*C>Q zswj}xZJss*5fj7;bj@fUB^Wx0TW@dDX^XK@Jf0cKJqcKSlirx=(#3D40CEgy0*MCo z`FXw%S$)xVaG7*XQ)eQM4=McN<0FeN!KMU#yhx?8Y=b z5jj@?B;f?qpYM{P-6)>>OKy^w{sY~tQk0phz!u1UM|*M?LM zwqYJE`8ijA(wy(#A4^RZf5~c>X9PfLjhjJ@#xMZ*q`D&;TP}OO=7I^F4@V|BMGJ7@ z>{a{Tt9A_Xa*ed|7YV8$!L6JQKarAaP=KqEx5|MTrGXB6Ne|gRWB+!j?=K^Hln9v5 z0f$gSX~ZY9Mxo#efv)c4B98$2;Wts-93WMbpSxxHV>f{mB#5;$Di8r~KvonIM8}vd zrNBn$_0!}~4cr}e`w}e2zHU;GEKHyih(!V`@WafE6xltZ3MuLhV6=#4FeU+~#Za2bipXF?Q9^^UI?p?gGQz1`xe)DzQp1Q@1!&^AzPnj=me_EK?U3=`rS3Dqi^!w`&X}y15M9>si-?B;C`6 z0#CCNc{6e{$+9y=Wphnh`(53kCLhb@Y-a`#axT@}D}Dmt=6s1a9~}j-X(_udx1SB( zTW0#Qk+oX7VoS|pFciY6jZ2`|U4jK&ut1Gb*-4F`T|@a=NH6L;$9E5c2;QRv{I20V zJbZj@)D0hO0$y$7nhsx|=J|)LVyoUtdImCj7h_9kDp%h!65upFA6L-kbwYO`vlGa5 zblU3A)M;Dc?N>S#WxvCbVqqqrvyg7HTuExpOU%^-{%jk=7!QX7;ox;vQoa3s5*xJU zpB`a{A-1tkgw*|O>hHBhPwI*`>6Ouw{O`3Q?8c2%-wq77Gm*g&H{ev#@EP zVnHZvC8)3xuuu$O8Ip!HlAar=o0&&d!qgbW?bYysF=o{I<@O*Pq!Tjh9cUb$1DUlp zwS1Kb`iA?j>kA?wRf`+5()zsDV2RpE2=$ysWYhYUO*D5Xru9W`kv<8h)r1o_Bf<$y!Bt>YP^0JazdPG`C^j4msSyD+jya;yG znBu;l*c{>XTV=P!R$#9AtSB*su%bR3qEj$vNa50h2@v2|Usg6PTt=PyIL%|t{aYeV z+gDmpV*6PULYh4JrT77B`u~f zq*ZmVP}h%eZIqvPNgpd6NxhjPh&cYsL6Xj7<|vpNY|5_Lcn#3c+3{YcnmdtZM@Y0T5E@xFc;Qa)4@{ zP0)!K4E#&bAU_Ic@zsXH`m{G?<&I+BCSmD#2?xhWM?VU)# zuY>MB)|&6&VLx zul-)pzWpKhpR?F5o;&iv4Xt6R%syz6bjnvfnW<(@0zuTh*P1!DG0c#L!aO~iN)kNr z@N6n`G!_)BKyrRd(~(#nJR)g- zhk8tS$+252p~BFN0$2YE$dQs8>XgDt;yFbj?9Mh%$hysRD2YAP7shfiBIpls$X5l1 z<>Pc^%BjM;ZW7I#0cNOD?zKP}PYLE}3kXy>N*$ zGiq6;qLHp)03pme9k;#zx4xKc)G6OR1;V7bY!vnT%cY-E7zze`MizX47mMf$*Yp1B z&~X&@bpL3pwV>hEdZJ8DhB8|Ly=jbFYn?}m-MaQhvs(&!I?1N+@;I_2coyS#b-n4k z!*Y|3#P_r`9YIr_+{OJx zPCp^#s|u=av3#w(TXTayN0_*U6K014(R|0d4Vn)F3Kv}HLn<5i(nA4gK1=d$pUGonvh)vdW=4pp3OS}Ht(cKE)U^GlJ)r!3r* z>rySP3rE!G2lNf627@Qkemsa!A6JZi7|I-FNO@GrYySSj*a_)hf^pCqkFm*X=R{-5 zsxw!{bv(z##SYZ3Mrl>$EHYdpga5p0_)?3T@Mkmt>|4AH(>>qyRq}Wbu*$mLc!-In zJ?Pa$45Il}kqD@Oo=Q1Yi;6@{Oi9=3+MJ<#o*`99X(V*cqN>d-p7F-dz7VUkPzwBF?juVZL)J z&i;&c{jW3$uCKDluQ$i%bpF>%J)E8kb1GwSvP9EvMieWXsA19;3=;`h#6vM+;VAJ) zoK&ohcr-ze6(MW{Nra-rtO&_yl1L~_N3xSxIF1m?v7u0`NE=ybX!A|01D7bo?2NUs zu5<9R#~Ga-p;Rd{SIA)3Z03qNDo&M2yGX$;s=i^De88;~|0|e*xIJ6ng>0KOn_|uMIh53Ey`H(d6$^??Vy1_{AE41vrR?r_SJd zjSn#QC90S!w1ICtRN>wY6>eW+^44`xzHqpkub;A*sfv~@yBB~iAgD{$h9!6OxO{Ki zV6>>Ac$H_T4W68etCDfWg3;!i*J?sTAnID>LSX1R9f2?%p(s6x4x(0su4D(%aEuN8 zn}`O2M2sLo!z3KAumTpLV2DU4LMRwk1FKN1at69C9UyQ$_gsZQu~MYwI#g;lw&##{ zYNT^%rspP^&CQZ6=9tLMkhM#Um-AG858wCj{dxmse_ndXmr_X&DVD_EIi3IXR1fc- zi1YEA$61psqifebd!k$m@b`Oq`R;H)os=db6sU3AnrUw8HyFENj)T)tzIQ6c6XOA< zt76d=;Mc_~BK>+<{gw7(A_&Lcm{^6EibTj0E%%{@ zEPP})$hXh`svjXg;SX8ArERkdYKCYHQ~;nEZ_YhQ&C~1;0oxb()CBM&a>#mGY_nTP z)mt0}c?7tnMNj!b;Bl?q2jJ4zgsi>=!G~CA*WFj~fJY?qucg!$wDQ*uMRXs3JDUHW zB=S96%J~lnBLU*dQ%#{%z?Y5R^7SS&82ZYtTniWuyLz*%OI6s`-oYQg)XsRNwH)G> z2C1NAP26F3o5St>Hn$B-5e@hZePcbN#nsTqd*P^Tf5k*({cJDSi5m;sf+-%|MC+q|xZ%ddgF zh{T?BK-RceHySA&kOi(>4;DaZQ7&HTr-62{Ad;y6{x@?Nf_@1sRnd`zN&lbq%^g)2b_Ng`zP)4NBhxEg=(VmtXJ zSKJdozXdmTIqd8xvb(d&tpjza zytPyZAaU zOfW8DmIxip9$xF{7kU)*Sk;Iri-kdl0qrZ)Z7%axiq;_f!Sh)bfw6QT_l~GC0odlE#)ZMWpb4w>1vsp zuNGNFovIJ}G6ui(L_2pKP4ccy8SYz~XIZvLJQbsY6zNak2quriF_0F?Ej_gYBoy2t#ZgZ zBU+@RwloBWx5GK6A(8g_jLN~>aDQ5 zJHwXtDxJ~Fim$|2F1{4_67sgizOgp;PMPe_1R2X)OqMh%YBRWM5eS5M<=^_3CIkcF zIGvFM?U4k%?Y;E0_t4wkM|&tr#0(M%SVTinqM<0UNSshGqy}^4-TB~GkhRfQR?51= z-ObGZ=z^E7JM3ZJNq++5d8&S1_B`jltUKoY+IfqwgOsJ$1OTewPp*I+V;<>TCK0Z- zh(lfU=81sTcA>c;0thX3-p`_*Y#`2)+t9-E0Rd6}($*o2u2)wpy$!VZx#MAUfF4Ge z0~ZDo6xU_Gj7Jj0BMCMSZh6f*>yt0$D3l8nD@DpRn_{(0rdnZoUT$b&c9Kjn%Vd6* zu~MFbQ?1JjA*uf-kxFK0RZ#Ka2a`H`XFK@D$pmj6Nb<%t6*hOxVd`E(GPxyCa}D;7 zr}$rcI{Cq95L;Dowj@!j%-Pm4s-687$ z^`z2`tL#!ZETky4+J}-bC@!8*dq2pxxI@^V72Kdv!j#A}{i^86y zkO5}^&Hn?C53*3_zp(1rc~@X2m&WrOYcVHG2sL3&LR-k@V>_o9nj7FiW@Se(G$3X| zD&(;xUgM2@F88cU(;ur44tN9%k5=ty;Q1QGs!5@$F4>H1@93kivya}6ej;WNQ`0eYgMeXT zngIfalI3ammPXd*o#(Rdkk`WVo8JZ;z3?P*_Wwn?6X*TX<(z7tl=bh=1-N~XHg)wq z#gzxR1YYT4XLXS`sD;u8 zD+MZcnVMUp<~rwOhCHcO?N%e>z!MWDFHN`c7l(XqN_Fzqbrp8@X6TOCBrK1R=^z#n z5O6%5Y{leMCd%gzcJjnTfbp`XdN(PqE4fN>VLkP<3*`1R;67dRf8H6g{=2!&t}N)q zq!>ZSr-2Quu5!EmQplF801)s_F0LjK0zLse1k9+rthrH^XA|Kb4(s6G3%q3+ldJ~3 zT?+X(z=4*zkhj^x?ojBvARho?E%LFB`N+REx7nA>pOd=RE8t(TH0hsl34bVkZ9(N+ zUZ6IJCjSe_4^r2JTi_LEv5;6n-TB{Gt67Kz^&eh&3$T#v>dkZiV1Xmq1kMWFOoVmV z7?bSiDsg9bg**GpZ0wwC`FYrJO{NNAhI1xIGZqJ?5*(TiaHN3B_*z9oi~z}iMO!36 zA`&MaiPM$rVjz;BBOIqAmZCG!L4Vf(ovAK#O;>}~X#7(BOERB9?;w2}`~u*Cp9VQE zo8zYIf0HiwHX`*=MCjJW%-4Z_d@l{|s5&Pr8EFIO6;obpT@Ae#Xh2}dnZcj@EvTIU zEn2TO5E|(5S0#>&BtnnX%_+UF{<=a(=<|B|dTc&{LI*vef&~lN3+N_>ZeFx``Ht6A z5&-i(2!@%>%`#iaFp*C)SuQYL%rKivlP%`RmkZ>oWoGP>8sKK10)UbSrLx9EIlyt$MyV@i>dn#;h&(R-t=?F>UmWO5fbVLhiLLw0q?GOb!K+e{fDrp>?4fFg+iWg@z zW*s%Yij_gWQp8zE0O0j*z^Fui0vM_tihLumqjbeA1!H?<#vKYh0rGu7e3cAw3D|Ee zG)U4UxIf*FkwbwUrPgs- zNghQo4D4u;PxNJR1+6s!KLy;ogk#&l=RiKWkOkfyvJ&9`OW;RXjPw7McX_=QGoPl- z#0eMlZiXElRW`PliCZ?U&Y9U1`^F>eNe4NS2{Dp0 z7%K}Z%IV+o3`P=kM-ud=y6H@Ivc7LU-LZBOfgq_!f_OMaEF7mj(SB*IYsJFxt4Mb~ zd)i6Y9k*TqyxDptzk3`>c|HJ8z90aAwCmdS(gT0?LYbZOOkZIRfOR8?2J}q`3?TGD zq;p!GyJk1D!#6d=(Jt*n$m-MJ4qw4+1u*LY0AT<+LT{`8QIFNH&+`KSdLKgTpO-A^ zp8s76^f*EfgVE0FlVV;vv2cv->tDZRC{~Khr#HHxb~y?vV90 zW1Fpd0W>jcr`lZHMLqj}+1pj%-9q?}P>*7^1iFyNJSiSV$jvO;NxibBVCr&4pO@z} z1TLg@D543?yASvni+Gp(i4c($KaeM{4x+hu^zR35wL)K@E zZMIs}nspDXhM-Bd)k9XmgP#VH4LafjLeNdU$!u%v-L~1DGi3dvfFA|cH1S870r8hQ z^33OYR_!n<;rFE!rxtMCnI7UjApc($?feI{4$x8y+X8z|!?n^K2~|%= zBAQZ%zAu@jKhnjKIrEyn`-lOzcY5q-FL75-javr_3?{R6Td@V_SI^fN%f=YX>l~Vm zvv(rKz8Qnl<$4u~^7l74F*86S5GECg6AQ=aYU`#anqn}Lpf}k`PpX@N?m@az-4{sp zC>{Qb-7Hz~tKb(w){tJI-rUxouK&(WBmD}v)8JLWn*qOo^k=|*?S4sK;peMpQ`t`; zYp2g^3cF1EBeWZtRhLIo+mONC2)%dt2Xe-svX4vTZ!Gu1otHAY#GlW7_uNH(ciwy^ zq6lMiJ$Pkw*PTFSC+IPRo~&0KXx$*fphXZ`Xuhd(s2*5Yg-w!$5QKuE*EM3_)U%Ge zx7>Q(cuO4D;l#)>rn56l&P_9#Pjf0iOQtYKwvZ)L%#yQ9WNH=FZ$P0?G?dfD43&jc zCJ7T^-i&lkzVQm`{H^{ef z2BuvpH#r2 zKboRFmSSDcTDseMSexo5X+`LWrAS2L^mX)IR3lmecm1HG&Md!rqpN5SY^brl5X z2a5%Qpc!PxhMgB==(wKCY%a}gZkBXmj%>NWWI4~+>^LJ+BTQ%0jAW;owo5otRT3!_ zipH)07qyzTOSVnyM);p{hOCq3HhcKWhmw1NgVcRXt;`&fm(A_1BYi7}Ea4+J0Cz6% zDYpY}bcd|7stTYvQ2~Hv*pDBKge3lZK@K+Xuwf8ycMpgE!Ps7I84sU?qJVz_-T|y{ z!jEto#GjhmDwo#XlVT%+Uj`Xp{P6IMlzdi7t$Mi!x`)F^ZRoi zSyAm0{#DrY98X86xmwc(06N1GO>oVUV>KbUeNAgM^YwfU+tn#lb zD`*ig0;_MpUXk9BE-)|2BWraT9%r(ysqapKmqj{b;AOx&4zg00-|?%jK8IR8yPp=b z^Gn}>wx4N$(-+V?5P@5e_QUFCZOREIf(Y&aJ-WQ(_!VUNnR)~2X2&0^t8iVywv!?} z-=ko@QLzZtGfK5!U53cm3VI5mcY@hb4;Gjm^$G)F)wiI+oPX~8_Y0JaY|0I{ZqVJ< zLw8%xtJAcURH_w9c8RJ}rBt)Y+a*qnon&l!l(XqE#`9^;6th%nHZ`X2@SOEgz6fErSKS_=8{r5@lO4#y?(*FkPw!tuwE;!kzgIHv6?T-GwsTs`2M z?k@oEVHq9egwbB#>@9$)YU!$!LLZ;gsd{3;tJ+EZYTYZDs1YC$4A-0NM&fiQJJ^)ypeNqW+OD+>bPdqo*^ed!n$QqJ zplkZ-lI`&;^V#<$q+bO;4}Jz@0a+UbFE^jbUw8IP?=1M^ASHFTo?rj>+|S;sy2hk) z1X9SEx)q!X>z+*k-f*a{Q2F04qqb^VR_ zQsVnQK9W+U#OaCCj7$wPJUh;CVUF=ahHNp*Y<`Y%wZe>D!c##3g+c+Ov(w0dO^D0o z?+LBmALi18LH?p9c+5K-dQ9J5x!fk*0e%P^2X1K5Vf6&!14xkY}mjTrI6p&b``Fe#_1dGeIP%^GMxW)r%1G}A-fP~%vH+3 zK9biM%SCAmH)mFRPuxWllGaq;Z#=njghP`t_NGnt%|tnx4sy0AD64((ipA0m`onR$ zF9rU*Mq3inU8yxA@b@km$-J$QzfH#BmPSs_2yu$qN zOGqyb{uKDL>Y`fEt|x=6`~VTXclpjm%|ZmXBSrM0PEp0mMi||Q!17y1$?6fLvtJG9 z`2oe(wfd+aYtLNt83+rs0nif&Em3#;>k%+I5PJ9g-`c@Qf!>BN67_xsEoL8SnqCh@ z%}+~~8Kgbl#%(ve+H0U#DKIrR#dvyxT&2kAe46puaYm=dn9NKuR+wYjE~!gVv8t&$ z0cO2(A3L%N_}TED;xNDpNZY5w56i5kmd~(6fZs*pIJ$+T2mjU-pgcN#X@- z8xj7mE%9|;yNy|p1d!{wS4I8@AX5`Oda{ijJ(+n&x}s$)F;B;KH40Uo=ZCx5GZ|oS z#$>z@AZ-iEo*JX;zJvjWrV-Qw7=}T>2(T`eVldIc+Rj1N_N--N-$oKai*O)BG!!Kk zjuJ3~Ejl8y?$m$f3%4${Zuw81-3S1o((pF{{mwC=DH zRz2t@f}pj5u?dWRgwYLVC&KIkqXP(n2)rsYgx)g!38JAG(f$}4`!@mLOP{h`rdTde zvda`5n~~WGPK}@9^u!s)veTR@%#p8_aa;$-b#Z)GH6d2CG}%gsKYqR!LwdYxQ-K>g zvm`8sfT8B;EA#+3fA)Q=4dy}Xk(jQc807+1bhhC+JXai04esg)INI1 z(gpHC>OR56Ztr#?{I@tm)<2osY?Wr$Tvo4Qh4X={IEf07cOm3Dprrx;<~G~*hOEDn z@E~y83V*xfz#jrn1$LA!I)Q3Jh7f$1dUKt{)~FYNKVkt5pZ#Dpir{B~x6+89lQ0&v z*&3Z5CSS^3mBFp~@U^oc-g85eO`RDvqcpp*;t3}6Ax82V2c}c(8xQePT4%hXQS$|^ zf6dw@C@yAHXc}$7Fp*%GR4hqHtc`(4l5IU}>2L34^Y z4j=;SRR(yop+ynaUCVb2yK_)^h?eV>v0`r4SAw7C{py?_;`<H^PiB^{y($|5x z0gNs%x)Ejv7~S=T-C6{pMe3ERS_m|YX09aAghn(JB^r9QkHyY4+i-W?hv&O^zK`uX zoE$yQ*~znRMB@46d(nB5U&eRERH}jIce?$-6d| zxo2>Ofw)UDTxrSVFuS&pCba^z1tr@gfKMPeEQhS`i_18BHP?7v8r~z+o65FQ6@U+X zSGJhHOu!c4jwPO}Zs5m6UGHyH%{EQ6S64%@a&d;NHsJkNc>>)4VwZb3yw})XZmC_1 z4`&4YC2%8PtyJ3t_>68_|15TA-Ahl<@^*>*7fZNjJ*4;wQheXoart~`XUNhd@($pm z4I3{#TGw#B(wp@C1vV^N8mF=bf4#SZU%#h9N5oc>OA~V}qw}Ai?&eHhW2B;-{nwj> z8K66oWU#%L?o>DHyVtNG(Md-v#X#2peI5OnhS|a+;Deh%dO2`s!JPqb02D#%z8L9E zfjd2~!#|63XTYDR2LKc+2X6#fc^VOY(}LEj%Ujf)h~SOL@^|Xh1&ZcC3xl;|*@uyp z{YW>h#`BsZsVg%$um1STU%Y9kJ%7O?!34c7B_#BAFgn3V&VRoJ^i*AD=#_@W%bgdl z=cTP_1hl}pZDbVa*mehZZo8wtdig$c`B_G1Mw!XYGMt@ZI5*A6)Ci;LF{TQ0Oje4j zNkr1cxu?qg13B&Uxx8mvI2g+7+J9psj!J{fouh}&w1A`^if zC6%$%B&YzuN;PMPEa6GD)lEq;K)w|r|C!5ZyEP-`HrsKBtZz}T0{8$|M@DH` zt_R?oNbxsfclMGgH~x^-=EE6eAvuqY14AKDl4d$Um2r?;`yiI5SW?JMYvV1NR_!*>eqf z>zV!;kV<>GX{hW0Z*KXHKA}VK7SK}QO{#HimhG?BgRnL((`c_D%ijZkMh)nS#{us& zc&9J0J0&`3ouGy0D+3}(Ed=^nFgGHMehBo{dk+K#>f0w_%=Zt`=l^Xk+eFheI+C4q zBsd9Sj9qd8AF@neil0Ep zH?#NvMh5sB;N^uaSn^%Kn;X2fUeKe8l@g9qyQ%}8tHGxaM9Eav@^iP2(HFM~=qo>1 zJ)8~T`^w?1xHg1!lUOiB)QXUbCRm&3U~_vv>$(QnvgQW*+Iul|9aA?6n1L3M?~&l! z;Fsqe_yzC_;Esbcg{+N$JArggfImDR6maGP1MYmLw{m|p^%YQk3RyjhF#DHnA_!}1 zy(y^*05lKQ-5{3PDylXL_CAm`HJ;78^8$ae9{YXmR#})xVV>(FAVd_5jbN^?&l^Su z1lJ?96llr1oRAi+|0|lS0xoC<>2B+xyRDvcB&Fp3ZFk_f4zA~tDd#yhe2n4gVUA9o zDW#q0w0 z3YSOG5q$PYgahe~ykkR-`_~lM(wWE5SFZY%?TVIlFZxnrDj%U-Yh{U;l}+3T&>KzC z-`>lb?lo*|>tQh2MQ^H`b-n9oPjs}-hn3!Wl04JkrNKR2m+NuTb%(z@2HptBg1R_X zjnP#@7N0;w?q9wRd|(h^tVh<4p#noqvIh>`Jg*zSK{J&3FxRD;=)ywbG2a^4xA z0rxc6=ilWTLhAu@J?L!^=m$N8FxG(HSC2ZHEz&&qhY(l+3oB4p22I6MZ0KHl z?(daqnUSdxMrKAC%S>}NpXSumS(|U}_C()6^IwC zMiBB%K;Jcb$sq71_i*?xjqT-@6C4q{v#v8_eO}Z9Dj(wdR{`Wf{Jw_#zSy0;q;uZ0 z>=^Ko`3ZWl41@eLUy94`{=vEcO_L2Z5~oW7zeV;=z7)8=Aa94+JDTMA$pA0R zSe(oTP+X4_E?IJWGCTZ`0|>eE7?Yu z{`_4zFWKWvf-?!V5pYM5&SCIoz$<{CLwfmn$qr?&u6iop1@BY!W}(Yn^MZFk<j>`r}X?um3o&x+z7xE(@k75PH0>xoxaR7+b&` z0J9$v=mjlto{W&b%%Ie@BNPm?Wz7w2S#tvbuIDhDn`I`OCTkZN$xLzR^kGg;oMtSa z=1eh*>$&*S$MYpp1xghwkfFTb*x?A@Iu&7KTaC93lzH=p41=jWMuYcxSA)6I!bBZJ zVAC*CJcN+H1}vl$&IH~r;Jx1d*yr_Kg^L={#`d!991eX|2>BrJCYo0Ys0w_`*k+Hl z)CDd@2qE7|V|>8|$h%ytdNc5%nmtxNDgdw|HzaZm@Z(&Y?0@Q(ro0i@$>mDAntP&4 zBlta#H&Aa1e7zQ;Ebu?1josuJ{svZXozT*U8!z645 ziAUmeMiZ=$cd)5zkX;*gvaWX>(O{UM5g-(_FbosXY<9VH=OugWy4Jp*N4k?xJqyk# zvUVEWBS?R4K6A4+|79~Dwo@oxb4d*&OD`c3?_B;p7`hpm)d3X%Sn=~^U^l|(UEV>w z43wTygQ>X0F?K3%YrMgplWZ*tfies#Bxpxymh=j*g$?#M~s~#Vol}o>H|;$*JK=wMI9Z znh#S2i@umcB&cM{7Cf~}7_GqASb&$N0(^ET#$8dAUA zpyUat)|?oklrGD>ZE<2I%CW4;v!f|q znh0{L46aJ{YB*8Dq%WGHJK4p?zV&QQ_0X5-V9VfU*7dF@Xa<|udE$VVL%Orz&VoAz z-Y~K@49+w-!$|iS$fCLs6w6o$^2pM|i1=IT4!PxQtgNk|b%8gm#&xA*?Eo#lyeY~) zjI2GU#!|7kbq(j$h=2z$f~?jhl+T$-dOyP03}z1^bSEP5V_>v5)koDeok%E3WIngJ zC)LHywcF|++xM8sOmlSPC}(HJIGvl}YAX2{lTB_GrP#;fqVPYrTse~CN# zvTRIvtnVlgG*pm!LANVVbm4ej=XhS{>6uRcDOqE%ZFa@JXICz?$DI)Rw(?1DDEvPW z@q;ZZ1|Bj% zJ(={&z{_gZSlOrmz)HIz_a=fK)%SAkov|_CcK2}j^TzgarWMClY_nbWaQHja8v_3p z*R~%(4fu+X;?MQ%mF(pn=M>6>i++I?wvl{yR?#4UD{o>l_krv+>LF( zHpXCz0n_rOhu)F^34~BW2}uYL0{+E-=^a9`jT`P&vdXS{msZ>R)O+vw{c*=&gKf=f zcV=g2?&tLqw#ClQz0Y%=^PKuQ%jPd*S<^!1l-E#KQN!H2X2QX6@w~Xziw@p|#_vMy zL9lzk8N#dN_b|OkLux0aPC{_u)P9vwi3B>(xR(GZYy^?u3NRv5yZd5~cuVOaH?U8j z_6e}(L-<@oii z=^=OUFT<$+6jF8>7@?wmRW~8fL{n`OYXQr)h$rL3l5yfziap2n^2GipI5KdOU4z{W zO^h<0m>`x;l6E|c^R((pUFy=_q{+5{3jXh)QXQ(|{0587^W&^+7^0~xK}E>IG(1~t zHe)QEg6z^{0iaw>`xNk1;2dCWmPXJVf%iMG9XS4MKP0x*4_LJ>t@3e?ZgBP;=yr*=gj z542Ad?al8?ghn)w{=8#2^Fd!oZj%80xU@fC@wFySJCR4ksS?pQb4G)I<#AEtMqk@R z)?7LYXA3ON&8th+cT38)u#1TI^YXbC{wc=oW2pd-_lFoQunt{E4F<-;>>CL4NKYA$ z9IND^K7&!O%74lz_XTLKsAW!V6AS9*(pEQ*rHw7DSg?YI>IMwMEWJe$KN4O8O<#ah zA4U`R0|`%9Jmf&R^`MFS5c>)+r_dm11d;G+RLVieymc*9)e=~U1Qt!{cWCT!cm9Y6 z54nJUDMtOjBITD)Em1XF{Wa4^d8C~3h^vnm*3aXL^_KuJ9vfrtu|4cLet^9LCpkE9 zf|LE-bdUDa8z0a6T(Q{(TVW_A45fS=9QE<7{UI6y)oht-v3dS5ZM89$*Tty_$GpWV zZiIjuUu#0OE7WBpU&>G=H)Lb&0Ou&Y&F&0;)@+MEqru}_HIYv3ivHLTdol2SAX4CK z;s6f-KQY_lMa7e)T_K ziLh@V$iZ1Ypm@f8doh?3DQ9KlLe?%_!_vkD%&VwlPHhuSHFF5~1KuKKZbu2WLgQzk z|KHHqFF?KSQV+RMblbq{n_2<@0bdLFmO^@~x2A=ueIc+C{Ebuaq%Aal7dXS-a(b9% z7)W3(QulXA*~KLp{68JaBIT@Kv4Qm~HsGkkz(_wQ`@1p^bOtyT9tTeWZ=-93)r^J=%yDko|s^8VuW3XI@x_}FHdwI;K2T zkqEaQj!+e{SzTR^X?RltW(!j36x{%!qjZAP|^3> z!Q_76I{DZ(S^W@LNx7Sgp;dX#b@}gpwqW^8WbVJ!|XwlWce8|zgLi~H=p*Fl`LsqLV2VdK@dZbLLR$j4T3$4 z+CwfCPpEZj0ki3_EB(zFP5+G38$u_30nVT&a2}=+Np$SC4Bz$?=A-#)kzgx29sp9_ zvKAW5G9)~ed4!54x1*`u-dcK?R<~S&8<3{YBjNQqGtaYz6Gz8x#p(YH=mZj22Z04h za6b5#g4u-lYQU_{%qJ)ed&V?Ps>`dXF0W>O{XEvRwBo2@J2of#PqO#u9(J8P$P+z> zInjTTzR>}CW22aqT7KFi||>{b2#%PKpOZN z@OdK<-1b}-;9tT(&QkQ{Og;gW0=e1W8h>K)cbu*!*TZ<^^h+5}#u=T+4^Ofo@ZyCj zUc2rT`-gn&=r3niPn7*bCP(66Wf|d)7_cY`s~S?AzhH>f^$C{Njo>qg~K2Tknc@7jsJwxUx$u-&Er}3FugWe z;vUrQLyQGexcf}-uK}|b>~3#S3(dth=0R`@`|HHf_(Ncy^cK^@ba^C5@D%$7PO$6f9u9UN=D=V#Luty+ zp86NQR6y-O>KBM!gG&dLl^X>58Y_^x9oY69ahJ5+8UC%h#isB2%kQ3HjH28K>@e1j z7M--KPzLh6JeBipLUb+g2k(d#9=rrV0l)%N-~~*c`Xwhaq39N;D^zQ=CI(8vfZCIICnPz$YFip`oRbiW|a0)}FuWHD0On%Z?LtiR4&YuEl%Va!d za&)+y2aZ&8cekJYBLRA221%~~>N#PE5Hx*+{UK^1Wvr;4!@7lStY6;2oXR>X!sS$z zR}l(?3h?P2aFU=Y(1bg@GO-s;9)Q#~unwX27&znLjPTUTWyOHr6Oi1ARKEfIb7nR` z;cLLCe=iQ8qyOXaaC?|O*r#Cp0jORuwcit30cMSt04O*Jgf@XpK}TBy5PQU1N)OWn zKN7hbqv=x+STM79D+;M&I0Iio$A0|mU3N}4n(T&T=1fT$YE-!0HAXG?S0jO?5N>ma zZ5!ooSFjPv&+Xm zcvV^j1}_0n5C_sIL!2uM=!u#fcZ&DzrLqMXI-tjZ_loev3>{E5ZEs27URC+52!C`O zBNb@Re&&f2Od9G=V}HpRoX4Z6@m0ezyCE^zSDpj3=hnyeXEjJs)xpWrB-z!K%Ce^n zvI_dsH2TvtW*+mbIpa9$R=GIH)2dwz0TIOzFh!@t@&8=dcD#<;PK2g?xUSp(<264+E?RfM)&xMfbqb^cTLuDQFsvBvqpU;{FD_ONc?eRSsJ$Q525e9ZH<$UW5`@}E(4o&Esr^XZ2a(W9 zW^|61S%p#me$-csGxQ}laO=Utl$GTK8oL9jx)$Wj2XRZV1@X;CQ(dPyTORTa33p84 z(~73L(B%EzLVB16VJt_&S70=L0s<{FY%`?LL?_z!IW+$3j9rl3nLx+D9&^nJ1QHLU zVrJ+-s}SD`2rhT21pO`Gn}e9O;H$}W3(TzjS)!^p8>Hq-nwZ&{_d-*Mn-&za$ zVccQArwyk7FEd0Rusg%wGuz_NI%LC01-hL;>LVC5fnLDO4+Y+-=%>uIzo%GbLPakG z%JcMfCU7;#e*>M~i7YI534p>lk{f^p1@u65z-CG)0RVrZ1KKL^9uYpO=vA4^?AdS( z_`bq7{cZ7mXB1~Z>P4KlXL+$c6>;Eu!2RZ$u}Mc31gQrab~XP10Du5VL_t(tnq#lV zHT(+*TjnRI2t9lCj%hf|} zrqJ=9x)rc>??a;JPANz_brZ7!seS{71aSsG1-3^w>0!!;2u*EAlLs?Nt~0#?gAhC$ z;&*z3VhagUJ+*yR2c38r@G5~lOjQ=kkcu~8)V@7a`9Fhj66n}1=-^k-d zd9^atB{9@K3CTOrQ9vrdw-E8qgTOq*zX}3N!QYGo7G&lL%;2^ln5GZY^bzz2X>Vzz zy``0xt3&^AKZm*xaiH%QJ5C;C|A_pjBpiBV6UJroo)JI*G9XQ{w9){G_W&hWQX zxD1!3I-4wAjl$bRxDVL>tY@ranAEQ55mEkLM85=_GlNSt3i9tLozgK}oU*XB%5Rgn zlk!tAOePdaMv|mem=V<71{<_;3_S%s+!9D}wdhE|O8^uQB(M(5`ZNCp&M3rw=Pjg%DGFl5 z4gS}E2z<3OX;6SYhBN$Kbm&W9ogn8OOF9ba?Pz+tJ5xX^z^p-xa@1D?fpd|-atO8{ z!NnjEx2xC)Fq4JCh8Q$dH_%Ysz}b2>*Cb*Ljt$a3KE&Sc!)}+riM{L{?jw;(kh0Pq zWsrv%gOhy%;928=W?TG-)fN6K=sL3I>(>rdd85@C`A1({%zCbvOKMm2Q4u~4d;yo4 zAm6P(F_3Q>@JpjDUbKhR4klM-);FJZjt0n!ogHO28mq_0y%SkD@Dczs4qX9yHqTvY zJ`-4jIITd*k=JJU`;S^(p??I90`CNxfpOq5;3nYzOc;{Z#2H!1y0uDdlIMWFp2-iu z8B+MN2?x&T5&*xre15sLqQ!J8AWwr-I>|&bmh*k>Xh_jkAI}+e&s1@6pqy_$QOn8r zncF@?34_}X)UowcGY_2d(~~qv+F*OJ(5D-;BGiV;XsoJdesw)-8yB&5(JEH9tfVqp zLBQuH;0qKErH`gu8Xs#AoPJ2|M-w|Cxev8EUA}%zXM&9RvR^GU-HG;p6iFY)sQG{3 zZ)C>W_>Cx1d7Vo;*7tEVy%&#m#lx9<&I4%tex%|`Fssh|8Vt39Q45Yofm$#KuLAST z=MHLY8)_Z**3rWh?yFj){52T$@0;1+zuJ&GiZgU0I{LrQ&i9}5=NJWR)J@x`fcS%` z_yIp+&V^t{W}ZMR_*xLN3e4&mEj$nrqTwjfaFqEC^I6l<&Wko&Mlzk^#K1|O*uR~f zC-$+u_b8_Zdl-m~GM-L)r3oJLW1-s?!`XGEJZAy`K$TlW_&)FkvWp!C5WODdcHLTa zr*sTIt1%vEpRla1(Cxs7fqw;7<#Cx(zz;#cBrsB}vXF^6od?XFfp1@_KKnf2_ui>2 z9C!(UnTD_iSYCin)&kO&+7B*T3QolW=8Jzi-0EIb$@H#|l!` zV#yFUZkx-){ZmWKKicc#k=_a{&%<~|XKh(!154*DWX0Siv^Tb}YQYNTH!dJpXajrI z273fe9fs6?G_?m(2O)I`wf4=Nlm1Mn*BL;E{{ts|6sda`5^7_{D)fvHQvL$>`}@D( zQXqLW9Ujh5wl)4JnmU1mtIqt_m~}|-Jk&buEonhq1W_ckD#JN`X1ZBpw`Yc=d+=~3 zI-wS$`U6Py>!*}loH`sd{sh|pIW+zU(22rXBTfFPYf7CVNbkzH2|h3vA%PYMv>?G& z@U3+JJunB1=*(@aX%aTWgo9zK$|`AZX+>2T937zZa3=@)jitxRp5wDX zYo3oy@|3mjIYSSe=n_(9J+iA)2Vb z1tQM(fq_!pBY$fmu3e#DI4bvuZ4Mc$$EV!K?{tL>2WJ!R;NQtcd=H}XO_ejZ)J4<} z%*&IveR?}zHCvv-Ge&*L;q1mFhEaGG!HKk=pX_Yp*9WIg%a``N3HM?%419)dx@9J)unQ(`QP+M8Y`D-uWJXOYG zWAqL8acXpc?MJ%UcHjxNb|0c=VuZA9k+yBrOAGwjLROa^)n|A%+)P3`hSlnfJcjaZ zL_bP)fn*c7ObmTVx-;@Me_QN1FU?F6;1(bW@=qCdj9k&xD6j|k1aPSMH&9!EwwbcJ zKsOtPvs$-SJyfhS7G|9(>@C4e9!RGNxR9BjeEw|uakC*(O9>|c0HigM22M?zL4!1a zzK6*te#TJwx;Vx|zEu-vYz+zGQ?#j2);E@nGaSp^@GJpZDpRbUTX>gF(lYpUS3O^S zqME^!;Ni^oIPCLN9WJM?qK0*iEv%ZioQ`Gdm{&KKa3DlD5W+BKdMLF6P8{qp)Efg)Zd!ehNcdB3+Z8!Fu>P@QT47& z<^N0t{}rr3bmW&f!(VojoU=JWu5qvqxpRM#2FM@K(I7|=@hybVIqtyk;0iDs5VP7{ z`xz)u5D_Y(6;wnkSkk&IR9GW=_K0^?%~r5pHG zg&hMSezapgYnz5>u1HZ8PI#&$>-AHt?B`Dysw(mv9J#)>SiXT$() zb^pv5T7mN&e|jq}?UIKXhL-@C`2*Qjz>nFiXgjdi+p%fI%Ybvw;KI63;0NZai78n? ziu!;YCjbPbD!a4b*d(po1v~u)Ts$XDBv4otd$uF|eorI+`bZ8%>>n^d2YL9LFzy5&J>a0%soo#1UmR-oRRN>7F%tX<0b^u4Kk|T z1IdTb5kShpw*m>RL;_17&3Wcep+YW-!u`g1!it z&W!1PQR72KGVpup7%qN_YteGh=K8ew15SFUbLQbC0A}n!I)30%*CQ!l zsGJY{+}p5eSjw&t7OVoj9+)gqx3EJfi4>Z^x9I}+Lip*F-G_Lf>tVK^ z*w69UD7ItcI8Mos1s$4z!+S&g{%|vkt1LD)RCC3m1Z_=2L<0#-!=p|5OW3N6WnWxZ zh8rNxB4Z%;g8meETlR-UudqXjOVVATTm4zgFO=4V>ei}#1XBNip@)EX0M%1>(ij)y zUyWqochWIjA_Ky-9N1I<53)&Mk<%6GHqLa0rH5&QmjIYKqp%XVgu=eQ1<{MG&Pc@9 z7W2ZCQ#ZdW1bHoJ$0R*%2ly%IEz`5BT9#@=diNn>^hr8)uRO?2eGt| zTlUoRrNF>r>#Isn8`C+-e8*OdFmNq~;$ zM@O2K5NbbT3r>?e(eyU&OnAutT>4ibbsutv)6Z1!--)5)ccFv-i6-xNyAn$p7C7B# zvKx{>><(1^7mP4sE`ZQxB)k?0tpKym)vZPpB)=4rL4S}%a~HE{?qbefeikn|`}vF| zCfIX)ACK&QjE9cz;n+wY!xN*7rIJNIJ3xVf6b$tGc%r|OA0Mb-Nm&h-wItZGu%G$m zNva}AuQTAxPzHpu+Xo#N`2T>7nLpXYGn#;R3mgFUXJxl{3@dOn-4*(rAcsLe3@qf# z3TGW)AIN{G%8yGY_z$YGT0|EXz@wBayvT6}FWcUcn{n&J!wlVITM(T)3!b!5(M`ae z-lm;7(p@1#VRNSXf3i`q{i4R#jAURGriK47_hr%oVw7d|qvPo$gUQ_Fm;3@3EF7UM zSQuS?gA);cysLr#+FDJo$Ab5aFhp2fS4}pCGoc`(60cJB2Jj2dJCxwpx zk=Zw!#ly_NM1q@{b?DJE-y_|C!Z7yCoKu2SY<@FN;e4dl#I5xIpW1fEg*^?ar zr7`(<@r5R zaNDI!(bof$ojw;6Wc6{N~Kx_q}6f-1zuh zzP~5x1^@q2T103mt76T(<($28Bdg~uW?|!e8mb%cnKR9j=0Lg^jdwxvaWwgu%jus! z0#3KLd08#tDV%{%BX&PV^_##yLo>*Ibr`jOi(?O?qu=oM#Y1+mPC;TToN)pG2(*B& zW^zF|sX=^8Ah-;C^=|Omod2h)RPon=Q9fgxHIw&5{YYRz=0E~65T(bREB9RsTyO+5s9rbQ421Uk+s@{{EyyQ@Q|gbuSV)Wf<(?{#)ALpKAfTd zL5KeboL+BJCVl4n(8M1g@dtN^yEzZ>&xgP=B(NUBYmm^goF`eIHJ0EHvTj)i>y~wJ zU3{EFCl7IaxR=Kd@8bThhw1D;&RDuMoQ3l~t+Y9-X@c|SBsg!;KuL@6 z$ixVPqXX1eop$a`1(3BMOUJNncZPon@?y-hyEQWu?wmD01{pYG6VbUYrtsu z80v4v8Twi#FyhfsdU!6qFp9?RK`O2WU;UZsz2G9mKMzfAdy2dnAQ3RaU_=qK8T@OJ z;Bp8pMf~$J0saVx-~Bm?kv2{;YY+y1<5M~Z9K=bwL4PL&&LEmT4#^{E;t5D?MV$e+ zqu_M9Sxh9d;mk!~;xW`d;hhB!r#t9K=u)Ka!$@R(-f3ep(u&5nqy1k%W54sd-KJ$p zV_@w?t-TPx8#SUXHIO+639LuLXSwr+e2p%>ni0vXt}Y9gv3kjBRs$EUI+wq>_!SJr zMtES?L)^FbF*^HC&_6!Rcq&fXDPD@4Q41a)Fxfs>!O!-WGk;qZ8*89JY^@3dV`|4DOk`dbr6tvmgZp^%4f#; zu^f}b17-ZMvymU}iPDoS?Q;+|O%_x&va)#z9dnnmzNL+h6&-|wk(qrkXB<+;(exom z?m%PP-70_ku&2Co;6!Wem(YC#>i-TYyF3%r%(vxJkJP>s!>mCEK8@O^yuI=8T!M=x z9!HZ05MSMynQr2P;Dr#o4~#m*KNtM-z~6xc7D1>L2`==O`svnkMn8nX1ZYHptx%TP z0Zl>r6q-Ebc4wuYaQ{1f0_>AdPY4)wXHMayX>|N|-s}($r#a&RB=TaU;iE`!=?tl= zBpQ1F?fEA(^{}@mxv}oS8FBwuC(z`h=olbn;A=-B8<6lC@Gp0hxc){rftxQ|I~XP$ z4AWH8Nb9`iyzz<~IMI8YNB2I?qsMmBdFn6+dya5od>BWIv-rVM7)S~O$pG8>J&Dam zY&Zj&7=?#K3ivJX!!t79-IGaBR;1>%2 z;%`lKmZa6XwaTz1aUoD&K#%1EJqw{7*yiHL z{Vwf_5+zaU)sNDy4|LmjmG0H$S^W3x5WmD8Thz|TS zk~)e}`xXeyC-3woMg*yT1BOwH4*V->?aPa5^e`)LbToE1QguD}&Mbi`p;idDQk*nC zg`gY5nSq^4fC~^imYFGV3PHduKQmnwe*{e(_SVBH>FQybcMj0JG}P6mNMT1@M`ETAEsD zX=>s8Rp&Ce3_70GYAw* z$FN#mp)TNSz-P#=xYYp8739@+XZYXDw)h#h>HAv~7O>sw3hf7e2D}916prx|2TEHJ ziY^0M3-HORKrgX_$zKCrf6ffSO915GOq+w-sx;f4d<&wrcnN^)buUte=xc%1ll2FI+e}qqsV~G9=bQ7?UoFtI zW$S>+gjG7M;sL{CPFXc8=PssW?qb%pw6UrE9KwMRrePqG?_ie$={}bRB7MLO`o|xE z^iI%GP@CBsfVcl*XOlW-gQNyNYzW-#LB?u z(A492NdOPecy%W3MpFlnGfV&=Uf@4}Fx`N^S&q=`THj|9V6(^3#C_fnRS(Z{rXxt@ z-(b|f2mEtqKq=Xf?8NE+5<2lqZ$?o;!UCty9V(nYfX454XOb9mA+#BZtb)KA2rNc? z^_k+S+$RHqfgp2g=P;*s4lA0M@`lS_!>Pej+`HpG9zC{)uAU^;gr!jq|4YhpV# zwv$x{fXNwj008(}6Y12h$j=SKxdeDQ*~J#iK>tRCJJVgE`~0m_i*@)~6EV9pydCIN zP&4JXeI3IkyYK0)kO{IHbZG%To&XmB^K@%fzm)Jk%_O`8Kt4@?&WI1uHnJalU`Lrg<5w7qwGgHABp1 zYP$jdhi8)26vQ5Z$l2an%sQN5KrMX=Vo%@=3it5Wh#=+HyOsa` zh8fUD4mxo!+W!eO@dz+W3{c+!M5^5CcuI{QQ{8=13$+iy#36S^voRM5wxNM}NN@v$ z&vrYRjQq^VG7S^cFj>$rpI2S_N?w{ya;)blPaN%H>(RYDac~D)PaP&aK_!Be|)<;^e(*>>>;pExq-T(LjVb1ibT%=45a)zbm%ihqK+*z`54;w_ZaCD zNcHt#R+En^xIgPGA5wN62A@LvKZz!1Q9#8*KC~bZK$8z4`j)KjHxIMkl0#Fw(DXKM zDLg#gz%^+&>7F5nGAydAWP>hW68XwJijBxz~}(`dXDhN?f3Hd zvE3XP>SZ($BWb6-)Mz1#l{z?1Rt~Dk6uAjS5qO`prFoF6k5tP#{Y1*yGgVh2pz z;|`P66lj{F57wHENY$%co@+oVuR+Iu3F#fh^N!XLoWai`sRKyOn_QT)nU}U z2dRETCQ+SNp@j4abnqKEBj1{R)Kuntr0P{ja0xPYK05vb&!zk;b9We=VKluD68EE{ z0hcZ)cs3GQ2jLFH*9^W!HzAPA>klCsjuH(=nb$Cn^H!cs+Oc?I|90-{dYFfg@8wYM zF}lZxNIBj<78*uk;|xq>#oX*?sxd)vVglb(mswzKmY=E>yG_~=ZJfn#uo|QpIP7iav%_}V+HL?QTNcy}e8u0I$a{~a zuPx@_W?}aO`*mC8x9vb`DWV-f8!koAYTVYo?2;PB=@S6@l>ePh{IS>IzP@@I0`<%< zQ<};xsv{|?BNGG+hsFSeGukg@LthHw4kRrubo55B4nXZkkZ7LiR>X9j?1oQ4uj5iJc_=*?)ktUy65a%ni;!?z-sl)S z6pGUIBNZ>k2rP&AAJN!@E`PV<&8;h4z0izN{br=*Enr0Re?unrq642n$9@4MXWx;E zzR(?pE+$fWJsSHxINs3WXSIhk1)4&gy`y=5rQj`(9)b!CmLc9 z3$M*2Rp2ygA>Ja^jiJ~u#O4_v+ayygc0%`jWpj;bqyUW8YOSK(x?@PF1K& zQ{*K8W&mCSAir1nc|dp;ze2g9oAD9=&x&+cC$=ma`b zyP_deoCbv^gci^Zz$#z`P#j%lSX6Brgrysn?rtgRZdgUS8w3IA?(PmzQMywaq`Q%n zknZkg$^Fjz{o9{=o%8HIGjq?(9VRNbFl6e2YGth?luoWWt#hCv)576vfYvPxg{R#bM@3`E*gv9>2Dogg0KBGb>vTpgVi0BTWaiW|b{~Wpb zEEW?3>U@&qS$mG(z1ZMdp5x#b7meTA?rqDgJSgyi=T-kV?01l}Cbo@hQ>eO^a; zotOK&M);6N<_mwoZ>h_zhum(mk?5{_kXMF{$m!91t&nv+!X9-*N{jBAJxAKI2*~R3 zrDA|RXa~*FOivJ@NB^1ZQ>3$JWX1TlytfsxIq8M3ZtW*5lx7rY6>S9ZC-eqYhTwwk zX~218Q7qJ@J`Lx%5yZ;o5X}i90=WgF|FgT}*ycm9v0t|G{>WE-z71E9eWO7LFjIY1 zzZsbc!}drwU8myOx@@~P?b&_uu3 zf&Lu5g-~{X^M= zyIUBkO!Ms5mjz0061nGN8doZ?eiD>8teR@f)%9Ho$pw<$RC6#=0)}2wX_lbrrGY2) za^I@x`F;q!F$LvGv6ugkaAOLQx4YeE=BWtu>VbZIGK$Ll#J~H6yS_ofMF6X_}E^Nd0Am0iz0=4!*ok6Im=e$OSzYue#l z=fNJ`Ss2L@v9q1TXq=L z6%;1W3!d$yaxn=}5d-0O$y(g!9iHaCbNU&J_BsbSjau0V>f8^~3pkik7LqkZDDfkz z-gGV88VJg>z+z~}OE5yV5Zw0o`(awgbuh$bwv!UvR1jv)P%~eIj$R$L;mgqQW`C7E zPbylCreCCzT0Yn@&721T@66ILgOWUF|Ei8W_5~o!}$OV6)>t`PU-iOoWX?cr* z(o76(amSqWJrPCd##-5z44gX70!QnP%BaTVUj<5;=xD(pqbAiACS>!)ZBbLvQnnrU!5jDG& zI`vB)j(q-G2PNY^l8m>Q&!t~SESba~Uo69uri0`num(xUkUkyy5_S%6s(i?7fvY3R5B>92$ZlGQ4-JJGNF*0*phMX$Lm#t zu&<_JgXf3*KICTXrF^Dzt*3k zEAK;XbKqZyhyWV%aa9~!F)e(s-6uWJI;aYn$nxbS-$}_Ug6g)3sr`E{uavEB1Ng*a zjH>n0*383Jmk(@{6YV4VL$PVzFjVY^iv)XNP2>r3K7q&{Z9|c#yc3Wd^xkbHU3hhG zq;Y~X78*&yhF`yEWQvTnf7dJA$RaLwzm*Yq^ru1(NF_0{3plTpyZtm=h44`@CMTJ9 z+J=cA=u|U$=>p`%ZW~0st4IZQ+(SWbwgFCwM2DURcta9!Uk1 z*_>fNhggok5iea%o{2Vl5zqd<_tCg{T~&E5Mmh^R+`#2mGewxT zE6nJ6upq0Ft&em$JweI^wNcZZss$rYR$U!ChQV5$Tl(P2E#v~lN!g*GaK(ae6;l1E z=}XvUSu{;~^n{#Bb~hgx{*!0i%R=KJ6YjN>H?__abOz}}u4h-b?fe1?`_ro{ul?dH zUiO0GeF2z^Of?>!{}T1lnYX6`_{REHY14n}x{kCH=)O6&@KKIGf`DgOhA-YNx<8!0 z&WA4<=VhV8u>8Y;a%yF>)NZB9swo&i{<8~&77dj$8IS7J#=b-2f*pDKe?|#n3ay)@ zL}jkG6|XYbkPqPDVugA}3(a*0H?`#&)AkJpQaKj;z5P@saAB-<#@YKR#*+U0w+JTF zb~diE;xl|6C&8!PO!>^N_ONlK`8wN6+tJ=n4}aY`bAnuf=xSc=6YV97Ep<=9ov`d5 z7JnqL`0p-WyoC2T_CD5bx)};2bBEE##oom!)b_HMo1P0f5)Q= z!B`tLPL!LFWi#3IOdLD14f1&Ct^_8JD^i`S2?j$wWWhJA&I;;wQ{R*+$F@@`eSb3t z#^$5bSyg2C^VqG_+v(7E`d)Cr*Dq1p99AIJyMAXom9o<5HYz;%=v6fih2`Nl1@BI; zjAysq%M_kjKyEUh18c=&6IVldFIq4w*X^AO2^m}&!6w%fgLVXE?eGb!XN>dL<|W67 z3;3n0SR<18KOh$rs5ueg^E7$4xJD;T)^4o4nwO`Ab@CdT=w+nf0^`o!!6if3Pr`vRCe( z$=aljK0xXwv`o`4M}DPd!#SKUS1hzxumBJ1to_!B;fR^*zS6%tIHhZqYLj{DCx^?D z{5NbEnn?|@e1_z9z?Z1i0nTCnNdA(i0xU%3SrQqt#HP(p?-xa!H zXzxkasM;Ybf#@Ny3FZ>{Ny>pwja@btmIaOzn#; zg@%U1TOnw?)=A<_-OY{V*Yu?Fi6>U5rbf{QfR)8DJq7jpN_mfTu0>z!t>K!P)a{l{ z2_M*)evF%G(RA9*{z6=r>2IO{#idMvn?$r_>f=;~qv>{u=~L>bpmP8o0${S4&$~-d zr+3O!3*==eWmx~=#nunedZU8d7hi9P6`e@A0Ikgb@K9I0jtI>(T;+KRzo)&=Q&joO zeVzh8SP#2r4zgj-vK)#?6il*H9y!g8NyPWNCbu?1Y2LU$b(0DZx-jE;n_4Lxa?RJF1r z8PbBFM*YBFl+$*VY9EO=gug6iZ%MI%>c|>Cei!#es+m@AK}o_Fasspj;mGZJ<*$su zjPAz3L8^X^ba5Xr!~6bL!3~gb^z?g6g3?)Z&?le1nLYm=grmyyU7qC{rL4Nte0!y+ z-T8&_m%)O9gFgSXa}}#PK_)$rrYDSnlt< z9ju7D*B0?{Gym?2geL}(4~az1!YIKeY4x#QZ|);j8C1U7xc#{ z%P08u``~l`98N_L3ng2>Y#NC5cwvkEuxD+eAIII*{=JcdT{vjOV8Tf>D#DG(oW#dj zgFm7;QT8JWSrFV-QbF0!d-^Fc`iu_LGXI}SF)592uPn4W!G0&!$!qFl$Ay4C#_moX zan$7@$~1N*M!HN}__#~*%9OcwFIE00b(ysB{Zew>AEQK=nqfAIr;16=movApmomVV zgYo5QdPm2(wW9-(=F|$|L|u@lTOHyMb@{=#p%&N|DPtoHwnu?!TnN&Kvkzx4EJX$_Y28Y>1Kiy3aBm( z;o{l|GI%Xo!4%bEeULm`e5PilXJ&#sT>=h&UA_n#EhkD&K-z{LY;fjjwJYQ99|$;EeKMz#Tp6g+j3QB*T+_<~UH0N%(g>G+2LQ{Kj_$#6cafCl zcj^jV@1R!pn;%{LJV#kWGsBv?sN`fJbM-fb6EZf)3hk?7nm>9BLn$(zWl#@TI*Bbh zny)mMQpfv!SkHp@M`++(>#I3*t~AdSnHAJ;4K{OTa0M{u=eagQe=FOY%u7Foe&f^H zkGWr=l4hoou>iChG(ol98#RK;!-%$RPM9+kvnpW&#PBHN?yZPcnHE+oIvt|=QLh7X zx_q662*=P$T5yIh^a9&qgtr1&;cMJ|EPP(--Glz)W5CJ3Jhiz}hn#z)md~44yB)3$DBKvzm+M@B*x|~+FBfrSH+yYnFG+07_HLP6cW+z z5r4BjlX#Oa4p3oj*oUx(ockHNrDw|(A zq{>Ya6JIb-z?$Qpz%aFo_OJu88kO9wku1hX8$%6v#`^?OPG1!HTyO>mhgs!*n9b9q z5Ch{`1sO`S@9NxIlD0tI=>!P?SrcFIz&N>gv`zV|qy?pH0oMK%Qz>r@1|(Umuc^ZcH%04m)Jw)Re#&=r1qzRq^;% zqZzmK7O}LjQ|Z@u5e6NaNrgnOnaSl1QJxc4N!P3x!i@j&{3n90voNs{)7JkM;(C)$ z42;{EJ}Y}m=lO?|wKEQ1<`Eb(R%vhuXtCKB%HhL#a+At?GoF!s7_<;VyYj$4WxryK zwX%Td{kAR@N7KYi2N;8ZHJa|Pg>IzN4E>dM5_hrWvVbsX0k4vtY(~FS)9rd zx`#P1Z#n1#98i?gb-{V zSr{A@qY(Z7Bo9A8EDMyB!3F}tv5lD~uiqf<7~sX=#134_hu;;lnG#N-ZskqvJmqT< zvmFRyqhbMNVN7?q2&M`{LD(WjU-OV+j3VSFa^t3d0S64@QdIq^khvhj!8s%`gg??i zaTj3f4^*1G8v(7qu!hlPjZEYFfXio zWxD)fHvk<_AJV6c#&VWr8hOAqFwHLNJT&8f2t?6~5p{+(P$O`vHBVp{cEWihxMfp% zL}&9>aAE0fb{lOpH)TEOJL9x8aBaTnHVv;P8Y~icG#U9RW>``4jsvvMm?|dwc|(u| zN6B#7TFA``LO}lfv8E>f`=9yD$q06Vn(|MKSaS)&ziuYGsT78&rSR{qgkD5@4sQi4 z6}aNb(w>6Y{o^v=$dP_Q&uaG-8BAlvTHz!drZvuTzZ z9b!A0p4hu%8?Flu0E*v$7k@Us>CsV!2Nfp)7BFjmj;-?Bv>L}t+r7E*qBln03!Jo_ zHO{1}cT7mSP!iS?i*bOMq2jqFDtAg9G3}aJ|5lKaBVmV00CM@ zF9QtPtZGhy`kQ{EJdksl8RG+}Q}-`<5GCa1ZFF`5bg$Ko!Ls;>81Xp)vU>~h=A8hb zH=t~K;Lc)LDkr69$En{oL2m83bu*Y7c@h&>6R`tFvfwou2vm!e$_Na2B23jIwK~uf z*0EK(n5*k&;1KM%L^>yn(5~j_LlQ{E+u$$xL(~OMednzo_1fGyPUDtZTwfR|PJ{<5 zlh%8(o|=FFep-wc$gsn)-C9~D5>C<~$N;|t0AzyBi}-a|dR#itWk6M41(@+r7Br1X zS$EiZ!`{PMXv~U__LtIW>>8O(&P6$uD<+_A$&%#9IhVL9;dN%i#c6%wzZm-a_qQui zKG!GL#j8RZN%b3Pz}b&<+?STHa*uVp`E?3+BUUPT7mLH*_Vcb!#bklSp-68JZgEP1 zS=f@iHSW#5Xw0h+{65Ngt04($Ul^YI*JFHUsmJh@E@dnoI zi1Jd^n+zb{H?I(s*9(*nfs}wExZaw zhPp*g4tGK$*0IFo=T&oFD2+nps(?xnme1&D$_4mch<=Di62Wql_z-xJ?GcFO`e?9tviH9F7ww5o@Sz6=YE-z_FYk7^e=ky*{CGxB#fUvX$w));Gn_b zN7_R<;b0RX4TDr~*oniQ$yyIf))2?@h(N|E9RAoKrC*2qhEI_EyTCUF6PzNmWBtV z$el&aeHs+BY_sJE1g5o}WXnymqjKwlgRm7|{G9v$t4XO8y1Q6mDs!UMxFm}oJ*Js@ z%c~7bN35XE@?OX)O7X{RO!R4gEdp61Dz79kQH9r1)Arm#Zjd005oYtjDQ?B#*3IL{R_Wmrp$1P3l zhVmQQRAni#;Es-~nKHv4I`YlMB(8_4JQHO)I&XP9%+xE^Lu~ND;?|ErZf3v(M|VHK zkSe=YG_>&*6uH2O_5c;^Rc<&9ca*=a;5k~0pf`8lVK>XUl6xinW{m}IAt?)F2AiB- z)$9wB!QTPVS1G&-<}e%Joqol+gZXcS>!aC2Y$$+JdjQKq3zSj=8tP5 zZM&X`w;GE5+N31Ei@C-4kc060iR3m%ew6Evs?2muUO|^M$}6R^6BpjgX4nN10NG}U zWcezRV|5E^MU7keapciaPEtz)z#45+)8r}LA}nnbF_~eA-&>K$XCUh&SZUKDK|s|b z=UxPP_7J@v)wbaB`DSeaF#QsfU%5Mb&P*RD>n^2y?~mV9>gw_ReF65gVEJULVVg`; z;oNa3uiT#y{;|MU7&9Jd9>Hq^>(AJ2!YM6tRpDnr)Hj7f53rnA0m38JE5zVA!nYxD z!R$Yc`b%-3oj)`~9;@9Tq!KLf!3;>ABb$S%b-lR5UFuiyM@df^bhp!X= zqgP(7-}J1-hIa!&Jy;`Bt5ZZ!J4OMKwF{gD#VY*mW0%m{M-tT)pL*6)8o(Z|yGca6 z`**plztoTXsG^?~in*}5rXx0hNeFvicm!P8f4X%A5iS8L-w2yD+me`Fib|8Zz4(gp z?;D;qIi{nmqLV^?8r^h7%E92XrWPqJLme908yUq(#V98^%_P6&8=#b^yY$Jr@Y&}9 z?bR?$s86tODk$&HU2+0g?wxJO^m6_bH6$xFp~k8FNVo6s-Lp71vMr+ zE__n9cOP&yHe_4m92OL}r?U%)B>@84@Pw>rOTo4D*^&PbW)(_0tD<)Ck%;B(L0M10 zk4O#A?)*8dzUQI)8@4|Z*D==C>?ZP992)rmNA?{cmfg0C?d*N%62gb47Xbr!70PkCyXHaEPdnpa!jZx5L=_=KSrC zOM4szt@%tSap{{A4Xx9)ZPN=5oK0p#x_<-<2ys#P{q1R%(Be}efcNcQAlH6P8~w;>DE zdOar5rCeWiKU61+MDkt`dO26}>KS-`*l}fO7eMinBPnaA%7RiJ)G*H%eJX8n(^mlI zPhGOlamiCwEN!3|_h9wx>82S?o89||L%n%vLnU&qHE$%tq?0XOob^%Jp*!v`@fO1M zy!|}cD#;UPi;Vck!_1vH?cpOxwd)(*=OJJA1R6!?gJ)2Gan$J^!{v9=P`TRB`uuoh zuV7~ocuVXah}K?3dk{hLsASg8a_?sM&D`!vL~b&BM^P1C5b)p^75C>`{$z2P{pnFv zPAj8a8eepK-Ryfy#Az7BqpY0}9=3T{4X7T4s`)XL2hdfUXQDKj{+LbeQlgM$dp_WV zA=V2-fyiapOk-7^(KSRbLSn!7iBR;R^(y zm4Jo|2Y3+_g7iSjhfO2F;7SC3rV#OE6}ic=v9*r*Qy&vPAx$P37A{i!O=L&^w4t9f zvvV@LwmCp+mgjvjh7*~^P*ajb+**9rZ)NcMl3lP&Cm zdx?8PKY=X5R6hcDV45h4(vaA$fu%G$U0O4I0R;*RLjyR*B%!!%#VjI<8HY?S%H>fq zlHs1F(McM_u_J(nt1y~#eij59T2;x`cn^Xgvigw%K#E}{C2Dk~geCw0n1qxsw7~mw z?-d166+2#v0^BJZ^%Rt^X6Ig`! zGn4>qqB>#SE(8?h!GLa|GKa4w!AmHgCV`mAu483DBQVdy?ILbW@@6Zs%yVRJ$U=N_ z%;MArz>j>i+J{ z-W~Ug*H=V52i816z&mqpmb+jwwrFzZ*53+tCrph)&w}gR&n*)1;jL&)$GVX$CYhBV z^?4mtHu`-Bn&+@DD)Usq#xx{9k#^s5aeqenFNs5q+%By+Kw4rWHChcH6eu)VbYUOKmS@y5FjbyORvYA`+A-{_1=|C2;BAOox^wObIF1c6qZ+pVE93b!bfEi?P`Re zZ1nN$!bj2<4v|+3zDryogzPcD;e=*JYN;nLItxkJQPV^%BZSVuc193G9o1zJ8Rcp` z?~PB5iuzkL1vI)%c3{+lny1||w^?df%5&2#S)BWcequCwYsKd(5ueq4 zJb!h;yr4K$d!CEmB@JRv9xlS|0Q6!+G}VkXeyr5nKcY5<3#0txoZAxk_6 zl9|)z!83;Wp=VJS5oefLMw-nJj%;8%yP^$go8-8G) zrIHf4Q}YI+QTv`4UEb&4F|!jFYU@#n>p;ql#hkeg(Oe6-7Le-2lGaJ3*-XL{VaR`% z+r_;H-F_y%(=@`)EKTf%gpLY4kONi1Jwvo-Zy$WI|H*S2$>Ss@WPx(~wemOtK;*=dV z3C2FZ49%ZJdP1Gp*ys6$4;f#k;TDWCwUV-=jC^>PX@Zgk6_&>@yyh4v4P@51eal_p z1`9}+vq&oF6U?t|>ybDcsfz+hfdGMvsfiZfi{}3VZb-^8k2$C(f&^$vL%{gI>B9%j3vz1 zK}flTW+ACaXHB0{ky6L8QIREJ%+qBqaqc&5sJHxgFwOCSs12pHes^V(oM~&@a->-_ zth4O|?nQEgBNaOJfSy+9DIY{+!$p~uYn&I2RY`FEYnsjMrzcQFTuFuHs?u`bGexo*$MpAFpez==wBu`>S&rKe zbpu=PR6xps94I$1qwNc6L`Ed0!^#Oak+$f{SbYSXP*9n|J0O!u2}ukfV8$L<6_ORq zt2GUqiyFc|&FlX4-fMmssyYo_9froGlpm+4iIU*Ck~IskCztC==Mo}!0(lh{>?hfL z$bcdD(R$9d3I~!M9OWzR#D!q@lJ3>tHwqSmiL8_7_mPt_`MP=dl7j_q*U6NB%}!+% z|3jUM$QdbhfDoS+5@fCrS)wqYudg#Omytag8tLP|#SH7&UPXDgR6l`?XZ1Gs7g+Wt z2%t!W`hn$S-l@^oER0$lj(u-w{+&AV#=OlnPI3(r6G_)SIFzbNH8TLCU6Tt4l_#fk|&+TBMg99GY!0xsLFA2|I~uh)R`Ah z!?}-~?$#pMGeDx8qsX?7tnhGR#9KgB1|^RdhDFE;?g~Jw1=1Jd?t+l^p%qipPQh~t z#LxF?%{AQ;5s9yY6EXkt19D`yeQZd+!GTx9dG;lF*w*3qRu((rt>`sw9pfW$_Jp7~ z3`rX|0pJo?f!S#fhS*c?i7i9B1k4=K6bm@h{h8-wV4T$O(+PBl!w~5+$z3h+cIG3u z$Q3)}zPVn!7_Mt_QeWxcWf8f=Xx#E7<4#6|hjVI%mr#dd8%Hs^s51)4`j~;dn+UH1 z$i1^MmRRwtjlEY3ju4pj^JQ18N^e3G?&$>^Ex%7503wu`r(9po(7%-(+_Kot5Emeej#o;m0*5bDTLQ0>4kfl*KI zbOiq!)Vbn52K4ICF2}uWX@9j#jsDW>JNje#4vdoX?SrZDpYW@~;eg7s>X&l$4^)35 z!k@uy3xh9s4Lj?eS#d-cc{FU;7Z;Mvkv;AExM!uzhE`?!1~I^=w7a2Sqm}9JP6iI27(^a9CL^Cx(Wc|ScEI^-^Io1pEa~MY zG6L=kqChiUB~!Idn>X#m`?F8eJsC6suJ1j=qifvPG}c~v1zqPe2S_wX8gub4W9&c2 zSly^S7~=D&Kd?^m$0U72_(wV%s)4&aTV;b=h*ipZrE5%MLr>*uq2QyGjB#DafDacq zRiwkB&Yxil6qJKQ>Vwm`TaIAT8-~$Tsfn8!k|2F`I7ZEP_RHCqQ5^Ru4?%`io4bZp zv;?SGi(Ecm_N;HxfFm2~*@aE{@HX9lVcX#Tg1OB=CL`ra$@|0~NezkN-Eu3XNa1^J-*l4i?<`L(&eQ}CTAPdA8{Yr zDAZvpwQbl#C2S$;bl6_>yzOyb+|kJ$+u#@F>!Py0Nz=S?%v-S~-xf>_m&$V@!1Cx? z!A|hT(}jPa48_nc&AZ)z`-a&L@6-TFW7GAcxy|8fc88XRM7hCKF z1;&we-8M4Wt3I<@f5(KsBSlWDTo}&aY{@>V3bBL_%){=BqW zwZT}QrqeQ6;gyG(4pA_Yex#O36qLyK>C1~biZv=_2VTk33$Ttr@G^~ecQ$&q3#aS} z_2UGqQL4;n@;oz`2q-8+lUIMScfn#xOz&T5H(&R$5z5AdZ?tMIwP`u$5K-6H0A)kyYl;!Ei>UQz zx56)yG2%x18mPu9wF8YLo;5zejioKFe`x@DPcz&*!9laDIp(*sf)^uv2pijP|LVT2 zHeX}FX~nwa%zUlREm;ehxtHb(v}2+sKNpUW!-r7VxC6=0V6@@rh1aPJZ1szm`v)q?L8BYertTEiBdvJInTpZ=h`q+8Izk?j4QEPU zbNooHi}&z+$IW-MbXkNROWyjzM`08jsZWU=9sW9_+O6z62qr^2tt14^ikqCOk2zb~ zRw3SR6HmvC`odK)O*$?gei^rVg4-Nqk7$;j-esQs%L~i7vk4TlbfL3N9zAxO&=q6- zL8unUv1NL4I=SP70g(uud7=fLx@B{l8v)B(I-qWlhfE>?szVgL$P_&tu6}(_a!Va5 zmAJGr7kTq8vlG^T=tC}Y$*cO$mnHCkg{%#$WIsR%xR*4eTo9?L# zSGm#ZCFGPac$M`h7nM#b%BQ}<(vb4ea_`fKf724yJa0vJ8fd_9R&Q-$Mo+s>Q@N{T zb9D{!c9>QTw7Pck}@;Pk2xcl z7?e6fg#)*K0a%<%`*ZMyt+1XHAKx)pCo)+ZYhwI!Xd#;!zM`5V5OE=%h-uou3<5Im zH_avDmL)_5Y4j;>Qs^UA_zbQBU>}pSP__Z=Cjt>@wU9V<#Eyxp&Ns)eKq(#FEi4}D zruR9gQtZhvXZ_a@> z#Kw3t9NT{mGVlklesP%!r-kpvDE9ZlsnDuZ&*6)f6}FbA-hBI4U5Dm)h}quBi5^?Z zIIbBh?m&{Ll6n#dhVdcN*!*YrtqQlkc404xoKQ(P_ByEBP0h_Ez*mX8Lv31w)xq4D zo{iQ_2dTfZN(~E$Vvl@(`}$#nR`n_enVuX+TDzVH;u@N4ezld5HlwwgTogtks~8lC z?T@Ft&poxDhw3=D8@;%JtPs!`9mEN4L43YN^4180+`{@$`SK3&IscXM2OBW=2xF67 z-(5Gv+7nQ|m}cHk6`tWkZtPt(Qdr;%w~%Ng4q$K6eZ8$H>Nk+RIHeaETa;|{1BAi^ z^9lq*Jf>1>pU=2|VBoR(5&0zL-SKp9%TI>6x;*UT-*4Pd$b$dTYX^lPrn`AGr^Hrp zGlXLM6Ddo)4f~xKf+z@pV9&B^*CM-25|JCq%uO!Y$6#jHNhY$+2gpNQx2~~TRivCi zeoCDAiC?f_=(sHBX0RKW@&P@OH+1>}?II_eTS^WnlN<0q-(0_582LHPBTkP{YPIV` z{NZ`jKCWVpuob@<-Qjg)~)i2?PI@Ga}*XPBe&$IuKUwxvx&_Ho3G+n?;n2d+)sWx=8!C;`g zZx9<{pyoB(xq>!}X9^EO9d*OXH-~jdpS%`xgj$NE$LSDSe92ZnWAp5I5WqG2EUpo# z4{S(|<>Iwz!hC$?!O#7pIVJlH_?nxpBlP zH%*2V_&;*Gunzkxb5?$>o_Nu(r||dqnKQ0etATX&#;c$hk22u#r>aL7zT5fx3Y<(K zJ%kO+utsW+M+P9+=z)T(rc0F>R{jetgx42eC?Grj1x;b^+4?31sEpi&xbq?@Hf>kPk5-56 zY&&j(zE@bxessOrq!P2lK%s=;B|^E6BoIT8O2mmh2tABuT+j^LaJEVXbs3JgSJMyb zTYJ|LJAzMq&dEcLDZNQp*yuIP`EfaD@wlZ7f>GLMxW}#k7>0gUWGoWbcHvY*%1oD^ zG{R~ZxjtE>!+M?%Mk(aqT-^)W>{RbA%#@xPdH|YBC7eEc5<7kbn%2>PhS*d4cMvB= zlHKSOw5<$0?){J!60|qSK?qwp+d5Ds7JO&Fx6)?Zq7OD$f~EFfUk>5gdYupiu9%}l zA`D&}ySV}=8hvRyP);n&lB~X<0C5MagWC5MbgHS#Q)~AY3^3%fK!;)x`}AGu4-CGX z!zJb$ZZ^+%AHYm$)^yQw)jg#zaN%xp(w11w#yVl9@|7>%?~2}3=@%f!yXu<$ROj9g zYe5CY;hAzkkCMCFF|F@YA4l9JpGpuDd2TIL7WPKWI!jMm%NBmZ|Nh)Gx^xugj*~8d zro&a(6e^B-r>9_z8OpokaO}qR{ksB8PszM^RKUx;l_;sxk*CSePWpfg&Fvg5QeAK<32u<&i1pH_a zn}?i}Fd07-)-DpX7gS}+D0iH~q}+MDn!8qkcY^|(BfZF6mj~vfA`BsktML|cfGi2J z+I4&N?xx;opHFzxdcRKr^o-6sy;VwBV|Hf0hLETCcVh93Cd z%ELBBnfp*UGZ}2NKz6vbk3Ayrcfdixp06QaX?*Gy!DNW_?jbm_5DLqY{)@tGD~Xs_ zB)mu*KnNTVl8d_z{{~N?#}5V#kV3iKPnKJ7zQ$3<7{&1UQ=sjQ z?(4drc)D+-+FaFwXQ&f6O*^aCimopCX*!WM3{kBT3|BTPL>;*6FHQ)$GHx*6yk48a z+x$Jff@C?TCd{+WO6(kw*mb|aemOd~DhZ+OY>sKaL#J#Z#WIc7GVxiWb^_!u{Wu*r zv*oO{C1q^Zjpc5BDdpc)oxP$!n`0DEGn3EF=3)13l4<%(q`GK3;;oOZBaS}Mq5gsX zFXy)pU;qA`c=^DsuFq#@R0cF)wB!Bw5YC15{PzQL(|Daa3R1)-l!TQX#?dd6e12v6M=LODoK980QW=PUZjkA3 zMjMT2Kr?mKa7}+#s)Y4XHFttV2*Jz)SjUkpf~`Yc=vAO1=y=@Oms2WZ<#8_sri9TZ ziigj(1FzNF^ZmCnnr6f@m|mm^GfEbmMxs_bsNk-n1?^Q7&3#M4{esh9n8s?BF!!Dv#pRm>PXoLJ7+I{woJ;u z!~J+G^GK7vfDywC)QJfS7aqoErg_V(kxCDBB9wKgJp~q?gi;KLNjdWX(k|%g620s5Im*}^#|E6vpRJ%DkRkCo{t)wf zJb%A~q&XRo|EXmYGKwq~GK6mbNyAa=dv*&YT8VzOd2|HhE!pjB=<0htQmfqOZFhm% z{w*(rHezIBE=6^}k!3j0FoUMibhhCBIR9P!lo1?E9!_W)Sv6$o`S*4#zdKz2@bywM zO9%2w&|klzV{6x~j9TaiG~w3Vg#@5_eB5AIxeG`b=ZwWw&Z}LQeRPhj+Lkxd`S3)h zREk9g!$R(gPh88)Gf7X}){anruqwPe-S`utZ-JB7Cn*#4$}U^2vlT*EFkkugemrDD z7y^BRS~=`|8?|Dl13w8qBtP4(8an?kPsk^jX8uG=f^by0dvfhv4dbdzFP7G zanMMV8W3Z8alEL~iVCvDRDQ-g6^~8vXV&n+f|8fOOs)k#@&ytM>4qixTRh&@;K`3V zb(aRHMymQP5u0i#NNvh*%W#95d{Qq*k1I}WhAFU6Itd}>*Nyk|{12gtS_>3f9J>6zW$&uy9F#_!|Umg4fCZ9Mz~^P)x$8(Lw>zHK}3<8dniT$n>lUUm!J=sZCx_Qn-K=)V{xoz~624 z?zUS@(AhnmjRJ=^05#`i3hI`v=I=(+aP-cO%MDTU3~tN4Yq`$pKKIZ#c_nG^Je_fF zizt09=I({^i$tvY3sah{ZMrc%8mA1IL~K|ty&!0W^-LY{zwyo)f}{1=P3xazk$Bz< ze)ki@v-aq}VyI@bG$FtXj1K<|y2&5l}nnaWCI<_+DCeY)hD$Au=N4P zOd4V`uEwPT&@#0rC1}N`@=*|IsCR!R9wS2+DIn!JUfrpvUZV6oHiX-gx!`YwojQ#j zSaa1#dI;ZqYL(2fP2-cUAsprOk2U_{xldE%M-zbl%fgJ>3;)Y}O~%4+l$9>#y-K@x zr5l0nTmSSu;Q4g;)kw>N#hBsj=j{FV!a={d)8@kgQ#l@aAi^7FQ7V6gW`gFGBlLiw zf9XHwDxX1dBiW#`AGiZW@Jsuw8K3zM+Zli8Xni}_d{zo~5WMznFr(B-t2#8=0I*KO zV#1Z7>06TfgCMI-B(~o6$2V8_w$eat^-zaAyAX?7qWY~BD(6+^dcOECc+@vi*&29k zWdNScv6^Sx&4hP{N;?0Nh+p!Oa=yHI(zC(>v`A+H_vfLF%)BsGK+US)wtW>~?g>h8 zkbi<9CBSO?z0-ID8|7$gu+f}k=rU-Udr#Hg=GW__ol3eSSHmt#-q;P}YggbY^q%56 zDrVYE&#M2AqO0(0y6fV==4lJ4&AM!H8M-QCRt(hVXZAs`JK-7x`?F6jX z*yry4?m6dMhp~?a=H2;$0{I&)%`3N}L$5C*3UhOS&yByokm8%<0;u#77hka|KKmSP ztv7yWrAqXwdNpw059f@67ASt8Rz&GfV0It-`X47@Ubw1fqKAE4D;<`OeYxgv*Lzb)lzD;rp&Xv!_`y&w|S~h0p24? zNZ3`_-FG_W_H$2Jx8w(UrY0C4Fxunhak5GNLR>T$&l~3-2rV$bPs38(I{D{7NSZUN zr+w^%Z5xQvtk_i;JH#hJXc0~^jvDHqjJQ7gGF59Nq#`)5#$qozY*VKxqjXrLt!q}A z^_*8QI;>j5Y3~=khTo>f%`NZNOP)K9HX!C?ZAq8V4GxN6w062>0S9|r&KoGuLWYsO@)#xI7CW4%xE-*UYiTJwh>{^J@Z zd+wOVUHZPk&V2}rprL^ge|ZKAukSoQyB2LwTc8)oSGj!Las6vfSy>WVn1gV@{=(`r zgZQcMazIEC#pNS>@Jrf0%-!CmCJ_^p(-WC{G?KsvOPU`ThKXN=@~sEoTJ;>&Enva? z$(qGcC;l)YwMIDp-1p&{z``{*{?~m>qy;-VD}F0|5EU#A?(w8Lob?RP=WZDW%pT}Y z5)qCVqbBylq;XjI#z)LZOmaFvJ0QAR(m@xhm0_gGKOeV7!?+9XFZt&9O6S(3Jp_(_ zK?9qNnR?v1EXiq;RDzEr3O&kxFN81`8Gu5zqtqqP$ zv)sLl(1B)7X}2ktdPPGkg=V})@?k)-^aEYZ6C6y8-_hdzOjtBkZt-BaJV5#U zaQ4(V!<*OO9jGI?;$2QXa`^ThM-3#*enkoMH1{Hx~wYC52X}r&hO@he9K)spOnD#os2x zEwL2Ow<_=l$)4$jqqD>*V9~fV@^zM_$07L_FBKGySEongLK_3ONb!gT0dOkjh?%!Z z!MGl*ds=O>`OOic7p^}ZL#+ZgMih{~k(`~Oa}s|sBH&iX_j~{EzcgDuK^{eut2V+~ zX6WV!BbZ+r`+aPecDJz zU-zrjRT7!k9d8uz1aLMPw<{w^!PaB?<(^bK8?hXL@nc&l|ErhI#o*92M%71P5u_i{ z?y7QMN{dI>tRN(R!O|>^ggnlPkW(L7k7i!L+B1Kjv-lDE&Kh4_sz*kf;=!6gjK}JH z5$#tPFv!iA!1svMthJEhxM;2a_EGoWWDz2?_?@eA$Pz%s85Sr|kTK4ryz&)yH3E^O z`%9lf0z==};{-zoHz^I*Gzvd^#tlXpY=u}F?X}y{V*~ItZAA=K&{X)FXWaW9)bX-+ zkFj>@6&hAoH{_#rl)ti4L@>>H)?z0kuPqI)Vne)FdszJK@c8(c?Bbgv_EEmXB3}f) zychBWS&se6`HYCBrbKbw$fF z&<>Z;Hqk$jg$a*~7rwb%uH0+MAQjZa>G*Lom^yU(LZ*iXeA!QZL-9<$nkJ*l2Esaj zL<{r7;=P_y{(JPRB;608{=HPk^)-!#YGB8mZWf{Hy;XUJ>1$IQ1P17#yFC#XgxdIM zOLi4rn@XndUr0M|nLevxMf2*|oALKiy1naWyh*tqU5>5^AEG_$QN6GGbD)qNB-tB` zuz%l`X7Mf{6QfWGhMdiSyTG+b7CCT|d0K|zhj#Srb|zy-JVb_upXxU466~$iW`h{wl@aVX3WG_rqB-ZZW)j z*lb6#APC>>iLD^eH3hpQf{&y&01H2uK-X7L7;O}TXa&Gdz1zekDZfdhG0Smk(0DNp z`IG2hUOP5l0xCcL0N&6H{5+CtlYXoa>=7qH#l54Z{3^hNjj%}nuN1W|RWuBBbAZ)< z*d&5K1W+s4ba&Xgoa*;ZdNk0My<`o#bnncLj?b+yn^#mp1-jOTE+ zz)EcmiB!RGqM0ABRJjx5NYJg29I12x91(i;x!JNb&mziI$W?P+d90lkft^}RtQU}Rr-U_ue} z{Lu}hAQmnX6u9(e_&RH8vw~LjPNSwZMd^gU3 zVDft>sGhyiAOOV^Ki1wtxXc6P)Y)nen9o&#e~#gk;wb-CHdiNuM$#>V_Ta0I1fI&1 z&c7b-nm9t-E(WL2bDqLC0)D4|iM;*~lF{@Zt>;ZC!)`Hv1CAWE0E%hMhlfV@JM#tQ zr+>%7uTAl@OLtR4YmY-;M64c6MLaY9Tg0c%zWQf?|2vW{H!jQ;&O9O+xk`gR!Cs_%!@`yoI* zmZAV6W1Mg+Z5X_+HyS?7JT9=;@D!k=g#xqDE0%2igtr_^$XeH=T{@({UYK8fkUnex z&S`ABpVT8#Vq6|qtbDM({5AkZ*YzF1<1HwO5U0#YHC!A(Qk<)EabV6 zG-+9iy;ToKGNMw%=V|MHHyQlPV+@-wlNCh~OIJuRt@INHz9e(mTVkoaN~mgq zQZTjbTI1QC{#;rr>(MzjIpD<{7NUVgHD6<3=LKAr0G0(R>E8 zZLu{pQ?aRE>$XNH{mf!`!Q>AoVtyCG7sG=cEqeC)8FJeb1@NH%+Ktm-&ZG`869~DvbKP7YX#QFm#V+bX#c0{}pp!unx-d=O<}O3(@a4|JR(R zw3#O-Pg2{S)-pKo@M>br+0GJE$iInw4D{?z*?|PxZ}SMRc*1E>tTsNJ#JQ(8!(Upy z+wxN$De=T)Pgf!e=oUd|w-bodWSj(-?G~>GfX;6}$~@$#ui+vFZP3V9iKG94EftHg z|4Zqo9I!;aai3qnE!NPM6c~0&{!O~W^>6xwYNJ57AdvDt4B-Tnq+je3;5+sElV7y% zQ_f}Ou^0w#*=VdWZ+dw!%&QniS%1*d?>evRx~04NbNgqd8))G2ku^Z0(((!)KA2wj zp9O6Fmuvv1G0|R_^)(@cTS#R4Pb z^a63gbij9E^3Zrc>hrMXxu;V88*X71$~Ab_(|_X5f)w9)vb?h(FA-yrt>_{5!beQ* z{J~9}THiD5srKIs_{hv<^2?=D2AxVU(M`k@5t)8{rQ?8)?;fbntFB zcRA(eV>J@!+*COX$8g9|^$*T4LVb29<4e#`+dJHO7gd`JB}cbl+ik~V7n9#Uy~EDMH{uG zAYn|CnfQNO6$_btwk?U3pR&@{M4T-bes3m;>`?+dgiDg8CQPD92BjsGZ26<6O|KHy z(-y>Rsuz^V&7;CHtd=zC&j@jGu3H`crD4@`02^0dnK=GsoM5OkNyFmn((ffx1));> z50r5q9&m4$J>V}22^-I22Cf73I6v9*(&Y5-+L)!=A4 z)Wgw`N^cJ#IPY^Qa)U|$muap?2Am&dohaHVvi)khFULHdxICB1tW%5v&dZei$ke|V zlj_4~AG40J?5X>b^Ys^|Y-0AJ2p12Ae8!vir}HX?T`l%yHaPPVPjTLA1UP5HhQTtQ z)6oR56)KMb1kY_XQ%kWvQZ2Ge!R)sht_J56xvhB#7~{}212M;+{>nmL3&BB$8)Z|w zockHP>B=S1H$(&HN%^fA9WMGu?5pT&4wtP8YOUxTKQi^T#dC4)g{_R!jX9MXby$0jT1j9i;c0Y4a-cg~CcH4o`B} zwQXik8}oolDQ`p_ET_y$GKV?hB1$)tzf%=GXNFRDkhwwKwqG9#$+l8=dgf=hc3iOQ zF9>k+hgj5pQB~Hd4= zP2LqBSQTvbr>r2VG&(UP{ReDDMwSx-@&D;nM6AGP8hTMFOSmO&_^3>{uQZhkNhe)RXHvc zRh<7H|LUDR|3j~dt-=t%pCs%wd`Bpp!fTDx5T&;i)(;GN^x(f5Dt^7)s*|nTj21Y~ zHO7J>my?Y?g`>9lwO>uWKnF`U-5FAbj>UJ5jR~aU)!&hHeUX&kjzUN@kYplqXk^1K zQ6*wIV%;akUKJx=rIM z6Pr+O^wrG-3j$s2F~X(nosCtd2qtn`;?FEpqF(?QU$~d25JnYty8MH%>LPUXNyru1 zoA|t&$_?f|GL5WlCQD&j#uGldDa=T;l&MH2y9vQ=B5;EO!d~VSod`53J`>aX(#X|u zAvq#2qa1J#od>VKpY@4%eGCMHMqI~VGKACuXqI?VhBc)J`5;G$k5r(zb+wf4(Sy}! zzqj^uuY(1vWz0Q~o(zk$ts4M;C`}F8uLmXM^F9FR|1Z%eOQwkHcueS1p^O+bY3m(u zRhS}<8FfCjmf$>xXH>;B_!n42rD(?#yO1{l`>LYBdf-#^UJm4-a*CPF>M4Ty$z~ET zKl(R*^3&$&NTb1jHu6^7+01xstxA7sH5J{sSda=$Qa+&s71yN%uo}Z2aP(;uPP_mL zZVwJBgp$j>XXck>t19Mg>eqG;>%>&XP4t|^TCDT9BBdU8g~I-XATjP)sO~s_?ENNM zkH74jQRXBcI0*|9bS%FXmbUeN+dmD3e2ueOVz~CsT-Bl_N|vT~c&BuCuAS3!DcONi z_rzYfLY+@*upBk6O(2|S%4DWz()D%lwV^nMXLfDp;gH3T+vn8gm)rhj#Zq$TqE#0( zaqgDK4~2cehyORB5VQYuNQB8|Tlsx4`n#2fax;PX{IN7#SHbi5E>~+!{B2UmC})MS z{P69#C-giFP2~fM+oD#i+RAsIA_x#U?+3e5rK`;>7)w*)Q2zsBS-M5kR^Y?yDiXpp zl;oIkzi)_(h3OBu`4MvAh!o7)(S9~|c<Q$~crr zmC%pH+8-$w*y6@FPZ8MfF~-`88&@IRjH^@Me%S5^#c+dC1<09PSHf?FpBg-BK$8v( zZD3^r--KFYBSkP2ZRWec4e6*r`MJ?vM;KuJqhc-(=_4K;bATkFCpjOr3|GWqvT+$v z*`=&cBd1pO9A#u8BH?d`7Q}@58nxm~p3 zfDPewCaZ#!U6gj;pExu~o0_;_(pXl6*kZks=K#@O?3iZz9m3VJKO4Z5`D-{2lGQLK zX9K#QmjXW0Ok3+-k+-0Ikd8-T=2*te9&EuTgcoH921^<5JON)W z=Sy4^Ng7hO@Xpv_z}f9AY%fCgR^ryHZQCJND7<2HRL9|Fa5+<&`YUscqt&ZC+v1xw z99#sPioA@zT;Ql*xf?Wj>zZBe#a0_ZEiho&dGle#AmEpIL*4HL|F5 z{0ALjdoPBH!|u$pZZDp9qB_KrX=fhN|9oxawI_cj(P2yBe(B#cgdh6vqG5_4!0s@r zKYy3ZE25?POk-tV{B{~e;`G}xa^zUg> zx65(O62t(toUmAo7>S2h^UpU>iLmk+x zR`!&uIQOVRnOGbzaD1rzCKbU4sp(RnEu6a=5}J0R2V0i>F5>6p@Ig zDWMC+vzxrkcpRxrN>YW5i?_Kj4}aO$vyH!qr+TdpNtgkiUck%Z$6zRthJ^KB9WS{C zEYQ9Z5Z3H&#i?NO3Uj?l zBL*F973+*sqH!ZFGYv_mPfJ8&2$o8Bs@vkUcGXFd1Ila{ZooqW;AzvqCC?3M415(; z_^`)QQ-2%?S*|fWh9dJhJbFI+*E)9(lG_{S->gbyRGzA5IpeH;8h&}fY$*lX^Y)+X zT_>M|9;V)#nztL2ezumC19-5TW%AAN#i;Wip&2JQx@O6BnX%n#kethkW1_D;PBrkg zFO0j>LVC9IaU)3)&RlO5nFzu7vy+~H=**?B-<$uFqJntPJ*y2v%R9Pv z#m#jjoC_eLsbnMpF=Zsuj#TKeqvqmUA1-k` z3~Sw1{ushn%wFw` zwOUjp5&R#@*kh7cubWG~S@(^C4ATrws+l6j1fVE^YgJS(dmqN1UBCmpwkHr|y8FN4 zRD3b)S}2Dx!OSq}*=BJd=EjRi+hHcYk#mZa$*y4KjMVVuV{Q2x4~xwSq0O>tpi!mT znLXPCZZqLyS<-tc$?V1jGy6M4!*JR^3j&!(1oC-eX#+`u;dAJMU{g;T5IK=TxZ5!w z>1Sz+$77%xvMtjWuQ~bENJEB10P$Hff2(g6B#0=~F%z`Rab-%jdxGU*Z?CS;3BC!( zdW|TXxFk)s`;;J2Ugpv65WJFgLH+w%efqMt-e_AzltgD{;{?9Ww&F60=w};SZY@nT_r9CtSFz`O*DxbfA8wI>= zXeBZJ1vw`LiVSG2YD*_cE}va>VQ#JA}lP-MKM!Vyw7neFf0SyGP5Ha=&yOz(R+ zRPd_Cct5IBf!z&!=4{(9%vduRlsKbjyvD=LIuky+o)Av~J#0Z1_Y^4s3hoqPQytf0 zVVM0q$5=^_Xff$@d3eS}Lo86^ZhiV8jR-f3O{=B$Dl#*`G4h@8j(A%N20^O(8*r3Q z5!j0mh8nM7m4v2P{)9}o_7aI)jp%$zyw zyiZ*FlO>t)eD*WTyGXL9p-fLaYbwJ(72RwYQ_)5(GjU5EW_i=)6XhsgY=Fy=b^-y% zF4c@!os4XmHske+R6d^-Bcqt-K1qs}ZSGg&mjR>QaA1cO9S5rB`6=_mb4|nx2d=y^ z=n()X(YMj&ON2Y$Vq;}M`3gplf=>m50HA?i9>I`lq=J+jrqW_qNmax}WQkk;XSbb_ z`5hsn?0N7CN`XlRBjDPcjWA^P@S;QYgX0Ev&Kn!^5X>+aNj|S|ZewGJ#{bPX9I3oG z`IC$svPHVR$vU?BKP^2ERqfTgr zgMCBzoC7~90^9bGVc>qWU+!Cvt%j_#RI&&szo3N4B6t*+?&eLP z%%#_0(A2p8b6EI$b8tqP!Ae{Z#UFxS|6Y$)CX&!}@n(=Cc(sdi5Iz>Q-3qQNV(PT03VGE@DmFV_I} zEgw}^QxQ7fNBe9vLR@!bBn^U}cJ%QHU|#}epJy42)h8Me&QlMbB5n!uU|Lu#_5tTo zfwvv=>(~tGMz0t%j~}HJd)`T2-5JuYfiv z>Tj*_2;19k_+D4pLFM)$Szw}9@sLg{kW2f81dp4R6f-FNL9nu6>j-0!RJ1Ib9)tqg z7lZx4%F2gSnWx511Qu?E7-I#phk2r4+C(N|T$EYlF!Wcm?a(JXpFw3%+LzQ$^ap@T zawiA2S)P`nQr(Y5!j$yiRxHc0crc1eeT!Ek0>`F>Z+PXBK8WzDdbiESLN}l}dv1rh z(pu=hP>CEU2yx$bk302v93IYKIV3?m^A`!6fF@$%Zj`Gcm)C#sYeRk#i^ z(9;WW*&yyVywm^Bym-|+!FG0;=n9O!f5IyWZJ*v+RjgFpMp@v9c4<8W0@~ zc9EzEwK5f4Ag|87CL<(s)%wb|ZMNNm5bl!&!GTTTf7k0C6Xe_MO;BoF5xa<4vTi|Vn)DS;XW)U{+1&6Ey6Ai~Crn2GtG0xlRmR*8uCX|9z6xeJNMRJt)7dHC ze`_e7M))Tm8Gv2TL_5=krijiM90lyW$OO;Vfy}T)Vr#CyfOA;D+Xt{4*_fB-wP{$C z-`gmxX*Hjyk#UwvlqbP?w+KTA{mTWOwDTI73@V>d+Wo@Gm|RAAZ9|Tx3EMi1ov9D7 zI_C?hdnwuFQ0_F_{3D}qG{4fkfG^@&52|F?>pD9Jj{Z|8KHt`_<%aPqE;s2Je-vo# zziZYdS6?Wa!dfRKl{@7`P6d1@;%`Jg64lmK$g3Lg*68^tLLHY@``B>z@=2ZMJpDM! zN;^qqUq?Ag`w#0OxKSHns}+s_6#-rf`5kETZrW?-(~=e;w=o;LfGz}>Vik{e;q~mQ zQKycS$&0^+jpAQLoaD6!KYE*>fQh3l;E;#lg#I&E*7h<~w|ffQzGMu=!{-3e(Osw*&EFYFC zGL7$Yk z$1Gv<(*9%1cfbb%6C^JR?W2Pa;8Q$v-gOxaG;-WR^oaLyTk`8KxoXZWfi74_tLWvucoU8ol0v&G(XTVQhW+wwLDmFIXnheaWT6vQ(t^ zo*`s`WkX305twG7g!DJ71}+R%Ggw&CsPRYym3?e)^(6^h=BNCaPeIE|-4|) zjUGca{M35DF$3VirGqSKHfbzV zhsqW-j^J3G%e)q$&W}l4zdc0a%5U2-Oc+WfL}p%OX^uD9Kwc7t+VXt}sSodu>99RP zL`R^Ux_v0Fx**CH{GYGz(eW~9|EDlEt@H(L+2G=o;xYC~qDlb6Nu6g-L>KKh=*xBM-{{EEA z_>NaAY<(pt<4&^r%m8CB>`jmDmgtwD3F@!p_$F5ROZW^~8s4|w50H}MW6)1Dv);1! zV*w@23=9))zOb@Nf4wz#FJ?Gx)p`V3y=HRBWc_f`?fXYLPZ1RiesJprvw*_1>3uhsNk>!^8r-R6MhAT%rN#@-- zm~z8f=Z51C+-t-56eqs1;52U?Z}Kr*70(^!S2GM`rVT3vf8Bt<%mL}SKX&}G^N$Zz z^g`*uMe25LH0BG^;cJEvwFveX1YB!A`a1}6jt6+Pg+pFldc%s_yBFc}L4-j6UMPNv zU_TY=(8tR^UCJ}|(Ky{eVmGK%+k;=3df+Nkq`?~w3=U3);VJ)>siu<%e&3#GP%#66 zJ_>+TMZ66$AoH1rihtss{-K0<*c!2G6gR*Y0>mxMlOR5#8t;=w+(V`-9~(e$O?`;L zGN`p(h_$`It2RgEm+7yfjN;yu7+_i1v54UrGj0~vMUTo1^qLIVqD#)@O-`m`cuz+8 z2wNEtSB2C){mSk7(vLsfz4`2(0`R6v<;pBxv7B0%jw`pWDd~RURXh@gY60lv*@Uo) zk1?OJQ%mlw4##;cCXYTs97zGg6e0w1VU$hyk2-`-!bft?6tXyYHWlZb_yM3e4*~8c ztG~GUZm_F`F)I#>+pxlE?^cCefGRhZv$+m`FgC-C_lr=1KWKdSauMo+GXR%TYeyrf zBr_hyrf_|7B?UUWRjM#G21PfHCqY2T)MP4qYFWG;S6+kxRHf?VZU3})k#O}bxb1~= z9$!D|58C%t9J*O?zW1-ZFAa&?DYtBjj;ozof4RAZhpWYko`$-GV+#r%qE(6Ek5U=E{%E_YSin5eM*Vie7*Y2@T^;CEYi|=*YSAHNf zgxHMI@w=@j%bcMl2&_!U(~D$rAh^ zf0w91WLYkOv)~ImO`o5x`?by$gsJ-$Sq4oRpq@u`v+S4Qfg*206aWd4cENQDjy=4@7@Y<8U zR@{gI5cOZ>(ae=P+r@;rZy*u~NZHmw`qlcR^YhQQboS>`FlMVCcAY>(Oqwgjvt-}O zj{QW^D)zt3!C5`u<;X4fxP@)npwIR+A14BqDQ$2qod0qU3ufx~;?)LP(l}nzZnu{= zNXhZx=;ja>=tdj7=~V43Y%f|DLFJ-*3lCQ`*iAOt`k?9r!cI0hSq|+)zM#08xihwn z%a8}-m9{TFf^LYC`ku^)KGFg-SarW9y;}NW+TXwX=u0R1(?XUDf6%mX48hjSFQLsz zt0P6o97_<|ubB=SjoeNZ$VwnTBhPQu9v!YLyPssZ!h)9#Am1WiB4wu*2g?p?FZ zy-=+~)KP}8KM>52@??*v2+@;9om<*tRO^h)kNX8881367O}(Q8B(-fs)%ifSyY)qiK%*4 zH6FbdGTfw4#QpPn$L(mdaBBX`1*>a1sY%jYE%=+l>*e1ph%F3Y%kCzpUCcX1bf+yl z<0MRu6zZ12uN$};L{gb*!5(VVtz(!^utL3KhcH@I=*xX>7j^%NdI?9K)cGClk#F8) z+GF2vL_z+WaSqgAehz_P29?t3CO!odbF^`X(!!?m^2LsBG!cfRXFjgMdNZ8+Vfh8F zGPf-Nr~&g(2TAvz-}g8!@^AW?TO<|}O7Vo<^2@Bj>szRSQIvpyWlahW2 zTNFQ&dZ587}9^uwW?Mf znB!W2%ZhdjlzJ{@gD=^qBsAzhF#LnAE?+H|k-DyTWtMIP3z&9)LKBIt{Xn&GE)KgE zja%WI>h%!>)olcR$bw45>dHKHVP#1jVTZ`==gTf&s|4JFn58Qkn~S{EyC}l!r2Vn(nY#==;}*l4X?|XTs>odaXHSJ> z4?Vp>d{?`6mMVCQser`|g13n?8B^Q5*m!B^IIBhezLoiR`^7;l)#+!6 zWz6;Y%TZhj^!!IA#vm^;NlRkT?IAG8US*oTwx2Yy#3?S6wgqE`pFgf?+yt@%nzb?7fhjo^fmDI>lLoK$|;vefN8*?VsPjmtJPX zrsCf+q4v(W-T7X>vN?3Vfoz3NyTtEy8GIi63L`0)r{pSRPZ z5_9-Zt{azv23<~xrOLU56k)h2bi^{sAh^lF_S8;7UK+6z(F*H zMK$1+3=b1RR@Opg?7}Exp@7l{lo*qs5Ux&83&{YXpK<)1x;V)@XRiE)U|H5l4M0Xl z-hAo<71JK$`>UNEz8K5a|ZeQNu1UtQXH6Jr*W?;uta%Msfq|MuA+ zQl6G~V|>8Mtc*SPE32v1&r$)ZgzVc>b-+8;<9{7&lA+vb0WiHZ+PeCDj~>Q*CE&$q|R4A248^P2~)rmb$5&}1{Pm3`#P44Bx`klvy<@(xDo|_+)OOtidOMM}! z7rUh6RDPQu{X^rO%mvZbr#%kQmQ3p*MtPV}puvP7ntQA$*1n$mPrC-cnY5k;h(uhD z&#@V*VuDf~xG96(O_t!si;e>FpOvZOL=NU2AXHf3+VM9BteR?iz``)$>o4@IC}!7e zAitI-n=U|chkoCOwmxK8;L85aG^p5gE%;JsRQ|%$u0WYi;NX+(5TlT9v^=Gfh0|8t z(RR5r@FhJzlJcI9Jx={mi80I~Um`EvZ!6+nQZFjeks;AP%B`gnLl%f{%)<~LYEFCa z)BJ%Zgbo0auM4w3}iw!wLnaEN>Tc_sIQfp-6xXX7ila$C2k`*^9-DuejKBM36HYTT3YP%)U z=Dk;t$goL_`eVp;2rmozN=VMurazW{Lm;`o6gibzOdP^&TZt=I{e!FI_H8BG7bk(Q z7=Bs_jsbgT*eCaTfbJG2cav*e(+5``fatm>Gc0^4O7QmF?XZZ zhKW`GIM193MbqGck9a#w=R^BkO)5j0jcOsIVrTt9-Pc~^!<_tc6kH{O&OC1+wgASAd5kA zB^>n=;TiZzRCEJ&zzUCp< zSmhDks`q4E(WIM+BOl0S{QQNO%x!cCETAux72m=p?xoqQ0C84UZzMpQs(N;OpiJHZ zhoqN*KuUf{ha4Zv-t~47p&Y^(h;f(FPYXutGPth53X9FA?LaV1>U2#@2sbH}nkc)w ziu?lj$3RZ$H$aM+f4!D>ZSW+PLD8f{*X#>smSsGp4MH9ffS$|jEB5d#gjI0`&7+1C zl;x)klzj-9c4bAjCD>t&EC)72E8?#bW%wkbBaKaz&ps;O9Sv+ScVL}&lfUvhzq%O6 z?b2k{2}S2^yXbVMAKr|srQhDhH#%O*6g@Oemmox~vI~J?PHFz&>~=a)#hm}T@5vV{ z&$@Mdz+JoiA?j_?7`iK1AZ9wfjr~IG#_*+SsO||>ne3m-bs=PSOUAu9F*Hg(EpGDm z#Ya0jdax0YbsUzV(S|Kc@c*$Wf#D&O2v2@;#iCu&R!AP@P95*9KY`lPl}Q>l#U=Hl zuFLHt_AG&8sq@_Lmd{*K?4p@qXYeE0 zYa<0@dM{fG;Ej@Ko?!3-FDJqS=epV&3+*~gcXgKHS4gs7QEw~`7!G!G-@JC-+m=*M z1sBN+wHrJ?c@5~yOgD+n`&s;O#K36?!L$tJ0}p{z7!s#4CezhY@G0WkhFtq5;6gcpS! zCj23(2-yr?eunU4exeSpW7+9T+rh7)SGy=pgm~f01cB~{>QzMG4_qDkIzr(mNjc^>V zRb3bsdDeI1UXuICpUSgz#XyywmtXLps*XRGW=RexWk7ox{CWT>{Ik)$hIyk5&QDkj zMW_`nyxE!ZhcsHs`JHb+6v1{Zf)@2FsnGodgqauKwq0zo6OQfexbHKk9Ivr;@d9v% z;&qBBy11z3Th{9WbVdsU?uTgS@a#%SqD1AnZseZ+<4+>^vJv5=NLpqd^HUL1u0(BtqV9;)b3y^MK(b-5Us)q7z%z{=2$0Mo|4(10oI z;PlSQ3MTVi;-0~BqMlx+)k)Xej@RmXwGP~8p2LIG2Z}u~JLy6er&ZHW7t;OICChR^ z%dlnD6af;(s%ZN+iv2mlix`sa8E{1iujmoH0faCXg=SRLFxroT2Q$)TD8UMdXHj&c zZ-U}V8Q*jnO{{TMJ4MjRHiqzl@G}CdC)ZKjkO0&-OXo*M2g20!83)fPrcr1t&%FZK-EhFdHE0 zJ{`z-LtTOds@@G1FAWm)VTqO@(K~Nk_^<-DR@#^AQVL4ne9c@_G|8E{i#v{goBb`Z zhJE5%T5?n&D(WM`s#n)y=BH1w^r8{D8Io3LBtDKoVJWZi9g_hYt*A%zw7OlU6nPVHU$2WuG*Fr5Y(75DSZwS758b#=7kF z-VpD%jF_=fK(9OE^1g$>Uo%M+an&tXCP>q(I^SG*9_{^U7yZdkbbB>;sSpu5ID z{j#vTQsq6MuYZtB1!Uj4t5HQW_ohOVg;3EUrafJPiq7Wb`bp?KH@2*gVRnM2=yD+E z@`K)xBhq+syN`?(PTRjR{P3Qi-1hK`_!=yqh?5twEZV+R$PdcV@P9v$|Kj_$%T$8I z=|*iBavW;Bxi!-ib5N)}RUI<0Y)vOa<%6X}s(}&t*OqIimYi1{?;37Vbiy=nEo7#` zF_`JVmtbP@9AUEJpl>Ei*xK*|;3h^mrzvOWVvzxw5XBkF9s?mBER`n0({{q(JLZeK z0F3cfaFEf4R~gj1IC~J5E1B4JMGqO|PuUo*9nAhK-8(z3&9b@@qWvvVo1L^@C4lb+ zC#N+KhRLUlWJjg>#>h*I9AYvq+H#q+QQui|7}CBtjH|Edj^i31Ngi&4p%wtoX9VqB<;E&~NGTO9cBdX|VMLj?m#gBSc^-e#d)$Mk?n?}m{pfo3~$ z5k~}fc7M1KCai^7WR)7%kW$%1`={XVmu5WsOKKqS!~1BaR-8afZ1J`G?y4n##}G#? zxSTtUUTHP3E@mV9*O0%5ucbP9ET64dA?7TG4?-=Y2T50c56ve5`Y?+y&SZ-^Di5CR z!H4!xx{@qFUQxav)}oMC!*;PN2TG1|&Vx(D{5>L?*EY~B<5+ihAxMQCanoYL>8=5C zhX9$}m|E`&Z@NP9D@?Yfmd{SUJ6yxoqB%a>c zYFgj9*Xs#=RI&C6izplavU~Cw_1F58+3v`L#DbV7GxLOah8A(2B~wprUs&7^rEx;Y zinsJ=;dyEo`sqC{p6JhHRky+#BE_x!VsXLHwqXo@8eL2wO#0iW96zGdc9AK&)x`EO zr=o1dsa3S^`?kQmRcZW(dGaSoTGVl=zhp~N5z?g2*$pYMX`K8}xjn={?QaIqIeJy` z#aQm!POC6@h?zD#HQwSjQ%RQ>8E+))$(a@fo*hXBiKW*ihk9ZhQ2_hW*ZYn%Xj|C8 z^Jk@lVD98pH!u#d=Nyl`^P3(M@BSe5_uj|;L*++}yfKc8Dya=Pg3XTqIJQO|qi-_h zcr8M`;Ty&sD2k^uT$b{6koLKiNL-mpma&33A!M?D1@oEzghxctmn>oP?9|&&{VOQR z2KU&rIh{RlK#o-Tt}teN;We);7=p-z{$MyVB_mDn)s}{It&C;U)7~mDv_jO~lqna8BJoMpbOQ;{ShBlX=FpZT0gyx#YpUY{w><2OQoUhxPFG& zD+)RLudc$4NAzL!%k-tG6UJLV9H5HoFNtNQ=gn{?v=jw$O19p8=`<0HHAu6iwT$D5 z)?Ovv)<}0I0*6bhXaJmvzRIY`J6nz!_A;2q!=6(yLaqln5Ct zn4TMlp3#_lEWY{w@6v?W3eUK+X}TlfiL#*R4{_Pdv#q6-YrLk?wJ;EY8}>xyddYharbp0{zG~w4?~9Yo~or`gETX2GDbZQzN-{nU$PG zt^XCS+qyJKbt2t}bg!U&d7MrtNEAg(ZIOKYeT>iJ$-GZ zbOQf7~9=*YTnbu>k52L?zdfh=Ci^g9??RbmE6N0g6=e)Uu+i3-b)08miXRu zJomYt1{_z2c%5ru9|2n^$uq7R+JYvD-#-x_RUVIhC-Fje!P9*D!1si=lScn076e{? zVE%rY&|@?A5wRi&d)c4bXCN3yn;R?5eMPM#n;&wwG4+eQdqp!#V!NrRqpA4tDfJ** zX9!wtV@6ch}= z)(I9%e%8i)X(gU;MAoHpO>o<^Ygal$okAkeMM?qrq90Ip|AIS?E*7;8&;s#?N&sCa z52JzXk5@qJqL%Xj!)UhYLA9uhgr>&E=U9Xt5rx`S>U`*{pDBgM_Z_=G@uEk2L=j*A zq#R$Fw!m;OLb*xx2{rpAMR!HZLtQz6wm#%2d*zQ?gSm>CvJtxHB^`vGvw^m*z>?aUFx0jufP-A|2V(`eR+mO0oTm}dnyN|Y`nE& zYe{Eb%WcaF&*HL;qrz8r^_I?Al0T~$+LF&{xBXY|du7?biRIpPU6@2r_N_>qC<`?r z0wYtP)?f`UyO=s@fJ~MEHj?mwnjcE{hdn%2a;=q8T|Y-YAm`8kT#C zL>QELNw&0I_@}Mpr?28UMrL8G21s3~r=3jYCjhjG*d{zH( zuM&u27+3bPa+1DeuVoEW^!&Mq=(Un6TJ^YzGd_E`WDnhNraAj+JKzkWNglD%6{zi)t;y=+w5+9YP-YdwKXL{zlKj}VN2^_j(< z=Zin9vz!M@)Te`DF|Q>Sz@mOdU_2&KA}w~rsdD1pJoiV zZ@%X_VP$9sr7J;kxP+wgGF|9(cU!{U`XNW3`2vG|g??9y01q>q_b-NXs(zCdWmnLS zGvAL#L9;(d6L}fCGXo|Od3AqHB>ph{?aG@Q_y=aHYiR1qsjX^Dq~7qx{G;>do7-G$ z1VvwsSo>MZlG5qm)N@YArHkBVQ3ZJF+Ffa$oTRoy)q%l}2TvGjT#P4Z@LxXWEe_)T zyrO$<;gjz3uP&*eahz|;zAoN{;(8?=-awh2vW!hbsEnZK^db2`UHvbF3vI6AOD%I~ z9?E|WK!fVTB9{~f(`MlNqvqW7$g_m`N9%%z>WW7>Bp#-;a2{KLT9;1L@AP5MJhYC3jxgzV0DDbm|u(D3c`j;_Xhq_XUQWIie$R)!+Ij zN!Aq-t^Vf$U%j6*VF2XN?$%tr)2p6sLr4s@aLm8sy(tY_>U_SA*klU)J;lj|>CLmM zG8WFWr7>)$t~h7idAI9?l22Mti+>gjuZ9dkw97YL^wj+~jev!drcMh?T!^I-c~4IB z#C~u;#_)BD{rmR`x5xneWp{vJBA)Z`)LkAFmy07UFEvSx@TG7BJ+-olhLF+0i5(E% z-HqLyzA`)X=fH19;^g3|-wQP$v@+RgQkw-64h%bUfyO`&&FS9x(Xx7Q5oEmixd{>o z?VxYQPzm7=5rVwkpb+Gs-&8a_Sc5+d;NS9laC#9z3hpq9S39Duu=i2)5ussE%;cUHE*ZeLl=+p zh%rD=__zHFuj)4Z{tzhchqTVWoS&vVacNTs#smt+^_yawEC6-fw!3kk`^Pknn)g1A zkh>1Z{yfCVhMI7V>-YyiR~Q8TNCk%1j6wq!Yg+x(o>T8F#BuWVN?L%!=;c+_!#I zwRq_q^3C|HA%g10^8HRJM&G$lDVIV2YAf3nMSa8r`D6x^NS71+m=@FG1zG3A zR|SCHc-d74>NAC5V=!LPk>Zc)XqN0{maJ_;rj3X}1EVb(E;qr)=_b9-RQXGu0t*Y> z=$=F*%{4@MLU{Fvm;u_kLRc|^Suc61Qx z^?Cgc+XxOPURRT}N(}105Zx~7wyjG%3M<;qU0lcC+vC7(4>YCS_g`&#MQYwu40!li zV7WfmqHoC~8jYEXr2Y~Fc~DdM=D* z*FpEGQZM|ip24NbQsx+jY1f=9rk{xw=B5jeKm-XMF&2_v4Nfj z(XGP=v)wPSD<WX13x5V7*T0xQrtRre-x+R2z% zS%kmF(4_ApC;kUU^X9x>{Uodn_rV8McPlUI(GKJTjg0p7xl#r;-NjL!AV&UdVTp;3$Evhx^TL}a_ z{e)3)x^5N%4lmWX9eeqBU8ByY`YMC)gMiQYZ4s_S+U5V$vRhdt51bw?Hh@+XRqBLL zyv^Cs4&8vi_H336cZ;WOl}W6%wI$brx#pq;Ub-@k>K*~)6jc8!PREhTojkM7}Kw6 z3c+|^#wfnNsb+W<4j-VKPGQ_b3RB9j8K7c<|8;=hoxyO&;a3JW>-FKP>oPpZN5W~N zP(cY4Jl#6o+1=IL*QWlVgYoTqp54!utF*;#l%1aX(GA7uNJP060t^uRoy;vG$&B_Z zH^mioTEp;j-@c$$(OZbOE+8}@Vb+)iaY|waVIO(Ym@@mQq!@(ndCNLc<^&VXop0ND zKD`Rqed$3_VMz$q4}>jG{}P=#>ndKdd-}MoNS|As3>*^H+Re3lW8+&||^b)6{b-aCmV5hnovib|?p)XinqRe%X03^MYiI(lUt6g!BbDE>ThjJ{@Q8)zT`7Gmb|D9OH~Hqe+(X`!yP(`Y zcNV*OY#wN08Y(W(IWUut=vDV~@40Y`{f1=uRg~`u!>0{3u5Fa0WgoWkpVH)-(v4`! zQ4^x-K3%0^|1X6+R9ozKPXFC#+zEvs{NrQz4JroSdb9|;a9;WYSqr^z6DzrY(K$Yt z>4Z$5OEGZ3>-MxwZNre6&tg8JpwDC0fJv{3&X1IsWH} z_o>l3*NmdUh<{agF=KSImvr4u2zKZIT1(xGbY3Jg5eRAxygyw>R9p$bDrx zKX+8B6o9u;X?o@lzjFSobiG==+oEr8c1L)XuqyyD^EU$uJZ~MWr=>ye>xfHIEmBKh zBhlpD(pu|NZI>uVeqk@_bXxEqXE`-0Lmql(HNaiV!khcxP2730W3B6XjSYXj)3BNv zkn=5fzsmVZZ|_sS<3UK2%_JIax*dJR0wBwA6(^aUN^5!3>+H)~+*chRRQa?Az0_&WWng9oe(p)r2Ip(%UJ0Pgk1>X)X{uR(U zL**E;9`m4xdMT@(I0HCYI!vrHhwMj`SI=ri@*Ne=m5T-aTNqOd$)Q?2NUJ}-5Q=%x zy}BYAJVqLN2}4yQGXg0l!9kyO#NKb^sk(+Dh0|LJ!uW?pgMVjulwr?dC1XtT#@(c_ z?CVApN@|Ef7cs`87C+QreG0yway(}T zieA-$0l}W^A1O}4%>}8R@sJc9dT!;_M^Z6|||`iGH|8 zuets;lal&rtvT?qRHuRJo(i@fF7$?}5NRPPJTzs2>O!?;2meS`gWvAuB3RU7lClE7 z#Bk(@+?Ce-a1h>_5FZCuMRh_7=4ST~$7q?5EUb9yS>aY?QYBN_h_o$`ZB9bOYHOa9`cT#$bGtJ z9@&Yh<|7;_O>N?$zb?nr2NsM4ZU6_~_ug{!Lo9M}5sJ0x_%MvX%TwpSk*JEe48`L4 zithON!l8EH(&U0WrXMthR&NErJo z7ZKlYKA&`sM90B%x`rzLZO|itt^E!8pu>(C0QH5Uqa{;Reo!rFG-tn>Mr1?#_cf#n zKST>hl6oo;g3JfhYnTGFXK5h6|hL>$B$$ol$ zrQ7-ZxPmLc5GwdTEp=%ybz*^@|6Im$@XqGn2Wm%6_(iLK8H9?K`=MIA=Dzk`m^nd~ zJ9#{}4Bz*}p>x^5;`vi?%2n80-t}3gC$Tp)PtjY8TCyI$leKzokU+#t+|=Y|X?0D3 zDU+5=!Y6Y0gvC8Zr@yEzIC3WH-#f<+EFBw7YSQ|^36rT$i<+HR*P$L#1{>S4KdT-l z$%Fd!IA0J4Cym^OyanFP(~gVzkrZLJ~0tH|%W^^4Rs zj&!Ai{%}2&`wobgqtwmp)qdfl)*$O~SXdXa%34?{wOp%dIDwRTA8!v? z)mWXb)P@zX=9u;t(S=CX2M$l13{?#sUIFj41csU$($(W5gW-ejf-l{>9lCNYbRA8s;&KOGoQ_a0g6GnfUG81_aOI<^2yAH z0+GJLqw3Dkn;u7b_cq!l;RBWwH5p($uuRj1^lYmTNR+J=9Z?1zhs}&m|016{JMMPo z)W`{=Rc!@WT4989ug)$%QOZP1fB$A?u_<-S@G(Nlp^I0!(waHFRDy&6{#h zvu;DN9lJBzUh91fS5P3-vwd@gR-#vtxSOq;7P|IgB+u{NSnqU9mccG`R=A*IpEYq^ zDIy@?c%G@#Ro7R_K|jVyFC6Jm;7%lfTc2JdE|9L1_i}1tmcH-h1WnTmjt};IS@B&V zCB~2MA44Rc@$4d~Xva8xTpN;zDUfM9BQXX^QIrcIp>m>-tt374#D_GPos-_sG!UJ3 zqIMmtL6ewA6tSPZ_yWNIL^3un@qcS<3jWn_|BPUw)pc-~YxzjHs0B~Co(-B{UWTGlf4z9N<~V0K5HUb+kppD#psVX^Dk)MW*pjMkeNP{>Yf zhnx^=NXNxjGEGXKo>}fxgfad{&NG{y%L~LhZ6|$2@Y==Vy8*Nmir9i^Z4>w;1N+do zUBF|2Gamf%{`YccHWf7$PyMGWw<}vLVS?JQJmy>{P^Ls9(rOHOy7Q zD!&+aV~@C+_MxuI5nCC{{q(;N4L;VhAH@Q1diUDv>o|J;8)k8+YR?id6D^CJY$4k4 z{em{EDh&O-IMbPVzVW1Z>6GN%@#==ZO8s$BM`w%y{%2-bYJ@UIb- zZra?UcaIoDyoK)Q#@bq;vwWn1>R98&F3|ILRdNt32QWytXm#J3-hc~3sxPu06{L@& zxAQv?D4TF!Flv?4rf=Nt$F`>>apL{1fDvEtpOnM6pwP@&XGQQWiZNqiwsFs3J{RUr zG2ORN2^V`{POj4(Wx&}>(a;W##DWR}ecW%iqP2`a<2q8sm!4fG)7-=c*StbpC=n(R66T)yMfs+q4-8`iTH z;^nBQ6^wwVzz~sADTo~UJ@oONUxBRqWWv2+$|6!=cGG|+2hrp&-wa}Jr*6HqJE5&+ z)c4FPhXX8A4^FW>Wiw?=h~rNV>3P`%$2m>zzs{`;z)jL>`Ysgzw7j9dHLn>}u!DbJ z*4teKFI;?)KorWp+hMjxRuaI2##1}Ryg~N^otzy){qIc1Gcrs94lvKH|9#J1%ow(& z{O^WZ5;L|7?(`Xf-f$^%Bd(N69xoFkfU|x}>Dl=A{s6bxIJ2%8iqw8%ah_nwnqJ9+ zO5oSTFQoz@ZKS8K2sy2ov1SQ#rlAqZVN<<@mU5%)AR6uzA$^VhxNvdGUS^tUBw*+s zVT=6OEEf(+i5P1!87No#R9HH5FlrOiATP9RLb-Cvek6Wid&p-ia#h9Vgu5wLh~qTI z1!L0N6)A*T8;rW^R-|npjZv1w3u6P_H@USzbhd9_g?;8|_&Xl_=a#1cYk-mX^JcRv zB%k}7NB^s;J

SwgKp|N8|V6TX71zTlYr7K?L0|2ww9~8p;p9sj?h1?m(Gz4#+{j zV9NHctTu9%>eaI}L*LO1{ZZ0rW)_2a-B+egN@+$V?&z9xyB!tRI-q|-n&MMOJ1;eY z{c+s*-dXMsArsO>tLBg@=FHQ@yg#)6C5U6-2f3r9rw*tuqvdzzU426UV%)pu_60V2 zdclfTtD#qW9z1QonlV-lP&0F4)ZB09h0|}1b@xYS_raaCpn1tykM~BYF z;`7$C%jAqy?jG4BrpE+(sU(BEc$yrNQZ^+A9z%^xG+&0tnpsw)UuDAY^&xfqK03H{>%6jw62Z`W~D-F;AreEsf@P z<;X588s6B=98f2j2J#-q$W=1FE+Q>52-la1i$&BJUJIz;&}qntRstUqFkVaUSM8ZX zCP+5nXw&bs;eUAf_Cafls!ZkhZ(|(!iZ6a^dE&gZo_yD26Tf3wMae@7T*!#a*R)d3 zojrcFyQg**`-{~iKU<~|!6w_y?_LuAmC1eDP8(!Jc9N+rm16Cm89M~u!X|C~gxwEG zBfh0%2QY3-X3$J)P32Q27+bG~pM2zNV}XcCny-}*#eNIhGbLFW2?)YpzDzIdohj^Q zX(T>rm=d{|(QI6!8C4Q$4jk7|Qu3=J|7lzz9ldc4UG@}mf zy77P7qc|OfT{kIyKTHe-G~T&OGlW%-<~;aj zs(TtP;LLRDn$yCxaqa#o7aoV&SbeI~Pv#5;@^SguPJPMsD4=_3_XH%0)z9{!`4t&& zuHK#};0d9jkB!7X#05z^h*9A5@H|L41??3=?R0kE99UNAhJMB=YCj7iq{ZF;+}E-3 zg=n1PY9%vd&1#L!yhmFLj9zR~7a*EC@m7Z%ec|wiSU?QbWXSfd6JX&dzyC?!0!kgKQ@Zgb zi3{CIohbF?d%)mWdgYVUP!#rdLK~#Y>Tn;KqgZfIzkIE-n#r5Im|NcWc`4SyUdCCd zqf9E89x6ti)t|m*jf^j=ZD$#nU14$=Snb&LCy3#xtIt%+Z;V8(JAAg57dP^Mocv&x zu0lB;@b)U%;J3geakGbA?{iDXi>oY*Ri~A5a6EnelOEz}J)N(Zn&XXKywpxJZH15{ z;2lY-A6{h01s9obLXJ3{XP|Tdbepnt4K#c|CWqhL=*`?GfMgBsR(bn}OlBwXui?v| z$Dm9lxuI<#*aSWs5p?IpS)h=a_r0egjqo7hDYKZ`@lStJrG2$Qh)d9$Xp@-YbNO9Y zll*2g1$WsQ8E`3gNvoJ^6ZLSAk$l$&SFEc|DeR$wJO>7YPup0y!2$=v1g0Zj;ix?2 znh5wZ$b=dp-YjXvtR%0$;-@mH=O?jZGMBlUYC`1^YG zp@Rb?nr7?{=NjQQyf1dVj{5kocb@h~#Ols`{bnk{kwKt6)$H;5mciP3U;nPC{|^05Iwa(Majk7P?bHG=a=|F$Zs;id zDbKgv$BQ_eqhlr4nGEt?j-RpRNy_>o(mQ3XEv64oQ85u9QCx6Ex8%tsL8k!B#&66j zpW_WpNv7YxpV-qBwNjqce{qz044P0j;E3Z26~$~UBdxL}W`}+8WJF;f6HtB{>VtE@ z+X2U!+HrpLPB7>&W3s1*e|5tnV)q~Zf zc)zz4#{RTTq`*Yx2D7Ce*dtHOSNRT!tu0(xGVu5Ls{59bPQqE*&wBlL+J=4qyc7Fg zCpC07iLc*ZxTVL+zA_kOZt`TB;cVQKt17l%xS%so>C-pO?7pv@+~8ec+bv9ewx&7! zaJ9{zo1^%>J^TuHaC;TWUtfJ=JUKsWgmQ)LV6BTY9!i)4{*ql1{ru~ql?(# z5xD+Xav5}+4>;MVMWiu0n7TSrS5`VCb);V@4c$M_AR&Pe>uigvDJQpb;tn*i@Ifg9 z3Fp6(#AEL#;r9uA-i^ae%v)bKMNZi%TMc-p5wb~BgD1!l+}5H-YP3D}eX`^L7MY9< zk&+@r!`Z(@Y#{~=3Mi+A_>hZUqE_3{UQ(Il-=FzxCj8evTV?S^hRZ4~DXWgkHIp&s z75audO(%@@8`%e6-Q@l{C0%#j_g4&6A3VwUF-!^Ju6)FseUp?81sP+4N$U^GESc_T zeU`Sfe$ha|xNUfUPh3|$H;zdh6l@f~*X@YO^9xYdpGAgh;A_xtmV4|Gx)Sl&vBNKT zcB}nj3V2}TJ|>VO?yy@C`Z6LzolM%I&$d$FnEeHgGQo{tj6V3Xv6I4HQXl;JxRgnQ zE0GpodxVz2v4Mo#{d{7ot#3AVRx9BB#GvtM<~pBCiX6etsTwqMlT4SD)(;eGQ?l&F zuip-mcI(V#h|NSrN9XKp-TDTE+WdbMh%Rf{xGUo8y}lU!J6|6gob;zwoYYqu;+_YE z%UBEG1=HsQB75xQDB7RDK;PV_L?Pye7KP{$$yn=uyUpJoEcg-A>Ab{+@NxX9HwKzfQLgnh-`t>K*6p%xjai_TJm|~LeDbV0LRP~&6o-;G<#bbi93+;N9ity8`LhOFZ zXIpYC4HxbcT)a@YH2nF#;&I1Lxh(ZdW;YYi1#*>rHkREazOtvi*nw)u9B}w7(e-FI zmwJL_)LEd7G%Y63GmtYlXAShw0X;h_!9C(};}a66)PWMn;eq*CTQ&4Lr zicL3E6wZ+)R8!W>V$9Xxl1isQ-T$4nXC|zdz$C)HA5O>ZYdoa?`7SC>#gsxkp@YL0 z+bIV{GTXI?8-h@2YB@6m11oW0jH2=urns5o_@i&y5~MF-X|ZRlQNcmlPlQBee$Sb# z!8I9~deb%Vvm~!y5r}u*YqX4*t{QnfCU+Yc8gqu{y~8Ga;H5P$)nLPt!qP{5R{y$E z?a++wr|kRo5$*ig++01sc1uYJYtw+UKr?0m$rStOj>c4LN{yxoss5O@3;D(iagHMg zyAo}PTsTQf>Eyc8p&RZ~!6bQMT<)lU4N74V@C zR`ASU_;ha5w@mUXL3Mt5s8AjXb+EW{B?BqkYu`<%&BTF z9VmD)bWkK+m0;b{?8-b_<^ND%$8_PN6;r)X@QrETU#!K7(#YwFKlj#Y8)3gax3$uc zotv}`VR^e)kv?^y@L{|gg%RdU2|2Q0kRTx|%z=vgoeA(sS(()xmz=wX(PZdE3n|J1 z&e&{X>zkD{TsB0> zjz}fD)VrtxdO4gA28WUEk{ra+Sn*qV-ZMhRB}ogIk4R8`(+_r(MAhooU8ly@YIPG< zK;Tuv*l_23jc!W2y;Kn+Ja8J`Ev?e{bJ1~FDcfgyLWFSo^H%c(#0hwm>-RUfo}t}` zHKuIV0!1x9Q%q3T2fC#)dVEUw+*(J+_i64`D8C83^ zmyC+|xzG!TSeHNjT8kd17vb3o?(X#srtw@e`5={e`jW-q?$>ONfHsjnYQ0apHRP;| zd1q>m6(6M4VXDVp|IWv}12;oso#fNUdBk?0-3?v*gl>~#{gKQIcgl|Kh;djn; z-&ZrLN^vOPZ?1ldn8Za)k-8QtqjEl_+Y^4y2eP57WNcpg56%| zLU_PmB>&lJmxKhviTLc8!@R3_JJtk!^PwguIf(4if9m-xMBv?4FcBv)B=$Q_$f>PzUJt zd!*#gUpB)#@AuS5O!(|F-Zgw_dstX-u$hi940@G8U|Yc+OFW#gdpI6Z^mW}wmI$06 zH1=CYD&_2!+B5&l!{C9D6BrPYFGbr%HC`>xsz!eAFGn0Ej<9-atFFjf{UL@IER#md zhlDzgUVhTskU9kz@VO{nkdftk8NxtwY$9w03Cl%&cW|H`Zga|mI;3^~x^7nj63{_k ze77T_hinPb`ytB8XP)2XP4;3!Z@}z`mGI@=!SEA>1ZpIHDCRCKfu0P6GmRF;ej93D zg!1OF`Nq3ljs_)Msu24QJ4bm#^?NV7axZ}3hRJ#tL3BfuHtKV3A)!d+2e;RRh-CO;G0(58p>zg zAx8yXa=<%$`C)DaYe!04op{#AhoIQISC_qJ&DmowT*G#(Fp)e zO}3#{oi}8pCYEW}^vlLyFSxa0--zP1*^;L~SX|cA#Bc|Hz=BX_U&op{ zG<<;487)nVa--aipTyhM=j1~-Q!@Ke8K1ZtQsIlzkt!H21 zPNE|m3^Ngy(qRJp`*2-Wh#N(C6(YoGECwV1w#C?UW4_(O^$lYu=@Yg=O)#z{`}a8o zQONBNBX z%anS%c{r`vXIhn=G*DGzP*XL3dZapseW7!%yWpR0owz6T+xq-$&m>iQXqjL&bc6F5 zg?Y^EqmVUOAQ2*4T>qq;=o`v>Ie~#?V zk)dLk%euH4K5z@o4N2B~?Ep1ajO?E}_}usmJ%iO(auW~sLl2*@sa^g%Z|0X8RFd3R z0)vuDT*_cQQ-#F^FmrxsgR$l?eCuuJ3$yCSoTy9t5H*d*PLO@5vryt8KSD<+&8SrT zA!{?H&lIVWy5e8?-?105e`pp$Uk5&aa;DtdNV3WSk&_TKvxvMr@aM%Uc??VN$&m7O zp}x7Gr}h|mqFRvj$0q*fgXPH&-dDtq z?lr!69QC!lQWk4-59|s)9!8h+@60GU^4I5U3DizXWE}aL<0NsBLvVFe3QOC)X`i#* zKFxGb_i`6&w;>dLyT+8b7`SuUjNMl^vVmZu%^cCAr^KaA<#W*Ak!0I-+fy2Y3N2am zF`?(&eIj&PEJRaW!f7c}eEr!NMI|(R;NIC(*j)FLv$?rB7f%)&lF;%GZh)U1M;Idp z|M(tlv^4vD?*njAg8oOOS+&0Y0%b=|mlNMvgbPsa4=$(RS&v3&72EXr?*$C~8cq@c z|LNAz85ef1BzZi94ARb^5h1br17Zf9d+7}dtSq^BQ>(o;hyD59wqQcphCF>!Sik_m z!Q<@t=`Xjta$9`O3p}+p5hCm_9-rUA@Tm2VpZ;BjzA|v-^Z6Fg{C6)1{UUbEvY$1l z6k$;Hjw@>+Z!`pJ!ypAkexz;sztA4ITt7aDHgPukH{>H)Q$Zic@&(j&EWRdGw>Fw4 z!g0o)4I&5d(VZiD)QtJ!|3(*fSkI5EOnhCQh-Ol?l@su7BMCNei=E!&3*zqBdD-EJ zn^Pn91$=$^0X(evwi{E#&%$#7 z*)+YDCiy-A-(TkGi9o>G-HRzk3<)D~v}XiZE%C?(zi9{6MDhAJrV=%uTI8L;?m?-2 zE?D)6ZpwLup&+JD0?=p-sUnGYp`40gu2PwPBU_B3%>fG}htuALFhN3+!K! zDe?VU;UUynmYxqWhGx@>man^!Hz)GM9ePUEbI6a)s*1o(@J>y5=ABhh<~vd%*Gay8eBu=hc&#W^Pu%)xpB|>A1_E!*;UW!` zE1P3hs@vj5Y0rDHD+fzu&e9XnxlIZcajN^gWlkj$5`M}}vWF?YkxHIj(cko7GO}EE{X@?RbwBgm2%HHcU)Pv|6QUF}gm&bDdUi0jepm1*Z@vh1= zWt0=4-Nksi^F0j$?m!+id48nF8DNf9pr&x1R`|iWm_`RnRccpAMZsIys+8s~hR^o$ zta8!0_PV`Op3$@uUF5v^s!ESdyo%1}>Gh(`#XuKAJX?qZZ zJ)ANMSusHzQ>Z`qF;`%xBSZ$mZiVea4I_>O1Lk^-zern$Fx{~1y&z;O_rBnzkh7=B zDZX<3M(jj&&YTT$_0b*gA}72{(J9*bty(Ax)cMmd zi2H)C$|g!gOarHm@zYTyJZ?poX6oZt7Q_;dyF|bZRL?91Jqh;&5^giP6#mx&OvD;r ztb`@JE(M6x9H5oNM?OAkS*t;Zc%KCa^MFa9)e6FV7@>GmWYRbuXk;CFJwGCs6B z3p|!BdWT?XNpV=UD_fjgviy%P{j8)47n|UJa<$C#MZ?fJ+M>un0*Tph)&c1$UQ&{; z#02e5uvuxwUj^_rfYP^fj)mv6D&S(2x_GFxMHz@$ft{$|48KwzrSr0~)Q;f1i7Ir9 zYaEgx{Pbv!51^&AO98sL1F#J{8uh>z?V@2q=9&VVsx*r#BcltU8SkD^U5lyyBf1-h z%a64zD!~__4wv^yBVb(dbCiKXB)-Q+LBd6$|0c!U;6VECq_ux)`y@uT^A{w%s+Dv1 z`6!sl?$`mPvPz5ua=?EftQ9F2UZEQZlHNo&SaBd-1iv!(`1TXpls)P8HlSbf57iB0 znzcd|2h8*ZPZV$d<1G&6<}NP$^igtqQr4=qf?MG$QLU6QD+GYIM|A20$PHoE3w4|- zI3c85jq*@s@yx-sq|=vk^`{=VN?XZ?_W>__%UvYcV570kA^)>#pdj(shq`(W>B;{C z6G800K0bO^m77*P#JR`5ma~?=?vRu=(;BAn(X-#d+C7_D)7GCoF{|+V)s@VwY2dtt zO*r=Gt{@88E@#f!%Z!>7KYw;Qf87`%;~(JSVQupczJA-U+1s{<51sp7qG6MzeDJ-m z0;xC)?Y(!zg30P_L32Bh=+Oh+00X{xXD;Mdm@z#P>;*`8A%tcG4SAipK@THmBG?H- zBWEzm;e*?Px*gy)gVzc9-KgIV-X`!n!Owu#jru9@d-^`x&m4EE5xx9~zg8cw!Le<~ z58oT6(miM)iFkI6nGSs?okC@ir^@XLAEa$wEZ{DPh4PGiRNlF|DWZU){%Y5RW; z1X)4;iZB0d<-#2!oZvouI>_<_u9Z1X;QbUvg*{({DY`tdaU^MgMl1jzqKhbP#Hv!! z4+Ae~GWtlNWi(?M&Z6G7d@_2is62*nKIlh)1sr-K%Mx(Of6r;mG!ORoEtu{HO-c&h zJW#n6-x_R2dpoe5u@L}B11$s@|JMP}Dzt|N(ja;0_ma__YOi_7Z|^H%4h63yp}vN# z;enT!8yJ*_4hznNfM=Kaz-vJBh@b7F2Ki$`O*w6^| z(`B3qNc5(V8y>k7dGSAqnl;ZvV7)G=;DiKY~kp-Dg1GDB^!IJ0~!SH=xpJK5B!C#ZM*s8`5$I- z-K1e3+flLqRh|y*HQu@u&|)TSNWNWF67{iXNL=& zg4`g!^<~M0_KcUNzW`n+UoY@QV0wX<%s`p%JKhr`X;6>I$(>sjkASzBpmAu)^iW{2 z@c-F6>+m?vbM610ndKGBLd%RYJLI6#FgBc~NmHhj>GXWXQ-)J+Q|@U~ZrZd>)22-t zXvje)F~rt7cFYztFU-vQ{V|)^vSfQDS-UIkdta9>TQEB_&r1*9kG$PcY{TV8&v_&r z#e0DtIg!BM9Jm>{0=FXI(Au;<;E%wUJhjo|k_M`f^FfVSS*n)yuj_=iT$xo+IRmg#%tC>Gyr2pyt9syHh85+s@+u?OOtQFfDSG+8ZR zH|IEQf`D)B*y$&fjT+cU=2{mSh<7d$T&kDDG0->A%P$|kg9BYhRxOJQN+~NYPy4eK z1rpqHLI*EAP)TcS=UU5O9y#a6>+y2Y3Fpw%-Nv^c{5|c5&=@IT zN1wr$pRC4bDlS;iiXoHVwwo3n;4LTZVOd!T-+H!!b(FzuDj3#0M^Z z6DKZQeQerL8c_-b@RUXAR9iYF;~`ccjR*nP>2{AO@EQHeJ9`$QAioi6>QeE^&$ zEjx`-D*7q$`5$tH>ICiv&LXwUd{ac-1pIAOw{er5pRpo=Zvx*3Dl#CS4&b}k#;wM( z{?1&Q81b#)fHLei3Y6$34cjM0{_Uu zEa{BGsEszNNZ{Kx{1dnwxDl71-vMq@@OAI;a{fmG0ULD|sXK*jkjFs|jN2YiM!O-- zc2EwJ&nw%EOY`#|;3-gb9$n3nMuoBim8c(9j_D477mNxp^1v)Y#E&wI+$<H1FF-g^49}-*w!6nIsU?Fyo+greD2D<^3*bVXhZhwJz9m;7Y za}Mnch{(TiJg1f0062r=i~m$j+mHe_?%d2HFKs0599gaOm>xVMG>#pJ`{*19QyiL@ zc0D4B6RO*}YF-|{jO39xL}M7V68w4NBdnUcoXbzT0OJT*>_LBs*PQ-p>f0K)ZT-DO zt)YkDu73FDGnEwh98R0vHYLW?W7wQNrw zfTsfS6oaRH>_HR_jfsHWhqBt;EPcB(Nz2oPvUh;$0jmd`K9`Qi?ggjUb@1!{RvO0- zFZTdQUAL%>#;i#2X;2NM?(bY>MFMj@wb5OpK87vt-HyjP4b+FzESpx~d%%y(9CQ8y zn1-`jxzsyvd7m$N|;Z+rh2>{xx&TX0UAbk|Xv5C@Co6 z{g=O;{@4J2-1G=BduTTF3tc9keY~3gP8gg$w{6nX0lkdnRh@kC>?pOx<@~Cyh~}sa zIo~a%SbyL}KKAGD@Lw0cfeTJN7r)o97e;aql;BAyqZ*us%qY@{CRA)U;u(j!?_UH) z;Uo_L_}zev1l+ydGaY;J7fSOC76h~&F^su6Ojezbn6k(Nbj9sI&d((EK$ebDYg zC0bqXeY+d1MzCAKdI?lF%84icHty2#s6?{z)X{RC(7oMA;Q9%3ouf#}7#y`q$u<%7 z5b*jGWmtidi`9mrAB~nm$Mz(mDEW~HtAMka_Pa^p5c)*W^&W^x#K6<>~+;C?u&5B)_B#@yv7^aeB&Pg`UGlGpuZzC$~S#123*0;?zG9riTj&dA#%_ z4s!AI#td5eOy*3RNWEIIsH}@yR`__StCGe+W5^k_v1u>g{OAAir5pZ>>19Xm2T)ct zjgMXPK4MmazioM(*dY}Uj)F}cZV=#8N;qe3J3i0kr%Vx1ROAovfz$RfGe5zto2Id? zYv{S^D8<(1y?o}bAJRS8%XMd7se=G7TXfzU#J>zRn3(_oRz1YGLwM}LO!3ckE1@RS zbT-PsoQ9Ys;3)>rV#K=u{PVy!9r0Er{XmlJVWqjoH73k}N+y9sT_?U11*hNb8|Act z)#^6ZwcEk!2CE62W|Xxfc|slXr4IXEBP07d{skLB20)zzgmYO9R4{6G3Z5cpd+q>I+`nZSC zMVwOLR8s4P4Q}({r@gh&32=op-MHAF;l_Plnk zX(;3eFN6;}OB4^jw1I_>+`;=Uc?6`^q7X?%B77IhZNshKaCCT=8)#V3fSAz&Nu)4YdnU@)n~lg9qU|& zXBzkyz~FruQr@~yiS2Gfd&58GcM#7URBS8RnOW>X%<14;4Bjf&!S7k@a`<~I+{6(x z5AEdFn7DOjC!6N>COP%{+)RDD0p+xS-3@j>*zHM5o*r(4lTwopp0ryOpHafq zz&n{Z=8j1*`$v0$Z)rbHUGPyy)IL%R006ASP^*FaM|(eGWse=-8h+Ri^+VuGjJ9t< zYKQ`V6(wIcW4_I@x+^EkaFjA;BF-(O?&ln)ZVIdfZqJ-Xk?sw}uzf&P8g4ZQc&k+x z+F{0gO-X0B#snk2HH?To1GgbYs_0fq{&hT`!?(1*---mD0@jXWfsPgqE_?hS5CiE% z@f@%oVIzu0fmTCQw=5adwTtQ6bCA?*A}2<6W}8@G?|J3F!>EVE?@|njFIoESMT}%A zI3Dn>0Heg^cQwL@w+76R+t^qFxYR=?U?ypY%p@g|t}M`)Ab88&`3Jz+;KUH8->nvK zdfgK6*lsr{7TXBcPL%3Dq-=aJJDfCug<}u0IZ;S#$Y21#M8YSy6&xBP50T?=_cQ-y zW8?0WubEj^LtY?6+u*^9=&m^I>o-tJkO^*}>oqOjxU!LLZL@i}$uq=(J(!4d`}+Hs zSyIV$XI@3XcVyLQ!Ss22_J$8*-~J8$vvc#X>W4_T!PnPMBW}axi(AR_PmN+*ujz31 zoMxtl5`5>GGX7KVCwkacv%j~4uiSGR-GjZncI`D3gbH$dp%_6Va0<$}1Dux3JVSJc z>y$Jq$6+|Ef`NOI?ZeV8M0YQiBo(BQk9bytZx-TT0RB0MISq_rFhg!HD&3%0W2~mC zvfVGNDUc0WVMO}45^J~#F)(l1yBfB zn5K8T3e-B=7ymV&sesaPUWoE4C2K^~XteOnB5XbG52NI6MAhPUMK8o{NSu#bAu^s+ z83lCXI{N#Q|L?(V;JZ)31_Rj+>{T!bl5iZcd`tVac9a1W1jCpzg>@AbbH5Iopa;D^ z>yz2oZV9-OWJx#%7=?(Z7K{S7X|Y-Ca=d#h+@BdmZicgwhltnB78ajtfa(B&#_>5d zlJr&qpftHDFN3g+V7o@9Gms1h?1DriD*hDMEhxJW>@K&&T=l2Oq>>RdXl|7eHt8D?f`m@KRSkeX$Pm1JMb8 z?wLisd}z%9Iv%ZIV~1zRdC=I`#rGcg110$-TzJB{c+8Q<-w=bjm2>#)Yd(a1`!{%O zPu-9P$O_oqXYj?R%V_Ki@}|}G6o&?<#JGD*n-x`UeDRzCzW#U(f8P_L-yV9t*7tVs z?FW8O!b__X9+cCAF!lg|_~)T8ar1a4T4X^mO2I5b z%wm_y$GgJqMc}DK0`pua|DlN)I=f#Z4>_V@dp9=fd^3XLzM9- zh8@k-Wu1rwJPP{?;Cf&@*;4|l#&MfVAIQYJq`v~dorqOwx?Lfn-lgDCV7oq%(lEZ_ z_<&1Bqp1q~4aIS{96d`0*Q-e2CL2moQl&(dh>{9K72=j-1#u(Uhi;B#xWNH{cHG7< zFQ4L3pfUM~P(o+3!lm9CYalF9kFwe_Ct=@0SEd>x zVjw!eozMK6ZB2VdWyTlf7c(=zgcn3`)WIuvwFhY*@TMgIAOa^$@8&%x2Km@yWwb?y z_5;|}-OAVh^$V(t%ULyl)loi2SWrEm&%Nd&eE*)?xNGYZ3|fgHpVb-@e)vK@{q}U; zzN(3eg1)J-1Bs%#aDe|l;{f@-D*pIVKHZ6-XJqSOA3uHcPO6G3xaQ0&a(l=2&qh4c zP?<`#vUY*p1}qr6?%`kPI@%|~Zzp+(cd1*6=}q>^F=v2xI^wHwbts+DuaPp8o2_qk zfz|2q?c1F$<&M1@Wp}yB5q2Ng-7YV`>IM5i29hOm5O#MmF)M#cypFdvs&Eq>|6xZ0 zPbqjUa1EoQd!DRl5M<0zVR4M-mEr6FPD=5T6(VY3A`;k_l>6w-lbFB3@yEZYpcK?u zV>eW2Ldj1+e(GlZ=e%WF1Kfi9?|4zHU^%%G0Kkoy%uM6`mWrr1T9LqKJhf2^jfquB zlrdYx8BJHgW{~F$Q4=yY;*NQ9@@wd`MgpeoHsW~2J1k1VN|evF|D<1uigVB$uyU=_ z`6v(~g($P59F)?95R(H5u#*W0BT*0G2ct0QpbaA810#TvfLlFa&UgRy&OppOmnYcB zL;N#vmz*bAnP47LpK=*x5{mD7+jiEvZJn{>-2%$iP#5Fu>%l$5fb}Q z))u!(9d@$e_n}++7#_h>Jq`!Dg2XPc8#AZI`scZQLNrFuV-(x#cX0Q{M;Ne1@6lXc zvygkYKZ|1@OdH?UDKzw(%ubWYO~c{B`K|2e2=U#G`9u$+>91=$z?c8=Gd_LgEi9eA z6vG&K-xU!S&sfN(um2z(!{pDKA0uiHwS{{U@bj(tH1v9T|H%hfSk{LjlmDC-w7uAC z004jhNklN`z=O3}6V#>qJ2j59B z_(YNpB;AX)2jaUSxF(q`KbAec9E=)pUL2b_Ej~AJEgmptBmSk}n~nHqgSQ5ZO2o)Z z_G`-18?8oi?k2PAhx}^;2~?uhb>v&^t`k4L-=*2IcY|^>`w!Cc9Fpaat>v0YI7!ON zV<6xQU`#Tb$E=OECL)0!3;YW>A9y3M0yn90DjIM*oNi4pE=E9>oA}We2_djd4~&E_L(nmA=f zCmwTZu>`BrBiH}UXpRqh)WdIgTT9RStnAt=3JB%0b?!` zmfENt-x_{O;KL&7$GCj~j;a2Fyr59O6u4bMuV-1m=KgZM8Yd`t2dVXPNCjbqnxBXS zeBRn<+G{7%9sp1G&8S4(uq%>QI2hC2hIeKO$_TrG0V4pOGQ=nXqsrySHH*Ov zBStc#&MeTP*El$j#OHp2%eCySfp9VfN7-O^qT&Z2(cm^3PV9h08_H^i#6EBuI3n+@ zS>gt;#sYi5?E#P}1Kykl-uY;nu95NlOPjbi@)Y(lnt{fx1ns@Ua|Y&B&tY~!DO=j= zhwN{U>awBa40D!W*C?7m^KmGAp+*|J_es~bzrHy>&-rM-(RqtU|#nFp%t4b>Q z)b$@^`h%7H-{XIyb)a|13{E)kM2m;6N2~e3$pOxv*G$MaHQH|#1`@n`%|0A8li$3U zPuHPzKuYmK^B(^9Uq7d!xSSPpmLZaZYb&_SJ*P9}E{JbuT(ocE1K*qx5*-aN=YXdg z@m7LwCgNEL-WlMV;X3=xd^B=d<+UKu3M%Sm>f7CJVu9TRPAkf4cfYqf+++m16YOSi znzZb47^Yz&Y1YGf2l{Z1Q={`_AYec6!$c%-mngXiQC9$G;06Mwz(FW4I*u`BMaHva zKqcyeJ49FqT$SR6G95S%_~Uq<+_$vfwjzP2fG+}{1Lhs!PaWVn;IAm|@WcYUbi(vO zSdl=vf)C(w_8+&2h09qu1K64FcgjEy09BKLu`@uOk8o8Y68M>S44t(#QW#rtRsxGi zJwc?230$Ra$ja z=XG&@F>g8VwUp!+@s0a_O>