Wikipidiya bolwiki https://bol.wikipedia.org/wiki/Peji_In_Siri MediaWiki 1.47.0-wmf.16 first-letter Media Inmusamman Mossa Ruta Rutta mossa Wikipidiya Wikipidiya mossa Fayil Fayil mossa MediaWiki MediaWiki mossa Tempilet Tempilet mossa Taimako Taimako mossa Panni Panni mossa TimedText TimedText talk Module Module talk Event Event talk Peji In Siri 0 1 10513 10512 2026-08-25T13:35:29Z RAPTOR7762 18 10513 wikitext text/x-wiki __NOTOC__ __NOEDITSECTION__ <!--{{Protection padlock|small=yes}}--> {{Top icon|image=Wikimedia Community Logo.svg|link=m:Bole Wikimedians User Group}} {{Top icon|image=2023 Facebook icon.svg|link=https://www.facebook.com/61590521903033/}} <div style="text-align:center;"> {{Clickable button|Special:Purge/Peji In Siri|Purge this page|class=mw-ui-progressive}} </div> <templatestyles src="Main page/Styles.css" /> <div style="position:relative; text-align:center; padding:3em 1em; background:#fff; overflow:hidden;"> <div style="position:absolute; top:-50px; left:0; right:0; text-align:center; opacity:0.1; z-index:0;"> [[File:Wikipedia-logo-v2.svg|650px|center|class=notpageimage|link=]] </div> <div style="position:relative; z-index:1;"> <div style="font-variant:small-caps; font-family:'Linux Libertine','Georgia',serif;"><div style="font-size:180%;">U'se ga nako</div> <div style="font-size:270%; line-height:1;">[[Wikipidiya|<span style="display: inline-block; letter-spacing: -0.35em; margin-right: 0.2em; font-family: serif;">V<span style="margin-left: -0.1em;">V</span></span>ikipidiya]] in bòo pìkkà</div> </div> <div style="font-size:120%; line-height:1.2;"> Wikipidiya ensakulopidiya in lelo in [[Harshe Bole]] la lemalo agita ina ramayi.</div> <div style="font-size:120%; line-height:1.2;"> Honsene Andi makaloli '''[[Special:AllPages|{{NUMBEROFARTICLES}}]]''' ga harshe Bole</div> </div> <div style="text-align:center;"> [[File:Wikimedia Community Logo.svg|30px|link=m:Bole Wikimedians User Group]]&nbsp;&nbsp;[[File:2023 Facebook icon.svg|30px|link=https://www.facebook.com/61590521903033/]] </div> </div> <div style="margin:10px 0px 10px 0px; -moz-box-shadow:0 1px 1px rgba(0, 0, 0, 0.1); -webkit-box-shadow:0 1px 1px rgba(0, 0, 0, 0.1); box-shadow:0 1px 1px rgba(0, 0, 0, 0.1); background-color:#FFFFFF;"> {| style="border-spacing: 1px; border-collapse: separate; width:100%; text-align:center; font-size:0.85em; padding:2px 3px 2px 3px;" class="hp-portalen" | style="background-color:#F0F0F9; border-top:5px solid; border-color:#333399; padding:3px 0.15em; width:6.6%;" | [[:Category:Atiimala|<span style="color:#000000;">Atiimala</span>]] | style="background-color:#F0F9F9; border-top:5px solid; border-color:#339999; padding:3px 0.15em; width:6.6%;" | [[:Category:Annoba|<span style="color:#000000;">Annoba</span>]] | style="background-color:#F0F4F9; border-top:5px solid; border-color:#336699; padding:3px 0.15em; width:6.6%;" | [[:Category:Fasaha|<span style="color:#000000;">Fasaha</span>]] | style="background-color:#F9F0F0; border-top:5px solid; border-color:#993333; padding:3px 0.15em; width:6.6%;" | [[:Category:Ilimi|<span style="color:#000000;">Ilimi</span>]] | style="background-color:#F0F0F9; border-top:5px solid; border-color:#333399; padding:3px 0.15em; width:6.6%;" | [[:Category:Lamba|<span style="color:#000000;">Lamba</span>]] | style="background-color:#F4F9F0; border-top:5px solid; border-color:#669933; padding:3px 0.15em; width:6.6%;" | [[:Category:Miyya|<span style="color:#000000;">Miyya</span>]] | style="background-color:#F9F9F0; border-top:5px solid; border-color:#999933; padding:3px 0.15em; width:6.6%;" | [[:Category:Makami|<span style="color:#000000;">Makami</span>]] | style="background-color:#F9F0F9; border-top:5px solid; border-color:#993399; padding:3px 0.15em; width:6.6%;" | [[:Category:Malunwa|<span style="color:#000000;">Malunwa</span>]] | style="background-color:#F0F9F0; border-top:5px solid; border-color:#339933; padding:3px 0.15em; width:6.6%;" | [[:Category:Olii|<span style="color:#000000;">Olii</span>]] | style="background-color:#F9F0F4; border-top:5px solid; border-color:#993366; padding:3px 0.15em; width:6.6%;" | [[:Category:Olii pewe|<span style="color:#000000;">Olii pewe</span>]] | style="background-color:#F0F0F9; border-top:5px solid; border-color:#333399; padding:3px 0.15em; width:6.6%;" | [[:Category:Tarihi|<span style="color:#000000;">Tarihi</span>]] | style="background-color:#F0F9F9; border-top:5px solid; border-color:#339999; padding:3px 0.15em; width:6.6%;" | [[:Category:Goma|<span style="color:#000000;">Goma</span>]] | style="background-color:#F9F0F9; border-top:5px solid; border-color:#993399; padding:3px 0.15em; width:6.6%;" | [[:Category:Kimiyya|<span style="color:#000000;">Kimiyya</span>]] | style="background-color:#F4F9F0; border-top:5px solid; border-color:#669933; padding:3px 0.15em; width:6.6%;" | [[:Category:Zane|<span style="color:#000000;">Zane</span>]] |} </div> <templatestyles src="Main page/Styles.css" /> <div style="flex:1; min-width:300px; overflow:hidden; border-radius:4px; margin:8px 4px 4px 4px; box-shadow:0 0 8px rgba(0,0,0,0.15);"> <div class="image-carousel"> <ul> <li> <div style="background:#FFF; padding:5px; font-size:150%; font-family:'Arial',sans-serif; position: relative; z-index: 2;"> <div style="padding:5px 10px; color:#333333;">[[File:Star-alt-icon.png|20px|link=]]&nbsp;&nbsp;Featured Article</div> </div> <div class="carousel-image"> [[File:The City Gate of Abuja.jpg|center|class=carousel-image-wrapper|link=Nijeriya|Nijeriya]] </div> <div class="carousel-slide-content-wrapper"> <div class="carousel-slide-content"> <div class="carousel-slide-description">Nijeriya ko Nijeriya da (turanci: Nigeria): A Gwamanatance Tarayyar Najeriya, woli la ga take ga Africa ko zoni ita ji tetteke woli niger koga Arewa. Ga Chadi koga zoni koga aushi jam aji dar ga teku Atlantika.</div> <div class="carousel-slide-title">[[Nijeriya]]</div> </div> </div> </li> <li> <div style="background:#FFF; padding:5px; font-size:150%; font-family:'Arial',sans-serif; position: relative; z-index: 2;"> <div style="padding:5px 10px; color:#333333;">[[File:Paomedia small-n-flat sign-question.svg|20px|link=]]&nbsp;&nbsp; Kamontuwo?</div> </div> <div class="carousel-image"> [[File:Gooya mountain.jpg|center|class=carousel-image-wrapper|link=Gooya mountain]] </div> <div class="carousel-slide-content-wrapper"> <div class="carousel-slide-content"> <div class="carousel-slide-description">Gooya kam zoi wuro la tudu ga arewa [[Nijeriya]], inda Bòo pikka ye kam la yare miyya aji magana da yawa ga yankin da ke kewaye. </div> <div class="carousel-slide-title">[[Potiskum]]</div> </div> </div> </li> <li> <div style="background:#FFF; padding:5px; font-size:150%; font-family:'Arial',sans-serif; position: relative; z-index: 2;"> <div style="padding:5px 10px; color:#333333;">[[File:Paomedia small-n-flat file-picture.svg|20px|link=]]&nbsp;&nbsp; Featured Picture</div> </div> <div class="carousel-image"> [[File:Daniski Festival 04.jpg|center|class=carousel-image-wrapper|link=File:Daniski Festival 04.jpg]] </div> <div class="carousel-slide-content-wrapper"> <div class="carousel-slide-content"> <div class="carousel-slide-description">Daniski Hills Annual Festival kam zoi tarayya la al’ada, ba Bòo pikka ga Fika Emirate ga Yobe State, [[Nijeriya]]. </div> <div class="carousel-slide-title">[[:File:Daniski Festival 04.jpg|Daniski Festival Picture]]</div> </div> </div> </li> </ul> </div> </div> <div style="display:flex; flex-wrap:wrap;"> {{Box |header=[[File:Paomedia small-n-flat sign-info.svg|20px|link=]]&nbsp;&nbsp;Elle Wikipidiya? |content=<span style="float: left; margin: 6px 12px 6px 0px; display: inline-block;">[[File:Wikipedia-logo-v2-bol.svg|100px]]</span>Wikipidiya shafi ji in Yana gizonla ona gudumawa inko rubutu mukalai kala aji gidan ga goggo gozi ilmi do ramu-ramu ga messesu. Gabo turanci ga unda shap Maddi la ramu ramu do gede ga ilmi ga shafuka Wikipedia ga sun Wikipedia, wikipidiya aji tattira ga harsuna GA duniya ga godon shafuka lemalo aji kirkira do ramu mukalai gabo kyauta inko taimako beyi wena ilmi bo kyauta, emeyye aji Wikipedia ga zarrar a shap ga duniya beyi wena ilmi koga asali beyi ilmi fetengo. }} {{Box |header=[[File:Paomedia small-n-flat pencil.svg|20px|link=]]&nbsp;&nbsp;Kirkiru Foyo Article |content=Kaji kume Harshe Bole? Kagita ina taimako beyi Bunƙasa kunsu eme Mona (ensakulopidiya) ko goggo kirkire foyo makaloli do fadada la aji Andi ga fatan aji doffa ka'idoji Al'umma lokaci ona ga gundumawa.<br><small><i></i></small> <div style="margin-top:1em;"> <inputbox> type=create width=30 default= buttonlabel=Kirkiru Foyo Makala </inputbox> </div> }} </div> {{Box |header=English speakers |content=If you speak English, but you don't know anything about the Bole Language, you are also welcome to edit and assist in technical support, such as maintaining Templates or Modules. Your role is vital to the smooth running of the Bole Wikipedia! }} {{Box |header=[[File:Wikimedia-logo.svg|20px|link=]]&nbsp;&nbsp;Project Modi |content={{SisterProjects}} }} {{Bole Wikimedians User Group}} <div class="mobile-only"> {{Bole Wikimedians User Group/mobile}} </div> sit1oslhsfj0xgvac7ehggrhyxlo6ki 10572 10513 2026-08-25T23:31:54Z RAPTOR7762 18 10572 wikitext text/x-wiki __NOTOC__ __NOEDITSECTION__ <!--{{Protection padlock|small=yes}}--> {{Top icon|image=Wikimedia Community Logo.svg|link=m:Bole Wikimedians User Group}} {{Top icon|image=2023 Facebook icon.svg|link=https://www.facebook.com/61590521903033/}} <div style="text-align:center;"> {{Clickable button|Special:Purge/Peji In Siri|Purge this page|class=mw-ui-progressive}} </div> <templatestyles src="Main page/Styles.css" /> <div style="position:relative; text-align:center; padding:3em 1em; background:#fff; overflow:hidden;"> <div style="position:absolute; top:-50px; left:0; right:0; text-align:center; opacity:0.1; z-index:0;"> [[File:Wikipedia-logo-v2.svg|650px|center|class=notpageimage|link=]] </div> <div style="position:relative; z-index:1;"> <div style="font-variant:small-caps; font-family:'Linux Libertine','Georgia',serif;"><div style="font-size:180%;">U'se ga nako</div> <div style="font-size:270%; line-height:1;">[[Wikipidiya|<span style="display: inline-block; letter-spacing: -0.35em; margin-right: 0.2em; font-family: serif;">V<span style="margin-left: -0.1em;">V</span></span>ikipidiya]] in bòo pìkkà</div> </div> <div style="font-size:120%; line-height:1.2;"> Wikipidiya ensakulopidiya in lelo in [[Harshe Bole]] la lemalo agita ina ramayi.</div> <div style="font-size:120%; line-height:1.2;"> Honsene Andi makaloli '''[[Special:AllPages|{{NUMBEROFARTICLES}}]]''' ga harshe Bole</div> </div> </div> <div style="text-align:center;"> [[File:Wikimedia Community Logo.svg|30px|link=m:Bole Wikimedians User Group]]&nbsp;&nbsp;[[File:2023 Facebook icon.svg|30px|link=https://www.facebook.com/61590521903033/]] </div> <div style="margin:10px 0px 10px 0px; -moz-box-shadow:0 1px 1px rgba(0, 0, 0, 0.1); -webkit-box-shadow:0 1px 1px rgba(0, 0, 0, 0.1); box-shadow:0 1px 1px rgba(0, 0, 0, 0.1); background-color:#FFFFFF;"> {| style="border-spacing: 1px; border-collapse: separate; width:100%; text-align:center; font-size:0.85em; padding:2px 3px 2px 3px;" class="hp-portalen" | style="background-color:#F0F0F9; border-top:5px solid; border-color:#333399; padding:3px 0.15em; width:6.6%;" | [[:Category:Atiimala|<span style="color:#000000;">Atiimala</span>]] | style="background-color:#F0F9F9; border-top:5px solid; border-color:#339999; padding:3px 0.15em; width:6.6%;" | [[:Category:Annoba|<span style="color:#000000;">Annoba</span>]] | style="background-color:#F0F4F9; border-top:5px solid; border-color:#336699; padding:3px 0.15em; width:6.6%;" | [[:Category:Fasaha|<span style="color:#000000;">Fasaha</span>]] | style="background-color:#F9F0F0; border-top:5px solid; border-color:#993333; padding:3px 0.15em; width:6.6%;" | [[:Category:Ilimi|<span style="color:#000000;">Ilimi</span>]] | style="background-color:#F0F0F9; border-top:5px solid; border-color:#333399; padding:3px 0.15em; width:6.6%;" | [[:Category:Lamba|<span style="color:#000000;">Lamba</span>]] | style="background-color:#F4F9F0; border-top:5px solid; border-color:#669933; padding:3px 0.15em; width:6.6%;" | [[:Category:Miyya|<span style="color:#000000;">Miyya</span>]] | style="background-color:#F9F9F0; border-top:5px solid; border-color:#999933; padding:3px 0.15em; width:6.6%;" | [[:Category:Makami|<span style="color:#000000;">Makami</span>]] | style="background-color:#F9F0F9; border-top:5px solid; border-color:#993399; padding:3px 0.15em; width:6.6%;" | [[:Category:Malunwa|<span style="color:#000000;">Malunwa</span>]] | style="background-color:#F0F9F0; border-top:5px solid; border-color:#339933; padding:3px 0.15em; width:6.6%;" | [[:Category:Olii|<span style="color:#000000;">Olii</span>]] | style="background-color:#F9F0F4; border-top:5px solid; border-color:#993366; padding:3px 0.15em; width:6.6%;" | [[:Category:Olii pewe|<span style="color:#000000;">Olii pewe</span>]] | style="background-color:#F0F0F9; border-top:5px solid; border-color:#333399; padding:3px 0.15em; width:6.6%;" | [[:Category:Tarihi|<span style="color:#000000;">Tarihi</span>]] | style="background-color:#F0F9F9; border-top:5px solid; border-color:#339999; padding:3px 0.15em; width:6.6%;" | [[:Category:Goma|<span style="color:#000000;">Goma</span>]] | style="background-color:#F9F0F9; border-top:5px solid; border-color:#993399; padding:3px 0.15em; width:6.6%;" | [[:Category:Kimiyya|<span style="color:#000000;">Kimiyya</span>]] | style="background-color:#F4F9F0; border-top:5px solid; border-color:#669933; padding:3px 0.15em; width:6.6%;" | [[:Category:Zane|<span style="color:#000000;">Zane</span>]] |} </div> <templatestyles src="Main page/Styles.css" /> <div style="flex:1; min-width:300px; overflow:hidden; border-radius:4px; margin:8px 4px 4px 4px; box-shadow:0 0 8px rgba(0,0,0,0.15);"> <div class="image-carousel"> <ul> <li> <div style="background:#FFF; padding:5px; font-size:150%; font-family:'Arial',sans-serif; position: relative; z-index: 2;"> <div style="padding:5px 10px; color:#333333;">[[File:Star-alt-icon.png|20px|link=]]&nbsp;&nbsp;Featured Article</div> </div> <div class="carousel-image"> [[File:The City Gate of Abuja.jpg|center|class=carousel-image-wrapper|link=Nijeriya|Nijeriya]] </div> <div class="carousel-slide-content-wrapper"> <div class="carousel-slide-content"> <div class="carousel-slide-description">Nijeriya ko Nijeriya da (turanci: Nigeria): A Gwamanatance Tarayyar Najeriya, woli la ga take ga Africa ko zoni ita ji tetteke woli niger koga Arewa. Ga Chadi koga zoni koga aushi jam aji dar ga teku Atlantika.</div> <div class="carousel-slide-title">[[Nijeriya]]</div> </div> </div> </li> <li> <div style="background:#FFF; padding:5px; font-size:150%; font-family:'Arial',sans-serif; position: relative; z-index: 2;"> <div style="padding:5px 10px; color:#333333;">[[File:Paomedia small-n-flat sign-question.svg|20px|link=]]&nbsp;&nbsp; Kamontuwo?</div> </div> <div class="carousel-image"> [[File:Gooya mountain.jpg|center|class=carousel-image-wrapper|link=Gooya mountain]] </div> <div class="carousel-slide-content-wrapper"> <div class="carousel-slide-content"> <div class="carousel-slide-description">Gooya kam zoi wuro la tudu ga arewa [[Nijeriya]], inda Bòo pikka ye kam la yare miyya aji magana da yawa ga yankin da ke kewaye. </div> <div class="carousel-slide-title">[[Potiskum]]</div> </div> </div> </li> <li> <div style="background:#FFF; padding:5px; font-size:150%; font-family:'Arial',sans-serif; position: relative; z-index: 2;"> <div style="padding:5px 10px; color:#333333;">[[File:Paomedia small-n-flat file-picture.svg|20px|link=]]&nbsp;&nbsp; Featured Picture</div> </div> <div class="carousel-image"> [[File:Daniski Festival 04.jpg|center|class=carousel-image-wrapper|link=File:Daniski Festival 04.jpg]] </div> <div class="carousel-slide-content-wrapper"> <div class="carousel-slide-content"> <div class="carousel-slide-description">Daniski Hills Annual Festival kam zoi tarayya la al’ada, ba Bòo pikka ga Fika Emirate ga Yobe State, [[Nijeriya]]. </div> <div class="carousel-slide-title">[[:File:Daniski Festival 04.jpg|Daniski Festival Picture]]</div> </div> </div> </li> </ul> </div> </div> <div style="display:flex; flex-wrap:wrap;"> {{Box |header=[[File:Paomedia small-n-flat sign-info.svg|20px|link=]]&nbsp;&nbsp;Elle Wikipidiya? |content=<span style="float: left; margin: 6px 12px 6px 0px; display: inline-block;">[[File:Wikipedia-logo-v2-bol.svg|100px]]</span>Wikipidiya shafi ji in Yana gizonla ona gudumawa inko rubutu mukalai kala aji gidan ga goggo gozi ilmi do ramu-ramu ga messesu. Gabo turanci ga unda shap Maddi la ramu ramu do gede ga ilmi ga shafuka Wikipedia ga sun Wikipedia, wikipidiya aji tattira ga harsuna GA duniya ga godon shafuka lemalo aji kirkira do ramu mukalai gabo kyauta inko taimako beyi wena ilmi bo kyauta, emeyye aji Wikipedia ga zarrar a shap ga duniya beyi wena ilmi koga asali beyi ilmi fetengo. }} {{Box |header=[[File:Paomedia small-n-flat pencil.svg|20px|link=]]&nbsp;&nbsp;Kirkiru Foyo Article |content=Kaji kume Harshe Bole? Kagita ina taimako beyi Bunƙasa kunsu eme Mona (ensakulopidiya) ko goggo kirkire foyo makaloli do fadada la aji Andi ga fatan aji doffa ka'idoji Al'umma lokaci ona ga gundumawa.<br><small><i></i></small> <div style="margin-top:1em;"> <inputbox> type=create width=30 default= buttonlabel=Kirkiru Foyo Makala </inputbox> </div> }} </div> {{Box |header=English speakers |content=If you speak English, but you don't know anything about the Bole Language, you are also welcome to edit and assist in technical support, such as maintaining Templates or Modules. Your role is vital to the smooth running of the Bole Wikipedia! }} {{Box |header=[[File:Wikimedia-logo.svg|20px|link=]]&nbsp;&nbsp;Project Modi |content={{SisterProjects}} }} {{Bole Wikimedians User Group}} <div class="mobile-only"> {{Bole Wikimedians User Group/mobile}} </div> odpk0d3tnas1jlgglk2fy3juvazfrq0 Tempilet:Clear 10 49 10689 2020-01-20T16:01:00Z commons>Tulsi 0 Reverted: per talk page 10689 wikitext text/x-wiki <div style="clear:{{{1|both}}};"></div><noinclude> {{documentation}} </noinclude> 6mk3e4afot6hzu6tzbljxxk83e14xv6 10690 9234 2026-08-25T23:38:28Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Clear]] 8288 wikitext text/x-wiki <div style="clear:{{{1|both}}};" class={{{class|}}}></div><noinclude> {{Documentation}} </noinclude> 17aszado3hry2vhcvwg5rsftmytfm6b Tempilet:Clickable button 10 51 10749 2017-12-25T12:09:09Z commons>Zhuyifei1999 0 - extra linebreak 10749 wikitext text/x-wiki <onlyinclude>{{#if:{{{3|{{{external|}}}}}} | <span class="plainlinks" {{#if:{{{id|}}}|id="{{{id}}}"}}>[{{{1|{{{target|//parameter_target_is_empty.de}}}}}} <span class="submit ui-button ui-widget ui-state-default ui-corner-all {{Clickable button/iconclass |{{{4|{{{iconPrimary|}}}}}} |{{{5|{{{iconSecondary|}}}}}} |{{{2|{{{text|<noinclude>x</noinclude>}}}}}} }} {{{class|}}}" role="button" aria-disabled="false"><!-- // -->{{#if:{{{4|{{{iconPrimary|}}}}}} |<span class="ui-button-icon-primary ui-icon {{{4|{{{iconPrimary}}}}}}">&nbsp;</span> }}<span class="ui-button-text">{{{2|{{{text|Parameter '''text''' is empty}}}}}}</span>{{#if:{{{5|{{{iconSecondary|}}}}}} |<span class="ui-button-icon-secondary ui-icon {{{5|{{{iconSecondary|}}}}}}">&nbsp;</span> }}</span>]</span><!-- --> | [[{{{1|{{{target|Parameter target is empty!}}}}}}|<span class="submit ui-button ui-widget ui-state-default ui-corner-all {{Clickable button/iconclass |{{{4|{{{iconPrimary|}}}}}} |{{{5|{{{iconSecondary|}}}}}} |{{{2|{{{text|<noinclude>x</noinclude>}}}}}} }} {{{class|}}}" role="button" aria-disabled="false" {{#if:{{{id|}}}|id="{{{id}}}"}}><!-- // -->{{#if:{{{4|{{{iconPrimary|}}}}}} |<span class="ui-button-icon-primary ui-icon {{{4|{{{iconPrimary}}}}}}">&nbsp;</span> }}<span class="ui-button-text">{{{2|{{{text|Parameter '''text''' is empty}}}}}}</span>{{#if:{{{5|{{{iconSecondary|}}}}}} |<span class="ui-button-icon-secondary ui-icon {{{5|{{{iconSecondary|}}}}}}">&nbsp;</span> }}</span>]] }}<!-- --></onlyinclude> {{documentation}} <!-- Add categories and interwikis to Template:Clickable button/doc subpage, not here! --> 3ivm5ze15yjn0qltf3rr8x93yd042c0 10750 8290 2026-08-25T23:38:31Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Clickable_button]] 8290 wikitext text/x-wiki <includeonly><span class="plainlinks">[{{#if:{{{url|}}} |{{{url}}} |[{{{1|}}}{{!}} }}<span class="mw-ui-button {{{class|}}}" role="button" aria-disabled="false" style="{{#ifeq:{{FULLPAGENAME:{{{1}}}}}|{{FULLPAGENAME}}|cursor: default; {{#switch:{{{class|}}} | mw-ui-progressive = background-color: #2962CB; | mw-ui-constructive = background-color: #008B6D; | mw-ui-destructive = background-color: #A6170F; | #default = background-color: #CCC; color:#666; }}}} {{{style|}}}">{{#if:{{{url|}}} | {{{label|{{{1|{{{url}}}}}}}}}</span> | {{{label|{{{2|{{{1}}}}}}}}}</span>] }}]</span></includeonly><noinclude> {{Documentation}} <templatedata> { "params": { "1": { "label": "target", "description": "Link target page. Becomes the title when used with url", "type": "wiki-page-name", "required": true }, "2": { "aliases": [ "label" ], "label": "label", "description": "Button label", "default": "Target page" }, "url": { "type": "url" }, "class": {}, "style": {} }, "description": "This template generates a clickable button that is styled using the mediawiki.ui.button module.\n", "format": "inline" } </templatedata> </noinclude> sepjmodion0iklzfaaa2i4pyl7h7rgs Tempilet:Documentation 10 81 10819 8878 2022-11-27T20:49:57Z commons>Tacsipacsi 0 Undo revision 710061475 by [[Special:Contributions/Sarang|Sarang]] ([[User talk:Sarang|talk]]): undocumented, unused parameter. This is not a sandbox, this is the LIVE template. 10819 wikitext text/x-wiki <!-- {{#invoke:Autotranslate|autotranslate}} is used to avoid "Warning: This page calls Template:Autotranslate which causes a template loop (an infinite recursive call). "--> <onlyinclude>{{#invoke:Autotranslate|autotranslate | base = Template:Documentation/i18n |lang = {{{lang|{{int:Lang}} }}} |1 = {{#if:{{{1|}}} |{{{1}}} |{{#ifexist:{{SUBJECTPAGENAME}}/doc |{{SUBJECTPAGENAME}}/doc |{{#ifexist:{{#titleparts:{{SUBJECTPAGENAME}}|-1}}/doc |{{#titleparts:{{SUBJECTPAGENAME}}|-1}}/doc |{{SUBJECTPAGENAME}}/doc }} }} }} |2 = {{{heading|{{{2|}}} }}} |content = {{{content|}}} }}</onlyinclude> eci5tevagu64g1pdamaseb2nj1i28lz 10820 9141 2026-08-25T23:38:33Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Documentation]] 295 wikitext text/x-wiki {{#invoke:Documentation|main|_content={{ {{#invoke:Documentation|contentTitle}}}}}}<noinclude> <!-- Add categories to the /doc subpage --> </noinclude> 0ewc0zrrhhwemyqxzzlg1kd31r4j5zn Tempilet:Fmbox 10 93 11009 2025-01-09T04:15:30Z en>Alison 0 Undid revision [[Special:Diff/1268309819|1268309819]] by [[Special:Contributions/Alison|Alison]] ([[User talk:Alison|talk]]) - oops! Wrong wiki :o 11009 wikitext text/x-wiki {{#invoke:Message box|fmbox|plainlinks={{{plainlinks|yes}}}}}<noinclude> {{documentation}} <!-- Add categories and interwikis to the /doc subpage, not here! --> </noinclude> oieddw57hf0pjq1rxypu544i15g9gwn 11010 9138 2026-08-26T11:32:48Z RAPTOR7762 18 1 revision imported from [[:en:Template:Fmbox]] 343 wikitext text/x-wiki {{#invoke:Message box|fmbox}}<noinclude> {{Documentation}} <!-- Add categories to the /doc subpage; interwikis go to Wikidata, thank you! --> </noinclude> qndjs6isv01yuo18vex1kjat7p94i9s Tempilet:Lua 10 127 10909 2024-09-04T11:53:50Z commons>Matrix 0 templatestyles no longer necessary 10909 wikitext text/x-wiki <includeonly>{{#invoke:Lua banner|main}}</includeonly><noinclude> {{Lua|Module:Lua banner}} {{documentation}} <!-- Categories go on the /doc subpage and interwikis go on Wikidata. --> </noinclude> pnmjp3f3fl321yf2jpg5syebi412n7b 10910 8961 2026-08-25T23:38:37Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Lua]] 8298 wikitext text/x-wiki {{Ombox |image=[[Fayil:Lua-Logo.svg|30px|alt=|link=]] |text=<small>This {{#switch:{{NAMESPACE}}|Template = template|Module = module}} uses [[Wikipidiya:Lua|Lua]]:<br> <ul> {{#if:{{{1|}}}|<li style="padding:0px; margin-top:2px; margin-bottom:2px; margin-left:0px;">[[{{{1}}}]]{{#ifexist:{{{1}}}/sandbox|&nbsp;([[{{{1}}}/sandbox|sandbox]])}}</li>|<span style="color:#BF3C2C"><big><b>Error: No module specified</b></big></span>}} {{#if:{{{2|}}}|<li style="padding:0px; margin-top:2px; margin-bottom:2px; margin-left:0px;">[[{{{2}}}]]{{#ifexist:{{{2}}}/sandbox|&nbsp;([[{{{2}}}/sandbox|sandbox]])}}</li>|}} {{#if:{{{3|}}}|<li style="padding:0px; margin-top:2px; margin-bottom:2px; margin-left:0px;">[[{{{3}}}]]{{#ifexist:{{{3}}}/sandbox|&nbsp;([[{{{3}}}/sandbox|sandbox]])}}</li>|}} {{#if:{{{4|}}}|<li style="padding:0px; margin-top:2px; margin-bottom:2px; margin-left:0px;">[[{{{4}}}]]{{#ifexist:{{{4}}}/sandbox|&nbsp;([[{{{4}}}/sandbox|sandbox]])}}</li>|}} {{#if:{{{5|}}}|<li style="padding:0px; margin-top:2px; margin-bottom:2px; margin-left:0px;">[[{{{5}}}]]{{#ifexist:{{{5}}}/sandbox|&nbsp;([[{{{5}}}/sandbox|sandbox]])}}</li>|}} {{#if:{{{6|}}}|<li styles="padding:0px; margin-top:2px; margin-bottom:2px; margin-left:0px;">[[{{{6}}}]]{{#ifexist:{{{7}}}/sandbox|&nbsp;([[{{{7}}}/sandbox|sandbox]])}}</li>|}} {{#if:{{{7|}}}|<li styles="padding:0px; margin-top:2px; margin-bottom:2px; margin-left:0px;">[[{{{7}}}]]{{#ifexist:{{{7}}}/sandbox|&nbsp;([[{{{7}}}/sandbox|sandbox]])}}</li>|}} {{#if:{{{8|}}}|<li styles="padding:0px; margin-top:2px; margin-bottom:2px; margin-left:0px;">[[{{{8}}}]]</li>|}} {{#if:{{{9|}}}|<li styles="padding:0px; margin-top:2px; margin-bottom:2px; margin-left:0px;">[[{{{9}}}]]{{#ifexist:{{{9}}}/sandbox|&nbsp;([[{{{9}}}/sandbox|sandbox]])}}</li>|}} {{#if:{{{10|}}}|<li styles="padding:0px; margin-top:2px; margin-bottom:2px; margin-left:0px;">[[{{{10}}}]]{{#ifexist:{{{10}}}/sandbox|&nbsp;([[{{{10}}}/sandbox|sandbox]])}}</li>|}} {{#if:{{{11|}}}|<li styles="padding:0px; margin-top:2px; margin-bottom:2px; margin-left:0px;">[[{{{11}}}]]{{#ifexist:{{{11}}}/sandbox|&nbsp;([[{{{11}}}/sandbox|sandbox]])}}</li>|}} {{#if:{{{12|}}}|<li style="padding:0px; margin-top:2px; margin-bottom:2px; margin-left:0px;">[[{{{12}}}]]{{#ifexist:{{{12}}}/sandbox|&nbsp;([[{{{12}}}/sandbox|sandbox]])}}</li>|}} {{#if:{{{13|}}}|<li style="padding:0px; margin-top:2px; margin-bottom:2px; margin-left:0px;">[[{{{13}}}]]{{#ifexist:{{{13}}}/sandbox|&nbsp;([[{{{13}}}/sandbox|sandbox]])}}</li>|}} {{#if:{{{14|}}}|<li style="padding:0px; margin-top:2px; margin-bottom:2px; margin-left:0px;">[[{{{14}}}]]{{#ifexist:{{{14}}}/sandbox|&nbsp;([[{{{14}}}/sandbox|sandbox]])}}</li>|}} {{#if:{{{15|}}}|<li style="padding:0px; margin-top:2px; margin-bottom:2px; margin-left:0px;">[[{{{15}}}]]{{#ifexist:{{{15}}}/sandbox|&nbsp;([[{{{15}}}/sandbox|sandbox]])}}</li>|}} </ul></small>}}<noinclude> <!-- Categories go on the /doc subpage and interwikis go on Wikidata. --> </noinclude> kbqxkv5f73ptk3chydzadu53r4vy1vr Tempilet:Main page/Styles.css 10 130 11025 10501 2026-08-26T11:49:32Z RAPTOR7762 18 RAPTOR7762 changed the content model of the page [[Tempilet:Main page/Styles.css]] from "Sanitized CSS" to "CSS" 11025 css text/css /* {{pp-protected|small=yes}} Derived from https://ay.wikipedia.org/wiki/Plantilla:Portada/styles.css (2025-06-06) */ .image-carousel { overflow: hidden; width: 100%; height: 210px; min-width: 280px; } .image-carousel ul { width: 100%; margin: 0; padding: 0; display: table; table-layout: fixed; height: 100%; } .image-carousel ul li { display: table-cell; vertical-align: top; position: relative; height: 100%; min-height: 210px; width: 33.33333%; transition: all 1000ms ease; } .carousel-image { width: 100%; height: 100%; display: block; position: relative; overflow: hidden; } .carousel-image-wrapper { position: absolute; display: block; width: 100%; height: 100%; z-index: 1; } .carousel-image-wrapper img { width: 100%; height: 100%; min-height: 170px; object-fit: cover; position: absolute; top: 0; left: 0; } .carousel-slide-content-wrapper { overflow: hidden; width: 100%; height: calc(100% - 40px); position: absolute; top: 40px; } .carousel-slide-content { display: flex; flex-direction: column; justify-content: flex-end; height: 100%; width: 100%; position: relative; padding: 15px 20px; box-sizing: border-box; color: #fff; z-index: 3; } .carousel-slide-content .carousel-slide-title, .carousel-slide-content .carousel-slide-description { opacity: 0; width: 100%; position: relative; } .carousel-slide-title { font-size: 135%; font-weight: bold; text-align: right; } .carousel-slide-description { text-align: left; } @media (min-width: 800px) { .image-carousel ul:hover li { width: 10%; } .image-carousel ul:hover li:hover { width: 60%; } .image-carousel ul:hover li:hover .carousel-slide-content { background: rgba(0, 0, 0, 0.7); } .image-carousel ul:hover li:hover .carousel-slide-title, .image-carousel ul:hover li:hover .carousel-slide-description { opacity: 1; } } .carousel-slide-title a { font-weight: bold; } .carousel-slide-title a, .carousel-slide-description a { color: white; } .carousel-slide-title a:link, .carousel-slide-title a:visited, .carousel-slide-title a:hover, .carousel-slide-title a:active, .carousel-slide-description a:link, .carousel-slide-description a:visited, .carousel-slide-description a:hover, .carousel-slide-description a:active { color: white; } @media (max-width: 800px) { .image-carousel { height: auto; min-height: unset; } .image-carousel ul { display: block; height: auto; } .image-carousel ul li { display: block; width: 100%; height: auto; min-height: unset; transition: none; } .carousel-image { height: auto; } .carousel-image-wrapper { position: relative; height: auto; } .carousel-image-wrapper img { position: relative; width: 100%; height: auto; min-height: unset; object-fit: cover; } .carousel-slide-content-wrapper { position: relative; height: auto; top: auto; } .carousel-slide-content { position: relative; background: rgba(0, 0, 0, 0.6); padding: 10px; color: white; } /* Override opacity on mobile */ .carousel-slide-content-wrapper .carousel-slide-title, .carousel-slide-content-wrapper .carousel-slide-description { opacity: 1; } /* Disable hover effect for mobile */ .image-carousel ul:hover li { width: 100%; } .image-carousel ul:hover li:hover { width: 100%; } .image-carousel ul:hover li:hover .carousel-slide-content { background: rgba(0, 0, 0, 0.6); } } .mobile-only { display: none; } /* Display on mobile views (Minerva Neue skin / MobileFrontend) */ @media screen and (max-width: 640px) { .mobile-only { display: block; } } j2tnulyblaxgv6ppx19dne9p96kzcy7 11026 11025 2026-08-26T11:53:31Z RAPTOR7762 18 11026 css text/css /* {{pp-protected|small=yes}} */ @font-face { font-family: 'Linux Libertine'; /* Use font/otf and completely omit any charset declarations */ src: url('data:font/otf;base64,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AJQAAACSAJoAmwCZAPECeAKOAG8CigKLAowAeAKPAo0CeQAAAAMAAAAAAAD/igAoAAAAAAAAAAAAAAAAAAAAAAAAAAABAAQEAAEBAQ5MaW5MaWJlcnRpbmVPAAECAAEAQRwKjAAcCo0BHAqOAhwKjwP4FQQpDAOzDAT+zvuKHBgb+hMFHQAAWU4PHQAAAAAQHQAAbScRHQAAAEgdAAVdgBIJCQIAAQAIAA8AGwApADAANwBDAEoAUQBXAF0AZABrAHEAdwCCAI0AlwChAKcArQCzALkAvwDFAMwA0wDZAN8A6QDzAPoBAQEHAQ0BGAEjASkBLwE5AUMBTwFbAWYBcQF1AXkBfwGFAYwBkwGZAZ8BpgGtAbcBuQG7AcYB0QHdAekB9QH7AgECDQIZAh8CJQIpAi0CMwI5AkUCUQJXAl0CaAJrAm4CdQJ8AoICiAKVAqICqAKuAroCxgLMAtIC2ALeAukC9AL8AwQDDAMUAxoDIAMkAygDLgM0AzsDQgNIA04DUwNYA2UDcgN5A4ADiwOWA6EDrAOyA7gDwgPMA9ED2APfA+YD7QP0A/sEAgQJBBAEFwQeBCUELAQzBDoEQQRIBE8EVgRdBGQEawRyBHkEgASHBI4ElQScBKMEqgSvBLQEuwTCBMkE0ATXBN4E5QTsBPME+gUBBQgFDwUUBRkFIAUnBS4FNQU8BUMFSgVRBVgFXwVmBW0FdAV7BYIFiQWQBZcFngWlBawFswW6BcEFyAXPBdYF3QXkBesF8gX5BgAGBwYOBhUGHAYjBioGMQY4Bj8GRgZNBlQGWwZiBmkGcAZ3Bn4GhQaMBpIGmAafBqYGrQa0BrsGwgbJBtAG1wbeBuUG7AbzBvoHAQcIBw8HFgcgByoHMQc4B0MHTgdVB1wHYwdqB3EHeAd/B4YHjQeUB5sHogepB7AHtwe+B8UHzAfTB9oH4QfoB+8H9ggCCA4IGggmCC0INAg7CEIISQhQCFcIXghlCGwIcwh6CIEIiAiPCJYInQikCKsIsgi5CMAIxwjOCNUI3AjjCOsI8gj5CQAJBwkOCRUJHAkjCSoJMQk4CT8JRglNCVQJWwliCWkJcAl3CX4JhQmMCZMJmgmhCagJrwm2CcAJxwnOCdMJ2gnhCegJ7wn2Cf0KBAoLChIKGQogCicKLgo1CjwKQwpKClEKWApfCmoKcQp4Cn8KhgqPCp0KpAqrCrIKuQrACscKzgrVCtwK4wrqCvEK+Ar/CwYLDQsUCxsLIgs1CzwLQwtKC1ELWAtfC2YLbQt0C3sLgguJC5ALlwueC6ULrAuzC7oLwQvIC88L1gvdC+QL6wv1DAMMDQwXDCcMOwxSDFwMZgxtDHQMewyEDI0MlAybDKIMqQywDLcMvgzFDMwM0wzaDOEM6AzvDPYM/Q0EDQsNEg0ZDSANJw0uDTUNPA1DDVYNYA1qDXQNkA2XDZ4NpQ2sDbMNug3BDcgNzw3WDd0N5A3rDfIN+Q4ADgcODg4VDhwOIw4qDjEOOA4/DkYOTQ5WDl8ObQ52DoAOhw6QDpcOng6rDrIOuQ7ADscOzg7VDtwO4w7qDvEO+A7/DwYPDQ8UDxsPIg8pDzAPNw8+D0UPTA9TD1oPZg9tD3QPew+CD4kPkA+XD54PpQ+sD7MPug/BD8gPzw/WD90P5A/rD/IP+RAAEAcQDhAVEBwQIxAqEDEQOBA/EEYQTRBUEFsQYhBpEHAQdxB+EIUQjBCTEJoQoRCoEK8QthC9EMQQyxDSENkQ4BDnEO4Q9RD8EQMRChERERgRHxEmES0RNBE7EUIRSRFQEVcRXhFlEWwRcxF6EYERiBGPEZYRnRGkEakRthHAEckR1RHdEeYR8hH+EggSGRIeEiISJxIsEjMSNxI6Ej8SQxJIEk4SUBJSElQSWxJdEmASZRJoEm8SchJ1EngSfRKJEpgSohKuErYSvxLTEtgS3BLhEuYS7RLxEvQS+RL9EwITCBMKEwwTExMVExgTHhMjEyYTLRMwEzMTNhM7E0cTVhNiE24TeBN/E4UTjROUE5sTnxOlE6wTsxO6E8ETyBPPE9YT3RPkE+sT8hP5FAAUBxQOFBUUHBQjFCoUMRQ4FD8URhRNFFQUXRRmFG8UeBSBFIoUkxScFKUUrhS3FMAUxxTQFNkU4hTrFPQU/RUGFQ8VGBUhFSoVMxU8FUUVThVXFWAVaRVyFXsVhBWNFZYVnxWoFbEVuhXDFcwV1RXeFecV8BX5FgIWCxYUFh0WJhYvFjgWQRZKFlMWXBZlFm4WdxaAFokWkhabFqQWrRa2Fr8WyBbRFtoW4xbsFvUW/hcHFxAXGRcgFykXMhc7F0QXTRdWF18XaBdxF3oXgxeMF5MXnBelF6wXsxe8F8UXzBfTF9oX4RfoF+8X9hf9GAQYCxgSGBkYIBgnGDAYORhCGEsYUhhZGGAYZxhuGHUYfBiDGIoYkRiYGKEYqhixGLgYvxjGGM0Y1BjbGOIY6RjwGPcY/hkFGQwZExkaGSEZKBkvGTYZPRlEGUsZUhlZGWAZZxluGXUZfBmDGYoZkRmYGZ8ZphmtGbQZuxnCGckZ0BnXGd4Z5RnsGfMZ+hoBGggaDxoWGh0aJBorGjIaORpAGkcaThpVGlwaYxpqGnEaeBqBGogajxqWGp0apBqrGrIauRrAGscazhrVGtwa4xrqGvEa+Br/GwYbDRsUGxsbIhspGzAbNxs+G0UbTBtTG1obYRtqG3MbfBuFG44blxugG6kbshu7G8IbyxvUG90b5hvvG/gcARwKHBMcGhwjHCwcNRw+HEccUBxZHGIcaxx0HH0chhyPHJgcoRyqHLMcvBzFHM4c1xzgHOkc8hz7HQQdDR0WHR8dKB0vHTYdPR1EHUsdUh1ZHWAdZx1uHXUdfB2DHYodkR2YHZ8dph2tHbQdux3CHckd0B3XHd4d5R3sHfMd+h4BHggeDx4WHh0eJB4rHjIeOR5AHkceTh5VHlweYx5qHnEeeB5/HoYejR6UHpseoh6pHrAetx6+HsUezB7THtoe4R7oHu8e9h79HwQfCx8SHxkfIB8nHy4fNR88H0MfSh9RH1gfXx9mH20fdB97H4IfiR+QH5cfnh+lH6wfsx+6H8EfyB/PH9Yf3R/kH+sf8h/5IAAgByAOIBUgHCAjICogMSA4ID8gRiBNIFQgWyBiIGkgcCB3IH4ghSCMIJMgmiChIKggryC2IL0gwyDJIM8g1SDeIOcg7iD1IPwhAyEKIREhGCEfISYhLSE0ITshQiFJIVAhVyFeIWUhbCFzIXohgSGIIY8hmSGgIachriG1IbwhwyHKIdEh2CHfIeYh7SH0IfsiAiIJIhAiFyIeIiUiLCIzIjoiQSJIIk8iViJdImQiayJyInkigCKHIo4ilSKcIqMiqiKxIrgivyLGIs0i1CLbIuIi6SLwIvci/iMFIwwjEyMaIyEjKCMvIzYjPSNEI0sjUiNZI2AjZyNuI3UjfCODI4ojkSOYI58jpiOtI7QjuyPCI8kj0CPXI94j5CPqI/Ej+CP/JAYkDSQUJBskIiQpJDAkNyQ+JEUkTCRTJFokYSRoJG8kdiR9JIQkiySSJJkkoCSnJK4ktSS8JMMkyiTR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QEdAUEBbQGRAb0B2QH5AjkCXQKRArUC2QL9AzkDdQOpA9kD9QQdBEUEbQSVBL0E5QUNBTUFXQWFBa0F1QX9BiUGTQZ1BpEGtQbRBu0HAQcVBykHPQdZB3UHkQelB8EH3Qf5CBUIKQhFCGEIdQiRCK0IyQjlCQEJIQk9CVkJfQmdCb0J2Qn9CiEKQQqBCr0K+Qs9C30LvQv5DD0MgQzBDN0M+Q0VDTENWQ2BDakN0Q35DiEOSQ5xDpkOwQ7pDxEPOQ9hD4kPsQ/ZEAEQKRBREHkQoRDFEOkRIRFFEWkRqRHtEj0SbRKREsETBRM5E1ETeROpE90UFRRRFIEUtRTpFSUVZRWpFekWLRZVFnEWfRaJFpUWqRa9FtkW5RcBFxUa3RshG2XVuaTAwQTB1bmkwMEFEdHdvLnN1cGVyaW9ydGhyZWUuc3VwZXJpb3J1bmkwMEI1cGlsY3Jvd29uZS5zdXBlcmlvckFtYWNyb25hbWFjcm9uQWJyZXZlYWJyZXZlQW9nb25la2FvZ29uZWtDYWN1dGVjYWN1dGVDY2lyY3VtZmxleGNjaXJjdW1mbGV4Q2RvdGFjY2VudGNkb3RhY2NlbnRDY2Fyb25jY2Fyb25EY2Fyb25kY2Fyb25EY3JvYXRkY3JvYXRFbWFjcm9uZW1hY3JvbkVicmV2ZWVicmV2ZUVkb3RhY2NlbnRlZG90YWNjZW50RW9nb25la2VvZ29uZWtFY2Fyb25lY2Fyb25HY2lyY3VtZmxleGdjaXJjdW1mbGV4R2JyZXZlZ2JyZXZlR2RvdGFjY2VudGdkb3RhY2NlbnRHY29tbWFhY2NlbnRnY29tbWFhY2NlbnRIY2lyY3VtZmxleGhjaXJjdW1mbGV4SGJhcmhiYXJJdGlsZGVpdGlsZGVJbWFjcm9uaW1hY3JvbklicmV2ZWlicmV2ZUlvZ29uZWtpb2dvbmVrSWRvdGFjY2VudElKaWpKY2lyY3VtZmxleGpjaXJjdW1mbGV4S2NvbW1hYWNjZW50a2NvbW1hYWNjZW50a2dyZWVubGFuZGljTGFjdXRlbGFjdXRlTGNvbW1hYWNjZW50bGNvbW1hYWNjZW50TGNhcm9ubGNhcm9uTGRvdGxkb3ROYWN1dGVuYWN1dGVOY29tbWFhY2NlbnRuY29tbWFhY2NlbnROY2Fyb25uY2Fyb25uYXBvc3Ryb3BoZUVuZ2VuZ09tYWNyb25vbWFjcm9uT2JyZXZlb2JyZXZlT2h1bmdhcnVtbGF1dG9odW5nYXJ1bWxhdXRSYWN1dGVyYWN1dGVSY29tbWFhY2NlbnRyY29tbWFhY2NlbnRSY2Fyb25yY2Fyb25TYWN1dGVzYWN1dGVTY2lyY3VtZmxleHNjaXJjdW1mbGV4U2NlZGlsbGFzY2VkaWxsYVRjZWRpbGxhdGNlZGlsbGFUY2Fyb250Y2Fyb25UYmFydGJhclV0aWxkZXV0aWxkZVVtYWNyb251bWFjcm9uVWJyZXZldWJyZXZlVXJpbmd1cmluZ1VodW5nYXJ1bWxhdXR1aHVuZ2FydW1sYXV0VW9nb25la3VvZ29uZWtXY2lyY3VtZmxleHdjaXJjdW1mbGV4WWNpcmN1bWZsZXh5Y2lyY3VtZmxleFphY3V0ZXphY3V0ZVpkb3RhY2NlbnR6ZG90YWNjZW50bG9uZ3N1bmkwMTgwdW5pMDE4MXVuaTAxODJ1bmkwMTgzdW5pMDE4NHVuaTAxODV1bmkwMTg2dW5pMDE4N3VuaTAxODh1bmkwMTg5dW5pMDE4QXVuaTAxOEJ1bmkwMThDdW5pMDE4RHVuaTAxOEV1bmkwMThGdW5pMDE5MHVuaTAxOTF1bmkwMTkzdW5pMDE5NHVuaTAxOTV1bmkwMTk2dW5pMDE5N3VuaTAxOTh1bmkwMTk5dW5pMDE5QXVuaTAxOUJ1bmkwMTlDdW5pMDE5RHVuaTAxOUV1bmkwMTlGT2hvcm5vaG9ybnVuaTAxQTJ1bmkwMUEzdW5pMDFBNHVuaTAxQTV1bmkwMUE2dW5pMDFBN3VuaTAxQTh1bmkwMUE5dW5pMDFBQXVuaTAxQUJ1bmkwMUFDdW5pMDFBRHVuaTAxQUVVaG9ybnVob3JudW5pMDFCMXVuaTAxQjJ1bmkwMUIzdW5pMDFCNHVuaTAxQjV1bmkwMUI2dW5pMDFCN3VuaTAxQjh1bmkwMUI5dW5pMDFCQXVuaTAxQkJ1bmkwMUJDdW5pMDFCRHVuaTAxQkV1bmkwMUJGdW5pMDFDMHVuaTAxQzF1bmkwMUMydW5pMDFDM3VuaTAxQzR1bmkwMUM1dW5pMDFDNnVuaTAxQzd1bmkwMUM4dW5pMDFDOXVuaTAxQ0F1bmkwMUNCdW5pMDFDQ3VuaTAxQ0R1bmkwMUNFdW5pMDFDRnVuaTAxRDB1bmkwMUQxdW5pMDFEMnVuaTAxRDN1bmkwMUQ0dW5pMDFENXVuaTAxRDZ1bmkwMUQ3dW5pMDFEOHVuaTAxRDl1bmkwMURBdW5pMDFEQnVuaTAxREN1bmkwMUREdW5pMDFERXVuaTAxREZ1bmkwMUUwdW5pMDFFMXVuaTAxRTJ1bmkwMUUzdW5pMDFFNHVuaTAxRTVHY2Fyb25nY2Fyb251bmkwMUU4dW5pMDFFOXVuaTAxRUF1bmkwMUVCdW5pMDFFQ3VuaTAxRUR1bmkwMUVFdW5pMDFFRnVuaTAxRjB1bmkwMUYxdW5pMDFGMnVuaTAxRjN1bmkwMUY0dW5pMDFGNXVuaTAxRjZ1bmkwMUY3dW5pMDFGOHVuaTAxRjlBcmluZ2FjdXRlYXJpbmdhY3V0ZUFFYWN1dGVhZWFjdXRlT3NsYXNoYWN1dGVvc2xhc2hhY3V0ZXVuaTAyMDB1bmkwMjAxdW5pMDIwMnVuaTAyMDN1bmkwMjA0dW5pMDIwNXVuaTAyMDZ1bmkwMjA3dW5pMDIwOHVuaTAyMDl1bmkwMjBBdW5pMDIwQnVuaTAyMEN1bmkwMjBEdW5pMDIwRXVuaTAyMEZ1bmkwMjEwdW5pMDIxMXVuaTAyMTJ1bmkwMjEzdW5pMDIxNHVuaTAyMTV1bmkwMjE2dW5pMDIxN1Njb21tYWFjY2VudHNjb21tYWFjY2VudFRjb21tYWFjY2VudHRjb21tYWFjY2VudHVuaTAyMUN1bmkwMjFEdW5pMDIxRXVuaTAyMUZ1bmkwMjIwdW5pMDIyMXVuaTAyMjJ1bmkwMjIzdW5pMDIyNHVuaTAyMjV1bmkwMjI2dW5pMDIyN3VuaTAyMjh1bmkwMjI5dW5pMDIyQXVuaTAyMkJ1bmkwMjJDdW5pMDIyRHVuaTAyMkV1bmkwMjJGdW5pMDIzMHVuaTAyMzF1bmkwMjMydW5pMDIzM3VuaTAyMzR1bmkwMjM1dW5pMDIzNmRvdGxlc3NqdW5pMDIzOHVuaTAyMzl1bmkwMjNBdW5pMDIzQnVuaTAyM0N1bmkwMjNEdW5pMDIzRXVuaTAyM0Z1bmkwMjQxdW5pMDI0M3VuaTAyNTB1bmkwMjUxdW5pMDI1MnVuaTAyNTN1bmkwMjU0dW5pMDI1NXVuaTAyNTZ1bmkwMjU3dW5pMDI1OHVuaTAyNTl1bmkwMjVBdW5pMDI1QnVuaTAyNUN1bmkwMjVEdW5pMDI1RXVuaTAyNUZ1bmkwMjYwdW5pMDI2MXVuaTAyNjJnYW1tYWxhdGludW5pMDI2NHVuaTAyNjVoaG9va3VuaTAyNjd1bmkwMjY4dW5pMDI2OXVuaTAyNkF1bmkwMjZCdW5pMDI2Q3VuaTAyNkR1bmkwMjZFdW5pMDI2RnVuaTAyNzB1bmkwMjcxdW5pMDI3MnVuaTAyNzN1bmkwMjc0dW5pMDI3NXVuaTAyNzZ1bmkwMjc3dW5pMDI3OHJ0dXJuZWR1bmkwMjdBcmhvb2t0dXJuZWR1bmkwMjdDdW5pMDI3RHVuaTAyN0V1bmkwMjdGUnNtYWxsY2FwUnNtYWxsaW52ZXJ0ZWR1bmkwMjgydW5pMDI4M3VuaTAyODR1bmkwMjg1dW5pMDI4NnVuaTAyODd1bmkwMjg4dW5pMDI4OXVuaTAyOEF1bmkwMjhCdW5pMDI4Q3VuaTAyOER1bmkwMjhFdW5pMDI4RnVuaTAyOTB1bmkwMjkxdW5pMDI5MnVuaTAyOTN1bmkwMjk0Z2xvdHRhbHN0b3ByZXZlcnNlZHVuaTAyOTZ1bmkwMjk3dW5pMDI5OHVuaTAyOTl1bmkwMjlBdW5pMDI5QnVuaTAyOUN1bmkwMjlEdW5pMDI5RXVuaTAyOUZ1bmkwMkEwdW5pMDJBMXVuaTAyQTJ1bmkwMkEzdW5pMDJBNHVuaTAyQTV1bmkwMkE2dW5pMDJBN3VuaTAyQTh1bmkwMkE5dW5pMDJBQXVuaTAyQUJ1bmkwMkFDdW5pMDJBRHVuaTAyQUV1bmkwMkFGaC5zdXBlcmlvcmhob29rLnN1cGVyaW9yai5zdXBlcmlvcnIuc3VwZXJpb3JydHVybmVkLnN1cGVyaW9ycmhvb2t0dXJuZWQuc3VwZXJpb3JSc21hbGxpbnZlcnRlZC5zdXBlcmlvcncuc3VwZXJpb3J5LnN1cGVyaW9ydW5pMDJCOXVuaTAyQkF1bmkwMkJCYWZpaTU3OTI5YWZpaTY0OTM3dW5pMDJCRXVuaTAyQkZ1bmkwMkMwdW5pMDJDMXVuaTAyQzJ1bmkwMkMzdW5pMDJDNHVuaTAyQzV1bmkwMkM4dW5pMDJDOXVuaTAyQ0F1bmkwMkNCdW5pMDJDQ3VuaTAyQ0R1bmkwMkNFdW5pMDJDRnVuaTAyRDB1bmkwMkQxdW5pMDJEMnVuaTAyRDN1bmkwMkQ0dW5pMDJENXVuaTAyRDZ1bmkwMkQ3dW5pMDJERXVuaTAyREZnYW1tYWxhdGluLnN1cGVyaW9ybC5zdXBlcmlvcnMuc3VwZXJpb3J4LnN1cGVyaW9yZ2xvdHRhbHN0b3ByZXZlcnNlZC5zdXBlcmlvcnVuaTAyRTV1bmkwMkU2dW5pMDJFN3VuaTAyRTh1bmkwMkU5dW5pMDJFQXVuaTAyRUJ1bmkwMkVDdW5pMDJFRHVuaTAyRUV1bmkwMkVGdW5pMDJGMHVuaTAyRjF1bmkwMkYydW5pMDJGM3VuaTAyRjR1bmkwMkY1dW5pMDJGNnVuaTAyRjd1bmkwMkY4dW5pMDJGOXVuaTAyRkF1bmkwMkZCdW5pMDJGQ3VuaTAyRkR1bmkwMkZFdW5pMDJGRmdyYXZlY29tYmFjdXRlY29tYmNpcmN1bWZsZXhjb21idGlsZGVjb21ibWFjcm9uY29tYnVuaTAzMDVicmV2ZWNvbWJ1bmkwMzA3dW5pMDMwOGhvb2thYm92ZWNvbWJ1bmkwMzBBdW5pMDMwQnVuaTAzMEN1bmkwMzBEdW5pMDMwRXVuaTAzMEZ1bmkwMzEwdW5pMDMxMXVuaTAzMTJ1bmkwMzEzdW5pMDMxNHVuaTAzMTV1bmkwMzE2dW5pMDMxN3VuaTAzMTh1bmkwMzE5dW5pMDMxQXVuaTAzMUJ1bmkwMzFDdW5pMDMxRHVuaTAzMUV1bmkwMzFGdW5pMDMyMHVuaTAzMjF1bmkwMzIyZG90YmVsb3djb21idW5pMDMyNHVuaTAzMjV1bmkwMzI2dW5pMDMyN3VuaTAzMjh1bmkwMzI5dW5pMDMyQXVuaTAzMkJ1bmkwMzJDdW5pMDMyRHVuaTAzMkV1bmkwMzJGdW5pMDMzMHVuaTAzMzF1bmkwMzMydW5pMDMzM3VuaTAzMzR1bmkwMzM1dW5pMDMzNnVuaTAzMzd1bmkwMzM4dW5pMDMzOXVuaTAzM0F1bmkwMzNCdW5pMDMzQ3VuaTAzM0R1bmkwMzNFdW5pMDMzRnVuaTAzNDB1bmkwMzQxdW5pMDM0MnVuaTAzNDN1bmkwMzQ0dW5pMDM0NXVuaTAzNDZ1bmkwMzQ3dW5pMDM0OHVuaTAzNDl1bmkwMzRBdW5pMDM0QnVuaTAzNEN1bmkwMzREdW5pMDM0RXVuaTAzNTB1bmkwMzUxdW5pMDM1MnVuaTAzNTN1bmkwMzU0dW5pMDM1NXVuaTAzNTZ1bmkwMzU3dW5pMDM1OHVuaTAzNTl1bmkwMzVBdW5pMDM1QnVuaTAzNUN1bmkwMzVEdW5pMDM1RXVuaTAzNUZ1bmkwMzYwdW5pMDM2MXVuaTAzNjJ1bmkwMzYzdW5pMDM2NHVuaTAzNjV1bmkwMzY2dW5pMDM2N3VuaTAzNjh1bmkwMzY5dW5pMDM2QXVuaTAzNkJ1bmkwMzZDdW5pMDM2RHVuaTAzNkV1bmkwMzZGdW5pMDM3NHVuaTAzNzV1bmkwMzdBdW5pMDM3QnVuaTAzN0N1bmkwMzdEdW5pMDM3RXRvbm9zZGllcmVzaXN0b25vc0FscGhhdG9ub3Nhbm90ZWxlaWFFcHNpbG9udG9ub3NFdGF0b25vc0lvdGF0b25vc09taWNyb250b25vc1Vwc2lsb250b25vc09tZWdhdG9ub3Npb3RhZGllcmVzaXN0b25vc0FscGhhQmV0YUdhbW1hRGVsdGFFcHNpbG9uWmV0YUV0YVRoZXRhSW90YUthcHBhTGFtYmRhTXVOdVhpT21pY3JvblBpUmhvU2lnbWFUYXVVcHNpbG9uUGhpQ2hpUHNpT21lZ2FJb3RhZGllcmVzaXNVcHNpbG9uZGllcmVzaXNhbHBoYXRvbm9zZXBzaWxvbnRvbm9zZXRhdG9ub3Npb3RhdG9ub3N1cHNpbG9uZGllcmVzaXN0b25vc2FscGhhYmV0YWdhbW1hZGVsdGFlcHNpbG9uemV0YWV0YXRoZXRhaW90YWthcHBhbGFtYmRhbnV4aW9taWNyb25waXJob3NpZ21hMXNpZ21hdGF1dXBzaWxvbnBoaWNoaXBzaW9tZWdhaW90YWRpZXJlc2lzdXBzaWxvbmRpZXJlc2lzb21pY3JvbnRvbm9zdXBzaWxvbnRvbm9zb21lZ2F0b25vc3VuaTAzRDB0aGV0YTFVcHNpbG9uMXVuaTAzRDN1bmkwM0Q0cGhpMW9tZWdhMXVuaTAzRDd1bmkwM0Q4dW5pMDNEOXVuaTAzREF1bmkwM0RCdW5pMDNEQ3VuaTAzRER1bmkwM0RFdW5pMDNERnVuaTAzRTB1bmkwM0UxdW5pMDNGMHVuaTAzRjF1bmkwM0YydW5pMDNGM3VuaTAzRjR1bmkwM0Y1dW5pMDNGNnVuaTAzRjh1bmkwM0Y5dW5pMDNGQnVuaTAzRkR1bmkwM0ZFdW5pMDNGRnVuaTA0MDBhZmlpMTAwMjNhZmlpMTAwNTFhZmlpMTAwNTJhZmlpMTAwNTNhZmlpMTAwNTRhZmlpMTAwNTVhZmlpMTAwNTZhZmlpMTAwNTdhZmlpMTAwNThhZmlpMTAwNTlhZmlpMTAwNjBhZmlpMTAwNjF1bmkwNDBEYWZpaTEwMDYyYWZpaTEwMTQ1YWZpaTEwMDE3YWZpaTEwMDE4YWZpaTEwMDE5YWZpaTEwMDIwYWZpaTEwMDIxYWZpaTEwMDIyYWZpaTEwMDI0YWZpaTEwMDI1YWZpaTEwMDI2YWZpaTEwMDI3YWZpaTEwMDI4YWZpaTEwMDI5YWZpaTEwMDMwYWZpaTEwMDMxYWZpaTEwMDMyYWZpaTEwMDMzYWZpaTEwMDM0YWZpaTEwMDM1YWZpaTEwMDM2YWZpaTEwMDM3YWZpaTEwMDM4YWZpaTEwMDM5YWZpaTEwMDQwYWZpaTEwMDQxYWZpaTEwMDQyYWZpaTEwMDQzYWZpaTEwMDQ0YWZpaTEwMDQ1YWZpaTEwMDQ2YWZpaTEwMDQ3YWZpaTEwMDQ4YWZpaTEwMDQ5YWZpaTEwMDY1YWZpaTEwMDY2YWZpaTEwMDY3YWZpaTEwMDY4YWZpaTEwMDY5YWZpaTEwMDcwYWZpaTEwMDcyYWZpaTEwMDczYWZpaTEwMDc0YWZpaTEwMDc1YWZpaTEwMDc2YWZpaTEwMDc3YWZpaTEwMDc4YWZpaTEwMDc5YWZpaTEwMDgwYWZpaTEwMDgxYWZpaTEwMDgyYWZpaTEwMDgzYWZpaTEwMDg0YWZpaTEwMDg1YWZpaTEwMDg2YWZpaTEwMDg3YWZpaTEwMDg4YWZpaTEwMDg5YWZpaTEwMDkwYWZpaTEwMDkxYWZpaTEwMDkyYWZpaTEwMDkzYWZpaTEwMDk0YWZpaTEwMDk1YWZpaTEwMDk2YWZpaTEwMDk3dW5pMDQ1MGFmaWkxMDA3MWFmaWkxMDA5OWFmaWkxMDEwMGFmaWkxMDEwMWFmaWkxMDEwMmFmaWkxMDEwM2FmaWkxMDEwNGFmaWkxMDEwNWFmaWkxMDEwNmFmaWkxMDEwN2FmaWkxMDEwOGFmaWkxMDEwOXVuaTA0NURhZmlpMTAxMTBhZmlpMTAxOTN1bmkwNDYwdW5pMDQ2MWFmaWkxMDE0NmFmaWkxMDE5NHVuaTA0NjR1bmkwNDY1dW5pMDQ2NnVuaTA0Njd1bmkwNDY4dW5pMDQ2OXVuaTA0NkF1bmkwNDZCdW5pMDQ2Q3VuaTA0NkR1bmkwNDZFdW5pMDQ2RnVuaTA0NzB1bmkwNDcxYWZpaTEwMTQ3YWZpaTEwMTk1YWZpaTEwMTQ4YWZpaTEwMTk2dW5pMDQ3NnVuaTA0Nzd1bmkwNDdDdW5pMDQ3RHVuaTA0N0V1bmkwNDdGdW5pMDQ4M3VuaTA0OEN1bmkwNDhEdW5pMDQ4RXVuaTA0OEZhZmlpMTAwNTBhZmlpMTAwOTh1bmkwNDkydW5pMDQ5M3VuaTA0OTR1bmkwNDk1dW5pMDQ5NnVuaTA0OTd1bmkwNDk4dW5pMDQ5OXVuaTA0OUF1bmkwNDlCdW5pMDQ5Q3VuaTA0OUR1bmkwNDlFdW5pMDQ5RnVuaTA0QTB1bmkwNEExdW5pMDRBMnVuaTA0QTN1bmkwNEE0dW5pMDRBNXVuaTA0QTZ1bmkwNEE3dW5pMDRBOHVuaTA0QTl1bmkwNEFBdW5pMDRBQnVuaTA0QUN1bmkwNEFEdW5pMDRBRXVuaTA0QUZ1bmkwNEIwdW5pMDRCMXVuaTA0QjJ1bmkwNEIzdW5pMDRCNHVuaTA0QjV1bmkwNEI2dW5pMDRCN3VuaTA0Qjh1bmkwNEI5dW5pMDRCQXVuaTA0QkJ1bmkwNEJDdW5pMDRCRHVuaTA0QkV1bmkwNEJGdW5pMDRDMHVuaTA0QzF1bmkwNEMydW5pMDRDM3VuaTA0QzR1bmkwNEM3dW5pMDRDOHVuaTA0Qzl1bmkwNENBdW5pMDRDQnVuaTA0Q0N1bmkwNEQwdW5pMDREMXVuaTA0RDJ1bmkwNEQzdW5pMDRENHVuaTA0RDV1bmkwNEQ2dW5pMDREN3VuaTA0RDhhZmlpMTA4NDZ1bmkwNERBdW5pMDREQnVuaTA0REN1bmkwNEREdW5pMDRERXVuaTA0REZ1bmkwNEUwdW5pMDRFMXVuaTA0RTJ1bmkwNEUzdW5pMDRFNHVuaTA0RTV1bmkwNEU2dW5pMDRFN3VuaTA0RTh1bmkwNEU5dW5pMDRFQXVuaTA0RUJ1bmkwNEVDdW5pMDRFRHVuaTA0RUV1bmkwNEVGdW5pMDRGMHVuaTA0RjF1bmkwNEYydW5pMDRGM3VuaTA0RjR1bmkwNEY1dW5pMDRGNnVuaTA0Rjd1bmkwNEY4dW5pMDRGOWFmaWk1Nzc5OWFmaWk1NzgwMWFmaWk1NzgwMGFmaWk1NzgwMmFmaWk1Nzc5M2FmaWk1Nzc5NGFmaWk1Nzc5NWFmaWk1Nzc5OGFmaWk1Nzc5N2FmaWk1NzgwNnVuaTA1QkFhZmlpNTc3OTZhZmlpNTc4MDdhZmlpNTc4MzlhZmlpNTc2NDVhZmlpNTc4NDFhZmlpNTc4NDJhZmlpNTc4MDRhZmlpNTc4MDNhZmlpNTc2NTh1bmkwNUM2YWZpaTU3NjY0YWZpaTU3NjY1YWZpaTU3NjY2YWZpaTU3NjY3YWZpaTU3NjY4YWZpaTU3NjY5YWZpaTU3NjcwYWZpaTU3NjcxYWZpaTU3NjcyYWZpaTU3NjczYWZpaTU3Njc0YWZpaTU3Njc1YWZpaTU3Njc2YWZpaTU3Njc3YWZpaTU3Njc4YWZpaTU3Njc5YWZpaTU3NjgwYWZpaTU3NjgxYWZpaTU3NjgyYWZpaTU3NjgzYWZpaTU3Njg0YWZpaTU3Njg1YWZpaTU3Njg2YWZpaTU3Njg3YWZpaTU3Njg4YWZpaTU3Njg5YWZpaTU3NjkwYWZpaTU3NzE2YWZpaTU3NzE3YWZpaTU3NzE4dW5pMDVGM3VuaTA1RjR1bmkxRDE1dW5pMUUwMHVuaTFFMDF1bmkxRTAydW5pMUUwM3VuaTFFMDR1bmkxRTA1dW5pMUUwNnVuaTFFMDd1bmkxRTA4dW5pMUUwOXVuaTFFMEF1bmkxRTBCdW5pMUUwQ3VuaTFFMER1bmkxRTBFdW5pMUUwRnVuaTFFMTB1bmkxRTExdW5pMUUxMnVuaTFFMTN1bmkxRTE0dW5pMUUxNXVuaTFFMTZ1bmkxRTE3dW5pMUUxOHVuaTFFMTl1bmkxRTFBdW5pMUUxQnVuaTFFMUN1bmkxRTFEdW5pMUUxRXVuaTFFMUZ1bmkxRTIwdW5pMUUyMXVuaTFFMjJ1bmkxRTIzdW5pMUUyNHVuaTFFMjV1bmkxRTI2dW5pMUUyN3VuaTFFMjh1bmkxRTI5dW5pMUUyQXVuaTFFMkJ1bmkxRTJDdW5pMUUyRHVuaTFFMkV1bmkxRTJGdW5pMUUzMHVuaTFFMzF1bmkxRTMydW5pMUUzM3VuaTFFMzR1bmkxRTM1dW5pMUUzNnVuaTFFMzd1bmkxRTM4dW5pMUUzOXVuaTFFM0F1bmkxRTNCdW5pMUUzQ3VuaTFFM0R1bmkxRTNFdW5pMUUzRnVuaTFFNDB1bmkxRTQxdW5pMUU0MnVuaTFFNDN1bmkxRTQ0dW5pMUU0NXVuaTFFNDZ1bmkxRTQ3dW5pMUU0OHVuaTFFNDl1bmkxRTRBdW5pMUU0QnVuaTFFNEN1bmkxRTREdW5pMUU0RXVuaTFFNEZ1bmkxRTUwdW5pMUU1MXVuaTFFNTJ1bmkxRTUzdW5pMUU1NHVuaTFFNTV1bmkxRTU2dW5pMUU1N3VuaTFFNTh1bmkxRTU5dW5pMUU1QXVuaTFFNUJ1bmkxRTVDdW5pMUU1RHVuaTFFNUV1bmkxRTVGdW5pMUU2MHVuaTFFNjF1bmkxRTYydW5pMUU2M3VuaTFFNjR1bmkxRTY1dW5pMUU2NnVuaTFFNjd1bmkxRTY4dW5pMUU2OXVuaTFFNkF1bmkxRTZCdW5pMUU2Q3VuaTFFNkR1bmkxRTZFdW5pMUU2RnVuaTFFNzB1bmkxRTcxdW5pMUU3MnVuaTFFNzN1bmkxRTc0dW5pMUU3NXVuaTFFNzZ1bmkxRTc3dW5pMUU3OHVuaTFFNzl1bmkxRTdBdW5pMUU3QnVuaTFFN0N1bmkxRTdEdW5pMUU3RXVuaTFFN0ZXZ3JhdmV3Z3JhdmVXYWN1dGV3YWN1dGVXZGllcmVzaXN3ZGllcmVzaXN1bmkxRTg2dW5pMUU4N3VuaTFFODh1bmkxRTg5dW5pMUU4QXVuaTFFOEJ1bmkxRThDdW5pMUU4RHVuaTFFOEV1bmkxRThGdW5pMUU5MHVuaTFFOTF1bmkxRTkydW5pMUU5M3VuaTFFOTR1bmkxRTk1dW5pMUU5NnVuaTFFOTd1bmkxRTk4dW5pMUU5OXVuaTFFOUF1bmkxRTlCdW5pMUU5Q3VuaTFFOURHZXJtYW5kYmxzdW5pMUU5RnVuaTFFQTB1bmkxRUExdW5pMUVBMnVuaTFFQTN1bmkxRUE0dW5pMUVBNXVuaTFFQTZ1bmkxRUE3dW5pMUVBOHVuaTFFQTl1bmkxRUFBdW5pMUVBQnVuaTFFQUN1bmkxRUFEdW5pMUVBRXVuaTFFQUZ1bmkxRUIwdW5pMUVCMXVuaTFFQjJ1bmkxRUIzdW5pMUVCNHVuaTFFQjV1bmkxRUI2dW5pMUVCN3VuaTFFQjh1bmkxRUI5dW5pMUVCQXVuaTFFQkJ1bmkxRUJDdW5pMUVCRHVuaTFFQkV1bmkxRUJGdW5pMUVDMHVuaTFFQzF1bmkxRUMydW5pMUVDM3VuaTFFQzR1bmkxRUM1dW5pMUVDNnVuaTFFQzd1bmkxRUM4dW5pMUVDOXVuaTFFQ0F1bmkxRUNCdW5pMUVDQ3VuaTFFQ0R1bmkxRUNFdW5pMUVDRnVuaTFFRDB1bmkxRUQxdW5pMUVEMnVuaTFFRDN1bmkxRUQ0dW5pMUVENXVuaTFFRDZ1bmkxRUQ3dW5pMUVEOHVuaTFFRDl1bmkxRURBdW5pMUVEQnVuaTFFREN1bmkxRUREdW5pMUVERXVuaTFFREZ1bmkxRUUwdW5pMUVFMXVuaTFFRTJ1bmkxRUUzdW5pMUVFNHVuaTFFRTV1bmkxRUU2dW5pMUVFN3VuaTFFRTh1bmkxRUU5dW5pMUVFQXVuaTFFRUJ1bmkxRUVDdW5pMUVFRHVuaTFFRUV1bmkxRUVGdW5pMUVGMHVuaTFFRjFZZ3JhdmV5Z3JhdmV1bmkxRUY0dW5pMUVGNXVuaTFFRjZ1bmkxRUY3dW5pMUVGOHVuaTFFRjl1bmkxRUZBdW5pMUVGQnVuaTFFRkN1bmkxRUZEdW5pMUVGRXVuaTFFRkZ1bmkxRjAwdW5pMUYwMXVuaTFGMDJ1bmkxRjAzdW5pMUYwNHVuaTFGMDV1bmkxRjA2dW5pMUYwN3VuaTFGMDh1bmkxRjA5dW5pMUYwQXVuaTFGMEJ1bmkxRjBDdW5pMUYwRHVuaTFGMEV1bmkxRjBGdW5pMUYxMHVuaTFGMTF1bmkxRjEydW5pMUYxM3VuaTFGMTR1bmkxRjE1dW5pMUYxOHVuaTFGMTl1bmkxRjFBdW5pMUYxQnVuaTFGMUN1bmkxRjFEdW5pMUYyMHVuaTFGMjF1bmkxRjIydW5pMUYyM3VuaTFGMjR1bmkxRjI1dW5pMUYyNnVuaTFGMjd1bmkxRjI4dW5pMUYyOXVuaTFGMkF1bmkxRjJCdW5pMUYyQ3VuaTFGMkR1bmkxRjJFdW5pMUYyRnVuaTFGMzB1bmkxRjMxdW5pMUYzMnVuaTFGMzN1bmkxRjM0dW5pMUYzNXVuaTFGMzZ1bmkxRjM3dW5pMUYzOHVuaTFGMzl1bmkxRjNBdW5pMUYzQnVuaTFGM0N1bmkxRjNEdW5pMUYzRXVuaTFGM0Z1bmkxRjQwdW5pMUY0MXVuaTFGNDJ1bmkxRjQzdW5pMUY0NHVuaTFGNDV1bmkxRjQ4dW5pMUY0OXVuaTFGNEF1bmkxRjRCdW5pMUY0Q3VuaTFGNER1bmkxRjUwdW5pMUY1MXVuaTFGNTJ1bmkxRjUzdW5pMUY1NHVuaTFGNTV1bmkxRjU2dW5pMUY1N3VuaTFGNTl1bmkxRjVCdW5pMUY1RHVuaTFGNUZ1bmkxRjYwdW5pMUY2MXVuaTFGNjJ1bmkxRjYzdW5pMUY2NHVuaTFGNjV1bmkxRjY2dW5pMUY2N3VuaTFGNjh1bmkxRjY5dW5pMUY2QXVuaTFGNkJ1bmkxRjZDdW5pMUY2RHVuaTFGNkV1bmkxRjZGdW5pMUY3MHVuaTFGNzF1bmkxRjcydW5pMUY3M3VuaTFGNzR1bmkxRjc1dW5pMUY3NnVuaTFGNzd1bmkxRjc4dW5pMUY3OXVuaTFGN0F1bmkxRjdCdW5pMUY3Q3VuaTFGN0R1bmkxRjgwdW5pMUY4MXVuaTFGODJ1bmkxRjgzdW5pMUY4NHVuaTFGODV1bmkxRjg2dW5pMUY4N3VuaTFGODh1bmkxRjg5dW5pMUY4QXVuaTFGOEJ1bmkxRjhDdW5pMUY4RHVuaTFGOEV1bmkxRjhGdW5pMUY5MHVuaTFGOTF1bmkxRjkydW5pMUY5M3VuaTFGOTR1bmkxRjk1dW5pMUY5NnVuaTFGOTd1bmkxRjk4dW5pMUY5OXVuaTFGOUF1bmkxRjlCdW5pMUY5Q3VuaTFGOUR1bmkxRjlFdW5pMUY5RnVuaTFGQTB1bmkxRkExdW5pMUZBMnVuaTFGQTN1bmkxRkE0dW5pMUZBNXVuaTFGQTZ1bmkxRkE3dW5pMUZBOHVuaTFGQTl1bmkxRkFBdW5pMUZBQnVuaTFGQUN1bmkxRkFEdW5pMUZBRXVuaTFGQUZ1bmkxRkIwdW5pMUZCMXVuaTFGQjJ1bmkxRkIzdW5pMUZCNHVuaTFGQjZ1bmkxRkI3dW5pMUZCOHVuaTFGQjl1bmkxRkJBdW5pMUZCQnVuaTFGQkN1bmkxRkJEdW5pMUZCRXVuaTFGQkZ1bmkxRkMwdW5pMUZDMXVuaTFGQzJ1bmkxRkMzdW5pMUZDNHVuaTFGQzZ1bmkxRkM3dW5pMUZDOHVuaTFGQzl1bmkxRkNBdW5pMUZDQnVuaTFGQ0N1bmkxRkNEdW5pMUZDRXVuaTFGQ0Z1bmkxRkQwdW5pMUZEMXVuaTFGRDJ1bmkxRkQzdW5pMUZENnVuaTFGRDd1bmkxRkQ4dW5pMUZEOXVuaTFGREF1bmkxRkRCdW5pMUZERHVuaTFGREV1bmkxRkRGdW5pMUZFMHVuaTFGRTF1bmkxRkUydW5pMUZFM3VuaTFGRTR1bmkxRkU1dW5pMUZFNnVuaTFGRTd1bmkxRkU4dW5pMUZFOXVuaTFGRUF1bmkxRkVCdW5pMUZFQ3VuaTFGRUR1bmkxRkVFdW5pMUZFRnVuaTFGRjJ1bmkxRkYzdW5pMUZGNHVuaTFGRjZ1bmkxRkY3dW5pMUZGOHVuaTFGRjl1bmkxRkZBdW5pMUZGQnVuaTFGRkN1bmkxRkZEdW5pMUZGRWVucXVhZGVtcXVhZGVuc3BhY2VlbXNwYWNldGhyZWVwZXJlbXNwYWNlZm91cnBlcmVtc3BhY2VzaXhwZXJlbXNwYWNlZmlndXJlc3BhY2VwdW5jdHVhdGlvbnNwYWNldGhpbnNwYWNlaGFpcnNwYWNlemVyb3dpZHRoc3BhY2VoeXBoZW50d29oeXBoZW5ub2JyZWFraG9yaXpvbnRhbGJhcnVuaTIwMTZ1bmRlcnNjb3JlZGJscXVvdGVyZXZlcnNlZHF1b3RlZGJscmV2dHJpYW5nbGVidWxsZXRoeXBoZW5kb3R1bmkyMDJGcGVydGVudGhvdXNhbmRtaW51dGVzZWNvbmRwcmltZXRyaXBsZXByaW1lcmV2ZXJzZWR1bmkyMDM2dW5pMjAzN3VuaTIwM0JleGNsYW1kYmxpbnRlcnJvYmFuZ3VuaTIwM0V1bmkyMDQycXVlc3Rpb25fcXVlc3Rpb25xdWVzdGlvbl9leGNsYW1leGNsYW1fcXVlc3Rpb251bmkyMDRBdW5pMjA0QnVuaTIwNEZ6ZXJvLnN1cGVyaW9yaS5zdXBlcmlvcmZvdXIuc3VwZXJpb3JmaXZlLnN1cGVyaW9yc2l4LnN1cGVyaW9yc2V2ZW4uc3VwZXJpb3JlaWdodC5zdXBlcmlvcm5pbmUuc3VwZXJpb3JwbHVzLnN1cGVyaW9ybWludXMuc3VwZXJpb3JlcXVhbC5zdXBlcmlvcnBhcmVubGVmdC5zdXBlcmlvcnBhcmVucmlnaHQuc3VwZXJpb3JuLnN1cGVyaW9yemVyby5pbmZlcmlvcm9uZS5pbmZlcmlvcnR3by5pbmZlcmlvcnRocmVlLmluZmVyaW9yZm91ci5pbmZlcmlvcmZpdmUuaW5mZXJpb3JzaXguaW5mZXJpb3JzZXZlbi5pbmZlcmlvcmVpZ2h0LmluZmVyaW9ybmluZS5pbmZlcmlvcnBsdXMuaW5mZXJpb3JtaW51cy5pbmZlcmlvcmVxdWFsLmluZmVyaW9ycGFyZW5sZWZ0LmluZmVyaW9ycGFyZW5yaWdodC5pbmZlcmlvcmEuaW5mZXJpb3JlLmluZmVyaW9yby5pbmZlcmlvcnguaW5mZXJpb3J1bmkyMDk0dW5pMjA5OHVuaTIwOTl1bmkyMEEyZnJhbmNsaXJhcGVzZXRhdW5pMjBBOGRvbmdFdXJvdW5pMjBBRnBlc291bmkyMTAwdW5pMjEwMXVuaTIxMDJjZW50aWdyYWRlYWZpaTYxMjQ4dW5pMjEwNmZhaHJlbmhlaXR1bmkyMTBDdW5pMjEwRHVuaTIxMEV1bmkyMTBGSWZyYWt0dXJhZmlpNjEyODl1bmkyMTE1bnVtZXJvdW5pMjExOXVuaTIxMUFSZnJha3R1cnVuaTIxMUR1bmkyMTIwdW5pMjEyNHVuaTIxMjZPbWVnYWludmVzdGltYXRlZGFsZXBodW5pMjEzNnVuaTIxMzd1bmkyMTM4dW5pMjEzOXVuaTIxNEZvbmVmaWZ0aHR3b2ZpZnRoc3RocmVlZmlmdGhzZm91cmZpZnRoc29uZXNpeHRoZml2ZXNpeHRoc29uZW51bWVyYXRvck9uZXJvbWFuVHdvcm9tYW5UaHJlZXJvbWFuRm91cnJvbWFuRml2ZXJvbWFuU2l4cm9tYW5TZXZlbnJvbWFuRWlnaHRyb21hbk5pbmVyb21hblRlbnJvbWFuRWxldmVucm9tYW5Ud2VsdmVyb21hbnVuaTIxNkN1bmkyMTZEdW5pMjE2RXVuaTIxNkZvbmVyb21hbnR3b3JvbWFudGhyZWVyb21hbmZvdXJyb21hbmZpdmVyb21hbnNpeHJvbWFuc2V2ZW5yb21hbmVpZ2h0cm9tYW5uaW5lcm9tYW50ZW5yb21hbmVsZXZlbnJvbWFudHdlbHZlcm9tYW51bmkyMTdDdW5pMjE3RHVuaTIxN0V1bmkyMTdGdW5pMjE4MHVuaTIxODF1bmkyMTgydW5pMjE4M3VuaTIxODRhcnJvd2xlZnRhcnJvd3VwYXJyb3dyaWdodGFycm93ZG93bmFycm93Ym90aGFycm93dXBkbnVuaTIxOTZ1bmkyMTk3dW5pMjE5OHVuaTIxOTl1bmkyMTlBdW5pMjE5QnVuaTIxQTZhcnJvd3VwZG5ic2V1bmkyMUFFdW5pMjFCQ3VuaTIxQkR1bmkyMUMwdW5pMjFDMXVuaTIxQ0J1bmkyMUNDdW5pMjFDRHVuaTIxQ0V1bmkyMUNGYXJyb3dkYmxsZWZ0YXJyb3dkYmx1cGFycm93ZGJscmlnaHRhcnJvd2RibGRvd25hcnJvd2RibGJvdGh1bmkyMUQ1TndhcnJvd05lYXJyb3dTZWFycm93U3dhcnJvd3VuaXZlcnNhbHVuaTIyMDFwYXJ0aWFsZGlmZmV4aXN0ZW50aWFsdW5pMjIwNGVtcHR5c2V0dW5pMjIwNmdyYWRpZW50ZWxlbWVudG5vdGVsZW1lbnR1bmkyMjBBc3VjaHRoYXR1bmkyMjBDdW5pMjIwRHByb2R1Y3R1bmkyMjEwc3VtbWF0aW9udW5pMjIxM3VuaTIyMTR1bmkyMjE1dW5pMjIxNmFzdGVyaXNrbWF0aHVuaTIyMTh1bmkyMjE5cmFkaWNhbHVuaTIyMUJ1bmkyMjFDcHJvcG9ydGlvbmFsaW5maW5pdHl1bmkyMjFGYW5nbGV1bmkyMjIxdW5pMjIyMnVuaTIyMjN1bmkyMjI0dW5pMjIyNXVuaTIyMjZsb2dpY2FsYW5kbG9naWNhbG9yaW50ZXJzZWN0aW9udW5pb25pbnRlZ3JhbHVuaTIyMkN1bmkyMjJEdW5pMjIyRXVuaTIyMzZzaW1pbGFydW5pMjI0MWNvbmdydWVudGFwcHJveGVxdWFsdW5pMjI0OXVuaTIyNTlub3RlcXVhbGVxdWl2YWxlbmNldW5pMjI2Mmxlc3NlcXVhbGdyZWF0ZXJlcXVhbHVuaTIyNkF1bmkyMjZCdW5pMjI2RXVuaTIyNkZ1bmkyMjcwdW5pMjI3MXByb3BlcnN1YnNldHByb3BlcnN1cGVyc2V0bm90c3Vic2V0dW5pMjI4NWNpcmNsZXBsdXN1bmkyMjk2Y2lyY2xlbXVsdGlwbHl1bmkyMjk4dW5pMjJBMnVuaTIyQTN1bmkyMkE0cGVycGVuZGljdWxhcnVuaTIyQTZ1bmkyMkI2dW5pMjJCN2RvdG1hdGh1bmkyMkVFdW5pMjJFRnVuaTIzMDB1bmkyMzAydW5pMjMwM3VuaTIzMTB1bmkyMzIwdW5pMjMyMXVuaTIzMjZ1bmkyMzI3dW5pMjMyOXVuaTIzMkF1bmkyMzJCdW5pMjM3RHVuaTIzODB1bmkyM0QzdW5pMjQyM3VuaTI0NjB1bmkyNDYxdW5pMjQ2MnVuaTI0NjN1bmkyNDY0dW5pMjQ2NXVuaTI0NjZ1bmkyNDY3dW5pMjQ2OHVuaTI0Njl1bmkyNDZBdW5pMjQ2QnVuaTI0NkN1bmkyNDZEdW5pMjQ2RXVuaTI0NkZ1bmkyNDcwdW5pMjQ3MXVuaTI0NzJ1bmkyNDczdW5pMjQ3NHVuaTI0NzV1bmkyNDc2dW5pMjQ3N3VuaTI0Nzh1bmkyNDc5dW5pMjQ3QXVuaTI0N0J1bmkyNDdDdW5pMjQ3RHVuaTI0N0V1bmkyNDdGdW5pMjQ4MHVuaTI0ODF1bmkyNDgydW5pMjQ4M3VuaTI0ODR1bmkyNDg1dW5pMjQ4NnVuaTI0ODd1bmkyNEI2dW5pMjRCN3VuaTI0Qjh1bmkyNEI5dW5pMjRCQXVuaTI0QkJ1bmkyNEJDdW5pMjRCRHVuaTI0QkV1bmkyNEJGdW5pMjRDMHVuaTI0QzF1bmkyNEMydW5pMjRDM3VuaTI0QzR1bmkyNEM1dW5pMjRDNnVuaTI0Qzd1bmkyNEM4dW5pMjRDOXVuaTI0Q0F1bmkyNENCdW5pMjRDQ3VuaTI0Q0R1bmkyNENFdW5pMjRDRnVuaTI0RDB1bmkyNEQxdW5pMjREMnVuaTI0RDN1bmkyNEQ0dW5pMjRENXVuaTI0RDZ1bmkyNEQ3dW5pMjREOHVuaTI0RDl1bmkyNERBdW5pMjREQnVuaTI0REN1bmkyNEREdW5pMjRERXVuaTI0REZ1bmkyNEUwdW5pMjRFMXVuaTI0RTJ1bmkyNEUzdW5pMjRFNHVuaTI0RTV1bmkyNEU2dW5pMjRFN3VuaTI0RTh1bmkyNEU5dW5pMjRFQXVuaTI0RUJ1bmkyNEVDdW5pMjRFRHVuaTI0RUV1bmkyNEVGdW5pMjRGMHVuaTI0RjF1bmkyNEYydW5pMjRGM3VuaTI0RjR1bmkyNEY1dW5pMjRGNnVuaTI0Rjd1bmkyNEY4dW5pMjRGOXVuaTI0RkF1bmkyNEZCdW5pMjRGQ3VuaTI0RkR1bmkyNEZFdW5pMjRGRmZpbGxlZGJveEgyMjA3M3RyaWFndXB1bmkyNUIzdW5pMjVCNnVuaTI1Qjd0cmlhZ2RudW5pMjVCRHVuaTI1QzB1bmkyNUMxdW5pMjVDNnVuaTI1Qzd1bmkyNUM5bG96ZW5nZWJpZ2NpcmNsZXVuaTI1Q0VIMTg1MzN1bmkyNUQwdW5pMjVEMXVuaTI1RDJ1bmkyNUQzdW5pMjVENHVuaTI1RDV1bmkyNUQ2dW5pMjVEN29wZW5idWxsZXR1bmkyNjA1dW5pMjYwOXVuaTI2MTl1bmkyNjFCdW5pMjYxRXVuaTI2Mjd1bmkyNjJGdW5pMjYzOXVuaTI2M0F1bmkyNjNCdW5pMjYzQ3VuaTI2M0R1bmkyNjNFdW5pMjYzRmZlbWFsZXVuaTI2NDFtYWxldW5pMjY0M3VuaTI2NDR1bmkyNjQ1dW5pMjY0NnVuaTI2NDd1bmkyNjQ4dW5pMjY0OXVuaTI2NEF1bmkyNjRCdW5pMjY0Q3VuaTI2NER1bmkyNjRFdW5pMjY0RnVuaTI2NTB1bmkyNjUxdW5pMjY1MnVuaTI2NTN1bmkyNjYwdW5pMjY2M3VuaTI2NjV1bmkyNjY2dW5pMjY2OW11c2ljYWxub3RlbXVzaWNhbG5vdGVkYmx1bmkyNjZDdW5pMjY2RHVuaTI2NkV1bmkyNjZGdW5pMjY5NXVuaTI2OTh1bmkyNkEydW5pMjZBM3VuaTI2QTR1bmkyNkE1dW5pMjZBQ21hcnJpZWRkaXZvcmNlZHVuaTI2QUZ1bmkyNzE0dW5pMjcxOGRpZWR1bmkyNzY3dW5pMjc3NnVuaTI3Nzd1bmkyNzc4dW5pMjc3OXVuaTI3N0F1bmkyNzdCdW5pMjc3Q3VuaTI3N0R1bmkyNzdFdW5pMjc3RnVuaTI3QzJ1bmkyN0U2dW5pMjdFN3VuaTJDNjB1bmkyQzYxdW5pMkM2MnVuaTJDNjN1bmkyQzY0dW5pMkM2NXVuaTJDNjZ1bmkyQzY3dW5pMkM2OHVuaTJDNjl1bmkyQzZBdW5pMkM2QnVuaTJDNkN1bmkyQzc0dW5pMkM3NXVuaTJDNzZ1bmkyQzc3dW5pMkUwMnVuaTJFMDN1bmkyRTA0dW5pMkUwNXVuaTJFMDh1bmkyRTA5dW5pMkUwQXVuaTJFMTd1bmkyRTE4dW5pQTcxRHVuaUE3MjB1bmlBNzIxdW5pQTc2NVR1eHVuaUUwMDF1bmlFMDAydW5pRTAwM3VuaUUwMDR1bmlFMDA1dW5pRTAwNnVuaUUwMDd1bmlFMDA4dW5pRTAwOXVuaUUwMEF1bmlFMDBCY29weWxlZnRsZWFmemVyby5zbGFzaGZpdHRlZHplcm8uZml0dGVkb25lLmZpdHRlZHR3by5maXR0ZWR0aHJlZS5maXR0ZWRmb3VyLmZpdHRlZGZpdmUuZml0dGVkc2l4LmZpdHRlZHNldmVuLmZpdHRlZGVpZ2h0LmZpdHRlZG5pbmUuZml0dGVkRXVyby5maXR0ZWRZZW4uZml0dGVkdW5pRTAxQ2EuYWx0dW5pRTAxRXBlcnRob3VzYW5kemVyb3plcm8ub2xkc3R5bGVvbmUub2xkc3R5bGV0d28ub2xkc3R5bGV0aHJlZS5vbGRzdHlsZWZvdXIub2xkc3R5bGVmaXZlLm9sZHN0eWxlc2l4Lm9sZHN0eWxlc2V2ZW4ub2xkc3R5bGVlaWdodC5vbGRzdHlsZW5pbmUub2xkc3R5bGVBZGllcmVzaXMuYWx0T2RpZXJlc2lzLmFsdFVkaWVyZXNpcy5hbHRXLmFsdGZfYmZfZl9oZl9mX2pmX2Zfa2ZfZl90Zl9oZl9qZl9rZl90Y19rY19odF90Y190bG9uZ3NfaWxvbmdzX2xvbmdzdW5pRTA0MHVuaUUwNDF1bmlFMDQybG9uZ3NfbGxvbmdzX2xvbmdzX2lsb25nc19zYWUuYWx0bG9uZ3NfaFFfdVRfaHRfemguYWx0Z2VybWFuZGJscy5hbHRnZXJtYW5kYmxzLnNzMDNHZXJtYW5kYmxzLmFsdHVuaUUwNEZhbXBlcnNhbmQuYWx0YS5zY2Iuc2NjLnNjZC5zY2Uuc2NmLnNjZy5zY2guc2NpLnNjai5zY2suc2NsLnNjbS5zY24uc2NvLnNjcC5zY3Euc2NyLnNjcy5zY3Quc2N1LnNjdi5zY3cuc2N4LnNjeS5zY3ouc2N1bmlFMDZCaHlwaGVuLnNjYWdyYXZlLnNjYWFjdXRlLnNjYWNpcmN1bWZsZXguc2NhdGlsZGUuc2NhZGllcmVzaXMuc2NhcmluZy5zY2FlLnNjY2NlZGlsbGEuc2NlZ3JhdmUuc2NlYWN1dGUuc2NlY2lyY3VtZmxleC5zY2VkaWVyZXNpcy5zY2lncmF2ZS5zY2lhY3V0ZS5zY2ljaXJjdW1mbGV4LnNjaWRpZXJlc2lzLnNjZXRoLnNjbnRpbGRlLnNjb2dyYXZlLnNjb2FjdXRlLnNjb2NpcmN1bWZsZXguc2NvdGlsZGUuc2NvZGllcmVzaXMuc2NvZS5zY29zbGFzaC5zY3VncmF2ZS5zY3VhY3V0ZS5zY3VjaXJjdW1mbGV4LnNjdWRpZXJlc2lzLnNjeWFjdXRlLnNjdGhvcm4uc2N5ZGllcmVzaXMuc2Npai5zY2dlcm1hbmRibHMuc2NhbHRnZXJtYW5kYmxzLnNjUV91LnNjZGNyb2F0LnNjYWJyZXZlLnNjYW9nb25lay5zY2NhY3V0ZS5zY2NjYXJvbi5zY2RjYXJvbi5zY2VvZ29uZWsuc2NlY2Fyb24uc2NnYnJldmUuc2NsYWN1dGUuc2Nsc2xhc2guc2NuYWN1dGUuc2NuY2Fyb24uc2Nlbmcuc2NvaHVuZ2FydW1sYXV0LnNjcmFjdXRlLnNjcmNhcm9uLnNjc2FjdXRlLnNjc2NlZGlsbGEuc2NzY2Fyb24uc2N0Y2VkaWxsYS5zY3RiYXIuc2N1cmluZy5zY3VodW5nYXJ1bWxhdXQuc2N6YWN1dGUuc2N6ZG90YWNjZW50LnNjemNhcm9uLnNjbGNhcm9uLnNjdGNhcm9uLnNjdGNvbW1hYWNjZW50LnNjc2NvbW1hYWNjZW50LnNjaWRvdGFjY2VudC5zY2FtcGVyc2FuZC5zY2Euc2NhbHRhLnN1cGVyaW9yYi5zdXBlcmlvcmMuc3VwZXJpb3JkLnN1cGVyaW9yZS5zdXBlcmlvcmYuc3VwZXJpb3JnLnN1cGVyaW9yay5zdXBlcmlvcm0uc3VwZXJpb3JvLnN1cGVyaW9ycC5zdXBlcmlvcnEuc3VwZXJpb3J0LnN1cGVyaW9ydS5zdXBlcmlvcnYuc3VwZXJpb3J6LnN1cGVyaW9yZi5zaG9ydGZfZi5zaG9ydHVuaUUwRTh1bmlFMEU5Vi5hbHRLLmFsdFIuYWx0Si5hbHR1bmlFMEVFdW5pRTBFRnVuaUUwRjB3LmFsdHVuaUUwRjJ1bmlFMEYzdW5pRTBGNHVuaUUwRjV5LmFsdHVuaUUwRjl1bmlFMEZCa3JlaXN1bmlFMTAxdW5pRTEwNHVuaUUxMDV1bmlFMTA2dW5pRTEwN3plcm8uY2Fwb25lLmNhcHR3by5jYXB0aHJlZS5jYXBmb3VyLmNhcGZpdmUuY2Fwc2l4LmNhcHNldmVuLmNhcGVpZ2h0LmNhcG5pbmUuY2FwemVyby50YWJvbGRzdHlsZW9uZS50YWJvbGRzdHlsZXR3by50YWJvbGRzdHlsZXRocmVlLnRhYm9sZHN0eWxlZm91ci50YWJvbGRzdHlsZWZpdmUudGFib2xkc3R5bGVzaXgudGFib2xkc3R5bGVzZXZlbi50YWJvbGRzdHlsZWVpZ2h0LnRhYm9sZHN0eWxlbmluZS50YWJvbGRzdHlsZXVuaUUxMjh1bmlFMTI5dW5pRTEyQXVuaUUxMzBiLmluZmVyaW9yYy5pbmZlcmlvcmQuaW5mZXJpb3JmLmluZmVyaW9yZy5pbmZlcmlvcmguaW5mZXJpb3JpLmluZmVyaW9yai5pbmZlcmlvcmsuaW5mZXJpb3JsLmluZmVyaW9ybS5pbmZlcmlvcm4uaW5mZXJpb3JwLmluZmVyaW9ycS5pbmZlcmlvcnIuaW5mZXJpb3JzLmluZmVyaW9ydC5pbmZlcmlvcnUuaW5mZXJpb3J2LmluZmVyaW9ydy5pbmZlcmlvcnkuaW5mZXJpb3J6LmluZmVyaW9yZ3JhdmUuY2FwYWN1dGUuY2FwY2lyY3VtZmxleC5jYXBjYXJvbi5jYXBicmV2ZS5jYXBodW5nYXJ1bWxhdXQuY2Fwc3BhY2VfdW5pMDMwRi5jYXBicmV2ZWludmVydGVkY21iLmNhcGJyZXZlLmN5cmNhcGJyZXZlLmN5cmRpZXJlc2lzLmNhcGhvb2thYm92ZWNvbWIuY2FwZG90YWNjZW50LmNhcG1ldHJpY3plcm8uc2xhc2hwYXJlbmxlZnQuc2NwYXJlbnJpZ2h0LnNjYnJhY2tldGxlZnQuc2NicmFja2V0cmlnaHQuc2NicmFjZWxlZnQuc2NicmFjZXJpZ2h0LnNjZXhjbGFtZG93bi5zY3F1ZXN0aW9uZG93bi5zY2d1aWxsZW1vdGxlZnQuc2NndWlsbGVtb3RyaWdodC5zY2d1aWxzaW5nbGxlZnQuc2NndWlsc2luZ2xyaWdodC5zY2h5cGhlbi5jYXB1bmlGNkJFZl9mZl9pZl9sZl9mX2lmX2ZfbGxvbmdzX3RzX3R1bmlGRkZENC43LjNMaW51eCBMaWJlcnRpbmUgYnkgUGhpbGlwcCBILiBQb2xsLCBPcGVuIEZvbnQgdW5kZXIgVGVybXMgb2YgZm9sbG93aW5nIEZyZWUgU29mdHdhcmUgTGljZW5zZXM6CkdQTCAoR2VuZXJhbCBQdWJsaWMgTGljZW5zZSkgd2l0aCBmb250LWV4Y2VwdGlvbiBhbmQgT0ZMIChPcGVuIEZvbnQgTGljZW5zZSkuCkNyZWF0ZWQgd2l0aCBGb250Rm9yZ2UgKGh0dHA6Ly9mb250Zm9yZ2Uuc2YubmV0KSBTZXB0IDIwMDMsIC4uLiwgMjAwOUxpbnV4IExpYmVydGluZSBPTGludXggTGliZXJ0aW5lIE8AAAAAAQACAAMABAAFAAYABwBoAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQAB8AEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAYcAYABhAGIAZwBkAKAAZgCDAKoAiwBqAJcBiAClAIAAoQCcAYkBigB9AYsBjAByAIUBjQCPAHgAngCbAKMAewCuAKsArACwAK0ArwCKALEAtQCyALMAtAC5ALYAtwC4AJoAugC+ALsAvAC/AL0AqACNAMQAwQDCAMMAxQCdAJUAywDIAMkAzQDKAMwAkADOANIAzwDQANEA1gDTANQA1QCnANcA2wDYANkA3ADaAJ8AkwDhAN4A3wDgAOIAogDjAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AbUBtgG3AbgBuQG6AbsBvAG9Ab4AkQG/AcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQCMAJIBzgHPAdAB0QHSAdMB1AHVAdYB1wHYAdkB2gHbAdwAjgCUAd0B3gHfAeAB4QHiAeMB5AHlAeYB5wHoAMAA3QHpAeoB6wHsAe0B7gHvAfAB8QHyAfMB9AH1AfYB9wH4AfkB+gH7AfwB/QH+AMYB/wIAAgECAgDHAOQCAwIEAgUCBgIHAggCCQIKAgsCDAINAg4CDwIQAhECEgITAhQCFQBlAhYCFwIYAhkCGgIbAhwCHQIeAh8CIAIhAiICIwIkAiUCJgInAigCKQIqAisCLAItAi4CLwIwAjECMgIzAjQCNQI2AjcCOAI5AjoCOwI8Aj0CPgI/AkACQQJCAkMCRAJFAkYCRwJIAkkCSgJLAkwCTQJOAk8CUAJRAlICUwJUAlUCVgJXAlgCWQJaAlsCXAJdAl4CXwJgAmECYgJjAmQCZQJmAmcCaAJpAmoCawJsAm0CbgJvAnACcQJyAnMCdAJ1AnYCdwJ4AnkCegJ7AnwCfQJ+An8CgAKBAoICgwKEAoUChgKHAogCiQKKAosCjAKNAo4CjwKQApECkgKTApQClQKWApcCmAKZApoCmwKcAp0CngKfAqACoQKiAqMCpAKlAqYCpwKoAqkCqgKrAqwCrQKuAq8CsAKxArICswK0ArUCtgK3ArgCuQK6ArsCvAK9Ar4CvwLAAsECwgLDAsQCxQLGAscCyALJAsoCywLMAs0CzgLPAtAC0QLSAtMC1ALVAtYC1wLYAtkC2gLbAtwC3QLeAt8C4ALhAuIC4wLkAuUC5gLnAugC6QLqAusC7ALtAu4C7wLwAvEC8gLzAvQC9QL2AvcC+AL5AvoC+wL8Av0C/gL/AwADAQMCAwMDBAMFAwYDBwMIAwkDCgMLAwwDDQMOAw8DEAMRAxIDEwMUAxUDFgMXAxgDGQMaAxsDHAMdAx4DHwMgAyEDIgMjAyQDJQMmAycDKAMpAyoDKwMsAy0DLgMvAzADMQMyAzMDNAM1AzYDNwM4AzkDOgB+AIgDOwM8Az0DPgM/A0ADQQNCA0MDRANFA0YDRwNIA0kDSgCBAIIAhACHAH8AhgNLA0wDTQNOA08DUANRA1IDUwNUA1UDVgNXA1gDWQNaA1sDXANdA14DXwNgA2EDYgNjA2QDZQNmA2cDaANpA2oDawNsA20DbgNvA3ADcQNyA3MDdAN1A3YDdwN4A3kDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgOHA4gDiQOKA4sDjAONA44DjwOQA5EDkgOTA5QDlQOWA5cDmAOZA5oDmwOcA50DngOfA6ADoQOiA6MDpAOlA6YDpwOoA6kDqgOrA6wDrQOuA68DsAOxA7IDswO0A7UDtgO3A7gDuQO6A7sDvAO9A74DvwPAA8EDwgPDA8QDxQPGA8cDyAPJA8oDywPMA80DzgPPA9AD0QPSA9MD1APVA9YD1wPYA9kD2gPbA9wD3QPeA98D4APhA+ID4wPkA+UD5gPnA+gD6QPqA+sD7APtA+4D7wPwA/ED8gPzA/QD9QP2A/cD+AP5A/oD+wP8A/0D/gP/BAAEAQQCBAMEBAQFBAYEBwQIBAkECgQLBAwEDQQOBA8EEAQRBBIEEwQUBBUEFgQXAJgEGAQZBBoEGwQcBB0EHgQfBCAEIQQiBCMEJAQlBCYEJwQoBCkEKgQrBCwELQQuBC8EMAQxBDIEMwQ0BDUENgQ3BDgEOQQ6BDsEPAQ9BD4EPwRABEEEQgRDBEQERQRGBEcESARJBEoESwRMBE0ETgRPBFAEUQRSBFMEVARVBFYEVwRYBFkEWgRbBFwEXQReBF8EYARhBGIEYwRkBGUEZgRnBGgEaQRqBGsEbARtBG4EbwRwBHEEcgRzBHQEdQR2BHcEeAR5BHoEewR8BH0EfgR/BIAEgQSCBIMEhASFBIYEhwSIBIkEigSLBIwEjQSOBI8EkASRBJIEkwSUBJUElgSXBJgEmQSaBJsEnASdBJ4EnwSgBKEEogSjBKQEpQSmBKcEqASpBKoEqwSsBK0ErgSvBLAEsQSyBLMEtAS1BLYEtwS4BLkEugS7BLwEvQS+BL8EwATBBMIEwwTEBMUExgTHBMgEyQTKBMsEzATNBM4EzwTQBNEE0gTTBNQE1QTWBNcE2ATZBNoE2wTcBN0E3gTfBOAE4QTiBOME5ATlBOYE5wToBOkE6gTrBOwE7QTuBO8E8ATxBPIE8wT0BPUE9gT3BPgE+QT6BPsE/AT9BP4E/wUABQEFAgUDBQQFBQUGBQcFCAUJBQoFCwUMBQ0FDgUPBRAFEQUSBRMFFAUVBRYFFwUYBRkFGgUbBRwFHQUeBR8FIAUhBSIFIwUkBSUFJgUnBSgFKQUqBSsFLAUtBS4FLwUwBTEFMgUzBTQFNQU2BTcFOAU5BToFOwU8BT0FPgU/BUAFQQVCBUMFRAVFBUYFRwVIBUkFSgVLBUwFTQVOBU8FUAVRBVIFUwVUBVUFVgVXBVgFWQVaBVsFXAVdBV4FXwVgBWEFYgVjBWQFZQVmBWcFaAVpBWoFawVsBW0FbgVvBXAFcQVyBXMFdAV1BXYFdwV4BXkFegV7BXwFfQV+BX8FgAWBBYIFgwWEBYUFhgWHBYgFiQWKBYsFjAWNBY4FjwWQBZEFkgWTBZQFlQWWBZcFmAWZBZoFmwWcBZ0FngWfBaAFoQWiBaMFpAWlBaYFpwWoBakFqgWrBawFrQWuBa8FsAWxBbIFswW0BbUFtgW3BbgFuQW6BbsFvAW9Bb4FvwXABcEFwgXDBcQFxQXGBccFyAXJBcoFywXMBc0FzgXPBdAF0QXSBdMF1AXVBdYF1wXYBdkF2gXbBdwF3QXeBd8F4AXhBeIF4wXkBeUF5gXnBegF6QXqBesF7AXtBe4F7wXwBfEF8gXzBfQF9QX2BfcF+AX5BfoF+wX8Bf0F/gX/BgAGAQYCBgMGBAYFBgYGBwYIBgkGCgYLBgwGDQYOBg8GEAYRBhIGEwYUBhUGFgYXBhgGGQYaBhsGHAYdBh4GHwYgBiEGIgYjBiQGJQYmBicGKAYpBioGKwYsBi0GLgYvBjAGMQYyBjMGNAY1BjYGNwY4BjkGOgY7BjwGPQY+Bj8GQAZBBkIGQwZEBkUGRgZHBkgGSQZKBksGTAZNBk4GTwZQBlEGUgZTBlQGVQZWBlcGWAZZBloGWwZcBl0GXgZfBmAGYQZiBmMGZAZlBmYGZwZoBmkGagZrBmwGbQZuBm8GcAZxBnIGcwZ0BnUGdgZ3BngGeQZ6BnsGfAZ9Bn4GfwaABoEGggaDBoQGhQaGBocGiAaJBooGiwaMBo0GjgaPBpAGkQaSBpMGlAaVBpYGlwaYBpkGmgabBpwGnQaeBp8GoAahBqIGowakBqUGpganBqgGqQaqBqsGrAatBq4GrwawBrEGsgazBrQGtQa2BrcGuAa5BroGuwa8Br0Gvga/BsAGwQbCBsMGxAbFBsYGxwbIBskGygbLBswGzQbOBs8G0AbRBtIG0wbUBtUG1gbXBtgG2QbaBtsG3AbdBt4G3wbgBuEG4gbjBuQG5QbmBucG6AbpBuoG6wbsBu0G7gbvBvAG8QbyBvMG9Ab1BvYG9wb4BvkG+gb7BvwG/Qb+Bv8HAAcBBwIHAwcEBwUHBgcHBwgHCQcKBwsHDAcNBw4HDwcQBxEHEgcTBxQHFQcWBxcHGAcZBxoHGwccBx0HHgcfByAHIQciByMHJAclByYHJwcoBykHKgcrBywHLQcuBy8HMAcxBzIHMwc0BzUHNgc3BzgHOQc6BzsHPAc9Bz4HPwdAB0EHQgdDB0QHRQdGB0cHSAdJB0oHSwdMB00HTgdPB1AHUQdSB1MHVAdVB1YHVwdYB1kHWgdbAToAbwCJB1wHXQdeAEEACAB1B18AaQB3AHYHYABwAHEAdAdhAO4A7QB5B2IHYwB6B2QHZQdmB2cHaAdpB2oAawBsB2sHbAdtB24HbwBjB3AHcQdyB3MHdAd1B3YHdwd4B3kHegd7B3wHfQd+B38HgAeBB4IHgweEB4UHhgeHB4gHiQeKB4sHjAeNB44HjweQB5EHkgeTB5QHlQeWB5cHmAeZB5oHmwecB50HngefB6AHoQeiB6MHpAelB6YHpweoB6kHqgerB6wHrQeuB68HsAexB7IHswe0B7UHtgCZB7cHuAe5B7oHuwe8B70Hvge/B8ABRAFFB8EHwgfDB8QHxQfGAUABQQFCAUMHxwfIB8kHygfLB8wHzQfOB88H0AfRB9IH0wfUB9UH1gfXB9gH2QfaB9sH3AfdB94H3wfgB+EH4gfjB+QH5QfmB+cH6AfpB+oH6wfsB+0H7gfvB/AH8QfyB/MH9Af1B/YH9wf4B/kH+gf7B/wH/Qf+B/8IAAgBCAIIAwgECAUIBggHCAgICQgKCAsIDAgNCA4IDwgQCBEIEggTCBQIFQgWCBcIGAgZCBoIGwgcCB0IHggfAKYIIAghCCIIIwgkCCUIJggnCCgIKQgqCCsILAgtCC4ILwgwCDEIMggzCDQINQg2CDcIOAg5CDoIOwg8CD0IPgg/CEAIQQhCCEMIRAhFCEYIRwhICEkISghLCEwITQhOCE8IUAhRCFIIUwhUCFUIVghXCFgIWQhaCFsIXAhdCF4IXwhgCGEIYghjCGQIZQhmCGcIaAhpCGoIawhsCG0IbghvCHAIcQhyCHMIdAh1CHYIdwh4CHkIegh7CHwIfQh+CH8IgAiBCIIIgwiECIUIhgiHCIgIiQiKCIsIjAiNCI4IjwiQCJEIkgiTCJQIlQiWCJcImAiZCJoImwicCJ0IngifCKAIoQiiCKMIpAilCKYIpwioCKkIqgirCKwIrQiuCK8IsAixCLIIswi0CLUItgi3CLgIuQi6CLsIvAi9CL4IvwjACMEIwgjDCMQIxQjGCMcIyAjJCMoIywjMCM0IzgjPCNAI0QjSCNMI1AjVCNYI1wjYCNkI2gjbCNwI3QjeCN8I4AjhCOII4wjkCOUI5gjnCOgI6QjqCOsI7AjtCO4I7wjwCPEI8gjzCPQI9Qj2CPcI+Aj5CPoI+wj8CP0I/gj/CQAJAQkCCQMJBAkFCQYJBwkICQkJCgkLCQwJDQkOCQ8JEAkRCRIJEwkUCRUJFgkXCRgJGQkaCRsJHAkdCR4JHwkgCSEJIgkjCSQJJQkmCScJKAkpCSoJKwksCS0JLgkvCTAJMQkyCTMJNAk1CTYJNwk4CTkJOgk7CTwJPQk+CT8JQAlBCUIJQwlECUUJRglHCUgJSQlKCUsJTAlNCU4JTwlQCVEJUglTCVQJVQlWCVcJWAlZCVoJWwlcCV0JXglfCWAJYQliCWMJZAllCWYJZwloCWkJaglrCWwJbQluCW8JcAlxCXIJcwl0CXUJdgl3CXgJeQl6CXsJfAl9CX4JfwmACYEJggmDCYQJhQmGCYcJiAmJCYoJiwmMCY0JjgmPCZAJkQmSCZMJlAmVCZYJlwmYCZkJmgmbCZwJnQmeCZ8JoAmhCaIJowmkCaUJpgmnCagJqQmqCasJrAmtCa4JrwmwCbEJsgmzCbQJtQm2CbcJuAm5CboJuwm8Cb0Jvgm/CcAJwQnCCcMJxAnFCcYJxwnICckJygnLCcwJzQnOCc8J0AnRCdIJ0wnUCdUJ1gnXCdgJ2QnaCdsJ3AndCd4J3wngCeEJ4gnjCeQJ5QnmCecJ6AnpCeoJ6wnsCe0J7gnvCfAJ8QnyCfMJ9An1CfYJ9wn4CfkJ+gn7CfwJ/Qn+Cf8KAAoBCgIKAwoECgUKBgoHCggKCQoKCgsKDAoNCg4KDwoQChEKEgoTChQKFQoWChcKGAoZChoKGwocCh0KHgofCiAKIQoiCiMKJAolCiYKJwooCikKKgorCiwKLQouCi8KMAoxCjIKMwo0CjUKNgo3CjgKOQo6CjsKPAo9Cj4KPwpACkEKQgpDCkQKRQpGCkcKSApJCkoKSwpMCk0KTgpPClAKUQpSClMKVApVClYKVwpYClkKWgpbClwKXQpeCl8KYAphCmIKYwpkCmUKZgpnCmgKaQpqCmsKbAptCm4KbwpwCnEKcgpzCnQKdQp2CncKeAp5CnoKewp8Cn0Kfgp/CoAKgQqCCoMKhAqFCoYKhwqICokKigqLCe0DAAABAABOAABRAABqAACEAADgAAKWAALIAAQKAAQbAARuAATDAATNAATeAATxAAUDAAURAAUqAAVGAAXzAAaDAAanAAa+AAbVAAb+AAcRAAenAAfQAAfnAAgKAAgYAAgrAAg5AAjIAAmkAAm9AAnqAAn+AAoYAAp2AAslAAu+AAvXAAvqAAv/AAweAAxAAAxTAAxvAAyLAA0SAA0xAA1aAA6GAA9kAA95AA+IAA+YAA+mABDFABFUABGMABGgABHYABHrABILABIeABJFABJkABJ5ABKnABLGABLfABPGABURABUzABVWABVwABWCABWiABZcABZ3ABagABevABfIABfwABgCABj9ABkMABkcABkrABk7ABlcABm7ABnTABowABpFABpIABpiABv4AByvAB0qAB5OAB5mAB/eAB/1ACCBACCeACCtACDxACEDACHBACHmACIDACIbACJ5ACKcACKrACNUACRPACRiACR2ACSIACTDACTSACT3ACVXACWTACW2ACXYACX6ACYcACZNACZ7ACfCACgoAChDACiIACjNACkSAClfACl5ACmUACmvACnWACnzACooACpMACpwACqUACrFACr2ACsiACtKACtoACuGACukACvIACvjACyCAC07AC1sAC2dAC3OAC4LAC5FAC6FAC64AC7hAC8HAC8tAC9TAC+NAC+nAC/CAC/dADAHADCNADDCADDlADEIADErADFhADGTADKAADKoADLQADL4ADMgADNUADNqADSAADSjADTEADT4ADUhADVcADa6ADefADe8ADfZADf2ADgTADgzADhUADhxADiRADi0ADlSADnXADqTADrZADsAADtHADuAADvHADvwADzGAD2eAD3jAD4LAD45AD6lAD7dAD9gAD+RAEABAEA3AECqAEDMAEDxAEIaAEOOAEO2AESRAEStAEUDAEUiAEWuAEaTAEd7AEecAEevAEfPAEgPAEgsAEhKAEh4AEifAEnmAEoVAEoxAEplAEqxAErkAEsLAEs9AEttAEv/AEyMAEy1AEzcAE0LAE04AE1hAE2KAE22AE9MAFB8AFCgAFDEAFDtAFEaAFFGAFF0AFJBAFL2AFMnAFNPAFOIAFOxAFPhAFQLAFRVAFTMAFUWAFVFAFbwAFfcAFglAFhXAFl3AFqLAFrAAFrhAFuwAFxjAFyOAFzEAFzhAF0LAF0tAF1hAF2LAF3DAF3pAF4cAF88AGCUAGEDAGEbAGE2AGFNAGJMAGJ3AGKiAGLXAGMGAGM3AGNkAGPmAGTGAGXzAGYwAGbFAGd8AGgkAGjCAGmxAGp7AGqYAGuFAGwtAGzYAG19AG4xAG5OAG7PAHAOAHC5AHHRAHLWAHP/AHSDAHUDAHY9AHc2AHevAHi0AHp3AHs2AHysAH1JAH1xAH2cAH7QAH+2AICLAIF4AIJLAILGAINSAIN3AIP8AIUSAIWoAIZAAIbMAIbmAIhBAIjZAIleAIolAIrVAIuZAIxPAIxkAIzjAI1eAI3yAI7TAI8uAI+bAJA2AJDlAJD7AJEbAJFTAJFsAJHOAJIPAJLoAJMZAJNgAJOeAJPJAJQKAJTtAJUOAJVCAJVdAJV3AJWaAJXAAJXeAJYJAJY0AJZ3AJceAJf6AJiwAJmOAJomAJr2AJsXAJtOAJuYAJvnAJwmAJymAJzsAJ2PAJ8AAJ8tAJ+dAJ/FAKDzAKEXAKE6AKFnAKGTAKGyAKIyAKJTAKLIAKMBAKP8AKQqAKSWAKYRAKa6AKbjAKcKAKi4AKkGAKmHAKnIAKn6AKopAKpQAKqLAKq2AKrtAKs4AKtnAKuwAKvnAKwIAKwqAKxMAKzMAKz2AK0kAK1PAK19AK37AK4sAK5qAK6bAK6/AK7yAK8WAK9HAK+YAK/VALAQALAxALDMALFWALF4ALGkALMcALQHALSYALUrALWeALYVALY6ALZwALbcALcQALdSALeNALggALhgALiHALitALj9ALkqALlGALleALpeALs4ALwIALweAL0FAL4yAMAfAMGwAML8AMN3AMTUAMXNAMZIAMbjAMenAMh0AMlEAMoiAMp9AMtRAMxwAM0JAM2KAM2rAM+UAM+7ANBsANJkANLeANPTANTgANWNANYyANbpANdnANitANnjANrnANt8ANuPANujANyeAN1KAN3MAN6RAOATAOHnAOOUAOSuAOXOAOZjAOb3AOfkAOh+AOmeAOo3AOsoAOu5AOypAO0lAO2LAO3uAO6DAO8fAPA5APDBAPFoAPHSAPJcAPLzAPNdAPRzAPUAAPUbAPYaAPd4APi9APmUAPsjAPvRAPxUAP1TAP45AP7QAP9oAP/BAP/rAQAeAQCYAQGwAQHIAQJ5AQOIAQRUAQVTAQaQAQeHAQk0AQojAQuoAQyLAQ3oAQ+SARGRARKFARNxARONARPCARRvARUeARYJARa/ARbpARepARgrARi8ARloARl3ARpHARqWARqxARrkARr2ARsJARtRARuXARv/ARxgARx+ARycARyvARzSARzhARzrAR0sAR0+AR1RAR1kAR1yAR2FAR2YAR2rAR3JAR3XAR4fAR5lAR53AR6MAR7cAR8LAR8fAR8vAR9JAR9bAR94AR+TAR/hASAvASDhASGEASHhASMaASOqASPFASPkASQFASQkASQ/ASRUASRuASSNASSqASUQASVYASWgASW9ASXaASXzASZZASbCASd+ASfKASfiASgUAShLASh/ASiyASj7ASlCASl0ASl8ASmEASmXASnlASn1ASoTASonASo3ASpOASpgASp5ASqIASqQASrRASrxASsBASsgASszAStFAStWASuwASvBASvUASvnASwpASxqASyiASzVAS0bAS0sAS0/AS2NAS23AS3oAS4WAS4pAS5FAS5dAS5vAS6AAS6RAS6jAS7AAS8aAS9DAS9wAS+DAS+ZAS+yAS/EAS/QAS/rATAFATAWATAiATA/ATByATC4ATEAATEjATF+ATIHATMQATMlATM3ATNJATNkATN1ATOTATOlATPCATPXATPxATQtATVGATYIATaLATbfATcUATdbATehATfUAThiATiBATigATkKATkdATktATm0ATpwATrXATriATrwATr9ATsKATtpATuaATvKATxQATyiAT0RAT1JAT3UAT53AT8oAT/WAUEQAUGLAUHqAUJ2AUN6AUPHAUP6AUQMAUQgAURCAURlAUSIAUSXAUS3AUTXAUTrAUUyAUVTAUVuAUWRAUWsAUXgAUYTAUYsAUZZAUaEAUbCAUb4AUcaAUczAUemAUe5AUfYAUitAUjAAUjcAUoNAUopAUpRAUp+AUqjAUrLAUreAUwSAUwkAU10AU2eAU3FAU3qAU4dAU5OAU59AU6YAU7RAU73AU/cAVCGAVEvAVFWAVIBAVImAVKAAVKTAVO1AVR4AVU4AVYMAVbvAVcKAVevAVfRAVhSAVitAVkwAVlLAVnSAVrHAVvEAVvdAVwMAVw7AVxfAVyCAVyjAV0rAV3vAV4DAV4eAV7VAWCzAWFEAWJQAWMbAWPcAWSnAWUxAWYTAWacAWcyAWdYAWfyAWhLAWjfAWlXAWlrAWmOAWooAWqHAWrqAWtyAWuFAWv2AWwJAWwsAWxQAWyVAWziAW6YAW7OAW9VAW+RAW+kAW/LAXB+AXF1AXMdAXRxAXVUAXV0AXWYAXcGAXcfAXdcAXeJAXe0AXkDAXk5AXoyAXpaAXpxAXqWAXtqAXxFAXxYAXxxAXyNAXy1AXziAXz2AX0eAX0xAX32AX4IAX7VAX+mAYB8AYF4AYIUAYI9AYJcAYLkAYNTAYQ1AYRcAYTvAYUiAYXRAYarAYbKAYbrAYcQAYcnAYjQAYmPAYqXAYwFAYwdAYw4AY2gAY6UAY6pAY9WAY9mAZA7AZBKAZG+AZHXAZOjAZVpAZY/AZZoAZaJAZboAZgWAZj5AZkfAZlZAZo1AZryAZuAAZuoAZxpAZ0pAZ21AZ8PAaC4AaHqAaK2AaLUAaL0AaRoAaSFAaSlAaWMAaY6AaddAaiXAal+AaphAau3Aa0dAa46Aa9TAbDmAbKUAbO0AbSlAbXFAbcXAbdOAbh4AbiZAbi1AbjpAbkZAbmRAbqyAbrTAbrzAbtGAbvpAbydAb2EAb7yAb90Ab/gAcBSAcEwAcI1AcNkAcSzAcYZAcb+AcfEAcjMAcmeActVAcx9Ac2gAc75AdCIAdHVAdKvAdN8AdThAdbkAdfLAdmxAdsWAdxsAd17Ad5UAd7TAd9RAd9kAeAlAeFWAeI8AePRAeUPAeX8AebNAed8AegvAelhAetdAewYAez7Ae2jAe46Ae9pAfCAAfCTAfGgAfLOAfRWAfV1AfZXAfcqAfgvAfoCAfqvAftiAfuLAfvAAfvtAfwnAfyeAfzRAf0XAf1MAf1pAf2KAf25Af3uAf+GAf+7Af/2AgAxAgBIAgC/AgDfAgD+AgEmAgLUAgMBAgMzAgNqAgOpAgQqAgSHAgUnAgWYAgW3AgXQAgX3AgYaAgY+AgZgAgdFAgeFAggCAgh3AgjHAgkJAgkhAglXAgl9AgmlAgm2AgnOAgn1AgoIAgoWAgolAgo0AgphAgpyAgqGAgqeAgqxAgrHAgrYAgrnAgsrAguIAguxAgvJAgvsAgwJAgymAgzBAg0eAg2nAg5LAg5eAg6qAg7yAg+CAg/qAhB+AhDgAhFFAhGfAhKfAhMtAhPjAhR6AhVRAhXKAhYLAhcIAheiAhfSAhf9AhgZAhgtAhhKAhjnAhkVAhlVAhmUAhplAhqlAhrPAhsOAhs3AhtbAhuNAhuyAhv1AhwcAhxgAhyFAhzEAh2iAh6zAh7UAh8PAh/IAiCJAiDdAiEYAiFbAiGBAiHVAiIPAiKNAiLWAiOUAiO2AiPkAiRTAiR3AiSkAiTLAiT0AiUeAiaPAifIAimCAimrAisPAis4Ait4AiwoAiz5Ai0hAi1AAi1rAi2QAi25Ai3bAi4NAi4wAi5rAi6XAi7HAi7mAi8SAi8tAi9JAi9yAi+SAi/AAi/iAjARAjA+AjBoAjCXAjDCAjDtAjEXAjE+AjFkAjJVAjMvAjO1AjQGAjSiAjVpAjWpAjZxAjavAjbhAjcgAjdVAjeIAjevAjfjAjgKAjhJAjh8AjivAjjaAjknAjliAjmwAjnnAjo5AjrYAjswAjvgAjxAAjyEAjy9AjzhAj0bAj1BAj15Aj2WAj3JAj3jAj4KAj4+Aj5qAj6gAj68Aj7jAkA/AkEcAkF1AkG2AkHcAkIBAkIgAkI/AkKMAkKjAkK9AkLUAkL4AkMcAkM5AkNXAkN3AkOXAkO9AkPZAkQHAkQqAkRMAkRpAkSaAkTFAkT8AkUtAkVgAkWOAkW2AkXiAkYHAkYsAkZlAkb0AkejAkinAkl7AkoJAkowAkpnAkqTAkrTAksJAkvkAkyMAkzRAk0FAk1wAk25Ak38Ak4rAk5oAk8aAk/+AlChAlGDAlG6AlIHAlJZAlLNAlMBAlNHAlOPAlO5AlQFAlQ2AlSJAlTCAlWUAlXOAlaZAlbTAldvAlesAliHAljGAlkWAllGAlltAlmZAlm7AlnnAloQAlo4AlpnAlqVAlrNAlsEAluuAlvlAlweAlyeAlzoAl0mAl1XAl2FAl22Al3tAl4eAl5VAl6RAl7WAl8YAmB8AmCyAmDuAmERAmE+AmFjAmGaAmHDAmHwAmIZAmJGAmJvAmKqAmLjAmMkAmNMAmOCAmOdAmOzAmPWAmUtAmYrAmZQAmZ4AmagAmeUAmhHAmiZAmj7AmnPAmq0AmrtAmsmAmtlAmukAmveAmwdAmxgAmyqAmzZAm0IAm2jAm3YAm4LAm4/Am5/Am6/Am73Am8wAm9wAm+xAm/xAnA2AnCCAnDPAnEjAnGAAnIPAnJtAnKkAnLbAnMYAnNWAnOkAnPoAnQxAnR0AnSaAnTBAnT1AnUpAnVdAnWmAnXiAnYfAnZCAnZmAnaPAna1AnbfAncHAnc4AndqAneKAnerAnfRAngFAngrAnhZAniQAnjHAnjwAnkaAnlKAnl9AnmyAnnqAnoWAnpDAnp3Anq1AnrpAnseAntEAntsAnuaAnvLAnwBAnw+AnxxAnylAnzHAnz1An4WAn5OAn56An6nAn7aAn8GAn+SAn/GAn//AoA5AoB3AoC2AoD8AoFOAoGaAoHhAoIuAoJ7AoKuAoLhAoMRAoNCAoNwAoOfAoO5AoPUAoP4AoQcAoQ+AoRhAoSCAoSjAoT0AoVCAoWaAoXuAoZxAobFAocnAoeCAofGAogKAokxAol7AonEAooOAopeAoqwAoruAoswAot7Aou/AowbAoxlAoy2Ao0HAo1GAo2GAo3PAo4YAo5hAo7DAo8PAo9eAo+dAo/UApAVApBMApEQApFSApGhApHqApI6ApKLApLjApNHApOlApP+ApRaApS4ApTzApUnApVoApWiApXjApYeApZoApaRApayApbSApbyApciApcrApc9ApdPApdkApeNApfBApfuApgkAphdApijApjqApkxAplSAplzApmiApm8ApnWApn2ApoYApo1ApplApqYApq6Apr/ApseAps6AptVAptwApuKApulApvHApv1ApwYApxdApyWApzFApz1Ap0fAp1kAp2DAp2fAp27Ap3WAp5EAp5iAp6CAp6VAp7BAp7mAp9DAp9qAp+bAp++Ap/gAqAVAqBJAqCJAqCdAqCnAqCpAqCsAqCuAqCxAqC0AqC3AqC6AqC9AqDAAqDDAqDGAqDHAqDZAqDrAqEMAqEuAqFRAqF0AqGPAqGsAqHBAqHWAqHqAqIGAqIkAqJAAqJbAqLZAqNNAqQLAqQsAqRDAqRRAqRnAqSFAqSVAqSYAqTgAqVbAqVvAqWJAqWkAqW3AqXQAqXrAqX1AqX/AqaUAqa9AqhjAqh1Aq2OAq2hAq5RAq6IAq6+Aq8OAq/TArAEArAjArCYArCwArDIArDpArEhArFOArFuArGKArGgArHAArHNArHcArK0ArLTArNYArO2ArQxArRFArRcArR8ArS4ArTlArUFArUfArUzArVRArVdArVrArYGArYmArZFArd9ArfeArgRArg5ArkZArmzArsZAr0CAr6jAr9tAsBTAsICAsOAAsPtAsR9AsV+AsWqAsX/AsbDAsf9AsivAsn3AspxAss7AswRAsyHAs2sAs7HAs9uAtARAtERAtHwAtNcAtSaAtUjAtVNAtYfAtZzAtacAta0AtbXAtb0AtfTAtjTAtkMAtlfAtmHAtnHAtoGAto1AtpnAtqgAtrgAts4AtuCAtvvAtwHAtz/At4PAt9fAuEQAuInAuPhAuWrAub3Aui2AunvAuuzAu2TAu6IAu6dAu95AvCYAvC4AvHBAvLlAvRzAvSCAvYqAvckAvg5AvqPAvqeAvzoAv90Av+IAv+dAv/LAv/rAwA8AwFSAwKdAwMIAwNwAwOpAwPlAwQdAwRXAwTpAwV/AwZQAwchAwf2AwjHAwk0AwmgAwngAwpHAwsNAwsbAwspAws4AwtHAwtgAwt3AwwVAwzjAw2AAw3IAw4QAw5YAw6jAw8cAw+mAxC+AxHaAxLuAxQCAxQxAxR8AxVYAxWBAxYcAxdtAxetAxfvAxg0AxlGAxmDAxnKAxreAxscAxveAxyGAxzoAxz1Ax0lAx1WAx1rAx1/Ax2RAx2uAx3BAx3PAx39Ax4eAx55Ax7UAx7tAx8ZAyA6AyGIAyGeAyHmAyIGAyJ6AyKfAyLDAyMMAyNXAyNsAyOJAyOwAyWhAyW5AyXNAyaxAybTAyfXAylvAymJAyn1AyoZAyq2AysAAytLAyuOAyufAyxWAy0DAy3oAy7LAy7/Ay80Ay/WAzCDAzFaAzHhAzMtAzPSAzPyAzQSAzQvAzRDAzRkAzTKAzUxAzVEAzVmAzWIAzbNAzcAAzcaAzcxAzdeAzeRAzf8AzhOAziCAzizAzkkAzlLAznZAzoXAzo1AzuLAz1LAz7XA0CzA0I3A0MfA0QyA0TIA0YcA0bfA0g7A0oFA0ubA02BA08TA1AFA1JYA1MIA1RqA1crA1dOA1dxA1eUA1h2A1iYA1kDA1klA1m/A1poA1qZA1taA1uFA1uwA1yZA10vA14VA16nA19IA1/5A2AqA2NaA2UYA2ZGA2ehA2nyA2wbA23RA3B5A3HOA3JGA3UyA3akA3gUA3oMA3qBA3wmA3z4A39IA4DrA4LrA4SHA4ZxA4f/A4v1A44cA4/HA5BtA5CVA5C3A5FEA5FtA5I9A5MuA5QiA5S6A5VVA5bgA5eRA5m2A5qZA5rCA5uxA5vZA5yeA50vA52TA55UA552A56YA5/dA6C8A6DeA6GOA6HlA6JdA6MSA6OBA6PhA6Q5A6R9A6TPA6VkA6YTA6d7A6lVA6sLA6zxA66TA6/5A7EYA7G5A7McA7WDA7W5A7XGA7XfA7XuA7YKA7YYA7YzA7ZCA7ZeA7ZuA7aLA7abA7bSA7b3A7cdA7c4A7eFA7eOA7epA7fbA7gMA7g+A7hiA7iKA7ihA7i4A7jvA7kVA7loA8B6A8FbA8LIA8TDA8VXA8byA8iDA8lFA8m3A8oWA8p2A8sGA8ttA8vXA8xQA8zvA82DA85WA88bA8+AA8/4A9CqA9E4A9IXA9LhA9O7A9Q/A9T+A9VwA9ZDA9dvA9fgA9hZA9jRA9kiA9lJA9l1A9nQA9onA9qgA9r7A9taA9wDA91yA93xA+AsA+LGA+USA+WvA+XfA+fhA+iyA+lbA+nrA+qHA+r9A/IPA/JgA/LBA/MwA/ObA/PyA/RFA/SCA/TcA/UrA/VqA/V+A/WpA/XWA/ZXA/bJA/f1A/hqA/lHA/r3A/wMA/zhA/2PA/7JA//6BAB5BAD5BAHABAJvBAMhBAOYBAOqBAO+BAPaBAP2BARPBASOBATqBAVTBAb5BAdLBAd2BAegBAnJBA3MBA7wBBAcBBFjBBGKBBGxBBHxBBI6BBQ6BBU/BBjgBBq9BBtMBByuBB2CBB2eBB5LBB7jBB8HBB8eBB9DBB9sBB/wBCCOBCC3BCJhBCN4BCU3BCXyBCfWBCgOBChPBCjFBCjbBCkBBCkWBCk7BClkBCl+BCmtBCnYBCoEBCoxBCpWBCv3BC1SBC/sBDGNBDQ8BDX+BDfIBDjrBDrHBDwABD2SBD8+BEBuBEGcBEKDBEQUBEtwBEw6BFJmBFOxBFW/BFcCBFfiBFmpBFvUBF1+BF5PBF9cBGCiBGHIBGM+BGQYBGUcBGU0BGXVBGXqBGYHBGYsBGbTBGb5BGexBGfGBGfcBGjgBGjzBGoeBGrZBGr3BGuKBGxTBGySBGy/BGzYBGzvBG2rBG8JBHECBHEaBHHjBHHlBHH3BHIVBHIzBHJSBHKDBHKvBHLcBHSEBHWrBHXWBHYBBHYsBHZpBHaEBHafBHa6BHbjBHcEBHc9BHdiBHeHBHetBHf2BHglBHkNBHo/BHpdBHp6BHqZBHsuBHtNBHxoBH1WBH13BH4PBH7nBIAkBIBFBIBvBIGUBIGwBIHPBIH2BIMXBIPHBIQABIQcBISwBITbBIUJBIZXBIaDBIa4BIbxBIctBIhbBIiaBInzBIreBIsIBIstBItSBIt7BIuhBIvDBIvlBIzWBI0VBI01BI3NBI8yBI9PBI9uBI+IBI+xBI/TBJCYBJETBJKSBJS4BJT1BJW2BJZeBJZ/BJcbBJe0BJg0BJjyBJrOBJurBJyJBJ0iBJ35BJ7kBJ+eBKAzBKGVBKKgBKNsBKRDBKS+BKVMBKadBKdBBKgCBKgoBKhBBKiZBKk+BKtvBKwwBK09BK2jBK4EBK6eBK8jBK+xBLAvBLEPBLFsBLIUBLL0BLM4BLOnBLO9BLPjBLP4BLQdBLRGBLRgBLSPBLS6BLTgBLUdBLVvBLWBBLWgBLW4BLXgBLakBLclBLgQBLiFBLivBLouBLrRBLzoBL2/BL5/BL6fBL9QBL+sBL/NBMBtBMB/BMCOBMFiBMF2BMG8BMHPBMIyBMJEBMJYBMMVBMMyBMNGBMNaBMNsBMODBMOZBMOpBMSzBMWDBMYCBMZ/BMbwBMdsBMhhBMlRBMlpBMmMBMmfBMmyBMnEBMnWBMnoBMn+BMsDBMwnBM0CBM5nBM/gBNCrBNHxBNKNLIu9+Om+AYu9+CS9A7347xX3PvuS+z77kgWpXhX3PveS9z77kgX7IPe/Ffc+95KL/JAF+1z3vxX7PveR9+iLBfw4/RsV+Ij5TvyIBg777Q77x4H1+MZ3Aeb1A/ck+SYVIApW/PsVIQoO+5f4P/duAcrhs+ED92v4PxUiCvsSihUiCg77L/dKvfcBvQH3nPd8FfsAi533AfaLBa8W5YuTvTCLpvc9Z4tx+z37AIun9z1ni3D7PTOLg1nji3r7ATKLBYRZ44tw+z2ui6f3PfWLcfs9r4un9z3ki5K9MYsFDvsv///2MzP/ACJMzf///YAAdv8CHBmY/wAd5mgStahyy+Ot69NOqBOm55cV/wATzM2L/wAcmZn//+yAAP8AOZma///9szMI//+4zM2t/wBHzM0H/wCbMzT/AArmZ/8ADMzM/wB5zM2L/wAggACL/wBlmZr//5CzNP8AL//+///HTMz/ABWzNAj/ANWAAAf/ADUZmv//+UzM/wAdMzL//90zNP8AE7M0//+/szQIE22QeaiPBYO8gryIuP//2oAAi23/AAazNP//z4AA/wABGZgI/wA3MzRpUwf//7YZmv//+IAA//+x5mb//8+zNIv//6nMzIv//53MzP8AXJma///XgAL/ADtmZv//5eZmCP//EEzMBxN2//+9gAD/AAmzM///0uZm/wA25mf///CZmv8AO+ZmCG6IBZNTk1eLZgigi4iWm4sI9yD/AO7mZhX/ACiAAP//8DMz/wA3gAD//+OZmov//7BMzYv//7QZmv//xpma///oszP//9lmZv//++ZmCGn/AT2ZmBUTLP//2TMz/wASGZr//87Mzf8AH7M0i/8ALuZmi/8APDM0s/8AJOZku5EIDrV/qvdiqrqq9yqwnqoBxMH3GazwwvcYrAP4Rd4VIwpUmhUkCn34OxUlCvuR+w8VJgoO9wKBwVWs+Aas91CsErbdv9X3H9D3UKATf/eO9+YVlnbb+wjEQFpIZ2dEi0yLVa6L7QiL0qHB8sQI9z/7iBWoZgUTv7pKsImqi66LuKei0f//+szM/wAFZmb///szNP8ABJmagIt3ZHR8aot7i22fbLYIZ70F/wAnmZrE/wAWf/6z/wAa5mi7ud3/AAbMzP8ABTM0/wA9MzT/AAPMzJGRi6CFkXeKbYppi2mLYox3jIWFi3aRhQj/ADYZmP///UzM/wAO5mj///qzNP//2mZoRf//7uZm///gGZr//+fMzP//1TMz///b5mb//8qzM13JUd55qgiHkwXeu83Mi8IIylG4RSdVRFAei2WZZLBL+xhBVkiLPAgTf/sO4F/2HuCLwrS5ygj7GPfPFXG8f7GLogjNvKiltKJtXh6LZ2ZXS2EIDvwp+D73bgHA4QPa+D4VIgoO+7233gO395AVi16P+3v3ZPtIlY2Tko6TarH7Cfcei/ebi/eb9wr3Hquv///8mZr/AApMzP//+czM/wAG5mj///SZmv8AAMzM+wslLvs7i/tOCA77vfc/3gP3kveQFYu4h/d7+2T3SIGJg4SIg6xl9wn7Hov7m4v7m/sK+x5rZ/8AA2Zm///1szP/AAYzNP//+Rma/wALZmb///8zM/cL8ej3O4v3TggO+3b3PPi3FScKDkf3ZLwB94K+A/e195UVKAoO/Av7GaP3A+gB9xeyA/PqFSkKDvuV93PHAbP3lgP3o/dzFSoKDvwLgfUBxPUDxLYVIQoO+6T5GncBmveqA/e5+RoVYov7gf1VtIsFDvsvgKz4na4BsN33Wt0D93D4sxUrCof8vhUsCg77L4ms+Ld3Afdn2AP3tPcOFffRB4vH/wABTMzI/wABszSYi/8ABMzM///9gAD/AAAzNP///IAAi///yLMz///dszT//8tMzf//50zMM2L/AAGZmv//9Jma/wAEZmb///aAAJT///nmZv8ALYAAnv8AFoAAkZ6LCP8AEIAA/wADgABzaR/7vAeLOHqGRYiFhYt2kYW8jKmMvYu7i6OKvYqRkYughZFFjnqQi94IDvsvi8n4d6wBxtH3RN4DxfhPFXede5+bp5+dHouTiY+JkomShpOLkwijmq3QrcVzMB6LTnVaU1IIRUYFLix8XotTCIu8jake9zkGqbeJix+XvZXTjKeFkH+Mgol7SHp0aYsI+zwGi7jMy5CQCOrnBf8ANeZm/wA0MzT/ACkZmv8AKczMi9MI8S+1PiJTPVIeDvsvgaz3qan3a6wSu9D3PtRa3xP492P4tRUtChP0LgoT+C8KDvsviaz3Drj4EHcB95fPA/gr91oVMAoO+y+BrPfAuvcbygH3wt8D98L3RxUxCg77L4Gs97qs92CjAbXZ92PZA/cc/wFEzMwVMgr///cZmv//20zOFTMKDvsvlHb4mskBu6YD9zX4jhU0Cg77L4Gs+J6sErjLYs73QstfzxPY93P4tRXJo2JfH4tYV19xeAhunQVPsoSsi6gIt6qvxB73KjUVNQoT5GRpe2CLZggq0Fjv9xDG5tMei8Jz/wAt5mZa/wAgGZoIUbEFtafMuYvICPsx/EgVYEup4B+Lp5jO3MEIt3AF/wA65mb//9vmZv8AFxma///TGZqLXggsRXtgHg77L4Gj92Cs97qsAarZ92PZA/fA/wDzMzMVNgr/AAjmZv8AJLMzFTcKDvvnsvX3MfUB5fUD5ff3FSEK+5sEIQoO++f7GaP3A+j3Y/US5fVushPw5ff3FTgKvfuYFTkKE+g6Cg77ANT33wH3DveDFTsKDkf3JLzXvAH4YffSFTwKPwQ8Cg77ANL33wH4AveAFT0KDvs0gfX4pqwSuc+p9Uas594T7PcG+NAVqbOjxMSxUkoei1x8bmNm//+/mZr//8RmZv//+mZm///FmZqLYAhdB4STiJOTlI6SHrcHi6OMo5iklJyfm6Kcuq3Jt4vai+ZJxyWLVothfW5ybXN2b4tlCGikg5uen5eiHouYiZGHkAiHkImRi5oIE/Sp/KUVOAoO98D7Mqz3LLb3yar3PqoBxtv3GtT3Pc/3RNsD+M330BWLaXpYfmxsQlpSaItMi3y3i7uLyZzLvr6pqraUnIuvi6hyi2UImfuGFYv/AAaAAJL/ACGAAJGmCMf3lnyQVn6GcwWBpWmcaosIIfsT+wb7I2OhN+8frovBqLfVCI2KBYNyhHSLfAh7knKo927R9yH3BvdP+y/3Ivtr+3X7TftB+2v7afcw+zz3gx73BYvHrse5CH6dBVVgTXQ2iwj7lj/3bPcq94H3PPH3LPcR90Mo+2L7OkxcJYmCjZUfDu+JrPdmtfgLdwH3m/evFT4K+677YBU/Cg6Eiaz3wa33i60S9eD3bNxp6BP491P4zhVACmkE0AYT9EEKYPi3FUIKE/hDCg6+gbT44rABsOb4SqwD9/mBFUQKDvWJrfjZrQH14PgH6wP3U94VRQpg+MYVRgoOXYmsbLL3sLH3iLNsrBLs4PdKrLKsm64TN4D3pff9FUcKE6+ASAoTZ4BJChOngLvbiYsfmb2azZO+///1mZr/AAXmZv//9IAA/wACTM3///LmZv///MzNCBN3gEoKDvsKiaz3uLH3iLNsrBLs4PdMrLCqE+73p/fXFeCLjnSOXpGFoIuRkYquip6LrYutjKGMqYWRdouFhYhUiH42iwgu92YGo5eVox70BtaLm2OhRgiqkAX///rMzLT///DmZv8AYGZo///+mZr/AAeZmP///5ma/wACTMz///7MzP8AALM0///9mZqL///ugAD///yZmP//+jM0////Zmj//+hMzIsI//8AszQGE95LCg7vga/3ia/3zrASq+b4NeBhrRP4+A35JhX7QPtB+xf7cPtB9x/7JPddH/cKi96uz8WAlIaTi5YI9wQHi/8AIzM0nP8ACczMqI6RkYujhZFtiniKY4tki2WMXIyFhYtzkYX/ADbmaP//+8zM/wAbGZj///xMzov//9fmZgj7KQdpa1J7VYsI+0Yt9z33GPdD9PcL9xsfE/RMCg73G4ms97a194+sAfXg9+rgA/j+9w4VTQoO+76JrPjbrAH14AP3U/cOFU4KDvvX+0C4+XmsAfch4AP3dvifFU8KDrWJrP8BFeZm/wAmZmb/AQqzNKwB9eAD91P3DhVQCg5GiaxssvjTrBLz4PevrBN49ycWUQoTuFIKE3hTChO4VAoO94iJrPjbrAH/ApazNPcIFVUKDvOWdpOs+NusEvG8+Cm8E3j4wPiUFVYKE7hXCg72ga347K0BsOv4SesD99/5BBVYCvfj+7sVWQoOS4ms94+t98KtAfPg93XoA/dR+L4VqJqu09DQdPsT+wBXXyoecotjjYCOCDb3XhX8JQeLOHqGRYiFhYt2kYW8jKmMvovDi7GKvYqRkYughZE9j3OPi94I9z4HoYSjiK6LCPdKwvcL4MZk9vtNH3GLRIRji1mLboxZjIWFi3aRhdGInIaLOAgO9vtlxLG3+UqtAbDr+EnrA/ff+QQVWAr7VP2dFVoKDoOBqnSs95it97mtEvPg92znEzz3pPj+FVsKOPyEFVwKE7xdChN8XgoO+wKBr/jqrQG+/wBHZmb/AO2Zmt8D/wGKmZr5CxX//8YzNJP/AAIzMp7//55mZov//6SZmosoSIshi///ouZm/wBC5mb//8/Mzv8ATYAA///eTMzK///kmZr/AGWZmv//7TMyi///jTM0izr//9LmaGH//7AzMov//6KZmov//8PMzP8AKoAAdf8AY4AACP//87Mzj///9WZn///+GZr///ZmZv//+uZmjz6PcZdayov/ABvmZ3T/AFizM4v/AHjMzov/AGCZmOeL8Yv/AF8zNEq7//+35mb/AB7MzP//zxma/wAUzMz//3hmZv8AIzM0i+0IyP8ALZmavv8AP+ZmHv8AYRmai6pNn0n/AAuAAP8AADM0l////szMlJL///yAALuHp///9ZmawAgOg4ms+NOyAaiq92Hg91CpA/fy9w4V+DoHrZ+nrx7JBsKLknucPv8AC0zM/wAATMz/AAtMzP///xmc/wALZmj/AAWZmIO+hsGLvIH////maIH///8ZmIGICIWKenYe/EcGdouckR////gzM/8AAszM///4Zmf/AALMzP//8GZm///+ZmiHWoVXf1b/AAnmZv//++Zo/wALmZr///7mZP8ADIAA/wAAMzSf25iYwosI2gawn29sH/w9B4s4eoY7iIWFi3aRhbyMr4zCi8GLroq9ipGRi6CFkTuOepCL3ggOzYG0+NusAeLg9/a8A/dA+J8VXwoO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d7kS29r3gOET3PdD9+MVfgqDrBV/ChPsgAoT3IEKDi/7fqz3U7f4B60BruH3ddoD99b/AXBmZhWf///pmZqP///xGZqL///n5mYI+3oHi3mKhn7///kzM///6Jma///z5mf//+UzMv///uZm///wMzSLCFE0tfcr87XV2x//AB5mZov/ABqzNP//8+Zm/wAV5mb//+eAAAij//4gmZoViziAh06IhYWLdpGFtYyljLeLtoukiraKkZGLoIWRTo6Aj4veCPikB5mHloAehIv///oZmv//+EzM///35mb///SzNH55h4h//wAHzMz//+BmZv8AFIAAZP8ACLM0///VmZqLCPsOMSf7GC7K+xD3JB+mi/8AIOZm/wAFmZr/ABEZmpWi/wANZmaPjYt2CA77c4ms9+7JVacS79oT0O/30RWCChOwgwoO+2iBrIl2+CqsEruqetL3IddVqxN0u/ceFYQKE6yFChOqhgoTtIcKDvurgcL37bIB5NoDtvhBFYgKDkWBuvf9rAHj2vdS2gP3bYEVsou0n7z/AChMzf8ABMzM/wAD5mb/AAczNP8AAczNi4SL///oszOW///cTM2Li/8AB5ma///9GZr/AAOzMv8AAIAA/wAHszT/AAJmZqGdsZrIkpGRi5qFkQhLkIKei7wI91QHqY//AEjmZose/wADGZqIjoYehop8inyLa4tqjGaMhYWLdpGFvIiYf4tJCPtVB4t4///+GZr///gzM///8eZm///zzM1ma2t7cosIbVmZ5B/3Sgepj/8ASOZmix7/AAMZmoiOhh6GinyKfItri2qMZoyFhYt2kYW7h5mAi0oI+1QHRqlI7h4OKZR2+C6sAffZ+CIViQoO9yyUdvgurAH3X/giFYoKDiKJrPgDrAH3Svf6FYsKDj/7fNv4uqwB92T7NBWMCg77P4ut9/2tmXYSs6wTsMj4ThWNChPQjgoTsI8KE9CQCg770vtoo/n7owH10wP3RvjGFYvmq56xlpGRi5eFkSaIYmiL+wcI+0wHi1l7WVN7CHwHwX6dX4tOCPs+B4v7FrNs8YmRkYuXhZEIX3G/0x/3MweL4IK1UaS8oJ2mi+YIDvwa+2d2+jZ3Ady3A/cR+3wV+jZf/jYHDvvS+2mj+fujAerTA+pHFYswa3hlgIWFi3+RhfCOtK6L9wcI90wHi72bvcObCJoHVZh5t4vICPc+B4v3FmOqJY2FhYt/kYUIt6VXQx/7MweLNpRhxXJadnlwizAIDvsm92nGkcYBpZz3+ZwDpfdlFZEKDvvtDvvH+2R2+Mb1Aeb1A/ck+3kVkgrA+PsVkwoO+y+Udv8AXzMz/wAr5mb33qn/AFrmZncB/wBBTM3/AE1mZv8ATUzNrf8ANzM0/wBOTMwD93D41hX//6IzNAf//7CzM///8IAA//+0mZr//7QZmov//45mZov//5QzM/8AN+Zm//+zMzP/AGLMzf//9ZmZCP//n8zNrf8AXzMzB/8AMbM0/wACMzL/ACxmZv8AE4AA/wAqGZrQ///8Zmb/AAgZmv//+MzM/wADmZr///fmZv8AAOZm///hZmb//9hmZv//2UzO///sMzT//9lMzIv///zmZov///zmaP8AABmZ///85mb/AABMzQj/AUmZmgf/AC0zNP///LM0/wAGmZr//+JMzP8AA2Zm///iTMz/AALMzP//57M0/wAMgAD///fmZv8AEuZmi/8AEuZmi/8AGTM0/wALszSL/wAb5maL/wAwszT//85mZv8AI7My//+sGZr/AAEZmgj/AFrmZgdp//5HZmYV///TGZr/ABaAAP//35mZ/wA6GZqL3Iv/AFRMzP8AH0zN/wA3mZq5/wAOmZoIDvsvgb+Ps/dYsvdouAGa07bbA9H3rhXHewaLNYA/U2JxfXV8i3kIfJuAnaCclqGVkJisHt6LjFPgi8mLuq2ivIeShv8AAkzNg/8AALMzcmlehG+L//++mZqL/wALGZq3//+KTMyLq6mxwIz3BQjxBpWYj5MfoAePiY2GHvsKzgbdrsq3HqCLmYCXgJaBlIOZiwiim5qjrVWXdR9Zi2B2amlXWHJXizsIeGAHeoV/gx9+B4aMipAeDvsv9wW19561AbXH933IA/H3tRXSvMjRyb9RQERdTUVEXcjUHvcJ+0QVtIuvl6ykCLlYr7FXtwWjqpivi7OLtX6vcqkIwrdktF1UBWukZ5dii2SLaIBqcwhdvmZjv2IFcW1+Zotgi2KYZqVsCFVgtGO2wAWrc69/s4sIDvsviazrssqz96CsAfdJ2wP3SfcOFZD7GgeGi4yQH5gHk5CXnB73Ccr7GgaGi4yQH5kHk5CXnB73BYsm92MFeq93oGSPhZGLoJGRqYq1ipiLkYu7jKmMkYWLdoWF///dszOL///2MzP///9maP8AEBma///emZgI8PtljYv/AEizNPc7Bf8AHeZm/wBEszSP/wADMzT//9BmZv8ABBmYhZGLoJGRqYqoipuLm4ucjKmMkYWJdoWFWf//+5mY////szT///2ZnP//4MzM//+6zMwI//+pgAD7VPcOiwWPjomHH3YHgn6HgR77CEz3GAaPjomHH3cHgn6HgR77CIYGizichtuIkYWLdoWFWYxqjFaLVYtoilqKhZGLoJGR246ckIveCA78FNy8A/cW+TYVWvv+vAb7KwRa+/68Bg77DvtAqvmUqhK9wXPQWNj3D9hY0HPBE+L3Ef8BnzM0Ff//04AA///cGZr//+GAAP//0DMyi///v4AAi/sP/wBqMzP//9RmZv8ATMzN///WmZrMaKVmi1yLXWloXIsIE8pgi3yogbGGnoGhcYsIcIJ6dmS1TezywM3NH4u1gf8AIYAAaP8AI0zNCBPR/wAsgAD/ACPmZ/8AHoAA/wAtzMyL/wBCgACL9w///5XMzP8AK5ma//+zMzT/AClmZkqucbCLuou5ra66iwgT1LaLmm6VZZB4lXWliwimlJygsmHJKiRWSUkfi2GV///egACu///cszQI/wDJzMz//rqzMhX//+yAAJv//+czNP8AEMzN///ggAD/ABJMzQgT4UO1QLOL54v/ACKAAP8AEIAA/wAXMzT/ABnMzf8AF0zM/wATgAB7/wAYzM3//+9MzP8AH2Zm///tszTTYdZjiy+L///ggAD//+3mZv//4+Zm///n5mb//+qAAAgO+2z4pOoBvenW6QO9+NMVlAr3PRaUCg66oqvsqPeRou6rAa2z5sn36bMD+Ev3bBX///tmZv8ABhma///7Zmb/AAYzM///9jM0/wACszOAe29pWIsIR2jE1O2/pLMfxIugb5xdk4uSjJCOjKP///9mZv8AFrM0///1mZr/AB9MzHeNgJhFiwgzRUM3PM5F5B/Ci7asn6oI+wr7VRWVCvipBJYKDvu09/qr93KkAaq/9wHBA/dU+IoVlwq2+yQVmAoO+xf3D/drFZkK9zgWmQoOj/fXtwH4h8ED+IfuFZ6C/wASZmj/AAKZmv8AEJmY/wAGZmYI96D8lQf///lMzXmO///yzMz/AAOzM///8zM0CPhfBg77lfdzxwGz95YD96P3cxUqCg66oqv3BKPso/cB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EDMzgAgT9v8AEuZmff8AEuZmef8AE8zNi/8AKWZmi/8AGhmasv8ACszNx///+pmaj///9v//jv//9hmaigj///NmZmH///YZm4H//+wzM4sI///85mb8VxXgCg77voms+Nus7b0B9eAD95P5fRXuCvc0/QMVTgoO+9iJrPf2p6h3670B8doD/wDb5mb4mhX/AAuzM/8ACeZnoJeR///8ZmaWgh///zWAAAb///YZmv//9hmad3+E/wADmZmA/wAIGZof/wCiszP8IBXgCg77voms+NusuL8BmKfM4M2nA/ex+bkV7wot/T8VTgoO+9iJrPf2p6h33MTldwH/AAPmZv8AGEzN/wBJzM3a/wApmZr/ABhMzAP/ABwzM/keFf//57MzfwX/AAyZmjb/AC3mZlnKi/8ANRmai/8AOZmZvP8ACszN4Qj//+ezNJcFglH//9aZmWv//9EzM4v//89mZ4v//9lMzbD///YZmcAI/wCYzM38pBXgCg77vvtcsfc0rPjbrBLUyW7gE/D3o/sbFYeShY+Ci3V1e3tuiwhmfqClubzO0h////+Zmv8AAIAABf8AB2Zm////zM3/AAezNP///+Zm/wAITMz////MzZGRi6CFkQgT6EWOepCL3gj4JQeL3pyQ0Y6RkYughZFaim2KWItZi26MWYyFhYt2kYXRiJyGizgI/CUHizh6hkWIhYWLdpGFvIypjL6L/wAHGZqL/wAGszP////mZv8ABmZmiwgT8P//w4AA///lGZr//9xMzf//xoAAi///1oAAi1Wxd72LCLSLs5+ouAgO+9j7XLH3NKz39qeod/cR7xLIyWrvM9oT/PeX+xsVh5KFj4KLdXV7e26LCGZ+oKW5vM7SH////8zN/wAAMzP/AAozM////8zNBZGRi6CFkQgT+U6PgI+L3gj/AMdMzAf/ADGzNI/Lix6Pho6DHv//44AAgP//2IAAgkaCiYWNe42F/wA2gAD///rmZv8ACoAA///6GZqLUgj7VweLOICIToaFhYt2kYW1jKWMt4sI/wAPTM0GE/z//8OAAf//5Rma///cMzP//8ZmZov//9aAAItVsXe9iwi0i7OfqLgIE/r7PflyFXUKDvu+iaz426y+8xLp8y/gE/Dp+YIV9wQKE+js/QgV9xQKDvvYiaz4L3cB8doD90n3DhXgCg6O+0C49xGs+Nus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mov/AGJmZov/AF8zNEq7//+35mb/AB7MzP//zxma/wAUzMz//3hmZv8AIzM0i+2LyP8ALZmavv8AP+ZmiwgT9oD/AGEZmouqTZ9J/wALgAD/AAAzNJf///7MzJSS///8gAC7h6f///WzNMD//8YzNJP/AAIZmJ7//55MzYv//6SzM4soSIshi///ouZm/wBC5mb//8/Mzv8ATYAA///eTMwIE/sAyv//5Jma/wBlmZr//+0zMov//40zNIs6///SzMxh//+wMzSL//+igACLT/8AKoAAdf8AY4AA///zszOP///1Zmf///4Zmv//9mZm///65maPPo9xl1r/ADmZmov/ABwzM///7MzN/wBIMzP///yzMwhn//+pgACRhQWbkJWMnosIDvto+1yo1qvgdvgqrBK7qnrS38mG11WrE/gAu/ceFY9ajlyLYZWNlYyQi5KLkYuSif8AFWZm///6gAD/ABVMzf///EzN/wAaTM3///6zMwgT9gBn//+pgACRhQWbkJWMnosIopV9dnF2fW0fd4uAj3CVhISIhIt/pICchauLCMi5qraxbKNjH4KLgoqDiQj/ABVmZv8AOWZmBRP1AP8AOYAA/wADszT/AFkZmv8AHczMi/8AXBmai/8AREzN///OzMz/ACczM///vDM0/wAZszNP/wAWzM1jmovCi7Svoq2LCBP0gIYKE/kAhwoO+wKBr/jqrcd2Eqb/ACCAAP//94AA/wBHZmb/AO2Zmt9L/wAggAAT4Pdr+U0V9Ar/ALOzNEkV9yIKE+z3IwoT9PckChPq9yUKDvtogayJdvgqrPdidxK7qnrS9yHXVasTerv3HhWEChO2hQoTtYYKE7qHCvcN+AAV9QoOg/tcqNaryaz407ISkq1/qvdh4IPJ9xqpdq0T8QD3ySsVopV9dnF2fW0fd4uAj3CVhISIhIt/pICchauLCMi5qraxbKNjH4KLgoqDiQik/wBC5mYF/wApTMz////Mzf8AH4AA////GZr/ACozNP///zMzkZGLoIWRCBPyQDuOepCL3gj4Ogetn6evHskGwouSe5w+/wALTMz/AABMzP8AC0zM////GZz/AAtmaP8ABZmYCBP0gPcmChP6AIdahVd/Vv8ACeZm///75mj/AAuZmv///uZk/wAMgAD/AAAzNJ/bmJjCiwjaBrCfb2wf/D0Hizh6hjuI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B1b7BR+LMdhjqYAIE/BHeD9Ri/sAi/sl9xxq8ovbi7ilw5QInPckbY4Fc/sBN2RGiwg9Sbf3DMyp1vYf7AaWkZGYloWUgB9HBhPo+wdu4L3eyLTbH+6LokudOwiqkHj3IwVYkHWkRIsIDvsK+0C4+Fax1nf3UbNwqBLw3PdIrLaoE/fw3BX7SFhvah59i///+UzNk///+LMzlf//9kzN/wANMzP///SzM/8ADczNbIsIfXN9dWe1eaEfpIu3jLixxbm6yYv3FAj3cPcTB62LmIKObgiOcgWIjYaQHqGLj44FiLOKpoufi5+MqY6zCIePdYsFh4iHhx+IcgWIb399aIsI+xP3Zgajl5WjHvQG1oudY6FGCKiQBf//+szMtP//8OZm/wBgZmj///6Zmv8AB5mY////mZr/AAJMzP///szM/wAAszT///2Zmov//+6AAP///JmY///6szT///9maP//58zMiwj//wKzNAYT72SLYoxcjAgT94mJi3cFE++LiIz///yAAJL///+AAAipiQX/ACZmZv///WZo/wAMmZr///SZmItsCA77L/t8r/jesveEqAFtzvfY0gP3QfgaFX/7BAV3+06R+7Qzi3WLkp+El4WZgJN5iwh3f3h8eKlmwx/3DIub92S9+CIIjZvxiwWUmY+UH58Hj4iNhh77A4uZ9wQF/wANMzT1/wAdzMyhnYuii5VojnuOeJuFn4sIn5ecn6hxsjsfUYv//8NmZv//vMzM///rmZr//2wzNIdufHJniwhnBnmGf4MffgeGjIqPHg73EoGv94mv986wmdISq+b4NeBhrRP8+T75exX//9sZmIv//7kzNP//17M0///4Zmj//6mZmP//0hmY/wAKZmhh/wAfTMz//5ozNIsI+0D7QfsX+3D7Qfcf+yT3XR/3Covers/FgJSGk4uWCPcEB4v/ACMzNJz/AAnMzKiOkZGLo4WRbYp4imOLZItljFyMhYWLc5GF/wA25mj///vMzP8AGxmY///8TM6L///X5mYI+ykHaWtSe1WLCPtGLfc99xj3Q/T3C/cbHxP69yWLvDmlNQitkQWCtYWzhNMI////MzQG/wADzMz/ABuZmP8ADUzM/wAagAD/AByzNP8ABOZojYyOi46LkIuTipKLCKKmj6ofl4Ojbx4Ooft8tvm7qAH3VLvN1AP3t3cVmmSLYIt1CGx8aXR5gZemHouboNCpuAj3WfjkFfs5/E+Ii/su+E0FiJOKkYuRi5v/AA1mZv8ABeZo/wAimZr/AAQZmAicjQWQjI6Ni5AIi56JjQWLMoloZEeNix6JiYt4BYuGj////WZoj////5mYrYj/ABjmZob/AA4ZmmMI91H8qgVcM2xRi1kIaqBkwc25wdAei7KBxHLVCPdU+JMF/wANGZiu/wAQ5miTto6Q/wAATMyO/wACszSLkAiLnomNBYtXiWhkQo2LHomJi3gFho+Ijx6diQX/ADGAAP//+oAA/wAKMzSE///0TMz//+CAAAgO9wuBumSs9+LVV7/3XqmmdxLh2vdW2vdbsROfgPe++BcVtJ9/Ox/7NAeML7pW84sI29/X90sfE6+A9wxu0UZwfXh5HotsqYaXiqiGqXCLKwgpWCVAXHGozR73LAcTX4DyZb9EHv//zuZmi///0xmafk5H///8mZr///xMzP//+ZmZ///1szSLmQj/AADMzfd1Bf8AADMzzP8AA8zNs4uLi5KHjoKLcoFAfWOIiYONe5GFv4iXkIs3CPxJB4s4///0MzOHUYeFhYt2kYX/ACkzM4z/ABmZmoy2i7KL/wARszSK/wAqGZmKkZGLoIWR///NMzOPgo+L3gj/AKPmZgeL/wAVGZqU/wAMTMyT/wAIszQIsf8AJUzM/wAmmZr/ABWzNP8AJ2ZmiwgO+8WBwvjqqKV3AeXWA+X4xxX8bgdEpm+5HriLr6Gyt////LM0lIX/AAWZmv//90zM/wACZmZxd3yDcYsIcIWpyR/4UgfMjrOLHpKHjoIe///m5maB//+6mZp+///XgACICI1zBYuI/wACzM3///4zNP8AAzMz////zMwIq4kFn5V+Sh8O+76JrPfBsveHrAH14AP3U/cOFfdmzAeXlJqWkIiTgh9B9ywGi96ckNGOkZGLoIWRWoptiliLWYtujFmMhYWLdpGF0Yichos4CPssRAeCgXyBhY6Dkx/a+2YGizh6hkWIhYWLdpGFvIypjL6LvYuoir2KkZGLoIWRRY56kIveCA61iqj3rq33pqh0rRL13BPY+KD5JhVIi2dBUkX//9TmZv//yxma///kGZr//+HmZl5e///qZmb//+uzNP//7uZnf///7bMz///6TMwI90MHi96ckNGOCBPokZGLoIWRWoptiliLWYtujFmMhYWLdpGF0Yichos4CPwlB4s4eoZFiIWFi3aRhbyMqYy+i72LqIq9ipGRi6CFkUWOepCL3gj3Tgf/ABiAAP//+8zM/wAQTM3///TmaP8AFDMz///qTMwI90r7WgWfdYtxi3kIi4WNiQWLo42vstaJix6OjYueBZCGjocehAZui3ObcqgI+4P3mAWDlIWTi5OLov8ALTM0/wAlzMz/ADTMzP8AQDM0CBPY/wA2MzT/AEHMzP8AMczM/wBLMzSki72LfkO1iwidnZufH6xgsE4eDvsIiqj4Cqj3gakB49bl1QPj+IQV/DwHboJ8aR54BoaJiIYfi3iNiQWLzo2vsr6Jix6NjYueBZCHjoceiQZqgZqoH/cgB6SLmYSfbgjUJAWfbo6Ai34Ii3iOiQWLpo2usr6Jix6NjYueBZCJjoQehAZyi///4DM0/wASGZr//+3MzP8AGuZmCPsJ90EFiI+JkIuQi4+Mjo6OCNffBaSlt6GmiwiSBpCRjpAfi56HjQWLVYlkaFuNix6IiYt4BYeOh5AejwajkIODH4uBh357e1VQWF5xhQj3tQfnqb23HpOLkIaOgJB2mHSjiwicmpmkqVagYiFkJyUfDvvfiaz3qLL3u6mmdwHq2gP3QvfuFfeBB8yPs4sekoeOgh5ygUB9Y4iJg417kYW/iJeQizcI+2lAB4KBfIGFjoOTH977TQaLOICGToiFhYt2kYW1jKWMt4u2i6SKtoqRkYughZFOjoCQi94I903OB5eUmpaQiJOCHw5LgMj438gB9/D4/BX//6JmZv//yRmY///9mZr/AAfmaAX//9yAAP8AdczM///IgAD/AAszNG2LZItrbHFl/wACGZr///MzNP8AB5mZ///+MzT/AAdMzf///ZmYn5qllaSL/wAXgACL/wAe5mZ8rf//qUzMCP//nJma///FszScbf8AXkzN/wA3TMz/AAezM///57M0mGD7cfxHpH8FopGkj6aNCPcj9//S+4EFpy6jX72LqIuysJ2y///8szSU///6mZj/AASZmv//9LM0/wACZmZ2cXeGdotri///9LM0/wAgMzP//9hMzP8Ag8zNCP//oZma/wE5GZj/AGRmZv8AOuZoBQ73qX+7haL4yagS8Nz3Z9z3Z9wUHBO8+ZL3CBX4XgeLp/8ADzM0/wAK5mj/ACfMzP8AAxmYCKWNBZD/AABmaI7/AAKZmIuQCIueiY0FWopuilmLW4tzjFmMCImJi3gFi4aP///9TMyP////szQIoYkF/wAn5mj///xmaP8ADhmY///3mZiLbQj8ZAdYWlpyZYsIYmumzR/4UQeLp/8ADxma/wAKMzT/ACfmZv8AA8zMCKCNBZD/AABmaI7/AAKZmIuQCIueiY0FWopxiluLW4tzjFmMCImJi3gFi4aP///9TMyP////szQIoYkF/wAl5mb///yZmP8AEBma///3ZmiLbQj8PQeLfIt/jH1XV193YIsIYmukzR/4UweLp5n/AAoZmLT/AAPmaAigjQWQ/wAAZmiO/wACmZiLkAiLnomNBVqKcYpbi1mLcIxZjAiJiYt4BYuGj////UzMj////7M0CKaJBf8AJ0zN///9GZj/AA6zM///9uZoi20I/DwHMqBC6R7Gi8qlyceVXLJkxovOi8awvrwIjYqJNqKLBRN8oZ29mMmWCIiiW5AF///qmZj/AAIzM////GZo/wAFzM2LvQgO7/tPqfc+dvkGpwFfzd24+C24A/PjFU+L+01NHoCLhY+IlYaffJ99iwiDc4hrd6tuuvcEjfci9xof9/IHrY2akx6Ri5aAnHUI9/H8TQWWfJiFm4oImZKVnh/4rAepmqqyHqYGj4+OkB+LnomMBYtDimRnQYyLHoaKi3gFhpSIkB6lBrSYaXAf/A8HeIt4hh6Ci///8jM0/wAcGZr//+LMzP8AJOZmCPvx+E37FouIiYt5BYaSiJAevIuhU41/CA5D+36o91+o+AC7jncS5tb3WtYT7Pc6+EsVE9z/AAJmZv///mZm/wAAmZr///2Zmh7//+OAAIBkgv//uYAAgAiNc7aHBf8ADmZm///+TMz/AAeZmv//9bM0i1kI+40Hi27///YZmv//9YAA///e5mb///yAAAh4iQWG////gACI///9gACLhgiLeI2JBYv/AD9mZo3/ACiZmv8AJ8zN/wA+MzOJix6NjYueBYuQ///85mb/AAJMzf//+xma/wAAszMIfY0F///fMzP/AASzM///9czN/wAJTM2LqAj3hgcT7L7HsZy3iwjAl2pFH/xUB4tugP//9pmaa///+2ZmCH2JBf//+xma////TM3///zmZv///bMzi4YIi3iNiQWL/wA7zMyN/wAmMzT/ACoZmv8AQeZmiYsejY2LngWLkIf/AAKAAIb/AACAAAh4jQX//+CzNP8AA0zN///1TMz/AAqzM4uoCPhNB+R30DEeWItbfUtACIgGDvaBrfexsveorQGw/wBgTM3/AbSzNOsD+S733RVZCv//nszMnhX//kyZmgb/AAbmZv8AwszM/wBmzM7/AFEzNP8AV+Zmi/8Af4AAi/8AYmZk//+i5mj/AAvmaP//SRmYCP8AATM0ZBX///+zNP//TZma//+qGZj//5VmZv//jjM0i///i8zNi///jpma/wBoGZr///jmZv8AtOZmCA72ga347K2l4RKw6/hJ60CwE/j33/kEFfc4Cvfj+7sV9zkKE/T3OgoOLYGs+BOssd8StOH3juFqrRP4tPdhFfc7ChP09zwKE/j3PQr3XfddFX0KDve2+0io9yGt+NawfK0Sr+f37dz3OdwT3vfi+QQVwIu5eLNnCPyQB2xyaX9iiwj7F/sA9wP3VB/3ZvcC4useE+73znUVyZSJSB/9EgeLb///9bM0///yszP//99MzP///UzNCHOJBYb///+Zmoj///1mZouGCIt4jYkFi9iNrrLXiYsejY2LngWLkIf/AAKzM4f/AABMzQhzjQX//+CzNP8AApma///0TMz/AA1mZounCPklB/8AL4AAjv8AMIAAix4T3pL///mAAI7///eAAB4T7mR6b4lNi2CLVf8AAYAAgP8ABYAACBPe/wAJgACI/wACgAB/HoCBeXh6hWCiWZdZiwj7R/sY+yz7WPtZ9yD7D/dAH92L0qPAuQj4fgf/ADGAAP8ACYAA/wACgAD/AFSAAB4O6vt+qPdXt/flrIytAa/X93bW9w7WA/fm9+QV+6wHcXdoiXiLCFEztfcr87bV2x+1i61zpl4I96T8ghX47HwHdYtlZUOLbYtEjG6ab5prj2mLCPsOOif7GC7B+xD3JB/Ei9ipuKoI98gHnpOjj5WLCKyvi18f/HkHi27///UZmP//9hma///f5mj///rmZgh4iAX///sZmv///zMz///85mb///3MzYuGCIt4jYkFi8+Nr7LPiYsejY2LngWLkIf/AAJmZof/AACZmgh4jgX//97MzP8ABTMz///2MzT/AAnMzYuoCA6Aiaj3k6z3w6dxrRKLyvcE3Pd14BPe95T48hWekreSnosI0NVy+xP7AFNeKR9zi2eNgI4IOvuOFW9+fGIecAaGiIiG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tPgLrPdjdxKv3kvV9zjZE+T3UfiLFfUK8/uiFc0KE/TOCtr7OBVmChPsZwoT9GgKDvu+iaz426zSdgH14AP3DvlNFfQK0PzTFU4KDvvYiaz39qeodwHx2gP0+IgV9QrX/A4V4AoO9oGt+Oytx3YBsOv4SesD99r5TRX0CpBCFVgK9+P7uxVZCg4wgaz4E6z3YncBtOH3juED92r4ihX1CvtB+70VfAr3XfddFX0KDs2BtPjbrNJ2AeLg9/a8A/fa+U0V9Ar7LvtCFV8KDkWBuoSm9+ms92p3EuPa91LaEzz3ePiKFfUKE7yA/JQV6woTfOwKE7ztCg7TgbT426yY6Zm9AeTgxem96ca8A/fXgRXKCjD5YRXLCvckFssK0cgV7goORYG6hKb36azs6rW9EuPaX+nW6W7aEzkA9/75LRXuChM6AHwxFdEKEzkA9z0W0QoTuoBA/N0V6woTfIDsChO8AO0KDtOBtPjbrJjpAeTgxem96ca8A/fXgRXKCjD5YRXLCvckFssK/wA6GZr/AI7MzBX//6CAAP//tGZoBYH///gZmP///oAA///7mZyL///5zMyLhP8ABJma///5zMz/AAbmZov/AAbmZov/AAlMzP8AApmY/wAQMzT/AAfmaAj/AG7MzP8AMxmYBf//9jM0/wASzMz///AzNP8ADzM0///p5mb/AAuzNAgORYG6hKb36azs6hLj2l/p1ulu2hMw/wE5Zmb/AuszNBX//8OZmv//lOZkBf//+YAA///0gAD///1Mzf///GZoi///9eZoi///+bM0/wAFmZn///qZmP8ABZmai/8ABZmai/8ABmZm/wADmZiX/wANgAAI5/8AYhmc///9mZr/AAnmZAX//+2Zmv8AE8zM///rgAD/AADmaP//+uZmiwiHi///+zMy////GZz///2Zmv///xmYCBM0//9BmZr//1PMzBXRChMy9z0W0QoTtUD83RXrChN57AoTuO0KDtOBtPjbrJjpAeTgxem96ca8A/fXgRXKCjD5YRXLCvckFssK///XMzT/ACkZmBX/ACEZmAb/ABcZmv8AHeZo/wAYmZr/ABwzNP8AHUzM/wAZgAAI///0Zmj/ABGZmAX//+KzNP//8eZo///nZmT//+9MzP//44AA///pGZj//+aZmqH//+XMzv8AELM0bZoI///zszL//+5maAX/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ThX///2ZmP///GZo///8Zmb///2Zmh+KXoVlg1r/AAjMzP///EzM/wAMmZz///4Zmv8AC5mY/wACmZqf1KqgqYsI9x6L+4r7/wWDf4qIi4YIhJOGmh73zAaQqpW6nMX///mAAP8AA7Mz///0gAD/AANMzX+LCH5uBXNWenBRiwj7GYv3hPf1BZylkJeLj4uPho6Ei4aLa4Ruiwj7Xwb//9/maIv/AACZmP8ACZma///ugAD/AANmZgj7WfvSFfcAChOPwPcBCoD//vhMzBVtChMvwG4KE4fAbwoO74Gv94mv986wyHYSq+b4NeBhrRP4+EH5yBWwClf7NhX3BgoT/PcHChP69wgKDiz7grD3TsRVyOKq94WqdbgSq9Bi3UHA91rbncITkGD3r/kzFc8Kr/wcFS5ceGYeE5lg9wkK+0/7tRUT0mD3CgoTsmD3Cwr3zPghFfcMChOVYPcNChO5YPcOChOw4HQKE7Jg9w8KE9Tg9xAKDvfFgbpkqPe6tZDV90SoEvXc99rc93KwE7/4lfcYFTDKWPPb6Nf3S/cMbdRGcH14eR6LbKqGloqohqttiysIKU4lQFxkpswe+FEHi6f/AA6zNP8ACuZo/wAoTMz/AAMZmAiljQWQ/wAAZmiO/wACmZiLkAiLnomNBYsuiWdkNI2LHomJi3gFi4aP///9ZmiQ////mZgIpYkF/wAnTMyI/wAOszSCi20I+2f72vdnB4un/wAOzM3/AArmaP8AKDMz/wADGZgIpY0FkP8AAGZojv8AApmYi5AIi56JjQWLLolnZDSNix6JiYt4BYuGj////UzMj////7M0CKaJBf8AJczN///9MzT/ABAzM///9szMi20I/IoHi2////LMzX///9czM4gIE39wiQWH////szOI///9TM2LhgiLeI2JBYvoja6z4YmLHo2Ni54Fi5CH/wACszOH/wAATM0IcY0F///YTM3/AAMZmv//8LMz/wAI5maLqgj3jffaBw5U+2F2+de8Adrc95LlA/fW+PUV0KJI+xEfi/sY+xb7B/sQIwj4SgfV1baquIsI+zZNFcyOr4sekoeOgh7//+bmZoH//7SZmn7//9eAAIgIjXMFi4j/AALMzf///jM0/wADMzP////MzAiriQWflX5KH/0dB4tqgXltggh3hQWGioqIjIYIknL3H7CL92YF90T3G/c8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HlH//+WzNAWF///8TMz///dmZon/AACZmoT/AAIZmv//6TM0////5mb///bMzIv//60Zmghd////5mYFfYd/gx9+B4aMio8exgYO+9f7c7f5AXcB9wXaA/cF99EV9xYKDvcugbVhp/gNt2iu95d3Eq3Z93jW93HYE5/36PftFfukB3NwbH1niwhaM7j3LNmk7PAfuouseKFjCNb7tRX3uwcTb7qxvJGViwjIwUYl+wZZLywfbItymHekCED4jxX7KwcTn2ejX453iwg5+xBU+0EjzPsJ9xAfuouxm6usCFidB5aWlpyUlggTb6hyr3+2iwju9wne9zj3DjbbNR9ai192aWYI914HzI6zix6Sh46CHv//5uZmgf//upmafv//14AAiAiNcwWLiP8AAszM///+MzT/AAMzNP///8zMCKuJBZ+VfkofDvct+36o91e3X634BblorhKv1/d21maw93DZE7aA+J34HRXOuEL7AjVwJyEfeotnjWm0CPeIB6HAvqiuiwj7APy+FfdBB6R9qoOviwjo9wXY9z72R+orH2yLUYFeRQgTzYDDB5eJmoAegYv///azNP//9MzM///7TMz///YzNAh/cgVqqWCYWosI+w46KPsYL8H7EvckHxO2gMSLq5+amAj7TAeLb///9Jma///1TM3//+BmZv///LMzCHiJBYb///+AAIj///2AAIuGCIt4jYkFi8+NrrLQiYsejY2LngWLkIf/AAKAAIb/AACAAAh4jQX//+DmZv8AA0zN///1GZr/AAqzM4unCBPOgPtG+MkVtYutcqZdCPupB3F3aIl4iwhRM7X3LR/zttLbHg7uiaz3ZrX4C3fHdwH/AYEzNP8BqYAAFf//opmY//9xgAD//+MzNIsF///pzM2L///4zM3/AAKAAP8ABDMz/wAKzMwI/wBkMzP/AP2zNI2LBf8AP2Zm//9RZmYV/wAhmZr//6OZmv//oczMiwX//7FmaGEV//+QZmb//1XMzQX/AACAAP8AApma/wAAzMz/AAKzNP8AARma/wAC5mYIwvclBZCYkY+jiwj/AEYzNBb/AInMzIvI+z0F/wAO5mj//9bMzf//1rMy/wADmZn//9BmZv///JmahYWLdpGFsIzCjLKLtIuvirCKkZGLoIWR///ZMzT/AAOAAP//30zMi///7YAA/wAzgAAI//90gAD/AXDMzP8An4AA/wDzMzRYi///gMzM//8+GZr//9EzNP8Ae+ZmBf//+LM0/wATTMz///pMzP8ACrM0fYv///FMzIv///hmZv//9xmY///0mZr//+UzNAj//yGzNP/997M0Bf//5Zma///CMzP//+HmZv//+czN///UgACIhYWLdpGFsIyYjLKLCP8AChmai///t+Zm+wK+i/8AR8zN/wBtgAAF/wAX5mf///+Zmv8AF4AA////Zmb/ABPMzf///4AAkZGLoIWR///xzM2M///wTM3/AAEzM37/AANmZwgOvoG0+OKws3cBsOb4SqwD/wC3gAD/AIBMzRX//9qZmv8AOWZo///t5mb/AEuAAIv/AEjMzIv/AFZMzP8AFuZm/wBCzM7/ACSAAP8ALOZm/wAxmZrIxae/i7qL/wAlTM7///aAAP8AHeZm///wGZgI//8G/////ghmaBX/ARzmaP8B3oAABf8AIxma///gmZj/ABSZmP//1YAC/wANMzT//9RmZpeH/wAJszSO/wALTMyRhr+Du4LC///wgAD/AAGAAHz/AATMzP//7zM0/wAF5mgI/wArTMz/AEjMzFiL///dTMz//8WZmAX//+AZmv8ACbM0///XszT/AAizNP//xuZmizaLRGxQVf//vZma///DMzT//9hmZv//oxmYi///l7M0i///ohma/wAjmZr//6EzM/8ASGZm///BMzMIJP//UoAAvYv/AFfmZv8Ak5maBf8ALzMz///iTMz/ADrmZ///7hma0ovsi+S5z+SGlISRgItEPUdsLov//8PmZov//9BMzf8AF5maZ/8AJWZmCA77QIG8+AOsAbDhA/gY+FoV///dzMz//9aZmgX//+XMzP8AEJma///aAAL/AAnMzP//0GZmiyiLITKL+yKL///KmZr/AAxmZv//0UzM/wAXZmf//9vMzQj//8MzM///tkzNBY18l4Cbiwj/ADhMzf8ARJmaBf8AIUzO///fzMz/AC4Zmf//7Zma/wA5TM2Lx4vAnr3dh5SDj4KMaV9gdWCL///WGZqL///Z////ABhmZv//50zNtgj/AKaAAP8AyrM0Bf8ABpma///5Zmb/AAkzNP///YAA/wALTMyLoIunmIuqi/8AD2Zm///7mZr/AA4Zmv//94AA/wAMgAAI/wAk5ma4BYeYgZV6iwj//wLMzfvHFf//+GZo/wAYTM3///vMzP8AG8zNi/8AHuZmi/cCu83Ni/8AMOZmi/8ADeZmc/8ABZma///jzMwIDkaJrGyy98+392ysEvPg96+sE3z3JxZRChO8UgoTfHdDcFA/iwj7BQZueZ6qH/ed9ywHmJWdl5GHk4If+zb3EQaL3pyQ0Y6RkYughZFaim2KWItZi26MWYyFhYt2kYXRiJyGizgI+xEtB4CAen+Ej4OUH/L7fAYTvFQKDoOJrPjTshKSrX+q92Hg91Cpdq0Tyvfy9w4Vi/8A8bM0/wCOZmb/APCZmAX/ACFMzv//+kzM/wAHMzT//+oZnP8ADhmY///ATMz/AAtMzP8AAEzM/wALTMz///8ZnP8AC2Zo/wAFmZgIE8yDvobBi7yB////5miB////GZiBiIuFiv//70zM///rgAD///+zNAgT2v8AQIAA9wFYi///v4AA+wH//n+AAIsFdouckR////gzM/8AAszM///4Zmf/AALMzP//8GZm///+ZmgIE+qHWoVXf1b/AAnmZv//++Zo/wALmZr///7mZP8ADIAA/wAAMzSf25iYwosI2gawn29sH4v//w9MzPtr//6UszS+i/c4/wEVGZqL//+d5mYFizh6hjuIhYWLdpGFvIyvjMKLwYuuir2KkZGLoIWRCDuOepCL3gj/AUfmZgT/AF4Zmgetn6evHv8AJGZmBg77aPtBpvccrIl2+CqsEruqetL3IddAzl2rE7kAu/ceFY9ajlyLYZWNlYyQi5KLkYuSiQj/AAMzM////zMz////zM3///7MzQWrhpJuoFWgWK5qtouji52Rn5eWk5KWi5WLkomVhpGGkYGRhIsIhIuCiIaFhISFgId+h4GGhoGLc4t5mHDR///4mZr/ABHMzf//+szM/wASzM3///WZmv8AETMzCBPWAP8ACGZm////gACU////szP/AAmZmovDi/Kmi+6L/wBETM3//87MzP8AJzMz//+8MzT/ABmzM0//ABbMzWOai8KLtK+irYsIE9SAhgoT2gCHCg77Homs+Fd29zOxAZXn0+Dl2gP3l/cOFdsHi/cb9z2Xi/ciCOgy1fsWKiVcI2+jeaCwnaSjHouYg52LnIuWjpaWlaWhqZO0iwjyrENdUnEj+ykf+3AHizl6hkWIhYWLdpGFvIypjL6LvYuoir2KkZGLoIWRRY56kIveCA6E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AGRMzf8Ae7Mz9zI7zif7H1gxN4CShZcf95yNBf//ZszN//+2szP//8YzM///yUzNHlGLY6BmsQgO+yiDrPcOrfdlvAGn4fdY4gP3yvcnFfdMCjr3VBX3TQoOh4Gs+Ae7AbvY91LfA/8BL4AA/wElmZoV/wAHMzR0/wAETMz//+PMzIv//92Zmgj7LEhqXFxuq8Iei/8ASJma/wBTgAD/ADiAAOr/ADaAAAj//+9mZv8AJczMFf//k5ma///JGZr//32AAP//tmZmi///nRmaCFqlSvcE9z239x33AR6L/wAkszT///iAAP8AIkzM///xzMz/AB2zNP8AGGZm/wARTMz/ACGZmv8AFBmY/wAUmZr/AAczNP///GZm///2Zmb///9Mzv//77M0/wACGZr///IzNP8ABpma///TgAD/ABfmZv//9UzM/wAPzMz/AAJmZv8AGbM0/wADzMyf/wAPGZz/ACszNP8AKszMCP//8jMw/wASMzQFd///8OZm///15mj///lmZv//6jM0///8zMz//+0zNP///TM0///4mZia///8zMz/ABXMzP//+rM0/wAjmZr/AAuzMqP/AA0Zmv8AGzM0CP//8IAA/wAI5mYF///bZmb//9dMzP//zAAC///dgAD//8xmZm7//96Zmv8ALJma///L5mb/ABwZmv//veZmi0mLOlRoWP8AAkzN///3TMz/AASzM///+rM0lomzsr6uu4v/ABhMzYv/ADH/////9hma/wAfmZr//8tMzAgO+1qBsfdKrPc3rBK32k/S9yPVE/T3D/cNFfdwChPs93EKE/T3cgoO+1uBsPdFsvc7qBL3m9JQ2RPo96f3BBVWZWtQHlyLZZtkpv//+IAAh///+WZm///5TM3///4Zmv//9rMzrGzBbsqL9x6LptWLxAgT8Iuii8AxqQiNB/8ALkzM/wATTM3/ABizNP8AI3//i/8AKzM0CLNq0/sLPklnZ26eg5ceoYuWm5Scl6GkpLKLCKu2bktOZ3lgH4qLX5CFiwh5gIV/f5OCoR+Ti66Qk4sIw61iUx8O+ymBsPdFsvc7qBL3m9JQ2f//xOZm/wARzM4T8P8Az5ma/wG2MzQV/wAAszP///+AAAX///ezNP8AAMzM///3TM3/AACAAP//9rMziwg+SWdnbp6Dlx+hi5ablJyXoaSksosIq7ZuS05neWAfiotfkIWLCHmAhX9/k4KhH5OLrpCTiwgT6MOtYlNWZWtQH1yLZZtkpv//+IAAh///+WZm///5TM3///4Zmv//9rMzrGzBbsqL9x6LptWLxAgT8Iuii8AxqQiNB/8ALkzM/wATTM3/ABizNP8AI3//i/8AKzM0i/8AH0zM///rzMz/ADLMzP//vkzO/wAUszT/AA3MzP8AGszM/wAVZmj/ACJMzv8AD0zM/wAQGZr/AAEzNP//9czM/wAGzMz///EzNP8ACBma///0mZr/ABozNP//22Zm/wAaGZj/AAFmaJj/AAlMzP8AFTM0/wAPGZr/AArmZv8AFpma/wAS5mb/ADnMzAj//+tmZv8ACczMBf//9Rma///pZmj///nmZv//9ZmY///uGZr///MzNP//8IAAgP//8rMy/wAKGZr///MzNP8AEeZmCBPk///rGZr/AB1MzP///2Zo/wAamZj///9MzP8AHjM0CP//7jMy/wAAzMwF///wszT//8ZMzGj//8SZnGf//8szNAgOIIHK9xrC9xrKAa2y9+C3AxTg95r4SxX7AfsLRvs4+x33Djz3A/cis8vAH4u7ZrRNntKhp6+LsQjBa9X7Lx78FgT7GVPH7Lqt9wv3Kfa1dFMfi2RudUx+ZJZhk3WLCG17gnh4nIOtH7WLq5Skkst8pm+LZwhHTog5Hg77sPtitf8BZWZm/wAr5mf/AKCzM6wB9xXaA/cV98cV//+6TM3//6jMzQf///QzNP///7M0///1zM3///KZmov///BmZov///czM/8ABTMz///5zM3/AAmAAP8AAGZmCP8AXoAA//9qmZoG+0hpb2wefouFkoSVgpeAmG+LCH50fnZqsnqgH6KLtIy1rsG2rc2L9xII/wCAZmbKB5j///+Zmv8ACoAAnYv/AAuzM4uU///8gAD/AAVMzf//9UzM/wAATM0I//+3szT/AEWzMwaL3paOyJCRkYughZFhinGKX4tei2+MYIyFhYt2kYXIh5uHizgIDlT7gqz3V7f4B633da0Sr+FG2Pdn2vPcE/v36/hxFf//xDM0B///45ma/wAPmZr//95mZv8ABjMyZosI+w41J/sYLsb7EPckH8SLqZ+amAhzB/sgXEtBHhP3XItosoOf///4TM3/ABMZmv//97Mz/wAP5mZwiwh2fnx2V/Bkwx/Ai/8AKhma/wAIZmb/ACfmZv8AHJmawLGh1IvxCPgpB4v/AAWAAP///2Zm/wAE5mb///6Zmv8ABBmaCP8AKoAAB/cMndHAHqOLkniPd5BwmX2mi6WLlKCLnIucgJt8mHeddZdiiwhINUz7Mh+J+yEV+6wHcXdqiXiLCBP7UTi19yvzsdXbH7WLq3OmXggOKvuCqvdZt/gHrQGv4Pdw2gP4OJcV+CkHmYeWgB6Ei4SEhH8IfHMFaqhgllqLCPsONSf7GC7G+xD3JB/Ei6mfmpgIcwf7IFxLQR5ci2iyg5////hMzf8AExma///3szP/AA/mZnCLCHZ+fHZX8GTDH8CL/wAqGZr/AAhmZv8AJ+Zm/wAcmZrAsaHUi/EIPPfYFfusB3F3aol4iwhROLX3K/Ox1dsftYurc6ZeCA5Bgaz3Gaj3cawSrd73mctnpxP4+A73AxVqB3pqYnVpiwj7DVvu9vcG1MrTHxP04ouyeJ0xCKeNgPcYBWOLSpNdiwj7ICks+x0l1PsH9y4fE/jYi8yissEIzQeLlI6Rko+QjqSNi4sIj5GMkh+LnYmNBW2KZ4p3i3eLb4xtjAiJiYt4BYuHjIiRigiXiQX/AB+AAP//+szN/wADgAD///gzM4ttCA5D+16v+MyoAfc+utDGA/eM+14VxbKvtB+Lr4K4YtsI9x731AWasJmUqYsIkgaRj46QH6AHi2CJb2pXjYsedQeIjIePHpsGnpKGgR+LhIiBhn0I+w37p3m1LPd9BYeWiJOLkwiXkpKeHpsGjY+Mkh+gB4tOiWRoVY2LHnUHh4+IkB6SBq+LlXiWbgj3Kvv3XTkFgnqDe4t0CGWscrgebNQVi5ubqaK0pkaOgIt/CHl7fXl1fpijHg77Z3+u+BCnAfG6y8YD90h/FdWdxZ8fi6mLoVTtCMn3AAWsw5yar5IIpwdOi///7Bmadv//2+ZmTQhWMFnkBWrFeqc7iwhvB6yGmXekXAjV+xl4aQVlSYl8i2wIZatxuR5s1BWLm5Wyo7QIkYAFnG+SW4t+CHmAe3l1fpmjHg5A+212paj3Qbr4AagB49b3WtYD9/37DxVKiGOLHoSPiJQe/wAZGZqV/wBFZmaY/wAogACOCImjBYuO///9MzT/AAHMzf///MzM/wAAMzMIa40Fd4GYzB/4YAeLqP8ACOZm/wAKZmb/ACIZmv8AA5maCJ6NBZD/AACAAI3/AAKAAIuQCIueiY0Fi0iJZ2RHjYseiYmLeAWLho////1mZo////+ZmgieiQX/ACCzNP///Jma/wAKTMz///VmZotuCPuLB1tcYHFuiwhTdZvcH/dzB4uo/wAJGZr/AApmZv8AIeZm/wADmZoIno0FkP8AAIAAjv8AAoAAi5AIi56JjQWLR4loY0eNix6JiYt4BYuGj////WZmj////5maCJ6JBf8AIJma///8mZr/AApmZv//9WZmi24I+2gHJK9X0x6yi8abzs4IDkCJqPgBuvd1rRLj1vcj1nfWE/Tj+GcV/B8Hi27///cZmv//9Zma///d5mb///xmZgh4iQWG////gACJ///9gACLhgiLeI2JBYvOja+yz4mLHo2Ni54Fi5CH/wACmZqH/wAAZmYIeI0F///fTM3/AANmZv//9bMz/wAKmZqLqAj3iwe7uralqIsIw6F7Oh/7cweLbv//9uZm///1mZr//94Zmv///GZmCHiJBYb///+AAIj///2AAIuGCIt4jYkFi8+NrrPPiYsejY2LngWLkIf/AAKZmof/AABmZgh4jQX//99mZv8AA2Zm///1mZr/AAqZmouoCPdoB/Jnv0MeZItQe0hICPcUB/cwu6OsHhP4qYuefphqk3qYgJ+Lnouamougi5uCnHeacpxxkmWLCDcwQvsyHw5A+3Gv90uo+AG693WtEuPW9yPWd9YT+vhI9wEV90MH8me/Qx5ki1B7SEgI9xQH9zC7o6weE/ypi55+mGqTepiAn4uei5qai6CLm4Kcd5pynHGSZYsINzBC+zIf/B8Hi27///cZmv//9Zma///d5mb///xmZgh4iQWG////gACJ///9gACLhgiLeI2JBYvOja+yz4mLHo2Ni54Fi5CH/wACmZqH/wAAZmYIeI0F///fTM3/AANmZv//9bMz/wAKmZqLqAj3iwe7uralqIsIE/rDoXs6H/twB/sAlfssXx6Ai4WShZSDlYGXcYsIgHh/eW2tfZ0fn4uti7CqCLqxm++L9zUIDvvHiaz3Y7L3AKeod/cR7xLz7zPaE/r3oPepFUL/ACxMzAb/ADGzNI/Lix6Pho6DHv//44AAgP//2IAAgkaCiYWNe42F/wA2gAD///rmZv8ACoAA///6GZqLUghjK2Tr+wgHiziAiE6GhYWLdpGFtYyljLeLtoukiraKkZGLoIWRTo+Aj4veCPcI1AcT/Ps49/0VdQoO+86AwvgXdwHf2gPf99YV93MKDvvWiaz4A6wB7NoD90T3xxX3dAoO+8iJqPeKt4+598ufAfbWA/dl99QVg4v///hmZv8AAUzO///4mZr/AAJMzAj/AQNmZgfMj7OLHpKHjoIecoFAfWOIiYONe5GFv4iXkIs3CP//QmZmB///+Rma/wACTMz///izM/8AAUzO///4MzOLYIt0ZH1QkYWVipaNlayVmqWL/wAJMzOL/wAJ5mf///2Zmv8ACeZm///8GZoI//9CTMwHiziAhk6IhYWLdpGFtYyljLeLtoukiraKkZGLoIWRTo6AkIveCP8AkjM0B/8AA0zN////MzT/AANMzf///5mY/wADZmaLuYuospfHhY+BjoCKfWGAgXWLCA77gYqo95Gt3Kn3bKmblRKdqfcd1mynE/737vfPFTn3oAbMj7OLHpKHjoIecoFAfWOIiYONe5GFv4iXkIs3CP//QeZmB///60zN/wAfZmb//+JMzf8AGbM0///OZmaLCHVed2FNsXblH7L7MwaLOICGToiFhYt2kYW1jKWMt4u2i6SKtoqRkYughZFOjoCQi94I9zPdB/s1rRVQBlttnqijn5SjH8KLo1mZbAgO+/L7fKv50qm8dgH7RtYD9z3TFYvEi/haBcyOs4sekoeOgh7//+bmZoH//7qZmn7//9eAAIgIjXMFi4j/AALMzf///jM0/wADMzP////MzAiriQWflX5KH4v8RotSi2cF+0XRXMfgqriqoX6Zdh5wi315hnaFdoZ3bYsIbnap9y4fDjz7f673WqzTrfeWrfdoqaZ3EuraYdf3VtwT/oDq9w4ViziAhk6IhYWLdpGFtYyljLeLtoukiraKkZGLoIWRTo6AkIveCP8A4bM0B/8AE0zN/wAjszT/ABiAAP8AC5mY/wAWMzOLCPcli/s8+7ScfAWdj6mSlosI2apjJvsARlVZHxP9gPd1ChP+gP//9czNi///+IAA/wADMzT///uzM48I/wCSzMwHzI+zix6Sh46CHnKBQH1jiImDjXuRhb+Il5CLNwgO902Bv3Gn9/asEuTa90/a/wC5zMz/AE4zNBO8+O7wFf//2GZo///ZTM3//+CAAP//67Mz///hGZiLCGVvo84f90IHi92TkMGPkJGLoIaRYYp3imOLYot9jGCMhoWLdpCFvYeUhos5CPszB4t9i32Mf1tWZH5kiwhlc6HOH/dEB4vdlZC/j5CRi6CGkWGKd4pji2KLeIxgjIaFi3aQhcKHlIaLOQj7MgcynEXjHv8AMzMzi/8AN7Mz/wASzM3/ADQZmsKO/wADMzORkI3///dmZv8ACYAAYv8AJoAA///fmZq/i8WLt663uf8AA4AA/wADmZr/AAZMzP8ACmZmi32Lbf//+zM0XYuLCIaPiJMeE3z/AByAAJb/ACiAAJTQlI2RiZuJkf//yYAA/wAFGZr///WAAP8ABOZmi8UI91cHi92YkMKPkZGLoIWRYopzimCLZIv//+5MzIz//9XmaIyFhYt2kYX/ADLMzIaUh4s5CPs4B4t2gv//87Mzg///90zNCA73OYG7+ACoAd/W90nW90fWA/jm+zMVijyiiwWhnbeYyZYIiKJbkAX//+qZmP8AAjMz///9Zmj/AAXMzYu9CPhlB4un/wAJmZj/AArmZv8AIGZo/wAFGZoIno4F/wAE5mj/AADMzP8AAxmY/wACMzSLkAiLnomNBYtHiWhkRo2LHomJi3gFi4b/AAQZmP///czM/wAE5mj///8zNAieiAX/AB+ZmIb/AAtmaICLbwj7iQdbWmt0aIsIZXGkzR/3dgeLp/8ACpma/wAK5mb/ACBmZv8ABRmaCJ6OBf8ABOZm/wAAzMz/AAMZmv8AAjM0i5AIi56JjQWLR4lnZEeNix6JiYt4BYuGj////Zmaj////2ZmCJ6IBf8AIMzM///6zMz/AAozNP//9TM0i28I+2IHi3yLfo1+W1dreWSLCGVxos0f93gHi6f/AApMzf8ACszM/wAgszP/AAUzNAiejgX/AATmZv8AAMzM/wADGZr/AAIzNIuQCIueiY0Fi0eJaGNHjYseiYmLeAWLho////2Zmo////9mZgifiAX/AB6zM///+2Zm/wALTM3///SZmotvCPthBzKaROMewYu8pcTHkl2sY8KLyYu1rru8CI6LiPsFBQ73T/txr/dLqPf8o3e7EvHW903W90/WE975T/cBFfc/B+R60TMeVYtWdFJPhLhosVOLTYtdaVxZCIiLjt8F/wACZmb///5mZv8AAJma///9mZoeE+7//+OAAIBkgv//uYAAgAiNc7aHBf8ADmZm///+TMz/AAeZmv//9bM0i1kI+40Hi27///cZmv//9Zma///d5mb///xmZgh4iQWG////gACI///9gACLhgiLeI2JBbOMpIyyi7SLoIqzigiNjYueBYuQh/8AAmZmh/8AAJmaCH2NBf//45ma/wAEGZr///FmZv8ACeZmi6gI94wHE966vLChrosIsadzSB/7eAeLbn7///XmZm7///wZmgh8iQWG////TM2I///9szOLhgiLeI2JBbOMn4yyi7SLoIqzigiNjYueBYuQ///75mb/AAIzM///+xma/wAAzM0If40F///jGZr/AATMzf//8OZm/wAJMzOLqAj3ZQeLmYuZipe7wK6csosIsad1SB/7dwf7AJX7LF8egIuFkoWUg5WBl3GLCIB4f3ltrX2dH5+LrYuwqgi6sZvui/c2CA5D+3Gv90uo9/yjd7sS5tb3WtYT3Pc69wEV92EHvsexnLeLCMCXakUf+2wHi26A///2mZpr///7ZmYIfYkF///7GZr///9Mzf///OZm///9szOLhgiLeI2JBbOMn4yyi7SLpYqzigiNjYueBYuQh/8AAoAAhv8AAIAACHiNBf//4LM0/wADTM3///VMzP8ACrMzi6gI92UH5HfQMR5Yi1t9S0AIiIuO5AX/AAJmZv///mZm/wAAmZr///2Zmh4T7P//44AAgGSC//+5gACACI1ztocF/wAOZmb///5MzP8AB5ma///1szSLWQj7igf7AJX7LF8egIuFkoWUg5WBl3GLCIB4f3ltrX2dH5+LrYuwqgi6sZvvi/c1CA5D+3Gv90uo9/yjd7sS5tb3WtYT3PgA9wEVi/s1kye6ZbBssouiiwidrZmpnXiXgB9xi4F/g4GFgoWEgIsIX5X3KvcCH/diB+R30DEeWItbfUtACIiLjuQF/wACZmb///5mZv8AAJma///9mZoeE+z//+OAAIBkgv//uYAAgAiNc7aHBf8ADmZm///+TMz/AAeZmv//9bM0i1kI+40Hi27///YZmv//9YAA///e5mb///yAAAh4iQWG////gACI///9gACLhgiLeI2JBbOMpIyyi7SLoIqzigiNjYueBYuQ///85mb/AAJMzf//+xma/wAAszMIfY0F///fMzP/AASzM///9czN/wAJTM2LqAj3hgcT3L7HsZy3iwjAl2pFHw5qlHaXpvgLqBLzuPeXuBN4z6YVbQaFiYiHH3UHi8aNsLLFiYseoAeRho2IHm4GbIWUsB+L95X3h/vRBRO4ln2WgJuLCJeWmJ8f9+MHsJCUqx6oBpGLjI+MjgihB4tQiWVlUI2LHnUHiIyHkh6pBqyPfWsfi/uT+5P33vsPi4t1BYeOiI8eqgasjoJoH/uxB2qLfmceDjCBrPdBsvc/rAG04/eM4QO092EVfAr/AU2ZmqkV//8IgAAG/wABmZn/AFTMzP8AH5ma/wBWMzT/AFGzM4vWi/8ALszO///FgAD/AArMzP//j4AACP8AAjMyZBX/AAAZmv//+2Zm/wAAGZr///tMzYv///tMzYv7GE5wXIv//6VmZov//9eZmv8AYRmagv8AS+ZmCA7fiahwrfc5q/c4rXCoEqjg92XW9w2oyqd8pxOvAPeuphUkSrv3HvcqzrLWtqOJbR/7ygd0hYFoHhM3gPd/+AQVy4ueVpZmCKePBRM3QISxhLKKtggTL0CJjQUTN0CLRIltHvszBhOvQGaLVI2Hiwj7ISsx+yD7IPJM9xsfE2dA93YKE6dAqcaJix8Td0CNjZ/3B2+OBX9XdGtYiwj7AQZ6fZCeH/ch2Aeli5SAj3cIj3UFjImNiI+LCKCLjY0FiKOIn4uki6OPp42iCI2KjIkedwaIi4mIiogIhnYFhneEf3CLCD73IQacl5GeHg73Cn+u94ex9KwBrdj3Yaampvdd3QP5PPdWFfA49yf7i/tN+xf7FfsR+yTmU+UezIvArKXQqDzCdL6LCODwtfc4H/zNjBX3IurT9yrM90Vs+0X7C2dQOh5Ti2eyeNCev5O4i6MIrH+ebnF9d2Uei3ePYqBVdkNnZ1aLCCl13OYf95e1FYt5h2+AXouPf7CLuAiikJaTlo5+ex4Ocft+qPdaqvgSrPeXdwGr1/cg1vcg1wP3jKMVYpIoqov3LYv3G9e6y5YI1vwUFfgSB+R4vliL+wuLZYH7GfsWdQhA+K8V+w8HT4j7ME2L+zKLUKn7K/dOfQj7KweLb///9czN///1MzP//98zM///+szNCHiIBf//+xma////MzP///zmZv///czNi4YIi3iNiQWLz42vss+Jix6NjYueBYuQh/8AAmZmh/8AAJmaCHiOBf//4MzM/wAE5mb///QzNP8ACxmai6cI9ysH9xKa5euL9wOL9xn7A9wilQj3JAfMjrOLHpKHjoIe///m5maB//+6mZp+///XgACICI1zBYuI/wACzM3///4zNP8AAzMz////zMwIq4kFn5V+Sh8O+3OByWen9/asEvdQ2hOw95/3BBX3VweL3pePyY+RkYughZFhimuKY4tii2aMYIyFhYt2kYXRhpeIizgI+x8Hi3F/dH95gHt0an+LhIuDjIWRgZWBnnaLCHN0cnL//+zmZp3//+MZmrUfuou0t6KykZaOhouGi2uGW4uLi4eQiJOLCBNwp5azlNCUjZGLm4eRCFWQgJOLwggO+4SByGqj+NSoEvdW1hOw96H40RWLqP8ACmZm/wAKmZj/ACCZmv8AA2ZoCJ6NBZD/AACAAI3/AAKAAIuQCIueio0FZopsimeLZYtgjGaMCImJi3gFi4aP///9TMyQ////szQIqIkF/wAfzM3///3MzP8ACzMz///0MzSLbgj8RweLfoZ+hIJzaXV5gIuEi4SOhZGBlYCTd4sIcXp7cXGad7Qfuou3vqWyCI6LiDEF///9mZr/AAGZmv///2Zm/wACZmYeE3D/AByAAJaylP8ARoAAlgiJo2CPBf//8Zma/wABszP///hmZv8ACkzNi70IDvtW+0Ky9w+v+A6oAfdl2NjZA/fY+CYVnAaSjI+NH6IHi0+JZGJMjYsedQeGjomQHpsGsI18ax/7hgd4YGNdc4uAi4ORiJWHlHqtbosIbnx8b3aYbMsfrYuil6KhmZahpJKbCIx3BftCxVXDxcWauJd6oXMedYuBe4Z7iYCBf3uLYIuGnor3MQj3zgeli6CxHg77hPt+qPjbyFejEuzWE9Ds+zQVi27///WZmv//9WZm///fZmb///yZmgh4iQWG////gACJ///9gACLhgiLeIyJBbCMqoyvi7GLtoqwigiNjYueBYuQh/8AArMzhv8AAEzNCG6NBf//4DMz/wACMzP///TMzf8AC8zNi6gI+FcHi5iQmJKUo62hnZaLkouSiJGFlYGWg5+LCKWcm6WlfJ9iH1yLX1hxZAiIi47lBf8AAmZm///+Zmb/AACZmv///ZmaHhOw///jgACAZIL//7mAAIAIjXO2hwX/AA5mZv///kzM/wAHmZr///WzNItZCA77eft8s/jLqYyvAeDW69MDyvgRFZ2Pencf+9wHjvsbovsF9wSLCKrVoribgph0H3OLgXqFeIiAf4F5iwhafbv3JB/30wearrW/pYuU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i4SL///oszOW///cTM2Li/8AB5ma///9GZr/AAOzMv8AAIAA/wAHszT/AAJmZggTfKGdsZrIkpGRi5qFkUuQgp6LvAj3AMYH+x4W+wYHi3j///4Zmv//+DMz///x5mb///PMzQgTvGZra3tyiwhtWZnkH+0HDkqBrPf/uBKVpIfY97fYh6QT0PeRohU3Tt7UH4vjtq61nwiI3AWKpIWOfIsI+yKLBRPgey+kiQWTt5GQsIsI04uQXwUT2DxlVlGLPAg11DD3K/cq0ubhHovaVsU8sQiQt9OLBRPEsIuRhpNfCKSNe+f7IosFfIuFiIpyCIg6BRPYtXe2aIszCEJOODYeDiKBsvf4p6h3Aefa9360A/c//wFBTMwV93cKDimKrPgudwH3PKsVVY////pmZv8ADDMz/wAU5mf/ADLMzQj/AFCzM/dYBf8AEDMz/wAngAD/AAUzM////0zM/wAPmZr//9YzNAj/AEgZmvtVBf8AEeZmW/8ADTM0///yZmb//8HMzP//+pmahYWLdpGFsIynjLSLroubirCKkZGLoIWR///GgAD/AAbMzf///YAA/wAPmZn//+uZmv8AMpmaCP//gGZm99AFhZqFkX6LgYv///kZmv//+Zma///45mb//+9mZgj//3qZmvvNBf//7UzM///UGZr///UZmv//5uZmU4aFhYt2kYWhjJ2MpYuwi6GKsIqRkYughZEIDvcsiqz4LncB+K2rFYWFi3aRhbCMqoyvi7GL/wAXzMyK/wAaMzSKkZGLoIWR///Q5mj/AATMzf//9RmY/wAKMzP//+rmaL8I//99GZj31wWFmYORgYuCi4OFhHsIJvuKJPeMBYWZg5GBi4KLg4WFfAj//32AAPvRBf//7zMz///XTM3//+9Mzf//47MzWIiFhYt2kYWkjJSMr4uxi6iKsIqRkYughZFAj/8ACkzM/wAc5mb/AA4Zmv8AIxmaCP8AU5ma92QFlaT/AADMzf8AB+Zm/wALZmb//+MZmgj/AFZMzftvBf8AEoAAXImBVoeFhYt2kYWwjKeMrouui5uKsIqRkYughZFYj///+EzM/wAdMzP//+4Zmv8ALMzNCP//+Zmam9H3RQWYrP8AAjM0/wABgAD/AAzmZv//34AACP8AT//++2IF/wASszT//8/mZv///zM0///wGZpbiAgOP4ms+LrbAfe/+OEV///wZmb//+QzNP//8uZm///jZmT///OzNP//4mZo//+vmZr//z8Zmv//1GZm//+Y5mZW+wR9bm1rZoiFhYt2kYWkjJ2Mp4uui56KsIoIkZGLoIWR///gZmaO///f5mf/AAXMzf8AD7Mz/wAkMzMI/wBjMzP3eQX/AAb///8AEBma/wAIZmf/AAKzMv8ACIAA///sMzQI/wBYszL7ZAWd///VzM3/AAqAAHn//8KzNP//+zMzhYWLdpGFsIyzjK+LrYumip+KkZGLoIWR///UZmaP///4GZr/AAdMzf//5Jma/wA/szMI//+O5mb3mwX///dMzP8AFBma///wszT/AC3mZpWn/wAL5mb/ACFmZv8ADBma/wAbmZqaqpafmZSki5mLj4iWiwiomqmYoHebcB92i2ODZ0sIDvsPiaz4A6wB91/aA/8AcGZm99kV/wBamZr7OotmBYs4gIhOhoWFi3aRhbWMpYy3i7aLpIq2ipGRi6CFkU6PgI+L3giLvP8AS2Zm9y0F/wAUmZq2mKXDkJGRi6CFkXWKeYpxi2aLdYxmjIWFi3aRhcGHj37//+izNFkI///CTMz7Ev//wOZm9xIF///pGZq5///vzM3/AA+Zmv8APjMz/wAFZmaRkYughZFmim+KYotoi3uMZoyFhYt2kYX/ADmAAP//+TM0/wAEgAD//+3MzP8AGmZmWwgO+z+Lrff9rZl2ErOs/wFRmZr/ADhMzBPY/wFTTMz//0qAABX/ADQZmv//8bMz/wBAGZr/ABnmZ/8AC2Zm/wApgAD/AANmZv8ADIAA///5zM7/AA8zM///8Jma/wAEMzP///KAAP8AA7Mz///sMzL///gAAf//+zM0///umZn///qzNP//7LMz///nTMx5///n5mb/AAaZmv//22Zm/wAKGZqP/wAwf///AA/mZv8AOeZnCP8ACOZo/wAgZmb/ABdMzIsFkKqVupzF///5gAD/AAOzM///9IAA/wADTM1/iwh+bgX///lmZv//8UzN///55mj///NmZv//+WZm///1TM0I///0TMz/AAMzM///+LM0///lgAAF///xszT///OZmf//7ZmY///5szNviwj7GYv3hPf1BZylkJeLjwgTuI8KE9iQChO4jQoT2J/UqqCpiwj3Hov7ivv/BYN/ioiLhgiEk4aaHv8A+DM0i///80zM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rLmzrLaL0wjdR7YkKilMQmugep+im5adHov/ABpmaIT/AAOZmIudCLPIsLzBvW1BHotQ///nszT//+qAAP//10zM///agAD//89Mzf//0xma///sTMxs///5TM3//83mZgj//4kZmgaHhYmFi4OLhYyFj4QI/wB1MzMG////5mX///szM////+Znhov///rMzQj7KweLbv//9jMz///0zM3//97Mzf///TMzCHOJBYb///+Zmon///1mZouGCIt4jIkFvYyfjLKLtIufir2KCI2Ni54Fi5CH/wACszOH/wAATM0Ic40F///eszP/AALMzf//90zN/wALMzOLqAgO+zqJqPdnsvdrdvcuqgGx2s/W0tQD/wEBGZr3qRX///lMzf8AMhma///sTMyq///PTM3/ACzmZmKwc6GLxgjVvanBvMhmYx6LeYSHi3EIeZuAop+gnKvUKcoqJEdgOR6LQ6xguWOx///e5mb/ABSZmf//6Rma/wAGzM1gCP//kJmaBoeFiYWLg4uFjIWPhAj3B/s6BotugoBqiAhziQWHh4iGH4t4jYkFvYyfjLSLsoufir2KCIyNi54FkImOhh5zjQVqjoGWi6gI9ysHi/8ABTMz////5maQ////5mb/AATMzQj/AG4zNAaOko2Qi5KLkYqSh5IIDvdjgbpmrff9rXKu916ppncSsOH3cNqUrBMvgPhY+E4V///9mZr///xmZv///GZm///9mZofil6FZYNa/wAIzMz///xMzP8ADJma///+GZr/AAuZmv8AApman9SqoKmLCPcei///Hxma//60GZoF///hGZr/AAmZmf//+szM/wAT5meL/wAlZmYI+FkHzI+zix6Sh46CHnKBQH1jiImDjXuRhb+Il5CLNwj7FAeEiYmEHhOfgIeLYpxqi0mLX3VjZWBgcVCLQYv7D8kx9wCLsouwn7z/AChMzf8ABMzM/wAD5mb/AAczNP8AAczNi4QIc5Zoix6TiI6Mk43/AAyZmv8ACkzN/wARszT/AAlMzf8AGEzM/wAHZmb///+AAP///kzN////5mb///5mZov///5MzQgTb4CEk4aaHvfMBpCqlbqcxf//+YAA/wADszP///SAAP8AA0zNf4sIfm4Fc1Z6cFGLCPsZi/eE9/UFnKWQl4uPi4+GjoSLhotrhG6LCPtfBv//3+Zmi/8AAJma/wAJmZr//+6AAP8AA2ZmCPsB+9IV9wAKE5+A9wEKDvc0+3+u91K6hKa5rfeWrXKu916ppncSsuH3cNpX1/dW3BPX0Pft9xAVbAqA//74TMwVbQoTu9ChnbGayJKRkYuahZFLkIKei7wI/wDpmZoH/wARZmb/ABdmZp+T/wASmZqLCPcli/s8+7ScfAWdj6mSlosI2apjJvsARlVZHxObsPd1ChPX0P//+2Zmi4f/AACZmv///Jma/wABGZoI/wCYTMwHzI+zix6Sh46CHnKBQH1jiImDjXuRhb+Il5CLNwj7FAeEiYmEHoeLYpxqi0mLX3VjZWBgcVCLQYv7D8kx9wCLsouwn7z/AChMzQgO93KBumay5az3ebJxrvdeqaZ3ErLh93Dajqb3zqkTZ+D5lOgV93gK+zwuFccG4r6xw8FcmXMfZov//+EZmP//8OZm///q5mj//+wZmnr//+/mZnj//94ZmnplCEmL93r38AWUmZOWi5IIEzfgk4WOgB77gwZui4mVio8Ido9t+ymmhgWQrZy0lZSWk5mQn4sI9yKL//8o5mb//rjMzAX//+MZmv8ACczOhv8AE+Zmi/8AJIAACPhZB8yPs4sekoeOgh5ygUB9Y4iJg417kYW/iJeQizcI+xQHhImJhB4Tr+CHi2KcaotJi191Y2VgYHFQi0GL+w/JMfcAi7KLsJ+8/wAoTM3/AATMzP8AA+Zm/wAHMzT/AAHMzYuECHOWaIsek4iOjJON/wAMMzT/AAnmZv8AEP/+/wAJGZr/ABcZmv8AB0zN////zMyK////5mj///7MzYv///7mZggTd+CAm4meHvUGfGV/Y4RmCKqEBZCvmLebtQj7k/cQFfcAChOv4PcBCg6Pf6n4CbJ5qRLk1lHF9Mn3OM5qnxO25OIVK7KI9ycesYv/AI3mZv8AABma/wAuGZr/ABjmZv8AKOZo/wAWGZr/ABQZmP8AH+Zmi7qLtf//8bM0/wAuMzP//7NMzP8AHMzNK69fsouni8a5nrKLCBOloYvIgKn7AAifjH/3DQV4llebWYs6i0lYi0aLQ/8ALTM0///rZmb/ADPMzP//65maCBPWzXHKbYtOi1lXc2WL+wWLI5N5soaZiqGLrAj3lfcDsgcTzPsD9y4GUXeLeAWLX4dvg3x9dWqFcIsIZAcT1tAGDvsZ+3Ox90PC9+2y93atEuTaW83k1hP29yv7DxV4f3p7YsFxtR+ai/8AFuZm/wABGZr/ACMZmv8AHOZm/wA7zMz/ADEzM/8AATM0/wBQzM2L9gj4OQfqlerFHpyLm36VcpB7kn6hiwidmZmfpmqzQB9vi3GBcHb//8QzNP//0DM0///8zMz//7FMzIv//5mAAAgT+iCyBsyPs4sekoeOgh5R///lszQFhf///EzM///3ZmaJ/wAAmZqE/wACGZr//+kzNP///+Zm///2zMyL//+tGZoIXf///+ZmBX2Hf4MffgeGjIqPHsb7wQZEqm+5Hv8AJEzNi/8AJszN/wANszP/ACHmZv8AG2ZnCP//2OZmB/sqanB1HhP2dIuGmoWaCIachZpziwj3EP8AvkzNFXP///AzNP//5WZm///5gAD//+iZmosIE/pwhanJH/eR8weMi4yLjP8AABmaCA62gcL3C6T3XbJ0rBLk2tjh907lcqwTzfja9xUV928KrJgVi/8AEbMz///5Zmj/AA3mZ///9JmY/wAHZmb///WAAP8ABszN///xZmj/AAEzM///8hmYi///sIAAi///vhma//+gMzP///BmZv//4MzNVa1/34vOCBPe1rjf0h7Bi5hvjm3/AAKzNP//5WZm/wAGTMz//+mZmq6LCKKinKPOQKtG+xo3I/sQH4tY/wALszL//8+zM/8AGRma///YZmf//+ZMzP//7LMz///igAL///gzM///5mZmiwhwhanJHxPt95HzB5WZj5QfnwePiI2GHvsMsgbMj7OLHpKHjoIeUf//5bM0BYX///xMzP//92Zmif8AAJmahP8AAhma///pMzT////mZv//9szMi///rRmaCF3////mZgV9h3+DH34HhoyKjx7G+8EGRKpvuR7/ACxmZou7/wAUgAD/ACZmZv8AKOZm/wAQTMz//+xMzf8AFEzO///vMzP/ABiZmv//8xmaCFAsBZGE/wAOZmaG/wALmZqKnaqir5+rl4ioi5iL04vswYvtCA73dvtxr/dLqPf/smW793asEuvW90HuTdb3XtYT7YD39PgaFaWOf1If+40Hi27///RmZv//9UzN///gmZr///yzMwh4iQWG////gACI///9gACLhgiLeI2JBa+Mq4yxi7CLq4qvigiNjYueBYuQh/8AApmah/8AAGZmCHiNBf//3Zma/wADmZr///dmZv8ACmZmi6gI/wD9TMwHE96A/wAu5mb/ADGZmv8AMzMy/wAQGZr/ACXmaIsIsad1SB/7dwf7AJX7LF8egIuFkoWUg5WBl3GLCIB4f3ltrX2dH5+LrYuwqrqxm+6L9zYI9z8H5XrQMx7//81MzIv//74Zmv//65maVP//y8zM/wAAzMz/ACMZmv8AAczO/wAlgACLi4v/AAHmZor/AAEZmoiLCBPugG1/bYpoiwj7UcQG9y7PpKweq4uqf5Rg/wALTMz//8oZmP8AELM0///n5miqi5+Ln52Ln4uwav8AJuZoZv8AGRmYcpxxlWWLCDcjU/taH3xYB3mGf4MffgeGjIqPHtD70gaLbv//9WZm///1Zmb//9+Zmv///JmaCHiJBYb///+AAIj///2AAIuGCIt4jYkFr4ysjLCLr4u6iq+KCI2Ni54Fi5CH/wACzM2H/wAAMzMIao0F///cTM3/AAIzM///+LMz/wALzM2LqAj30gcORoGscqz4C6z3XqmmdxLq2qKqetL3IddVqxN9gOr3DhWLOICGToiFhYt2kYW1jKWMt4u2i6SKtor/AADMzf8AAMzN/wAAszP/AAEZmf8AAJma/wABTM0I/wAA5mb////MzQUTvYCFChO9QIYKE76A/wBSzMz//92Zmv8AEzM0///rZmaLYItaW3Zmi2SLdZiBlnOigreFpIWReIqFhf8AAuZm///cszP/AAJMzf//3czN/wABGZr//9/mZghz/wAHzM3///qzM/8AE+Zni/8AOeZmCPhhB8yPs4sekoeOgh5ygUB9Y4iJg417kYW/iJeQizcIDoeLrff9rZl292+ppncS6tq5rBO+94X4ThWNChPen9SqoKmLCPcei///CjMz//6VTMwF///UTMz/AAQAAf//94AA/wAMmZmL/wBJGZoI+GEHzI+zix6Sh46CHnKBQH1jiImDjXuRhb+Il5CLNwj8SQeLOICGToiFhYt2kYW1jKWMt4u2i6SKtor/AACAAP8AAIAA/wAAmZr/AACzM/8AAGZm/wAAzM0I/wEwgAAGkKqVupzF///5gAD/AAOzM///9IAA/wADTM1/iwh+bgVzVnpwUYsI+xmL94T39QWcpZCXi48IE76PChPekAoO+yr3oqL3z6IB993zA/cT96cV934K9+YE934KDvta9z7B97DBAbyn94eoA/fx9/4V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UQiijILWBYCSZJVsi1qLXmuLYYte/wAfGZr///BMzP8ALeZm///sszQIE+j3jQoO+7T4AKH3daEBoPemA/8A6jMz+M0Vp/8AI+Zo/wAEszL/AARMzP8AHBma/wABzMyPj4uZh495ioSKdItzi3yMeYyHh4t9j4eoiv///jMz///3zMz///LMzf//7TM0CGJSZ8QFf5+LkqiMj4+LmYePeYpuinOLdIuBjHmMh4eLfY+H/wAcGZr///4zNP8AARma///9mZj/ABqZmf//2jM0CP8AODMzOwWIiP//zszNUYuL///hmZn//9yAAP///bM0///7TMz//+PmZv///jM0h4eLfY+HnYySjKKLo4ubip2Kj4+LmYePCG6MjJSZnQizvatZBZd4joNuioeHi32Ph52MpYyji6KLmoqdio+Pi5mHj///4+Zm/wABzMz///mZmv8AAuZo///lszP/ACVMzAj//8vMzdUFDvvw+ACi996hAaW7srydwwP3TfgXFXSLlJ0f0AeLuf//5uZm/wAb5mj//+gZmv8AGRmYd6B4oYurCKmbqbCppXpyHouHioeKiIuIioiLhwh4nIeVl5yVnL9RqFZMZ2tZHotdonehd6B5oHmLZAg7B4t5ioF0igiABoeKiYgfeQeLsoykpLKKix6dB4+IjIkeDvsyoHb44cMB98nKA/gI+RkV++5T96/84coGDvsyoHb4m8PRdwH3ycoD+Aj5GRVMRfuvU/ev/JvKBg77MqB2987D96d3AffJygP4CPkZFUz7p/uvU/ev+87KBg77MqB20MP4nHcB98nKA/gI+RkVTPyc+69T969GygYO+zKLw/jhdwH3ycoD+Aj5GRVM/OH7r1P37gYO+3rVuAG9vgO91RX3nbj7aveNWAYO+3P3YrkBvb8D8b4V9y/3cLn7cPcrV/v0Bw77r/sV95QBmPcTFfcT+5Sqi/cO95ReizP7Si33SgUO+wH427botwH4dvjbFbb8cWAH+HH3HBW3/HFfBw77bfhXn9vdAfcWrfcNrQPx+Q0V944K9y+NFWh7cnt6lXOz/wAYMzT/AATMzP8ABpmY///sZmgfi3R3a1J/i4SMgo+HsZD/ABwZmv8AEOZm/wAQ5mb/ABUZmpufkqGLowivdLBkHg78EP//HYAA91UBlf8Aw7MzA/8Aa+Zm//9hszMV///DgAD/AHzM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FdsKDviGwInCEvsbphOg+0r4uxWyChNgswoToLQKDvhqn9vdAVStAzj5IBX3jgoO+3f4pOoBvenW6QO9+NMVlAr3PRaUCqT3ZxX3mQoO+4KzAfty1tSkA/tyQRX3mgoO+Hf3C1+3EvwLt/cstxNw+9/4gRX3lQoTsPeWCg77Z7e5twFC+w0V95cK9+0xFfeXCg77dfdFAfuis9GzA/t6+20V95sK9wIW95sKDv//l4AAsgH//2OAALMD//8GgAD//76AABWChoeCi4aLhYyGk4II7EUGkIGSiZCLkIuVkJOZCIvmf5YFDvikwInCEiKmE6D//ylmZv8B72ZmFf8ADEzN/wAuZmYF/wAMMzL///gzNP8ADGZnhf8ADLMzi7mLqLKXx4WPgY6Ain1hgIF1i///8pmai///87Mz/wADgAD///RMzf8ABjM0CP8AEGZm/wA+TMwFg5SG/wAEgAD///cZmov///wZmov///2Zmf///5mY///6zM3///9maAj///HmZv//yoAABRNg///wMzP/AAtMzP//7kzN/wAKszR1i2CLdGR9UJGFlYqWjZWslZqli/8AD5mai/8AEUzM///5TMz/ABCZmv//9mZoCHz//8dMzAX/AAaAAIP/AAKzM////DM0/wAGTM2LCI+Lkv8AAMzM/wAHZmb/AABmZggO/wHT5mb/AEIzMv8AA+ZowInC///35mj/AEIzMBL//trmZv8AQjM0/wAXzMz/AEIzNP8AH+ZmphOO+5j/AdPmZhWd/wAPGZr/AA8Zmp2d///w5mb/AA8ZmHl5///w5mb///DmaHkfef8ADxma///w5madHhOe5f8AqAACFZ3/AA8Zmv8ADxmYnZ3///DmZv8ADxmYeXn///DmZv//8OZoeR95/wAPGZr///DmaJ0eE86d///TGZgVsgoTrrMKE860Cg74jq6LrKaui60B/An3oQP7DPjTFYaLf2lfi3eLSaxui2yLcXl3aouFl36Ti5GLlrCvi6mLyWiriwipi6Oena2LkYOVg4sI6wSFi4BoX4t3i0itb4tri3J4d2oIigeLiI2IkYePh4+Ij4uRi5WvsIusi8Zoq4upi6OfnayLk4OUg4sIDvspqQH8MvsTFYAHx2ule55oCK0GfKt2oHmeCPddBnl3dXd9awiuBqeqsauxnwiWB1mdYrp+mwhpBploqXGU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px8O+JGh9wacAfuBscSuA/s6+SoVYG9iZGSiabkfo4ufmJme///95mb/AAWzNP///IAA/wAEszT///iZmv8AAZmYgX+FgXaLCIBvkLuznqCcH5qL/wAEszP///YZmP8AAUzN///z5miMgpSElIuTi5ORi5iLlf//+OZm/wAMGZj///MZmv8ABuZo///1zM3/AAWAAP//8czN/wABgAD///FmZosIDviSnPcGm6uZAfugssavA/s++LQVgoGBhIOLCHh+l7yzlpidH5mLkoOUgQiKKxWNiop6mIsFmJKbjp2NCImaBX6Ngv8ABMzMi/8ADzM0CPcxgAd+hXmHeYkIjH0FmoiT/wABmZiL///yZmgIbgeDk32PfYthi3dhi2iL///pTMz/AAZmZv//6rM0/wAMmZp//wAKzM3///WzNP8ADZmZ///8TMz/ABCZmouXi5qTlZQIDviUmfcEo7CZAfu/r8mvA/ub+TYVo4yZix6OiYyIHoKHaoZ8igh+B4qMi4wel4oFko+Hcx/7DQeLf4qKfokIhooFiYuJih+AB4ugjJidp4qLHpYHjYmMih6FjAWBjIeNi5cI0geWmJaXl4sInJaHbh9MB4t/iImAigiFigWJiomKH4AHi6GMmZylioselgeLjIuMiYwIh4wFgI2IjYuWCM8HsXGZch53i3h4g4IIDviVmfcCogH7wK+/rr+vA/to+LQVi36EioCIioeLhYyHlYyajJSLloudipOKjI+LkYqPgY6DjouWCMsHi/8AA8zM////zMz/AAOZmP///5ma/wADZmj/AAmZmv8ACjM0/wAMMzOT/wAJzM2LCJuQhG8fUQeLgIOIgYiKh4uFjIeTjJ2MlouUi52KlYqMj4uRio+AjoKMi5gIywevd5tzHv//7UzNi///62Zm///tszT///ezM///9szM///5mZr/ABLmaP//8WZm/wAImZj//+2Zmot4i3t6g4IIiYyMpICLBX6FeYd5iYuF/wAAmZr///vMzP8AAWZm///8MzSbiZGKi34IQQeLfoKKgIiKh4uFjIeVjJ2MlIuWi52Kk4qMj4uRio+BjoOOi5YI0geVl5aVlosIm4+Ebx8O+JOZ9wKmAfuLrwP7aPkOFY2KBZWZmJqeiwibkoOAgISFgB+Di4aOiI+JjYeLiYuHi4WHgn6JiIiGi4cISweLgJOIlYiM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MzT/AAgZmv//+pmY/wAGTMz///UzNP8AApmafHmDhH2LdYuCoG26CEP3CAWDl4Cci5SLkIuPjo8IrrYFsbuXnJqLkYuUiZKElIOWhJyLCJ6cnJyudpdsH16L///eGZr//+CAAP//uuZm//+qgAAIZVwF///tGZr//+iZmv//9uZm///5ZmZ9iwj/AExMzAf/ADGzNI/Lix6Pho6DHhPY///jgACA///YgACCRoKJhY17jYUI/wA2gAD///rmZv8ACoAA///6GZqLUggOS4DI+N/IAfigzBX///yzNJT///qZmP8ABJma///0szT/AAJmZnZxd4Z2i2uL///0szT/ACAzM///2EzM/wCDzM0IIPf3Bf//3IAA/wB1zMz//8iAAP8ACzM0bYtki2tscWX/AAIZmv//8zM0/wAHmZn///4zNP8AB0zN///9mZifmqWVpIuni/8AJkzN///qzMz/ACmzM///djM0CJhg+3H8R6R/BaKRpI+mjQj3I/f/0vuBBacuo1+9i6iLsrCdsggOIvttdvd4uPggdxLB2jza91PaE/T31scVjQaOb5phxYsIvLGzkJKEk4cf///6MzSLiHv//+fMzIsIZIq0uR/3cgerjsuLHnyFeId4i36Le4yFjJFri1qLbwj7cQd1allqVYsIVn+8zB/3VgericuLHnyFeId4i36Le4yFjJVrjFqLbwj7ZgeLeI90i4CLdod5i3CL+xCKVH5pCJZ52qoFj6CNpIuki8CDxouei4+MjYuMl4Sfhp2LCMiLtaWztwgO+w34EKaudwH38eYD8ffpFfcD+/EF/wAJszP///xMzf8ACZma////Zmb/AAmzM/8ABEzN9x33Ucj3GIvVCKd9pm1se3N6HotYno2LSYv//96AAHP//82AAEP7AP//+YAA///2TM2H/wAEzM3///1mZv8ACOZmCP//oBma998FiJb///2AAI3///mAAIv//+GAAH5h///3gAD//8SAAP//8oAA///+MzOD/wAAzM2Aj4MIsIkF/wAXMzP///6zNP8ACpma///5MzL/AAkzM///4xmaCA77Pft4s/dKzfeW0Uqu91+p9ncSstNt0vdsqxPdgPdh+MwVW2g/UotUi1amerl8CBPegDRjb0iLUAg3ti/3RMy4dVlTbFVoHneLd455lHeUepN4iwgT3YB2fIB5aq6EtfXM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iftodveOdvhSdwHJrvfz0AP4VBaWf8Wdi/g9dZY7gPsS++n7HPfpZJZXgIv9JpSFpZGL+OONjPcp+/sF/wACzM3///lMzf8ABDMz///8szOPi5GL/wAYTMz/AAMzM/8AArM0/wAGzM0I9y74HI2KBQ6Pgbj44a0B+GvlA934rxX3xAoOj4G393/3CPd+sgGy5Pc99wgD9/f3oRX3oAr3afsoFffDCg6Pgbj3efcI94itAfc49wj3U+UD93L3nBX3oAr7IPenFffECg5diaxssvewsfeIs2ys03YS5+D3SqyyrJuuEyfA94L5xhWvCjD8CRUw91wGEzfAvQoTr8BIChNnwEkKE6fAvgoTd8C/Cg5diaxssvewsfeIs2yswusS5+Bm6+jrSayyrJuuEySw9935ghXAChMlMPtRFsAK9xT8GRUTNnBHChOucEgKE2ZwSQoTpnC+ChN2cL8KDvcf+yzT2az39cL3O7ISkq1/qvdX4PdGqXatxsoT8sD36PcOFf8AxOZmB/8AOszM/wA3MzT/AEfmaP8ACeZm/wAhTMyLp4uehJ3//++AAP8AL4AA///UZmb/AAOAAP//npmai///soAAi2SM+0tai3+Lf5CCj4GQf45+iwh3end1cal2sB+hi6SXnZ29vK31i/cbi/8AXLM0///2Zmj/AGGAAP//05mY/wAuTMz//+uzNP8AFRma///izMz/AA1mZv//2YAAi///w8zMi///vEzO///sMzL//7bmZv//wLM0CP8AvBmaB62fp68evwbCi5J7nD7/AAtMzP8AAEzM/wALTMz///8ZnP8AC2Zo/wAFmZgIE/dAg76GwYu8gf///+Zogf///xmYgYgIhYp6dh78MwZ2i5yRH///+DMz/wACzMz///hmZ/8AAszM///wZmb///5maAgT+sCHWoVXf1b/AAnmZv//++Zo/wALmZr///7mZP8ADIAA/wAAMzSf25iYwosI0Aawn29sH/w9B4s4eoY7iIWFi3aRhbyMr4zCi8GLroq9ipGRi6CFkQg7jnqQi94IDvsGiaz40rNsrNN2Eu7g96CoE5z37fnIFbAKE9z7YPtDFRO896oKE9z3qwoTvPesChPc960KDqSBrveevXnD94awErDi9/3mZqkTvLD32RX7Te77Kvdr7PcUx9WfgqByHm6LfG5+Zn1jY2k/i/soi0P3CoH3MqyaqJKxiwgT2vfFChO6UItgsUyLfotJf05pCIqMBfdp9wfV2h73HovEOqU1CKmPBYG/g7yHwVKOY7X7E4sI+zr7DPsQ+2UfDvsCga/46q0Spv8AIIAA///3gAD/AEdmZv8A7Zma30v/ACCAABPY/wGKszT5CxX3YQoT6PckChPU92IKDvu+iaz426wB9eAD91P3DhVOCg77voms+NuszusBkeuP4I/rAxQc91f5jhW1CvtRFrUK9039FBVOCg77Z///+LMz/wAoTM342awB92bgA/e7+J8Vi96ckMeOkZGLoIWRWopzilyLVYtojFmMhYWLdpGF24ichos4CPvUB/s1WoJqHn2L///5TM2f///4szOV///2TM3/AA0zM///9LMz/wANzM1siwh9c311///OgAD/AFbmZv//9DMz/wAZszQf/wAbGZmL/wAg5meT/wAgZmb/ABdMzf8AMBma/wAiszP/AB/mZv8AQkzNi+8IDve6f8dZqffFs/eIpxL3bbf3ROD3iuQTfvie9+EV4gb3FakxT01oLvssVYadrB/4UASL3pyQ0Y6RkYughZFaijqKi4sI+4EGSmaMix+Kiot6BYuDjv///xmYnf///uZovoiRe4sni/tfePsMeE0IE75/Ynlydot/i4COg6KFnX6acYsIcHh3a1bCfbAfxYuvr6C/sOeW91aL9zgI1pGbth7WBraUeG4f/IUHi2////FMzP//9Bma///XszT///zmZghxiQWG////mZqI///9ZmaLhgiLeAUTfo2JBYv0jaceqIuqia+LCPcN9zGd9zvkbvD7ih9PBg733Imp986x94KnAfXc97Db94rlA/i7+A8V91UHi6f/AA9maJj/ACeZmI4IpY0FkP8AAGZojv8AApmYi5AIi56JjAWLLopnZDSMix6Jiot4BYuGj////WZokP///5mYCKWJBf8AKZma///8zMz/AA1mZv//9TM0i20I+1T7sPdUB4un/wALZmb/AAyZmP8AK5ma/wADZmgIpY0FkP8AAGZojv8AApmYi5AIi56JjAWLLopnZDSMix6Jiot4BYuGj////UzMj////7M0CKaJBf8AIbMz///9gAD/ABRMzf//9IAAi20I/IYHi2////GZmv//8eZm///YZmb///0ZmghwiQWH////szOI///9TM2LhgiLeI2JBYvoja6z4YmLHo2Ni54Fi5CH/wACszOH/wAATM0IcY0F///YZmaO///wmZqWi6oI96D3sPugB4tv///0mZr///JmZv//1GZm///8mZoIcYkFhv///5maiP///WZmi4YIi3iNiQWL742oHqiLqomviwj3Dfcxnfc75G32+4kfTmQV4wb3FKkqT01pLvssVIadrB8O9yqJqPgCuvc5sxKSqYOm91zg90mlhKiY1hPlgPeU+MoV/IAHi2////GZmv//8hma///XZmb///zmZghxiQWG////mZqI///9ZmaLhgiLeI2JBYvqja6y6ImLHoqNjJ4Fi5CH/wACmZqG/wAAZmYIcY0F///ZZmaO///vmZqWi6oI94oHxsO/nKiLCLnDZTof+1wHi27///dmaP//85ma///dmZj///xmZgh4iQWG////gACI///9gACLhgiLeI2JBYvPja+yz4mLHo2Ni54Fi5CH/wACZmaG/wAAmZoIeY0F///imZj/AANMzf//8mZo/wAMszOLqAj3ZAfyTsJDHmSLPXtISAj3Ygetl5OvHsoGwouZf587CKiQBRPugIDAhL+HvAhxhwWFinp2Hvw7BnaLnJEfcI8FE/WAh1qFV39WCKmGBZ/bmJfCiwjdBrCXg2wfDpaJqPe9tfd0yGqo03YS9eATzPg/+cgVsAr8Lf3IFY2JBbyNq4u9i72LqIu7iQiNjYueBZCHjocecY0FY/8AAxmafP8ACOZmi6kI95EH9waL/wAS5mZq/wAnGZontvsCrzrZigjaioyNi54FkIiOhh57jAVojv//zRmaz///y+Zm9xtw0WS2RosIkAfXp6DhlskIE+z/AAUZmqj/AAbmZqypi5iLk4aWgJWBmYaYiwigopaoonmoVh88i29TgU2CU31LUGtzfV6KZ4sI92QHi6ea/wAK5miz/wADGZgIE9z3xgoO9weJrPjbrNN2AfXg99bgA/e/+cYVxgr3Rvz4FffHCg58dcn40qy9qgH3T9H3A9AD98z5bBX3yAr//zCAAPthFffJCg70iahwsvjXpxL14Pcirvci4BQcE3z45/jQFYun/wAPZmiY/wAmmZiOCKWNBZD/AABmaI7/AAKZmIuQCIueiYwFiyqKZ2Q0jIseioqLeAWLho7///1maJD///+ZmAiliQX/ACaZmoj/ABBmZoCLbQj8fQdphYFtHvuKBm6Dn6Mf+H0Hi6f/AA1mZv8ADMzM/wApmZr/AAMzNAiljQWQ/wAAZmiO/wACmZiLkAiLnomMBYsuimdkMIyLHomKi3gFi4aP///9TMyP////szQIpokF/wApmZr///zmaP8ADGZm///1GZiLbQj8iQeLZf//+mZm///+GZr//+GZmv///eZmCBO8bokFhf///5maiP///GZmi4YIE3yLeQUTvI2JBRN8i+SNqR73Dwapi55jkyYIrgaT75u0rIsI9xMGE7yp4YmLHxN8jI2LnwUTvIuPiP8AAszNiP8AADMzCGyNBf//4JmYjf//+mZojouwCA7viaz3ZrX4C3cB95v3rxU+Cvuu+2AVPwoOf4ms98Kz93yzbKwS8eD3mOVCrhPM90/34RX3MQphOhX3MgoT6vczChPciY0FE+yLOol3Hvt9BhPc9zQKDoSJrPfBrfeLrRL14Pds3GnoE/j3U/jOFUAKaQTQBhP0QQpg+LcVQgoT+EMKDvsGiaz40rNsrBLu4PegqBPY9yH5GRUTuPeqChPY96sKE7j3rAoT2PetCg7Li7L4yrNwqBKtpvgn4L2mE7z3BLoV///xgAD///GAAHv///2AAP//7IAAiP//9hma///+gAD///WAAP//+oAA////ZmZ/CIT7KKaKBZa/peTeiwj3tgbbi682l1MIi4uMph6E9ygF////ZmiX///4TMz/AANMzf//6kzM/wADszP//+6AAI7//+mAAJaLsAj4eweLr/8ABMzM/wAMzMz/ACAzNP8AAjM0CKiNBY//AABMzI//AAGzNIuRCBPci54FE7yJjQUT3Is8iW0e+5kGE7xtRY2LHxPciYmLdgUTvIeOiZAeqYgFpf///WZolP//9ZmYi3aLTH8kdfsGCGv7MP//7hma//+4GZr//+XmZv//5eZmCBPc98/4whWqkYNsH/x7B2Z/iHMe+28GfX6Qlx+LoKTuofcJl8//AA/mZvP/AAgZmvCNpJWZposIDl2JrGyy97Cx94izbKwS7OD3SqyyrJuuEzeA96X3/RVHChOvgEgKE2eASQoTp4C+ChN3gEoKDvegiaj3vbX3dMhqqBL4GeAT6JEWi4nWjAXVjK3ctPcCr++drPSLCPuRB4tvf///9RmaYf///OZmCHCJBYeIiIYfi3iNiQW8jamLvYu9i6qLu4kIjY2LngWQh46H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zmZm///JmZprhwiCigWHiIiGHw77HoG0+AusEq/eS9X3ONkT6Pe5930VZQra+zgVZgoT2GcKE+hoCg77Bn+r+BmsEq3i943Za6ET8PcN938Vv6D3DvHZuyz7DPsSUVtVHjlU1PciHzShFftV9wE/7PcS3fcD9wv3AFf3CPshHiyLVlp1WwiFjQWPtJq4mqWrwrH/ABbMzOf/AAozNAgT6OWVy6iU9wQIdQaDW///yuZm///zgAD//6wZmv//8oAAOn5HW2E8Z0eBO4s8CA77Iomo91Ko9y6qEvHV9yrQUdMT+PdE94oV93kKTW4V0gYT9Pd6CvskQRX3ewoT+Pd8Cg77VYmo9/+ycKgS9dYT0PXVFYtu///0mZr///KzM///4GZm///9TM0IdIkFhv///5maiP///WZmi4YIi3iNiQWL042vstOJix6NjYueBYuQh/8AArMzh/8AAEzNCHSNBf//3mZm/wAC5mb///aZmv8ADRmai6gI958HtZGSrB6yBsWLoVKYUQimjwWFvoe5icAIE7CJjQUT0PfUChOwbTmNix8T0IiJi3UFE7D31QoOMouy9/SxcKgSo6Xzr/cf1rmkE76j+xQVpYoFk7Cl59+LCPc2Bt6LqDOTYwiki4X3GgWLmYT/AAPMzXn/AAMzM3qOdJSLsAj3qQeLrZX/AAjMzK//AAQzNAicjQWOj46PHxPei58FE76KjQUT3otCiWoe+1IGE756PY2LHxPeiImLdQUTvoeOio8epokFroiRd4t/i/sL///t5mYw///tGZo2hXBwfnGIfYl+iYp5CPcNuRWLnKTQmfd4CBPej5Choh7SBrCOfGkf+5IHaoh7Zh77CwaBgoyWHw77KIG892Wt9w6sAbDf91vhA/cQ964VcArc+1QVcQoOzYmo90ut9xPOZ6gS97nWE+ibFvfWChPY99cKE+j32AoO+yuBqvdNtPc1qhLDpPdz2VHcE/Sx3hX32QoT+PfaChP099sKDnmJqPgLqAH3ANb3YtYD9yT4QRX33AoOeYmo+Auo0aoS9wDWgdTr1HHWE+z4M/jgFffdCvuj+zMVYEmNix+IiYt1BYuHjf///0zMj////7M0CKmJBRPy/wAlszP///2AAP8AAkzN///3gACLYQj7ogeLaP///bMz///1Zmb//9pMzf///ZmaCGyJBYj////MzYn///4zM4uICIt1jIkFs4ynjLaLq4uUirOKCIyNi6AFi4+J/wABmZqH/wAAZmZpjoiWi6MIi433YveMi/uABYto///8zMz///NmZv//2jM0///9mZoIbIkFiP///8zNif///jMzi4gIi3WNiQWzjKaMtou4i6mKs4oIjI2LoAWLj4n/AAGzM4f/AABMzQhtjQX//90zNP8AAkzN///6zMz/AAqzM4uwCPehB4u1/wADGZr/AAeAAP8AJOZm/wACgAAIqY0Fj/8AAEzMjf8AAbM0i48Ii6CKjQWLRYleb16Nix6JiYt1BYuHjf///0zMjv///7M0rYiMeotzCPti+4yL94IFi7SO/wAIgACx/wACgAAIqY0Fj/8AAEzMjf8AAbM0i48Ii6CJjQWLRYlfHg77Como90qu9xPOZ6gS8NYT6KsWjYkFi8+NrrLFiYsejY2LngWLkIeNh4x1jm2Ri6wI9yAH1oahZ55U/wAPMzT//9QZmv8AHszM//+65ma9igjTio6Ni50FkoSNhx6DjAVnkGLie7F3vGahVYsIjwewlv8AF8zM/wAiGZr/AA4zNP8AJ+ZmlqqeoZWLlIuSiJGHkoaUh5eLCKCcnZ+jgKBiH1uLa1V5XP//6uZmVP//4xmaZUiLCPcGBxPY994KDi1/tGyo9/+ycKgSj9Per/cS1hOuj7kVbKVwtx67i/8AG5ma/wAZ5mb/ABVmZv8ANhmanruQ8YvPCNmOpbEeuAavj31pH/ugB4tug39ohwgTTniJBYaKiImLhgiLeI2JBYvPja+yz4mLHo2Ni54FkIeOhx4TnniNBWuOgJiLqAj3qweLsY6RsY4Ip40FkY2NkB8TLoufBRMeiI0FEy6LR4lgHvtCBhMeY0yNix8TLoiJi3sFE56Lgo+KnIrD///8szSO///xTMyLIosi///4szP//8kZmv//8kzN///W5mZ/Z3t+e4t/i4eTiZj///0Zmv8AEuZm///65mb/ABMZmnCLCHN+d3UfDsyJqPgLqBL1r3Cu9+HQE9i2+EMViomLdQWLiIz///5MzI////+zNAioiQWl///+MzSY///5zMyLaAgT6IL7rgX///7mZmj///mAAP//92Zm///cmZr///2ZmghtiQWH////szOJ///+TM2LiAiLdYyJBYvLjampvImLHo2Ni6AFi4+J/wABgACH/wAAgAAIeo0Fbf8AA4AAg/8ACYAAi6wIE9iT97aNi/cq+/sFjoSPiI+LkYuQjo6SCPcw+AyMi4r7xgX////mZmf///zMzv//+kzN///dTMz///qzMwh+iQWI////gACJ///+gACLhwiLdoyJBYvCjamp4omLHoyNi6AFi46J/wACszOH/wAATM0IbY0F///Y5mj/AAKZmv///BmY/wALTMyL/wAhGZoI960Hi7D/AAOAAP8AA2Zm/wAkgAD/AAKZmginjQWP/wAATMyN/wABszSLjgiLoYmN+y6J+x375/sc9+cFDmSJqPdNrfcwqAHy1vdh1gP4E9gV930KDjCBrPgTrAG04feO4QO092EVfAr3XfddFX0KDmyJqPf/snCoEvXW91/VE9j19/MV+6cHi2j///qzM///9mZm///cTM3///2ZmghtiQWH////szOJ///+TM2LiAiLdY2JBYv/AERMzY3/ACuzM/8AKoAA/wBCgACJix6MjYugBYuPif8AAczNiP8AADMzCHCNBf//3kzN/wACgAD///mzM/8ABoAAi7EI96cHrp+PoB73DQafoIlmH/unB4to///6szT///aZmv//3EzM///9ZmYIcIkFiP///8zNif///jMzi4gIi3WMiQWL/wBDGZqN/wAq5mb/ACuzNP8AREzMiYsejI2LoAWLj4n/AAGzM4f/AABMzQhtjQX//91MzP8AAkzN///5szT/AAazM4uxCPeoB4u0/wADGZr/AASAAP8AJeZm/wACgAAIE7ipjQWP/wAATMyN/wABszSLjwgT2IugBRO4io0FE9iLRYleHvupBhO4998KE9iJiYt1BRO49+AKDi37fqj3V634BblmqBLs1fdm3hPs9z/3yxWhwLyorYsIyLdL+w01eCkgH3uLao1otAj3/gQT3ImNBYt0iX1oR42LHomJi3gFi4aO///9gACQ////gAAInokF/wAhZmb///yAAP8ACZma///zgACLbwj8lweLb///8oAA///zGZr//+KAAP///OZmCHiJBYb///+AAIj///2AAIuGCIt4jYkFi8+NrrLQiYsejY2LngWLkIf/AAKAAIb/AACAAAh4jQX//+CZmv8AA0zN///0Zmb/AAyzM4unCPc/B6V9p4Ovi7+LtZyysri5pMmL3AgT7PfhCg77QIG8+AOsAbDh903iA/gi5hVrCg77KYuo9/+wAfdM1gP3qvgcFdyLm2+cOgiljwWFuYexisUI/AUGilGHZYRdCKaHBZzcmqfdiwic+9AGi2T///vMzf//+bMz///cMzP///5MzQhiiQWH////zM2J///+MzOLhwh0B4v/AEkzM43/AC7Mzf8AMeZm/wBOGZqJix6iB4uOif8AAszNh/8AADMzCGONBf//4TM0/wABgAD///bMzP8ABYAAi7MI99AHDj/7fNv4uqwB92T7NBWMCg6s+21293iz+AWzAbLZ9zTW9zPZA/dnqRU9e/cA3+Kc5d0foIuegaBwCPu0B3ltdX1xiwj3YvgFFdqaIDc0ezA5H3eLd5F2qwj3tQegq6KVoIsISvxiFd0HoHWghKiLCO7O9wH3G/cDWeksH16LcXl2cAj3AgeLv53Hz7YIfKAFQmV0Yn5vgadzuEGtCHt2BdFgnE+LVwgoB3mgc5huiwg1OjX7NPsAvizqH7GLqJekpwguB4tXelBFXwibdwXVraO4laaYb6Jj1GUImp8FR7Z5x4u/CA4iiaz4A6wB90r3+hWLCg5giahwsvf/qBLw1vdc1hN4+Az39BX7nAdpiHxmHvsMBmiGl7Af950Hi7T/AAaAAP8AAszM/wAhgAD/AAMzNAigjQWP/wAAZmaN/wABmZqLjwiLoImNBYv//8CZmon//9dmZv//1kzN//++szONix6KiYt1BYuHjf///0zMj////7M0CKWJBf8AIpma///9TMz/AAVmZv//+bM0i2UI+6wHi2T///pMzYr//92zM4cIE7h6iQWI////mZqJ///+ZmaLhwgTeIt2BRO4jYkFE3iLyo2pHveHBtqLqTuWWgikjIX3GQUTuIqc///1zMyN///uMzSOeY55m4upCPeoB4u0/wAHZmb/AARMzP8AIZma/wACszQIpI0Fj/8AAEzMjf8AAbM0i44Ii6GJjQWL//++GZqJ///V5mb//9gzNP//wczMjYseiomLdQWLh43///9MzI7///+zNAigiQX/ACKAAP///LM0/wAFgAD///pMzItkCA42iaj3C673cagB0tb3UdYD9+P39RX34goO93OJqHCt+ASoEvLW91PW91PWFBwTfPla9/UVi7T/AAhmaI7/AB+ZmI4IoI0Fjv8AAEzMjf8AAbM0i48Ii6CKjSGJI42KiYt1BYuHjf///0zMj////7M0CKOJBf8AJJmYiP8ABGZohYtlCPugB2yId2Ye+wMGb3+UtR/3nweLtP8ACWZm/wAEZmb/AB6Zmv8AApmaCKONBY//AABMzI3/AAGzNIuOCIuhio37AIknjYqJi3UFi4eN////TMyO////szQIn4kF/wAgzMz///yzNP8ABzM0///6TMyLZAj7oAdmhn5oHvsCBmiFlrMf96AHi7T/AAeZmv8AAoAA/wAhZmb/AAOAAAiejQWP/wAAZmaN/wABmZqLjwiLoImNJon7AI2KiYt1BYuHjf///zM0jv///8zMCKWJBf8AI+Zm///9MzT/AAQZmv//+czMi2UI+60Hi2r///rMzf//+LMz///dMzP///1MzQgTvHGJBYf///+AAIr///6AAIuICBN8i3UFE7yMiQUTfIvVjake+KkGE7yp34mLHxN8jo2LoAUTvIuOif8AArMzh/8AAEzNCGyNBf//3xmY/wACGZr///jmaP8AA+Zmi68IDvdqiahwrfgEqBLz1fdT1vdT1RQcE3z5Wff1FYu0/wAGGZj/AAKzNP8AIuZo/wADTMwIoI0Fjv8AAEzMjf8AAbM0i48Ii6CKjfsAiSWNiomLdQWLh43///9MzI////+zNAijiQX/ACCZmP///UzM/wAIZmj///mzNItlCPuhB2qHemYe+wEGbn+TtB/3oQeLtJD/AAQZmq7/AALmZgijjQWP/wAATMyN/wABszSLjgiLoYqNIIkmjYqJi3UFi4eN////TMyO////szQIn4kF/wAhgAD///yzNP8ABoAA///6TMyLZAj7oQdmhn9oHvsCBmiFlbIf96IHi7T/AAeZmv8AAoAA/wAhZmb/AAOAAAiejQWP/wAAZmaN/wABmZqLjwiLoImNJYkgjYqJi3UFi4eN////MzSO////zMwIpYkF/wAi5mb///1MzP8ABhma///5szSLZQj7rQeLaP//+GZm///6mZr//96Zmv///WZmCBO8cYkFh////4AAiv///oAAi4cIE3yLdgUTvIyJBRN8i9WNqR74hwbbi6Y7l1oIpIyF9xkFE7yKnf//8eZo/wACTM3///MZmP8AAbMzdI59noukCA5Riar3V6v3HLBwqBL3WNb3NNYT3PdY1RWLbv//+MzN///zzM3//9wzM////DMzCHiJBYb///+AAIj///2AAIuGCIt4jYkFi/8APszNjf8AKDMz/wAnzMz/AD4zNImLHvcEyMHf6TmlKx9S8AaLrv8ABBma/wAFszT/ACPmZv8AAkzMCKqNBY7/AAAzNI3/AADMzIuPCBPsi6EFE9yJjQUT7PsDiftYiwWKUYdehF0IpoYFnN2art2LCKGSg2Yf93/7cRU5XHxZXXqYrx73Js4H0qFeVh8O4Ymq91er9yKsAfXW9zTW59oD+N/3xxX3dAr7io8V9+MK+39XFffkCg77KImq91er9yWoAfXW9zTWA/fp9xIV9+MK+39XFffkCg77N4Gs9zmzebn3LKoSrtNTpPeD3BPart0VVtJk5u7v0fc19w1S7PsZHlyLYntaiAgT1ohlhmmBWwikhwWcy6q71YsI5Kk1Lx+IiQUTunGbcJduiwgT2vflChO69+YKDuaBrnCo9z+y9zmocqwS7NXs2/dx2xOv+FX4KhXZtUD7JvsYVm9iLWr3ENgf4qbo1R77SPs9FSn3CwaLp/8ADDMz/wAMzMz/AB7Mzf8AAzM0CBN3no0FkP8AAIAAj/8AAoAAi5AIi56JjQWLRolkaEeNix6JiYt4BYuGjv///YAAkP///4AACJ6JBf8AIMzN///8gAD/AAozM///84AAi28I+64Hi27///VmZv//82Zm///fmZr///yZmgh4iQWG////gACI///9gACLhgiLeI2JBYvPja6y0ImLHo2Ni54Fi5CH/wACgACG/wAAgAAIeI0F///fmZr/AANmZv//9WZm/wAMmZqLqAj3EOwHE6+NJscg9xSLCPcfv/cT7/Nd9wr7JB/7B4tKOIH7CwgO+zCJqPc9rXGl90CoEsTW9yjWE9yZFo6JyowFq4yss528/wAYMzP/AEHmZv8AG8zN/wApGZqziwik+wsGi2SJ///4MzNq///9zM0IfIoFh4mIhx91B4vEja+uw4mLHp8HjYmSgx51jAV7jIahi6UI97kHi6CSk52MCKSNBY2MjI0fi6OJjQWLVolpHmuLpY0/iwj7P4Ivbh8TvETUaMIeiAdvhmpzemL///CzM///2xma///fTM3//8DmZnCICIOKBYeFioQf9wr3whW6m63hspKHax4T3PscBxO8SAZSc7S9Hw77KIG892Wt9w6sAbDf91vhA/dm+TMVZAr7MPubFXAK3PtUFXEKDvsogbz3Za33Dqzm6hKw33Xp1ulh4RP07vjTFdEKE/L3PRbRCvsk+7kV3AoT8d0K3PtUFd4KE/nfCg5Ciaj3sre4rgH3Adb3cNYD99n4SRX7Ic4Gi7+dx8+2CHygBUJldGJ+b4Gnc7hBrQh7dgXRYJxPi1cISEJo1PvcB4tu///0zM3///NMzf//4DMz///8szMIeIkFhv///4AAiP///YAAi4YIi3iNiQWLz42vss+Jix6NjYueBYuQh/8AApmah/8AAGZmCHiNBf//35ma/wADZmb///VmZv8ADJmai6gI90gHwMS0jaWLuovAZov7J4v7jTN3T10IlnwF9wa87dyL91+L90Q6vDyLW4tnhFhXCPP3IQcO+1WJqPf/snCoEvXW9z+mE5j3mPkzFc8K+y786RWLbv//9Jma///yszP//+BmZv///UzNCHSJBYb///+Zmoj///1mZouGCIt4jYkFi9ONr7LTiYsejY2LngWLkIf/AAKzM4f/AABMzQh0jQX//95mZv8AAuZm///2mZr/AA0ZmouoCPefBxPYtZGSrB6yBsWLoVKYUQimjwWFvoe5icAIE7iJjQUT2PfUChO4bTmNix8T2IiJi3UFE7j31QoO+zeBrPc5s3m59yyqEq/c94OkE7yv93EV+zXvRe7m0rLAm4CYeR56i///9DM0///65mb///HMzP//4Bmaf3Bwc2OLN4texov3C5eQmI+YiwgT3PfnChO8aItwp2CLCBPcbotwf3F7CIiNBeep4eQe1YuqW5xLCKSPBYG7hq2IsVqOYptciwj7GVIq+w0fDvtogayJdvgqrBK7qnrS9yHXVasTdLv3HhWEChOshQoTqoYKE7SHCg77zomo+Auo9wjvEuzvOtUT6PdS+EEViY0Fi3WJfGhHjYseiYmLeAWLho7///2AAJD///+AAAieiQX/ACFmZv///IAA/wAJmZr///OAAItvCPuuB4tu///1Zmb///NmZv//35ma///8mZoIeIkFhv///4AAiP///YAAi4YIi3iNiQWLz42ustCJix6NjYueBYuQh/8AAoAAhv8AAIAACHiNBf//35ma/wADZmb///VmZv8ADJmai6gIE/Au+KEVdQoO+9KJqPgLqOvqEpDpnNV76RP491L4QRWJjQWLdYl8aEeNix6JiYt4BYuGjv///YAAkP///4AACJ6JBa7///xMzJP///OzNItvCPuuB4tu///5Zmb///PMzf//25ma///8MzMIeIkFhv///4AAiP///YAAi4YIi3iNiQWLz42ustCJix6NjYueBYuQh/8AAoAAhv8AAIAACHiNBf//4YAA/wADMzP///OAAP8ADMzNi6gI+034iBWUChP09z0W0QoO+9v7ca/436j3CO8S5e891hPo90/3ARWL99SJjQWLdIl9Z0eNix6JiYt4BYuGjv///YAAkP///4AACJ6JBf8AJGZm///8MzT/AAaZmv//88zMi28I+6wH+wGV+yxfHoCLhZKFlIOVgZdxiwiAeH95ba19nh+fi6yLsaoIubGb74v3NQgT8Cr4fhV1Cg7Pf7RsqvdXq/casnCoEo/T3q/3Etb3NdUTZ4D4wfcSFTlbfFldepWuHvcqzgfToV5WHxN3gPvV95wVuAavj31pH/ugB4tu///2szT///OZmv//3kzM///8ZmYIeIkFhv///4AAiP///YAAi4YIi3iNiQWLyo20HrKLoomyiwj3BMjB3+k5pSwfUewGi7H/AANMzP8ABkzM/wAlszT/AAKzNAgTL4CnjQWR/wAAZmaN/wABmZqLkAgTN4CLnwUTL4CIjQUTN4CLR4lgHvtXBhMvgGNhjYsfEzeAiImLewUTr4CLgo+KnIrD///8szSO///xTMyLIosi///4szP//8kZmv//8kzN///W5mZ/Z3t+e4t/i4eTiZj///0Zmv8AEuZm///65mb/ABMZmnCLCHN+d3VspXC3H7uL/wAbmZr/ABnmZv8AFWZm/wA2GZqeu5Dxi88I2Y6lsR4O9xaJqPdSrfcrqAHx1vdj1vc01gP4X/f4FYun/wAIzMz/AAyzNP8AITM0/wADTMwIn40Fj/8AAGZmjv8AApmai5AIi56JjQWLR4loZEqNix6JiYt4BYuGj////YAAj////4AACJuJBaz///vmZpX///QZmotvCCL7Y/QHi6f/AAnmZv8AC5ma/wAhGZr/AARmZgiajQWQ/wAAszSO/wACTMyLkAiLnomNBYtLiWdkR42LHomJi3gFi4aP///9ZmaP////mZoInokF/wAgmZr///yZmv8ACmZm///zZmaLbwj7rgeLbv//9pma///zgAD//95mZv///IAACHiJBYb///+AAIj///2AAIuGCIt4jYkFi8+Nr7LMiYsejY2LngWLkIf/AAJMzYb/AACzMwh8jQX//98zM/8ABGZm///1zM3/AAuZmouoCPcj92P7IweLbv//9zM0///zmZr//93MzP///GZmCHiJBYb///+AAIj///2AAIuGCIt4jYkFi8+Nrh7xiQX3A8m/3+o5oSsfUgb3NPsTFTlcflldepWuHvcjzgfSoWNWHw5Xiaj3qrq9rgH3BtX3WtYD9+34SRX7Mc4Gi7+ex8+2CHygBUJldGJ+b4Gnc7hArQh8dgXRYJxPi1cISD9o1/vcB4tu///2szP///OZmv//3kzN///8ZmYIeIkFhv///4AAiP///YAAi4YIi3iNiQWLz42ustCJix6NjYueBYuQh/8AAoAAhv8AAIAACHiNBf//35ma/wADZmb///VmZv8ADJmai6gI90QHu7u3kqiLCMKheDof+xcHi27///ZmZv//84AA///emZr///yAAAh4iQWG////gACI///9gACLhgiLeI2JBYvPja+yz4mLHo2Ni54Fi5CH/wACmZqH/wAAZmYIeI0F///hgAD/AAMzM///84AA/wAMzM2LqAj3DAfyZ8JDHmSLRYNTUwj3BvcxBw77Como90qu9xPOZ6gS8NYTyPe2+TMVzwr7lv0zFY2JBYvPja6yxYmLHo2Ni54Fi5CHjYeMdY5tkYusCPcgB9aGoWeeVP8ADzM0///UGZr/AB7MzP//uuZmvYoI04qOjYudBZKEjYceg4wFZ5Bi4nuxd7xmoVWLCI8HsJb/ABfMzP8AIhma/wAOMzT/ACfmZggT6JaqnqGVi5SLkoiRh5KGlIeXiwignJ2fo4CgYh9bi2tVeVz//+rmZlT//+MZmmVIiwj3BgcT2PfeCg55iaj4C6gB9wDW92LWA/eg+TMVZAr7VvsIFffcCg4/+3zb+LqsyKoB9yvU69QD+B341xX36Ar7Tf13FYwKDmyJqHCz9/6oEvXW4K3h1hN8+Bb38xX7nwdphoFsHvsZBmqImakf96EHi7T/AAWAAP8AArM0/wAigAD/AANMzAigjQWP/wAAZmaN/wABmZqLjwiLoImNIokhjYqJi3UFi4eN////TMyP////szQIpIkF/wAjmZr///0zNP8ABWZm///5zMyLZQj7rgeLZP//+bMz////GZr//+FMzf///eZmCBO8bokFhv///7MziP///UzNi4YIE3yLeAUTvI2JBRN8jYvzjZGLCNcGpYuYVJBCCK0GkNOXw6aLCNoGE7yZi+SJk4sIE3yNjYufBRO8i42K/wAEgACE/wAAgAAIbY0F///iTMyN///4szSOi7AI96wHi7T/AAdMzP8ABYAA/wAgszT/AAKAAAiljQWP/wAATMyN/wABszSLjgiLoYmN+wCJJY2JiYt1BYuHjf///2Zmj////5maCKCJBf8AIMzM///85mb/AAczNP//+Rmai2QIDvf7f673Zaj3/q4BwOf3udz3u+cD+Er3UBX36QoO2X+n90So91WnAa3a9w/IjdaNyPcP2gP3v/coFffqCg73B4mt98au9x6yp3fHpxKVqYOl9zXc94mlg6l55RP7APif+LoV+3OkBqeYmrQepgaQjo6QH4ueiYwFiy2KaGQ0jIseiYqLeAWGj4iPHqYGspp9bR9z+x8Hdoqckh9xjwUT/SCHWYRYgFUIqYYFn9uYmMKLCOb8SQZof39jHm4GhYmIhh+LeI2JBYvYjb0exYuMieSL91uLxuWL4YvoWMElsWqXS41niwg89x73QwYT+UDCi5h+nzsIqZAFE/uAgMGEvoe9CHGHBYSKenYe+3P7aBXpBhP5IPcKykwxTmkv+yw5hJKsHw5Oiar3Uqv3IbASmqb3JNX3NKh21hP895j3jxX3IboH3Iuad5w5CKiPBYS5h6qKxQj7RdYGi7+dx9C2CHygBUFldGJ/b4GncrhBrQh8dgXRYJxPi1cIQPs0B4pRh2WFXQimhwWc3Jqn3IsIqvvUBm6Be2oeeAaGiIiGH4t4jYkFi8qNsx61i6KJtIsIE/r3BMu+3+o2oiwf9PsTFTlZflpcdZWuHvcl1AfSo2BXHw73kIGucKz3l7JlvXnD93+scbAS9eD/AFkzNP8AVszM9/zmZqkTocD3U/cOFfc8/wBZMzQH/wAL5mb//1dmZv8AY5ma//98mZr/AMlMzIsI7PcUx9WfgqByH26LfG5+Zn1jY2k/i/soi0P3CoH3MggTCaCsmqiSsYsIExGg98UKEwugUItgsUyLfotJf05pCIqMBfdp9wfV2h73HovEOqU1CKmPBYG/g7yHwVKOY7X7E4sIE2XA//9bGZqL//+IZmb//4WZmP///oAA//8xZmgIM/dWBovenJDRjpGRi6CFkVqKbYpYi1mLboxZjIWFi3aRhdGInIaLOAj8JQeLOHqGRYiFhYt2kYW8jKmMvou9i6iKvYqRkYughZEIRY56kIveCA7MgaxyqPc1s3KtcLn3Jqh0qhLs1f8AXmZm/wBQmZr3g6QTkcD/AQlmZvdfFf8ABzM0//9rzM3/AGAzMv//vzMz/wBfMzSLCObSssCbgJh5H3qL///0MzT///rmZv//8czM///gGZp/cHBzY4s3i17Gi/cLCBMJwJeQmI+YiwgTIcD35woTCcBoi3CnYIsIEyPAbotwf3F7CIiNBeep4eQe1YuqW5xLCKSPBYG7hq2IsVqOYptciwgTVcD//4DmZov//8ZMzP//p2Zm///7GZr//46Zmgj//6GzNPcNBqeWm6sengaQj46QH4ueiY0Fi0aJZGhHjYseiYmLeAWGjoiQHp4GrJV7bx/7sgdugXtqHngGhoiIhh+LeI2JBYvPja6y0ImLHo2Ni54FkIeOhh54BmuAm6gf9xcHDveKiaj5C3cB9//WA/ie994V9+sKr/xyFdMHi7+ry822CPcS+3sF/wAE5miC/wACGZiFi4UIeXaFbh55BoaIiIYfi3iNiQWL4o2vsteJix6OjYueBZCGjocefwZ2i3mcdLUI+7v4sgWAoIOUf4uBi4KEfnQI+8D8twV6a3x1YosIfwaGiIiGH4t4jYkFi8uNpaPliYsejI2LngWQiI6GHngGbHuXmx+LkY2QjpEI9xL3eQXMYKtMi1gIQwdugntpHngGhoiIhh+LeI2JBYvPja+yz4mLHo2Ni54FkIeOhx54BmqBm6gfDsqJqPgzdwH3qNYD93X3hRXS9wwFkZX/AAXmZv8AAOZm/wAHGZr///UZmgjc+xEFVmp4aYBygqR2slGsCL77hRXW1gaLuJi+urQI7vstBZV7hntqiwh+BoeIiIgfi3aNiQWL042nqcGJix6OjYugBY6KjoUec4t4mXWuCPtx9+kFfqB+j3+LhIt9iH91CPtj++8F///s5mZr///qGZqAcYsIiIiIiB+Ldo2JBYu8jZ6ezomLHoyNi6AFjoiOiB6DBnGL///qGZr/AATmZv8AD+Zm/wAbGZoI5/cxBcBhmFeLXAgO+O+JqPebsvexrJZ3EvXg+KDWE8z5/vfeFffrCq/8chXTB4u/q8vNtgj3Evt7Bf8ABOZogv8AAhmYhYuFCHl2hW4eeQaGiIiGH4t4jYkFi+KNr7LXiYsejo2LngWQho6HHn8Gdot5nHS1CPu7+LIFE9yAoIOUf4uBi4KEfnQI+zj7v/wci4v3VgUT7IvenJDRjpGRi6CFkVqKbYpYi1mLboxZjIWFi3aRhdGInIaLOAj8JQeLOHqGRYiFhYt2kYW8jKmMvou9i6iKvYqRkYughZFFjnqQi94I9zz/AXKZmAf//41maPtlBXprfHViiwh/BoaIiIYfi3iNiQWLy42lo+WJix6MjYueBZCIjoYeeAZse5ebH4uRjZCOkQj3Evd5Bcxgq0yLWAhDB26Ce2keeAaGiIiGH4t4jYkFi8+Nr7LPiYsejY2LngWQh46HHngGaoGbqB8O9/OJqPdErfc5qJZ3EuzV+B3WE8z4lfeFFdL3DAWRlf8ABeZo/wAA5mb/AAcZmP//9RmaCNz7EQVWanhpgHIIgqR2slGsCL77hRXW1gaLuJi+urQI7vstBZV7hntqiwh+BoeIiIgfi3aNiQWL042nqcGJix6OjYugBY6KjoUec4t4mXWuCPtx9+kFE9x+oH6Pf4uEi32If3UI//+UmZr7SP/+12Zmi4v3DQUT7KeWm6sengaQj46QH4ueiY0Fi0aJZGhHjYseiYmLeAWGjoiQHp4GrJV7bx/7sgdugXtqHngGhoiIhh+LeI2JBYvPja6y0ImLHo2Ni54FkIeOhh54BmuAm6gf9xf/ARRMzAf//7CzNPsZBf//7OZma///6hmagHGLCIiIiIgfi3aNiQWLvI2ens6Jix6MjYugBY6IjogegwZxi///6hma/wAE5mb/AA/mZv8AGxmaCOf3MQXAYZhXi1wIDvfaiaj3vLL3jK4B+DXcA/gG99cVuvuQBm99e2IeewaGiIiGH4t4jYkFi96Nr7LYiYsejY2LngWQh46HHnoGZHyZqR/3kMEHu4uufatKCN37QQWbaXqBYosIdQaGiIiGH4t4jYkFi+SNrrLUiYsejY2LngWQh46GHn8GbYt0m36nCDj3QQX//9fMzP8AU+Zm///SMzT/ACIZmjOLCF6L91r3mwWXm3uPfosI/KYGeot9h5l7CPdy+5toiwUyi11pYzcIOftBBX1vdXtsiwh/BoeHiIYfi3iNiQWL042yr+OJix6NjYueBZCIjoYedgZii3mVm60I3vdBBf8AHzM0/wBA5mb/ACPMzP8ADhmau4sI9wa1Fftk94n4HYsFDvdjiaj3RK33Mq0B+ADVA/fS918VufsYBm99e2IehAaGiIiGH4t4jYkFi9KNr7LLiYsejY2LngWQh46HHoQGZHuZqR/3GLUHu4uidLdRCLFYBaFvfntiiwh6BoaIiIYfi3iNiQWL042vstKJix6NjYueBZCHjocefwZsi///7jM0/wAUMzP//+3MzP8AF8zNCGS+Bf//z2Zo/wA/gAD//9WZmP8AM4AAO4sIbov3EPdABZeagJB6iwj8GQZ6i3+Fl30I9y77QGyLBTKLbGZXPQhqWAV7dHd2bIsIfwaHh4iGH4t4jYkFi9KNsq7UiYsejY2LngWQiI6GHnoGYouAmp6oCK2+BbPHpqC7iwj3AbEV+x73LvePiwUO+RyJqPe8sveMrgH14Pi43AP5uvgBFftk94n4HYsF/bT8fBX3Xf8BZ4AAB///6xmY///tTMz//+6zNHH//++zNP//3bM0CDn7QQV9b3V7bIsIfwaHh4iGH4t4jYkFi9ONsq/jiYsejY2LngWQiI6GHnYGYot5lZutCN73QQX/AB8zNP8AQOZm/wAjzMz/AA4ZmruLCLiLjYuL+5AFb317Yh57BoaIiIYfi3iNiQWL3o2vstiJix6NjYueBZCHjoceegZkfJmpH/eQwQe7i659q0oI3ftBBZtpeoFiiwh1BoaIiIYfi3iNiQWL5I2ustSJix6NjYueBZCHjoYefwZti3SbfqcIOPdBBf//18zQ/wBT5mb//9IzMP8AIhmaM4sIXov3WvebBZebe49+iwj8pgZ6i32HmXsI93L7m2iL/HSLi/c1BYvenJDRjpGRi6CFkVqKbYpYi1mLboxZjIWFi3aRhdGInIaLOAj8JQeLOHqGRYiFhYt2kYW8jKmMvou9i6iKvYqRkYughZFFjnqQi94IDvhmiaj3RK33Mq1wqBLs1fhY1RPs+UL3hRX7Hvcu94+LBftm+1QVrfsYBm99e2IehAaGiIiGH4t4jYkFi9KNr7LLiYsejY2LngWQh46HHoQGZHuZqR/3GLUHu4uidLdRCLFYBaFvfntiiwh6BoaIiIYfi3iNiQWL042vstKJix6NjYueBZCHjocefwZsi///7jM0/wAUMzP//+3MzP8AF8zNCGS+Bf//z2Zo/wA/gAD//9WZmP8AM4AAO4sIbov3EPdABZeagJB6iwj8GQZ6i3+Fl30I9y77QGyL/BWLi/cNBRPcp5abqx6eBpCPjpAfE+yLngUT3ImNBRPsi0aJZB4T3GhHjYsfE+yJiYt4BRPcho6IkB6eBqyVe28f+7IHboF7ah54BoaIiIYfi3iNiQWLz42ustCJix6NjYueBZCHjoYeeAZrgJuoH/cX/wEV5mYH///pzMz//+0Zmv//7MzO///lMzP//+iAAP//3LMzCGpYBXt0d3Zsiwh/BoeHiIYfi3iNiQWL0o2yrtSJix6NjYueBZCIjoYeegZii4CanqgIrb4Fs8emoLuLCA5W+3yt+KKp+CatEsGpcr33k7Zw41HnE/LB+FoVqYkFo9ym5vcLiwjJy2M9QWpB+wtoXX9md5l/nh+yi5G+x4sIE+nauV88H4shN2Q9dyX//+XmZjT//9wZmoszCCXzd9fz1a2zmYWbcx51i///7zM0///xzM3//+7MzP//8DMzcXNpe1iLT4tYl4vBi9P1p72V/wB8zMyk/wBwMzTRi/cOi/Y4rUCcCJAHE+LQpsKyi9uL8yO2M5EIvd8F/wAHGZr/AAvmaP8AB+Zm/wAHGZiUiwgT9JSLjoWNhP8AAxmagP8ABOZmhpaLCJuTlpmfe51xH3GL///tZmb///KzNP//7pma///kTMwIZlA66IWNQ4uIhPcD+xIFZIhiek6ECA77Uftas/gLrPe8qxKzpnSr92LVSNwT9LP3thWmhgWZz6rH2osIsr93UD9Og2BwYn1udJmBnR+ki4q2t4sIE+rHnmxXH4tHQ3dkgf//rRma///qszP//8zmZv//3UzNi0cIP8tp9baukqude5d3HmSLcW5ki2yLXpGLuIu3taLKm/8AjbM0r/8AL0zMvIvOi9pFoW+QCI8HE/S2lrSxi7iL2D6mT5AIt98FkZeSlJWLkouPiI6D/wAEGZqA/wAG5maFlYsIm5CWmZt/nm0fdIt6gHxwCGpNQ+eFjU+LiYHr+w0FYoiAg0qDCIpYh2SFYQgO54mo/wBgZmb/AB+Zmvf7oN6nAevQ9xzb9yLPA/j6+KsVQnlOPR+L///aMzT///eAAP//TmZm//96gAD//+TmZgj/AaSAAAenmZu0HqUGkI6OkB+LnomMBYsuimdkNIyLHomKi3gFho+IkB6lBrOafW0f/DcH//++zM3/AA9Mzf//uTMz/wA3MzOL/wCfgAAI7Wy/Th5sBoCCioAfi4aQiZOJoYWygIv7FIv//1GzM/8AZuZm///EszP/AGYZmn8I///LmZoHb317Yh5xBoaIiIYfi3iNiQWL6I2vsuKJix6NjYueBZCHjoYecQZjfJmpH78H/wBmszT/AAuZmv8Aa0zM/wA/5maL/wDBgACL8bGWoZKTjZKNi5IIlYCNfx4OtvtcqP8AoIAA/wAegAD4GaD3fKcS0tFVzvcU/wBKzMz/AH8zNM9V0BP6APeunxX//62AAP8ACjMz///FgAD/ADNMzYv/AKCAAAgT9gCLspi3i7EIr3+qYB5eBoCCioAfi4aRiZKJqIWWeItwCBP6gItpe1yLWYv//1ozM/8AXmZm///DTM3/AHSZmoEI//+LgAAHb4J7aR54BoaIiIYfi3iNiQWLz42vss+Jix6NjYueBZCHjoYeeQZqgZunH////+Zm/wB0mZoF/wB05mb/AAoZmf8AXTM0/wA8zM2L/wClgAAIE/MAi718uouti6aVnqiRk42QjYuQCJaDjIAeXgZgfmxnHxP6gItlmV+LZIv//1+zM///yYAA///MszP//6lMzP//9bM0CP///zM0/wKb5miKjQWLdIl9Z0eNix6JiYt5BYaOiJAengatlHtvHw72ga33hsSAxfeSrRKw6/hJ6xPc99/5BBX37AoTvPftCvfj+7sVWQor///yTMwV9+4KE9z37woO+yB/rvcxvHW09zWsErDb93TZE5yw918VJMj7BPcV9x/A9xXv81z3DfsjHvsTSiT7HB//AS3mZv8AIjMzFRPc///y5mb///sZmf//8OZo///8szP//+5MzIsIE7xki3qeX4v//+HmZov//+FmZ///94AA///vszP///XmZv8AAMzN/wBWGZr/AB0zM/8AXYAA04vQi/8AKkzM///EgAD/AAmZmv//j7MzCP//Ihma///dZmcV/wAGgAD/AAFMzf8ACEzN/wADGZn/AAozM4sIE9yui6hwtov/ACJmZov/ACPMzv8AEkzN/wAVTMz/AAvMzf8AAEzM///35mb/AAAzNP//95mai///92Zmi/sYU21iizaL///cGZr/AGbmZ///+eZm/wBMszMIDtmUdvkKp3OvEvjuzhOw+N/5JhX38AoT0PfxChOw9/IKDlGUdvgys2OoEvhV0xPQ+EP4JhX38woTsPf0Cg7ZlHb5Cqdzr712EvjuzhOY91L5qRX3XAr3F5AV91cKE7j3nvscFffwChPY9/EKE7j38goOUZR2+DKzY6j3cncS+FXTE5j3EPkhFfdYCvcckRX3WQoT2Pc/+5UV9/MKE7j39AoO9/t/rvdlqPf+rrugsqASwOf3SvFxvXzcleu6svLnE/7w+Er3UBX36QrF+OsVE/1wVmNbZx8T/PBynn6bmpuVnB4T/XCLnHuUi5yLl5Serou+i7VPv4sItaaxr6h7oXN3fnyBH4tprZCLcIt+f4F8i2eLU8dSiwgO2X+n90So91Wn2qCyoLd3Eq3a3b2CyI3WjcimssTaE/9497T47hVWY1tncp5+m5qblZwfi5x7lIuci5eUnq6Lvou1T7+LCLWmsa+oe6Fzd358gR+Laa2Qi3CLfn+BfIsIZ4tTx1KLCJb8WhVsB2aES0Uue/cX1PcAp+HYHhP++JmPhoMfi4aKhomIiIiKhYuECHiZfZ6fmpugqXSvT/sBRC77FibJ+xb3Bx7Zi6mym7IIjgabZKlk2YsI9wjI9xbw9xZE6PsBT3RnbXaae5+fmZmeH4uSiZGJjomOiZCLkAiTj5CZ2aY1+wBCe/sXLkWEy7AeqgeolZqsHp4Gj4+OkB+LnomNBYtHiWRnR42LHomJi3gFho6IkB6eBq2Ue28fDvf7f673Zaj3/q4BwOf3SvGU3JXr91HnA/hK91AV9+kKDtl/p/dEqPdVpwGt2vcPyI3Wjcj3D9oD97/3KBX36goO+IagsqAB/CW992+yA/vI+NcVVmNbZ3Kefpuam5WcH4uce5SLnIuXlJ6ui76LtU+/iwi1prGvqHuhc3d+fIEfi2mtkItwi35/gXyLZ4tTx1KLCA7lia33xq73H63TpwH3Vdz3p+UD96b35hXpBvcKykwxTmkv+yw5hJKsHzr4TBX8Sgdof39kHm0GhYmIhh+LeI2JBYvYjb0exYuMieSL91yLxeWL4YvoWP8ANeZmJf8AJhmaa5dKjWeLCDz3H/ebrfubqAanmZq0HqUGkI6OkB+LnomMBYsuimdkNIyLHomKi3gFho+Ijx6mBrKafW0fb/tGaQcONomq91Kr9ySt96F3AfcO1vdj1gP4KPcQFTlKflpcXZWuHvcl6wfTsmBXH/tj+NIVdAZ3gn2HeYd6iP//24AA///6zMz//++AAP///zM0CI1zBYuI/wACzM3///4zNP8AAzMz////zMwIq4kFn4v/AAmZmoD/AABmZlII+yQmafD71wdugntpHnMGhoiIhh+LeI2JBYvPjbQevounib6LCPcE2r7f6ieiLB809yT3W637WwYOS4ms94+tc6j3Cnf3W60S8+D3degT3vdR+L4VqJqu09DQdPsTHov//8KzNP//70zO///XTMz//9/MzP//6EzMCP//q+Zm/wBgszRsdNr//6SAAAX//+2AAP//+jM0///qszT///1MzP//58zMiwgTvveyCjb3XhX3swoT3qGEo4iui/8AIMzMi/8AHLM0/wAD5mik/wAGzMwI/wBZgAD//5hMzKim//+wszT/AFszNAXe/wAngAD/ABxMzP8ATmZmi/8APOZmi8Zk9vtNi3GLRIRji1mLboxZjIWFi3aRhdGInIaLOAgOLft+qPdXrfgFuWaoEuzV92beE+z3P/fLFaHAvKiti8iLt0uL+w2L///VZmb///tmaP//0oAA///uTMz//9zmZwj//6hMzP8AZTMzbHPq//+SZmYF///tTMz//+5mZ///5jM0///1MzP//9yAAIt7i2qNaLQI9/4EE9yJjQWLdIl9aEeNix6JiYt4BYuGjv///YAAkP///4AACJ6JBf8AIWZm///8gAD/AAmZmv//84AAi28I/JcHi2////KAAP//8xma///igAD///zmZgh4iQWG////gACI///9gACLhgiLeI2JBYvPja6y0ImLHo2Ni54Fi5CH/wACgACG/wAAgAAIeI0F///gmZr/AANMzf//9GZm/wAMszOLpwj3PwelfaeDr4v/ACaZmov/ACEZmv8ACWZm/wAeZmb/ABSzNAj/AEjmZv//q+ZmqKX//7gZmv8AUxma/wAA5mb/AADmZgW4uaTJi9wIE+z34QoOIImn+NiycKcS9Nz3mqUTuPcl+RgVfot/jCWMCImJi3kFho6Ijx6pBraUgWgf/IoHbXx8Yx5xBoeHiIYfi3mNiQWL4Y2zruiJix6NjYudBZCIjocecAZifpynH/iKBxPYppmRoR73GwbMi5l7l1sIpY+L93BwiwWFVG5JWIsI+x4GDvtaiaj3+7dwphLz1fc8oBPY89MVboF7ah5zBoaIiIYfi3iNiQWL1I2ustSJix6NjYueBZCHjocecwZqgZuoH/fO9woHqYuYgJJ2CKD3UHAGiFVxUVaLCBO4+3t1BoiNiY4eqgaviZCCi2UIDiqJrPeUsvers2ysEu7g96CoE+z3IfkZFRPci4s8jFmMhYWLdpGF0Yichos4CPtZO2Tb+zkHizh6hkWIhYWLdpGFvIypjL6LvYuoir2KkZGLoIWRRY56kIveCPc59LIi94kHE+z3qwoT3PesChPs960KDvtViaj3SrL3IrJwqBL11vc/phPs90n3ZRXosi7oBrWRkqwesgbFi6FSmFEIpo8Fhb6HuYnACBPciY0FE+z31AoT3G05jYsfE+yIiYt1BRPci4iN///+TMyP////szQIqYkFrv///bM0kf//+EzMi2UIIzZk4PsbB4tu///0mZr///KzM///4GZm///9TM0IdIkFhv///5maiP///WZmi4YIi3iNiQWL042vstOJix6NjYueBYuQh/8AArMzh/8AAEzNCHSNBf//3mZm/wAC5mb///aZmv8ADRmai6gIDon7QKj3Iaz3zKr3e7NsrBLu4H+i95WogNoT9ID4uegV94X7a7P7Kh73WQejl5WjHvcPBhPtANaLmFmgRv8ACbM0///+zMz/AAmZmP8AAOZo/wAJszT/AARMzP//++Zm/wBUTMz///qZmv8AJuZo///6gAD/ACHMzAgT9IBkijqKi4sI+2EGE+yAi4s8jFmMhYWLdpGF0Yichos4CPwlB4s4eoZFiIWFi3aRhbyMqYy+i72LqIq9ipGRi6CFkUWOepCL3gj3cQf3LfcZWftm+z1HUkAfW4tsmXaeeZx+o4umCBPygHP7LKIGi5CMqI2QjI6RkZWLmouhcd2LCPcS5PcK9ycfDjf7fq33Wqj/AKjmZv8AIhma9zSycKgS9dZF3fczpojZE/SA9dUVi27///SZmv//8rMz///gZmb///1MzQh0iQWG////mZqI///9ZmaLhgiLeI2JBYvTja+y04mLHo2Ni54Fi5CH/wACszOH/wAATM0IdI0F///eZmb/AALmZv//9pma/wANGZqLqAj/AHnmZgf/AF4Zmv///hma/wBk5mb//9eZmov//05mZov7AG9HQosIE/KASYuBtoWsh6N6l3SLCHR8fG5gv1D19wzM9wD3EB8T9QCL/wDImZr//1tMzP8AHjMz//+TszT/AAEzMwj3Awe1kZKsHrIGxYuhUphRCKaPBYW+h7mJwAgT7ICJjQUT9ID31AoT7IBtOY2LHxP0gIiJi3UFE+yA99UKDvekiaj3vbX3dMhqqBL4GeD4AKYT7JEWi4nWjAXVjK3ctPcCr++drPSLCPuRB4tvf///9RmaYf///OZmCHCJBYeIiIYfi3iNiQW8jamLvYu9i6qLu4kIjY2LngWQh46HHnGNBWP/AAMZmnz/AAjmZoupCPeRB/SLnWqvJ/8AGLM0//+9mZr/ABYzNP//yEzMqf//3eZnCP//+hmY///7MzMFpHKxfKJw/wAd5mho/wAOGZhfj3IIpouF9ycF////zMz/AAOAAP///0zMjv///uZo/wACmZoI/wAD5mYHkImOhh58jAVrjlzPW/cbcdFmtkmLCJAH06eg4ZXJkKiRrKeLl4uThpWAlIGYhpeLCJ+glqiieqhZH0CLcVOCTf//9+ZoU///8hmYS1RrdX1himmLCPdkB4unmv8ACuZos/8AAxmYCBPc98oKE+z3ywoO5omo90ut9wzRa6gS97nW96SkE+z3ufeIFX8GV4tumWLi///izM3/AD3mZv//5DMz/wAbGZpsiwhpfHp0d5p5oB+di52Tk4uXi/8ACuZmdv8ACRmadaBYsWarhWeL///TZmb//+vmZv//7Zma///OGZp9ZWcsaYsIggaHhIqEH4t7jonPjQW4i6fTmLT/ABOAAP8AOpma/wANzM3/ACSZmf8AULMz/wABszMI//92GZoHboJ7aR6EBoaIiIYfi3iNiQWLw42vssWJix6NjYueBZCHjoYegwZqgZuoH/ceB/8AUmZm///+5mb/AA3mZv//2zM0/wATszT//8TmZppgpkSii7aLsziTXwiki4X3GgWKnn6Ne4t5i3GPXPcSeLxfoGaLrJCusKK+lqGUoJiLkoueg5yLCKGanp+he5xpH22LbnBuTv//1rM0//+pGZr//+NMzP//8eZmV4sIffcIBhPc9/UKDnr7fbH3S6/3ubz3C3b3NK0Sz6n3O8bs40vnE/6A9w37OhWoXrB1tIvAi7aoi8KL/wAyTM3//+OzNP8ANszN///PZmb/ACFMzJj///8Zmv8ADZma////gAD/AA5MzIv3E4v3DsWL9xeL4ErQLZoIkQcT/wD3zQoT/oD3DbBBQjBQTigfPYtYq3K6fqV8pW+Ld4t+e4tzi2r/ABMZmv//7Rma/wAa5mb//+fmZv8AD7Mzff8AGgAB///yszP/ACNmZv//9oAACP///eZm///9zM0FyniwUYtIi3JycWeLbot6mHaiCA77Qft9sfgltPc1qhLDpPc8xofZUdwT+vT7OhWpXq91tIvBi7Woi8yL/wBA5mb//+WAALb//9GzM/8AFYAA/wBYGZn/AASZmv8AUbM0tYvdi8dXtECVCJAHE/T32goT+t6iWF9QZmdGH1aL///gTM3/ABszM///7LMz/wAgzM2BnIGac4t6i3x9i3uLdZl7n3v/ABAZmv//82Zm/wAdTMz///HmZ/8AKZma///4szMIhoYFz4GmbIs5i3JzZmaLbot7mHWiCA6tiaz/ASzmZv8AJxma927KZawS9eD4I6cT7PjhpxVbi3WtRfcFCEH3DAV7p2+kcYvUo67nocabuKSglYumi6VypYsIoKKdo6J7olcf+wCLcTKCbnxWbUtUbP//5zM0///ymZr//9FMzP///oAA///cgAD////mZgj3LAcT3IvenJDRjpGRi6CFkVqKbYpYi1mLboxZjIWFi3aRhdGInIaLOAj8JQeLOHqGRYiFhYt2kYW8jKmMvou9i6iKvYqRkYughZFFjnqQi94I/wDR5mYHwP///oAA/wAgZmb//+UzNP8ALJma//+0ZmYI1/sNBbJNr2+rc7NtqnKaPAini4T3KQWTipd2Hg4qiaj3S633C9FsqBLl1ve/ohPs5dMVboJ7aR6EBoaIiIYfi3iNiQWLw42vssWJix6NjYueBZCHjoYegwZqgZuoH/ceB+qL/wAPmZr//9nMzf8AGGZm///FMzOcYqtEu33/ACnmZv//88zN/wATGZr//8UzM5FfCKKLhvcaBYqedo2Ai2aLY+d7sXi8WKBji6+QsbCmvpahl6CYi5SLn4Ofiwijm56foX2cZR9pi///4TM0///k5mb//9/MzP//wxmaXTRnfVKLCHj3CAYT3Pf1Cg6Wiaj3vbX3dMhqqBL14Ne3E+z3y/cNFf8AqGZmB/8AFIAAdv8ADZma///gTM3/ABHmZv//0kzNtvsCrzrZigjaioyNi54FkIiOhh57jAVojv//zRmaz///y+Zm9xv//+YZmv8AQzM0///a5mb/ACpmZEv/AAMzNAj/AAhmaAf/AEWAAP8AHuZm/wAT5mb/AFIZmv8ACpma/wA7zMz/AAUZmqj/AAbmZqypi5iLk4aWgJWBmYaYiwigopaoonmoVh88i29TgU3///fMzP//zRma///zszT//8aAAP//0YAA///d5mYI/wCfgABf//9NGZoH///oszP///tmZv//45ma////gAD//+ezM4sI92QHi6ea/wAK5miz/wADGZgIE9yljQWQjo6QH4ueiY0FWopuilmLWYttjFmMCImJi3gFho+Ijx6liQWyiJqCi20I/IsHi29////1GZph///85mYIcIkFh4iIhh+LeI2JBbyNq4u9i72LqIu7iQiNjYueBZCHjocecY0FY/8AAxmafP8ACOZmi6kI95EHq4v/ABhmZv///WZm/wATmZr///oZmgj//z2AAAcOZYmo90ut9xXQY6gS89bOtxPs97bTFf8Ae+ZmB7n//+/Mzf8ADGZm///i5mf/AA+Zmv//2mZmnGKoQ72KCNSKjY2LngWShIyHHoMGZotj53uxd7xkoFWLvpOlvZuxlaGYp5aLkouVipCHk4eXhpWLCKCbnZ+kep9lH1uLclR2Xv//7mZm///YzMz//+szNP//2MzO///PZmb///HmZgj/AGiAAF/7Akj3BgcT3LShjqaPj46QHoueiY0Fi1SJZGdHjYseiYmLeAWGjoiQHp4GrZR7bx/7tQdvgn1pHngGhoiIhh+LeI2JBYvPja+yxImLHo2Ni54FkIeOh3hrjrIe9yEH/wAaTM3////Mzf8AFhmZ///+mZn/ABKZmv///YAACP//ehmaBw6Wiaj3vbX3DbLLyGqoEvXgE/SdFo2JBbyNq4u9i72LqIu7iQiNjYueBZCHjocecY0FY/8AAxmafP8ACOZmi6kI95EH9waL/wAS5mZq/wAnGZontvsCrzrZigjaioyNi54FkIiOhh57jAVojv//zRmaz///y+Zm9xtw0WS2RosIkAfXp6Dhlsn/AAUZmqj/AAbmZqypi5iLk4aWgJWBmYaYiwigopaoonmoVh88i29TgU2CU31LUGtzfV6KZ4sI9w3ssiq7B4unmv8ACuZos/8AAxmYCBPspY0FkI6OkB+LnomNBVqKbopZi1mLbYxZjAiJiYt4BYaPiI8epYkFsoiagottCFsyZOT8NAeLb3////UZmmH///zmZghwiQWHiIiGHw77CImo/wC2TM3/ACKzM/cV0K+tAfP/AEpmZgP3RtAV/wAATM3/AIxMzQX/AEsZmv//+mZn/wATgAD//9uAAP8AFRma///JzM2cYqhDvYoI1IqNjYueBZKEjIcegwZmi2PnfLF2vGSgVYu+k6W9m7GVoZinlouTi5SKkYeSh5eGlYsIoJydn6R5n2UfW4v//+czNP//yOZm///rzMz//9MZmnX//88Zmv//5BmY///PGZn//7BMzv///8zNCP8AAIAA937/AJwZmouLrf//ZDMziwX/AAHMzP8AMhmY/wASgAD/ADgZnP8AQYAA/wAozMwIfKAFQWV0Yn9vgadyuEGtCHx2Bf8AQmZm///XMzT/ABLMzv//x+Zk/wABszL//83maAj//7QZmmnX/CoGbYJ8aR54BoaIiIYfi3iNiQWLz42vssSJix6NjYueBZCHjocegwZqgJioHw73MYmo/wE25mb/ACsZmvdkyl+xb6cS95XbE+T5eYkVjY2LngWQh46GHoEGZ4v//8hMzP8ATRma///EszT/AIPmZnDHb8lGi9ikruagxf8AChmYp/8AGeZoqJeLmYuYhpiEmISYhZiLCKCinaOie6JXHzWLbVdzUf//6uZoWP//5xmYTFJr///nmZr///LmZv//0pma///+TM7//9zMzP///8zMCPdVBxPMp5mbtB6lBpCOjpAfi56JjAWLLopnHv//7xmai///5jMz/wAAMzT//+gzM/8AADM0CBPU////gAD/AACZmFGLBRPM+x2Lefs7nIsFlaiYqZ2pCBPUlZ6foKyLCP8Aa5maBv8ACWZm///4zMyP///0szSL///wgAAI/IsHb317Yh5xBoaIiIYfi3iNiQWL6I2vsuKJix6NjYueBZCHjoYecQZke5mpH/8BCuZmB/8AdrM0///95mb/ABEZmP//x0zO/wApMzT//5zmZv8ALMzM//+UTM3/AB0zNP//t8zN2////uZmCA5wiaj/ALYZmv8AIuZm9xXQYqkSo5z3JNYT7PeY0BX/AIwZmgf/AEqAAIX/ABIzNP//25mZ/wAWTMz//8pMzZxiqEO9igjTio6Ni54FkoSMhx6DBmaLY+d7sXe8ZKBVi76Tpb2bsZShmaeVi5OLlIqRh5OHl4aViwigm52fpHqfZR9bi3JUdl7//+ozNP//z2Zm///lMzL//89mZ///sJma////MzMI9wgHqJWYrB6TBo+PjpAfi54FE9yJjQWLUolkHv//8UzNi///68zN/wAATM7//+1mZv8AAGZmCP//44AA/wABTMx1i0CLefsanIsFpfCpjMGNCP8AA5ma/wAAGZoF/wAXszP///xMzP8ABrMz///wzM6L///nzMwI+7UHb4J9aR54BoaIiIYfi3iNiQWLz42vssSJix6NjYueBZCHjocegwZqgZmnHw70iaj3vbL3k6cB9dz329u/pwP4lBbpi6oplGAIp4uE9yYFmH2ShB57BmyGlq8f+IoHp5mbtB6lBpCOjpAfi56JjAWLLopnZDSMix6Jiot4BYaPiJAepQazmn1tH/tn+9v3ZwenmZu0HqUGkI6OkB+LnomMBYsuimdkNIyLHomKi3gFho+Ijx6mBrKafW0f/IoHb356Yh5wBoeIiIYfi3iNiQWL6I2us+GJix6NjYueBZCHjocecQZjfJmqH/eQ99v7kAdvfXpiHnEGhoiIhh+LeI2JBYu/jaweDmmJqPdNrfcwqAHz1fdh1sWfA/he1RX3rAe0kZKtHqQGj42Njh+LoYqN+wWJKY2KiYt1BYeNio4eoAavkIJkH/sA+2H3AQe0kpGtHp8Gj42Njx+LoIqN+wCIJI6KiYt1BYeNio4epQaukYJlH/usB4tlhoJnighxBoiJiYgfi3WMifKN9wCJjI2LoAWPiY2HHncGaYyEkouzCPcd92H7Hgdkh4NmHnYGiImJhx+Ldo2JzYwF84uhJZFyCJ+LhvcbBZeEk30eewZrh5euHw73loms97a194e0aqwS9eD36uD3YKUT7vj+9w4V+CUHi/8ANEzM/wAGszT/ABVMzP8AFoAA/wAJZmgI/wBAzMwGzYunVptDCKWPePc1BWuLbYlli///+TM0i///+EzM/wAAgACD/wAAgAD///+AAP8AAMzM////mZj/AACZnP///2Zo/wAAmZh6////szT///EzMP///5mY///x5mj///+zNAj//+TmaIv///6ZmP///2ZoBf//7zM0////szT//+5maP///+Zk///qzMyLCBPeWYtujFmMhYWLdpGF0Yichos4CPs0++r3NAeL3pyQ0Y6RkYughZFaim2KWItZi26MWYyFhYt2kYXRiJyGizgI/CUHizh6hkWIhYWLdpGFvIypjL6LvYuoir2KkZGLoIWRRY56kIveCPdb9+r7WweLOHqGRYiFhYt2kYW8jKmMvou9i6iKvYqRkYughZEIRY56kIveCA73FYmo902t9yWzbqgS8tb3Ydb3eaUT7vgT2BWLZf//+5ma///4zM3//9tmZv///TMzCHGJBYj////MzYn///4zM4uICIt1jIkFqYy1jK+LsIuviqmKCI2Ni6AFi4+J/wABmZqH/wAAZmYId40F///egAD/AANMzf//+IAA/wAEszOLswj3qAeL/wADgAD/AAAZmv8AAzM0/wAAGZqO/wABzMyi/wAPTMz/AAVMzP8AFLM0iwjcBs2Lp1abQwilj3f3NAVsi22JZYt9i3mOeosI///rMzT///+Zmv///8zM/wAAZmYFbYpmimaLCBPeZ4tijG2MCImJi3UFi4eN////MzSO////zMwIpYkF/wAgszT///2AAP8ACEzM///5gACLZQgg+2H2B4u0/wAHgAD/AAKzNP8AIYAA/wADTMwIn40Fj/8AAGZmjf8AAZmai48Ii6CKjQVtimWKZotni2OMbYwIiYmLdQWLh43///8zNI7////MzAiliQX/ACCzM////YAA/wAITM3///mAAItlCPuoB4tl///7mZr///jMzf//22Zm///9MzMIcYkFiP///8zNif///jMzi4gIi3WMiQWpjLSMr4uwi7CKqYoIjY2LoAWLj4n/AAGZmof/AABmZgh3jQX//96AAP8AA0zN///4gAD/AASzM4uzCPcb92EHDvgG+0Co9yGs98yq93uzbKwS8+D3teB4oven2hPugPot6BWL/wDtTMz//zCAAP8AKoAA//9pgAD/AAEzNAj3KQeL3pyQ0Y6RkYughZEIE/aAWYpXinCLCPwLBhPugPeuChP2gMmhl6Me91kGo6F/TR/8LQeLOHqGRYiFhYt2kYW9jKiMvYu+i6mKvIqRkYughZFFjnqQi94I93EH9yr///6AAPcV///MTMyL//8xMzSL+z1HUkCLW4tsmXaeeZx+o4umCBPtgHP7LKIGi5CMqI2QjI6RkZWLmouicd2LCPcR5PcK9ycfDvdU+36t91qo/wCo5mat/wCgGZqycKgS9db3X9VD3vdL2BP2gPX38xX7pweLaP//+rMz///2Zmb//9xMzf///ZmaCG2JBYf///+zM4n///5MzYuICIt1jYkFi/8AREzNjf8AK7Mz/wAqgAD/AEKAAImLHoyNi6AFi4+J/wABzM2I/wAAMzMIcI0F///eTM3/AAKAAP//+bMz/wAGgACLsQj3pweun4+gHvcNBp+giWYf+6cHi2j/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5mb/AAEzNAiljAWO/wAAGZqN/wAB5maLjgiLoYqNBYv//7uzNIn//9RMzP//27M0///HTMyNix6JiYt1BYuHjf///0zMj////7M0CJqKBf8AIszM///9szT/AAYzNP//+UzMi2QI+xQH///vGZr//+8Zmv//7Rma///0szL//+rMzP//+RmaCP8AfhmaX///ebMzB///+czN////mZn///mzM////7Mz///5gACLCE2ErdkfzQeLq/8ABzMz/wAHzMz/ACDMzf8AAjM0CJqMBY//AABMzI3/AAGzNIuPCIugio0Fi06JZP//3bMz///KTM2Nix6KiYt1BYuHjf///2Zmjv///5maCJOKBf8AIkzN///7szT/AAazM///+0zMi2UIUgchrl7tHv8ACszNi5X/AACAAP8ACTMz/wAA5mYI//+/mZoHDsqKqPgDufdFpwH13Pe93AP3T/fUFdG91qSqiwjXuGM6H/teB26CfGYefgaGiIiGH4t4jYkFi8yNsrXViYsejo2LngWQho6GHnYGaICaqB/3ZgfyXMMnHkyLQXQtVAj3ZwenmZu0HqUGkI6OkB+LnomMBYsuimdkNIyLHomKi3gFho+Ijx6mBrKafW0f/IsHb358Yh5wBoeIiIYfi3iNiQWL6I2us9qJix6NjYueBZCHjoceeAZjfJipHw5Xiqj3pbrBqAHx1vdk1gP3RdMV9zEH/wAvmZr/AC5mZv8AKpma/wAZmZr/ABzMzIsIw6x4Oh/7FQdugnxpHngGhoiIhh+LeI2JBYvPja+yz4mLHo2Ni54FkIeOhx54BmqBmqgf9woH8lzCQh7//9kzNIv//8ZmZv//8TM0//+9Zmb//73MzAjmB6eUm60emgaQjo6QH4ueiY0Fi0uJZ2RHjYseiYmLeAWGj4iPHp4GrJV7bx/7sgdugnxpHngGhoiIhh+LeI2JBYvPja+yzImLHo2Ni54FkIeOhh58BmqBmqgfDvdof634ALf//9/mZv8AK7M0/wBl5mb/AD/maP8AEJmYrRL/AAqZmv8AKEzN/wB2GZnl//+2mZr/AFazMhPe+VP3DhVWWE5aLov7G4sl9yGL906LmIuYjJYI+IYGgPciOvcW+1SLCBO99/YKE97///uzM///5uZm///9zM3//+WZmov//+SZmov7Muv7Qfdri/cCi8Sw2tQIW/fgFf/+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+2QHaYthjHWZVKv///IZmsv///fmZsOCyXHDQIsIWXpudG6ggJ8fl4uYkJSVlZaTkJeLp4uRapBulU2gNdNvCIYHSYtmYHFFW/sbXEdriAh8igWGiYiGHw7Niaj3S633E85nqOvqEvdb6YvWi+kUBxPvmxb31goT3/fXChPv99gK90v4wBWUCvc9FpQKDnp/r/e5vPcLdvc0rb7qEs+psOnW6aLjS+cT/0C39wcV98wKE/+A980KE/9A984K5vkVFZQK9z0WlAoO+yuBqvdNtPc1quLqEsOkgOnW6W7ZUdwT8ICx3hX32QoT+QD32goT9ID32wqr+H4VlAoT8gD3PRbRCg6Y+2ew+Z+zAcul+BXkA/c7+RkV90IKDvtH+3+u98Ot95atErOlc9f3VtwT7PcT9hWcfAWdj6mSlosI2apjJvsARlVZH2OLcLGDoYOjfpV0iwh1gXl5a8VO4PcP4On3C/U6wCsf9yv3jgWbppGWi4+Lj4WNhIuJi2eFbosI+18GfIuCkomRCHIGE/T3UwoO9weJrPjbrM29AfXg99bgA/jq9w4V98cK+yH44xXuCg55iaj4C6jivQH3ANb3YtYD9yT4QRX33Ar3kuQV7goO9weJrPjbrMXrAfXgmuvo66HgA/gf+YUVtQr7URa1Cvgc/QsV98cKDnmJqPgLqOvqEvcA1nrp1ulj1hPy9yT4QRVgSY2LH4iJi3UFi4eN////TMyP////szQIqYkF/wAlszP///2AAP8AAkzN///3gACLYQj7ogeLaP///bMz///1Zmb//9pMzf///ZmaCGyJBYj////MzYn///4zM4uICIt1jIkFs4ynjLaLq4uUirOKCIyNi6AFi4+J/wABmZqH/wAAZmZpjoiWi6MIi433YveMi/uABYto///8zMz///NmZv//2jM0///9mZoIbIkFiP///8zNif///jMzi4gIi3WNiQWzjKaMtou4i6mKs4oIjI2LoAWLj4n/AAGzM4f/AABMzQhtjQX//90zNP8AAkzN///6zMz/AAqzM4uwCPehB4u1/wADGZr/AAeAAP8AJOZm/wACgAAIqY0Fj/8AAEzMjf8AAbM0i48Ii6CKjQWLRYleb16Nix6JiYt1BYuHjf///0zMjv///7M0rYiMeotzCPti+4yL94IFi7SO/wAIgACx/wACgAAIqY0FE+iP/wAA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//xMzP8AMIAA///oszT/AB6AAP//7zM0of//4MzMl2iL///O5maL///KGZp+Tkf///yZmv///DM0///5mZn///XMzIuZCP8AAMzN93UF/wAAMzPM/wADzM2zi4uLkoeOgotygUB9Y4iJg417kYW/iJeQizcI/EkHizj///QzM4dRh4WFi3aRhf8AKTMzjP8AGZmajLaLsov/ABGzNIr/ACoZmYqRkYughZH//80zM4+Cj4veCA73G/tcqNaryaz3trX3j6wS9eB9yfe64BP9+P73DhX4JQeL3pyQ0Y6RkYughZFaim2KWItZi26MWYyFhYt2kYXRiJyGizgI+zT76vc0B4venJDRjpGRi6CFkVqKbYpYi1mLboxZjIWFi3aRhdGInIaLOAj8JQeLOHqGRYiFhYt2kYX/ACuZmv8AAOZm/wAcmZn/AADmZ/8AKczN/wAAMzMIYyuRhQWbkJWMnosIE/uilX12cXZ9bR93i4CPcJWEhIiEi3+kgJyFq4sIyLmqtrFso2MfgouCioOJCKTOBf8AJ7Mz////zM3/ABuZmv///xmZ/wArszP///8ZmpGRi6CFkQgT/UWOepCL3gj3W/fq+1sHizh6hkWIhYWLdpGFvIypjL6LvYuoir2KkZGLoIWRCEWOepCL3ggOTPtcqNaryaz3+L/3XqmmdxLj2nrJ9zPaE/2A9wkrFaKVfXZxdn1tH3eLgI9wlYSEiISLf6SAnIWriwjIuaq2sWyjYx+Ci4KKg4kIpM4F/wAfGZr////Mzf8AEhma////GZn/ACWZmf///xmakZGLoIWRCBP+gP//zTMzj4KPi94I/wCj5mYHi/8AFRmalP8ADEzMk/8ACLM0sf8AJUzM/wAsmZr/ABWzNP8AJ2Zmi/8AFGZmi6D///LmZv8AC5ma///pGZqV///sMzSN///kzMyLbQj7LAeLOYGHV4aGhYt2kIW1jJ+Ms4u0i6GKtoqQkYughpFTkICPi90I9ykHi8L///xMzP8AMIAA///oszT/AB6AAP//7zM0of//4MzMl2iL///O5maL///KGZp+Tkf///yZmv///DM0///5mZn///XMzIuZCP8AAMzN93UF/wAAMzPM/wADzM2zi4uLkoeOgotygUB9Y4iJg417kYW/iJeQizcI/EkHizj///QzM4dRh4WFi3aRhf8AIZma/wAAzM3/ABdmZv8AAMzN/wAezM3/AABMzAhj//+gGZqRhQWbkJWMnosIDvcb+1vE9yCs97a194+sAfXgsab3bKat4AP4/vcOFU0K+/77QhX3igoOTPtlxPcqrPf4v/deqaZ3EuPadKb3XNpMphP6gPc/TRXwChP9AIf/AVvmZhWL/wAVGZqU/wAMTMyT/wAIszSx/wAlTMz/ACyZmv8AFbM0/wAnZmaL/wAUZmaLoP//8uZm/wALmZr//+kZmpX//+wzNI3//+TMzIttCPssB4s5gYdXhoaFi3aQhbWMn4yzi7SLoYq2ipCRi6CGkVOQgI+L3Qj3KQeLwv///EzM/wAwgAD//+izNP8AHoAA///vMzSh///gzMyXaIv//87mZov//8oZmn5OR////Jma///8MzT///mZmf//9czMi5kI/wAAzM33dQUT+gD/AAAzM8z/AAPMzbOLi4uSh46Ci3KBQH1jiImDjXuRhQgT/QC/iJeQizcI/EkHizj///QzM4dRh4WFi3aRhf8AKTMzjP8AGZmajLaLsov/ABGzNIr/ACoZmYqRkYughZH//80zM4+Cj4veCA77vvs+wInCyaz426wS9eDTphO892z7CRWyChN8swoTvLQKcveDFU4KDvvY+z7AicLJrPf2p6h39xHvEuXvM9rPphO8gPde+wkVsgoTfICzChO8gLQKEz6A+wT5YBV1ChM9gOb8cRV2Cg77voms+NuszusBkeuP4I/rAxQc/wDhGZr/A3nmaBX//6CAAP//tEzMBYH///gZmP///oAA///7mZyL///5zMyLhP8ABJma///5zMz/AAbmZov/AAbmZov/AAlMzf8AApmY/wAQMzP/AAfmaAj/AG7mZv8AMxmYBf//9jM0/wASzMz///AZmv8AD0zQ///p5mb/AAuzNAj//+HmZv//gBmYFbUK+1EWtQr3Tf0UFU4KDvvYiaz39qeod/XqEofpl9p76RP490X5eBX//8XMzf//l0zMBf//+bM0///0szT///2AAP///Jmci///9hmYi///+czM/wAFZmb///qzNP8ABWZni/8ABWZni/8ABhmZ/wADmZj/AAuAAP8ADTM0CP8AWJmZ/wBf5mj///2zNP8ACbMwBf//7kzN/wATZmj//+wzMv8AAMzM///7GZqLCP///Bmai///+4AA////GZz///2zM////xmYCPtJ+zkVlAoT+vc9FtEKE/yb/FkVdgoOtYms/wEV5mb/ACZmZv8BCrM0rNJ2AfXgA/gt+ccVsAr7bv1NFVAKDvsFiaz4A6z3ZqmmdwHh2gP37/kzFdsK+5n8uRV4Cg61+2Tv9az/ARXmZv8AJmZm/wEKszSsAfXg4O8D96j7MBX4Ego296oVUAoO+wX7ZO/1rPgDrPdmqaZ3AeHasO8D9177MBX4Egr7CPeqFXgKDrX7F7fgrP8BFeZm/wAmZmb/AQqzNKwB9eAD+Ej7FxX3hQpj95EVUAoO+wX7F7fgrPgDrPdmqaZ3AeHaA/f8+xcV94UKRveRFXgKDkb7ZO/1rGyy+NOsEvPgse/3JawTnvd3+zAV+BEKE7479zAVUQoT3lIKE75TChPeVAoO+9/7ZO/1rPj2qaZ3Et3vNNoT9Or3DhV5ChP4fv1fFfgRCg5G+2Tv9axssvjTrM29EvPgse/3JawTn/eV+V0V7gr3Vv35FfgSChO/O/cwFVEKE99SChO/UwoT31QKDvvf+2Tv9az49qmmd8W9Et3vNNoT+ur3DhV5ChP8fv1fFfgRCvcp+hAV7goORvsXt+CsbLL406wS8+D3r6wTnPgE+xcV94UKE7x79xcVUQoT3FIKE7xTChPcVAoO+9/7F7fgrPj2qaZ3AeraA+r3DhV5CvcY/UYV94UKDkaJrGyy+NOsEvPg96+sEzj3vmAV+BMKE3j7K7YVUQoTuFIKE3hTChO4VAoO+9+JrPj2qaZ3AeraA+r3DhV5CsH87hX4FAoO94iJrPjbrNJ2Afhk+ccVsAr/AMazNP1TFVUKDvdNiaz39qdxvxLp2vdN2vdP2hOc+Cn5MxXPCvtr++sVE7x6ChPcewoO94iJrPjbrMLzAfgH8wP4B/mGFfIK/wEjszT9EhVVCg73TYms9/ancb/3AO8S6dr3Pe832vdP2hOd9+r46xV1Cvss+6MVE7t6ChPbewoO94j7ZO/1rPjbrAH37u8D9+77MBX4Egr/ATyzNPekFVUKDvdN+2Tv9az39qdxvxLp2vdF7y/a90/aE8338vswFfgRCvs0+HgVE9t6ChPrewoO85Z2k6z426zC8xLxvPct8/covBM+98T5hhX3BAr3kPuGFcMKE37EChO+xQoOUIms9/ancb/3AO8S69rK767aE573gvjrFXUKVfuFFeEKE97iChO+4woO8/tk7/cLdpOs+NusEvG89ynv9zC8E573wPswFfgRCveU+TAVwwoTvsQKE97FCg5Q+2Tv9az39qdxvxLr2rPvxdoTzvdr+zAV+BEKbPiWFeEKE+7iChPe4woO8/sXt+12k6z426wS8bz4KbwTnPhZ+xcV94UK98j5FxXDChO8xAoT3MUKDlD7F7fgrPf2p3G/Euva91raE8z3+/sXFfeFCqn4fRXhChPs4goT3OMKDvOWdpOs+NusEvG8+Cm8Ezj4A2AV+BMK91H4vxXDChN4xAoTuMUKDlCJrPf2p3G/Euva91raE5j3sWAV+BMKJvglFeEKE9jiChO44woO9oGt+Oyt/wAfzMz/ADpMzP//4mZodv8AMGZo/wA8gAASsOv/AF4zM6L/AL5mZ/8AFuZm/wBqgADrE+eA/wGQszT/AuwZmBX3bAoTz4D3bQoT54D3bgr//7pMzP//g+ZoFVgK9+P7uxVZCv//xhmY/wHb5mgV//+ggAD//7RMzAWB///4GZj///6AAv//+5mci///+czMCBPXgIT/AASZmP//+czM/wAG5mYe/wAG5miL/wAJTMz/AAKZmP8AEDM0/wAH5mgI/wBu5mj/ADMZmAX///YzNP8AEszM///wGZT/AA9M0P//6eZo/wALszQIDjCBrPgTrMbAicIStOH3dKaK4RPs98T4uxWyChPcswoT7LQK+5v77hXlChPK5gr3XfddFX0K7vfsFf//xczM//+XTMwF///5szT///SzNP///YAA///8mZyL///2GZiL///5zMz/AAVmZv//+rM0/wAFZmaL/wAFZmaL/wAGGZr/AAOZmP8AC4AA/wANMzQI/wBYmZr/AF/maP///bM0/wAJszAF///uTMz/ABNmaP//7DM0/wAAzMz///sZmov///wZmov///t//v///xmc///9szT///8ZmAgO9oGt+Oyt/wAfzMz/ADpMzP//1eZo5///y+Zo/wA8gAASsOtr5/8AIjMzov8AvmZn/wAW5mb/AC+AAOdq6xPRwPiT+YQV+BYKE9OA/C4W+BYKE+GA/wErszT///wZmBX3bAoTyYD3bQoT4YD3bgr//7pMzP//g+ZoFRPFoFgK9+P7uxVZCg4wgaz4E6zGwInCquoStOF66dbpdaaK4RPsgPfE+LsVsgoT3ICzChPsgLQK+5v77hXlChPMQOYK9133XRV9ChPKAPsY96gV0QoTyQD3PRbRCg72ga347K3ivQGw6/hJ6wP/AbpMzPl9FfdrCtr7DRVYCvfj+7sVWQr//cXmaP8B3BmYFf//5bM0///1zMz//+3mZv//8jM0///x5mb///BmaAj/AHaZmv//yIAABf8AEDMz///4GZj/AAqzNP///WZo/wAGMzOL/wAGMzOL/wAFTM3/AAYzNIuSi/8ABjM0iP8ABUzM///3gACSCA4wgaz4E6zavQG04feO4QP/ANXmZvmKFf///OZm/wAA5mj///tMzv8AAOZk///8MzOL///lzM2L///uZmb///EZmP//+czN///6szQI///+Zmb///ZM0P8AV8zN//+gGZgF/wAMTM3///LMzP8ABWZl///7mZz/AASZmov/AAYzNIv/AAVmZv8ABTMwi/8ABGZoi/8ABjM0////MzL/AAYzNP///DM0/wAIzMwI/wBcMzT//37MzBXuCiz7zRV8Cvdd910VfQoO9oGt+Oyt/wA8gAB2/wAvgAC9AbDr+EnrA/8BpEzM+X0V92sK8PsNFVgK9+P7uxVZCv//wRmY/wHb5mgV+BUKDjCBrPgTrNq9AbTh947hA/el+ZMV///FzM3//5dMzAX///mzNP//9LM0///9gAD///yZnIv///YZmIv///nMzP8ABWZn///6szT/AAVmZov/AAVmZov/AAYZmv8AA5mY/wALgAD/AA0zNAj/AFiZmf8AX+Zo///9szT/AAmzMAX//+5MzP8AE2Zo///sMzT/AADMzP//+xmai////Bmai///+3/+////GZz///2zNP///xmYCOL7jRXuCiz7zRV8Cvdd910VfQoOS4ms94+tc6j3va3NdhLz4Pd16BOe9+z5xxWwCvsv+50V+BcKE977AFdfKh4TvveyCjb3XhX3swoT3ve0Cg4/+36s91Ot9/2nd7kS29r3gOETzPfN+TMVzwr7HvvkFRPcfgqDrBV/ChPsgAoT3IEKDkuJrPePrXOo972tvfMS8+C489foE5/3fvmGFfcECl77XBX4FwoT3/sAV18qHhO/97IKNvdeFfezChPf97QKDj/7fqz3U633/ad3ufcA7xLb2sbv2OETz/du+OsVdQpg+5wVE99+CoOsFX8KE++AChPfgQoOg4GqdKz3mK33ua298xLz4K7z2OcTP/d0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6awS49r3Uto+phON98z7CRWyChNNswoTjbQKEy4s9hXrChMe7AoTLu0KDs2BtPjbrAHi4Pf2vAP38l8V+BMK+0b4yxVfCg5FgbqEpvfprBLj2vdS2hM495ZgFfgUChO4YqwV6woTeOwKE7jtCg7NgbT426z/ACfMzP8AOkzM///9zND/ADyAABLi4P8APDMzov8AvkzNov8AOYAAvBPv/wGVmZr/AukZmBX//+/mZov///GAAP8AB7M0///yZmb/AA0zNAgT33r/AA9maP//7UzOof//5oAAi///24AAi///7GZl///VGZj///QZmv//vxmY/wAFGZr///lmaP8ACIAA///+5mT/AAlmZv8AAjM0/wAIgAH/ACRMzP8ACGZm/wAQgAT/ABYZmov/AA6AAIv/ABAzNP//9zMw/wAPTMz///PmaAgT7/8AEczM///wmZj/ABHMzP//7DM0/wASszSL/wAnGZqL/wAYszL/ACrmaP8ACjM0zf//+uZm/wAEZmj///eAAP8AA0zI///2mZr///7maAj///QZmv//0czM///2szSA///tTMyLCP//FmZm//8h5mgVXwr/AaYZmP8CMuZoFfgVCg5FgbqEpvfprOTAicIS49r3UtpKphMk98z5nhX//8XMzf//l0zMBf//+bM0///0szT///2AAP///Jmci///9hmYi///+czM/wAFZmf///qzNP8ABWZmi/8ABWZni/8ABhmY/wADmZj/AAuAAP8ADTM0CP8AWJma/wBf5mj///2zNP8ACbMwBf//7kzM/wATZmj//+wzNP8AAMzM///7GZqLCP///Bmai///+3/+////GZz///2zNP///xmYCBM1l/thFbIKEy2zChM1tAoTpiD82xXrChNm7AoTpu0KDs2BtPjbrM/eVL0S4uBQ3ffC3Va8E+L4rvlfFZ6hm6Sldpt3dHl7cR9uo3+cHvwUjhUTxKOcn6CheZ50cnt3dnSceaMfE9D/ARdMzKQV92sKE8lE+3AVXwoORYG6hKb36azivdDqEuPaaOnW6WXaEzoA9xj5QBXRChM5APc9FtEKyfs6Fe4KE7yA2fykFesKE3yA7AoTvIDtCg7ElHb5Bqy6wInCEvhFphPo+Bb5fxWyChPYswoT6LQKyfsZFWAKDimUdvgurOTAicIS+AimE+j32fjRFbIKE9izChPo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+N+otttYdhLk3Pf4udexE974K/nIFbAK92T7XhX4KQoT7vgqCg5LgbqEpvfprLvdEuPa91Larq0TPven+TMVzwoTvlH9PRXrChN++CsKE77tCg7qgbT436i221h2EuTc9/i517ET3ve0+cYVrwr3YvsIFfgpChPu+CoKDkuBuoSm9+msu90S49r3UtqurRM+92r5MxVkChO+SPy/FesKE374KwoTvu0KDuqBtPjfqLbboKMB5NzquKGlm7/vudexA/g++YsV+B0K91H7IRX3QQoOS4G6hKb36ay73ax2xKYS49qUtpqnlb2u2q6tEz/w99b46xX4HgoTv/Ai/PUV6woTf/D4KwoTv/DtCg7qgbT436i22z7AicIS5Nz3w6aludexE9eA+D75fhWyChPPgLMKE9eAtAr3UfsUFfgpChPngPgqCg5LgbqEpvfprLvdYsCJwhLj2vdFpn3arq0TK0D3vfjRFbIKEydAswoTK0C0ChOiwDv82xXrChNywPgrChOiwO0KDur7ZO/ttPjfqLbbAeTc9wfv9yG517ED97H7MBX4Egr33vmaFfdBCg5L+2Tv7bqEpvfprLvdEuPape/L2q6tE5+A91X7MBX4EQoT34Cj9yYV6woTv4D4KwoT34DtCg53iaz426zSdgH3kOAD93f5xRWvCoD89xXMCg4/+3zb+LqsAfd3+TMVZAoy/VUVjAoOd/tk7/Ws+NusEveJ7y7gE/D3ifswFfgRChPo5/eqFfgcCg4/+3zbU+/4jqwS99DvE3D30PswFfgRCvsAhxX/AA+Zmv8AG8zN/wANGZn/AByZmf8ADEzN/wAdmZr/AFBmZv8AwOZm/wArmZr/AGcZmsD3BJmoqauwjpGRi6CFkXKKeYpvi2iLeIxmjAiFhYt2kYX/AB+Zmoj/ACAZmv//+jM0///wTMz//9vMzAj//5zMzPt5BYT//+/mZv//95ma///9TM3///eAAP8AE8zNCP//p0zN92QF///t////ACozNP//9YAAnf8APUzN/wAEzMyRkYughZFmimOKZ4tpi3CMd4yFhYt2kYX/ACuZmof/AAfmZv//+LM0/wAbZmb//8BMzAj/AHEZmvubBf8ACLMz///r5mb/AA9Mzf//0hmagW////QZmv//3pma///z5mb//+RmZnxsgHd9gnKLCBOwfYuHjoCLCG58bX52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gxU4Cv8AbeZm+KgV/wAeMzT//+zMzP8AE+Zm///egACL///fszSLYX5sY2r///WZmv//92Zm///3TMz///eAAP//+Jma///3gAAI/wADgAD/AB6ZmgX/AAmzNP8AUYAA/wAOszL/ACyzNP8AAYAA/wA7zMwIDvtA+Ri3AfgY+UQV+/Rf9/QGDpT/AFYZmv8AOUzM/wEmszT/ADlMzAH/AFUZmv8ANeZm/wBwGZr/ADXmZv8Aahma/wA15mYD/wGpmZr/AFKzMxX//+PMzP//4GZm///UZmb///kZmYv//9szM4v///MzNP8ACkzO///05mb/AA6AAIv/ACCAAIuR/wAyZmb/ABVmZv8AJoAA/wAVZmb//96zNP8ABgAC///IZmb/ACFMzIuXi/8ADMzM/wAJZmaL/wAPZmeL/wAiMzP//9YZmv8ACJma///i5mb/AB+ZmQj/AA9mZv8AApmZ/wAPZmb/AADMzv8AEDM0iwj/AB0ZmP8AHeZo/wAF5mb/ABmzM/8ACIAA///6GZj/ABEzM///6OZoH///48zMi///8jM0///kmZr//9izNP//7uZm/wABszT/ABmzNP8ADpmY/wAiMzKL/wAXGZoI/wAUgAD///MzMv8ACWZn///wmZr///CZmv//9bM0///wmZl5Hov//+nMzf8AEEzM///o5mf/AANmZv//3rMz///aZmb/AA9mZ///8Jmc/wAcMzL//+LmZosI///rgAD///hMzP//8kzNf///5kzN/wAbTM7///oZmv8AKeZmH/8ADMzMi5f///8zMv8ACxma///9ZmcI+9oW///jzMz//+BmZv//1GZn///5GZmL///bMzOL///zMzT/AApMzf//9OZm/wAOgACL/wAggACLkf8AMmZm/wAVZmb/ACaAAP8AFWZm///eszSR///IZmb/ACFMzYuXi/8ADMzN/wAJZmaL/wAPZmeL/wAiMzP//9YZmv8ACJma///i5mb/AB+ZmQj/AA9mZv8AApmZ/wAPZmf/AADMzv8AEDMziwj/AB0Zmv8AHeZm/wAF5mb/ABmzM/8ACIAA///6GZr/ABEzM///6OZmH///48zNi///8jMz///kmZr//9izM///7uZm/wABszP/ABmzNP8ADpma/wAiMzKL/wAXGZoI/wAUgAD///MzNP8ACWZn///wmZn///CZmf//9bM0///wmZl5Hov//+nMzf8AEEzM///o5mf/AANmZ///3rMz///aZmf/AA9mZ///8JmZ/wAcMzL//+LmZosI///rgAD///hMzf//8kzNf///5kzN/wAbTM3///oZmv8AKeZmH/8ADMzNi5f///8zMv8ACxma///9ZmcI9zr39BX//+PMzf//4GZm///UZmb///kZmIv//9szNIv///MzNP8ACkzN///05mb/AA6AAIv/ACCAAIuR/wAyZmb/ABVmZv8AJoAA/wAVZmb//96zNP8ABgAC///IZmb/ACFMzIuXi/8ADMzM/wAJZmaL/wAPZmaL/wAiMzT//9YZmv8ACJma///i5mb/AB+Zmgj/AA9mZv8AApma/wAPZmb/AADMzP8AEDM0iwj/AB0Zmv8AHeZm/wAF5mb/ABmzNP8ACIAA///6GZr/ABEzMv//6OZmH///48zMi///8jM0///kmZr//9izNP//7uZm/wABszT/ABmzNP8ADpmY/wAiMzSL/wAXGZoI/wAUgAD///MzMv8ACWZk///wmZr///CZmv//9bM0///wmZx5Hov//+nMzP8AEEzM///o5mT/AANmZv//3rM0///aZmb/AA9mZv//8Jmb/wAcMzT//+LmZosI///rgAD///hMzf//8kzOf///5kzM/wAbTMz///oZmv8AKeZnH/8ADMzNi5f///8zNP8ACxma///9ZmYIDvy793T47RX8Xv0jtIv4X/kjBQ73bIH1+KasErnPqfVGrOferM+p9Uas594T5sD4fvjQFamzo8TEsVJKHotcfG5jZv//v5mY///EZmb///pmaP//xZmai2AIXQeEk4iTk5SOkh63B4ujjKOYpJScn5uinLqtybeL2ovmSccli1aLYX1ucm1zdm+LZQhopIObnp+Xoh6LmImRh5AIh5CJkYuaCBPnQKn8pRU4Cvwq+KUV+GAKE+5A+GEKE/ZAqfylFTgKDtuD9fikrBK5z6n1Rqzn3uT1E+b4p/koFfhfClb8+xUhCvwA+KMV+GAKE+74YQoT9qn8pRU4Cg61gfX4pKwS5vW+z6n1Rqzn3hPy9yT5JhUgClb8+xUhCvd1+KMV+GAKE/b4YQoT+qn8pRU4Cg77MffY4Kd3AfeWsQPO9+UVsoO3hrqLvIu+kb6YVPtUaPumi4oIjoWujAWLi6X3oNb3kY6Vj5qL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//8zM////OZm///9zM2LhgiLeI2JBYvUja+y0YmLHoyNi54Fi5D///zmZv8AAjMz///7GZr/AADMzQh/jQX//9tmZv8ABhma///umZr/AAfmZouqCA4hi6j4kqgB8dP3ItMD90LVFfiGCvdqFvg5B4um/wANgAD/AAozNP8AKIAA/wAGzMwIl40F/wAE5mb/AADMzP8AAxma/wABMzSLkQiLnomNBYtCiWge+2sGZEaNix+JiYt4BYuF/wAEGZr///6zNP8AA+Zm////TMwIl4kF/wAk5mb///nmaP8AEhma///4GZiLbQj8OQeLb///8YAA///1szP//9eAAP//+UzNCH+JBf//+xma////MzP///zmZv///czNi4YIi3iNiQWL1I2vHvdqBrLQiYsfjY2LngWLkP//++Zm/wACTM3///wZmv8AALMzCH+NBf//2eZm/wAGZmb///AZmv8AB5mai6oIDvcFi6j4kqgB89P3ItP3I9MD90TVFfg5B6aYnLQerQaymn1tH/w5B29+emIeaQZkfJmqH/dqFvg5B6aZnLQerAazmn1tH/w5B299emIeagZjfJmqH/drFvg5B4um/wAOmZj/AApmaP8AJ2Zo/wAGmZgIl40F/wAE5mj/AADMzP8AAxmY/wABMzSLkQiLnomNBYtCiWce/EAGZEWNix+JiYt4BYuF/wAEGZr///7maP8ABOZm////GZgIlokF/wAnZmb///jMzP8AD5ma///5MzSLbQj8OQeLb///8TMz///1szP//9fMzf//+UzNCH+JBf//+xma////MzP///zmZv///czNi4YIi3iNiQWL1I2vHvhBBrLQiYsfjY2LngWLkP//++Zo/wACTM3///wZmP8AALMzCH+NBf//2YAA/wAGZmb///CAAP8AB5mai6oIDvdWlHaVqPiUqBLz0xNw9+L4zBX7VgZkRY2LH4mJi3gFi4X/AAQZmv///uZo/wAE5mb///8ZmAiWiQX/ACczM///+OZo/wAPzM3///kZmIttCPw5B4tv///yZmb///XmZv//1pma///5GZoIf4kF///7GZr///8zM////OZm///9zM2LhgiLeI2JBYvUja+y0YmLHoyNi54Fi5D///zmZv8AAjMz///7GZr/AADMzQh/jQX//9mZmv8ABmZm///wZmb/AAeZmouqCPg5B6aYnLQeqAabi6GIkXkI9z78jwUTsJB8k4OVi5aLj5KRmwj/AK1MzP8B3YAABf8AC+Zo/wAgszT/AAUZmP8ADWZk/wAlszT/AARmaAicjQX/AARmaP8AAIAA/wAFmZj/AAGAAIuQCIueiY4Fi0yJe30tjYseiYiLeAWLh4z///1MzJD///+zNAipiQX/ABuAAP///jM0/wAPgAD///rMzH9pCPsW/AWJi/sN+AUF///3GZqm///9mZr/AAwzNP8AIUzM/wABzMwIsY0FkP8AAEzMjv8AA7M0i5AIi5yJjgWLKoltHg5zlHb4vagB9wX4zBV1QI2LH4mJi3cFi4eM///9gACQ////gAAIn4kF/wAiGZr///yZmP8ABJmZ///7GZz/ABCzM///zkzMCP8AnZma/GoFkHyTg5WLlouTkpGbCP8ArJma/wHbszQF/wANgAD/ACVMzP8ABIAA/wAKszT/ACRmZv8ABEzMCJyNBY//AACAAJL/AAGAAIuQCIufiY0Fi0SJg3wnjYseiYmLdwWLh4z///1MzJD///+zNAipiQX/ABiZmv///mZo/wAYgAD///qZmP//8+ZmaQj7GPwFiYv7D/gFBYOm///8szP/AAwzNP8AIUzN/wABzMwIsY0Fkf8AAEzMjv8AA7M0i5AIi52JjQWLIYl1Hg73WJR2laj4lqgS+PDTE7D3BfjMFXVAjYsfiYmLdwWLh4z///2AAJD///+AAAifiQX/ACIZmv///JmY/wAEmZn///sZnP8AELMz///OTMwI/wCdmZr8agWQfJODlYuWi5OSkZsI/wCsmZr/AduzNAX/AA2AAP8AJUzM/wAD5maasIsIoAaym31tH/w5B4tv///xZmj///WzM///15mY///5TM0IE3B/iQX///sZmP///zMz///85mj///3MzYuGCIt4jYkFi9SNr7LRiYsejI2LngWLkP///OZo/wACMzP///sZmP8AAMzNCH+NBf//22Zo/wAGGZr//+6ZmP8AB+Zmi6oI+DkHi6b/AA0ZmP8ACrM0/wAo5mj/AAZMzAiYjQX/AATmaP8AAMzM/wACGZj/AAEzNIuRCIueio0Fi0GJaB77OQZ8J42LH4mJi3cFi4eM///9TMyQ////szQIqYkF/wAYmZr///5maP8AGIAA///6mZj///PmZmkI+xj8BYmL+w/4BQWDpv//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0Yuo+AeoyO8S3+801vcC7zTW9wPvM9YT4oD4gff4FfiHChPogPwgFvuuB4tu///1MzP///NmZv//38zN///8mZoIeIkFhv///4AAiP///YAAi4YIi3iNiQWL0Y2vHvggBq/QiYsfjY2LngWLkIf/AAKAAIb/AACAAAh4jQX//+DMzP8AA0zN///1MzT/AAyzM4uoCPeuB4un/wALgAD/AAzMzP8AHoAA/wADMzQIno0FkP8AAIAAj/8AAoAAi5AIi56JjQWLRYlnHvwgBmdGjYsfiYmLeAWLho7///2AAJD///+AAAieiQX/ACDmZv///IAA/wAKGZr///OAAItvCBPqAPdaFviHChPhAPdO904VdQoT8AD8IRZ1ChPkAPdaFnUKDvcKlHaVqPgLqMbvEuDvM9YTdOz3+BX7rgeLbv//9TMz///zZmb//9/Mzf///JmaCHiJBYb///+AAIj///2AAIuGCIt4jYkFi9GNr6/QiYsejY2LngWLkIf/AAKAAIb/AACAAAh4jQX//+DMzf8AA0zN///1MzP/AAyzM4uoCPeuB6eWm6oenQaoh/8AFOZm///5szT/AA4Zmv//3EzMCBO09xz77QWRfJGFmIuVi5KRkpwI9x735wWbsqKVqI6R/wAAmZqQ/wADZmaLkAiLnYmNBYtiiXBmUo2LHoeJi3cFi4iO///8TMyQ////szS+iP8ACGZo///5TMz//+6ZmP//2bM0CDL7b3pgerk1924F///15mb/ABeZmv///YAA/wAQszL/AB+Zmv8AA7M0CJyNBY7/AABmZpH/AAEZmov/AAaAAAiLnoeNBYtOiWQe+0YGZ0aNix+JiYt4BYuGjv///YAAkP///4AACJ6JBf8AIOZm///8gAD/AAoZmv//84AAi28IEzh/904VdQoOKZR2+C6sAffZ+CIViQoO9weUdpWo+AmoyO8S+KDvM9YTdPis9/gV+64Hi27///UzNP//82Zm///fzMz///yZmgh4iQWG////gACI///9gACLhgiLeI2JBYvRja+v0ImLHo2Ni54Fi5CH/wACgACG/wAAgAAIeI0F///gzMz/AANMzf//9TM0/wAMszOLqAj3rgeLp/8AC4AA/wAMzMz/AB6AAP8AAzM0CJ6NBZD/AACAAI//AAKAAIuQCIueiY0Fi0WJZx77LAZmUo2LH4eJi3cFi4iO///8TMyQ////szS+iP8ACGZm///5TMz//+6Zmv//2bM0CDL7b3pgerk1924F///15mb/ABeZmv///YAA/wAQszL/AB+Zmv8AA7M0CJyNBY7/AABmZpH/AAEZmov/AAaAAAiLnoeNBYtOiWRpVo2LHoiJi3cFi4aQ///+mZqQ////Zmb/AByAAP///IAA/wAVTM3///dmZv8ADjMz///cGZoIE7T3HPvtBZF8kYWYi5WLkpGSnAj3HvfnBf8AD4AA/wAlszT/ABWAAP8ACEzMp48ImwaslXtvHxM4f/dOFXUKDvfKlHaXqPgHqMjvEvic7zTW9wLvNNYTdflv9/gV+IcK/C25FfiIChO1+IkKE3WLbv//9TM0///zZmb//9/MzP///JmaCHiJBYb///+AAIj///2AAIuGCIt4jYkFi9GNrx73Wgav0ImLH42Ni54Fi5CH/wACgACG/wAAgAAIeI0F///gzMz/AANMzf//9TM0/wAMszOLqAj3rgeLp/8AC4AA/wAMzMz/AB6AAP8AAzM0CJ6NBZD/AACAAI//AAKAAIuQCIueiY0Fi0WJZx77+AZmUo2LH4eJi3cFi4iO///8TMyQ////szQIEzj3WvcgFXUKEzL3WhZ1Cg74kJR2l6j4B6jI7xL4nO801vcC7zTW9wPvM9YTdQD5b/f4FfiHChNxQPdaFviHCvzzuRX4iAoTtED4iQoTdECLbv//9TM0///zZmb//9/MzP///JmaCHiJBYb///+AAIj///2AAIuGCIt4jYkFi9GNrx74IAav0ImLH42Ni54Fi5CH/wACgACG/wAAgAAIeI0F///gzMz/AANMzf//9TM0/wAMszOLqAj3rgeLp/8AC4AA/wAMzMz/AB6AAP8AAzM0CJ6NBZD/AACAAI//AAKAAIuQCIueiY0Fi0WJZx78vgZmUo2LH4eJi3cFi4iO///8TMyQ////szQIEzIA+CD3IBV1ChM4APtaFnUKEzCA+CEWdQoO7ouo+AeoyO8S4O8z1vd80xPs93uoFXoGbICbqB/3rgenlpuqHp4GrYj/ABLmZnj/ABwZmmII4vsTBY2IjImLiIuIiomKiQg3+wAF///XGZr//8tmZv//6OZm///9mZp0iAj3NPgHFZqNBY//AACAAI//AAKAAIuQCIudiI4FizqJbR77OgZnRo2LH4mJi3gFi4aO///9gACQ////gAAInokF/wAg5mb///yAAP8AChma///zgACLbwj7rgeLbv//9TMz///zZmb//9/Mzf///JmaCHiJBYb///+AAIj///2AAIuGCIt4jYkFi9GNrx73MgasvomLH42Ni54Fi5CJ/wACTM2G/wAAszMIfY0Fb4//AAyZmv8AFBma/wAMZmb/ABHmZgjK5gWPkY6OjYuOi42Jj4YIxTsF/wAW5mht/wANTMz//+xmZv//38zM///6mZoIf4kF///7GZr///8zM////eZm///9zM2LhgiLeI2JBYvKjbStwImLHo2Ni54Fi5GH/wABGZqB/wAA5mb//+CAAI7///BMzP8AAjMz///UMzT/AD3MzQgx9xMFiY6KjouNi42MjY2OCN/2BbC6/wAPgACU/wAkgACOkf8AAIAAkf8AAIAAi5IIi56KjQWLWolrbFyNix6IiIt4BYuGjv///mZmjv///5maCJuJBf8AIWZo///7zMz///LmZP//7eZo///vszT//+tMzAhKMAWHhomJiIuHi4iOiJEITuUF///tzMz/ABwZmv//+jM0/wAJgACs/wAEZmYIE/T7xvciFXUKDjCJrPgDrAH3Svf6FYsKDuyJqPgLqMbvEvdk0/d27zPWE/T3V/gkFZqNBY//AACAAI//AAKAAIuQCIudiI4FizqJbW1ajYseiYiLeAWLh5L///2ZmpL///9mZq2I/wAS5mZ2/wAcGZpiCOL7EwWNiIyJi4iLiIqJiokIN/sABWFV///ogACI///ogACI///3GZr///7mZv//++Zm///9GZqLhQiLeo2JBYu5jaisvomLHo2Ni54Fi5D///3mZv8AAkzN///7GZr/AACzMwh9jQVvj/8ADJma/wAUGZr/AAxmZv8AEeZmCMrmBY+Rjo6Ni46LjYmPhgjFOwX/ABbmZm3/AA1Mzv//7GZm///fzMz///qZmgh/iQX///sZmv///zMz///95mb///3MzYuGCIt4jYkFi8qNtB73Owav0ImLH42Ni54Fi5CH/wACgACG/wAAgAAIeI0F///gzMz/AANMzf//9TM0/wAMszOLqAj3rgeLp/8AC4AA/wAMzMz/AB6AAP8AAzM0CJ6NBZD/AACAAI//AAKAAIuQCIueiY0Fi0WJZx77PQZsXI2LH4iIi3gFi4aO///+ZmaO////mZoIm4kF/wAhZmb///vMzP//8uZm///t5mj//++zNP//60zMCEowBYeGiYmIi4eLiI6IkQhO5QX//+3Mzf8AHBma///6MzP/AAmAAKz/AARmZgj3118V+64HboB7ax58Bm6O///vzMyO///WMzTGCDH3EwWJjoqOi42LjYyNjY4I3/YFsLqakrCOCJ4GrJV7bx8T+H/3ThV1Cg73p4mo+Auoxu8S92TT92HvNNb3Au801hPx91f4JBWajQWP/wAAgACP/wACgACLkAiLnYiOBYs6iW1tWo2LHomIi3gFi4eS///9mZqS////ZmatiP8AEuZmdv8AHBmaYgji+xMFjYiMiYuIi4iKiYqJCDf7AAVhVf//6IAAiP//6IAAiP//9xma///+5mb///vmZv///Rmai4UIi3qNiQWLuY2orL6Jix6NjYueBYuQ///95mb/AAJMzf//+xma/wAAszMIfY0Fb4//AAyZmv8AFBma/wAMZmb/ABHmZgjK5gWPkY6OjYuOi42Jj4YIxTsF/wAW5mZt/wANTM7//+xmZv//38zM///6mZoIf4kF///7GZr///8zM////eZm///9zM2LhgiLeI2JBYvKjbQe9+0Gr9CJix+NjYueBYuQh/8AAoAAhv8AAIAACHiNBf//4MzM/wADTM3///UzNP8ADLMzi6gI964Hi6f/AAuAAP8ADMzM/wAegAD/AAMzNAiejQWQ/wAAgACP/wACgACLkAiLnomNBYtFiWce++8GbFyNix+IiIt4BYuGjv///mZmjv///5maCJuJBf8AIWZm///7zMz///LmZv//7eZo///vszT//+tMzAhKMAWHhomJiIuHi4iOiJEITuUF///tzM3/ABwZmv//+jMz/wAJgACs/wAEZmYIE/T3w18V+64Hi27///UzNP//82Zm///fzMz///yZmgiHBnOO///vGZr/AAmzM///2uZm/wA0TM0IMfcTBYmOio6LjYuNjI2Njgjf9gX/ACGAAP8AKoAA/wAPgAD/AAqAAKmPCJQGrJV7bx8T9fdaFviHChP4+2f3ThV1ChPy91oWdQoO+9+JrPj2qaZ3AeraA+r3DhV5Cg77QIG8+AOsAbDh903iA/gi5hVrCg4ygbqEpvfvrvdeqaZ3ErLh93DaE7737fcQFWwKgP/++EzMFW0KE35uChO+bwoO902JrPf2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//YZmP8AGWZk///3gAD/ABizNP//+ZmYCP/99YAA//31gAD/ACKZmv//3UzN/wIimZz/AiKZmAWo///8gAD/AB2zMIv/AB5maP8ABOZo///8gABu////TMz//+L//v8AA4AAbgj8uPy4/wAiszP//91mZgUO959Y/wAazM0B/wLy5mj/ABwzMAP/Aj6ZmP8AAUzNFf//50zM///5mZr//+aABP//94AA///lzMz///VmZwj/ABrmZP//5TMzBf8AgWZo/wAHzM3/AE/maP//9rMz/wBATMz//+GZmgj/ABBMzP8AEEzNBf//4DM0/wBDMzT///gZmP8AceZm/wAHzMz/AFyZmgj//+PM0P8AHDMzBf//9hmY///lGZv///eAAP//5pmZ///5mZj//+dMzQj//fWAAP8CCoAA///dTMz//91maP8CIpmY//3dZmQF///8gABui///4kzM/wAE5mj//+GZmm7/AAOAAG7/AACzM27///yAAAj8uPi4///dZmb//91MzAUO96P//87mZv8AHDMzAdz/ABrMzQP/AIVMzf8An2ZmFf//+Zma/wAYszP///eAAP8AGYAB///1Zmf/ABozMwj//+UzM///5RmZBf8AB8zN//9+mZr///azM///sBma///hmZr//7+zMwj/ABBMzf//77MzBf8AQzM0/wAfzM3/AHHmZv8AB+Zm/wBcmZr///gzMwj/ABwzMv8AHDMzBf//5Rma/wAJ5mb//+aZmv8ACIAA///nTMz/AAZmZgj/AgqAAP8CCoAA///dZmj/ACKzMP/93WZo//3dZmgFbv8AA4AA///iTMyL///hmZr///sZmv8AA4AAqP8AALMzqP///IAAqAj4uPi4///dTMz/ACKZnAUOIJ529/3L9yd3AfewiRX3WPjQQotc+yf7fItd9ydCi/dY/NAFtNcVKvex91KLBQ77KYHI+GbIAbrQ92HRA/d1gRXpi77NoPAIRQZ+UXJbUYsINHX3A/cO9wyh9wXiH8WLpFqYUAjRBnXxWM4uiwhDIWX7lPuV9WbTHw4ugaz3ybH3Lth6rBKv3PeW2hPc/wFzszT/AT8ZmhX//98zNP8AHoAA///ZTMz/ABRmZv//0szMiwj7FzP7A/sEK9pO5fdktPe28/cTU/UmHxPsWYtggW2Fa4VzfItxi3mXf56LoIuhqKebCBPclZGdlK2LzoulLYsnCIv//+3mZv///xma///nTM7///2Zmv//4+ZmCIf//9ozMhX///GZmv//jUzN///Y//7//3BmZ///obM0iwhHaMXU5Lnk2x//AC3mZov/ACnmaP//6jMy/wAk5mb//+MZmggO+1eLzPdjzPc+zAH3vdAD+AL40BX72Ur3lPs++4pK94r7Y/uaSvffBg77V4vM92PM9z7M13cB973QA/gC+NAV//+/mZqL/wAXZmbMZ5b//+SAAD///yOAAIuLSvdZi///woAA+z7//4KAAIuLSvGL//+1GZr7Y///1OZmi4tK/wATmZqLBf//52ZmR7B//wAczM3b/wEOMzSLBf//qDM0+I8V/wASzMz7Pv//sBmaBv//6JmZShX/AGdMzftj//9OMzMGDrqCtviMtgGlvvh8vgP31fiuFf8AKpmai/8AJ+Zm///0gAD/ACKzNP//7BmaCP//CGZm//5PmZgF//+75mb/AC2ZmP//0oAA/wBPZmeL/wBWzM2L9xv3AvcJ9xqLCP8Ai7M0/wAH5mgV///WZmb/ABZmaP//0IAA/wAMszD//81mZov7N4v7GPsYi/s3i///lTMz/wA4mZr//6KZmv8AVOZm///MMzMI///QgAA4rHn/AC/mZv8AU4AABf8AJLMz///vmZr/ACiZm///9uZm/wAqzMyL9ziL9xf3GYv3Nov/AGLMzP//z4AA/wBXgAD//7VmZv8ANYAACP8AJxma/wBEMzRpnAX//+OZmv//ghmaFf8AOjMy///RMzT/ACUzNP//tuZmi///sMzMi/sa+wD7Cvsci///3WZmi///3uZm/wAHzM3//+IZmv8ADeZmCA6Ai6UB96L4rBX3afyS/DaLBfdX+OIV+4r87QWIhYqIi4kIiJCKlh74qYuXiwWOjIyMi42LjYqOiJEI+5H47QUOgKB2+OKlAffR2xX7afiS+DaLBftX/OIV94r47QWOkYyOi40IjoaMgB78qYt/iwWIioqKi4mLiYyIjoUI95H87QUOMovE913D913EAajRAxTg+GIWxPsvByOLMuJ89wYI9/bD+/YGmPcA2uj3CIsI9y/E+yoG+zH7EvsX+y/7LvcQ+xj3Mx8OMovE913D913E13cBqNED+GIWxPsvB///72Zmi///78zO/wACMzP///BmZv8ABDMzCNH/AMKZmv8A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/wChszT/AL5maP//2pma/wAfszT//2BmZv//Q+ZkBXD/ABbmZv//4czM/wATMzb//99mZ/8ADszMCP//4DMz///YGZgF/wAg5mb///KZmv8AHkzN///tmZr/ABrMzf//6ZmaCP//Jpma//7/5mb35ouLiQWL///cgAD///qAAP//3bMz///1zMz//9/MzQj/AAyZmvcoFf//FoAAi/8AlzM090YF/wArgAD//88zNP8AHYAA///CmZn/AAlMzP//vDMzCA7S/wAUzM12Af8BbZma/wArTMwD/wEpzMyJFf8AK0zO///uMzMF/wAVZmb/ABr//53/AB5Mzf8ADeZm/wAhTM0I/wCtAAJE/wAQszD/ACjMzf//UMzO/wBHzM0F/wAW5mb/AE/Mzv//+5ma/wBSTMxw1Qj/AN3mZv8AcszM///pZmj/ACuZmvtv//+OgAAF///vszT/AB9mZv//62Zm/wAdTM7//+dmZqUI///TZmb//+cZmgX/ABlmZv//5zM0/wAVGZr//+NmZP8AEEzM///hGZoI//7VszT//2WAAP8BOLMy//9/zM3///9Mzv///jM0Bf//8oAA///fGZr//+3mZv//4mZm///qTMz//+YZmgj/AEPMzv8AhBmaFfts/wBYmZn/AM9mZv8Aa0zNBf8AFczM///CZmb/AAPmaP//vAAB///u5mb//72zMwgO/BuUdvjidwHbtwP3EH8V+OJf/OIHDvvnlHb44ncB8LcD92j4MhVI//+8TMyL/wDnszRfi4v//uvmZjj//6wZmqNzxv8AO0zNi//+9rM0t4uL/wE1gADm/wBbgAAFDvuXlHb44ncB27fjtwP3lH8V+OJf/OIHMxb44l/84gcO+4qUdvhMd/c+dwHbt+O3A/fF+EAVWv//zkzMi/8Ax7M0X4uL//8LszQz//+mzMyL/wFNgABfi4v//oXMzE///8MzM6Nzr/8AJGZmi///XJmat4uL/wDPzM3j/wBY//8F//7XMzS3/wFVMzQH1P8ASczMBQ77Bp52+FB3AfeG+BYV9z/8GMCL+1v4UFeL+1z8UMCL90D4GAUO+waWdvhQdwH3g7kV+z/4GFaL91v8UL+L91z4UFaL+0D8GAUOIaB2+CC2Ac6+95G+A/cKFvdoB/H/ABaAAN3/AG+AAO6fOSUe+2i+92gH9xT//+GAAO7//3KAAPspaf//moAA//+CgAAe+2gHDiGBtvggdwHOvveRvgP4B/hBFftoByX//+mAADn//5CAACh33fEe92hY+2gH+xT/AB6AACj/AI2AAPcprf8AZYAA/wB9gAAe92gHDvt6+3G8+cm8Afce2QP3IKIV+JIKDov7cbz5ybwB9x7Z9yzZA/gGohX4kgr7ehb4kgoO96z7cbz5ybwB9x7Z90DZ90rZA/keohX4kgr7mBb4kgr7jhb4kgoOTPtxvP8ApMzN/wAngAD/AWwzNP8AJ+Zm/wDUmZq8AbO39yTZ9yK3A/8A5UzN///4zM0V///8zM7//7XMzv//8WZm//+lZmb//+eAAIt6i32qcIsIeHd6d3Kheasf/wBKszOL/wA25mf/ADTMzf8AFeZm/wCgMzP/AG3mZv8ADszN/wBWmZr/AF2AAIv/AHGzM4v/AG5MzP//rTM0/wBdZmb//5WAAP8AEhma////mZr/AA+AAP///7My/wAOmZqL/wANGZqL9xmfsKCLo4uNaquLCKOfnKGkc51uHzCL///IZmb//61maP//8hma//9M//7//5SAAP//74AAN///obM0i///kGZmi/sD/wBSMzQu/wBrGZn//+7MzQj/AEbMzf8AJ4AAFf8AA+Zm/wApTM6N/wAvTMyL/wA2GZoI9wsHi6z///7mZv8AI2Zmiv8AIYAA/wBTmZr//+4zNP8APIAA//+1gACL//+mZmaL//+lMzNM//+1Zmf//6sZmv//77MzCET/AWwzNBX///9MzXn///+Zmf//7TM0i///7EzMCPsXB4v//7MzM/8AAeZmcP8AABma//+3GZr//6rMzf8AEGZm///DMzP/AEszM4v/AFoZmov/AFnMzP8APGZn/wBLzM7/AFSzM/8AEOZmCA5H1fX3MfUB94D1A/eA+BoVIQr7mwQhCg5H92nGkcYBw5z3+ZwDw/dlFZEKDkf3acaRxvd6dwHDnPf5nAPD92UV/wAFszOI/wAFTM2KkYuit7qorov/ABPMzYv/ABL/////90zO/wATGZr///NmZgj//5wZmv/+1kzMsX//AF+zNP8BHkzMBf8AE2Zm///0MzT/ABSZmv//94AA/wARTMyLo4vMmKr2///8szT/AAQZmv//+kzM/wAB5maDi3VZWnpvi///8hmai///8bMy/wAFGZr///CZmv8ACOZmCP8AWpma96Nllf//qWZm+5YF///o5mb/ABAzNP//5wAB/wALzMz//+qzM4tOi1VMfkoIDkf3JbzXvLzGkcYB0Jz3+ZwD0PgAFZEK+BxeFTwKPwQ8Cg5H4saRxqHGkcYBwZz3+ZwDwd4V/wAFszOI/wAFTM2KkYuit7qorouki/8AF8zN///yGZr/ABgzM///7eZmo3mofKKLo4vMmKr2///8szT/AAQZmv//+kzM/wAB5maDiwh1WVp6b4t1i3SYcJ///+eAAP8AEjMz///kgAD/AA3MzXSLTotVTH5KCKD3IhWit7qorouki/8AF8zN///yGZr/ABgzM///7eZmo3mofKKLo4vMmKr2///8szT/AAQZmv//+kzM/wAB5maDi3VZWnpviwh1i3SYcJ///+eAAP8AEjM0///kgAD/AA3MzHSLTotVTH5K/wAFszOI/wAFTM2KkYsIDkfixpHGocaRxvdmdwHBnPf5nAPB3hX/AAWzM4j/AAVMzYqRi6K3uqiui/8AC7Mzi/8AC2ZmiP8AC0zN///65mYI///BmZr//0cZmrF//wA7GZr/AK/mZv8AA+Zm///9GZoFo3mofKKLo4vMmKr2///8szT/AAQZmv//+kzM/wAB5maDi3VZWnpvi///64AAi///6rM0/wALMzP//+dmZv8AEbMzCP8AF5ma/wBGTM0F/wAO5mb///iZmf8ADuZm///7MzOYi6OLzJiq9v///LM0/wAEGZr///pMzP8AAeZmg4t1WVp6b4v///aZmov///aAAP8AAmZm///2GZr/AAQzNAj/AFbMzP8BAmZmZZX//6xmZv//B+Zm///3mZr/AAYZmgX//+eAAP8AEjM0///kgAD/AA3MzHSLTotVTH5K/wAFszOI/wAFTM2KkYuit7qorov/ABiZmov/ABdmZv//8pma/wAXzM3//+5MzAj//+iAAP//ukzNBf//8AAB/wAIZmV7/wAFZmf///GzM4tOi1VMfkoIDkf3JLzXvAH3pfjEFeQK91D7hhU8Cj8EPAoOR/ckvNe89413Afhh99IV//9pszSL/wBQTMz3g2WVN/uN+1+Li1r/ALqAAIv//+ZmZj///18ZmouLWv8AkGZmi///wZma+02xf/8AQjMz91n/ANDMzYsFvP//P7M0B/8AGYAA1/8ApszMiwUOR/S3yrfLtwH4YfgAFfwfX/gfBksE/B9f+B8GTAT8H1/4HwYOR/S3yrfLt/dfdwH4YfgAFf//eRmai/8AQOZm91Vllf//u5ma+1///yVmZouLX/8Ay7M0i///6mZmS///SeZmi4tf/wCnTM2L///qzM1M//9t5maLi1//AIMzM4sF///OzM37JrF//wA1GZr3Mv8A3eZmi4u3//8w5maL/wAVMzTK/wC55maLi7f//1TMzIv/ABWZmsv/AJWZmosFDkeWugHPlhX4Grr8GgbV91YV99H3BwWYmYypfZEI/Br7IQX///azM///7rM0i///7////wAJTM3///FMzQj4GvsiBZmRiql+mQgOR5a6Ac+WFfgauvwaBvfS91UV+9H7BwV+fYptmYUI+Br3IQX/AAlMzP8AEUzNi/8AD//////2szT/AA6zNAj8GvciBX2FjG2YfQgO91H4N/d/FffR9wcFmJmMqX2RCPwa+yEF///2szT//+6zM4t7/wAJTMz///FMzQj4GvsiBZmRiql+mQj8+vcMFTsKDvdR+AL3WhU9Cvj6+wwVPQoOR/jLdwH/ASsZmve8Ff//3czMJf//hRmauAX/AMyAAP8ASjM0Ff8AcIAA/wAozMwFmJmMqX2RCP//ooAA///eMzT/AD6AAP8AuszMZZX//7gzNP//Khma//8GzMz//6XmZgX///azM///7rMzi3v/AAlMzf//8UzNCP8AtMzN//++MzP//8AzM///QczNsX//AD8Zmv8AvJma/wCr5mb//8FmZgWZkYqpfpkI//9jGZr/ADlmZgUOR/jLdwH/AM8zM/8AqxmaFf//dczN///N5mYFfn2KbZmFCPcLtlf7L7F//wA9mZr/ALgzM/8A32Zm/wBQzM0F/wAJTMz/ABFMzYub///2szT/AA6zMwj//18zNP8AOoAA/wBPzMz/AO6AAGWV//+xMzT7f///P8zM0QV9hYxtmH0I/wCxGZr//78zNAX/AAiZmf//nTMyFf8AHIAB/wBVMzT/AGbMzP//2mZmBQ5HlroBz5YV/wBz5maL///gGZossX//ACPMzfb/AOgzM4uLuv//J4AAi6v/AF+Zmv8AuYAA//+8ZmYFmZGKqX6ZCP//VYAA/wA+Zmb/ACiZmv8AeYAA/wCB5mb/AC8ZmgWYmYypfZEI//+RMzT//9fmZv8ALczM/wCJGZpllf//yOZm//9bzMz//xgZmv//rDM0Bf//9rMz///uszSL///v////AAlMzf//8UzNCP8Ap0zN///DGZr//9tMzf//kuZm//98ZmaLBf8A1bM0/wD0szQV///hmZn//6VMzP//krMzswUOR5a6Ac+WFf8AS+Zmi///4hmaMrF//wAhzM3w/wEQMzSLi7r//v+AAIv/ABzmZv8AVkzN/wDkmZr/AFKzMwX/AAlMzP8AEUzNi/8AD//////2szT/AA6zNAj//1sZmsf/AD3mZvdNZZX//8MZmv//SoAA//9D5mb/AESAAAV9hYxtmH0I/wCtGZr//8CzNP//1+Zm//+If//7Gf//z8zNBX59im2ZhQj/AHHMzf8AKTMz///ozM3//7rMzf//pGZmiwX/ALWAAP8Aj4AAFf8AHZma/wBYmZr/AGrmZv//2OZmBQ5CtrX3obUBsLsD+HfgFftoBiQ4pPcJ8+Si7B/3aLX7aAb7BfsNdPsn+y/3CW/3CR/3aAYOQra196G1AfhJuwOy9/YV92gG8t5y+wkjMnQqH/toYfdoBvcF9w2i9yf3L/sJp/sJH/toBg5CtrX3obUBsLsD+HfgFf//RjM0i/8AW8zM96Hpi4u1//+wTMyL/wAeszTlZZb//92AACb//6WAAIsF+wX7DXT7Jx+L//9yMzP/AGHmZ///3IAA/wBqMzOGCP//3OZm//+ZTM2xf/8AJuZm9wb/AMgZmosF//8cTM3/ACozMxX//6BmaP8AApmY//+1TMz/ABwzNIv3Awjz5KLsHv8ATBmaBg5CtrX3obUB+Em7A7L39hX/AMkZmov//6QZmfuh//+SzM2Li2H/AF7mZov//90ZmiWxf/8AJuZm9wb/AEsZmosF9wX3DaL3Jx+L/wCHGZr//6cZmP8AJpmY//+bszT/AAezNAj/AB8zNP8AW5maZZb//92AACb///yAAIv7aIsF/wDyszT//9UzNBX/AFhMzP//+szMzv//4Rmai///luZmCCMydCoe///DMzMGDmyB/wAoGZr/AKPmZrL/AKXmZv8AKBmaAcO49zS49zG4A/etgRX4kwqk/wGYTMwV/wBUgAD///SzNP8AQEzO//+7szT/AAhMzP//qkzMCP//YuZmBv//NbMzBP8Ao0zN9zEH///3MzT//6rmZv//v0zM//+9GZr//6yAAP//9LMzCF7///9mZxX//6mzM/8ACTMz//+/GZr/AESZmf//9zMz/wBWGZoI9zQG/wDM5mYE//9aGZr//1/mZgf/AAhmZ/8AVrM0zP8ARczM/wBWszP/AAlmZggObIGy9zmy9zuyAcO49/64A/etgRX4kwr/ALYZmveHFf/+lczMBpT/AF0zNP8ASpma/wBJzMz/AGCAAIv/AGCZmov/AExmZkL/AAkZmi0I////5mZkFf//9kzM//+imZo+//+4Zmb//6CzNIv//5/MzYv//7WZmf8ASGZm///2mZr/AFyZmggObIGy+AeyAcO3+AC3A/etgRX4kwr/AJEzNP8BUjM0Ff8AF8zM///ggACZ///YZmaL///U5maL///WszN+Zf//6czM///hZmcI//+OMzT/AHDmZgX/AExMzP8AkjM0Ff//kbM0//+QzMz//5IzM/8AbrM0Bf8AHhmZ/wAXZmb/ACXMzf8ADeZm/wAp5maL/wApzMyL/wAmGZr///JMzv8AHmZm///o5mYI//8BAAH//9uAABX/AG2zM///kkzM//+PmZr//5CAAAX//+qzM/8AHoAA///zszP/ACWAAIv/ACiAAIv/ACozNP8ADUzN/wAnGZqi/wAfZmYI/wAfZmb7lhX/AHFMzf8AcUzN/wBxmZr//45mZgX//+DmZv//50zN///YmZr///FMzf//1OZmi///1GZmi///2OZn/wAOzMz//+FmZv8AGOZnCA5sgbL4B7IBw7f4ALcD962BFfiTCvguBP8ALGZmi/8AKBma///wmZj/AB9MzP//5jM0CP/+/OZo//785mgF///oMzL/AB9/////8hma/wAnszOL/wArGZqL8dnf8osI/wCQszT//7izNBX/ABgZmv//4GZm/wAOMzL//9hMzIv//9SZmoskOjkli///0+Zmi///2IAB/wAPMzP//+EzM/8AGWZnCA7PlXb3pLj3pHcBx74D+RL3xhX8o/ekWPzhvvek+KMGDs+VdvekuPekdwH4vL4DpPeZFfij+6S++OFY+6T8owYOrZZ2+Km4Afe1vgP36IEV+Kn3obj84V73ofypBw6ti7j4qXcB97W+A/e1+NYV+JQKDvtKlnb3pbj3oncBx74D+Bj3yBX7qfeiWPzgvvel96kGDvcv9xf3ZftlwaLBo8ESt8ETWPdc938VbnN2cG90oKmloKOoHqmhc3Af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zM0V+JYK/wJvszQE+JcK//+SgAD//z2AABV+/wALszL///WAAJj/AApmZv8AEjM0mP8AC7M0Hov/AAUzNP///rMy/wACszL///6zNP8ABIAA///+szT/AASZmv///LMy/wAFGZiL/wAFMzQI/wAPmZr/AAnMzv8AFhma/wAs5mb/ABYZmv8AJZma///wgAD//8TMzB6L///YTMz///GzMv//4DM0///bmZpmCP//0oAA///TGZoF///DgAD//8IzM///9kzM///izM2L///bmZkIi/8AH+Zo/wABTM3/ABOAAB7/AGtMzAb/ABOAAP8AHIAA///+szOLH/8AB8zM/wAggAD/AAaAAP8ALszN/wAAszT/ABIzM////Bma/wADMzP///gzMv8AALM0///6MzT///6zM///9Zma///UgAD///TmZnz//+nmZosI//+SzM4Gi/8AHTM0/wAqTMz/ACmzM/8AAzM0/wADMzMI/wA9zMz/ADvMzgWu/wAh5mb/ABqzNP8AGzM0i/8ALszMCP8AQkzO///EMzL/ABtMzP//zeZm//+7zMz//9uZnP//zUzMZh4O9zj/AXozNP//8MzNFfiWCv8Cb7M0BPiXCv//+EzM//+GszQV/wAbTMz/ABizNP//8RmY///ZszQfi///4hma///cMzT//8/mZv//yMzM///3gAAI/wACszT//+yAAAX/AApmZv8AAUzM/wAIZmaL/wAHzMyLCP8AIxma/wAqTM7///TmaP//un////+uGZn//8lmZv//7TM0///qgAAf///gzMyL///6GZr/AA5Mzf//+OZmlv//+hma/wAIgAD///eAAP8ABxmZ///zszSLCH5+///0Zmf///YzM///50zN/wA0GZj//++zM7D/AEmAAMz/ADGAAf8AUTMzH4v/AEMzNP//0GZm/wAZf/7//9uzNP8ABhmaCP///0zO/wABMzQF/wA6gACw/wADTMyni/8AFMzMCKX//+iAAP8AJ7M0TP//pbM0cf//xEzM///rzMz///eAAP8ABczM///zszSa/wARgAD/AAaAAP8AFBmY/wALszT/ACezNP8AKkzM/wAHszT/ABAzNB4O9zj/AXozNP//8MzNFfiWCv8Cb7M0BPiXCv8AZ2Zm//6fMzQV///L5mb/AGoAAQaY////gAD/AAcZmP//94AAHv//9jM0i///9EzM///6MzT///jMzP//+szM///6MzT///zMzP///0zM///6szSL///7gAAI//+Z5mf//4xmaAf/AKPMzP8A78zNBY3/AAMzNP///pmaj////Bmaiwj//+8ZmAb///vMzIv///zmaP///GZm///95mb///0Zmgj//1VMzf//DjMyBf///0zM////TM3///+AAP///2Zni////2Zm/wABmZr///cZmv8ABeZm///u5mb/ABKAAIsI/wB/TMz//83mZgaL///jmZr//+jmaP8AARmZ///lzMz///4Zmv///Bma///8GZqL///yTMz/AAPmZv///Bma/wATgAD/AACZmf8AGLM0/wAAszT/ABvmZov/ABgZmov/ABLMzP///0zM/wATgAD///9mZ/8AA+Zm/wAD5maL/wANszT///wZmv8AA+Zm///hzMz/AAIzM///9TM0///+TM2L/wAcszMI/wAyGZr/ACuZmgf/AAiAAP8ACRma/wAMTMz/AAcZmv8ABeZm///9Zmb/AAPmZ///+YAAHw73OP8BejM0///wzM0V+JYK/wJvszQE+JcK/wA2GZj//pTMzBX//8WAAf//4WZo///VMzNmHv//6Jmai///95mY/wAO5mb///bmZv8ADEzN///4TMz/AAqAAP//9WZo/wAJszN+iwj///RMzP//9GZo///1mZr///OzM///5pma/wA0mZj//+szM/8AIxma18H/ADiAAP8ATWZm/wA7zMxi/wA1TM7//7sZmh///+VmZov//+lMzv//+szM///05mb///uAAAj/AAxmZv8AZrM0Bf8AFszM///9Zmb/ABQZmv///UzO/wAdMzSL/wASMzSL/wAUzMz/AACzMv8AGWZm/wACmZoI/wAJszT/ACpMzP///BmY/wAB5mgF///c5mb///wZmv//3jM0///9Zmb//9+AAIv//+kzNIt1/wABTMz//+qAAI0I///rMzL//06AAAX/ACCAAP8ADEzM/wAXZmb/AAKzNP8AFhmaiwj/AChMzP8AHzM0///lTMz//70AAR8O9zj/AXozNP//8MzNFfiWCv8Cb7M0BPiXCv//uDMy//7wmZoV/wAQgAD/ADgZmv8AJxma/wA+MzL/AFIzNP8AHrM0i/8ABzM0if8ABTMy///6zMz/AAMzNP//wZma///tzMxl///mMzL//92Zmv//2Bma///Z5mb//9PMzP//7TMz///IGZyL///PTMwI//+DMzP/AEtmZ///50zN/wAvgAD/AFCZmv8AIGZm2f8ANLMz/wA0szP//+YZmP8AMpma//+sGZoe///t5maLb4X//+0Zmv//9ZmaCP//+jM0///oMzIV+JgKDvc4/wF6MzT///DMzRX4lgr/Am+zNAT4lwr//+CAAP//amZmFf8AazMyBv//z+Zm//+IZmb//89Mzv//iGZn///WZmb//6JmZwj/AASAAP///Bma/wAqMzSNBf8AIxma/wBomZj/ACSAAPH/AETmZv8Ap7M0CP//9jMy/wAHMzQF///1mZr///zMzP//8mZm///8szT//+iZmosI//+BMzQG///rGZqL/wABszL/AAZMzP//9Jma/wACMzT///5mZouK////gACL///+gAD///9mZv//4szM///5gAL//9rmZv//+szM///gGZoI/wATgAD///4ZmgX/AA2Zmv8AMWZm/wAU5mb/AAPmZv8AE4AAiwgO9zj4D/h7FbOga24fi2plbXp/CHmXBWSkgaGLngioo6iwHu5NFbdorE5NYGZbHotpnXKxcgiVhQV8f32BfH1ydYFvi3IITLhpzNuxx7sei657p2ugCGalBaadt6qLsggk+7QVb12kwR+Lnpe2wK4IqXoFsnObbotuCE1bfG8e/wADMzT//2fMzRX4lgr/Am+zNAT4lwoO9zj/AXozNP//8MzNFfiWCv8Cb7M0BPiXCv8AQszM//66mZoV///vgAD//8fmZv//2OZo///BzM3//63MzP//4UzNi///+OZm/wAB5mT///qzM/8ABTM0///8zM3/AD5mZv8AEjMz/wAmGZz/ABmzM/8AImZm/wAn5mf/ACYZmv8ALDMz/wASzMzDi/8AMLM0CP8AfMzM//+0mZr/ABizNP//0IAA//+vZmb//9+Zmj3//8tMzP//y0zM/wAZ5mb//81maP8AU+ZmHv8AEhmai6eR/wAS5mb/AApmZgj/AAXMzP8AF8zMFf//6bM0///uMzT//+gzNP///xma///0TMyLCP//w4AA///0TMz/AD5mZv8AHoAA/wBDmZr/ABoZmv8AHoAA/wAd5may/wAnmZr//+tMzP//lrM0H4v///KZmv///rMy///wGZj///yzNHoIDvc4/wEzMzT/AM5MzRX4mQrS//8igAAV+JYK/wJvszQE+JcK/wBmzMz//4WAABX/AApmZov/AAnMzP///LM0/wAHGZr///mAAP8AEuZo///vzMz/ABDMzP//0bM0i///rYAAi///x4AA///+GZz//9j/////95mY///gzM3///JMzP//zUzNbf//+YAAgIsI///GzMz///mAAP8Aapma/wA1TM3/AJeAAP8AJbM0/wAbTMynH////WZm//6XzMwV+JoKDvc4/wIBMzT/AM5MzRX/AM3//weLsv8AAOZo/wAnszT/AAEZmP8ACIAAi/8AAxma///+TMz/AAAZmv///bM0i2f//+mzNP//3czM///v5mb//8bMzP//5WZm/wABGZr///iZmv8AAuZo///55mb/AAXMzIf/AB2Zmv8ADEzM/wAOmZr/AAPmZv8ADGZmiwj/AAqzNP8AAkzM///wZmj//+nmZh///z+ZmQeL///KAAH///TmZv///MzM///SgAD///4Zmv///Bma///8GZqL///yTMz/AAPmZv///Bma/wAf5mb/AACZmf8AE4AA/wAAszT/ACCAAIv/AB8zNIv/AA+ZmP///0zM/wAggAD///9mZ/8AA+Zo/wAD5maL/wANszT///wZmP8AA+Zm///SgAD/AAHmZv//9OZo/wADMzSLwQj7Whb4mQrK//8igAAV+JYK/wJvszQE+JcKDvc4/wE4MzT/AM5MzRX4mQrN//8igAAV+JYK/wJvszQE+JcK/wADgAD//zyAABV+/wALszL///WAAJj/AApmZv8AEjM0mP8AC7M0Hov/AAUzNP///rMy/wACszL///6zNP8ABIAA///+szT/AASZmv///LMy/wAFGZiL/wAFMzQI/wAPmZr/AAnMzv8AFhma/wAs5mb/ABYZmv8AJZma///wgAD//8TMzB6L///YTMz///GzNP//4DM0///bmZhmCP//0oAA///TGZoF///DgAD//8IzM///9kzM///izM2L///bmZkIi/8AH+Zo/wABTM3/ABOAAB7/AGtMzAb/ABOAAP8AHIAA///+szOLH/8AB8zM/wAggAD/AAaAAP8ALszN/wAAszT/ABIzM////BmY/wADMzP///gzNP8AALM0///6MzT///6zM///9ZmY///UgAD///TmaHz//+nmaIsI//+SzMwGi/8AHTM0/wAqTMz/ACmzM/8AAzM0/wADMzMI/wA9zMz/ADvMzgWu/wAh5mb/ABqzNP8AGzM0i/8ALszMCP8AQkzO///EMzD/ABtMzP//zeZo//+7zMz//9uZnP//zUzMZh4O9zj/ATgzNP8AzkzNFfiZCs3//yKAABX4lgr/Am+zNAT4lwr/AG5MzP//grM0Ff8AG0zM/wAYszT///EZmP//2bM0H4v//+IZmv//3DM0///P5mb//8jMzP//94AACP8AArM0///sgAAF/wAKZmb/AAFMzP8ACGZmi/8AB8zMiwj/ACMZmP8AKkzQ///05mj//7p/////rhmZ///JZmb//+0zNP//6oAAH///4MzMi///+hma/wAOTM3///jmZpb///oZmv8ACIAA///3gAD/AAcZmf//87M0iwh+fv//9GZn///2MzP//+dMzf8ANBmY///vszOw/wBJgADM/wAxgAD/AFEzMx+L/wBDMzP//9BmaP8AGYAA///bszT/AAYZmgj///9MzP8AATM0Bf8AOoAAsP8AA0zMp4v/ABTMzAil///ogAD/ACezNEz//6WzNHH//8RMzP//68zM///3gAD/AAXMzP//87M0mv8AEYAA/wAGgAD/ABQZmP8AC7M0/wAnszT/ACpMzP8AB7M0/wAQMzQeDvc4/wE4MzT/AM5MzRX4mQrN//8igAAV+JYK/wJvszQE+JcK/wDQZmT//p8zNBX//8vmaP8AagABBpj///+AAP8ABxmY///3gAAe///2MzSL///0TMz///ozNP//+MzM///6zMz///ozNP///MzM////TMz///qzNIv///uAAAj//5nmZ///jGZoB/8Ao8zM/wDvzM0Fjf8AAzM0///+mZyP///8GZiLCP//7xmYBv//+8zMi////OZo///8Zmb///3mZv///RmaCP//VUzO//8OMzIF////TMz///9Mzf///4AA////ZmeL////Zmb/AAGZmv//9xma/wAF5mb//+7mZv8AEoAAiwj/AH9MzP//zeZmBov//+OZmv//6OZo/wABGZn//+XMzP///hma///8GZr///wZmov///JMzP8AA+Zm///8GZr/ABOAAP8AAJmZ/wAYszL/AACzNP8AG+Zmi/8AGBmYi/8AEszQ////TMz/ABOAAP///2Zn/wAD5mj/AAPmZov/AA2zNP///BmY/wAD5mb//+HMzP8AAjMz///1MzT///5MzYv/AByzMwj/ADIZmv8AK5mYB/8ACIAA/wAJGZz/AAxMzP8ABxma/wAF5mb///1mZP8AA+Zn///5gAAfDvc4/wE4MzT/AM5MzRX4mQrN//8igAAV+JYK/wJvszQE+JcK/wCeGZj//pTMzBX//8WAAf//4WZo///VMzNmHv//6Jmai///95mY/wAO5mb///bmZv8ADEzN///4TMz/AAqAAP//9WZo/wAJszN+iwj///RMzP//9GZo///1mZr///OzM///5pma/wA0mZj//+szM/8AIxma/wBMAALB/wA4gAD/AE1mZv8AO8zMYv8ANUzO//+7GZgf///lZmaL///pTM7///rMzP//9OZm///7gAAI/wAMZmb/AGazNAX/ABbMzP///WZm/wAUGZr///1Mzv8AHTM0i/8AEjMyi/8AFMzM/wAAszL/ABlmaP8AApmaCP8ACbM0/wAqTMz///wZmP8AAeZoBf//3OZo///8GZr//94zMv///WZm///fgACL///pMzSLdf8AAUzM///qgACNCP//6zMy//9OgAAF/wAggAD/AAxMzP8AF2Zm/wACszT/ABYZmosI/wAoTMz/AB8zNP//5UzM//+9AAEfDvc4/wE4MzT/AM5MzRX4mQrN//8igAAV+JYK/wJvszQE+JcK/wAhMzL//u+ZmhX/ABCAAP8AOBma/wAnGZr/AD4zMv8AUjM0/wAeszSL/wAHMzSJ/wAFMzL///rMzP8AAzM0///BmZr//+3MzGX//+YzMv//3Zma///YGZr//9nmZv//08zM///tMzL//8gZnIv//89MzAj//4MzM/8AS2Zo///nTM3/AC+AAP8AUJmY/wAgZmjZ/wA0szP/ADSzM///5hmY/wAymZr//6wZmh7//+3mZotvhf//7Rma///1mZoI///6MzT//+gzMhX4mAoO9zj/ASwzNP8AzkzNFf8Azf//B4uy/wAA5mb/ACezNP8AARma/wAIgACL/wADGZr///5MzP8AABma///9szSLZ///6bM0///dzMz//+/mZv//xszN///lZmb/AAEZmv//+Jma/wAC5mb///nmZv8ABczNh/8AHZma/wAMTMz/AA6Zmf8AA+Zm/wAMZmaLCP8ACrMz/wACTM3///BmaP//6eZmH///P5mZB//////////KAAH///TmZ////MzM///SgAD///4Zmv///Bma///8GZqL///yTMz/AAPmZv///Bma/wAf5mb/AACZmf8AE4AA/wAAszT/ACCAAIv/AB8zNIv/AA+ZmP///0zM/wAggAD///9mZ/8AA+Zm/wAD5maL/wANszT///wZmv8AA+Zm///SgAD/AAHmZv//9OZo/wADMzSLwQjZ//8igAAV+JYK/wJvszQE+JcK/wA6gAD//2pmZhX/AGszNAb//8/mZv//iGZm///PTMz//4hmZ///1mZm//+iZmcI/wAEgAD///wZmv8AKjM0jQX/ACMZmv8AaJmY/wAkf/7x/wBE5mj/AKezNAj///YzNP8ABzM0Bf//9ZmY///8zMz///JmaP///LM0///omZiLCP//gTM0Bv//6xmai/8AAbMy/wAGTMz///SZmv8AAjM0///+ZmaLiv///4AAi////oAA////Zmb//+LMzP//+YAC///a5mb///rMzP//4BmaCP8AE4AA///+GZoF/wANmZr/ADFmZv8AFOZm/wAD5mb/ABOAAIsIDvc4+IP4exW0oGtuH4tqZG16fwh5lwVkpIGhi54IqKOosB7uTRW3aKxPTGBmWx6LaZ5ysHIIlYUFfH9+gXt9cnWBb4tyCEy4aczbsce7Houu///v5mj/ABvmZv//4RmY/wAVGZoIZaUFpp23qouyCCT7tBVvXaTBH4uemLa/rgipegWyc5tui24ITVt8bx7//00zNP8ARUzNFfiZCs3//yKAABX4lgr/Am+zNAT4lwoO9zj/AXozNP//8MzNFfiWCv8Cb7M0BPiXCkn//m3MzBX4mQr/APDMzP8AUMzNFf//74AA///H5mb//9jmaP//wczN//+tzMz//+FMzYv///jmZv8AAeZk///6szP/AAUzNP///MzN/wA+Zmb/ABIzM/8AJhma/wAZszP/ACJmaP8AJ+Zn/wAmGZj/ACwzM/8AEszMw4v/ADCzNAj/AHzMzP//tJmc/wAYszT//9CAAP//r2Zm///fmZo9///LTMz//8tMzP8AGeZm///NZmj/AFPmZh7/ABIZmov/ABv//pH/ABLmaP8ACmZmCP8ABczM/wAXzMwV///pszT//+4zNP//6DM0////GZr///RMzIsI///DgAD///RMzP8APmZm/wAegAD/AEOZmv8AGhma/wAegAD/AB3mZrL/ACeZnP//60zM//+WszQfi///8pma///+szD///AZmP///LM0eggO9zj/AXozNP//8MzNFfiWCv8Cb7M0BP8AomZk/wCDTND//33Mzv//XWZm//9dZmb//3tMzP//fIAA+zUf//+l5maL//+v5mb/ACiAAP//yoAA/wA/5mb/AApmZv8AAGZm/wAUTM3/AACZmpmLCP8Aa0zNBv8AE4AA/wAcgAD///6zM4sf/wAHzMz/ACCAAP8ABoAA/wAuzM3/AACzNP8AEjMz///8GZr/AAMzM///+DMy/wAAszT///ozNP///rMz///1mZr//9SAAP//9OZmfP//6eZmiwj//5LMzQb///////8AHTM0/wAqTM3/ACmzM/8AAzMz/wADMzMI/wA9zM3/ADvMzgWu/wAh5mb/ABqzNP8AGzM0i/8ALszMCP8AQkzO///EMzL/ABtMzP//zeZm//+7zM3//9uZmv//zUzMZn7/AAuzM///9YAAmP8ACmZm/wASMzSY/wALszQei/8ABTM0///+szP/AAKzMv///rMz/wAEgAD///6zM/8ABJma///8szT/AAUZmIv/AAUzNAj/AA+Zmv8ACczN/wAWGZr/ACzmZv8AFhma/wAlmZr///CAAP//xMzMHov//9hMzP//8bMy///gMzT//9uZmmYI///SgAD//9MZmgX//8gzM1L///NmZ///4pmZ///+Zmb//98zM2S9///o5mb/AD8Zm4v/AESzMwj/AKEzNP8AgeZo/wCDmZj/AKJmZh7/AHvMzP//hYAAFf8ACmZoi/8ACczM///8szT/AAcZmP//+YAA/wAS5mj//+/MzP8AEMzM///RszSL//+tgACL///HgAD///4ZnP//2P/////3mZj//+DMzf//8kzM///NTM1t///5gACAiwj//8bMzP//+YAA/wBqmZr/ADVMzf8Al4AA/wAlszT/ABtMzKcf///9Zmb//pfMzBX4mgoO9434b/cOFfibCv/+XbM0/wCVzMwV+JwK/wLNmZiJFfidCg73jfeI+E8V+J4K//8+szP//1TMzBX4nAr/As+ZmIkV+J0KDveN+Cj4tRX4nwr//qazNP/+7szMFficCv8CzpmYiRX4nQoO94348PdaFTv3NwafipZ+HnyLeYKAg4KGioOLhAj7MftG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T7J8rYuoCLewuMQe9y0sFc9Uvi4rSVFCHotWp2XFZQibgAVzend6c3ZkaXxgi2YIKtBW7/cPxujTHovCcbZcqwhQswW1p9C6i8gI+zP8TxVfRrDgH4unnc3cwgi4cAXHZ6Vei14ILEF0YB77vfUV+JsK//5eszT/AJXMzBX4nAr/BEeZoIkV+KIKDvkU+Hf3DhX4mwr//l6zNP8AlczMFficCv8ER5mgiRX4ogr//umzMP//5WZnFf//5pmY//+pzMz//8PmaP//oDMz//+BgAD//9DMzYuAjoOThuun/wA6gAD/ACeZmv8ANOZo/wA9Zmb/ADqZmM+o4YvWCPdU+wixQvsQWf//iBma//+u5mY6sz33FR7/ABvmaIu2/wAJTM3/AB0ZmP8AD+ZmCP8ACOZo/wAkszMV+KAKDvkU+cv4sxX4oQqH/L4VLAr8x/haFfieCv//RLMz//9UzMwV+JwK/wRHmaCJFfiiCg73OP8BH2Zm/wEYMzQVj/8ABzM0l//////+/wAVmZqLCNMG/wAVmZqLk////mZm/wABmZqDCJv//6WZmgX/AAQzNP//5oAA///95mT///pMzf//3rM0///7MzMI///6Zmb///8zNAX///zMzP///zMz///+Zmj///5mZov///2ZmgiL///vMzP/AAGZmv///mZmBYv/ADMzMv8AAZma/wAWZmaj/wA1mZz///5mZose/wABmZj/AAGZmov/ABDMzQWL/wACZmf///2ZnP8AAhma///8zMz/AABMzW//AAJmZv//8zMy/wAEzMz///jMzP8AImZnCP//yZma/wEDMzQF///8zMz/AA8zNP///jM0/wAGGZq4/wADgAD/AAJmZv8AADM0/wABmZr/AAIzMov/AAJmZgiLm////zM0/wABmZoF///VmZr///8zNP//xMzM////MzJni///2zM0i///5zMy/wAAzM7//+ZmZv8AAMzMCP///Zma///+ZmaLewX///zMzP8AAmZo///+Zmj/AATMzB7/ABpmZv///zM0/wAHMzL///zMzIv///DMzIv//+ZmZv//szM0//8vMzR7///XMzP///czM///6Zma///zMzT///mZmf//6mZm///9mZr///zMzf///5mah////GZli////ZmaCIv///DMzf8AAZmZ///+ZmYF//////+L/wAszM3/AAGZmv8AFmZmiwj/ABjMzP8AJzM0///+ZmaLH/8AAZma/wABmZqL/wAQzM0Fi/8AAmZn///9mZr/AAGZmv///MzM/wAAzM0I///2Zmb/AAGZmQVz/wAD//////ozNP8AA5majv8ADTMzi4v/ABVmZv8ATxmalv8AHBmaCP8ASMzO91QV/wARmZqL/wANMzL///kZmJH//+SAAAj/ABMzNP//mZmaBf8AAzM0///vMzT///P//v//+mZm///xmZqLCP//vZmaBv//6Zma///5mZj/AAGZmP8ABzM0H4uL/wAbMzTn/wAKZmar/wAFmZr/ABDMzP8ABMzO/wAJmZz/AA5mZosInf/+GJmYFfiWCv8Cb7M0BPiXCg73OP8BXGZm/wGzZmYV/wAYzMz/AAWZmv8ACAAC/wA3MzT/ACMzNP8AKZmY///3MzL//8pmZlv//+jMzP//6zM0Vx7//8GZmgb//+WZmgT/AD5mZgb/AEjMzP8AEmZo///bTMz//9SzNP//3MzN///zMzT//9JmZv//rmZm///L5mb///jmZv8ACzMz/wAdmZof///gzM7//75mZhWji/8AKZma///+Zmb/ACzMzIv/AGpmZov/ACWZmL+L/wAxmZqLv///5Zmc/wAjMzRT/wAMzMyr/wAOZmb/ABmZmK+L/wAfMzSL/wAszMz//+szNP8AKzM0+wiL///pmZqL///dmZj///5mZv//2zM0iwj//92Zmot3/wAAzM7//92Zmv8AAMzM///7MzP///szNIv//+8zMv8ABMzN///7MzT/ADDMzP///MzM/wAIzM7///zMzIv//72Zmgj//1MzNAeL//+9mZr///czMv///ZmZ///PMzSH///7MzP///szM4v//+8zM/8ABMzN///7MzP/ACGZmv8AAMzO/wAUzMz/AADMzP8AIzM0iwjI//9zzM0V+JYK/wJvszQE+JcKDvc4/wF9zMz3BhX/AD5mZov/ACZmaP8AFzM0/wAlmZr/ADJmZv///EzM/wAFMzP///uZnJP///gZmP8AAszN///bMzT//9TMzf//4//+///v/////8pmZosI//+wzMz//9GZnP8AVZmb/wBPMzP/AIZmZv8APmZmp8cfy4v/ACWZmP//3MzM/wAJmZpTk////Zmak////7Myk/8ABRma////zMz/ACDmZv///mZo/wAhZmj///gzNP8AJBma///hmZqL///b//7/AAzMzEuL//+WZmaL//+uZmg7i///izM0i///zTMz/wAP5mb//8lmZv8AJ0zN///bzM0I/wAf5mf//+KZmv8ALOZk///vzMz/ADszNIsI///8Zmj//37MzRX4lgr/Am+zNAT4lwoO9zj/AUFmZv8AtszNFf8BAZmYB5+f/wAEzM7/AB8zNP8AhmZm/wASZmj//6JmZP//rMzO+wT//85mZP//4mZnM///wzM0///6Zmb/AA2Zmv8AFmZmHmv/ATMzNBX//92Zmot3/wAAzM7//92Zmv8AAMzM///7MzP///szNIv//+8zMv8ABMzN///7MzT/ADDMzf///MzM/wAIzM3///zMzIv//72Zmgj//1MzNAeL//+9mZr///czM////ZmZ///PMzOH///7MzP///szM4v//+8zNP8ABMzN///7MzL/ACGZmv8AAMzO/wAUzM3/AADMzP8AIzMzi6OL/wAczMz///5mZsuLCP8AWMzM/wBjMzT/ACmZmvcg/wBqZmb//75maP8AUzM0//96ZmQf///rMzSL//+5mZr///5mZv//8MzMiwj/AFjMzv/+BszMFfiWCv8Cb7M0BPiXCg73OPgf98IV/wA4zMyL///8zM7///DMzv8AAZma///iZmaPh/8ADmZmi4+P////MzT/ABczNP///zMy/wAMzMyL/wAWZmaL/wAWZmb/AADMzv8ADmZm/wAAzMyfh4////GZmouHh////mZmZ/8AAmZmg1P///8zNAj//9JmZv8AcZmaBv8ADZma/wAKZmb/AAjMzP8ADzM0Hv8APZmaBv8AMZmai/8ACmZm///lmZr/AA5mZv//0mZmk////zM0/wAHMzD/AAGZmP8ABmZo/wADMzT///zMzP8AGzM0///2Zmj/AD5mZP///mZo/wAFmZqL/wABmZr///8zMP8AAMzO///+ZmiL///0zMz///5mZv//+mZo///+ZmZ7iwj//1pmZgaLi///yZma/wAAzM7//92Zmv8AAMzM///7MzP///szNIv//+8zMv8ABMzN///7MzT/ADDMzP///MzM/wAIzM7///zMzIv//72Zmgj//1MzNAeL//+9mZr///czMv///ZmZ///PMzSH///7MzP///szM4v//+8zNP8ABMzN///7MzL/ACGZmv8AAMzOw/8AAMzMi4sI/wB7MzIGq/8ANMzO///+ZmaLH/8ACZmY/wAgzM3/AAjM0P8ALAAB/wAFmZj/ACGZmf//+MzMj///+ZmY/wABmZn///czNP///Zma///zMzT//9DMzf//6MzMY///zZmaiwj//72Zmgb///GZmv8AAAAB///0zMyfi/8ADzMzCPcMB/8AHMzO//7CzMwV+JYK/wJvszQE+JcKDvc497T/ANuZmhWL//+9mZr///czMv///ZmZ///PMzSH///7MzP///szM4v//+8zNP8ABMzN///7MzL/ACGZmv8AAMzO/wAUzMz/AADMzP8AIzM0i/8AImZmi5////8zNP8AImZm////MzL/AATMzP8ABMzOi/8AEMzM///7MzT/AATMzf//zzM0/wADMzP///czNP8AAzM0i/8AQZmZCP8ARzMz/wAtmZgH/wA4zMyL///8zM7///DMzP8AAZma///iZmePh/8ADmZmi4+P////MzT/ABczM////zMy/wAMzM6L/wAWZmaL/wAWZmb/AADMzv8ADmZm/wAAzMyfh4////GZmouHh////mZmZ/8AAmZmg1P///8zNAj//9JmaP8AfZmaBv8ADZma/wAKZmT/AAjMzP8ADzM0Hv8APZmaBv8AMZmai/8ACmZm///lmZr/AA5mZv//0mZmk////zM0/wAHMzT/AAGZmP8ABmZo/wADMzT///zMzP8AGzM0///2ZmT/AD5mZP///mZo/wAFmZqL/wABmZr///8zMP8AAMzO///+ZmiL///0zMz///5mZv//+mZo///+ZmZ7iwj//1pmaAaLi///yZmY/wAAzM7//92Zmv8AAMzM///7MzP///szNIv//+8zMv8ABMzN///7MzT/ADDMzP///MzM/wAIzM7///zMzIv//72Zmgj/AFozNP/+aGZmFfiWCv8Cb7M0BPiXCg73OP8B2jM0944V//+wzM0Hd///7AABa///9ZmZb4sIJ///2mZm/wBmZmb/AEGZmv8AYMzO/wAzMzL/AEJmZv8ATMzOH/8ATzMyi/8AIZmaY5f//8zMzP8ACAAC///9gACT////szKT/wAFMzT///8ZmP8AIMzMif8AIUzQ///4gAD/ACRMzHOL///EzMz/AAzMzP//0zM0iwj//42Zmv//omZm//+2Zmb//4GZmv//mmZm/wBOZmb//62Zmv8AcmZmH/8ANmZmi/8APzM0/wAXMzT/ADGZmv8AImZm///6Zmj/AAWZmv//+mZk/wAHMzKL/wAFmZoIxweL/wATzMz/AAmZmP8AA2Zm/wATMzT/AAMzNP8AAzM0/wAAgAD/AAGZnP8AARmai/8AAzM0CIv/ABGZmP///mZk/wAAzM4Fi///2mZo////MzL//+mZmHNL/wAAzM6LHv///zM0////MzKL///uZmgFi////MzM/wACZmb///6Zmv8AAmZm////zMwIm////mZmBaL///2zNP8AC2Zo///7GZqL///uZmYIK//+9szMFfiWCv8Cb7M0BPiXCg73OPiz/wGNZmYVi/8AQmZm/wAIzMz/AAJmaP8AMMzMj/8ABMzM/wAEzMyL/wAQzM7///szNP8ABMzM///eZmj///8zNP//6zM0////MzL//9zMzIv//92Zmot3/wAAzM7//92Zmv8AAMzM///7MzT///szNIv//+8zMv8ABMzM///7MzT/ADDMzP///MzM/wAIzMz///zMzIv//72Zmgj//7szNP//RzM0/wBEzMwHi/8AQmZm/wAIzM7/AAJmaP8AMMzMj/8ABMzM/wAEzMyL/wAQzM7///szNP8ABMzM///eZmb///8zNP//6zM0////MzL//9zMzIv//92Zmot3/wAAzM7//92Zmf8AAMzM///7MzP///szNIv//+8zMv8ABMzN///7MzT/ADDMzf///MzM/wAIzM3///zMzIv//72Zmgj//1MzNAf/AAAAAf//vZma///3MzP///2Zmf//zzMzh///+zMz///7MzOL///vMzP/AATMzf//+zMz/wAhmZn/AADMzv8AFMzN/wAAzMz/ACMzM4v/ACJmZov/ABQAAv///zM0/wAiZmb///8zMv8ABMzM/wAEzM2L/wAQzM3///szNP8ABMzN///PMzT/AAMzM///9zMy/wADMzSL/wBCZmYI/wBNmZr/ALjMzP//smZmB4v//72Zmv//9zM0///9mZn//88zNIf///szNP//+zMzi///7zMz/wAEzMz///szM/8AIZma/wAAzM7/ABTMyv8AAMzM/wAjMzSL/wAiZmiL/wAT//z///8zNP8AImZo////MzL/AATMzP8ABMzNi/8AEMzN///7MzT/AATMzf//zzM0/wADMzP///czNP8AAzM0i/8AQmZmCP//WzM0//8QMzMV+JYK/wJvszQE+JcKDvc4/wGbzMz/AYhmZhWL/wBCZmb/AAjMzv8AAmZo/wAwzMyP/wAEzMz/AATMzIv/ABDMzv//+zM0/wAEzMz//95mZv///zM0///rMzT///8zMv//3MzMi///3Zmai3f/AADMzv//3Zma/wAAzMz///szNP//+zM0i///7zMy/wAEzMz///szNP8AMMzM///8zMz/AAjMzv///MzMi///vZmaCP//UzM0B4v//72Zmv//9zMy///9mZn//88zNIf///szNP//+zMzi///7zM0/wAEzMz///szMv8AIZma/wAAzM7/ABTMzP8AAMzM/wAjMzSL/wAiZmaLn////zM0/wAiZmb///8zMv8ABMzM/wAEzM6L/wAQzMz///szNP8ABMzN///PMzT/AAMzM///9zMy/wADMzSL/wBCZmYI///eZmj//xUzMxX4lgr/Am+zNAT4lwoO9zj32eoVeouKk4qSipiBn3iLCH2BgHhvrX+xH6GLopecnKinnLuL2gj3Ywebk5SlHpUGjo2Mjh+LnImNBYtSiXRzS42LHoqJi3oFiI2Kjh6hBqSVhHkf+28H+w12bnEe/wA1MzT//5HMzRX4lgr/Am+zNAT4lwoO9zj/APiZmv8BiGZmFf//UzM0B4v//72Zmv//9zMz///9mZn//88zM4f///szM///+zMzi///7zM0/wAEzM3///szMv8AIZma/wAAzM7/ABTMzf8AAMzM/wAjMzOL/wAdmZqL/wAMzMz///8zNP8AImZm////MzL/AATMzP8ABMzOi/8AEMzM///7MzT/AATMzf//2Zmaj///+MzM/wACZmeL/wBCZmYI/wBKZmYH/wARmZqLn4eXewj/AFjMzv//kZmaBf8ACzM0///zMzP/AADMzP//9zMzi///9ZmaCP//9MzMB/8ACMzM/wAAzM6f/wAAzMz/ABTMzIv/ABZmaIv/ACczNP///zMzi4v/AATMzP8ABMzNi5v///szNP8ABMzN///qZmj/AAJmZv//7MzM/wAImZr///WZmP8ADDMzCP//iZmY/wCLMzQFh/8ABMzM///8zM6Pi/8ABMzMi/8ABmZm/wAEzMz/AAjMzv8ADZma/wAOZmYI/wBEzMz/AE8zNAX/ABgzNP8AG+Zm/wAdZmj/AAQZmqv/AAGZmv8ABMzM/wAEzMyL/wAQzM7///szNP8ABMzM///qZmj///8zNP//8mZk////MzL//+szNIv//+jMzIv//+GZmP8AAMzO///dmZr/AADMzP//+zM0///7MzSL///vMzL/AATMzP//+zM0s////Zmag///6zMy///CZmb//7pmZgj//93mZv//2WZm///ogAD///NmaP//5Zmaiwj/AEczMgeL/wBCZmb/AAczNP8AAmZo/wAmZmaP/wAEzMz/AATMzIv/ABDMzv//+zM0/wAEzMz//92Zmv///zM0///zMzT///8zMv//4mZmi///3MzNi///6zMz/wAAzM7//95mZv8AAMzM///7MzP///szNIv//+8zMv8ABMzN///7MzT/ADDMzYf/AAjMzf///ZmYi///vZmaCP8AgZma//5oZmYV+JYK/wJvszQE+JcKDvc4/wH6MzT3DhWLi/8AEmZo/wBMzMz/AAWZmP8AIZma///4zMyP///5mZj/AAGZmv//9zM0///9mZr///MzNP//0MzN///ozMz//9jMzP//zZmaiwhnBv//7Zma//////////TMzP8ADMzNi/8ADzMzCP8A1zMzB4v/AEJmZv8ACMzO/wACZmj/ADDMzI//AATMzP8ABMzMi/8AEMzO///7MzT/AATMzP//3mZm////MzT//+szNP///zMy///czMyL///dmZqLd/8AAMzO///dmZr/AADMzP//+zMz///7MzSL///vMzL/AATMzf//+zM0/wAwzMz///zMzP8ACMzO///8zMyL//+9mZoI//9TMzQHi///vZma///+Zmb///v//1P///2Zmv//+zMz///7MzOL///vMzT/AATMzf//+zMy/wAnMzT/AADMzv8ANMzM/wAAzMyLiwj/ADMzNP//dszNFfiWCv8Cb7M0BPiXCg73OPh++EAVh5H7koseeIeFeh56BoiJiYgfi3qMiQWLwY2iHv8AFRmYi/8AJTM0///+gAD/AAjMzP///5maVf//wuZm//+xMzb//9mZmv//qOZmi///qDM0i///sZmY/wAmZmb//8qZmv8APRmakv8AAGZm/wAcTMz/AAGAAP8AExmaiwijsYmLH4yNi5wFjoeNiWuFjakeiPeJ9xH7vQWNh4+Jj4uPi46MjZAI/wAFMzT//3PMzRX4lgr/Am+zNAT/AKJmZP8Ag0zQ//99zM7//11mZh+L//+3gAD//+WZmP//vbMy///UgAD//8yzNAj/AA5mZgeOh42IHm+LfIyKqwiE958FnoyQspCNjZAei5mJjSeJ+wH7sfsJ97EjjYmJi3oFiY2Jj6qWiHse+6EHbX+FbIiIiYge///wMzMH///UMzP/ADNmZv//5bMz/wBC5meL/wBJMzMI/wChMzT/AIHmaP8Ag5mY/wCiZmYeDvc496X/ANuZmhX3LAeL/wAnZmb/AAoZmP//+GZm/wASszR0CPdQ//8FmZoFl///8zMz/wAMzMz///szM5eLCP8ACZmY/wAIAAT/AAWZmpsf/wECZmYHi/8AQmZm/wAIzMz/AAJmaP8AMMzMj/8ABMzM/wAEzMyL/wAQzM7///szNP8ABMzMc////zM0///jMzT///8zMnOLc4tv/wAAzM5z/wAAzMz///szNP//+zM0i///7zMy/wAEzMz///szNP8AMMzM///8zMz/AAjMzv///MzMi///vZmaCP//amZnB4v//+pmZ////ZmY///yZmf//+czNP8AIZmZCP//SMzO/wD4zM3//45mZv8AAZma///+Zmb///2Zmov//+zMzAX///zMzP8ABMzN///+Zmj/AAJmZh7/AB5mZv///Zma/wAIzM3///ZmZJP///GZmgj//yTMzgeL//+9mZr///czNP///MzM///PMzP///zMzf//+zMz///7MzOL///vMzT/AATMzf//+zMyo/8AAMzOp/8AAMzMo4v/ABf//4v/ABzMzv///zM0o////zMy/wAEzMz/AATMzov/ABDMzP//+zM0/wAEzM3//88zNI////czMv8AAmZni/8AQmZmCP8AaTM0//8VMzMV+JYK/wJvszQE+JcKDvc4/wF6MzT/AdyZmhX4owr/AMpmZP//XmZmFf8AcZma//+kzM7/AEpmZiP//5DMzv//qmZm//+vMzT//4pmZv//kzMz/wBSZmb//7MzM/cA/wCDMzT/AEZmZOfzHv//NZmc//61zMwV+JYK/wJvszQE+JcKDvc4/wFoMzT/Aa0zNBX/ABmZmv8ACZma/wAKZmb/ACZmZv8ALzM0/wAZmZj//+dMzP//x+Zm///GTMz//+szNP//4OZoWx57i3f/AAJmZnv/AAZmZgj//6szNAT/ADszMgf/AA5mZv//+Zmam////MzOn4sI/wBrMzL/ACDMzP8ATMzMu/8AKZmac8P//45maB///+JmZov//95maP///mZm///qZmaL///dmZqL///r//7/AADMzv//3Zma/wAAzMz///szM///+zM0i///7zMy/wAEzM3///szNP8AMMzM///8zMz/AAjMzv///MzMi///vZmaCP//UzM0B4v//72Zmv//9zMy///9mZn//88zNIf///szM///+zMzi///7zM0/wAEzM3///szMv8AIZma/wAAzM7/ABTMzP8AAMzM/wAjMzSL/wAiZmaLn////zM0/wAiZmb///8zMv8ABMzM/wAEzM6L/wAQzMz///szNP8ABMzN///PMzT/AAMzM///9zM0/wADMzSL/wBCZmYInf//FTMzFfiWCv8Cb7M0BPiXCg73OP8BejM0/wHcmZoV+KMK//4UMzIE+JYK/wJvszQE+JcK/wAqMzL//hnMzBX/ABCZmv//6rM0/wAbGZpz/wAk5maLnoubkZ6YCIKXBYSHgomCi///4rM0i///9n/+/wAPMzT///SZmv8AE+Zm0/8AH8zN/wAlzMz/AEXMzIv/AExMzQj/AHGZmv//pMzO/wBKZmYj//+QzM7//6pmZv//rzM0//+KZmb//5MzM/8AUmZm//+zMzP3AB7/AA6AAIv/AA3mZv8AARmamP8AAjMzCA73OP8By2Zm/wGPzMwV///BmZr//+JmZv//6Zma///DMzQe///kzMz/AIGZmgb/AA8zNP8ACmZm/wAJmZj/ACmZmv8ALZman///6mZmWx7//4pmZv//TMzOFc//AAZmaAf/ADZmZov/ABCZmP//4Rma/wAKmZr//+h//wj/ABWZmlsF/wAVGZr//9EZmP8AFIAC///nszT/ACZmZouXi/8AF//8/wABmZr/AApmaP8ABZmZjf8ACEzN/wAATMz/AAdmZv//+OZo/wAITM3//+MzNIv///RMzP8AC0zN///wgAD/ACJMzQj//+TMzMcF///2Zmb/ABjMzv//6Zma/wAaZmb//+WZmv8AAmZmCP8AAMzOB/8ANZma/wAEzMz/ACpmaP8AIZmYi/8ANzM0i/8APzM0///jMzL/AB2ZmvsAi3eL///iZmb///5mZv//4MzMi///3Zmai3f/AADMzv//3Zma/wAAzMz///szM///+zM0i///7zMy/wAEzM3///szNP8AMMzM///8zMz/AAjMzv///MzMi///vZmaCP//UzM0B4v//72Zmv//9zMy///9mZn//88zNIf///szM///+zMzi///7zM0/wAEzM3///szMv8AIZma/wAAzM7/ABTMzP8AAMzM/wAjMzSL/wAdmZqL/wAMzMz///8zNP8AImZm////MzL/AATMzP8ABMzOi/8AEMzM///7MzT/AATMzf//2Zmaj///+MzM/wACZmeL/wBCZmYI/wAkZmj//xQzMxX4lgr/Am+zNAT4lwoO9zj/AekzNP8B42ZmFXeL///rMzT/ABGZmv//vzMyi1OL///BmZpri///vmZmi///xZma/wA+Zmb//+DMzv8AIMzM///wzMy////n5mb/ACJmZv//7bM0i///0mZmi///0Zma///qZmj//+mZmf//0MzMi///0zM0i///2//+/wAZmZr///GZmv8ARzMzCIH/AAOAAP//+EzO///9MzP///gZmv///bMz/wABzMz//8eZmv8AAWZm///hMzP/AAWZmv//5mZm/wALMzT/AAGZmf8ABZmY/wADMzT/AAmZmov/AA8zNIv/ABczMv//8mZm/wA9mZqL/wBHMzKL/wAtmZy3i/8ARMzNi/8APmZnQ/8AJZma///YzMz/ABDMzAj//+zMzP8ACMzM///FmZr/ABmZmov/ACZmZov/ACJmZv8AFmZm/wAWZmj/ACmZmov/ACczNIv/ACMzMv//5Zmal///zMzM/wAHMzT///2Zmv8ABzMyi/8ABzM0j4uj/wABmZqn///7MzT/ACDMzAj7A//+DWZmFfiWCv8Cb7M0BPiXCg73OP8BljM0/wDbmZoV/wDJmZoH/wASZmb/AAmZmv8AFzMy/wAWZmYe/wAaZmYG/wAiZmaL/wAKZmj///AAApv//8ZmZv8ACDM0///+TMz/AAdMzP8AAGZm/wAGGZj/AAOzNP//+mZo/wAmZmb///8zMK+L/wAjMzT///lMzP8AAkzM///5Zmj///+Zmv//+UzM///+GZr///5maP//+zM0///4zMz///mZmP//8zM0iwj//v8zNAb///MzMov///jMzv8ABmZo///+Zmb/AATMzP//+UzN/wABTMz///lmZv///4AA///5TM3///8zNIv//9zMzP/////////bMzT///mZmv//2mZm/wAHMzP///1mZv8ABzM0////gAD/AAczM/8AALM0m/8AOZma/wAJmZn/AA///q+LCP8AImZmBv8AFzM0k///6MzO///uZmYf//81mZoHi///vZma///3MzL///2Zmf//zzM0h///+zM0///7MzOL///vMzT/AATMzP//+zMy/wAhmZr/AADMzv8AFMzM/wAAzMz/ACMzNIv/ACJmZouf////MzT/ACJmZv///zMy/wAEzMz/AATMzov/ABDMzP//+zM0/wAEzM3//88zNP8AAzMz///3MzT/AAMzNIv/AEJmZghv//8VMzMV+JYK/wJvszQE+JcKDvc4/wH9MzT/AYRmZhX//5pmZgf//7szM4v//65mZ///lmZm//+qZmb///WZmv8ARMzO/wBKZmYe/wBszMwHi/8AQmZm/wAIzM7/AAJmaP8AMMzMj/8ABMzM/wAEzMyL/wAQzM7///szNP8ABMzM///eZmb///8zNP//6zM0////MzL//9zMzIv//92Zmot3/wAAzM7//92Zmf8AAMzM///7MzP///szNIv//+8zMv8ABMzN///7MzT/ADDMzf///MzM/wAIzMz///zMzIv//72Zmgj//4JmZgf7DP8ATZma///fMzTP9xD/ACDMzP8ARmZn/wB0zM0e/wBbMzIHi/8AQmZm/wAIzND/AAJmaP8AMMzMj/8ABMzM/wAEzMyL/wAQzM7///szNP8ABMzMc////zM0///jMzD///8zMnOLc4v//+QAAv8AAMzOc/8AAMzM///7MzT///szNIv//+8zMv8ABMzM///7MzT/ADDMzP///MzM/wAIzM7///zMzIv//72Zmgj7F//+bGZmFfiWCv8Cb7M0BPiXCg73OP8BOkzM/wGVmZoV///xszT/ACZmZv//9YAA/wAK5mj/ADGzNP8ABEzM/wAEzMz/AATMzIv/ABDMzv//+zM0/wAEzMz//+JmZv///zM0///pmZj///8zMv//3zM0i2+L///zMzT/AADMzv//4mZm/wAAzMz///szM///+zM0i///7zMy/wAEzM3///szNLn///qZmv8AAeZn///zzMr/ABBmZv//1zM0CP8AaUzN//75mZoF/wAFmZr///JmZv8ACMzM///tmZr/AA8zNIv/AA5mZov/AAWZmP8ACZma/wAJmZr/ABZmZgj/AG0ZnP8BBZmaBf8ADuZo/wAjMzT/AAjMzJ//ACzMzI//AATMzP8ABMzMi/8AEMzO///7MzT/AATMzP//7mZo////MzT///GZlP///zMy///rMzSL///iZmaL///szND/AADMzv//4mZm/wAAzMz///szNP//+zM0i///7zMy/wAEzMz///szNP8AKzM0///8zMz/AAPmZv//9mZm///vzMz//9czNAj//6qzMv//KZmZBf///zM0///9mZn///5mZv///ZmZ///9mZqL///+ZmaL////MzT/AAGZmv///mZm/wADMzMI///uMzT//zGZmhX4lgr/Am+zNAT4lwoO9zj4NfgpFYWeiZJ8i3mLhXl/XAhd+01I95IFmYyWnR6TBo2PjI8fi5uKjQWLVolrHv//7IAAi///5TM0/wABgAD///hmZv8AAGZm/wA0mZr/AEvMzv8AV5ma/wAxzMz/AGPmZov/AGRMzIv/AFhmaP//zmZowP//s7My///0szT///+zNP//8LMw////szL///SzNIsIcVyMix+KiYt6BYmNiY4enAacjIB7H0/7kgX//5IzNP//PczNFfiWCv8A/0zM/wHcTMwV/wAYgAD//9VMzP8ADeZo///OTM6LVgj//11mZv//e0zM//98gAD7Nf//XZma//9+GZj/AIOAAP8AopmaHov/ADwZmv8AEhma/wA35mSq/wAumZoI///yszQHiI6JkB6SBp2L/wAM5mZ7/wAEGZp8CNz7ugWNgpR1mougi5Ocj5oIufdRBY6UjZCOi46Lj4WNgQi/+08F/wADGZqA/wAI5mZ2o4ugi5WhjpUI1Pe9BZGhoJCei4uL/wACgACLjf8AARmaCA73OP8BUGZm/wHSzMwV/wANmZr/AAGZmgX/AAMzNP8AAGZm/wADMzKNi48Ii/8ADmZo///9mZr/AAJmZgWL//+4zMz///5mZnNz///UAAH/AAGZmose///+Zmb///2Zmov///DMzAX//////////MzM/wAGZmaJ/wAFmZr///+Zmv8AHhma///9mZr/AA9/////7MzOo///3MzMCP8ASmZo//+TMzIF/wACZmb///zMzP8AAMzM///+ZmiL///9mZqL///9mZr///8zNP///mZm///+Zmb///2ZmghD//+jMzIFZ///0Zma///rszOH///sTM3///2Zmv//+Bmaiv//++Zm///9zM2L///7MzMIi///8mZm/wACZmb///5mZgWL/wAnMzP/AAGZmv8AGMzNp/8ALMzO///+ZmaLHv8AAMzM/wABmZqL/wAPMzMFi/8AA//////+Zmb/AAHmZ4f/AACAAAh//wABmZkF///mGZr/AAN///8ACUzO/wAPTM3/AA1mZv8AE5maCP8ANmZm/wBMzMwFj/8ABZma/wACZmb/AAMzNP8AAZmai/8AAmZmi/8AAmZm///+ZmT/AAMzNP//+zM0CP8AMmZm//+7MzQF/wAVszT//+IzM/8ACbM0///xTM3//+PMzP//+7MzCP//9ZmY///+ZmcFh////2Zm///9mZr///4zM4uHCIv///DMzf8AAZma///+ZmYFi/8ANmZm/wABmZr/ACJmZv8AHZmY/wAuZmj///5mZose/wABmZz/AAGZmov/AA5mZgWL/wAFmZqH/wAA5meD/wAAszNv/wACZmb///PMzP8AAuZm///ZzMz/ADXmZwj//7JmZv8AbZmZBf///mZm/wACZmb///8zNP8AAZmai/8AAmZmi/8AAmZm/wAAzMz/AADMzv8AAZma/wADMzQI0+cF/wAgzM6z/wALgAD/AAjMzP8AIIAA/wACZmb/AAWZmP8AAGZm/wAEzMz/AABmZov/AAWZmgiL/wAPMzT///5maP8AAZmaBYv//9ZmaP///mZm///kzMz//+WZmv//1zMy/wABmZqLHv///MzM///9mZqL///wzMwFi4f/AAMzNP///szM/wADMzT///+Zmgj/AA2ZmP///mZmBf8AGhma///85mb///bmZv//75ma///yMzT//+0ZmghT//+xmZoF///8zMz///zMzP///Zma///9mZr///2Zmov///zMzIv///2ZnP8AAzM0///8zMz/AATMzAj//8zMzP8ATMzOBf//6GZm/wAigAD/AAmzNP8AALMy/wAUTMz/AAJmZgj/ACnMzvx2FfiWCv8Cb7M0BPiXCg73OP8Bxhma/wGbmZoV///J5mb//52Zmv///mZmi///xLM0/wBiZmYF///pszT/ACJmZv//9+Zk/wAO5mj/ADGzNP8ABEzM/wAEzMz/AATMzIv/ABDMzv//+zM0/wAEzMz//+JmZv///zM0///pmZr///8zMv//3zM0i2+L///zMzP/AADMzv//4mZm/wAAzMz///szM///+zM0i///7zMy/wAEzM3///szNLn///qZmv8AAGZn///vzMr/ABeAAP//2zM0CP8AThma+xSL///EzM4Fi///vZma///3MzL///2Zmf//zzM0h///+zM0///7MzOL///vMzT/AATMzP//+zMy/wAhmZr/AADMzv8AFMzM/wAAzMz/ACMzNIv/ACJmZouf////MzT/ACJmZv///zMy/wAEzMz/AATMzov/ABDMzP//+zM0/wAEzM3//88zNP8AAzMz///3MzL/AAMzNIv/AEJmZgiL/wA+Zmb/AEXmZvcQBf8AEuZm/wAgzMz/AAZmav8AFmZo/wAszMyP/wAEzMz/AATMzIv/ABDMzv//+zM0/wAEzMz//+5maP///zM0///xmZj///8zMv//6zMyi///4mZmi///7mZm/wAAzM7//+JmZv8AAMzM///7MzT///szNIv//+8zMv8ABMzM///7MzT/ACszNP///MzMk3///+oZmv//2ZmaCP//tBma//5VMzIV+JYK/wJvszQE+JcKDvc4/wEZMzT4fhX//+ZMzf8AABma/wACGZn/AAhMzn3/AALMzP///hmai////rMy////f/6L///+GZr///8zM2eH///eZmj///jMzf//2MzMCP8AFMzN///9mZoF/wAQzMz/ADmZmv8AGzMy/wARmZj/ABczNIsI/wB0zM4G/wAMszSL///4MzD///QzNP///LM0hgj//y2Zmv/+0ZmaBf///MzN///7MzP///2ZmoeL///7MzMI///7MzP/AAMzM////MzN/wAIzM0e/wESZmgG/wADMzT/ABjMzf8ACMzM/wAlmZn/AA2ZmP8ALmZnCP//6mZo/wAFmZn///WZmP//6MzNBf//7Zma///VmZj///JmZv//6mZn///RmZqLCP//oMzOBv//7LM0////////AACZmP8ACMzN/wAHgAD/AAszMwj/AMZmaP8BIZmYBZf/ABDMzP8AAzMw/wAFmZyL/wAGZmaL/wAEzMz///szNP8AAzM0///zMzSL///3MzSL///yZmb///2Zmv//7MzMhwj//6XMzv/+B5mYFfiWCv8Cb7M0BPiXCg73OPg998cVlwq2+yQVnouel5SV/wAAmZiT///8szT/AAVMzf//+LM0/wACszOI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////gACL///9gACLiQh5B4v/ACUzNIz/ABfMzP8AGJma/wAmZmaKix6dB4uPiP8AAMzNif8AADMzCIOMBf//7rM0/wACMzP///hMzP8ABEzNi/8AFIAACPeNB7WNpYsekImNhR57hF2DcYkIjHkFiY2KjR6gigWYkYRhH/8AGDM0//5AzMwV+JYK/wJvszQE+JcKDvc49434JhX/ABszNI3/ABDMzIsekImNhR57hF2DcYkIjHkFiY2KjR6gigWYkYRhH/saB4t2iv///WZmc////JmaCISKBYb///9MzYv///2zM4uJCHkHi/8AJTMzjP8AF8zN/wAZszP/AChMzYqLHp0Hi4+I/wAAzM2J/wAAMzMIgIwF///wgAD/AAFmZv//9oAA/wADmZqLoQj3IweeoqChoIsIqp96WB/7DAeL///pTM3///qZmv///ZmZ///rZmb///4ZmgiAigWI////szOK///9TM2LiQh5B4uyjKT/ABgzNP8AJczMiosenQeLjf///+Zm/wACMzP///sZmv8AAMzNCIWMBXj/AAMzM4T/AAKAAIv/ABVMzQj3FgeLkf///8zM/wAFszT///+AAP8ABUzM/wASGZr/ABWAAP8AE8zO/wATgAD/ABPMzIsIqZ96WB/7DAeLdIX///2zM3j///5MzQiAigWH////mZqK///9ZmaLiQh5B4v/ACeZmIz/ABlmaP8AGDM0/wAlzMyKix6dB4uN///+5mj/AAJMzf///BmY/wAAszMIhYwF///tGZj/AAMZmv//+OZo/wABMzOL/wAWszMI9xYHzm2kXh7//9xMzIv//9xmZv//3Zma///xszT//+7MzP//9hma/wAk5mb//+azNP8ADrM0///czMyLZ4tqaH16CP8AfzM0//5fzMwV+JYK/wJvszQE+JcKDvc4+Ez3iRWLYomIaYmHg4t9j4SpjJKLo4v/ACNMzIv/AAWzNIupio+RjJqGk2ONg46LtAj0B85upF0e///cGZqLaP//3RmafXr/AABmZv8AF7M0/wABgAD/ABUzMouLi5CJjYWLe4Rcg3GJioOMhI+F/wAgZmb///6AAP8ACpma/wAEszSL///KzMwI+wEHi2KDiGOJhoOMfI+FqYz/AAWzNIv/ACNMzIuji5OLqYqPkouZh5NpjYiOi7QI9woHnqKgoaCLCKqfelgf///CMzT//pzMzBX4lgr/Am+zNAT4lwoO9zj4DPhQFfh2CtH7NhX4gAr//7wzNP/+1szMFfiWCv8Cb7M0BPiXCg73OPe++B0V+5gHi3f///2Zmv///DMz///pZmb///zMzQiEigWH////ZmaK///+mZqLiQh4B4uwjKOls4qLHp0Hi4+J/wAAszOI/wAATM0IgIwF///xGZr/AAFmZv//9eZm/wADmZqLoQjvB5l/n4OfiwjMwcfVz2PHUR9ui///44AAb///8IAAeQiJjAX/ABszNI3/ABDMzIsekImNhR57hF2DcYkIjHkFiY2KjR6gigWYkYRhH7wyFe0HmP8AEoAApP8AF4AApIsIp6dnQi5iiHR1api/H/8AHzM0//7AzMwV+JYK/wJvszQE+JcKDvc4+C73nRX4qAqpyhX4qQr//8IzNP/+GczMFfiWCv8Cb7M0BPiXCg73OPgJ+A4ViYwF/wAbMzSN/wAXzMyLHpCJjYUee4Rdg3GJCIx5BYmNio0eoIoFmJGEYR/7GweLeP///hma///7TM3//+jmZv///rMzCHmKBYaKiYgfeQeLuIynqLiKix6dB46IjYkeeYwF///s5mb/AAEZmv//+Rma/wAD5maLnwj3EgeLk4+Uj5CbopqXkouPi5CJj4eRhJOHl4sInZaUnJ2BmHAfbItwaXpyCP8ABTM0//52zMwV+JYK/wJvszQE+JcKDvc496r3mxWOa41ri3ORjJWMjoufi6F9qYuti82bi8iLvV2eWKBpmYGUi6MIpqCYpB6ei62BmVEIooyC1gWAkmSVbItai15ri2GLXv8AHxma///wTMz/AC3mZv//7LM0vXaTd4t2i3BzgHOLdIt4l4SRCHubhaaKmQj/AE4zNP/+6czMFfiWCv8Cb7M0BPiXCg73OPgQ+AQVxgaQlI2QH50HjYmNiB5H6gZlfouABVyBc2KJi4qJHnMHiYyLjR6z+0sGX6B6qB6ni6KTpaYIe5wFe3+BhnuLCHqHnbEf///+MzT//xnMzRX4lgr/Am+zNAT4lwoO9zj4cfeGFYv3UoqMBYt9ioL//+ZMzP//17M0jIseioqLegWHjoqOHpUGnJSHdR/7OAd4dXWIdosIbXebvh+L9z6KjAWL///ymZqK///3Zmb//+fMzP//2jM0jIseioqLegWJjIiPHpIGnoqRiotzCPsYB0ipcrgesIuum5mcCI2LiWqbiwX/AAxMzP8AB7MzqpX/ACezNP8AB0zNCImdbI4FfYyIjYusCP//nTM0//7+zMwV+JYK/wJvszQE+JcKDvc49/L3MhX4qgr/AG0zNP/+jczMFfiWCv8Cb7M0BPiXCg73OPe2+BkV934K/wBYMzT//mvMzBX4lgr/Am+zNAT4lwoO9zj/AcYzNPgFFaf/ACPmZv8ABLMy/wAETM7/ABwZmv8AAczMj4+LmYePeYqEinSLc4t8jHmMh4eLfY+HqIr///4zNP//98zM///yzMz//+0zNAhiUmfEBX+fi5KojI+Pi5mHj3mKbopzi3SLgYx5jIeHi32Ph/8AHBma///+MzT/AAEZmP///ZmY/wAamZr//9ozNAj/ADgzNDsFiIj//87MzFGLi///4Zma///cgAD///2zNP//+0zN///j5mb///4zM4eHi32Ph52Mkoyii6OLm4qdio+Pi5mHjwhujIyUmZ0Is72rWQWXeI6DboqHh4t9j4edjKWMo4uii5qKnYqPj4uZh4///+PmZv8AAczN///5mZr/AALmZv//5bM0/wAlTM0I///LzMzVBf//6DM0//7CzMwV+JYK/wJvszQE+JcKDvc49//4RRWLm4qNBYtZiW54b42LHomJi3sFiI6Jjx6mi/8AA8zM///15mb/AAszNP//5hmaCNb7QgWRfpB6i4aLhYmFiIN8ZYR7g4uFi4aQhpGGkIaOgYsIgXiCeXSrgZYft4uUoZ63/wA0GZr/AHiAAP8AGeZm/wBBgACs0ZSdl5+jiwiPjY2OH4ubio0Fi3GJenRijYseiomLewWJjYiOHo4GmpaJgR+LiIqEiYYIRvstSfcwBYqPipGLjgiSko+djo+Njh7/AA8zNP/+P8zMFfiWCv8Cb7M0BPiXCg73OPfI+EMV+KsK///QMzT//kHMzBX4lgr/Am+zNAT4lwoO9zj4Dvh6Ff8ACmZmi/8ACczM///8szT/AAcZmv//+YAA/wAS5mb//+/MzP8AEMzO///RszSL//+tgACL///HgAD///4Zmv//2P/////3mZr//+DMzf//8kzM///NTM1t///5gACAiwj//8bMzP//+YAA/wBqmZr/ADVMzf8Al4AA/wAlszT/ABtMzKcf///9Zmb//pfMzBX4mgr/AALMzvshFfiWCv8Cb7M0BPiXCg73OPgO+RoV+KwK0/t9FX6LbYJ9hAiBpgW6nKWXt6YIm/uZBnWWfJkepwaOjoqHH3YHi1aMamVPioseoAeNj46OHq8Gm5maoR/3LAeriZV/HvtqFvitCg73OPgO+RoV+KwKp/uiFX99lpimp77avcV3TB+LXWppU2NhbXNui20I3Aaqi5uxlqgIo4UFgm2EaIhuCPtiBou7trW7sf8ALLM0/wAjZmb/ABZMzP8AFpmai8EIumiYeWCAfH0ei4OQg4uDCHt5g4Ee+0ewFfiuCg73OPgO+RoV+KwK9yL7fRWqdpR3HneLaYGKcop/iXp0iwh4h5qOnKjA4r+sdWYfi251dG57rIi6cItRCEZJXTtmV5uglZiVlh6Zi5GEkYSTgZWDq4sInsSY0MRVknMfhIuGioOKCImjBbeRqaWLtAj7vxZ+i26CfIQIgaYFupyml7amCJv7mQZ1l3yYHqcGjo6Khx92B4tWjGplT4qLHqAHjY+Ojx6uBpyYmqEf9ywHq4mVfx4O9zj4DvkaFfisCvcs+5EVIsEHiWhXi4taBXiPhZ0emwaPjIiJH3cHi2CMcHNmioseoAeMjI6PHpkGnZCOoB+9+yQHh5f3LvduqYIFXkVQOXRpCObXBouSkJONjpKUl5eSiwiQk4mDH/u6nxX4rQoO9zj4DvkaFfisCvcu/CAVqIjGQx52i3aFfIMIho+g9yL3LYuGaouK+xGLfzoFlJCkkJqLCNivV1VQW1VFaU+Zo5eXlJUfmYuShJODlIKWgaGLCLicsLUf+8X3NxX4rgoO9zj4DvkaFfisCvcw/CYVoYbCUh59i3aFdXoIeAc3snSnt5OusB7DkBVnb0o7WkOo8x6L3cXy9y2XCHcH+wF4aEmAUJmappukiwjslTx6H/v29zgV+K0KDvc4+A75GhX4rArK+2cVcIuDhIBbCHWOBZCnkrOMpgidBoaQipse90IGVjBS+w5sIghpBq73A8P3EKW5CPvBdRX4rQoO9zj4DvkaFfisCvP7UxVudH1uH4t7k3WvdwifgAWblaKmi6kIpnydZx7qXhX4rwolKRV7gmNji2kIX7R7orConLQei6SGpGOfCPug9wgV+K0KDvc4+A75GhX4rArH+50VdY9UxB6Zi6GRoZwIngffZKJuX4RoZh5ThhWvp8zavdVuIx6LOU8k+y5/CJ8H9wKerc2Xxnx8cHtyiwgrgdqcH/sosBV/i22CfIQIgqYFupyll7amCJv7mQZ1l3yZHqcGjY6Khx92B4tXjGllUIqLHqAHjY6Ojx6vBpuZmqEf9ywHq4mVfh4O9zj4DvkaFfisCvcQ+1YVTIotVlOTPcHGkdjYwXzUWx+I+8UVRlja4OjC1M/Fy2L7DfsLSVpQH/vn93kVfn6WmKanvtq9xXdMH4tdaWlUY///1kzN///hmZr//+ezM///42Zmi20I2wari5uxlqgIooUFg22EaIhuCPtiBou7trW7sf8ALLM0/wAjZmb/ABZMzP8AFpmai8EIumiYeWCAfH0ei4OQg4uDCHt4g4IeDvdK/wGhgAD/AOtmZhX/ALlmZgeL/wAjGZr/AACzNP8AI7M0jP8AB5mai/8AAszM///+gAD/AAAZmomL///fmZr//+vmZv//4UzM///xmZr//8yAAHP/AADmZv//+UzM/wACmZj///qAAP8ABTM0///8Zmb/ABqZmv8ACxma/wANMzT/AAOZmv8ACxmaiwj/AAmzNP8AAf/+///x5mb//+wZmh///1LmZgeL///PZmb///YZmv///RmbYv///jMz///8gAD///yAAIv///OzM/8AA4AA///8gAD/AByzNP8AAJma/wARmZj/AACZmf8AHTM0i/8AHBmai/8ADhmY////Zmf/AB0zNP///2Zm/wADgAD/AAOAAIv/AAxMzf///IAA/wADgABi/wABzM3///YZmv8AAuZli/8AMJmaCP//4eZm//8FmZoV+LAK/wKW5mgE+LEK//2rGZgE+LIK/wIUTMwE+LMKDvdM/wEg5mb/AaYzNBX///RMzP8ACpma///2mZr/AAuzNP8ACWZm/wAQTMz/AAuzMv8ACoAAHov/AASzNP///uZo/wACTMz///7MzP8ABBma///+zMz/AAQZmv///Rma/wAEszKL/wAEszQImf8ACLM0/wAT5mb/AChmZv8AE+Zm/wAh5mb///HmaP//yszMHov//9xMzP//8zMy///jZmb//98zNP//3rM0CGL//9eZmgX//8mZmv//yGZm///3TM7//+WzNIv//98zMwiL/wAcszL/AAEzM/8AEYAAHv8AYIAABv8AEYAA/wAZzM7///7MzYsfkv8AHTMz/wAF5mb/ACozNP8AAJma/wAQZmb///yAAP8AAuZm///4//7/AACZmf//+rM0///+zM3///aZmv//2MzN///2GZr///KZmv//7Bmaiwj//52zMgaL/wAaTM6x/wAlgAD/AALmZv8AAuZmCP8AN5ma/wA1zMwF/wAfgAD/AB6AAP8AGBma/wAYgACL/wAqGZoI/wA7szT//8oZmv8AGIAAXv//wpma///fMzL//9JmZv//3rM0Hv8AYoAA//5KzMwV+LAK/wKW5mgE+LEK//2rGZgE+LIK/wIUTMwE+LMKDvdK/wF8GZr/AeTMzBX/ABiZmv8AFjMy///ymZr//92AAB+L///lGZr//9/Mzv//1Jma///OTMz///hmZgj/AAJMzP//7oAABf8ACWZm/wABMzT/AAeZmouSiwj/AB+ZmrGB///BZmb//7ZMzf//zuZm///vGZn//+yzNB///+PmZov///qzNP8ADOZn///5mZr/AAnmZv//+rM0/wAHmZr///hmZv8ABmZm///05maLCP//9EzM///0TMz///WAAP//9zMz///pzM3/AC7maP//8WZm/wAhTMz/AEIZmv8AOoAA/wAsZmf/AEkZmh+L/wA8gAD//9UzNKL//99MzP8ABYAACP///2Zm/wABGZgF/wA0mZr/ACFMzI7/ABkzNIv/ABKzNAj/ABdmZv//6uZm/wAjszT//8dMzP//rrM0///omZr//8ozNP//7eZm///4Zmb/AAUzMv//9OZm/wANgAD/AA/MzP8ABczO/wASGZr/AAqAAP8AI7M0/wAmGZr/AAb//v8ADpmaHv8AB0zM//4MMzQV+LAK/wKW5mgE+LEK//2rGZgE+LIK/wIUTMwE+LMKDvdK/wHgGZr/ARfMzBX//9EzMv8AX2ZoBv8AC7M0////Zmj/AAZmZP//+GZmHv//9zM0i///9X/+///6zM7///mZmv//+0zM///6szT///0Zmv///2Zm///7TM6L///75mYI//+kGZj//5fmZgf/AJNmZv8A1+ZoBf8AAczM/wAC5mb///7Mzv8AA4AA///8gACLCP//8MzOBv///EzMi////Rma///8zMz///4Zmv///WZmCP//ZmZm//8mZmgF////Zmb///9mZv///4AA////ZmaL////Zmb/AAGAAIP/AAUzMv//8Jma/wAQszSLCP8AcpmaXgaL///mZmb//+szNP8AAQAB///oZmb///4zM////IAA///8gACL///zszP/AAOAAP///IAA/wARmZr/AACZmv8AFhmY/wAAmZn/ABkzNIv/ABWZmouc////Zmf/ABGZmv///2Zm/wADgAD/AAOAAIv/AAxMzf///IAA/wADgAD//+TmZo3///YzMv///pmZi/8AGczNCLj/ACczNAf/AAeZmv8ACDMy/wALMzT/AAZmZv8ABUzM///9mZr/AANmZv//+jM0H///o0zM//7ZMzQV+LAK/wKW5mgE+LEK//2rGZgE+LIK/wIUTMwE+LMKDvdK/wG2szT/AQ2zNBX//8tmZv//5GZk///ZZmb//96zNB7//+rmZov///iAAv8ADWZm///3zMz/AAsZmv//+Rma/wAJZmb///aAAP8ACMzN///0TMyLCP//9YAA///1Zmb///aZmv//9OZm///pMzP/AC9mZv//7UzN/wAfmZr/AERmZv8AMJma/wAy5mf/AEWZmv8ANczM///bGZq7TR9zi///64AA///7TM7///YZmv//++ZmCP8ACzM0/wBcZmYF/wAUgAD///2zNP8AEhma///9mZj/ABpMzIv/ABBmZov/ABKzNP8AAJma/wAWzMz/AAJMzAj/AAjMzP8AJhma///8gAD/AAGzNAX//+BmZv///IAA///hgAL///2zMv//4szMi///64AAi///7BmY/wABGZz//+yzNP8AAczMCP//7UzO//9gTMwF/wAdMzT/AAsZmv8AFRmY/wACZmb/ABPmZosI/wAkTMz/ABwZnHP//8OzNB///8yzMv/+40zMFfiwCv8CluZoBPixCv/9qxmYBPiyCv8CFEzMBPizCg73Sv8Bg2ZmfBX4sAr/ApbmaAT4sQr//asZmAT4sgr/AhRMzAT4swr//8AzNP//GbM0Ff8ADszM/wAyZmb/ACMzNP8AOBma1f8AG5mai/8ABmZm///+MzT/AASzNP//+0zM/wAC5mb//8fMzP//75ma///dzMz//+jmZv//4Rma///cGZr//92zNP//2DM0///vGZr//82zMov//9QZmgj//4+zM/8AQ8zM///pzMz/ACqzNP8ASIAA/wAdTMz/AEYZm/8AL2Zm/wAvZmb//+izNP8ALbMy//+0gAAe///vszSL///mzMz///qAAHr///azNAj///rMzP//6oAAFZ+b/wAVgAD/AADmZv8ACoAAiwj/ADZmZv8ACoAA///H5mb//+SAAP//wzMz///omZr//+SAAf//5Rma///c5mb//9xMzv8AEpmZ/wBezM0fi/8ADBma/wABMzL/AA4zNI7/AA9MzAgO90r/AWszNPhiFf8AYIAABv//1LM0//+UZmb//9QZmP//lEzN///amZr//6vMzQj/AAQZmv///IAAsf8AAbMzBf8AH5ma/wBeMzL/ACDMzP8AW+Zoyf8AluZmCP//9zMy/wAGZmYF///2mZr///0Zmv//88zO///9GZj//+rmZosI//+N5mYG///tMzSL/wABgAD/AAWZmv//9czMjf///pmai////xma////mZqL///+mZr///9mZv//5bM0///6MzT//96zMv//+0zM///jTMwI/wARgAD///4zNAX/AAxMzP8ALIAA/wASzM7/AAOAAP8AEYAAiwj/ABgzMvxxFfiwCv8CluZoBPixCv/9qxmYBPiyCv8CFEzMBPizCg73SvgY+H4Vr55ucR+LbWhxfIAIepUFaKKDn4ucCKWgpa0e5FQVs2uoVVJlaWEei2ubdq10CJSFY2sFdXeCcot1CFKzbMbTrcG2HourfaRunghqogWjm7Oni68ILvuYFXFjob0fi5uWsrqrCKV7Ba92mnGLcQhTX31yHv8AA2Zm+1IV+LAK/wKW5mgE+LEK//2rGZgE+LIK/wIUTMwE+LMKDvdK/wGDZmZ8FfiwCv8CluZoBPixCv/9qxmYBPiyCv8CFEzMBPizCv8AQxma+6YV///xMzT//82Zmv//3MzM///H5mdB///kZmaL///5mZr/AAGzMv//+0zM/wAEszT///0Zmv8AODM0/wAQZmb/ACJMzP8AFxmb/wAe5mb/ACPmZv8AIkzM/wAnzMz/ABDmaP8AMkzOi/8AK+ZmCP8AcEzO//+8GZr/ABYzMv//1UzM//+3gAD//+KzNP//uczM///QmZr//9CZmv8AF2Zm///SZmb/AEuAAB7/ABBMzIv/ABkzNP8ABYAAnP8ACUzMCP8ABTM0/wAVZmgVd3v//+qAAP///xmY///1gACLCP//yZma///1f/7/ADgzNP8AG4AA/wA8zMz/ABdmaP8AG4AA/wAa5mb/ACMZmv8AI7My///tTMz//6EzNB+L///z5mb///7Mzv//8czOiP//8LM0CA73VP8BSoAA/wDrZmYV/wC5ZmYHi/8AIxma/wAAszT/ACOzNIz/AAeZmov/AALMzP///oAA/wAAGZqJi///35ma///r5mb//+FMzP//8Zma///MgABz/wAA5mb///lMzP8AApma///6gAD/AAUzM////GZm/wAamZr/AAsZmv8ADTMz/wADmZr/AAsZmosI/wAJszT/AAH//v//8eZm///sGZof//9S5mYHi///z2Zm///2GZr///0Zm2L///4zM////IAA///8gACL///zszP/AAOAAP///IAA/wAcszT/AACZmv8AEZmY/wAAmZn/AB0zNIv/ABwZmov/AA4ZmP///2Zn/wAdMzT///9mZv8AA4AA/wADgACL/wAMTM3///yAAP8AA4AAYv8AAczN///2GZr/AALmZYv/ADCZmgj/AJwzNP8A+0zOFf8ACWZmi/8ACMzM///9GZj/AAZmZv//+hmanP//8WZm/wAPGZz//9ZmaIv//7WzMov//80Zmv///kzI///c5mb///hmaP//4+Zn///zszT//9JmZ3D///ozMv//9hmaiwj//8yAAP//+jM0/wBf5ma7/wCITMz/ACHmZv8AGJmc/wAZMzQf///9szL//rvmZhX/ACqzMv8AQEzQ/wAsZmb/AIHmZh+Lwv//8zMw/wAsZmb//+dmaP8AIDM0ev8AFszM///m5mj/AA/Mzv//5szMiwhU///L5mb//73mZv//kpma//+mgAD/ACozMv//sIAA/wA+mZofKv//TmZmFfiwCv8CluZoBPixCv/9qxmYBPiyCv8CFEzMBPizCg73OPgO+RoV+KwK+1YETIktVlOUPcHGkdjYwXzUWx+I+8YVRVna4OnB09DFy2P7DfsLSVlQHw541PhCFfxC+EL4QgcOePcE+CAV9/T7/vv0BmT4IBX8QvhC+EIHDlX4hq8V+3j4Hvt2/B4FDlX4WckV/ACL90r3zwX3d/voFft3+B37d/wdBQ421IIV+B73ePwe93YFDjburxWL+AD3z/tKBfvo+3cV+B33d/wd93cFDlW3+EEV93j8Hvd2+B4FDlXk+CkV+ACL+0r7zwX7d/foFfd3/B33d/gdBQ42+Er4UxX8Hvt4+B77dgUONvgw+CYVi/wA+8/3SgX36Pd3Ffwd+3f4Hft3BQ7S/wAcmZr/ANazMxX4tAoO0v8AUDMz/wDaMzMV/wD45mf/APjmZ/8A///++5T//wcZnP//BxmZBf/+zGZm/wD8f/8V+LQKDmz3RvdwFVO5XcPEubnDxF25UlNdXVIe8/t/Ffi1CvhNBPi2Cg7T9xH3ZBX3XPee91v7nvtb+50F+5f3nRX3l/vt95b37fuW9+4FDmx8pfgzpQG8pfgzpQP3rnwV+LUK+E0E+LYKDmz3rnwV+LUK+FgE9w3sKvsN+w0pKvsM+w0q7fcM9wzs7fcNH/wrBPTh4PX0M9okJDQ8IiLgNfQf9/8E69o9Kyo8PSsqPtrr69nZ6x8ObPeufBX4tQoObPeufBX4tQqlBPgzB/cH6C/7B/sHLS77Bh8ObPeu+FkV+xUiIvsV+xX0I/cV9xXz8/cV9xUj9PsVH3EE/DMH+wcu5/cH9wfp6PcGHw5su/d2FfsV9CL3FfcV8/T3FfcVI/P7FfsVIiP7FR6lFvgzBvsHLy77B/sHLun3Bh4ObPiY92gV9xUi9PsV+xUjIvsV+xXzI/cV9xX08/cVHnEW/DMG9wfn6PcH9wfoLfsGHg5s9658Ffi1CvhNBPtj92QH+wctLvsG+wcv6PcH9wbn6PcHHg5s9658Ffi1CqUE+wcv6PcHH8z3IoqLH/dkB/cH6C/7B/sHLS77Bh8O+4T3rnwV+GcH+xUjI/sV+xXzIvcVHw77hNT4WRX8Zwf3FfPz9xX3FSP0+xUfDvuI9Kr3VakBvKn3VakDvPd+FUPEUtDZvMvJ00/DSEpOU0YeqRa/ura8vrlgVFxlW1BXX7bCHg6a91b3VhVD+1z3RvcQ9z77D0r3WPc79wj7YYtM91VF+1X7V4sFDuzNvfcO7fcOvQH3Eb33Du33Dr0DFPz3EfezFfsG5CD3GvcJ8ez3EPcAOPcF+x37FC0l+wse93H3PxX4twpa+z8VcKF1pqahoaamdaFwcHV1cB4O+JP50vcPFYt+iX+GgW9c///bszT///VMzf//9EzM///8szP///hMzP8AErMz///4szT/ABVMzYuei7S2oIusi6h7jYGLgouBiYOICP8ADLM0opKN/wAgTMyLlHO6hos7CPvq9wgVyF+xcMGLnYubj5eQhIGFgIt7i1alWZV6//+45miL///oGZj/AFGAAIv/ACWAAIuQjJGMjwh7e1dqbouEi4KRgZOTiZSKlIsIn5GTmKJ4kX8faIv//+rmZv8ACUzN///ZGZr/AB2zM3qY///ygACX///5gACRmI6jpZyfCIu6tquanZGil4WVdh5/i36HgYiQk56bqoubi6h+qHiKkIuQi5EIyrGbth6ViQV8cHVgi1yLe5J+k4F6k3iNgotXi2VyTlwI96/GFYusYKCLs4uekp+Snv8AHrM0///2mZr/ADYZmP//5IAAi///w5mai///xkzM///QGZz//+OAAP//+xmY///ygAD//92AAIv///yAAP8AAIAAfP8AEYAAkomTiZKLCJebjagf/M9SFZqZnZKii6CLnYOefXp7doB0i3mLeJZ7nAj31fuMFZlor0qbdLRRtm+2cY3Boa2np5iY/wApszT/ABezM/8AI0zM/wANTM3Z/wAdTM3G/wAWszOL9wOLy12+YKkIs4X3H16Lr1Khw6CLrvseY2KGiosFnZiXlJKTnZyx/wAlgACL/wA+gACL/wBWmZr//7qzNP8AKQAC///ImZj/ABDMzP//4kzMlP//3GZo/wAPzMxz/wAOzMxnoF7Sh7VDUk8/ZDYIdf8ACYAAZP8ADYAAYYsyi///o2Zm//+5szT//+CZmv//4UzMCPtN+0n3UPtGBf8AKBma///aGZr/AFnmZv//zuZm4ouui7SYm5II9wn3rBWyoXGFgnVwZh9ni3KXcaGmn56ZsosIv/d3FZadkaQfkgeSg46Bi4KLgYmFg37///dMzP8AAUzM///1szT/AACzNIKLPIt7WYd0epVyjnmLeIt2gn1/CG+KBYyRi4+LkAidf4+BgHOEbh6Lf5GDkoePiJaLmYsIoQb///SAAP//5zM0///ugAD//93MzIOAenBvcX2LhYt6kn6RipGLkYuXCJ6PjpCSjoh4HouHi4iKhv8AA8zM////gAD/AAQzNP///4AAjouPi6CRi6CLqF6Pi6OLlP8AAoAA/wAOgAD/AAOAAP8ADYAA///HgABt////gAD//9YzNIv//9XMzAh/jn2OgItfi///6DMzdP//5szNcaVyq26wi5yLkY2XkYv//9szM/8AAszM///JmZr/ADczNP//5jMz///8gAD/AA6AAP///IAA/wAQgACLlQiLo7iOi6qLnXmShov///szNIv///2ZmP///4AA///7MzT///6AAP8AATM0h/8AAMzMiIuHCP///5maif//64AA///2gAD///gZmv///2Zm/wABZmb/ABSAAB6Llf8AADM0/wAHzM3/AADMzP8ABjMzmI6ZjpGLn4v/ABfMzP//4DMz/wAtMzT//8TMzQh7BnR3iHJvp4KS/wANMzT/AAizMv8ACZma/wAOMzMfi/8ABLMz////5mb/AASzM////zM0/wAEzM0IpYoFln+ZgpuLqYuml6SbCIUHi3L/AA8ZmGr/AA3maHv/AAWzNP//+YAA/wAeTMz//9+AAMGLj4v/AAGzNIv/AAVMzIyPgJCEi4CLgoeBhYMIkQeleJGBeIN9fR6LiIuGjIcIcY0F/wAJszT///FMzf8ADEzM///wszOni7+LmKyLrouTipOKk/8ADUzMj/8AMmZo/wARszP/AB9MzP8ANkzNl36qfZSLCKGYn6aZf590H3uL/wAFszR6///yTMyLh4uHjImLiIuIioqKCJYHi5mLvVa8CKEGwXbbX4s7i2iDaHZ3c///6Zmaav//8RmZ///dTMz///PmZ///2eZo///yszJm///vAAH//+bMzP//5LMzcW55aYV2aaH//9qzNLH///JMzKEIav8ANTMz///gszT/ADXMzf//9kzMs2aAjXpIiz6L//+4Zmb/ACBmZv//zZma/wAvmZoI+zP3Kvcv9y4F/wBMszT/AExMzP8AQkzM/wARszS/i7yLqYaxc6DCyvLEupz//9uAAJ7//9+AAKd0pf//64AA/wA0mZz//+nmaP8AJRmY///xmZj/AENMzHGq///TzMyL///RMzQIi///x5ma///SzMz//8xMzP//rTM0///eGZoIdwaPjrm1i8mLkYuQipH/AB6AAIv///FmaHv/ABIZmIsIoZicnKZ+n3Ufg4tvfn5/fJ9rp1mXjpWMk4uUi8BllnCLb4v///JMzP//77M0///3szT///JMzAiljQX///6zNP//+0zM////TMz///yzNIuHCH6TfJ4eDvgm190Vg5OElpWUkpOTgpKBgIOEgx740vdvFfcZnvdSbYvFi7T7Kf8AA2ZmJ/8ABZmaMpD7H51zi3yLPXNIaG18WYh3iwiCBm5pfFqLT4tXlWOgbZiI5ISahNdewYOki8CLzZPBo6GTlpqLngiLoXqFhZakk5eYi5+LoXGfi4uqm5mci5+LnH2dZp8I/JUrFamc9xm6Ho+LkIeRiAiNjQWGmIKSfYuJi4mLiYoI+y6Ai4L3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pJMIdq4VsZuL90RaiAX3H/fdFY2NjY2OjYmJiImJiImJjY4eDvtQ92D4RBWspHVjZGt0cW1vqKyspqiqH4D7uBV12mPTK4yHi4eIiIWLXrdtlYDFSMOcjPsm/wAAGZp8/wAG5maGj4uSi46Ri5kIjvcpt3jQyqupoKaLq4eTho2Ki0KKVEVsOQj3Hge3kLOti8EIw12xW1ViYFgei1ewZbqICA73hl659wK69+q9AcW99yPBob3UvZ/B9yW9A/eN9wMVjfsCIYuLXfaLjfsOuouO9w72i4u5IYuO9wIF/wAomZr/AAWAAP8AI4AA/wAPgAD/AB0Zmv8AFhma/wAcMzT//+pmZv8AIv/+///wZmb/ACmZmv//+hmaCI37AiGLi132i437DrqLjvcO9ouLuSGLjvcCBfcJm9bti/SL9wA49wT7HYv//8vMzIv//9GZmv//74AA///bZmb//+RmZv//3LM0/wAbGZr//9LmZpz//8qZmov7FYsuJov7C4sszCH3EnkIqfgZFf8AJOZmi/8AIWZm///0zMz/ABszNP//7TM0///gmZr//9mZmv//7eZmWov//8tmZov//89MzP8AERma///MZmj/ACGZmv//1uZm///kszT//+zMzf//3jMy///0mZn//9pmZosIKEPa6OjW2Osf/wCqMzT//sizNBX/ACCAAP8AJ2Zm/wASTMz/ADIZmov/ADPMzIv/ADGAAP//7pma/wAyZmb//9/mZrP/ABuAAJ7/ACFmZv8ACxma/wAkmZqLCO3UPDAuQzwoH///2kzMi///3kzO/wALZmb//+SZmv8AE0zNCP//3EzM/wD2gAEV/wAXGZr//+KzNP8ADWZm///bGZiLZIv//9fmZv//8pma///amZr//+jmZv//4kzN///o5mb/AB2zM///8pma/wAlZmaL/wAoGZqL/wAngAD/AA2Zmv8AJJma/wAW5mb/AB0ZmggO9937OLnrufddvOi89yOt83cBxb33Pr33Dr33Pr0D+WTAFYvlYc9Hrgj3AfdsBZROlGanTwi3hwVp6X6/f+4IdpUF///DmZj//9rMzP//1bM0///qszRZ///tszT//+czNP8ASMzM///05mj/ADJmaP//9ZmY/wBVmZgIdpUFMFNZdypvCKlpBc+asJzDqwj7CvtrBXKTeot1iwj7FS4o+w77Du4s9wwf/wAEszSL/wAEszL/AAAZmv8ABLM0/wAATMz/AB6zNDf/AFEZmP//xZma/wBeGZqL9w2L8e2L9wsI/E33zhX/AEezNIv/ADpmZv//1Rma/wAaGZpQ//+hzMz//+UZmkz//6szMov//5uZmov///YZmv8AAJma///2Zmb/AAFMzP//9oAACP///xmaBihD2ufp1tnrH/8AqYAA//9qgAAVjP//+Jma/wAAgAD///iAAIv///hmZov//7SAAP//z4AA//+9MzP//7fmZv//6oAA////GZr/AAczM////4AA/wAHMzSL/wAHZmaL/wBMszP/ADHmZv8AQhma/wBGmZr/ABWzMwj/ADHmZv8AB4AAFf8AAJmaBu3UOy8vQzwoH///tczMi1D/ACxMzf//5xmayOb/ABsZmf8ARBma/wBTTM2L/wBhTM2L/wAKTM3///+AAJX///7mZv8ACbMzCP//9WZm/wAwszQV///u5mb/ADMZmv//3bM0/wAnTMz//9GZmv8AF+ZmCPcB92wFk///yZmY/wAIGZj//9yzNP8AFYAA///OZmj///HmaP//+4AA///w5mb///uAAP//75ma///7TMwIqWkFz5qwnMOrCPsK+2sFcpN6i3WL///75maL///75mb////maIf////MzAgO92P7bXb3Drn3A7n36r33I60Sxb33Er1qwfclvfcSvRP9wPk495YVi+Vhz0euCPcB92wFlE6UZqdPCLeHBWnpfr9/7gh2lQUwU1l3Km8IqWkFz5qwnMOrCPsK+2sFcpN6i3WLa4v//+IzNP//+eZm///lTMyA///mGZr/AArmZv//4rMy/wAGMzT//9+zNIv7FYsuJov7C4sszCH3EnkIjfsCIYuLXfaLjfsOuouO9w72i4u5IYuO9wIFoY7/ABSZmv8ABeZm/wASzMz/AAhMzf8AGczM///1gAD/ABxMzv//+kzN/wAdgACLCPcN8e33Cx/8Ifc/Ff8ACoAAi/8ACjM0////GZr/AAnmZv///kzMCBP+wP//0MzM///XgAD//+OZmv//w4AAi///vJmai///u5ma/wAfGZr//8QZmv8AMGZm///YmZn///TmZv///czN///0gAD///7mZv//9BmaiwgoQ9ro6NbY6x//AI7mZv/+rRmaFf8AMYAA/wApzMz/AByZmv8APjM0i/8AQOZmi8n//+SZmP8AP2Zm///OszT/ACqzNP8ACjM0/wAB5mb/AAqZmoz/AArmZosI7dQ7Ly9DPCgf///0mZqL///05mb/AAEZmv//9WZmjQj//8iZmv8BO0zMFf8AMuZm///h5mb/ACCZmv//yIAAi///wzM0i///weZm///f5mZT///NGZr//+HMzf//zTM0/wAeMzP//9/MzP8AN5mai/8APYAAi8n/ACCzNP8ANxma/wAxzMz/AB5MzAgO0/ttduO657v37L33Iq4ByL73JMD3Jb4D95GAFY0vIYuLXPaLjjO6i47j9ouLuiGLjeYF9wCZ4O2L9wKL5F/PR64I9wD3bQWUTpVmpk8IuIcFaOl+v4DtCHWWBTBSWngqbwioaAXPm7Cbw6sI+wr7awVyk3qMdYv7FIsuKIv7Dov7A+Es9XwIqfgcFe3UPS8vQzkoKEPd5+nX1+ofDkCBvffwvQGvvffwvQPh92oV+LsKWRb7D/Am9w/3D/Dw9w/3Dybw+w/7DyYm+w8eDvc3gb338L0Br733UL33Ar33UL0D4fdqFera2uoe/wAbmZqL/wAaTMz///lMzP8AF2Zm///0MzT//9jmZv//15ma///nzM7//8kZmov//8PMzIv//8PMzf8AGDMy///JGZn/ACcZmv//15ma///omZr///QzM///5bM0///5TM3//+RmZosILDza6h9ZFvsP8Cb3Dx7/ACuZmov/ACjMzP8ADLMz/wAimZr/ABXmZ/8AIpma///qGZn/ACjMzP//80zN/wArmZqLCPcP8PD3D/cPJvD7Dx///9RmZov//9czNP//80zM///dZmb//+oZmv//3WZm/wAV5mb//9czNP8ADLM0///UZmaLCPsPJib7Dx/36/8AfhmaFf8AIbM0///gGZr/ABVMzP//0xmYi///zrM0i///zrMz///qszT//9MZmv//3kzM///gGZn//95MzP8AH+Zn///qszT/ACzmZov/ADFMzYv/ADFMzP8AFUzM/wAs5mj/ACGzNP8AH+ZmCP8AKbM0//7mZmYV/wAnGZr/AChmZv8AGDMy/wA25meL/wA8MzOL/wA8MzT//+fMzv8ANuZm///Y5mb/AChmZv8AF2Zm/wALzMz/ABpMzP8ABrM0/wAbmZqLCOraPCwsPDwsH///5GZmi///5bM0/wAGszP//+iZmv8AC8zNCA7394G99/C9qncSr7338N1IvfgBvRP2+FX4aRX//3izNAf//9gZmv8APoAARf8AKczM//+w5maLCPsPJib7D/sP8Cb3Dx//AE8ZmovR/wApzM3/ACfmZv8APoAACP//b7Mzvf8Ak4AAB/8AJ4AA//+/szP/AEcZmP//1MzN/wBQZmiLCPcP8PD3D/cPJvD7Dx///6+ZmIv//7jmaP//1MzM///YgAD//7+zNAj/AIqAAAf8MfuTFera2uoeE/rq2jwsLDw8LCw82uof+EIW+LsKDvjlgb33JL33Lr0Br7338Lv3dLv38L0D4fdqFfi7ClkW+w/wJvcPHv8AcMzMi/8AXmZo4P8ADszM9wEI93QG/wAOzMz7Af8AXmZoNv8AcMzMiwj3D/Dw9w/3Dybw+w8f//+LszSL//+fZmj//6XMzP//9czM//+OMzQI//8iMzIG///1zMz/AHHMzP//n2Zm/wBaMzT//4uzNIsI+w8mJvsPH/liFvi7Cg6Hgfcb+FR3Afcb93IVg4uEeIN+gZKCl4SLCIF7cHmL/wARMzP7Qv8AUMzNH6CLmZCSl/8Azhma/wFhMzT/AHzmZv8AtjM0i/8AE5mYi/8ABpmY///8TMz/AARmaP//67M0i2KLaf//9zM0ff//5MzMOfsz//9xMzP7kf//8MzNi///8GZmi///9Jma7HuLCA6mnHYB93H4tBWDi4R4g35+lIWVhIuBi3twi3mLYbT7E6VMdXb7HSGLdYuCkoSPgQiGgoF+i4WLhJhtmouPi5GNj42Lh5FslYuYi5q09w/3DbIqmVehiwiWi5OXl5KUhpODkouai5aoj5asi46li5aLoG6ZSPcg9z33T7d+i68Ii5eAmXiNi4uLu3KLgIv7B/sEOz099yWbvG+LCA4zlnb4Hcb3jHcB93naA/fIlxWLq4DniveQ84u/hpyLCJuQkJ+ghZh7H3WLXIckiov3GpfVi6IIm4mRdx5oBnqGhHwfi3GWQoz7GCOMWI96iwh7hX13dZGInB+gi7qQ84uJ+3qA+waLawh5joeeHq4GnJCPnR8O+JP3qPfyFYuYjZeQlae6/wAkTMz/AAqzNP8AC7M0/wADTMz/AAezNP//7UzM/wAHTMz//+qzNIt4i2Jgdotqi26biZWLlIuVjZOOCP//80zMdISJ///fszSLgqNckIvbCPfq+wgVTrdlplWLeYt7h3+GkpWRloubi8BxvYGc/wBHGZqL/wAX5mb//66AAIv//9qAAIuGioWKhwibm7+sqIuSi5SFlYODjYKMgosId4WDfnSehZcfrov/ABUZmP//9rM0/wAm5mj//+JMzJx+/wANgAB//wAGgACFfohzcXp3CItcYGt8eYV0f5GBoB6Xi5iPlY6Gg3h7bIt7i26Ybp6MhouGi4UITGV7YB6BjQWapqG2i7qLm4SYg5Wcg56JlIu/i7GkyLoI+69QFYtqtnaLY4t4hHeEeP//4UzM/wAJZmb//8nmaP8AG4AAi/8APGZni/8AObMz/wAv5mb/AByAAP8ABOZm/wANgAD/ACKAAIv/AAOAAP///4AAmv//7oAAhI2DjYSLCH97iW4f+M/EFXx9eYR0i3aLeZN4mZyboJaii52LnoCbegj71feMFX2uZ8x7omLFYKdgpYlVdWlvb35+///WTMz//+hMzP//3LM0///yszQ9///iszRQ///pTMyL+wOLS7lYtm0IY5H7H7iLZ8R1U3aLaPces7SQjIsFeX5/goSDeXpl///agACL///BgACL//+pZmb/AEVMzGL/ADdmZ///7zM0/wAdszOC/wAjmZr///AzM6P///EzM692uESPYdPEx9ey4Aih///2gACy///ygAC1i+SL/wBcmZj/AEZMzf8AH2Zo/wAeszMI9033SftQ90YF///X5mj/ACXmZv//phmY/wAxGZo0i2iLYn57hAj7CfusFWR1pZGUoaawH6+LpH+ldXB3eH1kiwhX+3cVgHmFch+EB4STiJWLlIuVjZGTmP8ACLM0///+szP/AApMzP///0zNlIvai5u9j6KcgaSInYuei6CUmZcIp4wFioWLh4uGCHmXh5WWo5KoHouXhZOEj4eOgIt9iwh1Bv8AC4AA/wAYzM3/ABGAAP8AIjMzk5acpqelmYuRi5yEmIWMhYuFi38IeIeIhoSIjp4ei4+LjoyQ///8MzT/AACAAP//+8zM/wAAgACIi4eLdoWLdotuuIeLc4uC///9gAD///GAAP///IAA///ygAD/ADiAAKn/AACAAP8AKczNi/8AKjMzCJeImYiWi7eL/wAXzMyi/wAZMzSlcaRrqGaLeouFiX+Fi/8AJMzM///9MzT/ADZmaP//yMzM/wAZzMz/AAOAAP//8YAA/wADgAD//++AAIuBCItzXoiLbIt5nYSQi/8ABMzMi/8AAmZo/wAAgAD/AATMzP8AAYAA///+zMyP////MzSOi48I/wAAZmaN/wAUgAD/AAmAAP8AB+Zo/wAAmZj///6Zmv//64AAHouB////zMz///gzNP///zM0///5zMx+iH2IhYt3i///6DM0/wAfzMz//9LMzP8AOzM0CJsGop+OpKdvlIT///LMzP//90zM///2Zmj///HMzB+L///7TMz/AAAZnP//+0zM/wAAzMz///szNAhxjAWAl32Ue4tti3B/cnsIkQeLpP//8OZmrP//8hmam///+kzM/wAGgAD//+GzNP8AIIAAVYuHi////kzMi///+rM0ioeWhpKLlouUj5WRkwiFB3GehZWek5mZHouOi5CKjwiliQX///ZMzP8ADrM0///zszT/AA9MzG+LV4t+aotoi4OMg4yD///yszSH///NmZj//+5MzP//4LM0///JszR/mGyZgosIdX53cH2Xd6Ifm4v///pMzZz/AA2zM4uPi4+KjYuOi46MjIwIgAeLfYtZwFoIdQZVoDu3i9uLrpOuoJ+j/wAWZmb/ACEAAf8ADuZq/wAiszP/AAwZmP8AJhma/wANTMz/ACT//pz/ABkzNP8AG0zMpaidrZGgrXX/ACVMzGX/AA2zNHUIrP//yszM/wAfTMz//8ozNP8ACbM0Y7CWiZzOi9iL/wBHmZj//9+Zmv8AMmZo///QZmYI9zP7Kvsv+y4F//+zTMz//7OzM///vbM0///uTM1Xi1qLbZBlo3ZUTCRSXHr/ACSAAHj/ACCAAG+icf8AFIAA///LZmb/ABYZmv//2uZn/wAOZmb//7yzM6Vs/wAsMzOL/wAuzM0Ii/8AOGZm/wAtMzP/ADOzNP8AUszN/wAh5mYInwaHiF1hi02LhYuGjIX//+GAAIv/AA6Zmpv//+3mZosIdX56enCYd6Efk4unmJiXmnerb71/iIGKg4uCi1axgKaLp4v/AA2zNP8AEEzN/wAITMz/AA2zMwhxiQX/AAFMzP8ABLMz/wAAszT/AANMzYuPCJiDmngeDvc4+A75GhX4rAps+4EVfottgX2GCIGlBbqdpZW2pwic+5kGdJZ9mR6nBo6OiocfdgeLVoxqZU+Kix6gB42Pjo4erwabmZmiH/crB6yJlX8eDvc4+A75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s5CSgpWHH///+jM0i///+8zMe3aLCGSKsrkf9ykHi/8AKZma///5TMz/AB+zMv//9LM0/wAYGZoIyf8AbJmaYov//9TmZv//tDM0Bf//4rM0/wAeszT//9ZmZv8ACBmYY4sIOThSVXOXgKKomp+YH4uSipKJj4qOipGLlouquJaxi/8AHBmai7D///RMzJf//7xMzgj//9bmZv//t+ZmXP//9IAABRPoK3NGVotHi///yUzN/wAazM3//+EzM/8AJ8zN///yTM0I///dZmb//8MzM7OL/wAeZmb/ADUzMwX/AAezM////zMy/wAHzM3///+Zmv8ACBmai7mLnpO3rQifmwX//2QzM/8ACBmaFf//9P///wANszL///rMzf8AETM0i5qLuP8AFTMz/wAtZmb/AEnMzf8AE5maCP8AC5ma/wADGZoF///CGZn//0yAABX/AG2zM/8AwDM0/wATmZr/AAUzM4v7GQWLfoWEg4Vxdml1b4v///WzM4uC/wABszOD/wAC5mcIDvuVgcL37bIB5NoDtvhBFX2Hf4MffgeGjIqPHsb//wfmZgb7CP//NBmatIv/AEuzM/8AhRmaBf8ABOZm///GGZn/AB2AAP//6MzN/wAp5maLuYu9obK3if8ACkzNhf8ABbMzgYxxd22DcYsIcIWpyR+L/wBHzM3/AGcZmv8AtTMz/wAA5maLBZWZj5QfnweL/wACgAD///7mZv8AAbM0///95mb/AADmZgj/ABszNP8AL+ZmYov//+VMzVz//6uzM4uLsgXMj7OLHpKHjoIeUf//5bM0BYX///xMzP//92Zmif8AAJmahP8AAhma///pMzT////mZv//9szMi///rRmaCNr//2uzMhX/AG0zNP8APhmaBw7viqj3wbL3jqcB8dv329u9pgP4jBbYi7dFmUQIpouF9ykFipSHlnKLCHJ7o6Qf+IUHp5mbtB6lBpCOjpAfi56JjAWLLopnZDSMix6Jiot4BYaPiJAepQazmn1tH/ti+9v3YgenmZu0HqUGkI6OkB+LnomMBYsuimdkNIyLHomKi3gFho+IkB6lBrKbfW0f/IoHb317Yh5xBoaIiIYfi3iNiQWL6I2vsuKJix6MjYueBZCIjoYecQZjfJiqH/eV99v7lQdvfXtiHnEGhoiIhh+LeI2KBQ4+iqj4A7r3XKmldwHj1vda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EqbW9yPVE7Dx+xkV919A+78H+MP3EX3X+5FSBRNw4EElBw5L+36s91Ot+AW5oXb3XammdwH3Btr3bOED91P3tBXR/wBKgACu/wAhgAAepIudgpp8tmCUUYtPizRyKiGL///xzMyL///kgAH/AAEzM///47Mz/wAYZmd//wAKZmaG/wAGMzOL/wAfzM0IPvhhFYv//+SAAEf//9+AAAX///wZmon///xMzP///zM0///8ZmeL///v5maL///zZmf/ABBmZIGL///55maLh///+bM2i///+UzMi///9szM/wAGGZr///VmZv8AAuZm///6MzQImmkFm5X/ABLMzf8ACkzM/wASMzP/AAizNAi+/wAYTMyL//2kszQFiziAhk6IhYWLdpGFtYyljLeLuouqiraKkZGLoIWRRI+Aj4veCO8Hi6eT///1ZmaW///7mZr/ABTMzf//95ma/wAWzM3///tmZv8AG2Zmi8CLu56ysri4psiL3Iv0Qu4qi///zIAAi///2eZm///kMzL//+aZmv//5hmaCHz///CzNImLi6EIi/8AiuZo3f8AJxmYBf8AA8zM/wABzMz/AAOzNP8AALM0/wADgACL/wAPszSL/wAMZmb///FMzP8ACYAAi/8ABYAAi/8ABRma/wAGGZiL/wAHZmiL/wAIzMz///pmZv8ACoAA///8Zmb/AAZmaAh7rAV8gXn///UZmHj///bmaAhL///hZmiL/wANmZgFzI+zix6Sh46CHnKBQH1jiImDjXuRhb+Il5CLNwgO9zn4A/iBFZKBkImKi4qJgZSJi46MjoseWacVhQaJlYuKiJCJjIiMioqKjYqOi4yNi4yMjIuXi414jIgI75oViQaMiZCLHo2LjIyMi5eLjXqMhgiFBomUiZGGiwgwYBWIjIqNHoyLjouMjI+QjZCLjAiMi4yKiIGIhB5wFoiJh4mIiYGYhpeLlQigkqWfo5FwgHiIi4seiouKiomKi42MjYuNCJ2Bm39/g357HouDjn6YhAj3+PwoFYaLka9Fi3OLfG6Hi4qLiYyLjo6QmJ+ckZm2jJmLmoupe71plQiNkY2Ki4yehq9vi06Ldod1gW+eiYSMl4m1hpVyi4OLiYmJiYsI+5r4MxWKjISOiouFlombi5MInZiaoZ2efWgei3+JfYZ7fZGMiYOPlo6TlIuZCJiBn3t+gIB0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zf8AHZma/wBQZmb/AMDmZv8AK5ma/wBnGZrA9wSZqKSrsI6Ojv8AAYAA/wAGszSL/wAGzMyL/wAGzMz///6AAP8ABrM0iI5yin6Kb4sIaIt4jGaMiIj///6AAP//+UzMi///+TM0i///+TM0/wABgAD///lMzI6I/wAfmZqI/wAgGZr///ozNP//8EzM///bzMwI//+czMz7eQWE///v5mb///eZmv///UzN///3gAD/ABPMzQj//6dMzfdkBf//7f///wAqMzT///WAAJ3/AD1Mzf8ABMzMjo7/AAGAAP8ABrM0i/8ABszMi/8ABszM///+gAD/AAazNIiOZopjimeLaYtwjHeMiIj///6AAP//+UzMi///+TM0CIv///kzNP8AAYAA///5TMyOiP8AK5mah/8AB+Zm///4szT/ABtmZv//wEzMCP8AcRma+5sF/wAIszP//+vmZv8AD0zN///SGZqBb///9Bma///emZr///PmZv//5GZmfGyAd32Ccot9i4eOgIsIbH5ze3afeKYfoIuzk6/LCA77JIG7W7T4DqkSr9pN1fc41cCkE3b3t/d9FfsZB4t+hYSDhXF2aXVvi1mLc7iLqou4/wAXMzP/AChmZv8ASczN/wATmZoIE673I/tyFb6Lqp+R1AhykAWKdYVvdYsIdIqlyB/3JQf3IkGmQjk4UlVzl4CiqJqfmB6LkoqSiY+KjoqRi5YIqriZsa26d/sFHouEiIeIigg1dgUTditzSFuLR4tAwWXRi7mLnpO3rQifm42LBY9yoWqxiwgOPoHH993HX6cS/wCGszP/AEwZmv8ApjMz/wBM5mYT2P8BxeZm9xAV/wABTM73MwX////mZq7///+zNKL///vMzJ3///IZmsf//+CAAJ9ki1eL///ZzMx2//+85mb7AAj///7MzYz/AAAzM/8ACTM0Bf8AAJma/wAmzMz/AAOZmf8AJszM///8GZr/ABEZmv///MzN/wANszT///cZmf8AB2Zm///yzM2LCBO4a4v//9KZmoT//9JmZoX///szNIP/AAQZmoD/AAgZmYII/wAoszOIBf8ADDMziv8ACBmagv8AAkzNgf8AAhma///25mb/AAAzMv//8hma/wAAgABvCP8AAUzN+40F/wAAGZl5///9mZlw/wACTM3///YzM/8AA+Zm///vTM3/AA1mZ///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///2Zmb/AAqAAIuoCPfO91P7zgeLbv//9WZm///1Zmb//9+Zmv///JmaCHiJBYb///+AAIj///2AAIuGCIt0jYkFi8+Nr7LPiYsejY2LogWLkIj/AAKAAIb/AACAAAh4jQX//9yZmv8AA7Mz///4Zmb/AApMzYuoCPfO6QeVmY+UH58Hj4iNhh77AsMGi5+MuJGtCBPLwJnUrZahi6OLpXuVd5V2lHWniwiRgAb8igeLbv//+WZo///4mZr//9uZmP//+WZmCICJBf//+xmY////GZr///3maP///eZmi4YIi3SMiQWLx42vss+Jix6NjYuiBYuQh/8AApmah/8AAGZmCHiNBf//4YAA/wADMzP///OAAP8ACszNi6gI94UHxsO2nKiLCLmgaDof+1oHi27///XMzP//9UzN///fMzT///yzMwh3iQWH////mZqI///9ZmaLhgiLdI2JBYvPja6y0ImLHo2Ni6IFi5CH/wACgACG/wAAgAAIeI0F///fszT/AANmZv//9UzM/wAKmZqLqAj3Ygfycr9DHmSLRntISAj3fgfMjq6LHhOHwJKHjoMee4D//94zNP//87M0fogIDvdb+3Gv90us9/uymHf3fqd6rBLn1vdT1vdA703WE+sA+AT4yxX40QoT00D39fxcFffhewcT54B+i2t+aIsI+1HHBvcuzqOsHqyLqn+TYZdUm3Ori5+Ln52LoIuwabJmo3KccJVmi0mLUWNwaAgT60B+pGCtO4twi3SEdn9GY3FBi/sOCFgGeYZ/gx9+B4aMio8e0PvPBotu///3Zmb///aZmv//3Zma///8ZmYIeIkFhv///4AAiP///YAAi4YIi3SNiQWLz42vss+Jix6NjYuiBYuQh/8AApmah/8AAGZmCHiNBf//3pma/wADgAD///ZmZv8ACYAAi6gI98/3U/vPB4tu///1Zmb///ZmZv//35ma///8mZoIeIkFhv///4AAiP///YAAi4YIi3SNiQWLz42vstyJix6NjYuiBYuQh/8AAszNh/8AADMzCGuNBf//4jM0/wAB5mb///LMzP8ACxmai6gI98/3SQeljn9jH/ubB/sAi/ssXx6Ai4WShZSDlYGXcYsIgHh/eW2tfZ0fn4uti7CqCLqxpe+L9zUIDvg7iaz3+7Jwpvd0p3muEufW91PW91LVE9f4BPjLFYJni2SKdwhg+1OWB4vPkK+RnqDbtZWai5aLk4mbga51gFW9iwj34P/+neZmFf8AA4AA/wAAszP/AANMzP8AAGZn/wADMzSLoouXepl4CNQoBZ9ujn6LfwiLdo6HBYulja+yvYmLHo2Oi6EFkIWOhR6IBnGLbZ54pgj7Cvc9BYiPiZCLj4uPjY+OjgjX3wUTr6OluKGmiwiSBo+SjpAfi56HjQWLVYlkZ1yNix6IiYt4BYeOh5AejwajkIODH4uBhn58e///yoAA///FTMz//96ZmP//4bM0///T5mj//+qZmgj/AcpmZnUHd4J9h3iHd5dtk2uLUotNd3BUCBPXfqNgrTuLcIt0hHZ/RmJxRYv7DghYBnmGf4MffgeGjIqPHtD7zgaLbv//+WZm///1zM3//9uZmv///DMzCHiJBYb///+AAIj///2AAIuGCIt0jYkFi8+Nr7LPiYsejY2LogWLkIf/AAKZmof/AABmZgh4jQX//9yZmv8AA7Mz///4Zmb/AApMzYuoCPfO91P7zgeLbv//92Zm///1mZr//92Zmv///GZmCHiJBYb///+AAIj///2AAIuGCIt0jYkFi8+Nr7LPiYsejY2LogWLkIf/AAKZmof/AABmZgh4jQX//96Zmv8AA4AA///2Zmb/AAqAAIuoCPfO6QeVmY+UH58Hj4iNhh77AsMGi5+MtZGtCBOvmdS5lKGLo4uhfZV3lXeUdqWJCIuAi/yHBYtu///2Zmj///WAAP//3pmY///8gAAIeIkFhv///4AAiP///YAAi4YIi3SNiQWLz42ustCJix6NjYuiBYuQh/8AAoAAhv8AAIAACHiNBf//4JmY/wADTM3///RmaP8ACrMzi6gIDvecgcJcrPf7svdvrHyrEuXa90/a9tyU2hM3gPgE+MgVjIoFgGyJZYt6CFv7T5cHi8+Oq5GeoNu1k5qL/wArzMyL/wAPTM7//9kzNP8AAuZm///4zMyUdpR4pIsIjouOjIyMCPuq/E4VE2eAiziAh1WHhYWLdpGFtYyhjLSLsYuciraKkZGLoIWRXY9+j4veCPeg90/7oAeLOICHX4eFhYt2kYW1jJuMsIu5i6iKtoqRkYughZFHj4CPi94I96D3WfvBBxOvgESqb7keuYu9obK3if8ACkzNhf8ABbMzgYxxd22DcYsIcIWpyR/3kfMHlZmPlB+fB4+IjYYe+wyyBsyPs4sekoeOgh5R///lszQFhf///EzM///3ZmiJ/wAAmZiE/wACGZj//+kzNP///+Zo///2zMyL//+tGZoI+1n////mZou4BfcMm9PAHqOLlXaPd5BwmX2mi6WLlKCLnIucgJt8mHedcpdii///2Bmai///0WZm///pszT//+DMzP//zJmYCBN3gP//8jM0/wAX5mj//9UZmv8AIMzM//+xZmaLcIt0hHZ/RmNvRIv7DghaBnmGf4MffgeGjIqPHs4GDvdXiaz3+7Jmuvd1rRLn1vdW1vdZ1hPe+Ej3+BX353UHfYJ9hX2GdZpxk2iLCDf7BUX7MB9gWAd5hn+DH34HhoyKjx7Q+84Gi27///dmZv//9Zma///dmZr///xmZgh4iQWG////gACI///9gACLhgiLdI2JBYvPja+yzomLHo2Ni6IFi5CH/wACmZqH/wAAZmYIeY0F///cszP/AAPmZv//+EzN/wAKGZqLqAj3zuoHlJmPlB+fB4+IjYYe+wLHBvcu0aCsHqmLnnuYapF+lYGXh4yHi4eLhwj8iAeLbv//9mZm///1gAD//96Zmv///IAACHiJBYb///+AAIj///2AAIuGCIt0jYkFi8+NrrPPiYsejY2LogWLkIf/AAKZmof/AABmZgh4jQX//9+Zmv8AA2Zm///1Zmb/AAqZmouoCPeHBxO+xsO2nKeLCLqfaDof+1wHi27///hmaP//9bMz///cmZj///xMzQh4iQWG////gACI///9gACLhgiLdI2JBYvPja+yz4mLHo2Ni6IFi5CH/wACmZqH/wAAZmYIeI0F///dmZj/AAOZmv//92Zo/wAKZmaLqAj3ZAfycr9DHmSLRXtJSAgOSftxr/dLrPf7sveArBLn1vdB7k3WE/r4WPUV9+Z8B32La3xoiwj7UccG9y7PoaweE/yri6p/lGD/AAtMzP//yhmY/wAQszT//+fmaKqLn4ufnYufi7Bq/wAm5mhm/wAZGZhynHGVZYsINyNV+1kfeVgHeYZ/gx9+B4aMio8e0PvOBotu///zgAD///UzM///4YAA///8zM0IeIkFhv///4AAiP///YAAi4YIi3SNiQWLz42vst2Jix6NjYuiBYuQh/8AAszNh/8AADMzCGqNBf//2kzN/wACTM3///qzM/8AC7Mzi6gI9873SQcT+qWOgGMf+5wH+wCL+yxfHoCLhZKFlIOVgZdxiwiAeH95ba19nR+fi62LsKoIurGl64v3NggO9zqJrPf7snCm93+tEufW91bWE7z4SPdmFY+MkIyPi6KLl3qZeAjUKAWfbo5+i38Ii3SOiQWajKOMoouui6eLpYkIjY2LogWQhY6EHogGcotsnnmmCPsK9z0FiI+JkIuQi4+Njo2OCNjfBaOluKGliwiTBo+RjpAfi56IjQWLVIlkaFuNix6IiYt4BYePh5AejwaikYODH4uBhn58e///x+Zo///EGZr//98ZmP//4eZmXnUI+GB1B3qEgIN9hnWacZNoiwg3+wVC+zEfE9xkWAd5hn+DH34HhoyKjx7Q+84Gi27///VmZv//9WZm///fmZr///yZmgh4iQWG////gACI///9gACLhgiLdI2JBYvPja+yzomLHo2Ni6IFi5CH/wACmZqH/wAAZmYIeY0F///aszP/AAQZmv//+kzN/wAJ5maLqAj3zuoHlJmPlB+fB4+IjYYe+wLEBvcu0aOsHqmLnnuYapF+lYGXh4yHi4eLhwj8iAeLbv//+mZm///15mb//9qZmv///BmaCHiJBYb///+AAIj///2AAIuGCIt0jYkFi8+NrrPPiYsejY2LogWLkIf/AAKZmof/AABmZgh4jQX//9+Zmv8AA2Zm///1Zmb/AAqZmouoCA6MgcJcrPf7svd/rRLr2vdW2hO890P4GhX3VvvBBkSqb7keuYu9obK3if8ACkzNhf8ABbMzgYxxd22DcYsIcIWpyR/3kfMHlZmPlB+fB4+IjYYe+wyyBsyPs4sekoeOgh5R///lszQFhf///EzM///3ZmaJ/wAAmZqE/wACGZr//+kzNP///+Zm///2zMyL//+tGZoI+1b////mZovEBYvO///8gAD/ADJmaP8AB4AA/wAWmZiTo/8AFYAAmf8AD4AAi6eLmXqXbv8ABzM0///umZj/AAvMzP//9WZon4uei5mai6CLm4Kcd5oId5ptlGWLbotde3NrbWODVoszCGNYB3mGf4MffgeGjIqPHtD7oAYTfIs4gIdVh4WFi3aRhbWMoYy0i7mLqIq2ipGRi6CFkUePgI+L3ggO95SBuGas+AOsca33XqmmdxKw4fdB3traE5+A+BLmFf///TM0/wAJMzP///XMzP8ABczNgoxsXmpwYIsISEzd9wT3ALHPzR/Gi5JjjmqOcpWAoYsIn6eaqMBYuSsgMzH7IfsWyzP3Fh/Gi7ukt9cI16oVE2+Aizh/iGiGhYWLdpGFrIyfjK2LrouYiraKkZGLoIWRYo+Aj4veCOUH/wAXzMz///+Zmv8ADbM0///4mZn/ABOAAP//48zNCNQkBZ9ujn+Lfgh7B4iMiY4en4yejKmLqougiqmKkZGLoIWRaY///+LMzP8ABDMz///pMzT/ACHMzQj7CfdBBYiPiZCLkIuPjI6OjgjX3wX/AB2zNP8AHrM0/wAeTMz/AAtMzL2NkZGLoIWRZop9imeLZYt6jGaMhYWLdpGF/wA8gACIa///2oAA///1gAD///WAAAj//8tmaP//xoAA///OMzD//9OzM///5WZo///4TM0I/wFZgAAHzI+zix6Sh46CHnKBQH1jiImDjXuRhb+Il5CLNwgO97N/uGio+AG6aa33l3cSsOD33tb3WtYTH/gS5hX///0zNP8ACTMz///1zMz/AATMzYKMbF5qcWCLCEhM3fcE9wCxz80fxouSY45qjnKVgKGLCJ+nmqjAWLkrIDMx+yH7Fssz9xYfxou7pLfXCPck/wDC5mYVi/8AFRmalP8ADEzMk/8ACLM0sf8AJUzM/wAmmZj/ABWzNP8AJ2Zoi/8AFGZoi6D///LmZv8AC5mY///pGZqV///sMzSN///kzMyLbQj7LAeLOYGHV4YIE1+GhYt2kIW1jJ+Ms4u0i6GKtoqQkYughpFTkICPi90I9ykHi8L///xMzP8AMIAA///oszT/AB6AAAgTb///7zM0of//4MzMl2iL///O5miL///QGZh+Tkf///yZmP///EzM///5mZz///WzNIuZCP8AAMzM93UF/wAAMzTM/wADzMyzi4uLkoeOgotygUB9Y4iJg417kYW/iJeQizcI/EkHizh/hv//2jM0iIWFi3aRhf8AKTM0jP8ABZmYjLaLsov/ABGzNIr/ACoZmIqRkYughZH//80zNI+Cj4veCA6egcL37bL3JHcB5dr3Z9oD5fgaFfvBB0Spb7oevYu5qKWy///9TMz/AAmZmv//+7M0/wAEZmaCjHx+b3xviwhwhanJH/eR92f7wQdEqm+5HrmLvaGyt4n/AApMzYX/AAWzM4GMcXdtg3GLCHCFqckf95HzB5WZj5QfnwePiI2GHvsMsgbMj7OLHpKHjoIeUf//5bM0BYX///xMzP//92Zmif8AAJmahP8AAhma///pMzT////mZv//9szMi///rRma///VzMz////MzP//wLM0/wAAGZr//5aAAIsIqAfMj7OLHpKHjoIeUf//5bM0BYX///xMzP//92Zmif8AAJmahP8AAhma///pMzT////mZv8AAMzMi///rRmaCF3////mZgV9h3+DH34HhoyKjx4O9wx/uGDC9+2yc633e6cSsODRrNLe9w/VE5+A+BLmFXmZBWxeZnBgiwhIS9/3BPcAss/NH8aLkmOOao5yn4Chi5+LnZqLqIv/ACWZmv//5kzM/wAiMzL//86zNP8AEJma///D5mb/ACRMzP//7Rma/wAwMzaL/wAyGZgIw8u+3vK8UjIeE2+AY3ZUSIiKiogebAeIjYqOHsz7wQZEpm+5HriLtKGxt4j/AAYzM///++Zokf//9RmY/wAEzM1xd3iDcYsIcISpyR/3keoHlZmPlB+fB4+IjYYe+wOLhuoF///6TMz3Af//xbM0zPsRi/sMi0VHi0MIE5+Ai///05mY/wAJzMz//9nMzv8AIxma///bmZoI///7GZoGIDMx+yH7Fssx9xYfxou7prfXCA5Piaz39qd5rZh394esEufW9znuUdoTruj4cRWKcIF2bIsIeYZ/gx+CB4eMio8etwaZjId/H/vDB4tu///7ZmaB///ZmZqHCHiJBYb///+AAIj///2AAIuGCIt0jYkFi8+Nr7LViYsejY2LogWLkIf/AAKzM4f/AABMzQhyjQX//95mZv8AArMz///2mZr/AAtMzYuoCPguB/cuy6SsHquLpn+UYP8AC0zM///KGZj/ABCzNP//5+Zoq4uei5+di5+LsGr/ACbmaGb/ABkZmHKcdZVliwg8iy1Zgfs/CBPd9/v79xV2Cg5niaj4BK33f60B59b3StYD+BX5AxVtrmKiTotxi3WFdn5QZv//5+Zm///I5mj///kZmv//oxmYiXCBdmyLCHmGf4MfggeHjIqPHrcGmYyHfx/7wweLbv//84AA///1MzP//+GAAP///MzNCHiJBYb///+AAIj///2AAIuGCIt0jYkFi8+Nr7LKiYsejY2LogWLkP///OZm/wACTM3///sZmv8AALMzCH2NBf//4OZm/wAEZmb///QZmv8ACZma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o4WbhpuFm4edjZWTj42Lj4uSg5eLCJmgmKMfi51/l4KThGFriHx8ipeJmIuZi6GNn4+gjpCQkZSLkYuOeaCLCKKZm58fi5aIkoiTcmZvmneAlKuYqp2mjo2PjZCLmYuDb6yLnoubm4ujCIuQio+LjoWGgoJ1i3yLg4+BiwiIBpyhn6ChnY6MjYyPi6GLdnekfZGHkYqQi5qLnJSQqYOIh4qCiwh2i32XfY+jm6SYppUIjwaUkYWIH4uIh4SLhIuAmHmei6GLlZ6PkAiHBmyLgaV8lqaTp46qi5eIjIOLi4uHgYOLgYt7mHuei5eLlJCVlAhplYulgZmkip6HmYiagoaCl4SQiJGIkouRi4+NkYuOi42Kj4oIgpyRk4KSiI6BkYOLhIuHh4OLiouJjXqPmZaQpa+OiI+AnHeLCHd/eX8fi4ORhYuIi4mHg3+LCPuJ/OMViY6IjR6Pi4mRkYuNi46Ji4eLem+UgX8IoXuSkomOBYiJioqKi4qLiouKjAiCkgWQkqmEi5wIkYKThIeGiIkexWwVgoB2g4qJjI6TmKGRHowGjYuKiB97aRWZlJ2Wk4aQhICAfX2AkYiQH8mYFfjSCn5pFZeTm5eXhI+FgIJ7f4KRhJIfx6MVhYSIhh6IjgeOkImFhIaFhh+Gi42RhYsIiYqKioiRh5OVkZKTH4uRh4+HjI2Mko6LkQiQho+DgYiEiomNio0ekIuHk5SLCI6MiIgfsnIVi5CLkI6JjoiKh4qGiI2Jjh/3ffjaFY0G8iqPL4tPCPsTREx5iouLjIyLjIwetJm33ovli/dLIcCLlouMi4yMiwjpuhWKiouJH4uGjoOLioqLhpuHi4uLiouLiYuHjoOLiIuLi4qKi4iLh5iHiwiLioqKH4uGkn+LiQiKB4qLhZWIi4qLi4qLiYuHj4OUg5eCi4aPgIh+g46Ef3qZco6IoAiJlIeUhpB6m1eahouBi4iEi4WLg5KBkICSfpVvoISig5h5kX0IeomKd36LiYuAk4SchpmFkYiLi4uKi4uKi4iPhIuJCIoHiYyBmYeLiouKiouKi4eThIuICIoGiYuCk4iLiouLi4uKi4eWgYuKiouDk4eLiouKi4uKi4ebgouKCImLg5CIi4qLi4qLiouIlIKgh5tsjIuNi4uLoI2inotkmHGWcgh9lomQhouAi4Rri4sIi4yRjpGIjImHi4CLi4qXh4qJi4eIjYaLH4uHlYeJioqJh5CFix6LhY+JioqLiYiSgosei4aPiYqKiomJmWyfm46YlR6OB5WEmnachouGjIaLhotWbSxaeImKi4qLi4uKi4uMi8WLxdOS3AiMmo2ZjJiPjZGPkJIIorAFi413nKKTrpCNi42JiIeFix6LkJSOjYqNiB+Ki4qJiosIk4iLiYaLhYuLipCIiIqHiB6KjYqNiIuKi4iKi4iLiI6GjIaIkYSffouDi5CIdnUImQeLu4Cnc6iTlpOUjZeMj4+Ri42Lj4mPiowIfpwFjI+Lj4uPCJaHlomKiomJHouHjIeLiYqLiJ6Hiwj8uPyrFYuQjI+OiY6JiYeJh4mNiI4fDj2JqPgErfd/rQHn1vdM1gP3O/h6FfcuyKOrHqmLnnuYapJ+lIGYhwiLf4v8jAWLbv//9kzM///0szP//96zNP///EzNCIKKBYb///9mZon///2ZmouGCIt4jIkFi8WNr7LUiYsejI2LngWLkIj/AAKZmob/AABmZgh0jQX//+BmZv8AArMz///0mZr/AAtMzYuoCP8CA7M0B8yO/wAjTMyLHpL///uzNI7///hMzB57gP//5bM0gv//80zMiHWacZNoizmLJkWH+yoIcIF1bHmGf4MeggeHjIqPHrcGmYyHfx/7xweLbv//97Mz///1szP//91Mzf///EzNCHiJBYb///+AAIj///2AAIuGCIt4jYkFi8+Pr7LOh4sejY2LngWLkIf/AAKZmof/AABmZgh5jQX//90zM/8AA+Zm///3zM3/AAoZmouoCA73WImo+ASthJ/3Z6d7rBLn1vdK1fdf1hOP+Kj5ThVIi2F1ZVYIE9dtrmKiTotxi3WFdn5QZv//5+Zm///I5mj///kZmv//oxmYiXCBdmyLCHmGf4MfggeHjIqPHrcGmYyHfx/7xweLbv//+WZm///1zM3//9uZmv///DMzCHiJBYb///+AAIj///2AAIuGCIt4jYkFi8+Nr7LKiYsejY2LngWLkP///OZm/wACTM3///sZmv8AALMzCH2NBWr/AASzM4H/AAlMzYuoCPf5B/dRvq6tHrCLmmyQd5B2mHili42LjYyNjINsiWmLdQhwgHZseoV/gx6CB4eMipAetgaajId/H/vHB4tu///2Zmb///WAAP//3pma///8gAAIeIkFhv///4AAiP///YAAi4YIi3iNiQWLz42ust2Jix6NjYueBYuQh/8AAszNh/8AADMzCGqNBf//4DM0/wAB5mb///TMzP8ADBmai6gI+DIHE4/3LsukrB6si6Z/k2CXVZtzq4uei6Cdi5+LsGn/ACbmaGb/ABkZmAhynHWVZYsI90T81BX/AMdMzAf/ADGzNI/Lix4Tp4+GjoMe///jgACA///YgACCRoKJhY17jYX/ADaAAP//+uZm/wAKgAD///oZmotSCPtXB4s4gIhOhoWFi3aRhbWMpYy3i7aLpIq2ipGRi6CFkU6PgI+L3ggOhX+neaj4BK16qfdzrBLn1vcGyU2mmebUzmKmE2yA6PhxFYpwgXZsiwh5hn+DH4IHh4yKjx63BpmMh38f+8cHi27///VmZv//9WZm///fmZr///yZmgh4iQWG////gACI///9gACLhgiLeI2JBYvPja+y1YmLHo2Ni54Fi5CH/wACszOH/wAATM0Ico0F///aZmaO///6mZqWi6gI+DIH9y7BpKwerIulgJRzlmucZquLCJ6XmKC6UMMzHzyLN1mB+z8IE01A91D75RWPWo5Yi2GVjZOMkYuRi5GKkooIE55ApISfh66LuIvsrIvqi9tOsDqpVZ99nouzi7ytoLGLCBOeIKCLwnugOQimjAWJr4ithatsm2qUWos8i1RXi0yLQKx11GsIE41A22meb4tgi11ebGqLZot6nYGWdqN/uoikCA7ygrRkvPdVsvcgqRKy007U9z7Z92fbE3f4kLUVQE3S9h+LlIuIjJQI97YG62j3BfsdHlKLXXJkXmbOPo5ziwg5PV1Rd5RyqqSZnJsfi6KFgIuli6q4nLKLoIuhgZp8p2+LUYtyCDB0BRO7//+YGZr//+WzM///xOZm///TTM2LO4tHvV7Zi6+LspOnnwgTd6uiBaKej4yQkJt0uVjxi+OLucWlrgh6lQVoZV97VYsI1fd8FftjBpLErtrTiwiww24gH/u1cRX7PgcTu2Vsbnxziz6LfbuLqIvDpLj3MbEIDvdNiaj4BLpcrfd/rRLn1vdM1vda1RO+9/75NxV1m3GSaIs5iyZFh/sqCHCBdWx5hn+DHoIHh4yKjx63BpmMh38f+8cHi27///dmZv//9Zma///dmZr///xmZgh4iQWG////gACI///9gACLhgiLeI2JBYvPja+yzomLHo2Ni54Fi5CH/wACmZqH/wAAZmYIeY0F///aszP/AAQZmv//+kzN/wAJ5maLqAj4Mgf3Lsijqx6pi557mGqSfpSBmIcIi3+L/IwFi26A///5GZpr///45mYIgokF///7GZr///7mZv///eZm///+GZqLhgiLeIyJBYvFja+y1ImLHoyNi54Fi5CI/wACmZqG/wAAZmYIdI0F///hZmb/AAKzM///85ma/wALTM2LqAj3jgcT3ru6tqWoiwjDoXg6H/tzB4tu///3Zmj///WZmv//3ZmY///8ZmYIeIkFhv///4AAiP///YAAi4YIi3iNiQWLz42ustCJix6NjYueBYuQh/8AAoAAhv8AAIAACHiNBf//35mY/wADZmb///VmaP8ACpmai6gI92gH8mjCQh5ki1F7SEgI93kHzI6uix6Sh46DHnuAcYJ+iAgO+ST7dsLFtcata7j4A6j3Va0SsOb4Tuf3LNb3UtYTz8D40PsOFf//f+Zm/wAxzM3//5IZmv8AATMzbYv///UzNIv///WzMv///zM0///2Zmb///6zMgj/AAmzNP8ABxmaBf8AKYAA/wAdTM3/ACyzMv8AFRmZ/wAiGZr/AAlmZ/8AoJmc/wAXgAD/AGYZmPcXi/8AtLMzCPda+yf3F/tD+0f7FPss+1gei///TGZm/wB1MzT//4nmZ/cr///sgAD//+4zNP//9rMz///uszL///VMzf//7+Zm///0MzP//9EZmv//3czN///X5mb//9gzM25jCLN3BZ+5uJmai9CLxXj3Clv/AEszNP//4WZm/wBHzMz///CZmt+L84vwsMrGCHqdBUlmO3VZiwg/i1iZMa4I+4X5fhVYChPfwPj4/Q4Vsou0n7z/AChMzf8ABMzQ/wAD5mb/AAczMP8AAczNi4SL///oszOW///cTM2Li/8AB5mY///9GZr/AAOzOP8AAIAA/wAHszD/AAJmZqGdsZrIkpGRi5qFkQhLkIKei7wI91QHqY//AEjmZose/wADGZqIjoYehop8inyLa4tqjGaMhYWLdpGFvIiYf4tJCPtVB4t4///+GZj///gzM///8eZo///zzM1ma2t7cosIbVmZ5B/3Sgepj/8ASOZmix7/AAMZmoiOhh6GinyKfItri2qMZoyFhYt2kYW7h5mAi0oI+1QHRqlI7h4O+D6JrPf4v/c6s8B3AfeT4PeH2vda2gP5KvjgFf8AADM0zP8AAszMrouLi5KHjoOLOv//0oAA///zgAD///iAAP//q4AAiwj8IgZ2i5yRH3CPBYdahVd/VgiphgWf25iXwosI3wavlXlsH/xGB4s4eoY7iIWFi3aRhbyMr4zCi8GLroq9ipGRi6CFkTuOepCL3gj4QwetlZ2vHvcTBtGLdHQf/EkHizj///QzNIdRh4WFi3aRhf8AKTM0jP8AGZmYjLaLsov/ABGzNIr/ACoZmIqRkYughZH//80zNI+Cj4veCP8Ao+ZmB4v/ABUZmpT/AAxMzJP/AAizNLH/ACVMzP8AJpmY/wAVszT/ACdmaIv/ABRmaIug///y5mb/AAuZmP//6Rmalf//7DM0jf//5MzMi20I+ywHizmBh1eGhoWLdpCFtYyfjLOLtIuhiraKkJGLoIaRU5CAj4vdCPcpB4vC///8TMz/ADCAAP//6LM0/wAegAD//+8zNKH//+DMzJdoi///zuZoi///0BmYfk5H///8mZj///xMzP//+Zmc///1szSLmQgOTPt8rvdPqnie9wSt93OyEuTWUcWJ2PdM2xPcgPc49x0Vi/eR93+M+yr7kZx7BZ2PqZKWiwjMrEUrJElOYB8T2YBii3CuhKGDo32VdIsIdoB5eWvGUd/3Cdzx9wXvQN8xH/cb93AFnKWQl4uPi4+FjYSLiItohW6LCBPagPuP9y8GUXeLeAU/e2NIiYqKiB5sB4iMio4eE9yAzPvBBhPZgESlb7oeE7yAlouhlJOOCBPcgIuV///8gAD/AAMzM///+oAA/wAFzM0IhQZ8gpnxHw5C+21294Cs+AO3912opXcB9wHW92jZA/cB1xWLbv//9jMz///0zM3//97Mzf///TMzCHOJBYb///+Zmon///1mZouGCIt0jIkFvYyfjLKLtIufir2KCI2Ni6IFi5CH/wACszOH/wAATM0Ic40F///eszP/AALMzf//90zN/wALMzOLqAj3lQe/wayWpYu4i8NXi/sZi/uORyQiQf8AAEzN///1TM3/AAOzM4OS///6szP3DcD3C/cUi/eli/dEO70+iwhdi2d4WF0I92IHzI6zix6Sh46CHv//5uZmgf//upmafv//14AAiAiNcwWLiP8AAszN///+MzT/AAMzM////8zMCKuJBZ+VfkofDmF/qnas9/uy94WnEp33KUDW3MVcy8XKmcgTdMDn+HEVcIB2Yx4TeMB5hn+DH34HhoyKjx4TdMDQ+84Gi27///ezM///9OZm///dTM3///0ZmghziQUTeMCH////szOI///9TM2LhgiLdI2JBYvTja6zz4mLHo2Ni6IFi5CH/wACmZqH/wAAZmYId40FE7XA///hTM3/AAMZmv//9LMz/wAK5maLqAj4QAeLrJCqmqqiua2kvIu5i7Vmi1WLZXt1XWRka3Zmi2GLVv8AJxma///bGZr/AD3mZv//1eZmCL1pu2mLRotJWXxsi3OLdJV6nQgTssCHkIiSi5UIn4Kcd3t+gHxmtVTe58HQ0h6L4lSwXKsIE3XAPL98pIupi7Ghn6ajqqW0sou9i7tgySKLbItrhm17CPsB///F5miJ//+cGZiLYQgO6X+n+CCpErumesn3Hc64yU2m90bOE8v4BfcgFY9ajliLYZWNk4yQi5KLkYqRiqWEn4eui7eL7ayL6ovbTrA6qQgTzVWffZ6Ls4u8raCxi6CLwnugOQiljAWKr4ithatrm2uUWYs9i1RXi0yLQKx11GvbaZ5vi2CLXV5saosIZot6nYGWCBPLdqN/uoikCBPp+/CKFY9ajliLYZSNlIyQi5KLkIqSiqWEo4eui7qL66yL6ovbU7A6qQj//8kZmv8AFEzM///x5mb/ABKzNIuzi8Gtm7GLoIu+e585CKaMBYqvh62Fq2ybcJRZiwgT2UFQV0wfi0CsddRr/wBOzM3//92AAP8ADjMz///kgACLYItcYW1oi2aLdZ2BlggT6XSigbuIpAgO9/SBr/jqrRKm/wAggAD///eAAP8AR2Zm/wDtmZrfS/8AIIAA/wBWgAD/ACCAAP//94AA/wBHZmj/AO2ZmN9L/wAggAATwYD/A2KzNPkLFf//xjM0k/8AAhmYnv//nkzMi///pLM0iyhIiyGL//+i5mb/AELmaP//z8zO/wBNgAD//95MzMr//+SZmv8AZZmY///tMzKL//+NMzSLOv//0szMYf//sDM0iwgTwoD//6KAAItP/wAqgAB1/wBjgAD///OzNI////VmZv///hma///2Zmb///rmZo8+j3GXWsqLp3T/AFizNIv/AHjMzIv/AGCAAOeL8Yv/AF8zNEq7//+35mj/AB7MzAgTwUD//88ZmP8AFMzM//94Zmj/ACMzNIvti8j/AC2ZmL7/AD/maIv/AGEZmIuqTZ9J/wALgAD/AAAzNJf///7MzJSSCP///IAAu4en///1szTACPxsFvciChPYAPcjChPoAPckChPUAPclCg5G+0yz9y92+CSyAeTa94jbA/c8+EEVsgfMj7OLHpKHjoIeUf//5bM0BYX///xMzP//92Zmif8AAJmahP8AAhma///pMzT////mZv//9szMi///rRmaCF3////mZgV9h3+DH34HhoyKjx7G+9IGi3mJcI2Bj3qagauLCLGBt7Ef99L3YAf7JftokoIFm46cjJiLCNrASUAvSTdZdF2DrB+LmJWVi54IoYGWdXp6dnlMrGXe5/cF2vcqHovYZN77EJMI9wz3QQWYpJKYi4+LkIOMhouIi2qGbosIDvcTf9L3tbqDvnKy9xx2zrASssD3UKK+tn6z92i+E68g9xH3FxVysoO5i5+L0L3dzouhi5t/lH0I+237ShUh4DbyHvcyi/cv9yKZ93kIE9+gmoKeiZ2LCKPEqNeleZd5en1+ch+LgY+AkIGPhI6Ei4aLhoiIg4uAi32TeZVtnWSgXIsIPGpaU2OhgJ6dnZ+gH4udgpKDkoKRg5GLmouYmI+ci7aLqXejeIX7GEf7S/tVi1aLZqFxpwj3lvhZBROvYJafmaqLlwijd6FoVWhsVx6LhYyDjIQIoY0Fi4+KkIuPCKmboaefnHx6Hot7gnuBeAhH+woFhI6DjYOLCC37IUj7VB8OcIms9yCt9593AfH0FfjVCub7hRX41goOM4ms912s9zisEvcB2vdA11PiE/j3UPgYFaqSldC3v4BIT25xSh49BmoE2QYT9Oai///SGZr//8nmZl97UiX//77mZv//9xmambAfZDkVqYu/icOL9xmLusyLyYvMardFmwgT+LOdq7iLsovDccH7JYtvi2CJXYtgi3KMYIyFhYt2kYXIh5aHizgI+2wHiziAiE6GhYWLdpGFtYyljLeLCA4kgbH4LawBsOL3uKkD96iBFfjXCg5tiaz4IqwB9wHa95PiA/dQ1xX42Apj+BQV+NkKDvsXi6r3Vqv3PqwS9wHa9xKnu6aFpxP894n3dRX42goT+vjbCg77HYms90er902sAfcC2vcSp7umA/cC9w4ViziAiE6GhYWLdpGFtYyljLeLtoukiraKkZGLoIWRTo+Aj4vdCOTEB9KLh3iNZpCGnYuQkIqoipuLp4unjJ2MpIaQeYuGholejoFFighS9zEGnJiWnh7YBsmLmGqdUpWKlI2Tj4etf9mJkouNioyJi32JhIl3iwj7YwaLi0eMYIyFhYt2kYXIh5aHizgIDlaBrPc+qPdrrBKu4vek2GqpE/j4Hvc0FfjcChP0+N0KE/j43goOm4ms91Cs90WsAfcD2vd72gP4iPfmFYvelo7IkJGRi6CFkWGKcYpfi2CLcoxgjIWFi3aRhciHloeLOAg1+3vhB4velo7IkJGRi6CFkWGKcYpfi2CLcoxgjIWFi3aRhciHloeLOAj7bAeLOICIToaFhYt2kYW1jKWMt4u2i6SKtoqRkYughZFOj4CPi94I7Pd7KgeLOICIToaFhYt2kYW1jKWMt4u2i6SKtoqRkYughZFOj4CPi94IDvu4iaz4IqwB9wTaA/dT9+YV+N8KDvuw+0O1+MasAfcV2gP3FffmFfjgCg5iiaz3TK33SKwB9wTaA/cE9+YV+2wHiziAiE6GhYWLdpGFtYyljLeLsIubiraKkZGLoIWRW5CCjoveCOgHoYukhpp3CPcD+x4FmXuMgIt+CH0HloykjKWLp4u8iouLkZGLn4WRcI7//+gZmv8ACszN///y5mb/AA8zMwj7KPdCBYaRh5CLkYuTkZacnQjh7gX/AB5MzP8AIuZm/wAkszT/AAUZmrONkZGLoIWRcIp6inGLbotljGCMhYWLdpGFvYiBcT40CP//1UzN///PzMz//+KzM///8DM0aosI5AeL3pSOu5CRkYughZFginuKZotfi3GMYYyFhYt2kYXIhpaIizgIDvs4i634H6wB9wTaA/gPFvjhCg7JlHaVrPgirBITYPhy+BIVjYv/AA1MzPuXBf8AA5maOP///4AA///8MzP//8mZmv//+szNhYWLdpGFsoysjKeLqYuhiq2KkZGLoIWR///LmZj/AAYzM/8AAIAE/wAEzM3///nMzNwI///sGZj3mgX///1MzP8AKDM0/wAIszT////MzL2PkZGLoIWRCPsWifsl+/r7FPf6+x+NBYWFi3aRhf8AJ0zNiP8AE7Mzjol4CP//30zN+7UF///2mZr//6yzM///8uZn///8TM3//9ozM4iFhYt2kYWkjJiMp4upi6aKn4qRkYughZH//8dMzf8ABDMz/wAAMzP/AAuzM/8ACIAA/wBKGZoIqPeSjYv3IvwPBROg/wAB5maG/wAFGZqIkIuPi5COjZAIDpKUdpWs+CKsEvcAuve4uhO49y/3DhX3UgeL/wAxMzT/AAyzM///9oAA/wAXTM3//+NMzAj3f/vNBZp7m4WaiwiXlZKfH/fXB4velo7IkJGRi6CFkW2KZ4pti22LaIxtjIWFi3aRhciHloeLOAj7TweLcIh6bLUI+3n3y/sijYmIi3MFh5GJjh6xiJZ/lXkI+6YHE3iLOICHToeFhYt2kYWpjK6MqYupi6+KqYqRkYughZEITpCAjoveCA5rgaz4MqwBsOL30OID96b4SRX44gr3kfteFfjjCg77Goms9y2s92isAfcC2vcr4gP3UfgUFauXmLvGq///4Rma//+55mb//7fmZnH//9kZmk8ed4tyjneTCCEE1Qedg5+HpIsI9xq068e/bdH7Ih9mi2GJcItgi3KMYIyFhYt2kYXIh5aHizgI+2wHiziAiE6GhYWLdpGFtYyljLeLtoukiraKkZGLoIWRTo+Aj4veCA5r+ze6qa74fKwBsOL30OID96b4SRX44gr7K/y/Fap8BZuwqpWXi9WLuD7yi76LraCquAh9lQV6dm6DdItEi1HMMov///yZmov///xMzP///8zNh////5mZsP8AGMzN/wAlGZr/AA8Zmv8AGoAA/wAIMzP/AHqAAKXM/wBkszOL/wBvzM0I9yL7Buj7FvsfICb7Jx6L//9/TM3/AFwzM///oxmZ/wB8TM3///ZmZ///yOZm///iGZn//83MzWD//+bMzf//3BmaCA4ygbJsrPdErPdVqBL3BNr3J+ATPPfm9+4VPWZvPx5p9zYGnpiXvx7EpHBPH/sn+3QV+OQKE7z45QoTfPjmCg77X3+sinb4SqwSsqt10Pcy2VumE6z33fhUFfjnChN0+OgKE6z46QoTqvjqCg4hiaz4H60Bo6b3M9r3KaYD97X3DhX46woOgIGs+CqsAfcA2veQugP4S/fmFfjsCg5cf+/36awB/wC25mb3/hX//+4Zmrv///LMzf8ADZma/wA+MzP/AAVmZpGRi6CFkWaKb4pii2iLe4xmjIWFi3aRhf8AOYAA///5MzT/AAJmZv//8MzM/wAUgABYCP8Ag5ma+9wFknqWdJ6LnYuSl5enCP8AiGZm99sF/wASmZq3lqTDkJGRi6CFkXWKeYpxi2aLc4xmjIWFi3aRhcGHkH///+uzNFgI//+VTMz7oAWKiImIiIuJi4qNiY8IDvddlHb4TawB/wKMmZj3/RX//5ZmaPu2//+agAD3vQX//++Zmrv////mZpTAj5GRi6CFkWaKb4poi2iLe4xmjIWFi3aRhb6H/wAHszT//+LMzP8AEeZm///TMzQI/wACMzT///iAAP///P/+///yzMz///szNP//8bM0CDf7e///nOZm96kF///vGZq8ipq7jpGRi6CFkWaKbIpni2WL///oMzOM///lzM2MhYWLdpGF/wAvGZr///szNP8ADIAA///2mZj/ABOAAP//yzM0CP8Ae+Zm++MFj4GXbp2LpIv/AAfmZp//AAcZmp8I3/eBBf8ACWZm/wAZ5mb/AAIzNIj/AAlmZv//5hmaCN/7fgWQfZVxqouli5alkJkI/wB1gAD33QX/AA6ZmP8AKOZm/wAS5mj/ABwZmr6OkZGLoIWRcoqCimeLZYtujGaMhYWLdpGF1od/bv//85mYaAgOYYmo+CqoAfdu+EMVnI0Fj/8AAIAAj/8AAoAAi5AIi52IjgWLMoltbVSNix6JiIt4BYuHk////Zmakv///2Zm/wAlszOI/wATMzNz/wAeGZpfCOj7HAWOh4yJi4iLiIqJiYgIMfsIBV5R///mszOG///nTM2I///2GZr///7Mzf//+uZm///9MzOLhQiLeo6JBYu8jaquw4mLHoyNi54Fi5CJ/wACTM2G/wAAszMIfI0F///fszP/AARMzf8AC5ma/wATMzP/ABCzM/8AGIAACM/rBZCSjo+Ni46LjomPhQjKNQX/ABsZmv//2szN/wAMMzL//+2Zmf//3LM0///6mZoIfokF///7GZr///8zM////OZm///9zM2LhgiLeI2JBYvPjbawxYmLHo2Ni50Fi5KG/wABGZqB/wAA5mZojv//8LM0/wADmZr//9BMzP8AQ2ZmCCr3HQWJjoqNi46LjoyMjY8I5fcHBbS9/wAOTMyW/wAoszSOkv8AAIAAkf8AAIAAi5IIi56JjQWLV4lpaliNix6HiIt4BYuGj////oAAj////4AACJyJBf8AILM0///8MzT///SZmP//62Zm///uszT//+hmZghFKQWHh4iIiIuHi4iPh5EIS+sF///igAD/ACsZmv8ADDMz/wAA5mb/ABlMzY4IDvsAiaz4IqwB92XaA/8BUbM09/4V+O0KDvsii634HK0BtKUD9wb4YBX//9/mZv8AABma/wACmZr/AAqAAP//7oAA/wADZmb///2Zmov///5mZv///2Zmi////Zmail6GYYJaCKWIBaDTraGoiwj3Jgb/AA/mZov///YzNP//8TM0///75mb///nMzAj7m/wOBYeFiIaLhQiFj4eWHvfrBo+qlrqcxQhwkn5uBXRWenBRiwj7Cwb//+fmZov/AACzNJb/AAlmZpkI94z3/gWaoI+Si5OLkYWPe4uAi3qIc4YIDjwO+5X3YMcBs/eWA/ej92AVKgoOcIms9yCt9593AfH0FfjVCub7hRX41gqb968VZAoOcIms9yCt9593AfH0FfjVCub7hRX41gqn96kV2woOcIms9yCt9593AfH0FfjVCub7hRX41gqn96gV9yoKDnCJrPcgrfefd9DAicIS+CamE+Tx9BX41Qrm+4UV+NYKE/Ta900VsgoT7LMKE/S0Cg5wiaz3IK33n3fV6gH3MenW6QPx9BX41Qrm+4UV+NYK+wv3TBWUCvc9FpQKDnCJrPcgrfefd7er9asB91uz67MD8fQV+NUK5vuFFfjWCpb3iRW2CjNWFdMKDs6JqHCt90qq90etcKgS9+DU9KXJpHilE3cA+I2tFUQGen+Rnh/3MMgHpYuTgZB2CI91BYyJjYiPiwidi42NBYijiJ+LpIujj6eNogiNioyJHnoGiIuJiYqHCIZ2BYZ3hH9wiwhO9zAGnJWRnh7RBsuLnlaWZgikjwWEsYSyirYIEy6AiY0FEzaAi0SJbR77HQYTLoA/M42LHxM2gImJi3QFE66Ai4qL///9szSR////TMz/ABqAAIj/AAaAAIWLf4tvUvsGe2tsT102d2uDff//7YAAev//3oAAiIf///+Zmon///1mZouICBNmgIt2BROmgIyJBRNmgIu0jZ4eE6aAnt2Jix8TZoCMjYugBROmgIuOiI2IjAiBjQVtlH+OlJ0I0/ckBY+TkZCeiwj3BPsvBot3///2mZr///ezM///4GZm///8TM0IeokFh////4AAiv///YAAi4kIE2aAi3UFE6aAjIkFE3aAi8eNsh73hAaMq5Ozl7wIcY4FfFl0Y06LCPt59/sVEy4AlqOYm5WLCJiUgGwf+yQqB32F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XYNclP///MzMlP///0zOlP8AAOZmn9OXn7iLCLYGqJVudR/7kQeLOICIToaFhYt2kYX/ACPmZv8AAOZm/wAYTM3/AADMzf8AIczN/wAAMzMIY///oBmakYUFm5CVjJ6LCA4hiaz3X7L3La0Bo6b3M9r3KaYD+An3pRU38Aail6inHqwGtouYd59D/wAKMzT///3mZv8ACTMy/wAAZmb/AAeZmv8ABLM0hLuKuIu3///3szT/AALmZv//95mY////gAD///ezNP///ZmaiYWCg3uLCPvVBnuLgpOJkf//97Mz/wABmZr///eZmv///2Zm///3szOKi1+LXYNclP///MzMlP///0zOlP8AAOZmn9OXn7iLCLYGqJVudR8lMWTl+wQHiziAiE6GhYWLdpGFtYyljLeLtoukiraKkZGLoIWRTo+Aj4veCPcE3wcOgIGs+CqsuKv1qwH3ANqYs+uzyroD97T5GRW2CjNWFdMK94P7khX47AoOgIGs+CqsAfcA2veQugP4cPkXFfcdCvsYkRX3Hgrq+8sV+OwKDvsii634HK2SdxK7pROQ95H5NhXPChPQ+x/7ahX49goTsPj3Cg77Iout+Bytknfv7xK7pfcF7xOc90/46xV1ChPcQvsfFfj2ChO8+PcKDvsii634HK2Sd/dldxK7pROY92f4lRX1ChPYKlYV+PYKE7j49woO+ziLrfflnLSsm9MB9wTa9zi3A/fn+LoV9gqz/LoV+OEKDiGJrPgfrfdTdwGjpvcz2vcppgP3d/iQFfUKyfwWFfjrCg4h+3aj2t2yrPgfrRKjpvcz2nqy9xOmE/v3jWIV9xEKE/2z9zcV95AHopeopx6sBraLmHefQ/8ACjM0///95mb/AAkzMv8AAGZm/wAHmZr/AASzNIS7iriLt///97M0/wAC5mb///eZmP///4AA///3szT///2ZmomFgoN7iwj71QZ7i4KTiZH///ezM/8AAZma///3mZr///9mZv//97Mziotfi12DXJT///zMzJT///9MzpT/AADmZp/Tl5+4iwi2BqiVbnUf+5EHiziAiE6GhYWLdpGFtYyljLeLtoukiraKkZGLoIWRCE6PgI+L3ggO+1/7dqPa3aisinb4SqwSsqt10O+yntlbphPrgPfd+FQV+OcKE92A+OgKE+uA+OkKE+tA+OoK+xr8fRX3EQoO+7iJrPgirODvEuPvP9oT8OP46xV1ChPo8vuZFfjfCg6Vf8H3rLbkdvCyAbXRksL3ZKbAswP4PPfWFaGbfHNDSvs9+xn7F3b0yr+3x7sf9gaamJuZkoeRfx8tBmZ5qL2pocfUH8mLsVmYWAimkAWFrYS/i6dyi2ygYYv7CYtNPItKi2+ScqJtVmNVRotCi/sA3Ef3D4sI9xWL9wTcmveRCMoGmpibmZKHkX8f+yEGfH57foOPhZcfDjKJqPc/q/dbqgH3N/dRFZCUmoumiwjlBqaLlYmNgQif+wUF/wAFTMz//+AzM////WZo///4zM3//9ZMzIUIhIoFh4qJiYuICIt2jYkFi8uNp6nOiYsejY2LoAWLjoj/AAKzM4f/AABMzWiOe5GCtghH99gFh57///3MzP8AB7M0/wA4MzT/AARMzI7/AAAzNI3/AALMzIuOCIufio0FVopBil6LXYtsjGuMCIiJi3cFh46JkR6sipSHi3iLayv7mXdYgG97g3CIh////5mahv//+2Zmi4gIi3iNiQWLw42nqryJix6NjYugBYuOiI2HjAh/jQVtkP//+LMz/wAEgAD/AAPMzf8AEIAAi4v/ABrMzf8AYuZm/wANszP/ACMZmgjm94QVoYv/ABCAAP//92Zm/wAHgAD//92Zmgij+xQF/wAD5mZ2///xGZqEeYsIOAZvg42UH4uLrfcHmLOSoJGXnYsIDvu09/qr93KkAaq/9wHBA/dU+IoVlwq2+yQVmAoO+773+qX3bKrRoAG+vPcLwQO++R8V+KQKvEIV+KUKDvvN9/qrtnf3WaYBpsH3CsED9zH5ERX4pgoO+7P3/qSHnfdgpdGgEqjB9xG8E7z3ZPg2FfinCrz7EhX4+AoTfPj5Cg77tPf7qrZ39KfNpAGmwfcGxAP3MfgaFfh0CrH3MBX4dQoO++r4AKL3Sqj3CKQB07wD0/g1FYt5///6zM3///mAAP//6zMz///8gAAIf4kFiP///4AAif///4AAi4cIi3qNigWLtIyho8GKix6MjIucBYuPiP8AAMzMif8AADM0CHaNBf//7MzN/wABzMz///kzM/8ACDM0i50I9yzGB5GTjZEfnQeNiYyIHkeVBuqjlp8enYuVhJN3kICVg5eLl4uWlouXi5aEln6UfJZ7kXSLCFdWXisfbAaAiISGH30HiYuKjh61Bg77rPd/qe22u6H3H6ESnLRyvV2w9wm+kK0T9YD3nvjsFZeWlZmXfphyH3WLeYJ7eYKReJRui1eLVmmLUotqnHicewgT84D4+goT+YD4+woT84B6eJClHxP1gPj8CvtP+30V+P0KE/mA+P4K9wT3QxVNb4d1HhP1gPj/Cg77qfgAovdxotGgAcK8A8L5HxX7gAeLdv///0zNiP//57MziAiDigWH////gACL///9gACLiQh5B4v/ACUzM4z/ABfMzf8AGJma/wAmZmaKix6dB4uPiP8AAMzMif8AADM0CIOMBf//7rMz/wACMzT///hMzf8ABEzMi/8AFIAACP8AT2ZmB/8AAczN/wAAZmb/AAGZmf8AADM0/wABmZqLmouSgJSACLhLBZd6jYeLhQiLe42JBYubjKGjsIqLHo2Ni5sFi46H/wABmZqH/wAAZmb//9+AAI7//+6AAKKElQhM6AWJjYqOi46LjYuOjY0IsLUFoaP/ABuAAJP/ABiAAI6N/wAAMzSP/wABzMyLjgiLnImMBYtjinN1bYyLHoqKi3oFi4mN///9TMyO////szSriHt6g4P//9+AAP//2zM0///rMzP///CAAP//5UzN///0GZgI/wCUMzQHtY2lix6QiY2FHnuEXYNxiQiMeQWJjYqNHqCKBZiRhGEfDvsC+ACi92igeq0Szbz3BLuGkPa8E7r3B/jeFf8AGzM0jf8AEMzMix6QiY2FHhPae4Rdg3GJCIx5BYmNio0eoIoFmJGEYR/7GgeLdor///1mZnP///yZmgiEigWG////TMyL///9szSLiQh5B4v/ACUzM4z/ABfMzf8AGbMz/wAoTM2Kix6dB4uPiP8AAMzMif8AADM0CICMBf//8IAA/wABZmb///aAAP8AA5mai6EI9yMHE7qeoqChoIsIqp96WB/7DAeL///pTMz///qZmv///Zma///rZmb///4ZmgiAigWI////szSK///9TMyLiQh5B4uyjKT/ABgzNP8AJczMiosenQeLjf///+Zm/wACMzT///sZmv8AAMzMCIWMBXj/AAMzNIT/AAKAAIv/ABVMzAj3FgeLkf///8zM/wAFszT///+AAP8ABUzM/wASGZr/ABWAAP8AE8zO/wATgAD/ABPMzIsIqZ96WB/7DAeLdIX///2zNHj///5MzAiAigWH////mZqK///9ZmaLiQh5B4v/ACeZmoz/ABlmZv8AGDM0/wAlzMyKix6dB4uN///+5mb/AAJMzP///Bma/wAAszQIhYwF///tGZr/AAMZmv//+OZm/wABMzKL/wAWszQI9xYHzm2kXh7//9xMzIv//9xmZv//3Zmc///xszT//+7MzP//9hma/wAk5mj//+azM/8ADrMw///czM2LZ4tqaH16CA77tPf7pPd4pAGixvcgxgP3LPkRFTJjQERLukfc/wBTGZr/AC7mZtHM/wBIGZhm/wBG5mgvH9H7NhX4dwoO+7b3gqL3AKX3YKB3qhLDvPcLwRPcw/i5FfuYB4t3///9mZr///wzNP//6WZm///8zMwIhIoFh////2Zmiv///pmai4kIeAeLsIyjpbOKix6dB4uPif8AALM0iP8AAEzMCICMBf//8Rma/wABZmb///XmZv8AA5mai6EI7weZf5+Dn4sIzMHH1c9jx1Efbov//+OAAG////CAAHkIiYwF/wAbMzSN/wAQzMyLHpCJjYUeE+z5AAq8MhXtBxPc+QEKDvuz94Ki9wCl92alAajB9xG8A/dk+DsV+KgKqcoVcnMFfJxxlG6LCD5mP0s+v17NH6KLnpaemwggB4t1///1Zmb///xMzP//8Zma///+szQIgIoFiP///7M0if///0zMi4cIeQeLs4ylo7CKix6eB4uNiv8AAWZmh/8AAJmaCISMBf//5+Zm/wADgAD///8Zmv8AA4AAi58I9+cHkYmOiB6Hi4WGh4gIDvwZ9/qu92WoEsW7ZbET4PX47hX5AgoT0PkDChPg+QQKDvuo9/qugZ33Y6ISwbz3BLwTuPec+EwVi/dSiowFi32Kgv//5kzN///XszOMix6Kiot6BYeOio4elQaclId1H/s4B3h1dYh2iwhtd5u+H4v3PoqMBYv///KZmor///dmZv//58zN///aMzOMix6Kiot6BYmMiI8ekgaeipGKi3MI+xgHSKlyuB6wi66bmZwIjYuJapuLBRN4+PkKDvut+PSiAZf3tgP3HfgHFY6EkIWQi5KLlY6Plgjh91wFmauWj5iLCI+PjI8fi5yKjAWLdYp4dmiMix6Kiot6BYmNiI2glYiAHouGiYWHgghJ+ypK9y0FiJKJkIuQCJWSj5MelgaNjo2OH4uciYwFi2eKeHhkjIseioqLegWHjYqOHp+L/wAE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hF2DcYkIjHkFiY2KjR6gigWYkYRhH/uAB4t2///+mZqI///oZmaICIOKBYeLiIkfeQeLsIyjpbOKix6dB4+IjIkegIwF///uGZr/AAGZmv//+OZm/wAEZmaLoAj3HQeeoqChoIsIqZ96WB/7BgeLdv//+czN///7szP//+0zM////kzNCICKBYeKiIkfeQeLs4yko7GKix6dB4uNio2HjAiFjAX//+wzNP8AA0zN///5zMz/AASzM4ueCPcQB85tpF4eZ4toaH17CA78JfsDqPdhoMjFEtPFWbsT8PD3mxX4ZAoT6Kb7vxX3HAcT8PhlChPo/wAgZmb///6AAP8ACpma/wAEszOL///KzM0I+wEHi2J+iGOJhoOMfI+FqYz/AAqzM4v/ACNMzYupi5uLqYqPkouZh5MIaY16jou0CA78GPtpnvfRoMnEEou7ssdYvBP49wn3mxX3fwoT9Hb7UhX3gAoT+PeBCg77qfsEovdxotGgAcK8A8L3QxX7gAeLdv///0zNiP//57MziAiDigWH////gACL///9gACLiQh5B4v/ACUzM4z/ABfMzf8AGJma/wAmZmaKix6dB4uPiP8AAMzNif8AADMzCIOMBf//7rMz/wACMzP///hMzf8ABEzNi/8AFIAACP8AT2ZmB/8AAczN/wAAZmf/AAGZmf8AADMz/wABmZqLmouSgJSACLhLBZd6jYeLhQiLe42JBYubjKGjsIqLHo2Ni5sFi46H/wABmZqH/wAAZmb//9+AAI7//+6AAKKElQhM6AWJjYqOi46LjYuOjY0IsLUFoaP/ABuAAJP/ABiAAI6N/wAAMzOP/wABzM2LjgiLnImMBYtjinN1bYyLHoqKi3oFi4mN///9TM2O////szOriHt6g4P//9+AAP//2zMz///rMzP///CAAP//5UzN///0GZoI/wCUMzMHtY2lix6QiY2FHnuEXYNxiQiMeQWJjYqNHqCKBZiRhGEfDvxG+wSi986gAcK8A8L3QxX7gAeLdv///0zNiP//57MziAiDigWH////gACL///9gACLiQh5B4v/ACUzM4z/ABfMzf8AGJma/wAmZmaKix6dB4uPiP8AAMzNif8AADMzCIOMBf//7rMz/wACMzP///hMzf8ABEzNi/8AFIAACPeNB7WNpYsekImNhR57hF2DcYkIjHkFiY2KjR6gigWYkYRhHw77AvsEovdooHqtEqHoWrz3BLv2vBOu9wf3AhX/ABszM43/ABDMzYsekImNhR4T1vkHChOumJGEYR/7GgeLdor///1mZnP///yZmgiEigWG////TM2L///9szOLiQh5B4v/ACUzM4z/ABfMzf8AGbMz/wAoTM2Kix6dB4uPiP8AAMzNif8AADMzCICMBf//8IAA/wABZmb///aAAP8AA5mai6EI9yMHnqKgoaCLCKqfelgf+wwHi///6UzN///6mZr///2Zmf//62Zm///+GZoIgIoFiP///7Mziv///UzNi4kIeQeLsoyk/wAYMzT/ACXMzIqLHp0Hi43////mZv8AAjMz///7GZr/AADMzQiFjAV4/wADMzOE/wACgACL/wAVTM0I9xYHi5H////MzP8ABbMz////gAD/AAVMzf8AEhma/wAVgAD/ABPMzv8AE4AA/wATzMyLCKmfelgf+wwHi3SF///9szN4///+TM0IgIoFh////5maiv///WZmi4kIeQeL/wAnmZqM/wAZZmb/ABgzNP8AJczMiosenQeLjf///uZm/wACTM3///wZmv8AALMzCIWMBf//7Rma/wADGZr///jmZv8AATMzi/8AFrMzCPcWB85tpF4e///cTMyL///cZmb//92Zmv//8bM0///uzMz///YZmv8AJOZn///mszP/AA6zM///3MzNi2eLamh9eggO+5H7A6j3YaB6rRLOu/cEuxO493dnFYtiiYhpiYeDi32PhKmMkouji/8AI0zMi/8ABbM0i6mKj5GMmoaTY42Djou0CPQHzm6kXR7//9wZmoto///dGZp9ev8AAGZm/wAXszP/AAGAAP8AFTMzi4uLkImNhYsIE9h7hFyDcYmKg4yEj4X/ACBmZv///oAA/wAKmZr/AASzM4v//8rMzQj7AQeLYoOIY4mGg4x8j4WpjP8ABbMzi/8AI0zNi6OLk4upio+Si5mHk2mNiI6LtAj3CgcTuPhzCg77tvuCovcApfdgoHeqEsO89wvBE9zD1BX7mAeLd////Zma///8MzP//+lmZv///MzNCISKBYf///9mZor///6ZmouJCHgHi7CMo6WziosenQeLj4n/AACzM4j/AABMzQiAjAX///EZmv8AAWZm///15mb/AAOZmouhCO8HmX+fg5+LCMzBx9XPY8dRH26L///jgABv///wgAB5CImMBf8AGzMzjf8AEMzNix6QiY2FHhPs+QAKvDIV7QcT3PkBCg77s/uCovcApfdmpQGowfcRvAP3ZFYV+KgKqcoV+KkKDvvx+wOi92WzZaASqehavBPI9xHxFYmMBf8AGzMzjf8AF8zNix6QiY2FHhOw+QcKE8iYkYRhH/sbB4t4///+GZr///tMzf//6OZm///+szMIeYoFhoqJiB95B4u4jKeouIqLHp0HjoiNiR55jAX//+zmZv8AARma///5GZr/AAPmZoufCPcSB4uTj5SPkJuimpeSi4+LkImPh5GEk4eXiwidlpScnYGYcB9si3BpenIIDvvq+wqk93mkEqehfLviwW+iE+ineRX3jAoT1GmZgZSLo4umoJiki56LrYGZUQiijILWBYCSZJVsi1qLXmuLYYte/wAfGZr///BMzf8ALeZm///sszMIE+j3jQoO/Bn7Cq73ZagSxbtlsRPg9fcSFfkCChPQ+QMKE+D5BAoO+6j7Cq6BnfdjohLBvNHmWrwTtPecZxUTuIv3UoqMBYt9ioL//+ZMzf//17MzjIseioqLegWHjoqOHpUGE7SclId1H/s4B3h1dYh2iwhtd5u+H4v3PoqMBYv///KZmor///dmZv//58zN///aMzOMix6Kiot6BYmMiI8ekgaeipGKi3MI+xgHSKlyuB6wi66bmZwIjYuJapuLBRN0+QYKDvut9xiiAZf3tgP3HSIV+KoKDvsq9xiiAfcT9x0V934KDvuV+4K0992jAZz3ygP3JvceFYubio0Fi2GJbnhnjYseiYmLegWJjoiOHqaL/wADmZr///ZmZv8AC2Zm///mmZoI1/s9BZB+kHuLhIuFioaIg3tleGuCi4WLhpCFkYeQhY6CiwiBeIJ5dKqBlx+3i6Kxnre99w2mx63Rk52XnqOLCJCNjY8fi5uJjQWLcYl6dWGNix6KiYt6BYmOiI4ejgaZlomCH4uIioSJhwhH+ylJ9ysF///+MzP/AAQZmv///szN/wAF5maLjQiTk46djo+Njx4O+9X7BKn3ZKgBoqED0fcvFfirCg74z/cMAfu592gD+235RxX//93Mzf//9GZo///of/////BMzP//7bM0///uTMwI9y5MBaCCmYiTi5OLkpKLk4uSh5GAkwgO+M/3DgH7vPddA/sx+UkV9xcKDvuR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D+ZmCAv//93MzP//5Jma///bTM7///6AAHmLCC5567rzs7q5x8hr+zYfi///62Zmif//55ma///65mb//+XmZggLbqNzqKijo6ioc6NuHm5zc24fC2x1dm8fi///4IAApf//9oAAnYgIC56JnIWLdIt2Z11XfouBjYSShMeWxbuL0QjHcbJjHgv30fcHBZiZjKl9kQj8GvshBf//9rMz///uszOLe/8ACUzN///xTM0I+Br7IgWZkYqpfpkIC/wfWvgfBgv70fsHBX59im2ZhQj4GvchBf8ACUzM/wARTM2Lm///9rM0/wAOszMI/Br3IgV9hYxtmH0IC///6czNi///+MzN/wACgAD/AAQzM/8ACszMCP8AZDMz/wD9szSNi+z7nwULwvclBZCYkY+jiwj3ZIvI+z0F/wAO5mj//9bMzf//1rMy/wADmZn//9BmZv///JmahYWLdpGFsIzCjLKLtIuvirCKkZGLoIWR///ZMzT/AAOAAP//30zMi///7YAA/wAzgAAI+2H4sgX///izNP8AE0zM///6TMz/AAqzNH2L///xTMyL///4Zmb///cZmP//9Jma///lMzQI//8hszT//fezNAX//+WZmv//wjMz///h5mb///nMzf//1IAAiIWFi3aRhbCMmIyyi7SLvYqwipGRi6CFkf//2mZm/wACmZpc/wAETMz/AA+Zmv8AKRmaCAusi5Xiw9RtJTZQbTgeQQYL9x3EPjFCb077LEV+rawfC1mLboxZjIWFi3aRhdGInIaLOAj8JQeLOHqGRYiFhYt2kYW8jKmMvou2i5mJ5Iv3W4vA74vhi+tIwjSkCI0HC/8AMhma/wAZZmb/ACzmZv8AM0zOi/8ANkzMi85u4vtOi2iLXIlgiwgL7Ivkuc/khpSEkYCLRD1HbC6L+y+LQvcxi/cmi/8AVkzM/wAW5mb/AELMzv8AJIAA/wAs5mb/ADGZmsjFp7+LCPcei8I5pTWXh/8ACbM0jv8AC0zMkYa/g7uCwliQXrP7D4s2i0RsUFX//72Zmv//wzM0///YZmb//6MZmIv//5ezNAj7NfT7OPdrHgv4dQeurpm892zS+0P7Lvte+w1Z+yEpgJ6rHgtZi26MWYyFhYt2kYXRiJyGizgI/CUHizh6hkWIhYWLdpGFvIypjL6LsIu1ifKLCPch907L94r3Tvst9y37VB9Li02JZIsICzD3XAajl5+jHvQG1oubY6FG/wAMZmb///4zNP8ACszO/wACGZj/AAnMzP8ABLM0hrR864mTi42KjIiLeoiDinOLCPuTBguLizyMWYyFhYt2kYXRiJyGizgI/CUHizh6hkWIhYWLdpGFCAu8jNyMi4sI92sGC3dDaFA/iwj7HAZ1fZumH/eF5gfgi450jl6RhaCLkZGKroqei62LrYyhjKmFkXaLhYUIiFSIfjaLCAuLizyMWYyFhYt2kYXRiJyGizgI/CUHizh6hkWIhYWLdpGFvIypjL6LvYuoir2KkZGLoIWRRY56kIveCPddBwv3JYu8OaU1CK2RBYK1hbOE0whPi2e4+w6LCAv4JQeL3pyQ0Y6RkYughZFaim2KWItZi26MWYyFhYt2kYXRiJyGizgI+zT76vc0B4venJDRjpGRi6CFkVqKbYpYi1mLboxZjIWFi3aRhdGInIaLOAj8JQeLOHqGRYiFhYt2kYW8jKmMvou9i6iKvYqRkYughZFFjnqQi94I91v36vtbB4s4eoZFiIWFi3aRhbyMqYy+i72LqIq9ipGRi6CFkUWOepCL3ggL+CUHi96ckNGOkZGLoIWRWoptiliLWYtujFmMhYWLdpGF0Yichos4CPwlB4s4eoZFiIWFi3aRhbyMqYy+i72LqIq9ipGRi6CFkUWOepCL3ggLi96ckMeOkZGLoIWRWopzilyLVYtojFmMhYWLdpGF24ichos4CPxOB/tIV29qHn2L///yTM2T///4szOV///2TM3/AA0zM///+7Mz/wAUzM1siwh9bXZ1Z8B5oR+4i6qTtK7/ACuzM/8AJUzN/wA6TM3/ADOzM4v3IwgL/wC65mYH/wAhmZqK/wAaZmb///TMzp///+ZMzAj3N/taBf8AE+Zm///nzM3/AAAZmv//5WZmi///7czNi4iMiI+Ln4ycjKmLsouairqKkZGLoIWR///uGZj/AAKZmv//24AA///9zMz//95maP8AKZmaCPtv95gFgpWIkouTi5L/AARMzP8ABrM0/wAgszT/ACNMzAj3IPcrBbm8t42zkJGRi6CFkVyKg4pji2OLcYxcjIWFi3aRhf8AJBma///8mZiz/wAEzND//8/mZv//ypmYCPs8+0QF///r5mZ2///rGZr///FMzGiICP8Ar7M0B4venJDRjpGRi6CFkVqKbYpYi1mLboxZjIWFi3aRhdGInIaLOAj8JQeLOHqGRYiFhYt2kYW8jKmMvou9i6iKvYqRkYughZFFjnqQi94IC/8A1LM0Bgv/ABtMzOeJix+VvZXMkb////YzNP8ABLMz///1MzL/AAIZmv//85ma///+MzMIC3dDcFA/iwj7BQZueZ6qH/hGB4venJDRjpGRi6CFkVqKbYpYi1mLboxZjIWFi3aRhdGInIaLOAj8JQcLizh6hkWIhYWLdpGFCLyM3IyLiwgLkDr///xMzIpKiIWFi3aRhbqMqYypi6mL/wAtzMyK/wAhMzSKkZGLoIWRR46I/wAEMzP///oZmP8AUszNCP//4jM0+DkF///8MzTB/wAEgACZz4+RkYughZEI+xeJ+2j8jwWHgYiHiYuIi4qPh5QI+2H4kPsljQWFhYt2kYXQh5GJhEAI///X5mb8MAX///oZmv//xBmaf///5uZmUoaFhYt2kYWpjKuMo4uji7OKqYqRkYughZFJkP//+rMz/wAeszP/AAVMzf8AOEzNCLH4JY2L92P8mwX/AALMzP//+OZm/wAGMzT///wZmpGLkYuPjo+TCPd1+KWNiwUL++IHeIuAhB6Di4CdbrAI++v4TvsbjQWFhYt2kYW2iKlokXEI/DUHizJ6hUWEhYWLdpGFvIyejLeLtoudir2KkZGLoIWRRZJ6j4vmCPfGB62LmpMekYuWgJx1CPfx/E0FC5Z8mIKbiwiZlJeeH/h/B4vknJHRkpGRi6CFkVqKeIpfi2CLeYxZjIWFi3aRhQjRhJyHizAIC/cc8iH7ZPtHNSD7BvsM+wn3A/dU92b24uYfC/da+yf3F/tD+0f7FPss+1j7Wfch+w/3QPdT9xH3H/dcHguydwWfubGYmovoi8os9xaLyou1pbLDCHqXBXVwZ4FuizOLOt37AouFi///+UzO////gAD///jMzIr/ADEzNP8AJBma/wAwszL/ABSzM/8AIJma/wAJTM3/AJ2Zmv8AGZmZ/wBjzMz3Fov/ALLMzQj3Wvsn9xf7Q/tH+xT7LPtYHov//0rmZv8AdzMz//+JgAD/AJjMzXlD///aMzT//79Mzf//xLMz///eszP//8+zMwgLyNN1+wr7EURvKh9b93kGqJeu0h4L9z0H34v/ABKzNP//8UzM/wAOTMz//+izNAj2+0IFC/8AHLM0///RZmb/ACtMzP//1Zmax4uai5yNlZD/AAOAAP8ABuZm////gAD/AAkZmoeTXoty/wAhmZpx/wArZmYI+xL3ZgW2meW/i/SLvXq0Z61buE2OTItyi02EZYtZi26MWYyFhYt2kYUI0Yichos4CPwlBwuLOHqGRYiFhYt2kYW8jKmMvou9i6iKvYqRkYughZFFjnqQi94IC4vempDYjpGRi6CFkVqKaopWi12LdIxZjIWFi3aRhceInIaLOAj7swf7YPckYeX3Ybz3E/dGHvd4B4venIzHkpGRi6CFkVqKfopji16LdoxZjIWFi3aRhdaEnIqLOAj7igf7BHz7Gvs9HluL///XGZr/ABUZmv//4eZm/wAc5mZauonXi8wIC9WG/wAAZmj//+VmaP//6pmY///JmZgI//9iGZr8Jf//+2Zmi///YOZm+CsF///ozM3/ADuAAP8ABczN/wANgADPkpGRi6CFkVyKaIpki2OLeoxcjIWFjHaRhcSGj37/AByAAEII/wDFgAD8lAWR///wZmaS///4mZqVi5aL/wAHMzT/AAizM/8ABczM/wAOTM0I/wDOszT4kgX/ABMzNP8AL0zM/wANGZj/ACWzNM2TkZGLoIWRY4pyinSLdItkjFyMhYWLdpGFCAv7M/xciYv7JPhRBf//7pma/wA15mj/ACNmZv8AAxmYrY6RkYughZFcimiKY4tki3aMY4yFhYt2kYXAiP8AGZma///g5mj/AAhmZv//5hmYCJpdBf8AA+Zmf/8AARmahIuCi37///3MzP//87M0///7MzT///NMzAj7EvvfiYv7KvhhBf//9Jma/wAjMzT/ABpmZv8ABMzMro2RkYughZFqimKKZItji36MY4yFhYt2kYW4iJb///6zNJ3//8pMzAj3Svy0BZB7loOai5mLlJWQmQj3H/f6BY+XkJiQi4+L/wAFZmb///HMzP8ABJma///yMzQI9wn79wWRepeEmIuZi5OTkJoI91n4sgWXrp6iwo6RkYughZFminOKcYtxi1+MY4yFhYt2kYW0iP8AJ+Zo///8szT///EZmP//1UzMCAuLh/8ABhma///+szT/AAnmZv///kzM/wARgACI/wAegACDtFEI9yT7YQWUgJCCi4GLhYeChYMI+x37TwV1bWhfUYiF////szOG///+TM2LhgiLd4yJBamMo4yp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hYCIkIuQi6uQu4uLi4+GjoOLCAtvgGOCRoKJhYt7j4UIwYaWg4tUCAuPWo5ci2GVjZWMkIuSi5GLkokIC6aEpoewi8OL8qaL7ov/AERMzf//zszM/wAnMzP//7wzNP8AGbMzT/8AFszNY5qLwou0r6KtiwgLoYvFg5g2kYWfjJGRi6+QsIysbJBbmVeLQYtIW4tLi0KsbNhrCAv/AFLMzf//3Zma/wATMzP//+tmZotgi1pbdmaLZIt1mIGWc6KCt4WkCIWReIqFhQgLfYd/gx9+B4aMio8exvvBBkSqb7keuYu9obK3if8ACkzNhf8ABbMzgYxxd22DcYsIcIWpyR/3kfMHlZmPlB+fB4+IjYYe+wyyBsyPs4sekoeOgh5R///lszQFhf///EzM///3ZmaJ/wAAmZqE/wACGZr//+kzNP///+Zm///2zMyL//+tGZoIC8GH/wAFmZr///PMzP//6xma///NMzQI//+vTMz7WAX//+/MzP//2IAA///6zM7/AACzM///8GZm/wApzM0I//+35mb3VQX//+4Zmrv///LMzf8ADZma/wA+MzP/AAVmZpGRi6CFkWaKb4pii2iLe4xmjIWFi3aRhf8AOYAA///5MzT/AAKAAP//8GZm/wAUZmb//81mZgj/AH+ZmvvQBZF8kYWYi5WL/wAG5mb/AAZmZv8ABxma/wAQmZoI/wCFZmb3zQX/ABKzNP8AK+Zm/wAK5mb/ABkZmsOQkZGLoIWRdYp5inGLZot1jGaMhYWLdpGFCAuRkYughZFmimyKZ4tli///6DMzjP//5czNjIWFi3aRhf8ALxma///7MzT/AArmZv//9czM/wAVGZpXCP8AguZm+9cFkX2ThZWLlIuTkZKbCPD3ivL7jAWRfZOFlYuUi5ORkZoI/wCCgAD30QX/ABDMzP8AKLM0/wAQszT/ABxMzL6OkZGLoIWRcoqCimeLZYtujGaMhYWLdpGF1of///WzMP//4xma///x5mj//9zmZgj//6xmaPtkBYFy////MzT///gZmv//9JmY/wAc5mYI//+pszT3bwX//+2AALqNlcCPkZGLoIWRZopvimiLaIt7jGaMhYWLdpGFvof/AAezNP//4szM/wAR5mb//9MzNAj/AAZmZntF+0UFfmr///3MzP///oAA///zGZr/ACCAAAg792IF///tTM3/ADAZmv8AAMzN/wAP5ma7jggL///nTM3/ACYzNP8ACmZmh/8AK0zN/wAFzMyRkYughZFmimmKbYtti3iMZoyFhYt2kYWtiP8AG+Zmev8AHBmaYgji+xMF/wAC5mb///uzM/8AAxma///7TM2GhQg3+wAFYVV3i2iJhYWLdpGFsIyKjK+LsYuUirCKkZGLoIWR///lZmb/AAPMzf//70zN/wAFZmb/ABVMzf8AHszNCMrmBZL/AAqAAP8AAszN/wABzM3/AAgzM///9bMzCMU7BbBYef8AA0zNa///+rMzhYWLdpGFsIyqjK+LsYuUirCKkZGLoIWR///ggACO///nTMz///4zM///1DM0/wA9zM0IMfcTBf//+oAA/wAITM3/AANmZv8AA5mZ/wACGZr/AAMZmgjf9gWwuv8AF4AAkP8AJIAAjpGRi6CFkXKKe4pri2yLe4xmjIWFi3aRhf8AIWZm///7zMz/ABAZmv///uZo///mgAD//9xMzAhKMAX///wZmv//+zM0///65mb///jMzIGZCAv/AA+Zmv8AG8zN/wANGZn/AByZmf8ADEzN/wAdmZr/AFBmZv8AwOZm/wArmZr/AGcZmsD3BJmoqauwjpGRi6CFkXKKeYpvi2iLeIxmjAiFhYt2kYX/AB+Zmoj/ACAZmv//+jM0///wTMz//9vMzAj//5zMzPt5BYT//+/mZv//95ma///9TM3///eAAP8AE8zNCP//p0zN92QF///t////ACozNP//9YAAnf8APUzN/wAEzMyRkYughZFmimOKZ4tpi3CMd4yFhYt2kYX/ACuZmof/AAfmZv//+LM0/wAbZmb//8BMzAj/AHEZmvubBf8ACLMz///r5mb/AA9Mzf//0hmagW////QZmv//3pma///z5mb//+RmZnxsgHd9gnKLfYuHjoCLCG58bX52n3umH6CLs5OvywgL///9mZr///xmZv///GZm///9mZofil6FZYNa/wAIzM3///xMzP8ADJmZ///+GZr/AAuZmv8AApmaCAuf1KqgqYsI9x6L+4r7/wWDf4qIi4YIhJOGmh73zAaQqpW6nMX///mAAP8AA7Mz///0gAD/AANMzX+LCH5uBXNWenBRiwj7GYv3hPf1BZylkJeLjwgLj4aOhB4LhotrhG6LCPtfBv//3+Zmi/8AAJma/wAJmZr//+6AAP8AA2ZmCAv/AAWzM4j/AAVMzYqRi6K3uqiui6SL/wAXzM3///IZmv8AGDMz///t5majeah8oouji8yYqvb///yzNP8ABBma///6TMz/AAHmZoOLCHVZWnpvi3WLdJhwn///54AA/wASMzT//+SAAP8ADczMdItOi1VMfkoIC6OonsEfi9F9roLjg9mF5YmgipGIkoGLgYuIgoqAiX3////MzU////MzM/sA///1zM01///yMzNhi0oIVah4ox4LqHOjbm5zc25uo3OoqKOjqB4LcaB2paWgoKWldqFxcXZ1cR4L9zD3F/cT9zD3MPsX9xL7MPsw+xf7Evsw+y/3FvsU9zEfC/cf9wD7A/sf+x/7AfsE+x77ICD3Bfce9x/29wP3IB8LPAdxdHqBdotpi4Cfi6CLqqOd4KEIC56LnpeUlf8AAJmak////LMy/wAFTMz///izNP8AArM0iIiGiYeLCIKGm7Qf1gfpUp9aYU1qY3yWgZqekpiTHouQipCKjYqNio+LkgiboJasoqqDQB5RfAX//8EZmv//77M0///X5mb//+RMzIthi2CucLWLrIudlK2pjnmZdqSLCAu1tLC7v9oIcqMFTD9kYE5ai4t+gISGCHsHkoaYgIuLyFqyYMo/CKSjBVfaZrthtAgLaXNoYmFzra6voq+2uJ9kah4LVLhewsK3uMLDX7hUVF5eUx4L/wAIgAD/ABqzNP8ABjM0/wAfmZj/AARMzP8AI7M0///6szT/AAOzNIP/AAGZmP//9UzM////szSAb31kbIsIOAaUrJqmtakIC8OzrKyLuQjLUZ5ZPG9YcR5+mYCXHguLYnBxX4X///1Mzf//9uZo////TM3///SZmP8ABWZm///5gACTjJCMkosIC6O+h1JLX35uH2uL///3szP/AAaAAP//+kzN/wALgACFl4GQfYsI///zszP///OAAP//9xmY///yszT//+CAAP8ARpma///0szT/ABozM9vGudAfi8VcpmqOCAuom6Gii6gIsGqhVzRwW3qIj3yeHqKL////MzOd/wAEzM2Wkpunk5yLCJuhg3EfC///tGZm+wsF///35mf///MzNP///LMzh4v///TMzIuEkoWSi5KLk4+amgj3B/cBiJYFdKH//+ZmZoz///mZmouGi4WKiIoIC6elpaencaVvb3Fxb2+lcacfC6KVfXZxdn1tH3eLgI9wlYSEiISLf6SAnIWriwjIuaq2sWyjYx+Ci4KKg4kIpM5pi2MrkYUFm5CVjJ6LCAuXjYJrH/sWB4tYbIhjiYaDjHyPhamM/wAeszOL/wAjTM2LrIugi6mKj5KLmYeTaY12jou+CPeDB///+rMzkP//+Jma///95mj///qzM////RmYX3Bxf1x6i3//AAIZmv//9xmY/wAH5mb///nmaKSUnpGYiwgLYWJmW1c8CKRzBcrXsrbIvIuLmJaSkAibB4SQfpaLi068ZLZM1whycwW/PLBbtWIIC/xf/SO1g/he+SMFC4tifohjiYaDjHyPhamM/wAKszSL/wAjTMyLqYubi6mKj5KLmYeTaY16jou0CKO9B5GtU4uL4AWUg4yFHoSLf4CEgomIhYKLhQhSLwehrcreuNAIbJX7Lvtuj3/3I4sFC/xe/SO0g/hf+SMFC52rhFwfi1VzdF5nW2ZlYYtbCPdiBgv/AAiAAP8AGrMz/wAGMzT/AB+Zmv8ABEzM/wAjszP///qzNP8AA7Mzg/8AAZma///1TMz///+zM4BvfWRsiwg4BpSsmqa1qQgLw7OsrIu5CMtRnlk8b1hxfpmAlx4Li2JwcV+F///9TM3///bmZv///0zN///0mZr/AAVmZv//+YAAk4yQjJKLCAttY3NSUmXEzB6Lupqos7D/AEBmZv8AO5ma/wAFmZr/ADpmZou2CLkHkoOOg4OCiIQeXweLc4pzfnKCend7dHpcaU1fizyLMM1P8YvAi7WZqKSpo6Cni7EIrnKTe3h3f3Qei36NhY+GCI+GjYWLfAgLqHOjbm5zc25uo3OoHqijo6gfC///3czN///0Zmj//+iAAP//8EzM///tszP//+5MzAj3LkwFoIKZiJOLk4uSkouTi5KHkYCTCAv7EDUFfoKJhouEi4ORhJSLlIuXjqCUCPckxQX///NMzP8AFUzM///rTM7/ABFmaP//42Zm/wANTMwIC///8Jma/wAHszT///ZmZv8AALM0ff//95mYbGlqaGZvjYKOhZSFsZyrnLCmrHKtebJ5/wAJGZr/AAPMzP8ABBma/wAIGZz/AALMzP8ACRmYCGemZq1trwgLeIt6knuXCAt3mXWfbYtgi3RkfVCRhZWKlo2VrJWapYuci56DnYAIC6B9oHmhi7mLqLKXx4WPgY6Aigh9YYCBdYsIC3GhdaWloaGlpXWhcXF1dXEeC6mddWxvenJsbHqkp6mcoqofC/ct97kFj4mMgot/CPuiBwv35gaPw5bGlr8IbZAFd0NtTj+LCPsXBnV9k6Yf95PxB62LlnuRbwiQbAWMh42IkYsIoouNjgWJnIW4i62LrJCwjqQIjYqNiR51BoeLiIeKhwiFbQWEb4J7aIsIJfdaBqKXoKMe7wbXi5xZoUYIqJAFhLSCxobBCPtyiz6LBQuLh43///1maJH///+ZmAiqiQX/ABOAAP///rM0/wAUmZr///JmZP//8+Zm///n5mgI//795mb8gAX//+iAAP//00zN///5TM2D///aTM3///yzMwh0iQWF////gACH///9gACLhggLi42J/wADszOH/wAATM0Ibo0FZ/8AAoAA///+MzP/AABmZv8AEszN/wAkGZoI8vda90aLi/tUBYtv///yzMz///IzM///1jM0///8zM0IcYkFhv///5maiP///GZmi4YIC42JBYvoja8eC6KVfXZxdn1tH3eLgI9wlYSEiISLf6SAnIWriwjIuaq2sWyjYx+Ci4KKg4kI/wAVzMz/ADqAAAX/AFVmZv8ACIAA/wBNzM7/AC0zM8j/AE/MzYaUhJGAi0Q9R2wui/svi0L3MYv3Jov/AFZMzP8AFuZm/wBCzM7/ACSAAP8ALOZm/wAxmZrIxae/iwj3HovCOaU1l4f/AAmzNI7/AAtMzJGGv4O7gsJYkF6z+w+LNotEbFBV//+9mZr//8MzNP//2GZm//+jGZiL//+XszQIi///YEzN/wBnTMz//11Mzf8A04AA///9ZmYI///cMzQ1kYUFm5CVjJ6LCAujl5+jHvQG1oubY6FG/wAMZmb///4zNP8ACszO/wACGZj/AAnMzP8ABLM0hrR864mTi42KjIiLeoiDinOLCPuTBgu724mLH5m9ms2Tvv//9Zmakf//9IAA/wACMzP///LmZv///MzNCAt3Q2hQP4sI+xwGdX2bph/3heYH4IuOdI5ekYWgi5GRiq6Knouti62MoYyphZF2i4WFiFSIfjaLCAtxoXWlpaGhpaV1oXEecXV1cR8L92DjB5eUmpaQiJOCHyr3ggaurpm892zS+0P7Lvte+w1Z+yEpgJ6rHgtZi26MWYyFhYt2kYXRiJyGizgI+1k8B4KBfIGFjoOTH+L7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AHCAAP//9kzMCP//28zN//+pGZqRhQWbkJWMnosIC///tGZm+wsF///35mb///MzNP///LM0h4v///TMzIuEkoWSi5KLk4+amgj3B/cBiJYFdKH//+ZmZoz///mZmouGi4WKiIoIC573BdGUo4sIC7G4djcfi4KH///7MzSA////zMwIC2ZlbntRi2eLYaBsvggLd6x/uYvFCPeeiQWXkpGW323l+x80+wU4+ywfi1OZVaxlrWO6c9OL14vBrrO/iJWFkH+MCAv/AMdMzAf/ADGzNI/Lix6Pho6DHv//44AAgP//2IAAgkaCiYWNe42F/wA2gAD///rmZv8ACoAA///6GZqLUgj7VweLOICIToaFhYt2kYW1jKWMt4u2i6SKtoqRkYughZFOj4CPi94IC4iHhIGLmYupkLmLi4uQh46DiwgLb4BigkaCiYWNe42FwYaWhotRCPtXB4s5gYdPhoWFi3aRhbSMpYy2i7KLnYq1ipGRi6CFkViQgo+L3Qj3OAeLoJSXk5QIC7GwsqGyi5+LoH6XdJV3jXCLbQj7LAeLOYGHV4aGhYt2kIW1jJ+Ms4u0i6GKtoqQkYughpFTkICPi90I9ykHi8KHu3SqeqFsl2iLWotbfk5HCAv///VMzI7///VmZ////0zM///1TM3///2zNG5dXVVnY5GCkoWUibKhrKirq6lsrm+xc/8ACWZm/wAB5mb/AAiZmv8ACBmakJIIZ7NfwG66CAsl0PsF9yEeC/cpyvcQ7/NU9w37L/sbPiD7Ex8LJdD7Bfch9ynK9xDv81T3DfsvHvsbPiD7Ex8L///X5mb//89mZgX//+EzNP8AFMzM///YTMz/AAzMzv//zZmai/sbiz4gi/sTi///zhma/wAQgAD//8uAAP8AIUzN///XZmYI///LMzNLBY18l4Cbiwj/ADLmZskF/wAhMzT//+UZmrf//+7mZv8ANuZmi/cpi8r3EIvvi/8AOjM0///uszL/AD9//v//1bM0/wAsszQI/wApmZr/ADKZmgWHmIGVeosIC/8AJzM0i/8AH3/+e/8AFrM0///gszQI//9BmZr//xkZmQX///OAAP8AIjM0///6gAD/ACSzM4v/AB1MzYviqubfiwgL/wAOMzT//9xmZv8AB4AA///RMzSL///GmZqL+xhOcFyL///PgACL///dzM3/ABvmZv//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gZV/m3WLCIB2d3lur32eH6CLv46wqrqxp9OL91EI92cHvY/Lix6Pho6DHm+AY4JGgomFjXuNhcGGloWLUggL+xA1BX6CiYaLhIuDkYSUi5SLl46glAj3JMUF///zTM3/ABVMzP//60zN/wARZmj//+NmZv8ADUzMCAuLOICGToiFhYt2kYW1jKWMt4u2i6SKtoqRkYughZFOjoCQi94I+GEHzI+zix6Sh46CHgtygUB9Y4iJg417kYW/iJeQizcIC7yM3IyLiwj/ANSzNAYL/wAQMzR//wAVzMxuHoCLhIeGgwj//8SzNPsBBf///YAA///7Zmj///7MzP///JmYi4iLg5OGkIuOi46MjY0I7t8Fj4+OkouUCAv/ABdMzP//6bM0/wAOszT///BMzB58i4SHhoMI///JgAD7AgX///4Zmv///DM0////Zmb///rMzIuJi4SRhpKL/wAFmZqLj/8AA4AA/wAEZmaPCOP/AFCAAAWQj42Si5MIC/8AEpmYev8AEmZodh5/i4SIhoIIPfsfBYqKi4mLiouDlIaQi42LjYuNjQj3BvcCBZGRjJKLkQgL/wAUgAD//+7mZv8AD4AA///rGZoeh4t7ioV+CEv7JgWKiouKi4qLg5OGkYuOi46MjY0I8fcNBY+QjJGLkAgL+1cHizh/h02HhYWLdpGFtYyrjLOLtIuwiraKkZGLoIWRRZB/joveCPcfB4ull6KXnQgLlpuirJeLkouTipGFlYGVeKCLCKOipKT/ABMZmnn/ABzmZmEfXItiX3RkhYCIkIuQi6uQu4uLi4+GjoOLCAtvgGOCRoKJhYt7j4XBhpaDi1QIC///xjM0k/8AAhmYnv//nkzNiwgL//+kszMoSCEfi///ouZm/wBC5mb//8/Mzv8ATYAA///eTMzK///kmZr/AGWZmv//7TMyi///jTM0izr//9LMzGH//7AzNIsIC///ooAAi0//ACqAAHX/AGOAAP//87Mzj///9WZn///+GZr///ZmZv//+uZmjz6PcZdayoundP8AWLMzi/8AeMzNi/8AYIAA54vxi/8AXzM0Srv//7fmZv8AHszMCAv//88Zmv8AFMzM//94Zmb/ACMzNIvti8j/AC2Zmr7/AD/mZov/AGEZmouqTZ9J/wALgAD/AAAzNJf///7MzJSS///8gAC7h6f///WzNMAIC4O+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mZqL/wAFgAD/AAAzM/8ABWZm/wAATM3//86AAGZp///ZTM2L///XMzOLVbF3vYu0i7OfqLgIC4pehV+DWgiliAWf1K2gqYsI9yUGC///w5ma//+U5mQF///5gAD///SAAP///UzN///8ZmiL///15miL///5szT/AAWZmf//+pmY/wAFmZqL/wAFmZqL/wAGZmb/AAOZmJf/AA2AAAjn/wBiGZz///2Zmv8ACeZkBf//7Zma/wATzMz//+uAAP8AAOZo///65maLh4v///szMv///xmc///9mZr///8ZmAgL+xA1BX6CiYaLhIuDkYSUi5SLl46glAj3JMUF///zTMz/ABVMzP//60zM/wARZmj//+NmaP8ADUzMCAuLgo6Ej4cI7jcFjYmOio6LkIuTkIuTi47///7MzP8AA2Zo///9gAD/AASZmAj//8SzNPcBBYaThI+Ai26Lf///6jM0i///78zMCAuLg42EkIcI4///r4AABf8ABGZmh4////yAAP8ABZmai5KLkZCLkouN////Zmb/AAUzNP///hma/wADzMwI///JgAD3AgWGk4SPfIv///BMzIv//+mzNP//8UzMi///6LM0CAv//+iZmv//8WZm///t5mj//+4ZmB+LhY2EkIUI9wb7AgWNiY2Kjov/AAKZmov/AApmZv8ABEzMi/8ACbM0i4yLjYqMCD33HwWGlISNf4sIC///4IAA///1gAD//+nMzP//8jM0H4uGjIWQhgjx+w0FjYmNio6L/wALMzSL/wACzMz/AApmZov/AAKZmouMi43///6zNI4I///BTMz3IwWHlIOQgIsIC6cGkrK/obyLwIu6dZNkCKcGhtFRtkKLSYtLYYVECAumlwV94Fi9RYtQi0tafzUIpn8FlcW5q7+LCMGLtmaWVggLi4KOhI+HCO43BY2JjoqOi5CLk5CLk4uO///+zMz/AANmaP///YAA/wAEmZgI///EszT3AQWGk4SPgIsIbn///+ozNP//78zMHwunBpKyv6G8i8CLunWTZAinBobRUbZCiwhJi0thhUQIC4uCjoSPhwjuNwWNiY6KjouQi5OQi5OLjv///szN/wADZmj///2AAP8ABJmYCP//xLMz9wEFhpOEj4CLbot////qMzSL///vzMwIC4uDjYSQhwjj//+vgAAF/wAEZmaHj////IAA/wAFmZqLkouRkIuSi43///9mZv8ABTM0///+GZr/AAPMzAj//8mAAPcCBYaThI98i///8EzNi///6bMz///xTMyL///oszQIC///4IAA///1gAD//+nMzP//8jM0H4uGjIWQhgjx+w0FjYmNio6L/wALMzOL/wACzM3/AApmaIv/AAKZmIuMi43///6zM44I///BTM33IwWHlIOQgIsIC///xjM0k/8AAhmYnv//nkzNi///pLMziyhIiyGL//+i5mb/AELmZv//z8zO/wBNgAD//95MzMr//+SZmv8AZZma///tMzKL//+NMzSLOv//0szMYf//sDM0iwgL///PGZr/ABTMzP//eGZm/wAjMzSL7YvI/wAtmZq+/wA/5maL/wBhGZqLqk2fSf8AC4AA/wAAMzSX///+zMyUkgj///yAALuHp///9bM0wAgL+DoHrZ+nrx7JBsKLknucPv8AC0zM/wAATMz/AAtMzP///xmc/wALZmj/AAWZmAgLh1qFV39W/wAJ5mb///vmaP8AC5ma///+5mT/AAyAAP8AADM0n9uYmMKLCNoGsJ9vbB/8PQeLOHqGO4iFhYt2kYW8jK+MwovBi66KvYqRkYughZEIO456kIveCAuL/wAVGZqU/wAMTMyT/wAIszSx/wAlTMz/ACyZmv8AFbM0/wAnZmaL/wAUZmaLoP//8uZm/wALmZr//+kZmpX//+wzNI3//+TMzIttCPssB4s5gYdXhoaFi3aQhbWMn4yzi7SLoYq2ipCRi6CGkVOQgI+L3Qj3KQeLwv///EzM/wAwgAD//+izNP8AHoAA///vMzSh///gzMyXaIv//87mZov//8oZmn5OR////Jma///8MzT///mZmf//9czMi5kI/wAAzM33dQX/AAAzM8z/AAPMzbOLi4uSh46CiwgLcoFAfWOIiYONe5GFv4iXkIs3CPxJB4s4///0MzOHUYeFhYt2kYX/ACkzM4z/ABmZmoy2i7KL/wARszSK/wAqGZmKkZGLoIWR///NMzOPgo+L3ggLvIzcjIuLCPSLYyuRhQWbkJWMnosIC6KVfXZxdn1tH3eLgI9wlYSEiISLf6SAnIWriwjIuaq2sWyjYx+Ci4KKg4kI/wAVZmb/ADlMzQX/AEYZmv8AA0zO/wAygACtsf8AMWZmiJWFkH+MZmVue1GLZ4thoGy+d6x/uYvFCPeeiQULl5KRlt9t5fsfNPsFOPssH4tTmVWsZf8AHkzN///cZmb/ACiZmf//6Rma/wA7TM3///tmZgj//9vMzf//qRmakYUFm5CVjJ6LCAtxoXWlpaGhpR6ldaFxHnF1dXEfC/8ACxma/wAJZmagl5H///yAAJb///eAAB///0DMzgb///azM///9pmZd3+E/wADZmeA/wAHszMfC///78zMi///8Zma/wAHszT///JmZv8ADTM0CAt6/wAPZmj//+0zNKH//+aAAIv//9uAAIv//+xmZf//1RmY///0GZr//78ZmP8ABRma///5Zmj/AAiAAP///uZk/wAJZmb/AAIzNP8ACIAB/wAkTMz/AAh//v8AEIAE/wAWGZqL/wAOgACL/wAQGZz///czMP8AD0zM///z5mgIC/8AEczM///wmZj/ABHmZv//7DM0/wASszSL/wAnGZqL/wAYmZj/ACrmaP8ACjM0zf//+uZm/wAEZmj///eZmv8AA0zI///2mZr///7maAj///QZmv//0czM///2szSA///tTMyLCAtbQGFiHn2L///wGZr/AAMZmv//9eZm/wAE5mb/AAMZmv8ACUzN/wBCGZr/AGuzM/8ANszMiwicmoFyHwvDrKzDHpSLrYWTiwiikpaXl4GUeB+Gi16GiosIC2BnodDNuJGqH7KLnHaWdZV6lXuhiwiYnpOor1GvPvsKaENjH4v//8+zNP8AGjMz///jmZn/AC3Mzf//7LMzCIkHC0NyeFaLZYtRrEr3GIvKi8GorKr///+Zmv8ACszN///6GZr/AAdmZv//90zM/wACzM1kcGV7XIsIVGGzwB8L+48HWKZswx62i7a3oLD///1mZv8ACeZm///4MzT/AATmZ///9WZm/wACMzN4c3d4b4sId4iaqR/3kgericuLHnyFe4d4i3+LcoyFjAiJiQWcaIxfi28IC4velo7IkJGRi6CFkWGKcYpfi2CLcoxgjIWFi3aRhciHloeLOAj7TQeLOICIToaFhYt2kYW1jKWMt4u2i6SKtoqRkYughZFOj4CPi94IC2OLcLGDoYOjfpV0iwh1gXl5a8VO4PcP4On3C/U6wCsf9yv3jgWbppGWi4+Lj4WNhIuJi2eFbosI+18GC52LtY2xiwj3RAYL/wAxszSPy4sej4aOgx7//+OAAID//9iAAIJGgomFjXuNhf8ANoAA///65mb/AAqAAP//+hmai1II+xYH+wqiPPca7e7g90L3DGTUTHp6fnoei3SZfZ+AqHurfIsrCClU+wIvOoXU8B4La2l1Vh5KBpenpMnKiwi1lXV9Hwv3Cgepl5G4wbJ8TWNtZlEeC8SsYVdIX25PWoOUrx8Li9GNsR6ui6mJyovGi92ui+eLw16uXpgIjQcLpo+8sIu+i8hiuvsOi2WLeYlniwhgSY2LH4mJi3UFi4mO///9MzSO////zMwIrYkFov///pmalf//82Zmi3cI+7kHi2j///PMzf//+DMz///tMzP///7MzQhriQWE////mZqJ///9ZmaLhQh5BwuLZf//+5ma///4zM3//9tmZv///TMzCHGJBYj////MzYn///4zM4uICIt1jIkFqYy1jK+LsIuviqmKCI2Ni6AFi4+J/wABmZqH/wAAZmYId40F///egAD/AANMzf//+IAA/wAEszOLswj3qAeLtP8AB4AA/wACszT/ACGAAP8AA0zMCJ+NBY//AABmZo3/AAGZmouPCIugio0FbYpmimaLZ4tijG2MCImJi3UFi4eN////MzSO////zMwIpYkF/wAgszT///2AAP8ACEzM///5gACLZQgg+2H2B4u0/wAHgAD/AAKzNP8AIYAA/wADTMwIn40Fj/8AAGZmjf8AAZmai48Ii6CKjQVtimWKZotni2OMbYwIiYmLdQWLh43///8zNI7////MzAiliQX/ACCzM////YAA/wAITM3///mAAItlCPuoB4tl///7mZr///jMzf//22Zm///9MzMIcYkFiP///8zNif///jMzi4gIi3WMiQWpjLSMr4uwi7CKqYoIjY2LoAWLj4n/AAGZmof/AABmZgh3jQX//96AAP8AA0zN///4gAD/AASzM4uzCPcb92EHC4uciowFi2eKcXNwjIseioqLegWIj4mOHpuLk4iWbgjX+2EFjoOQhpCLk4v/AAjmZo7/AAQZmpYIwvcnw/soBY6DkIaQi5KLlI6Qlgja91wFlqiYkpmLCI6PjI8fi5yKjAWLdYp4dmOMix6Kiot6BYmNiI0elAadlIeAH4uGiYWIgwhQ+ypS9y0FiJSJkouPCJWTjJ2OjY2OHouciYxUigV4ZYyLH4qKi3oFh42Kjh6di5KGlXAIlHRc+xVR9y0Fh5WJkouQCJKR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C/glB4venJDRjpGRi6CFkVqKbYpYi1mLboxZjIWFi3aRhcH///2zNP8AFoAA///8ZmT/AAdmZv//2GZoCP//+jM0///vzMz///azMv//7eZo///0szT///HMzAj//u0zNPvqBf//+LMy///4szP///ozNP///Jma///7Zmb///+zMwj3+AeL3pyQ0Y6RkYughZFaim2KWItZi26MWYyFhYt2kYXRiJyGizgI/CUHizh6hkWIhYWLdpGFvIypjL6LvYuoir2KkZGLoIWR///JMzP/AAJMzf//6bM0/wADszP///jmZv8AKUzNCP8ABuZm/wAXszOV/wAIGZr/AAuzM/8ADuZmCP8BERma9+gF/wAE5maR/wAFGZr/AASAAP8AB4AA/wACgAAI+/gHizh6hkWIhYWLdpGFvIypjL6LvYuoir2KkZGLoIWRRY56kIveCAtqdJycH4uQjJGLjQiagZp0cIF9eFfGdM3NxqK/noGZcHSBfHwei4mMhYuGCHp0emoeC/8AsoAA/BcFbEBydmuLfYt8mISUgZd1kn2LCG14d29ru3S1H+WLwtW29wEI/wCNszT3/AX/ABLMzP8AL8zM/wAPgAD/ACUzNM2TkZGLoIWRY4pyinSLdItkjFyMhYWLdpGF1YaIcndTCPsB+7+Ji///dWZm98UFcf8AOTM0///+mZr/AA/MzM+SkZGLoIWRXIpoimSLY4t6jFyMhYWMdpGFxIb/AAnMzf//8OZo/wAgszP//7kZmAgLpY0FkI6OkB+LnomNBVqKbIpZi1mLb4xZjAiJiYt4BYaPiI8epYkFsoiagottCPtkB2mLYYx1mVSr///yGZrL///35mbDCAuCyXHDQIsIWXpudG6ggJ8fl4uYkJSVlZaTkJeLp4uRapBulU2gNdNvCIYHSYtmYHFFW/sbXEdriAh8igWGiYiGHwuLav8AExma///tGZr/ABrmZv//5+Zm/wAeGZr//+UZmv8AQ+Zm///n5mbvi/cTi/cOxYv3F4vgStAtmgiRBwvRn8i8i9+L3UnS+x+LQItJckSECHP7NKmJBaXjxdP3BosI4bJTRUZwRiEfcItnkXCLCH96h3d3nIaXH6aLqJGsiwgL9w2wQUIwUE4oHz2LWKtyun6lfKVviwh3fntzHwuL3pyQ0Y6RkYughZEIC1uCrawf93/WB/cUsDFPTWwx+ywfC4s4eoZFiIWFi3aRhbyMqYy+i6iLq4mviwj/AL+AAP8AVoAA/wAz5mb/AIUZmuRx8PtvHzP3KgaL3pyQ0Y6RkYughZFaim2KWItZi26MWYyFhYt2kYXRiJyGizgIC0yLYGVQi2WLe5uDiwiHhoeDcspuxh8Li96ckNGOkZGLoIWRWoptiliLWYtujFmMhYWLdpGF0Yichos4CPwlB4s4eoZFiIWFi3aRhbyMqYy+i72LqIq9ipGRi6CFkUWOepCL3ggLi0CJbR77CAYLi4iN///+TMyP////szQIqYkFrv///bM0kf//+EzMi2UIC46JzI0FuP8AAWZmpv8ARpmambT/ABRmZv8AO+Zm/wASmZr/ACUZmt+LCPsdB4tugIBrhgiEigWGioiJi4YIi3iNiQWLw42vssWJix6NjYueBYuQh42GjAiDjAVq/wAEGZqB/wAL5maLqAj3HQffi/8AEpma///a5mb/ABRmZv//xBmamWKm//+5Zma4///+mZoIzImOjYudBYuShYyGjAiEjAVqkGfgfLJ4vmegW4sIjQevlaOumbWUqpahlYuTi5CIj4eRhZeHlIsInJyen6OCoGYfYItxV3xa///u5mZT///jGZpmTosIevcHBouolf8ACOZmrP8ABBmaCAuTjAWQjI+Ni5AIi56JjQWLUYlkZ1ONix6JiYt4BYuGjomQigiSigWshpWDi24I+wd6B06L///jGZqw///u5mbDCAt8vHG/YIsIZoJ2c3eceJwflIuXj5GRj4+QjpOLlYuWdZRsmWGjaK+BCIkHW4tndnhYfGRnNmqGCISKBYaKhYqLhAgLi3WZe597onm9dtWL6YvntYvii8dXtECVCJAHC8KYvKyLw4vFWbcmi1SLXHVYhQh1+wukhwWdxbXJ2osIwaloX191YEofeYtykHmLCIOAhnt7l4eTH52Ln5CiiwgL3qJYX1BmZ0YfVov//+BMzf8AGzMz///sszP/ACDMzYGcgZpziwh6fH17HwtgSY2LH4iJi3UFi4eN////TMyP////szQIqYkF/wAlszP///2AAP8AAkzN///3gACLYQj7ogeLaP///bMz///1Zmb//9pMzf///ZmaCGyJBYj////MzYn///4zM4uICIt1jIkFs4ynjLaLq4uUirOKCIyNi6AFi4+J/wABmZqH/wAAZmZpjoiWi6MIi433YveMi/uABYto///8zMz///NmZv//2jM0///9mZoIbIkFiP///8zNif///jMzi4gIi3WNiQWzjKaMtou4i6mKs4oIjI2LoAWLj4n/AAGzM4f/AABMzQhtjQX//90zNP8AAkzN///6zMz/AAqzM4uwCPehB4u1/wADGZr/AAeAAP8AJOZm/wACgAAIqY0Fj/8AAEzMjf8AAbM0i48Ii6CKjQWLRYleb16Nix6JiYt1BYuHjf///0zMjv///7M0rYiMeotzCPti+4yL94IFi7SO/wAIgACx/wACgAAIqY0Fj/8AAEzMjf8AAbM0i48Ii6CJjQWLRYlfHguefZlzeXp9eh6LiIuJjImMiIuIi4gIdXZ3bm13oKEei42LjoyOjI6LjYuOCJt/mXV0e3x5VcJqzB7LxavCHwuLr6CQqI4Ij4+QkB+LnImNBYtTiWRoR42LHomJi3gFi4aOiZCKCJ6JBauIlX6Lbwj7sQeLb4SBaIcIeIkFhoqIiYuGCAv//9UZmv//vOZmjYsfC4uHjf///zM0jv///8zMCKmJBf8AI7Mz///9mZr/AAVMzf//+2Zmi2EIC/VL7Soea4tVgV1FCIgGC/sUB2trZH9aiwhNhK3ZH80Hi6v/AAczM/8AB8zM/wAgzM3/AAIzNAiajAWP/wAATMyN/wABszSLjwiLoIqNBYtOiWT//92zM///ykzNjYseiomLdQWLh43///9mZo7///+ZmgiTigX/ACJMzf//+7M0/wAGszP///tMzItlCFIHIa5e7R7Hi6uZsqgI+wMHi2T///szNP//+oAA///bzMz///uAAAh7iQWH////gACJ///+gACLhwiLdo2JBYvGjbSwxomLHo2Ni6EFi46J/wABmZqI/wAAZmYIeo0F///bZmb/AARMzf///Jma/wAGszOLsQj3pweLtP8ACRma/wAFzMz/AB7mZv8AATM0CKWMBY7/AAAZmo3/AAHmZouOCIuhio0Fi///u7M0if//1EzM///bszT//8dMzI2LHomJi3UFi4eN////TMyP////szQImooF/wAizMz///2zNP8ABjM0///5TMyLZAgLOVx8WV16la4e9yrOB9KhXlYfC4tu///5Zmb///PMzf//25ma///8MzMIeIkFhv///4AAiP///YAAi4YIi3iNiQWL/wA/ZmaN/wAomZoe/wAnZmaL/wAWMzSJ/wAnZmaLCPcDycHf6TmlKx9S7gaLqP8ACkzN/wALmZr/ACCzM/8AA2ZmCJ6NBY//AABmZo//AAKZmouRCIudiY0Fi0eKZGdHjIseiYmLeQWLhY7///2AAJD///+AAAieiQX/ACOZmv///EzM/wAHZmb///SzNItuCAtgi3BvaIt+i3+RhIsIhYmBh325ebYfC7iLnaGxi5iLmIeXhov7C15QN4tji3Cjf6b///HMzf8AH+Zm///0MzP/AAUZmnqLCHmAfnsfC7GLnXW4iwi2uZ2Zj4mVhR+Ei3+FfosIC559mXN5en16HouIi4mMiYyIi4iLiAh1dndubXegoR6LjYuOjI6MjouNi44Im3+ZdXR7fHlVwmrMy8Wrwh4LVwdgckUn+wlY9y/3K/dEzvcK3p+dfX4ei3yFhItzCHGfca+ykqyovV67PPsg+wT7KvtJ+yy/+0/3XB7yi7CzqrwIkQaqWrBj8osI91zA90/3LPdJ+wX3KvsgPF5bWW6SarKvoKWlH4ujhJKLmgiYnZmf3s/7CvtE+ytX+y/7CSdx0bYevwenmZu0HqUGkI6OkB+LnomNBYsuiWdkNI2LHomJi3gFho+Ijx6mBrKaf2sfC2wHZoRLRS579xfU9wCn4diZj4aDHouGioaJiIiIioWLhAh4mX2en5qboKl0r0/7AUQu+xYmyfsW9wce2YupspuyCI4Gm2SpZNmLCPcIyPcW8PcWROj7AU90Z212mnufn5mZnh+LkomRiY6JjomQi5AIk4+QmdmmNfsAQnv7Fy5FhMuwHqoHqJWarB6eBo+PjpAfi56JjQWLR4lkZ0eNix6JiYt4BYaOiJAengatlHtvHwtDZWZaf2+BpmO+Ra4I9w33cgUL/wB9MzSL/wBhMzD//6YzMP8ADrM0//9PmZz//9+ZmP//6UzM///SgAT///PmaP//4MzMiwgLTIttuimL///bszOL///EmZr///JmZv//2LMz///iZmYI/wAAMzQH92b24uYeC///+rM0B/tHNSD7Bh77A4v//5OAAP8AXxmZ///wZmb/AKZMzf8AIszN/wAVzMz/ADOZmv8ABMzO/wAcszOLCAvWi6Nd54v/ACWZmov/ADGZmv8AC0zM/wApzMyxCAs6i3FGSvtPi4tP+zpo+wAIbuP7Eff4BYmTiZGLkQgLm5eVrx6mBpCOjpAfi56JjAWLMopoZD2Mix6Jiot4BYaPiI8ekQayi/8AEczN///u5mj/AAozM///4xmYCPdZ/MUFkHyUg5aLlYuWk5GazPdoyvc8i4sIC9f3cZuVo4uii5CAi4KLfHiAi3sIdZl7pKafr6Mes2KvYh4LmY+Hgh+LfICKi3oIdZ59o6eXpKOzaqxjHkeL///emZr//9rMzP//32Zm//+RMzQIUftZf7Q1924FhZmHk4uSCAuLlZSRn4wInAaOkYySH4ueh40Fi06JZGlWjYseiImLdwWHkIiQHpYGqYuVfZhpCPcc++0FkH+SgpiLlYuTlJGZCOD3qwWezKi6qYsIC6iVmKwekwaQj46QH4ueiY0Fi1GJZGdTjYseiYmLeAWGjoiQHpIGrZR+bh8L//9qTMyL//+bGZv//6lmaP//2jMz//9+MzII///yMzMG//+95mj//8kzMpX/ACqZmqf/ABrmZv8AFUzM/wAWZmf/ABQzM/8ADoAAnv8AD7M0/wAR5mj///GAAP8AC0zM///xZmf//9IZmf//zrM0///FszD//8AzNP//upmaxHn/AEwzMx//AB+zMwYL/wALmZr//+yZmAf/ABVmZv8AX3/+/wBHZmj/AFbmaP8AZeZmi+2L3Uqq+xUIC///uzM0izb//8wZmv//32Zm//+fGZr//8szM/8AAWZm///WMzP/AApMzIv/ACMZmgiko56fnZicmZt+lX5iX1dSTb57zx7/AAHMzQYL/wAUZmb/AGtMzP8AQ+Zm/wAIszT/ABeZmouxi7h2izeLgof///szNID////MzAj7Gv///czMi/8ABTM0BQv/AEozNIv/AC6zMv//xrM0/wALZmb//5HmZggL///ygAD///rMzf//75ma///7mZn//++ZmosIC2WLdZ9ei///4MzNi///1JmZ///05mf//+qZmv//9DMzCP8AAeZmB+Kq5t8eC/8AAGZm///25mf/AAAzNP//9oAAi///9kzNi/sYTnBci///o5mai///15mZ/wBlGZr///gzM/8ATJmZ/wALzM3/AAHMzf8AFhma/wAEgAD/AAmzM4sIC66LrW+2i/8AITM0i/8AJGZm/wARszP/ABbMzP8ADZmaCAuldqFxHnF2dXEfC3ibe56em5uennuaeHh7fHgeC3ibe56em5uennuaeB54e3x4HwvM///SszMG///1TM3///ozMv//+LMzgIv///MZmgh4m3uenpubnh6L/wAMgAD///kZmv8ACrM0///15mb/AAXmZgj/AC3mZsu1+zgHC4u3ZZdxkjelsJd2m4uLaoOLRotko3K7f///4kzM///aZmb//+4Zmv//05ma///15mb//9GZmgj///6zNP8AAWZm+073YgV8nIKiiqgIfgZ0coBwi3CLbJhtpG4I/wAegAD//95mZgUL///E5mb//9kZmv//7Jma//+xZmaL///OGZoIC4tgsEuLbYt7eX18iYeKiIeLh4uJjImMiQjwBqOkqasfC4vIKMiLx4v/ABozNP8ACMzN/wAwMzT/AB6zM/8AFMzMCP8BAoAA//7izMwFmnqUdo1yq4uatouqi6p+qXKoCP//vpma/wBGgAAF///3szT/AA9Mzf//+7My/wAQmZmL/wAQmZqLrZu1sb2jiZJllosIj5q+qh8LIAZwi3yhhqIIi1qCQ2KobLwf9y4G3KF++zAfi02AV4JhCPvGi3Mn+CiLou85iwWyw4/mi8II9ymJ3fs8HguLsZPYi7CLyGGWYYtyi2qLhK2Li1+Bi0eLVsaBnogIC76Eq4GLKov7HVxjIXh1hoN1hnGKhYuGi4aLfY6Ai4UI9w6P1fcukosFC6laifsHuYuRlI2Zi5iLl4mYiZUI///vmZr/AFPmZv//yWZm/wBEGZqL2ggLi/cA4HOL3gi3cp1eHvtyBnCLe5aFogiLYYVBYqR3vR/3jAZSXm9EizEIC4tbj1yLTIt2h3qDfwiWBqO3ktofi9GAzovQCAuF9/cFi+1skVSUdo9nkYapi4tYgotTi2Kua7yDwIOkf4tSCAvNrpXmi7WL5nmeRYtsi2iLhrGLi2GGi0iLX6r//+YzNMH///3MzLyJqXiLagiLXYFkaHEIC2yLcW2AU31KgmiLeYt6l4eQi5OL/wAJ5mb/AA4Zmv8ALBma/wBD5mb/AB/mZv8AMRma/wAXGZr/ACXmZouji6VskX+LCAvD1G0lNlBtOB9BBgtxo3Gjp6P/ABrmZv8AFRmao3ancB5zb3NzHwtxo3Gjp6P/ABrmZv8AFRmao3ancHNvc3MeC///9UzMjv//9WZo////TM3///VMzP///bMzbl1dVWdjkYKShZSJsqGsqKurqWyub7Fz/wAJZmb/AAHmZv8ACJma/wAIGZqQkghns1/AbroIC///9UzNjv//9WZm////TM3///VMzf///bMzbl1dVWdjkYKShZSJsqGsqKurqWyub7Fz/wAJZmb/AAHmZv8ACJma/wAIGZqQkghns1/AbroIC///oIAC//+0TMwFgf//+BmY///+gAD///uZnIv///nMzIuE/wAEmZr///nMzP8ABuZmi/8ABuZmi/8ACUzM/wACmZj/ABAzNP8AB+ZoCP8AbuZo/wAzGZgF///2MzT/ABLMzP//8BmU/wAPTND//+nmaP8AC7M0CAtyoHakpKCgpKR2oHIecnZ2ch8LqJqu09DQdPsTHgt9h3+DH34HhoyKjx4LxvvBBkSqb7keuYu9obK3if8ACkzNhf8ABbMzgYxxd22DcYsIcIWpyR/3kfMHlZmPlB+fB4+IjYYe+wyyBsyPs4sekoeOgh5R///lszQFhf///EzM///3ZmaJ/wAAmZqE/wACGZr//+kzNP///+Zm///2zMyL//+tGZoIC4uH/wAGGZr///6zNP8ACeZm///+TMz/ABGAAIj/AB6AAIO0UQj3JPthBQuUgJCCi4GLhYeChYMI+x37TwV1bWhfUYiF////szOG///+TM2LhgiLd4yJBamMo4ypi7KLpYq6igiOjYufBYuO////GZr/AAOAAP//+uZm/wAAgAAIeI0F///Y5mb/AAQZmv8AB4AA/wAT5mb/ABCZmqMI9xj3SQWRk5GRjouPi4+IkYMI9xj7UAX/ABjmZmn/AAIzNIX//9fmZocId4kFh////5maif///WZmi4cIi3eOiQW6jMKMoouii7WKs4oIjY2LnwWLjon/AAOzM4b/AABMzf//04AAjv//3YAArHCyCPsu92YFgZiFlYuVi5T/AAQZmv8ACOZm/wAI5mb/AAwZmgj3F/dFBaav/wAWgACn/wA8gACNk/8AAEzMjP8AA7M0i44Ii5+IjQVjimmKdIt0i2eMY4wIiYmLdwWLho7///5MzI////+zNAipiQX/AB1mZon///rmZv//75mY///tszT//+ZmaAj7FftDBYWDh4eIi4iLh4+Gkgj7C/dEBf//7Jma/wAbGZj///fmZv8ADuZo/wAggACNCKuNBf8AArMz/wAAMzT/AAJMzf8AAczMi5AIngeKio6LH1yKWIpzi3OLZIxjjAiIiAUL/wCRszQHi/8AJ8zM///9TMyB/wAUMzT/ACSAAAj/AH+zNPd7Bf8AHBma/wAyszT/AA3//oX/ACyzNP8ABEzMkZGLn4WRbYpti3SLdItvi2OMhYWLd5GF/wAsTMyIpP8ABxmY///pszT//9XmaAj7C/t0BYJ6h47///czNJsI//+BzMz3cgX//+fMzf8AKpmY/wAOMzP///hmaMOOkZGLoIWRY4ppimOLZItqjG2MhYWMdpGFtYj/AAsZmv8ABGZo/wAomZn//7uZmAj/AINMzftxBf8AEYAA///igAD/AAOAAP///4AAi2YI+x0Hizh6hjuIhYWLdpGFvIyvjMKLwYuuir2KkZGLoIWRCDuOepCL3ggLm3yzS1VvaXZ/knyfm5aUlx6LkoeQiY6JjYqOi44IkJSUnqGZf3Qei32Dg4KCf39+fYtqCKUGjaSal52XnJablouhCAuce7RUYWpodX+TfJ6UmJWWHouTiJGKjoqNio2LjwiQkJGeoJOBdB6Lf4Z/g3+Aen51imkIpwaNpZWcnJsIm5uam4ufCAv//6kzNP//uzMwBf//9uZm///4zMz///6ZmoeL///6ZmiL///5mZj/AAQzNP//+mZo/wAGTMyL/wAGTMyL/wAIZmj/AAJmaP8ADrM0/wAHMzQI/wBkzMz/AC5mZAX///cZmP8AERmY///xmZj/AA3M0P//6+Zo/wAKszQIC////TM0/wAAzMz///vMzf8AAMzM///8gACL///oMzOL///v5mb///JmZP//+mZn///7MzQI///+mZr///czNP8AT8zM//+ozMwF/wALMzJ//wAE5meH/wAEMzOL/wAFmZqL/wAE5mb/AATM0IuPi/8ABZmY////TM3/AAWZmP///IAAkwgL///rGZqL///tTM7/AAaZmP//7mZm/wALZmgIC3X/AA1MzP//58zMnmqL///QszOL///mszP//9rmaP//8JmaU/8ABpma///6TMz/AAr//////xmY/wAMGZr/AAHmaJb/AB9MzP8ACv///wAOMzT/AByZmov/ABKzNIv/ABTmaP//+IAA/wATzMz///WAAAgL/wAXGZr///KzNP8AFxmY///u5mT/ABgzNIv/ADKZmov/AB/mZP8AJRmc/wANMzTE///5Zmb/AAPMzP//9QAC/wACzMz///PmZooI///wmZr//9gZmP//8+Zm///2mZz//+fMzIsIC5t8s0tVb2l2f5J8n5uWlJcei5KHkImOiY2KjouOCJCUlJ6hmX90Hot9g4OCgn9/fn2LagilBo2kmpedlwiclpuWi6EIC///yxma//+gzMwF///6TMz///WzNP///bM0///85mSLgov///pmaP8ABOZm///7MzT/AATmZov/AATmZov/AAWZmv8AAzMw/wAKgACXCP8AUIAA/wBXMzT///3mZv8ACMzMBf//7+Zm/wARmZj//+4Zmv8AAMzQ///7gACL///8gACL///7zM7///8zNP///eZm////MzQIC///9UzMjv//9WZn////TMz///VMzf///bM0bl1dVWdjkYKShZSJsqGsqKurqWyub7FzCAv/AAlmZv8AAeZm/wAImZr/AAgZmpCSZ7NfwG66CAv3Kcr3EO8fi/8APJma///tTMz/AEKAAP//0bM0/wAszMwIC/8AKszM/wAEZmj/ABwzNP8AFJmYi7YIC7pvsGVud3xzd5d2rp6Whn12e4Y4HmSLc4xcjAiJiYt4BYaPiI8epokF/wApGZiI/wAM5mh+i2wI+7oH+wR8+xj7PR5bi2KgbahWwIvPi8wI98EHi6f/AA0zM/8AEMzM/wApzM3/AAMzNAiljQWQjo6QH4ueiY0FXIphimWLZIthjFyMCImJi3gFho+Ijx6miQX/ACbmZv///RmY/wAPGZr///HmaItsCPviB/tg9yJj5fdhufcR90Ye96gHi6eZnaiOCAuhnbGayJKRkYuahZFLkIKei7wI91QHi/8AE4AA/wABszL/ACXMzv8AATM0/wAX5mb/AC7MzP8AB5ma/wATTM7/ACL//ov/ABszNAi6crRlbnp8cx6Ld5l1rYqeipOCi4CLgHV9eIkI////szQH///5szT///8Zmv//8pmY////MzL///KzNItri2qMZoyFhYt2kYW8iJh/i0kI+1UHi3j///4Zmv//+DMz///x5mb///PMzQgLZXVlaB+LcZo/5ocIj5wFYZN5sIuiCJaPkpK0kKScHpuAnWceC937GwWNiIyJkIsIlZCSkIyKjosfZPcsBYiWgZJ5i3SLfXqLe4uHjIaNhwgL9xH3hwV+i3aGfIt8i3mQfIsI///QgAD7FAX///0zNP//+IAA///+ZmT///uAAP///bM0lf//7DM04v//2IAAu///toAAiwgLMPsRUPtM+xDBOfcUH8+LubS97giUZAULgYt6h4d7CGr7L4uKBYiNgZcejouPjIyPCNf3HwWNj4yPi4+LloOhbosIC4CLeoeHewhq+y+LigWIjYGXHo6Lj4yNjwjW9x8FjY+Mj4uPi5aDoW+LCAtji3a6VItii3ZqflQIoYYFlqmZm6CLsYuqXbWLtoulqZfDCHWSBX5pfX53iwgLwvclBZCYkY+jiwj3ZIvI+z0F/wAO5mj//9bMzf//1rMy/wADmZn//9BmZv///JmahYWLdpGFsIzCjLKLtIuvirCKkZGLoIWR///ZMzT/AAOAAP//30zMi///7YAA/wAzgAAI+2H4sgUL///4szT/ABNMzP//+kzM/wAKszR9i///8UzMi///+GZm///3GZj///SZmv//5TM0CP//IbM0//33szQF///lmZr//8IzM///4eZm///5zM3//9SAAIiFhYt2kYWwjJiMsou0i72KsIqRkYughZH//9pmZv8AApmaXP8ABEzM/wAPmZr/ACkZmggL///pzMyL///4zMz/AAKAAP8ABDM0/wAKzMwI/wBkMzT/AP2zNI2L7PufBQv//+nMzIv///jMzf8AAoAA/wAEMzP/AArMzAj/AGQzNP8A/bM0jYvs+58FC2V1ZWgfi3GaP+aHCI+cBWGTebCLoggLlo+SkrSQpJwem4CdZx4LgYt6h4d7CGr7L4uKBYiNgZceC46Lj4yMjwjX9x8FC42PjI+Lj4uWg6FuiwgLY4t2ulSLYot2an5UCKGGBZapmZugi7GLql21iwgLtoulqZfDCHWSBX5pfX53iwgL/wAezM3/AC8Zmv8AIszN/wAdZmb/ADdmZosIyJZWSh/7pweL+waKSX5pCJZ5260Fj5uMn4ujCIuyiLuLvgj3swf3B122Rx7//6PMzYv//88Zmf//wczO///vgAD//+dMzIz/ACnMzP8AApma/wApGZqLi4uPho6DiwgLi96ckNGOkZGLoIWRWoptiliLWYtujFmMhYWLdpGF0Yichos4CPs0++r3NAeL3pyQ0Y6RkYughZFaim2KWItZi26MWYyFhYt2kYXRiJyGizgI/CUHizh6hkWIhYWLdpGFvIypjL6LvYuoir2KkZGLoIWRRY56kIveCPdb9+r7WweLOHqGRYiFhYt2kYW8jKmMvou9i6iKvYqRkYughZFFjnqQi94IC1qKbYpYiwgLWYtujFmMhYWLdpGF0Yichos4CPs0++r3NAeL3pyQ0Y6RkYughZEIC1mLboxZjIWFi3aRhdGInIaLOAj8JQeLOHqGRYiFhYt2kYW8jKmMvou9i6iKvYqRkYughZFFjnqQi94I91v36vtbB4s4eoZFiIWFi3aRhbyMqYy+i72LqIq9ipGRi6CFkUWOepCL3ggLgYt6h4d7CGr7L4uKBYiNgZcejouPjIyPCNf3HwWNj4yPi48IloOhbh4LgIt6h4d7CGr7L4uKBYiNgZcejouPjI2PCNb3HwWNj4yPi48IloOhbx4LZXVlaB+LcZo/5ocIj5wFC2GTebCLoggL/wCRszQHi/8AJ8zM///9TMyB/wAUMzT/ACSAAAj/AH+zNPd7BQv/ABwZmP8AMrM0mYX/ACyzNP8ABEzMkZGLn4WRbYpti3SLdItvi2OMhYWLd5GF/wAsTMyIpP8ABxmY///pszT//9XmaAj7C/t0BYJ6h47///czNJsI//+BzMz3cgX//+fMzP8AKpmY/wAOMzT///hmaMOOkZGLoIWRY4ppimOLZItqjG2MhYWMdpGFtYj/AAsZmv8ABGZo/wAomZr//7uZmAj/AINMzPtxBf8AEYAA///igAD/AAOAAP///4AAi2YI+x0Hizh6hjuIhYWLdpGFvIyvjMKLwYuuir2KkZGLoIWRO456kIveCAuL9wgt5y24///y5mb///0Zmv///xmaf4r///fmZvM8nC6LQov7Am5mQ4tji2iubdAIC5qwlMKLowijiJhwcYBobB6Ld41mmGpsRHRtZotBi3DRi/cEi/cOvLrMtIr/AAlMzP//+5ma/wAJszT///hmZo/7BVtFOYv7Cgj7F9tC5R7Ei6yqptOhQ7Nsvov3DovP6ovzCAvEi6yqptOhQ7Nsvov3DovP6ovzCAtWi3iShsD///ezNP8AA5ma///3mZj/AACzM///97M0///7szOLYv8AAkzM///YMzP/AASzNP//2czNCPdpBpaRkZQfg/cUBQtWi3iShsD///ezNP8AA5ma///3mZj/AACzM///97M0///7szOLYv8AAkzN///YMzP/AASzM///2czNCPdpBpaRkZQfg/cUBQuBi3qHh3sIavsvi4oFiI2Blx6Oi4+MjI8IC9f3HwWNj4yPi4+LloOhbosIC36ChICLfouGjYeOhwjw+w8FjYmOio6LjouPjI6OjY2NjouOi4yKjIuMCE33JgWJkIePhY+GjYaMhosIhIuFioaHCAt+goSAi36Lho2HjocI8PsPBY2JjoqOi46Lj4yOjo2NjY6LjouMioyLjAhN9yYFiZCHj4WPho2GjIaLhIuFioaHCAttfXl7e5B1tB8Lk5GDfh+LdHZmYYIIkHoF0ZOryYuvCK91sGUeC2OLdrpUi2KLdmp+VAihhgULlqmZm6CLsYuqXbWLtoulqZfDCHWSBX5pfX53iwgL+3kHUa1xuB62i6qamNAIc5AFhmiCe3KLCHaCn8kfi/dhgJwFC8L3JQWQmJGPo4sI92SLyPs9BQv/AA7maP//1szN///WszL/AAOZmf//0GZm///8mZqFhYt2kYWwjMKMsou0i6+KsIqRkYughZH//9kzNP8AA4AA///fTMyL///tgAD/ADOAAAj7YfiyBf//+LM0/wATTMz///pMzP8ACrM0fYv///FMzIv///hmZv//9xmY///0mZr//+UzNAj//yGzNP/997M0Bf//5Zma///CMzP//+HmZv//+czN///UgACIhYWLdpGFsIyYjLKLtIu9irCKkZGLoIWR///aZmb/AAKZmlz/AARMzP8AD5ma/wApGZoIC/glB4venJDRjpGRi6CFkVqKbYpYi1mLboxZjIWFi3aRhdGInIaLOAj7NPvq9zQHi96ckNGOkZGLoIWRWoptiliLWYtujFmMhYWLdpGF0Yichos4CPwlBwuLOHqGRYiFhYt2kYW8jKmMvou9i6iKvYqRkYughZFFjnqQi94I91v36vtbB4s4eoZFiIWFi3aRhbyMqYy+i72LqIq9ipGRi6CFkUWOepCL3ggLqqGgpx+L/wAfgABx/wAJgAB5jniNepGLoougr7m/mIuViZKEkk+AUVuLRQhPpWSzHgv//9gAAXFkTx+LRcdbx4D/AAbMzf8ABeZm/wABmZn/AAkzNP///Jma/wAJ5mZXmGm4i6CLopyRno2djqX/AAmAAIv/AB+AAAindaBsHgvVW51lP1M3P02vXcHft/cEyx4LcXmls8u62bidpnxcV2gtUR8Lc254VR+LRZlolDOTPZExjXaMhY6ElYuVi46UjJaNmf8AADM0x/8ADMzM9wD/AAozNOH/AA3MzLWLzAjBbp5zHgups6PExLFSSh6LXHxuY2YIC///v5ma///EZmb///pmZv//xZmai2AIXQeEk4iTk5SOkh63B4ujjKOYpJScn5uinLqtybeL2ovmSccli1aLYX1ucm1zdm+LZQhopIObnp+Xoh6LmImRh5CHkImRi5oIC7uaQlU+hT5QVYPZw8CN6ckfC8bNvPcL9w1Ls1FGVUMtNr490B8Le35+e3uYfpubmJibH5t+mHseC6aNposekImNhR57hFyDcYmKg4yEj4UIC4tifohjiYaDjHyPhamM/wAKszOL/wAjTM2LqYubi6mKj5KLmYeTaY16jou0CKO9B5GtU4uL4AWUg4yFHoSLf4CEgomIhYKLhQhSLwehrcreuNAIbJX7Lvtuj3/3I4sFC2J6aF4edYuAkoKUg5ODkn6LCIF/g35zx36t0LzAx8Fnvz0ffYtyhoKFCJfc9xuLi4yQrfs3i3X7I5GIBZmSoJKhiwjTjlBtHwtlhGlfb2Oi3x6LkYuTjJCgnKGRmYsIxI9UdR8LnIHaKh5yi3B6fX2Wxa7O9wGeCJ4H+y2AUSSLOQgj0m692qjMrx4LinGEY4ZvCKCIBZe7kpGniwgLpKN9cB+LbnZve4IId5UFZp+IoouaCKmjlKMeC7Ncpl5WW25eHotum3GzeAiXhQULZXdeZotnCEnPe7flqsSrHouqeaRsnAhkoAXGrY+pi5oIC6h9BbN3jHGLcghicX9nc2SWuB6LrbKym5QIC7GSrbens3Q4HncHdXp1hn2LCFOGwaEfC3qUPOwepIumnJqZf1FpSPsBeAh4B/ctl8fyi90I80GnWTxvSmceC4tDqkvlUQialQVH03ywi9aL1Z64y84IfJYFPlpfPotECAuL0l/YPrwIfIAFykieXotBi0B9ZkdDCJqBBeXFqsuL0wgLnqKgoaCLCKqfelgfC3aLc5t8oX+eh6SLpIuNi5qMjwj3PgaIyXrENosIQ1tEQUKzT+AfuYupoqWuCHebBXh1d3ZliwgL+wIGkKiksKqLCKOkflYfCzJjQERLukfc/wBTGZr/AC7mZtHM/wBIGZpm/wBG5mYvHwtObG1uYmS02dr/AB3Mzan/ACIzM7WtUTweC9fIyNfYyE4/P05NPj9OydceCy/WQebn1dXn5kHWLzBAQDAeC1WS/JX9fcCDBQv//+rmZlb//9kZmlp4iwhqi7Kuzb3vv56Xc3Efi4L///jmZl////IZmmgIC4CNd6werYuqnrO0CHecBX16foGEi4iLiY6LkouRjZSOmAi892Vbi3NpBYSefZppiwhAIyUmZp9Szx+hi6uYqKcIC+yLyLjH44f/AAeZmoL/AAWZmX//AAHMzUk4XnU2iwj7FED3Cvcd92j3CbfaH/cAi79KpS6Wif8AChmY/wAAgAD/AAfmaP8ABYAA///9Zmj/ADDmZv//++Zk/wAxTM7///KzNP8AM8zMbpFtq/seiwj7M/sR+wP7Vfsl9wL7H/dOHwvGi66pq6oIcKEFcW5kdnyLCHtsmNXqvsS2kJqHdx+LeImNi34IgJF/p5Wqk6Src7BEOjA5+wBitknMHguCZoZ1i3WLbaF8oYuwi7SkxtEIdpwFaWN3eHuLhIuIk4uVi5WNnJSvCLX3NQULTmxtbmJktNna/wAdzMyp/wAiMzS1rVE8HguLYf//8uZm///dGZr//+wZmv//4+Zm///n5mb//94Zmv//0Rma///u5mZAiwhY97wGo5Cnjq6LCMjdbfsKHwuLYnBxX4X///1MzP//9uZm////TM7///SZmv8ABWZm///5gACTjJCMkosIC6O+h1JLX35uH2uL///3szT/AAaAAP//+kzM/wALgACFl4GQfYsI///zszT///OAAP//9xma///yszP//+CAAP8ARpmY///0szP/ABozNNvGudAfi8VcpmqOCAuom6Gii6gIsGqhVzRwW3qIj3yeHqKL////MzSd/wAEzMyWkpunk5yLCJuhg3EfC5WLmY6Onf8AAUzN/wAH5mj///0zM/8ADMzM/wADgAD/AAhMzJCXl5SqiwgL+DkHppictB6sBrOafW0f/DkHb316Yh5qBmN9maofC/uuB26Ae2seZQZsgJuoH/euB6eWm6oesQaslXtvHwu+iP8ACGZm///5TMz//+6Zmv//2bM0CDL7b3pgerk1924F///15mb/ABeZmv///YAA/wAQszL/AB+Zmv8AA7M0CJyNBY7/AABmZpH/AAEZmov/AAaAAAiLnoeNBYtOiWRpVo2LHoiJi3cFi4aQ///+mZqQ////Zmb/AByAAP///IAA/wAVTM3///dmZv8ADjMz///cGZoIC/cc++0FkXyRhZiLlYuSkZKcCPce9+cFm7Kik6iOCJ4GrJV7bx/7rgcLbYtiiW2LbYthjW2LCPukPvtN+w/7RfcGNPdEH6mL9I2ki6mL8Impiwj3RPcI7PdF82n3VvvRHwv6XL/9xgausK3Aq88IZAZfWmVma3JrcWp2ansIC2cHrHutdqpxq3KxZrdaCLMGas9qwGiwCPnFvwYLrwdqm2mgbKVrpGWwX7wIYwasR6xWrmYI/cVXBgv+XFf5xgZoZmlWa0cIsga3vLGwq6SrpaygrJsIC9my+wWGBvs5/UD7DvdnBWlxYXFmeAiYb8ul9yD7hbGfBQtyYkFKWIsIRGbdzcqru8sfyIvWJaVYCAtizT3OPIsIIkkkLPsC0lnUH9WL4Nm0xQgLPnz7Cm8eeot9qnCLCHh3endyoXmr7cvm98Uf9wsHi8qH04u9i/cZn7Cgi6OLjWqriwijn5yhpHOdbiFR+wT7ih/7FweLO41xizsIC/cQ8u/3EPcPJPH7EPsPJSX7D/sP8Cb3EB8L/Kn7oV744bj7ofipBwtuc3NubqNzqKijo6ioc6NuHwv/ALYzNP8AAAAB/wCUTMz/AJSAAYv/ALZmZgj/ALZmZv//a7M0/wCTGZr//0nMzP//SczN//9tMzL//2zmZv//SZma//9JmZr/AJLMzv//a3///wC2MzMeC/8AomZk/wCDTND//33Mzv//XWZm//9dZmb//3tMzP//fIAA+zX//12Zmv//fhmY/wCDgAD/AKKZmv8AoTM0/wCB5mj/AIOZmP8AomZmHwv/ABZMzP8AEczM/wAXzMz/AADmaP8AC7M0iwj/ADxmZv8AC7M0///BszT//+FmZv//vGZm///mGZr//+GAAP//4hmaZP//2EzM/wAUszP/AGlMzR+L/wANZmb/AAFMzv8AD+Zm/wADTMycCAv/AM3//weLsv8AAOZm/wAnszT/AAEZmv8ACIAAi/8AAxma///+TMz/AAAZmv///bM0i2f//+mzNP//3czM///v5mb//8bMzf//5WZm/wABGZr///iZmv8AAuZm///55mb/AAXMzYf/AB2Zmv8ADEzM/wAOmZn/AAPmZv8ADGZmiwj/AAqzM/8AAkzO///wZmj//+nmZh///z+ZmQeL///KAAH///TmZv///MzM///SgAD///4Zmv///Bma///8GZqL///yTMz/AAPmZv///Bma/wAf5mb/AACZmf8AE4AA/wAAszT/ACCAAIv/AB8zNIv/AA+ZmP///0zM/wAggAD///9mZ/8AA+Zm/wAD5maL/wANszT///wZmv8AA+Zm///SgAD/AAHmZv//9OZo/wADMzSLwQgL/wAvZmb/AAAAAf8AR4AA/wAxZmaL/wCQTM2L/wA9GZr///HMzP8AMWZm///kszT/ACPMzP//7TM0/wAZZmZv/wARgAJviwj//8LmZv//xhma//+2gAD//4aAAP//nIAA/wAuzMz//6eZmf8ARZmaHwv30QeLx/8AAUzMyP8AAbM0mIv/AATMzP///YAA/wAAMzT///yAAIv//8izNP//3bM0///LTMz//+dMzDNi/wABmZr///SZmv8ABGZm///2gACU///55mb/AC2AAJ7/ABaAAJGeiwj/ABCAAP8AA4AAc2kf+7wHizh6hkWIhYWLdpGFvIypjL2Lu4ujir2KkZGLoIWRRY56kIveCAv/////////3Zmajv//TzM0/wCfGZr//3ZMzP8AB7Mz/wABgAD/AAYZmf8ABWZn/wACTM3/AAYZmf//5szN/wAdGZr//6aAAP8AaZmZi/8AyTMzi/8AyTM0/wBaMzP/AGmZmP8AGIAA/wAbgAD///1mZv8AB8zM///7MzT/AAVmbP//90zN/wAAmZgwPf//uOZm//+AMzCL//9xszQIC4v/ACJmZv///OZk/wCwszL//2DmaP8AibM0///4Zmj///6AAP//+eZk///6mZj///2zNP//+eZo/wAZMzT//+LmaP8AWYAA//+WgACL//82zMyL//82zM3//6XMzP//lmZn///ngAD//+SAAP8AApmY///4MzP/AASzNP//+pmZ/wAIszT///9mZ+bZ/wBHMzT/AH/MzIv/AI5MzQgLd517n5unn50ei5OJj4mSiZKGk4uTCKOardCtxXMwHotOdVpTUghFRgUuLHxei1MIi7yNqR73OQapt4mLH5e9ldOMp4WQf4yCiXtIenRpiwj7PAaLuMzLkJAI6ucF/wA15mj/ADQzNP8AKRmY/wApzMyL0wjxL7U+IlM9Uh4LtbF0UB+LXVRBNn4Ij20Fm42Yi5eLCMHMeiD7Ejduah9bi4KhgJyCmH6WeIsId3d5fGXbcsT3Be/X9xEfi/8AZ2Zm//+25mj/ACdMzv//yBmY/wAJTMwIio0F5cSQtourCLNnyCr7H2MvbH6UeKKmlaqdyMyXpB4L///dzMz//+SZmv//20zM///+gAB5iwgueeu687O6ucfIa/s2H4v//+tmZon//+eZmv//+uZo///l5mYIC5uLmoaWgahypUSL+xOLNIhPflv//+rmaD3//9IZmIF6iwgzgfc43fd9xbW2HwuL/wAiZmb///zmYP8AsLMy//9g5mj/AImzNP//+GZo///+gAD///nmZP//+pmY///9szT///nmaP8AGTM0///i5mj/AFmABP//loAAi///NszMi///NszN//+lzMj//5ZmZ///54AA///kgAD/AAKZmP//+DMz/wAEszT///qZmf8ACLM0////Zmfm2f8ARzM4/wB/zMyL/wCOTM0IC/8ARzM0/wA9mZj//75mZv//lMzM//+dmZr//88zNE///7jMzP//smZm///IzM7/AEZmaP8AYmZm9wDH/wA2ZmbHHwv7gQeLcYuAiXwImYcFkZKTlJGTm32kgamLCMzB0NXPZslNH3GLdIJyewjFB7WNpYsekImNhR57hF2DcYkIjHkFiY2KjR6gigWYkYRhHwugm5eRpYsIqallQi7//9eAAH///+iAAHVqmL8fCzVfQ0JCs07gH7iLqqOkrgh4mwV3dXh2ZYt1i3OafaJ/noeji6SL3LWsqouxi5BzjXWNe5iEmYsImZaUn61qrEwfC3d2eoF1iwhpa6bl1aemrR+ki6F3m3gIC3d2foR1iwhpZ6Dl1aekrR+ki6F3m3gIC3JzBXyccZRuiwg+Zj9LPr9ezR+ii56WnpsIIAeLdf//9WZm///8TM3///GZmv///rMzCICKBYj///+zM4n///9MzYuHCHkHi7OMpaOwiosengeLjYr/AAFmZof/AACZmgiEjAX//+fMzP8AA4AA////MzT/AAOAAIufCPfnB5GJjogeh4uFhoeICAuOhJCFkIuSi5WOj5YI4fdcBZmrlo+YiwiPj4yPH4uciowFi3WKeHZojIseioqLegWJjYiNoJWIgB6LhomFh4IISfsqSvctBYiSiZCLkAiVko+THpYGjY6Njh+LnImMBYtninh4ZIyLHoqKi3oFh42Kjh6fi/8ABLMz///65mb/AA5Mzf//3RmaCAuBi4WPio4IdgaLb4dwhm0IoYoFl7egkZ6LCNeL+yb7bgWGg4uKi4cIh4+IlR73WQaOnpGolq8IdY+EegV8aoGDZ4sI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AboBwgHKAdIB2gHiAfAB+AIAAggCEAIYAiACKAI2AkQCTAACAAYACgABANcAAQGoAAIABgAKAAEA0AABAZ4AAgAGAAoAAQEEAAEBvwABAAQAAQK8AAEABAAB//4AAQAEAAEATgACAAYACgABAPAAAQH+AAEABAABAOwAAQAEAAEBlAABAAQAAQGsAAEABAABAOQAAQAEAAEA9AACAAYACgABAPcAAQHNAAEABAABAQAAAQAEAAECDwACAAYACgABAhkAAQLqAAMACAAMABAAAQIeAAEDCAABA9AAAQAEAAEA8gABAAQAAQI0AAIABgAKAAECPwABAxAAAgAGAAoAAQDsAAEBsgABAAQAAQEtAAIABgAKAAEBBAABAikAAgAGAAoAAQEKAAECJAACAAYACgABAQgAAQIpAAIABgAKAAEBAgABAiQAAQAEAAEBHwABAAQAAQEoAAEABAABARcAAQAEAAEBKgABAAQAAQGWAAEABAABAZcAAQAEAAEBMgABAAQAAQGXAAEABAABARcAAQAEAAEA+wABAAQAAQEMAAIABgAKAAEA/gABAhgAAQAEAAEBCgABAAQAAQLEAAEABAABAdgAAQAEAAEBCgABAAQAAQEKAAEABAABARUAAQAEAAEBIAACAAYACgABAQoAAQImAAIABgAKAAEBDAABAhsAAQAEAAEBCQABAAQAAQFlAAIAEAB8AH4AAAGxAbEAAwHPAc8ABAMuAy4ABQa2BrYABgbEBsQABwbJBssACAcpBysACwctBzAADgcyBzMAEgc6BzoAFAjvCP0AFQkBCQMAJAkGCQcAJwmCCYIAKQnlCesAKgACAAEASgBLAAEAAAABAAAACgG4AxIABURGTFQAIGN5cmwAWmdyZWsAlGhlYnIAzGxhdG4A4gAEAAAAAP//ABgAAAABAAIAAwAEAAUABgAIAAkACwANAA4ADwAQABEAEgAUABUAFgAXABgAGQAaABsABAAAAAD//wAYAAAAAQACAAMABAAFAAYACAAJAAsADQAOAA8AEAARABIAFAAVABYAFwAYABkAGgAbAAQAAAAA//8AFwAAAAEAAgADAAQABgAIAAkACwANAA4ADwAQABEAEgAUABUAFgAXABgAGQAaABsABAAAAAD//wAGAAMABwALAA0AFwAYACgABkFaRSAAXkNSVCAAXkRFVSAAKE1PTCAAlFJPTSAAlFRSSyAAXgAA//8AGAAAAAEAAgADAAQABQAGAAgACQALAA0ADgAPABAAEQASABQAFQAWABcAGAAZABoAGwAA//8AGAAAAAEAAgADAAQABQAGAAgACgALAA0ADgAPABAAEQATABQAFQAWABcAGAAZABoAGwAA//8AGQAAAAEAAgADAAQABQAGAAgACQALAAwADQAOAA8AEAARABIAFAAVABYAFwAYABkAGgAbABxhYWx0AKpjMnNjALBjYXNlALZjY21wALxkbGlnAMJmaW5hAMhmcmFjAM5mcmFjANZobGlnANxsaWdhAOJsaWdhAOpsbnVtAPBsb2NsAPZuYWx0APxvbnVtAQJwbnVtAQhzYWx0AQ5zaW5mARRzbWNwARpzbWNwASJzczAxASpzczAyATBzczAzATZzczA0ATxzczA1AUJzdXBzAUh0bnVtAU56ZXJvAVQAAAABAAAAAAABAAoAAAABABsAAAABABUAAAABAA4AAAABAAUAAAACAAYABwAAAAEABgAAAAEADQAAAAIACwAMAAAAAQAMAAAAAQAPAAAAAQABAAAAAQAcAAAAAQASAAAAAQARAAAAAQAUAAAAAQAJAAAAAgACAAMAAAACAAMABAAAAAEAFgAAAAEAFwAAAAEAGAAAAAEAGQAAAAEAGgAAAAEACAAAAAEAEAAAAAEAEwAgAEIASgBSAFoAYgBqAHIAfACEAIwAlACcAKQArAC0ALwAxADMANQA3ADkAOwA9AD8AQQBDAEUARwBJAEsATQBPAADAAAAAQECAAEAAAABB1gAAQAAAAEHcgABAAAAAQd2AAEAAAABCPQAAQAAAAEI+AAGAAAAAgj8CToABAAAAAEJgAABAAAAAQrQAAEAAAABC5IAAQAAAAEMGgAEAAAAAQ3MAAQAAAABDf4ABAAAAAEPWAAEAAAAAQ92AAEAAAABD5wAAQAAAAEP0gABAAAAARAOAAEAAAABEGgAAQAAAAEQogABAAAAARCsAAYAAAABEM4AAQAAAAESrgABAAAAARK8AAEAAAABEsoAAQAAAAES2AABAAAAARLcAAEAAAABEuAAAQAAAAEThgABAAAAAROOAAEAAAABE5gAAQAAAAETqgABBOQAuwF8AYABhAGIAZABlAGYAaQBrAG0AbwBxAHMAdQB3AHkAewB8AH2AfwCAAIEAggCDAIQAhQCGAIcAiACJAIoAi4CMgI4AjwCQAJEAkgCTAJQAlQCWAJcAmACZAJoAmwCcAJ0AngCfAKAAoQCiAKMApAClAKYApwCoAKkAqgCrAKwArQCuAK8AsACxALIAswC0ALUAtgC3ALgAuQC6ALsAvAC9AL4AvwDAAMEAwgDEgMWAxoDHgMiAyYDKgMwAzQDOAM8A0ADRANIA0wDUANUA1gDXANgA2QDaANsA3ADdAN4A3wDgAOEA4gDjAOQA5QDmAOcA6ADpAOoA6wDsAO0A7oDvgPCA8YDygPOA9ID1gPaA94D4gPmA+oD7gP2A/4EAgQKBBIEFgQaBB4EIgQmBCoELgQyBDYEOgQ+BEIERgRKBE4EUgRWBFoEYgRqBHAEdgR8BIIEiASOBJQEmgSgBKYErASyBLgEvgTEBMgEzATQBNQE2ATcAAEJDgABCdcAAQnYAAMG1wbnBvEAAQkqAAEHgwAFCOEI0QnWCNAI4AADCOIAeQjSAAMI4wByCNMAAwjkAHMI1AADCOUG0QjVAAMI5gbSCNYAAwjnBtMI1wADCOgG1AjYAAMI6QbVCNkAAwjqBtYI2gABBtkAAgmGCRkAAgmHCSAAAQmFAAEJhAABCdkAAQnaAAEJDwABCRAAAQkRAAEJEgABCRMAAQkUAAEJFQACCRYJCQABCRcAAgkYCW4AAQkZAAEJGgABCRsAAQkcAAEJHQABCR4AAQkfAAEJIAABCSEAAQkiAAEJIwABCSQAAQklAAEJJgABCScAAQkoAAEJ2wABCdwAAQndAAEJ3wABCeAAAQneAAEJKwABCSwAAQktAAEJLgABCS8AAQkwAAEJMQABCTIAAQkzAAEJNAABCTUAAQk2AAEJNwABCTgAAQk5AAEJOgABCTsAAQk8AAEJPQABCT4AAQk/AAEJQAABCUEAAQlDAAEJRAABCUUAAQlGAAEJRwABCUgAAQlJAAQJTQkKCUwJCwABCSsAAQksAAEJLQABCS4AAQkvAAEJMAACCTEJBAABCTIAAQkzAAEJNAABCTUAAQk2AAEJNwABCTgAAQk5AAEJOgABCTsAAQk8AAEJPQABCT4AAQk/AAEJQAABCUEAAQlDAAEJRAABCUUAAQlGAAEJRwABCUgAAQlJAAEJSgABCVAAAQlRAAEJUgABCVMAAQlUAAEJTwABCVUAAQlWAAEJVwACCRcJbgABCUsAAQlLAAEJWAABCWoAAQlZAAEJWgABCVsAAQlcAAEJXQABCUIAAQleAAEJXwABCWAAAwHYAR8JbQADCWEB2QltAAEJYgADAdoJbAljAAMJYwHbCWwAAQlrAAEJZAABCWUAAQlmAAEJZwABCWgAAQlpAAEDcAABA3EAAQOCAAEDgwABA4QAAQNjAAEDdQABCQwAAQnhAAEJ4gABCNsAAwbYBugG8gADCNEI4QjQAAIAEgjiAAIAEwjjAAIAFAjkAAIAFQjlAAIAFgjmAAIAFwjnAAIAGQjpAAIAEQjRAAIAEgjSAAIAEwjTAAIAFAjUAAIAFQjVAAIAFgjWAAIAGAjYAAIAGgjaAAEJLwABCUEAAQlHAAEApgABAEkAAQAHAAMJcAAiAEIAAQC7AAcACQAKAAwADgAQABEAEgATABQAFQAWABcAGAAZABoAHgAsADMANwA4ADwAPgBCAEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABeAGEAawB7AH8AgACBAIIAgwCEAIUAhgCHAIgAiQCKAIsAjACNAI4AjwCQAJEAkgCTAJQAlQCWAJgAmQCaAJsAnACdAJ4AnwCgAKEAogCjAKQApQCmAKcAqACpAKoAqwCsAK0ArgCvALAAsQCyALMAtAC1ALYAuAC5ALoAuwC8AL0AvgC/AMMAxQDHAM0AzwDRANkA2wDfAPEA8gDzAPoA/gECAQQBCAELAREBEwEVARkBGwEeAR8BIQEiASMBJQEnAS8BMQE6ATwBPgNTA1kDWwNiA2MDZANnBUkGwQbCBvkHgAjQCNII0wjUCNUI1gjXCNkI4QjiCOMI5AjlCOYI6AjqCOsI7AjtCQQJCQkOCQ8AAgASAAYB2AHZAdoB2wltCWwAAQAGAR4BHwEiASMJYQljAAEABgjNAAEAAQBKAAIAxABfCQ4JKgkPCRAJEQkSCRMJFAkVCRYJGAkZCRoJGwkcCR0JHgkfCSAJIQkiCSMJJAklCSYJJwkoCU0JKwksCS0JLgkvCTAJMQkyCTMJNAk1CTYJNwk4CTkJOgk7CTwJPQk+CT8JQAlBCUMJRAlFCUYJRwlICUkJSglQCVEJUglTCVQJTwlVCVYJVwlLCRkJWAlqCVkJWglbCVwJXQlCCV4JXwlgCWEJYgljCWsJZAllCWYJZwloCWkJIQltCWwJTgABAF8ABwAOAEIAQwBEAEUARgBHAEgASQBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAnwCgAKEAogCjAKQApQCmAKcAqACpAKoAqwCsAK0ArgCvALAAsQCyALMAtAC1ALYAuAC5ALoAuwC8AL0AvgC/AMMAxQDHAM0AzwDRANkA2wDfAPMA+AD6AP4BAgEEAQgBCwERARMBFQEZARsBHwEhASMBJQEnAS8BMQE6ATwBPgE/AdkB2wkGAAEABgkkAAEAAQBKAAEABv//AAEAAQNkAAMAAQAcAAEAEgAAAAEAAAAJAAIAAQARABoAAAACAAUAEAAaAAAAfAB+AAsGyAbIAA4G3QbmAA8HGwcnABkAAwAAAAEAEgABABwAAQAAAAgAAgABABAAGgAAAAIACAAQABoAAAByAHMACwB5AHkADQB8AH4ADgbIBsgAEQbPBs8AEgbRBtYAEwcbBycAGQABAUYABwAUAIoAtADoAP4BKAE+AAwAGgAiACoAMgA6AEIASgBSAFoAYgBqAHAHIQADBsgAFwchAAMAEAAXByMAAwbIABkHIwADABAAGQcdAAMGyAAWBx0AAwAQABYHGwADBsgAFAcbAAMAEAAUAH0AAwAQABMAfAADABAAFQcnAAIGyAcnAAIAEAAEAAoAEgAaACIHHgADBsgAFgceAAMAEAAWBxwAAwbIABQHHAADABAAFAAFAAwAFAAcACQALAckAAMGyAAZByQAAwAQABkHHwADBsgAFgcfAAMAEAAWAH4AAwAQABUAAgAGAA4HIAADBsgAFgcgAAMAEAAWAAQACgASABoAIgciAAMGyAAXByIAAwAQABcHJQADBsgAGQclAAMAEAAZAAIABgAOByYAAwbIABkHJgADABAAGQABAAQAEAABAAEABwASABMAFAAVABYAGAeDAAIAbAAzBtoG2wbXBtgGyAbPAHkAcgBzBtEG0gbTBtQG1QbWBtkJcQlyCXMJdAl1CXYJdwJiBtACZAl4ApMJeQbcCXoJewl8AmUClAl9CX4JfwJpApUCagmAApICYwJmAmcCaAKWBtgG1QbPAAIADwAJAAoAAAAMAAwAAgAOAA4AAwAQABoABAAeAB4ADwBCAFsAEAIVAhUAKgIYAhgAKwIrAisALAItAi0ALQIzAjMALgJHAkcALweAB4AAMAjpCOkAMQnWCdYAMgACAFwAKwbqBusG5wboBt0G3gbfBuAG4QbiBuMG5AblBuYG6QbsCbIJswm0Bu0JtQm2CbcJuAm5CboJuwm8Cb0G7gm+Cb8JwAnBCcIJwwnECcUG7wnGCccG6AbdAAIACAAJAAoAAAAMAAwAAgAOAA4AAwARABoABAAeAB4ADgBCAFsADweAB4AAKQnWCdYAKgACAN4AbAkOCdcJ2AkqCQ8JEAkRCRIJEwkUCRUJFgkXCRgJGQkaCRsJHAkdCR4JHwkgCSEJIgkjCSQJJQkmCScJKAnZCdoJ2wncCd0J3wngCd4JKwksCS0JLgkvCTAJMQkyCTMJNAk1CTYJNwk4CTkJOgk7CTwJPQk+CT8JQAlBCUMJRAlFCUYJRwlICUkJUAlRCVIJUwlUCU8JVQlWCVcJbglLCVgJaglZCVoJWwlcCV0JXglfCWAJYQliCWMJawlkCWUJZglKCWcJaAlpCW0JbAlNCeEJ4gkvCUEJRwABAGwABwAJAAoADgAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA+AFwAXgBhAGsAewB/AIAAgQCCAIMAhACFAIYAhwCIAIkAigCLAIwAjQCOAI8AkACRAJIAkwCUAJUAlgCYAJkAmgCbAJwAnQCeAMIAxADGAMwAzgDQANgA2gDeAPAA8gD5AP0BAQEDAQcBCgEQARQBGAEaAR4BIAEiASQBJgEuATABOAE5ATsBPQHYAdoFSQbBBsII6wjsCO0AAQAyAAIACgAeAAIABgAOCegAAwBHAEoJ5gACAEoAAgAGAA4JAgADAT8ASgj8AAIASgABAAIARwE/AAEBSgAKABoALAA4AEoAXABmANoA5AD2ASAAAgAGAAwGywACACAGxAACAAIAAQAEBrYAAwAPAA8AAgAGAAwGygACAAIGyQACACAAAgAGAAwJTgACCSMJBgACAFYAAQAECQcAAgBJAA0AHAAkACwANAA8AEQASgBQAFYAXABiAGgAbgjzAAMARwBVCPIAAwBHAEwI8QADAEcASwjwAAMARwBJCekAAwBHAE0I9wACAFUI9gACAEwI9QACAEsI7wACAEMI9AACAEkJggACCYEJ5wACAE0J5QACAEcAAQAECPoAAgBVAAIABgAMBwIAAgAnBv8AAgAkAAUADAASABgAHgAkCQEAAgBNCP0AAgE/CQUAAgBJCQMAAgBUCeoAAgBVAAUADAASABgAHgAkCPMAAgBVCPIAAgBMCPEAAgBLCPAAAgBJCekAAgBNAAEACgACAA8AIAAyADUARwBVAHABPwnlAAEAHgACAAoAFAABAAQI+wACAFUAAQAECesAAgBVAAEAAgBEAFQAAQAmAAIACgAcAAIABgAMCPkAAgBJCPgAAgBMAAEABAkIAAIAWwABAAIARABVAAIALgAUCNEI0gjTCNQI1QjWCNcI2AjZCNoAEQASABMAFAAVABYAFwAYABkAGgACAAII4QjqAAAJpAmtAAoAAgA0ABcJ1gARABIAEwAUABUAFgAXABgAGQAaBvkAZQmkCaUJpgmnCagJqQmqCasJrAmtAAIAAgjQCNwAAAjhCOoADQACADQAFwjRCNII0wjUCNUI1gjXCNgI2QjaCNwI2wjZCOEI4gjjCOQI5QjmCOcI6AjqCNAAAgAHABEAGgAAAGUAZQAKBvkG+QALCOkI6QAMCaQJqwANCa0JrQAVCdYJ1gAWAAIAMgAWCaQJpQmmCacJqAmpCaoJqwmsCa0I4QjhCOII4wjkCOUI5gjnCOgI6QjqBvkAAgACABEAGgAACNAI2wAKAAIACgACCdYI0AABAAIAEQjRAAIAFgAICQ4JCQNwA3EDggN1AEkJcAABAAgABwBJA1MDWQNbA2cJCQkPAAIAGABMAEwATAAGAAABsgHEAdYAAAAAAAIACABHAEcAAABKAEsAAQKyAscAAwLMAswAGQMCAwIAGgMIAwkAGwnICdQAHQnlCeUAKgACADsACgAKAAQAIAAgAAQAIgA0AAUANQA1AAQANgA2AAUANwA4AAQAOQA5AAUAOgA6AAQAOwA7AAUAPgA+AAQARwBHAAMASgBLAAEAXQBeAAQAZgBmAAQAagBqAAQAcgBzAAQAdgB2AAQAeQB5AAQAggCCAAUAhgCHAAUAlACUAAUAnQCdAAQAngCeAAUAoACgAAQAowCkAAQAqACoAAQAqwCsAAQArwCvAAQAsgCyAAQAtQC2AAQAuQC5AAQAvAC8AAQAvwC/AAQAwQDBAAQAwwDDAAQA0wDTAAQA1QDVAAQA2wDbAAQA6QDpAAQA6wDrAAQA7QDtAAQA8wDzAAQBDQEN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A9oD4APmA+wD8gP4A/4EBAQKBBAEFgQcBCIEKAQuBDQEOgRABEYETARSBFgEXgRkBGoEcAR2BHwEggSIBI4ElASaBKAEpgSsBLIEuAS+BMQEygTQBNYE3ATiBOgE7gT0BPoFAAUGBQwFEgUYBR4FJAUqBTAFNgU8BUIFSAVOBVQFWgVgBWYFbAVyBXgFfgWEBYoFkAWWBZwFogWoBa4FtAW6BcAFxgXMBdIF2AXeBeQF6gXwBfYF/AYCBggGDgYUBhoGIAYmBiwGMgY4Bj4GRAZKBlAGVgZcBmIGaAZuBnQGegaABoYGjAaSBpgGngakBqoGsAa2BrwGwgbIBs4G1AABAWIDUgABAQsDUgABAVQDUgABATIDUgABAREDUgABARQDUgABAW0DUgABAWkDUgABAJYDUgABALYDUgABAVADUgABAJUDUgABAa8DUgABAVoDUgABAU8DUgABARUDUgABAVwDUgABAQ0DUgABAOcDUgABATMDUgABAVoDUgABAVADUgABAcIDUgABAUwDUgABAScDUgABAUADUgABANEChQABAPIChQABANoChQABAPIChQABAOcChQABASsChQABAIkDGwABARMChgABAH0DQwABAYgChQABAQgChgABAO4ChQABAQ8ChgABAO4ChQABAL8ChgABAM4ChQABAP8ChQABAQAChgABAVkChgABAQAChgABAQoChQABANwChgABAWoDfgABAWwDfgABAWoDfgABAWwDfgABAikDJQABAXMDUgABASgDfgABAJADfgABAJQDfgABAVUDUgABAVgDfgABAVgDfgABAVgDfgABAVgDfgABAVgDfgABAVgDfgABAV8DUgABAVgDfgABAVgDfgABAVgDfgABAVgDfgABAVgDfgABARkDUgABAP8DQgABAP8DQgABANYDQgABAP8DQgABAP8DQgABAP8DQgABAUwChAABAP8DQgABAP8DQgABAP8DQgABAP8DQgABAP8DQgABAP8DQgABAP8DQgABAP8DQgABAIkDGwABAP8DQgABAP8DQgABAP8DQgABAP8DQQABAP8DQgABAP8DQgABAP8DQgABAP8DQgABAPcDQgABAP8DQgABAP8DQgABARYChgABAP8DQgABANECywABAW0DUgABANEChQABAOMDGwABAOMDGwABAOMDGwABAOMDGwABAOYDGwABAOcChQABAIsDGwABAJIDUgABAIQDBwABAIQChQABAPAChAABAVoDJAABAQgChgABAiICugABAMIDGwABAPcDGwABAUcDJQABAQsDJQABATIDJQABANECigABAUsDJQABASsChQABAa8DIQABAQgChgABAWMDJAABAVAChgABAQ4ChAABANYChQABAREDUgABAOAChQABAQUChgABAIwChQABAXkChgABANoChQABANoChQABAMwChQABAMoChQABANEChQABAMIChQABAQkChQABAQIChQABASsCNQABASsCNQABAHsChQABAIAChQABAZcChQABAX8ChQABAQgChgABAQcChQABAN4CvwABAQMChQABANoChgABAP8ChgABAO4ChQABARb/KgABARb/KgABAQMChQABASwDIgABAOAChQABAQwChgABAVUChQABANMChQABAOwChQABAOICPQABAOICPQABAK4CPQABAOICPQABAOwCPQABAPMCPQABAPICPQABAOUCPQABAOICPQABAOICPQABAQICPQABAQkCPQABAQQCPQABAPACPQABAPICPQABAOICPQABAOICPQABAOICPQABAPQCPQABAOICPQABARYCPQABAQYCPQABAPMCPQABAPICPQABAPQCPQABAOcChQABAOcChQABAJIDUgABAVoDUgABAP8ChQABAOcChQABAJIDUgABAIQDBwABAOcChQABARQDJAABAQ4ChAABALQChQABASsChQABAVADHgABARMChgABAUADIwABANoChgABAPwChgABANEChQABAiMChgABAjIChQABAVkChgABASECtQABAVEChgABAVEChgABAa4DJQABAP8ChgABAIwChQABANsAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7AEIARABFAEYASABJAEoATABNAE4ATwBQAFEAUgBTAFQAVgBXAFgAWQBaAFsAggCDAIQAhQCGAIcAigCOAI8AkACRAJIAkwCUAJUAlgCYAJkAmgCbAJwAnQCeAKAAoQCiAKMApAClAKYApwCoAKkAqgCrAKwArQCuAK8AsQCyALMAtAC1ALYAuQC6ALsAvAC9AL4AvwDBAMQAxQDJAMsAzQDVANcA2QDpAO4A7wDxAPgBCgELARIBIQErAUEBRAFKAUwBVAFVAVwBXgFiAWMBdAGdAegB6QH1AfcB+QIIAgkCCgILAg0CDgIUAhcCGAIZAhsCHAIhAiMCJAIlAi4CPQJEAlACUgJgAmEDZgOaBAIEBARQBFQEZASKBIsEjASNBI4EkQSSBJQElQSWBJcEmASbBJwEnQSeBJ8EoAShBKIEowSkBKUEpgSnBMQExgTXBR0FHgVkBXUFdgV4BaUFqgdMCKwIrQiuCK8IsAixCN4I9gkFCQgJJgmLCYwJjQmRCeQAAgAQANMA0wAAAi0CLQABArICxgACAu8C9QAXAvgC+AAeAvwC/gAfAwEDAwAiAwgDCAAlAwwDDAAmAxQDIAAnBH4EfgA0BIQEhAA1BIYEhwA2CcgJ0AA4CdIJ0gBBCdQJ1ABCAEMAAAEOAAABFAAAARoAAAEgAAABJgAAASwAAAEyAAABOAAAAT4AAAFEAAABSgAAAVAAAAFWAAABXAAAAWIAAAFoAAABbgAAAXQAAAF6AAABgAAAAYYAAAGMAAABkgAAAZgAAAGeAAABpAAAAaoAAAGwAAABtgAAAbwAAAHCAAAByAAAAc4AAAHUAAAB2gAAAeAAAAHmAAAB7AAAAfIAAAH4AAAB/gAAAgQAAAIKAAACEAAAAhYAAAIcAAACIgAAAigAAAIuAAACNAAAAjoAAAJAAAACRgAAAkwAAAJSAAACWAAAAl4AAAJkAAACagAAAnAAAAJ2AAACfAAAAoIAAAKIAAACjgAAApQAAAKaAAEA4wK6AAEAvwAaAAH/cgKrAAH/QQKqAAH/dQK5AAH/dQK5AAH/LwKFAAH/MwKFAAH/XwKpAAH/TAKbAAH/LgKFAAH/YAL9AAH/SALEAAH/JQLKAAH/MwKkAAH/ZQKwAAH/CwLPAAH/dAL2AAH/BQKjAAH/MwKFAAH/kgJdAAH/oAJdAAH/tAJdAAH+9wJdAAH+9wJdAAH/FQJjAAH/cgKrAAH/QQKqAAH/GwJpAAH/oAJdAAH/BQJtAAH/KQKFAAH/MwKFAAH/FQKFAAH/NwKFAAH/VQKFAAH/BQKFAAH/VQKFAAH/XAKFAAH/VQKFAAH/DAKFAAH/HwKFAAH/XwKFAAH/ZwKFAAH/YAKFAAH/QQKFAAH/IwKFAAH/PgKFAAH/NwKFAAH/OwKFAAH/FQKFAAH/HAKEAAEAqgI/AAEA0gI/AAEApAI/AAEApAI/AAH/UQKzAAH/LgK1AAH/ewKsAAH/TAJ/AAH/XwKSAAH/HgLrAAH/JALpAAH/YAKSAAH/QQMlAAH/EwMgAAEAkgKuAAECWgH2AAECagAMAD0AfACCAIgAjgCUAJoAoACmAKwAsgC4AL4AxADKANAA1gDcAOIA6ADuAPQA+gEAAQYBDAESARgBHgEkASoBMAE2ATwBQgFIAU4BVAFaAWABZgFsAXIBeAF+AYQBigGQAZYBnAGiAagBrgG0AboBwAHGAcwB0gHYAd4B5AABAJIAuQABAVoBOwABAVoBOwABATQBTwABAWQB5QABAJQBRQABALoBOwABAR4BOwABAaoBvQABAWQBQAABAVoBQgABAR4B0AABAVABRAABARYB1AABAOwBWQABATMBHQABAVABQQABAU4B2gABAUYBRQABATEBQQABAOwA1wABAOwA1wABAOwA1wABAOwA1wABAIgA1wABAOMBHQABAQgA1wABAI4A1wABAJoA1wABAIgA1wABAQoA1wABAQgA1wABAOwA1wABAPYA1wABAOwA1wABAIgAuQABAH8A1wABAPYA1wABAPcBCwABAO0A1wABAM8A1wABAMEBEgABAGMBEgABAKABEgABAOkBEgABAF0BEgABAOgBEgABAP0A/wABAMEBEgABAMEBEgABAMEBEgABAQwBEgABARsBEgABAHMBEgABAPQBEgABARQBEgABAQIBEgABAQcBEgABAOABEgABAMEBEgABAQ0BEgACABAAIwAlAAAAKAArAAMALQA3AAcAOQA5ABIAOwA7ABMAQwBLABQATQBTAB0AVQBXACQAWQBZACcAWwBbACgEiwSPACkEkQSSAC4ElASYADAEmgSeADUEoQSiADoEpASkADwAAQAGAuYC5wLoAukC6gSBAAYAAAAaAAAAIAAAACYAAAAsAAAAMgAAADgAAf84ANcAAf84ANcAAf8QANcAAf8NANcAAf6FASkAAQClAPsAAQGEATYAAQGOAAwAJQBMAFIAWABeAGQAagBwAHYAfACCAIgAjgCUAJoAoACmAKwAsgC4AL4AxADKANAA1gDcAOIA6ADuAPQA+gEAAQYBDAESARgBHgEkAAEBmgAQAAEBaQAqAAEBOAAUAAEBgAApAAEBoQAKAAEA0QAKAAEBdAAsAAEBIgAN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Ad//kgABATP/kgABASf/kgABAR//kgABAMT/kgABAOr/kgABAOz/kgABAN3/kgABAOr/kgABAIT/kgABAPn/kgABAQP/kgABAIj/kgABAQf/kgABAIf/kgABAZL/kgABAQn/kgABAPP/kgABASr/kgABAJT/kgABAIf/kgABAMT/kgABAKP/kgABAO//kgABAPH/kgABAWD/kgABAOD/kgABATz/kgABAM//kgABAiX/lQABARf/lQABARf/lQABARf/lQABARf/lQABAUf/kwABAMT/lAABAJL/lAABAOz/kgABAOz/kgABAOz/kgABAOz/kgABAOz/kgABAOz/kgABAEb/lAABAIj/kgABAIv/lAABAIT/lAABAWz/kwABAQn/kQABALf/kgABAO//kgABAUj/lAABAOb/kwABAQz/lAABAO7/lAABAXH/lQABANT/lQABAQP/kQABAQf/lQABAcL/lAABAQn/kQABAV7/jwABAKP/lQABAQb/kQABAKP/kwABAVz/kwABAOX/jgABANT/jgABAPP/jgABANT/jgABAKz/jgABANT/jgABANT/jgABANT/jgABANT/jgABANT/jgABANT/jgABANT/jgABALj/jgABANT/jgABAQD/jgABAPj/kgABALH/jgABANv/fwABAPD/jgABAPD/jgABAIb/jgABAJn/jgABAIv/jgABAJL/jgABANr/iAABAZr/jgABASb/jgABAX//lwABAQn/kQABAQb/kAABAPf/jgABAVX/jgABAL7/jgABAMv/jgABAH/+zwABAQL/jgABAPv/jgABAO//lQABANH/zgABAMr/lQABAOb/lQABALf/lQABAT4CHgABAT4CHgABARP/jgABAbT/kQABAOr/lQABAPb/jwABAPb/lQABAPAAAAABAO4AAQABAK3//gABANMAAAABAOQAAAABAIIAAAABAJL//QABAOD//gABAPAAAAABAIsAAAABALIAAQABANUAAAABAOYAAAABAPwAAAABAPAAAAABAET//gABAKcAAAABAP0AAAABAPAAAAABAJgAAAABAN4AAAABAPAAAAABAPAAAAABAPAAAAABANQAAAABAQoAAAABAPAAAAABAQcAAAABAPAAAAABAPAAAAABAYP/kgABAIj/lQABALr/jwABAQP/kQABAVb/kwAB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AAQFnwWfAAQFoQWhAAQFowWjAAQFswW6AA4FzwXWABQF3wXmABQF+wX+AAQGVAZXAA4GZQZmABQGcQZ0ABQGgAaDAAQGlAacAA8GoAalABEGpwanAA8GqAapABYGqgaqAA8GqwatABYGrgauAA8GrwavABYGtAa2AA8GuAa4AA8GwQbCABEG3QbpABAG7AbwABAIrQitAAYI0AjRAAcI2AjYAAQI2gjaAAcI6wjrAA4I7AjsAAcI7gjuAAUI7wjvAAoI8gjyAAkI9gj2AAkI+Aj4AAkJDwkPAA0JEgkSAAsJFAkUABcJGQkZAAkJGgkaAAwJHQkdAAsJHgkeABgJHwkfAAsJIgkiAAgJIwkjABcJJAklAAgJJgkmAAkJJwknAAgJKgkqABEJKwkwAA0JPQlBAAsJQwlDAAsJRAlHABcJSAlIAAgJSglKAAgJUAlRAA0JZQlmABcJgQmCAAIJhAmFAAUJhgmGAAYJ1wnXABIJ2QnZABIJ2wnbABIJ3wnjABEJ5QnlAAEAAgHsAAIAAgAQAAMAAwAHAAgACAAHAAoACgANAAsACwAHAAwADAAPAA0ADQAJAA4ADgAPAA8ADwAJAB0AHwAPACAAIAAQACIAIgAIACMAIwATACQAJAAEACUAJwATACgAKAAEACkAKgATACsAKwAOACwALQATAC8ALwATADAAMAAEADEAMQATADIAMgAEADMAMwATADUANQABADYANgASADcAOAADADoAOgACAD4APgANAEIAQgALAEMAQwARAEQARAAKAEUARQALAEYARgAKAEgASAAMAEkASQARAEsASwAOAEwATQARAE4ATwAMAFAAUAAKAFEAUQAMAFIAUgAKAFMAVAAMAFYAVgAXAFcAWAAFAFkAWgAGAFsAWwAMAF4AXgANAF8AXwAPAGsAawAPAG0AbQAPAHAAcAAVAHIAcwAVAHcAdwAPAHkAeQAVAHsAewAPAIAAhgAIAIcAhwAEAIgAkQATAJIAlgAEAJgAmAAEAJkAnAASAJ0AnQACAKEAoQALAKYApgALAKcApwAKAKkAqQALALMAswALALcAtwAPALgAuAALAL0AvQAGAL4AvgARAL8AvwAGAMAAwAAIAMIAwgAIAMQAxAAIAMUAxQALAMYAxgAEAMcAxwALAMgAyAAEAMoAygAEAMwAzAAEAM4AzgATANAA0AATANIA0gATANQA1AATANYA1gATANcA1wALANgA2AATANkA2QAKANoA2gATANwA3AAEAN4A3gAEAOAA4AAEAOIA4gAEAOQA5AATAOUA5QARAOYA5gATAOcA5wARAOgA6AATAOoA6gATAOwA7AATAO4A7gATAPAA8AATAPIA8gATAPQA9QAOAPYA9gATAPcA9wARAPkA+QATAPoA+gARAPsA+wATAPwA/AARAP0A/QATAP4A/gARAP8A/wATAQABAAARAQEBAQATAQIBAgARAQMBAwATAQUBBQATAQcBBwATAQoBCgATAQwBDAAEAQ0BDQALAQ4BDgAEARABEAAEARIBEgAEARMBEwAKARQBFAATARYBFgATARgBGAATASIBIgABASQBJAABASgBKAASASoBKgASASwBLAASAS4BLgASATABMAASATIBMgASATQBNAADATUBNQAFATgBOAACAUABQAARAUIBQgATAUcBRwAEAUgBSAAKAUkBSQATAU0BTQAKAVMBUwAEAV8BYAAEAWEBYQAKAYQBhQATAYoBiwATAY0BjQAIAZMBkwASAZUBlQASAZcBlwASAZkBmQASAZsBmwASAZ0BnQAKAZ4BngAIAaABoAAIAaIBogAIAaYBpgAEAagBqAATAaoBqgAEAawBrAAEAbQBtAAEAbYBtgATAboBugAIAbwBvAAIAb4BvgAEAcABwAAIAcIBwgAIAcQBxAATAcYBxgATAcoBygATAcwBzAAEAc4BzgAEAdAB0AATAdIB0gATAdQB1AASAdYB1gASAdoB2gABAd4B3gATAeYB5gAIAeoB6gAEAewB7AAEAe4B7gAEAe8B7wALAfAB8AAEAkoCSgAEAzMDMwAIAzQDNQATAzYDNgAIAzcDNwATAzkDOQATAzoDOgAEAzsDPAATAz0DPQAIAz8DPwATA0EDQQAEA0IDQwATA0UDRQABA0YDRgACA0cDRwAEA0sDSwATA0wDTAACA00DTQALA1IDUgAKA1QDVAAFA1gDWAAXA1oDWwAXA10DXQAMA14DXgAFA2ADYAAKA2IDYgALA2MDZAAKA2YDZgAXA2cDZwAKA2gDaAAGA2oDagAKA20DbQALA28DbwAKA3UDdQALA3gDeAAEA4IDggAMA4MDgwALA4QDhAAKA4YDhgAEA4cDhwAKA4oDigAEA48DkAATA5EDkQABA5IDkgATA5MDkwAEA5UDlgATA5kDmQATA5oDmgABA5sDnAATA54DngATA58DnwAIA6ADogATA6QDpAATA6cDqQATA6wDrAATA60DrQAEA64DrwATA7ADsAAEA7EDsQABA7MDswAEA7UDtQATA7YDtgADA7cDuAATA7kDuQABA7oDuwATA70DvQATA78DvwALA8EDwgAMA8QDxAAKA8UDxQAGA8YDxgALA8cDxwAMA8kDyQAMA8sDzAAMA80DzQAKA84DzwAMA9AD0AAKA9ID0gAGA9MD0wALA9QD1QAMA9cD2AAMA9wD3AALA94D3gALA+MD4wAKA+cD5wAOA+kD6QAMA+0D7QAGA+4D7gAMBAEEAQAEBAMEAwADBAUEBQADBBQEFAATBBoEGgATBCIEIgATBCQEJAATBCYEJgATBCgEKAAEBCoEKgAEBCwELAABBDMEMwAGBDYENgADBE0ETQAIBFAEUAALBFQEVAAKBFgEWAAGBF0EXQATBF8EXwATBGEEYQAEBGMEYwAEBGQEZAAKBGUEZQAEBHEEcQATBHMEcwATBKsEqwAIBK0ErQATBK4ErgARBK8ErwATBLAEsAARBLEEsQATBLIEsgARBLMEswAEBLUEtQATBLcEtwATBLkEuQATBLoEugALBLsEuwATBL0EvQATBL8EvwATBMEEwQATBMMEwwATBMQExAAKBMUExQATBMYExgAKBMcExwATBMkEyQATBMsEywAEBM0EzQATBM4EzgARBM8EzwATBNAE0AARBNEE0QATBNIE0gARBNME0wATBNQE1AARBNUE1QATBNYE1gARBNcE1wATBNkE2QATBNsE2wATBNwE3AARBN0E3QATBN4E3gARBN8E3wATBOAE4AARBOEE4QATBOIE4gARBOME4wATBOQE5AARBOUE5QATBOYE5gARBOcE5wATBOgE6AARBO8E7wATBPEE8QATBPME8wATBPUE9QATBPcE9wAEBPkE+QAEBPsE+wAEBP0E/QAEBP8E/wATBQEFAQATBQMFAwATBQUFBQATBQcFBwATBQkFCQATBRUFFQABBRcFFwABBRkFGQABBRsFGwABBR0FHQASBR8FHwASBSEFIQASBSMFIwASBSUFJQASBScFJwADBSgFKAAFBSkFKQADBSoFKgAFBSsFKwADBSwFLAAFBS0FLQADBS4FLgAFBS8FLwADBTAFMAAFBTEFMQADBTIFMgAFBTMFMwADBTQFNAAFBUMFQwAFBUsFSwAIBUwFTAALBU0FTQAIBU8FTwAIBVEFUQAIBVMFUwAIBVUFVQAIBVcFVwAIBVkFWQAIBVsFWwAIBV0FXQAIBV8FXwAIBWEFYQAIBWMFYwATBWQFZAAKBWUFZQATBWcFZwATBWkFaQATBWsFawATBW0FbQATBW8FbwATBXEFcQATBXMFcwATBXUFdQATBXcFdwAEBXgFeAAKBXkFeQAEBXsFewAEBX0FfQAEBX8FfwAEBYEFgQAEBYMFgwAEBYUFhQAEBYcFhwAEBYkFiQAEBYsFiwAEBY0FjQAEBY8FjwASBZAFkAAXBZEFkQASBZMFkwASBZUFlQASBZcFlwASBZkFmQASBZsFmwASBhAGEAALBhIGEgALBhgGGAALBlQGVQAIBlgGWAAIBqAGpQAPBqgGqQAHBqoGqgAJBqsGrQAHBq8GrwAHBrQGtgAJBsEGwgAPBsQGxQAQBskGywAQBs8G3AAVBvEG8gAVCNAI0QAECNcI1wAECOsI6wAICPgI+QAKCQoJCgAMCQ8JDwAUCRAJEAAYCREJEQAKCRIJEgAYCRQJFAAYCRUJFQAKCRYJFwAYCRgJGAAOCRkJGgAYCRwJHAAYCR0JHQAKCR4JHgAYCR8JHwAKCSAJIAAYCSIJIgAFCSMJIwAWCSQJJQAFCSYJJgAGCScJJwAFCSoJKgAPCSsJMAAUCTIJMgAKCUQJRwAWCUgJSAAFCUoJSgAFCVAJUQAUCWUJZgAWCXEJgAAVCYQJhQADCdgJ2AANCdoJ2gANCdwJ3AANCd0J3QAQCd8J4wAPCeQJ5AAXAAECCgADAAgACQALAAwADQAOAA8AHQAeAB8AIQAiACUAJwApACoALAAtAC8AMAAxADIANQA2ADcAOAA5ADoAPABAAEMARgBHAEgATABQAFEAUwBXAFgAWQBaAFwAXwBrAG0AdwB7AIAAgQCCAIMAhACFAIwAjQCOAI8AkQCSAJMAlACVAJYAmACZAJoAmwCcAJ0AngCgAKgAqQCqAKsAsgCzALQAtQC2ALcAvQC+AL8AwADCAMQAzgDQAN0A3wDhAOMA5ADmAOoA7ADuAPAA8gD0APYA9wD4APkA+wD/AQEBAwEFAQcBCgEMAQ4BEAEVARcBGQEiASQBKAEqASwBLgEwATIBNAE1ATYBNwE4AT8BRgFJAUoBTgFPAWQBbAGNAZMBlQGXAZkBmwGeAaABpwGpAaoBrAG6AcABwgHMAc4B1AHWAdoB3gHmAeoB7AHuAfADKgMvAzADMwM1AzYDOQM6AzsDPAM9Az8DQQNCA0MDRQNGA0cDSANMA1QDVwNbA2ADYgNnA20DcgNzA3QDdQN4A3sDhgOMA44DkgOVA5YDlwObA5wDnQOeA58DogOjA6UDpwOoA6kDqgOsA60DrgOvA7EDsgO0A7UDtwO4A7kDugO7A70DvgPEA8UDyQPNA88D0gPTA98D4APrA+0EAQQDBAUEEAQSBBYEGgQcBB4EHwQgBCEEIgQsBDIEMwRBBE0EVQRXBFgEXQRfBGEEYgRjBGQEZQRnBGkEagRrBGwEbQRxBHMEqwS1BLcEuQS7BL0EyQTKBM0EzwTRBNME1QTXBNkE2wTcBN0E3gTfBOAE4QTjBOUE5wTvBPEE8wT1BPcE+QT7BP0E/wUBBRUFFwUZBRsFHQUfBSEFIwUlBScFKAUpBSoFKwUsBS0FLgUvBTAFMQUyBTMFNAU1BTcFOQU6BUMFSwVNBU8FUQVTBVUFVwVZBVsFXQVfBWEFcwV1BY8FkQWTBZUFlwWZBZsFnQWfBaEFowWzBbQFtQW2BbcFuAW5BboFzwXQBdEF0gXTBdQF1QXWBd8F4AXhBeIF4wXkBeUF5gX7BfwF/QX+BlQGVQZWBlcGZQZmBnEGcgZzBnQGgAaBBoIGgwaUBpUGlgaXBpgGmQaaBpsGnAagBqEGogajBqQGpQanBqgGqQaqBqsGrAatBq4Grwa0BrUGtga4BsEGwgbdBt4G3wbgBuEG4gbjBuQG5QbmBucG6AbpBuwG7QbuBu8G8AitCNAI0QjYCNoI6wjsCO4I7wjyCPYI+AkPCRIJFAkZCRoJHQkeCR8JIgkjCSQJJQkmCScJKgkrCSwJLQkuCS8JMAk9CT4JPwlACUEJQwlECUUJRglHCUgJSglQCVEJZQlmCYEJggmECYUJhgnXCdkJ2wnfCeAJ4QniCeMJ5QAAAAEAAAAAxtQumQAAAADBE842AAAAAMgHiBgB9AAAAPoAAAEgAFsBUAA/AbgAGQG4ACoCfQA5AsEAKwC+ADUBKgAsASoAFQFxAC0CDwBCANwAKwFSACgA3AA5AUMADwG4ACUBuABZ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Ag0AFQKVAAUCDQAVAeUAGwF/ADACSwAHATwAGQHfAEsBfwAiAtoADgIUAA0CWwAVAnwAIgIqAC8B1AApAmoAKAHIACICtwACAckAJAIlAAUBvwAlAr4AJQH4ACkCvgAlAfgAKQK+ACUB+AApAr4AJQH4ACkCPwAAAgcADwF8ABcClgAVAXYAFwEQ/9AC7QAiAuwAJAK2AAIChgAlAacADAIO//QCSwAHAX8AMAHJAAoCTP/bAckABwIEACwCBAAaAe0ASgGnAA0BqAAlAfcAJwIcACcBqwAiAb8AGwJPABgBjQAsAYwAJgG+ACYB6AAiATf/0gIcACQB8gAkAgkAIgILAAoBgAAPAggAEgIIABMCCAATASAAFAEZAEIBEQAUAR8ABQFmABIA9QAYAgQAEgMMABUC+AAOAw4AIAIL/9gCCwAVAjIAHgH4ACkCpwAdAskAIgI5ACABdAAJAWMAFQGRAAoBYwAcAW4AEAFcABMBXAAPAbkAHwG5ABABfwAwATD/wQEw/8EBMP/BAST/0wE8AAwBLgAUAg0AFQISAAoB6gAYAfEAAQLrAAACB//8AdgAEwGoACUBrQAgAaAAKAGzACsBrQAcAa0AJgGtABkCJAAxAr4AKgHFAB0B3AAeAf0AIgIsAB8BBf/uAd8AEgGzABcB8gAkAa0AHAGtACYDIgAlAvMAJwMxACcCVwAUAc4AGQJ+ABkDNQAWAg4AEgJPABIBvQAMAY0AMQI6ABECUAAhATMACgEzAAoAzwAAAPYAGQD2AA0BAAANARQAFgG9AAwBUgARAL4AEAFeADYAqAAdAK8AIACoABsA8wAxAPMALgEvADoBLwA6AgYAawIGAGsCBgBwAgYAbwFdADMBXQAwAIIAKAGpAEoBEgAsARIATwDNAEUBhgBKAQEAJAENAC0A0QAkAMwAJADAACAAwAAiAQMAJwEDACcBEgAoARIAIgE9ABUBIwBgAWkAXQFOAEABJAAFAV4ANgE+ACcBZwAxATEADwChAAoA/QAcATMAEgD3ABoBtQAaAbUAGgG1ABoBtQAaAbUAGgFtADIBdAAyATgADQHmAAUBegAzANcACgDXAAoBGgAUARAAFADqAB0AvQAeAUEAHgFBAB4BPgAUAO0AQADYAB4A2AAeANgAHgDYAB4BXgAeAUAAHgGqABQAAP8SAAD/EQAA/vYAAP7g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ArcAAgHJACQCtwACAckAJAK3AAIByQAkArcAAgHJACQCtwACAckAJAIlAAUBvwAlAiUABQG/ACUCJQAFAb8AJQIlAAUBvwAlAiUABQG/ABsCJQAFAb8AJQIlAAUBvwAlAiUABQG/ACUBKQAOAQ8AGQEpAA4BDwAZAr4AJQH4ACkCvgAlAfgAKQK+ACUB+AApAr4AJQH4ABsCvgAlAfgAKQK+ACUB+AApAr4AJQH4ACkCvgAlAfUAKQK+ACUB9QApAr4AJQH1ACkCvgAlAfUAKQK+ACUB9QApApUABQINABUClQAFAg0AFQKyAAACEwAVArIAAAITABUCsgAAAhMAFQKyAAACEwAVArIAAAITABUCPwAAAgcADwI/AAACBwAPAj8AAAIHAA8CPwAAAgcADwMMABECFgAcAiIALQHoACoCRAAAAf0ACwI2ACICNgAiAjYAIgI2ACICNgAiAjYAIgI2ACICNgAiArcAAgK3AAIC4P/jAsX/zQK+/+oCvv/tAsv/ywLN/+MBjQAsAY0ALAGNACwBjQAsAY0ALAGNACwCoP/jAob/ywNA/+ADL//NAzH/3wMn/8cCEAAbAhAAGwIQABsCEAAbAhAAGwIQABsCEAAbAhAAGwM0/+QDNP/UA9v/4gPR/88D1P/ZA8r/zQO6/9wDxP/UARkAQgEZAEIBGf/+ARn/9gEZ//wBGf/3ARkAAAEZAAEBf//eAW3/zwIn/94CC//GAhX/1AIU/8wB+//JAhL/0gH4ACkB+AApAfgAKQH4ACkB+AApAfgAKQLe/+IC6//MA37/1wOG/8kDbf/gA1v/zAHqABgB6gAYAeoAGAHqABgB6gAYAeoAGAHqABgB6gAYAsL/1ANh/88DYf/OAyj/1gKSACICkgAiApIAIgKSACICkgAiApIAIgKSACICkgAiAv4AAwMYAAADlP/YA4L/xgNb/94DX//QA1L/0QNs/94CNgAiAjYAIgGNACwBjQAsAhAAGwIQABsBGQAuARkAQgH4ACkB+AApAeoAGAHqABgCkgAiApIAIgI2ACICNgAiAjYAIgI2ACICNgAiAjYAIgI2ACICNgAiA3IAAgNoAAIDoP/jA4n/zQOH/+oDgP/tA47/ywOW/+MCEAAbAhAAGwIQABsCEAAbAhAAGwIQABsCEAAbAhAAGwPf/+QD4v/UBID/4gR3/88Ehf/ZBHj/zQRv/9wEd//UApIAIgKSACICkgAiApIAIgKSACICkgAiApIAIgKSACIDq//OA7L/sAQ+/9gEOP/GBCn/3gQ4/9AEHv+/BDH/zAI2ACICNgAiAjYAIgI2ACICNgAiAjYAIgI2ACICtwACArcAAgK3AAICtwACA4cAAgC1ACABSwCBALYAIAGlAFUBcAA0AhAAGwIQABsCEAAbAhAAGwIQABsCsv/mAqH/6gNC/+EDOf/ZA5IADgFSACMBUgAjAUAAKAEZ//QBGf/7ARn//gEZ//sBGf/2ARn/9gEwABEBKQAOAYv/3wGC/+cBTwAdAUsAHAFkADIB6gAYAeoAGAHqABgB6gAYAgwANgIMADYB6gAYAeoAGAI/AAACPwAAAsL/3QKx/94CVf/hAXcAMgFwADIA7wA1ApIAIgKSACICkgAiApIAIgKSACIC///gAr7/4AMC/9YCy//oA3YALADHACcAqAAdAfMAAAPnAAACBgAAAvQAAAFMAAAA+QAAAKYAAAG2AAAA2wAAAH0AAAAaAAAAAAAAAVIAKAFSACgBtgAhAiQANALmACMDmgAjARYAPAHmAAUBDABJAQwARAEMAEQBDABIAXcAMAF3ACwBdwAsAXUAMQJMAFICTABSAV8APgF3AEkA3AA5AagAOQLtADkA3AA5AH0AAAOPADkEsQA5APkASQF9AEkB/QBJAPQANwFuAC4B9AA3ASwALgEsAC4CPgAPAdgAWwG+AC4BpwAkAlz/+wAs/xYDKwAuAqMALgJ9AFsBtgA7AloADwDbACoBMwAfAMIAFwEzACEBMwAwATMALQEzACsBMwAvATMAKAEzABwBMwAjATMAJwDFACQAxQAaAVYADwEzAB8BMwBEATMALQEzACYBMwAhATMAMAEzACYBMwArATMAKQEzACEBMwAcATMAIwEzACcAxQAkAMUAGgEzAB8BMwAiATMAFwEzABABMwAqAYQAHAGEABwBtgAYAbYAFAG2ABEDegAQAxEAEAH6AB4BtgAABCYACQG2ABUCwQAiAsEAIgKGACUDGgAsAvMANwLzADcDIgAsAkIAGALwABECGwApAhsAKQIfAAgBQQAKAt0ACwOdAAQCkAARAsgAJQLEABcCkAARAu4AFgMbAA0CbwAPArkALAK5ACwCAQAeAeEAHgHUABQBTwAVAbYAIQEeACMEIwAMApQANgKUAC0ClAA9ApQALgKUACUClAAYApQAQgKUAC8ClAA9ApQAKAKUACwClAAsAWAAOgEXAB0B6QAbAsQAHQMVAB0COwAOAxcADgPfAA4EzQAOAzIAHgJfAA8DLQAPBAcADwHkABwCTAAiAoYAEwMvAA8BEQAUAcgAGwKZABsCyQAbAfEABgLGAA8DiQAGBE8ABgK2ABsB+AAQArQAFANmABQBCAASAacAJQH6ACcDDAAVA+8ANAJ9AA8D7wA0AkwAFgGlABIEagA7AbkAJwRqADsBzgAxBEoAMQHPADEDRgAxA0kAMQNGADEDSQAxBGoAOwRqADsEagBrAc8AJARKADEEPwA7BD8APQQ/ADsEPwA9BD8AOwQ/ADsEMgA7BNsAOwQyACQEMgA7Ac4AMwQyACQBzgAwBOAAOwHPADMDXgAxA2IANwNeADMDYgAxAegACQG+AC8B9gAkAZAAIwGQAB4CggAaAkgACgJIAAwB+gAdAfoAHQF3AB0B+gAsAfUAJQF3AB0CuAAdApsADAJQABgCDwBCAg8AQgIPAEICDwARAg8AEQFVAAIBVQBHAP0ASQI1ADUCNQAmAjUAGAKeACUDEQAlAh0APgKaAB4CmgAeApoAJwDMAFABAAASAVAAUAFdABQB4QAPAeEADwHpAEMB6QBDAW0AAAJTAAADawAAAhQAKAIPAOwCDwA4Ag8AOAIPAEICDwA2Ag8ANgIPAEICDwBCAg8AQgIPAEICDwA+Ag8AOgMQACoDEAAmAg8APgIPADoCDwA+Ag8AOgIKACUCCgAnAgoAJQIKACcCNAA4AjQAOAI0ADgCNAA4ApcAPAKXABkCdQAUAnUAFAGdADwC7gAsAu4ALAD9AEcAzAAzApEARwI2ADgDYQBJAqcAcAIwABgBewBoAXsACgNqAEkC0wBJAcQApgHEACIDagAdAPr/mAI5ACwCDwA5APr/7wL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxA0wAOANMADIDTAA6A0wAQgNMADoDTAA5A0wALQNMAEEDTAA7BNMAQATTAEYE0wBGBNMARgTTAEYE0wBGBNMARgTTADwE0wBGBNMAQQTTAEQC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEDCQArAwsAKwMJACsDCQArAwkAKwMJACsDCQArAwkAKwMJACsDEwArAvcAMQJAAEkCQABJAh0ALAIdACwB/gBJAf4ASgIdACwCHQAsAf4ALAH+ACwCmgAcApoAHAI0ADECmwBCAjQAMQI0ADECNAAxAjQAMQI0ADACNAAwAjQAMQI0ADECNAAxAWMAMQFjAEkBXwAxAmIAJwK0AH0EUgAYA+UAGAN+ABgCSgAiAoMAHQI0AD0CNAA9AjQAPQK1ACgB+wAUAfsAHQItADoCLQA6Ai0AOAKbADoChQAxAf4AJwJpACcDKgAdAe8AMQN8ACcDFAAxAs4AMQNEADEC1QAnAvwAMQLhADMCpgAsAoYAIgM1ADsDPgBCAoUAQgLSACUDCQA3AtUAJwKFACIBYgAnAhYAJwLTACcC0wAnAfQAfwG4AHkBuABCAdMAKQGXABgDRQA6A5wAOgMiADoCmwA9AggAJAL2ACQDtgAkBKQAJAJPADwCbgAyAfsALwRSABcC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAnUAFAGpAGIBqQAHAg4ADAEZAA8CDv/bAhMADAI5ABoByQAkAVL/5QK3AAwCBgATAo4AEQHoABMCagApAZsAIAHkACcB0QAMAaMAHQJqACUBEgAuARIAJAESAC4BEgAiAVkAFAEmABQBJgAUAXUAGwG3ACoAoQApAn8AGwJ0ABsCE//yAvgADgSFADcEhQBGBIUANwMiAFsDIgAmBCkAGAgiABgYgAA7AmgAEQV7ADIBlwAfAoIAIgP2ACgB0QA0AdEANAFrAC8BrAArAbIAKAGvAA4BpgAvAb8AJwGMACQBvwAwAbYAJwJnAAUB+QACAgQADwHDACQCBgA5AQ8ADwIOACwBUgArAc4AMgHAAC8B2gArAb0APQGwACgBxAA3AbwALgG4ACoCtwACAr4AJQKVAAUD+QAAAwoAFgQcABIDGgASA/oAEgNbABIDFgASAhEAEgL5ABICVAAWA1MAJQNyACUCZgAaAssAJQIXABYCLwAWBJsASQSbAEkAAPvGAgUAFgMXABYCTQAWAroAJwMMABYE4wAlA/0ABwIUABQCCgAjAikAEgKxADADswAbAg4AGQLSACcCOAALAfsAIAHsACUCNQAgAdAAIAHKACECHgAjAmMAIgEvACMBN//SAioAIwGvACMCkQAXAloAHwIzACUBzQAhAjMAJQH6ACMBiAAnAekAGAJIAB8CJAAPAxwADwIpAB4B5wATAcUAJAIEAAABUgAoAjgACwI4AAsCOAALAjgACwI4AAsCOAALApYABQHsACUB0AAgAdAAIAHQACAB0AAgAS8AHgEvACMBLwAOAS8AEAI1AB4CWgAfAjMAJQIzACUCMwAlAjMAJQIzACUCpwAdAjMAJQJIAB8CSAAfAkgAHwJIAB8B5wATAdYAIQHnABMCSgAjAwEAJwIyABAFCQAlAjUAHgI4AAsCOAALAewAJQHsACUCNQAgAdAAIAHQACACHgAjAa8AIwGvABECWgAfAloAHwJWAB0CMwAlAfoAIwH6ACMBiAAnAYgAJwGIACcB6QAYAekAGAJIAB8CSAAfAcUAJAHFACQBxQAkAa8AIwHpABgB6QAYAYgAJwEvACMCXQAqAfoABwEzAB8BKQAGARoAGwE0AB0BMwAbAP0AGwE7ABEBPgAKAeUAFQEzABcBMQALATQAHQDOAA8BPwARAToADAESABYBSAAWAjgAEgI/AAwDff/vAlz//AJxABECPgARAZ4AKwImABUCJgAfArgACAK4AAgDegAAAfQALQHuABACJgALAgIAGQJvAEgCgABEAoIAIgL3ADICYwBJA0MASQLaACUC2gAlAgoAOgGOADUB5QAwAewALQHrABAB3gA1Ae8ALAHSACgB+AA2Ae8ALAG4AB0BuABxAbgAIwG4AC8BuAAZAbgAPQG4ACgBuAA0AbgAMAG4ACgAtABpALQAaQC0AGkApgAoASkABgEaABsBNAAdAP0AGwE7ABEBMwAKAMIAFwDPAAABPgAKAKEACgHlABUBVgAPATEACwE0AB0A9gAZAP0AHADOAA8BPwARAToADAG9AAwBUgARARIAFgAA/tsAAP7YAAD/AwAA/s4AAP7XAAD+ngAA/p4AAP7WAAD+xQAA/rMAAP6DAAD/CQEjAF4ChQA/AbYAJgEqACwBKgAVAWQAbAFkAB8BFQAiARUAFAEgAFsBswAuAdAALgHQAC4BLAAuASwALgFSACgBEP/QAkYAEgIwABYCHAAWAz0AEgMvABICMQANAqgAMAPYABY=') format('opentype'); font-weight: normal; font-style: normal; } Derived from https://ay.wikipedia.org/wiki/Plantilla:Portada/styles.css (2025-06-06) */ .image-carousel { overflow: hidden; width: 100%; height: 210px; min-width: 280px; } .image-carousel ul { width: 100%; margin: 0; padding: 0; display: table; table-layout: fixed; height: 100%; } .image-carousel ul li { display: table-cell; vertical-align: top; position: relative; height: 100%; min-height: 210px; width: 33.33333%; transition: all 1000ms ease; } .carousel-image { width: 100%; height: 100%; display: block; position: relative; overflow: hidden; } .carousel-image-wrapper { position: absolute; display: block; width: 100%; height: 100%; z-index: 1; } .carousel-image-wrapper img { width: 100%; height: 100%; min-height: 170px; object-fit: cover; position: absolute; top: 0; left: 0; } .carousel-slide-content-wrapper { overflow: hidden; width: 100%; height: calc(100% - 40px); position: absolute; top: 40px; } .carousel-slide-content { display: flex; flex-direction: column; justify-content: flex-end; height: 100%; width: 100%; position: relative; padding: 15px 20px; box-sizing: border-box; color: #fff; z-index: 3; } .carousel-slide-content .carousel-slide-title, .carousel-slide-content .carousel-slide-description { opacity: 0; width: 100%; position: relative; } .carousel-slide-title { font-size: 135%; font-weight: bold; text-align: right; } .carousel-slide-description { text-align: left; } @media (min-width: 800px) { .image-carousel ul:hover li { width: 10%; } .image-carousel ul:hover li:hover { width: 60%; } .image-carousel ul:hover li:hover .carousel-slide-content { background: rgba(0, 0, 0, 0.7); } .image-carousel ul:hover li:hover .carousel-slide-title, .image-carousel ul:hover li:hover .carousel-slide-description { opacity: 1; } } .carousel-slide-title a { font-weight: bold; } .carousel-slide-title a, .carousel-slide-description a { color: white; } .carousel-slide-title a:link, .carousel-slide-title a:visited, .carousel-slide-title a:hover, .carousel-slide-title a:active, .carousel-slide-description a:link, .carousel-slide-description a:visited, .carousel-slide-description a:hover, .carousel-slide-description a:active { color: white; } @media (max-width: 800px) { .image-carousel { height: auto; min-height: unset; } .image-carousel ul { display: block; height: auto; } .image-carousel ul li { display: block; width: 100%; height: auto; min-height: unset; transition: none; } .carousel-image { height: auto; } .carousel-image-wrapper { position: relative; height: auto; } .carousel-image-wrapper img { position: relative; width: 100%; height: auto; min-height: unset; object-fit: cover; } .carousel-slide-content-wrapper { position: relative; height: auto; top: auto; } .carousel-slide-content { position: relative; background: rgba(0, 0, 0, 0.6); padding: 10px; color: white; } /* Override opacity on mobile */ .carousel-slide-content-wrapper .carousel-slide-title, .carousel-slide-content-wrapper .carousel-slide-description { opacity: 1; } /* Disable hover effect for mobile */ .image-carousel ul:hover li { width: 100%; } .image-carousel ul:hover li:hover { width: 100%; } .image-carousel ul:hover li:hover .carousel-slide-content { background: rgba(0, 0, 0, 0.6); } } .mobile-only { display: none; } /* Display on mobile views (Minerva Neue skin / MobileFrontend) */ @media screen and (max-width: 640px) { .mobile-only { display: block; } } c4ivlnaszgx1uyowbsc86j1v11077un 11027 11026 2026-08-26T11:57:49Z RAPTOR7762 18 Replaced content with "/* Derived from https://ay.wikipedia.org/wiki/Plantilla:Portada/styles.css (2025-06-06) */ .image-carousel { overflow: hidden; width: 100%; height: 210px; min-width: 280px; } .image-carousel ul { width: 100%; margin: 0; padding: 0; display: table; table-layout: fixed; height: 100%; } .image-carousel ul li { display: table-cell; vertical-align: top; position: relative; height: 100%; min-height: 210px; width: 33.33333%; transition: a..." 11027 css text/css /* Derived from https://ay.wikipedia.org/wiki/Plantilla:Portada/styles.css (2025-06-06) */ .image-carousel { overflow: hidden; width: 100%; height: 210px; min-width: 280px; } .image-carousel ul { width: 100%; margin: 0; padding: 0; display: table; table-layout: fixed; height: 100%; } .image-carousel ul li { display: table-cell; vertical-align: top; position: relative; height: 100%; min-height: 210px; width: 33.33333%; transition: all 1000ms ease; } .carousel-image { width: 100%; height: 100%; display: block; position: relative; overflow: hidden; } .carousel-image-wrapper { position: absolute; display: block; width: 100%; height: 100%; z-index: 1; } .carousel-image-wrapper img { width: 100%; height: 100%; min-height: 170px; object-fit: cover; position: absolute; top: 0; left: 0; } .carousel-slide-content-wrapper { overflow: hidden; width: 100%; height: calc(100% - 40px); position: absolute; top: 40px; } .carousel-slide-content { display: flex; flex-direction: column; justify-content: flex-end; height: 100%; width: 100%; position: relative; padding: 15px 20px; box-sizing: border-box; color: #fff; z-index: 3; } .carousel-slide-content .carousel-slide-title, .carousel-slide-content .carousel-slide-description { opacity: 0; width: 100%; position: relative; } .carousel-slide-title { font-size: 135%; font-weight: bold; text-align: right; } .carousel-slide-description { text-align: left; } @media (min-width: 800px) { .image-carousel ul:hover li { width: 10%; } .image-carousel ul:hover li:hover { width: 60%; } .image-carousel ul:hover li:hover .carousel-slide-content { background: rgba(0, 0, 0, 0.7); } .image-carousel ul:hover li:hover .carousel-slide-title, .image-carousel ul:hover li:hover .carousel-slide-description { opacity: 1; } } .carousel-slide-title a { font-weight: bold; } .carousel-slide-title a, .carousel-slide-description a { color: white; } .carousel-slide-title a:link, .carousel-slide-title a:visited, .carousel-slide-title a:hover, .carousel-slide-title a:active, .carousel-slide-description a:link, .carousel-slide-description a:visited, .carousel-slide-description a:hover, .carousel-slide-description a:active { color: white; } @media (max-width: 800px) { .image-carousel { height: auto; min-height: unset; } .image-carousel ul { display: block; height: auto; } .image-carousel ul li { display: block; width: 100%; height: auto; min-height: unset; transition: none; } .carousel-image { height: auto; } .carousel-image-wrapper { position: relative; height: auto; } .carousel-image-wrapper img { position: relative; width: 100%; height: auto; min-height: unset; object-fit: cover; } .carousel-slide-content-wrapper { position: relative; height: auto; top: auto; } .carousel-slide-content { position: relative; background: rgba(0, 0, 0, 0.6); padding: 10px; color: white; } /* Override opacity on mobile */ .carousel-slide-content-wrapper .carousel-slide-title, .carousel-slide-content-wrapper .carousel-slide-description { opacity: 1; } /* Disable hover effect for mobile */ .image-carousel ul:hover li { width: 100%; } .image-carousel ul:hover li:hover { width: 100%; } .image-carousel ul:hover li:hover .carousel-slide-content { background: rgba(0, 0, 0, 0.6); } } .mobile-only { display: none; } /* Display on mobile views (Minerva Neue skin / MobileFrontend) */ @media screen and (max-width: 640px) { .mobile-only { display: block; } } 0whqqcx75rhg2sgwydwbv53js7z1zfp 11028 11027 2026-08-26T11:58:28Z RAPTOR7762 18 RAPTOR7762 changed the content model of the page [[Tempilet:Main page/Styles.css]] from "CSS" to "Sanitized CSS" 11028 sanitized-css text/css /* Derived from https://ay.wikipedia.org/wiki/Plantilla:Portada/styles.css (2025-06-06) */ .image-carousel { overflow: hidden; width: 100%; height: 210px; min-width: 280px; } .image-carousel ul { width: 100%; margin: 0; padding: 0; display: table; table-layout: fixed; height: 100%; } .image-carousel ul li { display: table-cell; vertical-align: top; position: relative; height: 100%; min-height: 210px; width: 33.33333%; transition: all 1000ms ease; } .carousel-image { width: 100%; height: 100%; display: block; position: relative; overflow: hidden; } .carousel-image-wrapper { position: absolute; display: block; width: 100%; height: 100%; z-index: 1; } .carousel-image-wrapper img { width: 100%; height: 100%; min-height: 170px; object-fit: cover; position: absolute; top: 0; left: 0; } .carousel-slide-content-wrapper { overflow: hidden; width: 100%; height: calc(100% - 40px); position: absolute; top: 40px; } .carousel-slide-content { display: flex; flex-direction: column; justify-content: flex-end; height: 100%; width: 100%; position: relative; padding: 15px 20px; box-sizing: border-box; color: #fff; z-index: 3; } .carousel-slide-content .carousel-slide-title, .carousel-slide-content .carousel-slide-description { opacity: 0; width: 100%; position: relative; } .carousel-slide-title { font-size: 135%; font-weight: bold; text-align: right; } .carousel-slide-description { text-align: left; } @media (min-width: 800px) { .image-carousel ul:hover li { width: 10%; } .image-carousel ul:hover li:hover { width: 60%; } .image-carousel ul:hover li:hover .carousel-slide-content { background: rgba(0, 0, 0, 0.7); } .image-carousel ul:hover li:hover .carousel-slide-title, .image-carousel ul:hover li:hover .carousel-slide-description { opacity: 1; } } .carousel-slide-title a { font-weight: bold; } .carousel-slide-title a, .carousel-slide-description a { color: white; } .carousel-slide-title a:link, .carousel-slide-title a:visited, .carousel-slide-title a:hover, .carousel-slide-title a:active, .carousel-slide-description a:link, .carousel-slide-description a:visited, .carousel-slide-description a:hover, .carousel-slide-description a:active { color: white; } @media (max-width: 800px) { .image-carousel { height: auto; min-height: unset; } .image-carousel ul { display: block; height: auto; } .image-carousel ul li { display: block; width: 100%; height: auto; min-height: unset; transition: none; } .carousel-image { height: auto; } .carousel-image-wrapper { position: relative; height: auto; } .carousel-image-wrapper img { position: relative; width: 100%; height: auto; min-height: unset; object-fit: cover; } .carousel-slide-content-wrapper { position: relative; height: auto; top: auto; } .carousel-slide-content { position: relative; background: rgba(0, 0, 0, 0.6); padding: 10px; color: white; } /* Override opacity on mobile */ .carousel-slide-content-wrapper .carousel-slide-title, .carousel-slide-content-wrapper .carousel-slide-description { opacity: 1; } /* Disable hover effect for mobile */ .image-carousel ul:hover li { width: 100%; } .image-carousel ul:hover li:hover { width: 100%; } .image-carousel ul:hover li:hover .carousel-slide-content { background: rgba(0, 0, 0, 0.6); } } .mobile-only { display: none; } /* Display on mobile views (Minerva Neue skin / MobileFrontend) */ @media screen and (max-width: 640px) { .mobile-only { display: block; } } 0whqqcx75rhg2sgwydwbv53js7z1zfp Tempilet:Mbox 10 136 10699 9095 2024-12-18T20:47:42Z commons>Matrix 0 did i only just realise I copy pasted the sandbox version 10699 wikitext text/x-wiki {{#invoke:Message box|mbox}}<noinclude>{{Documentation}}</noinclude> tvrvu45gactjsm6e1hth3whyku1lcph 10700 9140 2026-08-25T23:38:29Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Mbox]] 699 wikitext text/x-wiki {{#invoke:Message box|mbox}}<noinclude> {{Documentation}} </noinclude> pvm9nlvkt71tloexx1r8m88i47rdcul Tempilet:Sub 10 168 10915 2024-02-13T02:23:37Z commons>W like wiki 0 10915 wikitext text/x-wiki <sub>{{{1|1}}}</sub><noinclude> {{documentation|content= Examples: *X{{tlx|1=sub|2=subscript text}} -> X{{sub|subscript text}} ==See also== {{Text formatting template (see also)}} [[Category:Text formatting templates]] }} </noinclude> 8iu90e2054l84c6hzz469q7p7vbive1 10916 8305 2026-08-25T23:38:37Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Sub]] 8305 wikitext text/x-wiki <sub>{{{1|}}}</sub><noinclude> {{Documentation}} </noinclude> f9z4dgppgzi066a593fwqimz9ot6zrz Tempilet:Tl 10 182 10669 2019-06-06T23:58:20Z commons>4nn1l2 0 Fulfilling [[Template:Edit request|edit request]] by [[User:Sarang|Sarang]]. 10669 wikitext text/x-wiki <noinclude>{{protected template}} </noinclude>{{T/main|{{{1|}}} |{{{2|}}} |{{{3|{{{lang|}}}}}} |{{{4|}}} |{{{5|}}} |incl={{{incl|{{{i|3}}}}}} |code={{{code|}}} |link={{{link|}}} |case={{{case|}}} |i18n={{{i18n|}}} |parm={{{parm|}}} |full={{{full|}}} |style={{{style|}}} }}<noinclude> {{documentation|Template:T/doc}} </noinclude> 0shomsirl6ymjg2m0k9fmpuf2xg4ml3 10670 8825 2026-08-25T23:38:28Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Tl]] 904 wikitext text/x-wiki #REDIRECT [[Tempilet:Template link]] sgee72tm3cdfvzdm94s1onfs05vdros Tempilet:Yesno 10 194 10673 2024-08-28T17:38:59Z commons>CptViraj 0 Protected "[[Template:Yesno]]": [[Special:MyLanguage/Commons:Protection policy|Widely used template]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite)) 10673 wikitext text/x-wiki {{<includeonly>safesubst:</includeonly>#switch: {{<includeonly>safesubst:</includeonly>lc: {{{1|¬}}} }} |no |n |0 = {{{no|<!-- null -->}}} | = {{{blank|{{{no|<!-- null -->}}}}}} |¬ = {{{¬|}}} |yes |y |1 = {{{yes|yes}}} |#default = {{{def|{{{yes|yes}}}}}} }}<noinclude> {{Documentation}} </noinclude> 38pzczcy3yuch0ep5r1yz593bjppldv 10674 8917 2026-08-25T23:38:28Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Yesno]] 950 wikitext text/x-wiki {{<includeonly>safesubst:</includeonly>#switch: {{<includeonly>safesubst:</includeonly>lc: {{{1|¬}}} }} |no |n |f |false |off |0 = {{{no|}}} | = {{{blank|{{{no|}}}}}} |¬ = {{{¬|}}} |yes |y |t |true |on |1 = {{{yes|yes}}} |#default = {{{def|{{{yes|yes}}}}}} }}<noinclude> {{Documentation}} </noinclude> ap97tktff18ii0muqd5f4eezydumg5v Module:Arguments 828 215 10681 8822 2021-02-19T00:52:50Z commons>Magog the Ogre 0 2 revisions imported from [[:w:en:Module:Arguments]] 8822 Scribunto text/plain -- This module provides easy processing of arguments passed to Scribunto from -- #invoke. It is intended for use by other Lua modules, and should not be -- called from #invoke directly. local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local arguments = {} -- Generate four different tidyVal functions, so that we don't have to check the -- options every time we call it. local function tidyValDefault(key, val) if type(val) == 'string' then val = val:match('^%s*(.-)%s*$') if val == '' then return nil else return val end else return val end end local function tidyValTrimOnly(key, val) if type(val) == 'string' then return val:match('^%s*(.-)%s*$') else return val end end local function tidyValRemoveBlanksOnly(key, val) if type(val) == 'string' then if val:find('%S') then return val else return nil end else return val end end local function tidyValNoChange(key, val) return val end local function matchesTitle(given, title) local tp = type( given ) return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title end local translate_mt = { __index = function(t, k) return k end } function arguments.getArgs(frame, options) checkType('getArgs', 1, frame, 'table', true) checkType('getArgs', 2, options, 'table', true) frame = frame or {} options = options or {} --[[ -- Set up argument translation. --]] options.translate = options.translate or {} if getmetatable(options.translate) == nil then setmetatable(options.translate, translate_mt) end if options.backtranslate == nil then options.backtranslate = {} for k,v in pairs(options.translate) do options.backtranslate[v] = k end end if options.backtranslate and getmetatable(options.backtranslate) == nil then setmetatable(options.backtranslate, { __index = function(t, k) if options.translate[k] ~= k then return nil else return k end end }) end --[[ -- Get the argument tables. If we were passed a valid frame object, get the -- frame arguments (fargs) and the parent frame arguments (pargs), depending -- on the options set and on the parent frame's availability. If we weren't -- passed a valid frame object, we are being called from another Lua module -- or from the debug console, so assume that we were passed a table of args -- directly, and assign it to a new variable (luaArgs). --]] local fargs, pargs, luaArgs if type(frame.args) == 'table' and type(frame.getParent) == 'function' then if options.wrappers then --[[ -- The wrappers option makes Module:Arguments look up arguments in -- either the frame argument table or the parent argument table, but -- not both. This means that users can use either the #invoke syntax -- or a wrapper template without the loss of performance associated -- with looking arguments up in both the frame and the parent frame. -- Module:Arguments will look up arguments in the parent frame -- if it finds the parent frame's title in options.wrapper; -- otherwise it will look up arguments in the frame object passed -- to getArgs. --]] local parent = frame:getParent() if not parent then fargs = frame.args else local title = parent:getTitle():gsub('/sandbox$', '') local found = false if matchesTitle(options.wrappers, title) then found = true elseif type(options.wrappers) == 'table' then for _,v in pairs(options.wrappers) do if matchesTitle(v, title) then found = true break end end end -- We test for false specifically here so that nil (the default) acts like true. if found or options.frameOnly == false then pargs = parent.args end if not found or options.parentOnly == false then fargs = frame.args end end else -- options.wrapper isn't set, so check the other options. if not options.parentOnly then fargs = frame.args end if not options.frameOnly then local parent = frame:getParent() pargs = parent and parent.args or nil end end if options.parentFirst then fargs, pargs = pargs, fargs end else luaArgs = frame end -- Set the order of precedence of the argument tables. If the variables are -- nil, nothing will be added to the table, which is how we avoid clashes -- between the frame/parent args and the Lua args. local argTables = {fargs} argTables[#argTables + 1] = pargs argTables[#argTables + 1] = luaArgs --[[ -- Generate the tidyVal function. If it has been specified by the user, we -- use that; if not, we choose one of four functions depending on the -- options chosen. This is so that we don't have to call the options table -- every time the function is called. --]] local tidyVal = options.valueFunc if tidyVal then if type(tidyVal) ~= 'function' then error( "bad value assigned to option 'valueFunc'" .. '(function expected, got ' .. type(tidyVal) .. ')', 2 ) end elseif options.trim ~= false then if options.removeBlanks ~= false then tidyVal = tidyValDefault else tidyVal = tidyValTrimOnly end else if options.removeBlanks ~= false then tidyVal = tidyValRemoveBlanksOnly else tidyVal = tidyValNoChange end end --[[ -- Set up the args, metaArgs and nilArgs tables. args will be the one -- accessed from functions, and metaArgs will hold the actual arguments. Nil -- arguments are memoized in nilArgs, and the metatable connects all of them -- together. --]] local args, metaArgs, nilArgs, metatable = {}, {}, {}, {} setmetatable(args, metatable) local function mergeArgs(tables) --[[ -- Accepts multiple tables as input and merges their keys and values -- into one table. If a value is already present it is not overwritten; -- tables listed earlier have precedence. We are also memoizing nil -- values, which can be overwritten if they are 's' (soft). --]] for _, t in ipairs(tables) do for key, val in pairs(t) do if metaArgs[key] == nil and nilArgs[key] ~= 'h' then local tidiedVal = tidyVal(key, val) if tidiedVal == nil then nilArgs[key] = 's' else metaArgs[key] = tidiedVal end end end end end --[[ -- Define metatable behaviour. Arguments are memoized in the metaArgs table, -- and are only fetched from the argument tables once. Fetching arguments -- from the argument tables is the most resource-intensive step in this -- module, so we try and avoid it where possible. For this reason, nil -- arguments are also memoized, in the nilArgs table. Also, we keep a record -- in the metatable of when pairs and ipairs have been called, so we do not -- run pairs and ipairs on the argument tables more than once. We also do -- not run ipairs on fargs and pargs if pairs has already been run, as all -- the arguments will already have been copied over. --]] metatable.__index = function (t, key) --[[ -- Fetches an argument when the args table is indexed. First we check -- to see if the value is memoized, and if not we try and fetch it from -- the argument tables. When we check memoization, we need to check -- metaArgs before nilArgs, as both can be non-nil at the same time. -- If the argument is not present in metaArgs, we also check whether -- pairs has been run yet. If pairs has already been run, we return nil. -- This is because all the arguments will have already been copied into -- metaArgs by the mergeArgs function, meaning that any other arguments -- must be nil. --]] if type(key) == 'string' then key = options.translate[key] end local val = metaArgs[key] if val ~= nil then return val elseif metatable.donePairs or nilArgs[key] then return nil end for _, argTable in ipairs(argTables) do local argTableVal = tidyVal(key, argTable[key]) if argTableVal ~= nil then metaArgs[key] = argTableVal return argTableVal end end nilArgs[key] = 'h' return nil end metatable.__newindex = function (t, key, val) -- This function is called when a module tries to add a new value to the -- args table, or tries to change an existing value. if type(key) == 'string' then key = options.translate[key] end if options.readOnly then error( 'could not write to argument table key "' .. tostring(key) .. '"; the table is read-only', 2 ) elseif options.noOverwrite and args[key] ~= nil then error( 'could not write to argument table key "' .. tostring(key) .. '"; overwriting existing arguments is not permitted', 2 ) elseif val == nil then --[[ -- If the argument is to be overwritten with nil, we need to erase -- the value in metaArgs, so that __index, __pairs and __ipairs do -- not use a previous existing value, if present; and we also need -- to memoize the nil in nilArgs, so that the value isn't looked -- up in the argument tables if it is accessed again. --]] metaArgs[key] = nil nilArgs[key] = 'h' else metaArgs[key] = val end end local function translatenext(invariant) local k, v = next(invariant.t, invariant.k) invariant.k = k if k == nil then return nil elseif type(k) ~= 'string' or not options.backtranslate then return k, v else local backtranslate = options.backtranslate[k] if backtranslate == nil then -- Skip this one. This is a tail call, so this won't cause stack overflow return translatenext(invariant) else return backtranslate, v end end end metatable.__pairs = function () -- Called when pairs is run on the args table. if not metatable.donePairs then mergeArgs(argTables) metatable.donePairs = true end return translatenext, { t = metaArgs } end local function inext(t, i) -- This uses our __index metamethod local v = t[i + 1] if v ~= nil then return i + 1, v end end metatable.__ipairs = function (t) -- Called when ipairs is run on the args table. return inext, t, 0 end return args end return arguments 5qx9tzlul9ser30uxj9nbasjt92cevn 10682 9588 2026-08-25T23:38:28Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Arguments]] 998 Scribunto text/plain -- This module provides easy processing of arguments passed to Scribunto from -- #invoke. It is intended for use by other Lua modules, and should not be -- called from #invoke directly. local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local arguments = {} -- Generate four different tidyVal functions, so that we don't have to check the -- options every time we call it. local function tidyValDefault(key, val) if type(val) == 'string' then val = val:match('^%s*(.-)%s*$') if val == '' then return nil else return val end else return val end end local function tidyValTrimOnly(key, val) if type(val) == 'string' then return val:match('^%s*(.-)%s*$') else return val end end local function tidyValRemoveBlanksOnly(key, val) if type(val) == 'string' then if val:find('%S') then return val else return nil end else return val end end local function tidyValNoChange(key, val) return val end local function matchesTitle(given, title) local tp = type( given ) return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title end local translate_mt = { __index = function(t, k) return k end } function arguments.getArgs(frame, options) checkType('getArgs', 1, frame, 'table', true) checkType('getArgs', 2, options, 'table', true) frame = frame or {} options = options or {} --[[ -- Set up argument translation. --]] options.translate = options.translate or {} if getmetatable(options.translate) == nil then setmetatable(options.translate, translate_mt) end if options.backtranslate == nil then options.backtranslate = {} for k,v in pairs(options.translate) do options.backtranslate[v] = k end end if options.backtranslate and getmetatable(options.backtranslate) == nil then setmetatable(options.backtranslate, { __index = function(t, k) if options.translate[k] ~= k then return nil else return k end end }) end --[[ -- Get the argument tables. If we were passed a valid frame object, get the -- frame arguments (fargs) and the parent frame arguments (pargs), depending -- on the options set and on the parent frame's availability. If we weren't -- passed a valid frame object, we are being called from another Lua module -- or from the debug console, so assume that we were passed a table of args -- directly, and assign it to a new variable (luaArgs). --]] local fargs, pargs, luaArgs if type(frame.args) == 'table' and type(frame.getParent) == 'function' then if options.wrappers then --[[ -- The wrappers option makes Module:Arguments look up arguments in -- either the frame argument table or the parent argument table, but -- not both. This means that users can use either the #invoke syntax -- or a wrapper template without the loss of performance associated -- with looking arguments up in both the frame and the parent frame. -- Module:Arguments will look up arguments in the parent frame -- if it finds the parent frame's title in options.wrapper; -- otherwise it will look up arguments in the frame object passed -- to getArgs. --]] local parent = frame:getParent() if not parent then fargs = frame.args else local title = parent:getTitle():gsub('/sandbox$', '') local found = false if matchesTitle(options.wrappers, title) then found = true elseif type(options.wrappers) == 'table' then for _,v in pairs(options.wrappers) do if matchesTitle(v, title) then found = true break end end end -- We test for false specifically here so that nil (the default) acts like true. if found or options.frameOnly == false then pargs = parent.args end if not found or options.parentOnly == false then fargs = frame.args end end else -- options.wrapper isn't set, so check the other options. if not options.parentOnly then fargs = frame.args end if not options.frameOnly then local parent = frame:getParent() pargs = parent and parent.args or nil end end if options.parentFirst then fargs, pargs = pargs, fargs end else luaArgs = frame end -- Set the order of precedence of the argument tables. If the variables are -- nil, nothing will be added to the table, which is how we avoid clashes -- between the frame/parent args and the Lua args. local argTables = {fargs} argTables[#argTables + 1] = pargs argTables[#argTables + 1] = luaArgs --[[ -- Generate the tidyVal function. If it has been specified by the user, we -- use that; if not, we choose one of four functions depending on the -- options chosen. This is so that we don't have to call the options table -- every time the function is called. --]] local tidyVal = options.valueFunc if tidyVal then if type(tidyVal) ~= 'function' then error( "bad value assigned to option 'valueFunc'" .. '(function expected, got ' .. type(tidyVal) .. ')', 2 ) end elseif options.trim ~= false then if options.removeBlanks ~= false then tidyVal = tidyValDefault else tidyVal = tidyValTrimOnly end else if options.removeBlanks ~= false then tidyVal = tidyValRemoveBlanksOnly else tidyVal = tidyValNoChange end end --[[ -- Set up the args, metaArgs and nilArgs tables. args will be the one -- accessed from functions, and metaArgs will hold the actual arguments. Nil -- arguments are memoized in nilArgs, and the metatable connects all of them -- together. --]] local args, metaArgs, nilArgs, metatable = {}, {}, {}, {} setmetatable(args, metatable) local function mergeArgs(tables) --[[ -- Accepts multiple tables as input and merges their keys and values -- into one table. If a value is already present it is not overwritten; -- tables listed earlier have precedence. We are also memoizing nil -- values, which can be overwritten if they are 's' (soft). --]] for _, t in ipairs(tables) do for key, val in pairs(t) do if metaArgs[key] == nil and nilArgs[key] ~= 'h' then local tidiedVal = tidyVal(key, val) if tidiedVal == nil then nilArgs[key] = 's' else metaArgs[key] = tidiedVal end end end end end --[[ -- Define metatable behaviour. Arguments are memoized in the metaArgs table, -- and are only fetched from the argument tables once. Fetching arguments -- from the argument tables is the most resource-intensive step in this -- module, so we try and avoid it where possible. For this reason, nil -- arguments are also memoized, in the nilArgs table. Also, we keep a record -- in the metatable of when pairs and ipairs have been called, so we do not -- run pairs and ipairs on the argument tables more than once. We also do -- not run ipairs on fargs and pargs if pairs has already been run, as all -- the arguments will already have been copied over. --]] metatable.__index = function (t, key) --[[ -- Fetches an argument when the args table is indexed. First we check -- to see if the value is memoized, and if not we try and fetch it from -- the argument tables. When we check memoization, we need to check -- metaArgs before nilArgs, as both can be non-nil at the same time. -- If the argument is not present in metaArgs, we also check whether -- pairs has been run yet. If pairs has already been run, we return nil. -- This is because all the arguments will have already been copied into -- metaArgs by the mergeArgs function, meaning that any other arguments -- must be nil. --]] if type(key) == 'string' then key = options.translate[key] end local val = metaArgs[key] if val ~= nil then return val elseif metatable.donePairs or nilArgs[key] then return nil end for _, argTable in ipairs(argTables) do local argTableVal = tidyVal(key, argTable[key]) if argTableVal ~= nil then metaArgs[key] = argTableVal return argTableVal end end nilArgs[key] = 'h' return nil end metatable.__newindex = function (t, key, val) -- This function is called when a module tries to add a new value to the -- args table, or tries to change an existing value. if type(key) == 'string' then key = options.translate[key] end if options.readOnly then error( 'could not write to argument table key "' .. tostring(key) .. '"; the table is read-only', 2 ) elseif options.noOverwrite and args[key] ~= nil then error( 'could not write to argument table key "' .. tostring(key) .. '"; overwriting existing arguments is not permitted', 2 ) elseif val == nil then --[[ -- If the argument is to be overwritten with nil, we need to erase -- the value in metaArgs, so that __index, __pairs and __ipairs do -- not use a previous existing value, if present; and we also need -- to memoize the nil in nilArgs, so that the value isn't looked -- up in the argument tables if it is accessed again. --]] metaArgs[key] = nil nilArgs[key] = 'h' else metaArgs[key] = val end end local function translatenext(invariant) local k, v = next(invariant.t, invariant.k) invariant.k = k if k == nil then return nil elseif type(k) ~= 'string' or not options.backtranslate then return k, v else local backtranslate = options.backtranslate[k] if backtranslate == nil then -- Skip this one. This is a tail call, so this won't cause stack overflow return translatenext(invariant) else return backtranslate, v end end end metatable.__pairs = function () -- Called when pairs is run on the args table. if not metatable.donePairs then mergeArgs(argTables) metatable.donePairs = true end return translatenext, { t = metaArgs } end local function inext(t, i) -- This uses our __index metamethod local v = t[i + 1] if v ~= nil then return i + 1, v end end metatable.__ipairs = function (t) -- Called when ipairs is run on the args table. return inext, t, 0 end return args end return arguments 5qx9tzlul9ser30uxj9nbasjt92cevn Module:Category handler 828 217 10727 2019-07-30T14:18:08Z commons>Steinsplitter 0 Protected "[[Module:Category handler]]": [[Commons:Protection policy|High-risk Lua module]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite)) 10727 Scribunto text/plain -------------------------------------------------------------------------------- -- -- -- CATEGORY HANDLER -- -- -- -- This module implements the {{category handler}} template in Lua, -- -- with a few improvements: all namespaces and all namespace aliases -- -- are supported, and namespace names are detected automatically for -- -- the local wiki. This module requires [[Module:Namespace detect]] -- -- and [[Module:Yesno]] to be available on the local wiki. It can be -- -- configured for different wikis by altering the values in -- -- [[Module:Category handler/config]], and pages can be blacklisted -- -- from categorisation by using [[Module:Category handler/blacklist]]. -- -- -- -------------------------------------------------------------------------------- -- Load required modules local yesno = require('Module:Yesno') -- Lazily load things we don't always need local mShared, mappings local p = {} -------------------------------------------------------------------------------- -- Helper functions -------------------------------------------------------------------------------- local function trimWhitespace(s, removeBlanks) if type(s) ~= 'string' then return s end s = s:match('^%s*(.-)%s*$') if removeBlanks then if s ~= '' then return s else return nil end else return s end end -------------------------------------------------------------------------------- -- CategoryHandler class -------------------------------------------------------------------------------- local CategoryHandler = {} CategoryHandler.__index = CategoryHandler function CategoryHandler.new(data, args) local obj = setmetatable({ _data = data, _args = args }, CategoryHandler) -- Set the title object do local pagename = obj:parameter('demopage') local success, titleObj if pagename then success, titleObj = pcall(mw.title.new, pagename) end if success and titleObj then obj.title = titleObj if titleObj == mw.title.getCurrentTitle() then obj._usesCurrentTitle = true end else obj.title = mw.title.getCurrentTitle() obj._usesCurrentTitle = true end end -- Set suppression parameter values for _, key in ipairs{'nocat', 'categories'} do local value = obj:parameter(key) value = trimWhitespace(value, true) obj['_' .. key] = yesno(value) end do local subpage = obj:parameter('subpage') local category2 = obj:parameter('category2') if type(subpage) == 'string' then subpage = mw.ustring.lower(subpage) end if type(category2) == 'string' then subpage = mw.ustring.lower(category2) end obj._subpage = trimWhitespace(subpage, true) obj._category2 = trimWhitespace(category2) -- don't remove blank values end return obj end function CategoryHandler:parameter(key) local parameterNames = self._data.parameters[key] local pntype = type(parameterNames) if pntype == 'string' or pntype == 'number' then return self._args[parameterNames] elseif pntype == 'table' then for _, name in ipairs(parameterNames) do local value = self._args[name] if value ~= nil then return value end end return nil else error(string.format( 'invalid config key "%s"', tostring(key) ), 2) end end function CategoryHandler:isSuppressedByArguments() return -- See if a category suppression argument has been set. self._nocat == true or self._categories == false or ( self._category2 and self._category2 ~= self._data.category2Yes and self._category2 ~= self._data.category2Negative ) -- Check whether we are on a subpage, and see if categories are -- suppressed based on our subpage status. or self._subpage == self._data.subpageNo and self.title.isSubpage or self._subpage == self._data.subpageOnly and not self.title.isSubpage end function CategoryHandler:shouldSkipBlacklistCheck() -- Check whether the category suppression arguments indicate we -- should skip the blacklist check. return self._nocat == false or self._categories == true or self._category2 == self._data.category2Yes end function CategoryHandler:matchesBlacklist() if self._usesCurrentTitle then return self._data.currentTitleMatchesBlacklist else mShared = mShared or require('Module:Category handler/shared') return mShared.matchesBlacklist( self.title.prefixedText, mw.loadData('Module:Category handler/blacklist') ) end end function CategoryHandler:isSuppressed() -- Find if categories are suppressed by either the arguments or by -- matching the blacklist. return self:isSuppressedByArguments() or not self:shouldSkipBlacklistCheck() and self:matchesBlacklist() end function CategoryHandler:getNamespaceParameters() if self._usesCurrentTitle then return self._data.currentTitleNamespaceParameters else if not mappings then mShared = mShared or require('Module:Category handler/shared') mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData end return mShared.getNamespaceParameters( self.title, mappings ) end end function CategoryHandler:namespaceParametersExist() -- Find whether any namespace parameters have been specified. -- We use the order "all" --> namespace params --> "other" as this is what -- the old template did. if self:parameter('all') then return true end if not mappings then mShared = mShared or require('Module:Category handler/shared') mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData end for ns, params in pairs(mappings) do for i, param in ipairs(params) do if self._args[param] then return true end end end if self:parameter('other') then return true end return false end function CategoryHandler:getCategories() local params = self:getNamespaceParameters() local nsCategory for i, param in ipairs(params) do local value = self._args[param] if value ~= nil then nsCategory = value break end end if nsCategory ~= nil or self:namespaceParametersExist() then -- Namespace parameters exist - advanced usage. if nsCategory == nil then nsCategory = self:parameter('other') end local ret = {self:parameter('all')} local numParam = tonumber(nsCategory) if numParam and numParam >= 1 and math.floor(numParam) == numParam then -- nsCategory is an integer ret[#ret + 1] = self._args[numParam] else ret[#ret + 1] = nsCategory end if #ret < 1 then return nil else return table.concat(ret) end elseif self._data.defaultNamespaces[self.title.namespace] then -- Namespace parameters don't exist, simple usage. return self._args[1] end return nil end -------------------------------------------------------------------------------- -- Exports -------------------------------------------------------------------------------- local p = {} function p._exportClasses() -- Used for testing purposes. return { CategoryHandler = CategoryHandler } end function p._main(args, data) data = data or mw.loadData('Module:Category handler/data') local handler = CategoryHandler.new(data, args) if handler:isSuppressed() then return nil end return handler:getCategories() end function p.main(frame, data) data = data or mw.loadData('Module:Category handler/data') local args = require('Module:Arguments').getArgs(frame, { wrappers = data.wrappers, valueFunc = function (k, v) v = trimWhitespace(v) if type(k) == 'number' then if v ~= '' then return v else return nil end else return v end end }) return p._main(args, data) end return p letwavu3yvlayfzew66uuwixmwebq5b 10728 8841 2026-08-25T23:38:30Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Category_handler]] 1002 Scribunto text/plain -------------------------------------------------------------------------------- -- -- -- CATEGORY HANDLER -- -- -- -- This module implements the {{category handler}} template in Lua, -- -- with a few improvements: all namespaces and all namespace aliases -- -- are supported, and namespace names are detected automatically for -- -- the local wiki. This module requires [[Module:Namespace detect]] -- -- and [[Module:Yesno]] to be available on the local wiki. It can be -- -- configured for different wikis by altering the values in -- -- [[Module:Category handler/config]], and pages can be blacklisted -- -- from categorisation by using [[Module:Category handler/blacklist]]. -- -- -- -------------------------------------------------------------------------------- -- Load required modules local yesno = require('Module:Yesno') -- Lazily load things we don't always need local mShared, mappings local p = {} -------------------------------------------------------------------------------- -- Helper functions -------------------------------------------------------------------------------- local function trimWhitespace(s, removeBlanks) if type(s) ~= 'string' then return s end s = s:match('^%s*(.-)%s*$') if removeBlanks then if s ~= '' then return s else return nil end else return s end end -------------------------------------------------------------------------------- -- CategoryHandler class -------------------------------------------------------------------------------- local CategoryHandler = {} CategoryHandler.__index = CategoryHandler function CategoryHandler.new(data, args) local obj = setmetatable({ _data = data, _args = args }, CategoryHandler) -- Set the title object do local pagename = obj:parameter('demopage') local success, titleObj if pagename then success, titleObj = pcall(mw.title.new, pagename) end if success and titleObj then obj.title = titleObj if titleObj == mw.title.getCurrentTitle() then obj._usesCurrentTitle = true end else obj.title = mw.title.getCurrentTitle() obj._usesCurrentTitle = true end end -- Set suppression parameter values for _, key in ipairs{'nocat', 'categories'} do local value = obj:parameter(key) value = trimWhitespace(value, true) obj['_' .. key] = yesno(value) end do local subpage = obj:parameter('subpage') local category2 = obj:parameter('category2') if type(subpage) == 'string' then subpage = mw.ustring.lower(subpage) end if type(category2) == 'string' then subpage = mw.ustring.lower(category2) end obj._subpage = trimWhitespace(subpage, true) obj._category2 = trimWhitespace(category2) -- don't remove blank values end return obj end function CategoryHandler:parameter(key) local parameterNames = self._data.parameters[key] local pntype = type(parameterNames) if pntype == 'string' or pntype == 'number' then return self._args[parameterNames] elseif pntype == 'table' then for _, name in ipairs(parameterNames) do local value = self._args[name] if value ~= nil then return value end end return nil else error(string.format( 'invalid config key "%s"', tostring(key) ), 2) end end function CategoryHandler:isSuppressedByArguments() return -- See if a category suppression argument has been set. self._nocat == true or self._categories == false or ( self._category2 and self._category2 ~= self._data.category2Yes and self._category2 ~= self._data.category2Negative ) -- Check whether we are on a subpage, and see if categories are -- suppressed based on our subpage status. or self._subpage == self._data.subpageNo and self.title.isSubpage or self._subpage == self._data.subpageOnly and not self.title.isSubpage end function CategoryHandler:shouldSkipBlacklistCheck() -- Check whether the category suppression arguments indicate we -- should skip the blacklist check. return self._nocat == false or self._categories == true or self._category2 == self._data.category2Yes end function CategoryHandler:matchesBlacklist() if self._usesCurrentTitle then return self._data.currentTitleMatchesBlacklist else mShared = mShared or require('Module:Category handler/shared') return mShared.matchesBlacklist( self.title.prefixedText, mw.loadData('Module:Category handler/blacklist') ) end end function CategoryHandler:isSuppressed() -- Find if categories are suppressed by either the arguments or by -- matching the blacklist. return self:isSuppressedByArguments() or not self:shouldSkipBlacklistCheck() and self:matchesBlacklist() end function CategoryHandler:getNamespaceParameters() if self._usesCurrentTitle then return self._data.currentTitleNamespaceParameters else if not mappings then mShared = mShared or require('Module:Category handler/shared') mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData end return mShared.getNamespaceParameters( self.title, mappings ) end end function CategoryHandler:namespaceParametersExist() -- Find whether any namespace parameters have been specified. -- We use the order "all" --> namespace params --> "other" as this is what -- the old template did. if self:parameter('all') then return true end if not mappings then mShared = mShared or require('Module:Category handler/shared') mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData end for ns, params in pairs(mappings) do for i, param in ipairs(params) do if self._args[param] then return true end end end if self:parameter('other') then return true end return false end function CategoryHandler:getCategories() local params = self:getNamespaceParameters() local nsCategory for i, param in ipairs(params) do local value = self._args[param] if value ~= nil then nsCategory = value break end end if nsCategory ~= nil or self:namespaceParametersExist() then -- Namespace parameters exist - advanced usage. if nsCategory == nil then nsCategory = self:parameter('other') end local ret = {self:parameter('all')} local numParam = tonumber(nsCategory) if numParam and numParam >= 1 and math.floor(numParam) == numParam then -- nsCategory is an integer ret[#ret + 1] = self._args[numParam] else ret[#ret + 1] = nsCategory end if #ret < 1 then return nil else return table.concat(ret) end elseif self._data.defaultNamespaces[self.title.namespace] then -- Namespace parameters don't exist, simple usage. return self._args[1] end return nil end -------------------------------------------------------------------------------- -- Exports -------------------------------------------------------------------------------- local p = {} function p._exportClasses() -- Used for testing purposes. return { CategoryHandler = CategoryHandler } end function p._main(args, data) data = data or mw.loadData('Module:Category handler/data') local handler = CategoryHandler.new(data, args) if handler:isSuppressed() then return nil end return handler:getCategories() end function p.main(frame, data) data = data or mw.loadData('Module:Category handler/data') local args = require('Module:Arguments').getArgs(frame, { wrappers = data.wrappers, valueFunc = function (k, v) v = trimWhitespace(v) if type(k) == 'number' then if v ~= '' then return v else return nil end else return v end end }) return p._main(args, data) end return p letwavu3yvlayfzew66uuwixmwebq5b Module:Category handler/blacklist 828 218 10867 2015-05-15T00:16:51Z commons>Krenair 0 [[phabricator:T99157|scribunto content model]] 10867 Scribunto text/plain -- This module contains the blacklist used by [[Module:Category handler]]. -- Pages that match Lua patterns in this list will not be categorised unless -- categorisation is explicitly requested. return { '^Main Page$', -- don't categorise the main page. -- Don't categorise the following pages or their subpages. -- "%f[/\0]" matches if the next character is "/" or the end of the string. '^Wikipedia:Cascade%-protected items%f[/\0]', '^User:UBX%f[/\0]', -- The userbox "template" space. '^User talk:UBX%f[/\0]', -- Don't categorise subpages of these pages, but allow -- categorisation of the base page. '^Wikipedia:Template messages/.*$', '/[aA]rchive' -- Don't categorise archives. } ne8sdldor304iu81gnqa05p401j3exc 10868 8849 2026-08-25T23:38:35Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Category_handler/blacklist]] 1006 Scribunto text/plain -- This module contains the blacklist used by [[Module:Category handler]]. -- Pages that match Lua patterns in this list will not be categorised unless -- categorisation is explicitly requested. return { '^Main Page$', -- don't categorise the main page. -- Don't categorise the following pages or their subpages. -- "%f[/\0]" matches if the next character is "/" or the end of the string. '^Wikipidiya:Cascade%-protected items%f[/\0]', '^User:UBX%f[/\0]', -- The userbox "template" space. '^User talk:UBX%f[/\0]', -- Don't categorise subpages of these pages, but allow -- categorisation of the base page. '^Wikipidiya:Template index/.*$', -- Don't categorise archives. '/[aA]rchive', "^Wikipidiya:Administrators' noticeboard/IncidentArchive%d+$", } a2svcabdeugpj7zgfzcf3b47jxmajdc Module:Category handler/config 828 219 10869 2015-05-15T00:16:51Z commons>Krenair 0 [[phabricator:T99157|scribunto content model]] 10869 Scribunto text/plain -------------------------------------------------------------------------------- -- [[Module:Category handler]] configuration data -- -- Language-specific parameter names and values can be set here. -- -- For blacklist config, see [[Module:Category handler/blacklist]]. -- -------------------------------------------------------------------------------- local cfg = {} -- Don't edit this line. -------------------------------------------------------------------------------- -- Start configuration data -- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -- Parameter names -- -- These configuration items specify custom parameter names. -- -- To add one extra name, you can use this format: -- -- -- -- foo = 'parameter name', -- -- -- -- To add multiple names, you can use this format: -- -- -- -- foo = {'parameter name 1', 'parameter name 2', 'parameter name 3'}, -- -------------------------------------------------------------------------------- cfg.parameters = { -- The nocat and categories parameter suppress -- categorisation. They are used with Module:Yesno, and work as follows: -- -- cfg.nocat: -- Result of yesno() Effect -- true Categorisation is suppressed -- false Categorisation is allowed, and -- the blacklist check is skipped -- nil Categorisation is allowed -- -- cfg.categories: -- Result of yesno() Effect -- true Categorisation is allowed, and -- the blacklist check is skipped -- false Categorisation is suppressed -- nil Categorisation is allowed nocat = 'nocat', categories = 'categories', -- The parameter name for the legacy "category2" parameter. This skips the -- blacklist if set to the cfg.category2Yes value, and suppresses -- categorisation if present but equal to anything other than -- cfg.category2Yes or cfg.category2Negative. category2 = 'category2', -- cfg.subpage is the parameter name to specify how to behave on subpages. subpage = 'subpage', -- The parameter for data to return in all namespaces. all = 'all', -- The parameter name for data to return if no data is specified for the -- namespace that is detected. other = 'other', -- The parameter name used to specify a page other than the current page; -- used for testing and demonstration. demopage = 'page', } -------------------------------------------------------------------------------- -- Parameter values -- -- These are set values that can be used with certain parameters. Only one -- -- value can be specified, like this: -- -- -- -- cfg.foo = 'value name' -- -- -------------------------------------------------------------------------------- -- The following settings are used with the cfg.category2 parameter. Setting -- cfg.category2 to cfg.category2Yes skips the blacklist, and if cfg.category2 -- is present but equal to anything other than cfg.category2Yes or -- cfg.category2Negative then it supresses cateogrisation. cfg.category2Yes = 'yes' cfg.category2Negative = '¬' -- The following settings are used with the cfg.subpage parameter. -- cfg.subpageNo is the value to specify to not categorise on subpages; -- cfg.subpageOnly is the value to specify to only categorise on subpages. cfg.subpageNo = 'no' cfg.subpageOnly = 'only' -------------------------------------------------------------------------------- -- Default namespaces -- -- This is a table of namespaces to categorise by default. The keys are the -- -- namespace numbers. -- -------------------------------------------------------------------------------- cfg.defaultNamespaces = { [ 0] = true, -- main [ 6] = true, -- file [ 12] = true, -- help [ 14] = true, -- category [100] = true, -- portal [108] = true, -- book } -------------------------------------------------------------------------------- -- Wrappers -- -- This is a wrapper template or a list of wrapper templates to be passed to -- -- [[Module:Arguments]]. -- -------------------------------------------------------------------------------- cfg.wrappers = 'Template:Category handler' -------------------------------------------------------------------------------- -- End configuration data -- -------------------------------------------------------------------------------- return cfg -- Don't edit this line. 6ga9hbq2pdwalsvx68i53dmbr421rq5 10870 8845 2026-08-25T23:38:35Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Category_handler/config]] 1008 Scribunto text/plain -------------------------------------------------------------------------------- -- [[Module:Category handler]] configuration data -- -- Language-specific parameter names and values can be set here. -- -- For blacklist config, see [[Module:Category handler/blacklist]]. -- -------------------------------------------------------------------------------- local cfg = {} -- Don't edit this line. -------------------------------------------------------------------------------- -- Start configuration data -- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -- Parameter names -- -- These configuration items specify custom parameter names. -- -- To add one extra name, you can use this format: -- -- -- -- foo = 'parameter name', -- -- -- -- To add multiple names, you can use this format: -- -- -- -- foo = {'parameter name 1', 'parameter name 2', 'parameter name 3'}, -- -------------------------------------------------------------------------------- cfg.parameters = { -- The nocat and categories parameter suppress -- categorisation. They are used with Module:Yesno, and work as follows: -- -- cfg.nocat: -- Result of yesno() Effect -- true Categorisation is suppressed -- false Categorisation is allowed, and -- the blacklist check is skipped -- nil Categorisation is allowed -- -- cfg.categories: -- Result of yesno() Effect -- true Categorisation is allowed, and -- the blacklist check is skipped -- false Categorisation is suppressed -- nil Categorisation is allowed nocat = 'nocat', categories = 'categories', -- The parameter name for the legacy "category2" parameter. This skips the -- blacklist if set to the cfg.category2Yes value, and suppresses -- categorisation if present but equal to anything other than -- cfg.category2Yes or cfg.category2Negative. category2 = 'category2', -- cfg.subpage is the parameter name to specify how to behave on subpages. subpage = 'subpage', -- The parameter for data to return in all namespaces. all = 'all', -- The parameter name for data to return if no data is specified for the -- namespace that is detected. other = 'other', -- The parameter name used to specify a page other than the current page; -- used for testing and demonstration. demopage = 'page', } -------------------------------------------------------------------------------- -- Parameter values -- -- These are set values that can be used with certain parameters. Only one -- -- value can be specified, like this: -- -- -- -- cfg.foo = 'value name' -- -- -------------------------------------------------------------------------------- -- The following settings are used with the cfg.category2 parameter. Setting -- cfg.category2 to cfg.category2Yes skips the blacklist, and if cfg.category2 -- is present but equal to anything other than cfg.category2Yes or -- cfg.category2Negative then it supresses cateogrisation. cfg.category2Yes = 'yes' cfg.category2Negative = '¬' -- The following settings are used with the cfg.subpage parameter. -- cfg.subpageNo is the value to specify to not categorise on subpages; -- cfg.subpageOnly is the value to specify to only categorise on subpages. cfg.subpageNo = 'no' cfg.subpageOnly = 'only' -------------------------------------------------------------------------------- -- Default namespaces -- -- This is a table of namespaces to categorise by default. The keys are the -- -- namespace numbers. -- -------------------------------------------------------------------------------- cfg.defaultNamespaces = { [ 0] = true, -- main [ 6] = true, -- file [ 12] = true, -- help [ 14] = true, -- category [100] = true, -- portal [108] = true, -- book } -------------------------------------------------------------------------------- -- Wrappers -- -- This is a wrapper template or a list of wrapper templates to be passed to -- -- [[Module:Arguments]]. -- -------------------------------------------------------------------------------- cfg.wrappers = 'Template:Category handler' -------------------------------------------------------------------------------- -- End configuration data -- -------------------------------------------------------------------------------- return cfg -- Don't edit this line. 6ga9hbq2pdwalsvx68i53dmbr421rq5 Module:Category handler/data 828 220 10871 2015-05-15T00:16:51Z commons>Krenair 0 [[phabricator:T99157|scribunto content model]] 10871 Scribunto text/plain -- This module assembles data to be passed to [[Module:Category handler]] using -- mw.loadData. This includes the configuration data and whether the current -- page matches the title blacklist. local data = require('Module:Category handler/config') local mShared = require('Module:Category handler/shared') local blacklist = require('Module:Category handler/blacklist') local title = mw.title.getCurrentTitle() data.currentTitleMatchesBlacklist = mShared.matchesBlacklist( title.prefixedText, blacklist ) data.currentTitleNamespaceParameters = mShared.getNamespaceParameters( title, mShared.getParamMappings() ) return data k26mwixuaeijisfddb0sxkg82iux8v4 10872 8843 2026-08-25T23:38:35Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Category_handler/data]] 1010 Scribunto text/plain -- This module assembles data to be passed to [[Module:Category handler]] using -- mw.loadData. This includes the configuration data and whether the current -- page matches the title blacklist. local data = require('Module:Category handler/config') local mShared = require('Module:Category handler/shared') local blacklist = require('Module:Category handler/blacklist') local title = mw.title.getCurrentTitle() data.currentTitleMatchesBlacklist = mShared.matchesBlacklist( title.prefixedText, blacklist ) data.currentTitleNamespaceParameters = mShared.getNamespaceParameters( title, mShared.getParamMappings() ) return data k26mwixuaeijisfddb0sxkg82iux8v4 Module:Category handler/shared 828 221 10873 2015-05-15T00:16:52Z commons>Krenair 0 [[phabricator:T99157|scribunto content model]] 10873 Scribunto text/plain -- This module contains shared functions used by [[Module:Category handler]] -- and its submodules. local p = {} function p.matchesBlacklist(page, blacklist) for i, pattern in ipairs(blacklist) do local match = mw.ustring.match(page, pattern) if match then return true end end return false end function p.getParamMappings(useLoadData) local dataPage = 'Module:Namespace detect/data' if useLoadData then return mw.loadData(dataPage).mappings else return require(dataPage).mappings end end function p.getNamespaceParameters(titleObj, mappings) -- We don't use title.nsText for the namespace name because it adds -- underscores. local mappingsKey if titleObj.isTalkPage then mappingsKey = 'talk' else mappingsKey = mw.site.namespaces[titleObj.namespace].name end mappingsKey = mw.ustring.lower(mappingsKey) return mappings[mappingsKey] or {} end return p omlsnhudxz6juptvtxz7ns97jutbzc5 10874 8847 2026-08-25T23:38:35Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Category_handler/shared]] 1012 Scribunto text/plain -- This module contains shared functions used by [[Module:Category handler]] -- and its submodules. local p = {} function p.matchesBlacklist(page, blacklist) for i, pattern in ipairs(blacklist) do local match = mw.ustring.match(page, pattern) if match then return true end end return false end function p.getParamMappings(useLoadData) local dataPage = 'Module:Namespace detect/data' if useLoadData then return mw.loadData(dataPage).mappings else return require(dataPage).mappings end end function p.getNamespaceParameters(titleObj, mappings) -- We don't use title.nsText for the namespace name because it adds -- underscores. local mappingsKey if titleObj.isTalkPage then mappingsKey = 'talk' else mappingsKey = mw.site.namespaces[titleObj.namespace].name end mappingsKey = mw.ustring.lower(mappingsKey) return mappings[mappingsKey] or {} end return p omlsnhudxz6juptvtxz7ns97jutbzc5 Module:List 828 247 10701 2019-07-16T11:19:24Z commons>4nn1l2 0 Changed protection level for "[[Module:List]]": downgraded protection level per [[Special:Permalink/357548402|consensus]] ([Move=Allow only template editors and administrators] (indefinite) [Edit=Allow only template editors and administrators] (indefinite)) 10701 Scribunto text/plain -- This module outputs different kinds of lists. At the moment, bulleted, -- unbulleted, horizontal, ordered, and horizontal ordered lists are supported. local libUtil = require('libraryUtil') local checkType = libUtil.checkType local mTableTools = require('Module:TableTools') local p = {} local listTypes = { ['bulleted'] = true, ['unbulleted'] = true, ['horizontal'] = true, ['ordered'] = true, ['horizontal_ordered'] = true } function p.makeListData(listType, args) -- Constructs a data table to be passed to p.renderList. local data = {} -- Classes data.classes = {} if listType == 'horizontal' or listType == 'horizontal_ordered' then table.insert(data.classes, 'hlist hlist-separated') elseif listType == 'unbulleted' then table.insert(data.classes, 'plainlist') end table.insert(data.classes, args.class) -- Main div style data.style = args.style -- Indent for horizontal lists if listType == 'horizontal' or listType == 'horizontal_ordered' then local indent = tonumber(args.indent) indent = indent and indent * 1.6 or 0 if indent > 0 then data.marginLeft = indent .. 'em' end end -- List style types for ordered lists -- This could be "1, 2, 3", "a, b, c", or a number of others. The list style -- type is either set by the "type" attribute or the "list-style-type" CSS -- property. if listType == 'ordered' or listType == 'horizontal_ordered' then data.listStyleType = args.list_style_type or args['list-style-type'] data.type = args['type'] -- Detect invalid type attributes and attempt to convert them to -- list-style-type CSS properties. if data.type and not data.listStyleType and not tostring(data.type):find('^%s*[1AaIi]%s*$') then data.listStyleType = data.type data.type = nil end end -- List tag type if listType == 'ordered' or listType == 'horizontal_ordered' then data.listTag = 'ol' else data.listTag = 'ul' end -- Start number for ordered lists data.start = args.start if listType == 'horizontal_ordered' then -- Apply fix to get start numbers working with horizontal ordered lists. local startNum = tonumber(data.start) if startNum then data.counterReset = 'listitem ' .. tostring(startNum - 1) end end -- List style -- ul_style and ol_style are included for backwards compatibility. No -- distinction is made for ordered or unordered lists. data.listStyle = args.list_style -- List items -- li_style is included for backwards compatibility. item_style was included -- to be easier to understand for non-coders. data.itemStyle = args.item_style or args.li_style data.items = {} for i, num in ipairs(mTableTools.numKeys(args)) do local item = {} item.content = args[num] item.style = args['item' .. tostring(num) .. '_style'] or args['item_style' .. tostring(num)] item.value = args['item' .. tostring(num) .. '_value'] or args['item_value' .. tostring(num)] table.insert(data.items, item) end return data end function p.renderList(data) -- Renders the list HTML. -- Return the blank string if there are no list items. if type(data.items) ~= 'table' or #data.items < 1 then return '' end -- Render the main div tag. local root = mw.html.create('div') for i, class in ipairs(data.classes or {}) do root:addClass(class) end root:css{['margin-left'] = data.marginLeft} if data.style then root:cssText(data.style) end -- Render the list tag. local list = root:tag(data.listTag or 'ul') list :attr{start = data.start, type = data.type} :css{ ['counter-reset'] = data.counterReset, ['list-style-type'] = data.listStyleType } if data.listStyle then list:cssText(data.listStyle) end -- Render the list items for i, t in ipairs(data.items or {}) do local item = list:tag('li') if data.itemStyle then item:cssText(data.itemStyle) end if t.style then item:cssText(t.style) end item :attr{value = t.value} :wikitext(t.content) end return tostring(root) end function p.renderTrackingCategories(args) local isDeprecated = false -- Tracks deprecated parameters. for k, v in pairs(args) do k = tostring(k) if k:find('^item_style%d+$') or k:find('^item_value%d+$') then isDeprecated = true break end end local ret = '' if isDeprecated then ret = ret .. '[[Category:List templates with deprecated parameters]]' end return ret end function p.makeList(listType, args) if not listType or not listTypes[listType] then error(string.format( "bad argument #1 to 'makeList' ('%s' is not a valid list type)", tostring(listType) ), 2) end checkType('makeList', 2, args, 'table') local data = p.makeListData(listType, args) local list = p.renderList(data) local trackingCategories = p.renderTrackingCategories(args) return list .. trackingCategories end for listType in pairs(listTypes) do p[listType] = function (frame) local mArguments = require('Module:Arguments') local origArgs = mArguments.getArgs(frame) -- Copy all the arguments to a new table, for faster indexing. local args = {} for k, v in pairs(origArgs) do args[k] = v end return p.makeList(listType, args) end end return p lkqmcmpfob2c6xhq46f675tm6p136ns 10702 8921 2026-08-25T23:38:29Z RAPTOR7762 18 1 revision imported from [[:commons:Module:List]] 1085 Scribunto text/plain local libUtil = require('libraryUtil') local checkType = libUtil.checkType local mTableTools = require('Module:TableTools') local p = {} local listTypes = { ['bulleted'] = true, ['unbulleted'] = true, ['horizontal'] = true, ['ordered'] = true, ['horizontal_ordered'] = true } function p.makeListData(listType, args) -- Constructs a data table to be passed to p.renderList. local data = {} -- Classes and TemplateStyles data.classes = {} data.templatestyles = '' if listType == 'horizontal' or listType == 'horizontal_ordered' then table.insert(data.classes, 'hlist') data.templatestyles = mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = { src = 'Hlist/styles.css' } } elseif listType == 'unbulleted' then table.insert(data.classes, 'plainlist') data.templatestyles = mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = { src = 'Plainlist/styles.css' } } end table.insert(data.classes, args.class) -- Main div style data.style = args.style -- Indent for horizontal lists if listType == 'horizontal' or listType == 'horizontal_ordered' then local indent = tonumber(args.indent) indent = indent and indent * 1.6 or 0 if indent > 0 then data.marginLeft = indent .. 'em' end end -- List style types for ordered lists -- This could be "1, 2, 3", "a, b, c", or a number of others. The list style -- type is either set by the "type" attribute or the "list-style-type" CSS -- property. if listType == 'ordered' or listType == 'horizontal_ordered' then data.listStyleType = args.list_style_type or args['list-style-type'] data.type = args['type'] -- Detect invalid type attributes and attempt to convert them to -- list-style-type CSS properties. if data.type and not data.listStyleType and not tostring(data.type):find('^%s*[1AaIi]%s*$') then data.listStyleType = data.type data.type = nil end end -- List tag type if listType == 'ordered' or listType == 'horizontal_ordered' then data.listTag = 'ol' else data.listTag = 'ul' end -- Start number for ordered lists data.start = args.start if listType == 'horizontal_ordered' then -- Apply fix to get start numbers working with horizontal ordered lists. local startNum = tonumber(data.start) if startNum then data.counterReset = 'listitem ' .. tostring(startNum - 1) end end -- List style -- ul_style and ol_style are included for backwards compatibility. No -- distinction is made for ordered or unordered lists. data.listStyle = args.list_style -- List items -- li_style is included for backwards compatibility. item_style was included -- to be easier to understand for non-coders. data.itemStyle = args.item_style or args.li_style data.items = {} for _, num in ipairs(mTableTools.numKeys(args)) do local item = {} item.content = args[num] item.style = args['item' .. tostring(num) .. '_style'] or args['item_style' .. tostring(num)] item.value = args['item' .. tostring(num) .. '_value'] or args['item_value' .. tostring(num)] table.insert(data.items, item) end return data end function p.renderList(data) -- Renders the list HTML. -- Return the blank string if there are no list items. if type(data.items) ~= 'table' or #data.items < 1 then return '' end -- Render the main div tag. local root = mw.html.create('div') for _, class in ipairs(data.classes or {}) do root:addClass(class) end root:css{['margin-left'] = data.marginLeft} if data.style then root:cssText(data.style) end -- Render the list tag. local list = root:tag(data.listTag or 'ul') list :attr{start = data.start, type = data.type} :css{ ['counter-reset'] = data.counterReset, ['list-style-type'] = data.listStyleType } if data.listStyle then list:cssText(data.listStyle) end -- Render the list items for _, t in ipairs(data.items or {}) do local item = list:tag('li') if data.itemStyle then item:cssText(data.itemStyle) end if t.style then item:cssText(t.style) end item :attr{value = t.value} :wikitext(t.content) end return data.templatestyles .. tostring(root) end function p.renderTrackingCategories(args) local isDeprecated = false -- Tracks deprecated parameters. for k, v in pairs(args) do k = tostring(k) if k:find('^item_style%d+$') or k:find('^item_value%d+$') then isDeprecated = true break end end local ret = '' if isDeprecated then ret = ret .. '[[Panni:Pages using module:list with deprecated parameters]]' end return ret end function p.makeList(listType, args) if not listType or not listTypes[listType] then error(string.format( "bad argument #1 to 'makeList' ('%s' is not a valid list type)", tostring(listType) ), 2) end checkType('makeList', 2, args, 'table') local data = p.makeListData(listType, args) local list = p.renderList(data) local trackingCategories = p.renderTrackingCategories(args) return list .. trackingCategories end for listType in pairs(listTypes) do p[listType] = function (frame) local mArguments = require('Module:Arguments') local origArgs = mArguments.getArgs(frame, { frameOnly = ((frame and frame.args and frame.args.frameonly or '') ~= ''), valueFunc = function (key, value) if not value or not mw.ustring.find(value, '%S') then return nil end if mw.ustring.find(value, '^%s*[%*#;:]') then return value else return value:match('^%s*(.-)%s*$') end return nil end }) -- Copy all the arguments to a new table, for faster indexing. local args = {} for k, v in pairs(origArgs) do args[k] = v end return p.makeList(listType, args) end end return p tr487zbcoedlshivz6396ck395x3poz Module:Lua banner 828 248 10911 8958 2025-10-03T01:32:52Z commons>Waddie96 0 add class .tpl-lua-banner 10911 Scribunto text/plain -- This module implements the {{lua}} template. local yesno = require('Module:Yesno') local mList = require('Module:List') local mTableTools = require('Module:TableTools') local mMessageBox = require('Module:Message box') local TNT = require('Module:TNT') local lang = mw.getCurrentFrame():preprocess('{{int:lang}}') local p = {} local function format(msg) return TNT.formatInLanguage(lang, 'I18n/Lua banner', msg) end local function getConfig() return mw.loadData('Module:Lua banner/config') end function p.main(frame) local origArgs = frame:getParent().args local args = {} for k, v in pairs(origArgs) do v = v:match('^%s*(.-)%s*$') if v ~= '' then args[k] = v end end return p._main(args) end function p._main(args, cfg) local modules = mTableTools.compressSparseArray(args) local box = p.renderBox(modules, cfg) local trackingCategories = p.renderTrackingCategories(args, modules, nil, cfg) return box .. trackingCategories end function p.renderBox(modules, cfg) local boxArgs = {} if #modules < 1 then cfg = cfg or getConfig() if cfg['allow_wishes'] then boxArgs.text = format('wishtext') else boxArgs.text = string.format('<strong class="error">%s</strong>', format('error_emptylist')) end else local moduleLinks = {} for i, module in ipairs(modules) do moduleLinks[i] = string.format('[[:%s]]', module) end local moduleList = mList.makeList('bulleted', moduleLinks) boxArgs.text = format('header') .. '\n' .. moduleList end boxArgs.type = 'notice' boxArgs.small = true boxArgs.class = 'tpl-lua-banner' boxArgs.image = string.format( '<span aria-hidden="true">[[File:Lua-Logo-small.svg|30px|alt=%s|link=%s]]</span>', format('logo_alt'), format('logo_link') ) return mMessageBox.main('mbox', boxArgs) end function p.renderTrackingCategories(args, modules, titleObj, cfg) if yesno(args.nocat) then return '' end cfg = cfg or getConfig() local cats = {} -- Error category if #modules < 1 and not cfg['allow_wishes'] and cfg['error_category'] then cats[#cats + 1] = cfg['error_category'] end -- Lua templates category titleObj = titleObj or mw.title.getCurrentTitle() if titleObj.namespace == 10 and not cfg['subpage_blacklist'][titleObj.subpageText] then local category = args.category if not category then local pagename = modules[1] and mw.title.new(modules[1]) category = pagename and cfg['module_categories'][pagename.text] if not category then if cfg['allow_wishes'] and #modules < 1 then category = cfg['wish_category'] else category = cfg['default_category'] end end end if category then cats[#cats + 1] = category end end for i, cat in ipairs(cats) do cats[i] = string.format('[[Category:%s]]', cat) end return table.concat(cats) end return p ayos2c7ulq1i25528cgh5txi0wub4uy 10912 8959 2026-08-25T23:38:37Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Lua_banner]] 1088 Scribunto text/plain -- This module implements the {{lua}} template. local yesno = require('Module:Yesno') local mList = require('Module:List') local mTableTools = require('Module:TableTools') local mMessageBox = require('Module:Message box') local p = {} function p.main(frame) local origArgs = frame:getParent().args local args = {} for k, v in pairs(origArgs) do v = v:match('^%s*(.-)%s*$') if v ~= '' then args[k] = v end end return p._main(args) end function p._main(args) local modules = mTableTools.compressSparseArray(args) local box = p.renderBox(modules) local trackingCategories = p.renderTrackingCategories(args, modules) return box .. trackingCategories end function p.renderBox(modules) local boxArgs = {} if #modules < 1 then boxArgs.text = '<strong class="error">Error: no modules specified</strong>' else local moduleLinks = {} for i, module in ipairs(modules) do moduleLinks[i] = string.format('[[:%s]]', module) local maybeSandbox = mw.title.new(module .. '/sandbox') if maybeSandbox and maybeSandbox.exists then moduleLinks[i] = moduleLinks[i] .. string.format(' ([[:%s|sandbox]])', maybeSandbox.fullText) end end local moduleList = mList.makeList('bulleted', moduleLinks) local title = mw.title.getCurrentTitle() if title.subpageText == "doc" then title = title.basePageTitle end if title.contentModel == "Scribunto" then boxArgs.text = 'This module depends on the following other modules:' .. moduleList else boxArgs.text = 'This template uses [[Wikipidiya:Lua|Lua]]:\n' .. moduleList end end boxArgs.type = 'notice' boxArgs.small = true boxArgs.image = '[[Fayil:Lua-Logo.svg|30px|alt=|link=]]' return mMessageBox.main('mbox', boxArgs) end function p.renderTrackingCategories(args, modules, titleObj) if yesno(args.nocat) then return '' end local cats = {} -- Error category if #modules < 1 then cats[#cats + 1] = 'Lua templates with errors' end -- Lua templates category titleObj = titleObj or mw.title.getCurrentTitle() local subpageBlacklist = { doc = true, sandbox = true, sandbox2 = true, testcases = true } if not subpageBlacklist[titleObj.subpageText] then local protCatName if titleObj.namespace == 10 then local category = args.category if not category then local categories = { ['Module:String'] = 'Templates based on the String Lua module', ['Module:Math'] = 'Templates based on the Math Lua module', ['Module:BaseConvert'] = 'Templates based on the BaseConvert Lua module', ['Module:Citation/CS1'] = 'Templates based on the Citation/CS1 Lua module' } category = modules[1] and categories[modules[1]] category = category or 'Lua-based templates' end cats[#cats + 1] = category protCatName = "Templates using under-protected Lua modules" elseif titleObj.namespace == 828 then protCatName = "Modules depending on under-protected modules" end if not args.noprotcat and protCatName then local protLevels = { autoconfirmed = 1, extendedconfirmed = 2, templateeditor = 3, sysop = 4 } local currentProt if titleObj.id ~= 0 then -- id is 0 (page does not exist) if am previewing before creating a template. currentProt = titleObj.protectionLevels["edit"][1] end if currentProt == nil then currentProt = 0 else currentProt = protLevels[currentProt] end for i, module in ipairs(modules) do if module ~= "WP:libraryUtil" then local moduleTitle = mw.title.new(module) local moduleProt = moduleTitle and moduleTitle.protectionLevels["edit"][1] if moduleProt == nil then moduleProt = 0 else moduleProt = protLevels[moduleProt] end if moduleProt < currentProt then cats[#cats + 1] = protCatName break end end end end end for i, cat in ipairs(cats) do cats[i] = string.format('[[Panni:%s]]', cat) end return table.concat(cats) end return p r9irtnx3k4tcnyr4p6nnc2fsy1qsckr Module:Math 828 249 10595 2026-04-10T14:26:08Z en>Ahecht 0 Rewrite rounding and precision code to run faster, other code cleanup including removing unused variables. Please revert if this causes any unexpected side effects 10595 Scribunto text/plain --[[ This module provides a number of basic mathematical operations. ]] local yesno, getArgs -- lazily initialized local p = {} -- Holds functions to be returned from #invoke, and functions to make available to other Lua modules. local wrap = {} -- Holds wrapper functions that process arguments from #invoke. These act as intemediary between functions meant for #invoke and functions meant for Lua. --[[ Helper functions used to avoid redundant code. ]] local function err(msg) -- Generates wikitext error messages. return mw.ustring.format('<strong class="error">Formatting error: %s</strong>', msg) end local function unpackNumberArgs(args) -- Returns an unpacked list of arguments specified with numerical keys. local ret = {} for k, v in pairs(args) do if type(k) == 'number' then table.insert(ret, v) end end return unpack(ret) end local function makeArgArray(...) -- Makes an array of arguments from a list of arguments that might include nils. local args = {...} -- Table of arguments. It might contain nils or non-number values, so we can't use ipairs. local nums = {} -- Stores the numbers of valid numerical arguments. local ret = {} for k, v in pairs(args) do v = p._cleanNumber(v) if v then nums[#nums + 1] = k args[k] = v end end table.sort(nums) for i, num in ipairs(nums) do ret[#ret + 1] = args[num] end return ret end local function fold(func, ...) -- Use a function on all supplied arguments, and return the result. The function must accept two numbers as parameters, -- and must return a number as an output. This number is then supplied as input to the next function call. local vals = makeArgArray(...) local count = #vals -- The number of valid arguments if count == 0 then return -- Exit if we have no valid args, otherwise removing the first arg would cause an error. nil, 0 end local ret = table.remove(vals, 1) for _, val in ipairs(vals) do ret = func(ret, val) end return ret, count end --[[ Fold arguments by selectively choosing values (func should return when to choose the current "dominant" value). ]] local function binary_fold(func, ...) local value = fold((function(a, b) if func(a, b) then return a else return b end end), ...) return value end --[[ random Generate a random number Usage: {{#invoke: Math | random }} {{#invoke: Math | random | maximum value }} {{#invoke: Math | random | minimum value | maximum value }} ]] function wrap.random(args) local first = p._cleanNumber(args[1]) local second = p._cleanNumber(args[2]) return p._random(first, second) end function p._random(first, second) math.randomseed(mw.site.stats.edits + mw.site.stats.pages + os.time() + math.floor(os.clock() * 1000000000)) -- math.random will throw an error if given an explicit nil parameter, so we need to use if statements to check the params. if first and second then if first <= second then -- math.random doesn't allow the first number to be greater than the second. return math.random(first, second) end elseif first then return math.random(first) else return math.random() end end --[[ order Determine order of magnitude of a number Usage: {{#invoke: Math | order | value }} ]] function wrap.order(args) local input_string = (args[1] or args.x or '0'); local input_number = p._cleanNumber(input_string); if input_number == nil then return err('order of magnitude input appears non-numeric') else return p._order(input_number) end end function p._order(x) if x == 0 then return 0 end return math.floor(math.log10(math.abs(x))) end --[[ precision Detemines the precision of a number using the string representation Usage: {{ #invoke: Math | precision | value }} ]] function wrap.precision(args) local input_string = (args[1] or args.x or '0'); local trap_fraction = args.check_fraction; if not yesno then yesno = require('Module:Yesno') end if yesno(trap_fraction, true) then -- Returns true for all input except nil, false, "no", "n", "0" and a few others. See [[Module:Yesno]]. local pos = string.find(input_string, '/', 1, true); if pos ~= nil then if string.find(input_string, '/', pos + 1, true) == nil then local denominator = string.sub(input_string, pos+1, -1); local denom_value = tonumber(denominator); if denom_value ~= nil then return math.log10(denom_value); end end end end local _, clean_string = p._cleanNumber(input_string); if clean_string == nil then return err('precision input appears non-numeric') else return p._precision(clean_string) end end function p._precision(x) if type(x) == 'number' then x = tostring(x) end local result = 0; --subtract exponent local _, _, coefficient, exponent = x:find("^(.*)[eE](.*)$") if coefficient then result = result - (tonumber(exponent) or 0) x = coefficient end --add decimal places local i, j = x:find('%..*$') if i then result = result + (j - i) return result end --subtract trailing zeroes i, j = x:find('[^0]0+$') if i then result = result - (j - i) end return result end --[[ max Finds the maximum argument Usage: {{#invoke:Math| max | value1 | value2 | ... }} Note, any values that do not evaluate to numbers are ignored. ]] function wrap.max(args) return p._max(unpackNumberArgs(args)) end function p._max(...) local max_value = binary_fold((function(a, b) return a > b end), ...) if max_value then return max_value end end --[[ median Find the median of set of numbers Usage: {{#invoke:Math | median | number1 | number2 | ...}} OR {{#invoke:Math | median }} ]] function wrap.median(args) return p._median(unpackNumberArgs(args)) end function p._median(...) local vals = makeArgArray(...) local count = #vals table.sort(vals) if count == 0 then return 0 end if p._mod(count, 2) == 0 then return (vals[count/2] + vals[count/2+1])/2 else return vals[math.ceil(count/2)] end end --[[ min Finds the minimum argument Usage: {{#invoke:Math| min | value1 | value2 | ... }} OR {{#invoke:Math| min }} When used with no arguments, it takes its input from the parent frame. Note, any values that do not evaluate to numbers are ignored. ]] function wrap.min(args) return p._min(unpackNumberArgs(args)) end function p._min(...) local min_value = binary_fold((function(a, b) return a < b end), ...) if min_value then return min_value end end --[[ sum Finds the sum Usage: {{#invoke:Math| sum | value1 | value2 | ... }} OR {{#invoke:Math| sum }} Note, any values that do not evaluate to numbers are ignored. ]] function wrap.sum(args) return p._sum(unpackNumberArgs(args)) end function p._sum(...) local sums = fold((function(a, b) return a + b end), ...) if not sums then return 0 else return sums end end --[[ average Finds the average Usage: {{#invoke:Math| average | value1 | value2 | ... }} OR {{#invoke:Math| average }} Note, any values that do not evaluate to numbers are ignored. ]] function wrap.average(args) return p._average(unpackNumberArgs(args)) end function p._average(...) local sum, count = fold((function(a, b) return a + b end), ...) if not sum then return 0 else return sum / count end end --[[ round Rounds a number to specified precision Usage: {{#invoke:Math | round | value | precision }} --]] function wrap.round(args) local value = p._cleanNumber(args[1] or args.value or 0) local precision = p._cleanNumber(args[2] or args.precision or 0) if value == nil or precision == nil then return err('round input appears non-numeric') else return p._round(value, precision) end end function p._round(value, precision) local rescale = math.pow(10, precision or 0); return math.floor(value * rescale + 0.5) / rescale; end --[[ log10 returns the log (base 10) of a number Usage: {{#invoke:Math | log10 | x }} ]] function wrap.log10(args) return math.log10(args[1]) end --[[ mod Implements the modulo operator Usage: {{#invoke:Math | mod | x | y }} --]] function wrap.mod(args) local x = p._cleanNumber(args[1]) local y = p._cleanNumber(args[2]) if not x then return err('first argument to mod appears non-numeric') elseif not y then return err('second argument to mod appears non-numeric') else return p._mod(x, y) end end function p._mod(x, y) local ret = x % y if not (0 <= ret and ret < y) then ret = 0 end return ret end --[[ gcd Calculates the greatest common divisor of multiple numbers Usage: {{#invoke:Math | gcd | value 1 | value 2 | value 3 | ... }} --]] function wrap.gcd(args) return p._gcd(unpackNumberArgs(args)) end function p._gcd(...) local function findGcd(a, b) local r = b local oldr = a while r ~= 0 do local quotient = math.floor(oldr / r) oldr, r = r, oldr - quotient * r end if oldr < 0 then oldr = oldr * -1 end return oldr end local result = fold(findGcd, ...) return result end --[[ precision_format Rounds a number to the specified precision and formats according to rules originally used for {{template:Rnd}}. Output is a string. Usage: {{#invoke: Math | precision_format | number | precision }} ]] function wrap.precision_format(args) local value_string = args[1] or 0 local precision = args[2] or 0 return p._precision_format(value_string, precision) end function p._precision_format(value_string, precision) -- For access to Mediawiki built-in formatter. local lang = mw.getContentLanguage(); local value value, value_string = p._cleanNumber(value_string) precision = p._cleanNumber(precision) -- Check for non-numeric input if value == nil or precision == nil then return err('invalid input when rounding') end local abs_value = math.abs(value) local current_precision = p._precision(value) local order = p._order(value) -- Due to round-off effects it is neccesary to limit the returned precision under -- some circumstances because the terminal digits will be inaccurately reported. if order + precision >= 14 then if order + p._precision(value_string) >= 14 then precision = 13 - order; end end -- If rounding off, truncate extra digits if precision < current_precision then value = p._round(value, precision) abs_value = math.abs(value) current_precision = p._precision(value) end local formatted_num = lang:formatNum(abs_value) -- Handle cases requiring scientific notation if math.abs(order) >= 9 or string.find(formatted_num, 'E', 1, true) then value = value * (10 ^ (-order)) abs_value = math.abs(value) current_precision = current_precision + order precision = precision + order formatted_num = lang:formatNum(abs_value) else order = 0; end -- Use proper unary minus sign rather than ASCII default formatted_num = ((value < 0) and '−' or '') .. formatted_num -- Pad with zeros, if needed if current_precision < precision then local padding if current_precision <= 0 then if precision > 0 then local zero_sep = lang:formatNum(1.1) formatted_num = formatted_num .. zero_sep:sub(2,2) padding = precision if padding > 20 then padding = 20 end formatted_num = formatted_num .. string.rep('0', padding) end else padding = precision - current_precision if padding > 20 then padding = 20 end formatted_num = formatted_num .. string.rep('0', padding) end end -- Add exponential notation, if necessary. if order ~= 0 then -- Use proper unary minus sign rather than ASCII default if order < 0 then order = '−' .. lang:formatNum(math.abs(order)) else order = lang:formatNum(order) end formatted_num = formatted_num .. '<span style="margin:0 .15em 0 .25em">×</span>10<sup>' .. order .. '</sup>' end return formatted_num end --[[ divide Implements the division operator Usage: {{#invoke:Math | divide | x | y | round= | precision= }} --]] function wrap.divide(args) local x = args[1] local y = args[2] local round = args.round local precision = args.precision if not yesno then yesno = require('Module:Yesno') end return p._divide(x, y, yesno(round), precision) end function p._divide(x, y, round, precision) if y == nil or y == "" then return err("Empty divisor") elseif not tonumber(y) then if type(y) == 'string' and string.sub(y, 1, 1) == '<' then return y else return err("Not a number: " .. y) end elseif x == nil or x == "" then return err("Empty dividend") elseif not tonumber(x) then if type(x) == 'string' and string.sub(x, 1, 1) == '<' then return x else return err("Not a number: " .. x) end else local z = x / y if round then return p._round(z, 0) elseif precision then return p._round(z, precision) else return z end end end --[[ Helper function that interprets the input numerically. If the input does not appear to be a number, attempts evaluating it as a parser functions expression. ]] function p._cleanNumber(number_string, unformat) if type(number_string) == 'number' then -- We were passed a number, so we don't need to do any processing. return number_string, tostring(number_string) elseif type(number_string) ~= 'string' or not number_string:find('%S') then -- We were passed a non-string or a blank string, so exit. return nil, nil; end -- Attempt basic conversion local number = tonumber(number_string) -- If failed, try unformatting the number_string if unformat and number == nil then -- Cannot use mw.language.getContentLanguage():parseFormattedNumber() -- because, unlike {{formatnum:|R}}, it won't ignore operators (it -- would return an error on "1,234+1,234" instead of "1234+1234") number_string = mw.getCurrentFrame():callParserFunction("formatnum", {number_string, "R"}) number = tonumber(number_string) end -- If failed, attempt to evaluate input as an expression if number == nil then local success, result = pcall(mw.ext.ParserFunctions.expr, number_string) if success then number = tonumber(result) number_string = tostring(number) else number = nil number_string = nil end else number_string = number_string:match("^%s*(.-)%s*$") -- String is valid but may contain padding, clean it. number_string = number_string:match("^%+(.*)$") or number_string -- Trim any leading + signs. if number_string:find('^%-?0[xX]') then -- Number is using 0xnnn notation to indicate base 16; use the number that Lua detected instead. number_string = tostring(number) end end return number, number_string end --[[ Wrapper function that does basic argument processing. This ensures that all functions from #invoke can use either the current frame or the parent frame, and it also trims whitespace for all arguments and removes blank arguments. ]] local mt = { __index = function(_, k) return function(frame) if not getArgs then getArgs = require('Module:Arguments').getArgs end return wrap[k](getArgs(frame)) -- Argument processing is left to Module:Arguments. Whitespace is trimmed and blank arguments are removed. end end } return setmetatable(p, mt) f4r823qxvpkct3eikmvj99wyjq9cjkm 10596 1092 2026-08-25T23:33:44Z RAPTOR7762 18 1 revision imported from [[:en:Module:Math]] 1090 Scribunto text/plain --[[ This module provides a number of basic mathematical operations. ]] local yesno, getArgs -- lazily initialized local p = {} -- Holds functions to be returned from #invoke, and functions to make available to other Lua modules. local wrap = {} -- Holds wrapper functions that process arguments from #invoke. These act as intemediary between functions meant for #invoke and functions meant for Lua. --[[ Helper functions used to avoid redundant code. ]] local function err(msg) -- Generates wikitext error messages. return mw.ustring.format('<strong class="error">Formatting error: %s</strong>', msg) end local function unpackNumberArgs(args) -- Returns an unpacked list of arguments specified with numerical keys. local ret = {} for k, v in pairs(args) do if type(k) == 'number' then table.insert(ret, v) end end return unpack(ret) end local function makeArgArray(...) -- Makes an array of arguments from a list of arguments that might include nils. local args = {...} -- Table of arguments. It might contain nils or non-number values, so we can't use ipairs. local nums = {} -- Stores the numbers of valid numerical arguments. local ret = {} for k, v in pairs(args) do v = p._cleanNumber(v) if v then nums[#nums + 1] = k args[k] = v end end table.sort(nums) for i, num in ipairs(nums) do ret[#ret + 1] = args[num] end return ret end local function fold(func, ...) -- Use a function on all supplied arguments, and return the result. The function must accept two numbers as parameters, -- and must return a number as an output. This number is then supplied as input to the next function call. local vals = makeArgArray(...) local count = #vals -- The number of valid arguments if count == 0 then return -- Exit if we have no valid args, otherwise removing the first arg would cause an error. nil, 0 end local ret = table.remove(vals, 1) for _, val in ipairs(vals) do ret = func(ret, val) end return ret, count end --[[ Fold arguments by selectively choosing values (func should return when to choose the current "dominant" value). ]] local function binary_fold(func, ...) local value = fold((function(a, b) if func(a, b) then return a else return b end end), ...) return value end --[[ random Generate a random number Usage: {{#invoke: Math | random }} {{#invoke: Math | random | maximum value }} {{#invoke: Math | random | minimum value | maximum value }} ]] function wrap.random(args) local first = p._cleanNumber(args[1]) local second = p._cleanNumber(args[2]) return p._random(first, second) end function p._random(first, second) math.randomseed(mw.site.stats.edits + mw.site.stats.pages + os.time() + math.floor(os.clock() * 1000000000)) -- math.random will throw an error if given an explicit nil parameter, so we need to use if statements to check the params. if first and second then if first <= second then -- math.random doesn't allow the first number to be greater than the second. return math.random(first, second) end elseif first then return math.random(first) else return math.random() end end --[[ order Determine order of magnitude of a number Usage: {{#invoke: Math | order | value }} ]] function wrap.order(args) local input_string = (args[1] or args.x or '0'); local input_number = p._cleanNumber(input_string); if input_number == nil then return err('order of magnitude input appears non-numeric') else return p._order(input_number) end end function p._order(x) if x == 0 then return 0 end return math.floor(math.log10(math.abs(x))) end --[[ precision Detemines the precision of a number using the string representation Usage: {{ #invoke: Math | precision | value }} ]] function wrap.precision(args) local input_string = (args[1] or args.x or '0'); local trap_fraction = args.check_fraction; if not yesno then yesno = require('Module:Yesno') end if yesno(trap_fraction, true) then -- Returns true for all input except nil, false, "no", "n", "0" and a few others. See [[Module:Yesno]]. local pos = string.find(input_string, '/', 1, true); if pos ~= nil then if string.find(input_string, '/', pos + 1, true) == nil then local denominator = string.sub(input_string, pos+1, -1); local denom_value = tonumber(denominator); if denom_value ~= nil then return math.log10(denom_value); end end end end local _, clean_string = p._cleanNumber(input_string); if clean_string == nil then return err('precision input appears non-numeric') else return p._precision(clean_string) end end function p._precision(x) if type(x) == 'number' then x = tostring(x) end local result = 0; --subtract exponent local _, _, coefficient, exponent = x:find("^(.*)[eE](.*)$") if coefficient then result = result - (tonumber(exponent) or 0) x = coefficient end --add decimal places local i, j = x:find('%..*$') if i then result = result + (j - i) return result end --subtract trailing zeroes i, j = x:find('[^0]0+$') if i then result = result - (j - i) end return result end --[[ max Finds the maximum argument Usage: {{#invoke:Math| max | value1 | value2 | ... }} Note, any values that do not evaluate to numbers are ignored. ]] function wrap.max(args) return p._max(unpackNumberArgs(args)) end function p._max(...) local max_value = binary_fold((function(a, b) return a > b end), ...) if max_value then return max_value end end --[[ median Find the median of set of numbers Usage: {{#invoke:Math | median | number1 | number2 | ...}} OR {{#invoke:Math | median }} ]] function wrap.median(args) return p._median(unpackNumberArgs(args)) end function p._median(...) local vals = makeArgArray(...) local count = #vals table.sort(vals) if count == 0 then return 0 end if p._mod(count, 2) == 0 then return (vals[count/2] + vals[count/2+1])/2 else return vals[math.ceil(count/2)] end end --[[ min Finds the minimum argument Usage: {{#invoke:Math| min | value1 | value2 | ... }} OR {{#invoke:Math| min }} When used with no arguments, it takes its input from the parent frame. Note, any values that do not evaluate to numbers are ignored. ]] function wrap.min(args) return p._min(unpackNumberArgs(args)) end function p._min(...) local min_value = binary_fold((function(a, b) return a < b end), ...) if min_value then return min_value end end --[[ sum Finds the sum Usage: {{#invoke:Math| sum | value1 | value2 | ... }} OR {{#invoke:Math| sum }} Note, any values that do not evaluate to numbers are ignored. ]] function wrap.sum(args) return p._sum(unpackNumberArgs(args)) end function p._sum(...) local sums = fold((function(a, b) return a + b end), ...) if not sums then return 0 else return sums end end --[[ average Finds the average Usage: {{#invoke:Math| average | value1 | value2 | ... }} OR {{#invoke:Math| average }} Note, any values that do not evaluate to numbers are ignored. ]] function wrap.average(args) return p._average(unpackNumberArgs(args)) end function p._average(...) local sum, count = fold((function(a, b) return a + b end), ...) if not sum then return 0 else return sum / count end end --[[ round Rounds a number to specified precision Usage: {{#invoke:Math | round | value | precision }} --]] function wrap.round(args) local value = p._cleanNumber(args[1] or args.value or 0) local precision = p._cleanNumber(args[2] or args.precision or 0) if value == nil or precision == nil then return err('round input appears non-numeric') else return p._round(value, precision) end end function p._round(value, precision) local rescale = math.pow(10, precision or 0); return math.floor(value * rescale + 0.5) / rescale; end --[[ log10 returns the log (base 10) of a number Usage: {{#invoke:Math | log10 | x }} ]] function wrap.log10(args) return math.log10(args[1]) end --[[ mod Implements the modulo operator Usage: {{#invoke:Math | mod | x | y }} --]] function wrap.mod(args) local x = p._cleanNumber(args[1]) local y = p._cleanNumber(args[2]) if not x then return err('first argument to mod appears non-numeric') elseif not y then return err('second argument to mod appears non-numeric') else return p._mod(x, y) end end function p._mod(x, y) local ret = x % y if not (0 <= ret and ret < y) then ret = 0 end return ret end --[[ gcd Calculates the greatest common divisor of multiple numbers Usage: {{#invoke:Math | gcd | value 1 | value 2 | value 3 | ... }} --]] function wrap.gcd(args) return p._gcd(unpackNumberArgs(args)) end function p._gcd(...) local function findGcd(a, b) local r = b local oldr = a while r ~= 0 do local quotient = math.floor(oldr / r) oldr, r = r, oldr - quotient * r end if oldr < 0 then oldr = oldr * -1 end return oldr end local result = fold(findGcd, ...) return result end --[[ precision_format Rounds a number to the specified precision and formats according to rules originally used for {{template:Rnd}}. Output is a string. Usage: {{#invoke: Math | precision_format | number | precision }} ]] function wrap.precision_format(args) local value_string = args[1] or 0 local precision = args[2] or 0 return p._precision_format(value_string, precision) end function p._precision_format(value_string, precision) -- For access to Mediawiki built-in formatter. local lang = mw.getContentLanguage(); local value value, value_string = p._cleanNumber(value_string) precision = p._cleanNumber(precision) -- Check for non-numeric input if value == nil or precision == nil then return err('invalid input when rounding') end local abs_value = math.abs(value) local current_precision = p._precision(value) local order = p._order(value) -- Due to round-off effects it is neccesary to limit the returned precision under -- some circumstances because the terminal digits will be inaccurately reported. if order + precision >= 14 then if order + p._precision(value_string) >= 14 then precision = 13 - order; end end -- If rounding off, truncate extra digits if precision < current_precision then value = p._round(value, precision) abs_value = math.abs(value) current_precision = p._precision(value) end local formatted_num = lang:formatNum(abs_value) -- Handle cases requiring scientific notation if math.abs(order) >= 9 or string.find(formatted_num, 'E', 1, true) then value = value * (10 ^ (-order)) abs_value = math.abs(value) current_precision = current_precision + order precision = precision + order formatted_num = lang:formatNum(abs_value) else order = 0; end -- Use proper unary minus sign rather than ASCII default formatted_num = ((value < 0) and '−' or '') .. formatted_num -- Pad with zeros, if needed if current_precision < precision then local padding if current_precision <= 0 then if precision > 0 then local zero_sep = lang:formatNum(1.1) formatted_num = formatted_num .. zero_sep:sub(2,2) padding = precision if padding > 20 then padding = 20 end formatted_num = formatted_num .. string.rep('0', padding) end else padding = precision - current_precision if padding > 20 then padding = 20 end formatted_num = formatted_num .. string.rep('0', padding) end end -- Add exponential notation, if necessary. if order ~= 0 then -- Use proper unary minus sign rather than ASCII default if order < 0 then order = '−' .. lang:formatNum(math.abs(order)) else order = lang:formatNum(order) end formatted_num = formatted_num .. '<span style="margin:0 .15em 0 .25em">×</span>10<sup>' .. order .. '</sup>' end return formatted_num end --[[ divide Implements the division operator Usage: {{#invoke:Math | divide | x | y | round= | precision= }} --]] function wrap.divide(args) local x = args[1] local y = args[2] local round = args.round local precision = args.precision if not yesno then yesno = require('Module:Yesno') end return p._divide(x, y, yesno(round), precision) end function p._divide(x, y, round, precision) if y == nil or y == "" then return err("Empty divisor") elseif not tonumber(y) then if type(y) == 'string' and string.sub(y, 1, 1) == '<' then return y else return err("Not a number: " .. y) end elseif x == nil or x == "" then return err("Empty dividend") elseif not tonumber(x) then if type(x) == 'string' and string.sub(x, 1, 1) == '<' then return x else return err("Not a number: " .. x) end else local z = x / y if round then return p._round(z, 0) elseif precision then return p._round(z, precision) else return z end end end --[[ Helper function that interprets the input numerically. If the input does not appear to be a number, attempts evaluating it as a parser functions expression. ]] function p._cleanNumber(number_string, unformat) if type(number_string) == 'number' then -- We were passed a number, so we don't need to do any processing. return number_string, tostring(number_string) elseif type(number_string) ~= 'string' or not number_string:find('%S') then -- We were passed a non-string or a blank string, so exit. return nil, nil; end -- Attempt basic conversion local number = tonumber(number_string) -- If failed, try unformatting the number_string if unformat and number == nil then -- Cannot use mw.language.getContentLanguage():parseFormattedNumber() -- because, unlike {{formatnum:|R}}, it won't ignore operators (it -- would return an error on "1,234+1,234" instead of "1234+1234") number_string = mw.getCurrentFrame():callParserFunction("formatnum", {number_string, "R"}) number = tonumber(number_string) end -- If failed, attempt to evaluate input as an expression if number == nil then local success, result = pcall(mw.ext.ParserFunctions.expr, number_string) if success then number = tonumber(result) number_string = tostring(number) else number = nil number_string = nil end else number_string = number_string:match("^%s*(.-)%s*$") -- String is valid but may contain padding, clean it. number_string = number_string:match("^%+(.*)$") or number_string -- Trim any leading + signs. if number_string:find('^%-?0[xX]') then -- Number is using 0xnnn notation to indicate base 16; use the number that Lua detected instead. number_string = tostring(number) end end return number, number_string end --[[ Wrapper function that does basic argument processing. This ensures that all functions from #invoke can use either the current frame or the parent frame, and it also trims whitespace for all arguments and removes blank arguments. ]] local mt = { __index = function(_, k) return function(frame) if not getArgs then getArgs = require('Module:Arguments').getArgs end return wrap[k](getArgs(frame)) -- Argument processing is left to Module:Arguments. Whitespace is trimmed and blank arguments are removed. end end } return setmetatable(p, mt) f4r823qxvpkct3eikmvj99wyjq9cjkm Module:Message box 828 250 10677 2025-01-03T22:26:40Z commons>Matrix 0 add i18n 10677 Scribunto text/plain require('strict') local getArgs local yesno = require('Module:Yesno') local err = require('Module:Error') local TNT = require('Module:TNT') local lang = mw.language.getContentLanguage() local int_lang = mw.getCurrentFrame():preprocess('{{int:lang}}') local CONFIG_MODULE = 'Module:Message box/configuration' local DEMOSPACES = {talk = 'tmbox', image = 'mbox', file = 'mbox', category = 'mbox', article = 'mbox', main = 'mbox'} -------------------------------------------------------------------------------- -- Helper functions -------------------------------------------------------------------------------- local function errormsg(text) -- create warning text return err.error({tag="span", message=text}) end local function getTitleObject(...) -- Get the title object, passing the function through pcall -- in case we are over the expensive function count limit. local success, title = pcall(mw.title.new, ...) if success then return title end end local function getArgNums(args, prefix) local nums = {} for k, v in pairs(args) do local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$') if num then table.insert(nums, tonumber(num)) end end table.sort(nums) return nums end -------------------------------------------------------------------------------- -- Box class definition -------------------------------------------------------------------------------- local MessageBox = {} MessageBox.__index = MessageBox function MessageBox.new(boxType, args, cfg) args = args or {} local obj = {} -- Set the title object and the namespace. obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle() -- Set the config for our box type. obj.cfg = cfg[boxType] if not obj.cfg then local ns = obj.title.namespace -- boxType is "mbox" or invalid input if args.demospace and args.demospace ~= '' then -- implement demospace parameter of mbox local demospace = string.lower(args.demospace) if DEMOSPACES[demospace] then -- use template from DEMOSPACES obj.cfg = cfg[DEMOSPACES[demospace]] elseif string.find( demospace, 'talk' ) then -- demo as a talk page obj.cfg = cfg.tmbox else -- default to ambox obj.cfg = cfg.mbox end elseif ns == 0 then obj.cfg = cfg.mbox -- main namespace elseif ns == 6 then obj.cfg = cfg.mbox -- file namespace elseif ns == 14 then obj.cfg = cfg.mbox -- category namespace else local nsTable = mw.site.namespaces[ns] if nsTable and nsTable.isTalk then obj.cfg = cfg.tmbox -- any talk namespace else obj.cfg = cfg.mbox -- other namespaces or invalid input end end end -- Set the arguments, and remove all blank arguments except for the ones -- listed in cfg.allowBlankParams. do local newArgs = {} for k, v in pairs(args) do if v ~= '' then newArgs[k] = v end end for i, param in ipairs(obj.cfg.allowBlankParams or {}) do newArgs[param] = args[param] end obj.args = newArgs end -- Define internal data structure. obj.categories = {} obj.classes = {} -- For lazy loading of [[Module:Category handler]]. obj.hasCategories = false return setmetatable(obj, MessageBox) end function MessageBox:addCat(ns, cat, sort) if not cat then return nil end if sort then cat = string.format('[[Category:%s|%s]]', cat, sort) else cat = string.format('[[Category:%s]]', cat) end self.hasCategories = true self.categories[ns] = self.categories[ns] or {} table.insert(self.categories[ns], cat) end function MessageBox:addClass(class) if not class then return nil end table.insert(self.classes, class) end function MessageBox:setParameters() local args = self.args local cfg = self.cfg -- Get type data. self.type = args.type local typeData = cfg.types[self.type] self.invalidTypeError = cfg.showInvalidTypeError and self.type and not typeData typeData = typeData or cfg.types[cfg.default] self.typeClass = typeData.class self.typeImage = typeData.image self.typeImageNeedsLink = typeData.imageNeedsLink -- Find whether we are using a small message box. self.isSmall = cfg.allowSmall and ( cfg.smallParam and args.small == cfg.smallParam or not cfg.smallParam and yesno(args.small) ) -- Add attributes, classes and styles. self.id = args.id self.name = args.name if self.name then self:addClass('box-' .. string.gsub(self.name,' ','_')) end if yesno(args.plainlinks) ~= false then self:addClass('plainlinks') end for _, class in ipairs(cfg.classes or {}) do self:addClass(class) end if self.isSmall then self:addClass(cfg.smallClass or 'mbox-small') end self:addClass(self.typeClass) self:addClass(args.class) self.style = args.style self.attrs = args.attrs -- Set text style. self.textstyle = args.textstyle -- Set width self.width = args.width -- Set margin self.margin = args.margin -- Set the non-collapsible text field. At the moment this is used by all box -- types other than ambox, and also by ambox when small=yes. if self.isSmall then self.text = args.smalltext or args.text else self.text = args.text end -- Set the below row. self.below = cfg.below and args.below -- General image settings. self.imageCellDiv = not self.isSmall and cfg.imageCellDiv self.imageEmptyCell = cfg.imageEmptyCell -- Left image settings. local imageLeft = self.isSmall and args.smallimage or args.image if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none' or not cfg.imageCheckBlank and imageLeft ~= 'none' then self.imageLeft = imageLeft if not imageLeft then local imageSize = self.isSmall and (cfg.imageSmallSize or '30x30px') or '45x45px' self.imageLeft = string.format('[[File:%s|%s%s|alt=]]', self.typeImage or 'Information icon4.svg', imageSize, self.typeImageNeedsLink and "" or "|link=" ) end end -- Right image settings. local imageRight = self.isSmall and args.smallimageright or args.imageright if not (cfg.imageRightNone and imageRight == 'none') then self.imageRight = imageRight end -- set templatestyles self.base_templatestyles = cfg.templatestyles self.templatestyles = args.templatestyles end function MessageBox:setTemplateCategories() local args = self.args local cfg = self.cfg -- Add template categories. if cfg.templateCategory then if cfg.templateCategoryRequireName then if self.isTemplatePage then self:addCat(10, cfg.templateCategory) end elseif not self.title.isSubpage then self:addCat(10, cfg.templateCategory) end end end function MessageBox:setAllNamespaceCategories() local cfg = self.cfg -- Set categories for all namespaces. if self.invalidTypeError then local allSort = (self.title.namespace == 0 and 'Main:' or '') .. self.title.prefixedText self:addCat('all', 'Message box parameter needs fixing', allSort) end -- Deprecate license type if self.type == 'license' and cfg.deprecateLicense then self:addCat('all', 'Licensing templates based on Mbox') end end function MessageBox:setCategories() if self.title.namespace == 10 then self:setTemplateCategories() end self:setAllNamespaceCategories() end function MessageBox:renderCategories() if not self.hasCategories then -- No categories added, no need to pass them to Category handler so, -- if it was invoked, it would return the empty string. -- So we shortcut and return the empty string. return "" end -- Convert category tables to strings and pass them through -- [[Module:Category handler]]. return require('Module:Category handler')._main{ main = table.concat(self.categories[0] or {}), template = table.concat(self.categories[10] or {}), all = table.concat(self.categories.all or {}), nocat = self.args.nocat, page = self.args.page } end function MessageBox:export() local root = mw.html.create() local frame = mw.getCurrentFrame() root:wikitext(frame:extensionTag{ name = 'templatestyles', args = { src = self.base_templatestyles }, }) -- Add support for a single custom templatestyles sheet. Undocumented as -- need should be limited and many templates using mbox are substed; we -- don't want to spread templatestyles sheets around to arbitrary places if self.templatestyles then root:wikitext(frame:extensionTag{ name = 'templatestyles', args = { src = self.templatestyles }, }) end -- Create the box table. local boxTable = root:tag('table') boxTable:attr('id', self.id or nil) for i, class in ipairs(self.classes or {}) do boxTable:addClass(class or nil) end boxTable :cssText(self.style or nil) :attr('role', 'presentation') if self.width then boxTable:cssText('width: ' .. self.width) end if self.margin then boxTable:cssText('margin: 2px ' .. self.margin) end if self.attrs then boxTable:attr(self.attrs) end -- Add the left-hand image. local row = boxTable:tag('tr') if self.imageLeft then local imageLeftCell = row:tag('td'):addClass('mbox-image') if self.imageCellDiv then -- If we are using a div, redefine imageLeftCell so that the image -- is inside it. Divs use style="width: 52px;", which limits the -- image width to 52px. If any images in a div are wider than that, -- they may overlap with the text or cause other display problems. imageLeftCell = imageLeftCell:tag('div'):addClass('mbox-image-div') end imageLeftCell:wikitext(self.imageLeft or nil) elseif self.imageEmptyCell then -- Some message boxes define an empty cell if no image is specified, and -- some don't. The old template code in templates where empty cells are -- specified gives the following hint: "No image. Cell with some width -- or padding necessary for text cell to have 100% width." row:tag('td') :addClass('mbox-empty-cell') end -- Add the text. local textCell = row:tag('td'):addClass('mbox-text') if self.useCollapsibleTextFields then -- The message box uses advanced text parameters that allow things to be -- collapsible. At the moment, only ambox uses this. textCell:cssText(self.textstyle or nil) local textCellDiv = textCell:tag('div') textCellDiv :addClass('mbox-text-span') :wikitext(self.issue or nil) if (self.talk or self.fix) then textCellDiv:tag('span') :addClass('hide-when-compact') :wikitext(self.talk and (' ' .. self.talk) or nil) :wikitext(self.fix and (' ' .. self.fix) or nil) end textCellDiv:wikitext(self.date and (' ' .. self.date) or nil) if self.info and not self.isSmall then textCellDiv :tag('span') :addClass('hide-when-compact') :wikitext(self.info and (' ' .. self.info) or nil) end if self.removalNotice then textCellDiv:tag('span') :addClass('hide-when-compact') :tag('i') :wikitext(string.format(" (%s)", self.removalNotice)) end else -- Default text formatting - anything goes. textCell :cssText(self.textstyle or nil) :wikitext(self.text or nil) end -- Add the right-hand image. if self.imageRight then local imageRightCell = row:tag('td'):addClass('mbox-imageright') if self.imageCellDiv then -- If we are using a div, redefine imageRightCell so that the image -- is inside it. imageRightCell = imageRightCell:tag('div'):addClass('mbox-image-div') end imageRightCell :wikitext(self.imageRight or nil) end -- Add the below row. if self.below then boxTable:tag('tr') :tag('td') :attr('colspan', self.imageRight and '3' or '2') :addClass('mbox-text') :cssText(self.textstyle or nil) :wikitext(self.below or nil) end -- Add error message for invalid type parameters. if self.invalidTypeError then root:tag('div') :addClass('mbox-invalid-type') :wikitext(errormsg(TNT.formatInLanguage(int_lang, 'I18n/Message box', 'err-type', self.type or ''))) end -- Add categories. root:wikitext(self:renderCategories() or nil) return tostring(root) end -------------------------------------------------------------------------------- -- Exports -------------------------------------------------------------------------------- local p, mt = {}, {} function p._exportClasses() -- For testing. return { MessageBox = MessageBox } end function p.main(boxType, args, cfgTables) local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE)) box:setParameters() box:setCategories() return box:export() end function mt.__index(t, k) return function (frame) if not getArgs then getArgs = require('Module:Arguments').getArgs end return t.main(k, getArgs(frame, {trim = false, removeBlanks = false})) end end return setmetatable(p, mt) c30e5jp4c5gz5h8tktwgw1wb2jywejl 10678 8913 2026-08-25T23:38:28Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Message_box]] 1093 Scribunto text/plain require('strict') local getArgs local yesno = require('Module:Yesno') local lang = mw.language.getContentLanguage() local CONFIG_MODULE = 'Module:Message box/configuration' local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'} -------------------------------------------------------------------------------- -- Helper functions -------------------------------------------------------------------------------- local function getTitleObject(...) -- Get the title object, passing the function through pcall -- in case we are over the expensive function count limit. local success, title = pcall(mw.title.new, ...) if success then return title end end local function union(t1, t2) -- Returns the union of two arrays. local vals = {} for i, v in ipairs(t1) do vals[v] = true end for i, v in ipairs(t2) do vals[v] = true end local ret = {} for k in pairs(vals) do table.insert(ret, k) end table.sort(ret) return ret end local function getArgNums(args, prefix) local nums = {} for k, v in pairs(args) do local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$') if num then table.insert(nums, tonumber(num)) end end table.sort(nums) return nums end -------------------------------------------------------------------------------- -- Box class definition -------------------------------------------------------------------------------- local MessageBox = {} MessageBox.__index = MessageBox function MessageBox.new(boxType, args, cfg) args = args or {} local obj = {} -- Set the title object and the namespace. obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle() -- Set the config for our box type. obj.cfg = cfg[boxType] if not obj.cfg then local ns = obj.title.namespace -- boxType is "mbox" or invalid input if args.demospace and args.demospace ~= '' then -- implement demospace parameter of mbox local demospace = string.lower(args.demospace) if DEMOSPACES[demospace] then -- use template from DEMOSPACES obj.cfg = cfg[DEMOSPACES[demospace]] elseif string.find( demospace, 'talk' ) then -- demo as a talk page obj.cfg = cfg.tmbox else -- default to ombox obj.cfg = cfg.ombox end elseif ns == 0 then obj.cfg = cfg.ambox -- main namespace elseif ns == 6 then obj.cfg = cfg.imbox -- file namespace elseif ns == 14 then obj.cfg = cfg.cmbox -- category namespace else local nsTable = mw.site.namespaces[ns] if nsTable and nsTable.isTalk then obj.cfg = cfg.tmbox -- any talk namespace else obj.cfg = cfg.ombox -- other namespaces or invalid input end end end -- Set the arguments, and remove all blank arguments except for the ones -- listed in cfg.allowBlankParams. do local newArgs = {} for k, v in pairs(args) do if v ~= '' then newArgs[k] = v end end for i, param in ipairs(obj.cfg.allowBlankParams or {}) do newArgs[param] = args[param] end obj.args = newArgs end -- Define internal data structure. obj.categories = {} obj.classes = {} -- For lazy loading of [[Module:Category handler]]. obj.hasCategories = false return setmetatable(obj, MessageBox) end function MessageBox:addCat(ns, cat, sort) if not cat then return nil end if sort then cat = string.format('[[Panni:%s|%s]]', cat, sort) else cat = string.format('[[Panni:%s]]', cat) end self.hasCategories = true self.categories[ns] = self.categories[ns] or {} table.insert(self.categories[ns], cat) end function MessageBox:addClass(class) if not class then return nil end table.insert(self.classes, class) end function MessageBox:setParameters() local args = self.args local cfg = self.cfg -- Get type data. self.type = args.type local typeData = cfg.types[self.type] self.invalidTypeError = cfg.showInvalidTypeError and self.type and not typeData typeData = typeData or cfg.types[cfg.default] self.typeClass = typeData.class self.typeImage = typeData.image self.typeImageNeedsLink = typeData.imageNeedsLink -- Find if the box has been wrongly substituted. self.isSubstituted = cfg.substCheck and args.subst == 'SUBST' -- Find whether we are using a small message box. self.isSmall = cfg.allowSmall and ( cfg.smallParam and args.small == cfg.smallParam or not cfg.smallParam and yesno(args.small) ) -- Set the below row. self.below = cfg.below and args.below -- Add attributes, classes and styles. self.id = args.id self.name = args.name if self.name then self:addClass('box-' .. string.gsub(self.name,' ','_')) end if yesno(args.plainlinks) ~= false then self:addClass('plainlinks') end if self.below then self:addClass('mbox-with-below') end for _, class in ipairs(cfg.classes or {}) do self:addClass(class) end if self.isSmall then self:addClass(cfg.smallClass or 'mbox-small') end self:addClass(self.typeClass) self:addClass(args.class) self.style = args.style self.attrs = args.attrs -- Set text style. self.textstyle = args.textstyle -- Set image classes. self.imageRightClass = args.imagerightclass or args.imageclass self.imageLeftClass = args.imageleftclass or args.imageclass -- Find if we are on the template page or not. This functionality is only -- used if useCollapsibleTextFields is set, or if both cfg.templateCategory -- and cfg.templateCategoryRequireName are set. self.useCollapsibleTextFields = cfg.useCollapsibleTextFields if self.useCollapsibleTextFields or cfg.templateCategory and cfg.templateCategoryRequireName then if self.name then local templateName = mw.ustring.match( self.name, '^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$' ) or self.name templateName = 'Template:' .. templateName self.templateTitle = getTitleObject(templateName) end self.isTemplatePage = self.templateTitle and mw.title.equals(self.title, self.templateTitle) end -- Process data for collapsible text fields. At the moment these are only -- used in {{ambox}}. if self.useCollapsibleTextFields then -- Get the self.issue value. if self.isSmall and args.smalltext then self.issue = args.smalltext else local sect if args.sect == '' then sect = 'This ' .. (cfg.sectionDefault or 'page') elseif type(args.sect) == 'string' then sect = 'This ' .. args.sect end local issue = args.issue issue = type(issue) == 'string' and issue ~= '' and issue or nil local text = args.text text = type(text) == 'string' and text or nil local issues = {} table.insert(issues, sect) table.insert(issues, issue) table.insert(issues, text) self.issue = table.concat(issues, ' ') end -- Get the self.talk value. local talk = args.talk -- Show talk links on the template page or template subpages if the talk -- parameter is blank. if talk == '' and self.templateTitle and ( mw.title.equals(self.templateTitle, self.title) or self.title:isSubpageOf(self.templateTitle) ) then talk = '#' elseif talk == '' then talk = nil end if talk then -- If the talk value is a talk page, make a link to that page. Else -- assume that it's a section heading, and make a link to the talk -- page of the current page with that section heading. local talkTitle = getTitleObject(talk) local talkArgIsTalkPage = true if not talkTitle or not talkTitle.isTalkPage then talkArgIsTalkPage = false talkTitle = getTitleObject( self.title.text, mw.site.namespaces[self.title.namespace].talk.id ) end if talkTitle and talkTitle.exists then local talkText if self.isSmall then local talkLink = talkArgIsTalkPage and talk or (talkTitle.prefixedText .. (talk == '#' and '' or '#') .. talk) talkText = string.format('([[%s|talk]])', talkLink) else talkText = 'Relevant discussion may be found on' if talkArgIsTalkPage then talkText = string.format( '%s [[%s|%s]].', talkText, talk, talkTitle.prefixedText ) else talkText = string.format( '%s the [[%s' .. (talk == '#' and '' or '#') .. '%s|talk page]].', talkText, talkTitle.prefixedText, talk ) end end self.talk = talkText end end -- Get other values. self.fix = args.fix ~= '' and args.fix or nil local date if args.date and args.date ~= '' then date = args.date elseif args.date == '' and self.isTemplatePage then date = lang:formatDate('F Y') end if date then self.date = string.format(" <span class='date-container'><i>(<span class='date'>%s</span>)</i></span>", date) end self.info = args.info if yesno(args.removalnotice) then self.removalNotice = cfg.removalNotice end end -- Set the non-collapsible text field. At the moment this is used by all box -- types other than ambox, and also by ambox when small=yes. if self.isSmall then self.text = args.smalltext or args.text else self.text = args.text end -- General image settings. self.imageCellDiv = not self.isSmall and cfg.imageCellDiv self.imageEmptyCell = cfg.imageEmptyCell -- Left image settings. local imageLeft = self.isSmall and args.smallimage or args.image if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none' or not cfg.imageCheckBlank and imageLeft ~= 'none' then self.imageLeft = imageLeft if not imageLeft then local imageSize = self.isSmall and (cfg.imageSmallSize or '30x30px') or '40x40px' self.imageLeft = string.format('[[Fayil:%s|%s%s|alt=]]', self.typeImage or 'Information icon4.svg', imageSize, self.typeImageNeedsLink and "" or "|link=" ) end end -- Right image settings. local imageRight = self.isSmall and args.smallimageright or args.imageright if not (cfg.imageRightNone and imageRight == 'none') then self.imageRight = imageRight end -- set templatestyles self.base_templatestyles = cfg.templatestyles self.templatestyles = args.templatestyles end function MessageBox:setMainspaceCategories() local args = self.args local cfg = self.cfg if not cfg.allowMainspaceCategories then return nil end local nums = {} for _, prefix in ipairs{'cat', 'category', 'all'} do args[prefix .. '1'] = args[prefix] nums = union(nums, getArgNums(args, prefix)) end -- The following is roughly equivalent to the old {{Ambox/category}}. local date = args.date date = type(date) == 'string' and date local preposition = 'from' for _, num in ipairs(nums) do local mainCat = args['cat' .. tostring(num)] or args['category' .. tostring(num)] local allCat = args['all' .. tostring(num)] mainCat = type(mainCat) == 'string' and mainCat allCat = type(allCat) == 'string' and allCat if mainCat and date and date ~= '' then local catTitle = string.format('%s %s %s', mainCat, preposition, date) self:addCat(0, catTitle) catTitle = getTitleObject('Category:' .. catTitle) if not catTitle or not catTitle.exists then self:addCat(0, 'Articles with invalid date parameter in template') end elseif mainCat and (not date or date == '') then self:addCat(0, mainCat) end if allCat then self:addCat(0, allCat) end end end function MessageBox:setTemplateCategories() local args = self.args local cfg = self.cfg -- Add template categories. if cfg.templateCategory then if cfg.templateCategoryRequireName then if self.isTemplatePage then self:addCat(10, cfg.templateCategory) end elseif not self.title.isSubpage then self:addCat(10, cfg.templateCategory) end end -- Add template error categories. if cfg.templateErrorCategory then local templateErrorCategory = cfg.templateErrorCategory local templateCat, templateSort if not self.name and not self.title.isSubpage then templateCat = templateErrorCategory elseif self.isTemplatePage then local paramsToCheck = cfg.templateErrorParamsToCheck or {} local count = 0 for i, param in ipairs(paramsToCheck) do if not args[param] then count = count + 1 end end if count > 0 then templateCat = templateErrorCategory templateSort = tostring(count) end if self.categoryNums and #self.categoryNums > 0 then templateCat = templateErrorCategory templateSort = 'C' end end self:addCat(10, templateCat, templateSort) end end function MessageBox:setAllNamespaceCategories() -- Set categories for all namespaces. if self.invalidTypeError then local allSort = (self.title.namespace == 0 and 'Main:' or '') .. self.title.prefixedText self:addCat('all', 'Wikipedia message box parameter needs fixing', allSort) end if self.isSubstituted then self:addCat('all', 'Pages with incorrectly substituted templates') end end function MessageBox:setCategories() if self.title.namespace == 0 then self:setMainspaceCategories() elseif self.title.namespace == 10 then self:setTemplateCategories() end self:setAllNamespaceCategories() end function MessageBox:renderCategories() if not self.hasCategories then -- No categories added, no need to pass them to Category handler so, -- if it was invoked, it would return the empty string. -- So we shortcut and return the empty string. return "" end -- Convert category tables to strings and pass them through -- [[Module:Category handler]]. return require('Module:Category handler')._main{ main = table.concat(self.categories[0] or {}), template = table.concat(self.categories[10] or {}), all = table.concat(self.categories.all or {}), nocat = self.args.nocat, page = self.args.page } end function MessageBox:exportDiv() local root = mw.html.create() -- Add the subst check error. if self.isSubstituted and self.name then root:tag('b') :addClass('error') :wikitext(string.format( 'Template <code>%s[[Tempilet:%s|%s]]%s</code> has been incorrectly substituted.', mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}') )) end local frame = mw.getCurrentFrame() root:wikitext(frame:extensionTag{ name = 'templatestyles', args = { src = self.base_templatestyles }, }) -- Add support for a single custom templatestyles sheet. Undocumented as -- need should be limited and many templates using mbox are substed; we -- don't want to spread templatestyles sheets around to arbitrary places if self.templatestyles then root:wikitext(frame:extensionTag{ name = 'templatestyles', args = { src = self.templatestyles }, }) end -- Create the box. local mbox = root:tag('div') mbox:attr('id', self.id or nil) for i, class in ipairs(self.classes or {}) do mbox:addClass(class or nil) end mbox :cssText(self.style or nil) if self.attrs then mbox:attr(self.attrs) end local flex_container if self.below then -- we need to wrap the flex components (`image(right)` and `text`) in their -- own container div to support the `below` parameter flex_container = mw.html.create('div') flex_container:addClass('mbox-flex') else -- the mbox itself is the parent, so we need no HTML flex_container flex_container = mw.html.create() end -- Add the left-hand image. if self.imageLeft then local imageLeftCell = flex_container:tag('div'):addClass('mbox-image') imageLeftCell :addClass(self.imageLeftClass) :wikitext(self.imageLeft or nil) end -- Add the text. local textCell = flex_container:tag('div'):addClass('mbox-text') if self.useCollapsibleTextFields then -- The message box uses advanced text parameters that allow things to be -- collapsible. At the moment, only ambox uses this. textCell:cssText(self.textstyle or nil) local textCellDiv = textCell:tag('div') textCellDiv :addClass('mbox-text-span') :wikitext(self.issue or nil) if (self.talk or self.fix) then textCellDiv:tag('span') :addClass('hide-when-compact') :wikitext(self.talk and (' ' .. self.talk) or nil) :wikitext(self.fix and (' ' .. self.fix) or nil) end textCellDiv:wikitext(self.date and (' ' .. self.date) or nil) if self.info and not self.isSmall then textCellDiv :tag('span') :addClass('hide-when-compact') :wikitext(self.info and (' ' .. self.info) or nil) end if self.removalNotice then textCellDiv:tag('span') :addClass('hide-when-compact') :tag('i') :wikitext(string.format(" (%s)", self.removalNotice)) end else -- Default text formatting - anything goes. textCell :cssText(self.textstyle or nil) :wikitext(self.text or nil) end -- Add the right-hand image. if self.imageRight then local imageRightCell = flex_container:tag('div'):addClass('mbox-imageright') imageRightCell :addClass(self.imageRightClass) :wikitext(self.imageRight or nil) end mbox:node(flex_container) -- Add the below row. if self.below then mbox:tag('div') :addClass('mbox-text mbox-below') :cssText(self.textstyle or nil) :wikitext(self.below or nil) end -- Add error message for invalid type parameters. if self.invalidTypeError then root:tag('div') :addClass('mbox-invalid-type') :wikitext(string.format( 'This message box is using an invalid "type=%s" parameter and needs fixing.', self.type or '' )) end -- Add categories. root:wikitext(self:renderCategories() or nil) return tostring(root) end function MessageBox:export() local root = mw.html.create() -- Add the subst check error. if self.isSubstituted and self.name then root:tag('b') :addClass('error') :wikitext(string.format( 'Template <code>%s[[Tempilet:%s|%s]]%s</code> has been incorrectly substituted.', mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}') )) end local frame = mw.getCurrentFrame() root:wikitext(frame:extensionTag{ name = 'templatestyles', args = { src = self.base_templatestyles }, }) -- Add support for a single custom templatestyles sheet. Undocumented as -- need should be limited and many templates using mbox are substed; we -- don't want to spread templatestyles sheets around to arbitrary places if self.templatestyles then root:wikitext(frame:extensionTag{ name = 'templatestyles', args = { src = self.templatestyles }, }) end -- Create the box table. local boxTable = root:tag('table') boxTable:attr('id', self.id or nil) for i, class in ipairs(self.classes or {}) do boxTable:addClass(class or nil) end boxTable :cssText(self.style or nil) :attr('role', 'presentation') if self.attrs then boxTable:attr(self.attrs) end -- Add the left-hand image. local row = boxTable:tag('tr') if self.imageLeft then local imageLeftCell = row:tag('td'):addClass('mbox-image') if self.imageCellDiv then -- If we are using a div, redefine imageLeftCell so that the image -- is inside it. Divs use style="width: 52px;", which limits the -- image width to 52px. If any images in a div are wider than that, -- they may overlap with the text or cause other display problems. imageLeftCell = imageLeftCell:tag('div'):addClass('mbox-image-div') end imageLeftCell :addClass(self.imageLeftClass) :wikitext(self.imageLeft or nil) elseif self.imageEmptyCell then -- Some message boxes define an empty cell if no image is specified, and -- some don't. The old template code in templates where empty cells are -- specified gives the following hint: "No image. Cell with some width -- or padding necessary for text cell to have 100% width." row:tag('td') :addClass('mbox-empty-cell') end -- Add the text. local textCell = row:tag('td'):addClass('mbox-text') if self.useCollapsibleTextFields then -- The message box uses advanced text parameters that allow things to be -- collapsible. At the moment, only ambox uses this. textCell:cssText(self.textstyle or nil) local textCellDiv = textCell:tag('div') textCellDiv :addClass('mbox-text-span') :wikitext(self.issue or nil) if (self.talk or self.fix) then textCellDiv:tag('span') :addClass('hide-when-compact') :wikitext(self.talk and (' ' .. self.talk) or nil) :wikitext(self.fix and (' ' .. self.fix) or nil) end textCellDiv:wikitext(self.date and (' ' .. self.date) or nil) if self.info and not self.isSmall then textCellDiv :tag('span') :addClass('hide-when-compact') :wikitext(self.info and (' ' .. self.info) or nil) end if self.removalNotice then textCellDiv:tag('span') :addClass('hide-when-compact') :tag('i') :wikitext(string.format(" (%s)", self.removalNotice)) end else -- Default text formatting - anything goes. textCell :cssText(self.textstyle or nil) :wikitext(self.text or nil) end -- Add the right-hand image. if self.imageRight then local imageRightCell = row:tag('td'):addClass('mbox-imageright') if self.imageCellDiv then -- If we are using a div, redefine imageRightCell so that the image -- is inside it. imageRightCell = imageRightCell:tag('div'):addClass('mbox-image-div') end imageRightCell :addClass(self.imageRightClass) :wikitext(self.imageRight or nil) end -- Add the below row. if self.below then boxTable:tag('tr') :tag('td') :attr('colspan', self.imageRight and '3' or '2') :addClass('mbox-text') :cssText(self.textstyle or nil) :wikitext(self.below or nil) end -- Add error message for invalid type parameters. if self.invalidTypeError then root:tag('div') :addClass('mbox-invalid-type') :wikitext(string.format( 'This message box is using an invalid "type=%s" parameter and needs fixing.', self.type or '' )) end -- Add categories. root:wikitext(self:renderCategories() or nil) return tostring(root) end -------------------------------------------------------------------------------- -- Exports -------------------------------------------------------------------------------- local p, mt = {}, {} function p._exportClasses() -- For testing. return { MessageBox = MessageBox } end function p.main(boxType, args, cfgTables) local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE)) box:setParameters() box:setCategories() -- DIV MIGRATION CONDITIONAL if box.cfg.div_structure then return box:exportDiv() end -- END DIV MIGRATION CONDITIONAL return box:export() end function mt.__index(t, k) return function (frame) if not getArgs then getArgs = require('Module:Arguments').getArgs end return t.main(k, getArgs(frame, {trim = false, removeBlanks = false})) end end return setmetatable(p, mt) hivyujkkjf6nleigwpcxi5k21iafwpo Module:Message box/configuration 828 253 10683 2024-12-18T20:50:14Z commons>Matrix 0 Protected "[[Module:Message box/configuration]]": high risk ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite)) 10683 Scribunto text/plain -------------------------------------------------------------------------------- -- Message box configuration -- -- -- -- This module contains configuration data for [[Module:Message box]]. -- -------------------------------------------------------------------------------- return { fmbox = { types = { warning = { class = 'fmbox-warning', image = 'Ambox warning pn.svg' }, editnotice = { class = 'fmbox-editnotice', image = 'Information icon4.svg' }, system = { class = 'fmbox-system', image = 'Information icon4.svg' } }, default = 'system', showInvalidTypeError = true, classes = {'fmbox'}, imageEmptyCell = false, imageRightNone = false, templatestyles = 'Module:Message box/fmbox.css' }, mbox = { types = { warning = { class = 'mbox-warning', image = 'Commons-emblem-late.svg' }, speedy = { class = 'mbox-speedy', image = 'Commons-emblem-urgent.svg' }, serious = { class = 'mbox-serious', image = 'Gnome-emblem-important.svg' }, delete = { class = 'mbox-delete', image = 'Gnome-emblem-important.svg' }, stop = { class = 'mbox-stop', image = 'Commons-emblem-hand.svg' }, content = { class = 'mbox-content', image = 'Commons-emblem-issue.svg' }, query = { class = 'mbox-query', image = 'Commons-emblem-query.svg' }, issue = { class = 'mbox-issue', image = 'Commons-emblem-issue.svg' }, style = { class = 'mbox-style', image = 'Gnome-edit-clear.svg' }, move = { class = 'mbox-move', image = 'Merge-split-transwiki default.svg' }, protection = { class = 'mbox-protection', image = 'Gnome-security-medium.svg' }, license = { class = 'mbox-license licensetpl', image = 'Commons-emblem-copyright.svg' }, legal = { class = 'mbox-legal', image = 'Commons-emblem-legal.svg' }, honor = { class = 'mbox-honor', image = 'Gnome-help-about.svg' }, growth = { class = 'mbox-growth', image = 'Dialog-apply.svg' }, shit = { class = 'mbox-shit', image = 'OpenMoji-color 1F4A9.svg' }, message = { class = 'mbox-message', image = 'Tango-style info icon.svg' }, notice = { class = 'mbox-notice', image = 'Commons-emblem-notice.svg' } }, default = 'notice', showInvalidTypeError = true, classes = {'messagebox'}, allowSmall = true, imageEmptyCell = true, below = true, deprecateLicense = true, templateCategory = 'Main message boxes', templatestyles = 'Module:Message box/mbox.css' }, tmbox = { types = { speedy = { class = 'tmbox-speedy', image = 'Ambox warning pn.svg' }, delete = { class = 'tmbox-delete', image = 'Ambox warning pn.svg' }, content = { class = 'tmbox-content', image = 'Ambox important.svg' }, style = { class = 'tmbox-style', image = 'Edit-clear.svg' }, move = { class = 'tmbox-move', image = 'Merge-split-transwiki default.svg' }, protection = { class = 'tmbox-protection', image = 'Semi-protection-shackle-keyhole.svg' }, notice = { class = 'tmbox-notice', image = 'Information icon4.svg' } }, default = 'notice', showInvalidTypeError = true, classes = {'tmbox'}, allowSmall = true, imageRightNone = true, imageEmptyCell = true, templateCategory = 'Talk message boxes', templatestyles = 'Module:Message box/tmbox.css' } } lr8hqsk3g1jt4lgc5h1hkuzw90vddob 10684 8915 2026-08-25T23:38:28Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Message_box/configuration]] 1101 Scribunto text/plain -------------------------------------------------------------------------------- -- Message box configuration -- -- -- -- This module contains configuration data for [[Module:Message box]]. -- -------------------------------------------------------------------------------- return { ambox = { types = { speedy = { class = 'ambox-speedy', image = 'Ambox warning pn.svg' }, delete = { class = 'ambox-delete', image = 'Ambox warning pn.svg' }, content = { class = 'ambox-content', image = 'Ambox important.svg' }, style = { class = 'ambox-style', image = 'Edit-clear.svg' }, move = { class = 'ambox-move', image = 'Merge-split-transwiki default.svg' }, protection = { class = 'ambox-protection', image = 'Semi-protection-shackle-keyhole.svg' }, notice = { class = 'ambox-notice', image = 'Information icon4.svg' } }, default = 'notice', allowBlankParams = {'talk', 'sect', 'date', 'issue', 'fix', 'subst', 'hidden'}, allowSmall = true, smallParam = 'left', smallClass = 'mbox-small-left', substCheck = true, classes = {'metadata', 'ambox'}, imageEmptyCell = true, imageCheckBlank = true, imageSmallSize = '20x20px', imageCellDiv = true, useCollapsibleTextFields = true, imageRightNone = true, sectionDefault = 'article', allowMainspaceCategories = true, templateCategory = 'Article message templates', templateCategoryRequireName = true, templateErrorCategory = 'Article message templates with missing parameters', templateErrorParamsToCheck = {'issue', 'fix', 'subst'}, removalNotice = '<small>[[Taimako:Maintenance template removal|Learn how and when to remove this message]]</small>', templatestyles = 'Module:Message box/ambox.css' }, cmbox = { types = { speedy = { class = 'cmbox-speedy', image = 'Ambox warning pn.svg' }, delete = { class = 'cmbox-delete', image = 'Ambox warning pn.svg' }, content = { class = 'cmbox-content', image = 'Ambox important.svg' }, style = { class = 'cmbox-style', image = 'Edit-clear.svg' }, move = { class = 'cmbox-move', image = 'Merge-split-transwiki default.svg' }, protection = { class = 'cmbox-protection', image = 'Semi-protection-shackle-keyhole.svg' }, notice = { class = 'cmbox-notice', image = 'Information icon4.svg' } }, default = 'notice', showInvalidTypeError = true, classes = {'cmbox'}, imageEmptyCell = true, templatestyles = 'Module:Message box/cmbox.css', div_structure = true, }, fmbox = { types = { warning = { class = 'fmbox-warning', image = 'Ambox warning pn.svg' }, editnotice = { class = 'fmbox-editnotice', image = 'Information icon4.svg' }, system = { class = 'fmbox-system', image = 'Information icon4.svg' } }, default = 'system', showInvalidTypeError = true, classes = {'fmbox'}, imageEmptyCell = false, imageRightNone = false, templatestyles = 'Module:Message box/fmbox.css', div_structure = true, }, imbox = { types = { speedy = { class = 'imbox-speedy', image = 'Ambox warning pn.svg' }, delete = { class = 'imbox-delete', image = 'Ambox warning pn.svg' }, content = { class = 'imbox-content', image = 'Ambox important.svg' }, style = { class = 'imbox-style', image = 'Edit-clear.svg' }, move = { class = 'imbox-move', image = 'Merge-split-transwiki default.svg' }, protection = { class = 'imbox-protection', image = 'Semi-protection-shackle-keyhole.svg' }, license = { class = 'imbox-license licensetpl', image = 'Imbox-license.svg' }, ["license-related"] = { class = 'imbox-license', image = 'Imbox-license.svg' }, featured = { class = 'imbox-featured', image = 'Cscr-featured.svg', imageNeedsLink = true }, notice = { class = 'imbox-notice', image = 'Information icon4.svg' } }, default = 'notice', showInvalidTypeError = true, classes = {'imbox'}, imageEmptyCell = true, below = true, templateCategory = 'File message boxes', templatestyles = 'Module:Message box/imbox.css', div_structure = true, }, ombox = { types = { speedy = { class = 'ombox-speedy', image = 'Ambox warning pn.svg' }, delete = { class = 'ombox-delete', image = 'Ambox warning pn.svg' }, content = { class = 'ombox-content', image = 'Ambox important.svg' }, style = { class = 'ombox-style', image = 'Edit-clear.svg' }, move = { class = 'ombox-move', image = 'Merge-split-transwiki default.svg' }, protection = { class = 'ombox-protection', image = 'Semi-protection-shackle-keyhole.svg' }, notice = { class = 'ombox-notice', image = 'Information icon4.svg' } }, default = 'notice', showInvalidTypeError = true, classes = {'ombox'}, allowSmall = true, imageEmptyCell = true, imageRightNone = true, templatestyles = 'Module:Message box/ombox.css' }, tmbox = { types = { speedy = { class = 'tmbox-speedy', image = 'Ambox warning pn.svg' }, delete = { class = 'tmbox-delete', image = 'Ambox warning pn.svg' }, content = { class = 'tmbox-content', image = 'Ambox important.svg' }, style = { class = 'tmbox-style', image = 'Edit-clear.svg' }, move = { class = 'tmbox-move', image = 'Merge-split-transwiki default.svg' }, protection = { class = 'tmbox-protection', image = 'Semi-protection-shackle-keyhole.svg' }, notice = { class = 'tmbox-notice', image = 'Information icon4.svg' } }, default = 'notice', showInvalidTypeError = true, classes = {'tmbox'}, allowSmall = true, imageRightNone = true, imageEmptyCell = true, templateCategory = 'Talk message boxes', templatestyles = 'Module:Message box/tmbox.css' } } eo6o3evlig2w1beccdsk1nqp5gyflqn Module:Message box/fmbox.css 828 255 11021 2025-10-17T00:59:48Z en>Izno 0 bump paddings per [[Module talk:Message box#cmbox migration]] 11021 sanitized-css text/css /* {{pp|small=y}} */ .fmbox { clear: both; /* this sheet does not require overflow-x because of this clear */ margin: 0.2em 0; border: 1px solid #a2a9b1; background-color: var(--background-color-interactive-subtle, #f8f9fa); box-sizing: border-box; color: var(--color-base, #202122); } .fmbox-warning { border: 1px solid #bb7070; /* Dark pink */ background-color: #ffdbdb; /* Pink */ } .fmbox-editnotice { background-color: transparent; } .fmbox .mbox-text { padding: 0.35em 1em; flex: 1 1 100%; } .fmbox .mbox-image, .fmbox .mbox-imageright { padding: 4px 2px; text-align: center; flex: none; } /* keep synced with each other type of message box as this isn't qualified */ .mbox-invalid-type { text-align: center; } @media (min-width: 480px) { .fmbox { display: flex; align-items: center; } .fmbox .mbox-image { /* @noflip */ padding-left: 1em; } .fmbox .mbox-imageright { /* @noflip */ padding-right: 1em; } } @media screen { html.skin-theme-clientpref-night .fmbox-warning { background-color: #300; /* Reddish, same hue/saturation as light */ } } @media screen and (prefers-color-scheme: dark) { html.skin-theme-clientpref-os .fmbox-warning { background-color: #300; /* Reddish, same hue/saturation as light */ } } ivof69wam0nxtvwqgg5cd5tk4dl4s0k 11022 1113 2026-08-26T11:32:49Z RAPTOR7762 18 1 revision imported from [[:en:Module:Message_box/fmbox.css]] 1112 sanitized-css text/css .fmbox { clear: both; /* this sheet does not require overflow-x because of this clear */ margin: 0.2em 0; border: 1px solid #a2a9b1; background-color: var(--background-color-interactive-subtle, #f8f9fa); box-sizing: border-box; color: var(--color-base, #202122); } .fmbox-warning { border: 1px solid #bb7070; /* Dark pink */ background-color: #ffdbdb; /* Pink */ } .fmbox-editnotice { background-color: transparent; } .fmbox .mbox-text { padding: 0.35em 1em; flex: 1 1 100%; } .fmbox .mbox-image, .fmbox .mbox-imageright { padding: 4px 2px; text-align: center; flex: none; } /* keep synced with each other type of message box as this isn't qualified */ .mbox-invalid-type { text-align: center; } @media (min-width: 480px) { .fmbox { display: flex; align-items: center; } .fmbox .mbox-image { /* @noflip */ padding-left: 1em; } .fmbox .mbox-imageright { /* @noflip */ padding-right: 1em; } } @media screen { html.skin-theme-clientpref-night .fmbox-warning { background-color: #300; /* Reddish, same hue/saturation as light */ } } @media screen and (prefers-color-scheme: dark) { html.skin-theme-clientpref-os .fmbox-warning { background-color: #300; /* Reddish, same hue/saturation as light */ } } rsd8asiryncq04z6c5a348d9wq6jgwh Module:Namespace detect/config 828 261 10875 2015-05-15T00:16:54Z commons>Krenair 0 [[phabricator:T99157|scribunto content model]] 10875 Scribunto text/plain -------------------------------------------------------------------------------- -- Namespace detect configuration data -- -- -- -- This module stores configuration data for Module:Namespace detect. Here -- -- you can localise the module to your wiki's language. -- -- -- -- To activate a configuration item, you need to uncomment it. This means -- -- that you need to remove the text "-- " at the start of the line. -- -------------------------------------------------------------------------------- local cfg = {} -- Don't edit this line. -------------------------------------------------------------------------------- -- Parameter names -- -- These configuration items specify custom parameter names. Values added -- -- here will work in addition to the default English parameter names. -- -- To add one extra name, you can use this format: -- -- -- -- cfg.foo = 'parameter name' -- -- -- -- To add multiple names, you can use this format: -- -- -- -- cfg.foo = {'parameter name 1', 'parameter name 2', 'parameter name 3'} -- -------------------------------------------------------------------------------- ---- This parameter displays content for the main namespace: -- cfg.main = 'main' ---- This parameter displays in talk namespaces: -- cfg.talk = 'talk' ---- This parameter displays content for "other" namespaces (namespaces for which ---- parameters have not been specified): -- cfg.other = 'other' ---- This parameter makes talk pages behave as though they are the corresponding ---- subject namespace. Note that this parameter is used with [[Module:Yesno]]. ---- Edit that module to change the default values of "yes", "no", etc. -- cfg.subjectns = 'subjectns' ---- This parameter sets a demonstration namespace: -- cfg.demospace = 'demospace' ---- This parameter sets a specific page to compare: cfg.demopage = 'page' -------------------------------------------------------------------------------- -- Table configuration -- -- These configuration items allow customisation of the "table" function, -- -- used to generate a table of possible parameters in the module -- -- documentation. -- -------------------------------------------------------------------------------- ---- The header for the namespace column in the wikitable containing the list of ---- possible subject-space parameters. -- cfg.wikitableNamespaceHeader = 'Namespace' ---- The header for the wikitable containing the list of possible subject-space ---- parameters. -- cfg.wikitableAliasesHeader = 'Aliases' -------------------------------------------------------------------------------- -- End of configuration data -- -------------------------------------------------------------------------------- return cfg -- Don't edit this line. 1o6ozz56i8q0xgyl6xa41n2v7kelhli 10876 8833 2026-08-25T23:38:35Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Namespace_detect/config]] 1124 Scribunto text/plain -------------------------------------------------------------------------------- -- Namespace detect configuration data -- -- -- -- This module stores configuration data for Module:Namespace detect. Here -- -- you can localise the module to your wiki's language. -- -- -- -- To activate a configuration item, you need to uncomment it. This means -- -- that you need to remove the text "-- " at the start of the line. -- -------------------------------------------------------------------------------- local cfg = {} -- Don't edit this line. -------------------------------------------------------------------------------- -- Parameter names -- -- These configuration items specify custom parameter names. Values added -- -- here will work in addition to the default English parameter names. -- -- To add one extra name, you can use this format: -- -- -- -- cfg.foo = 'parameter name' -- -- -- -- To add multiple names, you can use this format: -- -- -- -- cfg.foo = {'parameter name 1', 'parameter name 2', 'parameter name 3'} -- -------------------------------------------------------------------------------- ---- This parameter displays content for the main namespace: -- cfg.main = 'main' ---- This parameter displays in talk namespaces: -- cfg.talk = 'talk' ---- This parameter displays content for "other" namespaces (namespaces for which ---- parameters have not been specified): -- cfg.other = 'other' ---- This parameter makes talk pages behave as though they are the corresponding ---- subject namespace. Note that this parameter is used with [[Module:Yesno]]. ---- Edit that module to change the default values of "yes", "no", etc. -- cfg.subjectns = 'subjectns' ---- This parameter sets a demonstration namespace: -- cfg.demospace = 'demospace' ---- This parameter sets a specific page to compare: cfg.demopage = 'page' -------------------------------------------------------------------------------- -- Table configuration -- -- These configuration items allow customisation of the "table" function, -- -- used to generate a table of possible parameters in the module -- -- documentation. -- -------------------------------------------------------------------------------- ---- The header for the namespace column in the wikitable containing the list of ---- possible subject-space parameters. -- cfg.wikitableNamespaceHeader = 'Namespace' ---- The header for the wikitable containing the list of possible subject-space ---- parameters. -- cfg.wikitableAliasesHeader = 'Aliases' -------------------------------------------------------------------------------- -- End of configuration data -- -------------------------------------------------------------------------------- return cfg -- Don't edit this line. 1o6ozz56i8q0xgyl6xa41n2v7kelhli Module:Namespace detect/data 828 262 10877 2015-05-15T00:16:54Z commons>Krenair 0 [[phabricator:T99157|scribunto content model]] 10877 Scribunto text/plain -------------------------------------------------------------------------------- -- Namespace detect data -- -- This module holds data for [[Module:Namespace detect]] to be loaded per -- -- page, rather than per #invoke, for performance reasons. -- -------------------------------------------------------------------------------- local cfg = require('Module:Namespace detect/config') local function addKey(t, key, defaultKey) if key ~= defaultKey then t[#t + 1] = key end end -- Get a table of parameters to query for each default parameter name. -- This allows wikis to customise parameter names in the cfg table while -- ensuring that default parameter names will always work. The cfg table -- values can be added as a string, or as an array of strings. local defaultKeys = { 'main', 'talk', 'other', 'subjectns', 'demospace', 'demopage' } local argKeys = {} for i, defaultKey in ipairs(defaultKeys) do argKeys[defaultKey] = {defaultKey} end for defaultKey, t in pairs(argKeys) do local cfgValue = cfg[defaultKey] local cfgValueType = type(cfgValue) if cfgValueType == 'string' then addKey(t, cfgValue, defaultKey) elseif cfgValueType == 'table' then for i, key in ipairs(cfgValue) do addKey(t, key, defaultKey) end end cfg[defaultKey] = nil -- Free the cfg value as we don't need it any more. end local function getParamMappings() --[[ -- Returns a table of how parameter names map to namespace names. The keys -- are the actual namespace names, in lower case, and the values are the -- possible parameter names for that namespace, also in lower case. The -- table entries are structured like this: -- { -- [''] = {'main'}, -- ['wikipedia'] = {'wikipedia', 'project', 'wp'}, -- ... -- } --]] local mappings = {} local mainNsName = mw.site.subjectNamespaces[0].name mainNsName = mw.ustring.lower(mainNsName) mappings[mainNsName] = mw.clone(argKeys.main) mappings['talk'] = mw.clone(argKeys.talk) for nsid, ns in pairs(mw.site.subjectNamespaces) do if nsid ~= 0 then -- Exclude main namespace. local nsname = mw.ustring.lower(ns.name) local canonicalName = mw.ustring.lower(ns.canonicalName) mappings[nsname] = {nsname} if canonicalName ~= nsname then table.insert(mappings[nsname], canonicalName) end for _, alias in ipairs(ns.aliases) do table.insert(mappings[nsname], mw.ustring.lower(alias)) end end end return mappings end return { argKeys = argKeys, cfg = cfg, mappings = getParamMappings() } ojp6d3pc8mql5nufaqdg576c9so3479 10878 8831 2026-08-25T23:38:35Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Namespace_detect/data]] 1126 Scribunto text/plain -------------------------------------------------------------------------------- -- Namespace detect data -- -- This module holds data for [[Module:Namespace detect]] to be loaded per -- -- page, rather than per #invoke, for performance reasons. -- -------------------------------------------------------------------------------- local cfg = require('Module:Namespace detect/config') local function addKey(t, key, defaultKey) if key ~= defaultKey then t[#t + 1] = key end end -- Get a table of parameters to query for each default parameter name. -- This allows wikis to customise parameter names in the cfg table while -- ensuring that default parameter names will always work. The cfg table -- values can be added as a string, or as an array of strings. local defaultKeys = { 'main', 'talk', 'other', 'subjectns', 'demospace', 'demopage' } local argKeys = {} for i, defaultKey in ipairs(defaultKeys) do argKeys[defaultKey] = {defaultKey} end for defaultKey, t in pairs(argKeys) do local cfgValue = cfg[defaultKey] local cfgValueType = type(cfgValue) if cfgValueType == 'string' then addKey(t, cfgValue, defaultKey) elseif cfgValueType == 'table' then for i, key in ipairs(cfgValue) do addKey(t, key, defaultKey) end end cfg[defaultKey] = nil -- Free the cfg value as we don't need it any more. end local function getParamMappings() --[[ -- Returns a table of how parameter names map to namespace names. The keys -- are the actual namespace names, in lower case, and the values are the -- possible parameter names for that namespace, also in lower case. The -- table entries are structured like this: -- { -- [''] = {'main'}, -- ['wikipedia'] = {'wikipedia', 'project', 'wp'}, -- ... -- } --]] local mappings = {} local mainNsName = mw.site.subjectNamespaces[0].name mainNsName = mw.ustring.lower(mainNsName) mappings[mainNsName] = mw.clone(argKeys.main) mappings['talk'] = mw.clone(argKeys.talk) for nsid, ns in pairs(mw.site.subjectNamespaces) do if nsid ~= 0 then -- Exclude main namespace. local nsname = mw.ustring.lower(ns.name) local canonicalName = mw.ustring.lower(ns.canonicalName) mappings[nsname] = {nsname} if canonicalName ~= nsname then table.insert(mappings[nsname], canonicalName) end for _, alias in ipairs(ns.aliases) do table.insert(mappings[nsname], mw.ustring.lower(alias)) end end end return mappings end return { argKeys = argKeys, cfg = cfg, mappings = getParamMappings() } ojp6d3pc8mql5nufaqdg576c9so3479 Module:String 828 270 10629 9630 2026-02-19T04:35:59Z commons>Jarekt 0 synch with enwiki version 10629 Scribunto text/plain --[[ This module is intended to provide access to basic string functions. Most of the functions provided here can be invoked with named parameters, unnamed parameters, or a mixture. If named parameters are used, Mediawiki will automatically remove any leading or trailing whitespace from the parameter. Depending on the intended use, it may be advantageous to either preserve or remove such whitespace. Global options ignore_errors: If set to 'true' or 1, any error condition will result in an empty string being returned rather than an error message. error_category: If an error occurs, specifies the name of a category to include with the error message. The default category is [Category:Errors reported by Module String]. no_category: If set to 'true' or 1, no category will be added if an error is generated. Unit tests for this module are available at Module:String/tests. ]] local str = {} --[[ len This function returns the length of the target string. Usage: {{#invoke:String|len|target_string|}} OR {{#invoke:String|len|s=target_string}} Parameters s: The string whose length to report If invoked using named parameters, Mediawiki will automatically remove any leading or trailing whitespace from the target string. ]] function str.len( frame ) local new_args = str._getParameters( frame.args, {'s'} ) local s = new_args['s'] or '' return mw.ustring.len( s ) end --[[ sub This function returns a substring of the target string at specified indices. Usage: {{#invoke:String|sub|target_string|start_index|end_index}} OR {{#invoke:String|sub|s=target_string|i=start_index|j=end_index}} Parameters s: The string to return a subset of i: The first index of the substring to return, defaults to 1. j: The last index of the string to return, defaults to the last character. The first character of the string is assigned an index of 1. If either i or j is a negative value, it is interpreted the same as selecting a character by counting from the end of the string. Hence, a value of -1 is the same as selecting the last character of the string. If the requested indices are out of range for the given string, an error is reported. ]] function str.sub( frame ) local new_args = str._getParameters( frame.args, { 's', 'i', 'j' } ) local s = new_args['s'] or '' local i = tonumber( new_args['i'] ) or 1 local j = tonumber( new_args['j'] ) or -1 local len = mw.ustring.len( s ) -- Convert negatives for range checking if i < 0 then i = len + i + 1 end if j < 0 then j = len + j + 1 end if i > len or j > len or i < 1 or j < 1 then return str._error( 'String subset index out of range' ) end if j < i then return str._error( 'String subset indices out of order' ) end return mw.ustring.sub( s, i, j ) end --[[ This function implements that features of {{str sub old}} and is kept in order to maintain these older templates. ]] function str.sublength( frame ) local i = tonumber( frame.args.i ) or 0 local len = tonumber( frame.args.len ) return mw.ustring.sub( frame.args.s, i + 1, len and ( i + len ) ) end --[[ _match This function returns a substring from the source string that matches a specified pattern. It is exported for use in other modules Usage: strmatch = require("Module:String")._match sresult = strmatch( s, pattern, start, match, plain, nomatch ) Parameters s: The string to search pattern: The pattern or string to find within the string start: The index within the source string to start the search. The first character of the string has index 1. Defaults to 1. match: In some cases it may be possible to make multiple matches on a single string. This specifies which match to return, where the first match is match= 1. If a negative number is specified then a match is returned counting from the last match. Hence match = -1 is the same as requesting the last match. Defaults to 1. plain: A flag indicating that the pattern should be understood as plain text. Defaults to false. nomatch: If no match is found, output the "nomatch" value rather than an error. For information on constructing Lua patterns, a form of [regular expression], see: * http://www.lua.org/manual/5.1/manual.html#5.4.1 * http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns * http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns ]] -- This sub-routine is exported for use in other modules function str._match( s, pattern, start, match_index, plain_flag, nomatch ) if s == '' then return str._error( 'Target string is empty' ) end if pattern == '' then return str._error( 'Pattern string is empty' ) end start = tonumber(start) or 1 if math.abs(start) < 1 or math.abs(start) > mw.ustring.len( s ) then return str._error( 'Requested start is out of range' ) end if match_index == 0 then return str._error( 'Match index is out of range' ) end if plain_flag then pattern = str._escapePattern( pattern ) end local result if match_index == 1 then -- Find first match is simple case result = mw.ustring.match( s, pattern, start ) else if start > 1 then s = mw.ustring.sub( s, start ) end local iterator = mw.ustring.gmatch(s, pattern) if match_index > 0 then -- Forward search for w in iterator do match_index = match_index - 1 if match_index == 0 then result = w break end end else -- Reverse search local result_table = {} local count = 1 for w in iterator do result_table[count] = w count = count + 1 end result = result_table[ count + match_index ] end end if result == nil then if nomatch == nil then return str._error( 'Match not found' ) else return nomatch end else return result end end --[[ match This function returns a substring from the source string that matches a specified pattern. Usage: {{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch_output}} OR {{#invoke:String|match|s=source_string|pattern=pattern_string|start=start_index |match=match_number|plain=plain_flag|nomatch=nomatch_output}} Parameters s: The string to search pattern: The pattern or string to find within the string start: The index within the source string to start the search. The first character of the string has index 1. Defaults to 1. match: In some cases it may be possible to make multiple matches on a single string. This specifies which match to return, where the first match is match= 1. If a negative number is specified then a match is returned counting from the last match. Hence match = -1 is the same as requesting the last match. Defaults to 1. plain: A flag indicating that the pattern should be understood as plain text. Defaults to false. nomatch: If no match is found, output the "nomatch" value rather than an error. If invoked using named parameters, Mediawiki will automatically remove any leading or trailing whitespace from each string. In some circumstances this is desirable, in other cases one may want to preserve the whitespace. If the match_number or start_index are out of range for the string being queried, then this function generates an error. An error is also generated if no match is found. If one adds the parameter ignore_errors=true, then the error will be suppressed and an empty string will be returned on any failure. For information on constructing Lua patterns, a form of [regular expression], see: * http://www.lua.org/manual/5.1/manual.html#5.4.1 * http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns * http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns ]] -- This is the entry point for #invoke:String|match function str.match( frame ) local new_args = str._getParameters( frame.args, {'s', 'pattern', 'start', 'match', 'plain', 'nomatch'} ) local s = new_args['s'] or '' local start = tonumber( new_args['start'] ) or 1 local plain_flag = str._getBoolean( new_args['plain'] or false ) local pattern = new_args['pattern'] or '' local match_index = math.floor( tonumber(new_args['match']) or 1 ) local nomatch = new_args['nomatch'] return str._match( s, pattern, start, match_index, plain_flag, nomatch ) end --[[ pos This function returns a single character from the target string at position pos. Usage: {{#invoke:String|pos|target_string|index_value}} OR {{#invoke:String|pos|target=target_string|pos=index_value}} Parameters target: The string to search pos: The index for the character to return If invoked using named parameters, Mediawiki will automatically remove any leading or trailing whitespace from the target string. In some circumstances this is desirable, in other cases one may want to preserve the whitespace. The first character has an index value of 1. If one requests a negative value, this function will select a character by counting backwards from the end of the string. In other words pos = -1 is the same as asking for the last character. A requested value of zero, or a value greater than the length of the string returns an error. ]] function str.pos( frame ) local new_args = str._getParameters( frame.args, {'target', 'pos'} ) local target_str = new_args['target'] or '' local pos = tonumber( new_args['pos'] ) or 0 if pos == 0 or math.abs(pos) > mw.ustring.len( target_str ) then return str._error( 'String index out of range' ) end return mw.ustring.sub( target_str, pos, pos ) end --[[ str_find This function duplicates the behavior of {{str_find}}, including all of its quirks. This is provided in order to support existing templates, but is NOT RECOMMENDED for new code and templates. New code is recommended to use the "find" function instead. Returns the first index in "source" that is a match to "target". Indexing is 1-based, and the function returns -1 if the "target" string is not present in "source". Important Note: If the "target" string is empty / missing, this function returns a value of "1", which is generally unexpected behavior, and must be accounted for separatetly. ]] function str.str_find( frame ) local new_args = str._getParameters( frame.args, {'source', 'target'} ) local source_str = new_args['source'] or '' local target_str = new_args['target'] or '' if target_str == '' then return 1 end local start = mw.ustring.find( source_str, target_str, 1, true ) if start == nil then start = -1 end return start end --[[ find This function allows one to search for a target string or pattern within another string. Usage: {{#invoke:String|find|source_str|target_string|start_index|plain_flag}} OR {{#invoke:String|find|source=source_str|target=target_str|start=start_index|plain=plain_flag}} Parameters source: The string to search target: The string or pattern to find within source start: The index within the source string to start the search, defaults to 1 plain: Boolean flag indicating that target should be understood as plain text and not as a Lua style regular expression, defaults to true If invoked using named parameters, Mediawiki will automatically remove any leading or trailing whitespace from the parameter. In some circumstances this is desirable, in other cases one may want to preserve the whitespace. This function returns the first index >= "start" where "target" can be found within "source". Indices are 1-based. If "target" is not found, then this function returns 0. If either "source" or "target" are missing / empty, this function also returns 0. This function should be safe for UTF-8 strings. ]] function str.find( frame ) local new_args = str._getParameters( frame.args, {'source', 'target', 'start', 'plain' } ) local source_str = new_args['source'] or '' local pattern = new_args['target'] or '' local start_pos = tonumber(new_args['start']) or 1 local plain = new_args['plain'] or true if source_str == '' or pattern == '' then return 0 end plain = str._getBoolean( plain ) local start = mw.ustring.find( source_str, pattern, start_pos, plain ) if start == nil then start = 0 end return start end --[[ replace This function allows one to replace a target string or pattern within another string. Usage: {{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}} OR {{#invoke:String|replace|source=source_string|pattern=pattern_string|replace=replace_string| count=replacement_count|plain=plain_flag}} Parameters source: The string to search pattern: The string or pattern to find within source replace: The replacement text count: The number of occurences to replace, defaults to all. plain: Boolean flag indicating that pattern should be understood as plain text and not as a Lua style regular expression, defaults to true ]] function str.replace( frame ) local new_args = str._getParameters( frame.args, {'source', 'pattern', 'replace', 'count', 'plain' } ) local source_str = new_args['source'] or '' local pattern = new_args['pattern'] or '' local replace = new_args['replace'] or '' local count = tonumber( new_args['count'] ) local plain = new_args['plain'] or true if source_str == '' or pattern == '' then return source_str end plain = str._getBoolean( plain ) if plain then pattern = str._escapePattern( pattern ) replace = string.gsub( replace, "%%", "%%%%" ) --Only need to escape replacement sequences. end local result if count ~= nil then result = mw.ustring.gsub( source_str, pattern, replace, count ) else result = mw.ustring.gsub( source_str, pattern, replace ) end return result end --[[ simple function to pipe string.rep to templates. ]] function str.rep( frame ) local repetitions = tonumber( frame.args[2] ) if not repetitions then return str._error( 'function rep expects a number as second parameter, received "' .. ( frame.args[2] or '' ) .. '"' ) end return string.rep( frame.args[1] or '', repetitions ) end --[[ escapePattern This function escapes special characters from a Lua string pattern. See [1] for details on how patterns work. [1] https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns Usage: {{#invoke:String|escapePattern|pattern_string}} Parameters pattern_string: The pattern string to escape. ]] function str.escapePattern( frame ) local pattern_str = frame.args[1] if not pattern_str then return str._error( 'No pattern string specified' ) end local result = str._escapePattern( pattern_str ) return result end --[[ count This function counts the number of occurrences of one string in another. ]] function str.count(frame) local args = str._getParameters(frame.args, {'source', 'pattern', 'plain'}) local source = args.source or '' local pattern = args.pattern or '' local plain = str._getBoolean(args.plain or true) if plain then pattern = str._escapePattern(pattern) end local _, count = mw.ustring.gsub(source, pattern, '') return count end --[[ endswith This function determines whether a string ends with another string. ]] function str.endswith(frame) local args = str._getParameters(frame.args, {'source', 'pattern'}) local source = args.source or '' local pattern = args.pattern or '' if pattern == '' then -- All strings end with the empty string. return "yes" end if mw.ustring.sub(source, -mw.ustring.len(pattern), -1) == pattern then return "yes" else return "" end end --[[ join Join all non empty arguments together; the first argument is the separator. Usage: {{#invoke:String|join|sep|one|two|three}} ]] function str.join(frame) local args = {} local sep for _, v in ipairs( frame.args ) do if sep then if v ~= '' then table.insert(args, v) end else sep = v end end return table.concat( args, sep or '' ) end -- findpagetext returns the position of a piece of text in a page -- First positional parameter or |text is the search text -- Optional parameter |title is the page title, defaults to current page -- Optional parameter |plain is either true for plain search (default) or false for Lua pattern search -- Optional parameter |nomatch is the return value when no match is found; default is nil function str._findpagetext(args) -- process parameters local nomatch = args.nomatch or "" if nomatch == "" then nomatch = nil end -- local text = mw.text.trim(args[1] or args.text or "") if text == "" then return nil end -- local title = args.title or "" local titleobj if title == "" then titleobj = mw.title.getCurrentTitle() else titleobj = mw.title.new(title) end -- local plain = args.plain or "" if plain:sub(1, 1) == "f" then plain = false else plain = true end -- get the page content and look for 'text' - return position or nomatch local content = titleobj and titleobj:getContent() return content and mw.ustring.find(content, text, 1, plain) or nomatch end function str.findpagetext(frame) local args = frame.args local pargs = frame:getParent().args for k, v in pairs(pargs) do args[k] = v end if not (args[1] or args.text) then return nil end -- just the first value return (str._findpagetext(args)) end --[[ Helper function that populates the argument list given that user may need to use a mix of named and unnamed parameters. This is relevant because named parameters are not identical to unnamed parameters due to string trimming, and when dealing with strings we sometimes want to either preserve or remove that whitespace depending on the application. ]] function str._getParameters( frame_args, arg_list ) local new_args = {} local index = 1 local value for _, arg in ipairs( arg_list ) do value = frame_args[arg] if value == nil then value = frame_args[index] index = index + 1 end new_args[arg] = value end return new_args end --[[ Helper function to handle error messages. ]] function str._error( error_str ) local frame = mw.getCurrentFrame() local error_category = frame.args.error_category or 'Errors reported by Module String' local ignore_errors = frame.args.ignore_errors or false local no_category = frame.args.no_category or false if str._getBoolean(ignore_errors) then return '' end local error_str = '<strong class="error">String Module Error: ' .. error_str .. '</strong>' if error_category ~= '' and not str._getBoolean( no_category ) then error_str = '[[Category:' .. error_category .. ']]' .. error_str end return error_str end --[[ Helper Function to interpret boolean strings ]] function str._getBoolean( boolean_str ) local boolean_value if type( boolean_str ) == 'string' then boolean_str = boolean_str:lower() if boolean_str == 'false' or boolean_str == 'no' or boolean_str == '0' or boolean_str == '' then boolean_value = false else boolean_value = true end elseif type( boolean_str ) == 'boolean' then boolean_value = boolean_str else error( 'No boolean value found' ) end return boolean_value end --[[ Helper function that escapes all pattern characters so that they will be treated as plain text. ]] function str._escapePattern( pattern_str ) return ( string.gsub( pattern_str, "[%(%)%.%%%+%-%*%?%[%^%$%]]", "%%%0" ) ) end return str j3b8d4sejqnvazpfl0gk0yfaa503gli 10630 9631 2026-08-25T23:38:25Z RAPTOR7762 18 1 revision imported from [[:commons:Module:String]] 1145 Scribunto text/plain --[[ This module is intended to provide access to basic string functions. Most of the functions provided here can be invoked with named parameters, unnamed parameters, or a mixture. If named parameters are used, Mediawiki will automatically remove any leading or trailing whitespace from the parameter. Depending on the intended use, it may be advantageous to either preserve or remove such whitespace. Global options ignore_errors: If set to 'true' or 1, any error condition will result in an empty string being returned rather than an error message. error_category: If an error occurs, specifies the name of a category to include with the error message. The default category is [Category:Errors reported by Module String]. no_category: If set to 'true' or 1, no category will be added if an error is generated. Unit tests for this module are available at Module:String/tests. ]] local str = {} --[[ len This function returns the length of the target string. Usage: {{#invoke:String|len|target_string|}} OR {{#invoke:String|len|s=target_string}} Parameters s: The string whose length to report If invoked using named parameters, Mediawiki will automatically remove any leading or trailing whitespace from the target string. ]] function str.len( frame ) local new_args = str._getParameters( frame.args, {'s'} ) local s = new_args['s'] or '' return mw.ustring.len( s ) end --[[ sub This function returns a substring of the target string at specified indices. Usage: {{#invoke:String|sub|target_string|start_index|end_index}} OR {{#invoke:String|sub|s=target_string|i=start_index|j=end_index}} Parameters s: The string to return a subset of i: The first index of the substring to return, defaults to 1. j: The last index of the string to return, defaults to the last character. The first character of the string is assigned an index of 1. If either i or j is a negative value, it is interpreted the same as selecting a character by counting from the end of the string. Hence, a value of -1 is the same as selecting the last character of the string. If the requested indices are out of range for the given string, an error is reported. ]] function str.sub( frame ) local new_args = str._getParameters( frame.args, { 's', 'i', 'j' } ) local s = new_args['s'] or '' local i = tonumber( new_args['i'] ) or 1 local j = tonumber( new_args['j'] ) or -1 local len = mw.ustring.len( s ) -- Convert negatives for range checking if i < 0 then i = len + i + 1 end if j < 0 then j = len + j + 1 end if i > len or j > len or i < 1 or j < 1 then return str._error( 'String subset index out of range' ) end if j < i then return str._error( 'String subset indices out of order' ) end return mw.ustring.sub( s, i, j ) end --[[ This function implements that features of {{str sub old}} and is kept in order to maintain these older templates. ]] function str.sublength( frame ) local i = tonumber( frame.args.i ) or 0 local len = tonumber( frame.args.len ) return mw.ustring.sub( frame.args.s, i + 1, len and ( i + len ) ) end --[[ _match This function returns a substring from the source string that matches a specified pattern. It is exported for use in other modules Usage: strmatch = require("Module:String")._match sresult = strmatch( s, pattern, start, match, plain, nomatch ) Parameters s: The string to search pattern: The pattern or string to find within the string start: The index within the source string to start the search. The first character of the string has index 1. Defaults to 1. match: In some cases it may be possible to make multiple matches on a single string. This specifies which match to return, where the first match is match= 1. If a negative number is specified then a match is returned counting from the last match. Hence match = -1 is the same as requesting the last match. Defaults to 1. plain: A flag indicating that the pattern should be understood as plain text. Defaults to false. nomatch: If no match is found, output the "nomatch" value rather than an error. For information on constructing Lua patterns, a form of [regular expression], see: * http://www.lua.org/manual/5.1/manual.html#5.4.1 * http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns * http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns ]] -- This sub-routine is exported for use in other modules function str._match( s, pattern, start, match_index, plain_flag, nomatch ) if s == '' then return str._error( 'Target string is empty' ) end if pattern == '' then return str._error( 'Pattern string is empty' ) end start = tonumber(start) or 1 if math.abs(start) < 1 or math.abs(start) > mw.ustring.len( s ) then return str._error( 'Requested start is out of range' ) end if match_index == 0 then return str._error( 'Match index is out of range' ) end if plain_flag then pattern = str._escapePattern( pattern ) end local result if match_index == 1 then -- Find first match is simple case result = mw.ustring.match( s, pattern, start ) else if start > 1 then s = mw.ustring.sub( s, start ) end local iterator = mw.ustring.gmatch(s, pattern) if match_index > 0 then -- Forward search for w in iterator do match_index = match_index - 1 if match_index == 0 then result = w break end end else -- Reverse search local result_table = {} local count = 1 for w in iterator do result_table[count] = w count = count + 1 end result = result_table[ count + match_index ] end end if result == nil then if nomatch == nil then return str._error( 'Match not found' ) else return nomatch end else return result end end --[[ match This function returns a substring from the source string that matches a specified pattern. Usage: {{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch_output}} OR {{#invoke:String|match|s=source_string|pattern=pattern_string|start=start_index |match=match_number|plain=plain_flag|nomatch=nomatch_output}} Parameters s: The string to search pattern: The pattern or string to find within the string start: The index within the source string to start the search. The first character of the string has index 1. Defaults to 1. match: In some cases it may be possible to make multiple matches on a single string. This specifies which match to return, where the first match is match= 1. If a negative number is specified then a match is returned counting from the last match. Hence match = -1 is the same as requesting the last match. Defaults to 1. plain: A flag indicating that the pattern should be understood as plain text. Defaults to false. nomatch: If no match is found, output the "nomatch" value rather than an error. If invoked using named parameters, Mediawiki will automatically remove any leading or trailing whitespace from each string. In some circumstances this is desirable, in other cases one may want to preserve the whitespace. If the match_number or start_index are out of range for the string being queried, then this function generates an error. An error is also generated if no match is found. If one adds the parameter ignore_errors=true, then the error will be suppressed and an empty string will be returned on any failure. For information on constructing Lua patterns, a form of [regular expression], see: * http://www.lua.org/manual/5.1/manual.html#5.4.1 * http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns * http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns ]] -- This is the entry point for #invoke:String|match function str.match( frame ) local new_args = str._getParameters( frame.args, {'s', 'pattern', 'start', 'match', 'plain', 'nomatch'} ) local s = new_args['s'] or '' local start = tonumber( new_args['start'] ) or 1 local plain_flag = str._getBoolean( new_args['plain'] or false ) local pattern = new_args['pattern'] or '' local match_index = math.floor( tonumber(new_args['match']) or 1 ) local nomatch = new_args['nomatch'] return str._match( s, pattern, start, match_index, plain_flag, nomatch ) end --[[ pos This function returns a single character from the target string at position pos. Usage: {{#invoke:String|pos|target_string|index_value}} OR {{#invoke:String|pos|target=target_string|pos=index_value}} Parameters target: The string to search pos: The index for the character to return If invoked using named parameters, Mediawiki will automatically remove any leading or trailing whitespace from the target string. In some circumstances this is desirable, in other cases one may want to preserve the whitespace. The first character has an index value of 1. If one requests a negative value, this function will select a character by counting backwards from the end of the string. In other words pos = -1 is the same as asking for the last character. A requested value of zero, or a value greater than the length of the string returns an error. ]] function str.pos( frame ) local new_args = str._getParameters( frame.args, {'target', 'pos'} ) local target_str = new_args['target'] or '' local pos = tonumber( new_args['pos'] ) or 0 if pos == 0 or math.abs(pos) > mw.ustring.len( target_str ) then return str._error( 'String index out of range' ) end return mw.ustring.sub( target_str, pos, pos ) end --[[ str_find This function duplicates the behavior of {{str_find}}, including all of its quirks. This is provided in order to support existing templates, but is NOT RECOMMENDED for new code and templates. New code is recommended to use the "find" function instead. Returns the first index in "source" that is a match to "target". Indexing is 1-based, and the function returns -1 if the "target" string is not present in "source". Important Note: If the "target" string is empty / missing, this function returns a value of "1", which is generally unexpected behavior, and must be accounted for separatetly. ]] function str.str_find( frame ) local new_args = str._getParameters( frame.args, {'source', 'target'} ) local source_str = new_args['source'] or '' local target_str = new_args['target'] or '' if target_str == '' then return 1 end local start = mw.ustring.find( source_str, target_str, 1, true ) if start == nil then start = -1 end return start end --[[ find This function allows one to search for a target string or pattern within another string. Usage: {{#invoke:String|find|source_str|target_string|start_index|plain_flag}} OR {{#invoke:String|find|source=source_str|target=target_str|start=start_index|plain=plain_flag}} Parameters source: The string to search target: The string or pattern to find within source start: The index within the source string to start the search, defaults to 1 plain: Boolean flag indicating that target should be understood as plain text and not as a Lua style regular expression, defaults to true If invoked using named parameters, Mediawiki will automatically remove any leading or trailing whitespace from the parameter. In some circumstances this is desirable, in other cases one may want to preserve the whitespace. This function returns the first index >= "start" where "target" can be found within "source". Indices are 1-based. If "target" is not found, then this function returns 0. If either "source" or "target" are missing / empty, this function also returns 0. This function should be safe for UTF-8 strings. ]] function str.find( frame ) local new_args = str._getParameters( frame.args, {'source', 'target', 'start', 'plain' } ) local source_str = new_args['source'] or '' local pattern = new_args['target'] or '' local start_pos = tonumber(new_args['start']) or 1 local plain = new_args['plain'] or true if source_str == '' or pattern == '' then return 0 end plain = str._getBoolean( plain ) local start = mw.ustring.find( source_str, pattern, start_pos, plain ) if start == nil then start = 0 end return start end --[[ replace This function allows one to replace a target string or pattern within another string. Usage: {{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}} OR {{#invoke:String|replace|source=source_string|pattern=pattern_string|replace=replace_string| count=replacement_count|plain=plain_flag}} Parameters source: The string to search pattern: The string or pattern to find within source replace: The replacement text count: The number of occurences to replace, defaults to all. plain: Boolean flag indicating that pattern should be understood as plain text and not as a Lua style regular expression, defaults to true ]] function str.replace( frame ) local new_args = str._getParameters( frame.args, {'source', 'pattern', 'replace', 'count', 'plain' } ) local source_str = new_args['source'] or '' local pattern = new_args['pattern'] or '' local replace = new_args['replace'] or '' local count = tonumber( new_args['count'] ) local plain = new_args['plain'] or true if source_str == '' or pattern == '' then return source_str end plain = str._getBoolean( plain ) if plain then pattern = str._escapePattern( pattern ) replace = string.gsub( replace, "%%", "%%%%" ) --Only need to escape replacement sequences. end local result if count ~= nil then result = mw.ustring.gsub( source_str, pattern, replace, count ) else result = mw.ustring.gsub( source_str, pattern, replace ) end return result end --[[ simple function to pipe string.rep to templates. ]] function str.rep( frame ) local repetitions = tonumber( frame.args[2] ) if not repetitions then return str._error( 'function rep expects a number as second parameter, received "' .. ( frame.args[2] or '' ) .. '"' ) end return string.rep( frame.args[1] or '', repetitions ) end --[[ escapePattern This function escapes special characters from a Lua string pattern. See [1] for details on how patterns work. [1] https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns Usage: {{#invoke:String|escapePattern|pattern_string}} Parameters pattern_string: The pattern string to escape. ]] function str.escapePattern( frame ) local pattern_str = frame.args[1] if not pattern_str then return str._error( 'No pattern string specified' ) end local result = str._escapePattern( pattern_str ) return result end --[[ count This function counts the number of occurrences of one string in another. ]] function str.count(frame) local args = str._getParameters(frame.args, {'source', 'pattern', 'plain'}) local source = args.source or '' local pattern = args.pattern or '' local plain = str._getBoolean(args.plain or true) if plain then pattern = str._escapePattern(pattern) end local _, count = mw.ustring.gsub(source, pattern, '') return count end --[[ endswith This function determines whether a string ends with another string. ]] function str.endswith(frame) local args = str._getParameters(frame.args, {'source', 'pattern'}) local source = args.source or '' local pattern = args.pattern or '' if pattern == '' then -- All strings end with the empty string. return "yes" end if mw.ustring.sub(source, -mw.ustring.len(pattern), -1) == pattern then return "yes" else return "" end end --[[ join Join all non empty arguments together; the first argument is the separator. Usage: {{#invoke:String|join|sep|one|two|three}} ]] function str.join(frame) local args = {} local sep for _, v in ipairs( frame.args ) do if sep then if v ~= '' then table.insert(args, v) end else sep = v end end return table.concat( args, sep or '' ) end -- findpagetext returns the position of a piece of text in a page -- First positional parameter or |text is the search text -- Optional parameter |title is the page title, defaults to current page -- Optional parameter |plain is either true for plain search (default) or false for Lua pattern search -- Optional parameter |nomatch is the return value when no match is found; default is nil function str._findpagetext(args) -- process parameters local nomatch = args.nomatch or "" if nomatch == "" then nomatch = nil end -- local text = mw.text.trim(args[1] or args.text or "") if text == "" then return nil end -- local title = args.title or "" local titleobj if title == "" then titleobj = mw.title.getCurrentTitle() else titleobj = mw.title.new(title) end -- local plain = args.plain or "" if plain:sub(1, 1) == "f" then plain = false else plain = true end -- get the page content and look for 'text' - return position or nomatch local content = titleobj and titleobj:getContent() return content and mw.ustring.find(content, text, 1, plain) or nomatch end function str.findpagetext(frame) local args = frame.args local pargs = frame:getParent().args for k, v in pairs(pargs) do args[k] = v end if not (args[1] or args.text) then return nil end -- just the first value return (str._findpagetext(args)) end --[[ Helper function that populates the argument list given that user may need to use a mix of named and unnamed parameters. This is relevant because named parameters are not identical to unnamed parameters due to string trimming, and when dealing with strings we sometimes want to either preserve or remove that whitespace depending on the application. ]] function str._getParameters( frame_args, arg_list ) local new_args = {} local index = 1 local value for _, arg in ipairs( arg_list ) do value = frame_args[arg] if value == nil then value = frame_args[index] index = index + 1 end new_args[arg] = value end return new_args end --[[ Helper function to handle error messages. ]] function str._error( error_str ) local frame = mw.getCurrentFrame() local error_category = frame.args.error_category or 'Errors reported by Module String' local ignore_errors = frame.args.ignore_errors or false local no_category = frame.args.no_category or false if str._getBoolean(ignore_errors) then return '' end local error_str = '<strong class="error">String Module Error: ' .. error_str .. '</strong>' if error_category ~= '' and not str._getBoolean( no_category ) then error_str = '[[Panni:' .. error_category .. ']]' .. error_str end return error_str end --[[ Helper Function to interpret boolean strings ]] function str._getBoolean( boolean_str ) local boolean_value if type( boolean_str ) == 'string' then boolean_str = boolean_str:lower() if boolean_str == 'false' or boolean_str == 'no' or boolean_str == '0' or boolean_str == '' then boolean_value = false else boolean_value = true end elseif type( boolean_str ) == 'boolean' then boolean_value = boolean_str else error( 'No boolean value found' ) end return boolean_value end --[[ Helper function that escapes all pattern characters so that they will be treated as plain text. ]] function str._escapePattern( pattern_str ) return ( string.gsub( pattern_str, "[%(%)%.%%%+%-%*%?%[%^%$%]]", "%%%0" ) ) end return str byteynla3ptc37v5z5xiom65ovniniq Module:TableTools 828 272 10697 8836 2025-01-03T15:21:01Z commons>Matrix 0 update from enwiki 8836 Scribunto text/plain ------------------------------------------------------------------------------------ -- TableTools -- -- -- -- This module includes a number of functions for dealing with Lua tables. -- -- It is a meta-module, meant to be called from other Lua modules, and should not -- -- be called directly from #invoke. -- ------------------------------------------------------------------------------------ local libraryUtil = require('libraryUtil') local p = {} -- Define often-used variables and functions. local floor = math.floor local infinity = math.huge local checkType = libraryUtil.checkType local checkTypeMulti = libraryUtil.checkTypeMulti ------------------------------------------------------------------------------------ -- isPositiveInteger -- -- This function returns true if the given value is a positive integer, and false -- if not. Although it doesn't operate on tables, it is included here as it is -- useful for determining whether a given table key is in the array part or the -- hash part of a table. ------------------------------------------------------------------------------------ function p.isPositiveInteger(v) return type(v) == 'number' and v >= 1 and floor(v) == v and v < infinity end ------------------------------------------------------------------------------------ -- isNan -- -- This function returns true if the given number is a NaN value, and false if -- not. Although it doesn't operate on tables, it is included here as it is useful -- for determining whether a value can be a valid table key. Lua will generate an -- error if a NaN is used as a table key. ------------------------------------------------------------------------------------ function p.isNan(v) return type(v) == 'number' and v ~= v end ------------------------------------------------------------------------------------ -- shallowClone -- -- This returns a clone of a table. The value returned is a new table, but all -- subtables and functions are shared. Metamethods are respected, but the returned -- table will have no metatable of its own. ------------------------------------------------------------------------------------ function p.shallowClone(t) checkType('shallowClone', 1, t, 'table') local ret = {} for k, v in pairs(t) do ret[k] = v end return ret end ------------------------------------------------------------------------------------ -- removeDuplicates -- -- This removes duplicate values from an array. Non-positive-integer keys are -- ignored. The earliest value is kept, and all subsequent duplicate values are -- removed, but otherwise the array order is unchanged. ------------------------------------------------------------------------------------ function p.removeDuplicates(arr) checkType('removeDuplicates', 1, arr, 'table') local isNan = p.isNan local ret, exists = {}, {} for _, v in ipairs(arr) do if isNan(v) then -- NaNs can't be table keys, and they are also unique, so we don't need to check existence. ret[#ret + 1] = v elseif not exists[v] then ret[#ret + 1] = v exists[v] = true end end return ret end ------------------------------------------------------------------------------------ -- numKeys -- -- This takes a table and returns an array containing the numbers of any numerical -- keys that have non-nil values, sorted in numerical order. ------------------------------------------------------------------------------------ function p.numKeys(t) checkType('numKeys', 1, t, 'table') local isPositiveInteger = p.isPositiveInteger local nums = {} for k in pairs(t) do if isPositiveInteger(k) then nums[#nums + 1] = k end end table.sort(nums) return nums end ------------------------------------------------------------------------------------ -- affixNums -- -- This takes a table and returns an array containing the numbers of keys with the -- specified prefix and suffix. For example, for the table -- {a1 = 'foo', a3 = 'bar', a6 = 'baz'} and the prefix "a", affixNums will return -- {1, 3, 6}. ------------------------------------------------------------------------------------ function p.affixNums(t, prefix, suffix) checkType('affixNums', 1, t, 'table') checkType('affixNums', 2, prefix, 'string', true) checkType('affixNums', 3, suffix, 'string', true) local function cleanPattern(s) -- Cleans a pattern so that the magic characters ()%.[]*+-?^$ are interpreted literally. return s:gsub('([%(%)%%%.%[%]%*%+%-%?%^%$])', '%%%1') end prefix = prefix or '' suffix = suffix or '' prefix = cleanPattern(prefix) suffix = cleanPattern(suffix) local pattern = '^' .. prefix .. '([1-9]%d*)' .. suffix .. '$' local nums = {} for k in pairs(t) do if type(k) == 'string' then local num = mw.ustring.match(k, pattern) if num then nums[#nums + 1] = tonumber(num) end end end table.sort(nums) return nums end ------------------------------------------------------------------------------------ -- numData -- -- Given a table with keys like {"foo1", "bar1", "foo2", "baz2"}, returns a table -- of subtables in the format -- {[1] = {foo = 'text', bar = 'text'}, [2] = {foo = 'text', baz = 'text'}}. -- Keys that don't end with an integer are stored in a subtable named "other". The -- compress option compresses the table so that it can be iterated over with -- ipairs. ------------------------------------------------------------------------------------ function p.numData(t, compress) checkType('numData', 1, t, 'table') checkType('numData', 2, compress, 'boolean', true) local ret = {} for k, v in pairs(t) do local prefix, num = mw.ustring.match(tostring(k), '^([^0-9]*)([1-9][0-9]*)$') if num then num = tonumber(num) local subtable = ret[num] or {} if prefix == '' then -- Positional parameters match the blank string; put them at the start of the subtable instead. prefix = 1 end subtable[prefix] = v ret[num] = subtable else local subtable = ret.other or {} subtable[k] = v ret.other = subtable end end if compress then local other = ret.other ret = p.compressSparseArray(ret) ret.other = other end return ret end ------------------------------------------------------------------------------------ -- compressSparseArray -- -- This takes an array with one or more nil values, and removes the nil values -- while preserving the order, so that the array can be safely traversed with -- ipairs. ------------------------------------------------------------------------------------ function p.compressSparseArray(t) checkType('compressSparseArray', 1, t, 'table') local ret = {} local nums = p.numKeys(t) for _, num in ipairs(nums) do ret[#ret + 1] = t[num] end return ret end ------------------------------------------------------------------------------------ -- sparseIpairs -- -- This is an iterator for sparse arrays. It can be used like ipairs, but can -- handle nil values. ------------------------------------------------------------------------------------ function p.sparseIpairs(t) checkType('sparseIpairs', 1, t, 'table') local nums = p.numKeys(t) local i = 0 local lim = #nums return function () i = i + 1 if i <= lim then local key = nums[i] return key, t[key] else return nil, nil end end end ------------------------------------------------------------------------------------ -- size -- -- This returns the size of a key/value pair table. It will also work on arrays, -- but for arrays it is more efficient to use the # operator. ------------------------------------------------------------------------------------ function p.size(t) checkType('size', 1, t, 'table') local i = 0 for _ in pairs(t) do i = i + 1 end return i end local function defaultKeySort(item1, item2) -- "number" < "string", so numbers will be sorted before strings. local type1, type2 = type(item1), type(item2) if type1 ~= type2 then return type1 < type2 elseif type1 == 'table' or type1 == 'boolean' or type1 == 'function' then return tostring(item1) < tostring(item2) else return item1 < item2 end end ------------------------------------------------------------------------------------ -- keysToList -- -- Returns an array of the keys in a table, sorted using either a default -- comparison function or a custom keySort function. ------------------------------------------------------------------------------------ function p.keysToList(t, keySort, checked) if not checked then checkType('keysToList', 1, t, 'table') checkTypeMulti('keysToList', 2, keySort, {'function', 'boolean', 'nil'}) end local arr = {} local index = 1 for k in pairs(t) do arr[index] = k index = index + 1 end if keySort ~= false then keySort = type(keySort) == 'function' and keySort or defaultKeySort table.sort(arr, keySort) end return arr end ------------------------------------------------------------------------------------ -- sortedPairs -- -- Iterates through a table, with the keys sorted using the keysToList function. -- If there are only numerical keys, sparseIpairs is probably more efficient. ------------------------------------------------------------------------------------ function p.sortedPairs(t, keySort) checkType('sortedPairs', 1, t, 'table') checkType('sortedPairs', 2, keySort, 'function', true) local arr = p.keysToList(t, keySort, true) local i = 0 return function () i = i + 1 local key = arr[i] if key ~= nil then return key, t[key] else return nil, nil end end end ------------------------------------------------------------------------------------ -- isArray -- -- Returns true if the given value is a table and all keys are consecutive -- integers starting at 1. ------------------------------------------------------------------------------------ function p.isArray(v) if type(v) ~= 'table' then return false end local i = 0 for _ in pairs(v) do i = i + 1 if v[i] == nil then return false end end return true end ------------------------------------------------------------------------------------ -- isArrayLike -- -- Returns true if the given value is iterable and all keys are consecutive -- integers starting at 1. ------------------------------------------------------------------------------------ function p.isArrayLike(v) if not pcall(pairs, v) then return false end local i = 0 for _ in pairs(v) do i = i + 1 if v[i] == nil then return false end end return true end ------------------------------------------------------------------------------------ -- invert -- -- Transposes the keys and values in an array. For example, {"a", "b", "c"} -> -- {a = 1, b = 2, c = 3}. Duplicates are not supported (result values refer to -- the index of the last duplicate) and NaN values are ignored. ------------------------------------------------------------------------------------ function p.invert(arr) checkType("invert", 1, arr, "table") local isNan = p.isNan local map = {} for i, v in ipairs(arr) do if not isNan(v) then map[v] = i end end return map end ------------------------------------------------------------------------------------ -- listToSet -- -- Creates a set from the array part of the table. Indexing the set by any of the -- values of the array returns true. For example, {"a", "b", "c"} -> -- {a = true, b = true, c = true}. NaN values are ignored as Lua considers them -- never equal to any value (including other NaNs or even themselves). ------------------------------------------------------------------------------------ function p.listToSet(arr) checkType("listToSet", 1, arr, "table") local isNan = p.isNan local set = {} for _, v in ipairs(arr) do if not isNan(v) then set[v] = true end end return set end ------------------------------------------------------------------------------------ -- deepCopy -- -- Recursive deep copy function. Preserves identities of subtables. ------------------------------------------------------------------------------------ local function _deepCopy(orig, includeMetatable, already_seen) if type(orig) ~= "table" then return orig end -- already_seen stores copies of tables indexed by the original table. local copy = already_seen[orig] if copy ~= nil then return copy end copy = {} already_seen[orig] = copy -- memoize before any recursion, to avoid infinite loops for orig_key, orig_value in pairs(orig) do copy[_deepCopy(orig_key, includeMetatable, already_seen)] = _deepCopy(orig_value, includeMetatable, already_seen) end if includeMetatable then local mt = getmetatable(orig) if mt ~= nil then setmetatable(copy, _deepCopy(mt, true, already_seen)) end end return copy end function p.deepCopy(orig, noMetatable, already_seen) checkType("deepCopy", 3, already_seen, "table", true) return _deepCopy(orig, not noMetatable, already_seen or {}) end ------------------------------------------------------------------------------------ -- sparseConcat -- -- Concatenates all values in the table that are indexed by a number, in order. -- sparseConcat{a, nil, c, d} => "acd" -- sparseConcat{nil, b, c, d} => "bcd" ------------------------------------------------------------------------------------ function p.sparseConcat(t, sep, i, j) local arr = {} local arr_i = 0 for _, v in p.sparseIpairs(t) do arr_i = arr_i + 1 arr[arr_i] = v end return table.concat(arr, sep, i, j) end ------------------------------------------------------------------------------------ -- length -- -- Finds the length of an array, or of a quasi-array with keys such as "data1", -- "data2", etc., using an exponential search algorithm. It is similar to the -- operator #, but may return a different value when there are gaps in the array -- portion of the table. Intended to be used on data loaded with mw.loadData. For -- other tables, use #. -- Note: #frame.args in frame object always be set to 0, regardless of the number -- of unnamed template parameters, so use this function for frame.args. ------------------------------------------------------------------------------------ function p.length(t, prefix) -- requiring module inline so that [[Module:Exponential search]] which is -- only needed by this one function doesn't get millions of transclusions local expSearch = require("Module:Exponential search") checkType('length', 1, t, 'table') checkType('length', 2, prefix, 'string', true) return expSearch(function (i) local key if prefix then key = prefix .. tostring(i) else key = i end return t[key] ~= nil end) or 0 end ------------------------------------------------------------------------------------ -- inArray -- -- Returns true if searchElement is a member of the array, and false otherwise. -- Equivalent to JavaScript array.includes(searchElement) or -- array.includes(searchElement, fromIndex), except fromIndex is 1 indexed ------------------------------------------------------------------------------------ function p.inArray(array, searchElement, fromIndex) checkType("inArray", 1, array, "table") -- if searchElement is nil, error? fromIndex = tonumber(fromIndex) if fromIndex then if (fromIndex < 0) then fromIndex = #array + fromIndex + 1 end if fromIndex < 1 then fromIndex = 1 end for _, v in ipairs({unpack(array, fromIndex)}) do if v == searchElement then return true end end else for _, v in pairs(array) do if v == searchElement then return true end end end return false end ------------------------------------------------------------------------------------ -- merge -- -- Given the arrays, returns an array containing the elements of each input array -- in sequence. ------------------------------------------------------------------------------------ function p.merge(...) local arrays = {...} local ret = {} for i, arr in ipairs(arrays) do checkType('merge', i, arr, 'table') for _, v in ipairs(arr) do ret[#ret + 1] = v end end return ret end ------------------------------------------------------------------------------------ -- extend -- -- Extends the first array in place by appending all elements from the second -- array. ------------------------------------------------------------------------------------ function p.extend(arr1, arr2) checkType('extend', 1, arr1, 'table') checkType('extend', 2, arr2, 'table') for _, v in ipairs(arr2) do arr1[#arr1 + 1] = v end end return p 4n03zk6kcoeg4gz82mieeh94c1szcjy 10698 9530 2026-08-25T23:38:29Z RAPTOR7762 18 1 revision imported from [[:commons:Module:TableTools]] 1149 Scribunto text/plain ------------------------------------------------------------------------------------ -- TableTools -- -- -- -- This module includes a number of functions for dealing with Lua tables. -- -- It is a meta-module, meant to be called from other Lua modules, and should not -- -- be called directly from #invoke. -- ------------------------------------------------------------------------------------ local libraryUtil = require('libraryUtil') local p = {} -- Define often-used variables and functions. local floor = math.floor local infinity = math.huge local checkType = libraryUtil.checkType local checkTypeMulti = libraryUtil.checkTypeMulti ------------------------------------------------------------------------------------ -- isPositiveInteger -- -- This function returns true if the given value is a positive integer, and false -- if not. Although it doesn't operate on tables, it is included here as it is -- useful for determining whether a given table key is in the array part or the -- hash part of a table. ------------------------------------------------------------------------------------ function p.isPositiveInteger(v) return type(v) == 'number' and v >= 1 and floor(v) == v and v < infinity end ------------------------------------------------------------------------------------ -- isNan -- -- This function returns true if the given number is a NaN value, and false if -- not. Although it doesn't operate on tables, it is included here as it is useful -- for determining whether a value can be a valid table key. Lua will generate an -- error if a NaN is used as a table key. ------------------------------------------------------------------------------------ function p.isNan(v) return type(v) == 'number' and v ~= v end ------------------------------------------------------------------------------------ -- shallowClone -- -- This returns a clone of a table. The value returned is a new table, but all -- subtables and functions are shared. Metamethods are respected, but the returned -- table will have no metatable of its own. ------------------------------------------------------------------------------------ function p.shallowClone(t) checkType('shallowClone', 1, t, 'table') local ret = {} for k, v in pairs(t) do ret[k] = v end return ret end ------------------------------------------------------------------------------------ -- removeDuplicates -- -- This removes duplicate values from an array. Non-positive-integer keys are -- ignored. The earliest value is kept, and all subsequent duplicate values are -- removed, but otherwise the array order is unchanged. ------------------------------------------------------------------------------------ function p.removeDuplicates(arr) checkType('removeDuplicates', 1, arr, 'table') local isNan = p.isNan local ret, exists = {}, {} for _, v in ipairs(arr) do if isNan(v) then -- NaNs can't be table keys, and they are also unique, so we don't need to check existence. ret[#ret + 1] = v elseif not exists[v] then ret[#ret + 1] = v exists[v] = true end end return ret end ------------------------------------------------------------------------------------ -- numKeys -- -- This takes a table and returns an array containing the numbers of any numerical -- keys that have non-nil values, sorted in numerical order. ------------------------------------------------------------------------------------ function p.numKeys(t) checkType('numKeys', 1, t, 'table') local isPositiveInteger = p.isPositiveInteger local nums = {} for k in pairs(t) do if isPositiveInteger(k) then nums[#nums + 1] = k end end table.sort(nums) return nums end ------------------------------------------------------------------------------------ -- affixNums -- -- This takes a table and returns an array containing the numbers of keys with the -- specified prefix and suffix. For example, for the table -- {a1 = 'foo', a3 = 'bar', a6 = 'baz'} and the prefix "a", affixNums will return -- {1, 3, 6}. ------------------------------------------------------------------------------------ function p.affixNums(t, prefix, suffix) checkType('affixNums', 1, t, 'table') checkType('affixNums', 2, prefix, 'string', true) checkType('affixNums', 3, suffix, 'string', true) local function cleanPattern(s) -- Cleans a pattern so that the magic characters ()%.[]*+-?^$ are interpreted literally. return s:gsub('([%(%)%%%.%[%]%*%+%-%?%^%$])', '%%%1') end prefix = prefix or '' suffix = suffix or '' prefix = cleanPattern(prefix) suffix = cleanPattern(suffix) local pattern = '^' .. prefix .. '([1-9]%d*)' .. suffix .. '$' local nums = {} for k in pairs(t) do if type(k) == 'string' then local num = mw.ustring.match(k, pattern) if num then nums[#nums + 1] = tonumber(num) end end end table.sort(nums) return nums end ------------------------------------------------------------------------------------ -- numData -- -- Given a table with keys like {"foo1", "bar1", "foo2", "baz2"}, returns a table -- of subtables in the format -- {[1] = {foo = 'text', bar = 'text'}, [2] = {foo = 'text', baz = 'text'}}. -- Keys that don't end with an integer are stored in a subtable named "other". The -- compress option compresses the table so that it can be iterated over with -- ipairs. ------------------------------------------------------------------------------------ function p.numData(t, compress) checkType('numData', 1, t, 'table') checkType('numData', 2, compress, 'boolean', true) local ret = {} for k, v in pairs(t) do local prefix, num = mw.ustring.match(tostring(k), '^([^0-9]*)([1-9][0-9]*)$') if num then num = tonumber(num) local subtable = ret[num] or {} if prefix == '' then -- Positional parameters match the blank string; put them at the start of the subtable instead. prefix = 1 end subtable[prefix] = v ret[num] = subtable else local subtable = ret.other or {} subtable[k] = v ret.other = subtable end end if compress then local other = ret.other ret = p.compressSparseArray(ret) ret.other = other end return ret end ------------------------------------------------------------------------------------ -- compressSparseArray -- -- This takes an array with one or more nil values, and removes the nil values -- while preserving the order, so that the array can be safely traversed with -- ipairs. ------------------------------------------------------------------------------------ function p.compressSparseArray(t) checkType('compressSparseArray', 1, t, 'table') local ret = {} local nums = p.numKeys(t) for _, num in ipairs(nums) do ret[#ret + 1] = t[num] end return ret end ------------------------------------------------------------------------------------ -- sparseIpairs -- -- This is an iterator for sparse arrays. It can be used like ipairs, but can -- handle nil values. ------------------------------------------------------------------------------------ function p.sparseIpairs(t) checkType('sparseIpairs', 1, t, 'table') local nums = p.numKeys(t) local i = 0 local lim = #nums return function () i = i + 1 if i <= lim then local key = nums[i] return key, t[key] else return nil, nil end end end ------------------------------------------------------------------------------------ -- size -- -- This returns the size of a key/value pair table. It will also work on arrays, -- but for arrays it is more efficient to use the # operator. ------------------------------------------------------------------------------------ function p.size(t) checkType('size', 1, t, 'table') local i = 0 for _ in pairs(t) do i = i + 1 end return i end local function defaultKeySort(item1, item2) -- "number" < "string", so numbers will be sorted before strings. local type1, type2 = type(item1), type(item2) if type1 ~= type2 then return type1 < type2 elseif type1 == 'table' or type1 == 'boolean' or type1 == 'function' then return tostring(item1) < tostring(item2) else return item1 < item2 end end ------------------------------------------------------------------------------------ -- keysToList -- -- Returns an array of the keys in a table, sorted using either a default -- comparison function or a custom keySort function. ------------------------------------------------------------------------------------ function p.keysToList(t, keySort, checked) if not checked then checkType('keysToList', 1, t, 'table') checkTypeMulti('keysToList', 2, keySort, {'function', 'boolean', 'nil'}) end local arr = {} local index = 1 for k in pairs(t) do arr[index] = k index = index + 1 end if keySort ~= false then keySort = type(keySort) == 'function' and keySort or defaultKeySort table.sort(arr, keySort) end return arr end ------------------------------------------------------------------------------------ -- sortedPairs -- -- Iterates through a table, with the keys sorted using the keysToList function. -- If there are only numerical keys, sparseIpairs is probably more efficient. ------------------------------------------------------------------------------------ function p.sortedPairs(t, keySort) checkType('sortedPairs', 1, t, 'table') checkType('sortedPairs', 2, keySort, 'function', true) local arr = p.keysToList(t, keySort, true) local i = 0 return function () i = i + 1 local key = arr[i] if key ~= nil then return key, t[key] else return nil, nil end end end ------------------------------------------------------------------------------------ -- isArray -- -- Returns true if the given value is a table and all keys are consecutive -- integers starting at 1. ------------------------------------------------------------------------------------ function p.isArray(v) if type(v) ~= 'table' then return false end local i = 0 for _ in pairs(v) do i = i + 1 if v[i] == nil then return false end end return true end ------------------------------------------------------------------------------------ -- isArrayLike -- -- Returns true if the given value is iterable and all keys are consecutive -- integers starting at 1. ------------------------------------------------------------------------------------ function p.isArrayLike(v) if not pcall(pairs, v) then return false end local i = 0 for _ in pairs(v) do i = i + 1 if v[i] == nil then return false end end return true end ------------------------------------------------------------------------------------ -- invert -- -- Transposes the keys and values in an array. For example, {"a", "b", "c"} -> -- {a = 1, b = 2, c = 3}. Duplicates are not supported (result values refer to -- the index of the last duplicate) and NaN values are ignored. ------------------------------------------------------------------------------------ function p.invert(arr) checkType("invert", 1, arr, "table") local isNan = p.isNan local map = {} for i, v in ipairs(arr) do if not isNan(v) then map[v] = i end end return map end ------------------------------------------------------------------------------------ -- listToSet -- -- Creates a set from the array part of the table. Indexing the set by any of the -- values of the array returns true. For example, {"a", "b", "c"} -> -- {a = true, b = true, c = true}. NaN values are ignored as Lua considers them -- never equal to any value (including other NaNs or even themselves). ------------------------------------------------------------------------------------ function p.listToSet(arr) checkType("listToSet", 1, arr, "table") local isNan = p.isNan local set = {} for _, v in ipairs(arr) do if not isNan(v) then set[v] = true end end return set end ------------------------------------------------------------------------------------ -- deepCopy -- -- Recursive deep copy function. Preserves identities of subtables. ------------------------------------------------------------------------------------ local function _deepCopy(orig, includeMetatable, already_seen) if type(orig) ~= "table" then return orig end -- already_seen stores copies of tables indexed by the original table. local copy = already_seen[orig] if copy ~= nil then return copy end copy = {} already_seen[orig] = copy -- memoize before any recursion, to avoid infinite loops for orig_key, orig_value in pairs(orig) do copy[_deepCopy(orig_key, includeMetatable, already_seen)] = _deepCopy(orig_value, includeMetatable, already_seen) end if includeMetatable then local mt = getmetatable(orig) if mt ~= nil then setmetatable(copy, _deepCopy(mt, true, already_seen)) end end return copy end function p.deepCopy(orig, noMetatable, already_seen) checkType("deepCopy", 3, already_seen, "table", true) return _deepCopy(orig, not noMetatable, already_seen or {}) end ------------------------------------------------------------------------------------ -- sparseConcat -- -- Concatenates all values in the table that are indexed by a number, in order. -- sparseConcat{a, nil, c, d} => "acd" -- sparseConcat{nil, b, c, d} => "bcd" ------------------------------------------------------------------------------------ function p.sparseConcat(t, sep, i, j) local arr = {} local arr_i = 0 for _, v in p.sparseIpairs(t) do arr_i = arr_i + 1 arr[arr_i] = v end return table.concat(arr, sep, i, j) end ------------------------------------------------------------------------------------ -- length -- -- Finds the length of an array, or of a quasi-array with keys such as "data1", -- "data2", etc., using an exponential search algorithm. It is similar to the -- operator #, but may return a different value when there are gaps in the array -- portion of the table. Intended to be used on data loaded with mw.loadData. For -- other tables, use #. -- Note: #frame.args in frame object always be set to 0, regardless of the number -- of unnamed template parameters, so use this function for frame.args. ------------------------------------------------------------------------------------ function p.length(t, prefix) -- requiring module inline so that [[Module:Exponential search]] which is -- only needed by this one function doesn't get millions of transclusions local expSearch = require("Module:Exponential search") checkType('length', 1, t, 'table') checkType('length', 2, prefix, 'string', true) return expSearch(function (i) local key if prefix then key = prefix .. tostring(i) else key = i end return t[key] ~= nil end) or 0 end ------------------------------------------------------------------------------------ -- inArray -- -- Returns true if searchElement is a member of the array, and false otherwise. -- Equivalent to JavaScript array.includes(searchElement) or -- array.includes(searchElement, fromIndex), except fromIndex is 1 indexed ------------------------------------------------------------------------------------ function p.inArray(array, searchElement, fromIndex) checkType("inArray", 1, array, "table") -- if searchElement is nil, error? fromIndex = tonumber(fromIndex) if fromIndex then if (fromIndex < 0) then fromIndex = #array + fromIndex + 1 end if fromIndex < 1 then fromIndex = 1 end for _, v in ipairs({unpack(array, fromIndex)}) do if v == searchElement then return true end end else for _, v in pairs(array) do if v == searchElement then return true end end end return false end ------------------------------------------------------------------------------------ -- merge -- -- Given the arrays, returns an array containing the elements of each input array -- in sequence. ------------------------------------------------------------------------------------ function p.merge(...) local arrays = {...} local ret = {} for i, arr in ipairs(arrays) do checkType('merge', i, arr, 'table') for _, v in ipairs(arr) do ret[#ret + 1] = v end end return ret end ------------------------------------------------------------------------------------ -- extend -- -- Extends the first array in place by appending all elements from the second -- array. ------------------------------------------------------------------------------------ function p.extend(arr1, arr2) checkType('extend', 1, arr1, 'table') checkType('extend', 2, arr2, 'table') for _, v in ipairs(arr2) do arr1[#arr1 + 1] = v end end return p 4n03zk6kcoeg4gz82mieeh94c1szcjy Module:Yesno 828 273 10679 8820 2021-02-19T00:52:55Z commons>Magog the Ogre 0 6 revisions imported from [[:w:en:Module:Yesno]] 8820 Scribunto text/plain -- Function allowing for consistent treatment of boolean-like wikitext input. -- It works similarly to the template {{yesno}}. return function (val, default) -- If your wiki uses non-ascii characters for any of "yes", "no", etc., you -- should replace "val:lower()" with "mw.ustring.lower(val)" in the -- following line. val = type(val) == 'string' and val:lower() or val if val == nil then return nil elseif val == true or val == 'yes' or val == 'y' or val == 'true' or val == 't' or val == 'on' or tonumber(val) == 1 then return true elseif val == false or val == 'no' or val == 'n' or val == 'false' or val == 'f' or val == 'off' or tonumber(val) == 0 then return false else return default end end swdskn7svew8i9wuydn9uj5l3r2ghcs 10680 9092 2026-08-25T23:38:28Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Yesno]] 1152 Scribunto text/plain -- Function allowing for consistent treatment of boolean-like wikitext input. -- It works similarly to the template {{yesno}}. return function (val, default) -- If your wiki uses non-ascii characters for any of "yes", "no", etc., you -- should replace "val:lower()" with "mw.ustring.lower(val)" in the -- following line. val = type(val) == 'string' and val:lower() or val if val == nil then return nil elseif val == true or val == 'yes' or val == 'y' or val == 'true' or val == 't' or val == 'on' or tonumber(val) == 1 then return true elseif val == false or val == 'no' or val == 'n' or val == 'false' or val == 'f' or val == 'off' or tonumber(val) == 0 then return false else return default end end swdskn7svew8i9wuydn9uj5l3r2ghcs A Zonge Ga Ada 0 359 10565 1901 2026-08-25T22:19:01Z Yakubu19 208 10565 wikitext text/x-wiki '''Zonge sun ati malaji la apina monango ga (kura) Ada ke sunni (kare) Zonge ga Ada,''' Ada ley lawoto bawulo zonge let lawoto bawulo ba Sato golluy ye kala zonge Na Ada in innajino mala Shi kirbe lawoshi Shi iimuadi. == Zonge ndajjito == Zonge ndajjito it's konni lawoto zonge Taman jisu Ada fashion inde ndajjito ga mocci ndajjito ga mocce fashion ga dandeto '''zonge''' Ringo volume otto takkoyi a da Ada Kala a auwa fashion ita mala kobam mala ye boli Ada aga mocci ndajjito ga ada a donor dandeto yeyye yeyye ye fashion nossu ye kumum == Ɗiwwa == 1dxycjwhu5xwawoixa1d6tiw94vhsms Abba Kabir Yusuf 0 360 10516 8392 2026-08-25T14:43:12Z Mamie05 196 10516 wikitext text/x-wiki {{Databox|item=Q91908076}} '''Abba Kabir Yusuf''' (layannin foti 5 ga taren un'an 1 ga'ga sunin un'an 1963)<ref>https://www.okaynews.com/who-is-abba-kabir-yusuf-nine-facts-about-the-governor-elect-of-kano-state/</ref> An siyasa ga [[Nijeriya]] la isshin iiy ruta ga matsayi gomna un [[Kano]], Yan ko teren 5 sunin un'an 2023, (2) iyi ruta ga matsayi comishinan ruta, buninshe ga mecee- mecce. GA matira buta hukunci un Kano, ga'ga sunin 2011 zuwa 2015, ga lokaci gomnati [[Rabi'u Musa Kwankwaso|Rabiu Musa Kwankwaso]]. ==Zalshe Rayuwa Ni ga Ilimi== Abba Kabir Yusuf (layanningu sunii ABUBAKAR laa undoni ga ABBA, mabu sunii ga hukuma CE). Layannin futi 5 ga teren un'an [[1]], 1963. Gaga [[Filanti|fillantin]] sullubawa, la Mette aji mulki Kano koga Bani alhaji Kabir Yusuf. GA malama khadijatul Naja'atu ga lardi Gaya inga Kano. YUSUF zalu karatuni ga muhammadiya Yan isshin a lawo GA ul'olli Dishini an mutu, Danmukwayon Kano. Alhaji yusuf Bashari ( Dan Galadiman Kano, yusuf Kala dishitii MOI un Siri, Abdullahi maje karofi ). Laga lokacinye isshin ji an wakilta Gaya guru la ul'olli Kano, [[Nijeriya|Nigeria]]. Isshin zalu makaranta ni un firamare, ga sumaila gaga sunin 1968 zuwa 1975, boi ishin takawoyi sako mena Bo secondray ni ga makaranta gomnati na Dawakin Tofa, ko boi majini makaranta gomnati un lautai ga Gumel ishin taka makaranta ni un secondray ga sunin 1980, ishin watu izini ga Federal polytechnic Mubi ga'ga manshi jiha Gongola la hunssene she itaji [[Adamawa|ADAMAWA]]. Ishin wa Diploma ni in ulii ( ND ). Ga'ga injiniya tajiya un fetila ga sunin 1985. Koboi isshin wadu Diploma in Siri ( HAND ). In injiniya ga'ga albarkatu Amma GA injiniya muhali ko Kaduna polytechnic ga 1989.<ref>title=Kano State Governor |url=https://nggovernorsforum.org/index.php/the-ngf/governors/553-kano-state-governor |access-date=11 July 2024 |website=nggovernorsforum.org}}</ref> <ref>date=20 March 2023 |title=CLOSE-UP: Yusuf Abba, Kwankwaso's PA and son-in-law who will be governor of Kano |url=https://www.thecable.ng/profile-yusuf-abba-kwankwasos-pa-and-son-in-law-who-will-be-governor-of-kano/ |access-date=11 July 2024 |website=[[TheCable]]<nowiki>}}</nowiki></ref> Yusuf ko boi ni jami'ah Bayero un Kano, ( BUK ). Kai isshin wa Diploma in an balau. GA diploma in an balau ga fanni goomah.<ref>A. Aliyu |date=20 March 2023 |title=Who is Abba Kabir Yusuf? Nine Facts About the Governor-elect of Kano State |url=https://www.okay.ng/who-is-abba-kabir-yusuf-nine-facts-about-the-governor-elect-of-kano-state/ |access-date=29 August 2024 |website=Okay}}</ref> ==Ɗiwwa== [[Panni:Miyya]] 1qp500tpvsx47qg4zn99m9wqhhvqbtr 10517 10516 2026-08-25T17:23:59Z An pikka 367 10517 wikitext text/x-wiki {{Databox|item=Q91908076}} '''Abba Kabir Yusuf''' (layannin foti 5 ga taren in an Modi 1 ga'ga sunin un'an 1963)<ref>https://www.okaynews.com/who-is-abba-kabir-yusuf-nine-facts-about-the-governor-elect-of-kano-state/</ref> An siyasa ga [[Nijeriya]] la isshin iiy ruta ga matsayi gomna un [[Kano]], Yan ko tere in an badi 5 sunin un'an 2023, (2) iyi ruta ga matsayi comishinan ruta, buninshe ga mecee- mecce. GA matira bota hukunci Kano, ga'ga sunin 2011 zuwa 2015, ga lokaci gomnati [[Rabi'u Musa Kwankwaso|Rabiu Musa Kwankwaso]]. ==Zalshe Rayuwa Ni ga Ilimi== Abba Kabir Yusuf (layanningu sunii ABUBAKAR laa undoni ga ABBA, mabu sunii ga hukuma CE). Layannin futi 5 ga teren un'an [[1]], 1963. Gaga [[Filanti|fillantin]] sullubawa, la Mette aji mulki Kano koga Bani alhaji Kabir Yusuf. GA malama khadijatul Naja'atu ga lardi Gaya inga Kano. YUSUF zalu karatuni ga muhammadiya Yan isshin a lawo GA ul'olli Dishini an mutu, Danmukwayon Kano. Alhaji yusuf Bashari ( Dan Galadiman Kano, yusuf Kala dishitii MOI un Siri, Abdullahi maje karofi ). Laga lokacinye isshin ji an wakilta Gaya guru la ul'olli Kano, [[Nijeriya|Nigeria]]. Isshin zalu makaranta ni un firamare, ga sumaila gaga sunin 1968 zuwa 1975, boi ishin takawoyi sako mena Bo secondray ni ga makaranta gomnati na Dawakin Tofa, ko boi majini makaranta gomnati un lautai ga Gumel ishin taka makaranta ni un secondray ga sunin 1980, ishin watu izini ga Federal polytechnic Mubi ga'ga manshi jiha Gongola la hunssene she itaji [[Adamawa|ADAMAWA]]. Ishin wa Diploma ni in ulii ( ND ). Ga'ga injiniya tajiya un fetila ga sunin 1985. Koboi isshin wadu Diploma in Siri ( HAND ). In injiniya ga'ga albarkatu Amma GA injiniya muhali ko Kaduna polytechnic ga 1989.<ref>title=Kano State Governor |url=https://nggovernorsforum.org/index.php/the-ngf/governors/553-kano-state-governor |access-date=11 July 2024 |website=nggovernorsforum.org}}</ref> <ref>date=20 March 2023 |title=CLOSE-UP: Yusuf Abba, Kwankwaso's PA and son-in-law who will be governor of Kano |url=https://www.thecable.ng/profile-yusuf-abba-kwankwasos-pa-and-son-in-law-who-will-be-governor-of-kano/ |access-date=11 July 2024 |website=[[TheCable]]<nowiki>}}</nowiki></ref> Yusuf ko boi ni jami'ah Bayero un Kano, ( BUK ). Kai isshin wa Diploma in an balau. GA diploma in an balau ga fanni goomah.<ref>A. Aliyu |date=20 March 2023 |title=Who is Abba Kabir Yusuf? Nine Facts About the Governor-elect of Kano State |url=https://www.okay.ng/who-is-abba-kabir-yusuf-nine-facts-about-the-governor-elect-of-kano-state/ |access-date=29 August 2024 |website=Okay}}</ref> ==Ɗiwwa== [[Panni:Miyya]] h1cw89qlqxmnmh3futnof7v8fxo4xa9 Abdoulay diaby 0 362 10518 8394 2026-08-25T17:24:17Z Mamie05 196 10518 wikitext text/x-wiki {{Databox|item=Q2821368}} '''Abdoulay Diaby''' (Layannin ga foti 21 ga tere mayu soninshe in 1991) kwararre an kwallo sheke ji la aji Wano inne ga matsayin an bomfo Sara gede ga Al Jazir. Layanin ga faransa aji wakilta Mali GA mataki woli ga woli.<ref name=":1">Sedan: Abdoulay Diaby passe pro" (in French). Foot National. 13 January 2011. Retrieved 29 August 2018.</ref> == Ruta Club/Kungiya == === Sedan === Kala layannin ga Nanterra [[Faransa]], Diaby zalu ruta ga sedan koboii INT Clairfontaine (Cibiya kwallo sheke in faransa gadango) . Koboii tidon ga bomfo ga sedan. Diaby zalu gowa bomfo in fari ga foti 4 ga tere mayu soninshe in 2010 ga Dijon inko ningo ga matsayi la a mata gurbi Lossemy karaboue koga minti in 73 ga gawa yakul nasara ga Tina 3-1 saku fatako fadir koboii sombodi balau ga foti 7 ga tere mayu soninshe,, 2010 kala saku nakoyi ga matsa la a mata gurbi ga bomfo la aji Indo 0-0 ga AC Arles - Avignon la tidon ga gowa bomfo balau soninshe,2009 zuwa 2010. Koga soninshe '''2010''' zuwa '''2011''' Diaby zalu baiyina ga tawagani in 20 ga tere Nuwambah ga soninshe 2010 inko zalu bomfo ga ga nasara 2-0 gako FC Sateinseltz GA zagaye in bawulo in coupe ga Faransa. Ga foti 13 ga tere janairu soninshe in 2011 Diaby zowu Sara gako kwantiraki ni in kwararru in farko jizani ga kulob in yutu ishin har Soni in 2014 satu kwallo in farko ga kungiya kala kafu koga kwallagen koga yakul nasara ga Tina 5-3 ga FC Istres ga foti 11 ga tere maris soninshe 2011. Koboii sombodi bawulo ga foti 18 ga tere maris soninshe in 2011 satu kwallo ga bomfo la gowangoyi indan go 1-1 ga Le Hevra. Ga tetteke kala bomfo in soninshe 2010 zuwa 2011 ti Dom ga gowa bomfo 11 kala satu kwallo balau ga shaf gasa.<ref>FEUILLE DE MATCH FC STEINSELTZ 0–2 CS SEDAN" (in French). Ligue de Football Professionnel. 20 November 2010. Retrieved 29bAugust 2018.</ref> Koga kaka soninshe 2011 zuwa 2012 Diaby satu kwallo ni in farko koga kaka bomfo in gawa GA yakul nasara 2-1 ga Clermont foot ga 12 ga tere Agusta soninshe in 2011. Koboii tere modi, ga foti 16 ga tere satumba soninshe in 2011 sakutu Sena kwallo ga bomfo ga aji inayi ga Le Hevra ga Tina 3-0 jamji satu kwallo kunum koga tere oktoba inko satu kwallaye kunum gako Angers SCO (sheke balau) ga Lille. Kala alatu tetteke fari in tere balau ga foti 9 ga tere maris ga soninshe in 2012 ga lokaci koga Sena kwallo ga bomfo mate indan 1-1 ga US Boulogna . Kasatun ga lokaci la zoii GA foti 18 ga tere mayu soninshe in 2012 satu kwallo ga ga nasara 2-1 gako Nantes . Shafga gutto la iwoyi ga lokaci kakaye soninshe in 2011 zuwa 2012 Diaby ti Dom ga gowa bomfo 31 kala satu kwallo bonumga gasaye.<ref>FEUILLE DE MATCH DIJON FCO 3–1 CS SEDAN" (in French). Ligue de Football Professionnel. 4 May 2010. Retrieved 29 August 2018.</ref> == Lardi == Faransa == Ahre == * [[Faransi]] * [[Inglish]] == Diwwa == 24c4igk2bl9pfiknjb6ly56zloz6te5 Abraham Lincoln 0 367 10566 8399 2026-08-25T22:24:13Z Yakubu19 208 10566 wikitext text/x-wiki {{Databox|item=Q91}} '''Abraham Lincoln''' (/ˈlɪŋkən/ LINK-ən; February badi 12, 1809 – April 15, 1865) E'shiji President in dir bacci-modi ga America (16th president of the United States), duwu mukami ko soni badi alif 1861 har zuwa lokacin ya duwan zau ni ga soni badi alif 1865. Eshi a ga biya don ga washin la ango ga zaman onzi  (American Civil War), ee kokari rankata ga lamar 'yorta gojjo ga gojjita mi' yya (slavery), saku lamar goma [[America]] ke mate kuman tun zoini rankata. Layannin ga Kentucky, Lincoln Siri ga Western frontierya feten kon boni talakawa. La mate ilmantu GA kossu majini lauya ga Illinois. Kala majini bo shugaba jam'iya whig, itu Soni hordo 8 GA majalisa kala itu Soni balau 2 ga Congress, Janji tidon GA ruta lauyani . Inko inne anin majalisa sakan ewe zoni ga goru prairie an tinadom GA gojja bayinshe majini GA siyasa 1854. ==Ɗiwwa== oydupivt6h6dztpx8wgt0ek1i6gnv4v Adekunle Gold 0 379 10520 8411 2026-08-25T17:35:19Z Yakubu19 208 10520 wikitext text/x-wiki {{Databox|item=Q21280581}} [[Fayil:Adekunle Goldddd.jpg|thumb|Hoton adekunle]] [[Fayil:Adekunle Gold from Lagos state.png|thumb|adekunle gold lagos]] [[Fayil:Adekunle Golddd.jpg|thumb|Adekunle Gold]] [[Fayil:GNAKO.jpg|thumb|Adekunle Gold]] '''Adekunle gold''' Kosoko ba Adekunle Gold eshin ye  an aruu woli [[Nijeriya]]o<ref>https://metro.co.uk/2018/07/20/adekunle-gold-went-king-photoshop-africas-newest-pop-star-7740101/</ref> Ga Soni badi alif in dubu modi ga dalma bonum ga kohurdo ga bawlo 1987 Ga burni [[Lagos]]. ==Discography== ===Studio albums=== * ''[[Gold (Adekunle Gold album)|Gold]]'' (2016) * ''[[About 30]]'' (2018) * ''[[Afro Pop, Vol. 1]]'' (2020) * ''[[Catch Me If You Can (Adekunle Gold album)|Catch Me If You Can]]'' (2022) * ''[[Tequila Ever After]]'' (2023) * ''[[Fuji (album)|Fuji]]'' (2025) ==Awards and nominations== {| class ="wikitable" |- !Year !Award ceremony !Prize !Recipient/Nominated work !Result !Ref |- |- |2015 |[[2015 Nigeria Entertainment Awards|Nigeria Entertainment Awards]] |Best New Act |"Himself" |{{Won}} | |- | rowspan="3" |2016 | rowspan="2" | [[2016 Nigeria Entertainment Awards|Nigeria Entertainment Awards]] |Best Song | Pick Up |{{Won}} | |- |Best New Act to Watch |Himself |{{Won}} | |- |[[The Headies 2016|The Headies]] |Best Alternative Song |"Sade" |{{Won}} | |- | rowspan="3" |2017 |[[City People Entertainment Awards]] |Album of the Year |"Himself" |{{Won}} | |- |City People Entertainment Awards |Collabo of the Year |"Himself and Simi" |{{Won}} | |- |IARA |Best African Music Artist | rowspan="2" |"Himself" |{{Won}} | |- | rowspan="2" |2021 | rowspan="2" |Net Honours |Most Popular Musician |{{Nom}} | rowspan="2" |<ref>{{Cite news|title=Net Honours – The Class of 2021|url=https://thenet.ng/net-honours-class-of-2021/|location=Lagos, Nigeria|url-status=live|access-date=2021-07-21|newspaper=[[The Netng|The NET]]|language=en-US|archive-url=https://web.archive.org/web/20210621172630/https://thenet.ng/net-honours-class-of-2021/ |archive-date=2021-06-21 }}</ref> |- |Most Played RnB Song |"Pami" {{Small|([[DJ Tunez]] featuring Wizkid Adekunle Gold & [[Omah Lay]])}} |{{Nom}} |- |2023 |[[The Headies 2023|The Headies]] |Songwriter of the Year |Himself for ([[Simi (singer)|Simi]] – "Loyal") |{{Won}} |<ref>{{Cite news |last1=Arogbonlo |first1=Israel |title=Full list: See 2023 Headies Award winners |url=https://tribuneonlineng.com/full-list-see-2023-headies-award-winners/ |newspaper=[[Nigerian Tribune]]|access-date=10 September 2023 |date=4 September 2023}}</ref> |- |2024 |TurnTable Music Awards |Outstanding Achievement in Music in Film |Himself for "[[The Book of Clarence#Music|Book of Clarence]]" and "Christmas in Lagos" |{{Won}} |<ref>{{Cite web |title=The TurnTable 2024 Music Awards |url=https://www.turntablecharts.com/magazine/6th/134 |website=TurnTable Charts |publisher=TurnTable |access-date=2 April 2025}}</ref> |} == Diwwa == b2c1cus3zzwnhgvsn73pj8q7lvnp3z2 Al-Qur'an 0 401 10567 8429 2026-08-25T22:36:42Z Yakubu19 208 10567 wikitext text/x-wiki {{Databox|item=Q428}} [[Fayil:Qur'aan.jpg|thumb]] '''Al-Qur'an'''<ref>https://en.wikipedia.org/wiki/Quran</ref> (Larabci, القرآن al-Qur'an) ba kalama Alkur'an ga siri ni, mana la monangoyi, Ishin littafilla [[Allah]] oninmungo ko harshe annabin Ripo(Rahama), wato larabci kala Ishin littafilla Allah fatu yauta shap littafi ko konni (kala littafi Allah la alanningo andisa la Allah oni woyi boini) mana yadda Allah oninmungo annabawa la gedan jisu inko [[Annabi Muhammadu|annabi muhammadu]] (S A W) Ishin gonto bo annabawa Allah.<ref>https://en.wikipedia.org/wiki/Al-Tabari</ref><ref>https://aboutislam.net/counseling/ask-about%E2%80%91islam/islam%E2%80%91final%E2%80%91message%E2%80%91quran%E2%80%91last%E2%80%91testament/{{Dead link|date=July 2025 |bot=InternetArchiveBot |fix-attempted=yes }}</ref><ref>https://islamhouse.com/read/en/the-last-revelation-2827843</ref><ref>https://www.masjidulmumineen.org.tt/revelation-wahy-the-belief-that-the-quran-is-the-final-unaltered-word-of-allah/</ref><ref>https://quranhouse.org/en/article/1871</ref><ref>https://www.islamreligion.com/article/pdf/2652</ref><ref>https://www.islamandquran.org/fatwas/the-quran-the-final-link-of-divine-revelation.html</ref><ref>https://quransubjects.wordpress.com/2019/12/03/muhammad-seal/</ref><ref>https://www.jstor.org/stable/10.13173/zeitdeutmorggese.164.1.0065</ref><ref>https://www.mdpi.com/2077-1444/12/1/4</ref><ref>https://aboutislam.net/counseling/ask-about-islam/why-didnt-god-preserve-the-previous-books/</ref> Surat al-Nisa'i La Allah yautin goyi ga ayoyini ga annabi [[musulwa]] annabi muhammad (S.A.W) ko Sara mala'ika jibrilu. Ga a kida musulwa, kur'ani Ishin ji laga muhimmanci kala yatu siro mu'ujiza annabi muhammadu (S.A.W) Manzone in jire.<ref>dictionary.reference.com: [http://dictionary.reference.com/browse/Koran koran]</ref><ref>https://www.islamweb.net/en/fatwa/90933/how%E2%80%91the%E2%80%91quran%E2%80%91was%E2%80%91revealed%E2%80%91from%E2%80%91allaah%E2%80%91to%E2%80%91his%E2%80%91prophet</ref><ref>https://www.britannica.com/topic/Quran</ref><ref>https://www.islamreligion.com/articles/150/viewall/miracles-of-muhammad-part-1</ref><ref>https://islamhouse.com/read/en/the-last-revelation-2827843</ref><ref>https://islamhouse.com/read/en/the-last-revelation-2827843</ref><ref>https://qurantalkblog.com/2023/04/17/muhammads-only-miracle/</ref> Shariya musulwa, la aji unda to ga shari'a, ta dogara ji gako kur'ani (madogarani in farko), Ishin littafin la musulwa la aji karintayi kala ayoyi kur'ani daban- daban gaga lukuram ye Andi addu'o inni.<ref>Bell, Richard; Watt, William Montgomery (1970). Bell's introduction to the Qurʼān. Edinburgh University Press. ISBN 978-0-7486-0597-2.</ref> Hankali la ga lafiya ni ga tsafta tunani in lawo adamu ga rutani inso ga lama foti yalla tabbitu jini ka cewa lukuram onu, gomtattu kulawa ga [[duniya]], ga yanci lawo adamu (21) lukuram kala mah Ina shiru , [[maluwa]] ununtungo ga misali cewa Andi kuskure ga direbobi la aji kunna lukuram ga ga motasu janji miyya kala aji ta mosa, gako cewa zunubi Ishin aji wenayi ga ladasa. Kala atiye aji wena memu aji karintayi lukuram awena lada sa? [[Malum abubakar Abdullahi Goran Namaye]] foruwoyi siri atilla aji memu Ishin karinte lukuram janji Ishin awena ladasa, Ishin ji aiyi inko Allah kawaii. Foruwoyi lema memu aji karintayi aji wena kuskure sheye a genani wena lada sa, inko foruwoyi memu a wena lada balau, jam sake forayi lukuram Ishin karatulla lema Ishin di gama malum adin [[musulunci]] foru yamodi sa azowa memu kine wena lada inko Ishin a Ina [[karatu]] lukuram Ishin ji karatu ga beyi la andi tsarki sa mana gede boibin "ya Maddi aji zowa wena lada Ishin ji memu diwo Goma Ishin awatu dilo ni ajita karinta lukuram ansiro. Kala Andi godon mosa, to awena zunubi memu awena Yi gako ishin wai lada, inkume malum abubakar goran Namaye. == Hotuna: == <gallery> File:Ibn al-Bawwab - Qurʾan f. 278v-279r.jpg|Mushafin Ibn al-Bawwab. File:Quran Surah Al Kahf.png|surah surorin alkur'ani, al-Kahf File:Birmingham Quran manuscript.jpg|Mushafin al-qurani wafatin Annabi [[Muhammad]] SAW a Birmingham kasar Ingila File:The Mushaf of Imam Ali.jpg|mushaf din Imam Ali RA File:Qur'ans.jpg|Bugun Qur'ani a 1907 File:المخطط الصغير للقراءات الأربعة عشر بالعربية والإنجليزية.pdf|Rubutun qurani a warsh da [[turanci]] File:Melaka Al-Quran Museum - Exhibition Hall.jpg|Dakin alkuranai a Meseum din al-Quran a Melaka. </gallery> == Ɗiwwa == m1mgk83xlqkyt6jppiknngohqus73en Barrack Obama 0 453 10524 10477 2026-08-25T19:43:07Z Abu Sadeeq77 197 10524 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. == Ɗiwwa == 8xq7uy1ro0pck92gr9tdxtpbmtshz62 10525 10524 2026-08-25T19:47:52Z Abu Sadeeq77 197 10525 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; == Ɗiwwa == 1rx7xbzpmy401rivwq1rmrznniklgff 10526 10525 2026-08-25T19:51:54Z Abu Sadeeq77 197 10526 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009) == Ɗiwwa == oj8swzvouxlrjoio3zu9dx02zyixx21 10527 10526 2026-08-25T20:00:05Z Abu Sadeeq77 197 10527 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. == Ɗiwwa == ma4vw0onp5nb2g8mt6cp4x3jhbk754t 10528 10527 2026-08-25T20:06:27Z Abu Sadeeq77 197 10528 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, == Ɗiwwa == oq0vaaarvke02koqpq3lzoer1ilq81n 10529 10528 2026-08-25T20:09:17Z Abu Sadeeq77 197 10529 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. == Ɗiwwa == pgd1tl2nrwld60c04hne2dtcpbcttr1 10530 10529 2026-08-25T20:15:08Z Abu Sadeeq77 197 10530 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. == Ɗiwwa == 9g0t2zngg497cypzw0ly5frs1wme1wf 10531 10530 2026-08-25T20:19:16Z Abu Sadeeq77 197 10531 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): == Ɗiwwa == t2xweinc2phsvwjjm3u06ismmmtaj8q 10532 10531 2026-08-25T20:26:36Z Abu Sadeeq77 197 10532 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. == Ɗiwwa == 5gx19u1astiwfk9q3d2sgkothkq6gww 10533 10532 2026-08-25T20:30:57Z Abu Sadeeq77 197 10533 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015) == Ɗiwwa == ok5jmbhfab1s02n279hu7qk6j6uimbi 10534 10533 2026-08-25T20:39:14Z Abu Sadeeq77 197 10534 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. == Ɗiwwa == 71kun1v2b3lqogd0u2b3cdavu7rjmvi 10535 10534 2026-08-25T20:44:34Z Abu Sadeeq77 197 10535 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, == Ɗiwwa == qmftuzzp3k6ukcw4ukotgb1fvsfaakm 10536 10535 2026-08-25T20:48:14Z Abu Sadeeq77 197 10536 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC == Ɗiwwa == 5qp96g3wwz8cwm5ux3fwlpw3qk4cp36 10537 10536 2026-08-25T20:53:23Z Abu Sadeeq77 197 10537 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC. Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. == Ɗiwwa == 1tfcz0d2ofpbiqcxitjuuszkfzu9m26 10538 10537 2026-08-25T20:59:47Z Abu Sadeeq77 197 10538 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC. Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. == Ɗiwwa == la4cr9ygcltn341e1kbilohdodtnkls 10539 10538 2026-08-25T21:02:35Z Abu Sadeeq77 197 10539 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC. Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). == Ɗiwwa == 16kfc60v03eghpv0uxx7zsusjxaw6k3 10540 10539 2026-08-25T21:06:27Z Abu Sadeeq77 197 10540 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC. Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. == Ɗiwwa == pr0r71vz0dckbyrdp9i4scbytas9gtl 10541 10540 2026-08-25T21:18:43Z Abu Sadeeq77 197 10541 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC. Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). == Ɗiwwa == dt15nn0np57axi7d2m3z3tw97jqvarb 10542 10541 2026-08-25T21:25:44Z Abu Sadeeq77 197 10542 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC. Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971) == Ɗiwwa == hiv77b733tdicmu0go2mjvivm0qafm7 10543 10542 2026-08-25T21:31:10Z Abu Sadeeq77 197 10543 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC. Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." == Ɗiwwa == guymbcyo7uwv28rlsavt6e0lt8hm07u 10544 10543 2026-08-25T21:33:53Z Abu Sadeeq77 197 10544 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC. Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi == Ɗiwwa == rc8o7eybv9snaw9uhohd9vscqam8a39 10545 10544 2026-08-25T21:38:39Z Abu Sadeeq77 197 10545 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC. Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi. == Ilimi == == Ɗiwwa == lmdnen6583d9jithuvrelt9peddq6j2 10546 10545 2026-08-25T21:42:08Z Abu Sadeeq77 197 /* Ilimi */ 10546 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC. Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi. == Ilimi == [File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4). == Ɗiwwa == cppv1tbjsmd9icwaut6df5w7hog5zra 10547 10546 2026-08-25T21:45:08Z Abu Sadeeq77 197 10547 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC. Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi. == Ilimi == [File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4). == Manazarta == == Ɗiwwa == qol013gxtfxfu4gjnruqylrgxfiyxs3 10548 10547 2026-08-25T21:47:29Z Abu Sadeeq77 197 10548 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC. Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi. == Ilimi == [File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4). == Manazarta == {{reflist}} {{Shugabannin Amurka}} [[Category:Shugabannin Amurka]] == Ɗiwwa == chvm1a7wcncc39vjvmx2z7rj06tx4bo 10550 10548 2026-08-25T21:51:57Z Abu Sadeeq77 197 10550 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC. Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi. == Ilimi == [File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4). == Manazarta == {{reflist}} {{Shugabannin Amurka}} == Ɗiwwa == 11qxt4hmx5qhtf6yukux5ri9k0xvgyb 10551 10550 2026-08-25T21:52:37Z Abu Sadeeq77 197 /* Manazarta */ 10551 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC. Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi. == Ilimi == [File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4). == Manazarta == {{reflist}} # http://www.bloomberg.com/news/2011-05-02/death-of-bin-laden-may-strengthen-obama-s-hand-in-domestic-foreign-policy.html {{Shugabannin Amurka}} == Ɗiwwa == 06i3nsnowecuatjm2eojw84u6kdcnyl 10552 10551 2026-08-25T21:54:34Z Abu Sadeeq77 197 10552 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC. Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi. == Ilimi == [File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4). == Manazarta == {{reflist}} # http://www.bloomberg.com/news/2011-05-02/death-of-bin-laden-may-strengthen-obama-s-hand-in-domestic-foreign-policy.html == Ɗiwwa == 1fpsbl4u08mismk08hw9x5e0pn212me 10553 10552 2026-08-25T21:55:19Z Abu Sadeeq77 197 /* Manazarta */ 10553 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC. Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi. == Ilimi == [File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4). == Manazarta == {{reflist}} # http://www.bloomberg.com/news/2011-05-02/death-of-bin-laden-may-strengthen-obama-s-hand-in-domestic-foreign-policy.html # Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008 == Ɗiwwa == poi7t0uzxio048swmogz90lynsshl49 10554 10553 2026-08-25T21:57:10Z Abu Sadeeq77 197 /* Manazarta */ 10554 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC. Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi. == Ilimi == [File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4). == Manazarta == {{reflist}} # http://www.bloomberg.com/news/2011-05-02/death-of-bin-laden-may-strengthen-obama-s-hand-in-domestic-foreign-policy.html # Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008 #Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008 <references></references> == Ɗiwwa == 203rbycmii2movnrqrqfbczwftrabne 10555 10554 2026-08-25T21:59:21Z Abu Sadeeq77 197 /* Manazarta */ 10555 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC. Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi. == Ilimi == [File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4). == Manazarta == {{reflist}} # http://www.bloomberg.com/news/2011-05-02/death-of-bin-laden-may-strengthen-obama-s-hand-in-domestic-foreign-policy.html # Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008 #Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008 #http://www.nato.int/nato_static/assets/pdf/pdf_2011_03/20110325_110325-unified-protector-no-fly-zone.pdf <references></references> == Ɗiwwa == es7tykcq76o7ymhi6xtsc7otl0fbl5z 10556 10555 2026-08-25T22:01:13Z Abu Sadeeq77 197 /* Manazarta */ 10556 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC. Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi. == Ilimi == [File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4). == Manazarta == {{reflist}} # http://www.bloomberg.com/news/2011-05-02/death-of-bin-laden-may-strengthen-obama-s-hand-in-domestic-foreign-policy.html # Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008 #Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008 #http://www.nato.int/nato_static/assets/pdf/pdf_2011_03/20110325_110325-unified-protector-no-fly-zone.pdf #https://www.theatlantic.com/international/archive/2015/09/obama-netanyahu-and-the-future-of-israel/405082/ <references></references> == Ɗiwwa == 1qgimad6kvxys2zkr0b66eolc5793on 10557 10556 2026-08-25T22:06:21Z Abu Sadeeq77 197 /* Manazarta */ 10557 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC. Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi. == Ilimi == [File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4). == Manazarta == {{reflist}} # http://www.bloomberg.com/news/2011-05-02/death-of-bin-laden-may-strengthen-obama-s-hand-in-domestic-foreign-policy.html # Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008 #Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008 #http://www.nato.int/nato_static/assets/pdf/pdf_2011_03/20110325_110325-unified-protector-no-fly-zone.pdf #https://www.theatlantic.com/international/archive/2015/09/obama-netanyahu-and-the-future-of-israel/405082/ #https://www.boston.com/news/education/higher/articles/2007/02/20/obama_got_start_in_civil_rights_practice <references></references> == Ɗiwwa == b10i3j9o57x7varqkxfrg3xpdhisiue 10558 10557 2026-08-25T22:07:41Z Abu Sadeeq77 197 /* Manazarta */ 10558 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC. Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi. == Ilimi == [File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4). == Manazarta == {{reflist}} # http://www.bloomberg.com/news/2011-05-02/death-of-bin-laden-may-strengthen-obama-s-hand-in-domestic-foreign-policy.html # Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008 #Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008 #http://www.nato.int/nato_static/assets/pdf/pdf_2011_03/20110325_110325-unified-protector-no-fly-zone.pdf #https://www.theatlantic.com/international/archive/2015/09/obama-netanyahu-and-the-future-of-israel/405082/ #https://www.boston.com/news/education/higher/articles/2007/02/20/obama_got_start_in_civil_rights_practice #https://web.archive.org/web/20110828104819/http://m.vcstar.com/news/2011/mar/23/ap-news-in-brief/ <references></references> == Ɗiwwa == r52idfo4co6j8pwpyk0tibi4673xewb 10559 10558 2026-08-25T22:08:57Z Abu Sadeeq77 197 /* Manazarta */ 10559 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC. Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi. == Ilimi == [File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4). == Manazarta == {{reflist}} # http://www.bloomberg.com/news/2011-05-02/death-of-bin-laden-may-strengthen-obama-s-hand-in-domestic-foreign-policy.html # Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008 #Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008 #http://www.nato.int/nato_static/assets/pdf/pdf_2011_03/20110325_110325-unified-protector-no-fly-zone.pdf #https://www.theatlantic.com/international/archive/2015/09/obama-netanyahu-and-the-future-of-israel/405082/ #https://www.boston.com/news/education/higher/articles/2007/02/20/obama_got_start_in_civil_rights_practice #https://web.archive.org/web/20110828104819/http://m.vcstar.com/news/2011/mar/23/ap-news-in-brief/ #https://www.nytimes.com/2007/09/09/us/politics/09obama.html <references></references> == Ɗiwwa == ngoukkfe0bzozkyz2puj8f3k5b6hqv2 10560 10559 2026-08-25T22:11:00Z Abu Sadeeq77 197 /* Manazarta */ 10560 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC. Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi. == Ilimi == [File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4). == Manazarta == {{reflist}} # http://www.bloomberg.com/news/2011-05-02/death-of-bin-laden-may-strengthen-obama-s-hand-in-domestic-foreign-policy.html # Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008 #Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008 #http://www.nato.int/nato_static/assets/pdf/pdf_2011_03/20110325_110325-unified-protector-no-fly-zone.pdf #https://www.theatlantic.com/international/archive/2015/09/obama-netanyahu-and-the-future-of-israel/405082/ #https://www.boston.com/news/education/higher/articles/2007/02/20/obama_got_start_in_civil_rights_practice #https://web.archive.org/web/20110828104819/http://m.vcstar.com/news/2011/mar/23/ap-news-in-brief/ #https://www.nytimes.com/2007/09/09/us/politics/09obama.html #"Kwafin la zenani". Archived from the original on 2008-06-17. Retrieved 2024-02-05 <references></references> == Ɗiwwa == 2hzx8ahdvhkavbwus7ifaqrpdf0sp5y 10561 10560 2026-08-25T22:11:57Z Abu Sadeeq77 197 /* Manazarta */ 10561 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC. Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi. == Ilimi == [File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4). == Manazarta == {{reflist}} # http://www.bloomberg.com/news/2011-05-02/death-of-bin-laden-may-strengthen-obama-s-hand-in-domestic-foreign-policy.html # Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008 #Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008 #http://www.nato.int/nato_static/assets/pdf/pdf_2011_03/20110325_110325-unified-protector-no-fly-zone.pdf #https://www.theatlantic.com/international/archive/2015/09/obama-netanyahu-and-the-future-of-israel/405082/ #https://www.boston.com/news/education/higher/articles/2007/02/20/obama_got_start_in_civil_rights_practice #https://web.archive.org/web/20110828104819/http://m.vcstar.com/news/2011/mar/23/ap-news-in-brief/ #https://www.nytimes.com/2007/09/09/us/politics/09obama.html #"Kwafin la zenani". Archived from the original on 2008-06-17. Retrieved 2024-02-05 #Scott (2011), pp. 87–93. <references></references> == Ɗiwwa == 656iftx4evc24w6yaof0is0is3d0nnh 10562 10561 2026-08-25T22:13:21Z Abu Sadeeq77 197 /* Manazarta */ 10562 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC. Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi. == Ilimi == [File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4). == Manazarta == {{reflist}} # http://www.bloomberg.com/news/2011-05-02/death-of-bin-laden-may-strengthen-obama-s-hand-in-domestic-foreign-policy.html # Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008 #Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008 #http://www.nato.int/nato_static/assets/pdf/pdf_2011_03/20110325_110325-unified-protector-no-fly-zone.pdf #https://www.theatlantic.com/international/archive/2015/09/obama-netanyahu-and-the-future-of-israel/405082/ #https://www.boston.com/news/education/higher/articles/2007/02/20/obama_got_start_in_civil_rights_practice #https://web.archive.org/web/20110828104819/http://m.vcstar.com/news/2011/mar/23/ap-news-in-brief/ #https://www.nytimes.com/2007/09/09/us/politics/09obama.html #"Kwafin la zenani". Archived from the original on 2008-06-17. Retrieved 2024-02-05 #Scott (2011), pp. 87–93. #Obama "Dreams from My Father a Story of Race and Inheritance" <references></references> == Ɗiwwa == 22tggefc459zozn9ouplva5qf3aot8n 10563 10562 2026-08-25T22:15:18Z Abu Sadeeq77 197 /* Manazarta */ 10563 wikitext text/x-wiki {{Databox|item=Q76}} '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC. Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi. == Ilimi == [File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4). == Manazarta == {{reflist}} # http://www.bloomberg.com/news/2011-05-02/death-of-bin-laden-may-strengthen-obama-s-hand-in-domestic-foreign-policy.html # Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008 #Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008 #http://www.nato.int/nato_static/assets/pdf/pdf_2011_03/20110325_110325-unified-protector-no-fly-zone.pdf #https://www.theatlantic.com/international/archive/2015/09/obama-netanyahu-and-the-future-of-israel/405082/ #https://www.boston.com/news/education/higher/articles/2007/02/20/obama_got_start_in_civil_rights_practice #https://web.archive.org/web/20110828104819/http://m.vcstar.com/news/2011/mar/23/ap-news-in-brief/ #https://www.nytimes.com/2007/09/09/us/politics/09obama.html #"Kwafin la zenani". Archived from the original on 2008-06-17. Retrieved 2024-02-05 #Scott (2011), pp. 87–93. #Obama "Dreams from My Father a Story of Race and Inheritance" #Scott (2011), pp. 142–144. <references></references> == Ɗiwwa == ou887hlbnrz1of0fq4xrm1mq5u0wchc 10564 10563 2026-08-25T22:17:44Z Abu Sadeeq77 197 10564 wikitext text/x-wiki {{Databox|item=Q76}}{{Databox}} [[File:Official_portrait_of_Barack_Obama.jpg|200px|right|thumbnail|Barack Obama]] [[File:Flickr_Obama_Springfield_01.jpg|200px|right|thumbnail|Obama da iyalinsa a Springfield, Illinois]] [[File:Barack_Obama_arrives_at_Baghdad_International_Airport_4-7-09_2.JPG|200px|right|thumbnail|Obama ya sauka a filin jirgin sama na Baghdad]] [[Fayil:President Barack Obama with full cabinet 09-10-09.jpg|thumb]] [[Fayil:Barack Obama with artistic gymnastic McKayla Maroney 2.jpg|thumb]] [[Fayil:President Barack Obama.jpg|thumb]] [[Fayil:Barack Obama family portrait 2011.jpg|thumb]] [[Fayil:Barack Michelle.jpg|thumb]] [[Fayil:Obama Portrait 2006.jpg|thumb]] [[Fayil:United States President Barack Obama bends down to allow the son of a White House staff member to touch his head.jpg|thumb]] [[Fayil:Obama and Biden await updates on bin Laden.jpg|thumb]] [[Fayil:Barack Obama signature.svg|thumb]] [[Fayil:Biden Obama 2.jpg|thumb]] [[Fayil:Barack Obama profile picture.jpg|thumb]] [[Fayil:Obama signs DADT repeal.jpg|thumb]] [[Fayil:President Barack Obama, 2012 portrait crop.jpg|thumb]] [[Fayil:Obama family in mist in Rio de Janeiro.jpg|thumb]] '''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009. Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden. Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC. Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi. == Ilimi == [File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4). == Manazarta == {{reflist}} # http://www.bloomberg.com/news/2011-05-02/death-of-bin-laden-may-strengthen-obama-s-hand-in-domestic-foreign-policy.html # Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008 #Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008 #http://www.nato.int/nato_static/assets/pdf/pdf_2011_03/20110325_110325-unified-protector-no-fly-zone.pdf #https://www.theatlantic.com/international/archive/2015/09/obama-netanyahu-and-the-future-of-israel/405082/ #https://www.boston.com/news/education/higher/articles/2007/02/20/obama_got_start_in_civil_rights_practice #https://web.archive.org/web/20110828104819/http://m.vcstar.com/news/2011/mar/23/ap-news-in-brief/ #https://www.nytimes.com/2007/09/09/us/politics/09obama.html #"Kwafin la zenani". Archived from the original on 2008-06-17. Retrieved 2024-02-05 #Scott (2011), pp. 87–93. #Obama "Dreams from My Father a Story of Race and Inheritance" #Scott (2011), pp. 142–144. <references></references> == Ɗiwwa == te1t3y33efj2k5unmldiqxkgarqylbo Chadi 0 477 10522 8490 2026-08-25T17:37:19Z Mamie05 196 10522 wikitext text/x-wiki {{Databox|item=Q657}} '''Chadi''' ita a ga Modi koga Olli in Africa ko Dalla, ita aji kodoki ga Olli bacci Modi: kofai dar [[Sudan]], kofai aushito [[LIBYA]], kofai zunito [[Nijar|NIJAR]], ga [[KAMARU]], ga [[Nijeriya|NIGERIA]], kofanni gudi Kala ita aji kodoki ga Africa in dallah, Olli Chadi ita ga Amma sa kega tekusa, Amma ita ga tabki Modi Sunni. Tabkin Chadi ( '''Lake Chad)'''. Ishi a gudi-zunii ga Ndjamena Gur gunta koyii in Olli chadi. == Ɗiwwa == [[Panni:Lelo'aji]] 0wrbueois6p77p8immn3hj8me3zipta DAGACIN GARIN GADAM 0 485 10521 3830 2026-08-25T17:35:50Z An pikka 367 10521 wikitext text/x-wiki Alhaji Adamu Ibrahim Gadam: inke Moi Gadam (Dagachi Gadam) layannin futi Modi 1 gaga teren in an modi jam gaga sati I 1985 ke ishin zalu ruta ga futi 10-10-1986. [[Fayil:MOI GADAM.jpg|thumb|MOI GADAM]] Ishin iyi karuta primary ga Jijji Gadam primary. {{DEFAULTSORT:MOI GADAM}} jamnebc8qtk1ky34yichpkxlpbexla5 Fika 0 534 11006 8728 2026-08-26T08:01:38Z Morkoz 369 Undid revision [[Special:Diff/8728|8728]] by [[Special:Contributions/~2026-45570-55|~2026-45570-55]] ([[User talk:~2026-45570-55|talk]]) 11006 wikitext text/x-wiki {{Infobox settlement | name = Fika | image_skyline = [[Fayil:Doum Palm Trees farm near Ngaji River (1).jpg|280px]]<br>[[Fayil:Mountain in Fika LGA Yobe State (3).jpg|280px]]<br>[[Fayil:Fika kurtzifizioa.jpg|280px]] | settlement_type = [[Local government areas ga Nijeriya|LGA]] and town | mapframe = <mapframe height="300" width="300" align="center" text="Location of Fika LGA"> { "type": "ExternalData", "service": "geoshape", "ids": "Q5448220" } </mapframe><mapframe width="300" height="300" zoom="14" longitude="11.308056" latitude="11.283333" text="Location of Fika (Town)" align="center"> { "type": "Feature", "geometry": { "type": "Point", "coordinates": [11.308056, 11.283333] }, } </mapframe> | country = Nigeria }} Fika goru ji ko ga lardi [[jiha Yobe]], Ga ko goggo [[Gombe]] ba ka indu ko [[Potiskum|pataskum]], kafin ka lomi Ngara ga [[Nijeriya]]. Goruye goru anin pìkkà.<ref>https://www.nipc.gov.ng/nigeria-states/yobe-state/</ref> Fika ga faɗi area 2,852 km2. Akwati == Ɗiwwa == ic3pnexv42l9ty0gj52hydxwnv9kmoh Filanti 0 537 10519 4390 2026-08-25T17:27:36Z Yakubu19 208 10519 wikitext text/x-wiki {{Databox|item=Q202575}} Filanti do filata (toli: Filata do filantiwa)<ref>Fula: Fulɓe, 𞤊𞤵𞤤𞤩𞤫; French: Peul; Hausa: Fulani or Hilani; Kanuri: Fillata; Portuguese: Fula; Wolof: Pël; Bambara: Fulaw; Tyap: A̱fa̱taa</ref> miyya la aji zoni ga gudi ga [[Afirka|Afrika]] Yan lokacin la garan: jir saniya in Filata monannin ga dayi uwwa ga gojjita wodi<ref>[https://www.rumbunilimi.com.ng/KasarHausaKiwo.html#gsc.tab=0 sanar kiwohttps://www.rumbunilimi.com.ng/KasarHausaKiwo.html#gsc.tab=0]</ref>, mate aji kamya koyi bo gajjitayi, filantiwa jir miyyanla la ga fahimta la gollaka, ga donosu ga lema yalla kabila aji dono lafiya ga mate, jam har gonta kaibono ga dallasu.<ref>Felicity Crowe (2010). Modern Muslim Societies. Marshall Cavendish. p. 262. <nowiki>ISBN 978-0-7614-7927-7</nowiki>.</ref><ref>Steven L. Danver (2015). Native Peoples of the World: An Encyclopedia of Groups, Cultures and Contemporary Issues. Routledge. pp. 31–32. <nowiki>ISBN 978-1-317-46400-6</nowiki>.</ref><ref>Fulbe". homepage.univie.ac.at (in German). Archived from the original on 24 November 2021. Retrieved 30 August 2020.</ref> ga lokaci jir menme ajidisu gaga duniya kala Alan miliyan ko kunum ga badi ga [[Nijeriya]]. ==Mosa Gabo== Mosa jir bo missu ga sunni Fulfulde. Sheji aji undasu ga biye Maddi ga Nigeria ga [[Nijar]] ga [[Sudan]] ga [[kamaro]], kala a tushe su la fetengo, mana beyi Maddi ga Senegal ga mautaniya ga Gini ga messesu, aji undasu ga pulaar ko fula. ==Assalin Sun Filata== GABO gari de, moninshe ya aji forayi tabbaccensu tarihi su Ishin la ningo gaga lukuram ga Hadisai, Amma shap yassu aji menajisu bo miyyanla la gollaka sa inko she majini bo wajibi sa yalla, aji forayi Ishin jire ga, A forayi asali sunsu Filantiwa Ishin ji sunla wennin ga (Fita joro) jam gaga manshiwa su kabilu su inga duniya ga. Ishin sunsu Futa din su wengo ga Ishin koga dilkkesu/ga bowunshe su la aji undasu ga Futa, jam dikkesu ga Annabi NUHU, ko gamani wen ga samudawa fa Adawa, inko she forshe Allah ta ala lukuram (IRAMA ZA TIL'IMAAD) ga kabila su inko wego gako cewa dandan undasu ga Iramawa. Ko bisani inko godon ga, washi_washin la jai godon faro, shiyasa aji undasu ga Fatah. ma'ana Jarumai. Ledi ledi jam zali undasu ga sunsu Futa. Yanayin dono su ga beyi beyi kuwa Ishin ji silar sauyuwa sunsu ko yadda aji undasu ga Futa Jor0, ma'ana, Futuwa, Ishin ji la aji dono ga Toro, ga Futa Madina Futa jallo ga Futa falgo ga messesu. A forinshe la monan'ni Ishin sun emeyye FULANI, wentun asali ni ga zoni ga Africa, Sanda gontan koyi ga MANDINKA beyi dono miyyanla matema ma Fulani ji ga hali su ga dani"u su. Malum Ahmed jijini gako cewa Fulani kabilasu in farko ce ga la zalan dowa ga [[Afirka]], jam mate ninga adin zani ga Afirka. Inko she Filantiwa daffan lawinshe su aji forasu cewa Ana hulbe(Fulbe) Allah, muji zuwa allah ji, inko yalla mandinkawa, sobawa donomu aiki tan. Kotene kawai mandinkawa aji inna bo innesu mate aji undasu ga sun Fulah, kafin mate sunsu zali chanxa jini bo Fullata, da Fulbe. ==Ɗiwwa== jg7ctetrcppl18hx3j49jmky7seuwz6 Foti 0 538 10515 4393 2026-08-25T13:54:53Z Yakubu19 208 10515 wikitext text/x-wiki {{Databox|item=Q525}} Foti (alama) modi Siri halitta ga aji fete ga femfeli ga Haske sakamako Tina osi aji inayi inko she majjito fitila la aji Haske koyye gaba Daya, ga takaice de foti itaji aji haskika shaf ga duniya ga sarari koyye gabadaya su,(1)(2)(3)(4) duniyo aji zagaye su ga foti ga bisa kuduri (ya Baki) aji zagayayi Ga bisa jir agogo wato aji Ina kore foti, sheji shaf duniyamu aji konayi har tsawo sombodi 360 kafin ita zagaye foti, shaji in shaf duniya yalla Andi godom sombodi la aji inayi ga aji Kona kafin in bimbadi kure foti.(5)(6)(7) Foti itaji fitila LA Siri Ga sarari koyye. Itaji Haske la godum gedau.(8) == Solar Radiation == Foti aji wena Haske ga Fadi bakan lake sola, inko she launi aji fetila, jizani ga launi in sarari koyye in CIE nem (0.3 0.3,) lokaci la inne koga sarari koyye do lokaci ga foti ga Le garan foti ga garan ga gawa bangare korena bakan lokaci ga aji inneyi koga sarari koyye.(9) Lokacin la foti antu in woli sosai ga sarari koyye, yaduwa yanayi aji zowa foti majjito bo rawaya, dai. (Orange), do magenla. Kala ga lokaci laga bone harga kore shudi ga al'adu aji tunanin foti ga matsayi rawaya kala maddi ma dai. Dalilai in Al'adu in eme aji muhawara.(10) Bissanau ga matsayin taurari G2 ma'ana tauraro G ji jizaniga in 2 aji ewe zafi jito aji gawa kewaya in balau in aji G. Adadi Haske foti ishinji adadi osi la foti aji zenayi ga lema yanki yalla la fanlisangoyi kai tseye ga Haske foti. Haske foti gaga duniya aji sikita in goggo yanayi duniya inko she karanci Iko lomu koyye ( numga 1,000 w /m2) Gaga yanayi laga Haske lokaci ga foti aji Nemga zenith Haske foti ga koyye yanayi duniya kunsu ( ko goggo jimla makamashi) in nem 50% infrared Haske, 40% bayina Haske ga 10% ultraviolet Haske. Yanayi aji taceyi maba Kashi 70% in ultraviolet in foti , musamman ga gakeru wavelength.(11) Haske foti in ultraviolet aji Ina haske ga sarari koyye in duniya aji alako ga ionosphere la aji gudana ga lantarki. Haske ultraviolet koga foti aji ga Dara antiseptic kala aji Ina amfani Ga ishin inko tsabtace Karai ruta ga Amma eme, radiation aji alako bokka foti, kala aji ga maddi tasiri halittu mana wena ga Bilamin D fa kala Haske foti. Ishin Siri dalilin yakul lafiya fada mala in fata. Haske ultraviolet aji sikita sosai ko goggo loyer in ozone in Duniya inko she godom UV aji bambinta yo sosai jizaniga latitude kala aji ga modi bangare in halitta, gami ga bambata bambanci Gaga launi in fata in mulum (12) == Ɗiwwa == f93y0rpqy3rkz9q6x36klwtce3ggkfk GURRENSHE LA AGA PIKKA 0 543 10569 4423 2026-08-25T22:48:30Z Yakubu19 208 10569 wikitext text/x-wiki Yan mako miy'ya Pikka jajin Moi Buraima ga 1805, shaf NBOGAWUNA la eshin foduwo Yi manjisu nguranshe Maddi su aga gawuna Maddi kala a boi gawuna Pikka. == Sunsu Mana she == 1. Bo garu 2. Bo gawuna Moi 3. Bo gawuna Tinja 4. Sirrife 5. Mainari 6. Fukumari 7. Ga mutuwai 8. Janga ndemi 9. Kussur fuddo 10. Korori 11. Nga nguzum 12.nguro Dala 13. Ga bani Garba 14. Low cost 15. Ngafate 16. Zirki zanzana 17.Dewe burba == Ɗiwwa == 2zjkoc6d89r4a9gl7h1fy5mi32x04ag Ga Matira An Guru Gadam 0 544 10570 4426 2026-08-25T22:50:38Z Yakubu19 208 10570 wikitext text/x-wiki An siri gomna Lefa Gombe esi elengi ati dono ga ga MATIRA moi ansiri Gadam Ishin an siri goru Gadam ga messe biya goru Gadam mate angi gariya gake kunani in wena sauwi ê ango'e dz6g87sx2ajrep8xprkgffcudgm7jjl Ghana 0 556 10523 8541 2026-08-25T17:41:19Z Yakubu19 208 10523 wikitext text/x-wiki {{Infobox country | conventional_long_name = Republic of Ghana | image_flag = Flag of Ghana.svg | image_coat = Coat of arms of Ghana.svg | image_map = Ghana (orthographic projection).svg | national_motto = "Freedom and Justice" | national_anthem = "[[God Bless Our Homeland Ghana]]"<br>[[Fayil:National Anthem of Ghana.ogg]] | official_languages = [[English language|English]], [[French language|French]] | capital = [[Yaoundé]] | largest_city = [[Douala]] | demonym = Ghanaian | ethnic_groups = 45.7% Akan<br>18.5% Mole-Dagbon<br>12.8% Ewe<br>7.1% Ga-Adangbe<br>6.4% Gurma<br>3.2% Guan<br>2.7% Gurunsi<br>2.0% Mande<br>1.6% other | government = Unitary presidential republic | leader1 = John Dramani Mahama | leader1_type = President | leader2 = Jane Naana Opoku-Agyemang | leader2_type = Vice-president | sovereignty_type = Independence from [[United Kingdom]] | established_event1 = [[Dominion of Ghana|Dominion]] | established_date1 = 6 March 1957 | established_event2 = Republic | established_date2 = 1 July 1960 }} [[Fayil:Beach with palms Ghana.jpg|thumb]] '''Ghana''' bakala gana bake jamhuriyar Ghana (Ga turanci Kala, Republic of Ghana), Olli ji koga Olli in Africa, Ghana ita ga fili Olli laa eetu mil murabba'i (238,540), Ghana ita adadi miyya la antun (27,043,093). Ko kididiga la angu sunin dibu buluo ga dir foddo. (2014). Ghana ita aji kodoki ga cote d'ivoire, [[Togo]] jamga Burkina Faso. Maraya un Siritu Accra. Ghana ita yattu bu Mata hankali Ku falla ilmi ga ma'adinai inga Olli, ga Africa gabadaya. Nana Akufu-Addo isshin ji an menne jizani ga Ann buyinii Mahamudu Bawumia, ko sunin dibu buluo ga dir bawulu (2017). ==Soninshe Wena Yanci Koyi== Ghana wattun yanci kotto ga soninshe in alif dalma bonum ga hansin ga bawulo (1957)A,C, ko woli Birtaniya.(19)(20)(21) ==Kmiyya Ga Fasaha== ghana kaddimu goggo sadarwa in waya salula ga soninshe in alif dalma bonum ga hansin ga bawulo 1992 koga boii gontan ga sabis in matsi shirye ADSE.(22)(23)(24). Ghana kasantu matsayi in 99. Ga koga kididddga innovation in duniya koga 2024.(25)(26)(27). Cibiya kimiya ga fasaha in Ghana (GSSSFC) Ga hukuma kule ga sarari koyye in Ghana (GhsA) aji kulega shirye shirye sarari koyye ga (28)(29)(30) GSSFC ga ghsA mate antun ruta inko harba tauraro an Adam la aji lure ga tsaro woli zuwa sarari samaniya ga 2015.(31)(32)(33) Dodo bincike sarari samaniya Ghana in soninshe soninshe ga kasantan Kashi 1% in GDP inko tallifa bincike kimiyya ga fasaha. (34)(35)(36) Koga 2012 Zaban Ghana gako shugaba hukuma kimiyya ga fasaha inko Dom dorewa ga aushi (Comsast) Ghana Andi Hadi gwaiwa ga jizani ga hukuma kule ga sarari samaniya in afirka ko aushi.(37)(38)(39). == Ɗiwwa == 0p8eo1agt4bz7e7ol1l8dued1jwppas Ja'afar Mahmud Adam 0 608 10571 8573 2026-08-25T22:55:10Z Yakubu19 208 10571 wikitext text/x-wiki {{Databox|item=Q6109466}} [[Fayil:Sheikh Ja'afar Mahmud Adam 1.jpg|thumb|Sheikh Ja'afar Mahmud Adam]] '''Sheikh Ja'afar Mahmoud Adam''' (Fabarairu 12 1960- Afrrilu 13 2007) kasantu masani adin salafiya kala member ga jam'at izala Al Bid a wa qawamatus Sunnah in Najeriya kungiya adin lake siyasa lake ga hedkwata ga Abuja. Dowu ga Kani inko Ramadan tafsir in soninshe soninshe.(2) ==Rayuwa Ni== Duwantun ishin ga mashidi lokaci sallah shandal gudi ga birni Kano ga tere Afrilu soninshe in dubu balau ga bawulo 2007 ra'ayiyo bissu jini ga lokaci ye gamega anin laifi ye shaf ga maddi forango na Boko Haram kungiya modi anin tsauri ra'ayi duwan sheikh Ja'afar maddi aji forayi gako mista shekarau gwamna Kano ga lokaci aji kasantu ga Alkahira inko maluwa aji modi koga su Siri anin suka ni (3) == Ɗiwwa == [[Panni:Malunwa]] pspfnxbxp1fg6y7flqep4i91fpotgbj Musulwa 0 712 10568 5978 2026-08-25T22:41:46Z Yakubu19 208 10568 wikitext text/x-wiki {{Databox|item=Q47740}} [[Fayil:Caliphate_Nasiru_Kabara_07.jpg |thumb| Wasu musulmi tare da Caliphate Nasiru Kabara]] [[Fayil:Muslim Leaders at Ahsan Manzil 1892.jpg|thumb|shugabannin addinin musulunci a wani taro a Manzil, 1892]] [[Fayil:القاضي محمد اسماعيل الحجي.jpg|thumb|Kadi Shaykh Muhammad Ismail Hadji]] [[Fayil:Ayatul Kursi by AbdurRahman Al Sudais.wav|thumb|karatun Ayatul kursiyyu bakin Shaykh Sudais]] [[Fayil:Prayer in Cairo 1865.jpg|thumb|Musulmi]] [[Fayil:Prayer time muslim ummah.jpg|thumb|a yayinda musulmai na sallah]] Musulwa: memu ji la aji doffa dokoki musulunci addin kadaita Allah. Musulunci aji amfa ga lukram la Nin ko goggo [[Annabi Muhammadu|monzo Allah (SAW)]] Ga matsayin littafi laga tsarki (1)(2)(3)(4)(5)(6)(7)(8)(9)(10) Musulwa aji ga goru ga aji Dina inko Ina ibada ga hajji ga umra. Inko aji yayi ruta hajji aji Unda ishin ga Alhaji do hajiya inko Mandu ji. Musulwa (Larabci:المسلمون‎, Al-musulimu transl" anin ele Lelesu ga Allah") (11) miyya ji la'an riko ga musulunci addini tauhidi ga le gawa addini annabi Ibrahim (As). Aji Kona lukram tushe nassi adin in islama ga matsayin kalma Allah (do Allah) a zahiri ga mana aji kala yauta ga annabi muhammdu (S A W) Siri annabi musulwa (12) godom musulwa kala aji doffa koyarwa ga ruta annabi muhammdu (S A W) Sunnah mana yadda aji rubutan ga gawa (hadisi) .13) Jizani ga kiyasi godom miyya billion 2 mana yadda modi 1 ga janairu 2023 kiyasi soninshe musulwa kunsan mana Kashi 25% in godom Al'umma ga duniya.(14) Koga tsari la aji yawwakoyi adadi miyya la bayinan ga matsayin musulwa ga lema nahiya mate yorasu ga 45% in Africa 25% in Asia ga Oceania ( ga dunkule) (15) 6% in turai (16) ga 1% in Amurka (17)(18)(19)(20) Bugu ga Kari koga yankuna anin rarrafe adadi aji tseye a; 91% ko dar in Dalla gudi Africa,(21)(22)(23)90% in Asiya ko Dalla 24)(25)(26) 65% in caucasu , (27)(28)(29)(30/(31)(30)(31)32) 42% ko aushi mana dar Asiya (33)(34) 32% in aushi Asiya (32)(36) ga 42% in sub Saharan Africa.(37)(38) Shafji Andi makarantu la Raza in islama ga godom kungiyoyi balau layan Siri aji Islam sunni (75-90% in shap musulwa) (39) ga shi a Islam (10-20% in shap musulwa) (40) bisa kididdiga aushi kudanci Asiya lake ga mana mafi Siro (31%) in Al'umma musulwa I ga duniya musamman ga wolinshe kunum; Pakistan Indiya ga Bangladesh.(41)(42) Ko woli insomnia itaji mafi Siro duniya musulwa aji ga Nemga Kashi 12% in shaf musulwa duniya (43) ga beyi wolinshe musulwa India ga china aji Bono yatu Siro (11%) ga inbalau mafi Siro (2%) godom Al'umma musulwa ishinji adin mafi Siro ga duniya (47)(48)49) == Ɗiwwa == 4xwnkau6dcea836mya681nwqyfhephi Nijeriya 0 735 10514 8602 2026-08-25T13:44:14Z Yakubu19 208 10514 wikitext text/x-wiki {{Infobox country | conventional_long_name = Federal Republic of Nigeria | image_flag = Flag of Nigeria.svg | image_coat = Coat of arms of Nigeria.svg | image_map = Nigeria (orthographic projection).svg | national_motto = "Unity and Faith, Peace and Progress" | national_anthem = "[[Nigeria, We Hail Thee]]"<br>[[Fayil:Nigeria, We Hail Thee - Banda do Batalhão da Guarda Presidencial, 2025.ogg]] | official_languages = [[Yarenshe Turanci]] | capital = [[Abuja]] | largest_city = [[Lagos]] | demonym = Nigerian | ethnic_groups = 30% Hausa<br>15.5% Yoruba<br>15.2% Igbo<br>6% Fulani<br>2.4% Tiv<br>2.4% Kanuri<br>1.8% Ibibio<br>1.8% Ijaw<br>24.7% other | government = Federal presidential republic | leader1 = [[Bola Ahmed Tinubu]] | leader1_type = President | leader2 = [[Godswill Akpabio]] | leader2_type = Senate President | leader3 = Kudirat Kekere-Ekun | leader3_type = Chief Justice | sovereignty_type = Independence from [[United Kingdom]] }} [[Fayil:The City Gate of Abuja.jpg|thumb|babban birnin najeriya]] [[Fayil:20200408 Nigeria Crisis.pdf|thumb|crisis a najeriya]] [[Fayil:Nigerian Public Domain 143.jpg|thumb|Sojan Nigeria ]] '''Nijeriya''' (!nadzI3r1a) ko Nijeriya da (turanci: Nigeria): A Gwamanatance Tarayyar Najeriya, woli la ga take ga [[Afirka|Africa]] ko zoni<ref>The countries with the 10 largest Christian populations and the 10 largest Muslim populations". Pew Research Center. April 2019. Archived from the original on 18 January 2021. Retrieved 25 May 2020.</ref><ref>Nigeria Fact Sheet" (PDF). United States Embassy in Nigeria. Archived from the original (PDF) on 18 October 2020. Retrieved 23 September 2018.</ref><ref>Nigeria: The African giant". The Round Table. 50 (197): 55–63. 1959. doi:10.1080/00358535908452221. ISSN 0035-8533.</ref> ita ji tetteke woli niger koga Arewa. Ga [[Chadi]] koga zoni koga aushi jam aji dar ga teku Atlantika.<ref>Online Etymological Dictionary". Etymonline.com. Archived from the original on 2 July 2017. Retrieved 28 July 2014</ref><ref>Non-Aligned Movement (NAM) – The Nuclear Threat Initiative". Archived from the original on 19 October 2021. Retrieved 19 October 2021.</ref><ref>Kperogi, Farooq A. "Natasha H. Akpoti's Wildly Inaccurate History of Nigeria". Notes From Atlanta. Archived from the original on 11 August 2023. Retrieved 11 August 2023.</ref> Jamhuri gonta koyi Nigeria kunsan jahohi guda ko kunum ga bacci modi ([[36]]) jizani ga siri birni gonta koyi ([[Abuja]]) beyi la bono shugaban woli a tene "Villa" take. Abuja aji modi koga su siri birni ga [[duniya]].<ref name=":0">http://www.unep.org/news-and-stories/story/unep-ogoniland-oil-assessment-reveals-extent-environmental-contamination-and</ref><ref>https://www.greenleft.org.au/content/shell%E2%80%99s-nigeria-ecocide-creating-refugee-crisis,%20https://www.greenleft.org.au/content/shell%E2%80%99s-nigeria-ecocide-creating-refugee-crisis{{Dead link|date=January 2024 |bot=InternetArchiveBot |fix-attempted=yes }}</ref><ref>https://web.archive.org/web/20141205124719/http://www.punchng.com/news/us-sends-medical-experts-to-study-how-nigeria-contained-ebola/</ref> Najeriya' kasantanjito bono kogama lawonshe turawa mulki mallaka, jihohi la mata mallakan tund (BC) (13)(14)(15) Jizani ga Nok wayewa ko kasantan itaji in fari la turawa mulki mallaka zanlan mallikayi ga zoni Africa koga karni in dirbadi(15),(16)(17)(18) Ko zamani jihar wangoyii ga [[Birtaniya]] ga koga karni in ko (19) aji kona yanayi in honsene jizani ga ko gontasu ga aushi ga Najeriya' ga kuma kule ga gudi ga Najeriya' koga soni alif dubu modi ga dalma bonum ga dirhoddo (1914)(19)20)(21)(22) ko [[Lord Lugord]] inglishi zalu kafa tsari ni gudannarwa ga duka yayi aiwata moyinshe koyi yorani ko goggo shugabanni gargajiya. (23)(24)(25) Najeriya' majjito woli Tarayyar lake ga yanci to In kotto (1) ga tere oktoba, soninshe ko alif dubu modi ga dalma bonum ga kobaccimodi (1960)(26)(27)28) ita fuskantar Washi basasa koga soninshe in dubu modi ga dalma bonum ga kobaccimodi ga bawulo (1967) zuwa soninshe dubu modi ga dalma bonum ga kobawulo ga bawulo (1977),(29)(30)(31) jamji ga doffako boii zabasu Gwamanatance fetila tajiya mulki kama karya in soja har ko an sami tabbatacciyar Dimokuradyyar ko soninshe in alif dalma bonum ga kobonum ga bonum (1999) zabe shugaba woli ko soninshe in (2015) dubu bolau ga dibadi Ishin ji Karo in farko la shugaba woli la antinayi sorry zabeni.(32)(33)(34) Najeriya' yattu woli godom bo godom miyya ga nahiya Africa, wali ji kala Andi miyya godom dowasu ga gawa kabilu godom mana dalma balau ga sittin (260)(32)(36)(37) maddilla aji bosa ga jir yarishe kala kala har dalma badi(500) chaffinsu aji kona ga al'adu jir daban daban, kabilu la siran jisu har guda kunum, ga afiniwa [[filanti]] ga [[arewa]], jirmin yarabawa ko xoni kala [[Igbo]] ko dar kala matela gontan ga har guda 60% godonsu miyya yaresu hukuma ji inglishi (38)(39)40) maddisu la zabasu inko wai sauki Lamar in tetteke woli tsari mulki su ga Nijeriya tabbitu jini ga yanci adin jam woli ji lake Kona miyya [[musulwa]] ga [[kirista]] ga lokaci modi. Najeriya' kasajjito kashi balau ko tsakanin musulwa ga godon ji dowasu ga arewa woli jam kirista kala(41)(42)(43) inko godonsu dowasu ga kudanci woli jizani ga la godonsa lake Ina adinsu asali mana la gawa kabilu igbo ga yarabawa(44)(45)(46) Najeriya' itaji woli laga godom miyya ga afirka jan kala woli in bawulo bo godon miyya ga duniya (47)(48)(49) jizani ga kimani miyya miliyan dalma balau ga bacci modi (2,00,000,006). Tattali arziki Ishin mafi siro ga Africa jam Ishin ji in ko balau ga bacci modi (26)(50)(51)(52) la siru jini ga duniya ko gaggo GDP yakul soro jam Ishin in kobalau ga badi (25) yatu siro koga PPP. Najeriya' galibisu aji kiranta ga Giant ga afirka "ma ana gedau Africa inko godon miyya ga tattali arziki jam banki duniya aji kona matsayi [[Goma]] laga indakoyi dole yanki ga Africa godausu sosai sa gadu miyya woli ga woli jamji kala aji aga modi koga gasu tatteke mafi godom miyya ga duniya (53)(54)(55) lamatan woli aji woli sosae ko gasu jeri wolinshe ga duniya jamji har honsene aji modi ga wolinshe la rusanjisu ga duniya. Nijeriya memba ji ko kungiyoyi wolinshe godom laga hada ga majalisa dondu Duniya kungiya wolinshe zoni Africa ([[ECOWAS]]) Kungiya wolinshe la arziki mor fetur (OPEN) jam memba ji inso ga kullun ga gontakoyi MINT. Jam aji modi koga su wolinshe binbadi ga modi laga tashe sawwi tattali arziki wato Next Eleven"(56)(57)(58) ==Ƙirƙiro== ==Tarihi== == Addinai == * [[Fayil:The Abuja National Mosque.jpg|alt=Babban Masallacin Kasa dake Abuja|thumb|Babban Masallacin Kasa dake Abuja|146x146px]]Addinin [[Musulunci]] 50%. * [[Fayil:National Church of Nigeria in Abuja 22.jpg|alt=Babbar Mujama,ar Kasa dake Abuja|thumb|Babbar Mujama,ar Kasa dake Abuja|216x216px]]Addinin [[Kristanci]] 45%. * Sauran kashin 5% basuda kowanne irin Addini. ==Jihohi== #[[Abia]] #[[Adamawa]] #[[Anambra]] #[[Akwa Ibom]] #[[Bauchi]] #[[Bayelsa]] #[[Banue|Benue]] #[[Borno]] #[[Cross River]] #[[Delta]] #[[Enugu]] #[[Edo]] #[[Ebonyi]] #[[Ekiti]] #[[Filato]] #[[Gombe]] #[[Imo]] #[[Jigawa]] #[[Kano]] #[[Katsina]] #[[Kaduna]] #[[Kebbi]] #[[Kogi]] #[[Kwara]] #[[Lagos]] #[[Neja]] #[[Nasarawa]] #[[Jiha Ogun|Ogun]] #[[Osun]] #[[Oyo (jiha)|Oyo]] #[[Ondo]] #[[Rivers]] #[[Sokoto]] #[[Taraba]] #[[Jiha Yobe|Yobe]] #[[Zamfara]] ==Ɗiwwa== [[Panni:Lelo'aji]] [[Panni:Olii]] p7zctmcfp9sr9bvliyn5ld6l50b3zcn Tempilet:Clarify 10 990 10881 8876 2026-08-06T13:59:44Z commons>Sebastian Wallroth 0 +languages 10881 wikitext text/x-wiki <small style="display:inline-block;font-size:83%;line-height:normal"><sup>[<!-- --><bdi><em>{{#switch: {{{lang|{{int:lang}}}}} |default = [[:en:Wikipedia:Please clarify|Please clarify]] |ar = [[:ar:ويكيبيديا:توضيح معلومة|توضيح معلومة]] |ca = [[:en:Wikipedia:Please clarify|clarifica, si us plau]] |de = [[:en:Wikipedia:Please clarify|Bitte klären]] |en = [[:en:Wikipedia:Please clarify|Please clarify]] |es = [[:es:Wikipedia:Por favor aclarar|Por favor aclarar]] |fa = [[:fa:ویکی‌پدیا:واضح بیان کنید|واضح بیان کنید]] |fr = [[:fr:Aide:Préciser un fait|Préciser un fait]] |fi = [[:en:Wikipedia:Please clarify|voisitko selventää]] |hi = [[:en:Wikipedia:Please clarify|तथ्य वांछित]] |hu = [[:en:Wikipedia:Please clarify|kérlek pontosíts]] |id = [[:id:Wikipedia:Klarifikasi|Klarifikasi]] |it = [[:it:Aiuto:Chiarezza|Chiarezza]] |ja = [[:ja:Wikipedia:避けたい言葉|避けたい言葉]] |ko = [[:en:Wikipedia:Please clarify|명확한 설명 필요]] |mk = [[:mk:Википедија:Појасни|Појасни]] |ml = [[:en:Wikipedia:Please clarify|വ്യക്തമാക്കുക]] |nl = [[:en:Wikipedia:Please clarify|verklaring nodig]] |or = [[:or:ଉଇକିପିଡ଼ିଆ:Please clarify|Please clarify]] |pl = [[:en:Wikipedia:Please clarify|proszę o wyjaśnienie]] |pt = [[:pt:Wikipédia:Por favor, seja claro|Por favor, seja claro]] |pt-br = [[:pt:Wikipédia:Por favor, seja claro|necessário esclarecer]] |ro = [[:en:Wikipedia:Please clarify|clarifica]] |ru = [[:en:Wikipedia:Please clarify|просьба уточнить]] |si = [[:si:විකිපීඩියා:කරුණාකර පහදන්න|කරුණාකර පහදන්න]] |sk = [[:sk:Pomoc:Objasnenie|Objasnenie]] |sl = [[:sl:Wikipedija:Prosimo, pojasnite|Prosimo, pojasnite]] |sq = [[:en:Wikipedia:Please clarify|ju lutem qartesoni]] |sr = [[:sr:Википедија:Будите јасни|Будите јасни]] |sv = [[:en:Wikipedia:Please clarify|vänligen förtydliga]] |tr = [[:tr:Vikipedi:İfadeleri netleştirin|İfadeleri netleştirin]] |zh-hans = [[:zh:Wikipedia:请进行澄清|需要解释]] |zh-hant = [[:zh:Wikipedia:请进行澄清|需要解釋]] -->}}<!-- --></em></bdi><!-- -->{{#if: {{{reason|{{{2|}}} }}} | {{Colon |lang={{{lang|{{int:lang}} }}} }} {{{reason|{{{2|}}} }}} }}<!-- -->{{#if: {{{date|{{{1|}}}}}} | &nbsp;– <em>{{ISOdate|{{{date|{{{1|}}} }}} }}</em> }}<!-- -->{{#if: {{{nocat|<noinclude>1</noinclude>}}} || [[Category:Pages needing clarification]] }}<!-- -->]</sup></small><!-- --><noinclude>{{Documentation}}</noinclude> itcl7vgqezgi43plgiog68msbqxocux 10882 8877 2026-08-25T23:38:36Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Clarify]] 8876 wikitext text/x-wiki {{ safesubst:<noinclude/>#invoke:Unsubst||date=__DATE__ |$B= {{Fix-span |link=Wikipedia:Please clarify |text=clarification needed |title={{delink|{{{reason|{{{1|The text near this tag may need clarification or removal of jargon.}}}}}}}} |date={{{date|}}} |pre-text={{{pre-text|}}} |post-text={{{post-text|}}} |cat-date=Category:Wikipedia articles needing clarification |content={{{text|}}} }} }}<noinclude> {{documentation}} </noinclude> h752ul4rgcry3t3r5dhowyi87e2i871 Tempilet:Documentation subpage 10 992 10845 2024-10-21T13:35:12Z commons>Matrix 0 Restored revision 591762713 by [[Special:Contributions/ExE Boss|ExE Boss]] ([[User talk:ExE Boss|talk]]) 10845 wikitext text/x-wiki <includeonly><!-- -->{{#ifeq:{{SUBPAGENAME}}|{{#ifeq:{{{1|}}}|override|{{SUBPAGENAME}}|doc}}|</includeonly><!-- show on doc pages only -->{{#invoke:Autotranslate | autotranslate |base = Documentation subpage |lang = {{{lang|}}} |page = {{#if:{{{page|}}}|{{{page|}}}|{{SUBJECTSPACE}}:{{BASEPAGENAME}}}} }}<!-- --><includeonly>{{{category|[[Category:{{#switch:{{SUBJECTSPACE}} | Template = Template | Module = Module | User = User | #default = Template }} documentation|{{PAGENAME}}]]__EXPECTED_UNCONNECTED_PAGE__}}}</includeonly><!-- --><includeonly>}}</includeonly><!-- show on doc pages only --><noinclude>{{documentation}}</noinclude> e1m6vc2tdw71dgnw3k58bhv9fdxxadi 10846 8889 2026-08-25T23:38:34Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Documentation_subpage]] 8888 wikitext text/x-wiki <includeonly><!-- -->{{#ifeq:{{lc:{{SUBPAGENAME}}}} |{{{override|doc}}} | <!--(this template has been transcluded on a /doc or /{{{override}}} page)--> </includeonly><!-- -->{{#ifeq:{{{doc-notice|show}}} |show | {{Mbox | type = notice | style = margin-bottom:1.0em; | image = [[File:Edit-copy green.svg|40px|alt=icon]] | text = {{strong|This is a [[Wikipedia:Template documentation|documentation subpage]]}} for {{terminate sentence|{{{1|[[:{{SUBJECTSPACE}}:{{BASEPAGENAME}}]]}}}}}<br />It may contain usage information, [[Wikipedia:Categorization|categories]] and other content that is not part of the original {{#if:{{{text2|}}} |{{{text2}}} |{{#if:{{{text1|}}} |{{{text1}}} |{{#ifeq:{{SUBJECTSPACE}} |{{ns:User}} |{{lc:{{SUBJECTSPACE}}}} template page |{{#if:{{SUBJECTSPACE}} |{{lc:{{SUBJECTSPACE}}}} page|article}}}}}}}}. }} }}<!-- -->{{DEFAULTSORT:{{{defaultsort|{{PAGENAME}}}}}}}<!-- --><includeonly>__EXPECTED_UNCONNECTED_PAGE__</includeonly><!-- -->{{#if:{{{nocat|}}}{{{inhibit|}}}|<!--(don't categorize)--> |<includeonly><!-- -->{{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}} | [[Category:{{#switch:{{SUBJECTSPACE}} |Template=Template |Module=Module |User=User |#default=Wikipedia}} documentation pages]] | [[Category:Documentation subpages without corresponding pages]] }}<!-- --></includeonly> }}<!-- (completing initial #ifeq: at start of template:) --><includeonly> | <!--(this template has not been transcluded on a /doc or /{{{override}}} page)--> }}<!-- --></includeonly><noinclude>{{Documentation}}</noinclude> iwz7dreef73y68fx96yxyj3ry6l1x58 Tempilet:Tag 10 1013 10837 2024-08-28T08:29:00Z commons>CptViraj 0 Protected "[[Template:Tag]]": [[Special:MyLanguage/Commons:Protection policy|Widely used template]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite)) 10837 wikitext text/x-wiki {{#if:{{{plain|}}}| |<code class="mw-highlight" style="{{#if:{{{wrap|}}}||white-space:nowrap}}"> }}{{#switch:{{{2|pair}}} |c|close = <!--nothing--> |s|single |o|open |p|pair = {{#tag:span|&lrm;&lt;|class="p"}}{{#tag:span|{{{1|tag}}}|class="nt"}}{{#if:{{{params|}}}|&#32;{{{params}}}}} }}{{#switch:{{{2|pair}}} |c|close = {{{content|}}} |s|single = &#32;{{#tag:span|&#47;&gt;|class="p"}} |o|open = {{#tag:span|&gt;|class="p"}}{{{content|}}} |p|pair = {{#tag:span|&gt;|class="p"}}{{{content|...}}} }}{{#switch:{{{2|pair}}} |s|single |o|open = <!--nothing--> |c|close |p|pair = {{#tag:span|&lrm;&lt;&#47;|class="p"}}{{#tag:span|{{{1|tag}}}|class="nt"}}{{#tag:span|&gt;|class="p"}} }}{{#if:{{{plain|}}}| |</code> }}<noinclude> {{Documentation}} </noinclude> fxkoeaewp3sxkblsyvrui5bt7264kv5 10838 8943 2026-08-25T23:38:34Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Tag]] 8942 wikitext text/x-wiki <code class="{{#ifeq:{{{wrap|}}}|yes|wrap|nowrap}}" style="{{#ifeq:{{{style|}}}|plain|border:none;background:transparent;color:inherit;|{{{style|}}}}}"><!-- Opening tag -->{{#switch:{{{2|pair}}} |c|close = |e|empty|s|single|v|void |o|open |p|pair = &lt;{{#if:{{{link|}}}|[[HTML element#{{{1|tag}}}|{{{1|tag}}}]]|{{{1|tag}}}}}{{#if:{{{params|{{{attribs|}}}}}}|&#32;{{{params|{{{attribs}}}}}}}} }}<!-- Content between tags -->{{#switch:{{{2|pair}}} |c|close = {{{content|}}} |e|empty|s|single|v|void = &#32;&#47;&gt; |o|open = &gt;{{{content|}}} |p|pair = {{#ifeq:{{{1|tag}}}|!--||&gt;}}{{{content|...}}} }}<!-- Closing tag -->{{#switch:{{{2|pair}}} |e|empty|s|single|v|void |o|open = |c|close |p|pair = {{#ifeq:{{{1|tag}}}|!--|--&gt;|&lt;&#47;{{{1|tag}}}&gt;}} }}<!-- --></code><noinclude> {{Documentation}} </noinclude> raaklsk7m011yysk3yxm5h60oevl896 Tempilet:Em 10 1050 10903 2018-08-25T23:36:34Z commons>Nøkkenbuer 0 no clue why it inserted that; I guess I misclicked? 10903 wikitext text/x-wiki <em {{#if:{{{role|}}}|role="{{{role}}}"}} {{#if:{{{class|}}}|class="{{{class}}}"}} {{#if:{{{id|}}}|id="{{{id}}}"}} {{#if:{{{style|}}}|style="{{{style}}}"}} {{#if:{{{title|}}}|title="{{{title}}}"}}>{{{1}}}</em><noinclude> {{documentation}} <!-- Add categories to the /doc subpage, not here! --> </noinclude> g9i6h00ap35wxdar0fg1tibei9ktn9g 10904 9052 2026-08-25T23:38:36Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Em]] 9051 wikitext text/x-wiki <em {{#if:{{{role|}}}|role="{{{role}}}"}} {{#if:{{{class|}}}|class="{{{class}}}"}} {{#if:{{{id|}}}|id="{{{id}}}"}} {{#if:{{{style|}}}|style="{{{style}}}"}} {{#if:{{{title|}}}|title="{{{title}}}"}}>{{{1}}}</em><noinclude> {{documentation}} <!-- Add categories to the /doc subpage, interwikis to Wikidata, not here --> </noinclude> qihth5vbfna026aqh87kteifb1nb5ot Tempilet:C 10 1066 10719 2023-09-13T16:15:25Z commons>Verdy p 0 10719 wikitext text/x-wiki {{#switch: G |{{{2|}}}|{{{3|}}}|{{{4|}}} = [[Category:{{PAGENAME:{{{1}}}}}{{#if:{{{2|}}} | {{!}}{{{2|}}} }}]]<!-- Category generation --> |#default = {{#switch: - |{{{2|}}}|{{{3|}}}|{{{4|}}} = {{#switch: + |{{{2|}}}|{{{3|}}}|{{{4|}}} = |#default = Category: }} }}<!-- -->{{#switch: {{{link|}}} |n|none = {{{2|{{{1|}}}}}} |#default = {{#switch:{{{3|}}} ||-|+ = <!-- standard: Commons -->{{#ifexist: Category:{{PAGENAME:{{{1|}}}}} | [[:Category:{{PAGENAME:{{{1|}}}}}|{{C/display|{{PAGENAME:{{{1|}}}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|l={{{lang|}}}|v={{{link|}}}|c={{{case|}}}}}]]<!-- ex --> | [[:Category:{{{1|}}}|<em>{{C/display|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|l={{{lang|}}}|v={{{link|}}}|c={{{case|}}}}}</em>]]<!-- nx --> }} |B = [[:Category:{{PAGENAME:{{{1|}}}}}|&#91;&#91;{{C/display|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|l={{{lang|}}}|v={{{link|}}}|c={{{case|}}}}}&#93;&#93;]]<!-- only standard: [[commons]] --> |X|x = {{#ifexist: Category:{{PAGENAME:{{{1}}}}} | [[:Category:{{PAGENAME:{{{1}}}}}|{{C/display|{{PAGENAME:{{{1|}}}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|l={{{lang|}}}|v={{{link|}}}|c={{{case|}}}}}]]<!-- ex --> | {{#ifexpr: {{PAGESINCATEGORY:{{PAGENAME:{{{1|}}}}}}} > 0 | <span style="background:#CF9">[[:Category:{{PAGENAME:{{{1|}}}}}|{{C/display|{{PAGENAME:{{{1|}}}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|l={{{lang|}}}|v={{{link|}}}|c={{{case|}}}}}]]</span><!-- nx+ --> | {{#ifeq: {{{3|}}} | X | <span style="background:#FCC">{{C/display|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|l={{{lang|}}}|v={{{link|}}}|c={{{case|}}}}}</span><!-- nx- italic --> | &#91;&#91;''Category'':<span style="color:red">{{C/display|{{{1|}}}|{{{2|}}}|l={{{lang|}}}|v={{{link|}}}|c={{{case|}}}}}</span>&#93;&#93; }} }} }} |#default = <!-- not Commons: take it as it is -->[[:{{#if:{{{3|}}} | {{{3|}}}: }}Category:{{PAGENAME:{{{1|}}}}}|{{C/display|{{PAGENAME:{{{1|}}}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|l={{{lang|}}}|v={{{link|}}}|c={{{case|}}}}}]] }} }} }}<noinclude>{{Documentation}}</noinclude> j9ok4l05pnqllrpp8oqe4zjf8nlnkm7 10720 9098 2026-08-25T23:38:30Z RAPTOR7762 18 1 revision imported from [[:commons:Template:C]] 9097 wikitext text/x-wiki #REDIRECT [[Template:Category link without namespace]] {{Redirect category shell| {{R from move}} }} 3qa60t6mwxjkjff4k91jtkyn2wfm6h0 Tempilet:Str len 10 1071 10743 9107 2021-07-10T16:48:39Z commons>CptViraj 0 Protected "[[Template:Str len]]": [[Commons:Protection policy|Widely used template]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite)) 10743 wikitext text/x-wiki {{{{{|safesubst:}}}#invoke:String|len|s={{{1|}}}}}<noinclude> {{documentation}} <!-- Add categories and interwikis to the /doc subpage, not here! --> </noinclude> b1x8qcqpdocnua2ihkd8pr5jd1jn7xn 10744 9108 2026-08-25T23:38:31Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Str_len]] 9107 wikitext text/x-wiki {{<includeonly>safesubst:</includeonly>#invoke:String|len|s={{{1|}}}}}<noinclude> {{documentation}} <!-- Add categories to the /doc subpage, not here! --> </noinclude> 2n0p928wu8hdh499dl0eaxtmt6t1tr4 Tempilet:T 10 1116 10779 2019-06-05T01:10:43Z commons>4nn1l2 0 Fulfilling [[Template:Edit request|edit request]] by [[User:Sarang|Sarang]]. 10779 wikitext text/x-wiki <noinclude>{{protected template}} </noinclude>{{T/main|{{{1|}}} |{{{2|}}} |{{{3|{{{lang|}}}}}} |{{{4|}}} |{{{5|}}} |incl={{{incl|{{{i|2}}}}}} |code={{{code|}}} |link={{{link|}}} |case={{{case|}}} |i18n={{{i18n|}}} |parm={{{parm|}}} |full={{{full|}}} }}<noinclude> {{documentation}} </noinclude> 5vvg1pfppzsn3fa39d9b7s0zzq27fs6 10780 9242 2026-08-25T23:38:32Z RAPTOR7762 18 1 revision imported from [[:commons:Template:T]] 9241 wikitext text/x-wiki #REDIRECT [[Template:Template link]] {{Rcat shell| {{R from template shortcut}} }} <!-- Used as Template:tl throughout English Wikipedia; demo template referenced only on meta --> lundwspklp4q9oao3icq7qp0luocglh Tempilet:Tlf 10 1120 10815 2019-07-16T10:39:32Z commons>4nn1l2 0 Changed protection level for "[[Template:Tlf]]": downgraded protection level per [[Special:Permalink/357548402|consensus]] ([Move=Allow only template editors and administrators] (indefinite) [Edit=Allow only template editors and administrators] (indefinite)) 10815 wikitext text/x-wiki <span style="white-space:nowrap;">&#123;&#123;{{#if:{{{1|}}}|{{{1}}}| tlf&#124;...}}<!-- -->{{#ifeq:{{{2|x}}}|{{{2|}}}| &#124;{{{2}}} | }}<!-- -->{{#ifeq:{{{3|x}}}|{{{3|}}}| &#124;{{{3}}} | }}<!-- -->{{#ifeq:{{{4|x}}}|{{{4|}}}| &#124;{{{4}}} | }}<!-- -->{{#ifeq:{{{5|x}}}|{{{5|}}}| &#124;{{{5}}} | }}<!-- -->{{#ifeq:{{{6|x}}}|{{{6|}}}| &#124;{{{6}}} | }}<!-- -->{{#ifeq:{{{7|x}}}|{{{7|}}}| &#124;{{{7}}} | }}<!-- -->{{#ifeq:{{{8|x}}}|{{{8|}}}| &#124;{{{8}}} | }}<!-- -->{{#ifeq:{{{9|x}}}|{{{9|}}}| &#124;{{{9}}} | }}<!-- -->&#125;&#125;</span><noinclude> {{documentation}} </noinclude> szs1st0u3mutwf74am5cr29gflw966p 10816 9250 2026-08-25T23:38:33Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Tlf]] 9249 wikitext text/x-wiki #REDIRECT [[Template:Template link with link off]] {{Redirect category shell| {{R from move}} }} 9mrb4gzoa8i94zzxq5i6opzke6v5ntr Tempilet:(( 10 1169 10939 9370 2023-06-06T10:00:55Z commons>Yann 0 Protected "[[Template:((]]": [[Special:MyLanguage/Commons:Protection policy|Widely used template]] ([Edit=Allow only autoconfirmed users] (indefinite) [Move=Allow only autoconfirmed users] (indefinite)) 10939 wikitext text/x-wiki <onlyinclude>{{</onlyinclude> {{Documentation}} <!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! --> 5eke7czrsw8gv7w6x0znyysuomyjxqa 10940 9371 2026-08-25T23:38:38Z RAPTOR7762 18 1 revision imported from [[:commons:Template:((]] 9370 wikitext text/x-wiki {{<noinclude> {{documentation}} </noinclude> 7ddca00qmssfls0dctzbj32xy1q28ir Tempilet:)) 10 1170 10941 9372 2024-08-08T11:41:01Z commons>Achim55 0 [[Commons:Rollback|Reverted]] edits by [[Special:Contributions/2401:D800:58A9:737B:9154:F769:4542:1D00|2401:D800:58A9:737B:9154:F769:4542:1D00]] ([[User talk:2401:D800:58A9:737B:9154:F769:4542:1D00|talk]]) to last revision by Yann 10941 wikitext text/x-wiki <onlyinclude>}}</onlyinclude> {{Documentation}} <!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! --> j5ttkv5phbu7ga8ivmvaxwdhbs5ebka 10942 9373 2026-08-25T23:38:38Z RAPTOR7762 18 1 revision imported from [[:commons:Template:))]] 9372 wikitext text/x-wiki }}<noinclude> {{documentation}} </noinclude> fmm8htexq13hwrjrvzcsiy59gv65l36 Tempilet:- 10 1198 10717 9428 2022-11-30T16:13:24Z commons>JoKalliauer 0 fullfilling edit-request on talkpage 10717 wikitext text/x-wiki #REDIRECT[[Template:Clear]] {{template redirect|protected}}<noinclude>[[Category:One-character templates| ]]</noinclude> aqsc7avciythw41rlvapzcu9tqs70zo 10718 9429 2026-08-25T23:38:30Z RAPTOR7762 18 1 revision imported from [[:commons:Template:-]] 9428 wikitext text/x-wiki #REDIRECT [[Template:Clear]] {{Redirect category shell| {{R from modification}} {{R from template shortcut}} }} 7ftw22ju220o4mhfryrhdhdanb4vzun Module:TNT 828 1213 10849 9458 2025-12-27T18:06:02Z commons>ExE Boss 0 Update from [[d:Special:GoToLinkedPage/mediawikiwiki/Q28132212|master]] using [[mw:Synchronizer| #Synchronizer]] 10849 Scribunto text/plain -- -- INTRO: (!!! DO NOT RENAME THIS PAGE !!!) -- This module allows any template or module to be copy/pasted between -- wikis without any translation changes. All translation text is stored -- in the global Data:*.tab pages on Commons, and used everywhere. -- -- SEE: https://www.mediawiki.org/wiki/Multilingual_Templates_and_Modules -- -- ATTENTION: -- Please do NOT rename this module - it has to be identical on all wikis. -- This code is maintained at https://www.mediawiki.org/wiki/Module:TNT -- Please do not modify it anywhere else, as it may get copied and override your changes. -- Suggestions can be made at https://www.mediawiki.org/wiki/Module_talk:TNT -- -- DESCRIPTION: -- The "msg" function uses a Commons dataset to translate a message -- with a given key (e.g. source-table), plus optional arguments -- to the wiki markup in the current content language. -- Use lang=xx to set language. Example: -- -- {{#invoke:TNT | msg -- | I18n/Template:Graphs.tab <!-- https://commons.wikimedia.org/wiki/Data:I18n/Template:Graphs.tab --> -- | source-table <!-- uses a translation message with id = "source-table" --> -- | param1 }} <!-- optional parameter --> -- -- -- The "doc" function will generate the <templatedata> parameter documentation for templates. -- This way all template parameters can be stored and localized in a single Commons dataset. -- NOTE: "doc" assumes that all documentation is located in Data:Templatedata/* on Commons. -- -- {{#invoke:TNT | doc | Graph:Lines }} -- uses https://commons.wikimedia.org/wiki/Data:Templatedata/Graph:Lines.tab -- if the current page is Template:Graph:Lines/doc -- local config = (function() local ok, res = pcall(mw.loadData, "Module:TNT/config"); return ok and res or {}; end)(); local p = {} local i18nDataset = 'I18n/Module:TNT.tab' -- Forward declaration of the local functions local sanitizeDataset, loadData, link, formatMessage function p.msg(frame) local dataset, id local params = {} local lang = nil for k, v in pairs(frame.args) do if k == 1 then dataset = mw.text.trim(v) elseif k == 2 then id = mw.text.trim(v) elseif type(k) == 'number' then params[k - 2] = mw.text.trim(v) elseif k == 'lang' and v ~= '_' then lang = mw.text.trim(v) end end return formatMessage(dataset, id, params, lang) end -- Identical to p.msg() above, but used from other lua modules -- Parameters: name of dataset, message key, optional arguments -- Example with 2 params: format('I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset') function p.format(dataset, key, ...) local checkType = require('libraryUtil').checkType checkType('format', 1, dataset, 'string') checkType('format', 2, key, 'string') return formatMessage(dataset, key, {...}) end -- Identical to p.msg() above, but used from other lua modules with the language param -- Parameters: language code, name of dataset, message key, optional arguments -- Example with 2 params: formatInLanguage('es', I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset') function p.formatInLanguage(lang, dataset, key, ...) local checkType = require('libraryUtil').checkType checkType('formatInLanguage', 1, lang, 'string') checkType('formatInLanguage', 2, dataset, 'string') checkType('formatInLanguage', 3, key, 'string') return formatMessage(dataset, key, {...}, lang) end -- Obsolete function that adds a 'c:' prefix to the first param. -- "Sandbox/Sample.tab" -> 'c:Data:Sandbox/Sample.tab' function p.link(frame) return link(frame.args[1]) end local implGetTemplateData; function p.doc(frame) local dataset = sanitizeDataset(frame.args[1]) local json, dataPage, categories = implGetTemplateData(nil, dataset, frame.args) return frame:extensionTag('templatedata', json) .. formatMessage(i18nDataset, 'edit_doc', {link(dataPage)}) .. (categories or ""); end function p.getTemplateData(dataset) local data = implGetTemplateData(true, dataset); return data; end function p.getTemplateDataNew(...) return implGetTemplateData(nil, ...); end function implGetTemplateData(legacy, dataset, args) -- TODO: add '_' parameter once lua starts reindexing properly for "all" languages local data, dataPage, categories = loadData( dataset, nil, not legacy and 'TemplateData' or nil); local names = {} for _, field in ipairs(data.schema.fields) do table.insert(names, field.name) end local numOnly = true local params = {} local paramOrder = {} for _, row in ipairs(data.data) do local newVal = {} local name = nil for pos, columnName in ipairs(names) do if columnName == 'name' then name = row[pos] else newVal[columnName] = row[pos] end end if name then if ( (type(name) ~= "number") and ( (type(name) ~= "string") or not string.match(name, "^%d+$") ) ) then numOnly = false end params[name] = newVal table.insert(paramOrder, name) end end -- Work around json encoding treating {"1":{...}} as an [{...}] if numOnly then params['zzz123']='' end local json = mw.text.jsonEncode({ params=params, paramOrder=paramOrder, description=data.description, -- TODO: Store this in a dataset: format = (args and args.format or nil), }) if numOnly then json = string.gsub(json,'"zzz123":"",?', "") end return json, dataPage, categories; end -- Local functions sanitizeDataset = function(dataset) if not dataset then return nil end dataset = mw.text.trim(dataset) if dataset == '' then return nil elseif string.sub(dataset,-4) ~= '.tab' then return dataset .. '.tab' else return dataset end end loadData = function(dataset, lang, dataType) dataset = sanitizeDataset(dataset) if not dataset then error(formatMessage(i18nDataset, 'error_no_dataset', {})) end -- Give helpful error to thirdparties who try and copy this module. if not mw.ext or not mw.ext.data or not mw.ext.data.get then error(string.format([['''Missing JsonConfig extension, or not properly configured; Cannot load https://commons.wikimedia.org/wiki/Data:%s. See https://www.mediawiki.org/wiki/Extension:JsonConfig#Supporting_Wikimedia_templates''']], dataset)) end local dataPage = dataset; local data, categories; if dataType == 'TemplateData' then dataPage = 'TemplateData/' .. dataset; data = mw.ext.data.get(dataPage, lang); if data == false then data = mw.ext.data.get('Templatedata/' .. dataset, lang); if data ~= false then local legacyTemplateDataCategoryName = config.legacyTemplateDataCategoryName; if legacyTemplateDataCategoryName ~= false then categories = string.format( '[[Category:%s%s]]', legacyTemplateDataCategoryName or "Templates using legacy global TemplateData table name", config.translatableCategoryLink and mw.getCurrentFrame():callParserFunction("#translation:") or "" ); end dataPage = 'Templatedata/' .. dataset; end end else data = mw.ext.data.get(dataset, lang) end if data == false then if dataset == i18nDataset then -- Prevent cyclical calls error('Missing Commons dataset ' .. i18nDataset) else error(formatMessage(i18nDataset, 'error_bad_dataset', {link(dataPage)})) end end return data, dataPage, categories; end -- Given a dataset name, convert it to a title with the 'commons:data:' prefix link = function(dataset) return 'c:Data:' .. mw.text.trim(dataset or '') end formatMessage = function(dataset, key, params, lang) for _, row in pairs(loadData(dataset, lang).data) do local id, msg = unpack(row) if id == key then local result = mw.message.newRawMessage(msg, unpack(params or {})) return result:plain() end end if dataset == i18nDataset then -- Prevent cyclical calls error('Invalid message key "' .. key .. '"') else error(formatMessage(i18nDataset, 'error_bad_msgkey', {key, link(dataset)})) end end return p 2ii65lh3z6ssbx7s7r8h0vsbnbhbiyl 10850 9459 2026-08-25T23:38:35Z RAPTOR7762 18 1 revision imported from [[:commons:Module:TNT]] 9458 Scribunto text/plain -- -- INTRO: (!!! DO NOT RENAME THIS PAGE !!!) -- This module allows any template or module to be copy/pasted between -- wikis without any translation changes. All translation text is stored -- in the global Data:*.tab pages on Commons, and used everywhere. -- -- SEE: https://www.mediawiki.org/wiki/Multilingual_Templates_and_Modules -- -- ATTENTION: -- Please do NOT rename this module - it has to be identical on all wikis. -- This code is maintained at https://www.mediawiki.org/wiki/Module:TNT -- Please do not modify it anywhere else, as it may get copied and override your changes. -- Suggestions can be made at https://www.mediawiki.org/wiki/Module_talk:TNT -- -- DESCRIPTION: -- The "msg" function uses a Commons dataset to translate a message -- with a given key (e.g. source-table), plus optional arguments -- to the wiki markup in the current content language. -- Use lang=xx to set language. Example: -- -- {{#invoke:TNT | msg -- | I18n/Template:Graphs.tab <!-- https://commons.wikimedia.org/wiki/Data:I18n/Template:Graphs.tab --> -- | source-table <!-- uses a translation message with id = "source-table" --> -- | param1 }} <!-- optional parameter --> -- -- -- The "doc" function will generate the <templatedata> parameter documentation for templates. -- This way all template parameters can be stored and localized in a single Commons dataset. -- NOTE: "doc" assumes that all documentation is located in Data:Templatedata/* on Commons. -- -- {{#invoke:TNT | doc | Graph:Lines }} -- uses https://commons.wikimedia.org/wiki/Data:Templatedata/Graph:Lines.tab -- if the current page is Template:Graph:Lines/doc -- local p = {} local i18nDataset = 'I18n/Module:TNT.tab' -- Forward declaration of the local functions local sanitizeDataset, loadData, link, formatMessage function p.msg(frame) local dataset, id local params = {} local lang = nil for k, v in pairs(frame.args) do if k == 1 then dataset = mw.text.trim(v) elseif k == 2 then id = mw.text.trim(v) elseif type(k) == 'number' then table.insert(params, mw.text.trim(v)) elseif k == 'lang' and v ~= '_' then lang = mw.text.trim(v) end end return formatMessage(dataset, id, params, lang) end -- Identical to p.msg() above, but used from other lua modules -- Parameters: name of dataset, message key, optional arguments -- Example with 2 params: format('I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset') function p.format(dataset, key, ...) local checkType = require('libraryUtil').checkType checkType('format', 1, dataset, 'string') checkType('format', 2, key, 'string') return formatMessage(dataset, key, {...}) end -- Identical to p.msg() above, but used from other lua modules with the language param -- Parameters: language code, name of dataset, message key, optional arguments -- Example with 2 params: formatInLanguage('es', I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset') function p.formatInLanguage(lang, dataset, key, ...) local checkType = require('libraryUtil').checkType checkType('formatInLanguage', 1, lang, 'string') checkType('formatInLanguage', 2, dataset, 'string') checkType('formatInLanguage', 3, key, 'string') return formatMessage(dataset, key, {...}, lang) end -- Obsolete function that adds a 'c:' prefix to the first param. -- "Sandbox/Sample.tab" -> 'c:Data:Sandbox/Sample.tab' function p.link(frame) return link(frame.args[1]) end function p.doc(frame) local dataset = 'Templatedata/' .. sanitizeDataset(frame.args[1]) return frame:extensionTag('templatedata', p.getTemplateData(dataset)) .. formatMessage(i18nDataset, 'edit_doc', {link(dataset)}) end function p.getTemplateData(dataset) -- TODO: add '_' parameter once lua starts reindexing properly for "all" languages local data = loadData(dataset) local names = {} for _, field in pairs(data.schema.fields) do table.insert(names, field.name) end local params = {} local paramOrder = {} for _, row in pairs(data.data) do local newVal = {} local name = nil for pos, val in pairs(row) do local columnName = names[pos] if columnName == 'name' then name = val else newVal[columnName] = val end end if name then params[name] = newVal table.insert(paramOrder, name) end end -- Work around json encoding treating {"1":{...}} as an [{...}] params['zzz123']='' local json = mw.text.jsonEncode({ params=params, paramOrder=paramOrder, description=data.description }) json = string.gsub(json,'"zzz123":"",?', "") return json end -- Local functions sanitizeDataset = function(dataset) if not dataset then return nil end dataset = mw.text.trim(dataset) if dataset == '' then return nil elseif string.sub(dataset,-4) ~= '.tab' then return dataset .. '.tab' else return dataset end end loadData = function(dataset, lang) dataset = sanitizeDataset(dataset) if not dataset then error(formatMessage(i18nDataset, 'error_no_dataset', {})) end -- Give helpful error to thirdparties who try and copy this module. if not mw.ext or not mw.ext.data or not mw.ext.data.get then error('Missing JsonConfig extension; Cannot load https://commons.wikimedia.org/wiki/Data:' .. dataset) end local data = mw.ext.data.get(dataset, lang) if data == false then if dataset == i18nDataset then -- Prevent cyclical calls error('Missing Commons dataset ' .. i18nDataset) else error(formatMessage(i18nDataset, 'error_bad_dataset', {link(dataset)})) end end return data end -- Given a dataset name, convert it to a title with the 'commons:data:' prefix link = function(dataset) return 'c:Data:' .. mw.text.trim(dataset or '') end formatMessage = function(dataset, key, params, lang) for _, row in pairs(loadData(dataset, lang).data) do local id, msg = unpack(row) if id == key then local result = mw.message.newRawMessage(msg, unpack(params or {})) return result:plain() end end if dataset == i18nDataset then -- Prevent cyclical calls error('Invalid message key "' .. key .. '"') else error(formatMessage(i18nDataset, 'error_bad_msgkey', {key, link(dataset)})) end end return p icfixo3zxiew6gqg3s5h19xr03x3wkh Tempilet:Label 10 1250 10685 9938 2021-02-11T13:54:18Z commons>Romaine 0 [[Commons:Rollback|Reverted]] edits by [[Special:Contributions/Romaine|Romaine]] ([[User talk:Romaine|talk]]) to last revision by Verdy p 10685 wikitext text/x-wiki {{#if:{{{item|{{{1|}}}}}}|{{#invoke:Wikidata label|getLabel|item={{{item|{{{1|}}}}}}|lang={{{lang|{{{2|}}}}}}|link={{{link|wikipedia}}}|capitalization={{{capitalization|none}}}}}}}<noinclude>{{Documentation}}</noinclude> nj6f7qeu9psqpbajlvwspm7rdszhqy1 10686 9943 2026-08-25T23:38:28Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Label]] 9941 wikitext text/x-wiki {{#if:{{{item|{{{1|}}} }}}| {{#invoke:Wikidata label|getLabel |item={{{item|{{{1|}}} }}} |lang={{{lang|{{{2|}}} }}} |link={{{link|-}}} |capitalization={{{capitalization|none}}} |show_id={{{show_id|}}} }} }}<noinclude> {{documentation}}</noinclude> 3n5b146mlbpr2piyuavzxrctzu75y5c Module:Wikidata label 828 1251 10649 9947 2024-12-02T17:24:15Z commons>Jarekt 0 add support for "mul" language meaning "default for all languages" 10649 Scribunto text/plain --[[ __ __ _ _ __ ___ _ _ _ _ _ _ _ | \/ | ___ __| |_ _| | ___ \ \ / (_) | _(_) __| | __ _| |_ __ _ | | __ _| |__ ___| | | |\/| |/ _ \ / _` | | | | |/ _ (_) \ /\ / /| | |/ / |/ _` |/ _` | __/ _` | | |/ _` | '_ \ / _ \ | | | | | (_) | (_| | |_| | | __/_ \ V V / | | <| | (_| | (_| | || (_| | | | (_| | |_) | __/ | |_| |_|\___/ \__,_|\__,_|_|\___(_) \_/\_/ |_|_|\_\_|\__,_|\__,_|\__\__,_| |_|\__,_|_.__/ \___|_| This module is intended to be the engine behind "Template:Label". This module was copied from Commons please ask for changes there. Please do not modify this code without applying the changes first at "Module:Wikidata label/sandbox" and testing at "Module:Wikidata label/testcases". Authors and maintainers: * User:Jarekt - original version ]] require('strict') -- used for debugging purposes as it detects cases of unintended global variables --============================================= --=== Internal functions ====================== --============================================= --------------------------------------------------------------------------- -- Normalize input arguments by converting them all to lower case and -- replacing space with "_" in the argument name. Also empty strings are -- converted to nils. Arguments are collected from arguments passed to the -- module and if missing from the template that calls the module local function getArgs(frame) local function normalize_input_args(input_args, output_args) for name, value in pairs( input_args ) do value = mw.text.trim(value) -- trim whitespaces from the beggining and the end of the string if value ~= '' then -- nuke empty strings if type(name)=='string' then name = string.gsub( string.lower(name), ' ', '_') end output_args[name] = value end end return output_args end local args = {} args = normalize_input_args(frame:getParent().args, args) args = normalize_input_args(frame.args, args) return args end --------------------------------------------------------------------------- -- Function allowing for consistent treatment of boolean-like wikitext input. -- It works similarly to Module:Yesno but does not assume val is a string local function yesno(val, default) if type(val) == 'boolean' then return val elseif type(val) == 'number' then if val == 1 then return true elseif val == 0 then return false end elseif type(val) == 'string' then val = mw.ustring.lower(val) -- put in lower case if val == 'no' or val == 'n' or val == 'false' or val == '0' then return false elseif val == 'yes' or val == 'y' or val == 'true' or val == '1' then return true end end return default end ------------------------------------------------------------------------- -- get message in a given language -- INPUTS: -- * msg - name of a message. For it to work [[MediaWiki:msg]] page need to be set up -- * lang - translate message to language "lang" -- * default - string to return in case this module is moved to a project where this message is not set -- OUTPUT: -- * translated message local function getMessage(msg, lang, default) msg = mw.message.new(msg):inLanguage(lang):plain() return (msg == nil and default) or msg end --------------------------------------------------------------------------- -- use different sitelink call depending if you already have an entity or not -- INPUTS: -- * item and entity - entity id and entity: if full entity already uploded than use that -- otherwise use entity id to look up sitelink -- * lang - language of the project -- OUTPUT: -- * sitelink local function getSitelink(item, entity, lang) if entity and entity.getSitelink then -- if we have entity then use it return entity:getSitelink(lang .. 'wiki') else -- if no entity then use different function return mw.wikibase.getSitelink(item, lang .. 'wiki') end end --------------------------------------------------------------------------- -- use different sitelink call depending if you already have an entity or not -- INPUTS: -- * item and entity - entity id and entity: if full entity already uploded than use that -- otherwise use entity id to look up sitelink -- * prop - property for which to return the best statment -- OUTPUT: -- * value of the best statment (only from the first one) local function getBestStatementsValue(item, entity, prop) local statments if entity then statments = entity:getBestStatements(prop) else statments = mw.wikibase.getBestStatements(item, prop) end for _, statment in ipairs(statments) do if statment and statment.mainsnak.datavalue.value then return statment.mainsnak.datavalue.value end end end --------------------------------------------------------------------------- -- change capitalization of the label -- INPUTS: -- * label - label string -- * capitalization - capitalization to be applied: allowed values are "tc", "lc", -- "uc", "lcfirst", and "ucfirst". Any other value will return original string -- * lang - language of the label -- OUTPUT: -- * value of the best statment (only from the first one) local function apply_capitalization(label, capitalization, lang) capitalization = string.lower(capitalization or 'none') if capitalization == 'none' then return label elseif capitalization == 'uc' then return mw.language.new(lang):uc(label) elseif capitalization == 'lc' then return mw.language.new(lang):lc(label) elseif capitalization == 'tc' then -- title case local new_label = {} for _, word in ipairs(mw.text.split(label, ' ')) do table.insert(new_label, mw.language.new(lang):ucfirst(word)) end return table.concat(new_label, ' ') elseif capitalization == 'ucfirst' then return mw.language.new(lang):ucfirst(label) elseif capitalization == 'lcfirst' then return mw.language.new(lang):lcfirst(label) end return label end --[[------------------------------------------------------------------------- get link based on user preference INPUTS: * link_type - can be : * "wikidata" - link to wikidata * "wikipedia" - link to wikipedia (language dependent) * "wikidata talk" - link to wikidata talk page * "commons" - link to commons (try sitelink then commons category then commons gallery) * "commonscat" - link to commons (try commons category then commons gallery) * "-" - means no link * item - entity ID (always provided) * entity - whole entity. It can be nil if whole entity is not loaded * langList - language fallback list for preferred language (required) OUTPUT: * link - link to the wikimedia page ]] local function getLink(link_type, item, entity, langList) local link, eLink link_type = mw.ustring.lower(link_type or '') local item_type = mw.ustring.sub(item, 1, 1) -- first letter prefix of item entity ID: 'Q', 'P' or 'M' if item_type == 'M' then eLink='c:Special:EntityPage/'..item elseif item_type == 'Q' then eLink='d:'..item -- wikibase entity page link elseif item_type == 'P' then eLink='d:Property:'..item -- wikibase entity page link else eLink='d:Special:EntityPage/'..item end if link_type == '-' then -- allow different link formats link = '' -- no link elseif link_type == 'wikidata' or item_type == 'M' then link = eLink -- link to wikibase entity page elseif link_type == 'wikidata talk' and item_type == 'P' then link = 'd:Property talk:'.. item -- link to wikidata property talk page elseif link_type == 'wikidata talk' then link = 'd:Talk:'..item -- link to wikidata talk page elseif link_type == 'commons' or link_type == 'commonscat' then --[[ When link_type == 'commons' we try the following links (in specified order): 1) commons sitelink 2) P373 "Commons Category" claims 3) P935 "Commons Gallery" claims Since most items have a commons sitelink we never have to look for claims When link_type == 'commonscat' we try to maximize chances of commons link being a category, so we try the following links (in specified order): 1) commons sitelink, which is kept if it points to a category 2) P373 "Commons Category" claims 3) commons sitelink (which does not point to a category) 4) P935 "Commons Gallery" claims Since most pages have a commons sitelink we never have to look for claims ]] local sLink = getSitelink(item, entity, 'commons') -- look for sitelink to commons if sLink then sLink = 'c:'..sLink if (link_type == 'commons') or (link_type == 'commonscat' and mw.ustring.find(sLink, 'Category:')) then link = sLink end end if not link then -- try linking to P373 "Commons Category" local cat = getBestStatementsValue(item, entity, 'P373') link = (cat ~= nil and 'c:Category:' .. cat) or nil end link = link or sLink if not link then -- try linking to P935 "Commons Gallery" link = getBestStatementsValue(item, entity, 'P935') end end if not link then -- apply default "Wikipedia" link type for _, language in ipairs(langList) do local sitelink = getSitelink(item, entity, language) if sitelink then link = 'w:'.. language ..':'.. sitelink break end end end return link or eLink -- no wiki sitelink, so link to wikidata end --============================================= --=== External functions ====================== --============================================= local p = {} --====================================================================== --=== API functions for use from other Scribunto modules =============== --====================================================================== --[[ _getLabel This function returns a label translated to desired language, created based on wikidata Inputs: 1: item - wikidata's item's q-id or entity class 2: lang - desired language of the label 3: link_type - link style. Possible values (case-insensitive): "wikipedia", "wikidata", "Commons", or "-" (no link) 4: capitalization - can be "uc" (upper case), "lc" (lower case), "ucfirst" (upper case for the first letter), "lcfirst" (lower case for the first letter), or 'none' (default) Error Handling: Bad q-id will result in displayed error ]] function p._getLabel(item, lang, link_type, capitalization, show_id) local entity, s, link, label, language, desc -- clean up the input parameters if type(item) ~= 'string' then -- "item" is not a q-id entity = item -- "item" must be the entity item = entity.id -- look-up q-id elseif tonumber(item) then -- if it is just the number then add "Q" in front item = 'Q'..item end item = mw.ustring.gsub(mw.ustring.upper(item), 'PROPERTY:P', 'P') -- make all the properties the same and capitalize if link_type == 'no' then link_type = '-' end if not lang then label, lang = mw.wikibase.getLabelWithLang(item) end if not lang then -- if still no language lang = mw.getCurrentFrame():callParserFunction("int","lang") -- get user's chosen language label = nil end -- build language fallback list lang = mw.ustring.lower(lang) local langList = mw.language.getFallbacksFor(lang) table.insert(langList, 1, lang) table.insert(langList, 'mul') -- add "default for all languages" -- get label (visible part of the link) if not label then for _, language in ipairs(langList) do -- loop over language fallback list looking for label in the specific language if entity then label = entity:getLabel(language) else label = mw.wikibase.getLabelByLang(item, language) end if label then break end -- label found and we are done end end if label then -- wikitext-escape the label if we have one label = mw.text.nowiki(label) end if not label then -- no labels found, so just show the q-id label = item elseif show_id then -- add id show_id = yesno(show_id,false) if show_id then local wordsep = getMessage('Word-separator', lang, ' ') local id = mw.message.new('parentheses', item):inLanguage(lang):plain() id = (id~=nil and id) or ('('..item..')') -- in case this module is moved to a project where {{int:parenthesis}} is not set label = label .. wordsep .. "<small>" .. id .. "</small>" end end label = apply_capitalization(label, capitalization, lang) -- look for description if entity and entity.descriptions and lang then for _, language in ipairs(langList) do if entity.descriptions[language] then desc = entity.descriptions[language].value break end end else desc = mw.wikibase.getDescription(item) end if desc and link_type ~= '-' then -- wikitext-escape the description if we have one desc = mw.text.nowiki(desc) -- add description as hover text label = '<span title="' .. desc .. '">' .. label .. '</span>' end -- return the results if link_type == '-' then return label -- return just the label else link = getLink(link_type, item, entity, langList) return '[[' .. link .. '|' .. label .. ']]' -- return link end end --[[------------------------------------------------------------------------------- _sitelinks This function returns a table of sitelinks for a single project organized by language Inputs: 1: item - wikidata's item's q-id or entity class 2: project - (case-insensitive) one of: "wikipedia", "wikisource", "wikiquote", "wikibooks", "wikinews", "wikiversity", "wikivoyage", "wiktionary", "commons", "mediawiki", "wikispecies", "wikidata", etc. Output: Table of sitelinks with language fields Output: Table of sitelinks with language fields See also * [https://foundation.wikimedia.org/wiki/Special:SiteMatrix] for the full list of supported interwikis. * [https://dumps.wikimedia.org/backup-index.html] for the full list of sitecodes (used in database dumps). ]] function p._sitelinks(item, project) local entity, sitelink -- get entity if type(item) == 'string' then -- "item" is a q-id entity = mw.wikibase.getEntity(item) else entity = item -- "item" is the entity end -- convert from english project name to proproject code local projLUT = { wikipedia = 'wiki', commons = 'commonswiki', foundation = 'foundationwiki', mediawiki = 'mediawikiwiki', wikispecies = 'specieswiki', wikidata = 'wikidatawiki', incubator = 'incubatorwiki', oldwikisource = 'sourceswiki', } local langLUT = { -- These are not language codes before the 'wiki' or 'wikiversity' suffix in a sitecode: foundation = '~', commons = '~', -- they will be skipped incubator = '~', meta = '~', mediawiki = '~', sources = '~', species = '~', beta = '~', -- Legacy language codes used in sitecodes, remapped to standard Wikimedia language codes: -- See https://meta.wikimedia.org/wiki/Special_language_codes for details als = 'gsw', bat_smg = 'sgs', fiu_vro = 'vro', be_x_old = 'be-tarask', roa_rup = 'rup', zh_classical = 'lzh', zh_yue = 'yue', zh_min_nan = 'nan', zh_wuu = 'wuu', no = 'nb', } project = project:lower() project = projLUT[project] or project -- correct the project name local n = project:len() local linkTable = {} if entity and entity.sitelinks then -- See if entity exists, and that it has sitelinks for _, sitelink in pairs(entity.sitelinks) do -- loop over all sitelinks local site = sitelink.site local m = site:len() - n local proj = site:sub(m +1) -- project part of the siteID if proj == project then -- proj matches desired "project" local lang = site:sub(1, m) -- language part of the siteID lang = langLUT[lang] or lang:gsub('_','-') if lang ~= '~' then -- proj matches desired "project" linkTable[lang] = sitelink.title end end end end return linkTable end --[[---------------------------------------------------------------- _aliases This function returns a table of aliases for a single language Inputs: 1: item - wikidata's item's q-id or entity class 2: lang - language code, like 'en' or 'de' Output: Table of aliases with language fields ]] function p._aliases(item, lang) local entity if type(item) == 'string' then -- "item" is a q-id entity = mw.wikibase.getEntity(item) else entity = item -- "item" is the entity end local aliasTable = {} if entity and entity.aliases then -- See if there is an entity and that is has aliases if entity.aliases[lang] then -- See if it has English Aliases for _, alias in pairs(entity.aliases[lang]) do -- Make a loop around the English aliases table.insert(aliasTable, alias.value) -- Create a table of English aliases end end end return aliasTable end --====================================================================== --=== Invoke functions for use from wikitext, e.g., templates ========== ---===================================================================== --[[ getLabel This function returns a label translated to desired language, created based on wikidata Usage: {{#invoke:Wikidata label|getLabel|item=Q...|lang=..|link_style=..|capitalization=..}} Parameters 1: wikidata's item's q-id (required) 2: language (optional; default {{int:lang}}) 3: link_style: "wikipedia" (default), "Wikidata", "Commons", or "-" (no link) 4: capitalization - can be "uc", "lc", "tc", "ucfirst", "lcfirst" Error Handling: Bad q-id will result in displayed error ]] function p.getLabel(frame) local args = getArgs(frame) return p._getLabel(args.item, args.lang, args.link, args.capitalization, args.show_id) end --[[------------------------------------------------------------------------------- sitelinks This function returns a comma separated list of sitelinks for a single project organized by language Its main purpose is to help with testing of _sitelinks function. Usage: {{#invoke:Wikidata label|sitelinks|item=Q...|project=..}} Inputs: 1: item - wikidata's item's q-id or entity class 2: project - "wikipedia" (or "wiki"), "wikisource", "wikiquote", "wikibooks", "wikinews", "wikiversity", "wikivoyage", "wiktionary", etc. Output: comma separated list ]] function p.sitelinks(frame) local args = getArgs(frame) local sitelinks = p._sitelinks(args.item, args.project) local sitelinkList = {} for lang, sitelink in pairs(sitelinks) do table.insert(sitelinkList, (lang=='' and sitelink) or (lang .. ':' .. sitelink)) end return table.concat(sitelinkList, ', ') end --[[---------------------------------------------------------------------------- aliases This function returns a comma separated list of aliases for a single language Its main purpose is to help with testing of _aliases function. Usage: {{#invoke:Wikidata label|aliases|item=Q...|lang=..}} Inputs: 1: item - wikidata's item's q-id or entity class 2: lang - language code, like 'en' or 'de' Output: Comma separated list of aliases ]] function p.aliases(frame) local args = getArgs(frame) return table.concat(p._aliases(args.item, args.lang), ', ') end return p 7b3k45meuo4sbudososz6gy9dx3nxzm 10650 9949 2026-08-25T23:38:26Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Wikidata_label]] 9948 Scribunto text/plain --[[ __ __ _ _ __ ___ _ _ _ _ _ _ _ | \/ | ___ __| |_ _| | ___ \ \ / (_) | _(_) __| | __ _| |_ __ _ | | __ _| |__ ___| | | |\/| |/ _ \ / _` | | | | |/ _ (_) \ /\ / /| | |/ / |/ _` |/ _` | __/ _` | | |/ _` | '_ \ / _ \ | | | | | (_) | (_| | |_| | | __/_ \ V V / | | <| | (_| | (_| | || (_| | | | (_| | |_) | __/ | |_| |_|\___/ \__,_|\__,_|_|\___(_) \_/\_/ |_|_|\_\_|\__,_|\__,_|\__\__,_| |_|\__,_|_.__/ \___|_| This module is intended to be the engine behind "Template:Label". This module was copied from Commons please ask for changes there. Please do not modify this code without applying the changes first at "Module:Wikidata label/sandbox" and testing at "Module:Wikidata label/testcases". Authors and maintainers: * User:Jarekt - original version ]] require('strict') -- used for debugging purposes as it detects cases of unintended global variables --============================================= --=== Internal functions ====================== --============================================= --------------------------------------------------------------------------- -- Normalize input arguments by converting them all to lower case and -- replacing space with "_" in the argument name. Also empty strings are -- converted to nils. Arguments are collected from arguments passed to the -- module and if missing from the template that calls the module local function getArgs(frame) local function normalize_input_args(input_args, output_args) for name, value in pairs( input_args ) do value = mw.text.trim(value) -- trim whitespaces from the beggining and the end of the string if value ~= '' then -- nuke empty strings if type(name)=='string' then name = string.gsub( string.lower(name), ' ', '_') end output_args[name] = value end end return output_args end local args = {} args = normalize_input_args(frame:getParent().args, args) args = normalize_input_args(frame.args, args) return args end --------------------------------------------------------------------------- -- Function allowing for consistent treatment of boolean-like wikitext input. -- It works similarly to Module:Yesno but does not assume val is a string local function yesno(val, default) if type(val) == 'boolean' then return val elseif type(val) == 'number' then if val == 1 then return true elseif val == 0 then return false end elseif type(val) == 'string' then val = mw.ustring.lower(val) -- put in lower case if val == 'no' or val == 'n' or val == 'false' or val == '0' then return false elseif val == 'yes' or val == 'y' or val == 'true' or val == '1' then return true end end return default end ------------------------------------------------------------------------- -- get message in a given language -- INPUTS: -- * msg - name of a message. For it to work [[MediaWiki:msg]] page need to be set up -- * lang - translate message to language "lang" -- * default - string to return in case this module is moved to a project where this message is not set -- OUTPUT: -- * translated message local function getMessage(msg, lang, default) msg = mw.message.new(msg):inLanguage(lang):plain() return (msg == nil and default) or msg end --------------------------------------------------------------------------- -- use different sitelink call depending if you already have an entity or not -- INPUTS: -- * item and entity - entity id and entity: if full entity already uploded than use that -- otherwise use entity id to look up sitelink -- * lang - language of the project -- OUTPUT: -- * sitelink local function getSitelink(item, entity, lang) if entity and entity.getSitelink then -- if we have entity then use it return entity:getSitelink(lang .. 'wiki') else -- if no entity then use different function return mw.wikibase.getSitelink(item, lang .. 'wiki') end end --------------------------------------------------------------------------- -- use different sitelink call depending if you already have an entity or not -- INPUTS: -- * item and entity - entity id and entity: if full entity already uploded than use that -- otherwise use entity id to look up sitelink -- * prop - property for which to return the best statment -- OUTPUT: -- * value of the best statment (only from the first one) local function getBestStatementsValue(item, entity, prop) local statments if entity then statments = entity:getBestStatements(prop) else statments = mw.wikibase.getBestStatements(item, prop) end for _, statment in ipairs(statments) do if statment and statment.mainsnak.datavalue.value then return statment.mainsnak.datavalue.value end end end --------------------------------------------------------------------------- -- change capitalization of the label -- INPUTS: -- * label - label string -- * capitalization - capitalization to be applied: allowed values are "tc", "lc", -- "uc", "lcfirst", and "ucfirst". Any other value will return original string -- * lang - language of the label -- OUTPUT: -- * value of the best statment (only from the first one) local function apply_capitalization(label, capitalization, lang) capitalization = string.lower(capitalization or 'none') if capitalization == 'none' then return label elseif capitalization == 'uc' then return mw.language.new(lang):uc(label) elseif capitalization == 'lc' then return mw.language.new(lang):lc(label) elseif capitalization == 'tc' then -- title case local new_label = {} for _, word in ipairs(mw.text.split(label, ' ')) do table.insert(new_label, mw.language.new(lang):ucfirst(word)) end return table.concat(new_label, ' ') elseif capitalization == 'ucfirst' then return mw.language.new(lang):ucfirst(label) elseif capitalization == 'lcfirst' then return mw.language.new(lang):lcfirst(label) end return label end --[[------------------------------------------------------------------------- get link based on user preference INPUTS: * link_type - can be : * "wikidata" - link to wikidata * "wikipedia" - link to wikipedia (language dependent) * "wikidata talk" - link to wikidata talk page * "commons" - link to commons (try sitelink then commons category then commons gallery) * "commonscat" - link to commons (try commons category then commons gallery) * "-" - means no link * item - entity ID (always provided) * entity - whole entity. It can be nil if whole entity is not loaded * langList - language fallback list for preferred language (required) OUTPUT: * link - link to the wikimedia page ]] local function getLink(link_type, item, entity, langList) local link, eLink link_type = mw.ustring.lower(link_type or '') local item_type = mw.ustring.sub(item, 1, 1) -- first letter prefix of item entity ID: 'Q', 'P' or 'M' if item_type == 'M' then eLink='c:Special:EntityPage/'..item elseif item_type == 'Q' then eLink='d:'..item -- wikibase entity page link elseif item_type == 'P' then eLink='d:Property:'..item -- wikibase entity page link else eLink='d:Special:EntityPage/'..item end if link_type == '-' then -- allow different link formats link = '' -- no link elseif link_type == 'wikidata' or item_type == 'M' then link = eLink -- link to wikibase entity page elseif link_type == 'wikidata talk' and item_type == 'P' then link = 'd:Property talk:'.. item -- link to wikidata property talk page elseif link_type == 'wikidata talk' then link = 'd:Talk:'..item -- link to wikidata talk page elseif link_type == 'commons' or link_type == 'commonscat' then --[[ When link_type == 'commons' we try the following links (in specified order): 1) commons sitelink 2) P373 "Commons Category" claims 3) P935 "Commons Gallery" claims Since most items have a commons sitelink we never have to look for claims When link_type == 'commonscat' we try to maximize chances of commons link being a category, so we try the following links (in specified order): 1) commons sitelink, which is kept if it points to a category 2) P373 "Commons Category" claims 3) commons sitelink (which does not point to a category) 4) P935 "Commons Gallery" claims Since most pages have a commons sitelink we never have to look for claims ]] local sLink = getSitelink(item, entity, 'commons') -- look for sitelink to commons if sLink then sLink = 'c:'..sLink if (link_type == 'commons') or (link_type == 'commonscat' and mw.ustring.find(sLink, 'Category:')) then link = sLink end end if not link then -- try linking to P373 "Commons Category" local cat = getBestStatementsValue(item, entity, 'P373') link = (cat ~= nil and 'c:Category:' .. cat) or nil end link = link or sLink if not link then -- try linking to P935 "Commons Gallery" link = getBestStatementsValue(item, entity, 'P935') end end if not link then -- apply default "Wikipedia" link type for _, language in ipairs(langList) do local sitelink = getSitelink(item, entity, language) if sitelink then link = 'w:'.. language ..':'.. sitelink break end end end return link or eLink -- no wiki sitelink, so link to wikidata end --============================================= --=== External functions ====================== --============================================= local p = {} --====================================================================== --=== API functions for use from other Scribunto modules =============== --====================================================================== --[[ _getLabel This function returns a label translated to desired language, created based on wikidata Inputs: 1: item - wikidata's item's q-id or entity class 2: lang - desired language of the label 3: link_type - link style. Possible values (case-insensitive): "wikipedia", "wikidata", "Commons", or "-" (no link) 4: capitalization - can be "uc" (upper case), "lc" (lower case), "ucfirst" (upper case for the first letter), "lcfirst" (lower case for the first letter), or 'none' (default) Error Handling: Bad q-id will result in displayed error ]] function p._getLabel(item, lang, link_type, capitalization, show_id) local entity, s, link, label, language, desc -- clean up the input parameters if type(item) ~= 'string' then -- "item" is not a q-id entity = item -- "item" must be the entity item = entity.id -- look-up q-id elseif tonumber(item) then -- if it is just the number then add "Q" in front item = 'Q'..item end item = mw.ustring.gsub(mw.ustring.upper(item), 'PROPERTY:P', 'P') -- make all the properties the same and capitalize if link_type == 'no' then link_type = '-' end if not lang then label, lang = mw.wikibase.getLabelWithLang(item) end if not lang then -- if still no language lang = mw.getCurrentFrame():callParserFunction("int","lang") -- get user's chosen language label = nil end -- build language fallback list lang = mw.ustring.lower(lang) local langList = mw.language.getFallbacksFor(lang) table.insert(langList, 1, lang) table.insert(langList, 'mul') -- add "default for all languages" -- get label (visible part of the link) if not label then for _, language in ipairs(langList) do -- loop over language fallback list looking for label in the specific language if entity then label = entity:getLabel(language) else label = mw.wikibase.getLabelByLang(item, language) end if label then break end -- label found and we are done end end if label then -- wikitext-escape the label if we have one label = mw.text.nowiki(label) end if not label then -- no labels found, so just show the q-id label = item elseif show_id then -- add id show_id = yesno(show_id,false) if show_id then local wordsep = getMessage('Word-separator', lang, ' ') local id = mw.message.new('parentheses', item):inLanguage(lang):plain() id = (id~=nil and id) or ('('..item..')') -- in case this module is moved to a project where {{int:parenthesis}} is not set label = label .. wordsep .. "<small>" .. id .. "</small>" end end label = apply_capitalization(label, capitalization, lang) -- look for description if entity and entity.descriptions and lang then for _, language in ipairs(langList) do if entity.descriptions[language] then desc = entity.descriptions[language].value break end end else desc = mw.wikibase.getDescription(item) end if desc and link_type ~= '-' then -- wikitext-escape the description if we have one desc = mw.text.nowiki(desc) -- add description as hover text label = '<span title="' .. desc .. '">' .. label .. '</span>' end -- return the results if link_type == '-' then return label -- return just the label else link = getLink(link_type, item, entity, langList) return '[[' .. link .. '|' .. label .. ']]' -- return link end end --[[------------------------------------------------------------------------------- _sitelinks This function returns a table of sitelinks for a single project organized by language Inputs: 1: item - wikidata's item's q-id or entity class 2: project - (case-insensitive) one of: "wikipedia", "wikisource", "wikiquote", "wikibooks", "wikinews", "wikiversity", "wikivoyage", "wiktionary", "commons", "mediawiki", "wikispecies", "wikidata", etc. Output: Table of sitelinks with language fields Output: Table of sitelinks with language fields See also * [https://foundation.wikimedia.org/wiki/Special:SiteMatrix] for the full list of supported interwikis. * [https://dumps.wikimedia.org/backup-index.html] for the full list of sitecodes (used in database dumps). ]] function p._sitelinks(item, project) local entity, sitelink -- get entity if type(item) == 'string' then -- "item" is a q-id entity = mw.wikibase.getEntity(item) else entity = item -- "item" is the entity end -- convert from english project name to proproject code local projLUT = { wikipedia = 'wiki', commons = 'commonswiki', foundation = 'foundationwiki', mediawiki = 'mediawikiwiki', wikispecies = 'specieswiki', wikidata = 'wikidatawiki', incubator = 'incubatorwiki', oldwikisource = 'sourceswiki', } local langLUT = { -- These are not language codes before the 'wiki' or 'wikiversity' suffix in a sitecode: foundation = '~', commons = '~', -- they will be skipped incubator = '~', meta = '~', mediawiki = '~', sources = '~', species = '~', beta = '~', -- Legacy language codes used in sitecodes, remapped to standard Wikimedia language codes: -- See https://meta.wikimedia.org/wiki/Special_language_codes for details als = 'gsw', bat_smg = 'sgs', fiu_vro = 'vro', be_x_old = 'be-tarask', roa_rup = 'rup', zh_classical = 'lzh', zh_yue = 'yue', zh_min_nan = 'nan', zh_wuu = 'wuu', no = 'nb', } project = project:lower() project = projLUT[project] or project -- correct the project name local n = project:len() local linkTable = {} if entity and entity.sitelinks then -- See if entity exists, and that it has sitelinks for _, sitelink in pairs(entity.sitelinks) do -- loop over all sitelinks local site = sitelink.site local m = site:len() - n local proj = site:sub(m +1) -- project part of the siteID if proj == project then -- proj matches desired "project" local lang = site:sub(1, m) -- language part of the siteID lang = langLUT[lang] or lang:gsub('_','-') if lang ~= '~' then -- proj matches desired "project" linkTable[lang] = sitelink.title end end end end return linkTable end --[[---------------------------------------------------------------- _aliases This function returns a table of aliases for a single language Inputs: 1: item - wikidata's item's q-id or entity class 2: lang - language code, like 'en' or 'de' Output: Table of aliases with language fields ]] function p._aliases(item, lang) local entity if type(item) == 'string' then -- "item" is a q-id entity = mw.wikibase.getEntity(item) else entity = item -- "item" is the entity end local aliasTable = {} if entity and entity.aliases then -- See if there is an entity and that is has aliases if entity.aliases[lang] then -- See if it has English Aliases for _, alias in pairs(entity.aliases[lang]) do -- Make a loop around the English aliases table.insert(aliasTable, alias.value) -- Create a table of English aliases end end end return aliasTable end --====================================================================== --=== Invoke functions for use from wikitext, e.g., templates ========== ---===================================================================== --[[ getLabel This function returns a label translated to desired language, created based on wikidata Usage: {{#invoke:Wikidata label|getLabel|item=Q...|lang=..|link_style=..|capitalization=..}} Parameters 1: wikidata's item's q-id (required) 2: language (optional; default {{int:lang}}) 3: link_style: "wikipedia" (default), "Wikidata", "Commons", or "-" (no link) 4: capitalization - can be "uc", "lc", "tc", "ucfirst", "lcfirst" Error Handling: Bad q-id will result in displayed error ]] function p.getLabel(frame) local args = getArgs(frame) return p._getLabel(args.item, args.lang, args.link, args.capitalization, args.show_id) end --[[------------------------------------------------------------------------------- sitelinks This function returns a comma separated list of sitelinks for a single project organized by language Its main purpose is to help with testing of _sitelinks function. Usage: {{#invoke:Wikidata label|sitelinks|item=Q...|project=..}} Inputs: 1: item - wikidata's item's q-id or entity class 2: project - "wikipedia" (or "wiki"), "wikisource", "wikiquote", "wikibooks", "wikinews", "wikiversity", "wikivoyage", "wiktionary", etc. Output: comma separated list ]] function p.sitelinks(frame) local args = getArgs(frame) local sitelinks = p._sitelinks(args.item, args.project) local sitelinkList = {} for lang, sitelink in pairs(sitelinks) do table.insert(sitelinkList, (lang=='' and sitelink) or (lang .. ':' .. sitelink)) end return table.concat(sitelinkList, ', ') end --[[---------------------------------------------------------------------------- aliases This function returns a comma separated list of aliases for a single language Its main purpose is to help with testing of _aliases function. Usage: {{#invoke:Wikidata label|aliases|item=Q...|lang=..}} Inputs: 1: item - wikidata's item's q-id or entity class 2: lang - language code, like 'en' or 'de' Output: Comma separated list of aliases ]] function p.aliases(frame) local args = getArgs(frame) return table.concat(p._aliases(args.item, args.lang), ', ') end return p 7b3k45meuo4sbudososz6gy9dx3nxzm Tempilet:T1 10 1270 10945 10417 2025-10-11T19:52:13Z commons>Achim55 0 [[Commons:Rollback|Reverted]] edits by [[Special:Contributions/2402:3A80:1E1B:A914:6CF8:7E3E:1B0D:8981|2402:3A80:1E1B:A914:6CF8:7E3E:1B0D:8981]] ([[User talk:2402:3A80:1E1B:A914:6CF8:7E3E:1B0D:8981|talk]]) to last revision by Sarang 10945 wikitext text/x-wiki {{T/main|{{{1|}}} |{{{2|}}} |{{{3|{{{lang|}}}}}} |{{{4|}}} |{{{5|}}} |incl={{{incl|{{{i|1}}}}}} |code={{{code|}}} |link={{{link|}}} |case={{{case|}}} |i18n={{{i18n|}}} |parm={{{parm|}}} |full={{{full|}}} }}<noinclude> {{documentation|Template:T/doc}} </noinclude> ihdmvv4dc7650xxqjayfwkuegv9ghzw 10946 10418 2026-08-25T23:38:38Z RAPTOR7762 18 1 revision imported from [[:commons:Template:T1]] 10417 wikitext text/x-wiki #REDIRECT [[Template:Template link]] {{Rcat shell|{{R from template shortcut}}}} agft1wgq288u2uoq25oey2z7oz8m2sa Tempilet:Shugabannin Amurka 10 1281 10549 2026-08-25T21:47:59Z Abu Sadeeq77 197 Created page with "{{reflist}} {{Shugabannin Amurka}} [[Category:Shugabannin Amurka]]" 10549 wikitext text/x-wiki {{reflist}} {{Shugabannin Amurka}} [[Category:Shugabannin Amurka]] 2xwbaz6be0lz0zkq0vo44i4q1vn3x8k Tempilet:Location map+ 10 1282 10573 2017-06-16T21:44:41Z en>Plastikspork 0 TFD closed as no consensus ([[WP:XFDC|XFDcloser]]) 10573 wikitext text/x-wiki <includeonly>{{#invoke:Location map/multi|container}}</includeonly><noinclude>{{documentation}}</noinclude> cshtxc3nnd9lycyakwliacrbcdvid4y 10574 10573 2026-08-25T23:33:35Z RAPTOR7762 18 1 revision imported from [[:en:Template:Location_map+]] 10573 wikitext text/x-wiki <includeonly>{{#invoke:Location map/multi|container}}</includeonly><noinclude>{{documentation}}</noinclude> cshtxc3nnd9lycyakwliacrbcdvid4y Tempilet:Anchor 10 1283 10575 2021-01-31T22:06:17Z en>Plastikspork 0 Fix |=FOO bug where {{anchor|=FOO}} transcludes [[Template:FOO]] 10575 wikitext text/x-wiki {{<includeonly>safesubst:</includeonly>#invoke:anchor|main}}<noinclude> {{Documentation}} <!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --> </noinclude> enb6c4d9v8ozj2bh2wvmo7698r1sot4 10576 10575 2026-08-25T23:33:42Z RAPTOR7762 18 1 revision imported from [[:en:Template:Anchor]] 10575 wikitext text/x-wiki {{<includeonly>safesubst:</includeonly>#invoke:anchor|main}}<noinclude> {{Documentation}} <!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --> </noinclude> enb6c4d9v8ozj2bh2wvmo7698r1sot4 10805 2020-02-14T10:43:51Z commons>Ahmad252 0 Now working with [[Module:Anchor]] instead 10805 wikitext text/x-wiki {{{{{|safesubst:}}}#invoke:anchor|main}}<noinclude> {{Documentation}} <!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --> </noinclude> cjfgfxc6tpjgpyvzhnbfkngu6u3spzc 10806 10576 2026-08-25T23:38:33Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Anchor]] 10575 wikitext text/x-wiki {{<includeonly>safesubst:</includeonly>#invoke:anchor|main}}<noinclude> {{Documentation}} <!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --> </noinclude> enb6c4d9v8ozj2bh2wvmo7698r1sot4 Module:Anchor 828 1284 10577 2020-09-24T22:32:51Z en>Pppery 0 Add class per edit request 10577 Scribunto text/plain -- This module implements {{anchor}}. local getArgs = require('Module:Arguments').getArgs local tableTools = require('Module:TableTools') local p = {} function p.main(frame) -- Get the positional arguments from #invoke, remove any nil values, -- and pass them to p._main. local args = getArgs(frame) local argArray = tableTools.compressSparseArray(args) return p._main(unpack(argArray)) end function p._main(...) -- Generate the list of anchors. local anchors = {...} local ret = {} for _, anchor in ipairs(anchors) do ret[#ret + 1] = '<span class="anchor" id="' .. anchor .. '"></span>' end return table.concat(ret) end return p qn9l8z10vmc8ghld7804a9aaffg6g8o 10578 10577 2026-08-25T23:33:42Z RAPTOR7762 18 1 revision imported from [[:en:Module:Anchor]] 10577 Scribunto text/plain -- This module implements {{anchor}}. local getArgs = require('Module:Arguments').getArgs local tableTools = require('Module:TableTools') local p = {} function p.main(frame) -- Get the positional arguments from #invoke, remove any nil values, -- and pass them to p._main. local args = getArgs(frame) local argArray = tableTools.compressSparseArray(args) return p._main(unpack(argArray)) end function p._main(...) -- Generate the list of anchors. local anchors = {...} local ret = {} for _, anchor in ipairs(anchors) do ret[#ret + 1] = '<span class="anchor" id="' .. anchor .. '"></span>' end return table.concat(ret) end return p qn9l8z10vmc8ghld7804a9aaffg6g8o 10807 2020-02-14T17:00:59Z commons>Tacsipacsi 0 still accept {{{anchor}}}, used e.g. on [[Commons:European Science Photo Competition 2015/Winners]] 10807 Scribunto text/plain -- This module implements {{anchor}}. local getArgs = require('Module:Arguments').getArgs local tableTools = require('Module:TableTools') local p = {} function p.main(frame) -- Get the positional arguments from #invoke, remove any nil values, -- and pass them to p._main. local args = getArgs(frame) args[1] = args[1] or args.anchor local argArray = tableTools.compressSparseArray(args) return p._main(unpack(argArray)) end function p._main(...) -- Generate the list of anchors. local anchors = {...} local ret = {} for _, anchor in ipairs(anchors) do ret[#ret + 1] = '<span id="' .. anchor .. '"></span>' end return table.concat(ret) end return p 2pv7ltgi61xmnjphayza1bs93gzf81t 10808 10578 2026-08-25T23:38:33Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Anchor]] 10577 Scribunto text/plain -- This module implements {{anchor}}. local getArgs = require('Module:Arguments').getArgs local tableTools = require('Module:TableTools') local p = {} function p.main(frame) -- Get the positional arguments from #invoke, remove any nil values, -- and pass them to p._main. local args = getArgs(frame) local argArray = tableTools.compressSparseArray(args) return p._main(unpack(argArray)) end function p._main(...) -- Generate the list of anchors. local anchors = {...} local ret = {} for _, anchor in ipairs(anchors) do ret[#ret + 1] = '<span class="anchor" id="' .. anchor .. '"></span>' end return table.concat(ret) end return p qn9l8z10vmc8ghld7804a9aaffg6g8o Tempilet:Code 10 1285 10579 2025-02-03T21:00:59Z en>Ahecht 0 Undid revision [[Special:Diff/1273749230|1273749230]] by [[Special:Contributions/Ahecht|Ahecht]] ([[User talk:Ahecht|talk]]) 10579 wikitext text/x-wiki {{#tag:syntaxhighlight|{{{code|{{{1}}}}}}|lang={{{lang|{{{2|text}}}}}}|class={{{class|}}}|style={{{style|}}}|inline=1}}<noinclude> {{documentation}} <!-- Add categories to the /doc subpage, interwikis to Wikidata, not here --> </noinclude> c4j1dm0qlwo4osjl4tof16x31yebphy 10580 10579 2026-08-25T23:33:43Z RAPTOR7762 18 1 revision imported from [[:en:Template:Code]] 10579 wikitext text/x-wiki {{#tag:syntaxhighlight|{{{code|{{{1}}}}}}|lang={{{lang|{{{2|text}}}}}}|class={{{class|}}}|style={{{style|}}}|inline=1}}<noinclude> {{documentation}} <!-- Add categories to the /doc subpage, interwikis to Wikidata, not here --> </noinclude> c4j1dm0qlwo4osjl4tof16x31yebphy Tempilet:Coord 10 1286 10581 2025-12-25T18:30:20Z en>Primefac 0 [[Wikipedia:Templates for discussion/Log/2025 December 13#Template:WikidataCoord]] closed as merge ([[WP:XFDC#4.0.16|XFDcloser]]) 10581 wikitext text/x-wiki <includeonly>{{#invoke:Coordinates|coord}}</includeonly><noinclude> {{Documentation}} <!-- Add categories to the /doc subpage, interwikis to Wikidata, not here --> </noinclude> 0o7lasvhdxe29mlczlsmvzkvka0kscy 10582 10581 2026-08-25T23:33:43Z RAPTOR7762 18 1 revision imported from [[:en:Template:Coord]] 10581 wikitext text/x-wiki <includeonly>{{#invoke:Coordinates|coord}}</includeonly><noinclude> {{Documentation}} <!-- Add categories to the /doc subpage, interwikis to Wikidata, not here --> </noinclude> 0o7lasvhdxe29mlczlsmvzkvka0kscy Tempilet:Location map~ 10 1287 10583 2026-06-01T21:39:27Z en>Zackmann08 0 Undid revision [[Special:Diff/1357297609|1357297609]] by [[Special:Contributions/Zackmann08|Zackmann08]] ([[User talk:Zackmann08|talk]]) 10583 wikitext text/x-wiki <includeonly>{{#invoke:Location map|mark}}</includeonly><noinclude> {{Documentation}} </noinclude> 1lw8zlt59mztp7ojo9dt06oixklle0p 10584 10583 2026-08-25T23:33:43Z RAPTOR7762 18 1 revision imported from [[:en:Template:Location_map~]] 10583 wikitext text/x-wiki <includeonly>{{#invoke:Location map|mark}}</includeonly><noinclude> {{Documentation}} </noinclude> 1lw8zlt59mztp7ojo9dt06oixklle0p Module:Coordinates 828 1288 10585 2026-07-01T16:40:59Z en>Ahecht 0 Copy from sandbox. Implement parsing of coordinates from a single parameter. Feel free to roll back if there are unintended consequences. 10585 Scribunto text/plain --[[ This module is intended to replace the functionality of {{Coord}} and related templates. It provides several methods, including {{#invoke:Coordinates | coord }} : General function formatting and displaying coordinate values. {{#invoke:Coordinates | dec2dms }} : Simple function for converting decimal degree values to DMS format. {{#invoke:Coordinates | dms2dec }} : Simple function for converting DMS format to decimal degree format. {{#invoke:Coordinates | link }} : Export the link used to reach the tools ]] require('strict') local math_mod = require("Module:Math") local coordinates = {}; local isSandbox = mw.getCurrentFrame():getTitle():find('sandbox', 1, true); local current_page = mw.title.getCurrentTitle() local page_name = mw.uri.encode( current_page.prefixedText, 'WIKI' ); local coord_link = 'https://geohack.toolforge.org/geohack.php?pagename=' .. page_name .. '&params=' --[[ Helper function, replacement for {{coord/display/title}} ]] local function displaytitle(coords) return mw.getCurrentFrame():extensionTag{ name = 'indicator', args = { name = 'coordinates' }, content = '<span id="coordinates">[[Geographic coordinate system|Coordinates]]: ' .. coords .. '</span>' } end --[[ Helper function, used in detecting DMS formatting ]] local function dmsTest(first, second) if type(first) ~= 'string' or type(second) ~= 'string' then return nil end local s = (first .. second):upper() return s:find('^[NS][EW]$') or s:find('^[EW][NS]$') end --[[ Wrapper function to grab args, see Module:Arguments for this function's documentation. ]] local function makeInvokeFunc(funcName) return function (frame) local args = require('Module:Arguments').getArgs(frame, { wrappers = 'Template:Coord' }) return coordinates[funcName](args, frame) end end --[[ Helper function, handle optional args. ]] local function optionalArg(arg, supplement) return arg and arg .. supplement or '' end --[[ Formats any error messages generated for display ]] local function errorPrinter(errors) local result = "" for i,v in ipairs(errors) do result = result .. '<strong class="error">Coordinates: ' .. v[2] .. '</strong><br />' end return result end --[[ Determine the required CSS class to display coordinates Usually geo-nondefault is hidden by CSS, unless a user has overridden this for himself default is the mode as specificied by the user when calling the {{coord}} template mode is the display mode (dec or dms) that we will need to determine the css class for ]] local function displayDefault(default, mode) if default == "" then default = "dec" end if default == mode then return "geo-default" else return "geo-nondefault" end end --[[ specPrinter Output formatter. Takes the structure generated by either parseDec or parseDMS and formats it for inclusion on Wikipedia. ]] local function specPrinter(args, coordinateSpec) local uriComponents = coordinateSpec["param"] if uriComponents == "" then -- RETURN error, should never be empty or nil return "ERROR param was empty" end if args["name"] then uriComponents = uriComponents .. "&title=" .. mw.uri.encode(coordinateSpec["name"]) end local geodmshtml = '<span class="geo-dms" title="Maps, aerial photos, and other data for this location">' .. '<span class="latitude">' .. coordinateSpec["dms-lat"] .. '</span> ' .. '<span class="longitude">' ..coordinateSpec["dms-long"] .. '</span>' .. '</span>' local lat = tonumber( coordinateSpec["dec-lat"] ) or 0 local geodeclat if lat < 0 then -- FIXME this breaks the pre-existing precision geodeclat = tostring(coordinateSpec["dec-lat"]):sub(2) .. "°S" else geodeclat = (coordinateSpec["dec-lat"] or 0) .. "°N" end local long = tonumber( coordinateSpec["dec-long"] ) or 0 local geodeclong if long < 0 then -- FIXME does not handle unicode minus geodeclong = tostring(coordinateSpec["dec-long"]):sub(2) .. "°W" else geodeclong = (coordinateSpec["dec-long"] or 0) .. "°E" end local geodechtml = '<span class="geo-dec" title="Maps, aerial photos, and other data for this location">' .. geodeclat .. ' ' .. geodeclong .. '</span>' local geonumhtml = '<span class="geo">' .. coordinateSpec["dec-lat"] .. '; ' .. coordinateSpec["dec-long"] .. '</span>' local inner = '<span class="' .. displayDefault(coordinateSpec["default"], "dms" ) .. '">' .. geodmshtml .. '</span>' .. '<span class="geo-multi-punct">&#xfeff; / &#xfeff;</span>' .. '<span class="' .. displayDefault(coordinateSpec["default"], "dec" ) .. '">'; if not args["name"] then inner = inner .. geodechtml .. '<span style="display:none">&#xfeff; / ' .. geonumhtml .. '</span></span>' else inner = inner .. '<span class="vcard">' .. geodechtml .. '<span style="display:none">&#xfeff; / ' .. geonumhtml .. '</span>' .. '<span style="display:none">&#xfeff; (<span class="fn org">' .. args["name"] .. '</span>)</span></span></span>' end local stylesheetLink = 'Module:Coordinates' .. ( isSandbox and '/sandbox' or '' ) .. '/styles.css' return mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = { src = stylesheetLink } } .. '<span class="plainlinks nourlexpansion">[' .. coord_link .. uriComponents .. ' ' .. inner .. ']</span>' .. '[[Category:Pages using gadget WikiMiniAtlas]]' end --[[ Helper function, convert decimal to degrees ]] local function convert_dec2dms_d(coordinate) local d = math_mod._round( coordinate, 0 ) .. "°" return d .. "" end --[[ Helper function, convert decimal to degrees and minutes ]] local function convert_dec2dms_dm(coordinate) coordinate = math_mod._round( coordinate * 60, 0 ); local m = coordinate % 60; coordinate = math.floor( (coordinate - m) / 60 ); local d = coordinate % 360 .."°" return d .. string.format( "%02d′", m ) end --[[ Helper function, convert decimal to degrees, minutes, and seconds ]] local function convert_dec2dms_dms(coordinate) coordinate = math_mod._round( coordinate * 60 * 60, 0 ); local s = coordinate % 60 coordinate = math.floor( (coordinate - s) / 60 ); local m = coordinate % 60 coordinate = math.floor( (coordinate - m) / 60 ); local d = coordinate % 360 .."°" return d .. string.format( "%02d′", m ) .. string.format( "%02d″", s ) end --[[ Helper function, convert decimal latitude or longitude to degrees, minutes, and seconds format based on the specified precision. ]] local function convert_dec2dms(coordinate, firstPostfix, secondPostfix, precision) local coord = tonumber(coordinate) local postfix if coord >= 0 then postfix = firstPostfix else postfix = secondPostfix end precision = precision:lower(); if precision == "dms" then return convert_dec2dms_dms( math.abs( coord ) ) .. postfix; elseif precision == "dm" then return convert_dec2dms_dm( math.abs( coord ) ) .. postfix; elseif precision == "d" then return convert_dec2dms_d( math.abs( coord ) ) .. postfix; end end --[[ Convert DMS format into a N or E decimal coordinate ]] local function convert_dms2dec(direction, degrees_str, minutes_str, seconds_str) local degrees = tonumber(degrees_str) local minutes = tonumber(minutes_str) or 0 local seconds = tonumber(seconds_str) or 0 local factor = 1 if direction == "S" or direction == "W" then factor = -1 end local precision = 0 if seconds_str then precision = 5 + math.max( math_mod._precision(seconds_str), 0 ); elseif minutes_str and minutes_str ~= '' then precision = 3 + math.max( math_mod._precision(minutes_str), 0 ); else precision = math.max( math_mod._precision(degrees_str), 0 ); end local decimal = factor * (degrees+(minutes+seconds/60)/60) return string.format( "%." .. precision .. "f", decimal ) -- not tonumber since this whole thing is string based. end --[[ Checks input values to for out of range errors. ]] local function validate( lat_d, lat_m, lat_s, long_d, long_m, long_s, source, strong ) local errors = {}; lat_d = tonumber( lat_d ) or 0; lat_m = tonumber( lat_m ) or 0; lat_s = tonumber( lat_s ) or 0; long_d = tonumber( long_d ) or 0; long_m = tonumber( long_m ) or 0; long_s = tonumber( long_s ) or 0; if strong then if lat_d < 0 then table.insert(errors, {source, "latitude degrees < 0 with hemisphere flag"}) end if long_d < 0 then table.insert(errors, {source, "longitude degrees < 0 with hemisphere flag"}) end --[[ #coordinates is inconsistent about whether this is an error. If globe: is specified, it won't error on this condition, but otherwise it will. For not simply disable this check. if long_d > 180 then table.insert(errors, {source, "longitude degrees > 180 with hemisphere flag"}) end ]] end if lat_d > 90 then table.insert(errors, {source, "latitude degrees > 90"}) end if lat_d < -90 then table.insert(errors, {source, "latitude degrees < -90"}) end if lat_m >= 60 then table.insert(errors, {source, "latitude minutes >= 60"}) end if lat_m < 0 then table.insert(errors, {source, "latitude minutes < 0"}) end if lat_s >= 60 then table.insert(errors, {source, "latitude seconds >= 60"}) end if lat_s < 0 then table.insert(errors, {source, "latitude seconds < 0"}) end if long_d >= 360 then table.insert(errors, {source, "longitude degrees >= 360"}) end if long_d <= -360 then table.insert(errors, {source, "longitude degrees <= -360"}) end if long_m >= 60 then table.insert(errors, {source, "longitude minutes >= 60"}) end if long_m < 0 then table.insert(errors, {source, "longitude minutes < 0"}) end if long_s >= 60 then table.insert(errors, {source, "longitude seconds >= 60"}) end if long_s < 0 then table.insert(errors, {source, "longitude seconds < 0"}) end return errors; end --[[ parseDec Transforms decimal format latitude and longitude into the structure to be used in displaying coordinates ]] local function parseDec( lat, long, format ) local coordinateSpec = {} local errors = {} if not long then return nil, {{"parseDec", "Missing longitude"}} elseif not tonumber(long) then return nil, {{"parseDec", "Longitude could not be parsed as a number: " .. long}} end errors = validate( lat, nil, nil, long, nil, nil, 'parseDec', false ); coordinateSpec["dec-lat"] = lat; coordinateSpec["dec-long"] = long; local mode = coordinates.determineMode( lat, long ); coordinateSpec["dms-lat"] = convert_dec2dms( lat, "N", "S", mode) -- {{coord/dec2dms|{{{1}}}|N|S|{{coord/prec dec|{{{1}}}|{{{2}}}}}}} coordinateSpec["dms-long"] = convert_dec2dms( long, "E", "W", mode) -- {{coord/dec2dms|{{{2}}}|E|W|{{coord/prec dec|{{{1}}}|{{{2}}}}}}} if format then coordinateSpec.default = format else coordinateSpec.default = "dec" end return coordinateSpec, errors end --[[ parseDMS Transforms degrees, minutes, seconds format latitude and longitude into the a structure to be used in displaying coordinates ]] local function parseDMS( lat_d, lat_m, lat_s, lat_f, long_d, long_m, long_s, long_f, format ) local coordinateSpec, errors, backward = {}, {} lat_f = lat_f:upper(); long_f = long_f:upper(); -- Check if specified backward if lat_f == 'E' or lat_f == 'W' then lat_d, long_d, lat_m, long_m, lat_s, long_s, lat_f, long_f, backward = long_d, lat_d, long_m, lat_m, long_s, lat_s, long_f, lat_f, true; end errors = validate( lat_d, lat_m, lat_s, long_d, long_m, long_s, 'parseDMS', true ); if not long_d then return nil, {{"parseDMS", "Missing longitude" }} elseif not tonumber(long_d) then return nil, {{"parseDMS", "Longitude could not be parsed as a number:" .. long_d }} end if not lat_m and not lat_s and not long_m and not long_s and #errors == 0 then if math_mod._precision( lat_d ) > 0 or math_mod._precision( long_d ) > 0 then if lat_f:upper() == 'S' then lat_d = '-' .. lat_d; end if long_f:upper() == 'W' then long_d = '-' .. long_d; end return parseDec( lat_d, long_d, format ); end end coordinateSpec["dms-lat"] = lat_d.."°"..optionalArg(lat_m,"′") .. optionalArg(lat_s,"″") .. lat_f coordinateSpec["dms-long"] = long_d.."°"..optionalArg(long_m,"′") .. optionalArg(long_s,"″") .. long_f coordinateSpec["dec-lat"] = convert_dms2dec(lat_f, lat_d, lat_m, lat_s) -- {{coord/dms2dec|{{{4}}}|{{{1}}}|0{{{2}}}|0{{{3}}}}} coordinateSpec["dec-long"] = convert_dms2dec(long_f, long_d, long_m, long_s) -- {{coord/dms2dec|{{{8}}}|{{{5}}}|0{{{6}}}|0{{{7}}}}} if format then coordinateSpec.default = format else coordinateSpec.default = "dms" end return coordinateSpec, errors, backward end --[[ Check the input arguments for coord to determine the kind of data being provided and then make the necessary processing. ]] local function formatTest(args) local result, errors local backward, primary = false, false local function getParam(args, lim) local ret = {} for i = 1, lim do ret[i] = args[i] or '' end return table.concat(ret, '_') end if not args[1] then -- no lat logic return errorPrinter( {{"formatTest", "Missing latitude"}} ) elseif not tonumber(args[1]) then -- bad lat logic return errorPrinter( {{"formatTest", "Unable to parse latitude as a number:" .. args[1]}} ) elseif not args[4] and not args[5] and not args[6] then -- dec logic result, errors = parseDec(args[1], args[2], args.format) if not result then return errorPrinter(errors); end -- formatting for geohack: geohack expects D_N_D_E notation or D;D notation -- wikiminiatlas doesn't support D;D notation -- #coordinates parserfunction doesn't support negative decimals with NSWE result.param = table.concat({ math.abs(tonumber(args[1])), ((tonumber(args[1]) or 0) < 0) and 'S' or 'N', math.abs(tonumber(args[2])), ((tonumber(args[2]) or 0) < 0) and 'W' or 'E', args[3] or ''}, '_') elseif dmsTest(args[4], args[8]) then -- dms logic result, errors, backward = parseDMS(args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args.format) if args[10] then table.insert(errors, {'formatTest', 'Extra unexpected parameters'}) end if not result then return errorPrinter(errors) end result.param = getParam(args, 9) elseif dmsTest(args[3], args[6]) then -- dm logic result, errors, backward = parseDMS(args[1], args[2], nil, args[3], args[4], args[5], nil, args[6], args['format']) if args[8] then table.insert(errors, {'formatTest', 'Extra unexpected parameters'}) end if not result then return errorPrinter(errors) end result.param = getParam(args, 7) elseif dmsTest(args[2], args[4]) then -- d logic result, errors, backward = parseDMS(args[1], nil, nil, args[2], args[3], nil, nil, args[4], args.format) if args[6] then table.insert(errors, {'formatTest', 'Extra unexpected parameters'}) end if not result then return errorPrinter(errors) end result.param = getParam(args, 5) else -- Error return errorPrinter({{"formatTest", "Unknown argument format"}}) .. '[[Category:Pages with malformed coordinate tags]]' end result.name = args.name local extra_param = {'dim', 'globe', 'scale', 'region', 'source', 'type'} for _, v in ipairs(extra_param) do if args[v] then table.insert(errors, {'formatTest', 'Parameter: "' .. v .. '=" should be "' .. v .. ':"' }) end end local ret = specPrinter(args, result) if #errors > 0 then ret = ret .. ' ' .. errorPrinter(errors) .. '[[Category:Pages with malformed coordinate tags]]' end return ret, backward end --[[ Generate Wikidata tracking categories. ]] local function makeWikidataCategories(qid) local ret local qid = qid or mw.wikibase.getEntityIdForCurrentPage() if mw.wikibase and current_page.namespace == 0 then if qid and mw.wikibase.entityExists(qid) and mw.wikibase.getBestStatements(qid, "P625") and mw.wikibase.getBestStatements(qid, "P625")[1] then local snaktype = mw.wikibase.getBestStatements(qid, "P625")[1].mainsnak.snaktype if snaktype == 'value' then -- coordinates exist both here and on Wikidata, and can be compared. ret = 'Coordinates on Wikidata' elseif snaktype == 'somevalue' then ret = 'Coordinates on Wikidata set to unknown value' elseif snaktype == 'novalue' then ret = 'Coordinates on Wikidata set to no value' end else -- We have to either import the coordinates to Wikidata or remove them here. ret = 'Coordinates not on Wikidata' end end if ret then return string.format('[[Category:%s]]', ret) else return '' end end --[[ Parse coordinates entered as a single string ]] local function text2coord(text) if type(text) ~= 'string' then return end local coords = {} local numTerms = 0 local parts local function assign(k, number, start, pos) if number then coords[start + pos - 1] = number if k == 1 then numTerms = pos elseif numTerms < pos then -- more terms in long than lat return false end elseif numTerms >= pos then -- more terms in lat than long return false end return true end text = mw.ustring.gsub(mw.text.trim(text:uupper()), "[*′″]", {['*'] = '°', ['′'] = "'", ['″'] = '"'}) for _, regex in ipairs({ "^([+%-%d.°'\"NS%s]+),%s*([+%-%d.°'\"EW%s]+)$", --split by commas "^([+%-%d.°'\"%s]+[NS])%s*([+%-%d.°'\"%s]+[EW])$", --split by N/S "^([+%-%d.°'%s]+\")%s*([+%-%d.°'%s]+\")$", --split by " "^([+%-%d.°%s]+')%s*([+%-%d.°%s]+')$", --split by ' "^([+%-%d.%s]+°)%s*([+%-%d.%s]+°)$", --split by ° "^([+%-%d.]+)%s+([+%-%d.]+)$" --split by space }) do local lat, long = string.match(text, regex) if lat and long then parts = {mw.text.trim(lat), mw.text.trim(long)} break end end if not parts then return end local SW = {"S", "W"} local NE = {"N", "E"} for k, v in ipairs(parts) do local number local start = k + numTerms -- Find or create N, S, E, and W local dir = v:match("([NSEW])$") if dir then v = v:sub(1,-2) elseif v:sub(1,1) == '-' then v = v:sub(2) dir = SW[k] else dir = NE[k] end -- attempt to convert text to number number = tonumber(v) if number then -- Single number, assign it to the position "start" in the "coords" array if not assign(k, number, start, 1) then return end -- attempt to convert dms to decimal elseif string.match(v, "°") then for pos, regex in ipairs({ "^%s*([+%-%d.]+)%s*°[^°]*$", --degrees "^[^°']+°%s*([%d.]+)%s*'[^°']*$", --minutes "^[^'\"]+'%s*([%d.]+)%s*\"[^'\"]*$" --seconds }) do -- Assign component to a position in the "coords" array determined -- by "start" and "pos", and increment "numTerms" if this is latitude if not assign(k, tonumber(string.match(v, regex)), start, pos) then return end end end if coords[start] == nil then return end coords[start + numTerms] = dir end return coords end --[[ link Simple function to export the coordinates link for other uses. Usage: {{#invoke:Coordinates | link }} ]] function coordinates.link(frame) return coord_link; end --[[ dec2dms Wrapper to allow templates to call dec2dms directly. Usage: {{#invoke:Coordinates | dec2dms | decimal_coordinate | positive_suffix | negative_suffix | precision }} decimal_coordinate is converted to DMS format. If positive, the positive_suffix is appended (typical N or E), if negative, the negative suffix is appended. The specified precision is one of 'D', 'DM', or 'DMS' to specify the level of detail to use. ]] coordinates.dec2dms = makeInvokeFunc('_dec2dms') function coordinates._dec2dms(args) local coordinate = args[1] local firstPostfix = args[2] or '' local secondPostfix = args[3] or '' local precision = args[4] or '' return convert_dec2dms(coordinate, firstPostfix, secondPostfix, precision) end --[[ Helper function to determine whether to use D, DM, or DMS format depending on the precision of the decimal input. ]] function coordinates.determineMode( value1, value2 ) local precision = math.max( math_mod._precision( value1 ), math_mod._precision( value2 ) ); if precision <= 0 then return 'd' elseif precision <= 2 then return 'dm'; else return 'dms'; end end --[[ dms2dec Wrapper to allow templates to call dms2dec directly. Usage: {{#invoke:Coordinates | dms2dec | direction_flag | degrees | minutes | seconds }} Converts DMS values specified as degrees, minutes, seconds too decimal format. direction_flag is one of N, S, E, W, and determines whether the output is positive (i.e. N and E) or negative (i.e. S and W). ]] coordinates.dms2dec = makeInvokeFunc('_dms2dec') function coordinates._dms2dec(args) local direction = args[1] local degrees = args[2] local minutes = args[3] local seconds = args[4] return convert_dms2dec(direction, degrees, minutes, seconds) end --[[ coord Main entry point for Lua function to replace {{coord}} Usage: {{#invoke:Coordinates | coord }} {{#invoke:Coordinates | coord | lat | long }} {{#invoke:Coordinates | coord | lat | lat_flag | long | long_flag }} ... Refer to {{coord}} documentation page for many additional parameters and configuration options. Note: This function provides the visual display elements of {{coord}}. In order to load coordinates into the database, the {{#coordinates:}} parser function must also be called, this is done automatically in the Lua version of {{coord}}. ]] coordinates.coord = makeInvokeFunc('_coord') function coordinates._coord(args) if not tonumber(args[1]) then local parsed = text2coord(args[1]) if parsed then -- full lat/long entered as a single string for i = 2, #args do args[#parsed + i - 1] = args[i] end for i, v in ipairs(parsed) do args[i] = v end elseif not args[2] then -- look for coordinates from wikidata args[3] = args[1]; args[1] = nil local entity = mw.wikibase.getEntityObject(args.qid) if entity and entity.claims and entity.claims.P625 and entity.claims.P625[1].mainsnak.snaktype == 'value' then local precision = entity.claims.P625[1].mainsnak.datavalue.value.precision args[1] = entity.claims.P625[1].mainsnak.datavalue.value.latitude args[2] = entity.claims.P625[1].mainsnak.datavalue.value.longitude if precision then precision = -math_mod._round(math.log(precision)/math.log(10),0) args[1] = math_mod._round(args[1],precision) args[2] = math_mod._round(args[2],precision) end end end end local contents, backward = formatTest(args) local Notes = args.notes or '' local Display = args.display and args.display:lower() or 'inline' -- it and ti are short for inline,title and title,inline local function isInline(s) -- Finds whether coordinates are displayed inline. return s:find('inline') ~= nil or s == 'i' or s == 'it' or s == 'ti' end local function isInTitle(s) -- Finds whether coordinates are displayed in the title. return s:find('title') ~= nil or s == 't' or s == 'it' or s == 'ti' end local function coord_wrapper(in_args) -- Calls the parser function {{#coordinates:}}. return mw.getCurrentFrame():callParserFunction('#coordinates', in_args) or '' end local text = '' if isInline(Display) then text = text .. '<span class="geo-inline">' .. contents .. Notes .. '</span>' end if isInTitle(Display) then -- Add to output since indicator content is invisible to Lua later on if not isInline(Display) then text = text .. '<span class="geo-inline-hidden noexcerpt">' .. contents .. Notes .. '</span>' end text = text .. displaytitle(contents .. Notes) .. makeWikidataCategories(args.qid) end if not args.nosave then local page_title, count = mw.title.getCurrentTitle(), 1 if backward then local tmp = {} while not string.find((args[count-1] or ''), '[EW]') do tmp[count] = (args[count] or ''); count = count+1 end tmp.count = count; count = 2*(count-1) while count >= tmp.count do table.insert(tmp, 1, (args[count] or '')); count = count-1 end for i, v in ipairs(tmp) do args[i] = v end else while count <= 9 do args[count] = (args[count] or ''); count = count+1 end end if isInTitle(Display) and not page_title.isTalkPage and page_title.subpageText ~= 'doc' and page_title.subpageText ~= 'testcases' then args[10] = 'primary' end args.notes, args.format, args.display = nil text = text .. coord_wrapper(args) end return text end --[[ coord2text Extracts a single value from a transclusion of {{Coord}}. IF THE GEOHACK LINK SYNTAX CHANGES THIS FUNCTION MUST BE MODIFIED. Usage: {{#invoke:Coordinates | coord2text | {{Coord}} | parameter }} Valid values for the second parameter are: lat (signed integer), long (signed integer), type, scale, dim, region, globe, source ]] function coordinates._coord2text(coord,type) if coord == '' or type == '' or not type then return nil end type = mw.text.trim(type) if type == 'lat' or type == 'long' then local coordString = mw.ustring.match(coord,'[%.%d]+°[NS] [%.%d]+°[EW]') if not coordString then return nil end local result = mw.text.split(coordString, ' ') local negative if type == 'lat' then result, negative = result[1], 'S' else result, negative = result[2], 'W' end if not result then return nil end result = mw.text.split(result, '°') if not result[1] then return nil end if result[2] == negative then result[1] = '-'..result[1] end return result[1] else return mw.ustring.match(coord, 'params=.-_' .. type .. ':(.-)[ _]') end end function coordinates.coord2text(frame) return coordinates._coord2text(frame.args[1],frame.args[2]) or '' end --[[ coordinsert Injects some text into the Geohack link of a transclusion of {{Coord}} (if that text isn't already in the transclusion). Outputs the modified transclusion of {{Coord}}. IF THE GEOHACK LINK SYNTAX CHANGES THIS FUNCTION MUST BE MODIFIED. Usage: {{#invoke:Coordinates | coordinsert | {{Coord}} | parameter:value | parameter:value | … }} Do not make Geohack unhappy by inserting something which isn't mentioned in the {{Coord}} documentation. ]] function coordinates.coordinsert(frame) -- for the 2nd or later integer parameter (the first is the coord template, as above) for i, v in ipairs(frame.args) do if i ~= 1 then -- if we cannot find in the coord_template the i_th coordinsert parameter e.g. region if not mw.ustring.find(frame.args[1], (mw.ustring.match(frame.args[i], '^(.-:)') or '')) then -- find from the params= up to the first possibly-present underscore -- and append the i_th coordinsert parameter and a space -- IDK why we're adding a space but it does seem somewhat convenient frame.args[1] = mw.ustring.gsub(frame.args[1], '(params=.-)_? ', '%1_'..frame.args[i]..' ') end end end if frame.args.name then -- if we can't find the vcard class if not mw.ustring.find(frame.args[1], '<span class="vcard">') then -- take something that looks like a coord template and add the vcard span with class and fn org class local namestr = frame.args.name frame.args[1] = mw.ustring.gsub( frame.args[1], '(<span class="geo%-default">)(<span[^<>]*>[^<>]*</span><span[^<>]*>[^<>]*<span[^<>]*>[^<>]*</span></span>)(</span>)', '%1<span class="vcard">%2<span style="display:none">&#xfeff; (<span class="fn org">' .. namestr .. '</span>)</span></span>%3' ) -- then find anything from coordinates parameters to the 'end' and attach the title parameter frame.args[1] = mw.ustring.gsub( frame.args[1], '(&params=[^&"<>%[%] ]*) ', '%1&title=' .. mw.uri.encode(namestr) .. ' ' ) end end -- replace the existing indicator with a new indicator using the modified content frame.args[1] = mw.ustring.gsub( frame.args[1], '(<span class="geo%-inline[^"]*">(.+)</span>)\127[^\127]*UNIQ%-%-indicator%-%x+%-%-?QINU[^\127]*\127', function (inline, coord) return inline .. displaytitle(coord) end ) return frame.args[1] end return coordinates mgr040y9bhe26jrkzioi6ulvlqhvehy 10586 10585 2026-08-25T23:33:43Z RAPTOR7762 18 1 revision imported from [[:en:Module:Coordinates]] 10585 Scribunto text/plain --[[ This module is intended to replace the functionality of {{Coord}} and related templates. It provides several methods, including {{#invoke:Coordinates | coord }} : General function formatting and displaying coordinate values. {{#invoke:Coordinates | dec2dms }} : Simple function for converting decimal degree values to DMS format. {{#invoke:Coordinates | dms2dec }} : Simple function for converting DMS format to decimal degree format. {{#invoke:Coordinates | link }} : Export the link used to reach the tools ]] require('strict') local math_mod = require("Module:Math") local coordinates = {}; local isSandbox = mw.getCurrentFrame():getTitle():find('sandbox', 1, true); local current_page = mw.title.getCurrentTitle() local page_name = mw.uri.encode( current_page.prefixedText, 'WIKI' ); local coord_link = 'https://geohack.toolforge.org/geohack.php?pagename=' .. page_name .. '&params=' --[[ Helper function, replacement for {{coord/display/title}} ]] local function displaytitle(coords) return mw.getCurrentFrame():extensionTag{ name = 'indicator', args = { name = 'coordinates' }, content = '<span id="coordinates">[[Geographic coordinate system|Coordinates]]: ' .. coords .. '</span>' } end --[[ Helper function, used in detecting DMS formatting ]] local function dmsTest(first, second) if type(first) ~= 'string' or type(second) ~= 'string' then return nil end local s = (first .. second):upper() return s:find('^[NS][EW]$') or s:find('^[EW][NS]$') end --[[ Wrapper function to grab args, see Module:Arguments for this function's documentation. ]] local function makeInvokeFunc(funcName) return function (frame) local args = require('Module:Arguments').getArgs(frame, { wrappers = 'Template:Coord' }) return coordinates[funcName](args, frame) end end --[[ Helper function, handle optional args. ]] local function optionalArg(arg, supplement) return arg and arg .. supplement or '' end --[[ Formats any error messages generated for display ]] local function errorPrinter(errors) local result = "" for i,v in ipairs(errors) do result = result .. '<strong class="error">Coordinates: ' .. v[2] .. '</strong><br />' end return result end --[[ Determine the required CSS class to display coordinates Usually geo-nondefault is hidden by CSS, unless a user has overridden this for himself default is the mode as specificied by the user when calling the {{coord}} template mode is the display mode (dec or dms) that we will need to determine the css class for ]] local function displayDefault(default, mode) if default == "" then default = "dec" end if default == mode then return "geo-default" else return "geo-nondefault" end end --[[ specPrinter Output formatter. Takes the structure generated by either parseDec or parseDMS and formats it for inclusion on Wikipedia. ]] local function specPrinter(args, coordinateSpec) local uriComponents = coordinateSpec["param"] if uriComponents == "" then -- RETURN error, should never be empty or nil return "ERROR param was empty" end if args["name"] then uriComponents = uriComponents .. "&title=" .. mw.uri.encode(coordinateSpec["name"]) end local geodmshtml = '<span class="geo-dms" title="Maps, aerial photos, and other data for this location">' .. '<span class="latitude">' .. coordinateSpec["dms-lat"] .. '</span> ' .. '<span class="longitude">' ..coordinateSpec["dms-long"] .. '</span>' .. '</span>' local lat = tonumber( coordinateSpec["dec-lat"] ) or 0 local geodeclat if lat < 0 then -- FIXME this breaks the pre-existing precision geodeclat = tostring(coordinateSpec["dec-lat"]):sub(2) .. "°S" else geodeclat = (coordinateSpec["dec-lat"] or 0) .. "°N" end local long = tonumber( coordinateSpec["dec-long"] ) or 0 local geodeclong if long < 0 then -- FIXME does not handle unicode minus geodeclong = tostring(coordinateSpec["dec-long"]):sub(2) .. "°W" else geodeclong = (coordinateSpec["dec-long"] or 0) .. "°E" end local geodechtml = '<span class="geo-dec" title="Maps, aerial photos, and other data for this location">' .. geodeclat .. ' ' .. geodeclong .. '</span>' local geonumhtml = '<span class="geo">' .. coordinateSpec["dec-lat"] .. '; ' .. coordinateSpec["dec-long"] .. '</span>' local inner = '<span class="' .. displayDefault(coordinateSpec["default"], "dms" ) .. '">' .. geodmshtml .. '</span>' .. '<span class="geo-multi-punct">&#xfeff; / &#xfeff;</span>' .. '<span class="' .. displayDefault(coordinateSpec["default"], "dec" ) .. '">'; if not args["name"] then inner = inner .. geodechtml .. '<span style="display:none">&#xfeff; / ' .. geonumhtml .. '</span></span>' else inner = inner .. '<span class="vcard">' .. geodechtml .. '<span style="display:none">&#xfeff; / ' .. geonumhtml .. '</span>' .. '<span style="display:none">&#xfeff; (<span class="fn org">' .. args["name"] .. '</span>)</span></span></span>' end local stylesheetLink = 'Module:Coordinates' .. ( isSandbox and '/sandbox' or '' ) .. '/styles.css' return mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = { src = stylesheetLink } } .. '<span class="plainlinks nourlexpansion">[' .. coord_link .. uriComponents .. ' ' .. inner .. ']</span>' .. '[[Category:Pages using gadget WikiMiniAtlas]]' end --[[ Helper function, convert decimal to degrees ]] local function convert_dec2dms_d(coordinate) local d = math_mod._round( coordinate, 0 ) .. "°" return d .. "" end --[[ Helper function, convert decimal to degrees and minutes ]] local function convert_dec2dms_dm(coordinate) coordinate = math_mod._round( coordinate * 60, 0 ); local m = coordinate % 60; coordinate = math.floor( (coordinate - m) / 60 ); local d = coordinate % 360 .."°" return d .. string.format( "%02d′", m ) end --[[ Helper function, convert decimal to degrees, minutes, and seconds ]] local function convert_dec2dms_dms(coordinate) coordinate = math_mod._round( coordinate * 60 * 60, 0 ); local s = coordinate % 60 coordinate = math.floor( (coordinate - s) / 60 ); local m = coordinate % 60 coordinate = math.floor( (coordinate - m) / 60 ); local d = coordinate % 360 .."°" return d .. string.format( "%02d′", m ) .. string.format( "%02d″", s ) end --[[ Helper function, convert decimal latitude or longitude to degrees, minutes, and seconds format based on the specified precision. ]] local function convert_dec2dms(coordinate, firstPostfix, secondPostfix, precision) local coord = tonumber(coordinate) local postfix if coord >= 0 then postfix = firstPostfix else postfix = secondPostfix end precision = precision:lower(); if precision == "dms" then return convert_dec2dms_dms( math.abs( coord ) ) .. postfix; elseif precision == "dm" then return convert_dec2dms_dm( math.abs( coord ) ) .. postfix; elseif precision == "d" then return convert_dec2dms_d( math.abs( coord ) ) .. postfix; end end --[[ Convert DMS format into a N or E decimal coordinate ]] local function convert_dms2dec(direction, degrees_str, minutes_str, seconds_str) local degrees = tonumber(degrees_str) local minutes = tonumber(minutes_str) or 0 local seconds = tonumber(seconds_str) or 0 local factor = 1 if direction == "S" or direction == "W" then factor = -1 end local precision = 0 if seconds_str then precision = 5 + math.max( math_mod._precision(seconds_str), 0 ); elseif minutes_str and minutes_str ~= '' then precision = 3 + math.max( math_mod._precision(minutes_str), 0 ); else precision = math.max( math_mod._precision(degrees_str), 0 ); end local decimal = factor * (degrees+(minutes+seconds/60)/60) return string.format( "%." .. precision .. "f", decimal ) -- not tonumber since this whole thing is string based. end --[[ Checks input values to for out of range errors. ]] local function validate( lat_d, lat_m, lat_s, long_d, long_m, long_s, source, strong ) local errors = {}; lat_d = tonumber( lat_d ) or 0; lat_m = tonumber( lat_m ) or 0; lat_s = tonumber( lat_s ) or 0; long_d = tonumber( long_d ) or 0; long_m = tonumber( long_m ) or 0; long_s = tonumber( long_s ) or 0; if strong then if lat_d < 0 then table.insert(errors, {source, "latitude degrees < 0 with hemisphere flag"}) end if long_d < 0 then table.insert(errors, {source, "longitude degrees < 0 with hemisphere flag"}) end --[[ #coordinates is inconsistent about whether this is an error. If globe: is specified, it won't error on this condition, but otherwise it will. For not simply disable this check. if long_d > 180 then table.insert(errors, {source, "longitude degrees > 180 with hemisphere flag"}) end ]] end if lat_d > 90 then table.insert(errors, {source, "latitude degrees > 90"}) end if lat_d < -90 then table.insert(errors, {source, "latitude degrees < -90"}) end if lat_m >= 60 then table.insert(errors, {source, "latitude minutes >= 60"}) end if lat_m < 0 then table.insert(errors, {source, "latitude minutes < 0"}) end if lat_s >= 60 then table.insert(errors, {source, "latitude seconds >= 60"}) end if lat_s < 0 then table.insert(errors, {source, "latitude seconds < 0"}) end if long_d >= 360 then table.insert(errors, {source, "longitude degrees >= 360"}) end if long_d <= -360 then table.insert(errors, {source, "longitude degrees <= -360"}) end if long_m >= 60 then table.insert(errors, {source, "longitude minutes >= 60"}) end if long_m < 0 then table.insert(errors, {source, "longitude minutes < 0"}) end if long_s >= 60 then table.insert(errors, {source, "longitude seconds >= 60"}) end if long_s < 0 then table.insert(errors, {source, "longitude seconds < 0"}) end return errors; end --[[ parseDec Transforms decimal format latitude and longitude into the structure to be used in displaying coordinates ]] local function parseDec( lat, long, format ) local coordinateSpec = {} local errors = {} if not long then return nil, {{"parseDec", "Missing longitude"}} elseif not tonumber(long) then return nil, {{"parseDec", "Longitude could not be parsed as a number: " .. long}} end errors = validate( lat, nil, nil, long, nil, nil, 'parseDec', false ); coordinateSpec["dec-lat"] = lat; coordinateSpec["dec-long"] = long; local mode = coordinates.determineMode( lat, long ); coordinateSpec["dms-lat"] = convert_dec2dms( lat, "N", "S", mode) -- {{coord/dec2dms|{{{1}}}|N|S|{{coord/prec dec|{{{1}}}|{{{2}}}}}}} coordinateSpec["dms-long"] = convert_dec2dms( long, "E", "W", mode) -- {{coord/dec2dms|{{{2}}}|E|W|{{coord/prec dec|{{{1}}}|{{{2}}}}}}} if format then coordinateSpec.default = format else coordinateSpec.default = "dec" end return coordinateSpec, errors end --[[ parseDMS Transforms degrees, minutes, seconds format latitude and longitude into the a structure to be used in displaying coordinates ]] local function parseDMS( lat_d, lat_m, lat_s, lat_f, long_d, long_m, long_s, long_f, format ) local coordinateSpec, errors, backward = {}, {} lat_f = lat_f:upper(); long_f = long_f:upper(); -- Check if specified backward if lat_f == 'E' or lat_f == 'W' then lat_d, long_d, lat_m, long_m, lat_s, long_s, lat_f, long_f, backward = long_d, lat_d, long_m, lat_m, long_s, lat_s, long_f, lat_f, true; end errors = validate( lat_d, lat_m, lat_s, long_d, long_m, long_s, 'parseDMS', true ); if not long_d then return nil, {{"parseDMS", "Missing longitude" }} elseif not tonumber(long_d) then return nil, {{"parseDMS", "Longitude could not be parsed as a number:" .. long_d }} end if not lat_m and not lat_s and not long_m and not long_s and #errors == 0 then if math_mod._precision( lat_d ) > 0 or math_mod._precision( long_d ) > 0 then if lat_f:upper() == 'S' then lat_d = '-' .. lat_d; end if long_f:upper() == 'W' then long_d = '-' .. long_d; end return parseDec( lat_d, long_d, format ); end end coordinateSpec["dms-lat"] = lat_d.."°"..optionalArg(lat_m,"′") .. optionalArg(lat_s,"″") .. lat_f coordinateSpec["dms-long"] = long_d.."°"..optionalArg(long_m,"′") .. optionalArg(long_s,"″") .. long_f coordinateSpec["dec-lat"] = convert_dms2dec(lat_f, lat_d, lat_m, lat_s) -- {{coord/dms2dec|{{{4}}}|{{{1}}}|0{{{2}}}|0{{{3}}}}} coordinateSpec["dec-long"] = convert_dms2dec(long_f, long_d, long_m, long_s) -- {{coord/dms2dec|{{{8}}}|{{{5}}}|0{{{6}}}|0{{{7}}}}} if format then coordinateSpec.default = format else coordinateSpec.default = "dms" end return coordinateSpec, errors, backward end --[[ Check the input arguments for coord to determine the kind of data being provided and then make the necessary processing. ]] local function formatTest(args) local result, errors local backward, primary = false, false local function getParam(args, lim) local ret = {} for i = 1, lim do ret[i] = args[i] or '' end return table.concat(ret, '_') end if not args[1] then -- no lat logic return errorPrinter( {{"formatTest", "Missing latitude"}} ) elseif not tonumber(args[1]) then -- bad lat logic return errorPrinter( {{"formatTest", "Unable to parse latitude as a number:" .. args[1]}} ) elseif not args[4] and not args[5] and not args[6] then -- dec logic result, errors = parseDec(args[1], args[2], args.format) if not result then return errorPrinter(errors); end -- formatting for geohack: geohack expects D_N_D_E notation or D;D notation -- wikiminiatlas doesn't support D;D notation -- #coordinates parserfunction doesn't support negative decimals with NSWE result.param = table.concat({ math.abs(tonumber(args[1])), ((tonumber(args[1]) or 0) < 0) and 'S' or 'N', math.abs(tonumber(args[2])), ((tonumber(args[2]) or 0) < 0) and 'W' or 'E', args[3] or ''}, '_') elseif dmsTest(args[4], args[8]) then -- dms logic result, errors, backward = parseDMS(args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args.format) if args[10] then table.insert(errors, {'formatTest', 'Extra unexpected parameters'}) end if not result then return errorPrinter(errors) end result.param = getParam(args, 9) elseif dmsTest(args[3], args[6]) then -- dm logic result, errors, backward = parseDMS(args[1], args[2], nil, args[3], args[4], args[5], nil, args[6], args['format']) if args[8] then table.insert(errors, {'formatTest', 'Extra unexpected parameters'}) end if not result then return errorPrinter(errors) end result.param = getParam(args, 7) elseif dmsTest(args[2], args[4]) then -- d logic result, errors, backward = parseDMS(args[1], nil, nil, args[2], args[3], nil, nil, args[4], args.format) if args[6] then table.insert(errors, {'formatTest', 'Extra unexpected parameters'}) end if not result then return errorPrinter(errors) end result.param = getParam(args, 5) else -- Error return errorPrinter({{"formatTest", "Unknown argument format"}}) .. '[[Category:Pages with malformed coordinate tags]]' end result.name = args.name local extra_param = {'dim', 'globe', 'scale', 'region', 'source', 'type'} for _, v in ipairs(extra_param) do if args[v] then table.insert(errors, {'formatTest', 'Parameter: "' .. v .. '=" should be "' .. v .. ':"' }) end end local ret = specPrinter(args, result) if #errors > 0 then ret = ret .. ' ' .. errorPrinter(errors) .. '[[Category:Pages with malformed coordinate tags]]' end return ret, backward end --[[ Generate Wikidata tracking categories. ]] local function makeWikidataCategories(qid) local ret local qid = qid or mw.wikibase.getEntityIdForCurrentPage() if mw.wikibase and current_page.namespace == 0 then if qid and mw.wikibase.entityExists(qid) and mw.wikibase.getBestStatements(qid, "P625") and mw.wikibase.getBestStatements(qid, "P625")[1] then local snaktype = mw.wikibase.getBestStatements(qid, "P625")[1].mainsnak.snaktype if snaktype == 'value' then -- coordinates exist both here and on Wikidata, and can be compared. ret = 'Coordinates on Wikidata' elseif snaktype == 'somevalue' then ret = 'Coordinates on Wikidata set to unknown value' elseif snaktype == 'novalue' then ret = 'Coordinates on Wikidata set to no value' end else -- We have to either import the coordinates to Wikidata or remove them here. ret = 'Coordinates not on Wikidata' end end if ret then return string.format('[[Category:%s]]', ret) else return '' end end --[[ Parse coordinates entered as a single string ]] local function text2coord(text) if type(text) ~= 'string' then return end local coords = {} local numTerms = 0 local parts local function assign(k, number, start, pos) if number then coords[start + pos - 1] = number if k == 1 then numTerms = pos elseif numTerms < pos then -- more terms in long than lat return false end elseif numTerms >= pos then -- more terms in lat than long return false end return true end text = mw.ustring.gsub(mw.text.trim(text:uupper()), "[*′″]", {['*'] = '°', ['′'] = "'", ['″'] = '"'}) for _, regex in ipairs({ "^([+%-%d.°'\"NS%s]+),%s*([+%-%d.°'\"EW%s]+)$", --split by commas "^([+%-%d.°'\"%s]+[NS])%s*([+%-%d.°'\"%s]+[EW])$", --split by N/S "^([+%-%d.°'%s]+\")%s*([+%-%d.°'%s]+\")$", --split by " "^([+%-%d.°%s]+')%s*([+%-%d.°%s]+')$", --split by ' "^([+%-%d.%s]+°)%s*([+%-%d.%s]+°)$", --split by ° "^([+%-%d.]+)%s+([+%-%d.]+)$" --split by space }) do local lat, long = string.match(text, regex) if lat and long then parts = {mw.text.trim(lat), mw.text.trim(long)} break end end if not parts then return end local SW = {"S", "W"} local NE = {"N", "E"} for k, v in ipairs(parts) do local number local start = k + numTerms -- Find or create N, S, E, and W local dir = v:match("([NSEW])$") if dir then v = v:sub(1,-2) elseif v:sub(1,1) == '-' then v = v:sub(2) dir = SW[k] else dir = NE[k] end -- attempt to convert text to number number = tonumber(v) if number then -- Single number, assign it to the position "start" in the "coords" array if not assign(k, number, start, 1) then return end -- attempt to convert dms to decimal elseif string.match(v, "°") then for pos, regex in ipairs({ "^%s*([+%-%d.]+)%s*°[^°]*$", --degrees "^[^°']+°%s*([%d.]+)%s*'[^°']*$", --minutes "^[^'\"]+'%s*([%d.]+)%s*\"[^'\"]*$" --seconds }) do -- Assign component to a position in the "coords" array determined -- by "start" and "pos", and increment "numTerms" if this is latitude if not assign(k, tonumber(string.match(v, regex)), start, pos) then return end end end if coords[start] == nil then return end coords[start + numTerms] = dir end return coords end --[[ link Simple function to export the coordinates link for other uses. Usage: {{#invoke:Coordinates | link }} ]] function coordinates.link(frame) return coord_link; end --[[ dec2dms Wrapper to allow templates to call dec2dms directly. Usage: {{#invoke:Coordinates | dec2dms | decimal_coordinate | positive_suffix | negative_suffix | precision }} decimal_coordinate is converted to DMS format. If positive, the positive_suffix is appended (typical N or E), if negative, the negative suffix is appended. The specified precision is one of 'D', 'DM', or 'DMS' to specify the level of detail to use. ]] coordinates.dec2dms = makeInvokeFunc('_dec2dms') function coordinates._dec2dms(args) local coordinate = args[1] local firstPostfix = args[2] or '' local secondPostfix = args[3] or '' local precision = args[4] or '' return convert_dec2dms(coordinate, firstPostfix, secondPostfix, precision) end --[[ Helper function to determine whether to use D, DM, or DMS format depending on the precision of the decimal input. ]] function coordinates.determineMode( value1, value2 ) local precision = math.max( math_mod._precision( value1 ), math_mod._precision( value2 ) ); if precision <= 0 then return 'd' elseif precision <= 2 then return 'dm'; else return 'dms'; end end --[[ dms2dec Wrapper to allow templates to call dms2dec directly. Usage: {{#invoke:Coordinates | dms2dec | direction_flag | degrees | minutes | seconds }} Converts DMS values specified as degrees, minutes, seconds too decimal format. direction_flag is one of N, S, E, W, and determines whether the output is positive (i.e. N and E) or negative (i.e. S and W). ]] coordinates.dms2dec = makeInvokeFunc('_dms2dec') function coordinates._dms2dec(args) local direction = args[1] local degrees = args[2] local minutes = args[3] local seconds = args[4] return convert_dms2dec(direction, degrees, minutes, seconds) end --[[ coord Main entry point for Lua function to replace {{coord}} Usage: {{#invoke:Coordinates | coord }} {{#invoke:Coordinates | coord | lat | long }} {{#invoke:Coordinates | coord | lat | lat_flag | long | long_flag }} ... Refer to {{coord}} documentation page for many additional parameters and configuration options. Note: This function provides the visual display elements of {{coord}}. In order to load coordinates into the database, the {{#coordinates:}} parser function must also be called, this is done automatically in the Lua version of {{coord}}. ]] coordinates.coord = makeInvokeFunc('_coord') function coordinates._coord(args) if not tonumber(args[1]) then local parsed = text2coord(args[1]) if parsed then -- full lat/long entered as a single string for i = 2, #args do args[#parsed + i - 1] = args[i] end for i, v in ipairs(parsed) do args[i] = v end elseif not args[2] then -- look for coordinates from wikidata args[3] = args[1]; args[1] = nil local entity = mw.wikibase.getEntityObject(args.qid) if entity and entity.claims and entity.claims.P625 and entity.claims.P625[1].mainsnak.snaktype == 'value' then local precision = entity.claims.P625[1].mainsnak.datavalue.value.precision args[1] = entity.claims.P625[1].mainsnak.datavalue.value.latitude args[2] = entity.claims.P625[1].mainsnak.datavalue.value.longitude if precision then precision = -math_mod._round(math.log(precision)/math.log(10),0) args[1] = math_mod._round(args[1],precision) args[2] = math_mod._round(args[2],precision) end end end end local contents, backward = formatTest(args) local Notes = args.notes or '' local Display = args.display and args.display:lower() or 'inline' -- it and ti are short for inline,title and title,inline local function isInline(s) -- Finds whether coordinates are displayed inline. return s:find('inline') ~= nil or s == 'i' or s == 'it' or s == 'ti' end local function isInTitle(s) -- Finds whether coordinates are displayed in the title. return s:find('title') ~= nil or s == 't' or s == 'it' or s == 'ti' end local function coord_wrapper(in_args) -- Calls the parser function {{#coordinates:}}. return mw.getCurrentFrame():callParserFunction('#coordinates', in_args) or '' end local text = '' if isInline(Display) then text = text .. '<span class="geo-inline">' .. contents .. Notes .. '</span>' end if isInTitle(Display) then -- Add to output since indicator content is invisible to Lua later on if not isInline(Display) then text = text .. '<span class="geo-inline-hidden noexcerpt">' .. contents .. Notes .. '</span>' end text = text .. displaytitle(contents .. Notes) .. makeWikidataCategories(args.qid) end if not args.nosave then local page_title, count = mw.title.getCurrentTitle(), 1 if backward then local tmp = {} while not string.find((args[count-1] or ''), '[EW]') do tmp[count] = (args[count] or ''); count = count+1 end tmp.count = count; count = 2*(count-1) while count >= tmp.count do table.insert(tmp, 1, (args[count] or '')); count = count-1 end for i, v in ipairs(tmp) do args[i] = v end else while count <= 9 do args[count] = (args[count] or ''); count = count+1 end end if isInTitle(Display) and not page_title.isTalkPage and page_title.subpageText ~= 'doc' and page_title.subpageText ~= 'testcases' then args[10] = 'primary' end args.notes, args.format, args.display = nil text = text .. coord_wrapper(args) end return text end --[[ coord2text Extracts a single value from a transclusion of {{Coord}}. IF THE GEOHACK LINK SYNTAX CHANGES THIS FUNCTION MUST BE MODIFIED. Usage: {{#invoke:Coordinates | coord2text | {{Coord}} | parameter }} Valid values for the second parameter are: lat (signed integer), long (signed integer), type, scale, dim, region, globe, source ]] function coordinates._coord2text(coord,type) if coord == '' or type == '' or not type then return nil end type = mw.text.trim(type) if type == 'lat' or type == 'long' then local coordString = mw.ustring.match(coord,'[%.%d]+°[NS] [%.%d]+°[EW]') if not coordString then return nil end local result = mw.text.split(coordString, ' ') local negative if type == 'lat' then result, negative = result[1], 'S' else result, negative = result[2], 'W' end if not result then return nil end result = mw.text.split(result, '°') if not result[1] then return nil end if result[2] == negative then result[1] = '-'..result[1] end return result[1] else return mw.ustring.match(coord, 'params=.-_' .. type .. ':(.-)[ _]') end end function coordinates.coord2text(frame) return coordinates._coord2text(frame.args[1],frame.args[2]) or '' end --[[ coordinsert Injects some text into the Geohack link of a transclusion of {{Coord}} (if that text isn't already in the transclusion). Outputs the modified transclusion of {{Coord}}. IF THE GEOHACK LINK SYNTAX CHANGES THIS FUNCTION MUST BE MODIFIED. Usage: {{#invoke:Coordinates | coordinsert | {{Coord}} | parameter:value | parameter:value | … }} Do not make Geohack unhappy by inserting something which isn't mentioned in the {{Coord}} documentation. ]] function coordinates.coordinsert(frame) -- for the 2nd or later integer parameter (the first is the coord template, as above) for i, v in ipairs(frame.args) do if i ~= 1 then -- if we cannot find in the coord_template the i_th coordinsert parameter e.g. region if not mw.ustring.find(frame.args[1], (mw.ustring.match(frame.args[i], '^(.-:)') or '')) then -- find from the params= up to the first possibly-present underscore -- and append the i_th coordinsert parameter and a space -- IDK why we're adding a space but it does seem somewhat convenient frame.args[1] = mw.ustring.gsub(frame.args[1], '(params=.-)_? ', '%1_'..frame.args[i]..' ') end end end if frame.args.name then -- if we can't find the vcard class if not mw.ustring.find(frame.args[1], '<span class="vcard">') then -- take something that looks like a coord template and add the vcard span with class and fn org class local namestr = frame.args.name frame.args[1] = mw.ustring.gsub( frame.args[1], '(<span class="geo%-default">)(<span[^<>]*>[^<>]*</span><span[^<>]*>[^<>]*<span[^<>]*>[^<>]*</span></span>)(</span>)', '%1<span class="vcard">%2<span style="display:none">&#xfeff; (<span class="fn org">' .. namestr .. '</span>)</span></span>%3' ) -- then find anything from coordinates parameters to the 'end' and attach the title parameter frame.args[1] = mw.ustring.gsub( frame.args[1], '(&params=[^&"<>%[%] ]*) ', '%1&title=' .. mw.uri.encode(namestr) .. ' ' ) end end -- replace the existing indicator with a new indicator using the modified content frame.args[1] = mw.ustring.gsub( frame.args[1], '(<span class="geo%-inline[^"]*">(.+)</span>)\127[^\127]*UNIQ%-%-indicator%-%x+%-%-?QINU[^\127]*\127', function (inline, coord) return inline .. displaytitle(coord) end ) return frame.args[1] end return coordinates mgr040y9bhe26jrkzioi6ulvlqhvehy Module:Coordinates/styles.css 828 1289 10587 2023-05-24T21:17:17Z en>Izno 0 per tper 10587 sanitized-css text/css /* {{pp-template}} */ /* Geographical coordinates defaults. The classes "geo", "longitude", and "latitude" are used by the [[Geo microformat]]. */ .geo-default, .geo-dms, .geo-dec { display: inline; } .geo-nondefault, .geo-multi-punct, .geo-inline-hidden { display: none; } .longitude, .latitude { white-space: nowrap; } 372gk2cap99kasnuwl2084jfakikzgw 10588 10587 2026-08-25T23:33:43Z RAPTOR7762 18 1 revision imported from [[:en:Module:Coordinates/styles.css]] 10587 sanitized-css text/css /* {{pp-template}} */ /* Geographical coordinates defaults. The classes "geo", "longitude", and "latitude" are used by the [[Geo microformat]]. */ .geo-default, .geo-dms, .geo-dec { display: inline; } .geo-nondefault, .geo-multi-punct, .geo-inline-hidden { display: none; } .longitude, .latitude { white-space: nowrap; } 372gk2cap99kasnuwl2084jfakikzgw Module:Location map 828 1290 10589 2026-08-06T02:42:13Z en>Hike395 0 let pushpin_* parameters to infoboxes override arguments specified in template code 10589 Scribunto text/plain require('strict') local p = {} local getArgs = require('Module:Arguments').getArgs local function round(n, decimals) local pow = 10^(decimals or 0) return math.floor(n * pow + 0.5) / pow end function p.getMapParams(map, frame) if not map then error('The name of the location map definition to use must be specified', 2) end local moduletitle = mw.title.new('Module:Location map/data/' .. map) if not moduletitle then error(string.format('%q is not a valid name for a location map definition', map), 2) elseif moduletitle.exists then local mapData = mw.loadData('Module:Location map/data/' .. map) return function(name, params) if name == nil then return 'Module:Location map/data/' .. map elseif mapData[name] == nil then return '' elseif params then return mw.message.newRawMessage(tostring(mapData[name]), unpack(params)):plain() else return mapData[name] end end else error('Unable to find the specified location map definition: "Module:Location map/data/' .. map .. '" does not exist', 2) end end function p.data(frame, args, map) if not args then args = getArgs(frame, {frameOnly = true}) end if not map then map = p.getMapParams(args[1], frame) end local params = {} for k,v in ipairs(args) do if k > 2 then params[k-2] = v end end return map(args[2], #params ~= 0 and params) end local hemisphereMultipliers = { longitude = { W = -1, w = -1, E = 1, e = 1 }, latitude = { S = -1, s = -1, N = 1, n = 1 } } local function decdeg(degrees, minutes, seconds, hemisphere, decimal, direction) if decimal then if degrees then error('Decimal and DMS degrees cannot both be provided for ' .. direction, 2) elseif minutes then error('Minutes can only be provided with DMS degrees for ' .. direction, 2) elseif seconds then error('Seconds can only be provided with DMS degrees for ' .. direction, 2) elseif hemisphere then error('A hemisphere can only be provided with DMS degrees for ' .. direction, 2) end local retval = tonumber(decimal) if retval then return retval end error('The value "' .. decimal .. '" provided for ' .. direction .. ' is not valid', 2) elseif seconds and not minutes then error('Seconds were provided for ' .. direction .. ' without minutes also being provided', 2) elseif not degrees then if minutes then error('Minutes were provided for ' .. direction .. ' without degrees also being provided', 2) elseif hemisphere then error('A hemisphere was provided for ' .. direction .. ' without degrees also being provided', 2) end return nil end decimal = tonumber(degrees) if not decimal then error('The degree value "' .. degrees .. '" provided for ' .. direction .. ' is not valid', 2) elseif minutes and not tonumber(minutes) then error('The minute value "' .. minutes .. '" provided for ' .. direction .. ' is not valid', 2) elseif seconds and not tonumber(seconds) then error('The second value "' .. seconds .. '" provided for ' .. direction .. ' is not valid', 2) end decimal = decimal + (minutes or 0)/60 + (seconds or 0)/3600 if hemisphere then local multiplier = hemisphereMultipliers[direction][hemisphere] if not multiplier then error('The hemisphere "' .. hemisphere .. '" provided for ' .. direction .. ' is not valid', 2) end decimal = decimal * multiplier end return decimal end -- Finds a parameter in a transclusion of {{Coord}}. local function coord2text(para,coord) -- this should be changed for languages which do not use Arabic numerals or the degree sign local lat, long = mw.ustring.match(coord,'<span class="p%-latitude latitude">([^<]+)</span><span class="p%-longitude longitude">([^<]+)</span>') if lat then return tonumber(para == 'longitude' and long or lat) end local result = mw.text.split(mw.ustring.match(coord,'%-?[%.%d]+°[NS] %-?[%.%d]+°[EW]') or '', '[ °]') if para == 'longitude' then result = {result[3], result[4]} end if not tonumber(result[1]) or not result[2] then mw.log('Malformed coordinates value') mw.logObject(para, 'para') mw.logObject(coord, 'coord') return error('Malformed coordinates value', 2) end return tonumber(result[1]) * hemisphereMultipliers[para][result[2]] end -- effectively make removeBlanks false for caption and maplink, and true for everything else -- if useWikidata is present but blank, convert it to false instead of nil -- p.top, p.bottom, and their callers need to use this function p.valueFunc(key, value) if value then value = mw.text.trim(value) end if value ~= '' or key == 'caption' or key == 'maplink' then return value elseif key == 'useWikidata' then return false end end local function getContainerImage(args, map) if args.AlternativeMap then return args.AlternativeMap elseif args.relief then local digits = mw.ustring.match(args.relief,'^[1-9][0-9]?$') -- image1 to image99 if digits then local imageDigits = map('image' .. digits) if imageDigits ~= '' then return imageDigits end end local yesNo = require('Module:Yesno') if yesNo(args.relief,true) then local image1 = map('image1') if image1 ~= '' then return image1 end end end return map('image') end function p.top(frame, args, map) if not args then args = getArgs(frame, {frameOnly = true, valueFunc = p.valueFunc}) end if not map then map = p.getMapParams(args[1], frame) end local width local default_as_number = tonumber(mw.ustring.match(tostring(args.default_width),"%d*")) if not args.width then width = round((default_as_number or 240) * (tonumber(map('defaultscale')) or 1)) elseif mw.ustring.sub(args.width, -2) == 'px' then width = mw.ustring.sub(args.width, 1, -3) else width = args.width end local width_as_number = tonumber(mw.ustring.match(tostring(width),"%d*")) or 0; if width_as_number == 0 then -- check to see if width is junk. If it is, then use default calculation width = round((default_as_number or 240) * (tonumber(map('defaultscale')) or 1)) width_as_number = tonumber(mw.ustring.match(tostring(width),"%d*")) or 0; end if args.max_width ~= "" and args.max_width ~= nil then -- check to see if width bigger than max_width local max_as_number = tonumber(mw.ustring.match(args.max_width,"%d*")) or 0; if width_as_number>max_as_number and max_as_number>0 then width = args.max_width; end end local retval = frame:extensionTag{name = 'templatestyles', args = {src = 'Module:Location map/styles.css'}} if args.float == 'center' then retval = retval .. '<div class="center">' end if args.caption and args.caption ~= '' and args.border ~= 'infobox' then retval = retval .. '<div class="locmap noresize thumb ' if args.float == '"left"' or args.float == 'left' then retval = retval .. 'floatleft' elseif args.float == '"center"' or args.float == 'center' or args.float == '"none"' or args.float == 'none' then retval = retval .. 'tnone' else retval = retval .. 'floatright' end retval = retval .. '"><div class="thumbinner" style="width:' .. (width + 2) .. 'px' if args.border == 'none' then retval = retval .. ';border:none' elseif args.border then retval = retval .. ';border-color:' .. args.border end retval = retval .. '"><div style="position:relative;width:' .. width .. 'px' .. (args.border ~= 'none' and ';border:1px solid lightgray">' or '">') else retval = retval .. '<div class="locmap" style="width:' .. width .. 'px;' if args.float == '"left"' or args.float == 'left' then retval = retval .. 'float:left;clear:left' elseif args.float == '"center"' or args.float == 'center' then retval = retval .. 'float:none;clear:both;margin-left:auto;margin-right:auto' elseif args.float == '"none"' or args.float == 'none' then retval = retval .. 'float:none;clear:none' else retval = retval .. 'float:right;clear:right' end retval = retval .. '"><div style="width:' .. width .. 'px;padding:0"><div style="position:relative;width:' .. width .. 'px">' end local image = getContainerImage(args, map) local currentTitle = mw.title.getCurrentTitle() retval = string.format( '%s[[File:%s|%spx|%s%s|class=notpageimage noviewer]]', retval, image, width, args.alt or ((args.label or currentTitle.text) .. ' is located in ' .. map('name')), args.maplink and ('|link=' .. args.maplink) or '' ) if args.caption and args.caption ~= '' then if (currentTitle.namespace == 0) and mw.ustring.find(args.caption, '##') then retval = retval .. '[[Category:Pages using location map with a double number sign in the caption]]' end end if args.overlay_image then return retval .. '<div style="position:absolute;top:0;left:0">[[File:' .. args.overlay_image .. '|' .. width .. 'px|class=notpageimage noviewer]]</div>' else return retval end end function p.bottom(frame, args, map) if not args then args = getArgs(frame, {frameOnly = true, valueFunc = p.valueFunc}) end if not map then map = p.getMapParams(args[1], frame) end local retval = '</div>' local currentTitle = mw.title.getCurrentTitle() if not args.caption or args.border == 'infobox' then if args.border then retval = retval .. '<div style="padding-top:0.2em">' else retval = retval .. '<div style="font-size:91%;padding-top:3px">' end retval = retval .. (args.caption or (args.label or currentTitle.text) .. ' (' .. map('name') .. ')') .. '</div>' elseif args.caption ~= '' then -- This is not the pipe trick. We're creating a link with no text on purpose, so that CSS can give us a nice image retval = retval .. '<div class="thumbcaption"><div class="magnify">[[:File:' .. getContainerImage(args, map) .. '| ]]</div>' .. args.caption .. '</div>' end if args.switcherLabel then retval = retval .. '<span class="switcher-label" style="display:none">' .. args.switcherLabel .. '</span>' elseif args.autoSwitcherLabel then retval = retval .. '<span class="switcher-label" style="display:none">Show map of ' .. map('name') .. '</span>' end retval = retval .. '</div></div>' if args.caption_undefined then mw.log('Removed parameter caption_undefined used.') local parent = frame:getParent() if parent then mw.log('Parent is ' .. parent:getTitle()) end mw.logObject(args, 'args') if currentTitle.namespace == 0 then retval = retval .. '[[Category:Location maps with removed parameters|caption_undefined]]' end end if map('skew') ~= '' or map('lat_skew') ~= '' or map('crosses180') ~= '' or map('type') ~= '' then mw.log('Removed parameter used in map definition ' .. map()) if currentTitle.namespace == 0 then local key = (map('skew') ~= '' and 'skew' or '') .. (map('lat_skew') ~= '' and 'lat_skew' or '') .. (map('crosses180') ~= '' and 'crosses180' or '') .. (map('type') ~= '' and 'type' or '') retval = retval .. '[[Category:Location maps with removed parameters|' .. key .. ' ]]' end end if string.find(map('name'), '|', 1, true) then mw.log('Pipe used in name of map definition ' .. map()) if currentTitle.namespace == 0 then retval = retval .. '[[Category:Location maps with a name containing a pipe]]' end end if args.float == 'center' then retval = retval .. '</div>' end return retval end local function markOuterDiv(x, y, imageDiv, labelDiv, label_size) return mw.html.create('div') :addClass('od') :addClass('notheme') -- T236137 :cssText('top:' .. round(y, 3) .. '%;left:' .. round(x, 3) .. '%;font-size:' .. label_size .. '%') :node(imageDiv) :node(labelDiv) end local function markImageDiv(mark, marksize, label, link, alt, title) local builder = mw.html.create('div') :addClass('id') :cssText('left:-' .. round(marksize / 2) .. 'px;top:-' .. round(marksize / 2) .. 'px') :attr('title', title) if marksize ~= 0 then builder:wikitext(string.format( '[[File:%s|%dx%dpx|%s|link=%s%s|class=notpageimage noviewer]]', mark, marksize, marksize, label, link, alt and ('|alt=' .. alt) or '' )) end return builder end local function markLabelDiv(label, label_size, label_width, position, background, x, marksize) if tonumber(label_size) == 0 then return mw.html.create('div'):addClass('l0'):wikitext(label) end local builder = mw.html.create('div') :cssText('width:' .. label_width .. 'em') local distance = round(marksize / 2 + 1) if position == 'top' then -- specified top builder:addClass('pv'):cssText('bottom:' .. distance .. 'px;left:' .. (-label_width / 2) .. 'em') elseif position == 'bottom' then -- specified bottom builder:addClass('pv'):cssText('top:' .. distance .. 'px;left:' .. (-label_width / 2) .. 'em') elseif position == 'left' or (tonumber(x) > 70 and position ~= 'right') then -- specified left or autodetected to left builder:addClass('pl'):cssText('right:' .. distance .. 'px') else -- specified right or autodetected to right builder:addClass('pr'):cssText('left:' .. distance .. 'px') end builder = builder:tag('div') :wikitext(label) if background then builder:cssText('background-color:' .. background) end return builder:done() end local function getX(longitude, left, right) local width = (right - left) % 360 if width == 0 then width = 360 end local distanceFromLeft = (longitude - left) % 360 -- the distance needed past the map to the right equals distanceFromLeft - width. the distance needed past the map to the left equals 360 - distanceFromLeft. to minimize page stretching, go whichever way is shorter if distanceFromLeft - width / 2 >= 180 then distanceFromLeft = distanceFromLeft - 360 end return 100 * distanceFromLeft / width end local function getY(latitude, top, bottom) return 100 * (top - latitude) / (top - bottom) end function p.mark(frame, args, map) if not args then args = getArgs(frame, {wrappers = 'Template:Location map~'}) end local mapnames = {} if not map then if args[1] then map = {} for mapname in mw.text.gsplit(args[1], '#', true) do map[#map + 1] = p.getMapParams(mw.ustring.gsub(mapname, '^%s*(.-)%s*$', '%1'), frame) mapnames[#mapnames + 1] = mapname end if #map == 1 then map = map[1] end else map = p.getMapParams('World', frame) args[1] = 'World' end end if type(map) == 'table' then local outputs = {} local oldargs = args[1] for k,v in ipairs(map) do args[1] = mapnames[k] outputs[k] = tostring(p.mark(frame, args, v)) end args[1] = oldargs return table.concat(outputs, '#PlaceList#') .. '#PlaceList#' end local x, y, longitude, latitude longitude = decdeg(args.lon_deg, args.lon_min, args.lon_sec, args.lon_dir, args.long, 'longitude') latitude = decdeg(args.lat_deg, args.lat_min, args.lat_sec, args.lat_dir, args.lat, 'latitude') if args.excludefrom then -- If this mark is to be excluded from certain maps entirely (useful in the context of multiple maps) for exclusionmap in mw.text.gsplit(args.excludefrom, '#', true) do -- Check if this map is excluded. If so, return an empty string. if args[1] == exclusionmap then return '' end end end local builder = mw.html.create() local currentTitle = mw.title.getCurrentTitle() if args.coordinates then -- Temporarily removed to facilitate infobox conversion. See [[Wikipedia:Coordinates in infoboxes]] -- if longitude or latitude then -- error('Coordinates from [[Module:Coordinates]] and individual coordinates cannot both be provided') -- end longitude = coord2text('longitude', args.coordinates) latitude = coord2text('latitude', args.coordinates) elseif not longitude and not latitude and args.useWikidata then -- If they didn't provide either coordinate, try Wikidata. If they provided one but not the other, don't. local entity = mw.wikibase.getEntity() if entity and entity.claims and entity.claims.P625 and entity.claims.P625[1].mainsnak.snaktype == 'value' then local value = entity.claims.P625[1].mainsnak.datavalue.value longitude, latitude = value.longitude, value.latitude end if args.link and (currentTitle.namespace == 0) then builder:wikitext('[[Category:Location maps with linked markers with coordinates from Wikidata]]') end end if not longitude then error('No value was provided for longitude') elseif not latitude then error('No value was provided for latitude') end if currentTitle.namespace > 0 then if (not args.lon_deg) ~= (not args.lat_deg) then builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Degrees]]') elseif (not args.lon_min) ~= (not args.lat_min) then builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Minutes]]') elseif (not args.lon_sec) ~= (not args.lat_sec) then builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Seconds]]') elseif (not args.lon_dir) ~= (not args.lat_dir) then builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Hemisphere]]') elseif (not args.long) ~= (not args.lat) then builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Decimal]]') end end if ((tonumber(args.lat_deg) or 0) < 0) and ((tonumber(args.lat_min) or 0) ~= 0 or (tonumber(args.lat_sec) or 0) ~= 0 or (args.lat_dir and args.lat_dir ~='')) then builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]') end if ((tonumber(args.lon_deg) or 0) < 0) and ((tonumber(args.lon_min) or 0) ~= 0 or (tonumber(args.lon_sec) or 0) ~= 0 or (args.lon_dir and args.lon_dir ~= '')) then builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]') end if (((tonumber(args.lat_min) or 0) < 0) or ((tonumber(args.lat_sec) or 0) < 0)) then builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]') end if (((tonumber(args.lon_min) or 0) < 0) or ((tonumber(args.lon_sec) or 0) < 0)) then builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]') end if args.skew or args.lon_shift or args.markhigh then mw.log('Removed parameter used in invocation.') local parent = frame:getParent() if parent then mw.log('Parent is ' .. parent:getTitle()) end mw.logObject(args, 'args') if currentTitle.namespace == 0 then local key = (args.skew and 'skew' or '') .. (args.lon_shift and 'lon_shift' or '') .. (args.markhigh and 'markhigh' or '') builder:wikitext('[[Category:Location maps with removed parameters|' .. key ..' ]]') end end if map('x') ~= '' then x = tonumber(mw.ext.ParserFunctions.expr(map('x', { latitude, longitude }))) else x = tonumber(getX(longitude, map('left'), map('right'))) end if map('y') ~= '' then y = tonumber(mw.ext.ParserFunctions.expr(map('y', { latitude, longitude }))) else y = tonumber(getY(latitude, map('top'), map('bottom'))) end if (x < 0 or x > 100 or y < 0 or y > 100) and not args.outside then mw.log('Mark placed outside map boundaries without outside flag set. x = ' .. x .. ', y = ' .. y) local parent = frame:getParent() if parent then mw.log('Parent is ' .. parent:getTitle()) end mw.logObject(args, 'args') if currentTitle.namespace == 0 then local key = currentTitle.prefixedText builder:wikitext('[[Category:Location maps with marks outside map and outside parameter not set|' .. key .. ' ]]') end end local mark = args.mark or map('mark') if mark == '' then mark = 'Red pog.svg' end local marksize = tonumber(args.marksize) or tonumber(map('marksize')) or 8 local imageDiv = markImageDiv(mark, marksize, args.label or mw.title.getCurrentTitle().text, args.link or '', args.alt, args[2]) local label_size = args.label_size or 91 local labelDiv if args.label and args.position ~= 'none' then labelDiv = markLabelDiv(args.label, label_size, args.label_width or 6, args.position, args.background, x, marksize) end return builder:node(markOuterDiv(x, y, imageDiv, labelDiv, label_size)) end local function switcherSeparate(s) if s == nil then return {} end local retval = {} for i in string.gmatch(s .. '#', '([^#]*)#') do i = mw.text.trim(i) retval[#retval + 1] = (i ~= '' and i) end return retval end function p.infobox_pushpin_map(frame) --This function is designed to be invoked from an infobox template --* Some parameters (generally starting with "pushpin_") are meant to be exposed as parameters -- in the outer infobox, settable by editors --* Others are meant to be "hidden" (e.g., only set inside the infobox template code) -- First get the combined arguments from both parent and invocation frame local raw_args = getArgs(frame,{parentFirst=true}) --If no map is supplied, return. if not raw_args['pushpin_map'] then return end -- Now get arguments from just the invocation frame local frame_args = getArgs(frame,{frameOnly=true}) -- parsed_args will have the resulting merged parameters local parsed_args = {} -- Default to using wikidata coodinates if no other coordiantes supplied. if raw_args.useWikidata == nil then parsed_args.useWikidata = true else parsed_args.useWikidata = raw_args.useWikidata end -- Parse the arguments parsed_args[1] = raw_args['pushpin_map'] parsed_args.float = frame_args.float or 'center' parsed_args.border = frame_args.border or 'infobox' parsed_args.default_width = frame_args.default_width parsed_args.max_width = frame_args.max_width parsed_args.coordinates = raw_args['coordinates'] parsed_args.caption = raw_args['pushpin_caption'] parsed_args.relief = raw_args['pushpin_relief'] parsed_args.label = raw_args['pushpin_label'] parsed_args.label_size = raw_args['pushpin_label_size'] parsed_args.position = raw_args['pushpin_label_position'] parsed_args.mark = raw_args['pushpin_mark'] parsed_args.marksize = raw_args['pushpin_mark_size'] parsed_args.alt = raw_args['pushpin_alt'] parsed_args.background = raw_args['pushpin_background'] parsed_args.width = raw_args['pushpin_map_size'] local map = {} local caption_list = {} for mapname in string.gmatch(parsed_args[1], '[^#]+') do map[#map + 1] = p.getMapParams(mw.ustring.gsub(mapname, '^%s*(.-)%s*$', '%1'), frame) end if parsed_args['caption'] then for caption in mw.text.gsplit(parsed_args['caption'], '##', true) do caption_list[#caption_list + 1] = caption end end if #map == 1 then map = map[1] if not parsed_args.caption then parsed_args.caption = 'Location within ' .. map('name') end end if type(map) == 'table' then mw.log('----') mw.logObject(map) if #caption_list > #map then error(string.format('%d captions were provided, but only %d maps were provided', #caption_list, #map)) elseif not parsed_args.caption then -- Set a default caption for each of the multiple maps for i=1, #map do caption_list[#caption_list + 1] = 'Location within '.. map[i]('name') end end local outputs = {} parsed_args.autoSwitcherLabel = true for k,v in ipairs(map) do parsed_args.caption = caption_list[k] outputs[k] = p.main(frame, parsed_args, v) end return '<div class="switcher-container">' .. table.concat(outputs) .. '</div>' else return p.top(frame, parsed_args, map) .. tostring( p.mark(frame, parsed_args, map) ) .. p.bottom(frame, parsed_args, map) end end function p.main(frame, args, map) local caption_list = {} if not args then args = getArgs(frame, {wrappers = 'Template:Location map', valueFunc = p.valueFunc}) end if args.useWikidata == nil then args.useWikidata = true end if not map then if args[1] then map = {} for mapname in string.gmatch(args[1], '[^#]+') do map[#map + 1] = p.getMapParams(mw.ustring.gsub(mapname, '^%s*(.-)%s*$', '%1'), frame) end if args['caption'] then if args['caption'] == "" then while #caption_list < #map do caption_list[#caption_list + 1] = args['caption'] end else for caption in mw.text.gsplit(args['caption'], '##', true) do caption_list[#caption_list + 1] = caption end end end if #map == 1 then map = map[1] end else map = p.getMapParams('World', frame) end end if type(map) == 'table' then local altmaps = switcherSeparate(args.AlternativeMap) if #altmaps > #map then error(string.format('%d AlternativeMaps were provided, but only %d maps were provided', #altmaps, #map)) end local overlays = switcherSeparate(args.overlay_image) if #overlays > #map then error(string.format('%d overlay_images were provided, but only %d maps were provided', #overlays, #map)) end if #caption_list > #map then error(string.format('%d captions were provided, but only %d maps were provided', #caption_list, #map)) end local outputs = {} args.autoSwitcherLabel = true for k,v in ipairs(map) do args.AlternativeMap = altmaps[k] args.overlay_image = overlays[k] args.caption = caption_list[k] outputs[k] = p.main(frame, args, v) end return '<div class="switcher-container">' .. table.concat(outputs) .. '</div>' else return p.top(frame, args, map) .. tostring( p.mark(frame, args, map) ) .. p.bottom(frame, args, map) end end return p 3pqbnkg8pemwulwnvka0szt6hqc0tii 10590 10589 2026-08-25T23:33:43Z RAPTOR7762 18 1 revision imported from [[:en:Module:Location_map]] 10589 Scribunto text/plain require('strict') local p = {} local getArgs = require('Module:Arguments').getArgs local function round(n, decimals) local pow = 10^(decimals or 0) return math.floor(n * pow + 0.5) / pow end function p.getMapParams(map, frame) if not map then error('The name of the location map definition to use must be specified', 2) end local moduletitle = mw.title.new('Module:Location map/data/' .. map) if not moduletitle then error(string.format('%q is not a valid name for a location map definition', map), 2) elseif moduletitle.exists then local mapData = mw.loadData('Module:Location map/data/' .. map) return function(name, params) if name == nil then return 'Module:Location map/data/' .. map elseif mapData[name] == nil then return '' elseif params then return mw.message.newRawMessage(tostring(mapData[name]), unpack(params)):plain() else return mapData[name] end end else error('Unable to find the specified location map definition: "Module:Location map/data/' .. map .. '" does not exist', 2) end end function p.data(frame, args, map) if not args then args = getArgs(frame, {frameOnly = true}) end if not map then map = p.getMapParams(args[1], frame) end local params = {} for k,v in ipairs(args) do if k > 2 then params[k-2] = v end end return map(args[2], #params ~= 0 and params) end local hemisphereMultipliers = { longitude = { W = -1, w = -1, E = 1, e = 1 }, latitude = { S = -1, s = -1, N = 1, n = 1 } } local function decdeg(degrees, minutes, seconds, hemisphere, decimal, direction) if decimal then if degrees then error('Decimal and DMS degrees cannot both be provided for ' .. direction, 2) elseif minutes then error('Minutes can only be provided with DMS degrees for ' .. direction, 2) elseif seconds then error('Seconds can only be provided with DMS degrees for ' .. direction, 2) elseif hemisphere then error('A hemisphere can only be provided with DMS degrees for ' .. direction, 2) end local retval = tonumber(decimal) if retval then return retval end error('The value "' .. decimal .. '" provided for ' .. direction .. ' is not valid', 2) elseif seconds and not minutes then error('Seconds were provided for ' .. direction .. ' without minutes also being provided', 2) elseif not degrees then if minutes then error('Minutes were provided for ' .. direction .. ' without degrees also being provided', 2) elseif hemisphere then error('A hemisphere was provided for ' .. direction .. ' without degrees also being provided', 2) end return nil end decimal = tonumber(degrees) if not decimal then error('The degree value "' .. degrees .. '" provided for ' .. direction .. ' is not valid', 2) elseif minutes and not tonumber(minutes) then error('The minute value "' .. minutes .. '" provided for ' .. direction .. ' is not valid', 2) elseif seconds and not tonumber(seconds) then error('The second value "' .. seconds .. '" provided for ' .. direction .. ' is not valid', 2) end decimal = decimal + (minutes or 0)/60 + (seconds or 0)/3600 if hemisphere then local multiplier = hemisphereMultipliers[direction][hemisphere] if not multiplier then error('The hemisphere "' .. hemisphere .. '" provided for ' .. direction .. ' is not valid', 2) end decimal = decimal * multiplier end return decimal end -- Finds a parameter in a transclusion of {{Coord}}. local function coord2text(para,coord) -- this should be changed for languages which do not use Arabic numerals or the degree sign local lat, long = mw.ustring.match(coord,'<span class="p%-latitude latitude">([^<]+)</span><span class="p%-longitude longitude">([^<]+)</span>') if lat then return tonumber(para == 'longitude' and long or lat) end local result = mw.text.split(mw.ustring.match(coord,'%-?[%.%d]+°[NS] %-?[%.%d]+°[EW]') or '', '[ °]') if para == 'longitude' then result = {result[3], result[4]} end if not tonumber(result[1]) or not result[2] then mw.log('Malformed coordinates value') mw.logObject(para, 'para') mw.logObject(coord, 'coord') return error('Malformed coordinates value', 2) end return tonumber(result[1]) * hemisphereMultipliers[para][result[2]] end -- effectively make removeBlanks false for caption and maplink, and true for everything else -- if useWikidata is present but blank, convert it to false instead of nil -- p.top, p.bottom, and their callers need to use this function p.valueFunc(key, value) if value then value = mw.text.trim(value) end if value ~= '' or key == 'caption' or key == 'maplink' then return value elseif key == 'useWikidata' then return false end end local function getContainerImage(args, map) if args.AlternativeMap then return args.AlternativeMap elseif args.relief then local digits = mw.ustring.match(args.relief,'^[1-9][0-9]?$') -- image1 to image99 if digits then local imageDigits = map('image' .. digits) if imageDigits ~= '' then return imageDigits end end local yesNo = require('Module:Yesno') if yesNo(args.relief,true) then local image1 = map('image1') if image1 ~= '' then return image1 end end end return map('image') end function p.top(frame, args, map) if not args then args = getArgs(frame, {frameOnly = true, valueFunc = p.valueFunc}) end if not map then map = p.getMapParams(args[1], frame) end local width local default_as_number = tonumber(mw.ustring.match(tostring(args.default_width),"%d*")) if not args.width then width = round((default_as_number or 240) * (tonumber(map('defaultscale')) or 1)) elseif mw.ustring.sub(args.width, -2) == 'px' then width = mw.ustring.sub(args.width, 1, -3) else width = args.width end local width_as_number = tonumber(mw.ustring.match(tostring(width),"%d*")) or 0; if width_as_number == 0 then -- check to see if width is junk. If it is, then use default calculation width = round((default_as_number or 240) * (tonumber(map('defaultscale')) or 1)) width_as_number = tonumber(mw.ustring.match(tostring(width),"%d*")) or 0; end if args.max_width ~= "" and args.max_width ~= nil then -- check to see if width bigger than max_width local max_as_number = tonumber(mw.ustring.match(args.max_width,"%d*")) or 0; if width_as_number>max_as_number and max_as_number>0 then width = args.max_width; end end local retval = frame:extensionTag{name = 'templatestyles', args = {src = 'Module:Location map/styles.css'}} if args.float == 'center' then retval = retval .. '<div class="center">' end if args.caption and args.caption ~= '' and args.border ~= 'infobox' then retval = retval .. '<div class="locmap noresize thumb ' if args.float == '"left"' or args.float == 'left' then retval = retval .. 'floatleft' elseif args.float == '"center"' or args.float == 'center' or args.float == '"none"' or args.float == 'none' then retval = retval .. 'tnone' else retval = retval .. 'floatright' end retval = retval .. '"><div class="thumbinner" style="width:' .. (width + 2) .. 'px' if args.border == 'none' then retval = retval .. ';border:none' elseif args.border then retval = retval .. ';border-color:' .. args.border end retval = retval .. '"><div style="position:relative;width:' .. width .. 'px' .. (args.border ~= 'none' and ';border:1px solid lightgray">' or '">') else retval = retval .. '<div class="locmap" style="width:' .. width .. 'px;' if args.float == '"left"' or args.float == 'left' then retval = retval .. 'float:left;clear:left' elseif args.float == '"center"' or args.float == 'center' then retval = retval .. 'float:none;clear:both;margin-left:auto;margin-right:auto' elseif args.float == '"none"' or args.float == 'none' then retval = retval .. 'float:none;clear:none' else retval = retval .. 'float:right;clear:right' end retval = retval .. '"><div style="width:' .. width .. 'px;padding:0"><div style="position:relative;width:' .. width .. 'px">' end local image = getContainerImage(args, map) local currentTitle = mw.title.getCurrentTitle() retval = string.format( '%s[[File:%s|%spx|%s%s|class=notpageimage noviewer]]', retval, image, width, args.alt or ((args.label or currentTitle.text) .. ' is located in ' .. map('name')), args.maplink and ('|link=' .. args.maplink) or '' ) if args.caption and args.caption ~= '' then if (currentTitle.namespace == 0) and mw.ustring.find(args.caption, '##') then retval = retval .. '[[Category:Pages using location map with a double number sign in the caption]]' end end if args.overlay_image then return retval .. '<div style="position:absolute;top:0;left:0">[[File:' .. args.overlay_image .. '|' .. width .. 'px|class=notpageimage noviewer]]</div>' else return retval end end function p.bottom(frame, args, map) if not args then args = getArgs(frame, {frameOnly = true, valueFunc = p.valueFunc}) end if not map then map = p.getMapParams(args[1], frame) end local retval = '</div>' local currentTitle = mw.title.getCurrentTitle() if not args.caption or args.border == 'infobox' then if args.border then retval = retval .. '<div style="padding-top:0.2em">' else retval = retval .. '<div style="font-size:91%;padding-top:3px">' end retval = retval .. (args.caption or (args.label or currentTitle.text) .. ' (' .. map('name') .. ')') .. '</div>' elseif args.caption ~= '' then -- This is not the pipe trick. We're creating a link with no text on purpose, so that CSS can give us a nice image retval = retval .. '<div class="thumbcaption"><div class="magnify">[[:File:' .. getContainerImage(args, map) .. '| ]]</div>' .. args.caption .. '</div>' end if args.switcherLabel then retval = retval .. '<span class="switcher-label" style="display:none">' .. args.switcherLabel .. '</span>' elseif args.autoSwitcherLabel then retval = retval .. '<span class="switcher-label" style="display:none">Show map of ' .. map('name') .. '</span>' end retval = retval .. '</div></div>' if args.caption_undefined then mw.log('Removed parameter caption_undefined used.') local parent = frame:getParent() if parent then mw.log('Parent is ' .. parent:getTitle()) end mw.logObject(args, 'args') if currentTitle.namespace == 0 then retval = retval .. '[[Category:Location maps with removed parameters|caption_undefined]]' end end if map('skew') ~= '' or map('lat_skew') ~= '' or map('crosses180') ~= '' or map('type') ~= '' then mw.log('Removed parameter used in map definition ' .. map()) if currentTitle.namespace == 0 then local key = (map('skew') ~= '' and 'skew' or '') .. (map('lat_skew') ~= '' and 'lat_skew' or '') .. (map('crosses180') ~= '' and 'crosses180' or '') .. (map('type') ~= '' and 'type' or '') retval = retval .. '[[Category:Location maps with removed parameters|' .. key .. ' ]]' end end if string.find(map('name'), '|', 1, true) then mw.log('Pipe used in name of map definition ' .. map()) if currentTitle.namespace == 0 then retval = retval .. '[[Category:Location maps with a name containing a pipe]]' end end if args.float == 'center' then retval = retval .. '</div>' end return retval end local function markOuterDiv(x, y, imageDiv, labelDiv, label_size) return mw.html.create('div') :addClass('od') :addClass('notheme') -- T236137 :cssText('top:' .. round(y, 3) .. '%;left:' .. round(x, 3) .. '%;font-size:' .. label_size .. '%') :node(imageDiv) :node(labelDiv) end local function markImageDiv(mark, marksize, label, link, alt, title) local builder = mw.html.create('div') :addClass('id') :cssText('left:-' .. round(marksize / 2) .. 'px;top:-' .. round(marksize / 2) .. 'px') :attr('title', title) if marksize ~= 0 then builder:wikitext(string.format( '[[File:%s|%dx%dpx|%s|link=%s%s|class=notpageimage noviewer]]', mark, marksize, marksize, label, link, alt and ('|alt=' .. alt) or '' )) end return builder end local function markLabelDiv(label, label_size, label_width, position, background, x, marksize) if tonumber(label_size) == 0 then return mw.html.create('div'):addClass('l0'):wikitext(label) end local builder = mw.html.create('div') :cssText('width:' .. label_width .. 'em') local distance = round(marksize / 2 + 1) if position == 'top' then -- specified top builder:addClass('pv'):cssText('bottom:' .. distance .. 'px;left:' .. (-label_width / 2) .. 'em') elseif position == 'bottom' then -- specified bottom builder:addClass('pv'):cssText('top:' .. distance .. 'px;left:' .. (-label_width / 2) .. 'em') elseif position == 'left' or (tonumber(x) > 70 and position ~= 'right') then -- specified left or autodetected to left builder:addClass('pl'):cssText('right:' .. distance .. 'px') else -- specified right or autodetected to right builder:addClass('pr'):cssText('left:' .. distance .. 'px') end builder = builder:tag('div') :wikitext(label) if background then builder:cssText('background-color:' .. background) end return builder:done() end local function getX(longitude, left, right) local width = (right - left) % 360 if width == 0 then width = 360 end local distanceFromLeft = (longitude - left) % 360 -- the distance needed past the map to the right equals distanceFromLeft - width. the distance needed past the map to the left equals 360 - distanceFromLeft. to minimize page stretching, go whichever way is shorter if distanceFromLeft - width / 2 >= 180 then distanceFromLeft = distanceFromLeft - 360 end return 100 * distanceFromLeft / width end local function getY(latitude, top, bottom) return 100 * (top - latitude) / (top - bottom) end function p.mark(frame, args, map) if not args then args = getArgs(frame, {wrappers = 'Template:Location map~'}) end local mapnames = {} if not map then if args[1] then map = {} for mapname in mw.text.gsplit(args[1], '#', true) do map[#map + 1] = p.getMapParams(mw.ustring.gsub(mapname, '^%s*(.-)%s*$', '%1'), frame) mapnames[#mapnames + 1] = mapname end if #map == 1 then map = map[1] end else map = p.getMapParams('World', frame) args[1] = 'World' end end if type(map) == 'table' then local outputs = {} local oldargs = args[1] for k,v in ipairs(map) do args[1] = mapnames[k] outputs[k] = tostring(p.mark(frame, args, v)) end args[1] = oldargs return table.concat(outputs, '#PlaceList#') .. '#PlaceList#' end local x, y, longitude, latitude longitude = decdeg(args.lon_deg, args.lon_min, args.lon_sec, args.lon_dir, args.long, 'longitude') latitude = decdeg(args.lat_deg, args.lat_min, args.lat_sec, args.lat_dir, args.lat, 'latitude') if args.excludefrom then -- If this mark is to be excluded from certain maps entirely (useful in the context of multiple maps) for exclusionmap in mw.text.gsplit(args.excludefrom, '#', true) do -- Check if this map is excluded. If so, return an empty string. if args[1] == exclusionmap then return '' end end end local builder = mw.html.create() local currentTitle = mw.title.getCurrentTitle() if args.coordinates then -- Temporarily removed to facilitate infobox conversion. See [[Wikipedia:Coordinates in infoboxes]] -- if longitude or latitude then -- error('Coordinates from [[Module:Coordinates]] and individual coordinates cannot both be provided') -- end longitude = coord2text('longitude', args.coordinates) latitude = coord2text('latitude', args.coordinates) elseif not longitude and not latitude and args.useWikidata then -- If they didn't provide either coordinate, try Wikidata. If they provided one but not the other, don't. local entity = mw.wikibase.getEntity() if entity and entity.claims and entity.claims.P625 and entity.claims.P625[1].mainsnak.snaktype == 'value' then local value = entity.claims.P625[1].mainsnak.datavalue.value longitude, latitude = value.longitude, value.latitude end if args.link and (currentTitle.namespace == 0) then builder:wikitext('[[Category:Location maps with linked markers with coordinates from Wikidata]]') end end if not longitude then error('No value was provided for longitude') elseif not latitude then error('No value was provided for latitude') end if currentTitle.namespace > 0 then if (not args.lon_deg) ~= (not args.lat_deg) then builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Degrees]]') elseif (not args.lon_min) ~= (not args.lat_min) then builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Minutes]]') elseif (not args.lon_sec) ~= (not args.lat_sec) then builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Seconds]]') elseif (not args.lon_dir) ~= (not args.lat_dir) then builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Hemisphere]]') elseif (not args.long) ~= (not args.lat) then builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Decimal]]') end end if ((tonumber(args.lat_deg) or 0) < 0) and ((tonumber(args.lat_min) or 0) ~= 0 or (tonumber(args.lat_sec) or 0) ~= 0 or (args.lat_dir and args.lat_dir ~='')) then builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]') end if ((tonumber(args.lon_deg) or 0) < 0) and ((tonumber(args.lon_min) or 0) ~= 0 or (tonumber(args.lon_sec) or 0) ~= 0 or (args.lon_dir and args.lon_dir ~= '')) then builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]') end if (((tonumber(args.lat_min) or 0) < 0) or ((tonumber(args.lat_sec) or 0) < 0)) then builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]') end if (((tonumber(args.lon_min) or 0) < 0) or ((tonumber(args.lon_sec) or 0) < 0)) then builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]') end if args.skew or args.lon_shift or args.markhigh then mw.log('Removed parameter used in invocation.') local parent = frame:getParent() if parent then mw.log('Parent is ' .. parent:getTitle()) end mw.logObject(args, 'args') if currentTitle.namespace == 0 then local key = (args.skew and 'skew' or '') .. (args.lon_shift and 'lon_shift' or '') .. (args.markhigh and 'markhigh' or '') builder:wikitext('[[Category:Location maps with removed parameters|' .. key ..' ]]') end end if map('x') ~= '' then x = tonumber(mw.ext.ParserFunctions.expr(map('x', { latitude, longitude }))) else x = tonumber(getX(longitude, map('left'), map('right'))) end if map('y') ~= '' then y = tonumber(mw.ext.ParserFunctions.expr(map('y', { latitude, longitude }))) else y = tonumber(getY(latitude, map('top'), map('bottom'))) end if (x < 0 or x > 100 or y < 0 or y > 100) and not args.outside then mw.log('Mark placed outside map boundaries without outside flag set. x = ' .. x .. ', y = ' .. y) local parent = frame:getParent() if parent then mw.log('Parent is ' .. parent:getTitle()) end mw.logObject(args, 'args') if currentTitle.namespace == 0 then local key = currentTitle.prefixedText builder:wikitext('[[Category:Location maps with marks outside map and outside parameter not set|' .. key .. ' ]]') end end local mark = args.mark or map('mark') if mark == '' then mark = 'Red pog.svg' end local marksize = tonumber(args.marksize) or tonumber(map('marksize')) or 8 local imageDiv = markImageDiv(mark, marksize, args.label or mw.title.getCurrentTitle().text, args.link or '', args.alt, args[2]) local label_size = args.label_size or 91 local labelDiv if args.label and args.position ~= 'none' then labelDiv = markLabelDiv(args.label, label_size, args.label_width or 6, args.position, args.background, x, marksize) end return builder:node(markOuterDiv(x, y, imageDiv, labelDiv, label_size)) end local function switcherSeparate(s) if s == nil then return {} end local retval = {} for i in string.gmatch(s .. '#', '([^#]*)#') do i = mw.text.trim(i) retval[#retval + 1] = (i ~= '' and i) end return retval end function p.infobox_pushpin_map(frame) --This function is designed to be invoked from an infobox template --* Some parameters (generally starting with "pushpin_") are meant to be exposed as parameters -- in the outer infobox, settable by editors --* Others are meant to be "hidden" (e.g., only set inside the infobox template code) -- First get the combined arguments from both parent and invocation frame local raw_args = getArgs(frame,{parentFirst=true}) --If no map is supplied, return. if not raw_args['pushpin_map'] then return end -- Now get arguments from just the invocation frame local frame_args = getArgs(frame,{frameOnly=true}) -- parsed_args will have the resulting merged parameters local parsed_args = {} -- Default to using wikidata coodinates if no other coordiantes supplied. if raw_args.useWikidata == nil then parsed_args.useWikidata = true else parsed_args.useWikidata = raw_args.useWikidata end -- Parse the arguments parsed_args[1] = raw_args['pushpin_map'] parsed_args.float = frame_args.float or 'center' parsed_args.border = frame_args.border or 'infobox' parsed_args.default_width = frame_args.default_width parsed_args.max_width = frame_args.max_width parsed_args.coordinates = raw_args['coordinates'] parsed_args.caption = raw_args['pushpin_caption'] parsed_args.relief = raw_args['pushpin_relief'] parsed_args.label = raw_args['pushpin_label'] parsed_args.label_size = raw_args['pushpin_label_size'] parsed_args.position = raw_args['pushpin_label_position'] parsed_args.mark = raw_args['pushpin_mark'] parsed_args.marksize = raw_args['pushpin_mark_size'] parsed_args.alt = raw_args['pushpin_alt'] parsed_args.background = raw_args['pushpin_background'] parsed_args.width = raw_args['pushpin_map_size'] local map = {} local caption_list = {} for mapname in string.gmatch(parsed_args[1], '[^#]+') do map[#map + 1] = p.getMapParams(mw.ustring.gsub(mapname, '^%s*(.-)%s*$', '%1'), frame) end if parsed_args['caption'] then for caption in mw.text.gsplit(parsed_args['caption'], '##', true) do caption_list[#caption_list + 1] = caption end end if #map == 1 then map = map[1] if not parsed_args.caption then parsed_args.caption = 'Location within ' .. map('name') end end if type(map) == 'table' then mw.log('----') mw.logObject(map) if #caption_list > #map then error(string.format('%d captions were provided, but only %d maps were provided', #caption_list, #map)) elseif not parsed_args.caption then -- Set a default caption for each of the multiple maps for i=1, #map do caption_list[#caption_list + 1] = 'Location within '.. map[i]('name') end end local outputs = {} parsed_args.autoSwitcherLabel = true for k,v in ipairs(map) do parsed_args.caption = caption_list[k] outputs[k] = p.main(frame, parsed_args, v) end return '<div class="switcher-container">' .. table.concat(outputs) .. '</div>' else return p.top(frame, parsed_args, map) .. tostring( p.mark(frame, parsed_args, map) ) .. p.bottom(frame, parsed_args, map) end end function p.main(frame, args, map) local caption_list = {} if not args then args = getArgs(frame, {wrappers = 'Template:Location map', valueFunc = p.valueFunc}) end if args.useWikidata == nil then args.useWikidata = true end if not map then if args[1] then map = {} for mapname in string.gmatch(args[1], '[^#]+') do map[#map + 1] = p.getMapParams(mw.ustring.gsub(mapname, '^%s*(.-)%s*$', '%1'), frame) end if args['caption'] then if args['caption'] == "" then while #caption_list < #map do caption_list[#caption_list + 1] = args['caption'] end else for caption in mw.text.gsplit(args['caption'], '##', true) do caption_list[#caption_list + 1] = caption end end end if #map == 1 then map = map[1] end else map = p.getMapParams('World', frame) end end if type(map) == 'table' then local altmaps = switcherSeparate(args.AlternativeMap) if #altmaps > #map then error(string.format('%d AlternativeMaps were provided, but only %d maps were provided', #altmaps, #map)) end local overlays = switcherSeparate(args.overlay_image) if #overlays > #map then error(string.format('%d overlay_images were provided, but only %d maps were provided', #overlays, #map)) end if #caption_list > #map then error(string.format('%d captions were provided, but only %d maps were provided', #caption_list, #map)) end local outputs = {} args.autoSwitcherLabel = true for k,v in ipairs(map) do args.AlternativeMap = altmaps[k] args.overlay_image = overlays[k] args.caption = caption_list[k] outputs[k] = p.main(frame, args, v) end return '<div class="switcher-container">' .. table.concat(outputs) .. '</div>' else return p.top(frame, args, map) .. tostring( p.mark(frame, args, map) ) .. p.bottom(frame, args, map) end end return p 3pqbnkg8pemwulwnvka0szt6hqc0tii Module:Location map/multi 828 1291 10591 2024-04-30T01:22:33Z en>Pppery 0 Desandbox 10591 Scribunto text/plain require('strict') local p = {} local getArgs = require('Module:Arguments').getArgs local locmap = require('Module:Location map') local function switcherSeparate(s) if s == nil then return {} end local retval = {} for i in string.gmatch(s .. '#', '([^#]*)#') do i = mw.text.trim(i) retval[#retval + 1] = (i ~= '' and i) end return retval end function p.container(frame, args, map) local caption_list = {} if not args then args = getArgs(frame, {wrappers = 'Template:Location map+', valueFunc = locmap.valueFunc}) end if not map then if args[1] then map = {} for mapname in string.gmatch(args[1], '[^#]+') do map[#map + 1] = locmap.getMapParams(mapname, frame) end if args['caption'] then if args['caption'] == "" then while #caption_list < #map do caption_list[#caption_list + 1] = args['caption'] end else for caption in mw.text.gsplit(args['caption'], '##', true) do caption_list[#caption_list + 1] = caption end end end if #map == 1 then map = map[1] end else map = locmap.getMapParams('World', frame) end end if type(map) == 'table' then local placeslist = mw.text.gsplit(args.places, '#PlaceList#') local permaplaces = {} local numbermaps = #map local count = 0 for i = 1,numbermaps do permaplaces[i] = {} end for place in placeslist do table.insert(permaplaces[count%numbermaps + 1],place) count = count + 1 end local altmaps = switcherSeparate(args.AlternativeMap) if #altmaps > #map then error(string.format('%d AlternativeMaps were provided, but only %d maps were provided', #altmaps, #map)) end local overlays = switcherSeparate(args.overlay_image) if #overlays > #map then error(string.format('%d overlay_images were provided, but only %d maps were provided', #overlays, #map)) end if #caption_list > #map then error(string.format('%d captions were provided, but only %d maps were provided', #caption_list, #map)) end local outputs = {} args.autoSwitcherLabel = true for k,v in ipairs(map) do args.AlternativeMap = altmaps[k] args.overlay_image = overlays[k] args.caption = caption_list[k] args.places = table.concat(permaplaces[k]) outputs[k] = p.container(frame, args, v) end return '<div class="switcher-container">' .. table.concat(outputs) .. '</div>' else return locmap.top(frame, args, map) .. (args.places and args.places:gsub('%s*\n%s*', '') or '') .. locmap.bottom(frame, args, map) end end local function manyMakeArgs(fullArgs, n) if n == 1 then return { lat = fullArgs.lat1 or fullArgs.lat, long = fullArgs.long1 or fullArgs.long, coordinates = fullArgs.coordinates1 or fullArgs.coordinates, lat_deg = fullArgs.lat1_deg or fullArgs.lat_deg, lat_min = fullArgs.lat1_min or fullArgs.lat_min, lat_sec = fullArgs.lat1_sec or fullArgs.lat_sec, lat_dir = fullArgs.lat1_dir or fullArgs.lat_dir, lon_deg = fullArgs.lon1_deg or fullArgs.lon_deg, lon_min = fullArgs.lon1_min or fullArgs.lon_min, lon_sec = fullArgs.lon1_sec or fullArgs.lon_sec, lon_dir = fullArgs.lon1_dir or fullArgs.lon_dir, outside = fullArgs.outside1 or fullArgs.outside, mark = fullArgs.mark1 or fullArgs.mark, marksize = fullArgs.mark1size or fullArgs.marksize, link = fullArgs.link1 or fullArgs.link, label = fullArgs.label1 or fullArgs.label, label_size = fullArgs.label1_size or fullArgs.label_size, label_width = fullArgs.label1_width or fullArgs.label_width, position = fullArgs.position1 or fullArgs.pos1 or fullArgs.position or fullArgs.pos, background = fullArgs.background1 or fullArgs.bg1 or fullArgs.background or fullArgs.bg } else return { lat = fullArgs['lat' .. n], long = fullArgs['long' .. n], coordinates = fullArgs['coordinates' .. n], lat_deg = fullArgs['lat' .. n .. '_deg'], lat_min = fullArgs['lat' .. n .. '_min'], lat_sec = fullArgs['lat' .. n .. '_sec'], lat_dir = fullArgs['lat' .. n .. '_dir'], lon_deg = fullArgs['lon' .. n .. '_deg'], lon_min = fullArgs['lon' .. n .. '_min'], lon_sec = fullArgs['lon' .. n .. '_sec'], lon_dir = fullArgs['lon' .. n .. '_dir'], outside = fullArgs['outside' .. n], mark = fullArgs['mark' .. n], marksize = fullArgs['mark' .. n .. 'size'], link = fullArgs['link' .. n], label = fullArgs['label' .. n], label_size = fullArgs['label' .. n .. '_size'], label_width = fullArgs['label' .. n .. '_width'], position = fullArgs['position' .. n] or fullArgs['pos' .. n], background = fullArgs['background' .. n] or fullArgs['bg' .. n] } end end function p.many(frame, args, map) if not args then args = getArgs(frame, {wrappers = 'Template:Location map many', valueFunc = locmap.valueFunc}) end if not args[1] then args[1] = 'World' end if not map then map = {} for mapname in string.gmatch(args[1], '[^#]+') do map[#map + 1] = locmap.getMapParams(mapname, frame) end if #map ~= 1 then local outputs = {} args.autoSwitcherLabel = true for k,v in ipairs(map) do outputs[k] = p.many(frame, args, v) end return '<div class="switcher-container">' .. table.concat(outputs) .. '</div>' end map = map[1] end local marks = {} local markhigh if args.markhigh then mw.log('Removed parameter markhigh used.') local parent = frame:getParent() if parent then mw.log('Parent is ' .. parent:getTitle()) end mw.logObject(args, 'args') markhigh = true end for k, v in pairs(args) do -- @todo change to uargs once we have that if v then if string.sub(k, -4) == '_deg' then k = string.sub(k, 1, -5) end if string.sub(k, 1, 3) == 'lat' then k = tonumber(string.sub(k, 4)) if k then table.insert(marks, k) end elseif string.sub(k, 1, 11) == 'coordinates' then k = tonumber(string.sub(k, 12)) if k then table.insert(marks,k) end end end end table.sort(marks) if marks[1] ~= 1 and (args.lat or args.lat_deg or args.coordinates) then table.insert(marks, 1, 1) end local body = '' for _, v in ipairs(marks) do -- don't try to consolidate this into the above loop. ordering of elements from pairs() is unspecified body = body .. tostring( locmap.mark(frame, manyMakeArgs(args, v), map) ) if args['mark' .. v .. 'high'] then mw.log('Removed parameter mark' .. v .. 'high used.') local parent = frame:getParent() if parent then mw.log('Parent is ' .. parent:getTitle()) end mw.logObject(args, 'args') markhigh = true end end args.label = nil -- there is no global label return locmap.top(frame, args, map) .. body .. locmap.bottom(frame, args, map) .. (markhigh and '[[Category:Location maps with possible errors|Page using removed parameter]]' or '') end function p.load(frame, args, map) if not args then args = getArgs(frame, {frameOnly = true}) end local dataModule = mw.loadData(args[1]) local containerArgs = dataModule.containerArgs if not map then map = {} for mapname in string.gmatch(containerArgs[1], '[^#]+') do map[#map + 1] = locmap.getMapParams(mapname, frame) end if #map ~= 1 then local outputs = {} args.autoSwitcherLabel = true for k,v in ipairs(map) do outputs[k] = p.load(frame, args, v) end return '<div class="switcher-container">' .. table.concat(outputs) .. '</div>' end map = map[1] end local marks = {} if dataModule.marks then for k,markArgs in ipairs(dataModule.marks) do marks[k] = tostring(locmap.mark(frame, markArgs, map)) end end if dataModule.secondaryModules then for _,modname in ipairs(dataModule.secondaryModules) do for _,markArgs in ipairs(mw.loadData(modname).marks) do marks[#marks + 1] = tostring(locmap.mark(frame, markArgs, map)) end end end if args.autoSwitcherLabel then local TableTools = require('Module:TableTools') containerArgs = TableTools.shallowClone(containerArgs) containerArgs.autoSwitcherLabel = true end return locmap.top(frame, containerArgs, map) .. table.concat(marks) .. locmap.bottom(frame, containerArgs, map) end return p q9gz44tzbnjx2aljxbl0067zos3ns53 10592 10591 2026-08-25T23:33:43Z RAPTOR7762 18 1 revision imported from [[:en:Module:Location_map/multi]] 10591 Scribunto text/plain require('strict') local p = {} local getArgs = require('Module:Arguments').getArgs local locmap = require('Module:Location map') local function switcherSeparate(s) if s == nil then return {} end local retval = {} for i in string.gmatch(s .. '#', '([^#]*)#') do i = mw.text.trim(i) retval[#retval + 1] = (i ~= '' and i) end return retval end function p.container(frame, args, map) local caption_list = {} if not args then args = getArgs(frame, {wrappers = 'Template:Location map+', valueFunc = locmap.valueFunc}) end if not map then if args[1] then map = {} for mapname in string.gmatch(args[1], '[^#]+') do map[#map + 1] = locmap.getMapParams(mapname, frame) end if args['caption'] then if args['caption'] == "" then while #caption_list < #map do caption_list[#caption_list + 1] = args['caption'] end else for caption in mw.text.gsplit(args['caption'], '##', true) do caption_list[#caption_list + 1] = caption end end end if #map == 1 then map = map[1] end else map = locmap.getMapParams('World', frame) end end if type(map) == 'table' then local placeslist = mw.text.gsplit(args.places, '#PlaceList#') local permaplaces = {} local numbermaps = #map local count = 0 for i = 1,numbermaps do permaplaces[i] = {} end for place in placeslist do table.insert(permaplaces[count%numbermaps + 1],place) count = count + 1 end local altmaps = switcherSeparate(args.AlternativeMap) if #altmaps > #map then error(string.format('%d AlternativeMaps were provided, but only %d maps were provided', #altmaps, #map)) end local overlays = switcherSeparate(args.overlay_image) if #overlays > #map then error(string.format('%d overlay_images were provided, but only %d maps were provided', #overlays, #map)) end if #caption_list > #map then error(string.format('%d captions were provided, but only %d maps were provided', #caption_list, #map)) end local outputs = {} args.autoSwitcherLabel = true for k,v in ipairs(map) do args.AlternativeMap = altmaps[k] args.overlay_image = overlays[k] args.caption = caption_list[k] args.places = table.concat(permaplaces[k]) outputs[k] = p.container(frame, args, v) end return '<div class="switcher-container">' .. table.concat(outputs) .. '</div>' else return locmap.top(frame, args, map) .. (args.places and args.places:gsub('%s*\n%s*', '') or '') .. locmap.bottom(frame, args, map) end end local function manyMakeArgs(fullArgs, n) if n == 1 then return { lat = fullArgs.lat1 or fullArgs.lat, long = fullArgs.long1 or fullArgs.long, coordinates = fullArgs.coordinates1 or fullArgs.coordinates, lat_deg = fullArgs.lat1_deg or fullArgs.lat_deg, lat_min = fullArgs.lat1_min or fullArgs.lat_min, lat_sec = fullArgs.lat1_sec or fullArgs.lat_sec, lat_dir = fullArgs.lat1_dir or fullArgs.lat_dir, lon_deg = fullArgs.lon1_deg or fullArgs.lon_deg, lon_min = fullArgs.lon1_min or fullArgs.lon_min, lon_sec = fullArgs.lon1_sec or fullArgs.lon_sec, lon_dir = fullArgs.lon1_dir or fullArgs.lon_dir, outside = fullArgs.outside1 or fullArgs.outside, mark = fullArgs.mark1 or fullArgs.mark, marksize = fullArgs.mark1size or fullArgs.marksize, link = fullArgs.link1 or fullArgs.link, label = fullArgs.label1 or fullArgs.label, label_size = fullArgs.label1_size or fullArgs.label_size, label_width = fullArgs.label1_width or fullArgs.label_width, position = fullArgs.position1 or fullArgs.pos1 or fullArgs.position or fullArgs.pos, background = fullArgs.background1 or fullArgs.bg1 or fullArgs.background or fullArgs.bg } else return { lat = fullArgs['lat' .. n], long = fullArgs['long' .. n], coordinates = fullArgs['coordinates' .. n], lat_deg = fullArgs['lat' .. n .. '_deg'], lat_min = fullArgs['lat' .. n .. '_min'], lat_sec = fullArgs['lat' .. n .. '_sec'], lat_dir = fullArgs['lat' .. n .. '_dir'], lon_deg = fullArgs['lon' .. n .. '_deg'], lon_min = fullArgs['lon' .. n .. '_min'], lon_sec = fullArgs['lon' .. n .. '_sec'], lon_dir = fullArgs['lon' .. n .. '_dir'], outside = fullArgs['outside' .. n], mark = fullArgs['mark' .. n], marksize = fullArgs['mark' .. n .. 'size'], link = fullArgs['link' .. n], label = fullArgs['label' .. n], label_size = fullArgs['label' .. n .. '_size'], label_width = fullArgs['label' .. n .. '_width'], position = fullArgs['position' .. n] or fullArgs['pos' .. n], background = fullArgs['background' .. n] or fullArgs['bg' .. n] } end end function p.many(frame, args, map) if not args then args = getArgs(frame, {wrappers = 'Template:Location map many', valueFunc = locmap.valueFunc}) end if not args[1] then args[1] = 'World' end if not map then map = {} for mapname in string.gmatch(args[1], '[^#]+') do map[#map + 1] = locmap.getMapParams(mapname, frame) end if #map ~= 1 then local outputs = {} args.autoSwitcherLabel = true for k,v in ipairs(map) do outputs[k] = p.many(frame, args, v) end return '<div class="switcher-container">' .. table.concat(outputs) .. '</div>' end map = map[1] end local marks = {} local markhigh if args.markhigh then mw.log('Removed parameter markhigh used.') local parent = frame:getParent() if parent then mw.log('Parent is ' .. parent:getTitle()) end mw.logObject(args, 'args') markhigh = true end for k, v in pairs(args) do -- @todo change to uargs once we have that if v then if string.sub(k, -4) == '_deg' then k = string.sub(k, 1, -5) end if string.sub(k, 1, 3) == 'lat' then k = tonumber(string.sub(k, 4)) if k then table.insert(marks, k) end elseif string.sub(k, 1, 11) == 'coordinates' then k = tonumber(string.sub(k, 12)) if k then table.insert(marks,k) end end end end table.sort(marks) if marks[1] ~= 1 and (args.lat or args.lat_deg or args.coordinates) then table.insert(marks, 1, 1) end local body = '' for _, v in ipairs(marks) do -- don't try to consolidate this into the above loop. ordering of elements from pairs() is unspecified body = body .. tostring( locmap.mark(frame, manyMakeArgs(args, v), map) ) if args['mark' .. v .. 'high'] then mw.log('Removed parameter mark' .. v .. 'high used.') local parent = frame:getParent() if parent then mw.log('Parent is ' .. parent:getTitle()) end mw.logObject(args, 'args') markhigh = true end end args.label = nil -- there is no global label return locmap.top(frame, args, map) .. body .. locmap.bottom(frame, args, map) .. (markhigh and '[[Category:Location maps with possible errors|Page using removed parameter]]' or '') end function p.load(frame, args, map) if not args then args = getArgs(frame, {frameOnly = true}) end local dataModule = mw.loadData(args[1]) local containerArgs = dataModule.containerArgs if not map then map = {} for mapname in string.gmatch(containerArgs[1], '[^#]+') do map[#map + 1] = locmap.getMapParams(mapname, frame) end if #map ~= 1 then local outputs = {} args.autoSwitcherLabel = true for k,v in ipairs(map) do outputs[k] = p.load(frame, args, v) end return '<div class="switcher-container">' .. table.concat(outputs) .. '</div>' end map = map[1] end local marks = {} if dataModule.marks then for k,markArgs in ipairs(dataModule.marks) do marks[k] = tostring(locmap.mark(frame, markArgs, map)) end end if dataModule.secondaryModules then for _,modname in ipairs(dataModule.secondaryModules) do for _,markArgs in ipairs(mw.loadData(modname).marks) do marks[#marks + 1] = tostring(locmap.mark(frame, markArgs, map)) end end end if args.autoSwitcherLabel then local TableTools = require('Module:TableTools') containerArgs = TableTools.shallowClone(containerArgs) containerArgs.autoSwitcherLabel = true end return locmap.top(frame, containerArgs, map) .. table.concat(marks) .. locmap.bottom(frame, containerArgs, map) end return p q9gz44tzbnjx2aljxbl0067zos3ns53 Module:Location map/styles.css 828 1292 10593 2025-05-23T23:48:41Z en>Izno 0 per tper 10593 sanitized-css text/css /* {{pp|small=yes}} */ .locmap .od { position: absolute; } .locmap .id { position: absolute; line-height: 0; } .locmap .l0 { font-size: 0; position: absolute; } .locmap .pv { line-height: 110%; position: absolute; text-align: center; } .locmap .pl { line-height: 110%; position: absolute; top: -0.75em; text-align: right; } .locmap .pr { line-height: 110%; position: absolute; top: -0.75em; text-align: left; } .locmap .pv > div { display: inline; padding: 1px; } .locmap .pl > div { display: inline; /* inline does not impact floated elements */ padding: 1px; float: right; } .locmap .pr > div { display: inline; /* inline does not impact floated elements */ padding: 1px; float: left; } /* Dark mode theme: */ @media screen { html.skin-theme-clientpref-night .od, html.skin-theme-clientpref-night .od .pv > div, html.skin-theme-clientpref-night .od .pl > div, html.skin-theme-clientpref-night .od .pr > div { /* Use !important to override any infobox rules */ background: #fff !important; color: #000 !important; } html.skin-theme-clientpref-night .locmap img { filter: grayscale(0.6); } /* Special handling for maps inside infoboxes * [[Module talk:Location map#Map label background bug in dark mode]] */ html.skin-theme-clientpref-night .infobox-full-data .locmap div { background: transparent !important; } } @media screen and (prefers-color-scheme: dark) { html.skin-theme-clientpref-os .locmap img { filter: grayscale(0.6); } html.skin-theme-clientpref-os .od, html.skin-theme-clientpref-os .od .pv > div, html.skin-theme-clientpref-os .od .pl > div, html.skin-theme-clientpref-os .od .pr > div { /* Use !important to override any infobox rules */ background: white !important; color: #000 !important; } html.skin-theme-clientpref-os .infobox-full-data .locmap div { background: transparent !important; } } rs1zb23dpoja6q2k5yakw4kskmcnf7l 10594 10593 2026-08-25T23:33:44Z RAPTOR7762 18 1 revision imported from [[:en:Module:Location_map/styles.css]] 10593 sanitized-css text/css /* {{pp|small=yes}} */ .locmap .od { position: absolute; } .locmap .id { position: absolute; line-height: 0; } .locmap .l0 { font-size: 0; position: absolute; } .locmap .pv { line-height: 110%; position: absolute; text-align: center; } .locmap .pl { line-height: 110%; position: absolute; top: -0.75em; text-align: right; } .locmap .pr { line-height: 110%; position: absolute; top: -0.75em; text-align: left; } .locmap .pv > div { display: inline; padding: 1px; } .locmap .pl > div { display: inline; /* inline does not impact floated elements */ padding: 1px; float: right; } .locmap .pr > div { display: inline; /* inline does not impact floated elements */ padding: 1px; float: left; } /* Dark mode theme: */ @media screen { html.skin-theme-clientpref-night .od, html.skin-theme-clientpref-night .od .pv > div, html.skin-theme-clientpref-night .od .pl > div, html.skin-theme-clientpref-night .od .pr > div { /* Use !important to override any infobox rules */ background: #fff !important; color: #000 !important; } html.skin-theme-clientpref-night .locmap img { filter: grayscale(0.6); } /* Special handling for maps inside infoboxes * [[Module talk:Location map#Map label background bug in dark mode]] */ html.skin-theme-clientpref-night .infobox-full-data .locmap div { background: transparent !important; } } @media screen and (prefers-color-scheme: dark) { html.skin-theme-clientpref-os .locmap img { filter: grayscale(0.6); } html.skin-theme-clientpref-os .od, html.skin-theme-clientpref-os .od .pv > div, html.skin-theme-clientpref-os .od .pl > div, html.skin-theme-clientpref-os .od .pr > div { /* Use !important to override any infobox rules */ background: white !important; color: #000 !important; } html.skin-theme-clientpref-os .infobox-full-data .locmap div { background: transparent !important; } } rs1zb23dpoja6q2k5yakw4kskmcnf7l Tempilet:Non breaking hyphen 10 1293 10597 2024-01-12T17:59:51Z en>MusikBot II 0 Changed protection settings for "[[Template:Non breaking hyphen]]": [[Wikipedia:High-risk templates|High-risk template or module]]: 191125 transclusions ([[User:MusikBot II/TemplateProtector|more info]]) ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite)) 10597 wikitext text/x-wiki <noinclude>{{#tag:syntaxhighlight| </noinclude>&#x2011;<noinclude> |lang=html}} {{template doc}}</noinclude> 9x62ykcwm4ewfyma6zlp3neiskjrym5 10598 10597 2026-08-25T23:33:44Z RAPTOR7762 18 1 revision imported from [[:en:Template:Non_breaking_hyphen]] 10597 wikitext text/x-wiki <noinclude>{{#tag:syntaxhighlight| </noinclude>&#x2011;<noinclude> |lang=html}} {{template doc}}</noinclude> 9x62ykcwm4ewfyma6zlp3neiskjrym5 Module:Location map/data/France 828 1294 10599 2016-01-02T11:08:51Z en>John of Reading 0 [[File:France location map-Regions and departements-2016.svg]] per edit request 10599 Scribunto text/plain return { name = 'France', top = 51.5, bottom = 41.0, left = -5.8, right = 10.0, image = 'France location map-Regions and departements-2016.svg', image1 = 'France relief location map.jpg' } st58qibwsfel1bkal2phy30a261hk3d 10600 10599 2026-08-25T23:33:44Z RAPTOR7762 18 1 revision imported from [[:en:Module:Location_map/data/France]] 10599 Scribunto text/plain return { name = 'France', top = 51.5, bottom = 41.0, left = -5.8, right = 10.0, image = 'France location map-Regions and departements-2016.svg', image1 = 'France relief location map.jpg' } st58qibwsfel1bkal2phy30a261hk3d Module:Location map/data/Australia 828 1295 10601 2018-02-23T03:22:06Z en>Plastikspork 0 Protected "[[Module:Location map/data/Australia]]": [[WP:High-risk templates|High-risk Lua module]] ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite)) 10601 Scribunto text/plain return { name = 'Australia', top = -9, bottom = -44.5, left = 111.5, right = 155, image = 'Australia location map.svg', image1 = 'Australia relief map.jpg', image2 = 'Australia location map grey.svg', } 768s4xmgc8tlyys5gz6nzv4ciq0ri2b 10602 10601 2026-08-25T23:33:44Z RAPTOR7762 18 1 revision imported from [[:en:Module:Location_map/data/Australia]] 10601 Scribunto text/plain return { name = 'Australia', top = -9, bottom = -44.5, left = 111.5, right = 155, image = 'Australia location map.svg', image1 = 'Australia relief map.jpg', image2 = 'Australia location map grey.svg', } 768s4xmgc8tlyys5gz6nzv4ciq0ri2b Module:Location map/data/England 828 1296 10603 2024-01-03T19:28:12Z en>Pppery 0 Convert old-style module redirect to new built-in redirect (via [[WP:JWB]]) 10603 Scribunto text/plain return require [[Module:Location map/data/UK England]] ecw7q5eaadmfhsbd2m0vkc8cf92t7ue 10604 10603 2026-08-25T23:33:44Z RAPTOR7762 18 1 revision imported from [[:en:Module:Location_map/data/England]] 10603 Scribunto text/plain return require [[Module:Location map/data/UK England]] ecw7q5eaadmfhsbd2m0vkc8cf92t7ue Module:Location map/data/UK England 828 1297 10605 2024-05-31T14:44:00Z en>Paine Ellsworth 0 per edit request on talk page - update location map 10605 Scribunto text/plain return { name = 'England', top = 56, bottom = 49.75, left = -6.75, right = 2, image = 'United Kingdom England adm location map.svg', image1 = 'England relief location map.jpg' } 4k3uq1nac82f8r609159gk6tggmmg7h 10606 10605 2026-08-25T23:33:44Z RAPTOR7762 18 1 revision imported from [[:en:Module:Location_map/data/UK_England]] 10605 Scribunto text/plain return { name = 'England', top = 56, bottom = 49.75, left = -6.75, right = 2, image = 'United Kingdom England adm location map.svg', image1 = 'England relief location map.jpg' } 4k3uq1nac82f8r609159gk6tggmmg7h Module:Location map/data/USA 828 1298 10607 2019-02-10T18:47:41Z en>Zyxw 0 update name used in automatic captions 10607 Scribunto text/plain return { name = 'the United States', x = '50.0 + 124.03149777329222 * ((1.9694462586094064-($1 * pi / 180)) * sin(0.6010514667026994 * ($2 + 96) * pi / 180))', y = '50.0 + 1.6155950752393982 * 124.03149777329222 * ( 0.02613325650382181 - (1.3236744353715044 - (1.9694462586094064 - ($1 * pi / 180)) * cos(0.6010514667026994 * ($2 + 96) * pi / 180)))', image = 'Usa edcp location map.svg', image1 = 'Usa edcp relief location map.png' } omeidj06s1rkgvgxe87f9nu423e3wd2 10608 10607 2026-08-25T23:33:44Z RAPTOR7762 18 1 revision imported from [[:en:Module:Location_map/data/USA]] 10607 Scribunto text/plain return { name = 'the United States', x = '50.0 + 124.03149777329222 * ((1.9694462586094064-($1 * pi / 180)) * sin(0.6010514667026994 * ($2 + 96) * pi / 180))', y = '50.0 + 1.6155950752393982 * 124.03149777329222 * ( 0.02613325650382181 - (1.3236744353715044 - (1.9694462586094064 - ($1 * pi / 180)) * cos(0.6010514667026994 * ($2 + 96) * pi / 180)))', image = 'Usa edcp location map.svg', image1 = 'Usa edcp relief location map.png' } omeidj06s1rkgvgxe87f9nu423e3wd2 Tempilet:Nbhyph 10 1299 10609 2024-01-12T17:59:51Z en>MusikBot II 0 Changed protection settings for "[[Template:Nbhyph]]": [[Wikipedia:High-risk templates|High-risk template or module]]: 190521 transclusions ([[User:MusikBot II/TemplateProtector|more info]]) ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite)) 10609 wikitext text/x-wiki #REDIRECT [[Template:Non breaking hyphen]] {{R from move}} kg6i68ziq8xqj7eo7aie66dhvnfffmi 10610 10609 2026-08-25T23:33:44Z RAPTOR7762 18 1 revision imported from [[:en:Template:Nbhyph]] 10609 wikitext text/x-wiki #REDIRECT [[Template:Non breaking hyphen]] {{R from move}} kg6i68ziq8xqj7eo7aie66dhvnfffmi Tempilet:Kbd 10 1300 10611 2024-06-03T15:51:34Z en>Jonesey95 0 Fix [[Special:LintErrors|Linter]] errors. 10611 wikitext text/x-wiki <templatestyles src="Kbd/styles.css"></templatestyles><kbd class="{{{class|}}} mw-tmpl-kbd" {{#if:{{{id|}}}|id="{{{id}}}"}} style="{{#if:{{{spacing|}}}| padding-left:{{{padding|0.2em}}}; padding-right:{{{padding|0.2em}}};| letter-spacing:0.05em; padding-left:0.25em; padding-right:0.2em;}}{{#if:{{{style|}}}|{{{style}}}}}" {{#if:{{{lang|}}}|lang="{{{lang}}}"}} {{#if:{{{title|}}}|title="{{{title}}}"}}>{{{1|user input}}}</kbd><noinclude> <!--Categories go near the bottom of the /doc page.--> {{Documentation}} </noinclude> 2ckjrmjacnm8dk3nrbnhm5ab97rp0z7 10612 10611 2026-08-25T23:33:45Z RAPTOR7762 18 1 revision imported from [[:en:Template:Kbd]] 10611 wikitext text/x-wiki <templatestyles src="Kbd/styles.css"></templatestyles><kbd class="{{{class|}}} mw-tmpl-kbd" {{#if:{{{id|}}}|id="{{{id}}}"}} style="{{#if:{{{spacing|}}}| padding-left:{{{padding|0.2em}}}; padding-right:{{{padding|0.2em}}};| letter-spacing:0.05em; padding-left:0.25em; padding-right:0.2em;}}{{#if:{{{style|}}}|{{{style}}}}}" {{#if:{{{lang|}}}|lang="{{{lang}}}"}} {{#if:{{{title|}}}|title="{{{title}}}"}}>{{{1|user input}}}</kbd><noinclude> <!--Categories go near the bottom of the /doc page.--> {{Documentation}} </noinclude> 2ckjrmjacnm8dk3nrbnhm5ab97rp0z7 Tempilet:Tld 10 1301 10613 2020-11-20T18:52:18Z en>Primefac 0 avoid redir 10613 wikitext text/x-wiki #REDIRECT [[Template:Template link code]] m8isvw3phvjr9rfkupy4uef5yqajks7 10614 10613 2026-08-25T23:33:45Z RAPTOR7762 18 1 revision imported from [[:en:Template:Tld]] 10613 wikitext text/x-wiki #REDIRECT [[Template:Template link code]] m8isvw3phvjr9rfkupy4uef5yqajks7 Tempilet:Tl2 10 1302 10615 2026-01-27T13:27:40Z en>Paine Ellsworth 0 add [[WP:RCAT|rcat template]] 10615 wikitext text/x-wiki #REDIRECT [[Template:Template link interwiki]] {{Redirect category shell| {{R from move}} {{R from template shortcut}} }} 1oi7jh94ehbfehrbm4tq3tjo1smasrs 10616 10615 2026-08-25T23:33:45Z RAPTOR7762 18 1 revision imported from [[:en:Template:Tl2]] 10615 wikitext text/x-wiki #REDIRECT [[Template:Template link interwiki]] {{Redirect category shell| {{R from move}} {{R from template shortcut}} }} 1oi7jh94ehbfehrbm4tq3tjo1smasrs Module:Transclusion count/data/L 828 1303 10617 2026-08-23T05:09:15Z en>Ahechtbot 0 [[Wikipedia:BOT|Bot]]: Updated page. 10617 Scribunto text/plain return { ["LASTYEAR"] = 846000, ["LAT"] = 4100, ["LCAuth"] = 3300, ["LCCN"] = 2300, ["LKA"] = 2100, ["LTU"] = 4900, ["LUX"] = 2500, ["LVA"] = 4700, ["La"] = 518000, ["LaPreferente"] = 2300, ["Label"] = 42000, ["Lafc"] = 7000, ["Lang"] = 457000, ["Lang-ka"] = 5900, ["Lang-sr-Cyrl"] = 13000, ["Lang-sr-cyr"] = 3300, ["Lang-sr-cyrl"] = 2400, ["Lang-zh"] = 84000, ["Lang2iso"] = 4500, ["Lang_unset_italics"] = 2400, ["Langnf"] = 2700, ["Langr"] = 2300, ["Language_with_name"] = 7800, ["Language_with_name/for"] = 3300, ["Languages"] = 2700, ["Langx"] = 671000, ["Large"] = 506000, ["Large_category_TOC"] = 11000, ["Last_edited_by"] = 62000, ["Last_word"] = 41000, ["LaunchesByYear_footer"] = 3600, ["LaunchesByYear_header"] = 3600, ["Law_sidebar_style/styles.css"] = 2200, ["Lc"] = 9900, ["Lead_too_short"] = 11000, ["League_icon"] = 3600, ["Leagueicon"] = 3500, ["Leave_feedback/link"] = 86000, ["Left"] = 10000, ["Left-pointing_double_angles"] = 2900, ["Left_angles"] = 2900, ["Leftlegend"] = 2000, ["Legend"] = 35000, ["Legend/styles.css"] = 152000, ["Legend0"] = 13000, ["Legend2"] = 23000, ["Legend_inline"] = 28000, ["LepIndex"] = 12000, ["Letter-NumberCombDisambig"] = 3500, ["Letter–number_combination_disambiguation"] = 4900, ["Lgtext"] = 3900, ["Libera.Chat"] = 11000, ["Library_link_about"] = 4000, ["Library_of_Congress_Control_Number"] = 2400, ["Library_resources_box"] = 4200, ["Librivox_author"] = 7300, ["Librivox_book"] = 4000, ["LicenseTagFairUseQualifier"] = 12000, ["License_migration"] = 45000, ["License_migration_complete"] = 19000, ["License_migration_not_eligible"] = 6800, ["License_migration_redundant"] = 19000, ["Lichengloss"] = 3100, ["Like"] = 2600, ["Likely"] = 5400, ["Line_link"] = 15000, ["Linear-gradient_text"] = 9200, ["Linescore_Amfootball"] = 2400, ["LinkCatIfExists2"] = 16000, ["LinkStatusLocal"] = 45000, ["LinkSummary"] = 249000, ["LinkSummaryLive"] = 9800, ["Link_if_exists"] = 298000, ["Link_note"] = 75000, ["Link_summary"] = 263000, ["Link_target"] = 34000, ["Linkcolor"] = 2600, ["Linkless_exists"] = 26000, ["Linksearch"] = 2800, ["Linksummarylive"] = 5600, ["Linktext"] = 15000, ["List-Class"] = 17000, ["Listen"] = 17000, ["Listen_live"] = 4800, ["Listenlive"] = 3800, ["Lists_of_people_editnotice"] = 2600, ["Lit"] = 17000, ["Literal_translation"] = 26000, ["Lnl"] = 11000, ["LoMP"] = 4800, ["Location_map"] = 51000, ["Location_map+"] = 31000, ["Location_map_data_documentation"] = 6800, ["Location_map_many"] = 4800, ["Location_map~"] = 30000, ["Location_mark"] = 2700, ["Location_mark+"] = 2700, ["Location_mark~"] = 2700, ["Log"] = 3700, ["Logo_fur"] = 64000, ["Logo_requested"] = 6600, ["London_Gazette"] = 36000, ["Long_plot"] = 4000, ["Longitem"] = 2070000, ["Longlink"] = 5300, ["Look_from"] = 11000, ["Lookfrom"] = 5500, ["Loop"] = 102000, ["Loss"] = 4100, ["Low-Class"] = 15000, ["Low-importance"] = 16000, ["Lower"] = 8400, ["Lowercase"] = 4600, ["Lowercase_title"] = 18000, ["Lowercasetitle"] = 2500, ["Lpsn"] = 2200, ["Lt"] = 2500, ["Lua"] = 12000, ["Lua_escape"] = 5700, ["Module:LCCN"] = 2400, ["Module:Labelled_list_hatnote"] = 635000, ["Module:Lang"] = 1720000, ["Module:Lang-zh"] = 85000, ["Module:Lang/ISO_639_synonyms"] = 1720000, ["Module:Lang/configuration"] = 1720000, ["Module:Lang/data"] = 1720000, ["Module:Lang/data/iana_languages"] = 1720000, ["Module:Lang/data/iana_regions"] = 1720000, ["Module:Lang/data/iana_scripts"] = 1720000, ["Module:Lang/data/iana_suppressed_scripts"] = 1720000, ["Module:Lang/data/iana_variants"] = 1720000, ["Module:Lang/data/is_latn_data"] = 1720000, ["Module:Lang/documentor_tool"] = 4100, ["Module:Lang/langx"] = 691000, ["Module:Lang/tag_from_name"] = 7500, ["Module:Language_with_name/for"] = 3300, ["Module:Large_category_TOC"] = 12000, ["Module:Large_category_TOC/styles.css"] = 12000, ["Module:Latin"] = 9000, ["Module:Librivox_book"] = 4000, ["Module:Lighthouse_tracking"] = 2600, ["Module:Link_if_exists"] = 307000, ["Module:Link_summary"] = 263000, ["Module:List"] = 2630000, ["Module:Listen"] = 17000, ["Module:Listen/styles.css"] = 16000, ["Module:Location_map"] = 1160000, ["Module:Location_map/data/Antarctica"] = 2700, ["Module:Location_map/data/Arkansas"] = 3400, ["Module:Location_map/data/Australia"] = 3400, ["Module:Location_map/data/Australia_New_South_Wales"] = 3700, ["Module:Location_map/data/Australia_Queensland"] = 6000, ["Module:Location_map/data/Australia_South_Australia"] = 2200, ["Module:Location_map/data/Austria"] = 3500, ["Module:Location_map/data/Azerbaijan"] = 4900, ["Module:Location_map/data/Bangladesh"] = 2300, ["Module:Location_map/data/Belgium"] = 2000, ["Module:Location_map/data/Bosnia_and_Herzegovina"] = 5500, ["Module:Location_map/data/Brazil"] = 5300, ["Module:Location_map/data/Bulgaria"] = 3400, ["Module:Location_map/data/California"] = 6200, ["Module:Location_map/data/Canada"] = 5000, ["Module:Location_map/data/Canada_Alberta"] = 2200, ["Module:Location_map/data/Canada_British_Columbia"] = 3500, ["Module:Location_map/data/Canada_Ontario"] = 2000, ["Module:Location_map/data/China"] = 3900, ["Module:Location_map/data/Croatia"] = 4300, ["Module:Location_map/data/Czech_Republic"] = 6900, ["Module:Location_map/data/Estonia"] = 3100, ["Module:Location_map/data/Europe"] = 4400, ["Module:Location_map/data/Florida"] = 2700, ["Module:Location_map/data/France"] = 40000, ["Module:Location_map/data/France_Auvergne-Rhône-Alpes"] = 4400, ["Module:Location_map/data/France_Bourgogne-Franche-Comté"] = 4000, ["Module:Location_map/data/France_Grand_Est"] = 5300, ["Module:Location_map/data/France_Hauts-de-France"] = 3900, ["Module:Location_map/data/France_Normandy"] = 3400, ["Module:Location_map/data/France_Nouvelle-Aquitaine"] = 4800, ["Module:Location_map/data/France_Occitanie"] = 4800, ["Module:Location_map/data/Germany"] = 17000, ["Module:Location_map/data/Germany_Bavaria"] = 2900, ["Module:Location_map/data/Germany_Rhineland-Palatinate"] = 2600, ["Module:Location_map/data/Greece"] = 5000, ["Module:Location_map/data/Hungary"] = 2900, ["Module:Location_map/data/Illinois"] = 3500, ["Module:Location_map/data/India"] = 24000, ["Module:Location_map/data/India3"] = 2900, ["Module:Location_map/data/India_Andhra_Pradesh"] = 2900, ["Module:Location_map/data/India_Karnataka"] = 2200, ["Module:Location_map/data/India_Kerala"] = 2900, ["Module:Location_map/data/India_Maharashtra"] = 3100, ["Module:Location_map/data/India_Punjab"] = 2300, ["Module:Location_map/data/India_Tamil_Nadu"] = 3300, ["Module:Location_map/data/India_Uttar_Pradesh"] = 3600, ["Module:Location_map/data/India_West_Bengal"] = 3000, ["Module:Location_map/data/Indiana"] = 3200, ["Module:Location_map/data/Iowa"] = 3000, ["Module:Location_map/data/Iran"] = 51000, ["Module:Location_map/data/Ireland"] = 4000, ["Module:Location_map/data/Italy"] = 12000, ["Module:Location_map/data/Japan"] = 15000, ["Module:Location_map/data/Maine"] = 2100, ["Module:Location_map/data/Maryland"] = 2100, ["Module:Location_map/data/Massachusetts"] = 4700, ["Module:Location_map/data/Mexico"] = 3900, ["Module:Location_map/data/Michigan"] = 3900, ["Module:Location_map/data/Minnesota"] = 4600, ["Module:Location_map/data/Nepal"] = 4800, ["Module:Location_map/data/Netherlands"] = 3100, ["Module:Location_map/data/New_York"] = 8100, ["Module:Location_map/data/North_Carolina"] = 3700, ["Module:Location_map/data/Norway"] = 2100, ["Module:Location_map/data/Ohio"] = 2700, ["Module:Location_map/data/Pakistan"] = 3100, ["Module:Location_map/data/Pennsylvania"] = 6100, ["Module:Location_map/data/Peru"] = 2900, ["Module:Location_map/data/Philippines"] = 3800, ["Module:Location_map/data/Poland"] = 54000, ["Module:Location_map/data/Queensland"] = 2500, ["Module:Location_map/data/Romania"] = 6000, ["Module:Location_map/data/Russia"] = 29000, ["Module:Location_map/data/Russia_Bashkortostan"] = 4500, ["Module:Location_map/data/Russia_Vladimir_Oblast"] = 2200, ["Module:Location_map/data/Russia_Vologda_Oblast"] = 4800, ["Module:Location_map/data/Serbia"] = 4400, ["Module:Location_map/data/Slovakia"] = 3300, ["Module:Location_map/data/Slovenia"] = 6800, ["Module:Location_map/data/South_Africa"] = 3300, ["Module:Location_map/data/Spain"] = 8700, ["Module:Location_map/data/Sweden"] = 2900, ["Module:Location_map/data/Switzerland"] = 6100, ["Module:Location_map/data/Syria"] = 2800, ["Module:Location_map/data/Texas"] = 3900, ["Module:Location_map/data/Turkey"] = 22000, ["Module:Location_map/data/Turkey_Central_Anatolia"] = 2100, ["Module:Location_map/data/Turkey_Marmara"] = 2300, ["Module:Location_map/data/USA"] = 115000, ["Module:Location_map/data/USA_Alabama"] = 2200, ["Module:Location_map/data/USA_Alaska"] = 2400, ["Module:Location_map/data/USA_Arizona"] = 2200, ["Module:Location_map/data/USA_Arkansas"] = 3500, ["Module:Location_map/data/USA_California"] = 8100, ["Module:Location_map/data/USA_Colorado"] = 2400, ["Module:Location_map/data/USA_Florida"] = 3400, ["Module:Location_map/data/USA_Georgia"] = 2100, ["Module:Location_map/data/USA_Illinois"] = 3800, ["Module:Location_map/data/USA_Indiana"] = 3400, ["Module:Location_map/data/USA_Iowa"] = 3200, ["Module:Location_map/data/USA_Kentucky"] = 3300, ["Module:Location_map/data/USA_Maine"] = 2300, ["Module:Location_map/data/USA_Maryland"] = 2600, ["Module:Location_map/data/USA_Massachusetts"] = 5000, ["Module:Location_map/data/USA_Michigan"] = 4300, ["Module:Location_map/data/USA_Minnesota"] = 5000, ["Module:Location_map/data/USA_Missouri"] = 2200, ["Module:Location_map/data/USA_New_Jersey"] = 3000, ["Module:Location_map/data/USA_New_York"] = 9100, ["Module:Location_map/data/USA_North_Carolina"] = 4500, ["Module:Location_map/data/USA_Ohio"] = 3000, ["Module:Location_map/data/USA_Oregon"] = 2600, ["Module:Location_map/data/USA_Pennsylvania"] = 7300, ["Module:Location_map/data/USA_Tennessee"] = 2200, ["Module:Location_map/data/USA_Texas"] = 4400, ["Module:Location_map/data/USA_Virginia"] = 5100, ["Module:Location_map/data/USA_Washington"] = 3200, ["Module:Location_map/data/USA_West_Virginia"] = 4400, ["Module:Location_map/data/USA_Wisconsin"] = 3000, ["Module:Location_map/data/Ukraine"] = 4100, ["Module:Location_map/data/United_States"] = 2600, ["Module:Location_map/data/Virginia"] = 4000, ["Module:Location_map/data/Washington"] = 2400, ["Module:Location_map/data/West_Virginia"] = 4100, ["Module:Location_map/data/Wisconsin"] = 2600, ["Module:Location_map/data/doc"] = 6700, ["Module:Location_map/info"] = 6800, ["Module:Location_map/multi"] = 35000, ["Module:Location_map/styles.css"] = 786000, ["Module:London_Gazette_util"] = 36000, ["Module:Lua_banner"] = 12000, } py0cl07pbkafa3iuohgs0sqpajpe0nh 10618 10617 2026-08-25T23:33:45Z RAPTOR7762 18 1 revision imported from [[:en:Module:Transclusion_count/data/L]] 10617 Scribunto text/plain return { ["LASTYEAR"] = 846000, ["LAT"] = 4100, ["LCAuth"] = 3300, ["LCCN"] = 2300, ["LKA"] = 2100, ["LTU"] = 4900, ["LUX"] = 2500, ["LVA"] = 4700, ["La"] = 518000, ["LaPreferente"] = 2300, ["Label"] = 42000, ["Lafc"] = 7000, ["Lang"] = 457000, ["Lang-ka"] = 5900, ["Lang-sr-Cyrl"] = 13000, ["Lang-sr-cyr"] = 3300, ["Lang-sr-cyrl"] = 2400, ["Lang-zh"] = 84000, ["Lang2iso"] = 4500, ["Lang_unset_italics"] = 2400, ["Langnf"] = 2700, ["Langr"] = 2300, ["Language_with_name"] = 7800, ["Language_with_name/for"] = 3300, ["Languages"] = 2700, ["Langx"] = 671000, ["Large"] = 506000, ["Large_category_TOC"] = 11000, ["Last_edited_by"] = 62000, ["Last_word"] = 41000, ["LaunchesByYear_footer"] = 3600, ["LaunchesByYear_header"] = 3600, ["Law_sidebar_style/styles.css"] = 2200, ["Lc"] = 9900, ["Lead_too_short"] = 11000, ["League_icon"] = 3600, ["Leagueicon"] = 3500, ["Leave_feedback/link"] = 86000, ["Left"] = 10000, ["Left-pointing_double_angles"] = 2900, ["Left_angles"] = 2900, ["Leftlegend"] = 2000, ["Legend"] = 35000, ["Legend/styles.css"] = 152000, ["Legend0"] = 13000, ["Legend2"] = 23000, ["Legend_inline"] = 28000, ["LepIndex"] = 12000, ["Letter-NumberCombDisambig"] = 3500, ["Letter–number_combination_disambiguation"] = 4900, ["Lgtext"] = 3900, ["Libera.Chat"] = 11000, ["Library_link_about"] = 4000, ["Library_of_Congress_Control_Number"] = 2400, ["Library_resources_box"] = 4200, ["Librivox_author"] = 7300, ["Librivox_book"] = 4000, ["LicenseTagFairUseQualifier"] = 12000, ["License_migration"] = 45000, ["License_migration_complete"] = 19000, ["License_migration_not_eligible"] = 6800, ["License_migration_redundant"] = 19000, ["Lichengloss"] = 3100, ["Like"] = 2600, ["Likely"] = 5400, ["Line_link"] = 15000, ["Linear-gradient_text"] = 9200, ["Linescore_Amfootball"] = 2400, ["LinkCatIfExists2"] = 16000, ["LinkStatusLocal"] = 45000, ["LinkSummary"] = 249000, ["LinkSummaryLive"] = 9800, ["Link_if_exists"] = 298000, ["Link_note"] = 75000, ["Link_summary"] = 263000, ["Link_target"] = 34000, ["Linkcolor"] = 2600, ["Linkless_exists"] = 26000, ["Linksearch"] = 2800, ["Linksummarylive"] = 5600, ["Linktext"] = 15000, ["List-Class"] = 17000, ["Listen"] = 17000, ["Listen_live"] = 4800, ["Listenlive"] = 3800, ["Lists_of_people_editnotice"] = 2600, ["Lit"] = 17000, ["Literal_translation"] = 26000, ["Lnl"] = 11000, ["LoMP"] = 4800, ["Location_map"] = 51000, ["Location_map+"] = 31000, ["Location_map_data_documentation"] = 6800, ["Location_map_many"] = 4800, ["Location_map~"] = 30000, ["Location_mark"] = 2700, ["Location_mark+"] = 2700, ["Location_mark~"] = 2700, ["Log"] = 3700, ["Logo_fur"] = 64000, ["Logo_requested"] = 6600, ["London_Gazette"] = 36000, ["Long_plot"] = 4000, ["Longitem"] = 2070000, ["Longlink"] = 5300, ["Look_from"] = 11000, ["Lookfrom"] = 5500, ["Loop"] = 102000, ["Loss"] = 4100, ["Low-Class"] = 15000, ["Low-importance"] = 16000, ["Lower"] = 8400, ["Lowercase"] = 4600, ["Lowercase_title"] = 18000, ["Lowercasetitle"] = 2500, ["Lpsn"] = 2200, ["Lt"] = 2500, ["Lua"] = 12000, ["Lua_escape"] = 5700, ["Module:LCCN"] = 2400, ["Module:Labelled_list_hatnote"] = 635000, ["Module:Lang"] = 1720000, ["Module:Lang-zh"] = 85000, ["Module:Lang/ISO_639_synonyms"] = 1720000, ["Module:Lang/configuration"] = 1720000, ["Module:Lang/data"] = 1720000, ["Module:Lang/data/iana_languages"] = 1720000, ["Module:Lang/data/iana_regions"] = 1720000, ["Module:Lang/data/iana_scripts"] = 1720000, ["Module:Lang/data/iana_suppressed_scripts"] = 1720000, ["Module:Lang/data/iana_variants"] = 1720000, ["Module:Lang/data/is_latn_data"] = 1720000, ["Module:Lang/documentor_tool"] = 4100, ["Module:Lang/langx"] = 691000, ["Module:Lang/tag_from_name"] = 7500, ["Module:Language_with_name/for"] = 3300, ["Module:Large_category_TOC"] = 12000, ["Module:Large_category_TOC/styles.css"] = 12000, ["Module:Latin"] = 9000, ["Module:Librivox_book"] = 4000, ["Module:Lighthouse_tracking"] = 2600, ["Module:Link_if_exists"] = 307000, ["Module:Link_summary"] = 263000, ["Module:List"] = 2630000, ["Module:Listen"] = 17000, ["Module:Listen/styles.css"] = 16000, ["Module:Location_map"] = 1160000, ["Module:Location_map/data/Antarctica"] = 2700, ["Module:Location_map/data/Arkansas"] = 3400, ["Module:Location_map/data/Australia"] = 3400, ["Module:Location_map/data/Australia_New_South_Wales"] = 3700, ["Module:Location_map/data/Australia_Queensland"] = 6000, ["Module:Location_map/data/Australia_South_Australia"] = 2200, ["Module:Location_map/data/Austria"] = 3500, ["Module:Location_map/data/Azerbaijan"] = 4900, ["Module:Location_map/data/Bangladesh"] = 2300, ["Module:Location_map/data/Belgium"] = 2000, ["Module:Location_map/data/Bosnia_and_Herzegovina"] = 5500, ["Module:Location_map/data/Brazil"] = 5300, ["Module:Location_map/data/Bulgaria"] = 3400, ["Module:Location_map/data/California"] = 6200, ["Module:Location_map/data/Canada"] = 5000, ["Module:Location_map/data/Canada_Alberta"] = 2200, ["Module:Location_map/data/Canada_British_Columbia"] = 3500, ["Module:Location_map/data/Canada_Ontario"] = 2000, ["Module:Location_map/data/China"] = 3900, ["Module:Location_map/data/Croatia"] = 4300, ["Module:Location_map/data/Czech_Republic"] = 6900, ["Module:Location_map/data/Estonia"] = 3100, ["Module:Location_map/data/Europe"] = 4400, ["Module:Location_map/data/Florida"] = 2700, ["Module:Location_map/data/France"] = 40000, ["Module:Location_map/data/France_Auvergne-Rhône-Alpes"] = 4400, ["Module:Location_map/data/France_Bourgogne-Franche-Comté"] = 4000, ["Module:Location_map/data/France_Grand_Est"] = 5300, ["Module:Location_map/data/France_Hauts-de-France"] = 3900, ["Module:Location_map/data/France_Normandy"] = 3400, ["Module:Location_map/data/France_Nouvelle-Aquitaine"] = 4800, ["Module:Location_map/data/France_Occitanie"] = 4800, ["Module:Location_map/data/Germany"] = 17000, ["Module:Location_map/data/Germany_Bavaria"] = 2900, ["Module:Location_map/data/Germany_Rhineland-Palatinate"] = 2600, ["Module:Location_map/data/Greece"] = 5000, ["Module:Location_map/data/Hungary"] = 2900, ["Module:Location_map/data/Illinois"] = 3500, ["Module:Location_map/data/India"] = 24000, ["Module:Location_map/data/India3"] = 2900, ["Module:Location_map/data/India_Andhra_Pradesh"] = 2900, ["Module:Location_map/data/India_Karnataka"] = 2200, ["Module:Location_map/data/India_Kerala"] = 2900, ["Module:Location_map/data/India_Maharashtra"] = 3100, ["Module:Location_map/data/India_Punjab"] = 2300, ["Module:Location_map/data/India_Tamil_Nadu"] = 3300, ["Module:Location_map/data/India_Uttar_Pradesh"] = 3600, ["Module:Location_map/data/India_West_Bengal"] = 3000, ["Module:Location_map/data/Indiana"] = 3200, ["Module:Location_map/data/Iowa"] = 3000, ["Module:Location_map/data/Iran"] = 51000, ["Module:Location_map/data/Ireland"] = 4000, ["Module:Location_map/data/Italy"] = 12000, ["Module:Location_map/data/Japan"] = 15000, ["Module:Location_map/data/Maine"] = 2100, ["Module:Location_map/data/Maryland"] = 2100, ["Module:Location_map/data/Massachusetts"] = 4700, ["Module:Location_map/data/Mexico"] = 3900, ["Module:Location_map/data/Michigan"] = 3900, ["Module:Location_map/data/Minnesota"] = 4600, ["Module:Location_map/data/Nepal"] = 4800, ["Module:Location_map/data/Netherlands"] = 3100, ["Module:Location_map/data/New_York"] = 8100, ["Module:Location_map/data/North_Carolina"] = 3700, ["Module:Location_map/data/Norway"] = 2100, ["Module:Location_map/data/Ohio"] = 2700, ["Module:Location_map/data/Pakistan"] = 3100, ["Module:Location_map/data/Pennsylvania"] = 6100, ["Module:Location_map/data/Peru"] = 2900, ["Module:Location_map/data/Philippines"] = 3800, ["Module:Location_map/data/Poland"] = 54000, ["Module:Location_map/data/Queensland"] = 2500, ["Module:Location_map/data/Romania"] = 6000, ["Module:Location_map/data/Russia"] = 29000, ["Module:Location_map/data/Russia_Bashkortostan"] = 4500, ["Module:Location_map/data/Russia_Vladimir_Oblast"] = 2200, ["Module:Location_map/data/Russia_Vologda_Oblast"] = 4800, ["Module:Location_map/data/Serbia"] = 4400, ["Module:Location_map/data/Slovakia"] = 3300, ["Module:Location_map/data/Slovenia"] = 6800, ["Module:Location_map/data/South_Africa"] = 3300, ["Module:Location_map/data/Spain"] = 8700, ["Module:Location_map/data/Sweden"] = 2900, ["Module:Location_map/data/Switzerland"] = 6100, ["Module:Location_map/data/Syria"] = 2800, ["Module:Location_map/data/Texas"] = 3900, ["Module:Location_map/data/Turkey"] = 22000, ["Module:Location_map/data/Turkey_Central_Anatolia"] = 2100, ["Module:Location_map/data/Turkey_Marmara"] = 2300, ["Module:Location_map/data/USA"] = 115000, ["Module:Location_map/data/USA_Alabama"] = 2200, ["Module:Location_map/data/USA_Alaska"] = 2400, ["Module:Location_map/data/USA_Arizona"] = 2200, ["Module:Location_map/data/USA_Arkansas"] = 3500, ["Module:Location_map/data/USA_California"] = 8100, ["Module:Location_map/data/USA_Colorado"] = 2400, ["Module:Location_map/data/USA_Florida"] = 3400, ["Module:Location_map/data/USA_Georgia"] = 2100, ["Module:Location_map/data/USA_Illinois"] = 3800, ["Module:Location_map/data/USA_Indiana"] = 3400, ["Module:Location_map/data/USA_Iowa"] = 3200, ["Module:Location_map/data/USA_Kentucky"] = 3300, ["Module:Location_map/data/USA_Maine"] = 2300, ["Module:Location_map/data/USA_Maryland"] = 2600, ["Module:Location_map/data/USA_Massachusetts"] = 5000, ["Module:Location_map/data/USA_Michigan"] = 4300, ["Module:Location_map/data/USA_Minnesota"] = 5000, ["Module:Location_map/data/USA_Missouri"] = 2200, ["Module:Location_map/data/USA_New_Jersey"] = 3000, ["Module:Location_map/data/USA_New_York"] = 9100, ["Module:Location_map/data/USA_North_Carolina"] = 4500, ["Module:Location_map/data/USA_Ohio"] = 3000, ["Module:Location_map/data/USA_Oregon"] = 2600, ["Module:Location_map/data/USA_Pennsylvania"] = 7300, ["Module:Location_map/data/USA_Tennessee"] = 2200, ["Module:Location_map/data/USA_Texas"] = 4400, ["Module:Location_map/data/USA_Virginia"] = 5100, ["Module:Location_map/data/USA_Washington"] = 3200, ["Module:Location_map/data/USA_West_Virginia"] = 4400, ["Module:Location_map/data/USA_Wisconsin"] = 3000, ["Module:Location_map/data/Ukraine"] = 4100, ["Module:Location_map/data/United_States"] = 2600, ["Module:Location_map/data/Virginia"] = 4000, ["Module:Location_map/data/Washington"] = 2400, ["Module:Location_map/data/West_Virginia"] = 4100, ["Module:Location_map/data/Wisconsin"] = 2600, ["Module:Location_map/data/doc"] = 6700, ["Module:Location_map/info"] = 6800, ["Module:Location_map/multi"] = 35000, ["Module:Location_map/styles.css"] = 786000, ["Module:London_Gazette_util"] = 36000, ["Module:Lua_banner"] = 12000, } py0cl07pbkafa3iuohgs0sqpajpe0nh Tempilet:Location map+/doc 10 1304 10619 2025-07-14T21:09:31Z en>Zinnober9 0 Removed extra }}. 10619 wikitext text/x-wiki {{Documentation subpage}} {{high-use| 15079 }} {{Lua|{{#ifeq:{{BASEPAGENAME}}|Location map~|Module:Location map|Module:Location map/multi}}}} <!-- EDIT TEMPLATE DOCUMENTATION BELOW THIS LINE --> {{Location map+|England|width=300|AlternativeMap=England_locator_map_with_North_East_England_highlighted.svg|alt=Map of England showing the locations of towns and battles. Bosworth is in the centre, northwest of London.|float=right|caption=[[File:Battle icon active (crossed swords).svg|16px|link=]] [[Battle of Bosworth Field]] [[File:Battle icon (crossed swords).svg|14px|link=]] other battles |places= {{Location map~ |England |label='''[[Battle of Bosworth Field|Bosworth]]''' |position=right |lat=52.591265 |long=-1.410327 |mark=Battle_icon_active_(crossed_swords).svg |marksize=18 |link=Battle of Bosworth Field}} {{Location map~ |England |label=[[Battle of Blore Heath|Blore Heath]] |position=top |lat=52.913611 |long=-2.424722 |mark=Battle_icon_(crossed_swords).svg |marksize=16 |link=Battle of Blore Heath}} {{Location map~ |England |label=[[Battle of Barnet|Barnet]] |position=top |lat=51.662233 |long=-0.200039 |mark=Battle_icon_(crossed_swords).svg |marksize=16 |link=Battle of Barnet}} {{Location map~ |England |label=[[Battle of Stoke Field|East Stoke]] |position=top |lat=53.029058 |long=-0.892586 |mark=Battle_icon_(crossed_swords).svg |marksize=16 |link=Battle of Stoke Field}} {{Location map~ |England |label=[[Battle of Tewkesbury|Tewkesbury]] |position=top |lat=51.986389 |long=-2.161389 |mark=Battle_icon_(crossed_swords).svg |marksize=16 |link=Battle of Tewkesbury}} {{Location map~ |England |label=Berwick |position=bottom |lat=55.771 |long=-2.007 |mark=Steel pog.svg |marksize=6}} {{Location map~ |England |label=London |position=bottom |lat=51.507778 |long=-0.128056 |mark=Steel pog.svg |marksize=6}} {{Location map~ |England |label=York |position=bottom |lat=53.958333 |long=-1.096667 |mark=Steel pog.svg |marksize=6}} {{Location map~ |England |label=Plymouth |position=bottom |lat=50.371397 |long=-4.142431 |mark=Steel pog.svg |marksize=6}} {{Location map~ |England |label=Poole |position=bottom |lat=50.71942 |long=-1.98113 |mark=Steel pog.svg |marksize=6}} {{Location map~ |England |label=Wem |position=left |lat=52.8555 |long=-2.7211 |mark=Steel pog.svg |marksize=6}} {{Location map~ |England |label=Northumberland |position=right |lat=55.1 |long=-1.68 |mark=Steel pog.svg |marksize=1}} {{Location map~ |England |label=Shrewsbury |position=bottom |lat=52.7077 |long=-2.7541 |mark=Steel pog.svg |marksize=6}} {{Location map~ |England |label=Milford Haven |position=bottom |lat=51.71418 |long=-5.04274 |mark=Steel pog.svg |marksize=6}} }} {{tl2|Location map+}} places one or more location marks on a map, with optional labels. It is in the same family of templates as the [[Template:Location map|Location map]] template and the documentation for that template might be helpful. Template:Location map+ uses a helper template, {{tl2|Location map~}}, one or more times to generate a mark for each location. {{clear}} == Usage == {| class="wikitable" ! rowspan=2 | Main template (one per map) !! colspan=3 | Helper template (one per location to be marked) |- ! colspan=3 | Multi-line style |- style="vertical-align:top" | rowspan=4 | <syntaxhighlight lang="wikitext" style="width:14em; margin-right:2em;"> {{Location map+ | {{{1}}} | width = | float = | border = | caption = | alt = | maplink = | relief = | AlternativeMap = | overlay_image = | places = }}</syntaxhighlight> |- style="vertical-align:top" |<syntaxhighlight lang="wikitext" style="width:12em;"> {{Location map~ | {{{1}}} | label = | label_size = | label_width = | position = | background = | mark = | marksize = | link = | lat_deg = | lon_deg = }}</syntaxhighlight> |<syntaxhighlight lang="wikitext" style="width:12em;"> {{Location map~ | {{{1}}} | label = | label_size = | label_width = | position = | background = | mark = | marksize = | link = | lat_deg = | lat_min = | lat_sec = | lat_dir = | lon_deg = | lon_min = | lon_sec = | lon_dir = }}</syntaxhighlight> |<syntaxhighlight lang="wikitext" style="width:12em;"> {{Location map~ | {{{1}}} | label = | label_size = | label_width = | position = | background = | mark = | marksize = | link = | coordinates = }}</syntaxhighlight> |- style="vertical-align:top" ! colspan=3 | Single-line style |- style="vertical-align:top" | colspan=3 |<!-- --><syntaxhighlight lang="wikitext">{{Location map~ |{{{1}}} |label_size= |label_width= |background= |marksize= |mark= |lat_deg= |lon_deg= |position= |label= |link=}}</syntaxhighlight> <!-- --><syntaxhighlight lang="wikitext">{{Location map~ |{{{1}}} |label_size= |label_width= |background= |marksize= |mark= |lat_deg= |lat_min= |lat_sec= |lat_dir= |lon_deg= |lon_min= |lon_sec= |lon_dir= |position= |label= |link=}}</syntaxhighlight><!-- --><syntaxhighlight lang="wikitext">{{Location map~ |{{{1}}} |label_size= |label_width= |background= |marksize= |mark= |coordinates= |position= |label= |link=}}</syntaxhighlight> '''Note''': in single-line style, parameters order is chosen so that it's easier to maintain vertical alignment in subsequent {{t|Location map~}} calls (which improves wikicode readability). Parameters that are rarely given values, or those whose values (usually) have constant or only slightly varying lengths (in characters), are placed first; parameters whose values frequently have very different lengths are placed last. See an [[#single-line Location map~|example]] below (note the alignment of {{para|marksize}} and {{para|position}} parameters in the wiki mark-up). |} {{clear}} == Parameters == {| class="wikitable" style="width:100%;" |+ Parameters for Location map+ ! Parameter ! Description |- | <code>{{{1}}}</code> | Required. Use the name of the map as the first unnamed parameter. For example, specifying ''England'' will use the values for England in [[Module:Location map/data/England]] if it exists, or {{tld|Location map England}} otherwise. See the [[#Examples|examples]] below or [[Special:PrefixIndex/Module:Location_map/data/|all subpages]]. |- | <code>width</code> | Determines the width of the map in [[pixel]]s, overriding any default values. Do not include <code>px</code>: for example, use <code>width=300</code>, not <code>width=300px</code>. |- | <code>default_width</code> | Determines the default width of the map in pixels, intended for use by templates e.g. place infoboxes. The default value is 240. Do not include <code>px</code>. This value will be multiplied by the <code>defaultscale</code> parameter specified in individual map templates, if it exists, in order to achieve an appropriate size for vertical maps. For example, if <code>default_width=200</code> is given, a map of Thailand will be displayed with a width of 200×0.57&nbsp;= 114&nbsp;pixels (as specified in [[Module:Location map/data/Thailand]]). |- | <code>float</code> | Specifies the position of the map on the page. Valid values are <code>left</code>, <code>right</code>, <code>center</code> and <code>none</code>. The default is <code>right</code>. |- | <code>border</code> | Specifies the color of the 1px map border. The default is ''lightgrey'' (see [[web colors]]). If set to <code>none</code>, no border will be generated. This parameter is seldom used. Special value: {{code|infobox}}. |- | <code>caption</code> | The text of a caption to be displayed below the map. Specifying a caption will cause the map to be displayed with a frame. If <code>caption</code> is defined but is not assigned a value, the map will not be framed and no caption will be displayed. If <code>caption</code> is not defined, the map will not be framed and a default caption will be generated. The default caption is created from the <code>label</code> parameter (or the current page name if label not defined) and the <code>name</code> parameter from map definition template. See the [[#Examples|examples]] below. |- | <code>alt</code> | Alt text for map; used by [[screen reader]]s, see [[WP:ALT]]. |- | <code>maplink</code> | Specifies a [[Wiki markup|wikilink]] that will be followed when clicking the map, by default to the map source file. Can be deactivated with <code>maplink =</code>, which can be useful to avoid mis-clicks if there are links associated with markers and labels. |- | <code>relief</code> | Any non-blank value (1, yes, etc.) will cause the template to display the map specified in the map definition template as <code>image1</code>, which is usually a [[Relief mapping (computer graphics)|relief map]]. See the example at [[Template:Location map+/relief|Location map+/relief]]. Other numerical values such as {{code|2}} or {{code|3}} will display {{code|image2}} or {{code|image3}}, if those images are defined. |- | <code>AlternativeMap</code> | Allows the use of an alternative map. The image must have the same edge coordinates as the location map template. See the example at [[Template:Location map+/AlternativeMap|Location map+/AlternativeMap]]. |- | <code>overlay_image</code> | Allows an overlay to be superimposed on the map. This parameter is seldom used. See the example at [[Template:Location map+/overlay|Location map+/overlay]]. |- | <code>places</code> | Specifies one or more place markers using {{tl|Location map~}}. |} {| class="wikitable" style="width:100%;" |+ Parameters for Location map~ ! Parameter ! colspan="2" |Description |- | <code>{{{1}}}</code> | colspan="2" |Required. Use the name of the map as the first unnamed parameter. For example, specifying ''England'' will use the values for England in [[Module:Location map/data/England]] if it exists, or {{tld|Location map England}} otherwise. See the [[#Examples|examples]] below. |- | colspan="3" |'''Label''' |- | <code>label</code> | colspan="2" |The text of the label to display next to the mark. A [[Wiki markup|wikilink]] can be used. The default if not specified is no label, just the marker. {{red|Do not use {{tag|div}} tags to attempt to position the label; use {{para|label_size}} and {{para|position}} instead.}} |- | <code>label_size</code> | colspan="2" |The font size to use for the label, given as a percentage of the label's (already reduced) normal font size (<100&nbsp;= smaller, >100&nbsp;= larger). The default is 91; obey [[MOS:FONTSIZE]] if setting to a lower value. Do not include <code>%</code>: for example, use <code>label_size=95</code>, not <code>label_size=95%</code>. If set to&nbsp;0, the label is displayed only when the user hovers over the mark. |- | <code>label_width</code> | colspan="2" |The width to use for the label, given as an [[Em (typography)#CSS|em&nbsp;size]]; the default width is&nbsp;6. Do not include {{kbd|em}}: for example, use {{para|label_width|7}}, not {{para|label_width|7em}}. |- | <code>position</code> | colspan="2" |The position of the label relative to the mark. Valid values are <code>left</code>, <code>right</code>, <code>top</code> and <code>bottom</code>. The default is <code>right</code>. |- | <code>background</code> | colspan="2" |The background color to use for the label. See [[Web colors]]. The default is no background color, which shows the map image behind the label. |- | colspan="3" |'''Mark''' |- | <code>mark</code> | colspan="2" |The name of an image to display as the mark. The default is [[:File:Red pog.svg|Red pog.svg]] ([[File:Red pog.svg|8px]]). More mark images are available, in particular, at [[Commons:Location markers]] and [[Commons:Category:Map icons]]. |- | <code>marksize</code> | colspan="2" |The size of the mark in [[pixel]]s. The default is&nbsp;8. Do not include <code>px</code>: for example, use <code>marksize=10</code>, not <code>marksize=10px</code>. |- | <code>link</code> | colspan="2" |Specifies a [[Wiki markup|wikilink]] which will be followed if the reader clicks on the mark. Do not include <code>[[]]</code>: for example, use <code>link=Yellowstone National Park</code>, not <code>link=[&#91;Yellowstone National Park&#93;]</code>. Do not use external (https:) links. |- | colspan="3" |'''Coordinates''' |- |<code>lat_deg</code> | rowspan="2" |Usual |Required. The degrees of [[latitude]], using [[decimal degrees]]. Logically, use negative number for southern latitude. |- |<code>lon_deg</code> |Required. The degrees of [[longitude]], using decimal degrees. Logically, use negative number for western longitude. |- |<code>lat_deg</code> | rowspan="8" |Detailed | Required. The degrees of [[latitude]]. The minutes and, probably, the seconds must be specified.<ref group="Note" name="precision" /> |- | <code>lat_min</code> | The minutes of latitude.<ref group=Note name="precision" /> The sign should match that of lat_deg. |- | <code>lat_sec</code> | The seconds of latitude. Usually not necessary.<ref group=Note name="precision" /> The sign should match that of lat_deg. |- | <code>lat_dir</code> | N if north (default value) or S for south of the [[Equator]]. Other values will be disregarded. |- | <code>lon_deg</code> | Required. The degrees of [[longitude]]. The minutes and, probably, the seconds must be specified.<ref group=Note name="precision" /> |- | <code>lon_min</code> | The minutes of longitude.<ref group=Note name="precision" /> The sign should match that of lon_deg. |- | <code>lon_sec</code> | The seconds of longitude. Usually not necessary.<ref group=Note name="precision" /> The sign should match that of lon_deg. |- | <code>lon_dir</code> | E for east (default value) or W for west of the [[IERS Reference Meridian|Prime Meridian]]. Other values will be disregarded. |- | <code>coordinates</code> |Alternative |The coordinates using {{tl|Coord}} template, e.g. <code><nowiki>{{coord|48.067|-2.863}}</nowiki></code>. |} Notes: {{Reflist | group = Note | refs = <ref group=Note name="precision">Appropriate precision should be used. For example, the whole US map, with a 1000{{nbhyph}}pixel width, has a resolution of about 5&nbsp;km/pixel. Only 2 decimal places of precision in decimal degrees format (≈1&nbsp;km), or whole minutes (≈1.7&nbsp;km) in DMS format, are required.</ref> }} == Available maps == Location maps can be found using these sources: :[[Special:PrefixIndex/Module:Location map/data/]] - checked before a map template is searched for. New maps should be created here rather than creating new templates. :[[Template:Location map/List|List of templates]] - 1050 templates were available when the list was generated. :[[:Category:Location map modules]] - templates sorted by category. :[[Special:WhatLinksHere/Template:Location map/Info]] - a search that might help. :[[Special:Prefixindex/Template:Location map]] - another search that might help. == Examples == This example does not designate the <code>caption</code> parameter. It demonstrates the use of the defaults. Notice that the default caption is the page name followed by the map name in parenthesis and that the label position is automatically adjusted if it is too close to an edge. {{Location map+ | Australia | places = {{Location map~ | Australia | label = Sydney | lat_deg = -33.86 | lon_deg = 151.21 }} {{Location map~ | Australia | label = Melbourne | coordinates = {{coord|-37.81|144.96}} }} }} <syntaxhighlight lang="wikitext" style="width:35em;"> {{Location map+ | Australia | places = {{Location map~ | Australia | label = Sydney | lat_deg = -33.86 | lon_deg = 151.21 }} {{Location map~ | Australia | label = Melbourne | coordinates = {{coord|-37.81|144.96}} }} }} </syntaxhighlight> {{clear}} {{anchor|single-line Location map~}}This example uses a designated but empty <code>caption</code>. It demonstrates coordinates using [[decimal degrees]], a&nbsp;10px mark with a link, and {{tl|Location map~}} entries listed in single-line style. {{Location map+ | France | caption = | places = {{Location map~ |France |marksize=10 |lat_deg=48.8567 |lon_deg=2.3508 |position=top |label=Paris |link=Paris }} {{Location map~ |France |marksize= 9 |lat_deg=43.2964 |lon_deg=5.3610 |position=bottom |label=Marseille |link=Marseille}} }} <syntaxhighlight lang="wikitext" style="width:75em;"> {{Location map+ | France | caption = | places = {{Location map~ |France |marksize=10 |lat_deg=48.8567 |lon_deg=2.3508 |position=top |label=Paris |link=Paris }} {{Location map~ |France |marksize= 9 |lat_deg=43.2964 |lon_deg=5.3610 |position=bottom |label=Marseille |link=Marseille}} }} </syntaxhighlight> {{clear}} This example uses <code>caption</code> with an assigned value. It demonstrates coordinates in degree, minute, second format, a relief map, label background color and linked labels. {{Location map+ | USA | width = 300 | caption = Some cites in the United States | relief = 1 | places = {{Location map~ | USA | label = [[New York City|New York]] | position = | background = white | mark = Cyan pog.svg | alt = alt text for New York City | link = New York City | lat_deg = 40 | lat_min = 43 | lat_dir = N | lon_deg = 74 | lon_min = 0 | lon_dir = W }} {{Location map~| USA | label = [[San Francisco]] | position = | background = white | mark = Purple pog.svg | alt = alt text for San Francisco | link = San Francisco | lat_deg = 37 | lat_min = 46 | lat_dir = N | lon_deg = 122 | lon_min = 25 | lon_dir = W }} }} <syntaxhighlight lang="wikitext" style="width:35em;"> {{Location map+ | USA | width = 300 | caption = Some cites in the United States | relief = 1 | places = {{Location map~ | USA | label = [[New York City|New York]] | position = | background = white | mark = Cyan pog.svg | alt = alt text for New York City | link = New York City | lat_deg = 40 | lat_min = 43 | lat_dir = N | lon_deg = 74 | lon_min = 0 | lon_dir = W }} {{Location map~| USA | label = [[San Francisco]] | position = | background = white | mark = Purple pog.svg | alt = alt text for San Francisco | link = San Francisco | lat_deg = 37 | lat_min = 46 | lat_dir = N | lon_deg = 122 | lon_min = 25 | lon_dir = W }} }} </syntaxhighlight> Also see the examples for {{tl|Location map}} and {{tl|Location map many}}, as well as: * [[Template:Location map+/relief]], an example using the ''relief'' parameter * [[Template:Location map+/AlternativeMap]], an example using the ''AlternativeMap'' parameter * [[Template:Location map+/overlay]], an example using the ''overlay_image'' parameter == Template data == {{Collapse top|[[Wikipedia:TemplateData|TemplateData]] documentation used by [[Wikipedia:VisualEditor|VisualEditor]] and other tools}} {{TemplateData header|noheader=1}} <templatedata> { "description": "This template places one or more location marks on a map.", "params": { "1": { "label": "Map name", "type": "string", "required": true, "description": "The name of the map to be used" }, "width": { "label": "Map width", "type": "number", "description": "Determines the width of the map in pixels, overriding any default values. Do not include \"px\", for example: \"300\", not \"300px\"." }, "default_width": { "label": "Default width", "type": "number", "description": "Determines the default width of the map in pixels, intended for use by templates such as infoboxes. The default value is 240. Do not include \"px\". This value will be multiplied by the defaultscale parameter specified in individual map templates, if it exists, in order to achieve an appropriate size for vertical maps." }, "float": { "label": "Position", "type": "string", "description": "Specifies the position of the map on the page. Valid values are left, right, center and none. The default is right." }, "border": { "label": "Frame style", "type": "string", "description": "Specifies the color of the map frame when the parameter caption is used. If set to none, no border will be generated. ", "suggestedvalues": [ "none", "infobox", "LightGray" ] }, "caption": { "label": "Map caption", "type": "string", "description": "The text of a caption to be displayed below the map. If caption is defined but is not assigned a value, the map will not be framed and no caption will be displayed. If caption is not defined, the map will not be framed and a default caption will be generated." }, "alt": { "label": "Alt text", "type": "string", "description": "Alt text for map; used by screen readers." }, "relief": { "label": "Alternative map from template", "type": "string", "description": "Any non-blank value (1, yes, etc.) will cause the template to display the map specified in the map definition template as image1, which is usually a relief map. If more than one relief map is defined, \"2\" will display \"image2\", and so on." }, "AlternativeMap": { "label": "Alternative map not from template", "type": "string", "description": "Allows the use of an alternative map. The image must have the same edge coordinates as the map template." }, "overlay_image": { "label": "Overlay image", "type": "string", "description": "Allows an overlay to be superimposed on the map. This parameter is seldom used." }, "places": { "label": "Place markers", "type": "string", "required": true, "description": "Specifies one or more place markers using Location map~." } } } </templatedata> {{Collapse bottom}} == See also == * [[Wikipedia:Maps for Wikipedia]] - A list of mapping tools available on Wikipedia * {{tl|Location map}} - For displaying one mark using latitude and longitude. * {{tl|Location map many}} - For displaying multiple marks using latitude and longitude. * [[:Commons:Category:Map pointers]] - List of the many Wikimedia Commons pointer symbols. * {{tl|OSM Location map}} - OpenStreetMap map with an "interactive fullscreen" version. Allows for labels, numbered dots, a heading, caption, mini-locator map and overlays. * {{tl|Overlay}} - Allows image numbered, textual number, or color tag overlays to be positioned over an image to indicate particular features in the image. * {{tl|CSS crop}} - Wrapper template that allows cropping the map. <includeonly>{{Sandbox other| | <!--Categories below this line, please; interwikis at Wikidata--> [[Category:Location map templates| ]] [[Category:Graphics templates]] }}</includeonly> 6k1rflp1vykn0960qajs5wy3wkfnpwp 10620 10619 2026-08-25T23:33:45Z RAPTOR7762 18 1 revision imported from [[:en:Template:Location_map+/doc]] 10619 wikitext text/x-wiki {{Documentation subpage}} {{high-use| 15079 }} {{Lua|{{#ifeq:{{BASEPAGENAME}}|Location map~|Module:Location map|Module:Location map/multi}}}} <!-- EDIT TEMPLATE DOCUMENTATION BELOW THIS LINE --> {{Location map+|England|width=300|AlternativeMap=England_locator_map_with_North_East_England_highlighted.svg|alt=Map of England showing the locations of towns and battles. Bosworth is in the centre, northwest of London.|float=right|caption=[[File:Battle icon active (crossed swords).svg|16px|link=]] [[Battle of Bosworth Field]] [[File:Battle icon (crossed swords).svg|14px|link=]] other battles |places= {{Location map~ |England |label='''[[Battle of Bosworth Field|Bosworth]]''' |position=right |lat=52.591265 |long=-1.410327 |mark=Battle_icon_active_(crossed_swords).svg |marksize=18 |link=Battle of Bosworth Field}} {{Location map~ |England |label=[[Battle of Blore Heath|Blore Heath]] |position=top |lat=52.913611 |long=-2.424722 |mark=Battle_icon_(crossed_swords).svg |marksize=16 |link=Battle of Blore Heath}} {{Location map~ |England |label=[[Battle of Barnet|Barnet]] |position=top |lat=51.662233 |long=-0.200039 |mark=Battle_icon_(crossed_swords).svg |marksize=16 |link=Battle of Barnet}} {{Location map~ |England |label=[[Battle of Stoke Field|East Stoke]] |position=top |lat=53.029058 |long=-0.892586 |mark=Battle_icon_(crossed_swords).svg |marksize=16 |link=Battle of Stoke Field}} {{Location map~ |England |label=[[Battle of Tewkesbury|Tewkesbury]] |position=top |lat=51.986389 |long=-2.161389 |mark=Battle_icon_(crossed_swords).svg |marksize=16 |link=Battle of Tewkesbury}} {{Location map~ |England |label=Berwick |position=bottom |lat=55.771 |long=-2.007 |mark=Steel pog.svg |marksize=6}} {{Location map~ |England |label=London |position=bottom |lat=51.507778 |long=-0.128056 |mark=Steel pog.svg |marksize=6}} {{Location map~ |England |label=York |position=bottom |lat=53.958333 |long=-1.096667 |mark=Steel pog.svg |marksize=6}} {{Location map~ |England |label=Plymouth |position=bottom |lat=50.371397 |long=-4.142431 |mark=Steel pog.svg |marksize=6}} {{Location map~ |England |label=Poole |position=bottom |lat=50.71942 |long=-1.98113 |mark=Steel pog.svg |marksize=6}} {{Location map~ |England |label=Wem |position=left |lat=52.8555 |long=-2.7211 |mark=Steel pog.svg |marksize=6}} {{Location map~ |England |label=Northumberland |position=right |lat=55.1 |long=-1.68 |mark=Steel pog.svg |marksize=1}} {{Location map~ |England |label=Shrewsbury |position=bottom |lat=52.7077 |long=-2.7541 |mark=Steel pog.svg |marksize=6}} {{Location map~ |England |label=Milford Haven |position=bottom |lat=51.71418 |long=-5.04274 |mark=Steel pog.svg |marksize=6}} }} {{tl2|Location map+}} places one or more location marks on a map, with optional labels. It is in the same family of templates as the [[Template:Location map|Location map]] template and the documentation for that template might be helpful. Template:Location map+ uses a helper template, {{tl2|Location map~}}, one or more times to generate a mark for each location. {{clear}} == Usage == {| class="wikitable" ! rowspan=2 | Main template (one per map) !! colspan=3 | Helper template (one per location to be marked) |- ! colspan=3 | Multi-line style |- style="vertical-align:top" | rowspan=4 | <syntaxhighlight lang="wikitext" style="width:14em; margin-right:2em;"> {{Location map+ | {{{1}}} | width = | float = | border = | caption = | alt = | maplink = | relief = | AlternativeMap = | overlay_image = | places = }}</syntaxhighlight> |- style="vertical-align:top" |<syntaxhighlight lang="wikitext" style="width:12em;"> {{Location map~ | {{{1}}} | label = | label_size = | label_width = | position = | background = | mark = | marksize = | link = | lat_deg = | lon_deg = }}</syntaxhighlight> |<syntaxhighlight lang="wikitext" style="width:12em;"> {{Location map~ | {{{1}}} | label = | label_size = | label_width = | position = | background = | mark = | marksize = | link = | lat_deg = | lat_min = | lat_sec = | lat_dir = | lon_deg = | lon_min = | lon_sec = | lon_dir = }}</syntaxhighlight> |<syntaxhighlight lang="wikitext" style="width:12em;"> {{Location map~ | {{{1}}} | label = | label_size = | label_width = | position = | background = | mark = | marksize = | link = | coordinates = }}</syntaxhighlight> |- style="vertical-align:top" ! colspan=3 | Single-line style |- style="vertical-align:top" | colspan=3 |<!-- --><syntaxhighlight lang="wikitext">{{Location map~ |{{{1}}} |label_size= |label_width= |background= |marksize= |mark= |lat_deg= |lon_deg= |position= |label= |link=}}</syntaxhighlight> <!-- --><syntaxhighlight lang="wikitext">{{Location map~ |{{{1}}} |label_size= |label_width= |background= |marksize= |mark= |lat_deg= |lat_min= |lat_sec= |lat_dir= |lon_deg= |lon_min= |lon_sec= |lon_dir= |position= |label= |link=}}</syntaxhighlight><!-- --><syntaxhighlight lang="wikitext">{{Location map~ |{{{1}}} |label_size= |label_width= |background= |marksize= |mark= |coordinates= |position= |label= |link=}}</syntaxhighlight> '''Note''': in single-line style, parameters order is chosen so that it's easier to maintain vertical alignment in subsequent {{t|Location map~}} calls (which improves wikicode readability). Parameters that are rarely given values, or those whose values (usually) have constant or only slightly varying lengths (in characters), are placed first; parameters whose values frequently have very different lengths are placed last. See an [[#single-line Location map~|example]] below (note the alignment of {{para|marksize}} and {{para|position}} parameters in the wiki mark-up). |} {{clear}} == Parameters == {| class="wikitable" style="width:100%;" |+ Parameters for Location map+ ! Parameter ! Description |- | <code>{{{1}}}</code> | Required. Use the name of the map as the first unnamed parameter. For example, specifying ''England'' will use the values for England in [[Module:Location map/data/England]] if it exists, or {{tld|Location map England}} otherwise. See the [[#Examples|examples]] below or [[Special:PrefixIndex/Module:Location_map/data/|all subpages]]. |- | <code>width</code> | Determines the width of the map in [[pixel]]s, overriding any default values. Do not include <code>px</code>: for example, use <code>width=300</code>, not <code>width=300px</code>. |- | <code>default_width</code> | Determines the default width of the map in pixels, intended for use by templates e.g. place infoboxes. The default value is 240. Do not include <code>px</code>. This value will be multiplied by the <code>defaultscale</code> parameter specified in individual map templates, if it exists, in order to achieve an appropriate size for vertical maps. For example, if <code>default_width=200</code> is given, a map of Thailand will be displayed with a width of 200×0.57&nbsp;= 114&nbsp;pixels (as specified in [[Module:Location map/data/Thailand]]). |- | <code>float</code> | Specifies the position of the map on the page. Valid values are <code>left</code>, <code>right</code>, <code>center</code> and <code>none</code>. The default is <code>right</code>. |- | <code>border</code> | Specifies the color of the 1px map border. The default is ''lightgrey'' (see [[web colors]]). If set to <code>none</code>, no border will be generated. This parameter is seldom used. Special value: {{code|infobox}}. |- | <code>caption</code> | The text of a caption to be displayed below the map. Specifying a caption will cause the map to be displayed with a frame. If <code>caption</code> is defined but is not assigned a value, the map will not be framed and no caption will be displayed. If <code>caption</code> is not defined, the map will not be framed and a default caption will be generated. The default caption is created from the <code>label</code> parameter (or the current page name if label not defined) and the <code>name</code> parameter from map definition template. See the [[#Examples|examples]] below. |- | <code>alt</code> | Alt text for map; used by [[screen reader]]s, see [[WP:ALT]]. |- | <code>maplink</code> | Specifies a [[Wiki markup|wikilink]] that will be followed when clicking the map, by default to the map source file. Can be deactivated with <code>maplink =</code>, which can be useful to avoid mis-clicks if there are links associated with markers and labels. |- | <code>relief</code> | Any non-blank value (1, yes, etc.) will cause the template to display the map specified in the map definition template as <code>image1</code>, which is usually a [[Relief mapping (computer graphics)|relief map]]. See the example at [[Template:Location map+/relief|Location map+/relief]]. Other numerical values such as {{code|2}} or {{code|3}} will display {{code|image2}} or {{code|image3}}, if those images are defined. |- | <code>AlternativeMap</code> | Allows the use of an alternative map. The image must have the same edge coordinates as the location map template. See the example at [[Template:Location map+/AlternativeMap|Location map+/AlternativeMap]]. |- | <code>overlay_image</code> | Allows an overlay to be superimposed on the map. This parameter is seldom used. See the example at [[Template:Location map+/overlay|Location map+/overlay]]. |- | <code>places</code> | Specifies one or more place markers using {{tl|Location map~}}. |} {| class="wikitable" style="width:100%;" |+ Parameters for Location map~ ! Parameter ! colspan="2" |Description |- | <code>{{{1}}}</code> | colspan="2" |Required. Use the name of the map as the first unnamed parameter. For example, specifying ''England'' will use the values for England in [[Module:Location map/data/England]] if it exists, or {{tld|Location map England}} otherwise. See the [[#Examples|examples]] below. |- | colspan="3" |'''Label''' |- | <code>label</code> | colspan="2" |The text of the label to display next to the mark. A [[Wiki markup|wikilink]] can be used. The default if not specified is no label, just the marker. {{red|Do not use {{tag|div}} tags to attempt to position the label; use {{para|label_size}} and {{para|position}} instead.}} |- | <code>label_size</code> | colspan="2" |The font size to use for the label, given as a percentage of the label's (already reduced) normal font size (<100&nbsp;= smaller, >100&nbsp;= larger). The default is 91; obey [[MOS:FONTSIZE]] if setting to a lower value. Do not include <code>%</code>: for example, use <code>label_size=95</code>, not <code>label_size=95%</code>. If set to&nbsp;0, the label is displayed only when the user hovers over the mark. |- | <code>label_width</code> | colspan="2" |The width to use for the label, given as an [[Em (typography)#CSS|em&nbsp;size]]; the default width is&nbsp;6. Do not include {{kbd|em}}: for example, use {{para|label_width|7}}, not {{para|label_width|7em}}. |- | <code>position</code> | colspan="2" |The position of the label relative to the mark. Valid values are <code>left</code>, <code>right</code>, <code>top</code> and <code>bottom</code>. The default is <code>right</code>. |- | <code>background</code> | colspan="2" |The background color to use for the label. See [[Web colors]]. The default is no background color, which shows the map image behind the label. |- | colspan="3" |'''Mark''' |- | <code>mark</code> | colspan="2" |The name of an image to display as the mark. The default is [[:File:Red pog.svg|Red pog.svg]] ([[File:Red pog.svg|8px]]). More mark images are available, in particular, at [[Commons:Location markers]] and [[Commons:Category:Map icons]]. |- | <code>marksize</code> | colspan="2" |The size of the mark in [[pixel]]s. The default is&nbsp;8. Do not include <code>px</code>: for example, use <code>marksize=10</code>, not <code>marksize=10px</code>. |- | <code>link</code> | colspan="2" |Specifies a [[Wiki markup|wikilink]] which will be followed if the reader clicks on the mark. Do not include <code>[[]]</code>: for example, use <code>link=Yellowstone National Park</code>, not <code>link=[&#91;Yellowstone National Park&#93;]</code>. Do not use external (https:) links. |- | colspan="3" |'''Coordinates''' |- |<code>lat_deg</code> | rowspan="2" |Usual |Required. The degrees of [[latitude]], using [[decimal degrees]]. Logically, use negative number for southern latitude. |- |<code>lon_deg</code> |Required. The degrees of [[longitude]], using decimal degrees. Logically, use negative number for western longitude. |- |<code>lat_deg</code> | rowspan="8" |Detailed | Required. The degrees of [[latitude]]. The minutes and, probably, the seconds must be specified.<ref group="Note" name="precision" /> |- | <code>lat_min</code> | The minutes of latitude.<ref group=Note name="precision" /> The sign should match that of lat_deg. |- | <code>lat_sec</code> | The seconds of latitude. Usually not necessary.<ref group=Note name="precision" /> The sign should match that of lat_deg. |- | <code>lat_dir</code> | N if north (default value) or S for south of the [[Equator]]. Other values will be disregarded. |- | <code>lon_deg</code> | Required. The degrees of [[longitude]]. The minutes and, probably, the seconds must be specified.<ref group=Note name="precision" /> |- | <code>lon_min</code> | The minutes of longitude.<ref group=Note name="precision" /> The sign should match that of lon_deg. |- | <code>lon_sec</code> | The seconds of longitude. Usually not necessary.<ref group=Note name="precision" /> The sign should match that of lon_deg. |- | <code>lon_dir</code> | E for east (default value) or W for west of the [[IERS Reference Meridian|Prime Meridian]]. Other values will be disregarded. |- | <code>coordinates</code> |Alternative |The coordinates using {{tl|Coord}} template, e.g. <code><nowiki>{{coord|48.067|-2.863}}</nowiki></code>. |} Notes: {{Reflist | group = Note | refs = <ref group=Note name="precision">Appropriate precision should be used. For example, the whole US map, with a 1000{{nbhyph}}pixel width, has a resolution of about 5&nbsp;km/pixel. Only 2 decimal places of precision in decimal degrees format (≈1&nbsp;km), or whole minutes (≈1.7&nbsp;km) in DMS format, are required.</ref> }} == Available maps == Location maps can be found using these sources: :[[Special:PrefixIndex/Module:Location map/data/]] - checked before a map template is searched for. New maps should be created here rather than creating new templates. :[[Template:Location map/List|List of templates]] - 1050 templates were available when the list was generated. :[[:Category:Location map modules]] - templates sorted by category. :[[Special:WhatLinksHere/Template:Location map/Info]] - a search that might help. :[[Special:Prefixindex/Template:Location map]] - another search that might help. == Examples == This example does not designate the <code>caption</code> parameter. It demonstrates the use of the defaults. Notice that the default caption is the page name followed by the map name in parenthesis and that the label position is automatically adjusted if it is too close to an edge. {{Location map+ | Australia | places = {{Location map~ | Australia | label = Sydney | lat_deg = -33.86 | lon_deg = 151.21 }} {{Location map~ | Australia | label = Melbourne | coordinates = {{coord|-37.81|144.96}} }} }} <syntaxhighlight lang="wikitext" style="width:35em;"> {{Location map+ | Australia | places = {{Location map~ | Australia | label = Sydney | lat_deg = -33.86 | lon_deg = 151.21 }} {{Location map~ | Australia | label = Melbourne | coordinates = {{coord|-37.81|144.96}} }} }} </syntaxhighlight> {{clear}} {{anchor|single-line Location map~}}This example uses a designated but empty <code>caption</code>. It demonstrates coordinates using [[decimal degrees]], a&nbsp;10px mark with a link, and {{tl|Location map~}} entries listed in single-line style. {{Location map+ | France | caption = | places = {{Location map~ |France |marksize=10 |lat_deg=48.8567 |lon_deg=2.3508 |position=top |label=Paris |link=Paris }} {{Location map~ |France |marksize= 9 |lat_deg=43.2964 |lon_deg=5.3610 |position=bottom |label=Marseille |link=Marseille}} }} <syntaxhighlight lang="wikitext" style="width:75em;"> {{Location map+ | France | caption = | places = {{Location map~ |France |marksize=10 |lat_deg=48.8567 |lon_deg=2.3508 |position=top |label=Paris |link=Paris }} {{Location map~ |France |marksize= 9 |lat_deg=43.2964 |lon_deg=5.3610 |position=bottom |label=Marseille |link=Marseille}} }} </syntaxhighlight> {{clear}} This example uses <code>caption</code> with an assigned value. It demonstrates coordinates in degree, minute, second format, a relief map, label background color and linked labels. {{Location map+ | USA | width = 300 | caption = Some cites in the United States | relief = 1 | places = {{Location map~ | USA | label = [[New York City|New York]] | position = | background = white | mark = Cyan pog.svg | alt = alt text for New York City | link = New York City | lat_deg = 40 | lat_min = 43 | lat_dir = N | lon_deg = 74 | lon_min = 0 | lon_dir = W }} {{Location map~| USA | label = [[San Francisco]] | position = | background = white | mark = Purple pog.svg | alt = alt text for San Francisco | link = San Francisco | lat_deg = 37 | lat_min = 46 | lat_dir = N | lon_deg = 122 | lon_min = 25 | lon_dir = W }} }} <syntaxhighlight lang="wikitext" style="width:35em;"> {{Location map+ | USA | width = 300 | caption = Some cites in the United States | relief = 1 | places = {{Location map~ | USA | label = [[New York City|New York]] | position = | background = white | mark = Cyan pog.svg | alt = alt text for New York City | link = New York City | lat_deg = 40 | lat_min = 43 | lat_dir = N | lon_deg = 74 | lon_min = 0 | lon_dir = W }} {{Location map~| USA | label = [[San Francisco]] | position = | background = white | mark = Purple pog.svg | alt = alt text for San Francisco | link = San Francisco | lat_deg = 37 | lat_min = 46 | lat_dir = N | lon_deg = 122 | lon_min = 25 | lon_dir = W }} }} </syntaxhighlight> Also see the examples for {{tl|Location map}} and {{tl|Location map many}}, as well as: * [[Template:Location map+/relief]], an example using the ''relief'' parameter * [[Template:Location map+/AlternativeMap]], an example using the ''AlternativeMap'' parameter * [[Template:Location map+/overlay]], an example using the ''overlay_image'' parameter == Template data == {{Collapse top|[[Wikipedia:TemplateData|TemplateData]] documentation used by [[Wikipedia:VisualEditor|VisualEditor]] and other tools}} {{TemplateData header|noheader=1}} <templatedata> { "description": "This template places one or more location marks on a map.", "params": { "1": { "label": "Map name", "type": "string", "required": true, "description": "The name of the map to be used" }, "width": { "label": "Map width", "type": "number", "description": "Determines the width of the map in pixels, overriding any default values. Do not include \"px\", for example: \"300\", not \"300px\"." }, "default_width": { "label": "Default width", "type": "number", "description": "Determines the default width of the map in pixels, intended for use by templates such as infoboxes. The default value is 240. Do not include \"px\". This value will be multiplied by the defaultscale parameter specified in individual map templates, if it exists, in order to achieve an appropriate size for vertical maps." }, "float": { "label": "Position", "type": "string", "description": "Specifies the position of the map on the page. Valid values are left, right, center and none. The default is right." }, "border": { "label": "Frame style", "type": "string", "description": "Specifies the color of the map frame when the parameter caption is used. If set to none, no border will be generated. ", "suggestedvalues": [ "none", "infobox", "LightGray" ] }, "caption": { "label": "Map caption", "type": "string", "description": "The text of a caption to be displayed below the map. If caption is defined but is not assigned a value, the map will not be framed and no caption will be displayed. If caption is not defined, the map will not be framed and a default caption will be generated." }, "alt": { "label": "Alt text", "type": "string", "description": "Alt text for map; used by screen readers." }, "relief": { "label": "Alternative map from template", "type": "string", "description": "Any non-blank value (1, yes, etc.) will cause the template to display the map specified in the map definition template as image1, which is usually a relief map. If more than one relief map is defined, \"2\" will display \"image2\", and so on." }, "AlternativeMap": { "label": "Alternative map not from template", "type": "string", "description": "Allows the use of an alternative map. The image must have the same edge coordinates as the map template." }, "overlay_image": { "label": "Overlay image", "type": "string", "description": "Allows an overlay to be superimposed on the map. This parameter is seldom used." }, "places": { "label": "Place markers", "type": "string", "required": true, "description": "Specifies one or more place markers using Location map~." } } } </templatedata> {{Collapse bottom}} == See also == * [[Wikipedia:Maps for Wikipedia]] - A list of mapping tools available on Wikipedia * {{tl|Location map}} - For displaying one mark using latitude and longitude. * {{tl|Location map many}} - For displaying multiple marks using latitude and longitude. * [[:Commons:Category:Map pointers]] - List of the many Wikimedia Commons pointer symbols. * {{tl|OSM Location map}} - OpenStreetMap map with an "interactive fullscreen" version. Allows for labels, numbered dots, a heading, caption, mini-locator map and overlays. * {{tl|Overlay}} - Allows image numbered, textual number, or color tag overlays to be positioned over an image to indicate particular features in the image. * {{tl|CSS crop}} - Wrapper template that allows cropping the map. <includeonly>{{Sandbox other| | <!--Categories below this line, please; interwikis at Wikidata--> [[Category:Location map templates| ]] [[Category:Graphics templates]] }}</includeonly> 6k1rflp1vykn0960qajs5wy3wkfnpwp Tempilet:Kbd/styles.css 10 1305 10621 2024-08-08T18:11:36Z en>Jon (WMF) 0 Fixes [[phab:T369874]]. Please see talk page and do not revert without discussion. See also [[meta:User:Jon_(WMF)/Edit_for_dark_mode_support]] 10621 sanitized-css text/css /* {{pp-template}} */ .mw-tmpl-kbd { background: #EEE; color: var(--color-base); } @media screen { html.skin-theme-clientpref-night .mw-tmpl-kbd { background: #171a1d; } } @media screen and ( prefers-color-scheme: dark ) { html.skin-theme-clientpref-os .mw-tmpl-kbd { background: #171a1d; } } dxlcnl1iygay3brsqqnplmpgishklaz 10622 10621 2026-08-25T23:33:45Z RAPTOR7762 18 1 revision imported from [[:en:Template:Kbd/styles.css]] 10621 sanitized-css text/css /* {{pp-template}} */ .mw-tmpl-kbd { background: #EEE; color: var(--color-base); } @media screen { html.skin-theme-clientpref-night .mw-tmpl-kbd { background: #171a1d; } } @media screen and ( prefers-color-scheme: dark ) { html.skin-theme-clientpref-os .mw-tmpl-kbd { background: #171a1d; } } dxlcnl1iygay3brsqqnplmpgishklaz Tempilet:Template link interwiki 10 1306 10623 2026-02-26T19:40:12Z en>Pppery 0 Close 10623 wikitext text/x-wiki <!-- Subst of {{Tl2}} follows --><code><nowiki>{{</nowiki>[[:{{ safesubst:<noinclude/>#if: {{{sister|}}} | {{{sister}}}: }}{{ safesubst:<noinclude/>#if: {{{lang|}}} | {{{lang}}}: }}{{ safesubst:<noinclude/>ns:Template }}:{{{1}}}|{{{1}}}]]{{ safesubst:<noinclude/>#if: {{{2|}}} | &#124;{{{2}}} }}{{ safesubst:<noinclude/>#if: {{{3|}}} | &#124;{{{3}}} }}{{ safesubst:<noinclude/>#if: {{{4|}}} | &#124;{{{4}}} }}{{ safesubst:<noinclude/>#if: {{{5|}}} | &#124;{{{5}}} }}{{ safesubst:<noinclude/>#if: {{{6|}}} | &#124;{{{6}}} }}{{ safesubst:<noinclude/>#if: {{{7|}}} | &#124;{{{7}}} }}{{ safesubst:<noinclude/>#if: {{{8|}}} | &#124;{{{8}}} }}{{ safesubst:<noinclude/>#if: {{{9|}}} | &#124;{{{9}}} }}<nowiki>}}</nowiki></code><!-- Subst of {{Tl2}} ends --><noinclude> <!-- Add categories to the /doc subpage; interwikis go to Wikidata, thank you! --> {{documentation}} </noinclude> pvl9s5nv2clt2oy6mk5bjxv36zincca 10624 10623 2026-08-25T23:33:45Z RAPTOR7762 18 1 revision imported from [[:en:Template:Template_link_interwiki]] 10623 wikitext text/x-wiki <!-- Subst of {{Tl2}} follows --><code><nowiki>{{</nowiki>[[:{{ safesubst:<noinclude/>#if: {{{sister|}}} | {{{sister}}}: }}{{ safesubst:<noinclude/>#if: {{{lang|}}} | {{{lang}}}: }}{{ safesubst:<noinclude/>ns:Template }}:{{{1}}}|{{{1}}}]]{{ safesubst:<noinclude/>#if: {{{2|}}} | &#124;{{{2}}} }}{{ safesubst:<noinclude/>#if: {{{3|}}} | &#124;{{{3}}} }}{{ safesubst:<noinclude/>#if: {{{4|}}} | &#124;{{{4}}} }}{{ safesubst:<noinclude/>#if: {{{5|}}} | &#124;{{{5}}} }}{{ safesubst:<noinclude/>#if: {{{6|}}} | &#124;{{{6}}} }}{{ safesubst:<noinclude/>#if: {{{7|}}} | &#124;{{{7}}} }}{{ safesubst:<noinclude/>#if: {{{8|}}} | &#124;{{{8}}} }}{{ safesubst:<noinclude/>#if: {{{9|}}} | &#124;{{{9}}} }}<nowiki>}}</nowiki></code><!-- Subst of {{Tl2}} ends --><noinclude> <!-- Add categories to the /doc subpage; interwikis go to Wikidata, thank you! --> {{documentation}} </noinclude> pvl9s5nv2clt2oy6mk5bjxv36zincca Tempilet:Igen 10 1307 10625 2021-07-10T16:41:19Z commons>CptViraj 0 Protected "[[Template:Igen]]": [[Commons:Protection policy|Widely used template]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite)) 10625 wikitext text/x-wiki #REDIRECT [[Template:Image generation]] [[Category:SVG created with ... templates|<!-- intentional --> <!-- space -->{{PAGENAME}}]] f15hn7uhl1b1b59qgin2qo8a9yy0ju7 10626 10625 2026-08-25T23:38:03Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Igen]] 10625 wikitext text/x-wiki #REDIRECT [[Template:Image generation]] [[Category:SVG created with ... templates|<!-- intentional --> <!-- space -->{{PAGENAME}}]] f15hn7uhl1b1b59qgin2qo8a9yy0ju7 Tempilet:Image generation 10 1308 10627 2024-07-24T03:58:41Z commons>Shizhao 0 dark mode fix 10627 wikitext text/x-wiki <onlyinclude>{{#if:{{{C|{{{Cl|}}}}}}|{{{T0|{{{t0|}}}}}}{{Tincture|{{{C|{{{Cl}}}}}}|tc={{{Ct|}}}|cat={{#switch:{{{Cc|&#06;}}}|&#06;=|n|-|=-|{{{Cc}}}}}<!-- -->|+={{#if:{{{Cl|{{{cl|}}}}}}|{{{Cl|{{{cl|}}}}}}|<!-- default is "+" -->{{#switch:{{{C+|{{{c+|&#06;}}}}}}|&#06;={{#switch:{{{Cf|{{{cf|&#06;}}}}}}|n|-|=|+}}|+=+|n|-|=|{{{C+|{{{c+}}}}}}}}}}<!-- -->|ss={{#switch:{{{Css|{{{ss|&#06;}}}}}}|&#06;|=0|d9|D9=Δ9|{{{Css|{{{ss}}}}}}}}|s={{{s|{{{w|}}}}}}|k={{{k|}}}}}}}<!-- -->{{#if:{{{cb|{{{Cb|}}}}}}|{{#invoke:Igenmod|split|{{#switch:{{padleft:|1|{{{cb|{{{Cb|}}}}}}}}|+|e=|+{{#ifeq:{{{s}}}|f<!-- -->|=Flag colors}}{{#ifeq:{{padleft:|1|{{{cb|{{{Cb|}}}}}}}}|#|//<!-- -->|{{#ifeq:{{padleft:|2|{{{cb|{{{Cb|}}}}}}}}|/#|/}}}}}}{{{cb|{{{Cb|}}}}}}|Igen/cbx}}{{{cbx|}}}}}<!-- like "Legend" ==start of template== -->{{{{#if:{{{fn|}}}|Information field|{{#switch:+|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=Information field|Nil2}}}}<!-- -->|1={{#switch:{{{fn|}}}<!-- -->|+|={{#invoke:Igenmod|exttext}}{{I18n/COA|development}}<!-- "+", " " -->|-=<!-- -->|{{{fn}}}}}<!-- -->|2={{#if:{{{T1|}}}|{{clr}}{{{T1}}}|{{{t1|}}}}}<!-- --><div style="vertical-align:middle"><!-- -->{{{p|{{{P|}}}}}}{{#if:{{{P|}}}|{{clr}}}}<!-- «#ifeq:{{{10}}}» SimplSVG when: either 10=S/S&/S*/S-, 1=S-/T-, or (sb= and sa=) -->{{#if:{{#switch:{{{10}}}|S|S&|S-=1}}{{#ifeq:{{{1}}}|T-|1}}{{#if:{{{sb|}}}|{{#if:{{{sa|}}}|1}}}}<!-- -->{{#switch:S |{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{11}}}|{{{12}}}|{{{13}}}=1}}<!-- 1=T -->{{#switch:S&|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{11}}}|{{{12}}}|{{{13}}}=1}}<!-- 1=T -->{{#switch:S*|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{11}}}|{{{12}}}|{{{13}}}=}}<!-- ??? -->{{#switch:S-|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{11}}}|{{{12}}}|{{{13}}}=1}}<!-- T1 -->|{{SimplSVG|{{#ifeq:{{{1}}}|T-|T|{{{1|}}}}}|{{{sb|{{{2|}}}}}}|{{{sa|{{{3|}}}}}}<!-- (par#4 can be substituted by "s") T4 -->|{{#switch:{{{4}}}|a|b|bi|c|ch|d|e|em|f|g|h|i|jc|je|k|l|m|o|p|r|s|t|u|v|y|7|♫|α|?={{{4}}}<!-- valid topic ? -->|#default={{#if:{{{s|}}}|{{{s}}}}}}}<!-- T5 -->|{{{5|}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|{{{9|}}}<!-- T 5...9 T10-->|{{#switch:S&|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{13}}}=&<!-- + rd -->|{{#switch:S*|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{13}}}=}}}}<!-- ??? -->|style=<nowiki/><!-- 10=+ -->|topic={{#if:{{{s:|}}}|{{lcfirst:{{{s:}}}}}<!-- -->|{{#if:{{{su:|}}}|{{ucfirst:{{{su:}}}}}<!-- -->|{{#if:{{{topic|{{{what|{{{w|{{{vsub|{{{Vs|{{{s|}}}}}}}}}}}}}}}}}}<!-- -->|{{{topic|{{{what|{{{w|{{{vsub|{{{Vs|{{{s}}}}}}}}}}}}}}}}}}}}}}}}<!-- -->|ni={{{←|}}}{{{←s|}}}{{{←t|}}}|ns={{{ns|}}}|pu={{{pu|}}}<!-- ni=nomsg ns=nosub pu=previous user -->|vs={{#switch:{{{vs|{{{vstyle|&#06;}}}}}}|&#06;|none=-|=fl|{{{vs|{{{vstyle}}}}}}}}<!-- n=n, -=- -->|sub={{#if:{{{sub-|}}}|&#45;{{{sub-}}}{{{sd|}}}<!-- complicated: -->|{{#switch:{{{sub|&#06;}}}<!-- -->|none|n=|-=-|so=&#45;stripes only<!-- -->|&#06;|={{#switch:S-|{{{10}}}|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{11}}}|{{{12}}}|{{{13}}}|{{{14}}}=-|{{#ifeq:{{{1}}}|T-|-}}<!-- -->|#default={{#switch:{{{4}}}|jc=-Japanese crests|je=-Japanese emblems<!-- -->|{{#invoke:Igenmod|subst|{{{sub|}}}}}}}}}}}}}<!-- -->|vsub={{#switch:{{{cc|y}}}|n|-|=|<!-- when "cc=", "cc-n", "cc=-" : not ' code' for SimplSVG/Text editor -->{{#if:{{{c1|{{{code|{{{source|{{{script|{{{c2|{{{c3|{{{c7|}}}}}}}}}}}}}}}}}}}}}|_code}}}}<!-- text editor -->{{#if:{{{s:| {{{su:|}}}}}}|&#58;{{ucfirst:{{Igen/sub|{{{s:|{{{su:}}}}}}}}s}}<!-- -->|{{#if:{{{Vs|}}}|&nbsp;{{{Vs|}}}|{{#if:{{{vsub|}}}|{{#invoke:Igenmod|subst|{{{vsub}}}{{{sd|}}}}}}}}}}}<!-- -->|sdif={{{sd|}}}|key={{{k|}}}<!-- -->|user={{#if:{{{U|}}}|{{U|{{{U}}}}}|{{{u|{{{user|}}}}}}}}<!-- |code ={{{code|{{{c1|}}}}}} {{#if:{{{c1|}}}{{{c2|}}}{{{code|}}}|{{Igen/cat|Valid SVG created with Text Editor code}}}}-->}}<!-- «not #ifeq:{{{10}}} → SimplSVG » -->|{{{{Igen/cwt|{{{1|}}}|{{{e|{{{err|{{{2}}}}}}}}}|{{{n|{{{N|{{{name|}}}}}}}}}}}<!-- 🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥 -->|IMPORTANT={{#switch:{{lc:{{{1}}}}}|im|ims=<!-- -->{{#if:{{{U|{{{u|{{{user|{{{by|}}}}}}}}}}}}|no|yes}}}}<!-- all the processing would be done by "Inkscape" -->|Optimized={{#switch:{{lc:{{{1}}}}}|iz|izs=yes}}<!-- {{#if:{{{U|{{{u|{{{user|{{{by|}}}}}}}}}}}}||yes}}}} all the processing would be done by "Inkscape" -->{{#if:{{{U|{{{u|{{{user|{{{by|}}}}}}}}}}}}|{{#switch:{{lc:{{{1}}}}}|im|ims=<!-- -->…[[Help:Inkscape#Inkscape_SVG_vs._Plain_SVG|important]]}}}}<!-- -->|{{#if:{{{U|}}}|{{U|{{{U}}}}}|{{#if:{{{u|{{{user|}}}}}}|{{{u|{{{user|}}}}}}|<!-- parm (1) -->{{#if:{{{by|}}}|{{#switch:{{padleft:|1|{{{by}}}}}|&#91;|&#123;={{{by}}}|{{u|{{{by}}}}}}}}}}}}}<!-- -->|{{#switch:{{{2|}}}|v=v|/|s=/|t=t|#default={{#switch:{{{1|}}}|/=/<!-- "n" only checked: -->|#default={{#ifeq:{{#invoke:Igenmod|extcode}}|s|v|n}}}}}}<!-- parm (2) -->|err={{#switch:{{{err|{{{e|&#06;}}}}}}|=0|-=|&#06;={{#ifeq:{{{2}}}|-1|-1|{{Igen/par|{{{2|}}}|2}}}}|{{{err|{{{e|}}}}}}}}<!-- -->|name={{#if:{{{N|}}}|&nbsp;{{{N}}}|{{{n|{{{name|{{#if:{{{cw|}}}|{{W|{{{cw}}}}}}}}}}}}}}}<!-- -->|more={{{lnk|}}} {{#switch:{{lc:{{{1}}}}}<!-- test -->|ia|ai={{#if:{{{m|{{{M||{{{more|}}}}}}}}}|{{{m|{{{more|{{#if:{{{M|}}}|&nbsp;{{{M}}}}}}}}}}}|, }}<!-- -->|i|im|is|ims={{#if:{{{m|{{{M||{{{more|}}}}}}}}}|{{{m|{{{more|{{#if:{{{M|}}}|&nbsp;{{{M}}}}}}}}}}}|. }}<!-- corr Stang's chng -->|#default={{#if:{{#switch:&|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->{{{&|{{{&&|{{{&k|{{{&m|}}}}}}}}}}}}|{{#if:{{{m|{{{M||{{{more|}}}}}}}}}|{{{m|{{{more|{{#if:{{{M|}}}|&nbsp;{{{M}}}}}}}}}}}|, }}}}<!-- -->|{{{m|{{{more|{{#if:{{{M|}}}|&nbsp;{{{M}}}|}}}}}}}}}}<!-- |. -->|source={{{source|}}}<!-- -->|13={{#ifeq:{{lc:{{{1}}}}}|t|{{{M|{{{m}}}}}}}}<!-- test parm (13) "m" [ don´t set "logo" ] -->|code ={{{code |{{{c1|}}}}}}<!-- -->|subc={{#switch:{{{cc|y}}}|n|-|=|<!-- when "cc=", "cc-n", "cc=-" : not ' code' (for sll except SimplSVG & Inkscape-hand) -->{{#ifeq:{{{1}}}|H||{{#if:{{{c1|{{{code|{{{source|{{{script|{{{c2|{{{c3|{{{c7|}}}}}}}}}}}}}}}}}}}}}|_code}}}}}}<!-- -->|sub={{#switch:{{{sub|&#06;}}}<!-- -->|n|-={{#if:{{{sd|}}}|{{{sd}}}}}<!-- "-" when coded "n"/"-" -->|={{#if:{{{sd|}}}|{{{sd}}}}}-<!-- empty 'sub=' gives also "-" [[Category:Commons:Maint:Igen:esub]] -->|&#06;|∅={{#if:{{{S|}}}|&nbsp;{{Igen/sub|{{{S}}}}}{{{sd|}}}<!-- when missing or ∅: -->|{{#if:{{{sub-|}}}|&#45;{{{sub-}}}{{{sd|}}}<!-- -->|{{#if:{{{sub:|}}}|&#58;{{{sub:}}}{{{sd|}}}<!-- -->|{{#if:{{{Sub:|}}}|&#58;&#32;{{{Sub:}}}{{{sd|}}}<!-- -->|{{#if:{{{s:|}}}|&#58;{{ucfirst:{{Igen/sub|{{{s:}}}}}s<!-- {{#ifeq:{{{2}}}|n||{{#switch:{{{s}}}|ce|ee|eh=|{{{sd|}}}}}}} -->{{{sd|}}}}}<!-- -->|{{#if:{{{S:|}}}|&#58;&#32;{{ucfirst:{{Igen/sub|{{{S:}}}}}s{{{sd|}}}}}<!-- -->|{{#if:{{{su:|}}}|&#58;{{ucfirst:{{Igen/sub|{{{su:}}}}}s{{{sd|}}}}}<!-- -->|{{#if:{{{s-|}}}|&#45;{{ucfirst:{{Igen/sub|{{{s-}}}}}s{{{sd|}}}}}<!-- -->|{{#if:{{{s|}}}|{{Igen/sub|{{{s}}}|t={{{1}}}|u={{{u|}}}}}<!-- -->{{#ifeq:{{{2}}}|n|{{{sd|}}}|{{#switch:{{{s}}}|ce|ee|eh=|{{{sd|}}}}}}}<!-- no sd when ce,eh but csd -->|{{#switch:{{lc:{{{1}}}}}|a$|i$|=-Commonist}}<!-- -->|{{#if:{{{sd|}}}|{{{sd}}}}}}}}}}}}}}}}}}}}}}}<!-- -->|#default={{#invoke:Igenmod|subst|{{{sub}}}}}{{#if:{{{sd|}}}|{{{sd}}}}}}}<!-- -->|cat={{#switch:{{{cat|{{{c|{{{category|&#06;}}}}}}}}}|none|n|-|=-<!-- -->|&#06;={{#if:{{{cw|}}}|Created with {{{cw}}}}}|∅=|{{{cat|{{{c|{{{category|}}}}}}}}}}}<!-- -->|cni={{#switch:{{{cni|&#06;}}}|n|-=-|&#06;=|{{{cni}}}}}<!-- ("-"; empty; cat) -->|c_text={{{ct|{{{c_t|{{{c_text|}}}}}}}}}<!-- -->|key={{#switch:{{{k|&#06;}}}|n|-=-|=~|{{{key|{{{k|{{#if:{{{K|}}}|&nbsp;{{{K}}}}}}}}}}}}}|lang={{{lang|}}}<!-- -->|vsub={{#switch:{{{cc|y}}}|n|-|=|<!-- when "cc=", "cc-n", "cc=-" : not ' code' for Inkscape-hand/Text editor -->{{#ifeq:{{{1}}}|H|{{#if:{{{c1|{{{code|{{{source|{{{script|{{{c2|{{{c3|{{{c7|}}}}}}}}}}}}}}}}}}}}}|_code}}}}}}<!-- -->{{#switch:{{{vsub|{{{Vs|&#06;}}}}}}|&#06;=|n|-|=|{{#if:{{{Vs|}}}|&nbsp;}}{{Igen/sub|{{{vsub|{{{Vs|}}}}}}}}}}<!-- V4-->|vstyle={{{vs|{{{vstyle|fl}}}}}}<!-- n=n V5-->|vwidth={{{vw|{{{vwidth|}}}}}}<!-- width V6-->|vtxt={{#if:{{{V|}}}|&nbsp;{{{V}}}|{{{vt|{{{vtxt|{{#switch:{{{v|&#06;}}}|n|-|=-|&#06;=}}}}}}}}}}<!-- V7-->|vo={{{vo|{{{opt|{{{vopt|{{{o|{{#if:{{#switch:>|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->{{{>|{{{>c|}}}}}}|>}}}}}}}}}}}}}}<!-- &#x3E; V8 = topic V9-->|vcat={{{vc|{{{vcat|}}}}}}<!-- ¿HandSVG? -->|vc={{#switch:{{{>c|&#06;}}}|n|-|=-|{{{>c}}}}}<!-- cat:Large SVG files -->|topic={{#switch:{{{topic|{{{what|{{{w|&#06;}}}}}}}}}<!-- "topic" for text diff with (Igen/top) in (created with/) -->|n|-|=-<!-- -->|&#06;={{#switch:{{{s|&#06;}}}<!-- -->|&#06;|n|-|={{#if:{{{su:|}}}|{{ucfirst:{{{su:}}}}}<!-- -->|{{{{#ifeq:{{{sc|}}}|u|u|l}}cfirst:{{{s:|{{{s-|{{{S:|{{#if:{{{sub:|}}}|''{{{sub:}}}''}}}}}}}}}}}}}}}<!-- -->|{{{s|}}}}}<!-- -->|{{#switch:{{#if:{{{topic|}}}|1|{{#if:{{{what|}}}|2|{{#if:{{{w|}}}|3}}}}}}<!-- unnested -->|1={{{topic}}}<!-- -->|2={{{what}}}<!-- -->|3={{{w}}}<!-- -->}}}}<!-- -->|other={{lc:{{padleft:|1|{{{1}}}}}}}<!-- to differ between "O" and "U" -->|item={{{item|{{{i|{{#if:{{{I|}}}|{{w{{{I}}}}}}}}}}}}}<!-- -->|type={{{type|}}}|par1={{{par1|}}}|par2={{{par2|}}}|mode={{{mode|}}}<!-- -->|style=float:left;vertical-align:middle<!-- -->|logo={{{logo|{{#if:{{{cw|}}}|{{{cw}}} logo.svg}}}}}<!-- {{{logo|}}} test -->}}}}<!-- «end #ifeq:{{{10}}}» into the same line: -->{{#ifeq:{{{1}}}|IA|{{Igen/amp|I|A|||topic={{{&s|{{{s|{{{w|}}}}}}}}}}}<!-- -->|{{#if:{{{&|{{{&&|{{{&k|{{{&m|}}}}}}}}}}}}<!-- any one of these triggers -->{{#switch:{{{&c|↓}}}|↓=|1}}{{#switch:{{{&l|↓}}}|↓=|1}}{{#switch:{{{&s|↓}}}|↓=|1}}<!-- if defined, empty or with value -->{{#switch:&|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->|{{Igen/amp|1={{#switch:Q|{{{&|Q}}}|{{padleft:|1|{{uc:{{{&}}}}}}}=QGIS|{{{&}}}}}<!-- -->|2={{{&&|{{#switch:{{lc:{{{1}}}}}|a|adobe|illustrator|adobe illustrator|adobe illustrator$|a$|av|ia=Adobe<!-- -->|i|inkscape|ic|ii|im|io|is|iz|i$|ai=Inkscape|?}}|}}}<!-- -->|3={{{1|}}}<!-- -->|&c={{#switch:{{{&c|&#06;}}}|&#06;=|n|-|=-|{{{&c}}}}}<!-- ?-? -->|&l={{#switch:{{{&l|&#06;}}}|&#06;=|n|-|=-|{{{&l}}}}}<!-- -->|&s={{#switch:{{{&s|&#06;}}}|&#06;=|n|-|=-|{{{&s}}}}}<!-- -->|&k={{{&k|}}} }}}}}}<!-- -->{{#switch:S&|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}<!-- S&: Simpl + rd -->|{{{10}}}|{{{11}}}|{{{12}}}|{{{13}}}|{{{35}}}=<!-- {{Igen/sni|&}} --><!-- 35 -->|{{#switch:S*|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}<!-- -->|{{{10}}}|{{{11}}}|{{{12}}}|{{{13}}}|{{{35}}}={{Igen/sni}}<!-- -->|{{#if:{{#switch:{{{rd|-}}}|-=|1}}{{#switch:rd|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{35}}}=1}}|{{Redrawn with Text Editor|{{{rd|}}}}}}}}}}}<!--35 -->{{#ifeq:{{lc:{{{1}}}}}|ic|{{Igen/amp|svgc|I|&c={{{&c|-}}}|topic={{{&s|{{{s|{{{w|}}}}}}}}}}} }}<!-- Tool "IC" -->{{#ifeq:{{lc:{{{1}}}}}|io|{{Igen/amp|svgo|I|&c={{{&c|-}}}|topic={{{&s|{{{s|{{{w|}}}}}}}}}}} }}<!-- Tool "IO" -->{{#ifeq:{{lc:{{{1}}}}}|is|{{Igen/amp|sopt|I|&c={{{&c|-}}}|topic={{{&s|{{{s|{{{w|}}}}}}}}}}} }}<!-- Tool "IS" others need the categorizing: -->{{#ifeq:{{lc:{{{1}}}}}|ii|{{Igen/amp|heraldicon|I|&c=Created with Heraldicon|&k=ZZZ|topic={{{&s|{{{s|{{{w|}}}}}}}}}}} }}<!-- if also same line required: -->{{#if:{{{1c|}}}|{{1color|{{{1cc|}}}|{{{1c}}}}}}}<!-- -->{{#switch:{{{%}}}|vv|vs|vf|f={{Igen/emb|{{{%}}}|f<!-- -->|s={{Igen/csf|{{{1}}}|{{{w|{{{s|}}}}}}}}|q={{{4|}}}|z={{{10|}}}}}<!-- -->|{{#switch:%f|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}={{Igen/emb|vf|f<!-- -->|s={{Igen/csf|{{{1}}}|{{{w|{{{s|}}}}}}}}|q={{{4|}}}|z={{{10|}}}}}}}}}<!-- -->{{#switch:{{{<}}}|vf|vl|vn|vs|vv={{Igen/ptx|f|sub=vv|v={{{<v|{{#ifeq:{{{s}}}|v|v}}}}}<!-- -->|s={{Igen/csf|{{{1}}}|{{{w|{{{s|}}}}}}}}|s2={{{<|}}}|{{#ifeq:{{{<}}}|vl|l}}}}}}<!-- -->{{#if:{{#switch:<|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->{{#switch:pathtext|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->|{{#switch:tl|{{{s}}}|{{{w}}}={{Igen/ptx|f|sub=vv|s=tl|l}}}}}}<!-- Text Logo -->{{#switch:%C|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{10}}}<!-- -->|{{{11}}}|{{{12}}}={{Igen/swv|s={{{s|{{{w|}}}}}}}}}}<!-- switch-controlled variations -->{{#if:{{{T2|}}}|{{clr}}{{{T2}}}|{{{t2|}}}}}<!-- -->{{#if:{{#switch:{{lc:{{{1}}}}}|a$|i$=1}}<!-- and Commonist (parameters "$ " and "c ") -->{{#switch:$|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- «$» Commonist -->{{#if:{{{$m|{{{cm|}}}}}}{{{$u|{{{cu|}}}}}}{{{$w|}}}|1}}<!-- -->{{#switch:{{{$c|↓<!-- {{{cc|}}} -->}}}|↓=|1}}{{#switch:{{{$f|{{{cf|↓}}}}}}|↓=|1}}<!-- if defined, empty or with value -->{{#switch:{{{$l|{{{cl|↓}}}}}}|↓=|1}}{{#switch:{{{$s|{{{cs|↓}}}}}}|↓=|1}}<!-- if defined, empty or with value -->|{{#switch:{{{$f|{{{cf|&#06;}}}}}}|&#06;|none|n|-|=|br=<br>|clr={{clr}}|{{{$f|{{{cf|}}}}}}}}<!-- linefeed before -->{{Commonist|{{{$u|{{{cu|}}}}}}|more={{{$m|{{{cm|}}}}}}<!-- -->|logo={{#switch:{{{$l|{{{cl|&#06;}}}}}}|&#06;=Commonist.svg|none|n|-|=-|{{{$l|{{{cl|}}}}}}}}<!-- -->|category={{#switch:{{{$c|&#06;<!-- {{{cc|}}} -->}}}|&#06;=|none|n|-|=-|{{{$c|<!-- {{{cc|}}} -->}}}}}<!-- -->|sub={{#switch:{{{$s|{{{cs|&#06;}}}}}}|&#06;|none|n|-|=|{{#invoke:Igenmod|subst|{{{$s|{{{cs|}}}}}}}}}}<!-- -->|user={{{U|}}}<!-- for possible subcategorizing -->|topic={{#if:{{{$w|{{{topic|{{{what|{{{w|{{{s|}}}}}}}}}}}}}}}<!-- -->|{{{$w|{{{topic|{{{what|{{{w|{{{s}}}}}}}}}}}}}}}}}<!-- -->|size={{#if:{{{>|}}}{{#switch:><!-- -->|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|big}}<!-- -->|err={{#if:{{{e|{{{err|}}}}}}|{{{e|{{{err}}}}}}<!-- Commonist with err ? -->|{{#ifeq:{{{2}}}|-1|-1|{{Igen/par|{{{2|}}}|3}}}}}}}}}}<!-- -->{{#if:{{{T3|}}}|{{clr}}{{{T3}}}|{{{t3|}}}}}<!-- -->{{#if:{{{%s|}}}{{#switch:%s|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}{{#ifeq:{{{%}}}|s|1}}<!-- -->|{{#if:{{{tr|}}}||{{Igen/emb|switch=s|1={{{%s|s}}}|s={{{w|{{{s|}}}}}}|v={{{%v|}}}|q={{{4|}}}|z={{{10|}}}}}}}<!-- -->|{{#if:{{{%a|}}}|{{Igen/emb|switch=S|1={{{%a|s}}}|s={{{w|{{{s|}}}}}}|v={{{%v|}}}|q={{{4|}}}|z={{{10|}}}}}<!-- -->|{{#if:{{{%S|}}}{{#switch:%S|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->|{{Igen/emb|switch=S|1={{{%S|s}}}|s={{{w|{{{s|}}}}}}|v={{{%v|}}}|q={{{4|}}}|z={{{10|}}}}}<!-- -->|{{#if:{{{%|}}}{{#switch:%|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->{{#switch:embedded|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->|{{Igen/emb|1={{{%|}}}|2=s|v={{#ifeq:{{{1}}}|Wpdc|n|{{#switch:{{{%}}}|r|v|V|i|n|-={{{%}}}}}}}<!-- -->|s={{Igen/csf|{{{1}}}|{{{w|{{{s|}}}}}}}}|q={{{4|}}}|z={{{10|}}}|t={{{1|}}}}}<!-- -->|{{#if:{{{%v|}}}{{#switch:%v|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->|{{Igen/emb|s={{{w|{{{s|}}}}}}|v={{{%v|v}}}|q={{{4|}}}|z={{{10|}}}}}<!-- -->|{{#if:{{{%i|}}}{{#switch:%i|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->|{{Igen/emb|i|v={{{%i|i}}}|s={{{w|{{{s|}}}}}}|q={{{4|}}}|z={{{10|}}}}}<!-- -->|{{#if:{{{%I|}}}{{#switch:%I|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->|{{Igen/emb|i|v={{{%I|i}}}|s={{{w|{{{s|}}}}}}|q={{{4|}}}|z={{{10|}}}}}<!-- -->{{Convert to multilang}}<!-- -->|{{#if:{{#switch:%n|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->{{#ifeq:{{{1}}}|Wpdc|1}}|{{Igen/emb|s={{Igen/csf|{{{1}}}|{{{w|{{{s|}}}}}}}}|v=n|q={{{4|}}}|z={{{10|}}}|t={{{1|}}}}}<!-- -->|{{#switch:%r|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}={{Igen/emb<!-- -->|s={{{w|{{{s|}}}}}}|v={{{%r|r}}}|q={{{4|}}}|z={{{10|}}}}}<!-- -->|{{#switch:%m|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}={{Igen/emb<!-- -->|s={{{w|{{{s|}}}}}}|v={{{%m|r}}}|q={{{4|}}}|z={{{10|}}}}}{{Convert to multilang|{{Igen/top|{{{w|{{{s|}}}}}}}}}}<!-- -->|{{#switch:%M|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}={{Igen/emb<!-- -->|s={{{w|{{{s|}}}}}}|v={{{%M|v}}}|q={{{4|}}}|z={{{10|}}}}}{{Convert to multilang|{{Igen/top|{{{w|{{{s|}}}}}}}}}}<!-- -->|{{#switch:%t|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}={{Igen/emb<!-- -->|s={{{w|{{{s|}}}}}}|v={{{%t|t}}}|q={{{4|}}}|z={{{10|}}}}}<!-- -->|{{#switch:%u|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}={{Igen/emb<!-- -->|s={{{w|{{{s|}}}}}}|v={{{%u|u}}}|q={{{4|}}}|z={{{10|}}}}} }}}}}}}} }}}}}}}}}}<!-- -->|{{#if:{{{%V|}}}|{{Igen/emb|s={{{w|{{{s|}}}}}}|v=&nbsp;{{{%V}}}|q={{{4|}}}|z={{{10|}}}}}}}}}}}}}}}<!-- /// -->{{#switch:%a|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{15}}}={{Add languages}}}}<!-- 15= -->{{#switch:%w|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{17}}}={{Invtext<!-- 17 -->|s={{{s|{{{w|}}}}}}|e={{#switch:{{{err|{{{e|&#06;}}}}}}|=0|-=|&#06;={{#if:{{Igen/par|{{{2|}}}<!-- -->|{{Igen/par|{{{2|}}}}}|0}}}}}}|3={{{%sc|{{{u|}}}}}}}}}}<!-- -->{{#switch:S+|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}<!-- -->|{{{10}}}|{{{11}}}|{{{12}}}|{{{13}}}|{{{35}}}={{Igen/sni|1={{{%p|+}}}}}}}<!-- after % -->{{#if:{{{T4|}}}|{{clr}}{{{T4}}}|{{{t4|}}}}}<!-- Graphic Lab: parameter "gs" (nl, sx) defaulted with "nl" -->{{#if:{{{glc|}}}|{{Igen/glc|{{{glc|}}}|{{{err|{{{e|{{{2|}}}}}}}}}|3={{{lang|}}}|4={{{nat|}}}<!-- Graphic Lab CoA -->|s={{{s|{{{w|}}}}}}|gc={{{gc|}}}|sd={{{sd|}}}|gt={{{1}}}|U={{{U|}}}|u={{{u|}}}|vs={{{vs|}}}<!-- -->|sub={{{sub|}}}|cat={{{cat2|}}}|gk={{{gk|{{{k|}}}}}}|gs={{{gs|nl}}}|gr={{{gr|}}}|gt2={{{gt|}}}}}<!-- while e.g. "g=de" or "gd" is for Graphic Lab_de, "glc=.." is for all the indiv. Graphic CoA Labs -->|{{#if:{{{gl|{{{g|}}}}}}|{{Igen/lab|{{{gl|{{{g|}}}}}}|{{#if:{{{gl|}}}|gl|g}}|s={{{s|{{{w|}}}}}}<!-- -->|k={{{gk|{{{k|}}}}}}|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}|6={{{gt|}}}}}}}<!-- -->{{#switch:gl|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=<!-- -->{{Igen/lab|en|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!-- -->{{#if:{{{gc|}}}{{#switch:gc|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!-- -->{{Igen/lab|Commons|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gc|{{{u|}}}}}}<!-- -->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!-- -->{{#if:{{{gb|}}}{{#switch:gb|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!-- -->{{Igen/lab|bn|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gb|{{{u|}}}}}}<!-- -->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!-- -->{{#if:{{{gB|}}}{{#switch:gB|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!-- -->{{Igen/lab|eu|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gB|{{{u|}}}}}}<!-- -->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!-- -->{{#if:{{{gd|}}}{{#switch:gd|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!-- -->{{Igen/lab|de|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gd|{{{u|}}}}}}<!-- -->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}|6={{{lc|}}}}}}}<!-- -->{{#if:{{{ge|}}}{{#switch:ge|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!-- -->{{Igen/lab|es|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{ge|{{{u|}}}}}}<!-- -->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!-- -->{{#if:{{{gf|}}}{{#switch:gf|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!-- -->{{Igen/lab|fr|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gf|{{{u|}}}}}}<!-- -->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!-- -->{{#if:{{{gi|}}}{{#switch:gi|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!-- -->{{Igen/lab|it|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gi|{{{u|}}}}}}<!-- -->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!-- -->{{#if:{{{gH|}}}{{#switch:gH|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!-- -->{{Igen/lab|ch|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gH|{{{u|}}}}}}<!-- -->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!-- -->{{#if:{{{gj|}}}{{#switch:gj|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!-- -->{{Igen/lab|he|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gj|{{{u|}}}}}}<!-- -->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!-- -->{{#if:{{{gr|}}}{{#switch:gr|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!-- -->{{Igen/lab|ru|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gr|{{{u|}}}}}}<!-- -->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!-- -->{{#if:{{{gP|}}}{{#switch:gP|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!-- -->{{Igen/lab|pl|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gP|{{{u|}}}}}}<!-- -->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!-- -->{{#if:{{{gs|}}}{{#switch:gs|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!-- -->{{Igen/lab|sv|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gs|{{{u|}}}}}}<!-- -->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!-- -->{{#if:{{{gt|}}}{{#switch:gt|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!-- -->{{Igen/lab|tr|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gt|{{{u|}}}}}}<!-- -->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!-- -->{{#if:{{{gw|}}}{{#switch:gw|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!-- -->{{Igen/lab|w|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gw|{{{u|}}}}}}<!-- -->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}} }}<!-- -->{{#if:{{#switch:fw|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->{{{fwc|{{{fwe|{{{fwo|{{{fwl|{{{fwt|{{{fws|}}}}}}}}}}}}}}}}}}<!-- any one of these (with value) triggers "Fotowerkstatt" -->|{{clr}}{{Fotowerkstatt|changes={{{fwc|}}}|editor={{{fwe|}}}|orig={{{fwo|}}}|orig-lang={{{fwl|}}}<!-- -->|topic={{{fwt|{{{w|{{{s|}}}}}}}}}|style={{{fws|margin:0}}}}}}}<!-- -->{{#if:{{{sd|}}}|{{#ifeq:{{{2}}}|n||{{#switch:{{{s}}}|ce|ee|eh={{Igen/csd|{{{e|{{{err|{{{2|0}}}}}}}}}|{{{1}}}|{{{sd}}}}}}}}}}}<!-- -->{{#if:{{{T5|}}}|{{clr}}{{{T5}}}|{{{t5|}}}}}<!-- -->{{#if:{{{^|}}}{{#switch:^|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->{{{^s|{{{^t|{{{^p|{{{^c|}}}}}}}}}}}}<!-- any one of these (with value) triggers "Valued image" -->|{{Igen/qui|{{{1|}}}|{{{2|}}}|{{{e|{{{err|}}}}}}|type={{{^|}}}<!-- (via "Quality image" stub) -->|scope={{{^s|}}}|time={{{^t|}}}|page={{{^p|}}}|cat={{{^c|}}}|top={{{^w|{{{w|{{{s|}}}}}}}}}|by={{{^b|}}}}}}}<!-- -->{{#if:{{{\+|}}}{{{\+r|}}}{{{\+l|}}}{{{\+t|}}}{{{\+u|}}}{{#switch:\+|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}<!-- -->|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->|{{Supersedes|{{{\+|}}}|{{{\+r|{{{\r|}}}}}}|{{{\+u|{{{\u|}}}}}}|lang={{{\+l|{{{\l|}}}}}}<!-- -->|{{#switch:{{{\+t|{{{\t|&#06;}}}}}}|&#06;={{{w|{{{s|}}}}}}|n|-|=|{{{\+t}}}}}|q=i}}}}<!-- other file inferior -->{{#if:{{{f|}}}|{{Igen/fif|{{{f}}}|cat={{{fc|}}}|topic={{{ft|{{{w|{{{s|}}}}}}}}}}}}}<!-- -->{{#if:{{{T6|}}}|{{clr}}{{{T6}}}|{{{t6|}}}}}<!-- disadvantages: -->{{#switch:{{{~}}}|&#06;|-|n|=|{{#if:{{{~|{{{Cdata|}}}{{{~k|{{{~u|{{{~U|}}}}}}}}}}}}{{#switch:{{{~|&#06;}}}|n|-|=1}}<!--💩 -->{{#switch:~|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->|{{Cdata|style=margin:0|sub={{#switch:{{{~|{{{Cdata|&#06;}}}}}}|n|-|=-<!-- -->|{{#if:{{{~u|{{{~U|{{{u|{{{U|}}}}}}}}}}}}|&#58; {{{~u|{{{~U|{{{u|{{{U|}}}}}}}}}}}}}}|{{{~|}}}}}<!-- -->|user={{#if:{{{U|{{{~U|}}}}}}|{{U|{{{U|{{{~U}}}}}}}}|{{{~u|{{{u|}}}}}}}}|U={{{U|{{{~U|}}}}}}|key={{{~k|}}}<!-- -->|topic={{#if:{{{topic|{{{what|{{{w|{{{s|}}}}}}}}}}}}|{{{topic|{{{what|{{{w|{{{s}}}}}}}}}}}}}}<!-- -->|bad={{#if:{{{!|}}}{{#switch:!|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--💩 -->|{{#ifeq:{{{!}}}|t||also}}}}}}}}}}<!-- -->{{#if:{{{!|}}}{{#switch:{{{!s|↓}}}|↓=|1}}{{#switch:{{{!c|↓}}}|↓=|1}}<!-- when one of these is defined, empty or with value -->{{#switch:!|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->|{{ {{#switch:{{{!}}}|f|x=Fake|r|t=Topo|#default=Bad}}SVG<!-- -->|1={{{!|}}}|2={{#switch:{{{1}}}|A|a|Illustrator|Adobe Illustrator|A$|a$|IA=Adobe-}}<!-- -->|style={{{style|{{#switch:{{{!}}}|t|f|r|x=|width:100%;border:2px red solid;margin:0}}}}}<!-- -->|subcat={{#switch:{{{!s|{{{subcat|&#06;}}}}}}|&#06;=|n|-|=-|{{#invoke:Igenmod|subst|{{{!s|{{{subcat|}}}}}}}}}}<!-- -->|category={{#switch:{{{!c|&#06;}}}|&#06;=|n|-|=-|{{{!c}}}}}<!-- -->|key={{{!k|}}}<!-- -->|badcat={{{U|{{{u|}}}}}}|vsub={{{vsub|}}}|topic={{{w|{{{s|}}}}}}<!-- -->|size={{#if:{{{>|}}}{{#switch:>|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|big}}}}}}<!-- -->{{#if:{{{?|}}}{{{??|}}}{{#switch:{{{?s|↓}}}|↓=|1}}<!-- when subcat ?s is defined, empty or with value -->{{{?b|}}}{{{?c|}}}{{{?d|}}}{{{?f|}}}{{{?o|}}}{{{?r|}}}{{{?u|}}}<!-- -->{{{?s|}}}{{{?w|}}}{{{?t|}}}{{{?k|}}}{{{?n|}}}{{{?p|}}}{{{?x|}}}<!-- -->{{#switch:?|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->|{{Rsvg bug|3={{{?b|}}}|4={{{?c|}}}|5={{{?d|}}}|6={{{?f|}}}|7={{{?o|}}}|8={{{?r|}}}|9={{{?u|}}}<!-- -->|2={{#switch:?|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=-}}<!-- -->|1={{{??|{{{?|{{#if:{{{?p|}}}|{{#invoke:Igenmod|split|{{{?p}}}|Igenbug}}}} }}}}}}<!-- -->|topic={{{?w|{{{topic|{{{what|{{{w|{{{s|}}}}}}}}}}}}}}}|name={{{?n|}}}<!-- -->|tool={{{?t|{{{1|}}}}}}|sub={{#switch:{{{?s|&#06;}}}|&#06;=|n|-|=-|{{{?s}}}}}|key={{{?k|}}}}}}}<!-- ?-? -->{{#switch:?x|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{10}}}<!-- -->|{{{11}}}|{{{12}}}|{{{13}}}|{{{21}}}|={{Rsvg bug|-|11=x}}}}<!-- flowRoot eXception -->{{#if:{{{<|{{{<s|}}}}}}{{#switch:<|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->{{#switch:pathtext|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->|{{Igen/ptx|s|sub={{{<|{{#switch:tl|{{{s}}}|{{{w}}}=vv}}}}}<!-- -->|v={{{<v|{{#ifeq:{{{s}}}|v|v}}}}}|s={{{<s|{{Igen/csf|{{{1}}}|{{{w|{{{s|}}}}}}}}|{{{vsub|}}}}}}<!-- -->|source={{{source|}}}|size={{#if:{{{>|}}}{{#switch:>|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}<!-- -->|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|big}}|cat={{#switch:{{{>c|&#06;}}}|&#06;=|n|-|=-|{{{>c|}}}}}}}<!-- -->|{{#switch:<n|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=<!-- -->{{Igen/ptx|s={{Igen/csf|{{{1}}}|{{{<s|{{{w|{{{s|}}}}}}}}}}}|v=n<!-- -->|cat={{#switch:{{{<c|&#06;}}}|&#06;=|n|-|=-|{{{<c|}}}}}}}<!-- -->|{{#switch:<v|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=<!-- -->{{Igen/ptx|s={{Igen/csf|{{{1}}}|{{{<s|{{{w|{{{s|}}}}}}}}}}}|v=v<!-- -->|cat={{#switch:{{{<c|&#06;}}}|&#06;=|n|-|=-|{{{<c|}}}}}}}<!-- -->|{{#switch:<i|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=<!-- -->{{Igen/ptx|sub=i|s={{{<s|{{{w|{{{s|}}}}}}}}}|v=i<!-- -->|cat={{#switch:{{{<c|&#06;}}}|&#06;=|n|-|=-|{{{<c|}}}}}}}}}<!-- -->|{{#switch:<h|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=<!-- -->{{Igen/ptx|sub=|s=h|v=<!-- -->|cat={{#switch:{{{<c|&#06;}}}|&#06;=|n|-|=-|{{{<c|}}}}}}}}}<!-- -->|{{#switch:<l|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=<!-- -->{{Igen/ptx|sub=|s=l|v=l<!-- standard: no cat -->|cat={{#switch:{{{<c|&#06;}}}|&#06;=|n|-|=-|{{{<c|}}}}}}}}} }}}}}}<!-- -->{{#switch:<x|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}{{{17}}}={{ShouldBeText}}}}<!-- 17= -->{{#if:{{{tw|}}}|{{Igen/twt|{{{tw|}}}<!-- Taken with -->|tc={{#switch:{{{tc|&#06;}}}|&#06;=|n|-|=-|{{{tc}}}}}<!-- -->|tl={{#switch:{{{tl|&#06;}}}|&#06;=|n|-|=-|{{{tl}}}}}<!-- -->|tx={{#switch:{{{tx|&#06;}}}|&#06;|n|-|=-|{{{tx}}}}}<!-- -->|tu={{#switch:{{{tu|&#06;}}}|n|-|=-|&#06;={{#if:{{{U|}}}|{{U|{{{U}}}}}|{{{u|{{{user|-}}}}}}}}|{{{tu}}}}}<!-- -->|+={{#switch:+|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=+}}}}}}<!-- -->{{#if:{{{§|{{{§s|}}}}}}{{#switch:§|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->|{{TracedSVG|{{{§|}}}|sub={{{§s|}}}|style=width:100%}}}}<!-- File generation description: 11= -->{{#if:{{{×|}}}{{#switch:×|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{11}}}=1}}<!-- -->{{#switch:×c|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}{{{×c|}}}<!-- -->{{#switch:×n|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}{{{×n|}}}<!-- -->{{#switch:×t|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}{{{×t|}}}<!-- -->{{#switch:{{{×c|&#06;}}}|n|-|=1}}{{#switch:{{{×n|&#06;}}}|n|-|=1}}{{#switch:{{{×t|&#06;}}}|n|-|=1}}<!-- -->|{{-}}{{SimplSVG|3=000|4={{{×|{{{×n|}}}}}}|5={{{×d|{{#if:{{{×|}}}|16x16}}}}}|6={{{×t|{{{w|{{{s|}}}}}}}}}<!-- -->|7={{#switch:×c|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=-<!-- category -->|{{#switch:×n|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=-<!-- -->|{{#if:{{#switch:{{{×c|&#06;}}}|n|-|=1}}{{#switch:{{{×n|&#06;}}}|n|-|=1}}|-<!-- -->|{{#switch:{{{×t|{{{w|{{{s|}}}}}}}}}|bi=&#58;BSicons{{#if:{{{×n|}}}|-unused}}|c|eh=&#58;CoAs<!-- subcat -->|d=&#58;Diagrams|f=&#58;Flags|i=&#58;Icons|l|tl=&#58;Logos|y|p|s=&#58;Symbols|jc=&#58;Crests<!-- -->|je|e|em=&#58;Emblems|m=&#58;Maps|n|-|=|&default={{{×t}}}}}}}}}}}{{{×s|}}}<!-- -->|8={{#switch:{{{×t|&#06;}}}|n|-|=||{{Igen/top|{{{×t|{{{w|{{{s|}}}}}}}}}|2=file|lang=en}}}}<!-- -->|9={{#switch:{{{err|{{{e|&#06;}}}}}}|=|&#06;={{#ifeq:{{{2}}}|-1|-1|{{Igen/par|{{{2|}}}}}}}|{{{err|{{{e|???}}}}}}}}<!-- -->|10={{#if:{{#switch:×n|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->{{#switch:{{{×n|&#06;}}}|n|-|=1}}{{{×n|}}}|⛔ '''''nowhere'' used''' ⛔}}<!-- -->|11={{{×k|}}}|12={{{×r|}}}|13={{{×q|}}}<!-- -->|style=margin:0}}}}<!--{{#if:{{#switch:×n|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}} {{#switch:{{{×n|&#06;}}}|n|-|=1}}|⛔ This {{igen/top|{{{×t|{{{w|{{{s|}}}}}}}}}}} is ''nowhere'' used ⛔}} {{#switch:××|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{11}}}{{{12}}}{{{13}}}={{UseXML}}}}<!-- -->{{#if:{{{××|}}}{{#switch:××|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}<!-- -->|{{{10}}}|{{{11}}}|{{{12}}}|{{{13}}}|{{{14}}}=1}}|{{UseXML|{{{××|}}}|style=margin:0}}}}<!-- -->{{#if:{{{R|}}}|{{clr}}}}{{#if:{{{editor|}}}{{{editoff|}}}{{{orig|}}}{{{origoff|}}}<!-- -->{{#switch:{{{R|?↓}}}|?↓=|1}}{{#switch:{{{r|↓}}}|↓=|1}}<!-- when defined, empty or with value -->|{{Retouched picture|{{#ifeq:{{{r}}}|-||{{{R|{{{r|}}}}}}}}|editor={{{editor|}}}|orig={{{orig|}}}<!-- -->|editoff={{{editoff|}}}|origoff={{{origoff|}}}<!-- -->|topic={{#if:{{{topic|{{{what|{{{w|{{{s|}}}}}}}}}}}}|{{{topic|{{{what|{{{w|{{{s}}}}}}}}}}}}}}}}}}<!-- -->{{#if:{{{\|}}}{{{\-|}}}{{{\-r|}}}{{{\-l|}}}{{{\x|}}}{{{\-x|}}}{{#switch:\|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}<!-- -->|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|{{Superseded|{{{\|{{{\-|}}}}}}|{{{\-r|{{{\r|}}}}}}|lang={{{\-l|{{{\l|}}}}}}<!-- -->|ext={{{\-x|{{{\x|{{#if:{{{\|}}}{{{\-|}}}||png}}}}}}}}<!-- -->|topic={{{\-t|{{{\-w|{{{\t|{{{\w|{{{topic|{{{what|{{{w|{{{s|}}}}}}}}}}}}}}}}}}}}}}}}|q=s}}<!-- other file supersedes -->{{#ifeq:{{{!}}}|f|[[Category:Fake SVG with raster version available|{{PAGENAME}}]]}}}}<!-- File generation description: 13= -->{{#if:{{{\\|}}}{{{\\r|}}}{{{\\l|}}}{{{\\q|}}}{{#switch:\\|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}<!-- -->|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{13}}}=1}}<!-- -->|{{Vector version available|{{{\\|}}}|q={{{\\q|{{{\q|}}}}}}|r={{{\\r|{{{\r|}}}}}}|lang={{{\\l|{{{\l|}}}}}}<!-- SupersededSVG -->|topic={{{\\t|{{{\\w|{{{\t|{{{\w|{{{topic|{{{what|{{{w|{{{s|}}}}}}}}}}}}}}}}}}}}}}}}}}}}<!-- -->{{#if:{{{\#|}}}{{#switch:\#|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{13}}}=1}}<!-- 13= -->|{{PDF version available|{{{\#|}}}}}}}<!-- PDF file -->{{#if:{{{T7|}}}|{{clr}}{{{T7}}}|{{{t7|}}}}}<!-- more special character parameters -->{{#switch:{{padleft:|1|{{{1}}}}}|*|@|(|)|_={{Igen/2nd|{{{1}}}|p=1}}}}<!-- -->{{#switch:{{padleft:|1|{{{2}}}}}|*|@|(|)|_={{Igen/2nd|{{{2}}}|p=2}}}}<!-- -->{{#switch:{{padleft:|1|{{{3}}}}}|*|@|(|)|_={{Igen/2nd|{{{3}}}|p=3}}}}<!-- -->{{#switch:{{padleft:|1|{{{4}}}}}|*|@|(|)|_={{Igen/2nd|{{{4}}}|p=4}}}}<!-- -->{{#switch:{{padleft:|1|{{{5}}}}}|*|@|(|)|_={{Igen/2nd|{{{5}}}|p=5}}}}<!-- -->{{#switch:{{padleft:|1|{{{6}}}}}|*|@|(|)|_={{Igen/2nd|{{{6}}}|p=6}}}}<!-- -->{{#switch:{{padleft:|1|{{{7}}}}}|*|@|(|)|_={{Igen/2nd|{{{7}}}|p=7}}}}<!-- -->{{#switch:{{padleft:|1|{{{8}}}}}|*|@|(|)|_={{Igen/2nd|{{{8}}}|p=8}}}}<!-- -->{{#switch:{{padleft:|1|{{{9}}}}}|*|@|(|)|_={{Igen/2nd|{{{9}}}|p=9}}}}<!-- -->{{#switch:{{padleft:|1|{{{10}}}}}|*|@|(|)|_={{Igen/2nd|{{{10}}}|p=10}}}}<!-- -->{{#switch:{{padleft:|1|{{{11}}}}}|*|@|(|)|_={{Igen/2nd|{{{11}}}|p=11}}}}<!-- -->{{#switch:{{padleft:|1|{{{12}}}}}|*|@|(|)|_={{Igen/2nd|{{{12}}}|p=12}}}}<!-- ---{{#switch:{{padleft:|1|{{{13}}}}}|*|@|(|)|_={{Igen/2nd|{{{13}}}|p=13}}}}-!-- ---{{#switch:{{padleft:|1|{{{14}}}}}|*|@|(|)|_={{Igen/2nd|{{{14}}}|p=14}}}}-!-- ---{{#switch:{{padleft:|1|{{{15}}}}}|*|@|(|)|_={{Igen/2nd|{{{15}}}|p=15}}}}-!-- -->{{#if:{{{*|}}}|{{Igen/2nd|{{{*}}}|c=*}}}}<!-- -->{{#if:{{{@|}}}|{{Igen/2nd|{{{@}}}|c=@}}}}<!-- -->{{#if:{{{(|}}}|{{Igen/2nd|{{{(}}}|c=(}}}}<!-- -->{{#if:{{{)|}}}|{{Igen/2nd|{{{)}}}|c=)}}}}<!-- -->{{#if:{{{_|}}}|{{Igen/2nd|{{{_}}}|c=_}}}}<!-- -->{{#if:{{{T8|}}}|{{clr}}{{{T8}}}|{{{t8|}}}}}<!-- -->{{#if:{{{→|}}}{{#switch:→|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{12}}}=1}}<!-- 12= -->|{{SVG|{{#if:{{{→|}}}|{{{→}}}|{{#if:{{{w|{{{s|}}}}}}|{{Igen/top|{{{w|{{{s}}}}}}}}}}}}}}<!--File generation description: -->|{{#if:{{{⇒|}}}{{#switch:⇒|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{12}}}=1}}<!-- -->|{{SVG|{{#if:{{{⇒|}}}|{{{⇒}}}|{{#if:{{{w|{{{s|}}}}}}|{{Igen/top|{{{w|{{{s}}}}}}}}}}}}|simple}} }}}}<!-- final tags: message boxes -->{{#if:{{#switch:{{{nu|-}}}|-=|1}}{{#switch:nu|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- parm ? -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{21}}}=1}}|{{clr}}{{NoUpdate|{{{nu|}}}|{{{nu2|}}}}}}}<!-- -->{{#if:{{#switch:{{{re|-}}}|-=|1}}{{#switch:re|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- parm -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{22}}}=1}}|{{clr}}{{Recent<!-- -->|style=width:auto;border:thin solid var(--border-color-progressive--active,#009);margin:0|iconsize=33x22|{{{re|}}}}}}}<!-- -->{{#if:{{#switch:{{{rs|-}}}|-=|1}}{{#switch:rs|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{38}}}=1}}|{{clr}}{{Restoration|style=margin:0}}}}<!-- -->{{#if:{{#switch:{{{up|-}}}|-=|1}}{{#switch:up|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{23}}}=1}}|{{clr}}{{Update<!-- -->|style=width:auto;border:thin solid var(--border-color-warning,#966);margin:0|iconsize=48|{{{up|}}}}}}}<!-- -->{{#if:{{#switch:{{{lh|-}}}|-=|1}}{{#switch:lh|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{24}}}=1}}|<!-- {{clr}} -->{{Logo history|{{{lh}}}|style=margin:0;border:2px solid var(--border-color-content-added,#ccf)}}}}<!-- -->{{#if:{{#switch:{{{ci|-}}}|-=|1}}{{#switch:ci|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{25}}}=1}}|{{Current<!-- /i18n -->|style=width:auto;border:thin solid var(--border-color-notice,#333);margin:0|iconsize=40|s={{{w|{{{s|}}}}}}|{{{ci}}}|{{{ci2|}}}}}}}<!-- -->{{#if:{{#switch:{{{ov|-}}}|-=|1}}{{#switch:ov|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{26}}}=1}}|{{clr}}{{Overlay<!-- -->|iconsize=36|style=margin:0;padding:0;border:2px solid var(--border-color-interactive,#88a);|{{{ov|}}}}}}}<!-- -->{{#if:{{#switch:{{{oq|-}}}|-=|1}}{{#switch:oq|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{27}}}=1}}|{{Opaque|1={{{s|{{{w|}}}}}}}}}}<!-- -->{{#if:{{#switch:{{{tr|-}}}|-=|1}}{{#switch:tr|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{28}}}=1}}|{{Translate|switch={{{tr|}}}|style=margin:0<!-- -->|topic={{#if:{{{tr|{{{w|{{{s|}}}}}}}}}|{{Igen/top|{{{tr|{{{w|{{{s|}}}}}}}}}}}}}}}}}<!-- -->{{#if:{{#switch:{{{in|-}}}|-=|1}}{{#switch:in|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{29}}}=1}}|{{Convert to international|{{Igen/top|{{{w|{{{s|}}}}}}}}<!-- -->|style=margin:0;width:auto}}}}<!-- -->{{#if:{{#switch:{{{ml|-}}}|-=|1}}{{#switch:ml|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{30}}}=1}}|{{Convert to multilang|{{Igen/top|{{{w|{{{s|}}}}}}}}}}}}<!-- -->{{#if:{{#switch:{{{wc|-}}}|-=|1}}{{#switch:wc|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{31}}}=1}}|{{Convert to wikichart|{{Igen/top|{{{w|{{{s|}}}}}}}}-->chart -->|style=margin:0;width:auto}}}}<!-- -->{{#if:{{#switch:{{{wt|-}}}|-=|1}}{{#switch:wt|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{32}}}=1}}|{{Convert to wikitable|{{Igen/top|{{{w|{{{s|}}}}}}}}<!--table -->|style=width:auto;border:thin solid var(--border-color-content-removed,#f4c430);margin:0}}}}<!-- -->{{#if:{{#switch:{{{bl|-}}}|-=|1}}{{#switch:bl|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{33}}}=1}}|{{Colour blind|{{{s|{{{w|}}}}}}|{{{bl|}}}}}}}<!-- -->{{#if:{{#switch:{{{ff|-}}}|-=|1}}{{#switch:ff|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{34}}}=1}}|{{Fictitious flag|{{{ff|{{{s|}}}}}}}}}}<!-- -->{{#if:{{#switch:{{{fi|-}}}|-=|1}}{{#switch:fi|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{36}}}=1}}|{{Fake flag|{{{fi|{{{s|}}}}}}}}}}<!-- -->{{#if:{{#switch:{{{ob|-}}}|-=|1}}{{#switch:ob|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{41}}}=1}}|{{Out of borders|{{{ob|{{{s|}}}}}}}}}}<!-- -->{{#if:{{#switch:{{{ar|-}}}|-=|1}}{{#switch:ar|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{42}}}=1}}|{{Artifacts|{{{ar|{{{s|}}}}}}}}}}<!-- -->{{#if:{{#switch:{{{bf|-}}}|-=|1}}{{#switch:bf|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{37}}}=1}}|{{Broken file|description={{{bf|}}}<!-- -->|filetype={{#invoke:Igenmod|exttext}}|topic={{{s|{{{w|}}}}}}|cat={{{bfc|}}}}}}}<!-- -->{{#if:{{#switch:{{{dm|-}}}|-=|1}}{{#switch:dm|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{43}}}=1}}|{{Inaccurate-map-disputed|{{{dm|}}}<!-- -->|style=width:64%;border:thin solid var(--border-color-warning,#966);margin:0|iconsize=48<!-- -->|imageright=[[File:Ambox globe content.svg|40px]]}}}}<!-- border:1px solid red;margin:0;background-color:#FFFAFA -->{{#switch:cb|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{13}}}|{{{14}}}|{{{43}}}={{Coablazon}}}}<!-- -->{{#switch:rf|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{13}}}|{{{14}}}|{{{44}}}={{COAref}}}}<!-- tw...imageright=[[File:Ambox globe content.svg|60px|link=]] -->{{#if:{{#switch:{{{zf|-}}}|-=|1}}{{#switch:zf|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{39}}}=1}}|{{User:ZooFari/Template:SVG|topic={{{s|}}}}}}}<!-- -->{{#if:{{#switch:{{{ni|←}}}|←=|1}}{{#switch:ni|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- parm -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{14}}}=1}}|{{clr}}{{NoInkscape|{{{ni|{{{←|}}}}}}|style=margin:0}}}}<!-- -->{{#if:{{{←|}}}{{#switch:←|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{14}}}=1}}<!-- -->{{{←s|}}}{{{←t|}}}|{{NoInkscape|1={{{←|{{#if:{{{%s|}}}{{#switch:%s|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}<!-- -->|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|+}}}}}|style={{#switch:{{{←s}}}|0=margin:0;border:1px solid var(--border-color-notice,#333)<!-- -->|h=background:var(--background-color-error-subtle,#FDA);color: inherit;margin-bottom:0|t=width:auto;margin:0;border:{{#if:{{{tr|}}}|4px double|2px solid}} var(--border-color-warning,#633)<!-- -->|0h|h0=margin:0;background:var(--background-color-warning-subtle,#FED);color: inherit;border:var(--border-color-content-removed,#EC9) solid|#default={{{←s|}}}}}|topic={{{←t|{{{w|{{{s|}}}}}}}}}}}}}<!-- -->{{#if:{{{←←|}}}{{#switch:←←|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{14}}}=1}}<!-- ←← -->|{{Igen/sni|{{{←←|-}}}}}}}<!-- -->{{#switch:1.2|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{16}}}={{SVG 1.2<!-- 16= -->|style=margin:0;border-left:2px solid var(--border-color-content-removed,#F4C430)|topic={{{w|}}}}}}}<!-- (? flowRoot exception) -->{{#if:{{{°|}}}{{#switch:°|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->|{{Easy-border|1={{{w|{{{s|}}}}}}|pixel={{{°|}}}}}}}<!-- -->{{#switch:—|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{18}}}<!-- 18= -->=[[Category:Unused SVG images]]}}<!-- -->{{#if:{{{T9|}}}|{{clr}}{{{T9}}}|{{{t9|}}}}}<!-- -->{{#if:{{{msg|}}}|{{Igen/msg|{{{msg}}}}}}}<!-- more message boxes -->{{#if:{{{T|}}}|{{clr}}{{{T}}}|{{{t|}}}}}</div><!-- final trail -->{{#switch:{{{cc|y}}}|n|-|=|{{#if:{{{c4|{{{c5|{{{c6|}}}}}}}}}<!-- not when "cc=", "cc-n", "cc=-" -->|{{Igen/cat|{{#ifeq:{{#invoke:Igenmod|extcode}}|s|{{#if:{{Igen/par|{{{2|}}}}}|Inv|V}}alid SVG<!-- -->|{{#invoke:Igenmod|exttext}}}} created with different tools code}}}}}}<!-- -->{{#if:{{{c1|{{{code|{{{source|{{{script|{{{c2|{{{c3|}}}}}}}}}}}}}}}}}}|{{Created with code<!-- -->|+={{{+c|}}}|nt={{#switch:{{{nt|&#06;}}}|&#06;=××}}|cc={{{cc|}}}<!-- -->|c1={{{c1|{{{code|{{{source|{{{script|}}}}}}}}}}}}<!-- -->|h1={{#if:{{{h1|{{{title|}}}}}}|{{{h1|{{{title|}}}}}}|{{#if:{{{p1|}}}<!-- -->|Suggested ''preferable'' SVG |{{Igen/cod|{{{1|}}}|H1|{{{l1|}}}}}}}}}<!-- -->|l1={{#if:{{{l1|{{{syntax|}}}}}}|{{{l1|{{{syntax|}}}}}}|{{Igen/cod|{{{1|}}}|L1}}}}<!-- -->|n1={{#if:{{{n1|}}}|{{{n1}}}|{{#if:{{{p1|}}}|&nbsp;'''''this'' code''' needs {{{p1}}} bytes.}}}}<!-- -->|e1={{{e1|}}}|d1={{{d1|}}}|f1={{{f1|{{{format|}}}}}}|g1={{{g1|}}}|s1={{{s1|{{{collapse|}}}}}}<!-- -->|c2={{{c2|{{{code2|{{{c5|}}}}}}}}}|h2={{{h2|{{{title2|{{Igen/cod|{{{1|}}}|H2}}}}}}}}<!-- -->|l2={{#if:{{{l2|{{{syntax2|}}}}}}|{{{l2|{{{syntax2|}}}}}}|{{Igen/cod|{{{1|}}}|L2}}}}|n2={{{n2|}}}<!-- -->|e2={{{e2|}}}|d2={{{d2|}}}|f2={{{f2|{{{format2|}}}}}}|g2={{{g2|}}}|s2={{{s2|{{{collapse2|}}}}}}<!-- -->|c3={{{c3|{{{code3|{{{c6|}}}}}}}}}|h3={{{h3|{{{title3|{{Igen/cod|{{{1|}}}|H3}}}}}}}}<!-- -->|l3={{#if:{{{l3|{{{syntax3|}}}}}}|{{{l3|{{{syntax3|}}}}}}|{{Igen/cod|{{{1|}}}|L3}}}}|n3={{{n3|}}}<!-- -->|e3={{{e3|}}}|d3={{{d3|}}}|f3={{{f3|{{{format3|}}}}}}|g3={{{g3|}}}|s3={{{s3|{{{collapse3|}}}}}}<!-- -->}}}}<!-- -->}}<!-- ==end of template== -->{{#if:{{{cat2|}}}|{{Igen/cat|{{{cat2}}}}}}}<!-- required 2nd cat -->{{#if:{{{cat3|}}}|{{Igen/cat|{{{cat3}}}}}}}<!-- required 3rd cat -->{{#if:{{{cat4|}}}|{{Igen/cat|{{{cat4}}}}}}}<!-- required 4th cat -->{{#if:{{{U|{{{u|{{{user|}}}}}}}}}|{{Igen/usr<!-- required user treatment -->|{{{topic|{{{s|{{{topic|{{{w|{{{what|{{{vsub|{{{Vs|}}}}}}}}}}}}}}}}}}}}}|{{{U|{{{u|{{{user|}}}}}}}}}}}}}<!-- -->{{#switch:-|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}={{-}}}}<!-- {{#switch:€|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}= ?? }} future additional categorizings: {{#if:{{{_|}}}|{{Igen/cat|{{{_}}}}}}} derivativeFX, LrMediaWiki, Open Access Media Importer, VicuñaUploader, -->{{#if:{{{l|{{{L|}}}}}}|{{Igen/upl|{{{l|{{{L}}}}}}}}}}<!-- maintanance categories: -->{{#if:{{{T|}}}|{{Igen/cat|Commons:Maint:Igen:T}}}}<!-- -->{{#switch:{{lc:{{{1|<noinclude>A</noinclude>}}}}} |a|a$|ai|adobe|illustrator |ah|ai|b|c|d|e|f|g|gimp|h |i|ia|ib|ic|ih|ii|i$|im|ims|inkscape|io|is|itb |j|k|l|m|matlab|n|ne|o|p|ps|q|r|s|sodipodi |t|text editor|t-|s- |u|v|vfpt|vm|w|wpdc|x|=|{{#ifexist:Template:{{Igen/cwt|{{{1|}}}<!-- -->|{{{e|{{{err|{{{2}}}}}}}}}|{{{n|{{{N|{{{name|}}}}}}}}}}}<!-- -->|{{Igen/2nd|<!-- [[Category:Igen 2nd check]] -->}}|[[Category:Igen tool notfd]]<!-- -->{{error|Igen tool "{{Igen/cwt|{{{1|}}}|{{{e|{{{err|{{{2}}}}}}}}}|{{{n|{{{N|{{{name|}}}}}}}}}}}" notfd}}}}}}<!-- --></onlyinclude><noinclude> {{Protected}} {{documentation}} </noinclude> lxxzpim0hmtpjo0aa3esgmce2eiluzn 10628 10627 2026-08-25T23:38:25Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Image_generation]] 10627 wikitext text/x-wiki <onlyinclude>{{#if:{{{C|{{{Cl|}}}}}}|{{{T0|{{{t0|}}}}}}{{Tincture|{{{C|{{{Cl}}}}}}|tc={{{Ct|}}}|cat={{#switch:{{{Cc|&#06;}}}|&#06;=|n|-|=-|{{{Cc}}}}}<!-- -->|+={{#if:{{{Cl|{{{cl|}}}}}}|{{{Cl|{{{cl|}}}}}}|<!-- default is "+" -->{{#switch:{{{C+|{{{c+|&#06;}}}}}}|&#06;={{#switch:{{{Cf|{{{cf|&#06;}}}}}}|n|-|=|+}}|+=+|n|-|=|{{{C+|{{{c+}}}}}}}}}}<!-- -->|ss={{#switch:{{{Css|{{{ss|&#06;}}}}}}|&#06;|=0|d9|D9=Δ9|{{{Css|{{{ss}}}}}}}}|s={{{s|{{{w|}}}}}}|k={{{k|}}}}}}}<!-- -->{{#if:{{{cb|{{{Cb|}}}}}}|{{#invoke:Igenmod|split|{{#switch:{{padleft:|1|{{{cb|{{{Cb|}}}}}}}}|+|e=|+{{#ifeq:{{{s}}}|f<!-- -->|=Flag colors}}{{#ifeq:{{padleft:|1|{{{cb|{{{Cb|}}}}}}}}|#|//<!-- -->|{{#ifeq:{{padleft:|2|{{{cb|{{{Cb|}}}}}}}}|/#|/}}}}}}{{{cb|{{{Cb|}}}}}}|Igen/cbx}}{{{cbx|}}}}}<!-- like "Legend" ==start of template== -->{{{{#if:{{{fn|}}}|Information field|{{#switch:+|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=Information field|Nil2}}}}<!-- -->|1={{#switch:{{{fn|}}}<!-- -->|+|={{#invoke:Igenmod|exttext}}{{I18n/COA|development}}<!-- "+", " " -->|-=<!-- -->|{{{fn}}}}}<!-- -->|2={{#if:{{{T1|}}}|{{clr}}{{{T1}}}|{{{t1|}}}}}<!-- --><div style="vertical-align:middle"><!-- -->{{{p|{{{P|}}}}}}{{#if:{{{P|}}}|{{clr}}}}<!-- «#ifeq:{{{10}}}» SimplSVG when: either 10=S/S&/S*/S-, 1=S-/T-, or (sb= and sa=) -->{{#if:{{#switch:{{{10}}}|S|S&|S-=1}}{{#ifeq:{{{1}}}|T-|1}}{{#if:{{{sb|}}}|{{#if:{{{sa|}}}|1}}}}<!-- -->{{#switch:S |{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{11}}}|{{{12}}}|{{{13}}}=1}}<!-- 1=T -->{{#switch:S&|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{11}}}|{{{12}}}|{{{13}}}=1}}<!-- 1=T -->{{#switch:S*|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{11}}}|{{{12}}}|{{{13}}}=}}<!-- ??? -->{{#switch:S-|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{11}}}|{{{12}}}|{{{13}}}=1}}<!-- T1 -->|{{SimplSVG|{{#ifeq:{{{1}}}|T-|T|{{{1|}}}}}|{{{sb|{{{2|}}}}}}|{{{sa|{{{3|}}}}}}<!-- (par#4 can be substituted by "s") T4 -->|{{#switch:{{{4}}}|a|b|bi|c|ch|d|e|em|f|g|h|i|jc|je|k|l|m|o|p|r|s|t|u|v|y|7|♫|α|?={{{4}}}<!-- valid topic ? -->|#default={{#if:{{{s|}}}|{{{s}}}}}}}<!-- T5 -->|{{{5|}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|{{{9|}}}<!-- T 5...9 T10-->|{{#switch:S&|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{13}}}=&<!-- + rd -->|{{#switch:S*|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{13}}}=}}}}<!-- ??? -->|style=<nowiki/><!-- 10=+ -->|topic={{#if:{{{s:|}}}|{{lcfirst:{{{s:}}}}}<!-- -->|{{#if:{{{su:|}}}|{{ucfirst:{{{su:}}}}}<!-- -->|{{#if:{{{topic|{{{what|{{{w|{{{vsub|{{{Vs|{{{s|}}}}}}}}}}}}}}}}}}<!-- -->|{{{topic|{{{what|{{{w|{{{vsub|{{{Vs|{{{s}}}}}}}}}}}}}}}}}}}}}}}}<!-- -->|ni={{{←|}}}{{{←s|}}}{{{←t|}}}|ns={{{ns|}}}|pu={{{pu|}}}<!-- ni=nomsg ns=nosub pu=previous user -->|vs={{#switch:{{{vs|{{{vstyle|&#06;}}}}}}|&#06;|none=-|=fl|{{{vs|{{{vstyle}}}}}}}}<!-- n=n, -=- -->|sub={{#if:{{{sub-|}}}|&#45;{{{sub-}}}{{{sd|}}}<!-- complicated: -->|{{#switch:{{{sub|&#06;}}}<!-- -->|none|n=|-=-|so=&#45;stripes only<!-- -->|&#06;|={{#switch:S-|{{{10}}}|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{11}}}|{{{12}}}|{{{13}}}|{{{14}}}=-|{{#ifeq:{{{1}}}|T-|-}}<!-- -->|#default={{#switch:{{{4}}}|jc=-Japanese crests|je=-Japanese emblems<!-- -->|{{#invoke:Igenmod|subst|{{{sub|}}}}}}}}}}}}}<!-- -->|vsub={{#switch:{{{cc|y}}}|n|-|=|<!-- when "cc=", "cc-n", "cc=-" : not ' code' for SimplSVG/Text editor -->{{#if:{{{c1|{{{code|{{{source|{{{script|{{{c2|{{{c3|{{{c7|}}}}}}}}}}}}}}}}}}}}}|_code}}}}<!-- text editor -->{{#if:{{{s:| {{{su:|}}}}}}|&#58;{{ucfirst:{{Igen/sub|{{{s:|{{{su:}}}}}}}}s}}<!-- -->|{{#if:{{{Vs|}}}|&nbsp;{{{Vs|}}}|{{#if:{{{vsub|}}}|{{#invoke:Igenmod|subst|{{{vsub}}}{{{sd|}}}}}}}}}}}<!-- -->|sdif={{{sd|}}}|key={{{k|}}}<!-- -->|user={{#if:{{{U|}}}|{{U|{{{U}}}}}|{{{u|{{{user|}}}}}}}}<!-- |code ={{{code|{{{c1|}}}}}} {{#if:{{{c1|}}}{{{c2|}}}{{{code|}}}|{{Igen/cat|Valid SVG created with Text Editor code}}}}-->}}<!-- «not #ifeq:{{{10}}} → SimplSVG » -->|{{{{Igen/cwt|{{{1|}}}|{{{e|{{{err|{{{2}}}}}}}}}|{{{n|{{{N|{{{name|}}}}}}}}}}}<!-- 🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥 -->|IMPORTANT={{#switch:{{lc:{{{1}}}}}|im|ims=<!-- -->{{#if:{{{U|{{{u|{{{user|{{{by|}}}}}}}}}}}}|no|yes}}}}<!-- all the processing would be done by "Inkscape" -->|Optimized={{#switch:{{lc:{{{1}}}}}|iz|izs=yes}}<!-- {{#if:{{{U|{{{u|{{{user|{{{by|}}}}}}}}}}}}||yes}}}} all the processing would be done by "Inkscape" -->{{#if:{{{U|{{{u|{{{user|{{{by|}}}}}}}}}}}}|{{#switch:{{lc:{{{1}}}}}|im|ims=<!-- -->…[[Help:Inkscape#Inkscape_SVG_vs._Plain_SVG|important]]}}}}<!-- -->|{{#if:{{{U|}}}|{{U|{{{U}}}}}|{{#if:{{{u|{{{user|}}}}}}|{{{u|{{{user|}}}}}}|<!-- parm (1) -->{{#if:{{{by|}}}|{{#switch:{{padleft:|1|{{{by}}}}}|&#91;|&#123;={{{by}}}|{{u|{{{by}}}}}}}}}}}}}<!-- -->|{{#switch:{{{2|}}}|v=v|/|s=/|t=t|#default={{#switch:{{{1|}}}|/=/<!-- "n" only checked: -->|#default={{#ifeq:{{#invoke:Igenmod|extcode}}|s|v|n}}}}}}<!-- parm (2) -->|err={{#switch:{{{err|{{{e|&#06;}}}}}}|=0|-=|&#06;={{#ifeq:{{{2}}}|-1|-1|{{Igen/par|{{{2|}}}|2}}}}|{{{err|{{{e|}}}}}}}}<!-- -->|name={{#if:{{{N|}}}|&nbsp;{{{N}}}|{{{n|{{{name|{{#if:{{{cw|}}}|{{W|{{{cw}}}}}}}}}}}}}}}<!-- -->|more={{{lnk|}}} {{#switch:{{lc:{{{1}}}}}<!-- test -->|ia|ai={{#if:{{{m|{{{M||{{{more|}}}}}}}}}|{{{m|{{{more|{{#if:{{{M|}}}|&nbsp;{{{M}}}}}}}}}}}|, }}<!-- -->|i|im|is|ims={{#if:{{{m|{{{M||{{{more|}}}}}}}}}|{{{m|{{{more|{{#if:{{{M|}}}|&nbsp;{{{M}}}}}}}}}}}|. }}<!-- corr Stang's chng -->|#default={{#if:{{#switch:&|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->{{{&|{{{&&|{{{&k|{{{&m|}}}}}}}}}}}}|{{#if:{{{m|{{{M||{{{more|}}}}}}}}}|{{{m|{{{more|{{#if:{{{M|}}}|&nbsp;{{{M}}}}}}}}}}}|, }}}}<!-- -->|{{{m|{{{more|{{#if:{{{M|}}}|&nbsp;{{{M}}}|}}}}}}}}}}<!-- |. -->|source={{{source|}}}<!-- -->|13={{#ifeq:{{lc:{{{1}}}}}|t|{{{M|{{{m}}}}}}}}<!-- test parm (13) "m" [ don´t set "logo" ] -->|code ={{{code |{{{c1|}}}}}}<!-- -->|subc={{#switch:{{{cc|y}}}|n|-|=|<!-- when "cc=", "cc-n", "cc=-" : not ' code' (for sll except SimplSVG & Inkscape-hand) -->{{#ifeq:{{{1}}}|H||{{#if:{{{c1|{{{code|{{{source|{{{script|{{{c2|{{{c3|{{{c7|}}}}}}}}}}}}}}}}}}}}}|_code}}}}}}<!-- -->|sub={{#switch:{{{sub|&#06;}}}<!-- -->|n|-={{#if:{{{sd|}}}|{{{sd}}}}}<!-- "-" when coded "n"/"-" -->|={{#if:{{{sd|}}}|{{{sd}}}}}-<!-- empty 'sub=' gives also "-" [[Category:Commons:Maint:Igen:esub]] -->|&#06;|∅={{#if:{{{S|}}}|&nbsp;{{Igen/sub|{{{S}}}}}{{{sd|}}}<!-- when missing or ∅: -->|{{#if:{{{sub-|}}}|&#45;{{{sub-}}}{{{sd|}}}<!-- -->|{{#if:{{{sub:|}}}|&#58;{{{sub:}}}{{{sd|}}}<!-- -->|{{#if:{{{Sub:|}}}|&#58;&#32;{{{Sub:}}}{{{sd|}}}<!-- -->|{{#if:{{{s:|}}}|&#58;{{ucfirst:{{Igen/sub|{{{s:}}}}}s<!-- {{#ifeq:{{{2}}}|n||{{#switch:{{{s}}}|ce|ee|eh=|{{{sd|}}}}}}} -->{{{sd|}}}}}<!-- -->|{{#if:{{{S:|}}}|&#58;&#32;{{ucfirst:{{Igen/sub|{{{S:}}}}}s{{{sd|}}}}}<!-- -->|{{#if:{{{su:|}}}|&#58;{{ucfirst:{{Igen/sub|{{{su:}}}}}s{{{sd|}}}}}<!-- -->|{{#if:{{{s-|}}}|&#45;{{ucfirst:{{Igen/sub|{{{s-}}}}}s{{{sd|}}}}}<!-- -->|{{#if:{{{s|}}}|{{Igen/sub|{{{s}}}|t={{{1}}}|u={{{u|}}}}}<!-- -->{{#ifeq:{{{2}}}|n|{{{sd|}}}|{{#switch:{{{s}}}|ce|ee|eh=|{{{sd|}}}}}}}<!-- no sd when ce,eh but csd -->|{{#switch:{{lc:{{{1}}}}}|a$|i$|=-Commonist}}<!-- -->|{{#if:{{{sd|}}}|{{{sd}}}}}}}}}}}}}}}}}}}}}}}<!-- -->|#default={{#invoke:Igenmod|subst|{{{sub}}}}}{{#if:{{{sd|}}}|{{{sd}}}}}}}<!-- -->|cat={{#switch:{{{cat|{{{c|{{{category|&#06;}}}}}}}}}|none|n|-|=-<!-- -->|&#06;={{#if:{{{cw|}}}|Created with {{{cw}}}}}|∅=|{{{cat|{{{c|{{{category|}}}}}}}}}}}<!-- -->|cni={{#switch:{{{cni|&#06;}}}|n|-=-|&#06;=|{{{cni}}}}}<!-- ("-"; empty; cat) -->|c_text={{{ct|{{{c_t|{{{c_text|}}}}}}}}}<!-- -->|key={{#switch:{{{k|&#06;}}}|n|-=-|=~|{{{key|{{{k|{{#if:{{{K|}}}|&nbsp;{{{K}}}}}}}}}}}}}|lang={{{lang|}}}<!-- -->|vsub={{#switch:{{{cc|y}}}|n|-|=|<!-- when "cc=", "cc-n", "cc=-" : not ' code' for Inkscape-hand/Text editor -->{{#ifeq:{{{1}}}|H|{{#if:{{{c1|{{{code|{{{source|{{{script|{{{c2|{{{c3|{{{c7|}}}}}}}}}}}}}}}}}}}}}|_code}}}}}}<!-- -->{{#switch:{{{vsub|{{{Vs|&#06;}}}}}}|&#06;=|n|-|=|{{#if:{{{Vs|}}}|&nbsp;}}{{Igen/sub|{{{vsub|{{{Vs|}}}}}}}}}}<!-- V4-->|vstyle={{{vs|{{{vstyle|fl}}}}}}<!-- n=n V5-->|vwidth={{{vw|{{{vwidth|}}}}}}<!-- width V6-->|vtxt={{#if:{{{V|}}}|&nbsp;{{{V}}}|{{{vt|{{{vtxt|{{#switch:{{{v|&#06;}}}|n|-|=-|&#06;=}}}}}}}}}}<!-- V7-->|vo={{{vo|{{{opt|{{{vopt|{{{o|{{#if:{{#switch:>|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->{{{>|{{{>c|}}}}}}|>}}}}}}}}}}}}}}<!-- &#x3E; V8 = topic V9-->|vcat={{{vc|{{{vcat|}}}}}}<!-- ¿HandSVG? -->|vc={{#switch:{{{>c|&#06;}}}|n|-|=-|{{{>c}}}}}<!-- cat:Large SVG files -->|topic={{#switch:{{{topic|{{{what|{{{w|&#06;}}}}}}}}}<!-- "topic" for text diff with (Igen/top) in (created with/) -->|n|-|=-<!-- -->|&#06;={{#switch:{{{s|&#06;}}}<!-- -->|&#06;|n|-|={{#if:{{{su:|}}}|{{ucfirst:{{{su:}}}}}<!-- -->|{{{{#ifeq:{{{sc|}}}|u|u|l}}cfirst:{{{s:|{{{s-|{{{S:|{{#if:{{{sub:|}}}|''{{{sub:}}}''}}}}}}}}}}}}}}}<!-- -->|{{{s|}}}}}<!-- -->|{{#switch:{{#if:{{{topic|}}}|1|{{#if:{{{what|}}}|2|{{#if:{{{w|}}}|3}}}}}}<!-- unnested -->|1={{{topic}}}<!-- -->|2={{{what}}}<!-- -->|3={{{w}}}<!-- -->}}}}<!-- -->|other={{lc:{{padleft:|1|{{{1}}}}}}}<!-- to differ between "O" and "U" -->|item={{{item|{{{i|{{#if:{{{I|}}}|{{w{{{I}}}}}}}}}}}}}<!-- -->|type={{{type|}}}|par1={{{par1|}}}|par2={{{par2|}}}|mode={{{mode|}}}<!-- -->|style=float:left;vertical-align:middle<!-- -->|logo={{{logo|{{#if:{{{cw|}}}|{{{cw}}} logo.svg}}}}}<!-- {{{logo|}}} test -->}}}}<!-- «end #ifeq:{{{10}}}» into the same line: -->{{#ifeq:{{{1}}}|IA|{{Igen/amp|I|A|||topic={{{&s|{{{s|{{{w|}}}}}}}}}}}<!-- -->|{{#if:{{{&|{{{&&|{{{&k|{{{&m|}}}}}}}}}}}}<!-- any one of these triggers -->{{#switch:{{{&c|↓}}}|↓=|1}}{{#switch:{{{&l|↓}}}|↓=|1}}{{#switch:{{{&s|↓}}}|↓=|1}}<!-- if defined, empty or with value -->{{#switch:&|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->|{{Igen/amp|1={{#switch:Q|{{{&|Q}}}|{{padleft:|1|{{uc:{{{&}}}}}}}=QGIS|{{{&}}}}}<!-- -->|2={{{&&|{{#switch:{{lc:{{{1}}}}}|a|adobe|illustrator|adobe illustrator|adobe illustrator$|a$|av|ia=Adobe<!-- -->|i|inkscape|ic|ii|im|io|is|iz|i$|ai=Inkscape|?}}|}}}<!-- -->|3={{{1|}}}<!-- -->|&c={{#switch:{{{&c|&#06;}}}|&#06;=|n|-|=-|{{{&c}}}}}<!-- ?-? -->|&l={{#switch:{{{&l|&#06;}}}|&#06;=|n|-|=-|{{{&l}}}}}<!-- -->|&s={{#switch:{{{&s|&#06;}}}|&#06;=|n|-|=-|{{{&s}}}}}<!-- -->|&k={{{&k|}}} }}}}}}<!-- -->{{#switch:S&|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}<!-- S&: Simpl + rd -->|{{{10}}}|{{{11}}}|{{{12}}}|{{{13}}}|{{{35}}}=<!-- {{Igen/sni|&}} --><!-- 35 -->|{{#switch:S*|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}<!-- -->|{{{10}}}|{{{11}}}|{{{12}}}|{{{13}}}|{{{35}}}={{Igen/sni}}<!-- -->|{{#if:{{#switch:{{{rd|-}}}|-=|1}}{{#switch:rd|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{35}}}=1}}|{{Redrawn with Text Editor|{{{rd|}}}}}}}}}}}<!--35 -->{{#ifeq:{{lc:{{{1}}}}}|ic|{{Igen/amp|svgc|I|&c={{{&c|-}}}|topic={{{&s|{{{s|{{{w|}}}}}}}}}}} }}<!-- Tool "IC" -->{{#ifeq:{{lc:{{{1}}}}}|io|{{Igen/amp|svgo|I|&c={{{&c|-}}}|topic={{{&s|{{{s|{{{w|}}}}}}}}}}} }}<!-- Tool "IO" -->{{#ifeq:{{lc:{{{1}}}}}|is|{{Igen/amp|sopt|I|&c={{{&c|-}}}|topic={{{&s|{{{s|{{{w|}}}}}}}}}}} }}<!-- Tool "IS" others need the categorizing: -->{{#ifeq:{{lc:{{{1}}}}}|ii|{{Igen/amp|heraldicon|I|&c=Created with Heraldicon|&k=ZZZ|topic={{{&s|{{{s|{{{w|}}}}}}}}}}} }}<!-- if also same line required: -->{{#if:{{{1c|}}}|{{1color|{{{1cc|}}}|{{{1c}}}}}}}<!-- -->{{#switch:{{{%}}}|vv|vs|vf|f={{Igen/emb|{{{%}}}|f<!-- -->|s={{Igen/csf|{{{1}}}|{{{w|{{{s|}}}}}}}}|q={{{4|}}}|z={{{10|}}}}}<!-- -->|{{#switch:%f|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}={{Igen/emb|vf|f<!-- -->|s={{Igen/csf|{{{1}}}|{{{w|{{{s|}}}}}}}}|q={{{4|}}}|z={{{10|}}}}}}}}}<!-- -->{{#switch:{{{<}}}|vf|vl|vn|vs|vv={{Igen/ptx|f|sub=vv|v={{{<v|{{#ifeq:{{{s}}}|v|v}}}}}<!-- -->|s={{Igen/csf|{{{1}}}|{{{w|{{{s|}}}}}}}}|s2={{{<|}}}|{{#ifeq:{{{<}}}|vl|l}}}}}}<!-- -->{{#if:{{#switch:<|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->{{#switch:pathtext|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->|{{#switch:tl|{{{s}}}|{{{w}}}={{Igen/ptx|f|sub=vv|s=tl|l}}}}}}<!-- Text Logo -->{{#switch:%C|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{10}}}<!-- -->|{{{11}}}|{{{12}}}={{Igen/swv|s={{{s|{{{w|}}}}}}}}}}<!-- switch-controlled variations -->{{#if:{{{T2|}}}|{{clr}}{{{T2}}}|{{{t2|}}}}}<!-- -->{{#if:{{#switch:{{lc:{{{1}}}}}|a$|i$=1}}<!-- and Commonist (parameters "$ " and "c ") -->{{#switch:$|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- «$» Commonist -->{{#if:{{{$m|{{{cm|}}}}}}{{{$u|{{{cu|}}}}}}{{{$w|}}}|1}}<!-- -->{{#switch:{{{$c|↓<!-- {{{cc|}}} -->}}}|↓=|1}}{{#switch:{{{$f|{{{cf|↓}}}}}}|↓=|1}}<!-- if defined, empty or with value -->{{#switch:{{{$l|{{{cl|↓}}}}}}|↓=|1}}{{#switch:{{{$s|{{{cs|↓}}}}}}|↓=|1}}<!-- if defined, empty or with value -->|{{#switch:{{{$f|{{{cf|&#06;}}}}}}|&#06;|none|n|-|=|br=<br>|clr={{clr}}|{{{$f|{{{cf|}}}}}}}}<!-- linefeed before -->{{Commonist|{{{$u|{{{cu|}}}}}}|more={{{$m|{{{cm|}}}}}}<!-- -->|logo={{#switch:{{{$l|{{{cl|&#06;}}}}}}|&#06;=Commonist.svg|none|n|-|=-|{{{$l|{{{cl|}}}}}}}}<!-- -->|category={{#switch:{{{$c|&#06;<!-- {{{cc|}}} -->}}}|&#06;=|none|n|-|=-|{{{$c|<!-- {{{cc|}}} -->}}}}}<!-- -->|sub={{#switch:{{{$s|{{{cs|&#06;}}}}}}|&#06;|none|n|-|=|{{#invoke:Igenmod|subst|{{{$s|{{{cs|}}}}}}}}}}<!-- -->|user={{{U|}}}<!-- for possible subcategorizing -->|topic={{#if:{{{$w|{{{topic|{{{what|{{{w|{{{s|}}}}}}}}}}}}}}}<!-- -->|{{{$w|{{{topic|{{{what|{{{w|{{{s}}}}}}}}}}}}}}}}}<!-- -->|size={{#if:{{{>|}}}{{#switch:><!-- -->|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|big}}<!-- -->|err={{#if:{{{e|{{{err|}}}}}}|{{{e|{{{err}}}}}}<!-- Commonist with err ? -->|{{#ifeq:{{{2}}}|-1|-1|{{Igen/par|{{{2|}}}|3}}}}}}}}}}<!-- -->{{#if:{{{T3|}}}|{{clr}}{{{T3}}}|{{{t3|}}}}}<!-- -->{{#if:{{{%s|}}}{{#switch:%s|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}{{#ifeq:{{{%}}}|s|1}}<!-- -->|{{#if:{{{tr|}}}||{{Igen/emb|switch=s|1={{{%s|s}}}|s={{{w|{{{s|}}}}}}|v={{{%v|}}}|q={{{4|}}}|z={{{10|}}}}}}}<!-- -->|{{#if:{{{%a|}}}|{{Igen/emb|switch=S|1={{{%a|s}}}|s={{{w|{{{s|}}}}}}|v={{{%v|}}}|q={{{4|}}}|z={{{10|}}}}}<!-- -->|{{#if:{{{%S|}}}{{#switch:%S|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->|{{Igen/emb|switch=S|1={{{%S|s}}}|s={{{w|{{{s|}}}}}}|v={{{%v|}}}|q={{{4|}}}|z={{{10|}}}}}<!-- -->|{{#if:{{{%|}}}{{#switch:%|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->{{#switch:embedded|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->|{{Igen/emb|1={{{%|}}}|2=s|v={{#ifeq:{{{1}}}|Wpdc|n|{{#switch:{{{%}}}|r|v|V|i|n|-={{{%}}}}}}}<!-- -->|s={{Igen/csf|{{{1}}}|{{{w|{{{s|}}}}}}}}|q={{{4|}}}|z={{{10|}}}|t={{{1|}}}}}<!-- -->|{{#if:{{{%v|}}}{{#switch:%v|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->|{{Igen/emb|s={{{w|{{{s|}}}}}}|v={{{%v|v}}}|q={{{4|}}}|z={{{10|}}}}}<!-- -->|{{#if:{{{%i|}}}{{#switch:%i|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->|{{Igen/emb|i|v={{{%i|i}}}|s={{{w|{{{s|}}}}}}|q={{{4|}}}|z={{{10|}}}}}<!-- -->|{{#if:{{{%I|}}}{{#switch:%I|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->|{{Igen/emb|i|v={{{%I|i}}}|s={{{w|{{{s|}}}}}}|q={{{4|}}}|z={{{10|}}}}}<!-- -->{{Convert to multilang}}<!-- -->|{{#if:{{#switch:%n|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->{{#ifeq:{{{1}}}|Wpdc|1}}|{{Igen/emb|s={{Igen/csf|{{{1}}}|{{{w|{{{s|}}}}}}}}|v=n|q={{{4|}}}|z={{{10|}}}|t={{{1|}}}}}<!-- -->|{{#switch:%r|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}={{Igen/emb<!-- -->|s={{{w|{{{s|}}}}}}|v={{{%r|r}}}|q={{{4|}}}|z={{{10|}}}}}<!-- -->|{{#switch:%m|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}={{Igen/emb<!-- -->|s={{{w|{{{s|}}}}}}|v={{{%m|r}}}|q={{{4|}}}|z={{{10|}}}}}{{Convert to multilang|{{Igen/top|{{{w|{{{s|}}}}}}}}}}<!-- -->|{{#switch:%M|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}={{Igen/emb<!-- -->|s={{{w|{{{s|}}}}}}|v={{{%M|v}}}|q={{{4|}}}|z={{{10|}}}}}{{Convert to multilang|{{Igen/top|{{{w|{{{s|}}}}}}}}}}<!-- -->|{{#switch:%t|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}={{Igen/emb<!-- -->|s={{{w|{{{s|}}}}}}|v={{{%t|t}}}|q={{{4|}}}|z={{{10|}}}}}<!-- -->|{{#switch:%u|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}={{Igen/emb<!-- -->|s={{{w|{{{s|}}}}}}|v={{{%u|u}}}|q={{{4|}}}|z={{{10|}}}}} }}}}}}}} }}}}}}}}}}<!-- -->|{{#if:{{{%V|}}}|{{Igen/emb|s={{{w|{{{s|}}}}}}|v=&nbsp;{{{%V}}}|q={{{4|}}}|z={{{10|}}}}}}}}}}}}}}}<!-- /// -->{{#switch:%a|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{15}}}={{Add languages}}}}<!-- 15= -->{{#switch:%w|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{17}}}={{Invtext<!-- 17 -->|s={{{s|{{{w|}}}}}}|e={{#switch:{{{err|{{{e|&#06;}}}}}}|=0|-=|&#06;={{#if:{{Igen/par|{{{2|}}}<!-- -->|{{Igen/par|{{{2|}}}}}|0}}}}}}|3={{{%sc|{{{u|}}}}}}}}}}<!-- -->{{#switch:S+|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}<!-- -->|{{{10}}}|{{{11}}}|{{{12}}}|{{{13}}}|{{{35}}}={{Igen/sni|1={{{%p|+}}}}}}}<!-- after % -->{{#if:{{{T4|}}}|{{clr}}{{{T4}}}|{{{t4|}}}}}<!-- Graphic Lab: parameter "gs" (nl, sx) defaulted with "nl" -->{{#if:{{{glc|}}}|{{Igen/glc|{{{glc|}}}|{{{err|{{{e|{{{2|}}}}}}}}}|3={{{lang|}}}|4={{{nat|}}}<!-- Graphic Lab CoA -->|s={{{s|{{{w|}}}}}}|gc={{{gc|}}}|sd={{{sd|}}}|gt={{{1}}}|U={{{U|}}}|u={{{u|}}}|vs={{{vs|}}}<!-- -->|sub={{{sub|}}}|cat={{{cat2|}}}|gk={{{gk|{{{k|}}}}}}|gs={{{gs|nl}}}|gr={{{gr|}}}|gt2={{{gt|}}}}}<!-- while e.g. "g=de" or "gd" is for Graphic Lab_de, "glc=.." is for all the indiv. Graphic CoA Labs -->|{{#if:{{{gl|{{{g|}}}}}}|{{Igen/lab|{{{gl|{{{g|}}}}}}|{{#if:{{{gl|}}}|gl|g}}|s={{{s|{{{w|}}}}}}<!-- -->|k={{{gk|{{{k|}}}}}}|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}|6={{{gt|}}}}}}}<!-- -->{{#switch:gl|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=<!-- -->{{Igen/lab|en|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!-- -->{{#if:{{{gc|}}}{{#switch:gc|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!-- -->{{Igen/lab|Commons|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gc|{{{u|}}}}}}<!-- -->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!-- -->{{#if:{{{gb|}}}{{#switch:gb|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!-- -->{{Igen/lab|bn|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gb|{{{u|}}}}}}<!-- -->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!-- -->{{#if:{{{gB|}}}{{#switch:gB|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!-- -->{{Igen/lab|eu|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gB|{{{u|}}}}}}<!-- -->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!-- -->{{#if:{{{gd|}}}{{#switch:gd|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!-- -->{{Igen/lab|de|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gd|{{{u|}}}}}}<!-- -->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}|6={{{lc|}}}}}}}<!-- -->{{#if:{{{ge|}}}{{#switch:ge|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!-- -->{{Igen/lab|es|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{ge|{{{u|}}}}}}<!-- -->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!-- -->{{#if:{{{gf|}}}{{#switch:gf|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!-- -->{{Igen/lab|fr|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gf|{{{u|}}}}}}<!-- -->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!-- -->{{#if:{{{gi|}}}{{#switch:gi|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!-- -->{{Igen/lab|it|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gi|{{{u|}}}}}}<!-- -->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!-- -->{{#if:{{{gH|}}}{{#switch:gH|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!-- -->{{Igen/lab|ch|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gH|{{{u|}}}}}}<!-- -->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!-- -->{{#if:{{{gj|}}}{{#switch:gj|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!-- -->{{Igen/lab|he|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gj|{{{u|}}}}}}<!-- -->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!-- -->{{#if:{{{gr|}}}{{#switch:gr|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!-- -->{{Igen/lab|ru|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gr|{{{u|}}}}}}<!-- -->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!-- -->{{#if:{{{gP|}}}{{#switch:gP|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!-- -->{{Igen/lab|pl|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gP|{{{u|}}}}}}<!-- -->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!-- -->{{#if:{{{gs|}}}{{#switch:gs|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!-- -->{{Igen/lab|sv|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gs|{{{u|}}}}}}<!-- -->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!-- -->{{#if:{{{gt|}}}{{#switch:gt|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!-- -->{{Igen/lab|tr|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gt|{{{u|}}}}}}<!-- -->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!-- -->{{#if:{{{gw|}}}{{#switch:gw|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!-- -->{{Igen/lab|w|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gw|{{{u|}}}}}}<!-- -->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}} }}<!-- -->{{#if:{{#switch:fw|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->{{{fwc|{{{fwe|{{{fwo|{{{fwl|{{{fwt|{{{fws|}}}}}}}}}}}}}}}}}}<!-- any one of these (with value) triggers "Fotowerkstatt" -->|{{clr}}{{Fotowerkstatt|changes={{{fwc|}}}|editor={{{fwe|}}}|orig={{{fwo|}}}|orig-lang={{{fwl|}}}<!-- -->|topic={{{fwt|{{{w|{{{s|}}}}}}}}}|style={{{fws|margin:0}}}}}}}<!-- -->{{#if:{{{sd|}}}|{{#ifeq:{{{2}}}|n||{{#switch:{{{s}}}|ce|ee|eh={{Igen/csd|{{{e|{{{err|{{{2|0}}}}}}}}}|{{{1}}}|{{{sd}}}}}}}}}}}<!-- -->{{#if:{{{T5|}}}|{{clr}}{{{T5}}}|{{{t5|}}}}}<!-- -->{{#if:{{{^|}}}{{#switch:^|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->{{{^s|{{{^t|{{{^p|{{{^c|}}}}}}}}}}}}<!-- any one of these (with value) triggers "Valued image" -->|{{Igen/qui|{{{1|}}}|{{{2|}}}|{{{e|{{{err|}}}}}}|type={{{^|}}}<!-- (via "Quality image" stub) -->|scope={{{^s|}}}|time={{{^t|}}}|page={{{^p|}}}|cat={{{^c|}}}|top={{{^w|{{{w|{{{s|}}}}}}}}}|by={{{^b|}}}}}}}<!-- -->{{#if:{{{\+|}}}{{{\+r|}}}{{{\+l|}}}{{{\+t|}}}{{{\+u|}}}{{#switch:\+|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}<!-- -->|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->|{{Supersedes|{{{\+|}}}|{{{\+r|{{{\r|}}}}}}|{{{\+u|{{{\u|}}}}}}|lang={{{\+l|{{{\l|}}}}}}<!-- -->|{{#switch:{{{\+t|{{{\t|&#06;}}}}}}|&#06;={{{w|{{{s|}}}}}}|n|-|=|{{{\+t}}}}}|q=i}}}}<!-- other file inferior -->{{#if:{{{f|}}}|{{Igen/fif|{{{f}}}|cat={{{fc|}}}|topic={{{ft|{{{w|{{{s|}}}}}}}}}}}}}<!-- -->{{#if:{{{T6|}}}|{{clr}}{{{T6}}}|{{{t6|}}}}}<!-- disadvantages: -->{{#switch:{{{~}}}|&#06;|-|n|=|{{#if:{{{~|{{{Cdata|}}}{{{~k|{{{~u|{{{~U|}}}}}}}}}}}}{{#switch:{{{~|&#06;}}}|n|-|=1}}<!--💩 -->{{#switch:~|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->|{{Cdata|style=margin:0|sub={{#switch:{{{~|{{{Cdata|&#06;}}}}}}|n|-|=-<!-- -->|{{#if:{{{~u|{{{~U|{{{u|{{{U|}}}}}}}}}}}}|&#58; {{{~u|{{{~U|{{{u|{{{U|}}}}}}}}}}}}}}|{{{~|}}}}}<!-- -->|user={{#if:{{{U|{{{~U|}}}}}}|{{U|{{{U|{{{~U}}}}}}}}|{{{~u|{{{u|}}}}}}}}|U={{{U|{{{~U|}}}}}}|key={{{~k|}}}<!-- -->|topic={{#if:{{{topic|{{{what|{{{w|{{{s|}}}}}}}}}}}}|{{{topic|{{{what|{{{w|{{{s}}}}}}}}}}}}}}<!-- -->|bad={{#if:{{{!|}}}{{#switch:!|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--💩 -->|{{#ifeq:{{{!}}}|t||also}}}}}}}}}}<!-- -->{{#if:{{{!|}}}{{#switch:{{{!s|↓}}}|↓=|1}}{{#switch:{{{!c|↓}}}|↓=|1}}<!-- when one of these is defined, empty or with value -->{{#switch:!|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->|{{ {{#switch:{{{!}}}|f|x=Fake|r|t=Topo|#default=Bad}}SVG<!-- -->|1={{{!|}}}|2={{#switch:{{{1}}}|A|a|Illustrator|Adobe Illustrator|A$|a$|IA=Adobe-}}<!-- -->|style={{{style|{{#switch:{{{!}}}|t|f|r|x=|width:100%;border:2px red solid;margin:0}}}}}<!-- -->|subcat={{#switch:{{{!s|{{{subcat|&#06;}}}}}}|&#06;=|n|-|=-|{{#invoke:Igenmod|subst|{{{!s|{{{subcat|}}}}}}}}}}<!-- -->|category={{#switch:{{{!c|&#06;}}}|&#06;=|n|-|=-|{{{!c}}}}}<!-- -->|key={{{!k|}}}<!-- -->|badcat={{{U|{{{u|}}}}}}|vsub={{{vsub|}}}|topic={{{w|{{{s|}}}}}}<!-- -->|size={{#if:{{{>|}}}{{#switch:>|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|big}}}}}}<!-- -->{{#if:{{{?|}}}{{{??|}}}{{#switch:{{{?s|↓}}}|↓=|1}}<!-- when subcat ?s is defined, empty or with value -->{{{?b|}}}{{{?c|}}}{{{?d|}}}{{{?f|}}}{{{?o|}}}{{{?r|}}}{{{?u|}}}<!-- -->{{{?s|}}}{{{?w|}}}{{{?t|}}}{{{?k|}}}{{{?n|}}}{{{?p|}}}{{{?x|}}}<!-- -->{{#switch:?|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->|{{Rsvg bug|3={{{?b|}}}|4={{{?c|}}}|5={{{?d|}}}|6={{{?f|}}}|7={{{?o|}}}|8={{{?r|}}}|9={{{?u|}}}<!-- -->|2={{#switch:?|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=-}}<!-- -->|1={{{??|{{{?|{{#if:{{{?p|}}}|{{#invoke:Igenmod|split|{{{?p}}}|Igenbug}}}} }}}}}}<!-- -->|topic={{{?w|{{{topic|{{{what|{{{w|{{{s|}}}}}}}}}}}}}}}|name={{{?n|}}}<!-- -->|tool={{{?t|{{{1|}}}}}}|sub={{#switch:{{{?s|&#06;}}}|&#06;=|n|-|=-|{{{?s}}}}}|key={{{?k|}}}}}}}<!-- ?-? -->{{#switch:?x|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{10}}}<!-- -->|{{{11}}}|{{{12}}}|{{{13}}}|{{{21}}}|={{Rsvg bug|-|11=x}}}}<!-- flowRoot eXception -->{{#if:{{{<|{{{<s|}}}}}}{{#switch:<|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->{{#switch:pathtext|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->|{{Igen/ptx|s|sub={{{<|{{#switch:tl|{{{s}}}|{{{w}}}=vv}}}}}<!-- -->|v={{{<v|{{#ifeq:{{{s}}}|v|v}}}}}|s={{{<s|{{Igen/csf|{{{1}}}|{{{w|{{{s|}}}}}}}}|{{{vsub|}}}}}}<!-- -->|source={{{source|}}}|size={{#if:{{{>|}}}{{#switch:>|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}<!-- -->|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|big}}|cat={{#switch:{{{>c|&#06;}}}|&#06;=|n|-|=-|{{{>c|}}}}}}}<!-- -->|{{#switch:<n|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=<!-- -->{{Igen/ptx|s={{Igen/csf|{{{1}}}|{{{<s|{{{w|{{{s|}}}}}}}}}}}|v=n<!-- -->|cat={{#switch:{{{<c|&#06;}}}|&#06;=|n|-|=-|{{{<c|}}}}}}}<!-- -->|{{#switch:<v|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=<!-- -->{{Igen/ptx|s={{Igen/csf|{{{1}}}|{{{<s|{{{w|{{{s|}}}}}}}}}}}|v=v<!-- -->|cat={{#switch:{{{<c|&#06;}}}|&#06;=|n|-|=-|{{{<c|}}}}}}}<!-- -->|{{#switch:<i|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=<!-- -->{{Igen/ptx|sub=i|s={{{<s|{{{w|{{{s|}}}}}}}}}|v=i<!-- -->|cat={{#switch:{{{<c|&#06;}}}|&#06;=|n|-|=-|{{{<c|}}}}}}}}}<!-- -->|{{#switch:<h|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=<!-- -->{{Igen/ptx|sub=|s=h|v=<!-- -->|cat={{#switch:{{{<c|&#06;}}}|&#06;=|n|-|=-|{{{<c|}}}}}}}}}<!-- -->|{{#switch:<l|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=<!-- -->{{Igen/ptx|sub=|s=l|v=l<!-- standard: no cat -->|cat={{#switch:{{{<c|&#06;}}}|&#06;=|n|-|=-|{{{<c|}}}}}}}}} }}}}}}<!-- -->{{#switch:<x|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}{{{17}}}={{ShouldBeText}}}}<!-- 17= -->{{#if:{{{tw|}}}|{{Igen/twt|{{{tw|}}}<!-- Taken with -->|tc={{#switch:{{{tc|&#06;}}}|&#06;=|n|-|=-|{{{tc}}}}}<!-- -->|tl={{#switch:{{{tl|&#06;}}}|&#06;=|n|-|=-|{{{tl}}}}}<!-- -->|tx={{#switch:{{{tx|&#06;}}}|&#06;|n|-|=-|{{{tx}}}}}<!-- -->|tu={{#switch:{{{tu|&#06;}}}|n|-|=-|&#06;={{#if:{{{U|}}}|{{U|{{{U}}}}}|{{{u|{{{user|-}}}}}}}}|{{{tu}}}}}<!-- -->|+={{#switch:+|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=+}}}}}}<!-- -->{{#if:{{{§|{{{§s|}}}}}}{{#switch:§|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->|{{TracedSVG|{{{§|}}}|sub={{{§s|}}}|style=width:100%}}}}<!-- File generation description: 11= -->{{#if:{{{×|}}}{{#switch:×|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{11}}}=1}}<!-- -->{{#switch:×c|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}{{{×c|}}}<!-- -->{{#switch:×n|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}{{{×n|}}}<!-- -->{{#switch:×t|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}{{{×t|}}}<!-- -->{{#switch:{{{×c|&#06;}}}|n|-|=1}}{{#switch:{{{×n|&#06;}}}|n|-|=1}}{{#switch:{{{×t|&#06;}}}|n|-|=1}}<!-- -->|{{-}}{{SimplSVG|3=000|4={{{×|{{{×n|}}}}}}|5={{{×d|{{#if:{{{×|}}}|16x16}}}}}|6={{{×t|{{{w|{{{s|}}}}}}}}}<!-- -->|7={{#switch:×c|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=-<!-- category -->|{{#switch:×n|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=-<!-- -->|{{#if:{{#switch:{{{×c|&#06;}}}|n|-|=1}}{{#switch:{{{×n|&#06;}}}|n|-|=1}}|-<!-- -->|{{#switch:{{{×t|{{{w|{{{s|}}}}}}}}}|bi=&#58;BSicons{{#if:{{{×n|}}}|-unused}}|c|eh=&#58;CoAs<!-- subcat -->|d=&#58;Diagrams|f=&#58;Flags|i=&#58;Icons|l|tl=&#58;Logos|y|p|s=&#58;Symbols|jc=&#58;Crests<!-- -->|je|e|em=&#58;Emblems|m=&#58;Maps|n|-|=|&default={{{×t}}}}}}}}}}}{{{×s|}}}<!-- -->|8={{#switch:{{{×t|&#06;}}}|n|-|=||{{Igen/top|{{{×t|{{{w|{{{s|}}}}}}}}}|2=file|lang=en}}}}<!-- -->|9={{#switch:{{{err|{{{e|&#06;}}}}}}|=|&#06;={{#ifeq:{{{2}}}|-1|-1|{{Igen/par|{{{2|}}}}}}}|{{{err|{{{e|???}}}}}}}}<!-- -->|10={{#if:{{#switch:×n|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->{{#switch:{{{×n|&#06;}}}|n|-|=1}}{{{×n|}}}|⛔ '''''nowhere'' used''' ⛔}}<!-- -->|11={{{×k|}}}|12={{{×r|}}}|13={{{×q|}}}<!-- -->|style=margin:0}}}}<!--{{#if:{{#switch:×n|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}} {{#switch:{{{×n|&#06;}}}|n|-|=1}}|⛔ This {{igen/top|{{{×t|{{{w|{{{s|}}}}}}}}}}} is ''nowhere'' used ⛔}} {{#switch:××|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{11}}}{{{12}}}{{{13}}}={{UseXML}}}}<!-- -->{{#if:{{{××|}}}{{#switch:××|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}<!-- -->|{{{10}}}|{{{11}}}|{{{12}}}|{{{13}}}|{{{14}}}=1}}|{{UseXML|{{{××|}}}|style=margin:0}}}}<!-- -->{{#if:{{{R|}}}|{{clr}}}}{{#if:{{{editor|}}}{{{editoff|}}}{{{orig|}}}{{{origoff|}}}<!-- -->{{#switch:{{{R|?↓}}}|?↓=|1}}{{#switch:{{{r|↓}}}|↓=|1}}<!-- when defined, empty or with value -->|{{Retouched picture|{{#ifeq:{{{r}}}|-||{{{R|{{{r|}}}}}}}}|editor={{{editor|}}}|orig={{{orig|}}}<!-- -->|editoff={{{editoff|}}}|origoff={{{origoff|}}}<!-- -->|topic={{#if:{{{topic|{{{what|{{{w|{{{s|}}}}}}}}}}}}|{{{topic|{{{what|{{{w|{{{s}}}}}}}}}}}}}}}}}}<!-- -->{{#if:{{{\|}}}{{{\-|}}}{{{\-r|}}}{{{\-l|}}}{{{\x|}}}{{{\-x|}}}{{#switch:\|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}<!-- -->|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|{{Superseded|{{{\|{{{\-|}}}}}}|{{{\-r|{{{\r|}}}}}}|lang={{{\-l|{{{\l|}}}}}}<!-- -->|ext={{{\-x|{{{\x|{{#if:{{{\|}}}{{{\-|}}}||png}}}}}}}}<!-- -->|topic={{{\-t|{{{\-w|{{{\t|{{{\w|{{{topic|{{{what|{{{w|{{{s|}}}}}}}}}}}}}}}}}}}}}}}}|q=s}}<!-- other file supersedes -->{{#ifeq:{{{!}}}|f|[[Category:Fake SVG with raster version available|{{PAGENAME}}]]}}}}<!-- File generation description: 13= -->{{#if:{{{\\|}}}{{{\\r|}}}{{{\\l|}}}{{{\\q|}}}{{#switch:\\|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}<!-- -->|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{13}}}=1}}<!-- -->|{{Vector version available|{{{\\|}}}|q={{{\\q|{{{\q|}}}}}}|r={{{\\r|{{{\r|}}}}}}|lang={{{\\l|{{{\l|}}}}}}<!-- SupersededSVG -->|topic={{{\\t|{{{\\w|{{{\t|{{{\w|{{{topic|{{{what|{{{w|{{{s|}}}}}}}}}}}}}}}}}}}}}}}}}}}}<!-- -->{{#if:{{{\#|}}}{{#switch:\#|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{13}}}=1}}<!-- 13= -->|{{PDF version available|{{{\#|}}}}}}}<!-- PDF file -->{{#if:{{{T7|}}}|{{clr}}{{{T7}}}|{{{t7|}}}}}<!-- more special character parameters -->{{#switch:{{padleft:|1|{{{1}}}}}|*|@|(|)|_={{Igen/2nd|{{{1}}}|p=1}}}}<!-- -->{{#switch:{{padleft:|1|{{{2}}}}}|*|@|(|)|_={{Igen/2nd|{{{2}}}|p=2}}}}<!-- -->{{#switch:{{padleft:|1|{{{3}}}}}|*|@|(|)|_={{Igen/2nd|{{{3}}}|p=3}}}}<!-- -->{{#switch:{{padleft:|1|{{{4}}}}}|*|@|(|)|_={{Igen/2nd|{{{4}}}|p=4}}}}<!-- -->{{#switch:{{padleft:|1|{{{5}}}}}|*|@|(|)|_={{Igen/2nd|{{{5}}}|p=5}}}}<!-- -->{{#switch:{{padleft:|1|{{{6}}}}}|*|@|(|)|_={{Igen/2nd|{{{6}}}|p=6}}}}<!-- -->{{#switch:{{padleft:|1|{{{7}}}}}|*|@|(|)|_={{Igen/2nd|{{{7}}}|p=7}}}}<!-- -->{{#switch:{{padleft:|1|{{{8}}}}}|*|@|(|)|_={{Igen/2nd|{{{8}}}|p=8}}}}<!-- -->{{#switch:{{padleft:|1|{{{9}}}}}|*|@|(|)|_={{Igen/2nd|{{{9}}}|p=9}}}}<!-- -->{{#switch:{{padleft:|1|{{{10}}}}}|*|@|(|)|_={{Igen/2nd|{{{10}}}|p=10}}}}<!-- -->{{#switch:{{padleft:|1|{{{11}}}}}|*|@|(|)|_={{Igen/2nd|{{{11}}}|p=11}}}}<!-- -->{{#switch:{{padleft:|1|{{{12}}}}}|*|@|(|)|_={{Igen/2nd|{{{12}}}|p=12}}}}<!-- ---{{#switch:{{padleft:|1|{{{13}}}}}|*|@|(|)|_={{Igen/2nd|{{{13}}}|p=13}}}}-!-- ---{{#switch:{{padleft:|1|{{{14}}}}}|*|@|(|)|_={{Igen/2nd|{{{14}}}|p=14}}}}-!-- ---{{#switch:{{padleft:|1|{{{15}}}}}|*|@|(|)|_={{Igen/2nd|{{{15}}}|p=15}}}}-!-- -->{{#if:{{{*|}}}|{{Igen/2nd|{{{*}}}|c=*}}}}<!-- -->{{#if:{{{@|}}}|{{Igen/2nd|{{{@}}}|c=@}}}}<!-- -->{{#if:{{{(|}}}|{{Igen/2nd|{{{(}}}|c=(}}}}<!-- -->{{#if:{{{)|}}}|{{Igen/2nd|{{{)}}}|c=)}}}}<!-- -->{{#if:{{{_|}}}|{{Igen/2nd|{{{_}}}|c=_}}}}<!-- -->{{#if:{{{T8|}}}|{{clr}}{{{T8}}}|{{{t8|}}}}}<!-- -->{{#if:{{{→|}}}{{#switch:→|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{12}}}=1}}<!-- 12= -->|{{SVG|{{#if:{{{→|}}}|{{{→}}}|{{#if:{{{w|{{{s|}}}}}}|{{Igen/top|{{{w|{{{s}}}}}}}}}}}}}}<!--File generation description: -->|{{#if:{{{⇒|}}}{{#switch:⇒|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{12}}}=1}}<!-- -->|{{SVG|{{#if:{{{⇒|}}}|{{{⇒}}}|{{#if:{{{w|{{{s|}}}}}}|{{Igen/top|{{{w|{{{s}}}}}}}}}}}}|simple}} }}}}<!-- final tags: message boxes -->{{#if:{{#switch:{{{nu|-}}}|-=|1}}{{#switch:nu|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- parm ? -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{21}}}=1}}|{{clr}}{{NoUpdate|{{{nu|}}}|{{{nu2|}}}}}}}<!-- -->{{#if:{{#switch:{{{re|-}}}|-=|1}}{{#switch:re|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- parm -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{22}}}=1}}|{{clr}}{{Recent<!-- -->|style=width:auto;border:thin solid var(--border-color-progressive--active,#009);margin:0|iconsize=33x22|{{{re|}}}}}}}<!-- -->{{#if:{{#switch:{{{rs|-}}}|-=|1}}{{#switch:rs|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{38}}}=1}}|{{clr}}{{Restoration|style=margin:0}}}}<!-- -->{{#if:{{#switch:{{{up|-}}}|-=|1}}{{#switch:up|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{23}}}=1}}|{{clr}}{{Update<!-- -->|style=width:auto;border:thin solid var(--border-color-warning,#966);margin:0|iconsize=48|{{{up|}}}}}}}<!-- -->{{#if:{{#switch:{{{lh|-}}}|-=|1}}{{#switch:lh|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{24}}}=1}}|<!-- {{clr}} -->{{Logo history|{{{lh}}}|style=margin:0;border:2px solid var(--border-color-content-added,#ccf)}}}}<!-- -->{{#if:{{#switch:{{{ci|-}}}|-=|1}}{{#switch:ci|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{25}}}=1}}|{{Current<!-- /i18n -->|style=width:auto;border:thin solid var(--border-color-notice,#333);margin:0|iconsize=40|s={{{w|{{{s|}}}}}}|{{{ci}}}|{{{ci2|}}}}}}}<!-- -->{{#if:{{#switch:{{{ov|-}}}|-=|1}}{{#switch:ov|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{26}}}=1}}|{{clr}}{{Overlay<!-- -->|iconsize=36|style=margin:0;padding:0;border:2px solid var(--border-color-interactive,#88a);|{{{ov|}}}}}}}<!-- -->{{#if:{{#switch:{{{oq|-}}}|-=|1}}{{#switch:oq|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{27}}}=1}}|{{Opaque|1={{{s|{{{w|}}}}}}}}}}<!-- -->{{#if:{{#switch:{{{tr|-}}}|-=|1}}{{#switch:tr|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{28}}}=1}}|{{Translate|switch={{{tr|}}}|style=margin:0<!-- -->|topic={{#if:{{{tr|{{{w|{{{s|}}}}}}}}}|{{Igen/top|{{{tr|{{{w|{{{s|}}}}}}}}}}}}}}}}}<!-- -->{{#if:{{#switch:{{{in|-}}}|-=|1}}{{#switch:in|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{29}}}=1}}|{{Convert to international|{{Igen/top|{{{w|{{{s|}}}}}}}}<!-- -->|style=margin:0;width:auto}}}}<!-- -->{{#if:{{#switch:{{{ml|-}}}|-=|1}}{{#switch:ml|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{30}}}=1}}|{{Convert to multilang|{{Igen/top|{{{w|{{{s|}}}}}}}}}}}}<!-- -->{{#if:{{#switch:{{{wc|-}}}|-=|1}}{{#switch:wc|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{31}}}=1}}|{{Convert to wikichart|{{Igen/top|{{{w|{{{s|}}}}}}}}-->chart -->|style=margin:0;width:auto}}}}<!-- -->{{#if:{{#switch:{{{wt|-}}}|-=|1}}{{#switch:wt|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{32}}}=1}}|{{Convert to wikitable|{{Igen/top|{{{w|{{{s|}}}}}}}}<!--table -->|style=width:auto;border:thin solid var(--border-color-content-removed,#f4c430);margin:0}}}}<!-- -->{{#if:{{#switch:{{{bl|-}}}|-=|1}}{{#switch:bl|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{33}}}=1}}|{{Colour blind|{{{s|{{{w|}}}}}}|{{{bl|}}}}}}}<!-- -->{{#if:{{#switch:{{{ff|-}}}|-=|1}}{{#switch:ff|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{34}}}=1}}|{{Fictitious flag|{{{ff|{{{s|}}}}}}}}}}<!-- -->{{#if:{{#switch:{{{fi|-}}}|-=|1}}{{#switch:fi|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{36}}}=1}}|{{Fake flag|{{{fi|{{{s|}}}}}}}}}}<!-- -->{{#if:{{#switch:{{{ob|-}}}|-=|1}}{{#switch:ob|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{41}}}=1}}|{{Out of borders|{{{ob|{{{s|}}}}}}}}}}<!-- -->{{#if:{{#switch:{{{ar|-}}}|-=|1}}{{#switch:ar|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{42}}}=1}}|{{Artifacts|{{{ar|{{{s|}}}}}}}}}}<!-- -->{{#if:{{#switch:{{{bf|-}}}|-=|1}}{{#switch:bf|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{37}}}=1}}|{{Broken file|description={{{bf|}}}<!-- -->|filetype={{#invoke:Igenmod|exttext}}|topic={{{s|{{{w|}}}}}}|cat={{{bfc|}}}}}}}<!-- -->{{#if:{{#switch:{{{dm|-}}}|-=|1}}{{#switch:dm|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{43}}}=1}}|{{Inaccurate-map-disputed|{{{dm|}}}<!-- -->|style=width:64%;border:thin solid var(--border-color-warning,#966);margin:0|iconsize=48<!-- -->|imageright=[[File:Ambox globe content.svg|40px]]}}}}<!-- border:1px solid red;margin:0;background-color:#FFFAFA -->{{#switch:cb|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{13}}}|{{{14}}}|{{{43}}}={{Coablazon}}}}<!-- -->{{#switch:rf|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{13}}}|{{{14}}}|{{{44}}}={{COAref}}}}<!-- tw...imageright=[[File:Ambox globe content.svg|60px|link=]] -->{{#if:{{#switch:{{{zf|-}}}|-=|1}}{{#switch:zf|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{39}}}=1}}|{{User:ZooFari/Template:SVG|topic={{{s|}}}}}}}<!-- -->{{#if:{{#switch:{{{ni|←}}}|←=|1}}{{#switch:ni|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- parm -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{14}}}=1}}|{{clr}}{{NoInkscape|{{{ni|{{{←|}}}}}}|style=margin:0}}}}<!-- -->{{#if:{{{←|}}}{{#switch:←|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- -->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{14}}}=1}}<!-- -->{{{←s|}}}{{{←t|}}}|{{NoInkscape|1={{{←|{{#if:{{{%s|}}}{{#switch:%s|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}<!-- -->|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|+}}}}}|style={{#switch:{{{←s}}}|0=margin:0;border:1px solid var(--border-color-notice,#333)<!-- -->|h=background:var(--background-color-error-subtle,#FDA);color: inherit;margin-bottom:0|t=width:auto;margin:0;border:{{#if:{{{tr|}}}|4px double|2px solid}} var(--border-color-warning,#633)<!-- -->|0h|h0=margin:0;background:var(--background-color-warning-subtle,#FED);color: inherit;border:var(--border-color-content-removed,#EC9) solid|#default={{{←s|}}}}}|topic={{{←t|{{{w|{{{s|}}}}}}}}}}}}}<!-- -->{{#if:{{{←←|}}}{{#switch:←←|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{14}}}=1}}<!-- ←← -->|{{Igen/sni|{{{←←|-}}}}}}}<!-- -->{{#switch:1.2|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{16}}}={{SVG 1.2<!-- 16= -->|style=margin:0;border-left:2px solid var(--border-color-content-removed,#F4C430)|topic={{{w|}}}}}}}<!-- (? flowRoot exception) -->{{#if:{{{°|}}}{{#switch:°|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- -->|{{Easy-border|1={{{w|{{{s|}}}}}}|pixel={{{°|}}}}}}}<!-- -->{{#switch:—|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{18}}}<!-- 18= -->=[[Category:Unused SVG images]]}}<!-- -->{{#if:{{{T9|}}}|{{clr}}{{{T9}}}|{{{t9|}}}}}<!-- -->{{#if:{{{msg|}}}|{{Igen/msg|{{{msg}}}}}}}<!-- more message boxes -->{{#if:{{{T|}}}|{{clr}}{{{T}}}|{{{t|}}}}}</div><!-- final trail -->{{#switch:{{{cc|y}}}|n|-|=|{{#if:{{{c4|{{{c5|{{{c6|}}}}}}}}}<!-- not when "cc=", "cc-n", "cc=-" -->|{{Igen/cat|{{#ifeq:{{#invoke:Igenmod|extcode}}|s|{{#if:{{Igen/par|{{{2|}}}}}|Inv|V}}alid SVG<!-- -->|{{#invoke:Igenmod|exttext}}}} created with different tools code}}}}}}<!-- -->{{#if:{{{c1|{{{code|{{{source|{{{script|{{{c2|{{{c3|}}}}}}}}}}}}}}}}}}|{{Created with code<!-- -->|+={{{+c|}}}|nt={{#switch:{{{nt|&#06;}}}|&#06;=××}}|cc={{{cc|}}}<!-- -->|c1={{{c1|{{{code|{{{source|{{{script|}}}}}}}}}}}}<!-- -->|h1={{#if:{{{h1|{{{title|}}}}}}|{{{h1|{{{title|}}}}}}|{{#if:{{{p1|}}}<!-- -->|Suggested ''preferable'' SVG |{{Igen/cod|{{{1|}}}|H1|{{{l1|}}}}}}}}}<!-- -->|l1={{#if:{{{l1|{{{syntax|}}}}}}|{{{l1|{{{syntax|}}}}}}|{{Igen/cod|{{{1|}}}|L1}}}}<!-- -->|n1={{#if:{{{n1|}}}|{{{n1}}}|{{#if:{{{p1|}}}|&nbsp;'''''this'' code''' needs {{{p1}}} bytes.}}}}<!-- -->|e1={{{e1|}}}|d1={{{d1|}}}|f1={{{f1|{{{format|}}}}}}|g1={{{g1|}}}|s1={{{s1|{{{collapse|}}}}}}<!-- -->|c2={{{c2|{{{code2|{{{c5|}}}}}}}}}|h2={{{h2|{{{title2|{{Igen/cod|{{{1|}}}|H2}}}}}}}}<!-- -->|l2={{#if:{{{l2|{{{syntax2|}}}}}}|{{{l2|{{{syntax2|}}}}}}|{{Igen/cod|{{{1|}}}|L2}}}}|n2={{{n2|}}}<!-- -->|e2={{{e2|}}}|d2={{{d2|}}}|f2={{{f2|{{{format2|}}}}}}|g2={{{g2|}}}|s2={{{s2|{{{collapse2|}}}}}}<!-- -->|c3={{{c3|{{{code3|{{{c6|}}}}}}}}}|h3={{{h3|{{{title3|{{Igen/cod|{{{1|}}}|H3}}}}}}}}<!-- -->|l3={{#if:{{{l3|{{{syntax3|}}}}}}|{{{l3|{{{syntax3|}}}}}}|{{Igen/cod|{{{1|}}}|L3}}}}|n3={{{n3|}}}<!-- -->|e3={{{e3|}}}|d3={{{d3|}}}|f3={{{f3|{{{format3|}}}}}}|g3={{{g3|}}}|s3={{{s3|{{{collapse3|}}}}}}<!-- -->}}}}<!-- -->}}<!-- ==end of template== -->{{#if:{{{cat2|}}}|{{Igen/cat|{{{cat2}}}}}}}<!-- required 2nd cat -->{{#if:{{{cat3|}}}|{{Igen/cat|{{{cat3}}}}}}}<!-- required 3rd cat -->{{#if:{{{cat4|}}}|{{Igen/cat|{{{cat4}}}}}}}<!-- required 4th cat -->{{#if:{{{U|{{{u|{{{user|}}}}}}}}}|{{Igen/usr<!-- required user treatment -->|{{{topic|{{{s|{{{topic|{{{w|{{{what|{{{vsub|{{{Vs|}}}}}}}}}}}}}}}}}}}}}|{{{U|{{{u|{{{user|}}}}}}}}}}}}}<!-- -->{{#switch:-|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}={{-}}}}<!-- {{#switch:€|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}= ?? }} future additional categorizings: {{#if:{{{_|}}}|{{Igen/cat|{{{_}}}}}}} derivativeFX, LrMediaWiki, Open Access Media Importer, VicuñaUploader, -->{{#if:{{{l|{{{L|}}}}}}|{{Igen/upl|{{{l|{{{L}}}}}}}}}}<!-- maintanance categories: -->{{#if:{{{T|}}}|{{Igen/cat|Commons:Maint:Igen:T}}}}<!-- -->{{#switch:{{lc:{{{1|<noinclude>A</noinclude>}}}}} |a|a$|ai|adobe|illustrator |ah|ai|b|c|d|e|f|g|gimp|h |i|ia|ib|ic|ih|ii|i$|im|ims|inkscape|io|is|itb |j|k|l|m|matlab|n|ne|o|p|ps|q|r|s|sodipodi |t|text editor|t-|s- |u|v|vfpt|vm|w|wpdc|x|=|{{#ifexist:Template:{{Igen/cwt|{{{1|}}}<!-- -->|{{{e|{{{err|{{{2}}}}}}}}}|{{{n|{{{N|{{{name|}}}}}}}}}}}<!-- -->|{{Igen/2nd|<!-- [[Category:Igen 2nd check]] -->}}|[[Category:Igen tool notfd]]<!-- -->{{error|Igen tool "{{Igen/cwt|{{{1|}}}|{{{e|{{{err|{{{2}}}}}}}}}|{{{n|{{{N|{{{name|}}}}}}}}}}}" notfd}}}}}}<!-- --></onlyinclude><noinclude> {{Protected}} {{documentation}} </noinclude> lxxzpim0hmtpjo0aa3esgmce2eiluzn Tempilet:Information field 10 1309 10631 2025-01-06T21:35:37Z commons>Mdaniels5757 0 Have "Creator" field set id so the file doesn't end up in [[:Category:Files with no machine-readable author]]. Using the id parameter would be better, but there are already millions of files that need this, but don't use it. 10631 wikitext text/x-wiki <noinclude><table class="toccolours" style="width: 100%"></noinclude><tr style="vertical-align: top"><!-- === Left side: name field === --><td style="{{{style|}}}" class="fileinfo-paramfield {{{class|}}}" {{#if:{{{id|}}}|id="{{{id|}}}"|{{#ifeq:{{{name|{{{Name|{{{1|<noinclude>{{{name}}}</noinclude>}}}}}}}}}|Creator|id = "fileinfotpl_aut"|}}}}><!-- -->{{{name|{{{Name|{{{1|<noinclude>{{{name}}}</noinclude>}}}}}}}}}<div style="display: none;">InfoField</div><!-- --></td><!-- === Right side: value field === --><td style="{{{stylevalue|}}}" ><!-- -->{{#if:{{{stylevalue|}}}{{{classvalue|}}}{{{style|}}}{{{class|}}}{{{id|}}}|[[Category:Information field template with formatting]]}}<!-- -->{{#if:{{{classvalue|}}}<!-- -->|<span class="{{{classvalue|}}}"> {{{value|{{{Value|{{{2|<noinclude>{{{value}}}</noinclude>}}}}}}}}}</span><!-- -->| {{{value|{{{Value|{{{2|<noinclude>{{{value}}}</noinclude>}}}}}}}}}<!-- -->}}<!-- --></td> </tr><noinclude></table> {{documentation}} </noinclude> gx463m9oahud8uaoo29abw5ht5fsc1n 10632 10631 2026-08-25T23:38:25Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Information_field]] 10631 wikitext text/x-wiki <noinclude><table class="toccolours" style="width: 100%"></noinclude><tr style="vertical-align: top"><!-- === Left side: name field === --><td style="{{{style|}}}" class="fileinfo-paramfield {{{class|}}}" {{#if:{{{id|}}}|id="{{{id|}}}"|{{#ifeq:{{{name|{{{Name|{{{1|<noinclude>{{{name}}}</noinclude>}}}}}}}}}|Creator|id = "fileinfotpl_aut"|}}}}><!-- -->{{{name|{{{Name|{{{1|<noinclude>{{{name}}}</noinclude>}}}}}}}}}<div style="display: none;">InfoField</div><!-- --></td><!-- === Right side: value field === --><td style="{{{stylevalue|}}}" ><!-- -->{{#if:{{{stylevalue|}}}{{{classvalue|}}}{{{style|}}}{{{class|}}}{{{id|}}}|[[Category:Information field template with formatting]]}}<!-- -->{{#if:{{{classvalue|}}}<!-- -->|<span class="{{{classvalue|}}}"> {{{value|{{{Value|{{{2|<noinclude>{{{value}}}</noinclude>}}}}}}}}}</span><!-- -->| {{{value|{{{Value|{{{2|<noinclude>{{{value}}}</noinclude>}}}}}}}}}<!-- -->}}<!-- --></td> </tr><noinclude></table> {{documentation}} </noinclude> gx463m9oahud8uaoo29abw5ht5fsc1n Tempilet:Created with/layout 10 1310 10633 2025-10-15T18:42:35Z commons>Lucas Werkmeister 0 fulfilling edit request by [[User:Derbeth]] – replace [[Template:lang]] (which adds an inappropriate "description" class) with direct lang= and dir= attributes (and also use {{USERLANGUAGE}} instead of {{int:lang}} while we’re at it, see [[phabricator:T4085|T4085]]); previously tested on the sandbox at [[Special:Diff/1098484891]] 10633 wikitext text/x-wiki {{#tag:div|{{#switch:{{{logo|-}}}|-|=|#default=<!-- when there is a logo, it can be a file - or a Unicode codepoint -->{{#if:{{#switch:{{padleft:|2|{{{logo}}}}}|U+|&#=1}}{{#switch:{{{iconsize|}}}|0|-|=|1}}<!- -->|{{#invoke:Logoform|format|{{{logo}}}|{{#switch:{{{iconsize|}}}|0|-|=0|{{{iconsize}}}}}|{{{ustyle|-}}}}}<!-- -->|[[File:{{{logo}}}|33x22px]]}} }}&nbsp;<!-- -->{{{text|empty}}}<!-- -->{{#if:{{{more|}}}|{{{more}}}}}<!-- -->|{{#if:{{{text|}}}|lang={{#bcp47:{{{lang|{{USERLANGUAGE}}}}}}}|}}<!-- -->|{{#if:{{{text|}}}|dir={{#dir:{{{lang|{{USERLANGUAGE}}}}}}}|}}<!-- -->|style=display:table;width:{{{width|auto}}};vertical-align:middle;<!-- -->direction:{{#dir:{{{lang|{{int:lang}}}}}}};float:{{#ifeq:{{#dir:{{{lang|{{int:lang}}}}}}}|rtl|right|left}}<!-- }} -->;line-height:{{{h|2}}}2px;height:{{{h|2}}}4px;font-size:.96em;<!-- modify these attributes: -->margin:0px;padding:2px 4px 2px 6px;color:var(--color-base,#000);background:var(--background-color-neutral-subtle,#F8F9FA);border:1px solid #BAB;border-collapse:separate;border-spacing:0px;<!-- -->{{{style|}}}<!-- class=createdwithtemplate;layouttemplate -->}}<noinclude> {{Documentation|{{ifsandbox|doc}}}} </noinclude> 83ymdvewkanm1jb8k8ouli6rrbgdr1z 10634 10633 2026-08-25T23:38:26Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Created_with/layout]] 10633 wikitext text/x-wiki {{#tag:div|{{#switch:{{{logo|-}}}|-|=|#default=<!-- when there is a logo, it can be a file - or a Unicode codepoint -->{{#if:{{#switch:{{padleft:|2|{{{logo}}}}}|U+|&#=1}}{{#switch:{{{iconsize|}}}|0|-|=|1}}<!- -->|{{#invoke:Logoform|format|{{{logo}}}|{{#switch:{{{iconsize|}}}|0|-|=0|{{{iconsize}}}}}|{{{ustyle|-}}}}}<!-- -->|[[File:{{{logo}}}|33x22px]]}} }}&nbsp;<!-- -->{{{text|empty}}}<!-- -->{{#if:{{{more|}}}|{{{more}}}}}<!-- -->|{{#if:{{{text|}}}|lang={{#bcp47:{{{lang|{{USERLANGUAGE}}}}}}}|}}<!-- -->|{{#if:{{{text|}}}|dir={{#dir:{{{lang|{{USERLANGUAGE}}}}}}}|}}<!-- -->|style=display:table;width:{{{width|auto}}};vertical-align:middle;<!-- -->direction:{{#dir:{{{lang|{{int:lang}}}}}}};float:{{#ifeq:{{#dir:{{{lang|{{int:lang}}}}}}}|rtl|right|left}}<!-- }} -->;line-height:{{{h|2}}}2px;height:{{{h|2}}}4px;font-size:.96em;<!-- modify these attributes: -->margin:0px;padding:2px 4px 2px 6px;color:var(--color-base,#000);background:var(--background-color-neutral-subtle,#F8F9FA);border:1px solid #BAB;border-collapse:separate;border-spacing:0px;<!-- -->{{{style|}}}<!-- class=createdwithtemplate;layouttemplate -->}}<noinclude> {{Documentation|{{ifsandbox|doc}}}} </noinclude> 83ymdvewkanm1jb8k8ouli6rrbgdr1z Module:ISOdate 828 1311 10635 2024-07-29T00:52:40Z commons>Jarekt 0 10635 Scribunto text/plain --[[ __ __ _ _ ___ ____ ___ _ _ | \/ | ___ __| |_ _| | ___ _|_ _/ ___| / _ \ __| | __ _| |_ ___ | |\/| |/ _ \ / _` | | | | |/ _ (_)| |\___ \| | | |/ _` |/ _` | __/ _ \ | | | | (_) | (_| | |_| | | __/_ | | ___) | |_| | (_| | (_| | || __/ |_| |_|\___/ \__,_|\__,_|_|\___(_)___|____/ \___/ \__,_|\__,_|\__\___| This module is intended for processing of date strings. Please do not modify this code without applying the changes first at Module:ISOdate/sandbox and testing at Module:ISOdate/sandbox/testcases and Module talk:ISOdate/sandbox/testcases. Authors and maintainers: * User:Parent5446 - original version of the function mimicking template:ISOdate * User:Jarekt - original version of the functions mimicking template:Date and template:ISOyear ]] -- ======================================= -- === Dependencies ====================== -- ======================================= local Date = require('Module:DateI18n')._Date -- ======================================= -- === Local Functions =================== -- ======================================= local function parse_ISOdate(datestr) -- Core function of this module, which splits "datestr" contining date in ISO format into Year, month, day, ... components -- Output is "datevec" array with numbers representing date components. We also return "tail" storing text following the date -- pattern: regexp - regular expresion to test; dlen - number of date elements; tail = which element is a "tail" if any -- regexp hints: -- 1) Strings starting with "^" and ending with "$" indicate whole string match -- 2) optional tail part copied as-is and following the main parsed part of the date have to be separated from the date by a whitespace, so "(\s.+)?" local patterns = { -- strings starting with YYYY-MM-DD HH:MM:SS. Year 4 digits (if we know seconds than it was within the last 100 years), the rest 1-2 -- date and time can be separated by space or "T" and there could be a "Z" on the end indicating "Zulu" time zone {dlen=6, tail=7, regexp="^+?(%d%d%d%d)-(%d%d?)-(%d%d?)[ T](%d%d?):(%d%d?):(%d%d?)Z?(%s.*)"}, {dlen=6, tail=0, regexp="^+?(%d%d%d%d)-(%d%d?)-(%d%d?)[ T](%d%d?):(%d%d?):(%d%d?)Z?$"}, -- strings starting with YYYY-MM-DD HH:MM. Year 4 digits, the rest 1-2 -- (if one knows hour and minute than it was probably after a year 1000) {dlen=5, tail=6, regexp="^+?(%d%d%d%d)-(%d%d?)-(%d%d?)[ T](%d%d?):(%d%d?)(%s.+)"}, {dlen=5, tail=0, regexp="^+?(%d%d%d%d)-(%d%d?)-(%d%d?)[ T](%d%d?):(%d%d?)$"}, -- strings starting with YYYY-MM-DD. Year 1-4 digits, the rest 1-2 {dlen=3, tail=4, regexp="^+?(%d%d?%d?%d?)-(%d%d?)-(%d%d?)(%s.+)"}, {dlen=3, tail=0, regexp="^+?(%d%d?%d?%d?)-(%d%d?)-(%d%d?)$"}, -- strings starting with YYYY-MM. Year 3-4 digits, month 2 digits -- (want to avoit converting to dates strings like 10-5 = 5 {dlen=2, tail=3, regexp="^+?(%d%d%d%d?)-(%d%d)(%s.+)"}, -- if whole string is in YYYY-MM form: If Year 1-4 digits, month 1-2 digits {dlen=2, tail=0, regexp="^+?(%d%d?%d?%d?)-(%d%d?)$"}, -- string starts with a number -> it has to be 3 or 4 digit long to be a year {dlen=1, tail=2, regexp="^+?(%d%d%d%d?)(%s.+)"}, -- if whole string is a number (1-4 digit long) than it will be interpreted as a year {dlen=1, tail=0, regexp="^+?(%d%d?%d?%d?)$"}, } -- create datevec based on which variables are provided local datevec = {} local tail = '' for i, pat in ipairs( patterns ) do local vec = {datestr:match( pat.regexp )} if vec and vec[1]~=nil then for j=1, pat.dlen do datevec[j] = vec[j] end if pat.tail>0 and vec[pat.tail]~=nil then tail = mw.ustring.gsub(' ' .. vec[pat.tail], ' +', ' ') end break end end if not datevec[1] or datevec[1]=='' then -- quickly return if datestr does not look like date (it could be a template) return nil, nil end return datevec, tail end -- ================================================== -- === External functions =========================== -- ================================================== local p = {} -- =========================================================================== -- === Version of the function to be called from other LUA codes -- =========================================================================== function p._ISOyear( datestr ) -- if empty string then return it datestr = mw.text.trim(datestr or '' ) if datestr == '' then return '' end -- if number then return it if tonumber( datestr ) then return mw.ustring.format( '%04i', datestr ) end -- otherwise use regular expression match datestr = mw.ustring.match( datestr, '^+?(-?%d%d?%d?%d?)-' ) if datestr and tonumber( datestr ) then return mw.ustring.format( '%04i', datestr ) else return '' end end function p._ISOdate(datestr, lang, case, class, trim_year) datestr = mw.text.trim(datestr or '' ) local datevec, tail = parse_ISOdate(datestr) if not datevec then return datestr, false -- quickly return if datestr does not look like date (it could be a template) end -- call p._Date function to format date string local datestr2 = Date(datevec, lang, case, class, trim_year) if datestr2~='' then return mw.text.trim( datestr2 .. tail), true else -- in case of errors return the original string return datestr, false end end -- =========================================================================== -- === Versions of the function to be called from template namespace -- =========================================================================== --[[ ISOdate This function is the core part of the ISOdate template. Usage: {{#invoke:ISOdate|ISOdate|target_string|lang=}} Parameters: 1: The date string lang: The language to display it in form: Language format (genitive, etc.) for some languages class: CSS class for the <time> node Error Handling: If the string does not look like it contain the proper ISO date than the function will return the original string. That is the preferred treatment for the template:Information (and similar templates) which calling it. ]] function p.ISOdate(frame) local args = {} for name, value in pairs( frame.args ) do if value ~= '' then -- nuke empty strings if type(name)=='string' then name = string.gsub( string.lower(name), ' ', '_') end args[name] = value end end local datestr, succeded = p._ISOdate( args[1] or '', args.lang, -- language args.case, -- allows to specify grammatical case for the month for languages that use them args.class or 'dtstart', -- allows to set the html class of the time node where the date is included. args.trim_year or '100-999' -- by default pad one and 2 digit years to be 4 digit long, while keeping 3 digit years as is ) return datestr end --[[ ISOyear This function returns year part of date string. Usage: {{#invoke:ISOdate|ISOyear|target_string}} Parameters 1: The date string Error Handling: If the string does not look like it contain the year than the function will not return anything. That is the preferred treatment for the template:Creator which is the main (only?) template calling it. ]] function p.ISOyear( frame ) return p._ISOyear( frame.args[1] ) end --[[ ISOdate_part This function returns any part of the date string (if present) Usage: {{#invoke:ISOdate|ISOdate_part|target_string|part number}} Parameters 1: The date string 2: part number: 1-year, 2-month, 3-day, 4-hour, 5-minute, 6-second ]] function p.ISOdate_part(frame) local date_str = mw.text.trim(frame.args[1] or '' ) local part_num = tonumber(frame.args[2] or '1') local datevec, tail = parse_ISOdate(date_str) return tonumber(datevec[part_num] or '0') end return p j51gno421zkjvrao1w2p9mbv5i3kbic 10636 10635 2026-08-25T23:38:26Z RAPTOR7762 18 1 revision imported from [[:commons:Module:ISOdate]] 10635 Scribunto text/plain --[[ __ __ _ _ ___ ____ ___ _ _ | \/ | ___ __| |_ _| | ___ _|_ _/ ___| / _ \ __| | __ _| |_ ___ | |\/| |/ _ \ / _` | | | | |/ _ (_)| |\___ \| | | |/ _` |/ _` | __/ _ \ | | | | (_) | (_| | |_| | | __/_ | | ___) | |_| | (_| | (_| | || __/ |_| |_|\___/ \__,_|\__,_|_|\___(_)___|____/ \___/ \__,_|\__,_|\__\___| This module is intended for processing of date strings. Please do not modify this code without applying the changes first at Module:ISOdate/sandbox and testing at Module:ISOdate/sandbox/testcases and Module talk:ISOdate/sandbox/testcases. Authors and maintainers: * User:Parent5446 - original version of the function mimicking template:ISOdate * User:Jarekt - original version of the functions mimicking template:Date and template:ISOyear ]] -- ======================================= -- === Dependencies ====================== -- ======================================= local Date = require('Module:DateI18n')._Date -- ======================================= -- === Local Functions =================== -- ======================================= local function parse_ISOdate(datestr) -- Core function of this module, which splits "datestr" contining date in ISO format into Year, month, day, ... components -- Output is "datevec" array with numbers representing date components. We also return "tail" storing text following the date -- pattern: regexp - regular expresion to test; dlen - number of date elements; tail = which element is a "tail" if any -- regexp hints: -- 1) Strings starting with "^" and ending with "$" indicate whole string match -- 2) optional tail part copied as-is and following the main parsed part of the date have to be separated from the date by a whitespace, so "(\s.+)?" local patterns = { -- strings starting with YYYY-MM-DD HH:MM:SS. Year 4 digits (if we know seconds than it was within the last 100 years), the rest 1-2 -- date and time can be separated by space or "T" and there could be a "Z" on the end indicating "Zulu" time zone {dlen=6, tail=7, regexp="^+?(%d%d%d%d)-(%d%d?)-(%d%d?)[ T](%d%d?):(%d%d?):(%d%d?)Z?(%s.*)"}, {dlen=6, tail=0, regexp="^+?(%d%d%d%d)-(%d%d?)-(%d%d?)[ T](%d%d?):(%d%d?):(%d%d?)Z?$"}, -- strings starting with YYYY-MM-DD HH:MM. Year 4 digits, the rest 1-2 -- (if one knows hour and minute than it was probably after a year 1000) {dlen=5, tail=6, regexp="^+?(%d%d%d%d)-(%d%d?)-(%d%d?)[ T](%d%d?):(%d%d?)(%s.+)"}, {dlen=5, tail=0, regexp="^+?(%d%d%d%d)-(%d%d?)-(%d%d?)[ T](%d%d?):(%d%d?)$"}, -- strings starting with YYYY-MM-DD. Year 1-4 digits, the rest 1-2 {dlen=3, tail=4, regexp="^+?(%d%d?%d?%d?)-(%d%d?)-(%d%d?)(%s.+)"}, {dlen=3, tail=0, regexp="^+?(%d%d?%d?%d?)-(%d%d?)-(%d%d?)$"}, -- strings starting with YYYY-MM. Year 3-4 digits, month 2 digits -- (want to avoit converting to dates strings like 10-5 = 5 {dlen=2, tail=3, regexp="^+?(%d%d%d%d?)-(%d%d)(%s.+)"}, -- if whole string is in YYYY-MM form: If Year 1-4 digits, month 1-2 digits {dlen=2, tail=0, regexp="^+?(%d%d?%d?%d?)-(%d%d?)$"}, -- string starts with a number -> it has to be 3 or 4 digit long to be a year {dlen=1, tail=2, regexp="^+?(%d%d%d%d?)(%s.+)"}, -- if whole string is a number (1-4 digit long) than it will be interpreted as a year {dlen=1, tail=0, regexp="^+?(%d%d?%d?%d?)$"}, } -- create datevec based on which variables are provided local datevec = {} local tail = '' for i, pat in ipairs( patterns ) do local vec = {datestr:match( pat.regexp )} if vec and vec[1]~=nil then for j=1, pat.dlen do datevec[j] = vec[j] end if pat.tail>0 and vec[pat.tail]~=nil then tail = mw.ustring.gsub(' ' .. vec[pat.tail], ' +', ' ') end break end end if not datevec[1] or datevec[1]=='' then -- quickly return if datestr does not look like date (it could be a template) return nil, nil end return datevec, tail end -- ================================================== -- === External functions =========================== -- ================================================== local p = {} -- =========================================================================== -- === Version of the function to be called from other LUA codes -- =========================================================================== function p._ISOyear( datestr ) -- if empty string then return it datestr = mw.text.trim(datestr or '' ) if datestr == '' then return '' end -- if number then return it if tonumber( datestr ) then return mw.ustring.format( '%04i', datestr ) end -- otherwise use regular expression match datestr = mw.ustring.match( datestr, '^+?(-?%d%d?%d?%d?)-' ) if datestr and tonumber( datestr ) then return mw.ustring.format( '%04i', datestr ) else return '' end end function p._ISOdate(datestr, lang, case, class, trim_year) datestr = mw.text.trim(datestr or '' ) local datevec, tail = parse_ISOdate(datestr) if not datevec then return datestr, false -- quickly return if datestr does not look like date (it could be a template) end -- call p._Date function to format date string local datestr2 = Date(datevec, lang, case, class, trim_year) if datestr2~='' then return mw.text.trim( datestr2 .. tail), true else -- in case of errors return the original string return datestr, false end end -- =========================================================================== -- === Versions of the function to be called from template namespace -- =========================================================================== --[[ ISOdate This function is the core part of the ISOdate template. Usage: {{#invoke:ISOdate|ISOdate|target_string|lang=}} Parameters: 1: The date string lang: The language to display it in form: Language format (genitive, etc.) for some languages class: CSS class for the <time> node Error Handling: If the string does not look like it contain the proper ISO date than the function will return the original string. That is the preferred treatment for the template:Information (and similar templates) which calling it. ]] function p.ISOdate(frame) local args = {} for name, value in pairs( frame.args ) do if value ~= '' then -- nuke empty strings if type(name)=='string' then name = string.gsub( string.lower(name), ' ', '_') end args[name] = value end end local datestr, succeded = p._ISOdate( args[1] or '', args.lang, -- language args.case, -- allows to specify grammatical case for the month for languages that use them args.class or 'dtstart', -- allows to set the html class of the time node where the date is included. args.trim_year or '100-999' -- by default pad one and 2 digit years to be 4 digit long, while keeping 3 digit years as is ) return datestr end --[[ ISOyear This function returns year part of date string. Usage: {{#invoke:ISOdate|ISOyear|target_string}} Parameters 1: The date string Error Handling: If the string does not look like it contain the year than the function will not return anything. That is the preferred treatment for the template:Creator which is the main (only?) template calling it. ]] function p.ISOyear( frame ) return p._ISOyear( frame.args[1] ) end --[[ ISOdate_part This function returns any part of the date string (if present) Usage: {{#invoke:ISOdate|ISOdate_part|target_string|part number}} Parameters 1: The date string 2: part number: 1-year, 2-month, 3-day, 4-hour, 5-minute, 6-second ]] function p.ISOdate_part(frame) local date_str = mw.text.trim(frame.args[1] or '' ) local part_num = tonumber(frame.args[2] or '1') local datevec, tail = parse_ISOdate(date_str) return tonumber(datevec[part_num] or '0') end return p j51gno421zkjvrao1w2p9mbv5i3kbic Module:DateI18n 828 1312 10637 2023-12-24T23:40:08Z commons>Jarekt 0 Fulfilling [[Template:Edit request|edit request]] by [[User:CalendulaAsteraceae|CalendulaAsteraceae]]. 10637 Scribunto text/plain --[[ __ __ _ _ ____ _ ___ _ ___ | \/ | ___ __| |_ _| | ___ _| _ \ __ _| |_ ___|_ _/ |( _ ) _ __ | |\/| |/ _ \ / _` | | | | |/ _ (_) | | |/ _` | __/ _ \| || |/ _ \| '_ \ | | | | (_) | (_| | |_| | | __/_| |_| | (_| | || __/| || | (_) | | | | |_| |_|\___/ \__,_|\__,_|_|\___(_)____/ \__,_|\__\___|___|_|\___/|_| |_| This module is intended for processing of date strings. Please do not modify this code without applying the changes first at Module:DateI18n/sandbox and testing at Module:DateI18n/sandbox/testcases and Module talk:DateI18n/sandbox/testcases. Authors and maintainers: * User:Parent5446 - original version of the function mimicking Template:ISOdate * User:Jarekt - original version of the functions mimicking Template:Date ]] -- ======================================= -- === Dependencies ====================== -- ======================================= require('strict') -- ======================================= -- === Local Functions =================== -- ======================================= ------------------------------------------------------------------------------ --[[ (copied from Module:Core) Function allowing for consistent treatment of boolean-like wikitext input. Inputs: 1) val - value to be evaluated, outputs as a function of values: true : true (boolean), 1 (number), or strings: "yes", "y", "true", "1" false : false (boolean), 0 (number), or strings: "no", "n", "false", "0" 2) default - value to return otherwise See Also: It works similarly to Module:Yesno ]] local function yesno(val, default) if type(val) == 'boolean' then return val elseif type(val) == 'number' then val = tostring(val) end if type(val) == 'string' then local LUT = { yes=true , y=true , ['true'] =true , t=true , ['1']=true , on =true, no =false, n=false, ['false']=false, f=false, ['0']=false, off=false } val = LUT[mw.ustring.lower(val)] -- put in lower case if (val~=nil) then return val end end return default end --------------------------------------------------------------------------------------- -- trim leading zeros in years prior to year 1000 -- INPUT: -- * datestr - translated date string -- * lang - language of translation -- OUTPUT: -- * datestr - updated date string local function trimYear(datestr, year, lang) local yearStr0, yearStr1, yearStr2, zeroStr yearStr0 = string.format('%04i', year ) -- 4 digit year in standard form "0123" yearStr1 = mw.language.new(lang):formatDate( 'Y', yearStr0) -- same as calling {{#time}} parser function --yearStr1 = mw.getCurrentFrame():callParserFunction( "#time", { 'Y', yearStr0, lang } ) -- translate to a language if yearStr0==yearStr1 then -- most of languages use standard form of year yearStr2 = tostring(year) else -- some languages use different characters for numbers yearStr2 = yearStr1 zeroStr = mw.ustring.sub(yearStr1,1,1) -- get "0" in whatever language for i=1,3 do -- trim leading zeros if mw.ustring.sub(yearStr2,1,1)==zeroStr then yearStr2 = mw.ustring.sub(yearStr2, 2, 5-i) else break end end end return string.gsub(datestr, yearStr1, yearStr2 ) -- in datestr replace long year with trimmed one end --------------------------------------------------------------------------------------- -- Look up proper format string to be passed to {{#time}} parser function -- INPUTS: -- * datecode: YMDhms, YMDhm, YMD, YM, Y, MDhms, MDhm, MD, or M -- * day : Number between 1 and 31 (not needed for most languages) -- * lang : language -- OUTPUT: -- * dFormat : input to {{#time}} function local function getDateFormat(datecode, day, lang) local function parseFormat(dFormat, day) if dFormat:find('default') and #dFormat>10 then -- Special (and messy) case of dFormat code depending on a day number, where data is a -- JSON-encoded table {”default”:”*”,”dDD”:”*”} including fields for specific 2-digit days. -- Change curly double quotes (possibly used for easier editing in tabular data) in dFormat -- to straight ASCII double quotes (required for parsing of this JSON-encoded table). local D = mw.text.jsonDecode(mw.ustring.gsub(dFormat, '[„“‟”]', '"')) --com = mw.dumpObject(D) -- If the desired day is not in that JSON table, then use its "default" case. dFormat = D[string.format('d%02i', day)] or D.default -- Change ASCII single quotes to ASCII double quotes used for {{#time}} marking. -- Apostrophes needed in plain-text must not use ASCII single quotes but curly apostrophe -- e.g. { ‟default”: ‟j”, ‟d01”: ‟j’'o'” }, not { ‟default”: ‟j”, ‟d01”: ‟j''o'” }. end dFormat = dFormat:gsub("'", '"') return dFormat end local T = {} local tab = mw.ext.data.get('DateI18n.tab', lang) for _, row in pairs(tab.data) do -- convert the output into a dictionary table local id, _, msg = unpack(row) T[id] = msg end -- Compatibility of legacy data using 'HMS' or 'HM', where 'M' is ambiguous T.YMDhms = T.YMDhms or T.YMDHMS T.YMDhm = T.YMDhm or T.YMDHM datecode = datecode == 'YMDHMS' and 'YMDhms' or datecode == 'YMDHM' and 'YMDhm' or datecode local dFormat = T[datecode] if dFormat == 'default' and (datecode == 'YMDhms' or datecode == 'YMDhm') then -- For most languages adding hour:minute:second is done by adding ", HH:ii:ss to the -- day precission date, those languages are skipped in DateI18n.tab and default to -- English which stores word "default" dFormat = parseFormat(T['YMD'], day).. ', H:i' if datecode == 'YMDhms' then dFormat = dFormat .. ':s' end else dFormat = parseFormat(dFormat, day) end return dFormat end --------------------------------------------------------------------------------------- -- Look up proper format string to be passed to {{#time}} parser function -- INPUTS: -- * month : month number -- * case : gramatic case abbriviation, like "ins", "loc" -- * lang : language -- OUTPUT: -- * dFormat : input to {{#time}} function local function MonthCase(month, case, lang) if month == nil or case == nil then return nil end local T = {{},{},{},{},{},{},{},{},{},{},{},{}} local tab = mw.ext.data.get('I18n/MonthCases.tab', lang) for _, row in pairs(tab.data) do local mth, cs, msg = unpack(row) T[mth][cs] = msg end return T[month][case] end -- ================================================== -- === External functions =========================== -- ================================================== local p = {} -- =========================================================================== -- === Functions accesible from the outside to allow unit-testing -- === Please do not use directly as they could change in the future -- =========================================================================== --------------------------------------------------------------------------------------- -- Single string replacement that ignores part of the string in "..." function p.strReplace(String, old, new) if String:find('"') then local T={} for i, str in ipairs(mw.text.split( String, '"', true )) do if i%2==1 then str = str:gsub(old, new, 1) end table.insert(T, str) end return table.concat(T,'"') else return String:gsub(old, new, 1) end end --------------------------------------------------------------------------------------- -- process datevec -- INPUT: -- * datevec - Array of {year,month,day,hour,minute,second, tzhour, tzmin} containing broken -- down date-time component strings or numbers -- OUTPUT: -- * datenum - same array but holding only numbers or nuls function p.clean_datevec(datevec) -- create datecode based on which variables are provided and check for out-of-bound values -- check special case of month provided as a name local month = datevec[2] if type(month) == 'string' and month ~= '' and not tonumber(month) then -- When the month is not a number, check if it's a month name in the project's language. datevec[2] = mw.getContentLanguage():formatDate('n', month) end -- check bounds local maxval = { 1/0, 12, 31, 23, 59, 59, 23, 59 } -- max values (or 1/0=+inf) for year, month, day, hour, minute, second, tzhour, tzmin local minval = { -1/0, 01, 01, 00, 00, 00, -23, 00 } -- min values (or -1/0=-inf) for year, month, ... local datenum = {} -- date-time encoded as a vector = [year, month, ... , second, tzhour, tzmin] for i = 1, 8 do local val = tonumber(datevec[i]) if val and val >= minval[i] and val <= maxval[i] then -- These tests work with infinite min/max values. datenum[i] = val end end -- leap second if tonumber(datevec[6]) == 60 then -- leap second '60' is valid only at end of 23:59 UTC, on 30 June or 31 December of specific years -- datenum[6] = 60 local MDhm = table.concat({unpack(datenum,2,5)}, ',') if (MDhm == table.concat({6, 30, 23, 59}, ',')) or (MDhm == table.concat({12, 31, 23, 59}, ',')) then datenum[6] = 60 end end return datenum end --------------------------------------------------------------------------------------- -- process datevec -- INPUT: -- * datenum - Array of {year,month,day,hour,minute,second, tzhour, tzmin} as numbers or nuls -- OUTPUT: -- * timeStamp - date string in the format taken by mw.language:formatDate lua function and {{#time}} parser function -- https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#mw.language:formatDate -- https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions#.23time -- * datecode - a code specifying content of the array where Y' is year, 'M' is month, -- 'D' is day, 'h' is hour, 'm' minute, 's' is second. -- Output has to be one of YMDhms, YMDhm, YMD, YM, Y, MDhms, MDhm, MD, M. function p.getTimestamp(datenum) -- create datecode based on datenum local codes = { 'Y', 'M', 'D', 'h', 'm', 's'} local datecode = '' -- a string signifying which combination of variables was provided for i, c in ipairs(codes) do datecode = datecode .. (datenum[i] and c or '') -- if datenum[i] than append codes[i] to datecode end -- create timestamp string (for example 2000-02-20 02:20:20) based on which variables were provided local timeStamp -- date starting by a year if datecode == 'YMDhms' then timeStamp = string.format('%04i-%02i-%02i %02i:%02i:%02i', datenum[1], datenum[2], datenum[3], datenum[4], datenum[5], datenum[6] ) elseif datecode == 'YMDhm' then timeStamp = string.format('%04i-%02i-%02i %02i:%02i', datenum[1], datenum[2], datenum[3], datenum[4], datenum[5] ) elseif datecode:sub(1,3)=='YMD' then timeStamp = string.format('%04i-%02i-%02i', datenum[1], datenum[2], datenum[3] ) datecode = 'YMD' -- 'YMDhms', 'YMDhm' and 'YMD' are the only supported format starting with 'YMD'; all others will be converted to 'YMD'. elseif datecode:sub(1,2) == 'YM' then timeStamp = string.format('%04i-%02i', datenum[1], datenum[2] ) datecode = 'YM' elseif datecode:sub(1,1)=='Y' then timeStamp = string.format('%04i', datenum[1] ) datecode = 'Y' -- date starting by a month (the implied year is 2000) elseif datecode== 'MDhms' then timeStamp = string.format('%04i-%02i-%02i %02i:%02i:%02i', 2000, datenum[2], datenum[3], datenum[4], datenum[5], datenum[6] ) elseif datecode == 'MDhm' then timeStamp = string.format('%04i-%02i-%02i %02i:%02i', 2000, datenum[2], datenum[3], datenum[4], datenum[5] ) elseif datecode:sub(1,2) == 'MD' then timeStamp = string.format('%04i-%02i-%02i', 2000, datenum[2], datenum[3] ) datecode = 'MD' -- 'MDhms', 'MDhm' and 'MD' are the only supported format starting with 'MD'; all others will be converted to 'MD' elseif datecode:sub(1,1) == 'M' then -- Ambiguous: could mean minutes, but here means month (when parsed as a name/abbrev, not as a number). timeStamp = string.format('%04i-%02i-%02i', 2000, datenum[2], 1 ) datecode = 'M' -- other possible but unrecognized formats (e.g. 'DHis', 'DHi', 'D', 'His', 'Hi'); -- note that 'Dh', 'D', 'h', 's' may eventually work, but not 'm' for minute only, which is ambiguous with 'M' for month only. else timeStamp = nil -- format not supported end return timeStamp, datecode end local function isValidLangCode(lang) if not lang then return false end lang = mw.text.trim(lang) return lang ~= '' and lang ~= '⧼Lang⧽' and mw.language.isValidCode(lang) end -- =========================================================================== -- === Version of the function to be called from other LUA codes -- =========================================================================== --[[ ======================================================================================== Date This function is the core part of the ISOdate template. Usage: local Date = require('Module:DateI18n')._Date local dateStr = Date({2020, 12, 30, 12, 20, 11}, lang) Parameters: * {year,month,day,hour,minute,second, tzhour, tzmin}: broken down date-time component strings or numbers tzhour, tzmin are timezone offsets from UTC, hours and minutes * lang: The language to display it in * case: Language format (genitive, etc.) for some languages * class: CSS class for the <time> node, use "" for no metadata at all ]] function p._Date(datevec, lang, case, class, trim_year) -- make sure inputs are in the right format -- set language if not isValidLangCode(lang) then -- get user's chosen language -- equivalent to {{int:lang}} lang = mw.getCurrentFrame():callParserFunction("int", "lang") if not isValidLangCode(lang) then -- if that doesn't work, use the project language -- this is useful on projects which import this module from Commons lang = mw.language.getContentLanguage().code if not isValidLangCode(lang) then -- if that doesn't work, use English lang = "en" end end end if lang == 'be-tarask' then lang = 'be-x-old' end -- process datevec and extract timeStamp and datecode strings as well as numeric datenum array local datenum = p.clean_datevec(datevec) local year, month, day = datenum[1], datenum[2], datenum[3] local timeStamp, datecode = p.getTimestamp(datenum) if not timeStamp then -- something went wrong in parserDatevec return '' end -- Commons [[Data:DateI18n.tab]] page stores prefered formats for diferent -- languages and datecodes (specifying year-month-day or just year of month-day, etc) -- Look up country specific format input to {{#time}} function local dFormat = getDateFormat(datecode, day, lang) -- By default the gramatical case is not specified (case=='') allowing the format to be specified -- in [[Data:DateI18n.tab]]. You can overwrite the default grammatical case of the month by -- specifying "case" variable. This is needed mostly by Slavic languages to create more complex -- phrases as it is done in [[c:Module:Complex date]] case = case or '' if (lang=='qu' or lang=='qug') and case=='nom' then -- Special case related to Quechua and Kichwa languages. The form in the I18n is -- Genitive case with suffix "pi" added to month names provided by {#time}} -- in Nominative case that "pi" should be removed -- see https://commons.wikimedia.org/wiki/Template_talk:Date#Quechua from 2014 dFormat = dFormat:gsub('F"pi"', 'F') elseif case == 'gen' then dFormat = p.strReplace(dFormat, "F", "xg") elseif case == 'nom' then dFormat = p.strReplace(dFormat, "xg", "F") elseif case ~= '' and month ~= nil then -- see is page [[Data:I18n/MonthCases.tab]] on Commons have name of the month -- in specific gramatic case in desired language. If we have it than replace -- "F" and xg" in dFormat local monthMsg = MonthCase(month, case, lang) if monthMsg and monthMsg ~= '' then -- make sure it exists dFormat = p.strReplace(dFormat, 'F', '"'..monthMsg..'"') -- replace default month with month name we already looked up dFormat = p.strReplace(dFormat, 'xg', '"'..monthMsg..'"') end end -- Translate the date using specified format. -- See https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#mw.language:formatDate and -- https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions##time for explanation of the format local langObj = mw.language.new(lang) local datestr = langObj:formatDate(dFormat, timeStamp) -- same as using {{#time}} parser function -- Special case related to Thai solar calendar: prior to 1940 new-year was at different time of year, -- so just year (datecode == 'Y') is ambiguous and is replaced by "YYYY or YYYY" phrase if lang=='th' and datecode=='Y' and year<=1940 then datestr = string.format('%04i หรือ %04i', year+542, year+543 ) end -- If year < 1000 than either keep the date padded to the length of 4 digits or trim it. -- Decide if the year will stay padded with zeros (for years in 0-999 range). if year and year < 1000 then trim_year = yesno(trim_year, trim_year or '100-999') if type(trim_year) == 'string' then -- If `trim_year` not a simple boolean, then it's a range of dates. -- For example '100-999' means to pad 1-or-2-digit years to be 4-digit long, while keeping 3-digit years as is. local YMin, YMax = trim_year:match( '(%d+)-(%d+)' ) trim_year = YMin and year >= tonumber(YMin) and year <= tonumber(YMax) end if trim_year then datestr = trimYear(datestr, year, lang) -- in datestr replace long year with trimmed one end end -- Append a timezone if present (after the hour and minute of the day). if datenum[7] and (datecode:sub(1, 5) == 'YMDhm' or datecode:sub(1, 4) == 'MDhm') then -- Use {{#time}} parser function to create timezone string, so that we use the correct character set. local sign = (datenum[7]<0) and '−' or '+' timeStamp = string.format("2000-01-01 %02i:%02i:00", math.abs(datenum[7]), datenum[8] or 0) local timezone = langObj:formatDate('H:i', timeStamp) -- same as using {{#time}} parser function datestr = string.format("%s %s%s", datestr, sign, timezone ) end -- HTML formating of date string and tagging for microformats (only for absolute dates with a year). if class and class ~= '' and class ~= '-' and datecode:sub(1,1) == 'Y' then local pat = '<time class="%s" datetime="%s" lang="%s" dir="%s" style="white-space:nowrap">%s</time>' datestr = pat:format(class, timeStamp, lang, langObj:getDir(), datestr) end return datestr end -- =========================================================================== -- === Version of the function to be called from template namespace -- =========================================================================== --[[ ======================================================================================== Date This function is the core part of the ISOdate template. Usage: {{#invoke:DateI18n|Date|year=|month=|day=|hour=|minute=|second=|tzhour=|tzmin=|lang=en}} Parameters: * year, month, day, hour, minute, second: broken down date-time component strings * tzhour, tzmin: timezone offset from UTC, hours and minutes * lang: The language to display it in * case: Language format (genitive, etc.) for some languages * class: CSS class for the <time> node, use "" for no metadata at all ]] function p.Date(frame) -- get args local args = {} for key, value in pairs(frame.args) do local trimmed_key = string.gsub(string.lower(mw.text.trim(key)), ' ', '_') local trimmed_value = mw.text.trim(value) if trimmed_key ~= 'class' and trimmed_value == '' then trimmed_value = nil end args[trimmed_key] = trimmed_value end -- default values -- Allows to set the html class of the time node where the date is included. This is useful for microformats. args.class = args.class or '-' if args.class == '' then args.class = 'dtstart' end -- By default, pad one- and two-digit years to be 4 digits long, while keeping three-digit years as-is. args.trim_year = args.trim_year or '100-999' return p._Date( {args.year, args.month, args.day, args.hour, args.minute, args.second, args.tzhour, args.tzmin}, args.lang, args.case, args.class, args.trim_year ) end return p k4zfn7arsiowlh6vv8aqwu7z9baxrc0 10638 10637 2026-08-25T23:38:26Z RAPTOR7762 18 1 revision imported from [[:commons:Module:DateI18n]] 10637 Scribunto text/plain --[[ __ __ _ _ ____ _ ___ _ ___ | \/ | ___ __| |_ _| | ___ _| _ \ __ _| |_ ___|_ _/ |( _ ) _ __ | |\/| |/ _ \ / _` | | | | |/ _ (_) | | |/ _` | __/ _ \| || |/ _ \| '_ \ | | | | (_) | (_| | |_| | | __/_| |_| | (_| | || __/| || | (_) | | | | |_| |_|\___/ \__,_|\__,_|_|\___(_)____/ \__,_|\__\___|___|_|\___/|_| |_| This module is intended for processing of date strings. Please do not modify this code without applying the changes first at Module:DateI18n/sandbox and testing at Module:DateI18n/sandbox/testcases and Module talk:DateI18n/sandbox/testcases. Authors and maintainers: * User:Parent5446 - original version of the function mimicking Template:ISOdate * User:Jarekt - original version of the functions mimicking Template:Date ]] -- ======================================= -- === Dependencies ====================== -- ======================================= require('strict') -- ======================================= -- === Local Functions =================== -- ======================================= ------------------------------------------------------------------------------ --[[ (copied from Module:Core) Function allowing for consistent treatment of boolean-like wikitext input. Inputs: 1) val - value to be evaluated, outputs as a function of values: true : true (boolean), 1 (number), or strings: "yes", "y", "true", "1" false : false (boolean), 0 (number), or strings: "no", "n", "false", "0" 2) default - value to return otherwise See Also: It works similarly to Module:Yesno ]] local function yesno(val, default) if type(val) == 'boolean' then return val elseif type(val) == 'number' then val = tostring(val) end if type(val) == 'string' then local LUT = { yes=true , y=true , ['true'] =true , t=true , ['1']=true , on =true, no =false, n=false, ['false']=false, f=false, ['0']=false, off=false } val = LUT[mw.ustring.lower(val)] -- put in lower case if (val~=nil) then return val end end return default end --------------------------------------------------------------------------------------- -- trim leading zeros in years prior to year 1000 -- INPUT: -- * datestr - translated date string -- * lang - language of translation -- OUTPUT: -- * datestr - updated date string local function trimYear(datestr, year, lang) local yearStr0, yearStr1, yearStr2, zeroStr yearStr0 = string.format('%04i', year ) -- 4 digit year in standard form "0123" yearStr1 = mw.language.new(lang):formatDate( 'Y', yearStr0) -- same as calling {{#time}} parser function --yearStr1 = mw.getCurrentFrame():callParserFunction( "#time", { 'Y', yearStr0, lang } ) -- translate to a language if yearStr0==yearStr1 then -- most of languages use standard form of year yearStr2 = tostring(year) else -- some languages use different characters for numbers yearStr2 = yearStr1 zeroStr = mw.ustring.sub(yearStr1,1,1) -- get "0" in whatever language for i=1,3 do -- trim leading zeros if mw.ustring.sub(yearStr2,1,1)==zeroStr then yearStr2 = mw.ustring.sub(yearStr2, 2, 5-i) else break end end end return string.gsub(datestr, yearStr1, yearStr2 ) -- in datestr replace long year with trimmed one end --------------------------------------------------------------------------------------- -- Look up proper format string to be passed to {{#time}} parser function -- INPUTS: -- * datecode: YMDhms, YMDhm, YMD, YM, Y, MDhms, MDhm, MD, or M -- * day : Number between 1 and 31 (not needed for most languages) -- * lang : language -- OUTPUT: -- * dFormat : input to {{#time}} function local function getDateFormat(datecode, day, lang) local function parseFormat(dFormat, day) if dFormat:find('default') and #dFormat>10 then -- Special (and messy) case of dFormat code depending on a day number, where data is a -- JSON-encoded table {”default”:”*”,”dDD”:”*”} including fields for specific 2-digit days. -- Change curly double quotes (possibly used for easier editing in tabular data) in dFormat -- to straight ASCII double quotes (required for parsing of this JSON-encoded table). local D = mw.text.jsonDecode(mw.ustring.gsub(dFormat, '[„“‟”]', '"')) --com = mw.dumpObject(D) -- If the desired day is not in that JSON table, then use its "default" case. dFormat = D[string.format('d%02i', day)] or D.default -- Change ASCII single quotes to ASCII double quotes used for {{#time}} marking. -- Apostrophes needed in plain-text must not use ASCII single quotes but curly apostrophe -- e.g. { ‟default”: ‟j”, ‟d01”: ‟j’'o'” }, not { ‟default”: ‟j”, ‟d01”: ‟j''o'” }. end dFormat = dFormat:gsub("'", '"') return dFormat end local T = {} local tab = mw.ext.data.get('DateI18n.tab', lang) for _, row in pairs(tab.data) do -- convert the output into a dictionary table local id, _, msg = unpack(row) T[id] = msg end -- Compatibility of legacy data using 'HMS' or 'HM', where 'M' is ambiguous T.YMDhms = T.YMDhms or T.YMDHMS T.YMDhm = T.YMDhm or T.YMDHM datecode = datecode == 'YMDHMS' and 'YMDhms' or datecode == 'YMDHM' and 'YMDhm' or datecode local dFormat = T[datecode] if dFormat == 'default' and (datecode == 'YMDhms' or datecode == 'YMDhm') then -- For most languages adding hour:minute:second is done by adding ", HH:ii:ss to the -- day precission date, those languages are skipped in DateI18n.tab and default to -- English which stores word "default" dFormat = parseFormat(T['YMD'], day).. ', H:i' if datecode == 'YMDhms' then dFormat = dFormat .. ':s' end else dFormat = parseFormat(dFormat, day) end return dFormat end --------------------------------------------------------------------------------------- -- Look up proper format string to be passed to {{#time}} parser function -- INPUTS: -- * month : month number -- * case : gramatic case abbriviation, like "ins", "loc" -- * lang : language -- OUTPUT: -- * dFormat : input to {{#time}} function local function MonthCase(month, case, lang) if month == nil or case == nil then return nil end local T = {{},{},{},{},{},{},{},{},{},{},{},{}} local tab = mw.ext.data.get('I18n/MonthCases.tab', lang) for _, row in pairs(tab.data) do local mth, cs, msg = unpack(row) T[mth][cs] = msg end return T[month][case] end -- ================================================== -- === External functions =========================== -- ================================================== local p = {} -- =========================================================================== -- === Functions accesible from the outside to allow unit-testing -- === Please do not use directly as they could change in the future -- =========================================================================== --------------------------------------------------------------------------------------- -- Single string replacement that ignores part of the string in "..." function p.strReplace(String, old, new) if String:find('"') then local T={} for i, str in ipairs(mw.text.split( String, '"', true )) do if i%2==1 then str = str:gsub(old, new, 1) end table.insert(T, str) end return table.concat(T,'"') else return String:gsub(old, new, 1) end end --------------------------------------------------------------------------------------- -- process datevec -- INPUT: -- * datevec - Array of {year,month,day,hour,minute,second, tzhour, tzmin} containing broken -- down date-time component strings or numbers -- OUTPUT: -- * datenum - same array but holding only numbers or nuls function p.clean_datevec(datevec) -- create datecode based on which variables are provided and check for out-of-bound values -- check special case of month provided as a name local month = datevec[2] if type(month) == 'string' and month ~= '' and not tonumber(month) then -- When the month is not a number, check if it's a month name in the project's language. datevec[2] = mw.getContentLanguage():formatDate('n', month) end -- check bounds local maxval = { 1/0, 12, 31, 23, 59, 59, 23, 59 } -- max values (or 1/0=+inf) for year, month, day, hour, minute, second, tzhour, tzmin local minval = { -1/0, 01, 01, 00, 00, 00, -23, 00 } -- min values (or -1/0=-inf) for year, month, ... local datenum = {} -- date-time encoded as a vector = [year, month, ... , second, tzhour, tzmin] for i = 1, 8 do local val = tonumber(datevec[i]) if val and val >= minval[i] and val <= maxval[i] then -- These tests work with infinite min/max values. datenum[i] = val end end -- leap second if tonumber(datevec[6]) == 60 then -- leap second '60' is valid only at end of 23:59 UTC, on 30 June or 31 December of specific years -- datenum[6] = 60 local MDhm = table.concat({unpack(datenum,2,5)}, ',') if (MDhm == table.concat({6, 30, 23, 59}, ',')) or (MDhm == table.concat({12, 31, 23, 59}, ',')) then datenum[6] = 60 end end return datenum end --------------------------------------------------------------------------------------- -- process datevec -- INPUT: -- * datenum - Array of {year,month,day,hour,minute,second, tzhour, tzmin} as numbers or nuls -- OUTPUT: -- * timeStamp - date string in the format taken by mw.language:formatDate lua function and {{#time}} parser function -- https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#mw.language:formatDate -- https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions#.23time -- * datecode - a code specifying content of the array where Y' is year, 'M' is month, -- 'D' is day, 'h' is hour, 'm' minute, 's' is second. -- Output has to be one of YMDhms, YMDhm, YMD, YM, Y, MDhms, MDhm, MD, M. function p.getTimestamp(datenum) -- create datecode based on datenum local codes = { 'Y', 'M', 'D', 'h', 'm', 's'} local datecode = '' -- a string signifying which combination of variables was provided for i, c in ipairs(codes) do datecode = datecode .. (datenum[i] and c or '') -- if datenum[i] than append codes[i] to datecode end -- create timestamp string (for example 2000-02-20 02:20:20) based on which variables were provided local timeStamp -- date starting by a year if datecode == 'YMDhms' then timeStamp = string.format('%04i-%02i-%02i %02i:%02i:%02i', datenum[1], datenum[2], datenum[3], datenum[4], datenum[5], datenum[6] ) elseif datecode == 'YMDhm' then timeStamp = string.format('%04i-%02i-%02i %02i:%02i', datenum[1], datenum[2], datenum[3], datenum[4], datenum[5] ) elseif datecode:sub(1,3)=='YMD' then timeStamp = string.format('%04i-%02i-%02i', datenum[1], datenum[2], datenum[3] ) datecode = 'YMD' -- 'YMDhms', 'YMDhm' and 'YMD' are the only supported format starting with 'YMD'; all others will be converted to 'YMD'. elseif datecode:sub(1,2) == 'YM' then timeStamp = string.format('%04i-%02i', datenum[1], datenum[2] ) datecode = 'YM' elseif datecode:sub(1,1)=='Y' then timeStamp = string.format('%04i', datenum[1] ) datecode = 'Y' -- date starting by a month (the implied year is 2000) elseif datecode== 'MDhms' then timeStamp = string.format('%04i-%02i-%02i %02i:%02i:%02i', 2000, datenum[2], datenum[3], datenum[4], datenum[5], datenum[6] ) elseif datecode == 'MDhm' then timeStamp = string.format('%04i-%02i-%02i %02i:%02i', 2000, datenum[2], datenum[3], datenum[4], datenum[5] ) elseif datecode:sub(1,2) == 'MD' then timeStamp = string.format('%04i-%02i-%02i', 2000, datenum[2], datenum[3] ) datecode = 'MD' -- 'MDhms', 'MDhm' and 'MD' are the only supported format starting with 'MD'; all others will be converted to 'MD' elseif datecode:sub(1,1) == 'M' then -- Ambiguous: could mean minutes, but here means month (when parsed as a name/abbrev, not as a number). timeStamp = string.format('%04i-%02i-%02i', 2000, datenum[2], 1 ) datecode = 'M' -- other possible but unrecognized formats (e.g. 'DHis', 'DHi', 'D', 'His', 'Hi'); -- note that 'Dh', 'D', 'h', 's' may eventually work, but not 'm' for minute only, which is ambiguous with 'M' for month only. else timeStamp = nil -- format not supported end return timeStamp, datecode end local function isValidLangCode(lang) if not lang then return false end lang = mw.text.trim(lang) return lang ~= '' and lang ~= '⧼Lang⧽' and mw.language.isValidCode(lang) end -- =========================================================================== -- === Version of the function to be called from other LUA codes -- =========================================================================== --[[ ======================================================================================== Date This function is the core part of the ISOdate template. Usage: local Date = require('Module:DateI18n')._Date local dateStr = Date({2020, 12, 30, 12, 20, 11}, lang) Parameters: * {year,month,day,hour,minute,second, tzhour, tzmin}: broken down date-time component strings or numbers tzhour, tzmin are timezone offsets from UTC, hours and minutes * lang: The language to display it in * case: Language format (genitive, etc.) for some languages * class: CSS class for the <time> node, use "" for no metadata at all ]] function p._Date(datevec, lang, case, class, trim_year) -- make sure inputs are in the right format -- set language if not isValidLangCode(lang) then -- get user's chosen language -- equivalent to {{int:lang}} lang = mw.getCurrentFrame():callParserFunction("int", "lang") if not isValidLangCode(lang) then -- if that doesn't work, use the project language -- this is useful on projects which import this module from Commons lang = mw.language.getContentLanguage().code if not isValidLangCode(lang) then -- if that doesn't work, use English lang = "en" end end end if lang == 'be-tarask' then lang = 'be-x-old' end -- process datevec and extract timeStamp and datecode strings as well as numeric datenum array local datenum = p.clean_datevec(datevec) local year, month, day = datenum[1], datenum[2], datenum[3] local timeStamp, datecode = p.getTimestamp(datenum) if not timeStamp then -- something went wrong in parserDatevec return '' end -- Commons [[Data:DateI18n.tab]] page stores prefered formats for diferent -- languages and datecodes (specifying year-month-day or just year of month-day, etc) -- Look up country specific format input to {{#time}} function local dFormat = getDateFormat(datecode, day, lang) -- By default the gramatical case is not specified (case=='') allowing the format to be specified -- in [[Data:DateI18n.tab]]. You can overwrite the default grammatical case of the month by -- specifying "case" variable. This is needed mostly by Slavic languages to create more complex -- phrases as it is done in [[c:Module:Complex date]] case = case or '' if (lang=='qu' or lang=='qug') and case=='nom' then -- Special case related to Quechua and Kichwa languages. The form in the I18n is -- Genitive case with suffix "pi" added to month names provided by {#time}} -- in Nominative case that "pi" should be removed -- see https://commons.wikimedia.org/wiki/Template_talk:Date#Quechua from 2014 dFormat = dFormat:gsub('F"pi"', 'F') elseif case == 'gen' then dFormat = p.strReplace(dFormat, "F", "xg") elseif case == 'nom' then dFormat = p.strReplace(dFormat, "xg", "F") elseif case ~= '' and month ~= nil then -- see is page [[Data:I18n/MonthCases.tab]] on Commons have name of the month -- in specific gramatic case in desired language. If we have it than replace -- "F" and xg" in dFormat local monthMsg = MonthCase(month, case, lang) if monthMsg and monthMsg ~= '' then -- make sure it exists dFormat = p.strReplace(dFormat, 'F', '"'..monthMsg..'"') -- replace default month with month name we already looked up dFormat = p.strReplace(dFormat, 'xg', '"'..monthMsg..'"') end end -- Translate the date using specified format. -- See https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#mw.language:formatDate and -- https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions##time for explanation of the format local langObj = mw.language.new(lang) local datestr = langObj:formatDate(dFormat, timeStamp) -- same as using {{#time}} parser function -- Special case related to Thai solar calendar: prior to 1940 new-year was at different time of year, -- so just year (datecode == 'Y') is ambiguous and is replaced by "YYYY or YYYY" phrase if lang=='th' and datecode=='Y' and year<=1940 then datestr = string.format('%04i หรือ %04i', year+542, year+543 ) end -- If year < 1000 than either keep the date padded to the length of 4 digits or trim it. -- Decide if the year will stay padded with zeros (for years in 0-999 range). if year and year < 1000 then trim_year = yesno(trim_year, trim_year or '100-999') if type(trim_year) == 'string' then -- If `trim_year` not a simple boolean, then it's a range of dates. -- For example '100-999' means to pad 1-or-2-digit years to be 4-digit long, while keeping 3-digit years as is. local YMin, YMax = trim_year:match( '(%d+)-(%d+)' ) trim_year = YMin and year >= tonumber(YMin) and year <= tonumber(YMax) end if trim_year then datestr = trimYear(datestr, year, lang) -- in datestr replace long year with trimmed one end end -- Append a timezone if present (after the hour and minute of the day). if datenum[7] and (datecode:sub(1, 5) == 'YMDhm' or datecode:sub(1, 4) == 'MDhm') then -- Use {{#time}} parser function to create timezone string, so that we use the correct character set. local sign = (datenum[7]<0) and '−' or '+' timeStamp = string.format("2000-01-01 %02i:%02i:00", math.abs(datenum[7]), datenum[8] or 0) local timezone = langObj:formatDate('H:i', timeStamp) -- same as using {{#time}} parser function datestr = string.format("%s %s%s", datestr, sign, timezone ) end -- HTML formating of date string and tagging for microformats (only for absolute dates with a year). if class and class ~= '' and class ~= '-' and datecode:sub(1,1) == 'Y' then local pat = '<time class="%s" datetime="%s" lang="%s" dir="%s" style="white-space:nowrap">%s</time>' datestr = pat:format(class, timeStamp, lang, langObj:getDir(), datestr) end return datestr end -- =========================================================================== -- === Version of the function to be called from template namespace -- =========================================================================== --[[ ======================================================================================== Date This function is the core part of the ISOdate template. Usage: {{#invoke:DateI18n|Date|year=|month=|day=|hour=|minute=|second=|tzhour=|tzmin=|lang=en}} Parameters: * year, month, day, hour, minute, second: broken down date-time component strings * tzhour, tzmin: timezone offset from UTC, hours and minutes * lang: The language to display it in * case: Language format (genitive, etc.) for some languages * class: CSS class for the <time> node, use "" for no metadata at all ]] function p.Date(frame) -- get args local args = {} for key, value in pairs(frame.args) do local trimmed_key = string.gsub(string.lower(mw.text.trim(key)), ' ', '_') local trimmed_value = mw.text.trim(value) if trimmed_key ~= 'class' and trimmed_value == '' then trimmed_value = nil end args[trimmed_key] = trimmed_value end -- default values -- Allows to set the html class of the time node where the date is included. This is useful for microformats. args.class = args.class or '-' if args.class == '' then args.class = 'dtstart' end -- By default, pad one- and two-digit years to be 4 digits long, while keeping three-digit years as-is. args.trim_year = args.trim_year or '100-999' return p._Date( {args.year, args.month, args.day, args.hour, args.minute, args.second, args.tzhour, args.tzmin}, args.lang, args.case, args.class, args.trim_year ) end return p k4zfn7arsiowlh6vv8aqwu7z9baxrc0 Module:Autotranslate 828 1313 10639 2024-04-18T13:29:34Z commons>Jarekt 0 rewrite proposed by [[User:Tacsipacsi]] using more efficient test for existence of language subtemplate 10639 Scribunto text/plain --[[ __ __ _ _ _ _ _ _ _ | \/ | ___ __| |_ _| | ___ _ / \ _ _| |_ ___ | |_ _ __ __ _ _ __ ___| | __ _| |_ ___ | |\/| |/ _ \ / _` | | | | |/ _ (_) / _ \| | | | __/ _ \| __| '__/ _` | '_ \/ __| |/ _` | __/ _ \ | | | | (_) | (_| | |_| | | __/_ / ___ \ |_| | || (_) | |_| | | (_| | | | \__ \ | (_| | || __/ |_| |_|\___/ \__,_|\__,_|_|\___(_)_/ \_\__,_|\__\___/ \__|_| \__,_|_| |_|___/_|\__,_|\__\___| Authors and maintainers: * User:Zolo - original version * User:Jarekt ]] -- local function to help normalize input arguments local function normalize_input_args(input_args, output_args) for name, value in pairs( input_args ) do if value ~= '' then -- nuke empty strings if type(name)=='string' then name=string.lower(name) end -- convert to lower case output_args[name] = value end end return output_args end -- initialize object to be returned local p = {} --[[ autotranslate This function is the core part of the Autotranslate template. Usage from a template: {{#invoke:autotranslate|autotranslate|base=|lang= }} Parameters: frame.args.base - base page name frame.args.lang - desired language (often user's native language) Error Handling: ]] function p.autotranslate(frame) -- switch to lowercase parameters to make them case independent local args = {} args = normalize_input_args(frame:getParent().args, args) args = normalize_input_args(frame.args, args) -- get language fallback list if not args.lang or not mw.language.isSupportedLanguage(args.lang) then args.lang = frame:callParserFunction( "int", "lang" ) -- get user's chosen language end local langList = mw.language.getFallbacksFor(args.lang) table.insert(langList,1,args.lang) -- user's language will be the first one to check -- find base page local base = args.base args.base = nil -- blank it so it is not passed to language sub-templates assert(base and #base>0, 'Base page not provided for autotranslate' ) -- Local function for expanding a template that can be pcall()ed: call the template -- with the same template arguments as the ones passed to {{autotranslate}} template. local function expandTemplate(title) return frame:expandTemplate{ title = title, args = args } end -- find base template language subpage local success, res for _, language in ipairs(langList) do success, res = pcall(expandTemplate, base .. '/' .. language) if success then break end end local err_msg = 'No fallback page found for autotranslate (base=[[:%s]], lang=%s)' if (not success) then assert(args.default, string.format(err_msg, base, args.lang)) success, res = pcall(expandTemplate, args.default) assert(success, string.format(err_msg, base, args.default)) end -- If this if the base page being translateda if (mw.title.getCurrentTitle().fullText==base) then -- English language is the last fallback language for most languages, if -- nothing else there should be at least an english subpage local en_exist = mw.title.new(base .. '/en').exists assert(en_exist, string.format(err_msg, base, 'en')) if (mw.site.siteName=='Wikimedia Commons') then res = res .. '\n[[Category:Autotranslated templates|' .. base .. ']]' end end return res end return p qmsw5ejudkg5q9vfj4h9vr37ae36450 10640 10639 2026-08-25T23:38:26Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Autotranslate]] 10639 Scribunto text/plain --[[ __ __ _ _ _ _ _ _ _ | \/ | ___ __| |_ _| | ___ _ / \ _ _| |_ ___ | |_ _ __ __ _ _ __ ___| | __ _| |_ ___ | |\/| |/ _ \ / _` | | | | |/ _ (_) / _ \| | | | __/ _ \| __| '__/ _` | '_ \/ __| |/ _` | __/ _ \ | | | | (_) | (_| | |_| | | __/_ / ___ \ |_| | || (_) | |_| | | (_| | | | \__ \ | (_| | || __/ |_| |_|\___/ \__,_|\__,_|_|\___(_)_/ \_\__,_|\__\___/ \__|_| \__,_|_| |_|___/_|\__,_|\__\___| Authors and maintainers: * User:Zolo - original version * User:Jarekt ]] -- local function to help normalize input arguments local function normalize_input_args(input_args, output_args) for name, value in pairs( input_args ) do if value ~= '' then -- nuke empty strings if type(name)=='string' then name=string.lower(name) end -- convert to lower case output_args[name] = value end end return output_args end -- initialize object to be returned local p = {} --[[ autotranslate This function is the core part of the Autotranslate template. Usage from a template: {{#invoke:autotranslate|autotranslate|base=|lang= }} Parameters: frame.args.base - base page name frame.args.lang - desired language (often user's native language) Error Handling: ]] function p.autotranslate(frame) -- switch to lowercase parameters to make them case independent local args = {} args = normalize_input_args(frame:getParent().args, args) args = normalize_input_args(frame.args, args) -- get language fallback list if not args.lang or not mw.language.isSupportedLanguage(args.lang) then args.lang = frame:callParserFunction( "int", "lang" ) -- get user's chosen language end local langList = mw.language.getFallbacksFor(args.lang) table.insert(langList,1,args.lang) -- user's language will be the first one to check -- find base page local base = args.base args.base = nil -- blank it so it is not passed to language sub-templates assert(base and #base>0, 'Base page not provided for autotranslate' ) -- Local function for expanding a template that can be pcall()ed: call the template -- with the same template arguments as the ones passed to {{autotranslate}} template. local function expandTemplate(title) return frame:expandTemplate{ title = title, args = args } end -- find base template language subpage local success, res for _, language in ipairs(langList) do success, res = pcall(expandTemplate, base .. '/' .. language) if success then break end end local err_msg = 'No fallback page found for autotranslate (base=[[:%s]], lang=%s)' if (not success) then assert(args.default, string.format(err_msg, base, args.lang)) success, res = pcall(expandTemplate, args.default) assert(success, string.format(err_msg, base, args.default)) end -- If this if the base page being translateda if (mw.title.getCurrentTitle().fullText==base) then -- English language is the last fallback language for most languages, if -- nothing else there should be at least an english subpage local en_exist = mw.title.new(base .. '/en').exists assert(en_exist, string.format(err_msg, base, 'en')) if (mw.site.siteName=='Wikimedia Commons') then res = res .. '\n[[Category:Autotranslated templates|' .. base .. ']]' end end return res end return p qmsw5ejudkg5q9vfj4h9vr37ae36450 Module:Logoform 828 1314 10641 2025-07-02T11:22:51Z commons>Kontributor 2K 0 Undo revision 1051453348 by [[Special:Contributions/187.161.18.9|187.161.18.9]] ([[User talk:187.161.18.9|talk]]) vandalism 10641 Scribunto text/plain -- Module for: Formatting Logo local p = {} local concat = table.concat local split = mw.text.split local trim = mw.text.trim local upper = mw.ustring.upper local sub = mw.ustring.sub local function ucfirst(s) return upper(sub(s, 1, 1)) .. sub(s, 2) end function p.format(frame) local gpar = frame.args -- global local fname = ucfirst(trim(gpar[1] or '')) if fname == '' then return '' end -- if file name is "unspecified" local size = trim(gpar[2] or '') -- or '0' for "unspecified" if size:sub(-2) == 'px' then size = size:sub(1, -3) end -- discard 'px' unit if present size = split(size, 'x') -- {width, height} or {height} size = size[2] and size[2] or size[1] -- keep only the specified height (in px) local style = trim(gpar[3] or '') -- or '-' for "unspecified" if style == '-' then style = '' end local title = trim(gpar[4] or '') -- or '' for "unspecified" local what = split(fname, '.', true--[[plain, not regexp]]) --[[detect a filename extension]] --[[if there's a non-empty part before a supported extension, with 1 to 4 characters: 'jpg', 'jpeg', 'gif', 'png', 'svg', 'webp', 'djvu', 'tif', 'tiff'...]] if #what > 1 and #(what[#what]) > 0 and #(what[#what]) < 5 then if title == '' then title = concat(what, '.', 1, -2):gsub('_', ' ') --[[default title from fname without this extension, underscores replaced by spaces]] end what = 'F' -- displaying a file if size == '' or size == '0' then size = '36' -- default file size (in px) end elseif fname:sub(1, 2) == 'U+' or fname:sub(1, 2) == '&#' then what = 'U' -- displaying an Unicode code point instead of a file if size == '' or size == '0' then size = '15' -- Unicode default font-size (in px) end if title == '' then title = fname--[[default title]] end title = trim(title :gsub('U%+([0-9A-Fa-f]+) ?', function(x) return 'U+' .. upper(x) .. ' ' end) :gsub('&#([0-9A-Fa-f]+);?', function(x) return 'U+' .. upper(x) .. ' ' end)) fname = fname :gsub('&#([0-9A-Fa-f]+);?', function(x) return '&#x' .. upper(x) .. ';' end) :gsub('U%+([0-9A-Fa-f]+) ?', function(x) return '&#x' .. upper(x) .. ';' end) .. '&#xFE0F;'--[[Emoji-style variation selector 16]] end if what == 'F' then -- displaying a file if style ~= '' then style = '|' .. style end if title ~= '' then title = '|' .. title :gsub('%[', '&#91;') :gsub('%]', '&#93;') :gsub('%|', '&#123;') end return concat{ '[[File:', fname, '|', size, 'x22px', style--[[allow linking]], title, ']]' } else -- displaying an Unicode code point if title ~= '' then title = concat{ ' title="', title:gsub('"', '&#34;'), '"' } end return concat{ '<div style="display:inline-block;position:relative;font-size:', size, 'px;line-height:22px;vertical-align:middle;top:-1px', style, '"', title, '>', fname, '</div>' } end end -- function format return p b3pbgwb9t6bfigjxsdgl4xjcafbdjmj 10642 10641 2026-08-25T23:38:26Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Logoform]] 10641 Scribunto text/plain -- Module for: Formatting Logo local p = {} local concat = table.concat local split = mw.text.split local trim = mw.text.trim local upper = mw.ustring.upper local sub = mw.ustring.sub local function ucfirst(s) return upper(sub(s, 1, 1)) .. sub(s, 2) end function p.format(frame) local gpar = frame.args -- global local fname = ucfirst(trim(gpar[1] or '')) if fname == '' then return '' end -- if file name is "unspecified" local size = trim(gpar[2] or '') -- or '0' for "unspecified" if size:sub(-2) == 'px' then size = size:sub(1, -3) end -- discard 'px' unit if present size = split(size, 'x') -- {width, height} or {height} size = size[2] and size[2] or size[1] -- keep only the specified height (in px) local style = trim(gpar[3] or '') -- or '-' for "unspecified" if style == '-' then style = '' end local title = trim(gpar[4] or '') -- or '' for "unspecified" local what = split(fname, '.', true--[[plain, not regexp]]) --[[detect a filename extension]] --[[if there's a non-empty part before a supported extension, with 1 to 4 characters: 'jpg', 'jpeg', 'gif', 'png', 'svg', 'webp', 'djvu', 'tif', 'tiff'...]] if #what > 1 and #(what[#what]) > 0 and #(what[#what]) < 5 then if title == '' then title = concat(what, '.', 1, -2):gsub('_', ' ') --[[default title from fname without this extension, underscores replaced by spaces]] end what = 'F' -- displaying a file if size == '' or size == '0' then size = '36' -- default file size (in px) end elseif fname:sub(1, 2) == 'U+' or fname:sub(1, 2) == '&#' then what = 'U' -- displaying an Unicode code point instead of a file if size == '' or size == '0' then size = '15' -- Unicode default font-size (in px) end if title == '' then title = fname--[[default title]] end title = trim(title :gsub('U%+([0-9A-Fa-f]+) ?', function(x) return 'U+' .. upper(x) .. ' ' end) :gsub('&#([0-9A-Fa-f]+);?', function(x) return 'U+' .. upper(x) .. ' ' end)) fname = fname :gsub('&#([0-9A-Fa-f]+);?', function(x) return '&#x' .. upper(x) .. ';' end) :gsub('U%+([0-9A-Fa-f]+) ?', function(x) return '&#x' .. upper(x) .. ';' end) .. '&#xFE0F;'--[[Emoji-style variation selector 16]] end if what == 'F' then -- displaying a file if style ~= '' then style = '|' .. style end if title ~= '' then title = '|' .. title :gsub('%[', '&#91;') :gsub('%]', '&#93;') :gsub('%|', '&#123;') end return concat{ '[[File:', fname, '|', size, 'x22px', style--[[allow linking]], title, ']]' } else -- displaying an Unicode code point if title ~= '' then title = concat{ ' title="', title:gsub('"', '&#34;'), '"' } end return concat{ '<div style="display:inline-block;position:relative;font-size:', size, 'px;line-height:22px;vertical-align:middle;top:-1px', style, '"', title, '>', fname, '</div>' } end end -- function format return p b3pbgwb9t6bfigjxsdgl4xjcafbdjmj Module:Dir 828 1315 10643 2024-08-11T03:21:56Z commons>Ebrahim 0 change the documentation, as this isn't used apparently but let's don't remove the function right now 10643 Scribunto text/plain --[==[ This module implements [[Template:Dir]]. Enter this to run tests in the Lua console: =getmetatable(p).quickTests() --]==] local rtlOverrides = require('Module:Dir/RTL overrides') local p = {} local function trim(s) if s and s ~= '' then s = tostring(s):match('^%s*(.-)%s*$') end if s == '' then return nil end return s end function p.rtlLangs(isRTL) if isRTL == nil then isRTL = true end return rtlOverrides[isRTL] or {} end function p.isRTL(code) if type(code) ~= 'string' then return nil end local v = rtlOverrides[code] -- very fast and not limited in the number of supported languages if v ~= nil then return v end -- return it if mapped, otherwise use MediaWiki library: local success, ret = pcall(function () return mw.language.new(code):isRTL() -- expensive and limited to 20 languages per MediaWiki instance end) return success and ret end function p.select(code, rtl, ltr) if p.isRTL(code) then return rtl else return ltr end end -- The 3 parameters are automatically trimmed: -- Parameter 1 takes the default value from {{Int:Lang}} if it's empty or not specified. -- Parameter 2 can be named rtl, may be explicitly empty, otherwise takes the default value 'rtl' only if it's not specified. -- Parameter 3 can be named ltr, may be explicitly empty, otherwise takes the default value 'ltr' only if it's not specified. function p.main(frame) local args = frame:getParent().args -- Parameters used to transclude Template:Dir local code = trim(args[1]) or frame:callParserFunction('Int', 'Lang') local rtl = trim(args.rtl or args[2] or 'rtl') local ltr = trim(args.ltr or args[3] or 'ltr') return p.select(code, rtl, ltr) end setmetatable(p, { quickTests = function () local rtlLangs = p.rtlLangs(true) local ltrLangs = p.rtlLangs(false) -- Basic check of data format local function checkLangs(name, langs) for k, lang in pairs(langs) do assert(type(k) == 'number' and k == math.floor(k) and type(lang) == 'string' and #lang >= 2 and #lang <= 16 and lang:find('^[a-z][%-0-9a-z]*[0-9a-z]$') == 1, ": Invalid sequence of language codes, " .. name .. "['" .. k .. "'] = '" .. lang .. "'") end return true end local ok, msg ok, msg = pcall(checkLangs, 'rtlLangs', rtlLangs) if not ok then return false, msg end ok, msg = pcall(checkLangs, 'ltrLangs', ltrLangs) if not ok then return false, msg end -- Build inverse maps of languages having each direction local isrtl, isltr = {}, {} for _, lang in ipairs(rtlLangs) do isrtl[lang] = true end for _, lang in ipairs(ltrLangs) do isltr[lang] = true end -- Check conflicts using the two inverse maps for _, lang in ipairs(rtlLangs) do if isltr[lang] then return false, ": Direction conflict for '" .. lang .. "'" end end for _, lang in ipairs(ltrLangs) do if isrtl[lang] then return false, ": Direction conflict for '" .. lang .. "'" end end -- Log missing languages (allows filling the tables above) according to MediaWiki internal data local knownLangs, isKnownLang = mw.language.fetchLanguageNames(), {} for lang, _ in pairs(knownLangs) do isKnownLang[lang] = true if rtlOverrides[lang] == nil then -- only if we still don't have data for this language -- Note: we cannot check more than 20 languages at once, then MediaWiki raises an error. -- So this test only runs on the Lua console, where you can update the tables at top. -- This also means we cannot compare what MediaWiki returns with the direction we map here for all languages. ok, value = pcall(function() return tostring(mw.language.new(lang):isRTL()) end) mw.log("Warning: missing direction for language '" .. lang .. "', MediaWiki returns '" .. value .. "'") end end -- utility: reverse order iterator on sequences local function revipairs(t) return function(t, i) i = i - 1 local v = t[i] if v == nil then return nil end return i, v end, t, #t + 1 end -- Sort and deduplicate language code values (by scanning backward) for data cleanup -- Also log languages having a direction mapping in this module but still not known by MediaWiki table.sort(rtlLangs) table.sort(ltrLangs) for i, lang in revipairs(rtlLangs) do if rtlLangs[i - 1] == rtlLangs[i] then table.remove(rtlLangs, i) end if isKnownLang[lang] == nil then mw.log("RTL language '" .. lang .. "' still not known by Mediawiki (could be a missing alias or variant)") end end for i, lang in revipairs(ltrLangs) do if ltrLangs[i - 1] == ltrLangs[i] then table.remove(ltrLangs, i) end if isKnownLang[lang] == nil then mw.log("LTR language '" .. lang .. "' still not known by Mediawiki (could be a missing alias or variant)") end end -- Final presentation of current lists, sorted and deduplicated mw.log("----") mw.log("local rtlLangs = { '" .. table.concat(rtlLangs, "', '") .. "' }") mw.log("local ltrLangs = { '" .. table.concat(ltrLangs, "', '") .. "' }") return true end }) return p nhnicty79ta41krljhwvk2ecmrvwisu 10644 10643 2026-08-25T23:38:26Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Dir]] 10643 Scribunto text/plain --[==[ This module implements [[Template:Dir]]. Enter this to run tests in the Lua console: =getmetatable(p).quickTests() --]==] local rtlOverrides = require('Module:Dir/RTL overrides') local p = {} local function trim(s) if s and s ~= '' then s = tostring(s):match('^%s*(.-)%s*$') end if s == '' then return nil end return s end function p.rtlLangs(isRTL) if isRTL == nil then isRTL = true end return rtlOverrides[isRTL] or {} end function p.isRTL(code) if type(code) ~= 'string' then return nil end local v = rtlOverrides[code] -- very fast and not limited in the number of supported languages if v ~= nil then return v end -- return it if mapped, otherwise use MediaWiki library: local success, ret = pcall(function () return mw.language.new(code):isRTL() -- expensive and limited to 20 languages per MediaWiki instance end) return success and ret end function p.select(code, rtl, ltr) if p.isRTL(code) then return rtl else return ltr end end -- The 3 parameters are automatically trimmed: -- Parameter 1 takes the default value from {{Int:Lang}} if it's empty or not specified. -- Parameter 2 can be named rtl, may be explicitly empty, otherwise takes the default value 'rtl' only if it's not specified. -- Parameter 3 can be named ltr, may be explicitly empty, otherwise takes the default value 'ltr' only if it's not specified. function p.main(frame) local args = frame:getParent().args -- Parameters used to transclude Template:Dir local code = trim(args[1]) or frame:callParserFunction('Int', 'Lang') local rtl = trim(args.rtl or args[2] or 'rtl') local ltr = trim(args.ltr or args[3] or 'ltr') return p.select(code, rtl, ltr) end setmetatable(p, { quickTests = function () local rtlLangs = p.rtlLangs(true) local ltrLangs = p.rtlLangs(false) -- Basic check of data format local function checkLangs(name, langs) for k, lang in pairs(langs) do assert(type(k) == 'number' and k == math.floor(k) and type(lang) == 'string' and #lang >= 2 and #lang <= 16 and lang:find('^[a-z][%-0-9a-z]*[0-9a-z]$') == 1, ": Invalid sequence of language codes, " .. name .. "['" .. k .. "'] = '" .. lang .. "'") end return true end local ok, msg ok, msg = pcall(checkLangs, 'rtlLangs', rtlLangs) if not ok then return false, msg end ok, msg = pcall(checkLangs, 'ltrLangs', ltrLangs) if not ok then return false, msg end -- Build inverse maps of languages having each direction local isrtl, isltr = {}, {} for _, lang in ipairs(rtlLangs) do isrtl[lang] = true end for _, lang in ipairs(ltrLangs) do isltr[lang] = true end -- Check conflicts using the two inverse maps for _, lang in ipairs(rtlLangs) do if isltr[lang] then return false, ": Direction conflict for '" .. lang .. "'" end end for _, lang in ipairs(ltrLangs) do if isrtl[lang] then return false, ": Direction conflict for '" .. lang .. "'" end end -- Log missing languages (allows filling the tables above) according to MediaWiki internal data local knownLangs, isKnownLang = mw.language.fetchLanguageNames(), {} for lang, _ in pairs(knownLangs) do isKnownLang[lang] = true if rtlOverrides[lang] == nil then -- only if we still don't have data for this language -- Note: we cannot check more than 20 languages at once, then MediaWiki raises an error. -- So this test only runs on the Lua console, where you can update the tables at top. -- This also means we cannot compare what MediaWiki returns with the direction we map here for all languages. ok, value = pcall(function() return tostring(mw.language.new(lang):isRTL()) end) mw.log("Warning: missing direction for language '" .. lang .. "', MediaWiki returns '" .. value .. "'") end end -- utility: reverse order iterator on sequences local function revipairs(t) return function(t, i) i = i - 1 local v = t[i] if v == nil then return nil end return i, v end, t, #t + 1 end -- Sort and deduplicate language code values (by scanning backward) for data cleanup -- Also log languages having a direction mapping in this module but still not known by MediaWiki table.sort(rtlLangs) table.sort(ltrLangs) for i, lang in revipairs(rtlLangs) do if rtlLangs[i - 1] == rtlLangs[i] then table.remove(rtlLangs, i) end if isKnownLang[lang] == nil then mw.log("RTL language '" .. lang .. "' still not known by Mediawiki (could be a missing alias or variant)") end end for i, lang in revipairs(ltrLangs) do if ltrLangs[i - 1] == ltrLangs[i] then table.remove(ltrLangs, i) end if isKnownLang[lang] == nil then mw.log("LTR language '" .. lang .. "' still not known by Mediawiki (could be a missing alias or variant)") end end -- Final presentation of current lists, sorted and deduplicated mw.log("----") mw.log("local rtlLangs = { '" .. table.concat(rtlLangs, "', '") .. "' }") mw.log("local ltrLangs = { '" .. table.concat(ltrLangs, "', '") .. "' }") return true end }) return p nhnicty79ta41krljhwvk2ecmrvwisu Module:Dir/RTL overrides 828 1316 10645 2022-10-27T23:30:55Z commons>Magog the Ogre 0 additions requested by [[User:Verdy_p|Verdy_p]] ([[Special:Permalink/699751110#Updating Module:Dir/RTL overrides and Template:Dir]]) 10645 Scribunto text/plain local p = {} --[==[ Basic input sequences: relative order or duplicates does not matter here (but the end of the self test displays them sorted and deduplicated), but codes must be valid and belong to only one of the two sequences). Any missing language code will be checked with mw.language.new(code):isRTL(), which is costly in loaded resources (it can only check 20 languages at most including the content language) So it is best to map all languages that are the most likely to be used. --]==] local rtlLangs = { 'aaf-arab', 'aao', 'abh', 'abq-arab', 'abv', 'ace-arab', 'acm', 'acq', 'acw', 'acx', 'acy-arab', 'adf', 'ady-arab', 'aeb', 'aeb-arab', 'aec', 'afb', 'ajp', 'apc', 'apd', 'ar', 'arb', 'arc', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'az-arab', 'azb', 'bal', 'bbz', 'bcc', 'bej-arab', 'ber-arab', 'bft', 'bgn', 'bgp', 'bqi', 'bjm', 'bjn-arab', 'bms-arab', 'brh-arab', 'bsk', 'cja-arab', 'cjm-arab', 'ckb', 'crh-arab', 'deh', 'dgo-arab', 'dng-arab', 'doi-arab', 'dv', 'dyu-arab', 'fa', 'fa-af', 'ff-arab', 'ffm-arab', 'fub-arab', 'fuc-arab', 'fuf-arab', 'fuh-arab', 'fui-arab', 'fuv-arab', 'gda', 'glk', 'gwc', 'gbz-arab', 'gju-arab', 'ha-arab', 'hac', 'he', 'hnd', 'hno', 'jat', 'kbd-arab', 'kbl-arab', 'kby-arab', 'kcn', 'kfr', 'khw', 'kk-arab', 'kk-cn', 'kls-arab', 'kmr-arab', 'knc-arab', 'kr-arab', 'krt-arab', 'ks-arab', 'ktl', 'ku-arab', 'ky-arab', 'lah', 'lki', 'lrc', 'lrk', 'luz', 'mad-arab', 'man-arab', 'mge-arab', 'mhj', 'mki-arab', 'mne-arab', 'mnk-arab', 'mrt-arab', 'ms-arab', 'mve', 'mvy', 'mwr-arab', 'mzb', 'mzn', 'nqo', 'ota', 'pa-arab', 'pga', 'pbt', 'pbu', 'phl', 'phn', 'phr', 'phv', 'pnb', 'prd', 'prs', 'ps', 'pst', 'raj-arab', 'rif-arab', 'rmt-arab', 'scl', 'sd', 'sdb', 'sdf', 'sdh', 'shi-arab', 'shu', 'shy-arab', 'skr', 'skr-arab', 'sqr', 'ssh', 'su-arab', 'sw-arab', 'swh', 'tg-arab', 'tig-arab', 'tk-arab', 'tly-arab', 'tt-arab', 'trw', 'txj-arab', 'ug', 'ug-arab', 'ur', 'uz-arab', 'uzs', 'wbl', 'wlc-arab', 'wne', 'wni-arab', 'wo-arab', 'xhe', 'xng-arab', 'xpu', 'ydd', 'ydg', 'yhd-arab', 'yi', 'yih', 'zdj-arab' } local ltrLangs = { 'aa', 'aaq', 'ab', 'abe', 'abs', 'ace', 'acf', 'ady', 'ady-cyrl', 'aeb-latn', 'af', 'agq', 'ak', 'akz', 'ale', 'aln', 'alq', 'als', 'alt', 'am', 'ami', 'an', 'ang', 'ann', 'anp', 'arn', 'as', 'asb', 'ase', 'ast', 'atj', 'aut', 'av', 'avk', 'awa', 'ay', 'az', 'azj', 'ba', 'bag', 'ban', 'ban-bali', 'bar', 'bas', 'bat-smg', 'bax', 'bbc', 'bbc-latn', 'bbj', 'bci', 'bcl', 'be', 'be-tarask', 'be-x-old', 'ber', 'bfd', 'bg', 'bh', 'bho', 'bi', 'bjn', 'bkc', 'bkh', 'bkm', 'blc', 'blk', 'bm', 'bn', 'bnm', 'bo', 'bpy', 'bqz', 'br', 'brh', 'brx', 'bs', 'btm', 'bto', 'bu', 'buc', 'bug', 'bxr', 'byv', 'bzj', 'ca', 'cak', 'cbk-zam', 'ccp', 'cdo', 'ce', 'ceb', 'ch', 'chc', 'cho', 'chr', 'chy', 'cic', 'ciw', 'cku', 'cnh', 'co', 'coc', 'cok', 'cop', 'cps', 'cr', 'crh', 'crh-cyrl', 'crh-latn', 'crj', 'crk', 'crl', 'crm', 'cro', 'crs', 'cs', 'csb', 'csw', 'cu', 'cv', 'cwd', 'cy', 'da', 'dag', 'dak', 'de', 'de-at', 'de-ch', 'de-formal', 'dgo', 'dhd', 'din', 'diq', 'doi', 'dsb', 'dtp', 'dty', 'dua', 'dum', 'dz', 'ee', 'egl', 'el', 'eml', 'en', 'en-ca', 'en-gb', 'en-ie', 'en-us', 'eo', 'es', 'es-419', 'es-formal', 'esu', 'et', 'eto', 'etu', 'eu', 'ewo', 'ext', 'fak', 'fan', 'fat', 'ff', 'fi', 'fil', 'fit', 'fiu-vro', 'fj', 'fkv', 'fmp', 'fo', 'fon', 'fr', 'frc', 'frm', 'fro', 'frp', 'frr', 'fub', 'fuc', 'fud', 'fue', 'fuf', 'fuh', 'fui', 'fur', 'fuv', 'fy', 'ga', 'gaa', 'gag', 'gan', 'gan-hans', 'gan-hant', 'gcf', 'gcr', 'gd', 'geh', 'gl', 'gld', 'gn', 'gom', 'gom-deva', 'gom-latn', 'gor', 'got', 'gpe', 'grc', 'grt', 'gsw', 'gu', 'guc', 'gur', 'guw', 'gv', 'gwi', 'gya', 'ha', 'hak', 'haw', 'hi', 'hid', 'hif', 'hif-deva', 'hif-latn', 'hil', 'hmn', 'hne', 'ho', 'hoc', 'hr', 'hrx', 'hsb', 'hsn', 'ht', 'hu', 'hu-formal', 'hy', 'hyw', 'hz', 'ia', 'id', 'ie', 'ig', 'ii', 'ik', 'ike-cans', 'ike-latn', 'ikt', 'ilo', 'inh', 'io', 'is', 'isu', 'it', 'iu', 'ja', 'jam', 'jbo', 'jut', 'jv', 'ka', 'kaa', 'kab', 'kbd', 'kbd-cyrl', 'kbd-latn', 'kbp', 'kcg', 'kea', 'ker', 'kg', 'kha', 'khn', 'ki', 'kiu', 'kj', 'kjp', 'kk', 'kk-cyrl', 'kk-kz', 'kk-latn', 'kk-tr', 'kl', 'km', 'kmb', 'kmr', 'kmr-cyrl', 'kmr-latn', 'kmw', 'kn', 'ko', 'ko-kp', 'ko-kr', 'koi', 'kr', 'krc', 'kri', 'krj', 'krl', 'kru', 'ks', 'ks-deva', 'ksf', 'ksh', 'ksw', 'ku', 'ku-latn', 'kum', 'kv', 'kw', 'ky', 'la', 'lad', 'lb', 'lbe', 'lem', 'lep', 'lez', 'lfn', 'lg', 'li', 'lif', 'lij', 'liv', 'lkt', 'lld', 'lmo', 'ln', 'lns', 'lo', 'loz', 'lt', 'ltg', 'lu', 'lus', 'lv', 'lzh', 'lzz', 'mad', 'mag', 'mai', 'map-bms', 'mcn', 'mcp', 'mdf', 'mfe', 'mg', 'mgp', 'mh', 'mhr', 'mhv', 'mi', 'mic', 'mik', 'min', 'mk', 'ml', 'mn', 'mni', 'mnw', 'mo', 'moe', 'mos', 'mqm', 'mr', 'mrh', 'mrj', 'mrq', 'mrv', 'ms', 'mt', 'mtr', 'mua', 'mus', 'mwl', 'mwr', 'my', 'myv', 'na', 'nah', 'nan', 'nan-hani', 'nap', 'nb', 'nds', 'nds-nl', 'ne', 'new', 'ng', 'nge', 'nia', 'niu', 'njo', 'nl', 'nl-informal', 'nla', 'nmg', 'nmz', 'nn', 'nnh', 'nnz', 'no', 'nod', 'non', 'nov', 'nrf', 'nrf-fr', 'nrf-gg', 'nrf-je', 'nrm', 'nsk', 'nso', 'nv', 'ny', 'nyn', 'nys', 'oc', 'ojb', 'ojc', 'ojg', 'ojs', 'ojw', 'oka', 'olo', 'om', 'oma', 'or', 'os', 'osa', 'osa-latn', 'otw', 'pa', 'pag', 'pam', 'pap', 'pap-aw', 'pcd', 'pcm', 'pdc', 'pdt', 'pfl', 'pi', 'pih', 'pl', 'pms', 'pmt', 'pnt', 'prg', 'pt', 'pt-br', 'pt-cv', 'pt-pt', 'pwn', 'qu', 'quc', 'qug', 'ray', 'rcf', 'rgn', 'rif', 'rki', 'rkt', 'rm', 'rmc', 'rme', 'rmf', 'rmo', 'rmq', 'rmy', 'rmz', 'rn', 'ro', 'roa-rup', 'roa-tara', 'rsk', 'ru', 'rue', 'rup', 'ruq', 'ruq-cyrl', 'ruq-latn', 'rw', 'rwr', 'ryu', 'sa', 'sah', 'sak', 'sat', 'sc', 'scd', 'scn', 'sco', 'sdc', 'se', 'se-fi', 'se-no', 'se-se', 'sei', 'ses', 'sg', 'sgs', 'sh', 'sh-cyrl', 'sh-latn', 'shi', 'shi-latn', 'shi-tfng', 'shn', 'shy', 'shy-latn', 'si', 'simple', 'sip', 'sjd', 'sje', 'sju', 'sk', 'sl', 'sli', 'sm', 'sma', 'smj', 'smn', 'sms', 'sn', 'so', 'sq', 'sr', 'sr-cyrl', 'sr-ec', 'sr-el', 'sr-latn', 'srn', 'sro', 'srq', 'ss', 'st', 'sto', 'stq', 'sty', 'su', 'suz', 'sv', 'sw', 'swb', 'swv', 'syl', 'szl', 'szy', 'ta', 'tay', 'tcy', 'tdd', 'te', 'tet', 'tg', 'tg-cyrl', 'tg-latn', 'th', 'thl', 'ti', 'tk', 'tl', 'tly', 'tly-cyrl', 'tn', 'to', 'tokipona', 'tpi', 'tr', 'trp', 'tru', 'trv', 'ts', 'tt', 'tt-cyrl', 'tt-latn', 'tum', 'tun', 'tvu', 'tw', 'ty', 'tyv', 'tzl', 'tzm', 'udm', 'ug-latn', 'uk', 'umb', 'uve', 'uz', 'uz-cyrl', 'uz-latn', 've', 'vec', 'vep', 'vi', 'vic', 'vls', 'vmf', 'vmw', 'vo', 'vot', 'vro', 'vut', 'wa', 'war', 'wes', 'win', 'wlc', 'wls', 'wni', 'wo', 'wry', 'wuu', 'wya', 'xac', 'xal', 'xh', 'xmf', 'xnr', 'xpq', 'xsy', 'xtg', 'yas', 'yat', 'yav', 'ybb', 'yo', 'yrl', 'yue', 'za', 'zdj', 'zea', 'zgh', 'zh', 'zh-classical', 'zh-cn', 'zh-hans', 'zh-hant', 'zh-hk', 'zh-min-nan', 'zh-mo', 'zh-my', 'zh-sg', 'zh-tw', 'zh-wuu', 'zh-yue', 'zu', 'zun' } -- Build the inverted map of languages to direction returned by this data module (fast, but collisions are not checked: run the test module). for _, lang in ipairs(rtlLangs) do p[lang] = true end for _, lang in ipairs(ltrLangs) do p[lang] = false end -- Also store the two lists (at boolean indice), used by the test module to check the inverted map. p[true] = rtlLangs p[false] = ltrLangs return p 50sfjepbbiks7cx9gmdiwhoy2oofqf7 10646 10645 2026-08-25T23:38:26Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Dir/RTL_overrides]] 10645 Scribunto text/plain local p = {} --[==[ Basic input sequences: relative order or duplicates does not matter here (but the end of the self test displays them sorted and deduplicated), but codes must be valid and belong to only one of the two sequences). Any missing language code will be checked with mw.language.new(code):isRTL(), which is costly in loaded resources (it can only check 20 languages at most including the content language) So it is best to map all languages that are the most likely to be used. --]==] local rtlLangs = { 'aaf-arab', 'aao', 'abh', 'abq-arab', 'abv', 'ace-arab', 'acm', 'acq', 'acw', 'acx', 'acy-arab', 'adf', 'ady-arab', 'aeb', 'aeb-arab', 'aec', 'afb', 'ajp', 'apc', 'apd', 'ar', 'arb', 'arc', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'az-arab', 'azb', 'bal', 'bbz', 'bcc', 'bej-arab', 'ber-arab', 'bft', 'bgn', 'bgp', 'bqi', 'bjm', 'bjn-arab', 'bms-arab', 'brh-arab', 'bsk', 'cja-arab', 'cjm-arab', 'ckb', 'crh-arab', 'deh', 'dgo-arab', 'dng-arab', 'doi-arab', 'dv', 'dyu-arab', 'fa', 'fa-af', 'ff-arab', 'ffm-arab', 'fub-arab', 'fuc-arab', 'fuf-arab', 'fuh-arab', 'fui-arab', 'fuv-arab', 'gda', 'glk', 'gwc', 'gbz-arab', 'gju-arab', 'ha-arab', 'hac', 'he', 'hnd', 'hno', 'jat', 'kbd-arab', 'kbl-arab', 'kby-arab', 'kcn', 'kfr', 'khw', 'kk-arab', 'kk-cn', 'kls-arab', 'kmr-arab', 'knc-arab', 'kr-arab', 'krt-arab', 'ks-arab', 'ktl', 'ku-arab', 'ky-arab', 'lah', 'lki', 'lrc', 'lrk', 'luz', 'mad-arab', 'man-arab', 'mge-arab', 'mhj', 'mki-arab', 'mne-arab', 'mnk-arab', 'mrt-arab', 'ms-arab', 'mve', 'mvy', 'mwr-arab', 'mzb', 'mzn', 'nqo', 'ota', 'pa-arab', 'pga', 'pbt', 'pbu', 'phl', 'phn', 'phr', 'phv', 'pnb', 'prd', 'prs', 'ps', 'pst', 'raj-arab', 'rif-arab', 'rmt-arab', 'scl', 'sd', 'sdb', 'sdf', 'sdh', 'shi-arab', 'shu', 'shy-arab', 'skr', 'skr-arab', 'sqr', 'ssh', 'su-arab', 'sw-arab', 'swh', 'tg-arab', 'tig-arab', 'tk-arab', 'tly-arab', 'tt-arab', 'trw', 'txj-arab', 'ug', 'ug-arab', 'ur', 'uz-arab', 'uzs', 'wbl', 'wlc-arab', 'wne', 'wni-arab', 'wo-arab', 'xhe', 'xng-arab', 'xpu', 'ydd', 'ydg', 'yhd-arab', 'yi', 'yih', 'zdj-arab' } local ltrLangs = { 'aa', 'aaq', 'ab', 'abe', 'abs', 'ace', 'acf', 'ady', 'ady-cyrl', 'aeb-latn', 'af', 'agq', 'ak', 'akz', 'ale', 'aln', 'alq', 'als', 'alt', 'am', 'ami', 'an', 'ang', 'ann', 'anp', 'arn', 'as', 'asb', 'ase', 'ast', 'atj', 'aut', 'av', 'avk', 'awa', 'ay', 'az', 'azj', 'ba', 'bag', 'ban', 'ban-bali', 'bar', 'bas', 'bat-smg', 'bax', 'bbc', 'bbc-latn', 'bbj', 'bci', 'bcl', 'be', 'be-tarask', 'be-x-old', 'ber', 'bfd', 'bg', 'bh', 'bho', 'bi', 'bjn', 'bkc', 'bkh', 'bkm', 'blc', 'blk', 'bm', 'bn', 'bnm', 'bo', 'bpy', 'bqz', 'br', 'brh', 'brx', 'bs', 'btm', 'bto', 'bu', 'buc', 'bug', 'bxr', 'byv', 'bzj', 'ca', 'cak', 'cbk-zam', 'ccp', 'cdo', 'ce', 'ceb', 'ch', 'chc', 'cho', 'chr', 'chy', 'cic', 'ciw', 'cku', 'cnh', 'co', 'coc', 'cok', 'cop', 'cps', 'cr', 'crh', 'crh-cyrl', 'crh-latn', 'crj', 'crk', 'crl', 'crm', 'cro', 'crs', 'cs', 'csb', 'csw', 'cu', 'cv', 'cwd', 'cy', 'da', 'dag', 'dak', 'de', 'de-at', 'de-ch', 'de-formal', 'dgo', 'dhd', 'din', 'diq', 'doi', 'dsb', 'dtp', 'dty', 'dua', 'dum', 'dz', 'ee', 'egl', 'el', 'eml', 'en', 'en-ca', 'en-gb', 'en-ie', 'en-us', 'eo', 'es', 'es-419', 'es-formal', 'esu', 'et', 'eto', 'etu', 'eu', 'ewo', 'ext', 'fak', 'fan', 'fat', 'ff', 'fi', 'fil', 'fit', 'fiu-vro', 'fj', 'fkv', 'fmp', 'fo', 'fon', 'fr', 'frc', 'frm', 'fro', 'frp', 'frr', 'fub', 'fuc', 'fud', 'fue', 'fuf', 'fuh', 'fui', 'fur', 'fuv', 'fy', 'ga', 'gaa', 'gag', 'gan', 'gan-hans', 'gan-hant', 'gcf', 'gcr', 'gd', 'geh', 'gl', 'gld', 'gn', 'gom', 'gom-deva', 'gom-latn', 'gor', 'got', 'gpe', 'grc', 'grt', 'gsw', 'gu', 'guc', 'gur', 'guw', 'gv', 'gwi', 'gya', 'ha', 'hak', 'haw', 'hi', 'hid', 'hif', 'hif-deva', 'hif-latn', 'hil', 'hmn', 'hne', 'ho', 'hoc', 'hr', 'hrx', 'hsb', 'hsn', 'ht', 'hu', 'hu-formal', 'hy', 'hyw', 'hz', 'ia', 'id', 'ie', 'ig', 'ii', 'ik', 'ike-cans', 'ike-latn', 'ikt', 'ilo', 'inh', 'io', 'is', 'isu', 'it', 'iu', 'ja', 'jam', 'jbo', 'jut', 'jv', 'ka', 'kaa', 'kab', 'kbd', 'kbd-cyrl', 'kbd-latn', 'kbp', 'kcg', 'kea', 'ker', 'kg', 'kha', 'khn', 'ki', 'kiu', 'kj', 'kjp', 'kk', 'kk-cyrl', 'kk-kz', 'kk-latn', 'kk-tr', 'kl', 'km', 'kmb', 'kmr', 'kmr-cyrl', 'kmr-latn', 'kmw', 'kn', 'ko', 'ko-kp', 'ko-kr', 'koi', 'kr', 'krc', 'kri', 'krj', 'krl', 'kru', 'ks', 'ks-deva', 'ksf', 'ksh', 'ksw', 'ku', 'ku-latn', 'kum', 'kv', 'kw', 'ky', 'la', 'lad', 'lb', 'lbe', 'lem', 'lep', 'lez', 'lfn', 'lg', 'li', 'lif', 'lij', 'liv', 'lkt', 'lld', 'lmo', 'ln', 'lns', 'lo', 'loz', 'lt', 'ltg', 'lu', 'lus', 'lv', 'lzh', 'lzz', 'mad', 'mag', 'mai', 'map-bms', 'mcn', 'mcp', 'mdf', 'mfe', 'mg', 'mgp', 'mh', 'mhr', 'mhv', 'mi', 'mic', 'mik', 'min', 'mk', 'ml', 'mn', 'mni', 'mnw', 'mo', 'moe', 'mos', 'mqm', 'mr', 'mrh', 'mrj', 'mrq', 'mrv', 'ms', 'mt', 'mtr', 'mua', 'mus', 'mwl', 'mwr', 'my', 'myv', 'na', 'nah', 'nan', 'nan-hani', 'nap', 'nb', 'nds', 'nds-nl', 'ne', 'new', 'ng', 'nge', 'nia', 'niu', 'njo', 'nl', 'nl-informal', 'nla', 'nmg', 'nmz', 'nn', 'nnh', 'nnz', 'no', 'nod', 'non', 'nov', 'nrf', 'nrf-fr', 'nrf-gg', 'nrf-je', 'nrm', 'nsk', 'nso', 'nv', 'ny', 'nyn', 'nys', 'oc', 'ojb', 'ojc', 'ojg', 'ojs', 'ojw', 'oka', 'olo', 'om', 'oma', 'or', 'os', 'osa', 'osa-latn', 'otw', 'pa', 'pag', 'pam', 'pap', 'pap-aw', 'pcd', 'pcm', 'pdc', 'pdt', 'pfl', 'pi', 'pih', 'pl', 'pms', 'pmt', 'pnt', 'prg', 'pt', 'pt-br', 'pt-cv', 'pt-pt', 'pwn', 'qu', 'quc', 'qug', 'ray', 'rcf', 'rgn', 'rif', 'rki', 'rkt', 'rm', 'rmc', 'rme', 'rmf', 'rmo', 'rmq', 'rmy', 'rmz', 'rn', 'ro', 'roa-rup', 'roa-tara', 'rsk', 'ru', 'rue', 'rup', 'ruq', 'ruq-cyrl', 'ruq-latn', 'rw', 'rwr', 'ryu', 'sa', 'sah', 'sak', 'sat', 'sc', 'scd', 'scn', 'sco', 'sdc', 'se', 'se-fi', 'se-no', 'se-se', 'sei', 'ses', 'sg', 'sgs', 'sh', 'sh-cyrl', 'sh-latn', 'shi', 'shi-latn', 'shi-tfng', 'shn', 'shy', 'shy-latn', 'si', 'simple', 'sip', 'sjd', 'sje', 'sju', 'sk', 'sl', 'sli', 'sm', 'sma', 'smj', 'smn', 'sms', 'sn', 'so', 'sq', 'sr', 'sr-cyrl', 'sr-ec', 'sr-el', 'sr-latn', 'srn', 'sro', 'srq', 'ss', 'st', 'sto', 'stq', 'sty', 'su', 'suz', 'sv', 'sw', 'swb', 'swv', 'syl', 'szl', 'szy', 'ta', 'tay', 'tcy', 'tdd', 'te', 'tet', 'tg', 'tg-cyrl', 'tg-latn', 'th', 'thl', 'ti', 'tk', 'tl', 'tly', 'tly-cyrl', 'tn', 'to', 'tokipona', 'tpi', 'tr', 'trp', 'tru', 'trv', 'ts', 'tt', 'tt-cyrl', 'tt-latn', 'tum', 'tun', 'tvu', 'tw', 'ty', 'tyv', 'tzl', 'tzm', 'udm', 'ug-latn', 'uk', 'umb', 'uve', 'uz', 'uz-cyrl', 'uz-latn', 've', 'vec', 'vep', 'vi', 'vic', 'vls', 'vmf', 'vmw', 'vo', 'vot', 'vro', 'vut', 'wa', 'war', 'wes', 'win', 'wlc', 'wls', 'wni', 'wo', 'wry', 'wuu', 'wya', 'xac', 'xal', 'xh', 'xmf', 'xnr', 'xpq', 'xsy', 'xtg', 'yas', 'yat', 'yav', 'ybb', 'yo', 'yrl', 'yue', 'za', 'zdj', 'zea', 'zgh', 'zh', 'zh-classical', 'zh-cn', 'zh-hans', 'zh-hant', 'zh-hk', 'zh-min-nan', 'zh-mo', 'zh-my', 'zh-sg', 'zh-tw', 'zh-wuu', 'zh-yue', 'zu', 'zun' } -- Build the inverted map of languages to direction returned by this data module (fast, but collisions are not checked: run the test module). for _, lang in ipairs(rtlLangs) do p[lang] = true end for _, lang in ipairs(ltrLangs) do p[lang] = false end -- Also store the two lists (at boolean indice), used by the test module to check the inverted map. p[true] = rtlLangs p[false] = ltrLangs return p 50sfjepbbiks7cx9gmdiwhoy2oofqf7 Tempilet:LangSwitch 10 1317 10647 2018-06-04T12:13:39Z commons>Jarekt 0 Switch to [[Module:LangSwitch]]; allow multiple languages to map to a single value 10647 wikitext text/x-wiki <includeonly>{{#invoke:LangSwitch|langSwitch}}</includeonly><noinclude> {{heavily used template}} {{Documentation}} </noinclude> 7wgvi7d3m9ku5n15qjrkwqgxnln0j1p 10648 10647 2026-08-25T23:38:26Z RAPTOR7762 18 1 revision imported from [[:commons:Template:LangSwitch]] 10647 wikitext text/x-wiki <includeonly>{{#invoke:LangSwitch|langSwitch}}</includeonly><noinclude> {{heavily used template}} {{Documentation}} </noinclude> 7wgvi7d3m9ku5n15qjrkwqgxnln0j1p Module:Complex date 828 1318 10651 2024-07-15T14:14:40Z commons>Jarekt 0 use Module:TagQS to add QS tags 10651 Scribunto text/plain --[[ __ __ _ _ ____ _ _ | \/ | ___ __| |_ _| | ___ _ / ___|___ _ __ ___ _ __ | | _____ __ __| | __ _| |_ ___ | |\/| |/ _ \ / _` | | | | |/ _ (_) | / _ \| '_ ` _ \| '_ \| |/ _ \ \/ / / _` |/ _` | __/ _ \ | | | | (_) | (_| | |_| | | __/_| |__| (_) | | | | | | |_) | | __/> < | (_| | (_| | || __/ |_| |_|\___/ \__,_|\__,_|_|\___(_)\____\___/|_| |_| |_| .__/|_|\___/_/\_\ \__,_|\__,_|\__\___| |_| This module is intended for creation of complex date phrases in variety of languages. Once deployed, please do not modify this code without applying the changes first at Module:Complex date/sandbox and testing at Module:Complex date/sandbox/testcases. Authors and maintainers: * User:Sn1per - first draft of the original version * User:Jarekt - corrections and expansion of the original version ]] -- List of external modules and functions local p = {Error = nil} local i18n = require('Module:i18n/complex date') -- used for translations of date related phrases local ISOdate = require('Module:ISOdate')._ISOdate -- used for parsing dates in YYYY-MM-DD and related formats local TagQS = require('Module:TagQS') local Calendar -- loaded lazily -- ================================================== -- === Internal functions =========================== -- ================================================== local function langSwitch(list,lang) local langList = mw.language.getFallbacksFor(lang) table.insert(langList,1,lang) table.insert(langList,math.max(#langList,2),'default') for i,language in ipairs(langList) do if list[language] then return list[language] end end end -- ================================================== local function formatnum1(numStr, lang) -- mostly require('Module:Formatnum').formatNum function used to translate a number to use different numeral characters, -- except that it it does not call that function unless the language is on the list "LList" local LList = {bn=1,bpy=1,kn=1,hi=1,mr=1,new=1,pa=1,gu=1,fa=1,glk=1,mzn=1,ur=1,ar=1,ckb=1,ks=1,lo=1,['or']=1,bo=1,['ml-old']=1,mn=1,te=1,th=1} if LList[lang] then -- call only when the language is on the list numStr = require('Module:Formatnum').formatNum(numStr, lang, 1) end return numStr end -- ================================================== local function getISODate(datestr, datetype, lang, num, case) -- translate dates in the format YYYY, YYYY-MM, and YYYY-MM-DD if not case and i18n.Translations[datetype] then -- look up the grammatical case needed and call ISOdate module local rec = langSwitch(i18n.Translations[datetype], lang) if type(rec)=='table' then case = rec.case[num] end end return ISOdate(datestr, lang, case, '', 1) end -- ======================================================================= local function translatePhrase(date1, date2, operation, lang, state) -- use tables in Module:i18n/complex date to translate a phrase if not i18n.Translations[operation] then p.Error = string.format('<span style="background-color:red;">Error in [[Module:Complex date]]: input parameter "%s" is not recognized.</span>', operation or 'nil') return '' end local dateStr = langSwitch(i18n.Translations[operation], lang) if type(dateStr)=='table' then dateStr = dateStr[1] end if type(dateStr)=='function' then local dateFunc = dateStr local nDates = i18n.Translations[operation]['nDates'] if nDates==2 then -- 2 date phrase dateStr = dateFunc(date1, date2, state) else -- 1 date phrase dateStr = dateFunc(date1, state) end end if type(dateStr)=='string' then -- replace parts of the string '$date1' and '$date2' with date1 and date2 strings dateStr = mw.ustring.gsub(dateStr, '$date1', date1) dateStr = mw.ustring.gsub(dateStr, '$date2', date2) else -- Special case of more complex phrases that can be build out of simple phrases -- If complex case is not translated to "lang" than build it out of simpler ones local x = dateStr dateStr = p._complex_date(x.conj, x.adj1, date1, x.units1, x.era1, x.adj2, date2, x.units2, x.era2, lang, 2) end return dateStr end -- ======================================================================= local function oneDatePhrase(dateStr, adj, era, units, lang, num, case, state) -- translate a single date phrase if num==2 then state.adj, state.era, state.units, state.precision = state.adj2, state.era2, state.units2, state.precision2 end -- dateStr can have many forms: ISO date, year or a number for -- decade, century or millennium if units == '' then -- unit is "year", "month", "day" dateStr = getISODate(dateStr, adj, lang, num, case) else -- units is "decade", "century", "millennium'' dateStr = translatePhrase(dateStr, '', units, lang, state) end -- add adjective ("early", "mid", etc.) or preposition ("before", "after", -- "circa", etc.) to the date if adj ~= '' then dateStr = translatePhrase(dateStr, '', adj, lang, state) else -- only era? dateStr = formatnum1(dateStr, lang) end -- add era if era ~= '' then dateStr = translatePhrase(dateStr, '', era, lang, state) end return dateStr end -- ======================================================================= local function twoDatePhrase(date1, date2, state, lang) -- translate a double date phrase local dateStr, case local era='' if state.era1 == state.era2 then -- if both eras are the same than add it only once era = state.era1 state.era1 = '' state.era2 = '' end case = {nil, nil} if i18n.Translations[state.conj] then local rec = langSwitch(i18n.Translations[state.conj], lang) if type(rec)=='table' then case = rec.case end end date1 = oneDatePhrase(date1, state.adj1, state.era1, state.units1, lang, 1, case[1], state) date2 = oneDatePhrase(date2, state.adj2, state.era2, state.units2, lang, 2, case[2], state) dateStr = translatePhrase(date1, date2, state.conj, lang, state) if era ~= '' then dateStr = translatePhrase(dateStr, '', era, lang, state) end return dateStr end -- ======================================================================= local function otherPhrases(date1, date2, operation, era, lang, state) -- translate specialized phrases local dateStr = '' if operation == 'islamic' then if date2=='' then date2 = mw.getCurrentFrame():callParserFunction('#time', 'xmY', date1) end date1 = getISODate(date1, operation, lang, 1, nil) date2 = getISODate(date2, operation, lang, 2, nil) if era == '' then era = 'ad' end dateStr = translatePhrase(date1, '', era, lang, state) .. ' (' .. translatePhrase(date2, '', 'ah', lang, state) .. ')' era = '' elseif operation == 'julian' then if not date2 and date1 then -- Convert from Julian to Gregorian calendar date if Calendar == nil then Calendar = require("Module:Calendar") -- lazy loding (only if needed) end local JDN = Calendar._date2jdn(date1, 0) if JDN then date2 = date1 -- first date is assumed to be Julian date1 = Calendar._jdn2date(JDN, 1) end end date1 = getISODate(date1, operation, lang, 1, nil) date2 = getISODate(date2, operation, lang, 2, nil) dateStr = translatePhrase(date1, date2, operation, lang, state) dateStr = mw.ustring.gsub(mw.ustring.gsub(dateStr, '%( ', '('), ' %)', ')') -- in case date2 is empty elseif operation == 'turn of the year' or operation == 'turn of the decade' or operation == 'turn of the century' then local dt = 1 if operation == 'turn of the decade' then dt=10 end if not date2 or date2=='' then date2=tostring(tonumber(date1)-dt) end if era~='bp' and era~='bc' then date1, date2 = date2, date1 end if operation == 'turn of the year' then date1 = ISOdate(date1, lang, '', '', 1) date2 = ISOdate(date2, lang, '', '', 1) else date1 = formatnum1(date1, lang) date2 = formatnum1(date2, lang) end dateStr = translatePhrase(date1, date2, operation, lang, state) elseif operation == 'year unknown' then dateStr = translatePhrase('', '', operation, lang, state) elseif operation == 'unknown' then dateStr = tostring(mw.message.new( "exif-unknowndate" ):inLanguage( lang )) end -- add era if era ~= '' then dateStr = translatePhrase(dateStr, '', era, lang, state) end return dateStr end -- ======================================================================= local function checkAliases(str1, str2, sType) -- some inputs have many aliases - reconcile them and ensure string is playing a proper role local out = '' if str1 and str1~='' then local a = i18n.Synonyms[str1] -- look up synonyms of "str1" if a then out = a[1] else p.Error = string.format('<span style="background-color:red;">Error in [[Module:Complex date]]: %s is not recognized.</span>', str1) end elseif str2 and str2~='' then -- if "str1" of type "sType" is empty than maybe ... local a = i18n.Synonyms[str2] -- ..."str2" is of the same type and is not empty if a and a[2]==sType then out = a[1] str2 = '' end end return out, str2 end -- ======================================================================= local function datePrecision(dateStr, units) -- "in this module "Units" is a string like millennium, century, or decade -- "precision" is wikibase compatible date precision number: 6=millennium, 7=century, 8=decade, 9=year, 10=month, 11=day -- based on string or numeric input calculate "Units" and "precision" local precision if type(units)=='number' then precision = units if precision>11 then precision=11 end -- clip the range of precision values if precision==6 then units='millennium' elseif precision==7 then units='century' elseif precision==8 then units='decade' else units = '' end elseif type(units)=='string' then units = string.lower(units) if units=='millennium' then precision=6 elseif units=='century' then precision=7 elseif units=='decade' then precision=8 else precision=9 end end if units=='' or precision==9 then local sLen = mw.ustring.len(dateStr) if sLen<= 4 then precision=9 elseif sLen== 7 then precision=10 elseif sLen>=10 then precision=11 end units='' end if precision==6 and dateStr.match( dateStr, '%d000' )~=nil then dateStr = tostring(math.floor(tonumber(dateStr)/1000) +1) elseif precision==7 and mw.ustring.match( dateStr, '%d%d00' )~=nil then dateStr = tostring(math.floor(tonumber(dateStr)/100) +1) end return dateStr, units, precision end -- ======================================================================= local function isodate2timestamp(dateStr, precision, era) -- convert date string to timestamps used by Quick Statements local tStamp = nil if era == 'ah' or precision<6 then return nil elseif era ~= '' then local eraLUT = {ad='+', bc='-', bp='-' } era = eraLUT[era] else era='+' end -- convert isodate to timestamp used by quick statements if precision>=9 then if string.match(dateStr,"^%d%d%d%d$") then -- if YYYY format tStamp = era .. dateStr .. '-00-00T00:00:00Z/9' elseif string.match(dateStr,"^%d%d%d%d%-%d%d$") then -- if YYYY-MM format tStamp = era .. dateStr .. '-00T00:00:00Z/10' elseif string.match(dateStr,"^%d%d%d%d%-%d%d%-%d%d$") then -- if YYYY-MM-DD format tStamp = era .. dateStr .. 'T00:00:00Z/11' end elseif precision==8 then -- decade tStamp = era .. dateStr .. '-00-00T00:00:00Z/8' elseif precision==7 then -- century local d = tostring(tonumber(dateStr)-1) tStamp = era .. d .. '50-00-00T00:00:00Z/7' elseif precision==6 then local d = tostring(tonumber(dateStr)-1) tStamp = era .. d .. '500-00-00T00:00:00Z/6' end return tStamp end -- ======================================================================= local function oneDateQScode(dateStr, adj, era, precision) -- create QuickStatements string for "one date" dates local outputStr = '' local d = isodate2timestamp(dateStr, precision, era) if not d then return '' end local rLUT = { early='Q40719727' , mid='Q40719748', late='Q40719766', ['1quarter']='Q40690303' , ['2quarter']='Q40719649' , ['3quarter']='Q40719662', ['4quarter']='Q40719674', spring='Q40720559' , summer='Q40720564' , autumn='Q40720568' , winter='Q40720553', firsthalf='Q40719687', secondhalf='Q40719707' } local qLUT = {['from']='P580', ['until']='P582', ['after']='P1319', ['before']='P1326', ['by']='P1326'} local refine = rLUT[adj] local qualitier = qLUT[adj] if adj=='' then outputStr = d elseif adj=='circa' then outputStr = d..",P1480,Q5727902" elseif refine then outputStr = d..",P4241,"..refine elseif precision>7 and qualitier then local century = string.gsub(d, 'Z%/%d+', 'Z/7') outputStr = century ..",".. qualitier ..","..d end return outputStr end -- ======================================================================= local function twoDateQScode(date1, date2, state) -- create QuickStatements string for "two date" dates if state.adj1~='' or state.adj2~='' or state.era1~=state.era2 then return '' -- QuickStatements string are not generated for two date phrases with adjectives end local outputStr = '' local d1 = isodate2timestamp(date1, state.precision1, state.era1) local d2 = isodate2timestamp(date2, state.precision2, state.era2) if (not d1) or (not d2) then return '' end -- find date with lower precision in common to both dates local cd local year1 = tonumber(string.sub(d1,2,5)) local year2 = tonumber(string.sub(d2,2,5)) local k = 0 for i = 1,10,1 do if string.sub(d1,1,i)==string.sub(d2,1,i) then k = i -- find last matching letter end end if k>=9 then -- same month, since "+YYYY-MM-" is in common cd = isodate2timestamp(string.sub(d1,2,8), 10, state.era1) elseif k>=6 and k<9 then -- same year, since "+YYYY-" is in common cd = isodate2timestamp(tostring(year1), 9, state.era1) elseif k==4 then -- same decade(k=4, precision=8), since "+YYY" is in common cd = isodate2timestamp(tostring(year1), 8, state.era1) elseif k==3 then -- same century(k=3, precision=7) since "+YY" is in common local d = tostring(math.floor(year1/100) +1) -- convert 1999 -> 20 cd = isodate2timestamp( d, 7, state.era1) elseif k==2 then -- same millennium (k=2, precision=6), since "+Y" is in common local d = tostring(math.floor(year1/1000) +1) -- convert 1999 -> 2 cd = isodate2timestamp( d, 6, state.era1) end if not cd then return '' end --if not cd then -- return ' <br/>error: ' .. d1.." / " .. d2.." / ".. (cd or '') .." / ".. string.sub(d1,2,5).." / " .. string.sub(d2,2,5).." / " .. tostring(k) --end -- if (state.conj=='from-until') or (state.conj=='and' and year1==year2-1) then outputStr = cd ..",P580,".. d1 ..",P582,".. d2 elseif (state.conj=='between') or (state.conj=='or' and year1==year2-1) then outputStr = cd ..",P1319,".. d1 ..",P1326,".. d2 elseif state.conj=='circa2' then outputStr = cd ..",P1319,".. d1 ..",P1326,".. d2 ..",P1480,Q5727902" end return outputStr end -- ======================================================================= local function processInputParams(conj, adj1, date1, units1, era1, adj2, date2, units2, era2, lang, passNr) -- process inputs and save date in state array local state = {} state.conj = string.lower(conj or '') state.adj1 = string.lower(adj1 or '') state.adj2 = string.lower(adj2 or '') state.era1 = string.lower(era1 or '') state.era2 = string.lower(era2 or '') state.units1 = string.lower(units1 or '') state.units2 = string.lower(units2 or '') -- if date 1 is missing but date 2 is provided than swap them if date1 == '' and date2 ~= '' then date1 = date2 date2 = '' state = {adj1 = state.adj2, era1 = state.era2, units1 = state.units2, adj2 = '', era2 = '', units2 = '', conj=state.conj, num=1} end if date2 ~= '' then state.nDates = 2 elseif date1 ~= '' then state.nDates = 1 else state.nDates = 0 end -- reconcile alternative names for text inputs local conj = checkAliases(state.conj ,'' ,'j') state.adj1 ,conj = checkAliases(state.adj1 ,conj,'a') state.units1,conj = checkAliases(state.units1,conj,'p') state.era1 ,conj = checkAliases(state.era1 ,conj,'e') state.special,conj = checkAliases('',conj,'c') state.adj2 = checkAliases(state.adj2 ,'','a') state.units2 = checkAliases(state.units2,'','p') state.era2 = checkAliases(state.era2 ,'','e') state.conj = conj state.lang = lang if p.Error~=nil then return nil end -- calculate date precision value date1, state.units1, state.precision1 = datePrecision(date1, state.units1) date2, state.units2, state.precision2 = datePrecision(date2, state.units2) -- Handle special cases -- Some complex phrases can be created out of simpler ones. Therefore on pass # 1 we try to create -- the phrase using complex phrase and if that is not found than on the second pass we try to build -- the phrase out of the simpler ones if passNr==1 then if state.adj1=='circa' and state.nDates == 2 then state.conj = 'circa2' state.adj1 = '' state.adj2 = '' end if state.nDates == 2 and state.adj1=='late' and state.adj2=='early' and state.conj=='and' and state.units1==state.units2 and state.era1==state.era2 then if state.units1=='century' then state.conj='turn of the century' elseif state.units1=='decade' then state.conj='turn of the decade' elseif state.units1=='' then state.conj='turn of the year' end state.adj1 = '' state.adj2 = '' state.units1 = '' state.units2 = '' end end state.adj, state.era, state.units, state.precision = state.adj1, state.era1, state.units1, state.precision1 return date1, date2, state end -- ================================================== -- === External functions =========================== -- ================================================== function p.Era(frame) -- process inputs local dateStr local args = frame.args if not (args.lang and mw.language.isSupportedLanguage(args.lang)) then args.lang = frame:callParserFunction( "int", "lang" ) -- get user's chosen language end local lang = args['lang'] local dateStr = args['date'] or '' local eraType = string.lower(args['era'] or '') dateStr = ISOdate(dateStr, lang, '', '', 1) if eraType then eraType = checkAliases(eraType ,'','e') dateStr = translatePhrase(dateStr, '', eraType, lang, {}) end return dateStr end -- ======================================================================= function p._complex_date(conj, adj1, date1, units1, era1, adj2, date2, units2, era2, lang, passNr) local Output='' local state -- process inputs and save date in state array date1, date2, state = processInputParams(conj, adj1, date1, units1, era1, adj2, date2, units2, era2, lang, passNr) if p.Error~=nil then return nil end local errorStr = string.format( '\n*conj=%s, adj1=%s, era1=%s, unit1=%s, prec1=%i, adj2=%s, era2=%s, unit2=%s, prec2=%i, special=%s', state.conj, state.adj1, state.era1, state.units1, state.precision1, state.adj2, state.era2, state.units2, state.precision2, state.special) -- call specialized functions local QScode = '' if state.special~='' then Output = otherPhrases(date1, date2, state.special, state.era1, lang, state) elseif state.conj~='' then QScode = twoDateQScode(date1, date2, state) Output = twoDatePhrase(date1, date2, state, lang) elseif state.adj1~='' or state.era1~='' or state.units1~='' then Output = oneDatePhrase(date1, state.adj1, state.era1, state.units1, lang, 1, nil, state) QScode = oneDateQScode(date1, state.adj1, state.era1, state.precision1) elseif date1~='' then Output = ISOdate(date1, lang, '', 'dtstart', '100-999') end if p.Error~=nil then return errorStr end -- if there is any wikicode in the string than execute it if mw.ustring.find(Output, '{') then Output = mw.getCurrentFrame():preprocess(Output) end if QScode and #QScode>0 then QScode = TagQS.createTag('date', 'P', QScode) end return Output .. QScode end -- ======================================================================= function p._complex_date_cer(conj, adj1, date1, units1, era1, adj2, date2, units2, era2, certainty, lang) -- same as p._complex_date but with extra parameter for certainty: probably, possibly, presumably, etc. local dateStr = p._complex_date(conj, adj1, date1, units1, era1, adj2, date2, units2, era2, lang, 1) --certainty = checkAliases(certainty, conj, 'r') local LUT = {probably='Q56644435', presumably='Q18122778', possibly='Q30230067', circa='Q5727902' } if certainty and LUT[certainty] then local state = {} date1, date2, state = processInputParams(conj, adj1, date1, units1, era1, adj2, date2, units2, era2, lang, 1) dateStr = translatePhrase(dateStr, '', certainty, lang, state) dateStr = TagQS.append2value(dateStr, 'date', 'P1480,' .. LUT[certainty]) end return dateStr end -- ======================================================================= function p.complex_date(frame) -- process inputs local dateStr local args = frame.args if not (args.lang and mw.language.isSupportedLanguage(args.lang)) then args.lang = frame:callParserFunction( "int", "lang" ) -- get user's chosen language end local date1 = args['date1'] or args['2'] or args['date'] or '' local date2 = args['date2'] or args['3'] or '' local conj = args['conj'] or args['1'] or '' local adj1 = args['adj1'] or args['adj'] or '' local adj2 = args['adj2'] or '' local units1 = args['precision1'] or args['precision'] or '' local units2 = args['precision2'] or args['precision'] or '' local era1 = args['era1'] or args['era'] or '' local era2 = args['era2'] or args['era'] or '' local certainty = args['certainty'] local lang = args['lang'] dateStr = p._complex_date_cer(conj, adj1, date1, units1, era1, adj2, date2, units2, era2, certainty, lang) if p.Error~=nil then dateStr = p.Error .. '[[Category:Pages using Complex date template with incorrect parameter]]' end return dateStr end return p tf0nv3i4i1tobqdj0fvzcimmm4xlxe7 10652 10651 2026-08-25T23:38:26Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Complex_date]] 10651 Scribunto text/plain --[[ __ __ _ _ ____ _ _ | \/ | ___ __| |_ _| | ___ _ / ___|___ _ __ ___ _ __ | | _____ __ __| | __ _| |_ ___ | |\/| |/ _ \ / _` | | | | |/ _ (_) | / _ \| '_ ` _ \| '_ \| |/ _ \ \/ / / _` |/ _` | __/ _ \ | | | | (_) | (_| | |_| | | __/_| |__| (_) | | | | | | |_) | | __/> < | (_| | (_| | || __/ |_| |_|\___/ \__,_|\__,_|_|\___(_)\____\___/|_| |_| |_| .__/|_|\___/_/\_\ \__,_|\__,_|\__\___| |_| This module is intended for creation of complex date phrases in variety of languages. Once deployed, please do not modify this code without applying the changes first at Module:Complex date/sandbox and testing at Module:Complex date/sandbox/testcases. Authors and maintainers: * User:Sn1per - first draft of the original version * User:Jarekt - corrections and expansion of the original version ]] -- List of external modules and functions local p = {Error = nil} local i18n = require('Module:i18n/complex date') -- used for translations of date related phrases local ISOdate = require('Module:ISOdate')._ISOdate -- used for parsing dates in YYYY-MM-DD and related formats local TagQS = require('Module:TagQS') local Calendar -- loaded lazily -- ================================================== -- === Internal functions =========================== -- ================================================== local function langSwitch(list,lang) local langList = mw.language.getFallbacksFor(lang) table.insert(langList,1,lang) table.insert(langList,math.max(#langList,2),'default') for i,language in ipairs(langList) do if list[language] then return list[language] end end end -- ================================================== local function formatnum1(numStr, lang) -- mostly require('Module:Formatnum').formatNum function used to translate a number to use different numeral characters, -- except that it it does not call that function unless the language is on the list "LList" local LList = {bn=1,bpy=1,kn=1,hi=1,mr=1,new=1,pa=1,gu=1,fa=1,glk=1,mzn=1,ur=1,ar=1,ckb=1,ks=1,lo=1,['or']=1,bo=1,['ml-old']=1,mn=1,te=1,th=1} if LList[lang] then -- call only when the language is on the list numStr = require('Module:Formatnum').formatNum(numStr, lang, 1) end return numStr end -- ================================================== local function getISODate(datestr, datetype, lang, num, case) -- translate dates in the format YYYY, YYYY-MM, and YYYY-MM-DD if not case and i18n.Translations[datetype] then -- look up the grammatical case needed and call ISOdate module local rec = langSwitch(i18n.Translations[datetype], lang) if type(rec)=='table' then case = rec.case[num] end end return ISOdate(datestr, lang, case, '', 1) end -- ======================================================================= local function translatePhrase(date1, date2, operation, lang, state) -- use tables in Module:i18n/complex date to translate a phrase if not i18n.Translations[operation] then p.Error = string.format('<span style="background-color:red;">Error in [[Module:Complex date]]: input parameter "%s" is not recognized.</span>', operation or 'nil') return '' end local dateStr = langSwitch(i18n.Translations[operation], lang) if type(dateStr)=='table' then dateStr = dateStr[1] end if type(dateStr)=='function' then local dateFunc = dateStr local nDates = i18n.Translations[operation]['nDates'] if nDates==2 then -- 2 date phrase dateStr = dateFunc(date1, date2, state) else -- 1 date phrase dateStr = dateFunc(date1, state) end end if type(dateStr)=='string' then -- replace parts of the string '$date1' and '$date2' with date1 and date2 strings dateStr = mw.ustring.gsub(dateStr, '$date1', date1) dateStr = mw.ustring.gsub(dateStr, '$date2', date2) else -- Special case of more complex phrases that can be build out of simple phrases -- If complex case is not translated to "lang" than build it out of simpler ones local x = dateStr dateStr = p._complex_date(x.conj, x.adj1, date1, x.units1, x.era1, x.adj2, date2, x.units2, x.era2, lang, 2) end return dateStr end -- ======================================================================= local function oneDatePhrase(dateStr, adj, era, units, lang, num, case, state) -- translate a single date phrase if num==2 then state.adj, state.era, state.units, state.precision = state.adj2, state.era2, state.units2, state.precision2 end -- dateStr can have many forms: ISO date, year or a number for -- decade, century or millennium if units == '' then -- unit is "year", "month", "day" dateStr = getISODate(dateStr, adj, lang, num, case) else -- units is "decade", "century", "millennium'' dateStr = translatePhrase(dateStr, '', units, lang, state) end -- add adjective ("early", "mid", etc.) or preposition ("before", "after", -- "circa", etc.) to the date if adj ~= '' then dateStr = translatePhrase(dateStr, '', adj, lang, state) else -- only era? dateStr = formatnum1(dateStr, lang) end -- add era if era ~= '' then dateStr = translatePhrase(dateStr, '', era, lang, state) end return dateStr end -- ======================================================================= local function twoDatePhrase(date1, date2, state, lang) -- translate a double date phrase local dateStr, case local era='' if state.era1 == state.era2 then -- if both eras are the same than add it only once era = state.era1 state.era1 = '' state.era2 = '' end case = {nil, nil} if i18n.Translations[state.conj] then local rec = langSwitch(i18n.Translations[state.conj], lang) if type(rec)=='table' then case = rec.case end end date1 = oneDatePhrase(date1, state.adj1, state.era1, state.units1, lang, 1, case[1], state) date2 = oneDatePhrase(date2, state.adj2, state.era2, state.units2, lang, 2, case[2], state) dateStr = translatePhrase(date1, date2, state.conj, lang, state) if era ~= '' then dateStr = translatePhrase(dateStr, '', era, lang, state) end return dateStr end -- ======================================================================= local function otherPhrases(date1, date2, operation, era, lang, state) -- translate specialized phrases local dateStr = '' if operation == 'islamic' then if date2=='' then date2 = mw.getCurrentFrame():callParserFunction('#time', 'xmY', date1) end date1 = getISODate(date1, operation, lang, 1, nil) date2 = getISODate(date2, operation, lang, 2, nil) if era == '' then era = 'ad' end dateStr = translatePhrase(date1, '', era, lang, state) .. ' (' .. translatePhrase(date2, '', 'ah', lang, state) .. ')' era = '' elseif operation == 'julian' then if not date2 and date1 then -- Convert from Julian to Gregorian calendar date if Calendar == nil then Calendar = require("Module:Calendar") -- lazy loding (only if needed) end local JDN = Calendar._date2jdn(date1, 0) if JDN then date2 = date1 -- first date is assumed to be Julian date1 = Calendar._jdn2date(JDN, 1) end end date1 = getISODate(date1, operation, lang, 1, nil) date2 = getISODate(date2, operation, lang, 2, nil) dateStr = translatePhrase(date1, date2, operation, lang, state) dateStr = mw.ustring.gsub(mw.ustring.gsub(dateStr, '%( ', '('), ' %)', ')') -- in case date2 is empty elseif operation == 'turn of the year' or operation == 'turn of the decade' or operation == 'turn of the century' then local dt = 1 if operation == 'turn of the decade' then dt=10 end if not date2 or date2=='' then date2=tostring(tonumber(date1)-dt) end if era~='bp' and era~='bc' then date1, date2 = date2, date1 end if operation == 'turn of the year' then date1 = ISOdate(date1, lang, '', '', 1) date2 = ISOdate(date2, lang, '', '', 1) else date1 = formatnum1(date1, lang) date2 = formatnum1(date2, lang) end dateStr = translatePhrase(date1, date2, operation, lang, state) elseif operation == 'year unknown' then dateStr = translatePhrase('', '', operation, lang, state) elseif operation == 'unknown' then dateStr = tostring(mw.message.new( "exif-unknowndate" ):inLanguage( lang )) end -- add era if era ~= '' then dateStr = translatePhrase(dateStr, '', era, lang, state) end return dateStr end -- ======================================================================= local function checkAliases(str1, str2, sType) -- some inputs have many aliases - reconcile them and ensure string is playing a proper role local out = '' if str1 and str1~='' then local a = i18n.Synonyms[str1] -- look up synonyms of "str1" if a then out = a[1] else p.Error = string.format('<span style="background-color:red;">Error in [[Module:Complex date]]: %s is not recognized.</span>', str1) end elseif str2 and str2~='' then -- if "str1" of type "sType" is empty than maybe ... local a = i18n.Synonyms[str2] -- ..."str2" is of the same type and is not empty if a and a[2]==sType then out = a[1] str2 = '' end end return out, str2 end -- ======================================================================= local function datePrecision(dateStr, units) -- "in this module "Units" is a string like millennium, century, or decade -- "precision" is wikibase compatible date precision number: 6=millennium, 7=century, 8=decade, 9=year, 10=month, 11=day -- based on string or numeric input calculate "Units" and "precision" local precision if type(units)=='number' then precision = units if precision>11 then precision=11 end -- clip the range of precision values if precision==6 then units='millennium' elseif precision==7 then units='century' elseif precision==8 then units='decade' else units = '' end elseif type(units)=='string' then units = string.lower(units) if units=='millennium' then precision=6 elseif units=='century' then precision=7 elseif units=='decade' then precision=8 else precision=9 end end if units=='' or precision==9 then local sLen = mw.ustring.len(dateStr) if sLen<= 4 then precision=9 elseif sLen== 7 then precision=10 elseif sLen>=10 then precision=11 end units='' end if precision==6 and dateStr.match( dateStr, '%d000' )~=nil then dateStr = tostring(math.floor(tonumber(dateStr)/1000) +1) elseif precision==7 and mw.ustring.match( dateStr, '%d%d00' )~=nil then dateStr = tostring(math.floor(tonumber(dateStr)/100) +1) end return dateStr, units, precision end -- ======================================================================= local function isodate2timestamp(dateStr, precision, era) -- convert date string to timestamps used by Quick Statements local tStamp = nil if era == 'ah' or precision<6 then return nil elseif era ~= '' then local eraLUT = {ad='+', bc='-', bp='-' } era = eraLUT[era] else era='+' end -- convert isodate to timestamp used by quick statements if precision>=9 then if string.match(dateStr,"^%d%d%d%d$") then -- if YYYY format tStamp = era .. dateStr .. '-00-00T00:00:00Z/9' elseif string.match(dateStr,"^%d%d%d%d%-%d%d$") then -- if YYYY-MM format tStamp = era .. dateStr .. '-00T00:00:00Z/10' elseif string.match(dateStr,"^%d%d%d%d%-%d%d%-%d%d$") then -- if YYYY-MM-DD format tStamp = era .. dateStr .. 'T00:00:00Z/11' end elseif precision==8 then -- decade tStamp = era .. dateStr .. '-00-00T00:00:00Z/8' elseif precision==7 then -- century local d = tostring(tonumber(dateStr)-1) tStamp = era .. d .. '50-00-00T00:00:00Z/7' elseif precision==6 then local d = tostring(tonumber(dateStr)-1) tStamp = era .. d .. '500-00-00T00:00:00Z/6' end return tStamp end -- ======================================================================= local function oneDateQScode(dateStr, adj, era, precision) -- create QuickStatements string for "one date" dates local outputStr = '' local d = isodate2timestamp(dateStr, precision, era) if not d then return '' end local rLUT = { early='Q40719727' , mid='Q40719748', late='Q40719766', ['1quarter']='Q40690303' , ['2quarter']='Q40719649' , ['3quarter']='Q40719662', ['4quarter']='Q40719674', spring='Q40720559' , summer='Q40720564' , autumn='Q40720568' , winter='Q40720553', firsthalf='Q40719687', secondhalf='Q40719707' } local qLUT = {['from']='P580', ['until']='P582', ['after']='P1319', ['before']='P1326', ['by']='P1326'} local refine = rLUT[adj] local qualitier = qLUT[adj] if adj=='' then outputStr = d elseif adj=='circa' then outputStr = d..",P1480,Q5727902" elseif refine then outputStr = d..",P4241,"..refine elseif precision>7 and qualitier then local century = string.gsub(d, 'Z%/%d+', 'Z/7') outputStr = century ..",".. qualitier ..","..d end return outputStr end -- ======================================================================= local function twoDateQScode(date1, date2, state) -- create QuickStatements string for "two date" dates if state.adj1~='' or state.adj2~='' or state.era1~=state.era2 then return '' -- QuickStatements string are not generated for two date phrases with adjectives end local outputStr = '' local d1 = isodate2timestamp(date1, state.precision1, state.era1) local d2 = isodate2timestamp(date2, state.precision2, state.era2) if (not d1) or (not d2) then return '' end -- find date with lower precision in common to both dates local cd local year1 = tonumber(string.sub(d1,2,5)) local year2 = tonumber(string.sub(d2,2,5)) local k = 0 for i = 1,10,1 do if string.sub(d1,1,i)==string.sub(d2,1,i) then k = i -- find last matching letter end end if k>=9 then -- same month, since "+YYYY-MM-" is in common cd = isodate2timestamp(string.sub(d1,2,8), 10, state.era1) elseif k>=6 and k<9 then -- same year, since "+YYYY-" is in common cd = isodate2timestamp(tostring(year1), 9, state.era1) elseif k==4 then -- same decade(k=4, precision=8), since "+YYY" is in common cd = isodate2timestamp(tostring(year1), 8, state.era1) elseif k==3 then -- same century(k=3, precision=7) since "+YY" is in common local d = tostring(math.floor(year1/100) +1) -- convert 1999 -> 20 cd = isodate2timestamp( d, 7, state.era1) elseif k==2 then -- same millennium (k=2, precision=6), since "+Y" is in common local d = tostring(math.floor(year1/1000) +1) -- convert 1999 -> 2 cd = isodate2timestamp( d, 6, state.era1) end if not cd then return '' end --if not cd then -- return ' <br/>error: ' .. d1.." / " .. d2.." / ".. (cd or '') .." / ".. string.sub(d1,2,5).." / " .. string.sub(d2,2,5).." / " .. tostring(k) --end -- if (state.conj=='from-until') or (state.conj=='and' and year1==year2-1) then outputStr = cd ..",P580,".. d1 ..",P582,".. d2 elseif (state.conj=='between') or (state.conj=='or' and year1==year2-1) then outputStr = cd ..",P1319,".. d1 ..",P1326,".. d2 elseif state.conj=='circa2' then outputStr = cd ..",P1319,".. d1 ..",P1326,".. d2 ..",P1480,Q5727902" end return outputStr end -- ======================================================================= local function processInputParams(conj, adj1, date1, units1, era1, adj2, date2, units2, era2, lang, passNr) -- process inputs and save date in state array local state = {} state.conj = string.lower(conj or '') state.adj1 = string.lower(adj1 or '') state.adj2 = string.lower(adj2 or '') state.era1 = string.lower(era1 or '') state.era2 = string.lower(era2 or '') state.units1 = string.lower(units1 or '') state.units2 = string.lower(units2 or '') -- if date 1 is missing but date 2 is provided than swap them if date1 == '' and date2 ~= '' then date1 = date2 date2 = '' state = {adj1 = state.adj2, era1 = state.era2, units1 = state.units2, adj2 = '', era2 = '', units2 = '', conj=state.conj, num=1} end if date2 ~= '' then state.nDates = 2 elseif date1 ~= '' then state.nDates = 1 else state.nDates = 0 end -- reconcile alternative names for text inputs local conj = checkAliases(state.conj ,'' ,'j') state.adj1 ,conj = checkAliases(state.adj1 ,conj,'a') state.units1,conj = checkAliases(state.units1,conj,'p') state.era1 ,conj = checkAliases(state.era1 ,conj,'e') state.special,conj = checkAliases('',conj,'c') state.adj2 = checkAliases(state.adj2 ,'','a') state.units2 = checkAliases(state.units2,'','p') state.era2 = checkAliases(state.era2 ,'','e') state.conj = conj state.lang = lang if p.Error~=nil then return nil end -- calculate date precision value date1, state.units1, state.precision1 = datePrecision(date1, state.units1) date2, state.units2, state.precision2 = datePrecision(date2, state.units2) -- Handle special cases -- Some complex phrases can be created out of simpler ones. Therefore on pass # 1 we try to create -- the phrase using complex phrase and if that is not found than on the second pass we try to build -- the phrase out of the simpler ones if passNr==1 then if state.adj1=='circa' and state.nDates == 2 then state.conj = 'circa2' state.adj1 = '' state.adj2 = '' end if state.nDates == 2 and state.adj1=='late' and state.adj2=='early' and state.conj=='and' and state.units1==state.units2 and state.era1==state.era2 then if state.units1=='century' then state.conj='turn of the century' elseif state.units1=='decade' then state.conj='turn of the decade' elseif state.units1=='' then state.conj='turn of the year' end state.adj1 = '' state.adj2 = '' state.units1 = '' state.units2 = '' end end state.adj, state.era, state.units, state.precision = state.adj1, state.era1, state.units1, state.precision1 return date1, date2, state end -- ================================================== -- === External functions =========================== -- ================================================== function p.Era(frame) -- process inputs local dateStr local args = frame.args if not (args.lang and mw.language.isSupportedLanguage(args.lang)) then args.lang = frame:callParserFunction( "int", "lang" ) -- get user's chosen language end local lang = args['lang'] local dateStr = args['date'] or '' local eraType = string.lower(args['era'] or '') dateStr = ISOdate(dateStr, lang, '', '', 1) if eraType then eraType = checkAliases(eraType ,'','e') dateStr = translatePhrase(dateStr, '', eraType, lang, {}) end return dateStr end -- ======================================================================= function p._complex_date(conj, adj1, date1, units1, era1, adj2, date2, units2, era2, lang, passNr) local Output='' local state -- process inputs and save date in state array date1, date2, state = processInputParams(conj, adj1, date1, units1, era1, adj2, date2, units2, era2, lang, passNr) if p.Error~=nil then return nil end local errorStr = string.format( '\n*conj=%s, adj1=%s, era1=%s, unit1=%s, prec1=%i, adj2=%s, era2=%s, unit2=%s, prec2=%i, special=%s', state.conj, state.adj1, state.era1, state.units1, state.precision1, state.adj2, state.era2, state.units2, state.precision2, state.special) -- call specialized functions local QScode = '' if state.special~='' then Output = otherPhrases(date1, date2, state.special, state.era1, lang, state) elseif state.conj~='' then QScode = twoDateQScode(date1, date2, state) Output = twoDatePhrase(date1, date2, state, lang) elseif state.adj1~='' or state.era1~='' or state.units1~='' then Output = oneDatePhrase(date1, state.adj1, state.era1, state.units1, lang, 1, nil, state) QScode = oneDateQScode(date1, state.adj1, state.era1, state.precision1) elseif date1~='' then Output = ISOdate(date1, lang, '', 'dtstart', '100-999') end if p.Error~=nil then return errorStr end -- if there is any wikicode in the string than execute it if mw.ustring.find(Output, '{') then Output = mw.getCurrentFrame():preprocess(Output) end if QScode and #QScode>0 then QScode = TagQS.createTag('date', 'P', QScode) end return Output .. QScode end -- ======================================================================= function p._complex_date_cer(conj, adj1, date1, units1, era1, adj2, date2, units2, era2, certainty, lang) -- same as p._complex_date but with extra parameter for certainty: probably, possibly, presumably, etc. local dateStr = p._complex_date(conj, adj1, date1, units1, era1, adj2, date2, units2, era2, lang, 1) --certainty = checkAliases(certainty, conj, 'r') local LUT = {probably='Q56644435', presumably='Q18122778', possibly='Q30230067', circa='Q5727902' } if certainty and LUT[certainty] then local state = {} date1, date2, state = processInputParams(conj, adj1, date1, units1, era1, adj2, date2, units2, era2, lang, 1) dateStr = translatePhrase(dateStr, '', certainty, lang, state) dateStr = TagQS.append2value(dateStr, 'date', 'P1480,' .. LUT[certainty]) end return dateStr end -- ======================================================================= function p.complex_date(frame) -- process inputs local dateStr local args = frame.args if not (args.lang and mw.language.isSupportedLanguage(args.lang)) then args.lang = frame:callParserFunction( "int", "lang" ) -- get user's chosen language end local date1 = args['date1'] or args['2'] or args['date'] or '' local date2 = args['date2'] or args['3'] or '' local conj = args['conj'] or args['1'] or '' local adj1 = args['adj1'] or args['adj'] or '' local adj2 = args['adj2'] or '' local units1 = args['precision1'] or args['precision'] or '' local units2 = args['precision2'] or args['precision'] or '' local era1 = args['era1'] or args['era'] or '' local era2 = args['era2'] or args['era'] or '' local certainty = args['certainty'] local lang = args['lang'] dateStr = p._complex_date_cer(conj, adj1, date1, units1, era1, adj2, date2, units2, era2, certainty, lang) if p.Error~=nil then dateStr = p.Error .. '[[Category:Pages using Complex date template with incorrect parameter]]' end return dateStr end return p tf0nv3i4i1tobqdj0fvzcimmm4xlxe7 Module:I18n/complex date 828 1319 10653 2026-05-12T18:22:08Z commons>Lucas Werkmeister 0 fulfilling edit request by [[User:Namoroka]] – add and update Korean (ko) translations (sync from [[Special:Permalink/1208183742]]) 10653 Scribunto text/plain --[[ __ __ _ _ ___ _ ___ __ _ _ _ | \/ | ___ __| |_ _| | ___ _|_ _/ |( _ ) _ __ / /__ ___ _ __ ___ _ __ | | _____ __ __| | __ _| |_ ___ | |\/| |/ _ \ / _` | | | | |/ _ (_)| || |/ _ \| '_ \ / / __/ _ \| '_ ` _ \| '_ \| |/ _ \ \/ / / _` |/ _` | __/ _ \ | | | | (_) | (_| | |_| | | __/_ | || | (_) | | | |/ / (_| (_) | | | | | | |_) | | __/> < | (_| | (_| | || __/ |_| |_|\___/ \__,_|\__,_|_|\___(_)___|_|\___/|_| |_/_/ \___\___/|_| |_| |_| .__/|_|\___/_/\_\ \__,_|\__,_|\__\___| |_| This code was copied from Commons please request changes there. Maintainers: *Jarekt ]] -- ========================================================================== -- === External modules and functions (use Lazy loading) =================== -- ========================================================================== local function Ordinal(...) -- Name of the Module: -- * Module:Ordinal - on Commons and Wikidata -- * Module:Ordinal-cd - on English Wikipedia return require('Module:Ordinal')._Ordinal(...) end local function Roman(...) -- Name of the Module: -- * Module:Roman - on Commons and Wikidata -- * Module:Roman-cd - on English Wikipedia return require('Module:Roman')._Numeral(...) end local function linguistic_of(...) return require('Module:Linguistic').of(...) end local function linguistic_conj(...) return require('Module:Linguistic').conj(...) end -- ========================================================================== -- === Local Helper functions ============================================== -- ========================================================================== -- form of French "of" based on "precision", which is wikibase compatible date precision format: -- 6=millennium, 7=century, 8=decade, 9=year, 10=month, 11=day -- 1 2 3 4 5 mill cent deca year month day local frOf = {'du','du','du','du','du', 'du', 'du', 'de', 'de', 'de', 'du'} local function decYear(state,lang,case) --Declension of word "year" in several languages if state.precision == 9 then local yearCase = { fi={xxx='vuosien', gen='vuoden', ill='vuoteen', ptv='vuotta', ela='vuodesta', ine='vuonna'}, sl={insD='letoma', insP='leti', ins='letom', gen='leta', loc='letu'}, hsb={insP='lětami', ins='lětom', gen='lěta', loc='lěće'} } return yearCase[lang][case] .. ' ' else return '' end end local function decCentury(lang,case) --Declension of word "century" in several languages local centuryCase = { pl={nom='wiek', gen='wieku', ins='wiekiem', loc='wieku', default = 'wiek'}, hsb={nom='lětstotk', gen='lětstotka', ins='lětstotkom', loc='lětstotku', default = 'lětstotk'}, sl={nom='stoletje', gen='stoletja', dat='stoletju', acc='stoletje', ins='stoletju', loc='stoletju', default = 'stoletje'} } return centuryCase[lang][case] or centuryCase[lang]['default'] end local function decMillennium(lang,case) --Declension of word "century" in several languages local millenniumCase = { pl={nom='tysiąclecie', gen='tysiąclecia', ins='tysiącleciem', loc='tysiącleciu', default = 'tysiąclecie'}, hsb={nom='lěttysac', gen='lěttysaca', ins='lěttysacom', loc='lěttysacu', default = 'lěttysac'}, sl={nom='tisočletje', gen='tisočletja', dat='tisočletju', acc='tisočletje', ins='tisočletju', loc='tisočletjem', default = 'tisočletje'} } return millenniumCase[lang][case] or millenniumCase[lang]['default'] end local plDeclension = { -- Polish Declensions of some terms -- kto? co? (jest) kogo? czego?(brak) komu? czemu? kogo? co? (widzę) kim? czym? o kim? o czym? (mówię) century = {nom='wiek', gen='wieku', dat='wiekowi', acc='wiek', ins='wiekiem', loc='wieku'}, millenium = {nom='tysiąclecie', gen='tysiąclecia', dat='tysiącleciu', acc='tysiąclecie', ins='tysiącleciem', loc='tysiącleciu'}, winter = {nom='zima', gen='zimy', dat='zimie', acc='zimę', ins='zimą', loc='zimie'}, spring = {nom='wiosna', gen='wiosny', dat='wiośnie', acc='wiosnę', ins='wiosną', loc='wiośnie'}, summer = {nom='lato', gen='lata', dat='latu', acc='lato', ins='latem', loc='lecie'}, autumn = {nom='jesień', gen='jesieni', dat='jesieni', acc='jesień', ins='jesienią', loc='jesieni'}, years = {nom='lata', gen='lat', dat='latom', acc='lata', ins='latami', loc='latach'} } local slDeclension = { -- Slovene declensions of some terms -- kdo ali kaj? koga ali česa? komu ali čemu? koga ali kaj? (s) kom ali čim? (o) kom ali čem? century = {nom='stoletje', gen='stoletja', dat='stoletjem', acc='stoletje', ins='stoletjem', loc='stoletju'}, millenium = {nom='tisočletje', gen='tisočletja', dat='tisočletju', acc='tisočletje', ins='tisočletjem', loc='tisčletju'}, winter = {nom='zima', gen='zime', dat='zimi', acc='zimi', ins='zimo', loc='zimi'}, spring = {nom='pomlad', gen='pomladi', dat='pomladi', acc='pomlad', ins='pomladjo', loc='pomladi'}, summer = {nom='leto', gen='poletja', dat='poletju', acc='poletje', ins='poletjem', loc='poletju'}, autumn = {nom='jesen', gen='jeseni', dat='jeseni', acc='jesen', ins='jesenjo', loc='jeseni'}, years = {nom='leta', gen='let', dat='letom', acc='leta', ins='leti', loc='letih'} } -- ========================================================================== -- === Output data structure =============================================== -- ========================================================================== local p = {} --[[ Multiple formats are possible: 1) string with key words "$date1" and "$date2" which will be replaced later by the date strings 2) function which can be used to create output string * Function INPUTS: - date1 and date2 string with date strings. "$date1" and "$date2" can also be used which will be replaced latter - state is a table with full description of the phrase we are trying to construct. It includes state.precision1 (and 2) which is wikibase compatible date precision format: 6=millennium, 7=century, 8=decade, 9=year, 10=month, 11=day 3) table with following fields: * table[1] is either string or a function * table.case is a 2 element table with Grammatical cases used by given language to alter month name or other adjective related to date # 1 and 2 ]] p.Translations = { -- ========================================== -- === Two date phrases ===================== -- ========================================== ['from-until'] = { nDates = 2, ar='من $date1 إلى $date2', ['be-tarask']={'з $date1 да $date2', case={'gen','gen'}}, bn='$date1 থেকে $date2 পর্যন্ত', ca='$date1 fins $date2', ckb='لە $date1 تاوەکوو $date2', cs='$date1 až $date2', da='fra $date1 til $date2', de='$date1 bis $date2', el='από $date1 έως $date2', en='from $date1 until $date2', ['en-gb']='from $date1 until $date2', ['en-ca']='from $date1 until $date2', eo='de $date1 al $date2', es='de $date1 a $date2', et='$date1 kuni $date2', fa='از $date1 تا $date2', fi='$date1–$date2', -- välisenä aikana fr=function(date1, date2, state) -- could actually be better should be "d'octobre à mars 2013' not "de octore 2013 à mars 2013" if state.precision > 10 then -- precision > month return 'du $date1 au $date2' else -- "DE septebmbre" / "D'octobre" return linguistic_of(date1, 'fr') .. " à $date2" end end, ga='ó $date1 go $date2', gl='de $date1 a $date2', --Template:From until used 'desde $date1 ata $date2' he='מ- $date1 עד $date2', hr={'od $date1 do $date2', case={'gen','gen'}}, hsb={'wot $date1 do $date2', case={'gen','gen'}}, hu='$date1 – $date2', it='dal $date1 al $date2', ja='$date1から$date2まで', ko='$date1부터 $date2까지', mk='од $date1 до $date2', ml='$date1 മുതൽ $date2 വരെ', nb='fra $date1 til $date2', nds='$date1 bet $date2', nn='frå $date1 til $date2', nl='$date1 tot $date2', no='fra $date1 til $date2', pl={'od $date1 do $date2', case={'gen','gen'}}, ro='din $date1 până în $date2', pt='de $date1 a $date2', qu="$date1 p'unchawmanta $date2 p\'unchawkama", ru={'с $date1 по $date2', case={'gen','gen'}}, sk={'od $date1 do $date2', case={'gen','gen'}}, sl={'od $date1 do $date2', case={'gen','gen'}}, sr='од $date1 до $date2', sv='från $date1 till $date2', uk={'з $date1 до $date2', case={'gen','gen'}}, ur='از $date1 تا $date2', vi='từ $date1 đến $date2', ['zh-hans']='从$date1到$date2', ['zh-hant']='從$date1到$date2', default='<span style="color:red">$date1 - $date2</span>', }, ['between']={ nDates = 2, ar='بين $date1 و $date2', ['be-tarask']={'між $date1 і $date2', case={'ins','ins'}}, bn='$date1 এবং $date2-এর মাঝামাঝি', ca='entre $date1 i $date2', ckb='لەنێوان $date1 و $date2', cs={'mezi $date1 a $date2', case={'ins','ins'}}, da='mellem $date1 og $date2', de='zwischen $date1 und $date2', el='μεταξύ $date1 και $date2', en='between $date1 and $date2', ['en-gb']='between $date1 and $date2', ['en-ca']='between $date1 and $date2', eo='inter $date1 kaj $date2', es='entre $date1 y $date2', et='$date1 ja $date2 vahel', fa='بین $date1 و $date2', fi={function(date1, date2, state) return decYear(state,'fi','xxx') .. '$date1 ja $date2 välisenä aikana' end, case={'gen','gen'}}, fr = function(date1, date2, state) -- prepend ‘le’ if precision > month local prep1 = state.precision1 > 10 and 'le ' or '' local prep2 = state.precision2 > 10 and 'le ' or '' return 'entre ' .. prep1 .. '$date1 et ' .. prep2 .. '$date2' end, ga='idir $date1 agus $date2', gl='entre $date1 e $date2', he='בין $date1 ו- $date2', hr={'između $date1 i $date2', case={'gen','gen'}}, hsb={'mjez $date1 a $date2', case={'ins','ins'}}, hu='$date1 és $date2 között', hi='$date1 और $date2 के बीच', it='tra il $date1 e il $date2', ja='$date1と$date2の間', ko='$date1에서 $date2 사이', mk='помеѓу $date1 и $date2', ml='$date1, $date2 എന്നിവയ്ക്കിടയ്ക്ക്', nb='mellom $date1 og $date2', nds='twischen $date1 un $date2', nn='mellom $date1 og $date2', nl='tussen $date1 en $date2', no='mellom $date1 og $date2', pl={'między $date1 a $date2', case={'ins','ins'}}, ro='între $date1 și $date2', pt='entre $date1 e $date2', qu="$date1 p'unchawpa $date2 p'unchawpapas chawpin", ru={'между $date1 и $date2', case={'ins','ins'}}, sk={'medzi $date1 a $date2', case={'ins','ins'}}, sl={function(date1, date2, state) return 'med ' .. decYear(state,'sl','insP') .. '$date1 in $date2' end, case={'ins','ins'}}, sr='између $date1 и $date2', sv='mellan $date1 och $date2', uk={'між $date1 та $date2', case={'ins','ins'}}, ur='بین $date1 و $date2', vec='tra el $date1 e el $date2', vi='giữa $date1 và $date2', ['zh-hans']='在$date1到$date2之间', ['zh-hant']='在$date1到$date2之間', default='<span style="color:red">$date1 - $date2</span>', }, ['or'] = { nDates = 2, ar='$date1 أو $date2', ['be-tarask']='$date1 ці $date2', bn='$date1 অথবা $date2', ca='$date1 o $date2', ckb='$date1 یان $date2', cs='$date1 nebo $date2', da='$date1 eller $date2', de='$date1 oder $date2', el='$date1 ή $date2', en='$date1 or $date2', ['en-gb']='$date1 or $date2', ['en-ca']='$date1 or $date2', eo='$date1 aŭ $date2', es='$date1 o $date2', et='$date1 või $date2', fa='$date1 یا $date2', fi='$date1 tai $date2', fr='$date1 ou $date2', ga='$date1 nó $date2', gl='$date1 ou $date2', he='$date1 או $date2', hr='$date1 ili $date2', hsb='$date1 abo $date2', hu='$date1 vagy $date2', it='$date1 o $date2', ja='$date1または$date2', ko='$date1 또는 $date2까지', mk='$date1 или $date2', ml='$date1 അഥവാ $date2', nb='$date1 eller $date2', nn='$date1 eller $date2', nds='$date1 oder $date2', nl='$date1 of $date2', no='$date1 eller $date2', pl='$date1 lub $date2', pt='$date1 ou $date2', qu='$date1 icha $date2', ro='$date1 sau $date2', ru='$date1 или $date2', sk='$date1 alebo $date2', sl='$date1 ali $date2', sr='$date1 или $date2', sv='$date1 eller $date2', uk='$date1 або $date2', ur='$date1 یا $date2', th='$date1 หรือ $date2', vi='$date1 hoặc $date2', ['zh-hans']='$date1或$date2', ['zh-hant']='$date1或$date2', default=function(date1, date2, state) return linguistic_conj({date1, date2}, state.lang, 'or') end, }, ['and'] = { nDates = 2, ar='$date1 و $date2', ['be-tarask']='$date1 і $date2', bn='$date1 এবং $date2', ca='$date1 i $date2', ckb='$date1 و $date2', cs='$date1 a $date2', da='$date1 og $date2', de='$date1 und $date2', el='$date1 και $date2', en='$date1 and $date2', ['en-gb']='$date1 and $date2', ['en-ca']='$date1 and $date2', eo='$date1 kaj $date2', es='$date1 y $date2', et='$date1 ja $date2', fa='$date1 و $date2', fi='$date1 ja $date2', fr='$date1 et $date2', ga='$date1 agus $date2', gl='$date1 e $date2', he='$date1 ו- $date2', hu='$date1 és $date2', hsb='$date1 a $date2', it='$date1 e $date2', ja='$date1および$date2', ko='$date1 및 $date2', mk='$date1 и $date2', ml='$date1 ഒപ്പം $date2', nb='$date1 og $date2', nn='$date1 og $date2', nds='$date1 un $date2', nl='$date1 en $date2', no='$date1 og $date2', pl='$date1 i $date2', pt='$date1 e $date2', qu='$date1wan $date2pas', ro='$date1 și $date2', ru='$date1 и $date2', sk='$date1 a $date2', sl='$date1 in $date2', sr='$date1 и $date2', sv='$date1 och $date2', uk='$date1 та $date2', ur='$date1 و $date2', vi='$date1 và $date2', ['zh-hans']='$date1和$date2', ['zh-hant']='$date1和$date2', default=function(date1, date2, state) return linguistic_conj({date1, date2}, state.lang, 'and') end, }, -- ========================================== -- === Prepositions ========================= -- ========================================== ['by'] = { nDates = 1, ar='بحلول $date1', ['be-tarask']={'да $date1', case={'gen',''}}, bn='$date1 কর্তৃক', ca='vers $date1', ckb='نزیکی $date1', cs={'kolem $date1', case={'gen',''}}, da='mod $date1', de='spätestens $date1', el='έως $date1', en='by $date1', ['en-gb']='by $date1', ['en-ca']='by $date1', eo='ne post $date1', es='para $date1', et='hiljemalt $date1', fa='توسط $date1', fi={function(date1, state) return decYear(state,'fi','ill') .. '$date1 mennessä' end, case={'ill',''}}, fr='$date1 (au plus tard)', ga='faoi $date1', gl='cara a $date1', he='עד $date1', hr={'do $date1', case={'gen',''}}, hsb={'do $date1', case={'gen',''}}, it='entro il $date1', ja='$date1まで', ko='$date1까지', mk='кон $date1', ml='$date1-ൽ', nb='innen $date1', nn='innan $date1', nds='$date1 oder vördem al', nl='tegen $date1', no='innen $date1', pl={'przed $date1', case={'ins',''}}, pt='por $date1', qu="$date1 p'unchawkama", ro='de $date1', ru={'к $date1', case={'dat',''}}, sk={'okolo $date1', case={'gen',''}}, sl={function(date1, state) return 'najpozneje ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}}, sr='до $date1', sv='senast $date1', uk={'до $date1', case={'dat',''}}, ur='توسط $date1', vi='vào $date1', -- need to insert "đã" somewhere later in the sentence --> ['zh-hans']='$date1前后', ['zh-hant']='$date1前後', default='<span style="color:red">by $date1</span>', }, ['before'] = { nDates = 1, ar='قبل $date1', ['be-tarask']={'перад $date1', case={'ins',''}}, bn='$date1-এর আগে', bg='Преди $date1', ca='abans $date1', ckb='پێش $date1', cs={'před $date1', case={'ins',''}}, da='før $date1', de='vor $date1', el='πριν από $date1', en='before $date1', ['en-gb']='before $date1', ['en-ca']='before $date1', eo='antaŭ $date1', es='antes de $date1', et='enne $date1', fa='پیش از $date1', fi={function(date1, state) return 'ennen ' .. decYear(state,'fi','ptv') .. '$date1' end, case={'ptv',''}}, fr='avant $date1', ga='roimh $date1', gl='antes do $date1', he='לפני $date1', hr={'prije $date1', case={'gen',''}}, hsb={'do $date1', case={'gen',''}}, hu='$date1 előtt', it='prima del $date1', ja='$date1より前', ko='$date1 전', mk='пред $date1', ml='$date1-നു മുമ്പ്', nb='før $date1', nn='før $date1', nds='vör $date1', nl='voor $date1', no='før $date1', pl={'przed $date1', case={'ins',''}}, pt='antes de $date1', qu="$date1 p'unchaw ñawpan", ro='înainte de $date1', ru={'ранее $date1', case={'gen',''}}, sk={'pred $date1', case={'ins',''}}, sl={function(date1, state) return 'pred ' .. decYear(state,'sl','ins') .. ' $date1' end, case={'ins',''}}, sr='пре $date1', sv='före $date1', uk={'до $date1', case={'gen',''}}, ur='قبل $date1', vi='trước $date1', ['zh-hans']='在$date1之前', ['zh-hant']='在$date1之前', default='<span style="color:red">before $date1</span>', }, ['from'] = { nDates = 1, ar='من $date1', ['be-tarask']={'з $date1', case={'gen',''}}, bn='$date1 থেকে', ckb='لە $date1', cs={'od $date1', case={'gen',''}}, de='seit $date1', el='από $date1', en='from $date1', ['en-gb']='from $date1', ['en-ca']='from $date1', eo='ekde $date1', es='desde $date1', et='alates $date1', fa='از $date1', fi={function(date1, state) return decYear(state,'fi','ela') .. '$date1 alkaen' end, case={'ela',''}}, fr= function(date1, state) return 'à partir '.. frOf[state.precision] ..' $date1' end, ga='as $date1', gl='desde o $date1', he='מ- $date1', hr={'od $date1', case={'gen',''}}, hsb={'wot $date1', case={'gen',''}}, it='dal $date1', ja='$date1から', ko='$date1부터', nds='vonaf $date1', mk='од $date1', nb='fra $date1', nn='frå $date1', ml='$date1 മുതൽ', nl='vanaf $date1', no='fra $date1', pl={'od $date1', case={'gen',''}}, pt='desde $date1', qu="$date1 p'unchawmanta", ro='din $date1', ru={'С $date1', case={'gen',''}}, sk={'od $date1', case={'gen',''}}, sl={function(date1, state) return 'od ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}}, sr='од $date1', sv='från $date1', uk={'з $date1', case={'gen',''}}, ur='از $date1', vi='từ $date1', ['zh-hans']='自$date1', ['zh-hant']='自$date1', default='<span style="color:red">from $date1</span>', }, ['until'] = { nDates = 1, ar = 'حتى $date1', ['be-tarask']={'усутыч да $date1', case={'gen',''}}, bn='$date1 পর্যন্ত', ckb='تاوەکوو $date1', cs={'do $date1', case={'gen', ''}}, de='bis $date1', en='until $date1', ['en-gb']='until $date1', ['en-ca']='until $date1', eo='ĝis $date1', es='hasta $date1', fr=function(date1, state) if state.precision > 10 then -- precision > month return "jusqu'au $date1" else return "jusqu'à $date1" end end, ga='go dtí $date1', hr={'do $date1', case={'gen',''}}, hsb={'do $date1', case={'gen',''}}, it='al $date1', ko='$date1까지', nb='til $date1', nl='tot $date1', nn='til $date1', ml='$date1 വരെ', pl={'do $date1', case={'gen',''}}, pt='até $date1', ru={'не позже $date1', case={'gen',''}}, sk={'do $date1', case={'gen', ''}}, sl={'do $date1', case={'gen', ''}}, sr='до $date1', uk={'аж до $date1', case={'gen',''}}, ur='تک $date1', ['zh-hans']='直到$date1', ['zh-hant']='直到$date1', default='<span style="color:red">until $date1</span>', }, ['after'] = { nDates = 1, ar='بعد $date1', ['be-tarask']={'пасьля $date1', case={'gen',''}}, bn='$date1-এর পরে', ca='després de $date1', ckb='دوای $date1', cs={'po $date1', case={'loc',''}}, de='nach $date1', da='efter $date1', el='μετά από $date1', en='after $date1', ['en-gb']='after $date1', ['en-ca']='after $date1', eo='post $date1', es='después de $date1', et='pärast $date1', fa='پس از $date1', fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 jälkeen' end, case={'gen',''}}, fr='après $date1', ga='tar éis $date1', gl='despois do $date1', he='לאחר $date1', hr={'nakon $date1', case={'gen',''}}, hu='$date1 után', hsb={'po $date1', case={'loc',''}}, it='dopo il $date1', ja='$date1より後', ko='$date1 후', mk='по $date1', ml='$date1-നു ശേഷം', nb='etter $date1', nn='etter $date1', nds='na $date1', nl='na $date1', no='etter $date1', pl={'po $date1', case={'loc',''}}, pt='após $date1', qu="$date1 p'unchaw qhipan", ro='după $date1', ru={'после $date1', case={'gen',''}}, sk={'po $date1', case={'loc',''}}, sl={function(date1, state) return 'po ' .. decYear(state,'sl','loc') .. ' $date1' end, case={'loc',''}}, sr='после $date1', sv='efter $date1', uk={'після $date1', case={'gen',''}}, ur='بعد $date1', vi='sau $date1', ['zh-hans']='在$date1之后', ['zh-hant']='在$date1之後', default='<span style="color:red">after $date1</span>', }, -- ========================================== -- === Adjectives =========================== -- ========================================== ['early'] = { nDates = 1, ar='بداية $date1', ['be-tarask']={'пачатак $date1', case={'gen',''}}, bn='$date1-এর শুরুতে', ca='al principi de $date1', ckb='سەرەتای $date1', cs={'začátek $date1', case={'gen',''}}, da='tidlig $date1', de='Anfang $date1', el='αρχές του $date1', en='early $date1', ['en-gb']='early $date1', ['en-ca']='early $date1', eo='komence de $date1', es='a principios de $date1', et='$date1 algus', fa='اوایل $date1', fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 alku' end, case={'gen',''}}, fr='début $date1', ga='go luath i $date1', gl='a principios de $date1', he='תחילת $date1', hr={'početak $date1', case={'gen',''}}, hsb={'spočatk $date1', case={'gen',''}}, hu='$date1 elején', it='inizio del $date1', ja='$date1初頭', ko='$date1 초반', mk='почеток на $date1', ml='$date1 ആദ്യപാദം', nb='tidlig $date1', nn='tidleg $date1', nds='Anfang $date1', nl='begin $date1', no='tidlig $date1', pl={'początek $date1', case={'gen',''}}, pt='a princípios de $date1', qu="$date1 ñawpaq p'unchawkunapi", ro='începând cu $date1', ru={'начало $date1', case={'gen',''}}, sk={'začiatok $date1', case={'gen',''}}, sl=function(date1, state) if state.precision == 9 then -- precision > month return 'zgodnjega leta $date1' else -- "od septembra" return {'zgodnjega $date1', case={'gen',''}} end end, sr='почетак $date1', sv='början av $date1', uk={'початок $date1', case={'gen',''}}, ur='ابتدا $date1', vi='đầu năm $date1', ['zh-hans']='$date1早期', ['zh-hant']='$date1早期', default='<span style="color:red">early $date1</span>', }, ['mid'] = { nDates = 1, ar='منتصف $date1', ['be-tarask']={'сярэдзіна $date1', case={'gen',''}}, bn='$date1-এর মাঝামাঝি', ca='a mitjan $date1', ckb='ناوەڕاستی $date1', cs={'polovina $date1', case={'gen',''}}, da='midten af $date1', de='Mitte $date1', el='μέσα του $date1', en='mid $date1', ['en-gb']='mid $date1', ['en-ca']='mid $date1', eo='meze de $date1', es='a mediados de $date1', et='$date1 keskel', fa='اواسط $date1', fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 puoliväli' end, case={'gen',''}}, fr='mi $date1', ga='lár $date1', gl='a mediados de $date1', he='אמצע $date1', hr={'sredina $date1', case={'gen',''}}, hsb={'srjedź $date1', case={'gen',''}}, hu='$date1 közepén', it='metà del $date1', ja='$date1半ば', ko='$date1 중반', mk='средина на $date1', ml='$date1 മദ്ധ്യം', nb='midten av $date1', nn='midten av $date1', nds='Midd $date1', nl='midden $date1', no='midten av $date1', pl={'środek $date1', case={'gen',''}}, pt='meados de $date1', qu="$date1 chawpin p'unchawkunapi", ro='mijlocul lui $date1', ru={'середина $date1', case={'gen',''}}, sk={'polovica $date1', case={'gen',''}}, sl={function(date1, state) return 'sredina ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}}, sr='средина $date1', sv='mitten av $date1', uk={'середина $date1', case={'gen',''}}, ur='وسط $date1', vi='giữa năm $date1', ['zh-hans']='$date1中期', ['zh-hant']='$date1中期', default='<span style="color:red">mid $date1</span>', }, ['late'] = { nDates = 1, ar='نهاية $date1', bn='$date1-এর শেষে', ['be-tarask']={'канец $date1', case={'gen',''}}, ca='al final de $date1', ckb='کۆتاییی $date1', cs='konec $date1', da='sen $date1', de='Ende $date1', el='τέλη του $date1', en='late $date1', ['en-gb']='late $date1', ['en-ca']='late $date1', eo='fine de $date1', es='a fines de $date1', et='$date1 lõpp', fa='اواخر $date1', fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 loppu' end, case={'gen',''}}, fr='fin $date1', ga='go déanach i $date1', gl='a finais de $date1', he='סוף $date1', hr={'kraj $date1', case={'gen',''}}, hsb={'kónc $date1', case={'gen',''}}, hu='$date1 végén', it='fine del $date1', ja='$date1末', ko='$date1 후반', mk='крајот на $date1', ml='$date1 അന്ത്യപാദം', nb='sent $date1', no='seint $date1', nds='Enn $date1', nl='eind $date1', no='sent $date1', pl={'koniec $date1', case={'gen',''}}, pt='ao final de $date1', qu="$date1 qhipaq p'unchawkunapi", ro='sfârșitul lui $date1', ru={'конец $date1', case={'gen',''}}, sk={'koniec $date1', case={'gen',''}}, sl={function(date1, state) return 'pozno ' .. decYear(state,'sl','') .. ' $date1' end, case={'nom',''}}, sr='крај $date1', sv='slutet av $date1', uk={'кінець $date1', case={'gen',''}}, ur='اخیر $date1', vi='cuối năm $date1', ['zh-hans']='$date1晚期', ['zh-hant']='$date1晚期', default='<span style="color:red">late $date1</span>', }, ['circa'] = { nDates = 1, ar='قرابة $date1', ['be-tarask']={'каля $date1', case={'gen',''}}, bn='প্রায় $date1', ca='cap a $date1', ckb='بەنزیکی $date1', cs='cca $date1', da='ca. $date1', de='etwa $date1', el='περ. $date1', en='circa $date1', ['en-gb']='circa $date1', ['en-ca']='circa $date1', eo='ĉirkaŭ $date1', es='hacia $date1', -- suggestion use "hacia"/"hacia el" or leave the latin circa or ca. et='ca. $date1', fa='حوالی $date1', -- template:Circa used 'حدود $date1' fi={function(date1, state) return 'suunnilleen ' .. decYear(state,'fi','ine') .. '$date1' end, case={'ine',''}}, -- template:Circa used 'noin $date1' fr=function(date1, state) if state.precision >= 11 then -- precision >= day return 'vers le $date1' else return 'vers $date1' end end, ga='thart ar $date1', gl='entre $date1', -- template:Circa used 'cara a $date1' he='בסביבות $date1', hr={'približno $date1', case={'gen',''}}, hsb={'wokoło $date1', case={'gen',''}}, hu='$date1 körül', it='$date1 circa', ja='$date1頃', ko='$date1경', mk='~ $date1', -- template:Circa used 'o. $date1' ml= 'ഉദ്ദേശം $date1', nb='ca. $date1', nn='ca. $date1', nds='üm un bi $date1', nl='ca. $date1', no='ca. $date1', pl={'około $date1', case={'gen',''}}, pt='cerca de $date1', qu='$date1chá', ro='circa $date1', ru={'около $date1', case={'gen',''}}, sk='cca $date1', sl={function(date1, state) return 'ok. ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}}, sr='око $date1', sv='cirka $date1', uk={'близько $date1', case={'gen', ''}}, ur='قریباً $date1', vi='vào khoảng $date1', ['zh-hans']='约$date1', ['zh-hant']='約$date1', default='<span style="color:red">circa $date1</span>', }, ['uncertain'] = { nDates = 1, ['zh-hans']='$date1(?)', ['zh-hant']='$date1(?)', default='$date1 (?)', }, probably = { -- see Q56644435 nDates = 1, ar = 'يُحتمل في $date', ast = 'probablemente $date1', bn = 'সম্ভবত $date1', ca = 'probablement $date1', ckb = 'لەوانەیە $date1', cs = 'pravděpodobně $date1', de = 'wahrscheinlich $date1', el = 'πιθανόν $date1', en = 'probably $date1', ['en-gb']='probably $date1', ['en-ca']='probably $date1', eo = 'probable $date1', es = 'probable $date1', fa = 'احتمالاً $date1', fr = 'probablement $date1', he = 'כפי הנראה $date1', hr = 'vjerojatno $date1', hu = 'feltehetőleg $date1', it = 'probabile $date1', ko = '$date1 유력', mk = 'веројатно $date1', ml = 'ഒരുപക്ഷേ $date1', nl = 'waarschijnlijk $date1', pl = 'prawdopodobnie $date1', pt = 'provavelmente $date1', ru = 'вероятно $date1', sl = 'verjetno $date1', sr = 'вероватно $date1', sv = 'antagligen $date1', uk = 'ймовірно $date1', default='<span style="color:red">probably $date1</span>', }, possibly = { -- see Q30230067 nDates = 1, ar = 'يُمكن في $date1', ast = 'posiblemente $date1', bn = 'যথাসম্ভব $date1', ckb = 'لەوانەیە $date1', cs = 'možná $date1', de = 'möglicherweise $date1', en = 'possibly $date1', ['en-gb']='possibly $date1', ['en-ca']='possibly $date1', eo = 'eble $date1', el = 'πιθανόν $date1', fa = 'احتمالاً $date1', fr = 'peut-être $date1', hr = 'moguće $date1', hu = 'talán $date1', ko = '$date1 추측', mk = 'можеби $date1', ml = 'മിക്കവാറും $date1', nl = 'mogelijk $date1', pl = 'być może $date1', pt = 'possivelmente $date1', ro = 'poate $date1', ru = 'возможно $date1', sl = 'morda $date1', sr = 'можда $date1', sv = 'möjligen $date1', uk = 'можливо $date1', default='<span style="color:red">possibly $date1</span>', }, presumably = { -- see Q18122778 nDates = 1, ast = 'presumiblemente $date1', ar = 'يُحتمَل في $date1', ckb = 'دەشێت $date1', de = 'vermutlich $date1', en = 'presumably $date1', ['en-gb']='presumably $date1', ['en-ca']='presumably $date1', fa = 'به احتمال زیاد $date1', fr = 'présumé $date1', hr = 'pretpostavljeno $date1', it = 'presumibilmente $date1', ko = '$date1 추정', ml = 'ഊഹപ്രകാരം $date1', pl = 'przypuszczalnie $date1', pt = 'presumivelmente $date1', sl = 'domnevno $date1', sr = 'претпоставља се $date1', ru = 'предположительно $date1', uk = 'здогадно $date1', default='<span style="color:red">presumably $date1</span>', }, ['year unknown']= { nDates = 0, ar = 'سنة غير معلومة', ['be-tarask']='Год невядомы', bn='অজানা বছর', ca='Any desconegut', ckb='ساڵی نەزاندراو', cs='neznámý rok', de='Jahr unbekannt', el='άγνωστο έτος', en='year unknown', ['en-gb']='year unknown', ['en-ca']='year unknown', eo='jaro nesciata', es='Año desconocido', fa='سال نامعلوم', fi='tuntematon vuosi', fr='Année inconnue', ga='bliain anaithnid', he='שנה לא ידועה', hsb='lěto njeznate', hr='nepoznata godina', it='anno sconosciuto', ja='年代不明', ko='연도 미상', la='Sine anno', ml='വർഷം ലഭ്യമല്ല', mk='непозната година', nb='ukjent år', nn='ukjent år', nl='zonder jaar', no='ukjent år', pl='rok nieznany', pt='ano desconhecido', qu='Mana riqsisqa wata', ru='Год неизвестен', sk='neznámy rok', sl='neznano leto', sr='непозната година', sv='okänt år', uk='рік невідомий', ur='سال نامعلوم', vi='không rõ năm', ['zh-hans']='年份未知', ['zh-hant']='年份未知', default='<span style="color:red">year unknown</span>', }, -- ========================================== -- === Parts of a whole ===================== -- ========================================== ['firsthalf'] = { nDates = 1, ar='النصف الأول من $date1', ['be-tarask']={'першая палова $date1', case={'gen',''}}, bn='$date1-এর প্রথমার্ধ', ca='1a meitat de $date1', ckb='نیوەی یەکەمی $date1', cs={'1. polovina $date1', case={'gen',''}}, da='1. halvdel af $date1', de='erste Hälfte $date1', el='πρώτο μισό του $date1', en='first half of $date1', ['en-gb']='first half of $date1', ['en-ca']='first half of $date1', eo='unua duono de $date1', es='primera mitad de $date1', et='$date1 esimene pool', fa='نیمهٔ نخست $date1', fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 alkupuolisko' end, case={'gen',''}}, fr='1<sup>re</sup> moitié de $date1', ga='chéad leath de $date1', gl='primeira metade de $date1', he='במחצית הראשונה של $date1', hsb={'prěnja połojca $date1', case={'gen',''}}, hu='$date1 első felében', hr={'prva polovina $date1', case={'gen',''}}, it='prima metà del $date1', ja='$date1上半期', ko='$date1 상반기', mk='прва половина на $date1', ml='$date1 ആദ്യപകുതി', nb='første halvdel av $date1', nn='fyrste halvdelen av $date1', nds='1. Helft $date1', nl='eerste helft $date1', no='første halvdel av $date1', pl={'pierwsza połowa $date1', case={'gen',''}}, pt='primeira metade de $date1', qu='$date1 ñawpaq kuskanpi', ro='prima jumătate a lui $date1', ru={'первая половина $date1', case={'gen',''}}, sk={'1. polovica $date1', case={'gen',''}}, sl={function(date1, state) return 'prva polovica ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}}, sr='права половина $date1', sv='första hälften av $date1', uk={'перша половина $date1', case={'gen',''}}, ur='نصف اول $date1', vi='nửa đầu năm $date1', ['zh-hans']='$date1上半期', ['zh-hant']='$date1上半期', default='<span style="color:red">first half of $date1</span>', }, ['secondhalf'] = { nDates = 1, ar='النصف الثاني من $date1', ['be-tarask']={'другая палова $date1', case={'gen',''}}, bn='$date1-এর দ্বিতীয়ার্ধ', ca='2a meitat de $date1', ckb='نیوەی دووەمی $date1', cs={'2. polovina $date1', case={'gen',''}}, da='2. halvdel af $date1', de='zweite Hälfte $date1', el='δεύτερο μισό του $date1', en='second half of $date1', ['en-gb']='second half of $date1', ['en-ca']='second half of $date1', eo='dua duono de $date1', es='segunda mitad de $date1', et='$date1 teine pool', fa='نیمهٔ دوم $date1', fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 loppupuolisko' end, case={'gen',''}}, fr='2<sup>e</sup> moitié de $date1', ga='dara leath de $date1', gl='segunda metade de $date1', he='במחצית השנייה של $date1', hsb={'druha połojca $date1', case={'gen',''}}, hr={'druga polovina $date1', case={'gen',''}}, hu='$date1 második felében', it='seconda metà del $date1', ja='$date1下半期', ko='$date1 하반기', mk='втора половина на $date1', ml='$date1 രണ്ടാം പകുതി', nb='andre halvdel av $date1', nn='andre halvdelen av $date1', nds='2. Helft vun $date1', nl='tweede helft $date1', no='andre halvdel av $date1', pl={'druga połowa $date1', case={'gen',''}}, pt='segunda metade de $date1', qu='$date1 qhipaq kuskanpi', ro='a doua jumătate a lui $date1', ru={'вторая половина $date1', case={'gen',''}}, sk={'2. polovica $date1', case={'gen',''}}, sl={'druga polovica {{IfNum | $date0 | leta}} $date1', case={'gen',''}}, sr='друга половина $date1', sv='andra hälften av $date1', uk={'друга половина $date1', case={'gen',''}}, ur='نصف آخر $date1', vi='nửa cuối năm $date1', ['zh-hans']='$date1下半期', ['zh-hant']='$date1下半期', default='<span style="color:red">second half of $date1</span>', }, ['1quarter']= { nDates = 1, ar = ' الربع الأول من $date1', bn='$date1-এর প্রথম ত্রৈমাসিক', ['be-tarask']={'першая чвэрць $date1', case={'gen',''}}, ckb='چارەکی یەکەمی $date1', cs={'1. čtvrtina $date1', case={'gen',''}}, de='erstes Quartal $date1', en='first quarter of $date1', ['en-gb']='first quarter of $date1', ['en-ca']='first quarter of $date1', eo='unua kvarono de $date1', es='primer cuarto del $date1', fa='ربع نخست $date1', fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 ensimmäinen neljännes' end, case={'gen',''}}, fr= function(date1, state) return 'premier quart '.. frOf[state.precision] ..' $date1' end, ga='chéad ráithe de $date1', he='רבעון ראשון של $date1', hsb={'prěnja štwórćina $date1', case={'gen',''}}, hr={'prva četvrtina $date1', case={'gen',''}}, it='primo quarto del $date1', ja='$date1第1四半期', ko='$date1 일사분기', ml='$date1 ഒന്നാം ത്രൈമാസം', nb='første kvartal av $date1', nl='eerste kwart $date1', nn='fyrste kvartalet av $date1', no='første kvartal av $date1', --pl={'pierwsza ćwiartka $date1', case={'gen',''}}, pl={function(date1, state) if state.precision == 10 then -- precision == month return 'pierwszy tydzień $date1' elseif state.precision == 7 then -- precision == century return 'pierwsze ćwierćwiecze $date1' else return 'pierwszy kwartał $date1' end end, case={'gen',''}}, pt='primeiro trimestre de $date1', qu='$date1 ñawpaq ñiqin tawa phatmanpi', ru={'первая четверть $date1', case={'gen',''}}, sk={'1. štvrtina $date1', case={'gen',''}}, sl={'prva četrtina {{IfNum | $date0 | leta}} $date1', case={'gen',''}}, sr='прва четвртина $date1', sv='första kvartalet av $date1', uk={'1-ша чверть $date1', case={'gen',''}}, ur='پہلی سہ ماہی $date1', vi='quý 1 năm $date1', ['zh-hans']='$date1第一季度', ['zh-hant']='$date1第一季度', default='<span style="color:red">first quarter of $date1</span>', }, ['2quarter']= { nDates = 1, ar = 'الربع الثاني من $date1', ['be-tarask']={'другая чвэрць $date1', case={'gen',''}}, bn='$date1-এর দ্বিতীয় ত্রৈমাসিক', ckb='چارەکی دووەمی $date1', cs={'2. čtvrtina $date1', case={'gen',''}}, de='zweites Quartal $date1', en='second quarter of $date1', ['en-gb']='second quarter of $date1', ['en-ca']='second quarter of $date1', eo='dua kvarono de $date1', es='segundo cuarto del $date1', fa='ربع دوم $date1', fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 toinen neljännes' end, case={'gen',''}}, fr= function(date1, state) return 'deuxième quart '.. frOf[state.precision] ..' $date1' end, ga='dara ráithe de $date1', he='רבעון שני של $date1', hsb={'druha štwórćina $date1', case={'gen',''}}, hr={'druga četvrtina $date1', case={'gen',''}}, it='secondo quarto del $date1', ja='$date1第2四半期', ko='$date1 이사분기', ml='$date1 രണ്ടാം ത്രൈമാസം', nb='andre kvartal av $date1', nl='tweede kwart $date1', nn='andre kvartalet av $date1', no='andre kvartal av $date1', --pl={'druga ćwiartka $date1', case={'gen',''}}, pl={function(date1, state) if state.precision == 10 then -- precision == month return 'drugi tydzień $date1' elseif state.precision == 7 then -- precision == century return 'druge ćwierćwiecze $date1' else return 'drugi kwartał $date1' end end, case={'gen',''}}, pt='segundo trimestre de $date1', qu='$date1 iskay ñiqin tawa phatmanpi', ru={'вторая четверть $date1', case={'gen',''}}, sk={'2. štvrtina $date1', case={'gen',''}}, sl={function(date1, state) return 'druga četrtina ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}}, sr='друга четвртина $date1', sv='andra kvartalet av $date1', uk={'2-га чверть $date1', case={'gen',''}}, ur='دوسری سہ ماہی $date1', vi='quý 2 năm $date1', ['zh-hans']='$date1第二季度', ['zh-hant']='$date1第二季度', default='<span style="color:red">second quarter of $date1</span>', }, ['3quarter']= { nDates = 1, ar = 'الربع الثالث من $date1', ['be-tarask']={'трэцяя чвэрць $date1', case={'gen',''}}, bn='$date1-এর তৃতীয় ত্রৈমাসিক', ckb='چارەکی سێیەمی $date1', cs={'3. čtvrtina $date1', case={'gen',''}}, de='drittes Quartal $date1', en='third quarter of $date1', ['en-gb']='third quarter of $date1', ['en-ca']='third quarter of $date1', eo='tria kvarono de $date1', es='tercer cuarto del $date1', fa='ربع سوم $date1', fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 kolmas neljännes' end, case={'gen',''}}, fr= function(date1, state) return 'troisième quart '.. frOf[state.precision] ..' $date1' end, ga='triú ráithe de $date1', he='רבעון שלישי של $date1', hsb={'třeća štwórćina $date1', case={'gen',''}}, hr={'treća četvrtina $date1', case={'gen',''}}, it='terzo quarto del $date1', ja='$date1第3四半期', ko='$date1 삼사분기', ml='$date1 മൂന്നാം ത്രൈമാസം', nb='tredje kvartal av $date1', nl='derde kwart $date1', nn='tredje kvartalet av $date1', no='tredje kvartal av $date1', --pl={'trzecia ćwiartka $date1', case={'gen',''}}, pl={function(date1, state) if state.precision == 10 then -- precision == month return 'trzeci tydzień $date1' elseif state.precision == 7 then -- precision == century return 'trzecie ćwierćwiecze $date1' else return 'trzeci kwartał $date1' end end, case={'gen',''}}, pt='terceiro trimestre de $date1', qu='$date1 kimsa ñiqin tawa phatmanpi', sk={'3. štvrtina $date1', case={'gen',''}}, sl={function(date1, state) return 'tretja četrtina ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}}, sr='трећа четвртина $date1', ru={'третья четверть $date1', case={'gen',''}}, sv='tredje kvartalet av $date1', uk={'3-тя чверть $date1', case={'gen',''}}, ur='تیسری سہ ماہی $date1', vi='quý 3 năm $date1', ['zh-hans']='$date1第三季度', ['zh-hant']='$date1第三季度', default='<span style="color:red">third quarter of $date1</span>', }, ['4quarter']= { nDates = 1, ar = 'الربع الرابع من $date1', ['be-tarask']={'чацьвёртая чвэрць $date1', case={'gen',''}}, bn='$date1-এর চতুর্থ ত্রৈমাসিক', ckb='چارەکی چوارەمی $date1', cs={'4. čtvrtina $date1', case={'gen',''}}, de='viertes Quartal $date1', en='fourth quarter of $date1', ['en-gb']='fourth quarter of $date1', ['en-ca']='fourth quarter of $date1', eo='kvara kvarono de $date1', es='último cuarto del $date1', fa='ربع چهارم $date1', fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 viimeinen neljännes' end, case={'gen',''}}, fr= function(date1, state) return 'quatrième quart '.. frOf[state.precision] ..' $date1' end, ga='ceathrú ráithe de $date1', he='רבעון רביעי של $date1', hsb={'poslednja štwórćina $date1', case={'gen',''}}, hr={'četvrta četvrtina $date1', case={'gen',''}}, it='ultimo quarto del $date1', ja='$date1第4四半期', ko='$date1 사사분기', ml='$date1 നാലാം ത്രൈമാസം', nb='fjerde kvartal av $date1', nl='vierde kwart $date1', nn='tredje kvartalet av $date1', no='fjerde kvartal av $date1', --pl={'czwarta ćwiartka $date1', case={'gen',''}}, pl={function(date1, state) if state.precision == 10 then -- precision == month return 'ostatni tydzień $date1' elseif state.precision == 7 then -- precision == century return 'ostatnie ćwierćwiecze $date1' else return 'ostatni kwartał $date1' end end, case={'gen',''}}, pt='quarto trimestre de $date1', qu='$date1 qhipaq ñiqin tawa phatmanpi', ru={'последняя четверть $date1', case={'gen',''}}, sk={'4. štvrtina $date1', case={'gen',''}}, sl={function(date1, state) return 'zadnja četrtina ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}}, sr='четврта четвртина $date1', sv='fjärde kvartalet av $date1', uk={'4-та чверть $date1', case={'gen',''}}, ur='چوتھی سہ ماہی $date1', vi='quý 4 năm $date1', ['zh-hans']='$date1第四季度', ['zh-hant']='$date1第四季度', default='<span style="color:red">forth quarter of $date1</span>', }, -- ========================================== -- === Seasons ============================== -- ========================================== ['spring'] = { nDates = 1, ar='ربيع $date1', ['be-tarask']='вясна $date1', bn='বসন্তকাল $date1', ca='primavera $date1', ckb='بەھاری $date1', cs={'jaro $date1', case={'gen', ''}}, da='Forår $date1', de='Frühling $date1', en='Spring $date1', ['en-gb']='Spring $date1', ['en-ca']='Spring $date1', eo='printempo $date1', es='primavera de $date1', et='$date1 kevad', fa='بهار $date1', fi='Kevät $date1', fr='printemps $date1', ga='earrach $date1', gl='primavera $date1', he='אביב $date1', hr='proljeće $date1', hsb='nalěćo $date1', hu='$date1 tavasza', it='primavera $date1', ja='{{#if:$date1|$date1年}}春', ko='$date1 봄', mk='пролет $date1', ml='$date1 വസന്തം', nb='våren $date1', nds='Vörjohr $date1', nn='våren $date1', nl='voorjaar $date1', no='våren $date1', pl='wiosna $date1', pt='primavera de $date1', ro='primăvara lui $date1', ru='весна $date1', sk={'jar $date1', case={'gen', ''}}, sl='pomlad $date1', sr='пролеће $date1', sv='våren $date1', uk='весна $date1', ur='بہار $date1', vi='mùa đông năm $date1', ['zh-hans']='{{#if:$date1|$date1年}}春季', ['zh-hant']='{{#if:$date1|$date1年}}春季', default='<span style="color:red">Spring $date1</span>', }, ['summer'] = { nDates = 1, ar='صيف $date1', ['be-tarask']='лета $date1', bn='গ্রীষ্মকাল $date1', ca='estiu $date1', ckb='ھاوینی $date1', cs={'léto $date1', case={'gen', ''}}, da='Sommer $date1', de='Sommer $date1', en='Summer $date1', ['en-gb']='Summer $date1', ['en-ca']='Summer $date1', eo='somero $date1', es='verano de $date1', et='$date1 suvi', fa='تابستان $date1', fi='Kesä $date1', fr='été $date1', ga='samhradh $date1', gl='verán $date1', he='קיץ $date1', hr='ljeto $date1', hsb='lěćo $date1', hu='$date1 nyara', it='estate $date1', ja='{{#if:$date1|$date1年}}夏', ko='$date1 여름', mk='лето $date1', ml='$date1 വേനൽ', nb='sommeren $date1', nds='Sommer $date1', nn='sumaren $date1', nl='zomer $date1', no='sommeren $date1', pl='lato $date1', pt='verão de $date1', ro='vara lui $date1', ru='лето $date1', sk={'leto $date1', case={'gen', ''}}, sl='poletje $date1', sr='лето $date1', sv='sommaren $date1', uk='літо $date1', ur='گرما $date1', vi='mùa hè năm $date1', ['zh-hans']='{{#if:$date1|$date1年}}夏季', ['zh-hant']='{{#if:$date1|$date1年}}夏季', default='<span style="color:red">Summer $date1</span>', }, ['autumn'] = { nDates = 1, ar='خريف $date1', ['be-tarask']='восень $date1', bn='শরত্কাল $date1', ca='tardor $date1', ckb='پاییزی $date1', cs={'podzim $date1', case={'gen', ''}}, da='Efterår $date1', de='Herbst $date1', en='Autumn $date1', ['en-gb']='Autumn $date1', ['en-ca']='Autumn $date1', eo='aŭtuno $date1', es='otoño de $date1', et='$date1 sügis', fa='پاییز $date1', fi='Syksy $date1', fr='automne $date1', ga='fómhar $date1', gl='outono $date1', he='סתיו $date1', hr='jesen $date1', hsb='nazyma $date1', hu='$date1 ősze', it='autunno $date1', ja='{{#if:$date1|$date1年}}秋', ko='$date1 가을', mk='есен $date1', ml='$date1 ശരത്കാലം', nb='høsten $date1', nds='Harvst $date1', nn='hausten $date1', nl='herfst $date1', no='høsten $date1', pl='jesień $date1', pt='outono de $date1', ro='toamna lui $date1', ru='осень $date1', sk={'jeseň $date1', case={'gen', ''}}, sl='jesen $date1', sr='јесен $date1', sv='hösten $date1', uk='осінь $date1', ur='خزاں $date1', vi='mùa thu năm $date1', ['zh-hans']='{{#if:$date1|$date1年}}秋季', ['zh-hant']='{{#if:$date1|$date1年}}秋季', default='<span style="color:red">Autumn $date1</span>', }, ['winter'] = { nDates = 1, ar='شتاء $date1', ['be-tarask']='зіма $date1', bn='শীতকাল $date1', ca='hivern $date1', ckb='زستانی $date1', cs={'zima $date1', case={'gen', ''}}, da='Vinter $date1', de='Winter $date1', en='Winter $date1', ['en-gb']='Winter $date1', ['en-ca']='Winter $date1', eo='vintro $date1', es='invierno de $date1', et='$date1 talv', fa='زمستان $date1', fi='Talvi $date1', fr='hiver $date1', ga='geimhreadh $date1', gl='inverno $date1', he='חורף $date1', hr='zima $date1', hsb='zyma $date1', hu='$date1 tele', it='inverno $date1', ja='{{#if:$date1|$date1年}}冬', ko='$date1 겨울', mk='зима $date1', ml='$date1 ശൈത്യകാലം', nds='Winter $date1', nl='winter $date1', nb='vinteren $date1', nn='vinteren $date1', no='vinteren $date1', pl='zima $date1', pt='inverno de $date1', ro='iarna lui $date1', ru='зима $date1', sk={'zima $date1', case={'gen', ''}}, sl='zima $date1', sr='зима $date1', sv='vintern $date1', uk='зима $date1', ur='سرما $date1', vi='mùa đông năm $date1', ['zh-hans']='{{#if:$date1|$date1年}}冬季', ['zh-hant']='{{#if:$date1|$date1年}}冬季', default='<span style="color:red">Winter $date1</span>', }, -- ========================================== -- === Decade/Century/Millennium ============ -- ========================================== ['decade'] = { nDates = 1, ar = 'عقد $date1', ['be-tarask']='$date1-я гады', bn='$date1-এর দশক', ca='dècada del $date1', ckb='دەیەی $date1', cs=function(date1, state) return ((date1 % 100 == 0) and 'první dekáda' or ((date1 % 100) .. '. léta')) .. ' ' .. (math.floor(date1 / 100) + 1) .. '. století' end, da="$date1'erne", de='$date1er Jahre', el='δεκαετία του $date1', en='$date1s', ['en-gb']='$date1s', ['en-ca']='$date1s', eo='$date1-aj jaroj', es='años $date1', et='$date1ndad', fa='دههٔ $date1', fi='$date1-luvulla', fr='années $date1', ga='$date1í', gl='anos $date1', he='שנות ה-$date1', hr='$date1-ih', hsb='$date1te lěta', hu = function(date1, state) local suffix = 's' if date1 % 100 == 10 or date1 % 100 == 40 or date1 % 100 == 50 or date1 % 100 == 70 or date1 % 100 == 90 then suffix = 'es' elseif date1 % 100 == 20 or date1 % 100 == 30 or date1 % 100 == 60 or date1 % 100 == 80 then suffix = 'as' elseif date1 % 100 == 0 then if date1 % 1000 ~= 0 then suffix = 'as' elseif date1 % 1e6 ~= 0 then suffix = 'es' end end return string.format('%d-%s évek', date1, suffix) end, it="{{#ifexpr: $date1 mod 100 = 0 | primo decennio del {{Roman|{{#expr: ($date1 / 100) + 1}}}} sec. | anni '{{#expr: $date1 mod 100 }} del {{Roman|{{#expr: floor($date1 / 100) + 1}}}} sec.}}", ja='$date1年代', ko='$date1년대', mk='$date1-ти', ml='ദശകം $date1-ൽ', nb='$date1-årene', nn='$date1-åra', nds='Johren $date1', nl='jaren $date1', no='$date1-årene', pl=function(date1, state) local str = 'lata '..(date1 % 100)..'. ' if (date1 % 100 == 0) then str = 'pierwsza dekada ' elseif (date1 % 100 == 10) then str = 'druga dekada ' end return str .. Roman(math.floor(date1 / 100) + 1) .. ' wieku' end, pt='década de $date1', qu='$date1 watakuna', ro='anii $date1', ru='$date1-е годы', sk=function(date1, state) return ((date1 % 100 == 0) and 'prvé desaťročie' or ((date1 % 100) .. '. roky')) .. ' ' .. (math.floor(date1 / 100) + 1) .. '. storočia' end, sl='$date1-ta leta', sr='$date1-их', sv='$date1-talet{{#switch:$date1|1300|1400|1500|1600|1700|1800|1900|2000|2100=&nbsp;(decennium)}}', uk='$date1-ті роки', ur='دہائی $date1', vi='thập niên $date1', ['zh-hans']='$date1年代', ['zh-hant']='$date1年代', default='<span style="color:red">$date1s</span>', }, ['century'] = { nDates = 1, ar='القرن $date1', ['be-tarask']=function(date1, state) return Ordinal(date1, 'be-tarask') .. ' стагодзьдзе' end, bn=function(date1, state) return Ordinal(date1, 'bn') .. ' শতাব্দী' end, ca='segle {{small-caps|{{lc:{{Roman year|$date1}}}}}}', ckb='سەدەی $date1', cs='$date1. století', da='$date1. århundrede', de='$date1. Jahrhundert', el='$date1ος αιώνας', en=function(date1, state) return Ordinal(date1, 'en') .. ' century' end, ['en-gb']=function(date1, state) return Ordinal(date1, 'en-gb') .. ' century' end, ['en-ca']=function(date1, state) return Ordinal(date1, 'en-ca') .. ' century' end, eo='$date1-a jarcento', es=function(date1, state) return 'siglo ' .. Roman(date1) end, et='$date1. sajand', fa='سدهٔ $date1', fi='{{#expr: ($date1 - 1) * 100}}-luvulla', fr=function(date1, state) return Ordinal(date1, 'fr', 'roman', 'm') .. ' siècle' end, ga='$date1ú haois', gl=function(date1, state) return 'século ' .. Roman(date1) end, he='המאה ה-$date1', hr='$date1. stoljeće', hsb='$date1. lětstotk', hu='$date1. évszázad', it=function(date1, state) return Roman(date1) .. ' sec.' end, ja='$date1世紀', ko='$date1세기', la='saeculum $date1', mk=function(date1, state) return Roman(date1) .. ' век' end, ml='$date1-ആം നൂറ്റാണ്ട്', nb=function(date1, state) return Ordinal(date1, 'nb') .. ' århundre' end, nn=function(date1, state) return 'det ' .. Ordinal(date1, 'no') .. ' hundreåret' end, nds='$date1. Johrhunnert', nl='$date1e eeuw', no=function(date1, state) return Ordinal(date1, 'no') .. ' århundre' end, pl=function(date1, state) return Roman(date1) .. ' ' .. decCentury('pl',state.case) end, pt=function(date1, state) return 'século ' .. Roman(date1) end, qu='$date1 ñiqin pachakwata', ro='secolul al $date1-lea', ru=function(date1, state) return Roman(date1) .. ' век' end, sk='$date1. storočie', sl=function(date1, state) return Ordinal(date1, 'sl') .. ' stoletje' end, sr='$date1. век', sv='{{#expr:$date1 - 1}}00-talet', tt=function(date1, state) return Roman(date1) .. ' гасыр' end, uk=function(date1, state) return Roman(date1) .. ' ст.' end, ur='صدی $date1', vi='thế kỷ $date1', ['zh-hans']='$date1世纪', ['zh-hant']='$date1世紀', default='<span style="color:red">$date1 century</span>', }, ['millennium'] = { nDates = 1, ar = 'الألفية $date1', ['be-tarask']=function(date1, state) return Ordinal(date1, 'be-tarask') .. ' тысячагодзьдзе' end, bn=function(date1, state) return Ordinal(date1, 'bn') .. ' সহস্রাব্দ' end, ckb=function(date1, state) return 'ھەزارەی ' .. Ordinal(date1, 'ckb') end, cs='$date1. tisíciletí', de='$date1. Jahrtausend', en=function(date1, state) return Ordinal(date1, 'en') .. ' millennium' end, ['en-gb']=function(date1, state) return Ordinal(date1, 'en-gb') .. ' millennium' end, ['en-ca']=function(date1, state) return Ordinal(date1, 'en-ca') .. ' millennium' end, eo='$date1-a jarmilo', es=function(date1, state) return Roman(date1) .. ' milenio' end, fa=function(date1, state) return 'هزارهٔ ' .. Ordinal(date1, 'fa') end, fr=function(date1, state) return Ordinal(date1, 'fr', 'roman', 'm') .. ' millénaire' end, ga='$date1ú mílaoise', hr='$date1. tisućljeće', hsb='$date1. lěttysac', it=function(date1, state) return Roman(date1) .. ' millennio' end, ja='$date1千年紀', ko='제$date1천년기', la='millennium $date1', ml='$date1-മത്തെ സഹസ്രാബ്ദം', nb=function(date1, state) return Ordinal(date1, 'nb') .. ' årtusen' end, nn=function(date1, state) return Ordinal(date1, 'no') .. ' tusenåret' end, nl='$date1e millennium', no=function(date1, state) return Ordinal(date1, 'no') .. ' årtusen' end, pl=function(date1, state) return Roman(date1) .. ' ' .. decMillennium('pl',state.case) end, pt=function(date1, state) return Roman(date1) .. ' milénio' end, qu='$date1 ñiqin waranqawata', ru=function(date1, state) return Roman(date1) .. ' тысячелетие' end, sk='$date1. tisícročie', sl=function(date1, state) return Ordinal(date1, 'sl') .. ' tisočletje' end, sv=function(date1, state) return Ordinal(date1, 'sv') .. ' årtusendet' end, uk=function(date1, state) return Roman(date1) .. ' тис.' end, ur=function(date1, state) return 'ہزارہ ' .. Ordinal(date1, 'ur') end, vi='thiên niên kỷ $date1', ['zh-hans']=function(date1, state) return Ordinal(date1, 'zh-hans') .. '千年' end, ['zh-hant']=function(date1, state) return Ordinal(date1, 'zh-hant') .. '千年' end, --default='{{Please translate|$date1 millennium|Module:I18n/complex date}}', default='<span style="color:red">$date1 millennium</span>', }, ['million'] = { ckb = '$date1 میلیۆن ساڵ', de = '$date1 Millionen Jahre', en = '$date1 million years', ['en-gb'] = '$date1 million years', ['en-ca'] = '$date1 million years', eo = '$date1 milionoj da jaroj', es = '$date1 millones de años', fa = '$date1 میلیون سال', fr = '$date1 millions d’années', it = '$date1 milioni di anni', ko = '$date1백만 년', ml = function(date1, state) if date1 >= 10 then return (date1 / 10) .. ' കോടി വർഷങ്ങൾ' -- 100 lakh = 1 crore else return (date1 * 10) .. ' ലക്ഷം വർഷങ്ങൾ' end end, nb = '$date1 millioner år', nl = '$date1 miljoen jaar', nn = '$date1 millionar år', pl = '$date1 milionów lat', pt = '$date1 milhões de anos', ru = '$date1 миллиона лет', sl = '$date1 milijonov let', sr = '$date1 милион година', uk = '$date1 мільйони років', ur = '$date1 ملین سال', ['zh-hans'] = '$date1百万年', ['zh-hant'] = '$date1百萬年', default='<span style="color:red">$date1 million years</span>', nDates = 1, }, ['billion'] = { ckb = '$date1 بیلیۆن ساڵ', de = '$date1 Milliarden Jahre', en = '$date1 billion years', ['en-gb'] = '$date1 billion years', ['en-ca'] = '$date1 billion years', es = '$date1 mil millones de años', fa = '$date1 میلیارد سال', fr = '$date1 milliard d’années', it = '$date1 miliardi di anni', ko = '$date1십억 년', ml = function(date1, state) return (date1 * 10) .. ' കോടി വർഷങ്ങൾ' end, nb = '$date1 milliarder år', nl = '$date1 miljard jaar', nn = '$date1 milliardar år', pl = '$date1 miliardów lat', pt = '$date1 mil milhões de anos', ru = '$date1 миллиардов лет', sl = '$date1 milijard let', sr = '$date1 милијарду година', uk = '$date1 мільярдів років', ur = '$date1 بلین سال', ['zh-hans'] = '$date1十亿年', ['zh-hant'] = '$date1十億年', default='<span style="color:red$date1 billion years</span>', nDates = 1, }, -- ========================================== -- === Complex phrases ====================== -- ========================================== -- Phrases which for some languages can be build out of simpler phrases -- Their "default" state, used when no translation in the requested language was found, returns a "state" like -- table which is used to call the function again and built the phrase out of simple phrases -- $date1 - original date - 1 -- $date2 - original date -- if era is BC than $date1 and $date2 are swapped ['turn of the century'] = { nDates = 2, ['be-tarask']=function(date1, date2, state) return 'канец ' .. Roman(date1) ..' — пачатак ' .. Roman(date2) ..' стагодзьдзя' end, bn=function(date1, date2, state) return '$date1/' .. Ordinal(date2, 'bn') .. ' শতাব্দীর পালাবদলে' end, ckb=function(date1, date2, state) return 'سەردەمی $date1/' .. Ordinal(date2, 'ckb') .. ' سەدە' end, cs='přelom $date1. a $date2. století', de=function(date1, date2, state) return 'Jahrhundertwende $date1/' .. Ordinal(date2, 'de') end, en=function(date1, date2, state) return 'turn of the $date1/' .. Ordinal(date2, 'en') .. ' century' end, ['en-gb']=function(date1, date2, state) return 'turn of the $date1/' .. Ordinal(date2, 'en-gb') .. ' century' end, ['en-ca']=function(date1, date2, state) return 'turn of the $date1/' .. Ordinal(date2, 'en-ca') .. ' century' end, eo='ŝanĝo de la $date1-a al la $date2-a jarcentoj', es=function(date1, date2, state) return 'hacia finales del siglo ' .. Roman(date1) .. ' y principios del siglo ' .. Roman(date2) .. '' end, fi='{{#expr: $date1 * 100-100}}-luvun loppu ja {{#expr: $date2 * 100-100}}-luvun alku', fr=function(date1, date2, state) return 'fin du ' .. Ordinal(date1, 'fr', 'roman', 'm') .. ' siècle / début du ' .. Ordinal(date2, 'fr', 'roman', 'm') end, ga=function(date1, date2, state) return 'cas an $date1ú/' .. Ordinal(date2, 'en') .. ' haois' end, hr='kraj $date1. i početak $date2. stoljeća', hsb=function(date1, date2, state) return 'přechod ' .. Roman(date1) ..' do ' .. Roman(date2) ..' lětstotka' end, it=function(date1, date2, state) return 'fine del ' .. Roman(date1) .. ' sec. e inizio del ' .. Roman(date2) .. ' sec.' end, ja='$date1世紀から$date2世紀への変わり目', ko=function(date1, date2, state) return '$date1~$date2세기 전환기' end, ml='$date1 നൂറ്റാണ്ട് അവസാനവും $date2 നൂറ്റാണ്ട് ആദ്യവും', nb=function(date1, date2, state) return 'slutten av det ' .. Ordinal(date1, 'nb') .. ' århundre/begynnelsen av det ' .. Ordinal(date2, 'nb') .. ' århundre' end, nl=function(date1, date2, state) return 'eind $date1e/begin $date2e eeuw' end, nn=function(date1, date2, state) return 'slutten av det ' .. Ordinal(date1, 'nn') .. ' hundreåret/byrjinga av det ' .. Ordinal(date2, 'nn') .. ' hundreåret' end, pl=function(date1, date2, state) return 'przełom ' .. Roman(date1) ..' i ' .. Roman(date2) ..' wieku' end, pt=function(date1, date2, state) return 'final do século ' .. Roman(date1) .. ' e início do século ' .. Roman(date2) .. '' end, qu="$date1 ñiqin waranqawatamanta $date2 ñiqin waranqawataman t'ikrasqanpi", ru=function(date1, date2, state) return 'конец ' .. Roman(date1) ..' — начало ' .. Roman(date2) ..' века' end, sk='prelom $date1. a $date2. storočia', sl=function(date1, date2, state) return 'pozno ' .. Ordinal(date1, 'sl') .. '. in zgodnje ' .. Ordinal(date2, 'sl') .. '. stoletje' end, sr='крај $date1. и почетак $date2. века', sv='sekelskiftet år $date200', uk=function(date1, date2, state) return 'кін. ' .. Roman(date1) ..' ст. — поч. ' .. Roman(date2) ..' ст.' end, vi='bước sang thế kỷ $date2', ['zh-hans']=function(date1, date2, state) return '$date1世纪末' .. Ordinal(date2, 'zh-hans') .. '世纪初' end, ['zh-hant']=function(date1, date2, state) return '$date1世紀末' .. Ordinal(date2, 'zh-hant') .. '世紀初' end, default=function(date1, date2, state) return {conj='and', adj1 = 'late', unit1='century', era1=state.era1, adj2 = 'early', unit2='century', era2=state.era2} end, }, -- $date1 - original date - 10 -- $date2 - original date -- if era is BC than $date1 and $date2 are swapped ['turn of the decade']={ nDates = 2, ['be-tarask']='канец $date1-х — пачатак $date2-х гг.', bn='$date1-এর দশকের শেষে এবং $date2-এর দশকের শুরুতে', ckb='کۆتایییەکانی $date1 و سەرەتاکانی $date2', cs=function(date1, date2, state) local decade1 = math.floor((date1 % 100) / 10) local decade2 = math.floor((date2 % 100) / 10) local century1 = math.floor( date1 / 100) + 1 local century2 = math.floor( date2 / 100) + 1 if decade1 == 0 and date1 < date2 then return "přelom 1. a 2. dekády " .. century1 .. ". století" elseif decade2 == 0 and date2 < date1 then return "přelom 9. a 10. dekády " .. century1 .. ". století" elseif (decade1 == 9 and date1 < date2) or (decade2 == 9 and date2 < date1) then return "přelom " .. century1 .. ". a " .. century2 .. ". století" else return "přelom " .. decade1 .. "0. a " .. decade2 .. "0. let " .. century1 .. ". století" end end, de='späte $date1er und frühe $date2er', en='late $date1s and early $date2s', ['en-gb']='late $date1s and early $date2s', ['en-ca']='late $date1s and early $date2s', eo='ŝanĝo de la $date1-a al la $date2-a jardekoj', es='finales de los años $date1 y principios de los años $date2', fa='اواخر دههٔ $date1 و اوایل دههٔ $date2', fi='$date1-luvun loppu ja $date2-luvun alku', fr='fin des années $date1 / début des années $date2', ga='deireadh sna $date1í / tús sna $date2í', hr='kraj $date1-ih i početak $date2-ih', hsb='pózdnje $date1te a zažne $date2te lěta', it='fine degli anni $date1 / inizio degli anni $date2', ja='$date1年代末から$date2年代初頭', ko='$date1년대 말 $date2년대 초', ml='$date1കൾ അവസാനവും $date2കൾ ആദ്യവും', nb = 'sent på $date1-tallet og tidlig på $date2-tallet', nl = 'eind $date1e/begin $date2e decennium', nn = 'seint på $date1-talet og tidleg på $date2-talet', pl=function(date1, date2, state) local decade1 = math.floor(date1 % 100) local decade2 = math.floor(date2 % 100) local century1 = Roman(math.floor( date1 / 100) + 1) local century2 = Roman(math.floor( date2 / 100) + 1) if decade1 == 0 and date1 < date2 then return "przełom pierwszej i drugiej dekady " .. century1 .. " wieku" elseif decade1 == 10 and date1 < date2 then return "przełom drugiej dekady i lat 20. " .. century1 .. " wieku" elseif decade1 == 90 and decade2 == 0 then return "przełom ostatniej dekady " .. century1 .. " i pierwszej dekady " .. century2 .. " wieku" else return "przełom lat " .. decade1 .. ". i " .. decade2 .. ". " .. century1 .. " wieku" end end, pt='final dos anos $date1 e início dos anos $date2', qu='qhipaq $date1 watakuna ñawpaq $date2 watakunapas', ru='конец $date1-х — начало $date2-х гг.', sv='decennieskiftet år $date2', sk=function(date1, date2, state) local decade1 = math.floor((date1 % 100) / 10) local decade2 = math.floor((date2 % 100) / 10) local century1 = math.floor( date1 / 100) + 1 local century2 = math.floor( date2 / 100) + 1 if decade1 == 0 and date1 < date2 then return "prelom 1. a 2. desaťročia " .. century1 .. ". storočia" elseif decade2 == 0 and date2 < date1 then return "prelom 9. a 10. desaťročia " .. century1 .. ". storočia" elseif (decade1 == 9 and date1 < date2) or (decade2 == 9 and date2 < date1) then return "prelom " .. century1 .. ". a " .. century2 .. ". storočia" else return "prelom " .. decade1 .. "0. a " .. decade2 .. "0. rokov " .. century1 .. ". storočia" end end, sl='pozna $date1-ta in zgodnja $date2-ta leta', hr='крај $date1-их и почетак $date2-их', uk='кінець $date1-х — початок $date2-х рр.', ur='اخیر دہائی $date1 و ابتدا دہائی $date2', vi='bước sang thập niên $date2', ['zh-hans']='$date1年代末$date2年代初', ['zh-hant']='$date1年代末$date2年代初', default=function(date1, date2, state) return {conj='and', adj1 = 'late', unit1='decade', era1=state.era1, adj2 = 'early', unit2='decade', era2=state.era2} end, }, -- $date1 - original date - 1 -- $date2 - original date -- if era is BC than $date1 and $date2 are swapped ['turn of the year']={ nDates = 2, ['be-tarask']='канец $date1 — пачатак $date2 г.', bn='$date1-এর শেষে এবং $date2-এর শুরুতে', ckb='کۆتاییی $date1 و سەرەتای $date2', cs='přelom roku $date1/$date2', de='Jahreswechsel $date1/$date2', en='late $date1 and early $date2', ['en-gb']='late $date1 and early $date2', ['en-ca']='late $date1 and early $date2', eo='jarŝanĝo $date1 / $date2', es='finales de $date1 y principios de $date2', fa='اواخر $date1 و اوایل $date2', fi='vuoden $date1 loppu ja vuoden $date2 alku', fr='fin $date1 / début $date2', ga='deireadh $date1 / tús $date2', hsb='kónc $date1/spočatk $date2', ja='$date1年末から$date2年初め', ko='$date1 말 $date2 초', ml='$date1 അവസാനവും $date2 ആദ്യവും', nb='årsskiftet $date1/$date2', nl='eind $date1 en begin $date2', nn='årsskiftet $date1/$date2', pl='koniec $date1 i początek $date2 roku', pt='final de $date1 e início de $date2', qu="$date1 qhipaq p'unchawkuna $date2 ñawpaq p'unchawkunapas", ru='конец $date1 — начало $date2 г.', sk='prelom rokov $date1/$date2', sl='konec leta $date1 in začetek leta $date2', sv='sena $date1 och tidiga $date2', uk='кінець $date1 — початок $date2 р.', ur='اخیر $date1 و ابتدا $date2', vi='bước sang năm $date2', ['zh-hans']='$date1年末$date2年初', ['zh-hant']='$date1年末$date2年初', default=function(date1, date2, state) return {conj='and', adj1 = 'late', unit1='year', era1=state.era1, adj2 = 'early', unit2='year', era2=state.era2} end, }, ['circa2'] = { nDates = 2, ar='بين $date1 – $date2', ['be-tarask']={'прыкладна з $date1 да прыкладна $date2', case={'gen','gen'}}, bn='প্রায় $date1 এবং প্রায় $date2-এর মাঝামাঝি', ca='cap a $date1 o $date2', ckb='بە نزیکی لەنێوان $date1 و $date2', cs='cca $date1 až $date2', da='ca. mellem $date1 og $date2', de='etwa $date1 bis $date2', el='περίπου μεταξύ $date1 και $date2', en='between circa $date1 and circa $date2', ['en-gb']='between circa $date1 and circa $date2', ['en-ca']='between circa $date1 and circa $date2', eo='proksimume de $date1 ĝis $date2', es='hacia $date1 o $date2', et='ca. $date1 ja $date2 vahel', fa='حدوداً بین $date1 و $date2', fi={function(date1, date2, state) return 'suunnilleen ' .. decYear(state,'fi','xxx') .. '$date1 ja $date2 välisenä aikana' end, case={'gen','gen'}}, fr='vers $date1-$date2', ga='idir $date1 go $date2', gl='entre $date1 e $date2', he='בסביבות ה- $date1 עד $date2', hr={'približno između $date1 i $date2', case={'gen','gen'}}, hsb={'wot něhdźe $date1 do něhdźe $date2', case={'gen','gen'}}, hu='$date1 és $date2 között', it='tra il $date1 e il $date2 circa', ja='$date1頃と$date2頃の間', ko='$date1경에서 $date2경 사이', mk='~ помеѓу $date1 и $date2', ml='ഉദ്ദേശം $date1-നും ഉദ്ദേശം $date2-നും ഇടയ്ക്ക്', nb='ca. mellom $date1 og $date2', nn='ca. mellom $date1 og $date2', nds='üm un bi $date1 bet $date2', nl='ca. $date1 tot $date2', no='ca. mellom $date1 og $date2', pl={'od około $date1 do około $date2', case={'gen','gen'}}, pt='cerca de $date1 a $date2', qu="$date1 p'unchawmantachá $date2 p'unchawkamachá", ro='circa $date1 – $date2', ru={'с около $date1 до, примерно, $date2', case={'gen','gen'}}, sk='cca $date1 až $date2', sl={function(date1, date2, state) return 'ok. ' .. decYear(state,'sl','gen') .. ' $date1 do $date2' end, case={'gen','gen'}}, sr='између ~ $date1 и ~ $date2', sv='cirka $date1 till $date2', uk={'з близько $date1 до, приблизно, $date2', case={'gen','gen'}}, ur='قریباً بین $date1 و $date2', vi='giữa vào khoảng $date1 và vào khoảng $date2', ['zh-hans']='约$date1~$date2间', ['zh-hant']='約$date1~$date2間', default=function(date1, date2, state) return {conj='between', adj1 = 'circa', unit1=state.unit1, era1=state.era1, adj2 = 'circa', unit2=state.unit2, era2=state.era2} end, }, -- ========================================== -- === Eras and calendars =================== -- ========================================== ['julian'] = { nDates = 2, ar='$date1 ($date2 حسب [[w:ar:التقويم اليولياني|تقويم يولياني]])', ['be-tarask']='$date1 ($date2 паводле [[w:be-tarask:Юліянскі каляндар|ст. ст.]]', bn='$date1 (জুলিয়ান ক্যালেন্ডারে $date2)', ca='$date1 ($date2 segons el [[w:ca:Calendari julià|calendari julià]])', ckb='$date1 ($date2 بەپێی [[w:ڕۆژژمێری جولیانی|ڕۆژژمێری جولیانی]])', cs='$date1 ($date2 podle [[w:cs:Juliánský kalendář|juliánského kalendáře]])', da='$date1 ($date2 [[w:da:Julianske kalender|Julianske kalender]])', de='$date1 ($date2 [[w:de:Julianischer Kalender|Julianischer Kalender]])', el='$date1 ($date2 με το [[w:el:Ιουλιανό ημερολόγιο|Ιουλιανό ημερολόγιο]])', en='$date1 ($date2 in [[w:Old Style and New Style dates|Julian calendar]])', ['en-gb']='$date1 ($date2 in [[w:Old Style and New Style dates|Julian calendar]])', ['en-ca']='$date1 ($date2 in [[w:Old Style and New Style dates|Julian calendar]])', fa='$date1 ($date2 در [[w:fa:Old Style and New Style dates|تقویم جولیان]])', eo='$date1 ($date2 laŭ la [[w:eo:Julia kalendaro|Julia Kalendaro]])', es='$date1 ($date2 según el [[w:es:Calendario juliano|calendario juliano]])', et='$date1 ($date2 [[w:et:Juliuse kalender|Juliuse kalendris]])', fi='$date1 ($date2 [[w:fi:juliaaninen kalenteri|juliaanisen kalenterin]] mukaan)', fr='$date1 ($date2 dans le [[w:fr:calendrier julien|calendrier julien]])', ga='$date1 ($date2 sa [[w:ga:Féilire Iúil|féilire Iúil]])', gl='$date1 ($date2 segundo o [[w:gl:Calendario xuliano|calendario xuliano]])', hu='$date1 ($date2 a [[w:hu:Julianus-naptár|Julián naptárban]])', hr='$date1 ($date2 prema [[w:hr:Julijanski kalendar|julijanskom kalendaru]])', he='$date1 ($date2 ב[[w:he:לוח היוליאני|הלוח היוליאני]])', hsb='$date1 ($date2 po julianiskej protyce)', it='$date1 ($date2 secondo il [[w:it:Calendario giuliano|calendario giuliano]])', ja='$date1([[w:ja:ユリウス暦|ユリウス暦]] $date2)', ko='$date1 ([[w:ko:율리우스력|율리우스력]] $date2)', mk='$date1 ($date2 по [[w:mk:Јулијански календар|Јулијанскиот календар]])', ml='$date1 ([[w:ml:ജൂലിയൻ കാലഗണനാരീതി|ജൂലിയൻ വർഷത്തിൽ]] $date2)', ml='$date1 ([[w:Old Style and New Style dates|ജൂലിയൻ കാലഗണനാരീതിയിൽ]] $date2)', nds='$date1 ($date2 na’n [[w:nds:Juliaansch Klenner|Juliaanschen Klenner]])', nb='$date1 ($date2 etter [[w:no:Juliansk kalender|den julianske kalenderen]])', nn='$date1 ($date2 etter [[w:nn:den julianske kalenderen|den julianske kalenderen]])', nl='$date1 ($date2 volgens de [[w:nl:Juliaanse kalender|Juliaanse kalender]])', no='$date1 ($date2 etter [[w:no:Juliansk kalender|den julianske kalender]])', pl='$date1 ($date2 wedle [[w:pl:Daty nowego i starego porządku|kalendarza juliańskiego]])', pt='$date1 ($date2 no [[w:pt:Mudança para o calendário gregoriano|calendário juliano]])', qu='$date1 ($date2 [[w:qu:Hulyanu kalindaryu|Hulyanu kalindaryupi]])', ro='$date1 ($date2 în [[w:ro:calendarul iulian|calendarul iulian]])', ru='$date1 ($date2 [[w:ru:Юлианский календарь|по ст. ст.]])', sk='$date1 ($date2 podľa [[w:sk:Juliánsky kalendár|juliánskeho kalendára]])', sl='$date1 ($date2 po [[w:sl:Julijanski koledar|julijanskem koledarju]])', sr='$date1 ($date2 према [[w:sr:Јулијански календар|јулијанском календару]])', sv='$date1 ($date2 [[w:sv:Gamla stilen|gamla stilen]])', uk='$date1 ($date2 [[w:uk:Юліанський календар|Юліанський календар]])', ur='$date1 ($date2 حسب [[w:ur:نئے اور پانے انداز کی تاریخ|جولین تقویم]])', vi='$date1 ($date2 trong [[w:vi:Lịch Julius|lịch Juliêng]])', ['zh-hans']='$date1([[w:Old Style and New Style dates|格里历]]$date2)', ['zh-hant']='$date1([[w:Old Style and New Style dates|格里曆]]$date2)', default='<span style="color:red">$date1 ($date2 in [[w:Old Style and New Style dates|Julian calendar]])</span>', }, ['ad'] = { nDates = 1, ['be-tarask']='$date1 [[w:be-tarask:ад Нараджэньня Хрыста|пасьля Н. Х.]]', bn ='$date1 খ্রিস্টাব্দ', ca ='$date1 dC', ckb ='$date1 [[w:ckb:ئانۆ دۆمینی|پاز]]', cs ='$date1 n. l.', de ='$date1 n. Chr.', el ='$date1 μ.Χ.', en ='$date1 [[w:en:Anno Domini|AD]]', ['en-gb'] ='$date1 [[w:en:Anno Domini|AD]]', ['en-ca'] ='$date1 [[w:en:Anno Domini|AD]]', eo ='$date1 pK', es ='$date1 [[w:es:Anno Dómini|d. C.]]', fa ='$date1 م.', fi ='$date1 jaa.', fr ='$date1 ap. J.-C.', gl ='$date1 d.C.', he ='$date1 לספירה', hu ='i. sz. $date1', hr ='$date1 pr. Kr.', hsb='$date1 po Chr.', it ='$date1 d.C.', ja ='西暦$date1', ko ='서기 $date1', mk ='$date1 н.е.', ml ='ക്രി.വ. $date1', nb ='$date1 e.Kr.', nl ='$date1 n.Chr.', nn ='$date1 e.Kr.', no ='$date1 e.Kr.', pl ='$date1 [[w:pl:naszej ery|n.e.]]', pt ='$date1 [[:pt:Anno Domini|AD]]', ro ='$date1 d.Hr.', ru ='$date1 н. э.', sk ='$date1 po Kr.', sl ='$date1 n. št.', sr ='$date1 [[w:sr:Anno Domini|AD]]', sv ='$date1 [[w:sv:Efter Kristus|e.Kr.]]', uk ='$date1 н. е.', ur ='$date1 ء', vi ='$date1 [[w:vi:Công Nguyên|CN]]', ['zh-hans'] ='[[w:zh:基督纪年|公元]]$date1', ['zh-hant'] ='[[w:zh:基督纪年|公元]]$date1', default='<span style="color:red">$date1 [[w:en:Anno Domini|AD]]</span>', }, ['ah'] = { nDates = 1, ['be-tarask']='$date1 [[w:be-tarask:Ісламскі каляндар|хіджры]]', bn ='$date1 [[w:bn:ইসলামি বর্ষপঞ্জি|হিজরী]]', ckb ='$date1 [[w:ckb:ساڵی کۆچی|سک]]', cs ='$date1 [[w:cs:Anno Hegirae|AH]]', de ='$date1 [[w:de:Anno Hegirae|AH]]', en ='$date1 [[w:en:Hijri year|AH]]', ['en-gb'] ='$date1 [[w:en:Hijri year|AH]]', ['en-ca'] ='$date1 [[w:en:Hijri year|AH]]', eo ='$date1 post la [[w:eo:Heĝiro|Heĝiro]]', fa ='$date1 ه.ق.', fr ='$date1 [[w:fr:Calendrier musulman|A.H.]]', he ="$date1 [[w:he:הלוח המוסלמי|להג'רה]]", hr ='$date1 god. hidžre', ja ='[[w:ja:ヒジュラ暦|ヒジュラ暦]]$date1', ko ='히즈라력 $date1', ml ='$date1 [[w:ml:ഇസ്‌ലാമിക കലണ്ടർ|ഹിജ്റ]]', nb ='$date1 [[w:no:Den muslimske kalenderen|A.H.]]', nn ='$date1 [[w:nn:Den muslimske kalenderen|A.H.]]', pl ='$date1 [[w:pl:Kalendarz muzułmański|A.H.]]', pt ='$date1 [[:pt:Ano da Hégira|AH]]', ru ='$date1 [[w:ru:Исламский календарь|хиджры]]', sk ='$date1 [[w:sk:A. H.|A. H.]]', sl ='$date1 [[w:sl:Islamski koledar|leto hidžre]]', sr ='$date1 [[w:sr:Исламски календар|хиџретска година]]', sv ='$date1 [[w:sv:Muslimska kalendern|A.H.]]', uk ='$date1 [[w:uk:Мусульманський календар|хіджри]]', ur ='$date1 ھ', vi ='$date1 [[w:vi:Lịch Hồi giáo|AH]]', ['zh-hans'] ='[[w:zh:伊斯兰历|伊斯兰历]]$date1', ['zh-hant'] ='[[w:zh:伊斯蘭曆|伊斯蘭曆]]$date1', default='<span style="color:red">$date1 [[w:en:Hijri year|AH]]</span>', }, ['bc'] = { nDates = 1, ar ='$date1 ق.م.', ['be-tarask']='$date1 [[w:be-tarask:да Нараджэньня Хрыста|да Н. Х.]]', bn ='খ্রিস্টপূর্ব $date1', ca ='$date1 [[w:ca:Abans de Crist|aC]]', ckb ='$date1 [[w:ckb:پێش زایین|پز]]', cs ='$date1 [[w:cs:Př. n. l.|př. n. l.]]', de ='$date1 [[w:de:v. Chr.|v. Chr.]]', el ='$date1 π.Χ.', en ='$date1 [[w:en:Ante Christum Natum|BC]]', ['en-gb'] ='$date1 [[w:en:Ante Christum Natum|BC]]', ['en-ca'] ='$date1 [[w:en:Ante Christum Natum|BC]]', eo ='$date1 aK', es ='$date1 [[w:es:Antes de Cristo|a. C.]]', fa ='$date1 پ.م.', fi ='$date1 eaa.', fr ='$date1 av. J.-C.', gl ='$date1 [[w:gl:Antes de Cristo|a.C.]]', he ='$date1 לפני הספירה', hr ='$date1 [[w:hr:Pr. Kr.|pr. Kr.]]', hsb='$date1 do Chr.', hu ='i. e. $date1', it ='$date1 [[w:it:Avanti Cristo|a.C.]]', ja ='[[w:ja:紀元前|紀元前]]$date1', ko ='기원전 $date1', mk ='$date1 п.н.е.', ml ='ക്രി.മു. $date1', nds='$date1 vör uns Tied', nb ='$date1 f.Kr.', nl ='$date1 v.Chr.', nn ='$date1 f.Kr.', no ='$date1 f.Kr.', pl ='$date1 [[w:pl:przed naszą erą|p.n.e.]]', pt ='$date1 [[w:en:Ante Christum Natum|a.C.]]', ro ='$date1 î.Hr.', ru ='$date1 до н. э.', sk ='$date1 [[w:sk:Pred Kristom|pred Kr.]]', sl ='$date1 pr. n. št.', sr ='$date1 [[w:sr:Ante Christum Natum|пре Христа]]', sv ='$date1 [[w:sv:Före Kristus|f.Kr.]]', uk ='$date1 до н. е.', ur ='$date1 ق م', vi ='$date1 [[w:vi:Trước Công Nguyên|TCN]]', ['zh-hans'] ='[[w:zh:基督纪年|公元前]]$date1', ['zh-hant'] ='[[w:zh:基督纪年|公元前]]$date1', default='<span style="color:red">$date1 [[w:en:Ante Christum Natum|BC]]</span>', }, ['bp'] = { nDates = 1, ar ='$date1 [[w:ar:قبل الحاضر|قبل الحاضر]]', be ='$date1 [[w:be-tarask:Да нашых дзён|Да нашых дзён]]', ['be-tarask']='$date1 [[w:be-tarask:Да нашых дзён|Да нашых дзён]]', bn ='বর্তমানের আগে $date1', ca ='$date1 [[w:ca:BP (unitat de temps)|BP]]', ckb ='$date1 [[w:ckb:پێش ئێستا|پێش ئێستا]]', cs ='$date1 [[w:cs:B. P.|B. P.]]', de ='$date1 [[w:de:Before Present|BP]]', el ='$date1 [[w:en:Before Present|BP]]', en ='$date1 [[w:en:Before Present|BP]]', ['en-gb'] ='$date1 [[w:en:Before Present|BP]]', ['en-ca'] ='$date1 [[w:en:Before Present|BP]]', eo='$date1 [[w:eo:Before Present|BP]]', es ='$date1 [[w:es:Before Present|BP]]', et ='$date1 [[w:et:Before Present|BP]]', fa ='$date1 [[w:fa:پیش از امروز|پیش از امروز]]', fi ='$date1 [[w:fi:BP (ajanlasku)|BP]]', fr ='$date1 [[w:fr:Avant le présent|avant le présent]]', hr ='$date1 [[w:hr:BP|prije današnjice]]', it ='$date1 [[w:it:Before Present|BP]]', ja ='$date1 [[w:ja:BP (年代測定)|BP]]', ko ='$date1 [[w:ja:BP (고고학)|BP]]', lv ='$date1 [[w:lv:Pirms mūsdienām|Pirms mūsdienām]]', mk ='$date1 [[w:mk:Пред сегашноста|п.с.]]', ml ='[[w:en:Before Present|ഇന്നത്തെ കാലത്തിനു മുമ്പ്]] $date1', nb ='$date1 [[w:no:Before Present|BP]]', nn ='$date1 [[w:nn:Before Present|BP]]', nl ='$date1 [[w:nl:Before Present|BP]]', no ='$date1 [[w:no:Before Present|BP]]', pl ='$date1 [[w:pl:Before Present|BP]]', pt ='$date1 [[w:pt:Antes do Presente|Antes do Presente]]', ru ='$date1 [[w:ru:До настоящего времени|до н. в.]]', sk ='$date1 [[w:sk:BP (čas)|BP]]', sl ='$date1 [[w:sl:pred sedanjostjo|p. s.]]', sr ='$date1 [[w:sr:Прије садашњости|Прије садашњости]]', sv ='$date1 [[w:sv:B.P.|B.P.]]', uk ='$date1 [[w:uk:Років тому|Років тому]]', ur ='$date1 قبل حاضر', vi ='$date1 [[w:en:Before Present|trước ngày nay]]', ['zh-hans'] ='[[w:zh:距今|距今]]$date1', ['zh-hant'] ='[[w:zh:距今|距今]]$date1', default='<span style="color:red">$date1 [[w:en:Before Present|BP]]</span>', }, } -- List of possible string inputs to "adj", "junction", "era", and "precision" fields -- Each term is matched to its synonym and the role: a - adjective, e - era -- p - precision, c - calendar and combos, r - certainty and j - conjunction p.Synonyms = { -- adjectives and prepositions ['quarter1']={'1quarter','a'}, ['1stquarter']={'1quarter','a'}, ['1st quarter']={'1quarter','a'}, ['first quarter']={'1quarter','a'}, ['1quarter']={'1quarter','a'}, ['quarter2']={'2quarter','a'}, ['2ndquarter']={'2quarter','a'}, ['2nd quarter']={'2quarter','a'}, ['second quarter']={'2quarter','a'}, ['2quarter']={'2quarter','a'}, ['quarter3']={'3quarter','a'}, ['3rdquarter']={'3quarter','a'}, ['3rd quarter']={'3quarter','a'}, ['third quarter']={'3quarter','a'}, ['3quarter']={'3quarter','a'}, ['quarter4']={'4quarter','a'}, ['4thquarter']={'4quarter','a'}, ['4th quarter']={'4quarter','a'}, ['fourth quarter']={'4quarter','a'}, ['4quarter']={'4quarter','a'}, ['spring']={'spring','a'}, ['summer']={'summer','a'}, ['fall']={'autumn','a'}, ['autumn']={'autumn','a'}, ['winter']={'winter','a'}, ['beginning']={'early','a'}, ['early']={'early','a'}, ['1half']={'firsthalf','a'}, ['1sthalf']={'firsthalf','a'}, ['1st half']={'firsthalf','a'}, ['firsthalf']={'firsthalf','a'}, ['first half']={'firsthalf','a'}, ['end']={'late','a'}, ['late']={'late','a'}, ['middle']={'mid','a'}, ['mid']={'mid','a'}, ['2half']={'secondhalf','a'}, ['2ndhalf']={'secondhalf','a'}, ['2nd half']={'secondhalf','a'}, ['secondhalf']={'secondhalf','a'}, ['second half']={'secondhalf','a'}, ['<']={'before','a'}, ['b']={'before','a'}, ['before']={'before','a'}, ['>']={'after','a'}, ['a']={'after','a'}, ['after']={'after','a'}, ['~']={'circa','a'}, ['c']={'circa','a'}, ['ca']={'circa','a'}, ['circa']={'circa','a'}, ['by']={'by','a'}, ['from']={'from','a'}, ['until']={'until','a'}, ['uncertain']={'uncertain','r'}, ['possibly']={'possibly','r'}, ['probably']={'probably','r'}, ['presumably']={'presumably','r'}, -- eras ['bc']={'bc','e'}, ['bce']={'bc','e'}, ['before present']={'bp','e'}, ['bp']={'bp','e'}, ['ce']={'ad','e'}, ['ad']={'ad','e'}, ['ah']={'ah','e'}, -- conjunctions ['&']={'and','j'}, ['and']={'and','j'}, ['or']={'or','j'}, ['-']={'from-until','j'}, ['–']={'from-until','j'}, ['from-until']={'from-until','j'}, ['between']={'between','j'}, ['circa2']={'circa2','a'}, -- precision ['day']={'day','p'}, ['month']={'month','p'}, ['year']={'year','p'}, ['s']={'decade','p'}, ['decade']={'decade','p'}, ['century']={'century','p'}, ['millennium']={'millennium','p'}, ['million']={'million','p'}, ['billion']={'billion','p'}, -- calendar ['julian']={'julian','c'}, ['islamic']={'islamic','c'}, ['hijri']={'islamic','c'}, -- "Turn of the ..." options are a combos which will be handled in similar way as calendars ['turn of the century']={'turn of the century','c'}, ['century turn']={'turn of the century','c'}, ['turn of the decade']={'turn of the decade','c'}, ['decade turn']={'turn of the decade','c'}, ['turn of the year']={'turn of the year','c'}, ['year turn']={'turn of the year','c'}, -- other dates which will be handled in similar way as calendars ['?']={'unknown','c'}, ['unknown']={'unknown','c'}, ['unknown year']={'year unknown','c'}, ['year unknown']={'year unknown','c'}, } return p frjqd9q2iw3lxgde4z7u2i234a88jr5 10654 10653 2026-08-25T23:38:27Z RAPTOR7762 18 1 revision imported from [[:commons:Module:I18n/complex_date]] 10653 Scribunto text/plain --[[ __ __ _ _ ___ _ ___ __ _ _ _ | \/ | ___ __| |_ _| | ___ _|_ _/ |( _ ) _ __ / /__ ___ _ __ ___ _ __ | | _____ __ __| | __ _| |_ ___ | |\/| |/ _ \ / _` | | | | |/ _ (_)| || |/ _ \| '_ \ / / __/ _ \| '_ ` _ \| '_ \| |/ _ \ \/ / / _` |/ _` | __/ _ \ | | | | (_) | (_| | |_| | | __/_ | || | (_) | | | |/ / (_| (_) | | | | | | |_) | | __/> < | (_| | (_| | || __/ |_| |_|\___/ \__,_|\__,_|_|\___(_)___|_|\___/|_| |_/_/ \___\___/|_| |_| |_| .__/|_|\___/_/\_\ \__,_|\__,_|\__\___| |_| This code was copied from Commons please request changes there. Maintainers: *Jarekt ]] -- ========================================================================== -- === External modules and functions (use Lazy loading) =================== -- ========================================================================== local function Ordinal(...) -- Name of the Module: -- * Module:Ordinal - on Commons and Wikidata -- * Module:Ordinal-cd - on English Wikipedia return require('Module:Ordinal')._Ordinal(...) end local function Roman(...) -- Name of the Module: -- * Module:Roman - on Commons and Wikidata -- * Module:Roman-cd - on English Wikipedia return require('Module:Roman')._Numeral(...) end local function linguistic_of(...) return require('Module:Linguistic').of(...) end local function linguistic_conj(...) return require('Module:Linguistic').conj(...) end -- ========================================================================== -- === Local Helper functions ============================================== -- ========================================================================== -- form of French "of" based on "precision", which is wikibase compatible date precision format: -- 6=millennium, 7=century, 8=decade, 9=year, 10=month, 11=day -- 1 2 3 4 5 mill cent deca year month day local frOf = {'du','du','du','du','du', 'du', 'du', 'de', 'de', 'de', 'du'} local function decYear(state,lang,case) --Declension of word "year" in several languages if state.precision == 9 then local yearCase = { fi={xxx='vuosien', gen='vuoden', ill='vuoteen', ptv='vuotta', ela='vuodesta', ine='vuonna'}, sl={insD='letoma', insP='leti', ins='letom', gen='leta', loc='letu'}, hsb={insP='lětami', ins='lětom', gen='lěta', loc='lěće'} } return yearCase[lang][case] .. ' ' else return '' end end local function decCentury(lang,case) --Declension of word "century" in several languages local centuryCase = { pl={nom='wiek', gen='wieku', ins='wiekiem', loc='wieku', default = 'wiek'}, hsb={nom='lětstotk', gen='lětstotka', ins='lětstotkom', loc='lětstotku', default = 'lětstotk'}, sl={nom='stoletje', gen='stoletja', dat='stoletju', acc='stoletje', ins='stoletju', loc='stoletju', default = 'stoletje'} } return centuryCase[lang][case] or centuryCase[lang]['default'] end local function decMillennium(lang,case) --Declension of word "century" in several languages local millenniumCase = { pl={nom='tysiąclecie', gen='tysiąclecia', ins='tysiącleciem', loc='tysiącleciu', default = 'tysiąclecie'}, hsb={nom='lěttysac', gen='lěttysaca', ins='lěttysacom', loc='lěttysacu', default = 'lěttysac'}, sl={nom='tisočletje', gen='tisočletja', dat='tisočletju', acc='tisočletje', ins='tisočletju', loc='tisočletjem', default = 'tisočletje'} } return millenniumCase[lang][case] or millenniumCase[lang]['default'] end local plDeclension = { -- Polish Declensions of some terms -- kto? co? (jest) kogo? czego?(brak) komu? czemu? kogo? co? (widzę) kim? czym? o kim? o czym? (mówię) century = {nom='wiek', gen='wieku', dat='wiekowi', acc='wiek', ins='wiekiem', loc='wieku'}, millenium = {nom='tysiąclecie', gen='tysiąclecia', dat='tysiącleciu', acc='tysiąclecie', ins='tysiącleciem', loc='tysiącleciu'}, winter = {nom='zima', gen='zimy', dat='zimie', acc='zimę', ins='zimą', loc='zimie'}, spring = {nom='wiosna', gen='wiosny', dat='wiośnie', acc='wiosnę', ins='wiosną', loc='wiośnie'}, summer = {nom='lato', gen='lata', dat='latu', acc='lato', ins='latem', loc='lecie'}, autumn = {nom='jesień', gen='jesieni', dat='jesieni', acc='jesień', ins='jesienią', loc='jesieni'}, years = {nom='lata', gen='lat', dat='latom', acc='lata', ins='latami', loc='latach'} } local slDeclension = { -- Slovene declensions of some terms -- kdo ali kaj? koga ali česa? komu ali čemu? koga ali kaj? (s) kom ali čim? (o) kom ali čem? century = {nom='stoletje', gen='stoletja', dat='stoletjem', acc='stoletje', ins='stoletjem', loc='stoletju'}, millenium = {nom='tisočletje', gen='tisočletja', dat='tisočletju', acc='tisočletje', ins='tisočletjem', loc='tisčletju'}, winter = {nom='zima', gen='zime', dat='zimi', acc='zimi', ins='zimo', loc='zimi'}, spring = {nom='pomlad', gen='pomladi', dat='pomladi', acc='pomlad', ins='pomladjo', loc='pomladi'}, summer = {nom='leto', gen='poletja', dat='poletju', acc='poletje', ins='poletjem', loc='poletju'}, autumn = {nom='jesen', gen='jeseni', dat='jeseni', acc='jesen', ins='jesenjo', loc='jeseni'}, years = {nom='leta', gen='let', dat='letom', acc='leta', ins='leti', loc='letih'} } -- ========================================================================== -- === Output data structure =============================================== -- ========================================================================== local p = {} --[[ Multiple formats are possible: 1) string with key words "$date1" and "$date2" which will be replaced later by the date strings 2) function which can be used to create output string * Function INPUTS: - date1 and date2 string with date strings. "$date1" and "$date2" can also be used which will be replaced latter - state is a table with full description of the phrase we are trying to construct. It includes state.precision1 (and 2) which is wikibase compatible date precision format: 6=millennium, 7=century, 8=decade, 9=year, 10=month, 11=day 3) table with following fields: * table[1] is either string or a function * table.case is a 2 element table with Grammatical cases used by given language to alter month name or other adjective related to date # 1 and 2 ]] p.Translations = { -- ========================================== -- === Two date phrases ===================== -- ========================================== ['from-until'] = { nDates = 2, ar='من $date1 إلى $date2', ['be-tarask']={'з $date1 да $date2', case={'gen','gen'}}, bn='$date1 থেকে $date2 পর্যন্ত', ca='$date1 fins $date2', ckb='لە $date1 تاوەکوو $date2', cs='$date1 až $date2', da='fra $date1 til $date2', de='$date1 bis $date2', el='από $date1 έως $date2', en='from $date1 until $date2', ['en-gb']='from $date1 until $date2', ['en-ca']='from $date1 until $date2', eo='de $date1 al $date2', es='de $date1 a $date2', et='$date1 kuni $date2', fa='از $date1 تا $date2', fi='$date1–$date2', -- välisenä aikana fr=function(date1, date2, state) -- could actually be better should be "d'octobre à mars 2013' not "de octore 2013 à mars 2013" if state.precision > 10 then -- precision > month return 'du $date1 au $date2' else -- "DE septebmbre" / "D'octobre" return linguistic_of(date1, 'fr') .. " à $date2" end end, ga='ó $date1 go $date2', gl='de $date1 a $date2', --Template:From until used 'desde $date1 ata $date2' he='מ- $date1 עד $date2', hr={'od $date1 do $date2', case={'gen','gen'}}, hsb={'wot $date1 do $date2', case={'gen','gen'}}, hu='$date1 – $date2', it='dal $date1 al $date2', ja='$date1から$date2まで', ko='$date1부터 $date2까지', mk='од $date1 до $date2', ml='$date1 മുതൽ $date2 വരെ', nb='fra $date1 til $date2', nds='$date1 bet $date2', nn='frå $date1 til $date2', nl='$date1 tot $date2', no='fra $date1 til $date2', pl={'od $date1 do $date2', case={'gen','gen'}}, ro='din $date1 până în $date2', pt='de $date1 a $date2', qu="$date1 p'unchawmanta $date2 p\'unchawkama", ru={'с $date1 по $date2', case={'gen','gen'}}, sk={'od $date1 do $date2', case={'gen','gen'}}, sl={'od $date1 do $date2', case={'gen','gen'}}, sr='од $date1 до $date2', sv='från $date1 till $date2', uk={'з $date1 до $date2', case={'gen','gen'}}, ur='از $date1 تا $date2', vi='từ $date1 đến $date2', ['zh-hans']='从$date1到$date2', ['zh-hant']='從$date1到$date2', default='<span style="color:red">$date1 - $date2</span>', }, ['between']={ nDates = 2, ar='بين $date1 و $date2', ['be-tarask']={'між $date1 і $date2', case={'ins','ins'}}, bn='$date1 এবং $date2-এর মাঝামাঝি', ca='entre $date1 i $date2', ckb='لەنێوان $date1 و $date2', cs={'mezi $date1 a $date2', case={'ins','ins'}}, da='mellem $date1 og $date2', de='zwischen $date1 und $date2', el='μεταξύ $date1 και $date2', en='between $date1 and $date2', ['en-gb']='between $date1 and $date2', ['en-ca']='between $date1 and $date2', eo='inter $date1 kaj $date2', es='entre $date1 y $date2', et='$date1 ja $date2 vahel', fa='بین $date1 و $date2', fi={function(date1, date2, state) return decYear(state,'fi','xxx') .. '$date1 ja $date2 välisenä aikana' end, case={'gen','gen'}}, fr = function(date1, date2, state) -- prepend ‘le’ if precision > month local prep1 = state.precision1 > 10 and 'le ' or '' local prep2 = state.precision2 > 10 and 'le ' or '' return 'entre ' .. prep1 .. '$date1 et ' .. prep2 .. '$date2' end, ga='idir $date1 agus $date2', gl='entre $date1 e $date2', he='בין $date1 ו- $date2', hr={'između $date1 i $date2', case={'gen','gen'}}, hsb={'mjez $date1 a $date2', case={'ins','ins'}}, hu='$date1 és $date2 között', hi='$date1 और $date2 के बीच', it='tra il $date1 e il $date2', ja='$date1と$date2の間', ko='$date1에서 $date2 사이', mk='помеѓу $date1 и $date2', ml='$date1, $date2 എന്നിവയ്ക്കിടയ്ക്ക്', nb='mellom $date1 og $date2', nds='twischen $date1 un $date2', nn='mellom $date1 og $date2', nl='tussen $date1 en $date2', no='mellom $date1 og $date2', pl={'między $date1 a $date2', case={'ins','ins'}}, ro='între $date1 și $date2', pt='entre $date1 e $date2', qu="$date1 p'unchawpa $date2 p'unchawpapas chawpin", ru={'между $date1 и $date2', case={'ins','ins'}}, sk={'medzi $date1 a $date2', case={'ins','ins'}}, sl={function(date1, date2, state) return 'med ' .. decYear(state,'sl','insP') .. '$date1 in $date2' end, case={'ins','ins'}}, sr='између $date1 и $date2', sv='mellan $date1 och $date2', uk={'між $date1 та $date2', case={'ins','ins'}}, ur='بین $date1 و $date2', vec='tra el $date1 e el $date2', vi='giữa $date1 và $date2', ['zh-hans']='在$date1到$date2之间', ['zh-hant']='在$date1到$date2之間', default='<span style="color:red">$date1 - $date2</span>', }, ['or'] = { nDates = 2, ar='$date1 أو $date2', ['be-tarask']='$date1 ці $date2', bn='$date1 অথবা $date2', ca='$date1 o $date2', ckb='$date1 یان $date2', cs='$date1 nebo $date2', da='$date1 eller $date2', de='$date1 oder $date2', el='$date1 ή $date2', en='$date1 or $date2', ['en-gb']='$date1 or $date2', ['en-ca']='$date1 or $date2', eo='$date1 aŭ $date2', es='$date1 o $date2', et='$date1 või $date2', fa='$date1 یا $date2', fi='$date1 tai $date2', fr='$date1 ou $date2', ga='$date1 nó $date2', gl='$date1 ou $date2', he='$date1 או $date2', hr='$date1 ili $date2', hsb='$date1 abo $date2', hu='$date1 vagy $date2', it='$date1 o $date2', ja='$date1または$date2', ko='$date1 또는 $date2까지', mk='$date1 или $date2', ml='$date1 അഥവാ $date2', nb='$date1 eller $date2', nn='$date1 eller $date2', nds='$date1 oder $date2', nl='$date1 of $date2', no='$date1 eller $date2', pl='$date1 lub $date2', pt='$date1 ou $date2', qu='$date1 icha $date2', ro='$date1 sau $date2', ru='$date1 или $date2', sk='$date1 alebo $date2', sl='$date1 ali $date2', sr='$date1 или $date2', sv='$date1 eller $date2', uk='$date1 або $date2', ur='$date1 یا $date2', th='$date1 หรือ $date2', vi='$date1 hoặc $date2', ['zh-hans']='$date1或$date2', ['zh-hant']='$date1或$date2', default=function(date1, date2, state) return linguistic_conj({date1, date2}, state.lang, 'or') end, }, ['and'] = { nDates = 2, ar='$date1 و $date2', ['be-tarask']='$date1 і $date2', bn='$date1 এবং $date2', ca='$date1 i $date2', ckb='$date1 و $date2', cs='$date1 a $date2', da='$date1 og $date2', de='$date1 und $date2', el='$date1 και $date2', en='$date1 and $date2', ['en-gb']='$date1 and $date2', ['en-ca']='$date1 and $date2', eo='$date1 kaj $date2', es='$date1 y $date2', et='$date1 ja $date2', fa='$date1 و $date2', fi='$date1 ja $date2', fr='$date1 et $date2', ga='$date1 agus $date2', gl='$date1 e $date2', he='$date1 ו- $date2', hu='$date1 és $date2', hsb='$date1 a $date2', it='$date1 e $date2', ja='$date1および$date2', ko='$date1 및 $date2', mk='$date1 и $date2', ml='$date1 ഒപ്പം $date2', nb='$date1 og $date2', nn='$date1 og $date2', nds='$date1 un $date2', nl='$date1 en $date2', no='$date1 og $date2', pl='$date1 i $date2', pt='$date1 e $date2', qu='$date1wan $date2pas', ro='$date1 și $date2', ru='$date1 и $date2', sk='$date1 a $date2', sl='$date1 in $date2', sr='$date1 и $date2', sv='$date1 och $date2', uk='$date1 та $date2', ur='$date1 و $date2', vi='$date1 và $date2', ['zh-hans']='$date1和$date2', ['zh-hant']='$date1和$date2', default=function(date1, date2, state) return linguistic_conj({date1, date2}, state.lang, 'and') end, }, -- ========================================== -- === Prepositions ========================= -- ========================================== ['by'] = { nDates = 1, ar='بحلول $date1', ['be-tarask']={'да $date1', case={'gen',''}}, bn='$date1 কর্তৃক', ca='vers $date1', ckb='نزیکی $date1', cs={'kolem $date1', case={'gen',''}}, da='mod $date1', de='spätestens $date1', el='έως $date1', en='by $date1', ['en-gb']='by $date1', ['en-ca']='by $date1', eo='ne post $date1', es='para $date1', et='hiljemalt $date1', fa='توسط $date1', fi={function(date1, state) return decYear(state,'fi','ill') .. '$date1 mennessä' end, case={'ill',''}}, fr='$date1 (au plus tard)', ga='faoi $date1', gl='cara a $date1', he='עד $date1', hr={'do $date1', case={'gen',''}}, hsb={'do $date1', case={'gen',''}}, it='entro il $date1', ja='$date1まで', ko='$date1까지', mk='кон $date1', ml='$date1-ൽ', nb='innen $date1', nn='innan $date1', nds='$date1 oder vördem al', nl='tegen $date1', no='innen $date1', pl={'przed $date1', case={'ins',''}}, pt='por $date1', qu="$date1 p'unchawkama", ro='de $date1', ru={'к $date1', case={'dat',''}}, sk={'okolo $date1', case={'gen',''}}, sl={function(date1, state) return 'najpozneje ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}}, sr='до $date1', sv='senast $date1', uk={'до $date1', case={'dat',''}}, ur='توسط $date1', vi='vào $date1', -- need to insert "đã" somewhere later in the sentence --> ['zh-hans']='$date1前后', ['zh-hant']='$date1前後', default='<span style="color:red">by $date1</span>', }, ['before'] = { nDates = 1, ar='قبل $date1', ['be-tarask']={'перад $date1', case={'ins',''}}, bn='$date1-এর আগে', bg='Преди $date1', ca='abans $date1', ckb='پێش $date1', cs={'před $date1', case={'ins',''}}, da='før $date1', de='vor $date1', el='πριν από $date1', en='before $date1', ['en-gb']='before $date1', ['en-ca']='before $date1', eo='antaŭ $date1', es='antes de $date1', et='enne $date1', fa='پیش از $date1', fi={function(date1, state) return 'ennen ' .. decYear(state,'fi','ptv') .. '$date1' end, case={'ptv',''}}, fr='avant $date1', ga='roimh $date1', gl='antes do $date1', he='לפני $date1', hr={'prije $date1', case={'gen',''}}, hsb={'do $date1', case={'gen',''}}, hu='$date1 előtt', it='prima del $date1', ja='$date1より前', ko='$date1 전', mk='пред $date1', ml='$date1-നു മുമ്പ്', nb='før $date1', nn='før $date1', nds='vör $date1', nl='voor $date1', no='før $date1', pl={'przed $date1', case={'ins',''}}, pt='antes de $date1', qu="$date1 p'unchaw ñawpan", ro='înainte de $date1', ru={'ранее $date1', case={'gen',''}}, sk={'pred $date1', case={'ins',''}}, sl={function(date1, state) return 'pred ' .. decYear(state,'sl','ins') .. ' $date1' end, case={'ins',''}}, sr='пре $date1', sv='före $date1', uk={'до $date1', case={'gen',''}}, ur='قبل $date1', vi='trước $date1', ['zh-hans']='在$date1之前', ['zh-hant']='在$date1之前', default='<span style="color:red">before $date1</span>', }, ['from'] = { nDates = 1, ar='من $date1', ['be-tarask']={'з $date1', case={'gen',''}}, bn='$date1 থেকে', ckb='لە $date1', cs={'od $date1', case={'gen',''}}, de='seit $date1', el='από $date1', en='from $date1', ['en-gb']='from $date1', ['en-ca']='from $date1', eo='ekde $date1', es='desde $date1', et='alates $date1', fa='از $date1', fi={function(date1, state) return decYear(state,'fi','ela') .. '$date1 alkaen' end, case={'ela',''}}, fr= function(date1, state) return 'à partir '.. frOf[state.precision] ..' $date1' end, ga='as $date1', gl='desde o $date1', he='מ- $date1', hr={'od $date1', case={'gen',''}}, hsb={'wot $date1', case={'gen',''}}, it='dal $date1', ja='$date1から', ko='$date1부터', nds='vonaf $date1', mk='од $date1', nb='fra $date1', nn='frå $date1', ml='$date1 മുതൽ', nl='vanaf $date1', no='fra $date1', pl={'od $date1', case={'gen',''}}, pt='desde $date1', qu="$date1 p'unchawmanta", ro='din $date1', ru={'С $date1', case={'gen',''}}, sk={'od $date1', case={'gen',''}}, sl={function(date1, state) return 'od ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}}, sr='од $date1', sv='från $date1', uk={'з $date1', case={'gen',''}}, ur='از $date1', vi='từ $date1', ['zh-hans']='自$date1', ['zh-hant']='自$date1', default='<span style="color:red">from $date1</span>', }, ['until'] = { nDates = 1, ar = 'حتى $date1', ['be-tarask']={'усутыч да $date1', case={'gen',''}}, bn='$date1 পর্যন্ত', ckb='تاوەکوو $date1', cs={'do $date1', case={'gen', ''}}, de='bis $date1', en='until $date1', ['en-gb']='until $date1', ['en-ca']='until $date1', eo='ĝis $date1', es='hasta $date1', fr=function(date1, state) if state.precision > 10 then -- precision > month return "jusqu'au $date1" else return "jusqu'à $date1" end end, ga='go dtí $date1', hr={'do $date1', case={'gen',''}}, hsb={'do $date1', case={'gen',''}}, it='al $date1', ko='$date1까지', nb='til $date1', nl='tot $date1', nn='til $date1', ml='$date1 വരെ', pl={'do $date1', case={'gen',''}}, pt='até $date1', ru={'не позже $date1', case={'gen',''}}, sk={'do $date1', case={'gen', ''}}, sl={'do $date1', case={'gen', ''}}, sr='до $date1', uk={'аж до $date1', case={'gen',''}}, ur='تک $date1', ['zh-hans']='直到$date1', ['zh-hant']='直到$date1', default='<span style="color:red">until $date1</span>', }, ['after'] = { nDates = 1, ar='بعد $date1', ['be-tarask']={'пасьля $date1', case={'gen',''}}, bn='$date1-এর পরে', ca='després de $date1', ckb='دوای $date1', cs={'po $date1', case={'loc',''}}, de='nach $date1', da='efter $date1', el='μετά από $date1', en='after $date1', ['en-gb']='after $date1', ['en-ca']='after $date1', eo='post $date1', es='después de $date1', et='pärast $date1', fa='پس از $date1', fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 jälkeen' end, case={'gen',''}}, fr='après $date1', ga='tar éis $date1', gl='despois do $date1', he='לאחר $date1', hr={'nakon $date1', case={'gen',''}}, hu='$date1 után', hsb={'po $date1', case={'loc',''}}, it='dopo il $date1', ja='$date1より後', ko='$date1 후', mk='по $date1', ml='$date1-നു ശേഷം', nb='etter $date1', nn='etter $date1', nds='na $date1', nl='na $date1', no='etter $date1', pl={'po $date1', case={'loc',''}}, pt='após $date1', qu="$date1 p'unchaw qhipan", ro='după $date1', ru={'после $date1', case={'gen',''}}, sk={'po $date1', case={'loc',''}}, sl={function(date1, state) return 'po ' .. decYear(state,'sl','loc') .. ' $date1' end, case={'loc',''}}, sr='после $date1', sv='efter $date1', uk={'після $date1', case={'gen',''}}, ur='بعد $date1', vi='sau $date1', ['zh-hans']='在$date1之后', ['zh-hant']='在$date1之後', default='<span style="color:red">after $date1</span>', }, -- ========================================== -- === Adjectives =========================== -- ========================================== ['early'] = { nDates = 1, ar='بداية $date1', ['be-tarask']={'пачатак $date1', case={'gen',''}}, bn='$date1-এর শুরুতে', ca='al principi de $date1', ckb='سەرەتای $date1', cs={'začátek $date1', case={'gen',''}}, da='tidlig $date1', de='Anfang $date1', el='αρχές του $date1', en='early $date1', ['en-gb']='early $date1', ['en-ca']='early $date1', eo='komence de $date1', es='a principios de $date1', et='$date1 algus', fa='اوایل $date1', fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 alku' end, case={'gen',''}}, fr='début $date1', ga='go luath i $date1', gl='a principios de $date1', he='תחילת $date1', hr={'početak $date1', case={'gen',''}}, hsb={'spočatk $date1', case={'gen',''}}, hu='$date1 elején', it='inizio del $date1', ja='$date1初頭', ko='$date1 초반', mk='почеток на $date1', ml='$date1 ആദ്യപാദം', nb='tidlig $date1', nn='tidleg $date1', nds='Anfang $date1', nl='begin $date1', no='tidlig $date1', pl={'początek $date1', case={'gen',''}}, pt='a princípios de $date1', qu="$date1 ñawpaq p'unchawkunapi", ro='începând cu $date1', ru={'начало $date1', case={'gen',''}}, sk={'začiatok $date1', case={'gen',''}}, sl=function(date1, state) if state.precision == 9 then -- precision > month return 'zgodnjega leta $date1' else -- "od septembra" return {'zgodnjega $date1', case={'gen',''}} end end, sr='почетак $date1', sv='början av $date1', uk={'початок $date1', case={'gen',''}}, ur='ابتدا $date1', vi='đầu năm $date1', ['zh-hans']='$date1早期', ['zh-hant']='$date1早期', default='<span style="color:red">early $date1</span>', }, ['mid'] = { nDates = 1, ar='منتصف $date1', ['be-tarask']={'сярэдзіна $date1', case={'gen',''}}, bn='$date1-এর মাঝামাঝি', ca='a mitjan $date1', ckb='ناوەڕاستی $date1', cs={'polovina $date1', case={'gen',''}}, da='midten af $date1', de='Mitte $date1', el='μέσα του $date1', en='mid $date1', ['en-gb']='mid $date1', ['en-ca']='mid $date1', eo='meze de $date1', es='a mediados de $date1', et='$date1 keskel', fa='اواسط $date1', fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 puoliväli' end, case={'gen',''}}, fr='mi $date1', ga='lár $date1', gl='a mediados de $date1', he='אמצע $date1', hr={'sredina $date1', case={'gen',''}}, hsb={'srjedź $date1', case={'gen',''}}, hu='$date1 közepén', it='metà del $date1', ja='$date1半ば', ko='$date1 중반', mk='средина на $date1', ml='$date1 മദ്ധ്യം', nb='midten av $date1', nn='midten av $date1', nds='Midd $date1', nl='midden $date1', no='midten av $date1', pl={'środek $date1', case={'gen',''}}, pt='meados de $date1', qu="$date1 chawpin p'unchawkunapi", ro='mijlocul lui $date1', ru={'середина $date1', case={'gen',''}}, sk={'polovica $date1', case={'gen',''}}, sl={function(date1, state) return 'sredina ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}}, sr='средина $date1', sv='mitten av $date1', uk={'середина $date1', case={'gen',''}}, ur='وسط $date1', vi='giữa năm $date1', ['zh-hans']='$date1中期', ['zh-hant']='$date1中期', default='<span style="color:red">mid $date1</span>', }, ['late'] = { nDates = 1, ar='نهاية $date1', bn='$date1-এর শেষে', ['be-tarask']={'канец $date1', case={'gen',''}}, ca='al final de $date1', ckb='کۆتاییی $date1', cs='konec $date1', da='sen $date1', de='Ende $date1', el='τέλη του $date1', en='late $date1', ['en-gb']='late $date1', ['en-ca']='late $date1', eo='fine de $date1', es='a fines de $date1', et='$date1 lõpp', fa='اواخر $date1', fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 loppu' end, case={'gen',''}}, fr='fin $date1', ga='go déanach i $date1', gl='a finais de $date1', he='סוף $date1', hr={'kraj $date1', case={'gen',''}}, hsb={'kónc $date1', case={'gen',''}}, hu='$date1 végén', it='fine del $date1', ja='$date1末', ko='$date1 후반', mk='крајот на $date1', ml='$date1 അന്ത്യപാദം', nb='sent $date1', no='seint $date1', nds='Enn $date1', nl='eind $date1', no='sent $date1', pl={'koniec $date1', case={'gen',''}}, pt='ao final de $date1', qu="$date1 qhipaq p'unchawkunapi", ro='sfârșitul lui $date1', ru={'конец $date1', case={'gen',''}}, sk={'koniec $date1', case={'gen',''}}, sl={function(date1, state) return 'pozno ' .. decYear(state,'sl','') .. ' $date1' end, case={'nom',''}}, sr='крај $date1', sv='slutet av $date1', uk={'кінець $date1', case={'gen',''}}, ur='اخیر $date1', vi='cuối năm $date1', ['zh-hans']='$date1晚期', ['zh-hant']='$date1晚期', default='<span style="color:red">late $date1</span>', }, ['circa'] = { nDates = 1, ar='قرابة $date1', ['be-tarask']={'каля $date1', case={'gen',''}}, bn='প্রায় $date1', ca='cap a $date1', ckb='بەنزیکی $date1', cs='cca $date1', da='ca. $date1', de='etwa $date1', el='περ. $date1', en='circa $date1', ['en-gb']='circa $date1', ['en-ca']='circa $date1', eo='ĉirkaŭ $date1', es='hacia $date1', -- suggestion use "hacia"/"hacia el" or leave the latin circa or ca. et='ca. $date1', fa='حوالی $date1', -- template:Circa used 'حدود $date1' fi={function(date1, state) return 'suunnilleen ' .. decYear(state,'fi','ine') .. '$date1' end, case={'ine',''}}, -- template:Circa used 'noin $date1' fr=function(date1, state) if state.precision >= 11 then -- precision >= day return 'vers le $date1' else return 'vers $date1' end end, ga='thart ar $date1', gl='entre $date1', -- template:Circa used 'cara a $date1' he='בסביבות $date1', hr={'približno $date1', case={'gen',''}}, hsb={'wokoło $date1', case={'gen',''}}, hu='$date1 körül', it='$date1 circa', ja='$date1頃', ko='$date1경', mk='~ $date1', -- template:Circa used 'o. $date1' ml= 'ഉദ്ദേശം $date1', nb='ca. $date1', nn='ca. $date1', nds='üm un bi $date1', nl='ca. $date1', no='ca. $date1', pl={'około $date1', case={'gen',''}}, pt='cerca de $date1', qu='$date1chá', ro='circa $date1', ru={'около $date1', case={'gen',''}}, sk='cca $date1', sl={function(date1, state) return 'ok. ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}}, sr='око $date1', sv='cirka $date1', uk={'близько $date1', case={'gen', ''}}, ur='قریباً $date1', vi='vào khoảng $date1', ['zh-hans']='约$date1', ['zh-hant']='約$date1', default='<span style="color:red">circa $date1</span>', }, ['uncertain'] = { nDates = 1, ['zh-hans']='$date1(?)', ['zh-hant']='$date1(?)', default='$date1 (?)', }, probably = { -- see Q56644435 nDates = 1, ar = 'يُحتمل في $date', ast = 'probablemente $date1', bn = 'সম্ভবত $date1', ca = 'probablement $date1', ckb = 'لەوانەیە $date1', cs = 'pravděpodobně $date1', de = 'wahrscheinlich $date1', el = 'πιθανόν $date1', en = 'probably $date1', ['en-gb']='probably $date1', ['en-ca']='probably $date1', eo = 'probable $date1', es = 'probable $date1', fa = 'احتمالاً $date1', fr = 'probablement $date1', he = 'כפי הנראה $date1', hr = 'vjerojatno $date1', hu = 'feltehetőleg $date1', it = 'probabile $date1', ko = '$date1 유력', mk = 'веројатно $date1', ml = 'ഒരുപക്ഷേ $date1', nl = 'waarschijnlijk $date1', pl = 'prawdopodobnie $date1', pt = 'provavelmente $date1', ru = 'вероятно $date1', sl = 'verjetno $date1', sr = 'вероватно $date1', sv = 'antagligen $date1', uk = 'ймовірно $date1', default='<span style="color:red">probably $date1</span>', }, possibly = { -- see Q30230067 nDates = 1, ar = 'يُمكن في $date1', ast = 'posiblemente $date1', bn = 'যথাসম্ভব $date1', ckb = 'لەوانەیە $date1', cs = 'možná $date1', de = 'möglicherweise $date1', en = 'possibly $date1', ['en-gb']='possibly $date1', ['en-ca']='possibly $date1', eo = 'eble $date1', el = 'πιθανόν $date1', fa = 'احتمالاً $date1', fr = 'peut-être $date1', hr = 'moguće $date1', hu = 'talán $date1', ko = '$date1 추측', mk = 'можеби $date1', ml = 'മിക്കവാറും $date1', nl = 'mogelijk $date1', pl = 'być może $date1', pt = 'possivelmente $date1', ro = 'poate $date1', ru = 'возможно $date1', sl = 'morda $date1', sr = 'можда $date1', sv = 'möjligen $date1', uk = 'можливо $date1', default='<span style="color:red">possibly $date1</span>', }, presumably = { -- see Q18122778 nDates = 1, ast = 'presumiblemente $date1', ar = 'يُحتمَل في $date1', ckb = 'دەشێت $date1', de = 'vermutlich $date1', en = 'presumably $date1', ['en-gb']='presumably $date1', ['en-ca']='presumably $date1', fa = 'به احتمال زیاد $date1', fr = 'présumé $date1', hr = 'pretpostavljeno $date1', it = 'presumibilmente $date1', ko = '$date1 추정', ml = 'ഊഹപ്രകാരം $date1', pl = 'przypuszczalnie $date1', pt = 'presumivelmente $date1', sl = 'domnevno $date1', sr = 'претпоставља се $date1', ru = 'предположительно $date1', uk = 'здогадно $date1', default='<span style="color:red">presumably $date1</span>', }, ['year unknown']= { nDates = 0, ar = 'سنة غير معلومة', ['be-tarask']='Год невядомы', bn='অজানা বছর', ca='Any desconegut', ckb='ساڵی نەزاندراو', cs='neznámý rok', de='Jahr unbekannt', el='άγνωστο έτος', en='year unknown', ['en-gb']='year unknown', ['en-ca']='year unknown', eo='jaro nesciata', es='Año desconocido', fa='سال نامعلوم', fi='tuntematon vuosi', fr='Année inconnue', ga='bliain anaithnid', he='שנה לא ידועה', hsb='lěto njeznate', hr='nepoznata godina', it='anno sconosciuto', ja='年代不明', ko='연도 미상', la='Sine anno', ml='വർഷം ലഭ്യമല്ല', mk='непозната година', nb='ukjent år', nn='ukjent år', nl='zonder jaar', no='ukjent år', pl='rok nieznany', pt='ano desconhecido', qu='Mana riqsisqa wata', ru='Год неизвестен', sk='neznámy rok', sl='neznano leto', sr='непозната година', sv='okänt år', uk='рік невідомий', ur='سال نامعلوم', vi='không rõ năm', ['zh-hans']='年份未知', ['zh-hant']='年份未知', default='<span style="color:red">year unknown</span>', }, -- ========================================== -- === Parts of a whole ===================== -- ========================================== ['firsthalf'] = { nDates = 1, ar='النصف الأول من $date1', ['be-tarask']={'першая палова $date1', case={'gen',''}}, bn='$date1-এর প্রথমার্ধ', ca='1a meitat de $date1', ckb='نیوەی یەکەمی $date1', cs={'1. polovina $date1', case={'gen',''}}, da='1. halvdel af $date1', de='erste Hälfte $date1', el='πρώτο μισό του $date1', en='first half of $date1', ['en-gb']='first half of $date1', ['en-ca']='first half of $date1', eo='unua duono de $date1', es='primera mitad de $date1', et='$date1 esimene pool', fa='نیمهٔ نخست $date1', fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 alkupuolisko' end, case={'gen',''}}, fr='1<sup>re</sup> moitié de $date1', ga='chéad leath de $date1', gl='primeira metade de $date1', he='במחצית הראשונה של $date1', hsb={'prěnja połojca $date1', case={'gen',''}}, hu='$date1 első felében', hr={'prva polovina $date1', case={'gen',''}}, it='prima metà del $date1', ja='$date1上半期', ko='$date1 상반기', mk='прва половина на $date1', ml='$date1 ആദ്യപകുതി', nb='første halvdel av $date1', nn='fyrste halvdelen av $date1', nds='1. Helft $date1', nl='eerste helft $date1', no='første halvdel av $date1', pl={'pierwsza połowa $date1', case={'gen',''}}, pt='primeira metade de $date1', qu='$date1 ñawpaq kuskanpi', ro='prima jumătate a lui $date1', ru={'первая половина $date1', case={'gen',''}}, sk={'1. polovica $date1', case={'gen',''}}, sl={function(date1, state) return 'prva polovica ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}}, sr='права половина $date1', sv='första hälften av $date1', uk={'перша половина $date1', case={'gen',''}}, ur='نصف اول $date1', vi='nửa đầu năm $date1', ['zh-hans']='$date1上半期', ['zh-hant']='$date1上半期', default='<span style="color:red">first half of $date1</span>', }, ['secondhalf'] = { nDates = 1, ar='النصف الثاني من $date1', ['be-tarask']={'другая палова $date1', case={'gen',''}}, bn='$date1-এর দ্বিতীয়ার্ধ', ca='2a meitat de $date1', ckb='نیوەی دووەمی $date1', cs={'2. polovina $date1', case={'gen',''}}, da='2. halvdel af $date1', de='zweite Hälfte $date1', el='δεύτερο μισό του $date1', en='second half of $date1', ['en-gb']='second half of $date1', ['en-ca']='second half of $date1', eo='dua duono de $date1', es='segunda mitad de $date1', et='$date1 teine pool', fa='نیمهٔ دوم $date1', fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 loppupuolisko' end, case={'gen',''}}, fr='2<sup>e</sup> moitié de $date1', ga='dara leath de $date1', gl='segunda metade de $date1', he='במחצית השנייה של $date1', hsb={'druha połojca $date1', case={'gen',''}}, hr={'druga polovina $date1', case={'gen',''}}, hu='$date1 második felében', it='seconda metà del $date1', ja='$date1下半期', ko='$date1 하반기', mk='втора половина на $date1', ml='$date1 രണ്ടാം പകുതി', nb='andre halvdel av $date1', nn='andre halvdelen av $date1', nds='2. Helft vun $date1', nl='tweede helft $date1', no='andre halvdel av $date1', pl={'druga połowa $date1', case={'gen',''}}, pt='segunda metade de $date1', qu='$date1 qhipaq kuskanpi', ro='a doua jumătate a lui $date1', ru={'вторая половина $date1', case={'gen',''}}, sk={'2. polovica $date1', case={'gen',''}}, sl={'druga polovica {{IfNum | $date0 | leta}} $date1', case={'gen',''}}, sr='друга половина $date1', sv='andra hälften av $date1', uk={'друга половина $date1', case={'gen',''}}, ur='نصف آخر $date1', vi='nửa cuối năm $date1', ['zh-hans']='$date1下半期', ['zh-hant']='$date1下半期', default='<span style="color:red">second half of $date1</span>', }, ['1quarter']= { nDates = 1, ar = ' الربع الأول من $date1', bn='$date1-এর প্রথম ত্রৈমাসিক', ['be-tarask']={'першая чвэрць $date1', case={'gen',''}}, ckb='چارەکی یەکەمی $date1', cs={'1. čtvrtina $date1', case={'gen',''}}, de='erstes Quartal $date1', en='first quarter of $date1', ['en-gb']='first quarter of $date1', ['en-ca']='first quarter of $date1', eo='unua kvarono de $date1', es='primer cuarto del $date1', fa='ربع نخست $date1', fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 ensimmäinen neljännes' end, case={'gen',''}}, fr= function(date1, state) return 'premier quart '.. frOf[state.precision] ..' $date1' end, ga='chéad ráithe de $date1', he='רבעון ראשון של $date1', hsb={'prěnja štwórćina $date1', case={'gen',''}}, hr={'prva četvrtina $date1', case={'gen',''}}, it='primo quarto del $date1', ja='$date1第1四半期', ko='$date1 일사분기', ml='$date1 ഒന്നാം ത്രൈമാസം', nb='første kvartal av $date1', nl='eerste kwart $date1', nn='fyrste kvartalet av $date1', no='første kvartal av $date1', --pl={'pierwsza ćwiartka $date1', case={'gen',''}}, pl={function(date1, state) if state.precision == 10 then -- precision == month return 'pierwszy tydzień $date1' elseif state.precision == 7 then -- precision == century return 'pierwsze ćwierćwiecze $date1' else return 'pierwszy kwartał $date1' end end, case={'gen',''}}, pt='primeiro trimestre de $date1', qu='$date1 ñawpaq ñiqin tawa phatmanpi', ru={'первая четверть $date1', case={'gen',''}}, sk={'1. štvrtina $date1', case={'gen',''}}, sl={'prva četrtina {{IfNum | $date0 | leta}} $date1', case={'gen',''}}, sr='прва четвртина $date1', sv='första kvartalet av $date1', uk={'1-ша чверть $date1', case={'gen',''}}, ur='پہلی سہ ماہی $date1', vi='quý 1 năm $date1', ['zh-hans']='$date1第一季度', ['zh-hant']='$date1第一季度', default='<span style="color:red">first quarter of $date1</span>', }, ['2quarter']= { nDates = 1, ar = 'الربع الثاني من $date1', ['be-tarask']={'другая чвэрць $date1', case={'gen',''}}, bn='$date1-এর দ্বিতীয় ত্রৈমাসিক', ckb='چارەکی دووەمی $date1', cs={'2. čtvrtina $date1', case={'gen',''}}, de='zweites Quartal $date1', en='second quarter of $date1', ['en-gb']='second quarter of $date1', ['en-ca']='second quarter of $date1', eo='dua kvarono de $date1', es='segundo cuarto del $date1', fa='ربع دوم $date1', fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 toinen neljännes' end, case={'gen',''}}, fr= function(date1, state) return 'deuxième quart '.. frOf[state.precision] ..' $date1' end, ga='dara ráithe de $date1', he='רבעון שני של $date1', hsb={'druha štwórćina $date1', case={'gen',''}}, hr={'druga četvrtina $date1', case={'gen',''}}, it='secondo quarto del $date1', ja='$date1第2四半期', ko='$date1 이사분기', ml='$date1 രണ്ടാം ത്രൈമാസം', nb='andre kvartal av $date1', nl='tweede kwart $date1', nn='andre kvartalet av $date1', no='andre kvartal av $date1', --pl={'druga ćwiartka $date1', case={'gen',''}}, pl={function(date1, state) if state.precision == 10 then -- precision == month return 'drugi tydzień $date1' elseif state.precision == 7 then -- precision == century return 'druge ćwierćwiecze $date1' else return 'drugi kwartał $date1' end end, case={'gen',''}}, pt='segundo trimestre de $date1', qu='$date1 iskay ñiqin tawa phatmanpi', ru={'вторая четверть $date1', case={'gen',''}}, sk={'2. štvrtina $date1', case={'gen',''}}, sl={function(date1, state) return 'druga četrtina ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}}, sr='друга четвртина $date1', sv='andra kvartalet av $date1', uk={'2-га чверть $date1', case={'gen',''}}, ur='دوسری سہ ماہی $date1', vi='quý 2 năm $date1', ['zh-hans']='$date1第二季度', ['zh-hant']='$date1第二季度', default='<span style="color:red">second quarter of $date1</span>', }, ['3quarter']= { nDates = 1, ar = 'الربع الثالث من $date1', ['be-tarask']={'трэцяя чвэрць $date1', case={'gen',''}}, bn='$date1-এর তৃতীয় ত্রৈমাসিক', ckb='چارەکی سێیەمی $date1', cs={'3. čtvrtina $date1', case={'gen',''}}, de='drittes Quartal $date1', en='third quarter of $date1', ['en-gb']='third quarter of $date1', ['en-ca']='third quarter of $date1', eo='tria kvarono de $date1', es='tercer cuarto del $date1', fa='ربع سوم $date1', fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 kolmas neljännes' end, case={'gen',''}}, fr= function(date1, state) return 'troisième quart '.. frOf[state.precision] ..' $date1' end, ga='triú ráithe de $date1', he='רבעון שלישי של $date1', hsb={'třeća štwórćina $date1', case={'gen',''}}, hr={'treća četvrtina $date1', case={'gen',''}}, it='terzo quarto del $date1', ja='$date1第3四半期', ko='$date1 삼사분기', ml='$date1 മൂന്നാം ത്രൈമാസം', nb='tredje kvartal av $date1', nl='derde kwart $date1', nn='tredje kvartalet av $date1', no='tredje kvartal av $date1', --pl={'trzecia ćwiartka $date1', case={'gen',''}}, pl={function(date1, state) if state.precision == 10 then -- precision == month return 'trzeci tydzień $date1' elseif state.precision == 7 then -- precision == century return 'trzecie ćwierćwiecze $date1' else return 'trzeci kwartał $date1' end end, case={'gen',''}}, pt='terceiro trimestre de $date1', qu='$date1 kimsa ñiqin tawa phatmanpi', sk={'3. štvrtina $date1', case={'gen',''}}, sl={function(date1, state) return 'tretja četrtina ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}}, sr='трећа четвртина $date1', ru={'третья четверть $date1', case={'gen',''}}, sv='tredje kvartalet av $date1', uk={'3-тя чверть $date1', case={'gen',''}}, ur='تیسری سہ ماہی $date1', vi='quý 3 năm $date1', ['zh-hans']='$date1第三季度', ['zh-hant']='$date1第三季度', default='<span style="color:red">third quarter of $date1</span>', }, ['4quarter']= { nDates = 1, ar = 'الربع الرابع من $date1', ['be-tarask']={'чацьвёртая чвэрць $date1', case={'gen',''}}, bn='$date1-এর চতুর্থ ত্রৈমাসিক', ckb='چارەکی چوارەمی $date1', cs={'4. čtvrtina $date1', case={'gen',''}}, de='viertes Quartal $date1', en='fourth quarter of $date1', ['en-gb']='fourth quarter of $date1', ['en-ca']='fourth quarter of $date1', eo='kvara kvarono de $date1', es='último cuarto del $date1', fa='ربع چهارم $date1', fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 viimeinen neljännes' end, case={'gen',''}}, fr= function(date1, state) return 'quatrième quart '.. frOf[state.precision] ..' $date1' end, ga='ceathrú ráithe de $date1', he='רבעון רביעי של $date1', hsb={'poslednja štwórćina $date1', case={'gen',''}}, hr={'četvrta četvrtina $date1', case={'gen',''}}, it='ultimo quarto del $date1', ja='$date1第4四半期', ko='$date1 사사분기', ml='$date1 നാലാം ത്രൈമാസം', nb='fjerde kvartal av $date1', nl='vierde kwart $date1', nn='tredje kvartalet av $date1', no='fjerde kvartal av $date1', --pl={'czwarta ćwiartka $date1', case={'gen',''}}, pl={function(date1, state) if state.precision == 10 then -- precision == month return 'ostatni tydzień $date1' elseif state.precision == 7 then -- precision == century return 'ostatnie ćwierćwiecze $date1' else return 'ostatni kwartał $date1' end end, case={'gen',''}}, pt='quarto trimestre de $date1', qu='$date1 qhipaq ñiqin tawa phatmanpi', ru={'последняя четверть $date1', case={'gen',''}}, sk={'4. štvrtina $date1', case={'gen',''}}, sl={function(date1, state) return 'zadnja četrtina ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}}, sr='четврта четвртина $date1', sv='fjärde kvartalet av $date1', uk={'4-та чверть $date1', case={'gen',''}}, ur='چوتھی سہ ماہی $date1', vi='quý 4 năm $date1', ['zh-hans']='$date1第四季度', ['zh-hant']='$date1第四季度', default='<span style="color:red">forth quarter of $date1</span>', }, -- ========================================== -- === Seasons ============================== -- ========================================== ['spring'] = { nDates = 1, ar='ربيع $date1', ['be-tarask']='вясна $date1', bn='বসন্তকাল $date1', ca='primavera $date1', ckb='بەھاری $date1', cs={'jaro $date1', case={'gen', ''}}, da='Forår $date1', de='Frühling $date1', en='Spring $date1', ['en-gb']='Spring $date1', ['en-ca']='Spring $date1', eo='printempo $date1', es='primavera de $date1', et='$date1 kevad', fa='بهار $date1', fi='Kevät $date1', fr='printemps $date1', ga='earrach $date1', gl='primavera $date1', he='אביב $date1', hr='proljeće $date1', hsb='nalěćo $date1', hu='$date1 tavasza', it='primavera $date1', ja='{{#if:$date1|$date1年}}春', ko='$date1 봄', mk='пролет $date1', ml='$date1 വസന്തം', nb='våren $date1', nds='Vörjohr $date1', nn='våren $date1', nl='voorjaar $date1', no='våren $date1', pl='wiosna $date1', pt='primavera de $date1', ro='primăvara lui $date1', ru='весна $date1', sk={'jar $date1', case={'gen', ''}}, sl='pomlad $date1', sr='пролеће $date1', sv='våren $date1', uk='весна $date1', ur='بہار $date1', vi='mùa đông năm $date1', ['zh-hans']='{{#if:$date1|$date1年}}春季', ['zh-hant']='{{#if:$date1|$date1年}}春季', default='<span style="color:red">Spring $date1</span>', }, ['summer'] = { nDates = 1, ar='صيف $date1', ['be-tarask']='лета $date1', bn='গ্রীষ্মকাল $date1', ca='estiu $date1', ckb='ھاوینی $date1', cs={'léto $date1', case={'gen', ''}}, da='Sommer $date1', de='Sommer $date1', en='Summer $date1', ['en-gb']='Summer $date1', ['en-ca']='Summer $date1', eo='somero $date1', es='verano de $date1', et='$date1 suvi', fa='تابستان $date1', fi='Kesä $date1', fr='été $date1', ga='samhradh $date1', gl='verán $date1', he='קיץ $date1', hr='ljeto $date1', hsb='lěćo $date1', hu='$date1 nyara', it='estate $date1', ja='{{#if:$date1|$date1年}}夏', ko='$date1 여름', mk='лето $date1', ml='$date1 വേനൽ', nb='sommeren $date1', nds='Sommer $date1', nn='sumaren $date1', nl='zomer $date1', no='sommeren $date1', pl='lato $date1', pt='verão de $date1', ro='vara lui $date1', ru='лето $date1', sk={'leto $date1', case={'gen', ''}}, sl='poletje $date1', sr='лето $date1', sv='sommaren $date1', uk='літо $date1', ur='گرما $date1', vi='mùa hè năm $date1', ['zh-hans']='{{#if:$date1|$date1年}}夏季', ['zh-hant']='{{#if:$date1|$date1年}}夏季', default='<span style="color:red">Summer $date1</span>', }, ['autumn'] = { nDates = 1, ar='خريف $date1', ['be-tarask']='восень $date1', bn='শরত্কাল $date1', ca='tardor $date1', ckb='پاییزی $date1', cs={'podzim $date1', case={'gen', ''}}, da='Efterår $date1', de='Herbst $date1', en='Autumn $date1', ['en-gb']='Autumn $date1', ['en-ca']='Autumn $date1', eo='aŭtuno $date1', es='otoño de $date1', et='$date1 sügis', fa='پاییز $date1', fi='Syksy $date1', fr='automne $date1', ga='fómhar $date1', gl='outono $date1', he='סתיו $date1', hr='jesen $date1', hsb='nazyma $date1', hu='$date1 ősze', it='autunno $date1', ja='{{#if:$date1|$date1年}}秋', ko='$date1 가을', mk='есен $date1', ml='$date1 ശരത്കാലം', nb='høsten $date1', nds='Harvst $date1', nn='hausten $date1', nl='herfst $date1', no='høsten $date1', pl='jesień $date1', pt='outono de $date1', ro='toamna lui $date1', ru='осень $date1', sk={'jeseň $date1', case={'gen', ''}}, sl='jesen $date1', sr='јесен $date1', sv='hösten $date1', uk='осінь $date1', ur='خزاں $date1', vi='mùa thu năm $date1', ['zh-hans']='{{#if:$date1|$date1年}}秋季', ['zh-hant']='{{#if:$date1|$date1年}}秋季', default='<span style="color:red">Autumn $date1</span>', }, ['winter'] = { nDates = 1, ar='شتاء $date1', ['be-tarask']='зіма $date1', bn='শীতকাল $date1', ca='hivern $date1', ckb='زستانی $date1', cs={'zima $date1', case={'gen', ''}}, da='Vinter $date1', de='Winter $date1', en='Winter $date1', ['en-gb']='Winter $date1', ['en-ca']='Winter $date1', eo='vintro $date1', es='invierno de $date1', et='$date1 talv', fa='زمستان $date1', fi='Talvi $date1', fr='hiver $date1', ga='geimhreadh $date1', gl='inverno $date1', he='חורף $date1', hr='zima $date1', hsb='zyma $date1', hu='$date1 tele', it='inverno $date1', ja='{{#if:$date1|$date1年}}冬', ko='$date1 겨울', mk='зима $date1', ml='$date1 ശൈത്യകാലം', nds='Winter $date1', nl='winter $date1', nb='vinteren $date1', nn='vinteren $date1', no='vinteren $date1', pl='zima $date1', pt='inverno de $date1', ro='iarna lui $date1', ru='зима $date1', sk={'zima $date1', case={'gen', ''}}, sl='zima $date1', sr='зима $date1', sv='vintern $date1', uk='зима $date1', ur='سرما $date1', vi='mùa đông năm $date1', ['zh-hans']='{{#if:$date1|$date1年}}冬季', ['zh-hant']='{{#if:$date1|$date1年}}冬季', default='<span style="color:red">Winter $date1</span>', }, -- ========================================== -- === Decade/Century/Millennium ============ -- ========================================== ['decade'] = { nDates = 1, ar = 'عقد $date1', ['be-tarask']='$date1-я гады', bn='$date1-এর দশক', ca='dècada del $date1', ckb='دەیەی $date1', cs=function(date1, state) return ((date1 % 100 == 0) and 'první dekáda' or ((date1 % 100) .. '. léta')) .. ' ' .. (math.floor(date1 / 100) + 1) .. '. století' end, da="$date1'erne", de='$date1er Jahre', el='δεκαετία του $date1', en='$date1s', ['en-gb']='$date1s', ['en-ca']='$date1s', eo='$date1-aj jaroj', es='años $date1', et='$date1ndad', fa='دههٔ $date1', fi='$date1-luvulla', fr='années $date1', ga='$date1í', gl='anos $date1', he='שנות ה-$date1', hr='$date1-ih', hsb='$date1te lěta', hu = function(date1, state) local suffix = 's' if date1 % 100 == 10 or date1 % 100 == 40 or date1 % 100 == 50 or date1 % 100 == 70 or date1 % 100 == 90 then suffix = 'es' elseif date1 % 100 == 20 or date1 % 100 == 30 or date1 % 100 == 60 or date1 % 100 == 80 then suffix = 'as' elseif date1 % 100 == 0 then if date1 % 1000 ~= 0 then suffix = 'as' elseif date1 % 1e6 ~= 0 then suffix = 'es' end end return string.format('%d-%s évek', date1, suffix) end, it="{{#ifexpr: $date1 mod 100 = 0 | primo decennio del {{Roman|{{#expr: ($date1 / 100) + 1}}}} sec. | anni '{{#expr: $date1 mod 100 }} del {{Roman|{{#expr: floor($date1 / 100) + 1}}}} sec.}}", ja='$date1年代', ko='$date1년대', mk='$date1-ти', ml='ദശകം $date1-ൽ', nb='$date1-årene', nn='$date1-åra', nds='Johren $date1', nl='jaren $date1', no='$date1-årene', pl=function(date1, state) local str = 'lata '..(date1 % 100)..'. ' if (date1 % 100 == 0) then str = 'pierwsza dekada ' elseif (date1 % 100 == 10) then str = 'druga dekada ' end return str .. Roman(math.floor(date1 / 100) + 1) .. ' wieku' end, pt='década de $date1', qu='$date1 watakuna', ro='anii $date1', ru='$date1-е годы', sk=function(date1, state) return ((date1 % 100 == 0) and 'prvé desaťročie' or ((date1 % 100) .. '. roky')) .. ' ' .. (math.floor(date1 / 100) + 1) .. '. storočia' end, sl='$date1-ta leta', sr='$date1-их', sv='$date1-talet{{#switch:$date1|1300|1400|1500|1600|1700|1800|1900|2000|2100=&nbsp;(decennium)}}', uk='$date1-ті роки', ur='دہائی $date1', vi='thập niên $date1', ['zh-hans']='$date1年代', ['zh-hant']='$date1年代', default='<span style="color:red">$date1s</span>', }, ['century'] = { nDates = 1, ar='القرن $date1', ['be-tarask']=function(date1, state) return Ordinal(date1, 'be-tarask') .. ' стагодзьдзе' end, bn=function(date1, state) return Ordinal(date1, 'bn') .. ' শতাব্দী' end, ca='segle {{small-caps|{{lc:{{Roman year|$date1}}}}}}', ckb='سەدەی $date1', cs='$date1. století', da='$date1. århundrede', de='$date1. Jahrhundert', el='$date1ος αιώνας', en=function(date1, state) return Ordinal(date1, 'en') .. ' century' end, ['en-gb']=function(date1, state) return Ordinal(date1, 'en-gb') .. ' century' end, ['en-ca']=function(date1, state) return Ordinal(date1, 'en-ca') .. ' century' end, eo='$date1-a jarcento', es=function(date1, state) return 'siglo ' .. Roman(date1) end, et='$date1. sajand', fa='سدهٔ $date1', fi='{{#expr: ($date1 - 1) * 100}}-luvulla', fr=function(date1, state) return Ordinal(date1, 'fr', 'roman', 'm') .. ' siècle' end, ga='$date1ú haois', gl=function(date1, state) return 'século ' .. Roman(date1) end, he='המאה ה-$date1', hr='$date1. stoljeće', hsb='$date1. lětstotk', hu='$date1. évszázad', it=function(date1, state) return Roman(date1) .. ' sec.' end, ja='$date1世紀', ko='$date1세기', la='saeculum $date1', mk=function(date1, state) return Roman(date1) .. ' век' end, ml='$date1-ആം നൂറ്റാണ്ട്', nb=function(date1, state) return Ordinal(date1, 'nb') .. ' århundre' end, nn=function(date1, state) return 'det ' .. Ordinal(date1, 'no') .. ' hundreåret' end, nds='$date1. Johrhunnert', nl='$date1e eeuw', no=function(date1, state) return Ordinal(date1, 'no') .. ' århundre' end, pl=function(date1, state) return Roman(date1) .. ' ' .. decCentury('pl',state.case) end, pt=function(date1, state) return 'século ' .. Roman(date1) end, qu='$date1 ñiqin pachakwata', ro='secolul al $date1-lea', ru=function(date1, state) return Roman(date1) .. ' век' end, sk='$date1. storočie', sl=function(date1, state) return Ordinal(date1, 'sl') .. ' stoletje' end, sr='$date1. век', sv='{{#expr:$date1 - 1}}00-talet', tt=function(date1, state) return Roman(date1) .. ' гасыр' end, uk=function(date1, state) return Roman(date1) .. ' ст.' end, ur='صدی $date1', vi='thế kỷ $date1', ['zh-hans']='$date1世纪', ['zh-hant']='$date1世紀', default='<span style="color:red">$date1 century</span>', }, ['millennium'] = { nDates = 1, ar = 'الألفية $date1', ['be-tarask']=function(date1, state) return Ordinal(date1, 'be-tarask') .. ' тысячагодзьдзе' end, bn=function(date1, state) return Ordinal(date1, 'bn') .. ' সহস্রাব্দ' end, ckb=function(date1, state) return 'ھەزارەی ' .. Ordinal(date1, 'ckb') end, cs='$date1. tisíciletí', de='$date1. Jahrtausend', en=function(date1, state) return Ordinal(date1, 'en') .. ' millennium' end, ['en-gb']=function(date1, state) return Ordinal(date1, 'en-gb') .. ' millennium' end, ['en-ca']=function(date1, state) return Ordinal(date1, 'en-ca') .. ' millennium' end, eo='$date1-a jarmilo', es=function(date1, state) return Roman(date1) .. ' milenio' end, fa=function(date1, state) return 'هزارهٔ ' .. Ordinal(date1, 'fa') end, fr=function(date1, state) return Ordinal(date1, 'fr', 'roman', 'm') .. ' millénaire' end, ga='$date1ú mílaoise', hr='$date1. tisućljeće', hsb='$date1. lěttysac', it=function(date1, state) return Roman(date1) .. ' millennio' end, ja='$date1千年紀', ko='제$date1천년기', la='millennium $date1', ml='$date1-മത്തെ സഹസ്രാബ്ദം', nb=function(date1, state) return Ordinal(date1, 'nb') .. ' årtusen' end, nn=function(date1, state) return Ordinal(date1, 'no') .. ' tusenåret' end, nl='$date1e millennium', no=function(date1, state) return Ordinal(date1, 'no') .. ' årtusen' end, pl=function(date1, state) return Roman(date1) .. ' ' .. decMillennium('pl',state.case) end, pt=function(date1, state) return Roman(date1) .. ' milénio' end, qu='$date1 ñiqin waranqawata', ru=function(date1, state) return Roman(date1) .. ' тысячелетие' end, sk='$date1. tisícročie', sl=function(date1, state) return Ordinal(date1, 'sl') .. ' tisočletje' end, sv=function(date1, state) return Ordinal(date1, 'sv') .. ' årtusendet' end, uk=function(date1, state) return Roman(date1) .. ' тис.' end, ur=function(date1, state) return 'ہزارہ ' .. Ordinal(date1, 'ur') end, vi='thiên niên kỷ $date1', ['zh-hans']=function(date1, state) return Ordinal(date1, 'zh-hans') .. '千年' end, ['zh-hant']=function(date1, state) return Ordinal(date1, 'zh-hant') .. '千年' end, --default='{{Please translate|$date1 millennium|Module:I18n/complex date}}', default='<span style="color:red">$date1 millennium</span>', }, ['million'] = { ckb = '$date1 میلیۆن ساڵ', de = '$date1 Millionen Jahre', en = '$date1 million years', ['en-gb'] = '$date1 million years', ['en-ca'] = '$date1 million years', eo = '$date1 milionoj da jaroj', es = '$date1 millones de años', fa = '$date1 میلیون سال', fr = '$date1 millions d’années', it = '$date1 milioni di anni', ko = '$date1백만 년', ml = function(date1, state) if date1 >= 10 then return (date1 / 10) .. ' കോടി വർഷങ്ങൾ' -- 100 lakh = 1 crore else return (date1 * 10) .. ' ലക്ഷം വർഷങ്ങൾ' end end, nb = '$date1 millioner år', nl = '$date1 miljoen jaar', nn = '$date1 millionar år', pl = '$date1 milionów lat', pt = '$date1 milhões de anos', ru = '$date1 миллиона лет', sl = '$date1 milijonov let', sr = '$date1 милион година', uk = '$date1 мільйони років', ur = '$date1 ملین سال', ['zh-hans'] = '$date1百万年', ['zh-hant'] = '$date1百萬年', default='<span style="color:red">$date1 million years</span>', nDates = 1, }, ['billion'] = { ckb = '$date1 بیلیۆن ساڵ', de = '$date1 Milliarden Jahre', en = '$date1 billion years', ['en-gb'] = '$date1 billion years', ['en-ca'] = '$date1 billion years', es = '$date1 mil millones de años', fa = '$date1 میلیارد سال', fr = '$date1 milliard d’années', it = '$date1 miliardi di anni', ko = '$date1십억 년', ml = function(date1, state) return (date1 * 10) .. ' കോടി വർഷങ്ങൾ' end, nb = '$date1 milliarder år', nl = '$date1 miljard jaar', nn = '$date1 milliardar år', pl = '$date1 miliardów lat', pt = '$date1 mil milhões de anos', ru = '$date1 миллиардов лет', sl = '$date1 milijard let', sr = '$date1 милијарду година', uk = '$date1 мільярдів років', ur = '$date1 بلین سال', ['zh-hans'] = '$date1十亿年', ['zh-hant'] = '$date1十億年', default='<span style="color:red$date1 billion years</span>', nDates = 1, }, -- ========================================== -- === Complex phrases ====================== -- ========================================== -- Phrases which for some languages can be build out of simpler phrases -- Their "default" state, used when no translation in the requested language was found, returns a "state" like -- table which is used to call the function again and built the phrase out of simple phrases -- $date1 - original date - 1 -- $date2 - original date -- if era is BC than $date1 and $date2 are swapped ['turn of the century'] = { nDates = 2, ['be-tarask']=function(date1, date2, state) return 'канец ' .. Roman(date1) ..' — пачатак ' .. Roman(date2) ..' стагодзьдзя' end, bn=function(date1, date2, state) return '$date1/' .. Ordinal(date2, 'bn') .. ' শতাব্দীর পালাবদলে' end, ckb=function(date1, date2, state) return 'سەردەمی $date1/' .. Ordinal(date2, 'ckb') .. ' سەدە' end, cs='přelom $date1. a $date2. století', de=function(date1, date2, state) return 'Jahrhundertwende $date1/' .. Ordinal(date2, 'de') end, en=function(date1, date2, state) return 'turn of the $date1/' .. Ordinal(date2, 'en') .. ' century' end, ['en-gb']=function(date1, date2, state) return 'turn of the $date1/' .. Ordinal(date2, 'en-gb') .. ' century' end, ['en-ca']=function(date1, date2, state) return 'turn of the $date1/' .. Ordinal(date2, 'en-ca') .. ' century' end, eo='ŝanĝo de la $date1-a al la $date2-a jarcentoj', es=function(date1, date2, state) return 'hacia finales del siglo ' .. Roman(date1) .. ' y principios del siglo ' .. Roman(date2) .. '' end, fi='{{#expr: $date1 * 100-100}}-luvun loppu ja {{#expr: $date2 * 100-100}}-luvun alku', fr=function(date1, date2, state) return 'fin du ' .. Ordinal(date1, 'fr', 'roman', 'm') .. ' siècle / début du ' .. Ordinal(date2, 'fr', 'roman', 'm') end, ga=function(date1, date2, state) return 'cas an $date1ú/' .. Ordinal(date2, 'en') .. ' haois' end, hr='kraj $date1. i početak $date2. stoljeća', hsb=function(date1, date2, state) return 'přechod ' .. Roman(date1) ..' do ' .. Roman(date2) ..' lětstotka' end, it=function(date1, date2, state) return 'fine del ' .. Roman(date1) .. ' sec. e inizio del ' .. Roman(date2) .. ' sec.' end, ja='$date1世紀から$date2世紀への変わり目', ko=function(date1, date2, state) return '$date1~$date2세기 전환기' end, ml='$date1 നൂറ്റാണ്ട് അവസാനവും $date2 നൂറ്റാണ്ട് ആദ്യവും', nb=function(date1, date2, state) return 'slutten av det ' .. Ordinal(date1, 'nb') .. ' århundre/begynnelsen av det ' .. Ordinal(date2, 'nb') .. ' århundre' end, nl=function(date1, date2, state) return 'eind $date1e/begin $date2e eeuw' end, nn=function(date1, date2, state) return 'slutten av det ' .. Ordinal(date1, 'nn') .. ' hundreåret/byrjinga av det ' .. Ordinal(date2, 'nn') .. ' hundreåret' end, pl=function(date1, date2, state) return 'przełom ' .. Roman(date1) ..' i ' .. Roman(date2) ..' wieku' end, pt=function(date1, date2, state) return 'final do século ' .. Roman(date1) .. ' e início do século ' .. Roman(date2) .. '' end, qu="$date1 ñiqin waranqawatamanta $date2 ñiqin waranqawataman t'ikrasqanpi", ru=function(date1, date2, state) return 'конец ' .. Roman(date1) ..' — начало ' .. Roman(date2) ..' века' end, sk='prelom $date1. a $date2. storočia', sl=function(date1, date2, state) return 'pozno ' .. Ordinal(date1, 'sl') .. '. in zgodnje ' .. Ordinal(date2, 'sl') .. '. stoletje' end, sr='крај $date1. и почетак $date2. века', sv='sekelskiftet år $date200', uk=function(date1, date2, state) return 'кін. ' .. Roman(date1) ..' ст. — поч. ' .. Roman(date2) ..' ст.' end, vi='bước sang thế kỷ $date2', ['zh-hans']=function(date1, date2, state) return '$date1世纪末' .. Ordinal(date2, 'zh-hans') .. '世纪初' end, ['zh-hant']=function(date1, date2, state) return '$date1世紀末' .. Ordinal(date2, 'zh-hant') .. '世紀初' end, default=function(date1, date2, state) return {conj='and', adj1 = 'late', unit1='century', era1=state.era1, adj2 = 'early', unit2='century', era2=state.era2} end, }, -- $date1 - original date - 10 -- $date2 - original date -- if era is BC than $date1 and $date2 are swapped ['turn of the decade']={ nDates = 2, ['be-tarask']='канец $date1-х — пачатак $date2-х гг.', bn='$date1-এর দশকের শেষে এবং $date2-এর দশকের শুরুতে', ckb='کۆتایییەکانی $date1 و سەرەتاکانی $date2', cs=function(date1, date2, state) local decade1 = math.floor((date1 % 100) / 10) local decade2 = math.floor((date2 % 100) / 10) local century1 = math.floor( date1 / 100) + 1 local century2 = math.floor( date2 / 100) + 1 if decade1 == 0 and date1 < date2 then return "přelom 1. a 2. dekády " .. century1 .. ". století" elseif decade2 == 0 and date2 < date1 then return "přelom 9. a 10. dekády " .. century1 .. ". století" elseif (decade1 == 9 and date1 < date2) or (decade2 == 9 and date2 < date1) then return "přelom " .. century1 .. ". a " .. century2 .. ". století" else return "přelom " .. decade1 .. "0. a " .. decade2 .. "0. let " .. century1 .. ". století" end end, de='späte $date1er und frühe $date2er', en='late $date1s and early $date2s', ['en-gb']='late $date1s and early $date2s', ['en-ca']='late $date1s and early $date2s', eo='ŝanĝo de la $date1-a al la $date2-a jardekoj', es='finales de los años $date1 y principios de los años $date2', fa='اواخر دههٔ $date1 و اوایل دههٔ $date2', fi='$date1-luvun loppu ja $date2-luvun alku', fr='fin des années $date1 / début des années $date2', ga='deireadh sna $date1í / tús sna $date2í', hr='kraj $date1-ih i početak $date2-ih', hsb='pózdnje $date1te a zažne $date2te lěta', it='fine degli anni $date1 / inizio degli anni $date2', ja='$date1年代末から$date2年代初頭', ko='$date1년대 말 $date2년대 초', ml='$date1കൾ അവസാനവും $date2കൾ ആദ്യവും', nb = 'sent på $date1-tallet og tidlig på $date2-tallet', nl = 'eind $date1e/begin $date2e decennium', nn = 'seint på $date1-talet og tidleg på $date2-talet', pl=function(date1, date2, state) local decade1 = math.floor(date1 % 100) local decade2 = math.floor(date2 % 100) local century1 = Roman(math.floor( date1 / 100) + 1) local century2 = Roman(math.floor( date2 / 100) + 1) if decade1 == 0 and date1 < date2 then return "przełom pierwszej i drugiej dekady " .. century1 .. " wieku" elseif decade1 == 10 and date1 < date2 then return "przełom drugiej dekady i lat 20. " .. century1 .. " wieku" elseif decade1 == 90 and decade2 == 0 then return "przełom ostatniej dekady " .. century1 .. " i pierwszej dekady " .. century2 .. " wieku" else return "przełom lat " .. decade1 .. ". i " .. decade2 .. ". " .. century1 .. " wieku" end end, pt='final dos anos $date1 e início dos anos $date2', qu='qhipaq $date1 watakuna ñawpaq $date2 watakunapas', ru='конец $date1-х — начало $date2-х гг.', sv='decennieskiftet år $date2', sk=function(date1, date2, state) local decade1 = math.floor((date1 % 100) / 10) local decade2 = math.floor((date2 % 100) / 10) local century1 = math.floor( date1 / 100) + 1 local century2 = math.floor( date2 / 100) + 1 if decade1 == 0 and date1 < date2 then return "prelom 1. a 2. desaťročia " .. century1 .. ". storočia" elseif decade2 == 0 and date2 < date1 then return "prelom 9. a 10. desaťročia " .. century1 .. ". storočia" elseif (decade1 == 9 and date1 < date2) or (decade2 == 9 and date2 < date1) then return "prelom " .. century1 .. ". a " .. century2 .. ". storočia" else return "prelom " .. decade1 .. "0. a " .. decade2 .. "0. rokov " .. century1 .. ". storočia" end end, sl='pozna $date1-ta in zgodnja $date2-ta leta', hr='крај $date1-их и почетак $date2-их', uk='кінець $date1-х — початок $date2-х рр.', ur='اخیر دہائی $date1 و ابتدا دہائی $date2', vi='bước sang thập niên $date2', ['zh-hans']='$date1年代末$date2年代初', ['zh-hant']='$date1年代末$date2年代初', default=function(date1, date2, state) return {conj='and', adj1 = 'late', unit1='decade', era1=state.era1, adj2 = 'early', unit2='decade', era2=state.era2} end, }, -- $date1 - original date - 1 -- $date2 - original date -- if era is BC than $date1 and $date2 are swapped ['turn of the year']={ nDates = 2, ['be-tarask']='канец $date1 — пачатак $date2 г.', bn='$date1-এর শেষে এবং $date2-এর শুরুতে', ckb='کۆتاییی $date1 و سەرەتای $date2', cs='přelom roku $date1/$date2', de='Jahreswechsel $date1/$date2', en='late $date1 and early $date2', ['en-gb']='late $date1 and early $date2', ['en-ca']='late $date1 and early $date2', eo='jarŝanĝo $date1 / $date2', es='finales de $date1 y principios de $date2', fa='اواخر $date1 و اوایل $date2', fi='vuoden $date1 loppu ja vuoden $date2 alku', fr='fin $date1 / début $date2', ga='deireadh $date1 / tús $date2', hsb='kónc $date1/spočatk $date2', ja='$date1年末から$date2年初め', ko='$date1 말 $date2 초', ml='$date1 അവസാനവും $date2 ആദ്യവും', nb='årsskiftet $date1/$date2', nl='eind $date1 en begin $date2', nn='årsskiftet $date1/$date2', pl='koniec $date1 i początek $date2 roku', pt='final de $date1 e início de $date2', qu="$date1 qhipaq p'unchawkuna $date2 ñawpaq p'unchawkunapas", ru='конец $date1 — начало $date2 г.', sk='prelom rokov $date1/$date2', sl='konec leta $date1 in začetek leta $date2', sv='sena $date1 och tidiga $date2', uk='кінець $date1 — початок $date2 р.', ur='اخیر $date1 و ابتدا $date2', vi='bước sang năm $date2', ['zh-hans']='$date1年末$date2年初', ['zh-hant']='$date1年末$date2年初', default=function(date1, date2, state) return {conj='and', adj1 = 'late', unit1='year', era1=state.era1, adj2 = 'early', unit2='year', era2=state.era2} end, }, ['circa2'] = { nDates = 2, ar='بين $date1 – $date2', ['be-tarask']={'прыкладна з $date1 да прыкладна $date2', case={'gen','gen'}}, bn='প্রায় $date1 এবং প্রায় $date2-এর মাঝামাঝি', ca='cap a $date1 o $date2', ckb='بە نزیکی لەنێوان $date1 و $date2', cs='cca $date1 až $date2', da='ca. mellem $date1 og $date2', de='etwa $date1 bis $date2', el='περίπου μεταξύ $date1 και $date2', en='between circa $date1 and circa $date2', ['en-gb']='between circa $date1 and circa $date2', ['en-ca']='between circa $date1 and circa $date2', eo='proksimume de $date1 ĝis $date2', es='hacia $date1 o $date2', et='ca. $date1 ja $date2 vahel', fa='حدوداً بین $date1 و $date2', fi={function(date1, date2, state) return 'suunnilleen ' .. decYear(state,'fi','xxx') .. '$date1 ja $date2 välisenä aikana' end, case={'gen','gen'}}, fr='vers $date1-$date2', ga='idir $date1 go $date2', gl='entre $date1 e $date2', he='בסביבות ה- $date1 עד $date2', hr={'približno između $date1 i $date2', case={'gen','gen'}}, hsb={'wot něhdźe $date1 do něhdźe $date2', case={'gen','gen'}}, hu='$date1 és $date2 között', it='tra il $date1 e il $date2 circa', ja='$date1頃と$date2頃の間', ko='$date1경에서 $date2경 사이', mk='~ помеѓу $date1 и $date2', ml='ഉദ്ദേശം $date1-നും ഉദ്ദേശം $date2-നും ഇടയ്ക്ക്', nb='ca. mellom $date1 og $date2', nn='ca. mellom $date1 og $date2', nds='üm un bi $date1 bet $date2', nl='ca. $date1 tot $date2', no='ca. mellom $date1 og $date2', pl={'od około $date1 do około $date2', case={'gen','gen'}}, pt='cerca de $date1 a $date2', qu="$date1 p'unchawmantachá $date2 p'unchawkamachá", ro='circa $date1 – $date2', ru={'с около $date1 до, примерно, $date2', case={'gen','gen'}}, sk='cca $date1 až $date2', sl={function(date1, date2, state) return 'ok. ' .. decYear(state,'sl','gen') .. ' $date1 do $date2' end, case={'gen','gen'}}, sr='између ~ $date1 и ~ $date2', sv='cirka $date1 till $date2', uk={'з близько $date1 до, приблизно, $date2', case={'gen','gen'}}, ur='قریباً بین $date1 و $date2', vi='giữa vào khoảng $date1 và vào khoảng $date2', ['zh-hans']='约$date1~$date2间', ['zh-hant']='約$date1~$date2間', default=function(date1, date2, state) return {conj='between', adj1 = 'circa', unit1=state.unit1, era1=state.era1, adj2 = 'circa', unit2=state.unit2, era2=state.era2} end, }, -- ========================================== -- === Eras and calendars =================== -- ========================================== ['julian'] = { nDates = 2, ar='$date1 ($date2 حسب [[w:ar:التقويم اليولياني|تقويم يولياني]])', ['be-tarask']='$date1 ($date2 паводле [[w:be-tarask:Юліянскі каляндар|ст. ст.]]', bn='$date1 (জুলিয়ান ক্যালেন্ডারে $date2)', ca='$date1 ($date2 segons el [[w:ca:Calendari julià|calendari julià]])', ckb='$date1 ($date2 بەپێی [[w:ڕۆژژمێری جولیانی|ڕۆژژمێری جولیانی]])', cs='$date1 ($date2 podle [[w:cs:Juliánský kalendář|juliánského kalendáře]])', da='$date1 ($date2 [[w:da:Julianske kalender|Julianske kalender]])', de='$date1 ($date2 [[w:de:Julianischer Kalender|Julianischer Kalender]])', el='$date1 ($date2 με το [[w:el:Ιουλιανό ημερολόγιο|Ιουλιανό ημερολόγιο]])', en='$date1 ($date2 in [[w:Old Style and New Style dates|Julian calendar]])', ['en-gb']='$date1 ($date2 in [[w:Old Style and New Style dates|Julian calendar]])', ['en-ca']='$date1 ($date2 in [[w:Old Style and New Style dates|Julian calendar]])', fa='$date1 ($date2 در [[w:fa:Old Style and New Style dates|تقویم جولیان]])', eo='$date1 ($date2 laŭ la [[w:eo:Julia kalendaro|Julia Kalendaro]])', es='$date1 ($date2 según el [[w:es:Calendario juliano|calendario juliano]])', et='$date1 ($date2 [[w:et:Juliuse kalender|Juliuse kalendris]])', fi='$date1 ($date2 [[w:fi:juliaaninen kalenteri|juliaanisen kalenterin]] mukaan)', fr='$date1 ($date2 dans le [[w:fr:calendrier julien|calendrier julien]])', ga='$date1 ($date2 sa [[w:ga:Féilire Iúil|féilire Iúil]])', gl='$date1 ($date2 segundo o [[w:gl:Calendario xuliano|calendario xuliano]])', hu='$date1 ($date2 a [[w:hu:Julianus-naptár|Julián naptárban]])', hr='$date1 ($date2 prema [[w:hr:Julijanski kalendar|julijanskom kalendaru]])', he='$date1 ($date2 ב[[w:he:לוח היוליאני|הלוח היוליאני]])', hsb='$date1 ($date2 po julianiskej protyce)', it='$date1 ($date2 secondo il [[w:it:Calendario giuliano|calendario giuliano]])', ja='$date1([[w:ja:ユリウス暦|ユリウス暦]] $date2)', ko='$date1 ([[w:ko:율리우스력|율리우스력]] $date2)', mk='$date1 ($date2 по [[w:mk:Јулијански календар|Јулијанскиот календар]])', ml='$date1 ([[w:ml:ജൂലിയൻ കാലഗണനാരീതി|ജൂലിയൻ വർഷത്തിൽ]] $date2)', ml='$date1 ([[w:Old Style and New Style dates|ജൂലിയൻ കാലഗണനാരീതിയിൽ]] $date2)', nds='$date1 ($date2 na’n [[w:nds:Juliaansch Klenner|Juliaanschen Klenner]])', nb='$date1 ($date2 etter [[w:no:Juliansk kalender|den julianske kalenderen]])', nn='$date1 ($date2 etter [[w:nn:den julianske kalenderen|den julianske kalenderen]])', nl='$date1 ($date2 volgens de [[w:nl:Juliaanse kalender|Juliaanse kalender]])', no='$date1 ($date2 etter [[w:no:Juliansk kalender|den julianske kalender]])', pl='$date1 ($date2 wedle [[w:pl:Daty nowego i starego porządku|kalendarza juliańskiego]])', pt='$date1 ($date2 no [[w:pt:Mudança para o calendário gregoriano|calendário juliano]])', qu='$date1 ($date2 [[w:qu:Hulyanu kalindaryu|Hulyanu kalindaryupi]])', ro='$date1 ($date2 în [[w:ro:calendarul iulian|calendarul iulian]])', ru='$date1 ($date2 [[w:ru:Юлианский календарь|по ст. ст.]])', sk='$date1 ($date2 podľa [[w:sk:Juliánsky kalendár|juliánskeho kalendára]])', sl='$date1 ($date2 po [[w:sl:Julijanski koledar|julijanskem koledarju]])', sr='$date1 ($date2 према [[w:sr:Јулијански календар|јулијанском календару]])', sv='$date1 ($date2 [[w:sv:Gamla stilen|gamla stilen]])', uk='$date1 ($date2 [[w:uk:Юліанський календар|Юліанський календар]])', ur='$date1 ($date2 حسب [[w:ur:نئے اور پانے انداز کی تاریخ|جولین تقویم]])', vi='$date1 ($date2 trong [[w:vi:Lịch Julius|lịch Juliêng]])', ['zh-hans']='$date1([[w:Old Style and New Style dates|格里历]]$date2)', ['zh-hant']='$date1([[w:Old Style and New Style dates|格里曆]]$date2)', default='<span style="color:red">$date1 ($date2 in [[w:Old Style and New Style dates|Julian calendar]])</span>', }, ['ad'] = { nDates = 1, ['be-tarask']='$date1 [[w:be-tarask:ад Нараджэньня Хрыста|пасьля Н. Х.]]', bn ='$date1 খ্রিস্টাব্দ', ca ='$date1 dC', ckb ='$date1 [[w:ckb:ئانۆ دۆمینی|پاز]]', cs ='$date1 n. l.', de ='$date1 n. Chr.', el ='$date1 μ.Χ.', en ='$date1 [[w:en:Anno Domini|AD]]', ['en-gb'] ='$date1 [[w:en:Anno Domini|AD]]', ['en-ca'] ='$date1 [[w:en:Anno Domini|AD]]', eo ='$date1 pK', es ='$date1 [[w:es:Anno Dómini|d. C.]]', fa ='$date1 م.', fi ='$date1 jaa.', fr ='$date1 ap. J.-C.', gl ='$date1 d.C.', he ='$date1 לספירה', hu ='i. sz. $date1', hr ='$date1 pr. Kr.', hsb='$date1 po Chr.', it ='$date1 d.C.', ja ='西暦$date1', ko ='서기 $date1', mk ='$date1 н.е.', ml ='ക്രി.വ. $date1', nb ='$date1 e.Kr.', nl ='$date1 n.Chr.', nn ='$date1 e.Kr.', no ='$date1 e.Kr.', pl ='$date1 [[w:pl:naszej ery|n.e.]]', pt ='$date1 [[:pt:Anno Domini|AD]]', ro ='$date1 d.Hr.', ru ='$date1 н. э.', sk ='$date1 po Kr.', sl ='$date1 n. št.', sr ='$date1 [[w:sr:Anno Domini|AD]]', sv ='$date1 [[w:sv:Efter Kristus|e.Kr.]]', uk ='$date1 н. е.', ur ='$date1 ء', vi ='$date1 [[w:vi:Công Nguyên|CN]]', ['zh-hans'] ='[[w:zh:基督纪年|公元]]$date1', ['zh-hant'] ='[[w:zh:基督纪年|公元]]$date1', default='<span style="color:red">$date1 [[w:en:Anno Domini|AD]]</span>', }, ['ah'] = { nDates = 1, ['be-tarask']='$date1 [[w:be-tarask:Ісламскі каляндар|хіджры]]', bn ='$date1 [[w:bn:ইসলামি বর্ষপঞ্জি|হিজরী]]', ckb ='$date1 [[w:ckb:ساڵی کۆچی|سک]]', cs ='$date1 [[w:cs:Anno Hegirae|AH]]', de ='$date1 [[w:de:Anno Hegirae|AH]]', en ='$date1 [[w:en:Hijri year|AH]]', ['en-gb'] ='$date1 [[w:en:Hijri year|AH]]', ['en-ca'] ='$date1 [[w:en:Hijri year|AH]]', eo ='$date1 post la [[w:eo:Heĝiro|Heĝiro]]', fa ='$date1 ه.ق.', fr ='$date1 [[w:fr:Calendrier musulman|A.H.]]', he ="$date1 [[w:he:הלוח המוסלמי|להג'רה]]", hr ='$date1 god. hidžre', ja ='[[w:ja:ヒジュラ暦|ヒジュラ暦]]$date1', ko ='히즈라력 $date1', ml ='$date1 [[w:ml:ഇസ്‌ലാമിക കലണ്ടർ|ഹിജ്റ]]', nb ='$date1 [[w:no:Den muslimske kalenderen|A.H.]]', nn ='$date1 [[w:nn:Den muslimske kalenderen|A.H.]]', pl ='$date1 [[w:pl:Kalendarz muzułmański|A.H.]]', pt ='$date1 [[:pt:Ano da Hégira|AH]]', ru ='$date1 [[w:ru:Исламский календарь|хиджры]]', sk ='$date1 [[w:sk:A. H.|A. H.]]', sl ='$date1 [[w:sl:Islamski koledar|leto hidžre]]', sr ='$date1 [[w:sr:Исламски календар|хиџретска година]]', sv ='$date1 [[w:sv:Muslimska kalendern|A.H.]]', uk ='$date1 [[w:uk:Мусульманський календар|хіджри]]', ur ='$date1 ھ', vi ='$date1 [[w:vi:Lịch Hồi giáo|AH]]', ['zh-hans'] ='[[w:zh:伊斯兰历|伊斯兰历]]$date1', ['zh-hant'] ='[[w:zh:伊斯蘭曆|伊斯蘭曆]]$date1', default='<span style="color:red">$date1 [[w:en:Hijri year|AH]]</span>', }, ['bc'] = { nDates = 1, ar ='$date1 ق.م.', ['be-tarask']='$date1 [[w:be-tarask:да Нараджэньня Хрыста|да Н. Х.]]', bn ='খ্রিস্টপূর্ব $date1', ca ='$date1 [[w:ca:Abans de Crist|aC]]', ckb ='$date1 [[w:ckb:پێش زایین|پز]]', cs ='$date1 [[w:cs:Př. n. l.|př. n. l.]]', de ='$date1 [[w:de:v. Chr.|v. Chr.]]', el ='$date1 π.Χ.', en ='$date1 [[w:en:Ante Christum Natum|BC]]', ['en-gb'] ='$date1 [[w:en:Ante Christum Natum|BC]]', ['en-ca'] ='$date1 [[w:en:Ante Christum Natum|BC]]', eo ='$date1 aK', es ='$date1 [[w:es:Antes de Cristo|a. C.]]', fa ='$date1 پ.م.', fi ='$date1 eaa.', fr ='$date1 av. J.-C.', gl ='$date1 [[w:gl:Antes de Cristo|a.C.]]', he ='$date1 לפני הספירה', hr ='$date1 [[w:hr:Pr. Kr.|pr. Kr.]]', hsb='$date1 do Chr.', hu ='i. e. $date1', it ='$date1 [[w:it:Avanti Cristo|a.C.]]', ja ='[[w:ja:紀元前|紀元前]]$date1', ko ='기원전 $date1', mk ='$date1 п.н.е.', ml ='ക്രി.മു. $date1', nds='$date1 vör uns Tied', nb ='$date1 f.Kr.', nl ='$date1 v.Chr.', nn ='$date1 f.Kr.', no ='$date1 f.Kr.', pl ='$date1 [[w:pl:przed naszą erą|p.n.e.]]', pt ='$date1 [[w:en:Ante Christum Natum|a.C.]]', ro ='$date1 î.Hr.', ru ='$date1 до н. э.', sk ='$date1 [[w:sk:Pred Kristom|pred Kr.]]', sl ='$date1 pr. n. št.', sr ='$date1 [[w:sr:Ante Christum Natum|пре Христа]]', sv ='$date1 [[w:sv:Före Kristus|f.Kr.]]', uk ='$date1 до н. е.', ur ='$date1 ق م', vi ='$date1 [[w:vi:Trước Công Nguyên|TCN]]', ['zh-hans'] ='[[w:zh:基督纪年|公元前]]$date1', ['zh-hant'] ='[[w:zh:基督纪年|公元前]]$date1', default='<span style="color:red">$date1 [[w:en:Ante Christum Natum|BC]]</span>', }, ['bp'] = { nDates = 1, ar ='$date1 [[w:ar:قبل الحاضر|قبل الحاضر]]', be ='$date1 [[w:be-tarask:Да нашых дзён|Да нашых дзён]]', ['be-tarask']='$date1 [[w:be-tarask:Да нашых дзён|Да нашых дзён]]', bn ='বর্তমানের আগে $date1', ca ='$date1 [[w:ca:BP (unitat de temps)|BP]]', ckb ='$date1 [[w:ckb:پێش ئێستا|پێش ئێستا]]', cs ='$date1 [[w:cs:B. P.|B. P.]]', de ='$date1 [[w:de:Before Present|BP]]', el ='$date1 [[w:en:Before Present|BP]]', en ='$date1 [[w:en:Before Present|BP]]', ['en-gb'] ='$date1 [[w:en:Before Present|BP]]', ['en-ca'] ='$date1 [[w:en:Before Present|BP]]', eo='$date1 [[w:eo:Before Present|BP]]', es ='$date1 [[w:es:Before Present|BP]]', et ='$date1 [[w:et:Before Present|BP]]', fa ='$date1 [[w:fa:پیش از امروز|پیش از امروز]]', fi ='$date1 [[w:fi:BP (ajanlasku)|BP]]', fr ='$date1 [[w:fr:Avant le présent|avant le présent]]', hr ='$date1 [[w:hr:BP|prije današnjice]]', it ='$date1 [[w:it:Before Present|BP]]', ja ='$date1 [[w:ja:BP (年代測定)|BP]]', ko ='$date1 [[w:ja:BP (고고학)|BP]]', lv ='$date1 [[w:lv:Pirms mūsdienām|Pirms mūsdienām]]', mk ='$date1 [[w:mk:Пред сегашноста|п.с.]]', ml ='[[w:en:Before Present|ഇന്നത്തെ കാലത്തിനു മുമ്പ്]] $date1', nb ='$date1 [[w:no:Before Present|BP]]', nn ='$date1 [[w:nn:Before Present|BP]]', nl ='$date1 [[w:nl:Before Present|BP]]', no ='$date1 [[w:no:Before Present|BP]]', pl ='$date1 [[w:pl:Before Present|BP]]', pt ='$date1 [[w:pt:Antes do Presente|Antes do Presente]]', ru ='$date1 [[w:ru:До настоящего времени|до н. в.]]', sk ='$date1 [[w:sk:BP (čas)|BP]]', sl ='$date1 [[w:sl:pred sedanjostjo|p. s.]]', sr ='$date1 [[w:sr:Прије садашњости|Прије садашњости]]', sv ='$date1 [[w:sv:B.P.|B.P.]]', uk ='$date1 [[w:uk:Років тому|Років тому]]', ur ='$date1 قبل حاضر', vi ='$date1 [[w:en:Before Present|trước ngày nay]]', ['zh-hans'] ='[[w:zh:距今|距今]]$date1', ['zh-hant'] ='[[w:zh:距今|距今]]$date1', default='<span style="color:red">$date1 [[w:en:Before Present|BP]]</span>', }, } -- List of possible string inputs to "adj", "junction", "era", and "precision" fields -- Each term is matched to its synonym and the role: a - adjective, e - era -- p - precision, c - calendar and combos, r - certainty and j - conjunction p.Synonyms = { -- adjectives and prepositions ['quarter1']={'1quarter','a'}, ['1stquarter']={'1quarter','a'}, ['1st quarter']={'1quarter','a'}, ['first quarter']={'1quarter','a'}, ['1quarter']={'1quarter','a'}, ['quarter2']={'2quarter','a'}, ['2ndquarter']={'2quarter','a'}, ['2nd quarter']={'2quarter','a'}, ['second quarter']={'2quarter','a'}, ['2quarter']={'2quarter','a'}, ['quarter3']={'3quarter','a'}, ['3rdquarter']={'3quarter','a'}, ['3rd quarter']={'3quarter','a'}, ['third quarter']={'3quarter','a'}, ['3quarter']={'3quarter','a'}, ['quarter4']={'4quarter','a'}, ['4thquarter']={'4quarter','a'}, ['4th quarter']={'4quarter','a'}, ['fourth quarter']={'4quarter','a'}, ['4quarter']={'4quarter','a'}, ['spring']={'spring','a'}, ['summer']={'summer','a'}, ['fall']={'autumn','a'}, ['autumn']={'autumn','a'}, ['winter']={'winter','a'}, ['beginning']={'early','a'}, ['early']={'early','a'}, ['1half']={'firsthalf','a'}, ['1sthalf']={'firsthalf','a'}, ['1st half']={'firsthalf','a'}, ['firsthalf']={'firsthalf','a'}, ['first half']={'firsthalf','a'}, ['end']={'late','a'}, ['late']={'late','a'}, ['middle']={'mid','a'}, ['mid']={'mid','a'}, ['2half']={'secondhalf','a'}, ['2ndhalf']={'secondhalf','a'}, ['2nd half']={'secondhalf','a'}, ['secondhalf']={'secondhalf','a'}, ['second half']={'secondhalf','a'}, ['<']={'before','a'}, ['b']={'before','a'}, ['before']={'before','a'}, ['>']={'after','a'}, ['a']={'after','a'}, ['after']={'after','a'}, ['~']={'circa','a'}, ['c']={'circa','a'}, ['ca']={'circa','a'}, ['circa']={'circa','a'}, ['by']={'by','a'}, ['from']={'from','a'}, ['until']={'until','a'}, ['uncertain']={'uncertain','r'}, ['possibly']={'possibly','r'}, ['probably']={'probably','r'}, ['presumably']={'presumably','r'}, -- eras ['bc']={'bc','e'}, ['bce']={'bc','e'}, ['before present']={'bp','e'}, ['bp']={'bp','e'}, ['ce']={'ad','e'}, ['ad']={'ad','e'}, ['ah']={'ah','e'}, -- conjunctions ['&']={'and','j'}, ['and']={'and','j'}, ['or']={'or','j'}, ['-']={'from-until','j'}, ['–']={'from-until','j'}, ['from-until']={'from-until','j'}, ['between']={'between','j'}, ['circa2']={'circa2','a'}, -- precision ['day']={'day','p'}, ['month']={'month','p'}, ['year']={'year','p'}, ['s']={'decade','p'}, ['decade']={'decade','p'}, ['century']={'century','p'}, ['millennium']={'millennium','p'}, ['million']={'million','p'}, ['billion']={'billion','p'}, -- calendar ['julian']={'julian','c'}, ['islamic']={'islamic','c'}, ['hijri']={'islamic','c'}, -- "Turn of the ..." options are a combos which will be handled in similar way as calendars ['turn of the century']={'turn of the century','c'}, ['century turn']={'turn of the century','c'}, ['turn of the decade']={'turn of the decade','c'}, ['decade turn']={'turn of the decade','c'}, ['turn of the year']={'turn of the year','c'}, ['year turn']={'turn of the year','c'}, -- other dates which will be handled in similar way as calendars ['?']={'unknown','c'}, ['unknown']={'unknown','c'}, ['unknown year']={'year unknown','c'}, ['year unknown']={'year unknown','c'}, } return p frjqd9q2iw3lxgde4z7u2i234a88jr5 Module:TagQS 828 1320 10655 2024-07-15T14:05:29Z commons>Jarekt 0 10655 Scribunto text/plain --[[ _____ .___ .__ ___________ ________ _________ / \ ____ __| _/_ __| | ____ /\ \__ ___/____ ____ \_____ \ / _____/ / \ / \ / _ \ / __ | | \ | _/ __ \ \/ | | \__ \ / ___\ / / \ \ \_____ \ / Y ( <_> ) /_/ | | / |_\ ___/ /\ | | / __ \_/ /_/ > \_/. \/ \ \____|__ /\____/\____ |____/|____/\___ > \/ |____| (____ /\___ /\_____\ \_/_______ / \/ \/ \/ \//_____/ \__> \/ This module is intended for creating invisible tags which can be used to pass language independent data from some templates to infoboxes. Those tags are often used by templates like [Template:Artwork] to pass data to Wikidata Authors and maintainers: * User:Jarekt - original version ]] require('strict') -- used for debugging purposes as it detects cases of unintended global variables -- ================================================== -- === External functions =========================== -- ================================================== local p = {} function p.replaceUnlessQuoted(str, oldChar, newChar) -- String "str" has some sections that are in quotes and some that are not. -- Do replacements only in the text sections which are not in "" quotes. local quote = string.byte('"') local comma = string.byte(oldChar) local quoted = false for pos = 1, #str do if str:byte(pos) == quote then quoted = not quoted end if str:byte(pos) == comma and not quoted then str = str:sub(1,pos-1) .. newChar .. str:sub(pos+1, str:len()) end end return str end -- =========================================================================== -- === Version of the function to be called from other LUA codes -- =========================================================================== function p.createTag(field, property, value) -- create tags to insert using "field" "property" and "value" strings. -- "field" is an unique label to distinguish it from other tags. -- "property" and "value" are actually in a format similar to the one expected by QuickStatements return mw.ustring.format('<div style="display: none;">%s QS:%s,%s</div>', field, property or 'P', value) end function p.changeField(text, old, new) -- replace "field" part of the tag. It is needed as sometimes template adding those tags does not -- know the meaning, which is known the the outside template. For example in -- "{{Book|translator={{Creator|wikidata=Q12345}}" the Creator template will create initial -- tag with the wikidata item and {{Book}} template will add label and property for "transaltor". local patrn = '%<div style="display: none;"%>'.. old ..' QS:([^%<]+)%</div%>' local repl = '<div style="display: none;">'.. new ..' QS:%1</div>' return mw.ustring.gsub(text, patrn, repl) end function p.changeProperty(text, field, old, new) -- replace "property" part of the tag. It is needed as sometimes template adding those tags does not -- know the meaning, which is known the the outside template. For example in -- "{{Book|translator={{Creator|wikidata=Q12345}}" the Creator template will create initial -- tag with the wikidata item and {{Book}} template will add label and property for "transaltor". if not old then -- string "old" is optional if nil than any property will be replaced old = '[^%,]+' end local patrn = '%<div style="display: none;"%>' .. field .. ' QS:' .. old .. ',([^%<]+)%</div%>' local repl = '<div style="display: none;">' .. field .. ' QS:' .. new .. ',%1</div>' return mw.ustring.gsub(text, patrn, repl) end function p.append2value(text, field, text2append) -- append "text" to the "value" part of the tag local patrn = '%<div style="display: none;"%>'.. field ..' QS:([^%<]+)%</div%>' local repl = '<div style="display: none;">' .. field ..' QS:%1,' .. text2append .. '</div>' return mw.ustring.gsub(text, patrn, repl) end function p.readTag(text, field) -- read a single tag local pat = '%<div style="display: none;"%>'..field..' QS:([^%<]+)%</div%>' local qs = string.match(text, pat) -- find hidden tag with QS code local _, nMatch = string.gsub(text, pat, "") -- count matches if qs and nMatch==1 then -- allow only single matches return p.replaceUnlessQuoted(qs, ',', '|') end end function p.readTags(text, field) -- read multiple tags and return array of them local pat = '%<div style="display: none;"%>'..field..' QS:([^%<]+)%</div%>' local ret = {} for qs in mw.ustring.gmatch(text, pat) do table.insert(ret, p.replaceUnlessQuoted(qs, ',', '|') ) end return ret end function p.hasTag(text, field) -- does the "text" has a tag with field "field", or if field=nil does it have any tags? return text~= p.removeTag(text, field) end function p.removeTag(text, field) -- remove tags with field "field" from the string. Field =nil will replace all tags if not field then field = '[^ ]+' end local patrn = '%<div style="display: none;"%>' .. field .. ' QS:[^%<]+%</div%>' return mw.ustring.gsub(text, patrn, '') end -- =========================================================================== -- === Versions of the function to be called from template namespace -- =========================================================================== function p.CreateTag(frame) return p.createTag(frame.args[1], frame.args[2], frame.args[3]) end return p 3nh01znqigloqpeqb5s2wb498nxtf4d 10656 10655 2026-08-25T23:38:27Z RAPTOR7762 18 1 revision imported from [[:commons:Module:TagQS]] 10655 Scribunto text/plain --[[ _____ .___ .__ ___________ ________ _________ / \ ____ __| _/_ __| | ____ /\ \__ ___/____ ____ \_____ \ / _____/ / \ / \ / _ \ / __ | | \ | _/ __ \ \/ | | \__ \ / ___\ / / \ \ \_____ \ / Y ( <_> ) /_/ | | / |_\ ___/ /\ | | / __ \_/ /_/ > \_/. \/ \ \____|__ /\____/\____ |____/|____/\___ > \/ |____| (____ /\___ /\_____\ \_/_______ / \/ \/ \/ \//_____/ \__> \/ This module is intended for creating invisible tags which can be used to pass language independent data from some templates to infoboxes. Those tags are often used by templates like [Template:Artwork] to pass data to Wikidata Authors and maintainers: * User:Jarekt - original version ]] require('strict') -- used for debugging purposes as it detects cases of unintended global variables -- ================================================== -- === External functions =========================== -- ================================================== local p = {} function p.replaceUnlessQuoted(str, oldChar, newChar) -- String "str" has some sections that are in quotes and some that are not. -- Do replacements only in the text sections which are not in "" quotes. local quote = string.byte('"') local comma = string.byte(oldChar) local quoted = false for pos = 1, #str do if str:byte(pos) == quote then quoted = not quoted end if str:byte(pos) == comma and not quoted then str = str:sub(1,pos-1) .. newChar .. str:sub(pos+1, str:len()) end end return str end -- =========================================================================== -- === Version of the function to be called from other LUA codes -- =========================================================================== function p.createTag(field, property, value) -- create tags to insert using "field" "property" and "value" strings. -- "field" is an unique label to distinguish it from other tags. -- "property" and "value" are actually in a format similar to the one expected by QuickStatements return mw.ustring.format('<div style="display: none;">%s QS:%s,%s</div>', field, property or 'P', value) end function p.changeField(text, old, new) -- replace "field" part of the tag. It is needed as sometimes template adding those tags does not -- know the meaning, which is known the the outside template. For example in -- "{{Book|translator={{Creator|wikidata=Q12345}}" the Creator template will create initial -- tag with the wikidata item and {{Book}} template will add label and property for "transaltor". local patrn = '%<div style="display: none;"%>'.. old ..' QS:([^%<]+)%</div%>' local repl = '<div style="display: none;">'.. new ..' QS:%1</div>' return mw.ustring.gsub(text, patrn, repl) end function p.changeProperty(text, field, old, new) -- replace "property" part of the tag. It is needed as sometimes template adding those tags does not -- know the meaning, which is known the the outside template. For example in -- "{{Book|translator={{Creator|wikidata=Q12345}}" the Creator template will create initial -- tag with the wikidata item and {{Book}} template will add label and property for "transaltor". if not old then -- string "old" is optional if nil than any property will be replaced old = '[^%,]+' end local patrn = '%<div style="display: none;"%>' .. field .. ' QS:' .. old .. ',([^%<]+)%</div%>' local repl = '<div style="display: none;">' .. field .. ' QS:' .. new .. ',%1</div>' return mw.ustring.gsub(text, patrn, repl) end function p.append2value(text, field, text2append) -- append "text" to the "value" part of the tag local patrn = '%<div style="display: none;"%>'.. field ..' QS:([^%<]+)%</div%>' local repl = '<div style="display: none;">' .. field ..' QS:%1,' .. text2append .. '</div>' return mw.ustring.gsub(text, patrn, repl) end function p.readTag(text, field) -- read a single tag local pat = '%<div style="display: none;"%>'..field..' QS:([^%<]+)%</div%>' local qs = string.match(text, pat) -- find hidden tag with QS code local _, nMatch = string.gsub(text, pat, "") -- count matches if qs and nMatch==1 then -- allow only single matches return p.replaceUnlessQuoted(qs, ',', '|') end end function p.readTags(text, field) -- read multiple tags and return array of them local pat = '%<div style="display: none;"%>'..field..' QS:([^%<]+)%</div%>' local ret = {} for qs in mw.ustring.gmatch(text, pat) do table.insert(ret, p.replaceUnlessQuoted(qs, ',', '|') ) end return ret end function p.hasTag(text, field) -- does the "text" has a tag with field "field", or if field=nil does it have any tags? return text~= p.removeTag(text, field) end function p.removeTag(text, field) -- remove tags with field "field" from the string. Field =nil will replace all tags if not field then field = '[^ ]+' end local patrn = '%<div style="display: none;"%>' .. field .. ' QS:[^%<]+%</div%>' return mw.ustring.gsub(text, patrn, '') end -- =========================================================================== -- === Versions of the function to be called from template namespace -- =========================================================================== function p.CreateTag(frame) return p.createTag(frame.args[1], frame.args[2], frame.args[3]) end return p 3nh01znqigloqpeqb5s2wb498nxtf4d Module:Linguistic 828 1321 10657 2022-10-26T04:48:14Z commons>Jonesey95 0 require strict per TPER 10657 Scribunto text/plain --[[ __ __ _ _ _ _ _ _ _ | \/ | ___ __| |_ _| | ___ _| | (_)_ __ __ _ _ _(_)___| |_(_) ___ | |\/| |/ _ \ / _` | | | | |/ _ (_) | | | '_ \ / _` | | | | / __| __| |/ __| | | | | (_) | (_| | |_| | | __/_| |___| | | | | (_| | |_| | \__ \ |_| | (__ |_| |_|\___/ \__,_|\__,_|_|\___(_)_____|_|_| |_|\__, |\__,_|_|___/\__|_|\___| |___/ Simple internationalization functions that can be called by other modules. This Module was copied from Wikimedia Commons, so please request changes there. Maintainers: * Zolo - original version * Jarekt Dependencies: - Module uses c:data:I18n/Or.tab ]] require('strict') -- ================================================== -- === Internal functions =========================== -- ================================================== local function langSwitch(list,lang) local langList = mw.language.getFallbacksFor(lang) table.insert(langList,1,lang) for i,language in ipairs(langList) do if list[language] then return list[language] end end return nil end ------------------------------------------------------------------------------ -- read Commons Data:SOMENAME.tab dataset and look for message identified by a -- "key" in a language "lang". See editAtWikidata as an example. local function formatMessage(dataset, key, lang) for _, row in pairs(mw.ext.data.get(dataset, lang).data) do local id, msg = unpack(row) if id == key then return mw.message.newRawMessage(msg):plain() end end error('Invalid message key "' .. key .. '"') end ------------------------------------------------------------------------------ local function nowiki(str) -- remove all the links if not str then return str end str = mw.ustring.gsub(str, "<[^>]*>", "") -- remove all html tags from str str = mw.ustring.gsub(str, "'''", "") -- remove bold str = mw.ustring.gsub(str, "''", "") -- remove italics str = mw.ustring.gsub(str, "%[%[[Ff]ile:[^%]]+%]%]", "") -- remove file icons str = mw.ustring.gsub(str, "%[%[[^|]*|", "") -- remove piped links, like "[[:en:test|" str = mw.ustring.gsub(str, "%[[^ ]+ ", "") -- remove URL links, like "[https://www.wikidata.org/wiki/Q2706250 " str = mw.ustring.gsub(str, "%[%[", "" ) -- remove piped links, like "[[" str = mw.ustring.gsub(str, "%]", "" ) -- remove piped links, like "]" or "]]" return str end ------------------------------------------------------------------------------ -- Function allowing for consistent treatment of boolean-like wikitext input. -- It works similarly to Module:Yesno local function yesno(val, default) if type(val) == 'boolean' then return val elseif type(val) == 'number' then if val==1 then return true elseif val==0 then return false end elseif type(val) == 'string' then val = mw.ustring.lower(val) -- put in lower case if val == 'no' or val == 'n' or val == 'false' or val == '0' then return false elseif val == 'yes' or val == 'y' or val == 'true' or val == '1' then return true end end return default end -- ================================================== -- === External functions =========================== -- ================================================== local p = {} -- =========================================================================== -- === Version of the function to be called from other LUA codes -- =========================================================================== ------------------------------------------------------------------------------------------ function p.vowelfirst (str) if str then local vowels = 'aeiouyąăẵằẳặȃắâẫấầẩậãäǟāáàȁǎảẚåǻḁạǡæǣǽĕȇêễếềểệḙẽḛëēḕéḗèȅěẻẹęȩḝǝĭȋîĩḭï'.. 'ḯīíìȉǐỉịįıŏȏôỗốồổộõṏṍöōṑóṓòȍǒỏọǫǭơỡớờởợøǿŭȗûṷũṻṹṵüǖǘǜǚṳūúùȕǔủůụųưữứừửựŷỹÿȳýỳỷẙỵ' str = mw.ustring.lower(mw.ustring.sub(str,1,1)) return mw.ustring.find(vowels, str, 1, true ) end end ------------------------------------------------------------------------------------------ function p.inparentheses(str) if (not str) or (str == "") then return nil end local str2 = mw.message.new('parentheses', str):inLanguage(lang):plain() return (str2~=nil and str2) or ('('..str..')') -- in case this module is moved to a project where {{int:parenthesis}} is not set end ------------------------------------------------------------------------------------------ function p.of(word, lang, raw, gender, number, determiner) -- rough translation of "of" in various languages -- note that the cases when on "of" is employed varies a lot among languages, so it is more prudent to call this from lang specific function only if not raw or mw.text.trim(raw) == "" then raw = mw.ustring.lower(nowiki(word)) end -- raw is the string without the Wikiformatting so that it correctly analyses the string that is [[:fr:Italie|Italie]] -> 'italie' -- any way to automate this ? if lang == 'fr' then determiner = yesno(determiner,false) if determiner then if string.sub(number or '',1,1)=='p' then -- number == 'plural' return 'des&#32;' .. word elseif p.vowelfirst(raw) then return 'de l’' .. word elseif string.sub(gender or '',1,1)=='f' then -- gender == 'feminine' return 'de la&#32;' .. word else return 'du&#32;' .. word end else if p.vowelfirst(raw) then return 'd’' .. word else return 'de&#32;' .. word end end elseif lang == 'ca' then -- implement [[Template:Of/ca]] or https://ca.wikipedia.org/wiki/Plantilla:Deod%27/base for case where "{{{context}}}" is "en" (default on Commons) if ( p.vowelfirst(raw) and not mw.ustring.find( 'ia|ià|ie|io|iu|ua|ue|ui|uí|uï|uo|ya|ye|yi|yo|yu|', mw.ustring.sub(raw,1,2) .. '|')) then return 'd\'' .. word else return 'de ' .. word end end end ------------------------------------------------------------------------------------------ function p.noungroup(noun, adj, lang) if not noun or noun == '' then return nil -- not '' so that it is not counted as a string by mw.listToText end if not adj or adj == '' then return noun end local wordsep = mw.message.new( "Word-separator" ):inLanguage(lang):plain() -- Assign order of words per language: 1 means adjective before the noun and 2 means adjective after the noun -- original source for many: language subpages of [[Template:Technique]] -- corrections to that using https://wals.info/feature/87A, still different: -- * vi: WALS says 2 -- * gl isn't consistent in [[Template:Technique/gl]], but seems to be 2 local LUT = {ar=2, ca=2, cs=1, da=1, de=1, el=1, en=1, es=2, et=1, fi=1, fr=2, gl=2, he=2, hu=1, it=2, ja=1, la=2, mk=1, nds=1, nb=1, nl=1, no=1, pl=1, pt=2, ro=2, ru=1, scn=2, sk=1, sl=1, sr=1, sv=1, sw=1, tr=1, vec=1, vi=1, zh=1} local primaryLangSubtag = mw.text.split(lang, '-', true)[1] local case = LUT[lang] or LUT[primaryLangSubtag] if case==1 then -- adjective before the noun return adj .. wordsep .. noun elseif case==2 then -- adjective after the noun return noun .. wordsep .. adj else -- order unknown return noun .. ' (' .. adj .. ')' end end ------------------------------------------------------------------------------------------ function p.conj(args, lang, conjtype) local comma = mw.message.new( "comma-separator"):inLanguage(lang):plain() local wordsep = mw.message.new( "Word-separator" ):inLanguage(lang):plain() local andtable = { ar=' و', he=' ו', ja='および', pl=' i '} -- languages with a problem with the MediaWiki:And local sep1, sep2 = comma, nil if conjtype == 'comma' then sep2 = comma elseif conjtype == 'or' or conjtype == 'explicit or' then local wordor = formatMessage('I18n/Or.tab', 'or', lang) -- get translated "or" sep2 = wordsep .. wordor .. wordsep -- pad it with spaces (if needed) sep1 = (conjtype == 'explicit or' and sep2) or comma -- adds "or" betwen all words when the context can be confusing elseif conjtype and conjtype ~= 'and' and conjtype ~= '' then sep1, sep2 = conjtype, conjtype elseif andtable[lang] then sep2 = andtable[lang] else sep2 = mw.message.new( "and" ):inLanguage(lang):plain() .. wordsep end return mw.text.listToText(args, sep1, sep2) end -- =========================================================================== -- === Version of the functions to be called from template namespace -- =========================================================================== ------------------------------------------------------------------------------------------ function p.offromwiki(frame) local args = frame.args return p.of(args.word, args.lang, args.raw, args.gender, args.number, args.determiner) end ------------------------------------------------------------------------------------------ function p.conjfromWiki(frame) local args = frame.args if not args or not args[1] then args = frame:getParent().args end local lang = args.lang if not lang or mw.text.trim(lang) == '' then lang = frame:callParserFunction( "int", "lang" ) end local newargs = {} -- transform args metatable into a table so it can be concetenated for i, j in pairs(args) do if type(i) == 'number' then j = mw.text.trim(j) if j ~= '' then table.insert(newargs, j) end else if i ~= 'type' and i ~= 'lang' then return 'error: bad parameter in template:Conj: ' .. i .. '[[Category:Pages with incorrect template usage/Conj|A]]' end end end return p.conj(newargs, lang, args.type) end return p ibgdthfbs6ucr2zs5ekihtxtvv7itcl 10658 10657 2026-08-25T23:38:27Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Linguistic]] 10657 Scribunto text/plain --[[ __ __ _ _ _ _ _ _ _ | \/ | ___ __| |_ _| | ___ _| | (_)_ __ __ _ _ _(_)___| |_(_) ___ | |\/| |/ _ \ / _` | | | | |/ _ (_) | | | '_ \ / _` | | | | / __| __| |/ __| | | | | (_) | (_| | |_| | | __/_| |___| | | | | (_| | |_| | \__ \ |_| | (__ |_| |_|\___/ \__,_|\__,_|_|\___(_)_____|_|_| |_|\__, |\__,_|_|___/\__|_|\___| |___/ Simple internationalization functions that can be called by other modules. This Module was copied from Wikimedia Commons, so please request changes there. Maintainers: * Zolo - original version * Jarekt Dependencies: - Module uses c:data:I18n/Or.tab ]] require('strict') -- ================================================== -- === Internal functions =========================== -- ================================================== local function langSwitch(list,lang) local langList = mw.language.getFallbacksFor(lang) table.insert(langList,1,lang) for i,language in ipairs(langList) do if list[language] then return list[language] end end return nil end ------------------------------------------------------------------------------ -- read Commons Data:SOMENAME.tab dataset and look for message identified by a -- "key" in a language "lang". See editAtWikidata as an example. local function formatMessage(dataset, key, lang) for _, row in pairs(mw.ext.data.get(dataset, lang).data) do local id, msg = unpack(row) if id == key then return mw.message.newRawMessage(msg):plain() end end error('Invalid message key "' .. key .. '"') end ------------------------------------------------------------------------------ local function nowiki(str) -- remove all the links if not str then return str end str = mw.ustring.gsub(str, "<[^>]*>", "") -- remove all html tags from str str = mw.ustring.gsub(str, "'''", "") -- remove bold str = mw.ustring.gsub(str, "''", "") -- remove italics str = mw.ustring.gsub(str, "%[%[[Ff]ile:[^%]]+%]%]", "") -- remove file icons str = mw.ustring.gsub(str, "%[%[[^|]*|", "") -- remove piped links, like "[[:en:test|" str = mw.ustring.gsub(str, "%[[^ ]+ ", "") -- remove URL links, like "[https://www.wikidata.org/wiki/Q2706250 " str = mw.ustring.gsub(str, "%[%[", "" ) -- remove piped links, like "[[" str = mw.ustring.gsub(str, "%]", "" ) -- remove piped links, like "]" or "]]" return str end ------------------------------------------------------------------------------ -- Function allowing for consistent treatment of boolean-like wikitext input. -- It works similarly to Module:Yesno local function yesno(val, default) if type(val) == 'boolean' then return val elseif type(val) == 'number' then if val==1 then return true elseif val==0 then return false end elseif type(val) == 'string' then val = mw.ustring.lower(val) -- put in lower case if val == 'no' or val == 'n' or val == 'false' or val == '0' then return false elseif val == 'yes' or val == 'y' or val == 'true' or val == '1' then return true end end return default end -- ================================================== -- === External functions =========================== -- ================================================== local p = {} -- =========================================================================== -- === Version of the function to be called from other LUA codes -- =========================================================================== ------------------------------------------------------------------------------------------ function p.vowelfirst (str) if str then local vowels = 'aeiouyąăẵằẳặȃắâẫấầẩậãäǟāáàȁǎảẚåǻḁạǡæǣǽĕȇêễếềểệḙẽḛëēḕéḗèȅěẻẹęȩḝǝĭȋîĩḭï'.. 'ḯīíìȉǐỉịįıŏȏôỗốồổộõṏṍöōṑóṓòȍǒỏọǫǭơỡớờởợøǿŭȗûṷũṻṹṵüǖǘǜǚṳūúùȕǔủůụųưữứừửựŷỹÿȳýỳỷẙỵ' str = mw.ustring.lower(mw.ustring.sub(str,1,1)) return mw.ustring.find(vowels, str, 1, true ) end end ------------------------------------------------------------------------------------------ function p.inparentheses(str) if (not str) or (str == "") then return nil end local str2 = mw.message.new('parentheses', str):inLanguage(lang):plain() return (str2~=nil and str2) or ('('..str..')') -- in case this module is moved to a project where {{int:parenthesis}} is not set end ------------------------------------------------------------------------------------------ function p.of(word, lang, raw, gender, number, determiner) -- rough translation of "of" in various languages -- note that the cases when on "of" is employed varies a lot among languages, so it is more prudent to call this from lang specific function only if not raw or mw.text.trim(raw) == "" then raw = mw.ustring.lower(nowiki(word)) end -- raw is the string without the Wikiformatting so that it correctly analyses the string that is [[:fr:Italie|Italie]] -> 'italie' -- any way to automate this ? if lang == 'fr' then determiner = yesno(determiner,false) if determiner then if string.sub(number or '',1,1)=='p' then -- number == 'plural' return 'des&#32;' .. word elseif p.vowelfirst(raw) then return 'de l’' .. word elseif string.sub(gender or '',1,1)=='f' then -- gender == 'feminine' return 'de la&#32;' .. word else return 'du&#32;' .. word end else if p.vowelfirst(raw) then return 'd’' .. word else return 'de&#32;' .. word end end elseif lang == 'ca' then -- implement [[Template:Of/ca]] or https://ca.wikipedia.org/wiki/Plantilla:Deod%27/base for case where "{{{context}}}" is "en" (default on Commons) if ( p.vowelfirst(raw) and not mw.ustring.find( 'ia|ià|ie|io|iu|ua|ue|ui|uí|uï|uo|ya|ye|yi|yo|yu|', mw.ustring.sub(raw,1,2) .. '|')) then return 'd\'' .. word else return 'de ' .. word end end end ------------------------------------------------------------------------------------------ function p.noungroup(noun, adj, lang) if not noun or noun == '' then return nil -- not '' so that it is not counted as a string by mw.listToText end if not adj or adj == '' then return noun end local wordsep = mw.message.new( "Word-separator" ):inLanguage(lang):plain() -- Assign order of words per language: 1 means adjective before the noun and 2 means adjective after the noun -- original source for many: language subpages of [[Template:Technique]] -- corrections to that using https://wals.info/feature/87A, still different: -- * vi: WALS says 2 -- * gl isn't consistent in [[Template:Technique/gl]], but seems to be 2 local LUT = {ar=2, ca=2, cs=1, da=1, de=1, el=1, en=1, es=2, et=1, fi=1, fr=2, gl=2, he=2, hu=1, it=2, ja=1, la=2, mk=1, nds=1, nb=1, nl=1, no=1, pl=1, pt=2, ro=2, ru=1, scn=2, sk=1, sl=1, sr=1, sv=1, sw=1, tr=1, vec=1, vi=1, zh=1} local primaryLangSubtag = mw.text.split(lang, '-', true)[1] local case = LUT[lang] or LUT[primaryLangSubtag] if case==1 then -- adjective before the noun return adj .. wordsep .. noun elseif case==2 then -- adjective after the noun return noun .. wordsep .. adj else -- order unknown return noun .. ' (' .. adj .. ')' end end ------------------------------------------------------------------------------------------ function p.conj(args, lang, conjtype) local comma = mw.message.new( "comma-separator"):inLanguage(lang):plain() local wordsep = mw.message.new( "Word-separator" ):inLanguage(lang):plain() local andtable = { ar=' و', he=' ו', ja='および', pl=' i '} -- languages with a problem with the MediaWiki:And local sep1, sep2 = comma, nil if conjtype == 'comma' then sep2 = comma elseif conjtype == 'or' or conjtype == 'explicit or' then local wordor = formatMessage('I18n/Or.tab', 'or', lang) -- get translated "or" sep2 = wordsep .. wordor .. wordsep -- pad it with spaces (if needed) sep1 = (conjtype == 'explicit or' and sep2) or comma -- adds "or" betwen all words when the context can be confusing elseif conjtype and conjtype ~= 'and' and conjtype ~= '' then sep1, sep2 = conjtype, conjtype elseif andtable[lang] then sep2 = andtable[lang] else sep2 = mw.message.new( "and" ):inLanguage(lang):plain() .. wordsep end return mw.text.listToText(args, sep1, sep2) end -- =========================================================================== -- === Version of the functions to be called from template namespace -- =========================================================================== ------------------------------------------------------------------------------------------ function p.offromwiki(frame) local args = frame.args return p.of(args.word, args.lang, args.raw, args.gender, args.number, args.determiner) end ------------------------------------------------------------------------------------------ function p.conjfromWiki(frame) local args = frame.args if not args or not args[1] then args = frame:getParent().args end local lang = args.lang if not lang or mw.text.trim(lang) == '' then lang = frame:callParserFunction( "int", "lang" ) end local newargs = {} -- transform args metatable into a table so it can be concetenated for i, j in pairs(args) do if type(i) == 'number' then j = mw.text.trim(j) if j ~= '' then table.insert(newargs, j) end else if i ~= 'type' and i ~= 'lang' then return 'error: bad parameter in template:Conj: ' .. i .. '[[Category:Pages with incorrect template usage/Conj|A]]' end end end return p.conj(newargs, lang, args.type) end return p ibgdthfbs6ucr2zs5ekihtxtvv7itcl Module:LangSwitch 828 1322 10659 2022-10-29T17:41:02Z commons>Mdaniels5757 0 per edit request 10659 Scribunto text/plain --[[ __ __ _ _ _ ____ _ _ _ | \/ | ___ __| |_ _| | ___ _| | __ _ _ __ __ _/ ___|_ _(_) |_ ___| |__ | |\/| |/ _ \ / _` | | | | |/ _ (_) | / _` | '_ \ / _` \___ \ \ /\ / / | __/ __| '_ \ | | | | (_) | (_| | |_| | | __/_| |__| (_| | | | | (_| |___) \ V V /| | || (__| | | | |_| |_|\___/ \__,_|\__,_|_|\___(_)_____\__,_|_| |_|\__, |____/ \_/\_/ |_|\__\___|_| |_| |___/ Authors and maintainers: * User:Zolo - original version in Module:Fallback * User:Jarekt ]] -- add optional module -- used for debugging purposes as it detects cases of unintended global variables require('strict') local p = {} local function add_labels(args) -- add invisible but machine readable labels to the files, which can be used to add titles to wikidata items local createTag = require('Module:TagQS').createTag -- lazy loading of the module: only for the files that need it local qsTable = {''} -- add text of invisible tag brodcasted by the template which allows creation of QuickStatements command used to add this info to Wikidata for lang, text in pairs( args ) do if type(lang)=='string' and mw.language.isSupportedLanguage(lang) then -- lang has to be a valid language table.insert( qsTable, createTag('label', 'L'..lang, '"' .. text .. '"') ) end end return table.concat( qsTable, '\n') end --[[ _langSwitch This function is the core part of the LangSwitch template. Example usage from Lua: text = _langSwitch({en='text in english', pl='tekst po polsku'}, lang) Parameters: args - table with translations by language lang - desired language (often user's native language) Error Handling: ]] function p._langSwitch(args, lang) -- args: table of translations -- Return error if there is not default and no english version if not args.en and not args.default then local err = '<b class="error">LangSwitch Error: no default</b>' if args.nocat == '1' then return err else return err .. '[[Category:LangSwitch template without default version]]' end end -- To improve performance try quick switch, and load fallback chain only if needed. -- In the vast majority of cases fast switch is sufficient local val = args[lang] if val == '~' then return '' elseif val and val ~= '' then return val elseif args.quick then return nil end -- get the list of accepetable language (lang + those in lang's fallback chain) and check their content assert(lang, 'LangSwitch Error: no lang') local langList = mw.language.getFallbacksFor(lang) table.insert(langList,1,lang) table.insert(langList,math.max(#langList,2),'default') for _, language in ipairs(langList) do val = args[language] if val == '~' then return '' elseif val and val ~= '' then return val end end end --[[ langSwitch This function is the core part of the LangSwitch template. Example Usage from a template: {{#invoke:fallback|langSwitch|en=text in english|pl=tekst po polsku|lang={{int:lang}} }} Parameters: frame.args - table with translations by language frame.args.lang - desired language (often user's native language) Error Handling: ]] function p.langSwitch(frame) -- version to be used from wikitext local args = frame.args -- if no expected args provided than check parent template/module args if args.en==nil and args.default==nil and args.nocat==nil then args = mw.getCurrentFrame():getParent().args end local lang = args.lang if not lang or not mw.language.isKnownLanguageTag(lang) then lang = frame:callParserFunction( "int", "lang" ) -- get user's chosen language end -- add text of invisible tag brodcasted by the template which allows creation of QuickStatements command used to add this info to Wikidata local labels = '' if args.add_labels then labels = add_labels(args) end -- Try quick switch which checks the most likely option when fallback is not needed args.quick = true; local val = p._langSwitch(args, lang) if val then return val .. labels end -- Allow input in format: {{LangSwitch|de=Grün|es/it/pt=Verde|fr=Vert|en=Green |lang=en}} -- with multiple languages mapping to a single value local args1 = {} for name, value in pairs( args ) do if value ~= '' and type(name)=='string' then for str in string.gmatch( name, "([^/]+)" ) do args1[str] = value end end end return p._langSwitch(args1, lang) .. labels end return p eio249psl03mn1ttbazreiyu21cxato 10660 10659 2026-08-25T23:38:27Z RAPTOR7762 18 1 revision imported from [[:commons:Module:LangSwitch]] 10659 Scribunto text/plain --[[ __ __ _ _ _ ____ _ _ _ | \/ | ___ __| |_ _| | ___ _| | __ _ _ __ __ _/ ___|_ _(_) |_ ___| |__ | |\/| |/ _ \ / _` | | | | |/ _ (_) | / _` | '_ \ / _` \___ \ \ /\ / / | __/ __| '_ \ | | | | (_) | (_| | |_| | | __/_| |__| (_| | | | | (_| |___) \ V V /| | || (__| | | | |_| |_|\___/ \__,_|\__,_|_|\___(_)_____\__,_|_| |_|\__, |____/ \_/\_/ |_|\__\___|_| |_| |___/ Authors and maintainers: * User:Zolo - original version in Module:Fallback * User:Jarekt ]] -- add optional module -- used for debugging purposes as it detects cases of unintended global variables require('strict') local p = {} local function add_labels(args) -- add invisible but machine readable labels to the files, which can be used to add titles to wikidata items local createTag = require('Module:TagQS').createTag -- lazy loading of the module: only for the files that need it local qsTable = {''} -- add text of invisible tag brodcasted by the template which allows creation of QuickStatements command used to add this info to Wikidata for lang, text in pairs( args ) do if type(lang)=='string' and mw.language.isSupportedLanguage(lang) then -- lang has to be a valid language table.insert( qsTable, createTag('label', 'L'..lang, '"' .. text .. '"') ) end end return table.concat( qsTable, '\n') end --[[ _langSwitch This function is the core part of the LangSwitch template. Example usage from Lua: text = _langSwitch({en='text in english', pl='tekst po polsku'}, lang) Parameters: args - table with translations by language lang - desired language (often user's native language) Error Handling: ]] function p._langSwitch(args, lang) -- args: table of translations -- Return error if there is not default and no english version if not args.en and not args.default then local err = '<b class="error">LangSwitch Error: no default</b>' if args.nocat == '1' then return err else return err .. '[[Category:LangSwitch template without default version]]' end end -- To improve performance try quick switch, and load fallback chain only if needed. -- In the vast majority of cases fast switch is sufficient local val = args[lang] if val == '~' then return '' elseif val and val ~= '' then return val elseif args.quick then return nil end -- get the list of accepetable language (lang + those in lang's fallback chain) and check their content assert(lang, 'LangSwitch Error: no lang') local langList = mw.language.getFallbacksFor(lang) table.insert(langList,1,lang) table.insert(langList,math.max(#langList,2),'default') for _, language in ipairs(langList) do val = args[language] if val == '~' then return '' elseif val and val ~= '' then return val end end end --[[ langSwitch This function is the core part of the LangSwitch template. Example Usage from a template: {{#invoke:fallback|langSwitch|en=text in english|pl=tekst po polsku|lang={{int:lang}} }} Parameters: frame.args - table with translations by language frame.args.lang - desired language (often user's native language) Error Handling: ]] function p.langSwitch(frame) -- version to be used from wikitext local args = frame.args -- if no expected args provided than check parent template/module args if args.en==nil and args.default==nil and args.nocat==nil then args = mw.getCurrentFrame():getParent().args end local lang = args.lang if not lang or not mw.language.isKnownLanguageTag(lang) then lang = frame:callParserFunction( "int", "lang" ) -- get user's chosen language end -- add text of invisible tag brodcasted by the template which allows creation of QuickStatements command used to add this info to Wikidata local labels = '' if args.add_labels then labels = add_labels(args) end -- Try quick switch which checks the most likely option when fallback is not needed args.quick = true; local val = p._langSwitch(args, lang) if val then return val .. labels end -- Allow input in format: {{LangSwitch|de=Grün|es/it/pt=Verde|fr=Vert|en=Green |lang=en}} -- with multiple languages mapping to a single value local args1 = {} for name, value in pairs( args ) do if value ~= '' and type(name)=='string' then for str in string.gmatch( name, "([^/]+)" ) do args1[str] = value end end end return p._langSwitch(args1, lang) .. labels end return p eio249psl03mn1ttbazreiyu21cxato Tempilet:Ifsvg 10 1323 10661 2021-07-06T15:05:33Z commons>Minorax 0 Protected "[[Template:Ifsvg]]": [[Commons:Protection policy|Widely used template]]: 165928 transclusion(s) found. ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite)) 10661 wikitext text/x-wiki {{#ifeq:{{NAMESPACE}}|File | {{#ifeq:{{#invoke:File|extension|file={{PAGENAME}}}}| svg | {{{1|}}} | {{{2|}}} }} | {{{3|<noinclude>not file</noinclude>}}} }}<noinclude> {{documentation}} </noinclude> 5zxgtiv2gqenxwf1ujj0ow37pdx3yq1 10662 10661 2026-08-25T23:38:27Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Ifsvg]] 10661 wikitext text/x-wiki {{#ifeq:{{NAMESPACE}}|File | {{#ifeq:{{#invoke:File|extension|file={{PAGENAME}}}}| svg | {{{1|}}} | {{{2|}}} }} | {{{3|<noinclude>not file</noinclude>}}} }}<noinclude> {{documentation}} </noinclude> 5zxgtiv2gqenxwf1ujj0ow37pdx3yq1 Module:File 828 1324 10663 2024-10-29T15:32:04Z commons>TheDJ 0 Add webp to list of supported file types 10663 Scribunto text/plain -- Module for handling Media files (Origin: Wikimedia Commons) require('strict') -- ================================================== -- === helper Lookup table ========================== -- ================================================== local extensionMap = { -- File types with full support in Commons (See [[c:Commons:File types]]). DJVU = 'image/vnd.djvu', FLAC = 'audio/x-flac', GIF = 'image/gif', JPEG = 'image/jpeg', JPG = 'image/jpeg', MID = 'audio/midi', MP3 = 'audio/mpeg', OGA = 'audio/ogg', OGG = 'audio/ogg', OGV = 'video/ogg', PDF = 'application/pdf', PNG = 'image/png', SVG = 'image/svg+xml', TIF = 'image/tiff', TIFF = 'image/tiff', WEBM = 'video/webm', WEBP = 'image/webp', WAV = 'audio/x-wav', XCF = 'image/xcf', -- Other file types with restrictions (not accepted in standard uploads on Commons but in 'User:' namespace). -- They could be supported in Wiki pages by embedding their content in an <pre> or <source> elements. CSS = 'text/css', CSV = 'text/csv', JS = 'application/javascript', JSON = 'application/json', TXT = 'text/plain', XML = 'application/xml', -- Only generated by MediaWiki on output of some queries, restricted in all uploads. GZ = 'application/gzip', -- delivered only only for some wiki results ZIP = 'application/zip', -- delivered only for some wiki data exports -- Other file types not supported and to convert (a few of them may be in special administration namespaces). DOC = 'application/msword', -- please convert to PDF, DJVU, or Wiki F4V = 'video/mpeg', -- (deprecated, replaced by MP4) please convert to OGV or WEBM FLV = 'video/x-flv', -- (deprecated, replaced by MP4) please convert to OGV or WEBM ICO = 'image/vnd.microsoft.icon', -- used in MediaWiki resources for 'website icons' MP4 = 'video/mp4', QT = 'video/quicktime', -- (deprecated, replaced by MP4) please convert to OGV or WEBM RA = 'audio/vnd.rn-realaudio', -- (deprecated, replaced by MP3) please convert to OGA SWF = 'video/x-flv', -- (deprecated, replaced by MP4) please convert to OGV or WEBM WMA = 'audio/x-ms-wma', -- please convert to OGA WMV = 'video/x-ms-wmv', -- please convert to OGV or WEBM XLS = 'application/vnd.ms-excel', -- please convert to PDF, DJVU, or Wiki } -- ================================================== -- === Local functions ============================== -- ================================================== local function filename(frame) return frame.args[1] or frame.args["file"] or frame.args["title"] end local function getMetadata(frame) local fname = filename(frame) local title if fname then title = mw.title.new(fname, 6) else title = mw.title.getCurrentTitle() end if title then return title.file else return {exists=false} end end -- ================================================== -- === External functions =========================== -- ================================================== local p = {} -- p.csExtension("Foo.bar.svg") -- @return "svg" function p.csExtension(frame) local fname = filename(frame) or mw.title.getCurrentTitle().text local parts = mw.text.split(fname, '.', true) if #parts>1 then return parts[#parts] else return '' end end function p.extension(frame) return p.csExtension(frame):lower() end function p.extensionUpper(frame) return p.csExtension(frame):upper() end -- p.woExtension("Foo.bar.svg") -- @return "Foo.bar" -- Original author: Bawolff at [[Module:FileName]] function p.woExtension(frame) local fname = filename(frame) or mw.title.getCurrentTitle().text local parts = mw.text.split(fname , '.', true) local upTo = #parts - 1 if upTo == 0 then upTo = 1 end return table.concat(parts, '.', 1, upTo) end function p.mime(frame) local meta = getMetadata(frame) if meta.exists then return meta.mimeType else return extensionMap[p.extensionUpper(frame)] or 'unknown' end end function p.mimeType(frame) return getMetadata(frame).mimeType end function p.fileExists(frame) return getMetadata(frame).exists or '' end -- This one won't throw errors at you function p.fileExistsRelaxed(frame) local ok, metadata = pcall(getMetadata(frame)) if ok then return metadata.exists or '' else return '' end end function p.maxthumb(frame) -- Limits in megapixels are currently stored in Commons templates, they could be in this module. -- There may be more limits for other supported mime types (djvu, flac, ogv, pdf, svg, webm, xcf). local maxthumbMap = { ['image/gif'] = 1000, ['image/png' ] = 2500, -- see Template:LargePNG/limit ['image/tiff'] = 1000, -- see Template:LargeTIFF/limit } local mime = p.mime(frame) return maxthumbMap[mime] or 'unknown @Module:File' end function p.dateWorkCreated(frame) return '' -- no longer supported end function p.width(frame) return getMetadata(frame).width end function p.height(frame) return getMetadata(frame).height end function p.dimensions(frame) local d = getMetadata(frame) if d.exists then return d.width .. ' × ' .. d.height else return '' end end function p.size(frame) return getMetadata(frame).size end function p.pageCount(frame) local pages = getMetadata(frame).pages or {1} return #pages end return p f6ox2m3jg1irbxkfn9d27fp97b3byx7 10664 10663 2026-08-25T23:38:27Z RAPTOR7762 18 1 revision imported from [[:commons:Module:File]] 10663 Scribunto text/plain -- Module for handling Media files (Origin: Wikimedia Commons) require('strict') -- ================================================== -- === helper Lookup table ========================== -- ================================================== local extensionMap = { -- File types with full support in Commons (See [[c:Commons:File types]]). DJVU = 'image/vnd.djvu', FLAC = 'audio/x-flac', GIF = 'image/gif', JPEG = 'image/jpeg', JPG = 'image/jpeg', MID = 'audio/midi', MP3 = 'audio/mpeg', OGA = 'audio/ogg', OGG = 'audio/ogg', OGV = 'video/ogg', PDF = 'application/pdf', PNG = 'image/png', SVG = 'image/svg+xml', TIF = 'image/tiff', TIFF = 'image/tiff', WEBM = 'video/webm', WEBP = 'image/webp', WAV = 'audio/x-wav', XCF = 'image/xcf', -- Other file types with restrictions (not accepted in standard uploads on Commons but in 'User:' namespace). -- They could be supported in Wiki pages by embedding their content in an <pre> or <source> elements. CSS = 'text/css', CSV = 'text/csv', JS = 'application/javascript', JSON = 'application/json', TXT = 'text/plain', XML = 'application/xml', -- Only generated by MediaWiki on output of some queries, restricted in all uploads. GZ = 'application/gzip', -- delivered only only for some wiki results ZIP = 'application/zip', -- delivered only for some wiki data exports -- Other file types not supported and to convert (a few of them may be in special administration namespaces). DOC = 'application/msword', -- please convert to PDF, DJVU, or Wiki F4V = 'video/mpeg', -- (deprecated, replaced by MP4) please convert to OGV or WEBM FLV = 'video/x-flv', -- (deprecated, replaced by MP4) please convert to OGV or WEBM ICO = 'image/vnd.microsoft.icon', -- used in MediaWiki resources for 'website icons' MP4 = 'video/mp4', QT = 'video/quicktime', -- (deprecated, replaced by MP4) please convert to OGV or WEBM RA = 'audio/vnd.rn-realaudio', -- (deprecated, replaced by MP3) please convert to OGA SWF = 'video/x-flv', -- (deprecated, replaced by MP4) please convert to OGV or WEBM WMA = 'audio/x-ms-wma', -- please convert to OGA WMV = 'video/x-ms-wmv', -- please convert to OGV or WEBM XLS = 'application/vnd.ms-excel', -- please convert to PDF, DJVU, or Wiki } -- ================================================== -- === Local functions ============================== -- ================================================== local function filename(frame) return frame.args[1] or frame.args["file"] or frame.args["title"] end local function getMetadata(frame) local fname = filename(frame) local title if fname then title = mw.title.new(fname, 6) else title = mw.title.getCurrentTitle() end if title then return title.file else return {exists=false} end end -- ================================================== -- === External functions =========================== -- ================================================== local p = {} -- p.csExtension("Foo.bar.svg") -- @return "svg" function p.csExtension(frame) local fname = filename(frame) or mw.title.getCurrentTitle().text local parts = mw.text.split(fname, '.', true) if #parts>1 then return parts[#parts] else return '' end end function p.extension(frame) return p.csExtension(frame):lower() end function p.extensionUpper(frame) return p.csExtension(frame):upper() end -- p.woExtension("Foo.bar.svg") -- @return "Foo.bar" -- Original author: Bawolff at [[Module:FileName]] function p.woExtension(frame) local fname = filename(frame) or mw.title.getCurrentTitle().text local parts = mw.text.split(fname , '.', true) local upTo = #parts - 1 if upTo == 0 then upTo = 1 end return table.concat(parts, '.', 1, upTo) end function p.mime(frame) local meta = getMetadata(frame) if meta.exists then return meta.mimeType else return extensionMap[p.extensionUpper(frame)] or 'unknown' end end function p.mimeType(frame) return getMetadata(frame).mimeType end function p.fileExists(frame) return getMetadata(frame).exists or '' end -- This one won't throw errors at you function p.fileExistsRelaxed(frame) local ok, metadata = pcall(getMetadata(frame)) if ok then return metadata.exists or '' else return '' end end function p.maxthumb(frame) -- Limits in megapixels are currently stored in Commons templates, they could be in this module. -- There may be more limits for other supported mime types (djvu, flac, ogv, pdf, svg, webm, xcf). local maxthumbMap = { ['image/gif'] = 1000, ['image/png' ] = 2500, -- see Template:LargePNG/limit ['image/tiff'] = 1000, -- see Template:LargeTIFF/limit } local mime = p.mime(frame) return maxthumbMap[mime] or 'unknown @Module:File' end function p.dateWorkCreated(frame) return '' -- no longer supported end function p.width(frame) return getMetadata(frame).width end function p.height(frame) return getMetadata(frame).height end function p.dimensions(frame) local d = getMetadata(frame) if d.exists then return d.width .. ' × ' .. d.height else return '' end end function p.size(frame) return getMetadata(frame).size end function p.pageCount(frame) local pages = getMetadata(frame).pages or {1} return #pages end return p f6ox2m3jg1irbxkfn9d27fp97b3byx7 Tempilet:Colon 10 1325 10665 2023-06-02T09:27:01Z commons>TKsdik8900 0 Fulfilling the edit request ([[Template talk:Colon#Use Lua module]]) by [[User:CalendulaAsteraceae|CalendulaAsteraceae]] 10665 wikitext text/x-wiki {{#invoke:Colon|colon}}<noinclude>{{documentation}}</noinclude> 6h6zrczkyugye2yejwwvp8zddl4t8ge 10666 10665 2026-08-25T23:38:27Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Colon]] 10665 wikitext text/x-wiki {{#invoke:Colon|colon}}<noinclude>{{documentation}}</noinclude> 6h6zrczkyugye2yejwwvp8zddl4t8ge Tempilet:NoImageNotes 10 1326 10667 2022-11-05T18:04:19Z commons>Jonesey95 0 replace in-line span tag, which is often used to wrap block content, with equivalent div tag to fix Linter errors. I see that this is transcluded in over one million pages, but it is used directly in only about 100 template pages, and I checked most of them and they use this template in a table cell on their own rather than followed by in-line content. Please post on the talk page if I have broken anything. 10667 wikitext text/x-wiki <includeonly><div class="wpImageAnnotatorControl wpImageAnnotatorOff">{{{1|}}}</div></includeonly><noinclude>{{documentation}}</noinclude> ncu4bxelcyq8ok673lbdeficun7f215 10668 10667 2026-08-25T23:38:27Z RAPTOR7762 18 1 revision imported from [[:commons:Template:NoImageNotes]] 10667 wikitext text/x-wiki <includeonly><div class="wpImageAnnotatorControl wpImageAnnotatorOff">{{{1|}}}</div></includeonly><noinclude>{{documentation}}</noinclude> ncu4bxelcyq8ok673lbdeficun7f215 Tempilet:T/main 10 1327 10671 2022-10-29T18:04:16Z commons>Mdaniels5757 0 Fulfilling [[Template:Edit request|edit request]] by [[User:Jonesey95|Jonesey95]]. Thanks for helping! 10671 wikitext text/x-wiki {{#ifeq:{{lc:{{{code}}}}}|tt|<code>}}<!-- code start -->{{#switch:{{#switch:{{{link}}}|no|n|-=1|0}}{{#switch:+|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}=1|0}}{{#switch:-|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}=1|0}}<!-- -->|000|010|011|100=|{{#switch:{{{case}}}|i|n={{i18n/namespace|t|link={{{case}}}o|lang={{{i18n|}}}}}|l=template|Template}}:}}<!-- -->{{#switch:{{{link}}}|no|n={{#switch:{{{incl|{{{i|}}}}}}|3=<span style="font-family:monospace;{{{style|}}}">}}<!-- link=no -->{{#switch:{{{incl|{{{i|}}}}}}|0|1|2|3|4|5|6=&#123;&#123;}}<!-- -->{{#switch:{{{2|}}}|+|-|={{#switch:{{{1|}}}|+|-|={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}|{{{2}}}}}<!-- when "link=no": just display -->{{#if:{{{parm|}}}|&#124;{{{parm}}}}}<!-- optional parm display -->{{#switch:{{{incl|{{{i|}}}}}}|0|1|2|3|4|5|6=&#125;&#125;}}<!-- -->{{#switch:{{{incl|{{{i|}}}}}}|3=</span>}}<!-- -->|{{#switch:+|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}=|{{#switch:{{{incl|{{{i|}}}}}}|0|4=&#123;&#123;|1|5=&#123;}}}}<!-- when +: not outside -->[[:{{#switch:{{{3|}}}|+|-|=|{{trim|{{{3}}}}}&#58;}}<!-- language code (ISO 639-1) (and/or sisterproject prefix) -->Template:{{#switch:{{{1|}}}|+|-|={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}|<!-- =link= -->{{#switch:+|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}={{#switch:{{{case}}}|i|n={{i18n/namespace|t|link=no|lang={{{i18n|}}}}}|l=template|Template}}:}}<!-- -->{{#switch:{{{incl|{{{i|}}}}}}|3=<span style="font-family:monospace,monospace;{{{style|}}}">}}<!-- -->{{#switch:{{{incl|{{{i|}}}}}}|2|3|6=&#123;&#123;|1|5=&#123;}}<!-- -->{{#switch:+|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}={{#switch:{{{incl|{{{i|}}}}}}|0|4=&#123;&#123;|1|5=&#123;}}}}<!-- inside -->{{#if:{{{code|}}}|<code>}}{{#switch:{{{incl|{{{i|}}}}}}|4|5|6|9=<kbd>}}<!-- code/typewrite start -->{{#switch:{{{2|}}}|+|-|={{#switch:{{{1|}}}|+|-|={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}|{{{2}}}}}<!-- display name -->{{#if:{{{parm|}}}|{{#switch:&#124;|{{padleft:|1|{{{parm}}}}}|{{padleft:|6|{{{parm}}}}}=|&#124;}}{{{parm}}}}}<!-- opt. parm -->{{#switch:{{{incl|{{{i|}}}}}}|4|5|6|9=</kbd>}}{{#if:{{{code|}}}|</code>}}<!-- typewrite/code end -->{{#switch:{{{incl|{{{i|}}}}}}|2|3|6=&#125;&#125;|1|5=&#125;}}<!-- -->{{#switch:{{{incl|{{{i|}}}}}}|3=</span>}}<!-- -->{{#switch:+|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}={{#switch:{{{incl|{{{i|}}}}}}|0|4=&#125;&#125;|1|5=&#125;}}}}<!-- inside -->]]{{#switch:+|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}=|{{#switch:{{{incl|{{{i|}}}}}}|0|4=&#125;&#125;|1|5=&#125;}}}}}}<!-- not outside -->{{#ifeq:{{lc:{{{code}}}}}|tt|</code>}}<!-- code end -->{{#if:{{{full|{{#ifeq:{{{5}}}|full|1}}}}}|<span class="plainlinks"><!-- -->&#160;<kbd>(</kbd><small>[{{fullurl:Template:{{{1|{{PAGENAME}}}}}}} {{int:view}}]<!-- -->&#160;&#8226;&#160;[{{fullurl:Template:{{{1|{{PAGENAME}}}}}|action=edit}} {{int:edit}}]<!-- -->&#160;&#8226;&#160;[[:Template talk:{{{1|{{PAGENAME}}}}}|{{int:talk}}]]<!-- -->&#160;&#8226;&#160;[{{fullurl:Special:Whatlinkshere/Template:{{{1|{{PAGENAME}}}}}|limit=500}} Links]<!-- {{int:links}} needs fix -->&#160;&#8226;&#160;[{{fullurl:Template:{{{1|{{PAGENAME}}}}}|action=history}} History]</small><kbd>)</kbd><!-- --></span>}}<!-- --><noinclude> {{documentation|Template:T/doc}} </noinclude> 22tv9age8m1616dns22yrih6gn23jul 10672 10671 2026-08-25T23:38:28Z RAPTOR7762 18 1 revision imported from [[:commons:Template:T/main]] 10671 wikitext text/x-wiki {{#ifeq:{{lc:{{{code}}}}}|tt|<code>}}<!-- code start -->{{#switch:{{#switch:{{{link}}}|no|n|-=1|0}}{{#switch:+|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}=1|0}}{{#switch:-|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}=1|0}}<!-- -->|000|010|011|100=|{{#switch:{{{case}}}|i|n={{i18n/namespace|t|link={{{case}}}o|lang={{{i18n|}}}}}|l=template|Template}}:}}<!-- -->{{#switch:{{{link}}}|no|n={{#switch:{{{incl|{{{i|}}}}}}|3=<span style="font-family:monospace;{{{style|}}}">}}<!-- link=no -->{{#switch:{{{incl|{{{i|}}}}}}|0|1|2|3|4|5|6=&#123;&#123;}}<!-- -->{{#switch:{{{2|}}}|+|-|={{#switch:{{{1|}}}|+|-|={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}|{{{2}}}}}<!-- when "link=no": just display -->{{#if:{{{parm|}}}|&#124;{{{parm}}}}}<!-- optional parm display -->{{#switch:{{{incl|{{{i|}}}}}}|0|1|2|3|4|5|6=&#125;&#125;}}<!-- -->{{#switch:{{{incl|{{{i|}}}}}}|3=</span>}}<!-- -->|{{#switch:+|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}=|{{#switch:{{{incl|{{{i|}}}}}}|0|4=&#123;&#123;|1|5=&#123;}}}}<!-- when +: not outside -->[[:{{#switch:{{{3|}}}|+|-|=|{{trim|{{{3}}}}}&#58;}}<!-- language code (ISO 639-1) (and/or sisterproject prefix) -->Template:{{#switch:{{{1|}}}|+|-|={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}|<!-- =link= -->{{#switch:+|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}={{#switch:{{{case}}}|i|n={{i18n/namespace|t|link=no|lang={{{i18n|}}}}}|l=template|Template}}:}}<!-- -->{{#switch:{{{incl|{{{i|}}}}}}|3=<span style="font-family:monospace,monospace;{{{style|}}}">}}<!-- -->{{#switch:{{{incl|{{{i|}}}}}}|2|3|6=&#123;&#123;|1|5=&#123;}}<!-- -->{{#switch:+|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}={{#switch:{{{incl|{{{i|}}}}}}|0|4=&#123;&#123;|1|5=&#123;}}}}<!-- inside -->{{#if:{{{code|}}}|<code>}}{{#switch:{{{incl|{{{i|}}}}}}|4|5|6|9=<kbd>}}<!-- code/typewrite start -->{{#switch:{{{2|}}}|+|-|={{#switch:{{{1|}}}|+|-|={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}|{{{2}}}}}<!-- display name -->{{#if:{{{parm|}}}|{{#switch:&#124;|{{padleft:|1|{{{parm}}}}}|{{padleft:|6|{{{parm}}}}}=|&#124;}}{{{parm}}}}}<!-- opt. parm -->{{#switch:{{{incl|{{{i|}}}}}}|4|5|6|9=</kbd>}}{{#if:{{{code|}}}|</code>}}<!-- typewrite/code end -->{{#switch:{{{incl|{{{i|}}}}}}|2|3|6=&#125;&#125;|1|5=&#125;}}<!-- -->{{#switch:{{{incl|{{{i|}}}}}}|3=</span>}}<!-- -->{{#switch:+|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}={{#switch:{{{incl|{{{i|}}}}}}|0|4=&#125;&#125;|1|5=&#125;}}}}<!-- inside -->]]{{#switch:+|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}=|{{#switch:{{{incl|{{{i|}}}}}}|0|4=&#125;&#125;|1|5=&#125;}}}}}}<!-- not outside -->{{#ifeq:{{lc:{{{code}}}}}|tt|</code>}}<!-- code end -->{{#if:{{{full|{{#ifeq:{{{5}}}|full|1}}}}}|<span class="plainlinks"><!-- -->&#160;<kbd>(</kbd><small>[{{fullurl:Template:{{{1|{{PAGENAME}}}}}}} {{int:view}}]<!-- -->&#160;&#8226;&#160;[{{fullurl:Template:{{{1|{{PAGENAME}}}}}|action=edit}} {{int:edit}}]<!-- -->&#160;&#8226;&#160;[[:Template talk:{{{1|{{PAGENAME}}}}}|{{int:talk}}]]<!-- -->&#160;&#8226;&#160;[{{fullurl:Special:Whatlinkshere/Template:{{{1|{{PAGENAME}}}}}|limit=500}} Links]<!-- {{int:links}} needs fix -->&#160;&#8226;&#160;[{{fullurl:Template:{{{1|{{PAGENAME}}}}}|action=history}} History]</small><kbd>)</kbd><!-- --></span>}}<!-- --><noinclude> {{documentation|Template:T/doc}} </noinclude> 22tv9age8m1616dns22yrih6gn23jul Tempilet:ISOdate 10 1328 10675 2022-06-20T03:22:51Z commons>Jarekt 0 "class=" is equivalent to "class=-". In case of no "class" parameter use default "class=dtstart" 10675 wikitext text/x-wiki {{#invoke:ISOdate|ISOdate |1 = {{{date|{{{1|}}}}}} |class = {{#if:{{{class|-}}}|{{{class|-}}}|dtstart}}<!-- "class=" is equivalent to "class=-". In case of no "class" parameter use default "class=dtstart" --> |lang = {{#if:{{{lang|{{{2|}}}}}} | {{{lang|{{{2|}}}}}} | {{int:Lang}} }} |case = {{{case|{{{form|}}}}}} |trim_year = {{{trim_year|{{{trim year|100-999}}}}}} }}<noinclude> {{heavily used template}} {{documentation}} </noinclude> kqj28tw3ova94e02dlehqfpf7dor33x 10676 10675 2026-08-25T23:38:28Z RAPTOR7762 18 1 revision imported from [[:commons:Template:ISOdate]] 10675 wikitext text/x-wiki {{#invoke:ISOdate|ISOdate |1 = {{{date|{{{1|}}}}}} |class = {{#if:{{{class|-}}}|{{{class|-}}}|dtstart}}<!-- "class=" is equivalent to "class=-". In case of no "class" parameter use default "class=dtstart" --> |lang = {{#if:{{{lang|{{{2|}}}}}} | {{{lang|{{{2|}}}}}} | {{int:Lang}} }} |case = {{{case|{{{form|}}}}}} |trim_year = {{{trim_year|{{{trim year|100-999}}}}}} }}<noinclude> {{heavily used template}} {{documentation}} </noinclude> kqj28tw3ova94e02dlehqfpf7dor33x Tempilet:Color 10 1329 10687 2022-04-11T09:19:21Z commons>Sarang 0 +font-weight 10687 wikitext text/x-wiki <span style="background:{{{bg|{{{3|transparent}}}}}};{{#invoke:String|replace|color:{{#switch:{{{1}}}|b=#000|w=#FFF|=red|{{{1}}}}};font-weight:{{{bold|{{{b|{{#switch:{{{6}}}|b=7|bold=9|4}}00}}}}}};{{{style|{{{css|{{{5|}}}}}}}}}|[ ]||plain=false}}" title="{{{title|{{{bg|{{{4|transparent}}}}}}}}}">{{{2|{{0|!}}}}}</span><noinclude> {{documentation}} </noinclude> rc0p6n6hke6px3112zdnsa1l2gnuhtn 10688 10687 2026-08-25T23:38:28Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Color]] 10687 wikitext text/x-wiki <span style="background:{{{bg|{{{3|transparent}}}}}};{{#invoke:String|replace|color:{{#switch:{{{1}}}|b=#000|w=#FFF|=red|{{{1}}}}};font-weight:{{{bold|{{{b|{{#switch:{{{6}}}|b=7|bold=9|4}}00}}}}}};{{{style|{{{css|{{{5|}}}}}}}}}|[ ]||plain=false}}" title="{{{title|{{{bg|{{{4|transparent}}}}}}}}}">{{{2|{{0|!}}}}}</span><noinclude> {{documentation}} </noinclude> rc0p6n6hke6px3112zdnsa1l2gnuhtn Tempilet:Nobold 10 1330 10691 2024-08-28T08:27:12Z commons>CptViraj 0 Protected "[[Template:Nobold]]": [[Special:MyLanguage/Commons:Protection policy|Widely used template]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite)) 10691 wikitext text/x-wiki <{{{tag|span}}} style="font-weight:normal">{{{1<noinclude>|unbolds the text given with 1=[[Category:Formatting templates|{{PAGENAME}}]]</noinclude>}}}</{{{tag|span}}}> acoimcdc0kucys901f39nptjdmjlxby 10692 10691 2026-08-25T23:38:29Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Nobold]] 10691 wikitext text/x-wiki <{{{tag|span}}} style="font-weight:normal">{{{1<noinclude>|unbolds the text given with 1=[[Category:Formatting templates|{{PAGENAME}}]]</noinclude>}}}</{{{tag|span}}}> acoimcdc0kucys901f39nptjdmjlxby Tempilet:Iffile 10 1331 10693 2019-12-10T06:46:38Z commons>~riley 0 Changed protection level for "[[Template:Iffile]]": Allow template editors ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite)) 10693 wikitext text/x-wiki {{#ifexpr:{{NAMESPACENUMBER}}=6|{{{1|}}}|{{{2|}}}}}<noinclude> {{heavily used template}} {{Documentation}} </noinclude> j62gzdl49t92eveqpug7w94j2um948a 10694 10693 2026-08-25T23:38:29Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Iffile]] 10693 wikitext text/x-wiki {{#ifexpr:{{NAMESPACENUMBER}}=6|{{{1|}}}|{{{2|}}}}}<noinclude> {{heavily used template}} {{Documentation}} </noinclude> j62gzdl49t92eveqpug7w94j2um948a Tempilet:Mono/styles.css 10 1332 10695 2019-08-07T00:52:44Z commons>XaosoaX 0 [[COM:AES|←]]Created page with '/* Styling for Template:Mono */ .monospaced { /* Keep it like this: "monospace, monospace". Those are the rules from [[w:en:WP:MONO]]. */ font-family: monospa...' 10695 sanitized-css text/css /* Styling for Template:Mono */ .monospaced { /* Keep it like this: "monospace, monospace". Those are the rules from [[w:en:WP:MONO]]. */ font-family: monospace, monospace; } 7nftleo0w4bj250ouquesl28ukyzx56 10696 10695 2026-08-25T23:38:29Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Mono/styles.css]] 10695 sanitized-css text/css /* Styling for Template:Mono */ .monospaced { /* Keep it like this: "monospace, monospace". Those are the rules from [[w:en:WP:MONO]]. */ font-family: monospace, monospace; } 7nftleo0w4bj250ouquesl28ukyzx56 Tempilet:W 10 1333 10703 2023-07-28T19:13:19Z commons>JoKalliauer 0 Changed protection settings for "[[Template:W]]": [[Special:MyLanguage/Commons:Protection policy|High traffic page]] ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite)) 10703 wikitext text/x-wiki {{#switch:{{padleft:|1|{{{1|}}}}}|&#91;|&#123;=[[Category:Maintenance:Template W error]]{{color|red|'''Template W: parameter error'''}}<!-- -->|{{#switch:{{{link|&#06;}}}|none=<!-- -->|no|n|-|={{#if:{{{2|}}}|{{#switch:{{{2}}}|+|c={{{1}}}|{{{2}}}}}|{{{1|{{Projectname|w}}}}}}}<!-- option for only text without link -->|&#06;=[[:{{#if:{{{3|}}}|{{#switch:{{{3}}}|+|c|C=w|{{{3}}}}}|w}}:{{{1|{{Projectname|w}}}}}<!-- (w=en) -->|{{<includeonly>safesubst:</includeonly>#if:{{{2|}}}|{{#switch:{{{2}}}|+|c={{{1}}}|{{{2}}}}}|{{{1|{{Projectname|w}}}}}<!-- -->|{{#if:{{NAMESPACE:{{{1|}}}}}|{{NAMESPACE:{{{1|}}}}}''''':'''''{{PAGENAME:{{{1|{{Projectname|w}}}}}}}<!-- &#58; -->|{{#ifeq:{{padleft:|1|{{{1|W}}}}}|{{lc:{{padleft:|1|{{PAGENAME:{{{1|W}}}}}}}}}<!--"ℓ" -->|{{lcfirst:{{PAGENAME:{{{1|{{Projectname|w}}}}}}}}}<!-- first character lower case -->|{{PAGENAME:{{{1|{{Projectname|w}}}}} }}}}}}}}]]}}<!-- -->{{#switch:+|{{{2}}}|{{{3}}}|{{{4}}}=[[Category:{{PAGENAME:{{{1}}}}}]]<!-- -->|{{#switch:c|{{{2}}}|{{{3}}}|{{{4}}}=[[Category:{{Strip|{{PAGENAME:{{{1}}}}}|2={{{+|0}}}|3={{{-|0}}}|h={{{h|}}}|t={{{t|}}}}}]]<!-- -->|{{#switch:C|{{{3}}}|{{{4}}}={{#if:{{{2|}}}|[[Category:{{Strip|{{PAGENAME:{{{2}}}}}|2={{{+|0}}}|3={{{-|0}}}|h={{{h|}}}|t={{{t|}}}}}]]}}}}}}}}<!-- -->}}<noinclude> {{documentation}} </noinclude> s65gzl2fzj2ztecp2gctn8ljm6swx3l 10704 10703 2026-08-25T23:38:29Z RAPTOR7762 18 1 revision imported from [[:commons:Template:W]] 10703 wikitext text/x-wiki {{#switch:{{padleft:|1|{{{1|}}}}}|&#91;|&#123;=[[Category:Maintenance:Template W error]]{{color|red|'''Template W: parameter error'''}}<!-- -->|{{#switch:{{{link|&#06;}}}|none=<!-- -->|no|n|-|={{#if:{{{2|}}}|{{#switch:{{{2}}}|+|c={{{1}}}|{{{2}}}}}|{{{1|{{Projectname|w}}}}}}}<!-- option for only text without link -->|&#06;=[[:{{#if:{{{3|}}}|{{#switch:{{{3}}}|+|c|C=w|{{{3}}}}}|w}}:{{{1|{{Projectname|w}}}}}<!-- (w=en) -->|{{<includeonly>safesubst:</includeonly>#if:{{{2|}}}|{{#switch:{{{2}}}|+|c={{{1}}}|{{{2}}}}}|{{{1|{{Projectname|w}}}}}<!-- -->|{{#if:{{NAMESPACE:{{{1|}}}}}|{{NAMESPACE:{{{1|}}}}}''''':'''''{{PAGENAME:{{{1|{{Projectname|w}}}}}}}<!-- &#58; -->|{{#ifeq:{{padleft:|1|{{{1|W}}}}}|{{lc:{{padleft:|1|{{PAGENAME:{{{1|W}}}}}}}}}<!--"ℓ" -->|{{lcfirst:{{PAGENAME:{{{1|{{Projectname|w}}}}}}}}}<!-- first character lower case -->|{{PAGENAME:{{{1|{{Projectname|w}}}}} }}}}}}}}]]}}<!-- -->{{#switch:+|{{{2}}}|{{{3}}}|{{{4}}}=[[Category:{{PAGENAME:{{{1}}}}}]]<!-- -->|{{#switch:c|{{{2}}}|{{{3}}}|{{{4}}}=[[Category:{{Strip|{{PAGENAME:{{{1}}}}}|2={{{+|0}}}|3={{{-|0}}}|h={{{h|}}}|t={{{t|}}}}}]]<!-- -->|{{#switch:C|{{{3}}}|{{{4}}}={{#if:{{{2|}}}|[[Category:{{Strip|{{PAGENAME:{{{2}}}}}|2={{{+|0}}}|3={{{-|0}}}|h={{{h|}}}|t={{{t|}}}}}]]}}}}}}}}<!-- -->}}<noinclude> {{documentation}} </noinclude> s65gzl2fzj2ztecp2gctn8ljm6swx3l Tempilet:T0 10 1334 10705 2024-08-28T08:28:15Z commons>CptViraj 0 Protected "[[Template:T0]]": [[Special:MyLanguage/Commons:Protection policy|Widely used template]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite)) 10705 wikitext text/x-wiki {{T/main |1 = {{{1|}}} |2 = {{{2|}}} |3 = {{#if: {{{lang|}}} | {{{lang|}}} |{{{3|}}} }} |4 = {{{4|}}} |5 = {{{5|}}} |incl = {{#if: {{{incl|}} | {{{incl|}} | {{#if: {{{i|}}} | {{{i|}}} | 8 }} }} |code = {{{code|}}} |link = {{{link|}}} |case = {{{case|}}} |i18n = {{{i18n|}}} |parm = {{{parm|}}} |full = {{{full|}}} }}<noinclude>{{Documentation|Template:T/doc}}</noinclude> mw5bs7tzhda3vixwsk9pg8ex6cmilxe 10706 10705 2026-08-25T23:38:29Z RAPTOR7762 18 1 revision imported from [[:commons:Template:T0]] 10705 wikitext text/x-wiki {{T/main |1 = {{{1|}}} |2 = {{{2|}}} |3 = {{#if: {{{lang|}}} | {{{lang|}}} |{{{3|}}} }} |4 = {{{4|}}} |5 = {{{5|}}} |incl = {{#if: {{{incl|}} | {{{incl|}} | {{#if: {{{i|}}} | {{{i|}}} | 8 }} }} |code = {{{code|}}} |link = {{{link|}}} |case = {{{case|}}} |i18n = {{{i18n|}}} |parm = {{{parm|}}} |full = {{{full|}}} }}<noinclude>{{Documentation|Template:T/doc}}</noinclude> mw5bs7tzhda3vixwsk9pg8ex6cmilxe Tempilet:F 10 1335 10707 2023-06-18T18:54:07Z commons>WOSlinker 0 remove any px in param 3 10707 wikitext text/x-wiki <onlyinclude>{{#ifeq:{{{1}}}|M|{{#invoke:Dsize|f_name|{{PAGENAME}}|{{{2|}}}|{{{3|}}}}}<!-- Parameter "M" can have a parameter "+x" and/or "-y" to strip x characters left, and/or y characters right, from the filename -->|{{{p|}}}{{#if:{{{by|}}}|{{#ifeq:{{int:lang}}|bn|{{F/beng|{{{by}}}}}}}}}{{#if:{{{3|{{{d|}}}}}}<!-- -->|{{#switch:{{lc:{{{3|}}}}}<!-- case1: file name (p#3=FFL?) -->|g={{F/layout|{{{1|}}}|{{{2|}}}|g|{{{4|}}}|{{{5|}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|l={{{l|}}}|Y=1}}<!--c1 G -->|n|c|d|f|x|u|i|s|h|w|v|p={{F/layout|{{#switch:{{NAMESPACENUMBER}}{{{1|}}}|6*|7*={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}<!--c1 -->|{{{2|}}}|{{lc:{{{3}}}}}|{{{4|}}}|{{{5|}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|l={{{l|}}}|Y=1}}<!-- -->|/=<!-- #default= -->|{{#if:{{{l|}}}|<small>''Can't [[Template:F|display]]''&nbsp; "[[:{{{l}}}:File:{{PAGENAME:{{{1}}}}}|<u>{{{l}}}:</u>{{PAGENAME:{{{1}}}}}]]"</small><!-- -->|{{#ifeq:{{{2}}}|G|{{F/layout|{{{1}}}|{{{d|{{{3}}}}}}|g|{{{4|}}}|Y=2}}<!-- case2: gallery function "G" p#2 -->|{{#switch:l|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<!-- case3: file name left (not option "l") -->|{{#switch:u|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<!-- (and also not option "u") -->|{{F/layout|{{#switch:{{NAMESPACENUMBER}}{{{1|}}}|6*|7*={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}<!--c3 -->|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5|}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|l={{{l|}}}|c=3}}<!-- -->{{#switch:Z|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=|{{#switch:{{{3}}}|+|-=|<!-- -->{{#if:{{{T|}}}|&nbsp;}}{{{t|{{{T|&#58;&nbsp;}}}}}}}}}}<!-- -->}}}}<!-- -->{{#switch:u|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<div><!-- (option "u": create a table) --> {{(!}} class="multicol" role="presentation" style="float:{{#switch:r|{{{2}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=right;padding:0 {{{t|0}}}px 0 0<!-- -->|left;padding:0 0 0 {{{t|0}}}px}};{{#if:{{{3|}}}|width:{{replace text|{{{3}}}|px|}}px;}}table-layout:fixed;border:0;text-align:center;{{{style|}}}"<br> {{!}}- style="vertical-align:top"<br> {{!}}}}<!-- now display the image: d/3 px: display the image -->{{#if:{{#switch:{{{d|∅}}}|0|-|n|=|∅={{#if:{{{3|}}}|{{#switch:{{{3|}}}|0|b|l|n|r|u|Z|+|-=|<!-- -->{{#ifeq:/|{{padleft:|1|{{{3}}}}}||1}}}}}}|#default=1}}<!-- d/3 px: display the file -->|{{#if:{{{1|}}}|[[File:{{#switch:{{NAMESPACENUMBER}}{{{1|}}}|6*|7*={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}<!-- -->{{#if:{{{lang|}}}|{{!}}lang={{{lang}}}}}<!-- now occurs the display of the image -->{{#switch:{{{alt|∅}}}|∅=<!--missing -->|#default={{!}}alt={{{alt|}}}}}<!-- -->{{#switch:{{{link|∅}}}|∅=|*={{!}}link=File:{{PAGENAME:{{{1}}}}}|#default={{!}}link={{{link}}}}}<!-- -->{{#switch:{{{title|∅}}}|∅=<!--missing-->|#default={{!}}title={{{title}}}}}<!-- -->{{!}}{{#switch:{{{d|∅}}}|0|-|n|=|∅={{#if:{{{3|}}}|{{#switch:{{{3|}}}|b|l|n|r|u|Z|+|-=<!-- -->|{{#ifeq:/|{{padleft:|1|{{{3}}}}}||{{replace text|{{{3}}}|px|}}px}}}}}}|#default={{{d}}}px}}<!-- -->{{#switch:b|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}={{!}}border}}<!-- -->{{#switch:c|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}={{!}}center}}<!-- -->{{#switch:r|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}={{!}}right}}<!-- -->{{#if:{{{11|}}}|{{!}}{{{11}}}}}{{#if:{{{12|}}}|{{!}}{{{12}}}}}<!-- -->{{#if:{{{13|}}}|{{!}}{{{13}}}}}{{#if:{{{14|}}}|{{!}}{{{14}}}}}]]}}}}<!-- Extended image syntax -->{{#switch:u|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<!-- (option "u": continue table) --><br> {{!}}- {{!}}<!-- -->{{F/layout|{{#switch:{{NAMESPACENUMBER}}{{{1|}}}|6*|7*={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}<!--c4 -->|l|{{{3|}}}|{{{3}}}|{{{4|}}}|{{{5|}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|l={{{l|}}}|c=4}}<!-- -->|<!-- -->{{#switch:l|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<!-- case4: file name right (option "l") -->{{#if:{{{T|}}}|&nbsp;}}{{{t|{{{T|}}}}}}<!-- -->{{F/layout|{{#switch:{{NAMESPACENUMBER}}{{{1|}}}|6*|7*={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}<!--c4 -->|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5|}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|l={{{l|}}}|c=4}}<!-- -->}} }}}}}}}}<!-- without parameter 3: -->|{{#switch:{{lc:{{{2|}}}}}<!-- case5: file name (p#2=FFL?) -->|g={{F/layout|{{{1}}}||g|{{{4|}}}|Y=5}}<!--c5 "G" -->|n|c|d|f|l|x|u|i|s|h|w|v|p={{F/layout|{{#switch:{{NAMESPACENUMBER}}{{{1|}}}|6*|7*={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}<!-- -->||{{lc:{{{2}}}}}|{{{4|}}}|l={{{l|}}}|t={{{t|}}}|Y=5}}<!-- c5 case6: file name (this is the default/standard) -->|{{F/layout|{{#switch:{{NAMESPACENUMBER}}{{{1|}}}|6*|7*={{PAGENAME}}|{{PAGENAME:{{{1<noinclude>|Sample.svg</noinclude>}}}}}}}<!--c6 -->|{{#ifeq:/|{{padleft:|1|{{{2}}}}}||{{{2|}}}}}|{{{3}}}|{{{4|}}}|{{{5|}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|l={{{l|}}}|c=6}}}}<!-- -->}}<!--endif 3 -->{{#switch:{{{by|}}}|:=|={{#switch:/|{{padleft:|1|{{{2}}}}}|{{padleft:|1|{{{3}}}}}|{{padleft:|1|{{{4}}}}}<!-- -->|{{padleft:|1|{{{5}}}}}|{{padleft:|1|{{{6}}}}}|{{padleft:|1|{{{7}}}}}|{{padleft:|1|{{{8}}}}}|{{padleft:|1|{{{9}}}}}<!-- -->=&nbsp;''{{I18n/by}}'' {{U{{{m|{{{u|}}}}}}|{{#invoke:Iteration|byuser}}}}}}<!-- get user id when no "by=" and "/" at par3...9 -->|{{#ifeq:{{int:lang}}|bn||&nbsp;''{{I18n/by}}'' {{#switch:{{padleft:|1|{{{by}}}}}|&|(|.|<|[|&#123;=<!-- use specified "by=" -->{{#invoke:Igenmod|remprf|{{{by}}}}}|{{U{{{m|{{{u|}}}}}}|{{{by}}}|{{#switch:+|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=+<!-- -->|{{#switch:-|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=-}}}}}}}}}}<!-- -->}}{{#switch:u|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<!-- (option "u": terminate table) --><br> {{!)}}</div>}}}}</onlyinclude> {{documentation}} 0039sylhbhy0vby4iq387bjr819ktba 10708 10707 2026-08-25T23:38:29Z RAPTOR7762 18 1 revision imported from [[:commons:Template:F]] 10707 wikitext text/x-wiki <onlyinclude>{{#ifeq:{{{1}}}|M|{{#invoke:Dsize|f_name|{{PAGENAME}}|{{{2|}}}|{{{3|}}}}}<!-- Parameter "M" can have a parameter "+x" and/or "-y" to strip x characters left, and/or y characters right, from the filename -->|{{{p|}}}{{#if:{{{by|}}}|{{#ifeq:{{int:lang}}|bn|{{F/beng|{{{by}}}}}}}}}{{#if:{{{3|{{{d|}}}}}}<!-- -->|{{#switch:{{lc:{{{3|}}}}}<!-- case1: file name (p#3=FFL?) -->|g={{F/layout|{{{1|}}}|{{{2|}}}|g|{{{4|}}}|{{{5|}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|l={{{l|}}}|Y=1}}<!--c1 G -->|n|c|d|f|x|u|i|s|h|w|v|p={{F/layout|{{#switch:{{NAMESPACENUMBER}}{{{1|}}}|6*|7*={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}<!--c1 -->|{{{2|}}}|{{lc:{{{3}}}}}|{{{4|}}}|{{{5|}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|l={{{l|}}}|Y=1}}<!-- -->|/=<!-- #default= -->|{{#if:{{{l|}}}|<small>''Can't [[Template:F|display]]''&nbsp; "[[:{{{l}}}:File:{{PAGENAME:{{{1}}}}}|<u>{{{l}}}:</u>{{PAGENAME:{{{1}}}}}]]"</small><!-- -->|{{#ifeq:{{{2}}}|G|{{F/layout|{{{1}}}|{{{d|{{{3}}}}}}|g|{{{4|}}}|Y=2}}<!-- case2: gallery function "G" p#2 -->|{{#switch:l|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<!-- case3: file name left (not option "l") -->|{{#switch:u|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<!-- (and also not option "u") -->|{{F/layout|{{#switch:{{NAMESPACENUMBER}}{{{1|}}}|6*|7*={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}<!--c3 -->|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5|}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|l={{{l|}}}|c=3}}<!-- -->{{#switch:Z|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=|{{#switch:{{{3}}}|+|-=|<!-- -->{{#if:{{{T|}}}|&nbsp;}}{{{t|{{{T|&#58;&nbsp;}}}}}}}}}}<!-- -->}}}}<!-- -->{{#switch:u|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<div><!-- (option "u": create a table) --> {{(!}} class="multicol" role="presentation" style="float:{{#switch:r|{{{2}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=right;padding:0 {{{t|0}}}px 0 0<!-- -->|left;padding:0 0 0 {{{t|0}}}px}};{{#if:{{{3|}}}|width:{{replace text|{{{3}}}|px|}}px;}}table-layout:fixed;border:0;text-align:center;{{{style|}}}"<br> {{!}}- style="vertical-align:top"<br> {{!}}}}<!-- now display the image: d/3 px: display the image -->{{#if:{{#switch:{{{d|∅}}}|0|-|n|=|∅={{#if:{{{3|}}}|{{#switch:{{{3|}}}|0|b|l|n|r|u|Z|+|-=|<!-- -->{{#ifeq:/|{{padleft:|1|{{{3}}}}}||1}}}}}}|#default=1}}<!-- d/3 px: display the file -->|{{#if:{{{1|}}}|[[File:{{#switch:{{NAMESPACENUMBER}}{{{1|}}}|6*|7*={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}<!-- -->{{#if:{{{lang|}}}|{{!}}lang={{{lang}}}}}<!-- now occurs the display of the image -->{{#switch:{{{alt|∅}}}|∅=<!--missing -->|#default={{!}}alt={{{alt|}}}}}<!-- -->{{#switch:{{{link|∅}}}|∅=|*={{!}}link=File:{{PAGENAME:{{{1}}}}}|#default={{!}}link={{{link}}}}}<!-- -->{{#switch:{{{title|∅}}}|∅=<!--missing-->|#default={{!}}title={{{title}}}}}<!-- -->{{!}}{{#switch:{{{d|∅}}}|0|-|n|=|∅={{#if:{{{3|}}}|{{#switch:{{{3|}}}|b|l|n|r|u|Z|+|-=<!-- -->|{{#ifeq:/|{{padleft:|1|{{{3}}}}}||{{replace text|{{{3}}}|px|}}px}}}}}}|#default={{{d}}}px}}<!-- -->{{#switch:b|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}={{!}}border}}<!-- -->{{#switch:c|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}={{!}}center}}<!-- -->{{#switch:r|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}={{!}}right}}<!-- -->{{#if:{{{11|}}}|{{!}}{{{11}}}}}{{#if:{{{12|}}}|{{!}}{{{12}}}}}<!-- -->{{#if:{{{13|}}}|{{!}}{{{13}}}}}{{#if:{{{14|}}}|{{!}}{{{14}}}}}]]}}}}<!-- Extended image syntax -->{{#switch:u|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<!-- (option "u": continue table) --><br> {{!}}- {{!}}<!-- -->{{F/layout|{{#switch:{{NAMESPACENUMBER}}{{{1|}}}|6*|7*={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}<!--c4 -->|l|{{{3|}}}|{{{3}}}|{{{4|}}}|{{{5|}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|l={{{l|}}}|c=4}}<!-- -->|<!-- -->{{#switch:l|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<!-- case4: file name right (option "l") -->{{#if:{{{T|}}}|&nbsp;}}{{{t|{{{T|}}}}}}<!-- -->{{F/layout|{{#switch:{{NAMESPACENUMBER}}{{{1|}}}|6*|7*={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}<!--c4 -->|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5|}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|l={{{l|}}}|c=4}}<!-- -->}} }}}}}}}}<!-- without parameter 3: -->|{{#switch:{{lc:{{{2|}}}}}<!-- case5: file name (p#2=FFL?) -->|g={{F/layout|{{{1}}}||g|{{{4|}}}|Y=5}}<!--c5 "G" -->|n|c|d|f|l|x|u|i|s|h|w|v|p={{F/layout|{{#switch:{{NAMESPACENUMBER}}{{{1|}}}|6*|7*={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}<!-- -->||{{lc:{{{2}}}}}|{{{4|}}}|l={{{l|}}}|t={{{t|}}}|Y=5}}<!-- c5 case6: file name (this is the default/standard) -->|{{F/layout|{{#switch:{{NAMESPACENUMBER}}{{{1|}}}|6*|7*={{PAGENAME}}|{{PAGENAME:{{{1<noinclude>|Sample.svg</noinclude>}}}}}}}<!--c6 -->|{{#ifeq:/|{{padleft:|1|{{{2}}}}}||{{{2|}}}}}|{{{3}}}|{{{4|}}}|{{{5|}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|l={{{l|}}}|c=6}}}}<!-- -->}}<!--endif 3 -->{{#switch:{{{by|}}}|:=|={{#switch:/|{{padleft:|1|{{{2}}}}}|{{padleft:|1|{{{3}}}}}|{{padleft:|1|{{{4}}}}}<!-- -->|{{padleft:|1|{{{5}}}}}|{{padleft:|1|{{{6}}}}}|{{padleft:|1|{{{7}}}}}|{{padleft:|1|{{{8}}}}}|{{padleft:|1|{{{9}}}}}<!-- -->=&nbsp;''{{I18n/by}}'' {{U{{{m|{{{u|}}}}}}|{{#invoke:Iteration|byuser}}}}}}<!-- get user id when no "by=" and "/" at par3...9 -->|{{#ifeq:{{int:lang}}|bn||&nbsp;''{{I18n/by}}'' {{#switch:{{padleft:|1|{{{by}}}}}|&|(|.|<|[|&#123;=<!-- use specified "by=" -->{{#invoke:Igenmod|remprf|{{{by}}}}}|{{U{{{m|{{{u|}}}}}}|{{{by}}}|{{#switch:+|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=+<!-- -->|{{#switch:-|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=-}}}}}}}}}}<!-- -->}}{{#switch:u|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<!-- (option "u": terminate table) --><br> {{!)}}</div>}}}}</onlyinclude> {{documentation}} 0039sylhbhy0vby4iq387bjr819ktba Tempilet:F/layout 10 1336 10709 2024-08-28T17:48:46Z commons>CptViraj 0 Protected "[[Template:F/layout]]": [[Special:MyLanguage/Commons:Protection policy|Widely used template]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite)) 10709 wikitext text/x-wiki <includeonly>{{#switch:Z|{{{2}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<!-- -->|{{#if:{{{Y|}}}|{{#switch:{{{3|}}}<!-- -->|c={{#invoke:File|pageCount|file={{{1}}}}}<!-- -->|d={{#invoke:File|dateWorkCreated|file={{{1}}}}}<!-- -->|f={{Validextension|{{{1}}}|{{#invoke:File|woExtension|file={{{1}}}}}}}<!-- -->|i={{#ifexist:File:{{{1}}}|1}}<!-- -->|l=[[:File:{{{1}}}|{{#invoke:File|woExtension|file={{{1}}}}}]]<!-- like "F" but linked -->|x={{Validextension|{{{1}}}|{{#invoke:File|woExtension|file={{{1}}}}}|ext}}<!-- -->|u={{#if:{{Validextension|{{{1}}}|{{#invoke:File|woExtension|file={{{1}}}}}|ext}}<!-- -->|{{#invoke:File|csExtension|file={{{1}}}}}|{{{2|png}}}}}<!-- return extension as-it-is, or "png"<!-- -->|g={{#ifeq:{{{2}}}|-<!-- -->|{{#tag:gallery|{{{1}}}{{!}}{{#switch:{{{Y}}} |1=<div class="center">File:{{{1}}}</div><!-- {{F|filename|-|G|px}} with centering --> |2=File:{{{1}}}}}<!-- {{F|filename|G|-|px}} without centering --> |widths={{#if:{{{4|}}}|{{#invoke:Galeria|converse|{{{4}}}|w}}|120}}<!-- -->|heights={{#if:{{{4|}}}|{{#invoke:Galeria|converse|{{{4}}}|h}}|120}} }} |{{#tag:gallery|{{{1}}}{{!}}{{#switch:{{{Y}}} |1=<div class="center">{{{2|}}}</div><!-- {{F|filename|caption|G|px}} with centering --> |2={{{2|}}}<!-- {{F|filename|G|caption|px}} without centering --> |5=<div class="center">{{{5|}}}</div>}}<!-- {{F|filename|G|px}} with centering 5 --> |widths={{#if:{{{4|}}}|{{#invoke:Galeria|converse|{{{4}}}|w}}|120}}<!-- default width -->|heights={{#if:{{{4|}}}|{{#invoke:Galeria|converse|{{{4}}}|h}}|120}} }}}}<!-- end 'g' -->|i={{#invoke:File|fileExistsRelaxed|file={{{1}}}}}<!-- -->|s={{#invoke:File|size|file={{{1}}}}}<!-- -->|h={{#invoke:File|height|file={{{1}}}}}<!-- -->|w={{#invoke:File|width|file={{{1}}}}}<!-- -->|v={{#invoke:File|valid|file={{{1}}}}}<!-- -->|p={{PAGESIZE:File:{{{1}}}}}<!-- -->|n={{#switch:{{{2|}}}|n|b|l|r|+|-|={{#if:{{{1|}}}|{{PAGENAME:{{{1}}}}}<!-- -->|<span style="font-weight:900;background:#FF8"> no name </span>}}|{{{2}}}}}}}<!-- -->|{{#switch:n|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<!-- no 'Y': -->{{#switch:+|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=File:<!-- -->|{{#switch:-|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=File:}}}}<!-- -->{{#switch:{{{2|}}}|n|b|l|r|+|-|={{#if:{{{1|}}}|{{PAGENAME:{{{1}}}}}<!-- -->|<span style="font-weight:900;background:#FF8"> no name </span>}}|{{{2}}}}}<!-- -->|{{#if:{{{1|}}}|{{#if:{{{l|}}}|<span style="border:1px dotted #FC0;padding:0 4px">}}<!-- -->{{#switch:-|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<!-- -->{{#switch:+|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=|File:}}}}<!-- -->{{#switch:{{{1}}}|F|X|U|S={{#switch:{{{1}}}<!-- NAMESPACENUMBER=6 -->|F={{Validextension|{{PAGENAME}}|{{#invoke:File|woExtension|file={{PAGENAME}}}}}}<!-- -->|X={{Validextension|{{PAGENAME}}|{{#invoke:File|woExtension|file={{PAGENAME}}}}|ext}}<!-- -->|U={{#if:{{Validextension|{{PAGENAME}}|{{#invoke:File|woExtension|file={{PAGENAME}}}}|ext}}<!-- -->|{{#invoke:File|csExtension|file={{PAGENAME}}}}|none}}<!-- -->|S={{#invoke:File|size|file={{PAGENAME}}}}<!-- -->}}|<!-- -->[[:{{#if:{{{l|}}}|{{{l}}}:}}File:{{{1}}}<!-- -->|{{#switch:+|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=File:}}<!-- -->{{#switch:{{{2|}}}|b|l|n|r|u|+|-|={{{1}}}|{{{2}}}}}]]<!-- -->{{#if:{{{l|}}}|</span>}} }}<!--fxus -->|<span style="font-weight:900;background:#FF8;color:#F00"> ''no name<!-- -->{{#ifeq:{{NAMESPACENUMBER}}|10||[[Category:Commons:Missing file name in template F|{{PAGENAME}}]] |.}}''<!-- --></span>}} }}}} }}</includeonly><noinclude> Subtemplate to {{Tl|F}}, invoked from either of 6 positions but only once :performs display of the file name (2{{exp|nd}} name as given, without <small><code>PAGENAME:</code></small>) :Parameters: 1, 2, 3, 4, 5, 6, 7, 8; l; internal: Y :When parameter 1 is missing, categorizing to {{C|Commons:Missing file name in template F}} occurs {{Heavily used template|Template talk:F}} Special function: just parameter 1 is F,X,U,S: like File Function Letter for <nowiki>{{PAGENAME}}</nowiki> [[Category:Subtemplates]] </noinclude> osistybm8nfh0xczje47xt86wyhsrwy 10710 10709 2026-08-25T23:38:29Z RAPTOR7762 18 1 revision imported from [[:commons:Template:F/layout]] 10709 wikitext text/x-wiki <includeonly>{{#switch:Z|{{{2}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<!-- -->|{{#if:{{{Y|}}}|{{#switch:{{{3|}}}<!-- -->|c={{#invoke:File|pageCount|file={{{1}}}}}<!-- -->|d={{#invoke:File|dateWorkCreated|file={{{1}}}}}<!-- -->|f={{Validextension|{{{1}}}|{{#invoke:File|woExtension|file={{{1}}}}}}}<!-- -->|i={{#ifexist:File:{{{1}}}|1}}<!-- -->|l=[[:File:{{{1}}}|{{#invoke:File|woExtension|file={{{1}}}}}]]<!-- like "F" but linked -->|x={{Validextension|{{{1}}}|{{#invoke:File|woExtension|file={{{1}}}}}|ext}}<!-- -->|u={{#if:{{Validextension|{{{1}}}|{{#invoke:File|woExtension|file={{{1}}}}}|ext}}<!-- -->|{{#invoke:File|csExtension|file={{{1}}}}}|{{{2|png}}}}}<!-- return extension as-it-is, or "png"<!-- -->|g={{#ifeq:{{{2}}}|-<!-- -->|{{#tag:gallery|{{{1}}}{{!}}{{#switch:{{{Y}}} |1=<div class="center">File:{{{1}}}</div><!-- {{F|filename|-|G|px}} with centering --> |2=File:{{{1}}}}}<!-- {{F|filename|G|-|px}} without centering --> |widths={{#if:{{{4|}}}|{{#invoke:Galeria|converse|{{{4}}}|w}}|120}}<!-- -->|heights={{#if:{{{4|}}}|{{#invoke:Galeria|converse|{{{4}}}|h}}|120}} }} |{{#tag:gallery|{{{1}}}{{!}}{{#switch:{{{Y}}} |1=<div class="center">{{{2|}}}</div><!-- {{F|filename|caption|G|px}} with centering --> |2={{{2|}}}<!-- {{F|filename|G|caption|px}} without centering --> |5=<div class="center">{{{5|}}}</div>}}<!-- {{F|filename|G|px}} with centering 5 --> |widths={{#if:{{{4|}}}|{{#invoke:Galeria|converse|{{{4}}}|w}}|120}}<!-- default width -->|heights={{#if:{{{4|}}}|{{#invoke:Galeria|converse|{{{4}}}|h}}|120}} }}}}<!-- end 'g' -->|i={{#invoke:File|fileExistsRelaxed|file={{{1}}}}}<!-- -->|s={{#invoke:File|size|file={{{1}}}}}<!-- -->|h={{#invoke:File|height|file={{{1}}}}}<!-- -->|w={{#invoke:File|width|file={{{1}}}}}<!-- -->|v={{#invoke:File|valid|file={{{1}}}}}<!-- -->|p={{PAGESIZE:File:{{{1}}}}}<!-- -->|n={{#switch:{{{2|}}}|n|b|l|r|+|-|={{#if:{{{1|}}}|{{PAGENAME:{{{1}}}}}<!-- -->|<span style="font-weight:900;background:#FF8"> no name </span>}}|{{{2}}}}}}}<!-- -->|{{#switch:n|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<!-- no 'Y': -->{{#switch:+|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=File:<!-- -->|{{#switch:-|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=File:}}}}<!-- -->{{#switch:{{{2|}}}|n|b|l|r|+|-|={{#if:{{{1|}}}|{{PAGENAME:{{{1}}}}}<!-- -->|<span style="font-weight:900;background:#FF8"> no name </span>}}|{{{2}}}}}<!-- -->|{{#if:{{{1|}}}|{{#if:{{{l|}}}|<span style="border:1px dotted #FC0;padding:0 4px">}}<!-- -->{{#switch:-|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<!-- -->{{#switch:+|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=|File:}}}}<!-- -->{{#switch:{{{1}}}|F|X|U|S={{#switch:{{{1}}}<!-- NAMESPACENUMBER=6 -->|F={{Validextension|{{PAGENAME}}|{{#invoke:File|woExtension|file={{PAGENAME}}}}}}<!-- -->|X={{Validextension|{{PAGENAME}}|{{#invoke:File|woExtension|file={{PAGENAME}}}}|ext}}<!-- -->|U={{#if:{{Validextension|{{PAGENAME}}|{{#invoke:File|woExtension|file={{PAGENAME}}}}|ext}}<!-- -->|{{#invoke:File|csExtension|file={{PAGENAME}}}}|none}}<!-- -->|S={{#invoke:File|size|file={{PAGENAME}}}}<!-- -->}}|<!-- -->[[:{{#if:{{{l|}}}|{{{l}}}:}}File:{{{1}}}<!-- -->|{{#switch:+|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=File:}}<!-- -->{{#switch:{{{2|}}}|b|l|n|r|u|+|-|={{{1}}}|{{{2}}}}}]]<!-- -->{{#if:{{{l|}}}|</span>}} }}<!--fxus -->|<span style="font-weight:900;background:#FF8;color:#F00"> ''no name<!-- -->{{#ifeq:{{NAMESPACENUMBER}}|10||[[Category:Commons:Missing file name in template F|{{PAGENAME}}]] |.}}''<!-- --></span>}} }}}} }}</includeonly><noinclude> Subtemplate to {{Tl|F}}, invoked from either of 6 positions but only once :performs display of the file name (2{{exp|nd}} name as given, without <small><code>PAGENAME:</code></small>) :Parameters: 1, 2, 3, 4, 5, 6, 7, 8; l; internal: Y :When parameter 1 is missing, categorizing to {{C|Commons:Missing file name in template F}} occurs {{Heavily used template|Template talk:F}} Special function: just parameter 1 is F,X,U,S: like File Function Letter for <nowiki>{{PAGENAME}}</nowiki> [[Category:Subtemplates]] </noinclude> osistybm8nfh0xczje47xt86wyhsrwy Tempilet:U 10 1337 10711 2019-06-03T20:16:52Z commons>4nn1l2 0 Fulfilling [[Template:Edit request|edit request]] by [[User:Sarang|Sarang]]. See [[Special:Diff/353013295]] 10711 wikitext text/x-wiki <includeonly>{{{{{|safesubst:}}}#switch:{{{{{|safesubst:}}}#switch:{{{link}}}|no|n=1|0}}{{{{{|safesubst:}}}#switch:+|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}=1|0}}{{{{{|safesubst:}}}#switch:-|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}=1|0}}|000|010|011|100=|{{{{{|safesubst:}}}#switch:{{{case}}}|i={{i18n/namespace|u|lang={{{lang|}}}}}|l=user|n={{i18n/namespace|u|link=no|lang={{{lang|}}}}}|User}}:}}{{{{{|safesubst:}}}#switch:{{{link}}}|no|n=&#8205;{{{{{|safesubst:}}}#switch:{{{2|}}}|+|-|={{{1<noinclude>|User</noinclude>}}}|{{{2}}}}}|[[:{{{{{|safesubst:}}}#if:{{{3|}}}|{{{{{|safesubst:}}}#switch:{{{3}}}|+|-=|{{{3}}}:}}}}User{{{par1|}}}:{{{{{|safesubst:}}}#if:{{{1|}}}|{{{{{|safesubst:}}}#switch:{{{1}}}|+|-={{safesubst:REVISIONUSER}}|{{PAGENAME:{{{1}}}}}{{{par2|}}}}}|{{safesubst:REVISIONUSER}}}}|{{{{{|safesubst:}}}#switch:+|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}={{{{{|safesubst:}}}#switch:{{{case}}}|i|n={{i18n/namespace|u|link=no|lang={{{lang|}}}}}|l=user|User}}:}}{{{{{|safesubst:}}}#if:{{{2|}}}|{{{{{|safesubst:}}}#switch:{{{2}}}|+|-={{{{{|safesubst:}}}#if:{{{1|}}}|{{{{{|safesubst:}}}#switch:{{{1}}}|+|-={{safesubst:REVISIONUSER}}|{{{1}}}}}|{{safesubst:REVISIONUSER}}}}|{{{2}}}}}|{{{{{|safesubst:}}}#if:{{{1|}}}|{{{{{|safesubst:}}}#switch:{{{1}}}|+|-={{safesubst:REVISIONUSER}}|{{{1}}}}}|{{safesubst:REVISIONUSER}}}}}}]]}}{{#ifeq:{{lc:{{padleft:|5|{{{1}}}}}}}|user:|[[Category:Commons User template with namespace]]}}</includeonly><noinclude> {{documentation}} </noinclude> 9f56qtq1ozmy5rrg5s87ig0fzqe00e9 10712 10711 2026-08-25T23:38:29Z RAPTOR7762 18 1 revision imported from [[:commons:Template:U]] 10711 wikitext text/x-wiki <includeonly>{{{{{|safesubst:}}}#switch:{{{{{|safesubst:}}}#switch:{{{link}}}|no|n=1|0}}{{{{{|safesubst:}}}#switch:+|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}=1|0}}{{{{{|safesubst:}}}#switch:-|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}=1|0}}|000|010|011|100=|{{{{{|safesubst:}}}#switch:{{{case}}}|i={{i18n/namespace|u|lang={{{lang|}}}}}|l=user|n={{i18n/namespace|u|link=no|lang={{{lang|}}}}}|User}}:}}{{{{{|safesubst:}}}#switch:{{{link}}}|no|n=&#8205;{{{{{|safesubst:}}}#switch:{{{2|}}}|+|-|={{{1<noinclude>|User</noinclude>}}}|{{{2}}}}}|[[:{{{{{|safesubst:}}}#if:{{{3|}}}|{{{{{|safesubst:}}}#switch:{{{3}}}|+|-=|{{{3}}}:}}}}User{{{par1|}}}:{{{{{|safesubst:}}}#if:{{{1|}}}|{{{{{|safesubst:}}}#switch:{{{1}}}|+|-={{safesubst:REVISIONUSER}}|{{PAGENAME:{{{1}}}}}{{{par2|}}}}}|{{safesubst:REVISIONUSER}}}}|{{{{{|safesubst:}}}#switch:+|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}={{{{{|safesubst:}}}#switch:{{{case}}}|i|n={{i18n/namespace|u|link=no|lang={{{lang|}}}}}|l=user|User}}:}}{{{{{|safesubst:}}}#if:{{{2|}}}|{{{{{|safesubst:}}}#switch:{{{2}}}|+|-={{{{{|safesubst:}}}#if:{{{1|}}}|{{{{{|safesubst:}}}#switch:{{{1}}}|+|-={{safesubst:REVISIONUSER}}|{{{1}}}}}|{{safesubst:REVISIONUSER}}}}|{{{2}}}}}|{{{{{|safesubst:}}}#if:{{{1|}}}|{{{{{|safesubst:}}}#switch:{{{1}}}|+|-={{safesubst:REVISIONUSER}}|{{{1}}}}}|{{safesubst:REVISIONUSER}}}}}}]]}}{{#ifeq:{{lc:{{padleft:|5|{{{1}}}}}}}|user:|[[Category:Commons User template with namespace]]}}</includeonly><noinclude> {{documentation}} </noinclude> 9f56qtq1ozmy5rrg5s87ig0fzqe00e9 Tempilet:Plainlinks 10 1338 10713 2019-12-29T04:53:35Z commons>CptViraj 0 Adding {{Protected}} 10713 wikitext text/x-wiki <span class="plainlinks">[{{{1|}}} {{{2|{{{1|}}}}}}]</span><noinclude> {{documentation}} {{Protected}} </noinclude> q7pu6eybmt87wndvcghphyvwocebpvc 10714 10713 2026-08-25T23:38:29Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Plainlinks]] 10713 wikitext text/x-wiki <span class="plainlinks">[{{{1|}}} {{{2|{{{1|}}}}}}]</span><noinclude> {{documentation}} {{Protected}} </noinclude> q7pu6eybmt87wndvcghphyvwocebpvc Module:Iteration 828 1339 10715 2024-08-28T17:42:00Z commons>CptViraj 0 Protected "[[Module:Iteration]]": [[Special:MyLanguage/Commons:Protection policy|Widely used Lua-module]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite)) 10715 Scribunto text/plain -- This module contains the functions for different templates, solving their iteration problems. local max = math.max local len = string.len local sub = string.sub local find = string.find local format = string.format local insert = table.insert local concat = table.concat local trim = mw.text.trim local split = mw.text.split local titleNew = mw.title.new local char = mw.ustring.char local NL = char(10) local lower = mw.ustring.lower local upper = mw.ustring.upper local gsub = mw.ustring.gsub local Usub = mw.ustring.sub local function Ucfirst(text) text = trim(text) return upper(Usub(text, 1, 1)) .. Usub(text, 2) end ---------------------------------------------------------------------------------------------- -- Template expansion helpers for performance: -- Saves CPU and time resources on large iterations by minimizing repeated recursive calls to -- the parser, eliminating many table constructions/deletion/lookups in memory. Also allows -- reporting CPU/time usage for expansions of costly templates inside recursive calls -- (otherwise all CPU/time is counted inside Lua, those templates are not counted). local currentTitle = mw.title.getCurrentTitle() local currentNs = tonumber(currentTitle.namespace) local currentPage = currentTitle.text local frameCurrent = mw.getCurrentFrame() local expandTemplateCurrent = frameCurrent.expandTemplate local callParserFunctionCurrent = frameCurrent.callParserFunction local contentLanguage = mw.language.getContentLanguage() local langDefault = contentLanguage:getCode() local langUser = lower(trim(callParserFunctionCurrent(frameCurrent, 'Int', 'Lang'))) local transclude = {} local function expand(template, args) transclude.title = template transclude.args = args or {} return expandTemplateCurrent(frameCurrent, transclude) end local argsOne = {} local function expand1(title, arg1) argsOne[1] = arg1 return expand(title, argsOne) end local argsLangUser = { lang = langUser } local argsLangDefault = { lang = langDefault } local argsLangOther = {} local function expandWithLang(template, lang) if type(lang) == 'string' then lang = trim(lang) if lang == '' then lang = nil else lang = lower(lang) end else lang = nil end if not lang or lang == langUser then return expand(template, argsLangUser) elseif lang == langDefault then return expand(template, argsLangDefault) else argsLangOther.lang = lang return expand(template, argsLangOther) end end local Comma, ConjAnd local function commaAnd(isLast) if isLast then if not ConjAnd then ConjAnd = expand('Conj-and', argsLangUser) end return ConjAnd else if not Comma then Comma = expand('Comma', argsLangUser) end return Comma end end ---------------------------------------------------------------------------------------------- local p = {} -- For Template:Ifim. local argsIfim1 = { -- Parameters for expanding 'Template:Ifim1'. '', -- [1] = v '', -- [2] = trim(ppar.p1 or ''), '', -- [3] = trim(ppar.p2 or ''), '', -- [4] = trim(ppar.p3 or ''), '', -- [5] = trim(ppar.p4 or ''), '', -- [6] = trim(ppar.p5 or ''), n = '' -- ['n'] = trim(ppar.fn or ''), } function p.ifim1(frame) local ppar = frameCurrent:getParent().args argsIfim1[2] = trim(ppar.p1 or '') argsIfim1[3] = trim(ppar.p2 or '') argsIfim1[4] = trim(ppar.p3 or '') argsIfim1[5] = trim(ppar.p4 or '') argsIfim1[6] = trim(ppar.p5 or '') argsIfim1.n = trim(ppar.fn or '') local results = {} for _, v in ipairs(ppar) do argsIfim1[1] = v insert(results, expand('Ifim1', argsIfim1)) end return concat(results) end -- function ifim -- For Template:Ifimc. local argsIfim2 = { -- Parameters for expanding 'Template:Ifim2'. '', -- [1] = v1 '', -- [2] = trim(ppar.p1 or ''), '', -- [3] = trim(ppar.p2 or ''), '', -- [4] = trim(ppar.p3 or ''), '', -- [5] = trim(ppar.p4 or ''), '', -- [6] = v } function p.ifim2(frame) local ppar = frameCurrent:getParent().args argsIfim2[2] = trim(ppar.p1 or '') argsIfim2[3] = trim(ppar.p2 or '') argsIfim2[4] = trim(ppar.p3 or '') argsIfim2[5] = trim(ppar.p4 or '') local results = {} for _, v in ipairs(ppar) do argsIfim2[1] = v argsIfim2[6] = v insert(results, expand('Ifim2', argsIfim2)) end return concat(results) end -- function ifim2 -- For Template:Ifimt (param pairs). function p.ifimt(frame) local ppar = frameCurrent:getParent().args argsIfim2[2] = trim(ppar.p1 or '') argsIfim2[3] = trim(ppar.p2 or '') argsIfim2[4] = trim(ppar.p3 or '') argsIfim2[5] = trim(ppar.p4 or '') local v1 = '' local results = {} for _, v in ipairs(ppar) do if v1 == '' then v1 = v else argsIfim2[1] = v1 argsIfim2[6] = v insert(results, expand('Ifim2', argsIfim2)) v1 = '' end end if v1 ~= '' then argsIfim2[6] = '' insert(results, expand('Ifim2', argsIfim2)) -- Last item. end return concat(results) end -- function ifimt ------------------------------------------------------- -- Helper function for: ownbased, and filelist local function samefile(filename, num, first) local filename = trim(filename or '') if sub(filename, 1, 1) == '.' then local part = 'Example' -- default filename if currentNs == 6 or currentNs == 7 then part = split(currentPage , '.', true) part = concat(part, '.', 1, math.max(#part - 1, 1)) end -- Supported short aliases: if filename == '.' then filename = part .. '.png' elseif filename == '.p' then filename = part .. '.png' elseif filename == '.g' then filename = part .. '.gif' elseif filename == '.j' then filename = part .. '.jpg' elseif filename == '.s' then filename = part .. '.svg' -- Exotics: elseif filename == '.m' then filename = part .. '.mid' elseif filename == '.o' then filename = part .. '.ogg' elseif filename == '.t' then filename = part .. '.tif' elseif filename == '.v' then filename = part .. '.wav' elseif filename == '.x' then filename = part .. '.xcf' -- Note: no "short alias" for '.pdf' ('.p' already used for '.png') -- Note: short aliases for a few longer extensions: elseif filename == '.d' then filename = part .. '.djvu' elseif filename == '.w' then filename = part .. '.webp' else filename = part .. filename end elseif filename == '' or filename == '*' then if tonumber(num) == 1 then filename = 'Example.svg' if currentNs == 6 or currentNs == 7 then filename = currentPage end else filename = trim(first) if filename == '' or filename == '*' or sub(filename, 1, 1) == '.' then filename = 'Example.svg' if currentNs == 6 or currentNs == 7 then filename = currentPage end end end end return filename end -- function samefile ---++++++++++++++++++++++++++++++++++++++++++++++++++++ -- Simple iterations - without many params. function p.iterate(frame) local gpar = frame.args -- global parms local template = gpar[1] or '' -- template name local args = { -- Parameters for expanding the given template. '', -- [1] = v gpar[2] or '', gpar[3] or '', } local ppar = frameCurrent:getParent().args local results = {} for _, v in ipairs(ppar) do args[1] = v insert(results, expand(template, args)) end return concat(results) end -- function iterate -- More iterations - for params, param pairs, or n-tuples. function p.iteration(frame) local gpar = frame.args -- Global parms. local vmax = tonumber(gpar.n) or 2 -- Tuple number (default = 2). local vnum = vmax + 1 -- Additional not-changing params. local template = '' -- Template name. local args = {} -- Parameters for expanding the given template. for i, p in ipairs(gpar) do p = trim(p) if i == 1 then template = p else args[vnum] = p vnum = vnum + 1 end end vnum = 1 local ppar = frameCurrent:getParent().args local results = {} -- output for _, v in ipairs(ppar) do args[vnum] = trim(v) vnum = vnum + 1 if vnum > vmax then insert(results, expand(template, args)) vnum = 1 end end return concat(results) end -- function iteration -- For different templates, for general use, e.g. Emoji. function p.parlst(frame) local gpar = frame.args -- Global parameters. local template = trim(gpar.temp or '') local results = {} if template ~= '' then -- Slow expansion (e.g. for template = 'Emoji', which will recurse into iterations calling p.emodis) local ff = trim(gpar.ff or '') -- Inbetween? if ff ~= '' then ff = expand1(ff, trim(gpar.pf or '')) else ff = nil end local nocat = trim(gpar.nocat or '') local args = { -- Parameters for expanding the given template. nocat = nocat ~= '' and nocat or nil } for k, v in pairs(gpar) do v = trim(v) if v ~= '' then args[k] = v end end local count = tonumber(args[1] or '') or 0 for i = 1, (count or 1) do -- default: go 1× for nil if ff then insert(results, ff) end if count then args[1] = i - 1 end insert(results, expand(template, args)) end else -- Template expansion not needed (much faster, without recursed iterations calling p.emodis from a specified template). local count = tonumber(gpar[1] or '') or 0 local code = tonumber(gpar[2] or '', 16) or 0 local catlink = gpar.catlink or '' if catlink == '' then local args = { '<span title="U+', '', -- [2] = format('%04X', code + i - 1) '">', '', -- [4] = char(code + i - 1) '</span>', } for i = 1, count do args[2] = format('%04X', code + i - 1) args[4] = char(code + i - 1) insert(results, concat(args)) end elseif catlink == 'U' then local args = { '[[:Category:U+', '', -- [2] = format('%04X', code + i - 1) '|<span title="U+', '', -- [4] = format('%04X', code + i - 1) '">', '', -- [6] = char(code + i - 1) '</span>]]', } for i = 1, count do args[2] = format('%04X', code + i - 1) args[4] = args[2] args[6] = char(code + i - 1) insert(results, concat(args)) end else local args = { '[[:Category:', '', -- [2] = char(code + i - 1) '|<span title="U+', '', -- [4] = format('%04X', code + i - 1) '">', '', -- [6] = char(code + i - 1) '</span>]]', } for i = 1, count do args[2] = char(code + i - 1) args[4] = format('%04X', code + i - 1) args[6] = args[2] insert(results, concat(args)) end end end return concat(results) end -- function parlst -- Global function for one filename. function p.filename(frame) local gpar = frame.args -- Global parameters. return samefile(trim(gpar[1] or ''), 1) end -- function filename -- For Template:Own based (one filename which is '.'). function p.ownbasby(frame) local gpar = frame.args -- Global parameters. return expand('F', { samefile(gpar[1] or '.', 1), by = trim(gpar[2] or '') }) end -- function ownbasby -- For Template:Own based (horizontal - but vertical when "b1="). function p.ownbased(frame) local ppar = frameCurrent:getParent().args local by0 = trim(ppar.b or ppar.by or ppar.u or ppar.user or '') local dis = trim(ppar.d or ppar.dis or ppar.display or '') local hil = trim(ppar.h or ppar.hilite or '') local lng = trim(ppar.i or ppar.lang or '') local wik = trim(ppar.l or ppar.w or ppar.wiki or '') local nam = trim(ppar.n or ppar.name or '') local opt = trim(ppar.o or ppar.opt or ppar.option or '') local mod = trim(ppar.m or ppar.mod or '') local pr4 = trim(ppar.par4 or ppar.qpar or '') local pr5 = trim(ppar.par5 or ppar.rpar or '') local btab = {} local dtab = {} local htab = {} local itab = {} local ltab = {} local ntab = {} local otab = {} local qtab = {} local rtab = {} local ttab = {} local utab = {} local x = 0 -- running index, can be ~= i local fst = 0 -- first occurrence local cor = 0 local max = 0 local plus = '' for i, v in ipairs(ppar) do if v == '+' then plus = '+' elseif v == '-' then if plus == '' then plus = '-' end else x = x + 1 if fst == 0 then fst = x end local z = tostring(x) btab[x] = trim(ppar['b' .. z] or ppar['by' .. z] or ppar['u' .. z] or '-') dtab[x] = trim(ppar['d' .. z] or '-') htab[x] = trim(ppar['h' .. z] or '-') itab[x] = trim(ppar['i' .. z] or '-') ltab[x] = trim(ppar['l' .. z] or ppar['w' .. z] or '-') ntab[x] = trim(ppar['n' .. z] or '-') otab[x] = trim(ppar['o' .. z] or '-') qtab[x] = trim(ppar['q' .. z] or '-') rtab[x] = trim(ppar['r' .. z] or '-') ttab[x] = trim(ppar['t' .. z] or '-') utab[x] = trim(ppar['m' .. z] or '-') end max = x if v == 'x' or v == 'X' or v == '×' then cor = cor + 1 end end -- for x = 0 if fst > 0 then local mnm = trim(ppar[fst]) end local hls = { '<', '', -- [2] = hl '>', '', -- [4] = (nm ~= '') and nm or vv '</', '', -- [6] = hl '>', } local args = { -- Parameters for expanding 'Template:F'. '', -- [1] = vv, '', -- [2] = nm '', -- [3] = ds '', -- [4] = op '', -- [5] = p4 '', -- [6] = p5 plus, l = '', -- ['l'] = il lang = '', -- ['lang'] = lg p = '', -- ['p'] = px by = '', -- ['by'] = by u = '', -- ['u'] = um } local results = {} for _, v in ipairs(ppar) do if v ~= '+' and v ~= '-' then x = x + 1 local by = btab[x] ~= '-' and btab[x] or by0 local ds = dtab[x] ~= '-' and dtab[x] or dis local hl = htab[x] ~= '-' and htab[x] or hil local il = ltab[x] ~= '-' and ltab[x] or wik local lg = itab[x] ~= '-' and itab[x] or lng local op = otab[x] ~= '-' and otab[x] or opt local p4 = qtab[x] ~= '-' and qtab[x] or pr4 local p5 = rtab[x] ~= '-' and rtab[x] or pr5 local um = utab[x] ~= '-' and utab[x] or mod local nm = ntab[x] ~= '-' and ntab[x] or '' local tx = ttab[x] ~= '-' and ttab[x] or '' local vv = trim(v) if find(vv, '/') == nil then vv = samefile(vv, x, mnm) if x == 1 then mnm = vv end end if vv ~= '' and vv ~= '×' then local px = '' if ppar.b1 == nil then -- parameter missing if x == 1 then px = '&#32;' else insert(results, commaAnd(x == max)) end else -- ppar.b1 is defined (with value, or empty) px = '<br /> <span style=color:#69F>✦ </span>' -- "list" item end if sub(ds, -2) == 'px' then ds = sub(ds, 1, -3) end if nm == '' and x == 1 then nm = nam end if hl ~= '' then hls[2] = hl hls[4] = (nm ~= '') and nm or vv hls[6] = hl nm = concat(hls) end -- if il ~= '' then ds = '' end -- ? (discrepancy) if vv == 'x' then ds = '' end -- this should be the last "file" if by == '' then -- check for abbreviating '/' local sby = find(vv, '/') if sby ~= nil then by = sub(vv, sby + 1) vv = sub(vv, 1, sby - 1) vv = samefile(vv, x, mnm) if x == 1 then mnm = vv end end end args[1] = vv args[2] = nm args[3] = ds args[4] = op args[5] = p4 args[6] = p5 args.l = il args.lang = lg args.p = px args.by = by args.u = um insert(results, expand('F', args)) if tx ~= '' then insert(results, expand1('=', tx)) end end end end -- for if max - cor > 9 then insert(results, expand1('Igen/cat', 'Own-based with more than 9 files|' .. max)) end return concat(results) end -- function ownbased -- Horizontal file list for: Template:SVG lang, Template:Lang gallery, and others. function p.svglang(frame) local gpar = frame.args -- Global parameters. local template = gpar[1] or 'Source thumb' -- 'SVG lang', 'Lang gallery/thumb' local ppar = frameCurrent:getParent().args args = { -- Parameters to expand the given template. trim(ppar.file or ''), '', -- [2] = lang p = trim(ppar.p or ''), } local results = {} for _, v in ipairs(ppar) do local lang = trim(v) if lang > ' ' then args[2] = lang insert(results, trim(expand(template, args))) insert(results, NL) end end return concat(results) end -- function svglang -- Elements count for: Template:SVG lang, Template:Lang gallery, and others. function p.elemct (frame) local ppar = frameCurrent:getParent().args local count = 0 for _, v in ipairs(ppar) do if trim(v) ~= '' then count = count + 1 end end return count end -- function elemct -- Horizontal file list for: Template:Filelist, Template:File. -- Vertical file list for: Template:Other versions, Template:Derived from, Template:Derivative versions. function p.filelist(frame) local gpar = frame.args -- Global parameters. local ppar = frameCurrent:getParent().args local spa = trim(ppar.spa or ppar.s or '-') local pfx = trim(ppar.x or ppar.pfx or ppar.prefix or '') -- "List" item {{Comma}} local dir = gpar[1] or 'none' if dir == 'vert' and pfx == '' then pfx = '\n* ' -- "list" item end local nam = trim(ppar.n or ppar.name or '') local dis = trim(ppar.d or ppar.z or ppar.dis or ppar.display or '') if sub(dis, -2) == 'px' then dis = sub(dis, 1, -3) end local opt = trim(ppar.o or ppar.opt or ppar.option or '') local pr4 = trim(ppar.par4 or ppar.qpar or '') local pr5 = trim(ppar.par5 or ppar.rpar or '') local pr6 = trim(ppar.par6 or ppar.vpar or '') local wik = trim(ppar.w or ppar.k or ppar.wiki or ppar.sisterproject or '') local int = trim(ppar.i or ppar.int or ppar.ind or ppar.inter or '') local pre = trim(ppar.p or ppar.pre or ppar.pretext or '') local by0 = trim(ppar.user or ppar.by or '') local mod = trim(ppar.m or ppar.mod or '') local lnk = trim(ppar.l or ppar.lnk or ppar.link or '') local con = trim(ppar.conj or ppar.con or ppar.c or '') con = sub(con, 1, 1) if ppar.z then if con == '' then con = 'n' end if opt == '' then opt = 'Z' end if pre == '' then pre = '&#32;' end end local vary = trim(ppar.vary or ppar.v or '') -- Variable pattern local var1 = trim(ppar.var1 or ppar.v1 or '') -- Variable filling space before local var2 = trim(ppar.var2 or ppar.v2 or '') -- Variable filling space after local replacement = { (var1 == 'space') and ' ' or var1, '', -- [2] = (sp == '+' and '&#32;' or '') '', -- [3] = vv (var2 == 'space') and ' ' or var2, } local stab = {} local xtab = {} local ntab = {} local dtab = {} local otab = {} local qtab = {} local rtab = {} local vtab = {} local ktab = {} local itab = {} local ptab = {} local btab = {} local utab = {} local ltab = {} local ttab = {} local loop = {} local mnum = 0 -- maximum index reached in the previous tables of indexed parameters for i, v in ipairs(ppar) do local z = tostring(i) stab[i] = trim(ppar['s' .. z] or '~') xtab[i] = trim(ppar['x' .. z] or '-') ntab[i] = trim(ppar['n' .. z] or ppar['l' .. z] or '-') dtab[i] = trim(ppar['d' .. z] or '-') otab[i] = trim(ppar['o' .. z] or '-') qtab[i] = trim(ppar['q' .. z] or '-') rtab[i] = trim(ppar['r' .. z] or '-') vtab[i] = trim(ppar['v' .. z] or '-') ktab[i] = trim(ppar['k' .. z] or '-') itab[i] = trim(ppar['i' .. z] or '-') ptab[i] = trim(ppar['p' .. z] or '-') btab[i] = trim(ppar['b' .. z] or ppar['by' .. z] or '-') utab[i] = trim(ppar['m' .. z] or '-') ltab[i] = trim(ppar['l' .. z] or '-') ttab[i] = trim(ppar['t' .. z] or '-') mnum = i end local args = { -- Parameters for expanding 'Template:F'. '', -- [1] = vv '', -- [2] = nm '', -- [3] = ds '', -- [4] = op '', -- [5] = p4 '', -- [6] = p5 '', -- [7] = p6 l = '', -- ['l'] = pk lang = '', -- ['lang'] = pi p = '', -- ['p'] = pr by = '', -- ['by'] = by u = '', -- ['u'] = um link = '', -- ['link'] = (ln ~= '' and ln or nil) } local results = {} local lcnt = 0 -- Loop count. local i = 1 -- While index. while ppar[i] ~= nil do -- for i, v in ipairs(ppar) do local j = 1 local vv = trim(ppar[i]) if vary ~= '' and sub(vv, 1, 1) == '#' and sub(vv, -1) == '#' then -- Loop processing? loop = split(vv, '#', true--[[plain]]) local llow = tonumber(loop[2]) or -1 local lupp = tonumber(loop[3]) or -1 if llow >= 0 and lupp >= llow then llow = llow + lcnt vv = tostring(llow) lcnt = lcnt + 1 if llow < lupp then j = 0 -- Iterate this index. else lcnt = 0 -- Loop ended. end end end -- End loop processing. if sub(vv, 1, 1) == '"' and sub(vv, -1) == '"' then -- Text processing? insert(results, expand1('=', sub(vv, 2, -2))) elseif vary == '' or i > 1 then local sp = stab[i] ~= '~' and stab[i] or spa local px = xtab[i] ~= '-' and xtab[i] or pfx local nm = ntab[i] ~= '-' and ntab[i] or nam local ds = dtab[i] ~= '-' and dtab[i] or dis local op = otab[i] ~= '-' and otab[i] or opt local p4 = qtab[i] ~= '-' and qtab[i] or pr4 local p5 = rtab[i] ~= '-' and rtab[i] or pr5 local p6 = vtab[i] ~= '-' and vtab[i] or pr6 local pk = ktab[i] ~= '-' and ktab[i] or wik local pi = itab[i] ~= '-' and itab[i] or int local pr = ptab[i] ~= '-' and ptab[i] or pre local by = btab[i] ~= '-' and btab[i] or by0 local um = utab[i] ~= '-' and utab[i] or mod local ln = ltab[i] ~= '-' and ltab[i] or lnk local tx = ttab[i] ~= '-' and ttab[i] or '' if vary ~= '' then replacement[2] = (sp == '+' and '&#32;' or '') replacement[3] = vv vv = gsub(ppar[1], vary, concat(replacement)) else vv = samefile(vv, i, ppar[1]) end if vv ~= '' and vv ~= '×' then if dir == 'hori' and con ~= 'n' then -- Horizontal list. px = (i == 1) and '&#32;' or commaAnd(i == mnum) else -- elseif dir == 'vert' then -- Vertical list. px = (i == 1) and '&#32;' or px end if px ~= '' then insert(results, px) end if by == '' then -- Check for abbreviating '/'. local sby = find(vv, '/') if sby ~= nil then by = sub(vv, sby + 1) vv = sub(vv, 1, sby - 1) end end args[1] = vv args[2] = nm args[3] = ds args[4] = op args[5] = p4 args[6] = p5 args[7] = p6 args.l = pk args.lang = pi args.p = pr args.by = by args.u = um args.link = (ln ~= '' and ln or nil) insert(results, expand('F', args)) if tx ~= '' then insert(results, expand1('=', tx)) end end -- if vary end -- if vv i = i + j -- next in do loop end -- while return concat(results) end -- function filelist -- For Template:Attribs (param pairs; but also for single params). function p.attribs(frame) local ppar = frameCurrent:getParent().args local un = trim(ppar.by or ppar.U or ppar.u or '') local md = trim(ppar.m or ppar.mod or '') local tt = trim(ppar.t or ppar.to or '') -- "to" topic. local f = trim(ppar.f or ppar.from or tt) -- "from". local p = trim(ppar.p or ppar.part or '') local args = { -- Parameters for expandnig 'Template:Attrib'. '', -- [1] = vx '', -- [2] = ux '-', trim(ppar.type or 'SVG'), -- Needs check. '', ux, -- [6] = ux tt, '', -- [8] = (ftab[hnum] ~= '.') and ftab[hnum] or f '', -- [9] = (ptab[hnum] ~= '.') and ptab[hnum] or p m = '', -- ['m'] = (mtab[hnum] ~= '.') and mtab[hnum] or md s = trim(ppar.s or ppar.style or 's'), -- default } local ftab = {} -- "from" topic. local ptab = {} -- Parts. local mtab = {} -- Modification. local rtab = {} -- Working table. local fnum = 0 local rnum = 0 local hnum = 0 for i, v in ipairs(ppar) do fnum = fnum + 1 -- Input parm number. if fnum % 2 == 0 then -- Even: should be a username. local enam = trim(v) -- A rough check: is_extension? local snam = lower(sub(enam, -4)) if snam == '.png' or snam == '.gif' or snam == '.jpg' or snam == '.svg' -- Exotics: or snam == '.mid' or snam == '.ogg' or snam == '.tif' or snam == '.wav' or snam == '.xcf' or snam == '.pdf' -- Note: no "short alias" in samefile() -- Note: Longer extensions still not supported (need check): -- snam == '.djvu' -- snam == '.webp' then -- No - it's the next filename. insert(rtab, '') -- Empty username inbetween. rnum = rnum + 1 fnum = fnum + 1 -- Make it odd. end end if fnum % 2 == 1 then -- Odd (now): is a filename. hnum = (fnum + 1) / 2 local z = tostring(hnum) ftab[hnum] = ppar['f' .. z] or '.' ptab[hnum] = ppar['p' .. z] or '.' mtab[hnum] = ppar['m' .. z] or '.' end -- table.maxnum(ppar) does not work; therefore the "rtab" workaround. insert(rtab, ppar[i]) -- = enam rnum = rnum + 1 end if rnum % 2 == 1 then -- Plus one item when odd number. insert(rtab, '') -- Empty user name, to get a pair. end local results = {} -- Output. local vx = '' for i, v in ipairs(rtab) do if i % 2 == 1 then -- odd: 1st value in pair is a filename vx = trim(v) -- this 1st 'v' should not be empty else -- even: 2nd value in pair is a user name (possibly empty) local ux = trim(v) -- this 2nd 'v' can be empty if ux == '' then ux = un end -- Does not work otherwise? hnum = i / 2 args[1] = vx -- a filename args[2] = ux -- a username args[6] = ux -- a username args[8] = (ftab[hnum] ~= '.') and ftab[hnum] or f args[9] = (ptab[hnum] ~= '.') and ptab[hnum] or p args.m = (mtab[hnum] ~= '.') and mtab[hnum] or md insert(results, expand('Attrib', args)) vx = '' -- reset the filename for the next pairs end end return concat(results) end -- function attribs -- Get the user id: the (last) parameter which is prefixed by '/'. function p.byuser(frame) local ppar = frameCurrent:getParent().args local user = '' for _, value in pairs(ppar) do if value ~= nil and user == '' and sub(value, 1, 1) == '/' then user = sub(value, 2) -- remove the '/' end -- TODO: Test whether userID exists? end return user end -- function byuser, for template:F -- for Template:userlist (horizontal - but vertical when dir=I/O/U/D/V). function p.userlist(frame) local gpar = frame.args -- global parms (par/P, dir/V) local ppar = frameCurrent:getParent().args local mod = ppar.m or ppar.mod or ppar.user or ppar.u or ppar.page or ppar.p or '' local hil = ppar.h or ppar.hilite or '' local nam = ppar.n or ppar.name or '' local wik = ppar.w or ppar.wiki or ppar.lang or '' local opt = ppar.o or ppar.opt or ppar.option or '' local lnk = ppar.l or ppar.link or '' --@ local pr4 = ppar.q or ppar.qpar or ppar.par4 or '' --@ local pr5 = ppar.r or ppar.rpar or ppar.par5 or '' local cas = ppar.c or ppar.case or '' local trl = ppar.t or ppar.i18n or ppar.translate or '' -- If ever template expansion of prim, prfx, sufx, or pend is needed, -- this must be done once here (out of the loop below). local prim, prfx, sufx, pend = '', '', '', '' if gpar.dir == 'O' then -- Ordered/numbered vertical list. prim, prfx, sufx, pend = '<ol>', '<li>', '</li>', '</ol>' elseif gpar.dir == 'U' then -- Unordered/bulleted vertical list. prim, prfx, sufx, pend = '<ul>', '<li>', '</li>', '</ul>' elseif gpar.dir == 'D' then -- Simple definition/indented vertical list. prim, prfx, sufx, pend = '<dl>', '<dt>', '</dt>', '</dl>' elseif gpar.dir == 'V' then -- Custom vertical list of users. prim, prfx, sufx, pend = '<dl style="margin:.3em 0">', '<dt><span style="color:#69F">✦ </span>', '</dt>', '</dl>' else --'I': Inline horizontal list. -- prim, prfx, sufx, pend: not used; replaced by separators, expanded by commaAnd() end local mtab = {} -- u_mod c/t/w/wt (aka utab, mtab, ptab) local htab = {} -- hilite local ntab = {} -- 2 display name local wtab = {} -- 3 interwiki local otab = {} -- 4 +/- option local ltab = {} -- link option --@ local qtab = {} --@ local rtab = {} local ctab = {} -- case local ttab = {} -- translate i18n local xtab = {} -- postfix text local x = 0 -- running index, can be ~= i local y = 0 -- running index, can be ~= i local plus = '' -- opt local xmax = 0 for _, v in ipairs(ppar) do v = mw.text.trim ( v ) if v == '+' then plus = '+' elseif v == '-' then if plus == '' then plus = '-' end else y = y + 1 if gpar.par == 'P' --[[pairs of (user, name)]] and y % 2 == 0 --[[1=user, 0=name]] then x = x else x = x + 1 local z = tostring(x) mtab[x] = ppar['m' .. z] or ppar['u' .. z] or ppar['p' .. z] or '-' htab[x] = ppar['h' .. z] or '-' ntab[x] = ppar['n' .. z] or '-' wtab[x] = ppar['w' .. z] or '-' otab[x] = ppar['o' .. z] or '/' ltab[x] = ppar['l' .. z] or '-' --@ qtab[x] = ppar['q' .. z] or '-' --@ rtab[x] = ppar['r' .. z] or '-' ctab[x] = ppar['c' .. z] or '-' ttab[x] = ppar['t' .. z] or '-' xtab[x] = ppar['x' .. z] or '-' end end xmax = x end -- for if plus ~= '' and opt == '' then opt = plus --[[discrepancy? opt has priority]] end local odd = y % 2 --[[1 when last one not paired]] local p2s = { '~', '', -- [2] = (wk ~= '') and wk or 'commons' 'wiki', } local hls = { '<', '', -- [2] = hl '>', '', -- [4] = (nm ~= '') and nm or vv '</', '', -- [6] = hl '>', } local args = { -- Parameters for expanding 'Tempplate:U/main'. '', -- [1] = vv, '', -- [2] = nm, '', -- [3] = wk, '', -- [4] = op, link = '', -- ['link'] = lk par1 = '', -- ['par1'] = p1 par2 = '', -- ['par2'] = p2 --@ par4 = '', -- ['par4'] = p4 --@ par5 = '', -- ['par5'] = p5 case = '', -- ['case'] = cs i18n = '', -- ['i18n'] = tr } local results = {} local out = 0 local vv = '' x = 0 y = 0 for _, v in ipairs(ppar) do v = trim(v) if v ~= '+' and v ~= '-' then y = y + 1 if gpar.par == 'P' --[[pairs of (user, name)]] and y % 2 == 1 --[[1=user, 0=name]] and odd == 0 then -- last one paired vv = v -- userid else x = x + 1 local md = (mtab[x] ~= '-') and mtab[x] or mod local hl = (htab[x] ~= '-') and htab[x] or hil local nm = (ntab[x] ~= '-') and ntab[x] or nam local wk = (wtab[x] ~= '-') and wtab[x] or wik local op = (otab[x] ~= '/') and otab[x] or opt local lk = (ltab[x] ~= '-') and ltab[x] or lnk --@ local p4 = (qtab[x] ~= '-') and qtab[x] or pr4 --@ local p5 = (rtab[x] ~= '-') and rtab[x] or pr5 local cs = (ctab[x] ~= '-') and ctab[x] or cas local tr = (ttab[x] ~= '-') and ttab[x] or trl local tx = (xtab[x] ~= '-') and xtab[x] or '' if gpar.par == 'P' then -- y%2 = 0 (name) if odd == 1 then --[[no: last user:]] vv = v --[[user]] else nm = v --[[name]] end else vv = v end if hl ~= '' then hls[2] = hl hls[4] = (nm ~= '') and nm or vv hls[6] = hl nm = concat(hls) end if md == 'n' or md == 'no' then lk = md -- no link end local p1 = '' -- prefix if md == 't' or md == 'wt' or md == 'tw' then p1 = '&#32;talk' end local p2 = '' -- postfix if md == 'w' or md == 'wt' or md == 'tw' then p2s[2] = (wk ~= '') and wk or 'commons' p2 = concat(p2s) end if vv ~= '' and vv ~= '×' then if md == 'c' then vv = 'Special:Contributions/' .. vv end if gpar.dir == 'I' or gpar.dir == 'O' or gpar.dir == 'U' or gpar.dir == 'V' then -- Vertical list (uses: prim, prfx, sufx, pend). if out == 0 then insert(results, prim) -- expansion of prim not needed end insert(results, prfx) -- expansion of prefx not needed out = out + 1 else -- Horizontal inline list. if x ~= 1 then insert(results, commaAnd(x == xmax)) end end if sub(vv, 1, 2) == '{{' or sub(vv, 1, 2) == '[[' then insert(results, expand1('=', vv)) else args[1] = vv args[2] = nm args[3] = wk args[4] = op args.link = lk args.par1 = p1 args.par2 = p2 --@ args.par4 = p4 --@ args.par5 = p5 args.case = cs args.i18n = tr insert(results, expand('U/main', args)) end if tx ~= '' then insert(results, expand1('=', tx)) end if sufx ~= '' then insert(results, sufx) -- expansion of sufx not needed end end end end end -- for if out > 0 and pend ~= '' then insert(results, pend) -- expansion of pend not needed end return concat(results) end -- function userlist -- Table for templates: Legend; Legend-line, Legend2, Legend-small... (param pairs) function p.legendt (frame) local ppar = frameCurrent:getParent().args local ttip = trim(ppar.tt or ppar.ttip or ppar.tooltipping or '') local frmp = frame.args local template = trim(frmp[1] or 'Legend') local args = { -- Parameters for expanding the given template. '', -- [1] = v1 '', -- [2] = v lang = trim(ppar.lang or ''), p = trim(frmp[2] or ''), size = trim(frmp[3] or ''), css = '', -- ['css'] = '" title="' .. upper(v1) } local results = {} local v1 = '' for _, v in ipairs(ppar) do if v1 == '' then v1 = v if ttip == 'yes' and v1 ~= '' then -- Tooltip the colors. -- HACK: terminates the style="..." attribute and opens another attribute args.css = '" title="' .. Ucfirst(v1) end else args[1] = v1 args[2] = v insert(results, expand(template, args)) v1 = '' args.css = '' end end if v1 ~= '' then -- Last item: problem when not a last pair insert(results, expand(template, args)) end return concat(results) end -- function legendt -- For Template:ColorString (Igen/cbox, param pairs). local argsColorbox = { -- Parameters for expanding 'Template:Igen/cbox'. '', -- [1] -- (striped; border) '', -- [2] -- color value '', -- [3] -- either code-2 ( BCDLMST-), or color value 0, -- [4] -- count of spaces '', -- [5] -- ? '', -- [6] -- 'char' or 'file' '', -- ['lang'] = ppar.lang or content language, } function p.colorbox(frame) local ppar = frameCurrent:getParent().args argsColorbox.lang = ppar.lang or mw.getContentLanguage():getCode() local results = {} local v1 = '' for i, v in ipairs(ppar) do if i <= 2 then argsColorbox[3] = v -- either code-2 ( BCDLMST-), or color value elseif v1 == '' then v1 = v -- (striped; border) local ct = 0 -- count of spaces local bp = 0 -- position of first space for c = 1, len(v1) do if sub(v1, c, c) == ' ' then ct = ct + 1 -- space count if bp == 0 then bp = c end end end local bc = '' if ct >= 3 then -- 3 = border, 4 = line bc = sub(v1, bp + 1) v1 = sub(v1, 1, bp - 1) end local cf = '' if ct == 1 then -- 'char' or 'file' bc = sub(v1, bp + 1) v1 = sub(v1, 1, bp - 1) cf = (sub(bc, -4, -4 ) == '.') and 'file' or 'char' end argsColorbox[4] = ct -- count of spaces argsColorbox[5] = bc argsColorbox[6] = cf -- 'char' or 'file' else argsColorbox[1] = v1 argsColorbox[2] = v insert(results, expand('Igen/cbox', argsColorbox)) v1 = '' end end if v1 ~= '' then argsColorbox[1] = v1 argsColorbox[2] = '' insert(results, expand('Igen/cbox', argsColorbox)) -- last item end return concat(results) end -- function colorbox -------------------------------------------------------------------------------- -- Returns a parameter list: (replacement of «#» or «~» by «=»: not necessary). function p.plist(frame) local ppar = frameCurrent:getParent().args return concat(ppar, '|') -- return gsub(concat(ppar, '|'), '#', '='), not necessary end -- function plist -- Repeats a text string. function p.loop (frame) local ppar = frameCurrent:getParent().args return string.rep(ppar[2] or '&nbsp', tonumber(ppar[1] or 1)) end -- function loop -- Increment a hex number by a ±decimal value function p.incrhx(frame) local gpar = frame.args -- global parms return format('%X', tonumber(gpar[1], 16) + gpar[2]) end -- function incrhx -- Display inline a range of characters with their Unicode code point in tool tip, such as emojis for Template:Emoji, with optional -- line breaks to limit lines to at most 16 characters (breaks after every code point which is the last one in a UCS column): -- {{#invoke:Iteration|parlst |temp=Emoji |1=(nb of characters) |2=(4- to 6-digits uppercase hexadecimal code point) -- |3=(border or 0) |4=(padding or 0) |5=(font size in px or -) -- |6=(styles or -) |(nocat=1) -- }} local argsEmodis = { -- WARNING: partial HTML (see the template using this function) -- This function can only be used after an UNTERMINATED opening HTML tag, -- whose LAST attribute MUST BE ' title=' not followed by quotes. -- This returned value closes the opening HTML tag of the template -- The calling template will then append itself the closing HTML tag. '"U+', '', -- [2] = format('%04X', code) '">', '', -- [4] = char(code) nil -- [5] = optional line break } function p.emodis(frame) local gpar = frame.args -- global parms local code = tonumber(gpar[1], 16) + gpar[2] argsEmodis[2] = format('%04X', code) argsEmodis[4] = char(code) argsEmodis[5] = gpar[3] == '16' and (code % 16 == 15 and '<br />') or nil return concat(argsEmodis) end -- function emodis -- For Template:Emoji table: {{#invoke:Iteration|emotab|prefix=1F250|par1=... | ... }} local argsEmotab = { -- Parameters for expanding 'Template:F'. '', -- [1] = file '', -- [2] = 'Z' '', -- [3] = '49' '', -- [4] = 'b' '', -- [5] = 'l' '', -- [6] = '' link = '*', } function p.emotab(frame) local gpar = frame.args -- global parms local codp codp = trim(gpar.par1 or '') --[['Z' ]] argsEmotab[2] = (codp ~= '') and codp or nil codp = trim(gpar.par2 or '') --[['49']] argsEmotab[3] = (codp ~= '') and codp or nil codp = trim(gpar.par3 or '') --[['b' ]] argsEmotab[4] = (codp ~= '') and codp or nil codp = trim(gpar.par4 or '') --[['l' ]] argsEmotab[5] = (codp ~= '') and codp or nil codp = trim(gpar.par5 or '') --[['' ]] argsEmotab[6] = (codp ~= '') and codp or nil codp = trim(gpar.codp or '') local parts = { '', -- [1] = v '', -- [2] = ((file == 'Emojio' or file == 'Fxemoj' or file == 'OpenMo') and upper or lower)(codp) '.svg', } local results = {} for _, v in ipairs(gpar) do local file = sub(v, 1, 6) parts[1] = v parts[2] = ((file == 'Emojio' or file == 'Fxemoj' or file == 'OpenMo') and upper or lower)(codp) file = concat(parts) if titleNew(file, 6).exists then argsEmotab[1] = file insert(results, expand('F', argsEmotab)) end end return concat(results) end -- function emotab -- For template: Navcat (via Navcattab). function p.navcat(frame) local gpar = frame.args -- global parms local cats = { -- Categories to generate. trim(gpar.c1 or ''), '', -- [2] = ctxt trim(gpar.c2 or ''), } local args = { -- Parameters for expanding 'Template:Navcat'. '', -- [1] = (ccod = vtab[2] --[[opt.]]) '', -- [2] = concat(cats) '', -- [3] = (dtxt = Ucfirst(ctxt)) '', -- [4] = (cnam = vtab[3] or ccod or ctxt) span = trim(gpar.span or ''), } local ppar = frameCurrent:getParent().args local results = {} for _, v in ipairs(ppar) do v = trim(v) if v == '' or v == 'nl' then insert(results, '<br /> ') else local vtab = split(v, '/') local ctxt = vtab[1] or '&nbsp;' --[[requ.]] local ccod = vtab[2] --[[opt.]] cats[2] = ctxt args[1] = ccod args[2] = concat(cats) args[3] = Ucfirst(ctxt) args[4] = vtab[3] or ccod or ctxt insert(results, expand('Navcat', args)) end end return concat(results) end -- function navcat -- For Template:Tle. function p.tleparm(frame) local ppar = frameCurrent:getParent().args local parnumber = trim(ppar.number or '') local parkbd = trim(ppar.kbd or '') if parkbd ~= '' then parkbd = { '<kbd>', '', -- [2] = par1 '</kbd>', } else parkbd = nil end local args = { -- Parameters for expanding 'Template:Tle/parm'. '', -- [1] = par1 '', -- [2] = v trim(ppar.f or ''), -- form feed trim(ppar.style or ''), -- style for parameter value trim(ppar.style2 or ''), -- style for parameter name } local results = {} for i, v in ipairs(ppar) do local z = tostring(i) local par1 = trim(ppar['p' .. z] or '') if par1 ~= '' and parkbd then parkbd[2] = par1 par1 = concat(parkbd) end if par1 == '' and parnumber ~= '' then par1 = z end if par1 ~= '' then -- keep parameter value as is if positional (and not parnumberd explicitly) v = trim(v) if v == '' then v = '&thinsp;' --[[Note: '&thinsp;' would change the semantics.]] end end args[1] = par1 args[2] = v insert(results, expand('Tle/parm', args)) end return concat(results) end -- function tleparm -- for Template:Variate. function p.variation(frame) local ppar = frameCurrent:getParent().args local sept = ppar.sept or '|' -- separator before local sample = trim(ppar[1] or '') -- sample string local pattern = ppar.pttn or '?' -- pattern local var1 = ppar.var1 or '' -- filling space before local var2 = ppar.var2 or '' -- filling space after local sep2 = ppar.sep2 or '' -- separator after local parts = { -- Replacement parts for gsub(). (var1 == 'space') and ' ' or var1, '', -- [2] = trim(v) (var2 == 'space') and ' ' or var2, } local results = {} for i, v in ipairs(ppar) do if i > 1 then insert(results, sept) parts[2] = trim(v) insert(results, gsub(sample, pattern, concat(parts))) insert(results, sep2) end end return concat(results) end return p l0to3835hvw8ivav31inqbtlaogtgnw 10716 10715 2026-08-25T23:38:29Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Iteration]] 10715 Scribunto text/plain -- This module contains the functions for different templates, solving their iteration problems. local max = math.max local len = string.len local sub = string.sub local find = string.find local format = string.format local insert = table.insert local concat = table.concat local trim = mw.text.trim local split = mw.text.split local titleNew = mw.title.new local char = mw.ustring.char local NL = char(10) local lower = mw.ustring.lower local upper = mw.ustring.upper local gsub = mw.ustring.gsub local Usub = mw.ustring.sub local function Ucfirst(text) text = trim(text) return upper(Usub(text, 1, 1)) .. Usub(text, 2) end ---------------------------------------------------------------------------------------------- -- Template expansion helpers for performance: -- Saves CPU and time resources on large iterations by minimizing repeated recursive calls to -- the parser, eliminating many table constructions/deletion/lookups in memory. Also allows -- reporting CPU/time usage for expansions of costly templates inside recursive calls -- (otherwise all CPU/time is counted inside Lua, those templates are not counted). local currentTitle = mw.title.getCurrentTitle() local currentNs = tonumber(currentTitle.namespace) local currentPage = currentTitle.text local frameCurrent = mw.getCurrentFrame() local expandTemplateCurrent = frameCurrent.expandTemplate local callParserFunctionCurrent = frameCurrent.callParserFunction local contentLanguage = mw.language.getContentLanguage() local langDefault = contentLanguage:getCode() local langUser = lower(trim(callParserFunctionCurrent(frameCurrent, 'Int', 'Lang'))) local transclude = {} local function expand(template, args) transclude.title = template transclude.args = args or {} return expandTemplateCurrent(frameCurrent, transclude) end local argsOne = {} local function expand1(title, arg1) argsOne[1] = arg1 return expand(title, argsOne) end local argsLangUser = { lang = langUser } local argsLangDefault = { lang = langDefault } local argsLangOther = {} local function expandWithLang(template, lang) if type(lang) == 'string' then lang = trim(lang) if lang == '' then lang = nil else lang = lower(lang) end else lang = nil end if not lang or lang == langUser then return expand(template, argsLangUser) elseif lang == langDefault then return expand(template, argsLangDefault) else argsLangOther.lang = lang return expand(template, argsLangOther) end end local Comma, ConjAnd local function commaAnd(isLast) if isLast then if not ConjAnd then ConjAnd = expand('Conj-and', argsLangUser) end return ConjAnd else if not Comma then Comma = expand('Comma', argsLangUser) end return Comma end end ---------------------------------------------------------------------------------------------- local p = {} -- For Template:Ifim. local argsIfim1 = { -- Parameters for expanding 'Template:Ifim1'. '', -- [1] = v '', -- [2] = trim(ppar.p1 or ''), '', -- [3] = trim(ppar.p2 or ''), '', -- [4] = trim(ppar.p3 or ''), '', -- [5] = trim(ppar.p4 or ''), '', -- [6] = trim(ppar.p5 or ''), n = '' -- ['n'] = trim(ppar.fn or ''), } function p.ifim1(frame) local ppar = frameCurrent:getParent().args argsIfim1[2] = trim(ppar.p1 or '') argsIfim1[3] = trim(ppar.p2 or '') argsIfim1[4] = trim(ppar.p3 or '') argsIfim1[5] = trim(ppar.p4 or '') argsIfim1[6] = trim(ppar.p5 or '') argsIfim1.n = trim(ppar.fn or '') local results = {} for _, v in ipairs(ppar) do argsIfim1[1] = v insert(results, expand('Ifim1', argsIfim1)) end return concat(results) end -- function ifim -- For Template:Ifimc. local argsIfim2 = { -- Parameters for expanding 'Template:Ifim2'. '', -- [1] = v1 '', -- [2] = trim(ppar.p1 or ''), '', -- [3] = trim(ppar.p2 or ''), '', -- [4] = trim(ppar.p3 or ''), '', -- [5] = trim(ppar.p4 or ''), '', -- [6] = v } function p.ifim2(frame) local ppar = frameCurrent:getParent().args argsIfim2[2] = trim(ppar.p1 or '') argsIfim2[3] = trim(ppar.p2 or '') argsIfim2[4] = trim(ppar.p3 or '') argsIfim2[5] = trim(ppar.p4 or '') local results = {} for _, v in ipairs(ppar) do argsIfim2[1] = v argsIfim2[6] = v insert(results, expand('Ifim2', argsIfim2)) end return concat(results) end -- function ifim2 -- For Template:Ifimt (param pairs). function p.ifimt(frame) local ppar = frameCurrent:getParent().args argsIfim2[2] = trim(ppar.p1 or '') argsIfim2[3] = trim(ppar.p2 or '') argsIfim2[4] = trim(ppar.p3 or '') argsIfim2[5] = trim(ppar.p4 or '') local v1 = '' local results = {} for _, v in ipairs(ppar) do if v1 == '' then v1 = v else argsIfim2[1] = v1 argsIfim2[6] = v insert(results, expand('Ifim2', argsIfim2)) v1 = '' end end if v1 ~= '' then argsIfim2[6] = '' insert(results, expand('Ifim2', argsIfim2)) -- Last item. end return concat(results) end -- function ifimt ------------------------------------------------------- -- Helper function for: ownbased, and filelist local function samefile(filename, num, first) local filename = trim(filename or '') if sub(filename, 1, 1) == '.' then local part = 'Example' -- default filename if currentNs == 6 or currentNs == 7 then part = split(currentPage , '.', true) part = concat(part, '.', 1, math.max(#part - 1, 1)) end -- Supported short aliases: if filename == '.' then filename = part .. '.png' elseif filename == '.p' then filename = part .. '.png' elseif filename == '.g' then filename = part .. '.gif' elseif filename == '.j' then filename = part .. '.jpg' elseif filename == '.s' then filename = part .. '.svg' -- Exotics: elseif filename == '.m' then filename = part .. '.mid' elseif filename == '.o' then filename = part .. '.ogg' elseif filename == '.t' then filename = part .. '.tif' elseif filename == '.v' then filename = part .. '.wav' elseif filename == '.x' then filename = part .. '.xcf' -- Note: no "short alias" for '.pdf' ('.p' already used for '.png') -- Note: short aliases for a few longer extensions: elseif filename == '.d' then filename = part .. '.djvu' elseif filename == '.w' then filename = part .. '.webp' else filename = part .. filename end elseif filename == '' or filename == '*' then if tonumber(num) == 1 then filename = 'Example.svg' if currentNs == 6 or currentNs == 7 then filename = currentPage end else filename = trim(first) if filename == '' or filename == '*' or sub(filename, 1, 1) == '.' then filename = 'Example.svg' if currentNs == 6 or currentNs == 7 then filename = currentPage end end end end return filename end -- function samefile ---++++++++++++++++++++++++++++++++++++++++++++++++++++ -- Simple iterations - without many params. function p.iterate(frame) local gpar = frame.args -- global parms local template = gpar[1] or '' -- template name local args = { -- Parameters for expanding the given template. '', -- [1] = v gpar[2] or '', gpar[3] or '', } local ppar = frameCurrent:getParent().args local results = {} for _, v in ipairs(ppar) do args[1] = v insert(results, expand(template, args)) end return concat(results) end -- function iterate -- More iterations - for params, param pairs, or n-tuples. function p.iteration(frame) local gpar = frame.args -- Global parms. local vmax = tonumber(gpar.n) or 2 -- Tuple number (default = 2). local vnum = vmax + 1 -- Additional not-changing params. local template = '' -- Template name. local args = {} -- Parameters for expanding the given template. for i, p in ipairs(gpar) do p = trim(p) if i == 1 then template = p else args[vnum] = p vnum = vnum + 1 end end vnum = 1 local ppar = frameCurrent:getParent().args local results = {} -- output for _, v in ipairs(ppar) do args[vnum] = trim(v) vnum = vnum + 1 if vnum > vmax then insert(results, expand(template, args)) vnum = 1 end end return concat(results) end -- function iteration -- For different templates, for general use, e.g. Emoji. function p.parlst(frame) local gpar = frame.args -- Global parameters. local template = trim(gpar.temp or '') local results = {} if template ~= '' then -- Slow expansion (e.g. for template = 'Emoji', which will recurse into iterations calling p.emodis) local ff = trim(gpar.ff or '') -- Inbetween? if ff ~= '' then ff = expand1(ff, trim(gpar.pf or '')) else ff = nil end local nocat = trim(gpar.nocat or '') local args = { -- Parameters for expanding the given template. nocat = nocat ~= '' and nocat or nil } for k, v in pairs(gpar) do v = trim(v) if v ~= '' then args[k] = v end end local count = tonumber(args[1] or '') or 0 for i = 1, (count or 1) do -- default: go 1× for nil if ff then insert(results, ff) end if count then args[1] = i - 1 end insert(results, expand(template, args)) end else -- Template expansion not needed (much faster, without recursed iterations calling p.emodis from a specified template). local count = tonumber(gpar[1] or '') or 0 local code = tonumber(gpar[2] or '', 16) or 0 local catlink = gpar.catlink or '' if catlink == '' then local args = { '<span title="U+', '', -- [2] = format('%04X', code + i - 1) '">', '', -- [4] = char(code + i - 1) '</span>', } for i = 1, count do args[2] = format('%04X', code + i - 1) args[4] = char(code + i - 1) insert(results, concat(args)) end elseif catlink == 'U' then local args = { '[[:Category:U+', '', -- [2] = format('%04X', code + i - 1) '|<span title="U+', '', -- [4] = format('%04X', code + i - 1) '">', '', -- [6] = char(code + i - 1) '</span>]]', } for i = 1, count do args[2] = format('%04X', code + i - 1) args[4] = args[2] args[6] = char(code + i - 1) insert(results, concat(args)) end else local args = { '[[:Category:', '', -- [2] = char(code + i - 1) '|<span title="U+', '', -- [4] = format('%04X', code + i - 1) '">', '', -- [6] = char(code + i - 1) '</span>]]', } for i = 1, count do args[2] = char(code + i - 1) args[4] = format('%04X', code + i - 1) args[6] = args[2] insert(results, concat(args)) end end end return concat(results) end -- function parlst -- Global function for one filename. function p.filename(frame) local gpar = frame.args -- Global parameters. return samefile(trim(gpar[1] or ''), 1) end -- function filename -- For Template:Own based (one filename which is '.'). function p.ownbasby(frame) local gpar = frame.args -- Global parameters. return expand('F', { samefile(gpar[1] or '.', 1), by = trim(gpar[2] or '') }) end -- function ownbasby -- For Template:Own based (horizontal - but vertical when "b1="). function p.ownbased(frame) local ppar = frameCurrent:getParent().args local by0 = trim(ppar.b or ppar.by or ppar.u or ppar.user or '') local dis = trim(ppar.d or ppar.dis or ppar.display or '') local hil = trim(ppar.h or ppar.hilite or '') local lng = trim(ppar.i or ppar.lang or '') local wik = trim(ppar.l or ppar.w or ppar.wiki or '') local nam = trim(ppar.n or ppar.name or '') local opt = trim(ppar.o or ppar.opt or ppar.option or '') local mod = trim(ppar.m or ppar.mod or '') local pr4 = trim(ppar.par4 or ppar.qpar or '') local pr5 = trim(ppar.par5 or ppar.rpar or '') local btab = {} local dtab = {} local htab = {} local itab = {} local ltab = {} local ntab = {} local otab = {} local qtab = {} local rtab = {} local ttab = {} local utab = {} local x = 0 -- running index, can be ~= i local fst = 0 -- first occurrence local cor = 0 local max = 0 local plus = '' for i, v in ipairs(ppar) do if v == '+' then plus = '+' elseif v == '-' then if plus == '' then plus = '-' end else x = x + 1 if fst == 0 then fst = x end local z = tostring(x) btab[x] = trim(ppar['b' .. z] or ppar['by' .. z] or ppar['u' .. z] or '-') dtab[x] = trim(ppar['d' .. z] or '-') htab[x] = trim(ppar['h' .. z] or '-') itab[x] = trim(ppar['i' .. z] or '-') ltab[x] = trim(ppar['l' .. z] or ppar['w' .. z] or '-') ntab[x] = trim(ppar['n' .. z] or '-') otab[x] = trim(ppar['o' .. z] or '-') qtab[x] = trim(ppar['q' .. z] or '-') rtab[x] = trim(ppar['r' .. z] or '-') ttab[x] = trim(ppar['t' .. z] or '-') utab[x] = trim(ppar['m' .. z] or '-') end max = x if v == 'x' or v == 'X' or v == '×' then cor = cor + 1 end end -- for x = 0 if fst > 0 then local mnm = trim(ppar[fst]) end local hls = { '<', '', -- [2] = hl '>', '', -- [4] = (nm ~= '') and nm or vv '</', '', -- [6] = hl '>', } local args = { -- Parameters for expanding 'Template:F'. '', -- [1] = vv, '', -- [2] = nm '', -- [3] = ds '', -- [4] = op '', -- [5] = p4 '', -- [6] = p5 plus, l = '', -- ['l'] = il lang = '', -- ['lang'] = lg p = '', -- ['p'] = px by = '', -- ['by'] = by u = '', -- ['u'] = um } local results = {} for _, v in ipairs(ppar) do if v ~= '+' and v ~= '-' then x = x + 1 local by = btab[x] ~= '-' and btab[x] or by0 local ds = dtab[x] ~= '-' and dtab[x] or dis local hl = htab[x] ~= '-' and htab[x] or hil local il = ltab[x] ~= '-' and ltab[x] or wik local lg = itab[x] ~= '-' and itab[x] or lng local op = otab[x] ~= '-' and otab[x] or opt local p4 = qtab[x] ~= '-' and qtab[x] or pr4 local p5 = rtab[x] ~= '-' and rtab[x] or pr5 local um = utab[x] ~= '-' and utab[x] or mod local nm = ntab[x] ~= '-' and ntab[x] or '' local tx = ttab[x] ~= '-' and ttab[x] or '' local vv = trim(v) if find(vv, '/') == nil then vv = samefile(vv, x, mnm) if x == 1 then mnm = vv end end if vv ~= '' and vv ~= '×' then local px = '' if ppar.b1 == nil then -- parameter missing if x == 1 then px = '&#32;' else insert(results, commaAnd(x == max)) end else -- ppar.b1 is defined (with value, or empty) px = '<br /> <span style=color:#69F>✦ </span>' -- "list" item end if sub(ds, -2) == 'px' then ds = sub(ds, 1, -3) end if nm == '' and x == 1 then nm = nam end if hl ~= '' then hls[2] = hl hls[4] = (nm ~= '') and nm or vv hls[6] = hl nm = concat(hls) end -- if il ~= '' then ds = '' end -- ? (discrepancy) if vv == 'x' then ds = '' end -- this should be the last "file" if by == '' then -- check for abbreviating '/' local sby = find(vv, '/') if sby ~= nil then by = sub(vv, sby + 1) vv = sub(vv, 1, sby - 1) vv = samefile(vv, x, mnm) if x == 1 then mnm = vv end end end args[1] = vv args[2] = nm args[3] = ds args[4] = op args[5] = p4 args[6] = p5 args.l = il args.lang = lg args.p = px args.by = by args.u = um insert(results, expand('F', args)) if tx ~= '' then insert(results, expand1('=', tx)) end end end end -- for if max - cor > 9 then insert(results, expand1('Igen/cat', 'Own-based with more than 9 files|' .. max)) end return concat(results) end -- function ownbased -- Horizontal file list for: Template:SVG lang, Template:Lang gallery, and others. function p.svglang(frame) local gpar = frame.args -- Global parameters. local template = gpar[1] or 'Source thumb' -- 'SVG lang', 'Lang gallery/thumb' local ppar = frameCurrent:getParent().args args = { -- Parameters to expand the given template. trim(ppar.file or ''), '', -- [2] = lang p = trim(ppar.p or ''), } local results = {} for _, v in ipairs(ppar) do local lang = trim(v) if lang > ' ' then args[2] = lang insert(results, trim(expand(template, args))) insert(results, NL) end end return concat(results) end -- function svglang -- Elements count for: Template:SVG lang, Template:Lang gallery, and others. function p.elemct (frame) local ppar = frameCurrent:getParent().args local count = 0 for _, v in ipairs(ppar) do if trim(v) ~= '' then count = count + 1 end end return count end -- function elemct -- Horizontal file list for: Template:Filelist, Template:File. -- Vertical file list for: Template:Other versions, Template:Derived from, Template:Derivative versions. function p.filelist(frame) local gpar = frame.args -- Global parameters. local ppar = frameCurrent:getParent().args local spa = trim(ppar.spa or ppar.s or '-') local pfx = trim(ppar.x or ppar.pfx or ppar.prefix or '') -- "List" item {{Comma}} local dir = gpar[1] or 'none' if dir == 'vert' and pfx == '' then pfx = '\n* ' -- "list" item end local nam = trim(ppar.n or ppar.name or '') local dis = trim(ppar.d or ppar.z or ppar.dis or ppar.display or '') if sub(dis, -2) == 'px' then dis = sub(dis, 1, -3) end local opt = trim(ppar.o or ppar.opt or ppar.option or '') local pr4 = trim(ppar.par4 or ppar.qpar or '') local pr5 = trim(ppar.par5 or ppar.rpar or '') local pr6 = trim(ppar.par6 or ppar.vpar or '') local wik = trim(ppar.w or ppar.k or ppar.wiki or ppar.sisterproject or '') local int = trim(ppar.i or ppar.int or ppar.ind or ppar.inter or '') local pre = trim(ppar.p or ppar.pre or ppar.pretext or '') local by0 = trim(ppar.user or ppar.by or '') local mod = trim(ppar.m or ppar.mod or '') local lnk = trim(ppar.l or ppar.lnk or ppar.link or '') local con = trim(ppar.conj or ppar.con or ppar.c or '') con = sub(con, 1, 1) if ppar.z then if con == '' then con = 'n' end if opt == '' then opt = 'Z' end if pre == '' then pre = '&#32;' end end local vary = trim(ppar.vary or ppar.v or '') -- Variable pattern local var1 = trim(ppar.var1 or ppar.v1 or '') -- Variable filling space before local var2 = trim(ppar.var2 or ppar.v2 or '') -- Variable filling space after local replacement = { (var1 == 'space') and ' ' or var1, '', -- [2] = (sp == '+' and '&#32;' or '') '', -- [3] = vv (var2 == 'space') and ' ' or var2, } local stab = {} local xtab = {} local ntab = {} local dtab = {} local otab = {} local qtab = {} local rtab = {} local vtab = {} local ktab = {} local itab = {} local ptab = {} local btab = {} local utab = {} local ltab = {} local ttab = {} local loop = {} local mnum = 0 -- maximum index reached in the previous tables of indexed parameters for i, v in ipairs(ppar) do local z = tostring(i) stab[i] = trim(ppar['s' .. z] or '~') xtab[i] = trim(ppar['x' .. z] or '-') ntab[i] = trim(ppar['n' .. z] or ppar['l' .. z] or '-') dtab[i] = trim(ppar['d' .. z] or '-') otab[i] = trim(ppar['o' .. z] or '-') qtab[i] = trim(ppar['q' .. z] or '-') rtab[i] = trim(ppar['r' .. z] or '-') vtab[i] = trim(ppar['v' .. z] or '-') ktab[i] = trim(ppar['k' .. z] or '-') itab[i] = trim(ppar['i' .. z] or '-') ptab[i] = trim(ppar['p' .. z] or '-') btab[i] = trim(ppar['b' .. z] or ppar['by' .. z] or '-') utab[i] = trim(ppar['m' .. z] or '-') ltab[i] = trim(ppar['l' .. z] or '-') ttab[i] = trim(ppar['t' .. z] or '-') mnum = i end local args = { -- Parameters for expanding 'Template:F'. '', -- [1] = vv '', -- [2] = nm '', -- [3] = ds '', -- [4] = op '', -- [5] = p4 '', -- [6] = p5 '', -- [7] = p6 l = '', -- ['l'] = pk lang = '', -- ['lang'] = pi p = '', -- ['p'] = pr by = '', -- ['by'] = by u = '', -- ['u'] = um link = '', -- ['link'] = (ln ~= '' and ln or nil) } local results = {} local lcnt = 0 -- Loop count. local i = 1 -- While index. while ppar[i] ~= nil do -- for i, v in ipairs(ppar) do local j = 1 local vv = trim(ppar[i]) if vary ~= '' and sub(vv, 1, 1) == '#' and sub(vv, -1) == '#' then -- Loop processing? loop = split(vv, '#', true--[[plain]]) local llow = tonumber(loop[2]) or -1 local lupp = tonumber(loop[3]) or -1 if llow >= 0 and lupp >= llow then llow = llow + lcnt vv = tostring(llow) lcnt = lcnt + 1 if llow < lupp then j = 0 -- Iterate this index. else lcnt = 0 -- Loop ended. end end end -- End loop processing. if sub(vv, 1, 1) == '"' and sub(vv, -1) == '"' then -- Text processing? insert(results, expand1('=', sub(vv, 2, -2))) elseif vary == '' or i > 1 then local sp = stab[i] ~= '~' and stab[i] or spa local px = xtab[i] ~= '-' and xtab[i] or pfx local nm = ntab[i] ~= '-' and ntab[i] or nam local ds = dtab[i] ~= '-' and dtab[i] or dis local op = otab[i] ~= '-' and otab[i] or opt local p4 = qtab[i] ~= '-' and qtab[i] or pr4 local p5 = rtab[i] ~= '-' and rtab[i] or pr5 local p6 = vtab[i] ~= '-' and vtab[i] or pr6 local pk = ktab[i] ~= '-' and ktab[i] or wik local pi = itab[i] ~= '-' and itab[i] or int local pr = ptab[i] ~= '-' and ptab[i] or pre local by = btab[i] ~= '-' and btab[i] or by0 local um = utab[i] ~= '-' and utab[i] or mod local ln = ltab[i] ~= '-' and ltab[i] or lnk local tx = ttab[i] ~= '-' and ttab[i] or '' if vary ~= '' then replacement[2] = (sp == '+' and '&#32;' or '') replacement[3] = vv vv = gsub(ppar[1], vary, concat(replacement)) else vv = samefile(vv, i, ppar[1]) end if vv ~= '' and vv ~= '×' then if dir == 'hori' and con ~= 'n' then -- Horizontal list. px = (i == 1) and '&#32;' or commaAnd(i == mnum) else -- elseif dir == 'vert' then -- Vertical list. px = (i == 1) and '&#32;' or px end if px ~= '' then insert(results, px) end if by == '' then -- Check for abbreviating '/'. local sby = find(vv, '/') if sby ~= nil then by = sub(vv, sby + 1) vv = sub(vv, 1, sby - 1) end end args[1] = vv args[2] = nm args[3] = ds args[4] = op args[5] = p4 args[6] = p5 args[7] = p6 args.l = pk args.lang = pi args.p = pr args.by = by args.u = um args.link = (ln ~= '' and ln or nil) insert(results, expand('F', args)) if tx ~= '' then insert(results, expand1('=', tx)) end end -- if vary end -- if vv i = i + j -- next in do loop end -- while return concat(results) end -- function filelist -- For Template:Attribs (param pairs; but also for single params). function p.attribs(frame) local ppar = frameCurrent:getParent().args local un = trim(ppar.by or ppar.U or ppar.u or '') local md = trim(ppar.m or ppar.mod or '') local tt = trim(ppar.t or ppar.to or '') -- "to" topic. local f = trim(ppar.f or ppar.from or tt) -- "from". local p = trim(ppar.p or ppar.part or '') local args = { -- Parameters for expandnig 'Template:Attrib'. '', -- [1] = vx '', -- [2] = ux '-', trim(ppar.type or 'SVG'), -- Needs check. '', ux, -- [6] = ux tt, '', -- [8] = (ftab[hnum] ~= '.') and ftab[hnum] or f '', -- [9] = (ptab[hnum] ~= '.') and ptab[hnum] or p m = '', -- ['m'] = (mtab[hnum] ~= '.') and mtab[hnum] or md s = trim(ppar.s or ppar.style or 's'), -- default } local ftab = {} -- "from" topic. local ptab = {} -- Parts. local mtab = {} -- Modification. local rtab = {} -- Working table. local fnum = 0 local rnum = 0 local hnum = 0 for i, v in ipairs(ppar) do fnum = fnum + 1 -- Input parm number. if fnum % 2 == 0 then -- Even: should be a username. local enam = trim(v) -- A rough check: is_extension? local snam = lower(sub(enam, -4)) if snam == '.png' or snam == '.gif' or snam == '.jpg' or snam == '.svg' -- Exotics: or snam == '.mid' or snam == '.ogg' or snam == '.tif' or snam == '.wav' or snam == '.xcf' or snam == '.pdf' -- Note: no "short alias" in samefile() -- Note: Longer extensions still not supported (need check): -- snam == '.djvu' -- snam == '.webp' then -- No - it's the next filename. insert(rtab, '') -- Empty username inbetween. rnum = rnum + 1 fnum = fnum + 1 -- Make it odd. end end if fnum % 2 == 1 then -- Odd (now): is a filename. hnum = (fnum + 1) / 2 local z = tostring(hnum) ftab[hnum] = ppar['f' .. z] or '.' ptab[hnum] = ppar['p' .. z] or '.' mtab[hnum] = ppar['m' .. z] or '.' end -- table.maxnum(ppar) does not work; therefore the "rtab" workaround. insert(rtab, ppar[i]) -- = enam rnum = rnum + 1 end if rnum % 2 == 1 then -- Plus one item when odd number. insert(rtab, '') -- Empty user name, to get a pair. end local results = {} -- Output. local vx = '' for i, v in ipairs(rtab) do if i % 2 == 1 then -- odd: 1st value in pair is a filename vx = trim(v) -- this 1st 'v' should not be empty else -- even: 2nd value in pair is a user name (possibly empty) local ux = trim(v) -- this 2nd 'v' can be empty if ux == '' then ux = un end -- Does not work otherwise? hnum = i / 2 args[1] = vx -- a filename args[2] = ux -- a username args[6] = ux -- a username args[8] = (ftab[hnum] ~= '.') and ftab[hnum] or f args[9] = (ptab[hnum] ~= '.') and ptab[hnum] or p args.m = (mtab[hnum] ~= '.') and mtab[hnum] or md insert(results, expand('Attrib', args)) vx = '' -- reset the filename for the next pairs end end return concat(results) end -- function attribs -- Get the user id: the (last) parameter which is prefixed by '/'. function p.byuser(frame) local ppar = frameCurrent:getParent().args local user = '' for _, value in pairs(ppar) do if value ~= nil and user == '' and sub(value, 1, 1) == '/' then user = sub(value, 2) -- remove the '/' end -- TODO: Test whether userID exists? end return user end -- function byuser, for template:F -- for Template:userlist (horizontal - but vertical when dir=I/O/U/D/V). function p.userlist(frame) local gpar = frame.args -- global parms (par/P, dir/V) local ppar = frameCurrent:getParent().args local mod = ppar.m or ppar.mod or ppar.user or ppar.u or ppar.page or ppar.p or '' local hil = ppar.h or ppar.hilite or '' local nam = ppar.n or ppar.name or '' local wik = ppar.w or ppar.wiki or ppar.lang or '' local opt = ppar.o or ppar.opt or ppar.option or '' local lnk = ppar.l or ppar.link or '' --@ local pr4 = ppar.q or ppar.qpar or ppar.par4 or '' --@ local pr5 = ppar.r or ppar.rpar or ppar.par5 or '' local cas = ppar.c or ppar.case or '' local trl = ppar.t or ppar.i18n or ppar.translate or '' -- If ever template expansion of prim, prfx, sufx, or pend is needed, -- this must be done once here (out of the loop below). local prim, prfx, sufx, pend = '', '', '', '' if gpar.dir == 'O' then -- Ordered/numbered vertical list. prim, prfx, sufx, pend = '<ol>', '<li>', '</li>', '</ol>' elseif gpar.dir == 'U' then -- Unordered/bulleted vertical list. prim, prfx, sufx, pend = '<ul>', '<li>', '</li>', '</ul>' elseif gpar.dir == 'D' then -- Simple definition/indented vertical list. prim, prfx, sufx, pend = '<dl>', '<dt>', '</dt>', '</dl>' elseif gpar.dir == 'V' then -- Custom vertical list of users. prim, prfx, sufx, pend = '<dl style="margin:.3em 0">', '<dt><span style="color:#69F">✦ </span>', '</dt>', '</dl>' else --'I': Inline horizontal list. -- prim, prfx, sufx, pend: not used; replaced by separators, expanded by commaAnd() end local mtab = {} -- u_mod c/t/w/wt (aka utab, mtab, ptab) local htab = {} -- hilite local ntab = {} -- 2 display name local wtab = {} -- 3 interwiki local otab = {} -- 4 +/- option local ltab = {} -- link option --@ local qtab = {} --@ local rtab = {} local ctab = {} -- case local ttab = {} -- translate i18n local xtab = {} -- postfix text local x = 0 -- running index, can be ~= i local y = 0 -- running index, can be ~= i local plus = '' -- opt local xmax = 0 for _, v in ipairs(ppar) do v = mw.text.trim ( v ) if v == '+' then plus = '+' elseif v == '-' then if plus == '' then plus = '-' end else y = y + 1 if gpar.par == 'P' --[[pairs of (user, name)]] and y % 2 == 0 --[[1=user, 0=name]] then x = x else x = x + 1 local z = tostring(x) mtab[x] = ppar['m' .. z] or ppar['u' .. z] or ppar['p' .. z] or '-' htab[x] = ppar['h' .. z] or '-' ntab[x] = ppar['n' .. z] or '-' wtab[x] = ppar['w' .. z] or '-' otab[x] = ppar['o' .. z] or '/' ltab[x] = ppar['l' .. z] or '-' --@ qtab[x] = ppar['q' .. z] or '-' --@ rtab[x] = ppar['r' .. z] or '-' ctab[x] = ppar['c' .. z] or '-' ttab[x] = ppar['t' .. z] or '-' xtab[x] = ppar['x' .. z] or '-' end end xmax = x end -- for if plus ~= '' and opt == '' then opt = plus --[[discrepancy? opt has priority]] end local odd = y % 2 --[[1 when last one not paired]] local p2s = { '~', '', -- [2] = (wk ~= '') and wk or 'commons' 'wiki', } local hls = { '<', '', -- [2] = hl '>', '', -- [4] = (nm ~= '') and nm or vv '</', '', -- [6] = hl '>', } local args = { -- Parameters for expanding 'Tempplate:U/main'. '', -- [1] = vv, '', -- [2] = nm, '', -- [3] = wk, '', -- [4] = op, link = '', -- ['link'] = lk par1 = '', -- ['par1'] = p1 par2 = '', -- ['par2'] = p2 --@ par4 = '', -- ['par4'] = p4 --@ par5 = '', -- ['par5'] = p5 case = '', -- ['case'] = cs i18n = '', -- ['i18n'] = tr } local results = {} local out = 0 local vv = '' x = 0 y = 0 for _, v in ipairs(ppar) do v = trim(v) if v ~= '+' and v ~= '-' then y = y + 1 if gpar.par == 'P' --[[pairs of (user, name)]] and y % 2 == 1 --[[1=user, 0=name]] and odd == 0 then -- last one paired vv = v -- userid else x = x + 1 local md = (mtab[x] ~= '-') and mtab[x] or mod local hl = (htab[x] ~= '-') and htab[x] or hil local nm = (ntab[x] ~= '-') and ntab[x] or nam local wk = (wtab[x] ~= '-') and wtab[x] or wik local op = (otab[x] ~= '/') and otab[x] or opt local lk = (ltab[x] ~= '-') and ltab[x] or lnk --@ local p4 = (qtab[x] ~= '-') and qtab[x] or pr4 --@ local p5 = (rtab[x] ~= '-') and rtab[x] or pr5 local cs = (ctab[x] ~= '-') and ctab[x] or cas local tr = (ttab[x] ~= '-') and ttab[x] or trl local tx = (xtab[x] ~= '-') and xtab[x] or '' if gpar.par == 'P' then -- y%2 = 0 (name) if odd == 1 then --[[no: last user:]] vv = v --[[user]] else nm = v --[[name]] end else vv = v end if hl ~= '' then hls[2] = hl hls[4] = (nm ~= '') and nm or vv hls[6] = hl nm = concat(hls) end if md == 'n' or md == 'no' then lk = md -- no link end local p1 = '' -- prefix if md == 't' or md == 'wt' or md == 'tw' then p1 = '&#32;talk' end local p2 = '' -- postfix if md == 'w' or md == 'wt' or md == 'tw' then p2s[2] = (wk ~= '') and wk or 'commons' p2 = concat(p2s) end if vv ~= '' and vv ~= '×' then if md == 'c' then vv = 'Special:Contributions/' .. vv end if gpar.dir == 'I' or gpar.dir == 'O' or gpar.dir == 'U' or gpar.dir == 'V' then -- Vertical list (uses: prim, prfx, sufx, pend). if out == 0 then insert(results, prim) -- expansion of prim not needed end insert(results, prfx) -- expansion of prefx not needed out = out + 1 else -- Horizontal inline list. if x ~= 1 then insert(results, commaAnd(x == xmax)) end end if sub(vv, 1, 2) == '{{' or sub(vv, 1, 2) == '[[' then insert(results, expand1('=', vv)) else args[1] = vv args[2] = nm args[3] = wk args[4] = op args.link = lk args.par1 = p1 args.par2 = p2 --@ args.par4 = p4 --@ args.par5 = p5 args.case = cs args.i18n = tr insert(results, expand('U/main', args)) end if tx ~= '' then insert(results, expand1('=', tx)) end if sufx ~= '' then insert(results, sufx) -- expansion of sufx not needed end end end end end -- for if out > 0 and pend ~= '' then insert(results, pend) -- expansion of pend not needed end return concat(results) end -- function userlist -- Table for templates: Legend; Legend-line, Legend2, Legend-small... (param pairs) function p.legendt (frame) local ppar = frameCurrent:getParent().args local ttip = trim(ppar.tt or ppar.ttip or ppar.tooltipping or '') local frmp = frame.args local template = trim(frmp[1] or 'Legend') local args = { -- Parameters for expanding the given template. '', -- [1] = v1 '', -- [2] = v lang = trim(ppar.lang or ''), p = trim(frmp[2] or ''), size = trim(frmp[3] or ''), css = '', -- ['css'] = '" title="' .. upper(v1) } local results = {} local v1 = '' for _, v in ipairs(ppar) do if v1 == '' then v1 = v if ttip == 'yes' and v1 ~= '' then -- Tooltip the colors. -- HACK: terminates the style="..." attribute and opens another attribute args.css = '" title="' .. Ucfirst(v1) end else args[1] = v1 args[2] = v insert(results, expand(template, args)) v1 = '' args.css = '' end end if v1 ~= '' then -- Last item: problem when not a last pair insert(results, expand(template, args)) end return concat(results) end -- function legendt -- For Template:ColorString (Igen/cbox, param pairs). local argsColorbox = { -- Parameters for expanding 'Template:Igen/cbox'. '', -- [1] -- (striped; border) '', -- [2] -- color value '', -- [3] -- either code-2 ( BCDLMST-), or color value 0, -- [4] -- count of spaces '', -- [5] -- ? '', -- [6] -- 'char' or 'file' '', -- ['lang'] = ppar.lang or content language, } function p.colorbox(frame) local ppar = frameCurrent:getParent().args argsColorbox.lang = ppar.lang or mw.getContentLanguage():getCode() local results = {} local v1 = '' for i, v in ipairs(ppar) do if i <= 2 then argsColorbox[3] = v -- either code-2 ( BCDLMST-), or color value elseif v1 == '' then v1 = v -- (striped; border) local ct = 0 -- count of spaces local bp = 0 -- position of first space for c = 1, len(v1) do if sub(v1, c, c) == ' ' then ct = ct + 1 -- space count if bp == 0 then bp = c end end end local bc = '' if ct >= 3 then -- 3 = border, 4 = line bc = sub(v1, bp + 1) v1 = sub(v1, 1, bp - 1) end local cf = '' if ct == 1 then -- 'char' or 'file' bc = sub(v1, bp + 1) v1 = sub(v1, 1, bp - 1) cf = (sub(bc, -4, -4 ) == '.') and 'file' or 'char' end argsColorbox[4] = ct -- count of spaces argsColorbox[5] = bc argsColorbox[6] = cf -- 'char' or 'file' else argsColorbox[1] = v1 argsColorbox[2] = v insert(results, expand('Igen/cbox', argsColorbox)) v1 = '' end end if v1 ~= '' then argsColorbox[1] = v1 argsColorbox[2] = '' insert(results, expand('Igen/cbox', argsColorbox)) -- last item end return concat(results) end -- function colorbox -------------------------------------------------------------------------------- -- Returns a parameter list: (replacement of «#» or «~» by «=»: not necessary). function p.plist(frame) local ppar = frameCurrent:getParent().args return concat(ppar, '|') -- return gsub(concat(ppar, '|'), '#', '='), not necessary end -- function plist -- Repeats a text string. function p.loop (frame) local ppar = frameCurrent:getParent().args return string.rep(ppar[2] or '&nbsp', tonumber(ppar[1] or 1)) end -- function loop -- Increment a hex number by a ±decimal value function p.incrhx(frame) local gpar = frame.args -- global parms return format('%X', tonumber(gpar[1], 16) + gpar[2]) end -- function incrhx -- Display inline a range of characters with their Unicode code point in tool tip, such as emojis for Template:Emoji, with optional -- line breaks to limit lines to at most 16 characters (breaks after every code point which is the last one in a UCS column): -- {{#invoke:Iteration|parlst |temp=Emoji |1=(nb of characters) |2=(4- to 6-digits uppercase hexadecimal code point) -- |3=(border or 0) |4=(padding or 0) |5=(font size in px or -) -- |6=(styles or -) |(nocat=1) -- }} local argsEmodis = { -- WARNING: partial HTML (see the template using this function) -- This function can only be used after an UNTERMINATED opening HTML tag, -- whose LAST attribute MUST BE ' title=' not followed by quotes. -- This returned value closes the opening HTML tag of the template -- The calling template will then append itself the closing HTML tag. '"U+', '', -- [2] = format('%04X', code) '">', '', -- [4] = char(code) nil -- [5] = optional line break } function p.emodis(frame) local gpar = frame.args -- global parms local code = tonumber(gpar[1], 16) + gpar[2] argsEmodis[2] = format('%04X', code) argsEmodis[4] = char(code) argsEmodis[5] = gpar[3] == '16' and (code % 16 == 15 and '<br />') or nil return concat(argsEmodis) end -- function emodis -- For Template:Emoji table: {{#invoke:Iteration|emotab|prefix=1F250|par1=... | ... }} local argsEmotab = { -- Parameters for expanding 'Template:F'. '', -- [1] = file '', -- [2] = 'Z' '', -- [3] = '49' '', -- [4] = 'b' '', -- [5] = 'l' '', -- [6] = '' link = '*', } function p.emotab(frame) local gpar = frame.args -- global parms local codp codp = trim(gpar.par1 or '') --[['Z' ]] argsEmotab[2] = (codp ~= '') and codp or nil codp = trim(gpar.par2 or '') --[['49']] argsEmotab[3] = (codp ~= '') and codp or nil codp = trim(gpar.par3 or '') --[['b' ]] argsEmotab[4] = (codp ~= '') and codp or nil codp = trim(gpar.par4 or '') --[['l' ]] argsEmotab[5] = (codp ~= '') and codp or nil codp = trim(gpar.par5 or '') --[['' ]] argsEmotab[6] = (codp ~= '') and codp or nil codp = trim(gpar.codp or '') local parts = { '', -- [1] = v '', -- [2] = ((file == 'Emojio' or file == 'Fxemoj' or file == 'OpenMo') and upper or lower)(codp) '.svg', } local results = {} for _, v in ipairs(gpar) do local file = sub(v, 1, 6) parts[1] = v parts[2] = ((file == 'Emojio' or file == 'Fxemoj' or file == 'OpenMo') and upper or lower)(codp) file = concat(parts) if titleNew(file, 6).exists then argsEmotab[1] = file insert(results, expand('F', argsEmotab)) end end return concat(results) end -- function emotab -- For template: Navcat (via Navcattab). function p.navcat(frame) local gpar = frame.args -- global parms local cats = { -- Categories to generate. trim(gpar.c1 or ''), '', -- [2] = ctxt trim(gpar.c2 or ''), } local args = { -- Parameters for expanding 'Template:Navcat'. '', -- [1] = (ccod = vtab[2] --[[opt.]]) '', -- [2] = concat(cats) '', -- [3] = (dtxt = Ucfirst(ctxt)) '', -- [4] = (cnam = vtab[3] or ccod or ctxt) span = trim(gpar.span or ''), } local ppar = frameCurrent:getParent().args local results = {} for _, v in ipairs(ppar) do v = trim(v) if v == '' or v == 'nl' then insert(results, '<br /> ') else local vtab = split(v, '/') local ctxt = vtab[1] or '&nbsp;' --[[requ.]] local ccod = vtab[2] --[[opt.]] cats[2] = ctxt args[1] = ccod args[2] = concat(cats) args[3] = Ucfirst(ctxt) args[4] = vtab[3] or ccod or ctxt insert(results, expand('Navcat', args)) end end return concat(results) end -- function navcat -- For Template:Tle. function p.tleparm(frame) local ppar = frameCurrent:getParent().args local parnumber = trim(ppar.number or '') local parkbd = trim(ppar.kbd or '') if parkbd ~= '' then parkbd = { '<kbd>', '', -- [2] = par1 '</kbd>', } else parkbd = nil end local args = { -- Parameters for expanding 'Template:Tle/parm'. '', -- [1] = par1 '', -- [2] = v trim(ppar.f or ''), -- form feed trim(ppar.style or ''), -- style for parameter value trim(ppar.style2 or ''), -- style for parameter name } local results = {} for i, v in ipairs(ppar) do local z = tostring(i) local par1 = trim(ppar['p' .. z] or '') if par1 ~= '' and parkbd then parkbd[2] = par1 par1 = concat(parkbd) end if par1 == '' and parnumber ~= '' then par1 = z end if par1 ~= '' then -- keep parameter value as is if positional (and not parnumberd explicitly) v = trim(v) if v == '' then v = '&thinsp;' --[[Note: '&thinsp;' would change the semantics.]] end end args[1] = par1 args[2] = v insert(results, expand('Tle/parm', args)) end return concat(results) end -- function tleparm -- for Template:Variate. function p.variation(frame) local ppar = frameCurrent:getParent().args local sept = ppar.sept or '|' -- separator before local sample = trim(ppar[1] or '') -- sample string local pattern = ppar.pttn or '?' -- pattern local var1 = ppar.var1 or '' -- filling space before local var2 = ppar.var2 or '' -- filling space after local sep2 = ppar.sep2 or '' -- separator after local parts = { -- Replacement parts for gsub(). (var1 == 'space') and ' ' or var1, '', -- [2] = trim(v) (var2 == 'space') and ' ' or var2, } local results = {} for i, v in ipairs(ppar) do if i > 1 then insert(results, sept) parts[2] = trim(v) insert(results, gsub(sample, pattern, concat(parts))) insert(results, sep2) end end return concat(results) end return p l0to3835hvw8ivav31inqbtlaogtgnw Tempilet:C/display 10 1340 10721 2024-11-20T18:04:49Z commons>Verdy p 0 10721 wikitext text/x-wiki {{#switch: + |{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}} = {{#switch: {{{c|}}} |i|n = {{i18n/namespace|c|link={{{v|}}}|lang={{{l|}}}}}|l=category|Category}}: }}{{#switch: {{{2|}}} ||+|-|X|x|B|b = {{{1|}}} |#default = {{{2|}}} }}<noinclude>{{Documentation |1 = Template:C/doc |content = Subtemplate (used by {{Tlx|C|category name|...}}) to ''display'' a category name, with or without preceding by the namespace (as a part of the link). Needs (possibly empty) parameters: * 1 = (default label to display) * 2 = (alternate label to display) * 3 * 4 The following parameters are used only if "{1}{2}{3}{4}"="+" to prepend a prefix before the label: * c = i or n * l = lang * v = link }}</noinclude> dn3e5n9ijrqhgoksp2xicjwllhigghq 10722 10721 2026-08-25T23:38:30Z RAPTOR7762 18 1 revision imported from [[:commons:Template:C/display]] 10721 wikitext text/x-wiki {{#switch: + |{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}} = {{#switch: {{{c|}}} |i|n = {{i18n/namespace|c|link={{{v|}}}|lang={{{l|}}}}}|l=category|Category}}: }}{{#switch: {{{2|}}} ||+|-|X|x|B|b = {{{1|}}} |#default = {{{2|}}} }}<noinclude>{{Documentation |1 = Template:C/doc |content = Subtemplate (used by {{Tlx|C|category name|...}}) to ''display'' a category name, with or without preceding by the namespace (as a part of the link). Needs (possibly empty) parameters: * 1 = (default label to display) * 2 = (alternate label to display) * 3 * 4 The following parameters are used only if "{1}{2}{3}{4}"="+" to prepend a prefix before the label: * c = i or n * l = lang * v = link }}</noinclude> dn3e5n9ijrqhgoksp2xicjwllhigghq Module:Transclude 828 1341 10723 2023-02-22T11:10:12Z commons>ExE Boss 0 Update `@require` doc comment 10723 Scribunto text/plain -- <nowiki> -------------------------------------------------------------------------------- -- Module that allows transcluding a template with all parent arguments. -- Useful in `/i18n` template subpages that delegate to a `/layout` subpage. -- -- @module transclude -- @author [[User:ExE Boss]] -------------------------------------------------------------------------------- require('strict') local checkType = require('libraryUtil').checkType; local p = {} local INVALID_TITLES = { ["."] = true, [".."] = true, }; local function _ne(value) return value and value ~= '' end -------------------------------------------------------------------------------- -- Helper function that merges argument tables. -- -- @function mergeArgs -- @param {table} inArgs -- @param {table} outArgs -------------------------------------------------------------------------------- local function mergeArgs(inArgs, outArgs, opts) checkType("mergeArgs", 1, inArgs, "table"); checkType("mergeArgs", 2, outArgs, "table"); checkType("mergeArgs", 3, opts, "table", true); opts = opts or {} local ignoredParams = opts.ignoredParams; local ignoredPrefix = opts.ignoredPrefix; for name, value in pairs(inArgs) do if (type(name) == "string") then if not ( (ignoredParams and ignoredParams[name] == true) or (ignoredPrefix and ignoredPrefix == name:sub(1, ignoredPrefix:len())) ) then outArgs[name] = value; end else outArgs[name] = value; end end return outArgs; end -- Exported for testing: p['#mergeArgs'] = mergeArgs; local mt = {}; function mt.__index(_, name) if ( type(name) ~= "string" or INVALID_TITLES[name] or mw.ustring.find(name, "#", nil, true) ) then return nil; end local title = mw.title.new(name, "Template") if (not title) then return nil; end return function (frame) checkType('transclude["' .. name .. '"]', 1, frame, "table"); local parentFrame = frame:getParent(); local ignoredParams, ignoredPrefix; if _ne(frame.args["#ignoredParams"]) then ignoredParams = {}; for m in mw.text.gsplit(frame.args["#ignoredParams"], '|', true) do ignoredParams[mw.text.trim(m)] = true; end end if _ne(frame.args['#ignoredPrefix']) then ignoredPrefix = frame.args['#ignoredPrefix']; end local args = {}; if (parentFrame) then mergeArgs(parentFrame.args, args, { ignoredParams = ignoredParams, ignoredPrefix = ignoredPrefix, }); end mergeArgs(frame.args, args, { ignoredPrefix = "#", }); if (not title.exists) then return "[[:" .. title.fullText .. "]]"; end return frame:expandTemplate{ title = title, args = args, }; end end return setmetatable(p, mt); hysh2nsdh3zjyxf0x9i4gz5mnkh4mhj 10724 10723 2026-08-25T23:38:30Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Transclude]] 10723 Scribunto text/plain -- <nowiki> -------------------------------------------------------------------------------- -- Module that allows transcluding a template with all parent arguments. -- Useful in `/i18n` template subpages that delegate to a `/layout` subpage. -- -- @module transclude -- @author [[User:ExE Boss]] -------------------------------------------------------------------------------- require('strict') local checkType = require('libraryUtil').checkType; local p = {} local INVALID_TITLES = { ["."] = true, [".."] = true, }; local function _ne(value) return value and value ~= '' end -------------------------------------------------------------------------------- -- Helper function that merges argument tables. -- -- @function mergeArgs -- @param {table} inArgs -- @param {table} outArgs -------------------------------------------------------------------------------- local function mergeArgs(inArgs, outArgs, opts) checkType("mergeArgs", 1, inArgs, "table"); checkType("mergeArgs", 2, outArgs, "table"); checkType("mergeArgs", 3, opts, "table", true); opts = opts or {} local ignoredParams = opts.ignoredParams; local ignoredPrefix = opts.ignoredPrefix; for name, value in pairs(inArgs) do if (type(name) == "string") then if not ( (ignoredParams and ignoredParams[name] == true) or (ignoredPrefix and ignoredPrefix == name:sub(1, ignoredPrefix:len())) ) then outArgs[name] = value; end else outArgs[name] = value; end end return outArgs; end -- Exported for testing: p['#mergeArgs'] = mergeArgs; local mt = {}; function mt.__index(_, name) if ( type(name) ~= "string" or INVALID_TITLES[name] or mw.ustring.find(name, "#", nil, true) ) then return nil; end local title = mw.title.new(name, "Template") if (not title) then return nil; end return function (frame) checkType('transclude["' .. name .. '"]', 1, frame, "table"); local parentFrame = frame:getParent(); local ignoredParams, ignoredPrefix; if _ne(frame.args["#ignoredParams"]) then ignoredParams = {}; for m in mw.text.gsplit(frame.args["#ignoredParams"], '|', true) do ignoredParams[mw.text.trim(m)] = true; end end if _ne(frame.args['#ignoredPrefix']) then ignoredPrefix = frame.args['#ignoredPrefix']; end local args = {}; if (parentFrame) then mergeArgs(parentFrame.args, args, { ignoredParams = ignoredParams, ignoredPrefix = ignoredPrefix, }); end mergeArgs(frame.args, args, { ignoredPrefix = "#", }); if (not title.exists) then return "[[:" .. title.fullText .. "]]"; end return frame:expandTemplate{ title = title, args = args, }; end end return setmetatable(p, mt); hysh2nsdh3zjyxf0x9i4gz5mnkh4mhj Tempilet:Transclude 10 1342 10725 2019-07-16T10:41:02Z commons>4nn1l2 0 Changed protection level for "[[Template:Transclude]]": downgraded protection level per [[Special:Permalink/357548402|consensus]] ([Move=Allow only template editors and administrators] (indefinite) [Edit=Allow only template editors and administrators] (indefinite)) 10725 wikitext text/x-wiki {{#switch: {{NAMESPACE: {{{1}}} }} |#default = {{FULLPAGENAME: {{{1}}} }} <!-- eg "User:Foo" --> |{{ns:0}} = {{#ifeq: {{NAMESPACE: {{{1}}} }} | {{NAMESPACE: Template{{{1}}} }} | Template:{{{1}}} <!-- no leading colon, eg "Foo" --> | {{PAGENAME: {{{1}}} }} <!-- leading colon, eg ":Foo", so we want the article --> }} }}<noinclude> {{documentation}} </noinclude> ob9m2b913drxlie5tgekieudupfrl9n 10726 10725 2026-08-25T23:38:30Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Transclude]] 10725 wikitext text/x-wiki {{#switch: {{NAMESPACE: {{{1}}} }} |#default = {{FULLPAGENAME: {{{1}}} }} <!-- eg "User:Foo" --> |{{ns:0}} = {{#ifeq: {{NAMESPACE: {{{1}}} }} | {{NAMESPACE: Template{{{1}}} }} | Template:{{{1}}} <!-- no leading colon, eg "Foo" --> | {{PAGENAME: {{{1}}} }} <!-- leading colon, eg ":Foo", so we want the article --> }} }}<noinclude> {{documentation}} </noinclude> ob9m2b913drxlie5tgekieudupfrl9n Tempilet:I18n/COA 10 1343 10729 2026-05-28T10:24:15Z commons>Kontributor 2K 0 nc 10729 wikitext text/x-wiki {{#switch: {{{1|}}} |COA_of = {{LangSwitch |ar = {{WA|شعار النبالة}} |ca={{WC|Escut d'armes}} |cs={{Wc|Znak (heraldika)|Znak}} |da={{Wda|Våben (heraldisk)|Våben}} |de={{Wd|Wappen}} |en={{W|Coat of arms|Coat&nbsp;of&nbsp;arms}} |eo={{WE|Blazono}} |es={{We|Escudo (heráldica)|Escudo&nbsp;de&nbsp;armas}} |et={{Wet|Vapp}} |eu={{W|Armarri||eu}}a |fi={{Wfi|Vaakuna}} |fr={{Wf|Blason (héraldique)|Blason}} |gl=Escudo |he=סמל |hsb=wopon |hu={{Wh|Címer}} |it={{Wi|Stemma}} |is={{W|Skjaldarmerki||is}} |lv={{Wlv|Ģerbonis}} |mk={{Wm|Грб}} |ml={{W|Coat of arms|ഔദ്യോഗിക&nbsp;മുദ്ര}} |nds={{W|Wapen (Heraldik)|Wapen|nds}} |nl={{Wn|Wapen (heraldiek)|Wapen}} |nn={{W|Heraldiske våpen|Våpen|nn}} |no={{W|Våpen (heraldikk)|Våpen|no}} |pl={{WP|Herb}} |pt={{Wp|Brasão}}&nbsp;de&nbsp;armas |ru={{Wr|Герб}} |sk={{Wsk|Erb}} |sl={{Wsl|Grb}} |sv={{Wsv|Heraldiskt vapen|Vapen}} |tr={{Wtr|Arma}} |zh-hans={{Wz|紋章}} |zh-hant={{Wz|紋章}} |lang={{{lang|}}} |default={{label|Q14659}} }} |blazon = {{LangSwitch |ar = {{WA|وصف شعار النبالة}} |ca={{WC|Blasonament}} |cs={{Wc|Blason}} |da={{Wda|Blasonering}} |de={{Wd|Blasonierung}} |en={{W|Blazon}} |eo=Blazonado |es={{We|Blasonamiento}} |et=heraldiline&nbsp;kirjeldus |eu=Armarriaren&nbsp;antolaketa |fi={{Wfi|Heraldinen selitys|Vaakunaselitys}} |fr={{Wf|Blasonnement}} |gl=Blasonamento |he={{Whe|בלאזון}} |hu={{Wh|Címerleírás}} |it={{Wi|Blasonatura}} |lv=Blazonēšana |mk={{Wm|Блазонирање|Блазон}} |ml={{W|Blazon|ബ്ലേസൺ}} |nds={{W|Blasonerung||nds}} |nl={{Wn|Blazoenering}}<!--redirect--> |nn={{W|Blasonering||no}} |no={{W|Blasonering||no}} |pl={{WP|Blazonowanie}} |pt={{Wp|Brasonamento}} |ru={{Wr|Геральдический язык|Блазонирование}} |sk={{Wsk|Blazón}} |sl=Blazon<!--{{Wsl|Blazon}} no page--> |sv={{Wsv|Blasonering}} |tr=Blazon<!--{{Wtr|Blazon}} no page--> |zh-hans=纹章描述 |zh-hant=紋章描述 |lang={{{lang|}}} |default={{label|Q494452}} }} |tincture ={{LangSwitch |ca={{WC|Esmalt (heràldica)|Esmalt}} |cs={{Wc|Tinktura (heraldika)|Tinktura}} |da={{Wda|Tinktur}} |de={{Wd|Tingierung}} |de-ch={{Wd|Tingierung}} |en={{W|Tincture (heraldry)|Tincture}} |eo={{WE|Heraldikaj koloroj}} |es={{We|Esmalte (heráldica)|Esmalte}} |et=Värvused |fi={{Wfi|Tinktuuri}} |fr={{Wf|Couleur (héraldique)|Couleur}} |gl={{Wg|Esmalte (heráldica)|Esmalte}} |he={{Whe|טינקטורה}} |hu={{Wh|Színek (heraldika)|Szín}} |it={{Wi|Smalto (araldica)|Smalto}} |ja={{W日|ティンクチャー (紋章学)|ティンクチャー}} |kk={{W|Тинктура (геральдика)|Тинктура|kk}} |la={{W|Tinctura heraldica|Tinctura|la}} |lt={{Wlt|Spalvos (heraldika)|Spalvos}} |lv=Krāsas heraldikā |mk=Боја<!--{{Wm|Боја (хералдика)|Боја}} no page --> |ml={{W|Tincture (heraldry)|ടിങ്‌ചർ}} |nb={{W|Tincture (heraldry)|Tinkturer}} |nds-nl={{W|nds-nl:Heraldische kleur|Heraldische kleur}} |nl={{Wn|Heraldische kleur}} |no={{W|Tinkturer||no}} |pl={{WP|Tynktura (heraldyka)|Tynktura}} |pt={{Wp|Esmalte (heráldica)|Esmalte}} |pt-br={{Wp|Esmalte (heráldica)|Esmalte}} |ru={{Wr|Тинктуры}} |simple={{W|Tincture (heraldry)|Tincture}} |sv={{Wsv|Tinktur (heraldik)|Tinktur}} |th={{Wth|ผิวตรา (มุทราศาสตร์)|ผิวตรา}} |tr=Tentür<!--{{Wtr|Tentür (hanedanlık armaları)|Tentür}} no page --> |uk={{Wu|Тинктури}} |zh-hans={{Wz|颜色 (纹章学)|纹章颜色}} |zh-hant={{Wz|顏色 (紋章學)|紋章顏色}} |lang={{{lang|}}} |default={{label|Q3404720}} }} |reference = {{LangSwitch |ar = مرجع الوصف |en = Blazon reference |lv = Atsauce |mk = Извор на блазонот |ml = ബ്ലേസൺ അവലംബം |nl = Blazoeneringsbron |pl = Referencja blazonowania |tr = Blazon kaynağı |zh-hans=纹章描述参考资料 |zh-hant=紋章描述參考資料 |default = {{int:wm-license-artwork-references}} |lang={{{lang|}}} }} |element = {{LangSwitch |ar = عنصر شعار النبالة |de = Heraldische Figur |en = Element of coat&nbsp;of&nbsp;arms |es = Figura heráldica |fr = Élément pour le dessin de blasons |nl = Heraldisch element |mk = Грбна фигура |ml = ഔദ്യോഗികമുദ്രയുടെ ഘടകം |it = Figura araldica |lv = Heraldiskās figūras |pl = [[:pl:Heraldyka#Elementy_herbu|Element herbu]] |pt = Elemento do brasão |ru = Гербовая фигура |tr = Arması unsuru |zh-hans=纹章的元素 |zh-hant=紋章的元素 |lang={{{lang|}}} }} |ecclesial = {{LangSwitch |ca = escut eclesiàstic |cs = znak církevní |de = Kirchenwappen |en = ecclesiastical coat&nbsp;of&nbsp;arms |eo = blazono eklezia |es = escudo&nbsp;eclesiástico |fi = vaakuna kirkollinen |fr = blason&nbsp;ecclésiastique |hu = címer egyházi |it = stemma&nbsp;ecclesiastico |nn = våpen kirkollinen |nl = wapen kerkelijk |pl = herb eklezjalny |pt = brasão&nbsp;eclesial |sv = vapen kyrklig |zh-hans=基督教会纹章 |zh-hant=基督教會紋章 |lang={{{lang|}}} }} |development = {{LangSwitch |ar=&nbsp;منشأ الملف |bg=&nbsp;развитие |cs=&nbsp;vývoj |da=&nbsp;udvikling |de=&#x2011;Erstellung |el=&nbsp;ανάπτυξη |en=&nbsp;development |es=&nbsp;desarrollo |fi=&nbsp;kehittely |fr=&nbsp;information |he=התפתחות&nbsp; |hu=&nbsp;kód |it=&nbsp;sviluppo |ja=&nbsp;開発 |ko=&nbsp;발전 |lv=&nbsp;veidošana |mk=&nbsp;разработка |ml=&nbsp;വികസനം |nl=&nbsp;ontwikkeling |no=&nbsp;utvikling |pl=&nbsp;rozwój |pt=&nbsp;desenvolvimento |ro=&nbsp;dezvoltare |ru=&#x2011;разработка |sl=&nbsp;razvoj |sv=&nbsp;utveckling |te=&nbsp;పెరుగుదల |tr=&nbsp;gelişimi |uk=&nbsp;розвиток |zh-hans=开发 |zh-hant=開發 |default=&nbsp;{{T0|I18n/COA|genesis}} }} |#default={{{1|}}}<!-- return the unknown argument as-it-is --> }}<noinclude>Internationalization page used by {{t|COAInformation}} &nbsp; <small>(and {{t|Igen}})</small> [[Category:Templates using LangSwitch for internationalisation]]</noinclude> m2xitulqlmnnjrqzpzd9ikcb6i1n4wo 10730 10729 2026-08-25T23:38:30Z RAPTOR7762 18 1 revision imported from [[:commons:Template:I18n/COA]] 10729 wikitext text/x-wiki {{#switch: {{{1|}}} |COA_of = {{LangSwitch |ar = {{WA|شعار النبالة}} |ca={{WC|Escut d'armes}} |cs={{Wc|Znak (heraldika)|Znak}} |da={{Wda|Våben (heraldisk)|Våben}} |de={{Wd|Wappen}} |en={{W|Coat of arms|Coat&nbsp;of&nbsp;arms}} |eo={{WE|Blazono}} |es={{We|Escudo (heráldica)|Escudo&nbsp;de&nbsp;armas}} |et={{Wet|Vapp}} |eu={{W|Armarri||eu}}a |fi={{Wfi|Vaakuna}} |fr={{Wf|Blason (héraldique)|Blason}} |gl=Escudo |he=סמל |hsb=wopon |hu={{Wh|Címer}} |it={{Wi|Stemma}} |is={{W|Skjaldarmerki||is}} |lv={{Wlv|Ģerbonis}} |mk={{Wm|Грб}} |ml={{W|Coat of arms|ഔദ്യോഗിക&nbsp;മുദ്ര}} |nds={{W|Wapen (Heraldik)|Wapen|nds}} |nl={{Wn|Wapen (heraldiek)|Wapen}} |nn={{W|Heraldiske våpen|Våpen|nn}} |no={{W|Våpen (heraldikk)|Våpen|no}} |pl={{WP|Herb}} |pt={{Wp|Brasão}}&nbsp;de&nbsp;armas |ru={{Wr|Герб}} |sk={{Wsk|Erb}} |sl={{Wsl|Grb}} |sv={{Wsv|Heraldiskt vapen|Vapen}} |tr={{Wtr|Arma}} |zh-hans={{Wz|紋章}} |zh-hant={{Wz|紋章}} |lang={{{lang|}}} |default={{label|Q14659}} }} |blazon = {{LangSwitch |ar = {{WA|وصف شعار النبالة}} |ca={{WC|Blasonament}} |cs={{Wc|Blason}} |da={{Wda|Blasonering}} |de={{Wd|Blasonierung}} |en={{W|Blazon}} |eo=Blazonado |es={{We|Blasonamiento}} |et=heraldiline&nbsp;kirjeldus |eu=Armarriaren&nbsp;antolaketa |fi={{Wfi|Heraldinen selitys|Vaakunaselitys}} |fr={{Wf|Blasonnement}} |gl=Blasonamento |he={{Whe|בלאזון}} |hu={{Wh|Címerleírás}} |it={{Wi|Blasonatura}} |lv=Blazonēšana |mk={{Wm|Блазонирање|Блазон}} |ml={{W|Blazon|ബ്ലേസൺ}} |nds={{W|Blasonerung||nds}} |nl={{Wn|Blazoenering}}<!--redirect--> |nn={{W|Blasonering||no}} |no={{W|Blasonering||no}} |pl={{WP|Blazonowanie}} |pt={{Wp|Brasonamento}} |ru={{Wr|Геральдический язык|Блазонирование}} |sk={{Wsk|Blazón}} |sl=Blazon<!--{{Wsl|Blazon}} no page--> |sv={{Wsv|Blasonering}} |tr=Blazon<!--{{Wtr|Blazon}} no page--> |zh-hans=纹章描述 |zh-hant=紋章描述 |lang={{{lang|}}} |default={{label|Q494452}} }} |tincture ={{LangSwitch |ca={{WC|Esmalt (heràldica)|Esmalt}} |cs={{Wc|Tinktura (heraldika)|Tinktura}} |da={{Wda|Tinktur}} |de={{Wd|Tingierung}} |de-ch={{Wd|Tingierung}} |en={{W|Tincture (heraldry)|Tincture}} |eo={{WE|Heraldikaj koloroj}} |es={{We|Esmalte (heráldica)|Esmalte}} |et=Värvused |fi={{Wfi|Tinktuuri}} |fr={{Wf|Couleur (héraldique)|Couleur}} |gl={{Wg|Esmalte (heráldica)|Esmalte}} |he={{Whe|טינקטורה}} |hu={{Wh|Színek (heraldika)|Szín}} |it={{Wi|Smalto (araldica)|Smalto}} |ja={{W日|ティンクチャー (紋章学)|ティンクチャー}} |kk={{W|Тинктура (геральдика)|Тинктура|kk}} |la={{W|Tinctura heraldica|Tinctura|la}} |lt={{Wlt|Spalvos (heraldika)|Spalvos}} |lv=Krāsas heraldikā |mk=Боја<!--{{Wm|Боја (хералдика)|Боја}} no page --> |ml={{W|Tincture (heraldry)|ടിങ്‌ചർ}} |nb={{W|Tincture (heraldry)|Tinkturer}} |nds-nl={{W|nds-nl:Heraldische kleur|Heraldische kleur}} |nl={{Wn|Heraldische kleur}} |no={{W|Tinkturer||no}} |pl={{WP|Tynktura (heraldyka)|Tynktura}} |pt={{Wp|Esmalte (heráldica)|Esmalte}} |pt-br={{Wp|Esmalte (heráldica)|Esmalte}} |ru={{Wr|Тинктуры}} |simple={{W|Tincture (heraldry)|Tincture}} |sv={{Wsv|Tinktur (heraldik)|Tinktur}} |th={{Wth|ผิวตรา (มุทราศาสตร์)|ผิวตรา}} |tr=Tentür<!--{{Wtr|Tentür (hanedanlık armaları)|Tentür}} no page --> |uk={{Wu|Тинктури}} |zh-hans={{Wz|颜色 (纹章学)|纹章颜色}} |zh-hant={{Wz|顏色 (紋章學)|紋章顏色}} |lang={{{lang|}}} |default={{label|Q3404720}} }} |reference = {{LangSwitch |ar = مرجع الوصف |en = Blazon reference |lv = Atsauce |mk = Извор на блазонот |ml = ബ്ലേസൺ അവലംബം |nl = Blazoeneringsbron |pl = Referencja blazonowania |tr = Blazon kaynağı |zh-hans=纹章描述参考资料 |zh-hant=紋章描述參考資料 |default = {{int:wm-license-artwork-references}} |lang={{{lang|}}} }} |element = {{LangSwitch |ar = عنصر شعار النبالة |de = Heraldische Figur |en = Element of coat&nbsp;of&nbsp;arms |es = Figura heráldica |fr = Élément pour le dessin de blasons |nl = Heraldisch element |mk = Грбна фигура |ml = ഔദ്യോഗികമുദ്രയുടെ ഘടകം |it = Figura araldica |lv = Heraldiskās figūras |pl = [[:pl:Heraldyka#Elementy_herbu|Element herbu]] |pt = Elemento do brasão |ru = Гербовая фигура |tr = Arması unsuru |zh-hans=纹章的元素 |zh-hant=紋章的元素 |lang={{{lang|}}} }} |ecclesial = {{LangSwitch |ca = escut eclesiàstic |cs = znak církevní |de = Kirchenwappen |en = ecclesiastical coat&nbsp;of&nbsp;arms |eo = blazono eklezia |es = escudo&nbsp;eclesiástico |fi = vaakuna kirkollinen |fr = blason&nbsp;ecclésiastique |hu = címer egyházi |it = stemma&nbsp;ecclesiastico |nn = våpen kirkollinen |nl = wapen kerkelijk |pl = herb eklezjalny |pt = brasão&nbsp;eclesial |sv = vapen kyrklig |zh-hans=基督教会纹章 |zh-hant=基督教會紋章 |lang={{{lang|}}} }} |development = {{LangSwitch |ar=&nbsp;منشأ الملف |bg=&nbsp;развитие |cs=&nbsp;vývoj |da=&nbsp;udvikling |de=&#x2011;Erstellung |el=&nbsp;ανάπτυξη |en=&nbsp;development |es=&nbsp;desarrollo |fi=&nbsp;kehittely |fr=&nbsp;information |he=התפתחות&nbsp; |hu=&nbsp;kód |it=&nbsp;sviluppo |ja=&nbsp;開発 |ko=&nbsp;발전 |lv=&nbsp;veidošana |mk=&nbsp;разработка |ml=&nbsp;വികസനം |nl=&nbsp;ontwikkeling |no=&nbsp;utvikling |pl=&nbsp;rozwój |pt=&nbsp;desenvolvimento |ro=&nbsp;dezvoltare |ru=&#x2011;разработка |sl=&nbsp;razvoj |sv=&nbsp;utveckling |te=&nbsp;పెరుగుదల |tr=&nbsp;gelişimi |uk=&nbsp;розвиток |zh-hans=开发 |zh-hant=開發 |default=&nbsp;{{T0|I18n/COA|genesis}} }} |#default={{{1|}}}<!-- return the unknown argument as-it-is --> }}<noinclude>Internationalization page used by {{t|COAInformation}} &nbsp; <small>(and {{t|Igen}})</small> [[Category:Templates using LangSwitch for internationalisation]]</noinclude> m2xitulqlmnnjrqzpzd9ikcb6i1n4wo Tempilet:Igen/par 10 1344 10731 2025-04-24T09:21:48Z commons>Auntof6 0 Moving from [[Category:Miscellaneous subtemplates]] to [[Category:Subtemplates]] 10731 wikitext text/x-wiki {{#switch:{{{1|}}}|/|+|-|$|%|%f|%r|%s|%t|%T|%i|%n|%u|%v|%w|g-|gb|gc|gd|ge|gf|gh|gi|gj|gl|gP|gr|gw|~|!|?|§|&|<|<v|<i|<n|^|>|×|\|*|@|(|)|°|Ɨ|←|→|⇒|_= |s|n|v= |#default={{{1|}}} }}<noinclude> [[Category:Subtemplates|Imgen]] <br> {{Heavily used template}} This {{T0|Image generation|Image generation subtemplate}} evaluates and excludes all values that can be set *at parameter 1 - ''without'' being a tool name or abbr. *at parameter 2 - ''without'' being an error count (can be: "-1", "0", or any numeric value) <!-- Note: currently used by *Igen for param1 ( tool ) *Igen for param2 (errors) *Graphic Lab for errors (p2) *Igen/amp for tool name (p1) --> </noinclude> ls58ucss2eq6gwcq90wrmwyrb1508em 10732 10731 2026-08-25T23:38:30Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Igen/par]] 10731 wikitext text/x-wiki {{#switch:{{{1|}}}|/|+|-|$|%|%f|%r|%s|%t|%T|%i|%n|%u|%v|%w|g-|gb|gc|gd|ge|gf|gh|gi|gj|gl|gP|gr|gw|~|!|?|§|&|<|<v|<i|<n|^|>|×|\|*|@|(|)|°|Ɨ|←|→|⇒|_= |s|n|v= |#default={{{1|}}} }}<noinclude> [[Category:Subtemplates|Imgen]] <br> {{Heavily used template}} This {{T0|Image generation|Image generation subtemplate}} evaluates and excludes all values that can be set *at parameter 1 - ''without'' being a tool name or abbr. *at parameter 2 - ''without'' being an error count (can be: "-1", "0", or any numeric value) <!-- Note: currently used by *Igen for param1 ( tool ) *Igen for param2 (errors) *Graphic Lab for errors (p2) *Igen/amp for tool name (p1) --> </noinclude> ls58ucss2eq6gwcq90wrmwyrb1508em Tempilet:Created with/en 10 1345 10733 2020-06-10T17:01:00Z commons>Sarang 0 upon request [[Template talk:Created with Inkscape#W3C-unspecified]] 10733 wikitext text/x-wiki {{Created with |logo={{{logo|}}} |toolcat={{{toolcat|}}} |iconsize={{{iconsize|}}} |width={{{width|}}} |style={{{style|}}} |category={{{category|}}} |key={{{key|}}} |sub={{{sub|}}} |err={{{err|}}} |w3c={{{w3c|}}} |c_text={{{c_text|}}} |text=This {{#ifeq:{{{big}}}|>|''oversized''&#32;}}<!-- -->{{#switch:{{{w3c}}}|I=W3C-{{#ifeq:{{{err}}}|-1|uncheckable|''invalid''}}<!-- -->|S|s=''W3C-unspecified''}}&#32;<!-- -->{{#if:{{{top|}}}|{{Igen/top|{{{top}}}|{{{what|graphics}}}|lang=en}}<!-- -->|{{{what|graphics}}}}}&#32;<!-- -->was {{#if:{{{c_text|}}}|{{{c_text|}}}|created with}} {{{tool}}}{{#if:{{{1|}}}|<nowiki/> by {{{1}}}}}{{{more|.}}} |lang=en}}<noinclude>{{TrRq|d|+}}</noinclude> 0wbzpqzeeutqqct6si8uhigsj6zn654 10734 10733 2026-08-25T23:38:30Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Created_with/en]] 10733 wikitext text/x-wiki {{Created with |logo={{{logo|}}} |toolcat={{{toolcat|}}} |iconsize={{{iconsize|}}} |width={{{width|}}} |style={{{style|}}} |category={{{category|}}} |key={{{key|}}} |sub={{{sub|}}} |err={{{err|}}} |w3c={{{w3c|}}} |c_text={{{c_text|}}} |text=This {{#ifeq:{{{big}}}|>|''oversized''&#32;}}<!-- -->{{#switch:{{{w3c}}}|I=W3C-{{#ifeq:{{{err}}}|-1|uncheckable|''invalid''}}<!-- -->|S|s=''W3C-unspecified''}}&#32;<!-- -->{{#if:{{{top|}}}|{{Igen/top|{{{top}}}|{{{what|graphics}}}|lang=en}}<!-- -->|{{{what|graphics}}}}}&#32;<!-- -->was {{#if:{{{c_text|}}}|{{{c_text|}}}|created with}} {{{tool}}}{{#if:{{{1|}}}|<nowiki/> by {{{1}}}}}{{{more|.}}} |lang=en}}<noinclude>{{TrRq|d|+}}</noinclude> 0wbzpqzeeutqqct6si8uhigsj6zn654 Tempilet:Created with 10 1346 10735 2024-09-25T13:13:59Z commons>Lucas Werkmeister 0 fulfilling edit request by [[User:Chealer]] – fix |width= 10735 wikitext text/x-wiki {{Created with/layout|logo={{{logo|}}}|iconsize={{#if:{{{iconsize|}}}|{{{iconsize}}}}}<!-- -->|text={{{text|}}}|more={{{more|}}}|lang={{{lang|}}}|width={{{width|}}}<!-- -->|style={{#ifeq:{{{w3c}}}|s|background:#FEE;border:1px solid #600}};{{{style|}}}}}<!-- == Category == -->{{#if:{{#ifeq:{{NAMESPACE}}|File||1}}<!-- no when not "FILE" -->{{#ifeq:{{{category|}}}|-|1}}|<!-- no when suppr "-" -->|{{#ifeq:{{padleft:|2|{{{category|}}}}}|&#91;[|{{{category}}}<!-- as-it-is when "[[…" -->|{{#if:{{{category|}}}{{{toolcat|}}}<!-- either one is necessary -->|[[Category:{{#if:{{{category|}}}|{{{category}}}<!-- category: value without brackets == prefix == -->|{{#switch:{{{w3c}}}<!-- (uncheckable SVG solved otherwise) - only some main templates -->|V=Valid SVG <!-- -->|I=Invalid SVG <!-- -->|s=Unspec SVG <!-- this is a maintenance situation -->|N|n=PNG <!-- or other raster graphics images -->|S=SVG }}<!-- -->{{#switch:{{{w3c}}}|V|I|s|N|n|S=&#32;{{lcfirst:{{#if:{{{c_text|}}}|{{{c_text}}}|created with}} {{{toolcat}}}}}<!-- -->|{{ucfirst:{{#if:{{{c_text|}}}|{{{c_text}}}|created with}} {{{toolcat}}}}}}}}}<!-- == subcat == -->{{#ifeq:{{{w3c}}}|s||{{#if:{{{sub|}}}|{{#ifeq:{{{sub}}}|-|<!-- -->|{{#ifeq:{{padleft:|1|{{{sub}}}}}|:|{{#invoke:Igenmod|subst|{{{sub}}}}}|{{{sub}}}}}}}}}}}<!-- == sortkey == -->{{#switch:{{{key}}}|~=|<!-- -->|{{!}}{{#switch:{{{w3c}}}<!-- -->|I={{#if:{{{err|}}}|{{#iferror:{{#ifexpr:{{{err|1}}}}}|2222<!-- (not when unspec) -->|{{padleft:{{#expr:1000*{{#expr:1/{{{err|}}} round 3}}}}|4|0}}}}<!-- sort desc. -->|{{#ifeq:{{{w3c}}}|I|3333}}}}<!-- -->|s={{#invoke:Igenmod|invdate}}}}}}<!-- sortkey for Unspec == key & PN == -->{{#switch:{{{key}}}|n|-|~=|={{PAGENAME}}|{{{key}}}}}]]<!-- error: toolcat missing -->|}}}}}}<noinclude> {{Documentation|{{ifsandbox|doc}}}} </noinclude> akfhd8ij2n0lr3pjlz47nxhcxncoq4f 10736 10735 2026-08-25T23:38:30Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Created_with]] 10735 wikitext text/x-wiki {{Created with/layout|logo={{{logo|}}}|iconsize={{#if:{{{iconsize|}}}|{{{iconsize}}}}}<!-- -->|text={{{text|}}}|more={{{more|}}}|lang={{{lang|}}}|width={{{width|}}}<!-- -->|style={{#ifeq:{{{w3c}}}|s|background:#FEE;border:1px solid #600}};{{{style|}}}}}<!-- == Category == -->{{#if:{{#ifeq:{{NAMESPACE}}|File||1}}<!-- no when not "FILE" -->{{#ifeq:{{{category|}}}|-|1}}|<!-- no when suppr "-" -->|{{#ifeq:{{padleft:|2|{{{category|}}}}}|&#91;[|{{{category}}}<!-- as-it-is when "[[…" -->|{{#if:{{{category|}}}{{{toolcat|}}}<!-- either one is necessary -->|[[Category:{{#if:{{{category|}}}|{{{category}}}<!-- category: value without brackets == prefix == -->|{{#switch:{{{w3c}}}<!-- (uncheckable SVG solved otherwise) - only some main templates -->|V=Valid SVG <!-- -->|I=Invalid SVG <!-- -->|s=Unspec SVG <!-- this is a maintenance situation -->|N|n=PNG <!-- or other raster graphics images -->|S=SVG }}<!-- -->{{#switch:{{{w3c}}}|V|I|s|N|n|S=&#32;{{lcfirst:{{#if:{{{c_text|}}}|{{{c_text}}}|created with}} {{{toolcat}}}}}<!-- -->|{{ucfirst:{{#if:{{{c_text|}}}|{{{c_text}}}|created with}} {{{toolcat}}}}}}}}}<!-- == subcat == -->{{#ifeq:{{{w3c}}}|s||{{#if:{{{sub|}}}|{{#ifeq:{{{sub}}}|-|<!-- -->|{{#ifeq:{{padleft:|1|{{{sub}}}}}|:|{{#invoke:Igenmod|subst|{{{sub}}}}}|{{{sub}}}}}}}}}}}<!-- == sortkey == -->{{#switch:{{{key}}}|~=|<!-- -->|{{!}}{{#switch:{{{w3c}}}<!-- -->|I={{#if:{{{err|}}}|{{#iferror:{{#ifexpr:{{{err|1}}}}}|2222<!-- (not when unspec) -->|{{padleft:{{#expr:1000*{{#expr:1/{{{err|}}} round 3}}}}|4|0}}}}<!-- sort desc. -->|{{#ifeq:{{{w3c}}}|I|3333}}}}<!-- -->|s={{#invoke:Igenmod|invdate}}}}}}<!-- sortkey for Unspec == key & PN == -->{{#switch:{{{key}}}|n|-|~=|={{PAGENAME}}|{{{key}}}}}]]<!-- error: toolcat missing -->|}}}}}}<noinclude> {{Documentation|{{ifsandbox|doc}}}} </noinclude> akfhd8ij2n0lr3pjlz47nxhcxncoq4f Tempilet:Igen/top 10 1347 10737 2026-07-17T13:55:04Z commons>Matrix 0 fulfilling edit request by [[User:Alhadis]] thx!! 10737 wikitext text/x-wiki {{#switch:{{lc:{{{1|}}}}} |c|ce|eh|mlw={{LangSwitch |bar=Des {{Wd|Wappen|Woppm}} |bn=কুলচিহ্ন |ca=Escut d'armes |cs=Znak |da=Våben |de=Dieses {{#ifeq:{{{1}}}|eh|kirchliche}} {{Wd|Wappen}}{{#ifeq:{{{1}}}|ce|element}} |en={{{enp|}}}{{#switch:{{{1}}}|ce={{W|coat of arms|CoA}} element|eh=ecclesial {{W|coat of arms|CoA}}|{{W|coat of arms}}}} |eo=Blazono |es=Este {{#switch:{{{1}}}|ce=elemento heráldico|{{We|Escudo (heráldica)|escudo}}{{#ifeq:{{{1}}}|eh|&#32;eclesiástico}}}} |eu=Armarria |fa={{wfa|نشان (آرم)|نشان}} |fi=Vaakuna |fr=Ce {{#switch:{{{1}}}|ce=meuble héraldique|{{Wf|Blason (héraldique)|blason}}{{#ifeq:{{{1}}}|eh|&#32;ecclésiastique}}}} |gl=Escudo |he=סמל |hu={{Wh|címer}} |it=Questo {{#switch:{{{1}}}|ce=elemento araldico|{{Wi|stemma}}{{#ifeq:{{{1}}}|eh|&#32;ecclesiastico}}}} |ja=紋章 |ko=문장 |mk=Грб |nds=Wapen |nl=Dit {{Wn|Wapen (heraldiek)|wapen}} |nn|no=Dette {{W|Våpen (heraldikk)|våpen|no}} |pl=Ten {{WP|herb}} |pt=Este {{wp|brasão}} |ru={{wr|Герб}} |sk=Erb <!-- n --> |sl=Grb |sv=Det Vapen <!-- n --> |zh=紋章 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |ch={{LangSwitch |bn=লেখচিত্র |de=Dieses {{wd|Chart}} |en={{{enp|}}}{{w|chart}} |fa={{wfa|نمودار}} |fr=Ce {{wf|Visualisation de données|graphique}} |it=Questo {{wi|Rappresentazione grafica dei dati|grafico}} |ja={{W日|データ可視化|統計図表}} |sv=Det chart |zh-hans=统计图 |zh-hant=統計圖 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |cp={{LangSwitch |bar=Dea Plån |de=Dieser Kirchengrundriss |nl=Dit plan |en={{{enp|}}}{{w|church plan}} |fa=نقشهٔ کلیسا |fr=Ce plan d'église |it=Questa planimetria |ja=教会の見取り図<!-- 正しいか疑問 --> |sv=Det karta |zh-hans=教堂平面图 |zh-hant=教堂平面圖 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |cr={{LangSwitch |bn=মুকুট |de=Diese {{wd|Krone}} |en={{{enp|}}}{{w|crown}} |es=Esta {{we|Corona (tocado)|corona}} |fa={{wfa|تاج}} |fr=Cette {{wf|Couronne (attribut)|couronne}} |it=Questa {{wi|Corona (copricapo)|corona}} |ja={{W日|西洋の冠|冠}} |nl=Dit {{wn|Kroon (hoofddeksel)|kroon}} <!-- |ru=!! Эта {{wr|корона}}--> |pt=Esta {{wp|Coroa (monarquia)|coroa}} |zh=冠冕 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |d|ed|sd|esd|hd|t={{LangSwitch |bar=Des Diagramm |bn={{wb|ডায়াগ্রাম}} |de=Dieses {{wd|Diagramm}} |en={{{enp|}}}{{#switch:{{{1}}}|t=trigonometry|diagram}} |fa={{wfa|نمودار}} |fr=Ce {{wf|diagramme}} |it=Questo {{wi|diagramma}} |ja={{#switch:{{{1}}}|t={{w日|三角法}}|{{w日|図式}}}} |ko={{w|다이어그램||ko}} |es/pt=Este {{W|diagrama||{{{lang|{{int:lang|}}}}}}} |pl=Ten {{WP|diagram}} |nl=Dit {{wn|diagram}} |no={{w|diagramet||no}} |sv=Det diagram |zh-hans=示意图 |zh-hant=示意圖 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |dr|draw|oc={{LangSwitch |de=Diese Zeichnung |en={{{enp|}}}{{w|drawing}} |es=Este dibujo |fa={{wfa|ترسیم}} |fr=Ce {{Wf|dessin}} |it=Questo {{wi|disegno}} |ja={{w日|素描}} |pt=Este desenho |zh=素描 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |e|jc|je={{LangSwitch |bar=Des {{Wd|Emblem}} |bn=প্রতীক |de=Dieses {{Wd|Emblem}} |en={{{enp|}}}emblem |fa={{wfa|نشان}} |fr=Cet {{wf|emblème}} |it=Questo {{Wi|emblema}} |ja={{w日|紋章}} |es/pt=Este {{W|emblema||{{{lang|{{int:lang|}}}}}}} |pl=Ten emblemat |ko=문장 |nl=Dit {{w|embleem}} |sv=Det emblem |zh=徽章 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |em|o={{LangSwitch |bar=Des {{Wd|Åbzeichn}} |bn=পদচিহ্ন |de=Dieses {{wd|Abzeichen}} |en={{{enp|}}}{{#switch:{{{1}}}|o=military&#32;}}insignia |fa=نشان |fr=Cet {{wf|insigne}} |it=Questo {{wi|emblema}} |ja={{#switch:{{{1}}}|o=軍事}}{{w日|記章}} |es=Este {{we|distintivo}} |ko=휘장 |pt=Este {{wp|insígnia}} |pl=Ta {{WP|różnica}} |fi=arvomerkki <!-- tunnus --> |nl=Dit {{wn|insigne}} |sv=Det orden |zh=徽章 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |eq={{LangSwitch |ast=ecuación química |be=Хімічнае ўраўненне |bg=Химично уравнение |bs=Hemijska jednačina |ca=esta {{WC|equació química}} |ckb=ھاوکێشەی کیمیایی |cs={{Wc|chemická rovnice}} |da=reaktionsskema |de=Diese {{Wd|Reaktionsgleichung}} |el=Χημική εξίσωση |en={{{enp|}}}{{w|chemical equation}} |es=Esta {{We|ecuación química}} |et=reaktsioonivõrrand |eu=Ekuazio kimiko |fa={{wfa|معادله شیمیایی|معادلهٔ شیمیایی}} |fi=Reaktioyhtälö |fr=Cette {{wf|équation chimique}} |ga=cothromóid cheimiceach |he=תגובה כימית |hi=रासायनिक समीकरण |hr=kemijska jednadžba� |ht=ekwasyon chimik |hu={{Wh|kémiai egyenletek}} |id=persamaan reaksi |it=Questa {{Wi|equazione chimica}} |ja={{w日|化学反応式}} |kab=Tagda takrurant |kk=Химиялық теңдеулер |ko=화학반응식 |ky=Химиялык теңдеме |ln=mokokano |mk=Хемиска реакција |ml={{വി|രാസസമവാക്യം}} |ms=persamaan kimia |nl=Dit {{Wn|reactievergelijking}} |no=kjemisk reaksjonsligning |pa=ਰਸਾਇਣਕ ਸਮੀਕਰਨ |pl=Ten {{WP|równanie reakcji}} |pt={{Wp|equação química}} |ro=ecuație chimică |qu=Ruranakuy paqtachani |ru={{Wr|Химическое уравнение}} |sk=chemická rovnica |sl=Kemijska enačba |sr=Хемијске једначине |sh=Hemijska jednačina |av={{Wsv|reaktionsformel}} |tl=Ekwasyong kimikal |ta=வேதியியற் சமன்பாடு |tt=Химик тигезләмә |te=రసాయన సమీకరణాలు |tr=kimyasal denklem |uk={{Wu|Хімічне рівняння}} |vi=phương trình hóa học |zh={{Wz|化学方程式}} |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |esl={{LangSwitch |cs=elektronické schémat |de=Diese elektrische Schaltung |en={{{enp|}}}{{W|circuit diagram}} |es=Este circuito<!-- Esta esquema eléctrico --> |fa={{wfa|نمودار مدار}} |fr=Ce {{Wf|schéma électrique}} |hu=kapcsolási rajz |hy=էլէկտրական ուրվագծի պատկեր |it=Questo {{wi|Schema elettrico|diagramma elettrico}} |ja={{w日|回路図}} |ko=전기 회로 |mk=електрична шема |nl=Dit elektrisch netwerk<!-- elektrische schema --> |pt=Este circuito elétrico<!-- Esta esquema eléctrico --> |ro=diagramă electrică |ru=изображение электрической схемы |sv=Det elektriskt kopplingsschema |uk=електричної схеми |zh-hans=电路图 |zh-hant=電工圖 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |f|fd|ffi|jf|rf={{LangSwitch |bar=Dé Fahna |bn=পতাকা |de=Diese Fahne |en={{{enp|}}}flag {{#ifeq:{{{1}}}|ffi|icon}} |fa={{#ifeq:{{{1}}}|ffi|آیکون}} {{wfa|پرچم}} |fr=Ce {{wf|drapeau}} |it=Questa {{wi|bandiera}} |ko=깃발 |ja={{#ifeq:{{{1}}}|ffi|のアイコン|{{w日|旗}}}} |pt=Esta bandeira |es=Esta bandera |nl=Deze {{wn|vlag}} |pl=Ta flaga |sv=Det flagga |zh-hans=旗帜 |zh-hant=旗幟 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |go={{LangSwitch |de=Diese {{wd|gonfanon}} |en={{{enp|}}}{{w|gonfalon}} |fa=عَلَم |es=Este {{we|confalón}} |fr=Ce {{wf|gonfanon}} |it=Questo {{wi|gonfalone}} |nl=Dit {{wn|gonfalone}} |pl=Ten {{WP|gonfalon}} |pt=Este {{wp|gonfalão}} |ru={{wr|гонфалон}} |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |g={{LangSwitch |bar=Dé {{wd|Geometrii}} |bn={{wb|জ্যামিতি}} |de=Diese {{wd|Geometrie}} |en={{{enp|}}}{{w|geometry}} |es=Esta {{we|geometría}} |fa={{wfa|هندسه|شکل هندسی}} |fr=Cette {{wf|forme (géométrie)|figure géométrique}} |it=Questa {{wi|Figura (geometria)|figura geometrica}} |ja={{w日|幾何学}} |nl=Deze geometrie |pl=Ten {{WP|geometria}} |pt=Esta {{wp|geometria}} |sv=Det geometri |zh-hans=几何图 |zh-hant=幾何圖 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |gl={{LangSwitch |bn=গ্লিফ |de=Diese Glyphe |en={{{enp|}}}{{w|glyph}} |fa={{wfa|گلیف}} |fr=Ce {{wf|glyphe}} |it=Questo {{wi|glifo}} |ja={{w日|グリフ}} |sv=Det glyf |zh=字形 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |b|i|ai|bi|bri|ci|cti|ei|et|fi|gi|ni|npi|oi|pi|tai|ti={{LangSwitch |bar=Dea Icon |bn=আইকন |de=Dieses {{#switch:{{{1}}}|bi=BSicon|Icon}} |en={{{enp|}}}{{#switch:{{{1}}}|b=button|bi=BSicon|icon}} |es=Este icono |fa={{wfa|آیکن_(رایانش)|آیکون}} |fr=Cette {{wf|Icône (informatique)|icône}} |it=Quest'{{Wi|icona}} |ja={{w日|アイコン}} |ko=아이콘 |nl=Deze {{wn|icoon}} |pl=Ta ikona |pt=Este ícone |sv=Det ikon |zh-hans=图标 |zh-hant=圖形 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |b={{LangSwitch |en={{{enp|}}}button |fa={{wfa|دکمه (رایانش)|دکمه}} |ja={{w日|ボタン}} |sv=Det knapp |zh-hans=按钮 |zh-hant=按鈕 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |l|tl={{LangSwitch |bar=Des Logo |bn=লোগো |de=Dieses {{#switch:{{{1}}}|tl=Textl|L}}ogo |en={{{enp|}}}{{#switch:{{{1}}}|tl=text-}}logo |fa={{wfa|نشان‌واره|نشان‌واره}} |fr=Ce {{wf|logotype}} |it=Questo logotipo |ja={{w日|ロゴタイプ}} |ko=로고 |es/pt=Este {{W|logotipo||{{{lang|{{int:lang|}}}}}}} |pl=To logo |nl=Dit {{wn|logo}} |sv=Det logo |zh-hans=文字标识 |zh-hant=文字標識 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |lb={{LangSwitch |en={{{enp|}}}label |fa={{wfa|برچسب}} |ja=ラベル |sv=Det etikett |zh-hans=标签 |zh-hant=標籖 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |m|acm|fm|lm|wm|wmd|ggg|mbs|pom={{LangSwitch |bar=Dé Kartn |bn=মানচিত্র |de=Diese {{wd|{{#switch:{{{1}}}|wm|wmd|ggg=Welt|Land}}karte}}<!-- kartografische Darstellung --> |en={{{enp|}}}{{w|{{#switch:{{{1}}}|wm|wmd|ggg=world&#32;|fm=flag&#32;|lm=locator&#32;|acm=census&#32;}}map}} |fa={{wfa|نقشه {{#switch:{{{1}}}|wm|wmd|ggg=جهان&#32;|fm=پرچم&#32;|lm=جانما&#32;|acm=سرشماری&#32;}}}} |fr=Cette {{wf|carte géographique|carte}} |it=Questa mappa |es=Este mapa |pt=Esta carta geográfica |ja=地図 |ko=지도 |nl=Deze {{wn|kaart}} |pl=Ta mapa |sv=Det karta |zh-hans=地图 |zh-hant=地圖 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |♫|mn={{LangSwitch |de=Diese Notation |en={{{enp|}}}{{w|notation}} |fa={{wfa|نمادگان}} |es=Esta notatión |ja=楽譜 |ko=기보법 |zh-hans=乐谱 |zh-hant=樂譜 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |p|sp={{LangSwitch |bar=Des Piktogramm |bn=চিত্রলিপি |de=Dieses Piktogramm |en={{{enp|}}}pictogram |es/pt=Este {{W|pictograma||{{{lang|{{int:lang|}}}}}}} |fa={{wfa|تصویرنگاشت}} |fr=Ce {{wf|pictogramme}} |it=Questa pittografia |ja={{w日|絵表示}} |ko=그림문자 |nl=Dit {{wn|pictogram}} |pl=Ten {{WP|piktogram}} |sv=Det {{Ws|piktogram}} |zh-hans=象形图 |zh-hant=象形圖 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |rm={{LangSwitch |de=Dieses Monogramm |en={{{enp|}}}{{w|monogram}} |fa={{wfa|مونوگرام}} |it=Questo {{wi|monogramma}} |ja={{w日|組合せ文字}} |sv=Det monogram |zh-hans=文字组合 |zh-hant=文字組合 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |s={{LangSwitch |bar=Des {{wd|Siegl}} |bn=সীল |de=Dieses {{Wd|Siegel}} |en={{{enp|}}}{{w|seal}} |fa={{wfa|مهر (علامت)|مُهر}} |fr=Ce {{wf|sceau}} |it=Questo {{Wi|sigillo}} |es=Este sello |ja={{w日|印章}} |pt=Este selo |sv=Det sigill |zh=印章 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |sf={{LangSwitch |de=Diese Strukturformel |en={{{enp|}}}{{w|structural formula}} |fa={{wfa|فرمول ساختاری}} |fr=Cette {{wf|formule développée plane}} |ja={{w日|構造式}} |sv=Det strukturformel |zh-hans=结构式 |zh-hant=結構式 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |sig={{LangSwitch |bar=Dé Signatar |bn=স্বাক্ষর |de=Diese Signatur |en={{{enp|}}}signature |es=Esta firma |fa={{wfa|امضا}} |fr=Cette {{wf|signature}} |it=Questa {{wi|firma}} |ja={{w日|署名}} |pt=Esta assinatura |pl=Ten podpis |nl=Dit {{wn|handtekening}} |sv=Det signatur |zh-hans=签名 |zh-hant=簽名 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |ts={{LangSwitch |bar=Dea Schriftsåtz |cs=sazba |de=Dieser Schriftsatz |en={{{enp|}}}typeset |es=Esta composición tipográfica |fa={{wfa|حروف‌چینی}} |fi=adottiin |fr=Cette {{wf|mise en page}} |hu=betűszedett |it=Questa impaginazione |ja={{w日|組版}} |mk=типографски сложен |nl=Dit typeset |pl=Ten skład tekstu |pt=Esta formatação de texto |ru=свёрстанное |sv=Det textsättnings |uk=зверстаний документ |zh=排版 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |u={{LangSwitch |bar=Des Unicode-Zeichn |bn=ইউনিকোড অক্ষর |de=Dieses Unicode-Zeichen |en={{{enp|}}}Unicode character |fa={{wfa|یونی‌کد|نویسهٔ یونی‌کد}} |it=Questo carattere {{wi|Unicode}} |ja=Unicode文字 |pt=Este caractere Unicode |fr=Ce caractère {{wf|Unicode}} |zh-hans=Unicode字符 |zh-hant=Unicode字元 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |bs={{LangSwitch |bar=Dea Barnstar |de=Dieser Barnstar |en={{{enp|}}}barnstar |fa={{wfa|ستاره انبار|ستارهٔ انبار}} |ja={{w日|バーンスター}} |zh=星章 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |v|gv={{LangSwitch |bar=Des Zeichn |bn=চিহ্ন |de=Dieses Zeichen |de-at=Dieses Verkehrszeichen |en={{{enp|}}}sign |fa={{wfa|نشانه}} |fr=Ce {{wf|panneau}} |it=Questo {{wi|segnale}} |pt=Esta placa |es=Esta señal |ja={{w日|標識}} |ko=교통표지<!-- (交通標誌) --> |nl=Dit bordje |pl=Ten {{WP|znak}} |sv=Det tecken |zh-hans=交通标志 |zh-hant=交通標誌 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |lp={{LangSwitch |bn=লাইসেন্স প্লেট |de=Dieses Kennzeichen |de-at=Diese Nummerntafel |en-us|en={{{enp|}}}license plate |en-ca|en-gb={{{enp|}}}licence plate |fa={{wfa|پلاک خودرو}} |it=Questa targa |ja={{w日|ナンバープレート}} |zh-hans=号牌 |zh-hant=號牌 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |wp={{LangSwitch |bn=প্যাটার্ন |de=Dieses Muster |en={{{enp|}}}{{w|pattern}} |fa={{wfa|الگو}} |fr=Ce {{wf|modèle}} |ja={{w日|紋様}} |sv=Det mönster |zh-hans=纹样 |zh-hant=紋樣 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |r|y|ey={{LangSwitch |bar=Des Symbol |bn=প্রতীক |de=Dieses Symbol |en={{{enp|}}}{{#switch:{{{1}}}|r=roundel|symbol}} |es/pt=Este {{W|símbolo||{{{lang|{{int:lang|}}}}}}} |fa={{wfa|نماد}} |fr=Ce {{wf|symbole}} |ja={{#switch:{{{1}}}|r={{w日|蛇の目}}|{{w日|記号}}}} |it=Questo {{wi|simbolo}} |ko=상징 |nl=Dit {{wn|symbool}} |pl=Ten {{WP|symbol}} |sv=Det symbol<!-- kula --> |zh-hans=徽标 |zh-hant=徽標 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |a={{LangSwitch |bn=তীর |de=Dieser Pfeil |en={{{enp|}}}{{w|arrow}} |fa={{wfa|فلش (نماد)|پیکان}} |it=Questa freccia |ja={{w日|矢印}} |sv=Det pil |zh-hans=箭头 |zh-hant=箭頭 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |7={{LangSwitch |bn=সংখ্যা |de=Diese Ziffer |en={{{enp|}}}{{w|digit}} |es/pt=Este {{W|dígito||{{{lang|{{int:lang|}}}}}}} |fa={{wfa|رقم}} |fr=Ce chiffre |ja={{w日|数字}} |zh-hans=数字 |zh-hant=數字 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} <!-- Created with ... templates (mainly non-SVG) --> |bitm={{LangSwitch |de=Diese Rastergrafik |en={{{enp|}}}{{w|raster image}} |fa={{wfa|گرافیک شطرنجی}} |fr=Cette {{wf|image matricielle}} |ja={{w日|ビットマップ画像}} |nl=Deze raster afbeelding |zh-hans=位图 |zh-hant=點陣圖 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |file={{LangSwitch |cs=Tento soubor |da=Denne fil |de=Diese Datei |eo=La dosiero |en={{{enp|}}}file |fa=پرونده |es=Este archivo |et=See fail |fi=Tämä tiedosto |fr=Ce fichier |he=Αυτό το αρχείο |hu=Ez a fájl |it=Questo flusso<!--file--> |ja=このファイル |lt=Šis failas |lv=Šis fails |mk=Оваа податотека |nl=Dit bestand |no=Dette fil |pl=Ten plikз |pt=Este arquivo<!--ficheiro--> |ro=Acest fișier |ru=Этот файл |sl=Ta datoteka |sk=Tento súbor |sv=Denna fil |zh-hans=这个文件 |zh-hant=這個檔案 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |math={{LangSwitch |en={{{enp|}}}{{w|image (mathematics)|mathematical image}} |fa={{wfa|تصویر (ریاضیات)|تصویر ریاضی}} |bn=গাণিতিক চিত্র |de=Diese mathematische Darstellung |fr=Cette {{wf|Image (mathématiques)|image mathématique}} |ja={{w日|像 (数学)|数学の像}} |zh-hans=数学像点 |zh-hant=數學像點 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |pano={{LangSwitch |bn={{w|Autostitch|অটোস্টিকচ}} {{W|Panorama|সামগ্রিক দৃশ্যের চিত্র}} |de=Dieses Panoramabild |en={{{enp|}}}{{w|Panorama|panoramic image}} |es=Esta imagen panorámica |fa={{wfa|سراسرنما|نگارهٔ سراسرنما}} |fi={{w|panoraamakuva||fi}} |fr=Cette image {{wf|panorama|panoramique}} |hu={{wh|Panoráma|panorámakép}} |it=Questa fotografia panoramica |ja={{w日|パノラマ写真}} |nl=Deze panoramische afbeelding |pl=Ta {{w|panorama (zdjęcie)|panorama|pl}} |pt=Esta imagem panorâmica |sv=Det panoramabilden |zh-hans=全景图 |zh-hant=全景圖 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |plot={{LangSwitch |bar=Dea Plot |de=Dieser Plot |en={{{enp|}}}plot |fa=نمودار |fr=Cette {{Wf|représentation graphique}} |Ja={{w日|プロット図}} |zh-hans=图表 |zh-hant=圖表 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |pres={{LangSwitch |de=Diese Präsentation |en={{{enp|}}}{{w|presentation}} |es=Esta presentación |fa={{wfa|ارائه}} |fr=Cette présentation |it=Questa presentazione |ja={{w日|プレゼンテーション}} |nl=Deze presentatie |pl=Ta grafika prezentacyjna |pt=Esta apresentação |zh-hans=演示 |zh-hant=簡報 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} <!-- when code exists but no translation for that language --> <!-- With |default=~ the English translation is returned --> <!-- With |#default= value of parameter 2 will be returned --> <!-- Therefore parameter 2 should be the standard "what" name--> <!-- for code not in the list, either the 2nd parameter, or --> <!-- if no 2nd parameter, the code itself will be displayed --> |-={{#ifeq:{{{2}}}|~||{{{2|}}}}} |#default=<includeonly>{{#ifeq:{{padright:{{{1}}}|3|%}}|{{padright:|3|{{{1}}}%%%%}}<!-- -->|{{#if:{{{2|}}}|{{#ifeq:{{{2}}}|~|~?~|{{{2}}}}}|{{#if:{{{1|}}}<!-- code does not exist -->|[[Category:Commons:Unspecified topic|{{{1|-}}}]]}}}}<!-- + maintenance category -->|{{#invoke:Char|subst|1={{{1|}}}}}}}<!-- more than 3 chars: display them --></includeonly> <!-- {{#ifeq:{{padleft:|1|{{{1|}}}}}|:|[[Category:Commons:Unspecified topic|{{{1|}}}]]}} --> }}<noinclude> Internationalization page, used by e.g. <!-- {{t|Igen}} and --> the {{C|SVG created with ... templates}} and others :This template is used by many templates like e.g. {{t0|Created with Other tool/de}} with two parameters: :# the short code (mostly one letter, or a few letters) like for {{T0|Igen/sub}}, :# the default value if no code fits. To avoid the wrong use of "en" the <code>|#default= </code> option is necessary. : :{{T0|Igen/sub}} often spreads short codes to different subcategories while Igen/top uses fewer names. :The short code defined with <code>s=</code> is passed from {{t0|Image generation}} and other templates; :if another code should be used it can be defined with <code>w=</code>; to just ''suppress'' the usage of <code>s=</code> use <code>w=</code> without a value. : :{{0}} : :For languages with different {{W|Grammatical gender|genders}} (like de, fr, it, pl, pt...) the names must be defined ''with'' the {{W|demonstratives}}. {{Use sandbox|testcase=&#32;}} See also the [[Template talk:Igen/top|talk page]] for a table of all codes. {{Heavily used template}} The system can only display ''topics'' (f=flags, i=icons, l=logos, m=maps, ...) when a translation is provided within this template for ''that'' topic in ''that'' language. <br>When the translation fails, the output depends on :when the code exists in that template, but no translation for that language, it depends on the value of parameter 2: :* (none) an error code like "_?_" is returned (that should never happen!) :* "~" the (''always existing'') English translation is returned :* otherwise the value of parameter 2 (the standard text) is returned. :when the code does not exist in that template, parameter 1 is checked:<br> :* when it contains ''more than 3 characters'' it is displayed; otherwise it depends on the value of parameter 2: :** (none) the untranslated value of parameter 1 is returned, :** "~" an error code like "~?~" is returned, :** otherwise the value of parameter 2 (the standard text) is returned, : '''and''' categorization to a {{C|Commons:Unspecified topic|maintenance category}} occurs. The skeleton is prepared, and when users want to see things in their language they ought to maintain and to expand that template.<br> If a translation is missing in the current display language, only the standard text is shown, as it had been before. [[Category:Templates using LangSwitch for internationalisation]]</noinclude> psfwu0awktv3p3hrgfyvkco4o57wd95 10738 10737 2026-08-25T23:38:30Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Igen/top]] 10737 wikitext text/x-wiki {{#switch:{{lc:{{{1|}}}}} |c|ce|eh|mlw={{LangSwitch |bar=Des {{Wd|Wappen|Woppm}} |bn=কুলচিহ্ন |ca=Escut d'armes |cs=Znak |da=Våben |de=Dieses {{#ifeq:{{{1}}}|eh|kirchliche}} {{Wd|Wappen}}{{#ifeq:{{{1}}}|ce|element}} |en={{{enp|}}}{{#switch:{{{1}}}|ce={{W|coat of arms|CoA}} element|eh=ecclesial {{W|coat of arms|CoA}}|{{W|coat of arms}}}} |eo=Blazono |es=Este {{#switch:{{{1}}}|ce=elemento heráldico|{{We|Escudo (heráldica)|escudo}}{{#ifeq:{{{1}}}|eh|&#32;eclesiástico}}}} |eu=Armarria |fa={{wfa|نشان (آرم)|نشان}} |fi=Vaakuna |fr=Ce {{#switch:{{{1}}}|ce=meuble héraldique|{{Wf|Blason (héraldique)|blason}}{{#ifeq:{{{1}}}|eh|&#32;ecclésiastique}}}} |gl=Escudo |he=סמל |hu={{Wh|címer}} |it=Questo {{#switch:{{{1}}}|ce=elemento araldico|{{Wi|stemma}}{{#ifeq:{{{1}}}|eh|&#32;ecclesiastico}}}} |ja=紋章 |ko=문장 |mk=Грб |nds=Wapen |nl=Dit {{Wn|Wapen (heraldiek)|wapen}} |nn|no=Dette {{W|Våpen (heraldikk)|våpen|no}} |pl=Ten {{WP|herb}} |pt=Este {{wp|brasão}} |ru={{wr|Герб}} |sk=Erb <!-- n --> |sl=Grb |sv=Det Vapen <!-- n --> |zh=紋章 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |ch={{LangSwitch |bn=লেখচিত্র |de=Dieses {{wd|Chart}} |en={{{enp|}}}{{w|chart}} |fa={{wfa|نمودار}} |fr=Ce {{wf|Visualisation de données|graphique}} |it=Questo {{wi|Rappresentazione grafica dei dati|grafico}} |ja={{W日|データ可視化|統計図表}} |sv=Det chart |zh-hans=统计图 |zh-hant=統計圖 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |cp={{LangSwitch |bar=Dea Plån |de=Dieser Kirchengrundriss |nl=Dit plan |en={{{enp|}}}{{w|church plan}} |fa=نقشهٔ کلیسا |fr=Ce plan d'église |it=Questa planimetria |ja=教会の見取り図<!-- 正しいか疑問 --> |sv=Det karta |zh-hans=教堂平面图 |zh-hant=教堂平面圖 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |cr={{LangSwitch |bn=মুকুট |de=Diese {{wd|Krone}} |en={{{enp|}}}{{w|crown}} |es=Esta {{we|Corona (tocado)|corona}} |fa={{wfa|تاج}} |fr=Cette {{wf|Couronne (attribut)|couronne}} |it=Questa {{wi|Corona (copricapo)|corona}} |ja={{W日|西洋の冠|冠}} |nl=Dit {{wn|Kroon (hoofddeksel)|kroon}} <!-- |ru=!! Эта {{wr|корона}}--> |pt=Esta {{wp|Coroa (monarquia)|coroa}} |zh=冠冕 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |d|ed|sd|esd|hd|t={{LangSwitch |bar=Des Diagramm |bn={{wb|ডায়াগ্রাম}} |de=Dieses {{wd|Diagramm}} |en={{{enp|}}}{{#switch:{{{1}}}|t=trigonometry|diagram}} |fa={{wfa|نمودار}} |fr=Ce {{wf|diagramme}} |it=Questo {{wi|diagramma}} |ja={{#switch:{{{1}}}|t={{w日|三角法}}|{{w日|図式}}}} |ko={{w|다이어그램||ko}} |es/pt=Este {{W|diagrama||{{{lang|{{int:lang|}}}}}}} |pl=Ten {{WP|diagram}} |nl=Dit {{wn|diagram}} |no={{w|diagramet||no}} |sv=Det diagram |zh-hans=示意图 |zh-hant=示意圖 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |dr|draw|oc={{LangSwitch |de=Diese Zeichnung |en={{{enp|}}}{{w|drawing}} |es=Este dibujo |fa={{wfa|ترسیم}} |fr=Ce {{Wf|dessin}} |it=Questo {{wi|disegno}} |ja={{w日|素描}} |pt=Este desenho |zh=素描 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |e|jc|je={{LangSwitch |bar=Des {{Wd|Emblem}} |bn=প্রতীক |de=Dieses {{Wd|Emblem}} |en={{{enp|}}}emblem |fa={{wfa|نشان}} |fr=Cet {{wf|emblème}} |it=Questo {{Wi|emblema}} |ja={{w日|紋章}} |es/pt=Este {{W|emblema||{{{lang|{{int:lang|}}}}}}} |pl=Ten emblemat |ko=문장 |nl=Dit {{w|embleem}} |sv=Det emblem |zh=徽章 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |em|o={{LangSwitch |bar=Des {{Wd|Åbzeichn}} |bn=পদচিহ্ন |de=Dieses {{wd|Abzeichen}} |en={{{enp|}}}{{#switch:{{{1}}}|o=military&#32;}}insignia |fa=نشان |fr=Cet {{wf|insigne}} |it=Questo {{wi|emblema}} |ja={{#switch:{{{1}}}|o=軍事}}{{w日|記章}} |es=Este {{we|distintivo}} |ko=휘장 |pt=Este {{wp|insígnia}} |pl=Ta {{WP|różnica}} |fi=arvomerkki <!-- tunnus --> |nl=Dit {{wn|insigne}} |sv=Det orden |zh=徽章 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |eq={{LangSwitch |ast=ecuación química |be=Хімічнае ўраўненне |bg=Химично уравнение |bs=Hemijska jednačina |ca=esta {{WC|equació química}} |ckb=ھاوکێشەی کیمیایی |cs={{Wc|chemická rovnice}} |da=reaktionsskema |de=Diese {{Wd|Reaktionsgleichung}} |el=Χημική εξίσωση |en={{{enp|}}}{{w|chemical equation}} |es=Esta {{We|ecuación química}} |et=reaktsioonivõrrand |eu=Ekuazio kimiko |fa={{wfa|معادله شیمیایی|معادلهٔ شیمیایی}} |fi=Reaktioyhtälö |fr=Cette {{wf|équation chimique}} |ga=cothromóid cheimiceach |he=תגובה כימית |hi=रासायनिक समीकरण |hr=kemijska jednadžba� |ht=ekwasyon chimik |hu={{Wh|kémiai egyenletek}} |id=persamaan reaksi |it=Questa {{Wi|equazione chimica}} |ja={{w日|化学反応式}} |kab=Tagda takrurant |kk=Химиялық теңдеулер |ko=화학반응식 |ky=Химиялык теңдеме |ln=mokokano |mk=Хемиска реакција |ml={{വി|രാസസമവാക്യം}} |ms=persamaan kimia |nl=Dit {{Wn|reactievergelijking}} |no=kjemisk reaksjonsligning |pa=ਰਸਾਇਣਕ ਸਮੀਕਰਨ |pl=Ten {{WP|równanie reakcji}} |pt={{Wp|equação química}} |ro=ecuație chimică |qu=Ruranakuy paqtachani |ru={{Wr|Химическое уравнение}} |sk=chemická rovnica |sl=Kemijska enačba |sr=Хемијске једначине |sh=Hemijska jednačina |av={{Wsv|reaktionsformel}} |tl=Ekwasyong kimikal |ta=வேதியியற் சமன்பாடு |tt=Химик тигезләмә |te=రసాయన సమీకరణాలు |tr=kimyasal denklem |uk={{Wu|Хімічне рівняння}} |vi=phương trình hóa học |zh={{Wz|化学方程式}} |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |esl={{LangSwitch |cs=elektronické schémat |de=Diese elektrische Schaltung |en={{{enp|}}}{{W|circuit diagram}} |es=Este circuito<!-- Esta esquema eléctrico --> |fa={{wfa|نمودار مدار}} |fr=Ce {{Wf|schéma électrique}} |hu=kapcsolási rajz |hy=էլէկտրական ուրվագծի պատկեր |it=Questo {{wi|Schema elettrico|diagramma elettrico}} |ja={{w日|回路図}} |ko=전기 회로 |mk=електрична шема |nl=Dit elektrisch netwerk<!-- elektrische schema --> |pt=Este circuito elétrico<!-- Esta esquema eléctrico --> |ro=diagramă electrică |ru=изображение электрической схемы |sv=Det elektriskt kopplingsschema |uk=електричної схеми |zh-hans=电路图 |zh-hant=電工圖 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |f|fd|ffi|jf|rf={{LangSwitch |bar=Dé Fahna |bn=পতাকা |de=Diese Fahne |en={{{enp|}}}flag {{#ifeq:{{{1}}}|ffi|icon}} |fa={{#ifeq:{{{1}}}|ffi|آیکون}} {{wfa|پرچم}} |fr=Ce {{wf|drapeau}} |it=Questa {{wi|bandiera}} |ko=깃발 |ja={{#ifeq:{{{1}}}|ffi|のアイコン|{{w日|旗}}}} |pt=Esta bandeira |es=Esta bandera |nl=Deze {{wn|vlag}} |pl=Ta flaga |sv=Det flagga |zh-hans=旗帜 |zh-hant=旗幟 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |go={{LangSwitch |de=Diese {{wd|gonfanon}} |en={{{enp|}}}{{w|gonfalon}} |fa=عَلَم |es=Este {{we|confalón}} |fr=Ce {{wf|gonfanon}} |it=Questo {{wi|gonfalone}} |nl=Dit {{wn|gonfalone}} |pl=Ten {{WP|gonfalon}} |pt=Este {{wp|gonfalão}} |ru={{wr|гонфалон}} |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |g={{LangSwitch |bar=Dé {{wd|Geometrii}} |bn={{wb|জ্যামিতি}} |de=Diese {{wd|Geometrie}} |en={{{enp|}}}{{w|geometry}} |es=Esta {{we|geometría}} |fa={{wfa|هندسه|شکل هندسی}} |fr=Cette {{wf|forme (géométrie)|figure géométrique}} |it=Questa {{wi|Figura (geometria)|figura geometrica}} |ja={{w日|幾何学}} |nl=Deze geometrie |pl=Ten {{WP|geometria}} |pt=Esta {{wp|geometria}} |sv=Det geometri |zh-hans=几何图 |zh-hant=幾何圖 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |gl={{LangSwitch |bn=গ্লিফ |de=Diese Glyphe |en={{{enp|}}}{{w|glyph}} |fa={{wfa|گلیف}} |fr=Ce {{wf|glyphe}} |it=Questo {{wi|glifo}} |ja={{w日|グリフ}} |sv=Det glyf |zh=字形 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |b|i|ai|bi|bri|ci|cti|ei|et|fi|gi|ni|npi|oi|pi|tai|ti={{LangSwitch |bar=Dea Icon |bn=আইকন |de=Dieses {{#switch:{{{1}}}|bi=BSicon|Icon}} |en={{{enp|}}}{{#switch:{{{1}}}|b=button|bi=BSicon|icon}} |es=Este icono |fa={{wfa|آیکن_(رایانش)|آیکون}} |fr=Cette {{wf|Icône (informatique)|icône}} |it=Quest'{{Wi|icona}} |ja={{w日|アイコン}} |ko=아이콘 |nl=Deze {{wn|icoon}} |pl=Ta ikona |pt=Este ícone |sv=Det ikon |zh-hans=图标 |zh-hant=圖形 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |b={{LangSwitch |en={{{enp|}}}button |fa={{wfa|دکمه (رایانش)|دکمه}} |ja={{w日|ボタン}} |sv=Det knapp |zh-hans=按钮 |zh-hant=按鈕 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |l|tl={{LangSwitch |bar=Des Logo |bn=লোগো |de=Dieses {{#switch:{{{1}}}|tl=Textl|L}}ogo |en={{{enp|}}}{{#switch:{{{1}}}|tl=text-}}logo |fa={{wfa|نشان‌واره|نشان‌واره}} |fr=Ce {{wf|logotype}} |it=Questo logotipo |ja={{w日|ロゴタイプ}} |ko=로고 |es/pt=Este {{W|logotipo||{{{lang|{{int:lang|}}}}}}} |pl=To logo |nl=Dit {{wn|logo}} |sv=Det logo |zh-hans=文字标识 |zh-hant=文字標識 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |lb={{LangSwitch |en={{{enp|}}}label |fa={{wfa|برچسب}} |ja=ラベル |sv=Det etikett |zh-hans=标签 |zh-hant=標籖 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |m|acm|fm|lm|wm|wmd|ggg|mbs|pom={{LangSwitch |bar=Dé Kartn |bn=মানচিত্র |de=Diese {{wd|{{#switch:{{{1}}}|wm|wmd|ggg=Welt|Land}}karte}}<!-- kartografische Darstellung --> |en={{{enp|}}}{{w|{{#switch:{{{1}}}|wm|wmd|ggg=world&#32;|fm=flag&#32;|lm=locator&#32;|acm=census&#32;}}map}} |fa={{wfa|نقشه {{#switch:{{{1}}}|wm|wmd|ggg=جهان&#32;|fm=پرچم&#32;|lm=جانما&#32;|acm=سرشماری&#32;}}}} |fr=Cette {{wf|carte géographique|carte}} |it=Questa mappa |es=Este mapa |pt=Esta carta geográfica |ja=地図 |ko=지도 |nl=Deze {{wn|kaart}} |pl=Ta mapa |sv=Det karta |zh-hans=地图 |zh-hant=地圖 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |♫|mn={{LangSwitch |de=Diese Notation |en={{{enp|}}}{{w|notation}} |fa={{wfa|نمادگان}} |es=Esta notatión |ja=楽譜 |ko=기보법 |zh-hans=乐谱 |zh-hant=樂譜 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |p|sp={{LangSwitch |bar=Des Piktogramm |bn=চিত্রলিপি |de=Dieses Piktogramm |en={{{enp|}}}pictogram |es/pt=Este {{W|pictograma||{{{lang|{{int:lang|}}}}}}} |fa={{wfa|تصویرنگاشت}} |fr=Ce {{wf|pictogramme}} |it=Questa pittografia |ja={{w日|絵表示}} |ko=그림문자 |nl=Dit {{wn|pictogram}} |pl=Ten {{WP|piktogram}} |sv=Det {{Ws|piktogram}} |zh-hans=象形图 |zh-hant=象形圖 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |rm={{LangSwitch |de=Dieses Monogramm |en={{{enp|}}}{{w|monogram}} |fa={{wfa|مونوگرام}} |it=Questo {{wi|monogramma}} |ja={{w日|組合せ文字}} |sv=Det monogram |zh-hans=文字组合 |zh-hant=文字組合 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |s={{LangSwitch |bar=Des {{wd|Siegl}} |bn=সীল |de=Dieses {{Wd|Siegel}} |en={{{enp|}}}{{w|seal}} |fa={{wfa|مهر (علامت)|مُهر}} |fr=Ce {{wf|sceau}} |it=Questo {{Wi|sigillo}} |es=Este sello |ja={{w日|印章}} |pt=Este selo |sv=Det sigill |zh=印章 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |sf={{LangSwitch |de=Diese Strukturformel |en={{{enp|}}}{{w|structural formula}} |fa={{wfa|فرمول ساختاری}} |fr=Cette {{wf|formule développée plane}} |ja={{w日|構造式}} |sv=Det strukturformel |zh-hans=结构式 |zh-hant=結構式 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |sig={{LangSwitch |bar=Dé Signatar |bn=স্বাক্ষর |de=Diese Signatur |en={{{enp|}}}signature |es=Esta firma |fa={{wfa|امضا}} |fr=Cette {{wf|signature}} |it=Questa {{wi|firma}} |ja={{w日|署名}} |pt=Esta assinatura |pl=Ten podpis |nl=Dit {{wn|handtekening}} |sv=Det signatur |zh-hans=签名 |zh-hant=簽名 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |ts={{LangSwitch |bar=Dea Schriftsåtz |cs=sazba |de=Dieser Schriftsatz |en={{{enp|}}}typeset |es=Esta composición tipográfica |fa={{wfa|حروف‌چینی}} |fi=adottiin |fr=Cette {{wf|mise en page}} |hu=betűszedett |it=Questa impaginazione |ja={{w日|組版}} |mk=типографски сложен |nl=Dit typeset |pl=Ten skład tekstu |pt=Esta formatação de texto |ru=свёрстанное |sv=Det textsättnings |uk=зверстаний документ |zh=排版 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |u={{LangSwitch |bar=Des Unicode-Zeichn |bn=ইউনিকোড অক্ষর |de=Dieses Unicode-Zeichen |en={{{enp|}}}Unicode character |fa={{wfa|یونی‌کد|نویسهٔ یونی‌کد}} |it=Questo carattere {{wi|Unicode}} |ja=Unicode文字 |pt=Este caractere Unicode |fr=Ce caractère {{wf|Unicode}} |zh-hans=Unicode字符 |zh-hant=Unicode字元 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |bs={{LangSwitch |bar=Dea Barnstar |de=Dieser Barnstar |en={{{enp|}}}barnstar |fa={{wfa|ستاره انبار|ستارهٔ انبار}} |ja={{w日|バーンスター}} |zh=星章 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |v|gv={{LangSwitch |bar=Des Zeichn |bn=চিহ্ন |de=Dieses Zeichen |de-at=Dieses Verkehrszeichen |en={{{enp|}}}sign |fa={{wfa|نشانه}} |fr=Ce {{wf|panneau}} |it=Questo {{wi|segnale}} |pt=Esta placa |es=Esta señal |ja={{w日|標識}} |ko=교통표지<!-- (交通標誌) --> |nl=Dit bordje |pl=Ten {{WP|znak}} |sv=Det tecken |zh-hans=交通标志 |zh-hant=交通標誌 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |lp={{LangSwitch |bn=লাইসেন্স প্লেট |de=Dieses Kennzeichen |de-at=Diese Nummerntafel |en-us|en={{{enp|}}}license plate |en-ca|en-gb={{{enp|}}}licence plate |fa={{wfa|پلاک خودرو}} |it=Questa targa |ja={{w日|ナンバープレート}} |zh-hans=号牌 |zh-hant=號牌 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |wp={{LangSwitch |bn=প্যাটার্ন |de=Dieses Muster |en={{{enp|}}}{{w|pattern}} |fa={{wfa|الگو}} |fr=Ce {{wf|modèle}} |ja={{w日|紋様}} |sv=Det mönster |zh-hans=纹样 |zh-hant=紋樣 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |r|y|ey={{LangSwitch |bar=Des Symbol |bn=প্রতীক |de=Dieses Symbol |en={{{enp|}}}{{#switch:{{{1}}}|r=roundel|symbol}} |es/pt=Este {{W|símbolo||{{{lang|{{int:lang|}}}}}}} |fa={{wfa|نماد}} |fr=Ce {{wf|symbole}} |ja={{#switch:{{{1}}}|r={{w日|蛇の目}}|{{w日|記号}}}} |it=Questo {{wi|simbolo}} |ko=상징 |nl=Dit {{wn|symbool}} |pl=Ten {{WP|symbol}} |sv=Det symbol<!-- kula --> |zh-hans=徽标 |zh-hant=徽標 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |a={{LangSwitch |bn=তীর |de=Dieser Pfeil |en={{{enp|}}}{{w|arrow}} |fa={{wfa|فلش (نماد)|پیکان}} |it=Questa freccia |ja={{w日|矢印}} |sv=Det pil |zh-hans=箭头 |zh-hant=箭頭 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |7={{LangSwitch |bn=সংখ্যা |de=Diese Ziffer |en={{{enp|}}}{{w|digit}} |es/pt=Este {{W|dígito||{{{lang|{{int:lang|}}}}}}} |fa={{wfa|رقم}} |fr=Ce chiffre |ja={{w日|数字}} |zh-hans=数字 |zh-hant=數字 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} <!-- Created with ... templates (mainly non-SVG) --> |bitm={{LangSwitch |de=Diese Rastergrafik |en={{{enp|}}}{{w|raster image}} |fa={{wfa|گرافیک شطرنجی}} |fr=Cette {{wf|image matricielle}} |ja={{w日|ビットマップ画像}} |nl=Deze raster afbeelding |zh-hans=位图 |zh-hant=點陣圖 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |file={{LangSwitch |cs=Tento soubor |da=Denne fil |de=Diese Datei |eo=La dosiero |en={{{enp|}}}file |fa=پرونده |es=Este archivo |et=See fail |fi=Tämä tiedosto |fr=Ce fichier |he=Αυτό το αρχείο |hu=Ez a fájl |it=Questo flusso<!--file--> |ja=このファイル |lt=Šis failas |lv=Šis fails |mk=Оваа податотека |nl=Dit bestand |no=Dette fil |pl=Ten plikз |pt=Este arquivo<!--ficheiro--> |ro=Acest fișier |ru=Этот файл |sl=Ta datoteka |sk=Tento súbor |sv=Denna fil |zh-hans=这个文件 |zh-hant=這個檔案 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |math={{LangSwitch |en={{{enp|}}}{{w|image (mathematics)|mathematical image}} |fa={{wfa|تصویر (ریاضیات)|تصویر ریاضی}} |bn=গাণিতিক চিত্র |de=Diese mathematische Darstellung |fr=Cette {{wf|Image (mathématiques)|image mathématique}} |ja={{w日|像 (数学)|数学の像}} |zh-hans=数学像点 |zh-hant=數學像點 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |pano={{LangSwitch |bn={{w|Autostitch|অটোস্টিকচ}} {{W|Panorama|সামগ্রিক দৃশ্যের চিত্র}} |de=Dieses Panoramabild |en={{{enp|}}}{{w|Panorama|panoramic image}} |es=Esta imagen panorámica |fa={{wfa|سراسرنما|نگارهٔ سراسرنما}} |fi={{w|panoraamakuva||fi}} |fr=Cette image {{wf|panorama|panoramique}} |hu={{wh|Panoráma|panorámakép}} |it=Questa fotografia panoramica |ja={{w日|パノラマ写真}} |nl=Deze panoramische afbeelding |pl=Ta {{w|panorama (zdjęcie)|panorama|pl}} |pt=Esta imagem panorâmica |sv=Det panoramabilden |zh-hans=全景图 |zh-hant=全景圖 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |plot={{LangSwitch |bar=Dea Plot |de=Dieser Plot |en={{{enp|}}}plot |fa=نمودار |fr=Cette {{Wf|représentation graphique}} |Ja={{w日|プロット図}} |zh-hans=图表 |zh-hant=圖表 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} |pres={{LangSwitch |de=Diese Präsentation |en={{{enp|}}}{{w|presentation}} |es=Esta presentación |fa={{wfa|ارائه}} |fr=Cette présentation |it=Questa presentazione |ja={{w日|プレゼンテーション}} |nl=Deze presentatie |pl=Ta grafika prezentacyjna |pt=Esta apresentação |zh-hans=演示 |zh-hant=簡報 |default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}} |lang={{{lang|}}}}} <!-- when code exists but no translation for that language --> <!-- With |default=~ the English translation is returned --> <!-- With |#default= value of parameter 2 will be returned --> <!-- Therefore parameter 2 should be the standard "what" name--> <!-- for code not in the list, either the 2nd parameter, or --> <!-- if no 2nd parameter, the code itself will be displayed --> |-={{#ifeq:{{{2}}}|~||{{{2|}}}}} |#default=<includeonly>{{#ifeq:{{padright:{{{1}}}|3|%}}|{{padright:|3|{{{1}}}%%%%}}<!-- -->|{{#if:{{{2|}}}|{{#ifeq:{{{2}}}|~|~?~|{{{2}}}}}|{{#if:{{{1|}}}<!-- code does not exist -->|[[Category:Commons:Unspecified topic|{{{1|-}}}]]}}}}<!-- + maintenance category -->|{{#invoke:Char|subst|1={{{1|}}}}}}}<!-- more than 3 chars: display them --></includeonly> <!-- {{#ifeq:{{padleft:|1|{{{1|}}}}}|:|[[Category:Commons:Unspecified topic|{{{1|}}}]]}} --> }}<noinclude> Internationalization page, used by e.g. <!-- {{t|Igen}} and --> the {{C|SVG created with ... templates}} and others :This template is used by many templates like e.g. {{t0|Created with Other tool/de}} with two parameters: :# the short code (mostly one letter, or a few letters) like for {{T0|Igen/sub}}, :# the default value if no code fits. To avoid the wrong use of "en" the <code>|#default= </code> option is necessary. : :{{T0|Igen/sub}} often spreads short codes to different subcategories while Igen/top uses fewer names. :The short code defined with <code>s=</code> is passed from {{t0|Image generation}} and other templates; :if another code should be used it can be defined with <code>w=</code>; to just ''suppress'' the usage of <code>s=</code> use <code>w=</code> without a value. : :{{0}} : :For languages with different {{W|Grammatical gender|genders}} (like de, fr, it, pl, pt...) the names must be defined ''with'' the {{W|demonstratives}}. {{Use sandbox|testcase=&#32;}} See also the [[Template talk:Igen/top|talk page]] for a table of all codes. {{Heavily used template}} The system can only display ''topics'' (f=flags, i=icons, l=logos, m=maps, ...) when a translation is provided within this template for ''that'' topic in ''that'' language. <br>When the translation fails, the output depends on :when the code exists in that template, but no translation for that language, it depends on the value of parameter 2: :* (none) an error code like "_?_" is returned (that should never happen!) :* "~" the (''always existing'') English translation is returned :* otherwise the value of parameter 2 (the standard text) is returned. :when the code does not exist in that template, parameter 1 is checked:<br> :* when it contains ''more than 3 characters'' it is displayed; otherwise it depends on the value of parameter 2: :** (none) the untranslated value of parameter 1 is returned, :** "~" an error code like "~?~" is returned, :** otherwise the value of parameter 2 (the standard text) is returned, : '''and''' categorization to a {{C|Commons:Unspecified topic|maintenance category}} occurs. The skeleton is prepared, and when users want to see things in their language they ought to maintain and to expand that template.<br> If a translation is missing in the current display language, only the standard text is shown, as it had been before. [[Category:Templates using LangSwitch for internationalisation]]</noinclude> psfwu0awktv3p3hrgfyvkco4o57wd95 Module:Igenmod 828 1348 10739 2023-03-04T15:11:52Z commons>Sarang 0 expansion 10739 Scribunto text/plain local p = {} ----------------------------------------------------------------------- -- get workdate via "Module:File" function p.wrkdate ( ) local str = mw.getCurrentFrame():preprocess('{{REVISIONTIMESTAMP}}') return str:sub(1,4) .. '-' .. str:sub(5,6) .. '-' .. str:sub(7,8) end -- end function wrkDate -- invert the workdate (for a descending sortkey) function p.invdate () local invt = "" local wdat = p.wrkdate () or "2020-00-00" invt = string.format ( "%.4u" , 2030 - tonumber ( string.sub ( wdat, 1, 4 )) ) invt = invt .. string.format ( "%.2u" , 12 - tonumber ( string.sub ( wdat, 6, 7 )) ) invt = invt .. string.format ( "%.2u" , 31 - tonumber ( string.sub ( wdat, 9, 10 )) ) return invt end -- end function invDate -- get extension text (uppercased) function p.exttext ( ) local page = mw.title.getCurrentTitle().text; local ptab = mw.text.split(page , '.', true) return mw.ustring.upper( table.concat(ptab, '', #ptab ) ) end -- end function extText -- get extension code: "s" for SVG, "n" for anything else function p.extcode ( ) if p.exttext () == "SVG" then return "s" else return "n" end end -- end function extCode -- get default tag: "v" for SVG, "n" for anything else function p.default ( ) if p.exttext () == "SVG" then return "v" else return "n" end end -- end function default -- get unspec tag: "" for SVG, "n" for anything else function p.unspec ( ) if p.exttext () ~= "SVG" then return "n" end end -- end function unspec -- replace a final dot function p.dotrepl ( frame ) local lpar = frame.args local strg = mw.text.trim( lpar[1] or '' ) local repl = mw.text.trim( lpar[2] or '' ) if mw.ustring.sub(strg, #strg) == "." then strg = mw.ustring.sub(strg, 1, #strg-1) .. repl end return strg end -- function dotrepl -- invert the workdate, for a descending sortkey function p.sortkey () local invt = "" local wdat = p.wrkdate () or "2020-00-00" invt = string.format ( "%.4u" , 2030 - tonumber ( string.sub ( wdat, 1, 4 )) ) invt = invt .. string.format ( "%.2u" , 12 - tonumber ( string.sub ( wdat, 6, 7 )) ) invt = invt .. string.format ( "%.2u" , 31 - tonumber ( string.sub ( wdat, 9, 10 )) ) return invt end -- end function sortKey -- get categ:sub: "SVG" for SVG, "PNG" for anything else function p.categ ( ) if p.exttext () == "SVG" then return "SVG" else return "PNG" end end -- end function categ -- function: changes #/*/:/; to \35/\42/\58/\59 function p.subst ( frame ) local gpar = frame.args local char = mw.text.trim ( gpar[1] ) if mw.ustring.sub ( char, 1, 1 ) == '#' then return '&#35;' .. mw.ustring.sub( char, 2, #char ); elseif mw.ustring.sub ( char, 1, 1 ) == '*' then return '&#42;' .. mw.ustring.sub( char, 2, #char ); elseif mw.ustring.sub ( char, 1, 1 ) == ':' then return '&#58;' .. mw.ustring.sub( char, 2, #char ); elseif mw.ustring.sub ( char, 1, 1 ) == ';' then return '&#59;' .. mw.ustring.sub( char, 2, #char ); else return char; end end -- end function subst -- replace slash by pipe function p.gsubst (frame) local frmp = frame.args return mw.ustring.gsub( frmp[1], "/" , "|" ),_; -- replace slash by pipe end -- function gsubst function p.catsort (frame) local frmp = frame.args local strg = frmp [1] or " " strg = mw.ustring.gsub( strg, "/" , "|" ),_; -- replace slash by pipe strg = mw.ustring.gsub( strg, "[\n]" , "]]\n[[Category:" ); -- replace lfeed by Cat return strg end -- function catsort -- function textsplit (for Colorbox and COAInf.) function p.split ( frame ) local lpar = frame.args local parstr = mw.text.trim( lpar[1] ) or 'xx/yy/zz'; local tmplte = mw.text.trim( lpar[2] or 'Igen/cbx' ); -- or 'Igen/coa' local argtab = mw.text.split( parstr, "/" ); -- for (trim loop) ? return mw.getCurrentFrame(): expandTemplate { title = tmplte, args = argtab }; end -- function cmdsplit function p.c_split ( frame ) local lpar = frame.args local tmplte = mw.text.trim( lpar[1] or '!' ); local parstr = mw.text.trim( lpar[2] ) or 'xx/yy/zz'; local argtab = mw.text.split( parstr, '/', true ); local indx = 1; local splt = {}; local ppar = {} for i, v in ipairs(lpar) do if v ~= nil and lpar [i+2] ~= nil then splt = mw.text.split( lpar [i+2], '/', true ) if splt [2] == nil then indx = indx + 1 ppar [indx] = splt [1] else splt [1] = mw.text.trim( splt[1] or 'a' ) splt [2] = mw.text.trim( splt[2] or 'b' ) local xxx = splt [1] ppar [splt [1]] = splt [2] -- indx = indx + 1 -- ppar [indx] = splt [2] .. splt [1] end end end local cmdtab = {} for v = 1, #argtab do ppar [1] = mw.text.trim( argtab [v] ) table.insert( cmdtab, frame:expandTemplate{ title = tmplte, args = ppar } ); end return table.concat (cmdtab) end -- function c_split -- function textsplit (for geo locations, with wrong "?") function p.g_split ( frame ) local lpar = frame.args local parstr = mw.ustring.gsub( mw.text.trim( lpar[1] ), '?', '″', 2 ) or 'xx/yy/zz'; local tmplte = mw.text.trim( lpar[2] or 'Location' ); -- or 'Object location' local argtab = mw.text.split( parstr, "/" ); -- for (trim loop) ? return mw.getCurrentFrame(): expandTemplate { title = tmplte, args = argtab }; end -- function g_split -- function textsplit (for parameter names, with equal signs) function p.q_split ( frame ) local lpar = frame.args local parstr = mw.text.trim( lpar[1] ) or ' '; local tmplte = mw.text.trim( lpar[2] ) or 'Igen'; -- local outtab = {}; local parind = 0; local argtab = mw.text.split( parstr, "/" ); -- becomes "|" local fpos = nil; for i, v in ipairs(argtab) do -- if v ~= '' then v = mw.ustring.gsub( v, "¦" , "/" ); -- repl brokenbar by slash ,_ fpos = mw.ustring.find( v, '~' ); -- "~" becomes "=" if fpos == nil then if v ~= '+' then parind = parind + 1; outtab [ parind ] = v; -- positional end else if '+' ~= mw.ustring.sub ( v, fpos+1 ) then outtab [ mw.ustring.sub ( v, 1, fpos-1 ) ] = mw.ustring.sub ( v, fpos+1 ); end end -- end end if mw.ustring.sub (tmplte,1,4) == 'Igen' then -- Showname fpos = mw.ustring.find( outtab [1], ':' ); -- shortcut: if fpos ~= nil then -- "T;xx:yy" > "T", "s=xx", "w=yy" outtab['w'] = mw.ustring.sub ( outtab [1], fpos+1 ); outtab[1] = mw.ustring.sub ( outtab [1],1, fpos-1 ); end fpos = mw.ustring.find( outtab [1], ';' ); -- shortcut: if fpos ~= nil then -- "Tool;d" > "Tool", "s=d" outtab['s'] = mw.ustring.sub ( outtab [1], fpos+1 ); outtab[1] = mw.ustring.sub ( outtab [1],1, fpos-1 ); end -- if mw.ustring.sub (tmplte,5) ~= '/coa' then table.insert( outtab, '+' ); -- re_insert the "+" -- end end return mw.getCurrentFrame(): expandTemplate { title = tmplte, args = outtab }; end -- function q_split -- function t_split: 1 parm "templte/p1/p2/.." function p.t_split ( frame ) local lpar = frame.args local parstr = mw.text.trim( lpar[1] ) or 'xx/yy/zz'; local argtab = mw.text.split( parstr, "/" ); local tmplte = mw.text.trim( table.remove ( argtab, 1 ) ); -- for (trim loop) ? return mw.getCurrentFrame(): expandTemplate { title = tmplte, args = argtab }; end -- function t_split -- global function with 1 parm: can remove special prefixes -- the pairs [], <>, (), {} -- doubles as <<, .., ((, && but of course ''not'' [[ and {{ function p.remprf ( frame ) local lpar = frame.args; if mw.ustring.sub (lpar[1], 1, 2) == '[]' or mw.ustring.sub (lpar[1], 1, 2) == '<>' or mw.ustring.sub (lpar[1], 1, 2) == '()' or mw.ustring.sub (lpar[1], 1, 2) == '{}' or mw.ustring.sub (lpar[1], 1, 1) == mw.ustring.sub (lpar[1], 2, 2) and mw.ustring.sub (lpar[1], 1, 2) ~= '[[' and mw.ustring.sub (lpar[1], 1, 2) ~= '{{' then return mw.ustring.sub (lpar[1], 3 ) -- remove that prefix else return lpar[1] end end -- function remprf -- global function with 1 parm: remove any 2-byte prefix function p.rem2bp ( frame ) local lpar = frame.args; return mw.ustring.sub (lpar[1], 3 ) end -- function rem2bp -- check whether it is a new Inkscape file function p.inkscape ( frame ) local otab = {} if p.exttext () ~= "SVG" then table.insert(otab, frame:expandTemplate{ title = "=", args = {" "} } ); else local cat = "Unspec New SVG created with Inkscape" local key = "{{padleft:{{#expr:{{CURRENTYEAR}} -{{REVISIONYEAR}}}}|2|0}}" key = key .."{{padleft:{{#expr:{{CURRENTMONTH2}}-{{REVISIONMONTH}}}}|2|0}}" key = key .."{{padleft:{{#expr:{{CURRENTDAY2}} -{{REVISIONDAY2}}}}|2|0}}" table.insert(otab, frame:expandTemplate{ title = "Igen/cat", args = {cat, key } }); end return table.concat (otab); end -- end function inkscape ----------------------- TEST ------------------------------------------ -- check whether it is a new Inkscape file function p.newscape ( frame ) local otab = {} if p.exttext () ~= "SVG" then table.insert(otab, frame:expandTemplate{ title = "=", args = {" "} } ); else local wdat = p.wrkdate () or "2020-00-00" local sdat = mw.getCurrentFrame():callParserFunction( "#time", { 'Y-m-d', datestr} ) or "2020-08" if mw.ustring.sub (wdat, 1, 7) == mw.ustring.sub (sdat, 1, 7) then local cat = "Unspec new SVG created with Inkscape" local key = string.format ( "%.4u" , 2030 - tonumber ( string.sub ( wdat, 1, 4 )) ) key = key .. string.format ( "%.2u" , 12 - tonumber ( string.sub ( wdat, 6, 7 )) ) key = key .. string.format ( "%.2u" , 31 - tonumber ( string.sub ( wdat, 9,10 )) ) table.insert(otab, frame:expandTemplate{ title = "Igen/cat", args = {cat, key } }); -- local msg = " Template [[Template:Inkscape|{{Inkscape}}]] without W3C-specification is deprecated ! " -- table.insert(otab, frame:expandTemplate{ title = "error", args = {msg} } ); else table.insert(otab, frame:expandTemplate{ title = "=", args = {" "} } ); -- table.insert(otab, frame:expandTemplate{ title = "=", args = {wdat..sdat} } ); -- test output end end return table.concat (otab); end -- end function newscape -- function: invert date function p.invtest ( frame ) local gpar = frame.args local wdat = mw.text.trim ( gpar[1] ) or '2020-00-00' -- local leng = tonumber ( gpar[2] ) or 7 local sdat = mw.getCurrentFrame():callParserFunction( "#time", { 'Y-m-d', datestr} ) or "2020-08-30" local key = string.format ( "%.4u" , 2030 - tonumber ( string.sub ( wdat, 1, 4 )) ) key = key .. string.format ( "%.2u" , 12 - tonumber ( string.sub ( wdat, 6, 7 )) ) key = key .. string.format ( "%.2u" , 31 - tonumber ( string.sub ( wdat, 9,10 )) ) return key end -- end function invTest -- check whether it is a new file function p.newfile ( frame ) if p.exttext () ~= "SVG" then return "n" else local leng = frame [1] or 7; local wdat = p.wrkdate () or "2020-00-00" local sdat = mw.getCurrentFrame():callParserFunction( "#time", { 'Y-m-d', datestr} ) local leng = tonumber ( frame.args[1] or 7 ) if mw.ustring.sub (wdat, 1, leng) ~= mw.ustring.sub (sdat, 1, leng) then return "s" else return "newcat" end end end -- end function newFile function p.cattest (args) local categ = mw.ext.cattools local category = args[1] or "Category:Igen/top subtemplates" local page = args[2] or "Template:Igen/top:d" if categ.hasPage( category, page ) then return page .. " ist in category " .. category .. " enthalten" else return page .. " gibt es nicht in " .. category .. " !" end end function p.sysdate ( ) return os.date ( ) end function p.compare ( ) local wdat = p.wrkdate () or "2020-00-00" local sdat = mw.getCurrentFrame():callParserFunction( "#time", { 'Y-m-d', datestr} ) return "W="..wdat ..", S="..sdat.."." end ----------------------------------------------------------------------- return p t5v2kkfo6h17xx4z55z62l1179tcggd 10740 10739 2026-08-25T23:38:30Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Igenmod]] 10739 Scribunto text/plain local p = {} ----------------------------------------------------------------------- -- get workdate via "Module:File" function p.wrkdate ( ) local str = mw.getCurrentFrame():preprocess('{{REVISIONTIMESTAMP}}') return str:sub(1,4) .. '-' .. str:sub(5,6) .. '-' .. str:sub(7,8) end -- end function wrkDate -- invert the workdate (for a descending sortkey) function p.invdate () local invt = "" local wdat = p.wrkdate () or "2020-00-00" invt = string.format ( "%.4u" , 2030 - tonumber ( string.sub ( wdat, 1, 4 )) ) invt = invt .. string.format ( "%.2u" , 12 - tonumber ( string.sub ( wdat, 6, 7 )) ) invt = invt .. string.format ( "%.2u" , 31 - tonumber ( string.sub ( wdat, 9, 10 )) ) return invt end -- end function invDate -- get extension text (uppercased) function p.exttext ( ) local page = mw.title.getCurrentTitle().text; local ptab = mw.text.split(page , '.', true) return mw.ustring.upper( table.concat(ptab, '', #ptab ) ) end -- end function extText -- get extension code: "s" for SVG, "n" for anything else function p.extcode ( ) if p.exttext () == "SVG" then return "s" else return "n" end end -- end function extCode -- get default tag: "v" for SVG, "n" for anything else function p.default ( ) if p.exttext () == "SVG" then return "v" else return "n" end end -- end function default -- get unspec tag: "" for SVG, "n" for anything else function p.unspec ( ) if p.exttext () ~= "SVG" then return "n" end end -- end function unspec -- replace a final dot function p.dotrepl ( frame ) local lpar = frame.args local strg = mw.text.trim( lpar[1] or '' ) local repl = mw.text.trim( lpar[2] or '' ) if mw.ustring.sub(strg, #strg) == "." then strg = mw.ustring.sub(strg, 1, #strg-1) .. repl end return strg end -- function dotrepl -- invert the workdate, for a descending sortkey function p.sortkey () local invt = "" local wdat = p.wrkdate () or "2020-00-00" invt = string.format ( "%.4u" , 2030 - tonumber ( string.sub ( wdat, 1, 4 )) ) invt = invt .. string.format ( "%.2u" , 12 - tonumber ( string.sub ( wdat, 6, 7 )) ) invt = invt .. string.format ( "%.2u" , 31 - tonumber ( string.sub ( wdat, 9, 10 )) ) return invt end -- end function sortKey -- get categ:sub: "SVG" for SVG, "PNG" for anything else function p.categ ( ) if p.exttext () == "SVG" then return "SVG" else return "PNG" end end -- end function categ -- function: changes #/*/:/; to \35/\42/\58/\59 function p.subst ( frame ) local gpar = frame.args local char = mw.text.trim ( gpar[1] ) if mw.ustring.sub ( char, 1, 1 ) == '#' then return '&#35;' .. mw.ustring.sub( char, 2, #char ); elseif mw.ustring.sub ( char, 1, 1 ) == '*' then return '&#42;' .. mw.ustring.sub( char, 2, #char ); elseif mw.ustring.sub ( char, 1, 1 ) == ':' then return '&#58;' .. mw.ustring.sub( char, 2, #char ); elseif mw.ustring.sub ( char, 1, 1 ) == ';' then return '&#59;' .. mw.ustring.sub( char, 2, #char ); else return char; end end -- end function subst -- replace slash by pipe function p.gsubst (frame) local frmp = frame.args return mw.ustring.gsub( frmp[1], "/" , "|" ),_; -- replace slash by pipe end -- function gsubst function p.catsort (frame) local frmp = frame.args local strg = frmp [1] or " " strg = mw.ustring.gsub( strg, "/" , "|" ),_; -- replace slash by pipe strg = mw.ustring.gsub( strg, "[\n]" , "]]\n[[Category:" ); -- replace lfeed by Cat return strg end -- function catsort -- function textsplit (for Colorbox and COAInf.) function p.split ( frame ) local lpar = frame.args local parstr = mw.text.trim( lpar[1] ) or 'xx/yy/zz'; local tmplte = mw.text.trim( lpar[2] or 'Igen/cbx' ); -- or 'Igen/coa' local argtab = mw.text.split( parstr, "/" ); -- for (trim loop) ? return mw.getCurrentFrame(): expandTemplate { title = tmplte, args = argtab }; end -- function cmdsplit function p.c_split ( frame ) local lpar = frame.args local tmplte = mw.text.trim( lpar[1] or '!' ); local parstr = mw.text.trim( lpar[2] ) or 'xx/yy/zz'; local argtab = mw.text.split( parstr, '/', true ); local indx = 1; local splt = {}; local ppar = {} for i, v in ipairs(lpar) do if v ~= nil and lpar [i+2] ~= nil then splt = mw.text.split( lpar [i+2], '/', true ) if splt [2] == nil then indx = indx + 1 ppar [indx] = splt [1] else splt [1] = mw.text.trim( splt[1] or 'a' ) splt [2] = mw.text.trim( splt[2] or 'b' ) local xxx = splt [1] ppar [splt [1]] = splt [2] -- indx = indx + 1 -- ppar [indx] = splt [2] .. splt [1] end end end local cmdtab = {} for v = 1, #argtab do ppar [1] = mw.text.trim( argtab [v] ) table.insert( cmdtab, frame:expandTemplate{ title = tmplte, args = ppar } ); end return table.concat (cmdtab) end -- function c_split -- function textsplit (for geo locations, with wrong "?") function p.g_split ( frame ) local lpar = frame.args local parstr = mw.ustring.gsub( mw.text.trim( lpar[1] ), '?', '″', 2 ) or 'xx/yy/zz'; local tmplte = mw.text.trim( lpar[2] or 'Location' ); -- or 'Object location' local argtab = mw.text.split( parstr, "/" ); -- for (trim loop) ? return mw.getCurrentFrame(): expandTemplate { title = tmplte, args = argtab }; end -- function g_split -- function textsplit (for parameter names, with equal signs) function p.q_split ( frame ) local lpar = frame.args local parstr = mw.text.trim( lpar[1] ) or ' '; local tmplte = mw.text.trim( lpar[2] ) or 'Igen'; -- local outtab = {}; local parind = 0; local argtab = mw.text.split( parstr, "/" ); -- becomes "|" local fpos = nil; for i, v in ipairs(argtab) do -- if v ~= '' then v = mw.ustring.gsub( v, "¦" , "/" ); -- repl brokenbar by slash ,_ fpos = mw.ustring.find( v, '~' ); -- "~" becomes "=" if fpos == nil then if v ~= '+' then parind = parind + 1; outtab [ parind ] = v; -- positional end else if '+' ~= mw.ustring.sub ( v, fpos+1 ) then outtab [ mw.ustring.sub ( v, 1, fpos-1 ) ] = mw.ustring.sub ( v, fpos+1 ); end end -- end end if mw.ustring.sub (tmplte,1,4) == 'Igen' then -- Showname fpos = mw.ustring.find( outtab [1], ':' ); -- shortcut: if fpos ~= nil then -- "T;xx:yy" > "T", "s=xx", "w=yy" outtab['w'] = mw.ustring.sub ( outtab [1], fpos+1 ); outtab[1] = mw.ustring.sub ( outtab [1],1, fpos-1 ); end fpos = mw.ustring.find( outtab [1], ';' ); -- shortcut: if fpos ~= nil then -- "Tool;d" > "Tool", "s=d" outtab['s'] = mw.ustring.sub ( outtab [1], fpos+1 ); outtab[1] = mw.ustring.sub ( outtab [1],1, fpos-1 ); end -- if mw.ustring.sub (tmplte,5) ~= '/coa' then table.insert( outtab, '+' ); -- re_insert the "+" -- end end return mw.getCurrentFrame(): expandTemplate { title = tmplte, args = outtab }; end -- function q_split -- function t_split: 1 parm "templte/p1/p2/.." function p.t_split ( frame ) local lpar = frame.args local parstr = mw.text.trim( lpar[1] ) or 'xx/yy/zz'; local argtab = mw.text.split( parstr, "/" ); local tmplte = mw.text.trim( table.remove ( argtab, 1 ) ); -- for (trim loop) ? return mw.getCurrentFrame(): expandTemplate { title = tmplte, args = argtab }; end -- function t_split -- global function with 1 parm: can remove special prefixes -- the pairs [], <>, (), {} -- doubles as <<, .., ((, && but of course ''not'' [[ and {{ function p.remprf ( frame ) local lpar = frame.args; if mw.ustring.sub (lpar[1], 1, 2) == '[]' or mw.ustring.sub (lpar[1], 1, 2) == '<>' or mw.ustring.sub (lpar[1], 1, 2) == '()' or mw.ustring.sub (lpar[1], 1, 2) == '{}' or mw.ustring.sub (lpar[1], 1, 1) == mw.ustring.sub (lpar[1], 2, 2) and mw.ustring.sub (lpar[1], 1, 2) ~= '[[' and mw.ustring.sub (lpar[1], 1, 2) ~= '{{' then return mw.ustring.sub (lpar[1], 3 ) -- remove that prefix else return lpar[1] end end -- function remprf -- global function with 1 parm: remove any 2-byte prefix function p.rem2bp ( frame ) local lpar = frame.args; return mw.ustring.sub (lpar[1], 3 ) end -- function rem2bp -- check whether it is a new Inkscape file function p.inkscape ( frame ) local otab = {} if p.exttext () ~= "SVG" then table.insert(otab, frame:expandTemplate{ title = "=", args = {" "} } ); else local cat = "Unspec New SVG created with Inkscape" local key = "{{padleft:{{#expr:{{CURRENTYEAR}} -{{REVISIONYEAR}}}}|2|0}}" key = key .."{{padleft:{{#expr:{{CURRENTMONTH2}}-{{REVISIONMONTH}}}}|2|0}}" key = key .."{{padleft:{{#expr:{{CURRENTDAY2}} -{{REVISIONDAY2}}}}|2|0}}" table.insert(otab, frame:expandTemplate{ title = "Igen/cat", args = {cat, key } }); end return table.concat (otab); end -- end function inkscape ----------------------- TEST ------------------------------------------ -- check whether it is a new Inkscape file function p.newscape ( frame ) local otab = {} if p.exttext () ~= "SVG" then table.insert(otab, frame:expandTemplate{ title = "=", args = {" "} } ); else local wdat = p.wrkdate () or "2020-00-00" local sdat = mw.getCurrentFrame():callParserFunction( "#time", { 'Y-m-d', datestr} ) or "2020-08" if mw.ustring.sub (wdat, 1, 7) == mw.ustring.sub (sdat, 1, 7) then local cat = "Unspec new SVG created with Inkscape" local key = string.format ( "%.4u" , 2030 - tonumber ( string.sub ( wdat, 1, 4 )) ) key = key .. string.format ( "%.2u" , 12 - tonumber ( string.sub ( wdat, 6, 7 )) ) key = key .. string.format ( "%.2u" , 31 - tonumber ( string.sub ( wdat, 9,10 )) ) table.insert(otab, frame:expandTemplate{ title = "Igen/cat", args = {cat, key } }); -- local msg = " Template [[Template:Inkscape|{{Inkscape}}]] without W3C-specification is deprecated ! " -- table.insert(otab, frame:expandTemplate{ title = "error", args = {msg} } ); else table.insert(otab, frame:expandTemplate{ title = "=", args = {" "} } ); -- table.insert(otab, frame:expandTemplate{ title = "=", args = {wdat..sdat} } ); -- test output end end return table.concat (otab); end -- end function newscape -- function: invert date function p.invtest ( frame ) local gpar = frame.args local wdat = mw.text.trim ( gpar[1] ) or '2020-00-00' -- local leng = tonumber ( gpar[2] ) or 7 local sdat = mw.getCurrentFrame():callParserFunction( "#time", { 'Y-m-d', datestr} ) or "2020-08-30" local key = string.format ( "%.4u" , 2030 - tonumber ( string.sub ( wdat, 1, 4 )) ) key = key .. string.format ( "%.2u" , 12 - tonumber ( string.sub ( wdat, 6, 7 )) ) key = key .. string.format ( "%.2u" , 31 - tonumber ( string.sub ( wdat, 9,10 )) ) return key end -- end function invTest -- check whether it is a new file function p.newfile ( frame ) if p.exttext () ~= "SVG" then return "n" else local leng = frame [1] or 7; local wdat = p.wrkdate () or "2020-00-00" local sdat = mw.getCurrentFrame():callParserFunction( "#time", { 'Y-m-d', datestr} ) local leng = tonumber ( frame.args[1] or 7 ) if mw.ustring.sub (wdat, 1, leng) ~= mw.ustring.sub (sdat, 1, leng) then return "s" else return "newcat" end end end -- end function newFile function p.cattest (args) local categ = mw.ext.cattools local category = args[1] or "Category:Igen/top subtemplates" local page = args[2] or "Template:Igen/top:d" if categ.hasPage( category, page ) then return page .. " ist in category " .. category .. " enthalten" else return page .. " gibt es nicht in " .. category .. " !" end end function p.sysdate ( ) return os.date ( ) end function p.compare ( ) local wdat = p.wrkdate () or "2020-00-00" local sdat = mw.getCurrentFrame():callParserFunction( "#time", { 'Y-m-d', datestr} ) return "W="..wdat ..", S="..sdat.."." end ----------------------------------------------------------------------- return p t5v2kkfo6h17xx4z55z62l1179tcggd Module:Char 828 1349 10741 2020-10-18T12:01:19Z commons>CptViraj 0 Protected "[[Module:Char]]": [[Commons:Protection policy|High-risk Lua module]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite)) 10741 Scribunto text/plain -- This function can substitute some critical leading characters -- by their decimal numeric character references -- to avoid their interpretion as wiki syntax local ncr = {} -- function: removes characters at the start of the string: '#', '*', ':', ';' function ncr.subst ( frame ) local gpar = frame.args local char = '' if gpar then char = mw.text.trim ( gpar[1] )-- global else char = mw.text.trim ( frame ) -- local end if mw.ustring.sub ( char, 1, 1 ) == '#' then return '&#35;' .. mw.ustring.sub( char, 2, #char ); elseif mw.ustring.sub ( char, 1, 1 ) == '*' then return '&#42;' .. mw.ustring.sub( char, 2, #char ); elseif mw.ustring.sub ( char, 1, 1 ) == ':' then return '&#58;' .. mw.ustring.sub( char, 2, #char ); elseif mw.ustring.sub ( char, 1, 1 ) == ';' then return '&#59;' .. mw.ustring.sub( char, 2, #char ); else return char; end end -- end function subst -- alias long function name for abbreviation function ncr.substitute ( frame ) local gpar = frame.args return ncr.subst ( gpar[1] ); end -- end function substitute -- function: removes characters: '"', '&', "'", '<', '=', '>', '[', ']', '{', '|', '}' function ncr.nowiki ( frame ) local gpar = frame.args return mw.text.nowiki( gpar[1] ); end -- end function nowiki return ncr; bnr3b7ned5uocz6fk4wt0cv08y7bm7t 10742 10741 2026-08-25T23:38:31Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Char]] 10741 Scribunto text/plain -- This function can substitute some critical leading characters -- by their decimal numeric character references -- to avoid their interpretion as wiki syntax local ncr = {} -- function: removes characters at the start of the string: '#', '*', ':', ';' function ncr.subst ( frame ) local gpar = frame.args local char = '' if gpar then char = mw.text.trim ( gpar[1] )-- global else char = mw.text.trim ( frame ) -- local end if mw.ustring.sub ( char, 1, 1 ) == '#' then return '&#35;' .. mw.ustring.sub( char, 2, #char ); elseif mw.ustring.sub ( char, 1, 1 ) == '*' then return '&#42;' .. mw.ustring.sub( char, 2, #char ); elseif mw.ustring.sub ( char, 1, 1 ) == ':' then return '&#58;' .. mw.ustring.sub( char, 2, #char ); elseif mw.ustring.sub ( char, 1, 1 ) == ';' then return '&#59;' .. mw.ustring.sub( char, 2, #char ); else return char; end end -- end function subst -- alias long function name for abbreviation function ncr.substitute ( frame ) local gpar = frame.args return ncr.subst ( gpar[1] ); end -- end function substitute -- function: removes characters: '"', '&', "'", '<', '=', '>', '[', ']', '{', '|', '}' function ncr.nowiki ( frame ) local gpar = frame.args return mw.text.nowiki( gpar[1] ); end -- end function nowiki return ncr; bnr3b7ned5uocz6fk4wt0cv08y7bm7t Tempilet:Str right 10 1350 10745 2024-08-29T08:13:46Z commons>CptViraj 0 Protected "[[Template:Str right]]": [[Special:MyLanguage/Commons:Protection policy|Widely used template]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite)) 10745 wikitext text/x-wiki <includeonly>{{{{{|safesubst:}}}#ifexpr: {{{2|0}}} < 0 |{{{1}}} |{{{{{|safesubst:}}}#ifexpr: {{{2|0}}}+1 > {{{{{|safesubst:}}}#invoke:String|len|s={{{1}}}}} | | {{{{{|safesubst:}}}#Invoke:String|sub|s={{{1}}}|{{{{{|safesubst:}}}#expr:{{{2|0}}}+1}}|nocategory={{{nocategory|}}}}} }} }}</includeonly><noinclude> {{Documentation}} </noinclude> raeguzl7cqrijrzy29szve4880insxv 10746 10745 2026-08-25T23:38:31Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Str_right]] 10745 wikitext text/x-wiki <includeonly>{{{{{|safesubst:}}}#ifexpr: {{{2|0}}} < 0 |{{{1}}} |{{{{{|safesubst:}}}#ifexpr: {{{2|0}}}+1 > {{{{{|safesubst:}}}#invoke:String|len|s={{{1}}}}} | | {{{{{|safesubst:}}}#Invoke:String|sub|s={{{1}}}|{{{{{|safesubst:}}}#expr:{{{2|0}}}+1}}|nocategory={{{nocategory|}}}}} }} }}</includeonly><noinclude> {{Documentation}} </noinclude> raeguzl7cqrijrzy29szve4880insxv Tempilet:Custom edit 10 1351 10747 2024-08-08T13:28:51Z commons>Jarekt 0 10747 wikitext text/x-wiki <span class="noprint plainlinks">[{{FULLURL:{{#if: {{{1|}}} | {{{1|}}} | {{FULLPAGENAME}} }}|action=edit{{#if: {{{oldid|}}} | &oldid={{URLENCODE:{{{oldid|}}}|QUERY}} }}{{#if: {{{section|}}} | &section={{URLENCODE:{{{section|}}}|QUERY}} }}{{#if: {{{editintro|}}} | &editintro={{URLENCODE:{{FULLPAGENAME:{{{editintro|}}}}}|QUERY}} }}{{#if: {{{preloadtitle|}}} | &preloadtitle={{URLENCODE:{{{preloadtitle|}}}|QUERY}} }}{{#if: {{{preload|}}} | &preload={{URLENCODE:{{FULLPAGENAME:{{{preload|}}}}}|QUERY}} }} }} {{#if: {{{2|}}} | {{{2|}}} | {{#if: {{{text|}}} | {{{text|}}} | {{lcfirst:{{int:Edit}}}} }} }}]</span><noinclude> {{Documentation}} </noinclude> rjzghwltag85tw4y1cbqaw5aowct9f2 10748 10747 2026-08-25T23:38:31Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Custom_edit]] 10747 wikitext text/x-wiki <span class="noprint plainlinks">[{{FULLURL:{{#if: {{{1|}}} | {{{1|}}} | {{FULLPAGENAME}} }}|action=edit{{#if: {{{oldid|}}} | &oldid={{URLENCODE:{{{oldid|}}}|QUERY}} }}{{#if: {{{section|}}} | &section={{URLENCODE:{{{section|}}}|QUERY}} }}{{#if: {{{editintro|}}} | &editintro={{URLENCODE:{{FULLPAGENAME:{{{editintro|}}}}}|QUERY}} }}{{#if: {{{preloadtitle|}}} | &preloadtitle={{URLENCODE:{{{preloadtitle|}}}|QUERY}} }}{{#if: {{{preload|}}} | &preload={{URLENCODE:{{FULLPAGENAME:{{{preload|}}}}}|QUERY}} }} }} {{#if: {{{2|}}} | {{{2|}}} | {{#if: {{{text|}}} | {{{text|}}} | {{lcfirst:{{int:Edit}}}} }} }}]</span><noinclude> {{Documentation}} </noinclude> rjzghwltag85tw4y1cbqaw5aowct9f2 Tempilet:Clickable button/iconclass 10 1352 10751 2013-09-14T10:25:00Z commons>Rillke 0 evaluating text arg 10751 wikitext text/x-wiki {{#if:{{{3|}}} |<!-- a text was specified -->{{#if:{{{1|}}} |<!-- a primary icon was specified -->{{#if:{{{2|}}} |<!-- a secondary icon was specified --> ui-button-text-icons |<!-- no secondary icon was specified --> ui-button-text-icon-primary }} |<!-- no primary icon specified --> {{#if:{{{2|}}} |<!-- a secondary icon was specified --> ui-button-text-icon-secondary |<!-- no secondary icon was specified --> ui-button-text-only }} }} |<!-- no text was specified -->{{#if:{{{1|}}} |<!-- a primary icon was specified -->{{#if:{{{2|}}} |<!-- a secondary icon was specified --> ui-button-icons-only |<!-- no secondary icon was specified --> ui-button-icon-only }} |<!-- no primary icon specified --> {{#if:{{{2|}}} |<!-- a secondary icon was specified --> ui-button-icon-only |<!-- no secondary icon was specified --> error }} }} }} lhcosganbcjza7n61x8xc8wjmog8aka 10752 10751 2026-08-25T23:38:31Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Clickable_button/iconclass]] 10751 wikitext text/x-wiki {{#if:{{{3|}}} |<!-- a text was specified -->{{#if:{{{1|}}} |<!-- a primary icon was specified -->{{#if:{{{2|}}} |<!-- a secondary icon was specified --> ui-button-text-icons |<!-- no secondary icon was specified --> ui-button-text-icon-primary }} |<!-- no primary icon specified --> {{#if:{{{2|}}} |<!-- a secondary icon was specified --> ui-button-text-icon-secondary |<!-- no secondary icon was specified --> ui-button-text-only }} }} |<!-- no text was specified -->{{#if:{{{1|}}} |<!-- a primary icon was specified -->{{#if:{{{2|}}} |<!-- a secondary icon was specified --> ui-button-icons-only |<!-- no secondary icon was specified --> ui-button-icon-only }} |<!-- no primary icon specified --> {{#if:{{{2|}}} |<!-- a secondary icon was specified --> ui-button-icon-only |<!-- no secondary icon was specified --> error }} }} }} lhcosganbcjza7n61x8xc8wjmog8aka Module:Fallback 828 1353 10753 2018-11-08T14:08:56Z commons>Jarekt 0 Splitting [[Module:Fallback]] into [[Module:Autotranslate]], [[Module:LangSwitch]] and [[Module:Fallback]] 10753 Scribunto text/plain --[[ __ __ _ _ _____ _ _ _ _ | \/ | ___ __| |_ _| | ___ _| ___|_ _| | | |__ __ _ ___| | __ | |\/| |/ _ \ / _` | | | | |/ _ (_) |_ / _` | | | '_ \ / _` |/ __| |/ / | | | | (_) | (_| | |_| | | __/_| _| (_| | | | |_) | (_| | (__| < |_| |_|\___/ \__,_|\__,_|_|\___(_)_| \__,_|_|_|_.__/ \__,_|\___|_|\_\ Authors and maintainers: * User:Zolo - original version * User:Jarekt ]] local p = {} --[[ translatelua Allows easy translation or internalization of pages in Lua. Example Usage from a template: {{#invoke: fallback|translatelua| i18n/oil on canvas|lang={{{lang|}}}}} Parameters: frame.args.1 - name of translation module frame.args.2 - field name of the structure in Module:[frame.args.1] to use frame.args.lang - desired language (often user's native language) Error Handling: ]] function p.translatelua(frame) local lang = mw.text.trim(frame.args.lang) local page = require('Module:' .. mw.text.trim(frame.args[1])) -- page should only contain a simple of translations if not lang or lang == '' then lang = frame:callParserFunction("int", "lang") end if frame.args[2] then page = page[mw.text.trim(frame.args[2])] end local langList = mw.language.getFallbacksFor(lang) table.insert(langList,1,lang) for _,language in ipairs(langList) do if page[language] then return page[language] end end end --[[ fblist Similar to mw.language.getFallbacksFor(lang) but uses Commons old fallback chain Parameters: lang - desired language (often user's native language) Error Handling: ]] function p.fblist(lang) -- list the full fallback chain from a language to en local fbtable = p.fallbackloop{lang:lower()} table.insert(fbtable, 'default') table.insert(fbtable, 'en') return fbtable end local function _inArray(x, t) for i, v in ipairs(t) do if v == x then return i end end return -1 end function p.fallbackloop(fbtable) --list of fallback languages in string format (more convenient than tables) local langlist = require('Module:Fallbacklist') local changes = false for i, j in ipairs(fbtable) do local seq = langlist[j] if seq then for k, l in ipairs(seq) do if _inArray(l, fbtable) == -1 then table.insert(fbtable, l) changes = true end end end end if changes then return p.fallbackloop(fbtable) end return fbtable end return p c8daj99p9kviuy2a7je2kzj9emhj009 10754 10753 2026-08-25T23:38:31Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Fallback]] 10753 Scribunto text/plain --[[ __ __ _ _ _____ _ _ _ _ | \/ | ___ __| |_ _| | ___ _| ___|_ _| | | |__ __ _ ___| | __ | |\/| |/ _ \ / _` | | | | |/ _ (_) |_ / _` | | | '_ \ / _` |/ __| |/ / | | | | (_) | (_| | |_| | | __/_| _| (_| | | | |_) | (_| | (__| < |_| |_|\___/ \__,_|\__,_|_|\___(_)_| \__,_|_|_|_.__/ \__,_|\___|_|\_\ Authors and maintainers: * User:Zolo - original version * User:Jarekt ]] local p = {} --[[ translatelua Allows easy translation or internalization of pages in Lua. Example Usage from a template: {{#invoke: fallback|translatelua| i18n/oil on canvas|lang={{{lang|}}}}} Parameters: frame.args.1 - name of translation module frame.args.2 - field name of the structure in Module:[frame.args.1] to use frame.args.lang - desired language (often user's native language) Error Handling: ]] function p.translatelua(frame) local lang = mw.text.trim(frame.args.lang) local page = require('Module:' .. mw.text.trim(frame.args[1])) -- page should only contain a simple of translations if not lang or lang == '' then lang = frame:callParserFunction("int", "lang") end if frame.args[2] then page = page[mw.text.trim(frame.args[2])] end local langList = mw.language.getFallbacksFor(lang) table.insert(langList,1,lang) for _,language in ipairs(langList) do if page[language] then return page[language] end end end --[[ fblist Similar to mw.language.getFallbacksFor(lang) but uses Commons old fallback chain Parameters: lang - desired language (often user's native language) Error Handling: ]] function p.fblist(lang) -- list the full fallback chain from a language to en local fbtable = p.fallbackloop{lang:lower()} table.insert(fbtable, 'default') table.insert(fbtable, 'en') return fbtable end local function _inArray(x, t) for i, v in ipairs(t) do if v == x then return i end end return -1 end function p.fallbackloop(fbtable) --list of fallback languages in string format (more convenient than tables) local langlist = require('Module:Fallbacklist') local changes = false for i, j in ipairs(fbtable) do local seq = langlist[j] if seq then for k, l in ipairs(seq) do if _inArray(l, fbtable) == -1 then table.insert(fbtable, l) changes = true end end end end if changes then return p.fallbackloop(fbtable) end return fbtable end return p c8daj99p9kviuy2a7je2kzj9emhj009 Tempilet:Tmpl 10 1354 10755 2021-08-06T17:03:07Z commons>CptViraj 0 Protected "[[Template:Tmpl]]": [[Commons:Protection policy|Widely used template]]: [[Special:PermaLink/578762431#Template:Tmpl and Module:Tmpl|Request at COM:ANB]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite)) 10755 wikitext text/x-wiki <onlyinclude><includeonly>{{#invoke:Tmpl|renderTmpl}}</includeonly></onlyinclude> {{Documentation}} pd3axhqea7nbo7qxiyq3aicgysk00ym 10756 10755 2026-08-25T23:38:31Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Tmpl]] 10755 wikitext text/x-wiki <onlyinclude><includeonly>{{#invoke:Tmpl|renderTmpl}}</includeonly></onlyinclude> {{Documentation}} pd3axhqea7nbo7qxiyq3aicgysk00ym Module:Tmpl 828 1355 10757 2021-08-06T17:03:50Z commons>CptViraj 0 Protected "[[Module:Tmpl]]": [[Commons:Protection policy|High-risk Lua module]]: [[Special:PermaLink/578762431#Template:Tmpl and Module:Tmpl|Request at COM:ANB]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite)) 10757 Scribunto text/plain -- This is a helper module for Template:tmpl local this = {} function this.renderTmpl(frame) local args = frame.args local pargs = (frame:getParent() or {}).args local result = pargs[0] or '' for k, v in pairs(pargs) do local n = tonumber(k) or -1 if (n >= 1 and n <= 9) then result = mw.ustring.gsub( result, '$' .. n, mw.text.trim(v) ) end end return result end return this ep2bcs460ax2usm6nvg7v90dlm9e09v 10758 10757 2026-08-25T23:38:31Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Tmpl]] 10757 Scribunto text/plain -- This is a helper module for Template:tmpl local this = {} function this.renderTmpl(frame) local args = frame.args local pargs = (frame:getParent() or {}).args local result = pargs[0] or '' for k, v in pairs(pargs) do local n = tonumber(k) or -1 if (n >= 1 and n <= 9) then result = mw.ustring.gsub( result, '$' .. n, mw.text.trim(v) ) end end return result end return this ep2bcs460ax2usm6nvg7v90dlm9e09v Tempilet:Str left 10 1356 10759 2016-05-02T13:27:20Z commons>Jarekt 0 Fulfilling [[Template:Edit request|edit request]] by [[User:Riley Huntley|Riley Huntley]]. Thanks for helping! 10759 wikitext text/x-wiki <includeonly>{{ {{{|safesubst:}}}padleft:|{{{2|1}}}|{{{1}}}}}</includeonly><noinclude> {{heavily used template}} {{documentation}} </noinclude> tqfq8u3hctmwbhh4pvher9gkphm721b 10760 10759 2026-08-25T23:38:31Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Str_left]] 10759 wikitext text/x-wiki <includeonly>{{ {{{|safesubst:}}}padleft:|{{{2|1}}}|{{{1}}}}}</includeonly><noinclude> {{heavily used template}} {{documentation}} </noinclude> tqfq8u3hctmwbhh4pvher9gkphm721b Tempilet:Tle/parm 10 1357 10761 2020-07-28T05:27:26Z commons>Sarang 0 typo 10761 wikitext text/x-wiki {{#if:{{{2|}}}|{{{3|}}}&#32;&#124;&#160;{{#if:{{{1|}}}<!-- -->|<span style="font-family:Courier,sans;font-size:110%;{{{5|}}}">{{{1}}}</span>&#160;=&#160;}}<!-- --><span style="font-family:Verdana,serif;font-style:italic;font-size:96%;{{{4|}}}">{{#invoke:Char|subst|1={{{2}}}}}</span>}}<noinclude> {{#ifexist:{{PAGENAME}}/doc|{{Documentation}}| subtemplate of {{Tl|Tle}}, for editing a single parameter entry}} </noinclude> roz1amjierwx4r3wdug5tii5rkeama6 10762 10761 2026-08-25T23:38:31Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Tle/parm]] 10761 wikitext text/x-wiki {{#if:{{{2|}}}|{{{3|}}}&#32;&#124;&#160;{{#if:{{{1|}}}<!-- -->|<span style="font-family:Courier,sans;font-size:110%;{{{5|}}}">{{{1}}}</span>&#160;=&#160;}}<!-- --><span style="font-family:Verdana,serif;font-style:italic;font-size:96%;{{{4|}}}">{{#invoke:Char|subst|1={{{2}}}}}</span>}}<noinclude> {{#ifexist:{{PAGENAME}}/doc|{{Documentation}}| subtemplate of {{Tl|Tle}}, for editing a single parameter entry}} </noinclude> roz1amjierwx4r3wdug5tii5rkeama6 Tempilet:Data 10 1358 10763 2019-07-16T02:19:48Z commons>4nn1l2 0 Changed protection level for "[[Template:Data]]": downgraded protection level per [[Special:Permalink/357548402|consensus]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite)) 10763 wikitext text/x-wiki {{{{{|safesubst:}}}#if:{{{item|}}}|{{{{{|safesubst:}}}#invoke:Wikidata|formatStatementsE}}}}<noinclude>{{documentation}}</noinclude> i0as49f56uj28b1dj096g710aipyz61 10764 10763 2026-08-25T23:38:31Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Data]] 10763 wikitext text/x-wiki {{{{{|safesubst:}}}#if:{{{item|}}}|{{{{{|safesubst:}}}#invoke:Wikidata|formatStatementsE}}}}<noinclude>{{documentation}}</noinclude> i0as49f56uj28b1dj096g710aipyz61 Module:Wikidata 828 1359 10765 2021-05-03T11:07:41Z commons>Marsupium 0 fix rendering for snaktype 'somevalue' and 'novalue' 10765 Scribunto text/plain --script that retrieves basic data stored in Wikidata, for the datamodel, see https://www.mediawiki.org/wiki/Extension:Wikibase_Client/Lua local p = {} local linguistic = require('Module:Linguistic') local selectClaims = require('Module:Wikidata/GetClaims') local tools = require('Module:Wikidata/Tools') local entities = require('Module:Wikidata/FormatEntity') local dates = require('Module:Wikidata/Dates') local weblink = require('Module:Weblink') local langSwitch = require('Module:LangSwitch')._langSwitch local fb = require('Module:Fallback') local i18nmessages = mw.loadData('Module:i18n/wikidata') -- Wiki-specific parameters local defaultlang = mw.getCurrentFrame():callParserFunction('Int', 'Lang') local defaultlink = 'wikidata' local function i18n(str, lang) local message = i18nmessages[str] if type(message) == 'string' then return message end return langSwitch(message, lang or defaultlang) end local function formatError(key, text) return error(i18n(key) .. ' ' .. (text or ''), 2) end p.getClaims = selectClaims.getClaims local function removeBlanks(args) for i = #args, 1, -1 do if (args[i] == '') or (args[i] == '-') then table.remove(args, i) end end return args end local function getQualifiers(statement, qualifs, params) if not statement.qualifiers then return nil end if type(qualifs) == 'string' then qualifs = mw.text.split(qualifs, ',') end local vals = {} for i, j in pairs(qualifs) do j = string.upper(j) if statement.qualifiers[j] then local inserted = false if statement.qualifiers[j][1].datatype == 'monolingualtext' then local in_preferred_lang for _, language in pairs(fb.fblist(params.lang or defaultlang)) do for _, snak in pairs(statement.qualifiers[j]) do if isInLanguage(snak, language) then in_preferred_lang = snak break end end if in_preferred_lang then break end end if in_preferred_lang then table.insert(vals, in_preferred_lang) inserted = true end end if not inserted then for _, snak in pairs(statement.qualifiers[j]) do table.insert(vals, snak) end end end end if #vals == 0 then return nil end return vals end function p.formatSnak(snak, params) -- special values: 'novalue' and 'somevalue' local datatype = snak.datatype if snak.snaktype == 'somevalue' then return i18n('somevalue') elseif snak.snaktype == 'novalue' then return i18n('novalue') end local value = snak.datavalue.value -- user-defined displayformat local displayformat = params.displayformat if type(displayformat) == 'function' then return displayformat(snak, params) end if datatype == 'wikibase-item' or datatype == 'wikibase-property' then return entities.formatEntity(tools.getId(snak), params) elseif datatype == 'url' then return weblink.makelink(value, params.text, params.displayformat) elseif datatype == 'math' then return mw.getCurrentFrame():extensionTag('math', value) elseif datatype == 'string' or datatype == 'external-id' or datatype == 'commonsMedia' then if params.urlpattern then local urlpattern = params.urlpattern if type(urlpattern) == 'function' then urlpattern = urlpattern(value) end value = '[' .. mw.ustring.gsub(urlpattern, '$1', value) .. ' ' .. (params.text or value) .. ']' end return value elseif datatype == 'time' then -- format example: +00000001809-02-12T00:00:00Z return dates.formatTimeSnak(snak, params) elseif datatype == 'globe-coordinate' then -- default return a table with latitude, longitude, precision and globe that can be used by another module if displayformat == 'latitude' then return value.latitude elseif displayformat == 'longitude' then return value.longitude elseif displayformat == 'qualifier' then local coord = require('Module:Coordinates') value.globe = require('Module:Wikidata/Globes')[value.globe] value.precision = nil return coord._coord(value) else value.globe = require('Module:Wikidata/Globes')[value.globe] -- get English name for geohack return value end elseif datatype == 'quantity' then -- TODO: handle precision parameters if displayformat == 'raw' then return tonumber(value.amount) else local formatNum = require('Module:Formatnum') local number = formatNum.formatNum(value.amount) local unit = mw.ustring.match(value.unit, '(Q%d+)') if unit then number = number .. '&nbsp;' .. entities.formatEntity(unit, params) end return number end elseif datatype == 'monolingualtext' then if displayformat == 'raw' then -- Don't use HTML local byte, char = string.byte, mw.ustring.char local lang = value.language:lower() local tag = {} table.insert(tag, char(0x2068)) -- U+2068: First Strong Isolate (FSI) table.insert(tag, char(0xE0001)) -- U+E0001: Language tag for i = 1, #lang do local b = byte(lang, i) if b >= 0x61 and b <= 0x7A or b == 0x2D or b == 0x5F then -- 'a'..'z', '-', '_' table.insert(tag, char(0xE0000 + b)) -- U+E0020..U+E007E: Tag characters (remaps ASCII only) end end table.insert(tag, value.text) table.insert(tag, char(0xE007F)) -- U+E007F: Cancel Tag table.insert(tag, char(0x2069)) -- U+2069: Pop Directional Isolate (PDI) return table.concat(tag) else return '<bdi lang="' .. value.language .. '">' .. value.text .. '</bdi>' end else return formatError('unknown-datavalue-type', datatype ) end end function p.formatStatementQualifiers(statement, qualifs, params) if not params then params = {} end local qualiftable = getQualifiers(statement, qualifs, params) if not qualiftable then return nil end for i, j in pairs(qualiftable) do local params = params if j.datatype == 'globe-coordinate' then params.displayformat = 'qualifier' end qualiftable[i] = p.formatSnak(j, params) end return linguistic.conj(qualiftable, params.lang or defaultlang) end function p.formatStatement(statement, args) if not statement.type or statement.type ~= 'statement' then return formatError('unknown-claim-type', statement.type) end if not args then args = {} end local lang = args.lang or defaultlang local str = p.formatSnak(statement.mainsnak, args) local qualifs = args.showqualifiers if qualifs then local qualifStr = p.formatStatementQualifiers(statement, qualifs, args) if qualifStr then if args.delimiter then str = str .. args.delimiter .. qualifStr else -- str = str .. linguistic.inparentheses(qualifStr, lang) str = str .. ' (' .. qualifStr .. ')' end end end if args.showdate then -- when `showdate` and `p.chronosort` are both set, date retrieval is performed twice local params local date = dates.getFormattedDate(statement, params) if date then -- str = str .. ' <small>' .. linguistic.inparentheses(date, lang) .. '</small>' str = str .. ' <small>(' .. date ..')</small>' end end if args.showsource and statement.references then local cite = require('Module:Cite') local frame = mw.getCurrentFrame() local sourcestring = '' for i, ref in pairs(statement.references) do if ref.snaks.P248 then for j, source in pairs(ref.snaks.P248) do if not tools.isSpecial(source) then local page if ref.snaks.P304 and not tools.isSpecial(ref.snaks.P304[1]) then page = ref.snaks.P304[1].datavalue.value end local s = cite.citeitem('Q' .. source.datavalue.value['numeric-id'], lang, page) s = frame:extensionTag('ref', s) sourcestring = sourcestring .. s end end elseif ref.snaks.P854 and not tools.isSpecial(ref.snaks.P854[1]) then s = frame:extensionTag('ref', p.getDatavalue(ref.snaks.P854[1])) sourcestring = sourcestring .. s end end str = str .. sourcestring end return str end function p._getDescription(entity, lang) if not entity then return i18n('no description') end if type(entity) == 'string' and (not lang or lang == defaultlang) then return mw.wikibase.description(entity) end entity = mw.wikibase.getEntity(entity) local descriptions = entity.descriptions if not descriptions then return i18n('no description') end local langlist = fb.fblist(lang or defaultlang) -- list of fallback languages if no label in the desired language for i, lg in pairs(langlist) do if descriptions[lg] then return descriptions[lg].value end end return i18n('no description') end -- == FUNCTIONS HANDLING SEVERAL STATEMENTS === function p.stringTable(args) -- find the relevant claims, and formats them as a list of strings -- Get claims local claims = p.getClaims(args) if not claims then return nil end -- Define the formatter function local formatterFun = p.formatStatement if args.type == 'date' then formatterFun = dates.getFormattedDate elseif args.type == 'qualifiers' then formatterFun = formatStatementQualifiers end -- Format claims for i = #claims, 1, -1 do claims[i] = formatterFun(claims[i], args) if not claims[i] then table.remove(claims, i) end end return claims end function p.formatStatements(args)--Format statements and concat them cleanly -- If a value is already set, use it if args.value == '-' then return nil end if args.value then return args.value end -- Obsolete parameters if args.item then args.entity = args.item end local values = p.stringTable(args) -- gets statements, and format each of them if not values then return nil end return linguistic.conj(values, args.lang or defaultlang, args.conjtype) -- concatenate them end -- == FRAME FUNCTIONS == function p.getDescription(frame) -- simple for simple templates like {{Q|}}} local entity = frame.args.entity local lang = frame.args.lang return p._getDescription(entity, lang) end function p.formatStatementsE(frame) local args = {} if frame == mw.getCurrentFrame() then args = frame:getParent().args -- paramètres du modèle appelant (est-ce vraiment une bonne idée ?) for k, v in pairs(frame.args) do args[k] = v end else args = frame end args = removeBlanks(args) return p.formatStatements(args) end function p._getLabel(entity, args) return entities.formatEntity(entity, args) end function p.getLabel(frame) -- simple for simple templates like {{Q|}}} local args = removeBlanks(frame.args) local entity = args.entity or args[1] if string.sub(entity, 1, 10) == 'Property:P' then entity = string.sub(entity, 10) elseif string.sub(entity, 1, 1) ~= 'P' and string.sub(entity, 1, 1) ~= 'Q' or not tonumber(string.sub(entity, 2)) then return i18n('invalid-id') end return entities.formatEntity(entity, args) end function p._wikidataDate(prop, item, params) local claims = p.getClaims{entity = item, property = prop} if not claims then return nil end params = params or {} local vals = {} for i, j in pairs(claims) do local v = dates.getFormattedDate(j, params) if v then table.insert(vals, v) end end return linguistic.conj(vals, params.conjtype or 'or') end function p.wikidataDate(frame) p._wikidataDate(frame.args[property], frame.args[params], frame.args) end function p._main_date(entity) -- First try with P580/P582 local startpoint = p._wikidataDate('P580', entity) local endpoint = p._wikidataDate('P582', entity) if startpoint or endpoint then return (startpoint or '') .. '&#x202F;–&#x2009;' .. (endpoint or '') end -- Else use P585 return p._wikidataDate('P585', entity) end function p.main_date(frame) return p._main_date(frame.args[1]) end -- returns the page id (Q...) of the current page or nothing of the page is not connected to Wikidata function p.pageId(frame) local entity = mw.wikibase.getEntityObject() return entity and entity.id end return p ga2ggpqkipmdb65kqakkj4ry3ejp2pc 10766 10765 2026-08-25T23:38:31Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Wikidata]] 10765 Scribunto text/plain --script that retrieves basic data stored in Wikidata, for the datamodel, see https://www.mediawiki.org/wiki/Extension:Wikibase_Client/Lua local p = {} local linguistic = require('Module:Linguistic') local selectClaims = require('Module:Wikidata/GetClaims') local tools = require('Module:Wikidata/Tools') local entities = require('Module:Wikidata/FormatEntity') local dates = require('Module:Wikidata/Dates') local weblink = require('Module:Weblink') local langSwitch = require('Module:LangSwitch')._langSwitch local fb = require('Module:Fallback') local i18nmessages = mw.loadData('Module:i18n/wikidata') -- Wiki-specific parameters local defaultlang = mw.getCurrentFrame():callParserFunction('Int', 'Lang') local defaultlink = 'wikidata' local function i18n(str, lang) local message = i18nmessages[str] if type(message) == 'string' then return message end return langSwitch(message, lang or defaultlang) end local function formatError(key, text) return error(i18n(key) .. ' ' .. (text or ''), 2) end p.getClaims = selectClaims.getClaims local function removeBlanks(args) for i = #args, 1, -1 do if (args[i] == '') or (args[i] == '-') then table.remove(args, i) end end return args end local function getQualifiers(statement, qualifs, params) if not statement.qualifiers then return nil end if type(qualifs) == 'string' then qualifs = mw.text.split(qualifs, ',') end local vals = {} for i, j in pairs(qualifs) do j = string.upper(j) if statement.qualifiers[j] then local inserted = false if statement.qualifiers[j][1].datatype == 'monolingualtext' then local in_preferred_lang for _, language in pairs(fb.fblist(params.lang or defaultlang)) do for _, snak in pairs(statement.qualifiers[j]) do if isInLanguage(snak, language) then in_preferred_lang = snak break end end if in_preferred_lang then break end end if in_preferred_lang then table.insert(vals, in_preferred_lang) inserted = true end end if not inserted then for _, snak in pairs(statement.qualifiers[j]) do table.insert(vals, snak) end end end end if #vals == 0 then return nil end return vals end function p.formatSnak(snak, params) -- special values: 'novalue' and 'somevalue' local datatype = snak.datatype if snak.snaktype == 'somevalue' then return i18n('somevalue') elseif snak.snaktype == 'novalue' then return i18n('novalue') end local value = snak.datavalue.value -- user-defined displayformat local displayformat = params.displayformat if type(displayformat) == 'function' then return displayformat(snak, params) end if datatype == 'wikibase-item' or datatype == 'wikibase-property' then return entities.formatEntity(tools.getId(snak), params) elseif datatype == 'url' then return weblink.makelink(value, params.text, params.displayformat) elseif datatype == 'math' then return mw.getCurrentFrame():extensionTag('math', value) elseif datatype == 'string' or datatype == 'external-id' or datatype == 'commonsMedia' then if params.urlpattern then local urlpattern = params.urlpattern if type(urlpattern) == 'function' then urlpattern = urlpattern(value) end value = '[' .. mw.ustring.gsub(urlpattern, '$1', value) .. ' ' .. (params.text or value) .. ']' end return value elseif datatype == 'time' then -- format example: +00000001809-02-12T00:00:00Z return dates.formatTimeSnak(snak, params) elseif datatype == 'globe-coordinate' then -- default return a table with latitude, longitude, precision and globe that can be used by another module if displayformat == 'latitude' then return value.latitude elseif displayformat == 'longitude' then return value.longitude elseif displayformat == 'qualifier' then local coord = require('Module:Coordinates') value.globe = require('Module:Wikidata/Globes')[value.globe] value.precision = nil return coord._coord(value) else value.globe = require('Module:Wikidata/Globes')[value.globe] -- get English name for geohack return value end elseif datatype == 'quantity' then -- TODO: handle precision parameters if displayformat == 'raw' then return tonumber(value.amount) else local formatNum = require('Module:Formatnum') local number = formatNum.formatNum(value.amount) local unit = mw.ustring.match(value.unit, '(Q%d+)') if unit then number = number .. '&nbsp;' .. entities.formatEntity(unit, params) end return number end elseif datatype == 'monolingualtext' then if displayformat == 'raw' then -- Don't use HTML local byte, char = string.byte, mw.ustring.char local lang = value.language:lower() local tag = {} table.insert(tag, char(0x2068)) -- U+2068: First Strong Isolate (FSI) table.insert(tag, char(0xE0001)) -- U+E0001: Language tag for i = 1, #lang do local b = byte(lang, i) if b >= 0x61 and b <= 0x7A or b == 0x2D or b == 0x5F then -- 'a'..'z', '-', '_' table.insert(tag, char(0xE0000 + b)) -- U+E0020..U+E007E: Tag characters (remaps ASCII only) end end table.insert(tag, value.text) table.insert(tag, char(0xE007F)) -- U+E007F: Cancel Tag table.insert(tag, char(0x2069)) -- U+2069: Pop Directional Isolate (PDI) return table.concat(tag) else return '<bdi lang="' .. value.language .. '">' .. value.text .. '</bdi>' end else return formatError('unknown-datavalue-type', datatype ) end end function p.formatStatementQualifiers(statement, qualifs, params) if not params then params = {} end local qualiftable = getQualifiers(statement, qualifs, params) if not qualiftable then return nil end for i, j in pairs(qualiftable) do local params = params if j.datatype == 'globe-coordinate' then params.displayformat = 'qualifier' end qualiftable[i] = p.formatSnak(j, params) end return linguistic.conj(qualiftable, params.lang or defaultlang) end function p.formatStatement(statement, args) if not statement.type or statement.type ~= 'statement' then return formatError('unknown-claim-type', statement.type) end if not args then args = {} end local lang = args.lang or defaultlang local str = p.formatSnak(statement.mainsnak, args) local qualifs = args.showqualifiers if qualifs then local qualifStr = p.formatStatementQualifiers(statement, qualifs, args) if qualifStr then if args.delimiter then str = str .. args.delimiter .. qualifStr else -- str = str .. linguistic.inparentheses(qualifStr, lang) str = str .. ' (' .. qualifStr .. ')' end end end if args.showdate then -- when `showdate` and `p.chronosort` are both set, date retrieval is performed twice local params local date = dates.getFormattedDate(statement, params) if date then -- str = str .. ' <small>' .. linguistic.inparentheses(date, lang) .. '</small>' str = str .. ' <small>(' .. date ..')</small>' end end if args.showsource and statement.references then local cite = require('Module:Cite') local frame = mw.getCurrentFrame() local sourcestring = '' for i, ref in pairs(statement.references) do if ref.snaks.P248 then for j, source in pairs(ref.snaks.P248) do if not tools.isSpecial(source) then local page if ref.snaks.P304 and not tools.isSpecial(ref.snaks.P304[1]) then page = ref.snaks.P304[1].datavalue.value end local s = cite.citeitem('Q' .. source.datavalue.value['numeric-id'], lang, page) s = frame:extensionTag('ref', s) sourcestring = sourcestring .. s end end elseif ref.snaks.P854 and not tools.isSpecial(ref.snaks.P854[1]) then s = frame:extensionTag('ref', p.getDatavalue(ref.snaks.P854[1])) sourcestring = sourcestring .. s end end str = str .. sourcestring end return str end function p._getDescription(entity, lang) if not entity then return i18n('no description') end if type(entity) == 'string' and (not lang or lang == defaultlang) then return mw.wikibase.description(entity) end entity = mw.wikibase.getEntity(entity) local descriptions = entity.descriptions if not descriptions then return i18n('no description') end local langlist = fb.fblist(lang or defaultlang) -- list of fallback languages if no label in the desired language for i, lg in pairs(langlist) do if descriptions[lg] then return descriptions[lg].value end end return i18n('no description') end -- == FUNCTIONS HANDLING SEVERAL STATEMENTS === function p.stringTable(args) -- find the relevant claims, and formats them as a list of strings -- Get claims local claims = p.getClaims(args) if not claims then return nil end -- Define the formatter function local formatterFun = p.formatStatement if args.type == 'date' then formatterFun = dates.getFormattedDate elseif args.type == 'qualifiers' then formatterFun = formatStatementQualifiers end -- Format claims for i = #claims, 1, -1 do claims[i] = formatterFun(claims[i], args) if not claims[i] then table.remove(claims, i) end end return claims end function p.formatStatements(args)--Format statements and concat them cleanly -- If a value is already set, use it if args.value == '-' then return nil end if args.value then return args.value end -- Obsolete parameters if args.item then args.entity = args.item end local values = p.stringTable(args) -- gets statements, and format each of them if not values then return nil end return linguistic.conj(values, args.lang or defaultlang, args.conjtype) -- concatenate them end -- == FRAME FUNCTIONS == function p.getDescription(frame) -- simple for simple templates like {{Q|}}} local entity = frame.args.entity local lang = frame.args.lang return p._getDescription(entity, lang) end function p.formatStatementsE(frame) local args = {} if frame == mw.getCurrentFrame() then args = frame:getParent().args -- paramètres du modèle appelant (est-ce vraiment une bonne idée ?) for k, v in pairs(frame.args) do args[k] = v end else args = frame end args = removeBlanks(args) return p.formatStatements(args) end function p._getLabel(entity, args) return entities.formatEntity(entity, args) end function p.getLabel(frame) -- simple for simple templates like {{Q|}}} local args = removeBlanks(frame.args) local entity = args.entity or args[1] if string.sub(entity, 1, 10) == 'Property:P' then entity = string.sub(entity, 10) elseif string.sub(entity, 1, 1) ~= 'P' and string.sub(entity, 1, 1) ~= 'Q' or not tonumber(string.sub(entity, 2)) then return i18n('invalid-id') end return entities.formatEntity(entity, args) end function p._wikidataDate(prop, item, params) local claims = p.getClaims{entity = item, property = prop} if not claims then return nil end params = params or {} local vals = {} for i, j in pairs(claims) do local v = dates.getFormattedDate(j, params) if v then table.insert(vals, v) end end return linguistic.conj(vals, params.conjtype or 'or') end function p.wikidataDate(frame) p._wikidataDate(frame.args[property], frame.args[params], frame.args) end function p._main_date(entity) -- First try with P580/P582 local startpoint = p._wikidataDate('P580', entity) local endpoint = p._wikidataDate('P582', entity) if startpoint or endpoint then return (startpoint or '') .. '&#x202F;–&#x2009;' .. (endpoint or '') end -- Else use P585 return p._wikidataDate('P585', entity) end function p.main_date(frame) return p._main_date(frame.args[1]) end -- returns the page id (Q...) of the current page or nothing of the page is not connected to Wikidata function p.pageId(frame) local entity = mw.wikibase.getEntityObject() return entity and entity.id end return p ga2ggpqkipmdb65kqakkj4ry3ejp2pc Module:Wikidata/GetClaims 828 1360 10767 2019-06-20T20:26:21Z commons>Verdy p 0 Undo revision 355512581 by [[Special:Contributions/Verdy p|Verdy p]] ([[User talk:Verdy p|talk]]) still not 10767 Scribunto text/plain local p = {} local datequalifiers = {'P585', 'P571', 'P580', 'P582'} local tools = require "Module:Wikidata/Tools" --local datemod = require "Module:Date complexe" local function notSpecial(claim) return tools.isValue(claim.mainsnak) end function p.hastargetvalue(claim, targets) -- retourne true si la valeur est dans la liste des target, ou si c'est une valeur spéciale filtrée séparément par excludespecial local id = tools.getMainId(claim) local targets = tools.splitStr(targets) return tools.isHere(targets, id) or tools.isSpecial(claim.mainsnak) end local function excludevalues(claim, values) -- true si la valeur n'est pas dans la liste, ou si c'est une valeur spéciale (filtrée à part par excludespecial) return tools.isSpecial(claim.mainsnak) or not ( p.hastargetvalue(claim, values) ) end local function bestranked(claims) if not claims then return nil end local preferred, normal = {}, {} for i, j in pairs(claims) do if j.rank == 'preferred' then table.insert(preferred, j) elseif j.rank == 'normal' then table.insert(normal, j) end end if #preferred > 0 then return preferred else return normal end end local function withrank(claims, target) if target == 'best' then return bestranked(claims) end local newclaims = {} for pos, claim in pairs(claims) do if target == 'valid' then if claim.rank ~= 'deprecated' then table.insert(newclaims, claim) end elseif claim.rank == target then table.insert(newclaims, claim) end end return newclaims end function p.hasqualifier(claim, acceptedqualifs, acceptedvals, excludequalifiervalues) local claimqualifs = claim.qualifiers if (not claimqualifs) then return false end acceptedqualifs = tools.splitStr(acceptedqualifs) acceptedvals = tools.splitStr( acceptedvals) local function ok(qualif) -- vérification pour un qualificatif individuel if not claimqualifs[qualif] then return false end if not (acceptedvals) then -- si aucune valeur spécifique n'est demandée, OK return true end for i, wanted in pairs(acceptedvals) do for j, actual in pairs(claimqualifs[qualif]) do if tools.getId(actual) == wanted then return true end end end end for i, qualif in pairs(acceptedqualifs) do if ok(qualif) then return true end end return false end local function hassource(claim, targetsource, sourceproperty) sourceproperty = sourceproperty or 'P248' if not claim.references or not claim.references[sourceproperty] then return false end if not targetsource then -- si toutes les sources sont valides, du moment qu'elles utilisent sourceproperty return true end targetsource = tools.splitStr(targetsource) for _, source in pairs(claim.references[sourceproperty]) do local s = tools.getId(source) for i, target in pairs(targetsource) do if s == target then return true end end end return true end local function excludequalifier(claim, qualifier, qualifiervalues) return not p.hasqualifier(claim, qualifier, qualifiervalues) end local function hasdate(claim) local claimqualifs = claim.qualifiers if not claimqualifs then return false end for _, qualif in pairs(claimqualifs) do if claimqualifs[qualif] and claimqualifs[qualif][1].snaktype == 'value' then return true end end return false end local function haslink(claim, site, lang) if not(tools.isValue(claim.mainsnak)) then -- ne pas supprimer les valeurs spéciales, il y a une fonction dédiée pour ça return true end local id = tools.getMainId(claim) local link = tools.siteLink(id, site, lang) if link then return true end end local function isinlanguage(claim, lang) -- ne fonctionne que pour les monolingualtext / étendre aux autres types en utilisant les qualifiers ? local snak = claim.mainsnak if tools.isSpecial(snak) then return false end if snak.datavalue.type == 'monolingualtext' and snak.datavalue.value.language == lang then return true end return false end local function firstvals(claims, numval) -- retourn les numval premières valeurs de la table claims local numval = tonumber(numval) or 0 -- raise a error if numval is not a positive integer ? if not claims then return nil end while (#claims > numval) do table.remove(claims) end return claims end local function valinQualif(claim, qualifs) local claimqualifs = claim.qualifiers if not claimqualifs then return nil end for i, qualif in pairs(qualifs) do local vals = claimqualifs[qualif] if vals and tools.isValue(vals[1]) then return tools.getValue(vals[1]).time end end end local function chronosort(claims, inverted) table.sort( claims, function(a,b) local timeA = valinQualif(a, datequalifiers) or '' local timeB = valinQualif(b, datequalifiers) or '' if inverted then return timeA > timeB -- marche sauf pour les dates < 10 000 av-JC utiliser datemod.before produit un bug else return timeB > timeA end end ) return claims end local function atDate(claim, mydate) local newclaims = {} local mindate = valinQualif(claim, {'P580'}) local maxdate = valinQualif(claim, {'P582'}) if datemod.before(mydate, mindate) and datemod.before(maxdate, mydate) then return true end end local function check(claim, condition) if type(condition) == 'function' then -- cas standard return condition(claim) end local msg = "args.condition should be a function" return error(msg) end function p.sortclaims(claims, sorttype) if not claims then return nil end if sorttype == 'chronological' then return chronosort(claims) elseif sorttype == 'inverted' then return chronosort(claims, true) elseif type(sorttype) == 'function' then table.sort(claims, sorttype) return claims end return claims end function p.filterClaims(claims, args) --retire de la tables de claims celles qui sont éliminés par un des filters de la table des filters local function filter(condition, filterfunction, funargs) if not args[condition] then return end for i = #claims, 1, -1 do if not( filterfunction(claims[i], args[funargs[1]], args[funargs[2]], args[funargs[3]]) ) then table.remove(claims, i) end end end filter('targetvalue', p.hastargetvalue, {'targetvalue'} ) filter('isinlang', isinlanguage, {'isinlang'} ) filter('atdate', atDate, {'atdate'} ) filter('qualifier', p.hasqualifier, {'qualifier', 'qualifiervalue'} ) filter('excludequalifier', excludequalifier, {'excludequalifier', 'excludequalifiervalue'} ) filter('source', hassource, {'source', 'sourceproperty'} ) filter('withdate', hasdate, {} ) filter('excludespecial', notSpecial, {} ) filter('excludevalues', excludevalues, {'excludevalues'}) filter('withlink', haslink, {'withlink', 'linklang'} ) filter('condition', check, {'condition'}) claims = withrank(claims, args.rank or 'best') if args.sorttype then claims = p.sortclaims(claims, args.sorttype) end if #claims == 0 then return nil end if args.numval then claims = firstvals(claims, args.numval) end return claims end function p.loadEntity(entity, cache) if type(entity) ~= 'table' then if cache then if not cache[entity] then cache[entity] = mw.wikibase.getEntity(entity) mw.log("cached") end return cache[entity] else return mw.wikibase.getEntity(entity) end else return entity end end function p.getClaims( args ) -- returns a table of the claims matching some conditions given in args if args.claims then -- if claims have already been set, return them return args.claims end local properties = tools.splitStr(args.property) if not properties then return error( 'property-param-not-provided' ) end --Get entity local entity = args.entity entity = p.loadEntity(args.entity, args.cache) if (not entity) or (not entity.claims) then return nil end local claims = {} for i, prop in pairs(properties) do prop = string.upper(prop) for j, claim in pairs(entity.claims[prop] or {}) do table.insert(claims, claim) end end if (#claims == 0) then return nil end return p.filterClaims(claims, args) end return p dsgny1qywczu0egn7rhuc8gdrkyeela 10768 10767 2026-08-25T23:38:31Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Wikidata/GetClaims]] 10767 Scribunto text/plain local p = {} local datequalifiers = {'P585', 'P571', 'P580', 'P582'} local tools = require "Module:Wikidata/Tools" --local datemod = require "Module:Date complexe" local function notSpecial(claim) return tools.isValue(claim.mainsnak) end function p.hastargetvalue(claim, targets) -- retourne true si la valeur est dans la liste des target, ou si c'est une valeur spéciale filtrée séparément par excludespecial local id = tools.getMainId(claim) local targets = tools.splitStr(targets) return tools.isHere(targets, id) or tools.isSpecial(claim.mainsnak) end local function excludevalues(claim, values) -- true si la valeur n'est pas dans la liste, ou si c'est une valeur spéciale (filtrée à part par excludespecial) return tools.isSpecial(claim.mainsnak) or not ( p.hastargetvalue(claim, values) ) end local function bestranked(claims) if not claims then return nil end local preferred, normal = {}, {} for i, j in pairs(claims) do if j.rank == 'preferred' then table.insert(preferred, j) elseif j.rank == 'normal' then table.insert(normal, j) end end if #preferred > 0 then return preferred else return normal end end local function withrank(claims, target) if target == 'best' then return bestranked(claims) end local newclaims = {} for pos, claim in pairs(claims) do if target == 'valid' then if claim.rank ~= 'deprecated' then table.insert(newclaims, claim) end elseif claim.rank == target then table.insert(newclaims, claim) end end return newclaims end function p.hasqualifier(claim, acceptedqualifs, acceptedvals, excludequalifiervalues) local claimqualifs = claim.qualifiers if (not claimqualifs) then return false end acceptedqualifs = tools.splitStr(acceptedqualifs) acceptedvals = tools.splitStr( acceptedvals) local function ok(qualif) -- vérification pour un qualificatif individuel if not claimqualifs[qualif] then return false end if not (acceptedvals) then -- si aucune valeur spécifique n'est demandée, OK return true end for i, wanted in pairs(acceptedvals) do for j, actual in pairs(claimqualifs[qualif]) do if tools.getId(actual) == wanted then return true end end end end for i, qualif in pairs(acceptedqualifs) do if ok(qualif) then return true end end return false end local function hassource(claim, targetsource, sourceproperty) sourceproperty = sourceproperty or 'P248' if not claim.references or not claim.references[sourceproperty] then return false end if not targetsource then -- si toutes les sources sont valides, du moment qu'elles utilisent sourceproperty return true end targetsource = tools.splitStr(targetsource) for _, source in pairs(claim.references[sourceproperty]) do local s = tools.getId(source) for i, target in pairs(targetsource) do if s == target then return true end end end return true end local function excludequalifier(claim, qualifier, qualifiervalues) return not p.hasqualifier(claim, qualifier, qualifiervalues) end local function hasdate(claim) local claimqualifs = claim.qualifiers if not claimqualifs then return false end for _, qualif in pairs(claimqualifs) do if claimqualifs[qualif] and claimqualifs[qualif][1].snaktype == 'value' then return true end end return false end local function haslink(claim, site, lang) if not(tools.isValue(claim.mainsnak)) then -- ne pas supprimer les valeurs spéciales, il y a une fonction dédiée pour ça return true end local id = tools.getMainId(claim) local link = tools.siteLink(id, site, lang) if link then return true end end local function isinlanguage(claim, lang) -- ne fonctionne que pour les monolingualtext / étendre aux autres types en utilisant les qualifiers ? local snak = claim.mainsnak if tools.isSpecial(snak) then return false end if snak.datavalue.type == 'monolingualtext' and snak.datavalue.value.language == lang then return true end return false end local function firstvals(claims, numval) -- retourn les numval premières valeurs de la table claims local numval = tonumber(numval) or 0 -- raise a error if numval is not a positive integer ? if not claims then return nil end while (#claims > numval) do table.remove(claims) end return claims end local function valinQualif(claim, qualifs) local claimqualifs = claim.qualifiers if not claimqualifs then return nil end for i, qualif in pairs(qualifs) do local vals = claimqualifs[qualif] if vals and tools.isValue(vals[1]) then return tools.getValue(vals[1]).time end end end local function chronosort(claims, inverted) table.sort( claims, function(a,b) local timeA = valinQualif(a, datequalifiers) or '' local timeB = valinQualif(b, datequalifiers) or '' if inverted then return timeA > timeB -- marche sauf pour les dates < 10 000 av-JC utiliser datemod.before produit un bug else return timeB > timeA end end ) return claims end local function atDate(claim, mydate) local newclaims = {} local mindate = valinQualif(claim, {'P580'}) local maxdate = valinQualif(claim, {'P582'}) if datemod.before(mydate, mindate) and datemod.before(maxdate, mydate) then return true end end local function check(claim, condition) if type(condition) == 'function' then -- cas standard return condition(claim) end local msg = "args.condition should be a function" return error(msg) end function p.sortclaims(claims, sorttype) if not claims then return nil end if sorttype == 'chronological' then return chronosort(claims) elseif sorttype == 'inverted' then return chronosort(claims, true) elseif type(sorttype) == 'function' then table.sort(claims, sorttype) return claims end return claims end function p.filterClaims(claims, args) --retire de la tables de claims celles qui sont éliminés par un des filters de la table des filters local function filter(condition, filterfunction, funargs) if not args[condition] then return end for i = #claims, 1, -1 do if not( filterfunction(claims[i], args[funargs[1]], args[funargs[2]], args[funargs[3]]) ) then table.remove(claims, i) end end end filter('targetvalue', p.hastargetvalue, {'targetvalue'} ) filter('isinlang', isinlanguage, {'isinlang'} ) filter('atdate', atDate, {'atdate'} ) filter('qualifier', p.hasqualifier, {'qualifier', 'qualifiervalue'} ) filter('excludequalifier', excludequalifier, {'excludequalifier', 'excludequalifiervalue'} ) filter('source', hassource, {'source', 'sourceproperty'} ) filter('withdate', hasdate, {} ) filter('excludespecial', notSpecial, {} ) filter('excludevalues', excludevalues, {'excludevalues'}) filter('withlink', haslink, {'withlink', 'linklang'} ) filter('condition', check, {'condition'}) claims = withrank(claims, args.rank or 'best') if args.sorttype then claims = p.sortclaims(claims, args.sorttype) end if #claims == 0 then return nil end if args.numval then claims = firstvals(claims, args.numval) end return claims end function p.loadEntity(entity, cache) if type(entity) ~= 'table' then if cache then if not cache[entity] then cache[entity] = mw.wikibase.getEntity(entity) mw.log("cached") end return cache[entity] else return mw.wikibase.getEntity(entity) end else return entity end end function p.getClaims( args ) -- returns a table of the claims matching some conditions given in args if args.claims then -- if claims have already been set, return them return args.claims end local properties = tools.splitStr(args.property) if not properties then return error( 'property-param-not-provided' ) end --Get entity local entity = args.entity entity = p.loadEntity(args.entity, args.cache) if (not entity) or (not entity.claims) then return nil end local claims = {} for i, prop in pairs(properties) do prop = string.upper(prop) for j, claim in pairs(entity.claims[prop] or {}) do table.insert(claims, claim) end end if (#claims == 0) then return nil end return p.filterClaims(claims, args) end return p dsgny1qywczu0egn7rhuc8gdrkyeela Module:Wikidata/Tools 828 1361 10769 2019-07-16T11:23:04Z commons>4nn1l2 0 Changed protection level for "[[Module:Wikidata/Tools]]": downgraded protection level per [[Special:Permalink/357548402|consensus]] ([Move=Allow only template editors and administrators] (indefinite) [Edit=Allow only template editors and administrators] (indefinite)) 10769 Scribunto text/plain --Fonctions élémentaires de gestion des snaks Wikidata local p = {} p.i18n = require "Module:I18n/wikidata" local defaultlang = mw.getCurrentFrame():callParserFunction("int", "lang") function p.translate(str, rep1, rep2) str = p.i18n[str] or str if rep1 then str = str:gsub('$1', rep1) end if rep2 then str = str:gsub('$2', rep2) end return str end function p.snaktype(snak) return snak.snaktype end function p.isSpecial(snak) return (snak.snaktype ~= 'value') end function p.isValue(snak) return (snak.snaktype == 'value') end function p.getId(snak) if p.isValue(snak) and (snak.datatype == 'wikibase-item') then return 'Q' .. snak.datavalue.value['numeric-id'] elseif p.isValue(snak) and (snak.datatype == 'wikibase-property') then return 'P' .. snak.datavalue.value['numeric-id'] end end function p.getNumericId(snak) if p.isValue(snak) then return snak.datavalue.value['numeric-id'] end end function p.getMainId(claim) return p.getId(claim.mainsnak) end function p.EntityId(entity) if type(entity) == 'string' then return entity end return entity.id end function p.getValue(snak) if (snak.snaktype ~= "value") then return nil end return snak.datavalue.value end function p.formatError( key ) return error(p.i18n[key] or key) end function p.getEntity( val ) if type(val) == 'table' then return val end if val == '-' then return nil end return mw.wikibase.getEntityObject(val) end function p.splitStr(val) -- transforme en table les chaînes venant du Wikitexte qui utilisent des virgules de séparatin if type(val) == 'string' then val = mw.text.split(val, ",") end return val end function p.isHere(searchset, val) for i, j in pairs(searchset) do if val == j then return true end end return false end local function wikidataLink(entity) local name =':d:' if type(entity) == 'string' then if entity:match("P[0-9+]") then entity = "Property:" .. entity end return name .. entity elseif type(entity) == 'table' then if entity["type"] == "property" then name = ":d:Property:" end return name .. entity.id elseif type(entity) == nil then return formatError('entity-not-found') end end function p.siteLink(entity, project, lang) local id = entity if type(id) == "table" then id = id.id end if (not id) then return nil end -- default: directly return link to the current wiki if (not project) or (mw.text.trim(project) == "") then return mw.wikibase.sitelink(id) end -- cleanup up paramaters project = project:lower() lang = lang or defaultlang -- special case: link to wikidata if project == 'wikidata' then return ":d:" .. id end -- link to other projects local projects = { -- parametername = {prefix in wikidata, prefix in wikipedia, is multilingual} wikipedia = {'wiki', nil, true}, -- wikipedia commons = {'commonswiki', 'c', false}, commonswiki = {'commonswiki', 'c', false}, wikiquote = {'wikiquote', 'wikiquote', true}, wikivoyage = {'wikivoyage', 'wikivoyage', true}, wikibooks = {'wikibooks', 'wikibooks', true}, wikinews = {'wikinews', 'wikinews', true}, -- meta -- mediawiki } local projectdata = projects[project] if not projectdata then return p.formatError('invalid project code: ' .. (project or '?')) end local linkcode = projectdata[1] local prefix = projectdata[2] local multilang = projectdata[3] if multilang then linkcode = lang .. linkcode end entity = p.getEntity(entity) local link = entity:getSitelink(linkcode) if not link then return nil end link = ':' .. link if prefix then link = ':' .. prefix .. link end if multilang then link = ':' .. lang .. link end return link end function p.hasqualifier(claim, acceptedqualifs, acceptedvals, excludequalifiervalues) local claimqualifs = claim.qualifiers if (not claimqualifs) then return false end acceptedqualifs = p.splitStr(acceptedqualifs) acceptedvals = p.splitStr( acceptedvals) local function ok(qualif) -- vérification pour un qualificatif individuel if not claimqualifs[qualif] then return false end if not (acceptedvals) then -- si aucune valeur spécifique n'est demandée, OK return true end for i, wanted in pairs(acceptedvals) do for j, actual in pairs(claimqualifs[qualif]) do if p.getId(actual) == wanted then return true end end end end for i, qualif in pairs(acceptedqualifs) do if ok(qualif) then return true end end return false end -- add new values to a list, avoiding duplicates function p.addnewvalues(old, new) if not new then return old end for _, j in pairs(new) do if not p.isHere(old, j) then table.insert(old, j) end end return old end return p 87pvikbk2og4nes5gpjta2a2rbd1jqm 10770 10769 2026-08-25T23:38:32Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Wikidata/Tools]] 10769 Scribunto text/plain --Fonctions élémentaires de gestion des snaks Wikidata local p = {} p.i18n = require "Module:I18n/wikidata" local defaultlang = mw.getCurrentFrame():callParserFunction("int", "lang") function p.translate(str, rep1, rep2) str = p.i18n[str] or str if rep1 then str = str:gsub('$1', rep1) end if rep2 then str = str:gsub('$2', rep2) end return str end function p.snaktype(snak) return snak.snaktype end function p.isSpecial(snak) return (snak.snaktype ~= 'value') end function p.isValue(snak) return (snak.snaktype == 'value') end function p.getId(snak) if p.isValue(snak) and (snak.datatype == 'wikibase-item') then return 'Q' .. snak.datavalue.value['numeric-id'] elseif p.isValue(snak) and (snak.datatype == 'wikibase-property') then return 'P' .. snak.datavalue.value['numeric-id'] end end function p.getNumericId(snak) if p.isValue(snak) then return snak.datavalue.value['numeric-id'] end end function p.getMainId(claim) return p.getId(claim.mainsnak) end function p.EntityId(entity) if type(entity) == 'string' then return entity end return entity.id end function p.getValue(snak) if (snak.snaktype ~= "value") then return nil end return snak.datavalue.value end function p.formatError( key ) return error(p.i18n[key] or key) end function p.getEntity( val ) if type(val) == 'table' then return val end if val == '-' then return nil end return mw.wikibase.getEntityObject(val) end function p.splitStr(val) -- transforme en table les chaînes venant du Wikitexte qui utilisent des virgules de séparatin if type(val) == 'string' then val = mw.text.split(val, ",") end return val end function p.isHere(searchset, val) for i, j in pairs(searchset) do if val == j then return true end end return false end local function wikidataLink(entity) local name =':d:' if type(entity) == 'string' then if entity:match("P[0-9+]") then entity = "Property:" .. entity end return name .. entity elseif type(entity) == 'table' then if entity["type"] == "property" then name = ":d:Property:" end return name .. entity.id elseif type(entity) == nil then return formatError('entity-not-found') end end function p.siteLink(entity, project, lang) local id = entity if type(id) == "table" then id = id.id end if (not id) then return nil end -- default: directly return link to the current wiki if (not project) or (mw.text.trim(project) == "") then return mw.wikibase.sitelink(id) end -- cleanup up paramaters project = project:lower() lang = lang or defaultlang -- special case: link to wikidata if project == 'wikidata' then return ":d:" .. id end -- link to other projects local projects = { -- parametername = {prefix in wikidata, prefix in wikipedia, is multilingual} wikipedia = {'wiki', nil, true}, -- wikipedia commons = {'commonswiki', 'c', false}, commonswiki = {'commonswiki', 'c', false}, wikiquote = {'wikiquote', 'wikiquote', true}, wikivoyage = {'wikivoyage', 'wikivoyage', true}, wikibooks = {'wikibooks', 'wikibooks', true}, wikinews = {'wikinews', 'wikinews', true}, -- meta -- mediawiki } local projectdata = projects[project] if not projectdata then return p.formatError('invalid project code: ' .. (project or '?')) end local linkcode = projectdata[1] local prefix = projectdata[2] local multilang = projectdata[3] if multilang then linkcode = lang .. linkcode end entity = p.getEntity(entity) local link = entity:getSitelink(linkcode) if not link then return nil end link = ':' .. link if prefix then link = ':' .. prefix .. link end if multilang then link = ':' .. lang .. link end return link end function p.hasqualifier(claim, acceptedqualifs, acceptedvals, excludequalifiervalues) local claimqualifs = claim.qualifiers if (not claimqualifs) then return false end acceptedqualifs = p.splitStr(acceptedqualifs) acceptedvals = p.splitStr( acceptedvals) local function ok(qualif) -- vérification pour un qualificatif individuel if not claimqualifs[qualif] then return false end if not (acceptedvals) then -- si aucune valeur spécifique n'est demandée, OK return true end for i, wanted in pairs(acceptedvals) do for j, actual in pairs(claimqualifs[qualif]) do if p.getId(actual) == wanted then return true end end end end for i, qualif in pairs(acceptedqualifs) do if ok(qualif) then return true end end return false end -- add new values to a list, avoiding duplicates function p.addnewvalues(old, new) if not new then return old end for _, j in pairs(new) do if not p.isHere(old, j) then table.insert(old, j) end end return old end return p 87pvikbk2og4nes5gpjta2a2rbd1jqm Module:I18n/wikidata 828 1362 10771 2024-06-07T12:12:42Z commons>Ebrahim 0 add Persian translation 10771 Scribunto text/plain return { ["trackingcat"] = "Page using data from Wikidata", -- DON'T TRANSLATE -- SPECIAL VALUES ["novalue"] = { ar = "غير قابل للتطبيق", cs = "nelze použít", de = "nicht anwendbar", en = "not applicable", fa = "غیر قابل اطلاق", fr = "pas applicable", mk = "неприменливо", nb = "gjelder ikke", nl = "niet van toepassing", nn = "gjeld ikkje", ['pt-br'] = "não aplicável", ['zh-hans'] = "不可用", ['zh-hant'] = "不可用", }, ["somevalue"] = { ar = "غير معروف", cs = "neznámé", de = "unbekannt", en = "unknown", fa = "ناشناخته", fr = "inconnu", mk = "непознато", nb = "ukjent", nl = "onbekend", nn = "ukjent", ['pt-br'] = "desconhecido", ['zh-hans'] = "未知", ['zh-hant'] = "不明", }, -- MISSING DATA ["no-label"] = { ar = "بدون تسمية", cs = "bez štítku", de = "keine Bezeichnung", en = "no label", fa = "بدون برچسب", fr = "pas de libellé", mk = "нема натпис", nb = "ingen etikett", nl = "geen label", nn = "ingen etikett", ['pt-br'] = "sem rótulo", ['zh-hans'] = "无标签", ['zh-hant'] = "無標籤", }, ["no description"] = { ar = "بدون وصف", cs = "bez popisu", de = "keine Beschreibung", en = "no description", fa = "بدون توضیح", fr = "pas de description", mk = "нема опис", nb = "ingen beskrivelse", nl = "geen omschrijving", nn = "inga skildring", ['pt-br'] = "sem descrição", ['zh-hans'] = "无描述", ['zh-hant'] = "無描述", }, -- ERRORS ["property-param-not-provided"] = { -- MERGE WITH qualifier-param-not-provided ar = "وسائط الخاصية غير موجودة", cs = "chybí parametr „property“", de = "Parameter 'property' fehlt", en = "'property' parameter missing", fa = "فقدان پارامتر 'ویژگی'", fr = "paramètre 'property' manquant", mk = "Недостасува параметарот „property“", nb = "parameteren 'property' mangler", nl = "parameter 'property' ontbreekt", nn = "parameteren 'property' manglar", ['pt-br'] = "parâmetro 'property' em falta", ['zh-hans'] = "缺少'property'参数", ['zh-hant'] = "缺少'property'參數", }, ["qualifier-param-not-provided"] = { ar = "وسائط التصانيف غير موجودة", cs = "chybí parametr „qualifier“", de = "Parameter 'qualifier' fehlt", en = "'qualifier' parameter missing", fa = "فقدان پارامتر 'توصیف‌کننده'", fr = "paramètre 'qualifier' manquant", mk = "Недостасува параметарот „qualifier“", nb = "parameteren 'qualifier' mangler", nl = "parameter 'qualifier' ontbreekt", nn = "parameteren 'qualifier' manglar", ['pt-br'] = "parâmetro 'qualificador' em falta", ['zh-hans'] = "缺少'qualifier'参数", ['zh-hant'] = "缺少'qualifier'參數", }, ["entity-not-found"] = { ar = "بدون إدخال", cs = "entita nenalezena", de = "Objekt nicht gefunden", en = "entity not found", fa = "موجودیت یافت نشده", fr = "entité non trouvée", mk = "единицата не е пронајдена", nb = "entitet ikke funnet", nl = "entiteit niet gevonden", nn = "entiteten vart ikkje funnen", ['pt-br'] = "entidade não encontrada", ['zh-hans'] = "找不到实体", ['zh-hant'] = "查無實體", }, ["unknown-claim-type"] = { ar = "نوع الإدعاء غير معروف", cs = "neznámý typ tvrzení", de = "unbekannter Abfragetyp", en = "unknown claim type", fa = "نوع ادعای ناشناخته", fr = "type d'affirmation inconnu", mk = "непознат тип на тврдење", nb = "ukjent påstandstype", nl = "onbekend type claim", nn = "ukjend påstandstype", ['pt-br'] = "tipo de afirmação desconhecida", ['zh-hans'] = "未知的声称类型", ['zh-hant'] = "不明的主張類型", }, ["unknown-snak-type"] = { ar = "نوع الكلام غير معروف", cs = "neznámý typ snaku", de = "unbekannter ''snak''-Typ", en = "unknown snak type", fa = "نوع snak ناشناخته", fr = "type de snak inconnu", mk = "непознат тип на спојница", nb = "ukjent snaktype", nl = "onbekend snaktype", nn = "ukjend snaktype", ['pt-br'] = "tipo de conector (''snak'') desconhecido", ['zh-hans'] = "未知的snak类型", ['zh-hant'] = "不明的snak類型", }, ["unknown-datavalue-type"] = { ar = "نوع قيم البيانات غير معروف.", cs = "neznámý typ datové hodnoty", de = "unbekannter Datentyp.", en = "unknown datavalue type.", fa = "نوع datavalue ناشناخته.", fr = "type de donnée inconnu.", mk = "непознат тип на податочна вредност", nb = "ukjent dataverditype.", nl = "onbekend type gegevenswaarde.", nn = "ukjend dataverditype.", ['pt-br'] = "tipo de dado desconhecido.", ['zh-hans'] = "未知的数据值类型。", ['zh-hant'] = "不明的資料值類型。", }, ["unknown-entity-type"] = { ar = "نوع الإدخال غير معروف", cs = "neznámý typ entity", de = "unbekannter Objekttyp", en = "unknown entity type", fa = "نوع موجودیت ناشناخته", fr = "type d'entité inconnu", mk = "непознат тип на единица", nb = "ukjent entitetstype", nl = "onbekend type entiteit", nn = "ukjend entitetstype", ['pt-br'] = "tipo de entidade desconhecida", ['zh-hans'] = "未知的实体类型", ['zh-hant'] = "不明的實體類型", }, ["invalid-id"] = { ar = "المُعرف غير صحيح", cs = "neplatné ID", de = "ungültige ID", en = "invalid ID", fa = "شناسهٔ نامعتبر", fr = "identifiant inconnu", mk = "неважечка назнака", nb = "ugyldig ID", nl = "onbekend identificatienummer", nn = "ugyldig ID", ['pt-br'] = "identificador inválido", ['zh-hans'] = "无效ID", ['zh-hant'] = "無效ID", }, } q1u7wdi6uv50emqpctfj5z1o91lrabc 10772 10771 2026-08-25T23:38:32Z RAPTOR7762 18 1 revision imported from [[:commons:Module:I18n/wikidata]] 10771 Scribunto text/plain return { ["trackingcat"] = "Page using data from Wikidata", -- DON'T TRANSLATE -- SPECIAL VALUES ["novalue"] = { ar = "غير قابل للتطبيق", cs = "nelze použít", de = "nicht anwendbar", en = "not applicable", fa = "غیر قابل اطلاق", fr = "pas applicable", mk = "неприменливо", nb = "gjelder ikke", nl = "niet van toepassing", nn = "gjeld ikkje", ['pt-br'] = "não aplicável", ['zh-hans'] = "不可用", ['zh-hant'] = "不可用", }, ["somevalue"] = { ar = "غير معروف", cs = "neznámé", de = "unbekannt", en = "unknown", fa = "ناشناخته", fr = "inconnu", mk = "непознато", nb = "ukjent", nl = "onbekend", nn = "ukjent", ['pt-br'] = "desconhecido", ['zh-hans'] = "未知", ['zh-hant'] = "不明", }, -- MISSING DATA ["no-label"] = { ar = "بدون تسمية", cs = "bez štítku", de = "keine Bezeichnung", en = "no label", fa = "بدون برچسب", fr = "pas de libellé", mk = "нема натпис", nb = "ingen etikett", nl = "geen label", nn = "ingen etikett", ['pt-br'] = "sem rótulo", ['zh-hans'] = "无标签", ['zh-hant'] = "無標籤", }, ["no description"] = { ar = "بدون وصف", cs = "bez popisu", de = "keine Beschreibung", en = "no description", fa = "بدون توضیح", fr = "pas de description", mk = "нема опис", nb = "ingen beskrivelse", nl = "geen omschrijving", nn = "inga skildring", ['pt-br'] = "sem descrição", ['zh-hans'] = "无描述", ['zh-hant'] = "無描述", }, -- ERRORS ["property-param-not-provided"] = { -- MERGE WITH qualifier-param-not-provided ar = "وسائط الخاصية غير موجودة", cs = "chybí parametr „property“", de = "Parameter 'property' fehlt", en = "'property' parameter missing", fa = "فقدان پارامتر 'ویژگی'", fr = "paramètre 'property' manquant", mk = "Недостасува параметарот „property“", nb = "parameteren 'property' mangler", nl = "parameter 'property' ontbreekt", nn = "parameteren 'property' manglar", ['pt-br'] = "parâmetro 'property' em falta", ['zh-hans'] = "缺少'property'参数", ['zh-hant'] = "缺少'property'參數", }, ["qualifier-param-not-provided"] = { ar = "وسائط التصانيف غير موجودة", cs = "chybí parametr „qualifier“", de = "Parameter 'qualifier' fehlt", en = "'qualifier' parameter missing", fa = "فقدان پارامتر 'توصیف‌کننده'", fr = "paramètre 'qualifier' manquant", mk = "Недостасува параметарот „qualifier“", nb = "parameteren 'qualifier' mangler", nl = "parameter 'qualifier' ontbreekt", nn = "parameteren 'qualifier' manglar", ['pt-br'] = "parâmetro 'qualificador' em falta", ['zh-hans'] = "缺少'qualifier'参数", ['zh-hant'] = "缺少'qualifier'參數", }, ["entity-not-found"] = { ar = "بدون إدخال", cs = "entita nenalezena", de = "Objekt nicht gefunden", en = "entity not found", fa = "موجودیت یافت نشده", fr = "entité non trouvée", mk = "единицата не е пронајдена", nb = "entitet ikke funnet", nl = "entiteit niet gevonden", nn = "entiteten vart ikkje funnen", ['pt-br'] = "entidade não encontrada", ['zh-hans'] = "找不到实体", ['zh-hant'] = "查無實體", }, ["unknown-claim-type"] = { ar = "نوع الإدعاء غير معروف", cs = "neznámý typ tvrzení", de = "unbekannter Abfragetyp", en = "unknown claim type", fa = "نوع ادعای ناشناخته", fr = "type d'affirmation inconnu", mk = "непознат тип на тврдење", nb = "ukjent påstandstype", nl = "onbekend type claim", nn = "ukjend påstandstype", ['pt-br'] = "tipo de afirmação desconhecida", ['zh-hans'] = "未知的声称类型", ['zh-hant'] = "不明的主張類型", }, ["unknown-snak-type"] = { ar = "نوع الكلام غير معروف", cs = "neznámý typ snaku", de = "unbekannter ''snak''-Typ", en = "unknown snak type", fa = "نوع snak ناشناخته", fr = "type de snak inconnu", mk = "непознат тип на спојница", nb = "ukjent snaktype", nl = "onbekend snaktype", nn = "ukjend snaktype", ['pt-br'] = "tipo de conector (''snak'') desconhecido", ['zh-hans'] = "未知的snak类型", ['zh-hant'] = "不明的snak類型", }, ["unknown-datavalue-type"] = { ar = "نوع قيم البيانات غير معروف.", cs = "neznámý typ datové hodnoty", de = "unbekannter Datentyp.", en = "unknown datavalue type.", fa = "نوع datavalue ناشناخته.", fr = "type de donnée inconnu.", mk = "непознат тип на податочна вредност", nb = "ukjent dataverditype.", nl = "onbekend type gegevenswaarde.", nn = "ukjend dataverditype.", ['pt-br'] = "tipo de dado desconhecido.", ['zh-hans'] = "未知的数据值类型。", ['zh-hant'] = "不明的資料值類型。", }, ["unknown-entity-type"] = { ar = "نوع الإدخال غير معروف", cs = "neznámý typ entity", de = "unbekannter Objekttyp", en = "unknown entity type", fa = "نوع موجودیت ناشناخته", fr = "type d'entité inconnu", mk = "непознат тип на единица", nb = "ukjent entitetstype", nl = "onbekend type entiteit", nn = "ukjend entitetstype", ['pt-br'] = "tipo de entidade desconhecida", ['zh-hans'] = "未知的实体类型", ['zh-hant'] = "不明的實體類型", }, ["invalid-id"] = { ar = "المُعرف غير صحيح", cs = "neplatné ID", de = "ungültige ID", en = "invalid ID", fa = "شناسهٔ نامعتبر", fr = "identifiant inconnu", mk = "неважечка назнака", nb = "ugyldig ID", nl = "onbekend identificatienummer", nn = "ugyldig ID", ['pt-br'] = "identificador inválido", ['zh-hans'] = "无效ID", ['zh-hant'] = "無效ID", }, } q1u7wdi6uv50emqpctfj5z1o91lrabc Module:Wikidata/FormatEntity 828 1363 10773 2024-04-16T19:23:23Z commons>Uzume 0 update mw.wikibase API 10773 Scribunto text/plain local p = {} local defaultlang = mw.getCurrentFrame():callParserFunction("int", "lang") local defaultlinktype = {'commonswiki', 'wikipedia'} -- sites accepted for internal links local fb = require "Module:Fallback" local tools = require 'Module:Wikidata/Tools' local getClaims = require "Module:Wikidata/GetClaims".getClaims local i18n = tools.i18n local formatError = tools.formatError local function fblist(lang) return fb.fblist(lang or defaultlang) end function p.getLabel(entity, lang, labelformat) if (not entity) or (entity == "") then return nil -- error handling ? end if (not lang) or (lang == "") then lang = defaultlang end if type(labelformat) == 'function' then return labelformat(entity) end --[[ using mw.wikibase.getLabel (much more memory efficient) but * incompatible with ?uselang * useful only when the Wikidata entity is not loaded, so useless when a Wikipedia link is required if (type(entity) == 'string') and (lang == defaultlang) then -- much more memory efficient return mw.wikibase.getLabel(entity) end ]]-- if type(entity) == 'string' then entity = mw.wikibase.getEntity(entity) end if entity and entity.labels then for i, lg in pairs(fblist(lang)) do if entity.labels[lg] then return entity.labels[lg].value end end end end function p.formatEntity( entity, params ) -- UNFOLD PARAMETERS if (not entity) or (entity == "") then return nil --formatError('entity-not-found') end local id = entity if type(id) == 'table' then id = id.id end params = params or {} local lang = params.lang or defaultlang local speciallabels = params.speciallabels local displayformat = params.displayformat local labelformat = params.labelformat local defaultlabel = params.defaultlabel or id local linktype = params.link or defaultlinktype local defaultlinktype = params.defaultlink local defaultlinkquery = params.defaultlinkquery if speciallabels and speciallabels[id] then --speciallabels override the standard label + link combination return speciallabels[id] end if params.displayformat == 'raw' then return id end local link, label local str = '' -- text to be returned -- GET LABEL label = p.getLabel(entity, lang, labelformat) -- if no label, return ID + link to WIkidata to make it intelligible if not label then if (defaultlabel == '-') then return nil end link = tools.siteLink(id, 'wikidata') return str .. '[[' .. link .. '|' .. id .. ']]' end -- GET LINK if (linktype == '-') then return str .. label end -- use the linktype parameter to know which site to use if type(linktype) == 'string' then linktype = {linktype} end for i, lg in pairs(fblist(lang)) do link = tools.siteLink(entity, linktype[1], lg) if link or (linktype == "commons") then -- if we have a link or if site has only one language: break break end end if (not link) and (linktype[2]) then link = tools.siteLink(entity, linktype[2], lang) end -- if no link, use arg defaultlinkquery if (not link) and defaultlinkquery then defaultlinkquery.excludespecial = true defaultlinkquery.entity = entity local claims = getClaims(defaultlinkquery) if claims then for i, j in pairs(claims) do local id = tools.getMainId(j) link = tools.siteLink(id, linktype, lang) if link then break end end end end if link then return str .. '[[' .. link .. '|' .. label .. ']]' end return str .. label end return p tfy0cbix4etcffb6ghy2ehyc39rl60u 10774 10773 2026-08-25T23:38:32Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Wikidata/FormatEntity]] 10773 Scribunto text/plain local p = {} local defaultlang = mw.getCurrentFrame():callParserFunction("int", "lang") local defaultlinktype = {'commonswiki', 'wikipedia'} -- sites accepted for internal links local fb = require "Module:Fallback" local tools = require 'Module:Wikidata/Tools' local getClaims = require "Module:Wikidata/GetClaims".getClaims local i18n = tools.i18n local formatError = tools.formatError local function fblist(lang) return fb.fblist(lang or defaultlang) end function p.getLabel(entity, lang, labelformat) if (not entity) or (entity == "") then return nil -- error handling ? end if (not lang) or (lang == "") then lang = defaultlang end if type(labelformat) == 'function' then return labelformat(entity) end --[[ using mw.wikibase.getLabel (much more memory efficient) but * incompatible with ?uselang * useful only when the Wikidata entity is not loaded, so useless when a Wikipedia link is required if (type(entity) == 'string') and (lang == defaultlang) then -- much more memory efficient return mw.wikibase.getLabel(entity) end ]]-- if type(entity) == 'string' then entity = mw.wikibase.getEntity(entity) end if entity and entity.labels then for i, lg in pairs(fblist(lang)) do if entity.labels[lg] then return entity.labels[lg].value end end end end function p.formatEntity( entity, params ) -- UNFOLD PARAMETERS if (not entity) or (entity == "") then return nil --formatError('entity-not-found') end local id = entity if type(id) == 'table' then id = id.id end params = params or {} local lang = params.lang or defaultlang local speciallabels = params.speciallabels local displayformat = params.displayformat local labelformat = params.labelformat local defaultlabel = params.defaultlabel or id local linktype = params.link or defaultlinktype local defaultlinktype = params.defaultlink local defaultlinkquery = params.defaultlinkquery if speciallabels and speciallabels[id] then --speciallabels override the standard label + link combination return speciallabels[id] end if params.displayformat == 'raw' then return id end local link, label local str = '' -- text to be returned -- GET LABEL label = p.getLabel(entity, lang, labelformat) -- if no label, return ID + link to WIkidata to make it intelligible if not label then if (defaultlabel == '-') then return nil end link = tools.siteLink(id, 'wikidata') return str .. '[[' .. link .. '|' .. id .. ']]' end -- GET LINK if (linktype == '-') then return str .. label end -- use the linktype parameter to know which site to use if type(linktype) == 'string' then linktype = {linktype} end for i, lg in pairs(fblist(lang)) do link = tools.siteLink(entity, linktype[1], lg) if link or (linktype == "commons") then -- if we have a link or if site has only one language: break break end end if (not link) and (linktype[2]) then link = tools.siteLink(entity, linktype[2], lang) end -- if no link, use arg defaultlinkquery if (not link) and defaultlinkquery then defaultlinkquery.excludespecial = true defaultlinkquery.entity = entity local claims = getClaims(defaultlinkquery) if claims then for i, j in pairs(claims) do local id = tools.getMainId(j) link = tools.siteLink(id, linktype, lang) if link then break end end end end if link then return str .. '[[' .. link .. '|' .. label .. ']]' end return str .. label end return p tfy0cbix4etcffb6ghy2ehyc39rl60u Module:Wikidata/Dates 828 1364 10775 2019-02-27T02:36:08Z commons>Jarekt 0 patch errors with global variables 10775 Scribunto text/plain local p = {} local formatDate = require "Module:Complex date" local tools = require "Module:Wikidata/Tools" local defaultlang = mw.getCurrentFrame():callParserFunction("int", "lang") local function splitTimestamp(timestamp, calendar) local pattern = "(%W)(%d+)%-(%d+)%-(%d+)" local era, year, month, day = timestamp:match(pattern) if calendar == 'julian' then --todo year, month, day = formatDate.gregorianToJulian( era .. year, month, day ) end return era, year, month, day end local function dateObject(snak, params) --[[ transforms a Wikibase snak into a simpler table readable by Module:Complex date { type = "dateobject" valuetype = corresponds to the snaktype (value, somevalue or novalue) year = number month = number day = number calendar = julian or gregorian } ]]-- if not params then params = {} end local obj = {type = "dateobject", valuetype = snak.snaktype} if snak.snaktype == "value" then local value = tools.getValue(snak) obj.era, obj.year, obj.month, obj.day = splitTimestamp(value.time, value.calendar) obj.precision = params.precision or value.precision end return obj end local function rangeObject(begin, ending) -- object containing one or two dateobject {type = "rangeobject", begin = dateobject, ending = rangeobject} local timestamp if begin then timestamp = begin.timestamp elseif ending then timestamp = ending.timestamp end return {begin = begin, ending = ending, timestamp = timestamp, type = 'rangeobject'} end -- Functions transforming dateobjects into date strings local function standardDisplay(obj, precision, lang) -- returns a date in a natural language string if obj.valuetype == "somevalue" then return formatDate._complex_date("unknown", "", "", "", "", "", "", "", "", lang) elseif obj.valuetype == "novalue" then return "" -- ? end if precision >= 11 then return formatDate._complex_date("", "", obj.year .. '-' .. obj.month .. '-' .. obj.day, "", "", "" , "", "", "", lang) elseif precision == 10 then return formatDate._complex_date("", "", obj.year .. '-' .. obj.month, "", "", "" , "", "", "", lang) elseif precision == 9 then return formatDate._complex_date("", "", obj.year, "", "", "" , "", "", "", lang) elseif precision == 8 then return formatDate._complex_date("", "", string.sub(tostring(obj.year), 1, 3) .. '0', "decade", "", "" , "", "", "", lang) elseif precision == 7 then return formatDate._complex_date("", "", string.sub(tostring(obj.year + 100), 1, 2), "century", "", "" , "", "", "", lang) end end --- ISO format local function ISOdate(obj, precision) local str = "" if obj.valuetype ~= 'value' then return nil end if (precision >= 9) then str = obj.year end if (precision >= 10) then str = str .. "-" .. obj.month end if (precision >= 11) then str = str .. "-" .. obj.day end return str end local function formatDatepoint(obj, params) -- takes in "datobject" and transforms it into a string if not obj then return nil end if not params then params = {} end local lang = params.lang or defaultlang local precision if obj.valuetype == "value" then precision = math.min(obj.precision, params.precision or 15) end if params.displayformat == "year" then return obj.year elseif params.displayformat == "isodate" then return ISOdate(obj, precision) else return standardDisplay(obj, precision, lang) end end local function formatDaterange(obj, params) --takes "rangeobject" and transforms it into a string local begin = formatDatepoint(obj.begin, params) local ending = formatDatepoint(obj.ending, params) local str = "" if begin then str = str .. "from " .. begin end if begin and ending then str = str .. " " end if ending then str = str .. "until " .. ending end return str end local function objectToText(obj, params) -- takes any date table and transforms it into a string if obj.type == 'dateobject' then return formatDatepoint(obj, params) elseif obj.type == 'rangeobject' then return formatDaterange(obj, params) end return nil end -- Functions retrieving data from Wikidata local function getDatefromQualif(statement, qualif) if not(tools.hasqualifier(statement, qualif) )then return nil end local v = statement.qualifiers[qualif][1] if v.snaktype ~= 'value' then return nil -- ? end return dateObject(v) end function p.getDate(statement) -- looks for a date in a statement (either qualifiers or main value) and returns it in the form of a "dateobject" or a "rangeobject" -- try to use qualifiers, that can have more accurate values than the main snak local period = getDatefromQualif(statement, 'P585') -- retourne un dateobject if period then return period end local begin, ending = getDatefromQualif(statement, 'P580'), getDatefromQualif(statement, 'P582') if begin or ending then return rangeObject(begin, ending) -- a rangeobject contains two dates end local begin, ending = getDatefromQualif(statement, 'P1319'), getDatefromQualif(statement, 'P1326') local obj if begin or ending then return rangeObject(begin, ending) -- should have another parameter stating that these are not the same as with usual qualifs end -- else, if the main value is a time value, then return it local mainsnak = statement.mainsnak if mainsnak.datatype ~= 'time' then return nil -- if the property datatype is not time, then do not use it end local params return dateObject(mainsnak, params) end function p.getFormattedDate(statement, params) if not statement then return nil end local str local datetable = p.getDate(statement) if datetable then str = objectToText(datetable, params) end local fuzzy = tools.hasqualifier(statement, {"P1480"}, {"Q5727902"}) -- should be moved to the getDate function if fuzzy then fuzzy = true end if fuzzy then str = formatDate._complex_date("", "circa", str) end return str end function p.formatTimeSnak(snak, params) local displayformat = params.displayformat if displayformat == 'raw' then return snak.datavalue.value.time end local dateobj = dateObject(snak) return objectToText(dateobj, params) end return p 5fpbxebvd317adjd6eeoxlr7b6i69ut 10776 10775 2026-08-25T23:38:32Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Wikidata/Dates]] 10775 Scribunto text/plain local p = {} local formatDate = require "Module:Complex date" local tools = require "Module:Wikidata/Tools" local defaultlang = mw.getCurrentFrame():callParserFunction("int", "lang") local function splitTimestamp(timestamp, calendar) local pattern = "(%W)(%d+)%-(%d+)%-(%d+)" local era, year, month, day = timestamp:match(pattern) if calendar == 'julian' then --todo year, month, day = formatDate.gregorianToJulian( era .. year, month, day ) end return era, year, month, day end local function dateObject(snak, params) --[[ transforms a Wikibase snak into a simpler table readable by Module:Complex date { type = "dateobject" valuetype = corresponds to the snaktype (value, somevalue or novalue) year = number month = number day = number calendar = julian or gregorian } ]]-- if not params then params = {} end local obj = {type = "dateobject", valuetype = snak.snaktype} if snak.snaktype == "value" then local value = tools.getValue(snak) obj.era, obj.year, obj.month, obj.day = splitTimestamp(value.time, value.calendar) obj.precision = params.precision or value.precision end return obj end local function rangeObject(begin, ending) -- object containing one or two dateobject {type = "rangeobject", begin = dateobject, ending = rangeobject} local timestamp if begin then timestamp = begin.timestamp elseif ending then timestamp = ending.timestamp end return {begin = begin, ending = ending, timestamp = timestamp, type = 'rangeobject'} end -- Functions transforming dateobjects into date strings local function standardDisplay(obj, precision, lang) -- returns a date in a natural language string if obj.valuetype == "somevalue" then return formatDate._complex_date("unknown", "", "", "", "", "", "", "", "", lang) elseif obj.valuetype == "novalue" then return "" -- ? end if precision >= 11 then return formatDate._complex_date("", "", obj.year .. '-' .. obj.month .. '-' .. obj.day, "", "", "" , "", "", "", lang) elseif precision == 10 then return formatDate._complex_date("", "", obj.year .. '-' .. obj.month, "", "", "" , "", "", "", lang) elseif precision == 9 then return formatDate._complex_date("", "", obj.year, "", "", "" , "", "", "", lang) elseif precision == 8 then return formatDate._complex_date("", "", string.sub(tostring(obj.year), 1, 3) .. '0', "decade", "", "" , "", "", "", lang) elseif precision == 7 then return formatDate._complex_date("", "", string.sub(tostring(obj.year + 100), 1, 2), "century", "", "" , "", "", "", lang) end end --- ISO format local function ISOdate(obj, precision) local str = "" if obj.valuetype ~= 'value' then return nil end if (precision >= 9) then str = obj.year end if (precision >= 10) then str = str .. "-" .. obj.month end if (precision >= 11) then str = str .. "-" .. obj.day end return str end local function formatDatepoint(obj, params) -- takes in "datobject" and transforms it into a string if not obj then return nil end if not params then params = {} end local lang = params.lang or defaultlang local precision if obj.valuetype == "value" then precision = math.min(obj.precision, params.precision or 15) end if params.displayformat == "year" then return obj.year elseif params.displayformat == "isodate" then return ISOdate(obj, precision) else return standardDisplay(obj, precision, lang) end end local function formatDaterange(obj, params) --takes "rangeobject" and transforms it into a string local begin = formatDatepoint(obj.begin, params) local ending = formatDatepoint(obj.ending, params) local str = "" if begin then str = str .. "from " .. begin end if begin and ending then str = str .. " " end if ending then str = str .. "until " .. ending end return str end local function objectToText(obj, params) -- takes any date table and transforms it into a string if obj.type == 'dateobject' then return formatDatepoint(obj, params) elseif obj.type == 'rangeobject' then return formatDaterange(obj, params) end return nil end -- Functions retrieving data from Wikidata local function getDatefromQualif(statement, qualif) if not(tools.hasqualifier(statement, qualif) )then return nil end local v = statement.qualifiers[qualif][1] if v.snaktype ~= 'value' then return nil -- ? end return dateObject(v) end function p.getDate(statement) -- looks for a date in a statement (either qualifiers or main value) and returns it in the form of a "dateobject" or a "rangeobject" -- try to use qualifiers, that can have more accurate values than the main snak local period = getDatefromQualif(statement, 'P585') -- retourne un dateobject if period then return period end local begin, ending = getDatefromQualif(statement, 'P580'), getDatefromQualif(statement, 'P582') if begin or ending then return rangeObject(begin, ending) -- a rangeobject contains two dates end local begin, ending = getDatefromQualif(statement, 'P1319'), getDatefromQualif(statement, 'P1326') local obj if begin or ending then return rangeObject(begin, ending) -- should have another parameter stating that these are not the same as with usual qualifs end -- else, if the main value is a time value, then return it local mainsnak = statement.mainsnak if mainsnak.datatype ~= 'time' then return nil -- if the property datatype is not time, then do not use it end local params return dateObject(mainsnak, params) end function p.getFormattedDate(statement, params) if not statement then return nil end local str local datetable = p.getDate(statement) if datetable then str = objectToText(datetable, params) end local fuzzy = tools.hasqualifier(statement, {"P1480"}, {"Q5727902"}) -- should be moved to the getDate function if fuzzy then fuzzy = true end if fuzzy then str = formatDate._complex_date("", "circa", str) end return str end function p.formatTimeSnak(snak, params) local displayformat = params.displayformat if displayformat == 'raw' then return snak.datavalue.value.time end local dateobj = dateObject(snak) return objectToText(dateobj, params) end return p 5fpbxebvd317adjd6eeoxlr7b6i69ut Module:Weblink 828 1365 10777 2019-07-16T11:22:44Z commons>4nn1l2 0 Changed protection level for "[[Module:Weblink]]": downgraded protection level per [[Special:Permalink/357548402|consensus]] ([Move=Allow only template editors and administrators] (indefinite) [Edit=Allow only template editors and administrators] (indefinite)) 10777 Scribunto text/plain local p = {} function p.makelink(url, showntext, displayformat) if (not url) or (url == "-") then return nil end url = mw.text.trim(url) if displayformat == "raw" then return url end if showntext == "-" then return "[" .. url .. "]" end if not showntext then local space = mw.ustring.find(url, ' ') -- si le nom du site est passé par mégarde dans l'URL, le séparer if space then local full = url url = mw.ustring.sub(full, 1, space - 1) showntext = mw.ustring.sub(full, space + 1) else showntext = string.gsub( url, 'https?://', '') end end if string.sub(showntext, #showntext, #showntext) == '/' then -- remove trailing slash showntext = string.sub(showntext, 1, #showntext - 1) end return '[' .. url .. ' ' .. showntext .. ']' end function p.makelinks(stringlist, separator) if not type(stringlist) == table then return error('stringlist should be table') end if not separator then separator = '<br />' end for i, j in pairs(stringlist) do stringlist[i] = p.makelink(k) return table.concat(stringlist, separator ) end end return p bqp4dm87jbdi14jphi5fltb0a3kko1k 10778 10777 2026-08-25T23:38:32Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Weblink]] 10777 Scribunto text/plain local p = {} function p.makelink(url, showntext, displayformat) if (not url) or (url == "-") then return nil end url = mw.text.trim(url) if displayformat == "raw" then return url end if showntext == "-" then return "[" .. url .. "]" end if not showntext then local space = mw.ustring.find(url, ' ') -- si le nom du site est passé par mégarde dans l'URL, le séparer if space then local full = url url = mw.ustring.sub(full, 1, space - 1) showntext = mw.ustring.sub(full, space + 1) else showntext = string.gsub( url, 'https?://', '') end end if string.sub(showntext, #showntext, #showntext) == '/' then -- remove trailing slash showntext = string.sub(showntext, 1, #showntext - 1) end return '[' .. url .. ' ' .. showntext .. ']' end function p.makelinks(stringlist, separator) if not type(stringlist) == table then return error('stringlist should be table') end if not separator then separator = '<br />' end for i, j in pairs(stringlist) do stringlist[i] = p.makelink(k) return table.concat(stringlist, separator ) end end return p bqp4dm87jbdi14jphi5fltb0a3kko1k Tempilet:Full stop 10 1366 10781 2024-06-11T09:45:12Z commons>Ebrahim 0 Protected "[[Template:Full stop]]": used in the interface, MediaWiki:Userrights-summary ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite)) 10781 wikitext text/x-wiki <noinclude>This shows a localized full stop at end of this sentence<span style="background:yellow"><!-- --></noinclude>{{#switch: {{LangSwitch|lang={{#if:{{{lang|}}}|{{{lang|}}}|{{PAGELANGUAGE}}}} | default = Latn | aee = Aran | ar = Arab | ary = Arab | arz = Arab | azb = Aran | bal = Aran | bcc = Aran | bg = Cyrl | bgn = Aran | bgp = Aran | bh = Deva | bn = Beng | bqi = Aran | el = Grek | fa = Aran | gu = Guru | gj = Gujr | glh = Aran | glk = Aran | hi = Deva | hy = Armn | ja = Jpan | jbo = Latn-Zs-i-Zs | ka = Geor | ko = Hang | ktl = Aran | kn = Knda | ks-arab = Aran | la = Laoo | lrc = Aran | luz = Aran | lzh = Hant | mzn = Aran | km = Khmr | mk = Cyrl | ml = Mlym | or = Orya | ne = Deva | new = Deva | ps = Aran | psh = Aran | ps i= Aran | pnt = Grek | ru = Cyrl | sa = Deva | sd = Aran | si = Sinh | sr = Cyrl | srz = Aran | te = Telu | th = Thai | tly = Aran | uk = Cyrl | ug = Aran | ur = Aran | yue = Hant | zh = Hans | zh-hans = Hans | zh-hant = Hant }} | Arab | Cyrl | Geor | Grek | Hang | Laoo | Latn | Zinh-Pe-Zs | #default = .{{#ifeq:{{{nospace|}}}|y||&#32;}} | Aran | Aran-Pe-Zs = <!-- Note: U+0640 (Arabic Tatween) is an "joining" format control, NOT an *isolated* punctuation like U+06D4 (Nastaliq Arabic Full Stop) -->&#x6D4;{{#ifeq:{{{nospace|}}}|y||&#32;}} | Armn = <!-- U+0589 Armenian full stop (it's NOT an ASCII colon!) -->։{{#ifeq:{{{nospace|}}}|y||&#32;}} | Beng | Deva | Guru | Gujr | Knda | Mlym | Orya | Sinh | Taml | Telu | Deva-Pe-Zs = <!-- U+0964 Devanagari Danda -->।{{#ifeq:{{{nospace|}}}|y||&#32;}} | Bpmf | Hani | Hans | Hant | Jpan | Phpa | Hani-Pe = &#x3002; | Khmr | Khmr-Pe-Zs = <!-- U+17D4 Khmer sign Khan -->។{{#ifeq:{{{nospace|}}}|y||&#32;}} | Latn-Zs-i-Zs = &nbsp;i{{#ifeq:{{{nospace|}}}|y||&#32;}} | Thai | Zinh-space = &#32; }}<noinclude></span>Or its equivalent in the relevant language. {{Documentation}}</noinclude> llsx4k7i1spq3axrmhlfbpy0m6emrnj 10782 10781 2026-08-25T23:38:32Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Full_stop]] 10781 wikitext text/x-wiki <noinclude>This shows a localized full stop at end of this sentence<span style="background:yellow"><!-- --></noinclude>{{#switch: {{LangSwitch|lang={{#if:{{{lang|}}}|{{{lang|}}}|{{PAGELANGUAGE}}}} | default = Latn | aee = Aran | ar = Arab | ary = Arab | arz = Arab | azb = Aran | bal = Aran | bcc = Aran | bg = Cyrl | bgn = Aran | bgp = Aran | bh = Deva | bn = Beng | bqi = Aran | el = Grek | fa = Aran | gu = Guru | gj = Gujr | glh = Aran | glk = Aran | hi = Deva | hy = Armn | ja = Jpan | jbo = Latn-Zs-i-Zs | ka = Geor | ko = Hang | ktl = Aran | kn = Knda | ks-arab = Aran | la = Laoo | lrc = Aran | luz = Aran | lzh = Hant | mzn = Aran | km = Khmr | mk = Cyrl | ml = Mlym | or = Orya | ne = Deva | new = Deva | ps = Aran | psh = Aran | ps i= Aran | pnt = Grek | ru = Cyrl | sa = Deva | sd = Aran | si = Sinh | sr = Cyrl | srz = Aran | te = Telu | th = Thai | tly = Aran | uk = Cyrl | ug = Aran | ur = Aran | yue = Hant | zh = Hans | zh-hans = Hans | zh-hant = Hant }} | Arab | Cyrl | Geor | Grek | Hang | Laoo | Latn | Zinh-Pe-Zs | #default = .{{#ifeq:{{{nospace|}}}|y||&#32;}} | Aran | Aran-Pe-Zs = <!-- Note: U+0640 (Arabic Tatween) is an "joining" format control, NOT an *isolated* punctuation like U+06D4 (Nastaliq Arabic Full Stop) -->&#x6D4;{{#ifeq:{{{nospace|}}}|y||&#32;}} | Armn = <!-- U+0589 Armenian full stop (it's NOT an ASCII colon!) -->։{{#ifeq:{{{nospace|}}}|y||&#32;}} | Beng | Deva | Guru | Gujr | Knda | Mlym | Orya | Sinh | Taml | Telu | Deva-Pe-Zs = <!-- U+0964 Devanagari Danda -->।{{#ifeq:{{{nospace|}}}|y||&#32;}} | Bpmf | Hani | Hans | Hant | Jpan | Phpa | Hani-Pe = &#x3002; | Khmr | Khmr-Pe-Zs = <!-- U+17D4 Khmer sign Khan -->។{{#ifeq:{{{nospace|}}}|y||&#32;}} | Latn-Zs-i-Zs = &nbsp;i{{#ifeq:{{{nospace|}}}|y||&#32;}} | Thai | Zinh-space = &#32; }}<noinclude></span>Or its equivalent in the relevant language. {{Documentation}}</noinclude> llsx4k7i1spq3axrmhlfbpy0m6emrnj Tempilet:Multilingual description 10 1367 10783 2019-07-16T04:03:23Z commons>4nn1l2 0 Changed protection level for "[[Template:Multilingual description]]": downgraded protection level per [[Special:Permalink/357548402|consensus]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite)) 10783 wikitext text/x-wiki <includeonly><div class="multilingual"><!-- Ordered by direction (all LTR scripts first, then RTL scripts), then by script, then alphabetically (by name) in each script: -->{{#invoke:Multilingual description|mld}}<!-- --></div></includeonly><noinclude> {{Documentation}} {{DEFAULTSORT:Multilingual description}} [[Category:Internationalization templates]] </noinclude> 8a4cowrrr73pjzxypl037gvgk0djlmm 10784 10783 2026-08-25T23:38:32Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Multilingual_description]] 10783 wikitext text/x-wiki <includeonly><div class="multilingual"><!-- Ordered by direction (all LTR scripts first, then RTL scripts), then by script, then alphabetically (by name) in each script: -->{{#invoke:Multilingual description|mld}}<!-- --></div></includeonly><noinclude> {{Documentation}} {{DEFAULTSORT:Multilingual description}} [[Category:Internationalization templates]] </noinclude> 8a4cowrrr73pjzxypl037gvgk0djlmm Tempilet:Ls 10 1368 10785 2024-08-09T17:23:14Z commons>Jarekt 0 use #dir parser function 10785 wikitext text/x-wiki <includeonly><div class="{{{classes|}}} {{{1|{{Int:Lang}}}}} lang-{{{1|{{Int:Lang}}}}}" lang="{{{1|{{Int:Lang}}}}}" dir="{{#switch:{{lc:{{{dir|}}}}}|ltr|rtl={{lc:{{{dir|}}}}}|#default={{#dir:{{{1|}}}}}}}" style="margin:.25em 0;line-height:normal;{{#if:{{{update|}}}|background:#FDD;}}{{{CSS-box|}}}"><span class="language langlabel-{{{1|{{Int:Lang}}}}}" lang="{{{1|{{Int:Lang}}}}}" style="font-weight:bold;{{#switch:{{{1|{{Int:Lang}}}}}|und=color:#F00;}}{{{CSS-label|}}}"><bdi>{{ucfirst:{{#language:{{{1|{{Int:Lang}}}}}}}}}</bdi>{{Colon|lang={{{1|{{Int:Lang}}}}}}}</span>{{#if:{{{update|}}}|&#32;<bdi>[<small>{{Snippets/update needed|{{{1}}}}}{{Colon|lang={{{1|{{Int:Lang}}}}}}} {{{update|}}}</small>]</bdi>}} {{{2}}}</div></includeonly><noinclude>{{documentation}}</noinclude> 3ye8l6p30na2gzu9keu598jx0o18k6a 10786 10785 2026-08-25T23:38:32Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Ls]] 10785 wikitext text/x-wiki <includeonly><div class="{{{classes|}}} {{{1|{{Int:Lang}}}}} lang-{{{1|{{Int:Lang}}}}}" lang="{{{1|{{Int:Lang}}}}}" dir="{{#switch:{{lc:{{{dir|}}}}}|ltr|rtl={{lc:{{{dir|}}}}}|#default={{#dir:{{{1|}}}}}}}" style="margin:.25em 0;line-height:normal;{{#if:{{{update|}}}|background:#FDD;}}{{{CSS-box|}}}"><span class="language langlabel-{{{1|{{Int:Lang}}}}}" lang="{{{1|{{Int:Lang}}}}}" style="font-weight:bold;{{#switch:{{{1|{{Int:Lang}}}}}|und=color:#F00;}}{{{CSS-label|}}}"><bdi>{{ucfirst:{{#language:{{{1|{{Int:Lang}}}}}}}}}</bdi>{{Colon|lang={{{1|{{Int:Lang}}}}}}}</span>{{#if:{{{update|}}}|&#32;<bdi>[<small>{{Snippets/update needed|{{{1}}}}}{{Colon|lang={{{1|{{Int:Lang}}}}}}} {{{update|}}}</small>]</bdi>}} {{{2}}}</div></includeonly><noinclude>{{documentation}}</noinclude> 3ye8l6p30na2gzu9keu598jx0o18k6a Module:Multilingual description 828 1369 10787 2026-04-25T23:20:54Z commons>Verdy p 0 10787 Scribunto text/plain local p = {} local sortedKnownLanguageTags = require('Module:Multilingual description/sort') local dir = require('Module:Dir').select --[==[ Remap some "valid" language codes that are still unknown, but are known by another code in order to get a visible language name (and if possible, BCP 47 conformance)! --]==] local remappedLanguages = { ['als'] = 'gsw', -- known code (unfortunately broken in Wikimedia) to changed new code (also known, but conforming to BCP 47); 'als' on Wikimedia for Alemannic conflicts with the standard 'als' which actually refers to the unrelated stardard variant of the Albanian language. ['nrm'] = 'nrf', -- known code (unfortunately broken in Wikimedia) to changed new code (also known, but conforming to BCP 47); 'nrm' on Wikimedia for Norman conflicts with the standard 'nrm' which actually refers to the unrelated Narom language ['bat-smg'] = 'sgs', -- legacy interwiki still supported, newer conforming code now supported as well in interwiki ['be-x-old'] = 'be-tarask', -- legacy interwiki still supported, newer conforming code now supported as well in interwiki ['fiu-vro'] = 'vro', -- legacy interwiki still supported, newer conforming code now supported as well in interwiki ['roa-rup'] = 'rup', -- code not conforming to BCP 47 (legacy interwiki still supported, newer code supported as well), the new standard code should be used (and is now recognized as interwiki) ['roa-tara'] = 'nap-taran', -- code not conforming to BCP 47 (continental variant of Neapolitan), should be replaced by a conforming variant code ['zh-classical'] = 'lzh', -- code not conforming to BCP 47, replaced by standard code also supported in interwiki ['bh'] = 'bho', -- legacy interwiki still supported but ambiguous as a family, newer code now supported as well in interwiki; 'bh' was used in Wikimedia to refer to Bhojpuri only and not the whole Bihari family ['bu'] = 'my', -- legacy code from ISO 639 deprecated, newer code is prefered and used as interwiki ['iw'] = 'he', -- legacy code from ISO 639 deprecated, newer code is prefered and used as interwiki ['jw'] = 'jv', -- legacy code from ISO 639 deprecated, newer code is prefered and used as interwiki ['zh-min-nan'] = 'nan', -- legacy BCP 47 code, valid but deprecated in favor of new code also supported in interwiki ['zh-wuu'] = 'wuu', -- legacy BCP 47 code, valid but deprecated in favor of new code also supported in interwiki ['zh-yue'] = 'yue', -- legacy BCP 47 code, valid but deprecated in favor of new code also supported in interwiki -- Standard BCP 47 codes that can't be used in MediaWiki yet, and must be replaced for now by valid BCP 47 codes (ignoring the specific variant). ['en-us'] = 'en', -- both codes are conforming and supported, only the second one is known (there's no support for the US variant which is implicit, unlike variants in CA, GB, IN, ZA) ['fa-af'] = 'fa', -- both codes are conforming and supported, only the second one is known, actually means "Eastern Dari" ['fr-x-galo'] = 'fr', -- both codes are conforming and supported, only the second one is known ['ha-latn'] = 'ha', -- both codes are conforming and supported, only the second one is known, the Latin script is the default since the 1950s ['ha-arab'] = 'ha', -- both codes are conforming and supported, only the second one is known, the Arabic script is historic, without clear orthography ['ko-kr'] = 'ko', -- both codes are conforming and supported, only the second one is known, regional variant used in South Korea (kr-kp for the variant in North Korea is supported) ['ku-cyrl'] = 'ku', -- both codes are conforming and supported, only the second one is known, the Cyrillic script is still used ['ku-latn'] = 'ku', -- both codes are conforming and supported, only the second one is known, the Latin script is the default since the 1950s ['no'] = 'nb', -- both codes are conforming and supported, but the 1st one is now used only for meaning the second one in MediaWiki ['prd'] = 'fa', -- both codes are conforming and supported, only the second one is known; 'prd' is "Parsi-Dari", and means the same as 'fa-af' ['tgl'] = 'tl', -- both codes are conforming and supported, only the second one is known (but may have alternate forms written in the Tagal script and not Latin for modern Filipino) -- Standard BCP 47 codes for variants that can't be used in MediaWiki yet, and must be replaced for now by legacy codes, valid only in Wikimedia wikis but not conforming to BCP 47. ['sr-cyrl'] = 'sr-ec', -- this alternate known code is non-standard and in fact not supported, but has a correct native name ['sr-latn'] = 'sr-el', -- same remark ['cmn'] = 'zh', -- BCP 47 code for the most common spoken variant of Chinese (i.e. Mandarin Chinese), not favored in the MediaWiki repos yet ['cmn-pinyin'] = 'zh-Latn-pinyin', -- BCP 47 code for the official Latin form (Pinyin romanization) of Mandarin Chinese, not favored in the MediaWiki repos yet ['zh-pinyin'] = 'zh-Latn-pinyin', -- BCP 47 code for the official Latin form (Pinyin romanization) of Mandarin Chinese, not favored in the MediaWiki repos yet } local currentFrame = mw.getCurrentFrame() local mwlog = mw.log local trim = mw.text.trim local isSupportedLanguage = mw.language.isSupportedLanguage local isKnownLanguageTag = mw.language.isKnownLanguageTag local insert = table.insert local function addDescription(descriptions, lang, description, update) if type(description) == 'string' then if trim(description):len() > 0 then insert(descriptions, currentFrame:expandTemplate{ title = 'Ls', args = { lang, description, dir = dir(lang, 'rtl', 'ltr'), classes = 'description', update = update } }) end end end -- Kind is either 'deprecated', 'conflicting', or 'unsupported'. local function addTracking(descriptions, kind) insert(descriptions, '[[Category:Multilingual descriptions using ' .. kind .. ' language codes]]') end local function _mld(args) --[==[ Shallow copy of arguments (because keys in args cannot be unset if args is hollow, in a parent frame outside Lua). DO NOT copy the metatable that exposes only a *read-only* interface with accessors to PHP arrays (mw.clone does NOT work)! --]==] local descriptions, conflicting = {}, false for lang, description in pairs(args) do if type(lang) == 'string' and lang ~= 'class' and lang~= 'style' and type(description) == 'string' then --[==[ MediaWiki trims the names of named argument and their values, but does not remove HTML comments in these names (some Mld contain parameters like "| sk <!--Slovensko--> = ...") or "nowiki" tags. After removing them, we still need to trim the rest in language codes and in descriptions, to detect conflicting descriptions for the same language code. --]==] description = description :gsub('<!%-%-.-%-%->', '') :gsub('</?nowiki%s*/?>', '') :gsub('^%s*(.-)%s*$','%1') --[==[ Split multiple language codes (or default) assigned with the same description. Valid BCP 47 language codes contain only ASCII letters, digits, hyphens or underscores: canonicalize them to lowercase with hyphens replacing underscores (other characters are considered separators between language codes). --]==] for code in lang :gsub('<!%-%-.-%-%->', '') :gsub('</?nowiki%s*/?>', '') :gsub('_', '-'):lower():gmatch("([%-0-9a-z]+)") do --[==[ Detect conflicting descriptions, like "|en,default=OK|en=Bad" (whose result is unpredictable, as all keys are in random order). --]==] if descriptions[code] ~= nil and descriptions[code] ~= description then conflicting = true end descriptions[code] = description end end end args, descriptions = descriptions, {} --[==[ Remap legacy language codes if there's no conflict. ]==] local remapped = false for cur, alt in pairs(remappedLanguages) do if args[cur] and not(isSupportedLanguage(cur) and isKnownLanguageTag(cur)) and (isSupportedLanguage(alt) and isKnownLanguageTag(alt)) then if args[alt] == nil then -- only if this does not conflict args[alt] = args[cur] -- set description for the alternate known language else remapped = true -- signal only in case of conflict conflicting = true end args[cur] = nil -- unset the description for the initial language code end end --[==[ First all known languages in order if they have description. ]==] for _, lang in ipairs(sortedKnownLanguageTags) do if args[lang] ~= nil then addDescription(descriptions, lang, args[lang], nil) args[lang] = nil end end --[==[ Append other unknown languages, but only if they are supported. ]==] local unsupported = false for lang, description in pairs(args) do if isSupportedLanguage(lang) then addDescription(descriptions, lang, description, nil) else addDescription(descriptions, lang, description, lang) unsupported = true end end if conflicting then addTracking(descriptions, 'conflicting') end if remapped then addTracking(descriptions, 'deprecated') end if unsupported then addTracking(descriptions, 'unsupported') end return table.concat(descriptions) end function p.mld(frame) local args = (frame:getParent() or {}).args or {} return _mld(args) end setmetatable(p, {quickTests = function() local input = { [1] = 'One?', -- discarded (no support for language numeric keys) unsupported = 'What?', -- unsupported en = ' ', -- empty description after trimming (discarded) als = 'GSW', -- will be remapped ['en-gb '] = 'EN-GB', -- trimming at end ['en-ca <nowiki/>'] = 'EN-CA', [' de'] = 'DE', -- trimming at start fr = 'FR', [' fr '] = 'FR', -- trimming both ends (description not conflicting) rue = 'RUE', ru = 'RU', ko = 'KO', ja = 'JA', zh = 'ZH', ['he,iw'] = 'HE', -- 'iw' remapped to 'he' (description not conflicting) ur = 'UR', ar = 'AR', ro = 'RO', ['be-tarask'] = 'BE-TARASK', ['be-x-old'] = 'BE-X-OLD (deprecated)', dv = 'DV', } local expect = {} --[==[ This is the exact order to expect according to native language names, and after discarding empty descriptions or unsupported language codes. --]==] addDescription(expect, 'gsw', 'GSW') --[[Alemannisch]] -- remapped addDescription(expect, 'en-gb', 'EN-GB') --[[British English]] addDescription(expect, 'en-ca', 'EN-CA') --[[Canadian English]] addDescription(expect, 'de', 'DE') --[[Deutsch]] addDescription(expect, 'fr', 'FR') --[[français]] addDescription(expect, 'ro', 'RO') --[[română]] addDescription(expect, 'be-tarask', 'BE-TARASK') --[[беларуская (тарашкевіца)]] -- addDescription(expect, 'be-x-old', 'BE-X-OLD (deprecated)') --[[беларуская (тарашкевіца)]] -- discarded due to conflict addDescription(expect, 'rue', 'RUE') --[[русиньскый]] addDescription(expect, 'ru', 'RU') --[[русский]] addDescription(expect, 'ko', 'KO') --[[한국어]] addDescription(expect, 'ja', 'JA') --[[日本語]] addDescription(expect, 'zh', 'ZH') --[[中文]] addDescription(expect, 'he', 'HE') --[[עברית]] addDescription(expect, 'ur', 'UR') --[[اردو]] addDescription(expect, 'ar', 'AR') --[[العربية]] addDescription(expect, 'dv', 'DV') --[[ދިވެހިބަސް]] --[==[ Note that unknown/unsorted languages may occur here in unpredictable order at end of this list, but only if they are "supported" (other will be discarded). So we can only test for the presence of one such item. --]==] addDescription(expect, 'unsupported', 'What?', 'unsupported') addTracking(expect, 'conflicting') addTracking(expect, 'deprecated') addTracking(expect, 'unsupported') expect = table.concat(expect) local actual = _mld(input) if (actual ~= expect) then mwlog('expect:\n' .. expect) mwlog('actual:\n' .. actual) return false end return true end}) --[==[ Type this to run tests in the Lua console (should return true): =getmetatable(p).quickTests() --]==] return p lnm9jw6xqs5hmczfbr5rml75i4beaf4 10788 10787 2026-08-25T23:38:32Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Multilingual_description]] 10787 Scribunto text/plain local p = {} local sortedKnownLanguageTags = require('Module:Multilingual description/sort') local dir = require('Module:Dir').select --[==[ Remap some "valid" language codes that are still unknown, but are known by another code in order to get a visible language name (and if possible, BCP 47 conformance)! --]==] local remappedLanguages = { ['als'] = 'gsw', -- known code (unfortunately broken in Wikimedia) to changed new code (also known, but conforming to BCP 47); 'als' on Wikimedia for Alemannic conflicts with the standard 'als' which actually refers to the unrelated stardard variant of the Albanian language. ['nrm'] = 'nrf', -- known code (unfortunately broken in Wikimedia) to changed new code (also known, but conforming to BCP 47); 'nrm' on Wikimedia for Norman conflicts with the standard 'nrm' which actually refers to the unrelated Narom language ['bat-smg'] = 'sgs', -- legacy interwiki still supported, newer conforming code now supported as well in interwiki ['be-x-old'] = 'be-tarask', -- legacy interwiki still supported, newer conforming code now supported as well in interwiki ['fiu-vro'] = 'vro', -- legacy interwiki still supported, newer conforming code now supported as well in interwiki ['roa-rup'] = 'rup', -- code not conforming to BCP 47 (legacy interwiki still supported, newer code supported as well), the new standard code should be used (and is now recognized as interwiki) ['roa-tara'] = 'nap-taran', -- code not conforming to BCP 47 (continental variant of Neapolitan), should be replaced by a conforming variant code ['zh-classical'] = 'lzh', -- code not conforming to BCP 47, replaced by standard code also supported in interwiki ['bh'] = 'bho', -- legacy interwiki still supported but ambiguous as a family, newer code now supported as well in interwiki; 'bh' was used in Wikimedia to refer to Bhojpuri only and not the whole Bihari family ['bu'] = 'my', -- legacy code from ISO 639 deprecated, newer code is prefered and used as interwiki ['iw'] = 'he', -- legacy code from ISO 639 deprecated, newer code is prefered and used as interwiki ['jw'] = 'jv', -- legacy code from ISO 639 deprecated, newer code is prefered and used as interwiki ['zh-min-nan'] = 'nan', -- legacy BCP 47 code, valid but deprecated in favor of new code also supported in interwiki ['zh-wuu'] = 'wuu', -- legacy BCP 47 code, valid but deprecated in favor of new code also supported in interwiki ['zh-yue'] = 'yue', -- legacy BCP 47 code, valid but deprecated in favor of new code also supported in interwiki -- Standard BCP 47 codes that can't be used in MediaWiki yet, and must be replaced for now by valid BCP 47 codes (ignoring the specific variant). ['en-us'] = 'en', -- both codes are conforming and supported, only the second one is known (there's no support for the US variant which is implicit, unlike variants in CA, GB, IN, ZA) ['fa-af'] = 'fa', -- both codes are conforming and supported, only the second one is known, actually means "Eastern Dari" ['fr-x-galo'] = 'fr', -- both codes are conforming and supported, only the second one is known ['ha-latn'] = 'ha', -- both codes are conforming and supported, only the second one is known, the Latin script is the default since the 1950s ['ha-arab'] = 'ha', -- both codes are conforming and supported, only the second one is known, the Arabic script is historic, without clear orthography ['ko-kr'] = 'ko', -- both codes are conforming and supported, only the second one is known, regional variant used in South Korea (kr-kp for the variant in North Korea is supported) ['ku-cyrl'] = 'ku', -- both codes are conforming and supported, only the second one is known, the Cyrillic script is still used ['ku-latn'] = 'ku', -- both codes are conforming and supported, only the second one is known, the Latin script is the default since the 1950s ['no'] = 'nb', -- both codes are conforming and supported, but the 1st one is now used only for meaning the second one in MediaWiki ['prd'] = 'fa', -- both codes are conforming and supported, only the second one is known; 'prd' is "Parsi-Dari", and means the same as 'fa-af' ['tgl'] = 'tl', -- both codes are conforming and supported, only the second one is known (but may have alternate forms written in the Tagal script and not Latin for modern Filipino) -- Standard BCP 47 codes for variants that can't be used in MediaWiki yet, and must be replaced for now by legacy codes, valid only in Wikimedia wikis but not conforming to BCP 47. ['sr-cyrl'] = 'sr-ec', -- this alternate known code is non-standard and in fact not supported, but has a correct native name ['sr-latn'] = 'sr-el', -- same remark ['cmn'] = 'zh', -- BCP 47 code for the most common spoken variant of Chinese (i.e. Mandarin Chinese), not favored in the MediaWiki repos yet ['cmn-pinyin'] = 'zh-Latn-pinyin', -- BCP 47 code for the official Latin form (Pinyin romanization) of Mandarin Chinese, not favored in the MediaWiki repos yet ['zh-pinyin'] = 'zh-Latn-pinyin', -- BCP 47 code for the official Latin form (Pinyin romanization) of Mandarin Chinese, not favored in the MediaWiki repos yet } local currentFrame = mw.getCurrentFrame() local mwlog = mw.log local trim = mw.text.trim local isSupportedLanguage = mw.language.isSupportedLanguage local isKnownLanguageTag = mw.language.isKnownLanguageTag local insert = table.insert local function addDescription(descriptions, lang, description, update) if type(description) == 'string' then if trim(description):len() > 0 then insert(descriptions, currentFrame:expandTemplate{ title = 'Ls', args = { lang, description, dir = dir(lang, 'rtl', 'ltr'), classes = 'description', update = update } }) end end end -- Kind is either 'deprecated', 'conflicting', or 'unsupported'. local function addTracking(descriptions, kind) insert(descriptions, '[[Category:Multilingual descriptions using ' .. kind .. ' language codes]]') end local function _mld(args) --[==[ Shallow copy of arguments (because keys in args cannot be unset if args is hollow, in a parent frame outside Lua). DO NOT copy the metatable that exposes only a *read-only* interface with accessors to PHP arrays (mw.clone does NOT work)! --]==] local descriptions, conflicting = {}, false for lang, description in pairs(args) do if type(lang) == 'string' and lang ~= 'class' and lang~= 'style' and type(description) == 'string' then --[==[ MediaWiki trims the names of named argument and their values, but does not remove HTML comments in these names (some Mld contain parameters like "| sk <!--Slovensko--> = ...") or "nowiki" tags. After removing them, we still need to trim the rest in language codes and in descriptions, to detect conflicting descriptions for the same language code. --]==] description = description :gsub('<!%-%-.-%-%->', '') :gsub('</?nowiki%s*/?>', '') :gsub('^%s*(.-)%s*$','%1') --[==[ Split multiple language codes (or default) assigned with the same description. Valid BCP 47 language codes contain only ASCII letters, digits, hyphens or underscores: canonicalize them to lowercase with hyphens replacing underscores (other characters are considered separators between language codes). --]==] for code in lang :gsub('<!%-%-.-%-%->', '') :gsub('</?nowiki%s*/?>', '') :gsub('_', '-'):lower():gmatch("([%-0-9a-z]+)") do --[==[ Detect conflicting descriptions, like "|en,default=OK|en=Bad" (whose result is unpredictable, as all keys are in random order). --]==] if descriptions[code] ~= nil and descriptions[code] ~= description then conflicting = true end descriptions[code] = description end end end args, descriptions = descriptions, {} --[==[ Remap legacy language codes if there's no conflict. ]==] local remapped = false for cur, alt in pairs(remappedLanguages) do if args[cur] and not(isSupportedLanguage(cur) and isKnownLanguageTag(cur)) and (isSupportedLanguage(alt) and isKnownLanguageTag(alt)) then if args[alt] == nil then -- only if this does not conflict args[alt] = args[cur] -- set description for the alternate known language else remapped = true -- signal only in case of conflict conflicting = true end args[cur] = nil -- unset the description for the initial language code end end --[==[ First all known languages in order if they have description. ]==] for _, lang in ipairs(sortedKnownLanguageTags) do if args[lang] ~= nil then addDescription(descriptions, lang, args[lang], nil) args[lang] = nil end end --[==[ Append other unknown languages, but only if they are supported. ]==] local unsupported = false for lang, description in pairs(args) do if isSupportedLanguage(lang) then addDescription(descriptions, lang, description, nil) else addDescription(descriptions, lang, description, lang) unsupported = true end end if conflicting then addTracking(descriptions, 'conflicting') end if remapped then addTracking(descriptions, 'deprecated') end if unsupported then addTracking(descriptions, 'unsupported') end return table.concat(descriptions) end function p.mld(frame) local args = (frame:getParent() or {}).args or {} return _mld(args) end setmetatable(p, {quickTests = function() local input = { [1] = 'One?', -- discarded (no support for language numeric keys) unsupported = 'What?', -- unsupported en = ' ', -- empty description after trimming (discarded) als = 'GSW', -- will be remapped ['en-gb '] = 'EN-GB', -- trimming at end ['en-ca <nowiki/>'] = 'EN-CA', [' de'] = 'DE', -- trimming at start fr = 'FR', [' fr '] = 'FR', -- trimming both ends (description not conflicting) rue = 'RUE', ru = 'RU', ko = 'KO', ja = 'JA', zh = 'ZH', ['he,iw'] = 'HE', -- 'iw' remapped to 'he' (description not conflicting) ur = 'UR', ar = 'AR', ro = 'RO', ['be-tarask'] = 'BE-TARASK', ['be-x-old'] = 'BE-X-OLD (deprecated)', dv = 'DV', } local expect = {} --[==[ This is the exact order to expect according to native language names, and after discarding empty descriptions or unsupported language codes. --]==] addDescription(expect, 'gsw', 'GSW') --[[Alemannisch]] -- remapped addDescription(expect, 'en-gb', 'EN-GB') --[[British English]] addDescription(expect, 'en-ca', 'EN-CA') --[[Canadian English]] addDescription(expect, 'de', 'DE') --[[Deutsch]] addDescription(expect, 'fr', 'FR') --[[français]] addDescription(expect, 'ro', 'RO') --[[română]] addDescription(expect, 'be-tarask', 'BE-TARASK') --[[беларуская (тарашкевіца)]] -- addDescription(expect, 'be-x-old', 'BE-X-OLD (deprecated)') --[[беларуская (тарашкевіца)]] -- discarded due to conflict addDescription(expect, 'rue', 'RUE') --[[русиньскый]] addDescription(expect, 'ru', 'RU') --[[русский]] addDescription(expect, 'ko', 'KO') --[[한국어]] addDescription(expect, 'ja', 'JA') --[[日本語]] addDescription(expect, 'zh', 'ZH') --[[中文]] addDescription(expect, 'he', 'HE') --[[עברית]] addDescription(expect, 'ur', 'UR') --[[اردو]] addDescription(expect, 'ar', 'AR') --[[العربية]] addDescription(expect, 'dv', 'DV') --[[ދިވެހިބަސް]] --[==[ Note that unknown/unsorted languages may occur here in unpredictable order at end of this list, but only if they are "supported" (other will be discarded). So we can only test for the presence of one such item. --]==] addDescription(expect, 'unsupported', 'What?', 'unsupported') addTracking(expect, 'conflicting') addTracking(expect, 'deprecated') addTracking(expect, 'unsupported') expect = table.concat(expect) local actual = _mld(input) if (actual ~= expect) then mwlog('expect:\n' .. expect) mwlog('actual:\n' .. actual) return false end return true end}) --[==[ Type this to run tests in the Lua console (should return true): =getmetatable(p).quickTests() --]==] return p lnm9jw6xqs5hmczfbr5rml75i4beaf4 Module:Multilingual description/sort 828 1370 10789 2026-07-23T21:26:41Z commons>Verdy p 0 10789 Scribunto text/plain --[=[ The documented sort order is by script, then alphabetically by displayed native name (as generated by {{#language: code}}), using the default DUCET order. This allows easier selection by users reading the lists of languages in order to find their own. Please test this order, and maintain it as complete as possible, including legacy codes still used in MediaWiki. Any missing language will be sorted after all languages listed below, just using its internal language code. ]=] local p = { -- LTR scripts -- Latin alphabets --[['-latn', '-latf', '-latg',]] --[[A]] 'aig', 'sma', 'abr', 'ace', 'ang', 'af', 'agq', 'ak', 'gsw', 'als', 'en-us', 'ase', 'smn', 'an', 'aae', 'rup', 'roa-rup', 'frp', 'ast', 'atj', 'gn', 'ay', 'az', --[[B]] 'ksf', 'bfd', 'abs', 'gor', 'id', 'ms', 'bdr', 'bkc', 'bkh', 'bm', 'bax', 'zh-min-nan', 'nan-latn-pehoeji', 'nan-latn-tailo', 'bjn', 'ban', 'jv-x-bms', 'map-bms', 'bug', 'bug-latn', 'bas', 'mui', 'btm', 'bbc', 'bbc-latn', 'zag', 'zag-latn', 'bew', 'sje', 'bcl', 'bi', 'bar', 'bol', 'bs', 'brh', 'br', 'en-gb', --[[C]] 'en-ca', 'cps', 'cal', 'ca', 'ceb', 'cs', 'cho', 'ch', 'cbk-zam', 'ny', 'chn', 'sn', 'tum', 'lua', 'sei', 'co', 'cy', --[[D]] 'dga', 'dag', 'da', 'se', 'se-no', 'se-se', 'se-fi', 'pdc', 'de', 'de-formal', 'de-latf', 'nv', 'dsb', 'non'--[[Dǫnsk tunga]], 'na', 'dua', --[[E]] 'mh', 'et', 'efi', 'etu', 'vmw', 'egl', 'eml', 'en', 'es', 'es-formal', 'es-419', 'eo', 'ext', 'eto', 'eu', 'ee', 'ewo', --[[F]] 'wls', 'gur', 'fmp', 'hif', 'hif-latn', 'fil', 'fon', 'fo', 'fr', 'frc', 'fy', 'ff', 'fur', --[[G]] 'gaa', 'ga', 'gv', 'sm', 'gag', 'gd', 'gl', 'gya', 'aln', 'gpe', 'bbj', 'ki', 'gom-latn', 'guw', 'hak-latn', --[[H]] 'cnh', 'ha', 'ha-latn', 'haw', 'ho', 'hmn', 'hoc-latn', 'hsb', 'hr', 'hrx', --[[I]] 'ibb', 'io', 'igl', 'ig', 'rw', 'rn', 'ilo', 'hil', 'ia', 'ie', 'ike-latn', 'ik', 'bto', 'nr', 'xh', 'zu', 'is', 'isu', 'it', 'iba', --[[J]] 'jv', 'kaj', 'smj', 'jut', --[[K]] 'rmf', 'kbp', 'kea', 'dtp', 'kl', 'kr', 'pam', 'cak', 'kai', 'krl', 'csb', 'ker', 'kw', 'kha', 'hke', 'krj', 'kiu', 'sw', 'bkm', 'kg', 'avk', 'ses', 'ht', 'gcf'--[[kréyòl gwadloupéyen]], 'kri', 'gcr', 'kge', 'ku', 'ku-latn', 'kmr', 'kmr-latn', 'kus', 'fkv', 'kj', 'nmg', 'acf', --[[L]] 'jbo', 'lld', 'lad', 'lkt', 'lns', 'ljp', 'ltg', 'la', 'lv', 'lzz', 'to', 'lb', 'nia', 'lt', 'lij', 'li', 'ln', 'lfn', 'liv', 'olo', 'lmo', 'lg', --[[M]] 'yua', 'mad', 'hu', 'hu-formal', 'vmf', 'mcp', 'mak', 'mg', 'mt', 'mnc', 'mnc-latn', 'mi', 'arn', 'mrh', 'srq', 'fit', 'byv', 'isv', 'isv-latn', 'fat', 'min', 'cdo-latn', 'mwl', 'lus', 'bqz', 'cnr', 'cnr-latn', 'mos', 'mua', 'mus', --[[N]] 'fj', 'nah', 'pcm', 'nap', 'ppl', --[['nrm', should be Narom]] 'nmz', 'nnz', 'nl', 'nl-informal', 'nds-nl', 'cr', 'nge', 'nnh', 'nla', 'yrl', 'niu', 'lem', 'frr', 'pih', 'no', 'nb', 'nn', 'nrf'--[[Nouormand]], 'nrm'--[[currently Nouormand, should be Narom instead]], 'nov', 'yas', 'sms', 'nup', 'nys', --[[O]] 'uz-latn', 'uz', 'ann', 'oc', 'ojb', 'frs', 'om', 'nyo', 'ttj', 'ng', 'de-at', 'hz', --[[P]] 'pfl', 'pag', 'ami', 'pap-aw', 'pap', 'jam', 'pcd', 'wes', 'pms', 'pwn', 'nds', 'pdt', 'cpx-latn', 'pl', 'fvr', 'pt', 'pt-br', 'prg', --[[Q]] 'aa', 'kaa', 'quc', 'kk-latn', 'kk-tr', 'crh', 'crh-latn', --[[R]] 'ty', 'ksh', 'ro', 'rmc', 'rmy', 'rgn', 'rm', 'qug', 'qu', 'nyn', --[[S]] 'xsy', 'szy', 'sg', 'sc', 'sro', 'sas', 'sdc', 'sli', 'de-ch', 'sco', 'trv', 'stq', 'st', 'nso', 'tn', 'sq', 'scn', 'loz', 'simple', 'ss', 'sk', 'sl', 'szl', 'so', 'srn', 'sr-latn', 'sr-el', 'sh-latn', 'sh-el', 'sh'--[[latn/cyrl]], 'su', 'fi', 'sv', --[[T]] 'shy', 'shy-latn', 'shi', 'shi-latn', 'tl', 'tzl', 'zgh-latn', 'tpv', 'kab', 'scn-x-tara', 'roa-tara', 'rif', 'tt-latn', 'crh-ro', 'tay', 'tet', 'din', 'vi', 'tg-latn', 'tpi', 'tok', 'tly', 'chy', 've', 'bag', 'tvu', 'aeb-latn', 'tr', 'tk', 'tru', 'tw', 'kcg', --[[U]] 'sju', 'ug-latn', --[[V]] 'vot', 'za', 'vec', 'vep', 'ruq', 'ruq-latn', 'vo', 'vro', 'fiu-vro', 'mcn', 'vut', --[[W]] 'wlx', 'wa', 'bci', 'guc', 'osa-latn', 'vls', 'wal', 'war', 'wo', 'wya', --[[X]] 'ts', --[[Y]] 'yat', 'yav', 'ybb', 'knc', 'yo', --[[Z]] 'diq', 'zea', 'sgs', 'bat-smg', -- Greek [-grek] and Coptic [-copt] alphabets --[['-grek']] 'grc', 'el', 'pnt', --[['-copt',]] 'cop', -- Cyrillic alphabets --[['-cyrl', '-cyrs',]] --[[А]] 'av', 'ady', 'ady-cyrl', 'kbd', 'kbd-cyrl', 'alt', 'ab', --[[Б]] 'ba', 'be', 'be-tarask', 'be-x-old', 'bxr', 'bg', --[[В]] 'ruq-cyrl', --[[Г]] 'inh', --[[д]] 'dlg', --[[И]] 'os', --[[К]] 'sjd', 'kv', 'krc', 'kum', 'crh-cyrl', 'ky', 'mrj', 'kk', 'kk-cyrl', 'kk-kz', --[[Л]] 'lbe', 'lez', --[[М]] 'mk', 'isv-cyrl', 'mdf', 'mo', 'mn', 'rut', --[[Н]] 'gld', 'nog', 'ce', --[[О]] 'mhr', --[[П]] 'koi', --[[Р]] 'rue', 'rsk', 'ru', --[[C]] 'sah', 'sty', 'cu', 'sr-cyrl', 'sr-ec', 'sr'--[[cyrl/latn]], 'sh-cyrl', 'sh-ec', --[[Т]] 'tt-cyrl', 'tt', 'tly-cyrl', 'tg-cyrl', 'tg', 'tyv', --[[У]] 'udm', 'uz-cyrl', 'uk', --[[Х]] 'kjh', 'xal', --[[Ц]] 'cnr-cyrl', --[[Ч]] 'cv', --[[Э]] 'myv', -- Other alphabets (horizontal only) --[['-ital',]] --[['-glag',]] --[['-geor', '-geok',]] 'xmf', 'ka', 'sva', --[['-armn',]] 'hyw', 'hy', -- North Indian abugidas --[['-deva',]] 'anp', 'awa', 'xnr-deva', 'xnr', 'thq', 'ks-deva', 'gju-deva', 'kgg', 'gom-deva', 'gom', 'dgo-deva', 'dgo', 'doi-deva', 'doi', 'dty', 'new', 'ne', 'pi', 'bho', 'bh', 'mag', 'mr', 'rwr', 'mai', 'sa', 'bgc', 'hi', --[['-beng',]] 'as', 'rkt', 'bn', 'bpy', --[['-guru',]] 'pa', --[['-takr',]] 'xnr-takr', 'doi-takr', 'dgo-takr', -- South Indian abugidas --[['-gujr',]] 'gu', --[['-orya',]] 'or', 'dso', 'bfw', --[['-taml',]] 'ta', --[['-telu',]] 'nit', 'te', --[['-kanr',]] 'kn', 'tcy', --[['-mlym',]] 'ml', --[['-sinh',]] 'si', -- Tibeto-Burmese abugidas --[['-lepc',]] 'lep', 'lep-lepc', --[['-sylo',]] 'syl', --[['-tibt',]] 'dz', 'bo', 'lep-tibt', --[['-mtei',]] 'mni', --[['-bugi',]] 'bug-bugi', --[['-mymr',]] 'ksw', 'blk', 'kjp', 'shn', 'mnw', 'my', 'rki', -- Other Central and South-Eastern Asian abugidas --[['-cakm',]] 'ccp', --[['-khmr',]] 'km', --[['-thai',]] 'th', --[['-tale',]] 'tdd', --[['-lana',]] 'nod', --[['-laoo',]] 'lo', --[['-bali',]] 'ban-bali', --[['-java',]] 'jv-java', --[['-olck',]] 'sat', --[['-wara',]] --[['-pauc',]] --[['-mroo',]] --[['-medf',]] --[['-sunu',]] --[['-tnsa',]] -- American and European syllabaries --[['-cher',]] 'chr', --[['-osge',]] 'osa', --[['-cans',]] 'ike', 'ike-cans', 'iu', --[['-hmnp',]] 'hoc', --[['-goth',]] 'got', --[['-moon',]] -- African syllabaries --[['-tfng',]] 'tzm', 'zgh', 'shi-tfng', 'rif-tfng', 'sjs', --[['-ethi',]] 'tig', 'ti', 'am', --[['-berf',]] 'zag-berf', --[['-bass',]] --[['-osma',]] --[['-shaw',]] --[['-plrd',]] -- Hieroglyphic scripts --[['-egyd', '-egyh', '-egyp',]] --[['-hluw',]] --[['-mero','-merc',]] --[['-maya',]] --[['-nkdb',]] --[['-sgnw',]] --[['-visp',]] -- Asian syllabaries --[['-yiii',]] 'ii', -- Korean scripts (alphabet and sinograms) --[['-kore', '-hang', '-jamo',]] 'ko-kp', 'ko', 'ko-kr', -- Japanese scripts (syllabaries and sinograms) --[['-japn', '-hrkt', '-hira', '-kana',]] 'ja', 'ryu', -- Sinographic scripts (plus Bopomofo syllabary) --[['-hanb', '-hani', '-hans', '-hntl', '-hant', '-bopo',]] 'zh', 'zh-cn', 'zh-sg', 'zh-mo', 'zh-hans', 'zh-hant', 'zh-tw', 'zh-hk', 'zh-my', 'wuu-hant', 'wuu', 'wuu-hans', 'hak', 'hak-hant', 'hak-hans', 'lzh', 'zh-classical', 'hsn', 'yue', 'zh-yue', 'yue-hant', 'yue-hans', 'cpx', 'cpx-hant', 'cpx-hans', 'gan', 'gan-hant', 'gan-hans', 'nan-hani', 'nan', 'nan-hant', 'cdo', 'cdo-hant', -- Other vertical scripts (that are rendered horizontally, when not rotated explicitly by style) --[['-mong',]] 'mnc-mong', -- RTL scripts -- Hebrew abjads --[['-hebr',]] 'yi', 'ydd', 'yih', 'he', 'hbo', -- Arabic abjads --[['-arab', '-aran',]] --[[ء]] -- [[ٴ]] --[[ئ]] 'ug-arab', 'ug', --[[ا]] 'ur', 'ary', 'ar', 'acq', 'uz-arab', --[[أ]] --[[ٱ]] --[[ٳ]] --[[ٲ]] --[[ا]] --[[آ]] --[[ب]] 'bqi', 'bsk', 'bgp' ,'bal', 'ms-arab', --[[ب]] --[[ٻ]] --[[ڀ]] --[[پ]] 'ps', 'pnb', --[[ت]] 'aeb-arab', 'aeb', 'azb', --[[ٺ]] --[[ٿ]] --[[ټ]] --[[ٽ]] --[[ٹ]] --[[ج]] 'arq', 'bcc', --[[ڃ]] --[[ڄ]] --[[چ]] --[[ڇ]] --[[ح]] --[[ځ]] --[[ڂ]] --[[څ]] --[[خ]] --[[د]] --[[ڋ]] --[[ڈ]] --[[ډ]] --[[ڊ]] --[[ڍ]] --[[ڎ]] --[[ڏ]] --[[ڐ]] --[[ذ]] --[[ڌ]] --[[ر]] 'bgn', --[[ڕ]] --[[ڒ]] --[[ڔ]] --[[ږ]] --[[ڗ]] --[[ڑ]] --[[ړ]] --[[ز]] --[[ڙ]] --[[ژ]] --[[س]] 'skr', 'skr-arab', 'sd', --[[ڛ]] --[[ښ]] --[[ڜ]] --[[ش]] 'apc', 'acm', 'ajp', --[[ص]] --[[ڝ]] --[[ڞ]] --[[ض]] --[[ط]] --[[ڟ]] --[[ظ]] --[[ع]] 'arb', --[[ڠ]] --[[غ]] --[[ڡ]] --[[ف]] 'fa-af', 'fa', 'prd', --[[ڢ]] --[[ڣ]] --[[ڤ]] --[[ڥ]] --[[ڦ]] --[[ق]] 'kk-arab', 'kk-cn', --[[ڧ]] --[[ڨ]] --[[ك]] 'ku-arab', 'kcn', 'kmr-arab', --[[ګ]] --[[ڮ]] --[[ڬ]] --[[ڭ]] --[[ک]] 'ks', 'ks-arab', 'pbt', 'khw', 'ckb', 'sdh', --[[ڪ]] --[[گ]] 'gju-arab', 'glk', --[[ڰ]] --[[ڱ]] --[[ڳ]] --[[ڲ]] --[[ڴ]] --[[ل]] 'ota', 'lrc', 'luz', 'lki', --[[ڵ]] --[[ڶ]] --[[ڷ]] --[[م]] 'mve', 'mzn', 'arz', 'pst', --[[ں]] --[[ن]] --[[ڼ]] --[[ڻ]] --[[ڽ]] --[[ۃ]] --[[ه]] 'ha-arab', --[[ہ]] 'hno', --[[ھ]] --[[ۂ]] --[[ە]] --[[ۀ]] --[[و]] 'wne', --[[ۄ]] --[[ۆ]] --[[ۅ]] --[[ۇ]] --[[ۈ]] --[[ۉ]] --[[ې]] --[[ۍ]] --[[ى]] --[[ي]] --[[ێ]] --[[ۑ]] --[[ے]] --[[ی]] 'pbu', --[[ۓ]] -- Other semitics abjads --[['-samr', '-armi']] 'arc', --[['-syrc', '-syre', '-syrj', '-syrn',]] 'syc', --[['-thaa', '-diak',]] 'dv', --[['-nkoo',]] 'nqo', --[['-adlm',]] --[['-rohg',]] --[['-yezi',]] --[['-orkh',]] --[['-hung',]] --[['-sidt',]] --[['-gara',]] --[['-ugar',]] --[['-cari',]] --[['-lyci',]] --[['-lydi',]] --[['-palm',]] --[['-sarb',]] --[['-nbat',]] --[['-narb',]] --[['-hatr',]] --[['-elym',]] --[['-prti',]] --[['-phli', '-phlp', '-phlv',]] --[['-avst',]] --[['-pssin']] --[['-pelm',]] --[['-chrs',]] --[['-mani',]] --[['-mand',]] --[['-sogo', '-sogd',]] --[['-xpeo',]] 'xpu', --[['-xsux',]] 'phn', --[['-pcun',]] -- Additional language codes that still need to be sorted by native name can be temporarily placed } setmetatable(p, { quickTests = function() local s = {} for k, lang in pairs(p) do if type(k) ~= 'number' or k < 1 or k ~= math.floor(k) or type(lang) ~= 'string' or #lang < 2 or #lang > 16 or (lang):find('^[a-z][%-0-9a-z]*[0-9a-z]$') ~= 1 or s[lang] then return false, ': invalid sequence of distinct lowercase language codes at p[' .. tostring(k) .. '] = "' .. tostring(lang) .. '"' end s[lang] = true end return true end }) --[=[ To test this module in the Lua console: -- must return true =getmetatable(p).quickTests() --]=] return p te61cs6wt1mcw80o2afs1jjjp98w4rg 10790 10789 2026-08-25T23:38:32Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Multilingual_description/sort]] 10789 Scribunto text/plain --[=[ The documented sort order is by script, then alphabetically by displayed native name (as generated by {{#language: code}}), using the default DUCET order. This allows easier selection by users reading the lists of languages in order to find their own. Please test this order, and maintain it as complete as possible, including legacy codes still used in MediaWiki. Any missing language will be sorted after all languages listed below, just using its internal language code. ]=] local p = { -- LTR scripts -- Latin alphabets --[['-latn', '-latf', '-latg',]] --[[A]] 'aig', 'sma', 'abr', 'ace', 'ang', 'af', 'agq', 'ak', 'gsw', 'als', 'en-us', 'ase', 'smn', 'an', 'aae', 'rup', 'roa-rup', 'frp', 'ast', 'atj', 'gn', 'ay', 'az', --[[B]] 'ksf', 'bfd', 'abs', 'gor', 'id', 'ms', 'bdr', 'bkc', 'bkh', 'bm', 'bax', 'zh-min-nan', 'nan-latn-pehoeji', 'nan-latn-tailo', 'bjn', 'ban', 'jv-x-bms', 'map-bms', 'bug', 'bug-latn', 'bas', 'mui', 'btm', 'bbc', 'bbc-latn', 'zag', 'zag-latn', 'bew', 'sje', 'bcl', 'bi', 'bar', 'bol', 'bs', 'brh', 'br', 'en-gb', --[[C]] 'en-ca', 'cps', 'cal', 'ca', 'ceb', 'cs', 'cho', 'ch', 'cbk-zam', 'ny', 'chn', 'sn', 'tum', 'lua', 'sei', 'co', 'cy', --[[D]] 'dga', 'dag', 'da', 'se', 'se-no', 'se-se', 'se-fi', 'pdc', 'de', 'de-formal', 'de-latf', 'nv', 'dsb', 'non'--[[Dǫnsk tunga]], 'na', 'dua', --[[E]] 'mh', 'et', 'efi', 'etu', 'vmw', 'egl', 'eml', 'en', 'es', 'es-formal', 'es-419', 'eo', 'ext', 'eto', 'eu', 'ee', 'ewo', --[[F]] 'wls', 'gur', 'fmp', 'hif', 'hif-latn', 'fil', 'fon', 'fo', 'fr', 'frc', 'fy', 'ff', 'fur', --[[G]] 'gaa', 'ga', 'gv', 'sm', 'gag', 'gd', 'gl', 'gya', 'aln', 'gpe', 'bbj', 'ki', 'gom-latn', 'guw', 'hak-latn', --[[H]] 'cnh', 'ha', 'ha-latn', 'haw', 'ho', 'hmn', 'hoc-latn', 'hsb', 'hr', 'hrx', --[[I]] 'ibb', 'io', 'igl', 'ig', 'rw', 'rn', 'ilo', 'hil', 'ia', 'ie', 'ike-latn', 'ik', 'bto', 'nr', 'xh', 'zu', 'is', 'isu', 'it', 'iba', --[[J]] 'jv', 'kaj', 'smj', 'jut', --[[K]] 'rmf', 'kbp', 'kea', 'dtp', 'kl', 'kr', 'pam', 'cak', 'kai', 'krl', 'csb', 'ker', 'kw', 'kha', 'hke', 'krj', 'kiu', 'sw', 'bkm', 'kg', 'avk', 'ses', 'ht', 'gcf'--[[kréyòl gwadloupéyen]], 'kri', 'gcr', 'kge', 'ku', 'ku-latn', 'kmr', 'kmr-latn', 'kus', 'fkv', 'kj', 'nmg', 'acf', --[[L]] 'jbo', 'lld', 'lad', 'lkt', 'lns', 'ljp', 'ltg', 'la', 'lv', 'lzz', 'to', 'lb', 'nia', 'lt', 'lij', 'li', 'ln', 'lfn', 'liv', 'olo', 'lmo', 'lg', --[[M]] 'yua', 'mad', 'hu', 'hu-formal', 'vmf', 'mcp', 'mak', 'mg', 'mt', 'mnc', 'mnc-latn', 'mi', 'arn', 'mrh', 'srq', 'fit', 'byv', 'isv', 'isv-latn', 'fat', 'min', 'cdo-latn', 'mwl', 'lus', 'bqz', 'cnr', 'cnr-latn', 'mos', 'mua', 'mus', --[[N]] 'fj', 'nah', 'pcm', 'nap', 'ppl', --[['nrm', should be Narom]] 'nmz', 'nnz', 'nl', 'nl-informal', 'nds-nl', 'cr', 'nge', 'nnh', 'nla', 'yrl', 'niu', 'lem', 'frr', 'pih', 'no', 'nb', 'nn', 'nrf'--[[Nouormand]], 'nrm'--[[currently Nouormand, should be Narom instead]], 'nov', 'yas', 'sms', 'nup', 'nys', --[[O]] 'uz-latn', 'uz', 'ann', 'oc', 'ojb', 'frs', 'om', 'nyo', 'ttj', 'ng', 'de-at', 'hz', --[[P]] 'pfl', 'pag', 'ami', 'pap-aw', 'pap', 'jam', 'pcd', 'wes', 'pms', 'pwn', 'nds', 'pdt', 'cpx-latn', 'pl', 'fvr', 'pt', 'pt-br', 'prg', --[[Q]] 'aa', 'kaa', 'quc', 'kk-latn', 'kk-tr', 'crh', 'crh-latn', --[[R]] 'ty', 'ksh', 'ro', 'rmc', 'rmy', 'rgn', 'rm', 'qug', 'qu', 'nyn', --[[S]] 'xsy', 'szy', 'sg', 'sc', 'sro', 'sas', 'sdc', 'sli', 'de-ch', 'sco', 'trv', 'stq', 'st', 'nso', 'tn', 'sq', 'scn', 'loz', 'simple', 'ss', 'sk', 'sl', 'szl', 'so', 'srn', 'sr-latn', 'sr-el', 'sh-latn', 'sh-el', 'sh'--[[latn/cyrl]], 'su', 'fi', 'sv', --[[T]] 'shy', 'shy-latn', 'shi', 'shi-latn', 'tl', 'tzl', 'zgh-latn', 'tpv', 'kab', 'scn-x-tara', 'roa-tara', 'rif', 'tt-latn', 'crh-ro', 'tay', 'tet', 'din', 'vi', 'tg-latn', 'tpi', 'tok', 'tly', 'chy', 've', 'bag', 'tvu', 'aeb-latn', 'tr', 'tk', 'tru', 'tw', 'kcg', --[[U]] 'sju', 'ug-latn', --[[V]] 'vot', 'za', 'vec', 'vep', 'ruq', 'ruq-latn', 'vo', 'vro', 'fiu-vro', 'mcn', 'vut', --[[W]] 'wlx', 'wa', 'bci', 'guc', 'osa-latn', 'vls', 'wal', 'war', 'wo', 'wya', --[[X]] 'ts', --[[Y]] 'yat', 'yav', 'ybb', 'knc', 'yo', --[[Z]] 'diq', 'zea', 'sgs', 'bat-smg', -- Greek [-grek] and Coptic [-copt] alphabets --[['-grek']] 'grc', 'el', 'pnt', --[['-copt',]] 'cop', -- Cyrillic alphabets --[['-cyrl', '-cyrs',]] --[[А]] 'av', 'ady', 'ady-cyrl', 'kbd', 'kbd-cyrl', 'alt', 'ab', --[[Б]] 'ba', 'be', 'be-tarask', 'be-x-old', 'bxr', 'bg', --[[В]] 'ruq-cyrl', --[[Г]] 'inh', --[[д]] 'dlg', --[[И]] 'os', --[[К]] 'sjd', 'kv', 'krc', 'kum', 'crh-cyrl', 'ky', 'mrj', 'kk', 'kk-cyrl', 'kk-kz', --[[Л]] 'lbe', 'lez', --[[М]] 'mk', 'isv-cyrl', 'mdf', 'mo', 'mn', 'rut', --[[Н]] 'gld', 'nog', 'ce', --[[О]] 'mhr', --[[П]] 'koi', --[[Р]] 'rue', 'rsk', 'ru', --[[C]] 'sah', 'sty', 'cu', 'sr-cyrl', 'sr-ec', 'sr'--[[cyrl/latn]], 'sh-cyrl', 'sh-ec', --[[Т]] 'tt-cyrl', 'tt', 'tly-cyrl', 'tg-cyrl', 'tg', 'tyv', --[[У]] 'udm', 'uz-cyrl', 'uk', --[[Х]] 'kjh', 'xal', --[[Ц]] 'cnr-cyrl', --[[Ч]] 'cv', --[[Э]] 'myv', -- Other alphabets (horizontal only) --[['-ital',]] --[['-glag',]] --[['-geor', '-geok',]] 'xmf', 'ka', 'sva', --[['-armn',]] 'hyw', 'hy', -- North Indian abugidas --[['-deva',]] 'anp', 'awa', 'xnr-deva', 'xnr', 'thq', 'ks-deva', 'gju-deva', 'kgg', 'gom-deva', 'gom', 'dgo-deva', 'dgo', 'doi-deva', 'doi', 'dty', 'new', 'ne', 'pi', 'bho', 'bh', 'mag', 'mr', 'rwr', 'mai', 'sa', 'bgc', 'hi', --[['-beng',]] 'as', 'rkt', 'bn', 'bpy', --[['-guru',]] 'pa', --[['-takr',]] 'xnr-takr', 'doi-takr', 'dgo-takr', -- South Indian abugidas --[['-gujr',]] 'gu', --[['-orya',]] 'or', 'dso', 'bfw', --[['-taml',]] 'ta', --[['-telu',]] 'nit', 'te', --[['-kanr',]] 'kn', 'tcy', --[['-mlym',]] 'ml', --[['-sinh',]] 'si', -- Tibeto-Burmese abugidas --[['-lepc',]] 'lep', 'lep-lepc', --[['-sylo',]] 'syl', --[['-tibt',]] 'dz', 'bo', 'lep-tibt', --[['-mtei',]] 'mni', --[['-bugi',]] 'bug-bugi', --[['-mymr',]] 'ksw', 'blk', 'kjp', 'shn', 'mnw', 'my', 'rki', -- Other Central and South-Eastern Asian abugidas --[['-cakm',]] 'ccp', --[['-khmr',]] 'km', --[['-thai',]] 'th', --[['-tale',]] 'tdd', --[['-lana',]] 'nod', --[['-laoo',]] 'lo', --[['-bali',]] 'ban-bali', --[['-java',]] 'jv-java', --[['-olck',]] 'sat', --[['-wara',]] --[['-pauc',]] --[['-mroo',]] --[['-medf',]] --[['-sunu',]] --[['-tnsa',]] -- American and European syllabaries --[['-cher',]] 'chr', --[['-osge',]] 'osa', --[['-cans',]] 'ike', 'ike-cans', 'iu', --[['-hmnp',]] 'hoc', --[['-goth',]] 'got', --[['-moon',]] -- African syllabaries --[['-tfng',]] 'tzm', 'zgh', 'shi-tfng', 'rif-tfng', 'sjs', --[['-ethi',]] 'tig', 'ti', 'am', --[['-berf',]] 'zag-berf', --[['-bass',]] --[['-osma',]] --[['-shaw',]] --[['-plrd',]] -- Hieroglyphic scripts --[['-egyd', '-egyh', '-egyp',]] --[['-hluw',]] --[['-mero','-merc',]] --[['-maya',]] --[['-nkdb',]] --[['-sgnw',]] --[['-visp',]] -- Asian syllabaries --[['-yiii',]] 'ii', -- Korean scripts (alphabet and sinograms) --[['-kore', '-hang', '-jamo',]] 'ko-kp', 'ko', 'ko-kr', -- Japanese scripts (syllabaries and sinograms) --[['-japn', '-hrkt', '-hira', '-kana',]] 'ja', 'ryu', -- Sinographic scripts (plus Bopomofo syllabary) --[['-hanb', '-hani', '-hans', '-hntl', '-hant', '-bopo',]] 'zh', 'zh-cn', 'zh-sg', 'zh-mo', 'zh-hans', 'zh-hant', 'zh-tw', 'zh-hk', 'zh-my', 'wuu-hant', 'wuu', 'wuu-hans', 'hak', 'hak-hant', 'hak-hans', 'lzh', 'zh-classical', 'hsn', 'yue', 'zh-yue', 'yue-hant', 'yue-hans', 'cpx', 'cpx-hant', 'cpx-hans', 'gan', 'gan-hant', 'gan-hans', 'nan-hani', 'nan', 'nan-hant', 'cdo', 'cdo-hant', -- Other vertical scripts (that are rendered horizontally, when not rotated explicitly by style) --[['-mong',]] 'mnc-mong', -- RTL scripts -- Hebrew abjads --[['-hebr',]] 'yi', 'ydd', 'yih', 'he', 'hbo', -- Arabic abjads --[['-arab', '-aran',]] --[[ء]] -- [[ٴ]] --[[ئ]] 'ug-arab', 'ug', --[[ا]] 'ur', 'ary', 'ar', 'acq', 'uz-arab', --[[أ]] --[[ٱ]] --[[ٳ]] --[[ٲ]] --[[ا]] --[[آ]] --[[ب]] 'bqi', 'bsk', 'bgp' ,'bal', 'ms-arab', --[[ب]] --[[ٻ]] --[[ڀ]] --[[پ]] 'ps', 'pnb', --[[ت]] 'aeb-arab', 'aeb', 'azb', --[[ٺ]] --[[ٿ]] --[[ټ]] --[[ٽ]] --[[ٹ]] --[[ج]] 'arq', 'bcc', --[[ڃ]] --[[ڄ]] --[[چ]] --[[ڇ]] --[[ح]] --[[ځ]] --[[ڂ]] --[[څ]] --[[خ]] --[[د]] --[[ڋ]] --[[ڈ]] --[[ډ]] --[[ڊ]] --[[ڍ]] --[[ڎ]] --[[ڏ]] --[[ڐ]] --[[ذ]] --[[ڌ]] --[[ر]] 'bgn', --[[ڕ]] --[[ڒ]] --[[ڔ]] --[[ږ]] --[[ڗ]] --[[ڑ]] --[[ړ]] --[[ز]] --[[ڙ]] --[[ژ]] --[[س]] 'skr', 'skr-arab', 'sd', --[[ڛ]] --[[ښ]] --[[ڜ]] --[[ش]] 'apc', 'acm', 'ajp', --[[ص]] --[[ڝ]] --[[ڞ]] --[[ض]] --[[ط]] --[[ڟ]] --[[ظ]] --[[ع]] 'arb', --[[ڠ]] --[[غ]] --[[ڡ]] --[[ف]] 'fa-af', 'fa', 'prd', --[[ڢ]] --[[ڣ]] --[[ڤ]] --[[ڥ]] --[[ڦ]] --[[ق]] 'kk-arab', 'kk-cn', --[[ڧ]] --[[ڨ]] --[[ك]] 'ku-arab', 'kcn', 'kmr-arab', --[[ګ]] --[[ڮ]] --[[ڬ]] --[[ڭ]] --[[ک]] 'ks', 'ks-arab', 'pbt', 'khw', 'ckb', 'sdh', --[[ڪ]] --[[گ]] 'gju-arab', 'glk', --[[ڰ]] --[[ڱ]] --[[ڳ]] --[[ڲ]] --[[ڴ]] --[[ل]] 'ota', 'lrc', 'luz', 'lki', --[[ڵ]] --[[ڶ]] --[[ڷ]] --[[م]] 'mve', 'mzn', 'arz', 'pst', --[[ں]] --[[ن]] --[[ڼ]] --[[ڻ]] --[[ڽ]] --[[ۃ]] --[[ه]] 'ha-arab', --[[ہ]] 'hno', --[[ھ]] --[[ۂ]] --[[ە]] --[[ۀ]] --[[و]] 'wne', --[[ۄ]] --[[ۆ]] --[[ۅ]] --[[ۇ]] --[[ۈ]] --[[ۉ]] --[[ې]] --[[ۍ]] --[[ى]] --[[ي]] --[[ێ]] --[[ۑ]] --[[ے]] --[[ی]] 'pbu', --[[ۓ]] -- Other semitics abjads --[['-samr', '-armi']] 'arc', --[['-syrc', '-syre', '-syrj', '-syrn',]] 'syc', --[['-thaa', '-diak',]] 'dv', --[['-nkoo',]] 'nqo', --[['-adlm',]] --[['-rohg',]] --[['-yezi',]] --[['-orkh',]] --[['-hung',]] --[['-sidt',]] --[['-gara',]] --[['-ugar',]] --[['-cari',]] --[['-lyci',]] --[['-lydi',]] --[['-palm',]] --[['-sarb',]] --[['-nbat',]] --[['-narb',]] --[['-hatr',]] --[['-elym',]] --[['-prti',]] --[['-phli', '-phlp', '-phlv',]] --[['-avst',]] --[['-pssin']] --[['-pelm',]] --[['-chrs',]] --[['-mani',]] --[['-mand',]] --[['-sogo', '-sogd',]] --[['-xpeo',]] 'xpu', --[['-xsux',]] 'phn', --[['-pcun',]] -- Additional language codes that still need to be sorted by native name can be temporarily placed } setmetatable(p, { quickTests = function() local s = {} for k, lang in pairs(p) do if type(k) ~= 'number' or k < 1 or k ~= math.floor(k) or type(lang) ~= 'string' or #lang < 2 or #lang > 16 or (lang):find('^[a-z][%-0-9a-z]*[0-9a-z]$') ~= 1 or s[lang] then return false, ': invalid sequence of distinct lowercase language codes at p[' .. tostring(k) .. '] = "' .. tostring(lang) .. '"' end s[lang] = true end return true end }) --[=[ To test this module in the Lua console: -- must return true =getmetatable(p).quickTests() --]=] return p te61cs6wt1mcw80o2afs1jjjp98w4rg Tempilet:Created with Inkscape 10 1371 10791 2026-03-15T07:09:27Z commons>Shizhao 0 10791 wikitext text/x-wiki <noinclude>{{Mbox|type=stop|imageright={{F|Gnome-emblem-important.svg|Z|32}}|text='''Never''' use the template {{Tl|Inkscape}} or {{Tl|Created with Inkscape|link=n}} without the obliged parameters !<br>By using the [[Template:Image generation#Script support|script]] it will automatically be embedded into {{Tl|Image generation}} in a correct manner.|style=border:4px solid #b22222;background:var(--background-color-error-subtle,#FEE);}}</noinclude><!-- -->{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!-- -->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!-- -->{{#invoke:Autotranslate|autotranslate |1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|s|n|p|/|=|#default={{{1|}}}}}}} |2={{#if:{{{logo|}}}|{{{logo}}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#switch:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|0=Inkscape-yes.svg|-1=Inkscape-un.svg|Inkscape-no.svg}}<!-- valid / uncheckable / invalid -->|{{#switch:v|{{{2}}}|{{{1}}}=Inkscape-yes.svg|<!-- specified valid -->|{{#ifeq:{{#invoke:Igenmod|extcode}}|s|Inkscape-ws.svg|Inkscape Logo.svg}}}}}}}} |3=Inkscape |4={{#switch:{{padleft:|1|{{{more}}}}}|,|;|:|.|=|&#32;}}{{{more|.}}}<!-- |#default={{Igen/cat|{{{cni}}}}}}}}}{{#ifeq:{{{more|.}}}|.||&#32;}}{{{more|.}}} -->{{#switch:{{{err|{{{errors|{{{errnum|}}}}}}}}}|={{#switch:{{{2|{{{1}}}}}}|v|/=<!-- -->|{{#ifeq:{{NAMESPACE}}|File|{{#ifeq:{{#invoke:Igenmod|extcode}}|s|{{#invoke:Igenmod|inkscape}}}}}}}}}}<!-- only for SVG files --> |5={{{width|}}} |6={{{style|}}} |7={{#if:{{{cat|{{{category|}}}}}}|{{{cat|{{{category|}}}}}}}} |8=<!-- {{{IMPORTANT|}}} -->{{#if:{{{IMPORTANT|}}}|[[Help:Inkscape#Inkscape_SVG_vs._Plain_SVG|{{I18n/important}}]]<!-- (was italic from Igen) -->{{#switch:{{{cni|}}}<!-- -->|-=<!-- suppress "cat:important" with "cni=-" -->|={{#switch:{{{cat|{{{category|}}}}}}|-|n|no|none=|{{#ifeq:{{#invoke:Igenmod|extcode}}|s<!-- -->|{{Igen/cat|SVG created with Inkscape:Important}}}}}}<!-- -->|#default={{Igen/cat|{{{cni}}}}}}}}}<!-- -->{{#ifeq:{{{Optimized}}}|yes|…[[Help:Inkscape#Inkscape_SVG_vs._Plain_SVG|optimized]]}} |9={{{sort|{{{key|{{{sortkey|}}}}}}}}} |10={{#if:{{{sub|{{{subcat|{{{subcategory|}}}}}}}}}|{{{sub|{{{subcat|{{{subcategory}}}}}}}}}<!-- -->|{{#if:{{{topic|}}}|{{Igen/sub|{{{topic}}}}}}}}} |11={{{err|{{{errors|{{{errnum|}}}}}}}}} |12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!-- -->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!-- -->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) --> |13={{#if:{{{vo|{{{vopt|{{{opt|}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}} |14={{#if:{{{topic|}}}|{{{topic}}}}} |17={{#if:{{{iconsize|}}}|{{{iconsize|}}}}} |18={{#if:{{{c_text|}}}|{{{c_text|}}}}} |base=Created with ...}}<noinclude> {{SVG created with/doc|shorthand=Inkscape|n=y|I=IMPORTANT|igen=I|sandbox=y|vopttext=un|?shortmore=may be used <!-- as default --> for "Inkscape",<br> ::::::::&nbsp;or the abbreviation "Im" for "Inkscape{{!}}IMPORTANT=[[Category:SVG created with Inkscape:Important|yes]]".|code=}} </noinclude> 7smpyio8c0396bv2dy52cpeydqjiaqc 10792 10791 2026-08-25T23:38:32Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Created_with_Inkscape]] 10791 wikitext text/x-wiki <noinclude>{{Mbox|type=stop|imageright={{F|Gnome-emblem-important.svg|Z|32}}|text='''Never''' use the template {{Tl|Inkscape}} or {{Tl|Created with Inkscape|link=n}} without the obliged parameters !<br>By using the [[Template:Image generation#Script support|script]] it will automatically be embedded into {{Tl|Image generation}} in a correct manner.|style=border:4px solid #b22222;background:var(--background-color-error-subtle,#FEE);}}</noinclude><!-- -->{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!-- -->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!-- -->{{#invoke:Autotranslate|autotranslate |1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|s|n|p|/|=|#default={{{1|}}}}}}} |2={{#if:{{{logo|}}}|{{{logo}}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#switch:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|0=Inkscape-yes.svg|-1=Inkscape-un.svg|Inkscape-no.svg}}<!-- valid / uncheckable / invalid -->|{{#switch:v|{{{2}}}|{{{1}}}=Inkscape-yes.svg|<!-- specified valid -->|{{#ifeq:{{#invoke:Igenmod|extcode}}|s|Inkscape-ws.svg|Inkscape Logo.svg}}}}}}}} |3=Inkscape |4={{#switch:{{padleft:|1|{{{more}}}}}|,|;|:|.|=|&#32;}}{{{more|.}}}<!-- |#default={{Igen/cat|{{{cni}}}}}}}}}{{#ifeq:{{{more|.}}}|.||&#32;}}{{{more|.}}} -->{{#switch:{{{err|{{{errors|{{{errnum|}}}}}}}}}|={{#switch:{{{2|{{{1}}}}}}|v|/=<!-- -->|{{#ifeq:{{NAMESPACE}}|File|{{#ifeq:{{#invoke:Igenmod|extcode}}|s|{{#invoke:Igenmod|inkscape}}}}}}}}}}<!-- only for SVG files --> |5={{{width|}}} |6={{{style|}}} |7={{#if:{{{cat|{{{category|}}}}}}|{{{cat|{{{category|}}}}}}}} |8=<!-- {{{IMPORTANT|}}} -->{{#if:{{{IMPORTANT|}}}|[[Help:Inkscape#Inkscape_SVG_vs._Plain_SVG|{{I18n/important}}]]<!-- (was italic from Igen) -->{{#switch:{{{cni|}}}<!-- -->|-=<!-- suppress "cat:important" with "cni=-" -->|={{#switch:{{{cat|{{{category|}}}}}}|-|n|no|none=|{{#ifeq:{{#invoke:Igenmod|extcode}}|s<!-- -->|{{Igen/cat|SVG created with Inkscape:Important}}}}}}<!-- -->|#default={{Igen/cat|{{{cni}}}}}}}}}<!-- -->{{#ifeq:{{{Optimized}}}|yes|…[[Help:Inkscape#Inkscape_SVG_vs._Plain_SVG|optimized]]}} |9={{{sort|{{{key|{{{sortkey|}}}}}}}}} |10={{#if:{{{sub|{{{subcat|{{{subcategory|}}}}}}}}}|{{{sub|{{{subcat|{{{subcategory}}}}}}}}}<!-- -->|{{#if:{{{topic|}}}|{{Igen/sub|{{{topic}}}}}}}}} |11={{{err|{{{errors|{{{errnum|}}}}}}}}} |12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!-- -->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!-- -->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) --> |13={{#if:{{{vo|{{{vopt|{{{opt|}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}} |14={{#if:{{{topic|}}}|{{{topic}}}}} |17={{#if:{{{iconsize|}}}|{{{iconsize|}}}}} |18={{#if:{{{c_text|}}}|{{{c_text|}}}}} |base=Created with ...}}<noinclude> {{SVG created with/doc|shorthand=Inkscape|n=y|I=IMPORTANT|igen=I|sandbox=y|vopttext=un|?shortmore=may be used <!-- as default --> for "Inkscape",<br> ::::::::&nbsp;or the abbreviation "Im" for "Inkscape{{!}}IMPORTANT=[[Category:SVG created with Inkscape:Important|yes]]".|code=}} </noinclude> 7smpyio8c0396bv2dy52cpeydqjiaqc Tempilet:SVGvalid 10 1372 10793 2023-03-28T02:31:19Z commons>Sarang 0 +parm 10793 wikitext text/x-wiki {{Ifsvg|<!-- don't make anything if it is not an SVG file -->{{#switch:/|{{{1}}}|{{{2}}}=<!--{{SVGvalid/cat|{{{3|}}}|{{{8|}}}}}-->|#default=<!-- "/": all suppressed -->{{#switch:{{{7}}}|none|n=<!--{{SVGvalid/cat|{{{3|}}}|{{{8|}}}}}-->|#default=<!-- same with "vo=n[one]" -->{{#switch:s|{{{1}}}|{{{2}}}=<!--{{SVGvalid/cat|{{{3|}}}|{{{8|}}}}}-->|#default=<!-- -->{{#if:{{{3|}}}|{{#ifeq:{{{3}}}|0|{{ValidSVG|opt={{#if:{{{7|}}}|{{{7}}}|&ss=1#source}}|<!-- error 0 is valid -->cat=<nowiki/>|style={{{4|}}}|width={{{5|}}}|more={{{6|}}}|c=y}}<!-- -->|{{InvalidSVG|opt={{#if:{{{7|}}}|{{{7}}}|&ss=1}}|err={{{3}}}|<!-- -->cat=<nowiki/>|style={{{4|}}}|width={{{5|}}}|more={{{6|}}}}} }}<!-- -->|{{#if:{{{2|}}}|{{#ifeq:{{lc:{{{2}}}}}|v|{{ValidSVG|opt={{#if:{{{7|}}}|{{{7}}}|&ss=1#source}}|<!-- -->cat=<nowiki/>|style={{{4|}}}|width={{{5|}}}|more={{{6|}}}|c=y}} }}<!-- -->|{{#ifeq:{{{1}}}|v|{{ValidSVG|opt={{#if:{{{7|}}}|{{{7}}}|&ss=1#source}}|<!-- -->cat=<nowiki/>|style={{{4|}}}|width={{{5|}}}|more={{{6|}}}|c=y}} }} }}}}<!-- -->{{#ifeq:{{{9}}}|-||{{#switch:{{NAMESPACENUMBER}}|6|7|14|15={{#ifeq:{{{7}}}|><!-- -->|[[Category:Large SVG files|{{padleft:{{#expr:20000000000/{{#invoke:File|size|file={{SUBJECTPAGENAME}}}} round 0}}|6|0}}]]<!-- -->}}}}}}}}}}}}}}<noinclude> {{documentation}} </noinclude> 37hiv1iqvoqzu1ysqlw6ke07vi3dy4y 10794 10793 2026-08-25T23:38:32Z RAPTOR7762 18 1 revision imported from [[:commons:Template:SVGvalid]] 10793 wikitext text/x-wiki {{Ifsvg|<!-- don't make anything if it is not an SVG file -->{{#switch:/|{{{1}}}|{{{2}}}=<!--{{SVGvalid/cat|{{{3|}}}|{{{8|}}}}}-->|#default=<!-- "/": all suppressed -->{{#switch:{{{7}}}|none|n=<!--{{SVGvalid/cat|{{{3|}}}|{{{8|}}}}}-->|#default=<!-- same with "vo=n[one]" -->{{#switch:s|{{{1}}}|{{{2}}}=<!--{{SVGvalid/cat|{{{3|}}}|{{{8|}}}}}-->|#default=<!-- -->{{#if:{{{3|}}}|{{#ifeq:{{{3}}}|0|{{ValidSVG|opt={{#if:{{{7|}}}|{{{7}}}|&ss=1#source}}|<!-- error 0 is valid -->cat=<nowiki/>|style={{{4|}}}|width={{{5|}}}|more={{{6|}}}|c=y}}<!-- -->|{{InvalidSVG|opt={{#if:{{{7|}}}|{{{7}}}|&ss=1}}|err={{{3}}}|<!-- -->cat=<nowiki/>|style={{{4|}}}|width={{{5|}}}|more={{{6|}}}}} }}<!-- -->|{{#if:{{{2|}}}|{{#ifeq:{{lc:{{{2}}}}}|v|{{ValidSVG|opt={{#if:{{{7|}}}|{{{7}}}|&ss=1#source}}|<!-- -->cat=<nowiki/>|style={{{4|}}}|width={{{5|}}}|more={{{6|}}}|c=y}} }}<!-- -->|{{#ifeq:{{{1}}}|v|{{ValidSVG|opt={{#if:{{{7|}}}|{{{7}}}|&ss=1#source}}|<!-- -->cat=<nowiki/>|style={{{4|}}}|width={{{5|}}}|more={{{6|}}}|c=y}} }} }}}}<!-- -->{{#ifeq:{{{9}}}|-||{{#switch:{{NAMESPACENUMBER}}|6|7|14|15={{#ifeq:{{{7}}}|><!-- -->|[[Category:Large SVG files|{{padleft:{{#expr:20000000000/{{#invoke:File|size|file={{SUBJECTPAGENAME}}}} round 0}}|6|0}}]]<!-- -->}}}}}}}}}}}}}}<noinclude> {{documentation}} </noinclude> 37hiv1iqvoqzu1ysqlw6ke07vi3dy4y Tempilet:0 10 1373 10795 2020-07-12T21:39:46Z commons>Tacsipacsi 0 move documentation to subpage 10795 wikitext text/x-wiki <span style="visibility:hidden; color:transparent;">{{{1|0}}}</span><noinclude>{{documentation}}</noinclude> 82xanatmprmzbmh8v27ej1w0o5sidjg 10796 10795 2026-08-25T23:38:33Z RAPTOR7762 18 1 revision imported from [[:commons:Template:0]] 10795 wikitext text/x-wiki <span style="visibility:hidden; color:transparent;">{{{1|0}}}</span><noinclude>{{documentation}}</noinclude> 82xanatmprmzbmh8v27ej1w0o5sidjg Tempilet:Created with .../en 10 1374 10797 2023-06-20T05:19:08Z commons>Sarang 0 10797 wikitext text/x-wiki {{Created with/en |1={{{1|}}} |logo={{{2|SVG Simple Icon.svg}}}<!-- default does not show when used --> |toolcat={{{3|}}} |more={{{4|.}}} |width={{{5|}}} |style={{{6|}}} |category={{{7|}}} |key={{{9|}}} |sub={{{10|}}} |err={{{11|}}} |w3c={{{12|}}} |what={{#switch:{{{12}}} |N|n={{Iffile|{{uc:{{#invoke:File|extension|file={{PAGENAME}}}}}}}} {{#if:{{{8|}}}|{{{8}}}|{{W|Computer graphics|graphic}}}} |I|V|S|s={{W|Vector images|vector image}} |A={{{20|{{{14}}}}}} |#default={{#if:{{{8|}}}|{{{8}}}|image}}}} |big={{{13|}}} |top={{{14|}}}<!-- genderless language - else {{#if:{{{14|}}}|{{Igen/top|{{{14}}}|~|lang=en}}|}} --> |dif={{{15|}}} |tool={{#if:{{{16|}}}|{{{16}}}|{{W|{{{3|}}}|<noinclude>en:Wp</noinclude>}}}}{{{8|}}} |iconsize={{{17|}}} |c_text={{{18|{{{c_text|}}}}}} |19={{{19|}}} <!-- test --> }}<noinclude> {{TrRq|d|+}} {{translated tag|marker}}[[Category:Created with ... I18nTemplates|{{PAGENAME}}]]{{Heavily used template}} {{documentation|Template:Created with .../doc}} </noinclude> r4n8wfpf3mz76akpqpgwbiv7zgclbof 10798 10797 2026-08-25T23:38:33Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Created_with_.../en]] 10797 wikitext text/x-wiki {{Created with/en |1={{{1|}}} |logo={{{2|SVG Simple Icon.svg}}}<!-- default does not show when used --> |toolcat={{{3|}}} |more={{{4|.}}} |width={{{5|}}} |style={{{6|}}} |category={{{7|}}} |key={{{9|}}} |sub={{{10|}}} |err={{{11|}}} |w3c={{{12|}}} |what={{#switch:{{{12}}} |N|n={{Iffile|{{uc:{{#invoke:File|extension|file={{PAGENAME}}}}}}}} {{#if:{{{8|}}}|{{{8}}}|{{W|Computer graphics|graphic}}}} |I|V|S|s={{W|Vector images|vector image}} |A={{{20|{{{14}}}}}} |#default={{#if:{{{8|}}}|{{{8}}}|image}}}} |big={{{13|}}} |top={{{14|}}}<!-- genderless language - else {{#if:{{{14|}}}|{{Igen/top|{{{14}}}|~|lang=en}}|}} --> |dif={{{15|}}} |tool={{#if:{{{16|}}}|{{{16}}}|{{W|{{{3|}}}|<noinclude>en:Wp</noinclude>}}}}{{{8|}}} |iconsize={{{17|}}} |c_text={{{18|{{{c_text|}}}}}} |19={{{19|}}} <!-- test --> }}<noinclude> {{TrRq|d|+}} {{translated tag|marker}}[[Category:Created with ... I18nTemplates|{{PAGENAME}}]]{{Heavily used template}} {{documentation|Template:Created with .../doc}} </noinclude> r4n8wfpf3mz76akpqpgwbiv7zgclbof Module:Languages 828 1375 10799 2024-05-02T14:41:34Z commons>Uzume 0 cleanup simplifying some things 10799 Scribunto text/plain --[=[ Not globally exposed. Internal function only. language_subpages( frame, transform, options ) Parameters frame: The frame that was passed to the method invoked. The first argument or the page argument will be respected. transform: A transform function. Example: function( basepagename, subpagename, code, langname ) end options: An object with options. Example: { abort= { on=function() end, time=0.8 } } Following options are available: abort: Aborts iterating over the subpages if one of the conditions is met. If the process is aborted, nil is returned! on: Function to be called if an abort-condition was met. cycles: The maximum number of subpages to run over. time: Maximum time to spend running over the subpages. ]=] local function language_subpages( frame, transform, options ) local args, pargs, options = frame.args, ( frame:getParent() or {} ).args or {}, options or {}; local title = args.page or args[1] or pargs.page or pargs[1] or ""; local abort = options.abort or {}; local at, clock = type( abort.on ), os.clock(); local ac = function() if at == 'function' or ( at == 'table' and getmetatable(abort.on).__call ) then abort.on(); end end local tt = type( transform ); local page = require( 'Module:Page' ); title = page.clean(title); if tt == 'function' or ( tt == 'table' and getmetatable(transform).__call ) then local fetch, pages, langcode, langname = mw.language.fetchLanguageName, {}; --[==[ / \ / | \ / · \ ¯¯¯¯¯¯¯ Page.subpages() no longer works because it attempted to parse the HTML content generated by calling the parser function "Special:Prefixindex:" which is no longer expanded in Lua but converted to a "stripped tag" (containing a unique identifier surrounded by ASCII DEL characters) representing the tag name and its parameters. The actual expansion of stripped tags can no longer be performed in Lua. Now unstripping these tags just kills ALL these tags (except "wiki" tags) instead of performing their expansion by running the extension code. Only MediaWiki can unstrip these tags in texts after they have been returned by Lua. For this reason, page.subpages() is now completely empty (Module:Page no longer works). This cannot be bypassed, except by using a Scribunto extension library if lifting the limits set by mw.unstrip. Note that "Special:Prefixindex:" is also costly, even if it just requires a single database query to get all subpages, instead of one costly #ifexist or one costly mw.title() property reading per tested subpage to know if it exists. For now there's still no reliable way to get a list of subpages, or performing queries similar to the [[Special:Prefixindex]] page or list members of a category like when viewing a category page. Ideally, there should exist a method for such queries on Title objects returned by the mw.title library; but for now there's none. In Lua now, the only expansion possible with an immediate effect is the expansion of standard templates, all special tags or special pages, or parser function extensions do not work (Only the #expr parser function is supported by using an external Scribunto library). --]==] for pg in page.subpages( title, { ignoreNS=true } ) do if abort.cycles then abort.cycles = abort.cycles - 1 if 0 == abort.cycles then return ac() end end if abort.time then if (os.clock() - clock) > abort.time then return ac() end end if mw.ustring.len( pg ) <= 12 then langcode = string.lower( pg ); langname = fetch( langcode ); if langname ~= '' then table.insert( pages, transform( title, pg, langcode, langname ) ); end end end return pages; end return {}; end local function cloneArgs(frame) local args, pargs = {}, {} for k,v in pairs( frame.args ) do args[k] = v end if frame:getParent() then for k,v in pairs( frame:getParent().args ) do pargs[k] = v end end return args, pargs end local p = {}; --[=[ Usage: {{#invoke:languages|internal|Template:Adjective}} ]=] function p.internal(frame) return table.concat( language_subpages( frame, function( title, page, code, name ) return mw.ustring.format( '<bdi class="language lang-%s" lang="%s">[[%s/%s|%s]]</bdi>', code, code, title, page, name ); end ), '&nbsp;<b>·</b>&#32;' ); end --[=[ Usage: {{#invoke:languages|external|Template:Adjective}} ]=] function p.external(frame) return table.concat( language_subpages( frame, function( title, page, code, name ) return mw.ustring.format( '<bdi class="language lang-%s" lang="%s">[%s/%s %s]</bdi>', code, code, tostring( mw.uri.fullUrl( title ) ), page:gsub( ' ', '_' ), name ); end ), '&nbsp;<b>·</b>&#32;' ); end --[=[ forEachLanguage This function iterates over all language codes known to MediaWiki based on a maintained list replacing patterns in a pattern-string for each language Usage {{#invoke:Languages|forEachLanguage |pattern=patternstring |before=string to insert before iteration |after=string added after iteration |sep=separator string between iterations |inLang=langcode used for $lnTrP and $lnTrUC1 }} Parameters pattern: A pattern string which is processed for each language and which is concatenated at the end and returned as one string before: A string that is inserted before the concatenated result after: A string that is inserted after the concatenated result sep: A string that is inserted between each line created from the pattern while iterating (like ProcessedPattern_sep_ProcessedPattern_sep_ProcessedPattern) inLang: Langcode to use for $lnTrP and $lnTrUC1 preprocess: if set to a non-empty value, the output will be preprocessed before being returned. Warning The output is still not prepreprocessed by default: so parser functions and magic keywords generated by the pattern are still not executed and replaced, and template transclusions are still not expanded (see examples in other functions in this module). When using this function directly from a MediaWiki page or template, this means it is only possible to use patterns generating basic MediaWiki formatting or HTML tags. It you want the output to be preprocessed (in the given frame), set the preprocess parameter to a non-empty string. Patterns $lc - language code such as en or de $lnP - language name in own language (autonym) $lnUC1 - language name in own language (autonym), first letter upper case $lnTrP - language name translated to the language requested by language code passed to inLang $lnTrUC1 - language name translated to the language requested by language code passed to inLang, first letter upper case Example {{#invoke:Languages|forEachLanguage|pattern=<span lang="$lc" xml:lang="$lc" class="language lang-$lc">[[Page/$lc|$lnP]]</span>}} ]=] -- =p.forEachLanguage({ args= { pattern = "$lc - $lnTrP\n", inLang = "en" } }) function p.forEachLanguage(frame) local l = require("Module:Languages/List") local ret = {} local lang = mw.language local line local pattern = frame.args.pattern or frame.args[1] or "" local prefix = frame.args.before or frame.args[2] or "" local postfix = frame.args.after or frame.args[3] or "" local sep = frame.args.sep or frame.args.separator or frame.args[4] or "" local inLang = frame.args.inLang or frame.args[5] or nil local preprocess = frame.args.preprocess or frame.args[6] or "" local langNameUCFirstReq = not not pattern:find( "$lnUC1", 1, true ) local langNameReq = not not pattern:find( "$lnP", 1, true ) or langNameUCFirstReq local langNameTranslatedUCFirstReq = not not pattern:find( "$lnTrUC1", 1, true ) local langNameTranslatedReq = not not pattern:find( "$lnTrP", 1, true ) or langNameTranslatedUCFirstReq local contentLangInstance = mw.language.getContentLanguage() local inLangLangInstance local l = mw.language.fetchLanguageNames() -- autonyms local lTr local lcIdList = require('Module:Languages/List').getSortedList( l ) if langNameTranslatedReq then inLangLangInstance = --[==[ mw.getLanguage( inLang ) -- Quota hit in :ucfirst() if using too many langInstances --]==] contentLangInstance lTr = mw.language.fetchLanguageNames( inLang ) -- translated names end for _, lcId in pairs( lcIdList ) do local subst = lcId:gsub('%%', '%%%%') line = pattern:gsub( "%$lc", subst ) local langName, langInstance -- autonym (name of lcId in locale lcId) if langNameReq then langName = l[lcId] subst = langName:gsub('%%', '%%%%') line = line:gsub( "%$lnP", subst ) end if langNameUCFirstReq then langInstance = --[==[ mw.getLanguage( lcId ) -- Quota hit in :ucfirst() if using too many langInstances --]==] contentLangInstance langName = langInstance:ucfirst( langName ) subst = langName:gsub('%%', '%%%%') line = line:gsub( "%$lnUC1", subst ) end -- translated name (name of lcId in locale inLang) if langNameTranslatedReq then langName = lTr[lcId] subst = langName:gsub('%%', '%%%%') line = line:gsub( "%$lnTrP", subst ) end if langNameTranslatedUCFirstReq then langName = inLangLangInstance:ucfirst( langName ) subst = langName:gsub('%%', '%%%%') line = line:gsub( "%$lnTrUC1", subst ) end table.insert(ret, line) end ret = prefix .. table.concat( ret, sep ) .. postfix if preprocess ~= '' then ret = frame:preprocess(ret) end return ret end --[=[ Provide logic for [[Template:Lle]] (Language Links external, to be substituted, language names written exactly as #language would provide them) Warning: may expands too many costly #ifexist without limitation (if not substituted into a separate "/lang" template) ]=] function p.lle(frame) return frame:preprocess( p.forEachLanguage({ args = { pattern = '{{subst:#ifexist:{{{1}}}/$lc|[{{subst:fullurl:{{{1}}}/$lc}} <bdi class="language lang-$lc" lang="$lc">$lnP</bdi>]&nbsp;<b>∙</b>&#32;<!--\n-->}}' } }) ) end --[=[ Provide logic for [[Template:Ll]] (Language Links internal, to be substituted, language names written exactly as #language would provide them) Warning: may expands too many costly #ifexist without limitation (if not substituted into a separate "/lang" template) ]=] function p.ll(frame) return frame:preprocess( p.forEachLanguage({ args = { pattern = '{{subst:#ifexist:{{{1}}}/$lc|[[{{{1}}}/$lc|<bdi class="language lang-$lc" lang="$lc">$lnP</bdi>]]&nbsp;<b>∙</b>&#32;<!--\n-->}}' } }) ) end -------------------------------------------------------- --- Different approaches for [[Template:Lang links]] --- -------------------------------------------------------- --[=[ Provide logic for [[Template:Lang links]] Using a cute Hybrid-Method: First check the subpages which is quite fast; if there are too many fall back to checking for each language page individually ]=] -- =p.langLinksNonExpensive({ args= { page='Commons:Picture of the Year/2010' }, getParent=function() end }) -- =p.langLinksNonExpensive({ args= { page='Main Page' }, getParent=function() end }) -- =p.langLinksNonExpensive({ args= { page='Template:No_source_since' }, getParent=function() end }) -- =p.langLinksNonExpensive({ args= { page='MediaWiki:Gadget-HotCat' }, getParent=function() end }) function p.langLinksNonExpensive(frame) local args, pargs = frame.args, ( frame:getParent() or {} ).args or {}; local title = args.page or args[1] or pargs.page or pargs[1] or ""; local contentLangInstance = mw.language.getContentLanguage(); local pages2 if frame.preprocess == nil then frame = mw.getCurrentFrame() end --[==[ local options = { abort = { time = 3.5, on = function() pages2 = p.forEachLanguage({ args = { pattern = '{{#ifexist:' .. title .. '/$lc|[[' .. title .. '/$lc|<bdi lang="$lc">$lnP</bdi>]]&nbsp;<b>∙</b>&#32;}}' } }) end } } local pages = language_subpages( frame, function( title, page, code, langname ) return mw.ustring.format( '[[%s/%s|<bdi lang="%s">%s</bdi>]]</span>&nbsp;<b>∙</b>&#32;', title, page, code, langname ) end, options ); return pages2 and frame:preprocess(pages2) or table.concat(pages, ''); --]==] return frame:preprocess( p.forEachLanguage( { args = { pattern = '{{#ifexist:' .. title .. '/$lc|[[' .. title .. '/$lc|<bdi lang="$lc">$lnP</bdi>]]&nbsp;<b>∙</b>&#32;}}' } }) ) end --------------------------------------------------------- ----------------- [[Template:Autolang]] ----------------- --------------------------------------------------------- --[[ Works like {{autotranslate}} just allowing an unlimited number of arguments, even named arguments. It's doing Magic! No arguments should be passed to {{#invoke:}} ]] function p.autolang(frame) local args, pargs = cloneArgs( frame ) if nil == args.useargs then if not args.base then args = pargs end elseif 'both' == args.useargs then for k,v in pairs(args) do pargs[k] = v end args = pargs elseif 'parent' == args.useargs then args = pargs if pargs.base and not args.base then args.base = pargs.base end end local base = args.base local userlang = frame:callParserFunction('int', 'lang') local tl, tlns = 'Template:', 10 local tlb, fallback1, currenttemplate, currenttemplatepage local fallback, contentlang = mw.text.split( userlang, '-', true )[1], mw.language.getContentLanguage():getCode() local function createReturn(title) local ret local tlargs = {} -- When LUA is invoked, templates are already expanded. This must be respected. return frame:expandTemplate{ title = title, args = args } end if not base then return ("'autolang' in [[Module:Languages]] was called but the 'base' parameter could not be found." .. "The base parameter specifies the template that's subpages will be sought for a suitable translation.") end tlb = tl .. base .. '/' currenttemplate = tlb .. userlang currenttemplatepage = mw.title.new( currenttemplate, tlns ) if currenttemplatepage and currenttemplatepage.exists then return createReturn(currenttemplate) end fallback1 = frame:preprocess( '{{Fallback|1=' .. base .. '|2=' .. userlang .. '}}' ) if fallback1 ~= contentlang then return createReturn(tlb .. fallback1) end currenttemplate = tlb .. fallback currenttemplatepage = mw.title.new( currenttemplate, tlns ) if currenttemplatepage and currenttemplatepage.exists then return createReturn(currenttemplate) end currenttemplate = tlb .. contentlang currenttemplatepage = mw.title.new( currenttemplate, tlns ) if currenttemplatepage and currenttemplatepage.exists then return createReturn(currenttemplate) end return createReturn(tl .. base) end --[=[ Usage: {{#invoke:languages|isKnownLanguageTag|gsw}} -> 1 {{#invoke:languages|isKnownLanguageTag|doesNotExist}} -> ]=] function p.isKnownLanguageTag(frame) return mw.language.isKnownLanguageTag( frame.args[1] or frame.args.tag or frame.args.code or '' ) and '1' or '' end function p.file_languages(frame) local M_link = require( 'Module:Link' ) local contentLangInstance = mw.language.getContentLanguage() local pattern = frame.args.pattern or '%s (%s)' local original = frame.args.original or mw.title.getCurrentTitle().text local ext_start, _ = string.find( original, '\.%w+$' ) local file_ext = string.sub( original, ext_start ) original = string.sub( original, 0, ext_start - 1 ) return frame:preprocess( '<gallery>\n' .. (table.concat( M_link.forEachLink( p.forEachLanguage({ args = { pattern = '[[$lc]]' } }), function( linkInfo ) local filename = mw.ustring.format( pattern, original, linkInfo.text ) .. file_ext local filepage = mw.title.new( filename, 6 ) if filepage and filepage.exists then return mw.ustring.format( '%s|%s', filename, mw.language.fetchLanguageName( linkInfo.text ) ) else return nil end end ), '\n' )) .. '\n</gallery>' ) end function p.runTests() return p.langLinksNonExpensive({ args = { page = 'Module:Languages/testcases/test' }, getParent = function() end }) == '[[Module:Languages/testcases/test/de|<bdi lang="de">Deutsch</bdi>]]&nbsp;<b>∙</b>&#32;' .. '[[Module:Languages/testcases/test/en|<bdi lang="en">English</bdi>]]&nbsp;<b>∙</b>&#32;' end return p; 5mkofohau4gbugagap0iayfhj6cyv4b 10800 10799 2026-08-25T23:38:33Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Languages]] 10799 Scribunto text/plain --[=[ Not globally exposed. Internal function only. language_subpages( frame, transform, options ) Parameters frame: The frame that was passed to the method invoked. The first argument or the page argument will be respected. transform: A transform function. Example: function( basepagename, subpagename, code, langname ) end options: An object with options. Example: { abort= { on=function() end, time=0.8 } } Following options are available: abort: Aborts iterating over the subpages if one of the conditions is met. If the process is aborted, nil is returned! on: Function to be called if an abort-condition was met. cycles: The maximum number of subpages to run over. time: Maximum time to spend running over the subpages. ]=] local function language_subpages( frame, transform, options ) local args, pargs, options = frame.args, ( frame:getParent() or {} ).args or {}, options or {}; local title = args.page or args[1] or pargs.page or pargs[1] or ""; local abort = options.abort or {}; local at, clock = type( abort.on ), os.clock(); local ac = function() if at == 'function' or ( at == 'table' and getmetatable(abort.on).__call ) then abort.on(); end end local tt = type( transform ); local page = require( 'Module:Page' ); title = page.clean(title); if tt == 'function' or ( tt == 'table' and getmetatable(transform).__call ) then local fetch, pages, langcode, langname = mw.language.fetchLanguageName, {}; --[==[ / \ / | \ / · \ ¯¯¯¯¯¯¯ Page.subpages() no longer works because it attempted to parse the HTML content generated by calling the parser function "Special:Prefixindex:" which is no longer expanded in Lua but converted to a "stripped tag" (containing a unique identifier surrounded by ASCII DEL characters) representing the tag name and its parameters. The actual expansion of stripped tags can no longer be performed in Lua. Now unstripping these tags just kills ALL these tags (except "wiki" tags) instead of performing their expansion by running the extension code. Only MediaWiki can unstrip these tags in texts after they have been returned by Lua. For this reason, page.subpages() is now completely empty (Module:Page no longer works). This cannot be bypassed, except by using a Scribunto extension library if lifting the limits set by mw.unstrip. Note that "Special:Prefixindex:" is also costly, even if it just requires a single database query to get all subpages, instead of one costly #ifexist or one costly mw.title() property reading per tested subpage to know if it exists. For now there's still no reliable way to get a list of subpages, or performing queries similar to the [[Special:Prefixindex]] page or list members of a category like when viewing a category page. Ideally, there should exist a method for such queries on Title objects returned by the mw.title library; but for now there's none. In Lua now, the only expansion possible with an immediate effect is the expansion of standard templates, all special tags or special pages, or parser function extensions do not work (Only the #expr parser function is supported by using an external Scribunto library). --]==] for pg in page.subpages( title, { ignoreNS=true } ) do if abort.cycles then abort.cycles = abort.cycles - 1 if 0 == abort.cycles then return ac() end end if abort.time then if (os.clock() - clock) > abort.time then return ac() end end if mw.ustring.len( pg ) <= 12 then langcode = string.lower( pg ); langname = fetch( langcode ); if langname ~= '' then table.insert( pages, transform( title, pg, langcode, langname ) ); end end end return pages; end return {}; end local function cloneArgs(frame) local args, pargs = {}, {} for k,v in pairs( frame.args ) do args[k] = v end if frame:getParent() then for k,v in pairs( frame:getParent().args ) do pargs[k] = v end end return args, pargs end local p = {}; --[=[ Usage: {{#invoke:languages|internal|Template:Adjective}} ]=] function p.internal(frame) return table.concat( language_subpages( frame, function( title, page, code, name ) return mw.ustring.format( '<bdi class="language lang-%s" lang="%s">[[%s/%s|%s]]</bdi>', code, code, title, page, name ); end ), '&nbsp;<b>·</b>&#32;' ); end --[=[ Usage: {{#invoke:languages|external|Template:Adjective}} ]=] function p.external(frame) return table.concat( language_subpages( frame, function( title, page, code, name ) return mw.ustring.format( '<bdi class="language lang-%s" lang="%s">[%s/%s %s]</bdi>', code, code, tostring( mw.uri.fullUrl( title ) ), page:gsub( ' ', '_' ), name ); end ), '&nbsp;<b>·</b>&#32;' ); end --[=[ forEachLanguage This function iterates over all language codes known to MediaWiki based on a maintained list replacing patterns in a pattern-string for each language Usage {{#invoke:Languages|forEachLanguage |pattern=patternstring |before=string to insert before iteration |after=string added after iteration |sep=separator string between iterations |inLang=langcode used for $lnTrP and $lnTrUC1 }} Parameters pattern: A pattern string which is processed for each language and which is concatenated at the end and returned as one string before: A string that is inserted before the concatenated result after: A string that is inserted after the concatenated result sep: A string that is inserted between each line created from the pattern while iterating (like ProcessedPattern_sep_ProcessedPattern_sep_ProcessedPattern) inLang: Langcode to use for $lnTrP and $lnTrUC1 preprocess: if set to a non-empty value, the output will be preprocessed before being returned. Warning The output is still not prepreprocessed by default: so parser functions and magic keywords generated by the pattern are still not executed and replaced, and template transclusions are still not expanded (see examples in other functions in this module). When using this function directly from a MediaWiki page or template, this means it is only possible to use patterns generating basic MediaWiki formatting or HTML tags. It you want the output to be preprocessed (in the given frame), set the preprocess parameter to a non-empty string. Patterns $lc - language code such as en or de $lnP - language name in own language (autonym) $lnUC1 - language name in own language (autonym), first letter upper case $lnTrP - language name translated to the language requested by language code passed to inLang $lnTrUC1 - language name translated to the language requested by language code passed to inLang, first letter upper case Example {{#invoke:Languages|forEachLanguage|pattern=<span lang="$lc" xml:lang="$lc" class="language lang-$lc">[[Page/$lc|$lnP]]</span>}} ]=] -- =p.forEachLanguage({ args= { pattern = "$lc - $lnTrP\n", inLang = "en" } }) function p.forEachLanguage(frame) local l = require("Module:Languages/List") local ret = {} local lang = mw.language local line local pattern = frame.args.pattern or frame.args[1] or "" local prefix = frame.args.before or frame.args[2] or "" local postfix = frame.args.after or frame.args[3] or "" local sep = frame.args.sep or frame.args.separator or frame.args[4] or "" local inLang = frame.args.inLang or frame.args[5] or nil local preprocess = frame.args.preprocess or frame.args[6] or "" local langNameUCFirstReq = not not pattern:find( "$lnUC1", 1, true ) local langNameReq = not not pattern:find( "$lnP", 1, true ) or langNameUCFirstReq local langNameTranslatedUCFirstReq = not not pattern:find( "$lnTrUC1", 1, true ) local langNameTranslatedReq = not not pattern:find( "$lnTrP", 1, true ) or langNameTranslatedUCFirstReq local contentLangInstance = mw.language.getContentLanguage() local inLangLangInstance local l = mw.language.fetchLanguageNames() -- autonyms local lTr local lcIdList = require('Module:Languages/List').getSortedList( l ) if langNameTranslatedReq then inLangLangInstance = --[==[ mw.getLanguage( inLang ) -- Quota hit in :ucfirst() if using too many langInstances --]==] contentLangInstance lTr = mw.language.fetchLanguageNames( inLang ) -- translated names end for _, lcId in pairs( lcIdList ) do local subst = lcId:gsub('%%', '%%%%') line = pattern:gsub( "%$lc", subst ) local langName, langInstance -- autonym (name of lcId in locale lcId) if langNameReq then langName = l[lcId] subst = langName:gsub('%%', '%%%%') line = line:gsub( "%$lnP", subst ) end if langNameUCFirstReq then langInstance = --[==[ mw.getLanguage( lcId ) -- Quota hit in :ucfirst() if using too many langInstances --]==] contentLangInstance langName = langInstance:ucfirst( langName ) subst = langName:gsub('%%', '%%%%') line = line:gsub( "%$lnUC1", subst ) end -- translated name (name of lcId in locale inLang) if langNameTranslatedReq then langName = lTr[lcId] subst = langName:gsub('%%', '%%%%') line = line:gsub( "%$lnTrP", subst ) end if langNameTranslatedUCFirstReq then langName = inLangLangInstance:ucfirst( langName ) subst = langName:gsub('%%', '%%%%') line = line:gsub( "%$lnTrUC1", subst ) end table.insert(ret, line) end ret = prefix .. table.concat( ret, sep ) .. postfix if preprocess ~= '' then ret = frame:preprocess(ret) end return ret end --[=[ Provide logic for [[Template:Lle]] (Language Links external, to be substituted, language names written exactly as #language would provide them) Warning: may expands too many costly #ifexist without limitation (if not substituted into a separate "/lang" template) ]=] function p.lle(frame) return frame:preprocess( p.forEachLanguage({ args = { pattern = '{{subst:#ifexist:{{{1}}}/$lc|[{{subst:fullurl:{{{1}}}/$lc}} <bdi class="language lang-$lc" lang="$lc">$lnP</bdi>]&nbsp;<b>∙</b>&#32;<!--\n-->}}' } }) ) end --[=[ Provide logic for [[Template:Ll]] (Language Links internal, to be substituted, language names written exactly as #language would provide them) Warning: may expands too many costly #ifexist without limitation (if not substituted into a separate "/lang" template) ]=] function p.ll(frame) return frame:preprocess( p.forEachLanguage({ args = { pattern = '{{subst:#ifexist:{{{1}}}/$lc|[[{{{1}}}/$lc|<bdi class="language lang-$lc" lang="$lc">$lnP</bdi>]]&nbsp;<b>∙</b>&#32;<!--\n-->}}' } }) ) end -------------------------------------------------------- --- Different approaches for [[Template:Lang links]] --- -------------------------------------------------------- --[=[ Provide logic for [[Template:Lang links]] Using a cute Hybrid-Method: First check the subpages which is quite fast; if there are too many fall back to checking for each language page individually ]=] -- =p.langLinksNonExpensive({ args= { page='Commons:Picture of the Year/2010' }, getParent=function() end }) -- =p.langLinksNonExpensive({ args= { page='Main Page' }, getParent=function() end }) -- =p.langLinksNonExpensive({ args= { page='Template:No_source_since' }, getParent=function() end }) -- =p.langLinksNonExpensive({ args= { page='MediaWiki:Gadget-HotCat' }, getParent=function() end }) function p.langLinksNonExpensive(frame) local args, pargs = frame.args, ( frame:getParent() or {} ).args or {}; local title = args.page or args[1] or pargs.page or pargs[1] or ""; local contentLangInstance = mw.language.getContentLanguage(); local pages2 if frame.preprocess == nil then frame = mw.getCurrentFrame() end --[==[ local options = { abort = { time = 3.5, on = function() pages2 = p.forEachLanguage({ args = { pattern = '{{#ifexist:' .. title .. '/$lc|[[' .. title .. '/$lc|<bdi lang="$lc">$lnP</bdi>]]&nbsp;<b>∙</b>&#32;}}' } }) end } } local pages = language_subpages( frame, function( title, page, code, langname ) return mw.ustring.format( '[[%s/%s|<bdi lang="%s">%s</bdi>]]</span>&nbsp;<b>∙</b>&#32;', title, page, code, langname ) end, options ); return pages2 and frame:preprocess(pages2) or table.concat(pages, ''); --]==] return frame:preprocess( p.forEachLanguage( { args = { pattern = '{{#ifexist:' .. title .. '/$lc|[[' .. title .. '/$lc|<bdi lang="$lc">$lnP</bdi>]]&nbsp;<b>∙</b>&#32;}}' } }) ) end --------------------------------------------------------- ----------------- [[Template:Autolang]] ----------------- --------------------------------------------------------- --[[ Works like {{autotranslate}} just allowing an unlimited number of arguments, even named arguments. It's doing Magic! No arguments should be passed to {{#invoke:}} ]] function p.autolang(frame) local args, pargs = cloneArgs( frame ) if nil == args.useargs then if not args.base then args = pargs end elseif 'both' == args.useargs then for k,v in pairs(args) do pargs[k] = v end args = pargs elseif 'parent' == args.useargs then args = pargs if pargs.base and not args.base then args.base = pargs.base end end local base = args.base local userlang = frame:callParserFunction('int', 'lang') local tl, tlns = 'Template:', 10 local tlb, fallback1, currenttemplate, currenttemplatepage local fallback, contentlang = mw.text.split( userlang, '-', true )[1], mw.language.getContentLanguage():getCode() local function createReturn(title) local ret local tlargs = {} -- When LUA is invoked, templates are already expanded. This must be respected. return frame:expandTemplate{ title = title, args = args } end if not base then return ("'autolang' in [[Module:Languages]] was called but the 'base' parameter could not be found." .. "The base parameter specifies the template that's subpages will be sought for a suitable translation.") end tlb = tl .. base .. '/' currenttemplate = tlb .. userlang currenttemplatepage = mw.title.new( currenttemplate, tlns ) if currenttemplatepage and currenttemplatepage.exists then return createReturn(currenttemplate) end fallback1 = frame:preprocess( '{{Fallback|1=' .. base .. '|2=' .. userlang .. '}}' ) if fallback1 ~= contentlang then return createReturn(tlb .. fallback1) end currenttemplate = tlb .. fallback currenttemplatepage = mw.title.new( currenttemplate, tlns ) if currenttemplatepage and currenttemplatepage.exists then return createReturn(currenttemplate) end currenttemplate = tlb .. contentlang currenttemplatepage = mw.title.new( currenttemplate, tlns ) if currenttemplatepage and currenttemplatepage.exists then return createReturn(currenttemplate) end return createReturn(tl .. base) end --[=[ Usage: {{#invoke:languages|isKnownLanguageTag|gsw}} -> 1 {{#invoke:languages|isKnownLanguageTag|doesNotExist}} -> ]=] function p.isKnownLanguageTag(frame) return mw.language.isKnownLanguageTag( frame.args[1] or frame.args.tag or frame.args.code or '' ) and '1' or '' end function p.file_languages(frame) local M_link = require( 'Module:Link' ) local contentLangInstance = mw.language.getContentLanguage() local pattern = frame.args.pattern or '%s (%s)' local original = frame.args.original or mw.title.getCurrentTitle().text local ext_start, _ = string.find( original, '\.%w+$' ) local file_ext = string.sub( original, ext_start ) original = string.sub( original, 0, ext_start - 1 ) return frame:preprocess( '<gallery>\n' .. (table.concat( M_link.forEachLink( p.forEachLanguage({ args = { pattern = '[[$lc]]' } }), function( linkInfo ) local filename = mw.ustring.format( pattern, original, linkInfo.text ) .. file_ext local filepage = mw.title.new( filename, 6 ) if filepage and filepage.exists then return mw.ustring.format( '%s|%s', filename, mw.language.fetchLanguageName( linkInfo.text ) ) else return nil end end ), '\n' )) .. '\n</gallery>' ) end function p.runTests() return p.langLinksNonExpensive({ args = { page = 'Module:Languages/testcases/test' }, getParent = function() end }) == '[[Module:Languages/testcases/test/de|<bdi lang="de">Deutsch</bdi>]]&nbsp;<b>∙</b>&#32;' .. '[[Module:Languages/testcases/test/en|<bdi lang="en">English</bdi>]]&nbsp;<b>∙</b>&#32;' end return p; 5mkofohau4gbugagap0iayfhj6cyv4b Module:Error 828 1376 10801 2025-12-05T08:26:52Z commons>Achim55 0 [[Commons:Rollback|Reverted]] edits by [[Special:Contributions/~2025-38542-98|~2025-38542-98]] ([[User talk:~2025-38542-98|talk]]) to last revision by Achim55 10801 Scribunto text/plain -- This module implements {{error}}. local p = {} local function _error(args) local tag = mw.ustring.lower(tostring(args.tag)) -- Work out what html tag we should use. if not (tag == 'p' or tag == 'span' or tag == 'div') then tag = 'strong' end -- Generate the html. return tostring(mw.html.create(tag) :addClass('error') :wikitext(tostring(args.message or args[1] or error('no message specified', 2))) ) end function p.error(frame) local args if type(frame.args) == 'table' then -- We're being called via #invoke. The args are passed through to the module -- from the template page, so use the args that were passed into the template. args = frame.args else -- We're being called from another module or from the debug console, so assume -- the args are passed in directly. args = frame end -- If the message parameter is present but blank, change it to nil so that Lua will -- consider it false. if args.message == "" then args.message = nil end return _error(args) end return p 75bhqz94c9juppi0uajeqaixt1565oq 10802 10801 2026-08-25T23:38:33Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Error]] 10801 Scribunto text/plain -- This module implements {{error}}. local p = {} local function _error(args) local tag = mw.ustring.lower(tostring(args.tag)) -- Work out what html tag we should use. if not (tag == 'p' or tag == 'span' or tag == 'div') then tag = 'strong' end -- Generate the html. return tostring(mw.html.create(tag) :addClass('error') :wikitext(tostring(args.message or args[1] or error('no message specified', 2))) ) end function p.error(frame) local args if type(frame.args) == 'table' then -- We're being called via #invoke. The args are passed through to the module -- from the template page, so use the args that were passed into the template. args = frame.args else -- We're being called from another module or from the debug console, so assume -- the args are passed in directly. args = frame end -- If the message parameter is present but blank, change it to nil so that Lua will -- consider it false. if args.message == "" then args.message = nil end return _error(args) end return p 75bhqz94c9juppi0uajeqaixt1565oq Tempilet:Validextension 10 1377 10803 2023-06-09T05:57:21Z commons>Sarang 0 test 10803 wikitext text/x-wiki {{#ifeq:{{lc:{{padleft:|1|{{{3}}}}}}}|e<!-- valid extension ? (any case allowed) -->|{{#switch:{{lc:{{{1|}}}}} |{{lc:{{{2|}}}}}.png=png |{{lc:{{{2|}}}}}.svg=svg |{{lc:{{{2|}}}}}.jpg=jpg |{{lc:{{{2|}}}}}.gif=gif |{{lc:{{{2|}}}}}.jpeg=jpg |{{lc:{{{2|}}}}}.pdf=pdf |{{lc:{{{2|}}}}}.tif |{{lc:{{{2|}}}}}.tiff=tif |{{lc:{{{2|}}}}}.xcf=xcf |{{lc:{{{2|}}}}}.mid=mid |{{lc:{{{2|}}}}}.ogg=ogg |{{lc:{{{2|}}}}}.ogv=ogv |{{lc:{{{2|}}}}}.djvu=djvu |{{lc:{{{2|}}}}}.oga=oga |{{lc:{{{2|}}}}}.flac=flac |{{lc:{{{2|}}}}}.wav=wav |{{lc:{{{2|}}}}}.webm=webm |{{{4|{{Str right|{{{1|}}}|{{Str len|{{{2|}}}.}}}}}}}<!-- -->}}<!-- file name after valid extension removed (any case allowed) -->|{{#switch:{{lc:{{{1|}}}}} |{{lc:{{{2|}}}}}.png |{{lc:{{{2|}}}}}.svg |{{lc:{{{2|}}}}}.jpg |{{lc:{{{2|}}}}}.gif |{{lc:{{{2|}}}}}.jpeg |{{lc:{{{2|}}}}}.pdf |{{lc:{{{2|}}}}}.tif |{{lc:{{{2|}}}}}.tiff |{{lc:{{{2|}}}}}.xcf |{{lc:{{{2|}}}}}.mid |{{lc:{{{2|}}}}}.ogg |{{lc:{{{2|}}}}}.ogv |{{lc:{{{2|}}}}}.djvu |{{lc:{{{2|}}}}}.oga |{{lc:{{{2|}}}}}.flac |{{lc:{{{2|}}}}}.wav |{{lc:{{{2|}}}}}.webm={{{2|}}} |{{{4|{{{2|}}}}}}<!-- -->}}}}<noinclude> {{#ifexist:{{FULLPAGENAME}}/doc|{{Documentation}}| <br> The template is transcluded with <nowiki>{{Tl|Validextension|</nowiki>''filename''<nowiki>|{{#invoke:File|woExtension|file=</nowiki>''filename''<nowiki>}}|?}}</nowiki> where the third parameter specifies whether the file name or the extension (<code>3=e</code>) should be returned. }} </noinclude> lvp32dg6l6ewgy0iy25qgm4wxey40f8 10804 10803 2026-08-25T23:38:33Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Validextension]] 10803 wikitext text/x-wiki {{#ifeq:{{lc:{{padleft:|1|{{{3}}}}}}}|e<!-- valid extension ? (any case allowed) -->|{{#switch:{{lc:{{{1|}}}}} |{{lc:{{{2|}}}}}.png=png |{{lc:{{{2|}}}}}.svg=svg |{{lc:{{{2|}}}}}.jpg=jpg |{{lc:{{{2|}}}}}.gif=gif |{{lc:{{{2|}}}}}.jpeg=jpg |{{lc:{{{2|}}}}}.pdf=pdf |{{lc:{{{2|}}}}}.tif |{{lc:{{{2|}}}}}.tiff=tif |{{lc:{{{2|}}}}}.xcf=xcf |{{lc:{{{2|}}}}}.mid=mid |{{lc:{{{2|}}}}}.ogg=ogg |{{lc:{{{2|}}}}}.ogv=ogv |{{lc:{{{2|}}}}}.djvu=djvu |{{lc:{{{2|}}}}}.oga=oga |{{lc:{{{2|}}}}}.flac=flac |{{lc:{{{2|}}}}}.wav=wav |{{lc:{{{2|}}}}}.webm=webm |{{{4|{{Str right|{{{1|}}}|{{Str len|{{{2|}}}.}}}}}}}<!-- -->}}<!-- file name after valid extension removed (any case allowed) -->|{{#switch:{{lc:{{{1|}}}}} |{{lc:{{{2|}}}}}.png |{{lc:{{{2|}}}}}.svg |{{lc:{{{2|}}}}}.jpg |{{lc:{{{2|}}}}}.gif |{{lc:{{{2|}}}}}.jpeg |{{lc:{{{2|}}}}}.pdf |{{lc:{{{2|}}}}}.tif |{{lc:{{{2|}}}}}.tiff |{{lc:{{{2|}}}}}.xcf |{{lc:{{{2|}}}}}.mid |{{lc:{{{2|}}}}}.ogg |{{lc:{{{2|}}}}}.ogv |{{lc:{{{2|}}}}}.djvu |{{lc:{{{2|}}}}}.oga |{{lc:{{{2|}}}}}.flac |{{lc:{{{2|}}}}}.wav |{{lc:{{{2|}}}}}.webm={{{2|}}} |{{{4|{{{2|}}}}}}<!-- -->}}}}<noinclude> {{#ifexist:{{FULLPAGENAME}}/doc|{{Documentation}}| <br> The template is transcluded with <nowiki>{{Tl|Validextension|</nowiki>''filename''<nowiki>|{{#invoke:File|woExtension|file=</nowiki>''filename''<nowiki>}}|?}}</nowiki> where the third parameter specifies whether the file name or the extension (<code>3=e</code>) should be returned. }} </noinclude> lvp32dg6l6ewgy0iy25qgm4wxey40f8 Tempilet:Clr 10 1378 10809 2019-07-16T02:05:07Z commons>4nn1l2 0 Changed protection level for "[[Template:Clr]]": downgraded protection level per [[Special:Permalink/357548402|consensus]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite)) 10809 wikitext text/x-wiki #REDIRECT [[Template:Clear]] {{template redirect|protected}} safwu6mgmr4om83b5isttzjq3da7lel 10810 10809 2026-08-25T23:38:33Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Clr]] 10809 wikitext text/x-wiki #REDIRECT [[Template:Clear]] {{template redirect|protected}} safwu6mgmr4om83b5isttzjq3da7lel Tempilet:Igen/cat 10 1379 10811 2022-10-31T19:55:51Z commons>Jonesey95 0 Fix [[Special:LintErrors|Linter]] errors. 10811 wikitext text/x-wiki {{#if:{{{1|}}}|{{#ifeq:{{{1|}}}|-||{{#ifeq:{{lc:{{padleft:|5|{{{1}}}}}}}|&#91;[cat|{{{1}}}|[[Category:{{{1}}}{{#switch:{{{2|-}}}|-=|␢|={{!}}&#32;|{{!}}{{{2}}}}}]]}}}}}}<noinclude> {{Heavily used template}} This subtemplate deals with a parameter which may be passed from elsewhere, and has an unknown format.<br /><br /> The template checks: when the 1{{exp|st}} parameter is a "<code>-</code>" (minus/hyphen), nothing is done;<br /> otherwise it checks whether the 1{{exp|st}} parameter starts with "<code><nowiki>[[Cat</nowiki></code>": * if yes, it is passed for categorizing as-it-is; * if not, it is preceded with "<code><nowiki>[[Category:</nowiki></code>" : and trailed with <small>(''an optional sorting item and'')</small> "<code><nowiki>]]</nowiki></code>", and then passed. The 2{{exp|nd}} parameter may be any sorting item: * to '''avoid''': don't define it, or define as "-"; * to use a '''space''': define empty "<code>2=</code>", or "<code>&amp;#32;</code>" or "<code>␢</code>". [[Category:Image generation subtemplates| ]] </noinclude> emuu02fsti0wmsfucfsb06perox7f6i 10812 10811 2026-08-25T23:38:33Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Igen/cat]] 10811 wikitext text/x-wiki {{#if:{{{1|}}}|{{#ifeq:{{{1|}}}|-||{{#ifeq:{{lc:{{padleft:|5|{{{1}}}}}}}|&#91;[cat|{{{1}}}|[[Category:{{{1}}}{{#switch:{{{2|-}}}|-=|␢|={{!}}&#32;|{{!}}{{{2}}}}}]]}}}}}}<noinclude> {{Heavily used template}} This subtemplate deals with a parameter which may be passed from elsewhere, and has an unknown format.<br /><br /> The template checks: when the 1{{exp|st}} parameter is a "<code>-</code>" (minus/hyphen), nothing is done;<br /> otherwise it checks whether the 1{{exp|st}} parameter starts with "<code><nowiki>[[Cat</nowiki></code>": * if yes, it is passed for categorizing as-it-is; * if not, it is preceded with "<code><nowiki>[[Category:</nowiki></code>" : and trailed with <small>(''an optional sorting item and'')</small> "<code><nowiki>]]</nowiki></code>", and then passed. The 2{{exp|nd}} parameter may be any sorting item: * to '''avoid''': don't define it, or define as "-"; * to use a '''space''': define empty "<code>2=</code>", or "<code>&amp;#32;</code>" or "<code>␢</code>". [[Category:Image generation subtemplates| ]] </noinclude> emuu02fsti0wmsfucfsb06perox7f6i Tempilet:See also 10 1380 10813 2024-08-18T09:19:17Z commons>Matrix 0 add template styles 10813 wikitext text/x-wiki <templatestyles src="See also/styles.css" /><div role="note" class="see-also">[[File:System-search.svg|x25px|middle|link=]]<!-- -->{{int:Seealso}}{{Colon}}<!-- -->[[:{{{ 1|<noinclude>{{FULLPAGENAME}}</noinclude>}}}|{{#if: {{{ 2|}}} |{{{ 2}}}|{{{ 1|<noinclude>{{FULLPAGENAME}}</noinclude>}}}}}]]<!-- -->{{#if: {{{ 3|}}} | {{{{#if: {{{ 5|}}} | Comma | And }} }}[[:{{{ 3|}}}|{{{ {{#if: {{{ 4|}}} | 4 | 3 }} }}}]]<!-- -->{{#if: {{{ 5|}}} | {{{{#if: {{{ 7|}}} | Comma | And }} }}[[:{{{ 5|}}}|{{{ {{#if: {{{ 6|}}} | 6 | 5 }} }}}]]<!-- -->{{#if: {{{ 7|}}} | {{{{#if: {{{ 9|}}} | Comma | And }} }}[[:{{{ 7|}}}|{{{ {{#if: {{{ 8|}}} | 8 | 7 }} }}}]]<!-- -->{{#if: {{{ 9|}}} | {{{{#if: {{{11|}}} | Comma | And }} }}[[:{{{ 9|}}}|{{{ {{#if: {{{10|}}} | 10 | 9 }} }}}]]<!-- -->{{#if: {{{11|}}} | {{{{#if: {{{13|}}} | Comma | And }} }}[[:{{{11|}}}|{{{ {{#if: {{{12|}}} | 12 | 11 }} }}}]]<!-- -->{{#if: {{{13|}}} | {{{{#if: {{{15|}}} | Comma | And }} }}[[:{{{13|}}}|{{{ {{#if: {{{14|}}} | 14 | 13 }} }}}]]<!-- -->{{#if: {{{15|}}} | {{{{#if: {{{17|}}} | Comma | And }} }}[[:{{{15|}}}|{{{ {{#if: {{{16|}}} | 16 | 15 }} }}}]]<!-- -->{{#if: {{{17|}}} | {{{{#if: {{{19|}}} | Comma | And }} }}[[:{{{17|}}}|{{{ {{#if: {{{18|}}} | 18 | 17 }} }}}]]<!-- -->{{#if: {{{19|}}} | {{{{#if: {{{21|}}} | Comma | And }} }}[[:{{{19|}}}|{{{ {{#if: {{{20|}}} | 20 | 19 }} }}}]]<!-- -->{{#if: {{{21|}}} | {{{{#if: {{{23|}}} | Comma | And }} }}[[:{{{21|}}}|{{{ {{#if: {{{22|}}} | 22 | 21 }} }}}]]<!-- -->{{#if: {{{23|}}} | {{{{#if: {{{25|}}} | Comma | And }} }}[[:{{{23|}}}|{{{ {{#if: {{{24|}}} | 24 | 23 }} }}}]]<!-- -->{{#if: {{{25|}}} | {{{{#if: {{{27|}}} | Comma | And }} }}[[:{{{25|}}}|{{{ {{#if: {{{26|}}} | 26 | 25 }} }}}]]<!-- -->{{#if: {{{27|}}} | {{{{#if: {{{29|}}} | Comma | And }} }}[[:{{{27|}}}|{{{ {{#if: {{{28|}}} | 28 | 27 }} }}}]]<!-- -->{{#if: {{{29|}}} | {{{{#if: {{{31|}}} | Comma | And }} }}[[:{{{29|}}}|{{{ {{#if: {{{30|}}} | 30 | 29 }} }}}]]<!-- -->{{#if: {{{31|}}} | {{and}}<b class="error">more</b>}} }} }} }} }} }} }} }} }} }} }} }} }} }} }}<!-- -->{{#if: {{{for|}}} | &nbsp;— {{{for|}}} }}{{Full stop}}<!-- --></div><noinclude>{{documentation}}</noinclude> g25cxdnp9s9soggzjo5z98p4le15xdx 10814 10813 2026-08-25T23:38:33Z RAPTOR7762 18 1 revision imported from [[:commons:Template:See_also]] 10813 wikitext text/x-wiki <templatestyles src="See also/styles.css" /><div role="note" class="see-also">[[File:System-search.svg|x25px|middle|link=]]<!-- -->{{int:Seealso}}{{Colon}}<!-- -->[[:{{{ 1|<noinclude>{{FULLPAGENAME}}</noinclude>}}}|{{#if: {{{ 2|}}} |{{{ 2}}}|{{{ 1|<noinclude>{{FULLPAGENAME}}</noinclude>}}}}}]]<!-- -->{{#if: {{{ 3|}}} | {{{{#if: {{{ 5|}}} | Comma | And }} }}[[:{{{ 3|}}}|{{{ {{#if: {{{ 4|}}} | 4 | 3 }} }}}]]<!-- -->{{#if: {{{ 5|}}} | {{{{#if: {{{ 7|}}} | Comma | And }} }}[[:{{{ 5|}}}|{{{ {{#if: {{{ 6|}}} | 6 | 5 }} }}}]]<!-- -->{{#if: {{{ 7|}}} | {{{{#if: {{{ 9|}}} | Comma | And }} }}[[:{{{ 7|}}}|{{{ {{#if: {{{ 8|}}} | 8 | 7 }} }}}]]<!-- -->{{#if: {{{ 9|}}} | {{{{#if: {{{11|}}} | Comma | And }} }}[[:{{{ 9|}}}|{{{ {{#if: {{{10|}}} | 10 | 9 }} }}}]]<!-- -->{{#if: {{{11|}}} | {{{{#if: {{{13|}}} | Comma | And }} }}[[:{{{11|}}}|{{{ {{#if: {{{12|}}} | 12 | 11 }} }}}]]<!-- -->{{#if: {{{13|}}} | {{{{#if: {{{15|}}} | Comma | And }} }}[[:{{{13|}}}|{{{ {{#if: {{{14|}}} | 14 | 13 }} }}}]]<!-- -->{{#if: {{{15|}}} | {{{{#if: {{{17|}}} | Comma | And }} }}[[:{{{15|}}}|{{{ {{#if: {{{16|}}} | 16 | 15 }} }}}]]<!-- -->{{#if: {{{17|}}} | {{{{#if: {{{19|}}} | Comma | And }} }}[[:{{{17|}}}|{{{ {{#if: {{{18|}}} | 18 | 17 }} }}}]]<!-- -->{{#if: {{{19|}}} | {{{{#if: {{{21|}}} | Comma | And }} }}[[:{{{19|}}}|{{{ {{#if: {{{20|}}} | 20 | 19 }} }}}]]<!-- -->{{#if: {{{21|}}} | {{{{#if: {{{23|}}} | Comma | And }} }}[[:{{{21|}}}|{{{ {{#if: {{{22|}}} | 22 | 21 }} }}}]]<!-- -->{{#if: {{{23|}}} | {{{{#if: {{{25|}}} | Comma | And }} }}[[:{{{23|}}}|{{{ {{#if: {{{24|}}} | 24 | 23 }} }}}]]<!-- -->{{#if: {{{25|}}} | {{{{#if: {{{27|}}} | Comma | And }} }}[[:{{{25|}}}|{{{ {{#if: {{{26|}}} | 26 | 25 }} }}}]]<!-- -->{{#if: {{{27|}}} | {{{{#if: {{{29|}}} | Comma | And }} }}[[:{{{27|}}}|{{{ {{#if: {{{28|}}} | 28 | 27 }} }}}]]<!-- -->{{#if: {{{29|}}} | {{{{#if: {{{31|}}} | Comma | And }} }}[[:{{{29|}}}|{{{ {{#if: {{{30|}}} | 30 | 29 }} }}}]]<!-- -->{{#if: {{{31|}}} | {{and}}<b class="error">more</b>}} }} }} }} }} }} }} }} }} }} }} }} }} }} }}<!-- -->{{#if: {{{for|}}} | &nbsp;— {{{for|}}} }}{{Full stop}}<!-- --></div><noinclude>{{documentation}}</noinclude> g25cxdnp9s9soggzjo5z98p4le15xdx Tempilet:T2 10 1381 10817 2024-08-28T08:25:05Z commons>CptViraj 0 Protected "[[Template:T2]]": [[Special:MyLanguage/Commons:Protection policy|Widely used template]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite)) 10817 wikitext text/x-wiki {{T/main|{{{1|}}} |{{{2|}}} |{{{3|{{{lang|}}}}}} |{{{4|}}} |{{{5|}}} |incl={{{incl|{{{i|0}}}}}} |code={{{code|}}} |link={{{link|}}} |case={{{case|}}} |i18n={{{i18n|}}} |parm={{{parm|}}} |full={{{full|}}} }}<noinclude> {{documentation|Template:T/doc}} </noinclude> 7nzvba6cslh4dv8uugeoo6zh7oxm81g 10818 10817 2026-08-25T23:38:33Z RAPTOR7762 18 1 revision imported from [[:commons:Template:T2]] 10817 wikitext text/x-wiki {{T/main|{{{1|}}} |{{{2|}}} |{{{3|{{{lang|}}}}}} |{{{4|}}} |{{{5|}}} |incl={{{incl|{{{i|0}}}}}} |code={{{code|}}} |link={{{link|}}} |case={{{case|}}} |i18n={{{i18n|}}} |parm={{{parm|}}} |full={{{full|}}} }}<noinclude> {{documentation|Template:T/doc}} </noinclude> 7nzvba6cslh4dv8uugeoo6zh7oxm81g Tempilet:Documentation/i18n/en 10 1382 10821 2024-08-12T19:16:34Z commons>FuzzyBot 0 Updating to match new version of source page 10821 wikitext text/x-wiki <languages/> <onlyinclude>{{Documentation/layout | lang = {{{lang|en}}} <!-- {{Documentation}} parameters: --> |1={{{1|}}} |heading={{{heading|{{{2|}}}}}} |content={{{content|}}} <!-- $1 is automatically replaced by [[Template:Documentation/layout]] using {{tmpl}} --> | text = This documentation is [[w:Wikipedia:Transclusion|transcluded]] from $1. <!-- DEPRECATED - New translations for these messages go in [[Data:I18n/Documentation.tab]]: --> |edit=edit |history=history |view=view |documentation=Documentation }}</onlyinclude> {{translated tag|documentation}} syeqdw02j60lht0iyj1vf0qoc9vdmhz 10822 10821 2026-08-25T23:38:34Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Documentation/i18n/en]] 10821 wikitext text/x-wiki <languages/> <onlyinclude>{{Documentation/layout | lang = {{{lang|en}}} <!-- {{Documentation}} parameters: --> |1={{{1|}}} |heading={{{heading|{{{2|}}}}}} |content={{{content|}}} <!-- $1 is automatically replaced by [[Template:Documentation/layout]] using {{tmpl}} --> | text = This documentation is [[w:Wikipedia:Transclusion|transcluded]] from $1. <!-- DEPRECATED - New translations for these messages go in [[Data:I18n/Documentation.tab]]: --> |edit=edit |history=history |view=view |documentation=Documentation }}</onlyinclude> {{translated tag|documentation}} syeqdw02j60lht0iyj1vf0qoc9vdmhz Tempilet:Documentation/layout 10 1383 10823 2025-04-17T10:24:09Z commons>Verdy p 0 10823 wikitext text/x-wiki <div id="template-documentation" class="template-documentation"><templatestyles src="Template:Documentation/styles.css" /><!-- -->{{#if: {{PROTECTIONLEVEL:edit}} | {{Protected}} }}<!-- -->{{#ifeq: {{{heading|}}} | false | | <div class="template-documentation-heading" {{#if: {{{lang|}}} | lang="{{{lang|}}}" dir="{{#dir:{{{lang|}}}}}" }}><!-- --><span class="template-documentation-title">{{#if: {{{heading|}}} | {{{heading|}}} | [[File:Test Template Info-Icon.svg|50px|link=|alt=]] {{#switch:{{NAMESPACENUMBER}} |6 = {{#invoke:TNTFallback|msg|lang={{{lang|{{int:lang}}}}}|I18n/Documentation.tab|file-namespace-heading|fallback={{{documentation|}}}}} |10 = {{#invoke:TNTFallback|msg|lang={{{lang|{{int:lang}}}}}|I18n/Documentation.tab|template-namespace-heading|fallback={{{documentation|}}}}} |828 = {{#invoke:TNTFallback|msg|lang={{{lang|{{int:lang}}}}}|I18n/Documentation.tab|module-namespace-heading|fallback={{{documentation|}}}}} |#default = {{#invoke:TNTFallback|msg|lang={{{lang|{{int:lang}}}}}|I18n/Documentation.tab|other-namespaces-heading|fallback={{{documentation|}}}}} }} }}</span><!-- --><span class="mw-editsection-like plainlinks" id="doc_editlinks">&#91;&#x202F;{{#if: {{{content|}}} | | {{#ifexist: {{Transclude|{{{1|{{DocPageName}}}}}}} | <!-- -->[{{fullurl:{{Transclude|{{{1|{{DocPageName}}}}}}}}} {{#invoke:TNTFallback|msg|lang={{{lang|{{Int:Lang}}}}}|I18n/Documentation.tab|view-link-display|fallback={{{view|}}}}}]&nbsp;'''·'''<!-- --> [{{fullurl:{{Transclude|{{{1|{{DocPageName}}}}}}}|action=edit}} {{#invoke:TNTFallback|msg|lang={{{lang|{{Int:Lang}}}}}|I18n/Documentation.tab|edit-link-display|fallback={{{edit|}}}}}]&nbsp;'''·'''<!-- --> [{{fullurl:{{Transclude|{{{1|{{DocPageName}}}}}}}|action=history}} {{#invoke:TNTFallback|msg|lang={{{lang|{{Int:Lang}}}}}|I18n/Documentation.tab|history-link-display|fallback={{{history|}}}}}]&nbsp;'''·'''<!-- --> | <!-- -->[{{fullurl:{{transclude|{{{1|{{DocPageName}}}}}}}|action=edit&preload=Template:Documentation/preload}} {{#invoke:TNT|msg|lang={{{lang|{{Int:Lang}}}}}|I18n/Documentation.tab|create-link-display}}]&nbsp;'''·'''<!-- --> }} }}<!-- --> [{{fullurl:{{FULLPAGENAME}}|action=purge}} {{#invoke:TNTFallback|msg|lang={{{lang|{{Int:Lang}}}}}|I18n/Documentation.tab|purge-link-display|fallback={{{purge|}}}}}]<!-- -->&#x202F;&#93;</span><!-- --></div> }}<!-- -->{{#if: {{{content|}}} | <!-- do not show notice when /doc is not transcluded--> <div class="template-documentation-content" dir="auto"> {{{content|}}} </div> | <div class="template-documentation-transcludedfrom" lang="{{{lang|}}}" dir="{{#dir:{{{lang|}}}}}">{{tmpl<!-- -->|0 = {{{text|(text: $1) &mdash; {{error|parameter text is not translated in [[Template:Documentation]]}}}}}<!-- -->|1 = [[{{transclude|{{{1|{{DocPageName}}}}}}}]]<!-- -->}}</div> <div class="template-documentation-content" dir="auto"> {{ {{{1|{{DocPageName}}}}} }} </div> }} </div><noinclude> {{#ifeq: {{SUBPAGENAME}} | sandbox | [[Category:Sandbox templates]] }} [[Category:Layout templates]] </noinclude> j1ofws982vaza0ka3hg4ydr01lfv5ru 10824 10823 2026-08-25T23:38:34Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Documentation/layout]] 10823 wikitext text/x-wiki <div id="template-documentation" class="template-documentation"><templatestyles src="Template:Documentation/styles.css" /><!-- -->{{#if: {{PROTECTIONLEVEL:edit}} | {{Protected}} }}<!-- -->{{#ifeq: {{{heading|}}} | false | | <div class="template-documentation-heading" {{#if: {{{lang|}}} | lang="{{{lang|}}}" dir="{{#dir:{{{lang|}}}}}" }}><!-- --><span class="template-documentation-title">{{#if: {{{heading|}}} | {{{heading|}}} | [[File:Test Template Info-Icon.svg|50px|link=|alt=]] {{#switch:{{NAMESPACENUMBER}} |6 = {{#invoke:TNTFallback|msg|lang={{{lang|{{int:lang}}}}}|I18n/Documentation.tab|file-namespace-heading|fallback={{{documentation|}}}}} |10 = {{#invoke:TNTFallback|msg|lang={{{lang|{{int:lang}}}}}|I18n/Documentation.tab|template-namespace-heading|fallback={{{documentation|}}}}} |828 = {{#invoke:TNTFallback|msg|lang={{{lang|{{int:lang}}}}}|I18n/Documentation.tab|module-namespace-heading|fallback={{{documentation|}}}}} |#default = {{#invoke:TNTFallback|msg|lang={{{lang|{{int:lang}}}}}|I18n/Documentation.tab|other-namespaces-heading|fallback={{{documentation|}}}}} }} }}</span><!-- --><span class="mw-editsection-like plainlinks" id="doc_editlinks">&#91;&#x202F;{{#if: {{{content|}}} | | {{#ifexist: {{Transclude|{{{1|{{DocPageName}}}}}}} | <!-- -->[{{fullurl:{{Transclude|{{{1|{{DocPageName}}}}}}}}} {{#invoke:TNTFallback|msg|lang={{{lang|{{Int:Lang}}}}}|I18n/Documentation.tab|view-link-display|fallback={{{view|}}}}}]&nbsp;'''·'''<!-- --> [{{fullurl:{{Transclude|{{{1|{{DocPageName}}}}}}}|action=edit}} {{#invoke:TNTFallback|msg|lang={{{lang|{{Int:Lang}}}}}|I18n/Documentation.tab|edit-link-display|fallback={{{edit|}}}}}]&nbsp;'''·'''<!-- --> [{{fullurl:{{Transclude|{{{1|{{DocPageName}}}}}}}|action=history}} {{#invoke:TNTFallback|msg|lang={{{lang|{{Int:Lang}}}}}|I18n/Documentation.tab|history-link-display|fallback={{{history|}}}}}]&nbsp;'''·'''<!-- --> | <!-- -->[{{fullurl:{{transclude|{{{1|{{DocPageName}}}}}}}|action=edit&preload=Template:Documentation/preload}} {{#invoke:TNT|msg|lang={{{lang|{{Int:Lang}}}}}|I18n/Documentation.tab|create-link-display}}]&nbsp;'''·'''<!-- --> }} }}<!-- --> [{{fullurl:{{FULLPAGENAME}}|action=purge}} {{#invoke:TNTFallback|msg|lang={{{lang|{{Int:Lang}}}}}|I18n/Documentation.tab|purge-link-display|fallback={{{purge|}}}}}]<!-- -->&#x202F;&#93;</span><!-- --></div> }}<!-- -->{{#if: {{{content|}}} | <!-- do not show notice when /doc is not transcluded--> <div class="template-documentation-content" dir="auto"> {{{content|}}} </div> | <div class="template-documentation-transcludedfrom" lang="{{{lang|}}}" dir="{{#dir:{{{lang|}}}}}">{{tmpl<!-- -->|0 = {{{text|(text: $1) &mdash; {{error|parameter text is not translated in [[Template:Documentation]]}}}}}<!-- -->|1 = [[{{transclude|{{{1|{{DocPageName}}}}}}}]]<!-- -->}}</div> <div class="template-documentation-content" dir="auto"> {{ {{{1|{{DocPageName}}}}} }} </div> }} </div><noinclude> {{#ifeq: {{SUBPAGENAME}} | sandbox | [[Category:Sandbox templates]] }} [[Category:Layout templates]] </noinclude> j1ofws982vaza0ka3hg4ydr01lfv5ru Tempilet:Documentation/styles.css 10 1384 10825 2024-08-08T17:08:26Z commons>Jon (WMF) 0 Fixes [[phab:T369874]]. Please see talk page and do not revert without discussion. See also [[meta:User:Jon_(WMF)/Edit_for_dark_mode_support]] 10825 sanitized-css text/css .template-documentation { margin-top: 1em; clear: both; border: 2px dotted #666; padding: 0.6em; background-color: #ecfcf4; } .template-documentation:after { content: ""; display: block; clear: both; } .template-documentation-heading { padding-bottom: 3px; border-bottom: 1px solid #a2a9b1; margin-bottom: 1ex; } .template-documentation-title { font-size: 150%; } .template-documentation-transcludedfrom { font-size: smaller; font-style: italic; } @media screen { html.skin-theme-clientpref-night .template-documentation { background-color: #0b1e1c; } } @media screen and ( prefers-color-scheme: dark) { html.skin-theme-clientpref-os .template-documentation { background-color: #0b1e1c; } } rr3mstnwaeduzx6ggbzgo9ffdu277vw 10826 10825 2026-08-25T23:38:34Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Documentation/styles.css]] 10825 sanitized-css text/css .template-documentation { margin-top: 1em; clear: both; border: 2px dotted #666; padding: 0.6em; background-color: #ecfcf4; } .template-documentation:after { content: ""; display: block; clear: both; } .template-documentation-heading { padding-bottom: 3px; border-bottom: 1px solid #a2a9b1; margin-bottom: 1ex; } .template-documentation-title { font-size: 150%; } .template-documentation-transcludedfrom { font-size: smaller; font-style: italic; } @media screen { html.skin-theme-clientpref-night .template-documentation { background-color: #0b1e1c; } } @media screen and ( prefers-color-scheme: dark) { html.skin-theme-clientpref-os .template-documentation { background-color: #0b1e1c; } } rr3mstnwaeduzx6ggbzgo9ffdu277vw Tempilet:TemplateBox 10 1385 10827 2024-08-12T15:14:55Z commons>Jarekt 0 Undo revision 907688459 by [[Special:Contributions/Jarekt|Jarekt]] ([[User talk:Jarekt|talk]]) 10827 wikitext text/x-wiki <includeonly>{{#invoke:Languages|autolang|base=TemplateBox/i18n |useargs=both |templateData={{#invoke:TemplateBox|templatedata}} |JSONFM={{#invoke:TemplateBox|templatedata|formatting=pretty}} |paramTable={{#invoke:TemplateBox|paramtable}} |usageSample={{#invoke:TemplateBox|usagesample}} |argCount={{#invoke:TemplateBox|argcount}} |desc={{#invoke:TemplateBox|description}} |templateDataInfo={{TemplateDataInfo/toggler}} |i18n-subpage={{#ifeq:{{{i18n-subpage|}}}|. | Template:{{{name|{{BASEPAGENAME}}}}} | Template:{{{name|{{BASEPAGENAME}}}}}/{{{i18n-subpage|i18n}}} }} |usergroup={{lc:{{{usergroup|}}}}} |name={{{name|{{BASEPAGENAME}}}}} |i18n-data-file={{{i18n-data-file|}}} }}__NOEDITSECTION__<!-- Auto-categorization by internationalisation approach -->{{#ifeq:{{SUBPAGENAME}}|doc | <!--Don't categorize documentation subpages--> | {{#ifeq:{{NAMESPACE}}|Template | {{#switch:{{lc:{{{i18n-method|}}}}} |autotranslate=[[Category:Templates using Autotranslate for internationalisation]] |switch=[[Category:Templates using LangSwitch for internationalisation]] |custommediawiki-msg=[[Category:Templates using local MediaWiki messages for internationalisation]] |mediawiki-msg=[[Category:Templates using MediaWiki messages from translatewiki.net for internationalisation]] |ext.translate=[[Category:Templates using the Translate extension for internationalisation]] |tnt =[[Category:Templates using Module:TNT for internationalisation]] |wikidata =[[Category:Templates using Wikidata for internationalisation]] |-=[[Category:Templates not requiring internationalization]] |#default=[[Category:Templates using an unknown approach for internationalisation]] }} | <!--Don't categorise Creator templates--> }} }}</includeonly><noinclude>{{Documentation}}</noinclude> s7iyuk5ykyunmyrh5hcc5m3738d83pn 10828 10827 2026-08-25T23:38:34Z RAPTOR7762 18 1 revision imported from [[:commons:Template:TemplateBox]] 10827 wikitext text/x-wiki <includeonly>{{#invoke:Languages|autolang|base=TemplateBox/i18n |useargs=both |templateData={{#invoke:TemplateBox|templatedata}} |JSONFM={{#invoke:TemplateBox|templatedata|formatting=pretty}} |paramTable={{#invoke:TemplateBox|paramtable}} |usageSample={{#invoke:TemplateBox|usagesample}} |argCount={{#invoke:TemplateBox|argcount}} |desc={{#invoke:TemplateBox|description}} |templateDataInfo={{TemplateDataInfo/toggler}} |i18n-subpage={{#ifeq:{{{i18n-subpage|}}}|. | Template:{{{name|{{BASEPAGENAME}}}}} | Template:{{{name|{{BASEPAGENAME}}}}}/{{{i18n-subpage|i18n}}} }} |usergroup={{lc:{{{usergroup|}}}}} |name={{{name|{{BASEPAGENAME}}}}} |i18n-data-file={{{i18n-data-file|}}} }}__NOEDITSECTION__<!-- Auto-categorization by internationalisation approach -->{{#ifeq:{{SUBPAGENAME}}|doc | <!--Don't categorize documentation subpages--> | {{#ifeq:{{NAMESPACE}}|Template | {{#switch:{{lc:{{{i18n-method|}}}}} |autotranslate=[[Category:Templates using Autotranslate for internationalisation]] |switch=[[Category:Templates using LangSwitch for internationalisation]] |custommediawiki-msg=[[Category:Templates using local MediaWiki messages for internationalisation]] |mediawiki-msg=[[Category:Templates using MediaWiki messages from translatewiki.net for internationalisation]] |ext.translate=[[Category:Templates using the Translate extension for internationalisation]] |tnt =[[Category:Templates using Module:TNT for internationalisation]] |wikidata =[[Category:Templates using Wikidata for internationalisation]] |-=[[Category:Templates not requiring internationalization]] |#default=[[Category:Templates using an unknown approach for internationalisation]] }} | <!--Don't categorise Creator templates--> }} }}</includeonly><noinclude>{{Documentation}}</noinclude> s7iyuk5ykyunmyrh5hcc5m3738d83pn Tempilet:TemplateDataInfo/toggler 10 1386 10829 2024-08-09T04:11:18Z commons>Jarekt 0 replace ((autotranslate}} with call to Module:Autotransalate 10829 wikitext text/x-wiki <onlyinclude><div class="mw-collapsible mw-collapsed"> <div class="mw-collapsible-toggle" style="cursor:pointer" title="Information about TemplateData">{{Clickable button|iconPrimary=ui-icon-help|target={{FULLPAGENAME}}}}</div> <div class="mw-collapsible-content">{{#invoke:Autotranslate|autotranslate|base=TemplateDataInfo/i18n}}</div> </div></onlyinclude> {{documentation}} hcvr99fyr7o4idqg6l4p67cpc3z7mrk 10830 10829 2026-08-25T23:38:34Z RAPTOR7762 18 1 revision imported from [[:commons:Template:TemplateDataInfo/toggler]] 10829 wikitext text/x-wiki <onlyinclude><div class="mw-collapsible mw-collapsed"> <div class="mw-collapsible-toggle" style="cursor:pointer" title="Information about TemplateData">{{Clickable button|iconPrimary=ui-icon-help|target={{FULLPAGENAME}}}}</div> <div class="mw-collapsible-content">{{#invoke:Autotranslate|autotranslate|base=TemplateDataInfo/i18n}}</div> </div></onlyinclude> {{documentation}} hcvr99fyr7o4idqg6l4p67cpc3z7mrk Tempilet:TemplateDataInfo/i18n/en 10 1387 10831 2024-10-30T12:45:33Z commons>FuzzyBot 0 Updating to match new version of source page 10831 wikitext text/x-wiki <languages/> <onlyinclude>{{TemplateDataInfo/layout |title=TemplateData |text=[[:mw:Special:MyLanguage/Extension:TemplateData|TemplateData]] is a way to store information about template parameters (the description of those and of the whole template) for both humans and machines. It is used by [[:mw:Special:MyLanguage/:VisualEditor|VisualEditor]] and possibly other tools like [[Special:MyLanguage/Commons:Upload Wizard|Upload Wizard]]. ---- <u>Existing template documentation</u><br/> At Wikimedia Commons, it is recommended to use {{tl|TemplateBox}} with either <code><nowiki>&lrm;useTemplateData=1</nowiki></code> or <code><nowiki>&lrm;useTemplateData=only</nowiki></code> on the <code><nowiki>&lrm;/doc</nowiki></code> subpage and transcluding it with {{tl|Documentation}} into the template. {{tag|nowiki|o}}-tags can be wrapped around the arguments, if required, to avoid templates being expanded. <u>Newly created template documentation and imports</u><br/> Another option, especially for imported templates, or for users with JSON experience, is placing raw {{tag|templatedata|o}}-tags into the Wikitext of the template, as described in various Wikipediae. |help=Wikipedia's help about TemplateData |helppage=:en:Wikipedia:VisualEditor/TemplateData/Tutorial |info=Commons-specific information |lang=en }}</onlyinclude> {{translated tag|header}} c26w757rb5jm01vuvow6d7iaebs2nuq 10832 10831 2026-08-25T23:38:34Z RAPTOR7762 18 1 revision imported from [[:commons:Template:TemplateDataInfo/i18n/en]] 10831 wikitext text/x-wiki <languages/> <onlyinclude>{{TemplateDataInfo/layout |title=TemplateData |text=[[:mw:Special:MyLanguage/Extension:TemplateData|TemplateData]] is a way to store information about template parameters (the description of those and of the whole template) for both humans and machines. It is used by [[:mw:Special:MyLanguage/:VisualEditor|VisualEditor]] and possibly other tools like [[Special:MyLanguage/Commons:Upload Wizard|Upload Wizard]]. ---- <u>Existing template documentation</u><br/> At Wikimedia Commons, it is recommended to use {{tl|TemplateBox}} with either <code><nowiki>&lrm;useTemplateData=1</nowiki></code> or <code><nowiki>&lrm;useTemplateData=only</nowiki></code> on the <code><nowiki>&lrm;/doc</nowiki></code> subpage and transcluding it with {{tl|Documentation}} into the template. {{tag|nowiki|o}}-tags can be wrapped around the arguments, if required, to avoid templates being expanded. <u>Newly created template documentation and imports</u><br/> Another option, especially for imported templates, or for users with JSON experience, is placing raw {{tag|templatedata|o}}-tags into the Wikitext of the template, as described in various Wikipediae. |help=Wikipedia's help about TemplateData |helppage=:en:Wikipedia:VisualEditor/TemplateData/Tutorial |info=Commons-specific information |lang=en }}</onlyinclude> {{translated tag|header}} c26w757rb5jm01vuvow6d7iaebs2nuq Tempilet:TemplateDataInfo/layout 10 1388 10833 2024-08-28T08:32:09Z commons>CptViraj 0 Protected "[[Template:TemplateDataInfo/layout]]": [[Special:MyLanguage/Commons:Protection policy|Widely used template]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite)) 10833 wikitext text/x-wiki <onlyinclude><templatestyles src="Template:TemplateDataInfo/styles.css" /><div class="commons-template-TemplateDataInfo" lang="{{#bcp47:{{{lang|}}}}}" dir="{{#dir:{{{lang|}}}}}"> <div class="header" lang="zxx" dir="ltr"><nowiki><templatedata>JSON</templatedata></nowiki> ./. {{tl|TemplateBox}}</div> ;{{{title}}} {{{text}}} ---- [[{{{helppage|:en:Wikipedia:VisualEditor/TemplateData/Tutorial}}}|{{{help}}}]] • [[Special:MyLanguage/Commons:TemplateData|{{{info}}}]] </div><includeonly>{{#ifeq:{{NAMESPACE}}:{{ROOTPAGENAME}}|Template:TemplateDataInfo| |{{#switch:{{SUBPAGENAME}} |#default=[[Category:Templates using TemplateData]] |doc |documentation |metatemplatedoc |templatedoc = [[Category:TemplateData documentation]] |sandbox= |TemplateData={{#ifeq:{{SUBPAGENAME}}|{{BASEPAGENAME}} |[[Category:Templates using TemplateData]] |[[Category:TemplateData documentation]] }} }} }}</includeonly></onlyinclude> [[Category:Layout templates]] 1xatqo9caata6g5nhqctdxjx5p76zno 10834 10833 2026-08-25T23:38:34Z RAPTOR7762 18 1 revision imported from [[:commons:Template:TemplateDataInfo/layout]] 10833 wikitext text/x-wiki <onlyinclude><templatestyles src="Template:TemplateDataInfo/styles.css" /><div class="commons-template-TemplateDataInfo" lang="{{#bcp47:{{{lang|}}}}}" dir="{{#dir:{{{lang|}}}}}"> <div class="header" lang="zxx" dir="ltr"><nowiki><templatedata>JSON</templatedata></nowiki> ./. {{tl|TemplateBox}}</div> ;{{{title}}} {{{text}}} ---- [[{{{helppage|:en:Wikipedia:VisualEditor/TemplateData/Tutorial}}}|{{{help}}}]] • [[Special:MyLanguage/Commons:TemplateData|{{{info}}}]] </div><includeonly>{{#ifeq:{{NAMESPACE}}:{{ROOTPAGENAME}}|Template:TemplateDataInfo| |{{#switch:{{SUBPAGENAME}} |#default=[[Category:Templates using TemplateData]] |doc |documentation |metatemplatedoc |templatedoc = [[Category:TemplateData documentation]] |sandbox= |TemplateData={{#ifeq:{{SUBPAGENAME}}|{{BASEPAGENAME}} |[[Category:Templates using TemplateData]] |[[Category:TemplateData documentation]] }} }} }}</includeonly></onlyinclude> [[Category:Layout templates]] 1xatqo9caata6g5nhqctdxjx5p76zno Tempilet:TemplateDataInfo/styles.css 10 1389 10835 2024-10-30T12:47:22Z commons>Matrix 0 fix for dark mode 10835 sanitized-css text/css .commons-template-TemplateDataInfo { background: var(--background-color-warning-subtle, #fdf2d5); border: 1px solid var(--border-color-warning, #ab7f2a); color: inherit; padding: 0 .5em; margin: .5em 0; } .commons-template-TemplateDataInfo .header { font-size: 120%; font-family: monospace, monospace; } .commons-template-TemplateDataInfo[dir="ltr"] .header { /* @noflip */ float: right; } .commons-template-TemplateDataInfo[dir="rtl"] .header { /* @noflip */ float: left; } h6wzgqqaleiatpnsnn6qvrh9bjps4fy 10836 10835 2026-08-25T23:38:34Z RAPTOR7762 18 1 revision imported from [[:commons:Template:TemplateDataInfo/styles.css]] 10835 sanitized-css text/css .commons-template-TemplateDataInfo { background: var(--background-color-warning-subtle, #fdf2d5); border: 1px solid var(--border-color-warning, #ab7f2a); color: inherit; padding: 0 .5em; margin: .5em 0; } .commons-template-TemplateDataInfo .header { font-size: 120%; font-family: monospace, monospace; } .commons-template-TemplateDataInfo[dir="ltr"] .header { /* @noflip */ float: right; } .commons-template-TemplateDataInfo[dir="rtl"] .header { /* @noflip */ float: left; } h6wzgqqaleiatpnsnn6qvrh9bjps4fy Tempilet:TemplateBox/i18n/en 10 1390 10839 2024-07-06T21:56:41Z commons>FuzzyBot 0 Updating to match new version of source page 10839 wikitext text/x-wiki <languages/> <onlyinclude>{{#invoke:Transclude|TemplateBox/layout <!-- [[Module:Transclude]] parameters --> | #ignoredPrefix = msg- <!-- Language information --> | lang = en <!-- Messages --> |msg-setscats=The template automatically sets the following categories: |msg-nodesc=No description yet available. |msg-languagedependant=<nowiki /><small><!-- Remove this comment and insert the translation of "This part of the documentation is only available in a limited number of languages." --></small> |msg-usage=Usage |msg-examples={{PLURAL:{{#expr:{{#if:{{{example|}}}|1|0}}+{{#if:{{{example2|}}}|1|0}}}}|Example|Examples}} |msg-example-renders-as=renders as: |msg-shorthand=Or use the shorthand <nowiki /><!-- Some translations removed from translation (T8-T18) If you want to re-install them (because there is something wrong with the MediaWiki-messages that are used and provided by TemplateData, here they are: https://commons.wikimedia.org/w/index.php?title=Template:TemplateBox/i18n&oldid=102987719 --> |msg-shorthand-params-possible=… parameters as described … |msg-param-none=The template takes no parameters. |msg-moreinfo=Additional information |msg-localization=Localization |msg-localization-instruct-switch=To add your language to the list of languages supported by this template, please edit the template and add a row to the "{{Tlf|LangSwitch| }}" construct. It takes the form "<code>{{!}}xx= Your translation </code>" (<code>xx</code> being the {{W|List of ISO 639-1 codes|code}} of your language) |msg-localization-instruct-autotranslate=This template is localized through {{tl|Autotranslate}}. <!-- $1 is automatically replaced by [[Template:TemplateBox/layout]] using {{tmpl}} --> |msg-localization-template-layout=The layout of the template can be found under $1. |msg-localization-instruct-autotranslate-new=To add your language to the list of languages supported by this template, please copy the code of [[Template:{{{name|{{PAGENAME}}}}}/en]] (or any other language version you prefer to translate) and replace the text strings in there (the form below can be used to create a translation, the English version is preloaded in the edit box). Please change the parameter <code>lang</code> from <code>en</code> (or whatever language you are translating) to the [[:en:ISO 639-1|language code]] of your language. |msg-localization-instruct-none=This template is not intended to be localized. |msg-localization-instruct-custommediawiki-msg=This template is localized by utilizing custom MediaWiki namespace messages. |msg-localization-instruct-wikidata=This template is localized by utilizing Wikidata, via {{tl|Label}} template or similar approach. |msg-localization-instruct-mediawiki-msg=This template is localized by utilizing MediaWiki namespace messages. These can be [[translatewiki:{{#if:{{{i18n-mediawiki-msg|}}}|MediaWiki:{{{i18n-mediawiki-msg|}}}|Special:Translate/ext-wikimediamessages}}|translated at translatewiki.net]] ([[:translatewiki:Special:Translations/MediaWiki:{{#if:{{{i18n-mediawiki-msg|}}}|{{{i18n-mediawiki-msg|}}}|Wm-license-{{lc:{{BASEPAGENAME}}}}-text}}|current translations]]). |msg-localization-ext-translate=This template makes use of {{tl|Autotranslate}} and [[:mw:Special:MyLanguage/Help:Extension:Translate|the translate extension]]. |msg-localization-instruct-ext-translate=Translate this template now! |msg-localization-instruct-ext-translate-admin=Administrate translations. | msg-localization-tnt = This template is localized using [[Module:TNT]]. <!-- $1 is automatically replaced by [[Template:TemplateBox/layout]] using {{tmpl}} --> | msg-localization-instruct-tnt = These translations are stored in $1. |msg-seealso={{int:Seealso}} |msg-relieson=Relies on: |msg-intendedusergroups=The template is intended to be used by the following user groups: |msg-intendedusergroups-all=[[Special:MyLanguage/Commons:Users|all users]] |msg-intendedusergroups-unspecified=no user group specified |msg-intendednamespaces=The template is intended to be used in the following namespaces: |msg-intendednamespaces-unknown=unknown |msg-intendednamespaces-all=all namespaces |msg-intendednamespaces-talks=all talk namespaces and noticeboards |msg-intendednamespaces-contents=all content namespaces |msg-intendednamespaces-0=the main or gallery namespace (unprefixed) |msg-intendednamespaces-1=the Talk namespace for the main namespace |msg-intendednamespaces-2=the User namespace |msg-intendednamespaces-3=the User talk namespace |msg-intendednamespaces-4=the Commons namespace |msg-intendednamespaces-5=the Commons talk namespace |msg-intendednamespaces-6=the File namespace |msg-intendednamespaces-7=the File talk namespace |msg-intendednamespaces-8=the MediaWiki namespace |msg-intendednamespaces-9=the MediaWiki talk namespace |msg-intendednamespaces-10=the Template namespace |msg-intendednamespaces-11=the Template talk namespace |msg-intendednamespaces-12=the Help namespace |msg-intendednamespaces-13=the Help talk namespace |msg-intendednamespaces-14=the Category namespace |msg-intendednamespaces-15=the Category talk namespace |msg-intendednamespaces-16=the Creator namespace |msg-intendednamespaces-17=the Creator talk namespace |msg-intendednamespaces-18=the Special namespace |msg-intendednamespaces-default=no namespace specified |msg-placement=Placement: |msg-placement-top=At the top of the page |msg-placement-bottom=At the bottom of the page |msg-placement-licence=In the "{{int:wm-license-information-permission}}" parameter of the {{tl|Information}} template (or the respective parameter of similar templates) or in the "{{int:license-header}}" section |msg-placement-source=In the "{{int:wm-license-information-source}}" parameter of the {{tl|Information}} template (or the respective parameter of similar templates) or just below this template }}</onlyinclude> {{translated tag|documentation}} grz1ytwtkh8anafz2nge7be7qwl3uh1 10840 10839 2026-08-25T23:38:34Z RAPTOR7762 18 1 revision imported from [[:commons:Template:TemplateBox/i18n/en]] 10839 wikitext text/x-wiki <languages/> <onlyinclude>{{#invoke:Transclude|TemplateBox/layout <!-- [[Module:Transclude]] parameters --> | #ignoredPrefix = msg- <!-- Language information --> | lang = en <!-- Messages --> |msg-setscats=The template automatically sets the following categories: |msg-nodesc=No description yet available. |msg-languagedependant=<nowiki /><small><!-- Remove this comment and insert the translation of "This part of the documentation is only available in a limited number of languages." --></small> |msg-usage=Usage |msg-examples={{PLURAL:{{#expr:{{#if:{{{example|}}}|1|0}}+{{#if:{{{example2|}}}|1|0}}}}|Example|Examples}} |msg-example-renders-as=renders as: |msg-shorthand=Or use the shorthand <nowiki /><!-- Some translations removed from translation (T8-T18) If you want to re-install them (because there is something wrong with the MediaWiki-messages that are used and provided by TemplateData, here they are: https://commons.wikimedia.org/w/index.php?title=Template:TemplateBox/i18n&oldid=102987719 --> |msg-shorthand-params-possible=… parameters as described … |msg-param-none=The template takes no parameters. |msg-moreinfo=Additional information |msg-localization=Localization |msg-localization-instruct-switch=To add your language to the list of languages supported by this template, please edit the template and add a row to the "{{Tlf|LangSwitch| }}" construct. It takes the form "<code>{{!}}xx= Your translation </code>" (<code>xx</code> being the {{W|List of ISO 639-1 codes|code}} of your language) |msg-localization-instruct-autotranslate=This template is localized through {{tl|Autotranslate}}. <!-- $1 is automatically replaced by [[Template:TemplateBox/layout]] using {{tmpl}} --> |msg-localization-template-layout=The layout of the template can be found under $1. |msg-localization-instruct-autotranslate-new=To add your language to the list of languages supported by this template, please copy the code of [[Template:{{{name|{{PAGENAME}}}}}/en]] (or any other language version you prefer to translate) and replace the text strings in there (the form below can be used to create a translation, the English version is preloaded in the edit box). Please change the parameter <code>lang</code> from <code>en</code> (or whatever language you are translating) to the [[:en:ISO 639-1|language code]] of your language. |msg-localization-instruct-none=This template is not intended to be localized. |msg-localization-instruct-custommediawiki-msg=This template is localized by utilizing custom MediaWiki namespace messages. |msg-localization-instruct-wikidata=This template is localized by utilizing Wikidata, via {{tl|Label}} template or similar approach. |msg-localization-instruct-mediawiki-msg=This template is localized by utilizing MediaWiki namespace messages. These can be [[translatewiki:{{#if:{{{i18n-mediawiki-msg|}}}|MediaWiki:{{{i18n-mediawiki-msg|}}}|Special:Translate/ext-wikimediamessages}}|translated at translatewiki.net]] ([[:translatewiki:Special:Translations/MediaWiki:{{#if:{{{i18n-mediawiki-msg|}}}|{{{i18n-mediawiki-msg|}}}|Wm-license-{{lc:{{BASEPAGENAME}}}}-text}}|current translations]]). |msg-localization-ext-translate=This template makes use of {{tl|Autotranslate}} and [[:mw:Special:MyLanguage/Help:Extension:Translate|the translate extension]]. |msg-localization-instruct-ext-translate=Translate this template now! |msg-localization-instruct-ext-translate-admin=Administrate translations. | msg-localization-tnt = This template is localized using [[Module:TNT]]. <!-- $1 is automatically replaced by [[Template:TemplateBox/layout]] using {{tmpl}} --> | msg-localization-instruct-tnt = These translations are stored in $1. |msg-seealso={{int:Seealso}} |msg-relieson=Relies on: |msg-intendedusergroups=The template is intended to be used by the following user groups: |msg-intendedusergroups-all=[[Special:MyLanguage/Commons:Users|all users]] |msg-intendedusergroups-unspecified=no user group specified |msg-intendednamespaces=The template is intended to be used in the following namespaces: |msg-intendednamespaces-unknown=unknown |msg-intendednamespaces-all=all namespaces |msg-intendednamespaces-talks=all talk namespaces and noticeboards |msg-intendednamespaces-contents=all content namespaces |msg-intendednamespaces-0=the main or gallery namespace (unprefixed) |msg-intendednamespaces-1=the Talk namespace for the main namespace |msg-intendednamespaces-2=the User namespace |msg-intendednamespaces-3=the User talk namespace |msg-intendednamespaces-4=the Commons namespace |msg-intendednamespaces-5=the Commons talk namespace |msg-intendednamespaces-6=the File namespace |msg-intendednamespaces-7=the File talk namespace |msg-intendednamespaces-8=the MediaWiki namespace |msg-intendednamespaces-9=the MediaWiki talk namespace |msg-intendednamespaces-10=the Template namespace |msg-intendednamespaces-11=the Template talk namespace |msg-intendednamespaces-12=the Help namespace |msg-intendednamespaces-13=the Help talk namespace |msg-intendednamespaces-14=the Category namespace |msg-intendednamespaces-15=the Category talk namespace |msg-intendednamespaces-16=the Creator namespace |msg-intendednamespaces-17=the Creator talk namespace |msg-intendednamespaces-18=the Special namespace |msg-intendednamespaces-default=no namespace specified |msg-placement=Placement: |msg-placement-top=At the top of the page |msg-placement-bottom=At the bottom of the page |msg-placement-licence=In the "{{int:wm-license-information-permission}}" parameter of the {{tl|Information}} template (or the respective parameter of similar templates) or in the "{{int:license-header}}" section |msg-placement-source=In the "{{int:wm-license-information-source}}" parameter of the {{tl|Information}} template (or the respective parameter of similar templates) or just below this template }}</onlyinclude> {{translated tag|documentation}} grz1ytwtkh8anafz2nge7be7qwl3uh1 Tempilet:TemplateBox/layout 10 1391 10841 2025-12-26T16:04:25Z commons>ExE Boss 0 Add support for `namespace=Data` 10841 wikitext text/x-wiki <templatestyles src="TemplateBox/styles.css" /> __NOEDITSECTION__ {{#ifeq:{{{useTemplateData|}}}|export |== {{{msg-export|Export code}}} == {{#tag:pre|{{msgnw:Template:{{{name|}}}}} <nowiki><noinclude><templatedata></nowiki> {{{JSONFM}}} <nowiki></templatedata> </noinclude></nowiki> }} |{{Documentation subpage|{{#if: {{{docsub-override|}}} | override | }}|page={{{docsub-page|}}}}} {{{mbox|}}} {{#if: {{{desc|}}} | {{{msg-languagedependant|}}} <div class="templatebox-desc"> {{{desc}}} </div> | {{{msg-nodesc|}}} }}{{#if: {{{setscats|}}} |<nowiki/> {{{msg-setscats}}} {{{setscats|}}} }} == {{{msg-usage|<noinclude>msg-usage</noinclude>}}} == {{#ifeq:{{#titleparts:{{FULLPAGENAME}}|1|-1}}|doc||{{#if:{{{mustbesubst|}}}|{{Must be substituted|page={{{name|}}}}}}}}} <div class="templatebox-usagesample"> {{{usageSample|}}} </div>{{#if: {{{shorthand|}}} |<nowiki/> {{{msg-shorthand|}}}<div style="font-family: monospace, monospace;">{{#ifexist: Template:{{{shorthand|}}} | <nowiki>{{</nowiki>{{{shorthand}}}{{#ifeq:{{{argCount|}}}|0|<!-- nothing -->| {{!}}{{{msg-shorthand-params-possible|… parameters as described …}}}}}<nowiki>}}</nowiki> | {{{shorthand|}}}}}</div> }}{{#if: {{{usage-notes|}}} |<nowiki/> {{{msg-languagedependant|}}} <div class="templatebox-languagedependant"> {{{usage-notes}}} </div> }}{{#ifexpr: {{#ifeq:{{{useTemplateData|}}}|TNT|1|0}} or{{#ifeq:{{str left|{{{useTemplateData|}}}|4}}|TNT:|1|0}} |<nowiki/> <h3>{{int:templatedata-doc-params}}</h3> {{{templateDataInfo}}} <!-- TemplateData is handled by [[Module:TNT]] --> {{#invoke:TNT|doc |1={{#ifeq:{{{useTemplateData}}}|TNT | {{#if:{{{name|}}}|{{{name}}}|{{BASEPAGENAME}}}} | {{str right|{{{useTemplateData}}}|4}} }} }} <nowiki/>|<!-- else --> {{#if: {{{paramTable|}}} |<nowiki/> === {{int:templatedata-doc-params}} === {{#ifeq:{{{useTemplateData|}}}|only||{{{paramTable}}}}} |<nowiki/> {{{msg-param-none|}}} }} {{#if:{{{useTemplateData|}}} |{{#ifeq:{{{useTemplateData|}}}|only||{{Collapse top|[[:mw:Special:MyLanguage/Extension:TemplateData|{{{msg-templatedata|Template data}}}]]}}}} {{{templateDataInfo}}} {{#tag: templatedata | {{{templateData|}}} }} {{#ifeq:{{{useTemplateData|}}}|only|| <!--else--> {{#ifeq:{{{useTemplateData|}}}|debug| {{Collapse top|{{{msg-templatedata-raw|Raw template data}}}}} {{#tag:syntaxhighlight | {{{JSONFM}}} | lang="json" }} {{Collapse bottom}} }} {{Collapse bottom}}}} }}}} === {{{msg-moreinfo|<noinclude>msg-moreinfo</noinclude>}}} === {{{msg-intendednamespaces|}}} {{#switch: {{{namespace|}}} |={{{msg-intendednamespaces-default|}}} |all={{{msg-intendednamespaces-all|}}} |talks={{{msg-intendednamespaces-talks|}}} |contents={{{msg-intendednamespaces-contents|}}} |0|Main|Gallery|main|gallery={{{msg-intendednamespaces-0|}}} |1|Talk|talk={{{msg-intendednamespaces-1|}}} |2|User|user={{{msg-intendednamespaces-2|}}} |3|User talk|user talk={{{msg-intendednamespaces-3|}}} |4|Commons|commons={{{msg-intendednamespaces-4|}}} |5|Commons talk|commons talk={{{msg-intendednamespaces-5|}}} |6|File|file={{{msg-intendednamespaces-6|}}} |7|File talk|file talk={{{msg-intendednamespaces-7|}}} |8|MediaWiki|mediaWiki={{{msg-intendednamespaces-8|}}} |9|MediaWiki talk|mediaWiki talk={{{msg-intendednamespaces-9|}}} |10|Template|template={{{msg-intendednamespaces-10|}}} |11|Template talk|template talk={{{msg-intendednamespaces-11|}}} |12|Help|help={{{msg-intendednamespaces-12|}}} |13|Help talk|help talk={{{msg-intendednamespaces-13|}}} |14|Category|category={{{msg-intendednamespaces-14|}}} |15|Category talk|category talk={{{msg-intendednamespaces-15|}}} |16|Creator|creator={{{msg-intendednamespaces-16|}}} |17|Creator talk|creator talk={{{msg-intendednamespaces-17|}}} |18|Special|special={{{msg-intendednamespaces-18|}}} |486|Data|data={{{msg-intendednamespaces-486|<span lang="en" dir="ltr" class="mw-content-ltr">the Data namespace</span>}}} |487|Data talk|data talk={{{msg-intendednamespaces-487|<span lang="en" dir="ltr" class="mw-content-ltr">the Data talk namespace</span>}}} |#default={{{msg-intendednamespaces-unknown|}}} }} {{{msg-intendedusergroups|}}}<!-- usergroup is always lower case transformation on [[Template:TemplateBox]] --> {{#switch: {{{usergroup|}}} |all={{{msg-intendedusergroups-all|}}} |bot=[[Special:MyLanguage/{{mediawiki:Grouppage-bot}}|{{int:Group-bot}}]] |administrator|admin|sysop=[[Special:MyLanguage/{{mediawiki:Grouppage-sysop}}|{{int:Group-sysop}}]] |bureaucrat|crat=[[Special:MyLanguage/{{mediawiki:Grouppage-bureaucrat}}|{{int:Group-bureaucrat}}]] |checkuser=[[Special:MyLanguage/{{mediawiki:Grouppage-checkuser}}|{{int:Group-checkuser}}]] |licensereviewer|imagereviewer|image-reviewer|license-reviewer=[[Special:MyLanguage/{{mediawiki:Grouppage-Image-reviewer}}|{{int:Group-Image-reviewer}}]] |vrt|vrt-agent|otrs|otrs-agent|otrs-member=[[Special:MyLanguage/{{mediawiki:Grouppage-vrt-permissions}}|{{int:group-vrt-permissions}}]] |autoconfirmed=[[Special:MyLanguage/{{mediawiki:Grouppage-autoconfirmed}}|{{int:Group-autoconfirmed}}]] |autopatrolled=[[Special:MyLanguage/{{mediawiki:Grouppage-autopatrolled}}|{{int:Group-autopatrolled}}]] |filemover=[[Special:MyLanguage/{{mediawiki:Grouppage-filemover}}|{{int:Group-filemover}}]] |oversight=[[Special:MyLanguage/{{mediawiki:Grouppage-oversight}}|{{int:Group-oversight}}]] |patroller=[[Special:MyLanguage/{{mediawiki:Grouppage-patroller}}|{{int:Group-patroller}}]] |rollbacker=[[Special:MyLanguage/{{mediawiki:Grouppage-rollbacker}}|{{int:Group-rollbacker}}]] |steward=[[m:Special:MyLanguage/Stewards|{{int:Group-steward}}]] |templateeditor|template editor=[[Special:MyLanguage/{{mediawiki:Grouppage-templateeditor}}|{{int:Group-templateeditor}}]] |upwizcampeditors=[[Special:MyLanguage/{{mediawiki:Grouppage-upwizcampeditors}}|{{int:Group-upwizcampeditors}}]] |translationadmin|translateadmin=[[Special:MyLanguage/{{mediawiki:Grouppage-translationadmin}}|{{int:Group-translationadmin}}]] |#default={{{msg-intendedusergroups-unspecified|}}} }}{{#if: {{{placement|}}} |<nowiki/> {{{msg-placement|}}} {{#switch: {{{placement|}}} |top={{{msg-placement-top|}}} |bottom={{{msg-placement-bottom|}}} |license|licence={{{msg-placement-licence|}}} |source={{{msg-placement-source|}}} |#default={{{msg-languagedependant|}}} <div class="templatebox-languagedependant"> {{{placement}}} </div> }} }}{{#if: {{{relieson|}}} |<nowiki/> {{{msg-relieson|}}}<br /> {{{relieson|}}} }}{{suppress categories|{{#if:<!-- -->{{{example |}}}{{{example-source |}}}{{{example-value |}}}<!-- -->{{{example2|}}}{{{example2-source|}}}{{{example2-value|}}}<!-- -->{{{example3|}}}{{{example3-source|}}}{{{example3-value|}}}<!-- -->|<nowiki/> == {{{msg-examples}}} == <nowiki/>}}{{#if: {{{example-source|{{{example|}}}}}} |<nowiki/> {{{example-source|<nowiki>{{</nowiki>{{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}{{!}}{{{example}}}<nowiki>}}</nowiki>}}} {{{msg-example-renders-as}}} <div class="templatebox-example"> {{#if:{{{example-source|}}}{{{example-value|}}}|{{{example-value}}}|{{ {{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}|{{{example|}}}|category=}}}} </div> }}{{#if: {{{example2-source|{{{example2|}}}}}} |<nowiki/> {{#if: {{{example-source|{{{example|}}}}}} |<hr style="margin:1em 0"/>}} {{{example2-source|<nowiki>{{</nowiki>{{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}{{!}}{{{example2}}}<nowiki>}}</nowiki>}}} {{{msg-example-renders-as}}} <div class="templatebox-example"> {{#if:{{{example2-source|}}}{{{example2-value|}}}|{{{example2-value}}}|{{ {{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}|{{{example2|}}}|category=}}}} </div> }}{{#if: {{{example3-source|{{{example3|}}}}}} |<nowiki/> {{#if: {{{example-source|{{{example|}}}}}}{{{example2-source|{{{example2|}}}}}} |<hr style="margin:1em 0"/>}} {{{example3-source|<nowiki>{{</nowiki>{{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}{{!}}{{{example3}}}<nowiki>}}</nowiki>}}} {{{msg-example-renders-as}}} <div class="templatebox-example"> {{#if:{{{example3-source|{{{example3-value|}}}}}}|{{{example3-value}}}|{{ {{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}|{{{example3|}}}|category=}}}} </div> }}}}{{#if: {{{seealso|}}} |<nowiki/> == {{{msg-seealso|}}} == {{{msg-languagedependant|}}} <div class="templatebox-languagedependant"> {{{seealso}}} </div> }}{{#switch: {{lc:{{{i18n-method|}}}}} |-=<nowiki/> == {{{msg-localization|}}} == {{{msg-localization-instruct-none|}}} |autotranslate=<nowiki/> == {{{msg-localization|}}} == {{lang links|Template:{{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}|suppressaddlink=true}} {{{msg-localization-instruct-autotranslate}}} {{#ifexist:Template:{{#if:{{{name|}}}|{{{name}}}|{{BASEPAGENAME}}}}/layout| {{tmpl|0= {{{msg-localization-template-layout}}} |1=[[Template:{{#if:{{{name|}}}|{{{name}}}|{{BASEPAGENAME}}}}/layout]] }} }} {{{msg-localization-instruct-autotranslate-new}}} {{#tag:inputbox| type=create preload=Template:{{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}/en default=Template:{{#if: {{{name|}}} | {{{name|}}} | {{PAGENAME}} }}/{{#ifexist: Template:{{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}/{{int:Lang}} | LANGCODE | {{int:Lang}} }} }} |ext.translate=<nowiki/> == {{{msg-localization|}}} == {{lang links|suppressaddlink=true|1={{{i18n-subpage}}}}} {{{msg-localization-ext-translate}}} {{#ifexist:Template:{{#if:{{{name|}}}|{{{name}}}|{{BASEPAGENAME}}}}/layout| {{tmpl|0= {{{msg-localization-template-layout}}} |1=[[Template:{{#if:{{{name|}}}|{{{name}}}|{{BASEPAGENAME}}}}/layout]] }} }} <div style="text-align:center">{{Clickable button|target={{TranslateLink|{{{i18n-subpage}}}}}|text=[[File:Icono de traducción.svg|48px|link=]]'''{{{msg-localization-instruct-ext-translate}}}'''|class=ui-button-blue ui-button-large|external=true}}</div> <div style="text-align:center">{{Clickable button|target={{fullurl:{{{i18n-subpage}}}|action=edit}}|text='''{{{msg-localization-instruct-ext-translate-admin}}}'''|class=ui-button-red ui-button-large|iconPrimary=ui-icon-wrench|external=true}}</div> |switch=<nowiki/> == {{{msg-localization|}}} == {{{msg-localization-instruct-switch|}}} |mediawiki-msg=<nowiki/> == {{{msg-localization|}}} == {{{msg-localization-instruct-mediawiki-msg|}}} |custommediawiki-msg=<nowiki/> == {{{msg-localization|}}} == {{{msg-localization-instruct-custommediawiki-msg|}}} |tnt=<nowiki/> <h2>{{{msg-localization}}}</h2> {{{msg-localization-tnt}}} {{tmpl|0= {{{msg-localization-instruct-tnt}}} |1=[[Data:{{#if:{{{i18n-data-file|}}}<!-- -->|{{#invoke:TNTTools|TNTTabFull|{{{i18n-data-file}}}}}<!-- -->|I18n/{{#if:{{{name|}}}|{{{name}}}|{{ROOTPAGENAME}}}}.tab<!-- -->}}]] }} |wikidata=<nowiki/> == {{{msg-localization|}}} == {{{msg-localization-instruct-wikidata|}}} |#default= {{#if: {{{i18n-desc|}}} |<nowiki/> == {{{msg-localization|}}} == }} }}{{#if: {{{i18n-desc|}}} |<nowiki/> {{{msg-languagedependant|}}} <div class="templatebox-languagedependant"> {{{i18n-desc}}} </div> }}}}<noinclude>[[Category:Layout templates]]</noinclude> tqpi3wqgupxm6rgec8unbprnq9gpx57 10842 10841 2026-08-25T23:38:34Z RAPTOR7762 18 1 revision imported from [[:commons:Template:TemplateBox/layout]] 10841 wikitext text/x-wiki <templatestyles src="TemplateBox/styles.css" /> __NOEDITSECTION__ {{#ifeq:{{{useTemplateData|}}}|export |== {{{msg-export|Export code}}} == {{#tag:pre|{{msgnw:Template:{{{name|}}}}} <nowiki><noinclude><templatedata></nowiki> {{{JSONFM}}} <nowiki></templatedata> </noinclude></nowiki> }} |{{Documentation subpage|{{#if: {{{docsub-override|}}} | override | }}|page={{{docsub-page|}}}}} {{{mbox|}}} {{#if: {{{desc|}}} | {{{msg-languagedependant|}}} <div class="templatebox-desc"> {{{desc}}} </div> | {{{msg-nodesc|}}} }}{{#if: {{{setscats|}}} |<nowiki/> {{{msg-setscats}}} {{{setscats|}}} }} == {{{msg-usage|<noinclude>msg-usage</noinclude>}}} == {{#ifeq:{{#titleparts:{{FULLPAGENAME}}|1|-1}}|doc||{{#if:{{{mustbesubst|}}}|{{Must be substituted|page={{{name|}}}}}}}}} <div class="templatebox-usagesample"> {{{usageSample|}}} </div>{{#if: {{{shorthand|}}} |<nowiki/> {{{msg-shorthand|}}}<div style="font-family: monospace, monospace;">{{#ifexist: Template:{{{shorthand|}}} | <nowiki>{{</nowiki>{{{shorthand}}}{{#ifeq:{{{argCount|}}}|0|<!-- nothing -->| {{!}}{{{msg-shorthand-params-possible|… parameters as described …}}}}}<nowiki>}}</nowiki> | {{{shorthand|}}}}}</div> }}{{#if: {{{usage-notes|}}} |<nowiki/> {{{msg-languagedependant|}}} <div class="templatebox-languagedependant"> {{{usage-notes}}} </div> }}{{#ifexpr: {{#ifeq:{{{useTemplateData|}}}|TNT|1|0}} or{{#ifeq:{{str left|{{{useTemplateData|}}}|4}}|TNT:|1|0}} |<nowiki/> <h3>{{int:templatedata-doc-params}}</h3> {{{templateDataInfo}}} <!-- TemplateData is handled by [[Module:TNT]] --> {{#invoke:TNT|doc |1={{#ifeq:{{{useTemplateData}}}|TNT | {{#if:{{{name|}}}|{{{name}}}|{{BASEPAGENAME}}}} | {{str right|{{{useTemplateData}}}|4}} }} }} <nowiki/>|<!-- else --> {{#if: {{{paramTable|}}} |<nowiki/> === {{int:templatedata-doc-params}} === {{#ifeq:{{{useTemplateData|}}}|only||{{{paramTable}}}}} |<nowiki/> {{{msg-param-none|}}} }} {{#if:{{{useTemplateData|}}} |{{#ifeq:{{{useTemplateData|}}}|only||{{Collapse top|[[:mw:Special:MyLanguage/Extension:TemplateData|{{{msg-templatedata|Template data}}}]]}}}} {{{templateDataInfo}}} {{#tag: templatedata | {{{templateData|}}} }} {{#ifeq:{{{useTemplateData|}}}|only|| <!--else--> {{#ifeq:{{{useTemplateData|}}}|debug| {{Collapse top|{{{msg-templatedata-raw|Raw template data}}}}} {{#tag:syntaxhighlight | {{{JSONFM}}} | lang="json" }} {{Collapse bottom}} }} {{Collapse bottom}}}} }}}} === {{{msg-moreinfo|<noinclude>msg-moreinfo</noinclude>}}} === {{{msg-intendednamespaces|}}} {{#switch: {{{namespace|}}} |={{{msg-intendednamespaces-default|}}} |all={{{msg-intendednamespaces-all|}}} |talks={{{msg-intendednamespaces-talks|}}} |contents={{{msg-intendednamespaces-contents|}}} |0|Main|Gallery|main|gallery={{{msg-intendednamespaces-0|}}} |1|Talk|talk={{{msg-intendednamespaces-1|}}} |2|User|user={{{msg-intendednamespaces-2|}}} |3|User talk|user talk={{{msg-intendednamespaces-3|}}} |4|Commons|commons={{{msg-intendednamespaces-4|}}} |5|Commons talk|commons talk={{{msg-intendednamespaces-5|}}} |6|File|file={{{msg-intendednamespaces-6|}}} |7|File talk|file talk={{{msg-intendednamespaces-7|}}} |8|MediaWiki|mediaWiki={{{msg-intendednamespaces-8|}}} |9|MediaWiki talk|mediaWiki talk={{{msg-intendednamespaces-9|}}} |10|Template|template={{{msg-intendednamespaces-10|}}} |11|Template talk|template talk={{{msg-intendednamespaces-11|}}} |12|Help|help={{{msg-intendednamespaces-12|}}} |13|Help talk|help talk={{{msg-intendednamespaces-13|}}} |14|Category|category={{{msg-intendednamespaces-14|}}} |15|Category talk|category talk={{{msg-intendednamespaces-15|}}} |16|Creator|creator={{{msg-intendednamespaces-16|}}} |17|Creator talk|creator talk={{{msg-intendednamespaces-17|}}} |18|Special|special={{{msg-intendednamespaces-18|}}} |486|Data|data={{{msg-intendednamespaces-486|<span lang="en" dir="ltr" class="mw-content-ltr">the Data namespace</span>}}} |487|Data talk|data talk={{{msg-intendednamespaces-487|<span lang="en" dir="ltr" class="mw-content-ltr">the Data talk namespace</span>}}} |#default={{{msg-intendednamespaces-unknown|}}} }} {{{msg-intendedusergroups|}}}<!-- usergroup is always lower case transformation on [[Template:TemplateBox]] --> {{#switch: {{{usergroup|}}} |all={{{msg-intendedusergroups-all|}}} |bot=[[Special:MyLanguage/{{mediawiki:Grouppage-bot}}|{{int:Group-bot}}]] |administrator|admin|sysop=[[Special:MyLanguage/{{mediawiki:Grouppage-sysop}}|{{int:Group-sysop}}]] |bureaucrat|crat=[[Special:MyLanguage/{{mediawiki:Grouppage-bureaucrat}}|{{int:Group-bureaucrat}}]] |checkuser=[[Special:MyLanguage/{{mediawiki:Grouppage-checkuser}}|{{int:Group-checkuser}}]] |licensereviewer|imagereviewer|image-reviewer|license-reviewer=[[Special:MyLanguage/{{mediawiki:Grouppage-Image-reviewer}}|{{int:Group-Image-reviewer}}]] |vrt|vrt-agent|otrs|otrs-agent|otrs-member=[[Special:MyLanguage/{{mediawiki:Grouppage-vrt-permissions}}|{{int:group-vrt-permissions}}]] |autoconfirmed=[[Special:MyLanguage/{{mediawiki:Grouppage-autoconfirmed}}|{{int:Group-autoconfirmed}}]] |autopatrolled=[[Special:MyLanguage/{{mediawiki:Grouppage-autopatrolled}}|{{int:Group-autopatrolled}}]] |filemover=[[Special:MyLanguage/{{mediawiki:Grouppage-filemover}}|{{int:Group-filemover}}]] |oversight=[[Special:MyLanguage/{{mediawiki:Grouppage-oversight}}|{{int:Group-oversight}}]] |patroller=[[Special:MyLanguage/{{mediawiki:Grouppage-patroller}}|{{int:Group-patroller}}]] |rollbacker=[[Special:MyLanguage/{{mediawiki:Grouppage-rollbacker}}|{{int:Group-rollbacker}}]] |steward=[[m:Special:MyLanguage/Stewards|{{int:Group-steward}}]] |templateeditor|template editor=[[Special:MyLanguage/{{mediawiki:Grouppage-templateeditor}}|{{int:Group-templateeditor}}]] |upwizcampeditors=[[Special:MyLanguage/{{mediawiki:Grouppage-upwizcampeditors}}|{{int:Group-upwizcampeditors}}]] |translationadmin|translateadmin=[[Special:MyLanguage/{{mediawiki:Grouppage-translationadmin}}|{{int:Group-translationadmin}}]] |#default={{{msg-intendedusergroups-unspecified|}}} }}{{#if: {{{placement|}}} |<nowiki/> {{{msg-placement|}}} {{#switch: {{{placement|}}} |top={{{msg-placement-top|}}} |bottom={{{msg-placement-bottom|}}} |license|licence={{{msg-placement-licence|}}} |source={{{msg-placement-source|}}} |#default={{{msg-languagedependant|}}} <div class="templatebox-languagedependant"> {{{placement}}} </div> }} }}{{#if: {{{relieson|}}} |<nowiki/> {{{msg-relieson|}}}<br /> {{{relieson|}}} }}{{suppress categories|{{#if:<!-- -->{{{example |}}}{{{example-source |}}}{{{example-value |}}}<!-- -->{{{example2|}}}{{{example2-source|}}}{{{example2-value|}}}<!-- -->{{{example3|}}}{{{example3-source|}}}{{{example3-value|}}}<!-- -->|<nowiki/> == {{{msg-examples}}} == <nowiki/>}}{{#if: {{{example-source|{{{example|}}}}}} |<nowiki/> {{{example-source|<nowiki>{{</nowiki>{{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}{{!}}{{{example}}}<nowiki>}}</nowiki>}}} {{{msg-example-renders-as}}} <div class="templatebox-example"> {{#if:{{{example-source|}}}{{{example-value|}}}|{{{example-value}}}|{{ {{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}|{{{example|}}}|category=}}}} </div> }}{{#if: {{{example2-source|{{{example2|}}}}}} |<nowiki/> {{#if: {{{example-source|{{{example|}}}}}} |<hr style="margin:1em 0"/>}} {{{example2-source|<nowiki>{{</nowiki>{{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}{{!}}{{{example2}}}<nowiki>}}</nowiki>}}} {{{msg-example-renders-as}}} <div class="templatebox-example"> {{#if:{{{example2-source|}}}{{{example2-value|}}}|{{{example2-value}}}|{{ {{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}|{{{example2|}}}|category=}}}} </div> }}{{#if: {{{example3-source|{{{example3|}}}}}} |<nowiki/> {{#if: {{{example-source|{{{example|}}}}}}{{{example2-source|{{{example2|}}}}}} |<hr style="margin:1em 0"/>}} {{{example3-source|<nowiki>{{</nowiki>{{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}{{!}}{{{example3}}}<nowiki>}}</nowiki>}}} {{{msg-example-renders-as}}} <div class="templatebox-example"> {{#if:{{{example3-source|{{{example3-value|}}}}}}|{{{example3-value}}}|{{ {{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}|{{{example3|}}}|category=}}}} </div> }}}}{{#if: {{{seealso|}}} |<nowiki/> == {{{msg-seealso|}}} == {{{msg-languagedependant|}}} <div class="templatebox-languagedependant"> {{{seealso}}} </div> }}{{#switch: {{lc:{{{i18n-method|}}}}} |-=<nowiki/> == {{{msg-localization|}}} == {{{msg-localization-instruct-none|}}} |autotranslate=<nowiki/> == {{{msg-localization|}}} == {{lang links|Template:{{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}|suppressaddlink=true}} {{{msg-localization-instruct-autotranslate}}} {{#ifexist:Template:{{#if:{{{name|}}}|{{{name}}}|{{BASEPAGENAME}}}}/layout| {{tmpl|0= {{{msg-localization-template-layout}}} |1=[[Template:{{#if:{{{name|}}}|{{{name}}}|{{BASEPAGENAME}}}}/layout]] }} }} {{{msg-localization-instruct-autotranslate-new}}} {{#tag:inputbox| type=create preload=Template:{{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}/en default=Template:{{#if: {{{name|}}} | {{{name|}}} | {{PAGENAME}} }}/{{#ifexist: Template:{{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}/{{int:Lang}} | LANGCODE | {{int:Lang}} }} }} |ext.translate=<nowiki/> == {{{msg-localization|}}} == {{lang links|suppressaddlink=true|1={{{i18n-subpage}}}}} {{{msg-localization-ext-translate}}} {{#ifexist:Template:{{#if:{{{name|}}}|{{{name}}}|{{BASEPAGENAME}}}}/layout| {{tmpl|0= {{{msg-localization-template-layout}}} |1=[[Template:{{#if:{{{name|}}}|{{{name}}}|{{BASEPAGENAME}}}}/layout]] }} }} <div style="text-align:center">{{Clickable button|target={{TranslateLink|{{{i18n-subpage}}}}}|text=[[File:Icono de traducción.svg|48px|link=]]'''{{{msg-localization-instruct-ext-translate}}}'''|class=ui-button-blue ui-button-large|external=true}}</div> <div style="text-align:center">{{Clickable button|target={{fullurl:{{{i18n-subpage}}}|action=edit}}|text='''{{{msg-localization-instruct-ext-translate-admin}}}'''|class=ui-button-red ui-button-large|iconPrimary=ui-icon-wrench|external=true}}</div> |switch=<nowiki/> == {{{msg-localization|}}} == {{{msg-localization-instruct-switch|}}} |mediawiki-msg=<nowiki/> == {{{msg-localization|}}} == {{{msg-localization-instruct-mediawiki-msg|}}} |custommediawiki-msg=<nowiki/> == {{{msg-localization|}}} == {{{msg-localization-instruct-custommediawiki-msg|}}} |tnt=<nowiki/> <h2>{{{msg-localization}}}</h2> {{{msg-localization-tnt}}} {{tmpl|0= {{{msg-localization-instruct-tnt}}} |1=[[Data:{{#if:{{{i18n-data-file|}}}<!-- -->|{{#invoke:TNTTools|TNTTabFull|{{{i18n-data-file}}}}}<!-- -->|I18n/{{#if:{{{name|}}}|{{{name}}}|{{ROOTPAGENAME}}}}.tab<!-- -->}}]] }} |wikidata=<nowiki/> == {{{msg-localization|}}} == {{{msg-localization-instruct-wikidata|}}} |#default= {{#if: {{{i18n-desc|}}} |<nowiki/> == {{{msg-localization|}}} == }} }}{{#if: {{{i18n-desc|}}} |<nowiki/> {{{msg-languagedependant|}}} <div class="templatebox-languagedependant"> {{{i18n-desc}}} </div> }}}}<noinclude>[[Category:Layout templates]]</noinclude> tqpi3wqgupxm6rgec8unbprnq9gpx57 Tempilet:TemplateBox/styles.css 10 1392 10843 2024-10-30T12:27:34Z commons>Matrix 0 dark mode fix for language dependant box 10843 sanitized-css text/css .templatebox-desc { font-size: 1.2em; font-weight: bolder; padding: 0.2em; } .templatebox-usagesample { font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace; } .templatebox-languagedependant { background: var(--background-color-neutral-subtle, #f8f9fa); color: inherit; padding: 0.2em; } .templatebox-example { border:1px solid var(--border-color-base,#a2a9b1); width: 90%; padding: 1.5em; } .templatebox-example:after { display: block; content: ""; clear: both; } hr.templatebox-examples-separator { margin: 1em 0; } kvl2wuigla1dma12kctcf2volntprye 10844 10843 2026-08-25T23:38:34Z RAPTOR7762 18 1 revision imported from [[:commons:Template:TemplateBox/styles.css]] 10843 sanitized-css text/css .templatebox-desc { font-size: 1.2em; font-weight: bolder; padding: 0.2em; } .templatebox-usagesample { font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace; } .templatebox-languagedependant { background: var(--background-color-neutral-subtle, #f8f9fa); color: inherit; padding: 0.2em; } .templatebox-example { border:1px solid var(--border-color-base,#a2a9b1); width: 90%; padding: 1.5em; } .templatebox-example:after { display: block; content: ""; clear: both; } hr.templatebox-examples-separator { margin: 1em 0; } kvl2wuigla1dma12kctcf2volntprye Module:TNTFallback 828 1393 10847 2024-04-16T20:57:31Z commons>Jonesey95 0 no globals no longer required 10847 Scribunto text/plain -------------------------------------------------------------------------------- -- This module implements a wrapper for [[Module:TNT]] that allows returning -- a fallback message; used by {{Documentation}}. -- -- @module TNTFallback -- @alias p -- @author [[User:ExE Boss]] -- @require [[Module:TNT]] -------------------------------------------------------------------------------- require("strict"); local TNT = require("Module:TNT"); local p = {}; -------------------------------------------------------------------------------- -- Based on [[Module:TNT]]'s `msg` function, -- but takes an optional `fallback` parameter. -------------------------------------------------------------------------------- function p.msg(frame) local dataset, key; local params = { n = 0 }; local lang = nil; local fallback = nil; for k, v in pairs(frame.args) do if (k == 1) then dataset = v; elseif (k == 2) then key = v; elseif (type(k) == "number" and k > 2) then local i = k - 2; params[i] = v; params.n = math.max(params.n, i); elseif ((k == "lang") and (v ~= "_")) then lang = v; elseif ((k == "fallback") and (v ~= "")) then fallback = v; end end local result; if (lang) then result = TNT.formatInLanguage(lang, dataset, key, unpack(params, 1, params.n)); else result = TNT.format(dataset, key, unpack(params, 1, params.n)); end if (fallback and ( -- not translated (result and result == TNT.formatInLanguage("en", dataset, key, unpack(params, 1, params.n))) -- no message or (not result) )) then if (not lang) then if (frame:callParserFunction("int:lang") ~= "en") then return mw.message.newRawMessage(fallback, unpack(params, 1, params.n)):plain(); end elseif (lang ~= "en") then return mw.message.newRawMessage(fallback, unpack(params, 1, params.n)):plain(); end end return result; end return p; kloo3djb7uof7zpnz8pm6lhk2rxu6if 10848 10847 2026-08-25T23:38:35Z RAPTOR7762 18 1 revision imported from [[:commons:Module:TNTFallback]] 10847 Scribunto text/plain -------------------------------------------------------------------------------- -- This module implements a wrapper for [[Module:TNT]] that allows returning -- a fallback message; used by {{Documentation}}. -- -- @module TNTFallback -- @alias p -- @author [[User:ExE Boss]] -- @require [[Module:TNT]] -------------------------------------------------------------------------------- require("strict"); local TNT = require("Module:TNT"); local p = {}; -------------------------------------------------------------------------------- -- Based on [[Module:TNT]]'s `msg` function, -- but takes an optional `fallback` parameter. -------------------------------------------------------------------------------- function p.msg(frame) local dataset, key; local params = { n = 0 }; local lang = nil; local fallback = nil; for k, v in pairs(frame.args) do if (k == 1) then dataset = v; elseif (k == 2) then key = v; elseif (type(k) == "number" and k > 2) then local i = k - 2; params[i] = v; params.n = math.max(params.n, i); elseif ((k == "lang") and (v ~= "_")) then lang = v; elseif ((k == "fallback") and (v ~= "")) then fallback = v; end end local result; if (lang) then result = TNT.formatInLanguage(lang, dataset, key, unpack(params, 1, params.n)); else result = TNT.format(dataset, key, unpack(params, 1, params.n)); end if (fallback and ( -- not translated (result and result == TNT.formatInLanguage("en", dataset, key, unpack(params, 1, params.n))) -- no message or (not result) )) then if (not lang) then if (frame:callParserFunction("int:lang") ~= "en") then return mw.message.newRawMessage(fallback, unpack(params, 1, params.n)):plain(); end elseif (lang ~= "en") then return mw.message.newRawMessage(fallback, unpack(params, 1, params.n)):plain(); end end return result; end return p; kloo3djb7uof7zpnz8pm6lhk2rxu6if Module:TemplateBox 828 1394 10851 2022-10-30T13:19:31Z commons>WOSlinker 0 use require('strict') instead of require('Module:No globals') 10851 Scribunto text/plain require('strict') --[[ @exports usagesample( frame ) argcount( frame ) args2table( args, onGetKey, forCustom ) paramtable( frame ) description( frame ) templatedata( frame ) ]] local p = {} -- Helper function, not exposed local function tobool(st) if type( st ) == 'string' then return st == 'true' else return not not st end end -- Required to determine in which languages the interface texts without langcode are local contentLangcode = mw.language.getContentLanguage():getCode() -- Forward declaration local msg, langIsInit, userLang local messagePrefix = "templatedata-doc-" local i18n = {} i18n['params'] = "Template parameters" i18n['param-name'] = "Parameter" i18n['param-desc'] = "Description" i18n['param-type'] = "Type" i18n['param-default'] = "Default" i18n['param-status'] = "Status" i18n['param-status-optional'] = "optional" i18n['param-status-required'] = "required" i18n['param-status-suggested'] = "suggested" i18n['param-status-deprecated'] = "deprecated" i18n['param-default-empty'] = "empty" local function initLangModule(frame) if langIsInit then return end userLang = frame:preprocess( '{{int:lang}}' ) --! From [[:de:Modul:Expr]]; by [[:de:User:PerfektesChaos]]; --! Derivative work: Rillke msg = function( key ) -- Retrieve localized message string in content language -- Precondition: -- key -- string; message ID -- Postcondition: -- Return some message string -- Uses: -- > messagePrefix -- > i18n -- > userLang -- mw.message.new() local m = mw.message.new( messagePrefix .. key ) local r = false if m:isBlank() then r = i18n[ key ] else m:inLanguage( userLang ) r = m:plain() end if not r then r = '((('.. key .. ')))' end return r end -- msg() langIsInit = true end -- A "hash" / table of everything TemplateData takes -- to ease maintenance. -- The type is automatically determined if t is omitted. -- If the type does not match or can't be converted, an error will be thrown! -- Available types (LUA-Types with exceptions): -- InterfaceText, boolean, number, selection, table, string -- selection*: - requires a selection-string of pipe-separated possibilities to be supplied -- InterfaceText*: A free-form string (no wikitext) in the content-language of the wiki, or, -- an object containing those strings keyed by language code. local paraminfoTemplate = { description = { default = '', t = 'InterfaceText', alias = 'desc' }, format = { default = 'inline', t = 'selection', selection = 'inline|block', alias = 'print', extract = function(pargs, number, paramVal) local m = { multi = 'block', one = 'inline', infobox = 'block' } return m[paramVal] or 'inline' end } } local paraminfoTLParams = { label = { default = '', t = 'InterfaceText' }, required = { default = false, extract = function(pargs, number, paramVal) local req = (pargs[number .. 'stat'] == 'required') return tobool( paramVal or req ) end }, suggested = { default = false, extract = function(pargs, number, paramVal) local sugg = (pargs[number .. 'stat'] == 'suggested') return tobool( paramVal or sugg ) end }, description = { default = '', t = 'InterfaceText', alias = 'd' }, deprecated = { default = false, extract = function(pargs, number, paramVal) local depr = (pargs[number .. 'stat'] == 'deprecated') return tobool( paramVal or depr ) end }, aliases = { default = '', t = 'table', extract = function(pargs, number, paramVal) local key = number .. 'aliases' local tdkey = key .. '-td' local aliases = pargs[tdkey] or pargs[key] if aliases and mw.text.trim( aliases ) ~= '' then local cleaned = {} for m in mw.text.gsplit( aliases, '/', true ) do cleaned[#cleaned+1] = mw.text.trim(m) end return cleaned else return nil end end }, default = { default = '', t = 'string', alias = 'def' }, type = { default = 'unknown', t = 'selection', selection = 'unknown|number|string|string/wiki-user-name|string/wiki-page-name|string/line|line|wiki-page-name|wiki-file-name|wiki-user-name|wiki-template-name|content|unbalanced-wikitext|date|url|boolean' }, inherits = { default = nil, t = 'string' }, autovalue = { default = '', t = 'string', alias = 'av', }, suggestedvalues = { default = '', t = 'table', alias = 'sv', extract = function(pargs, number, paramVal) if paramVal == nil then return nil end local cleaned = {} for m in mw.text.gsplit( paramVal, '/', true ) do cleaned[#cleaned+1] = mw.text.trim(m) end return cleaned end, }, -- sets will be treated differently because we can only have a plain structure in wikitext } local tableLayout = { { col = 'param-name', width = '15%', extract = function(item, renderCell, monolingual) local alias, param = '', item.key local aliasTT = '<span style="font-family: monospace; color:#777; border:1px solid #6A6A6A">' param = '<code>' .. param .. '</code>' if item.aliases then alias = aliasTT .. table.concat(item.aliases, '</span><br />' .. aliasTT) .. '</span>' param = table.concat({param, '<br /><div>', alias, '</div>'}) end renderCell(param) end }, { col = 'param-desc', cols = 2, width = '65%', extract = function(item, renderCell, monolingual) local label = item.label or '' label = monolingual(label) local labelLen = #label local colspan = 2 - labelLen if labelLen > 0 then renderCell(label) end renderCell(monolingual(item.description), colspan) end }, { col = 'param-default', width = '10%', extract = function(item, renderCell, monolingual) local def = monolingual(item.default) or '' if #def == 0 then def = '<span class="mw-templatedata-doc-muted" style="color:#777; font-variant:small-caps">' .. msg('param-default-empty') .. '</span>' end renderCell(def) end }, { col = 'param-status', width = '10%', extract = function(item, renderCell, monolingual) local stat = msg('param-status-optional') if item.required then stat = '<b>' .. msg('param-status-required') .. '</b>' elseif item.deprecated then stat = msg('param-status-deprecated') elseif item.suggested then stat = msg('param-status-suggested') end renderCell(stat) end } } -- Initialize param info -- Avoids having to add redundant information to the preceding tables local function init( which ) local setDefault = function(v) if v.t == nil and v.default ~= nil then v.t = type( v.default ) end if v.selection then local selection = mw.text.split(v.selection, '|', true) v.selection = {} for _, sel in ipairs(selection) do v.selection[sel] = true end end end for a, v in pairs( which ) do setDefault(v) end end local function initParamTables() init( paraminfoTemplate ) init( paraminfoTLParams ) end ------------------------------------------------------ -------------------- USAGE PART ---------------------- ------------------------------------------------------ function p.argcount( frame ) local pargs = ( frame:getParent() or {} ).args or {} local ac = 0 for i, arg in pairs( pargs ) do if ('number' == type(i)) then ac = ac + 1 end end return ac end function p.usagesample( frame ) local pargs = ( frame:getParent() or {} ).args or {} local multiline = (pargs.lines == 'multi' or pargs.print == 'multi' or pargs.print == 'infobox') local align = pargs.print == 'infobox' if not pargs.lines and not pargs.print and pargs.type == 'infobox' then multiline = true align = true end local sepStart = ' |' local sepEnd = multiline and '\n' or '' local sep = sepEnd local subst = #(pargs.mustbesubst or '') > 0 and 'subst:' or '' local beforeEqual = multiline and ' ' or '' local equal = beforeEqual .. '= ' local templateTitle = pargs.name or '' local args, argName, result = {} local maxArgLen, eachArg = 0 sep = sep .. sepStart local sparseIpairs = require('Module:TableTools').sparseIpairs local comapareLegacyVal = function(val) return val == 'optional-' or val == 'deprecated' end local shouldShow = function(i) if comapareLegacyVal(pargs[i .. 'stat']) or comapareLegacyVal(pargs[i .. 'stat-td']) or pargs[i .. 'deprecated'] == true then return false end return true end eachArg = function(cb) for i, arg in sparseIpairs( pargs ) do if ('number' == type(i)) then argName = mw.text.trim( arg or '' ) if #argName == 0 then argName = tostring(i) end if shouldShow(i) then cb(argName) end end end end if align then eachArg(function( arg ) local argL = #arg maxArgLen = argL > maxArgLen and argL or maxArgLen end) end eachArg(function( arg ) local space = '' if align then space = ('&nbsp;'):rep(maxArgLen - #arg) end table.insert( args, argName .. space .. equal ) end) if #args == 0 then sep = '' sepEnd = '' sepStart = '' end if #templateTitle == 0 then templateTitle = mw.title.getCurrentTitle().text end result = table.concat( args, sep ) result = table.concat({ mw.text.nowiki('{{'), subst, templateTitle, sep, result, sepEnd, '}}' }) if multiline then -- Preserve whitespace in front of new lines result = frame:callParserFunction{ name = '#tag', args = { 'poem', result } } end return result end ------------------------------------------------------ ------------------- GENERAL PART --------------------- ------------------------------------------------------ function p.args2table(args, onGetKey, consumer) initParamTables() local sets, asParamArray, laxtype, processParams, processDesc, unstrip if 'paramtable' == consumer then asParamArray = true processParams = true laxtype = true elseif 'templatedata' == consumer then sets = true processParams = true processDesc = true unstrip = true elseif 'description' == consumer then processDesc = true laxtype = true end -- All kind of strange stuff with the arguments is done, so play safe and make a copy local pargs = mw.clone( args ) -- Array-like table containing all parameter-numbers that were passed local templateArgs = {} -- Arguments that are localized (i.e. the user passed 1desc-en=English description of parameter one) local i18nTemplateArgs = {} -- Ensure that tables end up as array/object (esp. when they are empty) local tdata = {description="", params={}, sets={}} local isObject = { __tostring = function() return "JSON object" end } isObject.__index = isObject local isArray = { __tostring = function() return "JSON array" end } isArray.__index = isArray setmetatable(tdata.params, isObject) setmetatable(tdata.sets, isArray) onGetKey = onGetKey or function( prefix, alias, param ) local key, key2, tdkey, tdkey2 key = prefix .. (alias or param) key2 = prefix .. param tdkey = key .. '-td' tdkey2 = key2 .. '-td' return tdkey, tdkey2, key, key2 end local extractData = function( pi, number ) local prefix = number or '' local ppv, paramVal local key1, key2, key3, key4 local paramKey, paramTable, processKey if number then paramKey = mw.text.trim( pargs[number] ) if '' == paramKey then paramKey = tostring( number ) end paramTable = {} if asParamArray then paramTable.key = paramKey table.insert(tdata.params, paramTable) else tdata.params[paramKey] = paramTable end end for p, info in pairs( pi ) do key1, key2, key3, key4 = onGetKey(prefix, info.alias, p) paramVal = nil processKey = function(key) if paramVal ~= nil then return end local plain, multilingual = pargs[key], i18nTemplateArgs[key] paramVal = multilingual or plain end processKey( key1 ) processKey( key2 ) processKey( key3 ) processKey( key4 ) -- Ensure presence of entry in content language ppv = pargs[key1] or pargs[key2] or pargs[key3] or pargs[key4] or info.default if 'table' == type( paramVal ) then if (nil == paramVal[contentLangcode]) then paramVal[contentLangcode] = ppv end else paramVal = ppv end if 'function' == type( info.extract ) then if 'string' == type( paramVal ) then paramVal = mw.text.trim( paramVal ) if '' == paramVal then paramVal = nil end end paramVal = info.extract( pargs, number, paramVal ) end local insertValue = function() if number then paramTable[p] = paramVal else tdata[p] = paramVal end end if info.selection then if info.selection[paramVal] then insertValue() end elseif 'InterfaceText' == info.t then if ({ table=1, string=1 })[type( paramVal )] then insertValue() end else local paramType = type( paramVal ) if 'string' == info.t and 'string' == paramType then paramVal = mw.text.trim( paramVal ) if '' ~= paramVal then insertValue() end elseif 'boolean' == info.t then paramVal = tobool(paramVal) insertValue() elseif 'number' == info.t then paramVal = tonumber(paramVal) insertValue() elseif paramType == info.t then insertValue() elseif paramType == 'nil' then -- Do nothing elseif not laxtype and 'string' == info.t and 'table' == paramType then -- Convert multilingual object into content language string paramVal = paramVal[contentLangcode] insertValue() else if laxtype then insertValue() else error( p .. ': Is of type ' .. paramType .. ' but should be of type ' .. (info.t or 'unknown'), 1 ) end end end end -- Now, treat sets if sets then key1 = prefix .. 'set-td' key2 = prefix .. 'set' paramVal = pargs[key1] or pargs[key2] if paramVal then local found = false for i, s in ipairs( tdata.sets ) do if s.label == paramVal then table.insert( s.params, p ) found = true end end if not found then table.insert( tdata.sets, { label = paramVal, params = { p } } ) end end end end -- First, analyse the structure of the provided arguments for a, v in pairs( pargs ) do if unstrip then v = mw.text.unstrip( v ) pargs[a] = v end if type( a ) == 'number' then table.insert( templateArgs, a ) else local argSplit = mw.text.split( a, '-', true ) local argUnitl = {} local argAfter = {} local isTDArg = false local containsTD = a:find( '-td', 1, true ) for i, part in ipairs( argSplit ) do if isTDArg or (containsTD == nil and i > 1) then -- This is likely a language version table.insert( argAfter, part ) else table.insert( argUnitl, part ) end if part == 'td' then isTDArg = true end end if #argAfter > 0 then argUnitl = table.concat( argUnitl, '-' ) argAfter = table.concat( argAfter, '-' ) i18nTemplateArgs[argUnitl] = i18nTemplateArgs[argUnitl] or {} i18nTemplateArgs[argUnitl][argAfter] = v end end end -- Then, start building the actual template if processDesc then extractData( paraminfoTemplate ) end if processParams then -- Ensure that `templateArgs` contains indicies in ascending order table.sort( templateArgs ) for i, number in pairs( templateArgs ) do extractData( paraminfoTLParams, number ) end end return tdata, #templateArgs end ------------------------------------------------------ ------------ CUSTOM PARAMETER TABLE PART ------------- ------------------------------------------------------ -- A custom key-pref-function local customOnGetKey = function( prefix, alias, param ) local key, key2, tdkey, tdkey2 key = prefix .. (alias or param) key2 = prefix .. param tdkey = key .. '-td' tdkey2 = key2 .. '-td' return key2, key, tdkey2, tdkey end local toUserLanguage = function(input) if type(input) == 'table' then input = require( 'Module:LangSwitch' )._langSwitch( input, userLang ) or '' end return input end function p.description(frame) local pargs = ( frame:getParent() or {} ).args or {} -- Initialize the language-related stuff initLangModule(frame) local tdata, paramLen tdata, paramLen = p.args2table(pargs, customOnGetKey, 'description') return toUserLanguage(tdata.description) end function p.paramtable(frame) local pargs = ( frame:getParent() or {} ).args or {} local tdata, paramLen if 'only' == pargs.useTemplateData then return 'param table - output suppressed' end -- Initialize the language-related stuff initLangModule(frame) tdata, paramLen = p.args2table(pargs, customOnGetKey, 'paramtable') if 0 == paramLen then return '' end local row, rows = '', {} local renderCell = function(wikitext, colspan) local colspan, oTd = colspan or 1, '<td>' if colspan > 1 then oTd = '<td colspan="' .. colspan .. '">' end row = table.concat({ row, oTd, wikitext, '</td>' }) end -- Create the header for i, field in ipairs( tableLayout ) do local style = ' style="width:' .. field.width .. '"' local colspan = '' if field.cols then colspan = ' colspan="' .. field.cols .. '"' end local th = '<th' .. style .. colspan .. '>' row = row .. th .. msg(field.col) .. '</th>' end table.insert(rows, row) -- Now transform the Lua-table into an HTML-table for i, item in ipairs( tdata.params ) do row = '' for i2, field in ipairs( tableLayout ) do field.extract(item, renderCell, toUserLanguage) end table.insert(rows, row) end return '<table class="wikitable templatebox-table"><tr>' .. table.concat(rows, '</tr><tr>') .. '</tr></table>' end ------------------------------------------------------ ----------------- TEMPLATEDATA PART ------------------ ------------------------------------------------------ -- A real parser/transformer would look differently but it would likely be much more complex -- The TemplateData-portion for [[Template:TemplateBox]] function p.templatedata(frame) local tdata local args = frame.args or {} local formatting = args.formatting local pargs = ( frame:getParent() or {} ).args or {} local useTemplateData = pargs.useTemplateData if (formatting == 'pretty' and useTemplateData ~= 'export') or (not useTemplateData) or (useTemplateData == 'export' and formatting ~= 'pretty') then local warning = "Warning: Module:TemplateBox - templatedata invoked but not requested by user (setting useTemplateData=1)." mw.log(warning) tdata = '{"description":"' .. warning .. '","params":{},"sets":[]}' return tdata end -- Load the JSON-Module which will convert LUA tables into valid JSON local JSON = require('Module:JSON') JSON.strictTypes = true -- Obtain the object containing info tdata = p.args2table(pargs, nil, 'templatedata') -- And finally return the result if formatting == 'pretty' then return JSON:encode_pretty(tdata) else return JSON:encode(tdata) end end return p lq3ttl7b8yfpr6ylrpjfuvykdq3wtw3 10852 10851 2026-08-25T23:38:35Z RAPTOR7762 18 1 revision imported from [[:commons:Module:TemplateBox]] 10851 Scribunto text/plain require('strict') --[[ @exports usagesample( frame ) argcount( frame ) args2table( args, onGetKey, forCustom ) paramtable( frame ) description( frame ) templatedata( frame ) ]] local p = {} -- Helper function, not exposed local function tobool(st) if type( st ) == 'string' then return st == 'true' else return not not st end end -- Required to determine in which languages the interface texts without langcode are local contentLangcode = mw.language.getContentLanguage():getCode() -- Forward declaration local msg, langIsInit, userLang local messagePrefix = "templatedata-doc-" local i18n = {} i18n['params'] = "Template parameters" i18n['param-name'] = "Parameter" i18n['param-desc'] = "Description" i18n['param-type'] = "Type" i18n['param-default'] = "Default" i18n['param-status'] = "Status" i18n['param-status-optional'] = "optional" i18n['param-status-required'] = "required" i18n['param-status-suggested'] = "suggested" i18n['param-status-deprecated'] = "deprecated" i18n['param-default-empty'] = "empty" local function initLangModule(frame) if langIsInit then return end userLang = frame:preprocess( '{{int:lang}}' ) --! From [[:de:Modul:Expr]]; by [[:de:User:PerfektesChaos]]; --! Derivative work: Rillke msg = function( key ) -- Retrieve localized message string in content language -- Precondition: -- key -- string; message ID -- Postcondition: -- Return some message string -- Uses: -- > messagePrefix -- > i18n -- > userLang -- mw.message.new() local m = mw.message.new( messagePrefix .. key ) local r = false if m:isBlank() then r = i18n[ key ] else m:inLanguage( userLang ) r = m:plain() end if not r then r = '((('.. key .. ')))' end return r end -- msg() langIsInit = true end -- A "hash" / table of everything TemplateData takes -- to ease maintenance. -- The type is automatically determined if t is omitted. -- If the type does not match or can't be converted, an error will be thrown! -- Available types (LUA-Types with exceptions): -- InterfaceText, boolean, number, selection, table, string -- selection*: - requires a selection-string of pipe-separated possibilities to be supplied -- InterfaceText*: A free-form string (no wikitext) in the content-language of the wiki, or, -- an object containing those strings keyed by language code. local paraminfoTemplate = { description = { default = '', t = 'InterfaceText', alias = 'desc' }, format = { default = 'inline', t = 'selection', selection = 'inline|block', alias = 'print', extract = function(pargs, number, paramVal) local m = { multi = 'block', one = 'inline', infobox = 'block' } return m[paramVal] or 'inline' end } } local paraminfoTLParams = { label = { default = '', t = 'InterfaceText' }, required = { default = false, extract = function(pargs, number, paramVal) local req = (pargs[number .. 'stat'] == 'required') return tobool( paramVal or req ) end }, suggested = { default = false, extract = function(pargs, number, paramVal) local sugg = (pargs[number .. 'stat'] == 'suggested') return tobool( paramVal or sugg ) end }, description = { default = '', t = 'InterfaceText', alias = 'd' }, deprecated = { default = false, extract = function(pargs, number, paramVal) local depr = (pargs[number .. 'stat'] == 'deprecated') return tobool( paramVal or depr ) end }, aliases = { default = '', t = 'table', extract = function(pargs, number, paramVal) local key = number .. 'aliases' local tdkey = key .. '-td' local aliases = pargs[tdkey] or pargs[key] if aliases and mw.text.trim( aliases ) ~= '' then local cleaned = {} for m in mw.text.gsplit( aliases, '/', true ) do cleaned[#cleaned+1] = mw.text.trim(m) end return cleaned else return nil end end }, default = { default = '', t = 'string', alias = 'def' }, type = { default = 'unknown', t = 'selection', selection = 'unknown|number|string|string/wiki-user-name|string/wiki-page-name|string/line|line|wiki-page-name|wiki-file-name|wiki-user-name|wiki-template-name|content|unbalanced-wikitext|date|url|boolean' }, inherits = { default = nil, t = 'string' }, autovalue = { default = '', t = 'string', alias = 'av', }, suggestedvalues = { default = '', t = 'table', alias = 'sv', extract = function(pargs, number, paramVal) if paramVal == nil then return nil end local cleaned = {} for m in mw.text.gsplit( paramVal, '/', true ) do cleaned[#cleaned+1] = mw.text.trim(m) end return cleaned end, }, -- sets will be treated differently because we can only have a plain structure in wikitext } local tableLayout = { { col = 'param-name', width = '15%', extract = function(item, renderCell, monolingual) local alias, param = '', item.key local aliasTT = '<span style="font-family: monospace; color:#777; border:1px solid #6A6A6A">' param = '<code>' .. param .. '</code>' if item.aliases then alias = aliasTT .. table.concat(item.aliases, '</span><br />' .. aliasTT) .. '</span>' param = table.concat({param, '<br /><div>', alias, '</div>'}) end renderCell(param) end }, { col = 'param-desc', cols = 2, width = '65%', extract = function(item, renderCell, monolingual) local label = item.label or '' label = monolingual(label) local labelLen = #label local colspan = 2 - labelLen if labelLen > 0 then renderCell(label) end renderCell(monolingual(item.description), colspan) end }, { col = 'param-default', width = '10%', extract = function(item, renderCell, monolingual) local def = monolingual(item.default) or '' if #def == 0 then def = '<span class="mw-templatedata-doc-muted" style="color:#777; font-variant:small-caps">' .. msg('param-default-empty') .. '</span>' end renderCell(def) end }, { col = 'param-status', width = '10%', extract = function(item, renderCell, monolingual) local stat = msg('param-status-optional') if item.required then stat = '<b>' .. msg('param-status-required') .. '</b>' elseif item.deprecated then stat = msg('param-status-deprecated') elseif item.suggested then stat = msg('param-status-suggested') end renderCell(stat) end } } -- Initialize param info -- Avoids having to add redundant information to the preceding tables local function init( which ) local setDefault = function(v) if v.t == nil and v.default ~= nil then v.t = type( v.default ) end if v.selection then local selection = mw.text.split(v.selection, '|', true) v.selection = {} for _, sel in ipairs(selection) do v.selection[sel] = true end end end for a, v in pairs( which ) do setDefault(v) end end local function initParamTables() init( paraminfoTemplate ) init( paraminfoTLParams ) end ------------------------------------------------------ -------------------- USAGE PART ---------------------- ------------------------------------------------------ function p.argcount( frame ) local pargs = ( frame:getParent() or {} ).args or {} local ac = 0 for i, arg in pairs( pargs ) do if ('number' == type(i)) then ac = ac + 1 end end return ac end function p.usagesample( frame ) local pargs = ( frame:getParent() or {} ).args or {} local multiline = (pargs.lines == 'multi' or pargs.print == 'multi' or pargs.print == 'infobox') local align = pargs.print == 'infobox' if not pargs.lines and not pargs.print and pargs.type == 'infobox' then multiline = true align = true end local sepStart = ' |' local sepEnd = multiline and '\n' or '' local sep = sepEnd local subst = #(pargs.mustbesubst or '') > 0 and 'subst:' or '' local beforeEqual = multiline and ' ' or '' local equal = beforeEqual .. '= ' local templateTitle = pargs.name or '' local args, argName, result = {} local maxArgLen, eachArg = 0 sep = sep .. sepStart local sparseIpairs = require('Module:TableTools').sparseIpairs local comapareLegacyVal = function(val) return val == 'optional-' or val == 'deprecated' end local shouldShow = function(i) if comapareLegacyVal(pargs[i .. 'stat']) or comapareLegacyVal(pargs[i .. 'stat-td']) or pargs[i .. 'deprecated'] == true then return false end return true end eachArg = function(cb) for i, arg in sparseIpairs( pargs ) do if ('number' == type(i)) then argName = mw.text.trim( arg or '' ) if #argName == 0 then argName = tostring(i) end if shouldShow(i) then cb(argName) end end end end if align then eachArg(function( arg ) local argL = #arg maxArgLen = argL > maxArgLen and argL or maxArgLen end) end eachArg(function( arg ) local space = '' if align then space = ('&nbsp;'):rep(maxArgLen - #arg) end table.insert( args, argName .. space .. equal ) end) if #args == 0 then sep = '' sepEnd = '' sepStart = '' end if #templateTitle == 0 then templateTitle = mw.title.getCurrentTitle().text end result = table.concat( args, sep ) result = table.concat({ mw.text.nowiki('{{'), subst, templateTitle, sep, result, sepEnd, '}}' }) if multiline then -- Preserve whitespace in front of new lines result = frame:callParserFunction{ name = '#tag', args = { 'poem', result } } end return result end ------------------------------------------------------ ------------------- GENERAL PART --------------------- ------------------------------------------------------ function p.args2table(args, onGetKey, consumer) initParamTables() local sets, asParamArray, laxtype, processParams, processDesc, unstrip if 'paramtable' == consumer then asParamArray = true processParams = true laxtype = true elseif 'templatedata' == consumer then sets = true processParams = true processDesc = true unstrip = true elseif 'description' == consumer then processDesc = true laxtype = true end -- All kind of strange stuff with the arguments is done, so play safe and make a copy local pargs = mw.clone( args ) -- Array-like table containing all parameter-numbers that were passed local templateArgs = {} -- Arguments that are localized (i.e. the user passed 1desc-en=English description of parameter one) local i18nTemplateArgs = {} -- Ensure that tables end up as array/object (esp. when they are empty) local tdata = {description="", params={}, sets={}} local isObject = { __tostring = function() return "JSON object" end } isObject.__index = isObject local isArray = { __tostring = function() return "JSON array" end } isArray.__index = isArray setmetatable(tdata.params, isObject) setmetatable(tdata.sets, isArray) onGetKey = onGetKey or function( prefix, alias, param ) local key, key2, tdkey, tdkey2 key = prefix .. (alias or param) key2 = prefix .. param tdkey = key .. '-td' tdkey2 = key2 .. '-td' return tdkey, tdkey2, key, key2 end local extractData = function( pi, number ) local prefix = number or '' local ppv, paramVal local key1, key2, key3, key4 local paramKey, paramTable, processKey if number then paramKey = mw.text.trim( pargs[number] ) if '' == paramKey then paramKey = tostring( number ) end paramTable = {} if asParamArray then paramTable.key = paramKey table.insert(tdata.params, paramTable) else tdata.params[paramKey] = paramTable end end for p, info in pairs( pi ) do key1, key2, key3, key4 = onGetKey(prefix, info.alias, p) paramVal = nil processKey = function(key) if paramVal ~= nil then return end local plain, multilingual = pargs[key], i18nTemplateArgs[key] paramVal = multilingual or plain end processKey( key1 ) processKey( key2 ) processKey( key3 ) processKey( key4 ) -- Ensure presence of entry in content language ppv = pargs[key1] or pargs[key2] or pargs[key3] or pargs[key4] or info.default if 'table' == type( paramVal ) then if (nil == paramVal[contentLangcode]) then paramVal[contentLangcode] = ppv end else paramVal = ppv end if 'function' == type( info.extract ) then if 'string' == type( paramVal ) then paramVal = mw.text.trim( paramVal ) if '' == paramVal then paramVal = nil end end paramVal = info.extract( pargs, number, paramVal ) end local insertValue = function() if number then paramTable[p] = paramVal else tdata[p] = paramVal end end if info.selection then if info.selection[paramVal] then insertValue() end elseif 'InterfaceText' == info.t then if ({ table=1, string=1 })[type( paramVal )] then insertValue() end else local paramType = type( paramVal ) if 'string' == info.t and 'string' == paramType then paramVal = mw.text.trim( paramVal ) if '' ~= paramVal then insertValue() end elseif 'boolean' == info.t then paramVal = tobool(paramVal) insertValue() elseif 'number' == info.t then paramVal = tonumber(paramVal) insertValue() elseif paramType == info.t then insertValue() elseif paramType == 'nil' then -- Do nothing elseif not laxtype and 'string' == info.t and 'table' == paramType then -- Convert multilingual object into content language string paramVal = paramVal[contentLangcode] insertValue() else if laxtype then insertValue() else error( p .. ': Is of type ' .. paramType .. ' but should be of type ' .. (info.t or 'unknown'), 1 ) end end end end -- Now, treat sets if sets then key1 = prefix .. 'set-td' key2 = prefix .. 'set' paramVal = pargs[key1] or pargs[key2] if paramVal then local found = false for i, s in ipairs( tdata.sets ) do if s.label == paramVal then table.insert( s.params, p ) found = true end end if not found then table.insert( tdata.sets, { label = paramVal, params = { p } } ) end end end end -- First, analyse the structure of the provided arguments for a, v in pairs( pargs ) do if unstrip then v = mw.text.unstrip( v ) pargs[a] = v end if type( a ) == 'number' then table.insert( templateArgs, a ) else local argSplit = mw.text.split( a, '-', true ) local argUnitl = {} local argAfter = {} local isTDArg = false local containsTD = a:find( '-td', 1, true ) for i, part in ipairs( argSplit ) do if isTDArg or (containsTD == nil and i > 1) then -- This is likely a language version table.insert( argAfter, part ) else table.insert( argUnitl, part ) end if part == 'td' then isTDArg = true end end if #argAfter > 0 then argUnitl = table.concat( argUnitl, '-' ) argAfter = table.concat( argAfter, '-' ) i18nTemplateArgs[argUnitl] = i18nTemplateArgs[argUnitl] or {} i18nTemplateArgs[argUnitl][argAfter] = v end end end -- Then, start building the actual template if processDesc then extractData( paraminfoTemplate ) end if processParams then -- Ensure that `templateArgs` contains indicies in ascending order table.sort( templateArgs ) for i, number in pairs( templateArgs ) do extractData( paraminfoTLParams, number ) end end return tdata, #templateArgs end ------------------------------------------------------ ------------ CUSTOM PARAMETER TABLE PART ------------- ------------------------------------------------------ -- A custom key-pref-function local customOnGetKey = function( prefix, alias, param ) local key, key2, tdkey, tdkey2 key = prefix .. (alias or param) key2 = prefix .. param tdkey = key .. '-td' tdkey2 = key2 .. '-td' return key2, key, tdkey2, tdkey end local toUserLanguage = function(input) if type(input) == 'table' then input = require( 'Module:LangSwitch' )._langSwitch( input, userLang ) or '' end return input end function p.description(frame) local pargs = ( frame:getParent() or {} ).args or {} -- Initialize the language-related stuff initLangModule(frame) local tdata, paramLen tdata, paramLen = p.args2table(pargs, customOnGetKey, 'description') return toUserLanguage(tdata.description) end function p.paramtable(frame) local pargs = ( frame:getParent() or {} ).args or {} local tdata, paramLen if 'only' == pargs.useTemplateData then return 'param table - output suppressed' end -- Initialize the language-related stuff initLangModule(frame) tdata, paramLen = p.args2table(pargs, customOnGetKey, 'paramtable') if 0 == paramLen then return '' end local row, rows = '', {} local renderCell = function(wikitext, colspan) local colspan, oTd = colspan or 1, '<td>' if colspan > 1 then oTd = '<td colspan="' .. colspan .. '">' end row = table.concat({ row, oTd, wikitext, '</td>' }) end -- Create the header for i, field in ipairs( tableLayout ) do local style = ' style="width:' .. field.width .. '"' local colspan = '' if field.cols then colspan = ' colspan="' .. field.cols .. '"' end local th = '<th' .. style .. colspan .. '>' row = row .. th .. msg(field.col) .. '</th>' end table.insert(rows, row) -- Now transform the Lua-table into an HTML-table for i, item in ipairs( tdata.params ) do row = '' for i2, field in ipairs( tableLayout ) do field.extract(item, renderCell, toUserLanguage) end table.insert(rows, row) end return '<table class="wikitable templatebox-table"><tr>' .. table.concat(rows, '</tr><tr>') .. '</tr></table>' end ------------------------------------------------------ ----------------- TEMPLATEDATA PART ------------------ ------------------------------------------------------ -- A real parser/transformer would look differently but it would likely be much more complex -- The TemplateData-portion for [[Template:TemplateBox]] function p.templatedata(frame) local tdata local args = frame.args or {} local formatting = args.formatting local pargs = ( frame:getParent() or {} ).args or {} local useTemplateData = pargs.useTemplateData if (formatting == 'pretty' and useTemplateData ~= 'export') or (not useTemplateData) or (useTemplateData == 'export' and formatting ~= 'pretty') then local warning = "Warning: Module:TemplateBox - templatedata invoked but not requested by user (setting useTemplateData=1)." mw.log(warning) tdata = '{"description":"' .. warning .. '","params":{},"sets":[]}' return tdata end -- Load the JSON-Module which will convert LUA tables into valid JSON local JSON = require('Module:JSON') JSON.strictTypes = true -- Obtain the object containing info tdata = p.args2table(pargs, nil, 'templatedata') -- And finally return the result if formatting == 'pretty' then return JSON:encode_pretty(tdata) else return JSON:encode(tdata) end end return p lq3ttl7b8yfpr6ylrpjfuvykdq3wtw3 Tempilet:Nil2 10 1395 10853 2025-12-11T21:26:25Z commons>Lucas Werkmeister 0 fulfilling edit request by [[User:Sebastian Wallroth]] – transclude standard {{Documentation}} 10853 wikitext text/x-wiki {{{Value|{{{2|}}}}}}<noinclude> {{Documentation}} </noinclude> 3yuiiq9rbr4pw89j9aixfwubbidy00a 10854 10853 2026-08-25T23:38:35Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Nil2]] 10853 wikitext text/x-wiki {{{Value|{{{2|}}}}}}<noinclude> {{Documentation}} </noinclude> 3yuiiq9rbr4pw89j9aixfwubbidy00a Tempilet:Protected 10 1396 10855 2025-06-24T14:36:10Z commons>Jarekt 0 Fulfilling [[Template:Edit request|edit request]] by [[User:WOSlinker|WOSlinker]]. 10855 wikitext text/x-wiki {{#switch:{{{demo-edit|{{PROTECTIONLEVEL:edit}}}}} | sysop= {{#ifeq:{{{icon}}}|no||<indicator name="protected">[[File:Full-protection-shackle-block.svg|20px|link=Special:MyLanguage/Commons:Protection policy|{{{{tSwitch|protected/text}}|img-text1}}]]</indicator>}} <table class="protected" style="direction: {{#dir:{{int:Lang}}}}; background:var(--background-color-base,#fff); border:1px solid var(--border-color-base, #aaa); color: inherit; padding:.2em; margin:.5em auto;"> <tr> <td style="padding-right:4px; padding-left:4px;">[[File:Full-protection-shackle-block.svg|40px|link=COM:P|Protected]]</td> <td>'''{{{{tSwitch|protected/text}}|text1}} {{#if:{{{1|}}}|{{{{tSwitch|protected/text}}|reason|reason={{{1}}}}}|{{{{tSwitch|protected/text}}|default-reason}}}}'''<br /><span style="font-size:90%;">{{{note|{{{{tSwitch|protected/text}}|text2}} }}}</span></td> </tr> </table>{{#if:{{{demo-edit|}}}{{{demo-upload|}}}||{{{category|{{#switch:{{NAMESPACE}}|{{ns:6}}=[[Category:Protected files]]|{{ns:2}}|{{ns:3}}|{{ns:10}}=|[[Category:Protected pages]]}} }}} }} | templateeditor= <indicator name="protected">[[File:Template-protection-shackle-brackets 2.svg|20px|link=Special:MyLanguage/Commons:Protection policy|{{{{tSwitch|protected/text}}|img-text1}}]]</indicator> | editautopatrolprotected = <indicator name="protected">[[File:Extended-protection-shackle-account-pro-plus.svg|20px|link=Special:MyLanguage/Commons:Protection policy|{{{{tSwitch|protected/text}}|img-text1}}]]</indicator> | autoconfirmed= <indicator name="protected">[[File:Semi-protection-shackle.svg|20px|link=Special:MyLanguage/Commons:Protection policy|{{{{tSwitch|protected/text}}|img-text2}}]]</indicator> | #default= {{#ifeq:{{NAMESPACE}}|{{{demo-ns|{{ns:6}}}}} | {{#switch:{{{demo-upload|{{PROTECTIONLEVEL:upload}}}}} | sysop= <indicator name="protected">[[File:Upload-protection-shackle.svg|20px|link=Special:MyLanguage/Commons:Protection policy|{{{{tSwitch|protected/text}}|img-text3}}]]</indicator>{{#if:{{{demo-edit|}}}{{{demo-upload|}}}||{{{category|[[Category:Upload protected files]]}}} }} | autoconfirmed= <indicator name="protected">[[File:Semi-protection-shackle.svg|20px|link=Special:MyLanguage/Commons:Protection policy|{{{{tSwitch|protected/text}}|img-text4}}]]</indicator> | #default={{ifsandbox|1=|2= <div class="error">{{{{tSwitch|protected/text}}|error-text}}</div>{{#if:{{{demo-edit|}}}{{{demo-upload|}}}||{{{category|[[Category:Unprotected pages using protection templates]]}}} }}}} }} |{{ifsandbox|1=|2=<div class="error">{{{{tSwitch|protected/text}}|error-text}}</div>{{#if:{{{demo-edit|}}}{{{demo-upload|}}}||{{{category|[[Category:Unprotected pages using protection templates]]}}} }}}} }} }}<noinclude> {{documentation}} </noinclude> 5kmjaainuxuugszozwto8567j5by9zi 10856 10855 2026-08-25T23:38:35Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Protected]] 10855 wikitext text/x-wiki {{#switch:{{{demo-edit|{{PROTECTIONLEVEL:edit}}}}} | sysop= {{#ifeq:{{{icon}}}|no||<indicator name="protected">[[File:Full-protection-shackle-block.svg|20px|link=Special:MyLanguage/Commons:Protection policy|{{{{tSwitch|protected/text}}|img-text1}}]]</indicator>}} <table class="protected" style="direction: {{#dir:{{int:Lang}}}}; background:var(--background-color-base,#fff); border:1px solid var(--border-color-base, #aaa); color: inherit; padding:.2em; margin:.5em auto;"> <tr> <td style="padding-right:4px; padding-left:4px;">[[File:Full-protection-shackle-block.svg|40px|link=COM:P|Protected]]</td> <td>'''{{{{tSwitch|protected/text}}|text1}} {{#if:{{{1|}}}|{{{{tSwitch|protected/text}}|reason|reason={{{1}}}}}|{{{{tSwitch|protected/text}}|default-reason}}}}'''<br /><span style="font-size:90%;">{{{note|{{{{tSwitch|protected/text}}|text2}} }}}</span></td> </tr> </table>{{#if:{{{demo-edit|}}}{{{demo-upload|}}}||{{{category|{{#switch:{{NAMESPACE}}|{{ns:6}}=[[Category:Protected files]]|{{ns:2}}|{{ns:3}}|{{ns:10}}=|[[Category:Protected pages]]}} }}} }} | templateeditor= <indicator name="protected">[[File:Template-protection-shackle-brackets 2.svg|20px|link=Special:MyLanguage/Commons:Protection policy|{{{{tSwitch|protected/text}}|img-text1}}]]</indicator> | editautopatrolprotected = <indicator name="protected">[[File:Extended-protection-shackle-account-pro-plus.svg|20px|link=Special:MyLanguage/Commons:Protection policy|{{{{tSwitch|protected/text}}|img-text1}}]]</indicator> | autoconfirmed= <indicator name="protected">[[File:Semi-protection-shackle.svg|20px|link=Special:MyLanguage/Commons:Protection policy|{{{{tSwitch|protected/text}}|img-text2}}]]</indicator> | #default= {{#ifeq:{{NAMESPACE}}|{{{demo-ns|{{ns:6}}}}} | {{#switch:{{{demo-upload|{{PROTECTIONLEVEL:upload}}}}} | sysop= <indicator name="protected">[[File:Upload-protection-shackle.svg|20px|link=Special:MyLanguage/Commons:Protection policy|{{{{tSwitch|protected/text}}|img-text3}}]]</indicator>{{#if:{{{demo-edit|}}}{{{demo-upload|}}}||{{{category|[[Category:Upload protected files]]}}} }} | autoconfirmed= <indicator name="protected">[[File:Semi-protection-shackle.svg|20px|link=Special:MyLanguage/Commons:Protection policy|{{{{tSwitch|protected/text}}|img-text4}}]]</indicator> | #default={{ifsandbox|1=|2= <div class="error">{{{{tSwitch|protected/text}}|error-text}}</div>{{#if:{{{demo-edit|}}}{{{demo-upload|}}}||{{{category|[[Category:Unprotected pages using protection templates]]}}} }}}} }} |{{ifsandbox|1=|2=<div class="error">{{{{tSwitch|protected/text}}|error-text}}</div>{{#if:{{{demo-edit|}}}{{{demo-upload|}}}||{{{category|[[Category:Unprotected pages using protection templates]]}}} }}}} }} }}<noinclude> {{documentation}} </noinclude> 5kmjaainuxuugszozwto8567j5by9zi Tempilet:Protected/text/en 10 1397 10857 2021-08-11T00:01:10Z commons>FuzzyBot 0 Updating to match new version of source page 10857 wikitext text/x-wiki <languages /> <onlyinclude>{{#switch:{{{1}}} |text1=This {{namespace}} has been protected |default-reason=from editing to prevent vandalism. |reason=because {{{reason}}}. |text2=Please discuss changes on the [[{{TALKPAGENAME}}|talk page]] or [[COM:AN/P|request unprotection]]. |img-text1=This page is protected against editing. |img-text2=This page is semi-protected against editing. |img-text3=This page is protected against reuploading. |img-text4=This page is semi-protected against reuploading. |img-text5=This page is template protected against editing. |error-text=Error: This page is not currently protected. Please [[COM:AN/P|request protection]] or remove the protection template. }}</onlyinclude> {{translated tag|protection}} a8hctd2og10pss98b6165t99nma6npo 10858 10857 2026-08-25T23:38:35Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Protected/text/en]] 10857 wikitext text/x-wiki <languages /> <onlyinclude>{{#switch:{{{1}}} |text1=This {{namespace}} has been protected |default-reason=from editing to prevent vandalism. |reason=because {{{reason}}}. |text2=Please discuss changes on the [[{{TALKPAGENAME}}|talk page]] or [[COM:AN/P|request unprotection]]. |img-text1=This page is protected against editing. |img-text2=This page is semi-protected against editing. |img-text3=This page is protected against reuploading. |img-text4=This page is semi-protected against reuploading. |img-text5=This page is template protected against editing. |error-text=Error: This page is not currently protected. Please [[COM:AN/P|request protection]] or remove the protection template. }}</onlyinclude> {{translated tag|protection}} a8hctd2og10pss98b6165t99nma6npo Tempilet:TSwitch 10 1398 10859 2011-07-03T11:55:09Z commons>Rd232 0 [[Category:Internationalization templates]] 10859 wikitext text/x-wiki {{{1}}}/{{#ifexist:Template:{{{1}}}/{{int:lang}}|{{int:lang}}|{{CONTENTLANG}}}}<noinclude> {{documentation}} [[Category:Internationalization templates]] </noinclude> fspzjhnvtdgna6dqto4p5wevtobyfgc 10860 10859 2026-08-25T23:38:35Z RAPTOR7762 18 1 revision imported from [[:commons:Template:TSwitch]] 10859 wikitext text/x-wiki {{{1}}}/{{#ifexist:Template:{{{1}}}/{{int:lang}}|{{int:lang}}|{{CONTENTLANG}}}}<noinclude> {{documentation}} [[Category:Internationalization templates]] </noinclude> fspzjhnvtdgna6dqto4p5wevtobyfgc Tempilet:Heavily used template 10 1399 10861 2024-08-08T12:59:16Z commons>Jarekt 0 change {{autotranslate}} template to the module call 10861 wikitext text/x-wiki <!-- -->{{#ifeq:{{NAMESPACE}}|Module<!-- -->|{{error|This template is being used in the wrong namespace. Use {{tl|Heavily used module}} instead!}}<!-- -->|<!-- -->{{#invoke:Autotranslate|autotranslate<!-- -->|1 = {{{1|Template talk:{{#titleparts:{{PAGENAME}}|1|1}}}}}<!-- -->|2 = {{#if:{{{2|}}}|{{{2|}}}|{{SUBJECTSPACE}}:{{BASEPAGENAME}}}}<!-- -->|edit=<!-- -->{{#if:{{{edit|}}}<!-- -->|&#58;&#32;[''{{Edit-int|{{{2|{{SUBJECTSPACE}}:{{BASEPAGENAME}}}}}/sandbox}}'']<!-- -->}}<!-- -->|very={{{3|}}}<!-- -->|base=Heavily used template<!-- -->}}<!-- -->}}<includeonly>{{#ifeq:{{SUBJECTPAGENAME}}|{{SUBJECTSPACE}}:{{BASEPAGENAME}}<!-- -->|{{#if:{{{3|}}}|[[Category:Very heavily used templates| ]]|[[Category:Heavily used templates]]}}}}</includeonly><noinclude> {{documentation}} </noinclude> dj1tjkrpisagz8khk0e0bwfkxb6qyvy 10862 10861 2026-08-25T23:38:35Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Heavily_used_template]] 10861 wikitext text/x-wiki <!-- -->{{#ifeq:{{NAMESPACE}}|Module<!-- -->|{{error|This template is being used in the wrong namespace. Use {{tl|Heavily used module}} instead!}}<!-- -->|<!-- -->{{#invoke:Autotranslate|autotranslate<!-- -->|1 = {{{1|Template talk:{{#titleparts:{{PAGENAME}}|1|1}}}}}<!-- -->|2 = {{#if:{{{2|}}}|{{{2|}}}|{{SUBJECTSPACE}}:{{BASEPAGENAME}}}}<!-- -->|edit=<!-- -->{{#if:{{{edit|}}}<!-- -->|&#58;&#32;[''{{Edit-int|{{{2|{{SUBJECTSPACE}}:{{BASEPAGENAME}}}}}/sandbox}}'']<!-- -->}}<!-- -->|very={{{3|}}}<!-- -->|base=Heavily used template<!-- -->}}<!-- -->}}<includeonly>{{#ifeq:{{SUBJECTPAGENAME}}|{{SUBJECTSPACE}}:{{BASEPAGENAME}}<!-- -->|{{#if:{{{3|}}}|[[Category:Very heavily used templates| ]]|[[Category:Heavily used templates]]}}}}</includeonly><noinclude> {{documentation}} </noinclude> dj1tjkrpisagz8khk0e0bwfkxb6qyvy Tempilet:Heavily used template/en 10 1400 10863 2021-11-17T19:29:00Z commons>NguoiDungKhongDinhDanh 0 + topicon 10863 wikitext text/x-wiki {{Heavily used template/layout |text='''Note:''' This {{lc:{{NAMESPACE}}}} is used on a {{#if:{{{very|}}}|'''great'''&nbsp;}}lot of pages. In order not to put too much load on the servers, edits should be kept to a bare minimum. Please '''discuss proposed changes on [[{{TALKPAGENAME}}|the talk page]]''' first. {{#ifexist:{{{2|}}}/sandbox|Afterwards, changes can '''initially''' be done at and tested with [[{{{2|}}}/sandbox]]{{{edit|}}}.}} |small= * Editing a {{lc:{{NAMESPACE}}}} causes '''all pages that use the {{lc:{{NAMESPACE}}}} to be re-rendered'''. If the {{lc:{{NAMESPACE}}}} is used often, this can put a lot of load on the servers since it fills up the [[mw:Manual:Job queue|job queue]]. * Keep in mind that templates that are used on file description pages also '''show up on other wikis'''. |autoconfirmed = * This page is semi-protected from editing to prevent vandalism. Only established users can edit it.<div class="topicon" id="protected-icon" style="display:none; right:10px;">[[File:Padlock-silver-medium.svg|20px|link=Commons:Page protection|This page is semi-protected against editing.]]</div> |templateeditor = * This page is template-protected from editing to prevent vandalism. Only template editors and administrators can edit it. Get their attention by placing {{tl|edit protected}} at the {{#if:{{{1|}}}|[[{{{1}}}|talk page]]|talk page}}.<div class="topicon" id="protected-icon" style="display:none; right:10px;">[[File:Padlock-darkred.svg|20px|link=Commons:Page protection|This page is template-protected against editing.]]</div> |sysop = * This page has been protected from editing to prevent vandalism. Only administrators can edit it. Get their attention by placing {{tl|edit protected}} at the {{#if:{{{1|}}}|[[{{{1}}}|talk page]]|talk page}}.<div class="topicon" id="protected-icon" style="display:none; right:10px;">[[File:Padlock.svg|20px|link=Commons:Page protection|This page is protected against editing.]]</div> |lang=en }}<noinclude> {{Translated tag|marker}} </noinclude> nl57z9m7uf58flj38kqeosatzfm5l6s 10864 10863 2026-08-25T23:38:35Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Heavily_used_template/en]] 10863 wikitext text/x-wiki {{Heavily used template/layout |text='''Note:''' This {{lc:{{NAMESPACE}}}} is used on a {{#if:{{{very|}}}|'''great'''&nbsp;}}lot of pages. In order not to put too much load on the servers, edits should be kept to a bare minimum. Please '''discuss proposed changes on [[{{TALKPAGENAME}}|the talk page]]''' first. {{#ifexist:{{{2|}}}/sandbox|Afterwards, changes can '''initially''' be done at and tested with [[{{{2|}}}/sandbox]]{{{edit|}}}.}} |small= * Editing a {{lc:{{NAMESPACE}}}} causes '''all pages that use the {{lc:{{NAMESPACE}}}} to be re-rendered'''. If the {{lc:{{NAMESPACE}}}} is used often, this can put a lot of load on the servers since it fills up the [[mw:Manual:Job queue|job queue]]. * Keep in mind that templates that are used on file description pages also '''show up on other wikis'''. |autoconfirmed = * This page is semi-protected from editing to prevent vandalism. Only established users can edit it.<div class="topicon" id="protected-icon" style="display:none; right:10px;">[[File:Padlock-silver-medium.svg|20px|link=Commons:Page protection|This page is semi-protected against editing.]]</div> |templateeditor = * This page is template-protected from editing to prevent vandalism. Only template editors and administrators can edit it. Get their attention by placing {{tl|edit protected}} at the {{#if:{{{1|}}}|[[{{{1}}}|talk page]]|talk page}}.<div class="topicon" id="protected-icon" style="display:none; right:10px;">[[File:Padlock-darkred.svg|20px|link=Commons:Page protection|This page is template-protected against editing.]]</div> |sysop = * This page has been protected from editing to prevent vandalism. Only administrators can edit it. Get their attention by placing {{tl|edit protected}} at the {{#if:{{{1|}}}|[[{{{1}}}|talk page]]|talk page}}.<div class="topicon" id="protected-icon" style="display:none; right:10px;">[[File:Padlock.svg|20px|link=Commons:Page protection|This page is protected against editing.]]</div> |lang=en }}<noinclude> {{Translated tag|marker}} </noinclude> nl57z9m7uf58flj38kqeosatzfm5l6s Tempilet:Heavily used template/layout 10 1401 10865 2024-07-16T15:25:48Z commons>Ebrahim 0 make the border color better in night mode using nearest color in wmf palette 10865 wikitext text/x-wiki {{Mbox |type = query |image = {{NoImageNotes|[[File:OOjs UI icon alert-yellow.svg|class=noviewer|alt=⚠|40px]]}} |text = {{{text|empty}}} <div style="font-size:0.9em;"> {{{small|}}} {{#switch:{{PROTECTIONLEVEL:edit}} |autoconfirmed={{{autoconfirmed|}}} |templateeditor={{{templateeditor|{{{temp|}}}}}} |sysop={{{sysop|}}} }}</div> |width = 80% |style = padding:3px; border-color: var(--border-color-content-removed, #fc3); text-align:start |lang = {{{lang|}}} }}<noinclude> [[Category:Layout templates]] </noinclude> 54bgmqbn1hbfytkn4b99uyvlkkou86u 10866 10865 2026-08-25T23:38:35Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Heavily_used_template/layout]] 10865 wikitext text/x-wiki {{Mbox |type = query |image = {{NoImageNotes|[[File:OOjs UI icon alert-yellow.svg|class=noviewer|alt=⚠|40px]]}} |text = {{{text|empty}}} <div style="font-size:0.9em;"> {{{small|}}} {{#switch:{{PROTECTIONLEVEL:edit}} |autoconfirmed={{{autoconfirmed|}}} |templateeditor={{{templateeditor|{{{temp|}}}}}} |sysop={{{sysop|}}} }}</div> |width = 80% |style = padding:3px; border-color: var(--border-color-content-removed, #fc3); text-align:start |lang = {{{lang|}}} }}<noinclude> [[Category:Layout templates]] </noinclude> 54bgmqbn1hbfytkn4b99uyvlkkou86u Tempilet:Edit-int 10 1402 10879 2019-06-26T10:43:51Z commons>Verdy p 0 move to doc subpage 10879 wikitext text/x-wiki {{Custom edit|{{{1|{{FULLPAGENAME}}}}}|{{lcfirst:{{int:edit}}}}|section={{{section|}}}|editintro={{{editintro|}}}|preload={{{preload|}}}|preloadtitle={{{preloadtitle|}}}|oldid={{{oldid|}}}}}<noinclude>{{Documentation}}</noinclude> sdllwa20qlvcdt1botd6c7fetn18sai 10880 10879 2026-08-25T23:38:36Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Edit-int]] 10879 wikitext text/x-wiki {{Custom edit|{{{1|{{FULLPAGENAME}}}}}|{{lcfirst:{{int:edit}}}}|section={{{section|}}}|editintro={{{editintro|}}}|preload={{{preload|}}}|preloadtitle={{{preloadtitle|}}}|oldid={{{oldid|}}}}}<noinclude>{{Documentation}}</noinclude> sdllwa20qlvcdt1botd6c7fetn18sai Tempilet:Created with Unknown tool 10 1403 10883 2020-10-29T07:25:31Z commons>DemonDays64 0 Moved that page 10883 wikitext text/x-wiki #REDIRECT [[Template:Created with other tool]] [[Category:SVG created with ... templates|Unknown]] dmhnt4bj1kwcf0kmw3zjsw6bkc8bk9c 10884 10883 2026-08-25T23:38:36Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Created_with_Unknown_tool]] 10883 wikitext text/x-wiki #REDIRECT [[Template:Created with other tool]] [[Category:SVG created with ... templates|Unknown]] dmhnt4bj1kwcf0kmw3zjsw6bkc8bk9c Tempilet:Created with other tool 10 1404 10885 2024-08-09T23:48:08Z commons>Jarekt 0 replace {{autotranslate}} with call to Module:Autotranslate 10885 wikitext text/x-wiki {{#ifexpr:{{#if:{{{name|}}}{{{tool name|}}}|1|0}}*{{#ifexist:Template:Created with {{{name|}}}{{{tool name|}}}|1|0}}<!-- -exists- -->|{{Created with {{{name|}}}{{{tool name|}}}|{{{1|}}}|{{{2|}}}|err={{{err|}}}|more={{{more|}}}|cat={{{cat|}}}<!-- -->|sub={{{sub|}}}|key={{{sort|{{{key|{{{sortkey|}}}}}}}}}|width={{{width|}}}|style={{{style|}}}<!-- -->|topic={{{topic|}}}|iconsize={{{iconsize|}}}<!-- -->|vw={{{vw|}}}{{{vwidth|}}}{{{width|}}}|vs={{{vs|}}}{{{vstyle|}}}{{{style|}}}|vt={{{vt|}}}{{{vtxt|}}}{{{vtext|.}}}<!-- -->|vo={{{vo|}}}{{{vopt|}}}{{{opt|}}}|vc={{{vc|{{{vcat|}}}}}}<!-- -->|code={{{code|}}}{{{source|}}}{{{c1|}}}|title={{{title|}}}{{{h1|}}}|syntax={{{syntax|}}}{{{l1|}}}<!-- -->|format={{{format|}}}{{{f1|}}}|collapse={{{collapse|}}}{{{s1|}}}|expl={{{expl|}}}{{{e1|}}}|n1={{{n1|}}}|d1={{{d1|}}}<!-- -->|code2={{{code2|}}}{{{c2|}}}|title2={{{title2|}}}{{{h2|}}}|syntax2={{{syntax2|}}}{{{l2|}}}<!-- -->|format2={{{format2|}}}{{{f2|}}}|collapse2={{{collapse2|}}}{{{s2|}}}|expl2={{{expl2|}}}{{{e2|}}}|n2={{{n2|}}}|d2={{{d2|}}}<!-- -->|code3={{{code3|}}}{{{c3|}}}|title3={{{title3|}}}{{{h3|}}}|syntax3={{{syntax3|}}}{{{l3|}}}<!-- -->|format3={{{format3|}}}{{{f3|}}}|collapse3={{{collapse3|}}}{{{s3|}}}|expl3={{{expl3|}}}{{{e3|}}}|n3={{{n3|}}}|d3={{{d3|}}}<!-- -->}}[[Category:CommonsOTM]]<!-- -does not exist- -->|{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|}}}{{{errors|}}}{{{errnum|}}}|{{#if:{{{vstyle|}}}|{{{vstyle}}}|{{{vs|}}}{{{style|}}}}}<!-- -->|{{{vw|}}}{{{vwidth|}}}{{{width|}}}|{{{vt|}}}{{{vtxt|}}}{{{vtext|.}}}|{{{vo|}}}{{{vopt|}}}{{{opt|}}}<!-- -->|{{{topic|}}}|{{{vc|}}}{{{vcat|}}}|lang={{{lang|}}}}}<!-- -->{{#invoke:Autotranslate|autotranslate |1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|p|s|t|/|=|#default={{{1|}}}}}}} |2={{#if:{{{65|}}}|{{{65}}}|{{#if:{{{logo|}}}|{{{logo}}}|{{#ifeq:{{lc:{{{other}}}}}|u|Unknown|OtherTool}} logo<!-- -->{{#if:{{{err|}}}{{{errors|}}}{{{errnum|}}}|{{#switch:{{{err|}}}{{{errors|}}}{{{errnum|}}}<!-- -->|0=-V|-1=-I|-I}}|{{#ifeq:{{{2|{{{1}}}}}}|v|-V}}}}.svg}} }} |3=Other tools |4={{{more|.}}} |5={{{width|}}} |6={{{style|}}} |7={{#if:{{{cat|}}}{{{category|}}}|{{{cat|}}}{{{category|}}}<!-- -->|{{#switch:{{{err|}}}{{{errors|}}}{{{errnum|}}}<!-- -->|-1={{Igen/cat|Uncheckable SVG created with Other tools<!-- -->{{{sub|}}}<!-- only very few subcategories ! -->}}<!-- -->|={{#switch:{{{2|}}}|v|n|s|t=|{{#switch:{{{1}}}|v|n|s|t=<!-- -->|{{#ifeq:{{NAMESPACE}}|File|{{#switch:{{#invoke:Igenmod|newfile}}<!-- -->|s={{Igen/cat|Unspecified SVG created with Other tools}}<!-- {{#switch:{{{topic|}}} ...}} -->|newcat={{Igen/cat|Unspecified new SVG created with Other tools}}<!-- -->}}}}}}}}}}}} |8= |9={{{sort|}}}{{{key|}}}{{{sortkey|}}} |10={{{subc|}}}{{{sub|}}}{{{subcat|}}}{{{subcategory|}}} |11={{{err|}}}{{{errors|}}}{{{errnum|}}} |12={{#if:{{{err|}}}{{{errors|}}}{{{errnum|}}}|{{#ifeq:{{{err|}}}{{{errors|}}}{{{errnum|}}}|0|V|I}}<!-- -->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S|t=s}}|{{#switch:{{{1}}}|v=V|n=N|s=S|t=s<!-- "t" just for Test (Igen/top) -->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) --> |13={{{vo|}}}{{{vopt|}}}{{{opt|}}} |14={{{topic|}}} |15={{lc:{{{other}}}}} |16={{#if:{{{name|}}}{{{tool name|}}}|{{{name|}}}{{{tool name|}}}<!-- -->|{{I18n/othertool|lang={{#if:{{{lang|}}}|{{{lang}}}|{{int:lang}}}}|other={{#ifeq:{{{other}}}|u||o}}<!-- -->|svg={{#if:{{{2|}}}|{{#switch:{{{2}}}|v|s=SVG|{{#switch:{{{1}}}|v|s=SVG<!-- -->|{{#ifeq:{{#invoke:File|extension|file={{PAGENAME}}}}|svg|SVG}}}}}}}}}}}} |17={{#if:{{{iconsize|}}}|{{{iconsize}}}}} |lang={{#if:{{{lang|}}}|{{{lang}}}|{{int:lang}}}} |base=Created with ...}}}}<noinclude> {{SVG created with/doc|opt=yes|I18dot=|vopttext=s|shortkey=Ot|shorthand=Other tool|shorttext=, and always specify <code>name=</code> or <code>tool name=</code><br /> ;Maintenance:<small>If an ''existing template'' is specified by <code>tool name=</code>, that template will be used instead:</small><br />"Created with <code>{{{name}}}</code>" ''or'' "Created with <code>{{{tool name}}}</code>" (case sensitive)<br />In this case the file will be categorized into maintenance category [[:Category:CommonsOTM|CommonsOTM]].|catnam=Created with Other tools|code=yes|n=yes|igen=O|igennote= (or "U" for unknown tools, with parameter <code>other=U</code>) |cattext=}} </noinclude> 7ffooorzwl4x8lvq884ziy0vlbs64mt 10886 10885 2026-08-25T23:38:36Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Created_with_other_tool]] 10885 wikitext text/x-wiki {{#ifexpr:{{#if:{{{name|}}}{{{tool name|}}}|1|0}}*{{#ifexist:Template:Created with {{{name|}}}{{{tool name|}}}|1|0}}<!-- -exists- -->|{{Created with {{{name|}}}{{{tool name|}}}|{{{1|}}}|{{{2|}}}|err={{{err|}}}|more={{{more|}}}|cat={{{cat|}}}<!-- -->|sub={{{sub|}}}|key={{{sort|{{{key|{{{sortkey|}}}}}}}}}|width={{{width|}}}|style={{{style|}}}<!-- -->|topic={{{topic|}}}|iconsize={{{iconsize|}}}<!-- -->|vw={{{vw|}}}{{{vwidth|}}}{{{width|}}}|vs={{{vs|}}}{{{vstyle|}}}{{{style|}}}|vt={{{vt|}}}{{{vtxt|}}}{{{vtext|.}}}<!-- -->|vo={{{vo|}}}{{{vopt|}}}{{{opt|}}}|vc={{{vc|{{{vcat|}}}}}}<!-- -->|code={{{code|}}}{{{source|}}}{{{c1|}}}|title={{{title|}}}{{{h1|}}}|syntax={{{syntax|}}}{{{l1|}}}<!-- -->|format={{{format|}}}{{{f1|}}}|collapse={{{collapse|}}}{{{s1|}}}|expl={{{expl|}}}{{{e1|}}}|n1={{{n1|}}}|d1={{{d1|}}}<!-- -->|code2={{{code2|}}}{{{c2|}}}|title2={{{title2|}}}{{{h2|}}}|syntax2={{{syntax2|}}}{{{l2|}}}<!-- -->|format2={{{format2|}}}{{{f2|}}}|collapse2={{{collapse2|}}}{{{s2|}}}|expl2={{{expl2|}}}{{{e2|}}}|n2={{{n2|}}}|d2={{{d2|}}}<!-- -->|code3={{{code3|}}}{{{c3|}}}|title3={{{title3|}}}{{{h3|}}}|syntax3={{{syntax3|}}}{{{l3|}}}<!-- -->|format3={{{format3|}}}{{{f3|}}}|collapse3={{{collapse3|}}}{{{s3|}}}|expl3={{{expl3|}}}{{{e3|}}}|n3={{{n3|}}}|d3={{{d3|}}}<!-- -->}}[[Category:CommonsOTM]]<!-- -does not exist- -->|{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|}}}{{{errors|}}}{{{errnum|}}}|{{#if:{{{vstyle|}}}|{{{vstyle}}}|{{{vs|}}}{{{style|}}}}}<!-- -->|{{{vw|}}}{{{vwidth|}}}{{{width|}}}|{{{vt|}}}{{{vtxt|}}}{{{vtext|.}}}|{{{vo|}}}{{{vopt|}}}{{{opt|}}}<!-- -->|{{{topic|}}}|{{{vc|}}}{{{vcat|}}}|lang={{{lang|}}}}}<!-- -->{{#invoke:Autotranslate|autotranslate |1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|p|s|t|/|=|#default={{{1|}}}}}}} |2={{#if:{{{65|}}}|{{{65}}}|{{#if:{{{logo|}}}|{{{logo}}}|{{#ifeq:{{lc:{{{other}}}}}|u|Unknown|OtherTool}} logo<!-- -->{{#if:{{{err|}}}{{{errors|}}}{{{errnum|}}}|{{#switch:{{{err|}}}{{{errors|}}}{{{errnum|}}}<!-- -->|0=-V|-1=-I|-I}}|{{#ifeq:{{{2|{{{1}}}}}}|v|-V}}}}.svg}} }} |3=Other tools |4={{{more|.}}} |5={{{width|}}} |6={{{style|}}} |7={{#if:{{{cat|}}}{{{category|}}}|{{{cat|}}}{{{category|}}}<!-- -->|{{#switch:{{{err|}}}{{{errors|}}}{{{errnum|}}}<!-- -->|-1={{Igen/cat|Uncheckable SVG created with Other tools<!-- -->{{{sub|}}}<!-- only very few subcategories ! -->}}<!-- -->|={{#switch:{{{2|}}}|v|n|s|t=|{{#switch:{{{1}}}|v|n|s|t=<!-- -->|{{#ifeq:{{NAMESPACE}}|File|{{#switch:{{#invoke:Igenmod|newfile}}<!-- -->|s={{Igen/cat|Unspecified SVG created with Other tools}}<!-- {{#switch:{{{topic|}}} ...}} -->|newcat={{Igen/cat|Unspecified new SVG created with Other tools}}<!-- -->}}}}}}}}}}}} |8= |9={{{sort|}}}{{{key|}}}{{{sortkey|}}} |10={{{subc|}}}{{{sub|}}}{{{subcat|}}}{{{subcategory|}}} |11={{{err|}}}{{{errors|}}}{{{errnum|}}} |12={{#if:{{{err|}}}{{{errors|}}}{{{errnum|}}}|{{#ifeq:{{{err|}}}{{{errors|}}}{{{errnum|}}}|0|V|I}}<!-- -->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S|t=s}}|{{#switch:{{{1}}}|v=V|n=N|s=S|t=s<!-- "t" just for Test (Igen/top) -->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) --> |13={{{vo|}}}{{{vopt|}}}{{{opt|}}} |14={{{topic|}}} |15={{lc:{{{other}}}}} |16={{#if:{{{name|}}}{{{tool name|}}}|{{{name|}}}{{{tool name|}}}<!-- -->|{{I18n/othertool|lang={{#if:{{{lang|}}}|{{{lang}}}|{{int:lang}}}}|other={{#ifeq:{{{other}}}|u||o}}<!-- -->|svg={{#if:{{{2|}}}|{{#switch:{{{2}}}|v|s=SVG|{{#switch:{{{1}}}|v|s=SVG<!-- -->|{{#ifeq:{{#invoke:File|extension|file={{PAGENAME}}}}|svg|SVG}}}}}}}}}}}} |17={{#if:{{{iconsize|}}}|{{{iconsize}}}}} |lang={{#if:{{{lang|}}}|{{{lang}}}|{{int:lang}}}} |base=Created with ...}}}}<noinclude> {{SVG created with/doc|opt=yes|I18dot=|vopttext=s|shortkey=Ot|shorthand=Other tool|shorttext=, and always specify <code>name=</code> or <code>tool name=</code><br /> ;Maintenance:<small>If an ''existing template'' is specified by <code>tool name=</code>, that template will be used instead:</small><br />"Created with <code>{{{name}}}</code>" ''or'' "Created with <code>{{{tool name}}}</code>" (case sensitive)<br />In this case the file will be categorized into maintenance category [[:Category:CommonsOTM|CommonsOTM]].|catnam=Created with Other tools|code=yes|n=yes|igen=O|igennote= (or "U" for unknown tools, with parameter <code>other=U</code>) |cattext=}} </noinclude> 7ffooorzwl4x8lvq884ziy0vlbs64mt Tempilet:I18n/othertool 10 1405 10887 2026-07-18T00:54:11Z commons>Kontributor 2K 0 retour 10887 wikitext text/x-wiki <includeonly>{{langSwitch|lang={{#if:{{{lang|}}}|{{{lang}}}|{{int:Lang}}}} |bn={{#if:{{{other}}}|আরেকটি|একটি অজানা}} {{{svg|}}} সরঞ্জাম |de=einem {{#if:{{{other|}}}|anderen|unbekannten}} {{#if:{{{svg|}}}|{{{svg|}}}-}}Editor |en={{#if:{{{other|}}}|another|an unknown}} {{{svg|}}} tool |es=una herramienta {{{svg|}}} {{#if:{{{other|}}}|distinta|desconocida}} |fr=un {{#if:{{{other|}}}|autre|}} logiciel {{{svg|}}} {{#if:{{{other|}}}||inconnu}} |it=un {{#if:{{{other|}}}|altro|}} programma {{{svg|}}} {{#if:{{{other|}}}||ignoto}} |ja={{#if:{{{other|}}}|別|不明}}の{{{svg|}}}ツール |mk={{#if:{{{other|}}}|друга|непозната}} {{{svg|}}} алатка |nl=een {{#if:{{{other|}}}|andere|onbekende}} {{#if:{{{svg|}}}|{{{svg|}}}-}}editor |pt=um {{#if:{{{other|}}}|outro|desconhecido}} {{{svg|}}} programa |ru={{#if:{{{other|}}}|другой|неизвестной}} {{{svg|}}} программе |sl={{#if:{{{other|}}}|drugim|neznanim}} {{{svg|}}} orodjem |tr={{#if:{{{other|}}}|başka bir|bilinmeyen bir}} {{{svg|}}} aracı |zh-hans={{#if:{{{other|}}}|其他|未知}}{{{svg|}}}工具 |zh-hant={{#if:{{{other|}}}|其他|不明}}{{{svg|}}}工具 <!-- add more languages --> |default=''{{#if:{{{other|}}}|other|unknown}} tool'' }}</includeonly><noinclude> <!-- {{documentation|template:i18n/doc}} --> {{LangSwitch |en= This translation template for {{T2|Created with Other tool}} needs 3 parameters: # <code>lang</code>: default is <code>int:Lang</code> # <code>other</code>: either "o" for other, or empty for unknown # <code>svg</code>: either "SVG", or empty if not a vector image |ja= この,{{T2|Created with Other tool}}の翻訳雛形は三つの引数を取ります: # <code>lang</code>: 既定は{{code|int:Lang}}です。 # <code>other</code>: その他のツールの場合は“o”,ツールが不明な場合は空。 # <code>svg</code>: “SVG”,ベクタ図形でなければ空。 |sl= Ta prevodna predloga za {{T2|Created with Other tool}} potrebuje 3 parametre: # <code>lang</code>: privzeto je <code>int:Lang</code> # <code>other</code>: bodisi »o« (other) za drugo ali prazno za neznano # <code>svg</code>: bodisi »sVG« ali prazno, če ne gre za vektorsko sliko |tr= {{T2|Created with Other tool}} için bu çeviri şablonu 3 parametreye ihtiyaç duyar: # <code>lang</code>: varsayılan <code>int:Lang</code> # <code>other</code>: diğeri için "o" veya bilinmeyen için boş # <code>svg</code>: ya "SVG" ya da vektör görüntüsü değilse boş }} [[Category:Internationalization templates using LangSwitch|{{PAGENAME}}]] </noinclude> 0rhezw34oepips02ebipbwupmlaejxt 10888 10887 2026-08-25T23:38:36Z RAPTOR7762 18 1 revision imported from [[:commons:Template:I18n/othertool]] 10887 wikitext text/x-wiki <includeonly>{{langSwitch|lang={{#if:{{{lang|}}}|{{{lang}}}|{{int:Lang}}}} |bn={{#if:{{{other}}}|আরেকটি|একটি অজানা}} {{{svg|}}} সরঞ্জাম |de=einem {{#if:{{{other|}}}|anderen|unbekannten}} {{#if:{{{svg|}}}|{{{svg|}}}-}}Editor |en={{#if:{{{other|}}}|another|an unknown}} {{{svg|}}} tool |es=una herramienta {{{svg|}}} {{#if:{{{other|}}}|distinta|desconocida}} |fr=un {{#if:{{{other|}}}|autre|}} logiciel {{{svg|}}} {{#if:{{{other|}}}||inconnu}} |it=un {{#if:{{{other|}}}|altro|}} programma {{{svg|}}} {{#if:{{{other|}}}||ignoto}} |ja={{#if:{{{other|}}}|別|不明}}の{{{svg|}}}ツール |mk={{#if:{{{other|}}}|друга|непозната}} {{{svg|}}} алатка |nl=een {{#if:{{{other|}}}|andere|onbekende}} {{#if:{{{svg|}}}|{{{svg|}}}-}}editor |pt=um {{#if:{{{other|}}}|outro|desconhecido}} {{{svg|}}} programa |ru={{#if:{{{other|}}}|другой|неизвестной}} {{{svg|}}} программе |sl={{#if:{{{other|}}}|drugim|neznanim}} {{{svg|}}} orodjem |tr={{#if:{{{other|}}}|başka bir|bilinmeyen bir}} {{{svg|}}} aracı |zh-hans={{#if:{{{other|}}}|其他|未知}}{{{svg|}}}工具 |zh-hant={{#if:{{{other|}}}|其他|不明}}{{{svg|}}}工具 <!-- add more languages --> |default=''{{#if:{{{other|}}}|other|unknown}} tool'' }}</includeonly><noinclude> <!-- {{documentation|template:i18n/doc}} --> {{LangSwitch |en= This translation template for {{T2|Created with Other tool}} needs 3 parameters: # <code>lang</code>: default is <code>int:Lang</code> # <code>other</code>: either "o" for other, or empty for unknown # <code>svg</code>: either "SVG", or empty if not a vector image |ja= この,{{T2|Created with Other tool}}の翻訳雛形は三つの引数を取ります: # <code>lang</code>: 既定は{{code|int:Lang}}です。 # <code>other</code>: その他のツールの場合は“o”,ツールが不明な場合は空。 # <code>svg</code>: “SVG”,ベクタ図形でなければ空。 |sl= Ta prevodna predloga za {{T2|Created with Other tool}} potrebuje 3 parametre: # <code>lang</code>: privzeto je <code>int:Lang</code> # <code>other</code>: bodisi »o« (other) za drugo ali prazno za neznano # <code>svg</code>: bodisi »sVG« ali prazno, če ne gre za vektorsko sliko |tr= {{T2|Created with Other tool}} için bu çeviri şablonu 3 parametreye ihtiyaç duyar: # <code>lang</code>: varsayılan <code>int:Lang</code> # <code>other</code>: diğeri için "o" veya bilinmeyen için boş # <code>svg</code>: ya "SVG" ya da vektör görüntüsü değilse boş }} [[Category:Internationalization templates using LangSwitch|{{PAGENAME}}]] </noinclude> 0rhezw34oepips02ebipbwupmlaejxt Tempilet:Ifsandbox 10 1406 10889 2024-05-26T04:41:12Z commons>Verdy p 0 clarify unneeded comment marks, and minimal structural indendation 10889 wikitext text/x-wiki {{#ifeq: {{lc:{{#titleparts: {{ {{UC:{{{b|}}}}}PAGENAME }} | -{{{m|1}}} }}/sandbox}} | {{lc:{{ {{UC:{{{b|}}}}}PAGENAME}} }} | {{#switch: {{{1|}}} |n = {{#titleparts: {{ {{UC:{{{b|}}}}}PAGENAME }}| -{{{m|1}}} }} |doc = {{#titleparts: {{SUBJECTPAGENAME}} | -1 }}/doc |#default = {{{1|}}} }} | {{#switch: {{{1|}}} |n = {{ {{UC:{{{b|}}}}}PAGENAME }} |doc = {{SUBJECTPAGENAME}}/doc |#default = {{{2|}}} }} }}<noinclude>{{Documentation|{{Ifsandbox|doc}}}}</noinclude> qwzalngu9fma699l34t6biep7q8ndb6 10890 10889 2026-08-25T23:38:36Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Ifsandbox]] 10889 wikitext text/x-wiki {{#ifeq: {{lc:{{#titleparts: {{ {{UC:{{{b|}}}}}PAGENAME }} | -{{{m|1}}} }}/sandbox}} | {{lc:{{ {{UC:{{{b|}}}}}PAGENAME}} }} | {{#switch: {{{1|}}} |n = {{#titleparts: {{ {{UC:{{{b|}}}}}PAGENAME }}| -{{{m|1}}} }} |doc = {{#titleparts: {{SUBJECTPAGENAME}} | -1 }}/doc |#default = {{{1|}}} }} | {{#switch: {{{1|}}} |n = {{ {{UC:{{{b|}}}}}PAGENAME }} |doc = {{SUBJECTPAGENAME}}/doc |#default = {{{2|}}} }} }}<noinclude>{{Documentation|{{Ifsandbox|doc}}}}</noinclude> qwzalngu9fma699l34t6biep7q8ndb6 Tempilet:Commonist 10 1407 10891 2024-08-09T23:46:04Z commons>Jarekt 0 replace {{autotranslate}} with call to Module:Autotranslate 10891 wikitext text/x-wiki <!-- {{#if:{{{err|}}}|{{clr}}}} -->{{#invoke:Autotranslate|autotranslate |1={{{1|}}} |2={{#switch:{{{logo}}}|none|n|-=&#32;|=Commonist.svg|{{{logo|}}}}} |3=Commonist |4={{{more|.}}} |5={{{width|}}} |6={{{style|}}} |7={{#if:{{{err|}}}|{{#ifeq:{{{err}}}|0||{{{err|0}}}}}}} |8={{{size|}}} |9={{{topic|}}} |10={{{iconsize|}}} |11={{Ifsvg|SVG}} |base=Commonist}}{{iffile|{{#switch:{{{category|↗}}}|↗|=[[Category:Uploaded with Commonist<!-- -->{{#switch:{{{sub|↗}}}|↗|=<!-- not defined, empty: check "user" -->{{#switch:{{{user}}}|TUBS|TUBS|TUBS=&#58; {{{user}}}}}<!-- subcategorize with some users -->|{{#if:{{{sub|}}}|{{#invoke:Char|subst|{{{sub}}}}}|{{#ifeq:{{{err|0}}}|0||:Invalid}}}}}}]]<!-- use "sub" when defined. -->|{{#switch:{{{category|↗}}}|↗|-|=|{{#ifeq:{{lc:{{padleft:|5|{{{category}}}}}}}|&#91;[cat|{{{category}}}<!-- -->|[[Category:{{{category}}}]]}}}}}}}}<noinclude> {{Documentation}} </noinclude> 0dxrxldmhto3gt4m2ijj3lzsy0l1r1g 10892 10891 2026-08-25T23:38:36Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Commonist]] 10891 wikitext text/x-wiki <!-- {{#if:{{{err|}}}|{{clr}}}} -->{{#invoke:Autotranslate|autotranslate |1={{{1|}}} |2={{#switch:{{{logo}}}|none|n|-=&#32;|=Commonist.svg|{{{logo|}}}}} |3=Commonist |4={{{more|.}}} |5={{{width|}}} |6={{{style|}}} |7={{#if:{{{err|}}}|{{#ifeq:{{{err}}}|0||{{{err|0}}}}}}} |8={{{size|}}} |9={{{topic|}}} |10={{{iconsize|}}} |11={{Ifsvg|SVG}} |base=Commonist}}{{iffile|{{#switch:{{{category|↗}}}|↗|=[[Category:Uploaded with Commonist<!-- -->{{#switch:{{{sub|↗}}}|↗|=<!-- not defined, empty: check "user" -->{{#switch:{{{user}}}|TUBS|TUBS|TUBS=&#58; {{{user}}}}}<!-- subcategorize with some users -->|{{#if:{{{sub|}}}|{{#invoke:Char|subst|{{{sub}}}}}|{{#ifeq:{{{err|0}}}|0||:Invalid}}}}}}]]<!-- use "sub" when defined. -->|{{#switch:{{{category|↗}}}|↗|-|=|{{#ifeq:{{lc:{{padleft:|5|{{{category}}}}}}}|&#91;[cat|{{{category}}}<!-- -->|[[Category:{{{category}}}]]}}}}}}}}<noinclude> {{Documentation}} </noinclude> 0dxrxldmhto3gt4m2ijj3lzsy0l1r1g Tempilet:Commonist/en 10 1408 10893 2022-07-10T18:53:32Z commons>Sarang 0 expansion 10893 wikitext text/x-wiki {{Created with/layout |logo={{{2|Commonist.svg}}} |iconsize= |width={{{5|}}} |style={{{6|}}} |text=This {{#ifeq:{{{8}}}|big|''large''&#32;}}{{#if:{{{7|}}}|W3C-invalid}} {{{11|}}} {{#if:{{{9|}}}|{{Igen/top|{{{9}}}|file|lang=en}}|file}} was uploaded {{#if:{{{1|}}}|by {{{1}}} }} with {{#ifeq:{{{3|Commonist}}}|Commonist|[[Commons:Commonist|Commonist]]|[[{{{3|}}}]]}}{{#if:{{{4|}}}|{{{4}}}|.}} |lang=en }} dmei9rgzpi0hf74f6732r3mjs9g9no4 10894 10893 2026-08-25T23:38:36Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Commonist/en]] 10893 wikitext text/x-wiki {{Created with/layout |logo={{{2|Commonist.svg}}} |iconsize= |width={{{5|}}} |style={{{6|}}} |text=This {{#ifeq:{{{8}}}|big|''large''&#32;}}{{#if:{{{7|}}}|W3C-invalid}} {{{11|}}} {{#if:{{{9|}}}|{{Igen/top|{{{9}}}|file|lang=en}}|file}} was uploaded {{#if:{{{1|}}}|by {{{1}}} }} with {{#ifeq:{{{3|Commonist}}}|Commonist|[[Commons:Commonist|Commonist]]|[[{{{3|}}}]]}}{{#if:{{{4|}}}|{{{4}}}|.}} |lang=en }} dmei9rgzpi0hf74f6732r3mjs9g9no4 Tempilet:Created with MetaPost 10 1409 10895 2025-12-25T08:57:34Z commons>Sebastian Wallroth 0 Q1265836 10895 wikitext text/x-wiki {{#switch:n|{{{2|}}}|{{{1|}}}=|{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!-- -->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}}}<!-- -->{{#invoke:Autotranslate|autotranslate |1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|s|/|=|#default={{{1|}}}}}}} |2={{#if:{{{logo|}}}|{{{logo}}}|{{Data|item=Q1265836|property=P154}}}} |3=MetaPost |4={{{more|.}}} |5={{{width|}}} |6={{{style|}}} |7={{{cat|{{{category|}}}}}} |8= |9={{{sort|{{{key|{{{sortkey|}}}}}}}}} |10={{{subc|}}}{{{sub|{{{subcat|{{{subcategory|}}}}}}}}} |11={{{err|{{{errors|{{{errnum|}}}}}}}}} |12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!-- -->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!-- -->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) --> |13={{{vo|{{{vopt|{{{opt|}}}}}}}}} |14={{{topic|}}} |16={{Label|Q1265836}} |base=Created with ...}}<noinclude> {{SVG created with/doc|shorthand=Metapost|igen=M|code=3|opt=yes|n=yes|inval=n}} </noinclude> 7rnbgi68e0vop12tq00l9vl6opva4sb 10896 10895 2026-08-25T23:38:36Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Created_with_MetaPost]] 10895 wikitext text/x-wiki {{#switch:n|{{{2|}}}|{{{1|}}}=|{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!-- -->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}}}<!-- -->{{#invoke:Autotranslate|autotranslate |1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|s|/|=|#default={{{1|}}}}}}} |2={{#if:{{{logo|}}}|{{{logo}}}|{{Data|item=Q1265836|property=P154}}}} |3=MetaPost |4={{{more|.}}} |5={{{width|}}} |6={{{style|}}} |7={{{cat|{{{category|}}}}}} |8= |9={{{sort|{{{key|{{{sortkey|}}}}}}}}} |10={{{subc|}}}{{{sub|{{{subcat|{{{subcategory|}}}}}}}}} |11={{{err|{{{errors|{{{errnum|}}}}}}}}} |12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!-- -->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!-- -->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) --> |13={{{vo|{{{vopt|{{{opt|}}}}}}}}} |14={{{topic|}}} |16={{Label|Q1265836}} |base=Created with ...}}<noinclude> {{SVG created with/doc|shorthand=Metapost|igen=M|code=3|opt=yes|n=yes|inval=n}} </noinclude> 7rnbgi68e0vop12tq00l9vl6opva4sb Tempilet:Colorbox 10 1410 10897 2020-08-17T10:18:15Z commons>Tuvalkin 0 +{{{style|}}} 10897 wikitext text/x-wiki <span style="background-color:{{{1|white}}};border:1px solid darkgray;{{{style|}}}" title={{{title|"{{{1|white}}}"}}}>&nbsp;{{#if:{{{2|}}}|{{#if:{{{3|}}}|[[{{{3}}}|{{{2}}}]]|{{{2}}}}}|&nbsp;&nbsp;}}&nbsp;</span><noinclude>{{documentation}}</noinclude> aakxzgmi5vecukt1nwc2osraycl9fz4 10898 10897 2026-08-25T23:38:36Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Colorbox]] 10897 wikitext text/x-wiki <span style="background-color:{{{1|white}}};border:1px solid darkgray;{{{style|}}}" title={{{title|"{{{1|white}}}"}}}>&nbsp;{{#if:{{{2|}}}|{{#if:{{{3|}}}|[[{{{3}}}|{{{2}}}]]|{{{2}}}}}|&nbsp;&nbsp;}}&nbsp;</span><noinclude>{{documentation}}</noinclude> aakxzgmi5vecukt1nwc2osraycl9fz4 Tempilet:Created with Adobe Illustrator 10 1411 10899 2024-08-09T23:46:19Z commons>Jarekt 0 replace {{autotranslate}} with call to Module:Autotranslate 10899 wikitext text/x-wiki {{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!-- -->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!-- -->{{#invoke:Autotranslate|autotranslate |1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|s|p|/|=|#default={{{1|}}}}}}} |2={{#if:{{{logo|}}}|{{{logo}}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|0|Adobe-yes.svg|Adobe-no.svg}}<!-- valid / invalid -->|{{#switch:v|{{{2}}}|{{{1}}}=Adobe-yes.svg|<!-- valid -->|{{#ifeq:{{F|{{PAGENAME}}|X}}|svg|Adobe-un.svg|Adobe-yes.svg}}}}}}}} |3=Adobe Illustrator |4={{{more|.}}} |5={{{width|}}} |6={{{style|}}} |7={{{cat|{{{category|}}}}}} |8= |9={{{sort|{{{key|{{{sortkey|}}}}}}}}} |10={{{sub|{{{subcat|{{{subcategory|{{#if:{{{topic|}}}|{{Igen/sub|{{{topic}}}}}}}}}}}}}}}} |11={{{err|{{{errors|{{{errnum|}}}}}}}}} |12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!-- -->|{{#switch:{{{2}}}|n=N|v=V|s=S<!-- -->|{{#switch:{{{1}}}|n=N|v=V|s=S<!-- -->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) --> |13={{{vo|{{{vopt|{{{opt|}}}}}}}}} |14={{{topic|}}} |17={{{iconsize|}}} |base=Created with ...}}<noinclude> {{SVG created with/doc|shortkey=Adobe|shorthand=Adobe|redirects=Adobe Illustrator, Created with Illustrator|igen=a|n=yes|unspec=y|sandbox=yes}} </noinclude> 0fiysfmdt51adjgtgn5meafgrnfoqt2 10900 10899 2026-08-25T23:38:36Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Created_with_Adobe_Illustrator]] 10899 wikitext text/x-wiki {{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!-- -->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!-- -->{{#invoke:Autotranslate|autotranslate |1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|s|p|/|=|#default={{{1|}}}}}}} |2={{#if:{{{logo|}}}|{{{logo}}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|0|Adobe-yes.svg|Adobe-no.svg}}<!-- valid / invalid -->|{{#switch:v|{{{2}}}|{{{1}}}=Adobe-yes.svg|<!-- valid -->|{{#ifeq:{{F|{{PAGENAME}}|X}}|svg|Adobe-un.svg|Adobe-yes.svg}}}}}}}} |3=Adobe Illustrator |4={{{more|.}}} |5={{{width|}}} |6={{{style|}}} |7={{{cat|{{{category|}}}}}} |8= |9={{{sort|{{{key|{{{sortkey|}}}}}}}}} |10={{{sub|{{{subcat|{{{subcategory|{{#if:{{{topic|}}}|{{Igen/sub|{{{topic}}}}}}}}}}}}}}}} |11={{{err|{{{errors|{{{errnum|}}}}}}}}} |12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!-- -->|{{#switch:{{{2}}}|n=N|v=V|s=S<!-- -->|{{#switch:{{{1}}}|n=N|v=V|s=S<!-- -->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) --> |13={{{vo|{{{vopt|{{{opt|}}}}}}}}} |14={{{topic|}}} |17={{{iconsize|}}} |base=Created with ...}}<noinclude> {{SVG created with/doc|shortkey=Adobe|shorthand=Adobe|redirects=Adobe Illustrator, Created with Illustrator|igen=a|n=yes|unspec=y|sandbox=yes}} </noinclude> 0fiysfmdt51adjgtgn5meafgrnfoqt2 Tempilet:Created with Gnuplot 10 1412 10901 2025-12-24T16:47:47Z commons>Sebastian Wallroth 0 Q306559 10901 wikitext text/x-wiki {{#switch:n|{{{2|}}}|{{{1|}}}=|{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|{{{vw|{{{vwidth|{{{width|}}}}}}}}}<!-- -->|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}}}<!-- -->{{#invoke:Autotranslate|autotranslate |1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|s|=|#default={{{1|}}}}}}} |2={{#if:{{{logo|{{{4|}}}}}}|{{{logo|{{{4}}}}}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|0|Gnuplot val.svg|Gnuplot inv.svg}}<!-- -->|{{#switch:v|{{{2}}}|{{{1}}}=Gnuplot val.svg||Lissajous small.svg}}}}}} |3=Gnuplot |4={{{more|.}}} |5={{{width|}}} |6={{{style|}}} |7={{{cat|{{{category|}}}}}} |8= |9={{{sort|{{{key|{{{sortkey|}}}}}}}}} |10={{{subc|}}}{{{sub|}}} |11={{{err|{{{errors|{{{errnum|}}}}}}}}} |12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!-- -->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!-- -->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) --> |13={{{vo|{{{vopt|{{{opt|}}}}}}}}} |14={{#if:{{{topic|}}}|{{{topic}}}|plot}} |16={{#switch:n|{{{2|<noinclude>n</noinclude>}}}|{{{1}}}={{Label|Q306559}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|{{Label|Q306559}}|{{#switch:v|{{{2}}}|{{{1}}}={{Label|Q306559}}|<!-- -->{{W|Gnuplot|Gnu}}{{Plainlinks|1=https://validator.w3.org/check<!-- --><includeonly>?uri={{urlencode:{{canonicalurl:Special:Filepath/{{PAGENAME}}}}}}<!-- -->&doctype=SVG+1.1&ss=1&#35;source</includeonly>|2=''plot''}}}}}}}} |17={{{iconsize|}}} |base=Created with ...}}<noinclude> <br> <div style="border:2px solid#0F0;background-color:#CFB;margin:0 0 1.5em;text-aligno:center"> [[File:Dialog-go-hand-ltr.svg|32px|left]][[File:Lissajous small.svg|32px|right]] The template {{Tl|Created with Gnuplot}} (shorthand:{{Tl|Gnuplot}}) marks as well {{W|Vector graphics}} as {{W|Computer graphics}}, e.g. <code>.png</code>.<br style="clear:both"/> * ''Computer graphics'' (e.g. files .PNG) should be marked with {{Tld|Gnuplot|'''n'''}} * ''Vector graphics'' should be checked for their W3C-validity and then marked either by {{Tld|Gnuplot|'''v'''}} or {{Tld|Gnuplot|2='''err='''##}} ::To allow a swift check for validity, the generated box "This plot was created with gnu''plot''" can be used: ::::the Italic written ''plot'' is a link to the W3C-validator. ::(Of course, this link won't be useful if the file isn't a vector graphic) </div> {{SVG created with/doc|shorthand=Gnuplot|top=plot|igen=G|code=3|n=yes|opt=yes|unspec=yes|sub=n|desc={{en|1=Used to mark files created with Gnuplot.<br>Wherever possible, please include the ''source code'', using {{T0|Igen}} with the parameter '''<code>code=</code>'''<br>{{Nobold|For more information, see the description of the template:{{T0|Created with code}}.}}}}|cattext=<nowiki/> See otherwise: * {{Catcont|Gnuplot diagrams|3=*}} * {{Catcont|Images with Gnuplot source code|3=*}} * {{Catcont|Gnuplot charts using data from the Australian Bureau of Statistics|3=*}} :* {{Catcont|Valid SVG created with Gnuplot-AusGovStat|3=*}} <br> }} </noinclude> junuxu4xvbf9hrkltnavh82b82hwrr5 10902 10901 2026-08-25T23:38:36Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Created_with_Gnuplot]] 10901 wikitext text/x-wiki {{#switch:n|{{{2|}}}|{{{1|}}}=|{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|{{{vw|{{{vwidth|{{{width|}}}}}}}}}<!-- -->|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}}}<!-- -->{{#invoke:Autotranslate|autotranslate |1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|s|=|#default={{{1|}}}}}}} |2={{#if:{{{logo|{{{4|}}}}}}|{{{logo|{{{4}}}}}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|0|Gnuplot val.svg|Gnuplot inv.svg}}<!-- -->|{{#switch:v|{{{2}}}|{{{1}}}=Gnuplot val.svg||Lissajous small.svg}}}}}} |3=Gnuplot |4={{{more|.}}} |5={{{width|}}} |6={{{style|}}} |7={{{cat|{{{category|}}}}}} |8= |9={{{sort|{{{key|{{{sortkey|}}}}}}}}} |10={{{subc|}}}{{{sub|}}} |11={{{err|{{{errors|{{{errnum|}}}}}}}}} |12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!-- -->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!-- -->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) --> |13={{{vo|{{{vopt|{{{opt|}}}}}}}}} |14={{#if:{{{topic|}}}|{{{topic}}}|plot}} |16={{#switch:n|{{{2|<noinclude>n</noinclude>}}}|{{{1}}}={{Label|Q306559}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|{{Label|Q306559}}|{{#switch:v|{{{2}}}|{{{1}}}={{Label|Q306559}}|<!-- -->{{W|Gnuplot|Gnu}}{{Plainlinks|1=https://validator.w3.org/check<!-- --><includeonly>?uri={{urlencode:{{canonicalurl:Special:Filepath/{{PAGENAME}}}}}}<!-- -->&doctype=SVG+1.1&ss=1&#35;source</includeonly>|2=''plot''}}}}}}}} |17={{{iconsize|}}} |base=Created with ...}}<noinclude> <br> <div style="border:2px solid#0F0;background-color:#CFB;margin:0 0 1.5em;text-aligno:center"> [[File:Dialog-go-hand-ltr.svg|32px|left]][[File:Lissajous small.svg|32px|right]] The template {{Tl|Created with Gnuplot}} (shorthand:{{Tl|Gnuplot}}) marks as well {{W|Vector graphics}} as {{W|Computer graphics}}, e.g. <code>.png</code>.<br style="clear:both"/> * ''Computer graphics'' (e.g. files .PNG) should be marked with {{Tld|Gnuplot|'''n'''}} * ''Vector graphics'' should be checked for their W3C-validity and then marked either by {{Tld|Gnuplot|'''v'''}} or {{Tld|Gnuplot|2='''err='''##}} ::To allow a swift check for validity, the generated box "This plot was created with gnu''plot''" can be used: ::::the Italic written ''plot'' is a link to the W3C-validator. ::(Of course, this link won't be useful if the file isn't a vector graphic) </div> {{SVG created with/doc|shorthand=Gnuplot|top=plot|igen=G|code=3|n=yes|opt=yes|unspec=yes|sub=n|desc={{en|1=Used to mark files created with Gnuplot.<br>Wherever possible, please include the ''source code'', using {{T0|Igen}} with the parameter '''<code>code=</code>'''<br>{{Nobold|For more information, see the description of the template:{{T0|Created with code}}.}}}}|cattext=<nowiki/> See otherwise: * {{Catcont|Gnuplot diagrams|3=*}} * {{Catcont|Images with Gnuplot source code|3=*}} * {{Catcont|Gnuplot charts using data from the Australian Bureau of Statistics|3=*}} :* {{Catcont|Valid SVG created with Gnuplot-AusGovStat|3=*}} <br> }} </noinclude> junuxu4xvbf9hrkltnavh82b82hwrr5 Tempilet:Created with ArcMap 10 1413 10905 2025-12-16T08:35:15Z commons>Sebastian Wallroth 0 Q4784993 10905 wikitext text/x-wiki {{SVGvalid |1 = {{{1|}}} |2 = {{{2|}}} |3 = {{{err|{{{errors|{{{errnum|}}}}}}}}} |4 = {{{vs|{{{vstyle|{{{style|}}}}}}}}} |5 = {{{vw|{{{vwidth|{{{width|}}}}}}}}} |6 = {{{vt|{{{vtxt|{{{vtext|.}}}}}}}}} |7 = {{{vo|{{{vopt|{{{opt|}}}}}}}}} }}<!-- -->{{#invoke:Autotranslate|autotranslate |base = Created with ... |1 = {{#if: {{{2|}}} | {{{1|}}} | {{#switch: {{{1|}}} ||v|n|s = |#default={{{1|}}} }} }} |2 = {{#if: {{{logo|}}} | {{{logo|}}} | U+1F30D<!-- showing the Earth globe emoji: Europe, Africa and Western Asia (🌍) --> }} |3 = ArcMap |4 = {{{more|.}}} |5 = {{{width|}}} |6 = {{{style|}}} |7 = {{{cat|{{{category|}}}}}} |9 = {{{sort|{{{key|{{{sortkey|}}}}}}}}} |10 = {{#ifeq: {{{sub|}}} | &#58;Maps || {{{sub|{{{subcat|{{{subcategory|}}}}}}}}} }}<!-- unsub --> |11 = {{{err|{{{errors|{{{errnum|}}}}}}}}} |12 = {{#if: {{{err|{{{errors|{{{errnum|}}}}}}}}} | {{#ifeq: {{{err|{{{errors|{{{errnum|}}}}}}}}} | 0 | V | I }} | {{#if: {{{2|}}} | {{#switch:{{{2}}} |v = V |n = N |s = S }} | {{#switch:{{{1}}} |v = V |n = N |s = S |#default = {{#ifeq: {{NAMESPACE}} | File | {{#invoke:Igenmod|extcode}} }} }} }} }}<!-- s(SVG) or n(PNG) --> |13 = {{{vo|{{{vopt|{{{opt|}}}}}}}}} |14 = {{#if: {{{topic|}}} | {{{topic}}} | m }}<!-- default is always "map" --> |16 = {{Label|Q4784993}} |17 = 22<!-- iconsize for the Earth globe emoji: U+1F30D showing Europe, Africa and Western Asia (🌍), U+1F30E showing the Americas (🌎), U+1F30F showing Eastern Asia and Australia (🌏), or U+1F310 showing a wireframe (🌐) --> }}<noinclude>{{SVG created with/doc |desc = Used to mark files created with {{W|ArcMap|ArcMap}}. |shorthand = ArcMap |shortkey = ArcMap |box = yes |n = yes |sub = n |top = m |topic = no |opt = yes }}</noinclude> rxtexhfevywy4u4pnnw330dhzjb96ct 10906 10905 2026-08-25T23:38:37Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Created_with_ArcMap]] 10905 wikitext text/x-wiki {{SVGvalid |1 = {{{1|}}} |2 = {{{2|}}} |3 = {{{err|{{{errors|{{{errnum|}}}}}}}}} |4 = {{{vs|{{{vstyle|{{{style|}}}}}}}}} |5 = {{{vw|{{{vwidth|{{{width|}}}}}}}}} |6 = {{{vt|{{{vtxt|{{{vtext|.}}}}}}}}} |7 = {{{vo|{{{vopt|{{{opt|}}}}}}}}} }}<!-- -->{{#invoke:Autotranslate|autotranslate |base = Created with ... |1 = {{#if: {{{2|}}} | {{{1|}}} | {{#switch: {{{1|}}} ||v|n|s = |#default={{{1|}}} }} }} |2 = {{#if: {{{logo|}}} | {{{logo|}}} | U+1F30D<!-- showing the Earth globe emoji: Europe, Africa and Western Asia (🌍) --> }} |3 = ArcMap |4 = {{{more|.}}} |5 = {{{width|}}} |6 = {{{style|}}} |7 = {{{cat|{{{category|}}}}}} |9 = {{{sort|{{{key|{{{sortkey|}}}}}}}}} |10 = {{#ifeq: {{{sub|}}} | &#58;Maps || {{{sub|{{{subcat|{{{subcategory|}}}}}}}}} }}<!-- unsub --> |11 = {{{err|{{{errors|{{{errnum|}}}}}}}}} |12 = {{#if: {{{err|{{{errors|{{{errnum|}}}}}}}}} | {{#ifeq: {{{err|{{{errors|{{{errnum|}}}}}}}}} | 0 | V | I }} | {{#if: {{{2|}}} | {{#switch:{{{2}}} |v = V |n = N |s = S }} | {{#switch:{{{1}}} |v = V |n = N |s = S |#default = {{#ifeq: {{NAMESPACE}} | File | {{#invoke:Igenmod|extcode}} }} }} }} }}<!-- s(SVG) or n(PNG) --> |13 = {{{vo|{{{vopt|{{{opt|}}}}}}}}} |14 = {{#if: {{{topic|}}} | {{{topic}}} | m }}<!-- default is always "map" --> |16 = {{Label|Q4784993}} |17 = 22<!-- iconsize for the Earth globe emoji: U+1F30D showing Europe, Africa and Western Asia (🌍), U+1F30E showing the Americas (🌎), U+1F30F showing Eastern Asia and Australia (🌏), or U+1F310 showing a wireframe (🌐) --> }}<noinclude>{{SVG created with/doc |desc = Used to mark files created with {{W|ArcMap|ArcMap}}. |shorthand = ArcMap |shortkey = ArcMap |box = yes |n = yes |sub = n |top = m |topic = no |opt = yes }}</noinclude> rxtexhfevywy4u4pnnw330dhzjb96ct Tempilet:Created with ChemDraw 10 1414 10907 2024-08-09T23:46:41Z commons>Jarekt 0 replace {{autotranslate}} with call to Module:Autotranslate 10907 wikitext text/x-wiki {{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!-- -->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!-- -->{{#invoke:Autotranslate|autotranslate |1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|s|/|=|#default={{{1|}}}}}}} |2={{#if:{{{logo|}}}|{{{logo}}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|0|ChemDraw icon.svg|ChemDraw inv.svg}}|ChemDraw icon.svg}}}} |3=ChemDraw |4={{{more|.}}} |5={{{width|}}} |6={{{style|}}} |7={{{cat|{{{category|}}}}}} |9={{{sort|{{{key|{{{sortkey|}}}}}}}}} |10={{#ifeq:&#58;Structural formulas|{{{sub|}}}||{{{sub|{{{subcat|{{{subcategory|}}}}}}}}}}} |11={{{err|{{{errors|{{{errnum|}}}}}}}}} |12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!-- -->|{{#switch:{{{2}}}|n=N|v=V|s=S<!-- "n" will never come, -->|{{#switch:{{{1}}}|n=N|v=V|s=S|{{iffile|s|v}}}}}}}}<!-- only SVG are created --> |13={{{vo|{{{vopt|{{{opt|}}}}}}}}} |14={{#if:{{{topic|}}}|{{{topic}}}|sf}} |17={{{iconsize|}}} |base=Created with ...}}<noinclude> {{SVG created with/doc|shortkey=Chemdraw|shorthand=Chemdraw|igen=C|opt=yes|unspec=|n=|vopttext=yes|sub=n|top=sf|topic=no|desc={{Mld |en=Used to mark files created with {{W|ChemDraw}} or {{W|ChemBioDraw}} |pt=Utilizada para marcar os ficheiros criados com {{W|ChemDraw||pt}} ou {{W|ChemBioDraw||pt}}}} addinf=|cattext=<br>'''No subcategorizing''' occurs because ''all'' drawings are of {{C|SVG structural formulas|chemical structures}}.}} </noinclude> 9blpo80cw6d18nq7gsflpfompmnkav4 10908 10907 2026-08-25T23:38:37Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Created_with_ChemDraw]] 10907 wikitext text/x-wiki {{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!-- -->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!-- -->{{#invoke:Autotranslate|autotranslate |1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|s|/|=|#default={{{1|}}}}}}} |2={{#if:{{{logo|}}}|{{{logo}}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|0|ChemDraw icon.svg|ChemDraw inv.svg}}|ChemDraw icon.svg}}}} |3=ChemDraw |4={{{more|.}}} |5={{{width|}}} |6={{{style|}}} |7={{{cat|{{{category|}}}}}} |9={{{sort|{{{key|{{{sortkey|}}}}}}}}} |10={{#ifeq:&#58;Structural formulas|{{{sub|}}}||{{{sub|{{{subcat|{{{subcategory|}}}}}}}}}}} |11={{{err|{{{errors|{{{errnum|}}}}}}}}} |12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!-- -->|{{#switch:{{{2}}}|n=N|v=V|s=S<!-- "n" will never come, -->|{{#switch:{{{1}}}|n=N|v=V|s=S|{{iffile|s|v}}}}}}}}<!-- only SVG are created --> |13={{{vo|{{{vopt|{{{opt|}}}}}}}}} |14={{#if:{{{topic|}}}|{{{topic}}}|sf}} |17={{{iconsize|}}} |base=Created with ...}}<noinclude> {{SVG created with/doc|shortkey=Chemdraw|shorthand=Chemdraw|igen=C|opt=yes|unspec=|n=|vopttext=yes|sub=n|top=sf|topic=no|desc={{Mld |en=Used to mark files created with {{W|ChemDraw}} or {{W|ChemBioDraw}} |pt=Utilizada para marcar os ficheiros criados com {{W|ChemDraw||pt}} ou {{W|ChemBioDraw||pt}}}} addinf=|cattext=<br>'''No subcategorizing''' occurs because ''all'' drawings are of {{C|SVG structural formulas|chemical structures}}.}} </noinclude> 9blpo80cw6d18nq7gsflpfompmnkav4 Module:Lua banner/config 828 1415 10913 2020-07-11T17:28:04Z commons>Tacsipacsi 0 [[COM:AES|←]]Created page with 'local cfg = {} -- Don’t touch this line. -- Subpage blacklist: these subpages will not be categorized (except for the -- error category, which is always adde...' 10913 Scribunto text/plain local cfg = {} -- Don’t touch this line. -- Subpage blacklist: these subpages will not be categorized (except for the -- error category, which is always added if there is an error). -- For example “Template:Foo/doc” matches the `doc = true` rule, so it will have -- no categories. “Template:Foo” and “Template:Foo/documentation” match no rules, -- so they *will* have categories. All rules should be in the -- ['<subpage name>'] = true, -- format. cfg['subpage_blacklist'] = { ['doc'] = true, ['sandbox'] = true, ['sandbox2'] = true, ['testcases'] = true, } -- Allow wishes: whether wishes for conversion to Lua are allowed. -- If true, calls with zero parameters are valid, and considered to be wishes: -- The box’s text is “This template should use Lua”, and cfg['wish_category'] is -- added. If false, such calls are invalid, an error message appears, and -- cfg['error_category'] is added. cfg['allow_wishes'] = true -- Default category: this category is added if the module call contains errors -- (e.g. no module listed). A category name without namespace, or nil -- to disable categorization (not recommended). cfg['error_category'] = 'Lua templates with errors' -- Wish category: this category is added if no module is listed, and wishes are -- allowed. (Not used if wishes are not allowed.) A category name without -- namespace, or nil to disable categorization. cfg['wish_category'] = 'Lua-candidates' -- Default category: this category is added if none of the below module_categories -- matches the first module listed. A category name without namespace, or nil -- to disable categorization. cfg['default_category'] = 'Lua-based templates' -- Module categories: one of these categories is added if the first listed module -- is the listed module (e.g. {{Lua|Module:String}} adds -- [[Category:Lua String-based templates]].) Format: -- ['<module name>'] = '<category name>' -- where neither <module name> nor <category name> contains namespace. An empty -- table (i.e. no module-based categorization) will suffice on smaller wikis. cfg['module_categories'] = { ['String'] = 'Lua String-based templates', ['Iteration'] = 'Lua-based iteration templates', } return cfg -- Don’t touch this line. apef33i53q7osqaf8zy8y7v5txaimzw 10914 10913 2026-08-25T23:38:37Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Lua_banner/config]] 10913 Scribunto text/plain local cfg = {} -- Don’t touch this line. -- Subpage blacklist: these subpages will not be categorized (except for the -- error category, which is always added if there is an error). -- For example “Template:Foo/doc” matches the `doc = true` rule, so it will have -- no categories. “Template:Foo” and “Template:Foo/documentation” match no rules, -- so they *will* have categories. All rules should be in the -- ['<subpage name>'] = true, -- format. cfg['subpage_blacklist'] = { ['doc'] = true, ['sandbox'] = true, ['sandbox2'] = true, ['testcases'] = true, } -- Allow wishes: whether wishes for conversion to Lua are allowed. -- If true, calls with zero parameters are valid, and considered to be wishes: -- The box’s text is “This template should use Lua”, and cfg['wish_category'] is -- added. If false, such calls are invalid, an error message appears, and -- cfg['error_category'] is added. cfg['allow_wishes'] = true -- Default category: this category is added if the module call contains errors -- (e.g. no module listed). A category name without namespace, or nil -- to disable categorization (not recommended). cfg['error_category'] = 'Lua templates with errors' -- Wish category: this category is added if no module is listed, and wishes are -- allowed. (Not used if wishes are not allowed.) A category name without -- namespace, or nil to disable categorization. cfg['wish_category'] = 'Lua-candidates' -- Default category: this category is added if none of the below module_categories -- matches the first module listed. A category name without namespace, or nil -- to disable categorization. cfg['default_category'] = 'Lua-based templates' -- Module categories: one of these categories is added if the first listed module -- is the listed module (e.g. {{Lua|Module:String}} adds -- [[Category:Lua String-based templates]].) Format: -- ['<module name>'] = '<category name>' -- where neither <module name> nor <category name> contains namespace. An empty -- table (i.e. no module-based categorization) will suffice on smaller wikis. cfg['module_categories'] = { ['String'] = 'Lua String-based templates', ['Iteration'] = 'Lua-based iteration templates', } return cfg -- Don’t touch this line. apef33i53q7osqaf8zy8y7v5txaimzw Tempilet:M 10 1416 10917 2022-07-19T14:36:57Z commons>Sarang 0 internationalize 10917 wikitext text/x-wiki {{#switch:- |{{{2|}}} | {{{3|}}} | {{{4|}}} ={{#switch:+ |{{{2|}}} | {{{3|}}} | {{{4|}}} = |#default = Module: }} }}<!-- -->[[{{#switch:{{{3|}}}|+|-|=|{{{3}}}}}:Module:{{PAGENAME:{{{1|}}}}}|{{#switch:+ |{{{2|}}} | {{{3|}}} | {{{4|}}} = Module: }}{{#switch: {{{2|}}} |+|-|={{{1|}}} |#default={{{2|}}} }}]]<noinclude> {{Documentation}}</noinclude> 489hwhh5e7e1g8vf1yfvbplzr7ijkxx 10918 10917 2026-08-25T23:38:37Z RAPTOR7762 18 1 revision imported from [[:commons:Template:M]] 10917 wikitext text/x-wiki {{#switch:- |{{{2|}}} | {{{3|}}} | {{{4|}}} ={{#switch:+ |{{{2|}}} | {{{3|}}} | {{{4|}}} = |#default = Module: }} }}<!-- -->[[{{#switch:{{{3|}}}|+|-|=|{{{3}}}}}:Module:{{PAGENAME:{{{1|}}}}}|{{#switch:+ |{{{2|}}} | {{{3|}}} | {{{4|}}} = Module: }}{{#switch: {{{2|}}} |+|-|={{{1|}}} |#default={{{2|}}} }}]]<noinclude> {{Documentation}}</noinclude> 489hwhh5e7e1g8vf1yfvbplzr7ijkxx Tempilet:Tle 10 1417 10919 2022-10-25T05:19:24Z commons>Jonesey95 0 better 10919 wikitext text/x-wiki &#123;&#123;&#160;{{mono|1={{#if:{{{T|}}}|[[Template:{{{T}}}|{{ucfirst:{{{T}}}}}]]|{{ucfirst:{{{t|tle}}}}}}}}}<!-- -->{{#invoke:Iteration|tleparm}}<!-- -->&#160;&#125;&#125;<noinclude> {{Documentation}} </noinclude> aggaluuvxgfph5597q0tazahteq8t48 10920 10919 2026-08-25T23:38:37Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Tle]] 10919 wikitext text/x-wiki &#123;&#123;&#160;{{mono|1={{#if:{{{T|}}}|[[Template:{{{T}}}|{{ucfirst:{{{T}}}}}]]|{{ucfirst:{{{t|tle}}}}}}}}}<!-- -->{{#invoke:Iteration|tleparm}}<!-- -->&#160;&#125;&#125;<noinclude> {{Documentation}} </noinclude> aggaluuvxgfph5597q0tazahteq8t48 Tempilet:Exp 10 1418 10921 2024-08-28T17:44:08Z commons>CptViraj 0 Protected "[[Template:Exp]]": [[Special:MyLanguage/Commons:Protection policy|Widely used template]] ([Edit=Allow only autopatrollers] (indefinite) [Move=Allow only autopatrollers] (indefinite)) 10921 wikitext text/x-wiki <sup>{{{1|1}}}</sup><noinclude> ---- Example: * X{{tlx|1=exp|2=superscript text}} -> X{{exp|superscript text}} ==See also== {{Text formatting template (see also)}} [[Category:Text formatting templates]] </noinclude> 5yyrujh0pyyp8biaumj81tuyejeq64i 10922 10921 2026-08-25T23:38:37Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Exp]] 10921 wikitext text/x-wiki <sup>{{{1|1}}}</sup><noinclude> ---- Example: * X{{tlx|1=exp|2=superscript text}} -> X{{exp|superscript text}} ==See also== {{Text formatting template (see also)}} [[Category:Text formatting templates]] </noinclude> 5yyrujh0pyyp8biaumj81tuyejeq64i Tempilet:Created with CorelDRAW 10 1419 10923 2025-12-23T21:51:25Z commons>Sebastian Wallroth 0 CorelDRAW 10923 wikitext text/x-wiki {{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!-- -->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!-- -->{{#invoke:Autotranslate|autotranslate |1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|s|p|/|=|#default={{{1|}}}}}}} |2={{#if:{{{logo|}}}|{{{logo}}}|{{Data|item=Q142371|property=P154}}}} |3=CorelDRAW |4={{{more|}}} |5={{{width|}}} |6={{{style|}}} |7={{{cat|{{{category|}}}}}} |9={{{sort|{{{key|{{{sortkey|}}}}}}}}} |10={{{sub|{{{subcat|{{{subcategory|}}}}}}}}} |11={{{err|{{{errors|{{{errnum|}}}}}}}}} |12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!-- -->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!-- -->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) --> |13={{{vo|{{{vopt|{{{opt|}}}}}}}}} |14={{{topic|}}} |16={{Label|Q142371}} |base=Created with ...}}<noinclude> {{SVG created with/doc|igen=D|n=yes|shorthand=CorelDraw|opt=yes|unspec=yes}} </noinclude> ja0yyvhkh21owmqo4pxbx6pml30knhk 10924 10923 2026-08-25T23:38:37Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Created_with_CorelDRAW]] 10923 wikitext text/x-wiki {{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!-- -->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!-- -->{{#invoke:Autotranslate|autotranslate |1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|s|p|/|=|#default={{{1|}}}}}}} |2={{#if:{{{logo|}}}|{{{logo}}}|{{Data|item=Q142371|property=P154}}}} |3=CorelDRAW |4={{{more|}}} |5={{{width|}}} |6={{{style|}}} |7={{{cat|{{{category|}}}}}} |9={{{sort|{{{key|{{{sortkey|}}}}}}}}} |10={{{sub|{{{subcat|{{{subcategory|}}}}}}}}} |11={{{err|{{{errors|{{{errnum|}}}}}}}}} |12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!-- -->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!-- -->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) --> |13={{{vo|{{{vopt|{{{opt|}}}}}}}}} |14={{{topic|}}} |16={{Label|Q142371}} |base=Created with ...}}<noinclude> {{SVG created with/doc|igen=D|n=yes|shorthand=CorelDraw|opt=yes|unspec=yes}} </noinclude> ja0yyvhkh21owmqo4pxbx6pml30knhk Tempilet:Igen/amp 10 1420 10925 2025-12-15T14:48:08Z commons>Sebastian Wallroth 0 Scalable pixels.png 10925 wikitext text/x-wiki {{Created with/layout|logo={{#if:{{{&l|}}}|{{#ifeq:{{{&l}}}|-|UnknownTool logo|{{{&l}}}}}|{{#switch:{{lc:{{{1|<noinclude>QGIS</noinclude>}}}}} |qgis|q|=QGIS logo new.svg |ai image format converter=Dall-e 3 (jan '24) artificial intelligence icon.png |ada=Ada horizon green logo with slogan.svg |adobe flex=Adobe Flex Logo.svg |adobe illustrator=Adobe Illustrator Icon (CS6).svg |adobe indesign=Adobe InDesign Icon (CS6).svg |adobe photoshop=Adobe Photoshop CS6 icon.svg |adobe photoshop elements=Photoshop Elements.svg |android camera=Android robot.svg |arcgis=ArcGIS globe (cropped).svg |arcgis pro=ArcGIS globe (cropped).svg |arcmap=ArcGIS globe (cropped).svg |asymptote=AsymptoteLogo.svg |atari basic=Atari Basic Program Animation.gif |audacity=Audacity Logo nofilter.svg |autocad=AutoCad new logo.svg |basic=BasicLabelRounded.svg |beamer=LaTeX cover.svg |blender=Blender logo no text.svg |ce=The C Programming Language logo.svg |c.a.r.=C.a.R. logo.png |cobol=COBOL Mine.svg |canon photostitch=Canon wordmark.svg |canva=Faenza-unknown.svg |celestia=Celestia icon - Rework.png |chemdoodle=Chemdoodle.png |chemsketch=ChemSketchPlain.svg |classic colors=Classic Colors - Icon (2021).png |clojure=Clojure logo.svg |combinezm=CombineZ family logo.svg |combinezp=CombineZ family logo.svg |commodore basic=Monitor Commodore CBM 3016 with BASIC program-0309.jpg |coreldraw=Corel logo initial.svg |cpp=ISO C++ Logo.svg |csharp=C Sharp Logo 2023.svg |dall-e 2=DALL-E 2 Signature.svg |dart=Dart programming language logo icon.svg |de=D Programming Language logo.svg |discovery studio visualizer=Discovery Studio icon.png |drawshield=DrawShield.svg |elki=Elki logo.jpg |eazydraw=EazyDraw logo.svg |eiffel=Eiffel logo.svg |elixir=Official Elixir logo.png |entry=EntryCommonLogo.svg |erlang=Erlang logo.svg |euphoria=OpenEuphoria logo.png |family basic=Family BASIC logo.svg |freebasic=Fblogo.gif |freemind=Free Mind.png |gfa basic=Gfa basic screenshot.png |geogebra=Geogebra.svg |geotools=Geotools-logo.svg |gnumeric=Gnumeric.svg |gnuplot=Gnuplot val.svg |google drive=Google Drive icon (2020).svg |greenshot=Greenshot logo.svg |gunnmap=GunnMap Icon.svg |helicon focus=Faenza-unknown.svg |hugin=Hugin-splash.svg |imagemagick=ImageMagick logo.svg |ipe=Ipe6pre30.png |jfreechart=JFreeChart 3D pie chart sample.svg |java=Duke (Java mascot) waving.svg |javascript=JavaScript shield logo (no text).svg |kplot=Verstärkungs prinzip.png |kdenlive=Kdenlive logo.svg |krita=Calligrakrita-base.svg |latex=LaTeX logo.svg |labplot=Breezeicons-apps-48-labplot.svg |libreoffice=LibreOffice 7.5 Main Icon.svg |libreoffice calc=LibreOffice 7.5 Calc Icon.svg |libreoffice draw=LibreOffice 7.5 Draw Icon.svg |libreoffice impress=LibreOffice 7.5 Impress Icon.svg |lilypond=LilyPond.svg |locomotive basic=Locomotive BASIC color bars.gif |matlab=Matlab Logo.png |mandelbulber=Mandelbulb detail.png |manim=Manim icon.svg |mathematica=Mathematica Logo.svg |matplotlib=Created with Matplotlib-logo.svg |maya=Autodesk Maya logo.svg |medibang paint=Faenza-unknown.svg |metapost=Metapost-icon.svg |microsoft access=Microsoft Office Access (2025-present).svg |microsoft excel=Microsoft Office Excel (2025–present).svg |microsoft image composite editor=ICE logo.png |microsoft paint=Microsoft Paint.svg |microsoft powerpoint=Microsoft Office PowerPoint (2025–present).svg |microsoft project=Microsoft Project (2019–present).svg |microsoft publisher=Microsoft Office Publisher (2019-present).svg |microsoft small basic=Microsoft Small Basic icon.png |microsoft word=Microsoft Office Word (2025–present).svg |musescore=MuseScore Logo mu.svg |numpy=NumPy logo 2020.svg |octave=Gnu-octave-logo.svg |online2pdf.com=Online2PDF.com favicon.png |openoffice=Aoo4icon.svg |openoffice.org=Aoo4icon.svg |other tool=OtherTool logo-V.svg |pdftk=Favicon-pdftk.png |ptgui=PTGui AAAAA.png |paint tool sai=SAI icon.svg |paint.net=Paint.NET Logo.png |panorama perfect=Faenza-unknown.svg |pathvisio=PathVisio logo.png |perl=Perl-logo.svg |persistence of vision=Povray logo sphere.png |photoscape=PhotoScape logo.png |photoshop photomerge=Adobe Photoshop CS6 icon.svg |picasa=Picasa.svg |plantuml=Plantuml Logo.svg |poladroid=Poladroid logo.png |procreate=Procreate logo.png |purebasic=PureBasic IDE 5.10.png |pymol=Pymol logo.png |python=Python-logo-notext.svg |qbasic=QBASIC.png |qgis=QGIS logo new.svg |qtpfsgui=Luminance HDR Logo 2012.svg |r=R logo.svg |rawgraphs=RAWGraphs Logo.svg |rawtherapee=RawTherapee logo-circle.svg |ruby=Ruby logo.svg |spss=SPSS logo.svg |sage=Icon Mathematical Plot.svg |scalable pixels=Scalable pixels.png |scilab= |scribus= |sharemap= |sibelius= |simons' basic= |stella= |synfig= |tikz= |topaz denoise ai= |ufraw= |ultiplot= |vmd= |vectorfieldplot= |vectorworks= |vissim= |visual basic= |winplot= |wondershare filmora= |xcircuit= |xfig= |xojo= |xpano= |zerene stacker= |darktable= |diagrams.net= |other tool= |perl= |svgc=SVG cleaner.svg |sopt=SVGoptimizer.svg |svgo|omg=Svg-optimizer.svg |chemsketch=ChemSketchPlain.svg |gimp=The GIMP icon - gnome.svg |gmt=GMT logo.svg<!-- simple SVG logo as substitute --> |heraldicon=Heraldicon logo.svg |inkscape|i|x|ia=Inkscape-small.svg |adobe|a=Adobe Illustrator icon CS6.svg |bin2svg=Bin2svg logo red.svg}}}} |iconsize={{#ifeq:{{{1}}}|sopt|16}}<!-- because it is too large --> |text={{I18n/and with}} {{#switch:{{lc:{{{1|}}}}} |i|inkscape=Inkscape |x=Inkscape-extract |a|adobe=Adobe |ia=Inkscape, {{F|Adobe Illustrator icon CS6.svg|Z|16}} and with Adobe Illustrator |heraldicon={{Plainlinks|https://heraldicon.org/|Heraldicon}} |q|qgis|={{Plainlinks|https://www.osgeo.org/projects/qgis/|QGIS}} |chemsketch=ChemSketch |c|chemdraw=ChemDraw |svgc={{Plainlinks|https://github.com/RazrFalcon/svgcleaner|SVG cleaner}}[[Category:SVG cleaned files]] |svgo|omg={{Plainlinks|https://github.com/jakearchibald/svgomg/blob/master/README.md|SVGomg}}[[Category:SVG omg files]] |sopt={{Plainlinks|https://svgoptimizer.com/|SVGoptimizer}}[[Category:SVG optimized files]] |{{{1|''QGIS''}}}}}.<!-- |more={{{more|}}} --> }}<includeonly>{{#switch:{{NAMESPACENUMBER}}|6|7|14|15={{#switch:{{{&c|}}} |-= |+|=[[Category:{{#ifeq:{{F|{{PAGENAME}}|X}}|svg|{{#ifeq:{{{&c}}}|+|Valid&#32;}}SVG c|C}}reated {{#switch:{{{2}}} |I|i|Inkscape|A|a|Adobe=|{{#switch:{{{1}}}|IA|bin2svg=|also}}}} with {{#ifeq:{{{2}}}{{{1}}}|InkscapeA|Inkscape and Adobe Illustrator |{{#switch:{{lc:{{{1|}}}}} |i|inkscape=Inkscape |x=Inkscape-extract |svgc|svgo=<!-- Inkscape cleaned/SVG-omg --> |adobe|a=Adobe Illustrator |chemsketch=ChemSketch |c|chemdraw=ChemDraw |ia=Inkscape and Adobe Illustrator{{#switch:{{{topic}}}|c|ce|eh=&#58;CoA}} |q|qgis|=QGIS |#default={{{1|QGIS}}}}}{{#ifeq:{{{&c}}}|+||{{#switch:{{lc:{{{2|}}}}} |i|inkscape|=&#32;and Inkscape |a|adobe=&#32;and Adobe Illustrator{{#ifeq:{{{1}}}|I|{{#switch:{{{topic}}}|c|ce|eh=&#58;CoA}}}} |?={{#if:{{Igen/par|{{{3|}}}| |&#32;and Inkscape}}}}}}}}}}]] |#default={{Igen/cat|{{{&c}}}|{{{&k|}}}}} }}}}</includeonly><noinclude> [[Category:Image generation subtemplates| ]] [[Category:Created with/layout-templates| ]] {{clr}} This sub[[Template:Image generation|template]] displays a short message box that a file had been generated ''with participation of <nowiki>{{{1|}}}</nowiki>''. The default for parameter 1, the "with_tool", is "QGIS"; parameter 2 is the "main_tool" - there seems to be nothing else than Inkscape.<br> If another main tool than Adobe or Inkscape is needed, the value of <code>Igen-parm_1</code> is passed with parameter 3, from where it can be evaluated. For the subtemplate, {{T0|Image generation}} uses the parameters # <code>&</code> or <code>&=with_tool</code> ('''default''': {{T0|QGIS}}) # <code>&&=main_tool</code> (from Igen_parm1, '''default''': {{T0|Inkscape}}) # <code>&c</code> for another category; #:either full category name with the brackets, #:or suppress with <code>&c=-</code> #:or additional categorization with <code>&c=+</code> to "with_tool". # <code>Igen-parm_1</code> :: and the named parameters &c "category", &s "subcategory" The subtemplate categorizes <nowiki>[[Category:SVG created with</nowiki> <code>with-tool</code> and <code>main-tool</code>]],<br> a subcategory of {{C|SVG created with QGIS|SVG created with <code>with-tool</code>}}. </noinclude> 6b6qrojl0ttkb0uxwm49gijus8p8wfw 10926 10925 2026-08-25T23:38:37Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Igen/amp]] 10925 wikitext text/x-wiki {{Created with/layout|logo={{#if:{{{&l|}}}|{{#ifeq:{{{&l}}}|-|UnknownTool logo|{{{&l}}}}}|{{#switch:{{lc:{{{1|<noinclude>QGIS</noinclude>}}}}} |qgis|q|=QGIS logo new.svg |ai image format converter=Dall-e 3 (jan '24) artificial intelligence icon.png |ada=Ada horizon green logo with slogan.svg |adobe flex=Adobe Flex Logo.svg |adobe illustrator=Adobe Illustrator Icon (CS6).svg |adobe indesign=Adobe InDesign Icon (CS6).svg |adobe photoshop=Adobe Photoshop CS6 icon.svg |adobe photoshop elements=Photoshop Elements.svg |android camera=Android robot.svg |arcgis=ArcGIS globe (cropped).svg |arcgis pro=ArcGIS globe (cropped).svg |arcmap=ArcGIS globe (cropped).svg |asymptote=AsymptoteLogo.svg |atari basic=Atari Basic Program Animation.gif |audacity=Audacity Logo nofilter.svg |autocad=AutoCad new logo.svg |basic=BasicLabelRounded.svg |beamer=LaTeX cover.svg |blender=Blender logo no text.svg |ce=The C Programming Language logo.svg |c.a.r.=C.a.R. logo.png |cobol=COBOL Mine.svg |canon photostitch=Canon wordmark.svg |canva=Faenza-unknown.svg |celestia=Celestia icon - Rework.png |chemdoodle=Chemdoodle.png |chemsketch=ChemSketchPlain.svg |classic colors=Classic Colors - Icon (2021).png |clojure=Clojure logo.svg |combinezm=CombineZ family logo.svg |combinezp=CombineZ family logo.svg |commodore basic=Monitor Commodore CBM 3016 with BASIC program-0309.jpg |coreldraw=Corel logo initial.svg |cpp=ISO C++ Logo.svg |csharp=C Sharp Logo 2023.svg |dall-e 2=DALL-E 2 Signature.svg |dart=Dart programming language logo icon.svg |de=D Programming Language logo.svg |discovery studio visualizer=Discovery Studio icon.png |drawshield=DrawShield.svg |elki=Elki logo.jpg |eazydraw=EazyDraw logo.svg |eiffel=Eiffel logo.svg |elixir=Official Elixir logo.png |entry=EntryCommonLogo.svg |erlang=Erlang logo.svg |euphoria=OpenEuphoria logo.png |family basic=Family BASIC logo.svg |freebasic=Fblogo.gif |freemind=Free Mind.png |gfa basic=Gfa basic screenshot.png |geogebra=Geogebra.svg |geotools=Geotools-logo.svg |gnumeric=Gnumeric.svg |gnuplot=Gnuplot val.svg |google drive=Google Drive icon (2020).svg |greenshot=Greenshot logo.svg |gunnmap=GunnMap Icon.svg |helicon focus=Faenza-unknown.svg |hugin=Hugin-splash.svg |imagemagick=ImageMagick logo.svg |ipe=Ipe6pre30.png |jfreechart=JFreeChart 3D pie chart sample.svg |java=Duke (Java mascot) waving.svg |javascript=JavaScript shield logo (no text).svg |kplot=Verstärkungs prinzip.png |kdenlive=Kdenlive logo.svg |krita=Calligrakrita-base.svg |latex=LaTeX logo.svg |labplot=Breezeicons-apps-48-labplot.svg |libreoffice=LibreOffice 7.5 Main Icon.svg |libreoffice calc=LibreOffice 7.5 Calc Icon.svg |libreoffice draw=LibreOffice 7.5 Draw Icon.svg |libreoffice impress=LibreOffice 7.5 Impress Icon.svg |lilypond=LilyPond.svg |locomotive basic=Locomotive BASIC color bars.gif |matlab=Matlab Logo.png |mandelbulber=Mandelbulb detail.png |manim=Manim icon.svg |mathematica=Mathematica Logo.svg |matplotlib=Created with Matplotlib-logo.svg |maya=Autodesk Maya logo.svg |medibang paint=Faenza-unknown.svg |metapost=Metapost-icon.svg |microsoft access=Microsoft Office Access (2025-present).svg |microsoft excel=Microsoft Office Excel (2025–present).svg |microsoft image composite editor=ICE logo.png |microsoft paint=Microsoft Paint.svg |microsoft powerpoint=Microsoft Office PowerPoint (2025–present).svg |microsoft project=Microsoft Project (2019–present).svg |microsoft publisher=Microsoft Office Publisher (2019-present).svg |microsoft small basic=Microsoft Small Basic icon.png |microsoft word=Microsoft Office Word (2025–present).svg |musescore=MuseScore Logo mu.svg |numpy=NumPy logo 2020.svg |octave=Gnu-octave-logo.svg |online2pdf.com=Online2PDF.com favicon.png |openoffice=Aoo4icon.svg |openoffice.org=Aoo4icon.svg |other tool=OtherTool logo-V.svg |pdftk=Favicon-pdftk.png |ptgui=PTGui AAAAA.png |paint tool sai=SAI icon.svg |paint.net=Paint.NET Logo.png |panorama perfect=Faenza-unknown.svg |pathvisio=PathVisio logo.png |perl=Perl-logo.svg |persistence of vision=Povray logo sphere.png |photoscape=PhotoScape logo.png |photoshop photomerge=Adobe Photoshop CS6 icon.svg |picasa=Picasa.svg |plantuml=Plantuml Logo.svg |poladroid=Poladroid logo.png |procreate=Procreate logo.png |purebasic=PureBasic IDE 5.10.png |pymol=Pymol logo.png |python=Python-logo-notext.svg |qbasic=QBASIC.png |qgis=QGIS logo new.svg |qtpfsgui=Luminance HDR Logo 2012.svg |r=R logo.svg |rawgraphs=RAWGraphs Logo.svg |rawtherapee=RawTherapee logo-circle.svg |ruby=Ruby logo.svg |spss=SPSS logo.svg |sage=Icon Mathematical Plot.svg |scalable pixels=Scalable pixels.png |scilab= |scribus= |sharemap= |sibelius= |simons' basic= |stella= |synfig= |tikz= |topaz denoise ai= |ufraw= |ultiplot= |vmd= |vectorfieldplot= |vectorworks= |vissim= |visual basic= |winplot= |wondershare filmora= |xcircuit= |xfig= |xojo= |xpano= |zerene stacker= |darktable= |diagrams.net= |other tool= |perl= |svgc=SVG cleaner.svg |sopt=SVGoptimizer.svg |svgo|omg=Svg-optimizer.svg |chemsketch=ChemSketchPlain.svg |gimp=The GIMP icon - gnome.svg |gmt=GMT logo.svg<!-- simple SVG logo as substitute --> |heraldicon=Heraldicon logo.svg |inkscape|i|x|ia=Inkscape-small.svg |adobe|a=Adobe Illustrator icon CS6.svg |bin2svg=Bin2svg logo red.svg}}}} |iconsize={{#ifeq:{{{1}}}|sopt|16}}<!-- because it is too large --> |text={{I18n/and with}} {{#switch:{{lc:{{{1|}}}}} |i|inkscape=Inkscape |x=Inkscape-extract |a|adobe=Adobe |ia=Inkscape, {{F|Adobe Illustrator icon CS6.svg|Z|16}} and with Adobe Illustrator |heraldicon={{Plainlinks|https://heraldicon.org/|Heraldicon}} |q|qgis|={{Plainlinks|https://www.osgeo.org/projects/qgis/|QGIS}} |chemsketch=ChemSketch |c|chemdraw=ChemDraw |svgc={{Plainlinks|https://github.com/RazrFalcon/svgcleaner|SVG cleaner}}[[Category:SVG cleaned files]] |svgo|omg={{Plainlinks|https://github.com/jakearchibald/svgomg/blob/master/README.md|SVGomg}}[[Category:SVG omg files]] |sopt={{Plainlinks|https://svgoptimizer.com/|SVGoptimizer}}[[Category:SVG optimized files]] |{{{1|''QGIS''}}}}}.<!-- |more={{{more|}}} --> }}<includeonly>{{#switch:{{NAMESPACENUMBER}}|6|7|14|15={{#switch:{{{&c|}}} |-= |+|=[[Category:{{#ifeq:{{F|{{PAGENAME}}|X}}|svg|{{#ifeq:{{{&c}}}|+|Valid&#32;}}SVG c|C}}reated {{#switch:{{{2}}} |I|i|Inkscape|A|a|Adobe=|{{#switch:{{{1}}}|IA|bin2svg=|also}}}} with {{#ifeq:{{{2}}}{{{1}}}|InkscapeA|Inkscape and Adobe Illustrator |{{#switch:{{lc:{{{1|}}}}} |i|inkscape=Inkscape |x=Inkscape-extract |svgc|svgo=<!-- Inkscape cleaned/SVG-omg --> |adobe|a=Adobe Illustrator |chemsketch=ChemSketch |c|chemdraw=ChemDraw |ia=Inkscape and Adobe Illustrator{{#switch:{{{topic}}}|c|ce|eh=&#58;CoA}} |q|qgis|=QGIS |#default={{{1|QGIS}}}}}{{#ifeq:{{{&c}}}|+||{{#switch:{{lc:{{{2|}}}}} |i|inkscape|=&#32;and Inkscape |a|adobe=&#32;and Adobe Illustrator{{#ifeq:{{{1}}}|I|{{#switch:{{{topic}}}|c|ce|eh=&#58;CoA}}}} |?={{#if:{{Igen/par|{{{3|}}}| |&#32;and Inkscape}}}}}}}}}}]] |#default={{Igen/cat|{{{&c}}}|{{{&k|}}}}} }}}}</includeonly><noinclude> [[Category:Image generation subtemplates| ]] [[Category:Created with/layout-templates| ]] {{clr}} This sub[[Template:Image generation|template]] displays a short message box that a file had been generated ''with participation of <nowiki>{{{1|}}}</nowiki>''. The default for parameter 1, the "with_tool", is "QGIS"; parameter 2 is the "main_tool" - there seems to be nothing else than Inkscape.<br> If another main tool than Adobe or Inkscape is needed, the value of <code>Igen-parm_1</code> is passed with parameter 3, from where it can be evaluated. For the subtemplate, {{T0|Image generation}} uses the parameters # <code>&</code> or <code>&=with_tool</code> ('''default''': {{T0|QGIS}}) # <code>&&=main_tool</code> (from Igen_parm1, '''default''': {{T0|Inkscape}}) # <code>&c</code> for another category; #:either full category name with the brackets, #:or suppress with <code>&c=-</code> #:or additional categorization with <code>&c=+</code> to "with_tool". # <code>Igen-parm_1</code> :: and the named parameters &c "category", &s "subcategory" The subtemplate categorizes <nowiki>[[Category:SVG created with</nowiki> <code>with-tool</code> and <code>main-tool</code>]],<br> a subcategory of {{C|SVG created with QGIS|SVG created with <code>with-tool</code>}}. </noinclude> 6b6qrojl0ttkb0uxwm49gijus8p8wfw Tempilet:I18n/and with 10 1421 10927 2023-03-14T18:31:34Z commons>OmegaFallon 0 10927 wikitext text/x-wiki {{LangSwitch |de=und mit |es=y con |fr=et avec |he=ו עם |it=e con |mk=и со |nb=og med |nl=en met |nn=og med |pl=i z |pt=e com o |ru=и с помощью |sl=in z |sv=och med |th=และโดย |zh-hans=以及使用 |zh-hant=以及使用 |default=and with |lang={{{lang|{{int:lang}}}}}}}<noinclude> [[Category:Internationalization templates using LangSwitch|{{PAGENAME}}]]</noinclude> dm5mtz4gtdtxucol6qjkigfhrazy855 10928 10927 2026-08-25T23:38:37Z RAPTOR7762 18 1 revision imported from [[:commons:Template:I18n/and_with]] 10927 wikitext text/x-wiki {{LangSwitch |de=und mit |es=y con |fr=et avec |he=ו עם |it=e con |mk=и со |nb=og med |nl=en met |nn=og med |pl=i z |pt=e com o |ru=и с помощью |sl=in z |sv=och med |th=และโดย |zh-hans=以及使用 |zh-hant=以及使用 |default=and with |lang={{{lang|{{int:lang}}}}}}}<noinclude> [[Category:Internationalization templates using LangSwitch|{{PAGENAME}}]]</noinclude> dm5mtz4gtdtxucol6qjkigfhrazy855 Tempilet:Inkscape-hand 10 1422 10929 2024-08-09T23:50:00Z commons>Jarekt 0 replace {{autotranslate}} with call to Module:Autotranslate 10929 wikitext text/x-wiki {{#ifeq: {{{tool|}}} | IH | {{SVGvalid |1 = {{{1|}}} |2 = {{{2|}}} |3 = {{{err|{{{errors|{{{errnum|}}}}}}}}} |4 = {{{vs|{{{vstyle|{{{style|}}}}}}}}} |5 = {{{vw|{{{vwidth|{{{width|}}}}}}}}} |6 = {{{vt|{{{vtxt|{{{vtext|.}}}}}}}}} |7 = {{{vo|{{{vopt|{{{opt|}}}}}}}}} }} | {{#ifexpr: {{#if: {{{err|{{{errnum|{{{errors|}}}}}}}}} | 1 | 0 }} * {{#ifeq: {{{err|{{{errnum|{{{errors|}}}}}}}}} | 0 | 0 | 1 }} | {{HandSVG |3 = i |6 = n |err = {{{err|{{{errnum|{{{errors|}}}}}}}}} |vsub = {{{vsub|{{{sub|}}}}}} |vtxt = {{{vt|{{{vtxt|{{{vtext|.}}}}}}}}} |width = {{{width|}}} |style = {{{style|}}} |vwidth = {{{vw|{{{vwidth|}}}}}} |vstyle = {{{vs|{{{vstyle|}}}}}} |vopt = {{{vo|{{{vopt|{{{opt|}}}}}}}}} |topic = {{{topic|}}} |sub={{{sub|}}} }} | {{#ifexpr: {{#if: {{{err|{{{errnum|{{{errors|}}}}}}}}} | 1 | 0 }} * {{#ifeq: {{{err|{{{errnum|{{{errors|}}}}}}}}} | 0 | 1 | 0 }} | {{HandSVG<!-- Text editor subcat --> |3 = v |6 = n |vsub = {{{vsub|{{{sub|}}}}}} |vtxt = {{{vt|{{{vtxt|{{{vtext|.}}}}}}}}} |width = {{{width|}}} |style = {{{style|}}} |vwidth = {{{vw|{{{vwidth|}}}}}} |vstyle = {{{vs|{{{vstyle|{{{style|}}}}}}}}} |vopt = {{{vo|{{{vopt|{{{opt|}}}}}}}}} |topic = {{{topic|}}} |sub = {{{sub|}}} }} | {{#if: {{{tagging|{{{tag|}}}}}} | {{HandSVG<!-- Text editor subcat --> |3 = {{{tagging|{{{tag|}}}}}} |6 = n |err = {{{err|{{{errnum|{{{errors|}}}}}}}}} |vsub = {{{vsub|{{{sub|}}}}}} |vtxt = {{{vt|{{{vtxt|{{{vtext|.}}}}}}}}} |width = {{{width|}}} |style = {{{style|}}} |vwidth = {{{vw|{{{vwidth|}}}}}} |vstyle = {{{vs|{{{vstyle|}}}}}} |vopt = {{{vo|{{{vopt|{{{opt|}}}}}}}}} |topic = {{{topic|}}} |sub = {{{sub|}}} }} | {{#if: {{{2|}}} | {{#switch: {{{2|}}} |V|v|I|i|H|h = {{HandSVG<!-- Text editor subcat --> |3 = {{{2|}}} |6 = n |err = {{{err|{{{errnum|{{{errors|}}}}}}}}} |vsub = {{{vsub|{{{sub|}}}}}} |vtxt = {{{vt|{{{vtxt|{{{vtext|.}}}}}}}}} |width = {{{width|}}} |style = {{{style|}}} |vwidth = {{{vw|{{{vwidth|}}}}}} |vstyle = {{{vs|{{{vstyle|}}}}}} |vopt = {{{vo|{{{vopt|{{{opt|}}}}}}}}} |topic = {{{topic|}}} |sub = {{{sub|}}} }} }} | {{#switch: {{{1|}}} |V|v|I|i|H|h = {{HandSVG<!-- Text editor subcat --> |3 = {{{1|}}} |6 = n |err = {{{err|{{{errnum|{{{errors|}}}}}}}}} |vsub = {{{vsub|{{{sub|}}}}}} |vtxt = {{{vt|{{{vtxt|{{{vtext|.}}}}}}}}} |width = {{{width|}}}|style={{{style|}}} |vwidth = {{{vw|{{{vwidth|}}}}}} |vstyle = {{{vs|{{{vstyle|}}}}}} |vopt = {{{vo|{{{vopt|{{{opt|}}}}}}}}} |topic = {{{topic|}}} |sub = {{{sub|}}} }} |#default = {{HandSVG |3 = M |6 = n |err = {{{err|{{{errnum|{{{errors|}}}}}}}}} |vsub = {{{vsub|{{{sub|}}}}}} |vtxt = {{{vt|{{{vtxt|{{{vtext|.}}}}}}}}} |width = {{{width|}}} |style = {{{style|}}} |vwidth = {{{vw|{{{vwidth|}}}}}} |vstyle = {{{vs|{{{vstyle|}}}}}} |vopt = {{{vo|{{{vopt|{{{opt|}}}}}}}}} |topic = {{{topic|}}} |sub = {{{sub|}}} }} }} }} }} }} }} }}<!-- -->{{#invoke:Autotranslate|autotranslate |base = Inkscape-hand |1 = {{#if:{{{user|}}} | {{{user|}}} | {{#if: {{{2|}}} | {{{1|}}} | {{#switch: {{{1|}}} |V|v|I|i|H|h| = |#default = {{{1|}}} }} }} }} |2 = Inkscape {{#switch: {{lc:{{padleft:|1|{{{category|{{{cat|}}}}}}}}}} |a = addition |r = replaced |e|x = expanded |c = composed |d = derived |s = smoothed |v = validated |i = -repaired |#default = to text }}.svg |3 = Inkscape-hand{{#switch: {{lc:{{padleft:|1|{{{category|{{{cat|}}}}}}}}}} |a = -addition |r = -replaced |e|x = -expanded |c = -composed |d = -derived |s = -smoothed |v = -validated |i = -repaired }} |4 = {{#switch: {{lc:{{padleft:|1|{{{category|{{{cat|}}}}}}}}}} |s = 72 |#default = 64 }}px |5 = {{{cre|{{{creator|}}}}}} |6 = {{{more|}}} |7 = {{{width|}}} |8 = {{{style|}}} |9 = {{{key|{{{sort|}}}}}} |10 = {{#invoke:Char|subst|{{{sub|{{{subcat|{{{subcateg|}}}}}}}}}}} |11 = <!-- {{{err|{{{errnum|{{{errors|}}}}}}}}} --> |12 = <!-- Let's assume that manual SVGs are general valid, no further diffusion is necessary -->V<!-- {{#if: {{{err|{{{errors|{{{errnum|}}}}}}}}} | I | {{UC:{{{tag|{{{tagging|}}}}}}}} }} --> |13 = {{{vo|{{{vopt|{{{opt|}}}}}}}}} |14 = {{{topic|{{{what|}}}}}} }}<!-- {{#if: {{{1|}}} | [[Category:MaintCat-Inkscape-hand-author]] }} --><noinclude>{{Documentation}}</noinclude> sp2aaz3ym2wi2ajpnyhjljwqz4iap7l 10930 10929 2026-08-25T23:38:37Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Inkscape-hand]] 10929 wikitext text/x-wiki {{#ifeq: {{{tool|}}} | IH | {{SVGvalid |1 = {{{1|}}} |2 = {{{2|}}} |3 = {{{err|{{{errors|{{{errnum|}}}}}}}}} |4 = {{{vs|{{{vstyle|{{{style|}}}}}}}}} |5 = {{{vw|{{{vwidth|{{{width|}}}}}}}}} |6 = {{{vt|{{{vtxt|{{{vtext|.}}}}}}}}} |7 = {{{vo|{{{vopt|{{{opt|}}}}}}}}} }} | {{#ifexpr: {{#if: {{{err|{{{errnum|{{{errors|}}}}}}}}} | 1 | 0 }} * {{#ifeq: {{{err|{{{errnum|{{{errors|}}}}}}}}} | 0 | 0 | 1 }} | {{HandSVG |3 = i |6 = n |err = {{{err|{{{errnum|{{{errors|}}}}}}}}} |vsub = {{{vsub|{{{sub|}}}}}} |vtxt = {{{vt|{{{vtxt|{{{vtext|.}}}}}}}}} |width = {{{width|}}} |style = {{{style|}}} |vwidth = {{{vw|{{{vwidth|}}}}}} |vstyle = {{{vs|{{{vstyle|}}}}}} |vopt = {{{vo|{{{vopt|{{{opt|}}}}}}}}} |topic = {{{topic|}}} |sub={{{sub|}}} }} | {{#ifexpr: {{#if: {{{err|{{{errnum|{{{errors|}}}}}}}}} | 1 | 0 }} * {{#ifeq: {{{err|{{{errnum|{{{errors|}}}}}}}}} | 0 | 1 | 0 }} | {{HandSVG<!-- Text editor subcat --> |3 = v |6 = n |vsub = {{{vsub|{{{sub|}}}}}} |vtxt = {{{vt|{{{vtxt|{{{vtext|.}}}}}}}}} |width = {{{width|}}} |style = {{{style|}}} |vwidth = {{{vw|{{{vwidth|}}}}}} |vstyle = {{{vs|{{{vstyle|{{{style|}}}}}}}}} |vopt = {{{vo|{{{vopt|{{{opt|}}}}}}}}} |topic = {{{topic|}}} |sub = {{{sub|}}} }} | {{#if: {{{tagging|{{{tag|}}}}}} | {{HandSVG<!-- Text editor subcat --> |3 = {{{tagging|{{{tag|}}}}}} |6 = n |err = {{{err|{{{errnum|{{{errors|}}}}}}}}} |vsub = {{{vsub|{{{sub|}}}}}} |vtxt = {{{vt|{{{vtxt|{{{vtext|.}}}}}}}}} |width = {{{width|}}} |style = {{{style|}}} |vwidth = {{{vw|{{{vwidth|}}}}}} |vstyle = {{{vs|{{{vstyle|}}}}}} |vopt = {{{vo|{{{vopt|{{{opt|}}}}}}}}} |topic = {{{topic|}}} |sub = {{{sub|}}} }} | {{#if: {{{2|}}} | {{#switch: {{{2|}}} |V|v|I|i|H|h = {{HandSVG<!-- Text editor subcat --> |3 = {{{2|}}} |6 = n |err = {{{err|{{{errnum|{{{errors|}}}}}}}}} |vsub = {{{vsub|{{{sub|}}}}}} |vtxt = {{{vt|{{{vtxt|{{{vtext|.}}}}}}}}} |width = {{{width|}}} |style = {{{style|}}} |vwidth = {{{vw|{{{vwidth|}}}}}} |vstyle = {{{vs|{{{vstyle|}}}}}} |vopt = {{{vo|{{{vopt|{{{opt|}}}}}}}}} |topic = {{{topic|}}} |sub = {{{sub|}}} }} }} | {{#switch: {{{1|}}} |V|v|I|i|H|h = {{HandSVG<!-- Text editor subcat --> |3 = {{{1|}}} |6 = n |err = {{{err|{{{errnum|{{{errors|}}}}}}}}} |vsub = {{{vsub|{{{sub|}}}}}} |vtxt = {{{vt|{{{vtxt|{{{vtext|.}}}}}}}}} |width = {{{width|}}}|style={{{style|}}} |vwidth = {{{vw|{{{vwidth|}}}}}} |vstyle = {{{vs|{{{vstyle|}}}}}} |vopt = {{{vo|{{{vopt|{{{opt|}}}}}}}}} |topic = {{{topic|}}} |sub = {{{sub|}}} }} |#default = {{HandSVG |3 = M |6 = n |err = {{{err|{{{errnum|{{{errors|}}}}}}}}} |vsub = {{{vsub|{{{sub|}}}}}} |vtxt = {{{vt|{{{vtxt|{{{vtext|.}}}}}}}}} |width = {{{width|}}} |style = {{{style|}}} |vwidth = {{{vw|{{{vwidth|}}}}}} |vstyle = {{{vs|{{{vstyle|}}}}}} |vopt = {{{vo|{{{vopt|{{{opt|}}}}}}}}} |topic = {{{topic|}}} |sub = {{{sub|}}} }} }} }} }} }} }} }}<!-- -->{{#invoke:Autotranslate|autotranslate |base = Inkscape-hand |1 = {{#if:{{{user|}}} | {{{user|}}} | {{#if: {{{2|}}} | {{{1|}}} | {{#switch: {{{1|}}} |V|v|I|i|H|h| = |#default = {{{1|}}} }} }} }} |2 = Inkscape {{#switch: {{lc:{{padleft:|1|{{{category|{{{cat|}}}}}}}}}} |a = addition |r = replaced |e|x = expanded |c = composed |d = derived |s = smoothed |v = validated |i = -repaired |#default = to text }}.svg |3 = Inkscape-hand{{#switch: {{lc:{{padleft:|1|{{{category|{{{cat|}}}}}}}}}} |a = -addition |r = -replaced |e|x = -expanded |c = -composed |d = -derived |s = -smoothed |v = -validated |i = -repaired }} |4 = {{#switch: {{lc:{{padleft:|1|{{{category|{{{cat|}}}}}}}}}} |s = 72 |#default = 64 }}px |5 = {{{cre|{{{creator|}}}}}} |6 = {{{more|}}} |7 = {{{width|}}} |8 = {{{style|}}} |9 = {{{key|{{{sort|}}}}}} |10 = {{#invoke:Char|subst|{{{sub|{{{subcat|{{{subcateg|}}}}}}}}}}} |11 = <!-- {{{err|{{{errnum|{{{errors|}}}}}}}}} --> |12 = <!-- Let's assume that manual SVGs are general valid, no further diffusion is necessary -->V<!-- {{#if: {{{err|{{{errors|{{{errnum|}}}}}}}}} | I | {{UC:{{{tag|{{{tagging|}}}}}}}} }} --> |13 = {{{vo|{{{vopt|{{{opt|}}}}}}}}} |14 = {{{topic|{{{what|}}}}}} }}<!-- {{#if: {{{1|}}} | [[Category:MaintCat-Inkscape-hand-author]] }} --><noinclude>{{Documentation}}</noinclude> sp2aaz3ym2wi2ajpnyhjljwqz4iap7l Tempilet:Inkscape-hand/en 10 1423 10931 2020-05-08T07:56:40Z commons>Sarang 0 +pic 10931 wikitext text/x-wiki {{Created with |logo={{{2|}}} |toolcat={{{3|}}} |iconsize={{{4|}}} |text=This {{#if:{{{14|}}}|{{Igen/top|{{{14}}}|{{{what|image}}}|lang=en}}<!-- -->|{{W|Vector graphics|vector image}}}} was created with [[Help:Inkscape|Inkscape]]{{#if:{{{5|}}}|<nowiki/> by {{{5}}}}}, and&nbsp;then&nbsp;{{W|Text editor|manually}}&nbsp;{{#switch:{{padleft:|15|{{{3|}}}}} |Inkscape-hand-a=altered |Inkscape-hand-e=expanded |Inkscape-hand-r=replaced |Inkscape-hand-s=straightened |Inkscape-hand-v=made&nbsp;valid&nbsp;{{F|Gnome-vector-cleanup.svg|Z|18}} |edited}}{{#if:{{{1|}}}|<nowiki/> by&nbsp;{{{1}}}}} |category= |more={{{6|.}}} |width={{{7|}}} |style={{{8|}}} |key={{{9|}}} |sub={{{10|}}} |err={{{11|}}} |w3c={{{12|}}} |lang=en }} mywchu57tnl3lz6dqcp1at3m3bx7qz2 10932 10931 2026-08-25T23:38:38Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Inkscape-hand/en]] 10931 wikitext text/x-wiki {{Created with |logo={{{2|}}} |toolcat={{{3|}}} |iconsize={{{4|}}} |text=This {{#if:{{{14|}}}|{{Igen/top|{{{14}}}|{{{what|image}}}|lang=en}}<!-- -->|{{W|Vector graphics|vector image}}}} was created with [[Help:Inkscape|Inkscape]]{{#if:{{{5|}}}|<nowiki/> by {{{5}}}}}, and&nbsp;then&nbsp;{{W|Text editor|manually}}&nbsp;{{#switch:{{padleft:|15|{{{3|}}}}} |Inkscape-hand-a=altered |Inkscape-hand-e=expanded |Inkscape-hand-r=replaced |Inkscape-hand-s=straightened |Inkscape-hand-v=made&nbsp;valid&nbsp;{{F|Gnome-vector-cleanup.svg|Z|18}} |edited}}{{#if:{{{1|}}}|<nowiki/> by&nbsp;{{{1}}}}} |category= |more={{{6|.}}} |width={{{7|}}} |style={{{8|}}} |key={{{9|}}} |sub={{{10|}}} |err={{{11|}}} |w3c={{{12|}}} |lang=en }} mywchu57tnl3lz6dqcp1at3m3bx7qz2 Tempilet:Created with X 10 1424 10933 2022-11-09T20:23:36Z commons>W like wiki 0 Moving from [[Category:Miscellaneous subtemplates]] to [[Category:Subtemplates]] 10933 wikitext text/x-wiki <noinclude>This is an ''empty template'' without any code, it does nothing. It is used to allow the usage of {{T|Image generation}} without any creating tool. [[Category:Subtemplates|Imgen]] </noinclude> 7wbaeunuwr7hxswerzh0wdxq7svy3yi 10934 10933 2026-08-25T23:38:38Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Created_with_X]] 10933 wikitext text/x-wiki <noinclude>This is an ''empty template'' without any code, it does nothing. It is used to allow the usage of {{T|Image generation}} without any creating tool. [[Category:Subtemplates|Imgen]] </noinclude> 7wbaeunuwr7hxswerzh0wdxq7svy3yi Tempilet:Created with Inkscape-hand 10 1425 10935 2014-10-27T18:34:35Z commons>Sarang 0 +link 10935 wikitext text/x-wiki #REDIRECT [[Template:Inkscape-hand]] k0j1myitij1zuet7a6mjh80n658bjqx 10936 10935 2026-08-25T23:38:38Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Created_with_Inkscape-hand]] 10935 wikitext text/x-wiki #REDIRECT [[Template:Inkscape-hand]] k0j1myitij1zuet7a6mjh80n658bjqx Tempilet:Created with Sodipodi 10 1426 10937 2024-09-18T21:40:40Z commons>Chealer 0 Documentation: There is no such thing as "Inkscape-Sodipodi" AFAIK (introduced by Sarang in 2014-09-11's 134360702). 10937 wikitext text/x-wiki {{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!-- -->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!-- -->{{#invoke:Autotranslate|autotranslate |1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|s|/|=|#default={{{1|}}}}}}} |2={{#if:{{{logo|{{{4|}}}}}}|{{{logo|{{{4}}}}}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|0|Sodipodi Logo-V.svg|Sodipodi Logo-I.svg}}<!-- -->|{{#switch:{{{2|{{{1}}}}}}|v=Sodipodi Logo-V.svg|#default=Sodipodi Logo.svg}}}}}} |3=Sodipodi |4={{{more|.}}} |5={{{width|}}} |6={{{style|}}} |7={{{cat|{{{category|}}}}}} |8= |9={{{sort|{{{key|{{{sortkey|}}}}}}}}} |10={{{sub|{{{subcat|{{{subcategory|}}}}}}}}} |11={{{err|{{{errors|{{{errnum|}}}}}}}}} |12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!-- -->|{{#switch:{{{2}}}|n=N|v=V|s=S<!-- "n" will never be -->|{{#switch:{{{1}}}|n=N|v=V|s=S|{{iffile|s|v}}}}}}}}<!-- only SVG are created --> |13={{{vo|{{{vopt|{{{opt|}}}}}}}}} |14={{{topic|}}} |17=<!-- {{{iconsize|}}} --> |base=Created with ...}}<noinclude> {{SVG created with/doc|igen=S|opt=yes|shorthand=Sodipodi|desc=Used to mark files created with {{W|Sodipodi}}.}} </noinclude> nosiucsf8tzbwsr94brh7vcxb9dbr2w 10938 10937 2026-08-25T23:38:38Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Created_with_Sodipodi]] 10937 wikitext text/x-wiki {{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!-- -->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!-- -->{{#invoke:Autotranslate|autotranslate |1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|s|/|=|#default={{{1|}}}}}}} |2={{#if:{{{logo|{{{4|}}}}}}|{{{logo|{{{4}}}}}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|0|Sodipodi Logo-V.svg|Sodipodi Logo-I.svg}}<!-- -->|{{#switch:{{{2|{{{1}}}}}}|v=Sodipodi Logo-V.svg|#default=Sodipodi Logo.svg}}}}}} |3=Sodipodi |4={{{more|.}}} |5={{{width|}}} |6={{{style|}}} |7={{{cat|{{{category|}}}}}} |8= |9={{{sort|{{{key|{{{sortkey|}}}}}}}}} |10={{{sub|{{{subcat|{{{subcategory|}}}}}}}}} |11={{{err|{{{errors|{{{errnum|}}}}}}}}} |12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!-- -->|{{#switch:{{{2}}}|n=N|v=V|s=S<!-- "n" will never be -->|{{#switch:{{{1}}}|n=N|v=V|s=S|{{iffile|s|v}}}}}}}}<!-- only SVG are created --> |13={{{vo|{{{vopt|{{{opt|}}}}}}}}} |14={{{topic|}}} |17=<!-- {{{iconsize|}}} --> |base=Created with ...}}<noinclude> {{SVG created with/doc|igen=S|opt=yes|shorthand=Sodipodi|desc=Used to mark files created with {{W|Sodipodi}}.}} </noinclude> nosiucsf8tzbwsr94brh7vcxb9dbr2w Tempilet:Created with GeoGebra 10 1427 10943 2025-12-24T16:35:05Z commons>Sebastian Wallroth 0 10943 wikitext text/x-wiki {{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!-- -->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!-- -->{{#invoke:Autotranslate|autotranslate |1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|s|=|#default={{{1|}}}}}}} |2={{#if:{{{logo|}}}|{{{logo}}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|0|{{Data|item=Q795066|property=P154}}|Anti-GeoGebra.svg}}|{{Data|item=Q795066|property=P154}}}}|{{Data|item=Q795066|property=154}}}}<!-- valid / invalid --> |3=GeoGebra |4={{{more|.}}} |5={{{width|}}} |6={{{style|}}} |7={{{cat|{{{category|}}}}}} |8= |9={{{sort|{{{key|{{{sortkey|}}}}}}}}} |10={{{sub|{{{subcat|{{{subcategory|}}}}}}}}} |11={{{err|{{{errors|{{{errnum|}}}}}}}}} |12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!-- -->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!-- -->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) --> |13={{{vo|{{{vopt|{{{opt|}}}}}}}}} |14={{{topic|}}} |16={{Label|Q795066}} |base=Created with ...}}<noinclude> {{SVG created with/doc|shortkey=GeoGebra|n=yes|opt=yes}} </noinclude> 6155s7c8pqaso5m6su2vql2hdgz7dg3 10944 10943 2026-08-25T23:38:38Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Created_with_GeoGebra]] 10943 wikitext text/x-wiki {{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!-- -->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!-- -->{{#invoke:Autotranslate|autotranslate |1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|s|=|#default={{{1|}}}}}}} |2={{#if:{{{logo|}}}|{{{logo}}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|0|{{Data|item=Q795066|property=P154}}|Anti-GeoGebra.svg}}|{{Data|item=Q795066|property=P154}}}}|{{Data|item=Q795066|property=154}}}}<!-- valid / invalid --> |3=GeoGebra |4={{{more|.}}} |5={{{width|}}} |6={{{style|}}} |7={{{cat|{{{category|}}}}}} |8= |9={{{sort|{{{key|{{{sortkey|}}}}}}}}} |10={{{sub|{{{subcat|{{{subcategory|}}}}}}}}} |11={{{err|{{{errors|{{{errnum|}}}}}}}}} |12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!-- -->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!-- -->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) --> |13={{{vo|{{{vopt|{{{opt|}}}}}}}}} |14={{{topic|}}} |16={{Label|Q795066}} |base=Created with ...}}<noinclude> {{SVG created with/doc|shortkey=GeoGebra|n=yes|opt=yes}} </noinclude> 6155s7c8pqaso5m6su2vql2hdgz7dg3 Tempilet:Created with Inkscape-default 10 1428 10947 2024-08-09T23:47:34Z commons>Jarekt 0 replace {{autotranslate}} with call to Module:Autotranslate 10947 wikitext text/x-wiki {{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!-- -->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!-- template for Inkscape-default (/it} -->{{#invoke:Autotranslate|autotranslate |1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|s|n|p|/|=|#default={{{1|}}}}}}} |2={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|0|Inkscape-yes.svg|Inkscape-no.svg}}<!-- valid / invalid -->|{{#switch:v|{{{2}}}|{{{1}}}=Inkscape-yes.svg|<!-- valid -->|Inkscape-def.svg}}}}<!-- default logo for Inkscape-default --> |3=Inkscape |4={{#ifeq:{{NAMESPACE}}|File|-''default''}}<noinclude><code>-def</code></noinclude>{{#if:{{{IMPORTANT|}}}|{{{more|}}}—[[Help:Inkscape#Inkscape_SVG_vs._Plain_SVG|important]].<!-- (italic if from Igen) -->[[Category:SVG created with Inkscape:Important]]|{{{more|.}}}}} |5={{{width|}}} |6={{{style|}}} |7={{{cat|{{{category|}}}}}} |8=<!-- {{{IMPORTANT|}}} --> |9={{{sort|{{{key|{{{sortkey|}}}}}}}}} |10=<!-- {{#if:{{{IMPORTANT|}}}|:Important}} -->{{{sub|{{{subcat|{{{subcategory|}}}}}}}}} |11={{{err|{{{errors|{{{errnum|}}}}}}}}} |12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!-- -->|{{#switch:{{{2}}}|n=N|v=V|s=S<!-- -->|{{#switch:{{{1}}}|n=N|v=V|s=S<!-- -->|{{#ifeq:{{#invoke:File|extension|file={{PAGENAME}}}}|svg|s|n}}}}}}}}<!-- SVG or PNG --> |13={{{vo|{{{vopt|{{{opt|}}}}}}}}} |14={{{topic|}}} |17={{{iconsize|}}} |base=Created with ...}}<noinclude> <!-- {{SVG created with/doc|shorthand=Inkscape|n=y|I=IMPORTANT|igen=I|sandbox=y|vopttext=un|shortmore=may be used for "Inkscape",<br> ::::::::::or the abbreviation "Im" for "Inkscape{{!}}IMPORTANT=yes".}} --> [[Category:Subtemplates|Igen/def]] </noinclude>{{#ifeq:{{NAMESPACE}}|File|[[Category:Created with Inkscape-default]]}} 33w5hzjc51f9u0ghlxj13ultorvqe0e 10948 10947 2026-08-25T23:38:38Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Created_with_Inkscape-default]] 10947 wikitext text/x-wiki {{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!-- -->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!-- template for Inkscape-default (/it} -->{{#invoke:Autotranslate|autotranslate |1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|s|n|p|/|=|#default={{{1|}}}}}}} |2={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|0|Inkscape-yes.svg|Inkscape-no.svg}}<!-- valid / invalid -->|{{#switch:v|{{{2}}}|{{{1}}}=Inkscape-yes.svg|<!-- valid -->|Inkscape-def.svg}}}}<!-- default logo for Inkscape-default --> |3=Inkscape |4={{#ifeq:{{NAMESPACE}}|File|-''default''}}<noinclude><code>-def</code></noinclude>{{#if:{{{IMPORTANT|}}}|{{{more|}}}—[[Help:Inkscape#Inkscape_SVG_vs._Plain_SVG|important]].<!-- (italic if from Igen) -->[[Category:SVG created with Inkscape:Important]]|{{{more|.}}}}} |5={{{width|}}} |6={{{style|}}} |7={{{cat|{{{category|}}}}}} |8=<!-- {{{IMPORTANT|}}} --> |9={{{sort|{{{key|{{{sortkey|}}}}}}}}} |10=<!-- {{#if:{{{IMPORTANT|}}}|:Important}} -->{{{sub|{{{subcat|{{{subcategory|}}}}}}}}} |11={{{err|{{{errors|{{{errnum|}}}}}}}}} |12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!-- -->|{{#switch:{{{2}}}|n=N|v=V|s=S<!-- -->|{{#switch:{{{1}}}|n=N|v=V|s=S<!-- -->|{{#ifeq:{{#invoke:File|extension|file={{PAGENAME}}}}|svg|s|n}}}}}}}}<!-- SVG or PNG --> |13={{{vo|{{{vopt|{{{opt|}}}}}}}}} |14={{{topic|}}} |17={{{iconsize|}}} |base=Created with ...}}<noinclude> <!-- {{SVG created with/doc|shorthand=Inkscape|n=y|I=IMPORTANT|igen=I|sandbox=y|vopttext=un|shortmore=may be used for "Inkscape",<br> ::::::::::or the abbreviation "Im" for "Inkscape{{!}}IMPORTANT=yes".}} --> [[Category:Subtemplates|Igen/def]] </noinclude>{{#ifeq:{{NAMESPACE}}|File|[[Category:Created with Inkscape-default]]}} 33w5hzjc51f9u0ghlxj13ultorvqe0e Tempilet:Created with LibreOffice 10 1429 10949 2025-12-24T20:49:19Z commons>Sebastian Wallroth 0 Q10135 10949 wikitext text/x-wiki {{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!-- -->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!-- -->{{#invoke:Autotranslate|autotranslate |1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|p||s|/|=|#default={{{1|}}}}}}} |2={{#if:{{{logo|}}}|{{{logo}}}|{{Data|item=Q10135|property=P154}}}} |3=LibreOffice |4={{{more|.}}} |5={{{width|}}} |6={{{style|}}} |7={{{cat|{{{category|}}}}}} |8= |9={{{sort|{{{key|{{{sortkey|}}}}}}}}} |10={{{subc|}}}{{{sub|{{{subcat|{{{subcategory|}}}}}}}}} |11={{{err|{{{errors|{{{errnum|}}}}}}}}} |12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!-- -->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!-- -->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) --> |14={{{topic|}}} |16={{Label|Q10135}} |17={{{iconsize|}}} |base=Created with ...}}<noinclude> {{#ifexist:{{SUBJECTPAGENAME}}/docu|{{documentation}}| {{SVG created with/doc|n=y|opt=yes|code=3|shorthand=LibreOffice|igen=L|desc={{en|1=Used to mark files created with LibreOffice.<br>Wherever possible, please include the ''source code'', using {{T0|Igen}} with the parameter '''<code>code=</code>'''<br>{{Nobold|For more information, see the description of the template:{{T0|Created with code}}.}}}}|unspec=yes}}}}</noinclude> nevqy3elyvrajuenlj0sxdmka35qmsn 10950 10949 2026-08-25T23:38:38Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Created_with_LibreOffice]] 10949 wikitext text/x-wiki {{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!-- -->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!-- -->{{#invoke:Autotranslate|autotranslate |1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|p||s|/|=|#default={{{1|}}}}}}} |2={{#if:{{{logo|}}}|{{{logo}}}|{{Data|item=Q10135|property=P154}}}} |3=LibreOffice |4={{{more|.}}} |5={{{width|}}} |6={{{style|}}} |7={{{cat|{{{category|}}}}}} |8= |9={{{sort|{{{key|{{{sortkey|}}}}}}}}} |10={{{subc|}}}{{{sub|{{{subcat|{{{subcategory|}}}}}}}}} |11={{{err|{{{errors|{{{errnum|}}}}}}}}} |12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!-- -->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!-- -->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) --> |14={{{topic|}}} |16={{Label|Q10135}} |17={{{iconsize|}}} |base=Created with ...}}<noinclude> {{#ifexist:{{SUBJECTPAGENAME}}/docu|{{documentation}}| {{SVG created with/doc|n=y|opt=yes|code=3|shorthand=LibreOffice|igen=L|desc={{en|1=Used to mark files created with LibreOffice.<br>Wherever possible, please include the ''source code'', using {{T0|Igen}} with the parameter '''<code>code=</code>'''<br>{{Nobold|For more information, see the description of the template:{{T0|Created with code}}.}}}}|unspec=yes}}}}</noinclude> nevqy3elyvrajuenlj0sxdmka35qmsn Tempilet:Use sandbox 10 1430 10951 2024-08-09T23:56:58Z commons>Jarekt 0 replace {{autotranslate}} with call to Module:Autotranslate 10951 wikitext text/x-wiki {{#invoke:Autotranslate|autotranslate |base = Use sandbox/i18n |1={{{1|}}} |2={{{2|}}} |{{#ifeq:{{{testcase|}}}|{{{testcase|1}}}|testcase}} = {{{testcase|}}} |sandbox={{ifsandbox|b=base||/{{{sandbox|}}}}}<!-- ="name" --> |edit={{{edit|}}} }}<noinclude> {{documentation}} </noinclude> 3qwt1sejedxgst449us2ejj66u7w3jg 10952 10951 2026-08-25T23:38:38Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Use_sandbox]] 10951 wikitext text/x-wiki {{#invoke:Autotranslate|autotranslate |base = Use sandbox/i18n |1={{{1|}}} |2={{{2|}}} |{{#ifeq:{{{testcase|}}}|{{{testcase|1}}}|testcase}} = {{{testcase|}}} |sandbox={{ifsandbox|b=base||/{{{sandbox|}}}}}<!-- ="name" --> |edit={{{edit|}}} }}<noinclude> {{documentation}} </noinclude> 3qwt1sejedxgst449us2ejj66u7w3jg Tempilet:Use sandbox/i18n/en 10 1431 10953 2025-05-09T02:48:08Z commons>FuzzyBot 0 Updating to match new version of source page 10953 wikitext text/x-wiki <languages /> <onlyinclude><div lang="en" dir="auto"> {{Mbox |type=query |image={{NoImageNotes|[[File:OOjs UI icon alert-yellow.svg|class=noviewer|alt=⚠|40px]]}} |width = 80% |style = padding:3px; border-color: var(--border-color-content-removed, #fc3); text-align:start |text=Please test any changes in the template's [[{{#ifeq:{{SUBPAGENAME}}|doc| {{SUBJECTSPACE}}:{{BASEPAGENAME}} | {{SUBJECTPAGENAME}} }}/sandbox|{{{1|}}}/sandbox]] {{#if:{{{edit|<noinclude>1</noinclude>}}}|([{{fullurl:{{#ifeq:{{SUBPAGENAME}}|doc| {{SUBJECTSPACE}}:{{BASEPAGENAME}} | {{SUBJECTPAGENAME}} }}/sandbox|action=edit}} edit])}} {{{testcase|or [[{{#ifeq:{{SUBPAGENAME}}|doc| {{SUBJECTSPACE}}:{{BASEPAGENAME}} | {{SUBJECTPAGENAME}} }}/testcases|/testcases]] subpages,}}} and consider discussing changes at {{#if:{{{2|}}}|[[{{{2|}}}]]|the [[{{#ifeq:{{SUBPAGENAME}}|doc| {{TALKSPACE}}:{{BASEPAGENAME}} | {{TALKPAGENAME}} }}|talk page]]}} before implementing them. }} </div></onlyinclude> {{translated tag|header}} dgwinl26cjgvqzoxyin7w9uxshvd2qc 10954 10953 2026-08-25T23:38:38Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Use_sandbox/i18n/en]] 10953 wikitext text/x-wiki <languages /> <onlyinclude><div lang="en" dir="auto"> {{Mbox |type=query |image={{NoImageNotes|[[File:OOjs UI icon alert-yellow.svg|class=noviewer|alt=⚠|40px]]}} |width = 80% |style = padding:3px; border-color: var(--border-color-content-removed, #fc3); text-align:start |text=Please test any changes in the template's [[{{#ifeq:{{SUBPAGENAME}}|doc| {{SUBJECTSPACE}}:{{BASEPAGENAME}} | {{SUBJECTPAGENAME}} }}/sandbox|{{{1|}}}/sandbox]] {{#if:{{{edit|<noinclude>1</noinclude>}}}|([{{fullurl:{{#ifeq:{{SUBPAGENAME}}|doc| {{SUBJECTSPACE}}:{{BASEPAGENAME}} | {{SUBJECTPAGENAME}} }}/sandbox|action=edit}} edit])}} {{{testcase|or [[{{#ifeq:{{SUBPAGENAME}}|doc| {{SUBJECTSPACE}}:{{BASEPAGENAME}} | {{SUBJECTPAGENAME}} }}/testcases|/testcases]] subpages,}}} and consider discussing changes at {{#if:{{{2|}}}|[[{{{2|}}}]]|the [[{{#ifeq:{{SUBPAGENAME}}|doc| {{TALKSPACE}}:{{BASEPAGENAME}} | {{TALKPAGENAME}} }}|talk page]]}} before implementing them. }} </div></onlyinclude> {{translated tag|header}} dgwinl26cjgvqzoxyin7w9uxshvd2qc Tempilet:Blue 10 1432 10955 2012-09-16T10:03:07Z commons>Sarang 0 catdiff 10955 wikitext text/x-wiki <span style="color:#0645AD;">{{{1}}}</span><noinclude> {{documentation}} </noinclude> f6rm38qjkga1ht1zapcja0ebkvnyxap 10956 10955 2026-08-25T23:38:39Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Blue]] 10955 wikitext text/x-wiki <span style="color:#0645AD;">{{{1}}}</span><noinclude> {{documentation}} </noinclude> f6rm38qjkga1ht1zapcja0ebkvnyxap Tempilet:Created with BKchem 10 1433 10957 2024-08-09T23:46:37Z commons>Jarekt 0 replace {{autotranslate}} with call to Module:Autotranslate 10957 wikitext text/x-wiki {{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!-- -->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!-- -->{{#invoke:Autotranslate|autotranslate |1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|s|/|=|#default={{{1|}}}}}}} |2={{#if:{{{logo|{{{4|}}}}}}|{{{logo|{{{4}}}}}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|0|BKChem48.svg|BKChemInv.svg}}|BKChem48.svg}}}} |3=BKchem |4={{{more|.}}} |5={{{width|}}} |6={{{style|}}} |7={{{cat|{{{category|}}}}}} |9={{{sort|{{{key|{{{sortkey|{{#if:{{{errnum|}}}|000}}}}}}}}}}} |10={{#ifeq:&#58;Structural formulas|{{{sub|}}}||{{{sub|{{{subcat|{{{subcategory|}}}}}}}}}}} <!-- sf --> |11={{{err|{{{errors|{{{errnum|}}}}}}}}} |12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!-- -->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!-- -->|{{iffile|s|v}}}}}}}}<!-- s(SVG) or n(PNG) --> |13={{{vo|{{{vopt|{{{opt|}}}}}}}}} |14=sf |16=[[d:Q796035|BKchem]]-Inkscape |base=Created with ...}}<noinclude> {{SVG created with/doc|shorthand=BKchem|igen=B|opt=yes|sub=n|top=sf|topic=no|addinf=|w1=28|w2=72 |cattext=<br>'''No subcategorizing occurs''' because ''all'' drawings are of chemical structures.<br><small></small>}} </noinclude> 8t4wl5ckss2ejkfbgdciyro32oie0un 10958 10957 2026-08-25T23:38:39Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Created_with_BKchem]] 10957 wikitext text/x-wiki {{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!-- -->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!-- -->{{#invoke:Autotranslate|autotranslate |1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|s|/|=|#default={{{1|}}}}}}} |2={{#if:{{{logo|{{{4|}}}}}}|{{{logo|{{{4}}}}}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|0|BKChem48.svg|BKChemInv.svg}}|BKChem48.svg}}}} |3=BKchem |4={{{more|.}}} |5={{{width|}}} |6={{{style|}}} |7={{{cat|{{{category|}}}}}} |9={{{sort|{{{key|{{{sortkey|{{#if:{{{errnum|}}}|000}}}}}}}}}}} |10={{#ifeq:&#58;Structural formulas|{{{sub|}}}||{{{sub|{{{subcat|{{{subcategory|}}}}}}}}}}} <!-- sf --> |11={{{err|{{{errors|{{{errnum|}}}}}}}}} |12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!-- -->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!-- -->|{{iffile|s|v}}}}}}}}<!-- s(SVG) or n(PNG) --> |13={{{vo|{{{vopt|{{{opt|}}}}}}}}} |14=sf |16=[[d:Q796035|BKchem]]-Inkscape |base=Created with ...}}<noinclude> {{SVG created with/doc|shorthand=BKchem|igen=B|opt=yes|sub=n|top=sf|topic=no|addinf=|w1=28|w2=72 |cattext=<br>'''No subcategorizing occurs''' because ''all'' drawings are of chemical structures.<br><small></small>}} </noinclude> 8t4wl5ckss2ejkfbgdciyro32oie0un Tempilet:Created with QGIS 10 1434 10959 2025-12-26T09:56:01Z commons>Sebastian Wallroth 0 Q1329181 10959 wikitext text/x-wiki {{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!-- -->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!-- -->{{#if:{{{2|}}}||{{#if:{{{1|}}}||{{#ifeq:{{#invoke:Igenmod|extcode}}|s|[[Category:SVG created with QGIS]]}}}}}}<!-- -->{{#invoke:Autotranslate|autotranslate |1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|s|=|#default={{{1|}}}}}}} |2={{#if:{{{logo|}}}|{{{logo}}}|{{Data|item=Q1329181|property=P154}}}} |3=QGIS |4={{{more|}}} |5={{{width|}}} |6={{{style|}}} |7={{{cat|{{{category|}}}}}} |8={{{IMPORTANT|}}} |9={{{sort|{{{key|{{{sortkey|}}}}}}}}} |10={{{sub|{{{subcat|{{{subcategory|}}}}}}}}} |11={{{err|{{{errors|{{{errnum|}}}}}}}}} |12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!-- -->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!-- -->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) --> |13={{{vo|{{{vopt|{{{opt|}}}}}}}}} |14={{#if:{{{topic|}}}|{{{topic}}}}} |16={{Label|Q1329181}} |17=<!-- {{{iconsize|}}} --> |base=Created with ...}}<noinclude> {{SVG created with/doc |I=IMPORTANT |igen=Q |n=yes |sortkey=QG |vdef=n |opt=yes |vopttext=yes |I18dot= |unspec=yes }}</noinclude> kton6fioez1a42iwt6u6cd8i48g1e30 10960 10959 2026-08-25T23:38:39Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Created_with_QGIS]] 10959 wikitext text/x-wiki {{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!-- -->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!-- -->{{#if:{{{2|}}}||{{#if:{{{1|}}}||{{#ifeq:{{#invoke:Igenmod|extcode}}|s|[[Category:SVG created with QGIS]]}}}}}}<!-- -->{{#invoke:Autotranslate|autotranslate |1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|s|=|#default={{{1|}}}}}}} |2={{#if:{{{logo|}}}|{{{logo}}}|{{Data|item=Q1329181|property=P154}}}} |3=QGIS |4={{{more|}}} |5={{{width|}}} |6={{{style|}}} |7={{{cat|{{{category|}}}}}} |8={{{IMPORTANT|}}} |9={{{sort|{{{key|{{{sortkey|}}}}}}}}} |10={{{sub|{{{subcat|{{{subcategory|}}}}}}}}} |11={{{err|{{{errors|{{{errnum|}}}}}}}}} |12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!-- -->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!-- -->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) --> |13={{{vo|{{{vopt|{{{opt|}}}}}}}}} |14={{#if:{{{topic|}}}|{{{topic}}}}} |16={{Label|Q1329181}} |17=<!-- {{{iconsize|}}} --> |base=Created with ...}}<noinclude> {{SVG created with/doc |I=IMPORTANT |igen=Q |n=yes |sortkey=QG |vdef=n |opt=yes |vopttext=yes |I18dot= |unspec=yes }}</noinclude> kton6fioez1a42iwt6u6cd8i48g1e30 Tempilet:Xconv 10 1435 10961 2024-04-22T20:39:46Z commons>Verdy p 0 10961 wikitext text/x-wiki <includeonly>{{#if: {{{box|}}} | {{Colorbox |1 = {{#invoke:Xconv|xconv|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5|}}}}} |2 = {{{1|}}} {{{2|}}} {{{3|}}} {{{4|}}} {{{5|}}} = {{#invoke:Xconv|xconv|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5|}}}}} }} | {{#invoke:Xconv|xconv|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5|}}}}} }}</includeonly><noinclude>{{Documentation}}</noinclude> lzp9dbjcz1j8howa06k8xf46o9bxnoq 10962 10961 2026-08-25T23:38:39Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Xconv]] 10961 wikitext text/x-wiki <includeonly>{{#if: {{{box|}}} | {{Colorbox |1 = {{#invoke:Xconv|xconv|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5|}}}}} |2 = {{{1|}}} {{{2|}}} {{{3|}}} {{{4|}}} {{{5|}}} = {{#invoke:Xconv|xconv|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5|}}}}} }} | {{#invoke:Xconv|xconv|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5|}}}}} }}</includeonly><noinclude>{{Documentation}}</noinclude> lzp9dbjcz1j8howa06k8xf46o9bxnoq Tempilet:Mono 10 1436 10963 2024-08-28T17:33:46Z commons>CptViraj 0 Protected "[[Template:Mono]]": [[Special:MyLanguage/Commons:Protection policy|Widely used template]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite)) 10963 wikitext text/x-wiki <templatestyles src="Template:Mono/styles.css"/><span class="monospaced">{{{2|{{{1}}}}}}</span><noinclude> {{Documentation}} <!-- Categories go on the /doc subpage and interwikis go on Wikidata. --> </noinclude> 30zpd0g5gc7hnagu8xmaj3lr9bb9o90 10964 10963 2026-08-25T23:38:39Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Mono]] 10963 wikitext text/x-wiki <templatestyles src="Template:Mono/styles.css"/><span class="monospaced">{{{2|{{{1}}}}}}</span><noinclude> {{Documentation}} <!-- Categories go on the /doc subpage and interwikis go on Wikidata. --> </noinclude> 30zpd0g5gc7hnagu8xmaj3lr9bb9o90 Tempilet:Created with Pstoedit 10 1437 10965 2024-08-09T23:48:18Z commons>Jarekt 0 replace {{autotranslate}} with call to Module:Autotranslate 10965 wikitext text/x-wiki {{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!-- -->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!-- -->{{#invoke:Autotranslate|autotranslate |1={{#if:{{{2|}}}|{{{1|}}}|{{#ifeq:{{{1}}}|v||{{{1|}}}}}}} |2={{#if:{{{logo|}}}|{{{logo}}}|Pstoeditlogo-large.png}} |3=pstoedit |4={{{more|.}}} |5={{{width|}}} |6={{{style|}}} |7={{{cat|{{{category|}}}}}} |8= |9={{{sort|{{{key|{{{sortkey|}}}}}}}}} |10={{{sub|{{{subcat|{{{subcategory|}}}}}}}}} |11={{{err|{{{errors|{{{errnum|}}}}}}}}} |12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!-- -->|{{#switch:{{{2}}}|n=N|v=V|s=S<!-- "n" will never be -->|{{#switch:{{{1}}}|n=N|v=V|s=S|{{iffile|s|v}}}}}}}}<!-- only SVG are created --> |13={{{vo|{{{vopt|{{{opt|}}}}}}}}} |14={{{topic|}}} |base=Created with ...}}<noinclude> {{SVG created with/doc|shortkey=Pstoedit|igen=P|opt=yes|catnam=Created with pstoedit|desc=|inval=no}} </noinclude> 70o9rq13jmgiqpgykv5myf536y8b523 10966 10965 2026-08-25T23:38:39Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Created_with_Pstoedit]] 10965 wikitext text/x-wiki {{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!-- -->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!-- -->{{#invoke:Autotranslate|autotranslate |1={{#if:{{{2|}}}|{{{1|}}}|{{#ifeq:{{{1}}}|v||{{{1|}}}}}}} |2={{#if:{{{logo|}}}|{{{logo}}}|Pstoeditlogo-large.png}} |3=pstoedit |4={{{more|.}}} |5={{{width|}}} |6={{{style|}}} |7={{{cat|{{{category|}}}}}} |8= |9={{{sort|{{{key|{{{sortkey|}}}}}}}}} |10={{{sub|{{{subcat|{{{subcategory|}}}}}}}}} |11={{{err|{{{errors|{{{errnum|}}}}}}}}} |12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!-- -->|{{#switch:{{{2}}}|n=N|v=V|s=S<!-- "n" will never be -->|{{#switch:{{{1}}}|n=N|v=V|s=S|{{iffile|s|v}}}}}}}}<!-- only SVG are created --> |13={{{vo|{{{vopt|{{{opt|}}}}}}}}} |14={{{topic|}}} |base=Created with ...}}<noinclude> {{SVG created with/doc|shortkey=Pstoedit|igen=P|opt=yes|catnam=Created with pstoedit|desc=|inval=no}} </noinclude> 70o9rq13jmgiqpgykv5myf536y8b523 Tempilet:Non-native-en 10 1438 10967 2025-06-28T00:04:12Z commons>Tholme 0 [[Template:mbox]] - fixes nightmode 10967 wikitext text/x-wiki {{Mbox|image=<span style="font-size:2em;"><span style="color:var(--color-progressive, #36c)">en</span>-1</span>|text=The description below was composed by a non-native English speaker.<br>You are cordially invited to improve the literal quality of any textual expression.}} eptjxo7ztc5a7janq606qju93luvt1a 10968 10967 2026-08-25T23:38:39Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Non-native-en]] 10967 wikitext text/x-wiki {{Mbox|image=<span style="font-size:2em;"><span style="color:var(--color-progressive, #36c)">en</span>-1</span>|text=The description below was composed by a non-native English speaker.<br>You are cordially invited to improve the literal quality of any textual expression.}} eptjxo7ztc5a7janq606qju93luvt1a Tempilet:Created with JFreeChart 10 1439 10969 2025-12-24T20:38:22Z commons>Sebastian Wallroth 0 Q1676599 10969 wikitext text/x-wiki {{#switch:n|{{{2|}}}|{{{1|}}}=|{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|{{{vw|{{{vwidth|{{{width|}}}}}}}}}<!-- -->|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}}}<!-- -->{{#invoke:Autotranslate|autotranslate |1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|s|=|#default={{{1|}}}}}}} |2={{#if:{{{logo|{{{4|}}}}}}|{{{logo|{{{4}}}}}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|0|JFreeChart 3D pie chart sample.svg|JFreeChart 3D pie chart sample.svg}}<!-- -->|{{#switch:v|{{{2}}}|{{{1}}}=JFreeChart 3D pie chart sample.svg||JFreeChart 3D pie chart sample.svg}}}}}} |3=JFreeChart |4={{{more|}}} |5={{{width|}}} |6={{{style|}}} |7={{{cat|{{{category|}}}}}} |8= |9={{{sort|{{{key|{{{sortkey|}}}}}}}}} |10={{{subc|}}}{{{sub|}}} |11={{{err|{{{errors|{{{errnum|}}}}}}}}} |12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!-- -->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!-- -->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) --> |13={{{vo|{{{vopt|{{{opt|}}}}}}}}} |14={{#if:{{{topic|}}}|{{{topic}}}|plot}}<!-- "ch" for chart ? --> |16={{#switch:n|{{{2|<noinclude>n</noinclude>}}}|{{{1}}}={{Label|Q1676599}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|{{Label|Q1676599}}|{{#switch:v|{{{2}}}|{{{1}}}={{Label|Q1676599}}|<!-- -->{{Label|Q1676599}}<!-- -->}}}}}} |17={{{iconsize|20px}}} |base=Created with ...}}<!-- with code -->{{#if:{{{code|{{{c1|}}}}}}{{{code2|{{{c2|}}}}}}{{{code3|{{{c3|}}}}}}|{{Created with code<!-- -->|c1={{{code|{{{source|{{{script|{{{c1|}}}}}}}}}}}}|h1={{#if:{{{title|{{{h1|}}}}}}|{{{title|{{{h1|}}}}}} |JFreeChart}}<!-- -->|l1={{#if:{{{syntax|{{{l1|}}}}}}|{{{syntax|{{{l1}}}}}}|jfreechart}}<!-- -->|f1={{{format|{{{f1|}}}}}}|s1={{{collapse|{{{s1|}}}}}}<!-- -->|d1={{{d1|}}}|e1={{{expl|{{{e1|}}}}}}|n1={{{n1|}}}<!-- -->|c2={{{code2|{{{c2|}}}}}}|h2={{{title2|{{{h2|}}}}}}<!-- -->|l2={{#if:{{{syntax2|{{{l2|}}}}}}|{{{syntax2|{{{l2|}}}}}}|jfreechart}}<!-- -->|f2={{{format2|{{{f2|}}}}}}|s2={{{collapse2|{{{s2|}}}}}}<!-- -->|d2={{{d2|}}}|e2={{{expl2|{{{e2|}}}}}}|n2={{{n2|}}}<!-- -->|c3={{{code3|{{{c3|}}}}}}|h3={{#if:{{{title3|{{{h3|}}}}}}|{{{title3|{{{h3|}}}}}}|<nowiki/> JFreeChart data}}<!-- -->|l3={{#if:{{{syntax3|{{{l3|}}}}}}|{{{syntax3|{{{l3|}}}}}}|text}}<!-- -->|f3={{{format3|{{{f3|}}}}}}|s3={{{collapse3|{{{s3|}}}}}}<!-- -->|d3={{{d3|}}}|e3={{{expl3|{{{e3|}}}}}}|n3={{{n3|}}} }}}}<noinclude> <br> <div style="border:2px solid#0F0;background-color:#CFB;margin:0 0 1.5em;text-aligno:center"> [[File:Dialog-go-hand-ltr.svg|32px|left]][[File:JFreeChart 3D pie chart sample.svg|32px|right]] The template {{Tl|Created with JFreeChart}} (shorthand:{{Tl|JFreeChart}}) marks as well {{W|Vector graphics}} as {{W|Computer graphics}}, e.g. <code>.png</code>.<br style="clear:both"/> * ''Computer graphics'' (e.g. files .PNG) should be marked with {{Tld|JFreeChart|'''n'''}} * ''Vector graphics'' should be checked for their W3C-validity and then marked either by {{Tld|JFreeChart|'''v'''}} or {{Tld|JFreeChart|2='''err='''##}} </div> {{SVG created with/doc|shorthand=JFC|sortkey=J|top=plot|igen=J|n=yes|opt=yes|unspec=yes|sub=|desc={{en|Used to mark files created with JFreeChart.}}|cattext=<nowiki/> See otherwise: * {{Catcont|JFreeChart diagrams|3=*}} <br> }} </noinclude> 5uvxg0cpidbb99k01tgx8g84ek6jfht 10970 10969 2026-08-25T23:38:39Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Created_with_JFreeChart]] 10969 wikitext text/x-wiki {{#switch:n|{{{2|}}}|{{{1|}}}=|{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|{{{vw|{{{vwidth|{{{width|}}}}}}}}}<!-- -->|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}}}<!-- -->{{#invoke:Autotranslate|autotranslate |1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|s|=|#default={{{1|}}}}}}} |2={{#if:{{{logo|{{{4|}}}}}}|{{{logo|{{{4}}}}}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|0|JFreeChart 3D pie chart sample.svg|JFreeChart 3D pie chart sample.svg}}<!-- -->|{{#switch:v|{{{2}}}|{{{1}}}=JFreeChart 3D pie chart sample.svg||JFreeChart 3D pie chart sample.svg}}}}}} |3=JFreeChart |4={{{more|}}} |5={{{width|}}} |6={{{style|}}} |7={{{cat|{{{category|}}}}}} |8= |9={{{sort|{{{key|{{{sortkey|}}}}}}}}} |10={{{subc|}}}{{{sub|}}} |11={{{err|{{{errors|{{{errnum|}}}}}}}}} |12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!-- -->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!-- -->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) --> |13={{{vo|{{{vopt|{{{opt|}}}}}}}}} |14={{#if:{{{topic|}}}|{{{topic}}}|plot}}<!-- "ch" for chart ? --> |16={{#switch:n|{{{2|<noinclude>n</noinclude>}}}|{{{1}}}={{Label|Q1676599}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!-- -->|{{Label|Q1676599}}|{{#switch:v|{{{2}}}|{{{1}}}={{Label|Q1676599}}|<!-- -->{{Label|Q1676599}}<!-- -->}}}}}} |17={{{iconsize|20px}}} |base=Created with ...}}<!-- with code -->{{#if:{{{code|{{{c1|}}}}}}{{{code2|{{{c2|}}}}}}{{{code3|{{{c3|}}}}}}|{{Created with code<!-- -->|c1={{{code|{{{source|{{{script|{{{c1|}}}}}}}}}}}}|h1={{#if:{{{title|{{{h1|}}}}}}|{{{title|{{{h1|}}}}}} |JFreeChart}}<!-- -->|l1={{#if:{{{syntax|{{{l1|}}}}}}|{{{syntax|{{{l1}}}}}}|jfreechart}}<!-- -->|f1={{{format|{{{f1|}}}}}}|s1={{{collapse|{{{s1|}}}}}}<!-- -->|d1={{{d1|}}}|e1={{{expl|{{{e1|}}}}}}|n1={{{n1|}}}<!-- -->|c2={{{code2|{{{c2|}}}}}}|h2={{{title2|{{{h2|}}}}}}<!-- -->|l2={{#if:{{{syntax2|{{{l2|}}}}}}|{{{syntax2|{{{l2|}}}}}}|jfreechart}}<!-- -->|f2={{{format2|{{{f2|}}}}}}|s2={{{collapse2|{{{s2|}}}}}}<!-- -->|d2={{{d2|}}}|e2={{{expl2|{{{e2|}}}}}}|n2={{{n2|}}}<!-- -->|c3={{{code3|{{{c3|}}}}}}|h3={{#if:{{{title3|{{{h3|}}}}}}|{{{title3|{{{h3|}}}}}}|<nowiki/> JFreeChart data}}<!-- -->|l3={{#if:{{{syntax3|{{{l3|}}}}}}|{{{syntax3|{{{l3|}}}}}}|text}}<!-- -->|f3={{{format3|{{{f3|}}}}}}|s3={{{collapse3|{{{s3|}}}}}}<!-- -->|d3={{{d3|}}}|e3={{{expl3|{{{e3|}}}}}}|n3={{{n3|}}} }}}}<noinclude> <br> <div style="border:2px solid#0F0;background-color:#CFB;margin:0 0 1.5em;text-aligno:center"> [[File:Dialog-go-hand-ltr.svg|32px|left]][[File:JFreeChart 3D pie chart sample.svg|32px|right]] The template {{Tl|Created with JFreeChart}} (shorthand:{{Tl|JFreeChart}}) marks as well {{W|Vector graphics}} as {{W|Computer graphics}}, e.g. <code>.png</code>.<br style="clear:both"/> * ''Computer graphics'' (e.g. files .PNG) should be marked with {{Tld|JFreeChart|'''n'''}} * ''Vector graphics'' should be checked for their W3C-validity and then marked either by {{Tld|JFreeChart|'''v'''}} or {{Tld|JFreeChart|2='''err='''##}} </div> {{SVG created with/doc|shorthand=JFC|sortkey=J|top=plot|igen=J|n=yes|opt=yes|unspec=yes|sub=|desc={{en|Used to mark files created with JFreeChart.}}|cattext=<nowiki/> See otherwise: * {{Catcont|JFreeChart diagrams|3=*}} <br> }} </noinclude> 5uvxg0cpidbb99k01tgx8g84ek6jfht Tempilet:Image generation/doc 10 1440 10971 2026-07-29T13:04:02Z commons>ForeverFlying 0 replacing script with {{U|User:Aaron Liu/SvgCheck-Minus.js}} because Chealer is globally banned 10971 wikitext text/x-wiki <!-- {{redirects|Igen}} -->{{Multilingual description |en = This template generates a description about an SVG file's creation and properties, and adds appropriate categories. |de = Diese Vorlage dient zur Generierung der Beschreibung, wie eine SVG-Datei erzeugt worden ist und welche Eigenschaften ihr zukommen;<br> {{0|WWW}}es werden die entsprechenden Kategorisierungen vorgenommen — diese können zahlreich sein. |es = Esta plantilla genera una descripción de la creación y propiedades de un archivo SVG, añadiendo las categorías apropiadas. |fr = Ce modèle génère une description sur la création d'une image et ses propriétés, et ajoute aux catégories (potentiellement nombreuses) appropriées. |ja = このテンプレートは、SVGファイルの作成およびプロパティに関する解説を生成し、適切なカテゴリを追加します。 |it = Questo template genera una descrizione relativa alla creazione di un file SVG e alle sue proprietà;<br />{{0|WWW}}vengono associate una o più categorie. |nl = Dit sjabloon genereert een beschrijving over de aanmaak en eigenschappen van een SVG-bestand, en voegt de juiste categorieën toe. }} ---- {{Heavily used template|edit=✔|3=✔}} <!-- edit sandbox --> {{Use sandbox|testcase=&#32;}}<!-- ================================================================================================== BEGIN OF TEMPLATE BOX ==================================================================================================--> {{TemplateBox <!------------------------------------------------------------------------------------------------ TEMPLATE BOX - BEGIN OF parameter section --------------------------------------------------------------------------------------------------> |1=1 |1d= {{Mbox |text = The "tool" this refers to can be either the tool which generated the current version of this file, or a different tool which generated a previous version of the same image.<!-- Chealer 2024-10-21 --> |type = content }} Name of the tool (case sensitive) to get the template name "Created with <nowiki>{{{1}}}</nowiki>" :: or Abbreviation of the tool name, case-insensitive: * <code>A</code> for {{tl|Created with Adobe Illustrator|Adobe Illustrator}} * <code>AH</code> for {{tl|Created with Adobe-hand|Adobe-hand}} * <code>B</code> for {{tl|Created with BKchem|BKchem}} * <code>C</code> for {{tl|Created with ChemDraw|ChemDraw}} * <code>D</code> for {{tl|Created with CorelDRAW|Corel'''D'''RAW}} * <code>E</code> for {{tl|Created with ElCompLib|ElCompLib}} * <code>F</code> for {{tl|Created with Fig2SVG|Fig2SVG}} * <code>G</code> for {{tl|Created with Gnuplot|Gnuplot}} * <code>H</code> for {{tl|Created with Inkscape-hand|Inkscape-hand}} * <code>I</code> for {{tl|Created with Inkscape|Inkscape}} &nbsp; {{color|#777|(default tool)}} * <code>J</code> for {{tl|Created with JFreeChart|JFreeChart}} * <code>L</code> for {{tl|Created with LibreOffice|LibreOffice}} * <code>M</code> for {{tl|Created with MetaPost|MetaPost}} * <code>O</code> for {{tl|Created with Other tool|Other tool}} * <code>P</code> for {{tl|Created with Pstoedit|Pstoedit}} * <code>Q</code> for {{tl|Created with QGIS|QGIS}} * <code>R</code> for {{tl|Created with R|R}} * <code>S</code> for {{tl|Created with Sodipodi|Sodipodi}} * <code>T</code> for {{tl|Created with Text Editor|Text Editor}} ''via the adapter'' {{tl|HandSVG}} * <code>U</code> for {{tl|Created with Unknown SVG facility|Unknown tool}} * <code>V</code> for {{tl|Created with Vim|Vim}} * <code>VM</code> for {{tl|Created with Vector Magic|Vector Magic}} * <code>W</code> for {{tl|Created with Winplot|Winplot}} * <code>X</code> for {{tl|Extracted with Inkscape}} '''Note''': "<code>A$</code>" abbreviates for "{{T0|Adobe and Commonist}}" : {{0|ww}}"<code>Ac</code>" abbreviates for "{{T0|Created with Vectornator|Adobe and Vectornator}}" : {{0|ww}}"<code>IA</code>" abbreviates for the mixture {{C|SVG created with Inkscape and Adobe Illustrator|Inkscape & Adobe}} : {{0|ww}}"<code>Ih</code>" abbreviates <code><nowiki>{{Inkscape-hand}}</nowiki></code> : {{0|ww}}"<code>IH</code>" abbreviates <code><nowiki>{{Inkscape-hand}}</nowiki> without</code> {{t|HandSVG}} : {{0|ww}}"<code>II</code>" abbreviates for "{{T0|Inkscape and Heraldicon|link=n}}" : {{0|ww}}"<code>Im</code>" abbreviates <code><nowiki>{{Inkscape|…|IMPORTANT=yes}}</nowiki></code> : {{0|ww}}"<code>Ic</code>" abbreviates <code><nowiki>{{Inkscape}}</nowiki> and {{Plainlinks|https://github.com/RazrFalcon/svgcleaner|SVG cleaner}} postprocessing</code> : {{0|ww}}"<code>Io</code>" abbreviates <code><nowiki>{{Inkscape}}</nowiki> and {{Plainlinks|https://jakearchibald.github.io/svgomg/|SVGO}} postprocessing</code> : {{0|ww}}"<code>Is</code>" abbreviates <code><nowiki>{{Inkscape}}</nowiki> and {{Plainlinks|https://svgoptimizer.com/|svgoptimizer}} postprocessing</code> : {{0|ww}}"<code>Iz</code>" abbreviates <code><nowiki>{{Inkscape|…|optimized}}</nowiki></code> (scour) : {{0|ww}}"<code>I$</code>" abbreviates for "{{T0|Inkscape and Commonist}}" : {{0|ww}}"<code>ItB</code>" abbreviates <code><nowiki>{{</nowiki>'''I'''nkscape '''t'''o '''B'''itmap<nowiki>}}</nowiki></code> : {{0|ww}}"<code>S-</code>" abbreviates for "{{T0|SimplSVG|Simplified SVG}}", drawn with Text Editor |1def=<code>Inkscape</code> <!-- A$ --> |1stat=optional- |2=2 |2d=''either'' character "v" ('''v'''alid) (if absent, <code>v</code> is assumed with SVG files) : ''or'' &nbsp; the numeric error count from W3C validation ("0" = "v", "-1" = uncheckable) : ''or'' &nbsp; character "s" for SVG files, to suppress the validity box (but with error count <code>e=</code>){{Clarify|date=November 2024}} ''See'' the detailed information for [[#Parameter 2|parameter #2]] and [[#Suppress the validity box|suppressing validity information]] |2def=<code>v</code> |2stat=optional- |3=3<ref name="a">Every one of the signs ($, +, -) or parameters (%, ~, !, ?, §, &, <, ^, >, ×, \, →, ⇒, °, <code>Ɨ</code>) can be passed in any sequence, each as an argument for one of the unnamed parameters #1 through #9.{{Clarify|date=October 2024}}</ref> |3d=necessary because the template cannot determine from where it is transcluded{{Clarify|date=November 2024|Yet, it's marked as optional. Chealer 2024-11-01}}: * a "-" (minus sign) to terminate the left-floating with {{tl|clr}}<br />''<small>Can be necessary if the template is used '''outside''' the {{tl|Information}} box</small>'' * a "+" (plus sign) when used in <code><nowiki>|Other fields</nowiki></code> or <code><nowiki>|Other fields 1</nowiki></code>. In this case parameter <code>fn=</code> may specify a <code>field name</code> for {{tl|Information field}}. {{Mbox |text = When a <code>field name</code> is specified, value <code>+</code> is implied, so that this parameter can be omitted. Otherwise, the <code>field name</code> "development" is nationalized by {{tl|I18n/COA}}. }} |3stat=optional- |4=4<ref name="a" /> |4d=a "$" (dollar sign) when "[[File:Commonist2.svg|14px]] Uploaded with Commonist" should be added. In this case * parameter <code>$u=</code> may specify a user, e.g. <nowiki>{{U|user}}</nowiki> * parameter <code>$l=</code> may specify a logo (☭){{Clarify|date=November 2024}}, e.g. <nowiki>[[File:xyz.svg|20px]]</nowiki><ref name="c">This parameter allows suppression with the parameter value "-" (or just the parameter without any value, e.g. <code>cat=</code>){{Clarify|date=November 2024}}</ref> * parameter <code>$m=</code> may specify a more, e.g. &amp;nbsp; explanation * parameter <code>$c=</code> may specify a category, e.g. <nowiki>[[Category:Othercat| ]]</nowiki><ref name="c" /> * parameter <code>$s=</code> may specify a subcategory, e.g. <code>:diffusion</code><ref name="c" /> * parameter <code>$w=</code> may specify a [[Template:Igen/sub|topic]], e.g. <code>m</code> or <code>projection</code> * parameter <code>$f=</code> may specify a linefeed before, e.g. <code><nowiki>br</nowiki></code>, <code>clr (default: <code>none</code></code><ref name="c" />) If any one of these seven parameters is specified the "<code>$</code>" is implied and can be omitted;<br /> for <code>$l</code>, <code>$c</code>, <code>$s</code> or <code>$f</code> it is enough if the suppression is defined with an empty value e.g. <code>$c=</code>{{Clarify|date=November 2024}} |4stat=optional- |5=5<ref name="a" /><ref>Every one of the eight signs can be used either as a positional parameter, or as a named parameter passing the value to the corresponding template; see [[#Named and unnamed parameters|Named and unnamed parameters]].</ref> |5d=For additional parametrizing see [[#Named and unnamed parameters|individual information]] * a "%" (percent sign) or "%v" to insert the {{tl|Igen/emb|Translate}} tag, "%s" when option [[Commons:Translation possible/Learn more#Multiple translations within one SVG file|<switch>]]. * a "~" (tilde) to insert the {{tl|Cdata|pgf-Cdata}} tag. * an "<code>!</code>" (exclamation mark) to insert the {{tl|BadSVG}} tag. * a "?" (question mark) to insert the {{tl|Rsvg bug}} tag. * a "§" ("section" sign) to insert the {{tl|TracedSVG}} tag. * an "&" (ampersand) to insert the {{tl|Igen/amp|QGIS}} tag. * a "<" ("less" sign) to insert the {{tl|Igen/ptx|Path text SVG}} tag. * a "<code>^</code>" {{anchor|circum}}(circumflex sign) to insert the {{tl|Quality image}} tag. * a ">" ("greater" sign) to inhibit for {{C|Large SVG files|large SVG}} the "show source" validator option. * a "<code>×</code>" (multiplication sign) to insert the {{tl|SimplSVG|draw by hand}} tag. * a "<code>\-</code>" (backslash&minus) or "\" to insert the {{tl|Superseded}} tag, or : a "<code>\+</code>" (backslash&plus) to insert the {{tl|Supersedes}} tag', or : a "<code>\\</code>" (backslash twice) to insert the {{tl|VVA}} tag. : a "<code>\#</code>" (backslash&number) to insert {{tl|PDF version available}}. * an "→" (arrow right) or "⇒" to insert the {{tl|Convert to SVG}} tag. * an "←" (arrow left) to insert the {{tl|NoInkscape}} tag. * a "<code>°</code>" (degree sign) to insert the {{tl|Easy border}} tag. |5stat=optional-: <!-- |6=6<ref name="a" /> |7=7<ref name="a" /> |8=8<ref name="a" /> |8d=(''free for future expansions'') |8stat=optional- --> |10=e |10aliases=err |10label='''e'''rror count |10d=''when invalid SVG'': error count from W3C validation ("0" for ''valid'', "-1" for ''uncheckable''){{Clarify|date=November 2024}}<br /> (has precedence over any argument of parameter 2)<br /> '''Note''': when uncheckability is specified, <code>Other tool</code> is always implied. |10stat=optional- |15=m |15aliases=more |15label='''m'''ore text |15d=optional additional text (use <code>M=</code> to precede that text with a space{{Clarify|date=November 2024}}) |15def=<code>.</code> |15stat=optional- |20=c<ref name="c" /> |20aliases=cat |20label='''c'''ategories |20d=category/categories, complete with brackets (and sorting), or without; or suppress with <code>c=-</code><br /> plain text ''without'' brackets becomes completed with <code><nowiki>[[Category: ]]</nowiki></code> |20stat=optional- |25=C |25label='''C'''olor |25d=the {{t0|tincture|tincture}} can be defined |25stat=optional- |26=cb |26label='''c'''olor '''b'''oxes |26d=for more details see section [[#Color boxes]] |26stat=optional- |30=s<ref name="c" />{{Anchor|subcat}} |30aliases=sub |30label='''s'''ubcategory |30d=suffix to the category name for diffusion but also an information for subtemplates * <code>sub=</code> is used only for category diffusion (use <code>sub=-</code> for no diffusion){{Clarify|date=November 2024}} * <code>S=</code> &nbsp;(upper case) like <code>sub=</code>, with the insertion of an inbetween space * <code>s:=</code>, <code>s-=</code> (lower case) with insertions, see [[#Subcat & topic]] * <code>s=</code> &nbsp;(lower case) can be used instead, or ''in addition'' to all the above; : With a [[Template_talk:Image_generation/Archive_1#TopTb|''one-letter-code'']] for <code>s=</code> the {{T0|Igen/top|topic}}s-subcategory may be [[Template:Igen/sub|defined]], as : &#58;CoA, :Diagrams, :Flags, :Icons, :Logos, :Maps, :Signs, :Unicode, :Trigonometry, : When <code>sub</code>/<code>S</code> and <code>s</code> are both defined, <code>sub</code>/<code>S</code> is used for subcategorizing, : and <code>s</code> is used (like <code>w</code>) as an [[#Subcategory specification|information]] and ''[[Template:Igen/sub|topic]]'' for several subtemplates <span style="background:#FFD;border:1px #B40 solid;padding:0 6px;">Select the best fitting subcategory, or create an appropriate new one</span> |30stat=optional- |35=k |35aliases=key |35label=sort '''k'''ey |35d=key for sorting within the category (use <code>K=</code> for the insertion of a preceding space)<br /> <code>key</code> is used e.g. for category sorting, and in {{T0|HandSVG}} for subcategorizing |35stat=optional- |40=v |40aliases=vt/vtxt |40label='''v'''alid, invalid |40d=additional text for Valid/Invalid SVG box (use <code>V=</code> to precede that text with a space){{Clarify|date=November 2024}} |40stat=optional- |45=o |45aliases=opt |45label='''o'''ption |45d=to set or overwrite the ''display source'' option for ValidSVG/InvalidSVG{{Clarify|date=November 2024}} |45stat=optional- |50=n |50aliases=name |50label=tool '''n'''ame |50d=a tool name or a description for {{tl|Created with other tool}}{{Clarify|date=November 2024}}<br /> '''Note''': when <code>n[ame]</code> is specified, <code>Other tool</code> is implied and parameter 1 can be omitted |50stat=optional- |55=u |55aliases=user/U/by |55label='''u'''ser |55d=user name, or other text. May be coded e.g. with {{tl|U}}, {{tl|Uc}}, {{tl|Ud}}, {{tl|Ut}}, …<br /> Use <code>U=</code> to create the user link: <code>U=xyz</code> ⇒ <code><nowiki>{{U|xyz}}</nowiki></code>.{{Clarify|date=November 2024}}<br /> '''<code>by</code>''' creates a user link. May be coded with "[" or "{" (see {{Tl|By}}) |55stat=optional- |60=code<br>code2<br>code3 |60aliases=c1…c3 |60label=code display |60d=display of the [[Template:Created with code/doc#Template parameters|source code]] used for generation, e.g. the SVG code. In this case * parameter <code>l1=</code> or <code>syntax=</code> may specify or change the [[mw:Extension:SyntaxHighlight GeSHi#Supported languages|code]] '''l'''anguage (syntax) * parameter <code>h1=</code> or <code>title=</code> may specify another '''h'''eadline, or suppress "<code>none</code>" * parameter <code>f1=</code> or <code>format=</code> may specify '''f'''ormat style options * parameter <code>s1=</code> or <code>collapse=</code> may specify a title text for collapsability headline * parameter <code>d1=</code> for category diffusion * parameter <code>e1=</code> may specify '''e'''xplanatory text preceding the code block * parameter <code>g1=</code> for font size * parameter <code>n1=</code> for a trailing '''n'''ote below of the code block : More parameters with suffices "2" and "3" can be used for more codes: :* <code>c2=</code>, <code>l2=</code> or <code>code2</code> with <code>syntax2</code>, <code>title2</code>, <code>format2</code> etc. :* <code>c3=</code>, <code>l3=</code> or <code>code3</code> with <code>syntax3</code>, <code>title3</code>, <code>format3</code> and so on |60stat=optional- |65=vsub<ref name="c"/> |65aliases=Vs |65label='''vs'''ub |65d=category diffusion <code>of Text editor</code> for e.g. HandSVG, Inkscape-Hand, Adobe-hand;<br /> Use <code>Vs=</code> for an inbetween space; set <code>vsub=-</code> to suppress the category diffusion. |65def=<code>s</code> |65stat=optional- |70=vs<ref name="c" /> |70aliases=vstyle |70label='''vs'''tyle |70d=[[#vstyle|vstyle option]]: <code>vs=</code> or <code>vs=fl</code> for float-left (= same line){{Clarify|date=November 2024}} |70def='''<code>-</code>''' |70stat=optional- |75=p |75aliases=P |75label='''p'''receding |75d=additional '''p'''receding text; to be displayed ''left'' or ''above'' of the boxes |75stat=optional- |80=t |80aliases=T |80label='''t'''railing text |80d={{anchor|trailtext}}additional '''t'''railing text; is displayed ''right'' or ''below'' of the boxes<br />If tags or secondary tools should appear in another sequence, use * t2 (before Commonist} * t3 (after Commonist, before <code>code</code>) * t4 (immediately after <code>code</code>) <!-- – use uppercase "T " to precede with <code><nowiki><br></nowiki></code> --> * t5 (before "Quality image") * t6 (after QI, <small>the last ''advantage'' tag, before all the ''disadvantage'' tags</small>) The same with an uppercase <code>T</code> cares for a newline before |80stat=optional- |85=g |85aliases=gl |85label='''g'''raphic lab |85d=specify the national {{Tl|Graphic Lab}} with the {{w|List of ISO 639-1 codes|ISO 639-1}} language code<br /> (uses the [[#subcat|topics-subcategory]]), e.g. <code>gl=it&#x7C;s=m</code> for the {{tl|Laboratorio grafico mappa}}<br /> Abbreviations: "gd" for "g=de", "ge" for "g=es", "gf" for "g=fr", "gi" for "g=it", but "gl" for "g=en"<br /> Together with <code>s=c/f/m</code> the national [[Commons:WikiProject Heraldry|heraldry project]] is achieved (e.g. {{T0|Projekt Wappen|de}}, {{T0|THV|es}}, {{T0|Projet Blasons|fr}}).<br /> The parameters <code>gs=</code> may be used to specify the <code>style</code>{{Clarify|date=November 2024}}, <code>gc=</code> for [[#o-sub|subcategorizing]].<br /> See {{T0|Graphic Lab/statistics}} for more information. |85stat=optional- |90=r<ref name="c" /> |90label='''r'''etouched |90d=specify the {{tl|Retouched picture}}, with parameters r= <small>and</small> editor= editoff= orig= origoff=<br /> See [[#RetP|Retouched picture]] for more information. |90stat=optional- |95=w<ref name="c" /> |95aliases=what/topic<ref name="c" /> |95label='''w'''hat (topic) |95d=With <code>w=</code> the [[Template talk:Igen/top|topic]] can be altered or suppressed<br /> See also the [[#Subcategory specification|subcategories description]] |95def=<code>s</code> |95stat=optional- <!------------------------------------------------------------------------------------------------ TEMPLATE BOX - END OF parameter section --------------------------------------------------------------------------------------------------> |name={{BASEPAGENAME}} |desc={{Non-native-en}} {{Lua|Module:Igenmod}}Short notation for the {{C|SVG created with ... templates}} {{nobold|and the non-SVG}} {{C|Created with ... templates}}, {{nobold|helps to display}} <div style="float:left;padding-right:2em;width:30%">{{nobold|__TOC__}}</div> * {{nobold|W3C validation}} * {{nobold|SVG tool}} * <small>optional: </small> SVG code <small>used for creation</small><br /><small>{{0|WWWWw}}{{nobold|and ''a great number of [[#Other tags|other taggings]]''}}</small> {{nobold|formatted ''within one single line''.}}<br /> Categorisings {{nobold|occur depending on tool name, validation and other tags.}} {{nobold|Some parameters/tags are ''only'' for SVG files, a few others only for raster images.}} In case of difficulties {{nobold|using this template, its tag codes and this documentation, you may use {{U|User:Aaron Liu/SvgCheck-Minus.js|the simpleSVGcheck utility script}}, or the easier {{T|File generation description|incl=3}}. }} {{nobold|Parameters for {{Tlf|File generation description}} can be e.g.}} <pre style="font-weight:normal"> |other fields = {{ File generation description |SVG tool = ChemDraw |W3C error count = 0 |Topic = structural formula |Text as path = yes }} </pre> {{nobold|less cryptic than{{0}} <pre style="font-weight:normal">|other fields={{Image generation|C|+|<}}</pre> {{0}}which does exactly the same.}} <br /> <br /> {{nobold|<s>{{T0|Igen/coa}} was</s> a version for {{W|Coats of arms}}, in special with {{T0|COAInformation}}.}}<br /> {{nobold|Now {{W|Coats of arms}} are serviced with {{T0|COAInformation}} and {{M|IgenCoa}}, after conversion.}}{{Clarify|date=November 2024}} {{clr}} |namespace=file |usergroup=all |placement= |usage-notes=<!-- -------------------------------------------------------------------------------------------------- TEMPLATE BOX - BEGIN OF usage-notes --------------------------------------------------------------------------------------------------> === Script support === The {{W|User scripts|user script|commons}} {{Em|{{U|User:Aaron Liu/SvgCheck-Minus.js}}}} has been developed to help maintaining file descriptions. Paste the following three lines into [[Special:Mypage/common.js|your common.js]], or other MediaWiki skin-related JavaScript page. If required, look for your specific script page via the ''Skin'' section of [[Special:Preferences#mw-prefsection-rendering|your preferences]]. <syntaxhighlight lang=javascript line copy> // [[User:Aaron Liu/SvgCheck-Minus.js]] if (mw.config.get('wgNamespaceNumber') === 6 && /SVG/i.test(mw.config.get('wgTitle').slice(-3))) mw.loader.load('//commons.wikimedia.org/w/index.php?title=User:Aaron Liu/SvgCheck-Minus.js&action=raw&ctype=text/javascript'); </syntaxhighlight> The ''simpleSVGcheck.js'' script enables users to use {{T|Image generation}} template without knowing all details of its parametrizing. The script cares for the most essential settings, and does a lot of standardizing the file descriptions. Expert users may complete the suggestions made by the script (e.g. by adding more tags) before saving the script’s changes of the file description page. === Alternative template === {{T|File generation description}} is a version with <u>descriptive parameter names</u> for users not liking the cryptic short codes.<br /> Most taggings can be specified in a better human-readable format with this more talkative <!-- inbetween --> template. A rich and detailed {{T0|File generation description/doc|documentation}} explains how easy it is to use that option. === Other tags === Can be set either by a shorthand notation code, or expressed like in the following examples: <table> <tr> <th style="text-align:left">other tag template</th><th style="text-align:center"><small>code</small></th> </tr><tr> <td>{{tl|Add languages}}</td><td>{{0|(}}<code>%a</code></td> </tr><tr> <td>{{tl|BadSVG}}</td><td>{{0|((}}<code>!</code></td> </tr><tr> <td>{{tl|TopoSVG}}</td><td>{{0|l}}<code>!=t</code></td> </tr><tr> <td>{{tl|TopoSVG}} (required raster)</td><td>{{0|l}}<code>!=r</code></td> </tr><tr> <td>{{tl|FakeSVG}}</td><td>{{0|i}}<code>!=f</code></td> </tr><tr> <td>{{tl|Broken file}}</td><td><code>(bf)</code></td> </tr><tr> <td>{{tl|Cdata}}</td><td>{{0|((}}<code>~</code></td> </tr><tr> <td>{{tl|Colorblind}}</td><td><code>(bl)</code></td> </tr><tr> <td>{{tl|Commonist}}</td><td>{{0|((}}<code>$</code></td> </tr><tr> <td>{{tl|Coablazon}}</td><td>{{0|((}}<code>cb</code></td> </tr><tr> <td>{{tl|COAref}}</td><td>{{0|((}}<code>rf</code></td> </tr><tr> <td>{{tl|Convert to SVG}}</td><td></td> </tr><tr> <td>{{tl|UseXML|Convert to HTML}}</td><td><code>(××)</code></td> </tr><tr> <td>{{tl|Convert to international}}</td><td><code>(in)</code></td> </tr><tr> <td>{{tl|Convert to multilang}}</td><td><code>(ml)</code></td> </tr><tr> <td>{{tl|Convert to wikichart}}</td><td><code>(wc)</code></td> </tr><tr> <td>{{tl|Convert to wikitable}}</td><td><code>(wt)</code></td> </tr><tr> <td>{{tl|Created with code}}</td><td><code>(ci)</code></td> </tr><tr> <td>{{tl|Disputed map}}</td><td><code>(dm)</code></td> </tr><tr> <td>{{tl|Easy-border}}</td><td>{{0|((}}<code>°</code></td> </tr><tr> <td>{{tl|Fictional}},<br />{{tl|Fictitious flag}}</td><td><code>(ff)</code><br /><code>(ff)</code></td> </tr><tr> <td>{{tl|Fake sports logo}}</td><td><code>(fi)</code></td> </tr><tr> <td>{{tl|Fotowerkstatt}}</td><td><code>(fw)</code></td> </tr><tr> <td>{{tl|Graphic Lab}}:<br />{{tl|Projet Blasons}},<br />{{tl|Projekt Wappen}}</td><td>{{0|(}}<code>g…</code></td> </tr><tr> <td>{{C|Large SVG files|<code><nowiki>{{Large SVG}}</nowiki></code>}}</td><td>{{0|((}}<code><nowiki>></nowiki></code></td> </tr><tr> <td>{{tl|Logo history}}</td><td><code>(lh)</code></td> </tr><tr> <td>{{tl|NoInkscape}}</td><td><code>(ni)*</code></td> </tr><tr> <td>{{tl|NoUpdate}}</td><td><code>(nu)*</code></td> </tr><tr> <td>{{tl|Opaque}}</td><td><code>(oq)</code></td> </tr><tr> <td>{{tl|Overlay}}</td><td><code>(ov)</code></td> </tr><tr> <td>{{tl|Igen/ptx|Path text SVG}}</td><td>{{0|((}}<code><nowiki><</nowiki></code></td> </tr><tr> <td>{{tl|PDF version available}}</td><td>{{0|(}}<code>\#</code></td> </tr><tr> <td>{{tl|Quality image}},<br />{{Tl|Valued image}}</td><td>{{0|((}}<code>^</code></td> </tr><tr> <td>{{tl|QGIS}}</td><td>{{0|((}}<code>&</code></td> </tr><tr> <td>{{tl|Recent}}</td><td><code>(re)</code></td> </tr><tr> <td>{{tl|Redrawn with Text Editor|Redrawn}}</td><td><code>(rd)</code></td> </tr><tr> <td>{{tl|Restoration}}</td><td><code>(rs)</code></td> </tr><tr> <td>{{tl|Retouched picture}}</td><td>{{0|((}}<code>R</code></td> </tr><tr> <td>{{tl|Rsvg bug}}</td><td>{{0|(}}<code>?…</code></td> </tr><tr> <td>{{tl|Should be text}}</td><td></td> </tr><tr> <td>{{tl|SimplSVG}}</td><td>{{0|((}}<code>S</code></td> </tr><tr> <td>{{tl|Igen/sni}}</td><td>{{0|(}}<code>S*</code></td> </tr><tr> <td>{{tl|Redrawn with Text Editor|rd}}&{{tl|Igen/sni|sni}}</td><td>{{0|(}}<code>S&</code></td> </tr><tr> <td>{{tl|Scripted SVG}}</td><td></td> </tr><tr> <td>{{tl|Superseded}}</td><td>{{0|(}}<code>\-</code></td> </tr><tr> <td>{{tl|Supersedes}}</td><td>{{0|(}}<code>\+</code></td> </tr><tr> <td>{{tl|SVG 1.2}}</td><td>{{0|i}}<code>1.2</code></td> </tr><tr> <td>{{tl|Taken with ...}}</td><td><code>(tw)</code></td> </tr><tr> <td>{{tl|Technically replaced}}</td><td></td> </tr><tr> <td>{{tl|Tincture}}</td><td>{{0|((}}<code>C</code></td> </tr><tr> <td>{{tl|TracedSVG}}</td><td>{{0|((}}<code>§</code></td> <!-- = {{tl|PoorSVG}} --> </tr><tr> <td>{{tl|Igen/emb|Translate}}</td><td><code>(tr)</code></td> </tr><tr> <td>{{tl|Update}}</td><td><code>(up)</code></td> </tr><tr> <td>{{tl|UseXML}}</td><td>{{0|(}}<code>××</code></td> </tr><tr> <td>{{tl|Valid SVG}} or {{tl|Invalid SVG}}</td><td></td> </tr><tr> <td>{{tl|Vector version available}}</td><td>{{0|(}}<code>\\</code></td> </tr> </table> === Parameter settings === The flexibility of parameter definition allows to use the template with high variability. The same result can be achieved by different settings.<br />All parameters are optional; when used, unnamed * parameter #1 {{0}} contains either ::* tool name abbreviation letter (default: <big><code>I</code></big> for ''Inkscape'') ::* tool name ::* parameters <code>%</code>, <code>~</code>, <code>!</code>, <code>?</code>, <code>§</code>, <code>&</code>, <code><</code>, <code>^</code>, <code>></code> or sign <code>$</code>, <code>+</code>, <code>-</code> and [[#Reference of all parameters|more]]. * parameter #2 {{0}} contains either ::* <code>v</code>, <code>n</code>, <code>s</code>, ::* numeric error count (W3C), ::* parameters <code>%</code>, <code>~</code>, <code>!</code>, <code>?</code>, <code>§</code>, <code>&</code>, <code><</code>, <code>^</code>, <code>></code> or sign <code>$</code>, <code>+</code>, <code>-</code> and more. :: ''See'' also [[#Parameter 2]] * parameter #3 to #9 contains each one either ::* parameters <code>%</code>, <code>~</code>, <code>!</code>, <code>?</code>, <code>§</code>, <code>&</code>, <code><</code>, <code>^</code>, <code>></code> or sign <code>$</code>, <code>+</code>, <code>-</code> and more. {{Clarify|date=October 2024}} It is recommended '''''always to specify the tool''''' with parameter #1. Files defaulted to Inkscape are collected in a {{C|Created with Inkscape-undef|maintenance category}}. <!------------------------------------------------------------------------------------------------ TEMPLATE BOX - END OF usage-notes --------------------------------------------------------------------------------------------------> |setscats= |i18n-method=- |i18ndesc=different translation methods |lines= |shorthand={{((}}[[Template:Igen|Igen]]{{!}}… parameters as described …{{))}}<br/><small>''See also'' the template {{tl|Creation}} for simpler usages within the {{T0|Information}} box.</small> |relieson= * {{W|Extension:ParserFunctions||mw}} * {{M|Igenmod|||+}} * {{T|1color|+|incl=8}} * {{T|Add languages|+|incl=8}} * {{T|Artifacts|+|incl=8}} * {{T|BadSVG|+|incl=8}} * {{T|Broken file|+|incl=8}} * {{T|Cdata|+|incl=8}} * {{T|Clear|+|incl=8}} * {{T|Coablazon|+|incl=8}} * {{T|COAref|+|incl=8}} * {{T|Colour blind|+|incl=8}} * {{T|Commonist|+|incl=8}} * {{T|Convert to international|+|incl=8}} * {{T|Convert to multilang|+|incl=8}} * {{T|Convert to wikichart|+|incl=8}} * {{T|Convert to wikitable|+|incl=8}} * {{T|Created with code|+|incl=8}} * {{T|Current|+|incl=8}} * {{T|Easy-border|+|incl=8}} * {{T|Error|+|incl=8}} * {{T|Fake flag|+|incl=8}} * {{T|FakeSVG|+|incl=8}} * {{T|Fictitious flag|+|incl=8}} * {{T|Fotowerkstatt|+|incl=8}} * {{T|I18n/COA|+|incl=8}} * {{T|Igen/2nd|+|incl=8}} * {{T|Igen/amp|+|incl=8}} * {{T|Igen/cat|+|incl=8}} * {{T|Igen/cod|+|incl=8}} * {{T|Igen/csd|+|incl=8}} * {{T|Igen/csf|+|incl=8}} * {{T|Igen/cwt|+|incl=8}} * {{T|Igen/emb|+|incl=8}} * {{T|Igen/fif|+|incl=8}} * {{T|Igen/glc|+|incl=8}} * {{T|Igen/lab|+|incl=8}} * {{T|Igen/msg|+|incl=8}} * {{T|Igen/par|+|incl=8}} * {{T|Igen/ptx|+|incl=8}} * {{T|Igen/qui|+|incl=8}} * {{T|Igen/sni|+|incl=8}} * {{T|Igen/sub|+|incl=8}} * {{T|Igen/swv|+|incl=8}} * {{T|Igen/top|+|incl=8}} * {{T|Igen/twt|+|incl=8}} * {{T|Igen/upl|+|incl=8}} * {{T|Igen/usr|+|incl=8}} * {{T|Inaccurate-map-disputed|+|incl=8}} * {{T|Information field|+|incl=8}} * {{T|Invtext|+|incl=8}} * {{T|Logo history|+|incl=8}} * {{T|Nil2|+|incl=8}} * {{T|NoInkscape|+|incl=8}} * {{T|NoUpdate|+|incl=8}} * {{T|Opaque|+|incl=8}} * {{T|Out of borders|+|incl=8}} * {{T|Overlay|+|incl=8}} * {{T|PDF version available|+|incl=8}} * {{T|Recent|+|incl=8}} * {{T|Redrawn with Text Editor|+|incl=8}} * {{T|Restoration|+|incl=8}} * {{T|Retouched picture|+|incl=8}} * {{T|Rsvg bug|+|incl=8}} * {{T|SimplSVG|+|incl=8}} * {{T|Superseded|+|incl=8}} * {{T|Supersedes|+|incl=8}} * {{T|SVG|+|incl=8}} * {{T|SVG 1.2|+|incl=8}} * {{T|Tincture|+|incl=8}} * {{T|TopoSVG|+|incl=8}} * {{T|TracedSVG|+|incl=8}} * {{T|Translate|+|incl=8}} * {{T|U|+|incl=8}} * {{T|Update|+|incl=8}} * {{T|UseXML|+|incl=8}} * {{T|Vector version available|+|incl=8}} * {{U|ZooFari/Template:SVG|User:Zoofari/Template:SVG}} }}<!-- ================================================================================================== END OF TEMPLATE BOX ==================================================================================================--> == Specific information == The template is intended to be used within the {{tl|Information}} box, e.g. at <code>Other fields=</code>, or anywhere outside {{NoteBox |type = warn |1 = Because the prevalent majority of files belongs to {{C|Valid SVG created with Inkscape}}, <code>1=Inkscape</code> and <code>2=v</code> are the default values{{Clarify|date=September 2024}}<!-- This statement was added in Sarang's initial revision (141159746, 2014). --><br /> This defaulting is a '''failure'''; {{T0|Created with Inkscape-default|Inkscape-default}} categorizes to a {{C|Created with Inkscape-default|maintenance category}}.{{Clarify|date=September 2024}}<!-- This statement was added in Sarang's revision 436629186 (2020). --> See also {{T0|Created with Inkscape-undef|Inkscape-undef}}. }}<!-- The author of these statements is dead. --> === Subtemplates === The template uses several specific subtemplates, e.g. <div style="font-size:smaller;"> * {{tl|Nil2}}{{0|0000}} – decides whether {{T|Information field}} is used * {{tl|I18n/COA}} – translation of the name * {{tl|Igen/2nd}} – extends the codes *, @, ), \, ° to taggings * {{tl|Igen/amp}} – analizes whether more than one SVG tool is used * {{tl|Igen/bug}} – adapter to {{T|SVGbug}} * {{tl|Igen/cat}} – tool for categorization * {{tl|Igen/cbx}} – {{T|ColorBox}} together with {{T|Igen/cbox}}<!-- {{tl|Igen/clt}} – --> * <s>{{tl|Igen/coa}} – after textsplitting of {{T|COAInformation/Image|link=no}}</s> * {{tl|Igen/cod}} – for [[mw:Extension:SyntaxHighlight#Supported_languages|syntax]] of {{T|Created with code}} * {{tl|Igen/csd}} – creates subcategory differentiation * {{tl|Igen/csf}} – checks whether an SVG drawing is a structural formula * {{tl|Igen/cwt}} – dictionary of shortcodes to translate into corresponding "created with..." template * {{tl|Igen/emb}} – embedded text is found * {{tl|Igen/fgd}} – evaluates whether a topic is valid * {{tl|Igen/fif}} – for fictional items * {{tl|Igen/flg}} – subtemplate for {{T0|Infobox flag}} * {{tl|Igen/glc}} – Graphic Lab CoA treatment * {{tl|Igen/lab}} – adapter for {{T|Graphic Lab}}<!-- , {{tl|Igen/lgd}} – --> * {{tl|Igen/map}} – subtemplate for {{T0|Map}} Infobox * {{tl|Igen/nil}} – does absolutely nothing – nevertheless often used * {{tl|Igen/par}} – analizes parameter 1 (tool name) and parameter 2 (error count} * {{tl|Igen/ptx}} – path text is found * {{tl|Igen/qui}} – adapter for {{T|Quality image}} * {{tl|Igen/sni}} – displays text for "no inkscape" * {{tl|Igen/sub}} – prepares the topic code for subcategorizion * {{tl|Igen/swv}} – <code><switch></code> controlled variations * {{tl|Igen/top}} – prepares the topic code for the display * {{tl|Igen/trg}} – adapter for 'topographic raster graphics'<!-- , {{tl|Igen/tst}} – [for special testing purposes] {{tl|Igen/uns}} – for W3C-unspecifieds --> * {{tl|Igen/twt}} – adapter for {{T|Taken with}} * {{tl|Igen/THV}} – display & caregorize THV * {{tl|Igen/upl}} – extends one-letter-codes to category names * {{tl|Igen/wph}} – Wikipedia Project Heraldry display * {{tl|BadSVG-t}}, {{tl|Created with X}} and more.</div> Such subtemplating allows swift maintenance while the large main template does not need to be touched. The template and its subtemplates are using several internationalization methods, like {{tl|autotranslate}} and {{tl|LangSwitch}}. === Additional notes === <references /> Because ''letters'' are used for the abbreviation of tool names, parameters #1 to #9 use ''other characters''.{{Clarify|date=October 2024}} === Examples === {| class="wikitable" style="width:100%" |- !Input{{0|WWWWWWWWWWWWWWW}} !Result |- |<code style="font-size:smaller">{{Tle|t=Image generation|I}}</code> |{{Image generation|I}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|I|p2=cf|n}}</code> |{{Image generation|I|cf=n}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|I|1}}</code> |{{Image generation|I|1|}} {{0}} same as <code style="font-size:smaller">{{Tle|t=Image generation|I|p2=e|1}}</code> |- |<code style="font-size:smaller">{{Tle|t=Image generation|I|+}}</code> |''see next line how it appears in the Information box''{{Image generation|I|v|fn=SVG{{I18n/COA|development}}}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|-}}</code> |{{Image generation|-}} ( "nil" transclusion - it does nothing) |- |<code style="font-size:smaller">{{Tle|t=Image generation|A}}</code> |{{Image generation|A}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|A$}}</code> |{{Image generation|A$}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|IA}}</code> |{{Image generation|IA}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|Im}}</code> |{{Image generation|Im|t= {{0}} option "IMPORTANT"}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|B}}</code> |{{Image generation|B}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|C}}</code> |{{Image generation|C}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|D}}</code> |{{Image generation|D}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|H}}</code> |{{Image generation|H}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|G}}</code> |{{Image generation|G}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|J}}</code> |{{Image generation|J}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|L|n}}</code> |{{Image generation|L|n|t={{0}} Raster graphics without W3C}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|M|s|p3=e|0}}</code> |{{Image generation|M|s|e=0|t= {{0}} due to "s" without W3C – set W3C error count!}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|P|p2=o|n|p3=e|1}}</code> |{{Image generation|P|o=n|e=1|t= {{0}} due to "opt=n" without W3C – set W3C error count!}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|U|12|>}}</code> |{{Image generation|U|12|>}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|Q|17|p3=e|23}}</code> |{{Image generation|Q|17|err=23|T=:(from two given values 17 and 23, the <code>err=</code> value has '''precedence''')}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|S|$}}</code> |{{Image generation|S|$}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|ArcMap}}</code> |{{Image generation|ArcMap}} {{0}} name "ArcMap" |- |<code style="font-size:smaller">{{Tle|t=Image generation|GeoGebra|n}}</code> |{{Image generation|GeoGebra|n}} {{0}} "GeoGebra" '''n'''on-SVG |} When expressing some more options without expressing them by the shorthand parameters it can become a long line:<br /> <code><nowiki>{{</nowiki>Image generation|Inkscape|v|+'''|u='''<nowiki>{{</nowiki>U|Username}}'''|s=''':Drapeaux created by User:Username'''|m='''-<nowiki>[[</nowiki>Help:Inkscape#Inkscape SVG vs. Plain SVG|<nowiki>''</nowiki>important<nowiki>''</nowiki>]]'''|t='''<nowiki>{{</nowiki>Translation possible}}<nowiki>{{</nowiki>Translate|switch=yes}}<nowiki>{{</nowiki>Cdata}}<nowiki>{{</nowiki>BadSVG}}<nowiki>{{</nowiki>SVGbug|description=hairline crack}}<nowiki>{{</nowiki>TracedSVG}}<nowiki>{{</nowiki>Path text SVG}}<nowiki>{{</nowiki>Quality image}}<nowiki>{{</nowiki>RetouchedPicture|1=Translation en → fr|editoff=Username|origoff=Carbon14 with activity labels.svg}}<nowiki>{{</nowiki>Projet Blasons}}<nowiki>{{</nowiki>Atelier graphique}}}}</code> === Parameter table === The table shows for some given simple situations one of several possibilities to set parameters: * if the ''tool'' needs to be specified, it’s only possible with parameter #1 * an ''error'' number can be specified either with parameter #2, or everywhere with err= * the <code>n</code> at parameter #2 clarifies that the file is non-SVG * to tag a file which is not SVG the <code>n</code> needs to be set with parameter #2 * when used as an argument of <code>Other fields</code>, the <code>+</code> <u>is necessary</u> * when used ''outside'' the information box, the <code>-</code> ''may be'' necessary {| class="wikitable" style="margin:.8em 0 0 1.6em" | placement || colspan="4" | ''other fields'' || colspan="4" | standalone |- ! style="text-align:right"| parameters !!p1 !!p2 !!p3 !! p4{{0}}!!p1 !!p2 !!p3 !!p4{{0}} |- | valid Inkscape || + || || || || – || || || |- | Inkscape 1 error || + || 1 || || || – || 1 || || |- | valid BKchem || B || + || || || B || – || || |- | Gnuplot 4 errors || G || 4 || + || || G || 4 || – || |- | Python raster || P || n || + || || P || n || – || |- | valid PHP ||PHP|| + || || ||PHP|| – || || |- | PHP 17 errors ||PHP||17 || + || ||PHP||17 || – || |} === Parameter 2 === Parameter #2 has historically been the place to specify the file’s validation, as in transclusions like <code><nowiki>{{Inkscape||</nowiki><u>v</u>}}</code>. Now it may contain one of the following: * The character "v" to mark a '''v'''alid SVG file. Because this is the default for SVG files it ''is '''not necessary''''' to be specified and can be omitted. * The character "n" to mark a '''n'''on-SVG file. Because this is the default for non-SVG files it is not necessary to be specified explicitly. * The character "s" to mark a SVG file with '''s'''uppression of the W3C-box. To enable proper category sorting, "e= " must be specified explicitly (''<code>e=0</code>'' for "valid"). <!-- * The "/" sign is used here to omit the W3C link for SVG files. This ''disables'' the category diffusion and is therefore ''not recommended''. --> * The {{W|W3C}} error count: either "0" (for a valid SVG), a number > zero or -1. This error count can also be given with the parameter <code>e=</code>. Default is "0". * The value "-1" for SVG code that can't be checked by the W3C validator (a common reason is the missing XML header which can be easily fixed); "Other tool" is implied, no need to specify it. * One of the signs <code>$</code>, <code>+</code>, <code>-</code> or <code>%</code>, <code>~</code>, <code>!</code>, <code>?</code>, <code>§</code>, <code>&</code>, <code><</code>, <code>^</code>, <code>></code>. These can also occur as arguments for any one of the unnamed parameters #1 through #9. === Suppress the validity box === Parameter #2 set to "n" for <u>raster graphics</u> avoids the validity box and enables correct categorizing.<br /> To suppress the box for <u>SVG files</u>, set parameter #2 to "s". When the SVG file is invalid, '''always''' set the <code>e=</code> parameter, otherwise <code>e=0</code> to enable correct categorizing and sorting within the category. Setting "<code>s</code>" ''without'' "<code>e=</code>" let the file be {{C|SVG files without W3C-specification|W3C-unspecified}}. If it seems necessary to tag a file with more than one generation tool, the other tool(s) can be added with e.g. <code><nowiki>t={{Created with ...|err=…|vo=n}}</nowiki></code>. The ''validator option'' <code>vo</code> set to "n" avoids to show the box again, while <code>err</code> must specify the error count (or "0") to categorize correctly, including the descending sorting within the category in the case of validation errors. === SimplSVG template === To combine both the advantages of {{T0|SimplSVG}} and {{T0|Image generation}} it is possible to transclude the first one by the second. This can be done by setting {{Tle|t=Igen|…|…|+|'''S'''|and then the parameters for SimplSVG, followed by them for Image generation}}.<br />{{Anchor|SimplSVG}}Keep in mind that the tool for the <u>former image</u> must be specified, while the {{T0|HandSVG|Text Editor}} is always assumed as the tool for the <u>simplified image</u>! An example may be e.g. {{F|Non-EU-section-with-MK-2012.svg|-}} with {{Tle|t=Igen|I|18034|272|v|%|+|'''S'''}}<br /> To ''suppress'' the categorization to {{C|SVG Simplified}} subcategories, use <code>|S|sub=-</code> (with <code>-</code>!), or short <code>|S-</code> (with <code>-</code>!).<br /> <code>S</code> (or <code>S-</code>) can be specified at any position from 2 to 13 (<code>S-</code> even instead of the toolname <code>T</code> at position 1), e.g. <code>10=S</code> (or <code>10=S-</code>).<br /> Exactly the same can be specified alterny with the parameters {{Tle|t=Igen|I|+|p3=sb|18034|p4=sa|272|%|p6=s|v}} , : where <code>sb</code> specifies the <code>size-before</code>, and <code>sa</code> the <code>size-actual</code>; : <noinclude><span style="background-color:#cfe;width:60%;"></noinclude>for the {{T0|File generation description|'''File generation description'''|+|case=l}} that is expressed with the ''pair of numbers'' e.g. <code>Simplified SVG = 18034/272</code><noinclude></span></noinclude> plus additional positional and named parameters for <code>SimplSVG</code> (like e.g. <code>vs=-</code>),<br /> ''plus'' additional positional and named parameters for <code>Igen</code> like e.g. <code>%</code>, <code>vsub=</code> and/or <code>T=</code>.<br /> No conflict can occur with the free-position parameters because {{T0|SimplSVG}} uses letters, and {{T0|Image generation}} uses other characters. {{Anchor|vstyle}} <noinclude><div style="background-color:#cef;width:60%;"></noinclude> The ''layout'' can be controlled with the parameter <code>vs</code>: * mimimized layout, 1 line: <code>{{0|000}}</code> default (parameter skipped, or <code>vs=-</code> / <code>vs=n</code>) * small layout with 2 lines: <code>vs=</code> (or <code>vs=fl</code> <small>for "float-left"</small>) * medium layout, 3 lines:{{0}} <code>vs=z</code> (or <code>vs=Z</code>) * large layout with 3 lines:{{0}} <code>vs</code> with any other value than the above <noinclude></div></noinclude> === Color boxes === '''C''': '''{{T0|Tincture}}s''' can be specified with parameter '''<code>C=</code>''', e.g. <code>C=a/g/v</code> or <code>C=or/gules</code>; the parameter <code>Css=</code> can be used to select [[Template talk:Tincture/box|another tincture variation]].<br /> '''cb''': It is also possible to draw different '''Color Boxes''' above the other line(s) of the templates output. While the {{T|ColorString|+|case=l}} can be used everywhere, e.g. at the "description" field of the {{T|Information}} to draw such boxes, within {{T0|Image generation}} the parameter '''<code>cb=</code>''' is provided for that. For {{T0|File generation description}} the parameter <code>Colorbox=</code> does the same.<br /> <u>Parameter value:</u> consists in each case of subparameters, separated by slashes. <br /> In general, a pair of subparameters, or a series of such pairs is specified. *The ''first'' parameter of each pair is a valid [[Template talk:ColorString|CSS color name]], a valid {{T0|tincture}} name or a valid hexadecimal color code;<br />it can as well be expressed as an argument of {{T|Xconv}}, e.g. {{Tle|t=Xconv|rgb(204,51,102)}} ({{Colorbox |{{Xconv|rgb(204,51,102)}}}}), or {{Tle|t=Xconv|75%50%100%}} ({{Colorbox|{{Xconv|75%50%100%}}}}) *The ''second'' parameter can specify a descriptional text, e.g. "rouge" or something else, it may also be a (wiki)link;<br />it can as well be expressed as an argument of {{T|Xconv}}. When it is missing (specified empty), the first parameter is displayed. These parameter values can be preceded by a <u>pair of control characters</u>: The first control code may be a "+" to generate a field name; other characters or none won't.<br /> Control code 1 <code>+</code> will generate the standard field name as shown below, with <code>+=</code> any other text can be specified.<br /> {{Lua|Module:Color2dec}}The second control code may specify the type of color boxes: * none or " " or "C" to use the template {{T0|Legend}} with parameter pairs – the standard usage. * "B" to use the template {{T0|ColorBox}} with single parameter values, * "D" to use the template {{T0|ColorBox}} with parameter pairs,, * "L" to use the template {{T0|Legend}} with single parameter values, ¹) * "M" to use the template {{T0|Legend-small}} with parameter pairs, ²) * "S" to use the template {{T0|Legend-small}} with single parameter values, * "T" to use the template {{T0|Tbc}} with parameter pairs, and special treatment for the title. :¹) <small>the "L" possibility exists just for completion – normally a "Legend" without an explaining second value will not be useful.</small> :²) <small>the "M" possibility can as well be specified with the second control code "-". </small> To show it again, formatted as a table: {| class="wikitable" style="text-align:center" !template||parameters||control code 1||control code 2||Example <small>(xxx/yyy/... stands for the parameter pairs)</small>||{{T0|InFi|field name}} {{Nobold|(title) ⁴)}} |- |{{T0|Legend}}||pairs||"+" or none||none||style="text-align:left"|<code>+/ /xxx/yyy/...</code> or <code>{{0|+}}/C/xxx/yyy/...</code>³) |" "<small>=Legend,</small> "C"<small>=Colour(s)</small> |- |{{T0|ColorBox}}||'''single'''||"+" or none||<code>B</code>{{0|000}}||style="text-align:left"|<code>+/B/xxx/xxx/...</code> or <code>{{0|+}}/B/xxx/xxx/...</code> |Colour(s) |- |{{T0|ColorBox}}||pairs||"+" or none||<code>D</code>||style="text-align:left"|<code>+/D/xxx/yyy/...</code> or <code>{{0|+}}/D/xxx/yyy/...</code> |Colour(s) |- |{{T0|Legend}}||'''single'''||"+" or none||<code>L</code>{{0|000}}||style="text-align:left"|<code>+/L/xxx/xxx/...</code> or <code>{{0|+}}/L/xxx/xxx/...</code> |Legend |- |{{T0|Legend-small}}||pairs||"+" or none||<code>M</code>||style="text-align:left"|<code>+/-/xxx/yyy/...</code> or <code>{{0|+}}/M/xxx/yyy/...</code> |Colour(s) |- |{{T0|Legend-small}}||'''single'''||"+" or none||<code>S</code>{{0|000}}||style="text-align:left"|<code>+/S/xxx/xxx/...</code> or <code>{{0|v}}/S/xxx/xxx/...</code> |Color box(es) |- |{{T0|Tbc}}||pairs||none or "e"||<code>T</code>||style="text-align:left"|<code>{{0|v}}/T/xxx/yyy/...</code> or <code>e/T/xxx/yyy/...</code> |Used color(s) ⁵) |} :³) <code>{{0|+}}/ /xxx/yyy/...</code> can as well be written <code>xxx/yyy/...</code> (without the empty control characters)<br /> ::but for the control code 2 instead of " " the value "C" may be used to title "Colors" instead of "Legend" ⁴) With the ''control code 1'' <code>+=</code> the free selection of another field name than the standard one is possible,, e.g. <code><nowiki>|cb=+={{I18n/Colors}}/ ... </nowiki></code> <!-- for a (translated) field name<br /> --> :''without'' the <code>+</code> (just <code>|cb=/</code>) ''flags'' will get the field name "Flag colors". {{#tag:span|{{0}}See some examples of using <kbd>cb</kbd> (with control code 2: B, D, M, S and T) and of <kbd>+=</kbd> at {{C|Wikimedia icons|+}}.{{0}}|style=border:1px solid #3C3;background-color:#DFD}}<br /> '''Stripes and lines:''' Legend boxes can be ''striped'' by {{C|SVG stripe texture overlays|different patterns}}, and/or mixed with {{T0|Legend-line}}s. See examples at the [[Template:Legend/doc#Examples|documentation]].<br /> {{Anchor|Tbc}} <big>'''{{T0|Tbc}}'''</big> needs decimal coded color codes. Internal functions can convert ''hexadecimal triplets'', {{T0|tincture|tincture names}} and [[Template talk:ColorString|CSS color names]] for <code>Tbc</code>.<br />Other color names are not decimalizable, because of that not all ''color names'' can be used for <code>Tbc</code>.<br /> A {{T0|InFi|field name}} is always created and can't be deselected, independent from the first control code (which can be "e" for {{T0|Easy border}}). <big>Example strings for '''{{T0|Tbc}}''':</big> {| |- |<code>{{0|e}}<nowiki>/T/#900/wikidata red/#396/wikidata green/#069/wikidata blue </nowiki></code> || hexadecimal triplets & names |- |<code>{{0|e}}<nowiki>/T/argent//céleste//gules//sable </nowiki></code> || tinctures w/o names |- |<code>{{0|e}}<nowiki>/T/CornflowerBlue/#6495ED/BlanchedAlmond/#FFEBCD </nowiki></code> || CSS colors, and their hex codes for names |- |<code>{{T0|Easy border|e}}<nowiki>/T/#6495ED/blue/cendrée/gris/YellowGreen/green </nowiki></code> || colors from mixed sources, + {{T0|Easy border}} |- |<code><nowiki>Guatemal colors/T/#FFFFFF/blanco/#4997D0/azul </nowiki></code> || with individual <code>field name</code> |- |<code><<nowiki>nowiki/> {{Wf|Drapeau tricolore}}/T/#0055A4/bleu/#FFF/blanc/#EF4531/rouge</nowiki></code> || with individual <code>field name</code>, + {{T0|Easy border}} |} :⁵) (the ''individual field name'' starting with a space, e.g. "<<nowiki>nowiki/> </nowiki>", for signalling the {{T0|Easy border}} request) === SVG source code display === is performed centrally by Image generation; previously it had been an option of some single {{C|SVG created with ... templates|templates}}, now it can only be done when such a template is invoked by Image generation. The {{C|SVG created with ... templates|table}} shows where the code-categories are defined. The {{T0|Created with code|documentation}} explains how the different parameters can be used to format the output; a short reference can be found [[#Reference of all parameters|below]]. === Category === All the {{C|Created with ... templates}} categorize to "Created with ...", the {{C|SVG created with ... templates}} to "[in]valid SVG created with ...".<br /> This automatic generated category can be customized with [[#Subcategory specification|subcategory specification]] and/or sorting keys (key=). :''It is strongly recommended to change that reasonable categorizing '''only''' in cases of very good reason!'' With the parameter "cat=" (or short "c=", also "category=") the automatic categorizing can be ''overwritten'': * with <code>cat=-</code> every categorization will be suppressed (it can as well be done with "cat=n" or just "cat="). * another value ''without'' "[<nowiki/>[" brackets (e.g. <code>cat=xxx</code>), will be completed with the specified values of subcategory and/or sorting key, brackets and namespace:<br />e.g. <code><nowiki>[[Category:{{{cat}}}{{{sub|}}}|{{{key|}}}]]</nowiki></code> * when the value starts with brackets (e.g. <code>cat=[[</code>…), it will be used as-it-is: nothing is changed, specified values of the parameters sub and key are then ''ignored''.{{Anchor|o-cat}} <u>Other parameters for categories:</u> {| |- |{{blue|■}} <code>!c</code>= for {{t0|BadSVG}}s|| <code>^c</code>= for {{t0|QI}} || <code>cc</code>= for [[Template:Created_with_code/doc#Categorizing|Created with code]]/suppression |- |{{blue|■}} <code>&c</code>= for e.g. {{t0|Igen/amp|QGIS}} || <code>$c</code>= for {{t0|Commonist}} |- |{{blue|■}} <code>&lt;c</code>= for {{t0|Path text}} || <code>>c</code>= for {{C|Large SVG files}} |- |{{blue|■}} <code>tc</code>= for {{t0|Taken with}} || <code>Cc</code>= for {{t0|Tincture}} |- |{{blue|■}} <code>fc</code>= for {{C|Special or fictional flags|Fictional files}} || <code>bfc</code>= for {{t0|Broken file}} |- |{{blue|■}} <code>cni</code>=<small> for {{C|SVG created with Inkscape:Important}}</small> {{0}} || <code>cw</code>= the "Created with" category |} {{Anchor|cw_par}} The parameter <code>cw</code> has three functions: # the <code>logo</code> will be {{Tle|t=F|<nowiki>{{{cw}}}</nowiki> logo.svg}} # the <code>toolname</code> will be the link {{Tle|t=W|<nowiki>{{{cw}}}</nowiki>}} # the <code>category</code> will be {{Tle|t=C|Created with <nowiki>{{{cw}}}</nowiki>}} to simulate together with e.g. {{T0|Created with Other tool|Other tool}} a not-yet existent tool. === Subcategory specification === The template offers various possibilities to diffuse a category by subcategories. * With <code>sub=</code> a suffix to the category name is specified; ** when this suffix string needs to be prefixed with a semicolon "<code>:</code>" <!-- "&amp;#58;", --> use the parameter <code>s:=</code> or <code>sub:=</code> <br />{the display occurs with "lcfirst"; to force an "ucfirst" the parameter <code>su:=</code> can be used). ** or when this suffix string needs to be prefixed with a hyphen "<code>-</code>" <!-- "&amp;#45;", --> use the parameter <code>s-=</code> or <code>sub-=</code>. * An uppercase <code><big>S</big>=</code> does the same but an in-between space is inserted. * Recommended is to use the parameter <code>s=</code> which bears several advantages: :* With a code of one letter (or an abbreviation of some letters) many predefined subcategories are accessable; the subtemplate {{T0|Igen/sub}} cares for the expansion. :* Such a short code is also used as a ''[[#Topics|topic]]'' for the description by many other templates;<br />while Igen/sub expands only to ''subcategory names'' in English, the subtemplate {{T0|Igen/top}} transposes multilingual. Only in cases where the required topic differs from the subcategory, or no subcategory should come in effect, another code can be defined to substitute the <code>s=</code> value. This topic letter can be defined with the parameter <code>topic=</code> or <code>what</code>/<code>w=</code> and becomes expanded instead. <small>("w" for <code>what=</code> because the "t" had been used for "trailing text", and cannot be used to abbreviate <code>topic=</code>)</small>. {{Anchor|o-sub}}<br /> <u>Other parameters for subcategories:</u> {| |- |{{blue|■}} <code>!s</code>= for {{tl|BadSVG}}s || <code><nowiki><s</nowiki></code>= for {{tl|Igen/ptx}} |- |{{blue|■}} <code>?s</code>= for {{tl|Rsvg bug}}s || <code>§s</code>= for {{tl|TracedSVG}} |- |{{blue|■}} <code>&s</code>= for e.g. {{tl|Igen/amp|QGIS}} || <code>$s</code>= for {{tl|Commonist}} |- |{{blue|■}} <code>gc</code>= for {{tl|Graphic Lab}}-xx {{0}} || |} With the parameter <code>sd=</code> always a <u>subcategory differentiation</u> can be defined. ==== Topics ==== {{see also|Template:Igen/sub|Template:Igen/top}} When as well <code>s=</code> ''and'' <code>sub=</code> or <code><big>S</big>=</code> are defined, sub/S is used for subcategorizing (or suppression with <code>sub=-</code>) and <code>s=</code> can then be used like <code>w=</code> for topic specification. The topic option can alse be suppressed with <code>w=-</code>, independent from <code>s/sub/S</code>.<br /> <!-- See also the parameters <code>&s</code> and <code>&c</code>. --> As said above, the parameter <code>s</code> can be used for subcategorizing; when no parameter <code>topic=</code> (or <code>what</code>/<code>w=</code>) is specified the value of <code>s</code> is also used for the topic text by the national versions of the {{C|Created with ... templates}}. Except of this defaulting the two parameters can be defined and/or suppressed completely independent from each other.<br /> {{Color|b|2=These '''[[Template talk:Image generation#TopTb|tables]]''' show the conversion of <code>s=</code>, and the conversion & translation of <code>w=</code>.|css=border:#000 solid 1px;padding:2px 4px}}<br /> These ''topics'' are passed to many other templates. While a few of the {{C|Created with ... templates}} have ''default topics'' defined, only an ''explicitely specified'' topic can be passed further. ==== Subcat & topic ==== {{see also|Template:Igen/sub|Template:Igen/top}} It is also possible to define with one single parameter sub-category ''and'' topic, with a subcategory-separator semicolon "<code>:</code>" or minus "<code>-</code>".<br /> Parameter values of "<code>s:</code>" and "<code>s-</code>" specify a subcategory; they are prefixd with a "<code>:</code>" resp. a "<code>-</code>", but except that they are used as-they-are.<br /> When there is neither a parameter "topic", "what"/"w", nor "s" then the parameter values of "<code>s:</code>" / "<code>s-</code>" are used also for topics, with their first letter lower-cased, but not translated. Parameter values of "s:" and "s-" specify a subcategory which is prefixed with a "<code>:</code>" resp. a "<code>-</code>", the first letter is capitalized and a final (plural-)"s" is added.<br /> Example: <code>s:=digit</code> specifies the subcategory ":Digits" (as is done with <code>s=7</code>).<br /> When there is neither a parameter "topic", "what"/"w", nor "s" then the parameter values of "<code>s:</code>" / "<code>s-</code>" are used also for topics, with their first letter lower-cased, but not translated.<br /> Similar is the result with <code>sub:=</code> and <code>sub-=</code> but neither case changing nor adding of a plural-"s" occurs.<br /> The parameters <code>S:</code> and <code>Sub:</code> are working like <code>s:</code> and <code>sub:</code>, with an additional space after the semicolon. ==== Usage of "s" and "w" ==== {{see also|Template:Igen/sub|Template:Igen/top}} The parameter <code>s=</code> specifies a topic for subcategorization, ''and'' for the display (if no "w=" is specified).<br /> The parameter <code>w=</code> specifies a topic only for the display; it will be nationalized into the user's language.<br /> Example: <code>|s=tl|</code> specifies the subcategory <code>:Text logos</code>, and (without "w=") also the display text "text logo" in different languages;<br />but with <code>|w=tl|s=l|</code> the subcatory will be <code>:Logos</code> with the nationalized display text "text logo". === Graphic Lab === {{Anchor|GLab}} For the connection of files with the {{C|Graphic Lab}} exist multiple possibilities. Graphic labs are in general for all images, special subcategories exist for {{C|CoA Lab|coats of arms}}, {{C|Flag Lab|flags}} and {{C|Map Lab|maps}}. Dependent to the need these are divided into more subcategories, and e.g. the {{C|CoA Lab-fr}} has many ''user subcats''.<br /> Some graphic lab subcategories contain only a few items, while others are extremely crowded and may need further subcategorizing. {{T0|Image generation}} knows many two-letter codes for graphic lab access, consisting of the letter <code>g</code> for graphic lab, and another character for the nationality.<br /> Comparable to the {{T0|W|-}} which also has in most cases a one-letter abbreviation for the national Wikipedia, this system is effectiv but has limits.<br /> Because of the manageable total <!-- number amount --> of graphic labs, this seems sufficient and clear enough: <code>f</code> stands for <kbd>fr</kbd>, <code>h</code> for <kbd>hu</kbd>, <code>i</code> for <kbd>it</kbd> and so on. With the two-letter code g{{sub|×}} as parameter at any position {{T0|Igen}} is enforced to a special treatment; most of it is done by the subtemplate {{T0|Igen/lab}}. <u>User category</u>: can be defined with the two-letter-code specifying a user name, e.g. <code>gH=ARK|s=c</code> categorizes the file to {{C|CoA Lab-ch:ARK}}.<br> Same can be done with <code>|u=ARK|gH|s=c</code>. To ''avoid'' categorization, write <code>|u=ARK|s=c|gH=</code> ==== The [[MediaWiki:InformationToCOA.js|conversion script]] ==== To avoid the necessity of defining ever and ever again long parameter combinations, such defintions can be deposited for each user and automatically transfered.<br /> From each definition, the module creates a complete {{Tle|T=igen|...|...|...}} transclusion parameter and passes it to the file description.<br /> It is possible to have ''more than one'' definition for a user (with different keys!), and the parameter values can be manually [[#Modification|modified]].<br /> This treatment in ''intended'' for coats of arms using the {{T0|COAInformation|-}} but it can as well be used for any other file;<br /> an {{T0|Igenc|interface}} template can serve for the connection to the module and the stored parameters.{{Clarify|date=November 2024}} The definitions are stored in a Lua module's internal table; it needs some care but not much skill to modify it or to add definitions.<br /> The automatism is done by [[User:Sarang/cleanup.js|the cleanup script]], which can be performed as the last step of different flow modes. These are the different flows: {| style="padding:2 0 2 0" |- |1: ToCoa only || style="background:#CCC"|ToCoa script||e1||style="background:none"| ||style="background:none"| ||style="background:none"| |- |2: ToCoa & SVG || style="background:#CCC"|ToCoa script||e1||style="background:#CCF"|SVGcheck script ||style="background:#CEF"|cleanupscript||e2 |- |3: Coa + cleanup{{Clarify|date=November 2024}}|| style="background:#CCC"|ToCoa script||e1||style="background:none"|---------------→ ||style="background:#CEF"|cleanupscript||e2 |- |4: SVGcheck|| style="background:none"| || ||style="background:#CCF"|SVGcheck script ||style="background:#CEF"|cleanup script||e2 |- |5: cleanup only|| style="background:none"| || || style="background:none"| ||style="background:#CEF"|cleanup script||e2 |} ;Explanation&#58;: : 1) in any case, an Information template can be converted to a COAInformation template :: <code>e1</code>after the conversation, the script offers the changed description in edit mode; final edits can be done before the conversion is saved. : 2) for SVG files, after the steps as above the SVGcheck script can be started, which continues with the cleanup. :: <code>e2</code> the cleanup script will offer the changed description in edit mode for final editing before it is published ::: after that publishing save, Imge generatkion will run and the success can immediately be seen; ::: of course it will be better to have first a preview, to check whether it is free of errors and looks good ! : 3) after the conversion can directly proceeded to cleanup - for raster images th SVGcheck is not possible. : 4) but for SVG images always the SVGcheck can be performed, which continues with the cleanup. :: The cleanup can be performed for any file, when necessary repeatedly. In the case that a file description is done with COAInformation, the cleanup script compares the author name with an internal user list and provides the parameter <code>|image =</code> with the found key. Modifications can be done by the editing user before the changes are published. The cleanup script can detect whether the image is an element or a raster graphic, and select the appropriate key;<br /> ''but it cannot see'' whether it's an ecclesiastical image, this is evident <u>only for the editing user</u> who has to do the modification. ==== The Module {{M|IgenCoa}} ==== Keys for some national labs are further diffused, e.g. {| class="wikitable" style="text-align:center" |- | g_lab|| coa || <u>c</u>harges || <u>e</u>ccles. || <u>i</u>ndivid. || e<u>x</u>cl. cat |- | {{C|CoA Lab-de|gd}} || d || dc || de || di || dx |- | {{C|CoA Lab-es|ge}} || e || ec || ee || ei || ex |- | {{C|CoA Lab-fr|gf}} || f || fc || fe || fi || fx |}{{Clarify|date=November 2024}} == Parameter reference == === Named and unnamed parameters === Each one of the following parameter codes can be used either ''positional'' to set taggings with extern templates, or they can be used as ''parameter names'' to pass an individual information to the templates.{{Clarify|date=November 2024}} The function is like using the templates with the <code>|t=</code> parameter, either without or with an individual information.<br /> '''Example:''' * (positional) "?" can also be written as "t=<nowiki>{{</nowiki>SVGbug}}" * (named p.) "?=rendering error" can also be written as "<nowiki>t={{SVGbug|description=rendering error}}"</nowiki> '''In general''': when ''subparameters'' exist, their specification makes the main parameter redundant.<br /> As an example, <code>\</code> or <code>\=file name</code> invokes {{T1|Superseded}} resp. {{T1|Bitmap version available}}. * <code>\x=file extension</code> and/or * <code>\r=reason</code> will invoke that template as well. This option is valid for all subparameters. {| class="wikitable" style="margin:.8em 0 0 1.6em" |- ! code !!template !! passed individual information |- | %<br />%r<br />%v<br />%f<br />%i<br />%s || {{tl|Igen/emb}} || <code><nowiki>|1={{{%}}}|2=s|s={{{s|}}}</nowiki></code><br /> <code><nowiki>|s={{{s|}}}|v=r</nowiki></code><br /> <code><nowiki>|s={{{s|}}}|v=v</nowiki></code><br /> <code><nowiki>|1=vf|s={{{s|}}}</nowiki></code><br /> <code><nowiki>|1=i|s={{{s|}}}</nowiki></code><br /> <code><nowiki>|1={{{%s}}}|s={{{s|}}}|switch=yes</nowiki></code> |- | ~ || {{tl|Cdata}} || <code><nowiki>|sub={{{~}}}</nowiki></code> |- | ! || {{tl|BadSVG}} || <code><nowiki>|1={{{!}}}|subcat={{{!s|}}}</nowiki></code> |- | ? || {{tl|Rsvg bug}} || <code><nowiki>|description={{{?}}}|sub={{{?s}}}</nowiki></code> |- | § || {{tl|TracedSVG}} || <code><nowiki>|1={{{§}}}|s={{{s|}}}</nowiki></code> |- | & || {{tl|Igen/amp|QGIS}} || <code><nowiki>|1={{{&}}}|2={{{&&|}}}</nowiki></code> |- | < || {{tl|Igen/ptx}} || <code><nowiki>|sub={{{<}}}|s={{{s|}}}</nowiki></code> |- | ^ || {{tl|QI}} || <code><nowiki>|SVG={{{^}}}</nowiki></code> |- | > || {{tl|SVGvalid}} || <code><nowiki>|opt=<nowiki/></nowiki></code> |- | × || {{tl|SimplSVG}} || <code><nowiki>|3={{{000}}}|4={{{×|}}}|5={{{×d|}}}</nowiki></code> |- | \ || {{tl|Superseded}} || <code><nowiki>|1={{{\}}}|2={{{\r|}}}</nowiki></code> |- | → || {{tl|Convert to SVG}} || <code><nowiki>|1={{{→|{{{w|{{{s|}}}}}}}}}</nowiki></code> |- | ° || {{tl|Easy-border}} || <code><nowiki>|topic={{{°}}}</nowiki></code> |- | ge || {{tl|THV}} || <code><nowiki>|1={{{k|}}}|2={{{s|}}}</nowiki></code> |} === Reference of all parameters === For the setting of parameter #1 and parameter #2 see also [[#Parameter settings]].<br /> The following tables reference all other parameters possibly occurring; * when <code>10=S</code> all the parameters of {{T0|SimplSVG}} or {{T0|HandSVG}} can occur as well; * the many parameters when [[Template:Created with code/doc#Template parameters|source code]] is to display are explained [[Template:Created with code/doc#Template parameters|there]] {| class="wikitable float-right mw-collapsible mw-collapsed" style="margin:.8em 0 0 1.6em" |- ! colspan="3"| {{0|000}} Created with code {{0|000}} |- | '''code''' || '''alias''' || '''description''' |- | c1 || code || the source '''c'''ode |- | d1 || || '''d'''iffusion of category |- | e1 || || '''e'''xplanatory text ahead |- | f1 || style || '''f'''ormat attributes |- | g1 || || '''g'''reater or smaller, and ''type'' of font |- | h1<ref name="s"><br /><u>Suppressable:</u> to suppress the usage of the default value for a parameter "x", use <code>x=-</code> or <code>x=n</code>, or an '''''empty'' value''' like <code>x=</code>.</ref> || title<ref name="s"/> || '''h'''eadline |- | l1 || syntax || '''l'''anguage {{W|mw:Extension:SyntaxHighlight#Supported_languages|code}} |- | n1 || || '''n'''ote afterwards |- | s1<ref name="s"/> || collapse<ref name="s"/> || '''s'''ecluded |- | colspan="3"| two more source codes can be shown; all the parameters<br /> are specified like for the first code, but with "2" resp. "3",<br /> e.g. <code>c2</code> or <code>code2</code> and so on |- | colspan="3"| Formatting parameters |- | +c || || global field name |- | cc || || global category |- | nt || || global headline suppress |- | p1 ||number|| headline "preferred", note ''byte count'' |} ==== Final tags ==== to transclude templates with a 2-byte-code{{Clarify|date=November 2024}} {| class="wikitable sortable float-right mw-collapsible mw-collapsed" style="margin:.8em 0 0 1.6em" |+ table |- ! code !! template !! parm{{Clarify|date=November 2024}} |- | ni || {{T0|NoInkscape}} || 14 |- | nu || {{T0|NoUpdate}} || 21 |- | re || {{T0|Recent}} || 22 |- | up || {{T0|Update needed}}/{{T0|Outdated}} || 23 |- | lh || {{T0|Logo history}} || 24 |- | ci || {{T0|Current}} || 25 |- | dm || {{T0|Disputed map}} || 43 |- | ov || {{T0|Overlay}} || 26 |- | oq || {{T0|Opaque}} || 27 |- | tr || {{T0|Translate}} || 28 |- | in || {{T0|Convert to international}} || 29 |- | ml || {{T0|Convert to multilang}} || 30 |- | wc || {{T0|Convert to wikichart}} || 31 |- | wt || {{T0|Convert to wikitable}} || 32 |- | bl || {{T0|Colour blind}} || 33 |- | ff || {{T0|Fictitious flag}} || 34 |- | rd || {{T0|Redrawn with Text Editor}} || 35 |- | fi || {{T0|Fake sports logo}} || 36 |- | bf || {{T0|Broken file}} || 37 |- | rs || {{T0|Restoration}} || 38 |- | zf || [[User:ZooFari/Template:SVG|zoofari]] || 39 |- | ob || {{T0|out of borders|link=n}} || 41 |- | ar || {{T0|Artifacts}} || 42 |- | cb || {{T0|Coablazon}} || 43 |- | rf || {{T0|COAref}} || 44 |} ---- === Reference list === {| class="wikitable" style="margin:.8em 0 0 1.6em" ! code !! alias !! description |- | %<br />{{0|-}}%r<br />{{0|-}}%m<br />{{0|-}}%M<br />{{0|-}}%v<br />{{0|-}}%n<br />{{0|-}}%f<br />{{0|-}}%u<br />{{0|-}}%i<br />{{0|-}}%I || || the file contains {{C|Translation possible - SVG|translatable}} plain text; specifications are<br />"r" for reduced display, with {{C|Translation possible - SVG|categorizing}}<br />"m" like "r" for modifyable text<br />{{0|00}}"M" like "m" with the [[File:Merge-sub-arrows.svg|[[Template:Convert to multilang]]|16px]] box<br />"v" for reduced display, no <s>{{C|Translation possible - SVG|categorizing}}</s><br />"n" for reduced display/numbers, no <s>{{C|Translation possible - SVG|categorizing}}</s><br />"f" for reduced display in same line, no <s>{{C|Translation possible - SVG|categorizing}}</s>.<br />"u" when the generated text is invisible.<br />"i" recommends <switch> option<br />{{0|00}}"I" like "i" with the [[File:Merge-sub-arrows.svg|[[Template:Convert to multilang]]|16px]] box |- | %s<br />%S<br />%C|| || the file contains multilingual text using the {{C|Translation possible - SVG (switch)|switch}} option<br />and <!-- to be kept simple --> it should ''not'' be maintained with [[Commons:SVG Translate tool|Toolforge]]<br /><code><switch></code> controlled variations, with {{C|Switch-controlled SVG|categorizing}} |- | %a<br />%w|| || to transclude {{tl|Add languages}}<br />for (invisible) textual watermarks, %sc=subcat |- | ~<ref name="s"/><br /><br />{{0}}~k<br />{{0}}~u || || the file is bloated by {{C|Adobe files with CDATA blocks|Adobe PGF CDATA}} blocks<br />(specify <code>~=n</code> to avoid subcategorization with u/U)<br />possible sort key for the category<br />user name for categorizing |- | !<br />{{0}}<br />{{0}}<br />{{0}}<br />{{0}}<br />{{0}}<br />{{0|00}}!c<ref name="s"/><br />{{0|00}}<br />{{0|00}}!s<ref name="s"/><br />{{0|00}}!k<ref name="s"/> || || the file contains embedded {{C|SVG images with embedded raster graphics|raster graphics}}<br />Use <code>!=''a''</code> when it consists <u>only</u> of an embedded raster<br />Use <code>!=''f''</code> when the file is just a {{C|Fake SVG}}<br />Use <code>!=''x''</code> when the file is a {{C|Fake SVG}} with just text<br />Use <code>!=''t''</code> when it is only for {{T0|TopoSVG|''topographic structures''}}<br />Use <code>!=''r''</code> when it is for other {{C|SVG images with required raster graphics|required structures}}<br />other category ("-" for none), either full "[<nowiki/>[.." or user name<br />(<code>!c=</code> has precedence over <code>U=</code> and <code>u=</code>)<br />{{C|SVG images with embedded raster graphics|subcategory}} ("-" for none)<br />a sorting key within the category |- | ?<br />{{0}}?b<br />{{0}}?c<br />{{0}}?f<br />{{0}}?o<br />{{0}}?p<br />{{0}}?r<br />{{0}}?u<br />{{0}}?x<br />{{0|00}}?s<ref name="s"/><br />{{0|00}}?w<br />{{0|00}}?t<br />{{0|00}}?k<br />{{0|00}}?n ||style="vertical-align:top"| ⁇ || the file contains {{C|Pictures showing a librsvg bug|SVG bugs}}<br />{{C|Pictures showing a librsvg bug (feGaussianBlur)|blur bug}}<br />{{C|SVG compatibility issues|compatibility}}<br />{{C|Pictures formerly showing a librsvg bug|former bug}}<br />{{C|Pictures showing a librsvg bug (overwritten with a workaround)|overwritten bug}}<br />specify a <code>phab</code> number (see {{t0|Rsvg bug|parameter 1}})<br />{{C|Pictures showing a librsvg bug (SVG replaced)|replaced bug}}<br />{{C|Pictures showing a librsvg bug (unsolved)|unsolved bug}}<br />flowRoot e<u>x</u>ception<br />[[#o-sub|subcategory]] {{0|000}} (see {{t2|Rsvg bug}} docu)<br />topic<br />tool<br />sortkey<br />file name for {{t2|Technically replaced}} |- | § <br />{{0}}§s || || the file is {{C|SVG images with poorly traced elements|inadequately}} vectorized <br /> possible subcategorizing |- | &<br />{{0}}&&<br />{{0}}&c<ref name="s"/><br />{{0}}&k<br />{{0}}&<code>l</code><ref name="s"/><br />{{0}}&s<ref name="s"/> || || the file generation was participated by a ''with_tool''<br />&&=''main_tool'' (default: Inkscape)<br />&c to specify, or "-" suppress, the categorizing<br />&k to specify a sort key<br />&l to specify, or "-" suppress, a logo<br />&s to specify a [[#o-sub|subcategory]] |- | <<br /><h <br /><i <br /><x <br /><v <br /><n <br /><l <br />{{0}}<s<br />{{0}}<c<ref name="s"/> || || the text has been converted to {{C|Path text SVG|path}}s; specifications are<br />"h" for highlighting (also with <code><s=h</code>)<br />"i" to specify that internationalization is required<br />"x" for tagging with {{T0|Should be text}}<br />"v" for reduced text, no <s>{{C|Path text SVG|categorizing}}</s>.<br />only number(s) path text, no <s>{{C|Path text SVG|categorizing}}</s>.<br />due to Librsvg restrictions, no <s>{{C|Path text SVG|categorizing}}</s><br /> possible subcategorizing<br />no categorizing |- | ^<br />{{0}}^s <br />{{0}}^t <br />{{0}}^p <br />{{0}}^c <br />{{0}}^w <br />{{0}}^b || ||type: {{C|Quality images|Quality image}} and/or {{C|Valued images|Valued image}}: see {{T0|Igen/qui}}.<br />scope <br />timestamp <br />page <br />category (prefixed by 'Valued image of ') <br />topic <br />by |- | ><br />{{0}}>c<ref name="s"/> || || the file size is too {{C|Large SVG files|large}} to display the source code<br /><code>&#62;c=-</code> to suppress categorization |- | ×<br />{{0}}×c<ref name="s"/><br />{{0}}×d<br />{{0}}×k<br />{{0}}×n<ref name="s"/><br />{{0}}×s<br />{{0}}×t<ref name="s"/><br />{{0}}×× || || the file is extremely {{C|SVG files to be drawn by hand|simple}} and easy to draw manually<br />or ×=- to suppress categorization<br />display size for the example, in pixel<br />key<br />but it is nowhere used – not worth any effort !<br />subc<br />topic for subcategorizing, e.g. m, c, f, ...<br />flag with {{T|UseXML}} &nbsp; (see {{C|Diagonal bisection square flags (plain)|examples}}) |- | $<br />{{0}}$c<ref name="s"/><br />{{0}}$f<ref name="s"/><br />{{0}}$l<ref name="s"/><br />{{0}}$s<ref name="s"/><br />{{0}}$m<br />{{0}}$u<br />{{0}}$w ||{{0}}<br />{{0|r}}<s>cc</s><ref name="s"/><br />{{0|r}}cf<ref name="s"/><br />{{0|r}}cl<ref name="s"/><br />{{0|r}}cs<ref name="s"/><br />{{0|r}}cm<br />{{0|r}}cu<br />{{0}} || the file was {{C|uploaded with Commonist}}<br />Commonist category, e.g. <code><nowiki>[[Category:Othercat| ]]</nowiki></code><br />Commonist linefeed_before, e.g. <code>$f=br</code><br />Commonist logo, e.g. <code><nowiki>[[File:xyz.svg|20px]]</nowiki></code><br />Commonist subcategory<br />Commonist "more" text, e.g. <code>&amp;nbsp; explanation</code><br />Commonist user, e.g. <code><nowiki>{{U|user}}</nowiki></code><br />to display a topic for Commonist |- | +<br />{{0|-}}+c|| || to generate the parameter <code>Name=</code> for {{t2|Information field}}<br />field name for {{T0|Created with code}} |- | – || || to generate a final {{t2|clr|clear-linefeed}} |- | \+<br />{{0|-}}\+r<br />{{0|-}}\+t<ref name="s"/><br />{{0|-}}\+u<br />{{0|-}}\+l|| <br />\r<br />\t<ref name="s"/><br />\u<br />\l || this file {{lc:{{t0|supersedes}}}} another one<br />the ''reason'' for superseding<br />topic (default: "w", "s" <small>when not suppressed</small>)<br />option: by user<br />option: <code>lang=</code> |- | \-<br />{{0}}<br />{{0|-}}\-r<br />{{0|-}}\-x<br />{{0|-}}\-t<br />{{0|-}}\-l || \<br />{{0}}<br />\r<br />\x<br />\t<br />\l || the file is {{lc:{{t0|superseded}}}} by another one,<br />or a {{T0|bitmap version}} exists for an SVG<br />the ''reason'' for being superseded<br />an extension (when not <code>.png</code>)<br />topic<br />option: <code>lang=</code> |- | \\<br />{{0|-}}\\r<br />{{0|-}}\\q<br />{{0|-}}\\l || <br />\r<br />\q<br />\l || A {{T0|Vector version available|vector version is available}} to that raster image<br />reason text<br />quality tag (s, i)<br />option: <code>lang=</code> |- | \# || || insert {{tl|PDF version available}}. |- | →<br />⇒ || || {{Tle|T=Convert to SVG|→}}<br />{{Tle|T=Convert to SVG|⇒|simple}} |- | ←<br />{{0|-}}←s<br />{{0|-}}←t|| <!-- <s>ni</s> --> || {{Tl|NoInkscape}}: <code>←</code>, <code>←=+</code> , <code>←=-</code> or <code>←=tt</code><br />a style option for {{T0|NoInkscape}}, e.g. <code>←s=0</code>/h /0h <br />text for a topic in NoInkscape |- | ° || || {{Tle|T=Easy-border|p1=topic|w/s|p2=pixel|°}} |- | — || || (U+2014) to categorize {{C|Unused SVG images}} |- | bf<br />{{0}}bfc || || description for {{tl|Broken file}}<br />category |- | {{0|.}}ff || || for {{T0|Fictitious flag}} |- | {{0|.}}bl || || for {{T0|Colorblind|+}} |- | by || U || creates a link to a user name; see {{t0|by|+}} |- | c<ref name="s"/> || cat<ref name="s"/> || change or suppress (<code>c=-</code>) category |- | cat2 || || name of an additional category that should be used |- | cb || || Color box, see {{T0|Igen/cbx}} and [[Template:File generation description/doc#Colorboxes|colorboxes]] |- | cc<ref name="s"/> || || suppress automatic [[Template:Created_with_code/doc#Categorizing|categorization]] with ' code' |- | ci<br />{{0|-}}ci2 || || the {{T|Current|+}} interval, for frequent updates<br />possible 2{{exp|nd}} parameter |- | cni<ref name="s"/> || || only for "Im": category text (or suppression: "-" for none)<br />replaces <small>{{C|SVG created with Inkscape:Important}}</small> |- | ct || c_text || category text, replaces "created with" |- | C<br />{{0|-}}Ct<br />{{0|-}}Cc<ref name="s"/><br />{{0|-}}Cl<br />{{0|-}}Cf<ref name="s"/><br />{{0|-}}C+<ref name="s"/> <br />{{0|-}}Css<ref name="s"/> ||<br />{{0|-}}<br />{{0|-}}<br />{{0|-}}<br />{{0|-}}<br />c+<ref name="s"/> <br />ss<ref name="s"/> || {{T0|Tincture}}s<br />a color for the tincture-"tc" parameter<br />a category for the tincture-"cat" parameter ("-" for none)<br />other label than "Tincture"<br />Cf=n or Cf= for no field name<br />"+" for field name (=default)<br /><code>Css=BY</code> for [[Template talk:Tincture/box|Bavarian]] or other shades |- | cw || || the "[[#cw_par|Created with]]" parameter, for logo/cat/tool |- | e || err || error count ≥ 0, instead of definition with parameter# 2 |- | colspan="2" | editor, editoff || parameters for Retouched picture ([[#RetP|see <code>r</code>]]) |- | f<br />{{0|-}}ft<br />{{0|-}}fc || || for fictional items, see {{t0|Igen/fif}}<br />for other topic<br />for other category |- | {{0|.}}ff || || for {{T0|Fictitious flag}} |- | fn || || field name for {{T0|Information field}}, instead of the "+" |- | fw<br />{{0|-}}fwc<br />{{0|-}}fwe<br />{{0|-}}fwo<br />{{0|-}}fwl<br />{{0|-}}fwt<br />{{0|-}}fws || || {{T0|Fotowerkstatt|}}, with optional parameters (see [[Template:Fotowerkstatt/doc#Igen|description]])<br />{{0|-}}changes<br />{{0|-}}editor<br />{{0|-}}orig<br />{{0|-}}orig-lang<br />{{0|-}}topic<br />{{0|-}}style |- | g<br />{{0|-}}gb<br />{{0|-}}gc<br />{{0|-}}gd<br />{{0|-}}ge<br />{{0|-}}gf<br />{{0|-}}gH<br />{{0|-}}gi<br />{{0|-}}gj<br />{{0|-}}gP<br />{{0|-}}gr<br />{{0|-}}gs<br />{{0|-}}gt<br />{{0|-}}gw<br />g=<code>xx</code><br /><br />{{0|-}}gc=<br />{{0|-}}gk=<br />{{0|-}}gs= | style="vertical-align:top"| <code>gl</code> || {{t0|Graphic Lab/statistics|Graphic Lab}}; g or gl for "{{C|Graphic Lab-en|Graphic Lab-'''en'''}}"<br />or <code>g=bn</code> for "{{C|Graphic Lab-bn}}"<br />or <code>g=c{{color|#aaa|m}}</code> for "{{C|Graphic Lab-Commons}}"<br />or <code>g=de</code> for "{{C|Graphic Lab-de}}"<br />or <code>g=es</code> for "{{C|Graphic Lab-es}}"<br />or <code>g=fr</code> for "{{C|Graphic Lab-fr}}"<br />or <code>g=it</code> for "{{C|Graphic Lab-ch}}"<br />or <code>g=it</code> for "{{C|Graphic Lab-it}}"<br />or <code>g=he</code> for "{{C|Graphic Lab-he}}"<br />or <code>g=pl</code> for "{{C|Graphic Lab-pl}}"<br />or <code>g=ru</code> for "{{C|Graphic Lab-ru}}"<br />or <code>g=sv</code> for "{{C|Graphic Lab-sv}}"<br />or <code>g=tr</code> for "{{C|Graphic Lab-tr}}"<br />or <code>g=w{{color|#aaa|s}}</code> for "{{C|Graphic workshop}}"<br />{{0|00l}}for other "<code>Graphic Lab-xx</code>", if exists<br />{{0}}(use g='''F'''i for "{{C|Graphic Lab-fi}}")<br />a [[#o-sub|subcategory]] for an above Graphic Lab<br />a category sorting key<br />[[Template:Graphic Lab/doc#style|style]] for {{T0|Graphic Lab}}, either nl (new line) or sx (small text) |- | {{0|-}}in || || for {{T0|Convert to international}} |- | k<ref name="s"/><br />K || key<br />{{0}} || sort key for category (and for {{t0|THV}})<br />upper case "K" with space |- | l || L || upload info, or categorization info |- |{{0|.}}lh || || for {{T|Logo history|+}} |- | m<br />M || more<br />{{0}} || additional text (use <code>m=</code> to suppress the final dot)<br />upper case "M" with space |- | {{0|.}}ml || || for {{T0|Convert to multilang}} |- | msg || || additional message box(es) |- | n<br />N || name<br />{{0}} || tool name of <code>Other tool</code> / <code>Unknown SVG facility</code><br />upper case "N" with space |- | {{0|-}}nu || || for {{T0|NoUpdate|+}} |- | o || opt || W3C validator option (see vo / vopt) |- | {{0|-}}oq || || for {{T0|Opaque|+}} |- | {{0|-}}ov || || for {{T0|Overlay|+}} |- | colspan="2" | orig, origoff || parameters for Retouched picture ([[#RetP|see <code>r</code>]]) |- | p || || preceding text |- | pu || || previous user name (for {{T0|SimplSVG}}) |- | r<ref name="s"/><br />R<br /><br /><br /><br /> || || {{t2|Retouched picture}} with parameters{{Anchor|RetP}}<br /><small>(upper case "R" for an advancing {{T0|clr|clear}} is not necessary)</small> r/R= modifications (<code>r=-</code> if modifications unspecified)<br />editor= / editoff=<br />orig= / origoff= |- | {{0|.}}rd || || for {{T0|Redrawn with Text Editor|Redrawn|+}} with Text Editor |- | {{0|.}}re || || for {{T0|Recent|+}} |- | {{0|.}}rf || || for {{T0|COAref|+}} |- | s<br />S<br />s:, su:<br />S:<br />s- || sub<ref name="s"/><br />{{0}}<br />sub:{{0}}<br />Sub:<br />sub- || [[#Subcategory specification|subcategory]]; lower case "s" with expand option<br />upper case "S" with prefixed space "␢"<br /><code>s:</code> to be prefixed with a semicolon ":"<br /><code>S:</code> prefix with semicolon ''and'' space ":␢"<br /><code>s-</code> to be prefixed with a hyphen/minus "-" |- | S- || S || to use {{T0|SimplSVG|+}} |- | S* || || to use {{tl|Igen/sni|sni}} |- | S+ || || to use {{tl|Igen/sni|sni}}, with parameter %p |- | S& || || to use {{tl|Redrawn with Text Editor|rd}} & {{tl|Igen/sni|sni}} |- | sa<br />sb || || '''s'''ize ('''a'''ctual) for [[#Template SimplSVG|template SimplSVG]]<br />'''s'''ize ('''b'''efore) |- | sc || || <code>sc=u</code> to prevent the lowercasing of the 1{{exp|st}} <code>sub</code>-character |- | sd || || subcategory differentiation |- | subcat<ref name="s"/> || !s<ref name="s"/> || ''topic'' for {{C|SVG images with embedded raster graphics:Topics}} |- | ss<ref name="s"/> || || ''see'' <code>Css</code> |- | colspan="2" | source || additional text, currently only used by {{T0|Created with perl|perl}} and {{T0|Created with ItB|ItB}} |- | t<br />T ||<br />T1…T7 || trailing text<br />upper case "T" with an advancing {{T0|clr|clear}} |- | {{0|-}}tr || || for {{T0|Translate|+}} |- | tw<br />{{0}}t<code>l</code><ref name="s"/><br />{{0}}tc<ref name="s"/><br />{{0}}tu<ref name="s"/><br />{{0}}tx<ref name="s"/> || {{0}}<br />{{0}}<br />{{0}} || specify a tool (camera) for {{t2|Taken with}}<br />logo or "-"<br />category or "-"<br />username or "-"<br />text or "-" |- | u<br />U || user<br />{{0}}by || user name (or user name link, e.g. <nowiki>{{Ut|user}}</nowiki>)<br />uppercase "{{T0|U}}" creates the user name link |- | {{0|.}}up || || for {{T0|Update|+}} = {{T0|Outdated}} |- | vc<br />vo<br />vt<br />vs<ref name="s"/><br />vw || vcat<br />vopt<br />vtxt<br />vstyle<ref name="s"/><br />vwidth || validator categorization<br />validator option (also o or opt)<br />validator more-text<br />[[#vstyle|validator style]] option, mainly for {{T0|SimplSVG}}<br />validator width (not used) |- | vsub<ref name="s"/><br />Vs || || subcategory of Text editor ("-" to suppress subcategorizing)<br />"Vs" like "vsub" with space |- | v<ref name="s"/><br />V || vt, vtxt<br />{{0}} ||additional validation text<br />upper case "V" with space |- | w<ref name="s"/><br />{{0}} || what<ref name="s"/><br />topic<ref name="s"/> || define (if other than <code>s</code>) or suppress (with <code>w=-</code>)<br />the code for the {{t0|Igen/top|topic}} |- | {{0|.}}wc || || for {{T0|Convert to wikichart}} |- | {{0|.}}wt || || for {{T0|Convert to wikitable}} |- style="background:#EEF" |colspan="3"| more parameters – mainly for the {{C|Created with ... templates}} (raster graphics) |- |colspan="2"|par1|| to specify e.g. a number |- |colspan="2"|mode|| e.g. the stacking mode |- |colspan="2"|type, item, par2|| not yet used |} <references/> <includeonly>[[Category:Image generation templates| ]]{{ifsandbox|[[Category:Sandbox templates]] |[[Category:Formatting templates|{{PAGENAME}}]]{{Protected}} [[Category:SVG created with ... templates|<!-- intentional --> <!-- space -->{{PAGENAME}}]] }}</includeonly> 6dhjlccwaiqevja0uyypufl9jdec4j3 10972 10971 2026-08-25T23:38:39Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Image_generation/doc]] 10971 wikitext text/x-wiki <!-- {{redirects|Igen}} -->{{Multilingual description |en = This template generates a description about an SVG file's creation and properties, and adds appropriate categories. |de = Diese Vorlage dient zur Generierung der Beschreibung, wie eine SVG-Datei erzeugt worden ist und welche Eigenschaften ihr zukommen;<br> {{0|WWW}}es werden die entsprechenden Kategorisierungen vorgenommen — diese können zahlreich sein. |es = Esta plantilla genera una descripción de la creación y propiedades de un archivo SVG, añadiendo las categorías apropiadas. |fr = Ce modèle génère une description sur la création d'une image et ses propriétés, et ajoute aux catégories (potentiellement nombreuses) appropriées. |ja = このテンプレートは、SVGファイルの作成およびプロパティに関する解説を生成し、適切なカテゴリを追加します。 |it = Questo template genera una descrizione relativa alla creazione di un file SVG e alle sue proprietà;<br />{{0|WWW}}vengono associate una o più categorie. |nl = Dit sjabloon genereert een beschrijving over de aanmaak en eigenschappen van een SVG-bestand, en voegt de juiste categorieën toe. }} ---- {{Heavily used template|edit=✔|3=✔}} <!-- edit sandbox --> {{Use sandbox|testcase=&#32;}}<!-- ================================================================================================== BEGIN OF TEMPLATE BOX ==================================================================================================--> {{TemplateBox <!------------------------------------------------------------------------------------------------ TEMPLATE BOX - BEGIN OF parameter section --------------------------------------------------------------------------------------------------> |1=1 |1d= {{Mbox |text = The "tool" this refers to can be either the tool which generated the current version of this file, or a different tool which generated a previous version of the same image.<!-- Chealer 2024-10-21 --> |type = content }} Name of the tool (case sensitive) to get the template name "Created with <nowiki>{{{1}}}</nowiki>" :: or Abbreviation of the tool name, case-insensitive: * <code>A</code> for {{tl|Created with Adobe Illustrator|Adobe Illustrator}} * <code>AH</code> for {{tl|Created with Adobe-hand|Adobe-hand}} * <code>B</code> for {{tl|Created with BKchem|BKchem}} * <code>C</code> for {{tl|Created with ChemDraw|ChemDraw}} * <code>D</code> for {{tl|Created with CorelDRAW|Corel'''D'''RAW}} * <code>E</code> for {{tl|Created with ElCompLib|ElCompLib}} * <code>F</code> for {{tl|Created with Fig2SVG|Fig2SVG}} * <code>G</code> for {{tl|Created with Gnuplot|Gnuplot}} * <code>H</code> for {{tl|Created with Inkscape-hand|Inkscape-hand}} * <code>I</code> for {{tl|Created with Inkscape|Inkscape}} &nbsp; {{color|#777|(default tool)}} * <code>J</code> for {{tl|Created with JFreeChart|JFreeChart}} * <code>L</code> for {{tl|Created with LibreOffice|LibreOffice}} * <code>M</code> for {{tl|Created with MetaPost|MetaPost}} * <code>O</code> for {{tl|Created with Other tool|Other tool}} * <code>P</code> for {{tl|Created with Pstoedit|Pstoedit}} * <code>Q</code> for {{tl|Created with QGIS|QGIS}} * <code>R</code> for {{tl|Created with R|R}} * <code>S</code> for {{tl|Created with Sodipodi|Sodipodi}} * <code>T</code> for {{tl|Created with Text Editor|Text Editor}} ''via the adapter'' {{tl|HandSVG}} * <code>U</code> for {{tl|Created with Unknown SVG facility|Unknown tool}} * <code>V</code> for {{tl|Created with Vim|Vim}} * <code>VM</code> for {{tl|Created with Vector Magic|Vector Magic}} * <code>W</code> for {{tl|Created with Winplot|Winplot}} * <code>X</code> for {{tl|Extracted with Inkscape}} '''Note''': "<code>A$</code>" abbreviates for "{{T0|Adobe and Commonist}}" : {{0|ww}}"<code>Ac</code>" abbreviates for "{{T0|Created with Vectornator|Adobe and Vectornator}}" : {{0|ww}}"<code>IA</code>" abbreviates for the mixture {{C|SVG created with Inkscape and Adobe Illustrator|Inkscape & Adobe}} : {{0|ww}}"<code>Ih</code>" abbreviates <code><nowiki>{{Inkscape-hand}}</nowiki></code> : {{0|ww}}"<code>IH</code>" abbreviates <code><nowiki>{{Inkscape-hand}}</nowiki> without</code> {{t|HandSVG}} : {{0|ww}}"<code>II</code>" abbreviates for "{{T0|Inkscape and Heraldicon|link=n}}" : {{0|ww}}"<code>Im</code>" abbreviates <code><nowiki>{{Inkscape|…|IMPORTANT=yes}}</nowiki></code> : {{0|ww}}"<code>Ic</code>" abbreviates <code><nowiki>{{Inkscape}}</nowiki> and {{Plainlinks|https://github.com/RazrFalcon/svgcleaner|SVG cleaner}} postprocessing</code> : {{0|ww}}"<code>Io</code>" abbreviates <code><nowiki>{{Inkscape}}</nowiki> and {{Plainlinks|https://jakearchibald.github.io/svgomg/|SVGO}} postprocessing</code> : {{0|ww}}"<code>Is</code>" abbreviates <code><nowiki>{{Inkscape}}</nowiki> and {{Plainlinks|https://svgoptimizer.com/|svgoptimizer}} postprocessing</code> : {{0|ww}}"<code>Iz</code>" abbreviates <code><nowiki>{{Inkscape|…|optimized}}</nowiki></code> (scour) : {{0|ww}}"<code>I$</code>" abbreviates for "{{T0|Inkscape and Commonist}}" : {{0|ww}}"<code>ItB</code>" abbreviates <code><nowiki>{{</nowiki>'''I'''nkscape '''t'''o '''B'''itmap<nowiki>}}</nowiki></code> : {{0|ww}}"<code>S-</code>" abbreviates for "{{T0|SimplSVG|Simplified SVG}}", drawn with Text Editor |1def=<code>Inkscape</code> <!-- A$ --> |1stat=optional- |2=2 |2d=''either'' character "v" ('''v'''alid) (if absent, <code>v</code> is assumed with SVG files) : ''or'' &nbsp; the numeric error count from W3C validation ("0" = "v", "-1" = uncheckable) : ''or'' &nbsp; character "s" for SVG files, to suppress the validity box (but with error count <code>e=</code>){{Clarify|date=November 2024}} ''See'' the detailed information for [[#Parameter 2|parameter #2]] and [[#Suppress the validity box|suppressing validity information]] |2def=<code>v</code> |2stat=optional- |3=3<ref name="a">Every one of the signs ($, +, -) or parameters (%, ~, !, ?, §, &, <, ^, >, ×, \, →, ⇒, °, <code>Ɨ</code>) can be passed in any sequence, each as an argument for one of the unnamed parameters #1 through #9.{{Clarify|date=October 2024}}</ref> |3d=necessary because the template cannot determine from where it is transcluded{{Clarify|date=November 2024|Yet, it's marked as optional. Chealer 2024-11-01}}: * a "-" (minus sign) to terminate the left-floating with {{tl|clr}}<br />''<small>Can be necessary if the template is used '''outside''' the {{tl|Information}} box</small>'' * a "+" (plus sign) when used in <code><nowiki>|Other fields</nowiki></code> or <code><nowiki>|Other fields 1</nowiki></code>. In this case parameter <code>fn=</code> may specify a <code>field name</code> for {{tl|Information field}}. {{Mbox |text = When a <code>field name</code> is specified, value <code>+</code> is implied, so that this parameter can be omitted. Otherwise, the <code>field name</code> "development" is nationalized by {{tl|I18n/COA}}. }} |3stat=optional- |4=4<ref name="a" /> |4d=a "$" (dollar sign) when "[[File:Commonist2.svg|14px]] Uploaded with Commonist" should be added. In this case * parameter <code>$u=</code> may specify a user, e.g. <nowiki>{{U|user}}</nowiki> * parameter <code>$l=</code> may specify a logo (☭){{Clarify|date=November 2024}}, e.g. <nowiki>[[File:xyz.svg|20px]]</nowiki><ref name="c">This parameter allows suppression with the parameter value "-" (or just the parameter without any value, e.g. <code>cat=</code>){{Clarify|date=November 2024}}</ref> * parameter <code>$m=</code> may specify a more, e.g. &amp;nbsp; explanation * parameter <code>$c=</code> may specify a category, e.g. <nowiki>[[Category:Othercat| ]]</nowiki><ref name="c" /> * parameter <code>$s=</code> may specify a subcategory, e.g. <code>:diffusion</code><ref name="c" /> * parameter <code>$w=</code> may specify a [[Template:Igen/sub|topic]], e.g. <code>m</code> or <code>projection</code> * parameter <code>$f=</code> may specify a linefeed before, e.g. <code><nowiki>br</nowiki></code>, <code>clr (default: <code>none</code></code><ref name="c" />) If any one of these seven parameters is specified the "<code>$</code>" is implied and can be omitted;<br /> for <code>$l</code>, <code>$c</code>, <code>$s</code> or <code>$f</code> it is enough if the suppression is defined with an empty value e.g. <code>$c=</code>{{Clarify|date=November 2024}} |4stat=optional- |5=5<ref name="a" /><ref>Every one of the eight signs can be used either as a positional parameter, or as a named parameter passing the value to the corresponding template; see [[#Named and unnamed parameters|Named and unnamed parameters]].</ref> |5d=For additional parametrizing see [[#Named and unnamed parameters|individual information]] * a "%" (percent sign) or "%v" to insert the {{tl|Igen/emb|Translate}} tag, "%s" when option [[Commons:Translation possible/Learn more#Multiple translations within one SVG file|<switch>]]. * a "~" (tilde) to insert the {{tl|Cdata|pgf-Cdata}} tag. * an "<code>!</code>" (exclamation mark) to insert the {{tl|BadSVG}} tag. * a "?" (question mark) to insert the {{tl|Rsvg bug}} tag. * a "§" ("section" sign) to insert the {{tl|TracedSVG}} tag. * an "&" (ampersand) to insert the {{tl|Igen/amp|QGIS}} tag. * a "<" ("less" sign) to insert the {{tl|Igen/ptx|Path text SVG}} tag. * a "<code>^</code>" {{anchor|circum}}(circumflex sign) to insert the {{tl|Quality image}} tag. * a ">" ("greater" sign) to inhibit for {{C|Large SVG files|large SVG}} the "show source" validator option. * a "<code>×</code>" (multiplication sign) to insert the {{tl|SimplSVG|draw by hand}} tag. * a "<code>\-</code>" (backslash&minus) or "\" to insert the {{tl|Superseded}} tag, or : a "<code>\+</code>" (backslash&plus) to insert the {{tl|Supersedes}} tag', or : a "<code>\\</code>" (backslash twice) to insert the {{tl|VVA}} tag. : a "<code>\#</code>" (backslash&number) to insert {{tl|PDF version available}}. * an "→" (arrow right) or "⇒" to insert the {{tl|Convert to SVG}} tag. * an "←" (arrow left) to insert the {{tl|NoInkscape}} tag. * a "<code>°</code>" (degree sign) to insert the {{tl|Easy border}} tag. |5stat=optional-: <!-- |6=6<ref name="a" /> |7=7<ref name="a" /> |8=8<ref name="a" /> |8d=(''free for future expansions'') |8stat=optional- --> |10=e |10aliases=err |10label='''e'''rror count |10d=''when invalid SVG'': error count from W3C validation ("0" for ''valid'', "-1" for ''uncheckable''){{Clarify|date=November 2024}}<br /> (has precedence over any argument of parameter 2)<br /> '''Note''': when uncheckability is specified, <code>Other tool</code> is always implied. |10stat=optional- |15=m |15aliases=more |15label='''m'''ore text |15d=optional additional text (use <code>M=</code> to precede that text with a space{{Clarify|date=November 2024}}) |15def=<code>.</code> |15stat=optional- |20=c<ref name="c" /> |20aliases=cat |20label='''c'''ategories |20d=category/categories, complete with brackets (and sorting), or without; or suppress with <code>c=-</code><br /> plain text ''without'' brackets becomes completed with <code><nowiki>[[Category: ]]</nowiki></code> |20stat=optional- |25=C |25label='''C'''olor |25d=the {{t0|tincture|tincture}} can be defined |25stat=optional- |26=cb |26label='''c'''olor '''b'''oxes |26d=for more details see section [[#Color boxes]] |26stat=optional- |30=s<ref name="c" />{{Anchor|subcat}} |30aliases=sub |30label='''s'''ubcategory |30d=suffix to the category name for diffusion but also an information for subtemplates * <code>sub=</code> is used only for category diffusion (use <code>sub=-</code> for no diffusion){{Clarify|date=November 2024}} * <code>S=</code> &nbsp;(upper case) like <code>sub=</code>, with the insertion of an inbetween space * <code>s:=</code>, <code>s-=</code> (lower case) with insertions, see [[#Subcat & topic]] * <code>s=</code> &nbsp;(lower case) can be used instead, or ''in addition'' to all the above; : With a [[Template_talk:Image_generation/Archive_1#TopTb|''one-letter-code'']] for <code>s=</code> the {{T0|Igen/top|topic}}s-subcategory may be [[Template:Igen/sub|defined]], as : &#58;CoA, :Diagrams, :Flags, :Icons, :Logos, :Maps, :Signs, :Unicode, :Trigonometry, : When <code>sub</code>/<code>S</code> and <code>s</code> are both defined, <code>sub</code>/<code>S</code> is used for subcategorizing, : and <code>s</code> is used (like <code>w</code>) as an [[#Subcategory specification|information]] and ''[[Template:Igen/sub|topic]]'' for several subtemplates <span style="background:#FFD;border:1px #B40 solid;padding:0 6px;">Select the best fitting subcategory, or create an appropriate new one</span> |30stat=optional- |35=k |35aliases=key |35label=sort '''k'''ey |35d=key for sorting within the category (use <code>K=</code> for the insertion of a preceding space)<br /> <code>key</code> is used e.g. for category sorting, and in {{T0|HandSVG}} for subcategorizing |35stat=optional- |40=v |40aliases=vt/vtxt |40label='''v'''alid, invalid |40d=additional text for Valid/Invalid SVG box (use <code>V=</code> to precede that text with a space){{Clarify|date=November 2024}} |40stat=optional- |45=o |45aliases=opt |45label='''o'''ption |45d=to set or overwrite the ''display source'' option for ValidSVG/InvalidSVG{{Clarify|date=November 2024}} |45stat=optional- |50=n |50aliases=name |50label=tool '''n'''ame |50d=a tool name or a description for {{tl|Created with other tool}}{{Clarify|date=November 2024}}<br /> '''Note''': when <code>n[ame]</code> is specified, <code>Other tool</code> is implied and parameter 1 can be omitted |50stat=optional- |55=u |55aliases=user/U/by |55label='''u'''ser |55d=user name, or other text. May be coded e.g. with {{tl|U}}, {{tl|Uc}}, {{tl|Ud}}, {{tl|Ut}}, …<br /> Use <code>U=</code> to create the user link: <code>U=xyz</code> ⇒ <code><nowiki>{{U|xyz}}</nowiki></code>.{{Clarify|date=November 2024}}<br /> '''<code>by</code>''' creates a user link. May be coded with "[" or "{" (see {{Tl|By}}) |55stat=optional- |60=code<br>code2<br>code3 |60aliases=c1…c3 |60label=code display |60d=display of the [[Template:Created with code/doc#Template parameters|source code]] used for generation, e.g. the SVG code. In this case * parameter <code>l1=</code> or <code>syntax=</code> may specify or change the [[mw:Extension:SyntaxHighlight GeSHi#Supported languages|code]] '''l'''anguage (syntax) * parameter <code>h1=</code> or <code>title=</code> may specify another '''h'''eadline, or suppress "<code>none</code>" * parameter <code>f1=</code> or <code>format=</code> may specify '''f'''ormat style options * parameter <code>s1=</code> or <code>collapse=</code> may specify a title text for collapsability headline * parameter <code>d1=</code> for category diffusion * parameter <code>e1=</code> may specify '''e'''xplanatory text preceding the code block * parameter <code>g1=</code> for font size * parameter <code>n1=</code> for a trailing '''n'''ote below of the code block : More parameters with suffices "2" and "3" can be used for more codes: :* <code>c2=</code>, <code>l2=</code> or <code>code2</code> with <code>syntax2</code>, <code>title2</code>, <code>format2</code> etc. :* <code>c3=</code>, <code>l3=</code> or <code>code3</code> with <code>syntax3</code>, <code>title3</code>, <code>format3</code> and so on |60stat=optional- |65=vsub<ref name="c"/> |65aliases=Vs |65label='''vs'''ub |65d=category diffusion <code>of Text editor</code> for e.g. HandSVG, Inkscape-Hand, Adobe-hand;<br /> Use <code>Vs=</code> for an inbetween space; set <code>vsub=-</code> to suppress the category diffusion. |65def=<code>s</code> |65stat=optional- |70=vs<ref name="c" /> |70aliases=vstyle |70label='''vs'''tyle |70d=[[#vstyle|vstyle option]]: <code>vs=</code> or <code>vs=fl</code> for float-left (= same line){{Clarify|date=November 2024}} |70def='''<code>-</code>''' |70stat=optional- |75=p |75aliases=P |75label='''p'''receding |75d=additional '''p'''receding text; to be displayed ''left'' or ''above'' of the boxes |75stat=optional- |80=t |80aliases=T |80label='''t'''railing text |80d={{anchor|trailtext}}additional '''t'''railing text; is displayed ''right'' or ''below'' of the boxes<br />If tags or secondary tools should appear in another sequence, use * t2 (before Commonist} * t3 (after Commonist, before <code>code</code>) * t4 (immediately after <code>code</code>) <!-- – use uppercase "T " to precede with <code><nowiki><br></nowiki></code> --> * t5 (before "Quality image") * t6 (after QI, <small>the last ''advantage'' tag, before all the ''disadvantage'' tags</small>) The same with an uppercase <code>T</code> cares for a newline before |80stat=optional- |85=g |85aliases=gl |85label='''g'''raphic lab |85d=specify the national {{Tl|Graphic Lab}} with the {{w|List of ISO 639-1 codes|ISO 639-1}} language code<br /> (uses the [[#subcat|topics-subcategory]]), e.g. <code>gl=it&#x7C;s=m</code> for the {{tl|Laboratorio grafico mappa}}<br /> Abbreviations: "gd" for "g=de", "ge" for "g=es", "gf" for "g=fr", "gi" for "g=it", but "gl" for "g=en"<br /> Together with <code>s=c/f/m</code> the national [[Commons:WikiProject Heraldry|heraldry project]] is achieved (e.g. {{T0|Projekt Wappen|de}}, {{T0|THV|es}}, {{T0|Projet Blasons|fr}}).<br /> The parameters <code>gs=</code> may be used to specify the <code>style</code>{{Clarify|date=November 2024}}, <code>gc=</code> for [[#o-sub|subcategorizing]].<br /> See {{T0|Graphic Lab/statistics}} for more information. |85stat=optional- |90=r<ref name="c" /> |90label='''r'''etouched |90d=specify the {{tl|Retouched picture}}, with parameters r= <small>and</small> editor= editoff= orig= origoff=<br /> See [[#RetP|Retouched picture]] for more information. |90stat=optional- |95=w<ref name="c" /> |95aliases=what/topic<ref name="c" /> |95label='''w'''hat (topic) |95d=With <code>w=</code> the [[Template talk:Igen/top|topic]] can be altered or suppressed<br /> See also the [[#Subcategory specification|subcategories description]] |95def=<code>s</code> |95stat=optional- <!------------------------------------------------------------------------------------------------ TEMPLATE BOX - END OF parameter section --------------------------------------------------------------------------------------------------> |name={{BASEPAGENAME}} |desc={{Non-native-en}} {{Lua|Module:Igenmod}}Short notation for the {{C|SVG created with ... templates}} {{nobold|and the non-SVG}} {{C|Created with ... templates}}, {{nobold|helps to display}} <div style="float:left;padding-right:2em;width:30%">{{nobold|__TOC__}}</div> * {{nobold|W3C validation}} * {{nobold|SVG tool}} * <small>optional: </small> SVG code <small>used for creation</small><br /><small>{{0|WWWWw}}{{nobold|and ''a great number of [[#Other tags|other taggings]]''}}</small> {{nobold|formatted ''within one single line''.}}<br /> Categorisings {{nobold|occur depending on tool name, validation and other tags.}} {{nobold|Some parameters/tags are ''only'' for SVG files, a few others only for raster images.}} In case of difficulties {{nobold|using this template, its tag codes and this documentation, you may use {{U|User:Aaron Liu/SvgCheck-Minus.js|the simpleSVGcheck utility script}}, or the easier {{T|File generation description|incl=3}}. }} {{nobold|Parameters for {{Tlf|File generation description}} can be e.g.}} <pre style="font-weight:normal"> |other fields = {{ File generation description |SVG tool = ChemDraw |W3C error count = 0 |Topic = structural formula |Text as path = yes }} </pre> {{nobold|less cryptic than{{0}} <pre style="font-weight:normal">|other fields={{Image generation|C|+|<}}</pre> {{0}}which does exactly the same.}} <br /> <br /> {{nobold|<s>{{T0|Igen/coa}} was</s> a version for {{W|Coats of arms}}, in special with {{T0|COAInformation}}.}}<br /> {{nobold|Now {{W|Coats of arms}} are serviced with {{T0|COAInformation}} and {{M|IgenCoa}}, after conversion.}}{{Clarify|date=November 2024}} {{clr}} |namespace=file |usergroup=all |placement= |usage-notes=<!-- -------------------------------------------------------------------------------------------------- TEMPLATE BOX - BEGIN OF usage-notes --------------------------------------------------------------------------------------------------> === Script support === The {{W|User scripts|user script|commons}} {{Em|{{U|User:Aaron Liu/SvgCheck-Minus.js}}}} has been developed to help maintaining file descriptions. Paste the following three lines into [[Special:Mypage/common.js|your common.js]], or other MediaWiki skin-related JavaScript page. If required, look for your specific script page via the ''Skin'' section of [[Special:Preferences#mw-prefsection-rendering|your preferences]]. <syntaxhighlight lang=javascript line copy> // [[User:Aaron Liu/SvgCheck-Minus.js]] if (mw.config.get('wgNamespaceNumber') === 6 && /SVG/i.test(mw.config.get('wgTitle').slice(-3))) mw.loader.load('//commons.wikimedia.org/w/index.php?title=User:Aaron Liu/SvgCheck-Minus.js&action=raw&ctype=text/javascript'); </syntaxhighlight> The ''simpleSVGcheck.js'' script enables users to use {{T|Image generation}} template without knowing all details of its parametrizing. The script cares for the most essential settings, and does a lot of standardizing the file descriptions. Expert users may complete the suggestions made by the script (e.g. by adding more tags) before saving the script’s changes of the file description page. === Alternative template === {{T|File generation description}} is a version with <u>descriptive parameter names</u> for users not liking the cryptic short codes.<br /> Most taggings can be specified in a better human-readable format with this more talkative <!-- inbetween --> template. A rich and detailed {{T0|File generation description/doc|documentation}} explains how easy it is to use that option. === Other tags === Can be set either by a shorthand notation code, or expressed like in the following examples: <table> <tr> <th style="text-align:left">other tag template</th><th style="text-align:center"><small>code</small></th> </tr><tr> <td>{{tl|Add languages}}</td><td>{{0|(}}<code>%a</code></td> </tr><tr> <td>{{tl|BadSVG}}</td><td>{{0|((}}<code>!</code></td> </tr><tr> <td>{{tl|TopoSVG}}</td><td>{{0|l}}<code>!=t</code></td> </tr><tr> <td>{{tl|TopoSVG}} (required raster)</td><td>{{0|l}}<code>!=r</code></td> </tr><tr> <td>{{tl|FakeSVG}}</td><td>{{0|i}}<code>!=f</code></td> </tr><tr> <td>{{tl|Broken file}}</td><td><code>(bf)</code></td> </tr><tr> <td>{{tl|Cdata}}</td><td>{{0|((}}<code>~</code></td> </tr><tr> <td>{{tl|Colorblind}}</td><td><code>(bl)</code></td> </tr><tr> <td>{{tl|Commonist}}</td><td>{{0|((}}<code>$</code></td> </tr><tr> <td>{{tl|Coablazon}}</td><td>{{0|((}}<code>cb</code></td> </tr><tr> <td>{{tl|COAref}}</td><td>{{0|((}}<code>rf</code></td> </tr><tr> <td>{{tl|Convert to SVG}}</td><td></td> </tr><tr> <td>{{tl|UseXML|Convert to HTML}}</td><td><code>(××)</code></td> </tr><tr> <td>{{tl|Convert to international}}</td><td><code>(in)</code></td> </tr><tr> <td>{{tl|Convert to multilang}}</td><td><code>(ml)</code></td> </tr><tr> <td>{{tl|Convert to wikichart}}</td><td><code>(wc)</code></td> </tr><tr> <td>{{tl|Convert to wikitable}}</td><td><code>(wt)</code></td> </tr><tr> <td>{{tl|Created with code}}</td><td><code>(ci)</code></td> </tr><tr> <td>{{tl|Disputed map}}</td><td><code>(dm)</code></td> </tr><tr> <td>{{tl|Easy-border}}</td><td>{{0|((}}<code>°</code></td> </tr><tr> <td>{{tl|Fictional}},<br />{{tl|Fictitious flag}}</td><td><code>(ff)</code><br /><code>(ff)</code></td> </tr><tr> <td>{{tl|Fake sports logo}}</td><td><code>(fi)</code></td> </tr><tr> <td>{{tl|Fotowerkstatt}}</td><td><code>(fw)</code></td> </tr><tr> <td>{{tl|Graphic Lab}}:<br />{{tl|Projet Blasons}},<br />{{tl|Projekt Wappen}}</td><td>{{0|(}}<code>g…</code></td> </tr><tr> <td>{{C|Large SVG files|<code><nowiki>{{Large SVG}}</nowiki></code>}}</td><td>{{0|((}}<code><nowiki>></nowiki></code></td> </tr><tr> <td>{{tl|Logo history}}</td><td><code>(lh)</code></td> </tr><tr> <td>{{tl|NoInkscape}}</td><td><code>(ni)*</code></td> </tr><tr> <td>{{tl|NoUpdate}}</td><td><code>(nu)*</code></td> </tr><tr> <td>{{tl|Opaque}}</td><td><code>(oq)</code></td> </tr><tr> <td>{{tl|Overlay}}</td><td><code>(ov)</code></td> </tr><tr> <td>{{tl|Igen/ptx|Path text SVG}}</td><td>{{0|((}}<code><nowiki><</nowiki></code></td> </tr><tr> <td>{{tl|PDF version available}}</td><td>{{0|(}}<code>\#</code></td> </tr><tr> <td>{{tl|Quality image}},<br />{{Tl|Valued image}}</td><td>{{0|((}}<code>^</code></td> </tr><tr> <td>{{tl|QGIS}}</td><td>{{0|((}}<code>&</code></td> </tr><tr> <td>{{tl|Recent}}</td><td><code>(re)</code></td> </tr><tr> <td>{{tl|Redrawn with Text Editor|Redrawn}}</td><td><code>(rd)</code></td> </tr><tr> <td>{{tl|Restoration}}</td><td><code>(rs)</code></td> </tr><tr> <td>{{tl|Retouched picture}}</td><td>{{0|((}}<code>R</code></td> </tr><tr> <td>{{tl|Rsvg bug}}</td><td>{{0|(}}<code>?…</code></td> </tr><tr> <td>{{tl|Should be text}}</td><td></td> </tr><tr> <td>{{tl|SimplSVG}}</td><td>{{0|((}}<code>S</code></td> </tr><tr> <td>{{tl|Igen/sni}}</td><td>{{0|(}}<code>S*</code></td> </tr><tr> <td>{{tl|Redrawn with Text Editor|rd}}&{{tl|Igen/sni|sni}}</td><td>{{0|(}}<code>S&</code></td> </tr><tr> <td>{{tl|Scripted SVG}}</td><td></td> </tr><tr> <td>{{tl|Superseded}}</td><td>{{0|(}}<code>\-</code></td> </tr><tr> <td>{{tl|Supersedes}}</td><td>{{0|(}}<code>\+</code></td> </tr><tr> <td>{{tl|SVG 1.2}}</td><td>{{0|i}}<code>1.2</code></td> </tr><tr> <td>{{tl|Taken with ...}}</td><td><code>(tw)</code></td> </tr><tr> <td>{{tl|Technically replaced}}</td><td></td> </tr><tr> <td>{{tl|Tincture}}</td><td>{{0|((}}<code>C</code></td> </tr><tr> <td>{{tl|TracedSVG}}</td><td>{{0|((}}<code>§</code></td> <!-- = {{tl|PoorSVG}} --> </tr><tr> <td>{{tl|Igen/emb|Translate}}</td><td><code>(tr)</code></td> </tr><tr> <td>{{tl|Update}}</td><td><code>(up)</code></td> </tr><tr> <td>{{tl|UseXML}}</td><td>{{0|(}}<code>××</code></td> </tr><tr> <td>{{tl|Valid SVG}} or {{tl|Invalid SVG}}</td><td></td> </tr><tr> <td>{{tl|Vector version available}}</td><td>{{0|(}}<code>\\</code></td> </tr> </table> === Parameter settings === The flexibility of parameter definition allows to use the template with high variability. The same result can be achieved by different settings.<br />All parameters are optional; when used, unnamed * parameter #1 {{0}} contains either ::* tool name abbreviation letter (default: <big><code>I</code></big> for ''Inkscape'') ::* tool name ::* parameters <code>%</code>, <code>~</code>, <code>!</code>, <code>?</code>, <code>§</code>, <code>&</code>, <code><</code>, <code>^</code>, <code>></code> or sign <code>$</code>, <code>+</code>, <code>-</code> and [[#Reference of all parameters|more]]. * parameter #2 {{0}} contains either ::* <code>v</code>, <code>n</code>, <code>s</code>, ::* numeric error count (W3C), ::* parameters <code>%</code>, <code>~</code>, <code>!</code>, <code>?</code>, <code>§</code>, <code>&</code>, <code><</code>, <code>^</code>, <code>></code> or sign <code>$</code>, <code>+</code>, <code>-</code> and more. :: ''See'' also [[#Parameter 2]] * parameter #3 to #9 contains each one either ::* parameters <code>%</code>, <code>~</code>, <code>!</code>, <code>?</code>, <code>§</code>, <code>&</code>, <code><</code>, <code>^</code>, <code>></code> or sign <code>$</code>, <code>+</code>, <code>-</code> and more. {{Clarify|date=October 2024}} It is recommended '''''always to specify the tool''''' with parameter #1. Files defaulted to Inkscape are collected in a {{C|Created with Inkscape-undef|maintenance category}}. <!------------------------------------------------------------------------------------------------ TEMPLATE BOX - END OF usage-notes --------------------------------------------------------------------------------------------------> |setscats= |i18n-method=- |i18ndesc=different translation methods |lines= |shorthand={{((}}[[Template:Igen|Igen]]{{!}}… parameters as described …{{))}}<br/><small>''See also'' the template {{tl|Creation}} for simpler usages within the {{T0|Information}} box.</small> |relieson= * {{W|Extension:ParserFunctions||mw}} * {{M|Igenmod|||+}} * {{T|1color|+|incl=8}} * {{T|Add languages|+|incl=8}} * {{T|Artifacts|+|incl=8}} * {{T|BadSVG|+|incl=8}} * {{T|Broken file|+|incl=8}} * {{T|Cdata|+|incl=8}} * {{T|Clear|+|incl=8}} * {{T|Coablazon|+|incl=8}} * {{T|COAref|+|incl=8}} * {{T|Colour blind|+|incl=8}} * {{T|Commonist|+|incl=8}} * {{T|Convert to international|+|incl=8}} * {{T|Convert to multilang|+|incl=8}} * {{T|Convert to wikichart|+|incl=8}} * {{T|Convert to wikitable|+|incl=8}} * {{T|Created with code|+|incl=8}} * {{T|Current|+|incl=8}} * {{T|Easy-border|+|incl=8}} * {{T|Error|+|incl=8}} * {{T|Fake flag|+|incl=8}} * {{T|FakeSVG|+|incl=8}} * {{T|Fictitious flag|+|incl=8}} * {{T|Fotowerkstatt|+|incl=8}} * {{T|I18n/COA|+|incl=8}} * {{T|Igen/2nd|+|incl=8}} * {{T|Igen/amp|+|incl=8}} * {{T|Igen/cat|+|incl=8}} * {{T|Igen/cod|+|incl=8}} * {{T|Igen/csd|+|incl=8}} * {{T|Igen/csf|+|incl=8}} * {{T|Igen/cwt|+|incl=8}} * {{T|Igen/emb|+|incl=8}} * {{T|Igen/fif|+|incl=8}} * {{T|Igen/glc|+|incl=8}} * {{T|Igen/lab|+|incl=8}} * {{T|Igen/msg|+|incl=8}} * {{T|Igen/par|+|incl=8}} * {{T|Igen/ptx|+|incl=8}} * {{T|Igen/qui|+|incl=8}} * {{T|Igen/sni|+|incl=8}} * {{T|Igen/sub|+|incl=8}} * {{T|Igen/swv|+|incl=8}} * {{T|Igen/top|+|incl=8}} * {{T|Igen/twt|+|incl=8}} * {{T|Igen/upl|+|incl=8}} * {{T|Igen/usr|+|incl=8}} * {{T|Inaccurate-map-disputed|+|incl=8}} * {{T|Information field|+|incl=8}} * {{T|Invtext|+|incl=8}} * {{T|Logo history|+|incl=8}} * {{T|Nil2|+|incl=8}} * {{T|NoInkscape|+|incl=8}} * {{T|NoUpdate|+|incl=8}} * {{T|Opaque|+|incl=8}} * {{T|Out of borders|+|incl=8}} * {{T|Overlay|+|incl=8}} * {{T|PDF version available|+|incl=8}} * {{T|Recent|+|incl=8}} * {{T|Redrawn with Text Editor|+|incl=8}} * {{T|Restoration|+|incl=8}} * {{T|Retouched picture|+|incl=8}} * {{T|Rsvg bug|+|incl=8}} * {{T|SimplSVG|+|incl=8}} * {{T|Superseded|+|incl=8}} * {{T|Supersedes|+|incl=8}} * {{T|SVG|+|incl=8}} * {{T|SVG 1.2|+|incl=8}} * {{T|Tincture|+|incl=8}} * {{T|TopoSVG|+|incl=8}} * {{T|TracedSVG|+|incl=8}} * {{T|Translate|+|incl=8}} * {{T|U|+|incl=8}} * {{T|Update|+|incl=8}} * {{T|UseXML|+|incl=8}} * {{T|Vector version available|+|incl=8}} * {{U|ZooFari/Template:SVG|User:Zoofari/Template:SVG}} }}<!-- ================================================================================================== END OF TEMPLATE BOX ==================================================================================================--> == Specific information == The template is intended to be used within the {{tl|Information}} box, e.g. at <code>Other fields=</code>, or anywhere outside {{NoteBox |type = warn |1 = Because the prevalent majority of files belongs to {{C|Valid SVG created with Inkscape}}, <code>1=Inkscape</code> and <code>2=v</code> are the default values{{Clarify|date=September 2024}}<!-- This statement was added in Sarang's initial revision (141159746, 2014). --><br /> This defaulting is a '''failure'''; {{T0|Created with Inkscape-default|Inkscape-default}} categorizes to a {{C|Created with Inkscape-default|maintenance category}}.{{Clarify|date=September 2024}}<!-- This statement was added in Sarang's revision 436629186 (2020). --> See also {{T0|Created with Inkscape-undef|Inkscape-undef}}. }}<!-- The author of these statements is dead. --> === Subtemplates === The template uses several specific subtemplates, e.g. <div style="font-size:smaller;"> * {{tl|Nil2}}{{0|0000}} – decides whether {{T|Information field}} is used * {{tl|I18n/COA}} – translation of the name * {{tl|Igen/2nd}} – extends the codes *, @, ), \, ° to taggings * {{tl|Igen/amp}} – analizes whether more than one SVG tool is used * {{tl|Igen/bug}} – adapter to {{T|SVGbug}} * {{tl|Igen/cat}} – tool for categorization * {{tl|Igen/cbx}} – {{T|ColorBox}} together with {{T|Igen/cbox}}<!-- {{tl|Igen/clt}} – --> * <s>{{tl|Igen/coa}} – after textsplitting of {{T|COAInformation/Image|link=no}}</s> * {{tl|Igen/cod}} – for [[mw:Extension:SyntaxHighlight#Supported_languages|syntax]] of {{T|Created with code}} * {{tl|Igen/csd}} – creates subcategory differentiation * {{tl|Igen/csf}} – checks whether an SVG drawing is a structural formula * {{tl|Igen/cwt}} – dictionary of shortcodes to translate into corresponding "created with..." template * {{tl|Igen/emb}} – embedded text is found * {{tl|Igen/fgd}} – evaluates whether a topic is valid * {{tl|Igen/fif}} – for fictional items * {{tl|Igen/flg}} – subtemplate for {{T0|Infobox flag}} * {{tl|Igen/glc}} – Graphic Lab CoA treatment * {{tl|Igen/lab}} – adapter for {{T|Graphic Lab}}<!-- , {{tl|Igen/lgd}} – --> * {{tl|Igen/map}} – subtemplate for {{T0|Map}} Infobox * {{tl|Igen/nil}} – does absolutely nothing – nevertheless often used * {{tl|Igen/par}} – analizes parameter 1 (tool name) and parameter 2 (error count} * {{tl|Igen/ptx}} – path text is found * {{tl|Igen/qui}} – adapter for {{T|Quality image}} * {{tl|Igen/sni}} – displays text for "no inkscape" * {{tl|Igen/sub}} – prepares the topic code for subcategorizion * {{tl|Igen/swv}} – <code><switch></code> controlled variations * {{tl|Igen/top}} – prepares the topic code for the display * {{tl|Igen/trg}} – adapter for 'topographic raster graphics'<!-- , {{tl|Igen/tst}} – [for special testing purposes] {{tl|Igen/uns}} – for W3C-unspecifieds --> * {{tl|Igen/twt}} – adapter for {{T|Taken with}} * {{tl|Igen/THV}} – display & caregorize THV * {{tl|Igen/upl}} – extends one-letter-codes to category names * {{tl|Igen/wph}} – Wikipedia Project Heraldry display * {{tl|BadSVG-t}}, {{tl|Created with X}} and more.</div> Such subtemplating allows swift maintenance while the large main template does not need to be touched. The template and its subtemplates are using several internationalization methods, like {{tl|autotranslate}} and {{tl|LangSwitch}}. === Additional notes === <references /> Because ''letters'' are used for the abbreviation of tool names, parameters #1 to #9 use ''other characters''.{{Clarify|date=October 2024}} === Examples === {| class="wikitable" style="width:100%" |- !Input{{0|WWWWWWWWWWWWWWW}} !Result |- |<code style="font-size:smaller">{{Tle|t=Image generation|I}}</code> |{{Image generation|I}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|I|p2=cf|n}}</code> |{{Image generation|I|cf=n}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|I|1}}</code> |{{Image generation|I|1|}} {{0}} same as <code style="font-size:smaller">{{Tle|t=Image generation|I|p2=e|1}}</code> |- |<code style="font-size:smaller">{{Tle|t=Image generation|I|+}}</code> |''see next line how it appears in the Information box''{{Image generation|I|v|fn=SVG{{I18n/COA|development}}}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|-}}</code> |{{Image generation|-}} ( "nil" transclusion - it does nothing) |- |<code style="font-size:smaller">{{Tle|t=Image generation|A}}</code> |{{Image generation|A}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|A$}}</code> |{{Image generation|A$}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|IA}}</code> |{{Image generation|IA}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|Im}}</code> |{{Image generation|Im|t= {{0}} option "IMPORTANT"}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|B}}</code> |{{Image generation|B}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|C}}</code> |{{Image generation|C}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|D}}</code> |{{Image generation|D}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|H}}</code> |{{Image generation|H}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|G}}</code> |{{Image generation|G}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|J}}</code> |{{Image generation|J}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|L|n}}</code> |{{Image generation|L|n|t={{0}} Raster graphics without W3C}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|M|s|p3=e|0}}</code> |{{Image generation|M|s|e=0|t= {{0}} due to "s" without W3C – set W3C error count!}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|P|p2=o|n|p3=e|1}}</code> |{{Image generation|P|o=n|e=1|t= {{0}} due to "opt=n" without W3C – set W3C error count!}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|U|12|>}}</code> |{{Image generation|U|12|>}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|Q|17|p3=e|23}}</code> |{{Image generation|Q|17|err=23|T=:(from two given values 17 and 23, the <code>err=</code> value has '''precedence''')}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|S|$}}</code> |{{Image generation|S|$}} |- |<code style="font-size:smaller">{{Tle|t=Image generation|ArcMap}}</code> |{{Image generation|ArcMap}} {{0}} name "ArcMap" |- |<code style="font-size:smaller">{{Tle|t=Image generation|GeoGebra|n}}</code> |{{Image generation|GeoGebra|n}} {{0}} "GeoGebra" '''n'''on-SVG |} When expressing some more options without expressing them by the shorthand parameters it can become a long line:<br /> <code><nowiki>{{</nowiki>Image generation|Inkscape|v|+'''|u='''<nowiki>{{</nowiki>U|Username}}'''|s=''':Drapeaux created by User:Username'''|m='''-<nowiki>[[</nowiki>Help:Inkscape#Inkscape SVG vs. Plain SVG|<nowiki>''</nowiki>important<nowiki>''</nowiki>]]'''|t='''<nowiki>{{</nowiki>Translation possible}}<nowiki>{{</nowiki>Translate|switch=yes}}<nowiki>{{</nowiki>Cdata}}<nowiki>{{</nowiki>BadSVG}}<nowiki>{{</nowiki>SVGbug|description=hairline crack}}<nowiki>{{</nowiki>TracedSVG}}<nowiki>{{</nowiki>Path text SVG}}<nowiki>{{</nowiki>Quality image}}<nowiki>{{</nowiki>RetouchedPicture|1=Translation en → fr|editoff=Username|origoff=Carbon14 with activity labels.svg}}<nowiki>{{</nowiki>Projet Blasons}}<nowiki>{{</nowiki>Atelier graphique}}}}</code> === Parameter table === The table shows for some given simple situations one of several possibilities to set parameters: * if the ''tool'' needs to be specified, it’s only possible with parameter #1 * an ''error'' number can be specified either with parameter #2, or everywhere with err= * the <code>n</code> at parameter #2 clarifies that the file is non-SVG * to tag a file which is not SVG the <code>n</code> needs to be set with parameter #2 * when used as an argument of <code>Other fields</code>, the <code>+</code> <u>is necessary</u> * when used ''outside'' the information box, the <code>-</code> ''may be'' necessary {| class="wikitable" style="margin:.8em 0 0 1.6em" | placement || colspan="4" | ''other fields'' || colspan="4" | standalone |- ! style="text-align:right"| parameters !!p1 !!p2 !!p3 !! p4{{0}}!!p1 !!p2 !!p3 !!p4{{0}} |- | valid Inkscape || + || || || || – || || || |- | Inkscape 1 error || + || 1 || || || – || 1 || || |- | valid BKchem || B || + || || || B || – || || |- | Gnuplot 4 errors || G || 4 || + || || G || 4 || – || |- | Python raster || P || n || + || || P || n || – || |- | valid PHP ||PHP|| + || || ||PHP|| – || || |- | PHP 17 errors ||PHP||17 || + || ||PHP||17 || – || |} === Parameter 2 === Parameter #2 has historically been the place to specify the file’s validation, as in transclusions like <code><nowiki>{{Inkscape||</nowiki><u>v</u>}}</code>. Now it may contain one of the following: * The character "v" to mark a '''v'''alid SVG file. Because this is the default for SVG files it ''is '''not necessary''''' to be specified and can be omitted. * The character "n" to mark a '''n'''on-SVG file. Because this is the default for non-SVG files it is not necessary to be specified explicitly. * The character "s" to mark a SVG file with '''s'''uppression of the W3C-box. To enable proper category sorting, "e= " must be specified explicitly (''<code>e=0</code>'' for "valid"). <!-- * The "/" sign is used here to omit the W3C link for SVG files. This ''disables'' the category diffusion and is therefore ''not recommended''. --> * The {{W|W3C}} error count: either "0" (for a valid SVG), a number > zero or -1. This error count can also be given with the parameter <code>e=</code>. Default is "0". * The value "-1" for SVG code that can't be checked by the W3C validator (a common reason is the missing XML header which can be easily fixed); "Other tool" is implied, no need to specify it. * One of the signs <code>$</code>, <code>+</code>, <code>-</code> or <code>%</code>, <code>~</code>, <code>!</code>, <code>?</code>, <code>§</code>, <code>&</code>, <code><</code>, <code>^</code>, <code>></code>. These can also occur as arguments for any one of the unnamed parameters #1 through #9. === Suppress the validity box === Parameter #2 set to "n" for <u>raster graphics</u> avoids the validity box and enables correct categorizing.<br /> To suppress the box for <u>SVG files</u>, set parameter #2 to "s". When the SVG file is invalid, '''always''' set the <code>e=</code> parameter, otherwise <code>e=0</code> to enable correct categorizing and sorting within the category. Setting "<code>s</code>" ''without'' "<code>e=</code>" let the file be {{C|SVG files without W3C-specification|W3C-unspecified}}. If it seems necessary to tag a file with more than one generation tool, the other tool(s) can be added with e.g. <code><nowiki>t={{Created with ...|err=…|vo=n}}</nowiki></code>. The ''validator option'' <code>vo</code> set to "n" avoids to show the box again, while <code>err</code> must specify the error count (or "0") to categorize correctly, including the descending sorting within the category in the case of validation errors. === SimplSVG template === To combine both the advantages of {{T0|SimplSVG}} and {{T0|Image generation}} it is possible to transclude the first one by the second. This can be done by setting {{Tle|t=Igen|…|…|+|'''S'''|and then the parameters for SimplSVG, followed by them for Image generation}}.<br />{{Anchor|SimplSVG}}Keep in mind that the tool for the <u>former image</u> must be specified, while the {{T0|HandSVG|Text Editor}} is always assumed as the tool for the <u>simplified image</u>! An example may be e.g. {{F|Non-EU-section-with-MK-2012.svg|-}} with {{Tle|t=Igen|I|18034|272|v|%|+|'''S'''}}<br /> To ''suppress'' the categorization to {{C|SVG Simplified}} subcategories, use <code>|S|sub=-</code> (with <code>-</code>!), or short <code>|S-</code> (with <code>-</code>!).<br /> <code>S</code> (or <code>S-</code>) can be specified at any position from 2 to 13 (<code>S-</code> even instead of the toolname <code>T</code> at position 1), e.g. <code>10=S</code> (or <code>10=S-</code>).<br /> Exactly the same can be specified alterny with the parameters {{Tle|t=Igen|I|+|p3=sb|18034|p4=sa|272|%|p6=s|v}} , : where <code>sb</code> specifies the <code>size-before</code>, and <code>sa</code> the <code>size-actual</code>; : <noinclude><span style="background-color:#cfe;width:60%;"></noinclude>for the {{T0|File generation description|'''File generation description'''|+|case=l}} that is expressed with the ''pair of numbers'' e.g. <code>Simplified SVG = 18034/272</code><noinclude></span></noinclude> plus additional positional and named parameters for <code>SimplSVG</code> (like e.g. <code>vs=-</code>),<br /> ''plus'' additional positional and named parameters for <code>Igen</code> like e.g. <code>%</code>, <code>vsub=</code> and/or <code>T=</code>.<br /> No conflict can occur with the free-position parameters because {{T0|SimplSVG}} uses letters, and {{T0|Image generation}} uses other characters. {{Anchor|vstyle}} <noinclude><div style="background-color:#cef;width:60%;"></noinclude> The ''layout'' can be controlled with the parameter <code>vs</code>: * mimimized layout, 1 line: <code>{{0|000}}</code> default (parameter skipped, or <code>vs=-</code> / <code>vs=n</code>) * small layout with 2 lines: <code>vs=</code> (or <code>vs=fl</code> <small>for "float-left"</small>) * medium layout, 3 lines:{{0}} <code>vs=z</code> (or <code>vs=Z</code>) * large layout with 3 lines:{{0}} <code>vs</code> with any other value than the above <noinclude></div></noinclude> === Color boxes === '''C''': '''{{T0|Tincture}}s''' can be specified with parameter '''<code>C=</code>''', e.g. <code>C=a/g/v</code> or <code>C=or/gules</code>; the parameter <code>Css=</code> can be used to select [[Template talk:Tincture/box|another tincture variation]].<br /> '''cb''': It is also possible to draw different '''Color Boxes''' above the other line(s) of the templates output. While the {{T|ColorString|+|case=l}} can be used everywhere, e.g. at the "description" field of the {{T|Information}} to draw such boxes, within {{T0|Image generation}} the parameter '''<code>cb=</code>''' is provided for that. For {{T0|File generation description}} the parameter <code>Colorbox=</code> does the same.<br /> <u>Parameter value:</u> consists in each case of subparameters, separated by slashes. <br /> In general, a pair of subparameters, or a series of such pairs is specified. *The ''first'' parameter of each pair is a valid [[Template talk:ColorString|CSS color name]], a valid {{T0|tincture}} name or a valid hexadecimal color code;<br />it can as well be expressed as an argument of {{T|Xconv}}, e.g. {{Tle|t=Xconv|rgb(204,51,102)}} ({{Colorbox |{{Xconv|rgb(204,51,102)}}}}), or {{Tle|t=Xconv|75%50%100%}} ({{Colorbox|{{Xconv|75%50%100%}}}}) *The ''second'' parameter can specify a descriptional text, e.g. "rouge" or something else, it may also be a (wiki)link;<br />it can as well be expressed as an argument of {{T|Xconv}}. When it is missing (specified empty), the first parameter is displayed. These parameter values can be preceded by a <u>pair of control characters</u>: The first control code may be a "+" to generate a field name; other characters or none won't.<br /> Control code 1 <code>+</code> will generate the standard field name as shown below, with <code>+=</code> any other text can be specified.<br /> {{Lua|Module:Color2dec}}The second control code may specify the type of color boxes: * none or " " or "C" to use the template {{T0|Legend}} with parameter pairs – the standard usage. * "B" to use the template {{T0|ColorBox}} with single parameter values, * "D" to use the template {{T0|ColorBox}} with parameter pairs,, * "L" to use the template {{T0|Legend}} with single parameter values, ¹) * "M" to use the template {{T0|Legend-small}} with parameter pairs, ²) * "S" to use the template {{T0|Legend-small}} with single parameter values, * "T" to use the template {{T0|Tbc}} with parameter pairs, and special treatment for the title. :¹) <small>the "L" possibility exists just for completion – normally a "Legend" without an explaining second value will not be useful.</small> :²) <small>the "M" possibility can as well be specified with the second control code "-". </small> To show it again, formatted as a table: {| class="wikitable" style="text-align:center" !template||parameters||control code 1||control code 2||Example <small>(xxx/yyy/... stands for the parameter pairs)</small>||{{T0|InFi|field name}} {{Nobold|(title) ⁴)}} |- |{{T0|Legend}}||pairs||"+" or none||none||style="text-align:left"|<code>+/ /xxx/yyy/...</code> or <code>{{0|+}}/C/xxx/yyy/...</code>³) |" "<small>=Legend,</small> "C"<small>=Colour(s)</small> |- |{{T0|ColorBox}}||'''single'''||"+" or none||<code>B</code>{{0|000}}||style="text-align:left"|<code>+/B/xxx/xxx/...</code> or <code>{{0|+}}/B/xxx/xxx/...</code> |Colour(s) |- |{{T0|ColorBox}}||pairs||"+" or none||<code>D</code>||style="text-align:left"|<code>+/D/xxx/yyy/...</code> or <code>{{0|+}}/D/xxx/yyy/...</code> |Colour(s) |- |{{T0|Legend}}||'''single'''||"+" or none||<code>L</code>{{0|000}}||style="text-align:left"|<code>+/L/xxx/xxx/...</code> or <code>{{0|+}}/L/xxx/xxx/...</code> |Legend |- |{{T0|Legend-small}}||pairs||"+" or none||<code>M</code>||style="text-align:left"|<code>+/-/xxx/yyy/...</code> or <code>{{0|+}}/M/xxx/yyy/...</code> |Colour(s) |- |{{T0|Legend-small}}||'''single'''||"+" or none||<code>S</code>{{0|000}}||style="text-align:left"|<code>+/S/xxx/xxx/...</code> or <code>{{0|v}}/S/xxx/xxx/...</code> |Color box(es) |- |{{T0|Tbc}}||pairs||none or "e"||<code>T</code>||style="text-align:left"|<code>{{0|v}}/T/xxx/yyy/...</code> or <code>e/T/xxx/yyy/...</code> |Used color(s) ⁵) |} :³) <code>{{0|+}}/ /xxx/yyy/...</code> can as well be written <code>xxx/yyy/...</code> (without the empty control characters)<br /> ::but for the control code 2 instead of " " the value "C" may be used to title "Colors" instead of "Legend" ⁴) With the ''control code 1'' <code>+=</code> the free selection of another field name than the standard one is possible,, e.g. <code><nowiki>|cb=+={{I18n/Colors}}/ ... </nowiki></code> <!-- for a (translated) field name<br /> --> :''without'' the <code>+</code> (just <code>|cb=/</code>) ''flags'' will get the field name "Flag colors". {{#tag:span|{{0}}See some examples of using <kbd>cb</kbd> (with control code 2: B, D, M, S and T) and of <kbd>+=</kbd> at {{C|Wikimedia icons|+}}.{{0}}|style=border:1px solid #3C3;background-color:#DFD}}<br /> '''Stripes and lines:''' Legend boxes can be ''striped'' by {{C|SVG stripe texture overlays|different patterns}}, and/or mixed with {{T0|Legend-line}}s. See examples at the [[Template:Legend/doc#Examples|documentation]].<br /> {{Anchor|Tbc}} <big>'''{{T0|Tbc}}'''</big> needs decimal coded color codes. Internal functions can convert ''hexadecimal triplets'', {{T0|tincture|tincture names}} and [[Template talk:ColorString|CSS color names]] for <code>Tbc</code>.<br />Other color names are not decimalizable, because of that not all ''color names'' can be used for <code>Tbc</code>.<br /> A {{T0|InFi|field name}} is always created and can't be deselected, independent from the first control code (which can be "e" for {{T0|Easy border}}). <big>Example strings for '''{{T0|Tbc}}''':</big> {| |- |<code>{{0|e}}<nowiki>/T/#900/wikidata red/#396/wikidata green/#069/wikidata blue </nowiki></code> || hexadecimal triplets & names |- |<code>{{0|e}}<nowiki>/T/argent//céleste//gules//sable </nowiki></code> || tinctures w/o names |- |<code>{{0|e}}<nowiki>/T/CornflowerBlue/#6495ED/BlanchedAlmond/#FFEBCD </nowiki></code> || CSS colors, and their hex codes for names |- |<code>{{T0|Easy border|e}}<nowiki>/T/#6495ED/blue/cendrée/gris/YellowGreen/green </nowiki></code> || colors from mixed sources, + {{T0|Easy border}} |- |<code><nowiki>Guatemal colors/T/#FFFFFF/blanco/#4997D0/azul </nowiki></code> || with individual <code>field name</code> |- |<code><<nowiki>nowiki/> {{Wf|Drapeau tricolore}}/T/#0055A4/bleu/#FFF/blanc/#EF4531/rouge</nowiki></code> || with individual <code>field name</code>, + {{T0|Easy border}} |} :⁵) (the ''individual field name'' starting with a space, e.g. "<<nowiki>nowiki/> </nowiki>", for signalling the {{T0|Easy border}} request) === SVG source code display === is performed centrally by Image generation; previously it had been an option of some single {{C|SVG created with ... templates|templates}}, now it can only be done when such a template is invoked by Image generation. The {{C|SVG created with ... templates|table}} shows where the code-categories are defined. The {{T0|Created with code|documentation}} explains how the different parameters can be used to format the output; a short reference can be found [[#Reference of all parameters|below]]. === Category === All the {{C|Created with ... templates}} categorize to "Created with ...", the {{C|SVG created with ... templates}} to "[in]valid SVG created with ...".<br /> This automatic generated category can be customized with [[#Subcategory specification|subcategory specification]] and/or sorting keys (key=). :''It is strongly recommended to change that reasonable categorizing '''only''' in cases of very good reason!'' With the parameter "cat=" (or short "c=", also "category=") the automatic categorizing can be ''overwritten'': * with <code>cat=-</code> every categorization will be suppressed (it can as well be done with "cat=n" or just "cat="). * another value ''without'' "[<nowiki/>[" brackets (e.g. <code>cat=xxx</code>), will be completed with the specified values of subcategory and/or sorting key, brackets and namespace:<br />e.g. <code><nowiki>[[Category:{{{cat}}}{{{sub|}}}|{{{key|}}}]]</nowiki></code> * when the value starts with brackets (e.g. <code>cat=[[</code>…), it will be used as-it-is: nothing is changed, specified values of the parameters sub and key are then ''ignored''.{{Anchor|o-cat}} <u>Other parameters for categories:</u> {| |- |{{blue|■}} <code>!c</code>= for {{t0|BadSVG}}s|| <code>^c</code>= for {{t0|QI}} || <code>cc</code>= for [[Template:Created_with_code/doc#Categorizing|Created with code]]/suppression |- |{{blue|■}} <code>&c</code>= for e.g. {{t0|Igen/amp|QGIS}} || <code>$c</code>= for {{t0|Commonist}} |- |{{blue|■}} <code>&lt;c</code>= for {{t0|Path text}} || <code>>c</code>= for {{C|Large SVG files}} |- |{{blue|■}} <code>tc</code>= for {{t0|Taken with}} || <code>Cc</code>= for {{t0|Tincture}} |- |{{blue|■}} <code>fc</code>= for {{C|Special or fictional flags|Fictional files}} || <code>bfc</code>= for {{t0|Broken file}} |- |{{blue|■}} <code>cni</code>=<small> for {{C|SVG created with Inkscape:Important}}</small> {{0}} || <code>cw</code>= the "Created with" category |} {{Anchor|cw_par}} The parameter <code>cw</code> has three functions: # the <code>logo</code> will be {{Tle|t=F|<nowiki>{{{cw}}}</nowiki> logo.svg}} # the <code>toolname</code> will be the link {{Tle|t=W|<nowiki>{{{cw}}}</nowiki>}} # the <code>category</code> will be {{Tle|t=C|Created with <nowiki>{{{cw}}}</nowiki>}} to simulate together with e.g. {{T0|Created with Other tool|Other tool}} a not-yet existent tool. === Subcategory specification === The template offers various possibilities to diffuse a category by subcategories. * With <code>sub=</code> a suffix to the category name is specified; ** when this suffix string needs to be prefixed with a semicolon "<code>:</code>" <!-- "&amp;#58;", --> use the parameter <code>s:=</code> or <code>sub:=</code> <br />{the display occurs with "lcfirst"; to force an "ucfirst" the parameter <code>su:=</code> can be used). ** or when this suffix string needs to be prefixed with a hyphen "<code>-</code>" <!-- "&amp;#45;", --> use the parameter <code>s-=</code> or <code>sub-=</code>. * An uppercase <code><big>S</big>=</code> does the same but an in-between space is inserted. * Recommended is to use the parameter <code>s=</code> which bears several advantages: :* With a code of one letter (or an abbreviation of some letters) many predefined subcategories are accessable; the subtemplate {{T0|Igen/sub}} cares for the expansion. :* Such a short code is also used as a ''[[#Topics|topic]]'' for the description by many other templates;<br />while Igen/sub expands only to ''subcategory names'' in English, the subtemplate {{T0|Igen/top}} transposes multilingual. Only in cases where the required topic differs from the subcategory, or no subcategory should come in effect, another code can be defined to substitute the <code>s=</code> value. This topic letter can be defined with the parameter <code>topic=</code> or <code>what</code>/<code>w=</code> and becomes expanded instead. <small>("w" for <code>what=</code> because the "t" had been used for "trailing text", and cannot be used to abbreviate <code>topic=</code>)</small>. {{Anchor|o-sub}}<br /> <u>Other parameters for subcategories:</u> {| |- |{{blue|■}} <code>!s</code>= for {{tl|BadSVG}}s || <code><nowiki><s</nowiki></code>= for {{tl|Igen/ptx}} |- |{{blue|■}} <code>?s</code>= for {{tl|Rsvg bug}}s || <code>§s</code>= for {{tl|TracedSVG}} |- |{{blue|■}} <code>&s</code>= for e.g. {{tl|Igen/amp|QGIS}} || <code>$s</code>= for {{tl|Commonist}} |- |{{blue|■}} <code>gc</code>= for {{tl|Graphic Lab}}-xx {{0}} || |} With the parameter <code>sd=</code> always a <u>subcategory differentiation</u> can be defined. ==== Topics ==== {{see also|Template:Igen/sub|Template:Igen/top}} When as well <code>s=</code> ''and'' <code>sub=</code> or <code><big>S</big>=</code> are defined, sub/S is used for subcategorizing (or suppression with <code>sub=-</code>) and <code>s=</code> can then be used like <code>w=</code> for topic specification. The topic option can alse be suppressed with <code>w=-</code>, independent from <code>s/sub/S</code>.<br /> <!-- See also the parameters <code>&s</code> and <code>&c</code>. --> As said above, the parameter <code>s</code> can be used for subcategorizing; when no parameter <code>topic=</code> (or <code>what</code>/<code>w=</code>) is specified the value of <code>s</code> is also used for the topic text by the national versions of the {{C|Created with ... templates}}. Except of this defaulting the two parameters can be defined and/or suppressed completely independent from each other.<br /> {{Color|b|2=These '''[[Template talk:Image generation#TopTb|tables]]''' show the conversion of <code>s=</code>, and the conversion & translation of <code>w=</code>.|css=border:#000 solid 1px;padding:2px 4px}}<br /> These ''topics'' are passed to many other templates. While a few of the {{C|Created with ... templates}} have ''default topics'' defined, only an ''explicitely specified'' topic can be passed further. ==== Subcat & topic ==== {{see also|Template:Igen/sub|Template:Igen/top}} It is also possible to define with one single parameter sub-category ''and'' topic, with a subcategory-separator semicolon "<code>:</code>" or minus "<code>-</code>".<br /> Parameter values of "<code>s:</code>" and "<code>s-</code>" specify a subcategory; they are prefixd with a "<code>:</code>" resp. a "<code>-</code>", but except that they are used as-they-are.<br /> When there is neither a parameter "topic", "what"/"w", nor "s" then the parameter values of "<code>s:</code>" / "<code>s-</code>" are used also for topics, with their first letter lower-cased, but not translated. Parameter values of "s:" and "s-" specify a subcategory which is prefixed with a "<code>:</code>" resp. a "<code>-</code>", the first letter is capitalized and a final (plural-)"s" is added.<br /> Example: <code>s:=digit</code> specifies the subcategory ":Digits" (as is done with <code>s=7</code>).<br /> When there is neither a parameter "topic", "what"/"w", nor "s" then the parameter values of "<code>s:</code>" / "<code>s-</code>" are used also for topics, with their first letter lower-cased, but not translated.<br /> Similar is the result with <code>sub:=</code> and <code>sub-=</code> but neither case changing nor adding of a plural-"s" occurs.<br /> The parameters <code>S:</code> and <code>Sub:</code> are working like <code>s:</code> and <code>sub:</code>, with an additional space after the semicolon. ==== Usage of "s" and "w" ==== {{see also|Template:Igen/sub|Template:Igen/top}} The parameter <code>s=</code> specifies a topic for subcategorization, ''and'' for the display (if no "w=" is specified).<br /> The parameter <code>w=</code> specifies a topic only for the display; it will be nationalized into the user's language.<br /> Example: <code>|s=tl|</code> specifies the subcategory <code>:Text logos</code>, and (without "w=") also the display text "text logo" in different languages;<br />but with <code>|w=tl|s=l|</code> the subcatory will be <code>:Logos</code> with the nationalized display text "text logo". === Graphic Lab === {{Anchor|GLab}} For the connection of files with the {{C|Graphic Lab}} exist multiple possibilities. Graphic labs are in general for all images, special subcategories exist for {{C|CoA Lab|coats of arms}}, {{C|Flag Lab|flags}} and {{C|Map Lab|maps}}. Dependent to the need these are divided into more subcategories, and e.g. the {{C|CoA Lab-fr}} has many ''user subcats''.<br /> Some graphic lab subcategories contain only a few items, while others are extremely crowded and may need further subcategorizing. {{T0|Image generation}} knows many two-letter codes for graphic lab access, consisting of the letter <code>g</code> for graphic lab, and another character for the nationality.<br /> Comparable to the {{T0|W|-}} which also has in most cases a one-letter abbreviation for the national Wikipedia, this system is effectiv but has limits.<br /> Because of the manageable total <!-- number amount --> of graphic labs, this seems sufficient and clear enough: <code>f</code> stands for <kbd>fr</kbd>, <code>h</code> for <kbd>hu</kbd>, <code>i</code> for <kbd>it</kbd> and so on. With the two-letter code g{{sub|×}} as parameter at any position {{T0|Igen}} is enforced to a special treatment; most of it is done by the subtemplate {{T0|Igen/lab}}. <u>User category</u>: can be defined with the two-letter-code specifying a user name, e.g. <code>gH=ARK|s=c</code> categorizes the file to {{C|CoA Lab-ch:ARK}}.<br> Same can be done with <code>|u=ARK|gH|s=c</code>. To ''avoid'' categorization, write <code>|u=ARK|s=c|gH=</code> ==== The [[MediaWiki:InformationToCOA.js|conversion script]] ==== To avoid the necessity of defining ever and ever again long parameter combinations, such defintions can be deposited for each user and automatically transfered.<br /> From each definition, the module creates a complete {{Tle|T=igen|...|...|...}} transclusion parameter and passes it to the file description.<br /> It is possible to have ''more than one'' definition for a user (with different keys!), and the parameter values can be manually [[#Modification|modified]].<br /> This treatment in ''intended'' for coats of arms using the {{T0|COAInformation|-}} but it can as well be used for any other file;<br /> an {{T0|Igenc|interface}} template can serve for the connection to the module and the stored parameters.{{Clarify|date=November 2024}} The definitions are stored in a Lua module's internal table; it needs some care but not much skill to modify it or to add definitions.<br /> The automatism is done by [[User:Sarang/cleanup.js|the cleanup script]], which can be performed as the last step of different flow modes. These are the different flows: {| style="padding:2 0 2 0" |- |1: ToCoa only || style="background:#CCC"|ToCoa script||e1||style="background:none"| ||style="background:none"| ||style="background:none"| |- |2: ToCoa & SVG || style="background:#CCC"|ToCoa script||e1||style="background:#CCF"|SVGcheck script ||style="background:#CEF"|cleanupscript||e2 |- |3: Coa + cleanup{{Clarify|date=November 2024}}|| style="background:#CCC"|ToCoa script||e1||style="background:none"|---------------→ ||style="background:#CEF"|cleanupscript||e2 |- |4: SVGcheck|| style="background:none"| || ||style="background:#CCF"|SVGcheck script ||style="background:#CEF"|cleanup script||e2 |- |5: cleanup only|| style="background:none"| || || style="background:none"| ||style="background:#CEF"|cleanup script||e2 |} ;Explanation&#58;: : 1) in any case, an Information template can be converted to a COAInformation template :: <code>e1</code>after the conversation, the script offers the changed description in edit mode; final edits can be done before the conversion is saved. : 2) for SVG files, after the steps as above the SVGcheck script can be started, which continues with the cleanup. :: <code>e2</code> the cleanup script will offer the changed description in edit mode for final editing before it is published ::: after that publishing save, Imge generatkion will run and the success can immediately be seen; ::: of course it will be better to have first a preview, to check whether it is free of errors and looks good ! : 3) after the conversion can directly proceeded to cleanup - for raster images th SVGcheck is not possible. : 4) but for SVG images always the SVGcheck can be performed, which continues with the cleanup. :: The cleanup can be performed for any file, when necessary repeatedly. In the case that a file description is done with COAInformation, the cleanup script compares the author name with an internal user list and provides the parameter <code>|image =</code> with the found key. Modifications can be done by the editing user before the changes are published. The cleanup script can detect whether the image is an element or a raster graphic, and select the appropriate key;<br /> ''but it cannot see'' whether it's an ecclesiastical image, this is evident <u>only for the editing user</u> who has to do the modification. ==== The Module {{M|IgenCoa}} ==== Keys for some national labs are further diffused, e.g. {| class="wikitable" style="text-align:center" |- | g_lab|| coa || <u>c</u>harges || <u>e</u>ccles. || <u>i</u>ndivid. || e<u>x</u>cl. cat |- | {{C|CoA Lab-de|gd}} || d || dc || de || di || dx |- | {{C|CoA Lab-es|ge}} || e || ec || ee || ei || ex |- | {{C|CoA Lab-fr|gf}} || f || fc || fe || fi || fx |}{{Clarify|date=November 2024}} == Parameter reference == === Named and unnamed parameters === Each one of the following parameter codes can be used either ''positional'' to set taggings with extern templates, or they can be used as ''parameter names'' to pass an individual information to the templates.{{Clarify|date=November 2024}} The function is like using the templates with the <code>|t=</code> parameter, either without or with an individual information.<br /> '''Example:''' * (positional) "?" can also be written as "t=<nowiki>{{</nowiki>SVGbug}}" * (named p.) "?=rendering error" can also be written as "<nowiki>t={{SVGbug|description=rendering error}}"</nowiki> '''In general''': when ''subparameters'' exist, their specification makes the main parameter redundant.<br /> As an example, <code>\</code> or <code>\=file name</code> invokes {{T1|Superseded}} resp. {{T1|Bitmap version available}}. * <code>\x=file extension</code> and/or * <code>\r=reason</code> will invoke that template as well. This option is valid for all subparameters. {| class="wikitable" style="margin:.8em 0 0 1.6em" |- ! code !!template !! passed individual information |- | %<br />%r<br />%v<br />%f<br />%i<br />%s || {{tl|Igen/emb}} || <code><nowiki>|1={{{%}}}|2=s|s={{{s|}}}</nowiki></code><br /> <code><nowiki>|s={{{s|}}}|v=r</nowiki></code><br /> <code><nowiki>|s={{{s|}}}|v=v</nowiki></code><br /> <code><nowiki>|1=vf|s={{{s|}}}</nowiki></code><br /> <code><nowiki>|1=i|s={{{s|}}}</nowiki></code><br /> <code><nowiki>|1={{{%s}}}|s={{{s|}}}|switch=yes</nowiki></code> |- | ~ || {{tl|Cdata}} || <code><nowiki>|sub={{{~}}}</nowiki></code> |- | ! || {{tl|BadSVG}} || <code><nowiki>|1={{{!}}}|subcat={{{!s|}}}</nowiki></code> |- | ? || {{tl|Rsvg bug}} || <code><nowiki>|description={{{?}}}|sub={{{?s}}}</nowiki></code> |- | § || {{tl|TracedSVG}} || <code><nowiki>|1={{{§}}}|s={{{s|}}}</nowiki></code> |- | & || {{tl|Igen/amp|QGIS}} || <code><nowiki>|1={{{&}}}|2={{{&&|}}}</nowiki></code> |- | < || {{tl|Igen/ptx}} || <code><nowiki>|sub={{{<}}}|s={{{s|}}}</nowiki></code> |- | ^ || {{tl|QI}} || <code><nowiki>|SVG={{{^}}}</nowiki></code> |- | > || {{tl|SVGvalid}} || <code><nowiki>|opt=<nowiki/></nowiki></code> |- | × || {{tl|SimplSVG}} || <code><nowiki>|3={{{000}}}|4={{{×|}}}|5={{{×d|}}}</nowiki></code> |- | \ || {{tl|Superseded}} || <code><nowiki>|1={{{\}}}|2={{{\r|}}}</nowiki></code> |- | → || {{tl|Convert to SVG}} || <code><nowiki>|1={{{→|{{{w|{{{s|}}}}}}}}}</nowiki></code> |- | ° || {{tl|Easy-border}} || <code><nowiki>|topic={{{°}}}</nowiki></code> |- | ge || {{tl|THV}} || <code><nowiki>|1={{{k|}}}|2={{{s|}}}</nowiki></code> |} === Reference of all parameters === For the setting of parameter #1 and parameter #2 see also [[#Parameter settings]].<br /> The following tables reference all other parameters possibly occurring; * when <code>10=S</code> all the parameters of {{T0|SimplSVG}} or {{T0|HandSVG}} can occur as well; * the many parameters when [[Template:Created with code/doc#Template parameters|source code]] is to display are explained [[Template:Created with code/doc#Template parameters|there]] {| class="wikitable float-right mw-collapsible mw-collapsed" style="margin:.8em 0 0 1.6em" |- ! colspan="3"| {{0|000}} Created with code {{0|000}} |- | '''code''' || '''alias''' || '''description''' |- | c1 || code || the source '''c'''ode |- | d1 || || '''d'''iffusion of category |- | e1 || || '''e'''xplanatory text ahead |- | f1 || style || '''f'''ormat attributes |- | g1 || || '''g'''reater or smaller, and ''type'' of font |- | h1<ref name="s"><br /><u>Suppressable:</u> to suppress the usage of the default value for a parameter "x", use <code>x=-</code> or <code>x=n</code>, or an '''''empty'' value''' like <code>x=</code>.</ref> || title<ref name="s"/> || '''h'''eadline |- | l1 || syntax || '''l'''anguage {{W|mw:Extension:SyntaxHighlight#Supported_languages|code}} |- | n1 || || '''n'''ote afterwards |- | s1<ref name="s"/> || collapse<ref name="s"/> || '''s'''ecluded |- | colspan="3"| two more source codes can be shown; all the parameters<br /> are specified like for the first code, but with "2" resp. "3",<br /> e.g. <code>c2</code> or <code>code2</code> and so on |- | colspan="3"| Formatting parameters |- | +c || || global field name |- | cc || || global category |- | nt || || global headline suppress |- | p1 ||number|| headline "preferred", note ''byte count'' |} ==== Final tags ==== to transclude templates with a 2-byte-code{{Clarify|date=November 2024}} {| class="wikitable sortable float-right mw-collapsible mw-collapsed" style="margin:.8em 0 0 1.6em" |+ table |- ! code !! template !! parm{{Clarify|date=November 2024}} |- | ni || {{T0|NoInkscape}} || 14 |- | nu || {{T0|NoUpdate}} || 21 |- | re || {{T0|Recent}} || 22 |- | up || {{T0|Update needed}}/{{T0|Outdated}} || 23 |- | lh || {{T0|Logo history}} || 24 |- | ci || {{T0|Current}} || 25 |- | dm || {{T0|Disputed map}} || 43 |- | ov || {{T0|Overlay}} || 26 |- | oq || {{T0|Opaque}} || 27 |- | tr || {{T0|Translate}} || 28 |- | in || {{T0|Convert to international}} || 29 |- | ml || {{T0|Convert to multilang}} || 30 |- | wc || {{T0|Convert to wikichart}} || 31 |- | wt || {{T0|Convert to wikitable}} || 32 |- | bl || {{T0|Colour blind}} || 33 |- | ff || {{T0|Fictitious flag}} || 34 |- | rd || {{T0|Redrawn with Text Editor}} || 35 |- | fi || {{T0|Fake sports logo}} || 36 |- | bf || {{T0|Broken file}} || 37 |- | rs || {{T0|Restoration}} || 38 |- | zf || [[User:ZooFari/Template:SVG|zoofari]] || 39 |- | ob || {{T0|out of borders|link=n}} || 41 |- | ar || {{T0|Artifacts}} || 42 |- | cb || {{T0|Coablazon}} || 43 |- | rf || {{T0|COAref}} || 44 |} ---- === Reference list === {| class="wikitable" style="margin:.8em 0 0 1.6em" ! code !! alias !! description |- | %<br />{{0|-}}%r<br />{{0|-}}%m<br />{{0|-}}%M<br />{{0|-}}%v<br />{{0|-}}%n<br />{{0|-}}%f<br />{{0|-}}%u<br />{{0|-}}%i<br />{{0|-}}%I || || the file contains {{C|Translation possible - SVG|translatable}} plain text; specifications are<br />"r" for reduced display, with {{C|Translation possible - SVG|categorizing}}<br />"m" like "r" for modifyable text<br />{{0|00}}"M" like "m" with the [[File:Merge-sub-arrows.svg|[[Template:Convert to multilang]]|16px]] box<br />"v" for reduced display, no <s>{{C|Translation possible - SVG|categorizing}}</s><br />"n" for reduced display/numbers, no <s>{{C|Translation possible - SVG|categorizing}}</s><br />"f" for reduced display in same line, no <s>{{C|Translation possible - SVG|categorizing}}</s>.<br />"u" when the generated text is invisible.<br />"i" recommends <switch> option<br />{{0|00}}"I" like "i" with the [[File:Merge-sub-arrows.svg|[[Template:Convert to multilang]]|16px]] box |- | %s<br />%S<br />%C|| || the file contains multilingual text using the {{C|Translation possible - SVG (switch)|switch}} option<br />and <!-- to be kept simple --> it should ''not'' be maintained with [[Commons:SVG Translate tool|Toolforge]]<br /><code><switch></code> controlled variations, with {{C|Switch-controlled SVG|categorizing}} |- | %a<br />%w|| || to transclude {{tl|Add languages}}<br />for (invisible) textual watermarks, %sc=subcat |- | ~<ref name="s"/><br /><br />{{0}}~k<br />{{0}}~u || || the file is bloated by {{C|Adobe files with CDATA blocks|Adobe PGF CDATA}} blocks<br />(specify <code>~=n</code> to avoid subcategorization with u/U)<br />possible sort key for the category<br />user name for categorizing |- | !<br />{{0}}<br />{{0}}<br />{{0}}<br />{{0}}<br />{{0}}<br />{{0|00}}!c<ref name="s"/><br />{{0|00}}<br />{{0|00}}!s<ref name="s"/><br />{{0|00}}!k<ref name="s"/> || || the file contains embedded {{C|SVG images with embedded raster graphics|raster graphics}}<br />Use <code>!=''a''</code> when it consists <u>only</u> of an embedded raster<br />Use <code>!=''f''</code> when the file is just a {{C|Fake SVG}}<br />Use <code>!=''x''</code> when the file is a {{C|Fake SVG}} with just text<br />Use <code>!=''t''</code> when it is only for {{T0|TopoSVG|''topographic structures''}}<br />Use <code>!=''r''</code> when it is for other {{C|SVG images with required raster graphics|required structures}}<br />other category ("-" for none), either full "[<nowiki/>[.." or user name<br />(<code>!c=</code> has precedence over <code>U=</code> and <code>u=</code>)<br />{{C|SVG images with embedded raster graphics|subcategory}} ("-" for none)<br />a sorting key within the category |- | ?<br />{{0}}?b<br />{{0}}?c<br />{{0}}?f<br />{{0}}?o<br />{{0}}?p<br />{{0}}?r<br />{{0}}?u<br />{{0}}?x<br />{{0|00}}?s<ref name="s"/><br />{{0|00}}?w<br />{{0|00}}?t<br />{{0|00}}?k<br />{{0|00}}?n ||style="vertical-align:top"| ⁇ || the file contains {{C|Pictures showing a librsvg bug|SVG bugs}}<br />{{C|Pictures showing a librsvg bug (feGaussianBlur)|blur bug}}<br />{{C|SVG compatibility issues|compatibility}}<br />{{C|Pictures formerly showing a librsvg bug|former bug}}<br />{{C|Pictures showing a librsvg bug (overwritten with a workaround)|overwritten bug}}<br />specify a <code>phab</code> number (see {{t0|Rsvg bug|parameter 1}})<br />{{C|Pictures showing a librsvg bug (SVG replaced)|replaced bug}}<br />{{C|Pictures showing a librsvg bug (unsolved)|unsolved bug}}<br />flowRoot e<u>x</u>ception<br />[[#o-sub|subcategory]] {{0|000}} (see {{t2|Rsvg bug}} docu)<br />topic<br />tool<br />sortkey<br />file name for {{t2|Technically replaced}} |- | § <br />{{0}}§s || || the file is {{C|SVG images with poorly traced elements|inadequately}} vectorized <br /> possible subcategorizing |- | &<br />{{0}}&&<br />{{0}}&c<ref name="s"/><br />{{0}}&k<br />{{0}}&<code>l</code><ref name="s"/><br />{{0}}&s<ref name="s"/> || || the file generation was participated by a ''with_tool''<br />&&=''main_tool'' (default: Inkscape)<br />&c to specify, or "-" suppress, the categorizing<br />&k to specify a sort key<br />&l to specify, or "-" suppress, a logo<br />&s to specify a [[#o-sub|subcategory]] |- | <<br /><h <br /><i <br /><x <br /><v <br /><n <br /><l <br />{{0}}<s<br />{{0}}<c<ref name="s"/> || || the text has been converted to {{C|Path text SVG|path}}s; specifications are<br />"h" for highlighting (also with <code><s=h</code>)<br />"i" to specify that internationalization is required<br />"x" for tagging with {{T0|Should be text}}<br />"v" for reduced text, no <s>{{C|Path text SVG|categorizing}}</s>.<br />only number(s) path text, no <s>{{C|Path text SVG|categorizing}}</s>.<br />due to Librsvg restrictions, no <s>{{C|Path text SVG|categorizing}}</s><br /> possible subcategorizing<br />no categorizing |- | ^<br />{{0}}^s <br />{{0}}^t <br />{{0}}^p <br />{{0}}^c <br />{{0}}^w <br />{{0}}^b || ||type: {{C|Quality images|Quality image}} and/or {{C|Valued images|Valued image}}: see {{T0|Igen/qui}}.<br />scope <br />timestamp <br />page <br />category (prefixed by 'Valued image of ') <br />topic <br />by |- | ><br />{{0}}>c<ref name="s"/> || || the file size is too {{C|Large SVG files|large}} to display the source code<br /><code>&#62;c=-</code> to suppress categorization |- | ×<br />{{0}}×c<ref name="s"/><br />{{0}}×d<br />{{0}}×k<br />{{0}}×n<ref name="s"/><br />{{0}}×s<br />{{0}}×t<ref name="s"/><br />{{0}}×× || || the file is extremely {{C|SVG files to be drawn by hand|simple}} and easy to draw manually<br />or ×=- to suppress categorization<br />display size for the example, in pixel<br />key<br />but it is nowhere used – not worth any effort !<br />subc<br />topic for subcategorizing, e.g. m, c, f, ...<br />flag with {{T|UseXML}} &nbsp; (see {{C|Diagonal bisection square flags (plain)|examples}}) |- | $<br />{{0}}$c<ref name="s"/><br />{{0}}$f<ref name="s"/><br />{{0}}$l<ref name="s"/><br />{{0}}$s<ref name="s"/><br />{{0}}$m<br />{{0}}$u<br />{{0}}$w ||{{0}}<br />{{0|r}}<s>cc</s><ref name="s"/><br />{{0|r}}cf<ref name="s"/><br />{{0|r}}cl<ref name="s"/><br />{{0|r}}cs<ref name="s"/><br />{{0|r}}cm<br />{{0|r}}cu<br />{{0}} || the file was {{C|uploaded with Commonist}}<br />Commonist category, e.g. <code><nowiki>[[Category:Othercat| ]]</nowiki></code><br />Commonist linefeed_before, e.g. <code>$f=br</code><br />Commonist logo, e.g. <code><nowiki>[[File:xyz.svg|20px]]</nowiki></code><br />Commonist subcategory<br />Commonist "more" text, e.g. <code>&amp;nbsp; explanation</code><br />Commonist user, e.g. <code><nowiki>{{U|user}}</nowiki></code><br />to display a topic for Commonist |- | +<br />{{0|-}}+c|| || to generate the parameter <code>Name=</code> for {{t2|Information field}}<br />field name for {{T0|Created with code}} |- | – || || to generate a final {{t2|clr|clear-linefeed}} |- | \+<br />{{0|-}}\+r<br />{{0|-}}\+t<ref name="s"/><br />{{0|-}}\+u<br />{{0|-}}\+l|| <br />\r<br />\t<ref name="s"/><br />\u<br />\l || this file {{lc:{{t0|supersedes}}}} another one<br />the ''reason'' for superseding<br />topic (default: "w", "s" <small>when not suppressed</small>)<br />option: by user<br />option: <code>lang=</code> |- | \-<br />{{0}}<br />{{0|-}}\-r<br />{{0|-}}\-x<br />{{0|-}}\-t<br />{{0|-}}\-l || \<br />{{0}}<br />\r<br />\x<br />\t<br />\l || the file is {{lc:{{t0|superseded}}}} by another one,<br />or a {{T0|bitmap version}} exists for an SVG<br />the ''reason'' for being superseded<br />an extension (when not <code>.png</code>)<br />topic<br />option: <code>lang=</code> |- | \\<br />{{0|-}}\\r<br />{{0|-}}\\q<br />{{0|-}}\\l || <br />\r<br />\q<br />\l || A {{T0|Vector version available|vector version is available}} to that raster image<br />reason text<br />quality tag (s, i)<br />option: <code>lang=</code> |- | \# || || insert {{tl|PDF version available}}. |- | →<br />⇒ || || {{Tle|T=Convert to SVG|→}}<br />{{Tle|T=Convert to SVG|⇒|simple}} |- | ←<br />{{0|-}}←s<br />{{0|-}}←t|| <!-- <s>ni</s> --> || {{Tl|NoInkscape}}: <code>←</code>, <code>←=+</code> , <code>←=-</code> or <code>←=tt</code><br />a style option for {{T0|NoInkscape}}, e.g. <code>←s=0</code>/h /0h <br />text for a topic in NoInkscape |- | ° || || {{Tle|T=Easy-border|p1=topic|w/s|p2=pixel|°}} |- | — || || (U+2014) to categorize {{C|Unused SVG images}} |- | bf<br />{{0}}bfc || || description for {{tl|Broken file}}<br />category |- | {{0|.}}ff || || for {{T0|Fictitious flag}} |- | {{0|.}}bl || || for {{T0|Colorblind|+}} |- | by || U || creates a link to a user name; see {{t0|by|+}} |- | c<ref name="s"/> || cat<ref name="s"/> || change or suppress (<code>c=-</code>) category |- | cat2 || || name of an additional category that should be used |- | cb || || Color box, see {{T0|Igen/cbx}} and [[Template:File generation description/doc#Colorboxes|colorboxes]] |- | cc<ref name="s"/> || || suppress automatic [[Template:Created_with_code/doc#Categorizing|categorization]] with ' code' |- | ci<br />{{0|-}}ci2 || || the {{T|Current|+}} interval, for frequent updates<br />possible 2{{exp|nd}} parameter |- | cni<ref name="s"/> || || only for "Im": category text (or suppression: "-" for none)<br />replaces <small>{{C|SVG created with Inkscape:Important}}</small> |- | ct || c_text || category text, replaces "created with" |- | C<br />{{0|-}}Ct<br />{{0|-}}Cc<ref name="s"/><br />{{0|-}}Cl<br />{{0|-}}Cf<ref name="s"/><br />{{0|-}}C+<ref name="s"/> <br />{{0|-}}Css<ref name="s"/> ||<br />{{0|-}}<br />{{0|-}}<br />{{0|-}}<br />{{0|-}}<br />c+<ref name="s"/> <br />ss<ref name="s"/> || {{T0|Tincture}}s<br />a color for the tincture-"tc" parameter<br />a category for the tincture-"cat" parameter ("-" for none)<br />other label than "Tincture"<br />Cf=n or Cf= for no field name<br />"+" for field name (=default)<br /><code>Css=BY</code> for [[Template talk:Tincture/box|Bavarian]] or other shades |- | cw || || the "[[#cw_par|Created with]]" parameter, for logo/cat/tool |- | e || err || error count ≥ 0, instead of definition with parameter# 2 |- | colspan="2" | editor, editoff || parameters for Retouched picture ([[#RetP|see <code>r</code>]]) |- | f<br />{{0|-}}ft<br />{{0|-}}fc || || for fictional items, see {{t0|Igen/fif}}<br />for other topic<br />for other category |- | {{0|.}}ff || || for {{T0|Fictitious flag}} |- | fn || || field name for {{T0|Information field}}, instead of the "+" |- | fw<br />{{0|-}}fwc<br />{{0|-}}fwe<br />{{0|-}}fwo<br />{{0|-}}fwl<br />{{0|-}}fwt<br />{{0|-}}fws || || {{T0|Fotowerkstatt|}}, with optional parameters (see [[Template:Fotowerkstatt/doc#Igen|description]])<br />{{0|-}}changes<br />{{0|-}}editor<br />{{0|-}}orig<br />{{0|-}}orig-lang<br />{{0|-}}topic<br />{{0|-}}style |- | g<br />{{0|-}}gb<br />{{0|-}}gc<br />{{0|-}}gd<br />{{0|-}}ge<br />{{0|-}}gf<br />{{0|-}}gH<br />{{0|-}}gi<br />{{0|-}}gj<br />{{0|-}}gP<br />{{0|-}}gr<br />{{0|-}}gs<br />{{0|-}}gt<br />{{0|-}}gw<br />g=<code>xx</code><br /><br />{{0|-}}gc=<br />{{0|-}}gk=<br />{{0|-}}gs= | style="vertical-align:top"| <code>gl</code> || {{t0|Graphic Lab/statistics|Graphic Lab}}; g or gl for "{{C|Graphic Lab-en|Graphic Lab-'''en'''}}"<br />or <code>g=bn</code> for "{{C|Graphic Lab-bn}}"<br />or <code>g=c{{color|#aaa|m}}</code> for "{{C|Graphic Lab-Commons}}"<br />or <code>g=de</code> for "{{C|Graphic Lab-de}}"<br />or <code>g=es</code> for "{{C|Graphic Lab-es}}"<br />or <code>g=fr</code> for "{{C|Graphic Lab-fr}}"<br />or <code>g=it</code> for "{{C|Graphic Lab-ch}}"<br />or <code>g=it</code> for "{{C|Graphic Lab-it}}"<br />or <code>g=he</code> for "{{C|Graphic Lab-he}}"<br />or <code>g=pl</code> for "{{C|Graphic Lab-pl}}"<br />or <code>g=ru</code> for "{{C|Graphic Lab-ru}}"<br />or <code>g=sv</code> for "{{C|Graphic Lab-sv}}"<br />or <code>g=tr</code> for "{{C|Graphic Lab-tr}}"<br />or <code>g=w{{color|#aaa|s}}</code> for "{{C|Graphic workshop}}"<br />{{0|00l}}for other "<code>Graphic Lab-xx</code>", if exists<br />{{0}}(use g='''F'''i for "{{C|Graphic Lab-fi}}")<br />a [[#o-sub|subcategory]] for an above Graphic Lab<br />a category sorting key<br />[[Template:Graphic Lab/doc#style|style]] for {{T0|Graphic Lab}}, either nl (new line) or sx (small text) |- | {{0|-}}in || || for {{T0|Convert to international}} |- | k<ref name="s"/><br />K || key<br />{{0}} || sort key for category (and for {{t0|THV}})<br />upper case "K" with space |- | l || L || upload info, or categorization info |- |{{0|.}}lh || || for {{T|Logo history|+}} |- | m<br />M || more<br />{{0}} || additional text (use <code>m=</code> to suppress the final dot)<br />upper case "M" with space |- | {{0|.}}ml || || for {{T0|Convert to multilang}} |- | msg || || additional message box(es) |- | n<br />N || name<br />{{0}} || tool name of <code>Other tool</code> / <code>Unknown SVG facility</code><br />upper case "N" with space |- | {{0|-}}nu || || for {{T0|NoUpdate|+}} |- | o || opt || W3C validator option (see vo / vopt) |- | {{0|-}}oq || || for {{T0|Opaque|+}} |- | {{0|-}}ov || || for {{T0|Overlay|+}} |- | colspan="2" | orig, origoff || parameters for Retouched picture ([[#RetP|see <code>r</code>]]) |- | p || || preceding text |- | pu || || previous user name (for {{T0|SimplSVG}}) |- | r<ref name="s"/><br />R<br /><br /><br /><br /> || || {{t2|Retouched picture}} with parameters{{Anchor|RetP}}<br /><small>(upper case "R" for an advancing {{T0|clr|clear}} is not necessary)</small> r/R= modifications (<code>r=-</code> if modifications unspecified)<br />editor= / editoff=<br />orig= / origoff= |- | {{0|.}}rd || || for {{T0|Redrawn with Text Editor|Redrawn|+}} with Text Editor |- | {{0|.}}re || || for {{T0|Recent|+}} |- | {{0|.}}rf || || for {{T0|COAref|+}} |- | s<br />S<br />s:, su:<br />S:<br />s- || sub<ref name="s"/><br />{{0}}<br />sub:{{0}}<br />Sub:<br />sub- || [[#Subcategory specification|subcategory]]; lower case "s" with expand option<br />upper case "S" with prefixed space "␢"<br /><code>s:</code> to be prefixed with a semicolon ":"<br /><code>S:</code> prefix with semicolon ''and'' space ":␢"<br /><code>s-</code> to be prefixed with a hyphen/minus "-" |- | S- || S || to use {{T0|SimplSVG|+}} |- | S* || || to use {{tl|Igen/sni|sni}} |- | S+ || || to use {{tl|Igen/sni|sni}}, with parameter %p |- | S& || || to use {{tl|Redrawn with Text Editor|rd}} & {{tl|Igen/sni|sni}} |- | sa<br />sb || || '''s'''ize ('''a'''ctual) for [[#Template SimplSVG|template SimplSVG]]<br />'''s'''ize ('''b'''efore) |- | sc || || <code>sc=u</code> to prevent the lowercasing of the 1{{exp|st}} <code>sub</code>-character |- | sd || || subcategory differentiation |- | subcat<ref name="s"/> || !s<ref name="s"/> || ''topic'' for {{C|SVG images with embedded raster graphics:Topics}} |- | ss<ref name="s"/> || || ''see'' <code>Css</code> |- | colspan="2" | source || additional text, currently only used by {{T0|Created with perl|perl}} and {{T0|Created with ItB|ItB}} |- | t<br />T ||<br />T1…T7 || trailing text<br />upper case "T" with an advancing {{T0|clr|clear}} |- | {{0|-}}tr || || for {{T0|Translate|+}} |- | tw<br />{{0}}t<code>l</code><ref name="s"/><br />{{0}}tc<ref name="s"/><br />{{0}}tu<ref name="s"/><br />{{0}}tx<ref name="s"/> || {{0}}<br />{{0}}<br />{{0}} || specify a tool (camera) for {{t2|Taken with}}<br />logo or "-"<br />category or "-"<br />username or "-"<br />text or "-" |- | u<br />U || user<br />{{0}}by || user name (or user name link, e.g. <nowiki>{{Ut|user}}</nowiki>)<br />uppercase "{{T0|U}}" creates the user name link |- | {{0|.}}up || || for {{T0|Update|+}} = {{T0|Outdated}} |- | vc<br />vo<br />vt<br />vs<ref name="s"/><br />vw || vcat<br />vopt<br />vtxt<br />vstyle<ref name="s"/><br />vwidth || validator categorization<br />validator option (also o or opt)<br />validator more-text<br />[[#vstyle|validator style]] option, mainly for {{T0|SimplSVG}}<br />validator width (not used) |- | vsub<ref name="s"/><br />Vs || || subcategory of Text editor ("-" to suppress subcategorizing)<br />"Vs" like "vsub" with space |- | v<ref name="s"/><br />V || vt, vtxt<br />{{0}} ||additional validation text<br />upper case "V" with space |- | w<ref name="s"/><br />{{0}} || what<ref name="s"/><br />topic<ref name="s"/> || define (if other than <code>s</code>) or suppress (with <code>w=-</code>)<br />the code for the {{t0|Igen/top|topic}} |- | {{0|.}}wc || || for {{T0|Convert to wikichart}} |- | {{0|.}}wt || || for {{T0|Convert to wikitable}} |- style="background:#EEF" |colspan="3"| more parameters – mainly for the {{C|Created with ... templates}} (raster graphics) |- |colspan="2"|par1|| to specify e.g. a number |- |colspan="2"|mode|| e.g. the stacking mode |- |colspan="2"|type, item, par2|| not yet used |} <references/> <includeonly>[[Category:Image generation templates| ]]{{ifsandbox|[[Category:Sandbox templates]] |[[Category:Formatting templates|{{PAGENAME}}]]{{Protected}} [[Category:SVG created with ... templates|<!-- intentional --> <!-- space -->{{PAGENAME}}]] }}</includeonly> 6dhjlccwaiqevja0uyypufl9jdec4j3 Tempilet:Suppress categories 10 1441 10973 2024-08-28T17:27:08Z commons>CptViraj 0 Protected "[[Template:Suppress categories]]": [[Special:MyLanguage/Commons:Protection policy|Widely used template]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite)) 10973 wikitext text/x-wiki <includeonly>{{</includeonly><includeonly>safesubst:</includeonly><includeonly>#invoke:Suppress categories|main}}</includeonly><noinclude> {{documentation}} <!-- Categories go on the /doc subpage and interwikis go on Wikidata. --> </noinclude> s55edmh1i64zjrwefm54pqc0xrgt289 10974 10973 2026-08-25T23:38:40Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Suppress_categories]] 10973 wikitext text/x-wiki <includeonly>{{</includeonly><includeonly>safesubst:</includeonly><includeonly>#invoke:Suppress categories|main}}</includeonly><noinclude> {{documentation}} <!-- Categories go on the /doc subpage and interwikis go on Wikidata. --> </noinclude> s55edmh1i64zjrwefm54pqc0xrgt289 Module:Suppress categories 828 1442 10975 2024-08-28T17:28:51Z commons>CptViraj 0 Protected "[[Module:Suppress categories]]": [[Special:MyLanguage/Protection policy|Widely used Lua-module]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite)) 10975 Scribunto text/plain -- This is a simple module to strip categories from wikitext. It does -- not support nested links or magic words like __TOC__, etc. Even so, -- it should still handle most categories. local p = {} -- Detects if a category link is valid or not. If it is valid, -- the function returns the blank string. If not, the input -- is returned with no changes. local function processCategory( all, submatch ) local beforePipe = mw.ustring.match( submatch, '^(.-)[%s_]*|[%s_]*.-$' ) beforePipe = beforePipe or submatch if mw.ustring.match( beforePipe, '[%[%]<>{}%c\n]' ) then return all else return '' end end -- Preprocess the content if we aren't being called from #invoke, -- and pass it to gsub to remove valid category links. local function suppress( content, isPreprocessed ) if not isPreprocessed then content = mw.getCurrentFrame():preprocess( content ) end content = mw.ustring.gsub( content, '(%[%[[%s_]*[cC][aA][tT][eE][gG][oO][rR][yY][%s_]*:[%s_]*(.-)[%s_]*%]%])', processCategory ) return content end -- Get the content to suppress categories from, and find -- whether the content has already been preprocessed. (If the -- module is called from #invoke, it has been preprocessed already.) function p.main( frame ) local content, isPreprocessed if frame == mw.getCurrentFrame() then content = frame:getParent().args[1] if frame.args[1] then content = frame.args[1] end isPreprocessed = true else content = frame isPreprocessed = false end return suppress( content, isPreprocessed ) end return p 1q32hr238py5zckhzhojzbjzsdqguig 10976 10975 2026-08-25T23:38:40Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Suppress_categories]] 10975 Scribunto text/plain -- This is a simple module to strip categories from wikitext. It does -- not support nested links or magic words like __TOC__, etc. Even so, -- it should still handle most categories. local p = {} -- Detects if a category link is valid or not. If it is valid, -- the function returns the blank string. If not, the input -- is returned with no changes. local function processCategory( all, submatch ) local beforePipe = mw.ustring.match( submatch, '^(.-)[%s_]*|[%s_]*.-$' ) beforePipe = beforePipe or submatch if mw.ustring.match( beforePipe, '[%[%]<>{}%c\n]' ) then return all else return '' end end -- Preprocess the content if we aren't being called from #invoke, -- and pass it to gsub to remove valid category links. local function suppress( content, isPreprocessed ) if not isPreprocessed then content = mw.getCurrentFrame():preprocess( content ) end content = mw.ustring.gsub( content, '(%[%[[%s_]*[cC][aA][tT][eE][gG][oO][rR][yY][%s_]*:[%s_]*(.-)[%s_]*%]%])', processCategory ) return content end -- Get the content to suppress categories from, and find -- whether the content has already been preprocessed. (If the -- module is called from #invoke, it has been preprocessed already.) function p.main( frame ) local content, isPreprocessed if frame == mw.getCurrentFrame() then content = frame:getParent().args[1] if frame.args[1] then content = frame.args[1] end isPreprocessed = true else content = frame isPreprocessed = false end return suppress( content, isPreprocessed ) end return p 1q32hr238py5zckhzhojzbjzsdqguig Tempilet:Bearbeiten 10 1443 10977 2024-08-08T13:25:30Z commons>Jarekt 0 10977 wikitext text/x-wiki <onlyinclude> <div><span class="mw-editsection plainlinks {{{2|}}}" style="margin-top:1em; clear: both; border: 2px dotted #666666; padding:0.5em 1em;" > {{#if:{{{1|}}}|[{{fullurl:{{FULLPAGENAME}}/{{{1|}}}}} {{FULLPAGENAME}}/{{{1|}}} anzeigen] •&nbsp;}} [{{fullurl:{{NAMESPACE}}:{{PAGENAME}}{{#if:{{{1|}}}|/{{{1|}}}}}|action=edit}} Bearbeiten] • [{{fullurl:{{NAMESPACE}}:{{PAGENAME}}{{#if:{{{1|}}}|/{{{1|}}}}}|action=history}} Versionen] • [{{fullurl:{{NAMESPACE}}:{{PAGENAME}}{{#if:{{{1|}}}|/{{{1|}}}}}|action=purge}} Cache löschen] • [{{fullurl:{{NAMESPACE}}:{{PAGENAME}}{{#if:{{{1|}}}|/{{{1|}}}}}|action=info}} Seiteninformation] </span></div></onlyinclude> {{documentation}} gynuzrszp20ieb5m65n8elrbzhsj788 10978 10977 2026-08-25T23:38:40Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Bearbeiten]] 10977 wikitext text/x-wiki <onlyinclude> <div><span class="mw-editsection plainlinks {{{2|}}}" style="margin-top:1em; clear: both; border: 2px dotted #666666; padding:0.5em 1em;" > {{#if:{{{1|}}}|[{{fullurl:{{FULLPAGENAME}}/{{{1|}}}}} {{FULLPAGENAME}}/{{{1|}}} anzeigen] •&nbsp;}} [{{fullurl:{{NAMESPACE}}:{{PAGENAME}}{{#if:{{{1|}}}|/{{{1|}}}}}|action=edit}} Bearbeiten] • [{{fullurl:{{NAMESPACE}}:{{PAGENAME}}{{#if:{{{1|}}}|/{{{1|}}}}}|action=history}} Versionen] • [{{fullurl:{{NAMESPACE}}:{{PAGENAME}}{{#if:{{{1|}}}|/{{{1|}}}}}|action=purge}} Cache löschen] • [{{fullurl:{{NAMESPACE}}:{{PAGENAME}}{{#if:{{{1|}}}|/{{{1|}}}}}|action=info}} Seiteninformation] </span></div></onlyinclude> {{documentation}} gynuzrszp20ieb5m65n8elrbzhsj788 Tempilet:Incl 10 1444 10979 2018-01-17T10:08:52Z commons>Tacsipacsi 0 [[COM:AES|←]]Redirected page to [[Template:Bearbeiten]] 10979 wikitext text/x-wiki #REDIRECT [[Template:Bearbeiten]] ezq9biif2elk3666fi6ga8mbt4jpy8x 10980 10979 2026-08-25T23:38:40Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Incl]] 10979 wikitext text/x-wiki #REDIRECT [[Template:Bearbeiten]] ezq9biif2elk3666fi6ga8mbt4jpy8x Tempilet:NoteBox 10 1445 10981 2025-02-18T12:46:42Z commons>CptViraj 0 Protected "[[Template:NoteBox]]": [[Special:MyLanguage/Commons:Protection policy|Widely used template]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite)) 10981 wikitext text/x-wiki <onlyinclude>{{#invoke:Autotranslate|autotranslate | base = NoteBox/i18n | text = {{{1|{{{text|<noinclude>{{{text}}}</noinclude>}}}}}} | type = {{{2|{{{type|}}}}}} | inline = {{{inline|}}} | demo = {{{demo|<noinclude>1</noinclude>}}} }}</onlyinclude> {{Documentation}} bywbu7q1ogvljgnp50uve2nnzu2yaiu 10982 10981 2026-08-25T23:38:40Z RAPTOR7762 18 1 revision imported from [[:commons:Template:NoteBox]] 10981 wikitext text/x-wiki <onlyinclude>{{#invoke:Autotranslate|autotranslate | base = NoteBox/i18n | text = {{{1|{{{text|<noinclude>{{{text}}}</noinclude>}}}}}} | type = {{{2|{{{type|}}}}}} | inline = {{{inline|}}} | demo = {{{demo|<noinclude>1</noinclude>}}} }}</onlyinclude> {{Documentation}} bywbu7q1ogvljgnp50uve2nnzu2yaiu Tempilet:NoteBox/i18n/en 10 1446 10983 2021-07-21T02:11:14Z commons>ExE Boss 0 Updating to match new version of source page: Sort parameters 10983 wikitext text/x-wiki <languages/> <onlyinclude>{{NoteBox/layout <!-- Parameters --> | text = {{{text|}}} | type = {{{type|}}} | inline = {{{inline|}}} | demo = {{{demo|}}} <!-- Translations --> | msg-alt = Note | msg-note = Note: }}</onlyinclude> {{Translated tag}} qd4jqplt7zqvq6q6t3fes7kwbn0nu0b 10984 10983 2026-08-25T23:38:40Z RAPTOR7762 18 1 revision imported from [[:commons:Template:NoteBox/i18n/en]] 10983 wikitext text/x-wiki <languages/> <onlyinclude>{{NoteBox/layout <!-- Parameters --> | text = {{{text|}}} | type = {{{type|}}} | inline = {{{inline|}}} | demo = {{{demo|}}} <!-- Translations --> | msg-alt = Note | msg-note = Note: }}</onlyinclude> {{Translated tag}} qd4jqplt7zqvq6q6t3fes7kwbn0nu0b Tempilet:NoteBox/layout 10 1447 10985 2021-07-21T02:53:57Z commons>ExE Boss 0 Use [[:File:OOjs UI icon lightbulb-yellow.svg|File:OOjs UI icon lightbulb‑yellow.svg]] 10985 wikitext text/x-wiki <onlyinclude>{{#if: {{#if:{{{text|}}}|{{{text|}}}|{{yesno|{{{demo|<noinclude>1</noinclude>}}}}}}} | <templatestyles src="Template:NoteBox/styles.css" /><div role="note" class="note note-{{#switch:{{{type|}}} |gotcha=error |=info |#default={{{type|}}} }} {{#if:{{yesno|{{{inline|}}}}}|note-inline}}">{{{text}}}</div> | [[File:OOjs UI icon lightbulb-yellow.svg|18px|{{{msg-alt}}}|link=]]&nbsp;'''{{{msg-note}}}''' }}</onlyinclude> dya7ygc8pb84vjml6gnwxz3o16up3if 10986 10985 2026-08-25T23:38:40Z RAPTOR7762 18 1 revision imported from [[:commons:Template:NoteBox/layout]] 10985 wikitext text/x-wiki <onlyinclude>{{#if: {{#if:{{{text|}}}|{{{text|}}}|{{yesno|{{{demo|<noinclude>1</noinclude>}}}}}}} | <templatestyles src="Template:NoteBox/styles.css" /><div role="note" class="note note-{{#switch:{{{type|}}} |gotcha=error |=info |#default={{{type|}}} }} {{#if:{{yesno|{{{inline|}}}}}|note-inline}}">{{{text}}}</div> | [[File:OOjs UI icon lightbulb-yellow.svg|18px|{{{msg-alt}}}|link=]]&nbsp;'''{{{msg-note}}}''' }}</onlyinclude> dya7ygc8pb84vjml6gnwxz3o16up3if Tempilet:NoteBox/styles.css 10 1448 10987 2025-08-04T00:53:09Z commons>Nemoralis 0 10987 sanitized-css text/css .note { background-position: left 7px top 50%; padding: 0.5em 0.5em 0.5em 40px; margin: 0.5em 0; overflow: hidden; background-color: var(--background-color-base, #fff); color: var(--color-base, #202122); background-repeat: no-repeat; border: 1px solid var(--border-color-base, #ddd); } .note-inline { display: inline-block; vertical-align: middle; } .note-info { background-color: var(--background-color-base, #fff); color: var(--color-base, #202122); /* [[File:OOjs_UI_icon_information-progressive.svg]] */ background-image: url(https://upload.wikimedia.org/wikipedia/commons/e/ec/OOjs_UI_icon_information-progressive.svg); background-size: 25px; border: 1px solid var(--border-color-progressive, #6485d1); padding-left: 40px; min-height: 25px; } .note-reminder { background-color: var(--background-color-warning-subtle, #fdf2d5); color: var(--color-base, #202122); /* [[File:OOjs_UI_icon_lightbulb-yellow.svg]] */ background-image: url(https://upload.wikimedia.org/wikipedia/commons/a/a8/OOjs_UI_icon_lightbulb-yellow.svg); background-size: 25px; border: 1px solid var(--border-color-content-removed, #ffe49c); min-height: 25px; } .note-warn { background-color: var(--background-color-warning-subtle, #fdf2d5); color: var(--color-base, #202122); /* [[File:OOjs_UI_icon_alert-warning.svg]] */ background-image: url(https://upload.wikimedia.org/wikipedia/commons/3/3b/OOjs_UI_icon_alert-warning.svg); background-size: 25px; border: 1px solid var(--border-color-content-removed, #ffe49c); min-height: 25px; } .note-error { background-color: var(--background-color-error-subtle, #ffe9e5); color: var(--color-base, #202122); /* [[File:OOjs_UI_icon_notice-destructive.svg]] */ background-image: url(https://upload.wikimedia.org/wikipedia/commons/b/bf/OOjs_UI_icon_notice-destructive.svg); background-size: 25px; border: 1px solid var(--border-color-destructive, #f54739); min-height: 25px; } shgaxcgdm2r67fgvxo185eu5wvncnen 10988 10987 2026-08-25T23:38:40Z RAPTOR7762 18 1 revision imported from [[:commons:Template:NoteBox/styles.css]] 10987 sanitized-css text/css .note { background-position: left 7px top 50%; padding: 0.5em 0.5em 0.5em 40px; margin: 0.5em 0; overflow: hidden; background-color: var(--background-color-base, #fff); color: var(--color-base, #202122); background-repeat: no-repeat; border: 1px solid var(--border-color-base, #ddd); } .note-inline { display: inline-block; vertical-align: middle; } .note-info { background-color: var(--background-color-base, #fff); color: var(--color-base, #202122); /* [[File:OOjs_UI_icon_information-progressive.svg]] */ background-image: url(https://upload.wikimedia.org/wikipedia/commons/e/ec/OOjs_UI_icon_information-progressive.svg); background-size: 25px; border: 1px solid var(--border-color-progressive, #6485d1); padding-left: 40px; min-height: 25px; } .note-reminder { background-color: var(--background-color-warning-subtle, #fdf2d5); color: var(--color-base, #202122); /* [[File:OOjs_UI_icon_lightbulb-yellow.svg]] */ background-image: url(https://upload.wikimedia.org/wikipedia/commons/a/a8/OOjs_UI_icon_lightbulb-yellow.svg); background-size: 25px; border: 1px solid var(--border-color-content-removed, #ffe49c); min-height: 25px; } .note-warn { background-color: var(--background-color-warning-subtle, #fdf2d5); color: var(--color-base, #202122); /* [[File:OOjs_UI_icon_alert-warning.svg]] */ background-image: url(https://upload.wikimedia.org/wikipedia/commons/3/3b/OOjs_UI_icon_alert-warning.svg); background-size: 25px; border: 1px solid var(--border-color-content-removed, #ffe49c); min-height: 25px; } .note-error { background-color: var(--background-color-error-subtle, #ffe9e5); color: var(--color-base, #202122); /* [[File:OOjs_UI_icon_notice-destructive.svg]] */ background-image: url(https://upload.wikimedia.org/wikipedia/commons/b/bf/OOjs_UI_icon_notice-destructive.svg); background-size: 25px; border: 1px solid var(--border-color-destructive, #f54739); min-height: 25px; } shgaxcgdm2r67fgvxo185eu5wvncnen Tempilet:I18n/important 10 1449 10989 2023-05-26T13:49:03Z commons>TadejM 0 10989 wikitext text/x-wiki {{LangSwitch |de=…Important |it=…importante |nl=…Belangrijk |pt=…importante |sl=…&nbsp;pomembno |default=…important |lang={{{lang|{{int:lang}}}}}}}<noinclude><br>for Inkscape [[Category:Internationalization templates using LangSwitch|{{PAGENAME}}]]</noinclude> rufuzhsn881tkplvztl5pcg7cknips2 10990 10989 2026-08-25T23:38:40Z RAPTOR7762 18 1 revision imported from [[:commons:Template:I18n/important]] 10989 wikitext text/x-wiki {{LangSwitch |de=…Important |it=…importante |nl=…Belangrijk |pt=…importante |sl=…&nbsp;pomembno |default=…important |lang={{{lang|{{int:lang}}}}}}}<noinclude><br>for Inkscape [[Category:Internationalization templates using LangSwitch|{{PAGENAME}}]]</noinclude> rufuzhsn881tkplvztl5pcg7cknips2 Tempilet:Igen/cwt 10 1450 10991 2025-12-31T13:56:38Z commons>Aaron Liu 0 add labplot 10991 wikitext text/x-wiki <noinclude>[[Category:Image generation subtemplates| ]]</noinclude> <onlyinclude><includeonly>{{#ifeq:{{{2|}}}|-1|Created with|<!-- -->{{#ifeq:{{{1}}}|X|Extracted|Created}} {{#ifeq:{{{1}}}|K|in the|with}}}}<!-- --> {{#ifeq:{{{2|}}}|-1|Unknown tool|{{#switch:{{lc:{{{1|}}}}} |a|a$|ia|adobe|illustrator=Adobe Illustrator |ah=Adobe-hand |ac=Vectornator |b=BKchem |c=ChemDraw |d=CorelDRAW |e=ElCompLib |f=Fig2SVG |g=Gnuplot |h|ih=Inkscape-hand |i|i$|im|io|ic|ii|iz=Inkscape |is|ims|izs=Inkscape |ib=ItB |=Inkscape-default <!-- when "1=" ("||") --> |j=JFreeChart |k=SandBox |l=LibreOffice |lab|labplot=LabPlot |m=MetaPost |n=...<!-- --> |ne=Natural Earth |o=Other tool |p=Pstoedit |ps=PostScript |q=QGIS |r=R |s=Sodipodi |sp=Scalable Pixels |t|text editor|t-|s-=HandSVG |u=Unknown tool |v=Vim |vfpt=VectorFieldPlot |vm=Vector Magic |w=Winplot |wpdc=Wpdc |x=Inkscape<!-- -extract y,z --> |-=X |gedit=gedit<!-- lcfirst --> |#default={{#if:{{Igen/par|{{{1|}}}|1}}|{{{1}}}|<!-- -->{{#if:{{{3|}}}|Other tool|{{#ifeq:{{{2|}}}|-1|Other tool|Inkscape-undef}}}}}}}}}}</includeonly></onlyinclude> rz0h7id10mrd30dyhlsbin22lbf9h0k 10992 10991 2026-08-25T23:38:40Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Igen/cwt]] 10991 wikitext text/x-wiki <noinclude>[[Category:Image generation subtemplates| ]]</noinclude> <onlyinclude><includeonly>{{#ifeq:{{{2|}}}|-1|Created with|<!-- -->{{#ifeq:{{{1}}}|X|Extracted|Created}} {{#ifeq:{{{1}}}|K|in the|with}}}}<!-- --> {{#ifeq:{{{2|}}}|-1|Unknown tool|{{#switch:{{lc:{{{1|}}}}} |a|a$|ia|adobe|illustrator=Adobe Illustrator |ah=Adobe-hand |ac=Vectornator |b=BKchem |c=ChemDraw |d=CorelDRAW |e=ElCompLib |f=Fig2SVG |g=Gnuplot |h|ih=Inkscape-hand |i|i$|im|io|ic|ii|iz=Inkscape |is|ims|izs=Inkscape |ib=ItB |=Inkscape-default <!-- when "1=" ("||") --> |j=JFreeChart |k=SandBox |l=LibreOffice |lab|labplot=LabPlot |m=MetaPost |n=...<!-- --> |ne=Natural Earth |o=Other tool |p=Pstoedit |ps=PostScript |q=QGIS |r=R |s=Sodipodi |sp=Scalable Pixels |t|text editor|t-|s-=HandSVG |u=Unknown tool |v=Vim |vfpt=VectorFieldPlot |vm=Vector Magic |w=Winplot |wpdc=Wpdc |x=Inkscape<!-- -extract y,z --> |-=X |gedit=gedit<!-- lcfirst --> |#default={{#if:{{Igen/par|{{{1|}}}|1}}|{{{1}}}|<!-- -->{{#if:{{{3|}}}|Other tool|{{#ifeq:{{{2|}}}|-1|Other tool|Inkscape-undef}}}}}}}}}}</includeonly></onlyinclude> rz0h7id10mrd30dyhlsbin22lbf9h0k Tempilet:Igen/2nd 10 1451 10993 2022-11-21T10:06:11Z commons>Sarang 0 recycle 10993 wikitext text/x-wiki <noinclude>[[Category:Image generation subtemplates| ]] this template does nothing — but its transclusion list will show where a 2{{exp|nd}} {{T0|Igen/cwt|access}} had been necessary </noinclude> 8o4j2m5muqmdx64nsok950jvudnry4b 10994 10993 2026-08-25T23:38:40Z RAPTOR7762 18 1 revision imported from [[:commons:Template:Igen/2nd]] 10993 wikitext text/x-wiki <noinclude>[[Category:Image generation subtemplates| ]] this template does nothing — but its transclusion list will show where a 2{{exp|nd}} {{T0|Igen/cwt|access}} had been necessary </noinclude> 8o4j2m5muqmdx64nsok950jvudnry4b Module:Colon 828 1452 10995 2024-06-11T09:46:02Z commons>Ebrahim 0 Changed protection settings for "[[Module:Colon]]": used in the interface MediaWiki:Userrights-summary ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite)) 10995 Scribunto text/plain require('strict') local getArgs = require('Module:Arguments').getArgs local langSwitch = require('Module:LangSwitch')._langSwitch local p = {} function p._colon(args) local lang = args.lang or mw.getCurrentFrame():preprocess("{{Int:Lang}}") -- Please keep the ASCII colon returned as HTML-encoded everywhere, as it MUST NOT be parsed as wiki markup local colons = { -- Colon with no space before and space after -- ": "" ['ger'] = '&#x3A;&#32;', -- Colon with narrow space before and space after -- " : " ['fr'] = '&#x202F;&#x3A;&#32;', --[=[ Colon with non-breaking space before and space after, avoiding confusion with: several Arabic diacritics, U+0589 Armenian punctuation Full stop, U+05C3 Hebrew punctuation sign Sof Pasuk, U+0983 Bengali combining sign Visarga, U+0903 Devanagari combining sign Visarga, U+0A03 Gurmukhi combining sign Visarga, U+0A83 Gujarati combining sign Visarga, U+0B03 Oryia combining sign Visarga, U+0B83 Tamil combining sign Visarga, Telugu combining sign Visarga, Kannada combining sign Visarga, U+0D03 Malayalam combining sign Visarga, U+0D83 Sinhalese combining sign Visarga, U+0F7F Tibetan combining sign Rnam Bcad (Nam Che), U+17C7 / U+17C8 Khmer combining signs Reahmuk / Yukaleakpintu, U+2D53 Tifinagh letter Yu (Touareg Yaw) ]=] -- " : " ['sp'] = '&nbsp;&#x3A;&#32;', --[=[ Myanmar: do not use the ASCII colon (too confusable with a Myanmar letter in many fonts, notably at small sizes); use an en-dash instead ]=] -- " – " ['my'] = '&#x202F;&#x2013;&#32;', -- No spacing -- ":" ['no'] = '&#x3A;', -- Ethiopic punctuation sign colon -- "፥ " ['eth'] = '&#x1365;&#32;', -- Mongolian/Mandchu punctuation sign colon -- "᠄" ['mong'] = '&#x1804;', --[=[ CJK punctuation fullwidth colon (rotated if vertical layout) for Indo-Sinitic scripts used along with Chinese ]=] -- ":" ['cjk'] = '&#xFF1A;' } local text_args = { ['default'] = colons['ger'], ['af'] = colons['ger'], ['am'] = colons['eth'], ['ar'] = colons['sp'], ['Arab'] = colons['sp'], ['Armn'] = colons['sp'], ['arz'] = colons['sp'], ['bar'] = colons['ger'], ['be-tarask'] = colons['ger'], ['be'] = colons['ger'], ['Beng'] = colons['sp'], ['ber'] = colons['sp'], ['bg'] = colons['ger'], ['bn'] = colons['sp'], ['bo'] = colons['sp'], ['Bpmf'] = colons['cjk'], ['br'] = colons['fr'], ['bs'] = colons['ger'], ['ca'] = colons['ger'], ['co'] = colons['ger'], ['cs'] = colons['ger'], ['Cyrl'] = colons['ger'], ['de'] = colons['ger'], ['Deva'] = colons['sp'], ['el'] = colons['ger'], ['eml'] = colons['ger'], ['en'] = colons['ger'], ['es'] = colons['ger'], ['Ethi'] = colons['eth'], ['ext'] = colons['ger'], ['fa'] = colons['sp'], ['fr-be'] = colons['fr'], ['fr-ca'] = colons['fr'], ['fr-ch'] = colons['fr'], ['fr-lb'] = colons['fr'], ['fr'] = colons['fr'], ['gl'] = colons['ger'], ['glk'] = colons['sp'], ['Grek'] = colons['ger'], ['gsw'] = colons['gsw'], ['gu'] = colons['sp'], ['Gujr'] = colons['sp'], ['Guru'] = colons['sp'], ['Hang'] = colons['cjk'], ['Hani'] = colons['cjk'], ['Hans'] = colons['cjk'], ['Hant'] = colons['cjk'], ['he'] = colons['sp'], ['Hebr'] = colons['sp'], ['hi'] = colons['sp'], ['hr'] = colons['ger'], ['hu'] = colons['ger'], ['hy'] = colons['sp'], ['ii'] = colons['cjk'], ['it'] = colons['ger'], ['ja'] = colons['cjk'], ['Jpan'] = colons['cjk'], ['Khmr'] = colons['sp'], ['km'] = colons['sp'], ['kn'] = colons['sp'], ['Knda'] = colons['sp'], ['ko-kp'] = colons['ger'], ['ko'] = colons['ger'], ['la'] = colons['ger'], ['lb'] = colons['ger'], ['li'] = colons['ger'], ['lzh'] = colons['cjk'], ['mk'] = colons['ger'], ['ml'] = colons['sp'], ['Mlym'] = colons['sp'], ['mn-Mong'] = colons['mong'], ['Mong'] = colons['mong'], ['my'] = colons['my'], ['Mymr'] = colons['my'], ['nap'] = colons['ger'], ['nds-nl'] = colons['ger'], ['nds'] = colons['ger'], ['ne'] = colons['sp'], ['nl'] = colons['ger'], ['oc'] = colons['fr'], ['or'] = colons['sp'], ['Orya'] = colons['sp'], ['pa'] = colons['sp'], ['Phpa'] = colons['cjk'], ['pnt'] = colons['ger'], ['prd'] = colons['sp'], ['ps'] = colons['sp'], ['pt-br'] = colons['ger'], ['pt'] = colons['ger'], ['rgn'] = colons['ger'], ['rm'] = colons['ger'], ['ro'] = colons['ger'], ['ru'] = colons['ger'], ['scn'] = colons['ger'], ['shy'] = colons['sp'], ['si'] = colons['sp'], ['Sinh'] = colons['sp'], ['sk'] = colons['ger'], ['sl'] = colons['ger'], ['sr-ec'] = colons['ger'], ['sr-el'] = colons['ger'], ['sr-Latn'] = colons['ger'], ['sr'] = colons['ger'], ['ta'] = colons['sp'], ['Tale'] = colons['cjk'], ['Talu'] = colons['cjk'], ['Taml'] = colons['sp'], ['te'] = colons['sp'], ['Telu'] = colons['sp'], ['Tfng'] = colons['sp'], ['th'] = colons['no'], ['Thai'] = colons['no'], ['ti'] = colons['eth'], ['Tibt'] = colons['sp'], ['tzm'] = colons['sp'], ['ug'] = colons['sp'], ['ur'] = colons['sp'], ['vec'] = colons['ger'], ['vls'] = colons['ger'], ['wa'] = colons['fr'], ['wuu'] = colons['cjk'], ['ydd'] = colons['sp'], ['yi'] = colons['sp'], ['Yiii'] = colons['cjk'], ['yue'] = colons['cjk'], ['zh-Hans'] = colons['cjk'], ['zh-Hant'] = colons['cjk'], ['zh'] = colons['cjk'], ['Zinh-nbsp-Po-space'] = colons['sp'], ['Zinh-nnbsp-Po-space'] = colons['fr'], ['Zinh-Po-space'] = colons['ger'], ['Zinh-Po'] = colons['no'] } return langSwitch(text_args, lang) end function p.colon(frame) return p._colon(getArgs(frame)) end return p 1uua8388ilhwwsz8m7s82edziquxn3u 10996 10995 2026-08-25T23:38:40Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Colon]] 10995 Scribunto text/plain require('strict') local getArgs = require('Module:Arguments').getArgs local langSwitch = require('Module:LangSwitch')._langSwitch local p = {} function p._colon(args) local lang = args.lang or mw.getCurrentFrame():preprocess("{{Int:Lang}}") -- Please keep the ASCII colon returned as HTML-encoded everywhere, as it MUST NOT be parsed as wiki markup local colons = { -- Colon with no space before and space after -- ": "" ['ger'] = '&#x3A;&#32;', -- Colon with narrow space before and space after -- " : " ['fr'] = '&#x202F;&#x3A;&#32;', --[=[ Colon with non-breaking space before and space after, avoiding confusion with: several Arabic diacritics, U+0589 Armenian punctuation Full stop, U+05C3 Hebrew punctuation sign Sof Pasuk, U+0983 Bengali combining sign Visarga, U+0903 Devanagari combining sign Visarga, U+0A03 Gurmukhi combining sign Visarga, U+0A83 Gujarati combining sign Visarga, U+0B03 Oryia combining sign Visarga, U+0B83 Tamil combining sign Visarga, Telugu combining sign Visarga, Kannada combining sign Visarga, U+0D03 Malayalam combining sign Visarga, U+0D83 Sinhalese combining sign Visarga, U+0F7F Tibetan combining sign Rnam Bcad (Nam Che), U+17C7 / U+17C8 Khmer combining signs Reahmuk / Yukaleakpintu, U+2D53 Tifinagh letter Yu (Touareg Yaw) ]=] -- " : " ['sp'] = '&nbsp;&#x3A;&#32;', --[=[ Myanmar: do not use the ASCII colon (too confusable with a Myanmar letter in many fonts, notably at small sizes); use an en-dash instead ]=] -- " – " ['my'] = '&#x202F;&#x2013;&#32;', -- No spacing -- ":" ['no'] = '&#x3A;', -- Ethiopic punctuation sign colon -- "፥ " ['eth'] = '&#x1365;&#32;', -- Mongolian/Mandchu punctuation sign colon -- "᠄" ['mong'] = '&#x1804;', --[=[ CJK punctuation fullwidth colon (rotated if vertical layout) for Indo-Sinitic scripts used along with Chinese ]=] -- ":" ['cjk'] = '&#xFF1A;' } local text_args = { ['default'] = colons['ger'], ['af'] = colons['ger'], ['am'] = colons['eth'], ['ar'] = colons['sp'], ['Arab'] = colons['sp'], ['Armn'] = colons['sp'], ['arz'] = colons['sp'], ['bar'] = colons['ger'], ['be-tarask'] = colons['ger'], ['be'] = colons['ger'], ['Beng'] = colons['sp'], ['ber'] = colons['sp'], ['bg'] = colons['ger'], ['bn'] = colons['sp'], ['bo'] = colons['sp'], ['Bpmf'] = colons['cjk'], ['br'] = colons['fr'], ['bs'] = colons['ger'], ['ca'] = colons['ger'], ['co'] = colons['ger'], ['cs'] = colons['ger'], ['Cyrl'] = colons['ger'], ['de'] = colons['ger'], ['Deva'] = colons['sp'], ['el'] = colons['ger'], ['eml'] = colons['ger'], ['en'] = colons['ger'], ['es'] = colons['ger'], ['Ethi'] = colons['eth'], ['ext'] = colons['ger'], ['fa'] = colons['sp'], ['fr-be'] = colons['fr'], ['fr-ca'] = colons['fr'], ['fr-ch'] = colons['fr'], ['fr-lb'] = colons['fr'], ['fr'] = colons['fr'], ['gl'] = colons['ger'], ['glk'] = colons['sp'], ['Grek'] = colons['ger'], ['gsw'] = colons['gsw'], ['gu'] = colons['sp'], ['Gujr'] = colons['sp'], ['Guru'] = colons['sp'], ['Hang'] = colons['cjk'], ['Hani'] = colons['cjk'], ['Hans'] = colons['cjk'], ['Hant'] = colons['cjk'], ['he'] = colons['sp'], ['Hebr'] = colons['sp'], ['hi'] = colons['sp'], ['hr'] = colons['ger'], ['hu'] = colons['ger'], ['hy'] = colons['sp'], ['ii'] = colons['cjk'], ['it'] = colons['ger'], ['ja'] = colons['cjk'], ['Jpan'] = colons['cjk'], ['Khmr'] = colons['sp'], ['km'] = colons['sp'], ['kn'] = colons['sp'], ['Knda'] = colons['sp'], ['ko-kp'] = colons['ger'], ['ko'] = colons['ger'], ['la'] = colons['ger'], ['lb'] = colons['ger'], ['li'] = colons['ger'], ['lzh'] = colons['cjk'], ['mk'] = colons['ger'], ['ml'] = colons['sp'], ['Mlym'] = colons['sp'], ['mn-Mong'] = colons['mong'], ['Mong'] = colons['mong'], ['my'] = colons['my'], ['Mymr'] = colons['my'], ['nap'] = colons['ger'], ['nds-nl'] = colons['ger'], ['nds'] = colons['ger'], ['ne'] = colons['sp'], ['nl'] = colons['ger'], ['oc'] = colons['fr'], ['or'] = colons['sp'], ['Orya'] = colons['sp'], ['pa'] = colons['sp'], ['Phpa'] = colons['cjk'], ['pnt'] = colons['ger'], ['prd'] = colons['sp'], ['ps'] = colons['sp'], ['pt-br'] = colons['ger'], ['pt'] = colons['ger'], ['rgn'] = colons['ger'], ['rm'] = colons['ger'], ['ro'] = colons['ger'], ['ru'] = colons['ger'], ['scn'] = colons['ger'], ['shy'] = colons['sp'], ['si'] = colons['sp'], ['Sinh'] = colons['sp'], ['sk'] = colons['ger'], ['sl'] = colons['ger'], ['sr-ec'] = colons['ger'], ['sr-el'] = colons['ger'], ['sr-Latn'] = colons['ger'], ['sr'] = colons['ger'], ['ta'] = colons['sp'], ['Tale'] = colons['cjk'], ['Talu'] = colons['cjk'], ['Taml'] = colons['sp'], ['te'] = colons['sp'], ['Telu'] = colons['sp'], ['Tfng'] = colons['sp'], ['th'] = colons['no'], ['Thai'] = colons['no'], ['ti'] = colons['eth'], ['Tibt'] = colons['sp'], ['tzm'] = colons['sp'], ['ug'] = colons['sp'], ['ur'] = colons['sp'], ['vec'] = colons['ger'], ['vls'] = colons['ger'], ['wa'] = colons['fr'], ['wuu'] = colons['cjk'], ['ydd'] = colons['sp'], ['yi'] = colons['sp'], ['Yiii'] = colons['cjk'], ['yue'] = colons['cjk'], ['zh-Hans'] = colons['cjk'], ['zh-Hant'] = colons['cjk'], ['zh'] = colons['cjk'], ['Zinh-nbsp-Po-space'] = colons['sp'], ['Zinh-nnbsp-Po-space'] = colons['fr'], ['Zinh-Po-space'] = colons['ger'], ['Zinh-Po'] = colons['no'] } return langSwitch(text_args, lang) end function p.colon(frame) return p._colon(getArgs(frame)) end return p 1uua8388ilhwwsz8m7s82edziquxn3u Module:Xconv 828 1453 10997 2025-09-22T23:40:40Z commons>Jarekt 0 fix typo introduced in 17:34, 7 January 2025 edit by [[User:Verdy p]] 10997 Scribunto text/plain local p = {} local min = math.min local max = math.max local floor = math.floor local format = string.format local sub = mw.ustring.sub local gsub = mw.ustring.gsub local upper = mw.ustring.upper local lower = mw.ustring.lower local trim = mw.text.trim local split = mw.text.split -------------------------------------------------------------------------------- -- Main function: for numeric check -- Hex-conversion and selection of conversion mode function p.xconv(frame) -- local lprm = frame -- local parms local gprm = frame.args -- global parms -- local pprm = mw.getCurrentFrame():getParent().args local inpt = {} for i = 1, 3 do local v = gprm[i] or '' gprm[i] = v v = trim(v) inpt[i] = upper(v) inpt[i + 3] = v end local err = '' -- detected errors local fna = '' -- assumed mode local fno = '' -- output mode local fnr = '' -- 'r' for rgb() color, or '#' for hex color local sp0 = '(' -- or 'rgb(' local sp1 = ',' -- or '%,' local sp3 = ')' -- or '%)' if inpt[3] ~= '' then fna = '4' -- three parms: 4a (or 3c) inpt[1] = inpt[1] .. '/' .. inpt[2] .. '/' .. inpt[3] else if inpt[2] ~= '' then -- only one param inpt[5] = gsub(inpt[5], 'r', '') if #inpt[2] > #inpt[5] then sp0 = 'rgb(' end if inpt[5] == 'n' then fna = 'n' -- 1: d2h elseif inpt[5] == 'h' then fna = 'h' -- 2: h2d elseif inpt[5] == 'o' then fno = 'o' -- 3: rgb(3ab or 4bcd) elseif inpt[5] == 'no' or inpt[5] == 'on' then fna = 'n' -- 1: d2h, or 4bcd fno = 'o' -- edit elseif inpt[5] == 's' or inpt[5] == 'ns' or inpt[5] == 'sn' then fna = 'n' -- 4bcd fno = 's' -- shorten elseif inpt[5] == 'ho' or inpt[5] == 'oh' then fna = 'h' -- 2: h2d, or 3ab fno = 'o' -- edit elseif inpt[5] == '%' then fna = 'h' -- rgb(3ab) sp1 = '%,' sp3 = '%)' else err = err .. '4' -- parm2 is wrong function code end end if inpt[1] ~= '' then if lower(sub(inpt[4], 1, 4)) == 'rgb(' then fna = 'n' -- 4cd fnr = 'r' -- rgb inpt[1] = sub(inpt[1], 4, #inpt[1]) end end end local rgp = '' -- empty or 3 rgb % signs local num = '' -- number bytes local hex = '' -- number + hex bytes local nhs = '' -- number + hex bytes + separator slashes local pts = 0 -- numbers of decimal points for i = 1, #inpt[1] do local tmp = sub(inpt[1], i, i) -- if tmp >= '0' and tmp <= "9" then if tmp == '0' or tmp == '1' or tmp == '2' or tmp == '3' or tmp == '4' or tmp == '5' or tmp == '6' or tmp == '7' or tmp == '8' or tmp == '9' then num = num .. tmp hex = hex .. tmp nhs = nhs .. tmp elseif tmp == '.' then -- fnc = 4d if pts == 0 then num = num .. '.' hex = hex .. '.' nhs = nhs .. '.' pts = 1 else err = err .. '5' -- more than one point end -- elseif tmp >= 'A' and tmp <= 'F' then elseif tmp == 'A' or tmp == 'B' or tmp == 'C' or tmp == 'D' or tmp == 'E' or tmp == 'F' then hex = hex .. tmp nhs = nhs .. tmp elseif tmp == ' ' or tmp == ',' or tmp == '-' or tmp == '/' then if sub(nhs, #nhs, #nhs) ~= '/' then nhs = nhs .. '/' pts = 0 -- reset for next item elseif sub(inpt[1], i-1, i) ~= ', ' then err = err .. '3' -- more than one delimiter in sequ. end elseif tmp == '%' then -- fnc = 4d if i < #inpt[1] then inpt[7] = sub(inpt[1], i + 1, i + 1) end if inpt[7] == ',' or inpt[7] == ')' then inpt[7] = '/' end if i < #inpt[1] and inpt[7] ~= '/' then nhs = nhs .. '/' pts = 0 -- reset for next item end rgp = rgp .. '%' -- 3 times if #rgp > 3 then err = err .. '6' -- % sign error end elseif i == 1 then if tmp == '(' then fnr = 'r' elseif tmp == '#' then fnr = '#' else err = err .. '2' -- '(' or '#' occurs at non-first position end elseif i == #inpt[1] then if tmp == ')' and fnr == 'r' then tmp = tmp end -- ignore end-')' when 'r' elseif tmp ~= '' then -- ignore spacing separator err = err .. '1' -- character not identifiable end -- if end -- for local dect = {0, 0, 0} local fnc = '' -- conversion mode if fnr == '#' and err == '' then if #hex == 3 then -- 3a inpt[6] = sub(hex, 3, 3) .. sub(hex, 3, 3) inpt[5] = sub(hex, 2, 2) .. sub(hex, 2, 2) inpt[4] = sub(hex, 1, 1) .. sub(hex, 1, 1) elseif #hex == 6 then inpt[6] = sub(hex, 5, 6) inpt[5] = sub(hex, 3, 4) inpt[4] = sub(hex, 1, 2) else err = err .. '#' end -- neither 6 nor 3 for i = 1, 3 do dect[i] = tonumber(inpt[i + 3], 16) if sp3 == '%)' then dect[i] = floor(dect[i] / 255 * 1000) / 1000 end end -- for fnc = '3' -- 3 elseif #num < #hex or fna == 'h' then if #nhs == #hex + 2 then -- 3bC local sndt = split(nhs, '/') for i = 1, 3 do dect[i] = tonumber(sndt[i], 16) if dect[i] > 255 then err = err .. '8' else if sp3 == '%)' then dect[i] = floor(dect[i] / 255 * 1000) / 1000 end end end -- for fnc = '3' -- 3 else if fnr ~= '#' then dect[1] = tonumber(hex, 16) fnc = '2' -- 2 end end else -- #num == #hex (a numeric value, and not 'h') if #nhs == #hex then fnc = '1' -- 1 inpt[1] = format('%X', num) else -- #nhs == #hex + 2 == #num + 2 (3 num values) -- 4A, 4b or 4c, 4d dect = split(nhs, '/') fnc = '4' -- 4 for i = 1, 3 do if rgp == '' then if tonumber(dect[i]) > 255 then -- 4A, 4b, 4c err = err .. '8' end inpt[i] = format('%02X', dect[i]) else -- rgp = '%%%' -- 4d if rgp ~= '%%%' then err = err .. '7' -- (6) not three '%' end if tonumber(dect[i]) > 100 then -- 4d err = err .. '9' end dect[i + 3] = floor(dect[i] * 255 / 100 + .5) inpt[i] = format('%02X', dect[i + 3]) end end -- for if fno == 's' -- shortening required ? and sub(inpt[1], 1, 1) == sub(inpt[1], 2, 2) and sub(inpt[2], 1, 1) == sub(inpt[2], 2, 2) and sub(inpt[3], 1, 1) == sub(inpt[3], 2, 2) then inpt[1] = sub(inpt[1], 1, 1) inpt[2] = sub(inpt[2], 1, 1) inpt[3] = sub(inpt[3], 1, 1) end -- shorten #rrggbb to #rgb end -- if #nhs end -- if #num --[[ err: string, indicates parsing errors that may have been encountered: '1': non-numeric or non-hexadecimal characters '2': '(' or '#' occurs at non-first position '3': separator (or separator combination} '4': parm2 input wrong function code '5': decimal point error '6': % sign error '7': not three '%' '8': not all decimal color codes are < 256 '9': more than 100% inpt: table of 6 strings, contains 3 trimmed parameters after their uppercase versions dect: table of 3 decimal values num: string, contains all numeric bytes hex: string, contains all numeric plus hexadecimal bytes nhs: string, contains all numeric plus hexadecimal bytes plus inbetween slashes rgp: string, may contain three '%' from rgb() notation --]] --[[ Only for tests: if fnc == '4' then return 'err=' .. err .. ', fn=' .. fna .. fno .. fnr .. fnc .. ', '.. inpt[1] .. ', '.. num .. '~' .. hex .. '~' .. nhs .. ', '.. tostring(dect[1]) .. "'" .. tostring(dect[2]) .. "'" .. tostring(dect[3]) .. ', ' .. rgp .. ', ' .. inpt[1] .. '"' .. inpt[2] .. '"' .. inpt[3] else return 'err=' .. err .. ', fn=' .. fna .. fno .. fnr .. fnc .. ', '.. inpt[1] .. ', '.. num .. '~' .. hex .. '~' .. nhs .. ', '.. tostring(dect[1]) .. "'" .. tostring(dect[2]) .. "'" .. tostring(dect[3]) .. ', '.. rgp end --]] if err ~= '' then return 'Error = ' .. err elseif fnc == '1' then return inpt[1] .. '<sub>h</sub>' elseif fnc == '2' then return tostring(dect[1]) .. '<sub>d</sub>' elseif fnc == '3' then return sp0 .. dect[1] .. sp1 .. dect[2] .. sp1 .. dect[3] .. sp3 elseif fnc == '4' then return '&#35;'-- leading '#' HTML-escaped against MediaWiki reinterpretation .. inpt[1] .. inpt[2] .. inpt[3] end end -- function xconv -------------------------------------------------------------------------------- -- Convert hexadecimal value (from 0 to FFFFFFFFFFF) to decimal value(from 0 to 17592186044415) function p.h2d(frame) local gprm = frame.args -- global parms return tonumber(gprm[1], 16) or '' end -- function h2d -------------------------------------------------------------------------------- -- Convert decimal value (from 0 to 17592186044415) to hexadecimal value(from 0 to FFFFFFFFFFF) function p.d2h(frame) local gprm = frame.args -- global parms local value = tonumber(gprm[1]) or 0 local width = min(max(tonumber(gprm[2]) or 1, 1), 16) return format('%0' .. tostring(width) .. 'X', value) end -- function d2h -------------------------------------------------------------------------------- return p pin4hh35xqzfvjbk8i9ozemliaa9ovm 10998 10997 2026-08-25T23:38:41Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Xconv]] 10997 Scribunto text/plain local p = {} local min = math.min local max = math.max local floor = math.floor local format = string.format local sub = mw.ustring.sub local gsub = mw.ustring.gsub local upper = mw.ustring.upper local lower = mw.ustring.lower local trim = mw.text.trim local split = mw.text.split -------------------------------------------------------------------------------- -- Main function: for numeric check -- Hex-conversion and selection of conversion mode function p.xconv(frame) -- local lprm = frame -- local parms local gprm = frame.args -- global parms -- local pprm = mw.getCurrentFrame():getParent().args local inpt = {} for i = 1, 3 do local v = gprm[i] or '' gprm[i] = v v = trim(v) inpt[i] = upper(v) inpt[i + 3] = v end local err = '' -- detected errors local fna = '' -- assumed mode local fno = '' -- output mode local fnr = '' -- 'r' for rgb() color, or '#' for hex color local sp0 = '(' -- or 'rgb(' local sp1 = ',' -- or '%,' local sp3 = ')' -- or '%)' if inpt[3] ~= '' then fna = '4' -- three parms: 4a (or 3c) inpt[1] = inpt[1] .. '/' .. inpt[2] .. '/' .. inpt[3] else if inpt[2] ~= '' then -- only one param inpt[5] = gsub(inpt[5], 'r', '') if #inpt[2] > #inpt[5] then sp0 = 'rgb(' end if inpt[5] == 'n' then fna = 'n' -- 1: d2h elseif inpt[5] == 'h' then fna = 'h' -- 2: h2d elseif inpt[5] == 'o' then fno = 'o' -- 3: rgb(3ab or 4bcd) elseif inpt[5] == 'no' or inpt[5] == 'on' then fna = 'n' -- 1: d2h, or 4bcd fno = 'o' -- edit elseif inpt[5] == 's' or inpt[5] == 'ns' or inpt[5] == 'sn' then fna = 'n' -- 4bcd fno = 's' -- shorten elseif inpt[5] == 'ho' or inpt[5] == 'oh' then fna = 'h' -- 2: h2d, or 3ab fno = 'o' -- edit elseif inpt[5] == '%' then fna = 'h' -- rgb(3ab) sp1 = '%,' sp3 = '%)' else err = err .. '4' -- parm2 is wrong function code end end if inpt[1] ~= '' then if lower(sub(inpt[4], 1, 4)) == 'rgb(' then fna = 'n' -- 4cd fnr = 'r' -- rgb inpt[1] = sub(inpt[1], 4, #inpt[1]) end end end local rgp = '' -- empty or 3 rgb % signs local num = '' -- number bytes local hex = '' -- number + hex bytes local nhs = '' -- number + hex bytes + separator slashes local pts = 0 -- numbers of decimal points for i = 1, #inpt[1] do local tmp = sub(inpt[1], i, i) -- if tmp >= '0' and tmp <= "9" then if tmp == '0' or tmp == '1' or tmp == '2' or tmp == '3' or tmp == '4' or tmp == '5' or tmp == '6' or tmp == '7' or tmp == '8' or tmp == '9' then num = num .. tmp hex = hex .. tmp nhs = nhs .. tmp elseif tmp == '.' then -- fnc = 4d if pts == 0 then num = num .. '.' hex = hex .. '.' nhs = nhs .. '.' pts = 1 else err = err .. '5' -- more than one point end -- elseif tmp >= 'A' and tmp <= 'F' then elseif tmp == 'A' or tmp == 'B' or tmp == 'C' or tmp == 'D' or tmp == 'E' or tmp == 'F' then hex = hex .. tmp nhs = nhs .. tmp elseif tmp == ' ' or tmp == ',' or tmp == '-' or tmp == '/' then if sub(nhs, #nhs, #nhs) ~= '/' then nhs = nhs .. '/' pts = 0 -- reset for next item elseif sub(inpt[1], i-1, i) ~= ', ' then err = err .. '3' -- more than one delimiter in sequ. end elseif tmp == '%' then -- fnc = 4d if i < #inpt[1] then inpt[7] = sub(inpt[1], i + 1, i + 1) end if inpt[7] == ',' or inpt[7] == ')' then inpt[7] = '/' end if i < #inpt[1] and inpt[7] ~= '/' then nhs = nhs .. '/' pts = 0 -- reset for next item end rgp = rgp .. '%' -- 3 times if #rgp > 3 then err = err .. '6' -- % sign error end elseif i == 1 then if tmp == '(' then fnr = 'r' elseif tmp == '#' then fnr = '#' else err = err .. '2' -- '(' or '#' occurs at non-first position end elseif i == #inpt[1] then if tmp == ')' and fnr == 'r' then tmp = tmp end -- ignore end-')' when 'r' elseif tmp ~= '' then -- ignore spacing separator err = err .. '1' -- character not identifiable end -- if end -- for local dect = {0, 0, 0} local fnc = '' -- conversion mode if fnr == '#' and err == '' then if #hex == 3 then -- 3a inpt[6] = sub(hex, 3, 3) .. sub(hex, 3, 3) inpt[5] = sub(hex, 2, 2) .. sub(hex, 2, 2) inpt[4] = sub(hex, 1, 1) .. sub(hex, 1, 1) elseif #hex == 6 then inpt[6] = sub(hex, 5, 6) inpt[5] = sub(hex, 3, 4) inpt[4] = sub(hex, 1, 2) else err = err .. '#' end -- neither 6 nor 3 for i = 1, 3 do dect[i] = tonumber(inpt[i + 3], 16) if sp3 == '%)' then dect[i] = floor(dect[i] / 255 * 1000) / 1000 end end -- for fnc = '3' -- 3 elseif #num < #hex or fna == 'h' then if #nhs == #hex + 2 then -- 3bC local sndt = split(nhs, '/') for i = 1, 3 do dect[i] = tonumber(sndt[i], 16) if dect[i] > 255 then err = err .. '8' else if sp3 == '%)' then dect[i] = floor(dect[i] / 255 * 1000) / 1000 end end end -- for fnc = '3' -- 3 else if fnr ~= '#' then dect[1] = tonumber(hex, 16) fnc = '2' -- 2 end end else -- #num == #hex (a numeric value, and not 'h') if #nhs == #hex then fnc = '1' -- 1 inpt[1] = format('%X', num) else -- #nhs == #hex + 2 == #num + 2 (3 num values) -- 4A, 4b or 4c, 4d dect = split(nhs, '/') fnc = '4' -- 4 for i = 1, 3 do if rgp == '' then if tonumber(dect[i]) > 255 then -- 4A, 4b, 4c err = err .. '8' end inpt[i] = format('%02X', dect[i]) else -- rgp = '%%%' -- 4d if rgp ~= '%%%' then err = err .. '7' -- (6) not three '%' end if tonumber(dect[i]) > 100 then -- 4d err = err .. '9' end dect[i + 3] = floor(dect[i] * 255 / 100 + .5) inpt[i] = format('%02X', dect[i + 3]) end end -- for if fno == 's' -- shortening required ? and sub(inpt[1], 1, 1) == sub(inpt[1], 2, 2) and sub(inpt[2], 1, 1) == sub(inpt[2], 2, 2) and sub(inpt[3], 1, 1) == sub(inpt[3], 2, 2) then inpt[1] = sub(inpt[1], 1, 1) inpt[2] = sub(inpt[2], 1, 1) inpt[3] = sub(inpt[3], 1, 1) end -- shorten #rrggbb to #rgb end -- if #nhs end -- if #num --[[ err: string, indicates parsing errors that may have been encountered: '1': non-numeric or non-hexadecimal characters '2': '(' or '#' occurs at non-first position '3': separator (or separator combination} '4': parm2 input wrong function code '5': decimal point error '6': % sign error '7': not three '%' '8': not all decimal color codes are < 256 '9': more than 100% inpt: table of 6 strings, contains 3 trimmed parameters after their uppercase versions dect: table of 3 decimal values num: string, contains all numeric bytes hex: string, contains all numeric plus hexadecimal bytes nhs: string, contains all numeric plus hexadecimal bytes plus inbetween slashes rgp: string, may contain three '%' from rgb() notation --]] --[[ Only for tests: if fnc == '4' then return 'err=' .. err .. ', fn=' .. fna .. fno .. fnr .. fnc .. ', '.. inpt[1] .. ', '.. num .. '~' .. hex .. '~' .. nhs .. ', '.. tostring(dect[1]) .. "'" .. tostring(dect[2]) .. "'" .. tostring(dect[3]) .. ', ' .. rgp .. ', ' .. inpt[1] .. '"' .. inpt[2] .. '"' .. inpt[3] else return 'err=' .. err .. ', fn=' .. fna .. fno .. fnr .. fnc .. ', '.. inpt[1] .. ', '.. num .. '~' .. hex .. '~' .. nhs .. ', '.. tostring(dect[1]) .. "'" .. tostring(dect[2]) .. "'" .. tostring(dect[3]) .. ', '.. rgp end --]] if err ~= '' then return 'Error = ' .. err elseif fnc == '1' then return inpt[1] .. '<sub>h</sub>' elseif fnc == '2' then return tostring(dect[1]) .. '<sub>d</sub>' elseif fnc == '3' then return sp0 .. dect[1] .. sp1 .. dect[2] .. sp1 .. dect[3] .. sp3 elseif fnc == '4' then return '&#35;'-- leading '#' HTML-escaped against MediaWiki reinterpretation .. inpt[1] .. inpt[2] .. inpt[3] end end -- function xconv -------------------------------------------------------------------------------- -- Convert hexadecimal value (from 0 to FFFFFFFFFFF) to decimal value(from 0 to 17592186044415) function p.h2d(frame) local gprm = frame.args -- global parms return tonumber(gprm[1], 16) or '' end -- function h2d -------------------------------------------------------------------------------- -- Convert decimal value (from 0 to 17592186044415) to hexadecimal value(from 0 to FFFFFFFFFFF) function p.d2h(frame) local gprm = frame.args -- global parms local value = tonumber(gprm[1]) or 0 local width = min(max(tonumber(gprm[2]) or 1, 1), 16) return format('%0' .. tostring(width) .. 'X', value) end -- function d2h -------------------------------------------------------------------------------- return p pin4hh35xqzfvjbk8i9ozemliaa9ovm Tempilet:See also/styles.css 10 1454 10999 2024-08-27T08:54:24Z commons>TheDJ 0 use horizontal padding, instead of cramming everything on top of each other. 10999 sanitized-css text/css /* Template:See also */ .see-also { background: var(--background-color-interactive-subtle,#f8f9fa); margin: 1em 0; border: 1px solid var(--border-color-subtle,#c8ccd1); padding: 2px; color: var(--color-base, #202122); clear: left; overflow: hidden; /* force new block formatting context, so we can fit next to infoboxes */ } /* {{Protected}} */ qvoitiur2qwdni24go06947ksrkgtvr 11000 10999 2026-08-25T23:38:41Z RAPTOR7762 18 1 revision imported from [[:commons:Template:See_also/styles.css]] 10999 sanitized-css text/css /* Template:See also */ .see-also { background: var(--background-color-interactive-subtle,#f8f9fa); margin: 1em 0; border: 1px solid var(--border-color-subtle,#c8ccd1); padding: 2px; color: var(--color-base, #202122); clear: left; overflow: hidden; /* force new block formatting context, so we can fit next to infoboxes */ } /* {{Protected}} */ qvoitiur2qwdni24go06947ksrkgtvr Module:Message box/mbox.css 828 1455 11001 2026-07-30T12:26:57Z commons>Ebrahim 0 minor code format improve 11001 sanitized-css text/css .messagebox { margin: 4px 0; width: auto; border-collapse: collapse; border: 2px solid var(--border-color-progressive, #6485d1); background-color: var(--background-color-neutral-subtle, #fbfcff); color: var(--color-base, #202122); box-sizing: border-box; border-inline-start-width: 8px; } .messagebox.mbox-small { font-size: 88%; line-height: 1.25em; } .mbox-warning, .mbox-speedy { border: 2px solid var(--border-color-error, #b22222); background: var(--background-color-error-subtle, #ffdbdb); border-inline-start-width: 8px; } .mbox-serious, .mbox-delete, .mbox-stop { border: 2px solid var(--border-color-error, #b22222); border-inline-start-width: 8px; } .mbox-issue, .mbox-content { border: 2px solid #f28500; background:var(--background-color-warning-subtle, #ffe); border-inline-start-width: 8px; } .mbox-query, .mbox-style { border: 2px solid #f4c430; background: var(--background-color-warning-subtle, #ffe); border-inline-start-width: 8px; } .mbox-shit { border: 2px solid #960; border-inline-start-width: 8px; } .mbox-license { border: 2px solid #88a; border-inline-start-width: initial; } .mbox-legal { border: 2px solid var(--border-color-notice, #666); background: var(--background-color-base, #fff); border-inline-start-width: 8px; } .mbox-honor { border: 2px solid #ca3; background: var(--background-color-warning-subtle, #fcf4db); border-inline-start-width: 8px; } .mbox-growth { border: 2px solid #8d4; background:var(--background-color-success-subtle, #d5fdf4); border-inline-start-width: 8px; } .mbox-move { border: 2px solid #93c; border-inline-start-width: 8px; } .mbox-protection, .mbox-message { border: 2px solid var(--border-color-base, #aaa); border-inline-start-width: 8px; } .messagebox .mbox-text { border: none; padding: 0.25em 0.9em; width: 100%; } .messagebox .mbox-image { border: none; padding-top: 2px; padding-bottom: 2px; padding-inline-start: 0.9em; padding-inline-end: 0; text-align: center; } .messagebox .mbox-imageright { border: none; padding-top: 2px; padding-bottom: 2px; padding-inline-start: 0; padding-inline-end: 0.9em; text-align: center; } /* An empty narrow cell */ .messagebox .mbox-empty-cell { border: none; padding: 0; width: 1px; } .messagebox .mbox-invalid-type { text-align: center; } @media (min-width: 720px) { .messagebox { margin: 4px 10%; } .messagebox.mbox-small { /* @noflip */ clear: right; /* @noflip */ float: right; /* @noflip */ margin: 4px 0 4px 1em; width: 238px; } } /** T367463 */ body.skin--responsive table.messagebox img { max-width: none !important; } bpj5ev2w3xohrs4ixzt2v4aln2v4zxk 11002 11001 2026-08-25T23:38:41Z RAPTOR7762 18 1 revision imported from [[:commons:Module:Message_box/mbox.css]] 11001 sanitized-css text/css .messagebox { margin: 4px 0; width: auto; border-collapse: collapse; border: 2px solid var(--border-color-progressive, #6485d1); background-color: var(--background-color-neutral-subtle, #fbfcff); color: var(--color-base, #202122); box-sizing: border-box; border-inline-start-width: 8px; } .messagebox.mbox-small { font-size: 88%; line-height: 1.25em; } .mbox-warning, .mbox-speedy { border: 2px solid var(--border-color-error, #b22222); background: var(--background-color-error-subtle, #ffdbdb); border-inline-start-width: 8px; } .mbox-serious, .mbox-delete, .mbox-stop { border: 2px solid var(--border-color-error, #b22222); border-inline-start-width: 8px; } .mbox-issue, .mbox-content { border: 2px solid #f28500; background:var(--background-color-warning-subtle, #ffe); border-inline-start-width: 8px; } .mbox-query, .mbox-style { border: 2px solid #f4c430; background: var(--background-color-warning-subtle, #ffe); border-inline-start-width: 8px; } .mbox-shit { border: 2px solid #960; border-inline-start-width: 8px; } .mbox-license { border: 2px solid #88a; border-inline-start-width: initial; } .mbox-legal { border: 2px solid var(--border-color-notice, #666); background: var(--background-color-base, #fff); border-inline-start-width: 8px; } .mbox-honor { border: 2px solid #ca3; background: var(--background-color-warning-subtle, #fcf4db); border-inline-start-width: 8px; } .mbox-growth { border: 2px solid #8d4; background:var(--background-color-success-subtle, #d5fdf4); border-inline-start-width: 8px; } .mbox-move { border: 2px solid #93c; border-inline-start-width: 8px; } .mbox-protection, .mbox-message { border: 2px solid var(--border-color-base, #aaa); border-inline-start-width: 8px; } .messagebox .mbox-text { border: none; padding: 0.25em 0.9em; width: 100%; } .messagebox .mbox-image { border: none; padding-top: 2px; padding-bottom: 2px; padding-inline-start: 0.9em; padding-inline-end: 0; text-align: center; } .messagebox .mbox-imageright { border: none; padding-top: 2px; padding-bottom: 2px; padding-inline-start: 0; padding-inline-end: 0.9em; text-align: center; } /* An empty narrow cell */ .messagebox .mbox-empty-cell { border: none; padding: 0; width: 1px; } .messagebox .mbox-invalid-type { text-align: center; } @media (min-width: 720px) { .messagebox { margin: 4px 10%; } .messagebox.mbox-small { /* @noflip */ clear: right; /* @noflip */ float: right; /* @noflip */ margin: 4px 0 4px 1em; width: 238px; } } /** T367463 */ body.skin--responsive table.messagebox img { max-width: none !important; } bpj5ev2w3xohrs4ixzt2v4aln2v4zxk Module:TNT/config 828 1456 11003 2026-07-21T03:07:56Z commons>Fdsdsfsdf 0 [[Special:MyLanguage/COM:AES|←]]Created page with 'local p = {}; -- The tracking category name for global TemplateData pages located on Commons -- under "Data:Templatedata/" instead of "Data:TemplateData/", -- defaults to `"Templates using legacy global TemplateData table name"` -- when not set; set to `false` to disable all categorisation p.legacyTemplateDataCategoryName = nil; -- Whether to add the language subtag to the template name using {{#translation:}}, -- defaults to `false` p...' 11003 Scribunto text/plain local p = {}; -- The tracking category name for global TemplateData pages located on Commons -- under "Data:Templatedata/" instead of "Data:TemplateData/", -- defaults to `"Templates using legacy global TemplateData table name"` -- when not set; set to `false` to disable all categorisation p.legacyTemplateDataCategoryName = nil; -- Whether to add the language subtag to the template name using {{#translation:}}, -- defaults to `false` p.translatableCategoryLink = true; return p; feifiyrqk27bj288o6etsyyn8h6qanf 11004 11003 2026-08-25T23:38:41Z RAPTOR7762 18 1 revision imported from [[:commons:Module:TNT/config]] 11003 Scribunto text/plain local p = {}; -- The tracking category name for global TemplateData pages located on Commons -- under "Data:Templatedata/" instead of "Data:TemplateData/", -- defaults to `"Templates using legacy global TemplateData table name"` -- when not set; set to `false` to disable all categorisation p.legacyTemplateDataCategoryName = nil; -- Whether to add the language subtag to the template name using {{#translation:}}, -- defaults to `false` p.translatableCategoryLink = true; return p; feifiyrqk27bj288o6etsyyn8h6qanf MediaWiki:Protectedpagetext 8 1457 11007 2022-05-08T17:43:24Z en>Izno 0 /* top */add mw-parser-output wrapper in preparation for TemplateStyles in [[Module:Message box]] 11007 wikitext text/x-wiki <div class="mw-parser-output"> __NOTOC__{{#switch:{{CASCADINGSOURCES}} | {{FULLPAGENAME}}|= {{#ifexist: Template:Editnotices/Protection/{{FULLPAGENAME}} | {{Template:Editnotices/Protection/{{FULLPAGENAME}}|$1|$2}} | {{#ifeq: {{#titleparts:{{FULLPAGENAME}}|1|1}} | Special:Upload | {{Generic image names|protected}} | {{#switch: $1 | protect | editprotected = {{protected page text/full|$1|$2|talk-protected={{#if:{{PROTECTIONLEVEL:edit|{{TALKPAGENAME}}}}|true|false}}}} <!-- Fully protected --> | templateeditor = {{protected page text/template|$1|$2|talk-protected={{#if:{{PROTECTIONLEVEL:edit|{{TALKPAGENAME}}}}|true|false}}}} <!-- Template protected --> | extendedconfirmed = {{protected page text/extendedconfirmed|$1|$2|talk-protected={{#if:{{PROTECTIONLEVEL:edit|{{TALKPAGENAME}}}}|true|false}}}} <!-- Extendedconfirmed protected --> | #default = {{protected page text/semi|$1|$2|talk-protected={{#if:{{PROTECTIONLEVEL:edit|{{TALKPAGENAME}}}}|true|false}}}} <!-- Semi-protected --> }}{{#switch:$2|edit|create={{editnotice load|notice action = view}}}} }} |#default = <!-- defer to MediaWiki:Cascadeprotected --> }} }} </div> 58ya3abftxsz3iyo7z84w3qg6cko5ic 11008 11007 2026-08-26T11:32:47Z RAPTOR7762 18 1 revision imported from [[:en:MediaWiki:Protectedpagetext]] 11007 wikitext text/x-wiki <div class="mw-parser-output"> __NOTOC__{{#switch:{{CASCADINGSOURCES}} | {{FULLPAGENAME}}|= {{#ifexist: Template:Editnotices/Protection/{{FULLPAGENAME}} | {{Template:Editnotices/Protection/{{FULLPAGENAME}}|$1|$2}} | {{#ifeq: {{#titleparts:{{FULLPAGENAME}}|1|1}} | Special:Upload | {{Generic image names|protected}} | {{#switch: $1 | protect | editprotected = {{protected page text/full|$1|$2|talk-protected={{#if:{{PROTECTIONLEVEL:edit|{{TALKPAGENAME}}}}|true|false}}}} <!-- Fully protected --> | templateeditor = {{protected page text/template|$1|$2|talk-protected={{#if:{{PROTECTIONLEVEL:edit|{{TALKPAGENAME}}}}|true|false}}}} <!-- Template protected --> | extendedconfirmed = {{protected page text/extendedconfirmed|$1|$2|talk-protected={{#if:{{PROTECTIONLEVEL:edit|{{TALKPAGENAME}}}}|true|false}}}} <!-- Extendedconfirmed protected --> | #default = {{protected page text/semi|$1|$2|talk-protected={{#if:{{PROTECTIONLEVEL:edit|{{TALKPAGENAME}}}}|true|false}}}} <!-- Semi-protected --> }}{{#switch:$2|edit|create={{editnotice load|notice action = view}}}} }} |#default = <!-- defer to MediaWiki:Cascadeprotected --> }} }} </div> 58ya3abftxsz3iyo7z84w3qg6cko5ic MediaWiki mossa:Protectedpagetext 9 1458 11011 2025-12-24T16:58:19Z en>Andrybak 0 /* Links to editnotices for template editors and page movers */ reply 11011 wikitext text/x-wiki {{Talk header}} {{User:MiszaBot/config | archive = MediaWiki talk:Protectedpagetext/Archive %(counter)d | counter = 1 | algo = old(90d) | maxarchivesize = 150k | archiveheader = {{Talk archive navigation}} | minthreadstoarchive = 2 | minthreadsleft = 5 }} {{Interface explanation|[[{{SUBJECTPAGENAME}}]] is an [[WP:Editnotice|edit notice]] shown to a user attempting to edit any [[WP:PP|protected page]], if the user doesn't have permission to do so.}} {{tmbox|text=Most of the code used in this message has been migrated to [[Template:Protected page text]] to ease maintenance.}} == Protected edit request on 11 July 2021 == {{edit fully-protected|MediaWiki:Protectedpagetext|answered=yes}} Make sure the other protected notice [if the page is protected again by admistrators, not the CSS/JS/JSON message] is removed because the page is already protected no matter what. [[User:أحمدمحمدرمضانسعيد|أحمدمحمدرمضانسعيد]] Day 1/30 of editing 17 times a day {{#ifeq:{{FULLPAGENAME}}|User talk:أحمدمحمدرمضانسعيد|([[User talk:أحمدمحمدرمضانسعيد#top|talk]])|([[User talk:أحمدمحمدرمضانسعيد|talk]])}} 08:41, 11 July 2021 (UTC) :{{not done}} it is not clear what edit you want to make, please mock up your suggested change in [[MediaWiki talk:Protectedpagetext/sandbox]] then reactivate the edit request. — [[User:Xaosflux|<span style="color:#FF9933; font-weight:bold; font-family:monotype;">xaosflux</span>]] <sup>[[User talk:Xaosflux|<span style="color:#009933;">Talk</span>]]</sup> 11:32, 11 July 2021 (UTC) == Someone did something == Someone replaced the edit with $2 [[User:HelpmePlsWhy|HelpmePlsWhy]] ([[User talk:HelpmePlsWhy|talk]]) 17:34, 1 April 2022 (UTC) :{{not done}} it is not clear what edit you want to make, please mock up your suggested change in [[MediaWiki talk:Protectedpagetext/sandbox]] then reactivate the edit request.[[User:Pavlov2|Pavlov2]] ([[User talk:Pavlov2|talk]]) 17:53, 1 April 2022 (UTC) == Semi-protected edit request on 1 April 2022 == {{edit semi-protected|MediaWiki:Protectedpagetext|answered=yes}} Someone replaced the edit word with $2 I need to replace that with edit[[User:HelpmePlsWhy|HelpmePlsWhy]] ([[User talk:HelpmePlsWhy|talk]]) 17:35, 1 April 2022 (UTC) :it was April 1st what were you expecting buddy [[User:Usersnipedname|Usersnipedname]] ([[User talk:Usersnipedname|talk]]) 05:33, 28 March 2024 (UTC) ::The joke seems to have run its course. [[User:Testtubewaltz|Testtubewaltz]] ([[User talk:Testtubewaltz|talk]]) 03:51, 17 October 2025 (UTC) {{notdone}}, what are you requesting?[[User:Pavlov2|Pavlov2]] ([[User talk:Pavlov2|talk]]) 17:39, 1 April 2022 (UTC) == Protected edit request on 14 December 2025 == {{edit fully-protected|MediaWiki:Protectedpagetext|answered=yes}} Is it safe yet to implement the changes I made in [[/sandbox]] (modelled off of [[MediaWiki:Protectedinterface]])? Since user CSS/JS(ON) pages are already automatically interface-protected, it's redundant to display another protection message if the page is also full-, template-, extended-confirmed- or semi-protected by an administrator. [[User:2600 etc|2600 etc]] ([[User talk:2600 etc|talk]]) 23:22, 14 December 2025 (UTC) : First off the links in the comment in the sandbox are broken. Second off, is this really necessary? The situation where a page is both a user CSS/JS?/JSON page and manually protected seems rare enough I'm inclined to not care. [[User:Pppery|* Pppery *]] [[User talk:Pppery|<sub style="color:#800000">it has begun...</sub>]] 04:53, 15 December 2025 (UTC) == Links to editnotices for template editors and page movers == As a non-admin, I cannot edit [[Portal:Current events]]. As a template editor, I can edit [[Template:Editnotices/Page/Portal:Current events]]. However, if I view the source of [[Portal:Current events]], I don't see a link to [[Template:Editnotices/Page/Portal:Current events]], because it is actually being loaded by [[MediaWiki:Protectedpagetext]] through the redirect {{noredirect|Template:Editnotices/Protection/Portal:Current events}}, instead of the "usual" way the editnotices are loaded by [[Template:Editnotice load]]. It would be nice to also have these links to editnotices here in [[MediaWiki:Protectedpagetext]]. Maybe this page could even use {{tlx|Editnotice load/core|pagenotice{{=}}Template:Editnotices/Protection/<nowiki>{{FULLPAGENAME}}</nowiki>}}, but the /core template does not support taking <code>$1</code> and <code>$2</code> as parameters and passing them to the protection editnotice.{{Efn|text=As far as I can tell from [https://en.wikipedia.org/w/index.php?search=insource%3A%2F%5C%7B%5C%7B%5C%7B%5B12%5D%2F+subpageof%3AEditnotices&title=Special%3ASearch&profile=advanced&fulltext=1&advancedSearch-current=%7B%22fields%22%3A%7B%22subpageof%22%3A%22Editnotices%22%7D%7D&ns10=1 a search], the only users of these positional parameters are [[Template:Editnotices/Protection/Wikipedia:Requests for adminship]] and [[Template:Editnotices/Protection/Wikipedia:Requested moves]].}} Alternatively, the wikitext which generates the links (parts of [[Template:Editnotice load/core]] with the CSS classes <code>sysop-show templateeditor-show extendedmover-show</code>) could be adapted here without using the /core template. <s>Another, more weird example is [[Main Page]]: I am allowed to edit [[Template:Editnotices/Page/Main Page]], but because I am not an admin, I never see the editnotice, so there is no "opportunity" to show the links to it to me.</s> {{small|Not an example of what's being discussed, see below. —⁠[[User:Andrybak|andrybak]] ([[User talk:Andrybak|talk]]) 16:58, 24 December 2025 (UTC)}} This applies to users in the [[Wikipedia:Page mover|page mover]] and the [[Wikipedia:Template editor|template editor]] groups, both of which are allowed to edit [[Wikipedia:Editnotice|editnotices]]. This also applies to the page [[MediaWiki:Cascadeprotected]]. {{reflist-talk|title=Footnotes|group=lower-alpha}} —⁠[[User:Andrybak|andrybak]] ([[User talk:Andrybak|talk]]) 15:24, 24 December 2025 (UTC) : A protection notice (under [[Special:PrefixIndex/Template:Editnotices/Protection/|Template:Editnotices/Protection/]]) is not the same thing as an edit notice (under [[Special:PrefixIndex/Template:Editnotices/Page/|Template:Editnotices/Page/]]). It's used for cases where the default message is somehow inappropriate, often for cases where people somehow wind up trying to edit a protected template when trying to edit an article, and then the usual "submit an edit request" results in misplaced edit requests on the template's talk page. I don't know that also displaying the edit notice (if one also exists) alongside the custom protection notice would always be appropriate (and when people do want that, they could add <syntaxhighlight lang=wikitext inline>{{#switch:{{{2}}}|edit|create={{editnotice load|notice action = view}}}}</syntaxhighlight> into their custom protection notice), and linking to one when it's not displayed would be confusing and probably pointless.{{pb}}Similarly, I don't know how useful it would be to have a "Protection notice" link from every protected page. Your own confusion suggests that it might result in unnecessary and incorrect overrides of the standard protection notice. For custom notices, if only shown to people who could edit the notice, 🤷 I guess having such a link would be unlikely to do harm. [[User:Anomie|Anomie]][[User talk:Anomie|⚔]] 16:46, 24 December 2025 (UTC) ::{{tq|1=Your own confusion suggests that it might result in unnecessary and incorrect overrides of the standard protection notice.}} do you mean if a red link is shown? I think it makes sense showing the link only when the custom protection notice exists already, because it is a rare use case – just 52 subpages exist right now under [[Special:PrefixIndex/Template:Editnotices/Protection/|Template:Editnotices/Protection/]]. :: :: As for confusion between the two types – thank you for the clarification, it's helpful. I indeed confused non-existent [[Template:Editnotices/Protection/Main Page]] with [[Template:Editnotices/Page/Main Page]] in the process of writing the message above. —⁠[[User:Andrybak|andrybak]] ([[User talk:Andrybak|talk]]) 16:58, 24 December 2025 (UTC) ofynzbzw6jvxgo42oy5d1ghjzq1y693 11012 11011 2026-08-26T11:32:48Z RAPTOR7762 18 1 revision imported from [[:en:MediaWiki_talk:Protectedpagetext]] 11011 wikitext text/x-wiki {{Talk header}} {{User:MiszaBot/config | archive = MediaWiki talk:Protectedpagetext/Archive %(counter)d | counter = 1 | algo = old(90d) | maxarchivesize = 150k | archiveheader = {{Talk archive navigation}} | minthreadstoarchive = 2 | minthreadsleft = 5 }} {{Interface explanation|[[{{SUBJECTPAGENAME}}]] is an [[WP:Editnotice|edit notice]] shown to a user attempting to edit any [[WP:PP|protected page]], if the user doesn't have permission to do so.}} {{tmbox|text=Most of the code used in this message has been migrated to [[Template:Protected page text]] to ease maintenance.}} == Protected edit request on 11 July 2021 == {{edit fully-protected|MediaWiki:Protectedpagetext|answered=yes}} Make sure the other protected notice [if the page is protected again by admistrators, not the CSS/JS/JSON message] is removed because the page is already protected no matter what. [[User:أحمدمحمدرمضانسعيد|أحمدمحمدرمضانسعيد]] Day 1/30 of editing 17 times a day {{#ifeq:{{FULLPAGENAME}}|User talk:أحمدمحمدرمضانسعيد|([[User talk:أحمدمحمدرمضانسعيد#top|talk]])|([[User talk:أحمدمحمدرمضانسعيد|talk]])}} 08:41, 11 July 2021 (UTC) :{{not done}} it is not clear what edit you want to make, please mock up your suggested change in [[MediaWiki talk:Protectedpagetext/sandbox]] then reactivate the edit request. — [[User:Xaosflux|<span style="color:#FF9933; font-weight:bold; font-family:monotype;">xaosflux</span>]] <sup>[[User talk:Xaosflux|<span style="color:#009933;">Talk</span>]]</sup> 11:32, 11 July 2021 (UTC) == Someone did something == Someone replaced the edit with $2 [[User:HelpmePlsWhy|HelpmePlsWhy]] ([[User talk:HelpmePlsWhy|talk]]) 17:34, 1 April 2022 (UTC) :{{not done}} it is not clear what edit you want to make, please mock up your suggested change in [[MediaWiki talk:Protectedpagetext/sandbox]] then reactivate the edit request.[[User:Pavlov2|Pavlov2]] ([[User talk:Pavlov2|talk]]) 17:53, 1 April 2022 (UTC) == Semi-protected edit request on 1 April 2022 == {{edit semi-protected|MediaWiki:Protectedpagetext|answered=yes}} Someone replaced the edit word with $2 I need to replace that with edit[[User:HelpmePlsWhy|HelpmePlsWhy]] ([[User talk:HelpmePlsWhy|talk]]) 17:35, 1 April 2022 (UTC) :it was April 1st what were you expecting buddy [[User:Usersnipedname|Usersnipedname]] ([[User talk:Usersnipedname|talk]]) 05:33, 28 March 2024 (UTC) ::The joke seems to have run its course. [[User:Testtubewaltz|Testtubewaltz]] ([[User talk:Testtubewaltz|talk]]) 03:51, 17 October 2025 (UTC) {{notdone}}, what are you requesting?[[User:Pavlov2|Pavlov2]] ([[User talk:Pavlov2|talk]]) 17:39, 1 April 2022 (UTC) == Protected edit request on 14 December 2025 == {{edit fully-protected|MediaWiki:Protectedpagetext|answered=yes}} Is it safe yet to implement the changes I made in [[/sandbox]] (modelled off of [[MediaWiki:Protectedinterface]])? Since user CSS/JS(ON) pages are already automatically interface-protected, it's redundant to display another protection message if the page is also full-, template-, extended-confirmed- or semi-protected by an administrator. [[User:2600 etc|2600 etc]] ([[User talk:2600 etc|talk]]) 23:22, 14 December 2025 (UTC) : First off the links in the comment in the sandbox are broken. Second off, is this really necessary? The situation where a page is both a user CSS/JS?/JSON page and manually protected seems rare enough I'm inclined to not care. [[User:Pppery|* Pppery *]] [[User talk:Pppery|<sub style="color:#800000">it has begun...</sub>]] 04:53, 15 December 2025 (UTC) == Links to editnotices for template editors and page movers == As a non-admin, I cannot edit [[Portal:Current events]]. As a template editor, I can edit [[Template:Editnotices/Page/Portal:Current events]]. However, if I view the source of [[Portal:Current events]], I don't see a link to [[Template:Editnotices/Page/Portal:Current events]], because it is actually being loaded by [[MediaWiki:Protectedpagetext]] through the redirect {{noredirect|Template:Editnotices/Protection/Portal:Current events}}, instead of the "usual" way the editnotices are loaded by [[Template:Editnotice load]]. It would be nice to also have these links to editnotices here in [[MediaWiki:Protectedpagetext]]. Maybe this page could even use {{tlx|Editnotice load/core|pagenotice{{=}}Template:Editnotices/Protection/<nowiki>{{FULLPAGENAME}}</nowiki>}}, but the /core template does not support taking <code>$1</code> and <code>$2</code> as parameters and passing them to the protection editnotice.{{Efn|text=As far as I can tell from [https://en.wikipedia.org/w/index.php?search=insource%3A%2F%5C%7B%5C%7B%5C%7B%5B12%5D%2F+subpageof%3AEditnotices&title=Special%3ASearch&profile=advanced&fulltext=1&advancedSearch-current=%7B%22fields%22%3A%7B%22subpageof%22%3A%22Editnotices%22%7D%7D&ns10=1 a search], the only users of these positional parameters are [[Template:Editnotices/Protection/Wikipedia:Requests for adminship]] and [[Template:Editnotices/Protection/Wikipedia:Requested moves]].}} Alternatively, the wikitext which generates the links (parts of [[Template:Editnotice load/core]] with the CSS classes <code>sysop-show templateeditor-show extendedmover-show</code>) could be adapted here without using the /core template. <s>Another, more weird example is [[Main Page]]: I am allowed to edit [[Template:Editnotices/Page/Main Page]], but because I am not an admin, I never see the editnotice, so there is no "opportunity" to show the links to it to me.</s> {{small|Not an example of what's being discussed, see below. —⁠[[User:Andrybak|andrybak]] ([[User talk:Andrybak|talk]]) 16:58, 24 December 2025 (UTC)}} This applies to users in the [[Wikipedia:Page mover|page mover]] and the [[Wikipedia:Template editor|template editor]] groups, both of which are allowed to edit [[Wikipedia:Editnotice|editnotices]]. This also applies to the page [[MediaWiki:Cascadeprotected]]. {{reflist-talk|title=Footnotes|group=lower-alpha}} —⁠[[User:Andrybak|andrybak]] ([[User talk:Andrybak|talk]]) 15:24, 24 December 2025 (UTC) : A protection notice (under [[Special:PrefixIndex/Template:Editnotices/Protection/|Template:Editnotices/Protection/]]) is not the same thing as an edit notice (under [[Special:PrefixIndex/Template:Editnotices/Page/|Template:Editnotices/Page/]]). It's used for cases where the default message is somehow inappropriate, often for cases where people somehow wind up trying to edit a protected template when trying to edit an article, and then the usual "submit an edit request" results in misplaced edit requests on the template's talk page. I don't know that also displaying the edit notice (if one also exists) alongside the custom protection notice would always be appropriate (and when people do want that, they could add <syntaxhighlight lang=wikitext inline>{{#switch:{{{2}}}|edit|create={{editnotice load|notice action = view}}}}</syntaxhighlight> into their custom protection notice), and linking to one when it's not displayed would be confusing and probably pointless.{{pb}}Similarly, I don't know how useful it would be to have a "Protection notice" link from every protected page. Your own confusion suggests that it might result in unnecessary and incorrect overrides of the standard protection notice. For custom notices, if only shown to people who could edit the notice, 🤷 I guess having such a link would be unlikely to do harm. [[User:Anomie|Anomie]][[User talk:Anomie|⚔]] 16:46, 24 December 2025 (UTC) ::{{tq|1=Your own confusion suggests that it might result in unnecessary and incorrect overrides of the standard protection notice.}} do you mean if a red link is shown? I think it makes sense showing the link only when the custom protection notice exists already, because it is a rare use case – just 52 subpages exist right now under [[Special:PrefixIndex/Template:Editnotices/Protection/|Template:Editnotices/Protection/]]. :: :: As for confusion between the two types – thank you for the clarification, it's helpful. I indeed confused non-existent [[Template:Editnotices/Protection/Main Page]] with [[Template:Editnotices/Page/Main Page]] in the process of writing the message above. —⁠[[User:Andrybak|andrybak]] ([[User talk:Andrybak|talk]]) 16:58, 24 December 2025 (UTC) ofynzbzw6jvxgo42oy5d1ghjzq1y693 Tempilet:Protected page text 10 1459 11013 2025-12-20T16:49:14Z en>Pppery 0 GIve template links in module namespace 11013 wikitext text/x-wiki <includeonly><div class="mw-parser-output"><!-- TODO? should probably try to restrain direct use of mw-parser-output to MW space but I'm being lazy and most of the gunk is in this template --><templatestyles src="Protected page text/styles.css"/>{{fmbox | id = mw-protectedpagetext | type = system | image = none | style = border-style:none; | text = {{mbox | type = protection | textstyle = font-weight:bold; font-size:130%; | image = [[File:{{{image|Full-protection-shackle.svg}}}|40x40px|link=|alt=]] | text = <div style="text-align: center;">{{{protection-message}}}</div> }} <div class="pptext-whywhat"> <div class="pptext-why"> <h2>Why is the page protected?</h2> <ul> <li>{{#ifexist:{{{title|{{FULLPAGENAME}}}}}|{{{protection-reason|}}}|{{{protection-reason-salt|Some titles are [[Wikipedia:Protected titles|permanently protected]] from creation because they are deemed unsuitable for inclusion on Wikipedia, because they are [[Wikipedia:Spam|spam]] or [[Wikipedia:Vandalism|vandalism]], or because they violate the [[Wikipedia:Deletion policy|deletion policy]]. The reason for this may be recorded in the [{{fullurl:Special:Log/delete|page={{urlencode:{{{title|{{FULLPAGENAME}}}}}}}}} deletion log].}}}}}</li> <li>{{{log-text|The reason for protection can be found in the [{{fullurl:Special:Log|type=protect&page={{urlencode:{{#ifeq:{{NAMESPACENUMBER}}|-1|{{#titleparts:{{{title|{{FULLPAGENAME}}}}}|0|2}}|{{{title|{{FULLPAGENAME}}}}}}}}}}} protection log]. If there are no relevant entries in the protection log, the page may have been moved after being protected.}}} </li> </ul> </div> <div class="pptext-what"> <h2>What can I do?</h2> <ul> {{#if: {{{login-message|}}} | <li>If you have a user account, [[Special:UserLogin|log in]] first. If you do not yet have an account, you may [{{fullurl:Special:UserLogin|type=signup&campaign=semiprotectednotice}} create one]; after [[Wikipedia:User access levels#Autoconfirmed users|4 days and 10 edits]], you will be able to edit semi-protected pages.</li> }}{{#ifexist:{{{title|{{FULLPAGENAME}}}}}| {{#ifeq: {{#if:{{{main-page-links|}}}|{{{title|{{FULLPAGENAME}}}}}}} | Main Page | <li class="anonymous-show">[[Wikipedia:Why create an account?|Register for an account]] if you don't already have one.</li> <li>Visit the [[Wikipedia:Sandbox|sandbox]] to make test edits.</li> <li>Check out the [[Wikipedia:Tutorial|tutorial]] to learn more about editing.</li> <li>[[Wikipedia:Main Page/Errors|Report errors on the Main Page]].</li> | {{#switch: {{#if:{{{template-links|}}}|{{NAMESPACE}}}} | Template|Module= {{#switch: {{#ifexist: {{{title|{{FULLPAGENAME}}}}}/doc | doc }}{{#ifexist: {{{title|{{FULLPAGENAME}}}}}/sandbox | sandbox }} | doc = <li>This {{lcfirst:{{NAMESPACE}}}} has a [[Wikipedia:Template documentation|documentation]] page – [[{{{title|{{FULLPAGENAME}}}}}/doc]] – which may be freely edited.</li> | sandbox = <li>This {{lcfirst:{{NAMESPACE}}}} has a [[Wikipedia:Template test cases|sandbox]] page – [[{{{title|{{FULLPAGENAME}}}}}/sandbox]] – which may be freely edited.</li> | docsandbox = <li>This {{lcfirst:{{NAMESPACE}}}} has a [[Wikipedia:Template documentation|documentation]] page – [[{{{title|{{FULLPAGENAME}}}}}/doc]] – and a [[Wikipedia:Template test cases|sandbox]] page – [[{{{title|{{FULLPAGENAME}}}}}/sandbox]] – both may be freely edited.</li> }} }}{{#ifexist: {{{title|{{FULLPAGENAME}}}}} | {{#ifeq: {{NAMESPACE}} | {{TALKSPACE}} | | {{#if: {{TALKPAGENAME}}| {{#if:{{{notalk|}}}|| <li>[[{{TALKPAGENAME}}|Discuss this page]] with others.</li> }}}} <li>For move-protected pages, see [[Wikipedia:requested moves|requested moves]].</li> }} }} {{#if: {{{hide-requestlower|}}}||<li>{{{requestlower|[[Wikipedia:Requests for page protection#Current requests for reduction in protection level|Request that the page's protection level be reduced]].</li>}}}}} <li>[[Help:Introduction|Find out more about how to get started editing Wikipedia]].</li> {{#if: {{TALKPAGENAME}} | {{#ifeq: {{{talk-protected|false}}} | true | <li>If you have noticed an error or have a suggestion for a '''simple, non-controversial''' change, please check [[{{TALKPAGENAMEE}}|the talk page]] first in case the issue is already being discussed. If the issue has not been discussed yet, you can submit an edit request at [[Wikipedia:Requests for page protection/Edit]]. Make sure to clearly describe which page your request is about, and which change exactly you are requesting.</li>| <li>If you have noticed an error or have a suggestion for a '''simple, non-controversial change''', you can submit an edit request by clicking the button below and following the instructions. {{{who-can-edit}}} may then make the change on your behalf. Please check [[{{TALKPAGENAMEE}}|the talk page]] first in case the issue is already being discussed.</li> <li class="pptext-submit"><div> {{Submit an edit request|type={{{request-type}}}}} </div></li> }} }} }} | <li>If you believe this page was deleted in violation of the [[Wikipedia:Deletion policy|deletion policy]], then you may contact the [{{fullurl:Special:Log/delete|page={{urlencode:{{{title|{{FULLPAGENAME}}}}}}}}} deleting administrator] or raise the matter of the deletion at [[Wikipedia:Deletion review|deletion review]]. Be sure to give an explanation as to why you think the page does not violate the deletion policy.</li> <li>If the page you are creating is a different topic than the previously deleted page, you may request this page be created. Please ask for help on the [[Wikipedia:Administrators' noticeboard|administrators' noticeboard]] or by {{Submit an edit request/link|type={{{request-type}}}|display=opening an edit request}}, making sure to give a full reason why this page should be created. Be sure to specify the exact title (especially by [[Help:Link|linking]] it) of the page you are trying to create, and if it might be misunderstood (for example, an article with an unusual name), consider explaining briefly what you want to do.</li> }} <li>If you wrote any text, please save it temporarily to your device until you can {{#ifexist:{{{title|{{FULLPAGENAME}}}}}|edit|create}} this page.</li> </ul> </div> </div> }}</div></includeonly><noinclude> {{documentation}} <!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --> </noinclude> fvcsvobfdz8vztd1w0mdpfahy5kkgg6 11014 11013 2026-08-26T11:32:48Z RAPTOR7762 18 1 revision imported from [[:en:Template:Protected_page_text]] 11013 wikitext text/x-wiki <includeonly><div class="mw-parser-output"><!-- TODO? should probably try to restrain direct use of mw-parser-output to MW space but I'm being lazy and most of the gunk is in this template --><templatestyles src="Protected page text/styles.css"/>{{fmbox | id = mw-protectedpagetext | type = system | image = none | style = border-style:none; | text = {{mbox | type = protection | textstyle = font-weight:bold; font-size:130%; | image = [[File:{{{image|Full-protection-shackle.svg}}}|40x40px|link=|alt=]] | text = <div style="text-align: center;">{{{protection-message}}}</div> }} <div class="pptext-whywhat"> <div class="pptext-why"> <h2>Why is the page protected?</h2> <ul> <li>{{#ifexist:{{{title|{{FULLPAGENAME}}}}}|{{{protection-reason|}}}|{{{protection-reason-salt|Some titles are [[Wikipedia:Protected titles|permanently protected]] from creation because they are deemed unsuitable for inclusion on Wikipedia, because they are [[Wikipedia:Spam|spam]] or [[Wikipedia:Vandalism|vandalism]], or because they violate the [[Wikipedia:Deletion policy|deletion policy]]. The reason for this may be recorded in the [{{fullurl:Special:Log/delete|page={{urlencode:{{{title|{{FULLPAGENAME}}}}}}}}} deletion log].}}}}}</li> <li>{{{log-text|The reason for protection can be found in the [{{fullurl:Special:Log|type=protect&page={{urlencode:{{#ifeq:{{NAMESPACENUMBER}}|-1|{{#titleparts:{{{title|{{FULLPAGENAME}}}}}|0|2}}|{{{title|{{FULLPAGENAME}}}}}}}}}}} protection log]. If there are no relevant entries in the protection log, the page may have been moved after being protected.}}} </li> </ul> </div> <div class="pptext-what"> <h2>What can I do?</h2> <ul> {{#if: {{{login-message|}}} | <li>If you have a user account, [[Special:UserLogin|log in]] first. If you do not yet have an account, you may [{{fullurl:Special:UserLogin|type=signup&campaign=semiprotectednotice}} create one]; after [[Wikipedia:User access levels#Autoconfirmed users|4 days and 10 edits]], you will be able to edit semi-protected pages.</li> }}{{#ifexist:{{{title|{{FULLPAGENAME}}}}}| {{#ifeq: {{#if:{{{main-page-links|}}}|{{{title|{{FULLPAGENAME}}}}}}} | Main Page | <li class="anonymous-show">[[Wikipedia:Why create an account?|Register for an account]] if you don't already have one.</li> <li>Visit the [[Wikipedia:Sandbox|sandbox]] to make test edits.</li> <li>Check out the [[Wikipedia:Tutorial|tutorial]] to learn more about editing.</li> <li>[[Wikipedia:Main Page/Errors|Report errors on the Main Page]].</li> | {{#switch: {{#if:{{{template-links|}}}|{{NAMESPACE}}}} | Template|Module= {{#switch: {{#ifexist: {{{title|{{FULLPAGENAME}}}}}/doc | doc }}{{#ifexist: {{{title|{{FULLPAGENAME}}}}}/sandbox | sandbox }} | doc = <li>This {{lcfirst:{{NAMESPACE}}}} has a [[Wikipedia:Template documentation|documentation]] page – [[{{{title|{{FULLPAGENAME}}}}}/doc]] – which may be freely edited.</li> | sandbox = <li>This {{lcfirst:{{NAMESPACE}}}} has a [[Wikipedia:Template test cases|sandbox]] page – [[{{{title|{{FULLPAGENAME}}}}}/sandbox]] – which may be freely edited.</li> | docsandbox = <li>This {{lcfirst:{{NAMESPACE}}}} has a [[Wikipedia:Template documentation|documentation]] page – [[{{{title|{{FULLPAGENAME}}}}}/doc]] – and a [[Wikipedia:Template test cases|sandbox]] page – [[{{{title|{{FULLPAGENAME}}}}}/sandbox]] – both may be freely edited.</li> }} }}{{#ifexist: {{{title|{{FULLPAGENAME}}}}} | {{#ifeq: {{NAMESPACE}} | {{TALKSPACE}} | | {{#if: {{TALKPAGENAME}}| {{#if:{{{notalk|}}}|| <li>[[{{TALKPAGENAME}}|Discuss this page]] with others.</li> }}}} <li>For move-protected pages, see [[Wikipedia:requested moves|requested moves]].</li> }} }} {{#if: {{{hide-requestlower|}}}||<li>{{{requestlower|[[Wikipedia:Requests for page protection#Current requests for reduction in protection level|Request that the page's protection level be reduced]].</li>}}}}} <li>[[Help:Introduction|Find out more about how to get started editing Wikipedia]].</li> {{#if: {{TALKPAGENAME}} | {{#ifeq: {{{talk-protected|false}}} | true | <li>If you have noticed an error or have a suggestion for a '''simple, non-controversial''' change, please check [[{{TALKPAGENAMEE}}|the talk page]] first in case the issue is already being discussed. If the issue has not been discussed yet, you can submit an edit request at [[Wikipedia:Requests for page protection/Edit]]. Make sure to clearly describe which page your request is about, and which change exactly you are requesting.</li>| <li>If you have noticed an error or have a suggestion for a '''simple, non-controversial change''', you can submit an edit request by clicking the button below and following the instructions. {{{who-can-edit}}} may then make the change on your behalf. Please check [[{{TALKPAGENAMEE}}|the talk page]] first in case the issue is already being discussed.</li> <li class="pptext-submit"><div> {{Submit an edit request|type={{{request-type}}}}} </div></li> }} }} }} | <li>If you believe this page was deleted in violation of the [[Wikipedia:Deletion policy|deletion policy]], then you may contact the [{{fullurl:Special:Log/delete|page={{urlencode:{{{title|{{FULLPAGENAME}}}}}}}}} deleting administrator] or raise the matter of the deletion at [[Wikipedia:Deletion review|deletion review]]. Be sure to give an explanation as to why you think the page does not violate the deletion policy.</li> <li>If the page you are creating is a different topic than the previously deleted page, you may request this page be created. Please ask for help on the [[Wikipedia:Administrators' noticeboard|administrators' noticeboard]] or by {{Submit an edit request/link|type={{{request-type}}}|display=opening an edit request}}, making sure to give a full reason why this page should be created. Be sure to specify the exact title (especially by [[Help:Link|linking]] it) of the page you are trying to create, and if it might be misunderstood (for example, an article with an unusual name), consider explaining briefly what you want to do.</li> }} <li>If you wrote any text, please save it temporarily to your device until you can {{#ifexist:{{{title|{{FULLPAGENAME}}}}}|edit|create}} this page.</li> </ul> </div> </div> }}</div></includeonly><noinclude> {{documentation}} <!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --> </noinclude> fvcsvobfdz8vztd1w0mdpfahy5kkgg6 Tempilet:Protected page text/semi 10 1460 11015 2026-06-30T21:32:11Z en>TechnoSquirrel69 0 Implementing [[Template talk:Protected page text#Protected edit request on 10 June 2026|fully protected edit request]] from [[User:Reconrabbit|Reconrabbit]] 11015 wikitext text/x-wiki {{protected page text | image = Semi-protection-shackle.svg | protection-message = This page is currently semi-protected so that only [[Wikipedia:User groups#Confirmed and autoconfirmed accounts|established]], [[Wikipedia:Why create an account?|registered users]] can {{{2}}} it. | suggestions = yes | protection-reason = While most articles can be edited by anyone, [[Wikipedia:Protection policy#Semi-protection|semi-protection]] is sometimes necessary to prevent [[Wikipedia:Vandalism|vandalism]] to popular pages. | login-message = yes | who-can-edit = An [[Wikipedia:User groups#Confirmed and autoconfirmed accounts|established user]] | request-type = {{#if:{{yesno|{{{manual-editrequest|}}}}}|manual|semi}} | attempted-action = {{{2}}} | talk-protected = {{{talk-protected|false}}} }}<noinclude> {{documentation}} <!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --> </noinclude> 2nq9zzrybrp6n0ysisi82w21dvxkxic 11016 11015 2026-08-26T11:32:48Z RAPTOR7762 18 1 revision imported from [[:en:Template:Protected_page_text/semi]] 11015 wikitext text/x-wiki {{protected page text | image = Semi-protection-shackle.svg | protection-message = This page is currently semi-protected so that only [[Wikipedia:User groups#Confirmed and autoconfirmed accounts|established]], [[Wikipedia:Why create an account?|registered users]] can {{{2}}} it. | suggestions = yes | protection-reason = While most articles can be edited by anyone, [[Wikipedia:Protection policy#Semi-protection|semi-protection]] is sometimes necessary to prevent [[Wikipedia:Vandalism|vandalism]] to popular pages. | login-message = yes | who-can-edit = An [[Wikipedia:User groups#Confirmed and autoconfirmed accounts|established user]] | request-type = {{#if:{{yesno|{{{manual-editrequest|}}}}}|manual|semi}} | attempted-action = {{{2}}} | talk-protected = {{{talk-protected|false}}} }}<noinclude> {{documentation}} <!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --> </noinclude> 2nq9zzrybrp6n0ysisi82w21dvxkxic Tempilet:Protected page text/styles.css 10 1461 11017 2022-07-22T15:19:27Z en>Xaosflux 0 fix 11017 sanitized-css text/css /* {{pp|small=y}} */ .pptext-whywhat h2 { margin-top: 1em; border-bottom: 0; font-size: 130%; font-weight: bold; padding: 0.15em; } .pptext-submit { list-style: none; display: inline; text-align: center; } .pptext-whywhat { display: flex; flex-wrap: wrap; column-gap: 2em; } .pptext-whywhat > div { flex: 1 1 400px; } 79s3kzhhzgx1t3j569x0tc254t7s0qh 11018 11017 2026-08-26T11:32:49Z RAPTOR7762 18 1 revision imported from [[:en:Template:Protected_page_text/styles.css]] 11017 sanitized-css text/css /* {{pp|small=y}} */ .pptext-whywhat h2 { margin-top: 1em; border-bottom: 0; font-size: 130%; font-weight: bold; padding: 0.15em; } .pptext-submit { list-style: none; display: inline; text-align: center; } .pptext-whywhat { display: flex; flex-wrap: wrap; column-gap: 2em; } .pptext-whywhat > div { flex: 1 1 400px; } 79s3kzhhzgx1t3j569x0tc254t7s0qh Tempilet:Submit an edit request 10 1462 11019 2017-07-13T03:51:44Z en>Xaosflux 0 Changed protection level for "[[Template:Submit an edit request]]": used in mediawiki interface ([Edit=Require administrator access] (indefinite) [Move=Require administrator access] (indefinite)) 11019 wikitext text/x-wiki {{#invoke:Submit an edit request|button}}<noinclude> {{documentation}} <!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --> </noinclude> fmz461vtigl3b81wdjepv19k95bs8u3 11020 11019 2026-08-26T11:32:49Z RAPTOR7762 18 1 revision imported from [[:en:Template:Submit_an_edit_request]] 11019 wikitext text/x-wiki {{#invoke:Submit an edit request|button}}<noinclude> {{documentation}} <!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --> </noinclude> fmz461vtigl3b81wdjepv19k95bs8u3 Module:Clickable button 828 1463 11023 2024-07-26T22:19:50Z en>HouseBlaster 0 HouseBlaster moved page [[Module:Clickable button 2]] to [[Module:Clickable button]]: match with [[tm:Clickable button]] 11023 Scribunto text/plain -- This module implements {{clickable button 2}}. local yesno = require('Module:Yesno') local delink = require('Module:Delink')._delink local p = {} function p.main(frame) local getArgs = require('Module:Arguments').getArgs local args = getArgs(frame) return p._main(args) end function p._main(args) -- If first arg or a url is not provided, -- but we have a second arg, make a button. -- Otherwise, return nothing. args.originalInput = args[1] args[1] = delink({args[1]}) if args[1] == "" then args[1] = nil end if not args[1] and not args.url then if args[2] then p.nolink = true else return '' end end local data = p.makeLinkData(args) local link = p.renderLink(args.originalInput, data) local trackingCategories = p.renderTrackingCategories(args) return link .. trackingCategories end function p.makeLinkData(args) local data = {} -- Get the link and display values, -- and find whether we are outputting -- a wikilink or a URL. if args.url then data.isUrl = true data.link = args.url if args[1] then data.display = args[1] elseif args[2] then data.display = args[2] else data.display = args.url p.urlisdisplay = true end else data.isUrl = false p.urlisdisplay = false data.link = args[1] if args[2] then data.display = args[2] else data.display = args[1] end if args[1] and args[1]:find('http') then data.isUrl = true end end if yesno(args.link) == false then p.nolink = true end -- Colours -- For the merge with {{clickable button}} local colour = args.color and args.color:lower() -- Classes local class = args.class and args.class:lower() data.classes = {} if class == 'ui-button-green' or class == 'ui-button-blue' or class == 'ui-button-red' then table.insert( data.classes, 'submit ui-button ui-widget ui-state-default ui-corner-all' .. ' ui-button-text-only ui-button-text' ) else table.insert(data.classes, 'mw-ui-button') end --If class is unset, --then let color determine class if not class then if colour == 'blue' then class = 'mw-ui-progressive' elseif colour == 'red' then class = 'mw-ui-destructive' elseif colour == 'green' then class = 'mw-ui-constructive' end end if class then table.insert(data.classes, class) end -- Styles do --[[ -- Check whether we are on the same page as we have specified in -- args[1], but not if we are using a URL link, as then args[1] is only -- a display value. If we are currently on the page specified in -- args[1] make the button colour darker so that it stands out from -- other buttons on the page. --]] local success, linkTitle, currentTitle if not data.isUrl then currentTitle = mw.title.getCurrentTitle() success, linkTitle = pcall(mw.title.new, args[1]) elseif p.urlisdisplay then currentTitle = mw.title.getCurrentTitle() end if success and linkTitle and mw.title.equals(currentTitle, linkTitle) and not p.urlisdisplay then if class == 'ui-button-blue' or class == 'mw-ui-progressive' or class == 'mw-ui-constructive' then data.backgroundColor = '#2962CB' data.color = '#fff' elseif class == 'ui-button-green' then data.backgroundColor = '#008B6D' elseif class == 'ui-button-red' or class == 'mw-ui-destructive' then data.backgroundColor = '#A6170F' else data.backgroundColor = '#CCC' data.color = '#666' end elseif p.urlisdisplay then data.dummyLink = tostring(currentTitle) end -- Add user-specified styles. data.style = args.style end return data end function p.renderLink(originalInput, data) -- Render the display span tag. local display do local displaySpan = mw.html.create('span') for i, class in ipairs(data.classes or {}) do displaySpan:addClass(class) end displaySpan :css{ ['background-color'] = data.backgroundColor, color = data.color } if data.style then displaySpan:cssText(data.style) end displaySpan:wikitext(data.display) display = tostring(displaySpan) end -- Render the link local link if originalInput and originalInput:find('|') then link = string.format('[[%s|%s]]', delink({originalInput, wikilinks = 'target'}), display) elseif p.nolink then if p.urlisdisplay then link = string.format('[[%s|%s]]', data.dummyLink, display) else link = string.format('%s', display) end else if data.isUrl then link = string.format('[%s %s]', data.link, display) else link = string.format('[[%s |%s]]', data.link, display) end end return string.format('<span class="plainlinks clickbutton">%s</span>', link) end function p.renderTrackingCategories(args) if yesno(args.category) == false then return '' end local class = args.class and args.class:lower() if class == 'ui-button-green' or class == 'ui-button-blue' or class == 'ui-button-red' then return '[[Category:Pages using old style ui-button-color]]' else return '' end end return p 2y4zqg2drz0jqpm59tyakc7koi33ehg 11024 11023 2026-08-26T11:32:49Z RAPTOR7762 18 1 revision imported from [[:en:Module:Clickable_button]] 11023 Scribunto text/plain -- This module implements {{clickable button 2}}. local yesno = require('Module:Yesno') local delink = require('Module:Delink')._delink local p = {} function p.main(frame) local getArgs = require('Module:Arguments').getArgs local args = getArgs(frame) return p._main(args) end function p._main(args) -- If first arg or a url is not provided, -- but we have a second arg, make a button. -- Otherwise, return nothing. args.originalInput = args[1] args[1] = delink({args[1]}) if args[1] == "" then args[1] = nil end if not args[1] and not args.url then if args[2] then p.nolink = true else return '' end end local data = p.makeLinkData(args) local link = p.renderLink(args.originalInput, data) local trackingCategories = p.renderTrackingCategories(args) return link .. trackingCategories end function p.makeLinkData(args) local data = {} -- Get the link and display values, -- and find whether we are outputting -- a wikilink or a URL. if args.url then data.isUrl = true data.link = args.url if args[1] then data.display = args[1] elseif args[2] then data.display = args[2] else data.display = args.url p.urlisdisplay = true end else data.isUrl = false p.urlisdisplay = false data.link = args[1] if args[2] then data.display = args[2] else data.display = args[1] end if args[1] and args[1]:find('http') then data.isUrl = true end end if yesno(args.link) == false then p.nolink = true end -- Colours -- For the merge with {{clickable button}} local colour = args.color and args.color:lower() -- Classes local class = args.class and args.class:lower() data.classes = {} if class == 'ui-button-green' or class == 'ui-button-blue' or class == 'ui-button-red' then table.insert( data.classes, 'submit ui-button ui-widget ui-state-default ui-corner-all' .. ' ui-button-text-only ui-button-text' ) else table.insert(data.classes, 'mw-ui-button') end --If class is unset, --then let color determine class if not class then if colour == 'blue' then class = 'mw-ui-progressive' elseif colour == 'red' then class = 'mw-ui-destructive' elseif colour == 'green' then class = 'mw-ui-constructive' end end if class then table.insert(data.classes, class) end -- Styles do --[[ -- Check whether we are on the same page as we have specified in -- args[1], but not if we are using a URL link, as then args[1] is only -- a display value. If we are currently on the page specified in -- args[1] make the button colour darker so that it stands out from -- other buttons on the page. --]] local success, linkTitle, currentTitle if not data.isUrl then currentTitle = mw.title.getCurrentTitle() success, linkTitle = pcall(mw.title.new, args[1]) elseif p.urlisdisplay then currentTitle = mw.title.getCurrentTitle() end if success and linkTitle and mw.title.equals(currentTitle, linkTitle) and not p.urlisdisplay then if class == 'ui-button-blue' or class == 'mw-ui-progressive' or class == 'mw-ui-constructive' then data.backgroundColor = '#2962CB' data.color = '#fff' elseif class == 'ui-button-green' then data.backgroundColor = '#008B6D' elseif class == 'ui-button-red' or class == 'mw-ui-destructive' then data.backgroundColor = '#A6170F' else data.backgroundColor = '#CCC' data.color = '#666' end elseif p.urlisdisplay then data.dummyLink = tostring(currentTitle) end -- Add user-specified styles. data.style = args.style end return data end function p.renderLink(originalInput, data) -- Render the display span tag. local display do local displaySpan = mw.html.create('span') for i, class in ipairs(data.classes or {}) do displaySpan:addClass(class) end displaySpan :css{ ['background-color'] = data.backgroundColor, color = data.color } if data.style then displaySpan:cssText(data.style) end displaySpan:wikitext(data.display) display = tostring(displaySpan) end -- Render the link local link if originalInput and originalInput:find('|') then link = string.format('[[%s|%s]]', delink({originalInput, wikilinks = 'target'}), display) elseif p.nolink then if p.urlisdisplay then link = string.format('[[%s|%s]]', data.dummyLink, display) else link = string.format('%s', display) end else if data.isUrl then link = string.format('[%s %s]', data.link, display) else link = string.format('[[%s |%s]]', data.link, display) end end return string.format('<span class="plainlinks clickbutton">%s</span>', link) end function p.renderTrackingCategories(args) if yesno(args.category) == false then return '' end local class = args.class and args.class:lower() if class == 'ui-button-green' or class == 'ui-button-blue' or class == 'ui-button-red' then return '[[Category:Pages using old style ui-button-color]]' else return '' end end return p 2y4zqg2drz0jqpm59tyakc7koi33ehg