Extension:WikiHiero

WikiHiero is a PHP script to be able to render hieroglyphs from a text wrote according to the Hieroglyph coding manual syntax.

A latest version is accessible here: http://aoineko.free.fr.

WikiHiero (0.2.7) is running at http://test.wikipedia.org, fell free to make some test with. Aoineko

Syntax
Look at the Hieroglyph coding manual for details.

In brief: The hieroglyphs are named with unique code: This unique code come from an extension of Gardiner list of hieroglyph. The Hieroglyph coding manual also allows using the more common phonemes as well as unique code.
 * - separator
 * : subdivision
 * * juxtaposition
 * ! end of line
 * A letter [A-Z + Aa] that represent the hieroglyph category (human, god, bird, etc.)
 * A number that represent the rank into this category [1-...]

Licence

 * Sources are copyrighted G. Blanchard and released under GNU Public License.
 * Hieroglyphs pictures are copyrighted S. Rosmorduc, G. Watson and J. Hirst and released under GNU Free Documentation License.
 * Translation by Mats Halldin, Erik Zachte, Tomos, Samuel and ArnoLagrange

Version history

 * 0.2.0 : New parser
 * 0.2.1 : Fix link to hieroglyph tables
 * 0.2.2 :
 * Fix hieroglyph size when into a cartouche
 * Fix phonemes table to use 'Aa' category rather than 'J'
 * 0.2.3 : Add Swedish interface
 * 0.2.4 : Add Japanese and Dutch interface
 * 0.2.5 :
 * Fix Swedish interface
 * Create a function to handle language entries lack
 * Change 'height' option by a 'scale' (in percentage)
 * Add a 'line' option to split text lines
 * 0.2.6 :
 * Add source annotation.
 * Support of both '-' and ' ' as separator
 * 0.2.7 : (this version is running on http://test.wikipedi.org)
 * Add parsing process duration.
 * Add download section
 * 0.2.8 :
 * Add Chinese interface.
 * Minor fix
 * 0.2.9 :
 * Add Esperanto interface.
 * Fix cartouche size

Todo list

 * Add number converter
 * Add space as a separator (like '-')
 * Add bracket support
 * Fix cartouche rendering
 * Optimize parser (avoid buffer reallocation)
 * Comment the source
 * Add individual glyph scale
 * Create CSS only rendering version
 * Create image rendering (for far future)
 * Add support for striping (need CSS)
 * Add individual glyph rotation (for image rendering)
 * Add support for comment and annotation code

Translation
 array( "fr" => "Français", "en" => "English", "eo" => "Esperanto", "sv" => "Svenska", "nl" => "Nederlands", "ja" => "日本語", "zh" => "中文", ),   "Syntax"  => array( "en" => "Syntax", "eo" => "Sintakso", "fr" => "Syntaxe", "ja" => "文法", "zh" => "语法", "nl" => "Syntax", "sv" => "Syntax" ),                                "!"       => array( "en" => "end of line", "eo" => "linifino", "fr" => "fin de ligne", "ja" => "行の終わり", "zh" => "一行中止", "nl" => "einde van regel", "sv" => "radbrytning" ),                                "-"       => array( "en" => "separator", "eo" => "disigilo", "fr" => "separateur", "ja" => "セパレータ", "zh" => "分隔符", "nl" => "scheidingsteken", "sv" => "separator" ),                                ":"       => array( "en" => "subdivision", "eo" => "subdivido", "fr" => "subdivision", "ja" => "小区間", "zh" => "分割", "nl" => "onderverdeling", "sv" => "underavdelning" ),                                "*"       => array( "en" => "juxtaposition", "eo" => "apudmeto", "fr" => "juxtaposition", "ja" => "対置", "zh" => "并列", "nl" => "nevenschikking", "sv" => "juxaposition (stående förbindelse)" ),                                "Tables"  => array( "en" => "Hieroglyph tables", "eo" => "Hieroglifaj tabeloj", "fr" => "Tables des hiéroglyphes", "ja" => "ヒエログラフの表", "zh" => "象形文字表", "nl" => "Tabellen met hiërogliefen", "sv" => "Hieroglyftabeller" ),                                "Convert" => array( "en" => "Convert", "eo" => "Konverti", "fr" => "Convertir", "ja" => "変換", "zh" => "转换", "nl" => "Converteer", "sv" => "Konvertera" ),                                "Text"    => array( "en" => "Type your text here", "eo" => "Tajpu vian tekston tie &#265;i", "fr" => "Tapez votre texte ici", "ja" => "テクスト", "zh" => "在这里输入文本", "nl" => "Type hier een tekst", "sv" => "Skriv din text här" ),                                "TEXT"    => array( "en" => "Use text only", "eo" => "Uzu nur tekston", "fr" => "Utiliser seulement du texte", "ja" => "テクストのみ", "zh" => "只能使用文本格式", "nl" => "Gebruik alleen tekst", "sv" => "Använd enbart text" ),                                "HTML"    => array( "en" => "Use standard HTML only", "eo" => "Uzu nur standardan HTMLon", "fr" => "Utiliser seulement le HTML standard", "ja" => "標準的HTMLのみ", "zh" => "只能使用标准HTML", "nl" => "Gebruik alleen standaard HTML", "sv" => "Använd endast standard-HTML" ),                                "CSS"     => array( "en" => "Use HTML and Cascading Style Sheets", "eo" => "Uzu HTMLon kaj kaskadajn folistilojn (CSS)", "fr" => "Utiliser le HTML et les feuilles de style", "ja" => "HTMLとCSS", "zh" => "使用HTML和CCS", "nl" => "Gebruik HMTL and Cascading Style Sheets", "sv" => "Använd HTML och Cascading Style Shhets" ),                                "Image"   => array( "en" => "Create an image (PNG)", "eo" => "Kreu PNG-bildon", "fr" => "Créer une image (PNG)", "ja" => "画像を生成(PNG)", "zh" => "创建一幅图像(PNG)", "nl" => "Genereer een afbeelding (PNG)", "sv" => "Skapa en PNG-bild" ),                                "Mode"    => array( "en" => "Select the convert mode", "eo" => "Elektu la konvertmodon", "fr" => "Selectionnez le mode de conversion", "ja" => "変換のタイプを選んで下さい", "zh" => "请选择转换模式", "nl" => "Kies de wijze van omzetten", "sv" => "Välj konverteringsmetod" ),                                "Size"    => array( "en" => "Select the lines height", "eo" => "Elektu la linialtecon", "fr" => "Selectionnez la hauteur des lignes", "ja" => "行幅を指定して下さい", "zh" => "请选择行高", "nl" => "Selecteer de regelhoogte", "sv" => "Välj radhöjd" ),

/* ADD 2004/03/25 - START */

"Scale"   => array(      "en" => "Scale",                   "eo" => "Skalo",                   "fr" => "Échelle",      "ja" => "スケール", ),

"Line"   => array(      "en" => "Line",                   "eo" => "Linio",                   "fr" => "Ligne",      "ja" => "線", ),

/* ADD 2004/03/25 - END */

"Phoneme" => array(     "en" => "Phonemes",                                  "eo" => "Fonemoj",                                  "fr" => "Phonèmes",      "ja" => "音素",      "zh" => "音素",      "nl" => "Fonemen",      "sv" => "Fonem" ), "A"      => array(      "en" => "Man and his occupations",                   "eo" => "Viro kaj liaj okupoj",                   "fr" => "Hommes et leurs occupations",      "ja" => "男性と職業",      "zh" => "男人和他的职业",      "nl" => "De man en zijn bezigheden",      "sv" => "Mannen och hans sysslor" ), "B"      => array(      "en" => "Woman and her occupations",                 "eo" => "Virino kaj &#349;iaj okupoj",                   "fr" => "Femmes et leurs occupations",      "ja" => "女性と職業",      "zh" => "女人和她的职业",      "nl" => "De vrouw en haar bezigheden",      "sv" => "Kvinnan och hennes sysslor" ), "C"      => array(      "en" => "Anthropomorphic Deities",                   "eo" => "Homformaj diuloj",                   "fr" => "Divinités",      "ja" => "擬人化された神",      "zh" => "神",      "nl" => "Anthropomorfe Goden",                   "sv" => "Gudomligheter" ), "D"      => array(      "en" => "Parts of the Human Body",                   "eo" => "Homkorpaj partoj",                   "fr" => "Parties du corps humain",      "ja" => "人の身体の一部",      "zh" => "人体的部分",      "nl" => "Delen van het menselijk lichaam",      "sv" => "Kroppens delar" ), "E"      => array(      "en" => "Mammals",                                   "eo" => "Mamuloj",                                   "fr" => "Animaux mammifères",      "ja" => "哺乳類",      "zh" => "哺乳动物",      "nl" => "Zoogdieren",      "sv" => "Däggdjur" ), "F"      => array(      "en" => "Parts of Mammals",                          "eo" => "Mamulaj partoj",                                   "fr" => "Parties de mammifères",      "ja" => "哺乳類の一部",      "zh" => "哺乳动物的部分",      "nl" => "Delen van zoogdieren",      "sv" => "Däggdjurens kroppsdelar" ), "G"      => array(      "en" => "Birds",                                     "eo" => "Birdoj",                                     "fr" => "Oiseaux",      "ja" => "鳥類",      "zh" => "鸟",      "nl" => "Vogels",      "sv" => "Fåglar" ), "H"      => array(      "en" => "Parts of Birds",                            "eo" => "Birdaj partoj",                                     "fr" => "Parties d'oiseaux",      "ja" => "鳥の一部",      "zh" => "鸟的部分",      "nl" => "Delen van vogels",      "sv" => "Fåglarnas kroppsdelar" ), "I"      => array(      "en" => "Amphibious Animals, Reptiles, etc.",        "eo" => "Amfibiaj bestoj, Reptilioj, ktp.",        "fr" => "Amphibiens, reptiles, etc.",      "ja" => "両棲類、爬虫類、など",      "zh" => "两栖动物、爬行动物等等",      "nl" => "Ampfibieën, Reptielen, etc",      "sv" => "Insekter" ), "J"      => array(      "en" => "?",       "eo" => "?", ), "K"      => array(      "en" => "Fishes and Parts of Fishes",                "eo" => "Fi&#349;oj kaj Fi&#349;aj partoj",                "fr" => "Poissons et parties de poissons",      "ja" => "魚類、または魚の一部",      "zh" => "鱼类或鱼类的部分",      "nl" => "Vissen en delen daarvan",      "sv" => "Fiskar och fiskarnas kroppsdelar", ), "L"      => array(      "en" => "Invertebrata and Lesser Animals",           "eo" => "Invertebruloj kaj malgrandaj bestoj",           "fr" => "Invertébrés",      "ja" => "Invertebrata",      "zh" => "无脊椎动物",      "nl" => "Invertebraten en lagere dieren",      "sv" => "Ryggradslösa djur och mindre djur", ), "M"      => array(      "en" => "Trees and Plants",                          "eo" => "Arboj kaj Plantoj",                          "fr" => "Végétaux",      "ja" => "植物",      "zh" => "植物",      "nl" => "Bomen en Planten",      "sv" => "Träd och växter", ), "N"      => array(      "en" => "Sky, Earth, Water",                         "eo" => "&#264;ielo, Tero, Akvo",      "fr" => "Ciel, Terre, Eau",      "ja" => "空、大地、水",      "zh" => "天空、大地、水",      "nl" => "Hemel, Aarde, Water",      "sv" => "Himmel, jord, vatten", ), "O"      => array(      "en" => "Buildings and Parts of Buildings",          "eo" => "Konstrua&#309;oj kaj konstrua&#309;aj partoj",          "fr" => "Bâtiments et parties de bâtiments",      "ja" => "建物とその一部",      "zh" => "建筑和建筑的部分",      "nl" => "Gebouwen en delen daarvan",      "sv" => "Byggnader och byggnadsdelar", ), "P"      => array(      "en" => "Ships and Parts of Ships",                  "eo" => "&#348;ipoj kaj &#348;ipaj partoj",                  "fr" => "Bateaux et parties de bateaux",      "ja" => "船舶類とその一部",      "zh" => "船舶和船舶的部分",      "nl" => "Schepen en delen daarvan",      "sv" => "Fartyg och delar av fartyg", ), "Q"      => array(      "en" => "Domestic and Funerary Furniture",           "eo" => "Doma&#309;oj kaj Funebra&#309;oj",           "fr" => "Fournitures domestiques et funéraires",      "ja" => "家具と葬具",      "zh" => "陪葬的家具和仆人",      "nl" => "Meubels (ook voor begrafenissen)",      "sv" => "Möbler och begravningsföremål", ), "R"      => array(      "en" => "Temple Furniture and Sacret Emblems",       "eo" => "Templaj objektoj kaj Sanktegaj Emblemoj",       "fr" => "Fournitures et emblèmes sacrés",      "ja" => "寺院の祭具と聖なる紋章",      "zh" => "寺院祭具和祭祀徽章",      "nl" => "Tempelinrichting en heilige emblemen",      "sv" => "Tempelinredning och heliga emblem", ), "S"      => array(      "en" => "Crowns, Dress, Staves, etc.",               "eo" => "Kronoj, Vestoj, Iloj, ktp.",               "fr" => "Couronnes, Vêtements, Ustensiles",      "ja" => "王冠、ドレス、杖",      "zh" => "王冠、服饰、棍仗等等",      "nl" => "Kronen, Kledij, Hulpmiddelen als een staf e.d.",      "sv" => "Kronor, kläder, utensilier", ), "T"      => array(      "en" => "Warfare, Hunting, Butchery",                "eo" => "Milito, &#264;aso, Bu&#265;ado",      "fr" => "Armes, Chasse, Boucherie",      "ja" => "戦、狩、肉捌き",      "zh" => "战争、狩猎、屠场",      "nl" => "Oorlog, Jacht, Slagerij",      "sv" => "Krig, jakt, slakt", ), "U"      => array(      "en" => "Agriculture, Crafts and Professions",       "eo" => "Agrikulturo, Metioj kaj Profesioj",       "fr" => "Instruments agricoles et outils",      "ja" => "農耕具と職業",      "zh" => "农业、手工业",      "nl" => "Landbouw, Nijverheid, Werktuigen",      "sv" => "Jordbruksredskap", ), "V"      => array(      "en" => "Rope, Fibre, Baskets, Bags, etc.",          "eo" => "&#348;nuroj, Korboj, Sakoj",      "fr" => "Cordes, Corbeilles, Sacs",      "ja" => "ロープ、繊維、バスケット、バッグなど",      "zh" => "绳、纤维、篮子、袋子等等",      "nl" => "Touw, Manden, Zakken, e.d.",      "sv" => "Rep, korgar o.dyl.", ), "W"      => array(      "en" => "Vessels of Stone and Earthenware",          "eo" => "Vazoj el &#349;tono kaj kuirita tero",          "fr" => "Vases",      "ja" => "壺などの土器類",      "zh" => "石陶容器",      "nl" => "Vazen",      "sv" => "Skålar och kärl", ), "X"      => array(      "en" => "Loaves and Cakes",                          "eo" => "Panoj kaj Kukoj",      "fr" => "Pains",      "ja" => "パン",      "zh" => "面包和蛋糕",      "nl" => "Brood, Deegwaren",      "sv" => "Bröd", ), "Y"      => array(      "en" => "Writing, Games, Music",                     "eo" => "Skribado, Ludoj, Muziko",      "fr" => "Ecriture, Jeux, Musique",      "ja" => "文書、ゲーム、音楽",      "zh" => "写作、游戏、音乐",      "nl" => "Schrijven, Spel, Muziek",      "sv" => "Skrift, spel, musik", ), "Z"      => array(      "en" => "Strokes, Geometrical Figures, etc.",        "eo" => "Strekoj, Geometriaj Figuroj, ktp.",        "fr" => "Traits et formes géométriques",      "ja" => "線、幾何学図形など",      "zh" => "线、几何图形等等",      "nl" => "Lijnen, Geometrische figuren",      "sv" => "Linjer, geometriska figurer o.dyl.", ), "Aa"     => array(      "en" => "Unclassified",                              "eo" => "Neklasifikita",                              "fr" => "Signes non classés",      "ja" => "その他",      "zh" => "未分类",      "nl" => "Niet geclassificeerd",      "sv" => "Övrigt", ), "All"    => array(      "en" => "All hierogplyph",                           "eo" => "&#264;iuj hieroglifoj",                           "fr" => "Tous les hiérogplyphes",      "ja" => "全ヒエログリフ",      "zh" => "所有象形文字",      "nl" => "Alle hiërogliefen",      "sv" => "Alla hieroglyfer", ), );

