miwm/0040775000076400007640000000000007703267533011065 5ustar bwisebwisemiwm/COPYING0100664000076400007640000004312707675611375012131 0ustar bwisebwise GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the 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 Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. miwm/2X0100775000076400007640000000020107700247461011265 0ustar bwisebwise# starts up an empty X server on localhost:1 export DISPLAY=:1 export XINITRC= X :1 tty8 & xterm & xsetroot -solid darkslateblue miwm/make.config0100664000076400007640000000067607703267466013204 0ustar bwisebwise# various settings for Linux (RHL 5.x) MAKE = make CC = g++ INSTALLDIR = /usr/local DBGFLAGS = -g -O2 -ansi -Wall # -lXmu is required on Solaris (between Xpm and Xext) # -lm is required on SGI (at the end) LIBS = -L/usr/X11R6/lib -lXpm -lXext -lX11 \ -lm #LIBS = -L/usr/X11R6/lib -lXpm -lXext -lX11 \ # -L$(HOME)/lib/beta/lib -lBeta \ # -lm # for testing, add in Electric Fence # -lefence LDFLAGS = -O2 $(LIBS) DEPFLAG = -MM miwm/BlueSwirls.xpm0100664000076400007640000004237707675611372013722 0ustar bwisebwise/* XPM */ static char *BlueSwirls[] = { /* width height num_colors chars_per_pixel */ " 128 128 41 1", /* colors */ ". c #1093bb", "# c #1694bb", "a c #1b95be", "b c #1e9bbe", "c c #209cbe", "d c #269cc0", "e c #2c9dc3", "f c #309cc3", "g c #369dc6", "h c #3a9ec6", "i c #3e9fc8", "j c #41a4c8", "k c #45a5c8", "l c #4aa4cb", "m c #4ea3cb", "n c #53a5ce", "o c #57a6d0", "p c #5ca5d0", "q c #5dacd0", "r c #62add2", "s c #66aed2", "t c #6baed5", "u c #6eaed5", "v c #71aed7", "w c #76afd7", "x c #7aafda", "y c #7cb4da", "z c #84b6dc", "A c #88b6de", "B c #8abdde", "C c #8dbcde", "D c #91bde1", "E c #95bde1", "F c #96c2e1", "G c #9bc3e3", "H c #9dc2e3", "I c #a1c3e5", "J c #a2c8e5", "K c #a5c9e5", "L c #a9c9e8", "M c #b2d0ea", /* pixels */ "kjjihfda..#cfhhgfddddfhjjklnptxBCCzwusrppprstvyCCysnlijklnlljjklnqssssrpnnnnnnszCxroonnnllnnnnnlllnqrplhgfghjkkklnqtvyzCCCCzvsnl", "kjkjhfda#.#cfhhgfddddfhhhhkmquzDEDzxusrppprsuyCEzvpljhhjlnlkjjklprstsqpnppqnnnsyzuppqrqonmnnnnnllklnqqnkhffgijkjklpsvyzBACCCzvrm", "kjjjigfba#acfhhhfffeffffghknsvzCECzwusrpqqstvCFCvsnlkhhjkllkjjlnqstsrnnnrsspnptyysppstsqpnnnnnnllkklnppljhgghjkkklnrvyzzzCCECzun", "ljihhhfda#acfhhhgfffffedfhlnsuxzCCyvusrqqrsvzCCyspnljhhijjjjjknpsutspnnosusnnpvyvrpruvtsqnnnnnnlkjjklpqnlihhhjkkkklptyBCCCCDCCvp", "njhhhhfdcabdfgijhhhhgfddfhlpstuyBzxvtssrssuyCCytqnmlkjjjjijjklostvtpnnnpstsnnryyurqsuvtsrpnnnnmlkjjjlnqpnljhhjkllklnsxzDCCzzzCys", "njhgggfedcddfgjkjkkigeddfhlnprtxzyvttssssuvADzuronlkkkkjjjjklnqtuusnllnrssqnntCztqqrtutsrpnnnnlkkjjjklnqpnlihjlllkklqvyBzzyyyBzu", "pkhgggffedddfhklllljgfeefhllnqtxyvtsssttuvzCCyspnlllllllllllnpsttsplklprrpnnpvEztqpqsttssqpnnnllkjjjklnprpljijlnnlllosvyyxvvxzzv", "qljhgffffeddfgjllnljgfffhhjklptxxusrrstuvzDDzvqnnllllllmnnnnprstsolklnpqpnllpyEztqppsssssrqppnnlkjkjklloqqnkjjlnnnllnptvvvvvvzzv", "snljhffffffffhjlllljhhhhhhhilptvvtrqrstvyDFCvsqnnlllnnnnoppqrssrpmllmnnnnkklqyCzurpprsssssssrqpnlkllllmnpqnljklnnonmmnrtuvvvxzzw", "spnkhfffgffffhiklllkkkkjhfghlpvvtsqprsuyCECyuspnnnnnnnpqrsssssrpnlllnnnlkjklryzzvsqppqsstttutsqnlllnnnnnpqplkklnpqpnnnqstuvwyzzv", "tqnkhgffggffghjjkllllnljhghhlqvvsrqqssvzCBxusrqponpppqrsssttsspnlllnnnljiilnsyzyvtsppprsuvvvvusnmlnnpnnpqrplkknprsqnnnpstvxyyzyv", "tqnljgffgggghhjjklmnnnljhghjmqtsqpqqstvzAytsrqqqqrsssssrstttspnlllnnnljhhhlnsyzyvutqpprsvyyzyvsnmnprsrqrrsplkknprsspnnpruvyzzzyv", "spnkigfffffghjkklmnnnlljihjlnqqqpppqsvyzyusqqprsstuussrqrstspnlllmnnlkhhhjlosyzyvutsqprtvzzAzvsnnnrtuuttttqlkknprsspoopsvyzzzzyv", "snlkhgfffffghjkllnnnmlkjjjknoppnnnpqsxzzvsqpppstvvvtsqqpqrsqnlkklnnlkjhhhjloswzyvvusrqstyACCzvrnnptxyyxwvurmkknprsrpnnqsvyzzzzyv", "qnljhgffffffhjlmnnnllklkllnnnnnnnnpqtyCzusqppqsvxxvtrpppqrqnlkjklnlljjjjkklnsvyywvussqsuyCCCytpnnrvyyyyyyvsnllnnqrqnnnrtxzACzzxu", "pmkjhgfffeffhjlnppnlkklllnpnnnnnnnpsvyzwtrqpqrtvywusrppqrqnmljijllkjjkkkllmnsvyyxvussqsuyCCBvqnnptyyvvxyyvsnlllnpqpnmnrtxzBCzyvs", "nlkjhgffffffhjlnqpnlkklmnppnmmnnpprtvxvussrrstvxyvussqqssqnlkjjjkjjjklllllnnrtvyxvussqrtxzzyuonnqvyvtsuvvvtqnllmnonmlnruxzBBzyur", "nljhhhgfffffhhknsqnlkklnqrpnllnnprtvvvtssssstvxyyxvtsrrsspnlkjjjjjjkllmmmlnnqsuvxvusspqsvyyvsnlnrvvtrrstvvusplllnnnllnrtwzCCyvtp", "lkjhhhhggggghhknsqnlllnpsrnmllnpsuvxvusssstuvwyzyyvutsssrpnlkkkkkkklllnmmmnnprtvxvutspprtvvtrnlnsttsqqstuvvurnnlmnnnnnrtvzCzyvsn", "ljihhhhhhhhghhknqpnlllnsusnlllnqtwyxusssstuvwyyyyyvvutssqonllkkkllllllllmlnnopsuvvutsppprssqnmlnssrpppqstvvvtqnnnnnnoprtvzAzvtqn", "ljihhhhhhhhhhjlnonmlnnpsvsnnnnpsvyyvttttuvvvvwxwwvvvvtssrpnnnlllnnnlllllllnnnprtvvutsrpppqqonnnrtspnnnpstvxyvtrpppppqrstvzzyuspn", "kjihhhhhijjjjllnnnllnnqtusnnnorvyyvtttuvvvvvvvvvvvvvvtsssrqpnnnnnnnllkkklllnnnqsuutttsqppoonnnpsusnlmnortvyzzyvtsrrrsstvyyyvspnl", "kjjhhhhhjjkklmnnnlmmnpsttrpopruwyvtstuvxyywvutuuvvvxvusrssssrpponnnlljjijklnnpqssttttssrqppoppquvsnlllnqtyzCzzyvutttttvyzyvsqnnl", "kjjhhhhhjklmnnnnnlnnnpstutsrsvyyvtsstvyyzywutsstuvxyvtsqrsstssrpnnnlkhhhhjlmnpqrrsstttsssrqpqqrvvsnlkknptyABzzzzyvvuvvyzzxsqnnll", "kjjhhhhhklnnnnmmnnnnopstvuttvyzxutstuvyzzyvutsstvxyyvtrppqssstsqnnlkjhhghjlnoqrqpqsstttttttssstvurnlkklnsyCzxxyzAzxvxyzAyvronlll", "kkjhhghhklnnllllnnnppprstuuvvxyvtsttvyzzzyvtssstvzzyvsqnopqrsttrnlkhhggghhknprqonoqstuuuvvvvvvvvtpnlkklnsyCzvvyzCCCCCCCzvspnllll", "kkjhhhhjlllkkjklnnpppppqrsstttttttuvwyzzyyvutstvyzzytrpoppprsttrnljhgfgfhhknqqpnnnprtvvvvxyyyyyvspnllklnrwzzvvwyCDEGFDzxtqnmllll", "kkjhhhhjllkjhhjkmnpqqppnoppqqqrsttvwyyzzyxvvvvvyzzyvsqpoooprtutqnkhfffffghknrqnnnnoqtuvyzzzzzzyurnnllllnqvyyvvvyzCCDCzytrnnlllll", "kkjhhhjlnljhhhijlnppponnnmnnnoprstvyyzzyyxxwxyzzzyvtsrqpqqstutspnkhgffffhhknrpnmnnnqsvxzzzyyyvvsrpnlllnnqtwxvvvvwyyyvvtspnnmmlll", "kjihijklnkhggghjkmnpnnllkkllmnopstvyyzyyyyzzzzzzyvussrrrsttutsqnnkigffffhhknpnnlmnnpsvyzywvuuttsrponllmnpsuvvuttttsssrqppnnnnlll", "ljhhjklnnkhggfhhjlnnnlljjjklmnpqstvvxyyyzzzCCzzyvvtsssstuvvusqpnnljhgggghjklnnlllmnpsvyyvtsrqqrssrpnnllnnqtvvtsrrqqpppppppnnnnml", "ljhhjlmnljhfffghhjkkkkjjjjjkmnoprstuvvxyzCCCzyyvvttssstvyywtrpnnnlkjhhhhhjklllllllnosvxvtrpnnnpqssrpnlllnpsttspnnppqqpqqqppnnnnl", "ljhhjlnnljhgfffghhjjjjjjkjklnnppqrsstuwzCCAzyxvvvuutttvyzzvsrppnnnlkkjjjjklllkkjklnnruvvsponnnnprssqnmllmostspnnnpsttsssrqpoonnn", "lkjhknpnljhgffffghijkkkkkjklnppppppqstvzABzyxvvvvvvuvvyzzyvsrpppnnnllkkkklllljjijklnqtvtqonlllnoqssrpnlllostqnllortuvutssqppppon", "lkkjlnpnkhhggfgghhkllmllkjklnqqppnnoqtvyyyyxvvvvvwxwxyzzzyvtsrrqponmlllllmnnljhhijlnptvtpnnlllnnprrqpnllmpssollnqtuvvvussqpppppn", "lllllnnljhgggghhjklnnnnlkjklprqponnnpsvvvvvvvvvvxyyyzzBzyxvttssssrpnmllllnnnljhghhklnsusnnmlllnnopppnnmmnqrpnllnrtuvvvutsqpppppn", "llmnnnnkhggfhhjklnnppnnlkjlnprrqonnnorttttuvvvvwyyzzzCCBzywvuttttsqnnlllmoqpljhgghjlnstrnllllmnnnoonnnnnppollllnrttuvvutsqpoopon", "nnnprpljhfffhjlnnqqrqonkjjlnoqqpnnnnnprrrrsuvvxyyzzBCCCCCzywvuuuutspnlllmpsqligghhhknrspmlllmnnnnnnnnnnqqpnkjjlnqstttuttsqponnnn", "nnpstqlhgfffhkmprttsqnmkjjlnnppponnnnnpppqstvvyyzzzACCCCCCCzxvvttsspnlllnqrolhhhhhiknsspllllnnnonnnnnnprpnljjjkmorsttttssqpnnnnn", "nnptuqlhgfggjlnqtvvtrnljjjlnnnoponnnnnnnnoqsuvyyzzzzzzzzCCCzyvutssrpnnmnqrpljhhhjhjlosrnlkllnnnonnnnnprqnlkjihjknprsttssrpnnnlll", "norttokhgghiklnrtvvtrnljjjlmnnnoponppnnlnnpstvyyyyyyyyyzzCCCzvtsrppponnrsqnkiijjjjkmqtspnlllmnnnnnnnpqrpnllkjhijlnpssssrpnnnnlll", "npstrnjhhhjkllnrtvvtqnljjjllnnnnonopqnlllnoqsuvyyyxvvvwyzCDCzvtqpnnnnpstrmkijjkjjjlnsusqnllllnnnnnoprrpnllkkkihhjlnqrsqpnnnnnmll", "nrtsoljijklllnnqsutsqnlkjjklnnoppppqqpnlllnprsuvvvvvvvvxzCECzvspnnnnnstrnkjjklljjklptvuspnnnnnnnnopstronllllkjjhjklnpppnnnnnnnnm", "osurnkijkllmnnoqsssrpnlkjjjlnpqqqppqrpnlllnnpqstttttuuvwzCGCyvspnmnnpsrmjjklllljjknruvvvtrpnnnnnnprttspnnllllkjhhhjklmnnnnnnnnnn", "qtspljjjllmnnnpqrsrqpnlkjijlnrssrppqqpnmlllmnnpqssttuvvyzEFCxuspnnnpqpmjijmnnlkkkmpsuvvxvusqpnnnnprsssqponnllkkjhhijkllnnnnnnnnp", "ttpmkijkllnnnnopqrrqpnlkjhilnrssqpppppnnllllllmnprssuvwzCEDzvtsppnprrmjhjlnpnlkklnstuuvvvvusqonnoprsssssrpnmlkjjjijjklmnnnnnnnps", "vsnkjijkllmnnnopqrrrpnmkjhilprqpnnooonnnnllkkkllnpstvxyCDECyvssqqrsspkhilnonnkklostttsssuvwusqpppprrsrsttspnlkkkklllnnnnonnnnpru", "soljjhjkllllnnnpqrrrpnljhghlqqnnmnnnnnnnnlkkkkllmnrtvzCEECzxussrsuvtnkiknppmlklnrtttsrrrsvzxtssrrqqppppstspnlkklnnpqqpponnnopstu", "nllkjijjllllnnnppqrqpnlihgjnqnlkllnnnnnnllkllllllnsuyCEFDCzyvttstyzsnkllnpnkjknrtutsrpppswzzvttssqpnnnnpsspnmllnprtutsrppnppsttr", "llkjjjjjkllllmnnpqqpnnkhggjmnljjjkllnmllllllnnlllnsvzCDDCzzyyvvvyzyqlklnonljjlptuusponopsxBzwvtssqnnllmorqpnnnpqssttuutrppqsssqn", "lkkjjjkklllllmnnnpppnlkhhhkllkhhijkllllkkllnnnlllntyzBzACCAzzyyzzytnllnnnlkjknqttspnnnnpsyCCyvtsrpnnllnpsrpnoqssrqprsvvtsrsrqnml", "kkkkjjkkklmnmllllnnnnlljjkllkhhghhjkkkkjjkmnnnllnpuyzyyyBCEDDDCCzwsnlklllkkklnrsspnnnlnptzECyvtsqpnmllnpssrqrrrqpnnprtvvtsqnmkkk", "kkkkkjjjklnnnllllnnnnnnllnnligffghhjjjjjjklnnlllnsvyywxyzDGGGFECyvsnlllllkklnnpqpnmlnmnpuzGCyutrqpnnnnprsssrqonnnnnnqstuspnkjhjj", "jkkkjjjjjllmllllmnpqqqppppolhffffghhhhhhijklllllpsvyxxxyzzCCCCCzxtsonlllllllnnnnnllnnmnpvCDzvtsrqppnoprsssqonllkllnnprrrpnlhhghh", "jjkkjjjhjklllllnpstuuttsssokgfeeffgghhhhijjkkklnqtvyyyyyyxyyyzyyvusrpnnnmmnnnnmlllnnnnnsyCzyussssrrrssssrpnlkjjjllnnpponnljhgfgh", "hjjjjjihhjkllnnsvyyyvvvvusnjfdddefffgghhhjjjkklnqtvvxwvvvuvvvxxvvuttsrppnnnnlkkklmnnmnpvCCyusrsssttuuutspnljihijklnnnnllljhggfgh", "hhhijjjiijklnpsvzzzxvvvutqnjfddddfffghhijjkkklnnqstvvvutttuuvvvvvvvvvutsqpnlkjjklnnllnszCzvssrssvvyzyvtqnkjijjjjklnnnllllkhhgghh", "hgghhhjjjjlmpuyAzzxvtsssrplhfdddddffghijkkkkklnnpqsstttsttuvvvvvvvwxyyvuspnkjijlmlllnsyCzvsrsssuvzCCAytnlihijkkjklmnmllllkihgghh", "hggghhjkllnpsyzzxvtsrpponnkhfdddddffghkllllllllnnoprsstttuvvwwxvvvxyyyyvspnkjjlllllnrxzyussrssvvzCDFCysnkijjllkkkllmnnppnljhghhh", "hgffhhjlnpsstvxvussqpnnllkhgfddddddfhjlnnnnllkllnnnpqstvvvvxyyxvvvxyyzyvspmkkklllkmqvywtsqrrsuwzCEGGCysnkijklllkkllnnprspljhgghh", "hhgghiklnsttsrrrrrqponllkihgfffddddfhkmoppnllkkkllnpqsvvvvvwyyxvvuvvyywusnmllllkllpuwurppprsuvzCEGFDzxsnlkkkllllllmnqsttqnkhgghh", "hhhhhkmnpqrrpponnnnnnnllkjihhffdddefhknpqqnnlkjjklnortvvtttvwxwvtttvvvvtrnlllkllnqtvspnnnpstvyCEGGDCyvsnlllllllllmnortuvsnkhgghh", "hhhiklnnnnnnnnnnnnnnoonnnlljhgfdddfgjlnpqqpnlkkkklnpsutsqqstvvvusssttttspnnllllnruusnnnnnpsvyADGGGCzxuspnllllllmnnprsuvvsnlhhhhh", "jjjjklmlllllllllmnnpqrrqpnlkjgffefghklnoppppnmlklmorssqonnqsvvusqqqrssrppnnmnnqtuusnmlllnptvzDGHGECyvtspnnmllllnpqsstvvusnljihjj", "lkjjkkkkkjkkllllnnpstvutspnljgfffghklnnnppqqpnnnnnprrqnnnnqtvvsqpoppqqpppnopqsvvtqnlllnnnqtyCEGHGDAyvusqpnnlllnnqstvvvutrnlkkkll", "ljhhijjjjjjjkllnnpsuvyyyvsnlifffghklnnnnnqssrqpnnnnponnlmnpsvurpnnnnpppnoprtvyvtpnmlmlmnnquyCFGHFDzyvutsqnnlllnpstvxwvtsplkklnnn", "ljhhhhjjjhijklnqssvyzCAzvsnkhfffhklnnnoopqsrpnnnmllmnnnnnnpsutqonnnnnpppprtxyvsonlnnnnlnpsvzCEFGFDCzyvutsqonnnnpsuvxxvtqnlllnpqp", "mkihhhhjjhhhknqtuwzCDECBwsnkhfffjlnopqqrrrpnmlllkkkkllnnnoqssqpnnnnnnnpstttutqnnnnnnnnmnqsvzCDEGFDCzyvvtsrqnnnoqtvvxvvspnllnprrp", "nlkjihjjihhjlptwzCCEEECzvrnjhffgjlnprsttspmkjhhhhijkllnnprrqpnnnnnnnnprtvtqonllnnoonnnnnrtwzCDEFFECzzyvutsspnnpqsuvvvtspnnnpqrpn", "mlllkjjhhghjnsvzEHHHGDzxtpligffgjlnrtvvurnkhgfffghijllnprssqnnnmnmnnnqstsqnllllnpppnnnnnrtxzCCCEFECCzyvvutsqppprsttsrqqppqssspnm", "lmnnllkihhilpuzGJLJHCzwtrnlhgfghjlnsuvusolkhgffffghklmnqstsrpnnlmlnnoqrpnmlkklnppqpnnnnprtyzCCCDFFDCzyyvvvtsrpqrsssqpprsvvvvtpnl", "lmnnnnljhhknsyDLMMJFzvtqnmkhgfghjmptuuspmlkjhgffffhjlnnqstsrpnmlllnnnnnllkkkllnpqqpnnnnpsuyzCCCCFECCAzzzyxvtspppppqqqrtvyBzytpnl", "llnnnnljhjlpuzGLLKEzvsqnnlkhgffhknrssronllllljhfffhjlnpqrssrpnnlllnnllkjjjjklnnppqpnnnpqsuyzCCCDFECCCBBBzzxvsqpopprsuvyzCEDzuqnl", "nnnnnnljijnrvCHLIFzvspnmllkhgffhkosspnlllnnnnlhfffhjlnnpppqppnnlkklkjhhhhhjklnnnpppnnnpqsuxzzzACEFEDCzyyyzzxtrqpqsuyzCCDDEDzvspn", "onnnnnlkjknrvADGCzvsqnmllkjhgffhlpponlllnpqpnljgffhjlnnnnnnonnmlkjihhggfghjklmnnoponnnprsuxzzzzCDFECzwusuyCzvttsuvzCGGDDCCCzwtsp", "qonnnnlkjknqvyzBzwtqnllkjjjhhffinpnlkklnqssspnkhgghjllllmnnnnnlkjhgffffffghjklmnnnnnnnpqsuvyzzzzCDCzyusqsvzzywwyCCCCCAzzCCAzyvts", "rppnnnllklnpsvwyvuspnlkjjjihgfgknnljjlnrsutsqnlhhhijklllllmnnlljhgfffefffghhjklnnnnnnnpqstvyzzzzzzyvusqpqsvyzzzCGCyvvvvyzACBzxvs", "rqppnnnllllnpstutsqnnlkjihhggfhlnlhhjlptuvvtrnljhhjkkkkkkkllllkigffdddeffghhijllnnnnnnnpstvyzyyxxvusrppnpqtwzzzCByusssuvyzCCzyvs", "sqqqqppnnmmnnprsrqpnnllkjhhffgjlnjhhlnruvwvusoljihjkkkkjjkkllkjhgffdddfffghhhjklnnnnnnnpsuvyyyvvtsrponnnnprtvxvvtsrqrstvyzCCCyvt", "rqrrssttspnnnnopppnnnnlkjhgefgkllhhinpsvvyvvspnkjijkkkjjjjjkkkihffedddfffghhhijlnnnnnnnnruwyyvtsrpnnllllnnpqrssqpopppqsvyzCCCyvs", "srstvvyyvvtrpnnnonnnnnnlkhfddglljhjlnrsvvwvusqnlkjjkkkkjjijjkjihgffdddfffghhhhjlnnnonnmnrvyyvusqpnllkkllmnnopponnnpoppsuyzCCzyvt", "sstxzAzyyyyvrpnnnnnnnnnmkhfddhnkghlnqstuvvvusqnlljjkkkkjihhhjjjjhgfffffffghhhhjkmnnonmlnrvzyusqnnlkjjjkllnnnnnnnnopnnpstwzzzyxvt", "uuxCECxvvyzzvspnnnnnnnnnlhgffjmhfhnqstttttttsrpnlkkkllkjjhhhijkjhggfffffffgghhjkmnnnnlmnsyzxsqpnllkjjjkllnnoppqqrqponprtvyyyyvvt", "vyCECyvttvyCzvrnnnnnnnllkhhhikkhfhnsttssrrrssrpnllkkllkjihhhjjhhgfffffffffffghiklnmlllnptxyvrpnnlllkjjkklnnpqrsssrqonnpstvvvvuvu", "yCGCwtsrssvzDztqonnnnmlkkjjlllihhknstsrppppqqqpnnlllllljjhhjjhffedeffgfffffffhhjlllkklnqtwvtrnnnnnllkjkklnprsssssrqonnpqstttttvv", "CGCytrpppqtzDCvspnnnnllkkkloplhgilossspnnnnnpppnnlllllkjjhijifeddddfggffddefffhhijkkklnsvvuspnnnnnnlkkkklnprstttsrponnnnpqrsssvy", "FCyusppoppsvzBzvsqppnnnlnnpsrlhhjlnqqpnnmlmnnnnnnllllllkjjkjgfdbbbdfghgfdddeffghhiklnnptvvtspnnnponllkkklmnprssssrppnnnnnppqssvB", "CzvrppppppqsvzCzusrqqppopsttpkhhjlnnonnlllllnnnnmllllllkkllhfdcaaadfhigfddddffghiklnoprtvvtrpnnnppnmljjjklnnprsssqponnnnnnnprtxB", "vusqppsssqpqtyCCyvtttstttvvtnkhhjklnnnlllkllllllllmmnlllllkgddcaaacfhjhfdddefhiklmnpqrstvvtqpnnpqpnmljjhjklnnqrsrrqpponnnnnpsvyy", "sqqpprtutsqpruzCCzyxyyyyyxvrnkjhhijkkllkkkkklllllllmnnnnpnifddcaaacfijgfeddfgjlnnnprsssuvvsqnnnpqqnlkhhhjjklnoqrrrqppponnmnosvyv", "pnppstvvvvsqpsvzDECAzCCzyvsqnlkihhhjjkkllllllkkkkkllnnosrlgddddbaadfjifffffgjlnnnnnpssstvuspnnnpqqnljhhhjjjklnprsssrqppnnmnpsvvt", "nmnqtvxyyxurpqtwzCCCCBzyvtsqpnlkjhhhjklllllllkkjjjklnqsupkfddddbabdfihfffgiklnllllnnqrstutspnnnpppmjhhhjkkjjklorstssrponmlnptvuq", "mlnsvyzzzzvtrqstvyzzzyvttsssrpnlljjjkllnnnnnlllkjjllnsvsnhfddddbbdfhjhgfgilnnljhjklnopqstsrpnmmnnnljhhjkllkjjknrsttsrpnnllmptvtp", "llptyACDCzyvsqprtvvwvvussstttsrpnlllllmnnnnnnllkkjlnrvuqlhfddccbcdfikkjijkllljhghjlnnppqrrpnnlllmllkkkllllkhhjnqsuutrpnllklptvsn", "llquyCEGECzwurppssttttttstuvvvutsqpnnnnnnnnnnnnlllnqttrnkhfddcccdegjllllkjihhhhhhklnopnnoppnnnlllmnnnnnmllkhhilpstttrpnllklpturn", "lnsvzDGHGDzyvsqppqrssssstuvyzzzyvusrpnnlnnnnnnnnpqssspnligfedddddfgjllkihfffffghhklnnnnmnnnnnnnnnnppppnnllkhghknqttsqonkkklpttpn", "nquyzCFHHECyvtspppqqrrstuvyzCCCAzyvtrpnnnnnnpprstvurnlljihffeddddffhijhgffffffghjlmnnnnlllnoppqqrsssssqnnlkhghjlnrrrpnlkjkmrvsnn", "osvzACDFGECzvusqppppqrstvyzCEECCAzyvspnnnmnnpsvyvtqnlkjjhhgffffffffffgggfffeffhiklmnnnllllnqsttttuvvvuspnljhgfhjlnpponljjknsvqll", "pswzzzzCCCCzwusqppppqrstvyCEDCzzzzzvtqpnnnnpsvzzuqnllkkkjihgfffffffeffghhhgfffhjllmmmllllnpsuutsstuvvvtronljhffhklnnnlljjlnstnll", "ptvyyyyzzBzyvtsppppqqrstvzDECzzzzCzytrpnnnpswzyvrpnlkkllllkhgffffdddfghkkjhffgjklllllllllnrtssqppqstvvutrnlkhgffhjlllkjjklnsrlkl", "nstvvvvvyyyvusqoopqqrrstvzDDCzzzzCAyvsrppqsxAzurppqnllnopnljgffddddegiklljhghhkllllllkllnqtspnnnnnpqstttsqnlkhhgghjjjihjlnprpljk", "npsttttuvvvuspnnoprrrrstvzDDAzzzCCByvtsstvzCzurqrssnlnqrpnljgfddddefhklmljhhikllllkkkkllnqsqnnllllnnprssssqnlkhhghhhhghjlpsrnjhj", "lnnpqrssttsrpnnnpqrrqqrsvyCDCzzACDCzyvvvxCFzuqqsvvspnqtsnlkjhfdddeghjkllkhhhkllllkkjkklnnqrpnmlllllnnnoppqqpnlkjihhggghjlqtsnjij", "jjllnpprssqnnllnopqqppqstyADCzzzCEFDCCCzzzytrqsvwurpqtvsnlkjhddddfhjkkjhhhjllnnlkjjjjklnpqqnnlllkkkkllmnnnppponlkjhggfhjlrusnkih", "ihjjlmnpqponlllmnpppppprtwzDCAzzCDGGEFDBytspqsvvvsqrtwvrnllkhdddfhhjjihghilnnnllkjjjkklnqrqonllkkjjjkklllmnnnpponlkihghhlqtsnlki", "jihhiklnnnnlkkllnnnopoppsvzCCzzzzCDECCyusqqqsuvvsqqswyvrnnnkhedfhjjihgffhkmnnnlkjjjjklmnqsqpnlkjjjkkkjjkkllmnopqpnlkihhhlosspnlk", "llkhhhklnnlkjjklllmnpppqsvzCCzzyzzzzyvtqpqstuutsrqsvzzvsppnkhffghjihgffhklnnnlkjjjkkllnnqsspnljjjklllkjjkklllnnqsrnlkhhhknprqpnn", "pnlihghjllkjjjkkkklnnppqtxzCCzyyyyxvsrrqrsuvvsrpqrtyCAxtrrpkgfghjhhfffhjlnnmlkjhijkllnnnprspnkihklnnnlkjjjkkllnnqsqnljihjlnppqpq", "qpnkhgghjkjjijjkkkllnoqsuyCDCzyxvvusqqstvwvvtrppstvzCCzvtspkhghhihgghilnnnllkihhhjllnnnpqrrpnjhjlnnponnlkjkklllnorspnkjhijklnnpq", "npnliggghhhhhhjjjjklnpstvzCDCzyvvtsqqrtwyzvtrpqrtvxzCCBzxuplhggghgghjlnponlkhhgghjlnnoprsspnljijlnopppnlljjjlllnnqsrnlkhhhhjklnn", "lnnljhgfgggghhhjkklnortvyzDECzyvvsqqsvyzzyvsqqstvvxyzCCCyuplkhhghhjlnpqrpnljhgfghjlnpqrstsnlljjklnnpqqpnnkjjllnnnprrpnlihggghhjk", "jlnljhgffffffghjklnnrtvyzCCEECzvtrqrvyCDAyurqruvxxxxyzzzytpnljjhjjlnrsrrpnkhgfffhjlnpstutqnljijklnnpqrrqnlkjklnnpprsrnligfffffhh", "hjllkihffffeffhjlnprtvyzzzCDEEzvtrsuyCDDzvsrrtvyyyvvwxyxvtqnnlllnnqsssrrpnkhgfffhjlnqtvurpnkjijklmnoqssspnlkklnpqrstspljgffdfffg", "ghklkjhffdddffhknqtvvyzzzzzzCDCvsrtwCHGDytqqsvyzzyvvuuvvusrqqpqsttttssrrpnkhgfffhjlpsttspnlkjhhikllnpsttrpnkklnqsstutpljgfddddff", "fhjkkjhgffedffhlnsvvvyzzywwvyCCvsrvzEIFCxspquxzzzyvttssttststtuvyvusssttrnlhhfgghknqtspnnnllkhhhjjlmpsttspnkklortvvvtpnkhffdddff", "ffhjllkihffefgklnqsstyzyvttuvCDvqrwCHJDzvrprvzzzzyvtsqqqstvwwvvwwvutttuusoljhgghjlnrsqnllllllkihhhjlnrttspnkklprtyzytqnkhgffedff", "fffhjkkkihgffhklmnnpsvxvsrssvCDupryDGHCxtrrtxzzAzxvsrpppsuxywvuttsttuvvvurnljhhhklprpnmlllmnnnlhgghknqstronlklpsuyzyurnlkihgfffe", "dddfgijkjihgggijkklnsttsppqsuzCtpszEGEzusqsvyzAzyvusqnnpsuvvutsssstuvvwyvtqnkjjjknrrnmlkllnnppnkhfghlnqrpnlkllpsuyzyuspnllkjhgfd", "dbcddfghhhgffffgijlpsrpnnnpsvzztqszDCCxsqrtwzAzzyvtrpnopssrrqqqrsstvvvxyyvtpnkkklpsrnmlllnnqrspnjgfgjlnpnnlkllpsvyyxvtsqponnljgd", "caaabddfffffffffhkmoonlllnnsvzysqtyCzyvrprvyzAzzwusqpppqrpnnnnpqrstuvvwxyxvsqnnlnqsqnlllnprtuvtplgffhklnnllkklosuyywvuuvvutsnlhe", "ca##aacdddddddffhlnnlkjjllptyzvsrsvyxvtqqsvyzzzyvtsqqrrqomllmnoprstuvvvvvvvvtrppqsspnnnnpstvvvvsnhffghjklllkklnruyyxvvxyzywvsnjf", "daa#aaaababcddfhjllkhghhjlpvCzurprtvtsrpqsvyyyyvtsqqqstqmjjjklnpqsttuvvuuvvvvutttssqppqstttttvvsnjgfffghjkkjjknptyzzyyzzzyxxunjf", "edcbaaaaaaabddfikkhhgffgjlqyCztqpqsssqppstvwxyvusrqrsutplhhhklnoqssttuuuttttuvvvvutssstuutsrrstsqmjfedfghjkjkkmosxzzzzzyxvvyvnjf", "ffddcbaaa#aadfgijhgfffffinsyzxtqppqqqppqstuvvvvtsqqsuvsnjhhhjklnprsstttttsssttuvvvvusssssqpppprtsplhfdefghjjkklnsvyzzzyxvvxyvnjg", "hgfedcaa##aadfhhhffeeefgjntvvutssrqqqqqrsstuvvvtsrrtvupljijjjklnpqrsttttsrrqrrsuvyxvsponnnnnoppstrnkhffffhjkkklnqtvyyywvxyzzvnkh", "ihgfdda###abdghhffddddfhlpsssstttsssrqrrrssttuuttttutqnlkjjjjjklnprstttsrponpqsvyyvspnlllnnnnnoqstrnkgfeffhjkkklortvvvvvyCCCvoki", "jhhgfdb##.abehjhfdddddfilnopqsuvvvvussrqqrsstuvvvvvspnllllkjjjklnprstttsqnnnnpswzytqnmllllnnnnnnprsqmjhfffhjkkklnpstvvxyzEFCvplk", "kjjhfec#..#bfhhgeddddfgjlllnpsvyzzyvtsrqpprstuvyzzupmkkklllkjjklnprsttsqonnmnnsyCyspnmllllmnnnnnnoqspmjfffghjkkklnrtvwyzCEDzvqnl" }; miwm/EKeyValueParser.cc0100664000076400007640000000545607701251226014400 0ustar bwisebwise/** License: Public Domain Author: stephan@wanderinghorse.net */ //#include // for isspace() #include "EKeyValueParser.h" #include using namespace std; EKeyValueParser::charbool_map_type EKeyValueParser::commentChars; std::ostream & operator<<(ostream &os, const EKeyValueParser &obj) { os << obj.key(); os << std::string("="); // gcc3 bitches if this is a char *??? os <>( const EKeyValueParser &obj, std::istream &is ) // { // // E // // is.getline // // return obj.parse(; // return false; // } EKeyValueParser::EKeyValueParser() { EKeyValueParser::init(); } EKeyValueParser::EKeyValueParser( const string &ln ) { EKeyValueParser::init(); m_key = m_val = ""; parse( ln ); } bool EKeyValueParser::parse( const string &ln, const string & delim ) { m_line = ln; if( m_line.length() < 2 ) return false; commentIt = commentChars.find( ln[0] ); if( commentIt != commentChars.end() ) return false; m_key = ""; m_val = ""; string::size_type offset = m_line.find( delim ); if( offset == string::npos ) return false; m_key = m_line.substr( 0, offset ); m_val = m_line.substr( offset + delim.length() ); // strip leading/trailing spaces from m_key and m_val. // there must be a simpler (or at least more graceful) way... static const std::string space(" \t"); while( !m_key.empty() && m_key.find_last_of( space ) == (m_key.size()-1) ) { // trailing key whitespace m_key.erase( m_key.size()-1 ); } while( !m_key.empty() && (m_key.find_first_of( space ) == 0 ) ) { // leading key whitespace m_key.erase( 0, 1 ); } while( !m_val.empty() && (m_val.find_first_of( space ) == 0 ) ) { // leading val whitespace m_val.erase( 0, 1 ); } while( !m_val.empty() && m_val.find_last_of( space ) == (m_val.size()-1) ) { // trailing val whitespace m_val.erase( m_val.size()-1 ); } // Whew. Blessed indeed is Perl. //CERR << "m_key=["< 0; } void EKeyValueParser::init() { static bool inited = false; if( !inited && (inited=true) ) { commentChars[';'] = true; // classic config-file style commentChars['#'] = true; // bash-style commentChars['/'] = true; // assume '/' or '/*'. Honestly, though, it's this way only because it simplifies searching :/ EKeyValueParser::init(); } } miwm/EKeyValueParser.h0100664000076400007640000000755707701327371014253 0ustar bwisebwise#ifndef SGB_KEYVALUEPARSER_H #define SGB_KEYVALUEPARSER_H #include #include #include using namespace std; /** License: Public Domain Author: stephan@wanderinghorse.net */ // todo: move this stuff into the classes it belongs in and use STL naming conventions: // can't move it yet because other code uses it :/ (lame excuse: use perl!) typedef std::map strstr_map_type; typedef strstr_map_type::iterator strstr_map_iterator; typedef strstr_map_type::const_iterator StringStringConstIterator; typedef strstr_map_type::value_type StringStringPair; typedef std::map TrueMap; typedef TrueMap::iterator TrueMapIterator; typedef TrueMap::value_type TrueMapPair; typedef std::map StringBoolMap; typedef StringBoolMap::iterator StringBoolIterator; typedef StringBoolMap::value_type StringBoolPair; typedef std::list StringList; typedef StringList::iterator StringListIterator; /** EKeyValueParser is a class for parsing "key=value"-style lines, like those which would come from a configuration file. */ class EKeyValueParser { public: explicit EKeyValueParser( const string &line ); EKeyValueParser(); virtual ~EKeyValueParser() {}; // enters k.key()=k.value() into os. friend std::ostream & operator << (std::ostream &os, const EKeyValueParser &); /** Parses 'line' into a key/value pair. To be parseable the line must be in the form: key=value Extra whitespace around the '=' is removed, as are leading and trailing whitespace around the key and value. This behaviour is arguable but probably desireable in most cases (it is in all of mine, and i wrote the damned thing ;). todo: add a whitespace removal policy as optional 3rd argument? delimiter is the string which separates the key and value, so a line in the format: key{alternateDelimiter}value... (minus the braces) is parseable. That is: parse( "one;two",";" ) results in key() == "one" and value() == "two" This function returns false if it does not consider the line to be parseable. Use key() and value() to get the parsed values. Use line() to get the whole string passed to parse (as if you'd ever need it, though subclasses might). line() /is/ guaranteed to be set to line by this call, unlike key() and value(). If this function returns false, the values returned by key() and value() cannot be considered reliable (i.e., they are undefined). This function will return false if a line contains no key (like '=value'), but empty values are not an error (i.e., they will not cause this function to return false). */ bool parse( const string &line, const string & delimiter = "=" ); /** Returns the parsed-out key. Only valid if parse() returned true. */ inline const string & key() const { return this->m_key; }; /** Returns the parsed-out value (may be empty). Only valid if parse() returned true. */ inline const string & value() const {return this->m_val; }; /** Returns the last whole line passed to parse(). */ inline const string & line() const { return this->m_line;}; private: typedef std::map charbool_map_type; typedef charbool_map_type::iterator charbool_map_iterator; //typedef charbool_map_type::value_type CharBoolPair; static void init(); string m_key; string m_val; string m_line; static charbool_map_type commentChars; charbool_map_iterator commentIt; string::const_iterator strIt; }; #endif // SGB_KEYVALUEPARSER_H miwm/EPathFinder.cc0100664000076400007640000001460507702765666013541 0ustar bwisebwise/********************************************************************** ** Copyright (C) 2002 stephan beal (stephan@wanderinghorse.net). ** All rights reserved. ** ** This file may be distributed and/or modified under the terms of the ** See LICENSE file in this directory. version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** **********************************************************************/ #include "EPathFinder.h" #include #include ostream & operator<<(ostream &os, const EPathFinder &obj) { os << obj.getPathString(); return os; } string & operator<<(string &os, const EPathFinder &obj) { os += obj.getPathString(); return os; } EPathFinder & operator +=(EPathFinder &obj, const string &os) { obj.addPath( os ); return obj; } EPathFinder::EPathFinder( const string &p, const string &e, const string &pathsep ) { this->setPathSeparator( pathsep ); this->setPath( p ); this->setExtensions( e ); } const string & EPathFinder::getPathSeparator() const { return ((EPathFinder *)this)->pathseparator; } void EPathFinder::setPathSeparator( const string &sep ) { this->pathseparator = sep; } string EPathFinder::getPathString() const { return this->paths.toString( this->pathseparator ); } const EStringList & EPathFinder::getPath() { return this->paths; } string EPathFinder::getExtensionsString() const { return this->exts.toString( this->pathseparator ); } const EStringList & EPathFinder::getExtensions() { return this->exts; } int EPathFinder::setPath( const string &p ) { return this->setPath( EStringList::split( p, this->pathseparator ) ); } int EPathFinder::setPath( const EStringList &p ) { this->paths = p; return this->paths.count(); } void EPathFinder::addPath( const string &p ) { //if( p.empty() ) return; this->paths += p; //CERR << "addPath( " << p << " ); path="<paths.toString(":")<pathseparator ); return this->setExtensions( newp ); } int EPathFinder::setExtensions( const EStringList &e ) { this->exts = e; //CERR << "setExtensions( " << this->exts << " );"<exts.count(); } void EPathFinder::addExtension( const string &p ) { this->exts += p; //CERR << "addExtension( " << p << " ); extensions="<exts<hitcache[resource] = checkat; return checkat; } //LIBE_VERBOSE << "find( " << resource << " )" << endl; checkat = this->hitcache[resource]; if( checkat == NOT_FOUND ) return string(); if( ! checkat.empty() ) return checkat; CHECKPATH(resource); EStringList::const_iterator piter = this->paths.begin(); EStringList::const_iterator eiter = this->exts.begin(); string path; string ext; if( EPathFinder::isAccessible( resource ) ) return resource; piter = this->paths.begin(); string checkhere; while( piter != this->paths.end() ) { path = (*piter); if( ! path.empty() ) { path += EPathFinder::getDirectorySeparator(); } ++piter; checkhere = path + resource; //LIBE_VERBOSE << "find( " << resource << " ) checking " << checkhere << endl; CHECKPATH( checkhere ); eiter = this->exts.begin(); while( eiter != this->exts.end() ) { ext = (*eiter); ++eiter; checkhere = path + resource + ext; //LIBE_VERBOSE << "find( " << resource << " ) checking " << checkhere << endl; CHECKPATH( checkhere ); } } //LIBE_VERBOSE << "find( "<hitcache[resource] = NOT_FOUND; return string(); } miwm/EPathFinder.h0100664000076400007640000001010407702765666013371 0ustar bwisebwise// EPathFinder.h #ifndef PATHFINDER_H #define PATHFINDER_H /********************************************************************** ** Author: stephan beal (stephan@wanderinghorse.net). ** License: See LICENSE file in this directory. ** **********************************************************************/ #include #include #include #include "EStringList.h" using namespace std; // todo: explicitely std:: all members. class EPathFinder { public: /* operator << adds this object's path to os. */ friend ostream & operator << (ostream &os, const EPathFinder &); friend string & operator << (string &os, const EPathFinder &); /* Add p to this object's path. */ friend EPathFinder & operator += (EPathFinder &list, const string &p); /** Creates object with the given path/extension list and path separator. */ EPathFinder( const string &path = string(), const string &ext = string(), const string &pathsep = ":" ); virtual ~EPathFinder() {}; /** Returns a getPathSeparator()-separated string of all paths added via add/setPath(). This /should/ be static, i think, but it's not, for reasons i'm not yet certain about. */ string getPathString() const; const EStringList &getPath(); void setPathSeparator( const string &sep ); const string &getPathSeparator() const; /** Sets the path to p, which should be a ":"-delimited string. Returns the number of path elements parsed from p. */ virtual int setPath( const string &p ); virtual int setPath( const EStringList &p ); /** Adds p to our path. May be ":"-delimited */ virtual void addPath( const string &p ); /** Adds a "search extension." Sample: finder.addExtension( ".txt:README" ); Will now try all path combinations with the rightmost characters matching ext. Be sure to include a period if you want that searched (that is so this class can be used to find non-files or files without traditional-style extensions). */ virtual void addExtension( const string &ext = string() ); /** like addExtension(), but overwrites extension list. */ virtual int setExtensions( const string &ext ); virtual int setExtensions( const EStringList &p ); /** Returns the getPathSeparator()-delimited listed of file suffixes to use when searching for a path. */ string getExtensionsString() const; const EStringList &getExtensions(); static bool isAccessible( const string &path ); /** Returns the "base name" of the given string: any part following the final directory separator character. */ static std::string basename( const std::string & ); static string getDirectorySeparator() { return string("/"); } /** Returns the full path of the given resource, provided it could be found in all paths or with all extensions added and provided it is readable. Note that this might return a relative path, especially if the resourcename passed to it immediately resolves to an existing resource. It returns an empty string if the resourcename cannot be found in the filesystem tree (or is otherwise unaccessible). */ string find( const string &resourcename ) const; private: EStringList paths; EStringList exts; string pathseparator; typedef std::map StringStringMap; typedef StringStringMap::iterator StringStringIterator; mutable StringStringMap hitcache; }; #include class BinPathFinder : public EPathFinder { public: BinPathFinder() : EPathFinder( getenv( "PATH" ) ) {}; virtual ~BinPathFinder(){}; }; #endif // PATHFINDER_H miwm/EPropertyList.cc0100664000076400007640000002347007701251254014153 0ustar bwisebwise/** author: stephan@wanderinghorse.net based on code by Rusty Ballinger (bozo@users.sourceforge.net) license: GPL */ #include "EPropertyList.h" #include #include #include #include #include "EKeyValueParser.h" #include "EStringTokenizer.h" EPropertyList::TrueMap EPropertyList::trues; EPropertyList::CharBoolMap EPropertyList::commentChars; #define NUMBER_BUFFER_SIZE 128 #define INIT_NUMBER_BUFFER if( ! this->number_buffer ) {this->number_buffer = (char *)malloc( NUMBER_BUFFER_SIZE );} #define FREE_NUMBER_BUFFER if( this->number_buffer ) free( this->number_buffer ); ostream & operator<<(ostream &os, const EPropertyList &obj) { os << obj.toString(); return os; } std::string & operator<<(std::string &os, const EPropertyList &obj) { os += obj.toString(); return os; } std::string EPropertyList::operator[] ( const string & key ) const { return this->getString( key ); } EPropertyList::EPropertyList( const std::string &name ) { init( name ); return ; } EPropertyList::~EPropertyList() { if( this->saveAtDestruction() ) { this->save(); } FREE_NUMBER_BUFFER; } void EPropertyList::init( std::string fn ) { this->number_buffer = 0; this->name = fn; this->m_saveAtDtor = false; static bool inited = false; if( !inited && ( inited = true) ) { trues["true"] = true; trues["TRUE"] = true; trues["True"] = true; trues["yes"] = true; trues["YES"] = true; trues["Yes"] = true; trues["y"] = true; trues["Y"] = true; trues["t"] = true; trues["T"] = true; trues["1"] = true; // Don't set false values in 'trues'. We will check for true based on whether // trues.find() finds something, not it's actually value. I do this because // I remember the problems Rusty had in doing something similar in his ConfigFile // object, and I don't wanna have to repeat his workaround. commentChars[';'] = true; commentChars['#'] = true; } } const std::string & EPropertyList::getName() const { return this->name; } void EPropertyList::setName( const std::string &name ) { this->name = name; } bool EPropertyList::load( std::string fn, bool blanksToFalse ) { if( fn.empty() ) { if( name.empty() ) return false; else fn = name; } else { name = fn; } //CERR << "loading [" << name << "]" << endl; ifstream ifs( name.c_str() ); if( !ifs ) return false; bool b = this->load( ifs, blanksToFalse ); ifs.close(); return b; } bool EPropertyList::load( std::istream &istr, bool blanksToFalse ) { std::string key; std::string val; std::string str; EKeyValueParser kvp; bool parsed = false; static int buffsize = 4 * 1024; char *buffer = (char *) malloc( buffsize ); while( !istr.eof() ) { istr.getline( buffer, buffsize, '\n' ); str = string(buffer); commentIt = commentChars.find( str[0] ); if( commentIt != commentChars.end() ) { order.push_back( str ); // add comment line to our list continue; } // todo: add support for \-terminated multi-lines. parsed = kvp.parse( str ); if( ! parsed ) continue; key = kvp.key(); val = kvp.value(); if( val.empty() < 1 && blanksToFalse ) set( std::string(key), std::string("false") ); else set( key, val ); } free( buffer ); return true; } int EPropertyList::count() const { int c = 0; EPropertyList::const_iterator beg = this->begin(); EPropertyList::const_iterator theend = this->end(); while( beg != theend ) { ++c; ++beg; } return c; } bool EPropertyList::save( std::string fn ) { if( fn.length() > 0 ) { name = fn; } if( name.length() == 0 ) return false; //LIBE_DEBUG << "EPropertyList::save(" << fn << ")" << endl; // todo: add optional support for the zip stream? ofstream of( name.c_str() ); if( !of ) return false; of << toString() << endl; of.close(); return true; } void EPropertyList::set( const std::string &key, bool val ) { setBool( key, val ); } void EPropertyList::setBool( const std::string &key, bool val ) { std::string s = val ? (const char *)"true" : (const char *)"false"; set( key, s ); return; } bool EPropertyList::getBool( const std::string &key, bool defaultVal ) const { std::string s = this->getString( key, defaultVal?"true":"false" ); return EPropertyList::boolVal( s ); } // static bool EPropertyList::boolVal( const std::string &key ) { static bool inited = false; if( !inited && (inited=true) ) { EPropertyList foo; // initialize trues map. lame, eh? } TrueMap::const_iterator ti = trues.find( key ); return ( ! (ti == trues.end()) ); } int EPropertyList::getInt( const std::string &key, int defaultVal ) const { INIT_NUMBER_BUFFER; sprintf( this->number_buffer, "%d", defaultVal ); std::string s = getString( key, std::string(this->number_buffer) ); return atoi( s.c_str() ); } void EPropertyList::set( const std::string &key, int val ) { setInt( key, val ); } void EPropertyList::setInt( const std::string &key, int val ) { INIT_NUMBER_BUFFER; sprintf( this->number_buffer, "%d", val ); set( key, std::string(this->number_buffer) ); return; } std::string EPropertyList::getString( const std::string &key, const std::string &defaultVal ) const { // DO NOT call LIBE_{DEBUG,VERBOSE} from here! EPropertyList::const_iterator citer = map.find( key ); if(citer != map.end()) return (*citer).second; return defaultVal; } void EPropertyList::set( const std::string &key, std::string val ) { setString( key, val ); } void EPropertyList::setString( const std::string &key, std::string val ) { if( key.length() < 1 ) return; bool b = isSet( key ); map[key] = val; if( !b ) order.push_back( key ); return; } double EPropertyList::getDouble( const std::string &key, double defaultVal ) const { INIT_NUMBER_BUFFER; sprintf( this->number_buffer, "%f", defaultVal ); std::string s = getString( key, std::string(this->number_buffer) ); double d = strtod( s.c_str(), NULL ); return d; } void EPropertyList::set( const std::string &key, double val ) { setDouble( key, val ); } void EPropertyList::setDouble( const std::string &key, double val ) { INIT_NUMBER_BUFFER; sprintf( this->number_buffer, "%f", val ); set( key, std::string(this->number_buffer) ); return; } bool EPropertyList::isSet( const std::string &key ) const { EPropertyList::iterator iter; iter = ((EPropertyList *)this)->map.find( key ); return( iter == map.end() ? false : true ); } bool EPropertyList::unset( const std::string &key ) { EPropertyList::iterator iter; iter = map.find( key ); if( iter == map.end() ) return false; map.erase( iter ); string_list::iterator oit = this->order.begin(); string_list::iterator oend = this->order.end(); while( oit != oend ) { if( (*oit) != key ) { ++oit; continue; } this->order.erase( oit ); break; } return true; } bool EPropertyList::clear() { if( map.empty() ) return false; map.erase( map.begin(),map.end() ); return true; } EPropertyList::StringStringMap & EPropertyList::getMap() { return map; } EPropertyList::iterator EPropertyList::begin() { return this->map.begin(); } EPropertyList::const_iterator EPropertyList::begin() const { return this->map.begin(); } EPropertyList::iterator EPropertyList::end() { return this->map.end(); } EPropertyList::const_iterator EPropertyList::end() const { return this->map.end(); } EPropertyList::iterator EPropertyList::find( const std::string &key ) { return map.find( key ); } bool EPropertyList::setIfNot( const std::string &key, bool val ) { bool isset = isSet( key ); if( !isset ) set( key, val ); return !isset; } bool EPropertyList::setIfNot( const std::string &key, int val ) { bool isset = isSet( key ); if( !isset ) set( key, val ); return !isset; } bool EPropertyList::setIfNot( const std::string &key, std::string val ) { bool isset = isSet( key ); if( !isset ) set( key, val ); return !isset; } bool EPropertyList::setIfNot( const std::string &key, double val ) { bool isset = isSet( key ); if( !isset ) set( key, val ); return !isset; } int EPropertyList::merge( EPropertyList &src, EPropertyList &dest ) { if( &src == &dest || src.count() == 0 ) { //CERR << "merge() source and destinaion EPropertyList objects are the same! Ignoring!" << endl; return -1; } // todo: add += operator which works the same. EPropertyList::iterator iter = src.begin(); std::string key; std::string val; int count = 0; while( iter != src.end() ) { ++count; key = (*iter).first; dest.setString( key, src.getString( key, (*iter).second ) ); ++iter; } return count; } std::string EPropertyList::toString() const { string_list &theorder = ((EPropertyList *)this)->order; // got that? StringStringMap &themap = ((EPropertyList *)this)->map; // i can justify the above casts because we're not manipulating any useful structure, // even though we are adjusting cursors and such. std::string str; EPropertyList::iterator iter; iter = ((EPropertyList *)this)->map.begin(); std::string key; std::string pre; string_list::const_iterator orderIt; orderIt = theorder.begin(); while( orderIt != theorder.end() ) { //CERR << "EPropertyList::toString(): " << (*orderIt) << endl; iter = themap.find( (*orderIt) ); if( iter != themap.end() ) { str += (*iter).first; str += "="; str += this->getString( (*iter).first, (*iter).second ); } else { str += (*orderIt); } str += '\n'; ++orderIt; } return str; } miwm/EPropertyList.h0100664000076400007640000002223607701107210014004 0ustar bwisebwise#ifndef LIBE_PROPERTYLIST_H #define LIBE_PROPERTYLIST_H /** author: stephan@wanderinghorse.net based on code by Rusty Ballinger (bozo@users.sourceforge.net) license: GPL EPropertyList is a class for holding arbitrary key/value pairs of numeric/string data. In includes save/load support. */ #include #include "EKeyValueParser.h" /** License: Public Domain Author: stephan TODO: move many of the EKeyValueParser typedefs into this class and rename them to be consistent with the STL. */ class EPropertyList { public: typedef std::map StringStringMap; typedef StringStringMap::iterator iterator; typedef StringStringMap::const_iterator const_iterator; typedef StringStringMap::value_type StringStringPair; // typedef std::map StringBoolMap; // typedef StringBoolMap::iterator StringBoolIterator; // typedef StringBoolMap::value_type StringBoolPair; typedef std::list string_list; /** adds pl.toString() to os. */ friend std::ostream & operator << (std::ostream &os, const EPropertyList &); /** adds pl.toString() to os. */ friend std::string & operator << (std::string &os, const EPropertyList &pl ); /** std::string propval = props["bar"] is functionally identical to getString("bar"). */ std::string operator[] ( const std::string & key ) const; /** Name may be a filename, though load() is not called automatically. */ EPropertyList( const std::string &name = "" ); virtual ~EPropertyList(); /** Name is currently used as a filename, though it may have other uses. */ void setName( const std::string &name ); const std::string & getName() const; /** Returns the number of items in our map. */ int count() const; /** * Returns the value for key, or defaultVal if the key is not set. * Note to subclassers: * This is the "master" getter, so subclasses which want to generically * alter getXXX() behaviour need only override this function. * If you override this, DO NOT use the like LIBE_{DEBUG,VERBOSE} macros * from within this function, or from any other getXXX() from this object; * doing so may cause an endless loop. Additionally, all other getXXX() * functions call this one, so do not call them from inside this function. */ virtual std::string getString( const std::string &key, const std::string &defaultVal = std::string() ) const; /** * Sets key to val. Warning: when calling this, you should * pass a std::string(), and not rely on casting from a char *, for val. * Calling it like: set( "foo", "bar" ) is likely to call the boolean * version! To work around this call set( "foo", std::string("bar") ) * or setString( "foo", "bar" ). */ virtual void set( const std::string &key, std::string val ); virtual void setString( const std::string &key, std::string val ); // use if you get type casting problems. /** * Sets key to val IF the key is not already set, else it does nothing. * Returns true if it does set the value, else false. * Use this to supply default values for not-already-set items, without having to * check if they're set. */ virtual bool setIfNot( const std::string &key, std::string val ); virtual void set( const std::string &key, bool val ); virtual void setBool( const std::string &key, bool val ); // use if you get type casting problems. virtual bool getBool( const std::string &key, bool defaultVal ) const; virtual bool setIfNot( const std::string &key, bool val ); virtual int getInt( const std::string &key, int defaultVal ) const; virtual void set( const std::string &key, int val ); virtual void setInt( const std::string &key, int val ); // use if you get type casting problems. virtual bool setIfNot( const std::string &key, int val ); virtual double getDouble( const std::string &key, double defaultVal ) const; virtual void set( const std::string &key, double val ); virtual void setDouble( const std::string &key, double val ); // use if you get type casting problems. virtual bool setIfNot( const std::string &key, double val ); virtual bool isSet( const std::string &key ) const; virtual bool unset( const std::string &key ); virtual bool clear(); /** * Returns the bool value of the passed string. * The following string values are considered equal to true: true, TRUE, True, t, T yes, YES, Yes, y, Y 1 * Anything else evaluates to false. * CASE IS IMPORTANT! (Sorry, when I learn how to easily lowercase a c++ string * I'll fix all that.) */ static bool boolVal( const std::string &key ); /** * Returns the first item in the data map. * You can use this to iterate: * EPropertyList::iterator it = props.begin(); * while( it != props.end() ) { ... ++it; } */ EPropertyList::iterator begin(); EPropertyList::const_iterator begin() const; /** * The after-the-end iterator for the data map. */ EPropertyList::iterator end(); EPropertyList::const_iterator end() const; /** * Returns end() if the key is not in our map, otherise it returns * that iterator. Use the iterator's .first member to get the key, * and .second to get the value. However, you SHOULD call getString( (*iter) ) * to get the value, so subclasses can do some funniness with the key, * like ESimpleCLParser does: * std::string val; * iter = foo.find( "key" ); * if( iter == foo.end() ) { return val; } * return val = foo.getString( (*iter) ); * This helps guaranty similar behaviour across subclasses. * * todo: make this the master getter, instead of getString(), for purposes * of overriding getXXX() behaviour? */ virtual EPropertyList::iterator find( const std::string &key ); /** merge() copies all properties from src to dest. It returns the number of properties copied, or -1 on a massive error (e.g., if src/dest point to the same object). */ static int merge( EPropertyList &src, EPropertyList &dest ); /** * If filename is empty, the filename from the constructor or setName() is used. * If both are empty, false is returned. * Returns false on error, otherwise true. * Note that input lines like: * key= * Are not considered valid, and will not be set!!! * if blanksToFalse == true, then these keys will be saved as boolean falses. * todo: make a form of load() which takes an istream. */ virtual bool load( std::string filename = "", bool blanksToFalse=false ); /** identical to load( string, bool ) except that reads from an input stream. Note that it does not open() nor close() the stream! */ virtual bool load( std::istream &in, bool blanksToFalse=false ); /** * If filename is empty, the filename from the constructor or setName() is used. * If both are empty, false is returned. * Returns false on error, otherwise true. * todo: make a version of save() which takes an ostream. */ virtual bool save( std::string filename = "" ); /** * Writes out a string containing the contents of this object and returns it. */ virtual std::string toString() const; /** Returns the list of keys, ordered in their insertion order. */ const EPropertyList::string_list & orderedKeys() const { return this->order; }; /** If saveAtDestruction() returns true and this object's filename has been set then this object will try to save itself to that filename in it's destructor. */ bool saveAtDestruction() const { return this->m_saveAtDtor; }; void saveAtDestruction( bool b ) { this->m_saveAtDtor = b; }; protected: /** * Returns the internally-used StringStringMap (see the typedefs, above). */ StringStringMap & getMap(); private: typedef std::map CharBoolMap; typedef CharBoolMap::value_type CharBoolPair; typedef std::map TrueMap; void init(std::string fn); std::string filename; StringStringMap map; CharBoolMap::iterator commentIt; mutable string_list order; std::string name; static TrueMap trues; static CharBoolMap commentChars; mutable char * number_buffer; bool m_saveAtDtor; }; #endif // LIBE_PROPERTYLIST_H miwm/EShellProcess.cc0100664000076400007640000001041207701336451014074 0ustar bwisebwise#include // popen() #include // system() #include // pid_t #include // pid_t #include // fork() #include "EShellProcess.h" #include "EStringList.h" #include // signal(), sighandler_t #include // longjmp() using std::string; using std::endl; sigjmp_buf EShellProcess_ctrl_c_jmp_buffer; void EShellProcess_SIGINT(int) { std::cout << "^C" << std::endl; // this really shouldn't be here, but i find it useful. ::siglongjmp( EShellProcess_ctrl_c_jmp_buffer, 1 ); } int EShellProcess::system( const std::string &cmdline, std::ostream & os ) { return ::system( cmdline.c_str() ) / 256; // i don't like this /256. it's against the docs, but the return values aren't what the docs say :/ } int EShellProcess::fork( const std::string &cmdline, std::ostream & os ) { // my very first fork()/exec() pid_t pid; EStringList tokens = EStringList::tokenize( cmdline ); pid = ::fork(); if( pid == -1 ) { os << "EShellProcess::fork("< 0 ) return 0; // parent, go away. // child... // i hate to do this array stuff, but i see no other // way around it without finding a template class for // dynamic arrays, and i'm not up for that right now... static const int maxargs = 100; char * args[maxargs]; int tcount = tokens.count(); int i = 0; string tok; string filearg; for( ; i < tcount; i++ ) { tok = tokens.shift(); if( i == 0 ) filearg = tok; if( tok.empty() ) continue; //os << "adding token ["<( tok.c_str() ); // this ^^^^^^^^^^^ const_cast is theoretically okay // because we're not gonna de-allocate the // array and this process will never pass // control back to anyone else, so tokens // shouldn't be unduly molested behind our // back. i won't swear that it's safe, though :/. } if( i == maxargs ) { os << __FILE__<<":"<<__LINE__<<": EShellProcess::fork(): you've met or overstepped the\n" << "hard-coded limit of "<< maxargs<<" arguments.\n" <<"Please contact the maintainer of this code with an example of how you're using it (stephan@wanderinghorse.net), " << "or fix this bug and send him your fix :)." << endl; } for( ; i < maxargs; i++ ) { args[i] = NULL; } execvp( filearg.c_str(), args ); _exit(0); return 0; } int EShellProcess::pipe( const std::string &cmdline, std::ostream & os ) { if( cmdline.empty() ) { os << "EShellProcess::pipe(): cannot run an empty command :("; return 1; } FILE *fp = 0; fp = ::popen( cmdline.c_str(), "r" ); if( ! fp ) { os << "EShellProcess::pipe(): popen("< #include using std::string; /** License: See LICENSE file in this directory. Author: stephan@wanderinghorse.net */ class EShellProcess { public: /** For running shell processes. Note that the functions DO NOT follow the conventions set forth by EArgsProcessor: they do not treat argument 0 specially. */ EShellProcess(){}; ~EShellProcess() {}; /** Runs the given command line using popen() and returns 0 on success, or non-zero on failure. All output generated by the process (to stdout or stderr) will be sent, character by character, to the given outstream. */ int pipe( const std::string &, std::ostream & os ); /** calls fork()/exec(). Largely untested. A serious limitation: input string may have no more than some arbitrary number of tokens (as counted by EStdStringTokenizer::tokenize()). */ int fork( const std::string &, std::ostream & os ); /** calls ::system(). Note that os is ignored, but provided for API compatibility. It may be used in some way in the future. */ int system( const std::string &, std::ostream & os = std::cout ); private: EShellProcess( const EShellProcess & ); EShellProcess & operator=( const EShellProcess & ); void init(){}; }; #endif // ESHELLPROCESS_H_INCLUDED miwm/ESimpleCLParser.cc0100664000076400007640000001227007703047707014324 0ustar bwisebwise// Copyright (C) 2002, stephan@wanderinghorse.net // Released under the GNU Lesser General Public License #include #include #include "EStringTokenizer.h" #include "ESimpleCLParser.h" ESimpleCLParser::ESimpleCLParser ():EPropertyList () { } ESimpleCLParser::ESimpleCLParser (int argc, char *argv[], int startAt): EPropertyList () { setArgs (argc, argv, startAt); } ESimpleCLParser::~ESimpleCLParser () { } bool ESimpleCLParser::isHelpSet() { return this->isSet( "help" ) || this->isSet( "-?" ) ; } void ESimpleCLParser::setHelp (const std::string & key, const std::string & text) { this->helpmap.setString (key, text); } const std::string ESimpleCLParser::getHelp (const std::string & key) const { std::string help = helpmap.getString (key); return help; } std::string ESimpleCLParser::getString (const std::string & key, const std::string & defaultVal) const { // DO NOT call LIBE_{DEBUG,VERBOSE} from here! std::string check = EPropertyList::getString (key, defaultVal); if (check != defaultVal) return check; if (key.find ("-") != 0) // non-dashed argument { // now try -key, --key check = key; std::string foo; for (int i = 0; i < 2; i++) { check.insert (check.begin (), '-'); foo = EPropertyList::getString (check, defaultVal); //CERR << "dash test: " << check << " = " << foo << endl; if (foo != defaultVal) return foo; } } return defaultVal; } int ESimpleCLParser::setArgs (int argc, char *argv[], int startAt, const char *argpre) { using namespace std; if (startAt >= argc) return -1; if (!argv[startAt]) return -1; std::string argprefix = argpre ? argpre : "-"; int acount = 0; std::string v; std::string a; EKeyValueParser kvp; std::string nextarg; string numbers = "0123456789"; bool skipnext = false; for (int i = startAt; i < argc; i++) { if (skipnext) { skipnext = false; continue; } a = std::string ((const char *) argv[i]); //CERR << "arg="<set (a, v); //CERR << "["<setArgs (count, cargs, 0, 0) : 0; for (int i = 0; i < count; i++) free (cargs[i]); return ret; } const std::string ESimpleCLParser::dumpHelp (bool scv /* show current values? */ ) const { EPropertyList::const_iterator iter = this->helpmap.begin (); std::string outs; std::string key, val, realkey; // outs += "==========Format:\noption_name:"; // if( scv ) outs += " [current value]"; // outs += "\n\thelp text for option.\n==========\n"; while (iter != this->helpmap.end ()) { key = (*iter).first; outs += key; outs += ':'; if (scv) { val = this->getString (key); // handles dashes if (!val.empty ()) { outs += " ["; outs += val; outs += "]"; } } outs += "\n\t"; outs += this->getHelp (key); outs += '\n'; ++iter; } outs += "\nAll arguments must start with either - or --, like -help or --help, when passed in from the command line."; return outs; } miwm/ESimpleCLParser.h0100664000076400007640000002354207703047707014172 0ustar bwisebwise#ifndef SIMPLECLPARSER_H #define SIMPLECLPARSER_H #include "EPropertyList.h" /** Copyright (C) 2002, stephan@wanderinghorse.net Released under the GNU Lesser General Public License ESimpleCLParser is an object for handling command line options. Use it like this: #include #include "ESimpleCLParser.h" ESimpleCLParser opts; #define VERBOSE if( opts.getBool( "verbose", false ) ) cerr int main( int argc, char **argv ) { opts.setArgs( argc, argv ); opts.set( "dosomething", ! opts.getBool( "donothing", false ) ); if( ! opts.getBool( "dosomething", true ) ) { exit( 0 )); } int myint = opts.getInt( "width" ); double myangle = opts.getDouble( "angle", 0.0 ); VERBOSE << "This is a verbose message." << endl; return opts.getInt( "errorcode", 0 ); } (that code's just off the top of my head - it may not compile as-is.) See the EPropertyList object's API for a full list of accessor functions. Supported command-line formats: -foo bar [that is, -foo == "bar"] is the same as: [--foo bar] [-foo=bar] [--foo=bar] -foo -bar false [-foo == true, -bar == false] -foo -bar=false [same] --double-dashed "some string value" --double-dashed="some string value" [same as previous line] Whether you use single or double dashes is irrelevant, but you must call getXXX() with the same key as was actually passed on the command-line, like so: int width = opts.getInt( "-width", opts.getInt( "--width", 42 ) ); will check for -width first, then --width, defaulting to 42. Alternately, if you use this form: opts.getString( "foo" ); // WITHOUT a dash the following options are searched: a) foo b) -foo c) --foo so the above call may actually result in getting the value from -foo or --foo. This is a potential logic problem if your application uses two semantically-different arguments like -force and --force. In this case a call to getXXX( "force" ) would find -force and not --force. Use getXXX( "-force" ) or getXXX("--force") to avoid this ambiguity. The dashed versions of an argument are only sought after if getXXX() is called without a dash before the key. A note to Qt users: call setArgs() on this object before calling QApplication a(argc, argv ), or QApplication will steal any argument called -name (and possibly others), removing it from argv. i.e., if you do not call setArgs() on this object first, QApplication may steal arguments so you'll never see them. Been there, done that. Known Bugs and/or gotchyas: Negative numbers: --boolflag -123=something will be parsed as: [--boolflag == true] [-123=something] Search the .cpp file for 'negative' and you'll find where this bug lives. Since numeric arguments are so rare this is not such a big deal, i think. i can think of only a few real-world examples which use args like -1: ssh, [GNU] xargs, lpr, ... Along those same lines: --bool -234 --foobar will be parsed as: [--bool == -234] [--foobar == true] Which i consider to be correct. If you want to set --bool to a negative number use: --bool=-123 i hate the inconsistency this adds, though. :/ */ class ESimpleCLParser : public EPropertyList { public: ESimpleCLParser(); ESimpleCLParser( int argc, char *argv[], int startAt=1 ); virtual ~ESimpleCLParser(); /** get/setHelp() text for a given key. */ virtual void setHelp( const std::string &key, const std::string &text ); virtual const std::string getHelp( const std::string &key ) const; /** getString() is overridden to add a special case to all getXXX() calls made via the EPropertyList API: if a getXXX key ) function is called with a key which does not start with a dash (-) character and they key cannot be found in our list then -key and --key will be tried. This means that, assuming the above sample code is in place, the following would work: ~/ > myapp --foo=17.34 ... double d = opts.getDouble( "foo", 0.0 ); // d == 17.34 As will this: opts.set( "--mykey", "myvalue" ); ... cerr << "mykey="<< opts.getString( "mykey" ) << endl; Note, however, that command-line arguments passed without a leading dash are not treated as arguments, and will not be inside this object if the command-line arguments are passed in via setArgs(). Additionally, it is important to note that if key is passed in with a leading "-" then the additional "dash checking" is NOT done. That is, if you call: opts.getString( "-d", 0.0 ); then ONLY the entry -d will match, and not --d. */ virtual std::string getString( const std::string &key, const std::string & defaultVal = std::string() ) const; /** * Makes a half-hearted attempt to parse out any args (begining with "-"). * Any args without values passed after them are assigned the value true. * Sample valid command lines: * * foo --a --b foo --c bar --f * (--a and --f == true, --b == "foo" and --c == "bar") * foo --a eat --b this --c "you lazy bum" * (--a==eat, --b==this, --c=="you lazy bum") * foo --a=b --c d * (--a == b, --c == d) * * These are identical for purposes of getXXX( "c" ): * [... -c=-1.0 ...] [... -c -1.0 ...] [... --c 1.0 ...] [... --c=1.0 ...] * * * To get the values, call the EPropertyList API functions like: * int foo = parser.getInt( "--i" ); // getInt("i") now works for -i or --i :) * bool bar = parser.getBool( "--b" ); // or getBool( "b") for -b or --b * 'startat' says which element in argv[] to start with. This defaults to 1 because it * is assumed that this will be passed from main(), and we don't need the application's * name (argv[0]) in the args list (if it doesn't start with a dash it wouldn't * be treated as an argument, anyway). * If argpre = 0 then it uses the default argument prefix (defaults to "-"). * If it is >0 then that is used as a char * prefix * for all arguments. * * Note that the values are added to this object (or overwrite existing entries), and the list * is not cleared by this function. */ virtual int setArgs( int argc, char *argv[], int startAt=0,const char *argpre = "-" ); /** * Similar to parse( int... ) except that this one reads a whole line of options, parses that into * an array, then passes it to parse(...). Note that this _may_ (but should not, ideally) behave slightly * differently from arguments passed to the other form, which typically come in as command-line args * (parsed by your shell). This functions uses a EStringTokenizer to do it's parsing, so * any differences in behaviour should be resolved there. i am not aware of any differences. */ virtual int setArgs( std::string args, std::string separators = " " ); /** Creates a "usage"-like string for this object containing all keys for which setHelp() has been called. If showcurrentvals is true then the current values are also added to th string, otherwise they are left out. Note that the order of the dumped help text/keys is currently undefined, but appears to be alphabetic (this is certainly C++-lib-dependent, though.) TODO: maintain the order of args, using the order from setHelp(). Sample: in main() do: ESimpleCLParser args; args.setArgs( argc, argv ); if( args.getBool( "help", args.getBool( "?", false ) ) ) { // triggers on --help, -help, -? or --? cerr << args.dumpHelp(); exit( 0 ); } Note regarding ELib::libArgs(): By default the object returned by ELib::libArgs() might have some help for elib options like e-debug and e-verbose. To remove them simply setHelp( "e-verbose", "" ) before calling this function. */ virtual const std::string dumpHelp( bool showcurrentvals = true ) const; /** Returns true if any of the following are set to any value: -help, --help, -?, --? */ virtual bool isHelpSet(); private: EPropertyList helpmap; }; #endif // SIMPLECLPARSER_H miwm/EStdStringTokenizer.cc0100664000076400007640000000646107701026325015307 0ustar bwisebwise #include "EStdStringTokenizer.h" //#include // only for debuggering enum quoteEnum { NO_QUOTE=0, SINGLE_QUOTE, DOUBLE_QUOTE }; /** todo: implement a map to count opening/closing quotes so i can add support for open/close { } without having to add to the enum, add if(), etc. map['\''] = 0. increment on an opener, decrement on a closer. */ EStdStringTokenizer::EStdStringTokenizer() { } void EStdStringTokenizer::tokenize( const string &str, const string & sep ) { const string::size_type ssize = str.size(); if ( ssize == 0 ) return; if ( ssize == 1 ) { this->m_list.push( str ); // += str; return; } if( string::npos == str.find_first_of( sep ) ) { this->m_list.push( str ); // += str; return; } int quoted = NO_QUOTE; char chat; string mystr; bool addit; for( string::size_type pos = 0; (pos < ssize); pos++ ) { chat = str[pos]; addit = true; if ( (chat == '\"' ) && !quoted) { quoted = DOUBLE_QUOTE; addit = false; } else if ( ( chat == '\'') && !quoted) { quoted = SINGLE_QUOTE; addit = false; } else if ( ( (chat == '\"') && (quoted == DOUBLE_QUOTE) ) || ( (chat == '\'') && (quoted == SINGLE_QUOTE) ) ) { quoted = NO_QUOTE; addit = false; } if ( !quoted ) { for( string::size_type i = 0; i < sep.size(); i++ ) { if( chat == sep[i] ) { m_list.push( mystr ); // += mystr; mystr = string(); addit = false; break; } } } if( addit ) mystr += chat; } if( ! mystr.empty() ) m_list.push( mystr ); // += mystr; return; } bool EStdStringTokenizer::hasMoreTokens() const { return ! this->m_list.empty(); } std::string EStdStringTokenizer::nextToken() { string foo = this->m_list.front(); this->m_list.pop(); return foo; } EStdStringTokenizer::~EStdStringTokenizer() { } miwm/EStdStringTokenizer.h0100664000076400007640000000517407701026325015151 0ustar bwisebwise#ifndef ESTDSTRINGTOKENIZER_H #define ESTDSTRINGTOKENIZER_H #include #include using std::string; /** EStdStringTokenizer: License: see the file LICENSE in this directory. Author: stephan@wanderinghorse.net Based heavily off of work by: Martin Jones (mjones@kde.org) Torben Weis (weis@kde.org) Waldo Bastian (bastian@kde.org) which i originally found as StringTokenizer in the KDE 1.x source tree. i have received explicit permission from each of those gentlemen to release the StringTokenizer code into into the Public Domain. (Many thanks to them for that permission, without which this whole library would necessarily be released under the GNU GPL.) This class is meant to be API- and behaviour-compatible with StringTokenizer. This implementation is, however, MUCH less efficient. EStdStringTokenizer tokenizes strings in a way which is consistent with the way a Unix shell does. This makes it appropriate for use in parsing many types of arbitrary user input, from command-line arguments to comma-separated files. */ class EStdStringTokenizer { public: EStdStringTokenizer(); ~EStdStringTokenizer(); /** str is split up at points matching any element in separators. Adjecent separators in str are interpreted as empty elements. Thus the string "1;;3", separated by ";", has 3 tokens: ("1","","3"). To collect the tokens, do this: EStdStringTokenizer tok( "some string", " " ); while( tok.hasMoreTokens() ) cout << "Token: " << tok.nextToken() << endl; */ void tokenize( const string &str, const string &separators ); /** Returns the next token in our list. Calling nextToken() when hasMoreTokens() returns false has undefined behaviour. */ string nextToken(); /** Returns true if this object has more tokens to give you. */ bool hasMoreTokens() const; private: typedef std::queue queue_type; //EStringList m_list; queue_type m_list; }; #endif // ESTDSTRINGTOKENIZER_H miwm/EStringList.cc0100664000076400007640000002024607701026325013572 0ustar bwisebwise#include "EStringList.h" // <-- see this file for license, etc. #include #include "EStdStringTokenizer.h" #include "rng.h" using namespace std; ostream & operator<<(ostream &os, const EStringList &obj) { os << obj.toString(); return os; } string & operator<<(string &os, const EStringList &obj) { os += obj.toString(); return os; } EStringList & operator +=(EStringList &obj, const string &os) { obj.getList().push_back( os ); return obj; } EStringList::EStringList() { return ; } EStringList::EStringList( const StringList &list ) : m_list( list ) { } // EStringList::EStringList( const EStringList &elist ) : m_list( elist..getList() ) // { // } // static string EStringList::join( const EStringList &strlist, const string &separator ) { const_iterator it = strlist.begin(); string result; while( it != strlist.end() ) { result += (*it); ++it; //if( result.empty() ) continue; // SOOOO arguable! result += separator; } // result.erase( result.find_last_of( separator ) ); // knock of trailing separator // does not work for multi-char separator because of the way find_last_of() works. :( result.erase( result.rfind( separator ) ); //CERR << "join(): = ["<m_list; } void EStringList::setList( const StringList &list ) { this->m_list = list; } int EStringList::count() const { unsigned int c = 0; EStringList::const_iterator it = this->begin(); EStringList::const_iterator end = this->end(); while( it != end ) { ++c; ++it; } return c; } string EStringList::toString( const string & separator, bool quoteSpecialTokens ) const { EStringList::const_iterator it = this->begin(); string str; int c = 0; string tmpstr; static const string quoteworthy = " \t$\n"; // $ might expand to space-sep'd tokens. // shite: {,} break shell parsing: Foo.{cpp,h} != "Foo.{cpp,h}" while( it != this->end() ) { ++c; if( quoteSpecialTokens ) { tmpstr = (*it); if( tmpstr.find_first_of( quoteworthy ) != string::npos ) { str += "\"" + tmpstr + "\""; } else str += tmpstr; } else { str += (*it); } str += separator; ++it; } if( c ) str.erase( str.rfind( separator ) ); // knock off trailing separator. return str; } // static EStringList * EStringList::loadFromFile( const std::string &fn ) { std::ifstream file(fn.c_str()); if (!file) return NULL; EStringList *list = new EStringList(); if( ! list->load( fn ) ) { delete( list ); return NULL; } return list; } bool EStringList::load( const std::string &fn, bool skipComments, bool skipEmptyLines ) { std::ifstream file(fn.c_str()); if (!file) return false; string line; while (std::getline(file, line)) { if( skipEmptyLines && line.empty() ) continue; if( skipComments && !line.empty() && ( line[0] == '#' || line[0] == ';' ) ) continue; //CERR << "line="<count(); if( 0 == count ) return std::string(); // int rand = (int) random( 0, count+1 ); static RNG rng; int rand = rng.select( 0, count ); iterator it = this->begin(); for( int i = 0; i < rand; i++ ) ++it; //CERR << "randomEntry() returning ["<<(*it)<<"]"<m_list.erase( it ); return foo; } string EStringList::shift( unsigned int places ) { if( places < 0 ) return string(); unsigned int count = this->count(); if( places > count ) return string(); string arg; for( unsigned int i = 0; i < places; i++ ) { if( i == places-1 ) arg = *(m_list.begin()); this->m_list.erase( m_list.begin() ); } return arg; } miwm/EStringList.h0100664000076400007640000001114507701026325013432 0ustar bwisebwise// EStringList.h #ifndef ESTRINGLIST_H #define ESTRINGLIST_H #include #include #include /** License: See LICENSE file in this directory. Author: stephan@wanderinghorse.net */ /** This class represents a simple list of std::string objects. It is a proxy for a StringList object and only provides a few commonly-used methods. It does not subclass list because that class has no virtual destructor, which means undefined behaviour when deleting a pointer of EStringLast. :/ See the getList() member function for how to get the underlying list. */ using std::string; using std::list; class EStringList { public: typedef std::list StringList; typedef StringList::iterator StringListIterator; typedef StringList::const_iterator StringListConstIterator; typedef StringListIterator iterator; typedef StringListConstIterator const_iterator; // <<'s el.toString() to os. friend std::ostream & operator << (std::ostream &os, const EStringList &el); // adds el.toString() to string os. friend std::string & operator << (std::string &os, const EStringList &el); // Adds str to the end of the list. friend EStringList & operator += (EStringList &el, const std::string &str); EStringList(); explicit EStringList( const StringList & ); // EStringList( const EStringList & ); virtual ~EStringList() {}; EStringList::iterator begin() { return this->m_list.begin(); }; EStringList::const_iterator begin() const { return this->m_list.begin(); }; EStringList::iterator end() { return this->m_list.end(); }; EStringList::const_iterator end() const { return this->m_list.end(); }; EStringList::StringList & getList() /* const */; /** Sets the internal StringList to a copy of list. */ void setList( const EStringList::StringList &list ); /** Works similarly to the shell function of the same name. Returns the last popped-off argument. */ std::string shift( unsigned int places = 1 ); /** Returns the number of items in the list. */ int count() const; static std::string join( const EStringList &strlist, const std::string &separator ); /** converts strlist to an EStringList and returns the same as join( EStringList ... ) Note that strlist is not const (design flaw), because it is passed to setStringList() of a temp object. :/ */ static std::string join( const StringList &strlist, const std::string &separator ); /** Splits seq into a list of elements, separating at token 'separator'. It eliminates "empty" entries. e.g., split( "foo:bar:::foobar", ":" ) will return a list containing (foo,bar,foobar), without blank entries. A toggle, adding the ability to return empty elements, may be added later (i.e., when it's needed). */ static EStringList split( const std::string &seq, const std::string &separator ); /** tokenize() is subtely different from split(): it uses EStdStringTokenizer::tokenize(), which will give results which are useful in contexts like parsing command-line arguments (or maybe elib::EReadline input). Bug: tokenize hoses any quotes in seq :/ */ static EStringList tokenize( const std::string &seq, const std::string &separators = string(" ") ); static EStringList * loadFromFile( const std::string &fn ); /** fn: filename. skipComments: lines starting with ';' or '#' are not included. skipEmptyLines: empty lines are not included. Returns false if it can't read the file, else true. */ bool load( const std::string &fn, bool skipComments = true, bool skipEmptyLines = true ); std::string randomEntry( bool removeIt = false ); void clear() { this->m_list.clear(); }; /** Useful if you want to call STL algorithms. */ EStringList::StringList & list() { return this->m_list; }; /** * Makes a std::string of this object, with each entry separated by separator. If quoteSpecialTokens is set to true, then any lines in this list which "look like they should be quoted" have double-quotes added to the front and back. */ virtual std::string toString( const std::string &separator = "\n", bool quoteSpecialTokens = false ) const; private: EStringList::StringList m_list; }; #endif // ESTRINGLIST_H miwm/EStringTokenizer.cc0100664000076400007640000000366607701026325014640 0ustar bwisebwise// see EStringTokenizer.h for license details. #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "EStringTokenizer.h" #include #include #include #include #include //----------------------------------------------------------------------------- enum quoteEnum { NO_QUOTE=0, SINGLE_QUOTE, DOUBLE_QUOTE }; EStringTokenizer::EStringTokenizer() { buffer = 0; pos = 0; end = 0; bufLen = 0; } void EStringTokenizer::tokenize( const char *str, const char *_separators ) { if ( *str == '\0' ) { pos = 0; return; } int strLength = strlen( str ) + 1; if ( bufLen < strLength ) { delete [] buffer; buffer = new char[ strLength ]; bufLen = strLength; } const char *src = str; end = buffer; int quoted = NO_QUOTE; for ( ; *src != '\0'; src++ ) { char *x = strchr( _separators, *src ); if (( *src == '\"' ) && !quoted) quoted = DOUBLE_QUOTE; else if (( *src == '\'') && !quoted) quoted = SINGLE_QUOTE; else if ( (( *src == '\"') && (quoted == DOUBLE_QUOTE)) || (( *src == '\'') && (quoted == SINGLE_QUOTE))) quoted = NO_QUOTE; else if ( x && !quoted ) *end++ = 0; else *end++ = *src; } *end = 0; if ( end - buffer < 1 ) { // that check used to be <=1, but changed by stephan // because this thing failes to tokenize 1-char strings :/ // i /hope/ it doesn't have evil side-effects!!! // Been using it 3 years with this bug and never noticed it. :/ pos = 0; // no tokens } else pos = buffer; } const char* EStringTokenizer::nextToken() { if ( pos == 0 ) return 0; char *ret = pos; pos += strlen( ret ) + 1; if ( pos >= end ) pos = 0; return ret; } EStringTokenizer::~EStringTokenizer() { if ( buffer != 0 ) delete [] buffer; } miwm/EStringTokenizer.h0100664000076400007640000000166307701026325014475 0ustar bwisebwise// This file was part of the KDE libraries // Copyright (C) 1997 Martin Jones (mjones@kde.org) // (C) 1997 Torben Weis (weis@kde.org) // (C) 1998 Waldo Bastian (bastian@kde.org) // // This copy was then part of the QUB project. // Copyright (C) 2000-2003 stephan@wanderinghorse.net // // Since then i have received permission from Martin, Torben and Waldo // to release this code into the Public Domain, and that is the license // for this code. // // *************************************************************************** #ifndef STRINGTOKENIZER_H #define STRINGTOKENIZER_H class EStringTokenizer { public: EStringTokenizer(); ~EStringTokenizer(); void tokenize( const char *, const char * ); const char* nextToken(); bool hasMoreTokens() { return ( pos != 0 ); } protected: char *pos; char *end; char *buffer; int bufLen; }; #endif // STRINGTOKENIZER_H miwm/MANIFEST0100664000076400007640000000776507675611374012236 0ustar bwisebwise.: total 616 -rw------- 1 bwise bwise 4169 Apr 29 16:01 alpha.cc -rw------- 1 bwise bwise 6002 Apr 29 16:01 alpha.h -rw------- 1 bwise bwise 4619 Apr 30 1999 back.xpm -rw------- 1 bwise bwise 17663 Sep 14 2000 BlueSwirls.xpm -rw------- 1 bwise bwise 6716 Apr 29 16:01 BUGS.txt -rw------- 1 bwise bwise 23150 Apr 29 16:01 client.cc -rw------- 1 bwise bwise 2958 Apr 29 16:01 client.h -rw-rw-r-- 1 bwise bwise 446 Jan 15 15:25 config.cygwin -rw------- 1 bwise bwise 446 Sep 20 1999 config.linux -rw------- 1 bwise bwise 577 Dec 31 13:11 config.sgi -rw------- 1 bwise bwise 532 Dec 31 13:11 config.solaris -r--r--r-- 1 bwise bwise 18007 Apr 29 14:24 COPYING -rw------- 1 bwise bwise 3004 Apr 29 16:01 cursor.cc drwxrwxr-x 2 bwise bwise 4096 Apr 29 16:03 CVS -rw------- 1 bwise bwise 19561 Apr 29 16:01 disp.cc -rw------- 1 bwise bwise 2331 Apr 29 16:01 error.cc -rw------- 1 bwise bwise 54106 Mar 21 2000 fern2.xpm -rw------- 1 bwise bwise 5001 Sep 20 1999 fern.gif -rw------- 1 bwise bwise 7743 Apr 30 1999 greenstucco.xpm -rw------- 1 bwise bwise 3433 Apr 29 16:01 images.txt -rw------- 1 bwise bwise 446 Apr 29 16:08 make.config -rw-rw-r-- 1 bwise bwise 0 Apr 29 16:08 make.depend -rw------- 1 bwise bwise 3705 Apr 29 16:01 Makefile -rw------- 1 bwise bwise 13607 Apr 29 16:01 manage.cc -rw-rw-r-- 1 bwise bwise 0 Apr 29 16:08 MANIFEST -rw------- 1 bwise bwise 15386 Apr 29 16:01 menu.cc -rw------- 1 bwise bwise 3725 Apr 29 16:01 miconfig.h -rw------- 1 bwise bwise 2471 Apr 29 16:01 mimenu.h -rw------- 1 bwise bwise 1823 Apr 29 16:01 mipix.cc -rw------- 1 bwise bwise 1549 Apr 29 16:01 mipix.h -rw------- 1 bwise bwise 2837 Dec 31 13:11 miwm.1 -rw------- 1 bwise bwise 232 Jun 20 2002 miwm.bsrc -rw------- 1 bwise bwise 10048 Apr 29 16:01 miwm.cc -rw------- 1 bwise bwise 9622 Apr 29 16:01 miwm.h -rw------- 1 bwise bwise 485 Mar 24 2000 miwmrc -rw------- 1 bwise bwise 5387 Apr 29 16:01 miwm.txt -rw-rw-r-- 1 bwise bwise 11105 Apr 29 16:01 mlchckr.cc -rw-rw-r-- 1 bwise bwise 4283 Apr 29 16:01 mlchckr.h -rw------- 1 bwise bwise 4931 Apr 29 16:01 mouse.cc -rw------- 1 bwise bwise 6440 Apr 29 16:01 nodes.cc -rw------- 1 bwise bwise 3006 Apr 29 16:01 nodes.h -rw------- 1 bwise bwise 2543 Apr 29 16:01 notes.txt -rw------- 1 bwise bwise 1559 Apr 29 16:01 null.cc -rw------- 1 bwise bwise 1497 Apr 29 16:01 null.h -rw------- 1 bwise bwise 7057 Apr 29 16:01 ops.cc -rw------- 1 bwise bwise 3267 Apr 29 16:01 README.txt -rw------- 1 bwise bwise 3479 Apr 29 16:01 resource.cc -rw------- 1 bwise bwise 4705 Apr 29 16:01 rng.cc -rw------- 1 bwise bwise 5480 Apr 29 16:01 rng.h -rw------- 1 bwise bwise 2572 Apr 29 16:01 shape.cc -rw------- 1 bwise bwise 3338 Apr 29 16:01 struct.h -rw-rw-r-- 1 bwise bwise 146771 Jun 20 2002 sunflower.xpm -rw------- 1 bwise bwise 2177 Apr 29 16:01 TODO.txt -rw------- 1 bwise bwise 1249 Apr 29 16:01 version.cc -rw------- 1 bwise bwise 1261 Apr 29 16:01 version.h -rw------- 1 bwise bwise 11541 Apr 29 16:01 wm.cc -rw------- 1 bwise bwise 10539 Apr 30 1999 wood.xpm -rw------- 1 bwise bwise 1451 Apr 29 16:01 ws.h -rw------- 1 bwise bwise 6115 Apr 29 16:01 wspace.cc ./CVS: total 12 -rw-rw-r-- 1 bwise bwise 2397 Apr 29 16:03 Entries -rw-rw-r-- 1 bwise bwise 9 Apr 29 16:00 Repository -rw-rw-r-- 1 bwise bwise 16 Apr 29 16:00 Root miwm/Makefile0100664000076400007640000000774507702544036012532 0ustar bwisebwise# ---------------------------------------------------------------- # RCS data: # $Date: 2003/07/08 13:33:18 $ # $Revision: 1.4 $ # $Source: /cvsroot/miwm/miwm/miwm/Makefile,v $ # $Id: Makefile,v 1.4 2003/07/08 13:33:18 bwise837 Exp $ # $RCSfile: Makefile,v $ # # ---------------------------------------------------------------- # Copyright Ben Paul Wise. # ---------------------------------------------------------------- # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # # ---------------------------------------------------------------- default: all DEPS_FILE = make.depend include make.config include $(DEPS_FILE) # ---------------------------------------------------------------- # clear the list .SUFFIXES: # add our own list .SUFFIXES: .o .cc CFLAGS = $(DBGFLAGS) -D_POSIX_SOURCE -DSHAPE TARGET = all OBJS = miwm.o manage.o mouse.o client.o cursor.o error.o \ disp.o shape.o resource.o wspace.o wm.o menu.o \ null.o ops.o mipix.o \ alpha.o nodes.o rng.o mlchckr.o \ miwm_framework.o \ EKeyValueParser.o EPropertyList.o ESimpleCLParser.o EStringTokenizer.o EStringList.o EPathFinder.o EStdStringTokenizer.o \ EShellProcess.o HEADERS = client.h miwm.h struct.h mimenu.h null.h ws.h mipix.h \ miwm_framework.h \ EKeyValueParser.h EPropertyList.h ESimpleCLParser.h EStringTokenizer.h EStringList.h EPathFinder.h EStdStringTokenizer.h \ EShellProcess.h SRCS = $(OBJS:.o=.cc) INCS = -I. -I/usr/X11R6/include -I/include \ -I$(INSTALLDIR)/include/beta # -I/usr/include/g++ \ # -I$(HOME)/lib/beta/include all: TAGS $(DEPS_FILE) miwm # $(MAKE) TAGS # $(MAKE) depend # $(MAKE) miwm miwm: $(OBJS) $(HEADERS) @echo linking $@ $(CC) -g $(OBJS) -o miwm $(LDFLAGS) # compile CC files .cc.o : @echo " compiling $*.cc" @$(CC) -c $(CFLAGS) $(INCS) $*.cc -o $*.o clean: rm -f *.o *~ core *.tmp distclean: $(MAKE) clean rm -f TAGS *.pv .nfs* rm -f $(DEPS_FILE) rm -f make.config cp config.linux make.config rm -f miwm miwm.pure TAGS: $(SRCS) $(HEADERS) etags *.cc *.h $(DEPS_FILE): $(SRCS) $(HEADERS) @echo "Building $(DEPS_FILE) file. Please be patient." @$(CC) $(DEPFLAG) $(SRCS) $(INCS) >> $(DEPS_FILE).tmp @mv $(DEPS_FILE).tmp $(DEPS_FILE) @echo "Done building $(DEPS_FILE) file." depend: $(DEPS_FILE) cleanly: $(MAKE) distclean $(MAKE) all $(MAKE) clean # make sure, on install, that we are actually installing # the most recent executable. also move a basic man page. # NB: you probably have to be root to do this. install: $(MAKE) miwm cp miwm $(INSTALLDIR)/bin/miwm cp miwm.1 $(INSTALLDIR)/man/man1 MANIFEST: distclean ls -lR > MANIFEST; ls -lR > MANIFEST # make compressed archive zdistrib: MANIFEST cd ..; tar -czvf miwm`date +%Y%m%d`.tgz miwm # make uncompressed archive distrib: @$(MAKE) distclean @$(MAKE) MANIFEST @echo making compressed archive @cd ..; tar -cf miwm`date +%Y%m%d`.tar miwm # make a distribution, sign it, and bundle them together # (no need to compress twice) signed_zdistrib: MANIFEST make distrib cd .. ; gpg --armor --output miwm`date +%Y%m%d`.tar.sig --detach-sign miwm`date +%Y%m%d`.tar cd .. ; tar -zcf miwm`date +%Y%m%d`.tgz miwm`date +%Y%m%d`.tar.sig miwm`date +%Y%m%d`.tar cd .. ; rm -f miwm`date +%Y%m%d`.tar.sig miwm`date +%Y%m%d`.tar # ---------------------------------------------------------------- # end of miwm makefile # ---------------------------------------------------------------- miwm/alpha.cc0100664000076400007640000001024107675611372012456 0ustar bwisebwise//-*- c++ -*- // ------------------------------------------- // RCS data: // $Date: 2003/06/23 14:47:22 $ // $Revision: 1.1.1.1 $ // $Source: /cvsroot/miwm/miwm/miwm/alpha.cc,v $ // $Id: alpha.cc,v 1.1.1.1 2003/06/23 14:47:22 bwise837 Exp $ // $RCSfile: alpha.cc,v $ // ------------------------------------------- // Copyright by Ben Paul Wise. // ------------------------------------------- // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program 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 General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // ------------------------------------------- #include "alpha.h" // ---------------------------------- ostream& operator << (ostream& s, TLogical r) { switch (r) { case tbTrue: s << "True"; break; case tbFalse: s << "False"; break; case tbUnknown: s << "Unknown"; break; }; return s; }; // ---------------------------------- double dabs(double x) { if (x<0) return -x; else return x; } int iabs (int x) { if (x<0) return -x; else return x; } int imax (int a, int b) { int result = a; if (b > a) result = b; return result; } int imin (int a, int b) { int result = a; if (b < a) result = b; return result; } double dmax (double a, double b) { float result = a; if (b > a) result = b; return result; } double dmin (double a, double b) { float result = a; if (b < a) result = b; return result; } // ------------------------------------------ double expt(double x, int n) { double y = 1.0; assert (n >= 0); while (n>0) { y = y*x; n = n-1; } return y; } double dexpt(double x, double e) { double z = log(x); return exp(e*z); } int iround(double x) { return ((int) round(x,0)); } double round(double x, int n) { assert (n >= 0); double y; double rslt; int xInteger = ((int) x); double xFraction = x - xInteger; if (n==0) y = 1.0; else y = expt(10.0, n); xFraction = ((int)(0.5+ y*xFraction ))/y; rslt = xInteger + xFraction; return rslt; } int ifloor(double x) { return ((int) floor(x)); } // { // int j; // int i = (int)x; // if (x>=0) // (int)(3.14) == 3, f(3.14) == 3 // j = i; // if (x<0) // (int)(-3.14) == -3, f(-3.14) == -4 // { // if (i>x) // j = i-1; // else // j = i; // } // return j; // } int oddP(int x) { return ( ( x % 2) == 1); } int evenP(int x) { return ( ( x % 2) == 0); } double delta(double a, double b) { return (200.0 * dabs(a-b)) / (dabs(a) + dabs(b)); } int iceiling(double x) { int j = 0 ; int i = (int)x; if (x>=0) // (int)(3.14) == 3, c(3.14) == 4 { if (i #include #include #include #include #include #include #include #include "miwm.h" #include "client.h" #include "struct.h" #include "ws.h" Client *current; int highestClientID = 0; Edge interacting_edge; static void sendcmessage(Window, Atom, long, long); // ------------------------------------------- void setactive(Client *c, int on, long timestamp) { int inhibit = isshaped(c->window); if (c == 0 || hidden(c)) return; if (!inhibit) { if (on && c->accepts_focus && c->name) { XMoveResizeWindow(dpy, c->parent, c->size.x, c->size.y - titleHeight(), c->size.width, c->size.height + titleHeight()); XMoveWindow(dpy, c->window, border, border + titleHeight()); } else { XMoveResizeWindow(dpy, c->parent, c->size.x, c->size.y, c->size.width, c->size.height); XMoveWindow(dpy, c->window, border, border); } } if (on && c->accepts_focus) { XSetInputFocus(dpy, c->window, RevertToPointerRoot, CurrentTime); if (c->proto & Ptakefocus) sendcmessage(c->window, wm_protocols, wm_take_focus, timestamp); cmapfocus(c); } if (!inhibit) theWM->drawClientBorder(c, on); return; } Client *getClient(Window w) { Client *c; Node *cND; if (w == 0 || w == root) return 0; // find the client corresponding to this window. for (cND = theWM->allClients->first; cND != NULL; cND = theWM->allClients->nextNode(cND)) { c = ((Client*) cND->data); // if this client is NULL, we are in deep doo doo assert (NULL != c); if (c->window == w || c->parent == w) return c; } // Nothing found. return NULL; } Client* addClient(Window w) { Client* c; if (w == 0 || w == root) return 0; // see if we already have a client corresponding to this window. c = getClient(w); if (c != NULL) return c; // Because this is 'calloc' rather than 'new', // I can not use my memory-leak detector to // look for leaks. // This is 'calloc' rather than 'new' because // I could never get it to work when I allocate // via 'new'. The attributes are initialized differently, // and I can not figure out how. //c = (Client*) calloc(1, sizeof *c); c = new Client(); c->opaqueMoveP = 0; // default is wire-move c->gripEdge = ENone; c->boxStatus = DBundrawn; c->outlinedP = 0; c->sticky = 0; c->window = w; c->parent = root; c->hidden = False; c->isMapped = 1; c->state = WithdrawnState; c->internal_state = INormal; c->cmap = None; c->name = NULL; c->fallback_name = NULL; c->ncmapwins = 0; c->cmapwins = 0; c->wmcmaps = 0; c->accepts_focus = 1; c->workSpace = theWM->workSpace; c->clientID = highestClientID; c->next = NULL; highestClientID = highestClientID + 1; theWM->allClients->append((void*)c); return c; } void removeClient(Client *c) { if (c == 0) return; // Remove the client from our client list. Node* cND = theWM->allClients->inList(c); assert (cND != NULL); theWM->allClients->remove(cND); if (hidden(c)) unhidec(c, 0); if (c == current) current = 0; if (c->parent != root) XDestroyWindow(dpy, c->parent); if (c->ncmapwins != 0) { XFree(c->cmapwins); free(c->wmcmaps); } cout << "Destroying client "<< c->clientID <name != 0) { cout << "Destroying client "<< c->clientID<<" name |"<name<<"|"<name); c->name = 0; } if (c->fallback_name != 0) { cout << "Destroying client "<< c->clientID<<" fallback_name |"<fallback_name<<"|"<fallback_name); delete c->fallback_name; c->fallback_name = 0; } // free(c); delete c; c = NULL; return; } void WindowManager::positionExpose(void) { char buf[4*2 + 3 +1]; Client* c = current; sprintf(buf, "%i , %i", c->rX, c->rY - titleHeightc(c)); XDrawString(dpy, popup, size_gc, (80 - XTextWidth(popup_font, buf, strlen(buf))) / 2, popup_font->ascent + 1, buf, strlen(buf)); return; } void WindowManager::sizeExpose(void) { char buf[4*2 + 3 +1]; int width, height; Client* c = current; if (NULL != c) { // client did not die during the operation width = c->rW - 2 * border; height = c->rH - (2 * border); // We report 80x24 for an xterm // even when a scrollbar is present. if (c->size.flags & (PMinSize|PBaseSize) && c->size.flags & PResizeInc) { if (c->size.flags & PBaseSize) { width -= c->size.base_width; height -= c->size.base_height; } else { width -= c->size.min_width; height -= c->size.min_height; } } if (c->size.width_inc != 0) width /= c->size.width_inc; if (c->size.height_inc != 0) height /= c->size.height_inc; sprintf(buf, "%i x %i", width, height); XDrawString(dpy, popup, size_gc, (80 - XTextWidth(popup_font, buf, strlen(buf))) / 2, popup_font->ascent + 1, buf, strlen(buf)); } else { // client died during the operation. CYA XUnmapWindow(dpy, popup); mode = wmReady; } return; } void closeClient(Client *c) { if (c == 0) return; // Terminate things nicely if possible. Be brutal otherwise. if (c->proto & Pdelete) { sendcmessage(c->window, wm_protocols, wm_delete, CurrentTime); } else { XKillClient(dpy, c->window); } return; } void setClientState(Client *c, int state) { long data[2]; data[0] = (long) state; data[1] = (long) None; c->state = state; XChangeProperty(dpy, c->window, wm_state, wm_state, 32, PropModeReplace, (unsigned char *) data, 2); } static void sendcmessage(Window w, Atom a, long data0, long data1) { XEvent ev; long mask; memset(&ev, '\0', sizeof ev); ev.xclient.type = ClientMessage; ev.xclient.window = w; ev.xclient.message_type = a; ev.xclient.format = 32; ev.xclient.data.l[0] = data0; ev.xclient.data.l[1] = data1; mask = (w == root) ? SubstructureRedirectMask : 0L; XSendEvent(dpy, w, False, mask, &ev); } void WindowManager::freeAllClients(void) { Client *c; Node *cND; XWindowChanges wc; cout << "Freeing " << theWM->allClients->length() << " clients"<allClients->first; cND != NULL; cND = theWM->allClients->nextNode(cND)) { c = ((Client*) cND->data); if (NULL == c) { // if this client is NULL, we are in deep doo doo cout << "Found a null client in the client list" << endl << flush; // this was a pause before crashing // sleepval.tv_sec = 0; // sleepval.tv_usec = 1250000; // cout << "About to sleep "<< (sleepval.tv_usec)/1000; // cout << " millisec" << flush; // select(0, 0, 0, 0, &sleepval); // cout << " ... done sleeping" << endl << flush; assert (NULL != c); } if (NULL != c->name) { cout << "Moving client " << c->clientID << " named |" << c->name << endl; } else if (NULL != c->fallback_name) { cout << "Moving client " << c->clientID << " fallback_named |" << c->fallback_name << endl; } else { cout << "Moving NAMELESS client " << c->clientID<parent); XMapWindow(dpy, c->window); c->isMapped = 1; } // Reparent it, and then push it to the bottom if it was hidden. XReparentWindow(dpy, c->window, root, c->size.x + border, c->size.y + border); if (not_mapped) XLowerWindow(dpy, c->window); // Give it back its initial border width. wc.border_width = c->border; XConfigureWindow(dpy, c->window, CWBorderWidth, &wc); } return; } extern void Client_ColorMap(XEvent *e) { int i; Client *c; Node *cND; for (cND = theWM->allClients->first; cND != NULL; cND = theWM->allClients->nextNode(cND)) { c = ((Client*) cND->data); // if this client is NULL, we are in deep doo doo assert (NULL != c); for (i = 0; i < c->ncmapwins; i++) { if (c->cmapwins[i] == e->xcolormap.window) { c->wmcmaps[i] = e->xcolormap.colormap; if (c == current) cmapfocus(c); return; } } } return; } extern int hidden(Client *c) { if (c->state == IconicState) return 1; else return 0; } extern int withdrawn(Client *c) { return c->state == WithdrawnState; } extern int normal(Client *c) { return c->state == NormalState; } // ------------------------------------------- // window manager manipulations of client appearance void WindowManager::backClient(Client *c) { if (c == 0) return; XLowerWindow(dpy, c->window); XLowerWindow(dpy, c->parent); return; } void WindowManager::raiseClient(Client *c) { if (c == 0) return; // workSpace->topClient = c; XMapRaised(dpy, c->parent); XMapRaised(dpy, c->window); c->isMapped = 1; return; } void WindowManager::drawDeadlyBox(Client *c) { int quarter; XSetForeground(dpy, theWM->gc_frame, theWM->boxColor.pixel); quarter = (border + titleHeight()) / 4; if (DBundrawn == c->boxStatus) c->boxStatus = DBunarmed; switch (c->boxStatus) { case DBunarmed: XDrawRectangle(dpy, c->parent, theWM->gc_frame, quarter, quarter, 2 * quarter, 2 * quarter); break; case DBarmed: // xfillrectangle is off by one from xdrawrectangle, // and the line width in gc_frame is 2, // so the offset in initial (x,y) is +1 - linewidth = -1 // and the total width is 2*quarter + linewidth XFillRectangle(dpy, c->parent, theWM->gc_frame, quarter-1, quarter-1, 2 * quarter + 2, 2 * quarter + 2); break; default: // this should not happen break; } return; } void WindowManager::drawTitle(Client *c) { int quarter; quarter = (border + titleHeight()) / 4; XSetForeground(dpy, theWM->gc_frame, theWM->titleColor.pixel); if (c->name != 0) XDrawString(dpy, c->parent, theWM->gc_frame, border + 3 * quarter, font->ascent + font->descent, c->name, strlen(c->name)); return; } void WindowManager::drawClientBorder(Client *c, int active) { XSetWindowAttributes attr; // rely on initialization by system .... if (c->parent == root || c->parent == 0) return; if (active) { if ((0 == usePixmapsP) || (None == activeBgd)) XSetWindowBackground(dpy, c->parent, theWM->activeBorderColor.pixel); else { attr.background_pixmap = theWM->activeBgd; XChangeWindowAttributes(dpy, c->parent, CWBackPixmap , &attr); } } else { // inactive window if ((0 == usePixmapsP) || (None == inactiveBgd)) { XSetWindowBackground(dpy, c->parent, theWM->inactiveBorderColor.pixel); } else { attr.background_pixmap = theWM->inactiveBgd; XChangeWindowAttributes(dpy, c->parent, CWBackPixmap , &attr); } } XClearWindow(dpy, c->parent); // draw the thin outline between the client and its border if (!active) XDrawRectangle(dpy, c->parent, gc_thin, border - 1, border - 1, c->size.width - 2 * border + 1, c->size.height - 2 * border + 1); if (active && c->accepts_focus && c->name) { drawDeadlyBox(c); drawTitle(c); } // return to normal return; } void WindowManager::drawClientOutline(Client* c) { // use rX, rY, rW, rH, and title height // cout << "draw client outline" << endl << flush; assert (c->rW * c->rH > 0); // GC gcTmp = gc; // I find it much easier to use a bunch of mnemonic variables // than to try to follow convoluted X calls. Any decent // compiler will optimize them away, in any case. // int w = c->size.width; // int h = c->size.height; // top left corner int x1 = c->rX + 1; // xfillrectangle is off by one from xdrawrectangle! int y1 = c->rY + 1; // xfillrectangle is off by one from xdrawrectangle! // top right corner int x2 = x1 + c->rW; int y2 = y1; // bottom left corner // int x3 = x1; int y3 = y1 + c->rH; // bottom right corner // int x4 = x1 + c->rW; // int y4 = y1 + c->rH; int tH = theWM->titleHeightc(c); // coords of middle points int xm, ym; int i, N; N = 3; // draw the window with crossbars for (i = 0 ; i <= N; i++) { xm = x1 + ((i * (x2 - x1)) / N); ym = y1 + ((i * (y3 - y1)) / N); XDrawLine(dpy, root, gc, xm, y1, xm, y3); XDrawLine(dpy, root, gc, x1, ym, x2, ym); } // outline the title bar, if any if (tH > 0) { XDrawLine(dpy, root, gc, x1, y1, x1, y1 - tH); XDrawLine(dpy, root, gc, x1, y1 - tH, x2, y2 - tH); XDrawLine(dpy, root, gc, x2, y2, x2, y2 - tH); } return; } // ------------------------------------------- // WIndow Manager resizing clients void WindowManager::startResizingClient(XButtonEvent *xbe, Client* c) { Cursor cursor; assert (wmResizing == mode); raiseClient(c); warpPointerToBorder(c); c->gripEdge = whichEdge(c, xbe->x_root, xbe->y_root); cursor = edgecursor(c->gripEdge); // cout << "grip edge: "<gripEdge << endl; XGrabServer(dpy); XChangeActivePointerGrab(dpy, theWM->moving_event_mask, cursor, CurrentTime); c->sX = c->size.x; c->sY = c->size.y; c->sW = c->size.width; c->sH = c->size.height; c->sBX = xbe->x_root; c->sBY = xbe->y_root; c->rX = c->sX; c->rY = c->sY; c->rW = c->sW; c->rH = c->sH; c->rBX = c->sBX; c->rBY = c->sBY; // do NOT draw the first outline here: wait for a motion event c->outlinedP = 0; return; } void WindowManager::motionNotifyResizing() { assert (wmResizing == mode); int dx, dy; Client* c = current; if (NULL != c) { // client did not die during the operation if (1 == c->outlinedP) { drawClientOutline(c); // erase the previous one c->outlinedP = 0; } getMouse (&c->rBX, &c->rBY); dx = c->rBX - c->sBX; dy = c->rBY - c->sBY; switch (c->gripEdge) { case ETopLeft: c->rX = c->sX + dx; c->rY = c->sY + dy; c->rW = c->sW - dx; c->rH = c->sH - dy; break; case ETop: c->rY = c->sY + dy; c->rH = c->sH - dy; break; case ETopRight: c->rY = c->sY + dy; c->rW = c->sW + dx; c->rH = c->sH - dy; break; case ELeft: c->rX = c->sX + dx; c->rW = c->sW - dx; break; case ERight: c->rW = c->sW + dx; break; case EBottomLeft: c->rX = c->sX + dx; c->rW = c->sW - dx; c->rH = c->sH + dy; break; case EBottom: c->rH = c->sH + dy; break; case EBottomRight: c->rH = c->sH + dy; c->rW = c->sW + dx; break; default: // this should not happen break; } // enforce somewhat sane boundaries. int ix, iy; int th = theWM->titleHeightc(c); c->rW = imax(6*border, c->rW); c->rW = imax(c->size.min_width, c->rW); if (c->size.width_inc > 1) { ix = c->rW / c->size.width_inc; c->rW = ix * c->size.width_inc; } else if (c->size.width_inc == 0) c->rW = c->sW; c->rH = imax(6*border, c->rH); c->rH = imax(c->size.min_height, c->rH); if (c->size.height_inc > 1) { iy = c->rH / c->size.height_inc; c->rH = iy * c->size.height_inc; } else if (c->size.height_inc == 0) c->rH = c->sH; if (1 == protectTopLeft) { // ensure the top-left corner is on the screen c->rX = imax(0 , c->rX); c->rX = imin(c->rX, display_width - 2 * border); c->rY = imax(th , c->rY); c->rY = imin(c->rY, display_height - 2 * border); } // there is a slight bug in the above: it you keep trying to // resize the top edge off the screen, it will sometimes bump // the lower edge down by th if (0 == c->outlinedP) { drawClientOutline(c); // draw the next one c->outlinedP = 1; } positionFeedbackWindow(); } else { // client died during the operation. CYA. XUnmapWindow(dpy, popup); mode = wmReady; } return; } void WindowManager::buttonReleaseResizing() { assert (wmResizing == mode); Client* c = current; XUngrabServer(dpy); // cout << "Finish resizing" << endl << flush; int th = titleHeightc(c); if (1 == c->outlinedP) { drawClientOutline(c); // erase the last one c->outlinedP = 0; } c->sX = c->rX; c->sY = c->rY; c->size.x = c->rX; c->size.y = c->rY; c->sW = c->rW; c->sH = c->rH; c->size.width = c->rW; c->size.height = c->rH; c->sBX = c->rBX; c->sBY = c->rBY; assert (c == current); XMoveResizeWindow(dpy, c->parent, c->sX, c->sY - th, c->sW, c->sH + th); sendConfigureNotify(c); XMoveResizeWindow(dpy, c->window, border, border + th, c->sW - 2 * border, c->sH - 2 * border); XUnmapWindow(dpy, popup); mode = wmReady; return; } Edge WindowManager::whichEdge(Client *c, int bx, int by) { int sensWidth = 2*border; int x = c->size.x; int y = c->size.y; int w = c->size.width; int h = c->size.height; int th = titleHeightc(c); if ((abs (x - bx) <= sensWidth) && (abs ((y - th) - by) <= sensWidth + th)) return ETopLeft; if ((abs (x - bx) <= sensWidth) && (abs ((y + h) - by) <= sensWidth)) return EBottomLeft; if ((abs ((x+w) - bx) <= sensWidth) && (abs ((y - th) - by) <= sensWidth + th)) return ETopRight; if ((abs ((x+w) - bx) <= sensWidth) && (abs ((y + h) - by) <= sensWidth)) return EBottomRight; if (abs(x-bx) <= sensWidth) return ELeft; if (abs((y+h)-by) <= sensWidth) return EBottom; if (abs((x+w)-bx) <= sensWidth) return ERight; // the only remaining case! return ETop; } // ------------------------------------------- // WIndow Manager moving clients around void WindowManager::startMovingClient(XEvent *xe, Client* c) { assert (wmMoving == mode); warpPointerToBorder(c); Cursor cursor; // start moving client c->gripEdge = ENone; cursor = edgecursor(c->gripEdge); XGrabServer(dpy); XChangeActivePointerGrab(dpy, theWM->moving_event_mask, cursor, CurrentTime); if (c->size.width * c->size.height * 100 <= opaqueMoveSize * display_width * display_height) c->opaqueMoveP = 1; else c->opaqueMoveP = 0; c->sX = c->size.x; c->sY = c->size.y; c->sW = c->size.width; c->sH = c->size.height; getMouse ( &c->sBX, &c->sBY); c->rX = c->sX; c->rY = c->sY; c->rW = c->sW; c->rH = c->sH; c->rBX = c->sBX; c->rBY = c->sBY; // do NOT draw the first outline here: wait for a motion event return; } void WindowManager::motionNotifyMoving() { assert (mode == wmMoving); int dx, dy; int xT, yT; Client* c = current; // if the client just terminated itself during the move, // the current client could be NULL. In that // case, abort it and go to the ready state if (NULL != c) { getMouse ( &c->rBX, &c->rBY); dx = c->rBX - c->sBX; dy = c->rBY - c->sBY; xT = c->sX + dx; yT = c->sY + dy; if (1 == protectTopLeft) { // ensure the top-left corner is on the screen // ensure the top-left corner is on the screen xT = imax(0 , xT); xT = imin(xT, display_width - 2 * border); yT = imax(theWM->titleHeightc(c) , yT); yT = imin(yT, display_height - 2 * border); } dx = xT - c->sX; dy = yT - c->sY; if (0 == c->opaqueMoveP) { if (1 == c->outlinedP) { theWM->drawClientOutline(c); // erase old one c->outlinedP = 0; } c->rX = c->sX + dx; c->rY = c->sY + dy; if (0 == c->outlinedP) { theWM->drawClientOutline(c); // draw the new one c->outlinedP = 1; } } else { // opaque moving c->rX = c->sX + dx; c->rY = c->sY + dy; c->sX = c->rX; c->sY = c->rY; c->sBX = c->rBX; c->sBY = c->rBY; c->size.x = c->rX; c->size.y = c->rY; // actually move the client XMoveWindow(dpy, c->parent, c->size.x, c->size.y - titleHeightc(c)); sendConfigureNotify(c); } positionFeedbackWindow(); } else { // client died during the operation. CYA. XUnmapWindow(dpy, popup); mode = wmReady; } return; } void WindowManager::buttonReleaseMoving() { Client* c = current; // cout << "Stop moving" << endl << flush; XUngrabServer(dpy); if (0 == c->opaqueMoveP) { if (1 == c->outlinedP) { theWM->drawClientOutline(c); // erase last one c->outlinedP = 0; } } c->sX = c->rX; c->sY = c->rY; c->sBX = c->rBX; c->sBY = c->rBY; c->size.x = c->rX; c->size.y = c->rY; // actually move the client XMoveWindow(dpy, c->parent, c->size.x, c->size.y - titleHeightc(c)); sendConfigureNotify(c); XUnmapWindow(dpy, popup); mode = wmReady; return; } void WindowManager::positionFeedbackWindow() { // int x, y; Client* c = current; // must use starting coords, to avoid unpleasant stray lines on the client XMoveResizeWindow(dpy, popup, c->sX + c->sW/4, c->sY + c->sH/4, 80, popup_font->ascent + popup_font->descent + 1); XMapRaised(dpy, popup); // popup contents get redrawn. Eventually, the function // positionExpose or sizeExpose will get called to do the actual redrawing. XClearArea(dpy, popup, 0, 0, 0, 0, True); return; } void WindowManager::startKillingClient(XButtonEvent *xbe, Client* c) { assert (wmKilling == mode); XChangeActivePointerGrab(dpy, theWM->moving_event_mask, frame_cursor, CurrentTime); c->boxStatus = DBarmed; drawClientBorder(c, 1); return; } void WindowManager::motionNotifyKilling() { assert (wmKilling == mode); Client* c = current; BoxStatus oldBS = c->boxStatus; BoxStatus nuBS; if (1 == mouseInDeadlyBox(c)) nuBS = DBarmed; else nuBS = DBunarmed; if (oldBS != nuBS) { c->boxStatus = nuBS; drawClientBorder(c, 1); } return; } void WindowManager::buttonReleaseKilling() { assert (wmKilling == mode); // if in the current clients deadly box, kill the current client if (1 == mouseInDeadlyBox(current)) closeClient(current); mode = wmReady; return; } // ------------------------------------------- // end of client.cc // ------------------------------------------- miwm/client.h0100664000076400007640000000574407675611372012525 0ustar bwisebwise//-*-c++-*- // ------------------------------------------- // RCS data: // $Date: 2003/06/23 14:47:22 $ // $Revision: 1.1.1.1 $ // $Source: /cvsroot/miwm/miwm/miwm/client.h,v $ // $Id: client.h,v 1.1.1.1 2003/06/23 14:47:22 bwise837 Exp $ // $RCSfile: client.h,v $ // ------------------------------------------- // Copyright by Ben Paul Wise. // ------------------------------------------- // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program 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 General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // ------------------------------------------- #ifndef CLIENT_H #define CLIENT_H // ------------------------------------------- #include "miwm.h" class WorkSpace; // ------------------------------------------- struct Client { // public: // Client(); // ~Client(); Window window; // Client's window. Window parent; // Window manager frame. Window trans; // Window that client is a transient for. int clientID; Client * next; // Next window in client list. int border; // Client's original border width. XSizeHints size; // Client's cUrrent geometry information. int state; // Window state. See ICCCM and Bool hidden; // True if this client is hidden by miwm. int isMapped; // 1 if mapped by X, 0 otherwise IState internal_state; int proto; int accepts_focus; // Does this window want keyboard events? char * name; // Name used for title in frame. char * fallback_name; // Name used in menu when window has no titlebar. BoxStatus boxStatus; Colormap cmap; int ncmapwins; Window * cmapwins; Colormap * wmcmaps; // to which workspace does this belong // (i.e. if you suddenly make it unsticky, it will appear in this one) WorkSpace* workSpace; int normalX; int normalY; int normalW; int normalH; int sticky; // does it appear in all // WM data on the move/resize under way: int opaqueMoveP; int sX; // starting client X (since actually moved/resized) int sY; int sW; int sH; int sBX; // starting button X (since actually moved/resized) int sBY; int rX; // recent client X int rY; int rW; int rH; int rBX; // recent button X int rBY; Edge gripEdge; int outlinedP; // protected: // private: }; // ------------------------------------------- #endif // ------------------------------------------- // end of client.h // ------------------------------------------- miwm/config.cygwin0100664000076400007640000000067607675611375013567 0ustar bwisebwise# various settings for Linux (RHL 5.x) MAKE = make CC = g++ INSTALLDIR = /usr/local DBGFLAGS = -g -O2 -ansi -Wall # -lXmu is required on Solaris (between Xpm and Xext) # -lm is required on SGI (at the end) LIBS = -L/usr/X11R6/lib -lXpm -lXext -lX11 \ -lm #LIBS = -L/usr/X11R6/lib -lXpm -lXext -lX11 \ # -L$(HOME)/lib/beta/lib -lBeta \ # -lm # for testing, add in Electric Fence # -lefence LDFLAGS = -O2 $(LIBS) DEPFLAG = -MM miwm/config.linux0100664000076400007640000000067607675611372013423 0ustar bwisebwise# various settings for Linux (RHL 5.x) MAKE = make CC = g++ INSTALLDIR = /usr/local DBGFLAGS = -g -O2 -ansi -Wall # -lXmu is required on Solaris (between Xpm and Xext) # -lm is required on SGI (at the end) LIBS = -L/usr/X11R6/lib -lXpm -lXext -lX11 \ -lm #LIBS = -L/usr/X11R6/lib -lXpm -lXext -lX11 \ # -L$(HOME)/lib/beta/lib -lBeta \ # -lm # for testing, add in Electric Fence # -lefence LDFLAGS = -O2 $(LIBS) DEPFLAG = -MM miwm/config.sgi0100664000076400007640000000104207675611372013032 0ustar bwisebwise########################################################### # Copyright Ben Paul Wise. # ########################################################### # various settings for IRIX MAKE = gmake CC = CC INSTALLDIR = /usr/local DBGFLAGS = -g3 -ansi # -lXmu is required on Solaris (between Xpm and Xext) # -lm is required on SGI (at the end) LIBS = -L/usr/X11R6/lib -lXpm -lXext -lX11 \ -lm LDFLAGS = -O2 $(LIBS) DEPFLAG = -M # one SGI-specific target pure: miwm purify miwm ########################################################### miwm/config.solaris0100664000076400007640000000076507675611372013737 0ustar bwisebwise########################################################### # Copyright Ben Paul Wise. # ########################################################### # various settings for Solaris MAKE = make CC = g++ INSTALLDIR = /usr/local DBGFLAGS = -g -O2 -ansi -Wall # -lXmu is required on Solaris (between Xpm and Xext) # -lm is required on SGI (at the end) LIBS = -L/usr/X11R6/lib -lXpm -lXext -lX11 LDFLAGS = -O2 $(LIBS) DEPFLAG = -MM ########################################################### miwm/cursor.cc0100664000076400007640000000602207675611372012710 0ustar bwisebwise//-*- c++ -*- // ------------------------------------------- // RCS data: // $Date: 2003/06/23 14:47:22 $ // $Revision: 1.1.1.1 $ // $Source: /cvsroot/miwm/miwm/miwm/cursor.cc,v $ // $Id: cursor.cc,v 1.1.1.1 2003/06/23 14:47:22 bwise837 Exp $ // $RCSfile: cursor.cc,v $ // ------------------------------------------- // Copyright by Ben Paul Wise. // ------------------------------------------- // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program 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 General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // ------------------------------------------- #include #include #include #include #include #include "miwm.h" Cursor root_cursor; Cursor frame_cursor; Cursor menu_cursor; static struct CursorMapping { Edge edge; int font_char; Cursor cursor; } cursor_map[] = { /* * These *MUST* be in the same order as they appear in miwm.h, because * we index rather than search in edgecursor() later on. */ {ETopLeft, XC_top_left_corner, 0,}, {ETop, XC_top_side, 0,}, {ETopRight, XC_top_right_corner, 0,}, {ERight, XC_right_side, 0,}, {ENone, XC_fleur, 0,}, {ELeft, XC_left_side, 0,}, {EBottomLeft, XC_bottom_left_corner, 0,}, {EBottom, XC_bottom_side, 0,}, {EBottomRight, XC_bottom_right_corner, 0,}, {ENone, 0, 0,}, }; extern void initCursor(void) { // XColor red; XColor exact; Colormap cmp; int i; // XC_crosshair, XC_X_cursor, XC_fleur are all reasonable for BPW cmp = DefaultColormap(dpy, DefaultScreen(dpy)); // root_cursor = XCreateFontCursor(dpy, XC_X_cursor); root_cursor = XCreateFontCursor(dpy, XC_X_cursor); frame_cursor = XCreateFontCursor(dpy, XC_left_ptr); menu_cursor = XCreateFontCursor(dpy, XC_crosshair); // XRecolorCursor(dpy, root_cursor, &red, &exact); XRecolorCursor(dpy, root_cursor, &theWM->rootCursorColor, &exact); XRecolorCursor(dpy, menu_cursor, &theWM->frameCursorColor, &exact); XRecolorCursor(dpy, frame_cursor, &theWM->frameCursorColor, &exact); for (i = 0; cursor_map[i].font_char != 0; i++) { cursor_map[i].cursor = XCreateFontCursor(dpy, cursor_map[i].font_char); XRecolorCursor(dpy, cursor_map[i].cursor, &theWM->frameCursorColor, &exact); } // cout << "init cursor finished" << endl << flush; return; } extern Cursor edgecursor(Edge edge) { return cursor_map[(int)edge].cursor; } // ------------------------------------------- // end of cursor.cc // ------------------------------------------- miwm/disp.cc0100664000076400007640000004627707675611372012352 0ustar bwisebwise//-*-c++-*- // ------------------------------------------- // RCS data: // $Date: 2003/06/23 14:47:22 $ // $Revision: 1.1.1.1 $ // $Source: /cvsroot/miwm/miwm/miwm/disp.cc,v $ // $Id: disp.cc,v 1.1.1.1 2003/06/23 14:47:22 bwise837 Exp $ // $RCSfile: disp.cc,v $ // ------------------------------------------- // Copyright by Ben Paul Wise. // ------------------------------------------- // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program 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 General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // ------------------------------------------- #include #include #include #include #include #include #include #include #include "miwm.h" #include "mimenu.h" #include "ws.h" // Dispatcher for main event loop. typedef struct Disp Disp; struct Disp { int type; void (*handler)(XEvent *); }; void logXEvents (XEvent *ev); // comment these out to limit functionality void buttonpress(XEvent *); void buttonrelease(XEvent *); void motionnotify(XEvent *); void expose(XEvent *); void maprequest(XEvent *); void configurereq(XEvent *); void unmap(XEvent *); void destroy(XEvent *); void clientmessage(XEvent *); void colormap(XEvent *); void property(XEvent *); void reparent(XEvent *); void enter(XEvent *); void expose(XEvent *); void leave(XEvent *); void keypress(XEvent *); void keyrelease(XEvent *); // void motionnotifyMoving(XEvent*); // void motionnotifyResizing(XEvent*); void reshaping_motionnotify(XEvent*); static Disp disps[] = { {Expose, expose}, {MapRequest, maprequest}, {ConfigureRequest, configurereq}, {UnmapNotify, unmap}, {DestroyNotify, destroy}, {ClientMessage, clientmessage}, {ColormapNotify, colormap}, {PropertyNotify, property}, {ReparentNotify, reparent}, {EnterNotify, enter}, // comment these out to limit functionality {MotionNotify, motionnotify}, {ButtonPress, buttonpress}, {ButtonRelease, buttonrelease}, {LeaveNotify, 0}, {CirculateRequest, 0}, {ConfigureNotify, 0}, {CreateNotify, 0}, {GravityNotify, 0}, {MapNotify, 0}, {MappingNotify, 0}, {SelectionClear, 0}, {SelectionNotify, 0}, {SelectionRequest, 0}, {NoExpose, 0}, }; void dispatch(XEvent *ev) { Disp *p; #ifdef MIWM_TRACE_ALL_X_EVENTS logXEvents(ev); #endif for (p = disps; p < disps + sizeof disps / sizeof disps[0]; p++) { if (p->type == ev->type) { if (p->handler != 0) p->handler(ev); // purify says this is a leak?! return; } } if (!shapeevent(ev)) fprintf(stderr, "%s: unknown event %d\n", argv0, ev->type); } void logXEvents (XEvent *ev) { cout << "<"; switch (ev->type) { case ButtonPress: cout << "ButtonPress"; break; case ButtonRelease: cout << "ButtonRelease"; break; case MapRequest: cout << "MapRequest"; break; case ConfigureRequest: cout << "ConfigureRequest"; break; case UnmapNotify: cout << "UnmapNotify"; break; case DestroyNotify: cout << "DestroyNotify"; break; case ClientMessage: cout << "ClientMessage"; break; case ColormapNotify: cout << "ColormapNotify"; break; case PropertyNotify: cout << "PropertyNotify"; break; case ReparentNotify: cout << "ReparentNotify"; break; case EnterNotify: cout << "EnterNotify"; break; case LeaveNotify: cout << "LeaveNotify"; break; case Expose: // too frequent to post, usually! cout << "Expose"; break; case MotionNotify: // too frequent to post, usually! cout << "MotionNotify"; break; break; case CirculateRequest: cout << "CirculateRequest"; break; case ConfigureNotify: cout << "ConfigureNotify"; break; case CreateNotify: cout << "CreateNotify"; break; case GravityNotify: cout << "GravityNotify"; break; case MapNotify: cout << "MapNotify"; break; case MappingNotify: cout << "MappingNotify"; break; case SelectionClear: cout << "SelectionClear"; break; case SelectionNotify: cout << "SelectionNotify"; break; case SelectionRequest: cout << "SelectionRequest"; break; default: cout << "unknown event type " << ev->type; } cout << ">\n" << flush; return; } void expose(XEvent *ev) { Client *c; Window w; // Window the expose event is for. if (ev->xexpose.count != 0) return; w = ev->xexpose.window; // We don't draw on the root window (yet) if (w == root) return; // Decide what needs redrawing: window frame or menu? if (w == popup) { switch (theWM->mode) { case wmMenuing: theWM->menu->expose(); break; case wmMoving: theWM->positionExpose(); break; case wmResizing: theWM->sizeExpose(); break; default: break; } } else { c = getClient(w); // cout << "Exposing Client " << c->clientID << endl << flush; // XSync(dpy, False); if (c != 0) { theWM->drawClientBorder(c, c == current); } } return; } int WindowManager::titleHeightc(Client *c) { if (c->accepts_focus && c->name) return titleHeight(); else return 0; } void keypress(XEvent *) { // do nothing, yet } void keyrelease(XEvent *) { // do nothing, yet } // ------------------------------------------- // these are the big three: press button, move, release // ------------------------------------------- // this should be a dispatch table on (location, button, modifiers) // pointing at fn(Client*, XEvent*) void buttonpress(XEvent *ev) { Client *c; XButtonEvent *e = &ev->xbutton; // int quarter; if (theWM->mode != wmReady) return; c = getClient(e->window); // ================================================= // FRAME button presses // ================================================= if (c && (e->window == c->parent)) { // click on frame around a client. // cout << "Frame button press"<focusOn(c); switch (e->button) { case Button3: // hide client if (e->state & ControlMask) { if (theWM->mouseInDeadlyBox(current)) { theWM->mode = wmKilling; theWM->startKillingClient(e, c); } else { // raise client ops menu theWM->mode = wmMenuing; theWM->setClientOpsMenu(); theWM->menu->startMenuing(e); } } else { hide(c); } break; case Button2: // start moving client on screen or between WS if (e->state & ControlMask) { // raise WS menu theWM->mode = wmMenuing; theWM->setWSMenu(); if (e->state & ShiftMask) { // follow client to new WS theWM->followClientToWS = 1; } theWM->whichMenu = sendCtoWSMenu; theWM->menu->startMenuing(e); } else { theWM->mode = wmMoving; theWM->startMovingClient(ev, c); } break; case Button1: if (e->state & ControlMask) theWM->backClient(c); else { theWM->mode = wmResizing; theWM->startResizingClient(e, c); } break; default: break; } } // end of clicks on border // ================================================= // ROOT button presses // ================================================= if (e->window == root) { // cout << "Root button press"<moving_event_mask, // root_cursor, CurrentTime); switch (e->button) { case Button1: // cout << "Trying to raise topclient = " << theWM->workSpace->topClient << endl << flush; // if (theWM->workSpace->topClient != NULL) { // cout << " named " << choose_label(theWM->workSpace->topClient) << endl; // theWM->raiseClient(theWM->workSpace->topClient ); // theWM->focusOn(theWM->workSpace->topClient); // } // raise command menu theWM->mode = wmMenuing; theWM->setShellCmdMenu(); theWM->menu->startMenuing(e); break; case Button2: // if ctrl-Button2, skip if (e->state & ControlMask) { if (e->state & ShiftMask) // skip back stepWS(-1); else // skip forward stepWS(+1); } else { // raise WS menu theWM->mode = wmMenuing; theWM->setWSMenu(); theWM->whichMenu = changeWSMenu; theWM->menu->startMenuing(e); } break; case Button3: if (e->state & ControlMask) { theWM->mode = wmMenuing; theWM->setWMOpsMenu(); theWM->menu->startMenuing(e); } else { // raise hidden client menu theWM->mode = wmMenuing; theWM->setHiddenClientMenu(); theWM->menu->startMenuing(e); } break; default: break; } } // end of root button clicks return; } void motionnotify(XEvent *ev) { switch (theWM->mode) { case wmResizing: theWM->motionNotifyResizing(); break; case wmKilling: theWM->motionNotifyKilling(); break; case wmMoving: // cout << "Moving" << endl << flush; theWM->motionNotifyMoving(); break; case wmMenuing: theWM->menu->motionNotify(ev); break; default: // do nothing! break; } return; } void buttonrelease(XEvent *ev) { // cout << "Button release"<mode) { case wmMenuing: // cout << "Stop menuing" << endl << flush; theWM->menu->buttonRelease(); break; case wmResizing: theWM->buttonReleaseResizing(); break; case wmMoving: theWM->buttonReleaseMoving(); break; case wmKilling: theWM->buttonReleaseKilling(); break; default: break; } theWM->mode = wmReady; return; } // ------------------------------------------- void maprequest(XEvent *ev) { Client *c; XMapRequestEvent *e = &ev->xmaprequest; c = getClient(e->window); if (c == 0 || c->window != e->window) { cout << "Adding client in maprequest" << endl << flush; c = addClient(e->window); if (c == 0) return; } unhidec(c, 1); switch (c->state) { case WithdrawnState: if (c->parent == root) { theWM->manageClient(c); break; } XReparentWindow(dpy, c->window, c->parent, border, border); XAddToSaveSet(dpy, c->window); // fall through case NormalState: XMapRaised(dpy, c->parent); XMapWindow(dpy, c->window); c->isMapped = 1; setClientState(c, NormalState); break; } } void unmap(XEvent *ev) { Client *c; XUnmapEvent *e = &ev->xunmap; c = getClient(e->window); if (c == 0) return; // In the description of the ReparentWindow request we read: "If the window // is mapped, an UnmapWindow request is performed automatically first". This // might seem stupid, but it's the way it is. While a reparenting is pending // we ignore UnmapWindow requests. if (c->internal_state == IPendingReparenting) { c->internal_state = INormal; return; } if (c->state == IconicState) { //Is this a hidden window disappearing? If not, then we //are not interested because it's an unmap request caused //by our hiding a window. if (e->send_event) unhidec(c, 0); // It's a hidden window disappearing. } else { // This is a plain unmap, so withdraw the window. withdraw(c); } c->internal_state = INormal; } void configurereq(XEvent *ev) { XWindowChanges wc; Client *c; XConfigureRequestEvent *e = &ev->xconfigurerequest; c = getClient(e->window); if (c) { // ICCCM section 4.1.5 says that the x and y coordinates here //will have been "adjusted for the border width". // NOTE: this may not be the only place to bear this in mind. if (e->value_mask & CWBorderWidth) { e->x -= e->border_width; e->y -= e->border_width; } else { // The ICCCM also says that clients should always set the //border width in a configure request. As usual, many don't. e->x--; e->y--; } if (e->value_mask & CWX) c->size.x = e->x; if (e->value_mask & CWY) c->size.y = e->y; if (e->value_mask & CWWidth) c->size.width = e->width + 2 * border; if (e->value_mask & CWHeight) c->size.height = e->height + 2 * border; if (e->value_mask & CWBorderWidth) c->border = e->border_width; if (c->parent != root && c->window == e->window) { wc.x = c->size.x; wc.y = c->size.y; wc.width = c->size.width; wc.height = c->size.height; if (c == current) { wc.y -= titleHeight(); wc.height += titleHeight(); } wc.border_width = 1; wc.sibling = e->above; wc.stack_mode = e->detail; XConfigureWindow(dpy, e->parent, e->value_mask, &wc); sendConfigureNotify(c); } } if (c && (c->internal_state == INormal)) { wc.x = border; wc.y = border; } else { wc.x = e->x; wc.y = e->y; } wc.width = e->width; wc.height = e->height; wc.border_width = 0; wc.sibling = e->above; wc.stack_mode = e->detail; e->value_mask |= CWBorderWidth; if (c == current) wc.y += titleHeight(); XConfigureWindow(dpy, e->window, e->value_mask, &wc); } void destroy(XEvent *ev) { Client *c; Window w = ev->xdestroywindow.window; c = getClient(w); if (c == 0) return; removeClient(c); } void clientmessage(XEvent *ev) { Client *c; XClientMessageEvent *e = &ev->xclient; if (e->message_type == wm_change_state) { c = getClient(e->window); if (c == 0) return; if (e->format == 32 && e->data.l[0] == IconicState && normal(c)) hide(c); return; } } void colormap(XEvent *ev) { // Client *c; // XColormapEvent *e = &ev->xcolormap; // I commented this out as the 'new' keyword appeared to be confusing g++ // if (e->new) { // c = getClient(e->window); // if (c) { // c->cmap = e->colormap; // if (c == current) // cmapfocus(c); // } else // Client_ColorMap(ev); // } } void property(XEvent * ev) { Client * c; XPropertyEvent * e = &ev->xproperty; c = getClient(e->window); if (c == 0) return; switch (e->atom) { case XA_WM_NAME: getWindowName(c); setactive(c, c == current, 0L); return; case XA_WM_TRANSIENT_FOR: getTransientFor(c); return; case XA_WM_NORMAL_HINTS: getNormalHints(c); return; default: if (e->atom == wm_colormaps) { getColormaps(c); if (c == current) cmapfocus(c); } } } void reparent(XEvent *ev) { Client *c; XReparentEvent *e = &ev->xreparent; if (e->event != root || e->override_redirect || e->parent == root) return; c = getClient(e->window); if (c != 0 && (c->parent == root || withdrawn(c))) removeClient(c); } void leave(XEvent *) { // do nothing for now return; } void enter(XEvent *ev) { if (wmReady ==theWM->mode) { Client *c; // it is possible for a client to die when you are // doing a menu operation (send to WS, toggle sticky, etc.) // in that case, we do NOT want to apply the operation // to the next client, so I allow change of focus // only if we are in wmReady mode. c = getClient(ev->xcrossing.window); if (c == 0) return; // if (c != current && !c->hidden) { // // Take focus away from current holder. // if (current) // setactive(current, 0, 0L); // // Give focus to new holder. // current = c; // setactive(current, 1, ev->xcrossing.time); // } XSync(dpy, False); // cout << "Entering Client " << c->clientID << endl << flush; if (1 == theWM->insideClientP(c)) theWM->focusOn(c); } return; } void WindowManager::focusOn(Client* c) { if (c == NULL) { // de focus if (current) setactive(current,0,0L); current = NULL; } if (c != NULL) if (c != current && !c->hidden) { // Take focus away from current holder. if (current) setactive(current, 0, 0L); if (1 == raiseOnFocusP) raiseClient(c); // Give focus to new holder. current = c; setactive(current, 1, CurrentTime); } return; } // void // motionnotifyMoving(XEvent*ev) { // // reshaping_motionnotify(ev); // // XChangeActivePointerGrab(dpy, theWM->moving_event_mask, // // root_cursor, CurrentTime); // cout << "motionnotifyMoving"<drawClientOutline(current); // erase old one // break; // case wmMenuing: // break; // } // return; // } // void // reshaping_motionnotify(XEvent*) // parameter ev was unused // { // int nx; /* New x. */ // int ny; /* New y. */ // int ox; /* Original x. */ // int oy; /* Original y. */ // int ndx; /* New width. */ // int ndy; /* New height. */ // int odx; /* Original width. */ // int ody; /* Original height. */ // int pointer_x; // int pointer_y; // int yTitleAdjust; // if ((theWM->mode != wmResizing) || (mode != wmMoving)) // return; // yTitleAdjust = (current->accepts_focus && current->name) ? titleHeight() : 0; // getMouse(&pointer_x, &pointer_y); // if (interacting_edge != ENone) { // nx = ox = current->size.x; // ny = oy = current->size.y; // ndx = odx = current->size.width; // ndy = ody = current->size.height; // Client_SizeFeedback(); // /* Vertical. */ // switch (interacting_edge) { // case ETop: // case ETopLeft: // case ETopRight: // ndy += (current->size.y - pointer_y); // ny = pointer_y; // break; // case EBottom: // case EBottomLeft: // case EBottomRight: // ndy = pointer_y - current->size.y; // break; // default: break; // } // /* Horizontal. */ // switch (interacting_edge) { // case ERight: // case ETopRight: // case EBottomRight: // ndx = pointer_x - current->size.x; // break; // case ELeft: // case ETopLeft: // case EBottomLeft: // ndx += (current->size.x - pointer_x); // nx = pointer_x; // break; // default: break; // } // adjustClientBorder(current, interacting_edge, &nx, &ny, &ndx, &ndy); // XMoveResizeWindow(dpy, current->parent, // current->size.x, current->size.y - yTitleAdjust, // current->size.width, current->size.height + yTitleAdjust); // if (current->size.width == odx && current->size.height == ody) { // if (current->size.x != ox || current->size.y != oy) // sendConfigureNotify(current); // } else // XMoveResizeWindow(dpy, current->window, border, border + yTitleAdjust, // current->size.width - 2 * border, current->size.height - 2 * border); // } // edge of reshaping section, edge != ENone // else // { // bodily move the client // nx = pointer_x + start_x; // ny = pointer_y + start_y; // adjustClientBorder(current, interacting_edge, &nx, &ny, 0, 0); // XMoveWindow(dpy, current->parent, // current->size.x, current->size.y - yTitleAdjust); // sendConfigureNotify(current); // } // } // ------------------------------------------- // end of disp.cc // ------------------------------------------- miwm/error.cc0100664000076400007640000000456107675611372012532 0ustar bwisebwise//-*- c++ -*- // ------------------------------------------- // RCS data: // $Date: 2003/06/23 14:47:22 $ // $Revision: 1.1.1.1 $ // $Source: /cvsroot/miwm/miwm/miwm/error.cc,v $ // $Id: error.cc,v 1.1.1.1 2003/06/23 14:47:22 bwise837 Exp $ // $RCSfile: error.cc,v $ // ------------------------------------------- // Copyright by Ben Paul Wise. // ------------------------------------------- // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program 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 General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // ------------------------------------------- #include #include #include #include #include #include #include "miwm.h" int ignore_badwindow; void miAbort(char *s) { fprintf(stderr, "%s: %s\n", argv0, s); cout << endl; cout << "Terminating MIWM at "; cout << __TIME__<<", "<<__DATE__<mode == wmStartup && e->request_code == X_ChangeWindowAttributes && e->error_code == BadAccess) miAbort("another window manager is already running."); if (ignore_badwindow && (e->error_code == BadWindow || e->error_code == BadColor)) return 0; XGetErrorText(d, e->error_code, msg, sizeof(msg)); sprintf(number, "%d", e->request_code); XGetErrorDatabaseText(d, "XRequest", number, number, req, sizeof(req)); fprintf(stderr, "%s: protocol request %s on resource %#x failed: %s\n\n", argv0, req, (unsigned int) e->resourceid, msg); if (theWM->mode == wmStartup) miAbort("Failed during initialization."); return 0; } // ------------------------------------------- // end of error.cc // ------------------------------------------- miwm/fern.gif0100664000076400007640000001161107675611372012505 0ustar bwisebwiseGIF87a ÇðÜ\, Çþ„©qzøÞš.šuYÄ{k9Y8vYâ¡dZ5­«’Ôw¾'˜š8;—ðø¢Y”!±«‰r²¤R4F4_±Él†xÂã füR{áë-¦ÍNd‡e­ÉÜjÉºÕæÇ¶1Ô¸$Æ×Ç#ó“æv”'äÖÖµ·(Åhc&y¨õgIèäçõ©ƒÈ™¶Ø˜4•¥W%7øçZ³išúÄW‰BÇõêúˆj«Ù‰Ôc¬›*\)LÜš‰K‰7é"Û)«ù †iªVJôq¼W~ ~Kd¨Š-Ý…|Z]xW¨ {ÖÍ9žMè‹.^¹s^Ò]B“¯à³UÙlÑÃ3‡’%kÕ&Õ eMà<þ`;:”øÑJDxGü§o2óŠ‘lù’_Iu}X^áU‹4„/â{÷p˜;ž)Ö{I›,GåÂYËžŠÞJ)\¯Ì1R“&vÝš¨@«+™:lT(Ô¨T'*½§ÈX8›R4Âa¸ì(й³Ì‚½PIÒšjýºÕªÕ%Öħž[4ìU»&e237Ø©fO–™J@<²®O« ¿å¬Jùg¬Çœ©Vþ¬æ¨KjW‘½gö^ÒŒÐNVÛbÚ¦cù¶aØõëS£+=ˆÖçÚÎe· o<›n@Ü&#Ç4cw£Ìã6wÍöïiÔéiM®€~)ó¯!´Ñ~¾ Ö)þwŽJkA9ƒ—8ê‰w—~í¶{’¦^œ©`Q¼ø–}˱ñ˜{¡@¶!ƒRø oN6¡lý {¹©f¡_–¶ ƒÁÝ"ï¤ÕN4Ð¥¸Œf„½fÐi6N×Ó‘†w Â÷\i($ §ô”Ѐ!ÞHä“y±V‹Eƨ$R„e×``-öâä¹\,‰p9”|3‘Y&}ÀQ¹QCZÇÎz‚Ö‰'qšx¢}nY¦xoêÙN#ŽÙ(‹—5:&¢kÑânÆÙ(Œ„¾w夣VÊNPZbooZé$z&k¦äM:ÛŽ…*YÜùœ8'°R)o6ôþ¤=–ºšª¨Òªi_¦*m?ÊmfìÆÒYc\FqÙoâ–Ui¶W=› (êê:ÁÖî©1áèe·n§›¥Ë«œã0Šf|»Þ{柸ši¨nΫn8.ÚnŸ_r` ¨õ:ëÈ·Ë®ÂÔ'Ùü–p+‚T0¬¢²©Ì˜›^/Eú#%—Û˜²Û­.ÍÚåé_Ïif»ê°C/г¥±^)+@b]ò´÷Š©!ƒ1!ñ'>›EÉ\×ÃØ¿ÁŸõIou©á… =Î…dâ  ­‡™, ñ&ÿ© ÏF•GmuJa]sq,uD8mH‰èc¼ä³ËŒG”ãÜ€?îIz·Rfë¬b< ωÙq3ã"^#ÙéòuQ¢—à?…1Zs€Û;gÿWL°Ùë”mF?í龫a1” Õ=CRˆR‰ü8"$Íò…T‹\IÛ‰K‘^ó‚ĺœÊö±•jbˆ†ÓéNKWÏ·oR^[¸z9º³ßñêº ¾”µËœ1й*93õd>zD_éÖlÎ/ª–›k­ÄC Õ‘Þ*Ö‹ õ/½YKÆD©Œf*ÖR"¯“Í]YiÐ%ÙFdŒÃ\E¥©Jh‰ xa¢ìBWxEî ‚hõ!¶ÎàËÞÀU†šdê@ÚNÓ¤l¸ÕékµžþƒÂš&'·]²è%÷ùTé¹^Èš.0DC*Õr˜D.±9-¹ <0ÕbK±êWy8iï û w˜Vµ–m¡–,CÞÑö“Qšìca×Ϫ£åÛìîb Vþ¡Í¯¶òîå‚8{B ;eó¢3#Y:‰(ôÍ¥gã{›rÁÅí+SbA)¢Ö1±êpÂØWÔ;26¶î.‹§bÎæ¨¤'=1L¡‡t™9fÞ†ÙöÆ n—Á•co&7˜Æç}³ÀÚtRhLJÜ控L`àØצ.*‹&]êWM[áO´®¹/ãN× Ù0CyÇ_t„?çä@ÑÎÄ%ijÛËþG;Ž¿®izíkÖšY‘‡ò.yíÏ Ÿ¿Rû±ƒãØÃæZšo“îT3‚I´)ƒxXZšlKgGs‘¶Š6u§+¢PP›OÈn^¢]»ÌÜÓkm­2«Þ¹BUÉÀÝm˜ßÛVúÉçåq‹JìÊ’•É?°Ý¢LÀ”Oú!Cµëüg‹4Èk:H6S)gtSP°½®áY›ÓÊËŘ´LÅ‹mZõ6Ò÷¥‡³;Q¶©T—¤úŠ»Á¢g}K¡}*¶k~•YଠµJóÉsŸðá s·)áH/…Ø¥ó]°sT]׈I|Ìü|6W·XÚU ¯È’0ë«íþñnZ˜m5òNi©YZÍ©¿.½îŒ×¾UÆE\kÎéË©ìŒõµ‚rtŸ¾3H«Õ4WæôÉÈZ9Vvc zn]x±n¥óŒy›®£Ã™ŒoÆ]¢z,ïv›Ð`(¦éC‘@w¿åïÞVž…Ú:K£Jx4yù|Áå‹á#èk¥C³?V_P˜Ö"¬™e¹‡4ÎJÃ0PU)î;võb_­éÇÔ%3ÈÙu=fùœjÎû]æwŠçniã2±û¥¹=Ëþ0…7MKž—®ëÍë›X)ò¥¹ÿÚóEÌÑ“[{öâÆ»sî~´t‹_×4ÿ>øiâÛrþ¢[’£0ö—YÑ –ºŒ1¥û 5”pgG\ûç@­Vo F~à5JG÷d…wÕÆte࣠—Q8tf7BawçIêwQ{W( U.úänD%/å÷4ÉÅwHÔV¾· ¯–hç¶wÍÜòa1SH€G9††û6d¶dþc„ÅxóWÆuše?œe‰…¶ñVx¶d©"d8/çÄ‚572Xk~Æ\Òå( $iµ¨[oUbx„u®&o¶hqA•‚T|³s«vx çƒ*aH3Ã|˜eÕ(M´Whp‡Ni7h)GvÄaî5yñÃpHˆ]ígWTÆq'·[\w0øvù¦Fz(޹Ð>ÔâKTUrð8ŠúG’'gÜx–C„7ßÕ`G6„eX^÷~fÖpƒ]ExŠ˜‡‰ªs%ru8~/‡ ш†ÇxX:v}¨§_&w.Ò‡áFÖ倈7zj7ƒ.¹‚¸˜‹«(Y/‰|Šô‚èŠmÔc2™“ˆþK[…X8I„ÓòD”ÇIÜ …aWYÀàVBEò[ÞX£8‹²… {s‰ªö‰ôGv ™o¤—PGJÑ&9–¥’­”Ó€±WŠa¶l~òo©|¯GŽÐU•oè=Tè\©E¾˜ŒÜG’ ˆsb”â(”aÓxªå†C•—;xQÝ'A4x{ðFoBéT‡X–8‘Vˆ™™†’¡#0ÔvíÈ9a‹î%Î6nšY"€„Œ³F‘Åx†b—ˆö„køkW”“¦Šôô•J·”âB›v˜` Oòˆ%ÙlG{ïG*¨)hÂø{Ïù‹ï¸›ƒJ¼Øƒ ‘È$f[Öˆ%w›þy³“õñ“ =Åé‘\4æ…!÷I hU¨/ôwYžÈ©%…TUuGlý)lžzôYÇ”m´év¿Â<‰Pv±8¡UF ú”|¨3ðS}yœOsœXq ÖÙ Û$Œ5i˜ f$Ö|iEãnÅÅÏ@ŒL79=j"z6q zdWtŽ9£:ùž |ªôJfðuÀ7TÞ–hf,tŸjšzlx›Èº°q‰k{¢F`ÌûþÇ•,œ[ªº˜+%µŠˆ«ˆþh\Á¨‰Û9w°œ×›Ž"Yžc `r"¡ãë¯$WÅlaŠkÉxy’ô_u¼€äÊ´ýˆ€LË*z½t½ÿS;Wwy¢Dº^©’5U_÷; {0¶œwTz¡êijœg[½~ü¹ÆÇrˆ™ƒ+RxöÈÉ‹šTŸ#{$û°Îù>aÙ,¥~ ¡pt„k_:žzLEsÚÆz›‘©ÃÊ]Æ/æ<¥ Æä\€tZ›Ý¬ÃmÍË|ÏkЮëqU" ¼–“ZpVüÌêk©È½†§Àå<º Uд+z䏸Ä~¬‚[ªòW´{ÑÒ •ÆIœþ²fûmÉØ©ûŒü§ë™Ó×Fg&гN‰ÚAɇ½?5?ãû£$J×¼YŸî¹Ç‡ig[«Ó{¸³·ë‚í åJÉK˜ƒ.¥“¨(VÒ';dU)?ï‚ ¸c·V˜²@bª˜‹DĬdy½¾ÍKÊ ë×><+ÚÛ¸MhµÍÙŠaZ¾²‹¯½»_,ןçÊŒ–ÏûÂÏĔơ’T·Ôõ<׋ØÀš«t3O œÈd,˜Inj}¿(‹" ¹ÒƒõØ‘ t>鈙X’†š@è§Õعesx'üÊ:´GtdÊË¢NøDÖøÑc˜Àä u|È;½±Ømm,9ÇçS{¯Ç¿G\kÜ¿¨TÃö# ÙŸ‰äÓÂK€ˆ¬Ád­Ï“{Ámª¯ëR´¥î¨Åw…‡óÔ̹‰öGÐë-™8¬Ô(ƒ»-ÞeÙ¤nÊ0F³Ùª£b,àp¼ß㚀ܜ~’Úå ¯;s³óÌàåCâ)ÃfÜQD¶½ãüˆP;miwm/fern2.xpm0100664000076400007640000015153207675611373012636 0ustar bwisebwise/* XPM */ static char *fern2[] = { /* width height num_colors chars_per_pixel */ " 267 199 2 1", /* colors */ ". c #000000", "# c #00dc5c", /* pixels */ "....#######...###....#........############........####..##......####......#.....##......######......####......######........#...####.....####.....###.....######.....####......####......##########.....######......###....##.....###.....#......##......###############...", "....#######...###....#...........#######........#####...##.....####......#.....###.....######......####.......########.......#######....#####....####.....######.....#####.....###......##########......######......###....###....###............###.....#############.....", "....######....###...##............#####........######...##.....####......#.....##......#####......####........#########......#######....#####....####.....######......###########......#########........######......###....###....###......#.....###......##########.......", "....#####....####...####..........####.......########...#.....####......##.....##......#####.....####.......######...####.....######....####.....####.....######......#########.......##########........######......##......##.....##......#......####....#########........", "...#####.....###....#######.......###.......########....#.....####.....###.....#......#####......###.......######...######......############.....####.....#######.....########......###.########.......######......###......##.....###.....##.....####....########.........", ".######......###...############...###......#########...##....#####.....###....##......#####.....####......######....#######.......##########.....####.....#######.....######........##..#######........#####......####......##.....###.....####...#####...#####............", "######......###....##...##############....##########...##....#####....####....##.....#####......###......######......#######........########.....####.....#######.....#####.......####....####.........#####.....#####.....###.....###.....############....####..........##", "######......###....##....###########################..###....#####....####....##.....#####.....###.......####.......##########.......#######....#####.....#######.....##........#######...########....#####......#####.....##.......##.....#######.....##..#####........###", "######.....###....###.....###############################....######...##########....######.....#........####.......############........##############.....########...###......####..###...#################.....#####......##.......##.....#####.......##...###############", "#######...####....###......####################..########....######...##########....######....##........###.......#######...#####........############.....###########.......######...##.....##############......####.......##.......###...##...........##...###############", "##############...####.......################.....##########....####..###########....####...............###........####......#######.........##########...#########........########....#.......############.....#####.......##......########............###...##############", "#############....#...#......###############......########......##################.######....##........###........####.......###...##...........################.......#..#########....##.......###########....######.......##......########...........####...##############", "#############....#...##.....####.#...#####......########......#########################....##.........##.........####......##.....####..............########.......##..###########.....##.......##########....#####.......###......#########.........#####...##############", ".....#######....##...###...####......####.......######.....############################....#.........##.........####.......#......#######.......................##...#####..######.....####......#########....#####.......###......##########.......######...###########...", "......#####.....#....#####.###.......####......######.....################....########............####.........#####......#........########.......................########...#####.....#####......################........##.......#######################...########......", "......#####.....#....#########.......###.......####.....###########.............#######...#......#####.........####......#......#######..########.........################...#####......####.......###############.......###......##################....##...###...........", "......#######..##....#########......####.....#####.....##########...............###########......####.........####.......#.....#######...############...#################....######......####......###############.......###.....###..###########.......##...###...........", ".....#########.###############......###..#..#####.....########...............#..##########.......###........######......##.....#######...#########################..#####.....#####......#####.....################......##########....#####............##....##...........", ".##############################.....###.....####......#####......................#########......###........######.....####.....#######...##################...####...####......####.......#####.....################...###########....######............##....##...........", "###############################.....##.....####.....#####........................#########......###........######....###.......######....####...##########....###....####.......#####.....#####......#############################...######.............##...######.....###", "##############################......##.....####....####.............#######......#########.....###........#######...####.......######....###....###...####....###......##........#####.....#####.....######..#############################.............###...##############", "##################....########......##....####.....###...........##############..##########...###........######.....####.......#####....####....##....####.....##......###.......#####.....#####.....#####......#########################...........#####....##############", "....##############.....#######......###...####...#####.......####################################.......######......####......#####.....###.....##....####.....##......####.......#####.....####.....#####......#########################.....##########....###............", "....##############......######......##...##############....#####################################.......######......####.......#####.....###.....##....###......##.......####.......#####...######....######......######.....############################....###............", "........##########......######......##...###.........##########################################........#####......####.......######.....###.....##....###......##.......#####......##########################...#######.....############################...#####...........", ".........##########......#####.....###..##.............########.............###################........#####.....#####.......######.....###.....##.....##......##.......######.....###########################.########....########.....###############....#####...........", ".........##########......#####....#######.................#####...............#################.......#####......#####.......#####......###.....##.....##......###......#######...######################################..########..........#....#####....#########........", "........###########.......####....#####....................####...................#############.......#####.....#####.......######......###......#.....##......###......#########....############################################................#####...###########....##.", "###...######....###.......####....####.......................##....................#############.....######.....#####.......######......##......##.....##......####.....#########.....#########...###############################.................###....##################", "############....####......####....###.........##########......#####.....##...........######################.....#####.......######.....##.......##.....##......###################.....########....####.....#.....#######.....####................##....###....############", "############.....###.......###....##.....################......################......######################....######......######......##.......##.....##.......##################......#######....####.....##.......##........####...............#....####.......#########", "############......##.......###....##....#########..######......#################.....######################....######......######......##.......##.....##................##########.....#######....####.....###.......##........######...........#....#####............####", "############........#.......##..###....#########...#######......#####....#########...################################......######......##......###.....##..................#########.....######....#####.....##........###........###############....######............####", "#############.......#.......######.....##...####...####..##......###........################..########################.....######......##......###.....###...................########.....#####....#####.....###.......###.........##############...########.............##", "#############........##......####.....###....###...###...##......###...........#############.......##############################.....###.......##.....####...................#######.....#####....#####.....####.......###..........###########....##########.............", "#####..#######.......###.....###......###.....##...##....###......##............############.........############################.....###.......##......###......####...........######.....####....######....######.....#####..........########....#....#######............", "#####...######........###....###......####....##...#....#####.....######............########..........###########################.....###.......##......################...........####....####.....#####.....#####......######........######.....#......#########........#", "#####...#####.#.......###....###......####.....#...#....######....#########.........##########............#######################.....####......##......##################..........###.....####....#####.....#####.......######........#####....##.......#################", "#####...#####.##........##...##......######....#.......#######.....##########.........##..####..........###################################.....##......###################...........##....####.....####......#####.......######........###....###.......############...##", "#####...#####.###.......###..##..#...#######...####...#......#.....###########........##..####..........##########################################......#####################..........#.....###.....####......######.......#########...###....#####....#############....##", "####....###########......######..#...###....##########.......#.....#############......##..####.........############################################.....#######################.........#.....###....#####......######......############......#######################....##", "####....#############.....#####..#...##.....##########......##.....###....#######......#..####...###################################################...##########################.......##....####...#####.......######......###########.....##################.....#.....#", "####....########..####.....###.......##.....###################....###......######......####################......###############....#############################............#######...##....#############......#######........######......###################.....#.....#", "####...#.....###...###......##..#....#########.......##....####....###........######....###################.......######....#######......########################................##########..###############......########......####......#####################.....#.....#", "####.........##....#####.....#..#...#########........#.....####....####........#####....############...##.........#####.......########...########################..................#########......##########......#########.....###......######################.....##....#", "####.........##.....####.....#..#...#########........#.......##....#####........#####....#######.....####.........###..........########..########################.....................############..#########.....##############.....#.######...#######..#######....##.....", "####...#.....##.....#####..###..#...#########........###.....##....#######.......#####...######.....####..........##..........###################.........#######.....#####...........##############....######################......#########...######....######....##.....", "###....##...####......###...##..#...#########........#########.....#######........#############.....##..........##...........####################..........######################.....##################..#################......############..#######....######....##.....", "###....#########.......##...##..#...#########.......#########......#######.........###########.....###.........##...........#####################..........#################################....##########...#.................######....#############....######....##.....", "###....##########......#######..#...###....####.......######......#########.........#########.....##.........###..........########....###########...........###############################.....#############...............#########.....############....######....##.....", "###...############......######..#...##.....####........###........##..######........########......##........##...........#######........##########..........####################..#...#####....######################################......###########....######....###....", "###...#############......#####......##.....####..................###.....###........#######......#.........###..........#####.............##########..........###############...........##.....####...###############################......###########....######....###...#", "##....##......#######......####.....############................####.....######.....#######......#........###.........######...............###########.........############..........#####.....###.....####....###############...####......###########....######....###...#", "##....#.......#######.........#.....#######...##...............#####......######...#######.......#.......###.......#####...................#############........##########..........#####......###....#####....#######.######.....###.....###....#####....######....###..##", "##....#.......#...#####.......#.....######....###.............#######.....######...#...###......#......####......#######..............###################.......########..........######......###......####....######..######.....###.....###.....####....#####.....###.###", "##...###......#....######.....#......####.....######.....######..####.....#########....##......#......#####.....#######.............###########....#######.....########.........########......###......####....######...#####......###...####.....####....#####.....#######", "#....##########.....#####....##......####....#################...#####.....########...##......#......#####.....#######...........#######............########..##########.......########......####......###......#####...######......##...####.....####....#####.....#######", ".....###########.....#####..####......###...##############..##....####.....#######....##.....##.....###.......#######..........#######...............#####################....#########......###.......###......####....######......#########.....####.....####.....#######", "....#############.....##########......###########....####...##....####.....######....##.....##.....####.....######........#########...................#####################..#########.......###......####......####....#######.....##########....####.....####....########", "....##############........######.......#########.....####...###...####.....######....##.....#.....#####....######################......................###############################.......###......####.....#####....#######.....##########....####.....####....########", "....###############............#.......########......####...###...####....######.....#.....##....########........############..........................##############################.......####......####.....#####....#######.....##########....#####....####....#######.", "...##########...###.............#.......#######....######...###...#########.###......#....###...#####..................######......................##################################......#####.....#####.....#####.....######.....##########.....####....####....#######.", "..#############.#####...........#.......######....#############...########..###.....#....#########........................###..............##########################################......#####.....#####.....#####.....######...############.....###.....####...#######..", "..###........##########.........##........####...#####....#####...#######...##.....##..#########............###.......................###########..........###########################....######.....#####.....#####.....#######..###....####......###.....#####.#######...", ".####.........###########.......##........####...#####....##############...###....##.########...........#############........###....##########................###########################.######.....#####.....#####.....###########.....####.#....###.....#############...", ".####.........#####################.......####...####...###############....##....########............#....######....##........#########........................#####.....#######################.....#####......####......##########......###......###....############.....", "#####.........######################......##########...################....##....######...........##.......#####....####........###..##........................#####.......#####################.....#####......####......###########.....####.....###....###########......", "#######......#####..###......########......#########...#####....#######...###...#####..........#####........####.....#####.......###.##........................#####.........###################.....#####......#####.....###########.....#####....###....##########.......", "###################.##.......########.......#######...#####.....######....##...####........##########........###.....#######.....####.#........................#####...........##################....#####......#####.....############.....####.....##....#########.....#..", ".####.#############.##..............##.......#####...######.....######....##.#####.......##############.......##.....#####..#.....######.#........###################............##################..######.....#####.....############.....####.....##....########......#..", "........##############..............###........###...#####....####.###...##.####........##.......#######......###....#####..........####.#############################................#####################.....#####...##############.....####.....##....#####.......##...", "........###################....###...##........###..#####....####..###...######.......##...........######.....###....#####....#......##################################..##............####################.....#####..################.....####....###..####.........#....", "............############################........#########....####..###...#####.......###.............####.....###....#####....###.....#############..............#######..#####............################.....###############....####.....###.....########.........##....", ".............#############################.......########...#####..###..#####......######.............####....###.....####....####.....###########...............################..........####################################....####......##.....#######.........###....", "##............#####..######################........######...###....##..####.......############........####.....##.....####....#####.....######...................####################......####################################.....####.....###....#####.........########.", "###...........####...#############.......##..........#########.....##.####.......###############.......###.....##.....####....######.....#####...................##############################################################......###.....###..######........###########", "#####.........###################........###...........######......##.###.......#####........#####.....###.....##.....###.....#######....#######...####################...#####################################################......####....##########.......######......#", "..#####.....#####################........####...........#####...#...####.......###.............###......###....##.....###.....########....##.#########################.......################...##########.......##############.......###....########........####..........", "....#########..#########...######........######..........###....#...###.......#................####.....###....##....####....#####....#....###########....############...........#####..........##########...........###########......###....#######........#####..........", ".....####################.....##.###########....##........##....##.###.......#.................####.....###....#.....####....####.....##...###..............##########........................#.####....####..............#######......##....######........#######.........", "......###########...#####.....##....#######.....####.......#...######.......##.........###.....####.....###....#.....###.....####.....##....##.................#######......................###.####......#####................##......##....#####.......#############.....", "......##########.....#####.....#....#######.....#####.......#########......###......#######....#####....########....##.......####.....##....####.................#####...................######.#####.....#########............###......##...####.......################...", "......##########.....#####.....##...#######.....######.......#######......####....###################################.......#####....###.....##########..........#####...##...........########.#######.....#############.......####.....########......#####################", "##...#####..####......####.....##...####...###########.......######......############################################......#####.....####....############........#####.............####..####..########......######################.....########......######.....##########", "########.....####.....####.....##...####....############......#####....#######################################..#####......####......####....##############......#####..........#####....###...##...####.......####################.....#######......###...............####", "#######......####......####....##....###.....#######...#........##.....#############################...#######..##########..........#####....################...######......###..........###..###....####........###################.....#####......####................###", "########.......###.....####....##....###.....##.####...##.......##....###############...############...######....########...........######...##.........#######.#############............###..####.....####........#################.....####......######...............###", "#########.......##......###....###...###.....##...##...###............######............############...######....########..........#######...##............#############.................###..####.....######........################....###......############...........##", "#########.......###.....###.....##...###.....##....#...####..........####...............###########....#####....###...###........#########...###.............########..................#####..#####......######........#####....######...###......#################......##", "##...#####......###.....###.....##...###.....#.....#########.........##.................###########.....####....###...####################...####..............#####...............#####.##...######......######.................#####..###......###################.....##", "#.....#####......###.....##.....##...###....##.....#############.....#.................############.....###....####..################...##...#######...........#####............####.....##..########......#######................########......###########################", ".......#####......##.....###....##...###....##.....##...#...###.....#.........#####################.....###....####.########............##...#########.........########....######........##..#########......#######...............########.....#####.............##########", "........####......##.....###....##...###....##....###...#...###....##......################..######......##....#############...........###...#......###........#############.............##...##########.....########....####......#######.....####................#######.", "#........####......##....####...##..#####...##....###...#######....##.....#################...######.....##...##############...........###...#........##....########...................####...##########......################......#####.....##....................#######", "###.......###......##....####...###############...###...######....#########################....#####.....#######.....####################....##........#....#######..................#####....##....#####......###############......#####.....#.....................#######", "###........###.....###..############################....##...#....#########################.....#####.....###.........####....###########....##.........##..#######..........#############...###....######.......##############.....####.....##......######.........#######", "####........###....##########................#######....#....#....#########################.....#####.....##........#####......#########.....####........#..########...###################...###.....######.........###########......###.....#################.....########", "######......###....########...................######..###...#....###########################.....####.....##......########.......#######....#######......################################.....###......#####.........###########.....###.....##############################", "######......##############.........................######...#....############################.....####....#.....###########........####.....########......###########################...#.....###.......#####........###########.....###....#########...........###########", "########....############.........................#...###....#....########.........############.....###....#...####..####..##........##.....####..####......##################...........#.....###........#######.....####....#####...###....#######.............###########", "...#################..............................##..##...##...#####..............############.....######....###...#.##...###......##.....####...####.....###########..................#.....####........###############......#####.###....######...............####......", ".......#########.............##########..##........##.##..##....####...............############......#####..####...##.##....###...........#####....####....######......................#.........###.......##############.......########....##...................###.......", "........#####.............###############...........##.#####....####...............############........###..###....#..##.....######......########...####...#####....................####...#......##.........############........#######....##..........####.....###.......", "........###...#......#######################..........#.####....####.......###.....#############.........#..###...##..##......####......###..####....####..#####.............##########....#.......##...........#########........#######....##......###############........", "........###.##...####..###########.############.........####...#####...###########################.......#..###..###..##......###.......###...####....###.######....###################...###.......##...........#########........######....######################...######", "##########.#..#######...##########.#############........####...######################################....#...#######..##......###......####.....##.....################################...#####.......##..........##########.......#####....###############################", "########....#########...########..###############.......####...###########################.################...######..###.....#.......######.....##.....########################....###...#####........##.........###########......#####....#########.......###############", "#######.#.###########...########...###############.......###...###########.........#######......############.....###..####..........#########....##.....#######.....................###...######........#####.....############......####....#######.........###############", "..#####..############....######....################......##....#########...........#######.........#########......###########......##....####....###....######.....................###....#######........######################......###....####............#########......", "..####.#.##.....#####....#####.....#####........####.....##....######..............########.............#####...........###.......###.....####....##.....#####....................###....##########........######################....###....#...............#####..........", ".#####..###........###...#####.....###..........#####..........###.................########...............###....................####.....####....##....######....###################...##...#######........###########....#######....##....#.........###..#####...........", ".####..#####........##...#####.....###....############.........###..........###....##########.............####..................#####......###....###...############################....##....#######........##########.....############....#......#############...........", "#####..######.......##########....####..###############......#######..#########################..........######................######......###.....##..#####.........###############...###......######.......##########......###########....####################.......####", "####..########......#####################################....####################################################.............########......##.....###.####...............##########...###........#####......###########.......#########....###################....########", "####..#########.....######################################...###############################..####################.........#####..####......##.....########...................#####....#####.......######################........#######....###################...#########", "###..#####################.....###########################....############.........#########....................####......######....###.....###.....######......................##....#######........######################.......######....######.......######.###########", "##..######################.......###########............##....#.#####..................######...................##########..####....###.....###.....######....................####....########..........####################.......#####....####.........###############..#", "##..########....##########.......##########.............###...#.####....................#####..................#####...###..####....####.....##.....######....................###....###########..........########....#########.....####....##...........##############....", "##..####........###########....############.............###...#.###.....................######...............######....###...###....####.....##.....#######..........###########....##...#########.........#######.......#########..####....##......#################......", "##...##.............##...##...#############.............###.....#.......................###########........#######....####...###....####.....###....#######.......#############....###.....#########........######........##########..###...###..##################.......#", "##...##.............#....##################################.....#.......########........########################......####...###....#####....###....##########################....####.......#########......#######........##########.......#####################........##", "##...##..######.....#.....########......####################....##....#####################################..........#####....##....#####....###...##########################....######.........########....##########.......##########.....###################..........##", "##...#########......#........##..........###################....####################################.................#####....##....#####....########.................######....#######...........#####################.......########.....####################........####", "##....########.....###......###...........##################....##########........################..................#####.....##.....####....#######...................#####...########............######################......######......#####################.....######", "###....#######.....####......####.........##################....#########...............#########.................#######.....##.....####....#######...................####....##########...........########..############..########......######################...########", ".##.#...######....#####..##..#########...####.....###########...#####....................##########...........###########....###.....####.....######..................####....########..............#########...##################........######################..####.....", ".###.#..######....#####..##..################............####...####.....................###########..##################.....###.....####.....######................#####....###..........####......#######......##############..........#########################.........", ".###.#...#####...#######.##...###############..########.#####....###.....................###############################.....###.....####....#######.....################....###.........######.....#####.......##############..........#####.........##########...........", ".####.....#################...##......#######################....###...####..............##############################.....####....#####..#############################.....####.......########...######........##########...........######............#########..........", "######.#....##############....##.......#######################...###########.............#############################......####....###########...#####################.......###########################..........#######...........#######.............########.......###", "#########...................####........######################...##################.###########....##################......####.....##########.............############...##..###...############......######.......######..........#######.#########.....########...#######", "###...#####................#####.........#####.....###########...#####################....#####......###############.......####.....#########....................#####....##..##..........#............#######.....#####.........#####################...########.#########", "##....############################.......#####........########...########........######...#####......##############...########.....##########.....................###....###..##......................################..........###########################################", "#....######..######..##############.....######..........######...###......................#####......########################################.....................##....####..###................####################........##############################################", ".....######..######...#####..####################.........####...###......................############################....####################...................#.....#####...###........###########################.......######################...#####################.", "....#######..######...#####..#############.....####.......####...###..##..................###########################.....##########....#######.................##....#######...####....################.###########........####################.....######.....#########..", "....#####.....#####...#####...###########.......######....####...####################################################.....##########......#######################....#########...######################.........###........#################.........#####......########...", "...######.....#####...######..###########.........#####..#####...#####################################.......#########.....#########.......####################.....##########...##################.............###.......########...######..........#####......#######....", "...######.....#####...######...##########..........###########...#####################################..........######......########.........#################.....######.#####...#######......###......##......##.......########....######.........#########...######.....", "..#######.....#####...#######..############........###########...#####################################............####......########.............############.....######..#####....##..........###....#######..###.......########....#####........###################......", "..######......#####...###########....########.......#########....###########################################.......####......########.............##########....########...#####....#..........##################........########....#####........###################......", "..######.....######...##########.......#######......########.....##..###...........###########..........##########.####.......#######..................####....########....#####....#..........##################.......#########....####........######################....", "...#####.....######...##########........#######......######.....###....................#######..............############.......#######.................###....###..####....######....#.......####################.......########.....####.......#############.....#####....", "...#####....####################.........#######.....######.....####...................#######..................##############...#######...............##....###.....##.....#####....############################......#########.....####.......#######...........#####....", "...######...###########..########.........######.....#####......####...................##############..............##############..#######.............#....####.....##.....######....###############################.##########.....####......#######............#####....", "...#####....##########.....########........######....####......#########..............################................#####.#################..............#####.....##.....##..##....###################.....##################......###....########...........##########.", "########....#########........########.......#############.....###################.....#####################............####....####..################.....######......#.....##.####...###..##############.......#################.....###....#######..........#############", "########...##########.........#######........###########.....#########....#######################################......####........##############........########......#.....#.####...##..........#######.......#################.....####...#######........###############", "########...#########..........#########......##########.....###...................#########.........###############.....####........##########.........####...###......#.....######...##...........#######....###################.....##############.......################", "#########.#########............########........######......####.....................#######...............###################.........................####.....##......#......#####....##...........######...#####################....####.....###.......##################", "######################...........########......######.....#######...................#########.............##############..#####...................########.....###.....#......#####.....#..........########.######################..###.........##......###################", "...######################..........########...#####...#.###########.................#############........##........##.......####...............######..###.....###.............#####....###################.######............######......####........#############........", "...########################..........#############..##.#############...............##################.......................#########################....##......#......#......######...##########################...............###.....#########..########...............", "...##########################..........##########..####################............###############............###..........##########################....##......#......#.......#####...#####......###############...............#......############...####................", "...#############################.......#########.###############################..############..............###...........##..####..###########...####...##......#......##......#####....###...........###########............###.....####.........#....##.................", "..#####.....#####..###############......#######..################....######################...............####..........###.....##...##########...###....##......##.....####.....####....###.............############.........###....####............#...#............#####", "#######.....#####....#########################..###############...........#################............#####..........####....###....###....##....###....##......##......####.....####....###............##################...##....##..........######...#.....############", "#######.....#####..........#################...#########.....................###############....###########.........######....##....####....##.....##....##......##......#####....####....######.........############################............######..#...##############", "#######...#####...............#############....#########......................#############################........######....###....###.....##.....##.....#.......##.....#####....#####....#########################################...........########...#################", "#######...#####.....................######.....#############..................#############################......########....##.....###....####....##.....#.......###....######.......#....#################################....###..........###########..#################", "#######..#####.......................#####.....#######################..##....#############################.....########....###.....##.....####....##.............###....########......#....###..########################......###........##############...################", "##############..................##########....#############################################################....#########....##......##......###....###.....#......####....########.....#....###............############.......####.......#############.##...##........#####", "#############..............##############.....##########################################..#############################.....##.....###......###....###.....##.....####....#######......##....###............#########........#####......#######.........#.................#", "...######################################.....#########..............###################....###########################....###.....###......###....###.....###.....###.....######.....###.....##............########.......#######.....######...........##.................", "...#####################################......######..................#########..#######....#####..####################...###......###.....####....###.....####....####....#####......####....###..........#########.....########.....######.............#.................", "...#####################################......####....................#########..#######....#####...###################...###......###......###....###.....####.....###....####......######....####....#############..###########....######..............#...#####.........", "...#########.....######################.......####....................#########....######.....###....########################......###......###....####....####.....###....####......######.....#################################...#########.###........#...######........", "...#########.............##############.....#.#############...........##########....#####.....###....#####...################.....####......###....####....#####....####...###.......#######.....############.....###############..################.##...#...#############.", "############.............####....######.....#.##################.....###########......###.....###.....####...################.....#####.....###....####....#####....##########......#########....#########.........#################################.###.#...##############", "############......................####.....##...######################...########.....###......##.....####....###..##########....######.....###....####....#####.....########......#####..####....####.............#######################.###############...##############", "##############..................#####......#......####################....#######......###.....##.....####....###....###################...#####...####....#####.....########.....######...###.....##.............########################.###############...#....#########", "###############...............######.......#......######################....######.....###.....##......####...###....###########################...####....#####.....#######...#########...####....##...........########################..###....#########...........######", "##################...........#######......##.......############..#######.....#####.....####....###.....####...###....##################.########...####....#####.....######.###########....#####....#........#######......###....######...###.....#######.............#####", "##################.........########......###.......############....#####......#####.....###....###......###....##.....#####..#########..########..######...######....#################....######.....#############........##.....######...###.....#######...#...........###", "##################......###########......#######...#####...#####....#####......####.....###.....###.....###....##.....#####...########..#############################################.....######......#####..............##......#####....###....####.##....###.........###", "########.........#################......#################...####.....######.....###.....###......##.....###....###....#####....#######..#########################################.###.....######......#####..............#.......#####.....##....#######...#####........###", "########...........##############......##################...#####.....#####.....###......##......##......##.....##....#####....#######...###########################################....########..#....####.............#........####......##.....#####....######........##", "#######............#############......#########....#######....####.....#####.....###.....###......#......##.....##....#####....#######....####.######################...##########......########........###......................####.....###......####.......####........#", "#######............###########.......##########......######....####....######....###.....###......##.....##.....##.....####.....######....####...###################.......######......###....#....#.....#####.......#..........####.....####...######....#......##........", "#######...............######........###########......#######....###......#####...###.....###......##.....###....##.....####.....#######...####...###################.......######.....##.....##....##......#########...........####......###....#####....##.......######...", "######...............######......#####..#######........#####....####.....#####....###....####.....##.....###....##.....####.....#######...####....##..###########################....##......##....###......########..........#####.....####...#####....####.......#####..#", "######..............######......#####....#######........####.....####.....####....###....####.....##.....###....###....#####....#######...####....##...####..########################.......##....#####........#####........######......####...####....#####........#######", "######.............######.....#######.....######........#####.....####....#####...###....####....###......##.....##....#####....######....#####...##....###....###################..........##....#######.........##.......#####.......####..####.....##...##.......#######", "#####...........########....#########.....######.........####.....#####...##########################......##.....##.....####.....#####....####....##....####...#####..###########..........###.......#####...........###########......##########.....##....###......#######", "###.........##########.....##########.....#######........#####...####################################.....##.....##.....####......####....####....###...####....####...#########..........####.......########..........#########...###########......###.....##......#######", "#....################.....####...#################.......####################.................#######.....##.....##.....####......####....####....##....####....####....########..........###........###########...........#################.......####......#......#######", "####################.....#####....####....#########......###############..........................###.....###....##.....####......####....####....##.....###.....###.....########........###.........###....#######................####..........######......##.....#######", "###########.....####....######.....##.......#######......##########...........###############............####....###....#####.....####....####....##.....###.....###.....###################.........###....#########...........................#######.......##...########", "##########.......##....########....##...........################.........########################.......#####....###....#####.....####....####....##.....###.....###......#################..........###....#############.........................##..##......###.#########", "########........###...##..######...###..........############........############...#################.....###########....#####.....####....####....###....####......#......################...........###....####...##############.......###........#....#.....#############", "######..........##....#......#########...........########........###############...###################......########....#####.....####....####....###.....###......##......####....#######...........###....###....#########################..................#######....##", "####...........###...##.......#########..........#######.....###################...######...############.......######...####......####....####....###.....###.......#.......###......####............###....###....####...##################.............##...#####......##", "####..........####...##........###########.......####.....##############..####.....#####...#########..##.........###########......####....####....###.....####.......#......###......####............##.....###....####...###########...###..#............########.......##", "####.........#####...###.........#######################################...##......####...#########....###.........#########......####....####....###.....#####......##......##......###.....#......###.....###....####....###..####....##....#...........######.........##", "####.......######....####..........###########################...#######...#......#####....########....#####........########.....#####....####....###.....#####......##......###....###.....##......##......###....####....##....###.....#....##.......########..........##", "#####....########....#####..........############....###...####..#######....#......####....########....#########.......######.....####.....####....###.....######.....##......##########.....###.....##.....####.....###....##....###.....#.....##......######...........###", "#################...#######.........##########......###...###....######....#.....####.....######......##########.......#####.....####.....####....###.....######.....###......########.....##########......####.....####...##.....##...........###......####.........######", "....#############...###..####.......#########.......##...####....#####....#......###......#####......#############......####.....###.....####.....###.....######.....###.......######.....##########.....######.....####...##.....###.....#.....###.....####.......########", "....#############...##......###....########.........##...##.....#####.....#.....###......#####.......#####....#####.......##.....###.....####.....###.....######.....###.......#####.....##########.....#######.....###....##.....###.....#.....###.....#####...#########.." }; miwm/greenstucco.xpm0100664000076400007640000001707707675611373014150 0ustar bwisebwise/* XPM */ static char *greenstucco[] = { /* width height num_colors chars_per_pixel */ " 80 80 58 1", /* colors */ ". c #95bccf", "# c #95bcce", "a c #95bbce", "b c #94bbce", "c c #95bcce", "d c #92bacc", "e c #91b9cb", "f c #90b7cb", "g c #90b8ca", "h c #90b7ca", "i c #8fb6ca", "j c #8fb7c9", "k c #90b8c9", "l c #8fb6c9", "m c #8eb5c9", "n c #8eb6c9", "o c #8cb4c7", "p c #89b3c5", "q c #88b4c5", "r c #87b3c5", "s c #85b3c5", "t c #87b5c4", "u c #87b5c3", "v c #87b1c3", "w c #83adc0", "x c #7ea8bc", "y c #79a5b9", "z c #74a1b5", "A c #709db2", "B c #6b99ae", "C c #6696aa", "D c #6594aa", "E c #6191a6", "F c #5f90a6", "G c #5a8ba2", "H c #54879d", "I c #4e8399", "J c #508597", "K c #4b8097", "L c #487e95", "M c #497f93", "N c #498092", "O c #447b92", "P c #447b91", "Q c #3b748e", "R c #3b728e", "S c #3a738d", "T c #3a718d", "U c #38718d", "V c #38728c", "W c #37708c", "X c #37708b", "Y c #306b87", "Z c #306a87", "0 c #2e6987", "1 c #2e6a86", "2 c #2c6886", "3 c #2c6985", /* pixels */ "BwnBBAyEAAByABBCUEBBxxOHECywCBBBBzBGyBBBxuBGGxxBBzBBiyGOTIZIiyBBOBAunzBuxBBBBEBB", "znABBBBOBBECABC0IwxAyBUByyG1IBBBBAwAyBBBxxG1GxxGHCGGzOUHCCCBpBGCOwcuACXxBBBCXOzB", "jyCBBBBGCApxAC0IAbzGBGGBiEVHBBBBBtuBBBEByyXGBmAVHyVGBEyxxyBBxG1BAjABBXICGOOXIBwA", "AHBBBBGEBcwBBGEiiwGUBBBBwEHCBAwyrcABGCHBBzHBylBHBpBBBzixxyEBBIGxxBBBBOBBBBBBBycA", "BVGHGVVyAyBBBByBUOUGBBBBiACwzAyyxAIWXyGGBzzEAABGpjGVBBxBBBOBByxjxBBBBEBBBBBBBAyB", "GVBBGGBpBBBBBBG0GBBBBBBBpBAyCGBBBC1CBzOHBBEOBBBAxAGGBwjGGCVBycxxACHHCBCCAyBBBByA", "OHBBBBBzBBBBBBGGBAyBBBBByCBBOHBBHVIBBBGCBBBBBBBzBBBCjjE1GIIAcyBBG1OHCBCylzGBBAcy", "YCBAxyBBxBBBBBBBBiyEBBBBCGEC1CBBBBBBBBBBBpppyCBxBBBAyBHHBBBACEBBCCBBBxBBBHGjpjwB", "yBBpizGBxBBCGBBBzpBzpxBBBBzHOBBBAABBBBBBBpBBHHBBBCHGBCHAyxwBByyBBBAxjpBBBOywGCBI", "BHBiAHOBBCCUEyBBBBBBBBHBBBBGCBwAyCBBBBBBBpBBHHBBBIOByCByyxyCxjxBBGBxyBBBC1AOVzE1", "OOBxBUGBwbyHxxBBBBHBBBGCBBAyBBAIAABBBBBBwjCH1GBBBAjjyBAABBBAxxABI1CBBCGBHOBEBjBC", "AgyyCUBybABEwBHCBBBEHBGGBAcwxpBBjBGBBBBwcAVOGBBBAcwBBCGBBBBBBBBEVCBBG1IEVGwwBzEB", "ywABHGBiyBBBCOHABBBOBAAEAcwBBCOpx1BjxBwcAGVBBBBBxyHCBVGzBBBBBBBHHBBAAEBBEybACCEB", "BACGGByiBBBC0GBBBBBEycyBxpBBGHzpBGjwBzjABCzjyxxzcHHGOOBBIVBBBBBBxBBwpBCzBAABCGBp", "GCyBHBAGBBBCIBBBBCVHyyBBAABBVyzBCVpBOOHOEBAAAxxxwOBBBBBBGCxBBBBBBHBAyGzpGBBEBEwg", "HAiBEBBByABBGABBBCGBBBBBBBBBCjBBGEjGVBBEzzBBBBBCHVBBBBBBBByyCGBBGGBppByOIBBBxByA", "B#wBBGCByyGIAGBBBBBBBBGHCBBBAEHCByyVGBpxywBBBBC1OGBAwzBBppjyVIHOUyzxBCOSBBypgBBB", "iyUGIVCBBEVGEOBBByABBBGHGBBBBVHBABIVBBpByyBBBBGIBBycwzEByABBBzBByiBGBOOCBBwxABBB", "xGycAByxxxABBBBBzjyyAxBBByABCVBAABVCBBzEBBBBGVHBBBxxBBGCAyBBBBAxwxBByIBBBBBBBBOO", "CHzABApxxxABwjpyAEOVGxzxyjxBVIBBBzBxpzBEBBBBIGBECyxxBI1EpjCGBBAxxzTHBOBBBBBBHOOB", "1IEHOVIGABBHwABABCBBAjBByxABOBAxxjBBzCGBBzBIICywcyzHOVCpjBVGyBCGBHOBEOBBBBBBBBBB", "CBByABBxxBBOyyBBCBABxpBEBBBBOBxjxyBBBHOBBpBVCzpwABHHBBAcH1OyxBHOCTHBBBBBBBBBBygB", "ByrcyzBABGEGcyBCOHyByAGHyBCVOBpxBBGVOOAxjpCVycyBBBVGBBxpVCwbyBCCCHCBBBBBBBBBBAGO", "nmxABGGyBzyyyCVVOCEOBEIxyBOOBByCBBGGwcpxyBHOyyBBBBEBBBxxOwbABBBBEwABBygyABBBBBBB", "ABBBBCzcyjBHCHOBBBBBBBBpBBVCBBBCyBBzjABBBBGGBAHHHHCBzBxxGxABBBBIOaCBw#yAyyCByyBB", "BBBBBBAABBVOBGHBBBAjpxBxBBGCAxjjwBGIBBBBBGGHBCHHHCxBzxjz0GBBBBBUwpBzgBHHHSHw#BGB", "XOOOGOGBBBHBpyGBBBjwBBHBEECyjpyBBBGGAABBBVGHBBBBwcyBBBC0AppzBBBBiABGGOSHHHx#ACCB", "CBBBCHCzGCBxjBVBBBpBEBGCBEzBBBCVHBBByABBBGCwxCBBjABBBC0IpBBBBBBBBBGYGICBAp#ABBBx", "BBAxCBBBXCBCO1EyByjBBzHHBBxBBC1IwwBBCGEBBVGjBCBByCBBI0IBxBBBBBBBBBHHBBAp#pABBCOI", "xxvFGAyBBBEVOzcyxjyBBBCCBBBzBVIycABBOHBEOOBxBGGBCzABUCzBBCABBEBBBBCCBA#pABCSHSOC", "xxBIAcyEBBBAjjyBBBBBCCBBzypjGVBwyBBBGBxxABByyHGxzbAGUBxACABOUGyBBOEIGxpBBBIBgBBB", "BBXGxuBEBBBppBBBBBBBCBABByxAHHBBCGBBBypxECBpxCxpxwBGGBBIGBCHCpxBIUBICyyBBBBwAIGB", "BGXBxxBGGBBxBBBBBCHHGAABBBBBHHBBCGCABBBBVCykEBBBBBBBEBBBBBByiiABUCBBBwwBGHOTOTCB", "xCBxcyBOHBBCEABBBOVHGzBBBBBBGGBBBwcyBBBBHBAHICABBBBBBEBBBBAbyBBBEBBBAbAC0HHCAipp", "vBAxyCXXCBBBxpBBC1CBBpCOUEBBBEBBAcABBBBBGGBBAbyBBBBBBOBBBByzGBBBBBwwppG0IBBBxpBB", "nBCHHXOBBywzxxBBCGBBwiUOCzzBBBzycwBCHHAC0GBBxwUOHOOOOOBBBBBGByBBBEyAyACABBBBpyOI", "yBXOHHCBBzxzAEABBIGBiAHBBBAABBByyBG1OyxHOBBybzExiCCBBBBBBypiiyOOOOEBBBBCIBBBjHOC", "BBOBBBBBAcwBBwwBBVCBxBGGBBAzCBBBBBHHzjACABBxxBAxB0CByCBBBwxABBEBBBBxBBC0IBBByOGB", "XOOBBvBBxuBBBBBBBEyyzC0GwizCGBBBBC1GBEOGCByixBBBIGBAyHBBBBCCBBBEBBBpBBGIBBBBCHBx", "GBBBwnEynxBCHHHCBByyEGGBiABBAwBBBVHyBBBCBAyxABBBBxpixCBBBBCGHBBGGAyyABBCCBBAyAcp", "AvxnnAByyGAHVHHCBBBCUAxpiBBIApBBIVACCxpipxBBBGHOCBBBIUEpyCByAxBOHjwwyBBCGBBjwwwB", "cvzyBBBBOIyCyyxpwBBUIipxAGO0BBHH1CBBpjxAEEBBBUHGpBBBUCBzOHpjAzOVCyOIBBBIGxByHHOI", "yBBBCXEBWzjBBAxxABBGpiBBG0HCBzBGBjppjABBOHGAEOybwBBCUBBBGzjBBCGBBCHCEHBHpzHCHHHC", "AABBXIwyBjyBBHBBBBCExABBGGBBBwxAyyBBBBBBHEppCIyyBBC0IBBBBjyBC1GBwjyyBBAzyGVBBBBB", "AABBBunABBBBBCCOHBUIBBCGBCCBBBBCIEHGHCBBCzbAOOBAABGIBBBBBpBBVIzpjAAyxycyBHHBBBBy", "ByyBBBBBBBBBBBOBBEOApyHGyOHBBBBIIBBGHyBBBAAOHBBiyBBCCBBByjBBBzBAABBBBAzHGHHBBBBC", "BxxBBBBBBBBBBUIBBBBiyGBEGVCwyBBBBBBBBpBBCCBBiBCzEBBOHBBwcyBBBBzpxBBBBBHVGIGBzBBy", "BxxCHCBBBBBBIUBBBBBzHwEOjppjHGBBBBBBByABUEABEHHBEBBICBByABBBBBByABOOHG1BxABwnEBx", "GxxHOxIGBBBEUCBBBBBBAE1zwBBBVCBAxyBBBpxCUyyIHzGBBBBBxpyCEHEBBBIHHOVBBGBcxAycAGCC", "AmxHyCVzyBBBzzBBywBBBEwwBBBBGxxcpyBApkGUOAwUpyOBBBBzBBHHBBAyBG1EHHBxABxxBByyBGGB", "xxAAGHBACGCBBGGAbyHBBxjABxBBAxxzHCBwpGUHBawOyAHBBBByABOHApcyBCCBBBjpBCjyBBBBBBBB", "HCBBHBBAyGCEBHHywBOBBxxBBzBBBBG1OCCGBUGAawGUxACxACBpxI1CjpABBBBAxpjBHHyABCHGBBBB", "VGEBGEjjwBBEHUGBEEHBBAyBCIBBBBGCByBIAUBppBHzxIGOUCycE1CwjBBBBCHzxxAEGCyyBWOGHOEB", "pByyHzpBBEEBBwABByyEBByAIIxBBBBzxjyxwCywGOZBGHBBAxjxOHBjABCCC1CxBGVOBCGBBHByABBz", "yOAyCxABBBEBByIBByBVBBxxByjBBBBBCABBBByHHHBiyCBBipxAVCBBIVEA1IyyBVGBwHBxwGzcAyAB", "BEBzEBBBBGUEBBEBBBGGBByyBAABBBOHAABBBBBBpwbpAIGBBGCBOBBBCCjGOBAwBOBpjAjxE1xAByGz", "BBGCEGABI0GwwBBBBBBzBBBBBBBBBBEBzBBBBBBBBEEBG0CpyECBOBBBByjCCBxpBBppGCBC1CzCHHCv", "BBVCBjwBVCwbAEBBBAjyGBBBBECVEBBzpzBBCUOGUUCC0GAjHHBEIpjyCyyBGGABCBBG1CG1IBABOHBC", "BBGABxBBOzxGHCxzBwwHHyyBBEIIAyBBBBBBHOBCGBBGGBxpHHApcpH1GBxBHHBCGGCVGBGGBBmwzBCy", "OEABCBCCOBGHHCBBBBHVyjyEBBwjjwBBBBBBCGBBBBBBBByyCBcpAG1CBAjBHCjxzCBGBBByABqBBCCy", "BBC1GBCGOywzBBxBGGByjBEGyBjABBBBBBBBBOBBBBBBByAxBAyBC1EABppBCxyBzxjyEBBAGyjGH1GA", "wBCGBBBBBjyzBByACAByyBByyxpBBBBBBIIBBOBBBBBBwcApCVEBVIxppjABBCGBBBBBOBAjpjB1HGyw", "xzBBBBBBzpBBBAzyBBEBBBGIBBCHHVHBG1CEOOByyBAxBEHAGGyyEyjxBBBBBGByBBBCVBjwBBHHBycy", "EOXBBBBBBBBBBOHAHCGGBEVGEBVOHExCVGBBBBwcyBpDGCHyBzwyByxABBGHGByAIVOVIAjBBBHHBpxB", "XHCBBBBBBBxBBVCCHCVGAjpxzyIBBjpGBAxxxpcABBzOBBwjBCHGBGGBBC1HByBIGxyxpcxGBBGBxwGW", "BBywBBAxxsjBIVpyCBEBxpBBzwCBBBOOBxjxxxABCVVGBycIOVOGHVGEG1IByBOUkAyxxAHCyBGzxHHG", "AvcyEBnuxCGE1CxHHByyyyBBBBEAyAxxyzxBBIHH1HxABjyHBBBBBAxAGEipxGHpwBBEBBCxAI0GOOBB", "AAHGXEvBG1yBHBBCBjjBGxBBBBByywpxBypBBVEHGjpywjBExBBBBjwHBywBBHBzGHSCyBCABHzBwiyC", "BCCGGynBGBuHGBByxyBOHzEBCHHCBBBG1zACGEzByjBBEOOOzOBBBBUIBBAABOBBGHB#ABAABAyxgAOH", "zBBEBvxBByBIBBBxxBBEpzEHVOHGEBI1GBHVGzzzjyBBHHBAxVByxAAyBBABHOCBBByCGGBBBBBBBGYC", "xBBPvnABCGHHBBBpxBBAABEBBBBBBHVCBBBBBxBBzGCBCCBjzGBixCxyGBBCHHCBAfyGGGBBBGSHGYEx", "vBGXvBBG2ICGBBBjACGBBBEBBBApABBBBBBByjBBG1GHBExpCIyhBOzCGBBAABBy#wOHBByyBHBBGGgp", "zEKEnBJ3GwnEBBzpBVEyBOBHBBxjIBBBBBBBpxBBCABAwBzBVIgyBEgyBBBxyCy#yEQCBBeyBAyzBBxC", "ByywwBJCByAIGBBBOOwyBBpHBBzxEzBBAjzAcABBBBHxwGBBHBBGCIGBGGBxBHAyBBCAByeBBCHNIBAH", "ydABBBBzBBEXCBywEBzzBBBBzwcwBzxpjwBwwBBBBGVAHICABBBCGSCERGBpAByyABAyy.yBHQMHCBxy", "yyBBBBBCIBBBBBjyHBBEOOEBByABBBBBBBBBBIVGVVGBBBxxBBxyABAxeppeAyBAxBBBAyBBBEBBBBAz", "AwBBCHCOOBBBBBpBHBBBBBBBBBBBBBBBCVOBG1CCGBBBBBgyBBBACA#pyBBBGHYAxBBGIGCBBEweweye", "oyBBCGyBzxABBBpBEEyyBBByzGBBBBBBGIBpCBABBBBBBygBBBBBGEzCBBBBQGxezCCYGGyBBByAAABH", "vBBBBAxAAxBCBBpBBHjyEBBAHByBBBEBBzppBAyxzBBBBgyBBBBBNHCCBLLBEppCYIQIByeCGBBBBCYI", "vBBBBGHCBBHHBAlBCVBOOpyzjjABBGVBBBBBBBBBCGyCBpBBBBGGHzBBAQBpGCLQIyABBezYIHHBBHLB" }; miwm/manage.cc0100664000076400007640000003263207701027311012611 0ustar bwisebwise//-*-c++-*- // ------------------------------------------- // RCS data: // $Date: 2003/07/03 13:25:29 $ // $Revision: 1.2 $ // $Source: /cvsroot/miwm/miwm/miwm/manage.cc,v $ // $Id: manage.cc,v 1.2 2003/07/03 13:25:29 sgbeal Exp $ // $RCSfile: manage.cc,v $ // ------------------------------------------- // Copyright by Ben Paul Wise. // ------------------------------------------- // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program 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 General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // ------------------------------------------- #include #include #include #include #include #include #include "miwm.h" void setshape(Client *); static int getprop(Window, Atom, Atom, long, unsigned char **); static int getstate(Window, int *); static void apply_gravity(Client *); //------------------------------------------------- static void apply_gravity(Client *c) { if (c->size.flags & PWinGravity) { switch (c->size.win_gravity) { case NorthEastGravity: c->size.x -= 2 * border; break; case SouthWestGravity: c->size.y -= 2 * border; break; case SouthEastGravity: c->size.x -= 2 * border; c->size.y -= 2 * border; break; } } } void getTransientFor(Client *c) { Window trans = None; XGetTransientForHint(dpy, c->window, &trans); c->trans = trans; } void withdraw(Client *c) { if (c->parent != root) { XUnmapWindow(dpy, c->parent); c->isMapped = 0; // is this right? XReparentWindow(dpy, c->parent, root, c->size.x, c->size.y); } XRemoveFromSaveSet(dpy, c->window); setClientState(c, WithdrawnState); // Flush and ignore any errors. X11 sends us an UnmapNotify before it // sends us a DestroyNotify. That means we can get here without knowing // whether the relevant window still exists. ignore_badwindow = 1; XSync(dpy, False); ignore_badwindow = 0; } static void installcmap(Colormap cmap) { if (cmap == None) cmap = DefaultColormap(dpy, DefaultScreen(dpy)); XInstallColormap(dpy, cmap); } void cmapfocus(Client *c) { int i; int found; Client *cc; if (c == 0) installcmap(None); else if (c->ncmapwins != 0) { found = 0; for (i = c->ncmapwins - 1; i >= 0; i--) { installcmap(c->wmcmaps[i]); if (c->cmapwins[i] == c->window) found++; } if (!found) installcmap(c->cmap); } else if (c->trans != None && (cc = getClient(c->trans)) != 0 && cc->ncmapwins != 0) cmapfocus(cc); else installcmap(c->cmap); } void getColormaps(Client *c) { int n; int i; Window *cw; XWindowAttributes attr; if (c == 0) return; n = getprop(c->window, wm_colormaps, XA_WINDOW, 100L, (unsigned char **) &cw); if (c->ncmapwins != 0) { XFree(c->cmapwins); free(c->wmcmaps); } if (n <= 0) { c->ncmapwins = 0; return; } c->ncmapwins = n; c->cmapwins = cw; c->wmcmaps = (Colormap *) malloc(n * sizeof(Colormap)); for (i = 0; i < n; i++) { if (cw[i] == c->window) c->wmcmaps[i] = c->cmap; else { XSelectInput(dpy, cw[i], ColormapChangeMask); XGetWindowAttributes(dpy, cw[i], &attr); c->wmcmaps[i] = attr.colormap; } } } void // Terminate(int signal) Terminate(int) { // parameter signal is unused cout << endl; cout << "Terminating MIWM ... "; delete theWM; theWM = NULL; // Give up the input focus and the colormap. XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime); installcmap(None); XCloseDisplay(dpy); StopMemoryLeakCheck(); cout << "Terminated MIWM at "; cout << __TIME__<<", "<<__DATE__<name == 0); // This hack is necessary because xwsh uses // COMPOUND_TEXT rather than STRING for its WM_NAME property, // and anonymous xwsh windows are annoying. if (XGetWindowProperty(dpy, c->window, XA_WM_NAME, 0L, 100L, False, AnyPropertyType, &actual_type, &format, &n, &extra, (unsigned char **) &name) == Success && name && *name != '\0' && n != 0) { if (c->name != 0) XFree(c->name); c->name = name; // this pair of lines mysteriously locks up the screen, // keyboard, and mouse... // c->name = stringCopy(name); // XFree(name); if (!was_nameless) theWM->drawClientBorder(c, c == current); } if (c->name == 0) return; class_hints = XAllocClassHint(); if (class_hints != 0) { XGetClassHint(dpy, c->window, class_hints); if (class_hints->res_name != 0 && !strcmp(class_hints->res_name, c->name)) { XFree(c->name); c->name = 0; XFree(c->fallback_name); c->fallback_name = stringCopy(class_hints->res_name); } XFree(class_hints->res_name); XFree(class_hints->res_class); XFree(class_hints); } return; } void getNormalHints(Client *c) { int x, y, w, h; long msize; float innerMinimumFactor = 1.0; // We have to be careful. The ICCCM says that the x, y // and width, height components are not used. But we use them, so // we need to save and restore them whenever we fill the size struct. x = c->size.x; y = c->size.y; w = c->size.width; h = c->size.height; // Do the get. if (XGetWMNormalHints(dpy, c->window, &c->size, &msize) == 0) c->size.flags = 0; // Correct the minimum allowable size of this client to take account of // the window border. if (c->size.flags & PMinSize) { c->size.min_width += 2 * border; c->size.min_height += 2 * border + titleHeight(); } else { c->size.flags |= PMinSize; c->size.min_width = ((int) ((2 * border) + (innerMinimumFactor * border))); if (c->accepts_focus) c->size.min_height = ((int) ((2 * border + titleHeight()) + (innerMinimumFactor * border))); else c->size.min_height = ((int) ((2 * border) + (innerMinimumFactor * border))); } // Correct the maximum allowable size of this client to take account of // the window border. if (c->size.flags & PMaxSize) { c->size.max_width += 2 * border; c->size.max_height += 2 * border + titleHeight(); } // Ensure that the base width & height and the width & height increments // are set correctly so that we do not have problems resizing if (!(c->size.flags & PBaseSize)) c->size.base_width = c->size.base_height = 0; if (!(c->size.flags & PResizeInc)) c->size.width_inc = c->size.height_inc = 1; // If the client gives identical minimum and maximum sizes, we do not // want the user to resize in that direction. if (c->size.min_width == c->size.max_width) c->size.width_inc = 0; if (c->size.min_height == c->size.max_height) c->size.height_inc = 0; // Restore the window-manager bits. c->size.x = x; c->size.y = y; c->size.width = w; c->size.height = h; } static int getstate(Window w, int *state) { long *p = 0; if (getprop(w, wm_state, wm_state, 2L, (unsigned char **) &p) <= 0) return 0; *state = (int) *p; XFree(p); return 1; } //------------------------------------------- // class related stuff //------------------------------------------- // manage takes a new client (see scanWindowTree) void WindowManager::manageClient(Client * c, bool preexisting ) { int dohide; int state; int th = titleHeightc(c); XWMHints * hints; XWindowAttributes current_attr; XSetWindowAttributes attr; // For WM_PROTOCOLS handling. Atom *protocols; int n; int p; // Get the hints, window name, and normal hints (see ICCCM // section 4.1.2.3). hints = XGetWMHints(dpy, c->window); getWindowName(c); getNormalHints(c); // Get the colormaps associated with this window. Get the window // attribute colormap first, then look to see if the // WM_COLORMAP_WINDOWS property has been used to specify windows // needing colormaps that differ from the top-level colormap. // (See ICCCM section 4.1.8.) XGetWindowAttributes(dpy, c->window, ¤t_attr); c->cmap = current_attr.colormap; getColormaps(c); // Scan the list of atoms on WM_PROTOCOLS to see which of the // protocols that we understand the client is prepared to // participate in. (See ICCCM section 4.1.2.7.) if (XGetWMProtocols(dpy, c->window, &protocols, &n) != 0) { for (p = 0; p < n; p++) { if (protocols[p] == wm_delete) c->proto |= Pdelete; else if (protocols[p] == wm_take_focus) c->proto |= Ptakefocus; } XFree(protocols); } // Get the WM_TRANSIENT_FOR property (see ICCCM section 4.1.2.6). getTransientFor(c); // Work out details for the Client structure from the hints. if (hints && (hints->flags & InputHint)) c->accepts_focus = hints->input; if (!getstate(c->window, &state)) state = hints ? hints->initial_state : NormalState; dohide = (state == IconicState); // Sort out window position. { Window root_window; int x, y; unsigned int w, h; unsigned int border_width, depth; XGetGeometry(dpy, c->window, &root_window, &x, &y, &w, &h, &border_width, &depth); // Do the size first. Note that // "The size specifiers refer to the width and height of the // client excluding borders" -- ICCCM 4.1.2.3. c->size.width = w + 2 * border; c->size.height = h + 2 * border; // OpenGL programs often appear smaller than their // minimum sizes, which they do not handle well. if (c->size.width < c->size.min_width) c->size.width = c->size.min_width; if (c->size.height < c->size.min_height) c->size.height = c->size.min_height; // Do the position next. // assign to the current workspace c->workSpace = theWM->workSpace; // If we have a user-specified position for a top-level window, // or a program-specified position for a dialogue box, we'll // take it. if (c->trans != None && c->size.flags & PPosition) { // It is a "dialogue box". Trust it. c->size.x = x; c->size.y = y; } else if (c->size.flags & USPosition) { // Use the specified window position. c->size.x = x; c->size.y = y; // We need to be careful of the right-hand edge and // bottom. We can use the window gravity (if specified) // to handle this. (See section 4.1.2.3 of the ICCCM.) apply_gravity(c); } else { // No position was specified: use the auto-placement heuristics. if( ! preexisting ) theWM->autoPlaceCoords(c); } } // absolutely ensure the top-left corner is on the screen. c->size.x = imax(0 , c->size.x); c->size.x = imin(c->size.x, display_width - 2 * border); c->size.y = imax(th , c->size.y); c->size.y = imin(c->size.y, display_height - 2 * border); if (hints) XFree(hints); // all the reparenting stuff. // I could ignore the shaped windows, but that makes // it impossible to move/resize/hide/kill them. So // I go ahead and do it, but it is hard to get hold of // shaped clients like xeyes or oclock. // if (!isshaped(c->window)) if (1) { c->parent = XCreateSimpleWindow(dpy, root, c->size.x, c->size.y, c->size.width, c->size.height, 1, theWM->parentWindowColor.pixel, theWM->inactiveBorderColor.pixel); attr.event_mask = ExposureMask | EnterWindowMask | ButtonMask | SubstructureRedirectMask | SubstructureNotifyMask; attr.cursor = frame_cursor; XChangeWindowAttributes(dpy, c->parent, CWCursor | CWEventMask, &attr); XResizeWindow(dpy, c->window, c->size.width - 2 * border, c->size.height - 2 * border); } // X11 doe no't let us change border width. It's a window // attribute, but it is somehow different. XSetWindowBorderWidth(dpy, c->window, 0); attr.event_mask = ColormapChangeMask | EnterWindowMask | //LeaveWindowMask | PropertyChangeMask; attr.win_gravity = StaticGravity; attr.do_not_propagate_mask = ButtonMask; XChangeWindowAttributes(dpy, c->window, CWEventMask | CWWinGravity | CWDontPropagate, &attr); XReparentWindow(dpy, c->window, c->parent, border, border); setshape(c); XAddToSaveSet(dpy, c->window); if (dohide) hide(c); else { // Map the new window in the relevant state. c->hidden = False; XMapWindow(dpy, c->parent); XMapWindow(dpy, c->window); c->isMapped = 1; setactive(c, 0, 0L); setClientState(c, NormalState); } if (current != c) cmapfocus(current); return; } // ------------------------------------------- // end of manage.cc // ------------------------------------------- miwm/menu.cc0100664000076400007640000003445207702755530012343 0ustar bwisebwise//-*-c++-*- // ---------------------------------------------- // RCS data: // $Date: 2003/07/09 09:07:36 $ // $Revision: 1.6 $ // $Source: /cvsroot/miwm/miwm/miwm/menu.cc,v $ // $Id: menu.cc,v 1.6 2003/07/09 09:07:36 sgbeal Exp $ // $RCSfile: menu.cc,v $ // ------------------------------------------- // Copyright by Ben Paul Wise. // ------------------------------------------- // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program 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 General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // ------------------------------------------- // these are very simple menus: no icons, no cascading // ------------------------------------------- #include "miwm.h" #include "mimenu.h" #include "ws.h" #include "EPropertyList.h" #include "miwm_framework.h" // ---------------------------------------------- Menu::Menu() { enterAction = NULL; exitAction = NULL; releaseAction = NULL; items = new NodeList(); // data of type MenuItem // totally arbitrary start up defaults, but they are always // the most recent position of the popup menu x = 100; y = 100; iWidth = 60; iHeight = 10; length = 4; mHeight = iHeight * length; mWidth = iWidth; currItem = -1; prevItem = -1; currMI = NULL; prevMI = NULL; } Menu::~Menu() { if (items != NULL) obliterateNodeList(items); } // ---------------------------------------------- void Menu::setDimensions() { int w = 0; // Widest string so far. Node *miND = NULL; MenuItem *mi = NULL; iWidth = 0; iHeight = 0; length = items->length(); if (0 == length) return; w = 0; for (miND = items->first; miND != NULL; miND = items->nextNode(miND)) { mi = ((MenuItem*) miND->data); w = imax(w, XTextWidth(popup_font, mi->label.c_str(), mi->label.size() + 1) ); } iWidth = w + border; iHeight = popup_font->ascent + popup_font->descent + 1; mWidth = iWidth; mHeight = length * iHeight; return; } // ---------------------------------------------- // menu operations void Menu::startMenuing(XButtonEvent *xbe) { // cout << "Start menuing" << endl << flush; int xNew, yNew; // float N = 10; assert (wmMenuing == theWM->mode); if (-1 == currItem) // if user did not set anything, guess at a default currItem = 0; XChangeActivePointerGrab(dpy, theWM->moving_event_mask, menu_cursor, CurrentTime); if (items->length() > 0) currMI = ((MenuItem*) items->first->data); else currMI = NULL; prevItem = -1; prevMI = NULL; if (items->length() == 0) { // cout << "No items to menu. Stopping menuing" << endl; theWM->mode = wmReady; return; } // we place the menu to the right, with the current item chosen y = ((int)(xbe->y_root - iHeight * (currItem + 0.5))); // x = ((int)(xbe->x_root - iWidth / N)); x = ((int)(xbe->x_root - border/2)); if ((x < border) || (x + iWidth > (display_width - border))) { // we adjust the menu to be completely on the screen horizontally. // this is not as critical as the vertical dimension, so // we do not bother warping the pointer x = imax(border, imin ( x, (display_width - border) - iWidth)); } if ((y < border) || (y + ( iHeight * items->length() ) > (display_height - border))) { // we adjust the menu to be completely on the screen vertically, // and warp the pointer appropriately y = imax(border, imin( y, (display_height - border) - iHeight * items->length())); } xNew = x + border/2; yNew = iround(y + iHeight * (currItem + 0.5)); XWarpPointer(dpy, // obvious None, // unknown meaning and function root, // window coordinate system to use 0, 0, 0, 0, // unknown meaning and function xNew, yNew); XMoveResizeWindow(dpy, popup, x, y, mWidth, mHeight); // do not highlight the chosen item - menu::expose will do that XMapRaised(dpy, popup); return; } void Menu::motionNotify(XEvent*) { assert (wmMenuing == theWM->mode); // cout << "Continue menuing" << endl << flush; // a silly little demo to show I know what I am doing: // mWidth = (mWidth + 1) % 20; // mWidth = imax(5, mWidth); // mHeight = (mHeight + 1) % 60; // mHeight = imax(mHeight, 15); // getMouse (&x, &y); // XMoveResizeWindow(dpy, popup, x, y, mWidth, mHeight); Node *nd = NULL; Client *hc = NULL; int i = 0; prevItem = currItem; prevMI = currMI; currItem = whichMenuItem(); currMI = NULL; if (currItem >= 0) { // on the menu for (nd = items->first, i = 0; ((nd != NULL) && (currMI == NULL)) ; nd = items->nextNode(nd), i = i+1) { if (i == currItem) currMI = ((MenuItem*) nd->data); } } if (currItem != prevItem) { // cout << "You are now on item " << currItem << endl; // cout << " " << currMI << endl; // Unhighlight previous item if on menu. if (prevItem >= 0 && prevItem < length) { XFillRectangle(dpy, popup, menu_gc, 0, prevItem * iHeight, iWidth, iHeight); } // Highlight current item if on menu. if (currItem >= 0 && currItem < length) { XFillRectangle(dpy, popup, menu_gc, 0, currItem * iHeight, iWidth, iHeight); } } if ((hiddenClientMenu == theWM->whichMenu) && (1 == theWM->previewCP)) { if (currItem != prevItem) { // exit action if (NULL != prevMI) { hc = ((Client*) prevMI->data); theWM->undoFullPreview(hc); } // enter action if (NULL != currMI) { hc = ((Client*) currMI->data); theWM->doFullPreview(hc); } } } return; } void Menu::buttonRelease() { assert (wmMenuing == theWM->mode); Client* c = NULL; Node* cND = NULL; WorkSpace* ws = NULL; WMOperation op = NULL; // cout << "End menuing" << endl << flush; // cout << "You released on item " << currItem << endl; if (NULL != currMI) // we were actually on the menu switch (theWM->whichMenu) { case hiddenClientMenu: c = ((Client*) currMI->data); cND = theWM->hiddenClients->inList((void*) c); if (cND != NULL) theWM->hiddenClients->remove(cND); theWM->unhideClient(c); break; case operationsMenu: op = ((WMOperation) currMI->data); op(); break; case changeWSMenu: ws = ((WorkSpace*) currMI->data); theWM->changeWorkSpace(theWM->workSpace, ws); break; case sendCtoWSMenu: ws = ((WorkSpace*) currMI->data); if (ws != theWM->workSpace) theWM->sendClientToWorkSpace(current, ws); break; case commandMenu: theWM->spawn((char*) currMI->data); break; default: break; } // cout << "Menuing mode released = " << theWM->whichMenu << endl << flush; theWM->clearMenu(); // wipe out that pesky data! obliterateNodeList(items); items = NULL; theWM->whichMenu = noMenu; // this is very important: you have to keep the popup displayed and // receiving XEvents until the release-action is completed. // For example, on sending a client to another WS: // if you pop it down right away, then the client grabs focus and // stays on the WS. This way, the client goes away first, THEN the // popup is unmapped. XUnmapWindow(dpy, popup); return; } void Menu::expose() { assert (theWM->mode == wmMenuing); Node *miND = NULL; MenuItem *mi = NULL; int tx, ty; int i = 0; for (miND = items->first; miND != NULL; miND = items->nextNode(miND)) { mi = ((MenuItem*) miND->data); tx = (iWidth - XTextWidth(popup_font, mi->label.c_str(), mi->label.size())) / 2; ty = i * iHeight + popup_font->ascent + 1; i = i + 1; XDrawString(dpy, popup, menu_gc, tx, ty, mi->label.c_str(), mi->label.size()); } // Highlight current item if on menu. if (currItem >= 0 && currItem < length) XFillRectangle(dpy, popup, menu_gc, 0, currItem * iHeight, iWidth, iHeight); return; } int Menu::whichMenuItem() { int mx, my; int item; getMouse (&mx, &my); // root coords mx = mx - x; // now menu coords my = my - y; // now menu coords if ((mx < 0) || (my < 0) || (mx > mWidth) || (my >= mHeight)) item = -1; else item = my / iHeight; // cout << "you are on item " << item << endl << flush; return item; } // ---------------------------------------------- MenuItem::MenuItem() { label = std::string(); data = NULL; } MenuItem::MenuItem(const char* lbl, const void* dt) { label = std::string(lbl); data = dt; } MenuItem::~MenuItem() { // cout << "deleting menu item " << label << endl << flush; // leave data alone, except in one special case if ((wmMenuing == theWM->mode) && (commandMenu == theWM->whichMenu)) { // cout << "deleting data"<items) { for ( nd = menu->items->first; nd != NULL; nd = menu->items->nextNode(nd)) { mi = ((MenuItem*) nd->data); delete mi; nd->data = NULL; } } if (NULL != menu->items) { obliterateNodeList(menu->items); menu->items = new NodeList(); } else menu->items = new NodeList(); assert (menu->items->length() == 0); menu->currItem = 0; // point at top workspace, initially return; } void WindowManager::setWSMenu() { WorkSpace* ws; int i; MenuItem *mi; clearMenu(); menu->currItem = 0; // point at top workspace, initially for (i=0; icurrItem = i; // point at current WS mi = new MenuItem (ws->label.c_str(), (void*) ws); menu->items->append((void*) mi); } menu->setDimensions(); whichMenu = noMenu; // you must say which purpose it will serve! return; } // ---------------------------------------------- void WindowManager::setClientOpsMenu() { MenuItem* mi = NULL; clearMenu(); menu->currItem = 0; // point at first operation if (0 == current->sticky) mi = new MenuItem("Make Sticky", (void*) toggleSticky); else mi = new MenuItem("Make Unsticky", (void*) toggleSticky); menu->items->append(mi); mi = new MenuItem("ID", (void*) idCurrent); menu->items->append(mi); mi = new MenuItem("Kill", (void*) terminateCurrent); menu->items->append(mi); menu->setDimensions(); whichMenu = operationsMenu; return; } // ---------------------------------------------- void WindowManager::setWMOpsMenu() { MenuItem* mi = NULL; clearMenu(); menu->currItem = 0; // point at first operation mi = new MenuItem("Retile WS", (void*) retileWS); menu->items->append(mi); mi = new MenuItem("Contract WS", (void*) contractWS); menu->items->append(mi); mi = new MenuItem("Step WS", (void*) stepWSup); menu->items->append(mi); mi = new MenuItem("Rotate Clients", (void*) rotateClients); menu->items->append(mi); if (1 == theWM->protectTopLeft) mi = new MenuItem("Allow off-screen", (void*) toggleTopLeft); else mi = new MenuItem("Force on-screen", (void*) toggleTopLeft); menu->items->append(mi); if (1 == theWM->raiseOnFocusP) mi = new MenuItem("No Autoraise", (void*) toggleRaiseOnFocus); else mi = new MenuItem("Raise on Focus", (void*) toggleRaiseOnFocus); menu->items->append(mi); #ifdef USE_PIXMAPS if (1 == theWM->usePixmapsP) mi = new MenuItem("No Pixmaps", (void*) togglePixmaps); else mi = new MenuItem("Use Pixmaps", (void*) togglePixmaps); menu->items->append(mi); #endif if (1 == theWM->tileP) mi = new MenuItem("No Tiling", (void*) toggleTiling); else mi = new MenuItem("Tile New", (void*) toggleTiling); menu->items->append(mi); if (1 == theWM->previewCP) mi = new MenuItem("No Preview Clients", (void*) toggleClientPreview); else mi = new MenuItem("Preview Clients", (void*) toggleClientPreview); menu->items->append(mi); mi = new MenuItem("Restart miwm", (void*) restartWM); menu->items->append(mi); mi = new MenuItem("QUIT miwm", (void*) terminateWM); menu->items->append(mi); menu->setDimensions(); whichMenu = operationsMenu; return; } // ---------------------------------------------- void WindowManager::setHiddenClientMenu() { Node *cND; Client *c; MenuItem *mi; clearMenu(); menu->currItem = 0; // point at last one hidden if (hiddenClients->length() > 0) { for (cND = hiddenClients->first; cND != NULL; cND = hiddenClients->nextNode(cND)) { c = ((Client*) cND->data); if (c->workSpace == workSpace) { getWindowName(c); mi = new MenuItem(choose_label(c), ((void*) c)); menu->items->append((void*) mi); } } } menu->setDimensions(); assert (menu->items->length() <= hiddenClients->length()); whichMenu = hiddenClientMenu; return; } // ---------------------------------------------- void WindowManager::setShellCmdMenu() { MenuItem *mi = NULL; clearMenu(); menu->currItem = 0; // point at top command EPropertyList list; if( ! list.load( miwm::homePath() + "/" + "miwm.usermenu" ) ) return; typedef EPropertyList::string_list PSLIST; PSLIST::const_iterator it = list.orderedKeys().begin(); PSLIST::const_iterator eit = list.orderedKeys().end(); std::string val; while( it != eit ) { val = list.getString( (*it) ); if( val.empty() ) { ++it; continue; } // no point, is there? mi = new MenuItem(); mi->label = (*it); mi->data = (const void *) val.c_str(); menu->items->append((void*) mi); ++it; } menu->setDimensions(); whichMenu = commandMenu; return; } // ---------------------------------------------- // end of menu.cc // ---------------------------------------------- miwm/miconfig.h0100664000076400007640000000734307675611373013040 0ustar bwisebwise//-*-c++-*- // ------------------------------------------- // RCS data: // $Date: 2003/06/23 14:47:23 $ // $Revision: 1.1.1.1 $ // $Source: /cvsroot/miwm/miwm/miwm/miconfig.h,v $ // $Id: miconfig.h,v 1.1.1.1 2003/06/23 14:47:23 bwise837 Exp $ // $RCSfile: miconfig.h,v $ // ------------------------------------------- // Copyright by Ben Paul Wise. // ------------------------------------------- // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program 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 General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // ------------------------------------------- // configurable defaults. these need adjustment // from system to system and person to person // ------------------------------------------- #ifndef MICONFIG_H #define MICONFIG_H // ------------------------------------------- #include "miwm.h" const int maxNumWorkSpaces = 100; // anything beyond this is ridiculous // ------------------------------------------- // defining this will cause verbose event-logging // #define MIWM_TRACE_ALL_X_EVENTS // my preferences #define DEFAULT_TITLE_FONT "-*-lucida-bold-r-normal-sans-12-*-*-*-p-*-iso8859-1" #define DEFAULT_POPUP_FONT "-*-lucida-medium-r-normal-sans-10-*-*-*-p-*-iso8859-1" // if you are desperate for screen space, this helps (but is ugly) // #define DEFAULT_TITLE_FONT "6x9" // #define DEFAULT_POPUP_FONT "6x9" // define this to make background pixmaps possible. // they just look like a weak attempt to imitate // Enlightenment. Perhaps with better pixmaps they would // look decent ... #define USE_PIXMAPS // I don't use this, and it wastes space // #define SPECIAL_POPUP_FONT // "-*-lucida-medium-i-normal-sans-10-*-*-*-p-*-iso8859-1" #define DEFAULT_TERMINAL "rxvt" #define DEFAULT_BORDER 6 #define DEFAULT_SEPARATION 3 // number of workspaces is set in setupWS(); // undefine this to shut off client previewing, define to enable // #define CLIENTPREVIEWING // undefine this to shut off workspace previewing, define to enable // #define WORKSPACEPREVIEWING // maximum string length of a line in .miwmrc const int MaxShellCommandLength = 200; // do not make the active border color be exactly black. // if you do, then client outlines will be invisible during move/resize // because of the xor-operation. // // Nice default settings: // // #define ROOT_CURSOR_COLOR "blue" // #define FRAME_CURSOR_COLOR "darkcyan" // #define ACTIVE_BORDER_COLOR "grey30" // #define INACTIVE_BORDER_COLOR "beige" // #define TITLE_COLOR "cyan" // #define DEADLY_BOX_COLOR "red3" // because of one-pixel difference, there are tiny borders // both inside and out. If you reverse the active/inactive color // scheme so that active is bright and inactive is dark, then it is // quite apparent // #define ACTIVE_BORDER_COLOR "rgb:10/50/50" // grey10 is nearly pure black, and grey20 // shows up on a pure black background #define ROOT_CURSOR_COLOR "gold" #define FRAME_CURSOR_COLOR "darkcyan" #define ACTIVE_BORDER_COLOR "grey20" #define INACTIVE_BORDER_COLOR "beige" #define TITLE_COLOR "gold" #define DEADLY_BOX_COLOR "red3" // ------------------------------------------- #endif // ------------------------------------------- // end of miconfig.h // ------------------------------------------- miwm/mimenu.h0100664000076400007640000000502707701107074012520 0ustar bwisebwise//-*-c++-*- // ------------------------------------------- // RCS data: // $Date: 2003/07/03 20:12:44 $ // $Revision: 1.2 $ // $Source: /cvsroot/miwm/miwm/miwm/mimenu.h,v $ // $Id: mimenu.h,v 1.2 2003/07/03 20:12:44 sgbeal Exp $ // $RCSfile: mimenu.h,v $ // ------------------------------------------- // Copyright by Ben Paul Wise. // ------------------------------------------- // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program 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 General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // ------------------------------------------- // very simple menu-ing. specialized to miwm. // ------------------------------------------- #ifndef MIMENU_H #define MIMENU_H // ------------------------------------------- #include #include "miwm.h" class Menu; class MenuItem; // ------------------------------------------- class Menu { public: Menu(); ~Menu(); void startMenuing(XButtonEvent* xbe); void motionNotify(XEvent* xe); void buttonRelease(); void expose(); int whichMenuItem(); // things to do the the data of each item void (*enterAction)(void*); void (*exitAction)(void*); void (*releaseAction)(void*); void raise(); void lower(); NodeList* items; // data of type MenuItem void setDimensions(); int currItem; // you should set this at creation time protected: int prevItem; // will become the same at currItem, at the start MenuItem *currMI; MenuItem *prevMI; int length; // number of items int x; // root coords int y; // root coords int mWidth; // menu width int mHeight; // menu height int iWidth; // item width int iHeight; // item height private: }; class MenuItem { public: MenuItem(); MenuItem(const char*, const void *); ~MenuItem(); std::string label; const void* data; // Client*, WorkSpace*, etc. protected: private: }; // ------------------------------------------- #endif // ------------------------------------------- // end of mimenu.h // ------------------------------------------- miwm/mipix.cc0100664000076400007640000000356707675611373012535 0ustar bwisebwise//-*-c++-*- // ---------------------------------------------- // RCS data: // $Date: 2003/06/23 14:47:23 $ // $Revision: 1.1.1.1 $ // $Source: /cvsroot/miwm/miwm/miwm/mipix.cc,v $ // $Id: mipix.cc,v 1.1.1.1 2003/06/23 14:47:23 bwise837 Exp $ // $RCSfile: mipix.cc,v $ // ---------------------------------------------- // Copyright by Ben Paul Wise. // ------------------------------------------- // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program 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 General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // ---------------------------------------------- #include "miwm.h" #include "mipix.h" // ---------------------------------------------- // returns a Pixmap, loaded from the given data, relative to the // display of the given Widget. The closest colours are used. Exit // is called given an error void loadPixmap(char **dname, Pixmap *xpm) { #ifdef USE_PIXMAPS int status; XpmAttributes attr; Pixmap mask; attr.valuemask = XpmReturnPixels | XpmCloseness; attr.closeness = 20000; status = XpmCreatePixmapFromData(dpy, root, dname,xpm,&mask,&attr); if (status != XpmSuccess) { fprintf(stderr,"Pixmap error: %s\n",XpmGetErrorString(status)); exit(1); } #endif return; } // ---------------------------------------------- // end of mipix.cc // ---------------------------------------------- miwm/mipix.h0100664000076400007640000000314507675611373012367 0ustar bwisebwise//-*-c++-*- // ------------------------------------------- // RCS data: // $Date: 2003/06/23 14:47:23 $ // $Revision: 1.1.1.1 $ // $Source: /cvsroot/miwm/miwm/miwm/mipix.h,v $ // $Id: mipix.h,v 1.1.1.1 2003/06/23 14:47:23 bwise837 Exp $ // $RCSfile: mipix.h,v $ // ------------------------------------------- // Copyright by Ben Paul Wise. // ------------------------------------------- // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program 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 General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // ------------------------------------------- #ifndef MIPIX_H #define MIPIX_H // ------------------------------------------- #include "miwm.h" #ifdef USE_PIXMAPS #include #include "wood.xpm" #include "greenstucco.xpm" #include "sunflower.xpm" #include "back.xpm" #endif // ------------------------------------------- void loadPixmap(char **dname, Pixmap *xpm); // ------------------------------------------- #endif // ------------------------------------------- // end of mipix.h // ------------------------------------------- miwm/miwm.10100664000076400007640000000537107675611373012126 0ustar bwisebwise.\" $Id: miwm.1,v 1.1.1.1 2003/06/23 14:47:23 bwise837 Exp $ .\" Copyright by Ben Paul Wise. .\" .\" .TH MIWM 1 "06 May 2003" "Ben Paul Wise" .ds Ben Paul Wise .SH NAME miwm \- a minimal appearence, full-function window manager .SH SYNOPSIS .B miwm .PP .DESCRIPTION .I MIWM is Ben Wise's \fIMI\fRnimal \fIW\fRindow \fIM\fRanager. It is pronounced 'my whim'. .PP The goal of \fImiwm\fR is to be a fully functional window manager, while retaining a very spare (Zen or Spartan, as you please) appearance and command-set. .SH WARNING This man page is \fBVERY MUCH\fR under construction. It is not complete, and blatantly contains leftover pieces of the man page I used as a template. Do not rely on anything you find here. .SH COMMANDS The notation for describing commands is that \fIB1-f\fR means 'button 1 click on frame', \fIcB3-r\fR means 'control button 3 click on root', .TP .B B1-f Raise. .TP .B B2-f Move. .TP .B B3-f Hide. .TP .PP Filenames passed to .I miwm can be directories or deleted files. If a directory that is not deleted is passed to .I miwm, then the deleted files or directories in it will be restored; if the recursive option is specified, then all deleted files or directories in any of its children will be restored as well. .PP The shell wildcards \fI*\fR and \fI?\fR, as well as shell brace notation using \fI[\fR and \fI]\fR, are interpreted correctly by .I miwm. It is possible to pass wildcards to the program without the wildcards being intercepted by the shell by setting .I noglob (in \fIcsh\fR) or by quoting the wildcards. To delete a file that actually has a wildcard in its name, you must precede the quoted wildcard with a quoted backslash. .PP If no files are specified on the command line, .I miwm goes into interactive mode. In interactive mode, the user is prompted to enter files to be restored, one file per line. Typing a carriage return on an empty prompt line exits the program. .PP Wildcards and quoting backslashes can be entered directly at the prompt without any shell interference (which is the main reason there is an interactive mode). .SH OPTIONS .I Miwm accepts no command-line options. But I include the following to demonstrat how to format things. .TP .B \-r If a specified file is a directory, the directory and all of its children are restored recursively. .TP .B \-i The user is prompted for confirmation before each file or directory is restored. This is not the same as the interactive file name entry mode which is automatically activated when no files are specified on the command line. .SH "KNOWN BUGS" Too complicated .PP No icons. .SH "SEE ALSO" 9wm(1), aewm(1) .SH AUTHOR Ben Paul Wise .SH RESTRICTIONS Copyright (c) 1998-2003 by Ben Paul Wise. All rights reserved. .IR MIWM (1) specifies the terms and conditions for redistribution. miwm/miwm.bsrc0100664000076400007640000000035007675611373012707 0ustar bwisebwisexterm xterm & xfsm xfsm & sfm sfm & xman xman -notopbox -bothshown & slate xsetroot -solid slategrey blue xsetroot -solid steelblue tools menu bs $HOME/tools.bsrc edit me xedit miwm.bsrc -geometry 530x250 & run me bs miwm.bsrc & miwm/miwm.cc0100664000076400007640000002666207703050051012337 0ustar bwisebwise//-*-c++-*- // ---------------------------------------------- // RCS data: // $Date: 2003/07/09 17:26:01 $ // $Revision: 1.7 $ // $Source: /cvsroot/miwm/miwm/miwm/miwm.cc,v $ // $Id: miwm.cc,v 1.7 2003/07/09 17:26:01 sgbeal Exp $ // $RCSfile: miwm.cc,v $ // ---------------------------------------------- // Copyright by Ben Paul Wise. // ------------------------------------------- // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program 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 General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // ---------------------------------------------- #include #include #include #include #include #include #include #include #include #include #include #include #include "miwm.h" #include "mipix.h" #include "miconfig.h" #include "version.h" #include "miwm_framework.h" #include "EShellProcess.h" #include "EPathFinder.h" // ---------------------------------------------- // these are the defining declarations of the variables // ---------------------------------------------- // Mode mode; // The window manager's mode. (See "miwm.h".) int start_x; // The X position where the mode changed. int start_y; // The Y position where the mode changed. Display *dpy; // The connection to the X server. int display_width; // The width of the screen we're managing. int display_height; // The height of the screen we're managing. Window root; // Root window of managed screen. Window popup; // Third-button menu. GC gc; // The default GC. GC gc_thin; // The default GC but with thinner lines. GC menu_gc; // The GC for the popup window (menu). GC size_gc; // The GC for the popup window (menu). XFontStruct *font; // Actual titlebar font. XFontStruct *popup_font; // Actual menu font. Bool shape; // Does server have Shape Window extension? int shape_event; // ShapeEvent event type. // Atoms we're interested in. See the ICCCM for more information. Atom wm_state; Atom wm_change_state; Atom wm_protocols; Atom wm_delete; Atom wm_take_focus; Atom wm_colormaps; char *argv0; WindowManager *theWM = NULL; //------------------------------------------------- /** Runs miwm::homePath()/autostart.sh, if it exists. Returns 0 if the file does not exist, else it returns the return code from fork(), which should always be 0. Note that using this feature currently (July 2003) leaves a defunct process in the process list, and i have no clue how to properly get rid of it. :/ (stephan) */ int miwm_autostart() { EShellProcess sh; std::string thescript = miwm::homePath()+ "/autostart.sh"; if( ! EPathFinder::isAccessible( thescript ) ) return 0; COUT << "forking autostart.sh..." << endl; int ret = sh.fork( thescript, std::cout ); COUT << "fork() returned " << ret << endl; return ret; } extern int main(int argc, char *argv[]) { // (int argc, char *argv[]) miwm::init( argc, argv ); if( miwm::args().isHelpSet() ) { miwm::show_help(); return 0; } //COUT << "config file content: " << miwm::config() << endl; XGCValues gv; XColor exact; XSetWindowAttributes attr; struct sigaction sa; // #define SHOWMESIZE(a) COUT << "sizeof("<<#a<<") = " << sizeof(a) << endl; // SHOWMESIZE(WindowManager); // // SHOWMESIZE(MenuItem); COUT << "Starting a MIWM that was compiled at "; COUT << __TIME__<<", "<<__DATE__<rootCursorColor, &exact); XAllocNamedColor(dpy, DefaultColormap(dpy, DefaultScreen(dpy)), miwm::config().getString("frame_cursor_color", FRAME_CURSOR_COLOR ).c_str(), &theWM->frameCursorColor, &exact); XAllocNamedColor(dpy, DefaultColormap(dpy, DefaultScreen(dpy)), "Black", &theWM->parentWindowColor, &exact); XAllocNamedColor(dpy, DefaultColormap(dpy, DefaultScreen(dpy)), miwm::config().getString("active_border_color", ACTIVE_BORDER_COLOR ).c_str(), &theWM->activeBorderColor, &exact); XAllocNamedColor(dpy, DefaultColormap(dpy, DefaultScreen(dpy)), miwm::config().getString("inactive_border_color", INACTIVE_BORDER_COLOR ).c_str(), &theWM->inactiveBorderColor, &exact); XAllocNamedColor(dpy, DefaultColormap(dpy, DefaultScreen(dpy)), miwm::config().getString("title_color", TITLE_COLOR ).c_str(), &theWM->titleColor, &exact); XAllocNamedColor(dpy, DefaultColormap(dpy, DefaultScreen(dpy)), miwm::config().getString("deadly_box_color", DEADLY_BOX_COLOR ).c_str(), &theWM->boxColor, &exact); // Get fonts for titlebar and popup window. font = XLoadQueryFont(dpy, font_name); if (font == 0) font = XLoadQueryFont(dpy, "fixed"); if (font == 0) miAbort("can't find a font for the titlebars."); popup_font = XLoadQueryFont(dpy, popup_font_name); if (popup_font == 0) popup_font = XLoadQueryFont(dpy, "fixed"); if (popup_font == 0) miAbort("can't find a font for the popup window."); // See if the server has the Shape Window extension. shape = servershapes(); // Set up root GC: gc // set up frame GC: gc_frame. gv.foreground = theWM->activeBorderColor.pixel; gv.function = GXcopy; gv.background = theWM->inactiveBorderColor.pixel; gv.font = font->fid; gv.line_width = 1; gv.subwindow_mode = IncludeInferiors; gc_thin = XCreateGC(dpy, root, GCForeground | GCBackground | GCFunction | GCFont | GCLineWidth | GCSubwindowMode, &gv); // note that this line_width interacts with drawDeadlyBox. gv.function = GXxor; gv.line_width = 2; gc = XCreateGC(dpy, root, GCForeground | GCBackground | GCFunction | GCFont | GCLineWidth | GCSubwindowMode, &gv); gv.function = GXcopy; theWM->gc_frame = XCreateGC(dpy, root, GCForeground | GCBackground | GCFunction | GCFont | GCLineWidth | GCSubwindowMode, &gv); gv.function = GXxor; // Create a window for our popup. // this popup will be used for all kinds of things. popup = XCreateSimpleWindow(dpy, root, 10, 10, // x,y 20, 60, // w,h 1, // border width theWM->activeBorderColor.pixel, // foreground theWM->inactiveBorderColor.pixel); // background attr.cursor = menu_cursor; // may need to look at moving_event_mask to get menu_event_mask correct theWM->menu_event_mask = ButtonMask | ButtonMotionMask | ExposureMask | Button1MotionMask | Button2MotionMask | Button3MotionMask; attr.event_mask = theWM->menu_event_mask; XChangeWindowAttributes(dpy, popup, CWCursor | CWEventMask , &attr); if (1 == theWM->usePixmapsP) { attr.background_pixmap = theWM->popupBgd; XChangeWindowAttributes(dpy, popup, CWBackPixmap , &attr); } // Create menu GC. gv.foreground = theWM->activeBorderColor.pixel ^ theWM->inactiveBorderColor.pixel; gv.line_width = 1; gv.font = popup_font->fid; menu_gc = XCreateGC(dpy, popup, GCForeground | GCBackground | GCFunction | GCFont | GCLineWidth | GCSubwindowMode, &gv); // Create size indicator GC. gv.foreground = theWM->activeBorderColor.pixel; gv.function = GXcopy; size_gc = XCreateGC(dpy, popup, GCForeground | GCBackground | GCFunction | GCFont | GCLineWidth | GCSubwindowMode, &gv); // Set up our mouse cursors. initCursor(); // Announce our interest in the root window. attr.cursor = root_cursor; theWM->moving_event_mask = ButtonPressMask | ButtonReleaseMask // all up/down | Button1MotionMask // all mouse motion while a button1 is pressed (resize) | Button2MotionMask // all mouse motion while a button2 is pressed (move) | Button3MotionMask // all mouse motion while a button3 is pressed (move) | OwnerGrabButtonMask; theWM->resizing_event_mask = theWM->moving_event_mask; theWM->root_event_mask = SubstructureRedirectMask | SubstructureNotifyMask | ColormapChangeMask | ButtonPressMask | PropertyChangeMask | LeaveWindowMask | EnterWindowMask; attr.event_mask = theWM->root_event_mask; XChangeWindowAttributes(dpy, root, CWCursor | CWEventMask, &attr); // Make sure all our communication to the server got through. XSync(dpy, False); // See who needs looking after. theWM->scanWindowTree(); theWM->mode = wmReady; ::miwm_autostart(); theWM->mainLoop(); return 0; } void WindowManager::mainLoop() { XEvent xev; for (;;) { XNextEvent(dpy, &xev); dispatch(&xev); } // you only via miAbort or Terminate, // so I do not bother with StopMemoryLeakCheck() here return; } void sendConfigureNotify(Client *c) { XConfigureEvent ce; ce.type = ConfigureNotify; ce.event = c->window; ce.window = c->window; ce.x = c->size.x + border; ce.y = c->size.y + border; ce.width = c->size.width - 2 * border; ce.height = c->size.height - 2 * border; ce.above = None; ce.border_width = c->border; ce.override_redirect = 0; XSendEvent(dpy, c->window, False, StructureNotifyMask, (XEvent *) &ce); } extern int titleHeight(void) { return font->ascent + font->descent + 1; } // ---------------------------------------------- // end of miwm.cc // ---------------------------------------------- miwm/miwm.config0100664000076400007640000000007007702554575013223 0ustar bwisebwisepreview_client_before_unhide=1 raise_client_on_focus=0 miwm/miwm.h0100664000076400007640000002302107701327300012165 0ustar bwisebwise//-*-c++-*- // ------------------------------------------- // RCS data: // $Date: 2003/07/04 16:43:44 $ // $Revision: 1.4 $ // $Source: /cvsroot/miwm/miwm/miwm/miwm.h,v $ // $Id: miwm.h,v 1.4 2003/07/04 16:43:44 sgbeal Exp $ // $RCSfile: miwm.h,v $ // ------------------------------------------- // Copyright by Ben Paul Wise. // ------------------------------------------- // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program 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 General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // ------------------------------------------- #ifndef MIWM_BASIC_H #define MIWM_BASIC_H // ------------------------------------------- #include #include #include #include #include #include #include #include #include #include // try to get timeval struct and select function #include #include #include #include #include // dogdog // experimental #include "mlchckr.h" #include "alpha.h" #include "rng.h" #include "nodes.h" #include "miconfig.h" #include "struct.h" #include "client.h" // ---------------------------------------------- // classes class WorkSpace; class WindowManager; extern WindowManager *theWM; // This should really have been in X.h --- if you select both ButtonPress // and ButtonRelease events, the server makes an automatic grab on the // pressed button for you. This is almost always exactly what you want. #define ButtonMask (ButtonPressMask | ButtonReleaseMask) // ---------------------------------------------- // these are the reference declarations of the variables, // which should be available to all who include this header. // ---------------------------------------------- // miwm.c // extern Mode mode; extern int start_x; extern int start_y; extern Display *dpy; // the display extern int display_width; extern int display_height; extern Window root; // the root window extern Window popup; // this is the one popup that gets resized for various things extern GC gc; // root gc extern GC gc_thin; // like root gc, but thinner lines extern GC menu_gc; extern GC size_gc; extern XFontStruct *font; extern XFontStruct *popup_font; extern Atom wm_state; extern Atom wm_change_state; extern Atom wm_protocols; extern Atom wm_delete; extern Atom wm_take_focus; extern Atom wm_colormaps; extern Bool shape; extern int shape_event; extern char *argv0; extern void shell(int, int, int); extern void sendConfigureNotify(Client *); extern int titleHeight(void); void menuButtonRelease(XEvent *ev); extern Edge interacting_edge; extern Client *getClient(Window); extern Client *addClient(Window); extern void adjustClientBorder(Client *, Edge, int *, int *, int *, int *); extern void drawClientBorder(Client *, int); extern void setactive(Client *, int, long); extern void Client_SizeFeedback(void); extern void size_expose(void); extern void reshapeClientEdge(Client *, Edge); extern void moveClient(Client*); extern void setClientState(Client *, int); extern void closeClient(Client *); extern void removeClient(Client *); extern void Client_FreeAll(void); extern void Client_ColorMap(XEvent*); extern int hidden(Client *); extern int withdrawn(Client *); extern int normal(Client *); extern Client *current; extern Client *clients; extern Cursor root_cursor; extern Cursor frame_cursor; extern Cursor menu_cursor; extern Cursor edgecursor(Edge edge); extern void initCursor(void); extern void dispatch(XEvent *); extern int ignore_badwindow; extern int ErrorHandler(Display *, XErrorEvent *); extern void miAbort(char*); extern void getWindowName(Client *); extern void getNormalHints(Client *); extern void withdraw(Client *); extern void cmapfocus(Client *); extern void getColormaps(Client *); extern void getTransientFor(Client *); extern void Terminate(int); // WM operations void toggleRaiseOnFocus(); void toggleTopLeft(); void toggleClientPreview(); void toggleTiling(); // switch auto-tiling on/off void togglePixmaps(); // switch use of pixmaps on/off void restartWM(); // kill the current WM process and launch a new one void terminateWM(); // just kill the current WM void stepWSup();// cycle up through work spaces void stepWS(int step);// cycle up or down through work spaces void contractWS();// contract all clients into WS 0, unhiding all void retileWS(); // try to neatly re-tile the current WS void rotateClients(); // successively raise clients of the current workspace // WM operations on the current Client void toggleSticky(); // toggle Sticky on the current Client void idCurrent(); // show some ID void terminateCurrent(); // toggle Sticky on the current Client extern int current_item; /* Last known selected menu item. -1 if none. */ extern menuitem * currentMenu; const char * choose_label(Client *); extern void getMouse(int * pointerX, int * pointerY); extern void hide(Client *); extern void unhidec(Client *, int); extern void updateMenu(Client *); extern int whichMenuItem(int, int); extern void menuhit(XButtonEvent *); // for the hidden window menu extern void wsmenuhit(XButtonEvent *); // for the workspace menu extern void unhide(int n, int map); extern void exposeMenu(void); extern void motionNotifyMenu(XEvent *); extern void showPreview(int); extern void stopPreview(int); extern int shapeevent(XEvent *); extern int servershapes(void); extern int isshaped(Window); extern const char *font_name; extern const char *popup_font_name; extern int border; char * stringCopy(char *); extern void getResources(void); // ------------------------------------------- class WindowManager { public: WindowManager(); ~WindowManager(); menuType whichMenu; Mode mode; void mainLoop(); void setupWS(); void addWorkSpace(const char* wsName); void changeWorkSpace(WorkSpace* ws1, WorkSpace* ws2); // extern int offWorkSpace; void sendClientToWorkSpace(Client* client, WorkSpace* ws2); void innerSendClienttoWS(Client* c, int visibleP); int followClientToWS; void circulateWindowsUp(); void manageClient(Client *client, bool preexisting = false ); void autoPlaceCoords(Client *c); void diagonalPlaceCoords(Client *c, int *autoX, int *autoY); void tilePlaceCoords(Client *c, int *autoX, int *autoY); int okPlacement(Client *c1, int x, int y, int w, int h); void scanWindowTree(); void freeAllClients(); void rotateWSClients(); void focusOn(Client*); void unhideClient(Client *c); void hideClient(Client *c); void spawn(char *command); void drawClientBorder(Client* c, int activeP); void drawDeadlyBox(Client*); void drawTitle(Client*); void drawClientOutline(Client* c); int titleHeightc(Client* c); void backClient(Client*); void raiseClient(Client*); // deal with menus void clearMenu(); void setHiddenClientMenu(); void setShellCmdMenu(); void setWSMenu(); void setClientOpsMenu(); void setWMOpsMenu(); void doFullPreview(Client*); void undoFullPreview(Client*); GC gc_frame; XColor titleColor; XColor boxColor; XColor parentWindowColor; XColor activeBorderColor; XColor inactiveBorderColor; XColor rootCursorColor; XColor frameCursorColor; NodeList* allClients; // data of type Client* NodeList* hiddenClients; // data of type Client* int root_event_mask; int menu_event_mask; int moving_event_mask; int resizing_event_mask; RNG *wmRNG; struct timeval sleepval; Menu* menu; void positionFeedbackWindow(); // moving clients void startMovingClient(XEvent *xe, Client* c); void motionNotifyMoving(); void buttonReleaseMoving(); void positionExpose(); // resizing clients void startResizingClient(XButtonEvent *xbe, Client* c); void motionNotifyResizing(); void buttonReleaseResizing(); void sizeExpose(); Edge whichEdge(Client*, int rx, int ry); // killing clients void startKillingClient(XButtonEvent *xbe, Client* c); void motionNotifyKilling(); void buttonReleaseKilling(); int mouseInDeadlyBox(Client*); WorkSpace* workSpace; // the one we are using, and will return to when previews end WorkSpace **allWorkSpaces; int numWorkSpaces; int tileP; // should we tile clients? int opaqueMoveSize; // anything below this % of screen size is opaque-moved int offWorkSpace; int auto_x; int auto_y; int insideClientP(Client* c); void warpPointerToBorder(Client* c); int usePixmapsP; // 1 to use them, 0 to not. Pixmap popupBgd; Pixmap activeBgd; Pixmap inactiveBgd; // keep this. it is only a problem under Solaris // struct timeval sleepval; int previewCP; // should we preview clients? int protectTopLeft; int raiseOnFocusP; protected: int previewWSP; // should we preview workspaces? WorkSpace* previewedWorkSpace; // the one we are just previewing private: }; // ------------------------------------------- #endif // ------------------------------------------- // end of miwm.h // ------------------------------------------- miwm/miwm.usermenu0100664000076400007640000000025207702560225013610 0ustar bwisebwisexterm = xterm & mozilla = mozilla & tools = bs $HOME/tools.bsrc -title Tools & lock = xscreensaver-command -lock xkill = xkill & usermenu = emacs ~/.miwm/miwm.usermenu & miwm/miwm_framework.cc0100664000076400007640000000413007703050224014400 0ustar bwisebwise#include "miwm_framework.h" #include // getenv() #include // mkdir() #include // mkdir() #include "EPathFinder.h" namespace miwm { std::string homePath( const std::string & append ) { const char * hp = ::getenv( "HOME" ); static string abspath = string(hp) + EPathFinder::getDirectorySeparator() + ".miwm"; if( ! EPathFinder::isAccessible( abspath ) ) { if( 0 != ::mkdir( abspath.c_str(), 0700 ) ) { CERR << __FILE__<<":"<<__LINE__<<" error: could not create miwm home directory ["< /** COUT/CERR are drop-in replacements for std::cout/cerr, but slightly more decorative. */ #ifndef CERR #define CERR std::cerr << __FILE__ << ":" << std::dec << __LINE__ << " : " #endif #ifndef COUT #define COUT std::cout << __FILE__ << ":" << std::dec << __LINE__ << " : " #endif namespace miwm { /** Call this from main() to initialize the miwm framework. */ int init( int argc, char ** argv ); /** Shows command-line args help. */ void show_help(); /** returns an absolute path to a directory, which is the "home" of miwm. Currently this returns $HOME, but i would prefer for it to point to $HOME/.miwm. It will, once i get around to adding portable code for creating ~/.miwm if it doesn't exist. */ std::string homePath( const std::string & append = "" ); /** Returns the command-line args, which are only valid if init() is called with the argc and argv from main(). */ ESimpleCLParser & args(); /** Returns the persistant framework config settings. */ EPropertyList & config(); }; // namespace miwm #endif // MIWM_FRAMEWORK_H miwm/miwmrc0100664000076400007640000000074507675611373012314 0ustar bwisebwisewhite rxvt -fg orange3 -bg white -title White & blue rxvt -fg white -bg navyblue -title Blue & black rxvt -fg orange2 -bg black -title Black & pesto rxvt -fg black -bg green -title Pesto -e telnet pesto & xfm xfm & rtop rxvt -fg black -bg yellow -geometry 78x12 -e top & root rxvt -fg black -bg red -title Root -e su & fern xpmroot $HOME/src/miwm/fern2.xpm stucco xpmroot $HOME/src/miwm/greenstucco.xpm swirls xpmroot $HOME/src/miwm/BlueSwirls.xpm lock xscreensaver-command -lock & miwm/mlchckr.cc0100664000076400007640000002567107700051356013016 0ustar bwisebwise//-*-c++-*- // // RCS data: // $Date: 2003/06/30 15:10:38 $ // $Revision: 1.2 $ // $Source: /cvsroot/miwm/miwm/miwm/mlchckr.cc,v $ // $Id: mlchckr.cc,v 1.2 2003/06/30 15:10:38 sgbeal Exp $ // $RCSfile: mlchckr.cc,v $ // // ---------------------------------- // Start of mlchckr.cc // ---------------------------------- // Copyright by Ben Paul Wise. // ---------------------------------- // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program 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 General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // ---------------------------------- #include "mlchckr.h" #include typedef list< MemoryHolderBlock * > MemoryList, *pMemoryList; // ---------------------------------- // when you have a memory leak on the 42719 block allocated, // it is really tedious to step through 42718 allocations to // get to where the bad one happened. So, I added this // to control what statements xxgdb sees. Of course, you // must have complete repeatability of random numbers, // as well as access to the source code. Of course, // anyone editting code to fix memory leaks has that access. // // if you are busy in the edit/compile/debug cycle, just // reset this value in YOUR code or inside xxgdb as desired, // and set a breakpoint on the dummy function // here is where you would set it to some positive value. unsigned int FirstSuspectBlock = 60; void xxgdbDummyFN(unsigned int bid) { assert (bid >= FirstSuspectBlock); return; } // ---------------------------------- static bool InNewFunction = false; //Flag that you are in the New function static bool InDeleteFunction = false; //Flag that you are in the Delete Function // One might expect a major logical error here, as follows. // Imagine that we have three classes, A, B, C (Like Game, Position, Piece). // A could be any complex structure with lots of pointers to subordinates // which lots of pointers to subordinates, like a game player with interlinked // data structures of features, search trees, etc. It could be a GUI, with levels // of user interface blocks (that contain other UI blocks), and commands invoked // be several UI controls. And so on. // // B has pointers to C's (and other stuff). A has pointer to B's (and other stuff). // // I would like to delete an A, which deletes its subordinate B's, each of which // delete subordinate C's. The logic below will set 'inDeleteFunction' to TRUE // when you start to delete A, and you might think it would fail to register the deletes on // B's and C's. // // Not so, as the little 'class Dog' example shows. The recursive deletion starts from // the top, works down, then begins actual deallocation from the bottom up. Hence, // nothing is missed. unsigned int NumberOfAllocatedBlocks = 0; // Count of blocks allocated. static unsigned int BlockID=1; unsigned int VerboseLevel=0; MemoryList MemoryHolderList; // ---------------------------------- MemoryHolderBlock::MemoryHolderBlock():BID(0),BSize(0),BPointer(NULL) { } MemoryHolderBlock::MemoryHolderBlock (unsigned int BlockID, unsigned int stAllocateBlock, void * NewMemory):BID (BlockID), BSize(stAllocateBlock), BPointer(NewMemory) { } MemoryHolderBlock* GetHoldBlock(pMemoryList L, void * pMem) { for (MemoryList::iterator i = L->begin(); i != L->end(); ++i) { if ( (*i)->BPointer == pMem) { return *i; } } return NULL; } // ---------------------------------- // new operator overload. void *operator new( size_t stAllocateBlock) throw (std::bad_alloc){ void * NewMemory = malloc( stAllocateBlock ); if( (VerboseLevel > 0) && !InNewFunction ) { InNewFunction = true; // now stop checking (logging) so you can add ID to our list //This is used to keep these memory locations transparent to the memory checking //....plus that fact this would be an infinite loop if you didn't stop checking!!! very bad ++BlockID; ++NumberOfAllocatedBlocks; if (VerboseLevel>2) { cout << endl; cout << "ALLOCATING Block ID: " << BlockID<<" "; cout << "Size: " << stAllocateBlock<< " bytes"<<" "; cout << "Total blocks now allocated: " << NumberOfAllocatedBlocks< 0) && (BlockID >= FirstSuspectBlock)) xxgdbDummyFN(BlockID); } return NewMemory; } // new operator overload. void *operator new[]( size_t stAllocateBlock) throw (std::bad_alloc){ void * NewMemory = malloc( stAllocateBlock ); if( (VerboseLevel > 0) && !InNewFunction ) { InNewFunction = true; // now stop checking (logging) so you can add ID to our list //This is used to keep these memory locations transparent to the memory checking //....plus that fact this would be an infinite loop if you didn't stop checking!!! very bad ++BlockID; ++NumberOfAllocatedBlocks; if (VerboseLevel>2) { cout << endl; cout << "ALLOCATING[] Block ID: " << BlockID<<" "; cout << "Size: " << stAllocateBlock<< " bytes"<<" "; cout << "Total blocks now allocated: " << NumberOfAllocatedBlocks< 0) && (BlockID >= FirstSuspectBlock)) xxgdbDummyFN(BlockID); } return NewMemory; } // ---------------------------------- // delete operator overload. void operator delete( void *pvMem) throw(){ if( (VerboseLevel > 0) && !InDeleteFunction ) { if (NULL == pvMem) { cout <<"-----------------------"<2) { cout <BID <<" "; cout << "Size : " << temp->BSize << " bytes"<<" "; cout << "Total blocks still allocated: " << NumberOfAllocatedBlocks< 0) && !InDeleteFunction ) { InDeleteFunction = true;// now stop checking (logging) //This is used to keep these memory locations transparent to the memory checking if (NULL == pvMem) { cout <<"-----------------------"<2) { cout <BID <<" "; cout << "Size : " << temp->BSize << " bytes"<<" "; cout << "Total blocks still allocated: " << NumberOfAllocatedBlocks<= 0); assert (level <= 3); if (VerboseLevel > 0) { cout << endl; cout <<"---------------------------------" < 0) { cout << endl; cout <<"---------------------------------" << endl; cout <<" Memory leak checking stopped " <BSize; if (VerboseLevel >= 2) { for (MemoryList::iterator i = MemoryHolderList.begin(); i !=MemoryHolderList.end(); ++i) { cout << " Block ID: " << (*i)->BID <<" "; cout << "Size: " << (*i)->BSize << " bytes"<BSize > largestBlockSize ) { largestBlockSize = (*i)->BSize; largestBlockID = (*i)->BID; } } } cout <<"---------------------------------" << endl; cout << " Largest block's ID: " << largestBlockID <<" "; cout << "Size: " << largestBlockSize << " bytes"< 0) { cout << endl; cout <<"---------------------------------" << endl; cout <<" Memory leak checking aborted " < #include #include using std::list; using std::stack; // set this is YOUR code, not in the library extern unsigned int FirstSuspectBlock; // ------------------------------------------ class MemoryHolderBlock { public: MemoryHolderBlock (); MemoryHolderBlock (unsigned int BlockID, unsigned int stAllocateBlock,void * NewMemory); ~MemoryHolderBlock (){} // private: unsigned int BID; unsigned int BSize; void * BPointer; }; // new operator overload. extern void *operator new( size_t stAllocateBlock) throw (std::bad_alloc); extern void *operator new[]( size_t stAllocateBlock) throw (std::bad_alloc); // delete operator overload. extern void operator delete( void *pvMem) throw(); extern void operator delete[]( void *pvMem) throw(); // you can start and stop before and after well-defined sections // of code, in order to check just that. extern void StartMemoryLeakCheck(unsigned int level); extern void StopMemoryLeakCheck(); extern void AbortMemoryLeakCheck(); // ------------------------------------------ #endif // ------------------------------------------ // end of mlchckr.h // ------------------------------------------ miwm/mouse.cc0100664000076400007640000001163107675611373012526 0ustar bwisebwise//-*-c++-*- // ------------------------------------------- // RCS data: // $Date: 2003/06/23 14:47:23 $ // $Revision: 1.1.1.1 $ // $Source: /cvsroot/miwm/miwm/miwm/mouse.cc,v $ // $Id: mouse.cc,v 1.1.1.1 2003/06/23 14:47:23 bwise837 Exp $ // $RCSfile: mouse.cc,v $ // ------------------------------------------- // Copyright by Ben Paul Wise. // ------------------------------------------- // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program 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 General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // ------------------------------------------- #include #include #include #include #include #include #include "miwm.h" #include "ws.h" // ------------------------------------------- int current_item = -1; /* Last known selected menu item. -1 if none. */ menuitem * currentMenu = NULL; // ------------------------------------------- void getMouse(int * x, int * y) { Window dw1, dw2; int t1, t2; unsigned int b; XQueryPointer(dpy, root, &dw1, &dw2, x, y, &t1, &t2, &b); } const char * choose_label(Client * c) { return (c->name != 0) ? c->name : ((c->fallback_name != 0) ? c->fallback_name : ""); } // void // updateMenu(Client *) { // return; // } // ------------------------------------------- // Client* // clientFromMenuItem(int n) { // Client *c = NULL; // return c; // } // ------------------------------------------- void hide(Client *c) { currentMenu = NULL; if (c == 0) return; theWM->hiddenClients->prepend((void*)c); // LIFO order, like a stack // if (c == theWM->workSpace->topClient) // theWM->workSpace->topClient = NULL; if (current == c) current = NULL; theWM->hideClient(c); return; } // ------------------------------------------- void unhide(int n , int map) { int i = 0; assert (theWM != NULL); NodeList *hcs = theWM->hiddenClients; Node* cND = NULL; Node* cND2 = NULL; Client *c = NULL; if ( (n >= 0) && (n < hcs->length())) { for (cND = hcs->first; ((cND != NULL) && (c == NULL)); cND = hcs->nextNode(cND)) { if (i == n) { c = ((Client*) cND->data); theWM->unhideClient(c); // cout << " there are " << theWM->hiddenClients->length() << " hidden " << endl; // cout << "cND = " << cND << endl; cND2 = theWM->hiddenClients->remove(cND); // cout << "cND2 = " << cND2 << endl; // cout << " there remain " << theWM->hiddenClients->length() << " hidden " << endl; } i = i + 1; } } return; } void unhidec(Client *c, int map) { Node* cND; if (c == 0) return; cND = theWM->hiddenClients->inList((void*) c); if (cND != NULL) { theWM->hiddenClients->remove(cND); if (map) { // c = ((Client*) cND->data); theWM->unhideClient(c); } } return; } // ------------------------------------------- // this is the fundamental pair that actually hides/unhides // windows, separate from menu-manipulations // ------------------------------------------- void WindowManager::hideClient(Client* c) { XUnmapWindow(dpy, c->parent); XUnmapWindow(dpy, c->window); c->hidden = True; c->isMapped = 0; // If the window was the current window, it so no more... setactive(c, 0, 0L); setClientState(c, IconicState); return; } void WindowManager::unhideClient(Client *c) { c->hidden = False; XMapRaised(dpy, c->parent); XMapWindow(dpy, c->window); c->isMapped = 1; setClientState(c, NormalState); return; } int WindowManager::mouseInDeadlyBox(Client *c) { int rslt = 0; int quarter, xWindow, yWindow; int th = titleHeightc(c); // in root coords getMouse(&xWindow, &yWindow); // convert to window coords xWindow = xWindow - c->size.x; yWindow = yWindow - c->size.y + th; // cout << "Testing if mouse coords (" << xWindow << " , " << yWindow << " )"; // cout << " are in the box of client " << c->clientID << endl; if (th > 0) { quarter = (border + th) / 4; // cout << "Box is [ " << border << " , " << (border + 2 * quarter) << "] x "; // cout << "[ " << quarter << " , " << 3*quarter << " ]" << endl; if (xWindow > border && xWindow < (border + 2 * quarter) && yWindow > quarter && yWindow < 3 * quarter) rslt = 1; } // cout << "rslt is " << rslt << endl << flush; return rslt; } // ------------------------------------------- // end of mouse.cc // ------------------------------------------- miwm/nodes.cc0100664000076400007640000001460007675611373012505 0ustar bwisebwise//-*- c++ -*- // ------------------------------------------ // RCS data: // $Date: 2003/06/23 14:47:23 $ // $Revision: 1.1.1.1 $ // $Source: /cvsroot/miwm/miwm/miwm/nodes.cc,v $ // $Id: nodes.cc,v 1.1.1.1 2003/06/23 14:47:23 bwise837 Exp $ // $RCSfile: nodes.cc,v $ // ------------------------------------------ // Copyright by Ben Paul Wise. // ------------------------------------------- // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program 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 General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // ------------------------------------------- // this is a very limited kind of list. It is // not suitable for general purpose use. // it was developed strictly to make templates // unnecessary in this application. it was // harder to get the standard template library // to work WITHOUT lots of #ifdef conditional // compilation than it was to get this code // to work. // ------------------------------------------- #include #include "nodes.h" // ------------------------------------------ Node::Node() { next = NULL; prev = NULL; data = NULL; } Node::~Node() { next = NULL; prev = NULL; data = NULL; } // ------------------------------------------ NodeList::NodeList() { first = NULL; last = first; actual = first; } NodeList::~NodeList() { while (NULL != first) remove(first); first = NULL; last = NULL; actual = NULL; } // ------------------------------------------ // delete each node's contents, then delete each node, then delete the list itself void obliterateNodeList(NodeList* nList) { // Node *nd; // void* nData; if (NULL != nList) { // this was redundant. ~NodeList recursively destroys nodes (and their contents?) // for (nd = nList->first; nd != NULL; nd = nList->nextNode(nd)) { // nData = nd->data; // if (NULL != nData) { // delete nData; // nd->data = NULL; // } // } delete nList; nList = NULL; } return; } // ------------------------------------------ // inList - searches for given data pointer in list and returns pointer to // corresponding Node-structure if found else NULL. Node * NodeList::inList(void *dataPtr) { Node *InList = NULL; Node *p; p = first; while (p) { if (p->data == dataPtr) { InList = p; break; } p = p->next; } return (InList); } // ------------------------------------------ // append - Appends element at end of list, creating a new node to put it in. // Will return tbFalse if element is not in list after call, else // tbTrue. // note that we allow duplicates to be appended TLogical NodeList::append(void *ptr) { Node *nd; nd = new Node(); if (NULL == nd) { // ran out of memory! return (tbFalse); } nd->prev = last; nd->next = NULL; nd->data = ptr; if (nd->prev) nd->prev->next = nd; else first = nd; last = nd; return (tbTrue); } // ------------------------------------------ Node* NodeList::at(int i) { Node *nd = first; assert (i >= 0); while ((NULL != nd) && (i >=0)) { if (0 == i) return nd; nd = nd->next; i = i - 1; } return nd; } // ------------------------------------------ int NodeList::length() { int population = 0; Node *nd = first; while (nd != NULL) { population = population + 1; nd = nd->next; } return population; } // ------------------------------------------ // prepend - Inserts new element as the first element of list and resets the // actual-pointer to first element. // Will return tbFalse if element is not in list after call, else // tbTrue. // note that we allow duplicates to be prepended TLogical NodeList::prepend(void *ptr) { Node *nd = new Node(); if (NULL == nd) return (tbFalse); nd->prev = NULL; nd->next = first; nd->data = ptr; if (nd->next) nd->next->prev = nd; else last = nd; first = nd; actual = first; return (tbTrue); } // ------------------------------------------ // remove - Deletes node from List. The data must either be already deleted // or saved, else it will become unreferenced garbage. // Returns pointer to next Node if existing, else pointer to // previous one. Returns NULL if the list now is empty and pointer // to Node itself if node is not in list. Node * NodeList::remove(Node *nd) { Node *rn; if (NULL == nd) return (NULL); if (NULL == inList(nd->data)) return (nd); if (nd->prev) { nd->prev->next = nd->next; rn = nd->prev; } else { first = nd->next; rn = NULL; } if (nd->next) { nd->next->prev = nd->prev; rn = nd->next; } else last = nd->prev; delete nd; return (rn); } // ------------------------------------------ // nextNode - returns pointer to following node. Node* NodeList::nextNode(Node *nd) { if (NULL != nd) return (nd->next); else return (first); } // ------------------------------------------ // prevNode - returns pointer to previous node. Node* NodeList::prevNode(Node *nd) { if (NULL != nd) return (nd->prev); else return (last); } // ------------------------------------------ void NodeList::moveToEnd(Node *nd) { assert (NULL != nd); assert (NULL != inList(nd->data)); if (NULL == nd->next) return; if (nd->prev) nd->prev->next = nd->next; else first = nd->next; nd->next->prev = nd->prev; last->next = nd; nd->prev = last; last = nd; nd->next = NULL; } // ------------------------------------------ void NodeList::moveToFront(Node *nd) { assert (NULL != nd); assert (NULL != inList(nd->data)); if (NULL == nd->prev) return; if (nd->next) nd->next->prev = nd->prev; else last = nd->prev; nd->prev->next = nd->next; first->prev = nd; nd->next = first; first = nd; nd->prev = NULL; } // ------------------------------------------ // end of nodes.cc // ------------------------------------------ miwm/nodes.h0100664000076400007640000000602607675611373012352 0ustar bwisebwise//-*-c++-*- // ------------------------------------------ // RCS data: // $Date: 2003/06/23 14:47:23 $ // $Revision: 1.1.1.1 $ // $Source: /cvsroot/miwm/miwm/miwm/nodes.h,v $ // $Id: nodes.h,v 1.1.1.1 2003/06/23 14:47:23 bwise837 Exp $ // $RCSfile: nodes.h,v $ // ------------------------------------------- // Copyright by Ben Paul Wise. // ------------------------------------------- // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program 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 General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // ------------------------------------------- // handle specialized lists. not suitable // for generic use. // ------------------------------------------- // // notice that we have to be careful with aggregate // data types like int, float, etc. because the // pointer-comparision of equivalence will fail // to find equivalent data. see the demo program. // // You also have to be careful in 'delete' of nodes' // contents that those contents were actually created // with 'new'. This is a problem in the window manager, // where X creates the client structures with malloc, // but then I try to clean up with 'delete'. My // memory leak checker catches this subtle error. // // ------------------------------------------ #ifndef NODE_LIST_H #define NODE_LIST_H #include "alpha.h" #include // #include // #include // #include // ------------------------------------------ class NodeList; class Node; // delete each node's contents, then delete the list itself (and its nodes) void obliterateNodeList(NodeList*); // ------------------------------------------ // clashed with Xlib.h // // #ifndef False // #define False 0 // #endif // #ifndef True // #define True (-1) // #endif // ------------------------------------------ class Node { public: Node(); ~Node(); Node *next; Node *prev; void *data; protected: private: }; // ------------------------------------------ class NodeList { public: NodeList(); ~NodeList(); Node *first; Node *last; Node *actual; Node* inList(void* data); TLogical prepend(void* data); TLogical append(void* data); int length(); Node* at(int i); Node* remove(Node* node); Node* nextNode(Node* node); Node* prevNode(Node* node); void moveToEnd(Node* node); void moveToFront(Node* node); protected: private: }; // ------------------------------------------ #endif // ------------------------------------------ // end of nodes.h // ------------------------------------------ miwm/notes.txt0100664000076400007640000000512007675611373012754 0ustar bwisebwise----------------------------------------------------------- RCS data: $Date: 2003/06/23 14:47:23 $ $Revision: 1.1.1.1 $ $Source: /cvsroot/miwm/miwm/miwm/notes.txt,v $ $Id: notes.txt,v 1.1.1.1 2003/06/23 14:47:23 bwise837 Exp $ $RCSfile: notes.txt,v $ ----------------------------------------------------------- Copyright by Ben Paul Wise. ----------------------------------------------------------- This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ----------------------------------------------------------- PROGRAMMING NOTES: (A) the sleep/timer stuff compiled under Linux, but I could not get rid of the 'incomplete type' errors under Solaris. So I finally commented it out. It was unused anyway. (B) The -Xmu library is needed for linking under Solaris. Under Linux, it is unneeded and harmless. (C) This will not run under SGI, because SGI does not initialize static data members of a class as the standard says: 'int Foo::stuff = 9;' at the top level is ignored at run time! NO Longer: latest Irix handles the static data members correctly. (D) I can not turn Client into a class, because the initialization is somehow different. As a struct, some default value is set well. As a class, it is set to garbage, and clients appear off screen, terminate when touched, and other maladies. (E) compiler under SGI much better at checking unreachable, set but not used, etc. also requires different compiler, ld options, etc. the config.sgi file takes this into account (F) Purify (tm) is very good at finding memory problems. If only I were so good at fixing them! The memory leak checker in my aaa toolkit works as well, and it is free. It keeps turning up errors in 'obliterateList' of a nodeList, 'remove' of a node, etc., so I had to change the 'assert' at the "Double Delete attmpted?" to just a warning. ----------------------------------------------------------- - Copyright 1997-2000 Ben Paul Wise. All rights reserved. - ----------------------------------------------------------- miwm/null.cc0100664000076400007640000000316207675611373012350 0ustar bwisebwise//-*-c++-*- // ---------------------------------------------- // RCS data: // $Date: 2003/06/23 14:47:23 $ // $Revision: 1.1.1.1 $ // $Source: /cvsroot/miwm/miwm/miwm/null.cc,v $ // $Id: null.cc,v 1.1.1.1 2003/06/23 14:47:23 bwise837 Exp $ // $RCSfile: null.cc,v $ // ---------------------------------------------- // Copyright by Ben Paul Wise. // ---------------------------------------------- // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program 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 General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // ---------------------------------------------- // short comments explaining this file go here. // 'null.cc' is just a skeleton // ---------------------------------------------- #include "null.h" // ---------------------------------------------- // global variables, forward declarations, etc. go here // ---------------------------------------------- // real code goes here // ---------------------------------------------- // ---------------------------------------------- // end of null.cc // ---------------------------------------------- miwm/null.h0100664000076400007640000000306107675611373012210 0ustar bwisebwise//-*-c++-*- // ------------------------------------------- // RCS data: // $Date: 2003/06/23 14:47:23 $ // $Revision: 1.1.1.1 $ // $Source: /cvsroot/miwm/miwm/miwm/null.h,v $ // $Id: null.h,v 1.1.1.1 2003/06/23 14:47:23 bwise837 Exp $ // $RCSfile: null.h,v $ // ------------------------------------------- // Copyright by Ben Paul Wise. // ------------------------------------------- // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program 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 General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // ------------------------------------------- // short comments explaining this file go here. // 'null.h' is just a template for real files // ------------------------------------------- #ifndef NULL_H #define NULL_H // ------------------------------------------- #include "miwm.h" // ------------------------------------------- // ------------------------------------------- #endif // ------------------------------------------- // end of null.h // ------------------------------------------- miwm/ops.cc0100664000076400007640000001630507701246607012174 0ustar bwisebwise//-*-c++-*- // ---------------------------------------------- // RCS data: // $Date: 2003/07/04 09:48:55 $ // $Revision: 1.3 $ // $Source: /cvsroot/miwm/miwm/miwm/ops.cc,v $ // $Id: ops.cc,v 1.3 2003/07/04 09:48:55 sgbeal Exp $ // $RCSfile: ops.cc,v $ // ---------------------------------------------- // Copyright by Ben Paul Wise. // ------------------------------------------- // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program 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 General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // ---------------------------------------------- // simple window management operations // ---------------------------------------------- #include "miwm.h" #include "miwm_framework.h" // ---------------------------------------------- void toggleRaiseOnFocus() { if (1 == theWM->raiseOnFocusP) theWM->raiseOnFocusP = 0; else theWM->raiseOnFocusP = 1; miwm::config().set( "raise_client_on_focus", theWM->raiseOnFocusP ); return; } void toggleTopLeft() { if (1 == theWM->protectTopLeft) theWM->protectTopLeft = 0; else theWM->protectTopLeft = 1; return; } void toggleClientPreview() { if (1 == theWM->previewCP) theWM->previewCP = 0; else theWM->previewCP = 1; miwm::config().set( "preview_client_before_unhide", theWM->previewCP ); return; } void toggleTiling() { if (1 == theWM->tileP) theWM->tileP = 0; else theWM->tileP = 1; return; } void togglePixmaps() { #ifdef USE_PIXMAPS XSetWindowAttributes attr; switch (theWM->usePixmapsP) { case 1: theWM->usePixmapsP = 0; attr.background_pixmap = None; XChangeWindowAttributes(dpy, popup, CWBackPixmap , &attr); XSetWindowBackground(dpy, popup, theWM->inactiveBorderColor.pixel); break; case 0: theWM->usePixmapsP = 1; attr.background_pixmap = theWM->popupBgd; XChangeWindowAttributes(dpy, popup, CWBackPixmap , &attr); break; default: break; } miwm::config().set( "enable_pixmaps", theWM->usePixmapsP ); #endif return; } void rotateClients() { theWM->rotateWSClients(); return; } void terminateWM() { Terminate(0); return; } void contractWS() { WorkSpace *home = theWM->allWorkSpaces[0]; Node* cND; Client* c; int i; // cycle through workspaces, unhiding things for (i = 0; inumWorkSpaces; i++) { theWM->changeWorkSpace(theWM->workSpace, theWM->allWorkSpaces[i]); for (cND = theWM->allClients->first; cND != NULL; cND = theWM->allClients->nextNode(cND)) { c = ((Client*) cND->data); // if this client is NULL, we are in deep doo doo assert (NULL != c); if (hidden(c)) unhidec(c,1); } } // cycle through workspaces, sending each client home for (i = 0; inumWorkSpaces; i++) { theWM->changeWorkSpace(theWM->workSpace, theWM->allWorkSpaces[i]); for (cND = theWM->allClients->first; cND != NULL; cND = theWM->allClients->nextNode(cND)) { c = ((Client*) cND->data); // if this client is NULL, we are in deep doo doo assert (NULL != c); theWM->sendClientToWorkSpace(c, home); } } // finally, WM goes home theWM->changeWorkSpace(theWM->workSpace, home); // try to clean up the resulting mess ! retileWS(); return; } void stepWSup() { stepWS(+1); return; } void stepWS(int step) { assert ((+1 == step) || (-1 == step)); int i = 0; int j = -1; WorkSpace* ws1 = theWM->workSpace; WorkSpace* ws2 = NULL; for (i=0; ((-1 == j) && (inumWorkSpaces)); i++) if (theWM->allWorkSpaces[i] == ws1) { j = i; } // ensure it is positive, step = step + theWM->numWorkSpaces; j = (j+step) % theWM->numWorkSpaces; ws2 = theWM->allWorkSpaces[j]; theWM->changeWorkSpace(ws1, ws2); return; } void retileWS() { Node* cND; NodeList* remaining = new NodeList(); Client* c; Client* bigC; int largestArea = 0; int area = 0; int oldTiling = theWM->tileP; theWM->tileP = 1; theWM->auto_x = 1; theWM->auto_y = 1; if (current != NULL) { setactive(current, 0, 0L); current = NULL; } // find every non-sticky client in the current workspace, // and shift their coordinates out of the way // it is a good idea to put sticky things on the bottom or right edges) for (cND = theWM->allClients->first; cND != NULL; cND = theWM->allClients->nextNode(cND)) { c = ((Client*) cND->data); // if this client is NULL, we are in deep doo doo assert (NULL != c); if ((c->sticky == 0) && (c->workSpace == theWM->workSpace) && (False == c->hidden) && (1 == c->isMapped) ) { remaining->append((void*)c); c->size.x = c->size.x + theWM->offWorkSpace; } } // re-place them in largest-first order. while (remaining->length() > 0) { largestArea = 0; bigC = NULL; for (cND = remaining->first; cND != NULL; cND = remaining->nextNode(cND)) { c = ((Client*) cND->data); area = c->size.width * c->size.height; if (area > largestArea) { largestArea = area; bigC = c; } } theWM->autoPlaceCoords(bigC); XMoveWindow(dpy, bigC->parent, bigC->size.x, bigC->size.y); sendConfigureNotify(bigC); // ensure the last are on top of the first-placed large ones if (1 == bigC->isMapped) theWM->raiseClient(bigC); cND = remaining->inList((void*) bigC); assert (NULL != cND); remaining->remove(cND); } delete remaining; remaining = NULL; theWM->auto_x = 5; theWM->auto_y = 5; theWM->tileP = oldTiling; return; } void restartWM() { char* sh = ((char*) getenv("SHELL")); if (sh == 0) sh = "/bin/bash"; int rslt = fork(); switch (rslt) { case 0: // child close(ConnectionNumber(dpy)); execl(sh, sh, "-c", "miwm", 0); break; case -1: // error XBell(dpy, 70); fprintf(stderr, "miwm: restart failed (errno %d)\n", errno); exit(1); break; default: // parent Terminate(0); break; } return; } void idCurrent() { if (NULL != current) { cout << "Current client is " << current->clientID <hidden << endl; cout << "isMapped: " << current->isMapped << endl; } else { // client died during the operation. CYA cout << "Current client is NULL"<sticky = 1- current->sticky; else { // client died during the operation. CYA cout << "Current client is NULL"< #include #include #include #include #include #include #include #include #include #include #include "miwm.h" #include "miwm_framework.h" const char *font_name; /* User's choice of titlebar font. */ const char *popup_font_name; /* User's choice of menu font. */ // char *btn1_command; /* User's choice of button 1 command. */ // char *btn2_command; /* User's choice of button 2 command. */ int border; /* User's choice of border size. */ char * stringCopy(char *p) { char *s ; // s = (char*)malloc(strlen(p) + 1); s = new char[ sizeof(char) * (strlen(p) + 1) ]; if(s == 0) miAbort("new fails"); return strcpy(s, p); } extern void getResources(void) { XrmDatabase db; XrmValue value; char *resource_manager; char *type; /* Set our fall-back defaults. */ font_name = miwm::config().getString( "default_title_font", DEFAULT_TITLE_FONT ).c_str(); popup_font_name = miwm::config().getString( "default_popup_font", DEFAULT_POPUP_FONT ).c_str(); // note: the font vars are not properly persistant: need to make accessor funcs and remove // these vars, so we can wrap the config file part of it there. // popup_font_name = SPECIAL_POPUP_FONT; border = miwm::config().getInt( "client_border_size", DEFAULT_BORDER ); // btn1_command = 0; // btn2_command = DEFAULT_TERMINAL; resource_manager = XResourceManagerString(dpy); if (resource_manager == 0) return; XrmInitialize(); db = XrmGetStringDatabase(resource_manager); if (db == 0) return; /* Fonts. */ if (XrmGetResource(db, "miwm.titleFont", "Font", &type, &value) == True) if (strcmp(type, "String") == 0) font_name = stringCopy((char *) value.addr); if (XrmGetResource(db, "miwm.popupFont", "Font", &type, &value) == True) if (strcmp(type, "String") == 0) popup_font_name = stringCopy((char *) value.addr); /* Window border width. */ if(XrmGetResource(db, "miwm.border", "Border", &type, &value) == True) if (strcmp(type, "String") == 0) border = (int) strtol((char *) value.addr, (char **) 0, 0); // /* The button commands. */ // if (XrmGetResource(db, "miwm.button1", "Command", &type, &value) == True) // if (strcmp(type, "String") == 0) // btn1_command = stringCopy((char *) value.addr); // if (XrmGetResource(db, "miwm.button2", "Command", &type, &value) == True) // if (strcmp(type, "String") == 0) // btn2_command = stringCopy((char *) value.addr); } // ------------------------------------------- // end of resource.cc // ------------------------------------------- miwm/rng.cc0100664000076400007640000001127107675611374012165 0ustar bwisebwise//-*-c++-*- // ------------------------------------------- // RCS data: // $Date: 2003/06/23 14:47:24 $ // $Revision: 1.1.1.1 $ // $Source: /cvsroot/miwm/miwm/miwm/rng.cc,v $ // $Id: rng.cc,v 1.1.1.1 2003/06/23 14:47:24 bwise837 Exp $ // $RCSfile: rng.cc,v $ // ------------------------------------------- // Copyright by Ben Paul Wise. // ------------------------------------------- // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program 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 General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // ------------------------------------------- // a very simple random number generator // ------------------------------------------- #include "rng.h" #include #include // ---------------------------------------- // random number generators are subtle and delicate. // see the header file. // ---------------------------------------- RNG::RNG() { nrkSeed = (unsigned long int)getpid(); // a fairly random number fill_array(); } RNG::RNG(int seed) { nrkSeed = seed; fill_array(); } RNG::~RNG() { // do nothing, for now // delete[] Y; } void RNG::fill_array() { int i; // every occurance of "55", "54" or "24" are magic number // that can not be altered jY = 24; // magic number! kY = 55; // magic number! mY = 1024 * 1024; // 2^20. not magic, but it better be large assert (nrkSeed > 0); for (i=0; i<55; i++) Y[i] = (1000 * (i+1)) % mY; for (i=0; i<55; i++) Y[(21*i) % 55] = (54321 * (i + nrkSeed)) % mY; return; } // see the header file for a reference to a justification // of this very simple, but supposedly very good algorithm float RNG::fvalue() { // every occurance of "55", "54" or "24" are magic number // that can not be altered // suppose the last number generated was X[n], // where n is the number of times we've called the generator // Y[j] == X[n-24] // Y[k] == X[n-55] float rslt; Y[kY] = (Y[kY] + Y[jY]) % mY; // somehow, this keeps going negative under BSD, but // not under Linux or Cygwin if (Y[kY] < 0) Y[kY] =-Y[kY]; // hence the ugly hack rslt = (float) ((double)(Y[kY]) / (double)(mY)); assert (0.0 <= rslt); assert (rslt <= 1.0); // this sets jY to jY-1, and wraps around jY = (jY + 54) % 55; kY = (kY + 54) % 55; return rslt; } float RNG::uniform(float a, float b) { return a + ((b-a) * fvalue()); } float RNG::normal(float mean, float stdv) { // this is far from ideal, but tolerable. int i; int m = 2; // 1,2,3 int n = m * m * 12 ; // n=1 makes m = 12 // n=2 makes m = 48 // n=3 makes m = 108 float sum = 0; for (i=0; i< n ; i++) sum = sum + fvalue(); // fvalue is U(0,1). mean = 1/2, // variance = 1/12 // hence, sum has mean N/2, variance N/12 // pull mean down to 0.0 sum = sum - ( n / 2.0 ); // rescale stdv to 1.0 sum = sum / m ; // == sum / sqrt( n / 12.0 ) sum = sum * stdv + mean; return sum; } int RNG::select(int a, int b) { int c; if (a==b) return a; else { assert (a=0; j--) { k=(*idum)/IQ1; *idum=IA1*(*idum-k*IQ1)-k*IR1; if (*idum < 0) *idum +=IM1; if (j < NTAB) iv[j] = *idum; } iy = iv[0]; } k=(*idum)/IQ1; *idum=IA1*(*idum-k*IQ1)-k*IR1; if (*idum < 0) *idum += IM1; k=idum2/IQ2; idum2=IA2*(idum2-k*IQ2)-k*IR2; if (idum2 < 0) idum2 += IM2; j=iy/NDIV; iy=iv[j]-idum2; iv[j] = *idum; if (iy < 1) iy += IMM1; if ((temp=AM*iy) > RNMX) return RNMX; else return temp; } // ------------------------------------------- // end of rng.cc // ------------------------------------------- miwm/rng.h0100664000076400007640000001270007675611374012025 0ustar bwisebwise//-*-c++-*- // ------------------------------------------- // RCS data: // $Date: 2003/06/23 14:47:24 $ // $Revision: 1.1.1.1 $ // $Source: /cvsroot/miwm/miwm/miwm/rng.h,v $ // $Id: rng.h,v 1.1.1.1 2003/06/23 14:47:24 bwise837 Exp $ // $RCSfile: rng.h,v $ // // ------------------------------------------- // Copyright by Ben Paul Wise. // ------------------------------------------- // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program 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 General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // ------------------------------------------- // this is a very basic random number generator // ------------------------------------------- #ifndef RANDOM_NUMBER_GENERATOR_H #define RANDOM_NUMBER_GENERATOR_H // #include // #include // #include // #include #include "alpha.h" // ==================================================== // NOTE WELL: G1, G2, G3, G4 all have strong cycles (a low-amplitude // short added to a large-amplitude long ) that show // up very bady in the "normal" function! // RAN2 avoids these problems, and I can not find any other problems // with it. So it is now my standard, rendering the whole RNG // class somewhat useless. // ==================================================== // I added these particular constants when I used the previous // numbers to draw a random bitmap (random draws from the // color map) and discovered that it was very non-random, // and even that most of the recommended ones had blatent // periodicities when used to draw a 2D image by "random" sampling // from X's color map! // // Of those that had no obvious 2D periodicities (and I have // no way to evaluate 3D+ periodicities), the other one produced // severely non-uniform results (that is, it produced almost as // many numbers in the bottom 1/3 of its range as it did in the // top 2/3 of its range). // // The ONLY ones I found that (a) did not require assembly // language or other fanciness and (b) did not fail the above // two simple tests were: // // V := (a * V + c ) % m, where: // // A C M // G1 205 29573 139968 // G2 281 28411 134456 // // (These were all tested with the 150-element shuffle array). // G1 and G2 are both from "Numerical Recipes" // G1, 457 // #define RANDOMA 205L // #define RANDOMC 29573L // #define RANDOMM 139968L // #define RANDOMARRAYLENGTH 457 // G2, 457 (a moderately large prime number) // #define RANDOMA 281L // #define RANDOMC 28411L // #define RANDOMM 134456L // #define RANDOMARRAYLENGTH 457 // G3, G4 are from Knuth // G3, 457 // #define RANDOMA 69069L // #define RANDOMC 0L // #define RANDOMM 4294967296L // #define RANDOMARRAYLENGTH 457 // G4, 457 // #define RANDOMA 16807L // #define RANDOMC 0L // #define RANDOMM 2147483647L // #define RANDOMARRAYLENGTH 457 // when all the linear congruential generators persisted // (despite using a shuffle array) in having these two problems, // // (A) showing at least vague repetitive patterns when used // to draw "random" 2D images by picking from the color map, and // // (B) making the "normal" deviates show a distinct superposition of // of small/short and large/long sinusoids (noisy, of course, as the // period is enormous), // // I decided to go with the two ones below. // ---------------------------------------- // this is the recommended best one from "Numerical Recipes" #define IM1 2147483563 #define IM2 2147483399 #define AM (1.0/IM1) #define IMM1 (IM1-1) #define IA1 40014 #define IA2 40692 #define IQ1 53668 #define IQ2 52774 #define IR1 12211 #define IR2 3791 #define NTAB 32 #define NDIV (1+IMM1/NTAB) #define EPS 1.2e-7 #define RNMX (1.0-EPS) // ---------------------------------------- class RNG { public: RNG(); // don't care about repeatability RNG(int seed); // do care about repeatability ~RNG(); // return a random float between 0.0 and 1.0 // Knuth's funny algorithm of "Seminumerical Algorithms", // section 3.2.2, by Mitchell and Moore float fvalue(); // return a random float between 0.0 and 1.0 // this is the one most highly recommended by // "Numerical Recipes". its much more elaborate // than the Mitchell&Moore algorithm. float ran2(long *idum); // return a random float between a and b // mean is (a+b)/2 // variance is (b-a)^2 / 12 float uniform(float a, float b); // return a psuedo-normal with given mean and standard deviation float normal(float mean, float stdv); // return a random integer i, with a<=i<=b, assuming a<= b int select(int a, int b); long ran2seed; protected: private: void fill_array(); // see Knuth, section 3.2.2, page 26 long int Y[55]; // 55 is a magic number. DO NOT change it. long nrkSeed; int jY; int kY; long mY; }; // ---------------------------------------- #endif // ---------------------------------------- // end of rng.h // ---------------------------------------- miwm/shape.cc0100664000076400007640000000514407675611374012501 0ustar bwisebwise//-*- c++ -*- // ------------------------------------------- // RCS data: // $Date: 2003/06/23 14:47:24 $ // $Revision: 1.1.1.1 $ // $Source: /cvsroot/miwm/miwm/miwm/shape.cc,v $ // $Id: shape.cc,v 1.1.1.1 2003/06/23 14:47:24 bwise837 Exp $ // $RCSfile: shape.cc,v $ // ------------------------------------------- // Copyright by Ben Paul Wise. // ------------------------------------------- // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program 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 General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // ------------------------------------------- #include #include #include #include #include #include #include #include #ifdef SHAPE #include #endif #include "miwm.h" /*ARGSUSED*/ extern void setshape(Client *c) { #ifdef SHAPE int n; int order; XRectangle *rect; if (shape) { XShapeSelectInput(dpy, c->window, ShapeNotifyMask); rect = XShapeGetRectangles(dpy, c->window, ShapeBounding, &n, &order); if (n > 1) XShapeCombineShape(dpy, c->parent, ShapeBounding, border - 1, border - 1, c->window, ShapeBounding, ShapeSet); XFree(rect); } #else #endif } #ifdef SHAPE static void shapenotify(XEvent *ev) { Client *c; XShapeEvent *e = (XShapeEvent *)ev; c = getClient(e->window); if (c != 0) setshape(c); } #endif /*ARGSUSED*/ extern int shapeevent(XEvent *ev) { #ifdef SHAPE if (shape && ev->type == shape_event) { shapenotify(ev); return 1; } #else #endif return 0; } /*ARGSUSED*/ extern int isshaped(Window w) { #ifdef SHAPE int n; int order; XRectangle *rect; rect = XShapeGetRectangles(dpy, w, ShapeBounding, &n, &order); XFree(rect); return (n > 1); #else return 0; #endif } extern int servershapes(void) { #ifdef SHAPE int shape_error; return XShapeQueryExtension(dpy, &shape_event, &shape_error); #else return 0; #endif } // ------------------------------------------- // end of shape.cc // ------------------------------------------- miwm/struct.h0100664000076400007640000000654007675611374012570 0ustar bwisebwise//-*-c++-*- // ------------------------------------------- // RCS data: // $Date: 2003/06/23 14:47:24 $ // $Revision: 1.1.1.1 $ // $Source: /cvsroot/miwm/miwm/miwm/struct.h,v $ // $Id: struct.h,v 1.1.1.1 2003/06/23 14:47:24 bwise837 Exp $ // $RCSfile: struct.h,v $ // ------------------------------------------- // Copyright by Ben Paul Wise. // ------------------------------------------- // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program 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 General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // ------------------------------------------- #ifndef STRUCT_H #define STRUCT_H // ------------------------------------------- #include "miwm.h" class WorkSpace; class Menu; class MenuItem; class WindowManager; // ------------------------------------------- typedef void (*WMOperation)(void); // this is a simple list of (label, Client* , int) data. // if the Client is non-null, then it refers to that client. // if the client is null and the int is non-negative, it refers to that workspace. typedef struct menuitem menuitem; typedef struct Client Client; // this is a menu of hidden clients or workspace names // (if the client is 0, then it is just a workspace name) struct menuitem { char * label; // name to be displayed Client * client; // client window (if any!) // THIS IS NOT THE WORKSPACE OF THE CLIENT! int space; // work space (if any!) menuitem * next; // next in list }; enum BoxStatus { DBunarmed, DBarmed, DBundrawn }; enum Mode { // Window Manager modes wmStartup, wmShutdown, wmReady, // the base mode wmResizing, wmMoving, wmKilling, wmMenuing }; // the menu can be raised several ways. // this list will expand .... enum menuType { noMenu, operationsMenu, // perform various built-in operations hiddenClientMenu, // hidden clients in WS allClientsMenu, // all clients in WS commandMenu, // user-defined shell commands we can run changeWSMenu, // choice of WS sendCtoWSMenu // choice of WS }; // Window internal state. Yuck. typedef enum { IPendingReparenting, INormal } IState ; // Window edge, used in resizing. The `edge' ENone is used to signify a // window move rather than a resize. The code is sufficiently similar that // this isn't a special case to be treated separately. // These MUST be in the same order as they appear in cursor.cc ! typedef enum { ETopLeft = 0, ETop =1, ETopRight=2, ERight =3, ENone =4, ELeft =5, EBottomLeft =6, EBottom =7, EBottomRight =8 } Edge ; // c->proto is a bitarray of these enum { Pdelete = 1, Ptakefocus = 2 }; // ------------------------------------------- #endif // ------------------------------------------- // end of struct.h // ------------------------------------------- miwm/sunflower.xpm0100664000076400007640000043652307675611375013656 0ustar bwisebwise/* XPM */ static char *Sunflower[] = { /* width height num_colors chars_per_pixel */ " 255 278 233 2", /* colors */ ".. c #c4c274", ".# c #acf6a4", ".a c #ecca74", ".b c #e4de74", ".c c #e4deac", ".d c #ecca8c", ".e c #f4f2ac", ".f c #f4ca8c", ".g c #fcf68c", ".h c #bcc2ac", ".i c #f4f2cc", ".j c #acc69c", ".k c #f4d294", ".l c #f4dea4", ".m c #e4e294", ".n c #c4c694", ".o c #f4f29c", ".p c #ecfecc", ".q c #f4d2a4", ".r c #ecfea4", ".s c #ecd274", ".t c #f4caa4", ".u c #eceab4", ".v c #bcc68c", ".w c #fcfaac", ".x c #f4f2bc", ".y c #fcfacc", ".z c #ecd694", ".A c #f4daa4", ".B c #b4be94", ".C c #fcfa94", ".D c #eccaa4", ".E c #f4ce8c", ".F c #c4be9c", ".G c #b4caac", ".H c #f4da9c", ".I c #fcce74", ".J c #e4e684", ".K c #fcf2cc", ".L c #b4c694", ".M c #ecfec4", ".N c #f4d26c", ".O c #fce6ac", ".P c #fcee94", ".Q c #fcf29c", ".R c #fcd2a4", ".S c #fceac4", ".T c #e4e6ac", ".U c #ecd28c", ".V c #fcf2ac", ".W c #ccc69c", ".X c #f4facc", ".Y c #f4cea4", ".Z c #bcc69c", ".0 c #fcfabc", ".1 c #fcf2bc", ".2 c #fcfadc", ".3 c #bcbe9c", ".4 c #ecde9c", ".5 c #fcd294", ".6 c #dcdaac", ".7 c #f4fa94", ".8 c #fceaac", ".9 c #ecd6a4", "#. c #dcde84", "## c #fcc69c", "#a c #fcfaa4", "#b c #fcce8c", "#c c #b4c6a4", "#d c #ece69c", "#e c #f4d27c", "#f c #f4fadc", "#g c #f4faa4", "#h c #f4c684", "#i c #ece2ac", "#j c #ecca9c", "#k c #f4fe7c", "#l c #fcde94", "#m c #f4faac", "#n c #c4c6a4", "#o c #bcce9c", "#p c #fcdaa4", "#q c #b4cacc", "#r c #fcf6dc", "#s c #fcf2a4", "#t c #fcd2b4", "#u c #e4e2ac", "#v c #f4f6ac", "#w c #f4f6cc", "#x c #acca9c", "#y c #ecde94", "#z c #c4ca94", "#A c #f4f6a2", "#B c #e4d691", "#C c #f4d6a7", "#D c #b4ce94", "#E c #ece691", "#F c #e4da74", "#G c #bcca91", "#H c #fcfeaf", "#I c #f4f6c2", "#J c #fcfecd", "#K c #ecda9c", "#L c #fcfe9b", "#M c #ecd2a6", "#N c #e4e2a0", "#O c #c4c2a4", "#P c #fcda90", "#Q c #ece684", "#R c #fcf6cf", "#S c #b4ca97", "#T c #fceaa4", "#U c #fcd6a5", "#V c #fcf6af", "#W c #c4c6ac", "#X c #fcd25c", "#Y c #ccbed4", "#Z c #c4c2bc", "#0 c #f4ce74", "#1 c #fcfe7c", "#2 c #f4eeba", "#3 c #e4e27e", "#4 c #b4c2a4", "#5 c #fceed4", "#6 c #fceebc", "#7 c #c4bad4", "#8 c #fcd67c", "#9 c #fcdea4", "a. c #c4be8c", "a# c #b4cea4", "aa c #ece6ac", "ab c #fccea5", "ac c #e4daa6", "ad c #bccad4", "ae c #f4ca9c", "af c #f4ce9c", "ag c #ecd29c", "ah c #fcce9c", "ai c #e4d69c", "aj c #fcda9c", "ak c #c4c6bc", "al c #fcfe8c", "am c #e4e271", "an c #ecce8e", "ao c #f4d69c", "ap c #ecd66e", "aq c #ecda90", "ar c #ecceac", "as c #c4c299", "at c #fcf69a", "au c #ccca98", "av c #f4fecf", "aw c #bccaa1", "ax c #fcfec3", "ay c #fcf6c2", "az c #fcfedc", "aA c #bcc298", "aB c #ece29e", "aC c #fcd698", "aD c #f4fe9a", "aE c #fceeac", "aF c #ecdaa4", "aG c #fcca99", "aH c #eceaa0", "aI c #f4feaf", "aJ c #f4fec2", "aK c #ece292", "aL c #fccaa6", "aM c #ecea81", "aN c #fcfa8c", "aO c #bcba9c", "aP c #b4c294", "aQ c #f4d66c", "aR c #fcfea4", "aS c #b4caa4", "aT c #f4d67c", "aU c #f4fedc", "aV c #f4fea4", "aW c #f4ca84", "aX c #ecce9c", "aY c #fcf6a4", "aZ c #bcc2a4", "a0 c #bcc28c", "a1 c #fceea4", "a2 c #ecca84", "a3 c #fce2a4", "a4 c #b4d2a4", "a5 c #e4deb4", "a6 c #f4f2b4", "a7 c #f4ca94", "a8 c #f4d29c", "a9 c #c4c69c", "b. c #f4f2a4", "b# c #ecfed4", "ba c #f4d2ac", "bb c #bcc694", "bc c #fcfab4", "bd c #f4f2c4", "be c #fcfad4", "bf c #f4daac", "bg c #fcfa9c", "bh c #f4ce94", "bi c #e4dea4", "bj c #fcce7c", "bk c #fcf2d4", "bl c #b4c69c", "bm c #e4e6a4", "bn c #fcee9c", "bo c #fcd2ac", "bp c #e4e6b4", "bq c #ecd294", "br c #fcf2b4", "bs c #f4fad4", "bt c #f4ceac", "bu c #bcc6a4", "bv c #fcfac4", "bw c #fcf2c4", "bx c #fcfae4", "by c #ecdea4", "bz c #fcd29c", "bA c #f4fa9c", "bB c #fceab4", "bC c #ecd6ac", "bD c #fcce94", "bE c #ece6a4", "bF c #f4fab4", "bG c #fcdaac", "bH c #f4fac4", "bI c #e4e2b4", "bJ c #f4f6b4", "bK c #f4f6d4", "bL c #accaa4", "bM c #c4ca9c", /* pixels */ "#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaxav#J#VahaRax#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz.y#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbe#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J", "#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#V.H#H#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J.yaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J", "#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbe#J#J#Jax#V#H#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz.yaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J", "#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz#Jaz#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#J#J.yaz#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#Jaz#J#Jaz#J#Jbe#Jasbe#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#Jaz#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J", "#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz.y#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J", "#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jazazaz#J#J#J#Jazaz#J#Jazaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jbe#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaxax#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J", "#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#Jax#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#Jax#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#Jaz#Jaz#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#Jazaz#J#J#Hay#H#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#J", "#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaxax#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#a#L#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaxax#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbv.y#J#J#Jaz#J#JaxaxatbE#A#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaxax#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J", "#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#Jbv#J.paRaRaRax#Jaz#Jaz#J#Jaz#Jbeaz#Jaz#J#J#Vbyax#Jbe#Jaz#J#J#J#J#J#J#J#J#J.2#Jazazbe#Jbe#J.yax#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz#Haz#Jazaz#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Lah#a#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jazaz#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz.2azaz#J#J#Jaz#J#J#Jaz#J#J#Jax#u#J#J#Jazbe#J#J#Jax.yax#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J.8#P#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J", "#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jbe#J#J#J.2.y#Vbz#Haxaz#J#J#J#J#J#J#Jaz#J.yaz#Jazaxay#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jbs.y#J#J.y#Jb##Hazax#Jaz#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#H#Zax#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#JavazbeaU#J##ab#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jax.y#Jaz#J#J#J#J#J#J#J#J#J#J.y#Jbe#J#J#J#J#J#Jax#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbv.l.dax#J#J#J#Jaz#J#J#J#J#J#J#J#J#J", "#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jbe#Jbe#Jax#Jax#J#J#J#J#Jaz#Jaz#J#Jbe#J#J#Jaz#Jaz#J.2#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#Jbe.y#J#Jbea#a0aI#J#J#Jbe#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jazax#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J.y#J#JazaR#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#H#Jax#Jaz#J#J#Jaz#J#J#J#Jazbe#J#J#J#J.y#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J.yay.yax#J#J#J#J#J#J#J#J#J#J#J#J#J", "#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#Jaz.yav#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#Jaz#Jbebe#Jaz#J#Jazbe#Jbe#J#J#J#J#J#J#J#J#J#J.2#J#J#Jazb##Gaz#J.yaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#Jbe#Jbe#Jaz#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Javaz#Jbv#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jazbe#Jaz#J#J#Jaz#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jbe#Jaxas#H.yaz#J#J#J#J#J#J#J#J#Jazbebeaz#J#J#J#J#J#J#Jaz#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J.y#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J", "#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbe#JbH#J#J#J#J.2#J#J#J#J#J#J#Jaz#Jaz#J#Jbe#Jaz.y#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J#Jbrax#J#Jav#J#J#Jbe#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jbeaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#JaU#JbeaR#Jaxbx#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jax.y.y#J#Jbe#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J.y#J#J#J#J.y#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J", "#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#Jbeav#Jazaz.yaz#Jaz#J#J#Jaz#J#J#J#J#Jbe#Jaz.yaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J.2#J#J#L.R#L#J.yazaJ#Jaz#J#J#Jaz#Jaz#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J.y#Jaz#Jbe#Jaz#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#Raz#Rbzabavaz#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#LaY#Hbeaz#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J.2#Jbe#J#J#J#J#J#J#J#J#J#J#J#Jbebeaz#Jbe#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J", "#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#JaLaGax#J#R#Jaz#Jaz#J#Jaz#J#J#Jaz#Jbe#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jbg.q#H#J#Jaxaz#J#J#Jazaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jazbe#J#J.y#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#JaJazatab#H#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz.7aK#a#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jazbe#J.2#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jbe#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J", "#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Ja8..#a#J#J#Jbeax#J#J#J#Jaz#J#J#J#Jaz#Jav.Zaz#J#J#Jazbeazbeaz#J#J#J#J#Jaz#J#J#J#J#J#J.2#J#R#Jaz#Jbx#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jbeaz#J#J.y#J#Rav#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J.C.2#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jbe#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J", "#J#J#J#J#Jaz#J#Jazazaz#Jaz#Jazazazaz#J#J#Jazbe#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaxax#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jazbeax#Haxaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jazaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#V#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jazbe#J#J.y#Jay#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J", "#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaxbv.yaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jax#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jbe#J#J.2#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jbe#J#Jazbe#Jbebe#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J.y#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbybv#Jaz#J#J#Jaz#Jaz#J#J#J#J#J#J#Jaz.y.y#Jbv#N#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J", "#J#J#J#J#J#J#J#J#Jaxax#J#Jazax#H.Cax#J#J#J.2az#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#Jaz#Jax#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#Jaz#Jav#Jaz#Jbe#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#Jaz#J#J#J#J#J#J#J#Jaz#Jaz#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J.y#J#J#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J.2az#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J", "#J#J#J#J#Jaz#J#Jaz#J#Jaz#Jaxax#Hap.0#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#Jbeaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jbeaz#Jbeaz#J#J#J#J#J#R#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#Jbe#J#Jbe#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#Jbe#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#R#J#Jbe#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#Jaxax#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J", "#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#Jax#a#Jaz#J#Jbe#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jazaz#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#Jaz#J#J#J#Pa1axax#J#J#Jazbe#J#J#Jbe#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jbe#J.y#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J.2azbe#Jazbeaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J", "#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#Jazaxaz#J#J#J.y.2az#J#Jaz#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#Jaxaz#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#Jaz#J#J#J#Jax.tbG#R#Jaz#Jaz#J#J#H#L#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#Jbe#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jazbe#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J", "#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#Jax#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#H#s#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jax.w#Vaxax#J#J#J#J#Jbg.b#v#Jaz#J.y#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#JasbH#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#Jaz#J#J#J#J#Jaz#J#Jbe#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#Jax#Jax#HaVax#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J", "#J#J#J#J#J#J#J#J#J#J#Jaz#Jax#H#Lbe#J#J#Jaz#Jav#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#JaFbe#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#JaJ#J#J#Jaz#J.y#J.2#J.y#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jax#J#J#J#J#J#J#J#J#J#J#Jax#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#Jbe.yaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jazaz#J#J#Jasaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J", "#J#Jaz#J#J#J#J#Jaz#J#J#J#J#Hat#Caxax#J#Jaz#J#J#J#J#Jazaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jazbeaz.2#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#Jaxax#J#J#J#Jaz#J#J#J#J#HaO#Jaxaz#JaIbL#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaxax#Jazaz#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J", "#J#J#J#J#Jaz#J#Jbe#J#Jaz#Jax#Hayax#J#Jaz#J#J#J#J#J#J#J.2#J#HaYax#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J.y#J#J#J#J.y#J#J#J#J.y#J.y#J#J#Jaz#J#J#J#Jaz#J#J#J#J#JazbHaz#Jaz#J#J.2#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaxazaz#J#Jbv#Ga#ax#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#J.y#J#J#J.y#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#H.wax#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbeaz#J#J#J#J#J#J#J", "#J#J#J#J#J#J#J#J#J#Jazaz#J#Jaxaz#J#J#J#J#J#J#J#Jbx#J#Jbeaxbg#QaY#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J.y.Lav#J#J#J.y#J#J#J#J#J#J#Jaxaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#Jav#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jazaz#Jaz#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#L#3aYax#J#Jbe#J#J#J#J#Jaz.2#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J", "#J#Jaz#J#Jaz#J#J#J#Jbe#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbv#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#Jbe#J#J#waz#Ja.#Sav#Jbe#J#J#J#J.ybe#J#Jaz#J#Jazaz#J#J#J#Jaz#J#J#J.y#J#Jaz#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz.2az#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J.y#J#J#J#J#Jbeax#Jax#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#6#Jaz#J#J#J#Jaz#J#J#J#J.2az#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#Jaz#Jaz#J#J#J#J#J#J", "#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#Jaz#J#Jaz#J#J#Jazbeaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbe#J#J#J#J#Jav#J#J#J#J#J#Jbe#J#J#JaU.y#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J.ybeax#Hax#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#Jaz#J#J#Jaz#Jazaz#J#Jbebe#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jazazaz#Jax#H#V#H#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#Jaz#Jaz#J#J#J#JbKazaz#JaUaz#J#J#Jazaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J", "#J#J#J#J#J#J#J#Jaz#J#J#J.ybe#Jaxaz#J#J#J#J#J#J#J#Jax#Jazaz#Jazaz#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J.y#J#J#J#J#J#J#JavbuaZ#J#Jaz#J#J#J#J#J#J#J#J#Jbg#Hax#Javav#c.G#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J.y#J#Jax#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#I#J#J#J.y.2#Jaxaxbgaa#V#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#Jaxbr#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J.2#J#Jazaxax#J#J#Jaz#J#J#J#J#Jaz#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J", "#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jbe#J#J#J#J#Jbs#GaI#Jaxax#Jaz#J#J#J#Jaz#J#Jawav#J#J#J#JaA#H#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J.ybp#J#J#J#Jaz#J.y#J#Hbwax#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J.S#lay#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#Jaz#Jaz#J#Jazbe#J#Jbe#J.y.2#J#Jazbe#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J", "#J#J#J#J#J#J#J#Jbe#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#J#Jaz#Jbvaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#Jbe#Jav#JaRbc.yaz#J#J#Jaz#J#J#J#J#Jbeaz#J.2#Jax#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#Jbe#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbv#J#J#J#Jaz#Jaz#Jaxaz#Jbx#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jbv#CaWay#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jazbe.y#J#Jay#Bbv#J#Jazbeaxaxaxaz#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J", "#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jbe#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#J.2be#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaxaxax#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#Jaxbg.b#H.y#J.yaxayau#I#J#Jaz#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J", "#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J.ybe#Jaz#Jbe#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jbe#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jbe#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jax#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J.2az#Jayaz#J#J#J.y#Jbv#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J", "#J#J#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#Jay#J#J#Jaz#J#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#Jbe#J#J#J#J#J#Jaz#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#Jazbe#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#Jaz#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#Jaz#J#J#J#J#Jazbe#J#Jbe#J.y#J#J#J#J#J#Jaz#J#J#J#J#J#Jazaz#J#J#J#J#J#Jax#J#J#J#J#J#J#J", "#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#2#i.y#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jax#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jax#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J.yaz#J#J#Jax#H#H#H#J#J#J#J#J#J#J", "#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#Jay#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J.y#J#Jaz#J#Jax#Hbc#H#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jax#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#Jaz#Jaz#Jaz#J#J#J#J#J#J.x#Jaz#Jbeaz#J.yax#a#d#A#J#J#J#J#J#J#J", "#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J.yaz#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#Jbd#J#J#J#J#J#J.yaxaYbEaY#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#Jav#J.y#V#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jazaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J.2#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jbv#Jaa#J#J#J#J.2#J#J#J#H#R#J#J#Jaz#J#J#J#J", "#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#JbI.y#J#Jbe#Jaz#J#J#H.xaxaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J.8#9ax#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbe#J#Jaz#Jaz#J#J#J#J.y#J#J#J#Jaz#Jazbeaxazaz#J#J#J#J#J#J#J", "#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbv#J#Jaz#Jaz#Jazbeaxaz#J.2#J#J#J#J#J#J#Jaz#J#J#J#J#J#J.y#U.d#V#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jax#J#Jazaz#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jazaz#J#Jaz#J#J#J#J#J#J#J#J#Jbe#Jbe#J#J#J#Jaxaz#Jaz#Jaxaz#J#J#J#J#Jaz#J#J", "#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jazbebe#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#Jbe#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#Jaxaxax#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#JbH.n#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jax#V#J#Jaz#Jaz#Jaz#J#Jbeaz#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jac.y#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#JaxbJ#J#J#J#Jazaz#J#J#J.2#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J", "#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#Jaz#Jax#Ha8#R#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jbe#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J.y#J#J#J#Jaz#Jaz#J#J#J#J#J#Jaz#J#2aa.ybe#J#Jax#HaR.y#J#J#Jbe#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#R#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#JbJaa#R#J#J#J#J#J#J#J#Jbe#J#J#J#J#J#J#J#J#Jbe#J#J#J#Jaz#J#J#J", "#J#J#J#J#J#J#Jaz#Jaz#Jaz#J#Jaz#Jazaz#Jazaz#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jax#H.5br#Jav#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J.2#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J.y#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaxbv#J#J#J#J#J#YaV#J#Razbe#J#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#Jaz#Jbe#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jax#J#J#J#Jaz#J#J#J#J#J#J#J.2#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J", "#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jax#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jax#Vax#J#J.2#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jbe#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jbe#J#Jbe#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jbe.2#J#J.2#J#Jbe#Jaz#J.y#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J.y#J#J#J#J#J#J#J#J#J#J#J#J#J#Jazaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J", "#J#Jaz#J#J#J#J#Jaz#Jaz#Jaz#J#J#J#H.w#H#J#J#J.y#J#J#J#J#Jaz#J#J#J#Jaz#Jaxax#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#Jax#Jaz.y.yaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#Jaz#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jax#J#J#Jax#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J", "#J#J#J#J#J#J#Jbd#J#Jaz#J#J#J#J#JaY#E#V#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jbv#V#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#Jaz#J#J#Jazaz#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jbe#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#Jbe#J#J#J#Jaz.2#Jaz#Jazbe#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jbe#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#Jax#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J", "#J#J#J#J#J#J.yaa#J#J#Jaz#Jaz#J#Jax#V.y#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#Ja1#pax#Jax#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#Jazazaz#J#J#J#Jbe#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz.y#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#Jbe#Jazaxazax#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J.y#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#Jazax#H#aax#Jaz#J#J#J#J#J#Jaz#J#J#J#J", "az#J#J#J#J#J#Jbv#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J.yaC.fay#Jax#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#J#Jazaz#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#Jbe#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#Jazaxaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jbe#Jbe#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbe#J#J#J#J#J#Jazbe.0#L#3aYbeaz#J#J#Jazaz#J#J#J#J#J#J", "axax#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaxax#J#J#J#Jazaz#Jaz#J#Jaz#Jaz#Jaz.y#J#J#J#J#J#J#J#J#J#Jazbe#J#Razbe#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jazaz#J#Jaz#J#Javaz#Jaz#J#J#J#J#J#J#Jazazbe#J#J#J#J#J#J#J#J#Jaz#Jaz#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J.y#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jazaz#J#J#Jbv#Hbc#L#Jaz#J#R#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J.y#J#J#J#J#J#J#J#J#J#Jaz#J#J", "bxazaz#Jaz#Jbebe#J#J#Jbe#Jbe#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#Jbe#Jaz#J#J#J#J#J#J#J#J#J#J#Jax#Vao#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J.2az#J#R#J#J#J#J#J#J#J#J#J#J#J#J#Jbeaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jazav#J.yby.y#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#Jay#J#Jbe#Jaz#J#J#JaY.T#a#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J", "ax#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#Jbe#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#Jaz#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jbe#J#R#Jaz#J#J#Jaz#J#Jaz#J#Jat.saV#J#Razaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbe#Jav#J#5.R#J#J#J#J#Jaz#J#Jaz#J#J#Rav#Jbeaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#Jav#J#Jbw#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#JbI.y#J#J#J#J#J#Jbe#H#Rax#Jbe#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J", "aRbv.2az#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J.2#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#Jbw#R.2#Jaxaxbe#Jaz#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#Jbe#JaU#J#Va8ax#J#J#Jaz#J#J#J#J#Jaz#JaJ#J#Jaz#Jaz#J#J#Jaz#J#J#J#J#Jaz#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jazbe#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbe#J#J#J#J#J#Jaz.yaxaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J.ybfag.1#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J", "#1aR#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J.2#J#Jaz#Jaz#J#Jazaz#Hbe#R#J.y#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J.2az#J#Hax#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#Jaz#Jax#J.waxax#Jaz#J#J#J#J#J#J#J#Razbeaz#J#J#J#J#J#J#J#J#Jaz#J#J#Jazaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J.y#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jbe#J#J#Jaz#J#J#J.2be#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jay.1axaJ#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J", "bv#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jax#J#J#J#J#J#J#Jbe#Jaz#J#J#H#Zax#Jbeazaz#J#J#J#J#J#J#Jaz#Jazavaz#J#J#J#RaSax#J#J#Jaz#Jaz#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jax#J#J#J#J#J#J#J#J#Jaz#JbcaL#Jbk#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jbeaz#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#Jbe#J#J#J#J#J#Jbe#J#J#Jazaz#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J", "#J#Jax#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaxaxax#J#J#Jazax#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jav#J#J#J#J#Javax#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jazazax#J#J#J#J#J#J#J#Jazax#a.IaVbv#JaJ#J#J#J#J#J#J#J#J#J#Jaz#Jaxax#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J.y#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J", "#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jazaz#J#J#J#Jaz#Jax#H#Hax#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#R#Jbe#Jbe#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J.Kb##J.yaz#J#Jaz#J#J#J#J#Jaxaz#J#J#H#Haxaz#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaxaz#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J", "#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#JaxaR#E.eax#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J.y#J#J#J.y#J#Jav#J#H#Jaxazazaz#J#J#J#J#J#J#J#J#J#J#rbe#f#Jbe#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jazax#Jazax#a.baY#J#J#J#J#J#J#J#J#J#J#Jaz.y#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jazaz#J#Jazbe#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J", "#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#Jbw#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jazbv#Hbvax.2#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#Jbe#J#Jbe#J#J#J#J#R#paG.Vax.y#J#J#J#J#J#Jaz#J#J#Jbe#J#Jax#J#J#J#JaR#Hax#J#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jbeazaz#J#Jbw#J#J#J#Jazaz#Jaz#J#J#J#J.y#J#Jbe#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jazaz#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J", "#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J.y#R#i.y#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J.2az#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J.ybI#J.y#J#J#J.Oab.w#J#J#J#J#J#Jaz#J#J#Jaz#J#J.yax#J#Jbe#Jbe#J#J#Jazazaz#Jaz#J#J#J#J#J#J#J#J#Jbeazbe#J#Jazaz#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#JaJ#Jazaz#J#J#J#J#J#J#Jazaz#J.y#J#J.y#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J", "#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#R#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaxaz#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J.y#J#J#J#Jav#Jaxax#J#Jazaz#J#J#J#J#J#J#J#J.2beaz#Jaz#Raz#J.2az#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#Jax#Jazaz#Jaz#Jaz#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#Jax#J#J.ybe#J#J#J#J#J#J#J#J#J#J#J#J#J.y#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J", "#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J.y#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#a#H#Jax#Jbeaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J.y#J#J#Jbe.2axaz.ybeaz#J#J#J#J#J#J#J#J#J#J#Ja1.qaRaxaxavaxax#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jazaz#J#J#J#J#J#J#J#J.y#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#Jaz#J#J#J#Jax#J.y#Jaz.y#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J", "#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#a#N#aax#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J.y#Jbe#J#J#J#Jbe#J#J#Jaz#J#Jaz#J#J#J.y#Uaebv#J.yaz#J#Jaz#Jaz#Jaz#J#J#J#Jaz#J#J#J#JaJ#J.2#JaJ#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jbeazbeazazaz#J.y#J#Jaz#J#Jaz#J#J.ybI#J#J.y#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#Jax.n.y#J.y#J#Jaz#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#Jazaz#Jazaz#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J", "#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#g#J#Jax#J#Jaz#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#Jaz.y#J#Jaz.y#J#J#Jav#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Rbe#J#J#R#J#J#J#J#J#J#Jazaz#J#J#J#J#J#J#J#J#Jbr.V#Jazaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#R#J#J#Jbe#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jax#J#J#J#Jaz.y#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J", "#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz#J#J.y#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J.y#J#J#Jbe#J#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J.2#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#JaR.5ab.y#JbebeaU#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbeaz#J#J#J#Jax#H#H#L#J#J#J.y#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J.ybeaz#J#J#J.y#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#JaR#H#Hax#J#Jbe#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J", "#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jbe#Jbeah#a#J.2#J#Jaz#J#Jaxax#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#Jaz#J#Jazaz.y#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#H#Hax#J#J#J#J#J#J#Jaz#J#J#Jaz#Jaz#J#Jaz#J#J#Jaz#J#Jax.1#J#J#J#Jbx#Jbe#JbgaF#V#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#a#Jazbe.yav#Jaxax#J#J#Jazaz#J#J#J#J#J#J#J#Jay#J#Jaz#J.2#J#J#JbgaKay.y.y#J#J#Jaz#J#Jaz#J#J#J#Jazaz#J#Jbg#Jazbe#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J", "#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jbeaz#J#J#J#J#Vao#Ebvaz#J#J#J#J#Hax#J#Jaz#J#J#Jaz#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbe#J#J#J.ybeaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#Jaxax#Jaz#J#J#J#Jaz#J.y#Jbe#Jbe#J#J#J#J#J#J#J#Jbe#Jbv#Jbi#J#J#J#J.2#J#J#J#Hayax#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J.Q#U#R#J#Jazaz#L.naJ#J.yaz#J#J#J#J#J#J#J#J#Jbvaa#J#Jaz#Jaz#J#J#J#Hay#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#T#paxaz#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J", "#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#Jaz.2#J#Jax#V#V#Jazaz#Jaz#J#Jax#J#J#J#J#J#J#J#J#J#Jbe#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J.2#J.yax#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#Jaz#Jax#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J.y#J.y#J#J#J#J#J#J#Jaz#Jaxaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#Jbo.fbc#Jaxaxaz#R.y#Jazbe#J#J#J#J#J#J#Jaz#J#J#J.y#Jax#J#Jaz#J#J#Jax#J#Jaz#Jax#J#J#J#Jaz#J#J#Jaz#J#J#Jbe#U.E#V#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J", "#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaxax#J#R#J#J#Jaxax#J#Jazaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#JaxaVaz#J.2#J#Raxazaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jbea9#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J.yaz.ybe#J#J#Jaz#J#J#Jazaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#a#J#J.y#J#J#Jaz#w.yaz#J#J#J.y#J#J#J#J#Jbe#J#Jbe#Jbe#J#J#Jaz#Javazaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#R#V#J#Jax#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J", "#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jazaz#J#J.yazazaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jax#Z#J#J#J#J#HbbaU#Jaz#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#Jazaz#R#J#J#J#J#J#Jbe#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jav#J#J#J#J#Jazax#J#J#J#Jaz#Jaz#J#Jaz#J#Jaz#J#J#R#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J", "#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#Jbe#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J.y#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jbe#J#J#Jbe#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jazaz#J#J#Jbe#J#J#J#J#J#Jaz#Jbeaz#J#J#J#J#J#J#Jazaz#Jaz#Jaz#Jaz#J#J.y#J#J#J#J#Jaz#Jaz#J#J#Jaz#J#Jaz#J.2az#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J", "#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#Jbe#Jaz#J#J#Jaz#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#Jbe#Jazax#Jax#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz.y#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#Jbe#J#Jazbe#J#J#R#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J.2bebe#J#Jazaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jbe#J#J#J#Jbe#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jbe#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J", "#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jbe.2#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#Jaz#Jaz#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#Jaz#Jaz#J.y#J#J.2#JaRaxax#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jazaz#J#J#Jaz#J#J#J#J#Jaz#Jbe#J#J#J#J#Jaz#J#J#J#J#J#J#J.y#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J.2#J#J#J#J#J#J#Jaz#J#J#J#J#Jbe#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jbe#J#J#Jaz#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J", "#J#Jax#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J.2#Jaz#J#Jbe#J#Jbe#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jab#Cay#Jazaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J", "aI.3#Oaz#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#Jazaxaz#J#J#J#J#J#J#Jax#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J.2#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jbvay#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J.y#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#Jbe#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J", "az#z#max#Jaz.y#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jav#JayazaJ#Jbe#J#J#Jav#Jav#J#J#Jaz#Jaz#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#Jax#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#JaJ#J#Jazaz#Jbe#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jbeaz#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J.2axazbcaz#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#Jaz#J#J", "ax#Jbe#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#JaxaE#Jav#Jaz#J#J#J#J#J#V#a#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#H#a#H#J#J#Jaz#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jbga7aj.y#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J", "#J#J#Jbe#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#JaR#U.wavax.yaz#Jaz#J.1#Uafbe#Jaz#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#J#Jazax#Jazax#HaKb.ax#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jazaz#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz.y#J#Lab.8#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J", "az.y#J#J#J#J#Jazaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#JaY.A#V#Jbe#J#J#J#J#Jax.w#L#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jazaz#J#J#Jax#H.y#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#Jbv#J#Jbe#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J", "#J#J#J#Jbeaz#Jax#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#Jax#Jbvax#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jax#J.2#J#J#J#J#J.y#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jbe#J#J#Jaxbr#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#Javaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J", "#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jazaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz#Jaz#J#J#J#J#J#Jazaz#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jbr.H#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaxaz#J#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#J", "#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jbe#J#J#J#J#J#J#J#J#J#J#J#J#J#JbebC#M.y#J.ybe#J#J#Jaz#J#J#J#Jaz#J.y#JaR#L#Jax#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J.2#J#J#J#Jbxax#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#Jaz#Jaz#Jaz#J#J#J#Jazaz#J#J#J#Jaz#Haxazaz#Jaz#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#Hax#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J.2#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J", "#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J.y#R#J#J#J#Jbe#J#J#J#J#J#J#J.yaz#J#a.cbgax#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#raz#Jaz#Jaz#J#Jaz#J#J#J#Jbe.y#J#J#Jazaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#Jaz#J#Jaz#Jaz#m#Jbe#J#J#J#J#J#H#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#H#H#Jaz#Jaz#Jaz#J.yaz#J#J#Jbe#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#A#Jaz#Jaz#Jax#J#Jbe#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J", "#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#Jbe#J#Jav#J#J#J#Jaz#J#J#J#J#J#J#J#J#g#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#JaJ#J#Jaz#Jbe#Jaz#J#J.y#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J.wbu.y#J#Jazaz#Jazaxaxaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jax#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#Jaz#J#RaK.wax.y#Jazax.y#J#J#J#J#Jaz#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J", "#J#J#Jaz#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#Jbe#J#J#Jbe#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaxaxbx#J#J#J#w#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jax#Jbe#J#J#Jaz#J#J#J#J#Jaz#Jbebe#Jaz#Jbg#S#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#Jav.y#Jaz#Jaxaz#J#J.CaRaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jazbe#Jaz#Jazbe#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#HaYaR#J#Jax#J#Las#J#J#waz#Jbe#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J", "#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J.y#J.y#J#J#J#Jaz#J#J#J#J#Jbe#J#J#J#J#J#J#J#J#Jazaz#JaE#P#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jazaz#Jazay#J#Jaz#J#J#J#Jaz#J#J#Jaz#J.yaz.y#Jaz#S#Gav#J#Jbe#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jazaz#J#J#J#Jaz.yaV#KaY#J#J#Jax#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#Jaz#J#Jazax#Jbe#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jbeax#J.2az.2az#J#J#J#J#J#Jbe#J#J#J#Jaz#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J", "#J#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jbw#9#h#H#J#J#J#J#Jax#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#H#Laxaz#J#J#J#J#J#J#J#J#JaRaR#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J.yaz.yaxaz#JaRaz.ybg#Lay.yaz#Jazaz#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#Jazazaz#J#J#J#J#J#Jax#Jbvazaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#Jax#J#J#J#J#Jbe#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J", "ax#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#Jas.y#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Rbe#J#Jaz#J#J.0#Jaxaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#Jbv#7aR#R#Jaz#J#Jaz#J#Jaz#J#JadaIax#r#J#Jaz#J#Jbe#J#J#J#J#J.y#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#Jaw.r#Jbxbe#J#S.j#J#Rbeaz#Jbeaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jazax.W#m#J.y#Jbx#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jazax#Jaz#Jax#J#J#J#Jaz#Jaz#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J", "#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J.yazaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#JaR#J.y#J#J#JbbaI#Jav#JaR#Jav#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#Jax#Jax#J.2#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#Jbeaxaz#J#J#J#J.2az#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J", "axbeaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#Jaz.2#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#Jaz#Jaz.y#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaxaxaxazaz#Jaz#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jax#Vbi.y.y#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#Jaz.y#J#J#J#Jaz#Jbe#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz.y#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaxazaxaz", "#J#Jbe#J#Jbe#Jbe#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#Jbe#J#Jbe#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J.y#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#H#aax#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jbe#Jbe#J#J#Jaz#J#J#J#J#Jay#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jbe#Jaz.2a1.q#J", "az#J.yaUazbe#J.2#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jbe#J#Jaz#Jaz.y#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J.yaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#L#3aYax#J#J.y#Jaz#J#J#Jaz.2#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#Jax#J#J.2#Jbe#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#Jaz#Jbe#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#Jaz#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#JazbKbv#paX.w", "#J#J#JaJ#Jbe#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbe#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jbw#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#6#Jaz#J#J#J#Jaz#J#J#J#J.2az#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J.y#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jax.c#R#Jaz#J.yaz#J#J#Jaz#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#JaYbe", "#Jaz#R#J#J#J#Jav#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#R#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jay.cay#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#Jaz#J#J#J#Jaz#JbKaz#J#JaU#J#J#J#Jazaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#Jax.y#J#Jbe#Jaz#J#J#J#J#Jaz#Jax#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J.y#J#J#J", "#Jbca7beav#Jaz#r#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jbe#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J.y#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jbe#J#Jaz#Jax#Jaz#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbe#J#J#J#J.y#J#J#J#J#Jaz.yax#Jbe#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#R#J#J#Javaz#J", "ax#LaQ#Hbe#Jav#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#R#J#Jbd.6#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J.y#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#Jaz#Jaz#J#Jazbe#J#Jbe#J.ybe#J#Jazbe#Jax#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jazazax#Jaz#Jax#Vbe#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#Jaxbr#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jbe#J#Raz", "az#J#J#J#J#J#JaU#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jbv#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jazbe#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#Jaz#Jazbe.y#J#Jay#Bbv#J#Jazbeaxax#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#Jaz#J#J#Jaz#Jaz#J#Jax.0#J#J#J#J#J#Jbe#J.wac#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#Jaxbr#K#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#Javaz#J#J#J#J.y", "#Jaz#J#Jazax#H#J#J#J#J#J#Jaz#J#Jaz#Jaz#Jaz#J.yaz#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaxbg.b#H.y#J.yaxayau#I#J#Jaz#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J.1bybv#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#Jbe#J#J#J#JaR#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J", "#J#Jbebeax#J.Wax#Jaz#J#J#J#J#J#Jazaxax#J#Jaz#J.y#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jbeaz#J#J.2#J#J#J#J#J#J#J#J#J#J#J#J#J.2az#Jayaz#J#J#J.y#Jbv#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jav#J.w#V#JaU#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#Jay#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J.yaz.y#J#H#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#J", "#J#J#Jaz.y#J#Jax#J#J#J#J#J#J#J#J#J#Jaxaz#J.y#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#Jbe.ybe#Jbe#J#J#J#Jaz#J#J#J#J#J#J#J#Jbe#J#Jbe#J.y#J#J#J#J#J#Jaz#J#J#J#J#J#Jazaz#J#J#J#J#J#Jax#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#Jbebeax.w.ka8ayaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jbe#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#Jaz#J#Jbeax#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J", "#Jaz#J#Jaz.yaxaz#J#J#Jaz#J#Jaz#JaU#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Hbg#J.y#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J.yaz#J#Jaxax#H#H#H#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jax#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jax#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J", "#J#Jbe#J#Jazbe#J#J#J#J#J#J#J#J#Jbe#H#J.y#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jax.C#N.w#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jax.x#Jaz#J.yaz#J.yax#a#d#A#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jazaz#Jav#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jazaz#v#J#J#R#J#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J", "#J#J#Jbe#J#J#J#J#J#J#J#Jaz#J#J#J.5an.w#J#J#Jbe#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#Jaz#Jbe#J#Hbg.yazaz#J#J#J#J#J#J#J#J#J#J#J.2#J#Jazaz#J#J#Jaz#J#J#J#J#J#Jbv#Jaa#J#J#J#Jbx#J#J#J#H#R#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jbe#J#Jazaz#J#R#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#R#JaB.ybe#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J", "az.y#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jbr.AaY#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J.2axbe#J#J#J.y#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jbe#J#Jaz#J#J#J#J#J#J.y#J#J#J#Jaz#Jazbeaxazaz#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#Jax#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#Jaz#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J", "#Jaz#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaxaz#Raz#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jbe#J#J#J#J#J#J#J#J#Jaz#J#J#Jazazax#Jaz#J#J#J#J#J#J#J#J#Jbe#Jbe#J#J#J#Jaxaz#J#J#Jaxaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jazaz#J#Jbeaz#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J", "#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#sbo#a#Jaz.y#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jazazaz#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#Ja9#J#Jaz#J#J#J#J#J#J#J#J#Jazazbe#J#J#J#J#J#J#J#J#J#J#J#J#J#JaxbJ#J#J#J#Jazaz#J#J#J.2#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#Jaz#Jazaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#JaxaRbv#Jazaz#Jaz#J#Jaz#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J", "#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J.9.dax#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J.2#J#J#Jaz#J#J#J#J#J#Jaz#Jbe#Jaz#J#Jaz#J#J#J#J#Jazav#Jaz#J#J#Jaz#J#Jaz#J#J#Jax#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#JbJaa#R#J#J#J#Jaz#J#J#J.2#J#J#J#J#J#J#J#J#Jbe#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J.y#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#JaxaY#3#Hax#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J", "#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#R.wazaxbeaz#J#J#Jaz#J#J#Jazaz#Jaz#J#J#J.2#J#JaR.wax#Jbe#Jbe#J#J#J#J#J#J#J#J#Jaz#Jbeaz#J#Jbeaz#J#J#J#J#J#J#J#Jaz#Jaz#J#J#R#J#J#Jaz#J#J#J#J#J#J#J#Jax#J#J#J#Jaz#J#J#J#J#J#J#J.2#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#Jbe#Jazavbsaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Vbe#J#J#J#J#J#J#Jazax#J.2#J#J.y#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J", "#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J.yazax.X#J#Jbe#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Laf#Ubwaz#J#JavaU#J#J#Jaz#J#J#J#Jbeaz#J#Raz#J#J#J#J#Jaz#J#J#Jaz#J#J#Jazax#HaYaxaz#J#J#J#J#Jaz#J#J.y#J#J#J#J#J#J#J#J#J#J#J#J#J#Jazaz#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#Jbe#Jazaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#Jaz#J#J#J.2az#Jaz#Javaz#J#Jaz#r#Jazaz#Jazbe#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J", "#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz.y#J#J#Jaz#J#J#J#J#J#Jaz#Jax#Hbg#Jaz#J#Jaz#J#JaR.w#J#Jbe#J#J.y#J#J#J#J#Jaz#J#J#Jbe#J#J#Jaz#J.2#J#J#J#J#J#J#J#J.y#Jaz#JaY#Ebc#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jbe#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#Jaz#Jaz.yaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Javbe#J#J#J#R#J#Jaz.y#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J", "#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#Jbe#Jaz#J#J#J#J#Jaz#Jax#Hambg#J#Jaz#Jaz#Jaz#J#Jaz#Jaz#Jaz#Jaz#J#J#J#J#J#Jaz#J#J#Jbe#Jaz#J#J#J#J#Jaz#J#J#Jaz#Jav#J#J#Raz#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jax#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J.y#Jbdby.y#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jbe#Jbe#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J.2az#Jbw#J#Jaxazax.yaz.y#Jaz#Jaz#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J", "#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jazbe#J#J#J#Jaz#J#J#J#J#J#Jaxaxbv#J.yaxazaz#J.yax#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jazaz.y#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#Jbv#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jazaz#J#J#Jaz#J#Jazax#Hbgax#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jbe#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J.Xax#Gaxbe#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jazazaz.2azazaxbebe#V.A.yav#J#J.2#JbF#J#Jaxaz#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J", "#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#Jax#J#J#J#J#J#J#J#J.2#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#Jbe#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J.yaz#J#J#Jaz#J#J#Jaz#J#Jazbe#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbe#J#J#J#J#J#Jazbe.0#Lam#V.yaz#J#J#Jaz#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#JaxaUaR.Z#Haz#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jax#J#J#Jbeax#Lapbcav.y#JaxaJ.Wax#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J", "az#J#J#J#Jav#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#Jaz#J#H.wax.2az#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jbeaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jazay#Jaz.y#J#J.2#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J.yaz#J#Jazazaz#J#J#Jaz#J#J#Jazaz#Jaxax#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#Jazaz#J#J#J#J#J#J#J#Jax#J#J#Jaz#J#J#J#Jaz#J#J#J#J#Jazazaz#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J", "#J#Jaz#J#J#J#H#L#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#L.baR#Jax#J#J#J#J.yaz#Jazax#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaxax#V#Jaxaz#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#Jaz#J#Jav#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#Jaz#J.y#JaU#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jax#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#Jaz#Jaz#J#J#Jaz#Jaz#J#J#Jax#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J", "#J#J#J#Jaz#JaE#Kaxax#J#J#Jaz#Jaz#J#J#Jaz#J#Jaz#J#J#6#J#Jbe#Jaz#J#J#Jaz.y#Jbx#Jbe#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#a.9aY#Rax#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#Jbebeax#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#H#aaR#Jaxbv#Jaz#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J.y#J#Jaz#J#J#J#H#HaR#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J", "#J#J.2.2#J#JaR#L#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jazazbeavaz#Jbe#Jaz#J#J#Jaz#J#J.2#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J.w.9#V#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J.K.A#M.V#J#Jbe#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#L.q.w#J.Va8.yaz#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#Jax.x#J#J#Jaz#J#JaxbvaYbEb.#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J", "#J#J#J#J#Jbe.y.y#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J.y#J.y#J#J#J.2av#J#J.2#J#J#J.2#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#Jay#J#Jav#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jav#Jbebc#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jat#JaJ#jaT#L#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#Jax#Jbp#J#Jbe#Jbeaz#J#J#H.Kaxaz#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J", "#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jazaz#Jbe#J.K#Jaz#J#J#J#Jaz#J#Jaz#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#Jaz#JaU.yaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#Jbebv#Jax#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Rbe#J#Jbw#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J.y#J#J#Jaz#Jaz#J.ybv.2#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J", "az#Jaz#J#Jaz#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jbe#J#J#Jbc.z.y.y#J#Jbe#JbJ#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J.2#Jaz#J.y#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#r#J#J#J.2.y#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#J#Jaz#J#Jazaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#Jax#J#J#J#J#Jaz#J#J#J.y#J#Jbe#J.y#Jaz#J#J#Jazazbe#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J", "#J#J.y#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#Jbeax#LaQbc.yaz#Jaxaxaubv#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#Jbe#Jav#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#Jav#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jazbeaz#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#Jaxaxay#J#Jaz#J#J#J#Jazaz#Raz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J", "#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J.2#J#J#J#J#J#J#J#J#J#Jazaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz.y#J#J.2.yax#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#Jazaz#Jaz#J#J#J#J#Jazazax#Jbx#J.2#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jbeaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jax#ubv#J#J#J#J#J#J#Jbe#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J", "#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#Jaz#J.yaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J.yaz#Jav#Jar#V#Jaz#J#J#Jazaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#R#Jaz#J#J#J#J#J#Jaz#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#Jaz.2#J#R#J#H.Wax#Jaz#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jbe#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaxax#J#J#J#Jaz#Jaz#Jbe#Jaz#J.2#Jaz.2#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J", "#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J.2#J#Jaz#J#J#J#Jaz#J#J#J#J#J#Jazazaz#J#J#J#H.waR#J#J#Jaz#J#J#J#Jaz#Jaz#Jaz#JaY.qaqayaz#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaxazaz#Jax.w#J#J#J#J#J#J#Jaz#J#J#J.2az#Jbv#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jbe#J#Jax#J#J#J#J#Jaz#J#J#Jaz#J#Jbeaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#Jaz#Jaz#Jaxax.nbd#J#Jbe#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J.y#J#Jbe#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#Jaz#J#J#J", "#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#Jaz#Jaz#J#J#J#J#J#Jaz#J#J#Jax.x#J#J#J#Jaz#J#JaxaYbE#V#J#J#J#J#J#J#J#Jbe#Jaz#J#Jax#J#Vbc#J#J#J#Jazazaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#Jaxbv#J#v#ibv#J#J#J#J#J#J#Jaz#J#Jax#Jbe#J#Jbe#J#J#J#J#J#J#J#Jbe#Jbe#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J.y#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J.y#J#J#Jbeaz#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbeaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J", "#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jazaz#J#J#J#J#J#JaxbIbv#Jaz#Jbe#J#J#J#Hbw#J#J#J#J#J#J#J#J#J#J#Jbe.2#Jax#J#Hax#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#J.yax#R#J#J#Jaz#Jaz#J#J#JaRaz#J#Jaz#J#r#J#J#Jaz#J#J#J#J#Jaz.2#Jaz#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J.y#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jbe#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J", "#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jbe#J#J.y#J#J#J#J#Jaz#J#Jaz#J#J#J#J.y.yaz#JaJb##J#Jaz#J.ybeaz#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#H#a#J#J.2#Jaz#J#J#J#J#Jaxbbazbvaz#J.r.Zaz#J#J#J#J#Jaz#J#J#J#Jbe.y#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#R#i#R.y#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#Jaz#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J.yazax#L.Cax#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J", "#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#Jaz#Jaxax#Jaz#J#J#J#J#J#J#R#J#Jbe#Jax#J#J#J#J#Jaz.2#J#J#J#J#J#J#J#J#Jaz.y#J#J#J#J.L#Jaz#J#J#J#J#Jax#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jazbe#J#Jazazaz#J#J#Jaz#J#Jax#Jav.2#Jazb#aw.LaR#J#J#J#J#J#J#J#J#Jbv#J#Jazaz#Jaz#J#J#J#J#J#J#J#J#J#J#Jbd#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J.yazax#L.J#V#Jaz#Jaz#J#J#J#Jaz#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J", "#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#Jaz#J#J#Jaz#Jaxax.0#Jaz#J#J#J#J#Jazaz#Raz#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#R#J#J#Jbe.2#Jbe#Jbe#J#J.2az#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jax#J#J#J#J#J#J#J#J#J.ybv#Raz#J#Jbe#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J.2#J.K#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J", "#J#J#Jaz#J#J#J#J#J#J#Jazaz#Jaxaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaybi.y#J#J#J#J#J#Jazaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#Jazaz#J#Jaz#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J", "#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jbe#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jbv#J#J#J#J#J#J#J#J#J#J#Jbe#J#J.y#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#Jazaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J", "#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#Jax#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jax#J#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J", "#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#Jbx#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#H#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#Jbe#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J", "#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#JazaR#Jaz#Jazax#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jazaz#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J", "#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#Jax#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#JaxaR#Lax#Jaz#Jax#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#Jaz#Jaz#J#J#Jaz#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#Jax#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jbe.y#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J", "#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Hbrax#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#Jazaz#J#H#L.JaY#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#Jax#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#Jazaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jbe#J#JbB#9ax#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J", "#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#JaxaR.H#V#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jazaz.2#R#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#Jaz#Jaz#J#Jaz#Jax#HaR#Haxaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Javaz#J#J.y.R.fbc#Jaz#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaxax#J#J", "#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#JaD#Haxaxazaz#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jbe#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#Jaxbv#J#J#J#Jaz#J#Jaxat#i#V#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#Jazaxbc#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#Jaz.2#Jaz#J#J#J#Jaz#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#Jaz#J#Jaxaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#H#Hax#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#Jax#Jazaz#J#J#J.y.n#J#J#J", "#J#J#J#J#Jaz#J#Jaz#J#J#Jaxbebe#Jax#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J.yaz#Jaz#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#Jbv#u#J#Jaz#Jbe#J#J#Jaxayax#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J.8aj#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbe#J#Jbe#J#J#Jaz#J#J#Jbe#J#J#J#J#J#J#J#J#J.y#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#J.y#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#Jazaxaxax#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Hbe#J#J#J#J#J#J#J#J#J#J#J", "#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#Jbeaxazaz#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jbe#Jbe#Jaz#J#J#J#J#Jazbeazbe#J#J#J#J#J#J#Jbe#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz.y#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jbe#J#J#J#Jbv#9#hbvax#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#Jbe#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#JaR#Jazazaz#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#Hat.y#Jazaz.2#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz#Jaz#Jasax#Jbebe#J#J.y#J#J#J#J#J", "#J#J#J#J#J#J#J#J#J#J#J#J#J#J#H#aax#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J.y.yaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jbe#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jbeaz#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J.2#J#J#J.y#J.y#J#Jaz#Jbeaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jbvbcax#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jax#J#J#Jaz#J#J#Jax#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#JaR#W#J#JbH#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jax#V#d#aazaxax#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jax#R#Jaz#J#J#J#J#J#w#J.y#J", "#J#J#J#Jaz#J#Jaz#Jaz#J#J#JaR.7.4#Hax#Jazaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#Jbx#J.y.y#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jbe#J#Jbe#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jazaz#R#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Javax#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J.2#Jaz.2.y#J#J#Jay#J#Jbe#Jaz#J#J#J#Jaz#J#J#J#J#J#Jav#J#J#J#HaZ#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#H.g#J#Jav#Jaz#J#J#J#J#J#J#J#J#Jazaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J.yax#J.yaz#J#Jaz#J#J#J#J#J", "#J#Jaz#J#J#J#J#Jaz#J#J#J#Jax.0.yax#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#Jbe#J#Jav#J#Jayaz#J#J#J#J#J.y#Jav#J.y#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#Jaz#Jbeaz#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#Jbeaz#J#J.yaz#J#Jazax#J#J#J#Jaz#Jaz#J#Jaz#J#Jaz#J#J#J#Jazaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J.y#J#J#Jazaz#JaF.1beaz#J#J#Jazaz#J#J#J#J#J#J#Jazax#Jaz#Jazax#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#Jbe#J.y#J.2#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J.2#J#J#J#J#J#Jbe#J#J", "#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbe#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz.y#Jaz#J#J#6#pazbe.yazaz#J#JaI#obH#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jbeaz#J.2#J#J#J#J#J.y#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J.2#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#JaV#Haxax#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jax#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#Jazaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#Jaz#J#J#Jaz#Jaz#Jbe#Jaz#J", "#J#J#J#J#Jaz#J#J#J#Jazbx#J#J#Jaz#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J.y#Jbv#UaG#aax.y#Jaz#Jbs#n#Dav#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jbea9#Jaz#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J.yaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jas#Jaz#Jazbeaz#J#J#J#J#J#J#J#J.2#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jazaz#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jazaz#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jbe#J#J#J#J#Jbe#J#J", "#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#Jax#J#Jaz#J#J#J#J#J#J#J#Jaz.yaz#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#Jaz#Jaxaxav#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#Jazazazaz#J#J#J#J#J#J#J#J#J#J#J#J#J.2#J#Hax#J#J#J#J#J#Jaz#Jaz#J#J#Jaz#Jbe#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jazaz#J.yax.2be#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#Jbe#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J", "#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#Jbe#Jbe#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaxax#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jax#J#J#J#J#J#J#J#J#J#J#J#J#H#H#J#J#Jav#c.G#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jbw#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#Jaz#J#Jav#Jaz.Q#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J", "#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jbe#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jawavav#J#JaU.ZaI#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#Jaz#J.ybI#R.y#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#Jaz#J#Jaza9#J#Jbe.yaz#J#J#R.b#R#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J", "#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#Jazaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J.2#Jaz#Jaz#J#J#J#J#J#J#Jax#Jazax#H#Haxaz#J#J#J#J#J#J#J#JaJ#Jaz#J.y#Jbv#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J.y#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jbeaz#J#Jbebe#Jbe#J#J#Jazbg#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#Jaz#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J", "#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jazax#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#Jaz#Jaz#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J.2#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J.y#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J.y#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J", "#J#J#Jaz#J#Jaz#J#J#Jazazaz#J#J#J#J#J#J#J#Jaz#J#J#Jaz#Jax#J#J.2#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jay#J#J#J.2#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaxax#Jaz#Jaz#J#J#J#J#J#J#J#J#Jbeaz#J#J#J#J#J#Jaz#J#J#J#Jaz#Jaz#J.y#J#J.2#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jbeaz#J#Jbebe#Jaz#J#Jbe#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#Jaz#Jbe#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J", "#J#J#J#J#J#J#J#Jaz#J#J#Jaxax#Jaz#J#J#J#J#J#J#J#J#J.2#Jax#V#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J.S#9ax#J#Jbe#J#J#J#J#J#J#Jaz#J#J#Jazaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J.2az#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J.y#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jbe#Jaz#Jaz#Jaz#J.yaz#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jay#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J", "#J#J#J#Jaz#J#J#J#J#Jax#H#H#Hax#J#J#J#J#J#J#J#J#J#J#J#J#V.4#Jaz#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#JbvbzaG#V#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jazaz#J#J#J#J#J#J#Jaz#J#Jbeaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J.yaxaybi.y#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J.yaz#J#Jbe#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#Jaz#Jaz#J#J#J#Jbe#J#Jbebeax#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#Jbrby.y#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J", "#J#J#J#J#J#J#J#Jaz#Jaxat.l#V#Jaz#J#J#Jaz#J#J#J#Jazaz#J.2#J#Jbeaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#H#J#Jazaz#J#J#Jaz#J#J#J#J#J.2ax.2#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jav#Jbe#Jbv.5#bat#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#Jbe#Jaz#J#J#J#Jaz#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J.ybDbjaRaxbx#Jaz#Jaz.y#J#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#J", "#J#J#J#Jaz#J#J#J#J#J#J#H#Rax#J#J#J#J#J#J#J#J#J#J.y#J#Jbe#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#Ray#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jbeaz#J#Jazaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz.ybvaxaxaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J", "#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#Jaz#Jbk#Lae.2#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jax#Jaz#J#J#J#Jaz#J#Jaz#J#Jbx#Jazbeax#Jaz#Jbe#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jazbeazazav#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J.y#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#JazaU#J#J#J#J#J#J#J#H.2ax#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J", "azaz#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#H.jabaRbe#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#Jazaz#J#J#Haz#J#J#Jaz#J#J#J#J#J#J#J#Jaxaz#J#J#J.y#J#J#J.y#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jbe#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#Jaz#Jbeaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#Jav#J.2#J#Jbe#J#JbbbuaI#J.y#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J", "#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#o#S#V#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jax#J#J#J#J#J#J#J#Jaz#J#J.yazav#J#J#J#J#J#Jav#Javav#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J.2#J#J.y#J#Jax#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#L.Caxaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jax#J#J#Jaz#Jbeazav.n#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J", "#J#J#J#J#Jaz#J#Jbe#J#J#Jax#Jaz#J#J#J#J#J#J#J#J#Jaz#J.M.r.yaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#JaxaE#Javaxaz#J#Jbeaz#J#aaR#Jazbe#J#Jaz#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jbe.0.C.b#V#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#Jazav#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J", "#J#J#Jaz#J#J#J#Jazax#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#JaU.yav#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jazaz#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#H#UaRav#J#Jaz#J#J#J#Vabab#Vaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jazaz#Jazazaz#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#Jazaz#Jaz#R#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jazaz#Jaz#J#J#Jaxaz.2#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J", "axax#Jaz#Jaz#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jbe#J#R#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaxaz#J#Jaz#J#J#J#J#J#Jaz#J#J#LaGaR#Jax#Jbeaz#Jav#J#LaR#Jaz.2#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#Jbe#J#J#J.y#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jbv#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jbe.y#J#Jbe#J#J#Jax#J#Jbe#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J", "#1#Lax#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#JbBab#J#Jbeaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz.2avaz#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#Jaz#Jbebe#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#Jazaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jazbe#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#Jbe#J#J#J#J#J#J#J", "ax#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J.y#p.abgax.ybv#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jbvbe#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbv#J#J#Jbe#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jbe#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J.L#J#J#J#J#J#Jaz#J#J", "#J#J#Jazaz#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jazaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J.y#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jbt.Y#R#J#R#R#Jaz#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#Jav#R#Jazbe#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#R.2#J#J#Jav#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J.yaz#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jazbe#Jazaz#J#Jbe#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J.2.y#JaJaw.L#J#J#Jaz#J#J#J#J", "az#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#Jazaz#J#J#J#J#Jaz#J#Jbe.y#Jaz#Jazaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jav#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#JaxaV.wah#Jbe#Jbe#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jazaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jbe#Jaz.2#Jazaz#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J.2ax#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J.2ax#J#J.XaJ#Jaz#J#J#J#J#J#J#J", "#J#J#J#J#J#Jax#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#JaJax#J.y#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Javav#J#J#Jaz#J#Jaz#J#J#J#Jaz#Jaz#J#Jaxabab.##J#JaUbe#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#Jax#Hatax.2#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#Jazax#J#J#J#Hbgax#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#Jazax#J.ybe#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#Jayax#J#Jbe#J#J#J#Jaz#J#J", "#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#JazazaU#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#Jbe.2#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jax.Vajaxbe#J#Jbe#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jazazaxat.baY#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#Jax#Raxat#QaY#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#JavaC.paz#R#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jbe#J#J#J#J.ybe#J#Jaz#J#J#J#J#J", "#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#H.waxax#J#Jaz#Jaz#J#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz.y#Jaz.y#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#R#J#J#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jbe#J#raz.y#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbeaz#Jaz#J#R#J#Jaz#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jazax.ja2.y#Jav#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jax.2#J#J#J#J#J#J#J#J#J", "aRax.2az#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#Jax#HaBbr#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jav#J.y#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jav.2#R#J#J#Jbe#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#Jav#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jbeaz#J#Jax#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#Jazaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J.V#Jaxaz#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jbe#Jbe#J#J#J#J#J#J#Jaz#J#J", "#k#Laxazaz#Jazaz#J#J#J#J#J#J#J#Jaz#J#Jaz#Jaz#J#J#J#J#J#J#J#Jaxax.y#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#JazaR#J#R#J#J#J#Jazaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#Jbe#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#Jaz#J.y#J#Jaz#Jbe#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jazaz.yaz#J#Jbeazbeazazbeazazaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J", "ax#J#J#J#Jax#Jaz#J#J#J#J#J#J#J#J.yaz#Jbe#J#J#Jaz#J#J#J#J#J#Jaxax#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#JaIak#J#JbK#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jazaz#J#J#Jaz#J#Jazaz#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#JaxaR#s#Jav#J#J.y#Jbe#Jax#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J", "azazaz#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#Jaz#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jazav#J#f#J#Jazal#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jbe#Jav#J#J#Jaz#Jaz#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#Jazatap.w#J#Jazbv#J#J#Jax#A#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#J", "ax#J#J#Jazaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#Jaz#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J.0#VbCax#J#Jaz#J#J#J#Jaz#Jaz#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J.2#J.2#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz.y#Jaxbe#Jaz.2#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaxbv#J.yazbe#J#J#J#J#V#ibv#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J", "#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#Jax#V#Jaxav#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#J.y#J#J#J#J#LaRaxax#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaxax#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J.yax#J.yaz#J#Jbe#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jazax#J#H.y#J#Rac.k#V#J#J#J#J#J.2#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#Jazavaz#R#J#Jaz#Jaz#J#J#J#J.0azbe#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J", "azaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#Jbgafbg.yax.2#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbe#Jazaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#H#v#H#J#J#J#Jaz#J#Jaz#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#JaVas#J#R#J#ma8bv#J#J#J.y#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#Hax#J#Jbe#r#J#Jazbe#J.2#J.y#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J", "#J#J#Jaz#Jaz#Jaz#J#Jaz#J#J#J#J#Jazbe#a#M#abeaxbe#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#JazaJ#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#JaR#dbA#J#Jax#Jaz#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jazax#Jax#J#J#J#J#V#J#Jav#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#JaxaRat#Jaz#JaxazaJ#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J", "#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J.yazaU#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J.y#Jaz#J#Jaz#J#J#Jaz#J#Jaxax#Jaz#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#a#J#Jazazaxaz#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#Jaxax#aao#R#J#J#J#R#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J", "#J#J#J#J#J#J#J#J#J.y#J#J#Jaz#Jaz#J#J#J#J#J#J#J#R#Jaz#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#Jaz.y#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#Jaz#J#Jazav#J#H#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J", "#J#J#J#J#J#J#J#J#J.n#J#J.y#J#Jaz#J#J#Jbe#Jaz#J#J#Jazaz#J#J#R#J.y#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#H.wax#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J.yax#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jazaz#J#J#J#J#Jaz#J#J#J#J#J#J#J", "#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jazbe#J#Jax#Jbe#J#J#Jbe#J#J#J#J#Jaz#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#JaxbgaHb.#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#Jaz#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#Jbe#J#Jav#J.Vaf#V#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#JazaPbM#J#J#Jaz#J#J#Jaz#Jaz#J#J#J#J#Jaz#J#J#J#J", "#J#Jaz#J#Jaz#J#Jaz#J#J#Jbe#Jaz#J#J#J.yaz#J#Raz.y.2#J#J#J#L#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#Jaz#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#H.0axaz#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jazav#J#Jbr.qaBbk#Jaxazaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jav#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J", "#J#J#J#J#J#J#J#Jaz#Jaz#Jaz.y#J#J#J#J#J#J#Jaz#R.q#H.ybe#H.3#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J.2#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jbv#R#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#Jazaz#J#J#J#J#J#J#J", "#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#Jaz#J.2#J#Jav#J#Vbhai.y#Jaxaxaz#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#Jazaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jbx#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#Jaz#J#J.2#Jbeax#Jaz#J#J#Jbe#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#Jbe.y#Jaz#J#J#J#Jaz#Jazaz#J#J#J#J#Jaz#J#J#J#J", "#J#J#J#J#J#Jaz#J#J#J.y#Jbe#Jbe#Jaz#Jbeaz#J#Jax#V#Hax#Jaz#Jbe#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jax#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaxbr#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz.y#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jbeaz#Jbe#J#J#J#J#J#Jaz#Jaxax#HaR#J#J#J#J#Jaz#J", "#J#J#Jaz#J#J#J#J#J#J#Jbe#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jbe#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#Jaz#J#J#Jaxax#J#Jaz#J#J#J#J#J#J#J#Jax#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J.2#J#J#Jax#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jbr#K#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#Jbe#J#J#Jaxbe#Jaz#J#J#J#J.2#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J", "#J#Jav#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbe#J#Jaz#JaU.K#Jav#Jaz#J#J#J#J#J#Jaz#Jaxaxax#J#J#J#Jazazaz#J#Jax#Saxbx#J#JaJ.Zaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbebe.y#Jaz#J#J#Jaz#J#J#Jaz#Jazazaz#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jazaz#J#J.y#J#J#Jaz#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J", "#J#Jaz#J#Jaz#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#JaUav#R#J#J.Rbv#J#J#J#J#J#J#J#Jaz#J#J#Jax#J#J#J#J#J#J#J#J#Jaxax#J#J#Jbe#JaPbl#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#Jaz#J#Javavaz#J.yazbk#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J.x#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J", "az#J#r#Jbeaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#R#Jax.Rbc#Jbe#Jaz#J#Jaz#Jbxaz#J#J#J#J#Jaz#J#J#Jaz#J#J#J#JaxazaRaRax#JaV#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#r#Jbe#J#J#Jax#H#J#J#J#J#Jaz#Jaz#Jaz#Jbeazaz.y#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#J#J.y#i#R#J#J#Jaz#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J", "ax.y#J.y#Jaxaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaxayaxbeaz#J#Jbeaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J.y#J.haJaz#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#J#a.kaR.2.yaUbv#q#J#J#J#J#J#Jaz#J#J#Jaz#J.y#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J.y#J#J#J#J#J#Jaz#J#J#J#J#Jaz#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J", "#Jaz#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J.2#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jazaz#J#J#J#Jaz#Jaz#J#J#Jaz#Jaz#J#Jazazax#J#Jbe#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J.RaLbg#J#Jav#a#J#J#Jaz#Jaz#J#J#J#Jaz.y#Jaz#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jbe#J#J.y#J#J.yaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J", "aU.BaZ#J#Jaz#Jbe#J#Jaz#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J.yaz#J#Jay#J#J#Jbe#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbe#J#Jbv#JaJ#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#Jaxaz#J#J#J#4azaz#Jaz#J#J#Jaxaxa9be#Jbe#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jbe#J#J#J#J#Jaz#Jaz#J#J#J#JbH#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J", "aI.v#H#J#Jaxaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#Jazbe#J#J.S#9ax#J#Jbe#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jazbebe#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jav#Jaz#Jaz#J.y#J#J#Jaz#J#J#Jax#Jaz#Jaz#Jbe#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jbe#J#Jaz#J.y#J.ybe#Jaz.y#J#w.nax#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J", "#J#J#J#J.y#Jbe#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#Jbe#J#Jbe#J#J#J.ybzaG#V#J#J#J#Jaz#J#Jaz#Jaz#J#J#J#Jaz#Jaz#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jazbe#Jaz#J.y#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#Jbe#Jaz#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jax#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J", "#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#H#Hax#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz.2#Jaz#Jazaz#J#J#Jaz#Jaz#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jazaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jazaz#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J.y#Jbe#Jaz#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz.y#J#J#J#Jaw#J#J#J#J#J#J#J", "#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaxax#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jax#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jas.y#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#Jbe#J#J#J#Jbe#Jbe#Jaz#Jaz#J#Jaz#Jbe#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#Jazbebs#J#J#J#J#J#J#J#J#J", "#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#Jax#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#Jaz#J#Jaz#J#J#J#J#J#Jbe#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#Jazaz#J#Jax#Jaz#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#Jbe#Jbe#J#J#J#Jbe#Jaz#Jaz#Jaz#Jbebe#J#J#J#J.2az#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#Jbeaz#J#Jaz#J#Jaz#J", "#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#Jbvaxax#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbe#J.yaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jax#J#Jaz#J#J#Jazbeaz#J#J.yazaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J.y#Jaz#J#J#Jaz#J#Jbe#Jbe#J#J#Jaz#J#J#J#J#J#J.2#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jazbebe#Jbe#J#J#J#J#J#J#J#J", "#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jazbx#J#HaR#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jazax#J#J.2be#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jbe#J#J#J#Jax#J#J#J#J#Jaz#J#J#J#H#Rax.2#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J", "#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#Jazazaz#J#J#J#J#Javazaz#Jaz#J#J#J#J#J#J#J#J#J#J#Jax#Jaxbg.J.V#Jax#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#m.F#J#J#Jbe#J#J#J#Hax#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J.y#J#J#J#Jaz#Jaxaz.0#J#J#Jbe#J#J#J#H#Oax#Jax#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J.2#Jaz#J#Jbe#Jaz#J#Jaz#J#J", "#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#H.Vaxax#Jay#Jaz#J#J#J#J#J#Jaz#J#J#J#J#Jazaz#Jax.x#Jaz.y#Jaz#J#Jaz#J#J#Jaz#Jaz#J#Jbe#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jazax#J#J#JaRax#J#Jaz#J#H.o#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#Jas#J#J#Jbcasax.y#J#J#J#J#Jazax#Jaz#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#Jbeaz#Jaz#Jaz#Jaz#J#J#J#J#J#J#J", "#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaxaz#J#J#L.l#s#JaEbybv#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaxbvazaz#Javaz#Jbe#Jbe#Jbeazbeaz#Jbeaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#JaRaRaR#J#J#J#Jaybybe#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#Jaz#J#J#J.2#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J", "#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbe#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jax#J#JaxaxaxbqaqaYaxaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbe#J#J.y#Jax#J.y#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jbe#J#J#Jbc#K#Vax#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jazaz#Jaz#Jaz#J#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz#J#J#Jaz#J#J", "#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#Jbe#Jaz#J.y#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J.0#J#J#R#Vax#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#Jbe#J#J#Jaz#Jayazbe#J#J#J#J#J.y#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#Jaxay#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J.y#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J.y#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J", "ax#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#HaA#J#Jaz#J#J#J#J#Jazaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#Jaz#Jaz#J#Jbe#J#Jazaz#J#J#Jaz#Jax#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#Jay.zay.2#Jazaz#J#I#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jazazaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J.2#Jav#Jaz#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Hat.y#Jazaz.2#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#Jbeax.y#Jaz#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J", "#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jax#Jax#Jaz#Jaz#J#J#J#Jazaz#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#Jaz#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#L#F.0#Jaxbvav#Hau.0#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#Jax#V#d#aazaxax#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jazaxaz#H#Jbe.2#J#Jaz#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J", "#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#H#J#J#J#J#J#J#J#Jazaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jazaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jazbv#J#J#J#Jaz#J#J#Jbe#J#Jazaz#J#J#Jaz#Jaz#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#H.g#J#Jav#Jaz#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#Jaz#J#Jaz#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#Jaz#Jbe#J#Has#J#J#Jbe#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J", "#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#Hbu#Jaz#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J.y#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jazaz#J#J#J#J#J#J#J#J#J#J#J#Jax#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J.2#Jbe#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J.2#Jbv#J.2#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jax#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#Jaz#J#J#J", "#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbe#J#J#J.y#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz.y#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#H#Vax#J#J#J.y#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J.2#Jaz#Jaz#Jaz#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#Jaz#Jazaz#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jbe#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#Jazaz#J#J#J#J", "#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#Jbe#J#J#Jaz#J#Jaz#Jaz#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#Jaz#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#J#Jazbe#J#J#J#J#J#J#J#J#J#J#J#J#J.0#J#J#J#Jaz#J#J#J#a#E#V#J#Jaz#Jaz#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#Jax#Jaxaz#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jax#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jazbe#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jax#J", "#Jazax#Jbx#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J.2#Jaz#Jbeaz#Jbx#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#Jazaz#J#J#J#J#J#J#J#J.c#J#J#J#J#J#J#J#Jaxax#J#J#J#J#J#J#J#J#Jaz#Jaz#Jaz#J#J#HaRaR#J#Jazbe#J#J#J#J#J#J#J#J#J#J#J#Jax#J#Jaz#Jaz#J#J#J#J#Jaz#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jav#JbnboaR#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J.2#Jaz.ybaaf.y", "#J#Hah#Jbeazazaz#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#Rax#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J.y#J#J#Jaz#J#Jaz#Jaxbv#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#JaYaHaYaz#J#J#J#J#J#J#J#J#J#J#Jaxaz#J#J#Jbc.y#J#J#Jaz#J#J#J#J#Jaz#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#Jav#J.y.Har.w#J#J#R#J#J.yazaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jax#J.V.lbc", "#JaR#X#H#Jav#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J.2#Jbe#JaEbzax#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#Jaz#J#Jbe#J#J#Jbe#J#J#J#Jaz.ybe#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#Jaz#Jaz#Jaz.y#J#Hbwax#J#J#J#J#J#J#Jaz#J#Jaz#Jazax#J#J#Tajbc#J#J#J#J#J#J#J#J#J#J#J#Jaz.F#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#Jbeaz#Jax.yaxaz#J.2#Raz#J#J.y#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jazaz#J#Jay.y", "#J#J#R.yaz#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J.y#JaxbaaL.w#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J.y#Jbe#Jaxa6#Jaz#J#J#J#Jaz#J#Jbe#Jaz#J#Jaz#Jaz#J#J#Jaz#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#Jaxaz#J#Jaxaz#J#J#J#J#J#J#J#Jav#J.y#Jax.Ha8#V#J#J#J#J#J#Jaz#J#J#J#Jbebvbv#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz.y#J#J.y#J.y.2#J#Jbebe#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jbe#Jaz#J#J#J#J", "az#Jav#JaybvaI#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#Jaz#Jazax#V#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz.ybcbm.y#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#Jaz#Jaz#J#J#Jazbe#J#J#J#J#Jaz#J#J#J#J#Jaz#Jaz#J#J#Ray#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#Jbe#J#J#Jav#J.2avbkax#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jax#JaJax#J", ".yavaz#R#J#J#xaRaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbe#J#Jbeazax#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaxax#J#J#J#J#Jaz#Jbeaz#Jaz#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jbe#J#J#Jazaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jbe#J#J#J#J#J#J#J#J#J#Jbeaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J.y#Jav#J#J#J#Va4.0az#J#J#J.2#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jbeaz#J#Jbe", "#R#J#Jbe#J#Jb##J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz.yay.2#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#Jaxax#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J.2#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J.k.L#H.yavaz#J.y#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J", "#J#J#J#J#Jaz#Jbe#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J.yaz#J.y#J#J#Rav#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#JazaxaR#Haxazaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#Jaz#Jaz#Jaz#J#J#J#J#J#J#J#Jaz#J#Jax#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jazazax#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz.yaz#J#JaRaL#Hav#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jazbeaz#J", "#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#H#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J.2#Jav#J#Jazav#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jazbe#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jbe.w.4#a#J#Jazaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#H.kaobv#Jbe.y#J#J#J#J#J#Jbe#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#Jazaz#J#J#J#Jaz", "#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jbz.EaY#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#Jazaz#Jbe#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#JaxbeaY#Jaxaz#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#JazaxaRbgaxazaz#J#Jaz#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaxbr#R#J#J#J#J#Jbe#J#Jbe#J#Jbe#J#J#J#J#J#J#J#J#J#Jazaz#J#J#Jbeaz#J#J#Jaz#J#J#J#Jaz#J#J#Jazaz#J#Jaz#J#Jaz#J#J#J", "#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#JaE.zbg.y#J#J#J#J#J#J#Jaz#J#Jaz#Jaz#JaJ#J#J#J.y#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jazazazbe#Jbe#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#Hbg.J.e#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#Jav#J#J#Jaz#J#J#J#J#J#Jaz#Jbe#Jaz#J#J#J#J#J#J#J#Jaz#Jax#Jaz#H#H#J#J#J#J#J#J#J#J#J#Jaz#m#J#J#J#J#J#J#J#J#J#J#J#J", "#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#Jbv#J#Jaz#J#Jaz#Jaz#J#J#J#J#J#J#J#J#R#Jbe#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J.yazaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jazbe#J#R#J#Jbeaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#Jaz#Jaz#J#J#J#Jbe#J#J#J.y#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#H#Hax#Jaz#J#J#J#Jaz#JaxaV.W#Jaz#Jbv#H#xax#J#J#J#J#J", "#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#r#Jaz.yaz#J#J#J#J#J#J#J#J#J#J#J#JaY#t#a#J#J.y#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#Jazav#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jazaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaxaxax#J#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jbe#J#J#J#Jbe#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#JaO#xax#J#JaU#Jax", "#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaxbe#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#M#j#Jav#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jbe#Jaz#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#Jbe#J#J#Jbe#Jaz#JbHa9#J#J#J.yaz#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jbeaz#J#J#J#J#J#J#J#J#J#J#J.2az#J#J#J#Jax#J#J#J#J#J", "#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jbe#J#Jaz#J#J#J#J#J#J#R#H#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaxbcbrax#Jazazaz.2#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#Jaxax#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J.2#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#JaA#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaxax#J#J#Jaz#J#J#J#Jazaxazaxbe#J#Jbeaxaz#J#Jaz#J#J#J", "#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J.y#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaxaxafao#R#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#Jaz#J#Jaz#Jaxaz#J#J#H#Haxaz#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jbeaz#Jbeaz#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jbe#J#J.2az#J#J#Jav#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#Jaxaz#Jaz#J#Jaz#J#J#J#J#J", "#J#Jazaz.y#Jaz#Jaz#J#J#Jazaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#JaR#Haxax#Jaz#J#Jaz#Jaz#J.2#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jax#Jazax#a.baY#J#Jbeaz#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#Jaz#Jbe#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#Jaz#Jaz#J#J#J.y.n#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J", "#J#J#J#J#J#Jbeaz#Jaz#J#J.y#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#Jaxax#J#J#J#J#J#J#Jaz#J#Jaz#J.yaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J.2azaz#J#Jbw#J#J#J#Jbe#J#Jbe#J.y#J.2#Jaz#Jazbe#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#Javaxaz#Hax#J#J#J#J#Jaz#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J", ".2#Jaz#J#J#J#J#J#J#J#J#Jaz#Jaz.y#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#Jaz#J#Jbe#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#JaJ#Jaz#Javaz#J.yaUazbe#J.2.2#Jazbe#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz.y.2#Jaz#Jax#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J.Vbobz#J.y#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J.y#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J", "#J#J#J#J#Jaz#J.y#J#Jaz#J#J#J.yaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#Jaz#Jaz#Jaz#J#Jaz#Jazaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jax#J#Jbebe#J#J#J#J#Jav#Jbe#J#J#J.y#J.2#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J.y#J#J#J#J.2#J#J#J#J#J#J#J#J#J#Jbe.ybebe#J#JaR#H#J#J#J#w#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#H#J#r#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J", "#J#J#J#J#J#Jax#J#J#Jazbe#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz.y#J.2#J#J#R#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jazaz#Jaz#R#J#J#J#Javax#J.yaxaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#JaJ#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#H#O.y#Jbe#Jbe#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J", "az#J.2#J#J#J#H.wax#J#J#J#J#J.yaz#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#Jbeaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jbeazbeazaz#Jbe.y#Jbc.fbeav#J#J#r#J#H#Jaz#J#Jaz#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J.O#Cbe#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J.2#R.y#J#J#J#J#J#Jbe#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jax#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J", "#J#Jbe#J#JazaY#yax#Jasaz.y#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jbeaz#J#Jbeaz.y#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#LaQ#Hbe#Jav#J#H#nbvaxbe#J.y#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J.RaXay.ybe#Jbe#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#Jaz#Jbe#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J.y#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#J#Jaz#J", "#J#J.2#Jaz#J#Latax#J#Jaz#J#J#Jaz#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#Jbe#J#Ja9#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jbeazaz#J#J#J#J#J#JaU#Jax#Jaz#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#JaxaIaxax#J#J#Jaz#Jaz#J#J#J#J#J#J#Raz#J#J#J#J#Jaz#J#J#J#Jbe#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J.2#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J", "#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbe#J#Jbe#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#Jaz#J#J#J#J#Jaxaz#Jazaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J.yax#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J", "#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J.y#Jaz#J#J#J#J#H.0#H#J#J#Jax#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#Razaz#Jazbe#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J", "#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jay#J#J#J#J#Jaz#Jbv#aaB#A#J#J#Jax#J#J#J#J#J#Jaz#J#J#J#J#J#J.wax#J#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jax#Jbe#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#Jaz#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J", "#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#Jazaz#J#J#Jaz#J#J#Jaz#J#J#J#JbIbvaz#J#Jaz#Jbe#J#H#Rax#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Ta3.0az#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#R#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J", "#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J.y.y#J#J#Jaz#J#Jazbeaxaz#J#Jaz#Jaz#J#Jaz#J#J#J#J#J#J#J#Jbeaoanbraz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#JaG#Jav#R#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#Jaz#J#Jaz.y.y#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J", "#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J.W.i#J.y#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz.yax#J.2#J#J#J#J#Jaz#J#J#J#J#J.y#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jbe#J#Jbcaxbe#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#Jax#b#H#Jbe#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J.yaz#J.y#J#Jbda9#Jaz#J#Jaz#J#Jaz#J#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J", "#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#Jaz#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#Jazax#Jazaxax#Vbe#J#J#J#J#J#J#Jaz#R#J#J#J#J#Jaz.y#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#Jax#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz.K#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#Jbe#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J", "#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jax#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbe#J.wac#J#J#J#J#J#Jaz#J#Jaz#Jaz#J#J#J#J#J#J#Jax#Jazaz#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#J#Jav#J#Jav#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J", "#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#Jax#Lbv#Jazaz#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#Jbv#Hbg#Haxax#Razaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jbe#J#J.y#Jaz#J#Jbe#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jazaz#J#J#J#J#J#JaUaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J", "#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jbe#Jaz#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#JaxaY#3#Hax#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#V.Abc#Ja1#Uaxaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jazaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J.yaz#Jaz#Jaz#Jazaz#Javazaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J.yaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J", "#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J.y#Jaz.2az#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jay.y#J#J#J#J#J#J#Jazax#J.2#J#J.y#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jat.y#H.z.N#L#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#Jaz.y#J#J.y#J#J#J#Jaz.y#J.y#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#R#J#Jaz.2#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J", "#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Rax#J#Jbe#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J.2az#J#Jazavaz#J#Jaz#r#Jazaz#Jazbe#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jbvbxaz.2bw#J#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz.2#Jbe#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jbe#Jaz#Jaz#Jaxbs#J.y#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jav#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J", "#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J.2az#Jax#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Javbe#J#J#J#R#Jazaz.y#J#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#Jazav#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jbe#JaR.Cbv#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jbe#J#J.2avaxaE#p#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#Jbe#Jax.2az.2az#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J", "#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#JaR#H#Jaxazax#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J.2az#Jbw#J#Jaxaz#J.yazbv#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jazax#J#Jaz#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jax.gaM#V#Jaz#Jaz#J#Jaz#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jbe#J.y.nax#J#Rbz#0bg#Jbx#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jbeaz#J#J#J#Jaxayab.K#Jaz#Jbe#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J", "#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#YaR#Jbeaz#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz.2azazaxbebe#V.H.yav#J#Jbe#JbF#J#Jaxaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J.yaz.2#J#J#J.y#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#Jazazaz#J.K#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jazbe#J#J#Jaz#J#Jbe#J#J.2#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jbe#J#J#Jaz#Jbvac.NaYaxav#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J", "#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#Jaxaz#J#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jax#J#J#Jbeax#Lapbcav.y#JaxaJ.Wax#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Javazav#Jbv#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#J#Javaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#Jbe#Jbv#J#Jav#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J", "#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#Jax#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#Jazazazazaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J.2az#Jazaz#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#Jaz#Jaz#Jbe#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jax.vbH#J#J#J#Jaz#Jbeaz#Jbe#Jazbeav#Jazaz#J#J#Jbeazazaz#J#Jbe#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J", "#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jbeaz#J#J.yazaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaxaxax#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jax#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#Jaxax#J#J.y#Jaz#J#J#J#Jaz#J#J#J.2#J#J#J#J#Jaz#Jaxazbv#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J", "#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jazaz#J#J#J#J#J#J#J#J#J#Jaz#Jaz#Jaz#Jaz#J#Jazazbe#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbe#J#Jaz#J#J#J#H#H#Hax#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#H#H#H#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#Jax#J#Jaz#J#Jas#J#Jbe#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J.yav#J#J#Jazbe#J#Jaz#JaxazaR#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J", "#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jbe#J#J#J#Jax#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaxbd#J#J#Jaz#J#JaxbvaYbEb.#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#J#J.x#J#Jbeaz#Jaz#J#JaYaBb.be#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#V#J#Jbe#J#J#Jbe.yaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J.yaxaz.w#Jax.2#J#Jbe#Jbe#J.wasax#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J", "#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#V#V#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaxbp#J#Jbeazbeaz#J#J#H.Kaxaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbvbpbv#J#J#Jbeaz#Jax#H#Raxaz#J#J#J#J#J#J#J#J#J#J#J.2#J#J#J.8ajax#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jazaz#J#J#J#Jaz#Jaz#Jaz#T#UaR#J#Jaz#Jaz#J#J.y#Jaxaz#Jaz#Jaz#Jaz#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J", "#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jax#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#Jazbeax.w#ybybw#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J.y#J#J#J#J#Jaz#J.ybv.2#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jax.2#Jbe#J#J#Jaz#J#J#Jaz#J#J#J#Jax#J.yao.U#V#J#J#J#Jbebe#Jaz#Jaz#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jazaz#J#J.y#J#J#w#U.E#max.yaz#Jax.2#J#J#Jbeaz#J#Jbe#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#J", "#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaxbc#Hax#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaxbv#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jbe#J#Jbe#J.y#J#J#J#J#Jazazbe#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#Jbe#J#Jbe.y#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jbcax#J#Jbe#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#Ray#J#J.y#J#Jaz#Jaz#Jbe#Jaz#J#J#J#Jay#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J", "#J#J#J#Jax#J#J#Jaz#Jaz#J#Jax#a.mbcaxaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jazazazbe#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jazaz#R#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#Raz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#JbxaJ#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J.y#J#Jaz#J.yaz#J#J#J#J#J#J#J#J#J#J#J#J#J.1by.y#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J", "#J#J#J#J.y#iay#Jaz#Jaz#J#Jbeax.0#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jazbe#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#Jaz#J#Jaz#Jaz#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J.y#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J.ybDbjaRaxbx#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#Jbeaz#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J", "#J#J#J#J#J.y#J#J#Jaxaz#J#J#Jax#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J.y#Jaz#J.2#Jaz.2#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J.y#J#J#J#J#J#J#J#J#Jaz#Jaz#Jaz#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz.ybvaxaxaz#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#V#H#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J", "#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J.y#J#J.2#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J.y#Jaz#J#J#J#Jazazaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#JazaU#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#JaYbh#Cbv.X#Jax#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J", "#J#J#J#J.ybebe#J#J#J#J#J#J#Jazaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J.2#J#J#J#Jaz#J#J#J#J#Jaz#Jaz#J#J#J#J#JaR#aaxbvaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#Jaz#J#J#J#Jax#J#Jazaz#J#J#J#J#J#J#J#J#J#J#Jazaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jav#Jbeaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbe.HaE.yaz#Jaz#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#J", "#J#J#Jaz#J#Jbe#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#L#.#V#J.y#Raz#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#Jaz#Jax#H#Haxax#J#J.y#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jbe#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jax#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#Jbe.y#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J", "#J#J#J#J#Jaz#J.2#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J.yazax#L.Caxaz#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#R#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#Jbd#J#J#J#J#Jaz#J#H#H#N#vax#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jax.1#Jbebe#Jaz#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jbs#Jbv#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J", "#Jaz#Jbe#J.y#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J.yazax#L.J#V#J#J#J#Jaz#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J.y#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J.y.u.y#J#J#Jazaz#Jax#Hay#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Ja1#l.yaz.y#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#Jazazaz#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jbv#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J", "#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J.2#Jbwaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jbv#Jaz#J#J#Jazbe#Jax#J.2#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#U.f.0axbv#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J.y.y#J#J.y#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J.2az#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J", "#J#J#J#J#J#J#J#J#J#Jaz#Jaxax#J.2#J#J#J#J#J#J#J#J#J#J#J#J#J#J#6a5#J#J#J#J#Jaz#J#J#Jazbeazaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbe#Jaz#J#Jbx.2#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaxaxaxax#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#Jaz#J#J#J#J#H#a#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J", "#J#J#J#J#J#J#J#J#L#s#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#R#J#J#Jaz#J#J#J#J#J#Jazax#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J.2#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#Jax#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jal.m#Haz#J.yaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J", "#J#Jaz#J#J#J#J#J.C#Qbr#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jax#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbe#Jaz#J#J#J#Jaz#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#H#A#Jax#J#J#J#J#J#J#Jaz#J#Jaz#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J", "#J#J#J#J#J#J#J#J#Jay#Jbebeaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#R#Jbe#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jazazaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#JbK#Jaz#Jaz#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J", "#J#J#Jaz#J#J#J#Jaz#Jav#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#Jaxbe#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#Jazaz#Jaz#J#J#J#J#Jaz#J#Jbe#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J.2#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jazaz#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jaz#J#J#J", "#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#Jbe#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#Jbe#HaY#H#Jax.1az#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#Jaz#J#J#J#Jaz#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbe#J#J#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J.2#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J", "#J#J#J#J#J#J#J#J#J#J.K#pbhbr#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#L.l#aax.V#pbv#J#J#J#Jaz#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#Jaxax#Jbe#J.2#Jaz#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jax.V#H#J#Jay#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#Jaxax#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J", "#J#Jaz#J#J#J#J#J#J#J#J.y.0axaJ.2#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#JaxaY.2aJa8#0#L#J#J#J#J#J#Jbeaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jax.w#Hax#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J.waKatax#V#K.y#J#J#J#J#J#J#Jaz#J#J#J#Jaz#Jaz#J#Jaz#Jaz#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jbeaz#J#Jaz#J#J#J#J#J#Jaz#J#Jbeazazaz#J#Jaxax#H#Hax#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#Jaz#J#Jaz#J#Jaz#J#J#J#J", "#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#Jaz.y#J#J#J.y#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#Jazaz#J#J#J#J#Jaz#J#J#J#Jazax#L.RaVav.V.kbeaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#L#Jaxaf#e#a#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaxbv#J#J#J#Jbx#Jax.y#LaB.1#J#J#J#J#J#J#Jaz#J#J#J#J#Jazbe#J#J.w#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jazaz#J#J", "#J#J#Jaz#J#Jaz#J#J#J#Jbe#Jaxaz#J#Jaz#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jbeaz#J#J.y#J#J#Jaz#J.0#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaxbg#Jax.D#8aN#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#Jaz#J#J#Jazax#Jazbv#J#Jbe.yaxaz#J#Jaz#J#J#J#J#J#J#J#JaRbzbe#J#J#J.2#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#Jbeaz#J#J#J#J#H#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J.c#J#J#J#Jaz#Jax#J#Hay#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J.Paj.y#J.2#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jbeazazaxbvazaz", "#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J.Wbvaxaz#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#Jbx#Raz#Jbebv#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#Jazbeaz#J#J#J#J#J#Jax#J#J#Jaz#J#J#J#J#J#L.I#aax#R#Jaz#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#Jazax#Jbe#J#H.n#J#J#Jaz#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#J#J#J.y#J#J#Jaz#J#J#Jax#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#Jazbe#Ua7.V#Jax#J#Jaz#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jazbe#Jbe", "#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jbebe#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jaz#Jax#J#Jax#J#J#Jbe#J#J#J#J#J#Jaz#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#Jaz#J#Jbv.yazbe#J#J.y#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jax#Jbe#J.y#J#J.2#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#Jbebeaz#J#J#J#J#J.2#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#Jbcax#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J", "#J#J#J#J#J#J#Jaz#Jaz#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jazbe#J#Jbe#Jaz#J.y#J#J#Jaz#J#J#J#J#J#J#Jaz#Jaz#J#J#Jazaz#J#J#J#Jaz#Jax#Jazaxbe#Jazbe#J#Jaz#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#Jazbe#J.y#Jaz#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#Jaz#J#J#Jaz#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#J#J#J#Jazbe#J#J#J#J#J#J#Jaz#J#Jazaz#J#J#J#Jaz#Jaz#J#J#J#J#J#J#J#J#Jazax#Jaz#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#H#Jbeazbe#H", "#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jaz#J#J#J#Jaz#J#J#J#J#J#Jbv#Jazax#Jaz#Jaz#J#J#J#J#J#J#J#J#Jaxax#H#H#H#J#J#J#J#J#J#J.2beaz#Jbeax#J#J#J#J#Jaz#J#J#J#J#J#J#Jaz#J#J#J#J#J#Jazaz#J#Jaz#Jaz#Jaz#J#J#J#Jax#J#Jaz#J#Jaz#J#J#J#J.SazaUbxbe#J#J#J#J#J#J#J#J#Jaz#J#Jaz#J#J#Jaz#J#J.y#Jbeaz#H#J#J#J#J#J#J#Jaz#J#Jaz#J#J#J#J#J#J#Jaz#J#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J.yaz#J#J#Jbebeaz#J#Jaz#J#J#Jaxbe#J#J#J#J#J#J#J#J#J#J#Jaz#J#J#J#Jaz#J#R#J#Jax#J#Jaz#J#J#J#J#J#J#J#Jaz#J#J#J#J#J#m.W#Jaz#R#Jbe" }; miwm/version.h0100664000076400007640000000251407675611374012726 0ustar bwisebwise//-*-c++-*- // ------------------------------------------- // RCS data: // $Date: 2003/06/23 14:47:24 $ // $Revision: 1.1.1.1 $ // $Source: /cvsroot/miwm/miwm/miwm/version.h,v $ // $Id: version.h,v 1.1.1.1 2003/06/23 14:47:24 bwise837 Exp $ // $RCSfile: version.h,v $ // // ------------------------------------------- // Copyright by Ben Paul Wise. // ------------------------------------------- // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program 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 General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // ------------------------------------------- static char MIWMVersionID[] = "MIWM $Id: version.h,v 1.1.1.1 2003/06/23 14:47:24 bwise837 Exp $"; // ------------------------------------------- // end of version.h // ------------------------------------------- miwm/wm.cc0100664000076400007640000002744207701246607012022 0ustar bwisebwise//-*-c++-*- // ------------------------------------------- // RCS data: // $Date: 2003/07/04 09:48:55 $ // $Revision: 1.4 $ // $Source: /cvsroot/miwm/miwm/miwm/wm.cc,v $ // $Id: wm.cc,v 1.4 2003/07/04 09:48:55 sgbeal Exp $ // $RCSfile: wm.cc,v $ // ------------------------------------------- // Copyright by Ben Paul Wise. // ------------------------------------------- // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program 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 General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // ------------------------------------------- #include "miwm.h" #include "mimenu.h" #include "mipix.h" #include "ws.h" #include "miwm_framework.h" // ------------------------------------------- WindowManager::WindowManager() { // enough to get it off the screen offWorkSpace = display_width + display_height; whichMenu = noMenu; menu = NULL; mode = wmStartup; auto_x = 10; // starting position auto_y = 10; // starting position opaqueMoveSize = 5; // 5 percent is built-in default allClients = new NodeList(); hiddenClients = new NodeList(); setupWS(); // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // set some options raiseOnFocusP = miwm::args().getBool( "raise", miwm::config().getBool( "raise_client_on_focus", false ) ); previewWSP = 0; previewCP = miwm::args().getBool( "preview", miwm::config().getBool( "preview_client_before_unhide", true ) ); tileP = 1; usePixmapsP = miwm::args().getBool( "pixmaps", miwm::config().getBool( "enable_pixmaps", false ) ); followClientToWS = 0; protectTopLeft = 1; // #ifdef USE_PIXMAPS // usePixmapsP = 1; // #endif // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- wmRNG = new RNG(); activeBgd = None; // pure black inactiveBgd = None; // pure black popupBgd = None; // pure black #ifdef USE_PIXMAPS // loadPixmap(wood_xpm, &popupBgd); // loadPixmap(greenstucco, &popupBgd); loadPixmap(Sunflower, &popupBgd); loadPixmap(wood_xpm, &inactiveBgd); loadPixmap(magick, &activeBgd); #endif // this works under everything but Solaris // sleepval.tv_sec = 0; // sleepval.tv_usec = 250000; // // cout << "About to sleep "<< (sleepval.tv_usec)/1000 << " millisec" << flush; // select(0, 0, 0, 0, &sleepval); // // cout << " ... done sleeping" << endl << flush; } WindowManager::~WindowManager() { miwm::config().set( "preview_client_before_unhide", this->previewCP ); miwm::config().set( "raise_client_on_focus", this->raiseOnFocusP ); Client* c = NULL; Node* cND = NULL; int i; WorkSpace* ws = NULL; // Clear the menu clearMenu(); // Set all clients free. freeAllClients(); for (cND = allClients->first; cND != NULL; cND = allClients->nextNode(cND)) { c = ((Client*) cND->data); // if this client is NULL, we are in deep doo doo assert (NULL != c); if (0 != c->name) { cout << "deleting c->name: |"<name<<"| "<name; // this was the line of BUG 100 c->name = NULL; } if (0 != c->fallback_name) { cout << "deleting c->fallback_name: |"<fallback_name<<"| "<fallback_name; c->fallback_name = NULL; } delete c; c = NULL; cND->data = NULL; } delete allClients; allClients = NULL; delete hiddenClients; hiddenClients = NULL; // delete all workspaces for (i=0; iclientID << endl << flush; if (c != 0 && c->window == wins[i]) { c->size.x = attr.x - border; c->size.y = attr.y - border; c->size.width = attr.width + 2 * border; c->size.height = attr.height + 2 * border; c->border = attr.border_width; if (attr.map_state == IsViewable) { c->internal_state = IPendingReparenting; theWM->manageClient( c, true ); } } } XFree(wins); return; } // ------------------------------------------- void WindowManager::autoPlaceCoords(Client *c) { int autoX = -1; int autoY = -1; if (1 == tileP) tilePlaceCoords(c, &autoX, &autoY); // if tiling is not desired or fails, do the diagonal placement if ((0 == tileP) || (autoX < 0) || (autoY<0)) diagonalPlaceCoords(c, &autoX, &autoY); auto_x = autoX; auto_y = autoY; c->size.x = auto_x; c->size.y = auto_y; return; } void WindowManager::tilePlaceCoords(Client *c, int *autoX, int *autoY) { int i, j; // int dx = imax(border, c->size.width / 30); // int dy = imax(border, c->size.height / 30); int dx = border; int dy = border; int clms = (display_width) / dx; int rows = (display_height) / dy; int found = 0; int xTmp, yTmp; int smallP = 0; int th = titleHeightc(c); if (c->size.width * c->size.height * 100 <= opaqueMoveSize * display_width * display_height) smallP = 1; else smallP = 0; if (1 == smallP) {// vertical for (j = 0; ((0 == found) && (jsize.width, c->size.height))) { *autoX = xTmp; *autoY = yTmp ; found = 1; } } } } if (0 == smallP) { // horizontal for (i = 0; ((0 == found) && (isize.width, c->size.height))) { *autoX = xTmp; *autoY = yTmp ; found = 1; } } } } return; } void WindowManager::diagonalPlaceCoords(Client *c, int *autoX, int *autoY) { int xTmp, yTmp; xTmp = auto_x + (int)(wmRNG->uniform(30, 60)); yTmp = auto_y + (int)(wmRNG->uniform(20, 40)); if (xTmp + c->size.width > display_width && c->size.width <= display_width) xTmp = (display_width - c->size.width) / 2; if (yTmp + c->size.height > display_height && c->size.height <= display_height) yTmp = (display_height - c->size.height) / 2; if (xTmp > 500) xTmp = xTmp - 450; if (yTmp > 500) yTmp = yTmp - 450; *autoX = xTmp; *autoY = yTmp; return; } // ------------------------------------------- int WindowManager::okPlacement(Client *c1, int x, int y, int w, int h) { int okP = 1; int doneP = 0; Node *cND; Client* c = NULL; int th1 = titleHeightc(c1); int sep = DEFAULT_SEPARATION ; // minimum pixel separation if ((x<0) || (y-th1<0) || (x+w >= display_width) || (y+h >= display_height)) { okP = 0; doneP = 1; } for (cND = allClients->first; ((okP == 1) && (cND != NULL)); cND = allClients->nextNode(cND)) { c = ((Client*) cND->data); // if this client is NULL, we are in deep doo doo assert (NULL != c); if ((False == c->hidden) && (1 == c->isMapped) && (workSpace == c->workSpace) && (c1 != c)) { if ((c->size.x + c->size.width + sep < x) // client to the left || (x + w + sep < c->size.x) // client to the right || (c->size.y + c->size.height + sep < y - th1) // client above || (y + h + sep < c->size.y - titleHeightc(c))) // client below { // c1 is ok with respect to c. // just because it does not conflict with this c does not // ensure it is OK overall } else { okP = 0; doneP = 1; } } } return okP; } // ------------------------------------------- void WindowManager::doFullPreview(Client *pc) { if (NULL != pc) { // this little dance of the windows is necessary // to ensure that previewed windows are on top // of all the unhidden ones, but do not mess up the // popup. // cout << "Previewing client"<< endl << flush; XUnmapWindow(dpy, popup); XMapRaised (dpy, pc->parent); XMapRaised (dpy, pc->window); pc->isMapped = 1; XMapRaised (dpy, popup); } return; } void WindowManager::undoFullPreview(Client *pc) { if (NULL != pc) { XUnmapWindow(dpy, pc->window); XUnmapWindow(dpy, pc->parent); pc->isMapped = 0; // raise the popup, in case there was an overlap // XMapRaised (dpy, popup); } return; } void WindowManager::spawn(char *command) { char* sh = ((char*) getenv("SHELL")); // char *displayName = DisplayString(dpy); if (sh == 0) sh = "/bin/bash"; // cout << "SHELL is " << sh << endl; switch (fork()) { case 0: { // child close(ConnectionNumber(dpy)); execl(sh, sh, "-c", command, 0); // should not 'fall through' to here! XBell(dpy, 70); fprintf(stderr, "miwm: exec %s failed (errno %d)\n", command, errno); exit(1); } case -1: // error fprintf(stderr, "%s: couldn't fork\n", argv0); exit(0); } // wait((int *) 0); return; } int WindowManager::insideClientP(Client* c) { int rx, ry; if (NULL == c) return 0; getMouse ( &rx , &ry ); if (( c->size.x - border < rx) && (rx < c->size.x + c->size.width + border) && ( c->size.y - border < ry) && (ry < c->size.y + c->size.height + border)) return 1; return 0; } void WindowManager::warpPointerToBorder(Client* c) { int rx, ry; getMouse ( &rx, &ry ); Edge edge = whichEdge(c, rx, ry); // int xNew = c->size.x + (c->size.width)/2; // int yNew = c->size.y + (c->size.height)/2; int xNew = rx; int yNew = ry; switch (edge) { case ETop: // xNew = c->size.x + (c->size.width)/2; yNew = c->size.y + (border/2); break; case ETopLeft: xNew = c->size.x + (border/2); yNew = c->size.y + (border/2); break; case ETopRight: xNew = c->size.x + c->size.width - (border/2); yNew = c->size.y+(border/2); break; case ELeft: xNew = c->size.x + (border/2); // yNew = c->size.y + (c->size.height)/2; break; case ERight: xNew = c->size.x + c->size.width - (border/2); // yNew = c->size.y + (c->size.height)/2; break; case EBottom: // xNew = c->size.x + (c->size.width)/2; yNew = c->size.y + c->size.height - (border/2); break; case EBottomLeft: xNew = c->size.x + (border/2); yNew = c->size.y + c->size.height - (border/2); break; case EBottomRight: xNew = c->size.x + c->size.width - (border/2); yNew = c->size.y + c->size.height - (border/2); break; default: // leave in the middle break; } XWarpPointer(dpy, // obvious None, // unknown meaning and function root, // window coordinate system to use 0, 0, 0, 0, // unknown meaning and function xNew, yNew); return; } // ------------------------------------------- // end of wm.cc // ------------------------------------------- miwm/wood.xpm0100664000076400007640000002445307675611374012574 0ustar bwisebwise/* XPM */ static char * wood_xpm[] = { "100 100 4 1", " c #FFFFBABA5959", ". c #FFFFC3C36565", "X c #EBEBAAAA4141", "o c #FFFFB2B24141", " .Xooo .Xoo ..Xooo Xoo ..Xooooo .Xoo ..Xooo .Xoo ..Xo .Xooo .Xo ..Xoo ..Xo ..Xooo .Xoooo", " ..Xoo .Xoo ..Xooo Xoo ..Xoo oo .X ..Xoo .Xo ..X oo .Xooo Xoo ..Xo .Xo .Xoo .Xoooo", " .. .Xoo ..Xooo Xoo .Xo o o .Xoo ..Xooo .Xo ..X o .Xo Xo .Xoo Xoo .XXoo .Xoooo", " ..X .Xoo ..Xooo Xoo .Xoo oo .Xoo ..Xooo .Xoo ..Xo .Xooo .Xoo .Xoo .Xoo .Xooo Xooooo", " ..Xo .Xoo ..Xooo Xooo Xo o o .Xoo ..Xoo .Xo o ..Xoo .Xooo .Xo o .Xoo .Xooo .Xoooo Xooooo", " ..X .X ..Xooo Xooo .Xooo oo Xooo ..Xooo .Xoo ..Xooo .Xoo X o .Xoo .X .XXooo Xooooo", " ..Xo .Xoo ..Xoo Xoo Xoo oo Xooo ..Xooo .Xo .X o .Xooo .Xoo .Xoo ..Xoo .Xooo Xooooo", " ..Xo ..Xo ..Xoo Xooo .Xoo o Xo o ..Xooo Xoo .Xoo .Xooo oo .Xoo .Xo .X o Xooooo", " ..Xo ..X XXoo Xooo .Xoo oo Xoooo ..Xoo .Xo .Xoo .Xo .Xoo .Xooo .Xoo Xo Xooooo", " ..Xo ..Xo .Xoo .Xooo .Xooooo Xoo ..Xooo Xo .Xo o ..Xoo .X o Xooo ..X .Xoo Xoooo ", " ..Xo .XXo .Xoo Xoooo .Xoo Xoo ..Xooo Xoo .Xoo ..Xooo .Xoo ..Xo ..Xoo .Xo Xoooo ", " ..Xo .Xoo .Xo Xoooo .Xoo Xo ..Xoooo Xo .Xooo ..Xooo Xooo ..XXo ...X .Xoo Xoooo ", " ..Xo .Xoo .Xoo ooo .Xooo o Xo ..Xooo Xoo .Xo ..Xooo Xooo ..XXo ..X .Xo Xoo o ", " ..Xo .Xooo .Xooo Xoo o .Xooo .Xooo ...Xooo .Xoo .Xoo ..Xooo .Xooo ..Xo o ...X .Xoo .Xoooo ", " ..Xo .Xooo .Xoo Xoo o .Xoo o .Xooo ...Xoo .Xoo .X ..Xoo Xooo ..Xooo ..X Xoo .Xoooo ", " ..Xo .Xooo .Xo o.Xo o .Xoo .Xooo ...Xooo .Xooo .Xoo ..Xoo .Xooo .Xooo ...Xo Xoo .Xoooo ", " ..Xo .Xooo .Xooo..o .Xoo .Xoo ...Xooo .Xoo .Xo ..Xooo Xooo .Xoo ...Xoo Xoo .Xoooo ", " ..Xo .Xooo .Xooo.. o .Xo o .Xoo ...Xooo .Xoo .Xo ..Xoo .XXo o .Xoo ..XXoo Xoo Xoooo ", " ..Xo .Xooo .Xooo.Xo o .Xoo .Xoo ...Xo .Xoo .Xoo ..Xoo .X .Xoo ..Xooo Xo .Xooo ", " ..Xo .Xooo .Xooo Xoo o .Xoo o .Xoo ...Xooo .Xoo .Xooo ..Xoo ..Xooo .Xoo ..Xoo Xo .Xoo ", " .. o .Xooo .Xoo. X .Xoo .Xo ...Xooo .Xoo .Xo ..Xo ..Xoo .Xoo ..Xoo oo .Xoo ", " . o .Xooo XXoo..Xo o .Xoooo ..Xo o ...Xoo .Xoo .Xo ..Xoo ..Xoo .Xoo ..Xooo Xooo .Xoooo ", " ..X .Xooo Xooo. Xoo ..Xoo ..Xooo ...Xooo .Xoo .Xo ..Xooo .Xoo .Xoo .Xoo ooo .Xooo ", " .. o .Xooo Xooo. Xo o ..Xoo o ..Xoo ..XXooo .Xoo .Xooo ..Xoo ..Xo .Xoo ..Xoo Xooo .Xooo ", " ..X .Xooo Xo. . Xooo ..Xoo ..Xoo ..Xooo .Xoo .Xooo ..Xooo ..Xoo .Xooo ..Xoo Xooo .Xooo ", " ..Xo .Xooo Xoo. .Xooo ..Xooo ..Xooo ..Xoo o .Xo .Xoo .Xoo .Xoo .Xooo ..Xoo Xooo .Xooo ", " ..Xo .Xooo Xoo ..Xooo ..Xooo ..Xo o ..Xooo .Xo .Xooo ..Xo o .Xoo .Xoo .Xoo Xo o .Xoooo ", " ..Xo .Xoo Xooo..Xooo ..Xooo ..Xoo ..Xoo o .Xooo .Xooo ..Xoo .Xo o .Xooo ..Xoo . .Xoooo ", " ..Xo . o Xoo..Xoooo .Xoooo ..Xoo ..Xoo o ..Xoo .Xooo ..Xooo .Xoo .Xoo ..Xoo .X .Xoooo ", " .Xoo .X o Xooo.Xo .Xoooo ..Xoo ...Xoo o ..Xo .Xo o .Xooo .Xooo .Xoo ..Xoo .Xo .Xoooo ", " .Xoo .X .Xo.o.Xoo Xooooo .X oo ...Xo o ..Xoo .Xoo .Xooo .Xo .Xooo ..XXoo Xo .Xooo ", " .Xoo .X .Xooo..oo Xoo ..Xo ...Xoo o ..X o .Xoo .Xoo .Xo .Xooo ...Xo . o .Xooo ", " .Xoo .X o .Xooo Xooo .X.oo o ..Xooo ...Xo o ..X o .Xooo .Xoo .Xoo .Xooo ..Xoo X o .Xoo ", " .Xoo .X .Xooo Xoo ..Xooo ..Xoo ...Xo o ..Xoo .Xooo .Xooo .Xo .Xooo ..Xoo .Xoo .Xooo ", "..Xoo .Xoo .Xooo Xoooo Xooo o ..Xoo ...Xoooo ..Xo o .Xooo .Xooo .Xo .Xoo ..Xoo .Xoo .Xooo ", "..Xoo .X o .Xooo Xoo Xoo o ..Xo ...Xo o ..Xo .Xooo .Xoo Xoo .Xooo .Xoo .Xoo .Xoo ", "..Xoo .X .Xoo Xooo Xooo o ..Xo o ...Xoo o ..Xoo ..Xooo .Xoo .Xoo .Xoooo .Xoo Xoo .Xooo ", "..Xoo .X o .Xoo Xooo Xooo ..Xo ...Xoo ..Xoo ...Xo o ..Xo .Xoo .Xoooo .Xoo .Xoo .Xooo ", "...Xo . o .Xoo .Xoooo .Xooo o .XXooo ...Xoo o .Xoo ...Xoo ..Xoo .Xo .Xoooo ..Xoo .Xoo .Xooo ", "...Xo XX o .Xo .Xooo...Xoo o .Xoo ...Xooo ..X o ...Xo ..Xo Xo o .Xoo o .Xoo .Xoo .Xooo ", "...Xo Xooo .X .Xoooo .Xooo o .Xoo o ...Xoo ..Xoo ...Xoo ..Xo .Xo .XXooo ..Xoo .Xoo .Xooo ", "...Xo Xooo .X .Xoooo .Xooo .Xoo ...Xooo ..Xoo ...Xooo ..Xo .Xoo ..Xoo ..Xo Xoo Xoo ", "...Xo Xooo .Xoo .Xoooo .Xooo .Xoo ...Xoo o ..X o ...Xoo .Xoo .XXoo ..Xooo ..Xoo Xoo Xooo ", "...Xo Xooo .Xo .Xoooo .Xooo .Xooo ..Xoooo .Xoo ...Xoo ..Xoo ..Xo .XXo ..Xoo Xo Xooo ", "..Xoo Xooo .Xoo .Xo o .Xoooo ..Xoo o ...Xo .Xooo ...Xoo ..Xo ..Xo ..Xoo .Xo Xoo Xooo ", "..Xoo Xooo .Xoo .Xo .Xoooo ..Xooo ...Xoo o .Xooo ...Xoo ..Xoo ..Xoo ..Xo ..Xooo Xoo ooo ", "..X Xooo .Xoo .X o .Xoooo ..Xoo ...Xoo o .Xoo ...Xo ..Xo ..Xo ..X ..X.o. Xoo Xooo ", " .X Xooo .Xoo .Xoo .Xoooo ..Xo ...Xoo o .Xooo ...Xoo ..Xoo ..Xooo ..X .Xo . Xooo Xooo ", " Xo o Xooo .Xoo .Xoo .Xo o ..Xoo ...Xoo .Xooo ...Xoo ..Xo ..Xoo ..Xo ..Xoo .Xoo Xooo ", " X o Xoo .Xoo .Xooo .Xoo o ..Xooo ....Xoo .Xooo ...Xoo ..Xoo ..Xoo ..Xo .Xo.. Xooo Xooo ", " Xo o Xooo .Xoo .Xooo .Xo o ..Xoo ...Xooo Xooo ...Xoo .Xoo .Xoo ..Xoo Xo Xo Xoo ", " Xo o Xo .Xoo .Xooo .Xoo o ..Xo ....Xooo ..Xoo ..Xoo ..Xo o .Xo ..Xoo .Xoo. Xoo Xoo ", " XX o Xo .Xoo .Xooo ..Xoo o ..Xo ...Xooo ..Xoo ...Xooo ..Xoo .Xo .Xoo Xo . Xo Xoo ", " .X o Xoo .Xoo .Xoo ..Xoooo ..Xoo ...Xooo ..Xo ...Xoo ..Xo o .Xoo ..Xoo .Xoo. Xo Xooo ", " . oo Xoo .Xoo .Xoo ..Xoo o ..Xo o ....Xooo Xoo ...Xo o ..Xo .Xoo ..Xoo .Xoo. Xoo Xo ", " .X o Xoo .Xoo .Xo ..Xo ..Xoo ....Xooo .Xo ...Xooo ..Xoo .Xooo .Xo .Xoo Xoo..Xoooo ", " .Xo Xo .Xoo .Xoo ..Xoooo .Xoo ....Xooo .Xo ...Xooo . oooo .Xo .Xo .Xo Xoo. Xoooo ", " .Xoo Xooo .Xo .Xoo ..Xoo o .Xoo ....Xooo .Xoo ....Xooo Xo .Xoo .Xoo .Xoo Xo.. Xoooo ", "..Xoo Xoo .X Xoo ..Xooooo .Xoo ...Xoo .Xo ....Xooo .Xo o .Xoo .Xo .Xoo Xoo..Xoooo ", "..Xoo Xoo .Xo .Xo .Xo oo .Xo ...Xooo .Xooo ....Xooo .Xoo o .Xoo o .Xo .Xooo Xoo. Xooo ", "..Xoo Xoo . o .Xoo .Xoo o .Xoo ...Xoo .Xoo ....Xooo .Xoooo .Xo o .X .Xoo Xo.. Xoo ", "..Xoo Xoo ..Xoo .Xo .Xooooo .Xoo ...Xooo .Xo ....Xooo Xoooo .X o o .Xooo .Xo.. Xoo oooo ", "..Xoo Xoo ..Xoo .Xoo .Xooo o .Xoooo ...Xoo .Xoo ....Xooo .Xooo .Xoo o .Xo .Xoo..Xo Xooo ", "..Xoo Xoo ..Xoo .Xoo .Xoo oo .Xo ...Xoo .Xo ....Xo .Xooo .Xo o .Xo .Xo . Xooo Xoooo ", "..Xoo Xoo ..Xoo ..X .XXoooo .Xooo ...Xo .Xooo ...Xooo .Xoo ..Xo o .Xoo .Xo.. Xoo Xoo ", "..Xoo Xoo ..Xoo ..Xo ..Xoooo .Xooo ...Xo o .Xo ..Xo o Xoo ..Xoo .Xoo .Xo . Xo Xoo ", "..Xoo Xoo ..Xoo ..Xo ...Xoo .Xoo ...Xooo .Xoo ...Xooo .Xo .Xooo .Xo .Xoo .Xoo Xoo ", "..Xoo Xoo ..Xoo .Xo o ...Xoo ..Xooo ...Xo o .Xo ...Xooo .Xoo .Xooo .Xoo .Xoo. Xooo..oooo ", "..Xoo Xoo .Xoo .Xooo ...Xoo ..Xoo ...Xo .Xoo ..Xooo ..Xo .Xooo Xo .Xoo Xooo..oooo ", "..Xoo Xoo .Xoo .Xooo ...Xo ..Xoo ...Xooo .Xooo ...Xooo ..Xoo .Xooo o .Xoo .Xoo Xooo..oooo ", "..Xoo Xooo .Xooo .Xooo ...Xoo .Xooo ...Xo .Xooo ..Xoo .Xoo .Xoooo .Xo .Xoo Xooo Xoooo ", "..Xoo Xooo .Xooo .Xooo ..Xooo ..Xooo ...Xo .Xooo ..Xooo ..Xoo .Xoooo .Xoo .Xo Xoo..Xoooo ", "..Xoo Xooo .Xoo .Xooo ..X .Xo ...Xo .Xooo ...Xooo Xoo .Xooo .Xoo .Xo Xo .Xooo ", "..Xoo Xooo .Xoo .Xooo ..Xooo .Xoo ...Xoo .Xoooo ...Xooo .Xo .Xoooo .Xooo .Xoo Xo .Xoooo ", " .Xoo XXoo .Xooo .Xooo ..Xo o .Xoo ...Xooo ..Xooo ...Xo o .Xoo .Xoooo .Xo o Xoo .Xo Xoooo ", " .Xoo .X o .Xoo .Xoooo ..Xoooo .Xooo ...Xooo ..Xoo ...Xoo ..Xoo .Xoooo .Xo .Xoo .X Xoooo ", " .Xoo X o .Xooo .Xoooo ..Xoo .Xooo ...Xoooo ..Xooo ...Xooo ..Xo .Xooo .X .Xoo Xooo Xoooo ", " .Xoo .X ..Xo .Xoooo ..Xo o .Xoo ...Xoo ..Xooo ...Xooo ..Xooo .Xoooo ..Xoo .Xo .Xooo Xoooo ", " .XXo . oo ..Xooo Xoooo ..Xoo o .Xo ...Xoo ..Xooo ...Xooo .Xooo .Xoooo ..Xo .Xo Xoooo Xoooo ", " ..Xo Xoo ..Xooo Xoooo ..Xo o .Xo o ...Xooo ..Xooo ...Xoo .Xooo .Xoooo .Xo o .Xo .Xooo Xoooo ", " ..Xo Xoo ...Xoo Xoo ..Xooo .Xoo ...Xooo ..Xo ...Xoo .Xooo .Xoooo .Xo .Xo .Xooo Xoooo ", " ..Xoo Xoo ...Xoo Xo ..Xoo .Xo ....Xo ..Xoo ..XXooo ..Xooo .Xoooo ..Xo o .Xo Xooo ooo ", " ..Xoo Xoo ...X Xo oo ..Xoooo .Xoo ....Xoo ..Xooo ..Xoooo ..Xooo .Xooo ..Xo .Xo Xoooo Xoooo ", " ..Xoo Xo ..Xoo Xo oo ..Xo o .Xo ...Xoo ..Xoo ..Xoooo ..Xooo .Xooo ..X .Xo Xoooo Xoooo ", " ..Xoo Xo ..Xo Xoo o ..Xo .Xoo ...Xo ..Xo ..Xoooo Xo .Xoo o ..Xo ..Xo Xoooo Xoooo ", " ..Xoo Xoo ..Xoo X o ..Xoo o .Xooo ...Xoo ..Xoo ..Xooo ..X o .Xooo ..Xo ..Xo Xooo .Xoooo ", " ..Xo Xo ..X Xoooo ..Xoo o .Xoo ...Xoo ..Xoo ..Xooo ..Xo .Xooo ..X .Xo Xoo o .Xoooo ", " ..Xoo Xooo ..Xoo .X o ..Xoooo .Xoo ...Xoo ..Xooo .Xoo ..Xo .Xooo ..X ..Xo Xoo o .Xooo ", " ..Xo Xooo ..Xoo .X ..Xoooo .Xoo ...Xoo ..Xo ..Xoo ..Xo ..Xoo ...Xo .Xo Xo o ..Xooo ", " ..X Xooo ..Xoo .Xo o ..Xoooo .XXooo ..Xoo ..Xoo ..Xoo Xooo ..Xoo ..XXoo ..Xo Xo ..Xoo ", " ..Xo .Xoo ..Xoo .Xo o .Xoo o ..Xoo ...X o ..Xo ..Xo .Xooo .Xo ..Xoo ..Xo Xo oo ..Xoo ", " ..Xo .Xoo ..Xoo .Xoo .Xoo o ..Xooo ...Xoo .Xooo ..Xoo .Xooo ..Xoo ..Xo o .Xoo Xoooo ..Xoo ", " ..Xoo .Xoo ..Xoo Xo oo .Xooo o .Xooo . .Xo .Xooo ..Xooo .Xooo ..Xoo .X .Xoo Xooo ..Xoo ", " ..Xoo .Xoo ..Xoo X o o .Xoo o .Xoo ...Xoo .Xoo ..Xooo ..Xooo ..Xoo ..Xo .Xoo XXo o ..Xoo o", " ..Xoo .Xoo ..Xooo Xo o .XXooo .Xoo ..Xoo o .Xo .Xooo .Xooo .Xoo ..X .Xoo .Xoo ..Xo o", " ..Xoo .Xoo ..Xoo Xoo ..Xoo .Xo o ..Xoo .Xoo ..Xooo ..Xo .Xo ..Xo ..Xo .Xoo ..Xoo o", " ..Xoo .Xoo ..Xooo Xoo o ..Xoo .Xo ...Xoo o .Xoo .Xoo ..Xoo ..Xo ..Xo .XXo .Xo ..Xoooo", " ..Xoo .Xoo ..Xooo Xoo o ..Xoooo .Xooo ..Xoooo .Xoo ..Xoo ..Xooo .XXo .XXoo .Xo .Xoo ..Xoooo", " .XXoo .Xoo ..Xoo Xoooo ..Xoooo .Xooo ...Xo .Xoo ..Xoo ..Xooo .Xooo .Xoo .Xo ..Xoo ..Xooo ", " .Xooo .Xoo ..Xooo Xoo o .Xoooo .Xooo ..Xo o .Xooo .Xo ..Xooo .Xoo ..Xoo .Xoo ..Xooo ..Xooo "}; miwm/ws.h0100664000076400007640000000302507701246545011662 0ustar bwisebwise//-*-c++-*- // ------------------------------------------- // RCS data: // $Date: 2003/07/04 09:48:21 $ // $Revision: 1.2 $ // $Source: /cvsroot/miwm/miwm/miwm/ws.h,v $ // $Id: ws.h,v 1.2 2003/07/04 09:48:21 sgbeal Exp $ // $RCSfile: ws.h,v $ // // ------------------------------------------- // Copyright by Ben Paul Wise. // ------------------------------------------- // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program 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 General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // ------------------------------------------- #ifndef WS_H #define WS_H // ------------------------------------------- #include #include "miwm.h" // ------------------------------------------- class WorkSpace { public: WorkSpace(const char* ); ~WorkSpace(); std::string label; protected: private: }; // ------------------------------------------- #endif // ------------------------------------------- // end of ws.h // ------------------------------------------- miwm/wspace.cc0100664000076400007640000001453507701251361012651 0ustar bwisebwise//-*-c++-*- // ------------------------------------------- // RCS data: // $Date: 2003/07/04 10:12:01 $ // $Revision: 1.3 $ // $Source: /cvsroot/miwm/miwm/miwm/wspace.cc,v $ // $Id: wspace.cc,v 1.3 2003/07/04 10:12:01 sgbeal Exp $ // $RCSfile: wspace.cc,v $ // ------------------------------------------- // Copyright by Ben Paul Wise. // ------------------------------------------- // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program 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 General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // ------------------------------------------- // this defines the functions for workspace-related // manipulations // ------------------------------------------- #include "miwm.h" #include "ws.h" #include "miwm_framework.h" #include "EStringList.h" // ------------------------------------------- void WindowManager::setupWS() { numWorkSpaces = 0; allWorkSpaces = (WorkSpace**) malloc (maxNumWorkSpaces * sizeof (WorkSpace)); previewWSP = 0; previewedWorkSpace = NULL; // and likely to stay that way std::string spacenames = miwm::config().getString( "workspace_names", "One Two Three Four Five Six" ); EStringList list = EStringList::tokenize( spacenames ); std::string wsname; while( true ) { wsname = list.shift(); if( wsname.empty() ) break; addWorkSpace( wsname.c_str() ); } return; } void WindowManager::addWorkSpace(const char* wsName) { if (numWorkSpaces < maxNumWorkSpaces) { WorkSpace* ws = new WorkSpace(wsName); allWorkSpaces[numWorkSpaces] = ws; numWorkSpaces = numWorkSpaces + 1; if (1 == numWorkSpaces) workSpace = ws; } else { cout << "Maximum number of workspaces ("<first; cND != NULL; cND = allClients->nextNode(cND)) { c = ((Client*) cND->data); // if this client is NULL, we are in deep doo doo assert (NULL != c); if (c->workSpace == ws1) { // I marked the following 'if' as suspicious, // but now I don't recall why if (False == c->hidden) if (c->sticky == 0) { if (c == current) { setactive(current , 0 , 0L); current = NULL; } innerSendClienttoWS(c, 0); // hide it } else { // c->sticky == 1 c->workSpace = ws2; } } if (c->workSpace == ws2) { if (c->sticky == 0) { if (False == c->hidden) innerSendClienttoWS(c, 1); // actually show it } else { // do nothing: it is sticky and already in this WS } } } workSpace = ws2; focusOn(NULL); // arrive defocused return; } void WindowManager::sendClientToWorkSpace(Client* client, WorkSpace* ws2) { assert (NULL != ws2); if (NULL != client) { // client did not die during the operation if ((ws2 != workSpace) || (ws2 != client->workSpace)) { client->sticky = 0; client->workSpace = ws2; // is this one in focus? if (client == current) { setactive(current, 0, 0L); // copied from disp.cc current = NULL; } innerSendClienttoWS(client, 0); // make it invisible } assert (client->workSpace == ws2); if (1 == followClientToWS) { changeWorkSpace(workSpace, client->workSpace); followClientToWS = 0; } } else { // client died during the operation. CYA XUnmapWindow(dpy, popup); mode = wmReady; } return; } void WindowManager::innerSendClienttoWS(Client* client, int visibleP) { if (visibleP == 0) {// slide it away // set normalX, normalY just prior to pushing it off the screen. client->normalX = client->size.x; client->normalY = client->size.y; client->normalW = client->size.width; client->normalH = client->size.height; XMoveWindow(dpy, client->parent, client->size.x + offWorkSpace, client->size.y + offWorkSpace); // note that I do not do any configure notification. // if the client pops up an emergency dialog box, I want it to show. } else { // slide it back XMoveWindow(dpy, client->parent, client->normalX, client->normalY); // XMapWindow(dpy, client->parent); } return; } // ------------------------------------------- WorkSpace::WorkSpace(const char* n) { label = string(n); } WorkSpace::~WorkSpace() { // XtFree(label); } void WindowManager::rotateWSClients() { Client *c1 = current; Client *c2 = NULL; Node* cND = NULL; int i = 0; int numClients = allClients->length() ; if (0 == numClients) return; if (c1 == NULL) { cND = allClients->first; c1 = ((Client*) cND->data); } cND = allClients->inList(c1); while ((c2 == NULL) && ( i < numClients + 2)) { cND = allClients->nextNode(cND); if (cND == NULL) cND = allClients->first; i = i + 1; c1 = ((Client*) cND->data); // if this client is NULL, we are in deep doo doo assert (NULL != c1); if ((False == c1->hidden) && (workSpace == c1->workSpace)) c2 = c1; } if (c2 != NULL) { raiseClient(c2); focusOn(c2); } return; } // ------------------------------------------- // end of wspace.cc // -------------------------------------------