Church of WiFi: Warglue Documentation ===== last updated 06.12.03.am.01.00 ==========
Table of Contents:
Section 1: General Warglue / Church of WiFi Information
Section 2: Warglue Specifics
Section 3: Warglue Modules
=== General Warglue / Church of WiFi Information =======
Licensing:
Warglue and all its modules is Copyright 2003 Church of WiFi and distributed under the terms of the GNU General Public License (with one clearly explained exception)
-----
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. WARGLUE, below,
refers to any such program or work, and a "work based on WARGLUE"
means either WARGLUE or any derivative work under copyright law:
that is to say, a work containing WARGLUE 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 WARGLUE is not restricted, and the output from WARGLUE
is covered only if its contents constitute a work based on the
Program (independent of having been made by running WARGLUE).
Whether that is true depends on what WARGLUE does.
1. You may copy and distribute verbatim copies of WARGLUE'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 WARGLUE a copy of this License
along with WARGLUE.
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 WARGLUE or any portion
of it, thus forming a work based on WARGLUE, 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 WARGLUE 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 WARGLUE under
these conditions, and telling the user how to view a copy of this
License. (Exception: if WARGLUE itself is interactive but
does not normally print such an announcement, your work based on
WARGLUE 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 WARGLUE,
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 WARGLUE, 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 WARGLUE.
In addition, mere aggregation of another work not based on WARGLUE
with WARGLUE (or with a work based on WARGLUE) 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 WARGLUE (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 WARGLUE 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 WARGLUE
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute WARGLUE 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 WARGLUE or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing WARGLUE (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
WARGLUE or works based on it.
6. Each time you redistribute WARGLUE (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify WARGLUE 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 WARGLUE at all. For example, if a patent
license would not permit royalty-free redistribution of WARGLUE 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 WARGLUE.
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 WARGLUE is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places WARGLUE 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 WARGLUE
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 WARGLUE 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 WARGLUE 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 WARGLUE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR WARGLUE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE WARGLUE "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 WARGLUE 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 WARGLUE 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 WARGLUE (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 WARGLUE 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
-top of document-
warkizniz - ffrf - [email protected] warbabel - converge - [email protected] warscrub - blackwave - [email protected] warftest - blackwave - [email protected]-top of document-
Documentation Revision History:
document created - 06.12.03 - converge - various docs merged into html documentation-top of document-
Warglue Background (the roots):
What: Warglue is a cross-platform opensource wardriving tool suite that allows for many custom modules created by wardrivers to manipulate their data logs.
When: converge wrote a program for defcon 10's wardriving contest to allow kismet users to convert to wi-scan (required to qualify for the contest)... quickly and poorly written, it suffered from quite a few bugs, but got logs converted with a little tweaking. There grew a desire to clean it up, and take the idea further...
Where: Nationwide baby! and posed to raid your home at any moment.
Why: While several others (Medic, ffrf, et al) wrote scripts to convert from kismet to wi-scan, no one else was expanding on conversion options and other log management functions; it needed to get done.
Who: converge, ffrf, blackwave
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.2.2 (MingW32) mQGiBD7otBMRBACZCRhaMhYQ45DHNSL4wih17vZH7nDiOxbjmACrzp5XalwCSpXy PiTnJ18hfJXhpRK9cgpPjfnY1ETZsl0jDwozUSZAiiCG/yMdcWRPQbiohWVOkqqL u2U5zkYpXVBCtFDE2Unxg1XeAXbIrM9JoQKRUhAnwlSHsVNXSacDHefOKwCguLlw WdxZYyXetQ2pG0BLqL7r+2sD/ikF+oIzoTCq4j5HDEirPrZ0yA3vzl3bXKIj2EFc WiX4L29lIzAWy9we9BW5Z+Ve4liTBGlpthqCJBe9LW22lgtW4xXVGchHItOQgtoN zzhfZuF4JLtTshNExsVQ0EZmvobsb9vam072KRyfqyml+fcgaH2J2CIlsBTZtTuB aVjTA/9C8raLxn52ySIM5JS05R5z6HSpTkNGAba1TElxYnlbQSXw2xUA+w3mbKrP iz83PMAqKHQAkZhf3j+4UF6fmspGAQjav60rxW7+KoBvNb4HGACB33rgkHTBna16 6UL2MZi4aAHHOiO1N6hPsE+AylGb9jPysW2bIuINcHZpaYKYjbQtQ2h1cmNoIG9m IFdpRmkgKGh0dHA6Ly93d3cuQ2h1cmNoT2ZXaUZpLmNvbS8piGEEExECACEFAj7o tBMFCQHhM4AGCwkIBwMCAxUCAwMWAgECHgECF4AACgkQoO/NurDDxAha2QCfRSCG JhxmeAvxwthdvCnhp8gcXfIAoKEa2VrhAYC0yJkcm6Xl5yVH7g1tuQINBD7otKwQ CACcZLMAum9IztQ1M1d9RL2hN5LIr2ZG6GBQoVbCZsQdwl904kmxZuD1Muz9C6Zh hAlaN+e1SbO7siDbhojjrdCo6em7MEw/q+6u/z5Wqo9cQWJK6oCXqW+S92uqXtUi ZUhvIqi/su0X5u7HHwjuooRsYtp53tyl/mgwWRg7RbmyqTBgKynol9y2uV9LPa3L Ghnjd4p5apecEhWyih9tGsubSwq9mfYONCWqHFhfQ8YegTiLa6dXCcAaaoqv/JDA 3VA7KGv51h2DLeNLGWNw0DnmWu//c1qpTeEv+UHY8rDj1CoY2up4WYg4/bJ57Ihg iBTACAyh3MMIEkbvSTTlrUFTAAMFB/9/vEYHEA63tDXtlEpLNd8fB9WkZfR1zfja yz3h6Gl4UfAWfDlXMwOH56ag4j0SmVqNkuwUXzvNKKD2ZX/soeicv+I147piobC1 RcywSuApfqBRFTuJPh/24GKa+YMQPZOnumRjSgol0XUkCV3WU8+xtquRu+qtmiy+ BYhZs5U8Nf6GQLhUKAozhB9yAbKJdv3HPUVoDtc1Dckd1RbnTDaYsIXhbbXzfcMq fRZbLLee373HbzaqOLp8v+/lyknYEu0kYyFLT7er/TN8FvuKN6akWK1vIJpT9tUW m6HWUPoxpNfKEqtKNnWlJDV7YwJ6hTmT7kIpjr572tQzfJIIcWtGiEwEGBECAAwF Aj7otKwFCQHhM4AACgkQoO/NurDDxAjHvwCgsCDLMKhN3XdEfaYg2aY9RoCjcoUA oJRt4lZIoelNIfQDRG8arX1sz7Dq =3vqc -----END PGP PUBLIC KEY BLOCK------top of document-
Warglue Frequently Asked Questions:
00. Can I join the Church of WiFi? 10. Will warglue support the [?] log format? 20. Why isn't warkizniz code open source too? 30. Why the name change from warwis to warbabel? Why not a newer version of warwis?
Can I join the Church of WiFi?
Church membership can only be obtained through devine intervention. Only the most devout of followers may pass through the Holy Gates of MacFilter. Oh yeah.. mooo. -c0n_
Will warglue support the [?] log format?
The warglue project is very interested in supporting as many log formats as possible in its utilities. What we need mostly are logs or format documentation. Please submit requests to one of the maintainers listed. -c0n_
Why isn't warkizniz code open source too?
Warkizniz is based on source code provided by Marius Milner (creator of Netstumbler - www.stumbler.net). Marius did not authorize public disclosure of this source code, therefore warkizniz will remain closed-source. -ffrf
Why the name change from warwis to warbabel? Why not a newer version of warwis?
Warwis had all the intentions of being written like warbabel, but was ill thought out and was also under the pressure of a March release. It worked, but had bugs and was badly coded. A new version for it was not created because the reasoning behind warwis was purely functional. This is not the case for warbabel,as it represented both a conceptual and practical incarnation of an idea. -c0n_
=== Warglue Specifics =======
06.10.03 - warglue module: warbabel released 06.10.03 - warglue module: warwis module phased out 04.24.03 - warglue module: warkizniz update/bugfix release 04.10.03 - warglue module: warscrub version 2 release 04.06.03 - warglue module: warftest released 03.01.03 - warglue module: warkizniz released 03.01.03 - warglue module: warwis released 03.01.03 - warglue module: warscrub released-top of document-
[warkizniz]
None known at time of release
[warscrub]
None known at time of release
[warbabel]
None known at time of release
[warbabel frontend]
None known at time of release
[warwis]
01.a - during usage of kismet.gps timsec is read and used, but does not
increment the time for supplemental records in wi-scan, therefore all
log records in extended wi-scan and wi-scan have the identical time
STATUS: Fixed in the warbabel release [2003-06-10]
REASON: No good one, just ran out of time before release. Translations should
now be 100%.
02.a - during usage of kismet.gps to provide supplemental data for wi-scan and
wi-scan extended logs, GPS reading would lock the entire runtime.
STATUS: Fixed in the warbabel release [2003-06-10]
REASON: In a perfect world this would not have been an issue. The way I read in
GPS values assumed that fields followed a certain structure. However,
various conditions cause the kismet.gps file to randomly corrupt during
kismet runtime. A smarter way of reading the log was implemented
(thanks ffrf for perusing your gps code, thanks roamer for finding the
bug )
03.a - during user interaction with warwis they would be instructed to check
documentation for further info. The documentation in turn would point
them back to the program help/usage for the information they wanted.
STATUS: Fixed in the warbabel release [2003-06-10]
REASON: I was retarded (thanks Drew for finding the bug)
[warftest]
None known at time of release
[Bug Reporting]
Please submit new bugs that are not known to:
Project: CoWF/Warglue - Network Stumbling / Wardr: Browse Bugs
http://sourceforge.net/tracker/?atid=496068&group_id=61076&func=browse
[Helpful information for solving bugs]
- exact command line used to run the binary (switches and all)
- exact output that the program did or did not provide, including any error
messages
- when possible, copies of the logs that are being used
-top of document-The source included has been compiled, built and tested with the following OSes from the same codebase without modification required. win32 - Microsoft Windows XP - Microsoft Windows 2000 linux - slackware 8.1 - slackware 9.0 freebsd (some modules, all _should_ compile) macosx (some moudles, all _should_ compile) Unless otherwise noted the source internal notes explain which compilers were used for compilation.-top of document-
In several of the modules you will find a batch file or shell script that was used in testing the module. You can run it against the data to get the same results if you think something is wrong.-top of document-
Various scripting examples will be added to the warglue site to increase module functionality-top of document-
=== Warglue Modules =======
-[summary] Convert Kismet to NS1 (*binary release only / not GPL / Check BINARIES list for more information) -[usage] cowf-warglue-warkizniz-02.27.03.pm.23.03 Church of WiFi - WarKizNiz Module (windows) Usage: warkizniz-top of document--[example] C:\> warkizniz Kismet-Oct-26-2002-1.csv Kismet-Oct-26-2002-1.gps testns1.ns1 Reading GPS file .. Status: ooooooooooooooooooooooooooooo NMEA! Found 103 APs .. Writing NS1 .. Status: ooo NMEA!
-[summary] Splits out bad GPS coordinates from any wi-scan format -[usage] cowf-warglue-warscrub.02.25.03.pm.08.36 Church of WiFi - WarGlue Module (windows) Usage: warscrub INFILE ALLGPSFILE NOGPSFILE -[example] C:\>warscrub anywiscanexportedfile goodgps badgps Processing, please wait.GGGGGGGGGGGbbbbbb (a lot of scrolling and images here) cowf-warglue-warscrub.02.25.03.pm.08.36 Church of WiFi - WarGlue Module (windows) Number of APs without GPS Coords = 510896 saved to: badgps Number of APs with GPS Coords = 395829 saved to: goodgps-top of document-
-[description]
Warbabel is designed as a both a conceptual and practical piece. Conceptually it
structures out a means of simplifying log I/O for various formats, allowing for
easy implementation in other development projects. On the practical side, it
makes an example of these format classes by performing log translation between
them. At its initial release, warbabel fully supports all of the following log
conversions:
kismet [csv,xml,net] -> wiscan [std,sum,txt]
kismet [csv,xml,net] -> kismet.gps
kismet [csv,xml,net] -> kismet [csv,xml,net]
wiscan [std,sum,txt] -> kismet [csv,xml,net]
wiscan [std,sum,txt] -> kismet.gps
wiscan [std,sum,txt] -> wiscan [std,sum,txt]
kismet.gps -> wiscan [std,sum,txt]
kismet.gps -> kismet [csv,xml,net]
kismet.gps -> kismet.gps
That's right; all these are available and functioning in this release of warbabel.
THROW AWAY WARWIS! Also implemented in the format classes are some predefined
filters for log reading. For example, filtering out 0.000000 GPS coords or ad-hoc/
infrastructure records is as easy as setting the filters to true/false. The value
in something like kismet.gps -> kismet.gps is that performing a conversion to the
same file type will effectively perform the filter you that file while maintaining
your original format; but can also perform all this while executing any of the
listed translations.
-[usage]
The following describes each element in warbabel usage a little more thoroughly:
./warbabel - binary name. in windows will be warbabel.exe. if you compile
it with a different name, use that
inFile - this is your input log that you wish to translate from. no
need to specify what it is, warbabel knows
outFile - this is the path/filename that your output results will be
translated to
gpsFile - OPTIONAL. really only handy when converting from kismet to
wi-scan or wi-scan extended
-output-type - in warwis, this was the equivelant of the flags that were
difficult to explain and understand. Basically, I can't read
your mind for what you want your output to be, so you specify
it with one of the following valid expressions:
-wiscan = -wiscan-standard = -wiscan-std
-wiscan-text = -wiscan-txt = -wiscan-extended
-wiscan-summary = -wiscan-sum
-kismet = -kismet-csv
-kismet-xml
-kismet-net = -kismet-network
-kisgps
-[example]
./warbabel kismet.csv test.txt kismet.gps -wiscan-txt
- will translate kismet.csv with kismet.gps supplemental records and output it to
test.txt as the format wi-scan text (aka extended)
-top of document-
warbabel frontend gui (06.10.03.pm.05.00)
-[description] The warbabel frontend GUI was written to simplify the process a little more for those that convert logs on win32 systems. It was written and compiled in VisualBasic, and DOES NOT REPLACE WARBABEL IN ANY WAY. The warbabel.exe [included with the gui] is still required for the actual conversion at the moment. This is just a front end. -[usage] click and go. It is standalone. Select your input logs, select the save location and filename, select the output format, click translate. -[example] press your left mouse button... now.-top of document-
No documentation provided at this moment.-top of document-
http://www.ChurchOfWiFi.com/warglue/
,7S7, X i0MMMMM8; WW, .;0MMMM8 .;8MMMM0aSSaa8WM@
aMMMMMMMMMMMMMM MMMMM ,MMMMMM MMMMMMa,XMMM MMMMMMZ WMMMMMMMMMM
MMMM iMMMMMMM MMM: BMMM MMM MMX MMS MMMMMMM .aM@X
MMMM MMMMMMM MMMM MM, .MMMMMM
.MMMM 7MMMMM MMMMM: MM MMMMMMMMMMMMMMMMM0
MMMMM MMMMMM MMMMMMM .MM MMMMMMMM 7MM
iMMMM2 MMMMMMMMS rMMMMMM MMMMMMMM MM MMMMMMX
@MMMM0 MMMMM MMMMMMM MMMMMMM 2MMMMMMMM2 MM MMMMMM
MMMMMM MMMMM M2XMMMMM MMMMMMM MM MMMMMMMM MMB MMMMMM
aMMMMMa SMMMM. MMMM, MMMMMMM MM iMMMMMMM MMM MMMMMM
MMMMMMB MMMMM MMMMM MMMMMMMM MMMMMMMMM MMMMMM
MMMMMMMM MM ZMMMM MMMMi XMMMMM@ MMMMMMW MMMMM,
SMMMMMMMMMMZaa0MMMMM MMMMM MMMM .MMMMM MMMMS MMMMM
WMMMMMMMMMMMMMMW MMMMMX 7MMMM MMM ZMM MMMMM
2MMMMMMMMX @MMMMMMM2 MM MM ; MMMM
MMM MMMS
iMMMM0
aMMMM02i:i .Mi.SMMMM8 .M
MMM :Z:BMMX S; iMMMa MMM MMMM
SMMWMM MMM , MM MMM8
MMMM MMMM M7 MMM8
MMMM MMMMM 0M :, r ;; MMMB ; :7 r ,0MWr
MMMMM MMMMMMZ MX ;MMMMMMMMMM MMMMMMMMMM MMMMMMMMMM MMMW MMMM MMMM MMMMMMMMM
MMMMM MaMMMMMM MM SMMM MMMr MMMMX MMM MMM MMMW MMM@ :MMM MMMM MMM MMMM
MMMMM MM 0MMMMM MM MMMW MMMr MMMM S MMM MMM7 MMMM 7MMM MMMM MMMMMMMMMM2
MMMMMM MMMMMM MMM@ MMM7 MMMM MMM MMMX MMMM 7MMM MMMM ;MMM2
MMMMZ MMMM MMMM MMM; MMMM MMMM MMMM MMMM 7MMM MMMM MMMM
WMM MM2 MMMMS MMMM MMMM MMMMMMMMMMM MMMM ZMMMMMMMMMM MMMMMMMMMM
M M, MMMMMMZMM ZMMMM XMMW MMMM MMMM MMZ MMMMM 0MMMM@
MMM
Mi .MMMW
MMMMMMMS