?>

Test text
Note: Please don't use this text to other purpose that testing because I don't know the licence.

D:d-=i-=n -Sms-w-A1 -i-q:r:Y1 -w-DA-A-Y1 -! -ib*Z1:=V31A -HAt:a-A1 -m-a:V31A -pH:D54-=n:=n:=Z2 -! -Xn:n-nw-w-pr -Ssp:p-a -x:r-p*W:xt -! -H-A25-A24 -mn:n-i-t-P11-xt -HAt:t*t-W -r:a:t -! -Hr:Z1 -tA:Z1*N23 -r:a -H-V31A:n-nw:W-A2 -nTr -dwA-! -A30-A2 -z:A1*Z1 -nb -Hr:Z1 -H-p:t-D32:a -sn-n:nw-w-A1-=y:=f -! -iz-w:t-A1-Z2-=t:=n:=Z2 -ii-i-t:D54 -aD:d-t:Y1 -D35:n -! -n:h-w-wr:=n -mSa-A1:Z2-=n:=Z2 -pH:D54-=n:=n:=Z2 -! -pH-w-y -wA-wA-t:xAst -z:n-X5:D54-=n:=n:=Z2 -! -z:n-mwt-t:xAst -m-a:V31A -r:f -n:Z2 -ii-i-D54-=n:=Z2 -! -m -Htp:t-p:Y1 -tA:N23*Z1-=n:=Z2 -pH:D54-=n:=Z2 -sw-W -! -sDm-m -r:V31A -n:=A1 -HAt:a-A1 -nw:V31A-A1 -Sw-W:wr -! -HA-A-w-Y1:Z2 -i-a:mw -a:t*W -i-im-m-a -! -mw -Hr:Z1 -D50-Z2:=V31A -i-x:Y1 -w-S-b-A2-=V31A -! -w-Sd:d:t-A2-=V31A -md-d-w-A2:=V31A -n -! -sw-t:n-G7 -ib*Z1:=V31A -m-a:=V31A -w-S-! -b-A2-=V31A -D35:n -n -i-t-i-t-A2 -i-w -r:Z1 :n -z:A1*Z1 -! -n:N42-m-a:=f -sw-w -i-w -md-d-w-! -A2-=f -a:=f -TA-A-m-S28 -n:=f -Hr:Z1 -! -ir:r-=V31A -m -x:r-t:Y1:Z2 -ib*Z1:=V31A -s-wr-! -r:d-G37 -p:W -D:d -n:=V31A -s-D:d-=A1 -r:f -! -n:=V31A -mi-i-t*t:Y1 -i-r:y -xpr:r -m-a-=A1 -! -D:z-=A1 -..-Sm-m-D54:=V31A-=w-=A1 -r -b-i-! -id:Hw-xAst -n -sAq:sAq-G7 -h-A-! -D54:=V31A-=w-=A1 -r -M14-wr:r-S -m -d:p*t-P1 -! -n:t -mH:a -V1-mD:mD -m -Aw-W-=s -mH:a -mD:mD-mD:mD -m -s-x-! -w-iab-=s -s-qd-d-A30-A1 -V1-V20:V20 -i-m-=s -! -m -stp:Y1 -n -km-m-t:niwt -mA:ir-A-=s-=n:=Z2 -! -p*t:pt -mA:ir-A-=s-=n:=Z2 -tA:N23*Z1 -m-a:V31A-A-a -! -ib:Z1-=s-=n:=Z2 -r -mA:ir-A-w-F27:Z2 -z:r-! -E27-A2-=s-=n:=3 -D:a-TAw -D35 -ii-i-t:D54 -n:S-! -n:y-E20-A24 -D35 -xpr:r-t:=f -D:a-TAw -pr:r-D54 -! -i-w-=n:=3 -m -M14-wr:r-S -tp:Z1 -a:Z1 -! -sAH-Y1-=n:=3 -tA:N23*Z1 -f-A-t-A9-a -TAw-w -! -ir:=f -wHm-m-i-i-t-A2 -n:U19-nw-W-i-i-t-mw -! -i-m-=f -n:t -mH:a -Z1:Z1-Z1:Z1-Z1:Z1-Z1:Z1 -i-n -xt:t*Z1 -H-H-! -A25-A24 -n-=A1 -s -aHa-a:=n -d:p*t-P1 -! -m-t:Z6 -n:t-tyw-Z2 -i-m-=s -D35 -z:p-zp -! -wa:a-A1-Z1 -i-m -aHa-a:=n-=A1 -r:a-=V31A-=w-=A1 -! -r -iw:N23*Z1 -i-n -wA-A-w-mw -n -M14-! -wr:r-S -ir:=n-=A1 -h:r-w-ra -Z1-Z1-Z1 -wa:a-Z1-wr-=k\:=W-=A1 -! -ib:Z1-=A1 -m -sn-n:nw-w-A1-Z1-Z1-=A1 -z:Dr:r-A55-=V31A-! -=w-=A1 -m -Xn:n-nw*W:pr -n -V31A-A-p-! -Aa19-pr -n -xt:t*Z1 -q:n-i-D32:a-=n-=A1 -Sw-W-! -i-i-t:ra -aHa-a:=n -d-wn:n-D54-=n-=A1 -r:d-! -D56-D56-=A1 -r -r:x-Y1 -a:t-=A1 -m -r:Z1-=A1 -! -gm-m-=n-=A1 -d-A-b-M43-N33:Z2 -i-A-! -r:r-t:D5-N33:Z2 -i-m -i-A-q:t-Hn-Z3A -nb:t -Sps-s-t:Y1 -! -V31A-A-w-N33:Z2 -i-m -H-n:a -n:q-w-t-N33:Z2 -! -Ssp-p:t-N33:Z2 -mi-i-ir:t-=s -r-m-W-K5:Z2 -! -i-m -H-n:a -A-p:d-w-zA:Z2 -D35:n -n:t*t -! -D35:n -s-t -m -Xn:n-nw-w-pr:=f -aHa-a:=n -! -s-s-Aa18-A-A2-=n -w-A1 -r:a-=n-=A1 -r -tA:N23*Z1 -! -n -wr:r -Hr:Z1 -a:Z1-w-y-=A1 -! -Sd:d-t:a-=A1 -DA-A-Z9:xt -s-xpr-r:=n-=A1 -x:t-Q7 -ir:=n-=A1 -! -zb:wr -n :Z9*t-Q7 -n -nTr-Z1:Z2 -aHa-a:=n -F21-m-=n:=A1 -! -x:r-P8-E23-w-A2 -q:r-i-E21-A24 -i-b-! -E8-=V31A-=w-=A1 -wA-A-w-mw -p:W -! -n -M14-wr-r:N36 -xt:t*Z1:Z2 -Hr-Z1 -gm-m-gm-m-Z9 -! -tA:N23*Z1 -Hr-Z1 -mn:n-mn:n-D54 -V31A:f-S28-=n:=A1 -! -Hr-Z1-=A1 -gm-m-=n-=A1 -H-f-A-w-I15 -! -p-w -i-w-=f :m-ii-i-t:D54 -n:ns-sw-W -! -V22:a -V20*V20:V20 -x-b-z:w-t:Sny-=f -wr:r-=s -! -r :mH-a :Z1*Z1 -H-a:F51-Z2:=f -z:x:r-w-T11-A24 -! -m -nbw:N33:Z2 -i-K1:n-D13:y-=f:=y -m -x-s-b-d:N33:Z2 -! -mA:Aa11:a-H2:Y1 -a:r:q-V12:Y1 -sw-w -r -xnt-n:t -! -$r-i-w -wp:p-Z9:=n:=f -$b-r*Z1:=f -r:=A1 -i-W:=A1 -! -Hr-Z1 -X:t*Z1-=A1 -m-b-bA-A-H-D53:Y1-=f -! -D:d-=f :n-=A1 -n-m:a -ini-n :t*w -zp :Z1*Z1 -n:D-z:wr-A1 -! -n-m:a -ini-n :t*w -i-r -w-d:f-gb-D54-! -=V31A :m-D:d -n:=A1 -ini-n :t*w -r -iw:N23*Z1 -p:n -! -r:a-=A1 -r:x-Y1:=V31A -t-w -i-w-=V31A :m -z:z-Q7 -! -xpr-r-t -m -n:t*y :D35 -mA:ir-A-t :f -i-W -md:d-! -w-A2-=V31A -n:=A1 -D35:n -w-A1 -Hr-Z1 -F21-m-=A1 -! -s-t -i-w-=A1 -m -b-bA-A-H-D53-Y1:=V31A -! -x:m-D35:=n -w-A1 -aHa-a:=n -r:a-=f -w-A1 -m-r*Z1:=f -! -iTi:t-A24-=f -w-A1 -r -st-t*pr:=f -! -n:t -s-nDm-m-Xrd -wA-A-H-wAH-! -A24-=f -w-A1 -D35:n -d-mi-i-t:a-=A1 -w-DA-! -A-Y1:=V31A-=w-=A1 -D35:n -iTi:t*t-A24 -i-m-=A1 -! -$r-i-w -wp:p-Z9:=n:=f -$b-r*Z1:=f -r-=A1 -i-w-=A1 -! -Hr-Z1 -X:t*Z1-=A1 -m -b-bA-A-H-D53:Y1-=f -! -aHa-a:n -D:d-=n:=f -n:=A1 -n-m:a -ini-n :t*W -zp -Z1*Z1 -! -n:D:z-wr-A1 -n-m:a -ini-n :t*w -r -iw:N23*Z1 -p:n -! -n -M14-wr:r-N36 -n:t*y -Aa13:Z1-=f:=y -m -n:U19-nw-W-! -i-i-mw -aHa-a:=n -w-S-b-Z9-A2-=n:=A1 -! -n:=f -s-t -a:Z1-w-y-i-i-=A1 -x-xA-A-m-D41 -! -m -b-bA-A-H-D53:Y1-=f -D:d-=A1 -n:=f -! -nw:V31A-A1 -p-w -h-A-D54-=V31A-=w-=A1 -! -r -b-i-N41:F18-N25 -m -wp:p-w-t:D54 -! -sAq:sAq-G7 -m-d:p*t-P1 -n:t -! -mH:a -V1-mD:mD -m -Aw-W-=s -mH:a -mD:mD-mD:mD -m -s-x:w-! -iab:Y1-=s -s-qd-d-A30-A1 -V1-V20:V20 -i-m-=s -! -m -s-t:p-w-U21:Y1 -n :km-m-t:niwt -! -mA:ir-A-=s-=n:=Z2 -p:t-pt -mA:ir-A-=s-=n:=Z2 -tA:N23*Z1 -! -m-a:V31A-A-A24 -ib-Z1-=s-=n:=Z2 -r -mA:ir-A-! -w-F27-Z2 -$r-z:r-E27-A2-=s-=n:=Z2 -$b-D:a:TAw -! -D35 -ii-i-t:D54-=f-n:S-n:y-E21 -D35 -xpr-r*t:=f -! -wa:W:a-A1-Z1 -i-m -nb -m-a:V31A-A-A24 -ib*Z1:=f -! -n:xt:x*t-A24 -a:Z1-=f :r -sn-n:nw-w-A1*Z1*Z1:=f -D35:n -! -w-x-xA-wr:A1 -m -Hr:r -ib-=s-=n:=Z2 -D:a-TAw -! -pr-r:D54 -i-w-=n:=Z2 -m -M14-wr-r:N36 -! -tp-Z1 -a-Z1 -D61-D54-=n:=3 -tA:N23*Z1 -f-A-t-A9-a -! -TAw-w -ir:=f -wHm-m-i-i-t-A2 -n:U19-nw-w-i-i-t-mw -! -i-m-=f -n:t -mH:a -Z1:Z1-Z1:Z1-Z1:Z1-Z1:Z1 -i-n -xt:t*Z1 -H-H-A19-a -! -n:=A1 -s -aHa-a:=n -d:p*t-P1 -m-t:Z6:=t -! -n:t-tyw-Z2 -i-m-=s -D35 :z-p:zp -wa:W:a-A1-Z1 -i-m -! -Hr-Z1 -x-x-x-=A1 -m-a:V31A -w-=A1 -r -gs*Z1:=V31A -! -$r-aHa-a:n -ini-n:=V31A-=w-=A1 -$b-r -iw:N23*Z1 -p:n -i-n -! -wA-A-w-mw-Z1 :n -M14-wr:r-N36 -! -D:d-=i-=n-=f :n-=A1 -m -G54-A2 -m -zp -Z1*Z1 -! -n:D-z:wr-A1 -m -A-t-w-A24 -Hr*Z1:=V31A -! -p-H-F22-=n:=V31A -w-A1 -m-a:V31A -nTr*Z1 -r:a-=n:=f -! -anx-n:x-=V31A -ini-n:=f -t-w -r -iw:N23*Z1 -p:n -n :D28*Z1 -! -D35:n -n:t:t -D35:n -s-t -m -Xn:n-nw-w-pr:=f -! -i-w-=f -mH:Y1 -Xr:r -nfr-f:r-t-Y1:Z2 -nb:t -! -m-a:V31A -t-w -r -ir:t -N11:N14-d:ra*Z1 -Hr-Z1 -! -N11:N14-d:ra*Z1 -r :km-m-t:Y1-=V31A -N11:N14-d:ra *Z1*Z1*Z1*Z1 -! -m -Xn:n-nw-w-pr :n -iw:N23*Z1 -p:n -i-w -! -d:p*t-P1 -r -ii-i-t:D54 -m -Xn:n-nw-w-pr -! -s-qd-d-w-A30-A1:Z2 -i-m-=s -r:x-Y1 :n-=V31A -! -++TXTEGsqdw im=s rx=w n=k +s -Sm-m-D54:=V31A -H-n:a-=s-=n:=Z2 -r -Xn:n-nw-w-pr -! -m-t:Z6-=V31A -m -niwt:t*Z1-=V31A -! -$r-r:S-D20-A2-w-y -$b-s-D:d-A2 -d:p*t-ns-A2-=n:=f -z:n-X5:D54 -x:t-Y1:Z2 -U23-m:r-wr -! -s-D:d-A2-=A1 -r:f -n:=V31A -mi-i-t:t-Y1 -i-r:y -xpr-r-w-m-iw-N23*Z1 -p:n -! -wn:n-=A1 -i-m-=f -H-n:a -sn-n:nw-w-A1*B1:Z2-=A1 -X:r-d-w-A17-A1*B1:Z2 -! -m -q-A-b-F46-=s-=n:=Z2 -km-m-Y1:n-=n:=Z2 -H-f-A-W-I15 -V20*V20*V20*V20:.*V20*V20*V20*.-Z1*Z1*Z1*Z1:.*Z1*Z1*Z1 *.-m -! -ms-s-w-A1*B1:Z2-=A1 -H-n:a -sn-n:nw-w-A1*B1:Z2-=A1 -D35:n -s-x-M12-A2-=A1 -n:=V31A -! -zA-t:B1 -V31A:t*t-wr:B1 -ini-n:t-=n:=A1 -m -z:M8-A-F5-Y1 -$r-aHa-a:n -s-b-A-N14-ra -$b-! -h-A-W-D54 -pr:r-D54:=n -n:A -m -x:t-Q7 -m-a:=f -xpr-r:=n -r-=s -D35:n -w-A1 -H-n:a -! -A-m-Q7-=n:=y -D35:n -w-A1 -m -Hr:r -ib-=s-=n:=Z2 -aHa-a:=n-=A1 -m-t:Z6-=V31A-=W-=A1 -n-=s-=n:=Z2 -gm-m-=n:=A1 -! -s-t -m -XA-A-i-i-t-Aa2:Z2 -wa:W-a:t*Z1 -i-r -q:n-A24-=n:=V31A -T12-A24 -ib-Z1-=V31A -! -mH:Y1-=V31A -q:n-i-D32-=V31A -m-A17-A1*B1:Z2-=V31A -s-n-D20-A2-=V31A -! -N41:t-B1-V31A -mA:ir-A-=V31A -pr-Z1-=V31A -nfr-f:r -s-t -r -x:t-Y1:Z2 -nb:t -! -p-H-pH-D54:=V31A -Xn:n-nw-w-pr -wn:n-=V31A -i-m-=f -! -m -q-A-b-F46:D54 -n -sn-n:nw-w-A1*B1:Z2-=V31A -wn:n-=V31A -r:f -! -d-mA-A-U32-Y1-=V31A-=W-=A1 -Hr-Z1 -X:t*Z1-=A1 -d-mi-i-D41:=n-=A1 -! -z:zA-A-t-w-N23:Z2 -m -b-bA-A-H-D53:Y1-=f -$r-D:d-=A1 -r:f -n:=V31A -$b-! -s-D:d-A2-=A1 -G30-Y1:Z2-=V31A :n -sAq-sAq-G7 -a:=A1 -z:S-A-Y1:=f -! -m -aA:a-A-Y1:=V31A -a:=A1 -ini-n:=t -n:=V31A -i-b-E8-i-Hnqt -H-V31A:n-nw:W-N33:Z2 -! -D54-w-d:n-b-N33:Z2 -X:z-A-i-i-t-N33:Z2 -sn-n:t-r-tr-N33:Z2 -n -Aa13*Z1:Z2 -pr:Z2 -! -s-Htp:t-p-w-Y1 -nTr-Z1 -nb -i-m-=f -s-D:d-=A1 -r:f -xpr-r:t-Y1:Z2 -! -Hr-Z1-=A1 -m -mA:ir-A-t:Z2:=n-=A1 -m -G30-Y1:=f -nTr-dwA-A-A30-=t-=w -n:=V31A -! -m -niwt:t*Z1 -x*t:f -Hr-Z1 -q:n-b-t-O38-A1:Z2 -tA:N23*Z1 -r -M36:r-=f -$r-z:f-t:T30-A24-=A1 -$b-! -n:=V31A -D52-E1-Z1:Z2 -m -zb-wr :n -Z9-t-Q7 -w-S:n-H1:a-n:=A1 -n:=V31A -! -A-p-d-w-zA:Z2 -a:=A1 -ini-n:=t -n:=V31A -H-a-w-P1:Z2 -A-t:p-w-A2-A24 -! -Xr:r -Sps-s-s-Y1:Z2 -nb :n -km-m-t-niwt:t*Z1 -mi-i -ir:r-t -n -nTr-Z1 -mr:r-r-A2 -! -r:T-A1*B1:Z2 -m -tA:N23*Z1 -wA-A-N31 -D35 -r:x-Y1 -sw-W -r-T-A1-B1-Z2 -! -$r-aHa-a:=n -s-b-t:F18-A2-=n:=f -i-m-=A1 -m -M22-M22 -D:d-=n:=A1 -$b-m-n:f-wr -m -ib-Z1-f -! -D:d-=f :n-=A1 -D35 -wr-r -n:=V31A -a:n-G4-W23:Z2 -xpr-r:t-nb-nTr-sn-n:t:r-M6-N33:Z2-! -nw:V31A-A1 -i-s -HqA-q-A-G7 -p-wn:n-t:N25 -a:n-G4-W23:Z2 -n:=A1 -i-m -sw-W -! -H-V31A:n-nw-W-N33:Z2 -p:f -D:d-=n:=V31A -ini-n:t:=f -b-w -p-W -wr-r :n -iw:N23*Z1 -p:n -! -xpr-r -i-s -E9-w-d:D54 -V31A -t-w -r -st-t:pr -t:n -D35 :z-p:zp -! -mA:ir-A-=V31A -iw:N23*Z1 -p:n -xpr-r -m -n:U19-nw:W-i-i-mw -$r-aHa-a:=n -d:p*t-P1 -t:f -$b-! -ii-i-t:D54 -mi-i -z:r*t-E27-A2-=n:=f -xnt-n:t -aHa-a:=n-=A1 -Sm-m-D54-=V31A-=W-=A1 -! -r:a-n :w-=A1 -Hr-Z1 -xt:t*Z1 -q-A-A28 -S32-A2-n :=A1 -n:t-G4-A1:Z2 -m-Xn-n:nw-W-pr-=s -! -aHa-a:=n -Sm-m-D54-=V31A-=w-=A1 -r -s-mi-i-t-A2 -s-t -gm-m-=n:=A1 -sw-W -r:x-Y1 -s-t -! -aHa-a:=n -D:d-=n:=f -n:=A1 -s-n:b-=t -zp :Z1*Z1 -n:D-z:wr-A1 -r-pr-Z1 -=V31A -mA:ir-A-=V31A -! -X:r-d-Xrd-A1*B1:Z2-=V31A -i-Aa13-m:a -r:n-=A1 -nfr-f:r -m -niwt:t*Z1-=V31A -m-a:V31A-Xr:r*t-Y1:Z2-=A1 -! -p-W -i-m-=V31A -! -aHa-a:=n -r:a-=n :w-A1 -Hr-Z1 -X:t*Z1-=A1 -a:Z1-w-y-=A1 -xA-A-m-A24 -m -b-bA-A-H-D53-Y1:=f -! -aHa-a:=n -r:a-=n:=f -n:=A1 -zb-b-t-Y1:Z2 -m -a:n-G4-W23:Z2 -H-V31A-n:nw*W-N33:Z2 -D54-w-d:n-b-N33:Z2 -! -X:z-Aa17-A-i-i-t-N33:Z2-U33 -Sps-s-N33:Z2 -SA-A-a:z-O47 -F31-s-d-m-t-N33:Z2 -s-d-w-M41:3 -! -nw-Z1 -m:a-m:a-F27 -U7:r-r-i-i-t-iw:Z2 -aA:a-A-t-Y1 -n:t -nTr-sn-n:t:r-M6-N33:Z2 -n:D-H-i-i-t-F18:Z2 -! -n:t -Ab-b-w-T19 -T:z-m-W-E14:Z2 -g-w-f-E33-Z3A -V31A-i-i-w-E32-Z3A -A50-s-s-Y1:Z2 -nb -nfr-f:r -! -$r-aHa-a:=n -A-t-p-A9-a:=n-=A1 -s-t -$b-r -d-p-t-P1 -t:n -xpr-r:n-r:a-=t-=w-=A1 -Hr-Z1 -X:t*Z1-=A1 -! -r -nTr-dwA-A-A30 -n:=f -aHa-a:=n -D:d-=n:=f -n:=A1 -m-a:V31A -t:W -r -spr:r-D54 -r-Xn-n:nw-W-pr -! -n :Abd-d:ra -Z1-Z1 -mH:Y1-=V31A -q:n-i-D32-=V31A -m -X:r-d-w-Xrd-A1*B1:Z2-=V31A -r-n:p-i-i-rnp-=V31A -! -m -Xn-n:nw-W-pr -q:r-s-t-Q6:a-=V31A -aHa-a:=n -h-A-D54-=V31A-=w-=A1 -r -mr:r-i-i-t-N23-Z1 -! -m -h-A-w-Y1:Z2 -d:p*t-P1 -t:n -aHa-a:=n-=A1 -Hr-Z1 -i-A-S-A2 -n -mSa-A1:Z2 -! -n:t*y -m -d:p*t-P1 -t:n -r:a-=n:=A1 -H-V31A:n-nw:W-A2 -Hr-Z1 -mr:r-i-i-t-N23-Z1 -n :nb-G7 -n -iw:N23*Z1 -p:n -! -n:t-G4-A1:Z2 -i-m-=s -r -mi-i-t:t-Y1 -i-r:y -$r-n:a-t-P1 -p:W -ir:=n-=n:=Z2 -$b-m -x-d-P1 -! -r -Xn-n:nw-w-pr :n -sAq-sAq-G7 -spr:r-D54-=n:=n-=Z2 :r-Xn-n:nw-W-pr -! -Hr-Z1 -Abd:dwA-d:ra -Z1-Z1 -mi-i -D:d-t:=n:=f -nb:t -aHa-a:=n -aq-q-D54-=V31A-=w-=A1 -Hr-Z1 -sAq-sAq-G7 -! -m:a-zb-D54-=n:=A1 -n:=f -ini-nw:Z2 -p:n -ini-n:=n-=A1 -m -Xn-n:nw-W-pr -n -iw:N23*Z1 -p:n -! -aHa-a:n -nTr-dwA-A-A30-=n:=f -n:=A1 -x*t:f -Hr-Z1 -q:n-b-t-O38-A1:Z2 -tA:N23*Z1 -r -Dr:r-=f -! -aHa-a:=n -r:a-=V31A-=w-A1 -r -Sms-W-A1 -! -s-Aa18-A-H-sAH-Y1:=V31A-=w-=A1 -m -! -tp-A1*B1:Z2-=f -mA:ir-A -w-A1 -r -! -Aa18-#b-Z1 -#e-s-Aa18-A-H-sAH:Y1-=A1 -tA:N23*Z1 -r -Aa18-Z1 -! -mA:ir-A-=A1 -d:p-t:F20-A2-=n:=A1 -sDm-m -r:=V31A -! -#b-n -r:Z1-#e-=A1 -m-a:V31A -nfr-f:r -sDm-m -n -r:T-A1*B1:Z2 -! -aHa-a:=n -D:d-=n:=f -n:=A1 -m -ir -i-q:r-Y1-A1 -! -x:n-T34-m-s-A21-A1 -i-n -m -r:a:t -mw -! -#b-n -A-#e-p:d-zA -HD-D:ra -tA:N23*Z1 -n:z:f-t-! -T31:a-=f -dwA-A-ra -! -D54-w-=f :p*W -HAt:t*Z1-=f -! -r-pH-=f:=y -mi-i -gm-m-i-i-t -m-zS-Y1 -! -#b-m -zS-Y1 -#e-zS-A1 -i-q:r:Y1 -n -Dba-Dba-Dba-=f -! -i-#b-mn:n-#e-i-i -zA -i-mn:n-aA:a-A-Y1-A1 -anx-DA-s -!